[
  {
    "path": ".github/CODEOWNERS",
    "content": "* @rashiq @meiji163 @timvaillancourt\n"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "content": "## Contributing\n\nHi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great.\n\nThis project adheres to the [Open Code of Conduct](http://todogroup.org/opencodeofconduct/#gh-ost/opensource@github.com). By participating, you are expected to uphold this code.\n\n## Submitting a pull request\n\n0. [Fork](https://github.com/github/gh-ost/fork) and clone the repository\n0. Create a new branch: `git checkout -b my-branch-name`\n0. Make your change, add tests, and make sure the tests still pass\n0. Push to your fork and [submit a pull request](https://github.com/github/gh-ost/compare)\n0. Pat your self on the back and wait for your pull request to be reviewed and merged.\n\nHere are a few things you can do that will increase the likelihood of your pull request being accepted:\n\n- Follow the [style guide](https://golang.org/doc/effective_go.html#formatting).\n- Write tests.\n- Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests.\n- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).\n\n## Development Guidelines\n\n### Channel Safety\n\nWhen working with channels in goroutines, it's critical to prevent deadlocks that can occur when a channel receiver exits due to an error while senders are still trying to send values. Always use `base.SendWithContext` for channel sends to avoid deadlocks:\n\n```go\n// ✅ CORRECT - Uses helper to prevent deadlock\nif err := base.SendWithContext(ctx, ch, value); err != nil {\n    return err  // context was cancelled\n}\n\n// ❌ WRONG - Can deadlock if receiver exits\nch <- value\n```\n\nEven if the destination channel is buffered, deadlocks could still occur if the buffer fills up and the receiver exits, so it's important to use `SendWithContext` in those cases as well.\n\n## Resources\n\n- [Contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/)\n- [Using Pull Requests](https://help.github.com/articles/using-pull-requests/)\n- [GitHub Help](https://help.github.com)\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "> This is the place to report a bug, ask a question, or suggest an enhancement.\n\n> This is also the place to make a discussion before creating a PR.\n\n> If this is a bug report, please provide a test case (e.g., your table definition and gh-ost command) and the error output.\n\n> Please use markdown to format code or SQL: https://guides.github.com/features/mastering-markdown/\n\n> Please label the issue on the right (bug, enhancement, question, etc.).\n\n> And please understand if this issue is not addressed immediately or in a timeframe you were expecting.\n\n> Thank you!\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "## A Pull Request should be associated with an Issue.\n\n> We wish to have discussions in Issues. A single issue may be targeted by multiple PRs.\n> If you're offering a new feature or fixing anything, we'd like to know beforehand in Issues,\n> and potentially we'll be able to point development in a particular direction.\n\nRelated issue: https://github.com/github/gh-ost/issues/0123456789\n\n> Further notes in https://github.com/github/gh-ost/blob/master/.github/CONTRIBUTING.md\n> Thank you! We are open to PRs, but please understand if for technical reasons we are unable to accept each and any PR\n\n### Description\n\nThis PR [briefly explain what it does]\n\n> In case this PR introduced Go code changes:\n\n- [ ] contributed code is using same conventions as original code\n- [ ] `script/cibuild` returns with no formatting errors, build errors or unit test errors.\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "---\nversion: 2\nupdates:\n- package-ecosystem: github-actions\n  directory: \"/\"\n  schedule:\n    interval: daily\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\npermissions:\n  contents: read\n\non: [pull_request]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Set up Go\n      uses: actions/setup-go@v6\n      with:\n        go-version-file: go.mod\n\n    - name: Build\n      run: script/cibuild\n\n    - name: Upload gh-ost binary artifact\n      uses: actions/upload-artifact@v4\n      with:\n        name: gh-ost\n        path: bin/gh-ost\n"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "content": "name: \"CodeQL analysis\"\n\non: \n  push:\n    branches: [ master ]\n  pull_request:\n    branches: [ master ]\n  schedule:\n    - cron: '25 22 * * 6'\n\njobs:\n  codeql:\n    permissions:\n      actions: read\n      contents: read\n      security-events: write\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [ 'actions', 'go' ]\n\n    runs-on: ubuntu-latest # windows-latest and ubuntu-latest are supported. macos-latest is not supported at this time. \n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n        \n    - name: Initialize CodeQL \n      uses: github/codeql-action/init@v3\n      with:\n          languages: ${{ matrix.language }}\n    \n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v3\n"
  },
  {
    "path": ".github/workflows/golangci-lint.yml",
    "content": "name: golangci-lint\non:\n  push:\n    branches:\n      - master\n  pull_request:\npermissions:\n  contents: read\n  # Optional: allow read access to pull request. Use with `only-new-issues` option.\n  # pull-requests: read\njobs:\n  golangci:\n    name: lint\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-go@v6\n        with:\n          go-version-file: go.mod\n      - name: golangci-lint\n        uses: golangci/golangci-lint-action@v6\n        with:\n          version: v1.61.0\n"
  },
  {
    "path": ".github/workflows/replica-tests.yml",
    "content": "name: migration tests\npermissions:\n  contents: read\n\non: [pull_request]\n\njobs:\n  docker-tests:\n    runs-on: ubuntu-22.04\n    strategy:\n      fail-fast: false\n      matrix:\n        image: ['mysql/mysql-server:5.7.41','mysql:8.0.41','mysql:8.4.3','percona/percona-server:8.0.41-32']\n    env:\n      TEST_MYSQL_IMAGE: ${{ matrix.image }}\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Install sysbench\n        run: |\n          sudo apt-get update\n          sudo apt-get install -y sysbench\n\n      - name: Setup environment\n        run: script/docker-gh-ost-replica-tests up\n\n      - name: Run tests\n        run: script/docker-gh-ost-replica-tests run\n\n      - name: Set artifact name\n        if: failure()\n        run: |\n          ARTIFACT_NAME=$(echo \"${{ matrix.image }}\" | tr '/:' '-')\n          echo \"ARTIFACT_NAME=test-logs-${ARTIFACT_NAME}\" >> $GITHUB_ENV\n\n      - name: Upload test logs on failure\n        if: failure()\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ env.ARTIFACT_NAME }}\n          path: /tmp/gh-ost-test.*\n          retention-days: 7\n\n      - name: Teardown environment\n        if: always()\n        run: script/docker-gh-ost-replica-tests down\n"
  },
  {
    "path": ".gitignore",
    "content": "/.gopath/\n/bin/\n/libexec/\n/.vendor/\n.idea/\n*.tmp\n"
  },
  {
    "path": ".golangci.yml",
    "content": "run:\n  timeout: 5m\nlinters:\n  disable:\n    - errcheck\n  enable:\n    - bodyclose\n    - containedctx\n    - contextcheck\n    - dogsled\n    - durationcheck\n    - errname\n    - errorlint\n    - gofmt\n    - misspell\n    - nilerr\n    - nilnil\n    - noctx\n    - nolintlint\n    - nosprintfhostport\n    - prealloc\n    - rowserrcheck\n    - sqlclosecheck\n    - unconvert\n    - unparam\n    - unused\n    - wastedassign\n    - whitespace\n"
  },
  {
    "path": "Dockerfile.packaging",
    "content": "FROM golang:1.23-bullseye\n\nRUN apt-get update\nRUN apt-get install -y ruby ruby-dev rubygems build-essential\nRUN gem install fpm\nENV GOPATH=/tmp/go\n\nRUN apt-get install -y curl\nRUN apt-get install -y rsync\nRUN apt-get install -y gcc\nRUN apt-get install -y g++\nRUN apt-get install -y bash\nRUN apt-get install -y git\nRUN apt-get install -y tar\nRUN apt-get install -y rpm\n\nRUN mkdir -p $GOPATH/src/github.com/github/gh-ost\nWORKDIR $GOPATH/src/github.com/github/gh-ost\nCOPY . .\nRUN bash build.sh\n"
  },
  {
    "path": "Dockerfile.test",
    "content": "FROM golang:1.23-bullseye\nLABEL maintainer=\"github@github.com\"\n\nRUN apt-get update\nRUN apt-get install -y lsb-release\nRUN rm -rf /var/lib/apt/lists/*\n\nCOPY . /go/src/github.com/github/gh-ost\nWORKDIR /go/src/github.com/github/gh-ost\n\nCMD [\"script/test\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 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"
  },
  {
    "path": "README.md",
    "content": "# gh-ost\n\n[![ci](https://github.com/github/gh-ost/actions/workflows/ci.yml/badge.svg)](https://github.com/github/gh-ost/actions/workflows/ci.yml) [![replica-tests](https://github.com/github/gh-ost/actions/workflows/replica-tests.yml/badge.svg)](https://github.com/github/gh-ost/actions/workflows/replica-tests.yml) [![downloads](https://img.shields.io/github/downloads/github/gh-ost/total.svg)](https://github.com/github/gh-ost/releases) [![release](https://img.shields.io/github/release/github/gh-ost.svg)](https://github.com/github/gh-ost/releases)\n\n#### GitHub's online schema migration for MySQL <img src=\"doc/images/gh-ost-logo-light-160.png\" align=\"right\">\n\n `gh-ost` is a triggerless online schema migration solution for MySQL. It is testable and provides pausability, dynamic control/reconfiguration, auditing, and many operational perks.\n\n`gh-ost` produces a light workload on the master throughout the migration, decoupled from the existing workload on the migrated table.\n\nIt has been designed based on years of experience with existing solutions, and changes the paradigm of table migrations.\n\n\n\n## How?\n\nAll existing online-schema-change tools operate in similar manner: they create a _ghost_ table in the likeness of your original table, migrate that table while empty, slowly and incrementally copy data from your original table to the _ghost_ table, meanwhile propagating ongoing changes (any `INSERT`, `DELETE`, `UPDATE` applied to your table) to the _ghost_ table. Finally, at the right time, they replace your original table with the _ghost_ table.\n\n`gh-ost` uses the same pattern. However it differs from all existing tools by not using triggers. We have recognized the triggers to be the source of [many limitations and risks](doc/why-triggerless.md).\n\nInstead, `gh-ost` [uses the binary log stream](doc/triggerless-design.md) to capture table changes, and asynchronously applies them onto the _ghost_ table. `gh-ost` takes upon itself some tasks that other tools leave for the database to perform. As result, `gh-ost` has greater control over the migration process; can truly suspend it; can truly decouple the migration's write load from the master's workload.\n\nIn addition, it offers many [operational perks](doc/perks.md) that make it safer, trustworthy and fun to use.\n\n![gh-ost general flow](doc/images/gh-ost-general-flow.png)\n\n## Highlights\n\n- Build your trust in `gh-ost` by testing it on replicas. `gh-ost` will issue same flow as it would have on the master, to migrate a table on a replica, without actually replacing the original table, leaving the replica with two tables you can then compare and satisfy yourself that the tool operates correctly. This is how we continuously test `gh-ost` in production.\n- True pause: when `gh-ost` [throttles](doc/throttle.md), it truly ceases writes on master: no row copies and no ongoing events processing. By throttling, you return your master to its original workload\n- Dynamic control: you can [interactively](doc/interactive-commands.md) reconfigure `gh-ost`, even as migration still runs. You may forcibly initiate throttling.\n- Auditing: you may query `gh-ost` for status. `gh-ost` listens on unix socket or TCP.\n- Control over cut-over phase: `gh-ost` can be instructed to postpone what is probably the most critical step: the swap of tables, until such time that you're comfortably available. No need to worry about ETA being outside office hours.\n- External [hooks](doc/hooks.md) can couple `gh-ost` with your particular environment.\n\nPlease refer to the [docs](doc) for more information. No, really, read the [docs](doc).\n\n## Usage\n\nThe [cheatsheet](doc/cheatsheet.md) has it all. You may be interested in invoking `gh-ost` in various modes:\n\n- a _noop_ migration (merely testing that the migration is valid and good to go)\n- a real migration, utilizing a replica (the migration runs on the master; `gh-ost` figures out identities of servers involved. Required mode if your master uses Statement Based Replication)\n- a real migration, run directly on the master (but `gh-ost` prefers the former)\n- a real migration on a replica (master untouched)\n- a test migration on a replica, the way for you to build trust with `gh-ost`'s operation.\n\nOur tips:\n\n- [Testing above all](doc/testing-on-replica.md), try out `--test-on-replica` first few times. Better yet, make it continuous. We have multiple replicas where we iterate our entire fleet of production tables, migrating them one by one, checksumming the results, verifying migration is good.\n- For each master migration, first issue a _noop_\n- Then issue the real thing via `--execute`.\n\nMore tips:\n\n- Use `--exact-rowcount` for accurate progress indication\n- Use `--postpone-cut-over-flag-file` to gain control over cut-over timing\n- Get familiar with the [interactive commands](doc/interactive-commands.md)\n\nAlso see:\n\n- [requirements and limitations](doc/requirements-and-limitations.md)\n- [common questions](doc/questions.md)\n- [what if?](doc/what-if.md)\n- [the fine print](doc/the-fine-print.md)\n- [Community questions](https://github.com/github/gh-ost/issues?q=label%3Aquestion)\n- [Using `gh-ost` on AWS RDS](doc/rds.md)\n- [Using `gh-ost` on Azure Database for MySQL](doc/azure.md)\n\n## What's in a name?\n\nOriginally this was named `gh-osc`: GitHub Online Schema Change, in the likes of [Facebook online schema change](https://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932/) and [pt-online-schema-change](https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html).\n\nBut then a rare genetic mutation happened, and the `c` transformed into `t`. And that sent us down the path of trying to figure out a new acronym. `gh-ost` (pronounce: _Ghost_), stands for GitHub's Online Schema Transmogrifier/Translator/Transformer/Transfigurator\n\n## License\n\n`gh-ost` is licensed under the [MIT license](https://github.com/github/gh-ost/blob/master/LICENSE)\n\n`gh-ost` uses 3rd party libraries, each with their own license. These are found [here](https://github.com/github/gh-ost/tree/master/vendor).\n\n## Community\n\n`gh-ost` is released at a stable state, but with mileage to go. We are [open to pull requests](https://github.com/github/gh-ost/blob/master/.github/CONTRIBUTING.md). Please first discuss your intentions via [Issues](https://github.com/github/gh-ost/issues).\n\nWe develop `gh-ost` at GitHub and for the community. We may have different priorities than others. From time to time we may suggest a contribution that is not on our immediate roadmap but which may appeal to others.\n\nPlease see [Coding gh-ost](doc/coding-ghost.md) for a guide to getting started developing with gh-ost.\n\n## Download/binaries/source\n\n`gh-ost` is now GA and stable.\n\n`gh-ost` is available in binary format for Linux and Mac OS/X\n\n[Download latest release here](https://github.com/github/gh-ost/releases/latest)\n\n`gh-ost` is a Go project; it is built with Go `1.15` and above. To build on your own, use either:\n- [script/build](https://github.com/github/gh-ost/blob/master/script/build) - this is the same build script used by CI hence the authoritative; artifact is `./bin/gh-ost` binary.\n- [build.sh](https://github.com/github/gh-ost/blob/master/build.sh) for building `tar.gz` artifacts in `/tmp/gh-ost-release`\n\nGenerally speaking, `master` branch is stable, but only [releases](https://github.com/github/gh-ost/releases) are to be used in production.\n\n## Authors\n\n`gh-ost` is designed, authored, reviewed and tested by the database infrastructure team at GitHub:\n- [@jonahberquist](https://github.com/jonahberquist)\n- [@ggunson](https://github.com/ggunson)\n- [@tomkrouper](https://github.com/tomkrouper)\n- [@shlomi-noach](https://github.com/shlomi-noach)\n- [@jessbreckenridge](https://github.com/jessbreckenridge)\n- [@gtowey](https://github.com/gtowey)\n- [@timvaillancourt](https://github.com/timvaillancourt)\n"
  },
  {
    "path": "build.sh",
    "content": "#!/bin/bash\n\nRELEASE_VERSION=\nbuildpath=\n\nfunction setuptree() {\n  b=$( mktemp -d $buildpath/gh-ostXXXXXX ) || return 1\n  mkdir -p $b/gh-ost\n  mkdir -p $b/gh-ost/usr/bin\n  echo $b\n}\n\nfunction build {\n  osname=$1\n  osshort=$2\n  GOOS=$3\n  GOARCH=$4\n\n  if ! go version | egrep -q 'go1\\.(1[5-9]|[2-9][0-9]{1})' ; then\n    echo \"go version must be 1.15 or above\"\n    exit 1\n  fi\n\n  echo \"Building ${osname}-${GOARCH} binary\"\n  export GOOS\n  export GOARCH\n  go build -ldflags \"$ldflags\" -o $buildpath/$target go/cmd/gh-ost/main.go\n\n  if [ $? -ne 0 ]; then\n      echo \"Build failed for ${osname} ${GOARCH}.\"\n      exit 1\n  fi\n\n  (cd $buildpath && tar cfz ./gh-ost-binary-${osshort}-${GOARCH}-${timestamp}.tar.gz $target)\n\n  # build RPM and deb for Linux, x86-64 only\n  if [ \"$GOOS\" == \"linux\" ] && [ \"$GOARCH\" == \"amd64\" ] ; then\n    echo \"Creating Distro full packages\"\n    builddir=$(setuptree)\n    cp $buildpath/$target $builddir/gh-ost/usr/bin\n    cd $buildpath\n    fpm -v \"${RELEASE_VERSION}\" --epoch 1 -f -s dir -n gh-ost -m 'GitHub' --description \"GitHub's Online Schema Migrations for MySQL \" --url \"https://github.com/github/gh-ost\" --vendor \"GitHub\" --license \"Apache 2.0\" -C $builddir/gh-ost --prefix=/ -t rpm --rpm-rpmbuild-define \"_build_id_links none\" --rpm-os linux .\n    fpm -v \"${RELEASE_VERSION}\" --epoch 1 -f -s dir -n gh-ost -m 'GitHub' --description \"GitHub's Online Schema Migrations for MySQL \" --url \"https://github.com/github/gh-ost\" --vendor \"GitHub\" --license \"Apache 2.0\" -C $builddir/gh-ost --prefix=/ -t deb --deb-no-default-config-files .\n    cd -\n  fi\n}\n\nmain() {\n  if [ -z \"${RELEASE_VERSION}\" ] ; then\n    RELEASE_VERSION=$(git describe --abbrev=0 --tags | tr -d 'v')\n  fi\n  if [ -z \"${RELEASE_VERSION}\" ] ; then\n    echo \"RELEASE_VERSION must be set\"\n    exit 1\n  fi\n\n  if [ -z \"${GIT_COMMIT}\" ]; then\n    GIT_COMMIT=$(git rev-parse HEAD)\n  fi\n\n  buildpath=/tmp/gh-ost-release\n  target=gh-ost\n  timestamp=$(date \"+%Y%m%d%H%M%S\")\n  ldflags=\"-X main.AppVersion=${RELEASE_VERSION} -X main.GitCommit=${GIT_COMMIT}\"\n\n  mkdir -p ${buildpath}\n  rm -rf ${buildpath:?}/*\n  build GNU/Linux linux linux amd64\n  build GNU/Linux linux linux arm64\n  build macOS osx darwin amd64\n  build macOS osx darwin arm64\n\n  bin_files=$(find $buildpath/gh-ost* -type f -maxdepth 1)\n  echo \"Binaries found in:\"\n  echo \"$bin_files\"\n\n  echo \"Checksums:\"\n  (shasum -a256 $bin_files 2>/dev/null)\n\n  echo \"Build Success!\"\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "doc/azure.md",
    "content": "`gh-ost` has been updated to work with Azure Database for MySQL however due to GitHub does not use it, this documentation is community driven so if you find a bug please [open an issue][new_issue]!\n\n# Azure Database for MySQL\n\n## Limitations\n\n- `gh-ost` runs should be setup use [`--assume-rbr`][assume_rbr_docs] and use `binlog_row_image=FULL`.\n- Azure Database for MySQL does not use same user name suffix for master and replica, so master host, user and password need to be pointed out. \n\n## Step\n1. Change the replica server's `binlog_row_image` from `MINIMAL` to `FULL`. See [guide](https://docs.microsoft.com/en-us/azure/mysql/howto-server-parameters) on Azure document.\n2. Use your `gh-ost` always with additional 5 parameter\n```{bash}\ngh-ost \\\n--azure \\\n--assume-master-host=master-server-dns-name \\\n--master-user=\"master-user-name\" \\\n--master-password=\"master-password\" \\\n--assume-rbr \\\n[-- other parameters you need]\n```\n\n\n[new_issue]: https://github.com/github/gh-ost/issues/new\n[assume_rbr_docs]: https://github.com/github/gh-ost/blob/master/doc/command-line-flags.md#assume-rbr\n[migrate_test_on_replica_docs]: https://github.com/github/gh-ost/blob/master/doc/cheatsheet.md#c-migratetest-on-replica\n"
  },
  {
    "path": "doc/cheatsheet.md",
    "content": "# Cheatsheet\n\n### Operation modes\n\n![operation modes](images/gh-ost-operation-modes.png)\n\n\n`gh-ost` operates by connecting to potentially multiple servers, as well as imposing itself as a replica in order to streamline binary log events directly from one of those servers. There are various operation modes, which depend on your setup, configuration, and where you want to run the migration.\n\n#### a. Connect to replica, migrate on master\n\nThis is the mode `gh-ost` expects by default. `gh-ost` will investigate the replica, crawl up to find the topology's master, and will hook onto it as well. Migration will:\n\n- Read and write row-data on master\n- Read binary logs events on the replica, apply the changes onto the master\n- Investigates table format, columns & keys, count rows on the replica\n- Read internal changelog events (such as heartbeat) from the replica\n- Cut-over (switch tables) on the master\n\nIf your master works with SBR, this is the mode to work with. The replica must be configured with binary logs enabled (`log_bin`, `log_slave_updates`) and should have `binlog_format=ROW` (`gh-ost` can apply the latter for you).\n\nHowever even with RBR we suggest this is the least master-intrusive operation mode.\n\n```shell\ngh-ost \\\n--max-load=Threads_running=25 \\\n--critical-load=Threads_running=1000 \\\n--chunk-size=1000 \\\n--throttle-control-replicas=\"myreplica.1.com,myreplica.2.com\" \\\n--max-lag-millis=1500 \\\n--user=\"gh-ost\" \\\n--password=\"123456\" \\\n--host=replica.with.rbr.com \\\n--database=\"my_schema\" \\\n--table=\"my_table\" \\\n--verbose \\\n--alter=\"engine=innodb\" \\\n--switch-to-rbr \\\n--allow-master-master \\\n--cut-over=default \\\n--exact-rowcount \\\n--concurrent-rowcount \\\n--default-retries=120 \\\n--panic-flag-file=/tmp/ghost.panic.flag \\\n--postpone-cut-over-flag-file=/tmp/ghost.postpone.flag \\\n[--execute]\n```\n\nWith `--execute`, migration actually copies data and flips tables. Without it this is a `noop` run.\n\n\n#### b. Connect to master\n\nIf you don't have replicas, or do not wish to use them, you are still able to operate directly on the master. `gh-ost` will do all operations directly on the master. You may still ask it to be considerate of replication lag.\n\n- Your master must produce binary logs in RBR format.\n- You must approve this mode via `--allow-on-master`.\n\n```shell\ngh-ost \\\n--max-load=Threads_running=25 \\\n--critical-load=Threads_running=1000 \\\n--chunk-size=1000 \\\n--throttle-control-replicas=\"myreplica.1.com,myreplica.2.com\" \\\n--max-lag-millis=1500 \\\n--user=\"gh-ost\" \\\n--password=\"123456\" \\\n--host=master.with.rbr.com \\\n--allow-on-master \\\n--database=\"my_schema\" \\\n--table=\"my_table\" \\\n--verbose \\\n--alter=\"engine=innodb\" \\\n--switch-to-rbr \\\n--allow-master-master \\\n--cut-over=default \\\n--exact-rowcount \\\n--concurrent-rowcount \\\n--default-retries=120 \\\n--panic-flag-file=/tmp/ghost.panic.flag \\\n--postpone-cut-over-flag-file=/tmp/ghost.postpone.flag \\\n[--execute]\n```\n\n#### c. Migrate/test on replica\n\nThis will perform a migration on the replica. `gh-ost` will briefly connect to the master but will thereafter perform all operations on the replica without modifying anything on the master.\nThroughout the operation, `gh-ost` will throttle such that the replica is up to date.\n\n- `--migrate-on-replica` indicates to `gh-ost` that it must migrate the table directly on the replica. It will perform the cut-over phase even while replication is running.\n- `--test-on-replica` indicates the migration is for purpose of testing only. Before cut-over takes place, replication is stopped. Tables are swapped and then swapped back: your original table returns to its original place.\nBoth tables are left with replication stopped. You may examine the two and compare data.\n\nTest on replica cheatsheet:\n```shell\ngh-ost \\\n  --user=\"gh-ost\" \\\n  --password=\"123456\" \\\n  --host=replica.with.rbr.com \\\n  --test-on-replica \\\n  --database=\"my_schema\" \\\n  --table=\"my_table\" \\\n  --verbose \\\n  --alter=\"engine=innodb\" \\\n  --initially-drop-ghost-table \\\n  --initially-drop-old-table \\\n  --max-load=Threads_running=30 \\\n  --switch-to-rbr \\\n  --chunk-size=500 \\\n  --cut-over=default \\\n  --exact-rowcount \\\n  --concurrent-rowcount \\\n  --serve-socket-file=/tmp/gh-ost.test.sock \\\n  --panic-flag-file=/tmp/gh-ost.panic.flag \\\n  --execute\n```\n\n### cnf file\n\nYou may use a `cnf` file in the following format:\n\n```\n[client]\nuser=gh-ost\npassword=123456\n```\n\nYou may then remove `--user=gh-ost --password=123456` and specify `--conf=/path/to/config/file.cnf`\n\n\n### Special configurations\n\n#### Master-master\n\nMaster-master setups are supported, but at this time only active-passive. An active-active setup, where both masters write to the migrated table, is not supported at this stage. `gh-ost` requires you to acknowledge master-master via:\n\n```\ngh-ost --allow-master-master\n```\n\n`gh-ost` will pick one of the masters to work on. You may additionally force `gh-ost` to pick a particular master of your choice:\n\n```\ngh-ost --allow-master-master --assume-master-host=a.specific.master.com\n```\n\n#### Tungsten\n\nTopologies using _tungsten replicator_ are peculiar in that the participating servers are not actually aware they are replicating. The _tungsten replicator_ looks just like another app issuing queries on those hosts. `gh-ost` is unable to identify that a server participates in a _tungsten_ topology.\n\nIf you choose to migrate directly on master (see above), there's nothing special you need to do.\n\nIf you choose to migrate via replica, then you need to make sure Tungsten is configured with log-slave-updates parameter (note this is different from MySQL's own log-slave-updates parameter), otherwise changes will not be in the replica's binlog, causing data to be corrupted after table swap. You must also supply the identity of the master, and indicate this is a tungsten setup, as follows:\n\n```\ngh-ost --tungsten --assume-master-host=the.topology.master.com\n```\n\nAlso note that `--switch-to-rbr` does not work for a Tungsten setup as the replication process is external, so you need to make sure `binlog_format` is set to ROW before Tungsten Replicator connects to the server and starts applying events from the master.\n\n### Concurrent migrations\n\nIt is possible to run concurrent `gh-ost` migrations.\n\n- Never on the exact same table.\n- If running on different replicas, (e.g. `table1` on `replica1` and `table2` on `replica2`) then no further configuration required.\n- If running from same server (binaries run on same server, regardless of which replica/replicas are used):\n  - Make sure not to specify same `-serve-socket-file` (or let `gh-ost` pick one for you).\n  - You may choose to use same `-throttle-flag-file` (preferably use `-throttle-additional-flag-file`, this is exactly the reason there's two, this latter file is for sharing).\n  - You may choose to use same `-panic-flag-file`. This all depends on your flow and how you'd like to control your migrations.\n- If using same inspected box (either master or replica, `--host=everyone.uses.this.host`) then for each `gh-ost` process you must also provide a different, unique `--replica-server-id`. Optionally use process ID (`$$` in shell) ; but it's on you to choose a number that does not collide with another `gh-ost` or another running replica.\n"
  },
  {
    "path": "doc/coding-ghost.md",
    "content": "# Getting started with gh-ost development.\n\n## Overview\n\nGetting started with gh-ost development is simple!\n\n- First obtain the repository with `git clone` or `go get`.\n- From inside of the repository run `script/cibuild`.\n- This will bootstrap the environment if needed, format the code, build the code, and then run the unit test.\n\n## CI build workflow\n\n`script/cibuild` performs the following actions will bootstrap the environment to build `gh-ost` correctly, build, perform syntax checks and run unit tests.\n\nIf additional steps are needed, please add them into this workflow so that the workflow remains simple.\n\n## `golang-ci` linter\n\nTo enfore best-practices, Pull Requests are automatically linted by [`golang-ci`](https://golangci-lint.run/). The linter config is located at [`.golangci.yml`](https://github.com/github/gh-ost/blob/master/.golangci.yml) and the `golangci-lint` GitHub Action is located at [`.github/workflows/golangci-lint.yml`](https://github.com/github/gh-ost/blob/master/.github/workflows/golangci-lint.yml).\n\nTo run the `golang-ci` linters locally _(recommended before push)_, use `script/lint`.\n\n## Notes:\n\nCurrently, `script/ensure-go-installed` will install `go` for Mac OS X and Linux. We welcome PR's to add other platforms.\n"
  },
  {
    "path": "doc/command-line-flags.md",
    "content": "# Command line flags\n\nA more in-depth discussion of various `gh-ost` command line flags: implementation, implication, use cases.\n\n### aliyun-rds\n\nAdd this flag when executing on Aliyun RDS.\n\n### allow-zero-in-date\n\nAllows the user to make schema changes that include a zero date or zero in date (e.g. adding a `datetime default '0000-00-00 00:00:00'` column), even if global `sql_mode` on MySQL has `NO_ZERO_IN_DATE,NO_ZERO_DATE`.\n\n###  azure\n\nAdd this flag when executing on Azure Database for MySQL.\n\n### allow-master-master\n\nSee [`--assume-master-host`](#assume-master-host).\n\n### allow-on-master\n\nBy default, `gh-ost` would like you to connect to a replica, from where it figures out the master by itself. This wiring is required should your master execute using `binlog_format=STATEMENT`.\n\nIf, for some reason, you do not wish `gh-ost` to connect to a replica, you may connect it directly to the master and approve this via `--allow-on-master`.\n\n### allow-setup-metadata-lock-instruments\n\n`--allow-setup-metadata-lock-instruments` allows gh-ost to enable the [`metadata_locks`](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-metadata-locks-table.html) table in `performance_schema`, if it is not already enabled. This is used for a safety check before cut-over.\nSee also: [`skip-metadata-lock-check`](#skip-metadata-lock-check)\n\n### approve-renamed-columns\n\nWhen your migration issues a column rename (`change column old_name new_name ...`) `gh-ost` analyzes the statement to try and associate the old column name with new column name. Otherwise, the new structure may also look like some column was dropped and another was added.\n\n`gh-ost` will print out what it thinks the _rename_ implied, but will not issue the migration unless you provide with `--approve-renamed-columns`.\n\nIf you think `gh-ost` is mistaken and that there's actually no _rename_ involved, you may pass [`--skip-renamed-columns`](#skip-renamed-columns) instead. This will cause `gh-ost` to disassociate the column values; data will not be copied between those columns.\n\n### assume-master-host\n\n`gh-ost` infers the identity of the master server by crawling up the replication topology. You may explicitly tell `gh-ost` the identity of the master host via `--assume-master-host=the.master.com`. This is useful in:\n\n- _master-master_ topologies (together with [`--allow-master-master`](#allow-master-master)), where `gh-ost` can arbitrarily pick one of the co-masters, and you prefer that it picks a specific one\n- _tungsten replicator_ topologies (together with [`--tungsten`](#tungsten)), where `gh-ost` is unable to crawl and detect the master\n\n### assume-rbr\n\nIf you happen to _know_ your servers use RBR (Row Based Replication, i.e. `binlog_format=ROW`), you may specify `--assume-rbr`. This skips a verification step where `gh-ost` would issue a `STOP SLAVE; START SLAVE`.\nSkipping this step means `gh-ost` would not need the `SUPER` privilege in order to operate.\nYou may want to use this on Amazon RDS.\n\n### attempt-instant-ddl\n\nMySQL 8.0 supports \"instant DDL\" for some operations. If an alter statement can be completed with instant DDL, only a metadata change is required internally. Instant operations include:\n\n- Adding a column\n- Dropping a column\n- Dropping an index\n- Extending a varchar column\n- Adding a virtual generated column\n\nIt is not reliable to parse the `ALTER` statement to determine if it is instant or not. This is because the table might be in an older row format, or have some other incompatibility that is difficult to identify.\n\n`--attempt-instant-ddl` is disabled by default, but the risks of enabling it are relatively minor: `gh-ost` may need to acquire a metadata lock at the start of the operation. This is not a problem for most scenarios, but it could be a problem for users that start the DDL during a period with long running transactions.\n\n`gh-ost` will automatically fallback to the normal DDL process if the attempt to use instant DDL is unsuccessful.\n\n### binlogsyncer-max-reconnect-attempts\n`--binlogsyncer-max-reconnect-attempts=0`, the maximum number of attempts to re-establish a broken inspector connection for sync binlog. `0` or `negative number` means infinite retry, default `0`\n\n### checkpoint\n\n`--checkpoint` enables periodic checkpoints of the gh-ost's state so that gh-ost can resume a migration from the checkpoint with `--resume`. Checkpoints are written to a separate table named `_${original_table_name}_ghk`. It is recommended to use with `--gtid` for checkpoints.\nSee also: [`resuming-migrations`](resume.md)\n\n### checkpoint-seconds\n\n`--checkpoint-seconds` specifies the seconds between checkpoints. Default is 300.\n\n### conf\n\n`--conf=/path/to/my.cnf`: file where credentials are specified. Should be in (or contain) the following format:\n\n  ```\n[client]\nuser=gromit\npassword=123456\n  ```\n\n### concurrent-rowcount\n\nDefaults to `true`. See [`exact-rowcount`](#exact-rowcount)\n\n### critical-load\n\nComma delimited status-name=threshold, same format as [`--max-load`](#max-load).\n\n`--critical-load` defines a threshold that, when met, `gh-ost` panics and bails out. The default behavior is to bail out immediately when meeting this threshold.\n\nThis may sometimes lead to migrations bailing out on a very short spike, that, while in itself is impacting production and is worth investigating, isn't reason enough to kill a 10-hour migration.\n\n### critical-load-hibernate-seconds\n\nWhen `--critical-load-hibernate-seconds` is non-zero (e.g. `--critical-load-hibernate-seconds=300`), `critical-load` does not panic and bail out; instead, `gh-ost` goes into hibernation for the specified duration. It will not read/write anything from/to any server during this time.  Execution then continues upon waking from hibernation.\n\nIf `critical-load` is met again, `gh-ost` will repeat this cycle, and never panic and bail out.\n\n### critical-load-interval-millis\n\nWhen `--critical-load-interval-millis` is specified (e.g. `--critical-load-interval-millis=2500`), `gh-ost` gives a second chance: when it meets `critical-load` threshold, it doesn't bail out. Instead, it starts a timer (in this example: `2.5` seconds) and re-checks `critical-load` when the timer expires. If `critical-load` is met again, `gh-ost` panics and bails out. If not, execution continues.\n\nThis is somewhat similar to a Nagios `n`-times test, where `n` in our case is always `2`.\n\n### cut-over\n\nOptional. Default is `safe`. See more discussion in [`cut-over`](cut-over.md)\n\n### cut-over-lock-timeout-seconds\n\nDefault `3`.  Max number of seconds to hold locks on tables while attempting to cut-over (retry attempted when lock exceeds timeout).\n\n### discard-foreign-keys\n\n**Danger**: this flag will _silently_ discard any foreign keys existing on your table.\n\nAt this time (10-2016) `gh-ost` does not support foreign keys on migrated tables (it bails out when it notices a FK on the migrated table). However, it is able to support _dropping_ of foreign keys via this flag. If you're trying to get rid of foreign keys in your environment, this is a useful flag.\n\nSee also: [`skip-foreign-key-checks`](#skip-foreign-key-checks)\n\n\n### dml-batch-size\n\n`gh-ost` reads event from the binary log and applies them onto the _ghost_ table. It does so in batched writes: grouping multiple events to apply in a single transaction. This gives better write throughput as we don't need to sync the transaction log to disk for each event.\n\nThe `--dml-batch-size` flag controls the size of the batched write. Allowed values are `1 - 1000`, where `1` means no batching (every event from the binary log is applied onto the _ghost_ table on its own transaction). Default value is `10`.\n\nWhy is this behavior configurable? Different workloads have different characteristics. Some workloads have very large writes, such that aggregating even `50` writes into a transaction makes for a significant transaction size. On other workloads write rate is high such that one just can't allow for a hundred more syncs to disk per second. The default value of `10` is a modest compromise that should probably work very well for most workloads. Your mileage may vary.\n\nNoteworthy is that setting `--dml-batch-size` to higher value _does not_ mean `gh-ost` blocks or waits on writes. The batch size is an upper limit on transaction size, not a minimal one. If `gh-ost` doesn't have \"enough\" events in the pipe, it does not wait on the binary log, it just writes what it already has. This conveniently suggests that if write load is light enough for `gh-ost` to only see a few events in the binary log at a given time, then it is also light enough for `gh-ost` to apply a fraction of the batch size.\n\n### exact-rowcount\n\nA `gh-ost` execution need to copy whatever rows you have in your existing table onto the ghost table. This can and often will be, a large number. Exactly what that number is?\n`gh-ost` initially estimates the number of rows in your table by issuing an `explain select * from your_table`. This will use statistics on your table and return with a rough estimate. How rough? It might go as low as half or as high as double the actual number of rows in your table. This is the same method as used in [`pt-online-schema-change`](https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html).\n\n`gh-ost` also supports the `--exact-rowcount` flag. When this flag is given, two things happen:\n- An initial, authoritative `select count(*) from your_table`.\n  This query may take a long time to complete, but is performed before we begin the massive operations.\n  When [`--concurrent-rowcount`](#concurrent-rowcount) is also specified, this runs in parallel to row copy.\n  Note: [`--concurrent-rowcount`](#concurrent-rowcount) now defaults to `true`.\n- A continuous update to the estimate as we make progress applying events.\n  We heuristically update the number of rows based on the queries we process from the binlogs.\n\nWhile the ongoing estimated number of rows is still heuristic, it's almost exact, such that the reported  [ETA](understanding-output.md) or percentage progress is typically accurate to the second throughout a multiple-hour operation.\n\n### execute\n\nWithout this parameter, migration is a _noop_: testing table creation and validity of migration, but not touching data.\n\n### force-named-cut-over\n\nIf given, a `cut-over` command must name the migrated table, or else ignored.\n\n### force-named-panic\n\nIf given, a `panic` command must name the migrated table, or else ignored.\n\n### force-table-names\n\nTable name prefix to be used on the temporary tables.\n\n### gcp\n\nAdd this flag when executing on a 1st generation Google Cloud Platform (GCP).\n\n### gtid\n\nAdd this flag to enable support for [MySQL replication GTIDs](https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html) for replication positioning. This requires `gtid_mode` and `enforce_gtid_consistency` to be set to `ON`.\n\n### heartbeat-interval-millis\n\nDefault 100. See [`subsecond-lag`](subsecond-lag.md) for details.\n\n### hooks-status-interval\n\nDefaults to 60 seconds. Configures how often the `gh-ost-on-status` hook is called, see [`hooks`](hooks.md) for full details on how to use hooks.\n\n### initially-drop-ghost-table\n\n`gh-ost` maintains two tables while migrating: the _ghost_ table (which is synced from your original table and finally replaces it) and a changelog table, which is used internally for bookkeeping. By default, it panics and aborts if it sees those tables upon startup. Provide `--initially-drop-ghost-table` and `--initially-drop-old-table` to let `gh-ost` know it's OK to drop them beforehand.\n\nWe think `gh-ost` should not take chances or make assumptions about the user's tables. Dropping tables can be a dangerous, locking operation. We let the user explicitly approve such operations.\n\n### initially-drop-old-table\n\nSee [`initially-drop-ghost-table`](#initially-drop-ghost-table)\n\n### initially-drop-socket-file\n\nDefault False. Should `gh-ost` forcibly delete an existing socket file. Be careful: this might drop the socket file of a running migration!\n\n### max-lag-millis\n\nOn a replication topology, this is perhaps the most important migration throttling factor: the maximum lag allowed for migration to work. If lag exceeds this value, migration throttles.\n\nWhen using [Connect to replica, migrate on master](cheatsheet.md#a-connect-to-replica-migrate-on-master), this lag is primarily tested on the very replica `gh-ost` operates on. Lag is measured by checking the heartbeat events injected by `gh-ost` itself on the utility changelog table. That is, to measure this replica's lag, `gh-ost` doesn't need to issue `show slave status` nor have any external heartbeat mechanism.\n\nWhen [`--throttle-control-replicas`](#throttle-control-replicas) is provided, throttling also considers lag on specified hosts. Lag measurements on listed hosts is done by querying `gh-ost`'s _changelog_ table, where `gh-ost` injects a heartbeat.\n\nWhen using on master or when `--allow-on-master` is provided, `max-lag-millis` is also considered a threshold for starting the cutover stage of the migration. If the row copy is complete and the heartbeat lag is less than `max-lag-millis` cutover phase of the migration will start. \n\nSee also: [Sub-second replication lag throttling](subsecond-lag.md)\n\n### max-load\n\nList of metrics and threshold values; topping the threshold of any will cause throttler to kick in. See also: [`throttling`](throttle.md#status-thresholds)\n\n### migrate-on-replica\n\nTypically `gh-ost` is used to migrate tables on a master. If you wish to only perform the migration in full on a replica, connect `gh-ost` to said replica and pass `--migrate-on-replica`. `gh-ost` will briefly connect to the master but otherwise will make no changes on the master. Migration will be fully executed on the replica, while making sure to maintain a small replication lag.\n\n### panic-on-warnings\n\nWhen this flag is set, `gh-ost` will panic when SQL warnings indicating data loss are encountered when copying data. This flag helps prevent data loss scenarios with migrations touching unique keys, column collation and types, as well as `NOT NULL` constraints, where `MySQL` will silently drop inserted rows that no longer satisfy the updated constraint (also dependent on the configured `sql_mode`).\n\nWhile `panic-on-warnings` is currently disabled by defaults, it will default to `true` in a future version of `gh-ost`.\n\n### postpone-cut-over-flag-file\n\nIndicate a file name, such that the final [cut-over](cut-over.md) step does not take place as long as the file exists.\nWhen this flag is set, `gh-ost` expects the file to exist on startup, or else tries to create it. `gh-ost` exits with error if the file does not exist and `gh-ost` is unable to create it.\nWith this flag set, the migration will cut-over upon deletion of the file or upon `cut-over` [interactive command](interactive-commands.md).\n\n### replica-server-id\n\nDefaults to 99999. If you run multiple migrations then you must provide a different, unique `--replica-server-id` for each `gh-ost` process.\nOptionally involve the process ID, for example: `--replica-server-id=$((1000000000+$$))`.\n\nIt's on you to choose a number that does not collide with another `gh-ost` or another running replica.\nSee also: [`concurrent-migrations`](cheatsheet.md#concurrent-migrations) on the cheatsheet.\n\n### resume\n\n`--resume` attempts to resume a migration that was previously interrupted from the last checkpoint. The first `gh-ost` invocation must run with `--checkpoint` and have successfully written a checkpoint in order for `--resume` to work.\nSee also: [`resuming-migrations`](resume.md)\n\n### serve-socket-file\n\nDefaults to an auto-determined and advertised upon startup file. Defines Unix socket file to serve on.\n### skip-foreign-key-checks\n\nBy default `gh-ost` verifies no foreign keys exist on the migrated table. On servers with large number of tables this check can take a long time. If you're absolutely certain no foreign keys exist (table does not reference other table nor is referenced by other tables) and wish to save the check time, provide with `--skip-foreign-key-checks`.\n\n### skip-metadata-lock-check\n\nBy default `gh-ost` performs a check before the cut-over to ensure the rename session holds the exclusive metadata lock on the table. In case `performance_schema.metadata_locks` cannot be enabled on your setup, this check can be skipped with `--skip-metadata-lock-check`. \n:warning: Disabling this check involves the small chance of data loss in case a session accesses the ghost table during cut-over. See https://github.com/github/gh-ost/pull/1536 for details.\n\nSee also: [`allow-setup-metadata-lock-instruments`](#allow-setup-metadata-lock-instruments)\n\n### skip-strict-mode\n\nBy default `gh-ost` enforces STRICT_ALL_TABLES sql_mode as a safety measure. In some cases this changes the behaviour of other modes (namely ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, and NO_ZERO_IN_DATE) which may lead to errors during migration. Use `--skip-strict-mode` to explicitly tell `gh-ost` not to enforce this. **Danger** This may have some unexpected disastrous side effects.\n\n### skip-renamed-columns\n\nSee [`approve-renamed-columns`](#approve-renamed-columns)\n\n### ssl\n\nBy default `gh-ost` does not use ssl/tls connections to the database servers when performing migrations. This flag instructs `gh-ost` to use encrypted connections. If enabled, `gh-ost` will use the system's ca certificate pool for server certificate verification. If a different certificate is needed for server verification, see `--ssl-ca`. If you wish to skip server verification, but still use encrypted connections, use with `--ssl-allow-insecure`.\n\n### ssl-allow-insecure\n\nAllows `gh-ost` to connect to the MySQL servers using encrypted connections, but without verifying the validity of the certificate provided by the server during the connection. Requires `--ssl`.\n\n### ssl-ca\n\n`--ssl-ca=/path/to/ca-cert.pem`: ca certificate file (in PEM format) to use for server certificate verification. If specified, the default system ca cert pool will not be used for verification, only the ca cert provided here. Requires `--ssl`.\n\n### ssl-cert\n\n`--ssl-cert=/path/to/ssl-cert.crt`: SSL public key certificate file (in PEM format).\n\n### ssl-key\n\n`--ssl-key=/path/to/ssl-key.key`: SSL private key file (in PEM format).\n\n### storage-engine\nDefault is `innodb`, and `rocksdb` support is currently experimental. InnoDB and RocksDB are both transactional engines, supporting both shared and exclusive row locks.\n\nBut RocksDB currently lacks a few features support compared to InnoDB:\n- Gap Locks\n- Foreign Key\n- Generated Columns\n- Spatial\n- Geometry\n\nWhen `--storage-engine=rocksdb`, `gh-ost` will make some changes necessary (e.g. sets isolation level to `READ_COMMITTED`) to support RocksDB.\n\n### charset\nThe default charset for the database connection is utf8mb4, utf8, latin1. The ability to specify character set and collation is supported, eg: utf8mb4_general_ci,utf8_general_ci,latin1. \n\n### test-on-replica\n\nIssue the migration on a replica; do not modify data on master. Useful for validating, testing and benchmarking. See [`testing-on-replica`](testing-on-replica.md)\n\n### test-on-replica-skip-replica-stop\n\nDefault `False`. When `--test-on-replica` is enabled, do not issue commands stop replication (requires `--test-on-replica`).\n\n### throttle-control-replicas\n\nProvide a command delimited list of replicas; `gh-ost` will throttle when any of the given replicas lag beyond [`--max-lag-millis`](#max-lag-millis). The list can be queried and updated dynamically via [interactive commands](interactive-commands.md)\n\n### throttle-http\n\nProvide an HTTP endpoint; `gh-ost` will issue `HEAD` requests on given URL and throttle whenever response status code is not `200`. The URL can be queried and updated dynamically via [interactive commands](interactive-commands.md). Empty URL disables the HTTP check.\n\n### throttle-http-interval-millis\n\nDefaults to 100. Configures the HTTP throttle check interval in milliseconds.\n\n### throttle-http-timeout-millis\n\nDefaults to 1000 (1 second). Configures the HTTP throttler check timeout in milliseconds.\n\n### timestamp-old-table\n\nMakes the _old_ table include a timestamp value. The _old_ table is what the original table is renamed to at the end of a successful migration. For example, if the table is `gh_ost_test`, then the _old_ table would normally be `_gh_ost_test_del`. With `--timestamp-old-table` it would be, for example, `_gh_ost_test_20170221103147_del`.\n\n### tungsten\n\nSee [`tungsten`](cheatsheet.md#tungsten) on the cheatsheet.\n"
  },
  {
    "path": "doc/cut-over.md",
    "content": "# Cut-over step\n\nThe cut-over is the final major step of the migration: it's the moment where your original table is pushed aside, and the ghost table (the one we secretly altered and operated on throughout the process) takes its place.\n\nMySQL poses some limitations on how the table swap can take place. While it supports an atomic swap, it does not allow a connection to swap tables it holds under lock.\n\nThe [facebook OSC](https://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932/) tool documents this nicely. Look for **\"Cut-over phase\"**. The Facebook solution uses a non-atomic swap: the original table is first renamed and pushed aside, then the ghost table is renamed to take its place. In between the two renames there's a brief period of time where your table just does not exist, and queries will fail.\n\n`gh-ost` solves this by using an atomic, two-step blocking swap: while one connection holds the lock, another attempts the atomic `RENAME`. The `RENAME` is guaranteed to not be executed prematurely by positioning a sentry table which blocks the `RENAME` operation until `gh-ost` is satisfied all is in order.\n\nThis solution either:\n- executes successfully, in which case the tables are swapped atomically and pending connections are blocked for a brief period of time, proceeding to operate on the newly migrated table\n- or fails, due to timeout or death of some connection, in which case we are naturally returning to pre-cut-over phase, where the original table is still in place and accessible. This releases the pending connections, which are able again to write to the table, and `gh-ost` is then able to make another attempt at the cut-over.\n\nAlso note:\n- With `--migrate-on-replica` the cut-over is executed in exactly the same way as on master.\n- With `--test-on-replica` the replication is first stopped; then the cut-over is executed just as on master, but then reverted (tables rename forth then back again).\n\nInternals of the atomic cut-over are discussed in [Issue #82](https://github.com/github/gh-ost/issues/82).\n\nAt this time the command-line argument `--cut-over` is supported, and defaults to the atomic cut-over algorithm described above. Also supported is `--cut-over=two-step`, which uses the FB non-atomic algorithm. We recommend using the default cut-over that has been battle tested in our production environments.\n"
  },
  {
    "path": "doc/hooks.md",
    "content": "# Hooks\n\n`gh-ost` supports _hooks_: external processes which `gh-ost` executes at particular points of interest.\n\nUse cases include:\n\n- You wish to be notified by mail when a migration completes/fails\n- You wish to be notified when `gh-ost` postpones cut-over (at your demand), thus ready to complete (at your leisure)\n- RDS users who wish to `--test-on-replica`, but who cannot have `gh-ost` issue a `STOP SLAVE`, would use a hook to command RDS to stop replication\n- Send a status message to your chatops every hour\n- Perform cleanup on the _ghost_ table (drop/rename/nibble) once migration completes\n- etc.\n\n`gh-ost` defines certain points of interest (event types), and executes hooks at those points.\n\nNotes:\n\n- You may have more than one hook per event type.\n- `gh-ost` will invoke relevant hooks _sequentially_ and _synchronously_\n  - thus, you would generally like the hooks to execute as fast as possible, or otherwise issue tasks in the background\n- A hook returning with error code will propagate the error in `gh-ost`. Thus, you are able to force `gh-ost` to fail migration on your conditions.\n  - Make sure to only return an error code when you do indeed wish to fail the rest of the migration\n\n### Creating hooks\n\nAll hooks are expected to reside in a single directory. This directory is indicated by `--hooks-path`. When not provided, no hooks are executed.\n\n`gh-ost` will dynamically search for hooks in said directory. You may add and remove hooks to/from this directory as `gh-ost` makes progress (though likely you don't want to). Hook files are expected to be executable processes.\n\nIn an effort to simplify code and to standardize usage, `gh-ost` expects hooks in explicit naming conventions. As an example, the `onStartup` hook expects processes named `gh-ost-on-startup*`. It will match and accept files named:\n\n- `gh-ost-on-startup`\n- `gh-ost-on-startup--send-notification-mail`\n- `gh-ost-on-startup12345`\n- etc.\n\nThe full list of supported hooks is best found in code: [hooks.go](https://github.com/github/gh-ost/blob/master/go/logic/hooks.go). Documentation will always be a bit behind. At this time, though, the following are recognized:\n\n- `gh-ost-on-startup`\n- `gh-ost-on-validated`\n- `gh-ost-on-rowcount-complete`\n- `gh-ost-on-before-row-copy`\n- `gh-ost-on-status`\n- `gh-ost-on-interactive-command`\n- `gh-ost-on-row-copy-complete`\n- `gh-ost-on-stop-replication`\n- `gh-ost-on-start-replication`\n- `gh-ost-on-begin-postponed`\n- `gh-ost-on-before-cut-over`\n- `gh-ost-on-success`\n- `gh-ost-on-failure`\n- `gh-ost-on-batch-copy-retry`\n\n### Context\n\n`gh-ost` will set environment variables per hook invocation. Hooks are then able to read those variables, indicating schema name, table name, `alter` statement, migrated host name etc. Some variables are available on all hooks, and some are available on relevant hooks.\n\nThe following variables are available on all hooks:\n\n- `GH_OST_DATABASE_NAME`\n- `GH_OST_TABLE_NAME`\n- `GH_OST_GHOST_TABLE_NAME`\n- `GH_OST_OLD_TABLE_NAME` - the name the original table will be renamed to at the end of operation\n- `GH_OST_DDL`\n- `GH_OST_ELAPSED_SECONDS` - total runtime\n- `GH_OST_ELAPSED_COPY_SECONDS` - row-copy time (excluding startup, row-count and postpone time)\n- `GH_OST_ESTIMATED_ROWS` - estimated total rows in table\n- `GH_OST_COPIED_ROWS` - number of rows copied by `gh-ost`\n- `GH_OST_INSPECTED_LAG` - lag in seconds (floating point) of inspected server\n- `GH_OST_HEARTBEAT_LAG` - lag in seconds (floating point) of heartbeat\n- `GH_OST_PROGRESS` - progress pct ([0..100], floating point) of migration\n- `GH_OST_ETA_SECONDS` - estimated duration until migration finishes in seconds\n- `GH_OST_MIGRATED_HOST`\n- `GH_OST_INSPECTED_HOST`\n- `GH_OST_EXECUTING_HOST`\n- `GH_OST_HOOKS_HINT` - copy of `--hooks-hint` value\n- `GH_OST_HOOKS_HINT_OWNER` - copy of `--hooks-hint-owner` value\n- `GH_OST_HOOKS_HINT_TOKEN` - copy of `--hooks-hint-token` value\n- `GH_OST_DRY_RUN` - whether or not the `gh-ost` run is a dry run\n- `GH_OST_REVERT` - whether or not `gh-ost` is running in revert mode\n\nThe following variable are available on particular hooks:\n\n- `GH_OST_COMMAND` is only available in `gh-ost-on-interactive-command`\n- `GH_OST_STATUS` is only available in `gh-ost-on-status`\n- `GH_OST_LAST_BATCH_COPY_ERROR` is only available in `gh-ost-on-batch-copy-retry`\n\n### Examples\n\nSee [sample hooks](https://github.com/github/gh-ost/tree/master/resources/hooks-sample), as `bash` implementation samples.\n"
  },
  {
    "path": "doc/interactive-commands.md",
    "content": "# Interactive commands\n\n`gh-ost` is designed to be operations friendly. To that effect, it allows the user to control its behavior even while it is running.\n\n### Interactive interfaces\n\n`gh-ost` listens on:\n\n- Unix socket file: either provided via `--serve-socket-file` or determined by `gh-ost`, this interface is always up.\n  When self-determined, `gh-ost` will advertise the identify of socket file upon start up and throughout the migration.\n- TCP: if `--serve-tcp-port` is provided\n\nBoth interfaces may serve at the same time. Both respond to simple text command, which makes it easy to interact via shell.\n\n### Known commands\n\n- `help`: shows a brief list of available commands\n- `status`: returns a detailed status summary of migration progress and configuration\n- `sup`: returns a brief status summary of migration progress\n- `cpu-profile`: returns a base64-encoded [`runtime/pprof`](https://pkg.go.dev/runtime/pprof) CPU profile using a duration, default: `30s`. Comma-separated options `gzip` and/or `block` (blocked profile) may follow the profile duration\n- `coordinates`: returns recent (though not exactly up to date) binary log coordinates of the inspected server\n- `applier`: returns the hostname of the applier\n- `inspector`: returns the hostname of the inspector\n- `chunk-size=<newsize>`: modify the `chunk-size`; applies on next running copy-iteration\n- `dml-batch-size=<newsize>`: modify the `dml-batch-size`; applies on next applying of binary log events\n- `max-lag-millis=<max-lag>`: modify the maximum replication lag threshold (milliseconds, minimum value is `100`, i.e. `0.1` second)\n- `max-load=<max-load-thresholds>`: modify the `max-load` config; applies on next running copy-iteration\n  - The `max-load` format must be: `some_status=<numeric-threshold>[,some_status=<numeric-threshold>...]`'\n  - For example: `Threads_running=50,threads_connected=1000`, and you would then write/echo `max-load=Threads_running=50,threads_connected=1000` to the socket.\n- `critical-load=<critical-load-thresholds>`: modify the `critical-load` config (exceeding these thresholds aborts the operation)\n  - The `critical-load` format must be: `some_status=<numeric-threshold>[,some_status=<numeric-threshold>...]`'\n  - For example: `Threads_running=1000,threads_connected=5000`, and you would then write/echo `critical-load=Threads_running=1000,threads_connected=5000` to the socket.\n- `nice-ratio=<ratio>`: change _nice_ ratio: 0 for aggressive (not nice, not sleeping), positive integer `n`:\n  - For any `1ms` spent copying rows, spend `n*1ms` units of time sleeping.\n  - Examples: assume a single rows chunk copy takes `100ms` to complete.\n    - `nice-ratio=0.5` will cause `gh-ost` to sleep for `50ms` immediately following.\n    - `nice-ratio=1` will cause `gh-ost` to sleep for `100ms`, effectively doubling runtime\n    - value of `2` will effectively triple the runtime; etc.\n- `throttle-http`: change throttle HTTP endpoint\n- `throttle-query`: change throttle query\n- `throttle-control-replicas='replica1,replica2'`: change list of throttle-control replicas, these are replicas `gh-ost` will check. This takes a comma separated list of replica's to check and replaces the previous list.\n- `throttle`: force migration suspend\n- `no-throttle`: cancel forced suspension (though other throttling reasons may still apply)\n- `postpone-cut-over-flag-file=<path>`: Postpone the [cut-over](cut-over.md) phase, writing a cut over flag file to the given path\n- `unpostpone`: at a time where `gh-ost` is postponing the [cut-over](cut-over.md) phase, instruct `gh-ost` to stop postponing and proceed immediately to cut-over.\n- `panic`: immediately panic and abort operation\n\n### Querying for data\n\nFor commands that accept an argument as value, pass `?` (question mark) to _get_ current value rather than _set_ a new one.\n\n### Examples\n\nWhile migration is running:\n\n```shell\n$ echo status | nc -U /tmp/gh-ost.test.sample_data_0.sock\n# Migrating `test`.`sample_data_0`; Ghost table is `test`.`_sample_data_0_gst`\n# Migration started at Tue Jun 07 11:45:16 +0200 2016\n# chunk-size: 200; max lag: 1500ms; dml-batch-size: 10; max-load: map[Threads_connected:20]\n# Throttle additional flag file: /tmp/gh-ost.throttle\n# Serving on unix socket: /tmp/gh-ost.test.sample_data_0.sock\n# Serving on TCP port: 10001\nCopy: 0/2915 0.0%; Applied: 0; Backlog: 0/100; Time: 41s(total), 40s(copy); streamer: mysql-bin.000550:49942; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, flag-file; ETA: N/A\n```\n\n```shell\n$ echo \"chunk-size=250\" | nc -U /tmp/gh-ost.test.sample_data_0.sock\n# Migrating `test`.`sample_data_0`; Ghost table is `test`.`_sample_data_0_gst`\n# Migration started at Tue Jun 07 11:56:03 +0200 2016\n# chunk-size: 250; max lag: 1500ms; dml-batch-size: 10; max-load: map[Threads_connected:20]\n# Throttle additional flag file: /tmp/gh-ost.throttle\n# Serving on unix socket: /tmp/gh-ost.test.sample_data_0.sock\n# Serving on TCP port: 10001\n```\n\n```shell\n$ echo \"chunk-size=?\" | nc -U /tmp/gh-ost.test.sample_data_0.sock\n250\n```\n\n```shell\n$ echo throttle | nc -U /tmp/gh-ost.test.sample_data_0.sock\n\n$ echo status | nc -U /tmp/gh-ost.test.sample_data_0.sock\n# Migrating `test`.`sample_data_0`; Ghost table is `test`.`_sample_data_0_gst`\n# Migration started at Tue Jun 07 11:56:03 +0200 2016\n# chunk-size: 250; max lag: 1500ms; max-load: map[Threads_connected:20]\n# Throttle additional flag file: /tmp/gh-ost.throttle\n# Serving on unix socket: /tmp/gh-ost.test.sample_data_0.sock\n# Serving on TCP port: 10001\nCopy: 0/2915 0.0%; Applied: 0; Backlog: 0/100; Time: 59s(total), 59s(copy); streamer: mysql-bin.000551:68067; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, commanded by user; ETA: N/A\n```\n"
  },
  {
    "path": "doc/local-tests.md",
    "content": "# Local tests\n\n`gh-ost` is continuously tested in production via `--test-on-replica alter='engine=innodb'`. These tests check the GitHub workload and usage, but not necessarily the general case.\n\nLocal tests are an additional layer of tests used for continuous integration tests and local development.\n\nLocal tests test explicit use cases, such as column renames, mix of time zones, special types and alters. Traits of a single test:\n\n- Composed of a single table.\n- A single alter.\n- By default the alter is `engine=innodb`, but this can be overridden per-test\n- Scheduled DML operations, executed via `event_scheduler`.\n- `gh-ost` is set to execute and throttle for `5` seconds, at which time all tested DMLs are expected to operate.\n- The test requires a replication topology and utilizes `--test-on-replica`\n- The test checksums the two tables (original and _ghost_) and expects identical checksum\n- By default the test selects all (`*`) columns, but this can be overridden per-test\n\nTests are found under [localtests](https://github.com/github/gh-ost/tree/master/localtests). A single test is a subdirectory and tests are iterated alphabetically.\n\nNew data-integrity, synchronization issues or otherwise concerns are expected to be tested by new test cases.\n\n## Run with docker compose\n\nLocal tests can be run locally with docker compose using the helper script [script/docker-gh-ost-replica-tests](https://github.com/github/gh-ost/tree/master/script/docker-gh-ost-replica-tests). \n\nExample usage:\n```shell\n# create primary-replica containers with specified mysql image\nTEST_MYSQL_IMAGE=\"mysql-server:8.0.16\" ./script/docker-gh-ost-replica-tests up\n\n# run all tests\n./script/docker-gh-ost-replica-tests run\n\n# cleanup containers\n./script/docker-gh-ost-replica-tests down\n```\n\nPass the `-t` flag to run the tests with a toxiproxy between gh-ost and the MySQL replica. This simulates network conditions where MySQL connections are closed unexpectedly.\n\n```shell\n# run tests with toxiproxy\n./script/docker-gh-ost-replica-tests up -t\n./script/docker-gh-ost-replica-tests run -t\n```\n"
  },
  {
    "path": "doc/migrating-with-sbr.md",
    "content": "# Migrating with Statement Based Replication\n\nEven though `gh-ost` relies on Row Based Replication (RBR), it does not mean you can't keep your Statement Based Replication (SBR).\n\n`gh-ost` is happy to, and actually prefers and suggests to, connect to a replica. On this replica, it is happy to:\n- issue the heavyweight `INFORMATION_SCHEMA` queries that make a table structure analysis\n- issue a `select count(*) from mydb.mytable`, should `--exact-rowcount` be provided\n- connect itself as a fake replica to get the binary log stream\n\nAll of the above can be executed on the master, but we're more comfortable that they execute on a replica.\n\nPlease note the third item: `gh-ost` connects as a fake replica and pulls the binary logs. This is how `gh-ost` finds the table's changelog: it looks up entries in the binary log.\n\nThe magic is that your master can still produce SBR, but if you have a replica with `log-slave-updates`, you can also configure it to have `binlog_format='ROW'`. Such a replica accepts SBR statements from its master, and produces RBR statements onto its binary logs.\n\n`gh-ost` is happy to modify the `binlog_format` on the replica for you:\n- If you supply `--switch-to-rbr`, `gh-ost` will convert the binlog format for you, and restart replication to make sure this takes effect.\n- If your replica is an intermediate master, i.e. further serves as a master to other replicas, `gh-ost` will not convert the `binlog_format`.\n- At any case, `gh-ost` **will not** convert back to `STATEMENT` (SBR). This is because you may be running multiple migrations concurrently. Being able to run concurrent migrations is one of the design goals of this tool. It's your own responsibility to switch back to SBR once all pending migrations are complete.\n\n### Summary\n\n- If you're already using RBR, all is well for you\n- If not, convert one of your replicas to `binlog_format='ROW'`, or let `gh-ost` do this for you.\n"
  },
  {
    "path": "doc/perks.md",
    "content": "# Perks\n\nListed below are some operation perks that make the DBA happy.\n\n### Dynamic reconfiguration\n\nYou started with a `chunk-size=5000` but you find out it's too much. You want to reduce it. There is no need to kill and restart the migration with a new configuration. You may change the `chunk-size` dynamically.\n\n`gh-ost` listens on a unix socket file, and optionally via `TCP` as well. You may, for example:\n\n```shell\n$ echo \"chunk-size=250\" | nc -U /tmp/gh-ost.test.sample_data_0.sock\n```\n\nLikewise, you can change the `max-load` configuration:\n\n```shell\n$ echo \"max-load=Threads_running=50,threads_connected=1000\" | nc -U /tmp/gh-ost.test.sample_data_0.sock\n```\n\nThe `max-load` format must be: `some_status=<numeric-threshold>[,some_status=<numeric-threshold>...]`.\nIn case of parsing error the command is ignored.\n\nRead more about [interactive commands](interactive-commands.md)\n\n### What's the status?\n\nYou do not have to have access to the `screen` where the migration is issued. You have two ways to get current status:\n\n1. Use [interactive commands](interactive-commands.md). Via unix socket file or via `TCP` you can get current status:\n\n```shell\n$ echo status | nc -U /tmp/gh-ost.test.sample_data_0.sock\n# Migrating `test`.`sample_data_0`; Ghost table is `test`.`_sample_data_0_gst`\n# Migration started at Tue Jun 07 11:45:16 +0200 2016\n# chunk-size: 200; max lag: 1500ms; max-load: map[Threads_connected:20]\n# Throttle additional flag file: /tmp/gh-ost.throttle\n# Serving on unix socket: /tmp/gh-ost.test.sample_data_0.sock\n# Serving on TCP port: 10001\nCopy: 0/2915 0.0%; Applied: 0; Backlog: 0/100; Time: 41s(total), 40s(copy); streamer: mysql-bin.000550:49942; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, flag-file; ETA: N/A\n```\n\n1. `gh-ost` creates and uses a changelog table for internal bookkeeping. This table has the `_osc` suffix (the tool creates and announces this table upon startup) If you like, you can SQL your status:\n\n```\n> select * from _sample_data_0_osc order by id desc limit 1 \\G\n*************************** 1. row ***************************\n         id: 325\nlast_update: 2016-06-08 15:52:13\n       hint: copy iteration 0 at 1465393933\n      value: throttled, flag-file\n```\n\n### Postpone the cut-over phase\n\nYou begin a migration, and the ETA is for it to complete at 04:00am. Not a good time for you, because you happen to want to have eyes on things as the migration completes (ideally, you shouldn't need to, but life is hard).\n\nToday, DBAs are coordinating the migration start time such that it completes in a convenient hour. `gh-ost` offers an alternative: postpone the final cut-over phase till you're ready.\n\nExecute `gh-ost` with `--postpone-cut-over-flag-file=/path/to/flag.file`. As long as this file exists, `gh-ost` will not take the final cut-over step. It will complete the row copy, and continue to synchronize the tables by continuously applying changes made on the original table onto the ghost table. It can do so on and on and on. When you're finally ready, remove the file and cut-over will take place.\n\n### Sub-second lag throttling\n\nWith sub-second replication lag measurements, `gh-ost` is able to keep a fleet of replicas well below `1sec` lag throughout the migration. We encourage you to issue sub-second heartbeats. Read more on [sub-second replication lag throttling](subsecond-lag.md)\n"
  },
  {
    "path": "doc/questions.md",
    "content": "# How?\n\n### How does the cut-over work? Is it really atomic?\n\nThe cut-over phase, where the original table is swapped away, and the _ghost_ table takes its place, is an atomic, blocking, controlled operation.\n\n- Atomic: the tables are swapped together. There is no gap where your table does not exist.\n- Blocking: all app queries involving the migrated (original) table are either operate on the original table, or are blocked, or proceed to operate on the _new_ table (formerly the _ghost_ table, now swapped in).\n- Controlled: the cut-over times out at pre-defined threshold, and is atomically aborted, then re-attempted. Cut-over only takes place when no lags are present, and otherwise no throttling reason is found. Cut-over step itself gets high priority and is never throttled.\n\nRead more on [cut-over](cut-over.md) and on the [cut-over design Issue](https://github.com/github/gh-ost/issues/82)\n\n\n# Is it possible to?\n\n### Is it possible to add a UNIQUE KEY?\n\nAdding a `UNIQUE KEY` is possible, in the condition that no violation will occur. That is, you must make sure there aren't any violating rows on your table before, and during the migration.\n\nAt this time there is no equivalent to `ALTER IGNORE`, where duplicates are implicitly and silently thrown away. The MySQL `5.7` docs say:\n\n> As of MySQL 5.7.4, the IGNORE clause for ALTER TABLE is removed and its use produces an error.\n\nIt is therefore unlikely that `gh-ost` will support this behavior.\n\n### Run concurrent migrations?\n\nYes. TL;DR if running all on same replica/master, make sure to provide `--replica-server-id`. [Read more](cheatsheet.md#concurrent-migrations)\n\n# Why\n\n### Why Is the \"Connect to Replica\" mode preferred? \n\nTo avoid placing extra load on the master. `gh-ost` connects as a replication client. Each additional replica adds some load to the master. \n\nTo monitor replication lag from a replica. This makes the replication lag throttle, `--max-lag-millis`, more representative of the lag experienced by other replicas following the master (perhaps N levels deep in a tree of replicas).\n"
  },
  {
    "path": "doc/rds.md",
    "content": "`gh-ost` has been updated to work with Amazon RDS however due to GitHub not using AWS for databases, this documentation is community driven so if you find a bug please [open an issue][new_issue]!\n\n# Amazon RDS\n\n## Limitations\n\n- No `SUPER` privileges.\n- `gh-ost` runs should be setup use [`--assume-rbr`][assume_rbr_docs] and use `binlog_format=ROW`.\n- Aurora does not allow editing of the `read_only` parameter. While it is defined as `{TrueIfReplica}`, the parameter is non-modifiable field.\n\n## Aurora\n\n#### Replication\n\nIn Aurora replication, you have separate reader and writer endpoints however because the cluster shares the underlying storage layer, `gh-ost` will detect it is running on the master. This becomes an issue when you wish to use [migrate/test on replica][migrate_test_on_replica_docs] because you won't be able to use a single cluster in the same way you would with MySQL RDS.\n\nTo work around this, you can follow along the [AWS replication between clusters documentation][aws_replication_docs] for Aurora with one small caveat. For the \"Create a Snapshot of Your Replication Master\" step, the binlog position is not available in the AWS console. You will need to issue the SQL query `SHOW SLAVE STATUS` or `aws rds describe-events` API call to get the correct position.\n\n#### Percona Toolkit\n\nIf you use `pt-table-checksum` as a part of your data integrity checks, you might want to check out [this patch][percona_toolkit_patch] which will enable you to run `pt-table-checksum` with the `--no-binlog-format-check` flag and prevent errors like the following:\n\n```\n03-24T12:51:06 Failed to /*!50108 SET @@binlog_format := 'STATEMENT'*/: DBD::mysql::db do failed: Access denied; you need (at least one of) the SUPER privilege(s) for this operation [for Statement \"/*!50108 SET @@binlog_format := 'STATEMENT'*/\"] at pt-table-checksum line 9292.\n\nThis tool requires binlog_format=STATEMENT, but the current binlog_format is set to ROW and an error occurred while attempting to change it.  If running MySQL 5.1.29 or newer, setting binlog_format requires the SUPER privilege.  You will need to manually set binlog_format to 'STATEMENT' before running this tool.\n```\n\n#### Binlog filtering\n\nIn Aurora, the [binlog filtering feature][aws_replication_docs_bin_log_filtering] is enabled by default. This becomes an issue when gh-ost tries to do the cut-over, because gh-ost waits for an entry in the binlog to proceed but this entry will never end up in the binlog because it gets filtered out by the binlog filtering feature.  \nYou need to turn this feature off during the migration process.  \nSet the `aurora_enable_repl_bin_log_filtering` parameter to 0 in the Parameter Group for your cluster.  \nWhen the migration is done, set it back to 1 (default).\n\n\n#### Preflight checklist\n\nBefore trying to run any `gh-ost` migrations you will want to confirm the following:\n\n- [ ] You have a secondary cluster available that will act as a replica. Rule of thumb here has been a 1 instance per cluster to mimic MySQL-style replication as opposed to Aurora style.\n- [ ] The database instance parameters and database cluster parameters are consistent between your master and replicas\n- [ ] Executing `SHOW SLAVE STATUS\\G` on your replica cluster displays the correct master host, binlog position, etc.\n- [ ] Database backup retention is greater than 1 day to enable binlogs\n- [ ] You have setup [`hooks`][ghost_hooks] to issue RDS procedures for stopping and starting replication. (see [github/gh-ost#163][ghost_rds_issue_tracking] for examples)\n- [ ] The parameter `aurora_enable_repl_bin_log_filtering` is set to 0\n\n[new_issue]: https://github.com/github/gh-ost/issues/new\n[assume_rbr_docs]: https://github.com/github/gh-ost/blob/master/doc/command-line-flags.md#assume-rbr\n[migrate_test_on_replica_docs]: https://github.com/github/gh-ost/blob/master/doc/cheatsheet.md#c-migratetest-on-replica\n[aws_replication_docs]: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Overview.Replication.MySQLReplication.html\n[percona_toolkit_patch]: https://github.com/jacobbednarz/percona-toolkit/commit/0271ba6a094da446a5e5bb8d99b5c26f1777f2b9\n[ghost_hooks]: https://github.com/github/gh-ost/blob/master/doc/hooks.md\n[ghost_rds_issue_tracking]: https://github.com/github/gh-ost/issues/163\n[aws_replication_docs_bin_log_filtering]: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.html#AuroraMySQL.Replication.Performance"
  },
  {
    "path": "doc/requirements-and-limitations.md",
    "content": "# Requirements and limitations\n\n### Requirements\n\n- `gh-ost` currently requires MySQL versions 5.7 and greater.\n\n- You will need to have one server serving Row Based Replication (RBR) format binary logs. Right now `FULL` row image is supported. `MINIMAL` to be supported in the near future. `gh-ost` prefers to work with replicas. You may [still have your master configured with Statement Based Replication](migrating-with-sbr.md) (SBR).\n\n- If you are using a replica, the table must have an identical schema between the master and replica.\n\n- `gh-ost` requires an account with these privileges:\n\n  - `ALTER, CREATE, DELETE, DROP, INDEX, INSERT, LOCK TABLES, SELECT, TRIGGER, UPDATE` on the database (schema) where your migrated table is, or of course on `*.*`\n  - either:\n    - `SUPER, REPLICATION SLAVE` on `*.*`, or:\n    - `REPLICATION CLIENT, REPLICATION SLAVE` on `*.*`\n\nThe `SUPER` privilege is required for `STOP SLAVE`, `START SLAVE` operations. These are used on:\n\n- Switching your `binlog_format` to `ROW`, in the case where it is _not_ `ROW` and you explicitly specified `--switch-to-rbr`\n  - If your replication is already in RBR (`binlog_format=ROW`) you can specify `--assume-rbr` to avoid the `STOP SLAVE/START SLAVE` operations, hence no need for `SUPER`.\n\n- `gh-ost` uses the `REPEATABLE_READ` transaction isolation level for all MySQL connections, regardless of the server default.\n\n- Running `--test-on-replica`: before the cut-over phase, `gh-ost` stops replication so that you can compare the two tables and satisfy that the migration is sound.\n\n### Limitations\n\n- Foreign key constraints are not supported. They may be supported in the future, to some extent.\n\n- Triggers are not supported. They may be supported in the future.\n\n- MySQL 5.7 `JSON` columns are supported but not as part of `PRIMARY KEY`\n\n- The two _before_ & _after_ tables must share a `PRIMARY KEY` or other `UNIQUE KEY`. This key will be used by `gh-ost` to iterate through the table rows when copying. [Read more](shared-key.md)\n  - The migration key must not include columns with NULL values. This means either:\n    1. The columns are `NOT NULL`, or\n    2. The columns are nullable but don't contain any NULL values.\n  - by default, `gh-ost` will not run if the only `UNIQUE KEY` includes nullable columns.\n    - You may override this via `--allow-nullable-unique-key` but make sure there are no actual `NULL` values in those columns. Existing NULL values can't guarantee data integrity on the migrated table.\n\n- It is not allowed to migrate a table where another table exists with same name and different upper/lower case.\n  - For example, you may not migrate `MyTable` if another table called `MYtable` exists in the same schema.\n\n- Amazon RDS works, but has its own [limitations](rds.md).\n- Google Cloud SQL works, `--gcp` flag required.\n- Aliyun RDS works, `--aliyun-rds` flag required.\n- Azure Database for MySQL works, `--azure` flag required, and have detailed document about it. (azure.md)\n\n- Multisource is not supported when migrating via replica. It _should_ work (but never tested) when connecting directly to master (`--allow-on-master`)\n\n- Master-master setup is only supported in active-passive setup. Active-active (where table is being written to on both masters concurrently) is unsupported. It may be supported in the future.\n\n- If you have an `enum` field as part of your migration key (typically the `PRIMARY KEY`), migration performance will be degraded and potentially bad. [Read more](https://github.com/github/gh-ost/pull/277#issuecomment-254811520)\n\n- Migrating a `FEDERATED` table is unsupported and is irrelevant to the problem `gh-ost` tackles.\n\n- [Encrypted binary logs](https://www.percona.com/blog/2018/03/08/binlog-encryption-percona-server-mysql/) are not supported.\n- `ALTER TABLE ... RENAME TO some_other_name` is not supported (and you shouldn't use `gh-ost` for such a trivial operation).\n"
  },
  {
    "path": "doc/resume.md",
    "content": "# Resuming Migrations\n\n`gh-ost` can attempt to resume an interrupted migration from a checkpoint if the following conditions are met:\n- The first `gh-ost` process was invoked with `--checkpoint`\n- The first `gh-ost` process had at least one successful checkpoint\n- The binlogs from the last checkpoint's binlog coordinates still exist on the replica gh-ost is inspecting (specified by `--host`)\n- The checkpoint table (name ends with `_ghk`) still exists\n\nTo resume, invoke `gh-ost` again with the same arguments with the `--resume` flag.\n\n> [!WARNING]\n> It is recommended use `--checkpoint` with `--gtid` enabled so that checkpoint binlog coordinates store GTID sets rather than file positions. In that case, `gh-ost` can resume using a different replica than it originally attached to.\n\n## Example\nThe migration starts with a `gh-ost` invocation such as:\n```shell\ngh-ost \\\n--chunk-size=100 \\\n--host=replica1.company.com \\\n--database=\"mydb\" \\\n--table=\"mytable\" \\\n--alter=\"add column mycol varchar(20)\"\n--gtid \\\n--checkpoint \\\n--checkpoint-seconds=60 \\\n--execute\n```\n\nIn this example `gh-ost` writes a checkpoint to a table `_mytable_ghk` every 60 seconds. After `gh-ost` is interrupted/killed, the migration can be resumed with:\n```shell\n# resume migration\ngh-ost \\\n--chunk-size=100\n--host=replica1.company.com \\\n--database=\"mydb\" \\\n--table=\"mytable\" \\\n--alter=\"add column mycol varchar(20)\"\n--gtid \\\n--resume \\\n--execute\n```\n\n`gh-ost` then reconnects at the binlog coordinates of the last checkpoint and resumes copying rows at the chunk specified by the checkpoint. The data integrity of the ghost table is preserved because `gh-ost` applies row DMLs and copies row in an idempotent way.\n"
  },
  {
    "path": "doc/revert.md",
    "content": "# Reverting Migrations\n\n`gh-ost` can attempt to revert a previously completed migration if the follow conditions are met:\n- The first `gh-ost` process was invoked with `--checkpoint`\n- The checkpoint table (name ends with `_ghk`) still exists\n- The binlogs from the time of the migration's cut-over still exist on the replica gh-ost is inspecting (specified by `--host`)\n\nTo revert, find the name of the \"old\" table from the original migration e.g. `_mytable_del`. Then invoke `gh-ost` with the same arguments and the flags `--revert` and `--old-table=\"_mytable_del\"`.\ngh-ost will read the binlog coordinates of the original cut-over from the checkpoint table and bring the old table up to date. Then it performs another cut-over to complete the reversion.\nNote that the checkpoint table (name ends with _ghk) will not be automatically dropped unless `--ok-to-drop-table` is provided.\n\n> [!WARNING]\n> It is recommended use `--checkpoint` with `--gtid` enabled so that checkpoint binlog coordinates store GTID sets rather than file positions. In that case, `gh-ost` can revert using a different replica than it originally attached to.\n\n### ❗ Note ❗\nReverting is roughly equivalent to applying the \"reverse\" migration. _Before attempting to revert you should determine if the reverse migration is possible and does not involve any unacceptable data loss._\n\nFor example: if the original migration drops a `NOT NULL` column that has no `DEFAULT` then the reverse migration adds the column. In this case, the reverse migration is impossible if rows were added after the original cut-over and the revert will fail.\nAnother example: if the original migration modifies a `VARCHAR(32)` column to `VARCHAR(64)`, the reverse migration truncates the `VARCHAR(64)` column to `VARCHAR(32)`. If values were inserted with length > 32 after the cut-over then the revert will fail.\n\n\n## Example\nThe migration starts with a `gh-ost` invocation such as:\n```shell\ngh-ost \\\n--chunk-size=100 \\\n--host=replica1.company.com \\\n--database=\"mydb\" \\\n--table=\"mytable\" \\\n--alter=\"drop key idx1\"\n--gtid \\\n--checkpoint \\\n--checkpoint-seconds=60 \\\n--execute\n```\n\nIn this example `gh-ost` writes a cut-over checkpoint to `_mytable_ghk` after the cut-over is successful. The original table is renamed to `_mytable_del`.\n\nSuppose that dropping the index causes problems, the migration can be revert with:\n```shell\n# revert migration\ngh-ost \\\n--chunk-size=100 \\\n--host=replica1.company.com \\\n--database=\"mydb\" \\\n--table=\"mytable\" \\\n--old-table=\"_mytable_del\"\n--gtid \\\n--checkpoint \\\n--checkpoint-seconds=60 \\\n--revert \\\n--execute\n```\n\ngh-ost then reconnects at the binlog coordinates stored in the cut-over checkpoint and applies DMLs until the old table is up-to-date.\nNote that the \"reverse\" migration is `ADD KEY idx(...)` so there is no potential data loss to consider in this case.\n"
  },
  {
    "path": "doc/shared-key.md",
    "content": "# Shared key\n\ngh-ost requires for every migration that both the _before_ and _after_ versions of the table share the same unique not-null key columns. This page illustrates this rule.\n\n### Introduction\n\nConsider a simple migration, with a normal table,\n\n```sql\nCREATE TABLE tbl (\n  id bigint unsigned not null auto_increment,\n  data varchar(255),\n  more_data int,\n  PRIMARY KEY(id)\n)\n```\n\nand the migration `add column ts timestamp`. The _after_ table version would be:\n\n```sql\nCREATE TABLE tbl (\n  id bigint unsigned not null auto_increment,\n  data varchar(255),\n  more_data int,\n  ts timestamp,\n  PRIMARY KEY(id)\n)\n```\n\n(This is also the definition of the _ghost_ table, except that that table would be called `_tbl_gho`). \n\nIn this migration, the _before_ and _after_ versions contain the same unique not-null key (the PRIMARY KEY). To run this migration, `gh-ost` would iterate through the `tbl` table using the primary key, copy rows from `tbl` to the _ghost_ table `_tbl_gho` in primary key order, while also applying the binlog event writes from `tbl` onto `_tbl_gho`.\n\nThe applying of the binlog events is what requires the shared unique key. For example, an `UPDATE` statement to `tbl` translates to a `REPLACE` statement which `gh-ost` applies to `_tbl_gho`. A `REPLACE` statement expects to insert or replace an existing row based on its row's values and the table's unique key constraints. In particular, if inserting that row would result in a unique key violation (e.g., a row with that primary key already exists), it would _replace_ that existing row with the new values.\n\nSo `gh-ost` correlates `tbl` and `_tbl_gho` rows one to one using a unique key. In the above example that would be the `PRIMARY KEY`.\n\n### Interpreting the rule\n\nThe _before_ and _after_ versions of the table share the same unique not-null key, but:\n- the key doesn't have to be the PRIMARY KEY\n- the key can have a different name between the _before_ and _after_ versions (e.g., renamed via DROP INDEX and ADD INDEX) so long as it contains the exact same column(s)\n\nAt the start of the migration, `gh-ost` inspects both the original and _ghost_ table it created, and attempts to find at least one such unique key (or rather, a set of columns) that is shared between the two. Typically this would just be the `PRIMARY KEY`, but some tables don't have primary keys, or sometimes it is the primary key that is being modified by the migration. In these cases `gh-ost` will look for other options.\n\n`gh-ost` expects unique keys where no `NULL` values are found, i.e. all columns contained in the unique key are defined as `NOT NULL`. This is implicitly true for primary keys. If no such key can be found, `gh-ost` bails out. \n\nIf the table contains a unique key with nullable columns, but you know your columns contain no `NULL` values, use the `--allow-nullable-unique-key` option. The migration will run well as long as no `NULL` values are found in the unique key's columns. **Any actual `NULL`s may corrupt the migration.**\n\n### Examples: Allowed and Not Allowed\n\n```sql\ncreate table some_table (\n  id int not null auto_increment,\n  ts timestamp,\n  name varchar(128) not null,\n  owner_id int not null,\n  loc_id int not null,\n  primary key(id),\n  unique key name_uidx(name)\n)\n```\n\nNote the two unique, not-null indexes: the primary key and `name_uidx`.\n\nAllowed migrations:\n\n- `add column i int`\n- `add key owner_idx (owner_id)`\n- `add unique key owner_name_idx (owner_id, name)` - **be careful not to write conflicting rows while this migration runs**\n- `drop key name_uidx` - `primary key` is shared between the tables\n- `drop primary key, add primary key(owner_id, loc_id)` - `name_uidx` is shared between the tables\n- `change id bigint unsigned not null auto_increment` - the `primary key` changes datatype but not value, and can be used\n- `drop primary key, drop key name_uidx, add primary key(name), add unique key id_uidx(id)` - swapping the two keys. Either `id` or `name` could be used\n\nNot allowed:\n\n- `drop primary key, drop key name_uidx` - the _ghost_ table has no unique key\n- `drop primary key, drop key name_uidx, create primary key(name, owner_id)` - no shared columns to the unique keys on both tables. Even though `name` exists in the _ghost_ table's `primary key`, it is only part of the key and in itself does not guarantee uniqueness in the _ghost_ table.\n\n\n### Workarounds\n\nIf you need to change your primary key or only not-null unique index to use different columns, you will want to do it as two separate migrations:\n1. `ADD UNIQUE KEY temp_pk (temp_pk_column,...)`\n1. `DROP PRIMARY KEY, DROP KEY temp_pk, ADD PRIMARY KEY (temp_pk_column,...)`\n"
  },
  {
    "path": "doc/subsecond-lag.md",
    "content": "# Sub-second replication lag throttling\n\n`gh-ost` is able to utilize sub-second replication lag measurements.\n\nAt GitHub, small replication lag is crucial, and we like to keep it below `1s` at all times.\n\n`gh-ost` will do sub-second throttling when `--max-lag-millis` is smaller than `1000`, i.e. smaller than `1sec`.\nReplication lag is measured on:\n\n- The \"inspected\" server (the server `gh-ost` connects to; replica is desired but not mandatory)\n- The `throttle-control-replicas` list\n\nIn both cases, `gh-ost` uses an internal heartbeat mechanism. It injects heartbeat events onto the utility changelog table, then reads those entries on replicas, and compares times. This measurement is on by default and by definition supports sub-second resolution.\n\nYou can explicitly define how frequently will `gh-ost` inject heartbeat events, via `heartbeat-interval-millis`. You should set `heartbeat-interval-millis <= max-lag-millis`. It still works if not, but loses granularity and effect.\n\nIn earlier versions, the `--throttle-control-replicas` list was subjected to `1` second resolution or to 3rd party heartbeat injections such as `pt-heartbeat`. This is no longer the case. The argument `--replication-lag-query` has been deprecated and is no longer needed.\n\nOur production migrations use sub-second lag throttling and are able to keep our entire fleet of replicas well below `1sec` lag. We use `--heartbeat-interval-millis=100` on our production migrations with a `--max-lag-millis` value of between `300` and `500`.\n"
  },
  {
    "path": "doc/testing-on-replica.md",
    "content": "# Testing on replica\n\n`gh-ost`'s design allows for trusted and reliable tests of the migration without compromising production data integrity.\n\nTest on replica if you:\n- Are unsure of `gh-ost`, have not gained confidence into its workings\n- Just want to experiment with a real migration without affecting production (maybe measure migration time?)\n- Wish to observe data change impact\n\n## What testing on replica means\n\nTL;DR `gh-ost` will make all changes on a replica and leave both original and ghost tables for you to compare.\n\n## Issuing a test drive\n\nApply `--test-on-replica --host=<a.replica>`.\n- `gh-ost` would connect to the indicated server\n- Will verify this is indeed a replica and not a master\n- Will perform _everything_ on this replica. Other then checking who the master is, it will otherwise not touch it.\n  - All `INFORMATION_SCHEMA` and `SELECT` queries run on the replica\n  - Ghost table is created on the replica\n  - Rows are copied onto the ghost table on the replica\n  - Binlog events are read from the replica and applied to ghost table on the replica\n  - So... everything\n\n`gh-ost` will sync the ghost table with the original table.\n- When it is satisfied, it will issue a `STOP SLAVE`, stopping replication\n- Will finalize last few statements\n- Will swap tables via normal [cut-over](cut-over.md), and immediately revert the swap.\n- Will terminate. No table is dropped.\n\nYou are now left with the original table **and** the ghost table. When using a trivial `alter` statement, such as `engine-innodb`, both tables _should_ be identical.\n\nYou now have the time to verify the tool works correctly. You may checksum the entire table data if you like.\n- e.g.\n  `mysql -e 'select * from mydb.mytable order by id' | md5sum`\n  `mysql -e 'select * from mydb._mytable_gst order by id' | md5sum`\n- or of course only select the shared columns before/after the migration\n- We use the trivial `engine=innodb` for `alter` when testing. This way the resulting ghost table is identical in structure to the original table (including indexes) and we expect data to be completely identical. We use `md5sum` on the entire dataset to confirm the test result.\n- When adding/dropping columns, you will want to use the explicit list of shared columns before/after migration. This list is printed by `gh-ost` at the beginning of the migration.\n\n### Cleanup\n\nIt's your job to:\n- Drop the ghost table (at your leisure, you should be aware that a `DROP` can be a lengthy operation)\n- Start replication back (via `START SLAVE`)\n\n### Examples\n\nSimple:\n```shell\n$ gh-ost --host=myhost.com --conf=/etc/gh-ost.cnf --database=test --table=sample_table --alter=\"engine=innodb\" --chunk-size=2000 --max-load=Threads_connected=20 --initially-drop-ghost-table --initially-drop-old-table --test-on-replica --verbose --execute\n```\n\nElaborate:\n```shell\n$ gh-ost --host=myhost.com --conf=/etc/gh-ost.cnf --database=test --table=sample_table --alter=\"engine=innodb\" --chunk-size=2000 --max-load=Threads_connected=20 --switch-to-rbr --initially-drop-ghost-table --initially-drop-old-table --test-on-replica --postpone-cut-over-flag-file=/tmp/ghost-postpone.flag --exact-rowcount --concurrent-rowcount --allow-nullable-unique-key --verbose --execute\n```\n- Count exact number of rows (makes ETA estimation very good). This goes at the expense of paying the time for issuing a `SELECT COUNT(*)` on your table. We use this lovingly.\n- Automatically switch to `RBR` if replica is configured as `SBR`. See also: [migrating with SBR](migrating-with-sbr.md)\n- allow iterating on a `UNIQUE KEY` that has `NULL`able columns (at your own risk)\n\n### Further notes\n\nDo not confuse `--test-on-replica` with `--migrate-on-replica`; the latter performs the migration and _keeps it that way_ (does not revert the table swap nor stops replication)\n\nAs part of testing on replica, `gh-ost` issues a `STOP SLAVE`. This requires the `SUPER` privilege.\nSee related discussion on https://github.com/github/gh-ost/issues/162\n"
  },
  {
    "path": "doc/the-fine-print.md",
    "content": "# The Fine Print: What are You Not Telling Me?\n\nHere are technical considerations you may be interested in. We write here things that are not an obvious [Requirements & Limitations](requirements-and-limitations.md)\n\n# Connecting to replica\n\n`gh-ost` prefers connecting to a replica. If your master uses Statement Based Replication, this is a _requirement_.\n\nWhat does \"connect to replica\" mean?\n\n- `gh-ost` connects to the replica as a normal client\n- It additionally connects as a replica to the replica (pretends to be a MySQL replica itself)\n- It auto-detects the master\n\n`gh-ost` reads the RBR binary logs from the replica, and applies events onto the master as part of the table migration.\n\nTHE FINE PRINT:\n\n- You trust the replica's binary logs to represent events applied on master.\n  - If you don't trust the replica, or if you suspect there's data drift between replica & master, take notice. \n  - If the table on the replica has a different schema than the master, `gh-ost` likely won't work correctly.\n  - Our take: we trust replica data; if master dies in production, we promote a replica. Our read serving is based on replica(s).\n  \n- If your master is RBR, do instead connect `gh-ost` to master, via `--allow-on-master` (see [cheatsheet](cheatsheet.md)).\n  \n- Replication needs to run.\n  - This is an obvious, but worth stating. You cannot perform a migration with \"connect to replica\" if your replica lags. `gh-ost` will actually do all it can so that replication does not lag, and avoid critical operations if replication is lagging.\n\n# Network usage\n\n`gh-ost` reads binary logs and then applies them onto the migrated server.\n\nTHE FINE PRINT:\n\n- `gh-ost` delivers more network traffic than other online-schema-change tools, that let MySQL handle all data transfer internally. This is part of the [triggerless design](triggerless-design.md).\n  - Our take: we deal with cross-DC migration traffic and this is working well for us.\n\n# Impersonating as a replica\n\n`gh-ost` impersonates as a replica: it connects to a MySQL server, says \"oh hey, I'm a replica, please send me binary logs kthx\".\n\nTHE FINE PRINT:\n\n- `SHOW SLAVE HOSTS` or `SHOW PROCESSLIST` will list this strange \"replica\" that you can't really connect to.\n"
  },
  {
    "path": "doc/throttle.md",
    "content": "# Throttle\n\nThroughout a migration operation, `gh-ost` is either actively copying and applying data, or is _throttling_.\n\nWhen _throttled_, `gh-ost` ceases to write row data and ceases to inspect binary log entries. It pauses all writes except for the low-volume changelog status writes and the heartbeat writes.\n\nAs compared with trigger-based solutions, when `gh-ost` is throttled, the write load on the master is truly removed.\n\nTypically, throttling is based on replication lag or on master load. At such time, you wish to reduce load from master and from replication by pausing the _ghost_ writes. However, with a trigger based solution this is impossible to achieve: the triggers must remain in place and they continue to generate excess writes while the table is being used.\n\nSince `gh-ost` is not based on triggers, but of reading binary logs, it controls its own writes. Each and every write on the master comes from the `gh-ost` app, which means `gh-ost` is able to reduce writes to a bare minimum when it wishes so.\n\n`gh-ost` supports various means for controlling throttling behavior; it is operations friendly in that it allows the user greater, dynamic control of throttler behavior.\n\n### Throttling parameters and factors\n\nThrottling is controlled via the following explicit and implicit factors:\n\n#### Replication-lag\n\nThe recommended way of running `gh-ost` is by connecting it to a replica. It will figure out the master by traversing the topology. It is by design that `gh-ost` is throttle aware: it generates its own _heartbeat_ mechanism; while it is running the migration, it is self-checking the replica to which it is connected for replication lag.\n\nOtherwise you may specify your own list of replica servers you wish it to observe.\n\n- `--throttle-control-replicas`: list of replicas you explicitly wish `gh-ost` to check for replication lag.\n\n  Example: `--throttle-control-replicas=myhost1.com:3306,myhost2.com,myhost3.com:3307`\n\n- `--max-lag-millis`: maximum allowed lag; any controlled replica lagging more than this value will cause throttling to kick in. When all control replicas have smaller lag than indicated, operation resumes.\n\nNote that you may dynamically change both `--max-lag-millis` and the `throttle-control-replicas` list via [interactive commands](interactive-commands.md)\n\n#### Status thresholds\n\n- `--max-load`: list of metrics and threshold values; topping the threshold of any will cause throttler to kick in.\n\n  Example:\n\n  `--max-load='Threads_running=100,Threads_connected=500'`\n\n  Metrics must be valid, numeric [status variables](https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html)\n\n#### Throttle query\n\n- When provided, the `--throttle-query` is expected to return a scalar integer. A return value `> 0` implies `gh-ost` should throttle. A return value `<= 0` implied `gh-ost` is free to proceed (pending other throttling factors).\n\nAn example query could be: `--throttle-query=\"select hour(now()) between 8 and 17\"` which implies throttling auto-starts `8:00am` and migration auto-resumes at `18:00pm`.\n\n#### HTTP Throttle\n\nThe `--throttle-http` flag allows for throttling via HTTP. Every 100ms `gh-ost` issues a `HEAD` request to the provided URL. If the response status code is not `200` throttling will kick in until a `200` response status code is returned.\n\nIf no URL is provided or the URL provided doesn't contain the scheme then the HTTP check will be disabled. For example `--throttle-http=\"http://1.2.3.4:6789/throttle\"` will enable the HTTP check/throttling, but `--throttle-http=\"1.2.3.4:6789/throttle\"` will not.\n\nThe URL can be queried and updated dynamically via [interactive interface](interactive-commands.md).\n\n#### Manual control\n\nIn addition to the above, you are able to take control and throttle the operation any time you like.\n\n- `--throttle-flag-file`: when this file exists, throttling kicks in. Just `touch` the file to begin throttling.\n\n- `--throttle-additional-flag-file`: similar to the above. When this file exists, throttling kicks in.\n\n  Default: `/tmp/gh-ost.throttle`\n\n  The reason for having two files has to do with the intent of being able to run multiple migrations concurrently.\n  The setup we wish to use is that each migration would have its own, specific `throttle-flag-file`, but all would use the same `throttle-additional-flag-file`. Thus, we are able to throttle specific migrations by touching their specific files, or we are able to throttle all migrations at once, by touching the shared file.\n\n- `throttle` command via [interactive interface](interactive-commands.md).\n\n  Example:\n\n  ```\n    echo throttle | nc -U /tmp/gh-ost.test.sample_data_0.sock\n    echo no-throttle | nc -U /tmp/gh-ost.test.sample_data_0.sock\n  ```\n\n### Throttle precedence\n\nAny single factor in the above that suggests the migration should throttle - causes throttling. That is, once some component decides to throttle, you cannot override it; you cannot force continued execution of the migration.\n\n`gh-ost` collects different throttle-related metrics at different times, independently. It asynchronously reads the collected metrics and checks if they satisfy conditions/thresholds.\n\nThe first check to suggest throttling stops the check; the status message will note the reason for throttling as the first satisfied check.\n\n### Throttle status\n\nThe throttle status is printed as part of the periodic [status message](understanding-output.md):\n\n```\nCopy: 0/2915 0.0%; Applied: 0; Backlog: 0/100; Time: 41s(total), 41s(copy); streamer: mysql-bin.000551:47983; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, flag-file; ETA: N/A\nCopy: 0/2915 0.0%; Applied: 0; Backlog: 0/100; Time: 42s(total), 42s(copy); streamer: mysql-bin.000551:49370; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, commanded by user; ETA: N/A\n```\n\n### How long can you throttle for?\n\nThrottling time is limited by the availability of the binary logs. When throttling begins, `gh-ost` suspends reading the binary logs, and expects to resume reading from same binary log where it paused.\n\nYour availability of binary logs is typically determined by the [expire_logs_days](https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html#sysvar_expire_logs_days) variable. If you have `expire_logs_days = 10` (or check `select @@global.expire_logs_days`), then you should be able to throttle for up to `10` days.\n\nHaving said that, throttling for so long is far fetching, in that the `gh-ost` process itself must be kept alive during that time; and the amount of binary logs to process once it resumes will potentially take days to replay.\n\nIt is worth mentioning that some deployments have external scheduled scripts that purge binary logs, regardless of the `expire_logs_days` configuration. Please verify your own deployment configuration.\n\nTo clarify, you only need to keep binary logs on the single server `gh-ost` connects to.\n"
  },
  {
    "path": "doc/triggerless-design.md",
    "content": "# Triggerless design\n\nA breakdown of the logic and algorithm behind `gh-ost`'s triggerless design, followed by the implications, advantages and disadvantages of such design.\n\n### Trigger-based migrations background\n\nIt is worthwhile to consider two popular existing online schema change solutions:\n\n- [pt-online-schema-change](https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html)\n- [Facebook OSC](https://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932/)\n\nThe former uses a synchronous design: it adds three triggers (`AFTER INSERT`, `AFTER UPDATE`, `AFTER DELETE`) on the original table. Each such trigger relays the operation onto the ghost table. So for every `UPDATE` on the original table, an `UPDATE` executes on the ghost table. A `DELETE` on the original table triggers a `DELETE` on the ghost table. Same for `INSERT`. The triggers live in the same transaction space as the original query.\n\nThe latter uses an asynchronous design: it adds three triggers (`AFTER INSERT`, `AFTER UPDATE`, `AFTER DELETE`) on the original table. It also creates a _changelog_ table. The triggers do not relay operations directly to the ghost table. Instead, they each add an entry to the changelog table. An `UPDATE` on the original table makes for an `INSERT` on the changelog table saying \"There was an UPDATE on the original table with this and that values\"; likewise for `INSERT` and `DELETE`.\nA background process tails the changelog table and applies the changes onto the ghost table. This approach is asynchronous in that the applier does not live in the same transaction space as the original table, and may operate on a change event seconds or more after said event was written.\nIt is noteworthy that the writes to the changelog table still live in the same transaction space as the writes on the original table.\n\n### Triggerless based asynchronous migrations\n\n`gh-ost`'s triggerless design uses an asynchronous approach. However it does not require triggers because it does not require having a _changelog_ table like the FB tool does. The reason it does not require a changelog table is that it finds the changelog in another place: the binary logs.\n\nIn particular, it reads Row Based Replication (RBR) entries (you can still [use it with Statement Based Replication!](migrating-with-sbr.md)) and searches for entries that apply to the original table.\n\nRBR entries are very convenient for this job: they break complex statements, potentially multi-table, into distinct, per-table, per-row entries, which are easy to read and apply.\n\n`gh-ost` pretends to be a MySQL replica: it connects to the MySQL server and begins requesting for binlog events as though it were a real replication server. Thus, it gets a continuous streaming of the binary logs, and filters out those events that apply to the original table.\n\n`gh-ost` can connect directly to the master, but prefers to connect to one of its replicas. Such a replica would need to use `log-slave-updates` and use `binlog-format=ROW` (`gh-ost` can change the latter setting for you).\n\nReading from the binary log, specially in the case of reading those on a replica, further stresses the asynchronous nature of the algorithm. While the transaction _may_ (based on configuration) be synced with the binlog entry write, it will take time until `gh-ost` - pretending to be a replica - will get notification for that, copy the event downstream and apply it.\n\nThe asynchronous design implies many noteworthy outcomes, to be discussed later on.\n\n### Workflow overview\n\nThe workflow includes reading table data from the server, reading event data from the binary log, checking for replication lag or other throttling parameters, applying changes onto the server (typically the master), sending hints through the binary log stream and more.\n\nSome flow breakdown:\n\n#### Initial setup & validation\nInitial setup is a no-concurrency operation\n\n- Connecting to replica/master, detecting master identify\n- Pre-validating `alter` statement\n- Initial sanity: privileges, existence of tables\n- Creation of changelog and ghost tables.\n- Applying `alter` on ghost table\n- Comparing structure of original & ghost table. Looking for shared columns, shared unique keys, validating foreign keys. Choosing shared unique key, the key by which we chunk the table and process it.\n- Setting up the binlog listener; begin listening on changelog events\n- Injecting a \"good to go\" entry onto the changelog table (to be intercepted via binary logs)\n- Begin listening on binlog events for original table DMLs\n- Reading original table's chosen key min/max values\n\n#### Copy flow\nThis setup includes multiple moving parts, all acting concurrently with some coordination\n\n- Setting up a heartbeat mechanism: frequent writes on the changelog table (we consider this to be low, negligible write load for throttling purposes)\n- Continuously updating status\n- Periodically (frequently) checking for potential throttle scenarios or hints\n- Work through the original table's rows range, chunk by chunk, queueing copy tasks onto the ghost table\n- Reading DML events from the binlogs, queueing apply tasks onto the ghost table\n- Processing the copy tasks queue and the apply tasks queue and sequentially applying onto ghost table\n  - Suspending by throttle state\n- Injecting/intercepting \"copy all done\" once full row-copy range has been exhausted\n- Stall/postpone while `postpone-cut-over-flag-file` exists (we keep apply ongoing DMLs)\n\n#### Cut-over and completion\n\n- Locking the original table for writes, working on what remains on the binlog event backlog (recall this is an asynchronous operation, and so even as the table is locked, we still have unhandled events in our pipe).\n- Swapping the original table out, the ghost table in\n- Cleanup: potential drop of tables\n\n### Asynchronous design implications\n\n#### Cut-over phase\n\nA complication the asynchronous approach presents is the cut-over phase: the swapping of the tables. In the synchronous approach, the two tables are kept in sync thanks to the transaction-space in which the triggers operate. Thus, a simple, atomic `rename table original to _original_old, ghost to original` suffices and is valid.\n\nIn the asynchronous approach, as we lock the original table, we often still have events in the pipeline, changes in the binary log we still need to apply onto the ghost table. An atomic swap would be a premature and incorrect solution, since it would imply the write load would immediately proceed to operate on what used to be the ghost table, even before we completed applying those last changes.\n\nThe Facebook solution uses an \"outage\", two-step rename:\n\n- Lock the original table, work on backlog\n- Rename original table to `_old`\n- Rename ghost table to original\n\nIn between those two renames there's a point in time where the table does not exist, hence there's a \"table outage\".\n\n`gh-ost` solves this by using a two-step algorithm that blocks writes to the table, then issues an atomic swap. It uses safety latches such that the operation either succeeds, atomically, or fails, bringing us back to pre-cut-over stage.\n\nRead more on the [cut-over](cut-over.md) documentation.\n\n#### Decoupling\n\nThe most impacting change the triggerless, asynchronous approach provides is the decoupling of workload. With triggers, either synchronous or asynchronous, every write on your table implied an immediate write on another table.\n\nWe will break down the meaning of workload decoupling, shortly. But it is important to understand that `gh-ost` interprets the situation in its own time and acts in its own time, yet still makes this an online operation.\n\nThe decoupling is important not only as the tool's logic goes, but very importantly as the master server sees it. As far as the master knows, write to the table and writes to the ghost table are unrelated.\n\n#### Writer load\n\nNot using triggers means the master no longer needs to overload multiple, concurrent writes with stored routine interpretation combined with lock contention on the ghost table.\n\nThe responsibility for applying data to the ghost table is completely `gh-ost`'s. As such, `gh-ost` decides which data gets to be written to the ghost table and when. We are decoupled from the original table's write load, and choose to write to the ghost table in a single thread.\n\nMySQL does not perform well on multiple concurrent massive writes to a specific table. Locking becomes an issue. This is why we choose to alternate between the massive row-copy and the ongoing binlog events backlog such that the server only sees writes from a single connection.\n\nIt is also interesting to observe that `gh-ost` is the only application writing to the ghost table. No one else is even aware of its existence. Thus, the trigger originated problem of high concurrency, high contention writes simply does not exist in `gh-ost`.\n\n#### Pausability\n\nWhen `gh-ost` pauses (throttles), it issues no writes on the ghost table. Because there are no triggers, write workload is decoupled from the `gh-ost` write workload. And because we're using an asynchronous approach, the algorithm already handles a time difference between a master write time and the ghost apply time. A difference of a few microseconds is no different from a difference of minutes or hours.\n\nWhen `gh-ost` [throttles](throttle.md), either by replication lag, `max-load` setting or an explicit [interactive user command](interactive-commands.md), the master is back to normal. It sees no more writes on the ghost table.\nAn exception is the ongoing heartbeat writes onto the changelog table, which we consider to be negligible.\n\n#### Testability\n\nWe are able to test the migration process: as we've decoupled the migration operation from the master's workload, we are good to apply the changes not to the master, but to one of its replicas. We are able to migrate a table on a replica.\n\nThis in itself is a nice feature; but it also presents us with testability: just as we complete the migration, we stop replication on the replica. We cut-over but rollback again. We do not drop any table. The result is both the original and ghost table exist on the replica, which is not taking any further changes. We have time to examine the two tables and compare them to our satisfaction.\n\nThis is the method used by GitHub to continuously validate the tool's integrity: multiple production replicas are continuously and repeatedly doing a \"trivial migration\" (no actually change of column) on all our production tables. Each migration is followed by a checksum of the entire table data, on both original and ghost tables. We expect the checksums to be identical and we log the results. We expect zero failures.\n\n#### Multiple, concurrent migrations\n\n`gh-ost` was designed with having multiple concurrent migration running in parallel (no two on the same table, of course). The asynchronous approach supports that design by not caring when data is being shipped to the ghost table. The fact no triggers exist means multiple migrations appear to the master (or other migrated host) just as multiple connections, each writing to some otherwise unknown table. Each can throttle in its own time, or we can throttle all together.\n\n#### Going outside the server space\n\nMore to come as we make progress.\n\n### No free meals\n\n#### Increased traffic\n\nThe existing tools utilize triggers to propagate data changes. `gh-ost` takes upon itself to read the data, then write it back. `gh-ost` actually prefers to read from a replica and write to the master. This implies data transfers between hosts, and certainly in/out the MySQL server daemon. At this time the MySQL client library used by `gh-ost` does not support compression, and so during a migration you can expect the full volume of a table to transfer on the wire.\n\n#### Code complexity\n\nWith the synchronous, trigger based approach, the role of the migration tool is relatively small. A lot of the migration is based on the triggers doing their job within the transaction space. Issues such as rollback, datatypes, cut-over are implicitly taken care of by the database. With `gh-ost`'s asynchronous approach, the tool turns complex. It connects to the master and onto a replica; it imposes as a replicating server; it writes heartbeat events; it reads binlog data into the app to be written again onto the migrated host; it need to manage connection failures, replication lag, and more.\n\nThe tool has therefore a larger codebase and a more complicated asynchronous, concurrent logic. But we jumped the opportunity to add some [perks](perks.md) and completely redesign how an online migration tool should work.\n"
  },
  {
    "path": "doc/understanding-output.md",
    "content": "# Understanding gh-ost output\n\n`gh-ost` attempts to be verbose to the point where you really know what it's doing, without completely spamming you.\nYou can control output levels:\n- `--verbose`: common use. Useful output, not tons of it\n- `--debug`: everything. Tons of output.\n\nInitial output lines may look like this:\n```\n2016-05-19 17:57:04 INFO starting gh-ost 0.7.14\n2016-05-19 17:57:04 INFO Migrating `mydb`.`mytable`\n2016-05-19 17:57:04 INFO connection validated on 127.0.0.1:3306\n2016-05-19 17:57:04 INFO User has ALL privileges\n2016-05-19 17:57:04 INFO binary logs validated on 127.0.0.1:3306\n2016-05-19 17:57:04 INFO Restarting replication on 127.0.0.1:3306 to make sure binlog settings apply to replication thread\n2016-05-19 17:57:04 INFO Table found. Engine=InnoDB\n2016-05-19 17:57:05 INFO As instructed, I'm issuing a SELECT COUNT(*) on the table. This may take a while\n2016-05-19 17:57:11 INFO Exact number of rows via COUNT: 4466810\n2016-05-19 17:57:11 INFO --test-on-replica given. Will not execute on master the.master:3306 but rather on replica 127.0.0.1:3306 itself\n2016-05-19 17:57:11 INFO Master found to be 127.0.0.1:3306\n2016-05-19 17:57:11 INFO connection validated on 127.0.0.1:3306\n2016-05-19 17:57:11 INFO Registering replica at 127.0.0.1:3306\n2016-05-19 17:57:11 INFO Connecting binlog streamer at mysql-bin.002587:348694066\n2016-05-19 17:57:11 INFO connection validated on 127.0.0.1:3306\n2016-05-19 17:57:11 INFO rotate to next log name: mysql-bin.002587\n2016-05-19 17:57:11 INFO connection validated on 127.0.0.1:3306\n2016-05-19 17:57:11 INFO Dropping table `mydb`.`_mytable_gst`\n2016-05-19 17:57:11 INFO Table dropped\n2016-05-19 17:57:11 INFO Dropping table `mydb`.`_mytable_old`\n2016-05-19 17:57:11 INFO Table dropped\n2016-05-19 17:57:11 INFO Creating ghost table `mydb`.`_mytable_gst`\n2016-05-19 17:57:11 INFO Ghost table created\n2016-05-19 17:57:11 INFO Altering ghost table `mydb`.`_mytable_gst`\n2016-05-19 17:57:11 INFO Ghost table altered\n2016-05-19 17:57:11 INFO Dropping table `mydb`.`_mytable_osc`\n2016-05-19 17:57:11 INFO Table dropped\n2016-05-19 17:57:11 INFO Creating changelog table `mydb`.`_mytable_osc`\n2016-05-19 17:57:11 INFO Changelog table created\n2016-05-19 17:57:11 INFO Chosen shared unique key is PRIMARY\n2016-05-19 17:57:11 INFO Shared columns are id,name,ref,col4,col5,col6\n```\nThose are relatively self explanatory. Mostly they indicate that all goes well.\n\nYou will be mostly interested in following up on the migration and understanding whether it goes well. Once migration actually begins, you will see output as follows:\n\n```\nCopy: 0/752865 0.0%; Applied: 0; Backlog: 0/100; Time: 29s(total), 0s(copy); streamer: mysql-bin.007068:846528615; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: N/A\nCopy: 0/752865 0.0%; Applied: 0; Backlog: 0/100; Time: 30s(total), 1s(copy); streamer: mysql-bin.007068:846875570; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: N/A\nCopy: 7300/752865 1.0%; Applied: 0; Backlog: 0/100; Time: 31s(total), 2s(copy); streamer: mysql-bin.007068:855439063; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: N/A\nCopy: 14100/752865 1.9%; Applied: 0; Backlog: 0/100; Time: 32s(total), 3s(copy); streamer: mysql-bin.007068:864722759; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 2m37s\nCopy: 20100/752865 2.7%; Applied: 0; Backlog: 0/100; Time: 33s(total), 4s(copy); streamer: mysql-bin.007068:874346340; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 2m26s\nCopy: 27000/752865 3.6%; Applied: 0; Backlog: 0/100; Time: 34s(total), 5s(copy); streamer: mysql-bin.007068:886997306; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 2m14s\n...\n```\nIn the above some time was spent on counting table rows. `29s` have elapsed before actual rowcopy began. `gh-ost` will not deliver ETA before `1%` of the copy is complete.\n\n```\nCopy: 460900/752865 61.2%; Applied: 0; Backlog: 0/100; Time: 2m35s(total), 2m6s(copy); streamer: mysql-bin.007069:596112173; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 1m19s\nCopy: 466600/752865 62.0%; Applied: 0; Backlog: 0/100; Time: 2m40s(total), 2m11s(copy); streamer: mysql-bin.007069:622646704; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, my.replica-01.com:3306 replica-lag=3.000000s; ETA: 1m19s\nCopy: 478500/752865 63.6%; Applied: 0; Backlog: 0/100; Time: 2m45s(total), 2m16s(copy); streamer: mysql-bin.007069:641258880; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 1m17s\nCopy: 496900/752865 66.0%; Applied: 0; Backlog: 0/100; Time: 2m50s(total), 2m21s(copy); streamer: mysql-bin.007069:678956577; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, my.replica-01.com:3306 replica-lag=2.000000s; ETA: 1m17s\nCopy: 496900/752865 66.0%; Applied: 0; Backlog: 0/100; Time: 2m55s(total), 2m26s(copy); streamer: mysql-bin.007069:681610879; Lag: 0.01s, HeartbeatLag: 0.01s, State: throttled, max-load Threads_running=26 >= 25; ETA: 1m17s\nCopy: 528000/752865 70.1%; Applied: 0; Backlog: 0/100; Time: 3m0s(total), 2m31s(copy); streamer: mysql-bin.007069:711177703; Lag: 2.483039s, HeartbeatLag: 0.01s, State: throttled, lag=2.483039s; ETA: 1m17s\nCopy: 564900/752865 75.0%; Applied: 0; Backlog: 0/100; Time: 3m30s(total), 3m1s(copy); streamer: mysql-bin.007069:795150744; Lag: 3.482914s, HeartbeatLag: 0.01s, State: throttled, lag=3.482914s; ETA: 1m17s\nCopy: 577200/752865 76.7%; Applied: 0; Backlog: 0/100; Time: 3m39s(total), 3m10s(copy); streamer: mysql-bin.007069:819956052; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 57s\nCopy: 589300/752865 78.3%; Applied: 0; Backlog: 0/100; Time: 3m56s(total), 3m27s(copy); streamer: mysql-bin.007069:858738375; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 57s\nCopy: 595700/752865 79.1%; Applied: 0; Backlog: 0/100; Time: 3m57s(total), 3m28s(copy); streamer: mysql-bin.007069:860745762; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 54s\n```\n\nIn the above migration is throttled on occasion.\n\n- A few times because one of the control replicas, specifically `my.replica-01.com:3306`, was lagging\n- Once because `max-load` threshold has been reached (`Threads_running=26 >= 25`)\n- Once because the migration replica itself (the server into which `gh-ost` connected) lagged.\n\n`gh-ost` will always specify the reason for throttling.\n\n### Progress\n\n- `Copy: 595700/752865 79.1%` indicates the number of existing table rows copied onto the _ghost_ table, out of an estimate of the total row count.\n- `Applied: 0` indicates the number of entries processed in the binary log and applied onto the _ghost_ table. In the examples above there was no traffic on the migrated table, hence no rows processed.\n\nA migration on a more intensively used table may look like this:\n\n```\nCopy: 30713100/43138319 71.2%; Applied: 381910; Backlog: 0/100; Time: 2h6m30s(total), 2h3m20s(copy); streamer: mysql-bin.006792:1001340307; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 49m53s\nCopy: 30852500/43138338 71.5%; Applied: 383365; Backlog: 0/100; Time: 2h7m0s(total), 2h3m50s(copy); streamer: mysql-bin.006792:1050191186; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 49m18s\n2016-07-25 03:20:41 INFO rotate to next log name: mysql-bin.006793\n2016-07-25 03:20:41 INFO rotate to next log name: mysql-bin.006793\nCopy: 30925700/43138360 71.7%; Applied: 384873; Backlog: 0/100; Time: 2h7m30s(total), 2h4m20s(copy); streamer: mysql-bin.006793:9144080; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 49m5s\nCopy: 31028800/43138380 71.9%; Applied: 386325; Backlog: 0/100; Time: 2h8m0s(total), 2h4m50s(copy); streamer: mysql-bin.006793:47984430; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 48m43s\nCopy: 31165600/43138397 72.2%; Applied: 387787; Backlog: 0/100; Time: 2h8m30s(total), 2h5m20s(copy); streamer: mysql-bin.006793:96139474; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 48m8s\nCopy: 31291200/43138418 72.5%; Applied: 389257; Backlog: 7/100; Time: 2h9m0s(total), 2h5m50s(copy); streamer: mysql-bin.006793:141094700; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: 47m38s\nCopy: 31389700/43138432 72.8%; Applied: 390629; Backlog: 100/100; Time: 2h9m30s(total), 2h6m20s(copy); streamer: mysql-bin.006793:179473435; Lag: 1.548707s, HeartbeatLag: 0.01s, State: throttled, lag=1.548707s; ETA: 47m38s\n```\n\nNotes:\n\n- `Applied: 381910`: `381910` events in the binary logs presenting changes to the migrated table have been processed and applied on the _ghost_ table since beginning of migration.\n- `Backlog: 0/100`: we are performing well on reading the binary log. There's nothing known in the binary log queue that awaits processing.\n- `Backlog: 7/100`: while copying rows, a few events have piled up in the binary log _modifying our table_ that we spotted, and still need to apply.\n- `Backlog: 100/100`: our buffer of `100` events is full; you may see this during or right after throttling (the binary logs keep filling up with relevant queries that are not being processed), or immediately following a high workload.\n  `gh-ost` will always prioritize binlog event processing (backlog) over row-copy; when next possible (throttling completes, in our example), `gh-ost` will drain the queue first, and only then proceed to resume row copy.\n  There is nothing wrong with seeing `100/100`; it just indicates we're behind at that point in time.\n- `Copy: 31291200/43138418`, `Copy: 31389700/43138432`: this migration executed with `--exact-rowcount`. `gh-ost` continuously heuristically updates the total number of expected row copies as migration proceeds, hence the change from `43138418` to `43138432`\n- `streamer: mysql-bin.006793:179473435` tells us which binary log entry is `gh-ost` processing at this time.\n\n### Status hint\n\nIn addition, once every `10` minutes, a friendly reminder is printed, in the following form:\n\n```\n# Migrating `mydb`.`mytable`; Ghost table is `mydb`.`_mytable_gst`\n# Migrating mysql.master-01.com:3306; inspecting mysql.replica-05.com:3306; executing on some.host-17.com\n# Migration started at Mon Jul 25 01:13:19 2016\n# chunk-size: 500; max lag: 1000ms; max-load: Threads_running=25; critical-load: Threads_running=1000; nice-ratio: 0\n# throttle-additional-flag-file: /tmp/gh-ost.throttle.flag.file\n# postpone-cut-over-flag-file: /tmp/gh-ost.postpone.flag.file [set]\n# panic-flag-file: /tmp/gh-ost.panic.flag.file\n# Serving on unix socket: /tmp/gh-ost.mydb.mytable.sock\n```\n\n- The above mostly print out the current configuration. Remember you can [dynamically control](interactive-commands.md) most of them.\n- `gh-ost` notes that the `postpone-cut-over-flag-file` file actually exists by printing `[set]`\n"
  },
  {
    "path": "doc/what-if.md",
    "content": "# What if?\n\nTechnical questions and answers. This document will be updated as we go\n\n### What if I'm using Statement Based Replication?\n\nYou can still migrate tables with `gh-ost`. We do that. What you will need is a replica configured with:\n\n- `log_bin`\n- `log_slave_updates`\n- `binlog_format=ROW`\n\nThus, the replica will transform the master's SBR binlogs into RBR binlogs. `gh-ost` is happy to read the binary logs from the replica. [Read more](migrating-with-sbr.md)\n\n### What if gh-ost crashes halfway through, or I kill it?\n\nUnlike trigger-based solutions, there's nothing urgent to clean up in the event `gh-ost` bails out or gets killed. There are the two tables creates by `gh-ost`:\n\n- The _ghost_ table: `_yourtablename_gho`\n- The _changelog_ table: `_yourtablename_ghc`\n\nYou may instruct `gh-ost` to drop these tables upon startup; or better yet, you drop them.\n\n### What if the cut-over (table switch) is unable to proceed due to locks/timeout?\n\nThere is a `lock_wait_timeout` explicitly associated with the cut-over operation. If your table suddenly suffers from a long running query, the cut-over (involving `LOCK` and `RENAME` statements) may be unable to proceed. There's a finite number of retries, and if none of these succeeds, `gh-ost` bails out.\n\n### What if the migration is causing a high load on my master?\n\nThis is where `gh-ost` shines. There is no need to kill it as you may be used to with other tools. You can reconfigure `gh-ost` [on the fly](https://github.com/github/gh-ost/blob/master/doc/interactive-commands.md) to be nicer.\n\nYou're always able to actively begin [throttling](throttle.md). Just touch the `throttle-file` or `echo throttle` into `gh-ost`. Otherwise, reconfigure your `max-load`, the `nice-ratio`, the `throttle-query` to gain better thresholds that would suit your needs.\n\n### What if my replicas don't use binary logs?\n\nIf the master is running Row Based Replication (RBR) - point `gh-ost` to the master, and specify `--allow-on-master`. See [cheatsheets](cheatsheet.md)\n\nIf the master is running Statement Based Replication (SBR) - you have no alternative but to reconfigure a replica with:\n\n- `log_bin`\n- `log_slave_updates`\n- `binlog_format=ROW`\n"
  },
  {
    "path": "doc/why-triggerless.md",
    "content": "# Why triggerless?\n\nExisting MySQL schema migration tools:\n\n- [pt-online-schema-change](https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html)\n- [Facebook OSC](https://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932/)\n- [LHM](https://github.com/soundcloud/lhm)\n- [oak-online-alter-table](https://github.com/shlomi-noach/openarkkit)\n\nare all using [triggers](https://dev.mysql.com/doc/refman/5.7/en/triggers.html) to propagate live changes on your table onto a ghost/shadow table that is slowly being synchronized. The tools not all work the same: while most use a synchronous approach (all changes applied on the ghost table), the Facebook tool uses an asynchronous approach (changes are appended to a changelog table, later reviewed and applied on ghost table).\n\nUse of triggers simplifies a lot of the flow in doing a live table migration, but also poses some limitations or difficulties. Here are reasons why we choose to [design a triggerless solution](triggerless-design.md) to schema migrations.\n\n\n## Overview\n\nTriggers are stored routines which are invoked on a per-row operation upon `INSERT`, `DELETE`, `UPDATE` on a table.\nThey were introduced in MySQL `5.0`.\nA trigger may contain a set of queries, and these queries run in the same transaction space as the query that manipulates the table. This makes for an atomicity of both the original operation on the table and the trigger-invoked operations.\n\n### Triggers, overhead\n\nA trigger in MySQL is a stored routine. MySQL stored routines are interpreted, never compiled. With triggers, for every `INSERT`, `DELETE`, `UPDATE` on our often busy table, we pay the necessary price of the additional write (onto ghost or changelog table), but also the price of interpreting the trigger body.\n\nWe know this to be a visible overhead on very busy or very large tables.\n\n### Triggers, locks\n\nWhen a table with triggers is concurrently being written to, the triggers, being in same transaction space as the incoming queries, are also executed concurrently. While concurrent queries compete for resources via locks (e.g. the `auto_increment` value), the triggers need to _simultaneously_ compete for their own locks (e.g., likewise on the `auto_increment` value on the ghost table, in a synchronous solution). These competitions are non-coordinated.\n\nWe have evidenced near or complete lock downs in production, to the effect of rendering the table or the entire database inaccessible due to lock contention.\n\n### Trigger based migration, no pause\n\nThe triggers are used to either apply or record ongoing changes to your original table.\n\nExisting online migration tools (notably `pt-online-schema-change`) support the notion of _throttling_: suspending execution when the master becomes too busy, or replication is unable to catch up.\n\nHowever this throttling is partial. The tool may only suspend the tedious and long task of copying the millions of rows from the original table onto the ghost table, but the tool may not, at any stage, cancel the triggers. Cancelling the triggers means loss of information, leading to incorrect data.\n\nThus, triggers must keep operating. On busy servers, we have seen that even as the online operation throttles, the master is brought down by the load of the triggers.\n\nRead more about [`gh-ost` throttling](throttle.md)\n\n### Triggers, multiple migrations\n\nWe are interested in being able to run multiple concurrent migrations (not on the same table, of course). Given all the above, we do not have trust that running multiple trigger-based migrations is a safe operation. In our current, past and shared experiences we have never done so; we are unaware of anyone who is doing so.\n\n### Trigger based migration, no reliable production test\n\nWe sometimes wish to experiment with a migration, or know in advance how much time it would take. A trigger-based solution allows us to run a migration on a replica, provided it uses Statement Based Replication.\n\nWith Row Based Replication there is no option at all to use triggers on a replica, since the triggers only execute on the master (replica only gets notified of the _effect_ of the trigger).\n\nBut even with Statement Based Replication we do not get a reliable representation of the migration as it would have executed on the master. MySQL replication (up to and including `5.6`) is single threaded, given a table, and even in `5.7` we do not expect to find concurrency on a single table. The triggers on the replica will invoke sequentially ; they will not simulate the same load, and they will not suffer from the same concurrency and locking problems depicted above, as on the master.\n\n### Trigger based migration, bound to server\n\nThe trigger space is within a MySQL service. It cannot go beyond that space. We are working towards a multi-server solution. More discussion as we make progress.\n\n## Triggerless design\n\nProceed to read about the [triggerless design](triggerless-design.md)\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "version: \"3.5\"\nservices:\n  app:\n    image: app\n    build:\n      context: .\n      dockerfile: Dockerfile.test\n"
  },
  {
    "path": "go/base/context.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage base\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\tuuid \"github.com/google/uuid\"\n\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n\t\"github.com/openark/golib/log\"\n\n\t\"github.com/go-ini/ini\"\n)\n\n// RowsEstimateMethod is the type of row number estimation\ntype RowsEstimateMethod string\n\nconst (\n\tTableStatusRowsEstimate RowsEstimateMethod = \"TableStatusRowsEstimate\"\n\tExplainRowsEstimate     RowsEstimateMethod = \"ExplainRowsEstimate\"\n\tCountRowsEstimate       RowsEstimateMethod = \"CountRowsEstimate\"\n)\n\ntype CutOver int\n\nconst (\n\tCutOverAtomic CutOver = iota\n\tCutOverTwoStep\n)\n\ntype ThrottleReasonHint string\n\nconst (\n\tNoThrottleReasonHint                 ThrottleReasonHint = \"NoThrottleReasonHint\"\n\tUserCommandThrottleReasonHint        ThrottleReasonHint = \"UserCommandThrottleReasonHint\"\n\tLeavingHibernationThrottleReasonHint ThrottleReasonHint = \"LeavingHibernationThrottleReasonHint\"\n)\n\nconst (\n\tHTTPStatusOK       = 200\n\tMaxEventsBatchSize = 1000\n\tETAUnknown         = math.MinInt64\n)\n\nvar (\n\tenvVariableRegexp = regexp.MustCompile(\"[$][{](.*)[}]\")\n)\n\ntype ThrottleCheckResult struct {\n\tShouldThrottle bool\n\tReason         string\n\tReasonHint     ThrottleReasonHint\n}\n\nfunc NewThrottleCheckResult(throttle bool, reason string, reasonHint ThrottleReasonHint) *ThrottleCheckResult {\n\treturn &ThrottleCheckResult{\n\t\tShouldThrottle: throttle,\n\t\tReason:         reason,\n\t\tReasonHint:     reasonHint,\n\t}\n}\n\n// MigrationContext has the general, global state of migration. It is used by\n// all components throughout the migration process.\ntype MigrationContext struct {\n\tUuid string\n\n\tDatabaseName          string\n\tOriginalTableName     string\n\tAlterStatement        string\n\tAlterStatementOptions string // anything following the 'ALTER TABLE [schema.]table' from AlterStatement\n\n\tcountMutex               sync.Mutex\n\tcountTableRowsCancelFunc func()\n\tCountTableRows           bool\n\tConcurrentCountTableRows bool\n\tAllowedRunningOnMaster   bool\n\tAllowedMasterMaster      bool\n\tSwitchToRowBinlogFormat  bool\n\tAssumeRBR                bool\n\tSkipForeignKeyChecks     bool\n\tSkipStrictMode           bool\n\tAllowZeroInDate          bool\n\tNullableUniqueKeyAllowed bool\n\tApproveRenamedColumns    bool\n\tSkipRenamedColumns       bool\n\tIsTungsten               bool\n\tDiscardForeignKeys       bool\n\tAliyunRDS                bool\n\tGoogleCloudPlatform      bool\n\tAzureMySQL               bool\n\tAttemptInstantDDL        bool\n\tResume                   bool\n\tRevert                   bool\n\tOldTableName             string\n\n\t// SkipPortValidation allows skipping the port validation in `ValidateConnection`\n\t// This is useful when connecting to a MySQL instance where the external port\n\t// may not match the internal port.\n\tSkipPortValidation bool\n\tUseGTIDs           bool\n\n\tconfig            ContextConfig\n\tconfigMutex       *sync.Mutex\n\tConfigFile        string\n\tCliUser           string\n\tCliPassword       string\n\tUseTLS            bool\n\tTLSAllowInsecure  bool\n\tTLSCACertificate  string\n\tTLSCertificate    string\n\tTLSKey            string\n\tCliMasterUser     string\n\tCliMasterPassword string\n\n\tHeartbeatIntervalMilliseconds       int64\n\tdefaultNumRetries                   int64\n\tChunkSize                           int64\n\tniceRatio                           float64\n\tMaxLagMillisecondsThrottleThreshold int64\n\tthrottleControlReplicaKeys          *mysql.InstanceKeyMap\n\tThrottleFlagFile                    string\n\tThrottleAdditionalFlagFile          string\n\tthrottleQuery                       string\n\tthrottleHTTP                        string\n\tIgnoreHTTPErrors                    bool\n\tThrottleCommandedByUser             int64\n\tHibernateUntil                      int64\n\tmaxLoad                             LoadMap\n\tcriticalLoad                        LoadMap\n\tCriticalLoadIntervalMilliseconds    int64\n\tCriticalLoadHibernateSeconds        int64\n\tPostponeCutOverFlagFile             string\n\tCutOverLockTimeoutSeconds           int64\n\tCutOverExponentialBackoff           bool\n\tExponentialBackoffMaxInterval       int64\n\tForceNamedCutOverCommand            bool\n\tForceNamedPanicCommand              bool\n\tPanicFlagFile                       string\n\tHooksPath                           string\n\tHooksHintMessage                    string\n\tHooksHintOwner                      string\n\tHooksHintToken                      string\n\tHooksStatusIntervalSec              int64\n\tPanicOnWarnings                     bool\n\tCheckpoint                          bool\n\tCheckpointIntervalSeconds           int64\n\n\tDropServeSocket bool\n\tServeSocketFile string\n\tServeTCPPort    int64\n\n\tNoop                         bool\n\tTestOnReplica                bool\n\tMigrateOnReplica             bool\n\tTestOnReplicaSkipReplicaStop bool\n\tOkToDropTable                bool\n\tInitiallyDropOldTable        bool\n\tInitiallyDropGhostTable      bool\n\tTimestampOldTable            bool // Should old table name include a timestamp\n\tCutOverType                  CutOver\n\tReplicaServerId              uint\n\n\tHostname                               string\n\tAssumeMasterHostname                   string\n\tApplierTimeZone                        string\n\tApplierWaitTimeout                     int64\n\tTableEngine                            string\n\tRowsEstimate                           int64\n\tRowsDeltaEstimate                      int64\n\tUsedRowsEstimateMethod                 RowsEstimateMethod\n\tHasSuperPrivilege                      bool\n\tOriginalBinlogFormat                   string\n\tOriginalBinlogRowImage                 string\n\tInspectorConnectionConfig              *mysql.ConnectionConfig\n\tInspectorMySQLVersion                  string\n\tApplierConnectionConfig                *mysql.ConnectionConfig\n\tApplierMySQLVersion                    string\n\tStartTime                              time.Time\n\tRowCopyStartTime                       time.Time\n\tRowCopyEndTime                         time.Time\n\tLockTablesStartTime                    time.Time\n\tRenameTablesStartTime                  time.Time\n\tRenameTablesEndTime                    time.Time\n\tpointOfInterestTime                    time.Time\n\tpointOfInterestTimeMutex               *sync.Mutex\n\tlastHeartbeatOnChangelogTime           time.Time\n\tlastHeartbeatOnChangelogMutex          *sync.Mutex\n\tCurrentLag                             int64\n\tcurrentProgress                        uint64\n\tetaNanoseonds                          int64\n\tEtaRowsPerSecond                       int64\n\tThrottleHTTPIntervalMillis             int64\n\tThrottleHTTPStatusCode                 int64\n\tThrottleHTTPTimeoutMillis              int64\n\tcontrolReplicasLagResult               mysql.ReplicationLagResult\n\tTotalRowsCopied                        int64\n\tTotalDMLEventsApplied                  int64\n\tDMLBatchSize                           int64\n\tisThrottled                            bool\n\tthrottleReason                         string\n\tthrottleReasonHint                     ThrottleReasonHint\n\tthrottleGeneralCheckResult             ThrottleCheckResult\n\tthrottleMutex                          *sync.Mutex\n\tthrottleHTTPMutex                      *sync.Mutex\n\tIsPostponingCutOver                    int64\n\tCountingRowsFlag                       int64\n\tAllEventsUpToLockProcessedInjectedFlag int64\n\tCleanupImminentFlag                    int64\n\tUserCommandedUnpostponeFlag            int64\n\tCutOverCompleteFlag                    int64\n\tInCutOverCriticalSectionFlag           int64\n\tPanicAbort                             chan error\n\n\t// Context for cancellation signaling across all goroutines\n\t// Stored in struct as it spans the entire migration lifecycle, not per-function.\n\t// context.Context is safe for concurrent use by multiple goroutines.\n\tctx        context.Context //nolint:containedctx\n\tcancelFunc context.CancelFunc\n\n\t// Stores the fatal error that triggered abort\n\tAbortError error\n\tabortMutex *sync.Mutex\n\n\tOriginalTableColumnsOnApplier    *sql.ColumnList\n\tOriginalTableColumns             *sql.ColumnList\n\tOriginalTableVirtualColumns      *sql.ColumnList\n\tOriginalTableUniqueKeys          [](*sql.UniqueKey)\n\tOriginalTableAutoIncrement       uint64\n\tGhostTableColumns                *sql.ColumnList\n\tGhostTableVirtualColumns         *sql.ColumnList\n\tGhostTableUniqueKeys             [](*sql.UniqueKey)\n\tUniqueKey                        *sql.UniqueKey\n\tSharedColumns                    *sql.ColumnList\n\tColumnRenameMap                  map[string]string\n\tDroppedColumnsMap                map[string]bool\n\tMappedSharedColumns              *sql.ColumnList\n\tMigrationLastInsertSQLWarnings   []string\n\tMigrationRangeMinValues          *sql.ColumnValues\n\tMigrationRangeMaxValues          *sql.ColumnValues\n\tIteration                        int64\n\tMigrationIterationRangeMinValues *sql.ColumnValues\n\tMigrationIterationRangeMaxValues *sql.ColumnValues\n\tInitialStreamerCoords            mysql.BinlogCoordinates\n\tForceTmpTableName                string\n\n\tIncludeTriggers     bool\n\tRemoveTriggerSuffix bool\n\tTriggerSuffix       string\n\tTriggers            []mysql.Trigger\n\n\trecentBinlogCoordinates mysql.BinlogCoordinates\n\n\tBinlogSyncerMaxReconnectAttempts  int\n\tAllowSetupMetadataLockInstruments bool\n\tSkipMetadataLockCheck             bool\n\tIsOpenMetadataLockInstruments     bool\n\n\tLog Logger\n}\n\ntype Logger interface {\n\tDebug(args ...interface{})\n\tDebugf(format string, args ...interface{})\n\tInfo(args ...interface{})\n\tInfof(format string, args ...interface{})\n\tWarning(args ...interface{}) error\n\tWarningf(format string, args ...interface{}) error\n\tError(args ...interface{}) error\n\tErrorf(format string, args ...interface{}) error\n\tErrore(err error) error\n\tFatal(args ...interface{}) error\n\tFatalf(format string, args ...interface{}) error\n\tFatale(err error) error\n\tSetLevel(level log.LogLevel)\n\tSetPrintStackTrace(printStackTraceFlag bool)\n}\n\ntype ContextConfig struct {\n\tClient struct {\n\t\tUser     string\n\t\tPassword string\n\t}\n\tOsc struct {\n\t\tChunk_Size            int64\n\t\tMax_Lag_Millis        int64\n\t\tReplication_Lag_Query string\n\t\tMax_Load              string\n\t}\n}\n\nfunc NewMigrationContext() *MigrationContext {\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\treturn &MigrationContext{\n\t\tUuid:                                uuid.NewString(),\n\t\tdefaultNumRetries:                   60,\n\t\tChunkSize:                           1000,\n\t\tInspectorConnectionConfig:           mysql.NewConnectionConfig(),\n\t\tApplierConnectionConfig:             mysql.NewConnectionConfig(),\n\t\tMaxLagMillisecondsThrottleThreshold: 1500,\n\t\tCutOverLockTimeoutSeconds:           3,\n\t\tDMLBatchSize:                        10,\n\t\tetaNanoseonds:                       ETAUnknown,\n\t\tmaxLoad:                             NewLoadMap(),\n\t\tcriticalLoad:                        NewLoadMap(),\n\t\tthrottleMutex:                       &sync.Mutex{},\n\t\tthrottleHTTPMutex:                   &sync.Mutex{},\n\t\tthrottleControlReplicaKeys:          mysql.NewInstanceKeyMap(),\n\t\tconfigMutex:                         &sync.Mutex{},\n\t\tpointOfInterestTimeMutex:            &sync.Mutex{},\n\t\tlastHeartbeatOnChangelogMutex:       &sync.Mutex{},\n\t\tColumnRenameMap:                     make(map[string]string),\n\t\tPanicAbort:                          make(chan error),\n\t\tctx:                                 ctx,\n\t\tcancelFunc:                          cancelFunc,\n\t\tabortMutex:                          &sync.Mutex{},\n\t\tLog:                                 NewDefaultLogger(),\n\t}\n}\n\nfunc (this *MigrationContext) SetConnectionConfig(storageEngine string) error {\n\tvar transactionIsolation string\n\tswitch storageEngine {\n\tcase \"rocksdb\":\n\t\ttransactionIsolation = \"READ-COMMITTED\"\n\tdefault:\n\t\ttransactionIsolation = \"REPEATABLE-READ\"\n\t}\n\tthis.InspectorConnectionConfig.TransactionIsolation = transactionIsolation\n\tthis.ApplierConnectionConfig.TransactionIsolation = transactionIsolation\n\treturn nil\n}\n\nfunc (this *MigrationContext) SetConnectionCharset(charset string) {\n\tif charset == \"\" {\n\t\tcharset = \"utf8mb4,utf8,latin1\"\n\t}\n\n\tthis.InspectorConnectionConfig.Charset = charset\n\tthis.ApplierConnectionConfig.Charset = charset\n}\n\nfunc getSafeTableName(baseName string, suffix string) string {\n\tname := fmt.Sprintf(\"_%s_%s\", baseName, suffix)\n\tif len(name) <= mysql.MaxTableNameLength {\n\t\treturn name\n\t}\n\textraCharacters := len(name) - mysql.MaxTableNameLength\n\treturn fmt.Sprintf(\"_%s_%s\", baseName[0:len(baseName)-extraCharacters], suffix)\n}\n\n// GetGhostTableName generates the name of ghost table, based on original table name\n// or a given table name\nfunc (this *MigrationContext) GetGhostTableName() string {\n\tif this.Revert {\n\t\t// When reverting the \"ghost\" table is the _del table from the original migration.\n\t\treturn this.OldTableName\n\t}\n\tif this.ForceTmpTableName != \"\" {\n\t\treturn getSafeTableName(this.ForceTmpTableName, \"gho\")\n\t} else {\n\t\treturn getSafeTableName(this.OriginalTableName, \"gho\")\n\t}\n}\n\n// GetOldTableName generates the name of the \"old\" table, into which the original table is renamed.\nfunc (this *MigrationContext) GetOldTableName() string {\n\tvar tableName string\n\tif this.ForceTmpTableName != \"\" {\n\t\ttableName = this.ForceTmpTableName\n\t} else {\n\t\ttableName = this.OriginalTableName\n\t}\n\n\tsuffix := \"del\"\n\tif this.Revert {\n\t\tsuffix = \"rev_del\"\n\t}\n\tif this.TimestampOldTable {\n\t\tt := this.StartTime\n\t\ttimestamp := fmt.Sprintf(\"%d%02d%02d%02d%02d%02d\",\n\t\t\tt.Year(), t.Month(), t.Day(),\n\t\t\tt.Hour(), t.Minute(), t.Second())\n\t\treturn getSafeTableName(tableName, fmt.Sprintf(\"%s_%s\", timestamp, suffix))\n\t}\n\treturn getSafeTableName(tableName, suffix)\n}\n\n// GetChangelogTableName generates the name of changelog table, based on original table name\n// or a given table name.\nfunc (this *MigrationContext) GetChangelogTableName() string {\n\tif this.ForceTmpTableName != \"\" {\n\t\treturn getSafeTableName(this.ForceTmpTableName, \"ghc\")\n\t} else {\n\t\treturn getSafeTableName(this.OriginalTableName, \"ghc\")\n\t}\n}\n\n// GetCheckpointTableName generates the name of checkpoint table.\nfunc (this *MigrationContext) GetCheckpointTableName() string {\n\tif this.ForceTmpTableName != \"\" {\n\t\treturn getSafeTableName(this.ForceTmpTableName, \"ghk\")\n\t} else {\n\t\treturn getSafeTableName(this.OriginalTableName, \"ghk\")\n\t}\n}\n\n// GetVoluntaryLockName returns a name of a voluntary lock to be used throughout\n// the swap-tables process.\nfunc (this *MigrationContext) GetVoluntaryLockName() string {\n\treturn fmt.Sprintf(\"%s.%s.lock\", this.DatabaseName, this.OriginalTableName)\n}\n\n// RequiresBinlogFormatChange is `true` when the original binlog format isn't `ROW`\nfunc (this *MigrationContext) RequiresBinlogFormatChange() bool {\n\treturn this.OriginalBinlogFormat != \"ROW\"\n}\n\n// GetApplierHostname is a safe access method to the applier hostname\nfunc (this *MigrationContext) GetApplierHostname() string {\n\tif this.ApplierConnectionConfig == nil {\n\t\treturn \"\"\n\t}\n\tif this.ApplierConnectionConfig.ImpliedKey == nil {\n\t\treturn \"\"\n\t}\n\treturn this.ApplierConnectionConfig.ImpliedKey.Hostname\n}\n\n// GetInspectorHostname is a safe access method to the inspector hostname\nfunc (this *MigrationContext) GetInspectorHostname() string {\n\tif this.InspectorConnectionConfig == nil {\n\t\treturn \"\"\n\t}\n\tif this.InspectorConnectionConfig.ImpliedKey == nil {\n\t\treturn \"\"\n\t}\n\treturn this.InspectorConnectionConfig.ImpliedKey.Hostname\n}\n\n// InspectorIsAlsoApplier is `true` when the both inspector and applier are the\n// same database instance. This would be true when running directly on master or when\n// testing on replica.\nfunc (this *MigrationContext) InspectorIsAlsoApplier() bool {\n\treturn this.InspectorConnectionConfig.Equals(this.ApplierConnectionConfig)\n}\n\n// HasMigrationRange tells us whether there's a range to iterate for copying rows.\n// It will be `false` if the table is initially empty\nfunc (this *MigrationContext) HasMigrationRange() bool {\n\treturn this.MigrationRangeMinValues != nil && this.MigrationRangeMaxValues != nil\n}\n\nfunc (this *MigrationContext) SetCutOverLockTimeoutSeconds(timeoutSeconds int64) error {\n\tif timeoutSeconds < 1 {\n\t\treturn fmt.Errorf(\"Minimal timeout is 1sec. Timeout remains at %d\", this.CutOverLockTimeoutSeconds)\n\t}\n\tif timeoutSeconds > 10 {\n\t\treturn fmt.Errorf(\"Maximal timeout is 10sec. Timeout remains at %d\", this.CutOverLockTimeoutSeconds)\n\t}\n\tthis.CutOverLockTimeoutSeconds = timeoutSeconds\n\treturn nil\n}\n\nfunc (this *MigrationContext) SetExponentialBackoffMaxInterval(intervalSeconds int64) error {\n\tif intervalSeconds < 2 {\n\t\treturn fmt.Errorf(\"Minimal maximum interval is 2sec. Timeout remains at %d\", this.ExponentialBackoffMaxInterval)\n\t}\n\tthis.ExponentialBackoffMaxInterval = intervalSeconds\n\treturn nil\n}\n\nfunc (this *MigrationContext) SetDefaultNumRetries(retries int64) {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tif retries > 0 {\n\t\tthis.defaultNumRetries = retries\n\t}\n}\n\nfunc (this *MigrationContext) MaxRetries() int64 {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tretries := this.defaultNumRetries\n\treturn retries\n}\n\nfunc (this *MigrationContext) IsTransactionalTable() bool {\n\tswitch strings.ToLower(this.TableEngine) {\n\tcase \"innodb\":\n\t\t{\n\t\t\treturn true\n\t\t}\n\tcase \"tokudb\":\n\t\t{\n\t\t\treturn true\n\t\t}\n\tcase \"rocksdb\":\n\t\t{\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// SetCountTableRowsCancelFunc sets the cancel function for the CountTableRows query context\nfunc (this *MigrationContext) SetCountTableRowsCancelFunc(f func()) {\n\tthis.countMutex.Lock()\n\tdefer this.countMutex.Unlock()\n\n\tthis.countTableRowsCancelFunc = f\n}\n\n// IsCountingTableRows returns true if the migration has a table count query running\nfunc (this *MigrationContext) IsCountingTableRows() bool {\n\tthis.countMutex.Lock()\n\tdefer this.countMutex.Unlock()\n\n\treturn this.countTableRowsCancelFunc != nil\n}\n\n// CancelTableRowsCount cancels the CountTableRows query context. It is safe to\n// call function even when IsCountingTableRows is false.\nfunc (this *MigrationContext) CancelTableRowsCount() {\n\tthis.countMutex.Lock()\n\tdefer this.countMutex.Unlock()\n\n\tif this.countTableRowsCancelFunc == nil {\n\t\treturn\n\t}\n\n\tthis.countTableRowsCancelFunc()\n\tthis.countTableRowsCancelFunc = nil\n}\n\n// ElapsedTime returns time since very beginning of the process\nfunc (this *MigrationContext) ElapsedTime() time.Duration {\n\treturn time.Since(this.StartTime)\n}\n\n// MarkRowCopyStartTime\nfunc (this *MigrationContext) MarkRowCopyStartTime() {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tthis.RowCopyStartTime = time.Now()\n}\n\n// ElapsedRowCopyTime returns time since starting to copy chunks of rows\nfunc (this *MigrationContext) ElapsedRowCopyTime() time.Duration {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tif this.RowCopyStartTime.IsZero() {\n\t\t// Row copy hasn't started yet\n\t\treturn 0\n\t}\n\n\tif this.RowCopyEndTime.IsZero() {\n\t\treturn time.Since(this.RowCopyStartTime)\n\t}\n\treturn this.RowCopyEndTime.Sub(this.RowCopyStartTime)\n}\n\n// ElapsedRowCopyTime returns time since starting to copy chunks of rows\nfunc (this *MigrationContext) MarkRowCopyEndTime() {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tthis.RowCopyEndTime = time.Now()\n}\n\nfunc (this *MigrationContext) TimeSinceLastHeartbeatOnChangelog() time.Duration {\n\treturn time.Since(this.GetLastHeartbeatOnChangelogTime())\n}\n\nfunc (this *MigrationContext) GetCurrentLagDuration() time.Duration {\n\treturn time.Duration(atomic.LoadInt64(&this.CurrentLag))\n}\n\nfunc (this *MigrationContext) GetProgressPct() float64 {\n\treturn math.Float64frombits(atomic.LoadUint64(&this.currentProgress))\n}\n\nfunc (this *MigrationContext) SetProgressPct(progressPct float64) {\n\tatomic.StoreUint64(&this.currentProgress, math.Float64bits(progressPct))\n}\n\nfunc (this *MigrationContext) GetETADuration() time.Duration {\n\treturn time.Duration(atomic.LoadInt64(&this.etaNanoseonds))\n}\n\nfunc (this *MigrationContext) SetETADuration(etaDuration time.Duration) {\n\tatomic.StoreInt64(&this.etaNanoseonds, etaDuration.Nanoseconds())\n}\n\nfunc (this *MigrationContext) GetETASeconds() int64 {\n\tnano := atomic.LoadInt64(&this.etaNanoseonds)\n\tif nano < 0 {\n\t\treturn ETAUnknown\n\t}\n\treturn nano / int64(time.Second)\n}\n\n// math.Float64bits([f=0..100])\n\n// GetTotalRowsCopied returns the accurate number of rows being copied (affected)\n// This is not exactly the same as the rows being iterated via chunks, but potentially close enough\nfunc (this *MigrationContext) GetTotalRowsCopied() int64 {\n\treturn atomic.LoadInt64(&this.TotalRowsCopied)\n}\n\nfunc (this *MigrationContext) GetIteration() int64 {\n\treturn atomic.LoadInt64(&this.Iteration)\n}\n\nfunc (this *MigrationContext) SetNextIterationRangeMinValues() {\n\tthis.MigrationIterationRangeMinValues = this.MigrationIterationRangeMaxValues\n\tif this.MigrationIterationRangeMinValues == nil {\n\t\tthis.MigrationIterationRangeMinValues = this.MigrationRangeMinValues\n\t}\n}\n\nfunc (this *MigrationContext) MarkPointOfInterest() int64 {\n\tthis.pointOfInterestTimeMutex.Lock()\n\tdefer this.pointOfInterestTimeMutex.Unlock()\n\n\tthis.pointOfInterestTime = time.Now()\n\treturn atomic.LoadInt64(&this.Iteration)\n}\n\nfunc (this *MigrationContext) TimeSincePointOfInterest() time.Duration {\n\tthis.pointOfInterestTimeMutex.Lock()\n\tdefer this.pointOfInterestTimeMutex.Unlock()\n\n\treturn time.Since(this.pointOfInterestTime)\n}\n\nfunc (this *MigrationContext) SetLastHeartbeatOnChangelogTime(t time.Time) {\n\tthis.lastHeartbeatOnChangelogMutex.Lock()\n\tdefer this.lastHeartbeatOnChangelogMutex.Unlock()\n\n\tthis.lastHeartbeatOnChangelogTime = t\n}\n\nfunc (this *MigrationContext) GetLastHeartbeatOnChangelogTime() time.Time {\n\tthis.lastHeartbeatOnChangelogMutex.Lock()\n\tdefer this.lastHeartbeatOnChangelogMutex.Unlock()\n\n\treturn this.lastHeartbeatOnChangelogTime\n}\n\nfunc (this *MigrationContext) SetHeartbeatIntervalMilliseconds(heartbeatIntervalMilliseconds int64) {\n\tif heartbeatIntervalMilliseconds < 100 {\n\t\theartbeatIntervalMilliseconds = 100\n\t}\n\tif heartbeatIntervalMilliseconds > 1000 {\n\t\theartbeatIntervalMilliseconds = 1000\n\t}\n\tthis.HeartbeatIntervalMilliseconds = heartbeatIntervalMilliseconds\n}\n\nfunc (this *MigrationContext) SetMaxLagMillisecondsThrottleThreshold(maxLagMillisecondsThrottleThreshold int64) {\n\tif maxLagMillisecondsThrottleThreshold < 100 {\n\t\tmaxLagMillisecondsThrottleThreshold = 100\n\t}\n\tatomic.StoreInt64(&this.MaxLagMillisecondsThrottleThreshold, maxLagMillisecondsThrottleThreshold)\n}\n\nfunc (this *MigrationContext) SetChunkSize(chunkSize int64) {\n\tif chunkSize < 10 {\n\t\tchunkSize = 10\n\t}\n\tif chunkSize > 100000 {\n\t\tchunkSize = 100000\n\t}\n\tatomic.StoreInt64(&this.ChunkSize, chunkSize)\n}\n\nfunc (this *MigrationContext) SetDMLBatchSize(batchSize int64) {\n\tif batchSize < 1 {\n\t\tbatchSize = 1\n\t}\n\tif batchSize > MaxEventsBatchSize {\n\t\tbatchSize = MaxEventsBatchSize\n\t}\n\tatomic.StoreInt64(&this.DMLBatchSize, batchSize)\n}\n\nfunc (this *MigrationContext) SetThrottleGeneralCheckResult(checkResult *ThrottleCheckResult) *ThrottleCheckResult {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tthis.throttleGeneralCheckResult = *checkResult\n\treturn checkResult\n}\n\nfunc (this *MigrationContext) GetThrottleGeneralCheckResult() *ThrottleCheckResult {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tresult := this.throttleGeneralCheckResult\n\treturn &result\n}\n\nfunc (this *MigrationContext) SetThrottled(throttle bool, reason string, reasonHint ThrottleReasonHint) {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tthis.isThrottled = throttle\n\tthis.throttleReason = reason\n\tthis.throttleReasonHint = reasonHint\n}\n\nfunc (this *MigrationContext) IsThrottled() (bool, string, ThrottleReasonHint) {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\t// we don't throttle when cutting over. We _do_ throttle:\n\t// - during copy phase\n\t// - just before cut-over\n\t// - in between cut-over retries\n\t// When cutting over, we need to be aggressive. Cut-over holds table locks.\n\t// We need to release those asap.\n\tif atomic.LoadInt64(&this.InCutOverCriticalSectionFlag) > 0 {\n\t\treturn false, \"critical section\", NoThrottleReasonHint\n\t}\n\treturn this.isThrottled, this.throttleReason, this.throttleReasonHint\n}\n\nfunc (this *MigrationContext) GetThrottleQuery() string {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tvar query = this.throttleQuery\n\treturn query\n}\n\nfunc (this *MigrationContext) SetThrottleQuery(newQuery string) {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tthis.throttleQuery = newQuery\n}\n\nfunc (this *MigrationContext) GetThrottleHTTP() string {\n\tthis.throttleHTTPMutex.Lock()\n\tdefer this.throttleHTTPMutex.Unlock()\n\n\tvar throttleHTTP = this.throttleHTTP\n\treturn throttleHTTP\n}\n\nfunc (this *MigrationContext) SetThrottleHTTP(throttleHTTP string) {\n\tthis.throttleHTTPMutex.Lock()\n\tdefer this.throttleHTTPMutex.Unlock()\n\n\tthis.throttleHTTP = throttleHTTP\n}\n\nfunc (this *MigrationContext) SetIgnoreHTTPErrors(ignoreHTTPErrors bool) {\n\tthis.throttleHTTPMutex.Lock()\n\tdefer this.throttleHTTPMutex.Unlock()\n\n\tthis.IgnoreHTTPErrors = ignoreHTTPErrors\n}\n\nfunc (this *MigrationContext) GetMaxLoad() LoadMap {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\treturn this.maxLoad.Duplicate()\n}\n\nfunc (this *MigrationContext) GetCriticalLoad() LoadMap {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\treturn this.criticalLoad.Duplicate()\n}\n\nfunc (this *MigrationContext) GetNiceRatio() float64 {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\treturn this.niceRatio\n}\n\nfunc (this *MigrationContext) SetNiceRatio(newRatio float64) {\n\tif newRatio < 0.0 {\n\t\tnewRatio = 0.0\n\t}\n\tif newRatio > 100.0 {\n\t\tnewRatio = 100.0\n\t}\n\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tthis.niceRatio = newRatio\n}\n\nfunc (this *MigrationContext) GetRecentBinlogCoordinates() mysql.BinlogCoordinates {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\treturn this.recentBinlogCoordinates\n}\n\nfunc (this *MigrationContext) SetRecentBinlogCoordinates(coordinates mysql.BinlogCoordinates) {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tthis.recentBinlogCoordinates = coordinates\n}\n\n// ReadMaxLoad parses the `--max-load` flag, which is in multiple key-value format,\n// such as: 'Threads_running=100,Threads_connected=500'\n// It only applies changes in case there's no parsing error.\nfunc (this *MigrationContext) ReadMaxLoad(maxLoadList string) error {\n\tloadMap, err := ParseLoadMap(maxLoadList)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tthis.maxLoad = loadMap\n\treturn nil\n}\n\n// ReadCriticalLoad parses the `--max-load` flag, which is in multiple key-value format,\n// such as: 'Threads_running=100,Threads_connected=500'\n// It only applies changes in case there's no parsing error.\nfunc (this *MigrationContext) ReadCriticalLoad(criticalLoadList string) error {\n\tloadMap, err := ParseLoadMap(criticalLoadList)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tthis.criticalLoad = loadMap\n\treturn nil\n}\n\nfunc (this *MigrationContext) GetControlReplicasLagResult() mysql.ReplicationLagResult {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tlagResult := this.controlReplicasLagResult\n\treturn lagResult\n}\n\nfunc (this *MigrationContext) SetControlReplicasLagResult(lagResult *mysql.ReplicationLagResult) {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\tif lagResult == nil {\n\t\tthis.controlReplicasLagResult = *mysql.NewNoReplicationLagResult()\n\t} else {\n\t\tthis.controlReplicasLagResult = *lagResult\n\t}\n}\n\nfunc (this *MigrationContext) GetThrottleControlReplicaKeys() *mysql.InstanceKeyMap {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tkeys := mysql.NewInstanceKeyMap()\n\tkeys.AddKeys(this.throttleControlReplicaKeys.GetInstanceKeys())\n\treturn keys\n}\n\nfunc (this *MigrationContext) ReadThrottleControlReplicaKeys(throttleControlReplicas string) error {\n\tkeys := mysql.NewInstanceKeyMap()\n\tif err := keys.ReadCommaDelimitedList(throttleControlReplicas); err != nil {\n\t\treturn err\n\t}\n\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tthis.throttleControlReplicaKeys = keys\n\treturn nil\n}\n\nfunc (this *MigrationContext) AddThrottleControlReplicaKey(key mysql.InstanceKey) error {\n\tthis.throttleMutex.Lock()\n\tdefer this.throttleMutex.Unlock()\n\n\tthis.throttleControlReplicaKeys.AddKey(key)\n\treturn nil\n}\n\n// ApplyCredentials sorts out the credentials between the config file and the CLI flags\nfunc (this *MigrationContext) ApplyCredentials() {\n\tthis.configMutex.Lock()\n\tdefer this.configMutex.Unlock()\n\n\tif this.config.Client.User != \"\" {\n\t\tthis.InspectorConnectionConfig.User = this.config.Client.User\n\t}\n\tif this.CliUser != \"\" {\n\t\t// Override\n\t\tthis.InspectorConnectionConfig.User = this.CliUser\n\t}\n\tif this.config.Client.Password != \"\" {\n\t\tthis.InspectorConnectionConfig.Password = this.config.Client.Password\n\t}\n\tif this.CliPassword != \"\" {\n\t\t// Override\n\t\tthis.InspectorConnectionConfig.Password = this.CliPassword\n\t}\n}\n\nfunc (this *MigrationContext) SetupTLS() error {\n\tif this.UseTLS {\n\t\treturn this.InspectorConnectionConfig.UseTLS(this.TLSCACertificate, this.TLSCertificate, this.TLSKey, this.TLSAllowInsecure)\n\t}\n\treturn nil\n}\n\n// ReadConfigFile attempts to read the config file, if it exists\nfunc (this *MigrationContext) ReadConfigFile() error {\n\tthis.configMutex.Lock()\n\tdefer this.configMutex.Unlock()\n\n\tif this.ConfigFile == \"\" {\n\t\treturn nil\n\t}\n\tcfg, err := ini.Load(this.ConfigFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif cfg.Section(\"client\").HasKey(\"user\") {\n\t\tthis.config.Client.User = cfg.Section(\"client\").Key(\"user\").String()\n\t}\n\n\tif cfg.Section(\"client\").HasKey(\"password\") {\n\t\tthis.config.Client.Password = cfg.Section(\"client\").Key(\"password\").String()\n\t}\n\n\tif cfg.Section(\"osc\").HasKey(\"chunk_size\") {\n\t\tthis.config.Osc.Chunk_Size, err = cfg.Section(\"osc\").Key(\"chunk_size\").Int64()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Unable to read osc chunk size: %w\", err)\n\t\t}\n\t}\n\n\tif cfg.Section(\"osc\").HasKey(\"max_load\") {\n\t\tthis.config.Osc.Max_Load = cfg.Section(\"osc\").Key(\"max_load\").String()\n\t}\n\n\tif cfg.Section(\"osc\").HasKey(\"replication_lag_query\") {\n\t\tthis.config.Osc.Replication_Lag_Query = cfg.Section(\"osc\").Key(\"replication_lag_query\").String()\n\t}\n\n\tif cfg.Section(\"osc\").HasKey(\"max_lag_millis\") {\n\t\tthis.config.Osc.Max_Lag_Millis, err = cfg.Section(\"osc\").Key(\"max_lag_millis\").Int64()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Unable to read max lag millis: %w\", err)\n\t\t}\n\t}\n\n\t// We accept user & password in the form \"${SOME_ENV_VARIABLE}\" in which case we pull\n\t// the given variable from os env\n\tif submatch := envVariableRegexp.FindStringSubmatch(this.config.Client.User); len(submatch) > 1 {\n\t\tthis.config.Client.User = os.Getenv(submatch[1])\n\t}\n\tif submatch := envVariableRegexp.FindStringSubmatch(this.config.Client.Password); len(submatch) > 1 {\n\t\tthis.config.Client.Password = os.Getenv(submatch[1])\n\t}\n\n\treturn nil\n}\n\n// getGhostTriggerName generates the name of a ghost trigger, based on original trigger name\n// or a given trigger name\nfunc (this *MigrationContext) GetGhostTriggerName(triggerName string) string {\n\tif this.RemoveTriggerSuffix && strings.HasSuffix(triggerName, this.TriggerSuffix) {\n\t\treturn strings.TrimSuffix(triggerName, this.TriggerSuffix)\n\t}\n\t// else\n\treturn triggerName + this.TriggerSuffix\n}\n\n// ValidateGhostTriggerLengthBelowMaxLength checks if the given trigger name (already transformed\n// by GetGhostTriggerName) does not exceed the maximum allowed length.\nfunc (this *MigrationContext) ValidateGhostTriggerLengthBelowMaxLength(triggerName string) bool {\n\treturn utf8.RuneCountInString(triggerName) <= mysql.MaxTableNameLength\n}\n\n// GetContext returns the migration context for cancellation checking\nfunc (this *MigrationContext) GetContext() context.Context {\n\treturn this.ctx\n}\n\n// SetAbortError stores the fatal error that triggered abort\n// Only the first error is stored (subsequent errors are ignored)\nfunc (this *MigrationContext) SetAbortError(err error) {\n\tthis.abortMutex.Lock()\n\tdefer this.abortMutex.Unlock()\n\tif this.AbortError == nil {\n\t\tthis.AbortError = err\n\t}\n}\n\n// GetAbortError retrieves the stored abort error\nfunc (this *MigrationContext) GetAbortError() error {\n\tthis.abortMutex.Lock()\n\tdefer this.abortMutex.Unlock()\n\treturn this.AbortError\n}\n\n// CancelContext cancels the migration context to signal all goroutines to stop\n// The cancel function is safe to call multiple times and from multiple goroutines.\nfunc (this *MigrationContext) CancelContext() {\n\tif this.cancelFunc != nil {\n\t\tthis.cancelFunc()\n\t}\n}\n\n// SendWithContext attempts to send a value to a channel, but returns early\n// if the context is cancelled. This prevents goroutine deadlocks when the\n// channel receiver has exited due to an error.\n//\n// Use this instead of bare channel sends (ch <- val) in goroutines to ensure\n// proper cleanup when the migration is aborted.\n//\n// Example:\n//\n//\tif err := base.SendWithContext(ctx, ch, value); err != nil {\n//\t    return err  // context was cancelled\n//\t}\nfunc SendWithContext[T any](ctx context.Context, ch chan<- T, val T) error {\n\tselect {\n\tcase ch <- val:\n\t\treturn nil\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\t}\n}\n"
  },
  {
    "path": "go/base/context_test.go",
    "content": "/*\n   Copyright 2021 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage base\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestGetTableNames(t *testing.T) {\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.OriginalTableName = \"some_table\"\n\t\trequire.Equal(t, \"_some_table_del\", context.GetOldTableName())\n\t\trequire.Equal(t, \"_some_table_gho\", context.GetGhostTableName())\n\t\trequire.Equal(t, \"_some_table_ghc\", context.GetChangelogTableName(), \"_some_table_ghc\")\n\t}\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.OriginalTableName = \"a123456789012345678901234567890123456789012345678901234567890\"\n\t\trequire.Equal(t, \"_a1234567890123456789012345678901234567890123456789012345678_del\", context.GetOldTableName())\n\t\trequire.Equal(t, \"_a1234567890123456789012345678901234567890123456789012345678_gho\", context.GetGhostTableName())\n\t\trequire.Equal(t, \"_a1234567890123456789012345678901234567890123456789012345678_ghc\", context.GetChangelogTableName())\n\t}\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.OriginalTableName = \"a123456789012345678901234567890123456789012345678901234567890123\"\n\t\toldTableName := context.GetOldTableName()\n\t\trequire.Equal(t, \"_a1234567890123456789012345678901234567890123456789012345678_del\", oldTableName)\n\t}\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.OriginalTableName = \"a123456789012345678901234567890123456789012345678901234567890123\"\n\t\tcontext.TimestampOldTable = true\n\t\tlongForm := \"Jan 2, 2006 at 3:04pm (MST)\"\n\t\tcontext.StartTime, _ = time.Parse(longForm, \"Feb 3, 2013 at 7:54pm (PST)\")\n\t\toldTableName := context.GetOldTableName()\n\t\trequire.Equal(t, \"_a1234567890123456789012345678901234567890123_20130203195400_del\", oldTableName)\n\t}\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.OriginalTableName = \"foo_bar_baz\"\n\t\tcontext.ForceTmpTableName = \"tmp\"\n\t\trequire.Equal(t, \"_tmp_del\", context.GetOldTableName())\n\t\trequire.Equal(t, \"_tmp_gho\", context.GetGhostTableName())\n\t\trequire.Equal(t, \"_tmp_ghc\", context.GetChangelogTableName())\n\t}\n}\n\nfunc TestGetTriggerNames(t *testing.T) {\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_gho\"\n\t\trequire.Equal(t, \"my_trigger\"+context.TriggerSuffix, context.GetGhostTriggerName(\"my_trigger\"))\n\t}\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_gho\"\n\t\tcontext.RemoveTriggerSuffix = true\n\t\trequire.Equal(t, \"my_trigger\"+context.TriggerSuffix, context.GetGhostTriggerName(\"my_trigger\"))\n\t}\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_gho\"\n\t\tcontext.RemoveTriggerSuffix = true\n\t\trequire.Equal(t, \"my_trigger\", context.GetGhostTriggerName(\"my_trigger_gho\"))\n\t}\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_gho\"\n\t\tcontext.RemoveTriggerSuffix = false\n\t\trequire.Equal(t, \"my_trigger_gho_gho\", context.GetGhostTriggerName(\"my_trigger_gho\"))\n\t}\n}\n\nfunc TestValidateGhostTriggerLengthBelowMaxLength(t *testing.T) {\n\t// Tests simulate the real call pattern: GetGhostTriggerName first, then validate the result.\n\t{\n\t\t// Short trigger name with suffix appended: well under 64 chars\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_gho\"\n\t\tghostName := context.GetGhostTriggerName(\"my_trigger\") // \"my_trigger_gho\" = 14 chars\n\t\trequire.True(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n\t{\n\t\t// 64-char original + \"_ghost\" suffix = 70 chars → exceeds limit\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_ghost\"\n\t\tghostName := context.GetGhostTriggerName(strings.Repeat(\"my_trigger_ghost\", 4)) // 64 + 6 = 70\n\t\trequire.False(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n\t{\n\t\t// 48-char original + \"_ghost\" suffix = 54 chars → valid\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_ghost\"\n\t\tghostName := context.GetGhostTriggerName(strings.Repeat(\"my_trigger_ghost\", 3)) // 48 + 6 = 54\n\t\trequire.True(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n\t{\n\t\t// RemoveTriggerSuffix: 64-char name ending in \"_ghost\" → suffix removed → 58 chars → valid\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_ghost\"\n\t\tcontext.RemoveTriggerSuffix = true\n\t\tghostName := context.GetGhostTriggerName(strings.Repeat(\"my_trigger_ghost\", 4)) // suffix removed → 58\n\t\trequire.True(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n\t{\n\t\t// RemoveTriggerSuffix: name doesn't end in suffix → suffix appended → 65 + 6 = 71 chars → exceeds\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_ghost\"\n\t\tcontext.RemoveTriggerSuffix = true\n\t\tghostName := context.GetGhostTriggerName(strings.Repeat(\"my_trigger_ghost\", 4) + \"X\") // no match, appended → 71\n\t\trequire.False(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n\t{\n\t\t// RemoveTriggerSuffix: 70-char name ending in \"_ghost\" → suffix removed → 64 chars → exactly at limit → valid\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_ghost\"\n\t\tcontext.RemoveTriggerSuffix = true\n\t\tghostName := context.GetGhostTriggerName(strings.Repeat(\"my_trigger_ghost\", 4) + \"_ghost\") // suffix removed → 64\n\t\trequire.True(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n\t{\n\t\t// Edge case: exactly 64 chars after transformation → valid (boundary test)\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_ght\"\n\t\toriginalName := strings.Repeat(\"x\", 60)                // 60 chars\n\t\tghostName := context.GetGhostTriggerName(originalName) // 60 + 4 = 64\n\t\trequire.Equal(t, 64, len(ghostName))\n\t\trequire.True(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n\t{\n\t\t// Edge case: 65 chars after transformation → exceeds (boundary test)\n\t\tcontext := NewMigrationContext()\n\t\tcontext.TriggerSuffix = \"_ght\"\n\t\toriginalName := strings.Repeat(\"x\", 61)                // 61 chars\n\t\tghostName := context.GetGhostTriggerName(originalName) // 61 + 4 = 65\n\t\trequire.Equal(t, 65, len(ghostName))\n\t\trequire.False(t, context.ValidateGhostTriggerLengthBelowMaxLength(ghostName))\n\t}\n}\n\nfunc TestReadConfigFile(t *testing.T) {\n\t{\n\t\tcontext := NewMigrationContext()\n\t\tcontext.ConfigFile = \"/does/not/exist\"\n\t\tif err := context.ReadConfigFile(); err == nil {\n\t\t\tt.Fatal(\"Expected .ReadConfigFile() to return an error, got nil\")\n\t\t}\n\t}\n\t{\n\t\tf, err := os.CreateTemp(\"\", t.Name())\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Failed to create tmp file: %v\", err)\n\t\t}\n\t\tdefer os.Remove(f.Name())\n\n\t\tf.Write([]byte(\"[client]\"))\n\t\tcontext := NewMigrationContext()\n\t\tcontext.ConfigFile = f.Name()\n\t\tif err := context.ReadConfigFile(); err != nil {\n\t\t\tt.Fatalf(\".ReadConfigFile() failed: %v\", err)\n\t\t}\n\t}\n\t{\n\t\tf, err := os.CreateTemp(\"\", t.Name())\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Failed to create tmp file: %v\", err)\n\t\t}\n\t\tdefer os.Remove(f.Name())\n\n\t\tf.Write([]byte(\"[client]\\nuser=test\\npassword=123456\"))\n\t\tcontext := NewMigrationContext()\n\t\tcontext.ConfigFile = f.Name()\n\t\tif err := context.ReadConfigFile(); err != nil {\n\t\t\tt.Fatalf(\".ReadConfigFile() failed: %v\", err)\n\t\t}\n\n\t\tif context.config.Client.User != \"test\" {\n\t\t\tt.Fatalf(\"Expected client user %q, got %q\", \"test\", context.config.Client.User)\n\t\t} else if context.config.Client.Password != \"123456\" {\n\t\t\tt.Fatalf(\"Expected client password %q, got %q\", \"123456\", context.config.Client.Password)\n\t\t}\n\t}\n\t{\n\t\tf, err := os.CreateTemp(\"\", t.Name())\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Failed to create tmp file: %v\", err)\n\t\t}\n\t\tdefer os.Remove(f.Name())\n\n\t\tf.Write([]byte(\"[osc]\\nmax_load=10\"))\n\t\tcontext := NewMigrationContext()\n\t\tcontext.ConfigFile = f.Name()\n\t\tif err := context.ReadConfigFile(); err != nil {\n\t\t\tt.Fatalf(\".ReadConfigFile() failed: %v\", err)\n\t\t}\n\n\t\tif context.config.Osc.Max_Load != \"10\" {\n\t\t\tt.Fatalf(\"Expected osc 'max_load' %q, got %q\", \"10\", context.config.Osc.Max_Load)\n\t\t}\n\t}\n}\n\nfunc TestSetAbortError_StoresFirstError(t *testing.T) {\n\tctx := NewMigrationContext()\n\n\terr1 := errors.New(\"first error\")\n\terr2 := errors.New(\"second error\")\n\n\tctx.SetAbortError(err1)\n\tctx.SetAbortError(err2)\n\n\tgot := ctx.GetAbortError()\n\tif got != err1 { //nolint:errorlint // Testing pointer equality for sentinel error\n\t\tt.Errorf(\"Expected first error %v, got %v\", err1, got)\n\t}\n}\n\nfunc TestSetAbortError_ThreadSafe(t *testing.T) {\n\tctx := NewMigrationContext()\n\n\tvar wg sync.WaitGroup\n\terrs := []error{\n\t\terrors.New(\"error 1\"),\n\t\terrors.New(\"error 2\"),\n\t\terrors.New(\"error 3\"),\n\t}\n\n\t// Launch 3 goroutines trying to set error concurrently\n\tfor _, err := range errs {\n\t\twg.Add(1)\n\t\tgo func(e error) {\n\t\t\tdefer wg.Done()\n\t\t\tctx.SetAbortError(e)\n\t\t}(err)\n\t}\n\n\twg.Wait()\n\n\t// Should store exactly one of the errors\n\tgot := ctx.GetAbortError()\n\tif got == nil {\n\t\tt.Fatal(\"Expected error to be stored, got nil\")\n\t}\n\n\t// Verify it's one of the errors we sent\n\tfound := false\n\tfor _, err := range errs {\n\t\tif got == err { //nolint:errorlint // Testing pointer equality for sentinel error\n\t\t\tfound = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !found {\n\t\tt.Errorf(\"Stored error %v not in list of sent errors\", got)\n\t}\n}\n"
  },
  {
    "path": "go/base/default_logger.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n         See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage base\n\nimport (\n\t\"github.com/openark/golib/log\"\n)\n\ntype simpleLogger struct{}\n\nfunc NewDefaultLogger() *simpleLogger {\n\treturn &simpleLogger{}\n}\n\nfunc (*simpleLogger) Debug(args ...interface{}) {\n\tlog.Debug(args[0].(string), args[1:])\n}\n\nfunc (*simpleLogger) Debugf(format string, args ...interface{}) {\n\tlog.Debugf(format, args...)\n}\n\nfunc (*simpleLogger) Info(args ...interface{}) {\n\tlog.Info(args[0].(string), args[1:])\n}\n\nfunc (*simpleLogger) Infof(format string, args ...interface{}) {\n\tlog.Infof(format, args...)\n}\n\nfunc (*simpleLogger) Warning(args ...interface{}) error {\n\treturn log.Warning(args[0].(string), args[1:])\n}\n\nfunc (*simpleLogger) Warningf(format string, args ...interface{}) error {\n\treturn log.Warningf(format, args...)\n}\n\nfunc (*simpleLogger) Error(args ...interface{}) error {\n\treturn log.Error(args[0].(string), args[1:])\n}\n\nfunc (*simpleLogger) Errorf(format string, args ...interface{}) error {\n\treturn log.Errorf(format, args...)\n}\n\nfunc (*simpleLogger) Errore(err error) error {\n\treturn log.Errore(err)\n}\n\nfunc (*simpleLogger) Fatal(args ...interface{}) error {\n\treturn log.Fatal(args[0].(string), args[1:])\n}\n\nfunc (*simpleLogger) Fatalf(format string, args ...interface{}) error {\n\treturn log.Fatalf(format, args...)\n}\n\nfunc (*simpleLogger) Fatale(err error) error {\n\treturn log.Fatale(err)\n}\n\nfunc (*simpleLogger) SetLevel(level log.LogLevel) {\n\tlog.SetLevel(level)\n}\n\nfunc (*simpleLogger) SetPrintStackTrace(printStackTraceFlag bool) {\n\tlog.SetPrintStackTrace(printStackTraceFlag)\n}\n"
  },
  {
    "path": "go/base/load_map.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage base\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// LoadMap is a mapping of status variable & threshold\n// e.g. [Threads_connected: 100, Threads_running: 50]\ntype LoadMap map[string]int64\n\nfunc NewLoadMap() LoadMap {\n\tresult := make(map[string]int64)\n\treturn result\n}\n\n// NewLoadMap parses a `--*-load` flag (e.g. `--max-load`), which is in multiple\n// key-value format, such as:\n//\n//\t'Threads_running=100,Threads_connected=500'\nfunc ParseLoadMap(loadList string) (LoadMap, error) {\n\tresult := NewLoadMap()\n\tif loadList == \"\" {\n\t\treturn result, nil\n\t}\n\n\tloadConditions := strings.Split(loadList, \",\")\n\tfor _, loadCondition := range loadConditions {\n\t\tloadTokens := strings.Split(loadCondition, \"=\")\n\t\tif len(loadTokens) != 2 {\n\t\t\treturn result, fmt.Errorf(\"Error parsing load condition: %s\", loadCondition)\n\t\t}\n\t\tif loadTokens[0] == \"\" {\n\t\t\treturn result, fmt.Errorf(\"Error parsing status variable in load condition: %s\", loadCondition)\n\t\t}\n\t\tif n, err := strconv.ParseInt(loadTokens[1], 10, 0); err != nil {\n\t\t\treturn result, fmt.Errorf(\"Error parsing numeric value in load condition: %s\", loadCondition)\n\t\t} else {\n\t\t\tresult[loadTokens[0]] = n\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\n// Duplicate creates a clone of this map\nfunc (this *LoadMap) Duplicate() LoadMap {\n\tdup := make(map[string]int64)\n\tfor k, v := range *this {\n\t\tdup[k] = v\n\t}\n\treturn dup\n}\n\n// String() returns a string representation of this map\nfunc (this *LoadMap) String() string {\n\ttokens := []string{}\n\tfor key, val := range *this {\n\t\ttoken := fmt.Sprintf(\"%s=%d\", key, val)\n\t\ttokens = append(tokens, token)\n\t}\n\tsort.Strings(tokens)\n\treturn strings.Join(tokens, \",\")\n}\n"
  },
  {
    "path": "go/base/load_map_test.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage base\n\nimport (\n\t\"testing\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestParseLoadMap(t *testing.T) {\n\t{\n\t\tloadList := \"\"\n\t\tm, err := ParseLoadMap(loadList)\n\t\trequire.NoError(t, err)\n\t\trequire.Len(t, m, 0)\n\t}\n\t{\n\t\tloadList := \"threads_running=20,threads_connected=10\"\n\t\tm, err := ParseLoadMap(loadList)\n\t\trequire.NoError(t, err)\n\t\trequire.Len(t, m, 2)\n\t\trequire.Equal(t, int64(20), m[\"threads_running\"])\n\t\trequire.Equal(t, int64(10), m[\"threads_connected\"])\n\t}\n\t{\n\t\tloadList := \"threads_running=20=30,threads_connected=10\"\n\t\t_, err := ParseLoadMap(loadList)\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\tloadList := \"threads_running=20,threads_connected\"\n\t\t_, err := ParseLoadMap(loadList)\n\t\trequire.Error(t, err)\n\t}\n}\n\nfunc TestString(t *testing.T) {\n\t{\n\t\tm, _ := ParseLoadMap(\"\")\n\t\ts := m.String()\n\t\trequire.Equal(t, \"\", s)\n\t}\n\t{\n\t\tloadList := \"threads_running=20,threads_connected=10\"\n\t\tm, _ := ParseLoadMap(loadList)\n\t\ts := m.String()\n\t\trequire.Equal(t, \"threads_connected=10,threads_running=20\", s)\n\t}\n}\n"
  },
  {
    "path": "go/base/utils.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage base\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n\n\tgosql \"database/sql\"\n\n\t\"github.com/github/gh-ost/go/mysql\"\n)\n\nvar (\n\tprettifyDurationRegexp = regexp.MustCompile(\"([.][0-9]+)\")\n)\n\nfunc PrettifyDurationOutput(d time.Duration) string {\n\tif d < time.Second {\n\t\treturn \"0s\"\n\t}\n\treturn prettifyDurationRegexp.ReplaceAllString(d.String(), \"\")\n}\n\nfunc FileExists(fileName string) bool {\n\tif _, err := os.Stat(fileName); err == nil {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc TouchFile(fileName string) error {\n\tf, err := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE, 0755)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn f.Close()\n}\n\n// StringContainsAll returns true if `s` contains all non empty given `substrings`\n// The function returns `false` if no non-empty arguments are given.\nfunc StringContainsAll(s string, substrings ...string) bool {\n\tnonEmptyStringsFound := false\n\tfor _, substring := range substrings {\n\t\tif substring == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.Contains(s, substring) {\n\t\t\tnonEmptyStringsFound = true\n\t\t} else {\n\t\t\t// Immediate failure\n\t\t\treturn false\n\t\t}\n\t}\n\treturn nonEmptyStringsFound\n}\n\nfunc ValidateConnection(db *gosql.DB, connectionConfig *mysql.ConnectionConfig, migrationContext *MigrationContext, name string) (string, error) {\n\tversionQuery := `select @@global.version`\n\n\tvar version string\n\tif err := db.QueryRow(versionQuery).Scan(&version); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif migrationContext.SkipPortValidation {\n\t\treturn version, nil\n\t}\n\n\tvar extraPort int\n\n\textraPortQuery := `select @@global.extra_port`\n\tif err := db.QueryRow(extraPortQuery).Scan(&extraPort); err != nil { //nolint:staticcheck\n\t\t// swallow this error. not all servers support extra_port\n\t}\n\n\t// AliyunRDS set users port to \"NULL\", replace it by gh-ost param\n\t// GCP set users port to \"NULL\", replace it by gh-ost param\n\t// Azure MySQL set users port to a different value by design, replace it by gh-ost para\n\tvar port int\n\tif migrationContext.AliyunRDS || migrationContext.GoogleCloudPlatform || migrationContext.AzureMySQL {\n\t\tport = connectionConfig.Key.Port\n\t} else {\n\t\tportQuery := `select @@global.port`\n\t\tif err := db.QueryRow(portQuery).Scan(&port); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\n\tif connectionConfig.Key.Port == port || (extraPort > 0 && connectionConfig.Key.Port == extraPort) {\n\t\tmigrationContext.Log.Infof(\"%s connection validated on %+v\", name, connectionConfig.Key)\n\t\treturn version, nil\n\t} else if extraPort == 0 {\n\t\treturn \"\", fmt.Errorf(\"Unexpected database port reported: %+v\", port)\n\t} else {\n\t\treturn \"\", fmt.Errorf(\"Unexpected database port reported: %+v / extra_port: %+v\", port, extraPort)\n\t}\n}\n"
  },
  {
    "path": "go/base/utils_test.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage base\n\nimport (\n\t\"testing\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestStringContainsAll(t *testing.T) {\n\ts := `insert,delete,update`\n\n\trequire.False(t, StringContainsAll(s))\n\trequire.False(t, StringContainsAll(s, \"\"))\n\trequire.False(t, StringContainsAll(s, \"drop\"))\n\trequire.True(t, StringContainsAll(s, \"insert\"))\n\trequire.False(t, StringContainsAll(s, \"insert\", \"drop\"))\n\trequire.True(t, StringContainsAll(s, \"insert\", \"\"))\n\trequire.True(t, StringContainsAll(s, \"insert\", \"update\", \"delete\"))\n}\n"
  },
  {
    "path": "go/binlog/binlog_dml_event.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage binlog\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/github/gh-ost/go/sql\"\n)\n\ntype EventDML string\n\nconst (\n\tNotDML    EventDML = \"NoDML\"\n\tInsertDML EventDML = \"Insert\"\n\tUpdateDML EventDML = \"Update\"\n\tDeleteDML EventDML = \"Delete\"\n)\n\nfunc ToEventDML(description string) EventDML {\n\t// description can be a statement (`UPDATE my_table ...`) or a RBR event name (`UpdateRowsEventV2`)\n\tdescription = strings.TrimSpace(strings.Split(description, \" \")[0])\n\tswitch strings.ToLower(description) {\n\tcase \"insert\":\n\t\treturn InsertDML\n\tcase \"update\":\n\t\treturn UpdateDML\n\tcase \"delete\":\n\t\treturn DeleteDML\n\t}\n\tif strings.HasPrefix(description, \"WriteRows\") {\n\t\treturn InsertDML\n\t}\n\tif strings.HasPrefix(description, \"UpdateRows\") {\n\t\treturn UpdateDML\n\t}\n\tif strings.HasPrefix(description, \"DeleteRows\") {\n\t\treturn DeleteDML\n\t}\n\treturn NotDML\n}\n\n// BinlogDMLEvent is a binary log rows (DML) event entry, with data\ntype BinlogDMLEvent struct {\n\tDatabaseName      string\n\tTableName         string\n\tDML               EventDML\n\tWhereColumnValues *sql.ColumnValues\n\tNewColumnValues   *sql.ColumnValues\n}\n\nfunc NewBinlogDMLEvent(databaseName, tableName string, dml EventDML) *BinlogDMLEvent {\n\tevent := &BinlogDMLEvent{\n\t\tDatabaseName: databaseName,\n\t\tTableName:    tableName,\n\t\tDML:          dml,\n\t}\n\treturn event\n}\n\nfunc (this *BinlogDMLEvent) String() string {\n\treturn fmt.Sprintf(\"[%+v on %s:%s]\", this.DML, this.DatabaseName, this.TableName)\n}\n"
  },
  {
    "path": "go/binlog/binlog_entry.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage binlog\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/github/gh-ost/go/mysql\"\n)\n\n// BinlogEntry describes an entry in the binary log\ntype BinlogEntry struct {\n\tCoordinates mysql.BinlogCoordinates\n\tDmlEvent    *BinlogDMLEvent\n}\n\n// NewBinlogEntryAt creates an empty, ready to go BinlogEntry object\nfunc NewBinlogEntryAt(coordinates mysql.BinlogCoordinates) *BinlogEntry {\n\tbinlogEntry := &BinlogEntry{\n\t\tCoordinates: coordinates,\n\t}\n\treturn binlogEntry\n}\n\n// String() returns a string representation of this binlog entry\nfunc (this *BinlogEntry) String() string {\n\treturn fmt.Sprintf(\"[BinlogEntry at %+v; dml:%+v]\", this.Coordinates, this.DmlEvent)\n}\n"
  },
  {
    "path": "go/binlog/binlog_reader.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage binlog\n\n// BinlogReader is a general interface whose implementations can choose their methods of reading\n// a binary log file and parsing it into binlog entries\ntype BinlogReader interface {\n\tStreamEvents(canStopStreaming func() bool, entriesChannel chan<- *BinlogEntry) error\n\tReconnect() error\n}\n"
  },
  {
    "path": "go/binlog/gomysql_reader.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage binlog\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n\n\t\"time\"\n\n\tgomysql \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/replication\"\n\tuuid \"github.com/google/uuid\"\n\t\"golang.org/x/net/context\"\n)\n\ntype GoMySQLReader struct {\n\tmigrationContext        *base.MigrationContext\n\tconnectionConfig        *mysql.ConnectionConfig\n\tbinlogSyncer            *replication.BinlogSyncer\n\tbinlogStreamer          *replication.BinlogStreamer\n\tcurrentCoordinates      mysql.BinlogCoordinates\n\tcurrentCoordinatesMutex *sync.Mutex\n\t// LastTrxCoords are the coordinates of the last transaction completely read.\n\t// If using the file coordinates it is binlog position of the transaction's XID event.\n\tLastTrxCoords mysql.BinlogCoordinates\n}\n\nfunc NewGoMySQLReader(migrationContext *base.MigrationContext) *GoMySQLReader {\n\tconnectionConfig := migrationContext.InspectorConnectionConfig\n\treturn &GoMySQLReader{\n\t\tmigrationContext:        migrationContext,\n\t\tconnectionConfig:        connectionConfig,\n\t\tcurrentCoordinatesMutex: &sync.Mutex{},\n\t\tbinlogSyncer: replication.NewBinlogSyncer(replication.BinlogSyncerConfig{\n\t\t\tServerID:                uint32(migrationContext.ReplicaServerId),\n\t\t\tFlavor:                  gomysql.MySQLFlavor,\n\t\t\tHost:                    connectionConfig.Key.Hostname,\n\t\t\tPort:                    uint16(connectionConfig.Key.Port),\n\t\t\tUser:                    connectionConfig.User,\n\t\t\tPassword:                connectionConfig.Password,\n\t\t\tTLSConfig:               connectionConfig.TLSConfig(),\n\t\t\tUseDecimal:              true,\n\t\t\tTimestampStringLocation: time.UTC,\n\t\t\tMaxReconnectAttempts:    migrationContext.BinlogSyncerMaxReconnectAttempts,\n\t\t}),\n\t}\n}\n\n// ConnectBinlogStreamer\nfunc (this *GoMySQLReader) ConnectBinlogStreamer(coordinates mysql.BinlogCoordinates) (err error) {\n\tif coordinates.IsEmpty() {\n\t\treturn this.migrationContext.Log.Errorf(\"Empty coordinates at ConnectBinlogStreamer()\")\n\t}\n\n\tthis.currentCoordinatesMutex.Lock()\n\tdefer this.currentCoordinatesMutex.Unlock()\n\tthis.currentCoordinates = coordinates\n\tthis.migrationContext.Log.Infof(\"Connecting binlog streamer at %+v\", coordinates)\n\n\t// Start sync with specified GTID set or binlog file and position\n\tif this.migrationContext.UseGTIDs {\n\t\tcoords := coordinates.(*mysql.GTIDBinlogCoordinates)\n\t\tthis.binlogStreamer, err = this.binlogSyncer.StartSyncGTID(coords.GTIDSet)\n\t} else {\n\t\tcoords := this.currentCoordinates.(*mysql.FileBinlogCoordinates)\n\t\tthis.binlogStreamer, err = this.binlogSyncer.StartSync(gomysql.Position{\n\t\t\tName: coords.LogFile,\n\t\t\tPos:  uint32(coords.LogPos)},\n\t\t)\n\t}\n\treturn err\n}\n\nfunc (this *GoMySQLReader) GetCurrentBinlogCoordinates() mysql.BinlogCoordinates {\n\tthis.currentCoordinatesMutex.Lock()\n\tdefer this.currentCoordinatesMutex.Unlock()\n\treturn this.currentCoordinates.Clone()\n}\n\nfunc (this *GoMySQLReader) handleRowsEvent(ev *replication.BinlogEvent, rowsEvent *replication.RowsEvent, entriesChannel chan<- *BinlogEntry) error {\n\tcurrentCoords := this.GetCurrentBinlogCoordinates()\n\tdml := ToEventDML(ev.Header.EventType.String())\n\tif dml == NotDML {\n\t\treturn fmt.Errorf(\"Unknown DML type: %s\", ev.Header.EventType.String())\n\t}\n\tfor i, row := range rowsEvent.Rows {\n\t\tif dml == UpdateDML && i%2 == 1 {\n\t\t\t// An update has two rows (WHERE+SET)\n\t\t\t// We do both at the same time\n\t\t\tcontinue\n\t\t}\n\t\tbinlogEntry := NewBinlogEntryAt(currentCoords)\n\t\tbinlogEntry.DmlEvent = NewBinlogDMLEvent(\n\t\t\tstring(rowsEvent.Table.Schema),\n\t\t\tstring(rowsEvent.Table.Table),\n\t\t\tdml,\n\t\t)\n\t\tswitch dml {\n\t\tcase InsertDML:\n\t\t\t{\n\t\t\t\tbinlogEntry.DmlEvent.NewColumnValues = sql.ToColumnValues(row)\n\t\t\t}\n\t\tcase UpdateDML:\n\t\t\t{\n\t\t\t\tbinlogEntry.DmlEvent.WhereColumnValues = sql.ToColumnValues(row)\n\t\t\t\tbinlogEntry.DmlEvent.NewColumnValues = sql.ToColumnValues(rowsEvent.Rows[i+1])\n\t\t\t}\n\t\tcase DeleteDML:\n\t\t\t{\n\t\t\t\tbinlogEntry.DmlEvent.WhereColumnValues = sql.ToColumnValues(row)\n\t\t\t}\n\t\t}\n\n\t\t// The channel will do the throttling. Whoever is reading from the channel\n\t\t// decides whether action is taken synchronously (meaning we wait before\n\t\t// next iteration) or asynchronously (we keep pushing more events)\n\t\t// In reality, reads will be synchronous\n\t\tentriesChannel <- binlogEntry\n\t}\n\treturn nil\n}\n\n// StreamEvents\nfunc (this *GoMySQLReader) StreamEvents(canStopStreaming func() bool, entriesChannel chan<- *BinlogEntry) error {\n\tif canStopStreaming() {\n\t\treturn nil\n\t}\n\tfor {\n\t\tif canStopStreaming() {\n\t\t\tbreak\n\t\t}\n\t\tev, err := this.binlogStreamer.GetEvent(context.Background())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Update binlog coords if using file-based coords.\n\t\t// GTID coordinates are updated on receiving GTID events.\n\t\tif !this.migrationContext.UseGTIDs {\n\t\t\tthis.currentCoordinatesMutex.Lock()\n\t\t\tcoords := this.currentCoordinates.(*mysql.FileBinlogCoordinates)\n\t\t\tprevCoords := coords.Clone().(*mysql.FileBinlogCoordinates)\n\t\t\tcoords.LogPos = int64(ev.Header.LogPos)\n\t\t\tcoords.EventSize = int64(ev.Header.EventSize)\n\t\t\tif coords.IsLogPosOverflowBeyond4Bytes(prevCoords) {\n\t\t\t\tthis.currentCoordinatesMutex.Unlock()\n\t\t\t\treturn fmt.Errorf(\"Unexpected rows event at %+v, the binlog end_log_pos is overflow 4 bytes\", coords)\n\t\t\t}\n\t\t\tthis.currentCoordinatesMutex.Unlock()\n\t\t}\n\n\t\tswitch event := ev.Event.(type) {\n\t\tcase *replication.GTIDEvent:\n\t\t\tif !this.migrationContext.UseGTIDs {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsid, err := uuid.FromBytes(event.SID)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tthis.currentCoordinatesMutex.Lock()\n\t\t\tif this.LastTrxCoords != nil {\n\t\t\t\tthis.currentCoordinates = this.LastTrxCoords.Clone()\n\t\t\t}\n\t\t\tcoords := this.currentCoordinates.(*mysql.GTIDBinlogCoordinates)\n\t\t\ttrxGset := gomysql.NewUUIDSet(sid, gomysql.Interval{Start: event.GNO, Stop: event.GNO + 1})\n\t\t\tcoords.GTIDSet.AddSet(trxGset)\n\t\t\tthis.currentCoordinatesMutex.Unlock()\n\t\tcase *replication.RotateEvent:\n\t\t\tif this.migrationContext.UseGTIDs {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthis.currentCoordinatesMutex.Lock()\n\t\t\tcoords := this.currentCoordinates.(*mysql.FileBinlogCoordinates)\n\t\t\tcoords.LogFile = string(event.NextLogName)\n\t\t\tthis.migrationContext.Log.Infof(\"rotate to next log from %s:%d to %s\", coords.LogFile, int64(ev.Header.LogPos), event.NextLogName)\n\t\t\tthis.currentCoordinatesMutex.Unlock()\n\t\tcase *replication.XIDEvent:\n\t\t\tif this.migrationContext.UseGTIDs {\n\t\t\t\tthis.LastTrxCoords = &mysql.GTIDBinlogCoordinates{GTIDSet: event.GSet.(*gomysql.MysqlGTIDSet)}\n\t\t\t} else {\n\t\t\t\tthis.LastTrxCoords = this.currentCoordinates.Clone()\n\t\t\t}\n\t\tcase *replication.RowsEvent:\n\t\t\tif err := this.handleRowsEvent(ev, event, entriesChannel); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tthis.migrationContext.Log.Debugf(\"done streaming events\")\n\n\treturn nil\n}\n\nfunc (this *GoMySQLReader) Close() error {\n\tthis.binlogSyncer.Close()\n\treturn nil\n}\n"
  },
  {
    "path": "go/binlog/testdata/rbr-sample-0.txt",
    "content": "/*\n    these are the statements that were used to execute the RBR log:\n    \n    create table samplet(id int primary key, license int, name varchar(64), unique key license_uidx(license)) engine=innodb;\n    insert into samplet values (1,1,'a');\n    insert into samplet values (2,2,'extended'),(3,3,'extended');\n    begin;\n    insert into samplet values (4,4,'transaction');\n    insert into samplet values (5,5,'transaction');\n    insert into samplet values (6,6,'transaction');\n    commit;\n    update samplet set name='update' where id=5;\n    replace into samplet values (2,4,'replaced 2,4');\n    insert into samplet values (7,7,'7');\n    insert into samplet values (8,8,'8');\n    delete from samplet where id >= 7;\n    insert into samplet values (9,9,'9');\n    begin;\n    update samplet set name='update 9' where id=9;\n    delete from samplet where license=3;\n    insert into samplet values (10,10,'10');\n    commit;\n*/\n/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;\n/*!40019 SET @@session.max_insert_delayed_threads=0*/;\n/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;\nDELIMITER /*!*/;\n# at 4\n#160324 11:06:59 server id 104  end_log_pos 120 CRC32 0x059174d8 \tStart: binlog v 4, server v 5.6.28-log created 160324 11:06:59\n# at 120\n#160324 11:09:53 server id 1  end_log_pos 313 CRC32 0x511efdf1 \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nuse `test`/*!*/;\nSET TIMESTAMP=1458814193/*!*/;\nSET @@session.pseudo_thread_id=7940/*!*/;\nSET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;\nSET @@session.sql_mode=1073741824/*!*/;\nSET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;\n/*!\\C utf8 *//*!*/;\nSET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;\nSET @@session.lc_time_names=0/*!*/;\nSET @@session.collation_database=DEFAULT/*!*/;\ncreate table samplet(id int primary key, license int, name varchar(64), unique key license_uidx(license)) engine=innodb\n/*!*/;\n# at 313\n#160324 11:10:13 server id 1  end_log_pos 385 CRC32 0x6b95100a \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814213/*!*/;\nBEGIN\n/*!*/;\n# at 385\n#160324 11:10:13 server id 1  end_log_pos 439 CRC32 0xfa97ad69 \tTable_map: `test`.`samplet` mapped to number 72\n# at 439\n#160324 11:10:13 server id 1  end_log_pos 485 CRC32 0xae356826 \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=1\n###   @2=1\n###   @3='a'\n# at 485\n#160324 11:10:13 server id 1  end_log_pos 516 CRC32 0xf60389e3 \tXid = 49802\nCOMMIT/*!*/;\n# at 516\n#160324 11:10:35 server id 1  end_log_pos 588 CRC32 0x1a8730ad \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814235/*!*/;\nBEGIN\n/*!*/;\n# at 588\n#160324 11:10:35 server id 1  end_log_pos 642 CRC32 0xac564207 \tTable_map: `test`.`samplet` mapped to number 72\n# at 642\n#160324 11:10:35 server id 1  end_log_pos 713 CRC32 0x3020ee9e \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=2\n###   @2=2\n###   @3='extended'\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=3\n###   @2=3\n###   @3='extended'\n# at 713\n#160324 11:10:35 server id 1  end_log_pos 744 CRC32 0x341f0c1d \tXid = 49848\nCOMMIT/*!*/;\n# at 744\n#160324 11:10:47 server id 1  end_log_pos 816 CRC32 0x2454c8aa \tQuery\tthread_id=7940\texec_time=14\terror_code=0\nSET TIMESTAMP=1458814247/*!*/;\nBEGIN\n/*!*/;\n# at 816\n#160324 11:10:47 server id 1  end_log_pos 870 CRC32 0x92018566 \tTable_map: `test`.`samplet` mapped to number 72\n# at 870\n#160324 11:10:47 server id 1  end_log_pos 926 CRC32 0x5b882310 \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=4\n###   @2=4\n###   @3='transaction'\n# at 926\n#160324 11:10:54 server id 1  end_log_pos 980 CRC32 0x374b624b \tTable_map: `test`.`samplet` mapped to number 72\n# at 980\n#160324 11:10:54 server id 1  end_log_pos 1036 CRC32 0xfff6a2b9 \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=5\n###   @2=5\n###   @3='transaction'\n# at 1036\n#160324 11:10:59 server id 1  end_log_pos 1090 CRC32 0x37e19690 \tTable_map: `test`.`samplet` mapped to number 72\n# at 1090\n#160324 11:10:59 server id 1  end_log_pos 1146 CRC32 0x58a01053 \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=6\n###   @2=6\n###   @3='transaction'\n# at 1146\n#160324 11:10:59 server id 1  end_log_pos 1177 CRC32 0xdd5de027 \tXid = 49894\nCOMMIT/*!*/;\n# at 1177\n#160324 11:11:16 server id 1  end_log_pos 1249 CRC32 0x5c4a609b \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814276/*!*/;\nBEGIN\n/*!*/;\n# at 1249\n#160324 11:11:16 server id 1  end_log_pos 1303 CRC32 0x9d3c756b \tTable_map: `test`.`samplet` mapped to number 72\n# at 1303\n#160324 11:11:16 server id 1  end_log_pos 1352 CRC32 0x9b0d2ff4 \tUpdate_rows: table id 72 flags: STMT_END_F\n### UPDATE `test`.`samplet`\n### WHERE\n###   @1=5\n### SET\n###   @3='update'\n# at 1352\n#160324 11:11:16 server id 1  end_log_pos 1383 CRC32 0x8e051bed \tXid = 49931\nCOMMIT/*!*/;\n# at 1383\n#160324 11:11:44 server id 1  end_log_pos 1455 CRC32 0xe9744e83 \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814304/*!*/;\nBEGIN\n/*!*/;\n# at 1455\n#160324 11:11:44 server id 1  end_log_pos 1509 CRC32 0x34672cb1 \tTable_map: `test`.`samplet` mapped to number 72\n# at 1509\n#160324 11:11:44 server id 1  end_log_pos 1549 CRC32 0x4383e9ee \tDelete_rows: table id 72\n# at 1549\n#160324 11:11:44 server id 1  end_log_pos 1612 CRC32 0x899eb398 \tUpdate_rows: table id 72 flags: STMT_END_F\n### DELETE FROM `test`.`samplet`\n### WHERE\n###   @1=2\n### UPDATE `test`.`samplet`\n### WHERE\n###   @1=4\n### SET\n###   @1=2\n###   @2=4\n###   @3='replaced 2,4'\n# at 1612\n#160324 11:11:44 server id 1  end_log_pos 1643 CRC32 0x037a8fe1 \tXid = 49977\nCOMMIT/*!*/;\n# at 1643\n#160324 11:11:54 server id 1  end_log_pos 1715 CRC32 0xb02520cd \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814314/*!*/;\nBEGIN\n/*!*/;\n# at 1715\n#160324 11:11:54 server id 1  end_log_pos 1769 CRC32 0xcbcf4323 \tTable_map: `test`.`samplet` mapped to number 72\n# at 1769\n#160324 11:11:54 server id 1  end_log_pos 1815 CRC32 0x4d52b057 \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=7\n###   @2=7\n###   @3='7'\n# at 1815\n#160324 11:11:54 server id 1  end_log_pos 1846 CRC32 0x5289b6a4 \tXid = 50001\nCOMMIT/*!*/;\n# at 1846\n#160324 11:11:59 server id 1  end_log_pos 1918 CRC32 0x1758ab97 \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814319/*!*/;\nBEGIN\n/*!*/;\n# at 1918\n#160324 11:11:59 server id 1  end_log_pos 1972 CRC32 0xa4602796 \tTable_map: `test`.`samplet` mapped to number 72\n# at 1972\n#160324 11:11:59 server id 1  end_log_pos 2018 CRC32 0x6a6eb0c9 \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=8\n###   @2=8\n###   @3='8'\n# at 2018\n#160324 11:11:59 server id 1  end_log_pos 2049 CRC32 0x6d0fef4d \tXid = 50014\nCOMMIT/*!*/;\n# at 2049\n#160324 11:12:12 server id 1  end_log_pos 2121 CRC32 0x6cd5da13 \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814332/*!*/;\nBEGIN\n/*!*/;\n# at 2121\n#160324 11:12:12 server id 1  end_log_pos 2175 CRC32 0x8339241f \tTable_map: `test`.`samplet` mapped to number 72\n# at 2175\n#160324 11:12:12 server id 1  end_log_pos 2220 CRC32 0x669385e1 \tDelete_rows: table id 72 flags: STMT_END_F\n### DELETE FROM `test`.`samplet`\n### WHERE\n###   @1=7\n### DELETE FROM `test`.`samplet`\n### WHERE\n###   @1=8\n# at 2220\n#160324 11:12:12 server id 1  end_log_pos 2251 CRC32 0xba81d2b0 \tXid = 50038\nCOMMIT/*!*/;\n# at 2251\n#160324 11:12:20 server id 1  end_log_pos 2323 CRC32 0x4c58be8c \tQuery\tthread_id=7940\texec_time=0\terror_code=0\nSET TIMESTAMP=1458814340/*!*/;\nBEGIN\n/*!*/;\n# at 2323\n#160324 11:12:20 server id 1  end_log_pos 2377 CRC32 0x9eb23ab9 \tTable_map: `test`.`samplet` mapped to number 72\n# at 2377\n#160324 11:12:20 server id 1  end_log_pos 2423 CRC32 0xac8116ec \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=9\n###   @2=9\n###   @3='9'\n# at 2423\n#160324 11:12:20 server id 1  end_log_pos 2454 CRC32 0x5ce77ad6 \tXid = 50051\nCOMMIT/*!*/;\n# at 2454\n#160324 11:12:50 server id 1  end_log_pos 2526 CRC32 0xed19acbd \tQuery\tthread_id=7940\texec_time=26\terror_code=0\nSET TIMESTAMP=1458814370/*!*/;\nBEGIN\n/*!*/;\n# at 2526\n#160324 11:12:50 server id 1  end_log_pos 2580 CRC32 0x0bf6b98f \tTable_map: `test`.`samplet` mapped to number 72\n# at 2580\n#160324 11:12:50 server id 1  end_log_pos 2631 CRC32 0x263c4579 \tUpdate_rows: table id 72 flags: STMT_END_F\n### UPDATE `test`.`samplet`\n### WHERE\n###   @1=9\n### SET\n###   @3='update 9'\n# at 2631\n#160324 11:13:00 server id 1  end_log_pos 2685 CRC32 0x94b24c8b \tTable_map: `test`.`samplet` mapped to number 72\n# at 2685\n#160324 11:13:00 server id 1  end_log_pos 2725 CRC32 0xca43fe3a \tDelete_rows: table id 72 flags: STMT_END_F\n### DELETE FROM `test`.`samplet`\n### WHERE\n###   @1=3\n# at 2725\n#160324 11:13:14 server id 1  end_log_pos 2779 CRC32 0xc36088a2 \tTable_map: `test`.`samplet` mapped to number 72\n# at 2779\n#160324 11:13:14 server id 1  end_log_pos 2826 CRC32 0x98fc9dea \tWrite_rows: table id 72 flags: STMT_END_F\n### INSERT INTO `test`.`samplet`\n### SET\n###   @1=10\n###   @2=10\n###   @3='10'\n# at 2826\n#160324 11:13:14 server id 1  end_log_pos 2857 CRC32 0x729c371f \tXid = 50163\nCOMMIT/*!*/;\n# at 2857\n#160324 11:13:31 server id 104  end_log_pos 2904 CRC32 0x38531c7d \tRotate to mysql-bin.000053  pos: 4\nDELIMITER ;\n# End of log file\nROLLBACK /* added by mysqlbinlog */;\n/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;\n/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;\n"
  },
  {
    "path": "go/binlog/testdata/rbr-sample-1.txt",
    "content": "/*\n    these are the statements that were used to execute the RBR log:\n\n    drop table if exists samplet;\n    create table samplet(id int primary key, license int, name varchar(64), unique key license_uidx(license)) engine=innodb;\n    insert into samplet values (1,1,'a');\n    insert into samplet values (2,2,'extended'),(3,3,'extended');\n    begin;\n    insert into samplet values (4,4,'transaction');\n    insert into samplet values (5,5,'transaction');\n    insert into samplet values (6,6,'transaction');\n    commit;\n    update samplet set name='update' where id=5;\n    replace into samplet values (2,4,'replaced 2,4');\n    insert into samplet values (7,7,'7');\n    insert into samplet values (8,8,'8');\n    delete from samplet where id >= 7;\n    insert into samplet values (9,9,'9');\n    begin;\n    update samplet set name='update 9' where id=9;\n    delete from samplet where license=3;\n    insert into samplet values (10,10,'10');\n    commit;\n    update samplet set name='update 5,6' where id in (5,6);\n    begin;\n    delete from samplet where id=5;\n    rollback;\n*/\n"
  },
  {
    "path": "go/binlog/testdata/rbr-sample-2.txt",
    "content": "drop table if exists samplet;\ncreate table samplet(id int primary key, license int, name varchar(64), b tinyblob, unique key license_uidx(license)) engine=innodb;\ninsert into samplet (id, license, name) values (1,1,'a');\ninsert into samplet (id, license, name) values (2,2,'extended'),(3,3,'extended');\nbegin;\ninsert into samplet (id, license, name) values (4,4,'transaction');\ninsert into samplet (id, license, name) values (5,5,'transaction');\ninsert into samplet (id, license, name) values (6,6,'transaction');\ncommit;\nupdate samplet set name='update' where id=5;\nreplace into samplet (id, license, name) values (2,4,'replaced 2,4');\ninsert into samplet (id, license, name, b) values (7,7,'7', x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082');\ninsert into samplet (id, license, name) values (8,8,'8');\ndelete from samplet where id >= 7;\ninsert into samplet (id, license, name) values (9,9,'9');\nbegin;\nupdate samplet set name='update 9', b=x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082' where id=9;\nupdate samplet set name='update 9b' where id=9;\ndelete from samplet where license=3;\ninsert into samplet (id, license, name) values (10,10,'10');\ncommit;\nupdate samplet set name='update 5,6' where id in (5,6);\nbegin;\ndelete from samplet where id=5;\nrollback;\n"
  },
  {
    "path": "go/cmd/gh-ost/main.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/signal\"\n\t\"regexp\"\n\t\"syscall\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/logic\"\n\t\"github.com/github/gh-ost/go/sql\"\n\t_ \"github.com/go-sql-driver/mysql\"\n\t\"github.com/openark/golib/log\"\n\n\t\"golang.org/x/term\"\n)\n\nvar AppVersion, GitCommit string\n\n// acceptSignals registers for OS signals\nfunc acceptSignals(migrationContext *base.MigrationContext) {\n\tc := make(chan os.Signal, 1)\n\n\tsignal.Notify(c, syscall.SIGHUP)\n\tgo func() {\n\t\tfor sig := range c {\n\t\t\tswitch sig {\n\t\t\tcase syscall.SIGHUP:\n\t\t\t\tmigrationContext.Log.Infof(\"Received SIGHUP. Reloading configuration\")\n\t\t\t\tif err := migrationContext.ReadConfigFile(); err != nil {\n\t\t\t\t\tlog.Errore(err)\n\t\t\t\t} else {\n\t\t\t\t\tmigrationContext.MarkPointOfInterest()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}()\n}\n\n// main is the application's entry point. It will either spawn a CLI or HTTP interfaces.\nfunc main() {\n\tmigrationContext := base.NewMigrationContext()\n\tflag.StringVar(&migrationContext.InspectorConnectionConfig.Key.Hostname, \"host\", \"127.0.0.1\", \"MySQL hostname (preferably a replica, not the master)\")\n\tflag.StringVar(&migrationContext.AssumeMasterHostname, \"assume-master-host\", \"\", \"(optional) explicitly tell gh-ost the identity of the master. Format: some.host.com[:port] This is useful in master-master setups where you wish to pick an explicit master, or in a tungsten-replicator where gh-ost is unable to determine the master\")\n\tflag.IntVar(&migrationContext.InspectorConnectionConfig.Key.Port, \"port\", 3306, \"MySQL port (preferably a replica, not the master)\")\n\tflag.Float64Var(&migrationContext.InspectorConnectionConfig.Timeout, \"mysql-timeout\", 0.0, \"Connect, read and write timeout for MySQL\")\n\tflag.StringVar(&migrationContext.CliUser, \"user\", \"\", \"MySQL user\")\n\tflag.StringVar(&migrationContext.CliPassword, \"password\", \"\", \"MySQL password\")\n\tflag.StringVar(&migrationContext.CliMasterUser, \"master-user\", \"\", \"MySQL user on master, if different from that on replica. Requires --assume-master-host\")\n\tflag.StringVar(&migrationContext.CliMasterPassword, \"master-password\", \"\", \"MySQL password on master, if different from that on replica. Requires --assume-master-host\")\n\tflag.StringVar(&migrationContext.ConfigFile, \"conf\", \"\", \"Config file\")\n\taskPass := flag.Bool(\"ask-pass\", false, \"prompt for MySQL password\")\n\tcharset := flag.String(\"charset\", \"utf8mb4,utf8,latin1\", \"The default charset for the database connection is utf8mb4, utf8, latin1.\")\n\n\tflag.BoolVar(&migrationContext.UseTLS, \"ssl\", false, \"Enable SSL encrypted connections to MySQL hosts\")\n\tflag.StringVar(&migrationContext.TLSCACertificate, \"ssl-ca\", \"\", \"CA certificate in PEM format for TLS connections to MySQL hosts. Requires --ssl\")\n\tflag.StringVar(&migrationContext.TLSCertificate, \"ssl-cert\", \"\", \"Certificate in PEM format for TLS connections to MySQL hosts. Requires --ssl\")\n\tflag.StringVar(&migrationContext.TLSKey, \"ssl-key\", \"\", \"Key in PEM format for TLS connections to MySQL hosts. Requires --ssl\")\n\tflag.BoolVar(&migrationContext.TLSAllowInsecure, \"ssl-allow-insecure\", false, \"Skips verification of MySQL hosts' certificate chain and host name. Requires --ssl\")\n\n\tflag.StringVar(&migrationContext.DatabaseName, \"database\", \"\", \"database name (mandatory)\")\n\tflag.StringVar(&migrationContext.OriginalTableName, \"table\", \"\", \"table name (mandatory)\")\n\tflag.StringVar(&migrationContext.AlterStatement, \"alter\", \"\", \"alter statement (mandatory)\")\n\tflag.BoolVar(&migrationContext.AttemptInstantDDL, \"attempt-instant-ddl\", false, \"Attempt to use instant DDL for this migration first\")\n\tstorageEngine := flag.String(\"storage-engine\", \"innodb\", \"Specify table storage engine (default: 'innodb'). When 'rocksdb': the session transaction isolation level is changed from REPEATABLE_READ to READ_COMMITTED.\")\n\n\tflag.BoolVar(&migrationContext.CountTableRows, \"exact-rowcount\", false, \"actually count table rows as opposed to estimate them (results in more accurate progress estimation)\")\n\tflag.BoolVar(&migrationContext.ConcurrentCountTableRows, \"concurrent-rowcount\", true, \"(with --exact-rowcount), when true (default): count rows after row-copy begins, concurrently, and adjust row estimate later on; when false: first count rows, then start row copy\")\n\tflag.BoolVar(&migrationContext.AllowedRunningOnMaster, \"allow-on-master\", false, \"allow this migration to run directly on master. Preferably it would run on a replica\")\n\tflag.BoolVar(&migrationContext.AllowedMasterMaster, \"allow-master-master\", false, \"explicitly allow running in a master-master setup\")\n\tflag.BoolVar(&migrationContext.NullableUniqueKeyAllowed, \"allow-nullable-unique-key\", false, \"allow gh-ost to migrate based on a unique key with nullable columns. As long as no NULL values exist, this should be OK. If NULL values exist in chosen key, data may be corrupted. Use at your own risk!\")\n\tflag.BoolVar(&migrationContext.ApproveRenamedColumns, \"approve-renamed-columns\", false, \"in case your `ALTER` statement renames columns, gh-ost will note that and offer its interpretation of the rename. By default gh-ost does not proceed to execute. This flag approves that gh-ost's interpretation is correct\")\n\tflag.BoolVar(&migrationContext.SkipRenamedColumns, \"skip-renamed-columns\", false, \"in case your `ALTER` statement renames columns, gh-ost will note that and offer its interpretation of the rename. By default gh-ost does not proceed to execute. This flag tells gh-ost to skip the renamed columns, i.e. to treat what gh-ost thinks are renamed columns as unrelated columns. NOTE: you may lose column data\")\n\tflag.BoolVar(&migrationContext.IsTungsten, \"tungsten\", false, \"explicitly let gh-ost know that you are running on a tungsten-replication based topology (you are likely to also provide --assume-master-host)\")\n\tflag.BoolVar(&migrationContext.DiscardForeignKeys, \"discard-foreign-keys\", false, \"DANGER! This flag will migrate a table that has foreign keys and will NOT create foreign keys on the ghost table, thus your altered table will have NO foreign keys. This is useful for intentional dropping of foreign keys\")\n\tflag.BoolVar(&migrationContext.SkipForeignKeyChecks, \"skip-foreign-key-checks\", false, \"set to 'true' when you know for certain there are no foreign keys on your table, and wish to skip the time it takes for gh-ost to verify that\")\n\tflag.BoolVar(&migrationContext.SkipStrictMode, \"skip-strict-mode\", false, \"explicitly tell gh-ost binlog applier not to enforce strict sql mode\")\n\tflag.BoolVar(&migrationContext.AllowZeroInDate, \"allow-zero-in-date\", false, \"explicitly tell gh-ost binlog applier to ignore NO_ZERO_IN_DATE,NO_ZERO_DATE in sql_mode\")\n\tflag.BoolVar(&migrationContext.AliyunRDS, \"aliyun-rds\", false, \"set to 'true' when you execute on Aliyun RDS.\")\n\tflag.BoolVar(&migrationContext.GoogleCloudPlatform, \"gcp\", false, \"set to 'true' when you execute on a 1st generation Google Cloud Platform (GCP).\")\n\tflag.BoolVar(&migrationContext.AzureMySQL, \"azure\", false, \"set to 'true' when you execute on Azure Database on MySQL.\")\n\tflag.BoolVar(&migrationContext.UseGTIDs, \"gtid\", false, \"(experimental) set to 'true' to use MySQL GTIDs for binlog positioning.\")\n\n\texecuteFlag := flag.Bool(\"execute\", false, \"actually execute the alter & migrate the table. Default is noop: do some tests and exit\")\n\tflag.BoolVar(&migrationContext.TestOnReplica, \"test-on-replica\", false, \"Have the migration run on a replica, not on the master. At the end of migration replication is stopped, and tables are swapped and immediately swap-revert. Replication remains stopped and you can compare the two tables for building trust\")\n\tflag.BoolVar(&migrationContext.TestOnReplicaSkipReplicaStop, \"test-on-replica-skip-replica-stop\", false, \"When --test-on-replica is enabled, do not issue commands stop replication (requires --test-on-replica)\")\n\tflag.BoolVar(&migrationContext.MigrateOnReplica, \"migrate-on-replica\", false, \"Have the migration run on a replica, not on the master. This will do the full migration on the replica including cut-over (as opposed to --test-on-replica)\")\n\n\tflag.BoolVar(&migrationContext.OkToDropTable, \"ok-to-drop-table\", false, \"Shall the tool drop the old table at end of operation. DROPping tables can be a long locking operation, which is why I'm not doing it by default. I'm an online tool, yes?\")\n\tflag.BoolVar(&migrationContext.InitiallyDropOldTable, \"initially-drop-old-table\", false, \"Drop a possibly existing OLD table (remains from a previous run?) before beginning operation. Default is to panic and abort if such table exists\")\n\tflag.BoolVar(&migrationContext.InitiallyDropGhostTable, \"initially-drop-ghost-table\", false, \"Drop a possibly existing Ghost table (remains from a previous run?) before beginning operation. Default is to panic and abort if such table exists\")\n\tflag.BoolVar(&migrationContext.TimestampOldTable, \"timestamp-old-table\", false, \"Use a timestamp in old table name. This makes old table names unique and non conflicting cross migrations\")\n\tcutOver := flag.String(\"cut-over\", \"atomic\", \"choose cut-over type (default|atomic, two-step)\")\n\tflag.BoolVar(&migrationContext.ForceNamedCutOverCommand, \"force-named-cut-over\", false, \"When true, the 'unpostpone|cut-over' interactive command must name the migrated table\")\n\tflag.BoolVar(&migrationContext.ForceNamedPanicCommand, \"force-named-panic\", false, \"When true, the 'panic' interactive command must name the migrated table\")\n\n\tflag.BoolVar(&migrationContext.SwitchToRowBinlogFormat, \"switch-to-rbr\", false, \"let this tool automatically switch binary log format to 'ROW' on the replica, if needed. The format will NOT be switched back. I'm too scared to do that, and wish to protect you if you happen to execute another migration while this one is running\")\n\tflag.BoolVar(&migrationContext.AssumeRBR, \"assume-rbr\", false, \"set to 'true' when you know for certain your server uses 'ROW' binlog_format. gh-ost is unable to tell, event after reading binlog_format, whether the replication process does indeed use 'ROW', and restarts replication to be certain RBR setting is applied. Such operation requires SUPER privileges which you might not have. Setting this flag avoids restarting replication and you can proceed to use gh-ost without SUPER privileges\")\n\tflag.BoolVar(&migrationContext.CutOverExponentialBackoff, \"cut-over-exponential-backoff\", false, \"Wait exponentially longer intervals between failed cut-over attempts. Wait intervals obey a maximum configurable with 'exponential-backoff-max-interval').\")\n\texponentialBackoffMaxInterval := flag.Int64(\"exponential-backoff-max-interval\", 64, \"Maximum number of seconds to wait between attempts when performing various operations with exponential backoff.\")\n\tchunkSize := flag.Int64(\"chunk-size\", 1000, \"amount of rows to handle in each iteration (allowed range: 10-100,000)\")\n\tdmlBatchSize := flag.Int64(\"dml-batch-size\", 10, \"batch size for DML events to apply in a single transaction (range 1-1000)\")\n\tdefaultRetries := flag.Int64(\"default-retries\", 60, \"Default number of retries for various operations before panicking\")\n\tflag.BoolVar(&migrationContext.PanicOnWarnings, \"panic-on-warnings\", false, \"Panic when SQL warnings are encountered when copying a batch indicating data loss\")\n\tcutOverLockTimeoutSeconds := flag.Int64(\"cut-over-lock-timeout-seconds\", 3, \"Max number of seconds to hold locks on tables while attempting to cut-over (retry attempted when lock exceeds timeout) or attempting instant DDL\")\n\tniceRatio := flag.Float64(\"nice-ratio\", 0, \"force being 'nice', imply sleep time per chunk time; range: [0.0..100.0]. Example values: 0 is aggressive. 1: for every 1ms spent copying rows, sleep additional 1ms (effectively doubling runtime); 0.7: for every 10ms spend in a rowcopy chunk, spend 7ms sleeping immediately after\")\n\n\tmaxLagMillis := flag.Int64(\"max-lag-millis\", 1500, \"replication lag at which to throttle operation\")\n\treplicationLagQuery := flag.String(\"replication-lag-query\", \"\", \"Deprecated. gh-ost uses an internal, subsecond resolution query\")\n\tthrottleControlReplicas := flag.String(\"throttle-control-replicas\", \"\", \"List of replicas on which to check for lag; comma delimited. Example: myhost1.com:3306,myhost2.com,myhost3.com:3307\")\n\tthrottleQuery := flag.String(\"throttle-query\", \"\", \"when given, issued (every second) to check if operation should throttle. Expecting to return zero for no-throttle, >0 for throttle. Query is issued on the migrated server. Make sure this query is lightweight\")\n\tthrottleHTTP := flag.String(\"throttle-http\", \"\", \"when given, gh-ost checks given URL via HEAD request; any response code other than 200 (OK) causes throttling; make sure it has low latency response\")\n\tflag.Int64Var(&migrationContext.ThrottleHTTPIntervalMillis, \"throttle-http-interval-millis\", 100, \"Number of milliseconds to wait before triggering another HTTP throttle check\")\n\tflag.Int64Var(&migrationContext.ThrottleHTTPTimeoutMillis, \"throttle-http-timeout-millis\", 1000, \"Number of milliseconds to use as an HTTP throttle check timeout\")\n\tignoreHTTPErrors := flag.Bool(\"ignore-http-errors\", false, \"ignore HTTP connection errors during throttle check\")\n\theartbeatIntervalMillis := flag.Int64(\"heartbeat-interval-millis\", 100, \"how frequently would gh-ost inject a heartbeat value\")\n\tflag.StringVar(&migrationContext.ThrottleFlagFile, \"throttle-flag-file\", \"\", \"operation pauses when this file exists; hint: use a file that is specific to the table being altered\")\n\tflag.StringVar(&migrationContext.ThrottleAdditionalFlagFile, \"throttle-additional-flag-file\", \"/tmp/gh-ost.throttle\", \"operation pauses when this file exists; hint: keep default, use for throttling multiple gh-ost operations\")\n\tflag.StringVar(&migrationContext.PostponeCutOverFlagFile, \"postpone-cut-over-flag-file\", \"\", \"while this file exists, migration will postpone the final stage of swapping tables, and will keep on syncing the ghost table. Cut-over/swapping would be ready to perform the moment the file is deleted.\")\n\tflag.StringVar(&migrationContext.PanicFlagFile, \"panic-flag-file\", \"\", \"when this file is created, gh-ost will immediately terminate, without cleanup\")\n\n\tflag.BoolVar(&migrationContext.DropServeSocket, \"initially-drop-socket-file\", false, \"Should gh-ost forcibly delete an existing socket file. Be careful: this might drop the socket file of a running migration!\")\n\tflag.StringVar(&migrationContext.ServeSocketFile, \"serve-socket-file\", \"\", \"Unix socket file to serve on. Default: auto-determined and advertised upon startup\")\n\tflag.Int64Var(&migrationContext.ServeTCPPort, \"serve-tcp-port\", 0, \"TCP port to serve on. Default: disabled\")\n\n\tflag.StringVar(&migrationContext.HooksPath, \"hooks-path\", \"\", \"directory where hook files are found (default: empty, ie. hooks disabled). Hook files found on this path, and conforming to hook naming conventions will be executed\")\n\tflag.StringVar(&migrationContext.HooksHintMessage, \"hooks-hint\", \"\", \"arbitrary message to be injected to hooks via GH_OST_HOOKS_HINT, for your convenience\")\n\tflag.StringVar(&migrationContext.HooksHintOwner, \"hooks-hint-owner\", \"\", \"arbitrary name of owner to be injected to hooks via GH_OST_HOOKS_HINT_OWNER, for your convenience\")\n\tflag.StringVar(&migrationContext.HooksHintToken, \"hooks-hint-token\", \"\", \"arbitrary token to be injected to hooks via GH_OST_HOOKS_HINT_TOKEN, for your convenience\")\n\tflag.Int64Var(&migrationContext.HooksStatusIntervalSec, \"hooks-status-interval\", 60, \"how many seconds to wait between calling onStatus hook\")\n\n\tflag.UintVar(&migrationContext.ReplicaServerId, \"replica-server-id\", 99999, \"server id used by gh-ost process. Default: 99999\")\n\tflag.BoolVar(&migrationContext.AllowSetupMetadataLockInstruments, \"allow-setup-metadata-lock-instruments\", false, \"Validate rename session hold the MDL of original table before unlock tables in cut-over phase\")\n\tflag.BoolVar(&migrationContext.SkipMetadataLockCheck, \"skip-metadata-lock-check\", false, \"Skip metadata lock check at cut-over time. The checks require performance_schema.metadata_lock to be enabled\")\n\tflag.IntVar(&migrationContext.BinlogSyncerMaxReconnectAttempts, \"binlogsyncer-max-reconnect-attempts\", 0, \"when master node fails, the maximum number of binlog synchronization attempts to reconnect. 0 is unlimited\")\n\n\tflag.BoolVar(&migrationContext.IncludeTriggers, \"include-triggers\", false, \"When true, the triggers (if exist) will be created on the new table\")\n\tflag.StringVar(&migrationContext.TriggerSuffix, \"trigger-suffix\", \"\", \"Add a suffix to the trigger name (i.e '_v2'). Requires '--include-triggers'\")\n\tflag.BoolVar(&migrationContext.RemoveTriggerSuffix, \"remove-trigger-suffix-if-exists\", false, \"Remove given suffix from name of trigger. Requires '--include-triggers' and '--trigger-suffix'\")\n\tflag.BoolVar(&migrationContext.SkipPortValidation, \"skip-port-validation\", false, \"Skip port validation for MySQL connections\")\n\tflag.BoolVar(&migrationContext.Checkpoint, \"checkpoint\", false, \"Enable migration checkpoints\")\n\tflag.Int64Var(&migrationContext.CheckpointIntervalSeconds, \"checkpoint-seconds\", 300, \"The number of seconds between checkpoints\")\n\tflag.BoolVar(&migrationContext.Resume, \"resume\", false, \"Attempt to resume migration from checkpoint\")\n\tflag.BoolVar(&migrationContext.Revert, \"revert\", false, \"Attempt to revert completed migration\")\n\tflag.StringVar(&migrationContext.OldTableName, \"old-table\", \"\", \"The name of the old table when using --revert, e.g. '_mytable_del'\")\n\n\tmaxLoad := flag.String(\"max-load\", \"\", \"Comma delimited status-name=threshold. e.g: 'Threads_running=100,Threads_connected=500'. When status exceeds threshold, app throttles writes\")\n\tcriticalLoad := flag.String(\"critical-load\", \"\", \"Comma delimited status-name=threshold, same format as --max-load. When status exceeds threshold, app panics and quits\")\n\tflag.Int64Var(&migrationContext.CriticalLoadIntervalMilliseconds, \"critical-load-interval-millis\", 0, \"When 0, migration immediately bails out upon meeting critical-load. When non-zero, a second check is done after given interval, and migration only bails out if 2nd check still meets critical load\")\n\tflag.Int64Var(&migrationContext.CriticalLoadHibernateSeconds, \"critical-load-hibernate-seconds\", 0, \"When non-zero, critical-load does not panic and bail out; instead, gh-ost goes into hibernation for the specified duration. It will not read/write anything from/to any server\")\n\tquiet := flag.Bool(\"quiet\", false, \"quiet\")\n\tverbose := flag.Bool(\"verbose\", false, \"verbose\")\n\tdebug := flag.Bool(\"debug\", false, \"debug mode (very verbose)\")\n\tstack := flag.Bool(\"stack\", false, \"add stack trace upon error\")\n\thelp := flag.Bool(\"help\", false, \"Display usage\")\n\tversion := flag.Bool(\"version\", false, \"Print version & exit\")\n\tcheckFlag := flag.Bool(\"check-flag\", false, \"Check if another flag exists/supported. This allows for cross-version scripting. Exits with 0 when all additional provided flags exist, nonzero otherwise. You must provide (dummy) values for flags that require a value. Example: gh-ost --check-flag --cut-over-lock-timeout-seconds --nice-ratio 0\")\n\tflag.StringVar(&migrationContext.ForceTmpTableName, \"force-table-names\", \"\", \"table name prefix to be used on the temporary tables\")\n\tflag.CommandLine.SetOutput(os.Stdout)\n\n\tflag.Parse()\n\n\tif *checkFlag {\n\t\treturn\n\t}\n\tif *help {\n\t\tfmt.Fprintf(os.Stdout, \"Usage of gh-ost:\\n\")\n\t\tflag.PrintDefaults()\n\t\treturn\n\t}\n\n\tif AppVersion == \"\" {\n\t\tAppVersion = \"unversioned\"\n\t}\n\tif GitCommit == \"\" {\n\t\tGitCommit = \"unknown\"\n\t}\n\tif *version {\n\t\tfmt.Printf(\"%s (git commit: %s)\\n\", AppVersion, GitCommit)\n\t\treturn\n\t}\n\n\tmigrationContext.Log.SetLevel(log.ERROR)\n\tif *verbose {\n\t\tmigrationContext.Log.SetLevel(log.INFO)\n\t}\n\tif *debug {\n\t\tmigrationContext.Log.SetLevel(log.DEBUG)\n\t}\n\tif *stack {\n\t\tmigrationContext.Log.SetPrintStackTrace(*stack)\n\t}\n\tif *quiet {\n\t\t// Override!!\n\t\tmigrationContext.Log.SetLevel(log.ERROR)\n\t}\n\n\tif err := migrationContext.SetConnectionConfig(*storageEngine); err != nil {\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\n\tmigrationContext.SetConnectionCharset(*charset)\n\n\tif migrationContext.AlterStatement == \"\" && !migrationContext.Revert {\n\t\tlog.Fatal(\"--alter must be provided and statement must not be empty\")\n\t}\n\tparser := sql.NewParserFromAlterStatement(migrationContext.AlterStatement)\n\tmigrationContext.AlterStatementOptions = parser.GetAlterStatementOptions()\n\n\tif migrationContext.Revert {\n\t\tif migrationContext.Resume {\n\t\t\tlog.Fatal(\"--revert cannot be used with --resume\")\n\t\t}\n\t\tif migrationContext.OldTableName == \"\" {\n\t\t\tmigrationContext.Log.Fatalf(\"--revert must be called with --old-table\")\n\t\t}\n\n\t\t// options irrelevant to revert mode\n\t\tif migrationContext.AlterStatement != \"\" {\n\t\t\tlog.Warning(\"--alter was provided with --revert, it will be ignored\")\n\t\t}\n\t\tif migrationContext.AttemptInstantDDL {\n\t\t\tlog.Warning(\"--attempt-instant-ddl was provided with --revert, it will be ignored\")\n\t\t}\n\t\tif migrationContext.IncludeTriggers {\n\t\t\tlog.Warning(\"--include-triggers was provided with --revert, it will be ignored\")\n\t\t}\n\t\tif migrationContext.DiscardForeignKeys {\n\t\t\tlog.Warning(\"--discard-foreign-keys was provided with --revert, it will be ignored\")\n\t\t}\n\t}\n\n\tif migrationContext.DatabaseName == \"\" {\n\t\tif parser.HasExplicitSchema() {\n\t\t\tmigrationContext.DatabaseName = parser.GetExplicitSchema()\n\t\t} else {\n\t\t\tlog.Fatal(\"--database must be provided and database name must not be empty, or --alter must specify database name\")\n\t\t}\n\t}\n\n\tif err := flag.Set(\"database\", url.QueryEscape(migrationContext.DatabaseName)); err != nil {\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\n\tif migrationContext.OriginalTableName == \"\" {\n\t\tif parser.HasExplicitTable() {\n\t\t\tmigrationContext.OriginalTableName = parser.GetExplicitTable()\n\t\t} else {\n\t\t\tlog.Fatal(\"--table must be provided and table name must not be empty, or --alter must specify table name\")\n\t\t}\n\t}\n\tmigrationContext.Noop = !(*executeFlag)\n\tif migrationContext.AllowedRunningOnMaster && migrationContext.TestOnReplica {\n\t\tmigrationContext.Log.Fatal(\"--allow-on-master and --test-on-replica are mutually exclusive\")\n\t}\n\tif migrationContext.AllowedRunningOnMaster && migrationContext.MigrateOnReplica {\n\t\tmigrationContext.Log.Fatal(\"--allow-on-master and --migrate-on-replica are mutually exclusive\")\n\t}\n\tif migrationContext.MigrateOnReplica && migrationContext.TestOnReplica {\n\t\tmigrationContext.Log.Fatal(\"--migrate-on-replica and --test-on-replica are mutually exclusive\")\n\t}\n\tif migrationContext.SwitchToRowBinlogFormat && migrationContext.AssumeRBR {\n\t\tmigrationContext.Log.Fatal(\"--switch-to-rbr and --assume-rbr are mutually exclusive\")\n\t}\n\tif migrationContext.TestOnReplicaSkipReplicaStop {\n\t\tif !migrationContext.TestOnReplica {\n\t\t\tmigrationContext.Log.Fatal(\"--test-on-replica-skip-replica-stop requires --test-on-replica to be enabled\")\n\t\t}\n\t\tmigrationContext.Log.Warning(\"--test-on-replica-skip-replica-stop enabled. We will not stop replication before cut-over. Ensure you have a plugin that does this.\")\n\t}\n\tif migrationContext.CliMasterUser != \"\" && migrationContext.AssumeMasterHostname == \"\" {\n\t\tmigrationContext.Log.Fatal(\"--master-user requires --assume-master-host\")\n\t}\n\tif migrationContext.CliMasterPassword != \"\" && migrationContext.AssumeMasterHostname == \"\" {\n\t\tmigrationContext.Log.Fatal(\"--master-password requires --assume-master-host\")\n\t}\n\tif migrationContext.TLSCACertificate != \"\" && !migrationContext.UseTLS {\n\t\tmigrationContext.Log.Fatal(\"--ssl-ca requires --ssl\")\n\t}\n\tif migrationContext.TLSCertificate != \"\" && !migrationContext.UseTLS {\n\t\tmigrationContext.Log.Fatal(\"--ssl-cert requires --ssl\")\n\t}\n\tif migrationContext.TLSKey != \"\" && !migrationContext.UseTLS {\n\t\tmigrationContext.Log.Fatal(\"--ssl-key requires --ssl\")\n\t}\n\tif migrationContext.TLSAllowInsecure && !migrationContext.UseTLS {\n\t\tmigrationContext.Log.Fatal(\"--ssl-allow-insecure requires --ssl\")\n\t}\n\tif *replicationLagQuery != \"\" {\n\t\tmigrationContext.Log.Warningf(\"--replication-lag-query is deprecated\")\n\t}\n\tif migrationContext.IncludeTriggers && migrationContext.TriggerSuffix == \"\" {\n\t\tmigrationContext.Log.Fatalf(\"--trigger-suffix must be used with --include-triggers\")\n\t}\n\tif !migrationContext.IncludeTriggers && migrationContext.TriggerSuffix != \"\" {\n\t\tmigrationContext.Log.Fatalf(\"--trigger-suffix cannot be be used without --include-triggers\")\n\t}\n\tif migrationContext.TriggerSuffix != \"\" {\n\t\tregex := regexp.MustCompile(`^[\\da-zA-Z_]+$`)\n\n\t\tif !regex.Match([]byte(migrationContext.TriggerSuffix)) {\n\t\t\tmigrationContext.Log.Fatalf(\"--trigger-suffix must contain only alpha numeric characters and underscore (0-9,a-z,A-Z,_)\")\n\t\t}\n\t}\n\tif *storageEngine == \"rocksdb\" {\n\t\tmigrationContext.Log.Warning(\"RocksDB storage engine support is experimental\")\n\t}\n\tif migrationContext.CheckpointIntervalSeconds < 10 {\n\t\tmigrationContext.Log.Fatalf(\"--checkpoint-seconds should be >=10\")\n\t}\n\n\tswitch *cutOver {\n\tcase \"atomic\", \"default\", \"\":\n\t\tmigrationContext.CutOverType = base.CutOverAtomic\n\tcase \"two-step\":\n\t\tmigrationContext.CutOverType = base.CutOverTwoStep\n\tdefault:\n\t\tmigrationContext.Log.Fatalf(\"Unknown cut-over: %s\", *cutOver)\n\t}\n\tif err := migrationContext.ReadConfigFile(); err != nil {\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\tif err := migrationContext.ReadThrottleControlReplicaKeys(*throttleControlReplicas); err != nil {\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\tif err := migrationContext.ReadMaxLoad(*maxLoad); err != nil {\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\tif err := migrationContext.ReadCriticalLoad(*criticalLoad); err != nil {\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\tif migrationContext.ServeSocketFile == \"\" {\n\t\tmigrationContext.ServeSocketFile = fmt.Sprintf(\"/tmp/gh-ost.%s.%s.sock\", migrationContext.DatabaseName, migrationContext.OriginalTableName)\n\t}\n\tif *askPass {\n\t\tfmt.Println(\"Password:\")\n\t\tbytePassword, err := term.ReadPassword(syscall.Stdin)\n\t\tif err != nil {\n\t\t\tmigrationContext.Log.Fatale(err)\n\t\t}\n\t\tmigrationContext.CliPassword = string(bytePassword)\n\t}\n\n\tmigrationContext.SetHeartbeatIntervalMilliseconds(*heartbeatIntervalMillis)\n\tmigrationContext.SetNiceRatio(*niceRatio)\n\tmigrationContext.SetChunkSize(*chunkSize)\n\tmigrationContext.SetDMLBatchSize(*dmlBatchSize)\n\tmigrationContext.SetMaxLagMillisecondsThrottleThreshold(*maxLagMillis)\n\tmigrationContext.SetThrottleQuery(*throttleQuery)\n\tmigrationContext.SetThrottleHTTP(*throttleHTTP)\n\tmigrationContext.SetIgnoreHTTPErrors(*ignoreHTTPErrors)\n\tmigrationContext.SetDefaultNumRetries(*defaultRetries)\n\tmigrationContext.ApplyCredentials()\n\tif err := migrationContext.SetupTLS(); err != nil {\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\tif err := migrationContext.SetCutOverLockTimeoutSeconds(*cutOverLockTimeoutSeconds); err != nil {\n\t\tmigrationContext.Log.Errore(err)\n\t}\n\tif err := migrationContext.SetExponentialBackoffMaxInterval(*exponentialBackoffMaxInterval); err != nil {\n\t\tmigrationContext.Log.Errore(err)\n\t}\n\n\tlog.Infof(\"starting gh-ost %+v (git commit: %s)\", AppVersion, GitCommit)\n\tacceptSignals(migrationContext)\n\n\tmigrator := logic.NewMigrator(migrationContext, AppVersion)\n\tvar err error\n\tif migrationContext.Revert {\n\t\terr = migrator.Revert()\n\t} else {\n\t\terr = migrator.Migrate()\n\t}\n\n\tif err != nil {\n\t\tmigrator.ExecOnFailureHook()\n\t\tmigrationContext.Log.Fatale(err)\n\t}\n\tfmt.Fprintln(os.Stdout, \"# Done\")\n}\n"
  },
  {
    "path": "go/logic/applier.go",
    "content": "/*\n   Copyright 2025 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\tgosql \"database/sql\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/binlog\"\n\t\"github.com/github/gh-ost/go/sql\"\n\n\t\"context\"\n\t\"database/sql/driver\"\n\n\t\"errors\"\n\t\"sync\"\n\n\t\"github.com/github/gh-ost/go/mysql\"\n\tdrivermysql \"github.com/go-sql-driver/mysql\"\n\t\"github.com/openark/golib/sqlutils\"\n)\n\nconst (\n\tGhostChangelogTableComment = \"gh-ost changelog\"\n\tatomicCutOverMagicHint     = \"ghost-cut-over-sentry\"\n)\n\n// ErrNoCheckpointFound is returned when an empty checkpoint table is queried.\nvar ErrNoCheckpointFound = errors.New(\"no checkpoint found in _ghk table\")\n\ntype dmlBuildResult struct {\n\tquery     string\n\targs      []interface{}\n\trowsDelta int64\n\terr       error\n}\n\nfunc newDmlBuildResult(query string, args []interface{}, rowsDelta int64, err error) *dmlBuildResult {\n\treturn &dmlBuildResult{\n\t\tquery:     query,\n\t\targs:      args,\n\t\trowsDelta: rowsDelta,\n\t\terr:       err,\n\t}\n}\n\nfunc newDmlBuildResultError(err error) *dmlBuildResult {\n\treturn &dmlBuildResult{\n\t\terr: err,\n\t}\n}\n\n// Applier connects and writes the applier-server, which is the server where migration\n// happens. This is typically the master, but could be a replica when `--test-on-replica` or\n// `--execute-on-replica` are given.\n// Applier is the one to actually write row data and apply binlog events onto the ghost table.\n// It is where the ghost & changelog tables get created. It is where the cut-over phase happens.\ntype Applier struct {\n\tconnectionConfig  *mysql.ConnectionConfig\n\tdb                *gosql.DB\n\tsingletonDB       *gosql.DB\n\tmigrationContext  *base.MigrationContext\n\tfinishedMigrating int64\n\tname              string\n\n\tCurrentCoordinatesMutex sync.Mutex\n\tCurrentCoordinates      mysql.BinlogCoordinates\n\n\tLastIterationRangeMutex     sync.Mutex\n\tLastIterationRangeMinValues *sql.ColumnValues\n\tLastIterationRangeMaxValues *sql.ColumnValues\n\n\tdmlDeleteQueryBuilder        *sql.DMLDeleteQueryBuilder\n\tdmlInsertQueryBuilder        *sql.DMLInsertQueryBuilder\n\tdmlUpdateQueryBuilder        *sql.DMLUpdateQueryBuilder\n\tcheckpointInsertQueryBuilder *sql.CheckpointInsertQueryBuilder\n}\n\nfunc NewApplier(migrationContext *base.MigrationContext) *Applier {\n\treturn &Applier{\n\t\tconnectionConfig:  migrationContext.ApplierConnectionConfig,\n\t\tmigrationContext:  migrationContext,\n\t\tfinishedMigrating: 0,\n\t\tname:              \"applier\",\n\t}\n}\n\n// compileMigrationKeyWarningRegex compiles a regex pattern that matches duplicate key warnings\n// for the migration's unique key. Duplicate warnings are formatted differently across MySQL versions,\n// hence the optional table name prefix. Metacharacters in table/index names are escaped to avoid\n// regex syntax errors.\nfunc (this *Applier) compileMigrationKeyWarningRegex() (*regexp.Regexp, error) {\n\tescapedTable := regexp.QuoteMeta(this.migrationContext.GetGhostTableName())\n\tescapedKey := regexp.QuoteMeta(this.migrationContext.UniqueKey.NameInGhostTable)\n\tmigrationUniqueKeyPattern := fmt.Sprintf(`for key '(%s\\.)?%s'`, escapedTable, escapedKey)\n\tmigrationKeyRegex, err := regexp.Compile(migrationUniqueKeyPattern)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to compile migration key pattern: %w\", err)\n\t}\n\treturn migrationKeyRegex, nil\n}\n\nfunc (this *Applier) InitDBConnections() (err error) {\n\tapplierUri := this.connectionConfig.GetDBUri(this.migrationContext.DatabaseName)\n\turiWithMulti := fmt.Sprintf(\"%s&multiStatements=true\", applierUri)\n\tif this.db, _, err = mysql.GetDB(this.migrationContext.Uuid, uriWithMulti); err != nil {\n\t\treturn err\n\t}\n\tsingletonApplierUri := fmt.Sprintf(\"%s&timeout=0\", applierUri)\n\tif this.singletonDB, _, err = mysql.GetDB(this.migrationContext.Uuid, singletonApplierUri); err != nil {\n\t\treturn err\n\t}\n\tthis.singletonDB.SetMaxOpenConns(1)\n\tversion, err := base.ValidateConnection(this.db, this.connectionConfig, this.migrationContext, this.name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err := base.ValidateConnection(this.singletonDB, this.connectionConfig, this.migrationContext, this.name); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.ApplierMySQLVersion = version\n\tif err := this.validateAndReadGlobalVariables(); err != nil {\n\t\treturn err\n\t}\n\tif !this.migrationContext.AliyunRDS && !this.migrationContext.GoogleCloudPlatform && !this.migrationContext.AzureMySQL {\n\t\tif impliedKey, err := mysql.GetInstanceKey(this.db); err != nil {\n\t\t\treturn err\n\t\t} else {\n\t\t\tthis.connectionConfig.ImpliedKey = impliedKey\n\t\t}\n\t}\n\tif err := this.readTableColumns(); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Applier initiated on %+v, version %+v\", this.connectionConfig.ImpliedKey, this.migrationContext.ApplierMySQLVersion)\n\treturn nil\n}\n\nfunc (this *Applier) prepareQueries() (err error) {\n\tif this.dmlDeleteQueryBuilder, err = sql.NewDMLDeleteQueryBuilder(\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.GetGhostTableName(),\n\t\tthis.migrationContext.OriginalTableColumns,\n\t\t&this.migrationContext.UniqueKey.Columns,\n\t); err != nil {\n\t\treturn err\n\t}\n\tif this.dmlInsertQueryBuilder, err = sql.NewDMLInsertQueryBuilder(\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.GetGhostTableName(),\n\t\tthis.migrationContext.OriginalTableColumns,\n\t\tthis.migrationContext.SharedColumns,\n\t\tthis.migrationContext.MappedSharedColumns,\n\t); err != nil {\n\t\treturn err\n\t}\n\tif this.dmlUpdateQueryBuilder, err = sql.NewDMLUpdateQueryBuilder(\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.GetGhostTableName(),\n\t\tthis.migrationContext.OriginalTableColumns,\n\t\tthis.migrationContext.SharedColumns,\n\t\tthis.migrationContext.MappedSharedColumns,\n\t\t&this.migrationContext.UniqueKey.Columns,\n\t); err != nil {\n\t\treturn err\n\t}\n\tif this.migrationContext.Checkpoint {\n\t\tif this.checkpointInsertQueryBuilder, err = sql.NewCheckpointQueryBuilder(\n\t\t\tthis.migrationContext.DatabaseName,\n\t\t\tthis.migrationContext.GetCheckpointTableName(),\n\t\t\t&this.migrationContext.UniqueKey.Columns,\n\t\t); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// validateAndReadGlobalVariables potentially reads server global variables, such as the time_zone and wait_timeout.\nfunc (this *Applier) validateAndReadGlobalVariables() error {\n\tquery := `select /* gh-ost */ @@global.time_zone, @@global.wait_timeout`\n\tif err := this.db.QueryRow(query).Scan(\n\t\t&this.migrationContext.ApplierTimeZone,\n\t\t&this.migrationContext.ApplierWaitTimeout,\n\t); err != nil {\n\t\treturn err\n\t}\n\n\tthis.migrationContext.Log.Infof(\"will use time_zone='%s' on applier\", this.migrationContext.ApplierTimeZone)\n\treturn nil\n}\n\n// generateSqlModeQuery return a `sql_mode = ...` query, to be wrapped with a `set session` or `set global`,\n// based on gh-ost configuration:\n// - User may skip strict mode\n// - User may allow zero dats or zero in dates\nfunc (this *Applier) generateSqlModeQuery() string {\n\tsqlModeAddendum := []string{`NO_AUTO_VALUE_ON_ZERO`}\n\tif !this.migrationContext.SkipStrictMode {\n\t\tsqlModeAddendum = append(sqlModeAddendum, `STRICT_ALL_TABLES`)\n\t}\n\tsqlModeQuery := fmt.Sprintf(\"CONCAT(@@session.sql_mode, ',%s')\", strings.Join(sqlModeAddendum, \",\"))\n\tif this.migrationContext.AllowZeroInDate {\n\t\tsqlModeQuery = fmt.Sprintf(\"REPLACE(REPLACE(%s, 'NO_ZERO_IN_DATE', ''), 'NO_ZERO_DATE', '')\", sqlModeQuery)\n\t}\n\n\treturn fmt.Sprintf(\"sql_mode = %s\", sqlModeQuery)\n}\n\n// generateInstantDDLQuery returns the SQL for this ALTER operation\n// with an INSTANT assertion (requires MySQL 8.0+)\nfunc (this *Applier) generateInstantDDLQuery() string {\n\treturn fmt.Sprintf(`ALTER /* gh-ost */ TABLE %s.%s %s, ALGORITHM=INSTANT`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tthis.migrationContext.AlterStatementOptions,\n\t)\n}\n\n// readTableColumns reads table columns on applier\nfunc (this *Applier) readTableColumns() (err error) {\n\tthis.migrationContext.Log.Infof(\"Examining table structure on applier\")\n\tthis.migrationContext.OriginalTableColumnsOnApplier, _, err = mysql.GetTableColumns(this.db, this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// showTableStatus returns the output of `show table status like '...'` command\nfunc (this *Applier) showTableStatus(tableName string) (rowMap sqlutils.RowMap) {\n\tquery := fmt.Sprintf(`show /* gh-ost */ table status from %s like '%s'`, sql.EscapeName(this.migrationContext.DatabaseName), tableName)\n\tsqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\trowMap = m\n\t\treturn nil\n\t})\n\treturn rowMap\n}\n\n// tableExists checks if a given table exists in database\nfunc (this *Applier) tableExists(tableName string) (tableFound bool) {\n\tm := this.showTableStatus(tableName)\n\treturn (m != nil)\n}\n\n// ValidateOrDropExistingTables verifies ghost and changelog tables do not exist,\n// or attempts to drop them if instructed to.\nfunc (this *Applier) ValidateOrDropExistingTables() error {\n\tif this.migrationContext.InitiallyDropGhostTable {\n\t\tif err := this.DropGhostTable(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif this.tableExists(this.migrationContext.GetGhostTableName()) {\n\t\treturn fmt.Errorf(\"Table %s already exists. Panicking. Use --initially-drop-ghost-table to force dropping it, though I really prefer that you drop it or rename it away\", sql.EscapeName(this.migrationContext.GetGhostTableName()))\n\t}\n\tif this.migrationContext.InitiallyDropOldTable {\n\t\tif err := this.DropOldTable(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif len(this.migrationContext.GetOldTableName()) > mysql.MaxTableNameLength {\n\t\tthis.migrationContext.Log.Fatalf(\"--timestamp-old-table defined, but resulting table name (%s) is too long (only %d characters allowed)\", this.migrationContext.GetOldTableName(), mysql.MaxTableNameLength)\n\t}\n\n\tif this.tableExists(this.migrationContext.GetOldTableName()) {\n\t\treturn fmt.Errorf(\"Table %s already exists. Panicking. Use --initially-drop-old-table to force dropping it, though I really prefer that you drop it or rename it away\", sql.EscapeName(this.migrationContext.GetOldTableName()))\n\t}\n\n\treturn nil\n}\n\n// AttemptInstantDDL attempts to use instant DDL (from MySQL 8.0, and earlier in Aurora and some others).\n// If successful, the operation is only a meta-data change so a lot of time is saved!\n// The risk of attempting to instant DDL when not supported is that a metadata lock may be acquired.\n// This is minor, since gh-ost will eventually require a metadata lock anyway, but at the cut-over stage.\n// Instant operations include:\n// - Adding a column\n// - Dropping a column\n// - Dropping an index\n// - Extending a VARCHAR column\n// - Adding a virtual generated column\n// It is not reliable to parse the `alter` statement to determine if it is instant or not.\n// This is because the table might be in an older row format, or have some other incompatibility\n// that is difficult to identify.\nfunc (this *Applier) AttemptInstantDDL() error {\n\tquery := this.generateInstantDDLQuery()\n\tthis.migrationContext.Log.Infof(\"INSTANT DDL query is: %s\", query)\n\n\t// Reuse cut-over-lock-timeout from regular migration process to reduce risk\n\t// in situations where there may be long-running transactions.\n\ttableLockTimeoutSeconds := this.migrationContext.CutOverLockTimeoutSeconds * 2\n\tthis.migrationContext.Log.Infof(\"Setting LOCK timeout as %d seconds\", tableLockTimeoutSeconds)\n\tlockTimeoutQuery := fmt.Sprintf(`set /* gh-ost */ session lock_wait_timeout:=%d`, tableLockTimeoutSeconds)\n\tif _, err := this.db.Exec(lockTimeoutQuery); err != nil {\n\t\treturn err\n\t}\n\t// We don't need a trx, because for instant DDL the SQL mode doesn't matter.\n\treturn retryOnLockWaitTimeout(func() error {\n\t\t_, err := this.db.Exec(query)\n\t\treturn err\n\t}, this.migrationContext.Log)\n}\n\n// retryOnLockWaitTimeout retries the given operation on MySQL lock wait timeout\n// (errno 1205). Non-timeout errors return immediately. This is used for instant\n// DDL attempts where the operation may be blocked by a long-running transaction.\nfunc retryOnLockWaitTimeout(operation func() error, logger base.Logger) error {\n\tconst maxRetries = 5\n\tvar err error\n\tfor i := 0; i < maxRetries; i++ {\n\t\tif i != 0 {\n\t\t\tlogger.Infof(\"Retrying after lock wait timeout (attempt %d/%d)\", i+1, maxRetries)\n\t\t\tRetrySleepFn(time.Duration(i) * 5 * time.Second)\n\t\t}\n\t\terr = operation()\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\t\tvar mysqlErr *drivermysql.MySQLError\n\t\tif !errors.As(err, &mysqlErr) || mysqlErr.Number != 1205 {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn err\n}\n\n// CreateGhostTable creates the ghost table on the applier host\nfunc (this *Applier) CreateGhostTable() error {\n\tquery := fmt.Sprintf(`create /* gh-ost */ table %s.%s like %s.%s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t)\n\tthis.migrationContext.Log.Infof(\"Creating ghost table %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t)\n\n\terr := func() error {\n\t\ttx, err := this.db.Begin()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer tx.Rollback()\n\n\t\tsessionQuery := fmt.Sprintf(`SET SESSION time_zone = '%s'`, this.migrationContext.ApplierTimeZone)\n\t\tsessionQuery = fmt.Sprintf(\"%s, %s\", sessionQuery, this.generateSqlModeQuery())\n\n\t\tif _, err := tx.Exec(sessionQuery); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := tx.Exec(query); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Ghost table created\")\n\t\tif err := tx.Commit(); err != nil {\n\t\t\t// Neither SET SESSION nor ALTER are really transactional, so strictly speaking\n\t\t\t// there's no need to commit; but let's do this the legit way anyway.\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}()\n\n\treturn err\n}\n\n// AlterGhost applies `alter` statement on ghost table\nfunc (this *Applier) AlterGhost() error {\n\tquery := fmt.Sprintf(`alter /* gh-ost */ table %s.%s %s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t\tthis.migrationContext.AlterStatementOptions,\n\t)\n\tthis.migrationContext.Log.Infof(\"Altering ghost table %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t)\n\tthis.migrationContext.Log.Debugf(\"ALTER statement: %s\", query)\n\n\terr := func() error {\n\t\ttx, err := this.db.Begin()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer tx.Rollback()\n\n\t\tsessionQuery := fmt.Sprintf(`SET SESSION time_zone = '%s'`, this.migrationContext.ApplierTimeZone)\n\t\tsessionQuery = fmt.Sprintf(\"%s, %s\", sessionQuery, this.generateSqlModeQuery())\n\n\t\tif _, err := tx.Exec(sessionQuery); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := tx.Exec(query); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Ghost table altered\")\n\t\tif err := tx.Commit(); err != nil {\n\t\t\t// Neither SET SESSION nor ALTER are really transactional, so strictly speaking\n\t\t\t// there's no need to commit; but let's do this the legit way anyway.\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}()\n\n\treturn err\n}\n\n// AlterGhost applies `alter` statement on ghost table\nfunc (this *Applier) AlterGhostAutoIncrement() error {\n\tquery := fmt.Sprintf(`alter /* gh-ost */ table %s.%s AUTO_INCREMENT=%d`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t\tthis.migrationContext.OriginalTableAutoIncrement,\n\t)\n\tthis.migrationContext.Log.Infof(\"Altering ghost table AUTO_INCREMENT value %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t)\n\tthis.migrationContext.Log.Debugf(\"AUTO_INCREMENT ALTER statement: %s\", query)\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Ghost table AUTO_INCREMENT altered\")\n\treturn nil\n}\n\n// CreateChangelogTable creates the changelog table on the applier host\nfunc (this *Applier) CreateChangelogTable() error {\n\tif err := this.DropChangelogTable(); err != nil {\n\t\treturn err\n\t}\n\tquery := fmt.Sprintf(`create /* gh-ost */ table %s.%s (\n\t\t\tid bigint unsigned auto_increment,\n\t\t\tlast_update timestamp not null DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n\t\t\thint varchar(64) charset ascii not null,\n\t\t\tvalue varchar(4096) charset ascii not null,\n\t\t\tprimary key(id),\n\t\t\tunique key hint_uidx(hint)\n\t\t) auto_increment=256 comment='%s'`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetChangelogTableName()),\n\t\tGhostChangelogTableComment,\n\t)\n\tthis.migrationContext.Log.Infof(\"Creating changelog table %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetChangelogTableName()),\n\t)\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Changelog table created\")\n\treturn nil\n}\n\n// Create the checkpoint table to store the chunk copy and applier state.\n// There are two sets of columns with the same types as the shared unique key,\n// one for IterationMinValues and one for IterationMaxValues.\nfunc (this *Applier) CreateCheckpointTable() error {\n\tif err := this.DropCheckpointTable(); err != nil {\n\t\treturn err\n\t}\n\tcolDefs := []string{\n\t\t\"`gh_ost_chk_id` bigint auto_increment primary key\",\n\t\t\"`gh_ost_chk_timestamp` bigint\",\n\t\t\"`gh_ost_chk_coords` text charset ascii\",\n\t\t\"`gh_ost_chk_iteration` bigint\",\n\t\t\"`gh_ost_rows_copied` bigint\",\n\t\t\"`gh_ost_dml_applied` bigint\",\n\t\t\"`gh_ost_is_cutover` tinyint(1) DEFAULT '0'\",\n\t}\n\tfor _, col := range this.migrationContext.UniqueKey.Columns.Columns() {\n\t\tif col.MySQLType == \"\" {\n\t\t\treturn fmt.Errorf(\"CreateCheckpoinTable: column %s has no type information. applyColumnTypes must be called\", sql.EscapeName(col.Name))\n\t\t}\n\t\tminColName := sql.TruncateColumnName(col.Name, sql.MaxColumnNameLength-4) + \"_min\"\n\t\tcolDef := fmt.Sprintf(\"%s %s\", sql.EscapeName(minColName), col.MySQLType)\n\t\tcolDefs = append(colDefs, colDef)\n\t}\n\n\tfor _, col := range this.migrationContext.UniqueKey.Columns.Columns() {\n\t\tmaxColName := sql.TruncateColumnName(col.Name, sql.MaxColumnNameLength-4) + \"_max\"\n\t\tcolDef := fmt.Sprintf(\"%s %s\", sql.EscapeName(maxColName), col.MySQLType)\n\t\tcolDefs = append(colDefs, colDef)\n\t}\n\n\tquery := fmt.Sprintf(\"create /* gh-ost */ table %s.%s (\\n %s\\n)\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetCheckpointTableName()),\n\t\tstrings.Join(colDefs, \",\\n \"),\n\t)\n\tthis.migrationContext.Log.Infof(\"Created checkpoint table\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// dropTable drops a given table on the applied host\nfunc (this *Applier) dropTable(tableName string) error {\n\tquery := fmt.Sprintf(`drop /* gh-ost */ table if exists %s.%s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(tableName),\n\t)\n\tthis.migrationContext.Log.Infof(\"Dropping table %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(tableName),\n\t)\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Table dropped\")\n\treturn nil\n}\n\n// StateMetadataLockInstrument checks if metadata_locks is enabled in performance_schema.\n// If not it attempts to enable metadata_locks if this is allowed.\nfunc (this *Applier) StateMetadataLockInstrument() error {\n\tquery := `select /*+ MAX_EXECUTION_TIME(300) */ ENABLED, TIMED from performance_schema.setup_instruments WHERE NAME = 'wait/lock/metadata/sql/mdl'`\n\tvar enabled, timed string\n\tif err := this.db.QueryRow(query).Scan(&enabled, &timed); err != nil {\n\t\tif errors.Is(err, gosql.ErrNoRows) {\n\t\t\t// performance_schema may be disabled.\n\t\t\treturn nil\n\t\t}\n\t\treturn this.migrationContext.Log.Errorf(\"query performance_schema.setup_instruments with name wait/lock/metadata/sql/mdl error: %s\", err)\n\t}\n\tif strings.EqualFold(enabled, \"YES\") && strings.EqualFold(timed, \"YES\") {\n\t\tthis.migrationContext.IsOpenMetadataLockInstruments = true\n\t\treturn nil\n\t}\n\tif !this.migrationContext.AllowSetupMetadataLockInstruments {\n\t\treturn nil\n\t}\n\tthis.migrationContext.Log.Infof(\"instrument wait/lock/metadata/sql/mdl state: enabled %s, timed %s\", enabled, timed)\n\tif _, err := this.db.Exec(`UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'wait/lock/metadata/sql/mdl'`); err != nil {\n\t\treturn this.migrationContext.Log.Errorf(\"enable instrument wait/lock/metadata/sql/mdl error: %s\", err)\n\t}\n\tthis.migrationContext.IsOpenMetadataLockInstruments = true\n\tthis.migrationContext.Log.Infof(\"instrument wait/lock/metadata/sql/mdl enabled\")\n\treturn nil\n}\n\n// dropTriggers drop the triggers on the applied host\nfunc (this *Applier) DropTriggersFromGhost() error {\n\tif len(this.migrationContext.Triggers) > 0 {\n\t\tfor _, trigger := range this.migrationContext.Triggers {\n\t\t\ttriggerName := this.migrationContext.GetGhostTriggerName(trigger.Name)\n\t\t\tquery := fmt.Sprintf(\"drop trigger if exists %s\", sql.EscapeName(triggerName))\n\t\t\t_, err := sqlutils.ExecNoPrepare(this.db, query)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tthis.migrationContext.Log.Infof(\"Trigger '%s' dropped\", triggerName)\n\t\t}\n\t}\n\treturn nil\n}\n\n// createTriggers creates the triggers on the applied host\nfunc (this *Applier) createTriggers(tableName string) error {\n\tif len(this.migrationContext.Triggers) > 0 {\n\t\tfor _, trigger := range this.migrationContext.Triggers {\n\t\t\ttriggerName := this.migrationContext.GetGhostTriggerName(trigger.Name)\n\t\t\tquery := fmt.Sprintf(`create /* gh-ost */ trigger %s %s %s on %s.%s for each row\n\t\t%s`,\n\t\t\t\tsql.EscapeName(triggerName),\n\t\t\t\ttrigger.Timing,\n\t\t\t\ttrigger.Event,\n\t\t\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\t\t\tsql.EscapeName(tableName),\n\t\t\t\ttrigger.Statement,\n\t\t\t)\n\t\t\tthis.migrationContext.Log.Infof(\"Createing trigger %s on %s.%s\",\n\t\t\t\tsql.EscapeName(triggerName),\n\t\t\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\t\t\tsql.EscapeName(tableName),\n\t\t\t)\n\t\t\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Triggers created on %s\", tableName)\n\t}\n\treturn nil\n}\n\n// CreateTriggers creates the original triggers on applier host\nfunc (this *Applier) CreateTriggersOnGhost() error {\n\terr := this.createTriggers(this.migrationContext.GetGhostTableName())\n\treturn err\n}\n\n// DropChangelogTable drops the changelog table on the applier host\nfunc (this *Applier) DropChangelogTable() error {\n\treturn this.dropTable(this.migrationContext.GetChangelogTableName())\n}\n\n// DropCheckpointTable drops the checkpoint table on applier host\nfunc (this *Applier) DropCheckpointTable() error {\n\treturn this.dropTable(this.migrationContext.GetCheckpointTableName())\n}\n\n// DropOldTable drops the _Old table on the applier host\nfunc (this *Applier) DropOldTable() error {\n\treturn this.dropTable(this.migrationContext.GetOldTableName())\n}\n\n// DropGhostTable drops the ghost table on the applier host\nfunc (this *Applier) DropGhostTable() error {\n\treturn this.dropTable(this.migrationContext.GetGhostTableName())\n}\n\n// WriteChangelog writes a value to the changelog table.\n// It returns the hint as given, for convenience\nfunc (this *Applier) WriteChangelog(hint, value string) (string, error) {\n\texplicitId := 0\n\tswitch hint {\n\tcase \"heartbeat\":\n\t\texplicitId = 1\n\tcase \"state\":\n\t\texplicitId = 2\n\tcase \"throttle\":\n\t\texplicitId = 3\n\t}\n\tquery := fmt.Sprintf(`\n\t\tinsert /* gh-ost */\n\t\tinto\n\t\t\t%s.%s\n\t\t\t(id, hint, value)\n\t\tvalues\n\t\t\t(NULLIF(?, 0), ?, ?)\n\t\ton duplicate key update\n\t\t\tlast_update=NOW(),\n\t\t\tvalue=VALUES(value)`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetChangelogTableName()),\n\t)\n\t_, err := sqlutils.ExecNoPrepare(this.db, query, explicitId, hint, value)\n\treturn hint, err\n}\n\nfunc (this *Applier) WriteAndLogChangelog(hint, value string) (string, error) {\n\tthis.WriteChangelog(hint, value)\n\treturn this.WriteChangelog(fmt.Sprintf(\"%s at %d\", hint, time.Now().UnixNano()), value)\n}\n\nfunc (this *Applier) WriteChangelogState(value string) (string, error) {\n\treturn this.WriteAndLogChangelog(\"state\", value)\n}\n\n// WriteCheckpoints writes a checkpoint to the _ghk table.\nfunc (this *Applier) WriteCheckpoint(chk *Checkpoint) (int64, error) {\n\tvar insertId int64\n\tuniqueKeyArgs := sqlutils.Args(chk.IterationRangeMin.AbstractValues()...)\n\tuniqueKeyArgs = append(uniqueKeyArgs, chk.IterationRangeMax.AbstractValues()...)\n\tquery, uniqueKeyArgs, err := this.checkpointInsertQueryBuilder.BuildQuery(uniqueKeyArgs)\n\tif err != nil {\n\t\treturn insertId, err\n\t}\n\targs := sqlutils.Args(chk.LastTrxCoords.String(), chk.Iteration, chk.RowsCopied, chk.DMLApplied, chk.IsCutover)\n\targs = append(args, uniqueKeyArgs...)\n\tres, err := this.db.Exec(query, args...)\n\tif err != nil {\n\t\treturn insertId, err\n\t}\n\treturn res.LastInsertId()\n}\n\nfunc (this *Applier) ReadLastCheckpoint() (*Checkpoint, error) {\n\trow := this.db.QueryRow(fmt.Sprintf(`select /* gh-ost */ * from %s.%s order by gh_ost_chk_id desc limit 1`, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.GetCheckpointTableName())))\n\tchk := &Checkpoint{\n\t\tIterationRangeMin: sql.NewColumnValues(this.migrationContext.UniqueKey.Columns.Len()),\n\t\tIterationRangeMax: sql.NewColumnValues(this.migrationContext.UniqueKey.Columns.Len()),\n\t}\n\n\tvar coordStr string\n\tvar timestamp int64\n\tptrs := []interface{}{&chk.Id, &timestamp, &coordStr, &chk.Iteration, &chk.RowsCopied, &chk.DMLApplied, &chk.IsCutover}\n\tptrs = append(ptrs, chk.IterationRangeMin.ValuesPointers...)\n\tptrs = append(ptrs, chk.IterationRangeMax.ValuesPointers...)\n\terr := row.Scan(ptrs...)\n\tif err != nil {\n\t\tif errors.Is(err, gosql.ErrNoRows) {\n\t\t\treturn nil, ErrNoCheckpointFound\n\t\t}\n\t\treturn nil, err\n\t}\n\tchk.Timestamp = time.Unix(timestamp, 0)\n\tif this.migrationContext.UseGTIDs {\n\t\tgtidCoords, err := mysql.NewGTIDBinlogCoordinates(coordStr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tchk.LastTrxCoords = gtidCoords\n\t} else {\n\t\tfileCoords, err := mysql.ParseFileBinlogCoordinates(coordStr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tchk.LastTrxCoords = fileCoords\n\t}\n\treturn chk, nil\n}\n\n// InitiateHeartbeat creates a heartbeat cycle, writing to the changelog table.\n// This is done asynchronously\nfunc (this *Applier) InitiateHeartbeat() {\n\tvar numSuccessiveFailures int64\n\tinjectHeartbeat := func() error {\n\t\tif atomic.LoadInt64(&this.migrationContext.HibernateUntil) > 0 {\n\t\t\treturn nil\n\t\t}\n\t\tif _, err := this.WriteChangelog(\"heartbeat\", time.Now().Format(time.RFC3339Nano)); err != nil {\n\t\t\tnumSuccessiveFailures++\n\t\t\tif numSuccessiveFailures > this.migrationContext.MaxRetries() {\n\t\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t\t}\n\t\t} else {\n\t\t\tnumSuccessiveFailures = 0\n\t\t}\n\t\treturn nil\n\t}\n\tinjectHeartbeat()\n\n\tticker := time.NewTicker(time.Duration(this.migrationContext.HeartbeatIntervalMilliseconds) * time.Millisecond)\n\tdefer ticker.Stop()\n\tfor {\n\t\t// Check for context cancellation each iteration\n\t\tctx := this.migrationContext.GetContext()\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\tthis.migrationContext.Log.Debugf(\"Heartbeat injection cancelled\")\n\t\t\treturn\n\t\tcase <-ticker.C:\n\t\t\t// Process heartbeat\n\t\t}\n\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn\n\t\t}\n\t\t// Generally speaking, we would issue a goroutine, but I'd actually rather\n\t\t// have this block the loop rather than spam the master in the event something\n\t\t// goes wrong\n\t\tif throttle, _, reasonHint := this.migrationContext.IsThrottled(); throttle && (reasonHint == base.UserCommandThrottleReasonHint) {\n\t\t\tcontinue\n\t\t}\n\t\tif err := injectHeartbeat(); err != nil {\n\t\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, fmt.Errorf(\"injectHeartbeat writing failed %d times, last error: %w\", numSuccessiveFailures, err))\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// ExecuteThrottleQuery executes the `--throttle-query` and returns its results.\nfunc (this *Applier) ExecuteThrottleQuery() (int64, error) {\n\tthrottleQuery := this.migrationContext.GetThrottleQuery()\n\n\tif throttleQuery == \"\" {\n\t\treturn 0, nil\n\t}\n\tvar result int64\n\tif err := this.db.QueryRow(throttleQuery).Scan(&result); err != nil {\n\t\treturn 0, this.migrationContext.Log.Errore(err)\n\t}\n\treturn result, nil\n}\n\n// readMigrationMinValues returns the minimum values to be iterated on rowcopy\nfunc (this *Applier) readMigrationMinValues(tx *gosql.Tx, uniqueKey *sql.UniqueKey) error {\n\tthis.migrationContext.Log.Debugf(\"Reading migration range according to key: %s\", uniqueKey.Name)\n\tquery, err := sql.BuildUniqueKeyMinValuesPreparedQuery(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, uniqueKey)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trows, err := tx.Query(query)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer rows.Close()\n\n\tfor rows.Next() {\n\t\tthis.migrationContext.MigrationRangeMinValues = sql.NewColumnValues(uniqueKey.Len())\n\t\tif err = rows.Scan(this.migrationContext.MigrationRangeMinValues.ValuesPointers...); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tthis.migrationContext.Log.Infof(\"Migration min values: [%s]\", this.migrationContext.MigrationRangeMinValues)\n\n\treturn rows.Err()\n}\n\n// readMigrationMaxValues returns the maximum values to be iterated on rowcopy\nfunc (this *Applier) readMigrationMaxValues(tx *gosql.Tx, uniqueKey *sql.UniqueKey) error {\n\tthis.migrationContext.Log.Debugf(\"Reading migration range according to key: %s\", uniqueKey.Name)\n\tquery, err := sql.BuildUniqueKeyMaxValuesPreparedQuery(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, uniqueKey)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trows, err := tx.Query(query)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer rows.Close()\n\n\tfor rows.Next() {\n\t\tthis.migrationContext.MigrationRangeMaxValues = sql.NewColumnValues(uniqueKey.Len())\n\t\tif err = rows.Scan(this.migrationContext.MigrationRangeMaxValues.ValuesPointers...); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tthis.migrationContext.Log.Infof(\"Migration max values: [%s]\", this.migrationContext.MigrationRangeMaxValues)\n\n\treturn rows.Err()\n}\n\n// ReadMigrationRangeValues reads min/max values that will be used for rowcopy.\n// Before read min/max, write a changelog state into the ghc table to avoid lost data in mysql two-phase commit.\n/*\nDetail description of the lost data in mysql two-phase commit issue by @Fanduzi:\n\tWhen using semi-sync and setting rpl_semi_sync_master_wait_point=AFTER_SYNC,\n\tif an INSERT statement is being committed but blocks due to an unmet ack count,\n\tthe data inserted by the transaction is not visible to ReadMigrationRangeValues,\n\tso the copy of the existing data in the table does not include the new row inserted by the transaction.\n\tHowever, the binlog event for the transaction is already written to the binlog,\n\tso the addDMLEventsListener only captures the binlog event after the transaction,\n\tand thus the transaction's binlog event is not captured, resulting in data loss.\n\n\tIf write a changelog into ghc table before ReadMigrationRangeValues, and the transaction commit blocks\n\tbecause the ack is not met, then the changelog will not be able to write, so the ReadMigrationRangeValues\n\twill not be run. When the changelog writes successfully, the ReadMigrationRangeValues will read the\n\tnewly inserted data, thus Avoiding data loss due to the above problem.\n*/\nfunc (this *Applier) ReadMigrationRangeValues() error {\n\tif _, err := this.WriteChangelogState(string(ReadMigrationRangeValues)); err != nil {\n\t\treturn err\n\t}\n\n\ttx, err := this.db.Begin()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer tx.Rollback()\n\n\tif err := this.readMigrationMinValues(tx, this.migrationContext.UniqueKey); err != nil {\n\t\treturn err\n\t}\n\tif err := this.readMigrationMaxValues(tx, this.migrationContext.UniqueKey); err != nil {\n\t\treturn err\n\t}\n\n\treturn tx.Commit()\n}\n\n// CalculateNextIterationRangeEndValues reads the next-iteration-range-end unique key values,\n// which will be used for copying the next chunk of rows. Ir returns \"false\" if there is\n// no further chunk to work through, i.e. we're past the last chunk and are done with\n// iterating the range (and thus done with copying row chunks)\nfunc (this *Applier) CalculateNextIterationRangeEndValues() (hasFurtherRange bool, err error) {\n\tfor i := 0; i < 2; i++ {\n\t\tbuildFunc := sql.BuildUniqueKeyRangeEndPreparedQueryViaOffset\n\t\tif i == 1 {\n\t\t\tbuildFunc = sql.BuildUniqueKeyRangeEndPreparedQueryViaTemptable\n\t\t}\n\t\tquery, explodedArgs, err := buildFunc(\n\t\t\tthis.migrationContext.DatabaseName,\n\t\t\tthis.migrationContext.OriginalTableName,\n\t\t\t&this.migrationContext.UniqueKey.Columns,\n\t\t\tthis.migrationContext.MigrationIterationRangeMinValues.AbstractValues(),\n\t\t\tthis.migrationContext.MigrationRangeMaxValues.AbstractValues(),\n\t\t\tatomic.LoadInt64(&this.migrationContext.ChunkSize),\n\t\t\tthis.migrationContext.GetIteration() == 0,\n\t\t\tfmt.Sprintf(\"iteration:%d\", this.migrationContext.GetIteration()),\n\t\t)\n\t\tif err != nil {\n\t\t\treturn hasFurtherRange, err\n\t\t}\n\n\t\trows, err := this.db.Query(query, explodedArgs...)\n\t\tif err != nil {\n\t\t\treturn hasFurtherRange, err\n\t\t}\n\t\tdefer rows.Close()\n\n\t\titerationRangeMaxValues := sql.NewColumnValues(this.migrationContext.UniqueKey.Len())\n\t\tfor rows.Next() {\n\t\t\tif err = rows.Scan(iterationRangeMaxValues.ValuesPointers...); err != nil {\n\t\t\t\treturn hasFurtherRange, err\n\t\t\t}\n\t\t\thasFurtherRange = true\n\t\t}\n\t\tif err = rows.Err(); err != nil {\n\t\t\treturn hasFurtherRange, err\n\t\t}\n\t\tif hasFurtherRange {\n\t\t\tthis.migrationContext.MigrationIterationRangeMaxValues = iterationRangeMaxValues\n\t\t\treturn hasFurtherRange, nil\n\t\t}\n\t}\n\tthis.migrationContext.Log.Debugf(\"Iteration complete: no further range to iterate\")\n\treturn hasFurtherRange, nil\n}\n\n// ApplyIterationInsertQuery issues a chunk-INSERT query on the ghost table. It is where\n// data actually gets copied from original table.\nfunc (this *Applier) ApplyIterationInsertQuery() (chunkSize int64, rowsAffected int64, duration time.Duration, err error) {\n\tstartTime := time.Now()\n\tchunkSize = atomic.LoadInt64(&this.migrationContext.ChunkSize)\n\n\tquery, explodedArgs, err := sql.BuildRangeInsertPreparedQuery(\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.OriginalTableName,\n\t\tthis.migrationContext.GetGhostTableName(),\n\t\tthis.migrationContext.SharedColumns.Names(),\n\t\tthis.migrationContext.MappedSharedColumns.Names(),\n\t\tthis.migrationContext.UniqueKey.Name,\n\t\t&this.migrationContext.UniqueKey.Columns,\n\t\tthis.migrationContext.MigrationIterationRangeMinValues.AbstractValues(),\n\t\tthis.migrationContext.MigrationIterationRangeMaxValues.AbstractValues(),\n\t\tthis.migrationContext.GetIteration() == 0,\n\t\tthis.migrationContext.IsTransactionalTable(),\n\t\t// TODO: Don't hardcode this\n\t\tstrings.HasPrefix(this.migrationContext.ApplierMySQLVersion, \"8.\"),\n\t)\n\tif err != nil {\n\t\treturn chunkSize, rowsAffected, duration, err\n\t}\n\n\tsqlResult, err := func() (gosql.Result, error) {\n\t\ttx, err := this.db.Begin()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer tx.Rollback()\n\n\t\tsessionQuery := fmt.Sprintf(`SET SESSION time_zone = '%s'`, this.migrationContext.ApplierTimeZone)\n\t\tsessionQuery = fmt.Sprintf(\"%s, %s\", sessionQuery, this.generateSqlModeQuery())\n\n\t\tif _, err := tx.Exec(sessionQuery); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresult, err := tx.Exec(query, explodedArgs...)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif this.migrationContext.PanicOnWarnings {\n\t\t\t//nolint:execinquery\n\t\t\trows, err := tx.Query(\"SHOW WARNINGS\")\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tdefer rows.Close()\n\t\t\tif err = rows.Err(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// Compile regex once before loop to avoid performance penalty and handle errors properly\n\t\t\tmigrationKeyRegex, err := this.compileMigrationKeyWarningRegex()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tvar sqlWarnings []string\n\t\t\tfor rows.Next() {\n\t\t\t\tvar level, message string\n\t\t\t\tvar code int\n\t\t\t\tif err := rows.Scan(&level, &code, &message); err != nil {\n\t\t\t\t\tthis.migrationContext.Log.Warningf(\"Failed to read SHOW WARNINGS row\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif strings.Contains(message, \"Duplicate entry\") && migrationKeyRegex.MatchString(message) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsqlWarnings = append(sqlWarnings, fmt.Sprintf(\"%s: %s (%d)\", level, message, code))\n\t\t\t}\n\t\t\tthis.migrationContext.MigrationLastInsertSQLWarnings = sqlWarnings\n\t\t}\n\n\t\tif err := tx.Commit(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn result, nil\n\t}()\n\n\tif err != nil {\n\t\treturn chunkSize, rowsAffected, duration, err\n\t}\n\trowsAffected, _ = sqlResult.RowsAffected()\n\tduration = time.Since(startTime)\n\tthis.migrationContext.Log.Debugf(\n\t\t\"Issued INSERT on range: [%s]..[%s]; iteration: %d; chunk-size: %d\",\n\t\tthis.migrationContext.MigrationIterationRangeMinValues,\n\t\tthis.migrationContext.MigrationIterationRangeMaxValues,\n\t\tthis.migrationContext.GetIteration(),\n\t\tchunkSize)\n\treturn chunkSize, rowsAffected, duration, nil\n}\n\n// LockOriginalTable places a write lock on the original table\nfunc (this *Applier) LockOriginalTable() error {\n\tquery := fmt.Sprintf(`lock /* gh-ost */ tables %s.%s write`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t)\n\tthis.migrationContext.Log.Infof(\"Locking %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t)\n\tthis.migrationContext.LockTablesStartTime = time.Now()\n\tif _, err := sqlutils.ExecNoPrepare(this.singletonDB, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Table locked\")\n\treturn nil\n}\n\n// UnlockTables makes tea. No wait, it unlocks tables.\nfunc (this *Applier) UnlockTables() error {\n\tquery := `unlock /* gh-ost */ tables`\n\tthis.migrationContext.Log.Infof(\"Unlocking tables\")\n\tif _, err := sqlutils.ExecNoPrepare(this.singletonDB, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Tables unlocked\")\n\treturn nil\n}\n\n// SwapTablesQuickAndBumpy issues a two-step swap table operation:\n// - rename original table to _old\n// - rename ghost table to original\n// There is a point in time in between where the table does not exist.\nfunc (this *Applier) SwapTablesQuickAndBumpy() error {\n\tquery := fmt.Sprintf(`alter /* gh-ost */ table %s.%s rename %s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t)\n\tthis.migrationContext.Log.Infof(\"Renaming original table\")\n\tthis.migrationContext.RenameTablesStartTime = time.Now()\n\tif _, err := sqlutils.ExecNoPrepare(this.singletonDB, query); err != nil {\n\t\treturn err\n\t}\n\tquery = fmt.Sprintf(`alter /* gh-ost */ table %s.%s rename %s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t)\n\tthis.migrationContext.Log.Infof(\"Renaming ghost table\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.RenameTablesEndTime = time.Now()\n\n\tthis.migrationContext.Log.Infof(\"Tables renamed\")\n\treturn nil\n}\n\n// RenameTablesRollback renames back both table: original back to ghost,\n// _old back to original. This is used by `--test-on-replica`\nfunc (this *Applier) RenameTablesRollback() (renameError error) {\n\t// Restoring tables to original names.\n\t// We prefer the single, atomic operation:\n\tquery := fmt.Sprintf(`rename /* gh-ost */ table %s.%s to %s.%s, %s.%s to %s.%s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t)\n\tthis.migrationContext.Log.Infof(\"Renaming back both tables\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err == nil {\n\t\treturn nil\n\t}\n\t// But, if for some reason the above was impossible to do, we rename one by one.\n\tquery = fmt.Sprintf(`rename /* gh-ost */ table %s.%s to %s.%s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t)\n\tthis.migrationContext.Log.Infof(\"Renaming back to ghost table\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\trenameError = err\n\t}\n\tquery = fmt.Sprintf(`rename /* gh-ost */ table %s.%s to %s.%s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t)\n\tthis.migrationContext.Log.Infof(\"Renaming back to original table\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\trenameError = err\n\t}\n\treturn this.migrationContext.Log.Errore(renameError)\n}\n\n// StopSlaveIOThread is applicable with --test-on-replica; it stops the IO thread, duh.\n// We need to keep the SQL thread active so as to complete processing received events,\n// and have them written to the binary log, so that we can then read them via streamer.\nfunc (this *Applier) StopSlaveIOThread() error {\n\treplicaTerm := mysql.ReplicaTermFor(this.migrationContext.ApplierMySQLVersion, `slave`)\n\tquery := fmt.Sprintf(\"stop /* gh-ost */ %s io_thread\", replicaTerm)\n\tthis.migrationContext.Log.Infof(\"Stopping replication IO thread\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Replication IO thread stopped\")\n\treturn nil\n}\n\n// StartSlaveIOThread is applicable with --test-on-replica\nfunc (this *Applier) StartSlaveIOThread() error {\n\treplicaTerm := mysql.ReplicaTermFor(this.migrationContext.ApplierMySQLVersion, `slave`)\n\tquery := fmt.Sprintf(\"start /* gh-ost */ %s io_thread\", replicaTerm)\n\tthis.migrationContext.Log.Infof(\"Starting replication IO thread\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Replication IO thread started\")\n\treturn nil\n}\n\n// StopSlaveSQLThread is applicable with --test-on-replica\nfunc (this *Applier) StopSlaveSQLThread() error {\n\treplicaTerm := mysql.ReplicaTermFor(this.migrationContext.ApplierMySQLVersion, `slave`)\n\tquery := fmt.Sprintf(\"stop /* gh-ost */ %s sql_thread\", replicaTerm)\n\tthis.migrationContext.Log.Infof(\"Verifying SQL thread is stopped\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"SQL thread stopped\")\n\treturn nil\n}\n\n// StartSlaveSQLThread is applicable with --test-on-replica\nfunc (this *Applier) StartSlaveSQLThread() error {\n\treplicaTerm := mysql.ReplicaTermFor(this.migrationContext.ApplierMySQLVersion, `slave`)\n\tquery := fmt.Sprintf(\"start /* gh-ost */ %s sql_thread\", replicaTerm)\n\tthis.migrationContext.Log.Infof(\"Verifying SQL thread is running\")\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"SQL thread started\")\n\treturn nil\n}\n\n// StopReplication is used by `--test-on-replica` and stops replication.\nfunc (this *Applier) StopReplication() error {\n\tif err := this.StopSlaveIOThread(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.StopSlaveSQLThread(); err != nil {\n\t\treturn err\n\t}\n\n\treadBinlogCoordinates, executeBinlogCoordinates, err := mysql.GetReplicationBinlogCoordinates(this.migrationContext.ApplierMySQLVersion, this.db, this.migrationContext.UseGTIDs)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Replication IO thread at %+v. SQL thread is at %+v\", readBinlogCoordinates, executeBinlogCoordinates)\n\treturn nil\n}\n\n// StartReplication is used by `--test-on-replica` on cut-over failure\nfunc (this *Applier) StartReplication() error {\n\tif err := this.StartSlaveIOThread(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.StartSlaveSQLThread(); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Replication started\")\n\treturn nil\n}\n\n// GetSessionLockName returns a name for the special hint session voluntary lock\nfunc (this *Applier) GetSessionLockName(sessionId int64) string {\n\treturn fmt.Sprintf(\"gh-ost.%d.lock\", sessionId)\n}\n\n// ExpectUsedLock expects the special hint voluntary lock to exist on given session\nfunc (this *Applier) ExpectUsedLock(sessionId int64) error {\n\tvar result int64\n\tquery := `select /* gh-ost */ is_used_lock(?)`\n\tlockName := this.GetSessionLockName(sessionId)\n\tthis.migrationContext.Log.Infof(\"Checking session lock: %s\", lockName)\n\tif err := this.db.QueryRow(query, lockName).Scan(&result); err != nil || result != sessionId {\n\t\treturn fmt.Errorf(\"Session lock %s expected to be found but wasn't\", lockName)\n\t}\n\treturn nil\n}\n\n// ExpectProcess expects a process to show up in `SHOW PROCESSLIST` that has given characteristics\nfunc (this *Applier) ExpectProcess(sessionId int64, stateHint, infoHint string) error {\n\tfound := false\n\tquery := `\n\t\tselect /* gh-ost */ id\n\t\tfrom\n\t\t\tinformation_schema.processlist\n\t\twhere\n\t\t\tid != connection_id()\n\t\t\tand ? in (0, id)\n\t\t\tand state like concat('%', ?, '%')\n\t\t\tand info like concat('%', ?, '%')`\n\terr := sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tfound = true\n\t\treturn nil\n\t}, sessionId, stateHint, infoHint)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !found {\n\t\treturn fmt.Errorf(\"Cannot find process. Hints: %s, %s\", stateHint, infoHint)\n\t}\n\treturn nil\n}\n\n// DropAtomicCutOverSentryTableIfExists checks if the \"old\" table name\n// happens to be a cut-over magic table; if so, it drops it.\nfunc (this *Applier) DropAtomicCutOverSentryTableIfExists() error {\n\tthis.migrationContext.Log.Infof(\"Looking for magic cut-over table\")\n\ttableName := this.migrationContext.GetOldTableName()\n\trowMap := this.showTableStatus(tableName)\n\tif rowMap == nil {\n\t\t// Table does not exist\n\t\treturn nil\n\t}\n\tif rowMap[\"Comment\"].String != atomicCutOverMagicHint {\n\t\treturn fmt.Errorf(\"Expected magic comment on %s, did not find it\", tableName)\n\t}\n\tthis.migrationContext.Log.Infof(\"Dropping magic cut-over table\")\n\treturn this.dropTable(tableName)\n}\n\n// CreateAtomicCutOverSentryTable\nfunc (this *Applier) CreateAtomicCutOverSentryTable() error {\n\tif err := this.DropAtomicCutOverSentryTableIfExists(); err != nil {\n\t\treturn err\n\t}\n\ttableName := this.migrationContext.GetOldTableName()\n\n\tquery := fmt.Sprintf(`\n\t\tcreate /* gh-ost */ table %s.%s (\n\t\t\tid int auto_increment primary key\n\t\t) engine=%s comment='%s'`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(tableName),\n\t\tthis.migrationContext.TableEngine,\n\t\tatomicCutOverMagicHint,\n\t)\n\tthis.migrationContext.Log.Infof(\"Creating magic cut-over table %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(tableName),\n\t)\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Magic cut-over table created\")\n\n\treturn nil\n}\n\n// InitAtomicCutOverWaitTimeout sets the cut-over session wait_timeout in order to reduce the\n// time an unresponsive (but still connected) gh-ost process can hold the cut-over lock.\nfunc (this *Applier) InitAtomicCutOverWaitTimeout(tx *gosql.Tx) error {\n\tcutOverWaitTimeoutSeconds := this.migrationContext.CutOverLockTimeoutSeconds * 3\n\tthis.migrationContext.Log.Infof(\"Setting cut-over idle timeout as %d seconds\", cutOverWaitTimeoutSeconds)\n\tquery := fmt.Sprintf(`set /* gh-ost */ session wait_timeout:=%d`, cutOverWaitTimeoutSeconds)\n\t_, err := tx.Exec(query)\n\treturn err\n}\n\n// RevertAtomicCutOverWaitTimeout restores the original wait_timeout for the applier session post-cut-over.\nfunc (this *Applier) RevertAtomicCutOverWaitTimeout() {\n\tthis.migrationContext.Log.Infof(\"Reverting cut-over idle timeout to %d seconds\", this.migrationContext.ApplierWaitTimeout)\n\tquery := fmt.Sprintf(`set /* gh-ost */ session wait_timeout:=%d`, this.migrationContext.ApplierWaitTimeout)\n\tif _, err := sqlutils.ExecNoPrepare(this.db, query); err != nil {\n\t\tthis.migrationContext.Log.Errorf(\"Failed to restore applier wait_timeout to %d seconds: %v\",\n\t\t\tthis.migrationContext.ApplierWaitTimeout, err,\n\t\t)\n\t}\n}\n\n// AtomicCutOverMagicLock\nfunc (this *Applier) AtomicCutOverMagicLock(sessionIdChan chan int64, tableLocked chan<- error, okToUnlockTable <-chan bool, tableUnlocked chan<- error, renameLockSessionId *int64) error {\n\ttx, err := this.db.Begin()\n\tif err != nil {\n\t\ttableLocked <- err\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tsessionIdChan <- -1\n\t\ttableLocked <- fmt.Errorf(\"Unexpected error in AtomicCutOverMagicLock(), injected to release blocking channel reads\")\n\t\ttableUnlocked <- fmt.Errorf(\"Unexpected error in AtomicCutOverMagicLock(), injected to release blocking channel reads\")\n\t\ttx.Rollback()\n\t\tthis.DropAtomicCutOverSentryTableIfExists()\n\t}()\n\n\tvar sessionId int64\n\tif err := tx.QueryRow(`select /* gh-ost */ connection_id()`).Scan(&sessionId); err != nil {\n\t\ttableLocked <- err\n\t\treturn err\n\t}\n\tsessionIdChan <- sessionId\n\n\tlockResult := 0\n\tquery := `select /* gh-ost */ get_lock(?, 0)`\n\tlockName := this.GetSessionLockName(sessionId)\n\tthis.migrationContext.Log.Infof(\"Grabbing voluntary lock: %s\", lockName)\n\tif err := tx.QueryRow(query, lockName).Scan(&lockResult); err != nil || lockResult != 1 {\n\t\terr := fmt.Errorf(\"Unable to acquire lock %s\", lockName)\n\t\ttableLocked <- err\n\t\treturn err\n\t}\n\n\ttableLockTimeoutSeconds := this.migrationContext.CutOverLockTimeoutSeconds * 2\n\tthis.migrationContext.Log.Infof(\"Setting LOCK timeout as %d seconds\", tableLockTimeoutSeconds)\n\tquery = fmt.Sprintf(`set /* gh-ost */ session lock_wait_timeout:=%d`, tableLockTimeoutSeconds)\n\tif _, err := tx.Exec(query); err != nil {\n\t\ttableLocked <- err\n\t\treturn err\n\t}\n\n\tif err := this.CreateAtomicCutOverSentryTable(); err != nil {\n\t\ttableLocked <- err\n\t\treturn err\n\t}\n\n\tif err := this.InitAtomicCutOverWaitTimeout(tx); err != nil {\n\t\ttableLocked <- err\n\t\treturn err\n\t}\n\tdefer this.RevertAtomicCutOverWaitTimeout()\n\n\tquery = fmt.Sprintf(`lock /* gh-ost */ tables %s.%s write, %s.%s write`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t)\n\tthis.migrationContext.Log.Infof(\"Locking %s.%s, %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t)\n\tthis.migrationContext.LockTablesStartTime = time.Now()\n\tif _, err := tx.Exec(query); err != nil {\n\t\ttableLocked <- err\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Tables locked\")\n\ttableLocked <- nil // No error.\n\n\t// From this point on, we are committed to UNLOCK TABLES. No matter what happens,\n\t// the UNLOCK must execute (or, alternatively, this connection dies, which gets the same impact)\n\n\t// The cut-over phase will proceed to apply remaining backlog onto ghost table,\n\t// and issue RENAME. We wait here until told to proceed.\n\t<-okToUnlockTable\n\tthis.migrationContext.Log.Infof(\"Will now proceed to drop magic table and unlock tables\")\n\n\t// The magic table is here because we locked it. And we are the only ones allowed to drop it.\n\t// And in fact, we will:\n\tthis.migrationContext.Log.Infof(\"Dropping magic cut-over table\")\n\tquery = fmt.Sprintf(`drop /* gh-ost */ table if exists %s.%s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t)\n\n\tif _, err := tx.Exec(query); err != nil {\n\t\tthis.migrationContext.Log.Errore(err)\n\t\t// We DO NOT return here because we must `UNLOCK TABLES`!\n\t}\n\n\tthis.migrationContext.Log.Infof(\"Session renameLockSessionId is %+v\", *renameLockSessionId)\n\t// Checking the lock is held by rename session\n\tif *renameLockSessionId > 0 && this.migrationContext.IsOpenMetadataLockInstruments && !this.migrationContext.SkipMetadataLockCheck {\n\t\tsleepDuration := time.Duration(10*this.migrationContext.CutOverLockTimeoutSeconds) * time.Millisecond\n\t\tfor i := 1; i <= 100; i++ {\n\t\t\terr := this.ExpectMetadataLock(*renameLockSessionId)\n\t\t\tif err == nil {\n\t\t\t\tthis.migrationContext.Log.Infof(\"Rename session is pending lock on the origin table !\")\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\ttime.Sleep(sleepDuration)\n\t\t\t}\n\t\t}\n\t}\n\t// Tables still locked\n\tthis.migrationContext.Log.Infof(\"Releasing lock from %s.%s, %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t)\n\tquery = `unlock /* gh-ost */ tables`\n\tif _, err := tx.Exec(query); err != nil {\n\t\ttableUnlocked <- err\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\tthis.migrationContext.Log.Infof(\"Tables unlocked\")\n\ttableUnlocked <- nil\n\treturn nil\n}\n\n// AtomicCutoverRename\nfunc (this *Applier) AtomicCutoverRename(sessionIdChan chan int64, tablesRenamed chan<- error) error {\n\ttx, err := this.db.Begin()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\ttx.Rollback()\n\t\tsessionIdChan <- -1\n\t\ttablesRenamed <- fmt.Errorf(\"Unexpected error in AtomicCutoverRename(), injected to release blocking channel reads\")\n\t}()\n\tvar sessionId int64\n\tif err := tx.QueryRow(`select /* gh-ost */ connection_id()`).Scan(&sessionId); err != nil {\n\t\treturn err\n\t}\n\tsessionIdChan <- sessionId\n\n\tthis.migrationContext.Log.Infof(\"Setting RENAME timeout as %d seconds\", this.migrationContext.CutOverLockTimeoutSeconds)\n\tquery := fmt.Sprintf(`set /* gh-ost */ session lock_wait_timeout:=%d`, this.migrationContext.CutOverLockTimeoutSeconds)\n\tif _, err := tx.Exec(query); err != nil {\n\t\treturn err\n\t}\n\n\tquery = fmt.Sprintf(`rename /* gh-ost */ table %s.%s to %s.%s, %s.%s to %s.%s`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetOldTableName()),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t)\n\tthis.migrationContext.Log.Infof(\"Issuing and expecting this to block: %s\", query)\n\tif _, err := tx.Exec(query); err != nil {\n\t\ttablesRenamed <- err\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\ttablesRenamed <- nil\n\tthis.migrationContext.Log.Infof(\"Tables renamed\")\n\treturn nil\n}\n\nfunc (this *Applier) ShowStatusVariable(variableName string) (result int64, err error) {\n\tquery := fmt.Sprintf(`show /* gh-ost */ global status like '%s'`, variableName)\n\tif err := this.db.QueryRow(query).Scan(&variableName, &result); err != nil {\n\t\treturn 0, err\n\t}\n\treturn result, nil\n}\n\n// updateModifiesUniqueKeyColumns checks whether a UPDATE DML event actually\n// modifies values of the migration's unique key (the iterated key). This will call\n// for special handling.\nfunc (this *Applier) updateModifiesUniqueKeyColumns(dmlEvent *binlog.BinlogDMLEvent) (modifiedColumn string, isModified bool) {\n\tfor _, column := range this.migrationContext.UniqueKey.Columns.Columns() {\n\t\ttableOrdinal := this.migrationContext.OriginalTableColumns.Ordinals[column.Name]\n\t\twhereColumnValue := dmlEvent.WhereColumnValues.AbstractValues()[tableOrdinal]\n\t\tnewColumnValue := dmlEvent.NewColumnValues.AbstractValues()[tableOrdinal]\n\n\t\tif !reflect.DeepEqual(whereColumnValue, newColumnValue) {\n\t\t\treturn column.Name, true\n\t\t}\n\t}\n\treturn \"\", false\n}\n\n// buildDMLEventQuery creates a query to operate on the ghost table, based on an intercepted binlog\n// event entry on the original table.\nfunc (this *Applier) buildDMLEventQuery(dmlEvent *binlog.BinlogDMLEvent) []*dmlBuildResult {\n\tswitch dmlEvent.DML {\n\tcase binlog.DeleteDML:\n\t\t{\n\t\t\tquery, uniqueKeyArgs, err := this.dmlDeleteQueryBuilder.BuildQuery(dmlEvent.WhereColumnValues.AbstractValues())\n\t\t\treturn []*dmlBuildResult{newDmlBuildResult(query, uniqueKeyArgs, -1, err)}\n\t\t}\n\tcase binlog.InsertDML:\n\t\t{\n\t\t\tquery, sharedArgs, err := this.dmlInsertQueryBuilder.BuildQuery(dmlEvent.NewColumnValues.AbstractValues())\n\t\t\treturn []*dmlBuildResult{newDmlBuildResult(query, sharedArgs, 1, err)}\n\t\t}\n\tcase binlog.UpdateDML:\n\t\t{\n\t\t\tif _, isModified := this.updateModifiesUniqueKeyColumns(dmlEvent); isModified {\n\t\t\t\tresults := make([]*dmlBuildResult, 0, 2)\n\t\t\t\tdmlEvent.DML = binlog.DeleteDML\n\t\t\t\tresults = append(results, this.buildDMLEventQuery(dmlEvent)...)\n\t\t\t\tdmlEvent.DML = binlog.InsertDML\n\t\t\t\tresults = append(results, this.buildDMLEventQuery(dmlEvent)...)\n\t\t\t\treturn results\n\t\t\t}\n\t\t\tquery, updateArgs, err := this.dmlUpdateQueryBuilder.BuildQuery(dmlEvent.NewColumnValues.AbstractValues(), dmlEvent.WhereColumnValues.AbstractValues())\n\t\t\targs := sqlutils.Args()\n\t\t\targs = append(args, updateArgs...)\n\t\t\treturn []*dmlBuildResult{newDmlBuildResult(query, args, 0, err)}\n\t\t}\n\t}\n\treturn []*dmlBuildResult{newDmlBuildResultError(fmt.Errorf(\"Unknown dml event type: %+v\", dmlEvent.DML))}\n}\n\n// ApplyDMLEventQueries applies multiple DML queries onto the _ghost_ table\nfunc (this *Applier) ApplyDMLEventQueries(dmlEvents [](*binlog.BinlogDMLEvent)) error {\n\tvar totalDelta int64\n\tctx := context.Background()\n\n\terr := func() error {\n\t\tconn, err := this.db.Conn(ctx)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer conn.Close()\n\n\t\tsessionQuery := \"SET /* gh-ost */ SESSION time_zone = '+00:00'\"\n\t\tsessionQuery = fmt.Sprintf(\"%s, %s\", sessionQuery, this.generateSqlModeQuery())\n\t\tif _, err := conn.ExecContext(ctx, sessionQuery); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ttx, err := conn.BeginTx(ctx, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trollback := func(err error) error {\n\t\t\ttx.Rollback()\n\t\t\treturn err\n\t\t}\n\n\t\tbuildResults := make([]*dmlBuildResult, 0, len(dmlEvents))\n\t\tnArgs := 0\n\t\tfor _, dmlEvent := range dmlEvents {\n\t\t\tfor _, buildResult := range this.buildDMLEventQuery(dmlEvent) {\n\t\t\t\tif buildResult.err != nil {\n\t\t\t\t\treturn rollback(buildResult.err)\n\t\t\t\t}\n\t\t\t\tnArgs += len(buildResult.args)\n\t\t\t\tbuildResults = append(buildResults, buildResult)\n\t\t\t}\n\t\t}\n\n\t\t// We batch together the DML queries into multi-statements to minimize network trips.\n\t\t// We have to use the raw driver connection to access the rows affected\n\t\t// for each statement in the multi-statement.\n\t\texecErr := conn.Raw(func(driverConn any) error {\n\t\t\tex := driverConn.(driver.ExecerContext)\n\t\t\tnvc := driverConn.(driver.NamedValueChecker)\n\n\t\t\tmultiArgs := make([]driver.NamedValue, 0, nArgs)\n\t\t\tmultiQueryBuilder := strings.Builder{}\n\t\t\tfor _, buildResult := range buildResults {\n\t\t\t\tfor _, arg := range buildResult.args {\n\t\t\t\t\tnv := driver.NamedValue{Value: driver.Value(arg)}\n\t\t\t\t\tnvc.CheckNamedValue(&nv)\n\t\t\t\t\tmultiArgs = append(multiArgs, nv)\n\t\t\t\t}\n\n\t\t\t\tmultiQueryBuilder.WriteString(buildResult.query)\n\t\t\t\tmultiQueryBuilder.WriteString(\";\\n\")\n\t\t\t}\n\n\t\t\tres, err := ex.ExecContext(ctx, multiQueryBuilder.String(), multiArgs)\n\t\t\tif err != nil {\n\t\t\t\terr = fmt.Errorf(\"%w; query=%s; args=%+v\", err, multiQueryBuilder.String(), multiArgs)\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tmysqlRes := res.(drivermysql.Result)\n\n\t\t\t// each DML is either a single insert (delta +1), update (delta +0) or delete (delta -1).\n\t\t\t// multiplying by the rows actually affected (either 0 or 1) will give an accurate row delta for this DML event\n\t\t\tfor i, rowsAffected := range mysqlRes.AllRowsAffected() {\n\t\t\t\ttotalDelta += buildResults[i].rowsDelta * rowsAffected\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\n\t\tif execErr != nil {\n\t\t\treturn rollback(execErr)\n\t\t}\n\n\t\t// Check for warnings when PanicOnWarnings is enabled\n\t\tif this.migrationContext.PanicOnWarnings {\n\t\t\t//nolint:execinquery\n\t\t\trows, err := tx.Query(\"SHOW WARNINGS\")\n\t\t\tif err != nil {\n\t\t\t\treturn rollback(err)\n\t\t\t}\n\t\t\tdefer rows.Close()\n\t\t\tif err = rows.Err(); err != nil {\n\t\t\t\treturn rollback(err)\n\t\t\t}\n\n\t\t\t// Compile regex once before loop to avoid performance penalty and handle errors properly\n\t\t\tmigrationKeyRegex, err := this.compileMigrationKeyWarningRegex()\n\t\t\tif err != nil {\n\t\t\t\treturn rollback(err)\n\t\t\t}\n\n\t\t\tvar sqlWarnings []string\n\t\t\tfor rows.Next() {\n\t\t\t\tvar level, message string\n\t\t\t\tvar code int\n\t\t\t\tif err := rows.Scan(&level, &code, &message); err != nil {\n\t\t\t\t\tthis.migrationContext.Log.Warningf(\"Failed to read SHOW WARNINGS row\")\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif strings.Contains(message, \"Duplicate entry\") && migrationKeyRegex.MatchString(message) {\n\t\t\t\t\t// Duplicate entry on migration unique key is expected during binlog replay\n\t\t\t\t\t// (row was already copied during bulk copy phase)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsqlWarnings = append(sqlWarnings, fmt.Sprintf(\"%s: %s (%d)\", level, message, code))\n\t\t\t}\n\t\t\tif len(sqlWarnings) > 0 {\n\t\t\t\twarningMsg := fmt.Sprintf(\"Warnings detected during DML event application: %v\", sqlWarnings)\n\t\t\t\treturn rollback(errors.New(warningMsg))\n\t\t\t}\n\t\t}\n\n\t\tif err := tx.Commit(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}()\n\n\tif err != nil {\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\t// no error\n\tatomic.AddInt64(&this.migrationContext.TotalDMLEventsApplied, int64(len(dmlEvents)))\n\tif this.migrationContext.CountTableRows {\n\t\tatomic.AddInt64(&this.migrationContext.RowsDeltaEstimate, totalDelta)\n\t}\n\tthis.migrationContext.Log.Debugf(\"ApplyDMLEventQueries() applied %d events in one transaction\", len(dmlEvents))\n\treturn nil\n}\n\nfunc (this *Applier) Teardown() {\n\tthis.migrationContext.Log.Debugf(\"Tearing down...\")\n\tthis.db.Close()\n\tthis.singletonDB.Close()\n\tatomic.StoreInt64(&this.finishedMigrating, 1)\n}\n\nfunc (this *Applier) ExpectMetadataLock(sessionId int64) error {\n\tfound := false\n\tquery := `\n\t\tselect /* gh-ost */ m.owner_thread_id\n\t\t\tfrom performance_schema.metadata_locks m join performance_schema.threads t \n\t\t\ton m.owner_thread_id=t.thread_id\n\t\t\twhere m.object_type = 'TABLE' and m.object_schema = ? and m.object_name = ? \n\t\t\tand m.lock_type = 'EXCLUSIVE' and m.lock_status = 'PENDING' \n\t\t\tand t.processlist_id = ?\n\t`\n\terr := sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tfound = true\n\t\treturn nil\n\t}, this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, sessionId)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !found {\n\t\terr = fmt.Errorf(\"cannot find PENDING metadata lock on original table: `%s`.`%s`\", this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName)\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "go/logic/applier_test.go",
    "content": "/*\n   Copyright 2025 GitHub Inc.\n         See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"context\"\n\tgosql \"database/sql\"\n\t\"errors\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\tdrivermysql \"github.com/go-sql-driver/mysql\"\n\t\"github.com/stretchr/testify/require\"\n\t\"github.com/stretchr/testify/suite\"\n\n\t\"github.com/testcontainers/testcontainers-go\"\n\ttestmysql \"github.com/testcontainers/testcontainers-go/modules/mysql\"\n\n\t\"fmt\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/binlog\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n)\n\nfunc TestApplierGenerateSqlModeQuery(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tapplier := NewApplier(migrationContext)\n\n\t{\n\t\trequire.Equal(t,\n\t\t\t`sql_mode = CONCAT(@@session.sql_mode, ',NO_AUTO_VALUE_ON_ZERO,STRICT_ALL_TABLES')`,\n\t\t\tapplier.generateSqlModeQuery(),\n\t\t)\n\t}\n\t{\n\t\tmigrationContext.SkipStrictMode = true\n\t\tmigrationContext.AllowZeroInDate = false\n\t\trequire.Equal(t,\n\t\t\t`sql_mode = CONCAT(@@session.sql_mode, ',NO_AUTO_VALUE_ON_ZERO')`,\n\t\t\tapplier.generateSqlModeQuery(),\n\t\t)\n\t}\n\t{\n\t\tmigrationContext.SkipStrictMode = false\n\t\tmigrationContext.AllowZeroInDate = true\n\t\trequire.Equal(t,\n\t\t\t`sql_mode = REPLACE(REPLACE(CONCAT(@@session.sql_mode, ',NO_AUTO_VALUE_ON_ZERO,STRICT_ALL_TABLES'), 'NO_ZERO_IN_DATE', ''), 'NO_ZERO_DATE', '')`,\n\t\t\tapplier.generateSqlModeQuery(),\n\t\t)\n\t}\n\t{\n\t\tmigrationContext.SkipStrictMode = true\n\t\tmigrationContext.AllowZeroInDate = true\n\t\trequire.Equal(t,\n\t\t\t`sql_mode = REPLACE(REPLACE(CONCAT(@@session.sql_mode, ',NO_AUTO_VALUE_ON_ZERO'), 'NO_ZERO_IN_DATE', ''), 'NO_ZERO_DATE', '')`,\n\t\t\tapplier.generateSqlModeQuery(),\n\t\t)\n\t}\n}\n\nfunc TestApplierUpdateModifiesUniqueKeyColumns(t *testing.T) {\n\tcolumns := sql.NewColumnList([]string{\"id\", \"item_id\", \"item_text\"})\n\tcolumnValues := sql.ToColumnValues([]interface{}{123456, 42, []uint8{116, 101, 115, 116}})\n\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.OriginalTableColumns = columns\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:    t.Name(),\n\t\tColumns: *columns,\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\n\tt.Run(\"unmodified\", func(t *testing.T) {\n\t\tmodifiedColumn, isModified := applier.updateModifiesUniqueKeyColumns(&binlog.BinlogDMLEvent{\n\t\t\tDatabaseName:      \"test\",\n\t\t\tDML:               binlog.UpdateDML,\n\t\t\tNewColumnValues:   columnValues,\n\t\t\tWhereColumnValues: columnValues,\n\t\t})\n\t\trequire.Equal(t, \"\", modifiedColumn)\n\t\trequire.False(t, isModified)\n\t})\n\n\tt.Run(\"modified\", func(t *testing.T) {\n\t\tmodifiedColumn, isModified := applier.updateModifiesUniqueKeyColumns(&binlog.BinlogDMLEvent{\n\t\t\tDatabaseName:      \"test\",\n\t\t\tDML:               binlog.UpdateDML,\n\t\t\tNewColumnValues:   sql.ToColumnValues([]interface{}{123456, 24}),\n\t\t\tWhereColumnValues: columnValues,\n\t\t})\n\t\trequire.Equal(t, \"item_id\", modifiedColumn)\n\t\trequire.True(t, isModified)\n\t})\n}\n\nfunc TestApplierBuildDMLEventQuery(t *testing.T) {\n\tcolumns := sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tcolumnValues := sql.ToColumnValues([]interface{}{123456, 42})\n\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.DatabaseName = \"test\"\n\tmigrationContext.OriginalTableName = \"test\"\n\tmigrationContext.OriginalTableColumns = columns\n\tmigrationContext.SharedColumns = columns\n\tmigrationContext.MappedSharedColumns = columns\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:    t.Name(),\n\t\tColumns: *columns,\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tapplier.prepareQueries()\n\n\tt.Run(\"delete\", func(t *testing.T) {\n\t\tbinlogEvent := &binlog.BinlogDMLEvent{\n\t\t\tDatabaseName:      \"test\",\n\t\t\tDML:               binlog.DeleteDML,\n\t\t\tWhereColumnValues: columnValues,\n\t\t}\n\n\t\tres := applier.buildDMLEventQuery(binlogEvent)\n\t\trequire.Len(t, res, 1)\n\t\trequire.NoError(t, res[0].err)\n\t\trequire.Equal(t, `delete /* gh-ost `+\"`test`.`_test_gho`\"+` */\n\t\tfrom\n\t\t\t`+\"`test`.`_test_gho`\"+`\n\t\twhere\n\t\t\t((`+\"`id`\"+` = ?) and (`+\"`item_id`\"+` = ?))`,\n\t\t\tstrings.TrimSpace(res[0].query))\n\t\trequire.Len(t, res[0].args, 2)\n\t\trequire.Equal(t, 123456, res[0].args[0])\n\t\trequire.Equal(t, 42, res[0].args[1])\n\t})\n\n\tt.Run(\"insert\", func(t *testing.T) {\n\t\tbinlogEvent := &binlog.BinlogDMLEvent{\n\t\t\tDatabaseName:    \"test\",\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: columnValues,\n\t\t}\n\t\tres := applier.buildDMLEventQuery(binlogEvent)\n\t\trequire.Len(t, res, 1)\n\t\trequire.NoError(t, res[0].err)\n\t\trequire.Equal(t,\n\t\t\t`insert /* gh-ost `+\"`test`.`_test_gho`\"+` */ ignore\n\t\tinto\n\t\t\t`+\"`test`.`_test_gho`\"+`\n\t\t\t`+\"(`id`, `item_id`)\"+`\n\t\tvalues\n\t\t\t(?, ?)`,\n\t\t\tstrings.TrimSpace(res[0].query))\n\t\trequire.Len(t, res[0].args, 2)\n\t\trequire.Equal(t, 123456, res[0].args[0])\n\t\trequire.Equal(t, 42, res[0].args[1])\n\t})\n\n\tt.Run(\"update\", func(t *testing.T) {\n\t\tbinlogEvent := &binlog.BinlogDMLEvent{\n\t\t\tDatabaseName:      \"test\",\n\t\t\tDML:               binlog.UpdateDML,\n\t\t\tNewColumnValues:   columnValues,\n\t\t\tWhereColumnValues: columnValues,\n\t\t}\n\t\tres := applier.buildDMLEventQuery(binlogEvent)\n\t\trequire.Len(t, res, 1)\n\t\trequire.NoError(t, res[0].err)\n\t\trequire.Equal(t,\n\t\t\t`update /* gh-ost `+\"`test`.`_test_gho`\"+` */\n\t\t\t`+\"`test`.`_test_gho`\"+`\n\t\tset\n\t\t\t`+\"`id`\"+`=?, `+\"`item_id`\"+`=?\n\t\twhere\n\t\t\t((`+\"`id`\"+` = ?) and (`+\"`item_id`\"+` = ?))`,\n\t\t\tstrings.TrimSpace(res[0].query))\n\t\trequire.Len(t, res[0].args, 4)\n\t\trequire.Equal(t, 123456, res[0].args[0])\n\t\trequire.Equal(t, 42, res[0].args[1])\n\t\trequire.Equal(t, 123456, res[0].args[2])\n\t\trequire.Equal(t, 42, res[0].args[3])\n\t})\n}\n\nfunc TestApplierInstantDDL(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.DatabaseName = \"test\"\n\tmigrationContext.SkipPortValidation = true\n\tmigrationContext.OriginalTableName = \"mytable\"\n\tmigrationContext.AlterStatementOptions = \"ADD INDEX (foo)\"\n\tapplier := NewApplier(migrationContext)\n\n\tt.Run(\"instantDDLstmt\", func(t *testing.T) {\n\t\tstmt := applier.generateInstantDDLQuery()\n\t\trequire.Equal(t, \"ALTER /* gh-ost */ TABLE `test`.`mytable` ADD INDEX (foo), ALGORITHM=INSTANT\", stmt)\n\t})\n}\n\nfunc TestRetryOnLockWaitTimeout(t *testing.T) {\n\toldRetrySleepFn := RetrySleepFn\n\tdefer func() { RetrySleepFn = oldRetrySleepFn }()\n\tRetrySleepFn = func(d time.Duration) {} // no-op for tests\n\n\tlogger := base.NewMigrationContext().Log\n\n\tlockWaitTimeoutErr := &drivermysql.MySQLError{Number: 1205, Message: \"Lock wait timeout exceeded\"}\n\tnonRetryableErr := &drivermysql.MySQLError{Number: 1845, Message: \"ALGORITHM=INSTANT is not supported\"}\n\n\tt.Run(\"success on first attempt\", func(t *testing.T) {\n\t\tcalls := 0\n\t\terr := retryOnLockWaitTimeout(func() error {\n\t\t\tcalls++\n\t\t\treturn nil\n\t\t}, logger)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, 1, calls)\n\t})\n\n\tt.Run(\"retry on lock wait timeout then succeed\", func(t *testing.T) {\n\t\tcalls := 0\n\t\terr := retryOnLockWaitTimeout(func() error {\n\t\t\tcalls++\n\t\t\tif calls < 3 {\n\t\t\t\treturn lockWaitTimeoutErr\n\t\t\t}\n\t\t\treturn nil\n\t\t}, logger)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, 3, calls)\n\t})\n\n\tt.Run(\"non-retryable error returns immediately\", func(t *testing.T) {\n\t\tcalls := 0\n\t\terr := retryOnLockWaitTimeout(func() error {\n\t\t\tcalls++\n\t\t\treturn nonRetryableErr\n\t\t}, logger)\n\t\trequire.ErrorIs(t, err, nonRetryableErr)\n\t\trequire.Equal(t, 1, calls)\n\t})\n\n\tt.Run(\"non-mysql error returns immediately\", func(t *testing.T) {\n\t\tcalls := 0\n\t\tgenericErr := errors.New(\"connection refused\")\n\t\terr := retryOnLockWaitTimeout(func() error {\n\t\t\tcalls++\n\t\t\treturn genericErr\n\t\t}, logger)\n\t\trequire.ErrorIs(t, err, genericErr)\n\t\trequire.Equal(t, 1, calls)\n\t})\n\n\tt.Run(\"exhausts all retries\", func(t *testing.T) {\n\t\tcalls := 0\n\t\terr := retryOnLockWaitTimeout(func() error {\n\t\t\tcalls++\n\t\t\treturn lockWaitTimeoutErr\n\t\t}, logger)\n\t\trequire.ErrorIs(t, err, lockWaitTimeoutErr)\n\t\trequire.Equal(t, 5, calls)\n\t})\n}\n\ntype ApplierTestSuite struct {\n\tsuite.Suite\n\n\tmysqlContainer testcontainers.Container\n\tdb             *gosql.DB\n}\n\nfunc (suite *ApplierTestSuite) SetupSuite() {\n\tctx := context.Background()\n\tmysqlContainer, err := testmysql.Run(ctx,\n\t\ttestMysqlContainerImage,\n\t\ttestmysql.WithDatabase(testMysqlDatabase),\n\t\ttestmysql.WithUsername(testMysqlUser),\n\t\ttestmysql.WithPassword(testMysqlPass),\n\t\ttestmysql.WithConfigFile(\"my.cnf.test\"),\n\t)\n\tsuite.Require().NoError(err)\n\n\tsuite.mysqlContainer = mysqlContainer\n\n\tdsn, err := mysqlContainer.ConnectionString(ctx)\n\tsuite.Require().NoError(err)\n\n\tdb, err := gosql.Open(\"mysql\", dsn)\n\tsuite.Require().NoError(err)\n\n\tsuite.db = db\n}\n\nfunc (suite *ApplierTestSuite) TeardownSuite() {\n\tsuite.Assert().NoError(suite.db.Close())\n\tsuite.Assert().NoError(testcontainers.TerminateContainer(suite.mysqlContainer))\n}\n\nfunc (suite *ApplierTestSuite) SetupTest() {\n\tctx := context.Background()\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE DATABASE IF NOT EXISTS %s\", testMysqlDatabase))\n\tsuite.Require().NoError(err)\n}\n\nfunc (suite *ApplierTestSuite) TearDownTest() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestTableName())\n\tsuite.Require().NoError(err)\n\t_, err = suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestGhostTableName())\n\tsuite.Require().NoError(err)\n}\n\nfunc (suite *ApplierTestSuite) TestInitDBConnections() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tapplier := NewApplier(migrationContext)\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\tmysqlVersion, _ := strings.CutPrefix(testMysqlContainerImage, \"mysql:\")\n\tsuite.Require().Equal(mysqlVersion, migrationContext.ApplierMySQLVersion)\n\tsuite.Require().Equal(int64(28800), migrationContext.ApplierWaitTimeout)\n\tsuite.Require().Equal(\"+00:00\", migrationContext.ApplierTimeZone)\n\n\tsuite.Require().Equal(sql.NewColumnList([]string{\"id\", \"item_id\"}), migrationContext.OriginalTableColumnsOnApplier)\n}\n\nfunc (suite *ApplierTestSuite) TestApplyDMLEventQueries() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:    \"primary_key\",\n\t\tColumns: *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{123456, 42}),\n\t\t},\n\t}\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().NoError(err)\n\n\t// Check that the row was inserted\n\trows, err := suite.db.Query(\"SELECT * FROM \" + getTestGhostTableName())\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar count, id, item_id int\n\tfor rows.Next() {\n\t\terr = rows.Scan(&id, &item_id)\n\t\tsuite.Require().NoError(err)\n\t\tcount += 1\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\tsuite.Require().Equal(1, count)\n\tsuite.Require().Equal(123456, id)\n\tsuite.Require().Equal(42, item_id)\n\n\tsuite.Require().Equal(int64(1), migrationContext.TotalDMLEventsApplied)\n\tsuite.Require().Equal(int64(0), migrationContext.RowsDeltaEstimate)\n}\n\nfunc (suite *ApplierTestSuite) TestValidateOrDropExistingTables() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\n\tapplier := NewApplier(migrationContext)\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\terr = applier.ValidateOrDropExistingTables()\n\tsuite.Require().NoError(err)\n}\n\nfunc (suite *ApplierTestSuite) TestValidateOrDropExistingTablesWithGhostTableExisting() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\n\tapplier := NewApplier(migrationContext)\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\terr = applier.ValidateOrDropExistingTables()\n\tsuite.Require().Error(err)\n\tsuite.Require().EqualError(err, \"Table `_testing_gho` already exists. Panicking. Use --initially-drop-ghost-table to force dropping it, though I really prefer that you drop it or rename it away\")\n}\n\nfunc (suite *ApplierTestSuite) TestValidateOrDropExistingTablesWithGhostTableExistingAndInitiallyDropGhostTableSet() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.InitiallyDropGhostTable = true\n\n\tapplier := NewApplier(migrationContext)\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\terr = applier.ValidateOrDropExistingTables()\n\tsuite.Require().NoError(err)\n\n\t// Check that the ghost table was dropped\n\tvar tableName string\n\t//nolint:execinquery\n\terr = suite.db.QueryRow(fmt.Sprintf(\"SHOW TABLES IN test LIKE '_%s_gho'\", testMysqlTableName)).Scan(&tableName)\n\tsuite.Require().Error(err)\n\tsuite.Require().Equal(gosql.ErrNoRows, err)\n}\n\nfunc (suite *ApplierTestSuite) TestCreateGhostTable() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\n\tmigrationContext.InitiallyDropGhostTable = true\n\n\tapplier := NewApplier(migrationContext)\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\terr = applier.CreateGhostTable()\n\tsuite.Require().NoError(err)\n\n\t// Check that the ghost table was created\n\tvar tableName string\n\t//nolint:execinquery\n\terr = suite.db.QueryRow(\"SHOW TABLES IN test LIKE '_testing_gho'\").Scan(&tableName)\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(\"_testing_gho\", tableName)\n\n\t// Check that the ghost table has the same columns as the original table\n\tvar createDDL string\n\t//nolint:execinquery\n\terr = suite.db.QueryRow(fmt.Sprintf(\"SHOW CREATE TABLE %s\", getTestGhostTableName())).Scan(&tableName, &createDDL)\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(\"CREATE TABLE `_testing_gho` (\\n  `id` int DEFAULT NULL,\\n  `item_id` int DEFAULT NULL\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci\", createDDL)\n}\n\nfunc (suite *ApplierTestSuite) TestPanicOnWarningsInApplyIterationInsertQuerySucceedsWithUniqueKeyWarningInsertedByDMLEvent() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT, UNIQUE KEY (item_id));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, item_id INT, UNIQUE KEY (item_id));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.PanicOnWarnings = true\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"item_id\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"item_id\",\n\t\tNameInGhostTable: \"item_id\",\n\t\tColumns:          *sql.NewColumnList([]string{\"item_id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, item_id) VALUES (123456, 42);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{123456, 42}),\n\t\t},\n\t}\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().NoError(err)\n\n\terr = applier.CreateChangelogTable()\n\tsuite.Require().NoError(err)\n\terr = applier.ReadMigrationRangeValues()\n\tsuite.Require().NoError(err)\n\n\tmigrationContext.SetNextIterationRangeMinValues()\n\thasFurtherRange, err := applier.CalculateNextIterationRangeEndValues()\n\n\tsuite.Require().NoError(err)\n\tsuite.Require().True(hasFurtherRange)\n\n\t_, rowsAffected, _, err := applier.ApplyIterationInsertQuery()\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(int64(0), rowsAffected)\n\n\t// Ensure Duplicate entry '42' for key '_testing_gho.item_id' is ignored correctly\n\tsuite.Require().Empty(applier.migrationContext.MigrationLastInsertSQLWarnings)\n\n\t// Check that the row was inserted\n\trows, err := suite.db.Query(\"SELECT * FROM \" + getTestGhostTableName())\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar count, id, item_id int\n\tfor rows.Next() {\n\t\terr = rows.Scan(&id, &item_id)\n\t\tsuite.Require().NoError(err)\n\t\tcount += 1\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\tsuite.Require().Equal(1, count)\n\tsuite.Require().Equal(123456, id)\n\tsuite.Require().Equal(42, item_id)\n\n\tsuite.Require().\n\t\tEqual(int64(1), migrationContext.TotalDMLEventsApplied)\n\tsuite.Require().\n\t\tEqual(int64(0), migrationContext.RowsDeltaEstimate)\n}\n\nfunc (suite *ApplierTestSuite) TestPanicOnWarningsInApplyIterationInsertQueryFailsWithTruncationWarning() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id int not null, name varchar(20), primary key(id))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, name varchar(20), primary key(id));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (1, 'this string is long')\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.AlterStatementOptions = \"modify column name varchar(10)\"\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"name\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"name\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"name\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\tapplier := NewApplier(migrationContext)\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\terr = applier.CreateChangelogTable()\n\tsuite.Require().NoError(err)\n\n\terr = applier.ReadMigrationRangeValues()\n\tsuite.Require().NoError(err)\n\n\terr = applier.AlterGhost()\n\tsuite.Require().NoError(err)\n\n\tmigrationContext.SetNextIterationRangeMinValues()\n\thasFurtherRange, err := applier.CalculateNextIterationRangeEndValues()\n\tsuite.Require().NoError(err)\n\tsuite.Require().True(hasFurtherRange)\n\n\t_, rowsAffected, _, err := applier.ApplyIterationInsertQuery()\n\tsuite.Equal(int64(1), rowsAffected)\n\tsuite.Require().NoError(err)\n\n\t// Verify the warning was recorded and will cause the migrator to panic\n\tsuite.Require().NotEmpty(applier.migrationContext.MigrationLastInsertSQLWarnings)\n\tsuite.Require().Contains(applier.migrationContext.MigrationLastInsertSQLWarnings[0], \"Warning: Data truncated for column 'name' at row 1\")\n}\n\nfunc (suite *ApplierTestSuite) TestWriteCheckpoint() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id int not null, id2 char(4) CHARACTER SET utf8mb4, primary key(id, id2))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT, id2 char(4) CHARACTER SET utf8mb4, name varchar(20), primary key(id, id2));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, id2) VALUES (?,?), (?,?), (?,?)\", getTestTableName()), 411, \"君子懷德\", 411, \"小人懷土\", 212, \"君子不器\")\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.AlterStatementOptions = \"add column name varchar(20)\"\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"id2\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"id2\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"id2\"})\n\tmigrationContext.Checkpoint = true\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\", \"id2\"}),\n\t}\n\n\tinspector := NewInspector(migrationContext)\n\tsuite.Require().NoError(inspector.InitDBConnections())\n\n\terr = inspector.applyColumnTypes(testMysqlDatabase, testMysqlTableName, &migrationContext.UniqueKey.Columns)\n\tsuite.Require().NoError(err)\n\n\tapplier := NewApplier(migrationContext)\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\terr = applier.CreateChangelogTable()\n\tsuite.Require().NoError(err)\n\n\terr = applier.CreateCheckpointTable()\n\tsuite.Require().NoError(err)\n\n\terr = applier.prepareQueries()\n\tsuite.Require().NoError(err)\n\n\terr = applier.ReadMigrationRangeValues()\n\tsuite.Require().NoError(err)\n\n\t// checkpoint table is empty\n\t_, err = applier.ReadLastCheckpoint()\n\tsuite.Require().ErrorIs(err, ErrNoCheckpointFound)\n\n\t// write a checkpoint and read it back\n\tcoords := mysql.NewFileBinlogCoordinates(\"mysql-bin.000003\", int64(219202907))\n\n\tchk := &Checkpoint{\n\t\tLastTrxCoords:     coords,\n\t\tIterationRangeMin: applier.migrationContext.MigrationRangeMinValues,\n\t\tIterationRangeMax: applier.migrationContext.MigrationRangeMaxValues,\n\t\tIteration:         2,\n\t\tRowsCopied:        100000,\n\t\tDMLApplied:        200000,\n\t\tIsCutover:         true,\n\t}\n\tid, err := applier.WriteCheckpoint(chk)\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(int64(1), id)\n\n\tgotChk, err := applier.ReadLastCheckpoint()\n\tsuite.Require().NoError(err)\n\n\tsuite.Require().Equal(chk.Iteration, gotChk.Iteration)\n\tsuite.Require().Equal(chk.LastTrxCoords.String(), gotChk.LastTrxCoords.String())\n\tsuite.Require().Equal(chk.IterationRangeMin.String(), gotChk.IterationRangeMin.String())\n\tsuite.Require().Equal(chk.IterationRangeMax.String(), gotChk.IterationRangeMax.String())\n\tsuite.Require().Equal(chk.RowsCopied, gotChk.RowsCopied)\n\tsuite.Require().Equal(chk.DMLApplied, gotChk.DMLApplied)\n\tsuite.Require().Equal(chk.IsCutover, gotChk.IsCutover)\n}\n\nfunc (suite *ApplierTestSuite) TestPanicOnWarningsWithDuplicateKeyOnNonMigrationIndex() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t// Create table with id and email columns, where id is the primary key\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Create ghost table with same schema plus a new unique index on email\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), UNIQUE KEY email_unique (email));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.PanicOnWarnings = true\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t// Insert initial rows into ghost table (simulating bulk copy phase)\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, email) VALUES (1, 'user1@example.com'), (2, 'user2@example.com'), (3, 'user3@example.com');\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Simulate binlog event: try to insert a row with duplicate email\n\t// This should fail with a warning because the ghost table has a unique index on email\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{4, \"user2@example.com\"}), // duplicate email\n\t\t},\n\t}\n\n\t// This should return an error when PanicOnWarnings is enabled\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().Error(err)\n\tsuite.Require().Contains(err.Error(), \"Duplicate entry\")\n\n\t// Verify that the ghost table still has only the original 3 rows with correct data (no data loss)\n\trows, err := suite.db.Query(\"SELECT id, email FROM \" + getTestGhostTableName() + \" ORDER BY id\")\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar results []struct {\n\t\tid    int\n\t\temail string\n\t}\n\tfor rows.Next() {\n\t\tvar id int\n\t\tvar email string\n\t\terr = rows.Scan(&id, &email)\n\t\tsuite.Require().NoError(err)\n\t\tresults = append(results, struct {\n\t\t\tid    int\n\t\t\temail string\n\t\t}{id, email})\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\t// All 3 original rows should still be present with correct data\n\tsuite.Require().Len(results, 3)\n\tsuite.Require().Equal(1, results[0].id)\n\tsuite.Require().Equal(\"user1@example.com\", results[0].email)\n\tsuite.Require().Equal(2, results[1].id)\n\tsuite.Require().Equal(\"user2@example.com\", results[1].email)\n\tsuite.Require().Equal(3, results[2].id)\n\tsuite.Require().Equal(\"user3@example.com\", results[2].email)\n}\n\nfunc (suite *ApplierTestSuite) TestPanicOnWarningsWithDuplicateCompositeUniqueKey() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t// Create table with id, email, and username columns\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), username VARCHAR(100));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Create ghost table with same schema plus a composite unique index on (email, username)\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), username VARCHAR(100), UNIQUE KEY email_username_unique (email, username));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.PanicOnWarnings = true\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"email\", \"username\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"email\", \"username\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"email\", \"username\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t// Insert initial rows into ghost table (simulating bulk copy phase)\n\t// alice@example.com + bob is ok due to composite unique index\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, email, username) VALUES (1, 'alice@example.com', 'alice'), (2, 'alice@example.com', 'bob'), (3, 'charlie@example.com', 'charlie');\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Simulate binlog event: try to insert a row with duplicate composite key (email + username)\n\t// This should fail with a warning because the ghost table has a composite unique index\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{4, \"alice@example.com\", \"alice\"}), // duplicate (email, username)\n\t\t},\n\t}\n\n\t// This should return an error when PanicOnWarnings is enabled\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().Error(err)\n\tsuite.Require().Contains(err.Error(), \"Duplicate entry\")\n\n\t// Verify that the ghost table still has only the original 3 rows with correct data (no data loss)\n\trows, err := suite.db.Query(\"SELECT id, email, username FROM \" + getTestGhostTableName() + \" ORDER BY id\")\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar results []struct {\n\t\tid       int\n\t\temail    string\n\t\tusername string\n\t}\n\tfor rows.Next() {\n\t\tvar id int\n\t\tvar email string\n\t\tvar username string\n\t\terr = rows.Scan(&id, &email, &username)\n\t\tsuite.Require().NoError(err)\n\t\tresults = append(results, struct {\n\t\t\tid       int\n\t\t\temail    string\n\t\t\tusername string\n\t\t}{id, email, username})\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\t// All 3 original rows should still be present with correct data\n\tsuite.Require().Len(results, 3)\n\tsuite.Require().Equal(1, results[0].id)\n\tsuite.Require().Equal(\"alice@example.com\", results[0].email)\n\tsuite.Require().Equal(\"alice\", results[0].username)\n\tsuite.Require().Equal(2, results[1].id)\n\tsuite.Require().Equal(\"alice@example.com\", results[1].email)\n\tsuite.Require().Equal(\"bob\", results[1].username)\n\tsuite.Require().Equal(3, results[2].id)\n\tsuite.Require().Equal(\"charlie@example.com\", results[2].email)\n\tsuite.Require().Equal(\"charlie\", results[2].username)\n}\n\n// TestUpdateModifyingUniqueKeyWithDuplicateOnOtherIndex tests the scenario where:\n// 1. An UPDATE modifies the unique key (converted to DELETE+INSERT)\n// 2. The INSERT would create a duplicate on a NON-migration unique index\n// 3. Without warning detection: DELETE succeeds, INSERT IGNORE skips = DATA LOSS\n// 4. With PanicOnWarnings: Warning detected, transaction rolled back, no data loss\n// This test verifies that PanicOnWarnings correctly prevents the data loss scenario.\nfunc (suite *ApplierTestSuite) TestUpdateModifyingUniqueKeyWithDuplicateOnOtherIndex() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t// Create table with id (PRIMARY) and email (NO unique constraint yet)\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Create ghost table with id (PRIMARY) AND email unique index (being added)\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), UNIQUE KEY email_unique (email));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.PanicOnWarnings = true\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t// Setup: Insert initial rows into ghost table\n\t// Row 1: id=1, email='bob@example.com'\n\t// Row 2: id=2, email='charlie@example.com'\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, email) VALUES (1, 'bob@example.com'), (2, 'charlie@example.com');\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Simulate binlog event: UPDATE that changes BOTH PRIMARY KEY and email\n\t// From: id=2, email='charlie@example.com'\n\t// To:   id=3, email='bob@example.com'  (duplicate email with id=1)\n\t// This will be converted to DELETE (id=2) + INSERT (id=3, 'bob@example.com')\n\t// With INSERT IGNORE, the INSERT will skip because email='bob@example.com' already exists in id=1\n\t// Result: id=2 deleted, id=3 never inserted = DATA LOSS\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:      testMysqlDatabase,\n\t\t\tTableName:         testMysqlTableName,\n\t\t\tDML:               binlog.UpdateDML,\n\t\t\tNewColumnValues:   sql.ToColumnValues([]interface{}{3, \"bob@example.com\"}),     // new: id=3, email='bob@example.com'\n\t\t\tWhereColumnValues: sql.ToColumnValues([]interface{}{2, \"charlie@example.com\"}), // old: id=2, email='charlie@example.com'\n\t\t},\n\t}\n\n\t// First verify this would be converted to DELETE+INSERT\n\tbuildResults := applier.buildDMLEventQuery(dmlEvents[0])\n\tsuite.Require().Len(buildResults, 2, \"UPDATE modifying unique key should be converted to DELETE+INSERT\")\n\n\t// Apply the event - this should FAIL because INSERT will have duplicate email warning\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().Error(err, \"Should fail when DELETE+INSERT causes duplicate on non-migration unique key\")\n\tsuite.Require().Contains(err.Error(), \"Duplicate entry\", \"Error should mention duplicate entry\")\n\n\t// Verify that BOTH rows still exist (transaction rolled back)\n\trows, err := suite.db.Query(\"SELECT id, email FROM \" + getTestGhostTableName() + \" ORDER BY id\")\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar count int\n\tvar ids []int\n\tvar emails []string\n\tfor rows.Next() {\n\t\tvar id int\n\t\tvar email string\n\t\terr = rows.Scan(&id, &email)\n\t\tsuite.Require().NoError(err)\n\t\tids = append(ids, id)\n\t\temails = append(emails, email)\n\t\tcount++\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\t// Transaction should have rolled back, so original 2 rows should still be there\n\tsuite.Require().Equal(2, count, \"Should still have 2 rows after failed transaction\")\n\tsuite.Require().Equal([]int{1, 2}, ids, \"Should have original ids\")\n\tsuite.Require().Equal([]string{\"bob@example.com\", \"charlie@example.com\"}, emails)\n}\n\n// TestNormalUpdateWithPanicOnWarnings tests that normal UPDATEs (not modifying unique key) work correctly\nfunc (suite *ApplierTestSuite) TestNormalUpdateWithPanicOnWarnings() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t// Create table with id (PRIMARY) and email\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Create ghost table with same schema plus unique index on email\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), UNIQUE KEY email_unique (email));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.PanicOnWarnings = true\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t// Setup: Insert initial rows into ghost table\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, email) VALUES (1, 'alice@example.com'), (2, 'bob@example.com');\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Simulate binlog event: Normal UPDATE that only changes email (not PRIMARY KEY)\n\t// This should use UPDATE query, not DELETE+INSERT\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:      testMysqlDatabase,\n\t\t\tTableName:         testMysqlTableName,\n\t\t\tDML:               binlog.UpdateDML,\n\t\t\tNewColumnValues:   sql.ToColumnValues([]interface{}{2, \"robert@example.com\"}), // update email only\n\t\t\tWhereColumnValues: sql.ToColumnValues([]interface{}{2, \"bob@example.com\"}),\n\t\t},\n\t}\n\n\t// Verify this generates a single UPDATE query (not DELETE+INSERT)\n\tbuildResults := applier.buildDMLEventQuery(dmlEvents[0])\n\tsuite.Require().Len(buildResults, 1, \"Normal UPDATE should generate single UPDATE query\")\n\n\t// Apply the event - should succeed\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().NoError(err)\n\n\t// Verify the update was applied correctly\n\trows, err := suite.db.Query(\"SELECT id, email FROM \" + getTestGhostTableName() + \" WHERE id = 2\")\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar id int\n\tvar email string\n\tsuite.Require().True(rows.Next(), \"Should find updated row\")\n\terr = rows.Scan(&id, &email)\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(2, id)\n\tsuite.Require().Equal(\"robert@example.com\", email)\n\tsuite.Require().False(rows.Next(), \"Should only have one row\")\n\tsuite.Require().NoError(rows.Err())\n}\n\n// TestDuplicateOnMigrationKeyAllowedInBinlogReplay tests the positive case where\n// a duplicate on the migration unique key during binlog replay is expected and should be allowed\nfunc (suite *ApplierTestSuite) TestDuplicateOnMigrationKeyAllowedInBinlogReplay() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t// Create table with id and email columns, where id is the primary key\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Create ghost table with same schema plus a new unique index on email\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), UNIQUE KEY email_unique (email));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.PanicOnWarnings = true\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t// Insert initial rows into ghost table (simulating bulk copy phase)\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, email) VALUES (1, 'alice@example.com'), (2, 'bob@example.com');\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Simulate binlog event: try to insert the same row again (duplicate on PRIMARY KEY - the migration key)\n\t// This is expected during binlog replay when a row was already copied during bulk copy\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{1, \"alice@example.com\"}), // duplicate PRIMARY KEY\n\t\t},\n\t}\n\n\t// This should succeed - duplicate on migration unique key is expected and should be filtered out\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().NoError(err)\n\n\t// Verify that the ghost table still has only the original 2 rows with correct data\n\trows, err := suite.db.Query(\"SELECT id, email FROM \" + getTestGhostTableName() + \" ORDER BY id\")\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar results []struct {\n\t\tid    int\n\t\temail string\n\t}\n\tfor rows.Next() {\n\t\tvar id int\n\t\tvar email string\n\t\terr = rows.Scan(&id, &email)\n\t\tsuite.Require().NoError(err)\n\t\tresults = append(results, struct {\n\t\t\tid    int\n\t\t\temail string\n\t\t}{id, email})\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\t// Should still have exactly 2 rows with correct data\n\tsuite.Require().Len(results, 2)\n\tsuite.Require().Equal(1, results[0].id)\n\tsuite.Require().Equal(\"alice@example.com\", results[0].email)\n\tsuite.Require().Equal(2, results[1].id)\n\tsuite.Require().Equal(\"bob@example.com\", results[1].email)\n}\n\n// TestRegexMetacharactersInIndexName tests that index names with regex metacharacters\n// are properly escaped. We test with a plus sign in the index name, which without\n// QuoteMeta would be treated as a regex quantifier (one or more of 'x' in this case).\n// This test verifies the pattern matches ONLY the exact index name, not a regex pattern.\nfunc (suite *ApplierTestSuite) TestRegexMetacharactersInIndexName() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t// Create tables with an index name containing a plus sign\n\t// Without QuoteMeta, \"idx+email\" would be treated as a regex pattern where + is a quantifier\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), UNIQUE KEY `idx+email` (email));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t// MySQL allows + in index names when quoted\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), UNIQUE KEY `idx+email` (email));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.PanicOnWarnings = true\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"idx+email\",\n\t\tNameInGhostTable: \"idx+email\",\n\t\tColumns:          *sql.NewColumnList([]string{\"email\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t// Insert initial rows\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, email) VALUES (1, 'alice@example.com'), (2, 'bob@example.com');\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Test: duplicate on idx+email (the migration key) should be allowed\n\t// This verifies our regex correctly identifies \"idx+email\" as the migration key\n\t// Without regexp.QuoteMeta, the + would be treated as a regex quantifier and might not match correctly\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{3, \"alice@example.com\"}),\n\t\t},\n\t}\n\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().NoError(err, \"Duplicate on idx+email (migration key) should be allowed with PanicOnWarnings enabled\")\n\n\t// Test: duplicate on PRIMARY (not the migration key) should fail\n\tdmlEvents = []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{1, \"charlie@example.com\"}),\n\t\t},\n\t}\n\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().Error(err, \"Duplicate on PRIMARY (not migration key) should fail with PanicOnWarnings enabled\")\n\tsuite.Require().Contains(err.Error(), \"Duplicate entry\")\n\n\t// Verify final state - should still have only the original 2 rows\n\trows, err := suite.db.Query(\"SELECT id, email FROM \" + getTestGhostTableName() + \" ORDER BY id\")\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar results []struct {\n\t\tid    int\n\t\temail string\n\t}\n\tfor rows.Next() {\n\t\tvar id int\n\t\tvar email string\n\t\terr = rows.Scan(&id, &email)\n\t\tsuite.Require().NoError(err)\n\t\tresults = append(results, struct {\n\t\t\tid    int\n\t\t\temail string\n\t\t}{id, email})\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\tsuite.Require().Len(results, 2)\n\tsuite.Require().Equal(1, results[0].id)\n\tsuite.Require().Equal(\"alice@example.com\", results[0].email)\n\tsuite.Require().Equal(2, results[1].id)\n\tsuite.Require().Equal(\"bob@example.com\", results[1].email)\n}\n\n// TestPanicOnWarningsDisabled tests that when PanicOnWarnings is false,\n// warnings are not checked and duplicates are silently ignored\nfunc (suite *ApplierTestSuite) TestPanicOnWarningsDisabled() {\n\tctx := context.Background()\n\n\tvar err error\n\n\t// Create table with id and email columns\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Create ghost table with unique index on email\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, email VARCHAR(100), UNIQUE KEY email_unique (email));\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\t// PanicOnWarnings is false (default)\n\tmigrationContext.PanicOnWarnings = false\n\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"email\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tapplier := NewApplier(migrationContext)\n\tsuite.Require().NoError(applier.prepareQueries())\n\tdefer applier.Teardown()\n\n\terr = applier.InitDBConnections()\n\tsuite.Require().NoError(err)\n\n\t// Insert initial rows into ghost table\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, email) VALUES (1, 'alice@example.com'), (2, 'bob@example.com');\", getTestGhostTableName()))\n\tsuite.Require().NoError(err)\n\n\t// Simulate binlog event: insert duplicate email on non-migration index\n\t// With PanicOnWarnings disabled, this should succeed (INSERT IGNORE skips it)\n\tdmlEvents := []*binlog.BinlogDMLEvent{\n\t\t{\n\t\t\tDatabaseName:    testMysqlDatabase,\n\t\t\tTableName:       testMysqlTableName,\n\t\t\tDML:             binlog.InsertDML,\n\t\t\tNewColumnValues: sql.ToColumnValues([]interface{}{3, \"alice@example.com\"}), // duplicate email\n\t\t},\n\t}\n\n\t// Should succeed because PanicOnWarnings is disabled\n\terr = applier.ApplyDMLEventQueries(dmlEvents)\n\tsuite.Require().NoError(err)\n\n\t// Verify that only 2 original rows exist with correct data (the duplicate was silently ignored)\n\trows, err := suite.db.Query(\"SELECT id, email FROM \" + getTestGhostTableName() + \" ORDER BY id\")\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\n\tvar results []struct {\n\t\tid    int\n\t\temail string\n\t}\n\tfor rows.Next() {\n\t\tvar id int\n\t\tvar email string\n\t\terr = rows.Scan(&id, &email)\n\t\tsuite.Require().NoError(err)\n\t\tresults = append(results, struct {\n\t\t\tid    int\n\t\t\temail string\n\t\t}{id, email})\n\t}\n\tsuite.Require().NoError(rows.Err())\n\n\t// Should still have exactly 2 original rows (id=3 was silently ignored)\n\tsuite.Require().Len(results, 2)\n\tsuite.Require().Equal(1, results[0].id)\n\tsuite.Require().Equal(\"alice@example.com\", results[0].email)\n\tsuite.Require().Equal(2, results[1].id)\n\tsuite.Require().Equal(\"bob@example.com\", results[1].email)\n}\n\nfunc TestApplier(t *testing.T) {\n\tsuite.Run(t, new(ApplierTestSuite))\n}\n"
  },
  {
    "path": "go/logic/checkpoint.go",
    "content": "/*\n   Copyright 2025 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n)\n\n// Checkpoint holds state necessary to resume a migration.\ntype Checkpoint struct {\n\tId        int64\n\tTimestamp time.Time\n\t// LastTrxCoords are coordinates of a transaction\n\t// that has been applied on ghost table.\n\tLastTrxCoords mysql.BinlogCoordinates\n\t// IterationRangeMin is the min shared key value\n\t// for the chunk copier range.\n\tIterationRangeMin *sql.ColumnValues\n\t// IterationRangeMax is the max shared key value\n\t// for the chunk copier range.\n\tIterationRangeMax *sql.ColumnValues\n\tIteration         int64\n\tRowsCopied        int64\n\tDMLApplied        int64\n\tIsCutover         bool\n}\n"
  },
  {
    "path": "go/logic/hooks.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"sync/atomic\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/openark/golib/log\"\n)\n\nconst (\n\tonStartup            = \"gh-ost-on-startup\"\n\tonValidated          = \"gh-ost-on-validated\"\n\tonRowCountComplete   = \"gh-ost-on-rowcount-complete\"\n\tonBeforeRowCopy      = \"gh-ost-on-before-row-copy\"\n\tonRowCopyComplete    = \"gh-ost-on-row-copy-complete\"\n\tonBeginPostponed     = \"gh-ost-on-begin-postponed\"\n\tonBeforeCutOver      = \"gh-ost-on-before-cut-over\"\n\tonInteractiveCommand = \"gh-ost-on-interactive-command\"\n\tonSuccess            = \"gh-ost-on-success\"\n\tonFailure            = \"gh-ost-on-failure\"\n\tonBatchCopyRetry     = \"gh-ost-on-batch-copy-retry\"\n\tonStatus             = \"gh-ost-on-status\"\n\tonStopReplication    = \"gh-ost-on-stop-replication\"\n\tonStartReplication   = \"gh-ost-on-start-replication\"\n)\n\ntype HooksExecutor struct {\n\tmigrationContext *base.MigrationContext\n\twriter           io.Writer\n}\n\nfunc NewHooksExecutor(migrationContext *base.MigrationContext) *HooksExecutor {\n\treturn &HooksExecutor{\n\t\tmigrationContext: migrationContext,\n\t\twriter:           os.Stderr,\n\t}\n}\n\nfunc (this *HooksExecutor) applyEnvironmentVariables(extraVariables ...string) []string {\n\tenv := os.Environ()\n\tenv = append(env, fmt.Sprintf(\"GH_OST_DATABASE_NAME=%s\", this.migrationContext.DatabaseName))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_TABLE_NAME=%s\", this.migrationContext.OriginalTableName))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_GHOST_TABLE_NAME=%s\", this.migrationContext.GetGhostTableName()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_OLD_TABLE_NAME=%s\", this.migrationContext.GetOldTableName()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_DDL=%s\", this.migrationContext.AlterStatement))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_ELAPSED_SECONDS=%f\", this.migrationContext.ElapsedTime().Seconds()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_ELAPSED_COPY_SECONDS=%f\", this.migrationContext.ElapsedRowCopyTime().Seconds()))\n\testimatedRows := atomic.LoadInt64(&this.migrationContext.RowsEstimate) + atomic.LoadInt64(&this.migrationContext.RowsDeltaEstimate)\n\tenv = append(env, fmt.Sprintf(\"GH_OST_ESTIMATED_ROWS=%d\", estimatedRows))\n\ttotalRowsCopied := this.migrationContext.GetTotalRowsCopied()\n\tenv = append(env, fmt.Sprintf(\"GH_OST_COPIED_ROWS=%d\", totalRowsCopied))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_MIGRATED_HOST=%s\", this.migrationContext.GetApplierHostname()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_INSPECTED_HOST=%s\", this.migrationContext.GetInspectorHostname()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_EXECUTING_HOST=%s\", this.migrationContext.Hostname))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_INSPECTED_LAG=%f\", this.migrationContext.GetCurrentLagDuration().Seconds()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_HEARTBEAT_LAG=%f\", this.migrationContext.TimeSinceLastHeartbeatOnChangelog().Seconds()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_PROGRESS=%f\", this.migrationContext.GetProgressPct()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_ETA_SECONDS=%d\", this.migrationContext.GetETASeconds()))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_HOOKS_HINT=%s\", this.migrationContext.HooksHintMessage))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_HOOKS_HINT_OWNER=%s\", this.migrationContext.HooksHintOwner))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_HOOKS_HINT_TOKEN=%s\", this.migrationContext.HooksHintToken))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_DRY_RUN=%t\", this.migrationContext.Noop))\n\tenv = append(env, fmt.Sprintf(\"GH_OST_REVERT=%t\", this.migrationContext.Revert))\n\n\tenv = append(env, extraVariables...)\n\treturn env\n}\n\n// executeHook executes a command, and sets relevant environment variables\n// combined output & error are printed to the configured writer.\nfunc (this *HooksExecutor) executeHook(hook string, extraVariables ...string) error {\n\tthis.migrationContext.Log.Infof(\"executing hook: %+v\", hook)\n\tcmd := exec.Command(hook)\n\tcmd.Env = this.applyEnvironmentVariables(extraVariables...)\n\n\tcombinedOutput, err := cmd.CombinedOutput()\n\tfmt.Fprintln(this.writer, string(combinedOutput))\n\treturn log.Errore(err)\n}\n\nfunc (this *HooksExecutor) detectHooks(baseName string) (hooks []string, err error) {\n\tif this.migrationContext.HooksPath == \"\" {\n\t\treturn hooks, err\n\t}\n\tpattern := fmt.Sprintf(\"%s/%s*\", this.migrationContext.HooksPath, baseName)\n\thooks, err = filepath.Glob(pattern)\n\treturn hooks, err\n}\n\nfunc (this *HooksExecutor) executeHooks(baseName string, extraVariables ...string) error {\n\thooks, err := this.detectHooks(baseName)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, hook := range hooks {\n\t\tlog.Infof(\"executing %+v hook: %+v\", baseName, hook)\n\t\tif err := this.executeHook(hook, extraVariables...); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (this *HooksExecutor) onStartup() error {\n\treturn this.executeHooks(onStartup)\n}\n\nfunc (this *HooksExecutor) onValidated() error {\n\treturn this.executeHooks(onValidated)\n}\n\nfunc (this *HooksExecutor) onRowCountComplete() error {\n\treturn this.executeHooks(onRowCountComplete)\n}\nfunc (this *HooksExecutor) onBeforeRowCopy() error {\n\treturn this.executeHooks(onBeforeRowCopy)\n}\n\nfunc (this *HooksExecutor) onBatchCopyRetry(errorMessage string) error {\n\tv := fmt.Sprintf(\"GH_OST_LAST_BATCH_COPY_ERROR=%s\", errorMessage)\n\treturn this.executeHooks(onBatchCopyRetry, v)\n}\n\nfunc (this *HooksExecutor) onRowCopyComplete() error {\n\treturn this.executeHooks(onRowCopyComplete)\n}\n\nfunc (this *HooksExecutor) onBeginPostponed() error {\n\treturn this.executeHooks(onBeginPostponed)\n}\n\nfunc (this *HooksExecutor) onBeforeCutOver() error {\n\treturn this.executeHooks(onBeforeCutOver)\n}\n\nfunc (this *HooksExecutor) onInteractiveCommand(command string) error {\n\tv := fmt.Sprintf(\"GH_OST_COMMAND='%s'\", command)\n\treturn this.executeHooks(onInteractiveCommand, v)\n}\n\nfunc (this *HooksExecutor) onSuccess() error {\n\treturn this.executeHooks(onSuccess)\n}\n\nfunc (this *HooksExecutor) onFailure() error {\n\treturn this.executeHooks(onFailure)\n}\n\nfunc (this *HooksExecutor) onStatus(statusMessage string) error {\n\tv := fmt.Sprintf(\"GH_OST_STATUS='%s'\", statusMessage)\n\treturn this.executeHooks(onStatus, v)\n}\n\nfunc (this *HooksExecutor) onStopReplication() error {\n\treturn this.executeHooks(onStopReplication)\n}\n\nfunc (this *HooksExecutor) onStartReplication() error {\n\treturn this.executeHooks(onStartReplication)\n}\n"
  },
  {
    "path": "go/logic/hooks_test.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n         See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/testify/require\"\n\n\t\"github.com/github/gh-ost/go/base\"\n)\n\nfunc TestHooksExecutorExecuteHooks(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.AlterStatement = \"ENGINE=InnoDB\"\n\tmigrationContext.DatabaseName = \"test\"\n\tmigrationContext.Hostname = \"test.example.com\"\n\tmigrationContext.OriginalTableName = \"tablename\"\n\tmigrationContext.RowsDeltaEstimate = 1\n\tmigrationContext.RowsEstimate = 122\n\tmigrationContext.TotalRowsCopied = 123456\n\tmigrationContext.SetETADuration(time.Minute)\n\tmigrationContext.SetProgressPct(50)\n\thooksExecutor := NewHooksExecutor(migrationContext)\n\n\twriteTmpHookFunc := func(testName, hookName, script string) (path string, err error) {\n\t\tif path, err = os.MkdirTemp(\"\", testName); err != nil {\n\t\t\treturn path, err\n\t\t}\n\t\terr = os.WriteFile(filepath.Join(path, hookName), []byte(script), 0777)\n\t\treturn path, err\n\t}\n\n\tt.Run(\"does-not-exist\", func(t *testing.T) {\n\t\tmigrationContext.HooksPath = \"/does/not/exist\"\n\t\trequire.Nil(t, hooksExecutor.executeHooks(\"test-hook\"))\n\t})\n\n\tt.Run(\"failed\", func(t *testing.T) {\n\t\tvar err error\n\t\tif migrationContext.HooksPath, err = writeTmpHookFunc(\n\t\t\t\"TestHooksExecutorExecuteHooks-failed\",\n\t\t\t\"failed-hook\",\n\t\t\t\"#!/bin/sh\\nexit 1\",\n\t\t); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tdefer os.RemoveAll(migrationContext.HooksPath)\n\t\trequire.NotNil(t, hooksExecutor.executeHooks(\"failed-hook\"))\n\t})\n\n\tt.Run(\"success\", func(t *testing.T) {\n\t\tvar err error\n\t\tif migrationContext.HooksPath, err = writeTmpHookFunc(\n\t\t\t\"TestHooksExecutorExecuteHooks-success\",\n\t\t\t\"success-hook\",\n\t\t\t\"#!/bin/sh\\nenv\",\n\t\t); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tdefer os.RemoveAll(migrationContext.HooksPath)\n\n\t\tvar buf bytes.Buffer\n\t\thooksExecutor.writer = &buf\n\t\trequire.Nil(t, hooksExecutor.executeHooks(\"success-hook\", \"TEST=\"+t.Name()))\n\n\t\tscanner := bufio.NewScanner(&buf)\n\t\tfor scanner.Scan() {\n\t\t\tsplit := strings.SplitN(scanner.Text(), \"=\", 2)\n\t\t\tswitch split[0] {\n\t\t\tcase \"GH_OST_COPIED_ROWS\":\n\t\t\t\tcopiedRows, _ := strconv.ParseInt(split[1], 10, 64)\n\t\t\t\trequire.Equal(t, migrationContext.TotalRowsCopied, copiedRows)\n\t\t\tcase \"GH_OST_DATABASE_NAME\":\n\t\t\t\trequire.Equal(t, migrationContext.DatabaseName, split[1])\n\t\t\tcase \"GH_OST_DDL\":\n\t\t\t\trequire.Equal(t, migrationContext.AlterStatement, split[1])\n\t\t\tcase \"GH_OST_DRY_RUN\":\n\t\t\t\trequire.Equal(t, \"false\", split[1])\n\t\t\tcase \"GH_OST_ESTIMATED_ROWS\":\n\t\t\t\testimatedRows, _ := strconv.ParseInt(split[1], 10, 64)\n\t\t\t\trequire.Equal(t, int64(123), estimatedRows)\n\t\t\tcase \"GH_OST_ETA_SECONDS\":\n\t\t\t\tetaSeconds, _ := strconv.ParseInt(split[1], 10, 64)\n\t\t\t\trequire.Equal(t, int64(60), etaSeconds)\n\t\t\tcase \"GH_OST_EXECUTING_HOST\":\n\t\t\t\trequire.Equal(t, migrationContext.Hostname, split[1])\n\t\t\tcase \"GH_OST_GHOST_TABLE_NAME\":\n\t\t\t\trequire.Equal(t, fmt.Sprintf(\"_%s_gho\", migrationContext.OriginalTableName), split[1])\n\t\t\tcase \"GH_OST_OLD_TABLE_NAME\":\n\t\t\t\trequire.Equal(t, fmt.Sprintf(\"_%s_del\", migrationContext.OriginalTableName), split[1])\n\t\t\tcase \"GH_OST_PROGRESS\":\n\t\t\t\tprogress, _ := strconv.ParseFloat(split[1], 64)\n\t\t\t\trequire.Equal(t, 50.0, progress)\n\t\t\tcase \"GH_OST_TABLE_NAME\":\n\t\t\t\trequire.Equal(t, migrationContext.OriginalTableName, split[1])\n\t\t\tcase \"TEST\":\n\t\t\t\trequire.Equal(t, t.Name(), split[1])\n\t\t\t}\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "go/logic/inspect.go",
    "content": "/*\n   Copyright 2025 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"context\"\n\tgosql \"database/sql\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n\n\t\"github.com/openark/golib/sqlutils\"\n)\n\nconst startReplicationPostWait = 250 * time.Millisecond\nconst startReplicationMaxWait = 2 * time.Second\n\n// Inspector reads data from the read-MySQL-server (typically a replica, but can be the master)\n// It is used for gaining initial status and structure, and later also follow up on progress and changelog\ntype Inspector struct {\n\tconnectionConfig    *mysql.ConnectionConfig\n\tdb                  *gosql.DB\n\tdbVersion           string\n\tinformationSchemaDb *gosql.DB\n\tmigrationContext    *base.MigrationContext\n\tname                string\n}\n\nfunc NewInspector(migrationContext *base.MigrationContext) *Inspector {\n\treturn &Inspector{\n\t\tconnectionConfig: migrationContext.InspectorConnectionConfig,\n\t\tmigrationContext: migrationContext,\n\t\tname:             \"inspector\",\n\t}\n}\n\nfunc (this *Inspector) InitDBConnections() (err error) {\n\tinspectorUri := this.connectionConfig.GetDBUri(this.migrationContext.DatabaseName)\n\tif this.db, _, err = mysql.GetDB(this.migrationContext.Uuid, inspectorUri); err != nil {\n\t\treturn err\n\t}\n\n\tinformationSchemaUri := this.connectionConfig.GetDBUri(\"information_schema\")\n\tif this.informationSchemaDb, _, err = mysql.GetDB(this.migrationContext.Uuid, informationSchemaUri); err != nil {\n\t\treturn err\n\t}\n\n\tif err := this.validateConnection(); err != nil {\n\t\treturn err\n\t}\n\tthis.dbVersion = this.migrationContext.InspectorMySQLVersion\n\n\tif !this.migrationContext.AliyunRDS && !this.migrationContext.GoogleCloudPlatform && !this.migrationContext.AzureMySQL {\n\t\tif impliedKey, err := mysql.GetInstanceKey(this.db); err != nil {\n\t\t\treturn err\n\t\t} else {\n\t\t\tthis.connectionConfig.ImpliedKey = impliedKey\n\t\t}\n\t}\n\tif err := this.validateGrants(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.validateBinlogs(); err != nil {\n\t\treturn err\n\t}\n\tif this.migrationContext.UseGTIDs {\n\t\tif err := this.validateGTIDConfig(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := this.applyBinlogFormat(); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Inspector initiated on %+v, version %+v\", this.connectionConfig.ImpliedKey, this.migrationContext.InspectorMySQLVersion)\n\treturn nil\n}\n\nfunc (this *Inspector) ValidateOriginalTable() (err error) {\n\tif err := this.validateTable(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.validateTableForeignKeys(this.migrationContext.DiscardForeignKeys); err != nil {\n\t\treturn err\n\t}\n\tif err := this.validateTableTriggers(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.estimateTableRowsViaExplain(); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (this *Inspector) InspectTableColumnsAndUniqueKeys(tableName string) (columns *sql.ColumnList, virtualColumns *sql.ColumnList, uniqueKeys [](*sql.UniqueKey), err error) {\n\tuniqueKeys, err = this.getCandidateUniqueKeys(tableName)\n\tif err != nil {\n\t\treturn columns, virtualColumns, uniqueKeys, err\n\t}\n\tif len(uniqueKeys) == 0 {\n\t\treturn columns, virtualColumns, uniqueKeys, fmt.Errorf(\"No PRIMARY nor UNIQUE key found in table! Bailing out\")\n\t}\n\tcolumns, virtualColumns, err = mysql.GetTableColumns(this.db, this.migrationContext.DatabaseName, tableName)\n\tif err != nil {\n\t\treturn columns, virtualColumns, uniqueKeys, err\n\t}\n\n\treturn columns, virtualColumns, uniqueKeys, nil\n}\n\nfunc (this *Inspector) InspectOriginalTable() (err error) {\n\tthis.migrationContext.OriginalTableColumns, this.migrationContext.OriginalTableVirtualColumns, this.migrationContext.OriginalTableUniqueKeys, err = this.InspectTableColumnsAndUniqueKeys(this.migrationContext.OriginalTableName)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.OriginalTableAutoIncrement, err = this.getAutoIncrementValue(this.migrationContext.OriginalTableName)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// inspectOriginalAndGhostTables compares original and ghost tables to see whether the migration\n// makes sense and is valid. It extracts the list of shared columns and the chosen migration unique key\nfunc (this *Inspector) inspectOriginalAndGhostTables() (err error) {\n\toriginalNamesOnApplier := this.migrationContext.OriginalTableColumnsOnApplier.Names()\n\toriginalNames := this.migrationContext.OriginalTableColumns.Names()\n\tif !reflect.DeepEqual(originalNames, originalNamesOnApplier) {\n\t\treturn fmt.Errorf(\"It seems like table structure is not identical between master and replica. This scenario is not supported.\")\n\t}\n\n\tthis.migrationContext.GhostTableColumns, this.migrationContext.GhostTableVirtualColumns, this.migrationContext.GhostTableUniqueKeys, err = this.InspectTableColumnsAndUniqueKeys(this.migrationContext.GetGhostTableName())\n\tif err != nil {\n\t\treturn err\n\t}\n\tsharedUniqueKeys := this.getSharedUniqueKeys(this.migrationContext.OriginalTableUniqueKeys, this.migrationContext.GhostTableUniqueKeys)\n\tfor i, sharedUniqueKey := range sharedUniqueKeys {\n\t\tthis.applyColumnTypes(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, &sharedUniqueKey.Columns)\n\t\tuniqueKeyIsValid := true\n\t\tfor _, column := range sharedUniqueKey.Columns.Columns() {\n\t\t\tswitch column.Type {\n\t\t\tcase sql.FloatColumnType:\n\t\t\t\t{\n\t\t\t\t\tthis.migrationContext.Log.Warningf(\"Will not use %+v as shared key due to FLOAT data type\", sharedUniqueKey.Name)\n\t\t\t\t\tuniqueKeyIsValid = false\n\t\t\t\t}\n\t\t\tcase sql.JSONColumnType:\n\t\t\t\t{\n\t\t\t\t\t// Noteworthy that at this time MySQL does not allow JSON indexing anyhow, but this code\n\t\t\t\t\t// will remain in place to potentially handle the future case where JSON is supported in indexes.\n\t\t\t\t\tthis.migrationContext.Log.Warningf(\"Will not use %+v as shared key due to JSON data type\", sharedUniqueKey.Name)\n\t\t\t\t\tuniqueKeyIsValid = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif uniqueKeyIsValid {\n\t\t\tthis.migrationContext.UniqueKey = sharedUniqueKeys[i]\n\t\t\tbreak\n\t\t}\n\t}\n\tif this.migrationContext.UniqueKey == nil {\n\t\treturn fmt.Errorf(\"No shared unique key can be found after ALTER! Bailing out\")\n\t}\n\tthis.migrationContext.Log.Infof(\"Chosen shared unique key is %s\", this.migrationContext.UniqueKey.Name)\n\tif this.migrationContext.UniqueKey.HasNullable {\n\t\tif this.migrationContext.NullableUniqueKeyAllowed {\n\t\t\tthis.migrationContext.Log.Warningf(\"Chosen key (%s) has nullable columns. You have supplied with --allow-nullable-unique-key and so this migration proceeds. As long as there aren't NULL values in this key's column, migration should be fine. NULL values will corrupt migration's data\", this.migrationContext.UniqueKey)\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"Chosen key (%s) has nullable columns. Bailing out. To force this operation to continue, supply --allow-nullable-unique-key flag. Only do so if you are certain there are no actual NULL values in this key. As long as there aren't, migration should be fine. NULL values in columns of this key will corrupt migration's data\", this.migrationContext.UniqueKey)\n\t\t}\n\t}\n\n\tthis.migrationContext.SharedColumns, this.migrationContext.MappedSharedColumns = this.getSharedColumns(this.migrationContext.OriginalTableColumns, this.migrationContext.GhostTableColumns, this.migrationContext.OriginalTableVirtualColumns, this.migrationContext.GhostTableVirtualColumns, this.migrationContext.ColumnRenameMap)\n\tthis.migrationContext.Log.Infof(\"Shared columns are %s\", this.migrationContext.SharedColumns)\n\t// By fact that a non-empty unique key exists we also know the shared columns are non-empty\n\n\t// This additional step looks at which columns are unsigned. We could have merged this within\n\t// the `getTableColumns()` function, but it's a later patch and introduces some complexity; I feel\n\t// comfortable in doing this as a separate step.\n\tthis.applyColumnTypes(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, this.migrationContext.OriginalTableColumns, this.migrationContext.SharedColumns, &this.migrationContext.UniqueKey.Columns)\n\tthis.applyColumnTypes(this.migrationContext.DatabaseName, this.migrationContext.GetGhostTableName(), this.migrationContext.GhostTableColumns, this.migrationContext.MappedSharedColumns)\n\n\tfor i := range this.migrationContext.SharedColumns.Columns() {\n\t\tcolumn := this.migrationContext.SharedColumns.Columns()[i]\n\t\tmappedColumn := this.migrationContext.MappedSharedColumns.Columns()[i]\n\t\tif column.Name == mappedColumn.Name && column.Type == sql.DateTimeColumnType && mappedColumn.Type == sql.TimestampColumnType {\n\t\t\tthis.migrationContext.MappedSharedColumns.SetConvertDatetimeToTimestamp(column.Name, this.migrationContext.ApplierTimeZone)\n\t\t}\n\t\tif column.Name == mappedColumn.Name && column.Type == sql.EnumColumnType && mappedColumn.Charset != \"\" {\n\t\t\tthis.migrationContext.MappedSharedColumns.SetEnumToTextConversion(column.Name)\n\t\t\tthis.migrationContext.MappedSharedColumns.SetEnumValues(column.Name, column.EnumValues)\n\t\t}\n\t\tif column.Name == mappedColumn.Name && column.Charset != mappedColumn.Charset {\n\t\t\tthis.migrationContext.SharedColumns.SetCharsetConversion(column.Name, column.Charset, mappedColumn.Charset)\n\t\t}\n\t}\n\n\tfor _, column := range this.migrationContext.UniqueKey.Columns.Columns() {\n\t\tif this.migrationContext.GhostTableVirtualColumns.GetColumn(column.Name) != nil {\n\t\t\t// this is a virtual column\n\t\t\tcontinue\n\t\t}\n\t\tif this.migrationContext.MappedSharedColumns.HasTimezoneConversion(column.Name) {\n\t\t\treturn fmt.Errorf(\"No support at this time for converting a column from DATETIME to TIMESTAMP that is also part of the chosen unique key. Column: %s, key: %s\", column.Name, this.migrationContext.UniqueKey.Name)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// validateConnection issues a simple can-connect to MySQL\nfunc (this *Inspector) validateConnection() error {\n\tversion, err := base.ValidateConnection(this.db, this.connectionConfig, this.migrationContext, this.name)\n\tthis.migrationContext.InspectorMySQLVersion = version\n\treturn err\n}\n\n// validateGrants verifies the user by which we're executing has necessary grants\n// to do its thing.\nfunc (this *Inspector) validateGrants() error {\n\tquery := `show /* gh-ost */ grants for current_user()`\n\tfoundAll := false\n\tfoundSuper := false\n\tfoundReplicationClient := false\n\tfoundReplicationSlave := false\n\tfoundDBAll := false\n\n\terr := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {\n\t\tfor _, grantData := range rowMap {\n\t\t\tgrant := grantData.String\n\t\t\tif strings.Contains(grant, `GRANT ALL PRIVILEGES ON *.*`) {\n\t\t\t\tfoundAll = true\n\t\t\t}\n\t\t\tif strings.Contains(grant, `SUPER`) && strings.Contains(grant, ` ON *.*`) {\n\t\t\t\tfoundSuper = true\n\t\t\t}\n\t\t\tif strings.Contains(grant, `REPLICATION CLIENT`) && strings.Contains(grant, ` ON *.*`) {\n\t\t\t\tfoundReplicationClient = true\n\t\t\t}\n\t\t\tif strings.Contains(grant, `REPLICATION SLAVE`) && strings.Contains(grant, ` ON *.*`) {\n\t\t\t\tfoundReplicationSlave = true\n\t\t\t}\n\t\t\tif strings.Contains(grant, fmt.Sprintf(\"GRANT ALL PRIVILEGES ON `%s`.*\", this.migrationContext.DatabaseName)) {\n\t\t\t\tfoundDBAll = true\n\t\t\t}\n\t\t\tif strings.Contains(grant, fmt.Sprintf(\"GRANT ALL PRIVILEGES ON `%s`.*\", strings.Replace(this.migrationContext.DatabaseName, \"_\", \"\\\\_\", -1))) {\n\t\t\t\tfoundDBAll = true\n\t\t\t}\n\t\t\tif base.StringContainsAll(grant, `ALTER`, `CREATE`, `DELETE`, `DROP`, `INDEX`, `INSERT`, `LOCK TABLES`, `SELECT`, `TRIGGER`, `UPDATE`, ` ON *.*`) {\n\t\t\t\tfoundDBAll = true\n\t\t\t}\n\t\t\tif base.StringContainsAll(grant, `ALTER`, `CREATE`, `DELETE`, `DROP`, `INDEX`, `INSERT`, `LOCK TABLES`, `SELECT`, `TRIGGER`, `UPDATE`, fmt.Sprintf(\" ON `%s`.*\", this.migrationContext.DatabaseName)) {\n\t\t\t\tfoundDBAll = true\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.HasSuperPrivilege = foundSuper\n\n\tif foundAll {\n\t\tthis.migrationContext.Log.Infof(\"User has ALL privileges\")\n\t\treturn nil\n\t}\n\tif foundSuper && foundReplicationSlave && foundDBAll {\n\t\tthis.migrationContext.Log.Infof(\"User has SUPER, REPLICATION SLAVE privileges, and has ALL privileges on %s.*\", sql.EscapeName(this.migrationContext.DatabaseName))\n\t\treturn nil\n\t}\n\tif foundReplicationClient && foundReplicationSlave && foundDBAll {\n\t\tthis.migrationContext.Log.Infof(\"User has REPLICATION CLIENT, REPLICATION SLAVE privileges, and has ALL privileges on %s.*\", sql.EscapeName(this.migrationContext.DatabaseName))\n\t\treturn nil\n\t}\n\tthis.migrationContext.Log.Debugf(\"Privileges: Super: %t, REPLICATION CLIENT: %t, REPLICATION SLAVE: %t, ALL on *.*: %t, ALL on %s.*: %t\", foundSuper, foundReplicationClient, foundReplicationSlave, foundAll, sql.EscapeName(this.migrationContext.DatabaseName), foundDBAll)\n\treturn this.migrationContext.Log.Errorf(\"User has insufficient privileges for migration. Needed: SUPER|REPLICATION CLIENT, REPLICATION SLAVE and ALL on %s.*\", sql.EscapeName(this.migrationContext.DatabaseName))\n}\n\n// restartReplication is required so that we are _certain_ the binlog format and\n// row image settings have actually been applied to the replication thread.\n// It is entirely possible, for example, that the replication is using 'STATEMENT'\n// binlog format even as the variable says 'ROW'\nfunc (this *Inspector) restartReplication() error {\n\tthis.migrationContext.Log.Infof(\"Restarting replication on %s to make sure binlog settings apply to replication thread\", this.connectionConfig.Key.String())\n\n\tmasterKey, _ := mysql.GetMasterKeyFromSlaveStatus(this.dbVersion, this.connectionConfig)\n\tif masterKey == nil {\n\t\t// This is not a replica\n\t\treturn nil\n\t}\n\n\tvar stopError, startError error\n\treplicaTerm := mysql.ReplicaTermFor(this.dbVersion, `slave`)\n\t_, stopError = sqlutils.ExecNoPrepare(this.db, fmt.Sprintf(\"stop %s\", replicaTerm))\n\t_, startError = sqlutils.ExecNoPrepare(this.db, fmt.Sprintf(\"start %s\", replicaTerm))\n\tif stopError != nil {\n\t\treturn stopError\n\t}\n\tif startError != nil {\n\t\treturn startError\n\t}\n\n\t// loop until replication is running unless we hit a max timeout.\n\tstartTime := time.Now()\n\tfor {\n\t\treplicationRunning, err := this.validateReplicationRestarted()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Failed to validate if replication had been restarted: %w\", err)\n\t\t}\n\t\tif replicationRunning {\n\t\t\tbreak\n\t\t}\n\t\tif time.Since(startTime) > startReplicationMaxWait {\n\t\t\treturn fmt.Errorf(\"Replication did not restart within the maximum wait time of %s\", startReplicationMaxWait)\n\t\t}\n\t\tthis.migrationContext.Log.Debugf(\"Replication not yet restarted, waiting...\")\n\t\ttime.Sleep(startReplicationPostWait)\n\t}\n\n\tthis.migrationContext.Log.Debugf(\"Replication restarted\")\n\treturn nil\n}\n\n// validateReplicationRestarted checks that the Slave_IO_Running and Slave_SQL_Running are both 'Yes'\n// returns true if both are 'Yes', false otherwise\nfunc (this *Inspector) validateReplicationRestarted() (bool, error) {\n\terrNotRunning := fmt.Errorf(\"Replication not running on %s\", this.connectionConfig.Key.String())\n\tquery := fmt.Sprintf(\"show /* gh-ost */ %s\", mysql.ReplicaTermFor(this.dbVersion, \"slave status\"))\n\terr := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {\n\t\tioRunningTerm := mysql.ReplicaTermFor(this.dbVersion, \"Slave_IO_Running\")\n\t\tsqlRunningTerm := mysql.ReplicaTermFor(this.dbVersion, \"Slave_SQL_Running\")\n\t\tif rowMap.GetString(ioRunningTerm) != \"Yes\" || rowMap.GetString(sqlRunningTerm) != \"Yes\" {\n\t\t\treturn errNotRunning\n\t\t}\n\t\treturn nil\n\t})\n\n\tif err != nil {\n\t\t// If the error is that replication is not running, return that and not an error\n\t\tif errors.Is(err, errNotRunning) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n\n// applyBinlogFormat sets ROW binlog format and restarts replication to make\n// the replication thread apply it.\nfunc (this *Inspector) applyBinlogFormat() error {\n\tif this.migrationContext.RequiresBinlogFormatChange() {\n\t\tif !this.migrationContext.SwitchToRowBinlogFormat {\n\t\t\treturn fmt.Errorf(\"Existing binlog_format is %s. Am not switching it to ROW unless you specify --switch-to-rbr\", this.migrationContext.OriginalBinlogFormat)\n\t\t}\n\t\tif _, err := sqlutils.ExecNoPrepare(this.db, `set global binlog_format='ROW'`); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := sqlutils.ExecNoPrepare(this.db, `set session binlog_format='ROW'`); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := this.restartReplication(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tthis.migrationContext.Log.Debugf(\"'ROW' binlog format applied\")\n\t\treturn nil\n\t}\n\t// We already have RBR, no explicit switch\n\tif !this.migrationContext.AssumeRBR {\n\t\tif err := this.restartReplication(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// validateBinlogs checks that binary log configuration is good to go\nfunc (this *Inspector) validateBinlogs() error {\n\tquery := `select /* gh-ost */@@global.log_bin, @@global.binlog_format`\n\tvar hasBinaryLogs bool\n\tif err := this.db.QueryRow(query).Scan(&hasBinaryLogs, &this.migrationContext.OriginalBinlogFormat); err != nil {\n\t\treturn err\n\t}\n\tif !hasBinaryLogs {\n\t\treturn fmt.Errorf(\"%s must have binary logs enabled\", this.connectionConfig.Key.String())\n\t}\n\tif this.migrationContext.RequiresBinlogFormatChange() {\n\t\tif !this.migrationContext.SwitchToRowBinlogFormat {\n\t\t\treturn fmt.Errorf(\"You must be using ROW binlog format. I can switch it for you, provided --switch-to-rbr and that %s doesn't have replicas\", this.connectionConfig.Key.String())\n\t\t}\n\t\tquery := fmt.Sprintf(\"show /* gh-ost */ %s\", mysql.ReplicaTermFor(this.dbVersion, `slave hosts`))\n\t\tcountReplicas := 0\n\t\terr := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {\n\t\t\tcountReplicas++\n\t\t\treturn nil\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif countReplicas > 0 {\n\t\t\treturn fmt.Errorf(\"%s has %s binlog_format, but I'm too scared to change it to ROW because it has replicas. Bailing out\", this.connectionConfig.Key.String(), this.migrationContext.OriginalBinlogFormat)\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"%s has %s binlog_format. I will change it to ROW, and will NOT change it back, even in the event of failure.\", this.connectionConfig.Key.String(), this.migrationContext.OriginalBinlogFormat)\n\t}\n\tquery = `select /* gh-ost */ @@global.binlog_row_image`\n\tif err := this.db.QueryRow(query).Scan(&this.migrationContext.OriginalBinlogRowImage); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.OriginalBinlogRowImage = strings.ToUpper(this.migrationContext.OriginalBinlogRowImage)\n\tif this.migrationContext.OriginalBinlogRowImage != \"FULL\" {\n\t\treturn fmt.Errorf(\"%s has '%s' binlog_row_image, and only 'FULL' is supported. This operation cannot proceed. You may `set global binlog_row_image='full'` and try again\", this.connectionConfig.Key.String(), this.migrationContext.OriginalBinlogRowImage)\n\t}\n\n\tthis.migrationContext.Log.Infof(\"binary logs validated on %s\", this.connectionConfig.Key.String())\n\treturn nil\n}\n\n// validateGTIDConfig checks that the GTID configuration is good to go\nfunc (this *Inspector) validateGTIDConfig() error {\n\tvar gtidMode, enforceGtidConsistency string\n\tquery := `select @@global.gtid_mode, @@global.enforce_gtid_consistency`\n\tif err := this.db.QueryRow(query).Scan(&gtidMode, &enforceGtidConsistency); err != nil {\n\t\treturn err\n\t}\n\tenforceGtidConsistency = strings.ToUpper(enforceGtidConsistency)\n\tif strings.ToUpper(gtidMode) != \"ON\" || (enforceGtidConsistency != \"ON\" && enforceGtidConsistency != \"1\") {\n\t\treturn fmt.Errorf(\"%s must have gtid_mode=ON and enforce_gtid_consistency=ON to use GTID support\", this.connectionConfig.Key.String())\n\t}\n\n\tthis.migrationContext.Log.Infof(\"gtid config validated on %s\", this.connectionConfig.Key.String())\n\treturn nil\n}\n\n// validateLogSlaveUpdates checks that binary log log_slave_updates is set. This test is not required when migrating on replica or when migrating directly on master\nfunc (this *Inspector) validateLogSlaveUpdates() error {\n\tquery := `select /* gh-ost */ @@global.log_slave_updates`\n\tvar logSlaveUpdates bool\n\tif err := this.db.QueryRow(query).Scan(&logSlaveUpdates); err != nil {\n\t\treturn err\n\t}\n\n\tif logSlaveUpdates {\n\t\tthis.migrationContext.Log.Infof(\"log_slave_updates validated on %s\", this.connectionConfig.Key.String())\n\t\treturn nil\n\t}\n\n\tif this.migrationContext.IsTungsten {\n\t\tthis.migrationContext.Log.Warningf(\"log_slave_updates not found on %s, but --tungsten provided, so I'm proceeding\", this.connectionConfig.Key.String())\n\t\treturn nil\n\t}\n\n\tif this.migrationContext.TestOnReplica || this.migrationContext.MigrateOnReplica {\n\t\treturn fmt.Errorf(\"%s must have log_slave_updates enabled for testing/migrating on replica\", this.connectionConfig.Key.String())\n\t}\n\n\tif this.migrationContext.InspectorIsAlsoApplier() {\n\t\tthis.migrationContext.Log.Warningf(\"log_slave_updates not found on %s, but executing directly on master, so I'm proceeding\", this.connectionConfig.Key.String())\n\t\treturn nil\n\t}\n\n\treturn fmt.Errorf(\"%s must have log_slave_updates enabled for executing migration\", this.connectionConfig.Key.String())\n}\n\n// validateTable makes sure the table we need to operate on actually exists\nfunc (this *Inspector) validateTable() error {\n\tquery := fmt.Sprintf(`show /* gh-ost */ table status from %s like '%s'`, sql.EscapeName(this.migrationContext.DatabaseName), this.migrationContext.OriginalTableName)\n\n\ttableFound := false\n\terr := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {\n\t\tthis.migrationContext.TableEngine = rowMap.GetString(\"Engine\")\n\t\tthis.migrationContext.RowsEstimate = rowMap.GetInt64(\"Rows\")\n\t\tthis.migrationContext.UsedRowsEstimateMethod = base.TableStatusRowsEstimate\n\t\tif rowMap.GetString(\"Comment\") == \"VIEW\" {\n\t\t\treturn fmt.Errorf(\"%s.%s is a VIEW, not a real table. Bailing out\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t\t}\n\t\ttableFound = true\n\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !tableFound {\n\t\treturn this.migrationContext.Log.Errorf(\"Cannot find table %s.%s!\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t}\n\tthis.migrationContext.Log.Infof(\"Table found. Engine=%s\", this.migrationContext.TableEngine)\n\tthis.migrationContext.Log.Debugf(\"Estimated number of rows via STATUS: %d\", this.migrationContext.RowsEstimate)\n\treturn nil\n}\n\n// validateTableForeignKeys makes sure no foreign keys exist on the migrated table\nfunc (this *Inspector) validateTableForeignKeys(allowChildForeignKeys bool) error {\n\tif this.migrationContext.SkipForeignKeyChecks {\n\t\tthis.migrationContext.Log.Warning(\"--skip-foreign-key-checks provided: will not check for foreign keys\")\n\t\treturn nil\n\t}\n\tquery := `\n\t\tSELECT /* gh-ost */\n\t\t\tSUM(REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_SCHEMA=? AND TABLE_NAME=?) as num_child_side_fk,\n\t\t\tSUM(REFERENCED_TABLE_NAME IS NOT NULL AND REFERENCED_TABLE_SCHEMA=? AND REFERENCED_TABLE_NAME=?) as num_parent_side_fk\n\t\tFROM\n\t\t\tINFORMATION_SCHEMA.KEY_COLUMN_USAGE\n\t\tWHERE\n\t\t\tREFERENCED_TABLE_NAME IS NOT NULL\n\t\t\tAND (\n\t\t\t\t(TABLE_SCHEMA=? AND TABLE_NAME=?)\n\t\t\t\tOR\n\t\t\t\t(REFERENCED_TABLE_SCHEMA=? AND REFERENCED_TABLE_NAME=?)\n\t\t\t)`\n\tnumParentForeignKeys := 0\n\tnumChildForeignKeys := 0\n\terr := sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tnumChildForeignKeys = m.GetInt(\"num_child_side_fk\")\n\t\tnumParentForeignKeys = m.GetInt(\"num_parent_side_fk\")\n\t\treturn nil\n\t},\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.OriginalTableName,\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.OriginalTableName,\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.OriginalTableName,\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.OriginalTableName,\n\t)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif numParentForeignKeys > 0 {\n\t\treturn this.migrationContext.Log.Errorf(\"Found %d parent-side foreign keys on %s.%s. Parent-side foreign keys are not supported. Bailing out\", numParentForeignKeys, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t}\n\tif numChildForeignKeys > 0 {\n\t\tif allowChildForeignKeys {\n\t\t\tthis.migrationContext.Log.Debugf(\"Foreign keys found and will be dropped, as per given --discard-foreign-keys flag\")\n\t\t\treturn nil\n\t\t}\n\t\treturn this.migrationContext.Log.Errorf(\"Found %d child-side foreign keys on %s.%s. Child-side foreign keys are not supported. Bailing out\", numChildForeignKeys, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t}\n\tthis.migrationContext.Log.Debugf(\"Validated no foreign keys exist on table\")\n\treturn nil\n}\n\n// validateTableTriggers makes sure no triggers exist on the migrated table. if --include_triggers is used then it fetches the triggers\nfunc (this *Inspector) validateTableTriggers() error {\n\tquery := `\n\t\tSELECT /* gh-ost */ COUNT(*) AS num_triggers\n\t\tFROM\n\t\t\tINFORMATION_SCHEMA.TRIGGERS\n\t\tWHERE\n\t\t\tTRIGGER_SCHEMA=?\n\t\t\tAND EVENT_OBJECT_TABLE=?`\n\tnumTriggers := 0\n\terr := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {\n\t\tnumTriggers = rowMap.GetInt(\"num_triggers\")\n\n\t\treturn nil\n\t},\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.OriginalTableName,\n\t)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif numTriggers > 0 {\n\t\tif this.migrationContext.IncludeTriggers {\n\t\t\tthis.migrationContext.Log.Infof(\"Found %d triggers on %s.%s.\", numTriggers, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t\t\tthis.migrationContext.Triggers, err = mysql.GetTriggers(this.db, this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := this.validateGhostTriggersDontExist(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := this.validateGhostTriggersLength(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\treturn this.migrationContext.Log.Errorf(\"Found triggers on %s.%s. Tables with triggers are supported only when using \\\"include-triggers\\\" flag. Bailing out\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t}\n\tthis.migrationContext.Log.Debugf(\"Validated no triggers exist on table\")\n\treturn nil\n}\n\n// verifyTriggersDontExist verifies before createing new triggers we want to make sure these triggers dont exist already in the DB\nfunc (this *Inspector) validateGhostTriggersDontExist() error {\n\tif len(this.migrationContext.Triggers) > 0 {\n\t\tvar foundTriggers []string\n\t\tfor _, trigger := range this.migrationContext.Triggers {\n\t\t\ttriggerName := this.migrationContext.GetGhostTriggerName(trigger.Name)\n\t\t\tquery := \"select 1 from information_schema.triggers where trigger_name = ? and trigger_schema = ?\"\n\t\t\terr := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {\n\t\t\t\ttriggerExists := rowMap.GetInt(\"1\")\n\t\t\t\tif triggerExists == 1 {\n\t\t\t\t\tfoundTriggers = append(foundTriggers, triggerName)\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t},\n\t\t\t\ttriggerName,\n\t\t\t\tthis.migrationContext.DatabaseName,\n\t\t\t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif len(foundTriggers) > 0 {\n\t\t\treturn this.migrationContext.Log.Errorf(\"Found gh-ost triggers (%s). Please use a different suffix or drop them. Bailing out\", strings.Join(foundTriggers, \",\"))\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (this *Inspector) validateGhostTriggersLength() error {\n\tif len(this.migrationContext.Triggers) > 0 {\n\t\tvar foundTriggers []string\n\t\tfor _, trigger := range this.migrationContext.Triggers {\n\t\t\ttriggerName := this.migrationContext.GetGhostTriggerName(trigger.Name)\n\t\t\tif ok := this.migrationContext.ValidateGhostTriggerLengthBelowMaxLength(triggerName); !ok {\n\t\t\t\tfoundTriggers = append(foundTriggers, triggerName)\n\t\t\t}\n\t\t}\n\t\tif len(foundTriggers) > 0 {\n\t\t\treturn this.migrationContext.Log.Errorf(\"Gh-ost triggers (%s) length > %d characters. Bailing out\", strings.Join(foundTriggers, \",\"), mysql.MaxTableNameLength)\n\t\t}\n\t}\n\treturn nil\n}\n\n// estimateTableRowsViaExplain estimates number of rows on original table\nfunc (this *Inspector) estimateTableRowsViaExplain() error {\n\tquery := fmt.Sprintf(`explain select /* gh-ost */ * from %s.%s where 1=1`, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\n\toutputFound := false\n\terr := sqlutils.QueryRowsMap(this.db, query, func(rowMap sqlutils.RowMap) error {\n\t\tthis.migrationContext.RowsEstimate = rowMap.GetInt64(\"rows\")\n\t\tthis.migrationContext.UsedRowsEstimateMethod = base.ExplainRowsEstimate\n\t\toutputFound = true\n\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !outputFound {\n\t\treturn this.migrationContext.Log.Errorf(\"Cannot run EXPLAIN on %s.%s!\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t}\n\tthis.migrationContext.Log.Infof(\"Estimated number of rows via EXPLAIN: %d\", this.migrationContext.RowsEstimate)\n\treturn nil\n}\n\n// CountTableRows counts exact number of rows on the original table\nfunc (this *Inspector) CountTableRows(ctx context.Context) error {\n\tatomic.StoreInt64(&this.migrationContext.CountingRowsFlag, 1)\n\tdefer atomic.StoreInt64(&this.migrationContext.CountingRowsFlag, 0)\n\n\tthis.migrationContext.Log.Infof(\"As instructed, I'm issuing a SELECT COUNT(*) on the table. This may take a while\")\n\n\tconn, err := this.db.Conn(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer conn.Close()\n\n\tvar connectionID string\n\tif err := conn.QueryRowContext(ctx, `SELECT /* gh-ost */ CONNECTION_ID()`).Scan(&connectionID); err != nil {\n\t\treturn err\n\t}\n\n\tquery := fmt.Sprintf(`select /* gh-ost */ count(*) as count_rows from %s.%s`, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\tvar rowsEstimate int64\n\tif err := conn.QueryRowContext(ctx, query).Scan(&rowsEstimate); err != nil {\n\t\tif errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {\n\t\t\tthis.migrationContext.Log.Infof(\"exact row count cancelled (%s), likely because I'm about to cut over. I'm going to kill that query.\", ctx.Err())\n\t\t\treturn mysql.Kill(this.db, connectionID)\n\t\t}\n\t\treturn err\n\t}\n\n\t// row count query finished. nil out the cancel func, so the main migration thread\n\t// doesn't bother calling it after row copy is done.\n\tthis.migrationContext.SetCountTableRowsCancelFunc(nil)\n\n\tatomic.StoreInt64(&this.migrationContext.RowsEstimate, rowsEstimate)\n\tthis.migrationContext.UsedRowsEstimateMethod = base.CountRowsEstimate\n\n\tthis.migrationContext.Log.Infof(\"Exact number of rows via COUNT: %d\", rowsEstimate)\n\n\treturn nil\n}\n\n// applyColumnTypes\nfunc (this *Inspector) applyColumnTypes(databaseName, tableName string, columnsLists ...*sql.ColumnList) error {\n\tquery := `\n\t\tselect /* gh-ost */ *\n\t\tfrom\n\t\t\tinformation_schema.columns\n\t\twhere\n\t\t\ttable_schema=?\n\t\t\tand table_name=?`\n\terr := sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tcolumnName := m.GetString(\"COLUMN_NAME\")\n\t\tcolumnType := m.GetString(\"COLUMN_TYPE\")\n\t\tcolumnOctetLength := m.GetUint(\"CHARACTER_OCTET_LENGTH\")\n\t\tisNullable := m.GetString(\"IS_NULLABLE\")\n\t\textra := m.GetString(\"EXTRA\")\n\t\tfor _, columnsList := range columnsLists {\n\t\t\tcolumn := columnsList.GetColumn(columnName)\n\t\t\tif column == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcolumn.MySQLType = columnType\n\t\t\tif isNullable == \"YES\" {\n\t\t\t\tcolumn.Nullable = true\n\t\t\t}\n\n\t\t\tif strings.Contains(columnType, \"unsigned\") {\n\t\t\t\tcolumn.IsUnsigned = true\n\t\t\t}\n\t\t\tif strings.Contains(columnType, \"mediumint\") {\n\t\t\t\tcolumn.Type = sql.MediumIntColumnType\n\t\t\t}\n\t\t\tif strings.Contains(columnType, \"timestamp\") {\n\t\t\t\tcolumn.Type = sql.TimestampColumnType\n\t\t\t}\n\t\t\tif strings.Contains(columnType, \"datetime\") {\n\t\t\t\tcolumn.Type = sql.DateTimeColumnType\n\t\t\t}\n\t\t\tif strings.Contains(columnType, \"json\") {\n\t\t\t\tcolumn.Type = sql.JSONColumnType\n\t\t\t}\n\t\t\tif strings.Contains(columnType, \"float\") {\n\t\t\t\tcolumn.Type = sql.FloatColumnType\n\t\t\t}\n\t\t\tif strings.HasPrefix(columnType, \"enum\") {\n\t\t\t\tcolumn.Type = sql.EnumColumnType\n\t\t\t\tcolumn.EnumValues = sql.ParseEnumValues(m.GetString(\"COLUMN_TYPE\"))\n\t\t\t}\n\t\t\tif strings.HasPrefix(columnType, \"binary\") {\n\t\t\t\tcolumn.Type = sql.BinaryColumnType\n\t\t\t\tcolumn.BinaryOctetLength = columnOctetLength\n\t\t\t}\n\t\t\tif strings.Contains(extra, \" GENERATED\") {\n\t\t\t\tcolumn.IsVirtual = true\n\t\t\t}\n\t\t\tif charset := m.GetString(\"CHARACTER_SET_NAME\"); charset != \"\" {\n\t\t\t\tcolumn.Charset = charset\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}, databaseName, tableName)\n\treturn err\n}\n\n// getAutoIncrementValue get's the original table's AUTO_INCREMENT value, if exists (0 value if not exists)\nfunc (this *Inspector) getAutoIncrementValue(tableName string) (autoIncrement uint64, err error) {\n\tquery := `\n\t\tSELECT /* gh-ost */ AUTO_INCREMENT\n\t\tFROM\n\t\t\tINFORMATION_SCHEMA.TABLES\n\t\tWHERE\n\t\t\tTABLES.TABLE_SCHEMA = ?\n\t\t\tAND TABLES.TABLE_NAME = ?\n\t\t\tAND AUTO_INCREMENT IS NOT NULL`\n\terr = sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tautoIncrement = m.GetUint64(\"AUTO_INCREMENT\")\n\t\treturn nil\n\t}, this.migrationContext.DatabaseName, tableName)\n\treturn autoIncrement, err\n}\n\n// getCandidateUniqueKeys investigates a table and returns the list of unique keys\n// candidate for chunking\nfunc (this *Inspector) getCandidateUniqueKeys(tableName string) (uniqueKeys [](*sql.UniqueKey), err error) {\n\tquery := `\n\t\tSELECT /* gh-ost */\n\t\t\tCOLUMNS.TABLE_SCHEMA,\n\t\t\tCOLUMNS.TABLE_NAME,\n\t\t\tCOLUMNS.COLUMN_NAME,\n\t\t\tUNIQUES.INDEX_NAME,\n\t\t\tUNIQUES.COLUMN_NAMES,\n\t\t\tUNIQUES.COUNT_COLUMN_IN_INDEX,\n\t\t\tCOLUMNS.DATA_TYPE,\n\t\t\tCOLUMNS.CHARACTER_SET_NAME,\n\t\t\tLOCATE('auto_increment', EXTRA) > 0 as is_auto_increment,\n\t\t\thas_nullable\n\t\tFROM\n\t\t\tINFORMATION_SCHEMA.COLUMNS\n\t\tINNER JOIN (\n\t\t\tSELECT\n\t\t\t\tTABLE_SCHEMA,\n\t\t\t\tTABLE_NAME,\n\t\t\t\tINDEX_NAME,\n\t\t\t\tCOUNT(*) AS COUNT_COLUMN_IN_INDEX,\n\t\t\t\tGROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX ASC) AS COLUMN_NAMES,\n\t\t\t\tSUBSTRING_INDEX(GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX ASC), ',', 1) AS FIRST_COLUMN_NAME,\n\t\t\t\tSUM(NULLABLE='YES') > 0 AS has_nullable\n\t\t\tFROM\n\t\t\t\tINFORMATION_SCHEMA.STATISTICS\n\t\t\tWHERE\n\t\t\t\tNON_UNIQUE=0\n\t\t\t\tAND TABLE_SCHEMA = ?\n\t\t\t\tAND TABLE_NAME = ?\n\t\t\tGROUP BY\n\t\t\t\tTABLE_SCHEMA,\n\t\t\t\tTABLE_NAME,\n\t\t\t\tINDEX_NAME\n\t\t) AS UNIQUES\n\t\tON (\n\t\t\tCOLUMNS.COLUMN_NAME = UNIQUES.FIRST_COLUMN_NAME\n\t\t)\n\t\tWHERE\n\t\t\tCOLUMNS.TABLE_SCHEMA = ?\n\t\t\tAND COLUMNS.TABLE_NAME = ?\n\t\tORDER BY\n\t\t\tCOLUMNS.TABLE_SCHEMA, COLUMNS.TABLE_NAME,\n\t\t\tCASE UNIQUES.INDEX_NAME\n\t\t\t\tWHEN 'PRIMARY' THEN 0\n\t\t\t\tELSE 1\n\t\t\tEND,\n\t\t\tCASE has_nullable\n\t\t\t\tWHEN 0 THEN 0\n\t\t\t\tELSE 1\n\t\t\tEND,\n\t\t\tCASE IFNULL(CHARACTER_SET_NAME, '')\n\t\t\t\tWHEN '' THEN 0\n\t\t\t\tELSE 1\n\t\t\tEND,\n\t\t\tCASE DATA_TYPE\n\t\t\t\tWHEN 'tinyint' THEN 0\n\t\t\t\tWHEN 'smallint' THEN 1\n\t\t\t\tWHEN 'int' THEN 2\n\t\t\t\tWHEN 'bigint' THEN 3\n\t\t\t\tELSE 100\n\t\t\tEND,\n\t\t\tCOUNT_COLUMN_IN_INDEX`\n\terr = sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tuniqueKey := &sql.UniqueKey{\n\t\t\tName:            m.GetString(\"INDEX_NAME\"),\n\t\t\tColumns:         *sql.ParseColumnList(m.GetString(\"COLUMN_NAMES\")),\n\t\t\tHasNullable:     m.GetBool(\"has_nullable\"),\n\t\t\tIsAutoIncrement: m.GetBool(\"is_auto_increment\"),\n\t\t}\n\t\tuniqueKeys = append(uniqueKeys, uniqueKey)\n\t\treturn nil\n\t}, this.migrationContext.DatabaseName, tableName, this.migrationContext.DatabaseName, tableName)\n\tif err != nil {\n\t\treturn uniqueKeys, err\n\t}\n\tthis.migrationContext.Log.Debugf(\"Potential unique keys in %+v: %+v\", tableName, uniqueKeys)\n\treturn uniqueKeys, nil\n}\n\n// getSharedUniqueKeys returns the intersection of two given unique keys,\n// testing by list of columns\nfunc (this *Inspector) getSharedUniqueKeys(originalUniqueKeys, ghostUniqueKeys []*sql.UniqueKey) (uniqueKeys []*sql.UniqueKey) {\n\t// We actually do NOT rely on key name, just on the set of columns. This is because maybe\n\t// the ALTER is on the name itself...\n\tfor _, originalUniqueKey := range originalUniqueKeys {\n\t\tfor _, ghostUniqueKey := range ghostUniqueKeys {\n\t\t\tif originalUniqueKey.Columns.IsSubsetOf(&ghostUniqueKey.Columns) {\n\t\t\t\t// In case the unique key gets renamed in -alter, PanicOnWarnings needs to rely on the new name\n\t\t\t\t// to check SQL warnings on the ghost table, so return new name here.\n\t\t\t\toriginalUniqueKey.NameInGhostTable = ghostUniqueKey.Name\n\t\t\t\tuniqueKeys = append(uniqueKeys, originalUniqueKey)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn uniqueKeys\n}\n\n// getSharedColumns returns the intersection of two lists of columns in same order as the first list\nfunc (this *Inspector) getSharedColumns(originalColumns, ghostColumns *sql.ColumnList, originalVirtualColumns, ghostVirtualColumns *sql.ColumnList, columnRenameMap map[string]string) (*sql.ColumnList, *sql.ColumnList) {\n\tsharedColumnNames := []string{}\n\tfor _, originalColumn := range originalColumns.Names() {\n\t\tisSharedColumn := false\n\t\tfor _, ghostColumn := range ghostColumns.Names() {\n\t\t\tif strings.EqualFold(originalColumn, ghostColumn) {\n\t\t\t\tisSharedColumn = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif strings.EqualFold(columnRenameMap[originalColumn], ghostColumn) {\n\t\t\t\tisSharedColumn = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfor droppedColumn := range this.migrationContext.DroppedColumnsMap {\n\t\t\tif strings.EqualFold(originalColumn, droppedColumn) {\n\t\t\t\tisSharedColumn = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfor _, virtualColumn := range originalVirtualColumns.Names() {\n\t\t\tif strings.EqualFold(originalColumn, virtualColumn) {\n\t\t\t\tisSharedColumn = false\n\t\t\t}\n\t\t}\n\t\tfor _, virtualColumn := range ghostVirtualColumns.Names() {\n\t\t\tif strings.EqualFold(originalColumn, virtualColumn) {\n\t\t\t\tisSharedColumn = false\n\t\t\t}\n\t\t}\n\t\tif isSharedColumn {\n\t\t\tsharedColumnNames = append(sharedColumnNames, originalColumn)\n\t\t}\n\t}\n\tmappedSharedColumnNames := []string{}\n\tfor _, columnName := range sharedColumnNames {\n\t\tif mapped, ok := columnRenameMap[columnName]; ok {\n\t\t\tmappedSharedColumnNames = append(mappedSharedColumnNames, mapped)\n\t\t} else {\n\t\t\tmappedSharedColumnNames = append(mappedSharedColumnNames, columnName)\n\t\t}\n\t}\n\treturn sql.NewColumnList(sharedColumnNames), sql.NewColumnList(mappedSharedColumnNames)\n}\n\n// showCreateTable returns the `show create table` statement for given table\nfunc (this *Inspector) showCreateTable(tableName string) (createTableStatement string, err error) {\n\tvar dummy string\n\tquery := fmt.Sprintf(`show /* gh-ost */ create table %s.%s`, sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(tableName))\n\terr = this.db.QueryRow(query).Scan(&dummy, &createTableStatement)\n\treturn createTableStatement, err\n}\n\n// readChangelogState reads changelog hints\nfunc (this *Inspector) readChangelogState(hint string) (string, error) {\n\tquery := fmt.Sprintf(`\n\t\tselect /* gh-ost */ hint, value\n\t\tfrom\n\t\t\t%s.%s\n\t\twhere\n\t\t\thint = ? and id <= 255`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetChangelogTableName()),\n\t)\n\tresult := \"\"\n\terr := sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tresult = m.GetString(\"value\")\n\t\treturn nil\n\t}, hint)\n\treturn result, err\n}\n\nfunc (this *Inspector) getMasterConnectionConfig() (applierConfig *mysql.ConnectionConfig, err error) {\n\tthis.migrationContext.Log.Infof(\"Recursively searching for replication master\")\n\tvisitedKeys := mysql.NewInstanceKeyMap()\n\treturn mysql.GetMasterConnectionConfigSafe(this.dbVersion, this.connectionConfig, visitedKeys, this.migrationContext.AllowedMasterMaster)\n}\n\nfunc (this *Inspector) getReplicationLag() (replicationLag time.Duration, err error) {\n\treplicationLag, err = mysql.GetReplicationLagFromSlaveStatus(\n\t\tthis.dbVersion,\n\t\tthis.informationSchemaDb,\n\t)\n\treturn replicationLag, err\n}\n\nfunc (this *Inspector) Teardown() {\n\tthis.db.Close()\n\tthis.informationSchemaDb.Close()\n}\n"
  },
  {
    "path": "go/logic/inspect_test.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n         See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"testing\"\n\n\t\"github.com/github/gh-ost/go/sql\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc TestInspectGetSharedUniqueKeys(t *testing.T) {\n\torigUniqKeys := []*sql.UniqueKey{\n\t\t{Columns: *sql.NewColumnList([]string{\"id\", \"item_id\"})},\n\t\t{Columns: *sql.NewColumnList([]string{\"id\", \"org_id\"})},\n\t\t{Columns: *sql.NewColumnList([]string{\"id\"})},\n\t}\n\tghostUniqKeys := []*sql.UniqueKey{\n\t\t{Columns: *sql.NewColumnList([]string{\"id\", \"item_id\"})},\n\t\t{Columns: *sql.NewColumnList([]string{\"id\", \"org_id\"})},\n\t\t{Columns: *sql.NewColumnList([]string{\"item_id\", \"user_id\"})},\n\t}\n\tinspector := &Inspector{}\n\tsharedUniqKeys := inspector.getSharedUniqueKeys(origUniqKeys, ghostUniqKeys)\n\trequire.Len(t, sharedUniqKeys, 3)\n\trequire.Equal(t, \"id,item_id\", sharedUniqKeys[0].Columns.String())\n\trequire.Equal(t, \"id,org_id\", sharedUniqKeys[1].Columns.String())\n\trequire.Equal(t, \"id\", sharedUniqKeys[2].Columns.String())\n}\n"
  },
  {
    "path": "go/logic/migrator.go",
    "content": "/*\n   Copyright 2025 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/binlog\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n)\n\nvar (\n\tErrMigratorUnsupportedRenameAlter = errors.New(\"ALTER statement seems to RENAME the table. This is not supported, and you should run your RENAME outside gh-ost.\")\n\tErrMigrationNotAllowedOnMaster    = errors.New(\"It seems like this migration attempt to run directly on master. Preferably it would be executed on a replica (this reduces load from the master). To proceed please provide --allow-on-master.\")\n\tRetrySleepFn                      = time.Sleep\n\tcheckpointTimeout                 = 2 * time.Second\n)\n\ntype ChangelogState string\n\nconst (\n\tAllEventsUpToLockProcessed ChangelogState = \"AllEventsUpToLockProcessed\"\n\tGhostTableMigrated         ChangelogState = \"GhostTableMigrated\"\n\tMigrated                   ChangelogState = \"Migrated\"\n\tReadMigrationRangeValues   ChangelogState = \"ReadMigrationRangeValues\"\n)\n\nfunc ReadChangelogState(s string) ChangelogState {\n\treturn ChangelogState(strings.Split(s, \":\")[0])\n}\n\ntype tableWriteFunc func() error\n\ntype lockProcessedStruct struct {\n\tstate  string\n\tcoords mysql.BinlogCoordinates\n}\n\ntype applyEventStruct struct {\n\twriteFunc *tableWriteFunc\n\tdmlEvent  *binlog.BinlogDMLEvent\n\tcoords    mysql.BinlogCoordinates\n}\n\nfunc newApplyEventStructByFunc(writeFunc *tableWriteFunc) *applyEventStruct {\n\tresult := &applyEventStruct{writeFunc: writeFunc}\n\treturn result\n}\n\nfunc newApplyEventStructByDML(dmlEntry *binlog.BinlogEntry) *applyEventStruct {\n\tresult := &applyEventStruct{dmlEvent: dmlEntry.DmlEvent, coords: dmlEntry.Coordinates}\n\treturn result\n}\n\ntype PrintStatusRule int\n\nconst (\n\tNoPrintStatusRule           PrintStatusRule = iota\n\tHeuristicPrintStatusRule                    = iota\n\tForcePrintStatusRule                        = iota\n\tForcePrintStatusOnlyRule                    = iota\n\tForcePrintStatusAndHintRule                 = iota\n)\n\n// Migrator is the main schema migration flow manager.\ntype Migrator struct {\n\tappVersion       string\n\tparser           *sql.AlterTableParser\n\tinspector        *Inspector\n\tapplier          *Applier\n\teventsStreamer   *EventsStreamer\n\tserver           *Server\n\tthrottler        *Throttler\n\thooksExecutor    *HooksExecutor\n\tmigrationContext *base.MigrationContext\n\n\tfirstThrottlingCollected   chan bool\n\tghostTableMigrated         chan bool\n\trowCopyComplete            chan error\n\tallEventsUpToLockProcessed chan *lockProcessedStruct\n\tlastLockProcessed          *lockProcessedStruct\n\n\trowCopyCompleteFlag int64\n\t// copyRowsQueue should not be buffered; if buffered some non-damaging but\n\t//  excessive work happens at the end of the iteration as new copy-jobs arrive before realizing the copy is complete\n\tcopyRowsQueue    chan tableWriteFunc\n\tapplyEventsQueue chan *applyEventStruct\n\n\tfinishedMigrating int64\n}\n\nfunc NewMigrator(context *base.MigrationContext, appVersion string) *Migrator {\n\tmigrator := &Migrator{\n\t\tappVersion:                 appVersion,\n\t\thooksExecutor:              NewHooksExecutor(context),\n\t\tmigrationContext:           context,\n\t\tparser:                     sql.NewAlterTableParser(),\n\t\tghostTableMigrated:         make(chan bool),\n\t\tfirstThrottlingCollected:   make(chan bool, 3),\n\t\trowCopyComplete:            make(chan error),\n\t\tallEventsUpToLockProcessed: make(chan *lockProcessedStruct),\n\n\t\tcopyRowsQueue:     make(chan tableWriteFunc),\n\t\tapplyEventsQueue:  make(chan *applyEventStruct, base.MaxEventsBatchSize),\n\t\tfinishedMigrating: 0,\n\t}\n\treturn migrator\n}\n\n// sleepWhileTrue sleeps indefinitely until the given function returns 'false'\n// (or fails with error)\nfunc (this *Migrator) sleepWhileTrue(operation func() (bool, error)) error {\n\tfor {\n\t\t// Check for abort before continuing\n\t\tif err := this.checkAbort(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tshouldSleep, err := operation()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !shouldSleep {\n\t\t\treturn nil\n\t\t}\n\t\ttime.Sleep(time.Second)\n\t}\n}\n\nfunc (this *Migrator) retryBatchCopyWithHooks(operation func() error, notFatalHint ...bool) (err error) {\n\twrappedOperation := func() error {\n\t\tif err := operation(); err != nil {\n\t\t\tthis.hooksExecutor.onBatchCopyRetry(err.Error())\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn this.retryOperation(wrappedOperation, notFatalHint...)\n}\n\n// retryOperation attempts up to `count` attempts at running given function,\n// exiting as soon as it returns with non-error.\nfunc (this *Migrator) retryOperation(operation func() error, notFatalHint ...bool) (err error) {\n\tmaxRetries := int(this.migrationContext.MaxRetries())\n\tfor i := 0; i < maxRetries; i++ {\n\t\tif i != 0 {\n\t\t\t// sleep after previous iteration\n\t\t\tRetrySleepFn(1 * time.Second)\n\t\t}\n\t\terr = operation()\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\t\t// there's an error. Let's try again.\n\t}\n\tif len(notFatalHint) == 0 {\n\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, err)\n\t}\n\treturn err\n}\n\n// `retryOperationWithExponentialBackoff` attempts running given function, waiting 2^(n-1)\n// seconds between each attempt, where `n` is the running number of attempts. Exits\n// as soon as the function returns with non-error, or as soon as `MaxRetries`\n// attempts are reached. Wait intervals between attempts obey a maximum of\n// `ExponentialBackoffMaxInterval`.\nfunc (this *Migrator) retryOperationWithExponentialBackoff(operation func() error, notFatalHint ...bool) (err error) {\n\tmaxRetries := int(this.migrationContext.MaxRetries())\n\tmaxInterval := this.migrationContext.ExponentialBackoffMaxInterval\n\tfor i := 0; i < maxRetries; i++ {\n\t\tinterval := math.Min(\n\t\t\tfloat64(maxInterval),\n\t\t\tmath.Max(1, math.Exp2(float64(i-1))),\n\t\t)\n\n\t\tif i != 0 {\n\t\t\tRetrySleepFn(time.Duration(interval) * time.Second)\n\t\t}\n\t\terr = operation()\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\tif len(notFatalHint) == 0 {\n\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, err)\n\t}\n\treturn err\n}\n\n// consumeRowCopyComplete blocks on the rowCopyComplete channel once, and then\n// consumes and drops any further incoming events that may be left hanging.\nfunc (this *Migrator) consumeRowCopyComplete() {\n\tif err := <-this.rowCopyComplete; err != nil {\n\t\t// Abort synchronously to ensure checkAbort() sees the error immediately\n\t\tthis.abort(err)\n\t\t// Don't mark row copy as complete if there was an error\n\t\treturn\n\t}\n\tatomic.StoreInt64(&this.rowCopyCompleteFlag, 1)\n\tthis.migrationContext.MarkRowCopyEndTime()\n\tgo func() {\n\t\tfor err := range this.rowCopyComplete {\n\t\t\tif err != nil {\n\t\t\t\t// Abort synchronously to ensure the error is stored immediately\n\t\t\t\tthis.abort(err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n}\n\nfunc (this *Migrator) canStopStreaming() bool {\n\treturn atomic.LoadInt64(&this.migrationContext.CutOverCompleteFlag) != 0\n}\n\n// onChangelogEvent is called when a binlog event operation on the changelog table is intercepted.\nfunc (this *Migrator) onChangelogEvent(dmlEntry *binlog.BinlogEntry) (err error) {\n\t// Hey, I created the changelog table, I know the type of columns it has!\n\tswitch hint := dmlEntry.DmlEvent.NewColumnValues.StringColumn(2); hint {\n\tcase \"state\":\n\t\treturn this.onChangelogStateEvent(dmlEntry)\n\tcase \"heartbeat\":\n\t\treturn this.onChangelogHeartbeatEvent(dmlEntry)\n\tdefault:\n\t\treturn nil\n\t}\n}\n\nfunc (this *Migrator) onChangelogStateEvent(dmlEntry *binlog.BinlogEntry) (err error) {\n\tchangelogStateString := dmlEntry.DmlEvent.NewColumnValues.StringColumn(3)\n\tchangelogState := ReadChangelogState(changelogStateString)\n\tthis.migrationContext.Log.Infof(\"Intercepted changelog state %s\", changelogState)\n\tswitch changelogState {\n\tcase Migrated, ReadMigrationRangeValues:\n\t\t// no-op event\n\tcase GhostTableMigrated:\n\t\t// Use helper to prevent deadlock if migration aborts before receiver is ready\n\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.ghostTableMigrated, true)\n\tcase AllEventsUpToLockProcessed:\n\t\tvar applyEventFunc tableWriteFunc = func() error {\n\t\t\treturn base.SendWithContext(this.migrationContext.GetContext(), this.allEventsUpToLockProcessed, &lockProcessedStruct{\n\t\t\t\tstate:  changelogStateString,\n\t\t\t\tcoords: dmlEntry.Coordinates.Clone(),\n\t\t\t})\n\t\t}\n\t\t// at this point we know all events up to lock have been read from the streamer,\n\t\t// because the streamer works sequentially. So those events are either already handled,\n\t\t// or have event functions in applyEventsQueue.\n\t\t// So as not to create a potential deadlock, we write this func to applyEventsQueue\n\t\t// asynchronously, understanding it doesn't really matter.\n\t\tgo func() {\n\t\t\t// Use helper to prevent deadlock if buffer fills and executeWriteFuncs exits\n\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.applyEventsQueue, newApplyEventStructByFunc(&applyEventFunc))\n\t\t}()\n\tdefault:\n\t\treturn fmt.Errorf(\"Unknown changelog state: %+v\", changelogState)\n\t}\n\tthis.migrationContext.Log.Infof(\"Handled changelog state %s\", changelogState)\n\treturn nil\n}\n\nfunc (this *Migrator) onChangelogHeartbeatEvent(dmlEntry *binlog.BinlogEntry) (err error) {\n\tchangelogHeartbeatString := dmlEntry.DmlEvent.NewColumnValues.StringColumn(3)\n\n\theartbeatTime, err := time.Parse(time.RFC3339Nano, changelogHeartbeatString)\n\tif err != nil {\n\t\treturn this.migrationContext.Log.Errore(err)\n\t} else {\n\t\tthis.migrationContext.SetLastHeartbeatOnChangelogTime(heartbeatTime)\n\t\tthis.applier.CurrentCoordinatesMutex.Lock()\n\t\tthis.applier.CurrentCoordinates = dmlEntry.Coordinates\n\t\tthis.applier.CurrentCoordinatesMutex.Unlock()\n\t\treturn nil\n\t}\n}\n\n// abort stores the error, cancels the context, and logs the abort.\n// This is the common abort logic used by both listenOnPanicAbort and\n// consumeRowCopyComplete to ensure consistent error handling.\nfunc (this *Migrator) abort(err error) {\n\t// Store the error for Migrate() to return\n\tthis.migrationContext.SetAbortError(err)\n\n\t// Cancel the context to signal all goroutines to stop\n\tthis.migrationContext.CancelContext()\n\n\t// Log the error (but don't panic or exit)\n\tthis.migrationContext.Log.Errorf(\"Migration aborted: %v\", err)\n}\n\n// listenOnPanicAbort listens for fatal errors and initiates graceful shutdown\nfunc (this *Migrator) listenOnPanicAbort() {\n\terr := <-this.migrationContext.PanicAbort\n\tthis.abort(err)\n}\n\n// validateAlterStatement validates the `alter` statement meets criteria.\n// At this time this means:\n// - column renames are approved\n// - no table rename allowed\nfunc (this *Migrator) validateAlterStatement() (err error) {\n\tif this.parser.IsRenameTable() {\n\t\treturn ErrMigratorUnsupportedRenameAlter\n\t}\n\tif this.parser.HasNonTrivialRenames() && !this.migrationContext.SkipRenamedColumns {\n\t\tthis.migrationContext.ColumnRenameMap = this.parser.GetNonTrivialRenames()\n\t\tif !this.migrationContext.ApproveRenamedColumns {\n\t\t\treturn fmt.Errorf(\"gh-ost believes the ALTER statement renames columns, as follows: %v; as precaution, you are asked to confirm gh-ost is correct, and provide with `--approve-renamed-columns`, and we're all happy. Or you can skip renamed columns via `--skip-renamed-columns`, in which case column data may be lost\", this.parser.GetNonTrivialRenames())\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Alter statement has column(s) renamed. gh-ost finds the following renames: %v; --approve-renamed-columns is given and so migration proceeds.\", this.parser.GetNonTrivialRenames())\n\t}\n\tthis.migrationContext.DroppedColumnsMap = this.parser.DroppedColumnsMap()\n\treturn nil\n}\n\nfunc (this *Migrator) countTableRows() (err error) {\n\tif !this.migrationContext.CountTableRows {\n\t\t// Not counting; we stay with an estimate\n\t\treturn nil\n\t}\n\tif this.migrationContext.Noop {\n\t\tthis.migrationContext.Log.Debugf(\"Noop operation; not really counting table rows\")\n\t\treturn nil\n\t}\n\n\tcountRowsFunc := func(ctx context.Context) error {\n\t\tif err := this.inspector.CountTableRows(ctx); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := this.hooksExecutor.onRowCountComplete(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\tif this.migrationContext.ConcurrentCountTableRows {\n\t\t// store a cancel func so we can stop this query before a cut over\n\t\trowCountContext, rowCountCancel := context.WithCancel(context.Background())\n\t\tthis.migrationContext.SetCountTableRowsCancelFunc(rowCountCancel)\n\n\t\tthis.migrationContext.Log.Infof(\"As instructed, counting rows in the background; meanwhile I will use an estimated count, and will update it later on\")\n\t\tgo countRowsFunc(rowCountContext)\n\n\t\t// and we ignore errors, because this turns to be a background job\n\t\treturn nil\n\t}\n\treturn countRowsFunc(context.Background())\n}\n\nfunc (this *Migrator) createFlagFiles() (err error) {\n\tif this.migrationContext.PostponeCutOverFlagFile != \"\" {\n\t\tif !base.FileExists(this.migrationContext.PostponeCutOverFlagFile) {\n\t\t\tif err := base.TouchFile(this.migrationContext.PostponeCutOverFlagFile); err != nil {\n\t\t\t\treturn this.migrationContext.Log.Errorf(\"--postpone-cut-over-flag-file indicated by gh-ost is unable to create said file: %s\", err.Error())\n\t\t\t}\n\t\t\tthis.migrationContext.Log.Infof(\"Created postpone-cut-over-flag-file: %s\", this.migrationContext.PostponeCutOverFlagFile)\n\t\t}\n\t}\n\treturn nil\n}\n\n// checkAbort returns abort error if migration was aborted\nfunc (this *Migrator) checkAbort() error {\n\tif abortErr := this.migrationContext.GetAbortError(); abortErr != nil {\n\t\treturn abortErr\n\t}\n\n\tctx := this.migrationContext.GetContext()\n\tif ctx != nil {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\t// Context cancelled but no abort error stored yet\n\t\t\tif abortErr := this.migrationContext.GetAbortError(); abortErr != nil {\n\t\t\t\treturn abortErr\n\t\t\t}\n\t\t\treturn ctx.Err()\n\t\tdefault:\n\t\t\t// Not cancelled\n\t\t}\n\t}\n\treturn nil\n}\n\n// Migrate executes the complete migration logic. This is *the* major gh-ost function.\nfunc (this *Migrator) Migrate() (err error) {\n\tthis.migrationContext.Log.Infof(\"Migrating %s.%s\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\tthis.migrationContext.StartTime = time.Now()\n\n\t// Ensure context is cancelled on exit (cleanup)\n\tdefer this.migrationContext.CancelContext()\n\n\tif this.migrationContext.Hostname, err = os.Hostname(); err != nil {\n\t\treturn err\n\t}\n\n\tgo this.listenOnPanicAbort()\n\n\tif err := this.hooksExecutor.onStartup(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.parser.ParseAlterStatement(this.migrationContext.AlterStatement); err != nil {\n\t\treturn err\n\t}\n\tif err := this.validateAlterStatement(); err != nil {\n\t\treturn err\n\t}\n\n\t// After this point, we'll need to teardown anything that's been started\n\t//   so we don't leave things hanging around\n\tdefer this.teardown()\n\n\tif err := this.initiateInspector(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.checkAbort(); err != nil {\n\t\treturn err\n\t}\n\t// If we are resuming, we will initiateStreaming later when we know\n\t// the binlog coordinates to resume streaming from.\n\t// If not resuming, the streamer must be initiated before the applier,\n\t// so that the \"GhostTableMigrated\" event gets processed.\n\tif !this.migrationContext.Resume {\n\t\tif err := this.initiateStreaming(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := this.checkAbort(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := this.initiateApplier(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.checkAbort(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.createFlagFiles(); err != nil {\n\t\treturn err\n\t}\n\t// In MySQL 8.0 (and possibly earlier) some DDL statements can be applied instantly.\n\t// Attempt to do this if AttemptInstantDDL is set.\n\tif this.migrationContext.AttemptInstantDDL {\n\t\tif this.migrationContext.Noop {\n\t\t\tthis.migrationContext.Log.Debugf(\"Noop operation; not really attempting instant DDL\")\n\t\t} else {\n\t\t\tthis.migrationContext.Log.Infof(\"Attempting to execute alter with ALGORITHM=INSTANT\")\n\t\t\tif err := this.applier.AttemptInstantDDL(); err == nil {\n\t\t\t\tif err := this.finalCleanup(); err != nil {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tif err := this.hooksExecutor.onSuccess(); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tthis.migrationContext.Log.Infof(\"Success! table %s.%s migrated instantly\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t\t\t\treturn nil\n\t\t\t} else {\n\t\t\t\tthis.migrationContext.Log.Infof(\"ALGORITHM=INSTANT not supported for this operation, proceeding with original algorithm: %s\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\tinitialLag, _ := this.inspector.getReplicationLag()\n\tif !this.migrationContext.Resume {\n\t\tthis.migrationContext.Log.Infof(\"Waiting for ghost table to be migrated. Current lag is %+v\", initialLag)\n\t\t<-this.ghostTableMigrated\n\t\tthis.migrationContext.Log.Debugf(\"ghost table migrated\")\n\t}\n\t// Yay! We now know the Ghost and Changelog tables are good to examine!\n\t// When running on replica, this means the replica has those tables. When running\n\t// on master this is always true, of course, and yet it also implies this knowledge\n\t// is in the binlogs.\n\tif err := this.inspector.inspectOriginalAndGhostTables(); err != nil {\n\t\treturn err\n\t}\n\n\t// We can prepare some of the queries on the applier\n\tif err := this.applier.prepareQueries(); err != nil {\n\t\treturn err\n\t}\n\n\t// inspectOriginalAndGhostTables must be called before creating checkpoint table.\n\tif this.migrationContext.Checkpoint && !this.migrationContext.Resume {\n\t\tif err := this.applier.CreateCheckpointTable(); err != nil {\n\t\t\tthis.migrationContext.Log.Errorf(\"Unable to create checkpoint table, see further error details.\")\n\t\t}\n\t}\n\n\tif this.migrationContext.Resume {\n\t\tlastCheckpoint, err := this.applier.ReadLastCheckpoint()\n\t\tif err != nil {\n\t\t\treturn this.migrationContext.Log.Errorf(\"No checkpoint found, unable to resume: %+v\", err)\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Resuming from checkpoint coords=%+v range_min=%+v range_max=%+v iteration=%d\",\n\t\t\tlastCheckpoint.LastTrxCoords, lastCheckpoint.IterationRangeMin.String(), lastCheckpoint.IterationRangeMax.String(), lastCheckpoint.Iteration)\n\n\t\tthis.migrationContext.MigrationIterationRangeMinValues = lastCheckpoint.IterationRangeMin\n\t\tthis.migrationContext.MigrationIterationRangeMaxValues = lastCheckpoint.IterationRangeMax\n\t\tthis.migrationContext.Iteration = lastCheckpoint.Iteration\n\t\tthis.migrationContext.TotalRowsCopied = lastCheckpoint.RowsCopied\n\t\tthis.migrationContext.TotalDMLEventsApplied = lastCheckpoint.DMLApplied\n\t\tthis.migrationContext.InitialStreamerCoords = lastCheckpoint.LastTrxCoords\n\t\tif err := this.initiateStreaming(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Validation complete! We're good to execute this migration\n\tif err := this.hooksExecutor.onValidated(); err != nil {\n\t\treturn err\n\t}\n\n\tif err := this.initiateServer(); err != nil {\n\t\treturn err\n\t}\n\tdefer this.server.RemoveSocketFile()\n\n\tif err := this.countTableRows(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.addDMLEventsListener(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.applier.ReadMigrationRangeValues(); err != nil {\n\t\treturn err\n\t}\n\n\tthis.initiateThrottler()\n\n\tif err := this.hooksExecutor.onBeforeRowCopy(); err != nil {\n\t\treturn err\n\t}\n\tgo func() {\n\t\tif err := this.executeWriteFuncs(); err != nil {\n\t\t\t// Send error to PanicAbort to trigger abort\n\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, err)\n\t\t}\n\t}()\n\tgo this.iterateChunks()\n\tthis.migrationContext.MarkRowCopyStartTime()\n\tgo this.initiateStatus()\n\tif this.migrationContext.Checkpoint {\n\t\tgo this.checkpointLoop()\n\t}\n\n\tthis.migrationContext.Log.Debugf(\"Operating until row copy is complete\")\n\tthis.consumeRowCopyComplete()\n\tthis.migrationContext.Log.Infof(\"Row copy complete\")\n\t// Check if row copy was aborted due to error\n\tif err := this.checkAbort(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.hooksExecutor.onRowCopyComplete(); err != nil {\n\t\treturn err\n\t}\n\tthis.printStatus(ForcePrintStatusRule)\n\n\tif this.migrationContext.IsCountingTableRows() {\n\t\tthis.migrationContext.Log.Info(\"stopping query for exact row count, because that can accidentally lock out the cut over\")\n\t\tthis.migrationContext.CancelTableRowsCount()\n\t}\n\tif err := this.hooksExecutor.onBeforeCutOver(); err != nil {\n\t\treturn err\n\t}\n\tvar retrier func(func() error, ...bool) error\n\tif this.migrationContext.CutOverExponentialBackoff {\n\t\tretrier = this.retryOperationWithExponentialBackoff\n\t} else {\n\t\tretrier = this.retryOperation\n\t}\n\tif err := retrier(this.cutOver); err != nil {\n\t\treturn err\n\t}\n\tatomic.StoreInt64(&this.migrationContext.CutOverCompleteFlag, 1)\n\n\tif this.migrationContext.Checkpoint && !this.migrationContext.Noop {\n\t\tcutoverChk, err := this.CheckpointAfterCutOver()\n\t\tif err != nil {\n\t\t\tthis.migrationContext.Log.Warningf(\"failed to checkpoint after cutover: %+v\", err)\n\t\t} else {\n\t\t\tthis.migrationContext.Log.Infof(\"checkpoint success after cutover at coords=%+v\", cutoverChk.LastTrxCoords.DisplayString())\n\t\t}\n\t}\n\n\tif err := this.finalCleanup(); err != nil {\n\t\treturn nil\n\t}\n\tif err := this.hooksExecutor.onSuccess(); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Done migrating %s.%s\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\t// Final check for abort before declaring success\n\tif err := this.checkAbort(); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Revert reverts a migration that previously completed by applying all DML events that happened\n// after the original cutover, then doing another cutover to swap the tables back.\n// The steps are similar to Migrate(), but without row copying.\nfunc (this *Migrator) Revert() error {\n\tthis.migrationContext.Log.Infof(\"Reverting %s.%s from %s.%s\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OldTableName))\n\tthis.migrationContext.StartTime = time.Now()\n\n\t// Ensure context is cancelled on exit (cleanup)\n\tdefer this.migrationContext.CancelContext()\n\n\tvar err error\n\tif this.migrationContext.Hostname, err = os.Hostname(); err != nil {\n\t\treturn err\n\t}\n\n\tgo this.listenOnPanicAbort()\n\n\tif err := this.hooksExecutor.onStartup(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.validateAlterStatement(); err != nil {\n\t\treturn err\n\t}\n\tdefer this.teardown()\n\n\tif err := this.initiateInspector(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.checkAbort(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.initiateApplier(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.checkAbort(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.createFlagFiles(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.inspector.inspectOriginalAndGhostTables(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.applier.prepareQueries(); err != nil {\n\t\treturn err\n\t}\n\n\tlastCheckpoint, err := this.applier.ReadLastCheckpoint()\n\tif err != nil {\n\t\treturn this.migrationContext.Log.Errorf(\"No checkpoint found, unable to revert: %+v\", err)\n\t}\n\tif !lastCheckpoint.IsCutover {\n\t\treturn this.migrationContext.Log.Errorf(\"Last checkpoint is not after cutover, unable to revert: coords=%+v time=%+v\", lastCheckpoint.LastTrxCoords, lastCheckpoint.Timestamp)\n\t}\n\tthis.migrationContext.InitialStreamerCoords = lastCheckpoint.LastTrxCoords\n\tthis.migrationContext.TotalRowsCopied = lastCheckpoint.RowsCopied\n\tthis.migrationContext.MigrationIterationRangeMinValues = lastCheckpoint.IterationRangeMin\n\tthis.migrationContext.MigrationIterationRangeMaxValues = lastCheckpoint.IterationRangeMax\n\tif err := this.initiateStreaming(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.checkAbort(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.hooksExecutor.onValidated(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.initiateServer(); err != nil {\n\t\treturn err\n\t}\n\tdefer this.server.RemoveSocketFile()\n\tif err := this.addDMLEventsListener(); err != nil {\n\t\treturn err\n\t}\n\n\tthis.initiateThrottler()\n\tgo this.initiateStatus()\n\tgo func() {\n\t\tif err := this.executeDMLWriteFuncs(); err != nil {\n\t\t\t// Send error to PanicAbort to trigger abort\n\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, err)\n\t\t}\n\t}()\n\n\tthis.printStatus(ForcePrintStatusRule)\n\tvar retrier func(func() error, ...bool) error\n\tif this.migrationContext.CutOverExponentialBackoff {\n\t\tretrier = this.retryOperationWithExponentialBackoff\n\t} else {\n\t\tretrier = this.retryOperation\n\t}\n\tif err := this.hooksExecutor.onBeforeCutOver(); err != nil {\n\t\treturn err\n\t}\n\tif err := retrier(this.cutOver); err != nil {\n\t\treturn err\n\t}\n\tatomic.StoreInt64(&this.migrationContext.CutOverCompleteFlag, 1)\n\tif err := this.finalCleanup(); err != nil {\n\t\treturn nil\n\t}\n\tif err := this.hooksExecutor.onSuccess(); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Done reverting %s.%s\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.OriginalTableName))\n\treturn nil\n}\n\n// ExecOnFailureHook executes the onFailure hook, and this method is provided as the only external\n// hook access point\nfunc (this *Migrator) ExecOnFailureHook() (err error) {\n\treturn this.hooksExecutor.onFailure()\n}\n\nfunc (this *Migrator) handleCutOverResult(cutOverError error) (err error) {\n\tif this.migrationContext.TestOnReplica {\n\t\t// We're merely testing, we don't want to keep this state. Rollback the renames as possible\n\t\tthis.applier.RenameTablesRollback()\n\t}\n\tif cutOverError == nil {\n\t\treturn nil\n\t}\n\t// Only on error:\n\n\tif this.migrationContext.TestOnReplica {\n\t\t// With `--test-on-replica` we stop replication thread, and then proceed to use\n\t\t// the same cut-over phase as the master would use. That means we take locks\n\t\t// and swap the tables.\n\t\t// The difference is that we will later swap the tables back.\n\t\tif err := this.hooksExecutor.onStartReplication(); err != nil {\n\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t}\n\t\tif this.migrationContext.TestOnReplicaSkipReplicaStop {\n\t\t\tthis.migrationContext.Log.Warningf(\"--test-on-replica-skip-replica-stop enabled, we are not starting replication.\")\n\t\t} else {\n\t\t\tthis.migrationContext.Log.Debugf(\"testing on replica. Starting replication IO thread after cut-over failure\")\n\t\t\tif err := this.retryOperation(this.applier.StartReplication); err != nil {\n\t\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// cutOver performs the final step of migration, based on migration\n// type (on replica? atomic? safe?)\nfunc (this *Migrator) cutOver() (err error) {\n\tif this.migrationContext.Noop {\n\t\tthis.migrationContext.Log.Debugf(\"Noop operation; not really swapping tables\")\n\t\treturn nil\n\t}\n\tthis.migrationContext.MarkPointOfInterest()\n\tthis.throttler.throttle(func() {\n\t\tthis.migrationContext.Log.Debugf(\"throttling before swapping tables\")\n\t})\n\n\tthis.migrationContext.MarkPointOfInterest()\n\tthis.migrationContext.Log.Debugf(\"checking for cut-over postpone\")\n\tif err := this.sleepWhileTrue(\n\t\tfunc() (bool, error) {\n\t\t\theartbeatLag := this.migrationContext.TimeSinceLastHeartbeatOnChangelog()\n\t\t\tmaxLagMillisecondsThrottle := time.Duration(atomic.LoadInt64(&this.migrationContext.MaxLagMillisecondsThrottleThreshold)) * time.Millisecond\n\t\t\tcutOverLockTimeout := time.Duration(this.migrationContext.CutOverLockTimeoutSeconds) * time.Second\n\t\t\tif heartbeatLag > maxLagMillisecondsThrottle || heartbeatLag > cutOverLockTimeout {\n\t\t\t\tthis.migrationContext.Log.Debugf(\"current HeartbeatLag (%.2fs) is too high, it needs to be less than both --max-lag-millis (%.2fs) and --cut-over-lock-timeout-seconds (%.2fs) to continue\", heartbeatLag.Seconds(), maxLagMillisecondsThrottle.Seconds(), cutOverLockTimeout.Seconds())\n\t\t\t\treturn true, nil\n\t\t\t}\n\t\t\tif this.migrationContext.PostponeCutOverFlagFile == \"\" {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t\tif atomic.LoadInt64(&this.migrationContext.UserCommandedUnpostponeFlag) > 0 {\n\t\t\t\tatomic.StoreInt64(&this.migrationContext.UserCommandedUnpostponeFlag, 0)\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t\tif base.FileExists(this.migrationContext.PostponeCutOverFlagFile) {\n\t\t\t\t// Postpone file defined and exists!\n\t\t\t\tif atomic.LoadInt64(&this.migrationContext.IsPostponingCutOver) == 0 {\n\t\t\t\t\tif err := this.hooksExecutor.onBeginPostponed(); err != nil {\n\t\t\t\t\t\treturn true, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tatomic.StoreInt64(&this.migrationContext.IsPostponingCutOver, 1)\n\t\t\t\treturn true, nil\n\t\t\t}\n\t\t\treturn false, nil\n\t\t},\n\t); err != nil {\n\t\treturn err\n\t}\n\tatomic.StoreInt64(&this.migrationContext.IsPostponingCutOver, 0)\n\tthis.migrationContext.MarkPointOfInterest()\n\tthis.migrationContext.Log.Debugf(\"checking for cut-over postpone: complete\")\n\n\tif this.migrationContext.TestOnReplica {\n\t\t// With `--test-on-replica` we stop replication thread, and then proceed to use\n\t\t// the same cut-over phase as the master would use. That means we take locks\n\t\t// and swap the tables.\n\t\t// The difference is that we will later swap the tables back.\n\t\tif err := this.hooksExecutor.onStopReplication(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif this.migrationContext.TestOnReplicaSkipReplicaStop {\n\t\t\tthis.migrationContext.Log.Warningf(\"--test-on-replica-skip-replica-stop enabled, we are not stopping replication.\")\n\t\t} else {\n\t\t\tthis.migrationContext.Log.Debugf(\"testing on replica. Stopping replication IO thread\")\n\t\t\tif err := this.retryOperation(this.applier.StopReplication); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch this.migrationContext.CutOverType {\n\tcase base.CutOverAtomic:\n\t\t// Atomic solution: we use low timeout and multiple attempts. But for\n\t\t// each failed attempt, we throttle until replication lag is back to normal\n\t\terr = this.atomicCutOver()\n\tcase base.CutOverTwoStep:\n\t\terr = this.cutOverTwoStep()\n\tdefault:\n\t\treturn this.migrationContext.Log.Fatalf(\"Unknown cut-over type: %d; should never get here!\", this.migrationContext.CutOverType)\n\t}\n\tthis.handleCutOverResult(err)\n\treturn err\n}\n\n// Inject the \"AllEventsUpToLockProcessed\" state hint, wait for it to appear in the binary logs,\n// make sure the queue is drained.\nfunc (this *Migrator) waitForEventsUpToLock() error {\n\ttimeout := time.NewTimer(time.Second * time.Duration(this.migrationContext.CutOverLockTimeoutSeconds))\n\n\tthis.migrationContext.MarkPointOfInterest()\n\twaitForEventsUpToLockStartTime := time.Now()\n\n\tallEventsUpToLockProcessedChallenge := fmt.Sprintf(\"%s:%d\", string(AllEventsUpToLockProcessed), waitForEventsUpToLockStartTime.UnixNano())\n\tthis.migrationContext.Log.Infof(\"Writing changelog state: %+v\", allEventsUpToLockProcessedChallenge)\n\tif _, err := this.applier.WriteChangelogState(allEventsUpToLockProcessedChallenge); err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Waiting for events up to lock\")\n\tatomic.StoreInt64(&this.migrationContext.AllEventsUpToLockProcessedInjectedFlag, 1)\n\tvar lockProcessed *lockProcessedStruct\n\tfor found := false; !found; {\n\t\tselect {\n\t\tcase <-timeout.C:\n\t\t\t{\n\t\t\t\treturn this.migrationContext.Log.Errorf(\"Timeout while waiting for events up to lock\")\n\t\t\t}\n\t\tcase lockProcessed = <-this.allEventsUpToLockProcessed:\n\t\t\t{\n\t\t\t\tif lockProcessed.state == allEventsUpToLockProcessedChallenge {\n\t\t\t\t\tthis.migrationContext.Log.Infof(\"Waiting for events up to lock: got %s\", lockProcessed.state)\n\t\t\t\t\tfound = true\n\t\t\t\t\tthis.lastLockProcessed = lockProcessed\n\t\t\t\t} else {\n\t\t\t\t\tthis.migrationContext.Log.Infof(\"Waiting for events up to lock: skipping %s\", lockProcessed.state)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\twaitForEventsUpToLockDuration := time.Since(waitForEventsUpToLockStartTime)\n\n\tthis.migrationContext.Log.Infof(\"Done waiting for events up to lock; duration=%+v\", waitForEventsUpToLockDuration)\n\tthis.printStatus(ForcePrintStatusAndHintRule)\n\n\treturn nil\n}\n\n// cutOverTwoStep will lock down the original table, execute\n// what's left of last DML entries, and **non-atomically** swap original->old, then new->original.\n// There is a point in time where the \"original\" table does not exist and queries are non-blocked\n// and failing.\nfunc (this *Migrator) cutOverTwoStep() (err error) {\n\tatomic.StoreInt64(&this.migrationContext.InCutOverCriticalSectionFlag, 1)\n\tdefer atomic.StoreInt64(&this.migrationContext.InCutOverCriticalSectionFlag, 0)\n\tatomic.StoreInt64(&this.migrationContext.AllEventsUpToLockProcessedInjectedFlag, 0)\n\n\tif err := this.retryOperation(this.applier.LockOriginalTable); err != nil {\n\t\treturn err\n\t}\n\n\tif err := this.retryOperation(this.waitForEventsUpToLock); err != nil {\n\t\treturn err\n\t}\n\t// If we need to create triggers we need to do it here (only create part)\n\tif this.migrationContext.IncludeTriggers && len(this.migrationContext.Triggers) > 0 {\n\t\tif err := this.retryOperation(this.applier.CreateTriggersOnGhost); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := this.retryOperation(this.applier.SwapTablesQuickAndBumpy); err != nil {\n\t\treturn err\n\t}\n\tif err := this.retryOperation(this.applier.UnlockTables); err != nil {\n\t\treturn err\n\t}\n\n\tlockAndRenameDuration := this.migrationContext.RenameTablesEndTime.Sub(this.migrationContext.LockTablesStartTime)\n\trenameDuration := this.migrationContext.RenameTablesEndTime.Sub(this.migrationContext.RenameTablesStartTime)\n\tthis.migrationContext.Log.Debugf(\"Lock & rename duration: %s (rename only: %s). During this time, queries on %s were locked or failing\", lockAndRenameDuration, renameDuration, sql.EscapeName(this.migrationContext.OriginalTableName))\n\treturn nil\n}\n\n// atomicCutOver\nfunc (this *Migrator) atomicCutOver() (err error) {\n\tatomic.StoreInt64(&this.migrationContext.InCutOverCriticalSectionFlag, 1)\n\tdefer atomic.StoreInt64(&this.migrationContext.InCutOverCriticalSectionFlag, 0)\n\n\tokToUnlockTable := make(chan bool, 4)\n\tdefer func() {\n\t\tokToUnlockTable <- true\n\t}()\n\n\tatomic.StoreInt64(&this.migrationContext.AllEventsUpToLockProcessedInjectedFlag, 0)\n\n\tlockOriginalSessionIdChan := make(chan int64, 2)\n\ttableLocked := make(chan error, 2)\n\ttableUnlocked := make(chan error, 2)\n\tvar renameLockSessionId int64\n\tgo func() {\n\t\tif err := this.applier.AtomicCutOverMagicLock(lockOriginalSessionIdChan, tableLocked, okToUnlockTable, tableUnlocked, &renameLockSessionId); err != nil {\n\t\t\tthis.migrationContext.Log.Errore(err)\n\t\t}\n\t}()\n\tif err := <-tableLocked; err != nil {\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\tlockOriginalSessionId := <-lockOriginalSessionIdChan\n\tthis.migrationContext.Log.Infof(\"Session locking original & magic tables is %+v\", lockOriginalSessionId)\n\t// At this point we know the original table is locked.\n\t// We know any newly incoming DML on original table is blocked.\n\tif err := this.waitForEventsUpToLock(); err != nil {\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\n\t// If we need to create triggers we need to do it here (only create part)\n\tif this.migrationContext.IncludeTriggers && len(this.migrationContext.Triggers) > 0 {\n\t\tif err := this.applier.CreateTriggersOnGhost(); err != nil {\n\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t}\n\t}\n\n\t// Step 2\n\t// We now attempt an atomic RENAME on original & ghost tables, and expect it to block.\n\tthis.migrationContext.RenameTablesStartTime = time.Now()\n\n\tvar tableRenameKnownToHaveFailed int64\n\trenameSessionIdChan := make(chan int64, 2)\n\ttablesRenamed := make(chan error, 2)\n\tgo func() {\n\t\tif err := this.applier.AtomicCutoverRename(renameSessionIdChan, tablesRenamed); err != nil {\n\t\t\t// Abort! Release the lock\n\t\t\tatomic.StoreInt64(&tableRenameKnownToHaveFailed, 1)\n\t\t\tokToUnlockTable <- true\n\t\t}\n\t}()\n\trenameSessionId := <-renameSessionIdChan\n\tthis.migrationContext.Log.Infof(\"Session renaming tables is %+v\", renameSessionId)\n\n\twaitForRename := func() error {\n\t\tif atomic.LoadInt64(&tableRenameKnownToHaveFailed) == 1 {\n\t\t\t// We return `nil` here so as to avoid the `retry`. The RENAME has failed,\n\t\t\t// it won't show up in PROCESSLIST, no point in waiting\n\t\t\treturn nil\n\t\t}\n\t\treturn this.applier.ExpectProcess(renameSessionId, \"metadata lock\", \"rename\")\n\t}\n\t// Wait for the RENAME to appear in PROCESSLIST\n\tif err := this.retryOperation(waitForRename, true); err != nil {\n\t\t// Abort! Release the lock\n\t\tokToUnlockTable <- true\n\t\treturn err\n\t}\n\tif atomic.LoadInt64(&tableRenameKnownToHaveFailed) == 0 {\n\t\tthis.migrationContext.Log.Infof(\"Found atomic RENAME to be blocking, as expected. Double checking the lock is still in place (though I don't strictly have to)\")\n\t}\n\tif err := this.applier.ExpectUsedLock(lockOriginalSessionId); err != nil {\n\t\t// Abort operation. Just make sure to drop the magic table.\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\tthis.migrationContext.Log.Infof(\"Connection holding lock on original table still exists\")\n\n\t// Now that we've found the RENAME blocking, AND the locking connection still alive,\n\t// we know it is safe to proceed to release the lock\n\n\trenameLockSessionId = renameSessionId\n\tokToUnlockTable <- true\n\t// BAM! magic table dropped, original table lock is released\n\t// -> RENAME released -> queries on original are unblocked.\n\tif err := <-tableUnlocked; err != nil {\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\tif err := <-tablesRenamed; err != nil {\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\tthis.migrationContext.RenameTablesEndTime = time.Now()\n\n\t// ooh nice! We're actually truly and thankfully done\n\tlockAndRenameDuration := this.migrationContext.RenameTablesEndTime.Sub(this.migrationContext.LockTablesStartTime)\n\tthis.migrationContext.Log.Infof(\"Lock & rename duration: %s. During this time, queries on %s were blocked\", lockAndRenameDuration, sql.EscapeName(this.migrationContext.OriginalTableName))\n\treturn nil\n}\n\n// initiateServer begins listening on unix socket/tcp for incoming interactive commands\nfunc (this *Migrator) initiateServer() (err error) {\n\tvar f printStatusFunc = func(rule PrintStatusRule, writer io.Writer) {\n\t\tthis.printStatus(rule, writer)\n\t}\n\tthis.server = NewServer(this.migrationContext, this.hooksExecutor, f)\n\tif err := this.server.BindSocketFile(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.server.BindTCPPort(); err != nil {\n\t\treturn err\n\t}\n\n\tgo this.server.Serve()\n\treturn nil\n}\n\n// initiateInspector connects, validates and inspects the \"inspector\" server.\n// The \"inspector\" server is typically a replica; it is where we issue some\n// queries such as:\n// - table row count\n// - schema validation\n// - heartbeat\n// When `--allow-on-master` is supplied, the inspector is actually the master.\nfunc (this *Migrator) initiateInspector() (err error) {\n\tthis.inspector = NewInspector(this.migrationContext)\n\tif err := this.inspector.InitDBConnections(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.inspector.ValidateOriginalTable(); err != nil {\n\t\treturn err\n\t}\n\tif err := this.inspector.InspectOriginalTable(); err != nil {\n\t\treturn err\n\t}\n\t// So far so good, table is accessible and valid.\n\t// Let's get master connection config\n\tif this.migrationContext.AssumeMasterHostname == \"\" {\n\t\t// No forced master host; detect master\n\t\tif this.migrationContext.ApplierConnectionConfig, err = this.inspector.getMasterConnectionConfig(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Master found to be %+v\", *this.migrationContext.ApplierConnectionConfig.ImpliedKey)\n\t} else {\n\t\t// Forced master host.\n\t\tkey, err := mysql.ParseInstanceKey(this.migrationContext.AssumeMasterHostname)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tthis.migrationContext.ApplierConnectionConfig = this.migrationContext.InspectorConnectionConfig.DuplicateCredentials(*key)\n\t\tif this.migrationContext.CliMasterUser != \"\" {\n\t\t\tthis.migrationContext.ApplierConnectionConfig.User = this.migrationContext.CliMasterUser\n\t\t}\n\t\tif this.migrationContext.CliMasterPassword != \"\" {\n\t\t\tthis.migrationContext.ApplierConnectionConfig.Password = this.migrationContext.CliMasterPassword\n\t\t}\n\t\tif err := this.migrationContext.ApplierConnectionConfig.RegisterTLSConfig(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Master forced to be %+v\", *this.migrationContext.ApplierConnectionConfig.ImpliedKey)\n\t}\n\t// validate configs\n\tif this.migrationContext.TestOnReplica || this.migrationContext.MigrateOnReplica {\n\t\tif this.migrationContext.InspectorIsAlsoApplier() {\n\t\t\treturn fmt.Errorf(\"Instructed to --test-on-replica or --migrate-on-replica, but the server we connect to doesn't seem to be a replica\")\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"--test-on-replica or --migrate-on-replica given. Will not execute on master %+v but rather on replica %+v itself\",\n\t\t\t*this.migrationContext.ApplierConnectionConfig.ImpliedKey, *this.migrationContext.InspectorConnectionConfig.ImpliedKey,\n\t\t)\n\t\tthis.migrationContext.ApplierConnectionConfig = this.migrationContext.InspectorConnectionConfig.Duplicate()\n\t\tif this.migrationContext.GetThrottleControlReplicaKeys().Len() == 0 {\n\t\t\tthis.migrationContext.AddThrottleControlReplicaKey(this.migrationContext.InspectorConnectionConfig.Key)\n\t\t}\n\t} else if this.migrationContext.InspectorIsAlsoApplier() && !this.migrationContext.AllowedRunningOnMaster {\n\t\treturn ErrMigrationNotAllowedOnMaster\n\t}\n\tif err := this.inspector.validateLogSlaveUpdates(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// initiateStatus sets and activates the printStatus() ticker\nfunc (this *Migrator) initiateStatus() {\n\tthis.printStatus(ForcePrintStatusAndHintRule)\n\tticker := time.NewTicker(time.Second)\n\tdefer ticker.Stop()\n\tvar previousCount int64\n\tfor range ticker.C {\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn\n\t\t}\n\t\tgo this.printStatus(HeuristicPrintStatusRule)\n\t\ttotalCopied := atomic.LoadInt64(&this.migrationContext.TotalRowsCopied)\n\t\tif previousCount > 0 {\n\t\t\tcopiedThisLoop := totalCopied - previousCount\n\t\t\tatomic.StoreInt64(&this.migrationContext.EtaRowsPerSecond, copiedThisLoop)\n\t\t}\n\t\tpreviousCount = totalCopied\n\t}\n}\n\n// printMigrationStatusHint prints a detailed configuration dump, that is useful\n// to keep in mind; such as the name of migrated table, throttle params etc.\n// This gets printed at beginning and end of migration, every 10 minutes throughout\n// migration, and as response to the \"status\" interactive command.\nfunc (this *Migrator) printMigrationStatusHint(writers ...io.Writer) {\n\tw := io.MultiWriter(writers...)\n\tfmt.Fprintf(w, \"# Migrating %s.%s; Ghost table is %s.%s\\n\",\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.OriginalTableName),\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetGhostTableName()),\n\t)\n\tfmt.Fprintf(w, \"# Migrating %+v; inspecting %+v; executing on %+v\\n\",\n\t\t*this.applier.connectionConfig.ImpliedKey,\n\t\t*this.inspector.connectionConfig.ImpliedKey,\n\t\tthis.migrationContext.Hostname,\n\t)\n\tfmt.Fprintf(w, \"# Migration started at %+v\\n\",\n\t\tthis.migrationContext.StartTime.Format(time.RubyDate),\n\t)\n\tmaxLoad := this.migrationContext.GetMaxLoad()\n\tcriticalLoad := this.migrationContext.GetCriticalLoad()\n\tfmt.Fprintf(w, \"# chunk-size: %+v; max-lag-millis: %+vms; dml-batch-size: %+v; max-load: %s; critical-load: %s; nice-ratio: %f\\n\",\n\t\tatomic.LoadInt64(&this.migrationContext.ChunkSize),\n\t\tatomic.LoadInt64(&this.migrationContext.MaxLagMillisecondsThrottleThreshold),\n\t\tatomic.LoadInt64(&this.migrationContext.DMLBatchSize),\n\t\tmaxLoad.String(),\n\t\tcriticalLoad.String(),\n\t\tthis.migrationContext.GetNiceRatio(),\n\t)\n\tif this.migrationContext.ThrottleFlagFile != \"\" {\n\t\tsetIndicator := \"\"\n\t\tif base.FileExists(this.migrationContext.ThrottleFlagFile) {\n\t\t\tsetIndicator = \"[set]\"\n\t\t}\n\t\tfmt.Fprintf(w, \"# throttle-flag-file: %+v %+v\\n\",\n\t\t\tthis.migrationContext.ThrottleFlagFile, setIndicator,\n\t\t)\n\t}\n\tif this.migrationContext.ThrottleAdditionalFlagFile != \"\" {\n\t\tsetIndicator := \"\"\n\t\tif base.FileExists(this.migrationContext.ThrottleAdditionalFlagFile) {\n\t\t\tsetIndicator = \"[set]\"\n\t\t}\n\t\tfmt.Fprintf(w, \"# throttle-additional-flag-file: %+v %+v\\n\",\n\t\t\tthis.migrationContext.ThrottleAdditionalFlagFile, setIndicator,\n\t\t)\n\t}\n\tif throttleQuery := this.migrationContext.GetThrottleQuery(); throttleQuery != \"\" {\n\t\tfmt.Fprintf(w, \"# throttle-query: %+v\\n\",\n\t\t\tthrottleQuery,\n\t\t)\n\t}\n\tif throttleControlReplicaKeys := this.migrationContext.GetThrottleControlReplicaKeys(); throttleControlReplicaKeys.Len() > 0 {\n\t\tfmt.Fprintf(w, \"# throttle-control-replicas count: %+v\\n\",\n\t\t\tthrottleControlReplicaKeys.Len(),\n\t\t)\n\t}\n\n\tif this.migrationContext.PostponeCutOverFlagFile != \"\" {\n\t\tsetIndicator := \"\"\n\t\tif base.FileExists(this.migrationContext.PostponeCutOverFlagFile) {\n\t\t\tsetIndicator = \"[set]\"\n\t\t}\n\t\tfmt.Fprintf(w, \"# postpone-cut-over-flag-file: %+v %+v\\n\",\n\t\t\tthis.migrationContext.PostponeCutOverFlagFile, setIndicator,\n\t\t)\n\t}\n\tif this.migrationContext.PanicFlagFile != \"\" {\n\t\tfmt.Fprintf(w, \"# panic-flag-file: %+v\\n\",\n\t\t\tthis.migrationContext.PanicFlagFile,\n\t\t)\n\t}\n\tfmt.Fprintf(w, \"# Serving on unix socket: %+v\\n\",\n\t\tthis.migrationContext.ServeSocketFile,\n\t)\n\tif this.migrationContext.ServeTCPPort != 0 {\n\t\tfmt.Fprintf(w, \"# Serving on TCP port: %+v\\n\", this.migrationContext.ServeTCPPort)\n\t}\n}\n\n// getProgressPercent returns an estimate of migration progess as a percent.\nfunc (this *Migrator) getProgressPercent(rowsEstimate int64) (progressPct float64) {\n\tprogressPct = 100.0\n\tif rowsEstimate > 0 {\n\t\tprogressPct *= float64(this.migrationContext.GetTotalRowsCopied()) / float64(rowsEstimate)\n\t}\n\treturn progressPct\n}\n\n// getMigrationETA returns the estimated duration of the migration\nfunc (this *Migrator) getMigrationETA(rowsEstimate int64) (eta string, duration time.Duration) {\n\tduration = time.Duration(base.ETAUnknown)\n\tprogressPct := this.getProgressPercent(rowsEstimate)\n\tif progressPct >= 100.0 {\n\t\tduration = 0\n\t} else if progressPct >= 0.1 {\n\t\ttotalRowsCopied := this.migrationContext.GetTotalRowsCopied()\n\t\tetaRowsPerSecond := atomic.LoadInt64(&this.migrationContext.EtaRowsPerSecond)\n\t\tvar etaSeconds float64\n\t\t// If there is data available on our current row-copies-per-second rate, use it.\n\t\t// Otherwise we can fallback to the total elapsed time and extrapolate.\n\t\t// This is going to be less accurate on a longer copy as the insert rate\n\t\t// will tend to slow down.\n\t\tif etaRowsPerSecond > 0 {\n\t\t\tremainingRows := float64(rowsEstimate) - float64(totalRowsCopied)\n\t\t\tetaSeconds = remainingRows / float64(etaRowsPerSecond)\n\t\t} else {\n\t\t\telapsedRowCopySeconds := this.migrationContext.ElapsedRowCopyTime().Seconds()\n\t\t\ttotalExpectedSeconds := elapsedRowCopySeconds * float64(rowsEstimate) / float64(totalRowsCopied)\n\t\t\tetaSeconds = totalExpectedSeconds - elapsedRowCopySeconds\n\t\t}\n\t\tif etaSeconds >= 0 {\n\t\t\tduration = time.Duration(etaSeconds) * time.Second\n\t\t} else {\n\t\t\tduration = 0\n\t\t}\n\t}\n\n\tswitch duration {\n\tcase 0:\n\t\teta = \"due\"\n\tcase time.Duration(base.ETAUnknown):\n\t\teta = \"N/A\"\n\tdefault:\n\t\teta = base.PrettifyDurationOutput(duration)\n\t}\n\n\treturn eta, duration\n}\n\n// getMigrationStateAndETA returns the state and eta of the migration.\nfunc (this *Migrator) getMigrationStateAndETA(rowsEstimate int64) (state, eta string, etaDuration time.Duration) {\n\teta, etaDuration = this.getMigrationETA(rowsEstimate)\n\tstate = \"migrating\"\n\tif atomic.LoadInt64(&this.migrationContext.CountingRowsFlag) > 0 && !this.migrationContext.ConcurrentCountTableRows {\n\t\tstate = \"counting rows\"\n\t} else if atomic.LoadInt64(&this.migrationContext.IsPostponingCutOver) > 0 {\n\t\teta = \"due\"\n\t\tstate = \"postponing cut-over\"\n\t} else if isThrottled, throttleReason, _ := this.migrationContext.IsThrottled(); isThrottled {\n\t\tstate = fmt.Sprintf(\"throttled, %s\", throttleReason)\n\t}\n\treturn state, eta, etaDuration\n}\n\n// shouldPrintStatus returns true when the migrator is due to print status info.\nfunc (this *Migrator) shouldPrintStatus(rule PrintStatusRule, elapsedSeconds int64, etaDuration time.Duration) (shouldPrint bool) {\n\tif rule != HeuristicPrintStatusRule {\n\t\treturn true\n\t}\n\n\tetaSeconds := etaDuration.Seconds()\n\tif elapsedSeconds <= 60 {\n\t\tshouldPrint = true\n\t} else if etaSeconds <= 60 {\n\t\tshouldPrint = true\n\t} else if etaSeconds <= 180 {\n\t\tshouldPrint = (elapsedSeconds%5 == 0)\n\t} else if elapsedSeconds <= 180 {\n\t\tshouldPrint = (elapsedSeconds%5 == 0)\n\t} else if this.migrationContext.TimeSincePointOfInterest().Seconds() <= 60 {\n\t\tshouldPrint = (elapsedSeconds%5 == 0)\n\t} else {\n\t\tshouldPrint = (elapsedSeconds%30 == 0)\n\t}\n\n\treturn shouldPrint\n}\n\n// shouldPrintMigrationStatus returns true when the migrator is due to print the migration status hint\nfunc (this *Migrator) shouldPrintMigrationStatusHint(rule PrintStatusRule, elapsedSeconds int64) (shouldPrint bool) {\n\tif elapsedSeconds%600 == 0 {\n\t\tshouldPrint = true\n\t} else if rule == ForcePrintStatusAndHintRule {\n\t\tshouldPrint = true\n\t}\n\treturn shouldPrint\n}\n\n// printStatus prints the progress status, and optionally additionally detailed\n// dump of configuration.\n// `rule` indicates the type of output expected.\n// By default the status is written to standard output, but other writers can\n// be used as well.\nfunc (this *Migrator) printStatus(rule PrintStatusRule, writers ...io.Writer) {\n\tif rule == NoPrintStatusRule {\n\t\treturn\n\t}\n\twriters = append(writers, os.Stdout)\n\n\telapsedTime := this.migrationContext.ElapsedTime()\n\telapsedSeconds := int64(elapsedTime.Seconds())\n\ttotalRowsCopied := this.migrationContext.GetTotalRowsCopied()\n\trowsEstimate := atomic.LoadInt64(&this.migrationContext.RowsEstimate) + atomic.LoadInt64(&this.migrationContext.RowsDeltaEstimate)\n\tif atomic.LoadInt64(&this.rowCopyCompleteFlag) == 1 {\n\t\t// Done copying rows. The totalRowsCopied value is the de-facto number of rows,\n\t\t// and there is no further need to keep updating the value.\n\t\trowsEstimate = totalRowsCopied\n\t}\n\n\t// we take the opportunity to update migration context with progressPct\n\tprogressPct := this.getProgressPercent(rowsEstimate)\n\tthis.migrationContext.SetProgressPct(progressPct)\n\n\t// Before status, let's see if we should print a nice reminder for what exactly we're doing here.\n\tif this.shouldPrintMigrationStatusHint(rule, elapsedSeconds) {\n\t\tthis.printMigrationStatusHint(writers...)\n\t}\n\n\t// Get state + ETA\n\tstate, eta, etaDuration := this.getMigrationStateAndETA(rowsEstimate)\n\tthis.migrationContext.SetETADuration(etaDuration)\n\n\tif !this.shouldPrintStatus(rule, elapsedSeconds, etaDuration) {\n\t\treturn\n\t}\n\n\tcurrentBinlogCoordinates := this.eventsStreamer.GetCurrentBinlogCoordinates()\n\n\tstatus := fmt.Sprintf(\"Copy: %d/%d %.1f%%; Applied: %d; Backlog: %d/%d; Time: %+v(total), %+v(copy); streamer: %+v; Lag: %.2fs, HeartbeatLag: %.2fs, State: %s; ETA: %s\",\n\t\ttotalRowsCopied, rowsEstimate, progressPct,\n\t\tatomic.LoadInt64(&this.migrationContext.TotalDMLEventsApplied),\n\t\tlen(this.applyEventsQueue), cap(this.applyEventsQueue),\n\t\tbase.PrettifyDurationOutput(elapsedTime), base.PrettifyDurationOutput(this.migrationContext.ElapsedRowCopyTime()),\n\t\tcurrentBinlogCoordinates.DisplayString(),\n\t\tthis.migrationContext.GetCurrentLagDuration().Seconds(),\n\t\tthis.migrationContext.TimeSinceLastHeartbeatOnChangelog().Seconds(),\n\t\tstate,\n\t\teta,\n\t)\n\tthis.applier.WriteChangelog(\n\t\tfmt.Sprintf(\"copy iteration %d at %d\", this.migrationContext.GetIteration(), time.Now().Unix()),\n\t\tstate,\n\t)\n\tw := io.MultiWriter(writers...)\n\tfmt.Fprintln(w, status)\n\n\t// This \"hack\" is required here because the underlying logging library\n\t// github.com/outbrain/golib/log provides two functions Info and Infof; but the arguments of\n\t// both these functions are eventually redirected to the same function, which internally calls\n\t// fmt.Sprintf. So, the argument of every function called on the DefaultLogger object\n\t// migrationContext.Log will eventually pass through fmt.Sprintf, and thus the '%' character\n\t// needs to be escaped.\n\tthis.migrationContext.Log.Info(strings.Replace(status, \"%\", \"%%\", 1))\n\n\thooksStatusIntervalSec := this.migrationContext.HooksStatusIntervalSec\n\tif hooksStatusIntervalSec > 0 && elapsedSeconds%hooksStatusIntervalSec == 0 {\n\t\tthis.hooksExecutor.onStatus(status)\n\t}\n}\n\n// initiateStreaming begins streaming of binary log events and registers listeners for such events\nfunc (this *Migrator) initiateStreaming() error {\n\tthis.eventsStreamer = NewEventsStreamer(this.migrationContext)\n\tif err := this.eventsStreamer.InitDBConnections(); err != nil {\n\t\treturn err\n\t}\n\tthis.eventsStreamer.AddListener(\n\t\tfalse,\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.GetChangelogTableName(),\n\t\tfunc(dmlEntry *binlog.BinlogEntry) error {\n\t\t\treturn this.onChangelogEvent(dmlEntry)\n\t\t},\n\t)\n\n\tgo func() {\n\t\tthis.migrationContext.Log.Debugf(\"Beginning streaming\")\n\t\terr := this.eventsStreamer.StreamEvents(this.canStopStreaming)\n\t\tif err != nil {\n\t\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, err)\n\t\t}\n\t\tthis.migrationContext.Log.Debugf(\"Done streaming\")\n\t}()\n\n\tgo func() {\n\t\tticker := time.NewTicker(time.Second)\n\t\tdefer ticker.Stop()\n\t\tfor range ticker.C {\n\t\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.migrationContext.SetRecentBinlogCoordinates(this.eventsStreamer.GetCurrentBinlogCoordinates())\n\t\t}\n\t}()\n\treturn nil\n}\n\n// addDMLEventsListener begins listening for binlog events on the original table,\n// and creates & enqueues a write task per such event.\nfunc (this *Migrator) addDMLEventsListener() error {\n\terr := this.eventsStreamer.AddListener(\n\t\tfalse,\n\t\tthis.migrationContext.DatabaseName,\n\t\tthis.migrationContext.OriginalTableName,\n\t\tfunc(dmlEntry *binlog.BinlogEntry) error {\n\t\t\t// Use helper to prevent deadlock if buffer fills and executeWriteFuncs exits\n\t\t\t// This is critical because this callback blocks the event streamer\n\t\t\treturn base.SendWithContext(this.migrationContext.GetContext(), this.applyEventsQueue, newApplyEventStructByDML(dmlEntry))\n\t\t},\n\t)\n\treturn err\n}\n\n// initiateThrottler kicks in the throttling collection and the throttling checks.\nfunc (this *Migrator) initiateThrottler() {\n\tthis.throttler = NewThrottler(this.migrationContext, this.applier, this.inspector, this.appVersion)\n\n\tgo this.throttler.initiateThrottlerCollection(this.firstThrottlingCollected)\n\tthis.migrationContext.Log.Infof(\"Waiting for first throttle metrics to be collected\")\n\t<-this.firstThrottlingCollected // replication lag\n\t<-this.firstThrottlingCollected // HTTP status\n\t<-this.firstThrottlingCollected // other, general metrics\n\tthis.migrationContext.Log.Infof(\"First throttle metrics collected\")\n\tgo this.throttler.initiateThrottlerChecks()\n}\n\nfunc (this *Migrator) initiateApplier() error {\n\tthis.applier = NewApplier(this.migrationContext)\n\tif err := this.applier.InitDBConnections(); err != nil {\n\t\treturn err\n\t}\n\tif this.migrationContext.Revert {\n\t\tif err := this.applier.CreateChangelogTable(); err != nil {\n\t\t\tthis.migrationContext.Log.Errorf(\"Unable to create changelog table, see further error details. Perhaps a previous migration failed without dropping the table? OR is there a running migration? Bailing out\")\n\t\t\treturn err\n\t\t}\n\t} else if !this.migrationContext.Resume {\n\t\tif err := this.applier.ValidateOrDropExistingTables(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := this.applier.CreateChangelogTable(); err != nil {\n\t\t\tthis.migrationContext.Log.Errorf(\"Unable to create changelog table, see further error details. Perhaps a previous migration failed without dropping the table? OR is there a running migration? Bailing out\")\n\t\t\treturn err\n\t\t}\n\t\tif err := this.applier.CreateGhostTable(); err != nil {\n\t\t\tthis.migrationContext.Log.Errorf(\"Unable to create ghost table, see further error details. Perhaps a previous migration failed without dropping the table? Bailing out\")\n\t\t\treturn err\n\t\t}\n\t\tif err := this.applier.AlterGhost(); err != nil {\n\t\t\tthis.migrationContext.Log.Errorf(\"Unable to ALTER ghost table, see further error details. Bailing out\")\n\t\t\treturn err\n\t\t}\n\n\t\tif this.migrationContext.OriginalTableAutoIncrement > 0 && !this.parser.IsAutoIncrementDefined() {\n\t\t\t// Original table has AUTO_INCREMENT value and the -alter statement does not indicate any override,\n\t\t\t// so we should copy AUTO_INCREMENT value onto our ghost table.\n\t\t\tif err := this.applier.AlterGhostAutoIncrement(); err != nil {\n\t\t\t\tthis.migrationContext.Log.Errorf(\"Unable to ALTER ghost table AUTO_INCREMENT value, see further error details. Bailing out\")\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif _, err := this.applier.WriteChangelogState(string(GhostTableMigrated)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// ensure performance_schema.metadata_locks is available.\n\tif err := this.applier.StateMetadataLockInstrument(); err != nil {\n\t\tthis.migrationContext.Log.Warning(\"Unable to enable metadata lock instrument, see further error details.\")\n\t}\n\tif !this.migrationContext.IsOpenMetadataLockInstruments {\n\t\tif !this.migrationContext.SkipMetadataLockCheck {\n\t\t\treturn this.migrationContext.Log.Errorf(\"Bailing out because metadata lock instrument not enabled. Use --skip-metadata-lock-check if you wish to proceed without. See https://github.com/github/gh-ost/pull/1536 for details.\")\n\t\t}\n\t\tthis.migrationContext.Log.Warning(\"Proceeding without metadata lock check. There is a small chance of data loss if another session accesses the ghost table during cut-over. See https://github.com/github/gh-ost/pull/1536 for details.\")\n\t}\n\n\tgo this.applier.InitiateHeartbeat()\n\treturn nil\n}\n\n// iterateChunks iterates the existing table rows, and generates a copy task of\n// a chunk of rows onto the ghost table.\nfunc (this *Migrator) iterateChunks() error {\n\tterminateRowIteration := func(err error) error {\n\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.rowCopyComplete, err)\n\t\treturn this.migrationContext.Log.Errore(err)\n\t}\n\tif this.migrationContext.Noop {\n\t\tthis.migrationContext.Log.Debugf(\"Noop operation; not really copying data\")\n\t\treturn terminateRowIteration(nil)\n\t}\n\tif this.migrationContext.MigrationRangeMinValues == nil {\n\t\tthis.migrationContext.Log.Debugf(\"No rows found in table. Rowcopy will be implicitly empty\")\n\t\treturn terminateRowIteration(nil)\n\t}\n\n\tvar hasNoFurtherRangeFlag int64\n\t// Iterate per chunk:\n\tfor {\n\t\tif err := this.checkAbort(); err != nil {\n\t\t\treturn terminateRowIteration(err)\n\t\t}\n\t\tif atomic.LoadInt64(&this.rowCopyCompleteFlag) == 1 || atomic.LoadInt64(&hasNoFurtherRangeFlag) == 1 {\n\t\t\t// Done\n\t\t\t// There's another such check down the line\n\t\t\treturn nil\n\t\t}\n\t\tcopyRowsFunc := func() error {\n\t\t\tthis.migrationContext.SetNextIterationRangeMinValues()\n\t\t\t// Copy task:\n\t\t\tapplyCopyRowsFunc := func() error {\n\t\t\t\tif atomic.LoadInt64(&this.rowCopyCompleteFlag) == 1 || atomic.LoadInt64(&hasNoFurtherRangeFlag) == 1 {\n\t\t\t\t\t// Done.\n\t\t\t\t\t// There's another such check down the line\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\t// When hasFurtherRange is false, original table might be write locked and CalculateNextIterationRangeEndValues would hangs forever\n\t\t\t\thasFurtherRange, err := this.applier.CalculateNextIterationRangeEndValues()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err // wrapping call will retry\n\t\t\t\t}\n\t\t\t\tif !hasFurtherRange {\n\t\t\t\t\tatomic.StoreInt64(&hasNoFurtherRangeFlag, 1)\n\t\t\t\t\treturn terminateRowIteration(nil)\n\t\t\t\t}\n\t\t\t\tif atomic.LoadInt64(&this.rowCopyCompleteFlag) == 1 {\n\t\t\t\t\t// No need for more writes.\n\t\t\t\t\t// This is the de-facto place where we avoid writing in the event of completed cut-over.\n\t\t\t\t\t// There could _still_ be a race condition, but that's as close as we can get.\n\t\t\t\t\t// What about the race condition? Well, there's actually no data integrity issue.\n\t\t\t\t\t// when rowCopyCompleteFlag==1 that means **guaranteed** all necessary rows have been copied.\n\t\t\t\t\t// But some are still then collected at the binary log, and these are the ones we're trying to\n\t\t\t\t\t// not apply here. If the race condition wins over us, then we just attempt to apply onto the\n\t\t\t\t\t// _ghost_ table, which no longer exists. So, bothering error messages and all, but no damage.\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t_, rowsAffected, _, err := this.applier.ApplyIterationInsertQuery()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err // wrapping call will retry\n\t\t\t\t}\n\n\t\t\t\tif this.migrationContext.PanicOnWarnings {\n\t\t\t\t\tif len(this.migrationContext.MigrationLastInsertSQLWarnings) > 0 {\n\t\t\t\t\t\tfor _, warning := range this.migrationContext.MigrationLastInsertSQLWarnings {\n\t\t\t\t\t\t\tthis.migrationContext.Log.Infof(\"ApplyIterationInsertQuery has SQL warnings! %s\", warning)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tjoinedWarnings := strings.Join(this.migrationContext.MigrationLastInsertSQLWarnings, \"; \")\n\t\t\t\t\t\treturn terminateRowIteration(fmt.Errorf(\"ApplyIterationInsertQuery failed because of SQL warnings: [%s]\", joinedWarnings))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tatomic.AddInt64(&this.migrationContext.TotalRowsCopied, rowsAffected)\n\t\t\t\tatomic.AddInt64(&this.migrationContext.Iteration, 1)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tif err := this.retryBatchCopyWithHooks(applyCopyRowsFunc); err != nil {\n\t\t\t\treturn terminateRowIteration(err)\n\t\t\t}\n\n\t\t\t// record last successfully copied range\n\t\t\tthis.applier.LastIterationRangeMutex.Lock()\n\t\t\tif this.migrationContext.MigrationIterationRangeMinValues != nil && this.migrationContext.MigrationIterationRangeMaxValues != nil {\n\t\t\t\tthis.applier.LastIterationRangeMinValues = this.migrationContext.MigrationIterationRangeMinValues.Clone()\n\t\t\t\tthis.applier.LastIterationRangeMaxValues = this.migrationContext.MigrationIterationRangeMaxValues.Clone()\n\t\t\t}\n\t\t\tthis.applier.LastIterationRangeMutex.Unlock()\n\n\t\t\treturn nil\n\t\t}\n\t\t// Enqueue copy operation; to be executed by executeWriteFuncs()\n\t\t// Use helper to prevent deadlock if executeWriteFuncs exits\n\t\tif err := base.SendWithContext(this.migrationContext.GetContext(), this.copyRowsQueue, copyRowsFunc); err != nil {\n\t\t\t// Context cancelled, check for abort and exit\n\t\t\tif abortErr := this.checkAbort(); abortErr != nil {\n\t\t\t\treturn terminateRowIteration(abortErr)\n\t\t\t}\n\t\t\treturn terminateRowIteration(err)\n\t\t}\n\t}\n}\n\nfunc (this *Migrator) onApplyEventStruct(eventStruct *applyEventStruct) error {\n\thandleNonDMLEventStruct := func(eventStruct *applyEventStruct) error {\n\t\tif eventStruct.writeFunc != nil {\n\t\t\tif err := this.retryOperation(*eventStruct.writeFunc); err != nil {\n\t\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\tif eventStruct.dmlEvent == nil {\n\t\treturn handleNonDMLEventStruct(eventStruct)\n\t}\n\tif eventStruct.dmlEvent != nil {\n\t\tdmlEvents := [](*binlog.BinlogDMLEvent){}\n\t\tdmlEvents = append(dmlEvents, eventStruct.dmlEvent)\n\t\tvar nonDmlStructToApply *applyEventStruct\n\n\t\tavailableEvents := len(this.applyEventsQueue)\n\t\tbatchSize := int(atomic.LoadInt64(&this.migrationContext.DMLBatchSize))\n\t\tif availableEvents > batchSize-1 {\n\t\t\t// The \"- 1\" is because we already consumed one event: the original event that led to this function getting called.\n\t\t\t// So, if DMLBatchSize==1 we wish to not process any further events\n\t\t\tavailableEvents = batchSize - 1\n\t\t}\n\t\tfor i := 0; i < availableEvents; i++ {\n\t\t\tadditionalStruct := <-this.applyEventsQueue\n\t\t\tif additionalStruct.dmlEvent == nil {\n\t\t\t\t// Not a DML. We don't group this, and we don't batch any further\n\t\t\t\tnonDmlStructToApply = additionalStruct\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdmlEvents = append(dmlEvents, additionalStruct.dmlEvent)\n\t\t}\n\t\t// Create a task to apply the DML event; this will be execute by executeWriteFuncs()\n\t\tvar applyEventFunc tableWriteFunc = func() error {\n\t\t\treturn this.applier.ApplyDMLEventQueries(dmlEvents)\n\t\t}\n\t\tif err := this.retryOperation(applyEventFunc); err != nil {\n\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t}\n\t\t// update applier coordinates\n\t\tthis.applier.CurrentCoordinatesMutex.Lock()\n\t\tthis.applier.CurrentCoordinates = eventStruct.coords\n\t\tthis.applier.CurrentCoordinatesMutex.Unlock()\n\n\t\tif nonDmlStructToApply != nil {\n\t\t\t// We pulled DML events from the queue, and then we hit a non-DML event. Wait!\n\t\t\t// We need to handle it!\n\t\t\tif err := handleNonDMLEventStruct(nonDmlStructToApply); err != nil {\n\t\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Checkpoint attempts to write a checkpoint of the Migrator's current state.\n// It gets the binlog coordinates of the last received trx and waits until the\n// applier reaches that trx. At that point it's safe to resume from these coordinates.\nfunc (this *Migrator) Checkpoint(ctx context.Context) (*Checkpoint, error) {\n\tcoords := this.eventsStreamer.GetCurrentBinlogCoordinates()\n\tthis.applier.LastIterationRangeMutex.Lock()\n\tif this.applier.LastIterationRangeMaxValues == nil || this.applier.LastIterationRangeMinValues == nil {\n\t\tthis.applier.LastIterationRangeMutex.Unlock()\n\t\treturn nil, errors.New(\"iteration range is empty, not checkpointing...\")\n\t}\n\tchk := &Checkpoint{\n\t\tIteration:         this.migrationContext.GetIteration(),\n\t\tIterationRangeMin: this.applier.LastIterationRangeMinValues.Clone(),\n\t\tIterationRangeMax: this.applier.LastIterationRangeMaxValues.Clone(),\n\t\tLastTrxCoords:     coords,\n\t\tRowsCopied:        atomic.LoadInt64(&this.migrationContext.TotalRowsCopied),\n\t\tDMLApplied:        atomic.LoadInt64(&this.migrationContext.TotalDMLEventsApplied),\n\t}\n\tthis.applier.LastIterationRangeMutex.Unlock()\n\n\tfor {\n\t\tif err := ctx.Err(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tthis.applier.CurrentCoordinatesMutex.Lock()\n\t\tif coords.SmallerThanOrEquals(this.applier.CurrentCoordinates) {\n\t\t\tid, err := this.applier.WriteCheckpoint(chk)\n\t\t\tchk.Id = id\n\t\t\tthis.applier.CurrentCoordinatesMutex.Unlock()\n\t\t\treturn chk, err\n\t\t}\n\t\tthis.applier.CurrentCoordinatesMutex.Unlock()\n\t\ttime.Sleep(500 * time.Millisecond)\n\t}\n}\n\n// CheckpointAfterCutOver writes a final checkpoint after the cutover completes successfully.\nfunc (this *Migrator) CheckpointAfterCutOver() (*Checkpoint, error) {\n\tif this.lastLockProcessed == nil || this.lastLockProcessed.coords.IsEmpty() {\n\t\treturn nil, this.migrationContext.Log.Errorf(\"lastLockProcessed coords are empty\")\n\t}\n\n\tchk := &Checkpoint{\n\t\tIsCutover:         true,\n\t\tLastTrxCoords:     this.lastLockProcessed.coords,\n\t\tIterationRangeMin: sql.NewColumnValues(this.migrationContext.UniqueKey.Len()),\n\t\tIterationRangeMax: sql.NewColumnValues(this.migrationContext.UniqueKey.Len()),\n\t\tIteration:         this.migrationContext.GetIteration(),\n\t\tRowsCopied:        atomic.LoadInt64(&this.migrationContext.TotalRowsCopied),\n\t\tDMLApplied:        atomic.LoadInt64(&this.migrationContext.TotalDMLEventsApplied),\n\t}\n\tthis.applier.LastIterationRangeMutex.Lock()\n\tif this.applier.LastIterationRangeMinValues != nil {\n\t\tchk.IterationRangeMin = this.applier.LastIterationRangeMinValues.Clone()\n\t}\n\tif this.applier.LastIterationRangeMaxValues != nil {\n\t\tchk.IterationRangeMax = this.applier.LastIterationRangeMaxValues.Clone()\n\t}\n\tthis.applier.LastIterationRangeMutex.Unlock()\n\n\tid, err := this.applier.WriteCheckpoint(chk)\n\tchk.Id = id\n\treturn chk, err\n}\n\nfunc (this *Migrator) checkpointLoop() {\n\tif this.migrationContext.Noop {\n\t\tthis.migrationContext.Log.Debugf(\"Noop operation; not really checkpointing\")\n\t\treturn\n\t}\n\tcheckpointInterval := time.Duration(this.migrationContext.CheckpointIntervalSeconds) * time.Second\n\tticker := time.NewTicker(checkpointInterval)\n\tfor t := range ticker.C {\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 || atomic.LoadInt64(&this.migrationContext.CutOverCompleteFlag) > 0 {\n\t\t\treturn\n\t\t}\n\t\tif atomic.LoadInt64(&this.migrationContext.InCutOverCriticalSectionFlag) > 0 {\n\t\t\tcontinue\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"starting checkpoint at %+v\", t)\n\t\tctx, cancel := context.WithTimeout(context.Background(), checkpointTimeout)\n\t\tchk, err := this.Checkpoint(ctx)\n\t\tif err != nil {\n\t\t\tif errors.Is(err, context.DeadlineExceeded) {\n\t\t\t\tthis.migrationContext.Log.Errorf(\"checkpoint attempt timed out after %+v\", checkpointTimeout)\n\t\t\t} else {\n\t\t\t\tthis.migrationContext.Log.Errorf(\"error attempting checkpoint: %+v\", err)\n\t\t\t}\n\t\t} else {\n\t\t\tthis.migrationContext.Log.Infof(\"checkpoint success at coords=%+v range_min=%+v range_max=%+v iteration=%d\",\n\t\t\t\tchk.LastTrxCoords.DisplayString(), chk.IterationRangeMin.String(), chk.IterationRangeMax.String(), chk.Iteration)\n\t\t}\n\t\tcancel()\n\t}\n}\n\n// executeWriteFuncs writes data via applier: both the rowcopy and the events backlog.\n// This is where the ghost table gets the data. The function fills the data single-threaded.\n// Both event backlog and rowcopy events are polled; the backlog events have precedence.\nfunc (this *Migrator) executeWriteFuncs() error {\n\tif this.migrationContext.Noop {\n\t\tthis.migrationContext.Log.Debugf(\"Noop operation; not really executing write funcs\")\n\t\treturn nil\n\t}\n\tfor {\n\t\tif err := this.checkAbort(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn nil\n\t\t}\n\n\t\tthis.throttler.throttle(nil)\n\n\t\t// We give higher priority to event processing, then secondary priority to\n\t\t// rowcopy\n\t\tselect {\n\t\tcase eventStruct := <-this.applyEventsQueue:\n\t\t\t{\n\t\t\t\tif err := this.onApplyEventStruct(eventStruct); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\t{\n\t\t\t\tselect {\n\t\t\t\tcase copyRowsFunc := <-this.copyRowsQueue:\n\t\t\t\t\t{\n\t\t\t\t\t\tcopyRowsStartTime := time.Now()\n\t\t\t\t\t\t// Retries are handled within the copyRowsFunc\n\t\t\t\t\t\tif err := copyRowsFunc(); err != nil {\n\t\t\t\t\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif niceRatio := this.migrationContext.GetNiceRatio(); niceRatio > 0 {\n\t\t\t\t\t\t\tcopyRowsDuration := time.Since(copyRowsStartTime)\n\t\t\t\t\t\t\tsleepTimeNanosecondFloat64 := niceRatio * float64(copyRowsDuration.Nanoseconds())\n\t\t\t\t\t\t\tsleepTime := time.Duration(int64(sleepTimeNanosecondFloat64)) * time.Nanosecond\n\t\t\t\t\t\t\ttime.Sleep(sleepTime)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Hmmmmm... nothing in the queue; no events, but also no row copy.\n\t\t\t\t\t\t// This is possible upon load. Let's just sleep it over.\n\t\t\t\t\t\tthis.migrationContext.Log.Debugf(\"Getting nothing in the write queue. Sleeping...\")\n\t\t\t\t\t\ttime.Sleep(time.Second)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (this *Migrator) executeDMLWriteFuncs() error {\n\tif this.migrationContext.Noop {\n\t\tthis.migrationContext.Log.Debugf(\"Noop operation; not really executing DML write funcs\")\n\t\treturn nil\n\t}\n\tfor {\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn nil\n\t\t}\n\n\t\tthis.throttler.throttle(nil)\n\n\t\tselect {\n\t\tcase eventStruct := <-this.applyEventsQueue:\n\t\t\t{\n\t\t\t\tif err := this.onApplyEventStruct(eventStruct); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\tcase <-time.After(time.Second):\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\n// finalCleanup takes actions at very end of migration, dropping tables etc.\nfunc (this *Migrator) finalCleanup() error {\n\tatomic.StoreInt64(&this.migrationContext.CleanupImminentFlag, 1)\n\n\tthis.migrationContext.Log.Infof(\"Writing changelog state: %+v\", Migrated)\n\tif _, err := this.applier.WriteChangelogState(string(Migrated)); err != nil {\n\t\treturn err\n\t}\n\n\tif this.migrationContext.Noop {\n\t\tif createTableStatement, err := this.inspector.showCreateTable(this.migrationContext.GetGhostTableName()); err == nil {\n\t\t\tthis.migrationContext.Log.Infof(\"New table structure follows\")\n\t\t\tfmt.Println(createTableStatement)\n\t\t} else {\n\t\t\tthis.migrationContext.Log.Errore(err)\n\t\t}\n\t}\n\tif err := this.eventsStreamer.Close(); err != nil {\n\t\tthis.migrationContext.Log.Errore(err)\n\t}\n\n\tif err := this.retryOperation(this.applier.DropChangelogTable); err != nil {\n\t\treturn err\n\t}\n\tif this.migrationContext.OkToDropTable && !this.migrationContext.TestOnReplica {\n\t\tif err := this.retryOperation(this.applier.DropOldTable); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := this.retryOperation(this.applier.DropCheckpointTable); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else if !this.migrationContext.Noop {\n\t\tthis.migrationContext.Log.Infof(\"Am not dropping old table because I want this operation to be as live as possible. If you insist I should do it, please add `--ok-to-drop-table` next time. But I prefer you do not. To drop the old table, issue:\")\n\t\tthis.migrationContext.Log.Infof(\"-- drop table %s.%s\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.GetOldTableName()))\n\t\tif this.migrationContext.Checkpoint {\n\t\t\tthis.migrationContext.Log.Infof(\"Am not dropping checkpoint table without `--ok-to-drop-table`. To drop the checkpoint table, issue:\")\n\t\t\tthis.migrationContext.Log.Infof(\"-- drop table %s.%s\", sql.EscapeName(this.migrationContext.DatabaseName), sql.EscapeName(this.migrationContext.GetCheckpointTableName()))\n\t\t}\n\t}\n\tif this.migrationContext.Noop {\n\t\tif err := this.retryOperation(this.applier.DropGhostTable); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (this *Migrator) teardown() {\n\tatomic.StoreInt64(&this.finishedMigrating, 1)\n\n\tif this.inspector != nil {\n\t\tthis.migrationContext.Log.Infof(\"Tearing down inspector\")\n\t\tthis.inspector.Teardown()\n\t}\n\n\tif this.applier != nil {\n\t\tthis.migrationContext.Log.Infof(\"Tearing down applier\")\n\t\tthis.applier.Teardown()\n\t}\n\n\tif this.eventsStreamer != nil {\n\t\tthis.migrationContext.Log.Infof(\"Tearing down streamer\")\n\t\tthis.eventsStreamer.Teardown()\n\t}\n\n\tif this.throttler != nil {\n\t\tthis.migrationContext.Log.Infof(\"Tearing down throttler\")\n\t\tthis.throttler.Teardown()\n\t}\n}\n"
  },
  {
    "path": "go/logic/migrator_test.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n         See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\tgosql \"database/sql\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testify/require\"\n\t\"github.com/stretchr/testify/suite\"\n\ttestmysql \"github.com/testcontainers/testcontainers-go/modules/mysql\"\n\n\t\"runtime\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/binlog\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n\t\"github.com/testcontainers/testcontainers-go\"\n)\n\nfunc TestMigratorOnChangelogEvent(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\tmigrator.applier = NewApplier(migrationContext)\n\n\tt.Run(\"heartbeat\", func(t *testing.T) {\n\t\tcolumnValues := sql.ToColumnValues([]interface{}{\n\t\t\t123,\n\t\t\ttime.Now().Unix(),\n\t\t\t\"heartbeat\",\n\t\t\t\"2022-08-16T00:45:10.52Z\",\n\t\t})\n\t\trequire.Nil(t, migrator.onChangelogEvent(&binlog.BinlogEntry{\n\t\t\tDmlEvent: &binlog.BinlogDMLEvent{\n\t\t\t\tDatabaseName:    \"test\",\n\t\t\t\tDML:             binlog.InsertDML,\n\t\t\t\tNewColumnValues: columnValues},\n\t\t\tCoordinates: mysql.NewFileBinlogCoordinates(\"mysql-bin.000004\", int64(4)),\n\t\t}))\n\t})\n\n\tt.Run(\"state-AllEventsUpToLockProcessed\", func(t *testing.T) {\n\t\tvar wg sync.WaitGroup\n\t\twg.Add(1)\n\t\tgo func(wg *sync.WaitGroup) {\n\t\t\tdefer wg.Done()\n\t\t\tes := <-migrator.applyEventsQueue\n\t\t\trequire.NotNil(t, es)\n\t\t\trequire.NotNil(t, es.writeFunc)\n\t\t}(&wg)\n\n\t\tcolumnValues := sql.ToColumnValues([]interface{}{\n\t\t\t123,\n\t\t\ttime.Now().Unix(),\n\t\t\t\"state\",\n\t\t\tAllEventsUpToLockProcessed,\n\t\t})\n\t\trequire.Nil(t, migrator.onChangelogEvent(&binlog.BinlogEntry{\n\t\t\tDmlEvent: &binlog.BinlogDMLEvent{\n\t\t\t\tDatabaseName:    \"test\",\n\t\t\t\tDML:             binlog.InsertDML,\n\t\t\t\tNewColumnValues: columnValues},\n\t\t\tCoordinates: mysql.NewFileBinlogCoordinates(\"mysql-bin.000004\", int64(4)),\n\t\t}))\n\t\twg.Wait()\n\t})\n\n\tt.Run(\"state-GhostTableMigrated\", func(t *testing.T) {\n\t\tgo func() {\n\t\t\trequire.True(t, <-migrator.ghostTableMigrated)\n\t\t}()\n\n\t\tcolumnValues := sql.ToColumnValues([]interface{}{\n\t\t\t123,\n\t\t\ttime.Now().Unix(),\n\t\t\t\"state\",\n\t\t\tGhostTableMigrated,\n\t\t})\n\t\trequire.Nil(t, migrator.onChangelogEvent(&binlog.BinlogEntry{\n\t\t\tDmlEvent: &binlog.BinlogDMLEvent{\n\t\t\t\tDatabaseName:    \"test\",\n\t\t\t\tDML:             binlog.InsertDML,\n\t\t\t\tNewColumnValues: columnValues},\n\t\t\tCoordinates: mysql.NewFileBinlogCoordinates(\"mysql-bin.000004\", int64(4)),\n\t\t}))\n\t})\n\n\tt.Run(\"state-Migrated\", func(t *testing.T) {\n\t\tcolumnValues := sql.ToColumnValues([]interface{}{\n\t\t\t123,\n\t\t\ttime.Now().Unix(),\n\t\t\t\"state\",\n\t\t\tMigrated,\n\t\t})\n\t\trequire.Nil(t, migrator.onChangelogEvent(&binlog.BinlogEntry{\n\t\t\tDmlEvent: &binlog.BinlogDMLEvent{\n\t\t\t\tDatabaseName:    \"test\",\n\t\t\t\tDML:             binlog.InsertDML,\n\t\t\t\tNewColumnValues: columnValues},\n\t\t\tCoordinates: mysql.NewFileBinlogCoordinates(\"mysql-bin.000004\", int64(4)),\n\t\t}))\n\t})\n\n\tt.Run(\"state-ReadMigrationRangeValues\", func(t *testing.T) {\n\t\tcolumnValues := sql.ToColumnValues([]interface{}{\n\t\t\t123,\n\t\t\ttime.Now().Unix(),\n\t\t\t\"state\",\n\t\t\tReadMigrationRangeValues,\n\t\t})\n\t\trequire.Nil(t, migrator.onChangelogEvent(&binlog.BinlogEntry{\n\t\t\tDmlEvent: &binlog.BinlogDMLEvent{\n\t\t\t\tDatabaseName:    \"test\",\n\t\t\t\tDML:             binlog.InsertDML,\n\t\t\t\tNewColumnValues: columnValues},\n\t\t\tCoordinates: mysql.NewFileBinlogCoordinates(\"mysql-bin.000004\", int64(4)),\n\t\t}))\n\t})\n}\n\nfunc TestMigratorValidateStatement(t *testing.T) {\n\tt.Run(\"add-column\", func(t *testing.T) {\n\t\tmigrationContext := base.NewMigrationContext()\n\t\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\t\trequire.Nil(t, migrator.parser.ParseAlterStatement(`ALTER TABLE test ADD test_new VARCHAR(64) NOT NULL`))\n\n\t\trequire.Nil(t, migrator.validateAlterStatement())\n\t\trequire.Len(t, migrator.migrationContext.DroppedColumnsMap, 0)\n\t})\n\n\tt.Run(\"drop-column\", func(t *testing.T) {\n\t\tmigrationContext := base.NewMigrationContext()\n\t\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\t\trequire.Nil(t, migrator.parser.ParseAlterStatement(`ALTER TABLE test DROP abc`))\n\n\t\trequire.Nil(t, migrator.validateAlterStatement())\n\t\trequire.Len(t, migrator.migrationContext.DroppedColumnsMap, 1)\n\t\t_, exists := migrator.migrationContext.DroppedColumnsMap[\"abc\"]\n\t\trequire.True(t, exists)\n\t})\n\n\tt.Run(\"rename-column\", func(t *testing.T) {\n\t\tmigrationContext := base.NewMigrationContext()\n\t\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\t\trequire.Nil(t, migrator.parser.ParseAlterStatement(`ALTER TABLE test CHANGE test123 test1234 bigint unsigned`))\n\n\t\terr := migrator.validateAlterStatement()\n\t\trequire.Error(t, err)\n\t\trequire.True(t, strings.HasPrefix(err.Error(), \"gh-ost believes the ALTER statement renames columns\"))\n\t\trequire.Len(t, migrator.migrationContext.DroppedColumnsMap, 0)\n\t})\n\n\tt.Run(\"rename-column-approved\", func(t *testing.T) {\n\t\tmigrationContext := base.NewMigrationContext()\n\t\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\t\tmigrator.migrationContext.ApproveRenamedColumns = true\n\t\trequire.Nil(t, migrator.parser.ParseAlterStatement(`ALTER TABLE test CHANGE test123 test1234 bigint unsigned`))\n\n\t\trequire.Nil(t, migrator.validateAlterStatement())\n\t\trequire.Len(t, migrator.migrationContext.DroppedColumnsMap, 0)\n\t})\n\n\tt.Run(\"rename-table\", func(t *testing.T) {\n\t\tmigrationContext := base.NewMigrationContext()\n\t\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\t\trequire.Nil(t, migrator.parser.ParseAlterStatement(`ALTER TABLE test RENAME TO test_new`))\n\n\t\terr := migrator.validateAlterStatement()\n\t\trequire.Error(t, err)\n\t\trequire.True(t, errors.Is(err, ErrMigratorUnsupportedRenameAlter))\n\t\trequire.Len(t, migrator.migrationContext.DroppedColumnsMap, 0)\n\t})\n}\n\nfunc TestMigratorCreateFlagFiles(t *testing.T) {\n\ttmpdir, err := os.MkdirTemp(\"\", t.Name())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer os.RemoveAll(tmpdir)\n\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.PostponeCutOverFlagFile = filepath.Join(tmpdir, \"cut-over.flag\")\n\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\trequire.Nil(t, migrator.createFlagFiles())\n\trequire.Nil(t, migrator.createFlagFiles()) // twice to test already-exists\n\n\t_, err = os.Stat(migrationContext.PostponeCutOverFlagFile)\n\trequire.NoError(t, err)\n}\n\nfunc TestMigratorGetProgressPercent(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\n\t{\n\t\trequire.Equal(t, float64(100.0), migrator.getProgressPercent(0))\n\t}\n\t{\n\t\tmigrationContext.TotalRowsCopied = 250\n\t\trequire.Equal(t, float64(25.0), migrator.getProgressPercent(1000))\n\t}\n}\n\nfunc TestMigratorGetMigrationStateAndETA(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\tnow := time.Now()\n\tmigrationContext.RowCopyStartTime = now.Add(-time.Minute)\n\tmigrationContext.RowCopyEndTime = now\n\n\t{\n\t\tmigrationContext.TotalRowsCopied = 456\n\t\tstate, eta, etaDuration := migrator.getMigrationStateAndETA(123456)\n\t\trequire.Equal(t, \"migrating\", state)\n\t\trequire.Equal(t, \"4h29m44s\", eta)\n\t\trequire.Equal(t, \"4h29m44s\", etaDuration.String())\n\t}\n\t{\n\t\t// Test using rows-per-second added data.\n\t\tmigrationContext.TotalRowsCopied = 456\n\t\tmigrationContext.EtaRowsPerSecond = 100\n\t\tstate, eta, etaDuration := migrator.getMigrationStateAndETA(123456)\n\t\trequire.Equal(t, \"migrating\", state)\n\t\trequire.Equal(t, \"20m30s\", eta)\n\t\trequire.Equal(t, \"20m30s\", etaDuration.String())\n\t}\n\t{\n\t\tmigrationContext.TotalRowsCopied = 456\n\t\tstate, eta, etaDuration := migrator.getMigrationStateAndETA(456)\n\t\trequire.Equal(t, \"migrating\", state)\n\t\trequire.Equal(t, \"due\", eta)\n\t\trequire.Equal(t, \"0s\", etaDuration.String())\n\t}\n\t{\n\t\tmigrationContext.TotalRowsCopied = 123456\n\t\tstate, eta, etaDuration := migrator.getMigrationStateAndETA(456)\n\t\trequire.Equal(t, \"migrating\", state)\n\t\trequire.Equal(t, \"due\", eta)\n\t\trequire.Equal(t, \"0s\", etaDuration.String())\n\t}\n\t{\n\t\tatomic.StoreInt64(&migrationContext.CountingRowsFlag, 1)\n\t\tstate, eta, etaDuration := migrator.getMigrationStateAndETA(123456)\n\t\trequire.Equal(t, \"counting rows\", state)\n\t\trequire.Equal(t, \"due\", eta)\n\t\trequire.Equal(t, \"0s\", etaDuration.String())\n\t}\n\t{\n\t\tatomic.StoreInt64(&migrationContext.CountingRowsFlag, 0)\n\t\tatomic.StoreInt64(&migrationContext.IsPostponingCutOver, 1)\n\t\tstate, eta, etaDuration := migrator.getMigrationStateAndETA(123456)\n\t\trequire.Equal(t, \"postponing cut-over\", state)\n\t\trequire.Equal(t, \"due\", eta)\n\t\trequire.Equal(t, \"0s\", etaDuration.String())\n\t}\n}\n\nfunc TestMigratorShouldPrintStatus(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\n\trequire.True(t, migrator.shouldPrintStatus(NoPrintStatusRule, 10, time.Second))                  // test 'rule != HeuristicPrintStatusRule' return\n\trequire.True(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 10, time.Second))           // test 'etaDuration.Seconds() <= 60'\n\trequire.True(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 90, time.Second))           // test 'etaDuration.Seconds() <= 60' again\n\trequire.True(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 90, time.Minute))           // test 'etaDuration.Seconds() <= 180'\n\trequire.True(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 60, 90*time.Second))        // test 'elapsedSeconds <= 180'\n\trequire.False(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 61, 90*time.Second))       // test 'elapsedSeconds <= 180'\n\trequire.False(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 99, 210*time.Second))      // test 'elapsedSeconds <= 180'\n\trequire.False(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 12345, 86400*time.Second)) // test 'else'\n\trequire.True(t, migrator.shouldPrintStatus(HeuristicPrintStatusRule, 30030, 86400*time.Second))  // test 'else' again\n}\n\ntype MigratorTestSuite struct {\n\tsuite.Suite\n\n\tmysqlContainer testcontainers.Container\n\tdb             *gosql.DB\n}\n\nfunc (suite *MigratorTestSuite) SetupSuite() {\n\tctx := context.Background()\n\tmysqlContainer, err := testmysql.Run(ctx,\n\t\ttestMysqlContainerImage,\n\t\ttestmysql.WithDatabase(testMysqlDatabase),\n\t\ttestmysql.WithUsername(testMysqlUser),\n\t\ttestmysql.WithPassword(testMysqlPass),\n\t\ttestmysql.WithConfigFile(\"my.cnf.test\"),\n\t)\n\tsuite.Require().NoError(err)\n\n\tsuite.mysqlContainer = mysqlContainer\n\tdsn, err := mysqlContainer.ConnectionString(ctx)\n\tsuite.Require().NoError(err)\n\n\tdb, err := gosql.Open(\"mysql\", dsn)\n\tsuite.Require().NoError(err)\n\n\tsuite.db = db\n}\n\nfunc (suite *MigratorTestSuite) TeardownSuite() {\n\tsuite.Assert().NoError(suite.db.Close())\n\tsuite.Assert().NoError(testcontainers.TerminateContainer(suite.mysqlContainer))\n}\n\nfunc (suite *MigratorTestSuite) SetupTest() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, \"CREATE DATABASE IF NOT EXISTS \"+testMysqlDatabase)\n\tsuite.Require().NoError(err)\n\n\tos.Remove(\"/tmp/gh-ost.sock\")\n}\n\nfunc (suite *MigratorTestSuite) TearDownTest() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestTableName())\n\tsuite.Require().NoError(err)\n\t_, err = suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestGhostTableName())\n\tsuite.Require().NoError(err)\n\t_, err = suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestRevertedTableName())\n\tsuite.Require().NoError(err)\n\t_, err = suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestOldTableName())\n\tsuite.Require().NoError(err)\n}\n\nfunc (suite *MigratorTestSuite) TestMigrateEmpty() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, name VARCHAR(64))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\tmigrationContext.InitiallyDropOldTable = true\n\n\tmigrationContext.AlterStatementOptions = \"ADD COLUMN foobar varchar(255), ENGINE=InnoDB\"\n\n\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\n\terr = migrator.Migrate()\n\tsuite.Require().NoError(err)\n\n\t// Verify the new column was added\n\tvar tableName, createTableSQL string\n\t//nolint:execinquery\n\terr = suite.db.QueryRow(\"SHOW CREATE TABLE \"+getTestTableName()).Scan(&tableName, &createTableSQL)\n\tsuite.Require().NoError(err)\n\n\tsuite.Require().Equal(\"testing\", tableName)\n\tsuite.Require().Equal(\"CREATE TABLE `testing` (\\n  `id` int NOT NULL,\\n  `name` varchar(64) DEFAULT NULL,\\n  `foobar` varchar(255) DEFAULT NULL,\\n  PRIMARY KEY (`id`)\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci\", createTableSQL)\n\n\t// Verify the changelog table was claned up\n\t//nolint:execinquery\n\terr = suite.db.QueryRow(\"SHOW TABLES IN test LIKE '_testing_ghc'\").Scan(&tableName)\n\tsuite.Require().Error(err)\n\tsuite.Require().Equal(gosql.ErrNoRows, err)\n\n\t// Verify the old table was renamed\n\t//nolint:execinquery\n\terr = suite.db.QueryRow(\"SHOW TABLES IN test LIKE '_testing_del'\").Scan(&tableName)\n\tsuite.Require().NoError(err)\n\tsuite.Require().Equal(\"_testing_del\", tableName)\n}\n\nfunc (suite *MigratorTestSuite) TestRetryBatchCopyWithHooks() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, \"CREATE TABLE test.test_retry_batch (id INT PRIMARY KEY AUTO_INCREMENT, name TEXT)\")\n\tsuite.Require().NoError(err)\n\n\tconst initStride = 1000\n\tconst totalBatches = 3\n\tfor i := 0; i < totalBatches; i++ {\n\t\tdataSize := 50 * i\n\t\tfor j := 0; j < initStride; j++ {\n\t\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO test.test_retry_batch (name) VALUES ('%s')\", strings.Repeat(\"a\", dataSize)))\n\t\t\tsuite.Require().NoError(err)\n\t\t}\n\t}\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"SET GLOBAL max_binlog_cache_size = %d\", 1024*8))\n\tsuite.Require().NoError(err)\n\tdefer func() {\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"SET GLOBAL max_binlog_cache_size = %d\", 1024*1024*1024))\n\t\tsuite.Require().NoError(err)\n\t}()\n\n\ttmpDir, err := os.MkdirTemp(\"\", \"gh-ost-hooks\")\n\tsuite.Require().NoError(err)\n\tdefer os.RemoveAll(tmpDir)\n\n\thookScript := filepath.Join(tmpDir, \"gh-ost-on-batch-copy-retry\")\n\thookContent := `#!/bin/bash\n# Mock hook that reduces chunk size on binlog cache error\nERROR_MSG=\"$GH_OST_LAST_BATCH_COPY_ERROR\"\nSOCKET_PATH=\"/tmp/gh-ost.sock\"\n\nif ! [[ \"$ERROR_MSG\" =~ \"max_binlog_cache_size\" ]]; then\n    echo \"Nothing to do for error: $ERROR_MSG\"\n    exit 0\nfi\n\nCHUNK_SIZE=$(echo \"chunk-size=?\" | nc -U $SOCKET_PATH | tr -d '\\n')\n\nMIN_CHUNK_SIZE=10\nNEW_CHUNK_SIZE=$(( CHUNK_SIZE * 8 / 10 ))\nif [ $NEW_CHUNK_SIZE -lt $MIN_CHUNK_SIZE ]; then\n    NEW_CHUNK_SIZE=$MIN_CHUNK_SIZE\nfi\n\nif [ $CHUNK_SIZE -eq $NEW_CHUNK_SIZE ]; then\n    echo \"Chunk size unchanged: $CHUNK_SIZE\"\n    exit 0\nfi\n\necho \"[gh-ost-on-batch-copy-retry]: Changing chunk size from $CHUNK_SIZE to $NEW_CHUNK_SIZE\"\necho \"chunk-size=$NEW_CHUNK_SIZE\" | nc -U $SOCKET_PATH\necho \"[gh-ost-on-batch-copy-retry]: Done, exiting...\"\n`\n\terr = os.WriteFile(hookScript, []byte(hookContent), 0755)\n\tsuite.Require().NoError(err)\n\n\torigStdout := os.Stdout\n\torigStderr := os.Stderr\n\n\trOut, wOut, _ := os.Pipe()\n\trErr, wErr, _ := os.Pipe()\n\tos.Stdout = wOut\n\tos.Stderr = wErr\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.AllowedRunningOnMaster = true\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\tmigrationContext.DatabaseName = \"test\"\n\tmigrationContext.SkipPortValidation = true\n\tmigrationContext.OriginalTableName = \"test_retry_batch\"\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\tmigrationContext.AlterStatementOptions = \"MODIFY name LONGTEXT, ENGINE=InnoDB\"\n\tmigrationContext.ReplicaServerId = 99999\n\tmigrationContext.HeartbeatIntervalMilliseconds = 100\n\tmigrationContext.ThrottleHTTPIntervalMillis = 100\n\tmigrationContext.ThrottleHTTPTimeoutMillis = 1000\n\tmigrationContext.HooksPath = tmpDir\n\tmigrationContext.ChunkSize = 1000\n\tmigrationContext.SetDefaultNumRetries(10)\n\tmigrationContext.ServeSocketFile = \"/tmp/gh-ost.sock\"\n\n\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\n\terr = migrator.Migrate()\n\tsuite.Require().NoError(err)\n\n\twOut.Close()\n\twErr.Close()\n\tos.Stdout = origStdout\n\tos.Stderr = origStderr\n\n\tvar bufOut, bufErr bytes.Buffer\n\tio.Copy(&bufOut, rOut)\n\tio.Copy(&bufErr, rErr)\n\n\toutStr := bufOut.String()\n\terrStr := bufErr.String()\n\n\tsuite.Assert().Contains(outStr, \"chunk-size: 1000\")\n\tsuite.Assert().Contains(errStr, \"[gh-ost-on-batch-copy-retry]: Changing chunk size from 1000 to 800\")\n\tsuite.Assert().Contains(outStr, \"chunk-size: 800\")\n\n\tsuite.Assert().Contains(errStr, \"[gh-ost-on-batch-copy-retry]: Changing chunk size from 800 to 640\")\n\tsuite.Assert().Contains(outStr, \"chunk-size: 640\")\n\n\tsuite.Assert().Contains(errStr, \"[gh-ost-on-batch-copy-retry]: Changing chunk size from 640 to 512\")\n\tsuite.Assert().Contains(outStr, \"chunk-size: 512\")\n\n\tvar count int\n\terr = suite.db.QueryRowContext(ctx, \"SELECT COUNT(*) FROM test.test_retry_batch\").Scan(&count)\n\tsuite.Require().NoError(err)\n\tsuite.Assert().Equal(3000, count)\n}\n\nfunc (suite *MigratorTestSuite) TestCopierIntPK() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, name VARCHAR(64), age INT);\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.AlterStatementOptions = \"ENGINE=InnoDB\"\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"name\", \"age\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"name\", \"age\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"name\", \"age\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"id\"}),\n\t}\n\n\tchunkSize := int64(73)\n\tmigrationContext.ChunkSize = chunkSize\n\n\t// fill with some rows\n\tnumRows := int64(3421)\n\tfor i := range numRows {\n\t\t_, err = suite.db.ExecContext(ctx,\n\t\t\tfmt.Sprintf(\"INSERT INTO %s (id, name, age) VALUES (%d, 'user-%d', %d)\", getTestTableName(), i, i, i%99))\n\t\tsuite.Require().NoError(err)\n\t}\n\n\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\tsuite.Require().NoError(migrator.initiateApplier())\n\tsuite.Require().NoError(migrator.applier.prepareQueries())\n\tsuite.Require().NoError(migrator.applier.ReadMigrationRangeValues())\n\n\tgo migrator.iterateChunks()\n\tgo func() {\n\t\tif err := <-migrator.rowCopyComplete; err != nil {\n\t\t\tmigrator.migrationContext.PanicAbort <- err\n\t\t}\n\t\tatomic.StoreInt64(&migrator.rowCopyCompleteFlag, 1)\n\t}()\n\n\tfor {\n\t\tif atomic.LoadInt64(&migrator.rowCopyCompleteFlag) == 1 {\n\t\t\tsuite.Assert().Equal((numRows/chunkSize)+1, migrator.migrationContext.GetIteration())\n\t\t\treturn\n\t\t}\n\t\tselect {\n\t\tcase copyRowsFunc := <-migrator.copyRowsQueue:\n\t\t\t{\n\t\t\t\tsuite.Require().NoError(copyRowsFunc())\n\n\t\t\t\t// check ghost table has expected number of rows\n\t\t\t\tvar ghostRows int64\n\t\t\t\tsuite.db.QueryRowContext(ctx,\n\t\t\t\t\tfmt.Sprintf(`SELECT COUNT(*) FROM %s`, getTestGhostTableName()),\n\t\t\t\t).Scan(&ghostRows)\n\t\t\t\tsuite.Assert().Equal(migrator.migrationContext.TotalRowsCopied, ghostRows)\n\t\t\t}\n\t\tdefault:\n\t\t\ttime.Sleep(time.Second)\n\t\t}\n\t}\n}\n\nfunc (suite *MigratorTestSuite) TestCopierCompositePK() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT UNSIGNED, t CHAR(32), PRIMARY KEY (t, id));\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tmigrationContext.AlterStatementOptions = \"ENGINE=InnoDB\"\n\tmigrationContext.OriginalTableColumns = sql.NewColumnList([]string{\"id\", \"t\"})\n\tmigrationContext.SharedColumns = sql.NewColumnList([]string{\"id\", \"t\"})\n\tmigrationContext.MappedSharedColumns = sql.NewColumnList([]string{\"id\", \"t\"})\n\tmigrationContext.UniqueKey = &sql.UniqueKey{\n\t\tName:             \"PRIMARY\",\n\t\tNameInGhostTable: \"PRIMARY\",\n\t\tColumns:          *sql.NewColumnList([]string{\"t\", \"id\"}),\n\t}\n\n\tchunkSize := int64(100)\n\tmigrationContext.ChunkSize = chunkSize\n\n\t// fill with some rows\n\tnumRows := int64(2049)\n\tfor i := range numRows {\n\t\tquery := fmt.Sprintf(`INSERT INTO %s (id, t) VALUES (FLOOR(100000000 * RAND(%d)), MD5(RAND(%d)))`, getTestTableName(), i, i)\n\t\t_, err = suite.db.ExecContext(ctx, query)\n\t\tsuite.Require().NoError(err)\n\t}\n\n\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\tsuite.Require().NoError(migrator.initiateApplier())\n\tsuite.Require().NoError(migrator.applier.prepareQueries())\n\tsuite.Require().NoError(migrator.applier.ReadMigrationRangeValues())\n\n\tgo migrator.iterateChunks()\n\tgo func() {\n\t\tif err := <-migrator.rowCopyComplete; err != nil {\n\t\t\tmigrator.migrationContext.PanicAbort <- err\n\t\t}\n\t\tatomic.StoreInt64(&migrator.rowCopyCompleteFlag, 1)\n\t}()\n\n\tfor {\n\t\tif atomic.LoadInt64(&migrator.rowCopyCompleteFlag) == 1 {\n\t\t\tsuite.Assert().Equal((numRows/chunkSize)+1, migrator.migrationContext.GetIteration())\n\t\t\treturn\n\t\t}\n\t\tselect {\n\t\tcase copyRowsFunc := <-migrator.copyRowsQueue:\n\t\t\t{\n\t\t\t\tsuite.Require().NoError(copyRowsFunc())\n\n\t\t\t\t// check ghost table has expected number of rows\n\t\t\t\tvar ghostRows int64\n\t\t\t\tsuite.db.QueryRowContext(ctx,\n\t\t\t\t\tfmt.Sprintf(`SELECT COUNT(*) FROM %s`, getTestGhostTableName()),\n\t\t\t\t).Scan(&ghostRows)\n\t\t\t\tsuite.Assert().Equal(migrator.migrationContext.TotalRowsCopied, ghostRows)\n\t\t\t}\n\t\tdefault:\n\t\t\ttime.Sleep(time.Second)\n\t\t}\n\t}\n}\n\nfunc TestMigratorRetry(t *testing.T) {\n\toldRetrySleepFn := RetrySleepFn\n\tdefer func() { RetrySleepFn = oldRetrySleepFn }()\n\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.SetDefaultNumRetries(100)\n\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\n\tvar sleeps = 0\n\tRetrySleepFn = func(duration time.Duration) {\n\t\tassert.Equal(t, 1*time.Second, duration)\n\t\tsleeps++\n\t}\n\n\tvar tries = 0\n\tretryable := func() error {\n\t\ttries++\n\t\tif tries < int(migrationContext.MaxRetries()) {\n\t\t\treturn errors.New(\"Backoff\")\n\t\t}\n\t\treturn nil\n\t}\n\n\tresult := migrator.retryOperation(retryable, false)\n\tassert.NoError(t, result)\n\tassert.Equal(t, sleeps, 99)\n\tassert.Equal(t, tries, 100)\n}\n\nfunc TestMigratorRetryWithExponentialBackoff(t *testing.T) {\n\toldRetrySleepFn := RetrySleepFn\n\tdefer func() { RetrySleepFn = oldRetrySleepFn }()\n\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.SetDefaultNumRetries(100)\n\tmigrationContext.SetExponentialBackoffMaxInterval(42)\n\tmigrator := NewMigrator(migrationContext, \"1.2.3\")\n\n\tvar sleeps = 0\n\texpected := []int{\n\t\t1, 2, 4, 8, 16, 32, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,\n\t\t42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,\n\t\t42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,\n\t\t42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,\n\t\t42, 42, 42, 42, 42, 42,\n\t}\n\tRetrySleepFn = func(duration time.Duration) {\n\t\tassert.Equal(t, time.Duration(expected[sleeps])*time.Second, duration)\n\t\tsleeps++\n\t}\n\n\tvar tries = 0\n\tretryable := func() error {\n\t\ttries++\n\t\tif tries < int(migrationContext.MaxRetries()) {\n\t\t\treturn errors.New(\"Backoff\")\n\t\t}\n\t\treturn nil\n\t}\n\n\tresult := migrator.retryOperationWithExponentialBackoff(retryable, false)\n\tassert.NoError(t, result)\n\tassert.Equal(t, sleeps, 99)\n\tassert.Equal(t, tries, 100)\n}\n\nfunc (suite *MigratorTestSuite) TestCutOverLossDataCaseLockGhostBeforeRename() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, name VARCHAR(64))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"insert into %s values(1,'a')\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tdone := make(chan error, 1)\n\tgo func() {\n\t\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\t\tif err != nil {\n\t\t\tdone <- err\n\t\t\treturn\n\t\t}\n\t\tmigrationContext := newTestMigrationContext()\n\t\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\t\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\t\tmigrationContext.SetConnectionConfig(\"innodb\")\n\t\tmigrationContext.AllowSetupMetadataLockInstruments = true\n\t\tmigrationContext.AlterStatementOptions = \"ADD COLUMN foobar varchar(255)\"\n\t\tmigrationContext.HeartbeatIntervalMilliseconds = 100\n\t\tmigrationContext.CutOverLockTimeoutSeconds = 4\n\n\t\t_, filename, _, _ := runtime.Caller(0)\n\t\tmigrationContext.PostponeCutOverFlagFile = filepath.Join(filepath.Dir(filename), \"../../tmp/ghost.postpone.flag\")\n\n\t\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\n\t\t//nolint:contextcheck\n\t\tdone <- migrator.Migrate()\n\t}()\n\n\ttime.Sleep(2 * time.Second)\n\t//nolint:dogsled\n\t_, filename, _, _ := runtime.Caller(0)\n\terr = os.Remove(filepath.Join(filepath.Dir(filename), \"../../tmp/ghost.postpone.flag\"))\n\tif err != nil {\n\t\tsuite.Require().NoError(err)\n\t}\n\ttime.Sleep(1 * time.Second)\n\tgo func() {\n\t\tholdConn, err := suite.db.Conn(ctx)\n\t\tsuite.Require().NoError(err)\n\t\t_, err = holdConn.ExecContext(ctx, \"SELECT *, sleep(2) FROM test._testing_gho WHERE id = 1\")\n\t\tsuite.Require().NoError(err)\n\t}()\n\n\tdmlConn, err := suite.db.Conn(ctx)\n\tsuite.Require().NoError(err)\n\n\t_, err = dmlConn.ExecContext(ctx, fmt.Sprintf(\"insert into %s (id, name) values(2,'b')\", getTestTableName()))\n\tfmt.Println(\"insert into table original table\")\n\tsuite.Require().NoError(err)\n\n\tmigrateErr := <-done\n\tsuite.Require().NoError(migrateErr)\n\n\t// Verify the new column was added\n\tvar delValue, OriginalValue int64\n\terr = suite.db.QueryRow(\n\t\tfmt.Sprintf(\"select count(*) from %s._%s_del\", testMysqlDatabase, testMysqlTableName),\n\t).Scan(&delValue)\n\tsuite.Require().NoError(err)\n\n\terr = suite.db.QueryRow(\"select count(*) from \" + getTestTableName()).Scan(&OriginalValue)\n\tsuite.Require().NoError(err)\n\n\tsuite.Require().LessOrEqual(delValue, OriginalValue)\n\n\tvar tableName, createTableSQL string\n\t//nolint:execinquery\n\terr = suite.db.QueryRow(\"SHOW CREATE TABLE \"+getTestTableName()).Scan(&tableName, &createTableSQL)\n\tsuite.Require().NoError(err)\n\n\tsuite.Require().Equal(testMysqlTableName, tableName)\n\tsuite.Require().Equal(\"CREATE TABLE `testing` (\\n  `id` int NOT NULL,\\n  `name` varchar(64) DEFAULT NULL,\\n  `foobar` varchar(255) DEFAULT NULL,\\n  PRIMARY KEY (`id`)\\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci\", createTableSQL)\n}\n\nfunc (suite *MigratorTestSuite) TestRevertEmpty() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, s CHAR(32))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tvar oldTableName string\n\n\t// perform original migration\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\t{\n\t\tmigrationContext := newTestMigrationContext()\n\t\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\t\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\t\tmigrationContext.SetConnectionConfig(\"innodb\")\n\t\tmigrationContext.AlterStatement = \"ADD COLUMN newcol CHAR(32)\"\n\t\tmigrationContext.Checkpoint = true\n\t\tmigrationContext.CheckpointIntervalSeconds = 10\n\t\tmigrationContext.DropServeSocket = true\n\t\tmigrationContext.InitiallyDropOldTable = true\n\t\tmigrationContext.UseGTIDs = true\n\n\t\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\n\t\terr = migrator.Migrate()\n\t\toldTableName = migrationContext.GetOldTableName()\n\t\tsuite.Require().NoError(err)\n\t}\n\n\t// revert the original migration\n\t{\n\t\tmigrationContext := newTestMigrationContext()\n\t\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\t\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\t\tmigrationContext.SetConnectionConfig(\"innodb\")\n\t\tmigrationContext.DropServeSocket = true\n\t\tmigrationContext.UseGTIDs = true\n\t\tmigrationContext.Revert = true\n\t\tmigrationContext.OkToDropTable = true\n\t\tmigrationContext.OldTableName = oldTableName\n\n\t\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\n\t\terr = migrator.Revert()\n\t\tsuite.Require().NoError(err)\n\t}\n}\n\nfunc (suite *MigratorTestSuite) TestRevert() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, s CHAR(32))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tnumRows := 0\n\tfor range 100 {\n\t\t_, err = suite.db.ExecContext(ctx,\n\t\t\tfmt.Sprintf(\"INSERT INTO %s (id, s) VALUES (%d, MD5('%d'))\", getTestTableName(), numRows, numRows))\n\t\tsuite.Require().NoError(err)\n\t\tnumRows += 1\n\t}\n\n\tvar oldTableName string\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\t// perform original migration\n\t{\n\t\tmigrationContext := newTestMigrationContext()\n\t\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\t\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\t\tmigrationContext.SetConnectionConfig(\"innodb\")\n\t\tmigrationContext.AlterStatement = \"ADD INDEX idx1 (s)\"\n\t\tmigrationContext.Checkpoint = true\n\t\tmigrationContext.CheckpointIntervalSeconds = 10\n\t\tmigrationContext.DropServeSocket = true\n\t\tmigrationContext.InitiallyDropOldTable = true\n\t\tmigrationContext.UseGTIDs = true\n\n\t\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\n\t\terr = migrator.Migrate()\n\t\toldTableName = migrationContext.GetOldTableName()\n\t\tsuite.Require().NoError(err)\n\t}\n\n\t// do some writes\n\tfor range 100 {\n\t\t_, err = suite.db.ExecContext(ctx,\n\t\t\tfmt.Sprintf(\"INSERT INTO %s (id, s) VALUES (%d, MD5('%d'))\", getTestTableName(), numRows, numRows))\n\t\tsuite.Require().NoError(err)\n\t\tnumRows += 1\n\t}\n\tfor i := 0; i < numRows; i += 7 {\n\t\t_, err = suite.db.ExecContext(ctx,\n\t\t\tfmt.Sprintf(\"UPDATE %s SET s=MD5('%d') where id=%d\", getTestTableName(), 2*i, i))\n\t\tsuite.Require().NoError(err)\n\t}\n\n\t// revert the original migration\n\t{\n\t\tmigrationContext := newTestMigrationContext()\n\t\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\t\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\t\tmigrationContext.SetConnectionConfig(\"innodb\")\n\t\tmigrationContext.DropServeSocket = true\n\t\tmigrationContext.UseGTIDs = true\n\t\tmigrationContext.Revert = true\n\t\tmigrationContext.OldTableName = oldTableName\n\n\t\tmigrator := NewMigrator(migrationContext, \"0.0.0\")\n\n\t\terr = migrator.Revert()\n\t\toldTableName = migrationContext.GetOldTableName()\n\t\tsuite.Require().NoError(err)\n\t}\n\n\t// checksum original and reverted table\n\tvar _tableName, checksum1, checksum2 string\n\trows, err := suite.db.Query(fmt.Sprintf(\"CHECKSUM TABLE %s, %s\", testMysqlTableName, oldTableName))\n\tsuite.Require().NoError(err)\n\tdefer rows.Close()\n\tsuite.Require().True(rows.Next())\n\tsuite.Require().NoError(rows.Scan(&_tableName, &checksum1))\n\tsuite.Require().True(rows.Next())\n\tsuite.Require().NoError(rows.Scan(&_tableName, &checksum2))\n\tsuite.Require().NoError(rows.Err())\n\n\tsuite.Require().Equal(checksum1, checksum2)\n}\n\nfunc TestMigrator(t *testing.T) {\n\tsuite.Run(t, new(MigratorTestSuite))\n}\n\nfunc TestPanicAbort_PropagatesError(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Start listenOnPanicAbort\n\tgo migrator.listenOnPanicAbort()\n\n\t// Send an error to PanicAbort\n\ttestErr := errors.New(\"test abort error\")\n\tgo func() {\n\t\tmigrationContext.PanicAbort <- testErr\n\t}()\n\n\t// Wait a bit for error to be processed\n\ttime.Sleep(100 * time.Millisecond)\n\n\t// Verify error was stored\n\tgot := migrationContext.GetAbortError()\n\tif got != testErr { //nolint:errorlint // Testing pointer equality for sentinel error\n\t\tt.Errorf(\"Expected error %v, got %v\", testErr, got)\n\t}\n\n\t// Verify context was cancelled\n\tctx := migrationContext.GetContext()\n\tselect {\n\tcase <-ctx.Done():\n\t\t// Success - context was cancelled\n\tdefault:\n\t\tt.Error(\"Expected context to be cancelled\")\n\t}\n}\n\nfunc TestPanicAbort_FirstErrorWins(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Start listenOnPanicAbort\n\tgo migrator.listenOnPanicAbort()\n\n\t// Send first error\n\terr1 := errors.New(\"first error\")\n\tgo func() {\n\t\tmigrationContext.PanicAbort <- err1\n\t}()\n\n\t// Wait for first error to be processed\n\ttime.Sleep(50 * time.Millisecond)\n\n\t// Try to send second error (should be ignored)\n\terr2 := errors.New(\"second error\")\n\tmigrationContext.SetAbortError(err2)\n\n\t// Verify only first error is stored\n\tgot := migrationContext.GetAbortError()\n\tif got != err1 { //nolint:errorlint // Testing pointer equality for sentinel error\n\t\tt.Errorf(\"Expected first error %v, got %v\", err1, got)\n\t}\n}\n\nfunc TestAbort_AfterRowCopy(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Start listenOnPanicAbort\n\tgo migrator.listenOnPanicAbort()\n\n\t// Give listenOnPanicAbort time to start\n\ttime.Sleep(20 * time.Millisecond)\n\n\t// Simulate row copy error by sending to rowCopyComplete in a goroutine\n\t// (unbuffered channel, so send must be async)\n\ttestErr := errors.New(\"row copy failed\")\n\tgo func() {\n\t\tmigrator.rowCopyComplete <- testErr\n\t}()\n\n\t// Consume the error (simulating what Migrate() does)\n\t// This is a blocking call that waits for the error\n\tmigrator.consumeRowCopyComplete()\n\n\t// Wait for the error to be processed by listenOnPanicAbort\n\ttime.Sleep(50 * time.Millisecond)\n\n\t// Check that error was stored\n\tif got := migrationContext.GetAbortError(); got == nil {\n\t\tt.Fatal(\"Expected abort error to be stored after row copy error\")\n\t} else if got.Error() != \"row copy failed\" {\n\t\tt.Errorf(\"Expected 'row copy failed', got %v\", got)\n\t}\n\n\t// Verify context was cancelled\n\tctx := migrationContext.GetContext()\n\tselect {\n\tcase <-ctx.Done():\n\t\t// Success\n\tcase <-time.After(1 * time.Second):\n\t\tt.Error(\"Expected context to be cancelled after row copy error\")\n\t}\n}\n\nfunc TestAbort_DuringInspection(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Start listenOnPanicAbort\n\tgo migrator.listenOnPanicAbort()\n\n\t// Simulate error during inspection phase\n\ttestErr := errors.New(\"inspection failed\")\n\tgo func() {\n\t\ttime.Sleep(10 * time.Millisecond)\n\t\tselect {\n\t\tcase migrationContext.PanicAbort <- testErr:\n\t\tcase <-migrationContext.GetContext().Done():\n\t\t}\n\t}()\n\n\t// Wait for abort to be processed\n\ttime.Sleep(50 * time.Millisecond)\n\n\t// Call checkAbort (simulating what Migrate() does after initiateInspector)\n\terr := migrator.checkAbort()\n\tif err == nil {\n\t\tt.Fatal(\"Expected checkAbort to return error after abort during inspection\")\n\t}\n\n\tif err.Error() != \"inspection failed\" {\n\t\tt.Errorf(\"Expected 'inspection failed', got %v\", err)\n\t}\n}\n\nfunc TestAbort_DuringStreaming(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Start listenOnPanicAbort\n\tgo migrator.listenOnPanicAbort()\n\n\t// Simulate error from streaming goroutine\n\ttestErr := errors.New(\"streaming error\")\n\tgo func() {\n\t\ttime.Sleep(10 * time.Millisecond)\n\t\t// Use select pattern like actual code does\n\t\tselect {\n\t\tcase migrationContext.PanicAbort <- testErr:\n\t\tcase <-migrationContext.GetContext().Done():\n\t\t}\n\t}()\n\n\t// Wait for abort to be processed\n\ttime.Sleep(50 * time.Millisecond)\n\n\t// Verify error stored and context cancelled\n\tif got := migrationContext.GetAbortError(); got == nil {\n\t\tt.Fatal(\"Expected abort error to be stored\")\n\t} else if got.Error() != \"streaming error\" {\n\t\tt.Errorf(\"Expected 'streaming error', got %v\", got)\n\t}\n\n\t// Verify checkAbort catches it\n\terr := migrator.checkAbort()\n\tif err == nil {\n\t\tt.Fatal(\"Expected checkAbort to return error after streaming abort\")\n\t}\n}\n\nfunc TestRetryExhaustion_TriggersAbort(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.SetDefaultNumRetries(2) // Only 2 retries\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Start listenOnPanicAbort\n\tgo migrator.listenOnPanicAbort()\n\n\t// Operation that always fails\n\tcallCount := 0\n\toperation := func() error {\n\t\tcallCount++\n\t\treturn errors.New(\"persistent failure\")\n\t}\n\n\t// Call retryOperation (with notFatalHint=false so it sends to PanicAbort)\n\terr := migrator.retryOperation(operation)\n\n\t// Should have called operation MaxRetries times\n\tif callCount != 2 {\n\t\tt.Errorf(\"Expected 2 retry attempts, got %d\", callCount)\n\t}\n\n\t// Should return the error\n\tif err == nil {\n\t\tt.Fatal(\"Expected retryOperation to return error\")\n\t}\n\n\t// Wait for abort to be processed\n\ttime.Sleep(100 * time.Millisecond)\n\n\t// Verify error was sent to PanicAbort and stored\n\tif got := migrationContext.GetAbortError(); got == nil {\n\t\tt.Error(\"Expected abort error to be stored after retry exhaustion\")\n\t}\n\n\t// Verify context was cancelled\n\tctx := migrationContext.GetContext()\n\tselect {\n\tcase <-ctx.Done():\n\t\t// Success\n\tdefault:\n\t\tt.Error(\"Expected context to be cancelled after retry exhaustion\")\n\t}\n}\n\nfunc TestRevert_AbortsOnError(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.Revert = true\n\tmigrationContext.OldTableName = \"_test_del\"\n\tmigrationContext.OriginalTableName = \"test\"\n\tmigrationContext.DatabaseName = \"testdb\"\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Start listenOnPanicAbort\n\tgo migrator.listenOnPanicAbort()\n\n\t// Simulate error during revert\n\ttestErr := errors.New(\"revert failed\")\n\tgo func() {\n\t\ttime.Sleep(10 * time.Millisecond)\n\t\tselect {\n\t\tcase migrationContext.PanicAbort <- testErr:\n\t\tcase <-migrationContext.GetContext().Done():\n\t\t}\n\t}()\n\n\t// Wait for abort to be processed\n\ttime.Sleep(50 * time.Millisecond)\n\n\t// Verify checkAbort catches it\n\terr := migrator.checkAbort()\n\tif err == nil {\n\t\tt.Fatal(\"Expected checkAbort to return error during revert\")\n\t}\n\n\tif err.Error() != \"revert failed\" {\n\t\tt.Errorf(\"Expected 'revert failed', got %v\", err)\n\t}\n\n\t// Verify context was cancelled\n\tctx := migrationContext.GetContext()\n\tselect {\n\tcase <-ctx.Done():\n\t\t// Success\n\tdefault:\n\t\tt.Error(\"Expected context to be cancelled during revert abort\")\n\t}\n}\n\nfunc TestCheckAbort_ReturnsNilWhenNoError(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// No error has occurred\n\terr := migrator.checkAbort()\n\tif err != nil {\n\t\tt.Errorf(\"Expected no error, got %v\", err)\n\t}\n}\n\nfunc TestCheckAbort_DetectsContextCancellation(t *testing.T) {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrator := NewMigrator(migrationContext, \"1.0.0\")\n\n\t// Cancel context directly (without going through PanicAbort)\n\tmigrationContext.CancelContext()\n\n\t// checkAbort should detect the cancellation\n\terr := migrator.checkAbort()\n\tif err == nil {\n\t\tt.Fatal(\"Expected checkAbort to return error when context is cancelled\")\n\t}\n}\n"
  },
  {
    "path": "go/logic/my.cnf.test",
    "content": "# mysql server configuration for testcontainer\n[mysqld]\nmax_connections = 200\ninnodb_log_file_size = 64M\ninnodb_flush_log_at_trx_commit = 2\ninnodb_flush_method = O_DIRECT\nskip-name-resolve\nskip-ssl\n\ncharacter-set-server = utf8mb4\ncollation-server = utf8mb4_0900_ai_ci\n\ndefault-time-zone = '+00:00'\n\nsql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION\n\ngeneral_log = 0\ngeneral_log_file = /var/log/mysql/general.log\nslow_query_log = 0\nslow_query_log_file = /var/log/mysql/slow.log\nlong_query_time = 2\n\ngtid_mode=ON\nenforce_gtid_consistency=ON\n\n[client]\ndefault-character-set = utf8mb4\n"
  },
  {
    "path": "go/logic/server.go",
    "content": "/*\n   Copyright 2021 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"runtime\"\n\t\"runtime/pprof\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/base\"\n)\n\nvar (\n\tErrCPUProfilingBadOption  = errors.New(\"unrecognized cpu profiling option\")\n\tErrCPUProfilingInProgress = errors.New(\"cpu profiling already in progress\")\n\tdefaultCPUProfileDuration = time.Second * 30\n)\n\ntype printStatusFunc func(PrintStatusRule, io.Writer)\n\n// Server listens for requests on a socket file or via TCP\ntype Server struct {\n\tmigrationContext *base.MigrationContext\n\tunixListener     net.Listener\n\ttcpListener      net.Listener\n\thooksExecutor    *HooksExecutor\n\tprintStatus      printStatusFunc\n\tisCPUProfiling   int64\n}\n\nfunc NewServer(migrationContext *base.MigrationContext, hooksExecutor *HooksExecutor, printStatus printStatusFunc) *Server {\n\treturn &Server{\n\t\tmigrationContext: migrationContext,\n\t\thooksExecutor:    hooksExecutor,\n\t\tprintStatus:      printStatus,\n\t}\n}\n\nfunc (this *Server) runCPUProfile(args string) (io.Reader, error) {\n\tduration := defaultCPUProfileDuration\n\n\tvar err error\n\tvar blockProfile, useGzip bool\n\tif args != \"\" {\n\t\ts := strings.Split(args, \",\")\n\t\t// a duration string must be the 1st field, if any\n\t\tif duration, err = time.ParseDuration(s[0]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, arg := range s[1:] {\n\t\t\tswitch arg {\n\t\t\tcase \"block\", \"blocked\", \"blocking\":\n\t\t\t\tblockProfile = true\n\t\t\tcase \"gzip\":\n\t\t\t\tuseGzip = true\n\t\t\tdefault:\n\t\t\t\treturn nil, ErrCPUProfilingBadOption\n\t\t\t}\n\t\t}\n\t}\n\n\tif atomic.LoadInt64(&this.isCPUProfiling) > 0 {\n\t\treturn nil, ErrCPUProfilingInProgress\n\t}\n\tatomic.StoreInt64(&this.isCPUProfiling, 1)\n\tdefer atomic.StoreInt64(&this.isCPUProfiling, 0)\n\n\tvar buf bytes.Buffer\n\tvar writer io.Writer = &buf\n\tif blockProfile {\n\t\truntime.SetBlockProfileRate(1)\n\t\tdefer runtime.SetBlockProfileRate(0)\n\t}\n\tif useGzip {\n\t\twriter = gzip.NewWriter(writer)\n\t}\n\tif err = pprof.StartCPUProfile(writer); err != nil {\n\t\treturn nil, err\n\t}\n\n\ttime.Sleep(duration)\n\tpprof.StopCPUProfile()\n\tthis.migrationContext.Log.Infof(\"Captured %d byte runtime/pprof CPU profile (gzip=%v)\", buf.Len(), useGzip)\n\treturn &buf, nil\n}\n\nfunc (this *Server) createPostponeCutOverFlagFile(filePath string) (err error) {\n\tif !base.FileExists(filePath) {\n\t\tif err := base.TouchFile(filePath); err != nil {\n\t\t\treturn fmt.Errorf(\"Failed to create postpone cut-over flag file %s: %w\", filePath, err)\n\t\t}\n\t\tthis.migrationContext.Log.Infof(\"Created postpone-cut-over-flag-file: %s\", filePath)\n\t}\n\treturn nil\n}\n\nfunc (this *Server) BindSocketFile() (err error) {\n\tif this.migrationContext.ServeSocketFile == \"\" {\n\t\treturn nil\n\t}\n\tif this.migrationContext.DropServeSocket && base.FileExists(this.migrationContext.ServeSocketFile) {\n\t\tos.Remove(this.migrationContext.ServeSocketFile)\n\t}\n\tthis.unixListener, err = net.Listen(\"unix\", this.migrationContext.ServeSocketFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Listening on unix socket file: %s\", this.migrationContext.ServeSocketFile)\n\treturn nil\n}\n\nfunc (this *Server) RemoveSocketFile() (err error) {\n\tthis.migrationContext.Log.Infof(\"Removing socket file: %s\", this.migrationContext.ServeSocketFile)\n\treturn os.Remove(this.migrationContext.ServeSocketFile)\n}\n\nfunc (this *Server) BindTCPPort() (err error) {\n\tif this.migrationContext.ServeTCPPort == 0 {\n\t\treturn nil\n\t}\n\tthis.tcpListener, err = net.Listen(\"tcp\", fmt.Sprintf(\":%d\", this.migrationContext.ServeTCPPort))\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.migrationContext.Log.Infof(\"Listening on tcp port: %d\", this.migrationContext.ServeTCPPort)\n\treturn nil\n}\n\n// Serve begins listening & serving on whichever device was configured\nfunc (this *Server) Serve() (err error) {\n\tgo func() {\n\t\tfor {\n\t\t\tconn, err := this.unixListener.Accept()\n\t\t\tif err != nil {\n\t\t\t\tthis.migrationContext.Log.Errore(err)\n\t\t\t}\n\t\t\tgo this.handleConnection(conn)\n\t\t}\n\t}()\n\tgo func() {\n\t\tif this.tcpListener == nil {\n\t\t\treturn\n\t\t}\n\t\tfor {\n\t\t\tconn, err := this.tcpListener.Accept()\n\t\t\tif err != nil {\n\t\t\t\tthis.migrationContext.Log.Errore(err)\n\t\t\t}\n\t\t\tgo this.handleConnection(conn)\n\t\t}\n\t}()\n\n\treturn nil\n}\n\nfunc (this *Server) handleConnection(conn net.Conn) (err error) {\n\tif conn != nil {\n\t\tdefer conn.Close()\n\t}\n\tcommand, _, err := bufio.NewReader(conn).ReadLine()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn this.onServerCommand(string(command), bufio.NewWriter(conn))\n}\n\n// onServerCommand responds to a user's interactive command\nfunc (this *Server) onServerCommand(command string, writer *bufio.Writer) (err error) {\n\tdefer writer.Flush()\n\n\tprintStatusRule, err := this.applyServerCommand(command, writer)\n\tif err == nil {\n\t\tthis.printStatus(printStatusRule, writer)\n\t} else {\n\t\tfmt.Fprintf(writer, \"%s\\n\", err.Error())\n\t}\n\treturn this.migrationContext.Log.Errore(err)\n}\n\n// applyServerCommand parses and executes commands by user\nfunc (this *Server) applyServerCommand(command string, writer *bufio.Writer) (printStatusRule PrintStatusRule, err error) {\n\ttokens := strings.SplitN(command, \"=\", 2)\n\tcommand = strings.TrimSpace(tokens[0])\n\targ := \"\"\n\tif len(tokens) > 1 {\n\t\targ = strings.TrimSpace(tokens[1])\n\t\tif unquoted, err := strconv.Unquote(arg); err == nil {\n\t\t\targ = unquoted\n\t\t}\n\t}\n\targIsQuestion := (arg == \"?\")\n\tthrottleHint := \"# Note: you may only throttle for as long as your binary logs are not purged\"\n\n\tif err := this.hooksExecutor.onInteractiveCommand(command); err != nil {\n\t\treturn NoPrintStatusRule, err\n\t}\n\n\tswitch command {\n\tcase \"help\":\n\t\t{\n\t\t\tfmt.Fprint(writer, `available commands:\nstatus                               # Print a detailed status message\nsup                                  # Print a short status message\ncpu-profile=<options>                # Print a base64-encoded runtime/pprof CPU profile using a duration, default: 30s. Comma-separated options 'gzip' and/or 'block' (blocked profile) may follow the profile duration\ncoordinates                          # Print the currently inspected coordinates\napplier                              # Print the hostname of the applier\ninspector                            # Print the hostname of the inspector\nchunk-size=<newsize>                 # Set a new chunk-size\ndml-batch-size=<newsize>             # Set a new dml-batch-size\nnice-ratio=<ratio>                   # Set a new nice-ratio, immediate sleep after each row-copy operation, float (examples: 0 is aggressive, 0.7 adds 70% runtime, 1.0 doubles runtime, 2.0 triples runtime, ...)\ncritical-load=<load>                 # Set a new set of max-load thresholds\nmax-lag-millis=<max-lag>             # Set a new replication lag threshold\nreplication-lag-query=<query>        # Set a new query that determines replication lag (no quotes)\nmax-load=<load>                      # Set a new set of max-load thresholds\nthrottle-query=<query>               # Set a new throttle-query (no quotes)\nthrottle-http=<URL>                  # Set a new throttle URL\nthrottle-control-replicas=<replicas> # Set a new comma delimited list of throttle control replicas\nthrottle                             # Force throttling\nno-throttle                          # End forced throttling (other throttling may still apply)\npostpone-cut-over-flag-file=<path>   # Postpone the cut-over phase, writing a cut over flag file to the given path\nunpostpone                           # Bail out a cut-over postpone; proceed to cut-over\npanic                                # panic and quit without cleanup\nhelp                                 # This message\n- use '?' (question mark) as argument to get info rather than set. e.g. \"max-load=?\" will just print out current max-load.\n`)\n\t\t}\n\tcase \"sup\":\n\t\treturn ForcePrintStatusOnlyRule, nil\n\tcase \"info\", \"status\":\n\t\treturn ForcePrintStatusAndHintRule, nil\n\tcase \"cpu-profile\":\n\t\tcpuProfile, err := this.runCPUProfile(arg)\n\t\tif err == nil {\n\t\t\tfmt.Fprint(base64.NewEncoder(base64.StdEncoding, writer), cpuProfile)\n\t\t}\n\t\treturn NoPrintStatusRule, err\n\tcase \"coordinates\":\n\t\t{\n\t\t\tif argIsQuestion || arg == \"\" {\n\t\t\t\tfmt.Fprintf(writer, \"%+v\\n\", this.migrationContext.GetRecentBinlogCoordinates())\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\treturn NoPrintStatusRule, fmt.Errorf(\"coordinates are read-only\")\n\t\t}\n\tcase \"applier\":\n\t\tif this.migrationContext.ApplierConnectionConfig != nil && this.migrationContext.ApplierConnectionConfig.ImpliedKey != nil {\n\t\t\tfmt.Fprintf(writer, \"Host: %s, Version: %s\\n\",\n\t\t\t\tthis.migrationContext.ApplierConnectionConfig.ImpliedKey.String(),\n\t\t\t\tthis.migrationContext.ApplierMySQLVersion,\n\t\t\t)\n\t\t}\n\t\treturn NoPrintStatusRule, nil\n\tcase \"inspector\":\n\t\tif this.migrationContext.InspectorConnectionConfig != nil && this.migrationContext.InspectorConnectionConfig.ImpliedKey != nil {\n\t\t\tfmt.Fprintf(writer, \"Host: %s, Version: %s\\n\",\n\t\t\t\tthis.migrationContext.InspectorConnectionConfig.ImpliedKey.String(),\n\t\t\t\tthis.migrationContext.InspectorMySQLVersion,\n\t\t\t)\n\t\t}\n\t\treturn NoPrintStatusRule, nil\n\tcase \"chunk-size\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tfmt.Fprintf(writer, \"%+v\\n\", atomic.LoadInt64(&this.migrationContext.ChunkSize))\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tif chunkSize, err := strconv.Atoi(arg); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t} else {\n\t\t\t\tthis.migrationContext.SetChunkSize(int64(chunkSize))\n\t\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t\t}\n\t\t}\n\tcase \"dml-batch-size\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tfmt.Fprintf(writer, \"%+v\\n\", atomic.LoadInt64(&this.migrationContext.DMLBatchSize))\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tif dmlBatchSize, err := strconv.Atoi(arg); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t} else {\n\t\t\t\tthis.migrationContext.SetDMLBatchSize(int64(dmlBatchSize))\n\t\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t\t}\n\t\t}\n\tcase \"max-lag-millis\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tfmt.Fprintf(writer, \"%+v\\n\", atomic.LoadInt64(&this.migrationContext.MaxLagMillisecondsThrottleThreshold))\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tif maxLagMillis, err := strconv.Atoi(arg); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t} else {\n\t\t\t\tthis.migrationContext.SetMaxLagMillisecondsThrottleThreshold(int64(maxLagMillis))\n\t\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t\t}\n\t\t}\n\tcase \"replication-lag-query\":\n\t\t{\n\t\t\treturn NoPrintStatusRule, fmt.Errorf(\"replication-lag-query is deprecated. gh-ost uses an internal, subsecond resolution query\")\n\t\t}\n\tcase \"nice-ratio\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tfmt.Fprintf(writer, \"%+v\\n\", this.migrationContext.GetNiceRatio())\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tif niceRatio, err := strconv.ParseFloat(arg, 64); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t} else {\n\t\t\t\tthis.migrationContext.SetNiceRatio(niceRatio)\n\t\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t\t}\n\t\t}\n\tcase \"max-load\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tmaxLoad := this.migrationContext.GetMaxLoad()\n\t\t\t\tfmt.Fprintf(writer, \"%s\\n\", maxLoad.String())\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tif err := this.migrationContext.ReadMaxLoad(arg); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"critical-load\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tcriticalLoad := this.migrationContext.GetCriticalLoad()\n\t\t\t\tfmt.Fprintf(writer, \"%s\\n\", criticalLoad.String())\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tif err := this.migrationContext.ReadCriticalLoad(arg); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"throttle-query\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tfmt.Fprintf(writer, \"%+v\\n\", this.migrationContext.GetThrottleQuery())\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tthis.migrationContext.SetThrottleQuery(arg)\n\t\t\tfmt.Fprintln(writer, throttleHint)\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"throttle-http\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tfmt.Fprintf(writer, \"%+v\\n\", this.migrationContext.GetThrottleHTTP())\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tthis.migrationContext.SetThrottleHTTP(arg)\n\t\t\tfmt.Fprintln(writer, throttleHint)\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"throttle-control-replicas\":\n\t\t{\n\t\t\tif argIsQuestion {\n\t\t\t\tfmt.Fprintf(writer, \"%s\\n\", this.migrationContext.GetThrottleControlReplicaKeys().ToCommaDelimitedList())\n\t\t\t\treturn NoPrintStatusRule, nil\n\t\t\t}\n\t\t\tif err := this.migrationContext.ReadThrottleControlReplicaKeys(arg); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tfmt.Fprintf(writer, \"%s\\n\", this.migrationContext.GetThrottleControlReplicaKeys().ToCommaDelimitedList())\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"throttle\", \"pause\", \"suspend\":\n\t\t{\n\t\t\tif arg != \"\" && arg != this.migrationContext.OriginalTableName {\n\t\t\t\t// User explicitly provided table name. This is a courtesy protection mechanism\n\t\t\t\terr := fmt.Errorf(\"User commanded 'throttle' on %s, but migrated table is %s; ignoring request.\", arg, this.migrationContext.OriginalTableName)\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tatomic.StoreInt64(&this.migrationContext.ThrottleCommandedByUser, 1)\n\t\t\tfmt.Fprintln(writer, throttleHint)\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"no-throttle\", \"unthrottle\", \"resume\", \"continue\":\n\t\t{\n\t\t\tif arg != \"\" && arg != this.migrationContext.OriginalTableName {\n\t\t\t\t// User explicitly provided table name. This is a courtesy protection mechanism\n\t\t\t\terr := fmt.Errorf(\"User commanded 'no-throttle' on %s, but migrated table is %s; ignoring request.\", arg, this.migrationContext.OriginalTableName)\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tatomic.StoreInt64(&this.migrationContext.ThrottleCommandedByUser, 0)\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"postpone-cut-over-flag-file\":\n\t\t{\n\t\t\tif arg == \"\" {\n\t\t\t\terr := fmt.Errorf(\"User commanded 'postpone-cut-over-flag-file' without specifying file path\")\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tif err := this.createPostponeCutOverFlagFile(arg); err != nil {\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tthis.migrationContext.PostponeCutOverFlagFile = arg\n\t\t\tfmt.Fprintf(writer, \"Postponed\\n\")\n\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t}\n\tcase \"unpostpone\", \"no-postpone\", \"cut-over\":\n\t\t{\n\t\t\tif arg == \"\" && this.migrationContext.ForceNamedCutOverCommand {\n\t\t\t\terr := fmt.Errorf(\"User commanded 'unpostpone' without specifying table name, but --force-named-cut-over is set\")\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tif arg != \"\" && arg != this.migrationContext.OriginalTableName {\n\t\t\t\t// User explicitly provided table name. This is a courtesy protection mechanism\n\t\t\t\terr := fmt.Errorf(\"User commanded 'unpostpone' on %s, but migrated table is %s; ignoring request.\", arg, this.migrationContext.OriginalTableName)\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tif atomic.LoadInt64(&this.migrationContext.IsPostponingCutOver) > 0 {\n\t\t\t\tatomic.StoreInt64(&this.migrationContext.UserCommandedUnpostponeFlag, 1)\n\t\t\t\tfmt.Fprintf(writer, \"Unpostponed\\n\")\n\t\t\t\treturn ForcePrintStatusAndHintRule, nil\n\t\t\t}\n\t\t\tfmt.Fprintf(writer, \"You may only invoke this when gh-ost is actively postponing migration. At this time it is not.\\n\")\n\t\t\treturn NoPrintStatusRule, nil\n\t\t}\n\tcase \"panic\":\n\t\t{\n\t\t\tif arg == \"\" && this.migrationContext.ForceNamedPanicCommand {\n\t\t\t\terr := fmt.Errorf(\"User commanded 'panic' without specifying table name, but --force-named-panic is set\")\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\tif arg != \"\" && arg != this.migrationContext.OriginalTableName {\n\t\t\t\t// User explicitly provided table name. This is a courtesy protection mechanism\n\t\t\t\terr := fmt.Errorf(\"User commanded 'panic' on %s, but migrated table is %s; ignoring request.\", arg, this.migrationContext.OriginalTableName)\n\t\t\t\treturn NoPrintStatusRule, err\n\t\t\t}\n\t\t\terr := fmt.Errorf(\"User commanded 'panic'. The migration will be aborted without cleanup. Please drop the gh-ost tables before trying again.\")\n\t\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, err)\n\t\t\treturn NoPrintStatusRule, err\n\t\t}\n\tdefault:\n\t\terr = fmt.Errorf(\"Unknown command: %s\", command)\n\t\treturn NoPrintStatusRule, err\n\t}\n\treturn NoPrintStatusRule, nil\n}\n"
  },
  {
    "path": "go/logic/server_test.go",
    "content": "package logic\n\nimport (\n\t\"os\"\n\t\"path\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc TestServerRunCPUProfile(t *testing.T) {\n\tt.Parallel()\n\n\tt.Run(\"failed already running\", func(t *testing.T) {\n\t\ts := &Server{isCPUProfiling: 1}\n\t\tprofile, err := s.runCPUProfile(\"15ms\")\n\t\trequire.Equal(t, err, ErrCPUProfilingInProgress)\n\t\trequire.Nil(t, profile)\n\t})\n\n\tt.Run(\"failed bad duration\", func(t *testing.T) {\n\t\ts := &Server{isCPUProfiling: 0}\n\t\tprofile, err := s.runCPUProfile(\"should-fail\")\n\t\trequire.Error(t, err)\n\t\trequire.Nil(t, profile)\n\t})\n\n\tt.Run(\"failed bad option\", func(t *testing.T) {\n\t\ts := &Server{isCPUProfiling: 0}\n\t\tprofile, err := s.runCPUProfile(\"10ms,badoption\")\n\t\trequire.Equal(t, err, ErrCPUProfilingBadOption)\n\t\trequire.Nil(t, profile)\n\t})\n\n\tt.Run(\"success\", func(t *testing.T) {\n\t\ts := &Server{\n\t\t\tisCPUProfiling:   0,\n\t\t\tmigrationContext: base.NewMigrationContext(),\n\t\t}\n\t\tdefaultCPUProfileDuration = time.Millisecond * 10\n\t\tprofile, err := s.runCPUProfile(\"\")\n\t\trequire.NoError(t, err)\n\t\trequire.NotNil(t, profile)\n\t\trequire.Equal(t, int64(0), s.isCPUProfiling)\n\t})\n\n\tt.Run(\"success with block\", func(t *testing.T) {\n\t\ts := &Server{\n\t\t\tisCPUProfiling:   0,\n\t\t\tmigrationContext: base.NewMigrationContext(),\n\t\t}\n\t\tprofile, err := s.runCPUProfile(\"10ms,block\")\n\t\trequire.NoError(t, err)\n\t\trequire.NotNil(t, profile)\n\t\trequire.Equal(t, int64(0), s.isCPUProfiling)\n\t})\n\n\tt.Run(\"success with block and gzip\", func(t *testing.T) {\n\t\ts := &Server{\n\t\t\tisCPUProfiling:   0,\n\t\t\tmigrationContext: base.NewMigrationContext(),\n\t\t}\n\t\tprofile, err := s.runCPUProfile(\"10ms,block,gzip\")\n\t\trequire.NoError(t, err)\n\t\trequire.NotNil(t, profile)\n\t\trequire.Equal(t, int64(0), s.isCPUProfiling)\n\t})\n}\n\nfunc TestServerCreatePostponeCutOverFlagFile(t *testing.T) {\n\tt.Parallel()\n\n\tt.Run(\"success\", func(t *testing.T) {\n\t\ts := &Server{\n\t\t\tmigrationContext: base.NewMigrationContext(),\n\t\t}\n\t\tdir, err := os.MkdirTemp(\"\", \"gh-ost-test-\")\n\t\trequire.NoError(t, err)\n\t\tdefer os.RemoveAll(dir)\n\n\t\tfilePath := path.Join(dir, \"postpone-cut-over.flag\")\n\n\t\terr = s.createPostponeCutOverFlagFile(filePath)\n\t\trequire.NoError(t, err)\n\t\trequire.FileExists(t, filePath)\n\t})\n\n\tt.Run(\"file already exists\", func(t *testing.T) {\n\t\ts := &Server{\n\t\t\tmigrationContext: base.NewMigrationContext(),\n\t\t}\n\t\tdir, err := os.MkdirTemp(\"\", \"gh-ost-test-\")\n\t\trequire.NoError(t, err)\n\n\t\tfilePath := path.Join(dir, \"postpone-cut-over.flag\")\n\t\terr = base.TouchFile(filePath)\n\t\trequire.NoError(t, err)\n\n\t\terr = s.createPostponeCutOverFlagFile(filePath)\n\t\trequire.NoError(t, err)\n\t\trequire.FileExists(t, filePath)\n\t})\n}\n"
  },
  {
    "path": "go/logic/streamer.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\tgosql \"database/sql\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/binlog\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\n\tgomysql \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/openark/golib/sqlutils\"\n)\n\ntype BinlogEventListener struct {\n\tasync        bool\n\tdatabaseName string\n\ttableName    string\n\tonDmlEvent   func(event *binlog.BinlogEntry) error\n}\n\nconst (\n\tEventsChannelBufferSize       = 1\n\tReconnectStreamerSleepSeconds = 1\n)\n\n// EventsStreamer reads data from binary logs and streams it on. It acts as a publisher,\n// and interested parties may subscribe for per-table events.\ntype EventsStreamer struct {\n\tconnectionConfig         *mysql.ConnectionConfig\n\tdb                       *gosql.DB\n\tdbVersion                string\n\tmigrationContext         *base.MigrationContext\n\tinitialBinlogCoordinates mysql.BinlogCoordinates\n\tlisteners                [](*BinlogEventListener)\n\tlistenersMutex           *sync.Mutex\n\teventsChannel            chan *binlog.BinlogEntry\n\tbinlogReader             *binlog.GoMySQLReader\n\tname                     string\n}\n\nfunc NewEventsStreamer(migrationContext *base.MigrationContext) *EventsStreamer {\n\treturn &EventsStreamer{\n\t\tconnectionConfig:         migrationContext.InspectorConnectionConfig,\n\t\tmigrationContext:         migrationContext,\n\t\tlisteners:                [](*BinlogEventListener){},\n\t\tlistenersMutex:           &sync.Mutex{},\n\t\teventsChannel:            make(chan *binlog.BinlogEntry, EventsChannelBufferSize),\n\t\tname:                     \"streamer\",\n\t\tinitialBinlogCoordinates: migrationContext.InitialStreamerCoords,\n\t}\n}\n\n// AddListener registers a new listener for binlog events, on a per-table basis\nfunc (this *EventsStreamer) AddListener(\n\tasync bool, databaseName string, tableName string, onDmlEvent func(event *binlog.BinlogEntry) error) (err error) {\n\tthis.listenersMutex.Lock()\n\tdefer this.listenersMutex.Unlock()\n\n\tif databaseName == \"\" {\n\t\treturn fmt.Errorf(\"Empty database name in AddListener\")\n\t}\n\tif tableName == \"\" {\n\t\treturn fmt.Errorf(\"Empty table name in AddListener\")\n\t}\n\tlistener := &BinlogEventListener{\n\t\tasync:        async,\n\t\tdatabaseName: databaseName,\n\t\ttableName:    tableName,\n\t\tonDmlEvent:   onDmlEvent,\n\t}\n\tthis.listeners = append(this.listeners, listener)\n\treturn nil\n}\n\n// notifyListeners will notify relevant listeners with given DML event. Only\n// listeners registered for changes on the table on which the DML operates are notified.\nfunc (this *EventsStreamer) notifyListeners(binlogEntry *binlog.BinlogEntry) {\n\tthis.listenersMutex.Lock()\n\tdefer this.listenersMutex.Unlock()\n\n\tfor _, listener := range this.listeners {\n\t\tlistener := listener\n\t\tif !strings.EqualFold(listener.databaseName, binlogEntry.DmlEvent.DatabaseName) {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.EqualFold(listener.tableName, binlogEntry.DmlEvent.TableName) {\n\t\t\tcontinue\n\t\t}\n\t\tif listener.async {\n\t\t\tgo func() {\n\t\t\t\tlistener.onDmlEvent(binlogEntry)\n\t\t\t}()\n\t\t} else {\n\t\t\tlistener.onDmlEvent(binlogEntry)\n\t\t}\n\t}\n}\n\nfunc (this *EventsStreamer) InitDBConnections() (err error) {\n\tEventsStreamerUri := this.connectionConfig.GetDBUri(this.migrationContext.DatabaseName)\n\tif this.db, _, err = mysql.GetDB(this.migrationContext.Uuid, EventsStreamerUri); err != nil {\n\t\treturn err\n\t}\n\tversion, err := base.ValidateConnection(this.db, this.connectionConfig, this.migrationContext, this.name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.dbVersion = version\n\tif this.initialBinlogCoordinates == nil || this.initialBinlogCoordinates.IsEmpty() {\n\t\tif err := this.readCurrentBinlogCoordinates(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := this.initBinlogReader(this.initialBinlogCoordinates); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// initBinlogReader creates and connects the reader: we hook up to a MySQL server as a replica\nfunc (this *EventsStreamer) initBinlogReader(binlogCoordinates mysql.BinlogCoordinates) error {\n\tgoMySQLReader := binlog.NewGoMySQLReader(this.migrationContext)\n\tif err := goMySQLReader.ConnectBinlogStreamer(binlogCoordinates); err != nil {\n\t\treturn err\n\t}\n\tthis.binlogReader = goMySQLReader\n\treturn nil\n}\n\nfunc (this *EventsStreamer) GetCurrentBinlogCoordinates() mysql.BinlogCoordinates {\n\treturn this.binlogReader.GetCurrentBinlogCoordinates()\n}\n\n// readCurrentBinlogCoordinates reads master status from hooked server\nfunc (this *EventsStreamer) readCurrentBinlogCoordinates() error {\n\tbinaryLogStatusTerm := mysql.ReplicaTermFor(this.dbVersion, \"master status\")\n\tquery := fmt.Sprintf(\"show /* gh-ost readCurrentBinlogCoordinates */ %s\", binaryLogStatusTerm)\n\tfoundMasterStatus := false\n\terr := sqlutils.QueryRowsMap(this.db, query, func(m sqlutils.RowMap) error {\n\t\tif this.migrationContext.UseGTIDs {\n\t\t\texecGtidSet := m.GetString(\"Executed_Gtid_Set\")\n\t\t\tgtidSet, err := gomysql.ParseMysqlGTIDSet(execGtidSet)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tthis.initialBinlogCoordinates = &mysql.GTIDBinlogCoordinates{GTIDSet: gtidSet.(*gomysql.MysqlGTIDSet)}\n\t\t} else {\n\t\t\tthis.initialBinlogCoordinates = &mysql.FileBinlogCoordinates{\n\t\t\t\tLogFile: m.GetString(\"File\"),\n\t\t\t\tLogPos:  m.GetInt64(\"Position\"),\n\t\t\t}\n\t\t}\n\t\tfoundMasterStatus = true\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !foundMasterStatus {\n\t\treturn fmt.Errorf(\"Got no results from SHOW %s. Bailing out\", strings.ToUpper(binaryLogStatusTerm))\n\t}\n\tthis.migrationContext.Log.Debugf(\"Streamer binlog coordinates: %+v\", this.initialBinlogCoordinates)\n\treturn nil\n}\n\n// StreamEvents will begin streaming events. It will be blocking, so should be\n// executed by a goroutine\nfunc (this *EventsStreamer) StreamEvents(canStopStreaming func() bool) error {\n\tgo func() {\n\t\tfor binlogEntry := range this.eventsChannel {\n\t\t\tif binlogEntry.DmlEvent != nil {\n\t\t\t\tthis.notifyListeners(binlogEntry)\n\t\t\t}\n\t\t}\n\t}()\n\t// The next should block and execute forever, unless there's a serious error.\n\tvar successiveFailures int\n\tvar reconnectCoords mysql.BinlogCoordinates\n\tctx := this.migrationContext.GetContext()\n\tfor {\n\t\t// Check for context cancellation each iteration\n\t\tif err := ctx.Err(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif canStopStreaming() {\n\t\t\treturn nil\n\t\t}\n\t\t// We will reconnect the binlog streamer at the coordinates\n\t\t// of the last trx that was read completely from the streamer.\n\t\t// Since row event application is idempotent, it's OK if we reapply some events.\n\t\tif err := this.binlogReader.StreamEvents(canStopStreaming, this.eventsChannel); err != nil {\n\t\t\tif canStopStreaming() {\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tthis.migrationContext.Log.Infof(\"StreamEvents encountered unexpected error: %+v\", err)\n\t\t\tthis.migrationContext.MarkPointOfInterest()\n\t\t\ttime.Sleep(ReconnectStreamerSleepSeconds * time.Second)\n\n\t\t\t// See if there's retry overflow\n\t\t\tif this.migrationContext.BinlogSyncerMaxReconnectAttempts > 0 && successiveFailures >= this.migrationContext.BinlogSyncerMaxReconnectAttempts {\n\t\t\t\treturn fmt.Errorf(\"%d successive failures in streamer reconnect at coordinates %+v\", successiveFailures, reconnectCoords)\n\t\t\t}\n\n\t\t\t// Reposition at same coordinates\n\t\t\tif this.binlogReader.LastTrxCoords != nil {\n\t\t\t\treconnectCoords = this.binlogReader.LastTrxCoords.Clone()\n\t\t\t} else {\n\t\t\t\treconnectCoords = this.initialBinlogCoordinates.Clone()\n\t\t\t}\n\t\t\tif !reconnectCoords.SmallerThan(this.GetCurrentBinlogCoordinates()) {\n\t\t\t\tsuccessiveFailures += 1\n\t\t\t} else {\n\t\t\t\tsuccessiveFailures = 0\n\t\t\t}\n\n\t\t\tthis.migrationContext.Log.Infof(\"Reconnecting EventsStreamer... Will resume at %+v\", reconnectCoords)\n\t\t\t_ = this.binlogReader.Close()\n\t\t\tif err := this.initBinlogReader(reconnectCoords); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (this *EventsStreamer) Close() (err error) {\n\terr = this.binlogReader.Close()\n\tthis.migrationContext.Log.Infof(\"Closed streamer connection. err=%+v\", err)\n\treturn err\n}\n\nfunc (this *EventsStreamer) Teardown() {\n\tthis.db.Close()\n}\n"
  },
  {
    "path": "go/logic/streamer_test.go",
    "content": "package logic\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\tgosql \"database/sql\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/binlog\"\n\t\"github.com/stretchr/testify/suite\"\n\t\"github.com/testcontainers/testcontainers-go\"\n\t\"github.com/testcontainers/testcontainers-go/modules/mysql\"\n\n\t\"golang.org/x/sync/errgroup\"\n)\n\ntype EventsStreamerTestSuite struct {\n\tsuite.Suite\n\n\tmysqlContainer testcontainers.Container\n\tdb             *gosql.DB\n}\n\nfunc (suite *EventsStreamerTestSuite) SetupSuite() {\n\tctx := context.Background()\n\tmysqlContainer, err := mysql.Run(ctx,\n\t\ttestMysqlContainerImage,\n\t\tmysql.WithDatabase(testMysqlDatabase),\n\t\tmysql.WithUsername(testMysqlUser),\n\t\tmysql.WithPassword(testMysqlPass),\n\t)\n\tsuite.Require().NoError(err)\n\n\tsuite.mysqlContainer = mysqlContainer\n\tdsn, err := mysqlContainer.ConnectionString(ctx)\n\tsuite.Require().NoError(err)\n\n\tdb, err := gosql.Open(\"mysql\", dsn)\n\tsuite.Require().NoError(err)\n\n\tsuite.db = db\n}\n\nfunc (suite *EventsStreamerTestSuite) TeardownSuite() {\n\tsuite.Assert().NoError(suite.db.Close())\n\tsuite.Assert().NoError(testcontainers.TerminateContainer(suite.mysqlContainer))\n}\n\nfunc (suite *EventsStreamerTestSuite) SetupTest() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, \"CREATE DATABASE IF NOT EXISTS \"+testMysqlDatabase)\n\tsuite.Require().NoError(err)\n}\n\nfunc (suite *EventsStreamerTestSuite) TearDownTest() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestTableName())\n\tsuite.Require().NoError(err)\n\t_, err = suite.db.ExecContext(ctx, \"DROP TABLE IF EXISTS \"+getTestGhostTableName())\n\tsuite.Require().NoError(err)\n}\n\nfunc (suite *EventsStreamerTestSuite) TestStreamEvents() {\n\tctx := context.Background()\n\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, name VARCHAR(255))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tstreamer := NewEventsStreamer(migrationContext)\n\n\terr = streamer.InitDBConnections()\n\tsuite.Require().NoError(err)\n\tdefer streamer.Close()\n\tdefer streamer.Teardown()\n\n\tstreamCtx, cancel := context.WithCancel(context.Background())\n\n\tdmlEvents := make([]*binlog.BinlogDMLEvent, 0)\n\terr = streamer.AddListener(false, testMysqlDatabase, testMysqlTableName, func(event *binlog.BinlogEntry) error {\n\t\tdmlEvents = append(dmlEvents, event.DmlEvent)\n\n\t\t// Stop once we've collected three events\n\t\tif len(dmlEvents) == 3 {\n\t\t\tcancel()\n\t\t}\n\n\t\treturn nil\n\t})\n\tsuite.Require().NoError(err)\n\n\tgroup := errgroup.Group{}\n\tgroup.Go(func() error {\n\t\treturn streamer.StreamEvents(func() bool {\n\t\t\treturn streamCtx.Err() != nil\n\t\t})\n\t})\n\n\tgroup.Go(func() error {\n\t\tvar err error\n\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (1, 'foo')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (2, 'bar')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (3, 'baz')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Bug: Need to write fourth event to hit the canStopStreaming function again\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (4, 'qux')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn nil\n\t})\n\n\terr = group.Wait()\n\tsuite.Require().NoError(err)\n\n\tsuite.Require().Len(dmlEvents, 3)\n}\n\nfunc (suite *EventsStreamerTestSuite) TestStreamEventsAutomaticallyReconnects() {\n\tctx := context.Background()\n\t_, err := suite.db.ExecContext(ctx, fmt.Sprintf(\"CREATE TABLE %s (id INT PRIMARY KEY, name VARCHAR(255))\", getTestTableName()))\n\tsuite.Require().NoError(err)\n\n\tconnectionConfig, err := getTestConnectionConfig(ctx, suite.mysqlContainer)\n\tsuite.Require().NoError(err)\n\n\tmigrationContext := newTestMigrationContext()\n\tmigrationContext.ApplierConnectionConfig = connectionConfig\n\tmigrationContext.InspectorConnectionConfig = connectionConfig\n\tmigrationContext.SetConnectionConfig(\"innodb\")\n\n\tstreamer := NewEventsStreamer(migrationContext)\n\n\terr = streamer.InitDBConnections()\n\tsuite.Require().NoError(err)\n\tdefer streamer.Close()\n\tdefer streamer.Teardown()\n\n\tstreamCtx, cancel := context.WithCancel(context.Background())\n\n\tdmlEvents := make([]*binlog.BinlogDMLEvent, 0)\n\terr = streamer.AddListener(false, testMysqlDatabase, testMysqlTableName, func(event *binlog.BinlogEntry) error {\n\t\tdmlEvents = append(dmlEvents, event.DmlEvent)\n\n\t\t// Stop once we've collected three events\n\t\tif len(dmlEvents) == 3 {\n\t\t\tcancel()\n\t\t}\n\n\t\treturn nil\n\t})\n\tsuite.Require().NoError(err)\n\n\tgroup := errgroup.Group{}\n\tgroup.Go(func() error {\n\t\treturn streamer.StreamEvents(func() bool {\n\t\t\treturn streamCtx.Err() != nil\n\t\t})\n\t})\n\n\tgroup.Go(func() error {\n\t\tvar err error\n\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (1, 'foo')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (2, 'bar')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tvar currentConnectionId int\n\t\terr = suite.db.QueryRowContext(ctx, \"SELECT CONNECTION_ID()\").Scan(&currentConnectionId)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t//nolint:execinquery\n\t\trows, err := suite.db.Query(\"SHOW FULL PROCESSLIST\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer rows.Close()\n\n\t\tconnectionIdsToKill := make([]int, 0)\n\n\t\tvar id, stateTime int\n\t\tvar user, host, dbName, command, state, info sql.NullString\n\t\tfor rows.Next() {\n\t\t\terr = rows.Scan(&id, &user, &host, &dbName, &command, &stateTime, &state, &info)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tfmt.Printf(\"id: %d, user: %s, host: %s, dbName: %s, command: %s, time: %d, state: %s, info: %s\\n\", id, user.String, host.String, dbName.String, command.String, stateTime, state.String, info.String)\n\n\t\t\tif id != currentConnectionId && user.String == testMysqlUser {\n\t\t\t\tconnectionIdsToKill = append(connectionIdsToKill, id)\n\t\t\t}\n\t\t}\n\n\t\tif err := rows.Err(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfor _, connectionIdToKill := range connectionIdsToKill {\n\t\t\t_, err = suite.db.ExecContext(ctx, \"KILL ?\", connectionIdToKill)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\t// Bug: We need to wait here for the streamer to reconnect\n\t\ttime.Sleep(time.Second * 2)\n\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (3, 'baz')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Bug: Need to write fourth event to hit the canStopStreaming function again\n\t\t_, err = suite.db.ExecContext(ctx, fmt.Sprintf(\"INSERT INTO %s (id, name) VALUES (4, 'qux')\", getTestTableName()))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn nil\n\t})\n\n\terr = group.Wait()\n\tsuite.Require().NoError(err)\n\n\tsuite.Require().Len(dmlEvents, 3)\n}\n\nfunc TestEventsStreamer(t *testing.T) {\n\tsuite.Run(t, new(EventsStreamerTestSuite))\n}\n"
  },
  {
    "path": "go/logic/test_utils.go",
    "content": "package logic\n\nimport (\n\t\"context\"\n\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/testcontainers/testcontainers-go\"\n)\n\nvar (\n\ttestMysqlContainerImage = \"mysql:8.0.42\"\n\ttestMysqlUser           = \"root\"\n\ttestMysqlPass           = \"root-password\"\n\ttestMysqlDatabase       = \"test\"\n\ttestMysqlTableName      = \"testing\"\n)\n\nfunc getTestTableName() string {\n\treturn fmt.Sprintf(\"`%s`.`%s`\", testMysqlDatabase, testMysqlTableName)\n}\n\nfunc getTestGhostTableName() string {\n\treturn fmt.Sprintf(\"`%s`.`_%s_gho`\", testMysqlDatabase, testMysqlTableName)\n}\n\nfunc getTestRevertedTableName() string {\n\treturn fmt.Sprintf(\"`%s`.`_%s_rev_del`\", testMysqlDatabase, testMysqlTableName)\n}\n\nfunc getTestOldTableName() string {\n\treturn fmt.Sprintf(\"`%s`.`_%s_del`\", testMysqlDatabase, testMysqlTableName)\n}\n\nfunc getTestConnectionConfig(ctx context.Context, container testcontainers.Container) (*mysql.ConnectionConfig, error) {\n\thost, err := container.Host(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tport, err := container.MappedPort(ctx, \"3306\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tconnectionConfig := mysql.NewConnectionConfig()\n\tconnectionConfig.Key.Hostname = host\n\tconnectionConfig.Key.Port = port.Int()\n\tconnectionConfig.User = testMysqlUser\n\tconnectionConfig.Password = testMysqlPass\n\n\treturn connectionConfig, nil\n}\n\nfunc newTestMigrationContext() *base.MigrationContext {\n\tmigrationContext := base.NewMigrationContext()\n\tmigrationContext.ReplicaServerId = 99999\n\tmigrationContext.HeartbeatIntervalMilliseconds = 100\n\tmigrationContext.ThrottleHTTPIntervalMillis = 100\n\tmigrationContext.ThrottleHTTPTimeoutMillis = 1000\n\tmigrationContext.DatabaseName = testMysqlDatabase\n\tmigrationContext.OriginalTableName = testMysqlTableName\n\tmigrationContext.SkipPortValidation = true\n\tmigrationContext.PanicOnWarnings = true\n\tmigrationContext.AllowedRunningOnMaster = true\n\n\t//nolint:dogsled\n\t_, filename, _, _ := runtime.Caller(0)\n\tmigrationContext.ServeSocketFile = filepath.Join(filepath.Dir(filename), \"../../tmp/gh-ost.sock\")\n\n\treturn migrationContext\n}\n"
  },
  {
    "path": "go/logic/throttler.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage logic\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/base\"\n\t\"github.com/github/gh-ost/go/mysql\"\n\t\"github.com/github/gh-ost/go/sql\"\n)\n\nvar (\n\thttpStatusMessages = map[int]string{\n\t\t200: \"OK\",\n\t\t404: \"Not found\",\n\t\t417: \"Expectation failed\",\n\t\t429: \"Too many requests\",\n\t\t500: \"Internal server error\",\n\t\t-1:  \"Connection error\",\n\t}\n\t// See https://github.com/github/freno/blob/master/doc/http.md\n\thttpStatusFrenoMessages = map[int]string{\n\t\t200: \"OK\",\n\t\t404: \"freno: unknown metric\",\n\t\t417: \"freno: access forbidden\",\n\t\t429: \"freno: threshold exceeded\",\n\t\t500: \"freno: internal error\",\n\t\t-1:  \"freno: connection error\",\n\t}\n)\n\nconst frenoMagicHint = \"freno\"\n\n// Throttler collects metrics related to throttling and makes informed decision\n// whether throttling should take place.\ntype Throttler struct {\n\tappVersion        string\n\tmigrationContext  *base.MigrationContext\n\tapplier           *Applier\n\thttpClient        *http.Client\n\thttpClientTimeout time.Duration\n\tinspector         *Inspector\n\tfinishedMigrating int64\n}\n\nfunc NewThrottler(migrationContext *base.MigrationContext, applier *Applier, inspector *Inspector, appVersion string) *Throttler {\n\treturn &Throttler{\n\t\tappVersion:        appVersion,\n\t\tmigrationContext:  migrationContext,\n\t\tapplier:           applier,\n\t\thttpClient:        &http.Client{},\n\t\thttpClientTimeout: time.Duration(migrationContext.ThrottleHTTPTimeoutMillis) * time.Millisecond,\n\t\tinspector:         inspector,\n\t\tfinishedMigrating: 0,\n\t}\n}\n\nfunc (this *Throttler) throttleHttpMessage(statusCode int) string {\n\tstatusCodesMap := httpStatusMessages\n\tif throttleHttp := this.migrationContext.GetThrottleHTTP(); strings.Contains(throttleHttp, frenoMagicHint) {\n\t\tstatusCodesMap = httpStatusFrenoMessages\n\t}\n\tif message, ok := statusCodesMap[statusCode]; ok {\n\t\treturn fmt.Sprintf(\"%s (http=%d)\", message, statusCode)\n\t}\n\treturn fmt.Sprintf(\"http=%d\", statusCode)\n}\n\n// shouldThrottle performs checks to see whether we should currently be throttling.\n// It merely observes the metrics collected by other components, it does not issue\n// its own metric collection.\nfunc (this *Throttler) shouldThrottle() (result bool, reason string, reasonHint base.ThrottleReasonHint) {\n\tif hibernateUntil := atomic.LoadInt64(&this.migrationContext.HibernateUntil); hibernateUntil > 0 {\n\t\thibernateUntilTime := time.Unix(0, hibernateUntil)\n\t\treturn true, fmt.Sprintf(\"critical-load-hibernate until %+v\", hibernateUntilTime), base.NoThrottleReasonHint\n\t}\n\tgeneralCheckResult := this.migrationContext.GetThrottleGeneralCheckResult()\n\tif generalCheckResult.ShouldThrottle {\n\t\treturn generalCheckResult.ShouldThrottle, generalCheckResult.Reason, generalCheckResult.ReasonHint\n\t}\n\t// HTTP throttle\n\tstatusCode := atomic.LoadInt64(&this.migrationContext.ThrottleHTTPStatusCode)\n\tif statusCode != 0 && statusCode != http.StatusOK {\n\t\treturn true, this.throttleHttpMessage(int(statusCode)), base.NoThrottleReasonHint\n\t}\n\n\t// Replication lag throttle\n\tmaxLagMillisecondsThrottleThreshold := atomic.LoadInt64(&this.migrationContext.MaxLagMillisecondsThrottleThreshold)\n\tlag := atomic.LoadInt64(&this.migrationContext.CurrentLag)\n\tif time.Duration(lag) > time.Duration(maxLagMillisecondsThrottleThreshold)*time.Millisecond {\n\t\treturn true, fmt.Sprintf(\"lag=%fs\", time.Duration(lag).Seconds()), base.NoThrottleReasonHint\n\t}\n\tcheckThrottleControlReplicas := true\n\tif (this.migrationContext.TestOnReplica || this.migrationContext.MigrateOnReplica) && (atomic.LoadInt64(&this.migrationContext.AllEventsUpToLockProcessedInjectedFlag) > 0) {\n\t\tcheckThrottleControlReplicas = false\n\t}\n\tif checkThrottleControlReplicas {\n\t\tlagResult := this.migrationContext.GetControlReplicasLagResult()\n\t\tif lagResult.Err != nil {\n\t\t\treturn true, fmt.Sprintf(\"%+v %+v\", lagResult.Key, lagResult.Err), base.NoThrottleReasonHint\n\t\t}\n\t\tif lagResult.Lag > time.Duration(maxLagMillisecondsThrottleThreshold)*time.Millisecond {\n\t\t\treturn true, fmt.Sprintf(\"%+v replica-lag=%fs\", lagResult.Key, lagResult.Lag.Seconds()), base.NoThrottleReasonHint\n\t\t}\n\t}\n\t// Got here? No metrics indicates we need throttling.\n\treturn false, \"\", base.NoThrottleReasonHint\n}\n\n// parseChangelogHeartbeat parses a string timestamp and deduces replication lag\nfunc parseChangelogHeartbeat(heartbeatValue string) (lag time.Duration, err error) {\n\theartbeatTime, err := time.Parse(time.RFC3339Nano, heartbeatValue)\n\tif err != nil {\n\t\treturn lag, err\n\t}\n\tlag = time.Since(heartbeatTime)\n\treturn lag, nil\n}\n\n// parseChangelogHeartbeat parses a string timestamp and deduces replication lag\nfunc (this *Throttler) parseChangelogHeartbeat(heartbeatValue string) (err error) {\n\tif lag, err := parseChangelogHeartbeat(heartbeatValue); err != nil {\n\t\treturn this.migrationContext.Log.Errore(err)\n\t} else {\n\t\tatomic.StoreInt64(&this.migrationContext.CurrentLag, int64(lag))\n\t\treturn nil\n\t}\n}\n\n// collectReplicationLag reads the latest changelog heartbeat value\nfunc (this *Throttler) collectReplicationLag(firstThrottlingCollected chan<- bool) {\n\tcollectFunc := func() error {\n\t\tif atomic.LoadInt64(&this.migrationContext.CleanupImminentFlag) > 0 {\n\t\t\treturn nil\n\t\t}\n\t\tif atomic.LoadInt64(&this.migrationContext.HibernateUntil) > 0 {\n\t\t\treturn nil\n\t\t}\n\n\t\tif this.migrationContext.TestOnReplica || this.migrationContext.MigrateOnReplica {\n\t\t\t// when running on replica, the heartbeat injection is also done on the replica.\n\t\t\t// This means we will always get a good heartbeat value.\n\t\t\t// When running on replica, we should instead check the `SHOW SLAVE STATUS` output.\n\t\t\tif lag, err := mysql.GetReplicationLagFromSlaveStatus(this.inspector.dbVersion, this.inspector.informationSchemaDb); err != nil {\n\t\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t\t} else {\n\t\t\t\tatomic.StoreInt64(&this.migrationContext.CurrentLag, int64(lag))\n\t\t\t}\n\t\t} else {\n\t\t\tif heartbeatValue, err := this.inspector.readChangelogState(\"heartbeat\"); err != nil {\n\t\t\t\treturn this.migrationContext.Log.Errore(err)\n\t\t\t} else {\n\t\t\t\tthis.parseChangelogHeartbeat(heartbeatValue)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tcollectFunc()\n\tfirstThrottlingCollected <- true\n\n\tticker := time.NewTicker(time.Duration(this.migrationContext.HeartbeatIntervalMilliseconds) * time.Millisecond)\n\tdefer ticker.Stop()\n\tfor range ticker.C {\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn\n\t\t}\n\t\tgo collectFunc()\n\t}\n}\n\n// collectControlReplicasLag polls all the control replicas to get maximum lag value\nfunc (this *Throttler) collectControlReplicasLag() {\n\tif atomic.LoadInt64(&this.migrationContext.HibernateUntil) > 0 {\n\t\treturn\n\t}\n\n\treplicationLagQuery := fmt.Sprintf(`\n\t\tselect value from %s.%s where hint = 'heartbeat' and id <= 255\n\t\t`,\n\t\tsql.EscapeName(this.migrationContext.DatabaseName),\n\t\tsql.EscapeName(this.migrationContext.GetChangelogTableName()),\n\t)\n\n\treadReplicaLag := func(connectionConfig *mysql.ConnectionConfig) (lag time.Duration, err error) {\n\t\tdbUri := connectionConfig.GetDBUri(\"information_schema\")\n\n\t\tvar heartbeatValue string\n\t\tdb, _, err := mysql.GetDB(this.migrationContext.Uuid, dbUri)\n\t\tif err != nil {\n\t\t\treturn lag, err\n\t\t}\n\n\t\tif err := db.QueryRow(replicationLagQuery).Scan(&heartbeatValue); err != nil {\n\t\t\treturn lag, err\n\t\t}\n\n\t\tlag, err = parseChangelogHeartbeat(heartbeatValue)\n\t\treturn lag, err\n\t}\n\n\treadControlReplicasLag := func() (result *mysql.ReplicationLagResult) {\n\t\tinstanceKeyMap := this.migrationContext.GetThrottleControlReplicaKeys()\n\t\tif instanceKeyMap.Len() == 0 {\n\t\t\treturn result\n\t\t}\n\t\tlagResults := make(chan *mysql.ReplicationLagResult, instanceKeyMap.Len())\n\t\tfor replicaKey := range *instanceKeyMap {\n\t\t\tconnectionConfig := this.migrationContext.InspectorConnectionConfig.DuplicateCredentials(replicaKey)\n\t\t\tif err := connectionConfig.RegisterTLSConfig(); err != nil {\n\t\t\t\treturn &mysql.ReplicationLagResult{Err: err}\n\t\t\t}\n\n\t\t\tlagResult := &mysql.ReplicationLagResult{Key: connectionConfig.Key}\n\t\t\tgo func() {\n\t\t\t\tlagResult.Lag, lagResult.Err = readReplicaLag(connectionConfig)\n\t\t\t\tlagResults <- lagResult\n\t\t\t}()\n\t\t}\n\t\tfor range *instanceKeyMap {\n\t\t\tlagResult := <-lagResults\n\t\t\tif result == nil {\n\t\t\t\tresult = lagResult\n\t\t\t} else if lagResult.Err != nil {\n\t\t\t\tresult = lagResult\n\t\t\t} else if lagResult.Lag.Nanoseconds() > result.Lag.Nanoseconds() {\n\t\t\t\tresult = lagResult\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\n\tcheckControlReplicasLag := func() {\n\t\tif (this.migrationContext.TestOnReplica || this.migrationContext.MigrateOnReplica) && (atomic.LoadInt64(&this.migrationContext.AllEventsUpToLockProcessedInjectedFlag) > 0) {\n\t\t\t// No need to read lag\n\t\t\treturn\n\t\t}\n\t\tthis.migrationContext.SetControlReplicasLagResult(readControlReplicasLag())\n\t}\n\n\trelaxedFactor := 10\n\tcounter := 0\n\tshouldReadLagAggressively := false\n\n\tticker := time.NewTicker(100 * time.Millisecond)\n\tdefer ticker.Stop()\n\tfor range ticker.C {\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn\n\t\t}\n\t\tif counter%relaxedFactor == 0 {\n\t\t\t// we only check if we wish to be aggressive once per second. The parameters for being aggressive\n\t\t\t// do not typically change at all throughout the migration, but nonetheless we check them.\n\t\t\tcounter = 0\n\t\t\tmaxLagMillisecondsThrottleThreshold := atomic.LoadInt64(&this.migrationContext.MaxLagMillisecondsThrottleThreshold)\n\t\t\tshouldReadLagAggressively = (maxLagMillisecondsThrottleThreshold < 1000)\n\t\t}\n\t\tif counter == 0 || shouldReadLagAggressively {\n\t\t\t// We check replication lag every so often, or if we wish to be aggressive\n\t\t\tcheckControlReplicasLag()\n\t\t}\n\t\tcounter++\n\t}\n}\n\nfunc (this *Throttler) criticalLoadIsMet() (met bool, variableName string, value int64, threshold int64, err error) {\n\tcriticalLoad := this.migrationContext.GetCriticalLoad()\n\tfor variableName, threshold = range criticalLoad {\n\t\tvalue, err = this.applier.ShowStatusVariable(variableName)\n\t\tif err != nil {\n\t\t\treturn false, variableName, value, threshold, err\n\t\t}\n\t\tif value >= threshold {\n\t\t\treturn true, variableName, value, threshold, nil\n\t\t}\n\t}\n\treturn false, variableName, value, threshold, nil\n}\n\n// collectThrottleHTTPStatus reads the latest changelog heartbeat value\nfunc (this *Throttler) collectThrottleHTTPStatus(firstThrottlingCollected chan<- bool) {\n\tcollectFunc := func() (sleep bool, err error) {\n\t\tif atomic.LoadInt64(&this.migrationContext.HibernateUntil) > 0 {\n\t\t\treturn true, nil\n\t\t}\n\t\turl := this.migrationContext.GetThrottleHTTP()\n\t\tif url == \"\" {\n\t\t\treturn true, nil\n\t\t}\n\n\t\tctx, cancel := context.WithTimeout(context.Background(), this.httpClientTimeout)\n\t\tdefer cancel()\n\n\t\treq, err := http.NewRequestWithContext(ctx, http.MethodHead, url, nil)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\treq.Header.Set(\"User-Agent\", fmt.Sprintf(\"gh-ost/%s\", this.appVersion))\n\n\t\tresp, err := this.httpClient.Do(req)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tdefer resp.Body.Close()\n\n\t\tatomic.StoreInt64(&this.migrationContext.ThrottleHTTPStatusCode, int64(resp.StatusCode))\n\t\treturn false, nil\n\t}\n\n\t_, err := collectFunc()\n\tif err != nil {\n\t\t// If not told to ignore errors, we'll throttle on HTTP connection issues\n\t\tif !this.migrationContext.IgnoreHTTPErrors {\n\t\t\tatomic.StoreInt64(&this.migrationContext.ThrottleHTTPStatusCode, int64(-1))\n\t\t}\n\t}\n\n\tfirstThrottlingCollected <- true\n\n\tcollectInterval := time.Duration(this.migrationContext.ThrottleHTTPIntervalMillis) * time.Millisecond\n\tticker := time.NewTicker(collectInterval)\n\tdefer ticker.Stop()\n\tfor range ticker.C {\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn\n\t\t}\n\n\t\tsleep, err := collectFunc()\n\t\tif err != nil {\n\t\t\t// If not told to ignore errors, we'll throttle on HTTP connection issues\n\t\t\tif !this.migrationContext.IgnoreHTTPErrors {\n\t\t\t\tatomic.StoreInt64(&this.migrationContext.ThrottleHTTPStatusCode, int64(-1))\n\t\t\t}\n\t\t}\n\n\t\tif sleep {\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t}\n\t}\n}\n\n// collectGeneralThrottleMetrics reads the once-per-sec metrics, and stores them onto this.migrationContext\nfunc (this *Throttler) collectGeneralThrottleMetrics() error {\n\tif atomic.LoadInt64(&this.migrationContext.HibernateUntil) > 0 {\n\t\treturn nil\n\t}\n\n\tsetThrottle := func(throttle bool, reason string, reasonHint base.ThrottleReasonHint) error {\n\t\tthis.migrationContext.SetThrottleGeneralCheckResult(base.NewThrottleCheckResult(throttle, reason, reasonHint))\n\t\treturn nil\n\t}\n\n\t// Regardless of throttle, we take opportunity to check for panic-abort\n\tif this.migrationContext.PanicFlagFile != \"\" {\n\t\tif base.FileExists(this.migrationContext.PanicFlagFile) {\n\t\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, fmt.Errorf(\"Found panic-file %s. Aborting without cleanup\", this.migrationContext.PanicFlagFile))\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tcriticalLoadMet, variableName, value, threshold, err := this.criticalLoadIsMet()\n\tif err != nil {\n\t\treturn setThrottle(true, fmt.Sprintf(\"%s %s\", variableName, err), base.NoThrottleReasonHint)\n\t}\n\n\tif criticalLoadMet && this.migrationContext.CriticalLoadHibernateSeconds > 0 {\n\t\thibernateDuration := time.Duration(this.migrationContext.CriticalLoadHibernateSeconds) * time.Second\n\t\thibernateUntilTime := time.Now().Add(hibernateDuration)\n\t\tatomic.StoreInt64(&this.migrationContext.HibernateUntil, hibernateUntilTime.UnixNano())\n\t\tthis.migrationContext.Log.Errorf(\"critical-load met: %s=%d, >=%d. Will hibernate for the duration of %+v, until %+v\", variableName, value, threshold, hibernateDuration, hibernateUntilTime)\n\t\tgo func() {\n\t\t\ttime.Sleep(hibernateDuration)\n\t\t\tthis.migrationContext.SetThrottleGeneralCheckResult(base.NewThrottleCheckResult(true, \"leaving hibernation\", base.LeavingHibernationThrottleReasonHint))\n\t\t\tatomic.StoreInt64(&this.migrationContext.HibernateUntil, 0)\n\t\t}()\n\t\treturn nil\n\t}\n\n\tif criticalLoadMet && this.migrationContext.CriticalLoadIntervalMilliseconds == 0 {\n\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, fmt.Errorf(\"critical-load met: %s=%d, >=%d\", variableName, value, threshold))\n\t\treturn nil\n\t}\n\tif criticalLoadMet && this.migrationContext.CriticalLoadIntervalMilliseconds > 0 {\n\t\tthis.migrationContext.Log.Errorf(\"critical-load met once: %s=%d, >=%d. Will check again in %d millis\", variableName, value, threshold, this.migrationContext.CriticalLoadIntervalMilliseconds)\n\t\tgo func() {\n\t\t\ttimer := time.NewTimer(time.Millisecond * time.Duration(this.migrationContext.CriticalLoadIntervalMilliseconds))\n\t\t\t<-timer.C\n\t\t\tif criticalLoadMetAgain, variableName, value, threshold, _ := this.criticalLoadIsMet(); criticalLoadMetAgain {\n\t\t\t\t// Use helper to prevent deadlock if listenOnPanicAbort already exited\n\t\t\t\t_ = base.SendWithContext(this.migrationContext.GetContext(), this.migrationContext.PanicAbort, fmt.Errorf(\"critical-load met again after %d millis: %s=%d, >=%d\", this.migrationContext.CriticalLoadIntervalMilliseconds, variableName, value, threshold))\n\t\t\t}\n\t\t}()\n\t}\n\n\t// Back to throttle considerations\n\n\t// User-based throttle\n\tif atomic.LoadInt64(&this.migrationContext.ThrottleCommandedByUser) > 0 {\n\t\treturn setThrottle(true, \"commanded by user\", base.UserCommandThrottleReasonHint)\n\t}\n\tif this.migrationContext.ThrottleFlagFile != \"\" {\n\t\tif base.FileExists(this.migrationContext.ThrottleFlagFile) {\n\t\t\t// Throttle file defined and exists!\n\t\t\treturn setThrottle(true, \"flag-file\", base.NoThrottleReasonHint)\n\t\t}\n\t}\n\tif this.migrationContext.ThrottleAdditionalFlagFile != \"\" {\n\t\tif base.FileExists(this.migrationContext.ThrottleAdditionalFlagFile) {\n\t\t\t// 2nd Throttle file defined and exists!\n\t\t\treturn setThrottle(true, \"flag-file\", base.NoThrottleReasonHint)\n\t\t}\n\t}\n\n\tmaxLoad := this.migrationContext.GetMaxLoad()\n\tfor variableName, threshold := range maxLoad {\n\t\tvalue, err := this.applier.ShowStatusVariable(variableName)\n\t\tif err != nil {\n\t\t\treturn setThrottle(true, fmt.Sprintf(\"%s %s\", variableName, err), base.NoThrottleReasonHint)\n\t\t}\n\t\tif value >= threshold {\n\t\t\treturn setThrottle(true, fmt.Sprintf(\"max-load %s=%d >= %d\", variableName, value, threshold), base.NoThrottleReasonHint)\n\t\t}\n\t}\n\tif this.migrationContext.GetThrottleQuery() != \"\" {\n\t\tif res, _ := this.applier.ExecuteThrottleQuery(); res > 0 {\n\t\t\treturn setThrottle(true, \"throttle-query\", base.NoThrottleReasonHint)\n\t\t}\n\t}\n\n\treturn setThrottle(false, \"\", base.NoThrottleReasonHint)\n}\n\n// initiateThrottlerCollection initiates the various processes that collect measurements\n// that may affect throttling. There are several components, all running independently,\n// that collect such metrics.\nfunc (this *Throttler) initiateThrottlerCollection(firstThrottlingCollected chan<- bool) {\n\tgo this.collectReplicationLag(firstThrottlingCollected)\n\tgo this.collectControlReplicasLag()\n\tgo this.collectThrottleHTTPStatus(firstThrottlingCollected)\n\n\tgo func() {\n\t\tthis.collectGeneralThrottleMetrics()\n\t\tfirstThrottlingCollected <- true\n\n\t\tticker := time.NewTicker(time.Second)\n\t\tdefer ticker.Stop()\n\t\tfor range ticker.C {\n\t\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.collectGeneralThrottleMetrics()\n\t\t}\n\t}()\n}\n\n// initiateThrottlerChecks initiates the throttle ticker and sets the basic behavior of throttling.\nfunc (this *Throttler) initiateThrottlerChecks() {\n\tthrottlerFunction := func() {\n\t\talreadyThrottling, currentReason, _ := this.migrationContext.IsThrottled()\n\t\tshouldThrottle, throttleReason, throttleReasonHint := this.shouldThrottle()\n\t\tif shouldThrottle && !alreadyThrottling {\n\t\t\t// New throttling\n\t\t\tthis.applier.WriteAndLogChangelog(\"throttle\", throttleReason)\n\t\t} else if shouldThrottle && alreadyThrottling && (currentReason != throttleReason) {\n\t\t\t// Change of reason\n\t\t\tthis.applier.WriteAndLogChangelog(\"throttle\", throttleReason)\n\t\t} else if alreadyThrottling && !shouldThrottle {\n\t\t\t// End of throttling\n\t\t\tthis.applier.WriteAndLogChangelog(\"throttle\", \"done throttling\")\n\t\t}\n\t\tthis.migrationContext.SetThrottled(shouldThrottle, throttleReason, throttleReasonHint)\n\t}\n\tthrottlerFunction()\n\n\tticker := time.NewTicker(100 * time.Millisecond)\n\tdefer ticker.Stop()\n\tfor {\n\t\t// Check for context cancellation each iteration\n\t\tctx := this.migrationContext.GetContext()\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn\n\t\tcase <-ticker.C:\n\t\t\t// Process throttle check\n\t\t}\n\n\t\tif atomic.LoadInt64(&this.finishedMigrating) > 0 {\n\t\t\treturn\n\t\t}\n\t\tthrottlerFunction()\n\t}\n}\n\n// throttle sees if throttling needs take place, and if so, continuously sleeps (blocks)\n// until throttling reasons are gone\nfunc (this *Throttler) throttle(onThrottled func()) {\n\tfor {\n\t\t// IsThrottled() is non-blocking; the throttling decision making takes place asynchronously.\n\t\t// Therefore calling IsThrottled() is cheap\n\t\tif shouldThrottle, _, _ := this.migrationContext.IsThrottled(); !shouldThrottle {\n\t\t\treturn\n\t\t}\n\t\tif onThrottled != nil {\n\t\t\tonThrottled()\n\t\t}\n\t\ttime.Sleep(250 * time.Millisecond)\n\t}\n}\n\nfunc (this *Throttler) Teardown() {\n\tthis.migrationContext.Log.Debugf(\"Tearing down...\")\n\tatomic.StoreInt64(&this.finishedMigrating, 1)\n}\n"
  },
  {
    "path": "go/mysql/binlog.go",
    "content": "/*\n   Copyright 2015 Shlomi Noach, courtesy Booking.com\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\ntype BinlogCoordinates interface {\n\tString() string\n\tDisplayString() string\n\tIsEmpty() bool\n\tEquals(other BinlogCoordinates) bool\n\tSmallerThan(other BinlogCoordinates) bool\n\tSmallerThanOrEquals(other BinlogCoordinates) bool\n\tClone() BinlogCoordinates\n}\n"
  },
  {
    "path": "go/mysql/binlog_file.go",
    "content": "/*\n   Copyright 2015 Shlomi Noach, courtesy Booking.com\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar detachPattern *regexp.Regexp\n\nfunc init() {\n\tdetachPattern, _ = regexp.Compile(`//([^/:]+):([\\d]+)`) // e.g. `//binlog.01234:567890`\n}\n\n// FileBinlogCoordinates described binary log coordinates in the form of a binlog file & log position.\ntype FileBinlogCoordinates struct {\n\tLogFile   string\n\tLogPos    int64\n\tEventSize int64\n}\n\nfunc NewFileBinlogCoordinates(logFile string, logPos int64) *FileBinlogCoordinates {\n\treturn &FileBinlogCoordinates{\n\t\tLogFile: logFile,\n\t\tLogPos:  logPos,\n\t}\n}\n\n// ParseFileBinlogCoordinates parses a log file/position string into a *BinlogCoordinates struct.\nfunc ParseFileBinlogCoordinates(logFileLogPos string) (*FileBinlogCoordinates, error) {\n\ttokens := strings.SplitN(logFileLogPos, \":\", 2)\n\tif len(tokens) != 2 {\n\t\treturn nil, fmt.Errorf(\"ParseFileBinlogCoordinates: Cannot parse BinlogCoordinates from %s. Expected format is file:pos\", logFileLogPos)\n\t}\n\n\tif logPos, err := strconv.ParseInt(tokens[1], 10, 0); err != nil {\n\t\treturn nil, fmt.Errorf(\"ParseFileBinlogCoordinates: invalid pos: %s\", tokens[1])\n\t} else {\n\t\treturn &FileBinlogCoordinates{LogFile: tokens[0], LogPos: logPos}, nil\n\t}\n}\n\n// DisplayString returns a user-friendly string representation of these coordinates\nfunc (this *FileBinlogCoordinates) DisplayString() string {\n\treturn fmt.Sprintf(\"%s:%d\", this.LogFile, this.LogPos)\n}\n\n// String returns a user-friendly string representation of these coordinates\nfunc (this FileBinlogCoordinates) String() string {\n\treturn this.DisplayString()\n}\n\n// Equals tests equality of this coordinate and another one.\nfunc (this *FileBinlogCoordinates) Equals(other BinlogCoordinates) bool {\n\tcoord, ok := other.(*FileBinlogCoordinates)\n\tif !ok || other == nil {\n\t\treturn false\n\t}\n\treturn this.LogFile == coord.LogFile && this.LogPos == coord.LogPos\n}\n\n// IsEmpty returns true if the log file is empty, unnamed\nfunc (this *FileBinlogCoordinates) IsEmpty() bool {\n\treturn this.LogFile == \"\"\n}\n\n// SmallerThan returns true if this coordinate is strictly smaller than the other.\nfunc (this *FileBinlogCoordinates) SmallerThan(other BinlogCoordinates) bool {\n\tcoord, ok := other.(*FileBinlogCoordinates)\n\tif !ok || other == nil {\n\t\treturn false\n\t}\n\n\tfileNumberDist := this.FileNumberDistance(coord)\n\tif fileNumberDist == 0 {\n\t\treturn this.LogPos < coord.LogPos\n\t}\n\treturn fileNumberDist > 0\n}\n\n// SmallerThanOrEquals returns true if this coordinate is the same or equal to the other one.\n// We do NOT compare the type so we can not use this.Equals()\nfunc (this *FileBinlogCoordinates) SmallerThanOrEquals(other BinlogCoordinates) bool {\n\tcoord, ok := other.(*FileBinlogCoordinates)\n\tif !ok || other == nil {\n\t\treturn false\n\t}\n\tif this.SmallerThan(other) {\n\t\treturn true\n\t}\n\treturn this.LogFile == coord.LogFile && this.LogPos == coord.LogPos // No Type comparison\n}\n\n// FileNumberDistance returns the numeric distance between this coordinate's file number and the other's.\n// Effectively it means \"how many rotates/FLUSHes would make these coordinates's file reach the other's\"\nfunc (this *FileBinlogCoordinates) FileNumberDistance(other *FileBinlogCoordinates) int {\n\tthisNumber, _ := this.FileNumber()\n\totherNumber, _ := other.FileNumber()\n\treturn otherNumber - thisNumber\n}\n\n// FileNumber returns the numeric value of the file, and the length in characters representing the number in the filename.\n// Example: FileNumber() of mysqld.log.000789 is (789, 6)\nfunc (this *FileBinlogCoordinates) FileNumber() (int, int) {\n\ttokens := strings.Split(this.LogFile, \".\")\n\tnumPart := tokens[len(tokens)-1]\n\tnumLen := len(numPart)\n\tfileNum, err := strconv.Atoi(numPart)\n\tif err != nil {\n\t\treturn 0, 0\n\t}\n\treturn fileNum, numLen\n}\n\n// PreviousFileCoordinatesBy guesses the filename of the previous binlog/relaylog, by given offset (number of files back)\nfunc (this *FileBinlogCoordinates) PreviousFileCoordinatesBy(offset int) (BinlogCoordinates, error) {\n\tresult := &FileBinlogCoordinates{}\n\n\tfileNum, numLen := this.FileNumber()\n\tif fileNum == 0 {\n\t\treturn result, errors.New(\"Log file number is zero, cannot detect previous file\")\n\t}\n\tnewNumStr := fmt.Sprintf(\"%d\", (fileNum - offset))\n\tnewNumStr = strings.Repeat(\"0\", numLen-len(newNumStr)) + newNumStr\n\n\ttokens := strings.Split(this.LogFile, \".\")\n\ttokens[len(tokens)-1] = newNumStr\n\tresult.LogFile = strings.Join(tokens, \".\")\n\treturn result, nil\n}\n\n// PreviousFileCoordinates guesses the filename of the previous binlog/relaylog\nfunc (this *FileBinlogCoordinates) PreviousFileCoordinates() (BinlogCoordinates, error) {\n\treturn this.PreviousFileCoordinatesBy(1)\n}\n\n// PreviousFileCoordinates guesses the filename of the previous binlog/relaylog\nfunc (this *FileBinlogCoordinates) NextFileCoordinates() (BinlogCoordinates, error) {\n\tresult := &FileBinlogCoordinates{}\n\n\tfileNum, numLen := this.FileNumber()\n\tnewNumStr := fmt.Sprintf(\"%d\", (fileNum + 1))\n\tnewNumStr = strings.Repeat(\"0\", numLen-len(newNumStr)) + newNumStr\n\n\ttokens := strings.Split(this.LogFile, \".\")\n\ttokens[len(tokens)-1] = newNumStr\n\tresult.LogFile = strings.Join(tokens, \".\")\n\treturn result, nil\n}\n\n// FileSmallerThan returns true if this coordinate's file is strictly smaller than the other's.\nfunc (this *FileBinlogCoordinates) DetachedCoordinates() (isDetached bool, detachedLogFile string, detachedLogPos string) {\n\tdetachedCoordinatesSubmatch := detachPattern.FindStringSubmatch(this.LogFile)\n\tif len(detachedCoordinatesSubmatch) == 0 {\n\t\treturn false, \"\", \"\"\n\t}\n\treturn true, detachedCoordinatesSubmatch[1], detachedCoordinatesSubmatch[2]\n}\n\nfunc (this *FileBinlogCoordinates) Clone() BinlogCoordinates {\n\treturn &FileBinlogCoordinates{\n\t\tLogPos:    this.LogPos,\n\t\tLogFile:   this.LogFile,\n\t\tEventSize: this.EventSize,\n\t}\n}\n\n// IsLogPosOverflowBeyond4Bytes returns true if the coordinate endpos is overflow beyond 4 bytes.\n// The binlog event end_log_pos field type is defined as uint32, 4 bytes.\n// https://github.com/go-mysql-org/go-mysql/blob/master/replication/event.go\n// https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_replication_binlog_event.html#sect_protocol_replication_binlog_event_header\n// Issue: https://github.com/github/gh-ost/issues/1366\nfunc (this *FileBinlogCoordinates) IsLogPosOverflowBeyond4Bytes(preCoordinate *FileBinlogCoordinates) bool {\n\tif preCoordinate == nil {\n\t\treturn false\n\t}\n\tif preCoordinate.IsEmpty() {\n\t\treturn false\n\t}\n\n\tif this.LogFile != preCoordinate.LogFile {\n\t\treturn false\n\t}\n\n\tif preCoordinate.LogPos+this.EventSize >= 1<<32 {\n\t\t// Unexpected rows event, the previous binlog log_pos + current binlog event_size is overflow 4 bytes\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "go/mysql/binlog_file_test.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\t\"math\"\n\t\"testing\"\n\n\tgomysql \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestBinlogCoordinates(t *testing.T) {\n\tc1 := FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 104}\n\tc2 := FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 104}\n\tc3 := FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 5000}\n\tc4 := FileBinlogCoordinates{LogFile: \"mysql-bin.00112\", LogPos: 104}\n\n\tgtidSet1, _ := gomysql.ParseMysqlGTIDSet(\"3E11FA47-71CA-11E1-9E33-C80AA9429562:23\")\n\tgtidSet2, _ := gomysql.ParseMysqlGTIDSet(\"3E11FA47-71CA-11E1-9E33-C80AA9429562:100\")\n\tgtidSet3, _ := gomysql.ParseMysqlGTIDSet(\"7F80FA47-FF33-71A1-AE01-B80CC7823548:100\")\n\tgtidSetBig1, _ := gomysql.ParseMysqlGTIDSet(`08dc06d7-c27c-11ea-b204-e4434b77a5ce:1-1497873603,\n0b4ff540-a712-11ea-9857-e4434b2a1c98:1-4315312982,\n19636248-246d-11e9-ab0d-0263df733a8e:1,\n1c8cd5dd-8c79-11eb-ae94-e4434b27ee9c:1-18850436,\n3342d1ad-bda0-11ea-ba96-e4434b28e6e0:1-475232304,\n3bcd300c-c811-11e9-9970-e4434b714c24:1-6209943929,\n418b92ed-d6f6-11e8-b18f-246e961e5ed0:1-3299395227,\n4465ebe1-2bcc-11e9-8913-e4434b21c560:1-4724945648,\n48e2bc1d-d66d-11e8-bf56-a0369f9437b8:1,\n492e2980-4518-11e9-92c6-e4434b3eca94:1-4926754392`)\n\tgtidSetBig2, _ := gomysql.ParseMysqlGTIDSet(`08dc06d7-c27c-11ea-b204-e4434b77a5ce:1-1497873603,\n0b4ff540-a712-11ea-9857-e4434b2a1c98:1-4315312982,\n19636248-246d-11e9-ab0d-0263df733a8e:1,\n1c8cd5dd-8c79-11eb-ae94-e4434b27ee9c:1-18850436,\n3342d1ad-bda0-11ea-ba96-e4434b28e6e0:1-475232304,\n3bcd300c-c811-11e9-9970-e4434b714c24:1-6209943929,\n418b92ed-d6f6-11e8-b18f-246e961e5ed0:1-3299395227,\n4465ebe1-2bcc-11e9-8913-e4434b21c560:1-4724945648,\n48e2bc1d-d66d-11e8-bf56-a0369f9437b8:1,\n492e2980-4518-11e9-92c6-e4434b3eca94:1-4926754399`)\n\n\tc5 := GTIDBinlogCoordinates{GTIDSet: gtidSet1.(*gomysql.MysqlGTIDSet)}\n\tc6 := GTIDBinlogCoordinates{GTIDSet: gtidSet1.(*gomysql.MysqlGTIDSet)}\n\tc7 := GTIDBinlogCoordinates{GTIDSet: gtidSet2.(*gomysql.MysqlGTIDSet)}\n\tc8 := GTIDBinlogCoordinates{GTIDSet: gtidSet3.(*gomysql.MysqlGTIDSet)}\n\tc9 := GTIDBinlogCoordinates{GTIDSet: gtidSetBig1.(*gomysql.MysqlGTIDSet)}\n\tc10 := GTIDBinlogCoordinates{GTIDSet: gtidSetBig2.(*gomysql.MysqlGTIDSet)}\n\n\trequire.True(t, c5.Equals(&c6))\n\trequire.True(t, c1.Equals(&c2))\n\trequire.False(t, c1.Equals(&c3))\n\trequire.False(t, c1.Equals(&c4))\n\trequire.False(t, c1.SmallerThan(&c2))\n\trequire.True(t, c1.SmallerThan(&c3))\n\trequire.True(t, c1.SmallerThan(&c4))\n\trequire.True(t, c3.SmallerThan(&c4))\n\trequire.False(t, c3.SmallerThan(&c2))\n\trequire.False(t, c4.SmallerThan(&c2))\n\trequire.False(t, c4.SmallerThan(&c3))\n\trequire.True(t, c1.SmallerThanOrEquals(&c2))\n\trequire.True(t, c1.SmallerThanOrEquals(&c3))\n\trequire.True(t, c1.SmallerThanOrEquals(&c2))\n\trequire.True(t, c1.SmallerThanOrEquals(&c3))\n\trequire.True(t, c6.SmallerThanOrEquals(&c7))\n\trequire.True(t, c7.SmallerThanOrEquals(&c8))\n\trequire.True(t, c9.SmallerThanOrEquals(&c9))\n\trequire.True(t, c9.SmallerThanOrEquals(&c10))\n}\n\nfunc TestBinlogCoordinatesAsKey(t *testing.T) {\n\tm := make(map[BinlogCoordinates]bool)\n\n\tc1 := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 104}\n\tc2 := &FileBinlogCoordinates{LogFile: \"mysql-bin.00022\", LogPos: 104}\n\tc3 := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 104}\n\tc4 := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 222}\n\n\tm[c1] = true\n\tm[c2] = true\n\tm[c3] = true\n\tm[c4] = true\n\n\trequire.Len(t, m, 4)\n}\n\nfunc TestIsLogPosOverflowBeyond4Bytes(t *testing.T) {\n\t{\n\t\tvar preCoordinates *FileBinlogCoordinates\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 10321, EventSize: 1100}\n\t\trequire.False(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n\t{\n\t\tpreCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: 1100, EventSize: 1100}\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(preCoordinates.LogPos + 1100)), EventSize: 1100}\n\t\trequire.False(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n\t{\n\t\tpreCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00016\", LogPos: 1100, EventSize: 1100}\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(preCoordinates.LogPos + 1100)), EventSize: 1100}\n\t\trequire.False(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n\t{\n\t\tpreCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: math.MaxUint32 - 1001, EventSize: 1000}\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(preCoordinates.LogPos + 1000)), EventSize: 1000}\n\t\trequire.False(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n\t{\n\t\tpreCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: math.MaxUint32 - 1000, EventSize: 1000}\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(preCoordinates.LogPos + 1000)), EventSize: 1000}\n\t\trequire.False(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n\t{\n\t\tpreCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: math.MaxUint32 - 999, EventSize: 1000}\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(preCoordinates.LogPos + 1000)), EventSize: 1000}\n\t\trequire.True(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n\t{\n\t\tpreCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(math.MaxUint32 - 500)), EventSize: 1000}\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(preCoordinates.LogPos + 1000)), EventSize: 1000}\n\t\trequire.True(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n\t{\n\t\tpreCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: math.MaxUint32, EventSize: 1000}\n\t\tcurCoordinates := &FileBinlogCoordinates{LogFile: \"mysql-bin.00017\", LogPos: int64(uint32(preCoordinates.LogPos + 1000)), EventSize: 1000}\n\t\trequire.True(t, curCoordinates.IsLogPosOverflowBeyond4Bytes(preCoordinates))\n\t}\n}\n\nfunc TestBinlogCoordinates_LogFileZeroPaddedTransition(t *testing.T) {\n\tc1 := FileBinlogCoordinates{LogFile: \"mysql-bin.999999\", LogPos: 100}\n\tc2 := FileBinlogCoordinates{LogFile: \"mysql-bin.1000000\", LogPos: 100}\n\n\trequire.True(t, c1.SmallerThan(&c2))\n}\n\nfunc TestBinlogCoordinates_SameLogFileDifferentPosition(t *testing.T) {\n\tc1 := FileBinlogCoordinates{LogFile: \"binlog.000001\", LogPos: 100}\n\tc2 := FileBinlogCoordinates{LogFile: \"binlog.000001\", LogPos: 200}\n\n\trequire.True(t, c1.SmallerThan(&c2))\n\trequire.False(t, c2.SmallerThan(&c1))\n\trequire.False(t, c1.SmallerThan(&c1))\n}\n"
  },
  {
    "path": "go/mysql/binlog_gtid.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\tgomysql \"github.com/go-mysql-org/go-mysql/mysql\"\n)\n\n// GTIDBinlogCoordinates describe binary log coordinates in MySQL GTID format.\ntype GTIDBinlogCoordinates struct {\n\tGTIDSet *gomysql.MysqlGTIDSet\n\tUUIDSet *gomysql.UUIDSet\n}\n\n// NewGTIDBinlogCoordinates parses a MySQL GTID set into a *GTIDBinlogCoordinates struct.\nfunc NewGTIDBinlogCoordinates(gtidSet string) (*GTIDBinlogCoordinates, error) {\n\tset, err := gomysql.ParseMysqlGTIDSet(gtidSet)\n\treturn &GTIDBinlogCoordinates{\n\t\tGTIDSet: set.(*gomysql.MysqlGTIDSet),\n\t}, err\n}\n\n// DisplayString returns a user-friendly string representation of these current UUID set or the full GTID set.\nfunc (this *GTIDBinlogCoordinates) DisplayString() string {\n\tif this.UUIDSet != nil {\n\t\treturn this.UUIDSet.String()\n\t}\n\treturn this.String()\n}\n\n// String returns a user-friendly string representation of these full GTID set.\nfunc (this GTIDBinlogCoordinates) String() string {\n\treturn this.GTIDSet.String()\n}\n\n// Equals tests equality of this coordinate and another one.\nfunc (this *GTIDBinlogCoordinates) Equals(other BinlogCoordinates) bool {\n\tif other == nil || this.IsEmpty() || other.IsEmpty() {\n\t\treturn false\n\t}\n\n\totherCoords, ok := other.(*GTIDBinlogCoordinates)\n\tif !ok {\n\t\treturn false\n\t}\n\n\treturn this.GTIDSet.Equal(otherCoords.GTIDSet)\n}\n\n// IsEmpty returns true if the GTID set is empty.\nfunc (this *GTIDBinlogCoordinates) IsEmpty() bool {\n\treturn this.GTIDSet == nil\n}\n\n// SmallerThan returns true if this coordinate is strictly smaller than the other.\nfunc (this *GTIDBinlogCoordinates) SmallerThan(other BinlogCoordinates) bool {\n\tif other == nil || this.IsEmpty() || other.IsEmpty() {\n\t\treturn false\n\t}\n\totherCoords, ok := other.(*GTIDBinlogCoordinates)\n\tif !ok {\n\t\treturn false\n\t}\n\n\t// if 'this' does not contain the same sets we assume we are behind 'other'.\n\t// there are probably edge cases where this isn't true\n\treturn !this.GTIDSet.Contain(otherCoords.GTIDSet)\n}\n\n// SmallerThanOrEquals returns true if this coordinate is the same or equal to the other one.\nfunc (this *GTIDBinlogCoordinates) SmallerThanOrEquals(other BinlogCoordinates) bool {\n\treturn this.Equals(other) || this.SmallerThan(other)\n}\n\nfunc (this *GTIDBinlogCoordinates) Clone() BinlogCoordinates {\n\tout := &GTIDBinlogCoordinates{}\n\tif this.GTIDSet != nil {\n\t\tout.GTIDSet = this.GTIDSet.Clone().(*gomysql.MysqlGTIDSet)\n\t}\n\tif this.UUIDSet != nil {\n\t\tout.UUIDSet = this.UUIDSet.Clone()\n\t}\n\treturn out\n}\n"
  },
  {
    "path": "go/mysql/connection.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/go-sql-driver/mysql\"\n)\n\nconst (\n\tTLS_CONFIG_KEY = \"ghost\"\n)\n\n// ConnectionConfig is the minimal configuration required to connect to a MySQL server\ntype ConnectionConfig struct {\n\tKey                  InstanceKey\n\tUser                 string\n\tPassword             string\n\tImpliedKey           *InstanceKey\n\ttlsConfig            *tls.Config\n\tTimeout              float64\n\tTransactionIsolation string\n\tCharset              string\n}\n\nfunc NewConnectionConfig() *ConnectionConfig {\n\tconfig := &ConnectionConfig{\n\t\tKey: InstanceKey{},\n\t}\n\tconfig.ImpliedKey = &config.Key\n\treturn config\n}\n\n// DuplicateCredentials creates a new connection config with given key and with same credentials as this config\nfunc (this *ConnectionConfig) DuplicateCredentials(key InstanceKey) *ConnectionConfig {\n\tconfig := &ConnectionConfig{\n\t\tKey:                  key,\n\t\tUser:                 this.User,\n\t\tPassword:             this.Password,\n\t\ttlsConfig:            this.tlsConfig,\n\t\tTimeout:              this.Timeout,\n\t\tTransactionIsolation: this.TransactionIsolation,\n\t\tCharset:              this.Charset,\n\t}\n\n\tif this.tlsConfig != nil {\n\t\tconfig.tlsConfig = &tls.Config{\n\t\t\tServerName:         key.Hostname,\n\t\t\tCertificates:       this.tlsConfig.Certificates,\n\t\t\tRootCAs:            this.tlsConfig.RootCAs,\n\t\t\tInsecureSkipVerify: this.tlsConfig.InsecureSkipVerify,\n\t\t}\n\t}\n\n\tconfig.ImpliedKey = &config.Key\n\treturn config\n}\n\nfunc (this *ConnectionConfig) Duplicate() *ConnectionConfig {\n\treturn this.DuplicateCredentials(this.Key)\n}\n\nfunc (this *ConnectionConfig) String() string {\n\treturn fmt.Sprintf(\"%s, user=%s, usingTLS=%t\", this.Key.DisplayString(), this.User, this.tlsConfig != nil)\n}\n\nfunc (this *ConnectionConfig) Equals(other *ConnectionConfig) bool {\n\treturn this.Key.Equals(&other.Key) || this.ImpliedKey.Equals(other.ImpliedKey)\n}\n\nfunc (this *ConnectionConfig) UseTLS(caCertificatePath, clientCertificate, clientKey string, allowInsecure bool) error {\n\tvar rootCertPool *x509.CertPool\n\tvar certs []tls.Certificate\n\tvar err error\n\n\tif caCertificatePath == \"\" {\n\t\trootCertPool, err = x509.SystemCertPool()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\trootCertPool = x509.NewCertPool()\n\t\tpem, err := os.ReadFile(caCertificatePath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif ok := rootCertPool.AppendCertsFromPEM(pem); !ok {\n\t\t\treturn errors.New(\"could not add ca certificate to cert pool\")\n\t\t}\n\t}\n\tif clientCertificate != \"\" || clientKey != \"\" {\n\t\tcert, err := tls.LoadX509KeyPair(clientCertificate, clientKey)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcerts = []tls.Certificate{cert}\n\t}\n\n\tthis.tlsConfig = &tls.Config{\n\t\tServerName:         this.Key.Hostname,\n\t\tCertificates:       certs,\n\t\tRootCAs:            rootCertPool,\n\t\tInsecureSkipVerify: allowInsecure,\n\t}\n\n\treturn this.RegisterTLSConfig()\n}\n\nfunc (this *ConnectionConfig) RegisterTLSConfig() error {\n\tif this.tlsConfig == nil {\n\t\treturn nil\n\t}\n\tif this.tlsConfig.ServerName == \"\" {\n\t\treturn errors.New(\"tlsConfig.ServerName cannot be empty\")\n\t}\n\n\tvar tlsOption = GetDBTLSConfigKey(this.tlsConfig.ServerName)\n\n\treturn mysql.RegisterTLSConfig(tlsOption, this.tlsConfig)\n}\n\nfunc (this *ConnectionConfig) TLSConfig() *tls.Config {\n\treturn this.tlsConfig\n}\n\nfunc (this *ConnectionConfig) GetDBUri(databaseName string) string {\n\thostname := this.Key.Hostname\n\tvar ip = net.ParseIP(hostname)\n\tif (ip != nil) && (ip.To4() == nil) {\n\t\t// Wrap IPv6 literals in square brackets\n\t\thostname = fmt.Sprintf(\"[%s]\", hostname)\n\t}\n\n\t// go-mysql-driver defaults to false if tls param is not provided; explicitly setting here to\n\t// simplify construction of the DSN below.\n\ttlsOption := \"false\"\n\tif this.tlsConfig != nil {\n\t\ttlsOption = GetDBTLSConfigKey(this.tlsConfig.ServerName)\n\t}\n\n\tif this.Charset == \"\" {\n\t\tthis.Charset = \"utf8mb4,utf8,latin1\"\n\t}\n\n\tconnectionParams := []string{\n\t\t\"autocommit=true\",\n\t\t\"interpolateParams=true\",\n\t\tfmt.Sprintf(\"charset=%s\", this.Charset),\n\t\tfmt.Sprintf(\"tls=%s\", tlsOption),\n\t\tfmt.Sprintf(\"transaction_isolation=%q\", this.TransactionIsolation),\n\t\tfmt.Sprintf(\"timeout=%fs\", this.Timeout),\n\t\tfmt.Sprintf(\"readTimeout=%fs\", this.Timeout),\n\t\tfmt.Sprintf(\"writeTimeout=%fs\", this.Timeout),\n\t}\n\n\treturn fmt.Sprintf(\"%s:%s@tcp(%s:%d)/%s?%s\", this.User, this.Password, hostname, this.Key.Port, databaseName, strings.Join(connectionParams, \"&\"))\n}\n\nfunc GetDBTLSConfigKey(tlsServerName string) string {\n\treturn fmt.Sprintf(\"%s-%s\", TLS_CONFIG_KEY, tlsServerName)\n}\n"
  },
  {
    "path": "go/mysql/connection_test.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\t\"crypto/tls\"\n\t\"testing\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nconst (\n\ttransactionIsolation = \"REPEATABLE-READ\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestNewConnectionConfig(t *testing.T) {\n\tc := NewConnectionConfig()\n\trequire.Equal(t, \"\", c.Key.Hostname)\n\trequire.Equal(t, 0, c.Key.Port)\n\trequire.Equal(t, \"\", c.ImpliedKey.Hostname)\n\trequire.Equal(t, 0, c.ImpliedKey.Port)\n\trequire.Equal(t, \"\", c.User)\n\trequire.Equal(t, \"\", c.Password)\n\trequire.Equal(t, \"\", c.TransactionIsolation)\n\trequire.Equal(t, \"\", c.Charset)\n}\n\nfunc TestDuplicateCredentials(t *testing.T) {\n\tc := NewConnectionConfig()\n\tc.Key = InstanceKey{Hostname: \"myhost\", Port: 3306}\n\tc.User = \"gromit\"\n\tc.Password = \"penguin\"\n\tc.tlsConfig = &tls.Config{\n\t\tInsecureSkipVerify: true,\n\t\tServerName:         \"feathers\",\n\t}\n\tc.TransactionIsolation = transactionIsolation\n\tc.Charset = \"utf8mb4\"\n\n\tdup := c.DuplicateCredentials(InstanceKey{Hostname: \"otherhost\", Port: 3310})\n\trequire.Equal(t, \"otherhost\", dup.Key.Hostname)\n\trequire.Equal(t, 3310, dup.Key.Port)\n\trequire.Equal(t, \"otherhost\", dup.ImpliedKey.Hostname)\n\trequire.Equal(t, 3310, dup.ImpliedKey.Port)\n\trequire.Equal(t, \"gromit\", dup.User)\n\trequire.Equal(t, \"penguin\", dup.Password)\n\trequire.Equal(t, \"otherhost\", dup.tlsConfig.ServerName)\n\trequire.Equal(t, c.tlsConfig.Certificates, dup.tlsConfig.Certificates)\n\trequire.Equal(t, c.tlsConfig.RootCAs, dup.tlsConfig.RootCAs)\n\trequire.Equal(t, c.tlsConfig.InsecureSkipVerify, dup.tlsConfig.InsecureSkipVerify)\n\trequire.Equal(t, c.TransactionIsolation, dup.TransactionIsolation)\n\trequire.Equal(t, c.Charset, dup.Charset)\n}\n\nfunc TestDuplicate(t *testing.T) {\n\tc := NewConnectionConfig()\n\tc.Key = InstanceKey{Hostname: \"myhost\", Port: 3306}\n\tc.User = \"gromit\"\n\tc.Password = \"penguin\"\n\tc.TransactionIsolation = transactionIsolation\n\tc.Charset = \"utf8mb4\"\n\n\tdup := c.Duplicate()\n\trequire.Equal(t, \"myhost\", dup.Key.Hostname)\n\trequire.Equal(t, 3306, dup.Key.Port)\n\trequire.Equal(t, \"myhost\", dup.ImpliedKey.Hostname)\n\trequire.Equal(t, 3306, dup.ImpliedKey.Port)\n\trequire.Equal(t, \"gromit\", dup.User)\n\trequire.Equal(t, \"penguin\", dup.Password)\n\trequire.Equal(t, c.tlsConfig, dup.tlsConfig)\n\trequire.Equal(t, transactionIsolation, dup.TransactionIsolation)\n\trequire.Equal(t, \"utf8mb4\", dup.Charset)\n}\n\nfunc TestGetDBUri(t *testing.T) {\n\tc := NewConnectionConfig()\n\tc.Key = InstanceKey{Hostname: \"myhost\", Port: 3306}\n\tc.User = \"gromit\"\n\tc.Password = \"penguin\"\n\tc.Timeout = 1.2345\n\tc.TransactionIsolation = transactionIsolation\n\tc.Charset = \"utf8mb4,utf8,latin1\"\n\n\turi := c.GetDBUri(\"test\")\n\trequire.Equal(t, `gromit:penguin@tcp(myhost:3306)/test?autocommit=true&interpolateParams=true&charset=utf8mb4,utf8,latin1&tls=false&transaction_isolation=\"REPEATABLE-READ\"&timeout=1.234500s&readTimeout=1.234500s&writeTimeout=1.234500s`, uri)\n}\n\nfunc TestGetDBUriWithTLSSetup(t *testing.T) {\n\tc := NewConnectionConfig()\n\tc.Key = InstanceKey{Hostname: \"myhost\", Port: 3306}\n\tc.User = \"gromit\"\n\tc.Password = \"penguin\"\n\tc.Timeout = 1.2345\n\tc.tlsConfig = &tls.Config{\n\t\tServerName: c.Key.Hostname,\n\t}\n\tc.TransactionIsolation = transactionIsolation\n\tc.Charset = \"utf8mb4_general_ci,utf8_general_ci,latin1\"\n\n\turi := c.GetDBUri(\"test\")\n\trequire.Equal(t, `gromit:penguin@tcp(myhost:3306)/test?autocommit=true&interpolateParams=true&charset=utf8mb4_general_ci,utf8_general_ci,latin1&tls=ghost-myhost&transaction_isolation=\"REPEATABLE-READ\"&timeout=1.234500s&readTimeout=1.234500s&writeTimeout=1.234500s`, uri)\n}\n\nfunc TestGetDBTLSConfigKey(t *testing.T) {\n\tconfigKey := GetDBTLSConfigKey(\"myhost\")\n\trequire.Equal(t, \"ghost-myhost\", configKey)\n}\n"
  },
  {
    "path": "go/mysql/instance_key.go",
    "content": "/*\n   Copyright 2015 Shlomi Noach, courtesy Booking.com\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nconst DefaultInstancePort = 3306\n\nvar (\n\tipv4HostPortRegexp = regexp.MustCompile(\"^([^:]+):([0-9]+)$\")\n\tipv4HostRegexp     = regexp.MustCompile(\"^([^:]+)$\")\n\n\t// e.g. [2001:db8:1f70::999:de8:7648:6e8]:3308\n\tipv6HostPortRegexp = regexp.MustCompile(\"^\\\\[([:0-9a-fA-F]+)\\\\]:([0-9]+)$\") //nolint:gosimple\n\t// e.g. 2001:db8:1f70::999:de8:7648:6e8\n\tipv6HostRegexp = regexp.MustCompile(\"^([:0-9a-fA-F]+)$\")\n)\n\n// InstanceKey is an instance indicator, identified by hostname and port\ntype InstanceKey struct {\n\tHostname string\n\tPort     int\n}\n\nconst detachHint = \"//\"\n\n// ParseInstanceKey will parse an InstanceKey from a string representation such as 127.0.0.1:3306\nfunc NewRawInstanceKey(hostPort string) (*InstanceKey, error) {\n\tvar hostname, port string\n\tif submatch := ipv4HostPortRegexp.FindStringSubmatch(hostPort); len(submatch) > 0 {\n\t\thostname = submatch[1]\n\t\tport = submatch[2]\n\t} else if submatch := ipv4HostRegexp.FindStringSubmatch(hostPort); len(submatch) > 0 {\n\t\thostname = submatch[1]\n\t} else if submatch := ipv6HostPortRegexp.FindStringSubmatch(hostPort); len(submatch) > 0 {\n\t\thostname = submatch[1]\n\t\tport = submatch[2]\n\t} else if submatch := ipv6HostRegexp.FindStringSubmatch(hostPort); len(submatch) > 0 {\n\t\thostname = submatch[1]\n\t} else {\n\t\treturn nil, fmt.Errorf(\"Cannot parse address: %s\", hostPort)\n\t}\n\tinstanceKey := &InstanceKey{Hostname: hostname, Port: DefaultInstancePort}\n\tif port != \"\" {\n\t\tvar err error\n\t\tif instanceKey.Port, err = strconv.Atoi(port); err != nil {\n\t\t\treturn instanceKey, fmt.Errorf(\"Invalid port: %s\", port)\n\t\t}\n\t}\n\n\treturn instanceKey, nil\n}\n\n// ParseInstanceKey will parse an InstanceKey from a string representation such as 127.0.0.1:3306.\n// The port part is optional; there will be no name resolve\nfunc ParseInstanceKey(hostPort string) (*InstanceKey, error) {\n\treturn NewRawInstanceKey(hostPort)\n}\n\n// Equals tests equality between this key and another key\nfunc (this *InstanceKey) Equals(other *InstanceKey) bool {\n\tif other == nil {\n\t\treturn false\n\t}\n\treturn this.Hostname == other.Hostname && this.Port == other.Port\n}\n\n// SmallerThan returns true if this key is dictionary-smaller than another.\n// This is used for consistent sorting/ordering; there's nothing magical about it.\nfunc (this *InstanceKey) SmallerThan(other *InstanceKey) bool {\n\tif this.Hostname < other.Hostname {\n\t\treturn true\n\t}\n\tif this.Hostname == other.Hostname && this.Port < other.Port {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// IsDetached returns 'true' when this hostname is logically \"detached\"\nfunc (this *InstanceKey) IsDetached() bool {\n\treturn strings.HasPrefix(this.Hostname, detachHint)\n}\n\n// IsValid uses simple heuristics to see whether this key represents an actual instance\nfunc (this *InstanceKey) IsValid() bool {\n\tif this.Hostname == \"_\" {\n\t\treturn false\n\t}\n\tif this.IsDetached() {\n\t\treturn false\n\t}\n\treturn len(this.Hostname) > 0 && this.Port > 0\n}\n\n// DetachedKey returns an instance key whose hostname is detached: invalid, but recoverable\nfunc (this *InstanceKey) DetachedKey() *InstanceKey {\n\tif this.IsDetached() {\n\t\treturn this\n\t}\n\treturn &InstanceKey{Hostname: fmt.Sprintf(\"%s%s\", detachHint, this.Hostname), Port: this.Port}\n}\n\n// ReattachedKey returns an instance key whose hostname is detached: invalid, but recoverable\nfunc (this *InstanceKey) ReattachedKey() *InstanceKey {\n\tif !this.IsDetached() {\n\t\treturn this\n\t}\n\treturn &InstanceKey{Hostname: this.Hostname[len(detachHint):], Port: this.Port}\n}\n\n// StringCode returns an official string representation of this key\nfunc (this *InstanceKey) StringCode() string {\n\treturn fmt.Sprintf(\"%s:%d\", this.Hostname, this.Port)\n}\n\n// DisplayString returns a user-friendly string representation of this key\nfunc (this *InstanceKey) DisplayString() string {\n\treturn this.StringCode()\n}\n\n// String returns a user-friendly string representation of this key\nfunc (this InstanceKey) String() string {\n\treturn this.StringCode()\n}\n"
  },
  {
    "path": "go/mysql/instance_key_map.go",
    "content": "/*\n   Copyright 2015 Shlomi Noach, courtesy Booking.com\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\t\"encoding/json\"\n\t\"strings\"\n)\n\n// InstanceKeyMap is a convenience struct for listing InstanceKey-s\ntype InstanceKeyMap map[InstanceKey]bool\n\nfunc NewInstanceKeyMap() *InstanceKeyMap {\n\treturn &InstanceKeyMap{}\n}\n\nfunc (this *InstanceKeyMap) Len() int {\n\treturn len(*this)\n}\n\n// AddKey adds a single key to this map\nfunc (this *InstanceKeyMap) AddKey(key InstanceKey) {\n\t(*this)[key] = true\n}\n\n// AddKeys adds all given keys to this map\nfunc (this *InstanceKeyMap) AddKeys(keys []InstanceKey) {\n\tfor _, key := range keys {\n\t\tthis.AddKey(key)\n\t}\n}\n\n// HasKey checks if given key is within the map\nfunc (this *InstanceKeyMap) HasKey(key InstanceKey) bool {\n\t_, ok := (*this)[key]\n\treturn ok\n}\n\n// GetInstanceKeys returns keys in this map in the form of an array\nfunc (this *InstanceKeyMap) GetInstanceKeys() []InstanceKey {\n\tres := []InstanceKey{}\n\tfor key := range *this {\n\t\tres = append(res, key)\n\t}\n\treturn res\n}\n\n// MarshalJSON will marshal this map as JSON\nfunc (this *InstanceKeyMap) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(this.GetInstanceKeys())\n}\n\n// ToJSON will marshal this map as JSON\nfunc (this *InstanceKeyMap) ToJSON() (string, error) {\n\tbytes, err := this.MarshalJSON()\n\treturn string(bytes), err\n}\n\n// ToJSONString will marshal this map as JSON\nfunc (this *InstanceKeyMap) ToJSONString() string {\n\ts, _ := this.ToJSON()\n\treturn s\n}\n\n// ToCommaDelimitedList will export this map in comma delimited format\nfunc (this *InstanceKeyMap) ToCommaDelimitedList() string {\n\tkeyDisplays := []string{}\n\tfor key := range *this {\n\t\tkeyDisplays = append(keyDisplays, key.DisplayString())\n\t}\n\treturn strings.Join(keyDisplays, \",\")\n}\n\n// ReadJson unmarshalls a json into this map\nfunc (this *InstanceKeyMap) ReadJson(jsonString string) error {\n\tvar keys []InstanceKey\n\terr := json.Unmarshal([]byte(jsonString), &keys)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthis.AddKeys(keys)\n\treturn err\n}\n\n// ReadJson unmarshalls a json into this map\nfunc (this *InstanceKeyMap) ReadCommaDelimitedList(list string) error {\n\tif list == \"\" {\n\t\treturn nil\n\t}\n\ttokens := strings.Split(list, \",\")\n\tfor _, token := range tokens {\n\t\tkey, err := ParseInstanceKey(token)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tthis.AddKey(*key)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "go/mysql/instance_key_test.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\t\"testing\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestParseInstanceKey(t *testing.T) {\n\t{\n\t\tkey, err := ParseInstanceKey(\"myhost:1234\")\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"myhost\", key.Hostname)\n\t\trequire.Equal(t, 1234, key.Port)\n\t}\n\t{\n\t\tkey, err := ParseInstanceKey(\"myhost\")\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"myhost\", key.Hostname)\n\t\trequire.Equal(t, 3306, key.Port)\n\t}\n\t{\n\t\tkey, err := ParseInstanceKey(\"10.0.0.3:3307\")\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"10.0.0.3\", key.Hostname)\n\t\trequire.Equal(t, 3307, key.Port)\n\t}\n\t{\n\t\tkey, err := ParseInstanceKey(\"10.0.0.3\")\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"10.0.0.3\", key.Hostname)\n\t\trequire.Equal(t, 3306, key.Port)\n\t}\n\t{\n\t\tkey, err := ParseInstanceKey(\"[2001:db8:1f70::999:de8:7648:6e8]:3308\")\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"2001:db8:1f70::999:de8:7648:6e8\", key.Hostname)\n\t\trequire.Equal(t, 3308, key.Port)\n\t}\n\t{\n\t\tkey, err := ParseInstanceKey(\"::1\")\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"::1\", key.Hostname)\n\t\trequire.Equal(t, 3306, key.Port)\n\t}\n\t{\n\t\tkey, err := ParseInstanceKey(\"0:0:0:0:0:0:0:0\")\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"0:0:0:0:0:0:0:0\", key.Hostname)\n\t\trequire.Equal(t, 3306, key.Port)\n\t}\n\t{\n\t\t_, err := ParseInstanceKey(\"[2001:xxxx:1f70::999:de8:7648:6e8]:3308\")\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\t_, err := ParseInstanceKey(\"10.0.0.4:\")\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\t_, err := ParseInstanceKey(\"10.0.0.4:5.6.7\")\n\t\trequire.Error(t, err)\n\t}\n}\n"
  },
  {
    "path": "go/mysql/replica_terminology_map.go",
    "content": "package mysql\n\nimport (\n\tversion \"github.com/hashicorp/go-version\"\n)\n\nconst (\n\tMysqlVersionCutoff = \"8.4\"\n)\n\nvar MysqlReplicaTermMap = map[string]string{\n\t\"Seconds_Behind_Master\": \"Seconds_Behind_Source\",\n\t\"Master_Log_File\":       \"Source_Log_File\",\n\t\"Master_Host\":           \"Source_Host\",\n\t\"Master_Port\":           \"Source_Port\",\n\t\"Exec_Master_Log_Pos\":   \"Exec_Source_Log_Pos\",\n\t\"Read_Master_Log_Pos\":   \"Read_Source_Log_Pos\",\n\t\"Relay_Master_Log_File\": \"Relay_Source_Log_File\",\n\t\"Slave_IO_Running\":      \"Replica_IO_Running\",\n\t\"Slave_SQL_Running\":     \"Replica_SQL_Running\",\n\t\"master status\":         \"binary log status\",\n\t\"slave hosts\":           \"replicas\",\n\t\"slave status\":          \"replica status\",\n\t\"slave\":                 \"replica\",\n}\n\nfunc ReplicaTermFor(mysqlVersion string, term string) string {\n\tvs, err := version.NewVersion(mysqlVersion)\n\tif err != nil {\n\t\t// default to returning the same term if we cannot determine the version\n\t\treturn term\n\t}\n\n\tmysqlVersionCutoff, _ := version.NewVersion(MysqlVersionCutoff)\n\tif vs.GreaterThanOrEqual(mysqlVersionCutoff) {\n\t\treturn MysqlReplicaTermMap[term]\n\t}\n\treturn term\n}\n"
  },
  {
    "path": "go/mysql/utils.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage mysql\n\nimport (\n\tgosql \"database/sql\"\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/github/gh-ost/go/sql\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/openark/golib/sqlutils\"\n)\n\nconst (\n\tMaxTableNameLength   = 64\n\tMaxDBPoolConnections = 3\n)\n\ntype ReplicationLagResult struct {\n\tKey InstanceKey\n\tLag time.Duration\n\tErr error\n}\n\ntype Trigger struct {\n\tName      string\n\tEvent     string\n\tStatement string\n\tTiming    string\n}\n\nfunc NewNoReplicationLagResult() *ReplicationLagResult {\n\treturn &ReplicationLagResult{Lag: 0, Err: nil}\n}\n\nfunc (this *ReplicationLagResult) HasLag() bool {\n\treturn this.Lag > 0\n}\n\n// knownDBs is a DB cache by uri\nvar knownDBs map[string]*gosql.DB = make(map[string]*gosql.DB)\nvar knownDBsMutex = &sync.Mutex{}\n\nfunc GetDB(migrationUuid string, mysql_uri string) (db *gosql.DB, exists bool, err error) {\n\tcacheKey := migrationUuid + \":\" + mysql_uri\n\n\tknownDBsMutex.Lock()\n\tdefer knownDBsMutex.Unlock()\n\n\tif db, exists = knownDBs[cacheKey]; !exists {\n\t\tdb, err = gosql.Open(\"mysql\", mysql_uri)\n\t\tif err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tdb.SetMaxOpenConns(MaxDBPoolConnections)\n\t\tdb.SetMaxIdleConns(MaxDBPoolConnections)\n\t\tknownDBs[cacheKey] = db\n\t}\n\treturn db, exists, nil\n}\n\n// GetReplicationLagFromSlaveStatus returns replication lag for a given db; via SHOW SLAVE STATUS\nfunc GetReplicationLagFromSlaveStatus(dbVersion string, informationSchemaDb *gosql.DB) (replicationLag time.Duration, err error) {\n\tshowReplicaStatusQuery := fmt.Sprintf(\"show %s\", ReplicaTermFor(dbVersion, `slave status`))\n\terr = sqlutils.QueryRowsMap(informationSchemaDb, showReplicaStatusQuery, func(m sqlutils.RowMap) error {\n\t\tioRunningTerm := ReplicaTermFor(dbVersion, \"Slave_IO_Running\")\n\t\tsqlRunningTerm := ReplicaTermFor(dbVersion, \"Slave_SQL_Running\")\n\t\tslaveIORunning := m.GetString(ioRunningTerm)\n\t\tslaveSQLRunning := m.GetString(sqlRunningTerm)\n\t\tsecondsBehindMaster := m.GetNullInt64(ReplicaTermFor(dbVersion, \"Seconds_Behind_Master\"))\n\t\tif !secondsBehindMaster.Valid {\n\t\t\treturn fmt.Errorf(\"replication not running; %s=%+v, %s=%+v\", ioRunningTerm, slaveIORunning, sqlRunningTerm, slaveSQLRunning)\n\t\t}\n\t\treplicationLag = time.Duration(secondsBehindMaster.Int64) * time.Second\n\t\treturn nil\n\t})\n\n\treturn replicationLag, err\n}\n\nfunc GetMasterKeyFromSlaveStatus(dbVersion string, connectionConfig *ConnectionConfig) (masterKey *InstanceKey, err error) {\n\tcurrentUri := connectionConfig.GetDBUri(\"information_schema\")\n\t// This function is only called once, okay to not have a cached connection pool\n\tdb, err := gosql.Open(\"mysql\", currentUri)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer db.Close()\n\n\tshowReplicaStatusQuery := fmt.Sprintf(\"show %s\", ReplicaTermFor(dbVersion, `slave status`))\n\terr = sqlutils.QueryRowsMap(db, showReplicaStatusQuery, func(rowMap sqlutils.RowMap) error {\n\t\t// We wish to recognize the case where the topology's master actually has replication configuration.\n\t\t// This can happen when a DBA issues a `RESET SLAVE` instead of `RESET SLAVE ALL`.\n\n\t\t// An empty log file indicates this is a master:\n\t\tif rowMap.GetString(ReplicaTermFor(dbVersion, \"Master_Log_File\")) == \"\" {\n\t\t\treturn nil\n\t\t}\n\n\t\tioRunningTerm := ReplicaTermFor(dbVersion, \"Slave_IO_Running\")\n\t\tsqlRunningTerm := ReplicaTermFor(dbVersion, \"Slave_SQL_Running\")\n\t\tslaveIORunning := rowMap.GetString(ioRunningTerm)\n\t\tslaveSQLRunning := rowMap.GetString(sqlRunningTerm)\n\n\t\tif slaveIORunning != \"Yes\" || slaveSQLRunning != \"Yes\" {\n\t\t\treturn fmt.Errorf(\"Replication on %+v is broken: %s: %s, %s: %s. Please make sure replication runs before using gh-ost.\",\n\t\t\t\tconnectionConfig.Key,\n\t\t\t\tioRunningTerm,\n\t\t\t\tslaveIORunning,\n\t\t\t\tsqlRunningTerm,\n\t\t\t\tslaveSQLRunning,\n\t\t\t)\n\t\t}\n\n\t\tmasterKey = &InstanceKey{\n\t\t\tHostname: rowMap.GetString(ReplicaTermFor(dbVersion, \"Master_Host\")),\n\t\t\tPort:     rowMap.GetInt(ReplicaTermFor(dbVersion, \"Master_Port\")),\n\t\t}\n\t\treturn nil\n\t})\n\n\treturn masterKey, err\n}\n\nfunc GetMasterConnectionConfigSafe(dbVersion string, connectionConfig *ConnectionConfig, visitedKeys *InstanceKeyMap, allowMasterMaster bool) (masterConfig *ConnectionConfig, err error) {\n\tlog.Debugf(\"Looking for %s on %+v\", ReplicaTermFor(dbVersion, \"master\"), connectionConfig.Key)\n\n\tmasterKey, err := GetMasterKeyFromSlaveStatus(dbVersion, connectionConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif masterKey == nil {\n\t\treturn connectionConfig, nil\n\t}\n\tif !masterKey.IsValid() {\n\t\treturn connectionConfig, nil\n\t}\n\n\tmasterConfig = connectionConfig.DuplicateCredentials(*masterKey)\n\tif err := masterConfig.RegisterTLSConfig(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlog.Debugf(\"%s of %+v is %+v\", ReplicaTermFor(dbVersion, \"master\"), connectionConfig.Key, masterConfig.Key)\n\tif visitedKeys.HasKey(masterConfig.Key) {\n\t\tif allowMasterMaster {\n\t\t\treturn connectionConfig, nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"There seems to be a master-master setup at %+v. This is unsupported. Bailing out\", masterConfig.Key)\n\t}\n\tvisitedKeys.AddKey(masterConfig.Key)\n\treturn GetMasterConnectionConfigSafe(dbVersion, masterConfig, visitedKeys, allowMasterMaster)\n}\n\nfunc GetReplicationBinlogCoordinates(dbVersion string, db *gosql.DB, gtid bool) (readBinlogCoordinates, executeBinlogCoordinates BinlogCoordinates, err error) {\n\tshowReplicaStatusQuery := fmt.Sprintf(\"show %s\", ReplicaTermFor(dbVersion, `slave status`))\n\terr = sqlutils.QueryRowsMap(db, showReplicaStatusQuery, func(m sqlutils.RowMap) error {\n\t\tif gtid {\n\t\t\texecuteBinlogCoordinates, err = NewGTIDBinlogCoordinates(m.GetString(\"Executed_Gtid_Set\"))\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treadBinlogCoordinates, err = NewGTIDBinlogCoordinates(m.GetString(\"Retrieved_Gtid_Set\"))\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\treadBinlogCoordinates = NewFileBinlogCoordinates(\n\t\t\t\tm.GetString(ReplicaTermFor(dbVersion, \"Master_Log_File\")),\n\t\t\t\tm.GetInt64(ReplicaTermFor(dbVersion, \"Read_Master_Log_Pos\")),\n\t\t\t)\n\t\t\texecuteBinlogCoordinates = NewFileBinlogCoordinates(\n\t\t\t\tm.GetString(ReplicaTermFor(dbVersion, \"Relay_Master_Log_File\")),\n\t\t\t\tm.GetInt64(ReplicaTermFor(dbVersion, \"Exec_Master_Log_Pos\")),\n\t\t\t)\n\t\t}\n\t\treturn nil\n\t})\n\treturn readBinlogCoordinates, executeBinlogCoordinates, err\n}\n\nfunc GetSelfBinlogCoordinates(dbVersion string, db *gosql.DB, gtid bool) (selfBinlogCoordinates BinlogCoordinates, err error) {\n\tbinaryLogStatusTerm := ReplicaTermFor(dbVersion, \"master status\")\n\terr = sqlutils.QueryRowsMap(db, fmt.Sprintf(\"show %s\", binaryLogStatusTerm), func(m sqlutils.RowMap) error {\n\t\tif gtid {\n\t\t\tselfBinlogCoordinates, err = NewGTIDBinlogCoordinates(m.GetString(\"Executed_Gtid_Set\"))\n\t\t} else {\n\t\t\tselfBinlogCoordinates = NewFileBinlogCoordinates(\n\t\t\t\tm.GetString(\"File\"),\n\t\t\t\tm.GetInt64(\"Position\"),\n\t\t\t)\n\t\t}\n\t\treturn nil\n\t})\n\treturn selfBinlogCoordinates, err\n}\n\n// GetInstanceKey reads hostname and port on given DB\nfunc GetInstanceKey(db *gosql.DB) (instanceKey *InstanceKey, err error) {\n\tinstanceKey = &InstanceKey{}\n\terr = db.QueryRow(`select @@global.hostname, @@global.port`).Scan(&instanceKey.Hostname, &instanceKey.Port)\n\treturn instanceKey, err\n}\n\n// GetTableColumns reads column list from given table\nfunc GetTableColumns(db *gosql.DB, databaseName, tableName string) (*sql.ColumnList, *sql.ColumnList, error) {\n\tquery := fmt.Sprintf(`\n\t\tshow columns from %s.%s\n\t\t`,\n\t\tsql.EscapeName(databaseName),\n\t\tsql.EscapeName(tableName),\n\t)\n\tcolumnNames := []string{}\n\tvirtualColumnNames := []string{}\n\terr := sqlutils.QueryRowsMap(db, query, func(rowMap sqlutils.RowMap) error {\n\t\tcolumnName := rowMap.GetString(\"Field\")\n\t\tcolumnNames = append(columnNames, columnName)\n\t\tif strings.Contains(rowMap.GetString(\"Extra\"), \" GENERATED\") {\n\t\t\tlog.Debugf(\"%s is a generated column\", columnName)\n\t\t\tvirtualColumnNames = append(virtualColumnNames, columnName)\n\t\t}\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif len(columnNames) == 0 {\n\t\treturn nil, nil, log.Errorf(\"Found 0 columns on %s.%s. Bailing out\",\n\t\t\tsql.EscapeName(databaseName),\n\t\t\tsql.EscapeName(tableName),\n\t\t)\n\t}\n\treturn sql.NewColumnList(columnNames), sql.NewColumnList(virtualColumnNames), nil\n}\n\n// Kill executes a KILL QUERY by connection id\nfunc Kill(db *gosql.DB, connectionID string) error {\n\t_, err := db.Exec(`KILL QUERY %s`, connectionID)\n\treturn err\n}\n\n// GetTriggers reads trigger list from given table\nfunc GetTriggers(db *gosql.DB, databaseName, tableName string) (triggers []Trigger, err error) {\n\tquery := `select trigger_name as name, event_manipulation as event, action_statement as statement, action_timing as timing\n\tfrom information_schema.triggers\n\twhere trigger_schema = ? and event_object_table = ?`\n\n\terr = sqlutils.QueryRowsMap(db, query, func(rowMap sqlutils.RowMap) error {\n\t\ttriggers = append(triggers, Trigger{\n\t\t\tName:      rowMap.GetString(\"name\"),\n\t\t\tEvent:     rowMap.GetString(\"event\"),\n\t\t\tStatement: rowMap.GetString(\"statement\"),\n\t\t\tTiming:    rowMap.GetString(\"timing\"),\n\t\t})\n\t\treturn nil\n\t}, databaseName, tableName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn triggers, nil\n}\n"
  },
  {
    "path": "go/sql/builder.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage sql\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype ValueComparisonSign string\n\nconst (\n\tLessThanComparisonSign            ValueComparisonSign = \"<\"\n\tLessThanOrEqualsComparisonSign    ValueComparisonSign = \"<=\"\n\tEqualsComparisonSign              ValueComparisonSign = \"=\"\n\tGreaterThanOrEqualsComparisonSign ValueComparisonSign = \">=\"\n\tGreaterThanComparisonSign         ValueComparisonSign = \">\"\n\tNotEqualsComparisonSign           ValueComparisonSign = \"!=\"\n\tMaxColumnNameLength                                   = 64\n)\n\n// EscapeName will escape a db/table/column/... name by wrapping with backticks.\n// It is not fool proof. I'm just trying to do the right thing here, not solving\n// SQL injection issues, which should be irrelevant for this tool.\nfunc EscapeName(name string) string {\n\tif unquoted, err := strconv.Unquote(name); err == nil {\n\t\tname = unquoted\n\t}\n\treturn fmt.Sprintf(\"`%s`\", name)\n}\n\n// TruncateColumnName truncates a name so it can be used as a MySQL\n// column name, taking into account UTF-8 characters.\nfunc TruncateColumnName(name string, limit int) string {\n\ttruncatedName := name\n\tchars := 0\n\tfor byteIdx := range name {\n\t\tif chars >= limit {\n\t\t\ttruncatedName = name[:byteIdx]\n\t\t\tbreak\n\t\t}\n\t\tchars++\n\t}\n\treturn truncatedName\n}\n\nfunc buildColumnsPreparedValues(columns *ColumnList) []string {\n\tvalues := make([]string, columns.Len())\n\tfor i, column := range columns.Columns() {\n\t\tvar token string\n\t\tif column.timezoneConversion != nil {\n\t\t\ttoken = fmt.Sprintf(\"convert_tz(?, '%s', '%s')\", column.timezoneConversion.ToTimezone, \"+00:00\")\n\t\t} else if column.enumToTextConversion {\n\t\t\ttoken = fmt.Sprintf(\"ELT(?, %s)\", column.EnumValues)\n\t\t} else if column.Type == JSONColumnType {\n\t\t\ttoken = \"convert(? using utf8mb4)\"\n\t\t} else {\n\t\t\ttoken = \"?\"\n\t\t}\n\t\tvalues[i] = token\n\t}\n\treturn values\n}\n\nfunc buildPreparedValues(length int) []string {\n\tvalues := make([]string, length)\n\tfor i := 0; i < length; i++ {\n\t\tvalues[i] = \"?\"\n\t}\n\treturn values\n}\n\nfunc duplicateNames(names []string) []string {\n\tduplicate := make([]string, len(names))\n\tcopy(duplicate, names)\n\treturn duplicate\n}\n\nfunc BuildValueComparison(column string, value string, comparisonSign ValueComparisonSign) (result string, err error) {\n\tif column == \"\" {\n\t\treturn \"\", fmt.Errorf(\"Empty column in GetValueComparison\")\n\t}\n\tif value == \"\" {\n\t\treturn \"\", fmt.Errorf(\"Empty value in GetValueComparison\")\n\t}\n\tcomparison := fmt.Sprintf(\"(%s %s %s)\", EscapeName(column), string(comparisonSign), value)\n\treturn comparison, err\n}\n\nfunc BuildEqualsComparison(columns []string, values []string) (result string, err error) {\n\tif len(columns) == 0 {\n\t\treturn \"\", fmt.Errorf(\"Got 0 columns in GetEqualsComparison\")\n\t}\n\tif len(columns) != len(values) {\n\t\treturn \"\", fmt.Errorf(\"Got %d columns but %d values in GetEqualsComparison\", len(columns), len(values))\n\t}\n\tcomparisons := []string{}\n\tfor i, column := range columns {\n\t\tvalue := values[i]\n\t\tcomparison, err := BuildValueComparison(column, value, EqualsComparisonSign)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tcomparisons = append(comparisons, comparison)\n\t}\n\tresult = strings.Join(comparisons, \" and \")\n\tresult = fmt.Sprintf(\"(%s)\", result)\n\treturn result, nil\n}\n\nfunc BuildEqualsPreparedComparison(columns []string) (result string, err error) {\n\tvalues := buildPreparedValues(len(columns))\n\treturn BuildEqualsComparison(columns, values)\n}\n\n// It holds the prepared query statement so it doesn't need to be recreated every time.\ntype CheckpointInsertQueryBuilder struct {\n\tuniqueKeyColumns  *ColumnList\n\tpreparedStatement string\n}\n\nfunc NewCheckpointQueryBuilder(databaseName, tableName string, uniqueKeyColumns *ColumnList) (*CheckpointInsertQueryBuilder, error) {\n\tif uniqueKeyColumns.Len() == 0 {\n\t\treturn nil, fmt.Errorf(\"Got 0 columns in BuildSetCheckpointInsertQuery\")\n\t}\n\tvalues := buildColumnsPreparedValues(uniqueKeyColumns)\n\tminUniqueColNames := []string{}\n\tmaxUniqueColNames := []string{}\n\tfor _, name := range uniqueKeyColumns.Names() {\n\t\tminColName := TruncateColumnName(name, MaxColumnNameLength-4) + \"_min\"\n\t\tmaxColName := TruncateColumnName(name, MaxColumnNameLength-4) + \"_max\"\n\t\tminUniqueColNames = append(minUniqueColNames, minColName)\n\t\tmaxUniqueColNames = append(maxUniqueColNames, maxColName)\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\ttableName = EscapeName(tableName)\n\tstmt := fmt.Sprintf(`\n\t\tinsert /* gh-ost */\n\t\tinto %s.%s\n\t\t\t(gh_ost_chk_timestamp, gh_ost_chk_coords, gh_ost_chk_iteration,\n\t\t\t gh_ost_rows_copied, gh_ost_dml_applied, gh_ost_is_cutover,\n  \t\t\t %s, %s)\n\t\tvalues\n\t\t\t(unix_timestamp(now()), ?, ?,\n\t\t\t ?, ?, ?,\n\t\t\t %s, %s)`,\n\t\tdatabaseName, tableName,\n\t\tstrings.Join(minUniqueColNames, \", \"),\n\t\tstrings.Join(maxUniqueColNames, \", \"),\n\t\tstrings.Join(values, \", \"),\n\t\tstrings.Join(values, \", \"),\n\t)\n\n\tb := &CheckpointInsertQueryBuilder{\n\t\tuniqueKeyColumns:  uniqueKeyColumns,\n\t\tpreparedStatement: stmt,\n\t}\n\treturn b, nil\n}\n\n// BuildQuery builds the insert query.\nfunc (b *CheckpointInsertQueryBuilder) BuildQuery(uniqueKeyArgs []interface{}) (string, []interface{}, error) {\n\tif len(uniqueKeyArgs) != 2*b.uniqueKeyColumns.Len() {\n\t\treturn \"\", nil, fmt.Errorf(\"args count differs from 2 x unique key column count\")\n\t}\n\tconvertedArgs := make([]interface{}, 0, 2*b.uniqueKeyColumns.Len())\n\tfor i, column := range b.uniqueKeyColumns.Columns() {\n\t\tminArg := column.convertArg(uniqueKeyArgs[i])\n\t\tconvertedArgs = append(convertedArgs, minArg)\n\t}\n\tfor i, column := range b.uniqueKeyColumns.Columns() {\n\t\tminArg := column.convertArg(uniqueKeyArgs[i+b.uniqueKeyColumns.Len()])\n\t\tconvertedArgs = append(convertedArgs, minArg)\n\t}\n\treturn b.preparedStatement, convertedArgs, nil\n}\n\nfunc BuildSetPreparedClause(columns *ColumnList) (result string, err error) {\n\tif columns.Len() == 0 {\n\t\treturn \"\", fmt.Errorf(\"Got 0 columns in BuildSetPreparedClause\")\n\t}\n\tsetTokens := []string{}\n\tfor _, column := range columns.Columns() {\n\t\tvar setToken string\n\t\tif column.timezoneConversion != nil {\n\t\t\tsetToken = fmt.Sprintf(\"%s=convert_tz(?, '%s', '%s')\", EscapeName(column.Name), column.timezoneConversion.ToTimezone, \"+00:00\")\n\t\t} else if column.enumToTextConversion {\n\t\t\tsetToken = fmt.Sprintf(\"%s=ELT(?, %s)\", EscapeName(column.Name), column.EnumValues)\n\t\t} else if column.Type == JSONColumnType {\n\t\t\tsetToken = fmt.Sprintf(\"%s=convert(? using utf8mb4)\", EscapeName(column.Name))\n\t\t} else {\n\t\t\tsetToken = fmt.Sprintf(\"%s=?\", EscapeName(column.Name))\n\t\t}\n\t\tsetTokens = append(setTokens, setToken)\n\t}\n\treturn strings.Join(setTokens, \", \"), nil\n}\n\nfunc BuildRangeComparison(columns []string, values []string, args []interface{}, comparisonSign ValueComparisonSign) (result string, explodedArgs []interface{}, err error) {\n\tif len(columns) == 0 {\n\t\treturn \"\", explodedArgs, fmt.Errorf(\"Got 0 columns in GetRangeComparison\")\n\t}\n\tif len(columns) != len(values) {\n\t\treturn \"\", explodedArgs, fmt.Errorf(\"Got %d columns but %d values in GetEqualsComparison\", len(columns), len(values))\n\t}\n\tif len(columns) != len(args) {\n\t\treturn \"\", explodedArgs, fmt.Errorf(\"Got %d columns but %d args in GetEqualsComparison\", len(columns), len(args))\n\t}\n\tincludeEquals := false\n\tif comparisonSign == LessThanOrEqualsComparisonSign {\n\t\tcomparisonSign = LessThanComparisonSign\n\t\tincludeEquals = true\n\t}\n\tif comparisonSign == GreaterThanOrEqualsComparisonSign {\n\t\tcomparisonSign = GreaterThanComparisonSign\n\t\tincludeEquals = true\n\t}\n\tcomparisons := []string{}\n\n\tfor i, column := range columns {\n\t\tvalue := values[i]\n\t\trangeComparison, err := BuildValueComparison(column, value, comparisonSign)\n\t\tif err != nil {\n\t\t\treturn \"\", explodedArgs, err\n\t\t}\n\t\tif i > 0 {\n\t\t\tequalitiesComparison, err := BuildEqualsComparison(columns[0:i], values[0:i])\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", explodedArgs, err\n\t\t\t}\n\t\t\tcomparison := fmt.Sprintf(\"(%s AND %s)\", equalitiesComparison, rangeComparison)\n\t\t\tcomparisons = append(comparisons, comparison)\n\t\t\texplodedArgs = append(explodedArgs, args[0:i]...)\n\t\t\texplodedArgs = append(explodedArgs, args[i])\n\t\t} else {\n\t\t\tcomparisons = append(comparisons, rangeComparison)\n\t\t\texplodedArgs = append(explodedArgs, args[i])\n\t\t}\n\t}\n\n\tif includeEquals {\n\t\tcomparison, err := BuildEqualsComparison(columns, values)\n\t\tif err != nil {\n\t\t\treturn \"\", explodedArgs, err\n\t\t}\n\t\tcomparisons = append(comparisons, comparison)\n\t\texplodedArgs = append(explodedArgs, args...)\n\t}\n\tresult = strings.Join(comparisons, \" or \")\n\tresult = fmt.Sprintf(\"(%s)\", result)\n\treturn result, explodedArgs, nil\n}\n\nfunc BuildRangePreparedComparison(columns *ColumnList, args []interface{}, comparisonSign ValueComparisonSign) (result string, explodedArgs []interface{}, err error) {\n\tvalues := buildColumnsPreparedValues(columns)\n\treturn BuildRangeComparison(columns.Names(), values, args, comparisonSign)\n}\n\nfunc BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartValues, rangeEndValues []string, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool, transactionalTable bool, noWait bool) (result string, explodedArgs []interface{}, err error) {\n\tif len(sharedColumns) == 0 {\n\t\treturn \"\", explodedArgs, fmt.Errorf(\"Got 0 shared columns in BuildRangeInsertQuery\")\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\toriginalTableName = EscapeName(originalTableName)\n\tghostTableName = EscapeName(ghostTableName)\n\n\tmappedSharedColumns = duplicateNames(mappedSharedColumns)\n\tfor i := range mappedSharedColumns {\n\t\tmappedSharedColumns[i] = EscapeName(mappedSharedColumns[i])\n\t}\n\tmappedSharedColumnsListing := strings.Join(mappedSharedColumns, \", \")\n\n\tsharedColumns = duplicateNames(sharedColumns)\n\tfor i := range sharedColumns {\n\t\tsharedColumns[i] = EscapeName(sharedColumns[i])\n\t}\n\tsharedColumnsListing := strings.Join(sharedColumns, \", \")\n\n\tuniqueKey = EscapeName(uniqueKey)\n\tvar minRangeComparisonSign ValueComparisonSign = GreaterThanComparisonSign\n\tif includeRangeStartValues {\n\t\tminRangeComparisonSign = GreaterThanOrEqualsComparisonSign\n\t}\n\trangeStartComparison, rangeExplodedArgs, err := BuildRangeComparison(uniqueKeyColumns.Names(), rangeStartValues, rangeStartArgs, minRangeComparisonSign)\n\tif err != nil {\n\t\treturn \"\", explodedArgs, err\n\t}\n\texplodedArgs = append(explodedArgs, rangeExplodedArgs...)\n\ttransactionalClause := \"\"\n\tif transactionalTable {\n\t\tif noWait {\n\t\t\ttransactionalClause = \"for share nowait\"\n\t\t} else {\n\t\t\ttransactionalClause = \"lock in share mode\"\n\t\t}\n\t}\n\trangeEndComparison, rangeExplodedArgs, err := BuildRangeComparison(uniqueKeyColumns.Names(), rangeEndValues, rangeEndArgs, LessThanOrEqualsComparisonSign)\n\tif err != nil {\n\t\treturn \"\", explodedArgs, err\n\t}\n\texplodedArgs = append(explodedArgs, rangeExplodedArgs...)\n\tresult = fmt.Sprintf(`\n\t\tinsert /* gh-ost %s.%s */ ignore\n\t\tinto\n\t\t\t%s.%s\n\t\t\t(%s)\n\t\t(\n\t\t\tselect %s\n\t\t\tfrom\n\t\t\t\t%s.%s\n\t\t\tforce index (%s)\n\t\t\twhere\n\t\t\t\t(%s and %s)\n\t\t\t\t%s\n\t\t)`,\n\t\tdatabaseName, originalTableName, databaseName, ghostTableName, mappedSharedColumnsListing,\n\t\tsharedColumnsListing, databaseName, originalTableName, uniqueKey,\n\t\trangeStartComparison, rangeEndComparison, transactionalClause)\n\treturn result, explodedArgs, nil\n}\n\nfunc BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool, transactionalTable bool, noWait bool) (result string, explodedArgs []interface{}, err error) {\n\trangeStartValues := buildColumnsPreparedValues(uniqueKeyColumns)\n\trangeEndValues := buildColumnsPreparedValues(uniqueKeyColumns)\n\treturn BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, includeRangeStartValues, transactionalTable, noWait)\n}\n\nfunc BuildUniqueKeyRangeEndPreparedQueryViaOffset(databaseName, tableName string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, chunkSize int64, includeRangeStartValues bool, hint string) (result string, explodedArgs []interface{}, err error) {\n\tif uniqueKeyColumns.Len() == 0 {\n\t\treturn \"\", explodedArgs, fmt.Errorf(\"Got 0 columns in BuildUniqueKeyRangeEndPreparedQuery\")\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\ttableName = EscapeName(tableName)\n\n\tvar startRangeComparisonSign ValueComparisonSign = GreaterThanComparisonSign\n\tif includeRangeStartValues {\n\t\tstartRangeComparisonSign = GreaterThanOrEqualsComparisonSign\n\t}\n\trangeStartComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeStartArgs, startRangeComparisonSign)\n\tif err != nil {\n\t\treturn \"\", explodedArgs, err\n\t}\n\texplodedArgs = append(explodedArgs, rangeExplodedArgs...)\n\trangeEndComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeEndArgs, LessThanOrEqualsComparisonSign)\n\tif err != nil {\n\t\treturn \"\", explodedArgs, err\n\t}\n\texplodedArgs = append(explodedArgs, rangeExplodedArgs...)\n\n\tuniqueKeyColumnNames := duplicateNames(uniqueKeyColumns.Names())\n\tuniqueKeyColumnAscending := make([]string, len(uniqueKeyColumnNames))\n\tfor i, column := range uniqueKeyColumns.Columns() {\n\t\tuniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i])\n\t\tif column.Type == EnumColumnType {\n\t\t\tuniqueKeyColumnAscending[i] = fmt.Sprintf(\"concat(%s) asc\", uniqueKeyColumnNames[i])\n\t\t} else {\n\t\t\tuniqueKeyColumnAscending[i] = fmt.Sprintf(\"%s asc\", uniqueKeyColumnNames[i])\n\t\t}\n\t}\n\tresult = fmt.Sprintf(`\n\t\tselect /* gh-ost %s.%s %s */\n\t\t\t%s\n\t\tfrom\n\t\t\t%s.%s\n\t\twhere\n\t\t\t%s and %s\n\t\torder by\n\t\t\t%s\n\t\tlimit 1\n\t\toffset %d`,\n\t\tdatabaseName, tableName, hint,\n\t\tstrings.Join(uniqueKeyColumnNames, \", \"),\n\t\tdatabaseName, tableName,\n\t\trangeStartComparison, rangeEndComparison,\n\t\tstrings.Join(uniqueKeyColumnAscending, \", \"),\n\t\t(chunkSize - 1),\n\t)\n\treturn result, explodedArgs, nil\n}\n\nfunc BuildUniqueKeyRangeEndPreparedQueryViaTemptable(databaseName, tableName string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, chunkSize int64, includeRangeStartValues bool, hint string) (result string, explodedArgs []interface{}, err error) {\n\tif uniqueKeyColumns.Len() == 0 {\n\t\treturn \"\", explodedArgs, fmt.Errorf(\"Got 0 columns in BuildUniqueKeyRangeEndPreparedQuery\")\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\ttableName = EscapeName(tableName)\n\n\tvar startRangeComparisonSign ValueComparisonSign = GreaterThanComparisonSign\n\tif includeRangeStartValues {\n\t\tstartRangeComparisonSign = GreaterThanOrEqualsComparisonSign\n\t}\n\trangeStartComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeStartArgs, startRangeComparisonSign)\n\tif err != nil {\n\t\treturn \"\", explodedArgs, err\n\t}\n\texplodedArgs = append(explodedArgs, rangeExplodedArgs...)\n\trangeEndComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeEndArgs, LessThanOrEqualsComparisonSign)\n\tif err != nil {\n\t\treturn \"\", explodedArgs, err\n\t}\n\texplodedArgs = append(explodedArgs, rangeExplodedArgs...)\n\n\tuniqueKeyColumnNames := duplicateNames(uniqueKeyColumns.Names())\n\tuniqueKeyColumnAscending := make([]string, len(uniqueKeyColumnNames))\n\tuniqueKeyColumnDescending := make([]string, len(uniqueKeyColumnNames))\n\tfor i, column := range uniqueKeyColumns.Columns() {\n\t\tuniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i])\n\t\tif column.Type == EnumColumnType {\n\t\t\tuniqueKeyColumnAscending[i] = fmt.Sprintf(\"concat(%s) asc\", uniqueKeyColumnNames[i])\n\t\t\tuniqueKeyColumnDescending[i] = fmt.Sprintf(\"concat(%s) desc\", uniqueKeyColumnNames[i])\n\t\t} else {\n\t\t\tuniqueKeyColumnAscending[i] = fmt.Sprintf(\"%s asc\", uniqueKeyColumnNames[i])\n\t\t\tuniqueKeyColumnDescending[i] = fmt.Sprintf(\"%s desc\", uniqueKeyColumnNames[i])\n\t\t}\n\t}\n\tresult = fmt.Sprintf(`\n\t\tselect /* gh-ost %s.%s %s */ %s\n\t\tfrom (\n\t\t\tselect\n\t\t\t\t%s\n\t\t\tfrom\n\t\t\t\t%s.%s\n\t\t\twhere\n\t\t\t\t%s and %s\n\t\t\torder by\n\t\t\t\t%s\n\t\t\tlimit %d\n\t\t) select_osc_chunk\n\t\torder by\n\t\t\t%s\n\t\tlimit 1`,\n\t\tdatabaseName, tableName, hint, strings.Join(uniqueKeyColumnNames, \", \"),\n\t\tstrings.Join(uniqueKeyColumnNames, \", \"), databaseName, tableName,\n\t\trangeStartComparison, rangeEndComparison,\n\t\tstrings.Join(uniqueKeyColumnAscending, \", \"), chunkSize,\n\t\tstrings.Join(uniqueKeyColumnDescending, \", \"),\n\t)\n\treturn result, explodedArgs, nil\n}\n\nfunc BuildUniqueKeyMinValuesPreparedQuery(databaseName, tableName string, uniqueKey *UniqueKey) (string, error) {\n\treturn buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, uniqueKey, \"asc\")\n}\n\nfunc BuildUniqueKeyMaxValuesPreparedQuery(databaseName, tableName string, uniqueKey *UniqueKey) (string, error) {\n\treturn buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, uniqueKey, \"desc\")\n}\n\nfunc buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName string, uniqueKey *UniqueKey, order string) (string, error) {\n\tif uniqueKey.Columns.Len() == 0 {\n\t\treturn \"\", fmt.Errorf(\"Got 0 columns in BuildUniqueKeyMinMaxValuesPreparedQuery\")\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\ttableName = EscapeName(tableName)\n\n\tuniqueKeyColumnNames := duplicateNames(uniqueKey.Columns.Names())\n\tuniqueKeyColumnOrder := make([]string, len(uniqueKeyColumnNames))\n\tfor i, column := range uniqueKey.Columns.Columns() {\n\t\tuniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i])\n\t\tif column.Type == EnumColumnType {\n\t\t\tuniqueKeyColumnOrder[i] = fmt.Sprintf(\"concat(%s) %s\", uniqueKeyColumnNames[i], order)\n\t\t} else {\n\t\t\tuniqueKeyColumnOrder[i] = fmt.Sprintf(\"%s %s\", uniqueKeyColumnNames[i], order)\n\t\t}\n\t}\n\tquery := fmt.Sprintf(`\n\t\tselect /* gh-ost %s.%s */ %s\n\t\tfrom\n\t\t\t%s.%s\n\t\tforce index (%s)\n\t\torder by\n\t\t\t%s\n\t\tlimit 1`,\n\t\tdatabaseName, tableName, strings.Join(uniqueKeyColumnNames, \", \"),\n\t\tdatabaseName, tableName, uniqueKey.Name,\n\t\tstrings.Join(uniqueKeyColumnOrder, \", \"),\n\t)\n\treturn query, nil\n}\n\n// DMLDeleteQueryBuilder can build DELETE queries for DML events.\n// It holds the prepared query statement so it doesn't need to be recreated every time.\ntype DMLDeleteQueryBuilder struct {\n\ttableColumns, uniqueKeyColumns *ColumnList\n\tpreparedStatement              string\n}\n\n// NewDMLDeleteQueryBuilder creates a new DMLDeleteQueryBuilder.\n// It prepares the DELETE query statement.\n// Returns an error if no unique key columns are given\n// or the prepared statement cannot be built.\nfunc NewDMLDeleteQueryBuilder(databaseName, tableName string, tableColumns, uniqueKeyColumns *ColumnList) (*DMLDeleteQueryBuilder, error) {\n\tif uniqueKeyColumns.Len() == 0 {\n\t\treturn nil, fmt.Errorf(\"no unique key columns found in NewDMLDeleteQueryBuilder\")\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\ttableName = EscapeName(tableName)\n\tequalsComparison, err := BuildEqualsPreparedComparison(uniqueKeyColumns.Names())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tstmt := fmt.Sprintf(`\n\t\tdelete /* gh-ost %s.%s */\n\t\tfrom\n\t\t\t%s.%s\n\t\twhere\n\t\t\t%s`,\n\t\tdatabaseName, tableName,\n\t\tdatabaseName, tableName,\n\t\tequalsComparison,\n\t)\n\n\tb := &DMLDeleteQueryBuilder{\n\t\ttableColumns:      tableColumns,\n\t\tuniqueKeyColumns:  uniqueKeyColumns,\n\t\tpreparedStatement: stmt,\n\t}\n\treturn b, nil\n}\n\n// BuildQuery builds the arguments array for a DML event DELETE query.\n// It returns the query string and the unique key arguments array.\n// Returns an error if the number of arguments is not equal to the number of table columns.\nfunc (b *DMLDeleteQueryBuilder) BuildQuery(args []interface{}) (string, []interface{}, error) {\n\tif len(args) != b.tableColumns.Len() {\n\t\treturn \"\", nil, fmt.Errorf(\"args count differs from table column count in BuildDMLDeleteQuery\")\n\t}\n\tuniqueKeyArgs := make([]interface{}, 0, b.uniqueKeyColumns.Len())\n\tfor _, column := range b.uniqueKeyColumns.Columns() {\n\t\ttableOrdinal := b.tableColumns.Ordinals[column.Name]\n\t\targ := column.convertArg(args[tableOrdinal])\n\t\tuniqueKeyArgs = append(uniqueKeyArgs, arg)\n\t}\n\treturn b.preparedStatement, uniqueKeyArgs, nil\n}\n\n// DMLInsertQueryBuilder can build INSERT queries for DML events.\n// It holds the prepared query statement so it doesn't need to be recreated every time.\ntype DMLInsertQueryBuilder struct {\n\ttableColumns, sharedColumns *ColumnList\n\tpreparedStatement           string\n}\n\n// NewDMLInsertQueryBuilder creates a new DMLInsertQueryBuilder.\n// It prepares the INSERT query statement.\n// Returns an error if no shared columns are given, the shared columns are not a subset of the table columns,\n// or the prepared statement cannot be built.\nfunc NewDMLInsertQueryBuilder(databaseName, tableName string, tableColumns, sharedColumns, mappedSharedColumns *ColumnList) (*DMLInsertQueryBuilder, error) {\n\tif !sharedColumns.IsSubsetOf(tableColumns) {\n\t\treturn nil, fmt.Errorf(\"shared columns is not a subset of table columns in NewDMLInsertQueryBuilder\")\n\t}\n\tif sharedColumns.Len() == 0 {\n\t\treturn nil, fmt.Errorf(\"no shared columns found in NewDMLInsertQueryBuilder\")\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\ttableName = EscapeName(tableName)\n\tmappedSharedColumnNames := duplicateNames(mappedSharedColumns.Names())\n\tfor i := range mappedSharedColumnNames {\n\t\tmappedSharedColumnNames[i] = EscapeName(mappedSharedColumnNames[i])\n\t}\n\tpreparedValues := buildColumnsPreparedValues(mappedSharedColumns)\n\n\tstmt := fmt.Sprintf(`\n\t\tinsert /* gh-ost %s.%s */ ignore\n\t\tinto\n\t\t\t%s.%s\n\t\t\t(%s)\n\t\tvalues\n\t\t\t(%s)`,\n\t\tdatabaseName, tableName,\n\t\tdatabaseName, tableName,\n\t\tstrings.Join(mappedSharedColumnNames, \", \"),\n\t\tstrings.Join(preparedValues, \", \"),\n\t)\n\n\treturn &DMLInsertQueryBuilder{\n\t\ttableColumns:      tableColumns,\n\t\tsharedColumns:     sharedColumns,\n\t\tpreparedStatement: stmt,\n\t}, nil\n}\n\n// BuildQuery builds the arguments array for a DML event INSERT query.\n// It returns the query string and the shared arguments array.\n// Returns an error if the number of arguments differs from the number of table columns.\nfunc (b *DMLInsertQueryBuilder) BuildQuery(args []interface{}) (string, []interface{}, error) {\n\tif len(args) != b.tableColumns.Len() {\n\t\treturn \"\", nil, fmt.Errorf(\"args count differs from table column count in BuildDMLInsertQuery\")\n\t}\n\tsharedArgs := make([]interface{}, 0, b.sharedColumns.Len())\n\tfor _, column := range b.sharedColumns.Columns() {\n\t\ttableOrdinal := b.tableColumns.Ordinals[column.Name]\n\t\targ := column.convertArg(args[tableOrdinal])\n\t\tsharedArgs = append(sharedArgs, arg)\n\t}\n\treturn b.preparedStatement, sharedArgs, nil\n}\n\n// DMLUpdateQueryBuilder can build UPDATE queries for DML events.\n// It holds the prepared query statement so it doesn't need to be recreated every time.\ntype DMLUpdateQueryBuilder struct {\n\ttableColumns, sharedColumns, uniqueKeyColumns *ColumnList\n\tpreparedStatement                             string\n}\n\n// NewDMLUpdateQueryBuilder creates a new DMLUpdateQueryBuilder.\n// It prepares the UPDATE query statement.\n// Returns an error if no shared columns are given, the shared columns are not a subset of the table columns,\n// no unique key columns are given or the prepared statement cannot be built.\nfunc NewDMLUpdateQueryBuilder(databaseName, tableName string, tableColumns, sharedColumns, mappedSharedColumns, uniqueKeyColumns *ColumnList) (*DMLUpdateQueryBuilder, error) {\n\tif !sharedColumns.IsSubsetOf(tableColumns) {\n\t\treturn nil, fmt.Errorf(\"shared columns is not a subset of table columns in NewDMLUpdateQueryBuilder\")\n\t}\n\tif sharedColumns.Len() == 0 {\n\t\treturn nil, fmt.Errorf(\"no shared columns found in NewDMLUpdateQueryBuilder\")\n\t}\n\tif uniqueKeyColumns.Len() == 0 {\n\t\treturn nil, fmt.Errorf(\"no unique key columns found in NewDMLUpdateQueryBuilder\")\n\t}\n\t// If unique key contains virtual columns, those column won't be in sharedColumns\n\t// which only contains non-virtual columns\n\tnonVirtualUniqueKeyColumns := uniqueKeyColumns.FilterBy(func(column Column) bool { return !column.IsVirtual })\n\tif !nonVirtualUniqueKeyColumns.IsSubsetOf(sharedColumns) {\n\t\treturn nil, fmt.Errorf(\"unique key columns is not a subset of shared columns in NewDMLUpdateQueryBuilder\")\n\t}\n\tdatabaseName = EscapeName(databaseName)\n\ttableName = EscapeName(tableName)\n\tsetClause, err := BuildSetPreparedClause(mappedSharedColumns)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tequalsComparison, err := BuildEqualsPreparedComparison(uniqueKeyColumns.Names())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstmt := fmt.Sprintf(`\n\t\tupdate /* gh-ost %s.%s */\n\t\t\t%s.%s\n\t\tset\n\t\t\t%s\n\t\twhere\n\t\t\t%s`,\n\t\tdatabaseName, tableName,\n\t\tdatabaseName, tableName,\n\t\tsetClause,\n\t\tequalsComparison,\n\t)\n\treturn &DMLUpdateQueryBuilder{\n\t\ttableColumns:      tableColumns,\n\t\tsharedColumns:     sharedColumns,\n\t\tuniqueKeyColumns:  uniqueKeyColumns,\n\t\tpreparedStatement: stmt,\n\t}, nil\n}\n\n// BuildQuery builds the arguments array for a DML event UPDATE query.\n// It returns the query string, the shared arguments array, and the unique key arguments array.\nfunc (b *DMLUpdateQueryBuilder) BuildQuery(valueArgs, whereArgs []interface{}) (string, []interface{}, error) {\n\targs := make([]interface{}, 0, b.sharedColumns.Len()+b.uniqueKeyColumns.Len())\n\tfor _, column := range b.sharedColumns.Columns() {\n\t\ttableOrdinal := b.tableColumns.Ordinals[column.Name]\n\t\targ := column.convertArg(valueArgs[tableOrdinal])\n\t\targs = append(args, arg)\n\t}\n\tfor _, column := range b.uniqueKeyColumns.Columns() {\n\t\ttableOrdinal := b.tableColumns.Ordinals[column.Name]\n\t\targ := column.convertArg(whereArgs[tableOrdinal])\n\t\targs = append(args, arg)\n\t}\n\n\treturn b.preparedStatement, args, nil\n}\n"
  },
  {
    "path": "go/sql/builder_test.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage sql\n\nimport (\n\t\"testing\"\n\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nvar (\n\tspacesRegexp = regexp.MustCompile(`[ \\t\\n\\r]+`)\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc normalizeQuery(name string) string {\n\tname = strings.Replace(name, \"`\", \"\", -1)\n\tname = spacesRegexp.ReplaceAllString(name, \" \")\n\tname = strings.TrimSpace(name)\n\treturn name\n}\n\nfunc TestEscapeName(t *testing.T) {\n\tnames := []string{\"my_table\", `\"my_table\"`, \"`my_table`\"}\n\tfor _, name := range names {\n\t\tescaped := EscapeName(name)\n\t\trequire.Equal(t, \"`my_table`\", escaped)\n\t}\n}\n\nfunc TestBuildEqualsComparison(t *testing.T) {\n\t{\n\t\tcolumns := []string{\"c1\"}\n\t\tvalues := []string{\"@v1\"}\n\t\tcomparison, err := BuildEqualsComparison(columns, values)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` = @v1))\", comparison)\n\t}\n\t{\n\t\tcolumns := []string{\"c1\", \"c2\"}\n\t\tvalues := []string{\"@v1\", \"@v2\"}\n\t\tcomparison, err := BuildEqualsComparison(columns, values)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` = @v1) and (`c2` = @v2))\", comparison)\n\t}\n\t{\n\t\tcolumns := []string{\"c1\"}\n\t\tvalues := []string{\"@v1\", \"@v2\"}\n\t\t_, err := BuildEqualsComparison(columns, values)\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\tcolumns := []string{}\n\t\tvalues := []string{}\n\t\t_, err := BuildEqualsComparison(columns, values)\n\t\trequire.Error(t, err)\n\t}\n}\n\nfunc TestBuildEqualsPreparedComparison(t *testing.T) {\n\t{\n\t\tcolumns := []string{\"c1\", \"c2\"}\n\t\tcomparison, err := BuildEqualsPreparedComparison(columns)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` = ?) and (`c2` = ?))\", comparison)\n\t}\n}\n\nfunc TestBuildSetPreparedClause(t *testing.T) {\n\t{\n\t\tcolumns := NewColumnList([]string{\"c1\"})\n\t\tclause, err := BuildSetPreparedClause(columns)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"`c1`=?\", clause)\n\t}\n\t{\n\t\tcolumns := NewColumnList([]string{\"c1\", \"c2\"})\n\t\tclause, err := BuildSetPreparedClause(columns)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"`c1`=?, `c2`=?\", clause)\n\t}\n\t{\n\t\tcolumns := NewColumnList([]string{})\n\t\t_, err := BuildSetPreparedClause(columns)\n\t\trequire.Error(t, err)\n\t}\n}\n\nfunc TestBuildRangeComparison(t *testing.T) {\n\t{\n\t\tcolumns := []string{\"c1\"}\n\t\tvalues := []string{\"@v1\"}\n\t\targs := []interface{}{3}\n\t\tcomparison, explodedArgs, err := BuildRangeComparison(columns, values, args, LessThanComparisonSign)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` < @v1))\", comparison)\n\t\trequire.Equal(t, []interface{}{3}, explodedArgs)\n\t}\n\t{\n\t\tcolumns := []string{\"c1\"}\n\t\tvalues := []string{\"@v1\"}\n\t\targs := []interface{}{3}\n\t\tcomparison, explodedArgs, err := BuildRangeComparison(columns, values, args, LessThanOrEqualsComparisonSign)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` < @v1) or ((`c1` = @v1)))\", comparison)\n\t\trequire.Equal(t, []interface{}{3, 3}, explodedArgs)\n\t}\n\t{\n\t\tcolumns := []string{\"c1\", \"c2\"}\n\t\tvalues := []string{\"@v1\", \"@v2\"}\n\t\targs := []interface{}{3, 17}\n\t\tcomparison, explodedArgs, err := BuildRangeComparison(columns, values, args, LessThanComparisonSign)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` < @v1) or (((`c1` = @v1)) AND (`c2` < @v2)))\", comparison)\n\t\trequire.Equal(t, []interface{}{3, 3, 17}, explodedArgs)\n\t}\n\t{\n\t\tcolumns := []string{\"c1\", \"c2\"}\n\t\tvalues := []string{\"@v1\", \"@v2\"}\n\t\targs := []interface{}{3, 17}\n\t\tcomparison, explodedArgs, err := BuildRangeComparison(columns, values, args, LessThanOrEqualsComparisonSign)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` < @v1) or (((`c1` = @v1)) AND (`c2` < @v2)) or ((`c1` = @v1) and (`c2` = @v2)))\", comparison)\n\t\trequire.Equal(t, []interface{}{3, 3, 17, 3, 17}, explodedArgs)\n\t}\n\t{\n\t\tcolumns := []string{\"c1\", \"c2\", \"c3\"}\n\t\tvalues := []string{\"@v1\", \"@v2\", \"@v3\"}\n\t\targs := []interface{}{3, 17, 22}\n\t\tcomparison, explodedArgs, err := BuildRangeComparison(columns, values, args, LessThanOrEqualsComparisonSign)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"((`c1` < @v1) or (((`c1` = @v1)) AND (`c2` < @v2)) or (((`c1` = @v1) and (`c2` = @v2)) AND (`c3` < @v3)) or ((`c1` = @v1) and (`c2` = @v2) and (`c3` = @v3)))\", comparison)\n\t\trequire.Equal(t, []interface{}{3, 3, 17, 3, 17, 22, 3, 17, 22}, explodedArgs)\n\t}\n\t{\n\t\tcolumns := []string{\"c1\"}\n\t\tvalues := []string{\"@v1\", \"@v2\"}\n\t\targs := []interface{}{3, 17}\n\t\t_, _, err := BuildRangeComparison(columns, values, args, LessThanOrEqualsComparisonSign)\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\tcolumns := []string{}\n\t\tvalues := []string{}\n\t\targs := []interface{}{}\n\t\t_, _, err := BuildRangeComparison(columns, values, args, LessThanOrEqualsComparisonSign)\n\t\trequire.Error(t, err)\n\t}\n}\n\nfunc TestBuildRangeInsertQuery(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\toriginalTableName := \"tbl\"\n\tghostTableName := \"ghost\"\n\tsharedColumns := []string{\"id\", \"name\", \"position\"}\n\t{\n\t\tuniqueKey := \"PRIMARY\"\n\t\tuniqueKeyColumns := NewColumnList([]string{\"id\"})\n\t\trangeStartValues := []string{\"@v1s\"}\n\t\trangeEndValues := []string{\"@v1e\"}\n\t\trangeStartArgs := []interface{}{3}\n\t\trangeEndArgs := []interface{}{103}\n\n\t\tquery, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true, true)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\tinto\n\t\t\t\tmydb.ghost\n\t\t\t\t(id, name, position)\n\t\t\t(\n\t\t\t\tselect id, name, position\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\tforce index (PRIMARY)\n\t\t\t\twhere\n\t\t\t\t\t(((id > @v1s) or ((id = @v1s)))\n\t\t\t\t\tand ((id < @v1e) or ((id = @v1e))))\n\t\t\t\tfor share nowait\n\t\t\t)`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, 3, 103, 103}, explodedArgs)\n\t}\n\t{\n\t\tuniqueKey := \"name_position_uidx\"\n\t\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\"})\n\t\trangeStartValues := []string{\"@v1s\", \"@v2s\"}\n\t\trangeEndValues := []string{\"@v1e\", \"@v2e\"}\n\t\trangeStartArgs := []interface{}{3, 17}\n\t\trangeEndArgs := []interface{}{103, 117}\n\n\t\tquery, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true, true)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\tinto\n\t\t\t\tmydb.ghost\n\t\t\t\t(id, name, position)\n\t\t\t(\n\t\t\t\tselect id, name, position\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\tforce index (name_position_uidx)\n\t\t\t\twhere\n\t\t\t\t\t(((name > @v1s) or (((name = @v1s))\n\t\t\t\t\tAND (position > @v2s))\n\t\t\t\t\tor ((name = @v1s)\n\t\t\t\t\tand (position = @v2s)))\n\t\t\t\t\tand ((name < @v1e)\n\t\t\t\t\tor (((name = @v1e))\n\t\t\t\t\tAND (position < @v2e))\n\t\t\t\t\tor ((name = @v1e) and (position = @v2e))))\n\t\t\t\tfor share nowait\n\t\t\t)`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, 3, 17, 3, 17, 103, 103, 117, 103, 117}, explodedArgs)\n\t}\n}\n\nfunc TestBuildRangeInsertQueryRenameMap(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\toriginalTableName := \"tbl\"\n\tghostTableName := \"ghost\"\n\tsharedColumns := []string{\"id\", \"name\", \"position\"}\n\tmappedSharedColumns := []string{\"id\", \"name\", \"location\"}\n\t{\n\t\tuniqueKey := \"PRIMARY\"\n\t\tuniqueKeyColumns := NewColumnList([]string{\"id\"})\n\t\trangeStartValues := []string{\"@v1s\"}\n\t\trangeEndValues := []string{\"@v1e\"}\n\t\trangeStartArgs := []interface{}{3}\n\t\trangeEndArgs := []interface{}{103}\n\n\t\tquery, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true, true)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\tinto\n\t\t\t\tmydb.ghost\n\t\t\t\t(id, name, location)\n\t\t\t(\n\t\t\t\tselect id, name, position\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\tforce index (PRIMARY)\n\t\t\t\twhere\n\t\t\t\t\t(((id > @v1s) or ((id = @v1s)))\n\t\t\t\t\tand\n\t\t\t\t\t((id < @v1e) or ((id = @v1e))))\n\t\t\t\tfor share nowait\n\t\t\t)`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, 3, 103, 103}, explodedArgs)\n\t}\n\t{\n\t\tuniqueKey := \"name_position_uidx\"\n\t\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\"})\n\t\trangeStartValues := []string{\"@v1s\", \"@v2s\"}\n\t\trangeEndValues := []string{\"@v1e\", \"@v2e\"}\n\t\trangeStartArgs := []interface{}{3, 17}\n\t\trangeEndArgs := []interface{}{103, 117}\n\n\t\tquery, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true, true)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\tinto\n\t\t\t\tmydb.ghost\n\t\t\t\t(id, name, location)\n\t\t\t(\n\t\t\t\tselect id, name, position\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\tforce index (name_position_uidx)\n\t\t\t\twhere\n\t\t\t\t\t(((name > @v1s) or (((name = @v1s))\n\t\t\t\t\tAND (position > @v2s)) or ((name = @v1s) and (position = @v2s)))\n\t\t\t\t\tand ((name < @v1e) or (((name = @v1e)) AND (position < @v2e))\n\t\t\t\t\tor ((name = @v1e) and (position = @v2e))))\n\t\t\t\tfor share nowait\n\t\t\t)`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, 3, 17, 3, 17, 103, 103, 117, 103, 117}, explodedArgs)\n\t}\n}\n\nfunc TestBuildRangeInsertPreparedQuery(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\toriginalTableName := \"tbl\"\n\tghostTableName := \"ghost\"\n\tsharedColumns := []string{\"id\", \"name\", \"position\"}\n\t{\n\t\tuniqueKey := \"name_position_uidx\"\n\t\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\"})\n\t\trangeStartArgs := []interface{}{3, 17}\n\t\trangeEndArgs := []interface{}{103, 117}\n\n\t\tquery, explodedArgs, err := BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, true, true, true)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\tinto\n\t\t\t\tmydb.ghost\n\t\t\t\t(id, name, position)\n\t\t\t(\n\t\t\t\tselect id, name, position\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\tforce index (name_position_uidx)\n\t\t\t\twhere (((name > ?) or (((name = ?)) AND (position > ?)) or ((name = ?) and (position = ?))) and ((name < ?) or (((name = ?)) AND (position < ?)) or ((name = ?) and (position = ?))))\n\t\t\t\tfor share nowait\n\t\t\t)`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, 3, 17, 3, 17, 103, 103, 117, 103, 117}, explodedArgs)\n\t}\n}\n\nfunc TestBuildUniqueKeyRangeEndPreparedQueryViaOffset(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\toriginalTableName := \"tbl\"\n\tvar chunkSize int64 = 500\n\t{\n\t\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\"})\n\t\trangeStartArgs := []interface{}{3, 17}\n\t\trangeEndArgs := []interface{}{103, 117}\n\n\t\tquery, explodedArgs, err := BuildUniqueKeyRangeEndPreparedQueryViaOffset(databaseName, originalTableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, false, \"test\")\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tselect /* gh-ost mydb.tbl test */\n\t\t\t\tname, position\n\t\t\tfrom\n\t\t\t\tmydb.tbl\n\t\t\twhere\n\t\t\t\t((name > ?) or (((name = ?)) AND (position > ?))) and ((name < ?) or (((name = ?)) AND (position < ?)) or ((name = ?) and (position = ?)))\n\t\t\torder by\n\t\t\t\tname asc, position asc\n\t\t\tlimit 1\n\t\t\toffset 499`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, 3, 17, 103, 103, 117, 103, 117}, explodedArgs)\n\t}\n}\n\nfunc TestBuildUniqueKeyRangeEndPreparedQueryViaTemptable(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\toriginalTableName := \"tbl\"\n\tvar chunkSize int64 = 500\n\t{\n\t\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\"})\n\t\trangeStartArgs := []interface{}{3, 17}\n\t\trangeEndArgs := []interface{}{103, 117}\n\n\t\tquery, explodedArgs, err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable(databaseName, originalTableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, false, \"test\")\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tselect /* gh-ost mydb.tbl test */\n\t\t\t\tname, position\n\t\t\tfrom (\n\t\t\t\tselect\n\t\t\t\t\tname, position\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\twhere ((name > ?) or (((name = ?)) AND (position > ?))) and ((name < ?) or (((name = ?)) AND (position < ?)) or ((name = ?) and (position = ?)))\n\t\t\t\torder by\n\t\t\t\t\tname asc, position asc\n\t\t\t\tlimit 500\n\t\t\t) select_osc_chunk\n\t\t\torder by\n\t\t\t\tname desc, position desc\n\t\t\tlimit 1`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, 3, 17, 103, 103, 117, 103, 117}, explodedArgs)\n\t}\n}\n\nfunc TestBuildUniqueKeyMinValuesPreparedQuery(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\toriginalTableName := \"tbl\"\n\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\"})\n\tuniqueKey := &UniqueKey{Name: \"PRIMARY\", Columns: *uniqueKeyColumns}\n\t{\n\t\tquery, err := BuildUniqueKeyMinValuesPreparedQuery(databaseName, originalTableName, uniqueKey)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tselect /* gh-ost mydb.tbl */ name, position\n\t\t\t  from\n\t\t\t    mydb.tbl\n\t\t\t  force index (PRIMARY)\n\t\t\t  order by\n\t\t\t    name asc, position asc\n\t\t\t  limit 1\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t}\n\t{\n\t\tquery, err := BuildUniqueKeyMaxValuesPreparedQuery(databaseName, originalTableName, uniqueKey)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tselect /* gh-ost mydb.tbl */ name, position\n\t\t\t  from\n\t\t\t    mydb.tbl\n\t\t\t  force index (PRIMARY)\n\t\t\t  order by\n\t\t\t    name desc, position desc\n\t\t\t  limit 1\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t}\n}\n\nfunc TestBuildDMLDeleteQuery(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\ttableName := \"tbl\"\n\ttableColumns := NewColumnList([]string{\"id\", \"name\", \"rank\", \"position\", \"age\"})\n\targs := []interface{}{3, \"testname\", \"first\", 17, 23}\n\t{\n\t\tuniqueKeyColumns := NewColumnList([]string{\"position\"})\n\t\tbuilder, err := NewDMLDeleteQueryBuilder(databaseName, tableName, tableColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\n\t\tquery, uniqueKeyArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tdelete /* gh-ost mydb.tbl */\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\twhere\n\t\t\t\t\t((position = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{17}, uniqueKeyArgs)\n\t}\n\t{\n\t\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\"})\n\t\tbuilder, err := NewDMLDeleteQueryBuilder(databaseName, tableName, tableColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\n\t\tquery, uniqueKeyArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tdelete /* gh-ost mydb.tbl */\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\twhere\n\t\t\t\t\t((name = ?) and (position = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{\"testname\", 17}, uniqueKeyArgs)\n\t}\n\t{\n\t\tuniqueKeyColumns := NewColumnList([]string{\"position\", \"name\"})\n\t\tbuilder, err := NewDMLDeleteQueryBuilder(databaseName, tableName, tableColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\n\t\tquery, uniqueKeyArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tdelete /* gh-ost mydb.tbl */\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\twhere\n\t\t\t\t\t((position = ?) and (name = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{17, \"testname\"}, uniqueKeyArgs)\n\t}\n\t{\n\t\tuniqueKeyColumns := NewColumnList([]string{\"position\", \"name\"})\n\t\targs := []interface{}{\"first\", 17}\n\t\tbuilder, err := NewDMLDeleteQueryBuilder(databaseName, tableName, tableColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\n\t\t_, _, err = builder.BuildQuery(args)\n\t\trequire.Error(t, err)\n\t}\n}\n\nfunc TestBuildDMLDeleteQuerySignedUnsigned(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\ttableName := \"tbl\"\n\ttableColumns := NewColumnList([]string{\"id\", \"name\", \"rank\", \"position\", \"age\"})\n\tuniqueKeyColumns := NewColumnList([]string{\"position\"})\n\tbuilder, err := NewDMLDeleteQueryBuilder(databaseName, tableName, tableColumns, uniqueKeyColumns)\n\trequire.NoError(t, err)\n\t{\n\t\t// test signed (expect no change)\n\t\targs := []interface{}{3, \"testname\", \"first\", -1, 23}\n\t\tquery, uniqueKeyArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tdelete /* gh-ost mydb.tbl */\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\twhere\n\t\t\t\t\t((position = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{-1}, uniqueKeyArgs)\n\t}\n\t{\n\t\t// test unsigned\n\t\targs := []interface{}{3, \"testname\", \"first\", int8(-1), 23}\n\t\tuniqueKeyColumns.SetUnsigned(\"position\")\n\t\tquery, uniqueKeyArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tdelete /* gh-ost mydb.tbl */\n\t\t\t\tfrom\n\t\t\t\t\tmydb.tbl\n\t\t\t\twhere\n\t\t\t\t\t((position = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{uint8(255)}, uniqueKeyArgs)\n\t}\n}\n\nfunc TestBuildDMLInsertQuery(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\ttableName := \"tbl\"\n\ttableColumns := NewColumnList([]string{\"id\", \"name\", \"rank\", \"position\", \"age\"})\n\targs := []interface{}{3, \"testname\", \"first\", 17, 23}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tbuilder, err := NewDMLInsertQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, sharedArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\t\tinto mydb.tbl\n\t\t\t\t\t(id, name, position, age)\n\t\t\t\tvalues\n\t\t\t\t\t(?, ?, ?, ?)\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", 17, 23}, sharedArgs)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"position\", \"name\", \"age\", \"id\"})\n\t\tbuilder, err := NewDMLInsertQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, sharedArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\t\tinto mydb.tbl\n\t\t\t\t\t(position, name, age, id)\n\t\t\t\tvalues\n\t\t\t\t\t(?, ?, ?, ?)\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{17, \"testname\", 23, 3}, sharedArgs)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"position\", \"name\", \"surprise\", \"id\"})\n\t\t_, err := NewDMLInsertQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns)\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{})\n\t\t_, err := NewDMLInsertQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns)\n\t\trequire.Error(t, err)\n\t}\n}\n\nfunc TestBuildDMLInsertQuerySignedUnsigned(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\ttableName := \"tbl\"\n\ttableColumns := NewColumnList([]string{\"id\", \"name\", \"rank\", \"position\", \"age\"})\n\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t{\n\t\t// testing signed\n\t\targs := []interface{}{3, \"testname\", \"first\", int8(-1), 23}\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tbuilder, err := NewDMLInsertQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, sharedArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\t\tinto mydb.tbl\n\t\t\t\t\t(id, name, position, age)\n\t\t\t\tvalues\n\t\t\t\t\t(?, ?, ?, ?)\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", int8(-1), 23}, sharedArgs)\n\t}\n\t{\n\t\t// testing unsigned\n\t\targs := []interface{}{3, \"testname\", \"first\", int8(-1), 23}\n\t\tsharedColumns.SetUnsigned(\"position\")\n\t\tbuilder, err := NewDMLInsertQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, sharedArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\t\tinto mydb.tbl\n\t\t\t\t\t(id, name, position, age)\n\t\t\t\tvalues\n\t\t\t\t\t(?, ?, ?, ?)\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", uint8(255), 23}, sharedArgs)\n\t}\n\t{\n\t\t// testing unsigned\n\t\targs := []interface{}{3, \"testname\", \"first\", int32(-1), 23}\n\t\tsharedColumns.SetUnsigned(\"position\")\n\t\tbuilder, err := NewDMLInsertQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, sharedArgs, err := builder.BuildQuery(args)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tinsert /* gh-ost mydb.tbl */ ignore\n\t\t\t\tinto mydb.tbl\n\t\t\t\t\t(id, name, position, age)\n\t\t\t\tvalues\n\t\t\t\t\t(?, ?, ?, ?)\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", uint32(4294967295), 23}, sharedArgs)\n\t}\n}\n\nfunc TestBuildDMLUpdateQuery(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\ttableName := \"tbl\"\n\ttableColumns := NewColumnList([]string{\"id\", \"name\", \"rank\", \"position\", \"age\"})\n\tvalueArgs := []interface{}{3, \"testname\", \"newval\", 17, 23}\n\twhereArgs := []interface{}{3, \"testname\", \"findme\", 17, 56}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tuniqueKeyColumns := NewColumnList([]string{\"position\"})\n\t\tbuilder, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, updateArgs, err := builder.BuildQuery(valueArgs, whereArgs)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tupdate /* gh-ost mydb.tbl */\n\t\t\t  mydb.tbl\n\t\t\t\t\tset id=?, name=?, position=?, age=?\n\t\t\t\twhere\n\t\t\t\t\t((position = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", 17, 23, 17}, updateArgs)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tuniqueKeyColumns := NewColumnList([]string{\"position\", \"name\"})\n\t\tbuilder, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, updateArgs, err := builder.BuildQuery(valueArgs, whereArgs)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tupdate /* gh-ost mydb.tbl */\n\t\t\t  mydb.tbl\n\t\t\t\t\tset id=?, name=?, position=?, age=?\n\t\t\t\twhere\n\t\t\t\t\t((position = ?) and (name = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", 17, 23, 17, \"testname\"}, updateArgs)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tuniqueKeyColumns := NewColumnList([]string{\"age\"})\n\t\tbuilder, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, updateArgs, err := builder.BuildQuery(valueArgs, whereArgs)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tupdate /* gh-ost mydb.tbl */\n\t\t\t  mydb.tbl\n\t\t\t\t\tset id=?, name=?, position=?, age=?\n\t\t\t\twhere\n\t\t\t\t\t((age = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", 17, 23, 56}, updateArgs)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tuniqueKeyColumns := NewColumnList([]string{\"age\", \"position\", \"id\", \"name\"})\n\t\tbuilder, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, updateArgs, err := builder.BuildQuery(valueArgs, whereArgs)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tupdate /* gh-ost mydb.tbl */\n\t\t\t  mydb.tbl\n\t\t\t\t\tset id=?, name=?, position=?, age=?\n\t\t\t\twhere\n\t\t\t\t\t((age = ?) and (position = ?) and (id = ?) and (name = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", 17, 23, 56, 17, 3, \"testname\"}, updateArgs)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tuniqueKeyColumns := NewColumnList([]string{\"age\", \"surprise\"})\n\t\t_, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, uniqueKeyColumns)\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tuniqueKeyColumns := NewColumnList([]string{})\n\t\t_, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, uniqueKeyColumns)\n\t\trequire.Error(t, err)\n\t}\n\t{\n\t\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\t\tmappedColumns := NewColumnList([]string{\"id\", \"name\", \"role\", \"age\"})\n\t\tuniqueKeyColumns := NewColumnList([]string{\"id\"})\n\t\tbuilder, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, mappedColumns, uniqueKeyColumns)\n\t\trequire.NoError(t, err)\n\t\tquery, updateArgs, err := builder.BuildQuery(valueArgs, whereArgs)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tupdate /* gh-ost mydb.tbl */\n\t\t\t  mydb.tbl\n\t\t\t\t\tset id=?, name=?, role=?, age=?\n\t\t\t\twhere\n\t\t\t\t\t((id = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", 17, 23, 3}, updateArgs)\n\t}\n}\n\nfunc TestBuildDMLUpdateQuerySignedUnsigned(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\ttableName := \"tbl\"\n\ttableColumns := NewColumnList([]string{\"id\", \"name\", \"rank\", \"position\", \"age\"})\n\tvalueArgs := []interface{}{3, \"testname\", \"newval\", int8(-17), int8(-2)}\n\twhereArgs := []interface{}{3, \"testname\", \"findme\", int8(-3), 56}\n\tsharedColumns := NewColumnList([]string{\"id\", \"name\", \"position\", \"age\"})\n\tuniqueKeyColumns := NewColumnList([]string{\"position\"})\n\tbuilder, err := NewDMLUpdateQueryBuilder(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, uniqueKeyColumns)\n\trequire.NoError(t, err)\n\t{\n\t\t// test signed\n\t\tquery, updateArgs, err := builder.BuildQuery(valueArgs, whereArgs)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tupdate /* gh-ost mydb.tbl */\n\t\t\t  mydb.tbl\n\t\t\t\t\tset id=?, name=?, position=?, age=?\n\t\t\t\twhere\n\t\t\t\t\t((position = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", int8(-17), int8(-2), int8(-3)}, updateArgs)\n\t}\n\t{\n\t\t// test unsigned\n\t\tsharedColumns.SetUnsigned(\"age\")\n\t\tuniqueKeyColumns.SetUnsigned(\"position\")\n\t\tquery, updateArgs, err := builder.BuildQuery(valueArgs, whereArgs)\n\t\trequire.NoError(t, err)\n\t\texpected := `\n\t\t\tupdate /* gh-ost mydb.tbl */\n\t\t\t  mydb.tbl\n\t\t\t\t\tset id=?, name=?, position=?, age=?\n\t\t\t\twhere\n\t\t\t\t\t((position = ?))\n\t\t`\n\t\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\t\trequire.Equal(t, []interface{}{3, \"testname\", int8(-17), uint8(254), uint8(253)}, updateArgs)\n\t}\n}\n\nfunc TestCheckpointQueryBuilder(t *testing.T) {\n\tdatabaseName := \"mydb\"\n\ttableName := \"_tbl_ghk\"\n\tvalueArgs := []interface{}{\"mona\", \"mascot\", int8(-17), \"anothername\", \"anotherposition\", int8(-2)}\n\tuniqueKeyColumns := NewColumnList([]string{\"name\", \"position\", \"my_very_long_column_that_is_64_utf8_characters_long_很长很长很长很长很长很长\"})\n\tbuilder, err := NewCheckpointQueryBuilder(databaseName, tableName, uniqueKeyColumns)\n\trequire.NoError(t, err)\n\tquery, uniqueKeyArgs, err := builder.BuildQuery(valueArgs)\n\trequire.NoError(t, err)\n\texpected := `\n\t\tinsert /* gh-ost */ into mydb._tbl_ghk\n\t\t(gh_ost_chk_timestamp, gh_ost_chk_coords, gh_ost_chk_iteration,\n\t\t gh_ost_rows_copied, gh_ost_dml_applied, gh_ost_is_cutover,\n\t\t name_min, position_min, my_very_long_column_that_is_64_utf8_characters_long_很长很长很长很长_min,\n\t\t name_max, position_max, my_very_long_column_that_is_64_utf8_characters_long_很长很长很长很长_max)\n\t\tvalues\n\t\t(unix_timestamp(now()), ?, ?,\n\t\t\t ?, ?, ?,\n\t\t\t ?, ?, ?,\n\t\t\t ?, ?, ?)\n    `\n\trequire.Equal(t, normalizeQuery(expected), normalizeQuery(query))\n\trequire.Equal(t, []interface{}{\"mona\", \"mascot\", int8(-17), \"anothername\", \"anotherposition\", int8(-2)}, uniqueKeyArgs)\n}\n"
  },
  {
    "path": "go/sql/encoding.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage sql\n\nimport (\n\t\"golang.org/x/text/encoding\"\n\t\"golang.org/x/text/encoding/charmap\"\n\t\"golang.org/x/text/encoding/simplifiedchinese\"\n)\n\ntype charsetEncoding map[string]encoding.Encoding\n\nvar charsetEncodingMap charsetEncoding\n\nfunc init() {\n\tcharsetEncodingMap = make(map[string]encoding.Encoding)\n\t// Begin mappings\n\tcharsetEncodingMap[\"latin1\"] = charmap.Windows1252\n\tcharsetEncodingMap[\"gbk\"] = simplifiedchinese.GBK\n}\n"
  },
  {
    "path": "go/sql/parser.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage sql\n\nimport (\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar (\n\tsanitizeQuotesRegexp                 = regexp.MustCompile(\"('[^']*')\")\n\trenameColumnRegexp                   = regexp.MustCompile(`(?i)\\bchange\\s+(column\\s+|)([\\S]+)\\s+([\\S]+)\\s+`)\n\tdropColumnRegexp                     = regexp.MustCompile(`(?i)\\bdrop\\s+(column\\s+|)([\\S]+)$`)\n\trenameTableRegexp                    = regexp.MustCompile(`(?i)\\brename\\s+(to|as)\\s+`)\n\tautoIncrementRegexp                  = regexp.MustCompile(`(?i)\\bauto_increment[\\s]*=[\\s]*([0-9]+)`)\n\talterTableExplicitSchemaTableRegexps = []*regexp.Regexp{\n\t\t// ALTER TABLE `scm`.`tbl` something\n\t\tregexp.MustCompile(`(?i)\\balter\\s+table\\s+` + \"`\" + `([^` + \"`\" + `]+)` + \"`\" + `[.]` + \"`\" + `([^` + \"`\" + `]+)` + \"`\" + `\\s+(.*$)`),\n\t\t// ALTER TABLE `scm`.tbl something\n\t\tregexp.MustCompile(`(?i)\\balter\\s+table\\s+` + \"`\" + `([^` + \"`\" + `]+)` + \"`\" + `[.]([\\S]+)\\s+(.*$)`),\n\t\t// ALTER TABLE scm.`tbl` something\n\t\tregexp.MustCompile(`(?i)\\balter\\s+table\\s+([\\S]+)[.]` + \"`\" + `([^` + \"`\" + `]+)` + \"`\" + `\\s+(.*$)`),\n\t\t// ALTER TABLE scm.tbl something\n\t\tregexp.MustCompile(`(?i)\\balter\\s+table\\s+([\\S]+)[.]([\\S]+)\\s+(.*$)`),\n\t}\n\talterTableExplicitTableRegexps = []*regexp.Regexp{\n\t\t// ALTER TABLE `tbl` something\n\t\tregexp.MustCompile(`(?i)\\balter\\s+table\\s+` + \"`\" + `([^` + \"`\" + `]+)` + \"`\" + `\\s+(.*$)`),\n\t\t// ALTER TABLE tbl something\n\t\tregexp.MustCompile(`(?i)\\balter\\s+table\\s+([\\S]+)\\s+(.*$)`),\n\t}\n\tenumValuesRegexp = regexp.MustCompile(\"^enum[(](.*)[)]$\")\n)\n\ntype AlterTableParser struct {\n\tcolumnRenameMap        map[string]string\n\tdroppedColumns         map[string]bool\n\tisRenameTable          bool\n\tisAutoIncrementDefined bool\n\n\talterStatementOptions string\n\talterTokens           []string\n\n\texplicitSchema string\n\texplicitTable  string\n}\n\nfunc NewAlterTableParser() *AlterTableParser {\n\treturn &AlterTableParser{\n\t\tcolumnRenameMap: make(map[string]string),\n\t\tdroppedColumns:  make(map[string]bool),\n\t}\n}\n\nfunc NewParserFromAlterStatement(alterStatement string) *AlterTableParser {\n\tparser := NewAlterTableParser()\n\tparser.ParseAlterStatement(alterStatement)\n\treturn parser\n}\n\nfunc (this *AlterTableParser) tokenizeAlterStatement(alterStatement string) (tokens []string) {\n\tterminatingQuote := rune(0)\n\tf := func(c rune) bool {\n\t\tswitch {\n\t\tcase c == terminatingQuote:\n\t\t\tterminatingQuote = rune(0)\n\t\t\treturn false\n\t\tcase terminatingQuote != rune(0):\n\t\t\treturn false\n\t\tcase c == '\\'':\n\t\t\tterminatingQuote = c\n\t\t\treturn false\n\t\tcase c == '(':\n\t\t\tterminatingQuote = ')'\n\t\t\treturn false\n\t\tdefault:\n\t\t\treturn c == ','\n\t\t}\n\t}\n\n\ttokens = strings.FieldsFunc(alterStatement, f)\n\tfor i := range tokens {\n\t\ttokens[i] = strings.TrimSpace(tokens[i])\n\t}\n\treturn tokens\n}\n\nfunc (this *AlterTableParser) sanitizeQuotesFromAlterStatement(alterStatement string) (strippedStatement string) {\n\tstrippedStatement = alterStatement\n\tstrippedStatement = sanitizeQuotesRegexp.ReplaceAllString(strippedStatement, \"''\")\n\treturn strippedStatement\n}\n\nfunc (this *AlterTableParser) parseAlterToken(alterToken string) {\n\t{\n\t\t// rename\n\t\tallStringSubmatch := renameColumnRegexp.FindAllStringSubmatch(alterToken, -1)\n\t\tfor _, submatch := range allStringSubmatch {\n\t\t\tif unquoted, err := strconv.Unquote(submatch[2]); err == nil {\n\t\t\t\tsubmatch[2] = unquoted\n\t\t\t}\n\t\t\tif unquoted, err := strconv.Unquote(submatch[3]); err == nil {\n\t\t\t\tsubmatch[3] = unquoted\n\t\t\t}\n\t\t\tthis.columnRenameMap[submatch[2]] = submatch[3]\n\t\t}\n\t}\n\t{\n\t\t// drop\n\t\tallStringSubmatch := dropColumnRegexp.FindAllStringSubmatch(alterToken, -1)\n\t\tfor _, submatch := range allStringSubmatch {\n\t\t\tif unquoted, err := strconv.Unquote(submatch[2]); err == nil {\n\t\t\t\tsubmatch[2] = unquoted\n\t\t\t}\n\t\t\tthis.droppedColumns[submatch[2]] = true\n\t\t}\n\t}\n\t{\n\t\t// rename table\n\t\tif renameTableRegexp.MatchString(alterToken) {\n\t\t\tthis.isRenameTable = true\n\t\t}\n\t}\n\t{\n\t\t// auto_increment\n\t\tif autoIncrementRegexp.MatchString(alterToken) {\n\t\t\tthis.isAutoIncrementDefined = true\n\t\t}\n\t}\n}\n\nfunc (this *AlterTableParser) ParseAlterStatement(alterStatement string) (err error) {\n\tthis.alterStatementOptions = alterStatement\n\tfor _, alterTableRegexp := range alterTableExplicitSchemaTableRegexps {\n\t\tif submatch := alterTableRegexp.FindStringSubmatch(this.alterStatementOptions); len(submatch) > 0 {\n\t\t\tthis.explicitSchema = submatch[1]\n\t\t\tthis.explicitTable = submatch[2]\n\t\t\tthis.alterStatementOptions = submatch[3]\n\t\t\tbreak\n\t\t}\n\t}\n\tfor _, alterTableRegexp := range alterTableExplicitTableRegexps {\n\t\tif submatch := alterTableRegexp.FindStringSubmatch(this.alterStatementOptions); len(submatch) > 0 {\n\t\t\tthis.explicitTable = submatch[1]\n\t\t\tthis.alterStatementOptions = submatch[2]\n\t\t\tbreak\n\t\t}\n\t}\n\tfor _, alterToken := range this.tokenizeAlterStatement(this.alterStatementOptions) {\n\t\talterToken = this.sanitizeQuotesFromAlterStatement(alterToken)\n\t\tthis.parseAlterToken(alterToken)\n\t\tthis.alterTokens = append(this.alterTokens, alterToken)\n\t}\n\treturn nil\n}\n\nfunc (this *AlterTableParser) GetNonTrivialRenames() map[string]string {\n\tresult := make(map[string]string)\n\tfor column, renamed := range this.columnRenameMap {\n\t\tif column != renamed {\n\t\t\tresult[column] = renamed\n\t\t}\n\t}\n\treturn result\n}\n\nfunc (this *AlterTableParser) HasNonTrivialRenames() bool {\n\treturn len(this.GetNonTrivialRenames()) > 0\n}\n\nfunc (this *AlterTableParser) DroppedColumnsMap() map[string]bool {\n\treturn this.droppedColumns\n}\n\nfunc (this *AlterTableParser) IsRenameTable() bool {\n\treturn this.isRenameTable\n}\n\nfunc (this *AlterTableParser) IsAutoIncrementDefined() bool {\n\treturn this.isAutoIncrementDefined\n}\n\nfunc (this *AlterTableParser) GetExplicitSchema() string {\n\treturn this.explicitSchema\n}\n\nfunc (this *AlterTableParser) HasExplicitSchema() bool {\n\treturn this.GetExplicitSchema() != \"\"\n}\n\nfunc (this *AlterTableParser) GetExplicitTable() string {\n\treturn this.explicitTable\n}\n\nfunc (this *AlterTableParser) HasExplicitTable() bool {\n\treturn this.GetExplicitTable() != \"\"\n}\n\nfunc (this *AlterTableParser) GetAlterStatementOptions() string {\n\treturn this.alterStatementOptions\n}\n\nfunc ParseEnumValues(enumColumnType string) string {\n\tif submatch := enumValuesRegexp.FindStringSubmatch(enumColumnType); len(submatch) > 0 {\n\t\treturn submatch[1]\n\t}\n\treturn enumColumnType\n}\n"
  },
  {
    "path": "go/sql/parser_test.go",
    "content": "/*\n   Copyright 2022 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage sql\n\nimport (\n\t\"testing\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestParseAlterStatement(t *testing.T) {\n\tstatement := \"add column t int, engine=innodb\"\n\tparser := NewAlterTableParser()\n\terr := parser.ParseAlterStatement(statement)\n\trequire.NoError(t, err)\n\trequire.Equal(t, statement, parser.alterStatementOptions)\n\trequire.False(t, parser.HasNonTrivialRenames())\n\trequire.False(t, parser.IsAutoIncrementDefined())\n}\n\nfunc TestParseAlterStatementrivialRename(t *testing.T) {\n\tstatement := \"add column t int, change ts ts timestamp, engine=innodb\"\n\tparser := NewAlterTableParser()\n\terr := parser.ParseAlterStatement(statement)\n\trequire.NoError(t, err)\n\trequire.Equal(t, statement, parser.alterStatementOptions)\n\trequire.False(t, parser.HasNonTrivialRenames())\n\trequire.False(t, parser.IsAutoIncrementDefined())\n\trequire.Len(t, parser.columnRenameMap, 1)\n\trequire.Equal(t, \"ts\", parser.columnRenameMap[\"ts\"])\n}\n\nfunc TestParseAlterStatementWithAutoIncrement(t *testing.T) {\n\tstatements := []string{\n\t\t\"auto_increment=7\",\n\t\t\"auto_increment = 7\",\n\t\t\"AUTO_INCREMENT = 71\",\n\t\t\"add column t int, change ts ts timestamp, auto_increment=7 engine=innodb\",\n\t\t\"add column t int, change ts ts timestamp, auto_increment =7 engine=innodb\",\n\t\t\"add column t int, change ts ts timestamp, AUTO_INCREMENT = 7 engine=innodb\",\n\t\t\"add column t int, change ts ts timestamp, engine=innodb auto_increment=73425\",\n\t}\n\tfor _, statement := range statements {\n\t\tparser := NewAlterTableParser()\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, statement, parser.alterStatementOptions)\n\t\trequire.True(t, parser.IsAutoIncrementDefined())\n\t}\n}\n\nfunc TestParseAlterStatementrivialRenames(t *testing.T) {\n\tstatement := \"add column t int, change ts ts timestamp, CHANGE f `f` float, engine=innodb\"\n\tparser := NewAlterTableParser()\n\terr := parser.ParseAlterStatement(statement)\n\trequire.NoError(t, err)\n\trequire.Equal(t, statement, parser.alterStatementOptions)\n\trequire.False(t, parser.HasNonTrivialRenames())\n\trequire.False(t, parser.IsAutoIncrementDefined())\n\trequire.Len(t, parser.columnRenameMap, 2)\n\trequire.Equal(t, \"ts\", parser.columnRenameMap[\"ts\"])\n\trequire.Equal(t, \"f\", parser.columnRenameMap[\"f\"])\n}\n\nfunc TestParseAlterStatementNonTrivial(t *testing.T) {\n\tstatements := []string{\n\t\t`add column b bigint, change f fl float, change i count int, engine=innodb`,\n\t\t\"add column b bigint, change column `f` fl float, change `i` `count` int, engine=innodb\",\n\t\t\"add column b bigint, change column `f` fl float, change `i` `count` int, change ts ts timestamp, engine=innodb\",\n\t\t`change\n\t\t  f fl float,\n\t\t\tCHANGE COLUMN i\n\t\t\t  count int, engine=innodb`,\n\t}\n\n\tfor _, statement := range statements {\n\t\tparser := NewAlterTableParser()\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.False(t, parser.IsAutoIncrementDefined())\n\t\trequire.Equal(t, statement, parser.alterStatementOptions)\n\t\trenames := parser.GetNonTrivialRenames()\n\t\trequire.Len(t, renames, 2)\n\t\trequire.Equal(t, \"count\", renames[\"i\"])\n\t\trequire.Equal(t, \"fl\", renames[\"f\"])\n\t}\n}\n\nfunc TestTokenizeAlterStatement(t *testing.T) {\n\tparser := NewAlterTableParser()\n\t{\n\t\talterStatement := \"add column t int\"\n\t\ttokens := parser.tokenizeAlterStatement(alterStatement)\n\t\trequire.Equal(t, []string{\"add column t int\"}, tokens)\n\t}\n\t{\n\t\talterStatement := \"add column t int, change column i int\"\n\t\ttokens := parser.tokenizeAlterStatement(alterStatement)\n\t\trequire.Equal(t, []string{\"add column t int\", \"change column i int\"}, tokens)\n\t}\n\t{\n\t\talterStatement := \"add column t int, change column i int 'some comment'\"\n\t\ttokens := parser.tokenizeAlterStatement(alterStatement)\n\t\trequire.Equal(t, []string{\"add column t int\", \"change column i int 'some comment'\"}, tokens)\n\t}\n\t{\n\t\talterStatement := \"add column t int, change column i int 'some comment, with comma'\"\n\t\ttokens := parser.tokenizeAlterStatement(alterStatement)\n\t\trequire.Equal(t, []string{\"add column t int\", \"change column i int 'some comment, with comma'\"}, tokens)\n\t}\n\t{\n\t\talterStatement := \"add column t int, add column d decimal(10,2)\"\n\t\ttokens := parser.tokenizeAlterStatement(alterStatement)\n\t\trequire.Equal(t, []string{\"add column t int\", \"add column d decimal(10,2)\"}, tokens)\n\t}\n\t{\n\t\talterStatement := \"add column t int, add column e enum('a','b','c')\"\n\t\ttokens := parser.tokenizeAlterStatement(alterStatement)\n\t\trequire.Equal(t, []string{\"add column t int\", \"add column e enum('a','b','c')\"}, tokens)\n\t}\n\t{\n\t\talterStatement := \"add column t int(11), add column e enum('a','b','c')\"\n\t\ttokens := parser.tokenizeAlterStatement(alterStatement)\n\t\trequire.Equal(t, []string{\"add column t int(11)\", \"add column e enum('a','b','c')\"}, tokens)\n\t}\n}\n\nfunc TestSanitizeQuotesFromAlterStatement(t *testing.T) {\n\tparser := NewAlterTableParser()\n\t{\n\t\talterStatement := \"add column e enum('a','b','c')\"\n\t\tstrippedStatement := parser.sanitizeQuotesFromAlterStatement(alterStatement)\n\t\trequire.Equal(t, \"add column e enum('','','')\", strippedStatement)\n\t}\n\t{\n\t\talterStatement := \"change column i int 'some comment, with comma'\"\n\t\tstrippedStatement := parser.sanitizeQuotesFromAlterStatement(alterStatement)\n\t\trequire.Equal(t, \"change column i int ''\", strippedStatement)\n\t}\n}\n\nfunc TestParseAlterStatementDroppedColumns(t *testing.T) {\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Len(t, parser.droppedColumns, 1)\n\t\trequire.True(t, parser.droppedColumns[\"b\"])\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"drop column b, drop key c_idx, drop column `d`\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, statement, parser.alterStatementOptions)\n\t\trequire.Len(t, parser.droppedColumns, 2)\n\t\trequire.True(t, parser.droppedColumns[\"b\"])\n\t\trequire.True(t, parser.droppedColumns[\"d\"])\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"drop column b, drop key c_idx, drop column `d`, drop `e`, drop primary key, drop foreign key fk_1\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Len(t, parser.droppedColumns, 3)\n\t\trequire.True(t, parser.droppedColumns[\"b\"])\n\t\trequire.True(t, parser.droppedColumns[\"d\"])\n\t\trequire.True(t, parser.droppedColumns[\"e\"])\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"drop column b, drop bad statement, add column i int\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Len(t, parser.droppedColumns, 1)\n\t\trequire.True(t, parser.droppedColumns[\"b\"])\n\t}\n}\n\nfunc TestParseAlterStatementRenameTable(t *testing.T) {\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.False(t, parser.isRenameTable)\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"rename as something_else\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.True(t, parser.isRenameTable)\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"drop column b, rename as something_else\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, statement, parser.alterStatementOptions)\n\t\trequire.True(t, parser.isRenameTable)\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"engine=innodb rename as something_else\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.True(t, parser.isRenameTable)\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"rename as something_else, engine=innodb\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.True(t, parser.isRenameTable)\n\t}\n}\n\nfunc TestParseAlterStatementExplicitTable(t *testing.T) {\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"\", parser.explicitSchema)\n\t\trequire.Equal(t, \"\", parser.explicitTable)\n\t\trequire.Equal(t, \"drop column b\", parser.alterStatementOptions)\n\t\trequire.Equal(t, []string{\"drop column b\"}, parser.alterTokens)\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table tbl drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, \"\", parser.explicitSchema)\n\t\trequire.Equal(t, \"tbl\", parser.explicitTable)\n\t\trequire.Equal(t, \"drop column b\", parser.alterStatementOptions)\n\t\trequire.Equal(t, []string{\"drop column b\"}, parser.alterTokens)\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table `tbl` drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, parser.explicitSchema, \"\")\n\t\trequire.Equal(t, parser.explicitTable, \"tbl\")\n\t\trequire.Equal(t, parser.alterStatementOptions, \"drop column b\")\n\t\trequire.Equal(t, parser.alterTokens, []string{\"drop column b\"})\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table `scm with spaces`.`tbl` drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, parser.explicitSchema, \"scm with spaces\")\n\t\trequire.Equal(t, parser.explicitTable, \"tbl\")\n\t\trequire.Equal(t, parser.alterStatementOptions, \"drop column b\")\n\t\trequire.Equal(t, parser.alterTokens, []string{\"drop column b\"})\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table `scm`.`tbl with spaces` drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, parser.explicitSchema, \"scm\")\n\t\trequire.Equal(t, parser.explicitTable, \"tbl with spaces\")\n\t\trequire.Equal(t, parser.alterStatementOptions, \"drop column b\")\n\t\trequire.Equal(t, parser.alterTokens, []string{\"drop column b\"})\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table `scm`.tbl drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, parser.explicitSchema, \"scm\")\n\t\trequire.Equal(t, parser.explicitTable, \"tbl\")\n\t\trequire.Equal(t, parser.alterStatementOptions, \"drop column b\")\n\t\trequire.Equal(t, parser.alterTokens, []string{\"drop column b\"})\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table scm.`tbl` drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, parser.explicitSchema, \"scm\")\n\t\trequire.Equal(t, parser.explicitTable, \"tbl\")\n\t\trequire.Equal(t, parser.alterStatementOptions, \"drop column b\")\n\t\trequire.Equal(t, parser.alterTokens, []string{\"drop column b\"})\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table scm.tbl drop column b\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, parser.explicitSchema, \"scm\")\n\t\trequire.Equal(t, parser.explicitTable, \"tbl\")\n\t\trequire.Equal(t, parser.alterStatementOptions, \"drop column b\")\n\t\trequire.Equal(t, parser.alterTokens, []string{\"drop column b\"})\n\t}\n\t{\n\t\tparser := NewAlterTableParser()\n\t\tstatement := \"alter table scm.tbl drop column b, add index idx(i)\"\n\t\terr := parser.ParseAlterStatement(statement)\n\t\trequire.NoError(t, err)\n\t\trequire.Equal(t, parser.explicitSchema, \"scm\")\n\t\trequire.Equal(t, parser.explicitTable, \"tbl\")\n\t\trequire.Equal(t, parser.alterStatementOptions, \"drop column b, add index idx(i)\")\n\t\trequire.Equal(t, parser.alterTokens, []string{\"drop column b\", \"add index idx(i)\"})\n\t}\n}\n\nfunc TestParseEnumValues(t *testing.T) {\n\t{\n\t\ts := \"enum('red','green','blue','orange')\"\n\t\tvalues := ParseEnumValues(s)\n\t\trequire.Equal(t, values, \"'red','green','blue','orange'\")\n\t}\n\t{\n\t\ts := \"('red','green','blue','orange')\"\n\t\tvalues := ParseEnumValues(s)\n\t\trequire.Equal(t, values, \"('red','green','blue','orange')\")\n\t}\n\t{\n\t\ts := \"zzz\"\n\t\tvalues := ParseEnumValues(s)\n\t\trequire.Equal(t, values, \"zzz\")\n\t}\n}\n"
  },
  {
    "path": "go/sql/types.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage sql\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype ColumnType int\n\nconst (\n\tUnknownColumnType ColumnType = iota\n\tTimestampColumnType\n\tDateTimeColumnType\n\tEnumColumnType\n\tMediumIntColumnType\n\tJSONColumnType\n\tFloatColumnType\n\tBinaryColumnType\n)\n\nconst maxMediumintUnsigned int32 = 16777215\n\ntype TimezoneConversion struct {\n\tToTimezone string\n}\n\ntype CharacterSetConversion struct {\n\tToCharset   string\n\tFromCharset string\n}\n\ntype Column struct {\n\tName       string\n\tIsUnsigned bool\n\tIsVirtual  bool\n\tCharset    string\n\t// Type represents a subset of MySQL types\n\t// used for mapping columns to golang values.\n\tType                 ColumnType\n\tEnumValues           string\n\ttimezoneConversion   *TimezoneConversion\n\tenumToTextConversion bool\n\t// add Octet length for binary type, fix bytes with suffix \"00\" get clipped in mysql binlog.\n\t// https://github.com/github/gh-ost/issues/909\n\tBinaryOctetLength uint\n\tcharsetConversion *CharacterSetConversion\n\tCharacterSetName  string\n\tNullable          bool\n\tMySQLType         string\n}\n\nfunc (this *Column) convertArg(arg interface{}) interface{} {\n\tvar arg2Bytes []byte\n\tif s, ok := arg.(string); ok {\n\t\targ2Bytes = []byte(s)\n\t} else if b, ok := arg.([]uint8); ok {\n\t\targ2Bytes = b\n\t} else {\n\t\targ2Bytes = nil\n\t}\n\n\tif arg2Bytes != nil {\n\t\tif this.Charset != \"\" && this.charsetConversion == nil {\n\t\t\targ = arg2Bytes\n\t\t} else {\n\t\t\tif encoding, ok := charsetEncodingMap[this.Charset]; ok {\n\t\t\t\tdecodedBytes, _ := encoding.NewDecoder().Bytes(arg2Bytes)\n\t\t\t\targ = string(decodedBytes)\n\t\t\t}\n\t\t}\n\n\t\tif this.Type == BinaryColumnType {\n\t\t\tsize := len(arg2Bytes)\n\t\t\tif uint(size) < this.BinaryOctetLength {\n\t\t\t\tbuf := bytes.NewBuffer(arg2Bytes)\n\t\t\t\tfor i := uint(0); i < (this.BinaryOctetLength - uint(size)); i++ {\n\t\t\t\t\tbuf.Write([]byte{0})\n\t\t\t\t}\n\t\t\t\targ = buf.Bytes()\n\t\t\t}\n\t\t}\n\n\t\treturn arg\n\t}\n\n\tif this.IsUnsigned {\n\t\tif i, ok := arg.(int8); ok {\n\t\t\treturn uint8(i)\n\t\t}\n\t\tif i, ok := arg.(int16); ok {\n\t\t\treturn uint16(i)\n\t\t}\n\t\tif i, ok := arg.(int32); ok {\n\t\t\tif this.Type == MediumIntColumnType {\n\t\t\t\t// problem with mediumint is that it's a 3-byte type. There is no compatible golang type to match that.\n\t\t\t\t// So to convert from negative to positive we'd need to convert the value manually\n\t\t\t\tif i >= 0 {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t\treturn uint32(maxMediumintUnsigned + i + 1)\n\t\t\t}\n\t\t\treturn uint32(i)\n\t\t}\n\t\tif i, ok := arg.(int64); ok {\n\t\t\treturn strconv.FormatUint(uint64(i), 10)\n\t\t}\n\t\tif i, ok := arg.(int); ok {\n\t\t\treturn uint(i)\n\t\t}\n\t}\n\treturn arg\n}\n\nfunc NewColumns(names []string) []Column {\n\tresult := make([]Column, len(names))\n\tfor i := range names {\n\t\tresult[i].Name = names[i]\n\t}\n\treturn result\n}\n\nfunc ParseColumns(names string) []Column {\n\tnamesArray := strings.Split(names, \",\")\n\treturn NewColumns(namesArray)\n}\n\n// ColumnsMap maps a column name onto its ordinal position\ntype ColumnsMap map[string]int\n\nfunc NewEmptyColumnsMap() ColumnsMap {\n\tcolumnsMap := make(map[string]int)\n\treturn ColumnsMap(columnsMap)\n}\n\nfunc NewColumnsMap(orderedColumns []Column) ColumnsMap {\n\tcolumnsMap := NewEmptyColumnsMap()\n\tfor i, column := range orderedColumns {\n\t\tcolumnsMap[column.Name] = i\n\t}\n\treturn columnsMap\n}\n\n// ColumnList makes for a named list of columns\ntype ColumnList struct {\n\tcolumns  []Column\n\tOrdinals ColumnsMap\n}\n\n// NewColumnList creates an object given ordered list of column names\nfunc NewColumnList(names []string) *ColumnList {\n\tresult := &ColumnList{\n\t\tcolumns: NewColumns(names),\n\t}\n\tresult.Ordinals = NewColumnsMap(result.columns)\n\treturn result\n}\n\n// ParseColumnList parses a comma delimited list of column names\nfunc ParseColumnList(names string) *ColumnList {\n\tresult := &ColumnList{\n\t\tcolumns: ParseColumns(names),\n\t}\n\tresult.Ordinals = NewColumnsMap(result.columns)\n\treturn result\n}\n\nfunc (this *ColumnList) Columns() []Column {\n\treturn this.columns\n}\n\nfunc (this *ColumnList) Names() []string {\n\tnames := make([]string, len(this.columns))\n\tfor i := range this.columns {\n\t\tnames[i] = this.columns[i].Name\n\t}\n\treturn names\n}\n\nfunc (this *ColumnList) GetColumn(columnName string) *Column {\n\tif ordinal, ok := this.Ordinals[columnName]; ok {\n\t\treturn &this.columns[ordinal]\n\t}\n\treturn nil\n}\n\nfunc (this *ColumnList) SetUnsigned(columnName string) {\n\tthis.GetColumn(columnName).IsUnsigned = true\n}\n\nfunc (this *ColumnList) IsUnsigned(columnName string) bool {\n\treturn this.GetColumn(columnName).IsUnsigned\n}\n\nfunc (this *ColumnList) SetCharset(columnName string, charset string) {\n\tthis.GetColumn(columnName).Charset = charset\n}\n\nfunc (this *ColumnList) GetCharset(columnName string) string {\n\treturn this.GetColumn(columnName).Charset\n}\n\nfunc (this *ColumnList) SetColumnType(columnName string, columnType ColumnType) {\n\tthis.GetColumn(columnName).Type = columnType\n}\n\nfunc (this *ColumnList) GetColumnType(columnName string) ColumnType {\n\treturn this.GetColumn(columnName).Type\n}\n\nfunc (this *ColumnList) SetConvertDatetimeToTimestamp(columnName string, toTimezone string) {\n\tthis.GetColumn(columnName).timezoneConversion = &TimezoneConversion{ToTimezone: toTimezone}\n}\n\nfunc (this *ColumnList) HasTimezoneConversion(columnName string) bool {\n\treturn this.GetColumn(columnName).timezoneConversion != nil\n}\n\nfunc (this *ColumnList) SetEnumToTextConversion(columnName string) {\n\tthis.GetColumn(columnName).enumToTextConversion = true\n}\n\nfunc (this *ColumnList) IsEnumToTextConversion(columnName string) bool {\n\treturn this.GetColumn(columnName).enumToTextConversion\n}\n\nfunc (this *ColumnList) SetEnumValues(columnName string, enumValues string) {\n\tthis.GetColumn(columnName).EnumValues = enumValues\n}\n\nfunc (this *ColumnList) String() string {\n\treturn strings.Join(this.Names(), \",\")\n}\n\nfunc (this *ColumnList) Equals(other *ColumnList) bool {\n\treturn reflect.DeepEqual(this.Columns, other.Columns)\n}\n\nfunc (this *ColumnList) EqualsByNames(other *ColumnList) bool {\n\treturn reflect.DeepEqual(this.Names(), other.Names())\n}\n\n// IsSubsetOf returns 'true' when column names of this list are a subset of\n// another list, in arbitrary order (order agnostic)\nfunc (this *ColumnList) IsSubsetOf(other *ColumnList) bool {\n\tfor _, column := range this.columns {\n\t\tif _, exists := other.Ordinals[column.Name]; !exists {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (this *ColumnList) FilterBy(f func(Column) bool) *ColumnList {\n\tfilteredCols := make([]Column, 0, len(this.columns))\n\tfor _, column := range this.columns {\n\t\tif f(column) {\n\t\t\tfilteredCols = append(filteredCols, column)\n\t\t}\n\t}\n\treturn &ColumnList{Ordinals: this.Ordinals, columns: filteredCols}\n}\n\nfunc (this *ColumnList) Len() int {\n\treturn len(this.columns)\n}\n\nfunc (this *ColumnList) SetCharsetConversion(columnName string, fromCharset string, toCharset string) {\n\tthis.GetColumn(columnName).charsetConversion = &CharacterSetConversion{FromCharset: fromCharset, ToCharset: toCharset}\n}\n\n// UniqueKey is the combination of a key's name and columns\ntype UniqueKey struct {\n\tName             string\n\tNameInGhostTable string // Name of the corresponding key in the Ghost table in case it is being renamed\n\tColumns          ColumnList\n\tHasNullable      bool\n\tIsAutoIncrement  bool\n}\n\n// IsPrimary checks if this unique key is primary\nfunc (this *UniqueKey) IsPrimary() bool {\n\treturn this.Name == \"PRIMARY\"\n}\n\nfunc (this *UniqueKey) Len() int {\n\treturn this.Columns.Len()\n}\n\nfunc (this *UniqueKey) String() string {\n\tdescription := this.Name\n\tif this.IsAutoIncrement {\n\t\tdescription = fmt.Sprintf(\"%s (auto_increment)\", description)\n\t}\n\treturn fmt.Sprintf(\"%s: %s; has nullable: %+v\", description, this.Columns.Names(), this.HasNullable)\n}\n\ntype ColumnValues struct {\n\tabstractValues []interface{}\n\tValuesPointers []interface{}\n}\n\nfunc NewColumnValues(length int) *ColumnValues {\n\tresult := &ColumnValues{\n\t\tabstractValues: make([]interface{}, length),\n\t\tValuesPointers: make([]interface{}, length),\n\t}\n\tfor i := 0; i < length; i++ {\n\t\tresult.ValuesPointers[i] = &result.abstractValues[i]\n\t}\n\n\treturn result\n}\n\nfunc ToColumnValues(abstractValues []interface{}) *ColumnValues {\n\tresult := &ColumnValues{\n\t\tabstractValues: abstractValues,\n\t\tValuesPointers: make([]interface{}, len(abstractValues)),\n\t}\n\tfor i := 0; i < len(abstractValues); i++ {\n\t\tresult.ValuesPointers[i] = &result.abstractValues[i]\n\t}\n\n\treturn result\n}\n\nfunc (this *ColumnValues) AbstractValues() []interface{} {\n\treturn this.abstractValues\n}\n\nfunc (this *ColumnValues) StringColumn(index int) string {\n\tval := this.AbstractValues()[index]\n\tif ints, ok := val.([]uint8); ok {\n\t\treturn fmt.Sprintf(\"%x\", ints)\n\t}\n\treturn fmt.Sprintf(\"%+v\", val)\n}\n\nfunc (this *ColumnValues) String() string {\n\tstringValues := []string{}\n\tfor i := range this.AbstractValues() {\n\t\tstringValues = append(stringValues, this.StringColumn(i))\n\t}\n\treturn strings.Join(stringValues, \",\")\n}\n\nfunc (this *ColumnValues) Clone() *ColumnValues {\n\tcv := NewColumnValues(len(this.abstractValues))\n\tcopy(cv.abstractValues, this.abstractValues)\n\treturn cv\n}\n"
  },
  {
    "path": "go/sql/types_test.go",
    "content": "/*\n   Copyright 2016 GitHub Inc.\n\t See https://github.com/github/gh-ost/blob/master/LICENSE\n*/\n\npackage sql\n\nimport (\n\t\"testing\"\n\n\t\"github.com/openark/golib/log\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nfunc init() {\n\tlog.SetLevel(log.ERROR)\n}\n\nfunc TestParseColumnList(t *testing.T) {\n\tnames := \"id,category,max_len\"\n\n\tcolumnList := ParseColumnList(names)\n\trequire.Equal(t, 3, columnList.Len())\n\trequire.Equal(t, []string{\"id\", \"category\", \"max_len\"}, columnList.Names())\n\trequire.Equal(t, 0, columnList.Ordinals[\"id\"])\n\trequire.Equal(t, 1, columnList.Ordinals[\"category\"])\n\trequire.Equal(t, 2, columnList.Ordinals[\"max_len\"])\n}\n\nfunc TestGetColumn(t *testing.T) {\n\tnames := \"id,category,max_len\"\n\tcolumnList := ParseColumnList(names)\n\t{\n\t\tcolumn := columnList.GetColumn(\"category\")\n\t\trequire.NotNil(t, column)\n\t\trequire.Equal(t, column.Name, \"category\")\n\t}\n\t{\n\t\tcolumn := columnList.GetColumn(\"no_such_column\")\n\t\trequire.Nil(t, column)\n\t}\n}\n\nfunc TestBinaryToString(t *testing.T) {\n\tid := []uint8{0x1b, 0x99}\n\tcol := make([]interface{}, 1)\n\tcol[0] = id\n\tcv := ToColumnValues(col)\n\n\trequire.Equal(t, \"1b99\", cv.StringColumn(0))\n}\n\nfunc TestConvertArgCharsetDecoding(t *testing.T) {\n\tlatin1Bytes := []uint8{0x47, 0x61, 0x72, 0xe7, 0x6f, 0x6e, 0x20, 0x21}\n\n\tcol := Column{\n\t\tCharset: \"latin1\",\n\t\tcharsetConversion: &CharacterSetConversion{\n\t\t\tFromCharset: \"latin1\",\n\t\t\tToCharset:   \"utf8mb4\",\n\t\t},\n\t}\n\n\t// Should decode []uint8\n\tstr := col.convertArg(latin1Bytes)\n\trequire.Equal(t, \"Garçon !\", str)\n}\n\nfunc TestConvertArgBinaryColumnPadding(t *testing.T) {\n\t// Test that binary columns are padded with trailing zeros to their declared length.\n\t// This is needed because MySQL's binlog strips trailing 0x00 bytes from binary values.\n\t// See https://github.com/github/gh-ost/issues/909\n\n\t// Simulates a binary(20) column where binlog delivered only 18 bytes\n\t// (trailing zeros were stripped)\n\ttruncatedValue := []uint8{\n\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n\t\t0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,\n\t\t0x11, 0x12, // 18 bytes, missing 2 trailing zeros\n\t}\n\n\tcol := Column{\n\t\tName:              \"bin_col\",\n\t\tType:              BinaryColumnType,\n\t\tBinaryOctetLength: 20,\n\t}\n\n\tresult := col.convertArg(truncatedValue)\n\tresultBytes := result.([]byte)\n\n\trequire.Equal(t, 20, len(resultBytes), \"binary column should be padded to declared length\")\n\t// First 18 bytes should be unchanged\n\trequire.Equal(t, truncatedValue, resultBytes[:18])\n\t// Last 2 bytes should be zeros\n\trequire.Equal(t, []byte{0x00, 0x00}, resultBytes[18:])\n}\n\nfunc TestConvertArgBinaryColumnNoPaddingWhenFull(t *testing.T) {\n\t// When binary value is already at full length, no padding should occur\n\tfullValue := []uint8{\n\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,\n\t\t0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,\n\t\t0x11, 0x12, 0x13, 0x14, // 20 bytes\n\t}\n\n\tcol := Column{\n\t\tName:              \"bin_col\",\n\t\tType:              BinaryColumnType,\n\t\tBinaryOctetLength: 20,\n\t}\n\n\tresult := col.convertArg(fullValue)\n\tresultBytes := result.([]byte)\n\n\trequire.Equal(t, 20, len(resultBytes))\n\trequire.Equal(t, fullValue, resultBytes)\n}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/github/gh-ost\n\ngo 1.23.0\n\nrequire (\n\tgithub.com/go-ini/ini v1.67.0\n\tgithub.com/go-mysql-org/go-mysql v1.11.0\n\tgithub.com/go-sql-driver/mysql v1.8.1\n\tgithub.com/google/uuid v1.6.0\n\tgithub.com/hashicorp/go-version v1.7.0\n\tgithub.com/openark/golib v0.0.0-20210531070646-355f37940af8\n\tgithub.com/stretchr/testify v1.10.0\n\tgithub.com/testcontainers/testcontainers-go v0.37.0\n\tgithub.com/testcontainers/testcontainers-go/modules/mysql v0.37.0\n\tgolang.org/x/net v0.38.0\n\tgolang.org/x/sync v0.13.0\n\tgolang.org/x/term v0.31.0\n\tgolang.org/x/text v0.24.0\n)\n\nrequire (\n\tdario.cat/mergo v1.0.1 // indirect\n\tfilippo.io/edwards25519 v1.1.0 // indirect\n\tgithub.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect\n\tgithub.com/Masterminds/semver v1.5.0 // indirect\n\tgithub.com/Microsoft/go-winio v0.6.2 // indirect\n\tgithub.com/cenkalti/backoff/v4 v4.2.1 // indirect\n\tgithub.com/containerd/log v0.1.0 // indirect\n\tgithub.com/containerd/platforms v0.2.1 // indirect\n\tgithub.com/cpuguy83/dockercfg v0.3.2 // indirect\n\tgithub.com/davecgh/go-spew v1.1.1 // indirect\n\tgithub.com/distribution/reference v0.6.0 // indirect\n\tgithub.com/docker/docker v28.0.1+incompatible // indirect\n\tgithub.com/docker/go-connections v0.5.0 // indirect\n\tgithub.com/docker/go-units v0.5.0 // indirect\n\tgithub.com/ebitengine/purego v0.8.2 // indirect\n\tgithub.com/felixge/httpsnoop v1.0.4 // indirect\n\tgithub.com/go-logr/logr v1.4.2 // indirect\n\tgithub.com/go-logr/stdr v1.2.2 // indirect\n\tgithub.com/go-ole/go-ole v1.2.6 // indirect\n\tgithub.com/goccy/go-json v0.10.2 // indirect\n\tgithub.com/gogo/protobuf v1.3.2 // indirect\n\tgithub.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect\n\tgithub.com/klauspost/compress v1.17.8 // indirect\n\tgithub.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect\n\tgithub.com/magiconair/properties v1.8.10 // indirect\n\tgithub.com/moby/docker-image-spec v1.3.1 // indirect\n\tgithub.com/moby/patternmatcher v0.6.0 // indirect\n\tgithub.com/moby/sys/sequential v0.5.0 // indirect\n\tgithub.com/moby/sys/user v0.3.0 // indirect\n\tgithub.com/moby/sys/userns v0.1.0 // indirect\n\tgithub.com/moby/term v0.5.0 // indirect\n\tgithub.com/morikuni/aec v1.0.0 // indirect\n\tgithub.com/opencontainers/go-digest v1.0.0 // indirect\n\tgithub.com/opencontainers/image-spec v1.1.1 // indirect\n\tgithub.com/pingcap/errors v0.11.5-0.20240311024730-e056997136bb // indirect\n\tgithub.com/pingcap/log v1.1.1-0.20230317032135-a0d097d16e22 // indirect\n\tgithub.com/pingcap/tidb/pkg/parser v0.0.0-20241118164214-4f047be191be // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/pmezard/go-difflib v1.0.0 // indirect\n\tgithub.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect\n\tgithub.com/shirou/gopsutil/v4 v4.25.1 // indirect\n\tgithub.com/shopspring/decimal v1.2.0 // indirect\n\tgithub.com/siddontang/go-log v0.0.0-20180807004314-8d05993dda07 // indirect\n\tgithub.com/sirupsen/logrus v1.9.3 // indirect\n\tgithub.com/tklauser/go-sysconf v0.3.12 // indirect\n\tgithub.com/tklauser/numcpus v0.6.1 // indirect\n\tgithub.com/yusufpapurcu/wmi v1.2.4 // indirect\n\tgo.opentelemetry.io/auto/sdk v1.1.0 // indirect\n\tgo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect\n\tgo.opentelemetry.io/otel v1.35.0 // indirect\n\tgo.opentelemetry.io/otel/metric v1.35.0 // indirect\n\tgo.opentelemetry.io/otel/sdk v1.21.0 // indirect\n\tgo.opentelemetry.io/otel/trace v1.35.0 // indirect\n\tgo.uber.org/atomic v1.11.0 // indirect\n\tgo.uber.org/multierr v1.11.0 // indirect\n\tgo.uber.org/zap v1.27.0 // indirect\n\tgolang.org/x/crypto v0.37.0 // indirect\n\tgolang.org/x/sys v0.32.0 // indirect\n\tgoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect\n\tgoogle.golang.org/protobuf v1.35.2 // indirect\n\tgopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect\n\tgopkg.in/yaml.v3 v3.0.1 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=\ndario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=\nfilippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=\nfilippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=\ngithub.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=\ngithub.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=\ngithub.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=\ngithub.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=\ngithub.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=\ngithub.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=\ngithub.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=\ngithub.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=\ngithub.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=\ngithub.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=\ngithub.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=\ngithub.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=\ngithub.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=\ngithub.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=\ngithub.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA=\ngithub.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=\ngithub.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=\ngithub.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=\ngithub.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=\ngithub.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0=\ngithub.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=\ngithub.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=\ngithub.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=\ngithub.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=\ngithub.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=\ngithub.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=\ngithub.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=\ngithub.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=\ngithub.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=\ngithub.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=\ngithub.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=\ngithub.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=\ngithub.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=\ngithub.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\ngithub.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=\ngithub.com/go-mysql-org/go-mysql v1.11.0 h1:Y0ooXu2UtbjsgpfjFBXZEvidEl1q8n0ESxej0zZ78Zc=\ngithub.com/go-mysql-org/go-mysql v1.11.0/go.mod h1:y/7aggbs+Io8rPVerIjTe1+nMgt8q5tBIxIc+qQnE0k=\ngithub.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=\ngithub.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=\ngithub.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=\ngithub.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=\ngithub.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=\ngithub.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=\ngithub.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=\ngithub.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=\ngithub.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=\ngithub.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms=\ngithub.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg=\ngithub.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=\ngithub.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=\ngithub.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=\ngithub.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=\ngithub.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=\ngithub.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=\ngithub.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=\ngithub.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=\ngithub.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=\ngithub.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=\ngithub.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=\ngithub.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=\ngithub.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=\ngithub.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=\ngithub.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=\ngithub.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=\ngithub.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=\ngithub.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=\ngithub.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=\ngithub.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=\ngithub.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=\ngithub.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=\ngithub.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=\ngithub.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=\ngithub.com/openark/golib v0.0.0-20210531070646-355f37940af8 h1:9ciIHNuyFqRWi9NpMNw9sVLB6z1ItpP5ZhTY9Q1xVu4=\ngithub.com/openark/golib v0.0.0-20210531070646-355f37940af8/go.mod h1:1jj8x1eDVZxgc/Z4VyamX4qTbAdHPUQA6NeVtCd8Sl8=\ngithub.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=\ngithub.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=\ngithub.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=\ngithub.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=\ngithub.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=\ngithub.com/pingcap/errors v0.11.5-0.20240311024730-e056997136bb h1:3pSi4EDG6hg0orE1ndHkXvX6Qdq2cZn8gAPir8ymKZk=\ngithub.com/pingcap/errors v0.11.5-0.20240311024730-e056997136bb/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg=\ngithub.com/pingcap/log v1.1.1-0.20230317032135-a0d097d16e22 h1:2SOzvGvE8beiC1Y4g9Onkvu6UmuBBOeWRGQEjJaT/JY=\ngithub.com/pingcap/log v1.1.1-0.20230317032135-a0d097d16e22/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4=\ngithub.com/pingcap/tidb/pkg/parser v0.0.0-20241118164214-4f047be191be h1:t5EkCmZpxLCig5GQA0AZG47aqsuL5GTsJeeUD+Qfies=\ngithub.com/pingcap/tidb/pkg/parser v0.0.0-20241118164214-4f047be191be/go.mod h1:Hju1TEWZvrctQKbztTRwXH7rd41Yq0Pgmq4PrEKcq7o=\ngithub.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=\ngithub.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=\ngithub.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=\ngithub.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=\ngithub.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs=\ngithub.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI=\ngithub.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=\ngithub.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=\ngithub.com/siddontang/go-log v0.0.0-20180807004314-8d05993dda07 h1:oI+RNwuC9jF2g2lP0u0cVEEZrc/AYBCuFdvwrLWM/6Q=\ngithub.com/siddontang/go-log v0.0.0-20180807004314-8d05993dda07/go.mod h1:yFdBgwXP24JziuRl2NMUahT7nGLNOKi1SIiFxMttVD4=\ngithub.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=\ngithub.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=\ngithub.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=\ngithub.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg=\ngithub.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM=\ngithub.com/testcontainers/testcontainers-go/modules/mysql v0.37.0 h1:LqUos1oR5iuuzorFnSvxsHNdYdCHB/DfI82CuT58wbI=\ngithub.com/testcontainers/testcontainers-go/modules/mysql v0.37.0/go.mod h1:vHEEHx5Kf+uq5hveaVAMrTzPY8eeRZcKcl23MRw5Tkc=\ngithub.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=\ngithub.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=\ngithub.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=\ngithub.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=\ngithub.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=\ngithub.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=\ngo.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=\ngo.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=\ngo.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=\ngo.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=\ngo.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg=\ngo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU=\ngo.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=\ngo.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=\ngo.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8=\ngo.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E=\ngo.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=\ngo.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=\ngo.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=\ngo.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=\ngo.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=\ngo.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=\ngo.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=\ngo.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=\ngo.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=\ngo.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=\ngo.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=\ngo.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=\ngo.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=\ngo.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=\ngo.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=\ngo.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=\ngo.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=\ngo.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=\ngo.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=\ngolang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=\ngolang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=\ngolang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=\ngolang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=\ngolang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=\ngolang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=\ngolang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=\ngolang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=\ngolang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=\ngolang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngoogle.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e h1:Ao9GzfUMPH3zjVfzXG5rlWlk+Q8MXWKwWpwVQE1MXfw=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4=\ngoogle.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=\ngoogle.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=\ngoogle.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA=\ngoogle.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0=\ngoogle.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io=\ngoogle.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=\ngopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=\ngopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=\ngopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=\ngopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=\ngotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=\n"
  },
  {
    "path": "localtests/alter-charset/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t1 varchar(128)  charset latin1 collate latin1_swedish_ci,\n  t2 varchar(128)  charset latin1 collate latin1_swedish_ci,\n  tutf8 varchar(128) charset utf8,\n  tutf8mb4 varchar(128) charset utf8mb4,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()), md5(rand()), md5(rand()), md5(rand()));\n  insert into gh_ost_test values (null, 'átesting', 'átesting', 'átesting', 'átesting');\n  insert into gh_ost_test values (null, 'testátest', 'testátest', 'testátest', '🍻😀');\nend ;;\n"
  },
  {
    "path": "localtests/alter-charset/extra_args",
    "content": "--alter='MODIFY `t1` varchar(128) CHARACTER SET utf8mb4 NOT NULL, MODIFY `t2` varchar(128) CHARACTER SET latin2 NOT NULL, MODIFY `tutf8` varchar(128) CHARACTER SET latin1 NOT NULL'\n"
  },
  {
    "path": "localtests/alter-charset-all-dml/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t1 varchar(128)  charset latin1 collate latin1_swedish_ci,\n  t2 varchar(128)  charset latin1 collate latin1_swedish_ci,\n  tutf8 varchar(128) charset utf8,\n  tutf8mb4 varchar(128) charset utf8mb4,\n  random_value varchar(128) charset ascii,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()), md5(rand()), md5(rand()), md5(rand()), md5(rand()));\n  insert into gh_ost_test values (null, 'átesting', 'átesting', 'átesting', 'átesting', md5(rand()));\n  insert into gh_ost_test values (null, 'átesting_del', 'átesting', 'átesting', 'átesting', md5(rand()));\n  insert into gh_ost_test values (null, 'testátest', 'testátest', 'testátest', '🍻😀', md5(rand()));\n  update gh_ost_test set t1='átesting2' where t1='átesting' order by id desc limit 1;\n  delete from gh_ost_test where t1='átesting_del' order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/alter-charset-all-dml/extra_args",
    "content": "--alter='MODIFY `t1` varchar(128) CHARACTER SET utf8mb4 NOT NULL, MODIFY `t2` varchar(128) CHARACTER SET latin2 NOT NULL, MODIFY `tutf8` varchar(128) CHARACTER SET latin1 NOT NULL'\n"
  },
  {
    "path": "localtests/attempt-instant-ddl/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  color varchar(32),\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\n\ninsert into gh_ost_test values (null, 11, 'red');\ninsert into gh_ost_test values (null, 13, 'green');\ninsert into gh_ost_test values (null, 17, 'blue');\n"
  },
  {
    "path": "localtests/attempt-instant-ddl/extra_args",
    "content": "--attempt-instant-ddl\n"
  },
  {
    "path": "localtests/autoinc-copy-deletes/create.sql",
    "content": "drop event if exists gh_ost_test;\n\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\ninsert into gh_ost_test values (NULL, 11);\ninsert into gh_ost_test values (NULL, 13);\ninsert into gh_ost_test values (NULL, 17);\ninsert into gh_ost_test values (NULL, 23);\ninsert into gh_ost_test values (NULL, 29);\ninsert into gh_ost_test values (NULL, 31);\ninsert into gh_ost_test values (NULL, 37);\ndelete from gh_ost_test where id>=5;\n"
  },
  {
    "path": "localtests/autoinc-copy-deletes/expect_table_structure",
    "content": "AUTO_INCREMENT=8\n"
  },
  {
    "path": "localtests/autoinc-copy-deletes-user-defined/create.sql",
    "content": "drop event if exists gh_ost_test;\n\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\ninsert into gh_ost_test values (NULL, 11);\ninsert into gh_ost_test values (NULL, 13);\ninsert into gh_ost_test values (NULL, 17);\ninsert into gh_ost_test values (NULL, 23);\ninsert into gh_ost_test values (NULL, 29);\ninsert into gh_ost_test values (NULL, 31);\ninsert into gh_ost_test values (NULL, 37);\ndelete from gh_ost_test where id>=5;\n"
  },
  {
    "path": "localtests/autoinc-copy-deletes-user-defined/expect_table_structure",
    "content": "AUTO_INCREMENT=7\n"
  },
  {
    "path": "localtests/autoinc-copy-deletes-user-defined/extra_args",
    "content": "--alter='AUTO_INCREMENT=7'\n"
  },
  {
    "path": "localtests/autoinc-copy-simple/create.sql",
    "content": "drop event if exists gh_ost_test;\n\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\ninsert into gh_ost_test values (NULL, 11);\ninsert into gh_ost_test values (NULL, 13);\ninsert into gh_ost_test values (NULL, 17);\ninsert into gh_ost_test values (NULL, 23);\n"
  },
  {
    "path": "localtests/autoinc-copy-simple/expect_table_structure",
    "content": "AUTO_INCREMENT=5\n"
  },
  {
    "path": "localtests/autoinc-zero-value/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\nset session sql_mode='NO_AUTO_VALUE_ON_ZERO';\ninsert into gh_ost_test values (0, 23);\n"
  },
  {
    "path": "localtests/bigint-change-nullable/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id bigint auto_increment,\n  val bigint not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 18446744073709551615);\n  insert into gh_ost_test values (null, 18446744073709551614);\n  insert into gh_ost_test values (null, 18446744073709551613);\nend ;;\n"
  },
  {
    "path": "localtests/bigint-change-nullable/extra_args",
    "content": "--alter=\"change val val bigint\" \n"
  },
  {
    "path": "localtests/binary-to-varbinary/create.sql",
    "content": "-- Test for https://github.com/github/gh-ost/issues/909 variant:\n-- Binary columns with trailing zeros should preserve their values\n-- when migrating from binary(N) to varbinary(M), even for rows\n-- modified during migration via binlog events.\n\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int NOT NULL AUTO_INCREMENT,\n  info varchar(255) NOT NULL,\n  data binary(20) NOT NULL,\n  PRIMARY KEY (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  -- Insert rows where data has trailing zeros (will be stripped by binlog)\n  INSERT INTO gh_ost_test (info, data) VALUES ('insert-during-1', X'aabbccdd00000000000000000000000000000000');\n  INSERT INTO gh_ost_test (info, data) VALUES ('insert-during-2', X'11223344556677889900000000000000000000ee');\n\n  -- Update existing rows to values with trailing zeros\n  UPDATE gh_ost_test SET data = X'ffeeddcc00000000000000000000000000000000' WHERE info = 'update-target-1';\n  UPDATE gh_ost_test SET data = X'aabbccdd11111111111111111100000000000000' WHERE info = 'update-target-2';\nend ;;\n\n-- Pre-existing rows (copied via rowcopy, not binlog - these should work fine)\nINSERT INTO gh_ost_test (info, data) VALUES\n  ('pre-existing-1', X'01020304050607080910111213141516171819ff'),\n  ('pre-existing-2', X'0102030405060708091011121314151617181900'),\n  ('update-target-1', X'ffffffffffffffffffffffffffffffffffffffff'),\n  ('update-target-2', X'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee');\n"
  },
  {
    "path": "localtests/binary-to-varbinary/extra_args",
    "content": "--alter=\"MODIFY data varbinary(32)\"\n"
  },
  {
    "path": "localtests/bit-add/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11);\n  insert into gh_ost_test values (null, 13);\nend ;;\n"
  },
  {
    "path": "localtests/bit-add/extra_args",
    "content": "--alter=\"add column is_good bit null default 0\" \n"
  },
  {
    "path": "localtests/bit-add/ghost_columns",
    "content": "id, i\n"
  },
  {
    "path": "localtests/bit-add/orig_columns",
    "content": "id, i\n"
  },
  {
    "path": "localtests/bit-dml/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  is_good bit null default 0,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 0);\n  insert into gh_ost_test values (null, 13, 1);\n  insert into gh_ost_test values (null, 17, 1);\n\n  update gh_ost_test set is_good=0 where i=13 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/bit-dml/extra_args",
    "content": "--alter=\"modify column is_good bit not null default 0\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/compound-pk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  v varchar(128),\n  updated tinyint unsigned default 0,\n  primary key(id, v)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 'eleven', 0);\n  update gh_ost_test set updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13,  'thirteen', 0);\n  update gh_ost_test set updated = 1 where i = 13 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 17, 'seventeen', 0);\n  update gh_ost_test set updated = 1 where i = 17 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 19, 'nineteen', 0);\n  update gh_ost_test set updated = 1 where i = 19 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 23, 'twenty three', 0);\n  update gh_ost_test set updated = 1 where i = 23 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 29, 'twenty nine', 0);\n  insert into gh_ost_test values (null, 31, 'thirty one', 0);\n  insert into gh_ost_test values (null, 37, 'thirty seven', 0);\n  insert into gh_ost_test values (null, 41, 'forty one', 0);\n  delete from gh_ost_test where i = 31 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/compound-pk-ts/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts0 timestamp(6) default current_timestamp(6),\n  updated tinyint unsigned default 0,\n  primary key(id, ts0)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, sysdate(6), 0);\n  update gh_ost_test set updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13,  sysdate(6), 0);\n  update gh_ost_test set updated = 1 where i = 13 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 17, sysdate(6), 0);\n  update gh_ost_test set updated = 1 where i = 17 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 19, sysdate(6), 0);\n  update gh_ost_test set updated = 1 where i = 19 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 23, sysdate(6), 0);\n  update gh_ost_test set updated = 1 where i = 23 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 29, sysdate(6), 0);\n  insert into gh_ost_test values (null, 31, sysdate(6), 0);\n  insert into gh_ost_test values (null, 37, sysdate(6), 0);\n  insert into gh_ost_test values (null, 41, sysdate(6), 0);\n  delete from gh_ost_test where i = 31 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/convert-utf8mb4/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t varchar(128) charset utf8 collate utf8_general_ci,\n  tl varchar(128) charset latin1 not null,\n  ta varchar(128) charset ascii not null,\n  primary key(id)\n) auto_increment=1;\n\ninsert into gh_ost_test values (null, 'Hello world, Καλημέρα κόσμε, コンニチハ', 'átesting0', 'initial');\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()), 'átesting-a', 'a');\n  insert into gh_ost_test values (null, 'novo proprietário', 'átesting-b', 'b');\n  insert into gh_ost_test values (null, '2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm', 'átesting-c', 'c');\n  insert into gh_ost_test values (null, 'usuário', 'átesting-x', 'x');\n\n  delete from gh_ost_test where ta='x' order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/convert-utf8mb4/extra_args",
    "content": "--alter='convert to character set utf8mb4'\n"
  },
  {
    "path": "localtests/copy-retries-exhausted/after.sql",
    "content": "set global max_binlog_cache_size = 1073741824; -- 1GB\n"
  },
  {
    "path": "localtests/copy-retries-exhausted/before.sql",
    "content": "set global max_binlog_cache_size = 1024;\n"
  },
  {
    "path": "localtests/copy-retries-exhausted/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  name mediumtext not null,\n  primary key (id)\n) auto_increment=1;\n\ninsert into gh_ost_test (name)\nselect repeat('a', 1500)\nfrom information_schema.columns\ncross join information_schema.tables\nlimit 1000;\n"
  },
  {
    "path": "localtests/copy-retries-exhausted/expect_failure",
    "content": "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage\n"
  },
  {
    "path": "localtests/copy-retries-exhausted/extra_args",
    "content": "--alter \"modify column name mediumtext\" --default-retries=1 --chunk-size=1000\n"
  },
  {
    "path": "localtests/datetime/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  dt0 datetime default current_timestamp,\n  dt1 datetime,\n  dt2 datetime,\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, null, now(), now(), 0);\n  update gh_ost_test set dt2=now() + interval 1 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, null, now(), now(), 0);\n  update gh_ost_test set dt2=now() + interval 1 minute, updated = 1 where i = 13 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 17, null, now(), now(), 0);\n  update gh_ost_test set dt2=now() + interval 1 minute, updated = 1 where i = 17 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 19, null, now(), now(), 0);\n  update gh_ost_test set dt2=now() + interval 1 minute, updated = 1 where i = 19 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 23, null, now(), now(), 0);\n  update gh_ost_test set dt2=now() + interval 1 minute, updated = 1 where i = 23 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/datetime-1970/create.sql",
    "content": "set session time_zone='+00:00';\n\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  create_time timestamp NULL DEFAULT '0000-00-00 00:00:00',\n  update_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n  counter int(10) unsigned DEFAULT NULL,\n  primary key(id)\n) auto_increment=1;\n\nset session time_zone='+00:00';\ninsert into gh_ost_test values (1, '0000-00-00 00:00:00', now(), 0);\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  set session time_zone='+00:00';\n  update gh_ost_test set counter = counter + 1 where id = 1;\nend ;;\n"
  },
  {
    "path": "localtests/datetime-1970/extra_args",
    "content": "--alter='add column name varchar(1)'\n"
  },
  {
    "path": "localtests/datetime-1970/ghost_columns",
    "content": "id, create_time, update_time, counter\n"
  },
  {
    "path": "localtests/datetime-1970/orig_columns",
    "content": "id, create_time, update_time, counter\n"
  },
  {
    "path": "localtests/datetime-1970/sql_mode",
    "content": ""
  },
  {
    "path": "localtests/datetime-submillis/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  dt0 datetime(6),\n  dt1 datetime(6),\n  ts2 timestamp(6),\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  disable on slave\n  do\nbegin\n  insert into gh_ost_test values (null, 11, now(), now(), now(), 0);\n  update gh_ost_test set dt1='2016-10-31 11:22:33.444', updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, now(), now(), now(), 0);\n  update gh_ost_test set ts1='2016-11-01 11:22:33.444', updated = 1 where i = 13 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/datetime-submillis-zeroleading/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  dt0 datetime(6),\n  dt1 datetime(6),\n  ts2 timestamp(6),\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, '2016-10-31 11:22:33.0123', now(), '2016-10-31 11:22:33.0369', 0);\n  update gh_ost_test set dt1='2016-10-31 11:22:33.0246', updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, '2016-10-31 11:22:33.0123', '2016-10-31 11:22:33.789', '2016-10-31 11:22:33.0369', 0);\nend ;;\n"
  },
  {
    "path": "localtests/datetime-to-timestamp/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int unsigned auto_increment,\n  i int not null,\n  ts0 timestamp default current_timestamp,\n  ts1 timestamp null,\n  dt2 datetime,\n  t   datetime null,\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, null, now(), now(), '2010-10-20 10:20:30', 0);\n\n  insert into gh_ost_test values (null, 11, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set dt2=now() + interval 1 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set t=t + interval 1 minute, updated = 1 where i = 13 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/datetime-to-timestamp/extra_args",
    "content": "--alter=\"change column t t timestamp null\"\n"
  },
  {
    "path": "localtests/datetime-to-timestamp-pk-fail/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int unsigned auto_increment,\n  i int not null,\n  ts0 timestamp default current_timestamp,\n  ts1 timestamp null,\n  dt2 datetime,\n  t   datetime default current_timestamp,\n  updated tinyint unsigned default 0,\n  primary key(id, t),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, null, now(), now(), '2010-10-20 10:20:30', 0);\n\n  insert into gh_ost_test values (null, 11, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set dt2=now() + interval 1 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set t=t + interval 1 minute, updated = 1 where i = 13 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/datetime-to-timestamp-pk-fail/expect_failure",
    "content": "No support at this time for converting a column from DATETIME to TIMESTAMP that is also part of the chosen unique key\n"
  },
  {
    "path": "localtests/datetime-to-timestamp-pk-fail/extra_args",
    "content": "--alter=\"change column t t timestamp default current_timestamp\"\n"
  },
  {
    "path": "localtests/datetime-with-zero/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int unsigned auto_increment,\n  i int not null,\n  dt datetime,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, '2010-10-20 10:20:30');\nend ;;\n"
  },
  {
    "path": "localtests/datetime-with-zero/extra_args",
    "content": "--allow-zero-in-date --alter=\"change column dt dt datetime not null default '1970-00-00 00:00:00'\"\n"
  },
  {
    "path": "localtests/decimal/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  dec0 decimal(65,30) unsigned NOT NULL DEFAULT '0.000000000000000000000000000000',\n  dec1 decimal(65,30) unsigned NOT NULL DEFAULT '1.000000000000000000000000000000',\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 0.0, 0.0);\n  insert into gh_ost_test values (null, 2.0, 4.0);\n  insert into gh_ost_test values (null, 99999999999999999999999999999999999.000, 6.0);\n  update gh_ost_test set dec1=4.5 where dec2=4.0 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/discard-fk/create.sql",
    "content": "drop table if exists gh_ost_test_child;\ndrop table if exists gh_ost_test;\ndrop table if exists gh_ost_test_fk_parent;\ncreate table gh_ost_test_fk_parent (\n  id int auto_increment,\n  ts timestamp,\n  primary key(id)\n);\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  parent_id int not null,\n  primary key(id),\n  constraint test_fk foreign key (parent_id) references gh_ost_test_fk_parent (id) on delete no action\n) auto_increment=1;\n\ninsert into gh_ost_test_fk_parent (id) values (1),(2),(3);\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 1);\n  insert into gh_ost_test values (null, 13, 2);\n  insert into gh_ost_test values (null, 17, 3);\nend ;;\n"
  },
  {
    "path": "localtests/discard-fk/extra_args",
    "content": "--discard-foreign-keys\n"
  },
  {
    "path": "localtests/discard-fk/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/docker-compose.yml",
    "content": "services:\n  mysql-primary:\n    image: $TEST_MYSQL_IMAGE\n    container_name: mysql-primary\n    command: --server-id=1 --log-bin=mysql-bin --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON --character-set-server=utf8mb4 $MYSQL_NATIVE_PASSWORD_FLAG\n    environment:\n      MYSQL_ROOT_PASSWORD: opensesame\n      MYSQL_ROOT_HOST: '%'\n      MYSQL_DATABASE: test\n      MYSQL_TCP_PORT: 3307\n      INIT_ROCKSDB: 1 # for percona-server\n    ports:\n      - '3307:3307'\n    expose:\n      - '3307'\n  mysql-replica:\n    image: $TEST_MYSQL_IMAGE\n    container_name: mysql-replica\n    command: --server-id=2 --log-bin=mysql-bin --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON --log-slave-updates=ON --character-set-server=utf8mb4 $MYSQL_NATIVE_PASSWORD_FLAG\n    environment:\n      MYSQL_ROOT_PASSWORD: opensesame\n      MYSQL_ROOT_HOST: '%'\n      MYSQL_DATABASE: test\n      MYSQL_TCP_PORT: 3308\n      INIT_ROCKSDB: 1 # for percona-server\n    ports:\n      - '3308:3308'\n    expose:\n      - '3308'\n"
  },
  {
    "path": "localtests/drop-null-add-not-null/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int null,\n  c2 int not null,\n  primary key (id)\n) auto_increment=1;\n\ninsert into gh_ost_test values (null, null, 17);\ninsert into gh_ost_test values (null, null, 19);\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values (101, 11, 23);\n  insert ignore into gh_ost_test values (102, 13, 23);\n  insert into gh_ost_test values (null, 17, 23);\n  insert into gh_ost_test values (null, null, 29);\n  set @last_insert_id := last_insert_id();\n  -- update gh_ost_test set c2=c2+@last_insert_id where id=@last_insert_id order by id desc limit 1;\n  delete from gh_ost_test where id=1;\n  delete from gh_ost_test where c1=13; -- id=2\nend ;;\n"
  },
  {
    "path": "localtests/drop-null-add-not-null/extra_args",
    "content": "--alter=\"drop column c1, add column c1 int not null default 47\"\n"
  },
  {
    "path": "localtests/drop-null-add-not-null/ghost_columns",
    "content": "c2\n"
  },
  {
    "path": "localtests/drop-null-add-not-null/orig_columns",
    "content": "c2\n"
  },
  {
    "path": "localtests/enum/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  e enum('red', 'green', 'blue', 'orange') null default null collate 'utf8_bin',\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 'red');\n  insert into gh_ost_test values (null, 13, 'green');\n  insert into gh_ost_test values (null, 17, 'blue');\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set e='orange' where id = @last_insert_id;\n  insert into gh_ost_test values (null, 23, null);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set i=i+1, e=null where id = @last_insert_id;\nend ;;\n"
  },
  {
    "path": "localtests/enum/extra_args",
    "content": "--alter=\"change e e enum('red', 'green', 'blue', 'orange', 'yellow') null default null collate 'utf8_bin'\" \n"
  },
  {
    "path": "localtests/enum-pk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  e enum('red', 'green', 'blue', 'orange') not null default 'red' collate 'utf8_bin',\n  primary key(id, e)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 'red');\n  set @last_insert_id := last_insert_id();\n  insert into gh_ost_test values (@last_insert_id, 11, 'green');\n  insert into gh_ost_test values (null, 13, 'green');\n  insert into gh_ost_test values (null, 17, 'blue');\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set e='orange' where id = @last_insert_id;\n  insert into gh_ost_test values (null, 23, null);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set i=i+1, e=null where id = @last_insert_id;\nend ;;\n"
  },
  {
    "path": "localtests/enum-to-varchar/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  e enum('red', 'green', 'blue', 'orange') null default null collate 'utf8_bin',\n  primary key(id)\n) auto_increment=1;\n\ninsert into gh_ost_test values (null, 7, 'red');\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 'red');\n  insert into gh_ost_test values (null, 13, 'green');\n  insert into gh_ost_test values (null, 17, 'blue');\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set e='orange' where id = @last_insert_id;\nend ;;\n"
  },
  {
    "path": "localtests/enum-to-varchar/extra_args",
    "content": "--alter=\"change e e varchar(32) not null default ''\" \n"
  },
  {
    "path": "localtests/existing-datetime-with-zero/create.sql",
    "content": "set session sql_mode='';\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int unsigned auto_increment,\n  i int not null,\n  dt datetime not null default '1970-00-00 00:00:00',\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, '2010-10-20 10:20:30');\nend ;;\n"
  },
  {
    "path": "localtests/existing-datetime-with-zero/extra_args",
    "content": "--allow-zero-in-date --alter=\"engine=innodb\"\n"
  },
  {
    "path": "localtests/fail-datetime-with-zero/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int unsigned auto_increment,\n  i int not null,\n  dt datetime,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, '2010-10-20 10:20:30');\nend ;;\n"
  },
  {
    "path": "localtests/fail-datetime-with-zero/expect_failure",
    "content": "Invalid default value for 'dt'\n"
  },
  {
    "path": "localtests/fail-datetime-with-zero/extra_args",
    "content": "--alter=\"change column dt dt datetime not null default '1970-00-00 00:00:00'\"\n"
  },
  {
    "path": "localtests/fail-drop-pk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts timestamp,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, now());\n  insert into gh_ost_test values (null, 13, now());\n  insert into gh_ost_test values (null, 17, now());\nend ;;\n"
  },
  {
    "path": "localtests/fail-drop-pk/expect_failure",
    "content": "No PRIMARY nor UNIQUE key found in table\n"
  },
  {
    "path": "localtests/fail-drop-pk/extra_args",
    "content": "--alter=\"change id id int, drop primary key\" \n"
  },
  {
    "path": "localtests/fail-existing-datetime-with-zero/create.sql",
    "content": "set session sql_mode='';\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int unsigned auto_increment,\n  i int not null,\n  dt datetime not null default '1970-00-00 00:00:00',\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, '2010-10-20 10:20:30');\nend ;;\n"
  },
  {
    "path": "localtests/fail-existing-datetime-with-zero/expect_failure",
    "content": "Invalid default value for 'dt'\n"
  },
  {
    "path": "localtests/fail-existing-datetime-with-zero/extra_args",
    "content": "--alter=\"engine=innodb\"\n"
  },
  {
    "path": "localtests/fail-fk/create.sql",
    "content": "drop table if exists gh_ost_test_child;\ndrop table if exists gh_ost_test;\ndrop table if exists gh_ost_test_fk_parent;\ncreate table gh_ost_test_fk_parent (\n  id int auto_increment,\n  ts timestamp,\n  primary key(id)\n);\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  parent_id int not null,\n  primary key(id),\n  constraint test_fk foreign key (parent_id) references gh_ost_test_fk_parent (id) on delete no action\n) auto_increment=1;\n\ninsert into gh_ost_test_fk_parent (id) values (1),(2),(3);\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 1);\n  insert into gh_ost_test values (null, 13, 2);\n  insert into gh_ost_test values (null, 17, 3);\nend ;;\n"
  },
  {
    "path": "localtests/fail-fk/expect_failure",
    "content": "Child-side foreign keys are not supported. Bailing out\n"
  },
  {
    "path": "localtests/fail-fk/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/fail-fk-parent/create.sql",
    "content": "drop table if exists gh_ost_test_child;\ndrop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  primary key(id)\n) engine=innodb auto_increment=1;\n\ncreate table gh_ost_test_child (\n  id int auto_increment,\n  i int not null,\n  parent_id int not null,\n  constraint test_fk foreign key (parent_id) references gh_ost_test (id) on delete no action,\n  primary key(id)\n) engine=innodb;\ninsert into gh_ost_test (id) values (1),(2),(3);\n\ndrop event if exists gh_ost_test;\ndrop event if exists gh_ost_test_cleanup;\n\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test_child values (null, 11, 1);\n  insert into gh_ost_test_child values (null, 13, 2);\n  insert into gh_ost_test_child values (null, 17, 3);\nend ;;\n\ncreate event gh_ost_test_cleanup\n  on schedule at current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  drop table if exists gh_ost_test_child;\nend ;;\n"
  },
  {
    "path": "localtests/fail-fk-parent/destroy.sql",
    "content": "drop table if exists gh_ost_test_child;\n"
  },
  {
    "path": "localtests/fail-fk-parent/expect_failure",
    "content": "Parent-side foreign keys are not supported\n"
  },
  {
    "path": "localtests/fail-fk-parent/extra_args",
    "content": "--discard-foreign-keys\n"
  },
  {
    "path": "localtests/fail-fk-parent/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/fail-float-unique-key/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  f float,\n  i int not null,\n  ts timestamp default current_timestamp,\n  dt datetime,\n  key i_idx(i),\n  unique key f_uidx(f)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\n"
  },
  {
    "path": "localtests/fail-float-unique-key/expect_failure",
    "content": "No shared unique key can be found\n"
  },
  {
    "path": "localtests/fail-float-unique-key/extra_args",
    "content": "--alter=\"add column v varchar(32)\"\n"
  },
  {
    "path": "localtests/fail-no-shared-uk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int not null,\n  i int not null,\n  ts timestamp,\n  primary key(id)\n);\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, now());\n  insert into gh_ost_test values (null, 13, now());\n  insert into gh_ost_test values (null, 17, now());\nend ;;\n"
  },
  {
    "path": "localtests/fail-no-shared-uk/expect_failure",
    "content": "No shared unique key can be found after ALTER\n"
  },
  {
    "path": "localtests/fail-no-shared-uk/extra_args",
    "content": "--alter=\"drop primary key, add primary key (i)\" \n"
  },
  {
    "path": "localtests/fail-no-unique-key/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  i int not null,\n  ts timestamp default current_timestamp,\n  dt datetime,\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\n"
  },
  {
    "path": "localtests/fail-no-unique-key/expect_failure",
    "content": "No PRIMARY nor UNIQUE key found in table\n"
  },
  {
    "path": "localtests/fail-no-unique-key/extra_args",
    "content": "--alter=\"add column v varchar(32)\"\n"
  },
  {
    "path": "localtests/fail-rename-table/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts timestamp,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, now());\n  insert into gh_ost_test values (null, 13, now());\n  insert into gh_ost_test values (null, 17, now());\nend ;;\n"
  },
  {
    "path": "localtests/fail-rename-table/expect_failure",
    "content": "ALTER statement seems to RENAME the table\n"
  },
  {
    "path": "localtests/fail-rename-table/extra_args",
    "content": "--alter=\"rename as something_else\" \n"
  },
  {
    "path": "localtests/fail-update-pk-column/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\ninsert into gh_ost_test values (null, 101);\ninsert into gh_ost_test values (null, 102);\ninsert into gh_ost_test values (null, 103);\ninsert into gh_ost_test values (null, 104);\ninsert into gh_ost_test values (null, 105);\ninsert into gh_ost_test values (null, 106);\ninsert into gh_ost_test values (null, 107);\ninsert into gh_ost_test values (null, 108);\ninsert into gh_ost_test values (null, 109);\ninsert into gh_ost_test values (null, 110);\ninsert into gh_ost_test values (null, 111);\ninsert into gh_ost_test values (null, 112);\ninsert into gh_ost_test values (null, 113);\ninsert into gh_ost_test values (null, 114);\ninsert into gh_ost_test values (null, 115);\ninsert into gh_ost_test values (null, 116);\ninsert into gh_ost_test values (null, 117);\ninsert into gh_ost_test values (null, 118);\ninsert into gh_ost_test values (null, 119);\ninsert into gh_ost_test values (null, 120);\ninsert into gh_ost_test values (null, 121);\ninsert into gh_ost_test values (null, 122);\ninsert into gh_ost_test values (null, 123);\ninsert into gh_ost_test values (null, 124);\ninsert into gh_ost_test values (null, 125);\ninsert into gh_ost_test values (null, 126);\ninsert into gh_ost_test values (null, 127);\ninsert into gh_ost_test values (null, 128);\ninsert into gh_ost_test values (null, 129);\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp + interval 3 second\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  update gh_ost_test set id=-2 where id=21;\n  update gh_ost_test set id=55 where id=22;\n  update gh_ost_test set id=23 where id=23;\n  update gh_ost_test set i=5024 where id=24;\nend ;;\n"
  },
  {
    "path": "localtests/gbk-charset/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int(11) NOT NULL AUTO_INCREMENT,\n  name varchar(512) DEFAULT NULL,\n  v varchar(255) DEFAULT NULL COMMENT '添加普通列测试',\n  PRIMARY KEY (id)\n) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=gbk;\n\ninsert into gh_ost_test values (null, 'gbk-test-initial', '添加普通列测试-添加普通列测试');\ninsert into gh_ost_test values (null, 'gbk-test-initial', '添加普通列测试-添加普通列测试');\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test (name) values ('gbk-test-default');\n  insert into gh_ost_test values (null, 'gbk-test', '添加普通列测试-添加普通列测试');\n  update gh_ost_test set v='添加普通列测试' where v='添加普通列测试-添加普通列测试' order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/gbk-charset/extra_args",
    "content": ""
  },
  {
    "path": "localtests/generated-columns/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  a int not null,\n  b int not null,\n  sum_ab int as (a + b) virtual not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test (id, a, b) values (null, 2,3);\n  insert into gh_ost_test (id, a, b) values (null, 2,4);\n  insert into gh_ost_test (id, a, b) values (null, 2,5);\n  insert into gh_ost_test (id, a, b) values (null, 2,6);\n  insert into gh_ost_test (id, a, b) values (null, 2,7);\n  insert into gh_ost_test (id, a, b) values (null, 2,8);\n  insert into gh_ost_test (id, a, b) values (null, 2,9);\n  insert into gh_ost_test (id, a, b) values (null, 2,0);\n  insert into gh_ost_test (id, a, b) values (null, 2,1);\n  insert into gh_ost_test (id, a, b) values (null, 2,2);\n  update gh_ost_test set b=b+1 where id < 5;\n  update gh_ost_test set b=b-1 where id >= 5;\nend ;;\n"
  },
  {
    "path": "localtests/generated-columns/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/generated-columns-add/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  a int not null,\n  b int not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test (id, a, b) values (null, 2,3);\n  insert into gh_ost_test (id, a, b) values (null, 2,4);\n  insert into gh_ost_test (id, a, b) values (null, 2,5);\n  insert into gh_ost_test (id, a, b) values (null, 2,6);\n  insert into gh_ost_test (id, a, b) values (null, 2,7);\n  insert into gh_ost_test (id, a, b) values (null, 2,8);\n  insert into gh_ost_test (id, a, b) values (null, 2,9);\n  insert into gh_ost_test (id, a, b) values (null, 2,0);\n  insert into gh_ost_test (id, a, b) values (null, 2,1);\n  insert into gh_ost_test (id, a, b) values (null, 2,2);\nend ;;\n"
  },
  {
    "path": "localtests/generated-columns-add/extra_args",
    "content": "--alter=\"add column sum_ab int as (a + b) virtual not null\"\n"
  },
  {
    "path": "localtests/generated-columns-add/ghost_columns",
    "content": "id, a, b\n"
  },
  {
    "path": "localtests/generated-columns-add/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/generated-columns-add/order_by",
    "content": "id\n"
  },
  {
    "path": "localtests/generated-columns-add/orig_columns",
    "content": "id, a, b\n"
  },
  {
    "path": "localtests/generated-columns-rename/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  a int not null,\n  b int not null,\n  sum_ab int as (a + b) virtual not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test (id, a, b) values (null, 2,3);\n  insert into gh_ost_test (id, a, b) values (null, 2,4);\n  insert into gh_ost_test (id, a, b) values (null, 2,5);\n  insert into gh_ost_test (id, a, b) values (null, 2,6);\n  insert into gh_ost_test (id, a, b) values (null, 2,7);\n  insert into gh_ost_test (id, a, b) values (null, 2,8);\n  insert into gh_ost_test (id, a, b) values (null, 2,9);\n  insert into gh_ost_test (id, a, b) values (null, 2,0);\n  insert into gh_ost_test (id, a, b) values (null, 2,1);\n  insert into gh_ost_test (id, a, b) values (null, 2,2);\nend ;;\n"
  },
  {
    "path": "localtests/generated-columns-rename/extra_args",
    "content": "--alter=\"change sum_ab total_ab int as (a + b) virtual not null\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/generated-columns-rename/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/generated-columns-unique/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  `idb` varchar(36) CHARACTER SET utf8mb4 GENERATED ALWAYS AS (json_unquote(json_extract(`jsonobj`,_utf8mb4'$._id'))) STORED NOT NULL,\n  `jsonobj` json NOT NULL,\n  updated datetime DEFAULT NULL,\n  PRIMARY KEY (`id`,`idb`)\n) auto_increment=1;\n\ninsert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":2}');\ninsert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":3}');\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":5}');\n  insert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":7}');\n  insert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":11}');\n  insert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":13}');\n  insert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":17}');\n  insert into gh_ost_test (id, jsonobj) values (null, '{\"_id\":19}');\n\n  update gh_ost_test set updated=NOW() where idb=5;\n  update gh_ost_test set updated=NOW() where idb=7;\n  update gh_ost_test set updated=NOW() where idb=11;\n  update gh_ost_test set updated=NOW() where idb=13;\n  update gh_ost_test set updated=NOW() where idb=17;\n  update gh_ost_test set updated=NOW() where idb=19;\nend ;;\n"
  },
  {
    "path": "localtests/generated-columns-unique/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/geometry/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  g geometry,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, ST_GeomFromText('POINT(1 1)'));\n  insert into gh_ost_test values (null, ST_GeomFromText('POINT(2 2)'));\n  insert into gh_ost_test values (null, ST_GeomFromText('POINT(3 3)'));\nend ;;\n"
  },
  {
    "path": "localtests/geometry/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/gtid/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t varchar(128) charset utf8mb4,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()));\nend ;;\n"
  },
  {
    "path": "localtests/gtid/extra_args",
    "content": "--gtid\n"
  },
  {
    "path": "localtests/gtid/gtid_mode",
    "content": "ON\n"
  },
  {
    "path": "localtests/gtid/ignore_versions",
    "content": "(5.5)\n"
  },
  {
    "path": "localtests/json/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  j json,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, '\"sometext\"');\n  insert into gh_ost_test values (null, '{\"key\":\"val\"}');\n  insert into gh_ost_test values (null, '{\"is-it\": true, \"count\": 3, \"elements\": []}');\nend ;;\n"
  },
  {
    "path": "localtests/json-dml/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  updated tinyint not null default 0,\n  j json,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test (id, i, j) values (null, 11, '\"sometext\"');\n  insert into gh_ost_test (id, i, j) values (null, 13, '{\"key\":\"val\"}');\n  insert into gh_ost_test (id, i, j) values (null, 17, '{\"is-it\": true, \"count\": 3, \"elements\": []}');\n  insert into gh_ost_test (id, i, j) values (null, 19, '{\"text\":\"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia. Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi. Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac\"}');\n\n  update gh_ost_test set j = '{\"updated\": 11}', updated = 1 where i = 11 and updated = 0;\n  update gh_ost_test set j = json_set(j, '$.count', 13, '$.id', id), updated = 1 where i = 13 and updated = 0;\n  delete from gh_ost_test where i = 17;\nend ;;\n"
  },
  {
    "path": "localtests/keyword-column/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  color varchar(32),\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\n\ninsert into gh_ost_test values (null, 11, 'red');\ninsert into gh_ost_test values (null, 13, 'green');\ninsert into gh_ost_test values (null, 17, 'blue');\n"
  },
  {
    "path": "localtests/keyword-column/extra_args",
    "content": "--alter='add column `index` int unsigned'\n"
  },
  {
    "path": "localtests/keyword-column/ghost_columns",
    "content": "id, i, color\n"
  },
  {
    "path": "localtests/keyword-column/orig_columns",
    "content": "id, i, color\n"
  },
  {
    "path": "localtests/latin1/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t varchar(128) charset latin1 collate latin1_swedish_ci,\n  primary key(id)\n) auto_increment=1 charset latin1 collate latin1_swedish_ci;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()));\n  insert into gh_ost_test values (null, 'átesting');\n  insert into gh_ost_test values (null, 'ádelete');\n  insert into gh_ost_test values (null, 'testátest');\n  update gh_ost_test set t='áupdated' order by id desc limit 1;\n  update gh_ost_test set t='áupdated1' where t='áupdated' order by id desc limit 1;\n  delete from gh_ost_test where t='ádelete';\nend ;;\n"
  },
  {
    "path": "localtests/latin1text/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t text charset latin1 collate latin1_swedish_ci,\n  primary key(id)\n) auto_increment=1 charset latin1 collate latin1_swedish_ci;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()));\n  insert into gh_ost_test values (null, 'átesting');\n  insert into gh_ost_test values (null, 'ádelete');\n  insert into gh_ost_test values (null, 'testátest');\n  update gh_ost_test set t='áupdated' order by id desc limit 1;\n  update gh_ost_test set t='áupdated1' where t='áupdated' order by id desc limit 1;\n  delete from gh_ost_test where t='ádelete';\nend ;;\n"
  },
  {
    "path": "localtests/mixed-charset/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t varchar(128)  charset latin1 collate latin1_swedish_ci,\n  tutf8 varchar(128) charset utf8,\n  tutf8mb4 varchar(128) charset utf8mb4,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()), md5(rand()), md5(rand()));\n  insert into gh_ost_test values (null, 'átesting', 'átesting', 'átesting');\n  insert into gh_ost_test values (null, 'testátest', 'testátest', '🍻😀');\nend ;;\n"
  },
  {
    "path": "localtests/modify-change-case/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null default 0,\n  c2 int not null default 0,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values (1, 11, 23);\n  insert ignore into gh_ost_test values (2, 13, 23);\n  insert into gh_ost_test values (null, 17, 23);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set c1=c1+@last_insert_id, c2=c2+@last_insert_id where id=@last_insert_id order by id desc limit 1;\n  delete from gh_ost_test where id=1;\n  delete from gh_ost_test where c1=13; -- id=2\nend ;;\n"
  },
  {
    "path": "localtests/modify-change-case/extra_args",
    "content": "--alter=\"modify C2 int not null default 0\"\n"
  },
  {
    "path": "localtests/modify-change-case-pk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null default 0,\n  c2 int not null default 0,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values (1, 11, 23);\n  insert ignore into gh_ost_test values (2, 13, 23);\n  insert into gh_ost_test values (null, 17, 23);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set c1=c1+@last_insert_id, c2=c2+@last_insert_id where id=@last_insert_id order by id desc limit 1;\n  delete from gh_ost_test where id=1;\n  delete from gh_ost_test where c1=13; -- id=2\nend ;;\n"
  },
  {
    "path": "localtests/modify-change-case-pk/expect_failure",
    "content": "No shared unique key can be found after ALTER\n"
  },
  {
    "path": "localtests/modify-change-case-pk/extra_args",
    "content": "--alter=\"modify ID int\"\n"
  },
  {
    "path": "localtests/panic-on-warnings-duplicate-unique-values-on-column-type-change/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  name varchar(255) not null,\n  primary key (id)\n) auto_increment=1;\n\ncreate unique index name_index on gh_ost_test (name);\n\ninsert into gh_ost_test (`name`) values ('John Smith');\ninsert into gh_ost_test (`name`) values ('John Travolta');\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values ('John ' || last_insert_id());\n  insert ignore into gh_ost_test values ('Adam ' || last_insert_id());\nend ;;\n"
  },
  {
    "path": "localtests/panic-on-warnings-duplicate-unique-values-on-column-type-change/expect_failure",
    "content": "Warning: Duplicate entry 'John' for key\nWarning: Duplicate entry 'John' for key"
  },
  {
    "path": "localtests/panic-on-warnings-duplicate-unique-values-on-column-type-change/extra_args",
    "content": "--panic-on-warnings --alter \"modify column name varchar(4) not null\""
  },
  {
    "path": "localtests/panic-on-warnings-duplicate-values-for-unique-index/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  name varchar(255) not null,\n  primary key (id)\n) auto_increment=1;\n\ninsert into gh_ost_test (`name`) values ('John');\ninsert into gh_ost_test (`name`) values ('John');\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values ('John ' || last_insert_id());\n  insert ignore into gh_ost_test values ('Adam ' || last_insert_id());\nend ;;\n"
  },
  {
    "path": "localtests/panic-on-warnings-duplicate-values-for-unique-index/expect_failure",
    "content": "Warning: Duplicate entry 'John'"
  },
  {
    "path": "localtests/panic-on-warnings-duplicate-values-for-unique-index/extra_args",
    "content": "--panic-on-warnings --alter \"add unique index name_index(name)\""
  },
  {
    "path": "localtests/panic-on-warnings-update-pk-with-duplicate-on-new-unique-index/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  email varchar(100) not null,\n  primary key (id)\n) auto_increment=1;\n\ninsert into gh_ost_test (email) values ('alice@example.com');\ninsert into gh_ost_test (email) values ('bob@example.com');\ninsert into gh_ost_test (email) values ('charlie@example.com');\n"
  },
  {
    "path": "localtests/panic-on-warnings-update-pk-with-duplicate-on-new-unique-index/expect_failure",
    "content": "Warnings detected during DML event application\n"
  },
  {
    "path": "localtests/panic-on-warnings-update-pk-with-duplicate-on-new-unique-index/extra_args",
    "content": "--panic-on-warnings --alter \"ADD UNIQUE KEY email_unique (email)\" --postpone-cut-over-flag-file=/tmp/gh-ost-test.postpone-cutover\n"
  },
  {
    "path": "localtests/panic-on-warnings-update-pk-with-duplicate-on-new-unique-index/test.sh",
    "content": "#!/bin/bash\n# Custom test: inject conflicting data AFTER row copy completes\n# This tests the DML event application code path, not row copy\n\n# Create postpone flag file (referenced in extra_args)\npostpone_flag_file=/tmp/gh-ost-test.postpone-cutover\ntouch $postpone_flag_file\n\n# Build gh-ost command using framework function\nbuild_ghost_command\n\n# Run in background\necho_dot\n# Clear log file before starting gh-ost\necho > $test_logfile\nbash -c \"$cmd\" >>$test_logfile 2>&1 &\nghost_pid=$!\n\n# Wait for row copy to complete\necho_dot\nrow_copy_complete=false\nfor i in {1..30}; do\n    if grep -q \"Row copy complete\" $test_logfile; then\n        row_copy_complete=true\n        break\n    fi\n    ps -p $ghost_pid > /dev/null || { echo; echo \"ERROR gh-ost exited early\"; rm -f $postpone_flag_file; return 1; }\n    sleep 1; echo_dot\ndone\n\nif ! $row_copy_complete; then\n    echo; echo \"ERROR row copy did not complete within expected time\"\n    rm -f $postpone_flag_file\n    return 1\nfi\n\n# Inject conflicting SQL after row copy (UPDATE with PK change creates DELETE+INSERT in binlog)\necho_dot\ngh-ost-test-mysql-master test -e \"update gh_ost_test set id = 200, email = 'alice@example.com' where id = 2\"\n\n# Wait for binlog event to replicate and be applied\nsleep 10; echo_dot\n\n# Complete cutover by removing postpone flag\nrm -f $postpone_flag_file\n\n# Wait for gh-ost to complete\nwait $ghost_pid\nexecution_result=$?\nrm -f $postpone_flag_file\n\n# Validate using framework function\nvalidate_expected_failure\nreturn $?\n"
  },
  {
    "path": "localtests/rename/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null,\n  c2 int not null,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values (1, 11, 23);\n  insert ignore into gh_ost_test values (2, 13, 23);\n  insert into gh_ost_test values (null, 17, 23);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set c1=c1+@last_insert_id, c2=c2+@last_insert_id where id=@last_insert_id order by id desc limit 1;\n  delete from gh_ost_test where id=1;\n  delete from gh_ost_test where c1=13; -- id=2\nend ;;\n"
  },
  {
    "path": "localtests/rename/extra_args",
    "content": "--alter=\"change column c2 c3 int not null\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/rename-inserts-only/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null,\n  c2 int not null,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, 23);\n  insert into gh_ost_test values (null, 13, 23);\n  insert into gh_ost_test values (null, floor(rand()*pow(2,32)), floor(rand()*pow(2,32)));\nend ;;\n"
  },
  {
    "path": "localtests/rename-inserts-only/extra_args",
    "content": "--alter=\"change column c2 c3 int not null\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/rename-none-column/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\n"
  },
  {
    "path": "localtests/rename-none-column/extra_args",
    "content": "--alter=\"add column exchange double comment 'exchange rate used for pay in your own currency'\"\n"
  },
  {
    "path": "localtests/rename-none-comment/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\n"
  },
  {
    "path": "localtests/rename-none-comment/extra_args",
    "content": "--alter=\"add column exchange_rate double comment 'change rate used for pay in your own currency'\"\n"
  },
  {
    "path": "localtests/rename-reorder-column/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null,\n  c2 int not null,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values (1, 11, 23);\n  insert ignore into gh_ost_test values (2, 13, 23);\n  insert into gh_ost_test values (null, 17, 23);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set c1=c1+@last_insert_id, c2=c2+@last_insert_id where id=@last_insert_id order by id desc limit 1;\n  delete from gh_ost_test where id=1;\n  delete from gh_ost_test where c1=13; -- id=2\nend ;;\n"
  },
  {
    "path": "localtests/rename-reorder-column/extra_args",
    "content": "--alter=\"change column c2 c2a int not null after id\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/rename-reorder-column/ghost_columns",
    "content": "id, c1, c2a\n"
  },
  {
    "path": "localtests/rename-reorder-column/orig_columns",
    "content": "id, c1, c2\n"
  },
  {
    "path": "localtests/rename-reorder-columns/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null,\n  c2 int not null,\n  c3 int not null,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values (1, 11, 23, 97);\n  insert ignore into gh_ost_test values (2, 13, 27, 61);\n  insert into gh_ost_test values (null, 17, 31, 53);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set c1=c1+@last_insert_id, c2=c2+@last_insert_id, c3=c3+@last_insert_id where id=@last_insert_id order by id desc limit 1;\n  delete from gh_ost_test where id=1;\n  delete from gh_ost_test where c1=13; -- id=2\nend ;;\n"
  },
  {
    "path": "localtests/rename-reorder-columns/extra_args",
    "content": "--alter=\"change column c2 c2a int not null, change column c3 c3 int not null after id\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/rename-reorder-columns/ghost_columns",
    "content": "id, c1, c2a, c3\n"
  },
  {
    "path": "localtests/rename-reorder-columns/orig_columns",
    "content": "id, c1, c2, c3\n"
  },
  {
    "path": "localtests/reorder-columns/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  c1 int not null,\n  c2 int not null,\n  primary key (id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert ignore into gh_ost_test values (1, 11, 23);\n  insert ignore into gh_ost_test values (2, 13, 29);\n  insert into gh_ost_test values (null, 17, 31);\n  set @last_insert_id := last_insert_id();\n  update gh_ost_test set c1=c1+@last_insert_id, c2=c2+@last_insert_id where id=@last_insert_id order by id desc limit 1;\n  delete from gh_ost_test where id=1;\n  delete from gh_ost_test where c1=13;\nend ;;\n"
  },
  {
    "path": "localtests/reorder-columns/extra_args",
    "content": "--alter=\"change column c2 c2 int not null after id\"\n"
  },
  {
    "path": "localtests/reorder-columns/ghost_columns",
    "content": "id, c1, c2\n"
  },
  {
    "path": "localtests/reorder-columns/orig_columns",
    "content": "id, c1, c2\n"
  },
  {
    "path": "localtests/shared-uk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts timestamp,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, now());\n  insert into gh_ost_test values (null, 13, now());\n  insert into gh_ost_test values (null, 17, now());\nend ;;\n"
  },
  {
    "path": "localtests/shared-uk/extra_args",
    "content": "--alter=\"drop primary key, add primary key (id, i)\" \n"
  },
  {
    "path": "localtests/spatial/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  g geometry,\n  pt point,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, ST_GeomFromText('POINT(1 1)'), POINT(10,10));\n  insert into gh_ost_test values (null, ST_GeomFromText('POINT(2 2)'), POINT(20,20));\n  insert into gh_ost_test values (null, ST_GeomFromText('POINT(3 3)'), POINT(30,30));\nend ;;\n"
  },
  {
    "path": "localtests/spatial/ignore_versions",
    "content": "Percona"
  },
  {
    "path": "localtests/swap-pk-uk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id bigint,\n  i int not null,\n  ts timestamp(6),\n  primary key(id),\n  unique key its_uidx(i, ts)\n) ;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 0, 11, now(6));\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 1, 13, now(6));\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 2, 17, now(6));\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 3, 19, now(6));\nend ;;\n"
  },
  {
    "path": "localtests/swap-pk-uk/extra_args",
    "content": "--alter=\"drop primary key, drop key its_uidx, add primary key (i, ts), add unique key id_uidx(id)\" \n"
  },
  {
    "path": "localtests/swap-pk-uk/order_by",
    "content": "id\n"
  },
  {
    "path": "localtests/swap-uk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts timestamp,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, now());\n  insert into gh_ost_test values (null, 13, now());\n  insert into gh_ost_test values (null, 17, now());\nend ;;\n"
  },
  {
    "path": "localtests/swap-uk/extra_args",
    "content": "--alter=\"drop primary key, add unique key(id)\" \n"
  },
  {
    "path": "localtests/swap-uk-uk/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id bigint not null,\n  i int not null,\n  ts timestamp(6) not null,\n  unique key id_uidx(id),\n  unique key its_uidx(i, ts)\n) ;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 0, 11, now(6));\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 1, 13, now(6));\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 2, 17, now(6));\n  insert into gh_ost_test values ((unix_timestamp() << 2) + 3, 19, now(6));\nend ;;\n"
  },
  {
    "path": "localtests/swap-uk-uk/extra_args",
    "content": "--panic-on-warnings --alter=\"drop key id_uidx, drop key its_uidx, add unique key its2_uidx(i, ts), add unique key id2_uidx(id)\"\n"
  },
  {
    "path": "localtests/swap-uk-uk/order_by",
    "content": "id\n"
  },
  {
    "path": "localtests/sysbench/create.sql",
    "content": "/* This table will get created by `sysbench prepare` */\n/*\nCREATE TABLE `sbtest1` (\n  `id` int NOT NULL AUTO_INCREMENT,\n  `k` int NOT NULL DEFAULT '0',\n  `c` char(120) NOT NULL DEFAULT '',\n  `pad` char(60) NOT NULL DEFAULT '',\n  PRIMARY KEY (`id`),\n  KEY `k_1` (`k`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;\n*/\n\nDROP TABLE IF EXISTS `sbtest1`;\n"
  },
  {
    "path": "localtests/test.sh",
    "content": "#!/bin/bash\n\n# Local integration tests. To be used by CI.\n# See https://github.com/github/gh-ost/tree/doc/local-tests.md\n#\n\n# Usage: localtests/test/sh [filter]\n# By default, runs all tests. Given filter, will only run tests matching given regep\n\ntests_path=$(dirname $0)\ntest_logfile=/tmp/gh-ost-test.log\ndefault_ghost_binary=/tmp/gh-ost-test\nghost_binary=\"\"\ndocker=false\ntoxiproxy=false\ngtid=false\nstorage_engine=innodb\nexec_command_file=/tmp/gh-ost-test.bash\nghost_structure_output_file=/tmp/gh-ost-test.ghost.structure.sql\norig_content_output_file=/tmp/gh-ost-test.orig.content.csv\nghost_content_output_file=/tmp/gh-ost-test.ghost.content.csv\nthrottle_flag_file=/tmp/gh-ost-test.ghost.throttle.flag\ntable_name=\nghost_table_name=\n\nmaster_host=\nmaster_port=\nreplica_host=\nreplica_port=\noriginal_sql_mode=\ncurrent_gtid_mode=\nsysbench_pid=\ntest_timeout=120\ntest_failure_log_tail_lines=50\n\nOPTIND=1\nwhile getopts \"b:s:dtg\" OPTION; do\n    case $OPTION in\n    b)\n        ghost_binary=\"$OPTARG\"\n        ;;\n    s)\n        storage_engine=\"$OPTARG\"\n        ;;\n    t)\n        toxiproxy=true\n        ;;\n    d)\n        docker=true\n        ;;\n    g)\n        gtid=true\n        ;;\n    esac\ndone\nshift $((OPTIND - 1))\n\ntest_pattern=\"${1:-.}\"\n\nverify_master_and_replica() {\n    if [ \"$(gh-ost-test-mysql-master -e \"select 1\" -ss)\" != \"1\" ]; then\n        echo \"Cannot verify gh-ost-test-mysql-master\"\n        exit 1\n    fi\n    read master_host master_port <<<$(gh-ost-test-mysql-master -e \"select @@hostname, @@port\" -ss)\n    [ \"$master_host\" == \"$(hostname)\" ] && master_host=\"127.0.0.1\"\n    echo \"# master verified at $master_host:$master_port\"\n    if ! gh-ost-test-mysql-master -e \"set global event_scheduler := 1\"; then\n        echo \"Cannot enable event_scheduler on master\"\n        exit 1\n    fi\n    original_sql_mode=\"$(gh-ost-test-mysql-master -e \"select @@global.sql_mode\" -s -s)\"\n    echo \"sql_mode on master is ${original_sql_mode}\"\n\n    current_gtid_mode=$(gh-ost-test-mysql-master -s -s -e \"select @@global.gtid_mode\" 2>/dev/null || echo unsupported)\n    current_enforce_gtid_consistency=$(gh-ost-test-mysql-master -s -s -e \"select @@global.enforce_gtid_consistency\" 2>/dev/null || echo unsupported)\n    current_master_server_uuid=$(gh-ost-test-mysql-master -s -s -e \"select @@global.server_uuid\" 2>/dev/null || echo unsupported)\n    current_replica_server_uuid=$(gh-ost-test-mysql-replica -s -s -e \"select @@global.server_uuid\" 2>/dev/null || echo unsupported)\n    echo \"gtid_mode on master is ${current_gtid_mode} with enforce_gtid_consistency=${current_enforce_gtid_consistency}\"\n    echo \"server_uuid on master is ${current_master_server_uuid}, replica is ${current_replica_server_uuid}\"\n\n    echo \"Gracefully sleeping for 3 seconds while replica is setting up...\"\n    sleep 3\n\n    if [ \"$(gh-ost-test-mysql-replica -e \"select 1\" -ss)\" != \"1\" ]; then\n        echo \"Cannot verify gh-ost-test-mysql-replica\"\n        exit 1\n    fi\n    if [ \"$(gh-ost-test-mysql-replica -e \"select @@global.binlog_format\" -ss)\" != \"ROW\" ]; then\n        echo \"Expecting test replica to have binlog_format=ROW\"\n        exit 1\n    fi\n    read replica_host replica_port <<<$(gh-ost-test-mysql-replica -e \"select @@hostname, @@port\" -ss)\n    [ \"$replica_host\" == \"$(hostname)\" ] && replica_host=\"127.0.0.1\"\n    echo \"# replica verified at $replica_host:$replica_port\"\n\n    if [ \"$docker\" = true ]; then\n        master_host=\"0.0.0.0\"\n        master_port=\"3307\"\n        echo \"# using docker master at $master_host:$master_port\"\n        replica_host=\"0.0.0.0\"\n        if [ \"$toxiproxy\" = true ]; then\n            replica_port=\"23308\"\n            echo \"# using toxiproxy replica at $replica_host:$replica_port\"\n        else\n            replica_port=\"3308\"\n            echo \"# using docker replica at $replica_host:$replica_port\"\n        fi\n    fi\n}\n\necho_dot() {\n    echo -n \".\"\n}\n\nstart_replication() {\n    mysql_version=\"$(gh-ost-test-mysql-replica -e \"select @@version\")\"\n    if [[ $mysql_version =~ \"8.4\" ]]; then\n        seconds_behind_source=\"Seconds_Behind_Source\"\n        replica_terminology=\"replica\"\n    else\n        seconds_behind_source=\"Seconds_Behind_Master\"\n        replica_terminology=\"slave\"\n    fi\n    gh-ost-test-mysql-replica -e \"stop $replica_terminology; start $replica_terminology;\"\n\n    num_attempts=0\n    while gh-ost-test-mysql-replica -e \"show $replica_terminology status\\G\" | grep $seconds_behind_source | grep -q NULL; do\n        ((num_attempts = num_attempts + 1))\n        if [ $num_attempts -gt 10 ]; then\n            echo\n            echo \"ERROR replication failure\"\n            exit 1\n        fi\n        echo_dot\n        sleep 1\n    done\n}\n\nbuild_ghost_command() {\n    # Build gh-ost command with all standard options\n    # Expects: ghost_binary, replica_host, replica_port, master_host, master_port,\n    #          table_name, storage_engine, throttle_flag_file, extra_args\n    cmd=\"GOTRACEBACK=crash $ghost_binary \\\n    --user=gh-ost \\\n    --password=gh-ost \\\n    --host=$replica_host \\\n    --port=$replica_port \\\n    --assume-master-host=${master_host}:${master_port} \\\n    --database=test \\\n    --table=${table_name} \\\n    --storage-engine=${storage_engine} \\\n    --alter='engine=${storage_engine}' \\\n    --exact-rowcount \\\n    --assume-rbr \\\n    --skip-metadata-lock-check \\\n    --initially-drop-old-table \\\n    --initially-drop-ghost-table \\\n    --throttle-query='select timestampdiff(second, min(last_update), now()) < 5 from _${table_name}_ghc' \\\n    --throttle-flag-file=$throttle_flag_file \\\n    --serve-socket-file=/tmp/gh-ost.test.sock \\\n    --initially-drop-socket-file \\\n    --test-on-replica \\\n    --default-retries=3 \\\n    --chunk-size=10 \\\n    --verbose \\\n    --debug \\\n    --stack \\\n    --checkpoint \\\n    --execute ${extra_args[@]}\"\n}\n\nprint_log_excerpt() {\n    echo \"=== Last $test_failure_log_tail_lines lines of $test_logfile ===\"\n    tail -n $test_failure_log_tail_lines $test_logfile\n    echo \"=== End log excerpt ===\"\n}\n\nvalidate_expected_failure() {\n    # Check if test expected to fail and validate error message\n    # Expects: tests_path, test_name, execution_result, test_logfile\n    if [ -f $tests_path/$test_name/expect_failure ]; then\n        if [ $execution_result -eq 0 ]; then\n            echo\n            echo \"ERROR $test_name execution was expected to exit on error but did not.\"\n            print_log_excerpt\n            return 1\n        fi\n        if [ -s $tests_path/$test_name/expect_failure ]; then\n            # 'expect_failure' file has content. We expect to find this content in the log.\n            expected_error_message=\"$(cat $tests_path/$test_name/expect_failure)\"\n            if grep -q \"$expected_error_message\" $test_logfile; then\n                return 0\n            fi\n            echo\n            echo \"ERROR $test_name execution was expected to exit with error message '${expected_error_message}' but did not.\"\n            print_log_excerpt\n            return 1\n        fi\n        # 'expect_failure' file has no content. We generally agree that the failure is correct\n        return 0\n    fi\n\n    if [ $execution_result -ne 0 ]; then\n        echo\n        echo \"ERROR $test_name execution failure. cat $test_logfile:\"\n        cat $test_logfile\n        return 1\n    fi\n    return 0\n}\n\nsysbench_prepare() {\n    local mysql_host=\"$1\"\n    local mysql_port=\"$2\"\n    sysbench oltp_write_only \\\n        --mysql-host=\"$mysql_host\" \\\n        --mysql-port=\"$mysql_port\" \\\n        --mysql-user=root \\\n        --mysql-password=opensesame \\\n        --mysql-db=test \\\n        --tables=1 \\\n        --table-size=20000 \\\n        prepare\n}\n\nsysbench_run_cmd() {\n    local mysql_host=\"$1\"\n    local mysql_port=\"$2\"\n    cmd=\"sysbench oltp_write_only \\\n    --mysql-host=\"$mysql_host\" \\\n    --mysql-port=\"$mysql_port\" \\\n    --mysql-user=root \\\n    --mysql-password=opensesame \\\n    --mysql-db=test \\\n    --rand-seed=163 \\\n    --tables=1 \\\n    --threads=2 \\\n    --time=30 \\\n    --report-interval=10 \\\n    --rate=200 \\\n    run\"\n    echo $cmd\n}\n\ncleanup() {\n    if ! [ -z $sysbench_pid ] && ps -p $sysbench_pid >/dev/null; then\n        kill $sysbench_pid\n    fi\n}\n\ntest_single() {\n    local test_name\n    test_name=\"$1\"\n\n    if [ -f $tests_path/$test_name/ignore_versions ]; then\n        ignore_versions=$(cat $tests_path/$test_name/ignore_versions)\n        mysql_version=$(gh-ost-test-mysql-master -s -s -e \"select @@version\")\n        mysql_version_comment=$(gh-ost-test-mysql-master -s -s -e \"select @@version_comment\")\n        if echo \"$mysql_version\" | egrep -q \"^${ignore_versions}\"; then\n            echo -n \"Skipping: $test_name\"\n            return 0\n        elif echo \"$mysql_version_comment\" | egrep -i -q \"^${ignore_versions}\"; then\n            echo -n \"Skipping: $test_name\"\n            return 0\n        fi\n    fi\n\n    echo -n \"Testing: $test_name\"\n\n    echo_dot\n    start_replication\n    echo_dot\n\n    if [ -f $tests_path/$test_name/gtid_mode ]; then\n        target_gtid_mode=$(cat $tests_path/$test_name/gtid_mode)\n        if [ \"$current_gtid_mode\" != \"$target_gtid_mode\" ]; then\n            echo \"gtid_mode is ${current_gtid_mode}, expected ${target_gtid_mode}\"\n            exit 1\n        fi\n    fi\n\n    if [ -f $tests_path/$test_name/sql_mode ]; then\n        gh-ost-test-mysql-master --default-character-set=utf8mb4 test -e \"set @@global.sql_mode='$(cat $tests_path/$test_name/sql_mode)'\"\n        gh-ost-test-mysql-replica --default-character-set=utf8mb4 test -e \"set @@global.sql_mode='$(cat $tests_path/$test_name/sql_mode)'\"\n    fi\n\n    gh-ost-test-mysql-master --default-character-set=utf8mb4 test <$tests_path/$test_name/create.sql\n    test_create_result=$?\n\n    if [ $test_create_result -ne 0 ]; then\n        echo\n        echo \"ERROR $test_name create failure. cat $tests_path/$test_name/create.sql:\"\n        cat $tests_path/$test_name/create.sql\n        return 1\n    fi\n\n    if [ -f $tests_path/$test_name/before.sql ]; then\n        gh-ost-test-mysql-master --default-character-set=utf8mb4 test < $tests_path/$test_name/before.sql\n        gh-ost-test-mysql-replica --default-character-set=utf8mb4 test < $tests_path/$test_name/before.sql\n    fi\n\n    extra_args=\"\"\n    if [ -f $tests_path/$test_name/extra_args ]; then\n        extra_args=$(cat $tests_path/$test_name/extra_args)\n    fi\n    if [ \"$gtid\" = true ]; then\n        extra_args+=\" --gtid\"\n    fi\n    if [ \"$toxiproxy\" = true ]; then\n        extra_args+=\" --skip-port-validation\"\n    fi\n    orig_columns=\"*\"\n    ghost_columns=\"*\"\n    order_by=\"\"\n    if [ -f $tests_path/$test_name/orig_columns ]; then\n        orig_columns=$(cat $tests_path/$test_name/orig_columns)\n    fi\n    if [ -f $tests_path/$test_name/ghost_columns ]; then\n        ghost_columns=$(cat $tests_path/$test_name/ghost_columns)\n    fi\n    if [ -f $tests_path/$test_name/order_by ]; then\n        order_by=\"order by $(cat $tests_path/$test_name/order_by)\"\n    fi\n    # graceful sleep for replica to catch up\n    echo_dot\n    sleep 1\n\n    table_name=\"gh_ost_test\"\n    ghost_table_name=\"_gh_ost_test_gho\"\n\n    # Check for custom test script\n    if [ -f $tests_path/$test_name/test.sh ]; then\n        # Run the custom test script in a subshell with timeout monitoring\n        # The subshell inherits all functions and variables from the current shell\n        (source $tests_path/$test_name/test.sh) &\n        test_pid=$!\n\n        # Monitor the test with timeout\n        timeout_counter=0\n        while kill -0 $test_pid 2>/dev/null; do\n            if [ $timeout_counter -ge $test_timeout ]; then\n                kill -TERM $test_pid 2>/dev/null\n                sleep 1\n                kill -KILL $test_pid 2>/dev/null\n                wait $test_pid 2>/dev/null\n                echo\n                echo \"ERROR $test_name execution timed out\"\n                print_log_excerpt\n                return 1\n            fi\n            sleep 1\n            ((timeout_counter++))\n        done\n\n        # Get the exit code\n        wait $test_pid 2>/dev/null\n        execution_result=$?\n        return $execution_result\n    fi\n\n    # test with sysbench oltp write load\n    if [[ \"$test_name\" == \"sysbench\" ]]; then\n        if ! command -v sysbench &>/dev/null; then\n            echo \"skipping\"\n            return 0\n        fi\n        table_name=\"sbtest1\"\n        ghost_table_name=\"_${table_name}_gho\"\n        echo \"Preparing sysbench...\"\n        sysbench_prepare \"$master_host\" \"$master_port\"\n\n        load_cmd=\"$(sysbench_run_cmd $master_host $master_port)\"\n        eval \"$load_cmd\" &\n        sysbench_pid=$!\n        echo\n        echo -n \"Started sysbench (PID $sysbench_pid):  \"\n        echo $load_cmd\n    fi\n    trap cleanup SIGINT\n\n    # Build and execute gh-ost command\n    build_ghost_command\n    echo_dot\n    echo $cmd >$exec_command_file\n    echo_dot\n    timeout $test_timeout bash $exec_command_file >$test_logfile 2>&1\n\n    execution_result=$?\n    cleanup\n\n    # Check for timeout (exit code 124)\n    if [ $execution_result -eq 124 ]; then\n        echo\n        echo \"ERROR $test_name execution timed out\"\n        print_log_excerpt\n        return 1\n    fi\n\n    if [ -f $tests_path/$test_name/sql_mode ]; then\n        gh-ost-test-mysql-master --default-character-set=utf8mb4 test -e \"set @@global.sql_mode='${original_sql_mode}'\"\n        gh-ost-test-mysql-replica --default-character-set=utf8mb4 test -e \"set @@global.sql_mode='${original_sql_mode}'\"\n    fi\n\n    if [ -f $tests_path/$test_name/after.sql ]; then\n        gh-ost-test-mysql-master --default-character-set=utf8mb4 test < $tests_path/$test_name/after.sql\n        gh-ost-test-mysql-replica --default-character-set=utf8mb4 test < $tests_path/$test_name/after.sql\n    fi\n\n    if [ -f $tests_path/$test_name/destroy.sql ]; then\n        gh-ost-test-mysql-master --default-character-set=utf8mb4 test <$tests_path/$test_name/destroy.sql\n    fi\n\n    # Validate expected failure or success\n    if ! validate_expected_failure; then\n        return 1\n    fi\n\n    # If this was an expected failure test, we're done (no need to validate structure/checksums)\n    if [ -f $tests_path/$test_name/expect_failure ]; then\n        return 0\n    fi\n\n    # Test succeeded - now validate structure and checksums\n    gh-ost-test-mysql-replica --default-character-set=utf8mb4 test -e \"show create table ${ghost_table_name}\\G\" -ss >$ghost_structure_output_file\n\n    if [ -f $tests_path/$test_name/expect_table_structure ]; then\n        expected_table_structure=\"$(cat $tests_path/$test_name/expect_table_structure)\"\n        if ! grep -q \"$expected_table_structure\" $ghost_structure_output_file; then\n            echo\n            echo \"ERROR $test_name: table structure was expected to include ${expected_table_structure} but did not. cat $ghost_structure_output_file:\"\n            cat $ghost_structure_output_file\n            return 1\n        fi\n    fi\n\n    echo_dot\n    gh-ost-test-mysql-replica --default-character-set=utf8mb4 test -e \"select ${orig_columns} from ${table_name} ${order_by}\" -ss >$orig_content_output_file\n    gh-ost-test-mysql-replica --default-character-set=utf8mb4 test -e \"select ${ghost_columns} from ${ghost_table_name} ${order_by}\" -ss >$ghost_content_output_file\n    orig_checksum=$(cat $orig_content_output_file | md5sum)\n    ghost_checksum=$(cat $ghost_content_output_file | md5sum)\n\n    if [ \"$orig_checksum\" != \"$ghost_checksum\" ]; then\n        gh-ost-test-mysql-replica --default-character-set=utf8mb4 test -e \"select ${orig_columns} from ${table_name}\" -ss >$orig_content_output_file\n        gh-ost-test-mysql-replica --default-character-set=utf8mb4 test -e \"select ${ghost_columns} from ${ghost_table_name}\" -ss >$ghost_content_output_file\n        echo \"ERROR $test_name: checksum mismatch\"\n        echo \"---\"\n        diff $orig_content_output_file $ghost_content_output_file\n\n        echo \"diff $orig_content_output_file $ghost_content_output_file\"\n\n        return 1\n    fi\n}\n\nbuild_binary() {\n    echo \"Building\"\n    rm -f $default_ghost_binary\n    [ \"$ghost_binary\" == \"\" ] && ghost_binary=\"$default_ghost_binary\"\n    if [ -f \"$ghost_binary\" ]; then\n        echo \"Using binary: $ghost_binary\"\n        return 0\n    fi\n\n    go build -o $ghost_binary go/cmd/gh-ost/main.go\n\n    if [ $? -ne 0 ]; then\n        echo \"Build failure\"\n        exit 1\n    fi\n}\n\ntest_all() {\n    build_binary\n    test_dirs=$(find \"$tests_path\" -mindepth 1 -maxdepth 1 ! -path . -type d | grep \"$test_pattern\" | sort)\n    while read -r test_dir; do\n        test_name=$(basename \"$test_dir\")\n        local test_start_time=$(date +%s)\n        if ! test_single \"$test_name\"; then\n            local test_end_time=$(date +%s)\n            local test_duration=$((test_end_time - test_start_time))\n            create_statement=$(gh-ost-test-mysql-replica test -t -e \"show create table ${ghost_table_name} \\G\")\n            echo \"$create_statement\" >>$test_logfile\n            echo \"+ FAIL (${test_duration}s)\"\n            return 1\n        else\n            local test_end_time=$(date +%s)\n            local test_duration=$((test_end_time - test_start_time))\n            echo\n            echo \"+ pass (${test_duration}s)\"\n        fi\n        mysql_version=\"$(gh-ost-test-mysql-replica -e \"select @@version\")\"\n        replica_terminology=\"slave\"\n        if [[ $mysql_version =~ \"8.4\" ]]; then\n            replica_terminology=\"replica\"\n        fi\n        gh-ost-test-mysql-replica -e \"start $replica_terminology\"\n    done <<<\"$test_dirs\"\n}\n\nverify_master_and_replica\ntest_all\n"
  },
  {
    "path": "localtests/timestamp/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts0 timestamp default current_timestamp,\n  ts1 timestamp default current_timestamp,\n  ts2 timestamp default current_timestamp,\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 13 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 17, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 17 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 19, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 19 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 23, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 23 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/timestamp-datetime/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts timestamp default current_timestamp,\n  dt datetime,\n  ts2ts timestamp null,\n  ts2dt datetime null,\n  dt2ts timestamp null,\n  dt2dt datetime null,\n  updated tinyint unsigned default 0,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, now(), now(),null, null, null, null,  0);\n  update gh_ost_test set ts2ts=ts, ts2dt=ts, dt2ts=dt, dt2dt=dt where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, null, now(), now(), 0);\n  update gh_ost_test set ts2ts=ts, ts2dt=ts, dt2ts=dt, dt2dt=dt where i = 13 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 17, null, '2016-07-06 10:20:30', '2016-07-06 10:20:30', 0);\n  update gh_ost_test set ts2ts=ts, ts2dt=ts, dt2ts=dt, dt2dt=dt where i = 17 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/timestamp-to-datetime/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts0 timestamp default current_timestamp,\n  ts1 timestamp default current_timestamp,\n  dt2 datetime,\n  t   datetime,\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, null, now(), now(), '2010-10-20 10:20:30', 0);\n\n  insert into gh_ost_test values (null, 11, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  insert into gh_ost_test values (null, 13, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 13 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/timestamp-to-datetime/extra_args",
    "content": "--alter=\"change column t t datetime not null\"\n"
  },
  {
    "path": "localtests/trigger-advanced-features/create.sql",
    "content": "-- Drop triggers to ensure a clean slate\ndrop trigger if exists gh_ost_test_bi;\ndrop trigger if exists gh_ost_test_ai;\ndrop trigger if exists gh_ost_test_bu;\ndrop trigger if exists gh_ost_test_au;\ndrop trigger if exists gh_ost_test_bd;\ndrop trigger if exists gh_ost_test_ad;\n\n-- Drop tables\ndrop table if exists gh_ost_test_log;\ndrop table if exists gh_ost_test_stats;\ndrop table if exists gh_ost_test;\n\n-- Create main table\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  color varchar(32),\n  ts timestamp default current_timestamp,\n  modified_count int default 0,\n  primary key(id)\n) auto_increment=1;\n\n-- Create log table for trigger operations\ncreate table gh_ost_test_log (\n  id int auto_increment,\n  test_id int,\n  trigger_name varchar(128),\n  action varchar(16),\n  ts timestamp default current_timestamp,\n  primary key(id)\n);\n\n-- Create stats table for complex test\ncreate table gh_ost_test_stats (\n  id int auto_increment,\n  event_type varchar(32),\n  i_sum int not null default 0,\n  count_events int not null default 0,\n  primary key(id),\n  unique key event_type_uidx(event_type)\n);\n\n-- Create all types of triggers (BEFORE/AFTER with INSERT/UPDATE/DELETE)\n-- Multiple trigger types from trigger-multiple test\n\n-- BEFORE INSERT\ndelimiter ;;\ncreate trigger gh_ost_test_bi before insert on gh_ost_test\nfor each row\nbegin\n  insert into gh_ost_test_log (test_id, trigger_name, action) values (NEW.id, 'gh_ost_test_bi', 'BEFORE_INSERT');\nend ;;\ndelimiter ;\n\n-- AFTER INSERT\ndelimiter ;;\ncreate trigger gh_ost_test_ai after insert on gh_ost_test\nfor each row\nbegin\n  insert into gh_ost_test_log (test_id, trigger_name, action) values (NEW.id, 'gh_ost_test_ai', 'AFTER_INSERT');\n  \n  -- Complex logic from trigger-complex\n  insert into gh_ost_test_stats (event_type, i_sum, count_events) \n  values ('insert', NEW.i, 1) \n  on duplicate key update i_sum=i_sum+NEW.i, count_events=count_events+1;\nend ;;\ndelimiter ;\n\n-- BEFORE UPDATE\ndelimiter ;;\ncreate trigger gh_ost_test_bu before update on gh_ost_test\nfor each row\nbegin\n  insert into gh_ost_test_log (test_id, trigger_name, action) values (NEW.id, 'gh_ost_test_bu', 'BEFORE_UPDATE');\nend ;;\ndelimiter ;\n\n-- AFTER UPDATE\ndelimiter ;;\ncreate trigger gh_ost_test_au after update on gh_ost_test\nfor each row\nbegin\n  insert into gh_ost_test_log (test_id, trigger_name, action) values (NEW.id, 'gh_ost_test_au', 'AFTER_UPDATE');\n  \n  -- Complex logic from trigger-complex\n  insert into gh_ost_test_stats (event_type, i_sum, count_events) \n  values ('update', NEW.i-OLD.i, 1) \n  on duplicate key update i_sum=i_sum+(NEW.i-OLD.i), count_events=count_events+1;\n\n  if NEW.color != OLD.color then\n    update gh_ost_test set modified_count = modified_count + 1 where id = NEW.id;\n  end if;\nend ;;\ndelimiter ;\n\n-- BEFORE DELETE\ndelimiter ;;\ncreate trigger gh_ost_test_bd before delete on gh_ost_test\nfor each row\nbegin\n  insert into gh_ost_test_log (test_id, trigger_name, action) values (OLD.id, 'gh_ost_test_bd', 'BEFORE_DELETE');\nend ;;\ndelimiter ;\n\n-- AFTER DELETE\ndelimiter ;;\ncreate trigger gh_ost_test_ad after delete on gh_ost_test\nfor each row\nbegin\n  insert into gh_ost_test_log (test_id, trigger_name, action) values (OLD.id, 'gh_ost_test_ad', 'AFTER_DELETE');\n  \n  -- Complex logic from trigger-complex\n  insert into gh_ost_test_stats (event_type, i_sum, count_events) \n  values ('delete', -OLD.i, 1) \n  on duplicate key update i_sum=i_sum-OLD.i, count_events=count_events+1;\nend ;;\ndelimiter ;\n\n-- Insert initial data\ninsert into gh_ost_test values (null, 11, 'red', null, 0);\ninsert into gh_ost_test values (null, 13, 'green', null, 0);\ninsert into gh_ost_test values (null, 17, 'blue', null, 0);\n\n-- Create event to test all trigger types with complex operations\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  -- Test INSERT triggers\n  insert into gh_ost_test values (null, 23, 'red', null, 0);\n  \n  -- Test UPDATE triggers with numeric change (for stats)\n  update gh_ost_test set i=i+1 where id=1;\n  \n  -- Test UPDATE triggers with color change\n  update gh_ost_test set color='yellow' where color='red' limit 1;\n  \n  -- Test DELETE triggers\n  delete from gh_ost_test where id=2;\nend ;;\ndelimiter ; \n"
  },
  {
    "path": "localtests/trigger-advanced-features/extra_args",
    "content": "--include-triggers --trigger-suffix=_ght --remove-trigger-suffix-if-exists "
  },
  {
    "path": "localtests/trigger-ghost-name-conflict/create.sql",
    "content": "-- Bug #3 regression test: validateGhostTriggersDontExist must check whole schema\n-- MySQL trigger names are unique per SCHEMA, not per table.\n-- The validation must detect a trigger with the ghost name on ANY table in the schema.\n\ndrop trigger if exists gh_ost_test_ai_ght;\ndrop trigger if exists gh_ost_test_ai;\ndrop table if exists gh_ost_test_other;\ndrop table if exists gh_ost_test;\n\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\n-- This trigger has the _ght suffix (simulating a previous migration left it).\n-- Ghost name = \"gh_ost_test_ai\" (suffix removed).\ncreate trigger gh_ost_test_ai_ght\n  after insert on gh_ost_test for each row\n  set @dummy = 1;\n\n-- Create ANOTHER table with a trigger named \"gh_ost_test_ai\" (the ghost name).\n-- Validation must detect this conflict even though the trigger is on a different table.\ncreate table gh_ost_test_other (\n  id int auto_increment,\n  primary key(id)\n);\n\ncreate trigger gh_ost_test_ai\n  after insert on gh_ost_test_other for each row\n  set @dummy = 1;\n\ninsert into gh_ost_test values (null, 11);\ninsert into gh_ost_test values (null, 13);\ninsert into gh_ost_test values (null, 17);\n"
  },
  {
    "path": "localtests/trigger-ghost-name-conflict/destroy.sql",
    "content": "drop trigger if exists gh_ost_test_ai;\ndrop table if exists gh_ost_test_other;\n"
  },
  {
    "path": "localtests/trigger-ghost-name-conflict/expect_failure",
    "content": "Found gh-ost triggers"
  },
  {
    "path": "localtests/trigger-ghost-name-conflict/extra_args",
    "content": "--include-triggers --trigger-suffix=_ght --remove-trigger-suffix-if-exists"
  },
  {
    "path": "localtests/trigger-long-name-validation/create.sql",
    "content": "-- Bug #1: Double-transformation in trigger length validation\n-- A trigger with a 60-char name should be valid: ghost name = 60 + 4 (_ght) = 64 chars (max allowed).\n-- But validateGhostTriggersLength() applies GetGhostTriggerName() twice,\n-- computing 60 + 4 + 4 = 68, which falsely exceeds the 64-char limit.\n\ndrop table if exists gh_ost_test;\n\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  primary key(id)\n) auto_increment=1;\n\n-- Trigger name is exactly 60 characters (padded to 60).\n-- Ghost name with _ght suffix = 64 chars = exactly at the MySQL limit.\n-- 60 chars: trigger_long_name_padding_aaaaaaaaaaaaaaaaaaaaa_60chars_xxxx\ncreate trigger trigger_long_name_padding_aaaaaaaaaaaaaaaaaaaaa_60chars_xxxx\n  after insert on gh_ost_test for each row\n  set @dummy = 1;\n\ninsert into gh_ost_test values (null, 11);\ninsert into gh_ost_test values (null, 13);\ninsert into gh_ost_test values (null, 17);\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 23);\n  update gh_ost_test set i=i+1 where id=1;\nend ;;\ndelimiter ;\n"
  },
  {
    "path": "localtests/trigger-long-name-validation/extra_args",
    "content": "--include-triggers --trigger-suffix=_ght --remove-trigger-suffix-if-exists"
  },
  {
    "path": "localtests/trivial/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  color varchar(32),\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\n\ninsert into gh_ost_test values (null, 11, 'red');\ninsert into gh_ost_test values (null, 13, 'green');\ninsert into gh_ost_test values (null, 17, 'blue');\n"
  },
  {
    "path": "localtests/trivial/extra_args",
    "content": "--throttle-query='select false'\n"
  },
  {
    "path": "localtests/tz/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts0 timestamp default current_timestamp,\n  ts1 timestamp default current_timestamp,\n  ts2 timestamp default current_timestamp,\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  set session time_zone='system';\n  insert into gh_ost_test values (null, 13, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 13 order by id desc limit 1;\n\n  set session time_zone='+00:00';\n  insert into gh_ost_test values (null, 17, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 17 order by id desc limit 1;\n\n  set session time_zone='-03:00';\n  insert into gh_ost_test values (null, 19, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 19 order by id desc limit 1;\n\n  set session time_zone='+05:00';\n  insert into gh_ost_test values (null, 23, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 23 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/tz-datetime/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts0 timestamp default current_timestamp,\n  ts1 datetime,\n  ts2 datetime,\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 11, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  set session time_zone='system';\n  insert into gh_ost_test values (null, 13, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 13 order by id desc limit 1;\n\n  set session time_zone='+00:00';\n  insert into gh_ost_test values (null, 17, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 17 order by id desc limit 1;\n\n  set session time_zone='-03:00';\n  insert into gh_ost_test values (null, 19, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 19 order by id desc limit 1;\n\n  set session time_zone='+05:00';\n  insert into gh_ost_test values (null, 23, null, now(), now(), 0);\n  update gh_ost_test set ts2=now() + interval 10 minute, updated = 1 where i = 23 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/tz-datetime-ts/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  ts0 timestamp default current_timestamp,\n  ts1 timestamp default current_timestamp,\n  dt2 datetime,\n  t   datetime,\n  updated tinyint unsigned default 0,\n  primary key(id),\n  key i_idx(i)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, 7, null, now(), now(), '2010-10-20 10:20:30', 0);\n\n  insert into gh_ost_test values (null, 11, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 11 order by id desc limit 1;\n\n  set session time_zone='system';\n  insert into gh_ost_test values (null, 13, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 13 order by id desc limit 1;\n\n  set session time_zone='+00:00';\n  insert into gh_ost_test values (null, 17, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 17 order by id desc limit 1;\n\n  set session time_zone='-03:00';\n  insert into gh_ost_test values (null, 19, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 19 order by id desc limit 1;\n\n  set session time_zone='+05:00';\n  insert into gh_ost_test values (null, 23, null, now(), now(), '2010-10-20 10:20:30', 0);\n  update gh_ost_test set ts2=now() + interval 1 minute, updated = 1 where i = 23 order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/tz-datetime-ts/extra_args",
    "content": "--alter=\"change column t t timestamp not null default current_timestamp\"\n"
  },
  {
    "path": "localtests/unsigned/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  bi bigint not null,\n  iu int unsigned not null,\n  biu bigint unsigned not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, -2147483647, -9223372036854775807, 4294967295, 18446744073709551615);\n  set @last_insert_id := cast(last_insert_id() as signed);\n  update gh_ost_test set i=-2147483647+@last_insert_id, bi=-9223372036854775807+@last_insert_id, iu=4294967295-@last_insert_id, biu=18446744073709551615-@last_insert_id where id < @last_insert_id order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/unsigned-modify/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id bigint(20) NOT NULL AUTO_INCREMENT,\n  column1 int(11) NOT NULL,\n  column2 smallint(5) unsigned NOT NULL,\n  column3 mediumint(8) unsigned NOT NULL,\n  column4 tinyint(3) unsigned NOT NULL,\n  column5 int(11) NOT NULL,\n  column6 int(11) NOT NULL,\n  PRIMARY KEY (id),\n  KEY c12_ix (column1, column2)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  -- mediumint maxvalue: 16777215 (unsigned), 8388607 (signed)\n  insert into gh_ost_test values (NULL, 13382498, 536,  8388607, 3, 1483892217, 1483892218);\n  insert into gh_ost_test values (NULL, 13382498, 536,  8388607, 250, 1483892217, 1483892218);\n  insert into gh_ost_test values (NULL, 13382498, 536, 10000000, 3, 1483892217, 1483892218);\nend ;;\n"
  },
  {
    "path": "localtests/unsigned-rename/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  bi bigint not null,\n  iu int unsigned not null,\n  biu bigint unsigned not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, -2147483647, -9223372036854775807, 4294967295, 18446744073709551615);\n  set @last_insert_id := cast(last_insert_id() as signed);\n  update gh_ost_test set i=-2147483647+@last_insert_id, bi=-9223372036854775807+@last_insert_id, iu=4294967295-@last_insert_id, biu=18446744073709551615-@last_insert_id where id < @last_insert_id order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/unsigned-rename/extra_args",
    "content": "--alter=\"change column iu iu_renamed int unsigned not null\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/unsigned-rename/ghost_columns",
    "content": "id, i, bi, iu_renamed, biu\n"
  },
  {
    "path": "localtests/unsigned-rename/orig_columns",
    "content": "id, i, bi, iu, biu\n"
  },
  {
    "path": "localtests/unsigned-reorder/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  i int not null,\n  bi bigint not null,\n  iu int unsigned not null,\n  biu bigint unsigned not null,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, -2147483647, -9223372036854775807, 4294967295, 18446744073709551615);\n  set @last_insert_id := cast(last_insert_id() as signed);\n  update gh_ost_test set i=-2147483647+@last_insert_id, bi=-9223372036854775807+@last_insert_id, iu=4294967295-@last_insert_id, biu=18446744073709551615-@last_insert_id where id < @last_insert_id order by id desc limit 1;\nend ;;\n"
  },
  {
    "path": "localtests/unsigned-reorder/extra_args",
    "content": "--alter=\"change column iu iu int unsigned not null after id\" --approve-renamed-columns\n"
  },
  {
    "path": "localtests/unsigned-reorder/ghost_columns",
    "content": "id, i, bi, iu, biu\n"
  },
  {
    "path": "localtests/unsigned-reorder/orig_columns",
    "content": "id, i, bi, iu, biu\n"
  },
  {
    "path": "localtests/utf8/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t varchar(128) charset utf8 collate utf8_general_ci,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()));\n  insert into gh_ost_test values (null, 'novo proprietário');\n  insert into gh_ost_test values (null, 'usuário');\nend ;;\n"
  },
  {
    "path": "localtests/utf8mb4/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id int auto_increment,\n  t varchar(128) charset utf8mb4,\n  primary key(id)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  insert into gh_ost_test values (null, md5(rand()));\n  insert into gh_ost_test values (null, 'átesting');\n  insert into gh_ost_test values (null, '🍻😀');\nend ;;\n"
  },
  {
    "path": "localtests/varbinary/create.sql",
    "content": "drop table if exists gh_ost_test;\ncreate table gh_ost_test (\n  id binary(16) NOT NULL,\n  info varchar(255) COLLATE utf8_unicode_ci NOT NULL,\n  data binary(8) NOT NULL,\n  primary key (id),\n  unique key info_uidx (info)\n) auto_increment=1;\n\ndrop event if exists gh_ost_test;\ndelimiter ;;\ncreate event gh_ost_test\n  on schedule every 1 second\n  starts current_timestamp\n  ends current_timestamp + interval 60 second\n  on completion not preserve\n  enable\n  do\nbegin\n  replace into gh_ost_test (id, info, data) values (X'12ffffffffffffffffffffffffffff00', 'item 1a', X'12ffffffffffffff');\n  replace into gh_ost_test (id, info, data) values (X'34ffffffffffffffffffffffffffffff', 'item 3a', X'34ffffffffffffff');\n  replace into gh_ost_test (id, info, data) values (X'90ffffffffffffffffffffffffffffff', 'item 9a', X'90ffffffffffff00');\n\n  DELETE FROM gh_ost_test WHERE id = X'11ffffffffffffffffffffffffffff00';\n  UPDATE gh_ost_test SET info = 'item 2++' WHERE id = X'22ffffffffffffffffffffffffffff00';\n  UPDATE gh_ost_test SET info = 'item 3++', data = X'33ffffffffffff00' WHERE id = X'33ffffffffffffffffffffffffffffff';\n  DELETE FROM gh_ost_test WHERE id = X'44ffffffffffffffffffffffffffffff';\n  UPDATE gh_ost_test SET info = 'item 5++', data = X'55ffffffffffffee'  WHERE id = X'55ffffffffffffffffffffffffffffff';\n  INSERT INTO gh_ost_test (id, info, data) VALUES (X'66ffffffffffffffffffffffffffff00', 'item 6', X'66ffffffffffffff');\n  INSERT INTO gh_ost_test (id, info, data) VALUES (X'77ffffffffffffffffffffffffffffff', 'item 7', X'77ffffffffffff00');\n  INSERT INTO gh_ost_test (id, info, data) VALUES (X'88ffffffffffffffffffffffffffffff', 'item 8', X'88ffffffffffffff');\nend ;;\n\nINSERT INTO gh_ost_test (id, info, data) VALUES\n (X'11ffffffffffffffffffffffffffff00', 'item 1', X'11ffffffffffffff'), -- id ends in 00\n (X'22ffffffffffffffffffffffffffff00', 'item 2', X'22ffffffffffffff'), -- id ends in 00\n (X'33ffffffffffffffffffffffffffffff', 'item 3', X'33ffffffffffffff'),\n (X'44ffffffffffffffffffffffffffffff', 'item 4', X'44ffffffffffffff'),\n (X'55ffffffffffffffffffffffffffffff', 'item 5', X'55ffffffffffffff'),\n (X'99ffffffffffffffffffffffffffffff', 'item 9', X'99ffffffffffff00'); -- data ends in 00\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-before-cut-over-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-before-cut-over\n\necho \"$(date) gh-ost-on-before-cut-over $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-before-row-copy-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-before-row-copy\n\necho \"$(date) gh-ost-on-before-row-copy $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-begin-postponed-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-begin-postponed\n\necho \"$(date) gh-ost-on-begin-postponed $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-failure-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-failure\n\necho \"$(date) gh-ost-on-failure $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME; ghost: $GH_OST_OLD_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-interactive-command-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-interactive-command\n\necho \"$(date) gh-ost-on-interactive-command $GH_OST_COMMAND\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-row-copy-complete-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-row-copy-complete\n\necho \"$(date) gh-ost-on-row-copy-complete $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-rowcount-complete-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-rowcount-complete\n\necho \"$(date) gh-ost-on-rowcount-complete $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-start-replication-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-start-replication\n# Useful for RDS/Aurora setups, see https://github.com/github/gh-ost/issues/163\n\necho \"$(date) gh-ost-on-start-replication $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME $GH_OST_MIGRATED_HOST\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-startup-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-startup\n\necho \"$(date) gh-ost-on-startup $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-status-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-status\n\necho \"$(date) gh-ost-on-status; elapsed: ${GH_OST_ELAPSED_SECONDS}; msg: ${GH_OST_STATUS}\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-stop-replication-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-stop-replication\n# Useful for RDS/Aurora setups, see https://github.com/github/gh-ost/issues/163\n\necho \"$(date) gh-ost-on-stop-replication $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME $GH_OST_MIGRATED_HOST\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-success-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-success\n\necho \"$(date) gh-ost-on-success $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-success-hook-2",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-success\n\necho \"$(date) gh-ost-on-success $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME -- this message should show on the gh-ost log\"\necho \"$(date) gh-ost-on-success copied $GH_OST_COPIED_ROWS rows in $GH_OST_ELAPSED_COPY_SECONDS seconds. Total runtime was $GH_OST_ELAPSED_SECONDS seconds\"\n"
  },
  {
    "path": "resources/hooks-sample/gh-ost-on-validated-hook",
    "content": "#!/bin/bash\n\n# Sample hook file for gh-ost-on-validated\n\necho \"$(date) gh-ost-on-validated $GH_OST_DATABASE_NAME.$GH_OST_TABLE_NAME\" >> /tmp/gh-ost.log\n"
  },
  {
    "path": "script/bootstrap",
    "content": "#!/bin/bash\n\nset -e\n\n# Make sure we have the version of Go we want to depend on, either from the\n# system or one we grab ourselves.\n# If executing from within Dockerfile then this assumption is inherently true, since we use a `golang` docker image.\n. script/ensure-go-installed\n\n# Since we want to be able to build this outside of GOPATH, we set it\n# up so it points back to us and go is none the wiser\n\nset -x\nrm -rf .gopath\nmkdir -p .gopath/src/github.com/github\nln -s \"$PWD\" .gopath/src/github.com/github/gh-ost\nexport GOPATH=$PWD/.gopath:$GOPATH\n"
  },
  {
    "path": "script/build",
    "content": "#!/bin/bash\n\nset -e\n\n. script/bootstrap\n\nmkdir -p bin\nbindir=\"$PWD\"/bin\nscriptdir=\"$PWD\"/script\n\n# We have a few binaries that we want to build, so let's put them into bin/\n\nversion=$(git rev-parse HEAD)\ndescribe=$(git describe --tags --always --dirty)\n\nexport GOPATH=\"$PWD/.gopath\"\ncd .gopath/src/github.com/github/gh-ost\n\n# We put the binaries directly into the bindir, because we have no need for shim wrappers\ngo build -o \"$bindir/gh-ost\" -ldflags \"-X main.AppVersion=${version} -X main.BuildDescribe=${describe}\" ./go/cmd/gh-ost/main.go\n"
  },
  {
    "path": "script/build-deploy-tarball",
    "content": "#!/bin/sh\n\nset -e\n\nscript/build\n\n# Get a fresh directory and make sure to delete it afterwards\nbuild_dir=tmp/build\nrm -rf $build_dir\nmkdir -p $build_dir\ntrap \"rm -rf $build_dir\" EXIT\n\ncommit_sha=$(git rev-parse HEAD)\n\nif [ $(uname -s) = \"Darwin\" ]; then\n    build_arch=\"$(uname -sr | tr -d ' ' | tr '[:upper:]' '[:lower:]')-$(uname -m)\"\nelse\n    build_arch=\"$(lsb_release -sc | tr -d ' ' | tr '[:upper:]' '[:lower:]')-$(uname -m)\"\nfi\n\ntarball=$build_dir/${commit_sha}-${build_arch}.tar\n\n# Create the tarball\ntar cvf $tarball --mode=\"ugo=rx\" bin/\n\n# Compress it and copy it to the directory for the CI to upload it\ngzip $tarball\nmkdir -p \"$BUILD_ARTIFACT_DIR\"/gh-ost\ncp ${tarball}.gz \"$BUILD_ARTIFACT_DIR\"/gh-ost/\n\n### HACK HACK HACK HACK ###\n# blame @carlosmn, @mattr, @timvaillancourt and @rashiq\n# Allow builds on buster to also be used for focal\nfocal_tarball_name=$(echo $(basename \"${tarball}\") | sed s/-bullseye-/-focal-/)\ncp ${tarball}.gz \"$BUILD_ARTIFACT_DIR/gh-ost/${focal_tarball_name}.gz\"\n"
  },
  {
    "path": "script/cibuild",
    "content": "#!/bin/bash\n\nscript/test\n"
  },
  {
    "path": "script/cibuild-gh-ost-build-deploy-tarball",
    "content": "#!/bin/bash\n\noutput_fold() {\n  # Exit early if no label provided\n  if [ -z \"$1\" ]; then\n    echo \"output_fold(): requires a label argument.\"\n    return\n  fi\n\n  exit_value=0  # exit_value is used to record exit status of the given command\n  label=$1      # human-readable label describing what's being folded up\n  shift 1       # having retrieved the output_fold()-specific arguments, strip them off $@\n\n  # Only echo the tags when in CI_MODE\n  if [ \"$CI_MODE\" ]; then\n    echo \"%%%FOLD {$label}%%%\"\n  fi\n\n  # run the remaining arguments. If the command exits non-0, the `||` will\n  # prevent the `-e` flag from seeing the failure exit code, and we'll see\n  # the second echo execute\n  \"$@\" || exit_value=$?\n\n  # Only echo the tags when in CI_MODE\n  if [ \"$CI_MODE\" ]; then\n    echo \"%%%END FOLD%%%\"\n  fi\n\n  # preserve the exit code from the subcommand.\n  return $exit_value\n}\n\nfunction cleanup() {\n  echo\n  echo \"%%%FOLD {Shutting down services...}%%%\"\n  docker-compose down\n  echo \"%%%END FOLD%%%\"\n}\n\ntrap cleanup EXIT\n\nexport CI_MODE=true\n\noutput_fold \"Bootstrapping container...\" docker-compose build\noutput_fold \"Running tests...\" docker-compose run --rm app\n\ndocker-compose run -e BUILD_ARTIFACT_DIR=$BUILD_ARTIFACT_DIR -v $BUILD_ARTIFACT_DIR:$BUILD_ARTIFACT_DIR app script/build-deploy-tarball\n"
  },
  {
    "path": "script/dock",
    "content": "#!/bin/bash\n\n# Usage:\n# dock <test|packages> [arg]\n#   dock test:                build gh-ost & run unit and integration tests\n#   docker pkg [target-path]: build gh-ost release packages and copy to target path (default path: /tmp/gh-ost-release)\n\ncommand=\"$1\"\n\ncase \"$command\" in\n  \"test\")\n    docker_target=\"gh-ost-test\"\n    docker build . -f Dockerfile.test -t \"${docker_target}\" && docker run --rm -it \"${docker_target}:latest\"\n    ;;\n  \"pkg\")\n    packages_path=\"${2:-/tmp/gh-ost-release}\"\n    docker_target=\"gh-ost-packaging\"\n    docker build . -f Dockerfile.packaging -t \"${docker_target}\" && docker run --rm -it -v \"${packages_path}:/tmp/pkg\" \"${docker_target}:latest\" bash -c 'find /tmp/gh-ost-release/ -maxdepth 1 -type f | xargs cp -t /tmp/pkg'\n    echo \"packages generated on ${packages_path}:\"\n    ls -l \"${packages_path}\"\n    ;;\n  *)\n    >&2 echo \"Usage: dock dock <test|alpine|packages> [arg]\"\n    exit 1\nesac\n"
  },
  {
    "path": "script/docker-gh-ost-replica-tests",
    "content": "#!/bin/bash\n\n# This script starts two MySQL docker containers in a primary-replica setup\n# which can be used for running the replica tests in localtests/ .\n# Set the environment var TEST_MYSQL_IMAGE to change the docker image.\n#\n# Usage:\n#   docker-gh-ost-replica-tests up [-t]     start the containers\n#   docker-gh-ost-replica-tests down        remove the containers\n#   docker-gh-ost-replica-tests run [-t]    run replica tests on the containers\n#\n# Flags:\n#   -t      use a toxiproxy for replica connection to simulate dropped connections\n\nset -e\ntoxiproxy=false\n\nGH_OST_ROOT=$(git rev-parse --show-toplevel)\nif [[ \":$PATH:\" != *\":$GH_OST_ROOT:\"* ]]; then\n    export PATH=\"${PATH}:${GH_OST_ROOT}/script\"\nfi\n\npoll_mysql() {\n    CTR=0\n    cmd=\"gh-ost-test-mysql-$1\"\n    while ! $cmd -e \"select 1;\" >/dev/null 2>&1; do\n        sleep 1\n        CTR=$((CTR + 1))\n        if [ $CTR -gt 30 ]; then\n            echo \" ❌ MySQL $1 failed to start\"\n            return 1\n        fi\n    done\n    echo \" ✔ MySQL $1 OK\"\n    return 0\n}\n\nmysql-source() {\n    if [[ $TEST_MYSQL_IMAGE =~ \"mysql:8.4\" ]]; then\n        gh-ost-test-mysql-master --ssl-mode=required \"$@\"\n    else\n        gh-ost-test-mysql-master \"$@\"\n    fi\n}\n\nmysql-replica() {\n    if [[ $TEST_MYSQL_IMAGE =~ \"mysql:8.4\" ]]; then\n        gh-ost-test-mysql-replica --ssl-mode=required \"$@\"\n    else\n        gh-ost-test-mysql-replica \"$@\"\n    fi\n}\n\ncreate_toxiproxy() {\n    curl --fail -X POST http://localhost:8474/proxies \\\n        -H \"Content-Type: application/json\" \\\n        -d '{\"name\": \"mysql_proxy\",\n            \"listen\": \"0.0.0.0:23308\",\n            \"upstream\": \"host.docker.internal:3308\"}'\n    echo\n\n    curl --fail -X POST http://localhost:8474/proxies/mysql_proxy/toxics \\\n        -H \"Content-Type: application/json\" \\\n        -d '{\"name\": \"limit_data_downstream\",\n            \"type\": \"limit_data\",\n            \"attributes\": {\"bytes\": 1000000}}'\n    echo\n}\n\nsetup() {\n    [ -z \"$TEST_MYSQL_IMAGE\" ] && TEST_MYSQL_IMAGE=\"mysql:8.0.41\"\n\n    echo \"Starting MySQL $TEST_MYSQL_IMAGE containers...\"\n    compose_file=\"$GH_OST_ROOT/localtests/docker-compose.yml\"\n    MYSQL_SHA2_RSA_KEYS_FLAG=\"\"\n    MYSQL_PASSWORD_HASHING_ALGORITHM=\"mysql_native_password\"\n    if [[ $TEST_MYSQL_IMAGE =~ \"mysql:8.4\" ]]; then\n        MYSQL_PASSWORD_HASHING_ALGORITHM=\"caching_sha2_password\"\n        MYSQL_SHA2_RSA_KEYS_FLAG=\"--caching-sha2-password-auto-generate-rsa-keys=ON\"\n    fi\n    (TEST_MYSQL_IMAGE=\"$TEST_MYSQL_IMAGE\" MYSQL_SHA2_RSA_KEYS_FLAG=\"$MYSQL_SHA2_RSA_KEYS_FLAG\" envsubst <\"$compose_file\") >\"$compose_file.tmp\"\n\n    if [ \"$toxiproxy\" = true ]; then\n        echo \"Starting toxiproxy container...\"\n        cat <<EOF >>\"$compose_file.tmp\"\n  mysql-toxiproxy:\n    image: \"ghcr.io/shopify/toxiproxy:latest\"\n    container_name: mysql-toxiproxy\n    ports:\n      - '8474:8474'\n      - '23308:23308'\n    expose:\n      - '23308'\n      - '8474'\nEOF\n    fi\n\n    docker compose -f \"$compose_file.tmp\" up -d --wait\n\n    echo \"Waiting for MySQL...\"\n    poll_mysql \"master\" || exit 1\n    poll_mysql \"replica\" || exit 1\n\n    echo -n \"Setting up replication...\"\n    mysql-source -e \"create user if not exists 'repl'@'%' identified with $MYSQL_PASSWORD_HASHING_ALGORITHM by 'repl';\"\n    mysql-source -e \"grant replication slave on *.* to 'repl'@'%'; flush privileges;\"\n    mysql-source -e \"create user if not exists 'gh-ost'@'%' identified with $MYSQL_PASSWORD_HASHING_ALGORITHM by 'gh-ost';\"\n    mysql-source -e \"grant all on *.* to 'gh-ost'@'%';\"\n\n    sleep 1\n    if [[ $TEST_MYSQL_IMAGE =~ \"mysql:8.4\" ]]; then\n        mysql-replica -e \"change replication source to source_host='mysql-primary', source_port=3307, source_user='repl', source_password='repl', source_auto_position=1, source_ssl=1;\"\n        mysql-replica -e \"start replica;\"\n    else\n        mysql-replica -e \"change master to master_host='mysql-primary', master_port=3307, master_user='repl', master_password='repl', master_auto_position=1;\"\n        mysql-replica -e \"start slave;\"\n    fi\n    echo \"OK\"\n\n    if [ \"$toxiproxy\" = true ]; then\n        echo \"Creating toxiproxy...\"\n        create_toxiproxy\n        echo \"OK\"\n    fi\n}\n\nteardown() {\n    echo \"Stopping containers...\"\n    docker stop mysql-replica\n    docker stop mysql-primary\n    docker stop mysql-toxiproxy 2>/dev/null || true\n    echo \"Removing containers...\"\n    docker rm mysql-replica\n    docker rm mysql-primary\n    docker rm mysql-toxiproxy 2>/dev/null || true\n}\n\nmain() {\n    local cmd=\"$1\"\n    local tflag=\n    if [[ \"$2\" == \"-t\" ]]; then\n        toxiproxy=true\n    fi\n    if [[ \"$cmd\" == \"up\" ]]; then\n        setup\n    elif [[ \"$cmd\" == \"down\" ]]; then\n        teardown\n    elif [[ \"$cmd\" == \"run\" ]]; then\n        shift 1\n        \"$GH_OST_ROOT/localtests/test.sh\" -d \"$@\"\n    fi\n}\n\nmain \"$@\"\n"
  },
  {
    "path": "script/ensure-go-installed",
    "content": "#!/bin/bash\n\nPREFERRED_GO_VERSION=go1.23.0\nSUPPORTED_GO_VERSIONS='go1.2[012345]'\n\nGO_PKG_DARWIN=${PREFERRED_GO_VERSION}.darwin-amd64.pkg\nGO_PKG_DARWIN_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n\nGO_PKG_LINUX=${PREFERRED_GO_VERSION}.linux-amd64.tar.gz\nGO_PKG_LINUX_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n\nexport ROOTDIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")/..\" && pwd)\"\ncd $ROOTDIR\n\n# If Go isn't installed globally, setup environment variables for local install.\nif [ -z \"$(which go)\" ] || [ -z \"$(go version | grep \"$SUPPORTED_GO_VERSIONS\")\" ]; then\n  GODIR=\"$ROOTDIR/.vendor/golocal\"\n\n  if [ $(uname -s) = \"Darwin\" ]; then\n    export GOROOT=\"$GODIR/usr/local/go\"\n  else\n    export GOROOT=\"$GODIR/go\"\n  fi\n\n  export PATH=\"$GOROOT/bin:$PATH\"\nfi\n\n# Check if local install exists, and install otherwise.\nif [ -z \"$(which go)\" ] || [ -z \"$(go version | grep \"$SUPPORTED_GO_VERSIONS\")\" ]; then\n  [ -d \"$GODIR\" ] && rm -rf $GODIR\n  mkdir -p \"$GODIR\"\n  cd \"$GODIR\"\n\n  if [ $(uname -s) = \"Darwin\" ]; then\n    curl -L -O https://dl.google.com/go/$GO_PKG_DARWIN\n    shasum -a256 $GO_PKG_DARWIN | grep $GO_PKG_DARWIN_SHA\n    xar -xf $GO_PKG_DARWIN\n    cpio -i <com.googlecode.go.pkg/Payload\n  else\n    curl -L -O https://dl.google.com/go/$GO_PKG_LINUX\n    shasum -a256 $GO_PKG_LINUX | grep $GO_PKG_LINUX_SHA\n    tar xf $GO_PKG_LINUX\n  fi\n\n  # Prove we did something right\n  echo \"$(go version) installed in $GODIR: Go Binary: $(which go)\"\nelse\n  echo \"$(go version) found in $GODIR: Go Binary: $(which go)\"\nfi\n\ncd $ROOTDIR\n\n# Configure the new go to be the first go found\nexport GOPATH=$ROOTDIR/.vendor\n"
  },
  {
    "path": "script/ensure-golangci-lint-installed",
    "content": "#!/bin/bash\n\n# See https://github.com/golangci/golangci-lint/releases\nGOLANGCI_RELEASE=v1.61.0\nGOLANGCI_INSTALL_SCRIPT=https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh\n\nif [ -z \"$GOPATH\" ]; then\n  echo \"GOPATH must be set\"\n  exit 1\nfi\n\nif [ ! -x \"$GOPATH/bin/golangci-lint\" ]; then\n  echo \"Installing golangci-lint $GOLANGCI_RELEASE using script: $GOLANGCI_INSTALL_SCRIPT\"\n  curl -sSfL $GOLANGCI_INSTALL_SCRIPT | sh -s -- -b $(go env GOPATH)/bin $GOLANGCI_RELEASE\nfi\n\n$GOPATH/bin/golangci-lint --version\n"
  },
  {
    "path": "script/gh-ost-test-mysql-master",
    "content": "#!/bin/bash\n#\n# This executes a command on the mysql-primary docker container created\n# from localtests/docker-compose.yml. It's used by localtests/test.sh.\n\nMYSQL_PWD=opensesame mysql -uroot -h0.0.0.0 -P3307 \"$@\"\n"
  },
  {
    "path": "script/gh-ost-test-mysql-replica",
    "content": "#!/bin/bash\n#\n# This executes a command on the mysql-replica docker container created\n# from localtests/docker-compose.yml. It's used by localtests/test.sh.\n\nMYSQL_PWD=opensesame mysql -uroot -h0.0.0.0 -P3308 \"$@\"\n"
  },
  {
    "path": "script/go",
    "content": "#!/bin/bash\n\nset -e\n\n. script/bootstrap\n\nmkdir -p bin\nbindir=\"$PWD\"/bin\n\ncd .gopath/src/github.com/github/gh-ost\ngo \"$@\"\n"
  },
  {
    "path": "script/lint",
    "content": "#!/bin/bash\n\nset -e\n\n. script/ensure-go-installed\n. script/ensure-golangci-lint-installed\n\nif [ -x \"$GOPATH/bin/golangci-lint\" ]; then\n  echo \"Running golangci-lint run\"\n  $GOPATH/bin/golangci-lint run --config=.golangci.yml\n  echo \"Done, exit code: $?\"\nelse\n  echo \"ERROR: cannot find golangci-lint at $GOPATH/bin\"\n  exit 1\nfi\n"
  },
  {
    "path": "script/test",
    "content": "#!/bin/bash\n\nset -e\n\n. script/bootstrap\n\necho \"Verifying code is formatted via 'gofmt -s -w  go/'\"\ngofmt -s -w  go/\ngit diff --exit-code --quiet\n\necho \"Building\"\nscript/build\n\ncd .gopath/src/github.com/github/gh-ost\n\necho \"Running unit tests\"\ngo test -v -covermode=atomic ./go/...\n"
  },
  {
    "path": "test.sh",
    "content": "#!/bin/bash\n\nretval=0\n\nfor testsuite in base mysql sql\ndo\n  pushd go/${testsuite} > /dev/null;\n\n  go test $*;\n\n  [ $? -ne 0 ] && retval=1\n  popd > /dev/null;\ndone\n\nexit $retval\n"
  },
  {
    "path": "tmp/.gitkeep",
    "content": ""
  },
  {
    "path": "vendor/dario.cat/mergo/.deepsource.toml",
    "content": "version = 1\n\ntest_patterns = [\n  \"*_test.go\"\n]\n\n[[analyzers]]\nname = \"go\"\nenabled = true\n\n  [analyzers.meta]\n  import_path = \"dario.cat/mergo\""
  },
  {
    "path": "vendor/dario.cat/mergo/.gitignore",
    "content": "#### joe made this: http://goel.io/joe\n\n#### go ####\n# Binaries for programs and plugins\n*.exe\n*.dll\n*.so\n*.dylib\n\n# Test binary, build with `go test -c`\n*.test\n\n# Output of the go coverage tool, specifically when used with LiteIDE\n*.out\n\n# Golang/Intellij\n.idea\n\n# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736\n.glide/\n\n#### vim ####\n# Swap\n[._]*.s[a-v][a-z]\n[._]*.sw[a-p]\n[._]s[a-v][a-z]\n[._]sw[a-p]\n\n# Session\nSession.vim\n\n# Temporary\n.netrwhist\n*~\n# Auto-generated tag files\ntags\n"
  },
  {
    "path": "vendor/dario.cat/mergo/.travis.yml",
    "content": "language: go\narch:\n    - amd64\n    - ppc64le\ninstall:\n  - go get -t\n  - go get golang.org/x/tools/cmd/cover\n  - go get github.com/mattn/goveralls\nscript:\n  - go test -race -v ./...\nafter_script:\n  - $HOME/gopath/bin/goveralls -service=travis-ci -repotoken $COVERALLS_TOKEN\n"
  },
  {
    "path": "vendor/dario.cat/mergo/CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at i@dario.im. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "vendor/dario.cat/mergo/CONTRIBUTING.md",
    "content": "<!-- omit in toc -->\n# Contributing to mergo\n\nFirst off, thanks for taking the time to contribute! ❤️\n\nAll types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉\n\n> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:\n> - Star the project\n> - Tweet about it\n> - Refer this project in your project's readme\n> - Mention the project at local meetups and tell your friends/colleagues\n\n<!-- omit in toc -->\n## Table of Contents\n\n- [Code of Conduct](#code-of-conduct)\n- [I Have a Question](#i-have-a-question)\n- [I Want To Contribute](#i-want-to-contribute)\n- [Reporting Bugs](#reporting-bugs)\n- [Suggesting Enhancements](#suggesting-enhancements)\n\n## Code of Conduct\n\nThis project and everyone participating in it is governed by the\n[mergo Code of Conduct](https://github.com/imdario/mergoblob/master/CODE_OF_CONDUCT.md).\nBy participating, you are expected to uphold this code. Please report unacceptable behavior\nto <>.\n\n\n## I Have a Question\n\n> If you want to ask a question, we assume that you have read the available [Documentation](https://pkg.go.dev/github.com/imdario/mergo).\n\nBefore you ask a question, it is best to search for existing [Issues](https://github.com/imdario/mergo/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first.\n\nIf you then still feel the need to ask a question and need clarification, we recommend the following:\n\n- Open an [Issue](https://github.com/imdario/mergo/issues/new).\n- Provide as much context as you can about what you're running into.\n- Provide project and platform versions (nodejs, npm, etc), depending on what seems relevant.\n\nWe will then take care of the issue as soon as possible.\n\n## I Want To Contribute\n\n> ### Legal Notice <!-- omit in toc -->\n> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license.\n\n### Reporting Bugs\n\n<!-- omit in toc -->\n#### Before Submitting a Bug Report\n\nA good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible.\n\n- Make sure that you are using the latest version.\n- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](). If you are looking for support, you might want to check [this section](#i-have-a-question)).\n- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/imdario/mergoissues?q=label%3Abug).\n- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue.\n- Collect information about the bug:\n- Stack trace (Traceback)\n- OS, Platform and Version (Windows, Linux, macOS, x86, ARM)\n- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant.\n- Possibly your input and the output\n- Can you reliably reproduce the issue? And can you also reproduce it with older versions?\n\n<!-- omit in toc -->\n#### How Do I Submit a Good Bug Report?\n\n> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to .\n<!-- You may add a PGP key to allow the messages to be sent encrypted as well. -->\n\nWe use GitHub issues to track bugs and errors. If you run into an issue with the project:\n\n- Open an [Issue](https://github.com/imdario/mergo/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.)\n- Explain the behavior you would expect and the actual behavior.\n- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case.\n- Provide the information you collected in the previous section.\n\nOnce it's filed:\n\n- The project team will label the issue accordingly.\n- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced.\n- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be implemented by someone.\n\n### Suggesting Enhancements\n\nThis section guides you through submitting an enhancement suggestion for mergo, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.\n\n<!-- omit in toc -->\n#### Before Submitting an Enhancement\n\n- Make sure that you are using the latest version.\n- Read the [documentation]() carefully and find out if the functionality is already covered, maybe by an individual configuration.\n- Perform a [search](https://github.com/imdario/mergo/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.\n- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library.\n\n<!-- omit in toc -->\n#### How Do I Submit a Good Enhancement Suggestion?\n\nEnhancement suggestions are tracked as [GitHub issues](https://github.com/imdario/mergo/issues).\n\n- Use a **clear and descriptive title** for the issue to identify the suggestion.\n- Provide a **step-by-step description of the suggested enhancement** in as many details as possible.\n- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you.\n- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. <!-- this should only be included if the project has a GUI -->\n- **Explain why this enhancement would be useful** to most mergo users. You may also want to point out the other projects that solved it better and which could serve as inspiration.\n\n<!-- omit in toc -->\n## Attribution\nThis guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)!\n"
  },
  {
    "path": "vendor/dario.cat/mergo/LICENSE",
    "content": "Copyright (c) 2013 Dario Castañé. All rights reserved.\nCopyright (c) 2012 The Go Authors. All 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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/dario.cat/mergo/README.md",
    "content": "# Mergo\n\n[![GitHub release][5]][6]\n[![GoCard][7]][8]\n[![Test status][1]][2]\n[![OpenSSF Scorecard][21]][22]\n[![OpenSSF Best Practices][19]][20]\n[![Coverage status][9]][10]\n[![Sourcegraph][11]][12]\n[![FOSSA status][13]][14]\n\n[![GoDoc][3]][4]\n[![Become my sponsor][15]][16]\n[![Tidelift][17]][18]\n\n[1]: https://github.com/imdario/mergo/workflows/tests/badge.svg?branch=master\n[2]: https://github.com/imdario/mergo/actions/workflows/tests.yml\n[3]: https://godoc.org/github.com/imdario/mergo?status.svg\n[4]: https://godoc.org/github.com/imdario/mergo\n[5]: https://img.shields.io/github/release/imdario/mergo.svg\n[6]: https://github.com/imdario/mergo/releases\n[7]: https://goreportcard.com/badge/imdario/mergo\n[8]: https://goreportcard.com/report/github.com/imdario/mergo\n[9]: https://coveralls.io/repos/github/imdario/mergo/badge.svg?branch=master\n[10]: https://coveralls.io/github/imdario/mergo?branch=master\n[11]: https://sourcegraph.com/github.com/imdario/mergo/-/badge.svg\n[12]: https://sourcegraph.com/github.com/imdario/mergo?badge\n[13]: https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimdario%2Fmergo.svg?type=shield\n[14]: https://app.fossa.io/projects/git%2Bgithub.com%2Fimdario%2Fmergo?ref=badge_shield\n[15]: https://img.shields.io/github/sponsors/imdario\n[16]: https://github.com/sponsors/imdario\n[17]: https://tidelift.com/badges/package/go/github.com%2Fimdario%2Fmergo\n[18]: https://tidelift.com/subscription/pkg/go-github.com-imdario-mergo\n[19]: https://bestpractices.coreinfrastructure.org/projects/7177/badge\n[20]: https://bestpractices.coreinfrastructure.org/projects/7177\n[21]: https://api.securityscorecards.dev/projects/github.com/imdario/mergo/badge\n[22]: https://api.securityscorecards.dev/projects/github.com/imdario/mergo\n\nA helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements.\n\nMergo merges same-type structs and maps by setting default values in zero-value fields. Mergo won't merge unexported (private) fields. It will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection).\n\nAlso a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the Province of Ancona in the Italian region of Marche.\n\n## Status\n\nMergo is stable and frozen, ready for production. Check a short list of the projects using at large scale it [here](https://github.com/imdario/mergo#mergo-in-the-wild).\n\nNo new features are accepted. They will be considered for a future v2 that improves the implementation and fixes bugs for corner cases.\n\n### Important notes\n\n#### 1.0.0\n\nIn [1.0.0](//github.com/imdario/mergo/releases/tag/1.0.0) Mergo moves to a vanity URL `dario.cat/mergo`. No more v1 versions will be released.\n\nIf the vanity URL is causing issues in your project due to a dependency pulling Mergo - it isn't a direct dependency in your project - it is recommended to use [replace](https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive) to pin the version to the last one with the old import URL:\n\n```\nreplace github.com/imdario/mergo => github.com/imdario/mergo v0.3.16\n```\n\n#### 0.3.9\n\nPlease keep in mind that a problematic PR broke [0.3.9](//github.com/imdario/mergo/releases/tag/0.3.9). I reverted it in [0.3.10](//github.com/imdario/mergo/releases/tag/0.3.10), and I consider it stable but not bug-free. Also, this version adds support for go modules.\n\nKeep in mind that in [0.3.2](//github.com/imdario/mergo/releases/tag/0.3.2), Mergo changed `Merge()`and `Map()` signatures to support [transformers](#transformers). I added an optional/variadic argument so that it won't break the existing code.\n\nIf you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with ```go get -u dario.cat/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0).\n\n### Donations\n\nIf Mergo is useful to you, consider buying me a coffee, a beer, or making a monthly donation to allow me to keep building great free software. :heart_eyes:\n\n<a href=\"https://liberapay.com/dario/donate\"><img alt=\"Donate using Liberapay\" src=\"https://liberapay.com/assets/widgets/donate.svg\"></a>\n<a href='https://github.com/sponsors/imdario' target='_blank'><img alt=\"Become my sponsor\" src=\"https://img.shields.io/github/sponsors/imdario?style=for-the-badge\" /></a>\n\n### Mergo in the wild\n\nMergo is used by [thousands](https://deps.dev/go/dario.cat%2Fmergo/v1.0.0/dependents) [of](https://deps.dev/go/github.com%2Fimdario%2Fmergo/v0.3.16/dependents) [projects](https://deps.dev/go/github.com%2Fimdario%2Fmergo/v0.3.12), including:\n\n* [containerd/containerd](https://github.com/containerd/containerd)\n* [datadog/datadog-agent](https://github.com/datadog/datadog-agent)\n* [docker/cli/](https://github.com/docker/cli/)\n* [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser)\n* [go-micro/go-micro](https://github.com/go-micro/go-micro)\n* [grafana/loki](https://github.com/grafana/loki)\n* [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)\n* [masterminds/sprig](github.com/Masterminds/sprig)\n* [moby/moby](https://github.com/moby/moby)\n* [slackhq/nebula](https://github.com/slackhq/nebula)\n* [volcano-sh/volcano](https://github.com/volcano-sh/volcano)\n\n## Install\n\n    go get dario.cat/mergo\n\n    // use in your .go code\n    import (\n        \"dario.cat/mergo\"\n    )\n\n## Usage\n\nYou can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as [they are zero values](https://golang.org/ref/spec#The_zero_value) too. Also, maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection).\n\n```go\nif err := mergo.Merge(&dst, src); err != nil {\n    // ...\n}\n```\n\nAlso, you can merge overwriting values using the transformer `WithOverride`.\n\n```go\nif err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil {\n    // ...\n}\n```\n\nIf you need to override pointers, so the source pointer's value is assigned to the destination's pointer, you must use `WithoutDereference`:\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"dario.cat/mergo\"\n)\n\ntype Foo struct {\n\tA *string\n\tB int64\n}\n\nfunc main() {\n\tfirst := \"first\"\n\tsecond := \"second\"\n\tsrc := Foo{\n\t\tA: &first,\n\t\tB: 2,\n\t}\n\n\tdest := Foo{\n\t\tA: &second,\n\t\tB: 1,\n\t}\n\n\tmergo.Merge(&dest, src, mergo.WithOverride, mergo.WithoutDereference)\n}\n```\n\nAdditionally, you can map a `map[string]interface{}` to a struct (and otherwise, from struct to map), following the same restrictions as in `Merge()`. Keys are capitalized to find each corresponding exported field.\n\n```go\nif err := mergo.Map(&dst, srcMap); err != nil {\n    // ...\n}\n```\n\nWarning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as `map[string]interface{}`. They will be just assigned as values.\n\nHere is a nice example:\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"dario.cat/mergo\"\n)\n\ntype Foo struct {\n\tA string\n\tB int64\n}\n\nfunc main() {\n\tsrc := Foo{\n\t\tA: \"one\",\n\t\tB: 2,\n\t}\n\tdest := Foo{\n\t\tA: \"two\",\n\t}\n\tmergo.Merge(&dest, src)\n\tfmt.Println(dest)\n\t// Will print\n\t// {two 2}\n}\n```\n\nNote: if test are failing due missing package, please execute:\n\n    go get gopkg.in/yaml.v3\n\n### Transformers\n\nTransformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, `time.Time` is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero `time.Time`?\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"dario.cat/mergo\"\n    \"reflect\"\n    \"time\"\n)\n\ntype timeTransformer struct {\n}\n\nfunc (t timeTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error {\n\tif typ == reflect.TypeOf(time.Time{}) {\n\t\treturn func(dst, src reflect.Value) error {\n\t\t\tif dst.CanSet() {\n\t\t\t\tisZero := dst.MethodByName(\"IsZero\")\n\t\t\t\tresult := isZero.Call([]reflect.Value{})\n\t\t\t\tif result[0].Bool() {\n\t\t\t\t\tdst.Set(src)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn nil\n}\n\ntype Snapshot struct {\n\tTime time.Time\n\t// ...\n}\n\nfunc main() {\n\tsrc := Snapshot{time.Now()}\n\tdest := Snapshot{}\n\tmergo.Merge(&dest, src, mergo.WithTransformers(timeTransformer{}))\n\tfmt.Println(dest)\n\t// Will print\n\t// { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 }\n}\n```\n\n## Contact me\n\nIf I can help you, you have an idea or you are using Mergo in your projects, don't hesitate to drop me a line (or a pull request): [@im_dario](https://twitter.com/im_dario)\n\n## About\n\nWritten by [Dario Castañé](http://dario.im).\n\n## License\n\n[BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) license, as [Go language](http://golang.org/LICENSE).\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimdario%2Fmergo.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fimdario%2Fmergo?ref=badge_large)\n"
  },
  {
    "path": "vendor/dario.cat/mergo/SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 0.3.x   | :white_check_mark: |\n| < 0.3   | :x:                |\n\n## Security contact information\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure.\n"
  },
  {
    "path": "vendor/dario.cat/mergo/doc.go",
    "content": "// Copyright 2013 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nA helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements.\n\nMergo merges same-type structs and maps by setting default values in zero-value fields. Mergo won't merge unexported (private) fields. It will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection).\n\n# Status\n\nIt is ready for production use. It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, etc.\n\n# Important notes\n\n1.0.0\n\nIn 1.0.0 Mergo moves to a vanity URL `dario.cat/mergo`.\n\n0.3.9\n\nPlease keep in mind that a problematic PR broke 0.3.9. We reverted it in 0.3.10. We consider 0.3.10 as stable but not bug-free. . Also, this version adds suppot for go modules.\n\nKeep in mind that in 0.3.2, Mergo changed Merge() and Map() signatures to support transformers. We added an optional/variadic argument so that it won't break the existing code.\n\nIf you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with go get -u dario.cat/mergo. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0).\n\n# Install\n\nDo your usual installation procedure:\n\n\tgo get dario.cat/mergo\n\n\t// use in your .go code\n\timport (\n\t    \"dario.cat/mergo\"\n\t)\n\n# Usage\n\nYou can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as they are zero values too. Also, maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection).\n\n\tif err := mergo.Merge(&dst, src); err != nil {\n\t\t// ...\n\t}\n\nAlso, you can merge overwriting values using the transformer WithOverride.\n\n\tif err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil {\n\t\t// ...\n\t}\n\nAdditionally, you can map a map[string]interface{} to a struct (and otherwise, from struct to map), following the same restrictions as in Merge(). Keys are capitalized to find each corresponding exported field.\n\n\tif err := mergo.Map(&dst, srcMap); err != nil {\n\t\t// ...\n\t}\n\nWarning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as map[string]interface{}. They will be just assigned as values.\n\nHere is a nice example:\n\n\tpackage main\n\n\timport (\n\t\t\"fmt\"\n\t\t\"dario.cat/mergo\"\n\t)\n\n\ttype Foo struct {\n\t\tA string\n\t\tB int64\n\t}\n\n\tfunc main() {\n\t\tsrc := Foo{\n\t\t\tA: \"one\",\n\t\t\tB: 2,\n\t\t}\n\t\tdest := Foo{\n\t\t\tA: \"two\",\n\t\t}\n\t\tmergo.Merge(&dest, src)\n\t\tfmt.Println(dest)\n\t\t// Will print\n\t\t// {two 2}\n\t}\n\n# Transformers\n\nTransformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, time.Time is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero time.Time?\n\n\tpackage main\n\n\timport (\n\t\t\"fmt\"\n\t\t\"dario.cat/mergo\"\n\t\t\"reflect\"\n\t\t\"time\"\n\t)\n\n\ttype timeTransformer struct {\n\t}\n\n\tfunc (t timeTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error {\n\t\tif typ == reflect.TypeOf(time.Time{}) {\n\t\t\treturn func(dst, src reflect.Value) error {\n\t\t\t\tif dst.CanSet() {\n\t\t\t\t\tisZero := dst.MethodByName(\"IsZero\")\n\t\t\t\t\tresult := isZero.Call([]reflect.Value{})\n\t\t\t\t\tif result[0].Bool() {\n\t\t\t\t\t\tdst.Set(src)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\ttype Snapshot struct {\n\t\tTime time.Time\n\t\t// ...\n\t}\n\n\tfunc main() {\n\t\tsrc := Snapshot{time.Now()}\n\t\tdest := Snapshot{}\n\t\tmergo.Merge(&dest, src, mergo.WithTransformers(timeTransformer{}))\n\t\tfmt.Println(dest)\n\t\t// Will print\n\t\t// { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 }\n\t}\n\n# Contact me\n\nIf I can help you, you have an idea or you are using Mergo in your projects, don't hesitate to drop me a line (or a pull request): https://twitter.com/im_dario\n\n# About\n\nWritten by Dario Castañé: https://da.rio.hn\n\n# License\n\nBSD 3-Clause license, as Go language.\n*/\npackage mergo\n"
  },
  {
    "path": "vendor/dario.cat/mergo/map.go",
    "content": "// Copyright 2014 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Based on src/pkg/reflect/deepequal.go from official\n// golang's stdlib.\n\npackage mergo\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\nfunc changeInitialCase(s string, mapper func(rune) rune) string {\n\tif s == \"\" {\n\t\treturn s\n\t}\n\tr, n := utf8.DecodeRuneInString(s)\n\treturn string(mapper(r)) + s[n:]\n}\n\nfunc isExported(field reflect.StructField) bool {\n\tr, _ := utf8.DecodeRuneInString(field.Name)\n\treturn r >= 'A' && r <= 'Z'\n}\n\n// Traverses recursively both values, assigning src's fields values to dst.\n// The map argument tracks comparisons that have already been seen, which allows\n// short circuiting on recursive types.\nfunc deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (err error) {\n\toverwrite := config.Overwrite\n\tif dst.CanAddr() {\n\t\taddr := dst.UnsafeAddr()\n\t\th := 17 * addr\n\t\tseen := visited[h]\n\t\ttyp := dst.Type()\n\t\tfor p := seen; p != nil; p = p.next {\n\t\t\tif p.ptr == addr && p.typ == typ {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\t// Remember, remember...\n\t\tvisited[h] = &visit{typ, seen, addr}\n\t}\n\tzeroValue := reflect.Value{}\n\tswitch dst.Kind() {\n\tcase reflect.Map:\n\t\tdstMap := dst.Interface().(map[string]interface{})\n\t\tfor i, n := 0, src.NumField(); i < n; i++ {\n\t\t\tsrcType := src.Type()\n\t\t\tfield := srcType.Field(i)\n\t\t\tif !isExported(field) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfieldName := field.Name\n\t\t\tfieldName = changeInitialCase(fieldName, unicode.ToLower)\n\t\t\tif _, ok := dstMap[fieldName]; !ok || (!isEmptyValue(reflect.ValueOf(src.Field(i).Interface()), !config.ShouldNotDereference) && overwrite) || config.overwriteWithEmptyValue {\n\t\t\t\tdstMap[fieldName] = src.Field(i).Interface()\n\t\t\t}\n\t\t}\n\tcase reflect.Ptr:\n\t\tif dst.IsNil() {\n\t\t\tv := reflect.New(dst.Type().Elem())\n\t\t\tdst.Set(v)\n\t\t}\n\t\tdst = dst.Elem()\n\t\tfallthrough\n\tcase reflect.Struct:\n\t\tsrcMap := src.Interface().(map[string]interface{})\n\t\tfor key := range srcMap {\n\t\t\tconfig.overwriteWithEmptyValue = true\n\t\t\tsrcValue := srcMap[key]\n\t\t\tfieldName := changeInitialCase(key, unicode.ToUpper)\n\t\t\tdstElement := dst.FieldByName(fieldName)\n\t\t\tif dstElement == zeroValue {\n\t\t\t\t// We discard it because the field doesn't exist.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsrcElement := reflect.ValueOf(srcValue)\n\t\t\tdstKind := dstElement.Kind()\n\t\t\tsrcKind := srcElement.Kind()\n\t\t\tif srcKind == reflect.Ptr && dstKind != reflect.Ptr {\n\t\t\t\tsrcElement = srcElement.Elem()\n\t\t\t\tsrcKind = reflect.TypeOf(srcElement.Interface()).Kind()\n\t\t\t} else if dstKind == reflect.Ptr {\n\t\t\t\t// Can this work? I guess it can't.\n\t\t\t\tif srcKind != reflect.Ptr && srcElement.CanAddr() {\n\t\t\t\t\tsrcPtr := srcElement.Addr()\n\t\t\t\t\tsrcElement = reflect.ValueOf(srcPtr)\n\t\t\t\t\tsrcKind = reflect.Ptr\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !srcElement.IsValid() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif srcKind == dstKind {\n\t\t\t\tif err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else if dstKind == reflect.Interface && dstElement.Kind() == reflect.Interface {\n\t\t\t\tif err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else if srcKind == reflect.Map {\n\t\t\t\tif err = deepMap(dstElement, srcElement, visited, depth+1, config); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn fmt.Errorf(\"type mismatch on %s field: found %v, expected %v\", fieldName, srcKind, dstKind)\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\n// Map sets fields' values in dst from src.\n// src can be a map with string keys or a struct. dst must be the opposite:\n// if src is a map, dst must be a valid pointer to struct. If src is a struct,\n// dst must be map[string]interface{}.\n// It won't merge unexported (private) fields and will do recursively\n// any exported field.\n// If dst is a map, keys will be src fields' names in lower camel case.\n// Missing key in src that doesn't match a field in dst will be skipped. This\n// doesn't apply if dst is a map.\n// This is separated method from Merge because it is cleaner and it keeps sane\n// semantics: merging equal types, mapping different (restricted) types.\nfunc Map(dst, src interface{}, opts ...func(*Config)) error {\n\treturn _map(dst, src, opts...)\n}\n\n// MapWithOverwrite will do the same as Map except that non-empty dst attributes will be overridden by\n// non-empty src attribute values.\n// Deprecated: Use Map(…) with WithOverride\nfunc MapWithOverwrite(dst, src interface{}, opts ...func(*Config)) error {\n\treturn _map(dst, src, append(opts, WithOverride)...)\n}\n\nfunc _map(dst, src interface{}, opts ...func(*Config)) error {\n\tif dst != nil && reflect.ValueOf(dst).Kind() != reflect.Ptr {\n\t\treturn ErrNonPointerArgument\n\t}\n\tvar (\n\t\tvDst, vSrc reflect.Value\n\t\terr        error\n\t)\n\tconfig := &Config{}\n\n\tfor _, opt := range opts {\n\t\topt(config)\n\t}\n\n\tif vDst, vSrc, err = resolveValues(dst, src); err != nil {\n\t\treturn err\n\t}\n\t// To be friction-less, we redirect equal-type arguments\n\t// to deepMerge. Only because arguments can be anything.\n\tif vSrc.Kind() == vDst.Kind() {\n\t\treturn deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config)\n\t}\n\tswitch vSrc.Kind() {\n\tcase reflect.Struct:\n\t\tif vDst.Kind() != reflect.Map {\n\t\t\treturn ErrExpectedMapAsDestination\n\t\t}\n\tcase reflect.Map:\n\t\tif vDst.Kind() != reflect.Struct {\n\t\t\treturn ErrExpectedStructAsDestination\n\t\t}\n\tdefault:\n\t\treturn ErrNotSupported\n\t}\n\treturn deepMap(vDst, vSrc, make(map[uintptr]*visit), 0, config)\n}\n"
  },
  {
    "path": "vendor/dario.cat/mergo/merge.go",
    "content": "// Copyright 2013 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Based on src/pkg/reflect/deepequal.go from official\n// golang's stdlib.\n\npackage mergo\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\nfunc hasMergeableFields(dst reflect.Value) (exported bool) {\n\tfor i, n := 0, dst.NumField(); i < n; i++ {\n\t\tfield := dst.Type().Field(i)\n\t\tif field.Anonymous && dst.Field(i).Kind() == reflect.Struct {\n\t\t\texported = exported || hasMergeableFields(dst.Field(i))\n\t\t} else if isExportedComponent(&field) {\n\t\t\texported = exported || len(field.PkgPath) == 0\n\t\t}\n\t}\n\treturn\n}\n\nfunc isExportedComponent(field *reflect.StructField) bool {\n\tpkgPath := field.PkgPath\n\tif len(pkgPath) > 0 {\n\t\treturn false\n\t}\n\tc := field.Name[0]\n\tif 'a' <= c && c <= 'z' || c == '_' {\n\t\treturn false\n\t}\n\treturn true\n}\n\ntype Config struct {\n\tTransformers                 Transformers\n\tOverwrite                    bool\n\tShouldNotDereference         bool\n\tAppendSlice                  bool\n\tTypeCheck                    bool\n\toverwriteWithEmptyValue      bool\n\toverwriteSliceWithEmptyValue bool\n\tsliceDeepCopy                bool\n\tdebug                        bool\n}\n\ntype Transformers interface {\n\tTransformer(reflect.Type) func(dst, src reflect.Value) error\n}\n\n// Traverses recursively both values, assigning src's fields values to dst.\n// The map argument tracks comparisons that have already been seen, which allows\n// short circuiting on recursive types.\nfunc deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (err error) {\n\toverwrite := config.Overwrite\n\ttypeCheck := config.TypeCheck\n\toverwriteWithEmptySrc := config.overwriteWithEmptyValue\n\toverwriteSliceWithEmptySrc := config.overwriteSliceWithEmptyValue\n\tsliceDeepCopy := config.sliceDeepCopy\n\n\tif !src.IsValid() {\n\t\treturn\n\t}\n\tif dst.CanAddr() {\n\t\taddr := dst.UnsafeAddr()\n\t\th := 17 * addr\n\t\tseen := visited[h]\n\t\ttyp := dst.Type()\n\t\tfor p := seen; p != nil; p = p.next {\n\t\t\tif p.ptr == addr && p.typ == typ {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\t// Remember, remember...\n\t\tvisited[h] = &visit{typ, seen, addr}\n\t}\n\n\tif config.Transformers != nil && !isReflectNil(dst) && dst.IsValid() {\n\t\tif fn := config.Transformers.Transformer(dst.Type()); fn != nil {\n\t\t\terr = fn(dst, src)\n\t\t\treturn\n\t\t}\n\t}\n\n\tswitch dst.Kind() {\n\tcase reflect.Struct:\n\t\tif hasMergeableFields(dst) {\n\t\t\tfor i, n := 0, dst.NumField(); i < n; i++ {\n\t\t\t\tif err = deepMerge(dst.Field(i), src.Field(i), visited, depth+1, config); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif dst.CanSet() && (isReflectNil(dst) || overwrite) && (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc) {\n\t\t\t\tdst.Set(src)\n\t\t\t}\n\t\t}\n\tcase reflect.Map:\n\t\tif dst.IsNil() && !src.IsNil() {\n\t\t\tif dst.CanSet() {\n\t\t\t\tdst.Set(reflect.MakeMap(dst.Type()))\n\t\t\t} else {\n\t\t\t\tdst = src\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tif src.Kind() != reflect.Map {\n\t\t\tif overwrite && dst.CanSet() {\n\t\t\t\tdst.Set(src)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tfor _, key := range src.MapKeys() {\n\t\t\tsrcElement := src.MapIndex(key)\n\t\t\tif !srcElement.IsValid() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdstElement := dst.MapIndex(key)\n\t\t\tswitch srcElement.Kind() {\n\t\t\tcase reflect.Chan, reflect.Func, reflect.Map, reflect.Interface, reflect.Slice:\n\t\t\t\tif srcElement.IsNil() {\n\t\t\t\t\tif overwrite {\n\t\t\t\t\t\tdst.SetMapIndex(key, srcElement)\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfallthrough\n\t\t\tdefault:\n\t\t\t\tif !srcElement.CanInterface() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tswitch reflect.TypeOf(srcElement.Interface()).Kind() {\n\t\t\t\tcase reflect.Struct:\n\t\t\t\t\tfallthrough\n\t\t\t\tcase reflect.Ptr:\n\t\t\t\t\tfallthrough\n\t\t\t\tcase reflect.Map:\n\t\t\t\t\tsrcMapElm := srcElement\n\t\t\t\t\tdstMapElm := dstElement\n\t\t\t\t\tif srcMapElm.CanInterface() {\n\t\t\t\t\t\tsrcMapElm = reflect.ValueOf(srcMapElm.Interface())\n\t\t\t\t\t\tif dstMapElm.IsValid() {\n\t\t\t\t\t\t\tdstMapElm = reflect.ValueOf(dstMapElm.Interface())\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif err = deepMerge(dstMapElm, srcMapElm, visited, depth+1, config); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\tcase reflect.Slice:\n\t\t\t\t\tsrcSlice := reflect.ValueOf(srcElement.Interface())\n\n\t\t\t\t\tvar dstSlice reflect.Value\n\t\t\t\t\tif !dstElement.IsValid() || dstElement.IsNil() {\n\t\t\t\t\t\tdstSlice = reflect.MakeSlice(srcSlice.Type(), 0, srcSlice.Len())\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdstSlice = reflect.ValueOf(dstElement.Interface())\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc || overwriteSliceWithEmptySrc) && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) && !config.AppendSlice && !sliceDeepCopy {\n\t\t\t\t\t\tif typeCheck && srcSlice.Type() != dstSlice.Type() {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot override two slices with different type (%s, %s)\", srcSlice.Type(), dstSlice.Type())\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdstSlice = srcSlice\n\t\t\t\t\t} else if config.AppendSlice {\n\t\t\t\t\t\tif srcSlice.Type() != dstSlice.Type() {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot append two slices with different type (%s, %s)\", srcSlice.Type(), dstSlice.Type())\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdstSlice = reflect.AppendSlice(dstSlice, srcSlice)\n\t\t\t\t\t} else if sliceDeepCopy {\n\t\t\t\t\t\ti := 0\n\t\t\t\t\t\tfor ; i < srcSlice.Len() && i < dstSlice.Len(); i++ {\n\t\t\t\t\t\t\tsrcElement := srcSlice.Index(i)\n\t\t\t\t\t\t\tdstElement := dstSlice.Index(i)\n\n\t\t\t\t\t\t\tif srcElement.CanInterface() {\n\t\t\t\t\t\t\t\tsrcElement = reflect.ValueOf(srcElement.Interface())\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif dstElement.CanInterface() {\n\t\t\t\t\t\t\t\tdstElement = reflect.ValueOf(dstElement.Interface())\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tdst.SetMapIndex(key, dstSlice)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif dstElement.IsValid() && !isEmptyValue(dstElement, !config.ShouldNotDereference) {\n\t\t\t\tif reflect.TypeOf(srcElement.Interface()).Kind() == reflect.Slice {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif reflect.TypeOf(srcElement.Interface()).Kind() == reflect.Map && reflect.TypeOf(dstElement.Interface()).Kind() == reflect.Map {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif srcElement.IsValid() && ((srcElement.Kind() != reflect.Ptr && overwrite) || !dstElement.IsValid() || isEmptyValue(dstElement, !config.ShouldNotDereference)) {\n\t\t\t\tif dst.IsNil() {\n\t\t\t\t\tdst.Set(reflect.MakeMap(dst.Type()))\n\t\t\t\t}\n\t\t\t\tdst.SetMapIndex(key, srcElement)\n\t\t\t}\n\t\t}\n\n\t\t// Ensure that all keys in dst are deleted if they are not in src.\n\t\tif overwriteWithEmptySrc {\n\t\t\tfor _, key := range dst.MapKeys() {\n\t\t\t\tsrcElement := src.MapIndex(key)\n\t\t\t\tif !srcElement.IsValid() {\n\t\t\t\t\tdst.SetMapIndex(key, reflect.Value{})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase reflect.Slice:\n\t\tif !dst.CanSet() {\n\t\t\tbreak\n\t\t}\n\t\tif (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc || overwriteSliceWithEmptySrc) && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) && !config.AppendSlice && !sliceDeepCopy {\n\t\t\tdst.Set(src)\n\t\t} else if config.AppendSlice {\n\t\t\tif src.Type() != dst.Type() {\n\t\t\t\treturn fmt.Errorf(\"cannot append two slice with different type (%s, %s)\", src.Type(), dst.Type())\n\t\t\t}\n\t\t\tdst.Set(reflect.AppendSlice(dst, src))\n\t\t} else if sliceDeepCopy {\n\t\t\tfor i := 0; i < src.Len() && i < dst.Len(); i++ {\n\t\t\t\tsrcElement := src.Index(i)\n\t\t\t\tdstElement := dst.Index(i)\n\t\t\t\tif srcElement.CanInterface() {\n\t\t\t\t\tsrcElement = reflect.ValueOf(srcElement.Interface())\n\t\t\t\t}\n\t\t\t\tif dstElement.CanInterface() {\n\t\t\t\t\tdstElement = reflect.ValueOf(dstElement.Interface())\n\t\t\t\t}\n\n\t\t\t\tif err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase reflect.Ptr:\n\t\tfallthrough\n\tcase reflect.Interface:\n\t\tif isReflectNil(src) {\n\t\t\tif overwriteWithEmptySrc && dst.CanSet() && src.Type().AssignableTo(dst.Type()) {\n\t\t\t\tdst.Set(src)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tif src.Kind() != reflect.Interface {\n\t\t\tif dst.IsNil() || (src.Kind() != reflect.Ptr && overwrite) {\n\t\t\t\tif dst.CanSet() && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) {\n\t\t\t\t\tdst.Set(src)\n\t\t\t\t}\n\t\t\t} else if src.Kind() == reflect.Ptr {\n\t\t\t\tif !config.ShouldNotDereference {\n\t\t\t\t\tif err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t} else if src.Elem().Kind() != reflect.Struct {\n\t\t\t\t\tif overwriteWithEmptySrc || (overwrite && !src.IsNil()) || dst.IsNil() {\n\t\t\t\t\t\tdst.Set(src)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if dst.Elem().Type() == src.Type() {\n\t\t\t\tif err = deepMerge(dst.Elem(), src, visited, depth+1, config); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn ErrDifferentArgumentsTypes\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tif dst.IsNil() || overwrite {\n\t\t\tif dst.CanSet() && (overwrite || isEmptyValue(dst, !config.ShouldNotDereference)) {\n\t\t\t\tdst.Set(src)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tif dst.Elem().Kind() == src.Elem().Kind() {\n\t\t\tif err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\tdefault:\n\t\tmustSet := (isEmptyValue(dst, !config.ShouldNotDereference) || overwrite) && (!isEmptyValue(src, !config.ShouldNotDereference) || overwriteWithEmptySrc)\n\t\tif mustSet {\n\t\t\tif dst.CanSet() {\n\t\t\t\tdst.Set(src)\n\t\t\t} else {\n\t\t\t\tdst = src\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n\n// Merge will fill any empty for value type attributes on the dst struct using corresponding\n// src attributes if they themselves are not empty. dst and src must be valid same-type structs\n// and dst must be a pointer to struct.\n// It won't merge unexported (private) fields and will do recursively any exported field.\nfunc Merge(dst, src interface{}, opts ...func(*Config)) error {\n\treturn merge(dst, src, opts...)\n}\n\n// MergeWithOverwrite will do the same as Merge except that non-empty dst attributes will be overridden by\n// non-empty src attribute values.\n// Deprecated: use Merge(…) with WithOverride\nfunc MergeWithOverwrite(dst, src interface{}, opts ...func(*Config)) error {\n\treturn merge(dst, src, append(opts, WithOverride)...)\n}\n\n// WithTransformers adds transformers to merge, allowing to customize the merging of some types.\nfunc WithTransformers(transformers Transformers) func(*Config) {\n\treturn func(config *Config) {\n\t\tconfig.Transformers = transformers\n\t}\n}\n\n// WithOverride will make merge override non-empty dst attributes with non-empty src attributes values.\nfunc WithOverride(config *Config) {\n\tconfig.Overwrite = true\n}\n\n// WithOverwriteWithEmptyValue will make merge override non empty dst attributes with empty src attributes values.\nfunc WithOverwriteWithEmptyValue(config *Config) {\n\tconfig.Overwrite = true\n\tconfig.overwriteWithEmptyValue = true\n}\n\n// WithOverrideEmptySlice will make merge override empty dst slice with empty src slice.\nfunc WithOverrideEmptySlice(config *Config) {\n\tconfig.overwriteSliceWithEmptyValue = true\n}\n\n// WithoutDereference prevents dereferencing pointers when evaluating whether they are empty\n// (i.e. a non-nil pointer is never considered empty).\nfunc WithoutDereference(config *Config) {\n\tconfig.ShouldNotDereference = true\n}\n\n// WithAppendSlice will make merge append slices instead of overwriting it.\nfunc WithAppendSlice(config *Config) {\n\tconfig.AppendSlice = true\n}\n\n// WithTypeCheck will make merge check types while overwriting it (must be used with WithOverride).\nfunc WithTypeCheck(config *Config) {\n\tconfig.TypeCheck = true\n}\n\n// WithSliceDeepCopy will merge slice element one by one with Overwrite flag.\nfunc WithSliceDeepCopy(config *Config) {\n\tconfig.sliceDeepCopy = true\n\tconfig.Overwrite = true\n}\n\nfunc merge(dst, src interface{}, opts ...func(*Config)) error {\n\tif dst != nil && reflect.ValueOf(dst).Kind() != reflect.Ptr {\n\t\treturn ErrNonPointerArgument\n\t}\n\tvar (\n\t\tvDst, vSrc reflect.Value\n\t\terr        error\n\t)\n\n\tconfig := &Config{}\n\n\tfor _, opt := range opts {\n\t\topt(config)\n\t}\n\n\tif vDst, vSrc, err = resolveValues(dst, src); err != nil {\n\t\treturn err\n\t}\n\tif vDst.Type() != vSrc.Type() {\n\t\treturn ErrDifferentArgumentsTypes\n\t}\n\treturn deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config)\n}\n\n// IsReflectNil is the reflect value provided nil\nfunc isReflectNil(v reflect.Value) bool {\n\tk := v.Kind()\n\tswitch k {\n\tcase reflect.Interface, reflect.Slice, reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr:\n\t\t// Both interface and slice are nil if first word is 0.\n\t\t// Both are always bigger than a word; assume flagIndir.\n\t\treturn v.IsNil()\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/dario.cat/mergo/mergo.go",
    "content": "// Copyright 2013 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Based on src/pkg/reflect/deepequal.go from official\n// golang's stdlib.\n\npackage mergo\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\n// Errors reported by Mergo when it finds invalid arguments.\nvar (\n\tErrNilArguments                = errors.New(\"src and dst must not be nil\")\n\tErrDifferentArgumentsTypes     = errors.New(\"src and dst must be of same type\")\n\tErrNotSupported                = errors.New(\"only structs, maps, and slices are supported\")\n\tErrExpectedMapAsDestination    = errors.New(\"dst was expected to be a map\")\n\tErrExpectedStructAsDestination = errors.New(\"dst was expected to be a struct\")\n\tErrNonPointerArgument          = errors.New(\"dst must be a pointer\")\n)\n\n// During deepMerge, must keep track of checks that are\n// in progress.  The comparison algorithm assumes that all\n// checks in progress are true when it reencounters them.\n// Visited are stored in a map indexed by 17 * a1 + a2;\ntype visit struct {\n\ttyp  reflect.Type\n\tnext *visit\n\tptr  uintptr\n}\n\n// From src/pkg/encoding/json/encode.go.\nfunc isEmptyValue(v reflect.Value, shouldDereference bool) bool {\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\treturn v.Len() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\tif v.IsNil() {\n\t\t\treturn true\n\t\t}\n\t\tif shouldDereference {\n\t\t\treturn isEmptyValue(v.Elem(), shouldDereference)\n\t\t}\n\t\treturn false\n\tcase reflect.Func:\n\t\treturn v.IsNil()\n\tcase reflect.Invalid:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc resolveValues(dst, src interface{}) (vDst, vSrc reflect.Value, err error) {\n\tif dst == nil || src == nil {\n\t\terr = ErrNilArguments\n\t\treturn\n\t}\n\tvDst = reflect.ValueOf(dst).Elem()\n\tif vDst.Kind() != reflect.Struct && vDst.Kind() != reflect.Map && vDst.Kind() != reflect.Slice {\n\t\terr = ErrNotSupported\n\t\treturn\n\t}\n\tvSrc = reflect.ValueOf(src)\n\t// We check if vSrc is a pointer to dereference it.\n\tif vSrc.Kind() == reflect.Ptr {\n\t\tvSrc = vSrc.Elem()\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All 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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/filippo.io/edwards25519/README.md",
    "content": "# filippo.io/edwards25519\n\n```\nimport \"filippo.io/edwards25519\"\n```\n\nThis library implements the edwards25519 elliptic curve, exposing the necessary APIs to build a wide array of higher-level primitives.\nRead the docs at [pkg.go.dev/filippo.io/edwards25519](https://pkg.go.dev/filippo.io/edwards25519).\n\nThe code is originally derived from Adam Langley's internal implementation in the Go standard library, and includes George Tankersley's [performance improvements](https://golang.org/cl/71950). It was then further developed by Henry de Valence for use in ristretto255, and was finally [merged back into the Go standard library](https://golang.org/cl/276272) as of Go 1.17. It now tracks the upstream codebase and extends it with additional functionality.\n\nMost users don't need this package, and should instead use `crypto/ed25519` for signatures, `golang.org/x/crypto/curve25519` for Diffie-Hellman, or `github.com/gtank/ristretto255` for prime order group logic. However, for anyone currently using a fork of `crypto/internal/edwards25519`/`crypto/ed25519/internal/edwards25519` or `github.com/agl/edwards25519`, this package should be a safer, faster, and more powerful alternative.\n\nSince this package is meant to curb proliferation of edwards25519 implementations in the Go ecosystem, it welcomes requests for new APIs or reviewable performance improvements.\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/doc.go",
    "content": "// Copyright (c) 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package edwards25519 implements group logic for the twisted Edwards curve\n//\n//\t-x^2 + y^2 = 1 + -(121665/121666)*x^2*y^2\n//\n// This is better known as the Edwards curve equivalent to Curve25519, and is\n// the curve used by the Ed25519 signature scheme.\n//\n// Most users don't need this package, and should instead use crypto/ed25519 for\n// signatures, golang.org/x/crypto/curve25519 for Diffie-Hellman, or\n// github.com/gtank/ristretto255 for prime order group logic.\n//\n// However, developers who do need to interact with low-level edwards25519\n// operations can use this package, which is an extended version of\n// crypto/internal/edwards25519 from the standard library repackaged as\n// an importable module.\npackage edwards25519\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/edwards25519.go",
    "content": "// Copyright (c) 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage edwards25519\n\nimport (\n\t\"errors\"\n\n\t\"filippo.io/edwards25519/field\"\n)\n\n// Point types.\n\ntype projP1xP1 struct {\n\tX, Y, Z, T field.Element\n}\n\ntype projP2 struct {\n\tX, Y, Z field.Element\n}\n\n// Point represents a point on the edwards25519 curve.\n//\n// This type works similarly to math/big.Int, and all arguments and receivers\n// are allowed to alias.\n//\n// The zero value is NOT valid, and it may be used only as a receiver.\ntype Point struct {\n\t// Make the type not comparable (i.e. used with == or as a map key), as\n\t// equivalent points can be represented by different Go values.\n\t_ incomparable\n\n\t// The point is internally represented in extended coordinates (X, Y, Z, T)\n\t// where x = X/Z, y = Y/Z, and xy = T/Z per https://eprint.iacr.org/2008/522.\n\tx, y, z, t field.Element\n}\n\ntype incomparable [0]func()\n\nfunc checkInitialized(points ...*Point) {\n\tfor _, p := range points {\n\t\tif p.x == (field.Element{}) && p.y == (field.Element{}) {\n\t\t\tpanic(\"edwards25519: use of uninitialized Point\")\n\t\t}\n\t}\n}\n\ntype projCached struct {\n\tYplusX, YminusX, Z, T2d field.Element\n}\n\ntype affineCached struct {\n\tYplusX, YminusX, T2d field.Element\n}\n\n// Constructors.\n\nfunc (v *projP2) Zero() *projP2 {\n\tv.X.Zero()\n\tv.Y.One()\n\tv.Z.One()\n\treturn v\n}\n\n// identity is the point at infinity.\nvar identity, _ = new(Point).SetBytes([]byte{\n\t1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})\n\n// NewIdentityPoint returns a new Point set to the identity.\nfunc NewIdentityPoint() *Point {\n\treturn new(Point).Set(identity)\n}\n\n// generator is the canonical curve basepoint. See TestGenerator for the\n// correspondence of this encoding with the values in RFC 8032.\nvar generator, _ = new(Point).SetBytes([]byte{\n\t0x58, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,\n\t0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,\n\t0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,\n\t0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66})\n\n// NewGeneratorPoint returns a new Point set to the canonical generator.\nfunc NewGeneratorPoint() *Point {\n\treturn new(Point).Set(generator)\n}\n\nfunc (v *projCached) Zero() *projCached {\n\tv.YplusX.One()\n\tv.YminusX.One()\n\tv.Z.One()\n\tv.T2d.Zero()\n\treturn v\n}\n\nfunc (v *affineCached) Zero() *affineCached {\n\tv.YplusX.One()\n\tv.YminusX.One()\n\tv.T2d.Zero()\n\treturn v\n}\n\n// Assignments.\n\n// Set sets v = u, and returns v.\nfunc (v *Point) Set(u *Point) *Point {\n\t*v = *u\n\treturn v\n}\n\n// Encoding.\n\n// Bytes returns the canonical 32-byte encoding of v, according to RFC 8032,\n// Section 5.1.2.\nfunc (v *Point) Bytes() []byte {\n\t// This function is outlined to make the allocations inline in the caller\n\t// rather than happen on the heap.\n\tvar buf [32]byte\n\treturn v.bytes(&buf)\n}\n\nfunc (v *Point) bytes(buf *[32]byte) []byte {\n\tcheckInitialized(v)\n\n\tvar zInv, x, y field.Element\n\tzInv.Invert(&v.z)       // zInv = 1 / Z\n\tx.Multiply(&v.x, &zInv) // x = X / Z\n\ty.Multiply(&v.y, &zInv) // y = Y / Z\n\n\tout := copyFieldElement(buf, &y)\n\tout[31] |= byte(x.IsNegative() << 7)\n\treturn out\n}\n\nvar feOne = new(field.Element).One()\n\n// SetBytes sets v = x, where x is a 32-byte encoding of v. If x does not\n// represent a valid point on the curve, SetBytes returns nil and an error and\n// the receiver is unchanged. Otherwise, SetBytes returns v.\n//\n// Note that SetBytes accepts all non-canonical encodings of valid points.\n// That is, it follows decoding rules that match most implementations in\n// the ecosystem rather than RFC 8032.\nfunc (v *Point) SetBytes(x []byte) (*Point, error) {\n\t// Specifically, the non-canonical encodings that are accepted are\n\t//   1) the ones where the field element is not reduced (see the\n\t//      (*field.Element).SetBytes docs) and\n\t//   2) the ones where the x-coordinate is zero and the sign bit is set.\n\t//\n\t// Read more at https://hdevalence.ca/blog/2020-10-04-its-25519am,\n\t// specifically the \"Canonical A, R\" section.\n\n\ty, err := new(field.Element).SetBytes(x)\n\tif err != nil {\n\t\treturn nil, errors.New(\"edwards25519: invalid point encoding length\")\n\t}\n\n\t// -x² + y² = 1 + dx²y²\n\t// x² + dx²y² = x²(dy² + 1) = y² - 1\n\t// x² = (y² - 1) / (dy² + 1)\n\n\t// u = y² - 1\n\ty2 := new(field.Element).Square(y)\n\tu := new(field.Element).Subtract(y2, feOne)\n\n\t// v = dy² + 1\n\tvv := new(field.Element).Multiply(y2, d)\n\tvv = vv.Add(vv, feOne)\n\n\t// x = +√(u/v)\n\txx, wasSquare := new(field.Element).SqrtRatio(u, vv)\n\tif wasSquare == 0 {\n\t\treturn nil, errors.New(\"edwards25519: invalid point encoding\")\n\t}\n\n\t// Select the negative square root if the sign bit is set.\n\txxNeg := new(field.Element).Negate(xx)\n\txx = xx.Select(xxNeg, xx, int(x[31]>>7))\n\n\tv.x.Set(xx)\n\tv.y.Set(y)\n\tv.z.One()\n\tv.t.Multiply(xx, y) // xy = T / Z\n\n\treturn v, nil\n}\n\nfunc copyFieldElement(buf *[32]byte, v *field.Element) []byte {\n\tcopy(buf[:], v.Bytes())\n\treturn buf[:]\n}\n\n// Conversions.\n\nfunc (v *projP2) FromP1xP1(p *projP1xP1) *projP2 {\n\tv.X.Multiply(&p.X, &p.T)\n\tv.Y.Multiply(&p.Y, &p.Z)\n\tv.Z.Multiply(&p.Z, &p.T)\n\treturn v\n}\n\nfunc (v *projP2) FromP3(p *Point) *projP2 {\n\tv.X.Set(&p.x)\n\tv.Y.Set(&p.y)\n\tv.Z.Set(&p.z)\n\treturn v\n}\n\nfunc (v *Point) fromP1xP1(p *projP1xP1) *Point {\n\tv.x.Multiply(&p.X, &p.T)\n\tv.y.Multiply(&p.Y, &p.Z)\n\tv.z.Multiply(&p.Z, &p.T)\n\tv.t.Multiply(&p.X, &p.Y)\n\treturn v\n}\n\nfunc (v *Point) fromP2(p *projP2) *Point {\n\tv.x.Multiply(&p.X, &p.Z)\n\tv.y.Multiply(&p.Y, &p.Z)\n\tv.z.Square(&p.Z)\n\tv.t.Multiply(&p.X, &p.Y)\n\treturn v\n}\n\n// d is a constant in the curve equation.\nvar d, _ = new(field.Element).SetBytes([]byte{\n\t0xa3, 0x78, 0x59, 0x13, 0xca, 0x4d, 0xeb, 0x75,\n\t0xab, 0xd8, 0x41, 0x41, 0x4d, 0x0a, 0x70, 0x00,\n\t0x98, 0xe8, 0x79, 0x77, 0x79, 0x40, 0xc7, 0x8c,\n\t0x73, 0xfe, 0x6f, 0x2b, 0xee, 0x6c, 0x03, 0x52})\nvar d2 = new(field.Element).Add(d, d)\n\nfunc (v *projCached) FromP3(p *Point) *projCached {\n\tv.YplusX.Add(&p.y, &p.x)\n\tv.YminusX.Subtract(&p.y, &p.x)\n\tv.Z.Set(&p.z)\n\tv.T2d.Multiply(&p.t, d2)\n\treturn v\n}\n\nfunc (v *affineCached) FromP3(p *Point) *affineCached {\n\tv.YplusX.Add(&p.y, &p.x)\n\tv.YminusX.Subtract(&p.y, &p.x)\n\tv.T2d.Multiply(&p.t, d2)\n\n\tvar invZ field.Element\n\tinvZ.Invert(&p.z)\n\tv.YplusX.Multiply(&v.YplusX, &invZ)\n\tv.YminusX.Multiply(&v.YminusX, &invZ)\n\tv.T2d.Multiply(&v.T2d, &invZ)\n\treturn v\n}\n\n// (Re)addition and subtraction.\n\n// Add sets v = p + q, and returns v.\nfunc (v *Point) Add(p, q *Point) *Point {\n\tcheckInitialized(p, q)\n\tqCached := new(projCached).FromP3(q)\n\tresult := new(projP1xP1).Add(p, qCached)\n\treturn v.fromP1xP1(result)\n}\n\n// Subtract sets v = p - q, and returns v.\nfunc (v *Point) Subtract(p, q *Point) *Point {\n\tcheckInitialized(p, q)\n\tqCached := new(projCached).FromP3(q)\n\tresult := new(projP1xP1).Sub(p, qCached)\n\treturn v.fromP1xP1(result)\n}\n\nfunc (v *projP1xP1) Add(p *Point, q *projCached) *projP1xP1 {\n\tvar YplusX, YminusX, PP, MM, TT2d, ZZ2 field.Element\n\n\tYplusX.Add(&p.y, &p.x)\n\tYminusX.Subtract(&p.y, &p.x)\n\n\tPP.Multiply(&YplusX, &q.YplusX)\n\tMM.Multiply(&YminusX, &q.YminusX)\n\tTT2d.Multiply(&p.t, &q.T2d)\n\tZZ2.Multiply(&p.z, &q.Z)\n\n\tZZ2.Add(&ZZ2, &ZZ2)\n\n\tv.X.Subtract(&PP, &MM)\n\tv.Y.Add(&PP, &MM)\n\tv.Z.Add(&ZZ2, &TT2d)\n\tv.T.Subtract(&ZZ2, &TT2d)\n\treturn v\n}\n\nfunc (v *projP1xP1) Sub(p *Point, q *projCached) *projP1xP1 {\n\tvar YplusX, YminusX, PP, MM, TT2d, ZZ2 field.Element\n\n\tYplusX.Add(&p.y, &p.x)\n\tYminusX.Subtract(&p.y, &p.x)\n\n\tPP.Multiply(&YplusX, &q.YminusX) // flipped sign\n\tMM.Multiply(&YminusX, &q.YplusX) // flipped sign\n\tTT2d.Multiply(&p.t, &q.T2d)\n\tZZ2.Multiply(&p.z, &q.Z)\n\n\tZZ2.Add(&ZZ2, &ZZ2)\n\n\tv.X.Subtract(&PP, &MM)\n\tv.Y.Add(&PP, &MM)\n\tv.Z.Subtract(&ZZ2, &TT2d) // flipped sign\n\tv.T.Add(&ZZ2, &TT2d)      // flipped sign\n\treturn v\n}\n\nfunc (v *projP1xP1) AddAffine(p *Point, q *affineCached) *projP1xP1 {\n\tvar YplusX, YminusX, PP, MM, TT2d, Z2 field.Element\n\n\tYplusX.Add(&p.y, &p.x)\n\tYminusX.Subtract(&p.y, &p.x)\n\n\tPP.Multiply(&YplusX, &q.YplusX)\n\tMM.Multiply(&YminusX, &q.YminusX)\n\tTT2d.Multiply(&p.t, &q.T2d)\n\n\tZ2.Add(&p.z, &p.z)\n\n\tv.X.Subtract(&PP, &MM)\n\tv.Y.Add(&PP, &MM)\n\tv.Z.Add(&Z2, &TT2d)\n\tv.T.Subtract(&Z2, &TT2d)\n\treturn v\n}\n\nfunc (v *projP1xP1) SubAffine(p *Point, q *affineCached) *projP1xP1 {\n\tvar YplusX, YminusX, PP, MM, TT2d, Z2 field.Element\n\n\tYplusX.Add(&p.y, &p.x)\n\tYminusX.Subtract(&p.y, &p.x)\n\n\tPP.Multiply(&YplusX, &q.YminusX) // flipped sign\n\tMM.Multiply(&YminusX, &q.YplusX) // flipped sign\n\tTT2d.Multiply(&p.t, &q.T2d)\n\n\tZ2.Add(&p.z, &p.z)\n\n\tv.X.Subtract(&PP, &MM)\n\tv.Y.Add(&PP, &MM)\n\tv.Z.Subtract(&Z2, &TT2d) // flipped sign\n\tv.T.Add(&Z2, &TT2d)      // flipped sign\n\treturn v\n}\n\n// Doubling.\n\nfunc (v *projP1xP1) Double(p *projP2) *projP1xP1 {\n\tvar XX, YY, ZZ2, XplusYsq field.Element\n\n\tXX.Square(&p.X)\n\tYY.Square(&p.Y)\n\tZZ2.Square(&p.Z)\n\tZZ2.Add(&ZZ2, &ZZ2)\n\tXplusYsq.Add(&p.X, &p.Y)\n\tXplusYsq.Square(&XplusYsq)\n\n\tv.Y.Add(&YY, &XX)\n\tv.Z.Subtract(&YY, &XX)\n\n\tv.X.Subtract(&XplusYsq, &v.Y)\n\tv.T.Subtract(&ZZ2, &v.Z)\n\treturn v\n}\n\n// Negation.\n\n// Negate sets v = -p, and returns v.\nfunc (v *Point) Negate(p *Point) *Point {\n\tcheckInitialized(p)\n\tv.x.Negate(&p.x)\n\tv.y.Set(&p.y)\n\tv.z.Set(&p.z)\n\tv.t.Negate(&p.t)\n\treturn v\n}\n\n// Equal returns 1 if v is equivalent to u, and 0 otherwise.\nfunc (v *Point) Equal(u *Point) int {\n\tcheckInitialized(v, u)\n\n\tvar t1, t2, t3, t4 field.Element\n\tt1.Multiply(&v.x, &u.z)\n\tt2.Multiply(&u.x, &v.z)\n\tt3.Multiply(&v.y, &u.z)\n\tt4.Multiply(&u.y, &v.z)\n\n\treturn t1.Equal(&t2) & t3.Equal(&t4)\n}\n\n// Constant-time operations\n\n// Select sets v to a if cond == 1 and to b if cond == 0.\nfunc (v *projCached) Select(a, b *projCached, cond int) *projCached {\n\tv.YplusX.Select(&a.YplusX, &b.YplusX, cond)\n\tv.YminusX.Select(&a.YminusX, &b.YminusX, cond)\n\tv.Z.Select(&a.Z, &b.Z, cond)\n\tv.T2d.Select(&a.T2d, &b.T2d, cond)\n\treturn v\n}\n\n// Select sets v to a if cond == 1 and to b if cond == 0.\nfunc (v *affineCached) Select(a, b *affineCached, cond int) *affineCached {\n\tv.YplusX.Select(&a.YplusX, &b.YplusX, cond)\n\tv.YminusX.Select(&a.YminusX, &b.YminusX, cond)\n\tv.T2d.Select(&a.T2d, &b.T2d, cond)\n\treturn v\n}\n\n// CondNeg negates v if cond == 1 and leaves it unchanged if cond == 0.\nfunc (v *projCached) CondNeg(cond int) *projCached {\n\tv.YplusX.Swap(&v.YminusX, cond)\n\tv.T2d.Select(new(field.Element).Negate(&v.T2d), &v.T2d, cond)\n\treturn v\n}\n\n// CondNeg negates v if cond == 1 and leaves it unchanged if cond == 0.\nfunc (v *affineCached) CondNeg(cond int) *affineCached {\n\tv.YplusX.Swap(&v.YminusX, cond)\n\tv.T2d.Select(new(field.Element).Negate(&v.T2d), &v.T2d, cond)\n\treturn v\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/extra.go",
    "content": "// Copyright (c) 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage edwards25519\n\n// This file contains additional functionality that is not included in the\n// upstream crypto/internal/edwards25519 package.\n\nimport (\n\t\"errors\"\n\n\t\"filippo.io/edwards25519/field\"\n)\n\n// ExtendedCoordinates returns v in extended coordinates (X:Y:Z:T) where\n// x = X/Z, y = Y/Z, and xy = T/Z as in https://eprint.iacr.org/2008/522.\nfunc (v *Point) ExtendedCoordinates() (X, Y, Z, T *field.Element) {\n\t// This function is outlined to make the allocations inline in the caller\n\t// rather than happen on the heap. Don't change the style without making\n\t// sure it doesn't increase the inliner cost.\n\tvar e [4]field.Element\n\tX, Y, Z, T = v.extendedCoordinates(&e)\n\treturn\n}\n\nfunc (v *Point) extendedCoordinates(e *[4]field.Element) (X, Y, Z, T *field.Element) {\n\tcheckInitialized(v)\n\tX = e[0].Set(&v.x)\n\tY = e[1].Set(&v.y)\n\tZ = e[2].Set(&v.z)\n\tT = e[3].Set(&v.t)\n\treturn\n}\n\n// SetExtendedCoordinates sets v = (X:Y:Z:T) in extended coordinates where\n// x = X/Z, y = Y/Z, and xy = T/Z as in https://eprint.iacr.org/2008/522.\n//\n// If the coordinates are invalid or don't represent a valid point on the curve,\n// SetExtendedCoordinates returns nil and an error and the receiver is\n// unchanged. Otherwise, SetExtendedCoordinates returns v.\nfunc (v *Point) SetExtendedCoordinates(X, Y, Z, T *field.Element) (*Point, error) {\n\tif !isOnCurve(X, Y, Z, T) {\n\t\treturn nil, errors.New(\"edwards25519: invalid point coordinates\")\n\t}\n\tv.x.Set(X)\n\tv.y.Set(Y)\n\tv.z.Set(Z)\n\tv.t.Set(T)\n\treturn v, nil\n}\n\nfunc isOnCurve(X, Y, Z, T *field.Element) bool {\n\tvar lhs, rhs field.Element\n\tXX := new(field.Element).Square(X)\n\tYY := new(field.Element).Square(Y)\n\tZZ := new(field.Element).Square(Z)\n\tTT := new(field.Element).Square(T)\n\t// -x² + y² = 1 + dx²y²\n\t// -(X/Z)² + (Y/Z)² = 1 + d(T/Z)²\n\t// -X² + Y² = Z² + dT²\n\tlhs.Subtract(YY, XX)\n\trhs.Multiply(d, TT).Add(&rhs, ZZ)\n\tif lhs.Equal(&rhs) != 1 {\n\t\treturn false\n\t}\n\t// xy = T/Z\n\t// XY/Z² = T/Z\n\t// XY = TZ\n\tlhs.Multiply(X, Y)\n\trhs.Multiply(T, Z)\n\treturn lhs.Equal(&rhs) == 1\n}\n\n// BytesMontgomery converts v to a point on the birationally-equivalent\n// Curve25519 Montgomery curve, and returns its canonical 32 bytes encoding\n// according to RFC 7748.\n//\n// Note that BytesMontgomery only encodes the u-coordinate, so v and -v encode\n// to the same value. If v is the identity point, BytesMontgomery returns 32\n// zero bytes, analogously to the X25519 function.\n//\n// The lack of an inverse operation (such as SetMontgomeryBytes) is deliberate:\n// while every valid edwards25519 point has a unique u-coordinate Montgomery\n// encoding, X25519 accepts inputs on the quadratic twist, which don't correspond\n// to any edwards25519 point, and every other X25519 input corresponds to two\n// edwards25519 points.\nfunc (v *Point) BytesMontgomery() []byte {\n\t// This function is outlined to make the allocations inline in the caller\n\t// rather than happen on the heap.\n\tvar buf [32]byte\n\treturn v.bytesMontgomery(&buf)\n}\n\nfunc (v *Point) bytesMontgomery(buf *[32]byte) []byte {\n\tcheckInitialized(v)\n\n\t// RFC 7748, Section 4.1 provides the bilinear map to calculate the\n\t// Montgomery u-coordinate\n\t//\n\t//              u = (1 + y) / (1 - y)\n\t//\n\t// where y = Y / Z.\n\n\tvar y, recip, u field.Element\n\n\ty.Multiply(&v.y, y.Invert(&v.z))        // y = Y / Z\n\trecip.Invert(recip.Subtract(feOne, &y)) // r = 1/(1 - y)\n\tu.Multiply(u.Add(feOne, &y), &recip)    // u = (1 + y)*r\n\n\treturn copyFieldElement(buf, &u)\n}\n\n// MultByCofactor sets v = 8 * p, and returns v.\nfunc (v *Point) MultByCofactor(p *Point) *Point {\n\tcheckInitialized(p)\n\tresult := projP1xP1{}\n\tpp := (&projP2{}).FromP3(p)\n\tresult.Double(pp)\n\tpp.FromP1xP1(&result)\n\tresult.Double(pp)\n\tpp.FromP1xP1(&result)\n\tresult.Double(pp)\n\treturn v.fromP1xP1(&result)\n}\n\n// Given k > 0, set s = s**(2*i).\nfunc (s *Scalar) pow2k(k int) {\n\tfor i := 0; i < k; i++ {\n\t\ts.Multiply(s, s)\n\t}\n}\n\n// Invert sets s to the inverse of a nonzero scalar v, and returns s.\n//\n// If t is zero, Invert returns zero.\nfunc (s *Scalar) Invert(t *Scalar) *Scalar {\n\t// Uses a hardcoded sliding window of width 4.\n\tvar table [8]Scalar\n\tvar tt Scalar\n\ttt.Multiply(t, t)\n\ttable[0] = *t\n\tfor i := 0; i < 7; i++ {\n\t\ttable[i+1].Multiply(&table[i], &tt)\n\t}\n\t// Now table = [t**1, t**3, t**5, t**7, t**9, t**11, t**13, t**15]\n\t// so t**k = t[k/2] for odd k\n\n\t// To compute the sliding window digits, use the following Sage script:\n\n\t// sage: import itertools\n\t// sage: def sliding_window(w,k):\n\t// ....:     digits = []\n\t// ....:     while k > 0:\n\t// ....:         if k % 2 == 1:\n\t// ....:             kmod = k % (2**w)\n\t// ....:             digits.append(kmod)\n\t// ....:             k = k - kmod\n\t// ....:         else:\n\t// ....:             digits.append(0)\n\t// ....:         k = k // 2\n\t// ....:     return digits\n\n\t// Now we can compute s roughly as follows:\n\n\t// sage: s = 1\n\t// sage: for coeff in reversed(sliding_window(4,l-2)):\n\t// ....:     s = s*s\n\t// ....:     if coeff > 0 :\n\t// ....:         s = s*t**coeff\n\n\t// This works on one bit at a time, with many runs of zeros.\n\t// The digits can be collapsed into [(count, coeff)] as follows:\n\n\t// sage: [(len(list(group)),d) for d,group in itertools.groupby(sliding_window(4,l-2))]\n\n\t// Entries of the form (k, 0) turn into pow2k(k)\n\t// Entries of the form (1, coeff) turn into a squaring and then a table lookup.\n\t// We can fold the squaring into the previous pow2k(k) as pow2k(k+1).\n\n\t*s = table[1/2]\n\ts.pow2k(127 + 1)\n\ts.Multiply(s, &table[1/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[9/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[11/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[13/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[15/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[7/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[15/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[5/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[1/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[15/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[15/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[7/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[3/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[11/2])\n\ts.pow2k(5 + 1)\n\ts.Multiply(s, &table[11/2])\n\ts.pow2k(9 + 1)\n\ts.Multiply(s, &table[9/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[3/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[3/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[3/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[9/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[7/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[3/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[13/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[7/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[9/2])\n\ts.pow2k(3 + 1)\n\ts.Multiply(s, &table[15/2])\n\ts.pow2k(4 + 1)\n\ts.Multiply(s, &table[11/2])\n\n\treturn s\n}\n\n// MultiScalarMult sets v = sum(scalars[i] * points[i]), and returns v.\n//\n// Execution time depends only on the lengths of the two slices, which must match.\nfunc (v *Point) MultiScalarMult(scalars []*Scalar, points []*Point) *Point {\n\tif len(scalars) != len(points) {\n\t\tpanic(\"edwards25519: called MultiScalarMult with different size inputs\")\n\t}\n\tcheckInitialized(points...)\n\n\t// Proceed as in the single-base case, but share doublings\n\t// between each point in the multiscalar equation.\n\n\t// Build lookup tables for each point\n\ttables := make([]projLookupTable, len(points))\n\tfor i := range tables {\n\t\ttables[i].FromP3(points[i])\n\t}\n\t// Compute signed radix-16 digits for each scalar\n\tdigits := make([][64]int8, len(scalars))\n\tfor i := range digits {\n\t\tdigits[i] = scalars[i].signedRadix16()\n\t}\n\n\t// Unwrap first loop iteration to save computing 16*identity\n\tmultiple := &projCached{}\n\ttmp1 := &projP1xP1{}\n\ttmp2 := &projP2{}\n\t// Lookup-and-add the appropriate multiple of each input point\n\tfor j := range tables {\n\t\ttables[j].SelectInto(multiple, digits[j][63])\n\t\ttmp1.Add(v, multiple) // tmp1 = v + x_(j,63)*Q in P1xP1 coords\n\t\tv.fromP1xP1(tmp1)     // update v\n\t}\n\ttmp2.FromP3(v) // set up tmp2 = v in P2 coords for next iteration\n\tfor i := 62; i >= 0; i-- {\n\t\ttmp1.Double(tmp2)    // tmp1 =  2*(prev) in P1xP1 coords\n\t\ttmp2.FromP1xP1(tmp1) // tmp2 =  2*(prev) in P2 coords\n\t\ttmp1.Double(tmp2)    // tmp1 =  4*(prev) in P1xP1 coords\n\t\ttmp2.FromP1xP1(tmp1) // tmp2 =  4*(prev) in P2 coords\n\t\ttmp1.Double(tmp2)    // tmp1 =  8*(prev) in P1xP1 coords\n\t\ttmp2.FromP1xP1(tmp1) // tmp2 =  8*(prev) in P2 coords\n\t\ttmp1.Double(tmp2)    // tmp1 = 16*(prev) in P1xP1 coords\n\t\tv.fromP1xP1(tmp1)    //    v = 16*(prev) in P3 coords\n\t\t// Lookup-and-add the appropriate multiple of each input point\n\t\tfor j := range tables {\n\t\t\ttables[j].SelectInto(multiple, digits[j][i])\n\t\t\ttmp1.Add(v, multiple) // tmp1 = v + x_(j,i)*Q in P1xP1 coords\n\t\t\tv.fromP1xP1(tmp1)     // update v\n\t\t}\n\t\ttmp2.FromP3(v) // set up tmp2 = v in P2 coords for next iteration\n\t}\n\treturn v\n}\n\n// VarTimeMultiScalarMult sets v = sum(scalars[i] * points[i]), and returns v.\n//\n// Execution time depends on the inputs.\nfunc (v *Point) VarTimeMultiScalarMult(scalars []*Scalar, points []*Point) *Point {\n\tif len(scalars) != len(points) {\n\t\tpanic(\"edwards25519: called VarTimeMultiScalarMult with different size inputs\")\n\t}\n\tcheckInitialized(points...)\n\n\t// Generalize double-base NAF computation to arbitrary sizes.\n\t// Here all the points are dynamic, so we only use the smaller\n\t// tables.\n\n\t// Build lookup tables for each point\n\ttables := make([]nafLookupTable5, len(points))\n\tfor i := range tables {\n\t\ttables[i].FromP3(points[i])\n\t}\n\t// Compute a NAF for each scalar\n\tnafs := make([][256]int8, len(scalars))\n\tfor i := range nafs {\n\t\tnafs[i] = scalars[i].nonAdjacentForm(5)\n\t}\n\n\tmultiple := &projCached{}\n\ttmp1 := &projP1xP1{}\n\ttmp2 := &projP2{}\n\ttmp2.Zero()\n\n\t// Move from high to low bits, doubling the accumulator\n\t// at each iteration and checking whether there is a nonzero\n\t// coefficient to look up a multiple of.\n\t//\n\t// Skip trying to find the first nonzero coefficent, because\n\t// searching might be more work than a few extra doublings.\n\tfor i := 255; i >= 0; i-- {\n\t\ttmp1.Double(tmp2)\n\n\t\tfor j := range nafs {\n\t\t\tif nafs[j][i] > 0 {\n\t\t\t\tv.fromP1xP1(tmp1)\n\t\t\t\ttables[j].SelectInto(multiple, nafs[j][i])\n\t\t\t\ttmp1.Add(v, multiple)\n\t\t\t} else if nafs[j][i] < 0 {\n\t\t\t\tv.fromP1xP1(tmp1)\n\t\t\t\ttables[j].SelectInto(multiple, -nafs[j][i])\n\t\t\t\ttmp1.Sub(v, multiple)\n\t\t\t}\n\t\t}\n\n\t\ttmp2.FromP1xP1(tmp1)\n\t}\n\n\tv.fromP2(tmp2)\n\treturn v\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe.go",
    "content": "// Copyright (c) 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package field implements fast arithmetic modulo 2^255-19.\npackage field\n\nimport (\n\t\"crypto/subtle\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"math/bits\"\n)\n\n// Element represents an element of the field GF(2^255-19). Note that this\n// is not a cryptographically secure group, and should only be used to interact\n// with edwards25519.Point coordinates.\n//\n// This type works similarly to math/big.Int, and all arguments and receivers\n// are allowed to alias.\n//\n// The zero value is a valid zero element.\ntype Element struct {\n\t// An element t represents the integer\n\t//     t.l0 + t.l1*2^51 + t.l2*2^102 + t.l3*2^153 + t.l4*2^204\n\t//\n\t// Between operations, all limbs are expected to be lower than 2^52.\n\tl0 uint64\n\tl1 uint64\n\tl2 uint64\n\tl3 uint64\n\tl4 uint64\n}\n\nconst maskLow51Bits uint64 = (1 << 51) - 1\n\nvar feZero = &Element{0, 0, 0, 0, 0}\n\n// Zero sets v = 0, and returns v.\nfunc (v *Element) Zero() *Element {\n\t*v = *feZero\n\treturn v\n}\n\nvar feOne = &Element{1, 0, 0, 0, 0}\n\n// One sets v = 1, and returns v.\nfunc (v *Element) One() *Element {\n\t*v = *feOne\n\treturn v\n}\n\n// reduce reduces v modulo 2^255 - 19 and returns it.\nfunc (v *Element) reduce() *Element {\n\tv.carryPropagate()\n\n\t// After the light reduction we now have a field element representation\n\t// v < 2^255 + 2^13 * 19, but need v < 2^255 - 19.\n\n\t// If v >= 2^255 - 19, then v + 19 >= 2^255, which would overflow 2^255 - 1,\n\t// generating a carry. That is, c will be 0 if v < 2^255 - 19, and 1 otherwise.\n\tc := (v.l0 + 19) >> 51\n\tc = (v.l1 + c) >> 51\n\tc = (v.l2 + c) >> 51\n\tc = (v.l3 + c) >> 51\n\tc = (v.l4 + c) >> 51\n\n\t// If v < 2^255 - 19 and c = 0, this will be a no-op. Otherwise, it's\n\t// effectively applying the reduction identity to the carry.\n\tv.l0 += 19 * c\n\n\tv.l1 += v.l0 >> 51\n\tv.l0 = v.l0 & maskLow51Bits\n\tv.l2 += v.l1 >> 51\n\tv.l1 = v.l1 & maskLow51Bits\n\tv.l3 += v.l2 >> 51\n\tv.l2 = v.l2 & maskLow51Bits\n\tv.l4 += v.l3 >> 51\n\tv.l3 = v.l3 & maskLow51Bits\n\t// no additional carry\n\tv.l4 = v.l4 & maskLow51Bits\n\n\treturn v\n}\n\n// Add sets v = a + b, and returns v.\nfunc (v *Element) Add(a, b *Element) *Element {\n\tv.l0 = a.l0 + b.l0\n\tv.l1 = a.l1 + b.l1\n\tv.l2 = a.l2 + b.l2\n\tv.l3 = a.l3 + b.l3\n\tv.l4 = a.l4 + b.l4\n\t// Using the generic implementation here is actually faster than the\n\t// assembly. Probably because the body of this function is so simple that\n\t// the compiler can figure out better optimizations by inlining the carry\n\t// propagation.\n\treturn v.carryPropagateGeneric()\n}\n\n// Subtract sets v = a - b, and returns v.\nfunc (v *Element) Subtract(a, b *Element) *Element {\n\t// We first add 2 * p, to guarantee the subtraction won't underflow, and\n\t// then subtract b (which can be up to 2^255 + 2^13 * 19).\n\tv.l0 = (a.l0 + 0xFFFFFFFFFFFDA) - b.l0\n\tv.l1 = (a.l1 + 0xFFFFFFFFFFFFE) - b.l1\n\tv.l2 = (a.l2 + 0xFFFFFFFFFFFFE) - b.l2\n\tv.l3 = (a.l3 + 0xFFFFFFFFFFFFE) - b.l3\n\tv.l4 = (a.l4 + 0xFFFFFFFFFFFFE) - b.l4\n\treturn v.carryPropagate()\n}\n\n// Negate sets v = -a, and returns v.\nfunc (v *Element) Negate(a *Element) *Element {\n\treturn v.Subtract(feZero, a)\n}\n\n// Invert sets v = 1/z mod p, and returns v.\n//\n// If z == 0, Invert returns v = 0.\nfunc (v *Element) Invert(z *Element) *Element {\n\t// Inversion is implemented as exponentiation with exponent p − 2. It uses the\n\t// same sequence of 255 squarings and 11 multiplications as [Curve25519].\n\tvar z2, z9, z11, z2_5_0, z2_10_0, z2_20_0, z2_50_0, z2_100_0, t Element\n\n\tz2.Square(z)             // 2\n\tt.Square(&z2)            // 4\n\tt.Square(&t)             // 8\n\tz9.Multiply(&t, z)       // 9\n\tz11.Multiply(&z9, &z2)   // 11\n\tt.Square(&z11)           // 22\n\tz2_5_0.Multiply(&t, &z9) // 31 = 2^5 - 2^0\n\n\tt.Square(&z2_5_0) // 2^6 - 2^1\n\tfor i := 0; i < 4; i++ {\n\t\tt.Square(&t) // 2^10 - 2^5\n\t}\n\tz2_10_0.Multiply(&t, &z2_5_0) // 2^10 - 2^0\n\n\tt.Square(&z2_10_0) // 2^11 - 2^1\n\tfor i := 0; i < 9; i++ {\n\t\tt.Square(&t) // 2^20 - 2^10\n\t}\n\tz2_20_0.Multiply(&t, &z2_10_0) // 2^20 - 2^0\n\n\tt.Square(&z2_20_0) // 2^21 - 2^1\n\tfor i := 0; i < 19; i++ {\n\t\tt.Square(&t) // 2^40 - 2^20\n\t}\n\tt.Multiply(&t, &z2_20_0) // 2^40 - 2^0\n\n\tt.Square(&t) // 2^41 - 2^1\n\tfor i := 0; i < 9; i++ {\n\t\tt.Square(&t) // 2^50 - 2^10\n\t}\n\tz2_50_0.Multiply(&t, &z2_10_0) // 2^50 - 2^0\n\n\tt.Square(&z2_50_0) // 2^51 - 2^1\n\tfor i := 0; i < 49; i++ {\n\t\tt.Square(&t) // 2^100 - 2^50\n\t}\n\tz2_100_0.Multiply(&t, &z2_50_0) // 2^100 - 2^0\n\n\tt.Square(&z2_100_0) // 2^101 - 2^1\n\tfor i := 0; i < 99; i++ {\n\t\tt.Square(&t) // 2^200 - 2^100\n\t}\n\tt.Multiply(&t, &z2_100_0) // 2^200 - 2^0\n\n\tt.Square(&t) // 2^201 - 2^1\n\tfor i := 0; i < 49; i++ {\n\t\tt.Square(&t) // 2^250 - 2^50\n\t}\n\tt.Multiply(&t, &z2_50_0) // 2^250 - 2^0\n\n\tt.Square(&t) // 2^251 - 2^1\n\tt.Square(&t) // 2^252 - 2^2\n\tt.Square(&t) // 2^253 - 2^3\n\tt.Square(&t) // 2^254 - 2^4\n\tt.Square(&t) // 2^255 - 2^5\n\n\treturn v.Multiply(&t, &z11) // 2^255 - 21\n}\n\n// Set sets v = a, and returns v.\nfunc (v *Element) Set(a *Element) *Element {\n\t*v = *a\n\treturn v\n}\n\n// SetBytes sets v to x, where x is a 32-byte little-endian encoding. If x is\n// not of the right length, SetBytes returns nil and an error, and the\n// receiver is unchanged.\n//\n// Consistent with RFC 7748, the most significant bit (the high bit of the\n// last byte) is ignored, and non-canonical values (2^255-19 through 2^255-1)\n// are accepted. Note that this is laxer than specified by RFC 8032, but\n// consistent with most Ed25519 implementations.\nfunc (v *Element) SetBytes(x []byte) (*Element, error) {\n\tif len(x) != 32 {\n\t\treturn nil, errors.New(\"edwards25519: invalid field element input size\")\n\t}\n\n\t// Bits 0:51 (bytes 0:8, bits 0:64, shift 0, mask 51).\n\tv.l0 = binary.LittleEndian.Uint64(x[0:8])\n\tv.l0 &= maskLow51Bits\n\t// Bits 51:102 (bytes 6:14, bits 48:112, shift 3, mask 51).\n\tv.l1 = binary.LittleEndian.Uint64(x[6:14]) >> 3\n\tv.l1 &= maskLow51Bits\n\t// Bits 102:153 (bytes 12:20, bits 96:160, shift 6, mask 51).\n\tv.l2 = binary.LittleEndian.Uint64(x[12:20]) >> 6\n\tv.l2 &= maskLow51Bits\n\t// Bits 153:204 (bytes 19:27, bits 152:216, shift 1, mask 51).\n\tv.l3 = binary.LittleEndian.Uint64(x[19:27]) >> 1\n\tv.l3 &= maskLow51Bits\n\t// Bits 204:255 (bytes 24:32, bits 192:256, shift 12, mask 51).\n\t// Note: not bytes 25:33, shift 4, to avoid overread.\n\tv.l4 = binary.LittleEndian.Uint64(x[24:32]) >> 12\n\tv.l4 &= maskLow51Bits\n\n\treturn v, nil\n}\n\n// Bytes returns the canonical 32-byte little-endian encoding of v.\nfunc (v *Element) Bytes() []byte {\n\t// This function is outlined to make the allocations inline in the caller\n\t// rather than happen on the heap.\n\tvar out [32]byte\n\treturn v.bytes(&out)\n}\n\nfunc (v *Element) bytes(out *[32]byte) []byte {\n\tt := *v\n\tt.reduce()\n\n\tvar buf [8]byte\n\tfor i, l := range [5]uint64{t.l0, t.l1, t.l2, t.l3, t.l4} {\n\t\tbitsOffset := i * 51\n\t\tbinary.LittleEndian.PutUint64(buf[:], l<<uint(bitsOffset%8))\n\t\tfor i, bb := range buf {\n\t\t\toff := bitsOffset/8 + i\n\t\t\tif off >= len(out) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tout[off] |= bb\n\t\t}\n\t}\n\n\treturn out[:]\n}\n\n// Equal returns 1 if v and u are equal, and 0 otherwise.\nfunc (v *Element) Equal(u *Element) int {\n\tsa, sv := u.Bytes(), v.Bytes()\n\treturn subtle.ConstantTimeCompare(sa, sv)\n}\n\n// mask64Bits returns 0xffffffff if cond is 1, and 0 otherwise.\nfunc mask64Bits(cond int) uint64 { return ^(uint64(cond) - 1) }\n\n// Select sets v to a if cond == 1, and to b if cond == 0.\nfunc (v *Element) Select(a, b *Element, cond int) *Element {\n\tm := mask64Bits(cond)\n\tv.l0 = (m & a.l0) | (^m & b.l0)\n\tv.l1 = (m & a.l1) | (^m & b.l1)\n\tv.l2 = (m & a.l2) | (^m & b.l2)\n\tv.l3 = (m & a.l3) | (^m & b.l3)\n\tv.l4 = (m & a.l4) | (^m & b.l4)\n\treturn v\n}\n\n// Swap swaps v and u if cond == 1 or leaves them unchanged if cond == 0, and returns v.\nfunc (v *Element) Swap(u *Element, cond int) {\n\tm := mask64Bits(cond)\n\tt := m & (v.l0 ^ u.l0)\n\tv.l0 ^= t\n\tu.l0 ^= t\n\tt = m & (v.l1 ^ u.l1)\n\tv.l1 ^= t\n\tu.l1 ^= t\n\tt = m & (v.l2 ^ u.l2)\n\tv.l2 ^= t\n\tu.l2 ^= t\n\tt = m & (v.l3 ^ u.l3)\n\tv.l3 ^= t\n\tu.l3 ^= t\n\tt = m & (v.l4 ^ u.l4)\n\tv.l4 ^= t\n\tu.l4 ^= t\n}\n\n// IsNegative returns 1 if v is negative, and 0 otherwise.\nfunc (v *Element) IsNegative() int {\n\treturn int(v.Bytes()[0] & 1)\n}\n\n// Absolute sets v to |u|, and returns v.\nfunc (v *Element) Absolute(u *Element) *Element {\n\treturn v.Select(new(Element).Negate(u), u, u.IsNegative())\n}\n\n// Multiply sets v = x * y, and returns v.\nfunc (v *Element) Multiply(x, y *Element) *Element {\n\tfeMul(v, x, y)\n\treturn v\n}\n\n// Square sets v = x * x, and returns v.\nfunc (v *Element) Square(x *Element) *Element {\n\tfeSquare(v, x)\n\treturn v\n}\n\n// Mult32 sets v = x * y, and returns v.\nfunc (v *Element) Mult32(x *Element, y uint32) *Element {\n\tx0lo, x0hi := mul51(x.l0, y)\n\tx1lo, x1hi := mul51(x.l1, y)\n\tx2lo, x2hi := mul51(x.l2, y)\n\tx3lo, x3hi := mul51(x.l3, y)\n\tx4lo, x4hi := mul51(x.l4, y)\n\tv.l0 = x0lo + 19*x4hi // carried over per the reduction identity\n\tv.l1 = x1lo + x0hi\n\tv.l2 = x2lo + x1hi\n\tv.l3 = x3lo + x2hi\n\tv.l4 = x4lo + x3hi\n\t// The hi portions are going to be only 32 bits, plus any previous excess,\n\t// so we can skip the carry propagation.\n\treturn v\n}\n\n// mul51 returns lo + hi * 2⁵¹ = a * b.\nfunc mul51(a uint64, b uint32) (lo uint64, hi uint64) {\n\tmh, ml := bits.Mul64(a, uint64(b))\n\tlo = ml & maskLow51Bits\n\thi = (mh << 13) | (ml >> 51)\n\treturn\n}\n\n// Pow22523 set v = x^((p-5)/8), and returns v. (p-5)/8 is 2^252-3.\nfunc (v *Element) Pow22523(x *Element) *Element {\n\tvar t0, t1, t2 Element\n\n\tt0.Square(x)             // x^2\n\tt1.Square(&t0)           // x^4\n\tt1.Square(&t1)           // x^8\n\tt1.Multiply(x, &t1)      // x^9\n\tt0.Multiply(&t0, &t1)    // x^11\n\tt0.Square(&t0)           // x^22\n\tt0.Multiply(&t1, &t0)    // x^31\n\tt1.Square(&t0)           // x^62\n\tfor i := 1; i < 5; i++ { // x^992\n\t\tt1.Square(&t1)\n\t}\n\tt0.Multiply(&t1, &t0)     // x^1023 -> 1023 = 2^10 - 1\n\tt1.Square(&t0)            // 2^11 - 2\n\tfor i := 1; i < 10; i++ { // 2^20 - 2^10\n\t\tt1.Square(&t1)\n\t}\n\tt1.Multiply(&t1, &t0)     // 2^20 - 1\n\tt2.Square(&t1)            // 2^21 - 2\n\tfor i := 1; i < 20; i++ { // 2^40 - 2^20\n\t\tt2.Square(&t2)\n\t}\n\tt1.Multiply(&t2, &t1)     // 2^40 - 1\n\tt1.Square(&t1)            // 2^41 - 2\n\tfor i := 1; i < 10; i++ { // 2^50 - 2^10\n\t\tt1.Square(&t1)\n\t}\n\tt0.Multiply(&t1, &t0)     // 2^50 - 1\n\tt1.Square(&t0)            // 2^51 - 2\n\tfor i := 1; i < 50; i++ { // 2^100 - 2^50\n\t\tt1.Square(&t1)\n\t}\n\tt1.Multiply(&t1, &t0)      // 2^100 - 1\n\tt2.Square(&t1)             // 2^101 - 2\n\tfor i := 1; i < 100; i++ { // 2^200 - 2^100\n\t\tt2.Square(&t2)\n\t}\n\tt1.Multiply(&t2, &t1)     // 2^200 - 1\n\tt1.Square(&t1)            // 2^201 - 2\n\tfor i := 1; i < 50; i++ { // 2^250 - 2^50\n\t\tt1.Square(&t1)\n\t}\n\tt0.Multiply(&t1, &t0)     // 2^250 - 1\n\tt0.Square(&t0)            // 2^251 - 2\n\tt0.Square(&t0)            // 2^252 - 4\n\treturn v.Multiply(&t0, x) // 2^252 - 3 -> x^(2^252-3)\n}\n\n// sqrtM1 is 2^((p-1)/4), which squared is equal to -1 by Euler's Criterion.\nvar sqrtM1 = &Element{1718705420411056, 234908883556509,\n\t2233514472574048, 2117202627021982, 765476049583133}\n\n// SqrtRatio sets r to the non-negative square root of the ratio of u and v.\n//\n// If u/v is square, SqrtRatio returns r and 1. If u/v is not square, SqrtRatio\n// sets r according to Section 4.3 of draft-irtf-cfrg-ristretto255-decaf448-00,\n// and returns r and 0.\nfunc (r *Element) SqrtRatio(u, v *Element) (R *Element, wasSquare int) {\n\tt0 := new(Element)\n\n\t// r = (u * v3) * (u * v7)^((p-5)/8)\n\tv2 := new(Element).Square(v)\n\tuv3 := new(Element).Multiply(u, t0.Multiply(v2, v))\n\tuv7 := new(Element).Multiply(uv3, t0.Square(v2))\n\trr := new(Element).Multiply(uv3, t0.Pow22523(uv7))\n\n\tcheck := new(Element).Multiply(v, t0.Square(rr)) // check = v * r^2\n\n\tuNeg := new(Element).Negate(u)\n\tcorrectSignSqrt := check.Equal(u)\n\tflippedSignSqrt := check.Equal(uNeg)\n\tflippedSignSqrtI := check.Equal(t0.Multiply(uNeg, sqrtM1))\n\n\trPrime := new(Element).Multiply(rr, sqrtM1) // r_prime = SQRT_M1 * r\n\t// r = CT_SELECT(r_prime IF flipped_sign_sqrt | flipped_sign_sqrt_i ELSE r)\n\trr.Select(rPrime, rr, flippedSignSqrt|flippedSignSqrtI)\n\n\tr.Absolute(rr) // Choose the nonnegative square root.\n\treturn r, correctSignSqrt | flippedSignSqrt\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_amd64.go",
    "content": "// Code generated by command: go run fe_amd64_asm.go -out ../fe_amd64.s -stubs ../fe_amd64.go -pkg field. DO NOT EDIT.\n\n//go:build amd64 && gc && !purego\n// +build amd64,gc,!purego\n\npackage field\n\n// feMul sets out = a * b. It works like feMulGeneric.\n//\n//go:noescape\nfunc feMul(out *Element, a *Element, b *Element)\n\n// feSquare sets out = a * a. It works like feSquareGeneric.\n//\n//go:noescape\nfunc feSquare(out *Element, a *Element)\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_amd64.s",
    "content": "// Code generated by command: go run fe_amd64_asm.go -out ../fe_amd64.s -stubs ../fe_amd64.go -pkg field. DO NOT EDIT.\n\n//go:build amd64 && gc && !purego\n// +build amd64,gc,!purego\n\n#include \"textflag.h\"\n\n// func feMul(out *Element, a *Element, b *Element)\nTEXT ·feMul(SB), NOSPLIT, $0-24\n\tMOVQ a+8(FP), CX\n\tMOVQ b+16(FP), BX\n\n\t// r0 = a0×b0\n\tMOVQ (CX), AX\n\tMULQ (BX)\n\tMOVQ AX, DI\n\tMOVQ DX, SI\n\n\t// r0 += 19×a1×b4\n\tMOVQ   8(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   32(BX)\n\tADDQ   AX, DI\n\tADCQ   DX, SI\n\n\t// r0 += 19×a2×b3\n\tMOVQ   16(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   24(BX)\n\tADDQ   AX, DI\n\tADCQ   DX, SI\n\n\t// r0 += 19×a3×b2\n\tMOVQ   24(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   16(BX)\n\tADDQ   AX, DI\n\tADCQ   DX, SI\n\n\t// r0 += 19×a4×b1\n\tMOVQ   32(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   8(BX)\n\tADDQ   AX, DI\n\tADCQ   DX, SI\n\n\t// r1 = a0×b1\n\tMOVQ (CX), AX\n\tMULQ 8(BX)\n\tMOVQ AX, R9\n\tMOVQ DX, R8\n\n\t// r1 += a1×b0\n\tMOVQ 8(CX), AX\n\tMULQ (BX)\n\tADDQ AX, R9\n\tADCQ DX, R8\n\n\t// r1 += 19×a2×b4\n\tMOVQ   16(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   32(BX)\n\tADDQ   AX, R9\n\tADCQ   DX, R8\n\n\t// r1 += 19×a3×b3\n\tMOVQ   24(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   24(BX)\n\tADDQ   AX, R9\n\tADCQ   DX, R8\n\n\t// r1 += 19×a4×b2\n\tMOVQ   32(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   16(BX)\n\tADDQ   AX, R9\n\tADCQ   DX, R8\n\n\t// r2 = a0×b2\n\tMOVQ (CX), AX\n\tMULQ 16(BX)\n\tMOVQ AX, R11\n\tMOVQ DX, R10\n\n\t// r2 += a1×b1\n\tMOVQ 8(CX), AX\n\tMULQ 8(BX)\n\tADDQ AX, R11\n\tADCQ DX, R10\n\n\t// r2 += a2×b0\n\tMOVQ 16(CX), AX\n\tMULQ (BX)\n\tADDQ AX, R11\n\tADCQ DX, R10\n\n\t// r2 += 19×a3×b4\n\tMOVQ   24(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   32(BX)\n\tADDQ   AX, R11\n\tADCQ   DX, R10\n\n\t// r2 += 19×a4×b3\n\tMOVQ   32(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   24(BX)\n\tADDQ   AX, R11\n\tADCQ   DX, R10\n\n\t// r3 = a0×b3\n\tMOVQ (CX), AX\n\tMULQ 24(BX)\n\tMOVQ AX, R13\n\tMOVQ DX, R12\n\n\t// r3 += a1×b2\n\tMOVQ 8(CX), AX\n\tMULQ 16(BX)\n\tADDQ AX, R13\n\tADCQ DX, R12\n\n\t// r3 += a2×b1\n\tMOVQ 16(CX), AX\n\tMULQ 8(BX)\n\tADDQ AX, R13\n\tADCQ DX, R12\n\n\t// r3 += a3×b0\n\tMOVQ 24(CX), AX\n\tMULQ (BX)\n\tADDQ AX, R13\n\tADCQ DX, R12\n\n\t// r3 += 19×a4×b4\n\tMOVQ   32(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   32(BX)\n\tADDQ   AX, R13\n\tADCQ   DX, R12\n\n\t// r4 = a0×b4\n\tMOVQ (CX), AX\n\tMULQ 32(BX)\n\tMOVQ AX, R15\n\tMOVQ DX, R14\n\n\t// r4 += a1×b3\n\tMOVQ 8(CX), AX\n\tMULQ 24(BX)\n\tADDQ AX, R15\n\tADCQ DX, R14\n\n\t// r4 += a2×b2\n\tMOVQ 16(CX), AX\n\tMULQ 16(BX)\n\tADDQ AX, R15\n\tADCQ DX, R14\n\n\t// r4 += a3×b1\n\tMOVQ 24(CX), AX\n\tMULQ 8(BX)\n\tADDQ AX, R15\n\tADCQ DX, R14\n\n\t// r4 += a4×b0\n\tMOVQ 32(CX), AX\n\tMULQ (BX)\n\tADDQ AX, R15\n\tADCQ DX, R14\n\n\t// First reduction chain\n\tMOVQ   $0x0007ffffffffffff, AX\n\tSHLQ   $0x0d, DI, SI\n\tSHLQ   $0x0d, R9, R8\n\tSHLQ   $0x0d, R11, R10\n\tSHLQ   $0x0d, R13, R12\n\tSHLQ   $0x0d, R15, R14\n\tANDQ   AX, DI\n\tIMUL3Q $0x13, R14, R14\n\tADDQ   R14, DI\n\tANDQ   AX, R9\n\tADDQ   SI, R9\n\tANDQ   AX, R11\n\tADDQ   R8, R11\n\tANDQ   AX, R13\n\tADDQ   R10, R13\n\tANDQ   AX, R15\n\tADDQ   R12, R15\n\n\t// Second reduction chain (carryPropagate)\n\tMOVQ   DI, SI\n\tSHRQ   $0x33, SI\n\tMOVQ   R9, R8\n\tSHRQ   $0x33, R8\n\tMOVQ   R11, R10\n\tSHRQ   $0x33, R10\n\tMOVQ   R13, R12\n\tSHRQ   $0x33, R12\n\tMOVQ   R15, R14\n\tSHRQ   $0x33, R14\n\tANDQ   AX, DI\n\tIMUL3Q $0x13, R14, R14\n\tADDQ   R14, DI\n\tANDQ   AX, R9\n\tADDQ   SI, R9\n\tANDQ   AX, R11\n\tADDQ   R8, R11\n\tANDQ   AX, R13\n\tADDQ   R10, R13\n\tANDQ   AX, R15\n\tADDQ   R12, R15\n\n\t// Store output\n\tMOVQ out+0(FP), AX\n\tMOVQ DI, (AX)\n\tMOVQ R9, 8(AX)\n\tMOVQ R11, 16(AX)\n\tMOVQ R13, 24(AX)\n\tMOVQ R15, 32(AX)\n\tRET\n\n// func feSquare(out *Element, a *Element)\nTEXT ·feSquare(SB), NOSPLIT, $0-16\n\tMOVQ a+8(FP), CX\n\n\t// r0 = l0×l0\n\tMOVQ (CX), AX\n\tMULQ (CX)\n\tMOVQ AX, SI\n\tMOVQ DX, BX\n\n\t// r0 += 38×l1×l4\n\tMOVQ   8(CX), AX\n\tIMUL3Q $0x26, AX, AX\n\tMULQ   32(CX)\n\tADDQ   AX, SI\n\tADCQ   DX, BX\n\n\t// r0 += 38×l2×l3\n\tMOVQ   16(CX), AX\n\tIMUL3Q $0x26, AX, AX\n\tMULQ   24(CX)\n\tADDQ   AX, SI\n\tADCQ   DX, BX\n\n\t// r1 = 2×l0×l1\n\tMOVQ (CX), AX\n\tSHLQ $0x01, AX\n\tMULQ 8(CX)\n\tMOVQ AX, R8\n\tMOVQ DX, DI\n\n\t// r1 += 38×l2×l4\n\tMOVQ   16(CX), AX\n\tIMUL3Q $0x26, AX, AX\n\tMULQ   32(CX)\n\tADDQ   AX, R8\n\tADCQ   DX, DI\n\n\t// r1 += 19×l3×l3\n\tMOVQ   24(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   24(CX)\n\tADDQ   AX, R8\n\tADCQ   DX, DI\n\n\t// r2 = 2×l0×l2\n\tMOVQ (CX), AX\n\tSHLQ $0x01, AX\n\tMULQ 16(CX)\n\tMOVQ AX, R10\n\tMOVQ DX, R9\n\n\t// r2 += l1×l1\n\tMOVQ 8(CX), AX\n\tMULQ 8(CX)\n\tADDQ AX, R10\n\tADCQ DX, R9\n\n\t// r2 += 38×l3×l4\n\tMOVQ   24(CX), AX\n\tIMUL3Q $0x26, AX, AX\n\tMULQ   32(CX)\n\tADDQ   AX, R10\n\tADCQ   DX, R9\n\n\t// r3 = 2×l0×l3\n\tMOVQ (CX), AX\n\tSHLQ $0x01, AX\n\tMULQ 24(CX)\n\tMOVQ AX, R12\n\tMOVQ DX, R11\n\n\t// r3 += 2×l1×l2\n\tMOVQ   8(CX), AX\n\tIMUL3Q $0x02, AX, AX\n\tMULQ   16(CX)\n\tADDQ   AX, R12\n\tADCQ   DX, R11\n\n\t// r3 += 19×l4×l4\n\tMOVQ   32(CX), AX\n\tIMUL3Q $0x13, AX, AX\n\tMULQ   32(CX)\n\tADDQ   AX, R12\n\tADCQ   DX, R11\n\n\t// r4 = 2×l0×l4\n\tMOVQ (CX), AX\n\tSHLQ $0x01, AX\n\tMULQ 32(CX)\n\tMOVQ AX, R14\n\tMOVQ DX, R13\n\n\t// r4 += 2×l1×l3\n\tMOVQ   8(CX), AX\n\tIMUL3Q $0x02, AX, AX\n\tMULQ   24(CX)\n\tADDQ   AX, R14\n\tADCQ   DX, R13\n\n\t// r4 += l2×l2\n\tMOVQ 16(CX), AX\n\tMULQ 16(CX)\n\tADDQ AX, R14\n\tADCQ DX, R13\n\n\t// First reduction chain\n\tMOVQ   $0x0007ffffffffffff, AX\n\tSHLQ   $0x0d, SI, BX\n\tSHLQ   $0x0d, R8, DI\n\tSHLQ   $0x0d, R10, R9\n\tSHLQ   $0x0d, R12, R11\n\tSHLQ   $0x0d, R14, R13\n\tANDQ   AX, SI\n\tIMUL3Q $0x13, R13, R13\n\tADDQ   R13, SI\n\tANDQ   AX, R8\n\tADDQ   BX, R8\n\tANDQ   AX, R10\n\tADDQ   DI, R10\n\tANDQ   AX, R12\n\tADDQ   R9, R12\n\tANDQ   AX, R14\n\tADDQ   R11, R14\n\n\t// Second reduction chain (carryPropagate)\n\tMOVQ   SI, BX\n\tSHRQ   $0x33, BX\n\tMOVQ   R8, DI\n\tSHRQ   $0x33, DI\n\tMOVQ   R10, R9\n\tSHRQ   $0x33, R9\n\tMOVQ   R12, R11\n\tSHRQ   $0x33, R11\n\tMOVQ   R14, R13\n\tSHRQ   $0x33, R13\n\tANDQ   AX, SI\n\tIMUL3Q $0x13, R13, R13\n\tADDQ   R13, SI\n\tANDQ   AX, R8\n\tADDQ   BX, R8\n\tANDQ   AX, R10\n\tADDQ   DI, R10\n\tANDQ   AX, R12\n\tADDQ   R9, R12\n\tANDQ   AX, R14\n\tADDQ   R11, R14\n\n\t// Store output\n\tMOVQ out+0(FP), AX\n\tMOVQ SI, (AX)\n\tMOVQ R8, 8(AX)\n\tMOVQ R10, 16(AX)\n\tMOVQ R12, 24(AX)\n\tMOVQ R14, 32(AX)\n\tRET\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_amd64_noasm.go",
    "content": "// Copyright (c) 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !amd64 || !gc || purego\n// +build !amd64 !gc purego\n\npackage field\n\nfunc feMul(v, x, y *Element) { feMulGeneric(v, x, y) }\n\nfunc feSquare(v, x *Element) { feSquareGeneric(v, x) }\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_arm64.go",
    "content": "// Copyright (c) 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && gc && !purego\n// +build arm64,gc,!purego\n\npackage field\n\n//go:noescape\nfunc carryPropagate(v *Element)\n\nfunc (v *Element) carryPropagate() *Element {\n\tcarryPropagate(v)\n\treturn v\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_arm64.s",
    "content": "// Copyright (c) 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && gc && !purego\n\n#include \"textflag.h\"\n\n// carryPropagate works exactly like carryPropagateGeneric and uses the\n// same AND, ADD, and LSR+MADD instructions emitted by the compiler, but\n// avoids loading R0-R4 twice and uses LDP and STP.\n//\n// See https://golang.org/issues/43145 for the main compiler issue.\n//\n// func carryPropagate(v *Element)\nTEXT ·carryPropagate(SB),NOFRAME|NOSPLIT,$0-8\n\tMOVD v+0(FP), R20\n\n\tLDP 0(R20), (R0, R1)\n\tLDP 16(R20), (R2, R3)\n\tMOVD 32(R20), R4\n\n\tAND $0x7ffffffffffff, R0, R10\n\tAND $0x7ffffffffffff, R1, R11\n\tAND $0x7ffffffffffff, R2, R12\n\tAND $0x7ffffffffffff, R3, R13\n\tAND $0x7ffffffffffff, R4, R14\n\n\tADD R0>>51, R11, R11\n\tADD R1>>51, R12, R12\n\tADD R2>>51, R13, R13\n\tADD R3>>51, R14, R14\n\t// R4>>51 * 19 + R10 -> R10\n\tLSR $51, R4, R21\n\tMOVD $19, R22\n\tMADD R22, R10, R21, R10\n\n\tSTP (R10, R11), 0(R20)\n\tSTP (R12, R13), 16(R20)\n\tMOVD R14, 32(R20)\n\n\tRET\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_arm64_noasm.go",
    "content": "// Copyright (c) 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !arm64 || !gc || purego\n// +build !arm64 !gc purego\n\npackage field\n\nfunc (v *Element) carryPropagate() *Element {\n\treturn v.carryPropagateGeneric()\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_extra.go",
    "content": "// Copyright (c) 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage field\n\nimport \"errors\"\n\n// This file contains additional functionality that is not included in the\n// upstream crypto/ed25519/edwards25519/field package.\n\n// SetWideBytes sets v to x, where x is a 64-byte little-endian encoding, which\n// is reduced modulo the field order. If x is not of the right length,\n// SetWideBytes returns nil and an error, and the receiver is unchanged.\n//\n// SetWideBytes is not necessary to select a uniformly distributed value, and is\n// only provided for compatibility: SetBytes can be used instead as the chance\n// of bias is less than 2⁻²⁵⁰.\nfunc (v *Element) SetWideBytes(x []byte) (*Element, error) {\n\tif len(x) != 64 {\n\t\treturn nil, errors.New(\"edwards25519: invalid SetWideBytes input size\")\n\t}\n\n\t// Split the 64 bytes into two elements, and extract the most significant\n\t// bit of each, which is ignored by SetBytes.\n\tlo, _ := new(Element).SetBytes(x[:32])\n\tloMSB := uint64(x[31] >> 7)\n\thi, _ := new(Element).SetBytes(x[32:])\n\thiMSB := uint64(x[63] >> 7)\n\n\t// The output we want is\n\t//\n\t//   v = lo + loMSB * 2²⁵⁵ + hi * 2²⁵⁶ + hiMSB * 2⁵¹¹\n\t//\n\t// which applying the reduction identity comes out to\n\t//\n\t//   v = lo + loMSB * 19 + hi * 2 * 19 + hiMSB * 2 * 19²\n\t//\n\t// l0 will be the sum of a 52 bits value (lo.l0), plus a 5 bits value\n\t// (loMSB * 19), a 6 bits value (hi.l0 * 2 * 19), and a 10 bits value\n\t// (hiMSB * 2 * 19²), so it fits in a uint64.\n\n\tv.l0 = lo.l0 + loMSB*19 + hi.l0*2*19 + hiMSB*2*19*19\n\tv.l1 = lo.l1 + hi.l1*2*19\n\tv.l2 = lo.l2 + hi.l2*2*19\n\tv.l3 = lo.l3 + hi.l3*2*19\n\tv.l4 = lo.l4 + hi.l4*2*19\n\n\treturn v.carryPropagate(), nil\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/field/fe_generic.go",
    "content": "// Copyright (c) 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage field\n\nimport \"math/bits\"\n\n// uint128 holds a 128-bit number as two 64-bit limbs, for use with the\n// bits.Mul64 and bits.Add64 intrinsics.\ntype uint128 struct {\n\tlo, hi uint64\n}\n\n// mul64 returns a * b.\nfunc mul64(a, b uint64) uint128 {\n\thi, lo := bits.Mul64(a, b)\n\treturn uint128{lo, hi}\n}\n\n// addMul64 returns v + a * b.\nfunc addMul64(v uint128, a, b uint64) uint128 {\n\thi, lo := bits.Mul64(a, b)\n\tlo, c := bits.Add64(lo, v.lo, 0)\n\thi, _ = bits.Add64(hi, v.hi, c)\n\treturn uint128{lo, hi}\n}\n\n// shiftRightBy51 returns a >> 51. a is assumed to be at most 115 bits.\nfunc shiftRightBy51(a uint128) uint64 {\n\treturn (a.hi << (64 - 51)) | (a.lo >> 51)\n}\n\nfunc feMulGeneric(v, a, b *Element) {\n\ta0 := a.l0\n\ta1 := a.l1\n\ta2 := a.l2\n\ta3 := a.l3\n\ta4 := a.l4\n\n\tb0 := b.l0\n\tb1 := b.l1\n\tb2 := b.l2\n\tb3 := b.l3\n\tb4 := b.l4\n\n\t// Limb multiplication works like pen-and-paper columnar multiplication, but\n\t// with 51-bit limbs instead of digits.\n\t//\n\t//                          a4   a3   a2   a1   a0  x\n\t//                          b4   b3   b2   b1   b0  =\n\t//                         ------------------------\n\t//                        a4b0 a3b0 a2b0 a1b0 a0b0  +\n\t//                   a4b1 a3b1 a2b1 a1b1 a0b1       +\n\t//              a4b2 a3b2 a2b2 a1b2 a0b2            +\n\t//         a4b3 a3b3 a2b3 a1b3 a0b3                 +\n\t//    a4b4 a3b4 a2b4 a1b4 a0b4                      =\n\t//   ----------------------------------------------\n\t//      r8   r7   r6   r5   r4   r3   r2   r1   r0\n\t//\n\t// We can then use the reduction identity (a * 2²⁵⁵ + b = a * 19 + b) to\n\t// reduce the limbs that would overflow 255 bits. r5 * 2²⁵⁵ becomes 19 * r5,\n\t// r6 * 2³⁰⁶ becomes 19 * r6 * 2⁵¹, etc.\n\t//\n\t// Reduction can be carried out simultaneously to multiplication. For\n\t// example, we do not compute r5: whenever the result of a multiplication\n\t// belongs to r5, like a1b4, we multiply it by 19 and add the result to r0.\n\t//\n\t//            a4b0    a3b0    a2b0    a1b0    a0b0  +\n\t//            a3b1    a2b1    a1b1    a0b1 19×a4b1  +\n\t//            a2b2    a1b2    a0b2 19×a4b2 19×a3b2  +\n\t//            a1b3    a0b3 19×a4b3 19×a3b3 19×a2b3  +\n\t//            a0b4 19×a4b4 19×a3b4 19×a2b4 19×a1b4  =\n\t//           --------------------------------------\n\t//              r4      r3      r2      r1      r0\n\t//\n\t// Finally we add up the columns into wide, overlapping limbs.\n\n\ta1_19 := a1 * 19\n\ta2_19 := a2 * 19\n\ta3_19 := a3 * 19\n\ta4_19 := a4 * 19\n\n\t// r0 = a0×b0 + 19×(a1×b4 + a2×b3 + a3×b2 + a4×b1)\n\tr0 := mul64(a0, b0)\n\tr0 = addMul64(r0, a1_19, b4)\n\tr0 = addMul64(r0, a2_19, b3)\n\tr0 = addMul64(r0, a3_19, b2)\n\tr0 = addMul64(r0, a4_19, b1)\n\n\t// r1 = a0×b1 + a1×b0 + 19×(a2×b4 + a3×b3 + a4×b2)\n\tr1 := mul64(a0, b1)\n\tr1 = addMul64(r1, a1, b0)\n\tr1 = addMul64(r1, a2_19, b4)\n\tr1 = addMul64(r1, a3_19, b3)\n\tr1 = addMul64(r1, a4_19, b2)\n\n\t// r2 = a0×b2 + a1×b1 + a2×b0 + 19×(a3×b4 + a4×b3)\n\tr2 := mul64(a0, b2)\n\tr2 = addMul64(r2, a1, b1)\n\tr2 = addMul64(r2, a2, b0)\n\tr2 = addMul64(r2, a3_19, b4)\n\tr2 = addMul64(r2, a4_19, b3)\n\n\t// r3 = a0×b3 + a1×b2 + a2×b1 + a3×b0 + 19×a4×b4\n\tr3 := mul64(a0, b3)\n\tr3 = addMul64(r3, a1, b2)\n\tr3 = addMul64(r3, a2, b1)\n\tr3 = addMul64(r3, a3, b0)\n\tr3 = addMul64(r3, a4_19, b4)\n\n\t// r4 = a0×b4 + a1×b3 + a2×b2 + a3×b1 + a4×b0\n\tr4 := mul64(a0, b4)\n\tr4 = addMul64(r4, a1, b3)\n\tr4 = addMul64(r4, a2, b2)\n\tr4 = addMul64(r4, a3, b1)\n\tr4 = addMul64(r4, a4, b0)\n\n\t// After the multiplication, we need to reduce (carry) the five coefficients\n\t// to obtain a result with limbs that are at most slightly larger than 2⁵¹,\n\t// to respect the Element invariant.\n\t//\n\t// Overall, the reduction works the same as carryPropagate, except with\n\t// wider inputs: we take the carry for each coefficient by shifting it right\n\t// by 51, and add it to the limb above it. The top carry is multiplied by 19\n\t// according to the reduction identity and added to the lowest limb.\n\t//\n\t// The largest coefficient (r0) will be at most 111 bits, which guarantees\n\t// that all carries are at most 111 - 51 = 60 bits, which fits in a uint64.\n\t//\n\t//     r0 = a0×b0 + 19×(a1×b4 + a2×b3 + a3×b2 + a4×b1)\n\t//     r0 < 2⁵²×2⁵² + 19×(2⁵²×2⁵² + 2⁵²×2⁵² + 2⁵²×2⁵² + 2⁵²×2⁵²)\n\t//     r0 < (1 + 19 × 4) × 2⁵² × 2⁵²\n\t//     r0 < 2⁷ × 2⁵² × 2⁵²\n\t//     r0 < 2¹¹¹\n\t//\n\t// Moreover, the top coefficient (r4) is at most 107 bits, so c4 is at most\n\t// 56 bits, and c4 * 19 is at most 61 bits, which again fits in a uint64 and\n\t// allows us to easily apply the reduction identity.\n\t//\n\t//     r4 = a0×b4 + a1×b3 + a2×b2 + a3×b1 + a4×b0\n\t//     r4 < 5 × 2⁵² × 2⁵²\n\t//     r4 < 2¹⁰⁷\n\t//\n\n\tc0 := shiftRightBy51(r0)\n\tc1 := shiftRightBy51(r1)\n\tc2 := shiftRightBy51(r2)\n\tc3 := shiftRightBy51(r3)\n\tc4 := shiftRightBy51(r4)\n\n\trr0 := r0.lo&maskLow51Bits + c4*19\n\trr1 := r1.lo&maskLow51Bits + c0\n\trr2 := r2.lo&maskLow51Bits + c1\n\trr3 := r3.lo&maskLow51Bits + c2\n\trr4 := r4.lo&maskLow51Bits + c3\n\n\t// Now all coefficients fit into 64-bit registers but are still too large to\n\t// be passed around as an Element. We therefore do one last carry chain,\n\t// where the carries will be small enough to fit in the wiggle room above 2⁵¹.\n\t*v = Element{rr0, rr1, rr2, rr3, rr4}\n\tv.carryPropagate()\n}\n\nfunc feSquareGeneric(v, a *Element) {\n\tl0 := a.l0\n\tl1 := a.l1\n\tl2 := a.l2\n\tl3 := a.l3\n\tl4 := a.l4\n\n\t// Squaring works precisely like multiplication above, but thanks to its\n\t// symmetry we get to group a few terms together.\n\t//\n\t//                          l4   l3   l2   l1   l0  x\n\t//                          l4   l3   l2   l1   l0  =\n\t//                         ------------------------\n\t//                        l4l0 l3l0 l2l0 l1l0 l0l0  +\n\t//                   l4l1 l3l1 l2l1 l1l1 l0l1       +\n\t//              l4l2 l3l2 l2l2 l1l2 l0l2            +\n\t//         l4l3 l3l3 l2l3 l1l3 l0l3                 +\n\t//    l4l4 l3l4 l2l4 l1l4 l0l4                      =\n\t//   ----------------------------------------------\n\t//      r8   r7   r6   r5   r4   r3   r2   r1   r0\n\t//\n\t//            l4l0    l3l0    l2l0    l1l0    l0l0  +\n\t//            l3l1    l2l1    l1l1    l0l1 19×l4l1  +\n\t//            l2l2    l1l2    l0l2 19×l4l2 19×l3l2  +\n\t//            l1l3    l0l3 19×l4l3 19×l3l3 19×l2l3  +\n\t//            l0l4 19×l4l4 19×l3l4 19×l2l4 19×l1l4  =\n\t//           --------------------------------------\n\t//              r4      r3      r2      r1      r0\n\t//\n\t// With precomputed 2×, 19×, and 2×19× terms, we can compute each limb with\n\t// only three Mul64 and four Add64, instead of five and eight.\n\n\tl0_2 := l0 * 2\n\tl1_2 := l1 * 2\n\n\tl1_38 := l1 * 38\n\tl2_38 := l2 * 38\n\tl3_38 := l3 * 38\n\n\tl3_19 := l3 * 19\n\tl4_19 := l4 * 19\n\n\t// r0 = l0×l0 + 19×(l1×l4 + l2×l3 + l3×l2 + l4×l1) = l0×l0 + 19×2×(l1×l4 + l2×l3)\n\tr0 := mul64(l0, l0)\n\tr0 = addMul64(r0, l1_38, l4)\n\tr0 = addMul64(r0, l2_38, l3)\n\n\t// r1 = l0×l1 + l1×l0 + 19×(l2×l4 + l3×l3 + l4×l2) = 2×l0×l1 + 19×2×l2×l4 + 19×l3×l3\n\tr1 := mul64(l0_2, l1)\n\tr1 = addMul64(r1, l2_38, l4)\n\tr1 = addMul64(r1, l3_19, l3)\n\n\t// r2 = l0×l2 + l1×l1 + l2×l0 + 19×(l3×l4 + l4×l3) = 2×l0×l2 + l1×l1 + 19×2×l3×l4\n\tr2 := mul64(l0_2, l2)\n\tr2 = addMul64(r2, l1, l1)\n\tr2 = addMul64(r2, l3_38, l4)\n\n\t// r3 = l0×l3 + l1×l2 + l2×l1 + l3×l0 + 19×l4×l4 = 2×l0×l3 + 2×l1×l2 + 19×l4×l4\n\tr3 := mul64(l0_2, l3)\n\tr3 = addMul64(r3, l1_2, l2)\n\tr3 = addMul64(r3, l4_19, l4)\n\n\t// r4 = l0×l4 + l1×l3 + l2×l2 + l3×l1 + l4×l0 = 2×l0×l4 + 2×l1×l3 + l2×l2\n\tr4 := mul64(l0_2, l4)\n\tr4 = addMul64(r4, l1_2, l3)\n\tr4 = addMul64(r4, l2, l2)\n\n\tc0 := shiftRightBy51(r0)\n\tc1 := shiftRightBy51(r1)\n\tc2 := shiftRightBy51(r2)\n\tc3 := shiftRightBy51(r3)\n\tc4 := shiftRightBy51(r4)\n\n\trr0 := r0.lo&maskLow51Bits + c4*19\n\trr1 := r1.lo&maskLow51Bits + c0\n\trr2 := r2.lo&maskLow51Bits + c1\n\trr3 := r3.lo&maskLow51Bits + c2\n\trr4 := r4.lo&maskLow51Bits + c3\n\n\t*v = Element{rr0, rr1, rr2, rr3, rr4}\n\tv.carryPropagate()\n}\n\n// carryPropagateGeneric brings the limbs below 52 bits by applying the reduction\n// identity (a * 2²⁵⁵ + b = a * 19 + b) to the l4 carry.\nfunc (v *Element) carryPropagateGeneric() *Element {\n\tc0 := v.l0 >> 51\n\tc1 := v.l1 >> 51\n\tc2 := v.l2 >> 51\n\tc3 := v.l3 >> 51\n\tc4 := v.l4 >> 51\n\n\t// c4 is at most 64 - 51 = 13 bits, so c4*19 is at most 18 bits, and\n\t// the final l0 will be at most 52 bits. Similarly for the rest.\n\tv.l0 = v.l0&maskLow51Bits + c4*19\n\tv.l1 = v.l1&maskLow51Bits + c0\n\tv.l2 = v.l2&maskLow51Bits + c1\n\tv.l3 = v.l3&maskLow51Bits + c2\n\tv.l4 = v.l4&maskLow51Bits + c3\n\n\treturn v\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/scalar.go",
    "content": "// Copyright (c) 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage edwards25519\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n)\n\n// A Scalar is an integer modulo\n//\n//\tl = 2^252 + 27742317777372353535851937790883648493\n//\n// which is the prime order of the edwards25519 group.\n//\n// This type works similarly to math/big.Int, and all arguments and\n// receivers are allowed to alias.\n//\n// The zero value is a valid zero element.\ntype Scalar struct {\n\t// s is the scalar in the Montgomery domain, in the format of the\n\t// fiat-crypto implementation.\n\ts fiatScalarMontgomeryDomainFieldElement\n}\n\n// The field implementation in scalar_fiat.go is generated by the fiat-crypto\n// project (https://github.com/mit-plv/fiat-crypto) at version v0.0.9 (23d2dbc)\n// from a formally verified model.\n//\n// fiat-crypto code comes under the following license.\n//\n//     Copyright (c) 2015-2020 The fiat-crypto Authors. All rights reserved.\n//\n//     Redistribution and use in source and binary forms, with or without\n//     modification, are permitted provided that the following conditions are\n//     met:\n//\n//         1. Redistributions of source code must retain the above copyright\n//         notice, this list of conditions and the following disclaimer.\n//\n//     THIS SOFTWARE IS PROVIDED BY the fiat-crypto authors \"AS IS\"\n//     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n//     THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n//     PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design,\n//     Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n//     EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n//     PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n//     PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n//     LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n//     NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n//     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n\n// NewScalar returns a new zero Scalar.\nfunc NewScalar() *Scalar {\n\treturn &Scalar{}\n}\n\n// MultiplyAdd sets s = x * y + z mod l, and returns s. It is equivalent to\n// using Multiply and then Add.\nfunc (s *Scalar) MultiplyAdd(x, y, z *Scalar) *Scalar {\n\t// Make a copy of z in case it aliases s.\n\tzCopy := new(Scalar).Set(z)\n\treturn s.Multiply(x, y).Add(s, zCopy)\n}\n\n// Add sets s = x + y mod l, and returns s.\nfunc (s *Scalar) Add(x, y *Scalar) *Scalar {\n\t// s = 1 * x + y mod l\n\tfiatScalarAdd(&s.s, &x.s, &y.s)\n\treturn s\n}\n\n// Subtract sets s = x - y mod l, and returns s.\nfunc (s *Scalar) Subtract(x, y *Scalar) *Scalar {\n\t// s = -1 * y + x mod l\n\tfiatScalarSub(&s.s, &x.s, &y.s)\n\treturn s\n}\n\n// Negate sets s = -x mod l, and returns s.\nfunc (s *Scalar) Negate(x *Scalar) *Scalar {\n\t// s = -1 * x + 0 mod l\n\tfiatScalarOpp(&s.s, &x.s)\n\treturn s\n}\n\n// Multiply sets s = x * y mod l, and returns s.\nfunc (s *Scalar) Multiply(x, y *Scalar) *Scalar {\n\t// s = x * y + 0 mod l\n\tfiatScalarMul(&s.s, &x.s, &y.s)\n\treturn s\n}\n\n// Set sets s = x, and returns s.\nfunc (s *Scalar) Set(x *Scalar) *Scalar {\n\t*s = *x\n\treturn s\n}\n\n// SetUniformBytes sets s = x mod l, where x is a 64-byte little-endian integer.\n// If x is not of the right length, SetUniformBytes returns nil and an error,\n// and the receiver is unchanged.\n//\n// SetUniformBytes can be used to set s to a uniformly distributed value given\n// 64 uniformly distributed random bytes.\nfunc (s *Scalar) SetUniformBytes(x []byte) (*Scalar, error) {\n\tif len(x) != 64 {\n\t\treturn nil, errors.New(\"edwards25519: invalid SetUniformBytes input length\")\n\t}\n\n\t// We have a value x of 512 bits, but our fiatScalarFromBytes function\n\t// expects an input lower than l, which is a little over 252 bits.\n\t//\n\t// Instead of writing a reduction function that operates on wider inputs, we\n\t// can interpret x as the sum of three shorter values a, b, and c.\n\t//\n\t//    x = a + b * 2^168 + c * 2^336  mod l\n\t//\n\t// We then precompute 2^168 and 2^336 modulo l, and perform the reduction\n\t// with two multiplications and two additions.\n\n\ts.setShortBytes(x[:21])\n\tt := new(Scalar).setShortBytes(x[21:42])\n\ts.Add(s, t.Multiply(t, scalarTwo168))\n\tt.setShortBytes(x[42:])\n\ts.Add(s, t.Multiply(t, scalarTwo336))\n\n\treturn s, nil\n}\n\n// scalarTwo168 and scalarTwo336 are 2^168 and 2^336 modulo l, encoded as a\n// fiatScalarMontgomeryDomainFieldElement, which is a little-endian 4-limb value\n// in the 2^256 Montgomery domain.\nvar scalarTwo168 = &Scalar{s: [4]uint64{0x5b8ab432eac74798, 0x38afddd6de59d5d7,\n\t0xa2c131b399411b7c, 0x6329a7ed9ce5a30}}\nvar scalarTwo336 = &Scalar{s: [4]uint64{0xbd3d108e2b35ecc5, 0x5c3a3718bdf9c90b,\n\t0x63aa97a331b4f2ee, 0x3d217f5be65cb5c}}\n\n// setShortBytes sets s = x mod l, where x is a little-endian integer shorter\n// than 32 bytes.\nfunc (s *Scalar) setShortBytes(x []byte) *Scalar {\n\tif len(x) >= 32 {\n\t\tpanic(\"edwards25519: internal error: setShortBytes called with a long string\")\n\t}\n\tvar buf [32]byte\n\tcopy(buf[:], x)\n\tfiatScalarFromBytes((*[4]uint64)(&s.s), &buf)\n\tfiatScalarToMontgomery(&s.s, (*fiatScalarNonMontgomeryDomainFieldElement)(&s.s))\n\treturn s\n}\n\n// SetCanonicalBytes sets s = x, where x is a 32-byte little-endian encoding of\n// s, and returns s. If x is not a canonical encoding of s, SetCanonicalBytes\n// returns nil and an error, and the receiver is unchanged.\nfunc (s *Scalar) SetCanonicalBytes(x []byte) (*Scalar, error) {\n\tif len(x) != 32 {\n\t\treturn nil, errors.New(\"invalid scalar length\")\n\t}\n\tif !isReduced(x) {\n\t\treturn nil, errors.New(\"invalid scalar encoding\")\n\t}\n\n\tfiatScalarFromBytes((*[4]uint64)(&s.s), (*[32]byte)(x))\n\tfiatScalarToMontgomery(&s.s, (*fiatScalarNonMontgomeryDomainFieldElement)(&s.s))\n\n\treturn s, nil\n}\n\n// scalarMinusOneBytes is l - 1 in little endian.\nvar scalarMinusOneBytes = [32]byte{236, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16}\n\n// isReduced returns whether the given scalar in 32-byte little endian encoded\n// form is reduced modulo l.\nfunc isReduced(s []byte) bool {\n\tif len(s) != 32 {\n\t\treturn false\n\t}\n\n\tfor i := len(s) - 1; i >= 0; i-- {\n\t\tswitch {\n\t\tcase s[i] > scalarMinusOneBytes[i]:\n\t\t\treturn false\n\t\tcase s[i] < scalarMinusOneBytes[i]:\n\t\t\treturn true\n\t\t}\n\t}\n\treturn true\n}\n\n// SetBytesWithClamping applies the buffer pruning described in RFC 8032,\n// Section 5.1.5 (also known as clamping) and sets s to the result. The input\n// must be 32 bytes, and it is not modified. If x is not of the right length,\n// SetBytesWithClamping returns nil and an error, and the receiver is unchanged.\n//\n// Note that since Scalar values are always reduced modulo the prime order of\n// the curve, the resulting value will not preserve any of the cofactor-clearing\n// properties that clamping is meant to provide. It will however work as\n// expected as long as it is applied to points on the prime order subgroup, like\n// in Ed25519. In fact, it is lost to history why RFC 8032 adopted the\n// irrelevant RFC 7748 clamping, but it is now required for compatibility.\nfunc (s *Scalar) SetBytesWithClamping(x []byte) (*Scalar, error) {\n\t// The description above omits the purpose of the high bits of the clamping\n\t// for brevity, but those are also lost to reductions, and are also\n\t// irrelevant to edwards25519 as they protect against a specific\n\t// implementation bug that was once observed in a generic Montgomery ladder.\n\tif len(x) != 32 {\n\t\treturn nil, errors.New(\"edwards25519: invalid SetBytesWithClamping input length\")\n\t}\n\n\t// We need to use the wide reduction from SetUniformBytes, since clamping\n\t// sets the 2^254 bit, making the value higher than the order.\n\tvar wideBytes [64]byte\n\tcopy(wideBytes[:], x[:])\n\twideBytes[0] &= 248\n\twideBytes[31] &= 63\n\twideBytes[31] |= 64\n\treturn s.SetUniformBytes(wideBytes[:])\n}\n\n// Bytes returns the canonical 32-byte little-endian encoding of s.\nfunc (s *Scalar) Bytes() []byte {\n\t// This function is outlined to make the allocations inline in the caller\n\t// rather than happen on the heap.\n\tvar encoded [32]byte\n\treturn s.bytes(&encoded)\n}\n\nfunc (s *Scalar) bytes(out *[32]byte) []byte {\n\tvar ss fiatScalarNonMontgomeryDomainFieldElement\n\tfiatScalarFromMontgomery(&ss, &s.s)\n\tfiatScalarToBytes(out, (*[4]uint64)(&ss))\n\treturn out[:]\n}\n\n// Equal returns 1 if s and t are equal, and 0 otherwise.\nfunc (s *Scalar) Equal(t *Scalar) int {\n\tvar diff fiatScalarMontgomeryDomainFieldElement\n\tfiatScalarSub(&diff, &s.s, &t.s)\n\tvar nonzero uint64\n\tfiatScalarNonzero(&nonzero, (*[4]uint64)(&diff))\n\tnonzero |= nonzero >> 32\n\tnonzero |= nonzero >> 16\n\tnonzero |= nonzero >> 8\n\tnonzero |= nonzero >> 4\n\tnonzero |= nonzero >> 2\n\tnonzero |= nonzero >> 1\n\treturn int(^nonzero) & 1\n}\n\n// nonAdjacentForm computes a width-w non-adjacent form for this scalar.\n//\n// w must be between 2 and 8, or nonAdjacentForm will panic.\nfunc (s *Scalar) nonAdjacentForm(w uint) [256]int8 {\n\t// This implementation is adapted from the one\n\t// in curve25519-dalek and is documented there:\n\t// https://github.com/dalek-cryptography/curve25519-dalek/blob/f630041af28e9a405255f98a8a93adca18e4315b/src/scalar.rs#L800-L871\n\tb := s.Bytes()\n\tif b[31] > 127 {\n\t\tpanic(\"scalar has high bit set illegally\")\n\t}\n\tif w < 2 {\n\t\tpanic(\"w must be at least 2 by the definition of NAF\")\n\t} else if w > 8 {\n\t\tpanic(\"NAF digits must fit in int8\")\n\t}\n\n\tvar naf [256]int8\n\tvar digits [5]uint64\n\n\tfor i := 0; i < 4; i++ {\n\t\tdigits[i] = binary.LittleEndian.Uint64(b[i*8:])\n\t}\n\n\twidth := uint64(1 << w)\n\twindowMask := uint64(width - 1)\n\n\tpos := uint(0)\n\tcarry := uint64(0)\n\tfor pos < 256 {\n\t\tindexU64 := pos / 64\n\t\tindexBit := pos % 64\n\t\tvar bitBuf uint64\n\t\tif indexBit < 64-w {\n\t\t\t// This window's bits are contained in a single u64\n\t\t\tbitBuf = digits[indexU64] >> indexBit\n\t\t} else {\n\t\t\t// Combine the current 64 bits with bits from the next 64\n\t\t\tbitBuf = (digits[indexU64] >> indexBit) | (digits[1+indexU64] << (64 - indexBit))\n\t\t}\n\n\t\t// Add carry into the current window\n\t\twindow := carry + (bitBuf & windowMask)\n\n\t\tif window&1 == 0 {\n\t\t\t// If the window value is even, preserve the carry and continue.\n\t\t\t// Why is the carry preserved?\n\t\t\t// If carry == 0 and window & 1 == 0,\n\t\t\t//    then the next carry should be 0\n\t\t\t// If carry == 1 and window & 1 == 0,\n\t\t\t//    then bit_buf & 1 == 1 so the next carry should be 1\n\t\t\tpos += 1\n\t\t\tcontinue\n\t\t}\n\n\t\tif window < width/2 {\n\t\t\tcarry = 0\n\t\t\tnaf[pos] = int8(window)\n\t\t} else {\n\t\t\tcarry = 1\n\t\t\tnaf[pos] = int8(window) - int8(width)\n\t\t}\n\n\t\tpos += w\n\t}\n\treturn naf\n}\n\nfunc (s *Scalar) signedRadix16() [64]int8 {\n\tb := s.Bytes()\n\tif b[31] > 127 {\n\t\tpanic(\"scalar has high bit set illegally\")\n\t}\n\n\tvar digits [64]int8\n\n\t// Compute unsigned radix-16 digits:\n\tfor i := 0; i < 32; i++ {\n\t\tdigits[2*i] = int8(b[i] & 15)\n\t\tdigits[2*i+1] = int8((b[i] >> 4) & 15)\n\t}\n\n\t// Recenter coefficients:\n\tfor i := 0; i < 63; i++ {\n\t\tcarry := (digits[i] + 8) >> 4\n\t\tdigits[i] -= carry << 4\n\t\tdigits[i+1] += carry\n\t}\n\n\treturn digits\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/scalar_fiat.go",
    "content": "// Code generated by Fiat Cryptography. DO NOT EDIT.\n//\n// Autogenerated: word_by_word_montgomery --lang Go --cmovznz-by-mul --relax-primitive-carry-to-bitwidth 32,64 --public-function-case camelCase --public-type-case camelCase --private-function-case camelCase --private-type-case camelCase --doc-text-before-function-name '' --doc-newline-before-package-declaration --doc-prepend-header 'Code generated by Fiat Cryptography. DO NOT EDIT.' --package-name edwards25519 Scalar 64 '2^252 + 27742317777372353535851937790883648493' mul add sub opp nonzero from_montgomery to_montgomery to_bytes from_bytes\n//\n// curve description: Scalar\n//\n// machine_wordsize = 64 (from \"64\")\n//\n// requested operations: mul, add, sub, opp, nonzero, from_montgomery, to_montgomery, to_bytes, from_bytes\n//\n// m = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed (from \"2^252 + 27742317777372353535851937790883648493\")\n//\n//\n//\n// NOTE: In addition to the bounds specified above each function, all\n//\n//   functions synthesized for this Montgomery arithmetic require the\n//\n//   input to be strictly less than the prime modulus (m), and also\n//\n//   require the input to be in the unique saturated representation.\n//\n//   All functions also ensure that these two properties are true of\n//\n//   return values.\n//\n//\n//\n// Computed values:\n//\n//   eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192)\n//\n//   bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248)\n//\n//   twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in\n//\n//                            if x1 & (2^256-1) < 2^255 then x1 & (2^256-1) else (x1 & (2^256-1)) - 2^256\n\npackage edwards25519\n\nimport \"math/bits\"\n\ntype fiatScalarUint1 uint64 // We use uint64 instead of a more narrow type for performance reasons; see https://github.com/mit-plv/fiat-crypto/pull/1006#issuecomment-892625927\ntype fiatScalarInt1 int64   // We use uint64 instead of a more narrow type for performance reasons; see https://github.com/mit-plv/fiat-crypto/pull/1006#issuecomment-892625927\n\n// The type fiatScalarMontgomeryDomainFieldElement is a field element in the Montgomery domain.\n//\n// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]\ntype fiatScalarMontgomeryDomainFieldElement [4]uint64\n\n// The type fiatScalarNonMontgomeryDomainFieldElement is a field element NOT in the Montgomery domain.\n//\n// Bounds: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]\ntype fiatScalarNonMontgomeryDomainFieldElement [4]uint64\n\n// fiatScalarCmovznzU64 is a single-word conditional move.\n//\n// Postconditions:\n//\n//\tout1 = (if arg1 = 0 then arg2 else arg3)\n//\n// Input Bounds:\n//\n//\targ1: [0x0 ~> 0x1]\n//\targ2: [0x0 ~> 0xffffffffffffffff]\n//\targ3: [0x0 ~> 0xffffffffffffffff]\n//\n// Output Bounds:\n//\n//\tout1: [0x0 ~> 0xffffffffffffffff]\nfunc fiatScalarCmovznzU64(out1 *uint64, arg1 fiatScalarUint1, arg2 uint64, arg3 uint64) {\n\tx1 := (uint64(arg1) * 0xffffffffffffffff)\n\tx2 := ((x1 & arg3) | ((^x1) & arg2))\n\t*out1 = x2\n}\n\n// fiatScalarMul multiplies two field elements in the Montgomery domain.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\t0 ≤ eval arg2 < m\n//\n// Postconditions:\n//\n//\teval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m\n//\t0 ≤ eval out1 < m\nfunc fiatScalarMul(out1 *fiatScalarMontgomeryDomainFieldElement, arg1 *fiatScalarMontgomeryDomainFieldElement, arg2 *fiatScalarMontgomeryDomainFieldElement) {\n\tx1 := arg1[1]\n\tx2 := arg1[2]\n\tx3 := arg1[3]\n\tx4 := arg1[0]\n\tvar x5 uint64\n\tvar x6 uint64\n\tx6, x5 = bits.Mul64(x4, arg2[3])\n\tvar x7 uint64\n\tvar x8 uint64\n\tx8, x7 = bits.Mul64(x4, arg2[2])\n\tvar x9 uint64\n\tvar x10 uint64\n\tx10, x9 = bits.Mul64(x4, arg2[1])\n\tvar x11 uint64\n\tvar x12 uint64\n\tx12, x11 = bits.Mul64(x4, arg2[0])\n\tvar x13 uint64\n\tvar x14 uint64\n\tx13, x14 = bits.Add64(x12, x9, uint64(0x0))\n\tvar x15 uint64\n\tvar x16 uint64\n\tx15, x16 = bits.Add64(x10, x7, uint64(fiatScalarUint1(x14)))\n\tvar x17 uint64\n\tvar x18 uint64\n\tx17, x18 = bits.Add64(x8, x5, uint64(fiatScalarUint1(x16)))\n\tx19 := (uint64(fiatScalarUint1(x18)) + x6)\n\tvar x20 uint64\n\t_, x20 = bits.Mul64(x11, 0xd2b51da312547e1b)\n\tvar x22 uint64\n\tvar x23 uint64\n\tx23, x22 = bits.Mul64(x20, 0x1000000000000000)\n\tvar x24 uint64\n\tvar x25 uint64\n\tx25, x24 = bits.Mul64(x20, 0x14def9dea2f79cd6)\n\tvar x26 uint64\n\tvar x27 uint64\n\tx27, x26 = bits.Mul64(x20, 0x5812631a5cf5d3ed)\n\tvar x28 uint64\n\tvar x29 uint64\n\tx28, x29 = bits.Add64(x27, x24, uint64(0x0))\n\tx30 := (uint64(fiatScalarUint1(x29)) + x25)\n\tvar x32 uint64\n\t_, x32 = bits.Add64(x11, x26, uint64(0x0))\n\tvar x33 uint64\n\tvar x34 uint64\n\tx33, x34 = bits.Add64(x13, x28, uint64(fiatScalarUint1(x32)))\n\tvar x35 uint64\n\tvar x36 uint64\n\tx35, x36 = bits.Add64(x15, x30, uint64(fiatScalarUint1(x34)))\n\tvar x37 uint64\n\tvar x38 uint64\n\tx37, x38 = bits.Add64(x17, x22, uint64(fiatScalarUint1(x36)))\n\tvar x39 uint64\n\tvar x40 uint64\n\tx39, x40 = bits.Add64(x19, x23, uint64(fiatScalarUint1(x38)))\n\tvar x41 uint64\n\tvar x42 uint64\n\tx42, x41 = bits.Mul64(x1, arg2[3])\n\tvar x43 uint64\n\tvar x44 uint64\n\tx44, x43 = bits.Mul64(x1, arg2[2])\n\tvar x45 uint64\n\tvar x46 uint64\n\tx46, x45 = bits.Mul64(x1, arg2[1])\n\tvar x47 uint64\n\tvar x48 uint64\n\tx48, x47 = bits.Mul64(x1, arg2[0])\n\tvar x49 uint64\n\tvar x50 uint64\n\tx49, x50 = bits.Add64(x48, x45, uint64(0x0))\n\tvar x51 uint64\n\tvar x52 uint64\n\tx51, x52 = bits.Add64(x46, x43, uint64(fiatScalarUint1(x50)))\n\tvar x53 uint64\n\tvar x54 uint64\n\tx53, x54 = bits.Add64(x44, x41, uint64(fiatScalarUint1(x52)))\n\tx55 := (uint64(fiatScalarUint1(x54)) + x42)\n\tvar x56 uint64\n\tvar x57 uint64\n\tx56, x57 = bits.Add64(x33, x47, uint64(0x0))\n\tvar x58 uint64\n\tvar x59 uint64\n\tx58, x59 = bits.Add64(x35, x49, uint64(fiatScalarUint1(x57)))\n\tvar x60 uint64\n\tvar x61 uint64\n\tx60, x61 = bits.Add64(x37, x51, uint64(fiatScalarUint1(x59)))\n\tvar x62 uint64\n\tvar x63 uint64\n\tx62, x63 = bits.Add64(x39, x53, uint64(fiatScalarUint1(x61)))\n\tvar x64 uint64\n\tvar x65 uint64\n\tx64, x65 = bits.Add64(uint64(fiatScalarUint1(x40)), x55, uint64(fiatScalarUint1(x63)))\n\tvar x66 uint64\n\t_, x66 = bits.Mul64(x56, 0xd2b51da312547e1b)\n\tvar x68 uint64\n\tvar x69 uint64\n\tx69, x68 = bits.Mul64(x66, 0x1000000000000000)\n\tvar x70 uint64\n\tvar x71 uint64\n\tx71, x70 = bits.Mul64(x66, 0x14def9dea2f79cd6)\n\tvar x72 uint64\n\tvar x73 uint64\n\tx73, x72 = bits.Mul64(x66, 0x5812631a5cf5d3ed)\n\tvar x74 uint64\n\tvar x75 uint64\n\tx74, x75 = bits.Add64(x73, x70, uint64(0x0))\n\tx76 := (uint64(fiatScalarUint1(x75)) + x71)\n\tvar x78 uint64\n\t_, x78 = bits.Add64(x56, x72, uint64(0x0))\n\tvar x79 uint64\n\tvar x80 uint64\n\tx79, x80 = bits.Add64(x58, x74, uint64(fiatScalarUint1(x78)))\n\tvar x81 uint64\n\tvar x82 uint64\n\tx81, x82 = bits.Add64(x60, x76, uint64(fiatScalarUint1(x80)))\n\tvar x83 uint64\n\tvar x84 uint64\n\tx83, x84 = bits.Add64(x62, x68, uint64(fiatScalarUint1(x82)))\n\tvar x85 uint64\n\tvar x86 uint64\n\tx85, x86 = bits.Add64(x64, x69, uint64(fiatScalarUint1(x84)))\n\tx87 := (uint64(fiatScalarUint1(x86)) + uint64(fiatScalarUint1(x65)))\n\tvar x88 uint64\n\tvar x89 uint64\n\tx89, x88 = bits.Mul64(x2, arg2[3])\n\tvar x90 uint64\n\tvar x91 uint64\n\tx91, x90 = bits.Mul64(x2, arg2[2])\n\tvar x92 uint64\n\tvar x93 uint64\n\tx93, x92 = bits.Mul64(x2, arg2[1])\n\tvar x94 uint64\n\tvar x95 uint64\n\tx95, x94 = bits.Mul64(x2, arg2[0])\n\tvar x96 uint64\n\tvar x97 uint64\n\tx96, x97 = bits.Add64(x95, x92, uint64(0x0))\n\tvar x98 uint64\n\tvar x99 uint64\n\tx98, x99 = bits.Add64(x93, x90, uint64(fiatScalarUint1(x97)))\n\tvar x100 uint64\n\tvar x101 uint64\n\tx100, x101 = bits.Add64(x91, x88, uint64(fiatScalarUint1(x99)))\n\tx102 := (uint64(fiatScalarUint1(x101)) + x89)\n\tvar x103 uint64\n\tvar x104 uint64\n\tx103, x104 = bits.Add64(x79, x94, uint64(0x0))\n\tvar x105 uint64\n\tvar x106 uint64\n\tx105, x106 = bits.Add64(x81, x96, uint64(fiatScalarUint1(x104)))\n\tvar x107 uint64\n\tvar x108 uint64\n\tx107, x108 = bits.Add64(x83, x98, uint64(fiatScalarUint1(x106)))\n\tvar x109 uint64\n\tvar x110 uint64\n\tx109, x110 = bits.Add64(x85, x100, uint64(fiatScalarUint1(x108)))\n\tvar x111 uint64\n\tvar x112 uint64\n\tx111, x112 = bits.Add64(x87, x102, uint64(fiatScalarUint1(x110)))\n\tvar x113 uint64\n\t_, x113 = bits.Mul64(x103, 0xd2b51da312547e1b)\n\tvar x115 uint64\n\tvar x116 uint64\n\tx116, x115 = bits.Mul64(x113, 0x1000000000000000)\n\tvar x117 uint64\n\tvar x118 uint64\n\tx118, x117 = bits.Mul64(x113, 0x14def9dea2f79cd6)\n\tvar x119 uint64\n\tvar x120 uint64\n\tx120, x119 = bits.Mul64(x113, 0x5812631a5cf5d3ed)\n\tvar x121 uint64\n\tvar x122 uint64\n\tx121, x122 = bits.Add64(x120, x117, uint64(0x0))\n\tx123 := (uint64(fiatScalarUint1(x122)) + x118)\n\tvar x125 uint64\n\t_, x125 = bits.Add64(x103, x119, uint64(0x0))\n\tvar x126 uint64\n\tvar x127 uint64\n\tx126, x127 = bits.Add64(x105, x121, uint64(fiatScalarUint1(x125)))\n\tvar x128 uint64\n\tvar x129 uint64\n\tx128, x129 = bits.Add64(x107, x123, uint64(fiatScalarUint1(x127)))\n\tvar x130 uint64\n\tvar x131 uint64\n\tx130, x131 = bits.Add64(x109, x115, uint64(fiatScalarUint1(x129)))\n\tvar x132 uint64\n\tvar x133 uint64\n\tx132, x133 = bits.Add64(x111, x116, uint64(fiatScalarUint1(x131)))\n\tx134 := (uint64(fiatScalarUint1(x133)) + uint64(fiatScalarUint1(x112)))\n\tvar x135 uint64\n\tvar x136 uint64\n\tx136, x135 = bits.Mul64(x3, arg2[3])\n\tvar x137 uint64\n\tvar x138 uint64\n\tx138, x137 = bits.Mul64(x3, arg2[2])\n\tvar x139 uint64\n\tvar x140 uint64\n\tx140, x139 = bits.Mul64(x3, arg2[1])\n\tvar x141 uint64\n\tvar x142 uint64\n\tx142, x141 = bits.Mul64(x3, arg2[0])\n\tvar x143 uint64\n\tvar x144 uint64\n\tx143, x144 = bits.Add64(x142, x139, uint64(0x0))\n\tvar x145 uint64\n\tvar x146 uint64\n\tx145, x146 = bits.Add64(x140, x137, uint64(fiatScalarUint1(x144)))\n\tvar x147 uint64\n\tvar x148 uint64\n\tx147, x148 = bits.Add64(x138, x135, uint64(fiatScalarUint1(x146)))\n\tx149 := (uint64(fiatScalarUint1(x148)) + x136)\n\tvar x150 uint64\n\tvar x151 uint64\n\tx150, x151 = bits.Add64(x126, x141, uint64(0x0))\n\tvar x152 uint64\n\tvar x153 uint64\n\tx152, x153 = bits.Add64(x128, x143, uint64(fiatScalarUint1(x151)))\n\tvar x154 uint64\n\tvar x155 uint64\n\tx154, x155 = bits.Add64(x130, x145, uint64(fiatScalarUint1(x153)))\n\tvar x156 uint64\n\tvar x157 uint64\n\tx156, x157 = bits.Add64(x132, x147, uint64(fiatScalarUint1(x155)))\n\tvar x158 uint64\n\tvar x159 uint64\n\tx158, x159 = bits.Add64(x134, x149, uint64(fiatScalarUint1(x157)))\n\tvar x160 uint64\n\t_, x160 = bits.Mul64(x150, 0xd2b51da312547e1b)\n\tvar x162 uint64\n\tvar x163 uint64\n\tx163, x162 = bits.Mul64(x160, 0x1000000000000000)\n\tvar x164 uint64\n\tvar x165 uint64\n\tx165, x164 = bits.Mul64(x160, 0x14def9dea2f79cd6)\n\tvar x166 uint64\n\tvar x167 uint64\n\tx167, x166 = bits.Mul64(x160, 0x5812631a5cf5d3ed)\n\tvar x168 uint64\n\tvar x169 uint64\n\tx168, x169 = bits.Add64(x167, x164, uint64(0x0))\n\tx170 := (uint64(fiatScalarUint1(x169)) + x165)\n\tvar x172 uint64\n\t_, x172 = bits.Add64(x150, x166, uint64(0x0))\n\tvar x173 uint64\n\tvar x174 uint64\n\tx173, x174 = bits.Add64(x152, x168, uint64(fiatScalarUint1(x172)))\n\tvar x175 uint64\n\tvar x176 uint64\n\tx175, x176 = bits.Add64(x154, x170, uint64(fiatScalarUint1(x174)))\n\tvar x177 uint64\n\tvar x178 uint64\n\tx177, x178 = bits.Add64(x156, x162, uint64(fiatScalarUint1(x176)))\n\tvar x179 uint64\n\tvar x180 uint64\n\tx179, x180 = bits.Add64(x158, x163, uint64(fiatScalarUint1(x178)))\n\tx181 := (uint64(fiatScalarUint1(x180)) + uint64(fiatScalarUint1(x159)))\n\tvar x182 uint64\n\tvar x183 uint64\n\tx182, x183 = bits.Sub64(x173, 0x5812631a5cf5d3ed, uint64(0x0))\n\tvar x184 uint64\n\tvar x185 uint64\n\tx184, x185 = bits.Sub64(x175, 0x14def9dea2f79cd6, uint64(fiatScalarUint1(x183)))\n\tvar x186 uint64\n\tvar x187 uint64\n\tx186, x187 = bits.Sub64(x177, uint64(0x0), uint64(fiatScalarUint1(x185)))\n\tvar x188 uint64\n\tvar x189 uint64\n\tx188, x189 = bits.Sub64(x179, 0x1000000000000000, uint64(fiatScalarUint1(x187)))\n\tvar x191 uint64\n\t_, x191 = bits.Sub64(x181, uint64(0x0), uint64(fiatScalarUint1(x189)))\n\tvar x192 uint64\n\tfiatScalarCmovznzU64(&x192, fiatScalarUint1(x191), x182, x173)\n\tvar x193 uint64\n\tfiatScalarCmovznzU64(&x193, fiatScalarUint1(x191), x184, x175)\n\tvar x194 uint64\n\tfiatScalarCmovznzU64(&x194, fiatScalarUint1(x191), x186, x177)\n\tvar x195 uint64\n\tfiatScalarCmovznzU64(&x195, fiatScalarUint1(x191), x188, x179)\n\tout1[0] = x192\n\tout1[1] = x193\n\tout1[2] = x194\n\tout1[3] = x195\n}\n\n// fiatScalarAdd adds two field elements in the Montgomery domain.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\t0 ≤ eval arg2 < m\n//\n// Postconditions:\n//\n//\teval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m\n//\t0 ≤ eval out1 < m\nfunc fiatScalarAdd(out1 *fiatScalarMontgomeryDomainFieldElement, arg1 *fiatScalarMontgomeryDomainFieldElement, arg2 *fiatScalarMontgomeryDomainFieldElement) {\n\tvar x1 uint64\n\tvar x2 uint64\n\tx1, x2 = bits.Add64(arg1[0], arg2[0], uint64(0x0))\n\tvar x3 uint64\n\tvar x4 uint64\n\tx3, x4 = bits.Add64(arg1[1], arg2[1], uint64(fiatScalarUint1(x2)))\n\tvar x5 uint64\n\tvar x6 uint64\n\tx5, x6 = bits.Add64(arg1[2], arg2[2], uint64(fiatScalarUint1(x4)))\n\tvar x7 uint64\n\tvar x8 uint64\n\tx7, x8 = bits.Add64(arg1[3], arg2[3], uint64(fiatScalarUint1(x6)))\n\tvar x9 uint64\n\tvar x10 uint64\n\tx9, x10 = bits.Sub64(x1, 0x5812631a5cf5d3ed, uint64(0x0))\n\tvar x11 uint64\n\tvar x12 uint64\n\tx11, x12 = bits.Sub64(x3, 0x14def9dea2f79cd6, uint64(fiatScalarUint1(x10)))\n\tvar x13 uint64\n\tvar x14 uint64\n\tx13, x14 = bits.Sub64(x5, uint64(0x0), uint64(fiatScalarUint1(x12)))\n\tvar x15 uint64\n\tvar x16 uint64\n\tx15, x16 = bits.Sub64(x7, 0x1000000000000000, uint64(fiatScalarUint1(x14)))\n\tvar x18 uint64\n\t_, x18 = bits.Sub64(uint64(fiatScalarUint1(x8)), uint64(0x0), uint64(fiatScalarUint1(x16)))\n\tvar x19 uint64\n\tfiatScalarCmovznzU64(&x19, fiatScalarUint1(x18), x9, x1)\n\tvar x20 uint64\n\tfiatScalarCmovznzU64(&x20, fiatScalarUint1(x18), x11, x3)\n\tvar x21 uint64\n\tfiatScalarCmovznzU64(&x21, fiatScalarUint1(x18), x13, x5)\n\tvar x22 uint64\n\tfiatScalarCmovznzU64(&x22, fiatScalarUint1(x18), x15, x7)\n\tout1[0] = x19\n\tout1[1] = x20\n\tout1[2] = x21\n\tout1[3] = x22\n}\n\n// fiatScalarSub subtracts two field elements in the Montgomery domain.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\t0 ≤ eval arg2 < m\n//\n// Postconditions:\n//\n//\teval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m\n//\t0 ≤ eval out1 < m\nfunc fiatScalarSub(out1 *fiatScalarMontgomeryDomainFieldElement, arg1 *fiatScalarMontgomeryDomainFieldElement, arg2 *fiatScalarMontgomeryDomainFieldElement) {\n\tvar x1 uint64\n\tvar x2 uint64\n\tx1, x2 = bits.Sub64(arg1[0], arg2[0], uint64(0x0))\n\tvar x3 uint64\n\tvar x4 uint64\n\tx3, x4 = bits.Sub64(arg1[1], arg2[1], uint64(fiatScalarUint1(x2)))\n\tvar x5 uint64\n\tvar x6 uint64\n\tx5, x6 = bits.Sub64(arg1[2], arg2[2], uint64(fiatScalarUint1(x4)))\n\tvar x7 uint64\n\tvar x8 uint64\n\tx7, x8 = bits.Sub64(arg1[3], arg2[3], uint64(fiatScalarUint1(x6)))\n\tvar x9 uint64\n\tfiatScalarCmovznzU64(&x9, fiatScalarUint1(x8), uint64(0x0), 0xffffffffffffffff)\n\tvar x10 uint64\n\tvar x11 uint64\n\tx10, x11 = bits.Add64(x1, (x9 & 0x5812631a5cf5d3ed), uint64(0x0))\n\tvar x12 uint64\n\tvar x13 uint64\n\tx12, x13 = bits.Add64(x3, (x9 & 0x14def9dea2f79cd6), uint64(fiatScalarUint1(x11)))\n\tvar x14 uint64\n\tvar x15 uint64\n\tx14, x15 = bits.Add64(x5, uint64(0x0), uint64(fiatScalarUint1(x13)))\n\tvar x16 uint64\n\tx16, _ = bits.Add64(x7, (x9 & 0x1000000000000000), uint64(fiatScalarUint1(x15)))\n\tout1[0] = x10\n\tout1[1] = x12\n\tout1[2] = x14\n\tout1[3] = x16\n}\n\n// fiatScalarOpp negates a field element in the Montgomery domain.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\n// Postconditions:\n//\n//\teval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m\n//\t0 ≤ eval out1 < m\nfunc fiatScalarOpp(out1 *fiatScalarMontgomeryDomainFieldElement, arg1 *fiatScalarMontgomeryDomainFieldElement) {\n\tvar x1 uint64\n\tvar x2 uint64\n\tx1, x2 = bits.Sub64(uint64(0x0), arg1[0], uint64(0x0))\n\tvar x3 uint64\n\tvar x4 uint64\n\tx3, x4 = bits.Sub64(uint64(0x0), arg1[1], uint64(fiatScalarUint1(x2)))\n\tvar x5 uint64\n\tvar x6 uint64\n\tx5, x6 = bits.Sub64(uint64(0x0), arg1[2], uint64(fiatScalarUint1(x4)))\n\tvar x7 uint64\n\tvar x8 uint64\n\tx7, x8 = bits.Sub64(uint64(0x0), arg1[3], uint64(fiatScalarUint1(x6)))\n\tvar x9 uint64\n\tfiatScalarCmovznzU64(&x9, fiatScalarUint1(x8), uint64(0x0), 0xffffffffffffffff)\n\tvar x10 uint64\n\tvar x11 uint64\n\tx10, x11 = bits.Add64(x1, (x9 & 0x5812631a5cf5d3ed), uint64(0x0))\n\tvar x12 uint64\n\tvar x13 uint64\n\tx12, x13 = bits.Add64(x3, (x9 & 0x14def9dea2f79cd6), uint64(fiatScalarUint1(x11)))\n\tvar x14 uint64\n\tvar x15 uint64\n\tx14, x15 = bits.Add64(x5, uint64(0x0), uint64(fiatScalarUint1(x13)))\n\tvar x16 uint64\n\tx16, _ = bits.Add64(x7, (x9 & 0x1000000000000000), uint64(fiatScalarUint1(x15)))\n\tout1[0] = x10\n\tout1[1] = x12\n\tout1[2] = x14\n\tout1[3] = x16\n}\n\n// fiatScalarNonzero outputs a single non-zero word if the input is non-zero and zero otherwise.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\n// Postconditions:\n//\n//\tout1 = 0 ↔ eval (from_montgomery arg1) mod m = 0\n//\n// Input Bounds:\n//\n//\targ1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]]\n//\n// Output Bounds:\n//\n//\tout1: [0x0 ~> 0xffffffffffffffff]\nfunc fiatScalarNonzero(out1 *uint64, arg1 *[4]uint64) {\n\tx1 := (arg1[0] | (arg1[1] | (arg1[2] | arg1[3])))\n\t*out1 = x1\n}\n\n// fiatScalarFromMontgomery translates a field element out of the Montgomery domain.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\n// Postconditions:\n//\n//\teval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^4) mod m\n//\t0 ≤ eval out1 < m\nfunc fiatScalarFromMontgomery(out1 *fiatScalarNonMontgomeryDomainFieldElement, arg1 *fiatScalarMontgomeryDomainFieldElement) {\n\tx1 := arg1[0]\n\tvar x2 uint64\n\t_, x2 = bits.Mul64(x1, 0xd2b51da312547e1b)\n\tvar x4 uint64\n\tvar x5 uint64\n\tx5, x4 = bits.Mul64(x2, 0x1000000000000000)\n\tvar x6 uint64\n\tvar x7 uint64\n\tx7, x6 = bits.Mul64(x2, 0x14def9dea2f79cd6)\n\tvar x8 uint64\n\tvar x9 uint64\n\tx9, x8 = bits.Mul64(x2, 0x5812631a5cf5d3ed)\n\tvar x10 uint64\n\tvar x11 uint64\n\tx10, x11 = bits.Add64(x9, x6, uint64(0x0))\n\tvar x13 uint64\n\t_, x13 = bits.Add64(x1, x8, uint64(0x0))\n\tvar x14 uint64\n\tvar x15 uint64\n\tx14, x15 = bits.Add64(uint64(0x0), x10, uint64(fiatScalarUint1(x13)))\n\tvar x16 uint64\n\tvar x17 uint64\n\tx16, x17 = bits.Add64(x14, arg1[1], uint64(0x0))\n\tvar x18 uint64\n\t_, x18 = bits.Mul64(x16, 0xd2b51da312547e1b)\n\tvar x20 uint64\n\tvar x21 uint64\n\tx21, x20 = bits.Mul64(x18, 0x1000000000000000)\n\tvar x22 uint64\n\tvar x23 uint64\n\tx23, x22 = bits.Mul64(x18, 0x14def9dea2f79cd6)\n\tvar x24 uint64\n\tvar x25 uint64\n\tx25, x24 = bits.Mul64(x18, 0x5812631a5cf5d3ed)\n\tvar x26 uint64\n\tvar x27 uint64\n\tx26, x27 = bits.Add64(x25, x22, uint64(0x0))\n\tvar x29 uint64\n\t_, x29 = bits.Add64(x16, x24, uint64(0x0))\n\tvar x30 uint64\n\tvar x31 uint64\n\tx30, x31 = bits.Add64((uint64(fiatScalarUint1(x17)) + (uint64(fiatScalarUint1(x15)) + (uint64(fiatScalarUint1(x11)) + x7))), x26, uint64(fiatScalarUint1(x29)))\n\tvar x32 uint64\n\tvar x33 uint64\n\tx32, x33 = bits.Add64(x4, (uint64(fiatScalarUint1(x27)) + x23), uint64(fiatScalarUint1(x31)))\n\tvar x34 uint64\n\tvar x35 uint64\n\tx34, x35 = bits.Add64(x5, x20, uint64(fiatScalarUint1(x33)))\n\tvar x36 uint64\n\tvar x37 uint64\n\tx36, x37 = bits.Add64(x30, arg1[2], uint64(0x0))\n\tvar x38 uint64\n\tvar x39 uint64\n\tx38, x39 = bits.Add64(x32, uint64(0x0), uint64(fiatScalarUint1(x37)))\n\tvar x40 uint64\n\tvar x41 uint64\n\tx40, x41 = bits.Add64(x34, uint64(0x0), uint64(fiatScalarUint1(x39)))\n\tvar x42 uint64\n\t_, x42 = bits.Mul64(x36, 0xd2b51da312547e1b)\n\tvar x44 uint64\n\tvar x45 uint64\n\tx45, x44 = bits.Mul64(x42, 0x1000000000000000)\n\tvar x46 uint64\n\tvar x47 uint64\n\tx47, x46 = bits.Mul64(x42, 0x14def9dea2f79cd6)\n\tvar x48 uint64\n\tvar x49 uint64\n\tx49, x48 = bits.Mul64(x42, 0x5812631a5cf5d3ed)\n\tvar x50 uint64\n\tvar x51 uint64\n\tx50, x51 = bits.Add64(x49, x46, uint64(0x0))\n\tvar x53 uint64\n\t_, x53 = bits.Add64(x36, x48, uint64(0x0))\n\tvar x54 uint64\n\tvar x55 uint64\n\tx54, x55 = bits.Add64(x38, x50, uint64(fiatScalarUint1(x53)))\n\tvar x56 uint64\n\tvar x57 uint64\n\tx56, x57 = bits.Add64(x40, (uint64(fiatScalarUint1(x51)) + x47), uint64(fiatScalarUint1(x55)))\n\tvar x58 uint64\n\tvar x59 uint64\n\tx58, x59 = bits.Add64((uint64(fiatScalarUint1(x41)) + (uint64(fiatScalarUint1(x35)) + x21)), x44, uint64(fiatScalarUint1(x57)))\n\tvar x60 uint64\n\tvar x61 uint64\n\tx60, x61 = bits.Add64(x54, arg1[3], uint64(0x0))\n\tvar x62 uint64\n\tvar x63 uint64\n\tx62, x63 = bits.Add64(x56, uint64(0x0), uint64(fiatScalarUint1(x61)))\n\tvar x64 uint64\n\tvar x65 uint64\n\tx64, x65 = bits.Add64(x58, uint64(0x0), uint64(fiatScalarUint1(x63)))\n\tvar x66 uint64\n\t_, x66 = bits.Mul64(x60, 0xd2b51da312547e1b)\n\tvar x68 uint64\n\tvar x69 uint64\n\tx69, x68 = bits.Mul64(x66, 0x1000000000000000)\n\tvar x70 uint64\n\tvar x71 uint64\n\tx71, x70 = bits.Mul64(x66, 0x14def9dea2f79cd6)\n\tvar x72 uint64\n\tvar x73 uint64\n\tx73, x72 = bits.Mul64(x66, 0x5812631a5cf5d3ed)\n\tvar x74 uint64\n\tvar x75 uint64\n\tx74, x75 = bits.Add64(x73, x70, uint64(0x0))\n\tvar x77 uint64\n\t_, x77 = bits.Add64(x60, x72, uint64(0x0))\n\tvar x78 uint64\n\tvar x79 uint64\n\tx78, x79 = bits.Add64(x62, x74, uint64(fiatScalarUint1(x77)))\n\tvar x80 uint64\n\tvar x81 uint64\n\tx80, x81 = bits.Add64(x64, (uint64(fiatScalarUint1(x75)) + x71), uint64(fiatScalarUint1(x79)))\n\tvar x82 uint64\n\tvar x83 uint64\n\tx82, x83 = bits.Add64((uint64(fiatScalarUint1(x65)) + (uint64(fiatScalarUint1(x59)) + x45)), x68, uint64(fiatScalarUint1(x81)))\n\tx84 := (uint64(fiatScalarUint1(x83)) + x69)\n\tvar x85 uint64\n\tvar x86 uint64\n\tx85, x86 = bits.Sub64(x78, 0x5812631a5cf5d3ed, uint64(0x0))\n\tvar x87 uint64\n\tvar x88 uint64\n\tx87, x88 = bits.Sub64(x80, 0x14def9dea2f79cd6, uint64(fiatScalarUint1(x86)))\n\tvar x89 uint64\n\tvar x90 uint64\n\tx89, x90 = bits.Sub64(x82, uint64(0x0), uint64(fiatScalarUint1(x88)))\n\tvar x91 uint64\n\tvar x92 uint64\n\tx91, x92 = bits.Sub64(x84, 0x1000000000000000, uint64(fiatScalarUint1(x90)))\n\tvar x94 uint64\n\t_, x94 = bits.Sub64(uint64(0x0), uint64(0x0), uint64(fiatScalarUint1(x92)))\n\tvar x95 uint64\n\tfiatScalarCmovznzU64(&x95, fiatScalarUint1(x94), x85, x78)\n\tvar x96 uint64\n\tfiatScalarCmovznzU64(&x96, fiatScalarUint1(x94), x87, x80)\n\tvar x97 uint64\n\tfiatScalarCmovznzU64(&x97, fiatScalarUint1(x94), x89, x82)\n\tvar x98 uint64\n\tfiatScalarCmovznzU64(&x98, fiatScalarUint1(x94), x91, x84)\n\tout1[0] = x95\n\tout1[1] = x96\n\tout1[2] = x97\n\tout1[3] = x98\n}\n\n// fiatScalarToMontgomery translates a field element into the Montgomery domain.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\n// Postconditions:\n//\n//\teval (from_montgomery out1) mod m = eval arg1 mod m\n//\t0 ≤ eval out1 < m\nfunc fiatScalarToMontgomery(out1 *fiatScalarMontgomeryDomainFieldElement, arg1 *fiatScalarNonMontgomeryDomainFieldElement) {\n\tx1 := arg1[1]\n\tx2 := arg1[2]\n\tx3 := arg1[3]\n\tx4 := arg1[0]\n\tvar x5 uint64\n\tvar x6 uint64\n\tx6, x5 = bits.Mul64(x4, 0x399411b7c309a3d)\n\tvar x7 uint64\n\tvar x8 uint64\n\tx8, x7 = bits.Mul64(x4, 0xceec73d217f5be65)\n\tvar x9 uint64\n\tvar x10 uint64\n\tx10, x9 = bits.Mul64(x4, 0xd00e1ba768859347)\n\tvar x11 uint64\n\tvar x12 uint64\n\tx12, x11 = bits.Mul64(x4, 0xa40611e3449c0f01)\n\tvar x13 uint64\n\tvar x14 uint64\n\tx13, x14 = bits.Add64(x12, x9, uint64(0x0))\n\tvar x15 uint64\n\tvar x16 uint64\n\tx15, x16 = bits.Add64(x10, x7, uint64(fiatScalarUint1(x14)))\n\tvar x17 uint64\n\tvar x18 uint64\n\tx17, x18 = bits.Add64(x8, x5, uint64(fiatScalarUint1(x16)))\n\tvar x19 uint64\n\t_, x19 = bits.Mul64(x11, 0xd2b51da312547e1b)\n\tvar x21 uint64\n\tvar x22 uint64\n\tx22, x21 = bits.Mul64(x19, 0x1000000000000000)\n\tvar x23 uint64\n\tvar x24 uint64\n\tx24, x23 = bits.Mul64(x19, 0x14def9dea2f79cd6)\n\tvar x25 uint64\n\tvar x26 uint64\n\tx26, x25 = bits.Mul64(x19, 0x5812631a5cf5d3ed)\n\tvar x27 uint64\n\tvar x28 uint64\n\tx27, x28 = bits.Add64(x26, x23, uint64(0x0))\n\tvar x30 uint64\n\t_, x30 = bits.Add64(x11, x25, uint64(0x0))\n\tvar x31 uint64\n\tvar x32 uint64\n\tx31, x32 = bits.Add64(x13, x27, uint64(fiatScalarUint1(x30)))\n\tvar x33 uint64\n\tvar x34 uint64\n\tx33, x34 = bits.Add64(x15, (uint64(fiatScalarUint1(x28)) + x24), uint64(fiatScalarUint1(x32)))\n\tvar x35 uint64\n\tvar x36 uint64\n\tx35, x36 = bits.Add64(x17, x21, uint64(fiatScalarUint1(x34)))\n\tvar x37 uint64\n\tvar x38 uint64\n\tx38, x37 = bits.Mul64(x1, 0x399411b7c309a3d)\n\tvar x39 uint64\n\tvar x40 uint64\n\tx40, x39 = bits.Mul64(x1, 0xceec73d217f5be65)\n\tvar x41 uint64\n\tvar x42 uint64\n\tx42, x41 = bits.Mul64(x1, 0xd00e1ba768859347)\n\tvar x43 uint64\n\tvar x44 uint64\n\tx44, x43 = bits.Mul64(x1, 0xa40611e3449c0f01)\n\tvar x45 uint64\n\tvar x46 uint64\n\tx45, x46 = bits.Add64(x44, x41, uint64(0x0))\n\tvar x47 uint64\n\tvar x48 uint64\n\tx47, x48 = bits.Add64(x42, x39, uint64(fiatScalarUint1(x46)))\n\tvar x49 uint64\n\tvar x50 uint64\n\tx49, x50 = bits.Add64(x40, x37, uint64(fiatScalarUint1(x48)))\n\tvar x51 uint64\n\tvar x52 uint64\n\tx51, x52 = bits.Add64(x31, x43, uint64(0x0))\n\tvar x53 uint64\n\tvar x54 uint64\n\tx53, x54 = bits.Add64(x33, x45, uint64(fiatScalarUint1(x52)))\n\tvar x55 uint64\n\tvar x56 uint64\n\tx55, x56 = bits.Add64(x35, x47, uint64(fiatScalarUint1(x54)))\n\tvar x57 uint64\n\tvar x58 uint64\n\tx57, x58 = bits.Add64(((uint64(fiatScalarUint1(x36)) + (uint64(fiatScalarUint1(x18)) + x6)) + x22), x49, uint64(fiatScalarUint1(x56)))\n\tvar x59 uint64\n\t_, x59 = bits.Mul64(x51, 0xd2b51da312547e1b)\n\tvar x61 uint64\n\tvar x62 uint64\n\tx62, x61 = bits.Mul64(x59, 0x1000000000000000)\n\tvar x63 uint64\n\tvar x64 uint64\n\tx64, x63 = bits.Mul64(x59, 0x14def9dea2f79cd6)\n\tvar x65 uint64\n\tvar x66 uint64\n\tx66, x65 = bits.Mul64(x59, 0x5812631a5cf5d3ed)\n\tvar x67 uint64\n\tvar x68 uint64\n\tx67, x68 = bits.Add64(x66, x63, uint64(0x0))\n\tvar x70 uint64\n\t_, x70 = bits.Add64(x51, x65, uint64(0x0))\n\tvar x71 uint64\n\tvar x72 uint64\n\tx71, x72 = bits.Add64(x53, x67, uint64(fiatScalarUint1(x70)))\n\tvar x73 uint64\n\tvar x74 uint64\n\tx73, x74 = bits.Add64(x55, (uint64(fiatScalarUint1(x68)) + x64), uint64(fiatScalarUint1(x72)))\n\tvar x75 uint64\n\tvar x76 uint64\n\tx75, x76 = bits.Add64(x57, x61, uint64(fiatScalarUint1(x74)))\n\tvar x77 uint64\n\tvar x78 uint64\n\tx78, x77 = bits.Mul64(x2, 0x399411b7c309a3d)\n\tvar x79 uint64\n\tvar x80 uint64\n\tx80, x79 = bits.Mul64(x2, 0xceec73d217f5be65)\n\tvar x81 uint64\n\tvar x82 uint64\n\tx82, x81 = bits.Mul64(x2, 0xd00e1ba768859347)\n\tvar x83 uint64\n\tvar x84 uint64\n\tx84, x83 = bits.Mul64(x2, 0xa40611e3449c0f01)\n\tvar x85 uint64\n\tvar x86 uint64\n\tx85, x86 = bits.Add64(x84, x81, uint64(0x0))\n\tvar x87 uint64\n\tvar x88 uint64\n\tx87, x88 = bits.Add64(x82, x79, uint64(fiatScalarUint1(x86)))\n\tvar x89 uint64\n\tvar x90 uint64\n\tx89, x90 = bits.Add64(x80, x77, uint64(fiatScalarUint1(x88)))\n\tvar x91 uint64\n\tvar x92 uint64\n\tx91, x92 = bits.Add64(x71, x83, uint64(0x0))\n\tvar x93 uint64\n\tvar x94 uint64\n\tx93, x94 = bits.Add64(x73, x85, uint64(fiatScalarUint1(x92)))\n\tvar x95 uint64\n\tvar x96 uint64\n\tx95, x96 = bits.Add64(x75, x87, uint64(fiatScalarUint1(x94)))\n\tvar x97 uint64\n\tvar x98 uint64\n\tx97, x98 = bits.Add64(((uint64(fiatScalarUint1(x76)) + (uint64(fiatScalarUint1(x58)) + (uint64(fiatScalarUint1(x50)) + x38))) + x62), x89, uint64(fiatScalarUint1(x96)))\n\tvar x99 uint64\n\t_, x99 = bits.Mul64(x91, 0xd2b51da312547e1b)\n\tvar x101 uint64\n\tvar x102 uint64\n\tx102, x101 = bits.Mul64(x99, 0x1000000000000000)\n\tvar x103 uint64\n\tvar x104 uint64\n\tx104, x103 = bits.Mul64(x99, 0x14def9dea2f79cd6)\n\tvar x105 uint64\n\tvar x106 uint64\n\tx106, x105 = bits.Mul64(x99, 0x5812631a5cf5d3ed)\n\tvar x107 uint64\n\tvar x108 uint64\n\tx107, x108 = bits.Add64(x106, x103, uint64(0x0))\n\tvar x110 uint64\n\t_, x110 = bits.Add64(x91, x105, uint64(0x0))\n\tvar x111 uint64\n\tvar x112 uint64\n\tx111, x112 = bits.Add64(x93, x107, uint64(fiatScalarUint1(x110)))\n\tvar x113 uint64\n\tvar x114 uint64\n\tx113, x114 = bits.Add64(x95, (uint64(fiatScalarUint1(x108)) + x104), uint64(fiatScalarUint1(x112)))\n\tvar x115 uint64\n\tvar x116 uint64\n\tx115, x116 = bits.Add64(x97, x101, uint64(fiatScalarUint1(x114)))\n\tvar x117 uint64\n\tvar x118 uint64\n\tx118, x117 = bits.Mul64(x3, 0x399411b7c309a3d)\n\tvar x119 uint64\n\tvar x120 uint64\n\tx120, x119 = bits.Mul64(x3, 0xceec73d217f5be65)\n\tvar x121 uint64\n\tvar x122 uint64\n\tx122, x121 = bits.Mul64(x3, 0xd00e1ba768859347)\n\tvar x123 uint64\n\tvar x124 uint64\n\tx124, x123 = bits.Mul64(x3, 0xa40611e3449c0f01)\n\tvar x125 uint64\n\tvar x126 uint64\n\tx125, x126 = bits.Add64(x124, x121, uint64(0x0))\n\tvar x127 uint64\n\tvar x128 uint64\n\tx127, x128 = bits.Add64(x122, x119, uint64(fiatScalarUint1(x126)))\n\tvar x129 uint64\n\tvar x130 uint64\n\tx129, x130 = bits.Add64(x120, x117, uint64(fiatScalarUint1(x128)))\n\tvar x131 uint64\n\tvar x132 uint64\n\tx131, x132 = bits.Add64(x111, x123, uint64(0x0))\n\tvar x133 uint64\n\tvar x134 uint64\n\tx133, x134 = bits.Add64(x113, x125, uint64(fiatScalarUint1(x132)))\n\tvar x135 uint64\n\tvar x136 uint64\n\tx135, x136 = bits.Add64(x115, x127, uint64(fiatScalarUint1(x134)))\n\tvar x137 uint64\n\tvar x138 uint64\n\tx137, x138 = bits.Add64(((uint64(fiatScalarUint1(x116)) + (uint64(fiatScalarUint1(x98)) + (uint64(fiatScalarUint1(x90)) + x78))) + x102), x129, uint64(fiatScalarUint1(x136)))\n\tvar x139 uint64\n\t_, x139 = bits.Mul64(x131, 0xd2b51da312547e1b)\n\tvar x141 uint64\n\tvar x142 uint64\n\tx142, x141 = bits.Mul64(x139, 0x1000000000000000)\n\tvar x143 uint64\n\tvar x144 uint64\n\tx144, x143 = bits.Mul64(x139, 0x14def9dea2f79cd6)\n\tvar x145 uint64\n\tvar x146 uint64\n\tx146, x145 = bits.Mul64(x139, 0x5812631a5cf5d3ed)\n\tvar x147 uint64\n\tvar x148 uint64\n\tx147, x148 = bits.Add64(x146, x143, uint64(0x0))\n\tvar x150 uint64\n\t_, x150 = bits.Add64(x131, x145, uint64(0x0))\n\tvar x151 uint64\n\tvar x152 uint64\n\tx151, x152 = bits.Add64(x133, x147, uint64(fiatScalarUint1(x150)))\n\tvar x153 uint64\n\tvar x154 uint64\n\tx153, x154 = bits.Add64(x135, (uint64(fiatScalarUint1(x148)) + x144), uint64(fiatScalarUint1(x152)))\n\tvar x155 uint64\n\tvar x156 uint64\n\tx155, x156 = bits.Add64(x137, x141, uint64(fiatScalarUint1(x154)))\n\tx157 := ((uint64(fiatScalarUint1(x156)) + (uint64(fiatScalarUint1(x138)) + (uint64(fiatScalarUint1(x130)) + x118))) + x142)\n\tvar x158 uint64\n\tvar x159 uint64\n\tx158, x159 = bits.Sub64(x151, 0x5812631a5cf5d3ed, uint64(0x0))\n\tvar x160 uint64\n\tvar x161 uint64\n\tx160, x161 = bits.Sub64(x153, 0x14def9dea2f79cd6, uint64(fiatScalarUint1(x159)))\n\tvar x162 uint64\n\tvar x163 uint64\n\tx162, x163 = bits.Sub64(x155, uint64(0x0), uint64(fiatScalarUint1(x161)))\n\tvar x164 uint64\n\tvar x165 uint64\n\tx164, x165 = bits.Sub64(x157, 0x1000000000000000, uint64(fiatScalarUint1(x163)))\n\tvar x167 uint64\n\t_, x167 = bits.Sub64(uint64(0x0), uint64(0x0), uint64(fiatScalarUint1(x165)))\n\tvar x168 uint64\n\tfiatScalarCmovznzU64(&x168, fiatScalarUint1(x167), x158, x151)\n\tvar x169 uint64\n\tfiatScalarCmovznzU64(&x169, fiatScalarUint1(x167), x160, x153)\n\tvar x170 uint64\n\tfiatScalarCmovznzU64(&x170, fiatScalarUint1(x167), x162, x155)\n\tvar x171 uint64\n\tfiatScalarCmovznzU64(&x171, fiatScalarUint1(x167), x164, x157)\n\tout1[0] = x168\n\tout1[1] = x169\n\tout1[2] = x170\n\tout1[3] = x171\n}\n\n// fiatScalarToBytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order.\n//\n// Preconditions:\n//\n//\t0 ≤ eval arg1 < m\n//\n// Postconditions:\n//\n//\tout1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31]\n//\n// Input Bounds:\n//\n//\targ1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1fffffffffffffff]]\n//\n// Output Bounds:\n//\n//\tout1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1f]]\nfunc fiatScalarToBytes(out1 *[32]uint8, arg1 *[4]uint64) {\n\tx1 := arg1[3]\n\tx2 := arg1[2]\n\tx3 := arg1[1]\n\tx4 := arg1[0]\n\tx5 := (uint8(x4) & 0xff)\n\tx6 := (x4 >> 8)\n\tx7 := (uint8(x6) & 0xff)\n\tx8 := (x6 >> 8)\n\tx9 := (uint8(x8) & 0xff)\n\tx10 := (x8 >> 8)\n\tx11 := (uint8(x10) & 0xff)\n\tx12 := (x10 >> 8)\n\tx13 := (uint8(x12) & 0xff)\n\tx14 := (x12 >> 8)\n\tx15 := (uint8(x14) & 0xff)\n\tx16 := (x14 >> 8)\n\tx17 := (uint8(x16) & 0xff)\n\tx18 := uint8((x16 >> 8))\n\tx19 := (uint8(x3) & 0xff)\n\tx20 := (x3 >> 8)\n\tx21 := (uint8(x20) & 0xff)\n\tx22 := (x20 >> 8)\n\tx23 := (uint8(x22) & 0xff)\n\tx24 := (x22 >> 8)\n\tx25 := (uint8(x24) & 0xff)\n\tx26 := (x24 >> 8)\n\tx27 := (uint8(x26) & 0xff)\n\tx28 := (x26 >> 8)\n\tx29 := (uint8(x28) & 0xff)\n\tx30 := (x28 >> 8)\n\tx31 := (uint8(x30) & 0xff)\n\tx32 := uint8((x30 >> 8))\n\tx33 := (uint8(x2) & 0xff)\n\tx34 := (x2 >> 8)\n\tx35 := (uint8(x34) & 0xff)\n\tx36 := (x34 >> 8)\n\tx37 := (uint8(x36) & 0xff)\n\tx38 := (x36 >> 8)\n\tx39 := (uint8(x38) & 0xff)\n\tx40 := (x38 >> 8)\n\tx41 := (uint8(x40) & 0xff)\n\tx42 := (x40 >> 8)\n\tx43 := (uint8(x42) & 0xff)\n\tx44 := (x42 >> 8)\n\tx45 := (uint8(x44) & 0xff)\n\tx46 := uint8((x44 >> 8))\n\tx47 := (uint8(x1) & 0xff)\n\tx48 := (x1 >> 8)\n\tx49 := (uint8(x48) & 0xff)\n\tx50 := (x48 >> 8)\n\tx51 := (uint8(x50) & 0xff)\n\tx52 := (x50 >> 8)\n\tx53 := (uint8(x52) & 0xff)\n\tx54 := (x52 >> 8)\n\tx55 := (uint8(x54) & 0xff)\n\tx56 := (x54 >> 8)\n\tx57 := (uint8(x56) & 0xff)\n\tx58 := (x56 >> 8)\n\tx59 := (uint8(x58) & 0xff)\n\tx60 := uint8((x58 >> 8))\n\tout1[0] = x5\n\tout1[1] = x7\n\tout1[2] = x9\n\tout1[3] = x11\n\tout1[4] = x13\n\tout1[5] = x15\n\tout1[6] = x17\n\tout1[7] = x18\n\tout1[8] = x19\n\tout1[9] = x21\n\tout1[10] = x23\n\tout1[11] = x25\n\tout1[12] = x27\n\tout1[13] = x29\n\tout1[14] = x31\n\tout1[15] = x32\n\tout1[16] = x33\n\tout1[17] = x35\n\tout1[18] = x37\n\tout1[19] = x39\n\tout1[20] = x41\n\tout1[21] = x43\n\tout1[22] = x45\n\tout1[23] = x46\n\tout1[24] = x47\n\tout1[25] = x49\n\tout1[26] = x51\n\tout1[27] = x53\n\tout1[28] = x55\n\tout1[29] = x57\n\tout1[30] = x59\n\tout1[31] = x60\n}\n\n// fiatScalarFromBytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order.\n//\n// Preconditions:\n//\n//\t0 ≤ bytes_eval arg1 < m\n//\n// Postconditions:\n//\n//\teval out1 mod m = bytes_eval arg1 mod m\n//\t0 ≤ eval out1 < m\n//\n// Input Bounds:\n//\n//\targ1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1f]]\n//\n// Output Bounds:\n//\n//\tout1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1fffffffffffffff]]\nfunc fiatScalarFromBytes(out1 *[4]uint64, arg1 *[32]uint8) {\n\tx1 := (uint64(arg1[31]) << 56)\n\tx2 := (uint64(arg1[30]) << 48)\n\tx3 := (uint64(arg1[29]) << 40)\n\tx4 := (uint64(arg1[28]) << 32)\n\tx5 := (uint64(arg1[27]) << 24)\n\tx6 := (uint64(arg1[26]) << 16)\n\tx7 := (uint64(arg1[25]) << 8)\n\tx8 := arg1[24]\n\tx9 := (uint64(arg1[23]) << 56)\n\tx10 := (uint64(arg1[22]) << 48)\n\tx11 := (uint64(arg1[21]) << 40)\n\tx12 := (uint64(arg1[20]) << 32)\n\tx13 := (uint64(arg1[19]) << 24)\n\tx14 := (uint64(arg1[18]) << 16)\n\tx15 := (uint64(arg1[17]) << 8)\n\tx16 := arg1[16]\n\tx17 := (uint64(arg1[15]) << 56)\n\tx18 := (uint64(arg1[14]) << 48)\n\tx19 := (uint64(arg1[13]) << 40)\n\tx20 := (uint64(arg1[12]) << 32)\n\tx21 := (uint64(arg1[11]) << 24)\n\tx22 := (uint64(arg1[10]) << 16)\n\tx23 := (uint64(arg1[9]) << 8)\n\tx24 := arg1[8]\n\tx25 := (uint64(arg1[7]) << 56)\n\tx26 := (uint64(arg1[6]) << 48)\n\tx27 := (uint64(arg1[5]) << 40)\n\tx28 := (uint64(arg1[4]) << 32)\n\tx29 := (uint64(arg1[3]) << 24)\n\tx30 := (uint64(arg1[2]) << 16)\n\tx31 := (uint64(arg1[1]) << 8)\n\tx32 := arg1[0]\n\tx33 := (x31 + uint64(x32))\n\tx34 := (x30 + x33)\n\tx35 := (x29 + x34)\n\tx36 := (x28 + x35)\n\tx37 := (x27 + x36)\n\tx38 := (x26 + x37)\n\tx39 := (x25 + x38)\n\tx40 := (x23 + uint64(x24))\n\tx41 := (x22 + x40)\n\tx42 := (x21 + x41)\n\tx43 := (x20 + x42)\n\tx44 := (x19 + x43)\n\tx45 := (x18 + x44)\n\tx46 := (x17 + x45)\n\tx47 := (x15 + uint64(x16))\n\tx48 := (x14 + x47)\n\tx49 := (x13 + x48)\n\tx50 := (x12 + x49)\n\tx51 := (x11 + x50)\n\tx52 := (x10 + x51)\n\tx53 := (x9 + x52)\n\tx54 := (x7 + uint64(x8))\n\tx55 := (x6 + x54)\n\tx56 := (x5 + x55)\n\tx57 := (x4 + x56)\n\tx58 := (x3 + x57)\n\tx59 := (x2 + x58)\n\tx60 := (x1 + x59)\n\tout1[0] = x39\n\tout1[1] = x46\n\tout1[2] = x53\n\tout1[3] = x60\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/scalarmult.go",
    "content": "// Copyright (c) 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage edwards25519\n\nimport \"sync\"\n\n// basepointTable is a set of 32 affineLookupTables, where table i is generated\n// from 256i * basepoint. It is precomputed the first time it's used.\nfunc basepointTable() *[32]affineLookupTable {\n\tbasepointTablePrecomp.initOnce.Do(func() {\n\t\tp := NewGeneratorPoint()\n\t\tfor i := 0; i < 32; i++ {\n\t\t\tbasepointTablePrecomp.table[i].FromP3(p)\n\t\t\tfor j := 0; j < 8; j++ {\n\t\t\t\tp.Add(p, p)\n\t\t\t}\n\t\t}\n\t})\n\treturn &basepointTablePrecomp.table\n}\n\nvar basepointTablePrecomp struct {\n\ttable    [32]affineLookupTable\n\tinitOnce sync.Once\n}\n\n// ScalarBaseMult sets v = x * B, where B is the canonical generator, and\n// returns v.\n//\n// The scalar multiplication is done in constant time.\nfunc (v *Point) ScalarBaseMult(x *Scalar) *Point {\n\tbasepointTable := basepointTable()\n\n\t// Write x = sum(x_i * 16^i) so  x*B = sum( B*x_i*16^i )\n\t// as described in the Ed25519 paper\n\t//\n\t// Group even and odd coefficients\n\t// x*B     = x_0*16^0*B + x_2*16^2*B + ... + x_62*16^62*B\n\t//         + x_1*16^1*B + x_3*16^3*B + ... + x_63*16^63*B\n\t// x*B     = x_0*16^0*B + x_2*16^2*B + ... + x_62*16^62*B\n\t//    + 16*( x_1*16^0*B + x_3*16^2*B + ... + x_63*16^62*B)\n\t//\n\t// We use a lookup table for each i to get x_i*16^(2*i)*B\n\t// and do four doublings to multiply by 16.\n\tdigits := x.signedRadix16()\n\n\tmultiple := &affineCached{}\n\ttmp1 := &projP1xP1{}\n\ttmp2 := &projP2{}\n\n\t// Accumulate the odd components first\n\tv.Set(NewIdentityPoint())\n\tfor i := 1; i < 64; i += 2 {\n\t\tbasepointTable[i/2].SelectInto(multiple, digits[i])\n\t\ttmp1.AddAffine(v, multiple)\n\t\tv.fromP1xP1(tmp1)\n\t}\n\n\t// Multiply by 16\n\ttmp2.FromP3(v)       // tmp2 =    v in P2 coords\n\ttmp1.Double(tmp2)    // tmp1 =  2*v in P1xP1 coords\n\ttmp2.FromP1xP1(tmp1) // tmp2 =  2*v in P2 coords\n\ttmp1.Double(tmp2)    // tmp1 =  4*v in P1xP1 coords\n\ttmp2.FromP1xP1(tmp1) // tmp2 =  4*v in P2 coords\n\ttmp1.Double(tmp2)    // tmp1 =  8*v in P1xP1 coords\n\ttmp2.FromP1xP1(tmp1) // tmp2 =  8*v in P2 coords\n\ttmp1.Double(tmp2)    // tmp1 = 16*v in P1xP1 coords\n\tv.fromP1xP1(tmp1)    // now v = 16*(odd components)\n\n\t// Accumulate the even components\n\tfor i := 0; i < 64; i += 2 {\n\t\tbasepointTable[i/2].SelectInto(multiple, digits[i])\n\t\ttmp1.AddAffine(v, multiple)\n\t\tv.fromP1xP1(tmp1)\n\t}\n\n\treturn v\n}\n\n// ScalarMult sets v = x * q, and returns v.\n//\n// The scalar multiplication is done in constant time.\nfunc (v *Point) ScalarMult(x *Scalar, q *Point) *Point {\n\tcheckInitialized(q)\n\n\tvar table projLookupTable\n\ttable.FromP3(q)\n\n\t// Write x = sum(x_i * 16^i)\n\t// so  x*Q = sum( Q*x_i*16^i )\n\t//         = Q*x_0 + 16*(Q*x_1 + 16*( ... + Q*x_63) ... )\n\t//           <------compute inside out---------\n\t//\n\t// We use the lookup table to get the x_i*Q values\n\t// and do four doublings to compute 16*Q\n\tdigits := x.signedRadix16()\n\n\t// Unwrap first loop iteration to save computing 16*identity\n\tmultiple := &projCached{}\n\ttmp1 := &projP1xP1{}\n\ttmp2 := &projP2{}\n\ttable.SelectInto(multiple, digits[63])\n\n\tv.Set(NewIdentityPoint())\n\ttmp1.Add(v, multiple) // tmp1 = x_63*Q in P1xP1 coords\n\tfor i := 62; i >= 0; i-- {\n\t\ttmp2.FromP1xP1(tmp1) // tmp2 =    (prev) in P2 coords\n\t\ttmp1.Double(tmp2)    // tmp1 =  2*(prev) in P1xP1 coords\n\t\ttmp2.FromP1xP1(tmp1) // tmp2 =  2*(prev) in P2 coords\n\t\ttmp1.Double(tmp2)    // tmp1 =  4*(prev) in P1xP1 coords\n\t\ttmp2.FromP1xP1(tmp1) // tmp2 =  4*(prev) in P2 coords\n\t\ttmp1.Double(tmp2)    // tmp1 =  8*(prev) in P1xP1 coords\n\t\ttmp2.FromP1xP1(tmp1) // tmp2 =  8*(prev) in P2 coords\n\t\ttmp1.Double(tmp2)    // tmp1 = 16*(prev) in P1xP1 coords\n\t\tv.fromP1xP1(tmp1)    //    v = 16*(prev) in P3 coords\n\t\ttable.SelectInto(multiple, digits[i])\n\t\ttmp1.Add(v, multiple) // tmp1 = x_i*Q + 16*(prev) in P1xP1 coords\n\t}\n\tv.fromP1xP1(tmp1)\n\treturn v\n}\n\n// basepointNafTable is the nafLookupTable8 for the basepoint.\n// It is precomputed the first time it's used.\nfunc basepointNafTable() *nafLookupTable8 {\n\tbasepointNafTablePrecomp.initOnce.Do(func() {\n\t\tbasepointNafTablePrecomp.table.FromP3(NewGeneratorPoint())\n\t})\n\treturn &basepointNafTablePrecomp.table\n}\n\nvar basepointNafTablePrecomp struct {\n\ttable    nafLookupTable8\n\tinitOnce sync.Once\n}\n\n// VarTimeDoubleScalarBaseMult sets v = a * A + b * B, where B is the canonical\n// generator, and returns v.\n//\n// Execution time depends on the inputs.\nfunc (v *Point) VarTimeDoubleScalarBaseMult(a *Scalar, A *Point, b *Scalar) *Point {\n\tcheckInitialized(A)\n\n\t// Similarly to the single variable-base approach, we compute\n\t// digits and use them with a lookup table.  However, because\n\t// we are allowed to do variable-time operations, we don't\n\t// need constant-time lookups or constant-time digit\n\t// computations.\n\t//\n\t// So we use a non-adjacent form of some width w instead of\n\t// radix 16.  This is like a binary representation (one digit\n\t// for each binary place) but we allow the digits to grow in\n\t// magnitude up to 2^{w-1} so that the nonzero digits are as\n\t// sparse as possible.  Intuitively, this \"condenses\" the\n\t// \"mass\" of the scalar onto sparse coefficients (meaning\n\t// fewer additions).\n\n\tbasepointNafTable := basepointNafTable()\n\tvar aTable nafLookupTable5\n\taTable.FromP3(A)\n\t// Because the basepoint is fixed, we can use a wider NAF\n\t// corresponding to a bigger table.\n\taNaf := a.nonAdjacentForm(5)\n\tbNaf := b.nonAdjacentForm(8)\n\n\t// Find the first nonzero coefficient.\n\ti := 255\n\tfor j := i; j >= 0; j-- {\n\t\tif aNaf[j] != 0 || bNaf[j] != 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tmultA := &projCached{}\n\tmultB := &affineCached{}\n\ttmp1 := &projP1xP1{}\n\ttmp2 := &projP2{}\n\ttmp2.Zero()\n\n\t// Move from high to low bits, doubling the accumulator\n\t// at each iteration and checking whether there is a nonzero\n\t// coefficient to look up a multiple of.\n\tfor ; i >= 0; i-- {\n\t\ttmp1.Double(tmp2)\n\n\t\t// Only update v if we have a nonzero coeff to add in.\n\t\tif aNaf[i] > 0 {\n\t\t\tv.fromP1xP1(tmp1)\n\t\t\taTable.SelectInto(multA, aNaf[i])\n\t\t\ttmp1.Add(v, multA)\n\t\t} else if aNaf[i] < 0 {\n\t\t\tv.fromP1xP1(tmp1)\n\t\t\taTable.SelectInto(multA, -aNaf[i])\n\t\t\ttmp1.Sub(v, multA)\n\t\t}\n\n\t\tif bNaf[i] > 0 {\n\t\t\tv.fromP1xP1(tmp1)\n\t\t\tbasepointNafTable.SelectInto(multB, bNaf[i])\n\t\t\ttmp1.AddAffine(v, multB)\n\t\t} else if bNaf[i] < 0 {\n\t\t\tv.fromP1xP1(tmp1)\n\t\t\tbasepointNafTable.SelectInto(multB, -bNaf[i])\n\t\t\ttmp1.SubAffine(v, multB)\n\t\t}\n\n\t\ttmp2.FromP1xP1(tmp1)\n\t}\n\n\tv.fromP2(tmp2)\n\treturn v\n}\n"
  },
  {
    "path": "vendor/filippo.io/edwards25519/tables.go",
    "content": "// Copyright (c) 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage edwards25519\n\nimport (\n\t\"crypto/subtle\"\n)\n\n// A dynamic lookup table for variable-base, constant-time scalar muls.\ntype projLookupTable struct {\n\tpoints [8]projCached\n}\n\n// A precomputed lookup table for fixed-base, constant-time scalar muls.\ntype affineLookupTable struct {\n\tpoints [8]affineCached\n}\n\n// A dynamic lookup table for variable-base, variable-time scalar muls.\ntype nafLookupTable5 struct {\n\tpoints [8]projCached\n}\n\n// A precomputed lookup table for fixed-base, variable-time scalar muls.\ntype nafLookupTable8 struct {\n\tpoints [64]affineCached\n}\n\n// Constructors.\n\n// Builds a lookup table at runtime. Fast.\nfunc (v *projLookupTable) FromP3(q *Point) {\n\t// Goal: v.points[i] = (i+1)*Q, i.e., Q, 2Q, ..., 8Q\n\t// This allows lookup of -8Q, ..., -Q, 0, Q, ..., 8Q\n\tv.points[0].FromP3(q)\n\ttmpP3 := Point{}\n\ttmpP1xP1 := projP1xP1{}\n\tfor i := 0; i < 7; i++ {\n\t\t// Compute (i+1)*Q as Q + i*Q and convert to a projCached\n\t\t// This is needlessly complicated because the API has explicit\n\t\t// receivers instead of creating stack objects and relying on RVO\n\t\tv.points[i+1].FromP3(tmpP3.fromP1xP1(tmpP1xP1.Add(q, &v.points[i])))\n\t}\n}\n\n// This is not optimised for speed; fixed-base tables should be precomputed.\nfunc (v *affineLookupTable) FromP3(q *Point) {\n\t// Goal: v.points[i] = (i+1)*Q, i.e., Q, 2Q, ..., 8Q\n\t// This allows lookup of -8Q, ..., -Q, 0, Q, ..., 8Q\n\tv.points[0].FromP3(q)\n\ttmpP3 := Point{}\n\ttmpP1xP1 := projP1xP1{}\n\tfor i := 0; i < 7; i++ {\n\t\t// Compute (i+1)*Q as Q + i*Q and convert to affineCached\n\t\tv.points[i+1].FromP3(tmpP3.fromP1xP1(tmpP1xP1.AddAffine(q, &v.points[i])))\n\t}\n}\n\n// Builds a lookup table at runtime. Fast.\nfunc (v *nafLookupTable5) FromP3(q *Point) {\n\t// Goal: v.points[i] = (2*i+1)*Q, i.e., Q, 3Q, 5Q, ..., 15Q\n\t// This allows lookup of -15Q, ..., -3Q, -Q, 0, Q, 3Q, ..., 15Q\n\tv.points[0].FromP3(q)\n\tq2 := Point{}\n\tq2.Add(q, q)\n\ttmpP3 := Point{}\n\ttmpP1xP1 := projP1xP1{}\n\tfor i := 0; i < 7; i++ {\n\t\tv.points[i+1].FromP3(tmpP3.fromP1xP1(tmpP1xP1.Add(&q2, &v.points[i])))\n\t}\n}\n\n// This is not optimised for speed; fixed-base tables should be precomputed.\nfunc (v *nafLookupTable8) FromP3(q *Point) {\n\tv.points[0].FromP3(q)\n\tq2 := Point{}\n\tq2.Add(q, q)\n\ttmpP3 := Point{}\n\ttmpP1xP1 := projP1xP1{}\n\tfor i := 0; i < 63; i++ {\n\t\tv.points[i+1].FromP3(tmpP3.fromP1xP1(tmpP1xP1.AddAffine(&q2, &v.points[i])))\n\t}\n}\n\n// Selectors.\n\n// Set dest to x*Q, where -8 <= x <= 8, in constant time.\nfunc (v *projLookupTable) SelectInto(dest *projCached, x int8) {\n\t// Compute xabs = |x|\n\txmask := x >> 7\n\txabs := uint8((x + xmask) ^ xmask)\n\n\tdest.Zero()\n\tfor j := 1; j <= 8; j++ {\n\t\t// Set dest = j*Q if |x| = j\n\t\tcond := subtle.ConstantTimeByteEq(xabs, uint8(j))\n\t\tdest.Select(&v.points[j-1], dest, cond)\n\t}\n\t// Now dest = |x|*Q, conditionally negate to get x*Q\n\tdest.CondNeg(int(xmask & 1))\n}\n\n// Set dest to x*Q, where -8 <= x <= 8, in constant time.\nfunc (v *affineLookupTable) SelectInto(dest *affineCached, x int8) {\n\t// Compute xabs = |x|\n\txmask := x >> 7\n\txabs := uint8((x + xmask) ^ xmask)\n\n\tdest.Zero()\n\tfor j := 1; j <= 8; j++ {\n\t\t// Set dest = j*Q if |x| = j\n\t\tcond := subtle.ConstantTimeByteEq(xabs, uint8(j))\n\t\tdest.Select(&v.points[j-1], dest, cond)\n\t}\n\t// Now dest = |x|*Q, conditionally negate to get x*Q\n\tdest.CondNeg(int(xmask & 1))\n}\n\n// Given odd x with 0 < x < 2^4, return x*Q (in variable time).\nfunc (v *nafLookupTable5) SelectInto(dest *projCached, x int8) {\n\t*dest = v.points[x/2]\n}\n\n// Given odd x with 0 < x < 2^7, return x*Q (in variable time).\nfunc (v *nafLookupTable8) SelectInto(dest *affineCached, x int8) {\n\t*dest = v.points[x/2]\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Microsoft Corporation\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": "vendor/github.com/Azure/go-ansiterm/README.md",
    "content": "# go-ansiterm\n\nThis is a cross platform Ansi Terminal Emulation library.  It reads a stream of Ansi characters and produces the appropriate function calls.  The results of the function calls are platform dependent.\n\nFor example the parser might receive \"ESC, [, A\" as a stream of three characters.  This is the code for Cursor Up (http://www.vt100.net/docs/vt510-rm/CUU).  The parser then calls the cursor up function (CUU()) on an event handler.  The event handler determines what platform specific work must be done to cause the cursor to move up one position.\n\nThe parser (parser.go) is a partial implementation of this state machine (http://vt100.net/emu/vt500_parser.png).  There are also two event handler implementations, one for tests (test_event_handler.go) to validate that the expected events are being produced and called, the other is a Windows implementation (winterm/win_event_handler.go).\n\nSee parser_test.go for examples exercising the state machine and generating appropriate function calls.\n\n-----\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/constants.go",
    "content": "package ansiterm\n\nconst LogEnv = \"DEBUG_TERMINAL\"\n\n// ANSI constants\n// References:\n// -- http://www.ecma-international.org/publications/standards/Ecma-048.htm\n// -- http://man7.org/linux/man-pages/man4/console_codes.4.html\n// -- http://manpages.ubuntu.com/manpages/intrepid/man4/console_codes.4.html\n// -- http://en.wikipedia.org/wiki/ANSI_escape_code\n// -- http://vt100.net/emu/dec_ansi_parser\n// -- http://vt100.net/emu/vt500_parser.svg\n// -- http://invisible-island.net/xterm/ctlseqs/ctlseqs.html\n// -- http://www.inwap.com/pdp10/ansicode.txt\nconst (\n\t// ECMA-48 Set Graphics Rendition\n\t// Note:\n\t// -- Constants leading with an underscore (e.g., _ANSI_xxx) are unsupported or reserved\n\t// -- Fonts could possibly be supported via SetCurrentConsoleFontEx\n\t// -- Windows does not expose the per-window cursor (i.e., caret) blink times\n\tANSI_SGR_RESET              = 0\n\tANSI_SGR_BOLD               = 1\n\tANSI_SGR_DIM                = 2\n\t_ANSI_SGR_ITALIC            = 3\n\tANSI_SGR_UNDERLINE          = 4\n\t_ANSI_SGR_BLINKSLOW         = 5\n\t_ANSI_SGR_BLINKFAST         = 6\n\tANSI_SGR_REVERSE            = 7\n\t_ANSI_SGR_INVISIBLE         = 8\n\t_ANSI_SGR_LINETHROUGH       = 9\n\t_ANSI_SGR_FONT_00           = 10\n\t_ANSI_SGR_FONT_01           = 11\n\t_ANSI_SGR_FONT_02           = 12\n\t_ANSI_SGR_FONT_03           = 13\n\t_ANSI_SGR_FONT_04           = 14\n\t_ANSI_SGR_FONT_05           = 15\n\t_ANSI_SGR_FONT_06           = 16\n\t_ANSI_SGR_FONT_07           = 17\n\t_ANSI_SGR_FONT_08           = 18\n\t_ANSI_SGR_FONT_09           = 19\n\t_ANSI_SGR_FONT_10           = 20\n\t_ANSI_SGR_DOUBLEUNDERLINE   = 21\n\tANSI_SGR_BOLD_DIM_OFF       = 22\n\t_ANSI_SGR_ITALIC_OFF        = 23\n\tANSI_SGR_UNDERLINE_OFF      = 24\n\t_ANSI_SGR_BLINK_OFF         = 25\n\t_ANSI_SGR_RESERVED_00       = 26\n\tANSI_SGR_REVERSE_OFF        = 27\n\t_ANSI_SGR_INVISIBLE_OFF     = 28\n\t_ANSI_SGR_LINETHROUGH_OFF   = 29\n\tANSI_SGR_FOREGROUND_BLACK   = 30\n\tANSI_SGR_FOREGROUND_RED     = 31\n\tANSI_SGR_FOREGROUND_GREEN   = 32\n\tANSI_SGR_FOREGROUND_YELLOW  = 33\n\tANSI_SGR_FOREGROUND_BLUE    = 34\n\tANSI_SGR_FOREGROUND_MAGENTA = 35\n\tANSI_SGR_FOREGROUND_CYAN    = 36\n\tANSI_SGR_FOREGROUND_WHITE   = 37\n\t_ANSI_SGR_RESERVED_01       = 38\n\tANSI_SGR_FOREGROUND_DEFAULT = 39\n\tANSI_SGR_BACKGROUND_BLACK   = 40\n\tANSI_SGR_BACKGROUND_RED     = 41\n\tANSI_SGR_BACKGROUND_GREEN   = 42\n\tANSI_SGR_BACKGROUND_YELLOW  = 43\n\tANSI_SGR_BACKGROUND_BLUE    = 44\n\tANSI_SGR_BACKGROUND_MAGENTA = 45\n\tANSI_SGR_BACKGROUND_CYAN    = 46\n\tANSI_SGR_BACKGROUND_WHITE   = 47\n\t_ANSI_SGR_RESERVED_02       = 48\n\tANSI_SGR_BACKGROUND_DEFAULT = 49\n\t// 50 - 65: Unsupported\n\n\tANSI_MAX_CMD_LENGTH = 4096\n\n\tMAX_INPUT_EVENTS = 128\n\tDEFAULT_WIDTH    = 80\n\tDEFAULT_HEIGHT   = 24\n\n\tANSI_BEL              = 0x07\n\tANSI_BACKSPACE        = 0x08\n\tANSI_TAB              = 0x09\n\tANSI_LINE_FEED        = 0x0A\n\tANSI_VERTICAL_TAB     = 0x0B\n\tANSI_FORM_FEED        = 0x0C\n\tANSI_CARRIAGE_RETURN  = 0x0D\n\tANSI_ESCAPE_PRIMARY   = 0x1B\n\tANSI_ESCAPE_SECONDARY = 0x5B\n\tANSI_OSC_STRING_ENTRY = 0x5D\n\tANSI_COMMAND_FIRST    = 0x40\n\tANSI_COMMAND_LAST     = 0x7E\n\tDCS_ENTRY             = 0x90\n\tCSI_ENTRY             = 0x9B\n\tOSC_STRING            = 0x9D\n\tANSI_PARAMETER_SEP    = \";\"\n\tANSI_CMD_G0           = '('\n\tANSI_CMD_G1           = ')'\n\tANSI_CMD_G2           = '*'\n\tANSI_CMD_G3           = '+'\n\tANSI_CMD_DECPNM       = '>'\n\tANSI_CMD_DECPAM       = '='\n\tANSI_CMD_OSC          = ']'\n\tANSI_CMD_STR_TERM     = '\\\\'\n\n\tKEY_CONTROL_PARAM_2 = \";2\"\n\tKEY_CONTROL_PARAM_3 = \";3\"\n\tKEY_CONTROL_PARAM_4 = \";4\"\n\tKEY_CONTROL_PARAM_5 = \";5\"\n\tKEY_CONTROL_PARAM_6 = \";6\"\n\tKEY_CONTROL_PARAM_7 = \";7\"\n\tKEY_CONTROL_PARAM_8 = \";8\"\n\tKEY_ESC_CSI         = \"\\x1B[\"\n\tKEY_ESC_N           = \"\\x1BN\"\n\tKEY_ESC_O           = \"\\x1BO\"\n\n\tFILL_CHARACTER = ' '\n)\n\nfunc getByteRange(start byte, end byte) []byte {\n\tbytes := make([]byte, 0, 32)\n\tfor i := start; i <= end; i++ {\n\t\tbytes = append(bytes, byte(i))\n\t}\n\n\treturn bytes\n}\n\nvar toGroundBytes = getToGroundBytes()\nvar executors = getExecuteBytes()\n\n// SPACE\t\t  20+A0 hex  Always and everywhere a blank space\n// Intermediate\t  20-2F hex   !\"#$%&'()*+,-./\nvar intermeds = getByteRange(0x20, 0x2F)\n\n// Parameters\t  30-3F hex  0123456789:;<=>?\n// CSI Parameters 30-39, 3B hex 0123456789;\nvar csiParams = getByteRange(0x30, 0x3F)\n\nvar csiCollectables = append(getByteRange(0x30, 0x39), getByteRange(0x3B, 0x3F)...)\n\n// Uppercase\t  40-5F hex  @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\nvar upperCase = getByteRange(0x40, 0x5F)\n\n// Lowercase\t  60-7E hex  `abcdefghijlkmnopqrstuvwxyz{|}~\nvar lowerCase = getByteRange(0x60, 0x7E)\n\n// Alphabetics\t  40-7E hex  (all of upper and lower case)\nvar alphabetics = append(upperCase, lowerCase...)\n\nvar printables = getByteRange(0x20, 0x7F)\n\nvar escapeIntermediateToGroundBytes = getByteRange(0x30, 0x7E)\nvar escapeToGroundBytes = getEscapeToGroundBytes()\n\n// See http://www.vt100.net/emu/vt500_parser.png for description of the complex\n// byte ranges below\n\nfunc getEscapeToGroundBytes() []byte {\n\tescapeToGroundBytes := getByteRange(0x30, 0x4F)\n\tescapeToGroundBytes = append(escapeToGroundBytes, getByteRange(0x51, 0x57)...)\n\tescapeToGroundBytes = append(escapeToGroundBytes, 0x59)\n\tescapeToGroundBytes = append(escapeToGroundBytes, 0x5A)\n\tescapeToGroundBytes = append(escapeToGroundBytes, 0x5C)\n\tescapeToGroundBytes = append(escapeToGroundBytes, getByteRange(0x60, 0x7E)...)\n\treturn escapeToGroundBytes\n}\n\nfunc getExecuteBytes() []byte {\n\texecuteBytes := getByteRange(0x00, 0x17)\n\texecuteBytes = append(executeBytes, 0x19)\n\texecuteBytes = append(executeBytes, getByteRange(0x1C, 0x1F)...)\n\treturn executeBytes\n}\n\nfunc getToGroundBytes() []byte {\n\tgroundBytes := []byte{0x18}\n\tgroundBytes = append(groundBytes, 0x1A)\n\tgroundBytes = append(groundBytes, getByteRange(0x80, 0x8F)...)\n\tgroundBytes = append(groundBytes, getByteRange(0x91, 0x97)...)\n\tgroundBytes = append(groundBytes, 0x99)\n\tgroundBytes = append(groundBytes, 0x9A)\n\tgroundBytes = append(groundBytes, 0x9C)\n\treturn groundBytes\n}\n\n// Delete\t\t     7F hex  Always and everywhere ignored\n// C1 Control\t  80-9F hex  32 additional control characters\n// G1 Displayable A1-FE hex  94 additional displayable characters\n// Special\t\t  A0+FF hex  Same as SPACE and DELETE\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/context.go",
    "content": "package ansiterm\n\ntype ansiContext struct {\n\tcurrentChar byte\n\tparamBuffer []byte\n\tinterBuffer []byte\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/csi_entry_state.go",
    "content": "package ansiterm\n\ntype csiEntryState struct {\n\tbaseState\n}\n\nfunc (csiState csiEntryState) Handle(b byte) (s state, e error) {\n\tcsiState.parser.logf(\"CsiEntry::Handle %#x\", b)\n\n\tnextState, err := csiState.baseState.Handle(b)\n\tif nextState != nil || err != nil {\n\t\treturn nextState, err\n\t}\n\n\tswitch {\n\tcase sliceContains(alphabetics, b):\n\t\treturn csiState.parser.ground, nil\n\tcase sliceContains(csiCollectables, b):\n\t\treturn csiState.parser.csiParam, nil\n\tcase sliceContains(executors, b):\n\t\treturn csiState, csiState.parser.execute()\n\t}\n\n\treturn csiState, nil\n}\n\nfunc (csiState csiEntryState) Transition(s state) error {\n\tcsiState.parser.logf(\"CsiEntry::Transition %s --> %s\", csiState.Name(), s.Name())\n\tcsiState.baseState.Transition(s)\n\n\tswitch s {\n\tcase csiState.parser.ground:\n\t\treturn csiState.parser.csiDispatch()\n\tcase csiState.parser.csiParam:\n\t\tswitch {\n\t\tcase sliceContains(csiParams, csiState.parser.context.currentChar):\n\t\t\tcsiState.parser.collectParam()\n\t\tcase sliceContains(intermeds, csiState.parser.context.currentChar):\n\t\t\tcsiState.parser.collectInter()\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (csiState csiEntryState) Enter() error {\n\tcsiState.parser.clear()\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/csi_param_state.go",
    "content": "package ansiterm\n\ntype csiParamState struct {\n\tbaseState\n}\n\nfunc (csiState csiParamState) Handle(b byte) (s state, e error) {\n\tcsiState.parser.logf(\"CsiParam::Handle %#x\", b)\n\n\tnextState, err := csiState.baseState.Handle(b)\n\tif nextState != nil || err != nil {\n\t\treturn nextState, err\n\t}\n\n\tswitch {\n\tcase sliceContains(alphabetics, b):\n\t\treturn csiState.parser.ground, nil\n\tcase sliceContains(csiCollectables, b):\n\t\tcsiState.parser.collectParam()\n\t\treturn csiState, nil\n\tcase sliceContains(executors, b):\n\t\treturn csiState, csiState.parser.execute()\n\t}\n\n\treturn csiState, nil\n}\n\nfunc (csiState csiParamState) Transition(s state) error {\n\tcsiState.parser.logf(\"CsiParam::Transition %s --> %s\", csiState.Name(), s.Name())\n\tcsiState.baseState.Transition(s)\n\n\tswitch s {\n\tcase csiState.parser.ground:\n\t\treturn csiState.parser.csiDispatch()\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go",
    "content": "package ansiterm\n\ntype escapeIntermediateState struct {\n\tbaseState\n}\n\nfunc (escState escapeIntermediateState) Handle(b byte) (s state, e error) {\n\tescState.parser.logf(\"escapeIntermediateState::Handle %#x\", b)\n\tnextState, err := escState.baseState.Handle(b)\n\tif nextState != nil || err != nil {\n\t\treturn nextState, err\n\t}\n\n\tswitch {\n\tcase sliceContains(intermeds, b):\n\t\treturn escState, escState.parser.collectInter()\n\tcase sliceContains(executors, b):\n\t\treturn escState, escState.parser.execute()\n\tcase sliceContains(escapeIntermediateToGroundBytes, b):\n\t\treturn escState.parser.ground, nil\n\t}\n\n\treturn escState, nil\n}\n\nfunc (escState escapeIntermediateState) Transition(s state) error {\n\tescState.parser.logf(\"escapeIntermediateState::Transition %s --> %s\", escState.Name(), s.Name())\n\tescState.baseState.Transition(s)\n\n\tswitch s {\n\tcase escState.parser.ground:\n\t\treturn escState.parser.escDispatch()\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/escape_state.go",
    "content": "package ansiterm\n\ntype escapeState struct {\n\tbaseState\n}\n\nfunc (escState escapeState) Handle(b byte) (s state, e error) {\n\tescState.parser.logf(\"escapeState::Handle %#x\", b)\n\tnextState, err := escState.baseState.Handle(b)\n\tif nextState != nil || err != nil {\n\t\treturn nextState, err\n\t}\n\n\tswitch {\n\tcase b == ANSI_ESCAPE_SECONDARY:\n\t\treturn escState.parser.csiEntry, nil\n\tcase b == ANSI_OSC_STRING_ENTRY:\n\t\treturn escState.parser.oscString, nil\n\tcase sliceContains(executors, b):\n\t\treturn escState, escState.parser.execute()\n\tcase sliceContains(escapeToGroundBytes, b):\n\t\treturn escState.parser.ground, nil\n\tcase sliceContains(intermeds, b):\n\t\treturn escState.parser.escapeIntermediate, nil\n\t}\n\n\treturn escState, nil\n}\n\nfunc (escState escapeState) Transition(s state) error {\n\tescState.parser.logf(\"Escape::Transition %s --> %s\", escState.Name(), s.Name())\n\tescState.baseState.Transition(s)\n\n\tswitch s {\n\tcase escState.parser.ground:\n\t\treturn escState.parser.escDispatch()\n\tcase escState.parser.escapeIntermediate:\n\t\treturn escState.parser.collectInter()\n\t}\n\n\treturn nil\n}\n\nfunc (escState escapeState) Enter() error {\n\tescState.parser.clear()\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/event_handler.go",
    "content": "package ansiterm\n\ntype AnsiEventHandler interface {\n\t// Print\n\tPrint(b byte) error\n\n\t// Execute C0 commands\n\tExecute(b byte) error\n\n\t// CUrsor Up\n\tCUU(int) error\n\n\t// CUrsor Down\n\tCUD(int) error\n\n\t// CUrsor Forward\n\tCUF(int) error\n\n\t// CUrsor Backward\n\tCUB(int) error\n\n\t// Cursor to Next Line\n\tCNL(int) error\n\n\t// Cursor to Previous Line\n\tCPL(int) error\n\n\t// Cursor Horizontal position Absolute\n\tCHA(int) error\n\n\t// Vertical line Position Absolute\n\tVPA(int) error\n\n\t// CUrsor Position\n\tCUP(int, int) error\n\n\t// Horizontal and Vertical Position (depends on PUM)\n\tHVP(int, int) error\n\n\t// Text Cursor Enable Mode\n\tDECTCEM(bool) error\n\n\t// Origin Mode\n\tDECOM(bool) error\n\n\t// 132 Column Mode\n\tDECCOLM(bool) error\n\n\t// Erase in Display\n\tED(int) error\n\n\t// Erase in Line\n\tEL(int) error\n\n\t// Insert Line\n\tIL(int) error\n\n\t// Delete Line\n\tDL(int) error\n\n\t// Insert Character\n\tICH(int) error\n\n\t// Delete Character\n\tDCH(int) error\n\n\t// Set Graphics Rendition\n\tSGR([]int) error\n\n\t// Pan Down\n\tSU(int) error\n\n\t// Pan Up\n\tSD(int) error\n\n\t// Device Attributes\n\tDA([]string) error\n\n\t// Set Top and Bottom Margins\n\tDECSTBM(int, int) error\n\n\t// Index\n\tIND() error\n\n\t// Reverse Index\n\tRI() error\n\n\t// Flush updates from previous commands\n\tFlush() error\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/ground_state.go",
    "content": "package ansiterm\n\ntype groundState struct {\n\tbaseState\n}\n\nfunc (gs groundState) Handle(b byte) (s state, e error) {\n\tgs.parser.context.currentChar = b\n\n\tnextState, err := gs.baseState.Handle(b)\n\tif nextState != nil || err != nil {\n\t\treturn nextState, err\n\t}\n\n\tswitch {\n\tcase sliceContains(printables, b):\n\t\treturn gs, gs.parser.print()\n\n\tcase sliceContains(executors, b):\n\t\treturn gs, gs.parser.execute()\n\t}\n\n\treturn gs, nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/osc_string_state.go",
    "content": "package ansiterm\n\ntype oscStringState struct {\n\tbaseState\n}\n\nfunc (oscState oscStringState) Handle(b byte) (s state, e error) {\n\toscState.parser.logf(\"OscString::Handle %#x\", b)\n\tnextState, err := oscState.baseState.Handle(b)\n\tif nextState != nil || err != nil {\n\t\treturn nextState, err\n\t}\n\n\tswitch {\n\tcase isOscStringTerminator(b):\n\t\treturn oscState.parser.ground, nil\n\t}\n\n\treturn oscState, nil\n}\n\n// See below for OSC string terminators for linux\n// http://man7.org/linux/man-pages/man4/console_codes.4.html\nfunc isOscStringTerminator(b byte) bool {\n\n\tif b == ANSI_BEL || b == 0x5C {\n\t\treturn true\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/parser.go",
    "content": "package ansiterm\n\nimport (\n\t\"errors\"\n\t\"log\"\n\t\"os\"\n)\n\ntype AnsiParser struct {\n\tcurrState          state\n\teventHandler       AnsiEventHandler\n\tcontext            *ansiContext\n\tcsiEntry           state\n\tcsiParam           state\n\tdcsEntry           state\n\tescape             state\n\tescapeIntermediate state\n\terror              state\n\tground             state\n\toscString          state\n\tstateMap           []state\n\n\tlogf func(string, ...interface{})\n}\n\ntype Option func(*AnsiParser)\n\nfunc WithLogf(f func(string, ...interface{})) Option {\n\treturn func(ap *AnsiParser) {\n\t\tap.logf = f\n\t}\n}\n\nfunc CreateParser(initialState string, evtHandler AnsiEventHandler, opts ...Option) *AnsiParser {\n\tap := &AnsiParser{\n\t\teventHandler: evtHandler,\n\t\tcontext:      &ansiContext{},\n\t}\n\tfor _, o := range opts {\n\t\to(ap)\n\t}\n\n\tif isDebugEnv := os.Getenv(LogEnv); isDebugEnv == \"1\" {\n\t\tlogFile, _ := os.Create(\"ansiParser.log\")\n\t\tlogger := log.New(logFile, \"\", log.LstdFlags)\n\t\tif ap.logf != nil {\n\t\t\tl := ap.logf\n\t\t\tap.logf = func(s string, v ...interface{}) {\n\t\t\t\tl(s, v...)\n\t\t\t\tlogger.Printf(s, v...)\n\t\t\t}\n\t\t} else {\n\t\t\tap.logf = logger.Printf\n\t\t}\n\t}\n\n\tif ap.logf == nil {\n\t\tap.logf = func(string, ...interface{}) {}\n\t}\n\n\tap.csiEntry = csiEntryState{baseState{name: \"CsiEntry\", parser: ap}}\n\tap.csiParam = csiParamState{baseState{name: \"CsiParam\", parser: ap}}\n\tap.dcsEntry = dcsEntryState{baseState{name: \"DcsEntry\", parser: ap}}\n\tap.escape = escapeState{baseState{name: \"Escape\", parser: ap}}\n\tap.escapeIntermediate = escapeIntermediateState{baseState{name: \"EscapeIntermediate\", parser: ap}}\n\tap.error = errorState{baseState{name: \"Error\", parser: ap}}\n\tap.ground = groundState{baseState{name: \"Ground\", parser: ap}}\n\tap.oscString = oscStringState{baseState{name: \"OscString\", parser: ap}}\n\n\tap.stateMap = []state{\n\t\tap.csiEntry,\n\t\tap.csiParam,\n\t\tap.dcsEntry,\n\t\tap.escape,\n\t\tap.escapeIntermediate,\n\t\tap.error,\n\t\tap.ground,\n\t\tap.oscString,\n\t}\n\n\tap.currState = getState(initialState, ap.stateMap)\n\n\tap.logf(\"CreateParser: parser %p\", ap)\n\treturn ap\n}\n\nfunc getState(name string, states []state) state {\n\tfor _, el := range states {\n\t\tif el.Name() == name {\n\t\t\treturn el\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (ap *AnsiParser) Parse(bytes []byte) (int, error) {\n\tfor i, b := range bytes {\n\t\tif err := ap.handle(b); err != nil {\n\t\t\treturn i, err\n\t\t}\n\t}\n\n\treturn len(bytes), ap.eventHandler.Flush()\n}\n\nfunc (ap *AnsiParser) handle(b byte) error {\n\tap.context.currentChar = b\n\tnewState, err := ap.currState.Handle(b)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif newState == nil {\n\t\tap.logf(\"WARNING: newState is nil\")\n\t\treturn errors.New(\"New state of 'nil' is invalid.\")\n\t}\n\n\tif newState != ap.currState {\n\t\tif err := ap.changeState(newState); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (ap *AnsiParser) changeState(newState state) error {\n\tap.logf(\"ChangeState %s --> %s\", ap.currState.Name(), newState.Name())\n\n\t// Exit old state\n\tif err := ap.currState.Exit(); err != nil {\n\t\tap.logf(\"Exit state '%s' failed with : '%v'\", ap.currState.Name(), err)\n\t\treturn err\n\t}\n\n\t// Perform transition action\n\tif err := ap.currState.Transition(newState); err != nil {\n\t\tap.logf(\"Transition from '%s' to '%s' failed with: '%v'\", ap.currState.Name(), newState.Name, err)\n\t\treturn err\n\t}\n\n\t// Enter new state\n\tif err := newState.Enter(); err != nil {\n\t\tap.logf(\"Enter state '%s' failed with: '%v'\", newState.Name(), err)\n\t\treturn err\n\t}\n\n\tap.currState = newState\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go",
    "content": "package ansiterm\n\nimport (\n\t\"strconv\"\n)\n\nfunc parseParams(bytes []byte) ([]string, error) {\n\tparamBuff := make([]byte, 0, 0)\n\tparams := []string{}\n\n\tfor _, v := range bytes {\n\t\tif v == ';' {\n\t\t\tif len(paramBuff) > 0 {\n\t\t\t\t// Completed parameter, append it to the list\n\t\t\t\ts := string(paramBuff)\n\t\t\t\tparams = append(params, s)\n\t\t\t\tparamBuff = make([]byte, 0, 0)\n\t\t\t}\n\t\t} else {\n\t\t\tparamBuff = append(paramBuff, v)\n\t\t}\n\t}\n\n\t// Last parameter may not be terminated with ';'\n\tif len(paramBuff) > 0 {\n\t\ts := string(paramBuff)\n\t\tparams = append(params, s)\n\t}\n\n\treturn params, nil\n}\n\nfunc parseCmd(context ansiContext) (string, error) {\n\treturn string(context.currentChar), nil\n}\n\nfunc getInt(params []string, dflt int) int {\n\ti := getInts(params, 1, dflt)[0]\n\treturn i\n}\n\nfunc getInts(params []string, minCount int, dflt int) []int {\n\tints := []int{}\n\n\tfor _, v := range params {\n\t\ti, _ := strconv.Atoi(v)\n\t\t// Zero is mapped to the default value in VT100.\n\t\tif i == 0 {\n\t\t\ti = dflt\n\t\t}\n\t\tints = append(ints, i)\n\t}\n\n\tif len(ints) < minCount {\n\t\tremaining := minCount - len(ints)\n\t\tfor i := 0; i < remaining; i++ {\n\t\t\tints = append(ints, dflt)\n\t\t}\n\t}\n\n\treturn ints\n}\n\nfunc (ap *AnsiParser) modeDispatch(param string, set bool) error {\n\tswitch param {\n\tcase \"?3\":\n\t\treturn ap.eventHandler.DECCOLM(set)\n\tcase \"?6\":\n\t\treturn ap.eventHandler.DECOM(set)\n\tcase \"?25\":\n\t\treturn ap.eventHandler.DECTCEM(set)\n\t}\n\treturn nil\n}\n\nfunc (ap *AnsiParser) hDispatch(params []string) error {\n\tif len(params) == 1 {\n\t\treturn ap.modeDispatch(params[0], true)\n\t}\n\n\treturn nil\n}\n\nfunc (ap *AnsiParser) lDispatch(params []string) error {\n\tif len(params) == 1 {\n\t\treturn ap.modeDispatch(params[0], false)\n\t}\n\n\treturn nil\n}\n\nfunc getEraseParam(params []string) int {\n\tparam := getInt(params, 0)\n\tif param < 0 || 3 < param {\n\t\tparam = 0\n\t}\n\n\treturn param\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/parser_actions.go",
    "content": "package ansiterm\n\nfunc (ap *AnsiParser) collectParam() error {\n\tcurrChar := ap.context.currentChar\n\tap.logf(\"collectParam %#x\", currChar)\n\tap.context.paramBuffer = append(ap.context.paramBuffer, currChar)\n\treturn nil\n}\n\nfunc (ap *AnsiParser) collectInter() error {\n\tcurrChar := ap.context.currentChar\n\tap.logf(\"collectInter %#x\", currChar)\n\tap.context.paramBuffer = append(ap.context.interBuffer, currChar)\n\treturn nil\n}\n\nfunc (ap *AnsiParser) escDispatch() error {\n\tcmd, _ := parseCmd(*ap.context)\n\tintermeds := ap.context.interBuffer\n\tap.logf(\"escDispatch currentChar: %#x\", ap.context.currentChar)\n\tap.logf(\"escDispatch: %v(%v)\", cmd, intermeds)\n\n\tswitch cmd {\n\tcase \"D\": // IND\n\t\treturn ap.eventHandler.IND()\n\tcase \"E\": // NEL, equivalent to CRLF\n\t\terr := ap.eventHandler.Execute(ANSI_CARRIAGE_RETURN)\n\t\tif err == nil {\n\t\t\terr = ap.eventHandler.Execute(ANSI_LINE_FEED)\n\t\t}\n\t\treturn err\n\tcase \"M\": // RI\n\t\treturn ap.eventHandler.RI()\n\t}\n\n\treturn nil\n}\n\nfunc (ap *AnsiParser) csiDispatch() error {\n\tcmd, _ := parseCmd(*ap.context)\n\tparams, _ := parseParams(ap.context.paramBuffer)\n\tap.logf(\"Parsed params: %v with length: %d\", params, len(params))\n\n\tap.logf(\"csiDispatch: %v(%v)\", cmd, params)\n\n\tswitch cmd {\n\tcase \"@\":\n\t\treturn ap.eventHandler.ICH(getInt(params, 1))\n\tcase \"A\":\n\t\treturn ap.eventHandler.CUU(getInt(params, 1))\n\tcase \"B\":\n\t\treturn ap.eventHandler.CUD(getInt(params, 1))\n\tcase \"C\":\n\t\treturn ap.eventHandler.CUF(getInt(params, 1))\n\tcase \"D\":\n\t\treturn ap.eventHandler.CUB(getInt(params, 1))\n\tcase \"E\":\n\t\treturn ap.eventHandler.CNL(getInt(params, 1))\n\tcase \"F\":\n\t\treturn ap.eventHandler.CPL(getInt(params, 1))\n\tcase \"G\":\n\t\treturn ap.eventHandler.CHA(getInt(params, 1))\n\tcase \"H\":\n\t\tints := getInts(params, 2, 1)\n\t\tx, y := ints[0], ints[1]\n\t\treturn ap.eventHandler.CUP(x, y)\n\tcase \"J\":\n\t\tparam := getEraseParam(params)\n\t\treturn ap.eventHandler.ED(param)\n\tcase \"K\":\n\t\tparam := getEraseParam(params)\n\t\treturn ap.eventHandler.EL(param)\n\tcase \"L\":\n\t\treturn ap.eventHandler.IL(getInt(params, 1))\n\tcase \"M\":\n\t\treturn ap.eventHandler.DL(getInt(params, 1))\n\tcase \"P\":\n\t\treturn ap.eventHandler.DCH(getInt(params, 1))\n\tcase \"S\":\n\t\treturn ap.eventHandler.SU(getInt(params, 1))\n\tcase \"T\":\n\t\treturn ap.eventHandler.SD(getInt(params, 1))\n\tcase \"c\":\n\t\treturn ap.eventHandler.DA(params)\n\tcase \"d\":\n\t\treturn ap.eventHandler.VPA(getInt(params, 1))\n\tcase \"f\":\n\t\tints := getInts(params, 2, 1)\n\t\tx, y := ints[0], ints[1]\n\t\treturn ap.eventHandler.HVP(x, y)\n\tcase \"h\":\n\t\treturn ap.hDispatch(params)\n\tcase \"l\":\n\t\treturn ap.lDispatch(params)\n\tcase \"m\":\n\t\treturn ap.eventHandler.SGR(getInts(params, 1, 0))\n\tcase \"r\":\n\t\tints := getInts(params, 2, 1)\n\t\ttop, bottom := ints[0], ints[1]\n\t\treturn ap.eventHandler.DECSTBM(top, bottom)\n\tdefault:\n\t\tap.logf(\"ERROR: Unsupported CSI command: '%s', with full context:  %v\", cmd, ap.context)\n\t\treturn nil\n\t}\n\n}\n\nfunc (ap *AnsiParser) print() error {\n\treturn ap.eventHandler.Print(ap.context.currentChar)\n}\n\nfunc (ap *AnsiParser) clear() error {\n\tap.context = &ansiContext{}\n\treturn nil\n}\n\nfunc (ap *AnsiParser) execute() error {\n\treturn ap.eventHandler.Execute(ap.context.currentChar)\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/states.go",
    "content": "package ansiterm\n\ntype stateID int\n\ntype state interface {\n\tEnter() error\n\tExit() error\n\tHandle(byte) (state, error)\n\tName() string\n\tTransition(state) error\n}\n\ntype baseState struct {\n\tname   string\n\tparser *AnsiParser\n}\n\nfunc (base baseState) Enter() error {\n\treturn nil\n}\n\nfunc (base baseState) Exit() error {\n\treturn nil\n}\n\nfunc (base baseState) Handle(b byte) (s state, e error) {\n\n\tswitch {\n\tcase b == CSI_ENTRY:\n\t\treturn base.parser.csiEntry, nil\n\tcase b == DCS_ENTRY:\n\t\treturn base.parser.dcsEntry, nil\n\tcase b == ANSI_ESCAPE_PRIMARY:\n\t\treturn base.parser.escape, nil\n\tcase b == OSC_STRING:\n\t\treturn base.parser.oscString, nil\n\tcase sliceContains(toGroundBytes, b):\n\t\treturn base.parser.ground, nil\n\t}\n\n\treturn nil, nil\n}\n\nfunc (base baseState) Name() string {\n\treturn base.name\n}\n\nfunc (base baseState) Transition(s state) error {\n\tif s == base.parser.ground {\n\t\texecBytes := []byte{0x18}\n\t\texecBytes = append(execBytes, 0x1A)\n\t\texecBytes = append(execBytes, getByteRange(0x80, 0x8F)...)\n\t\texecBytes = append(execBytes, getByteRange(0x91, 0x97)...)\n\t\texecBytes = append(execBytes, 0x99)\n\t\texecBytes = append(execBytes, 0x9A)\n\n\t\tif sliceContains(execBytes, base.parser.context.currentChar) {\n\t\t\treturn base.parser.execute()\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype dcsEntryState struct {\n\tbaseState\n}\n\ntype errorState struct {\n\tbaseState\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/utilities.go",
    "content": "package ansiterm\n\nimport (\n\t\"strconv\"\n)\n\nfunc sliceContains(bytes []byte, b byte) bool {\n\tfor _, v := range bytes {\n\t\tif v == b {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc convertBytesToInteger(bytes []byte) int {\n\ts := string(bytes)\n\ti, _ := strconv.Atoi(s)\n\treturn i\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/ansi.go",
    "content": "// +build windows\n\npackage winterm\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/Azure/go-ansiterm\"\n\twindows \"golang.org/x/sys/windows\"\n)\n\n// Windows keyboard constants\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx.\nconst (\n\tVK_PRIOR    = 0x21 // PAGE UP key\n\tVK_NEXT     = 0x22 // PAGE DOWN key\n\tVK_END      = 0x23 // END key\n\tVK_HOME     = 0x24 // HOME key\n\tVK_LEFT     = 0x25 // LEFT ARROW key\n\tVK_UP       = 0x26 // UP ARROW key\n\tVK_RIGHT    = 0x27 // RIGHT ARROW key\n\tVK_DOWN     = 0x28 // DOWN ARROW key\n\tVK_SELECT   = 0x29 // SELECT key\n\tVK_PRINT    = 0x2A // PRINT key\n\tVK_EXECUTE  = 0x2B // EXECUTE key\n\tVK_SNAPSHOT = 0x2C // PRINT SCREEN key\n\tVK_INSERT   = 0x2D // INS key\n\tVK_DELETE   = 0x2E // DEL key\n\tVK_HELP     = 0x2F // HELP key\n\tVK_F1       = 0x70 // F1 key\n\tVK_F2       = 0x71 // F2 key\n\tVK_F3       = 0x72 // F3 key\n\tVK_F4       = 0x73 // F4 key\n\tVK_F5       = 0x74 // F5 key\n\tVK_F6       = 0x75 // F6 key\n\tVK_F7       = 0x76 // F7 key\n\tVK_F8       = 0x77 // F8 key\n\tVK_F9       = 0x78 // F9 key\n\tVK_F10      = 0x79 // F10 key\n\tVK_F11      = 0x7A // F11 key\n\tVK_F12      = 0x7B // F12 key\n\n\tRIGHT_ALT_PRESSED  = 0x0001\n\tLEFT_ALT_PRESSED   = 0x0002\n\tRIGHT_CTRL_PRESSED = 0x0004\n\tLEFT_CTRL_PRESSED  = 0x0008\n\tSHIFT_PRESSED      = 0x0010\n\tNUMLOCK_ON         = 0x0020\n\tSCROLLLOCK_ON      = 0x0040\n\tCAPSLOCK_ON        = 0x0080\n\tENHANCED_KEY       = 0x0100\n)\n\ntype ansiCommand struct {\n\tCommandBytes []byte\n\tCommand      string\n\tParameters   []string\n\tIsSpecial    bool\n}\n\nfunc newAnsiCommand(command []byte) *ansiCommand {\n\n\tif isCharacterSelectionCmdChar(command[1]) {\n\t\t// Is Character Set Selection commands\n\t\treturn &ansiCommand{\n\t\t\tCommandBytes: command,\n\t\t\tCommand:      string(command),\n\t\t\tIsSpecial:    true,\n\t\t}\n\t}\n\n\t// last char is command character\n\tlastCharIndex := len(command) - 1\n\n\tac := &ansiCommand{\n\t\tCommandBytes: command,\n\t\tCommand:      string(command[lastCharIndex]),\n\t\tIsSpecial:    false,\n\t}\n\n\t// more than a single escape\n\tif lastCharIndex != 0 {\n\t\tstart := 1\n\t\t// skip if double char escape sequence\n\t\tif command[0] == ansiterm.ANSI_ESCAPE_PRIMARY && command[1] == ansiterm.ANSI_ESCAPE_SECONDARY {\n\t\t\tstart++\n\t\t}\n\t\t// convert this to GetNextParam method\n\t\tac.Parameters = strings.Split(string(command[start:lastCharIndex]), ansiterm.ANSI_PARAMETER_SEP)\n\t}\n\n\treturn ac\n}\n\nfunc (ac *ansiCommand) paramAsSHORT(index int, defaultValue int16) int16 {\n\tif index < 0 || index >= len(ac.Parameters) {\n\t\treturn defaultValue\n\t}\n\n\tparam, err := strconv.ParseInt(ac.Parameters[index], 10, 16)\n\tif err != nil {\n\t\treturn defaultValue\n\t}\n\n\treturn int16(param)\n}\n\nfunc (ac *ansiCommand) String() string {\n\treturn fmt.Sprintf(\"0x%v \\\"%v\\\" (\\\"%v\\\")\",\n\t\tbytesToHex(ac.CommandBytes),\n\t\tac.Command,\n\t\tstrings.Join(ac.Parameters, \"\\\",\\\"\"))\n}\n\n// isAnsiCommandChar returns true if the passed byte falls within the range of ANSI commands.\n// See http://manpages.ubuntu.com/manpages/intrepid/man4/console_codes.4.html.\nfunc isAnsiCommandChar(b byte) bool {\n\tswitch {\n\tcase ansiterm.ANSI_COMMAND_FIRST <= b && b <= ansiterm.ANSI_COMMAND_LAST && b != ansiterm.ANSI_ESCAPE_SECONDARY:\n\t\treturn true\n\tcase b == ansiterm.ANSI_CMD_G1 || b == ansiterm.ANSI_CMD_OSC || b == ansiterm.ANSI_CMD_DECPAM || b == ansiterm.ANSI_CMD_DECPNM:\n\t\t// non-CSI escape sequence terminator\n\t\treturn true\n\tcase b == ansiterm.ANSI_CMD_STR_TERM || b == ansiterm.ANSI_BEL:\n\t\t// String escape sequence terminator\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isXtermOscSequence(command []byte, current byte) bool {\n\treturn (len(command) >= 2 && command[0] == ansiterm.ANSI_ESCAPE_PRIMARY && command[1] == ansiterm.ANSI_CMD_OSC && current != ansiterm.ANSI_BEL)\n}\n\nfunc isCharacterSelectionCmdChar(b byte) bool {\n\treturn (b == ansiterm.ANSI_CMD_G0 || b == ansiterm.ANSI_CMD_G1 || b == ansiterm.ANSI_CMD_G2 || b == ansiterm.ANSI_CMD_G3)\n}\n\n// bytesToHex converts a slice of bytes to a human-readable string.\nfunc bytesToHex(b []byte) string {\n\thex := make([]string, len(b))\n\tfor i, ch := range b {\n\t\thex[i] = fmt.Sprintf(\"%X\", ch)\n\t}\n\treturn strings.Join(hex, \"\")\n}\n\n// ensureInRange adjusts the passed value, if necessary, to ensure it is within\n// the passed min / max range.\nfunc ensureInRange(n int16, min int16, max int16) int16 {\n\tif n < min {\n\t\treturn min\n\t} else if n > max {\n\t\treturn max\n\t} else {\n\t\treturn n\n\t}\n}\n\nfunc GetStdFile(nFile int) (*os.File, uintptr) {\n\tvar file *os.File\n\n\t// syscall uses negative numbers\n\t// windows package uses very big uint32\n\t// Keep these switches split so we don't have to convert ints too much.\n\tswitch uint32(nFile) {\n\tcase windows.STD_INPUT_HANDLE:\n\t\tfile = os.Stdin\n\tcase windows.STD_OUTPUT_HANDLE:\n\t\tfile = os.Stdout\n\tcase windows.STD_ERROR_HANDLE:\n\t\tfile = os.Stderr\n\tdefault:\n\t\tswitch nFile {\n\t\tcase syscall.STD_INPUT_HANDLE:\n\t\t\tfile = os.Stdin\n\t\tcase syscall.STD_OUTPUT_HANDLE:\n\t\t\tfile = os.Stdout\n\t\tcase syscall.STD_ERROR_HANDLE:\n\t\t\tfile = os.Stderr\n\t\tdefault:\n\t\t\tpanic(fmt.Errorf(\"Invalid standard handle identifier: %v\", nFile))\n\t\t}\n\t}\n\n\tfd, err := syscall.GetStdHandle(nFile)\n\tif err != nil {\n\t\tpanic(fmt.Errorf(\"Invalid standard handle identifier: %v -- %v\", nFile, err))\n\t}\n\n\treturn file, uintptr(fd)\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/api.go",
    "content": "// +build windows\n\npackage winterm\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//===========================================================================================================\n// IMPORTANT NOTE:\n//\n//\tThe methods below make extensive use of the \"unsafe\" package to obtain the required pointers.\n//\tBeginning in Go 1.3, the garbage collector may release local variables (e.g., incoming arguments, stack\n//\tvariables) the pointers reference *before* the API completes.\n//\n//  As a result, in those cases, the code must hint that the variables remain in active by invoking the\n//\tdummy method \"use\" (see below). Newer versions of Go are planned to change the mechanism to no longer\n//\trequire unsafe pointers.\n//\n//\tIf you add or modify methods, ENSURE protection of local variables through the \"use\" builtin to inform\n//\tthe garbage collector the variables remain in use if:\n//\n//\t-- The value is not a pointer (e.g., int32, struct)\n//\t-- The value is not referenced by the method after passing the pointer to Windows\n//\n//\tSee http://golang.org/doc/go1.3.\n//===========================================================================================================\n\nvar (\n\tkernel32DLL = syscall.NewLazyDLL(\"kernel32.dll\")\n\n\tgetConsoleCursorInfoProc       = kernel32DLL.NewProc(\"GetConsoleCursorInfo\")\n\tsetConsoleCursorInfoProc       = kernel32DLL.NewProc(\"SetConsoleCursorInfo\")\n\tsetConsoleCursorPositionProc   = kernel32DLL.NewProc(\"SetConsoleCursorPosition\")\n\tsetConsoleModeProc             = kernel32DLL.NewProc(\"SetConsoleMode\")\n\tgetConsoleScreenBufferInfoProc = kernel32DLL.NewProc(\"GetConsoleScreenBufferInfo\")\n\tsetConsoleScreenBufferSizeProc = kernel32DLL.NewProc(\"SetConsoleScreenBufferSize\")\n\tscrollConsoleScreenBufferProc  = kernel32DLL.NewProc(\"ScrollConsoleScreenBufferA\")\n\tsetConsoleTextAttributeProc    = kernel32DLL.NewProc(\"SetConsoleTextAttribute\")\n\tsetConsoleWindowInfoProc       = kernel32DLL.NewProc(\"SetConsoleWindowInfo\")\n\twriteConsoleOutputProc         = kernel32DLL.NewProc(\"WriteConsoleOutputW\")\n\treadConsoleInputProc           = kernel32DLL.NewProc(\"ReadConsoleInputW\")\n\twaitForSingleObjectProc        = kernel32DLL.NewProc(\"WaitForSingleObject\")\n)\n\n// Windows Console constants\nconst (\n\t// Console modes\n\t// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx.\n\tENABLE_PROCESSED_INPUT        = 0x0001\n\tENABLE_LINE_INPUT             = 0x0002\n\tENABLE_ECHO_INPUT             = 0x0004\n\tENABLE_WINDOW_INPUT           = 0x0008\n\tENABLE_MOUSE_INPUT            = 0x0010\n\tENABLE_INSERT_MODE            = 0x0020\n\tENABLE_QUICK_EDIT_MODE        = 0x0040\n\tENABLE_EXTENDED_FLAGS         = 0x0080\n\tENABLE_AUTO_POSITION          = 0x0100\n\tENABLE_VIRTUAL_TERMINAL_INPUT = 0x0200\n\n\tENABLE_PROCESSED_OUTPUT            = 0x0001\n\tENABLE_WRAP_AT_EOL_OUTPUT          = 0x0002\n\tENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004\n\tDISABLE_NEWLINE_AUTO_RETURN        = 0x0008\n\tENABLE_LVB_GRID_WORLDWIDE          = 0x0010\n\n\t// Character attributes\n\t// Note:\n\t// -- The attributes are combined to produce various colors (e.g., Blue + Green will create Cyan).\n\t//    Clearing all foreground or background colors results in black; setting all creates white.\n\t// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes.\n\tFOREGROUND_BLUE      uint16 = 0x0001\n\tFOREGROUND_GREEN     uint16 = 0x0002\n\tFOREGROUND_RED       uint16 = 0x0004\n\tFOREGROUND_INTENSITY uint16 = 0x0008\n\tFOREGROUND_MASK      uint16 = 0x000F\n\n\tBACKGROUND_BLUE      uint16 = 0x0010\n\tBACKGROUND_GREEN     uint16 = 0x0020\n\tBACKGROUND_RED       uint16 = 0x0040\n\tBACKGROUND_INTENSITY uint16 = 0x0080\n\tBACKGROUND_MASK      uint16 = 0x00F0\n\n\tCOMMON_LVB_MASK          uint16 = 0xFF00\n\tCOMMON_LVB_REVERSE_VIDEO uint16 = 0x4000\n\tCOMMON_LVB_UNDERSCORE    uint16 = 0x8000\n\n\t// Input event types\n\t// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683499(v=vs.85).aspx.\n\tKEY_EVENT                = 0x0001\n\tMOUSE_EVENT              = 0x0002\n\tWINDOW_BUFFER_SIZE_EVENT = 0x0004\n\tMENU_EVENT               = 0x0008\n\tFOCUS_EVENT              = 0x0010\n\n\t// WaitForSingleObject return codes\n\tWAIT_ABANDONED = 0x00000080\n\tWAIT_FAILED    = 0xFFFFFFFF\n\tWAIT_SIGNALED  = 0x0000000\n\tWAIT_TIMEOUT   = 0x00000102\n\n\t// WaitForSingleObject wait duration\n\tWAIT_INFINITE       = 0xFFFFFFFF\n\tWAIT_ONE_SECOND     = 1000\n\tWAIT_HALF_SECOND    = 500\n\tWAIT_QUARTER_SECOND = 250\n)\n\n// Windows API Console types\n// -- See https://msdn.microsoft.com/en-us/library/windows/desktop/ms682101(v=vs.85).aspx for Console specific types (e.g., COORD)\n// -- See https://msdn.microsoft.com/en-us/library/aa296569(v=vs.60).aspx for comments on alignment\ntype (\n\tCHAR_INFO struct {\n\t\tUnicodeChar uint16\n\t\tAttributes  uint16\n\t}\n\n\tCONSOLE_CURSOR_INFO struct {\n\t\tSize    uint32\n\t\tVisible int32\n\t}\n\n\tCONSOLE_SCREEN_BUFFER_INFO struct {\n\t\tSize              COORD\n\t\tCursorPosition    COORD\n\t\tAttributes        uint16\n\t\tWindow            SMALL_RECT\n\t\tMaximumWindowSize COORD\n\t}\n\n\tCOORD struct {\n\t\tX int16\n\t\tY int16\n\t}\n\n\tSMALL_RECT struct {\n\t\tLeft   int16\n\t\tTop    int16\n\t\tRight  int16\n\t\tBottom int16\n\t}\n\n\t// INPUT_RECORD is a C/C++ union of which KEY_EVENT_RECORD is one case, it is also the largest\n\t// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683499(v=vs.85).aspx.\n\tINPUT_RECORD struct {\n\t\tEventType uint16\n\t\tKeyEvent  KEY_EVENT_RECORD\n\t}\n\n\tKEY_EVENT_RECORD struct {\n\t\tKeyDown         int32\n\t\tRepeatCount     uint16\n\t\tVirtualKeyCode  uint16\n\t\tVirtualScanCode uint16\n\t\tUnicodeChar     uint16\n\t\tControlKeyState uint32\n\t}\n\n\tWINDOW_BUFFER_SIZE struct {\n\t\tSize COORD\n\t}\n)\n\n// boolToBOOL converts a Go bool into a Windows int32.\nfunc boolToBOOL(f bool) int32 {\n\tif f {\n\t\treturn int32(1)\n\t} else {\n\t\treturn int32(0)\n\t}\n}\n\n// GetConsoleCursorInfo retrieves information about the size and visiblity of the console cursor.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683163(v=vs.85).aspx.\nfunc GetConsoleCursorInfo(handle uintptr, cursorInfo *CONSOLE_CURSOR_INFO) error {\n\tr1, r2, err := getConsoleCursorInfoProc.Call(handle, uintptr(unsafe.Pointer(cursorInfo)), 0)\n\treturn checkError(r1, r2, err)\n}\n\n// SetConsoleCursorInfo sets the size and visiblity of the console cursor.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686019(v=vs.85).aspx.\nfunc SetConsoleCursorInfo(handle uintptr, cursorInfo *CONSOLE_CURSOR_INFO) error {\n\tr1, r2, err := setConsoleCursorInfoProc.Call(handle, uintptr(unsafe.Pointer(cursorInfo)), 0)\n\treturn checkError(r1, r2, err)\n}\n\n// SetConsoleCursorPosition location of the console cursor.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686025(v=vs.85).aspx.\nfunc SetConsoleCursorPosition(handle uintptr, coord COORD) error {\n\tr1, r2, err := setConsoleCursorPositionProc.Call(handle, coordToPointer(coord))\n\tuse(coord)\n\treturn checkError(r1, r2, err)\n}\n\n// GetConsoleMode gets the console mode for given file descriptor\n// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms683167(v=vs.85).aspx.\nfunc GetConsoleMode(handle uintptr) (mode uint32, err error) {\n\terr = syscall.GetConsoleMode(syscall.Handle(handle), &mode)\n\treturn mode, err\n}\n\n// SetConsoleMode sets the console mode for given file descriptor\n// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx.\nfunc SetConsoleMode(handle uintptr, mode uint32) error {\n\tr1, r2, err := setConsoleModeProc.Call(handle, uintptr(mode), 0)\n\tuse(mode)\n\treturn checkError(r1, r2, err)\n}\n\n// GetConsoleScreenBufferInfo retrieves information about the specified console screen buffer.\n// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms683171(v=vs.85).aspx.\nfunc GetConsoleScreenBufferInfo(handle uintptr) (*CONSOLE_SCREEN_BUFFER_INFO, error) {\n\tinfo := CONSOLE_SCREEN_BUFFER_INFO{}\n\terr := checkError(getConsoleScreenBufferInfoProc.Call(handle, uintptr(unsafe.Pointer(&info)), 0))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &info, nil\n}\n\nfunc ScrollConsoleScreenBuffer(handle uintptr, scrollRect SMALL_RECT, clipRect SMALL_RECT, destOrigin COORD, char CHAR_INFO) error {\n\tr1, r2, err := scrollConsoleScreenBufferProc.Call(handle, uintptr(unsafe.Pointer(&scrollRect)), uintptr(unsafe.Pointer(&clipRect)), coordToPointer(destOrigin), uintptr(unsafe.Pointer(&char)))\n\tuse(scrollRect)\n\tuse(clipRect)\n\tuse(destOrigin)\n\tuse(char)\n\treturn checkError(r1, r2, err)\n}\n\n// SetConsoleScreenBufferSize sets the size of the console screen buffer.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686044(v=vs.85).aspx.\nfunc SetConsoleScreenBufferSize(handle uintptr, coord COORD) error {\n\tr1, r2, err := setConsoleScreenBufferSizeProc.Call(handle, coordToPointer(coord))\n\tuse(coord)\n\treturn checkError(r1, r2, err)\n}\n\n// SetConsoleTextAttribute sets the attributes of characters written to the\n// console screen buffer by the WriteFile or WriteConsole function.\n// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs.85).aspx.\nfunc SetConsoleTextAttribute(handle uintptr, attribute uint16) error {\n\tr1, r2, err := setConsoleTextAttributeProc.Call(handle, uintptr(attribute), 0)\n\tuse(attribute)\n\treturn checkError(r1, r2, err)\n}\n\n// SetConsoleWindowInfo sets the size and position of the console screen buffer's window.\n// Note that the size and location must be within and no larger than the backing console screen buffer.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686125(v=vs.85).aspx.\nfunc SetConsoleWindowInfo(handle uintptr, isAbsolute bool, rect SMALL_RECT) error {\n\tr1, r2, err := setConsoleWindowInfoProc.Call(handle, uintptr(boolToBOOL(isAbsolute)), uintptr(unsafe.Pointer(&rect)))\n\tuse(isAbsolute)\n\tuse(rect)\n\treturn checkError(r1, r2, err)\n}\n\n// WriteConsoleOutput writes the CHAR_INFOs from the provided buffer to the active console buffer.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms687404(v=vs.85).aspx.\nfunc WriteConsoleOutput(handle uintptr, buffer []CHAR_INFO, bufferSize COORD, bufferCoord COORD, writeRegion *SMALL_RECT) error {\n\tr1, r2, err := writeConsoleOutputProc.Call(handle, uintptr(unsafe.Pointer(&buffer[0])), coordToPointer(bufferSize), coordToPointer(bufferCoord), uintptr(unsafe.Pointer(writeRegion)))\n\tuse(buffer)\n\tuse(bufferSize)\n\tuse(bufferCoord)\n\treturn checkError(r1, r2, err)\n}\n\n// ReadConsoleInput reads (and removes) data from the console input buffer.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684961(v=vs.85).aspx.\nfunc ReadConsoleInput(handle uintptr, buffer []INPUT_RECORD, count *uint32) error {\n\tr1, r2, err := readConsoleInputProc.Call(handle, uintptr(unsafe.Pointer(&buffer[0])), uintptr(len(buffer)), uintptr(unsafe.Pointer(count)))\n\tuse(buffer)\n\treturn checkError(r1, r2, err)\n}\n\n// WaitForSingleObject waits for the passed handle to be signaled.\n// It returns true if the handle was signaled; false otherwise.\n// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx.\nfunc WaitForSingleObject(handle uintptr, msWait uint32) (bool, error) {\n\tr1, _, err := waitForSingleObjectProc.Call(handle, uintptr(uint32(msWait)))\n\tswitch r1 {\n\tcase WAIT_ABANDONED, WAIT_TIMEOUT:\n\t\treturn false, nil\n\tcase WAIT_SIGNALED:\n\t\treturn true, nil\n\t}\n\tuse(msWait)\n\treturn false, err\n}\n\n// String helpers\nfunc (info CONSOLE_SCREEN_BUFFER_INFO) String() string {\n\treturn fmt.Sprintf(\"Size(%v) Cursor(%v) Window(%v) Max(%v)\", info.Size, info.CursorPosition, info.Window, info.MaximumWindowSize)\n}\n\nfunc (coord COORD) String() string {\n\treturn fmt.Sprintf(\"%v,%v\", coord.X, coord.Y)\n}\n\nfunc (rect SMALL_RECT) String() string {\n\treturn fmt.Sprintf(\"(%v,%v),(%v,%v)\", rect.Left, rect.Top, rect.Right, rect.Bottom)\n}\n\n// checkError evaluates the results of a Windows API call and returns the error if it failed.\nfunc checkError(r1, r2 uintptr, err error) error {\n\t// Windows APIs return non-zero to indicate success\n\tif r1 != 0 {\n\t\treturn nil\n\t}\n\n\t// Return the error if provided, otherwise default to EINVAL\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn syscall.EINVAL\n}\n\n// coordToPointer converts a COORD into a uintptr (by fooling the type system).\nfunc coordToPointer(c COORD) uintptr {\n\t// Note: This code assumes the two SHORTs are correctly laid out; the \"cast\" to uint32 is just to get a pointer to pass.\n\treturn uintptr(*((*uint32)(unsafe.Pointer(&c))))\n}\n\n// use is a no-op, but the compiler cannot see that it is.\n// Calling use(p) ensures that p is kept live until that point.\nfunc use(p interface{}) {}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/attr_translation.go",
    "content": "// +build windows\n\npackage winterm\n\nimport \"github.com/Azure/go-ansiterm\"\n\nconst (\n\tFOREGROUND_COLOR_MASK = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE\n\tBACKGROUND_COLOR_MASK = BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE\n)\n\n// collectAnsiIntoWindowsAttributes modifies the passed Windows text mode flags to reflect the\n// request represented by the passed ANSI mode.\nfunc collectAnsiIntoWindowsAttributes(windowsMode uint16, inverted bool, baseMode uint16, ansiMode int16) (uint16, bool) {\n\tswitch ansiMode {\n\n\t// Mode styles\n\tcase ansiterm.ANSI_SGR_BOLD:\n\t\twindowsMode = windowsMode | FOREGROUND_INTENSITY\n\n\tcase ansiterm.ANSI_SGR_DIM, ansiterm.ANSI_SGR_BOLD_DIM_OFF:\n\t\twindowsMode &^= FOREGROUND_INTENSITY\n\n\tcase ansiterm.ANSI_SGR_UNDERLINE:\n\t\twindowsMode = windowsMode | COMMON_LVB_UNDERSCORE\n\n\tcase ansiterm.ANSI_SGR_REVERSE:\n\t\tinverted = true\n\n\tcase ansiterm.ANSI_SGR_REVERSE_OFF:\n\t\tinverted = false\n\n\tcase ansiterm.ANSI_SGR_UNDERLINE_OFF:\n\t\twindowsMode &^= COMMON_LVB_UNDERSCORE\n\n\t\t// Foreground colors\n\tcase ansiterm.ANSI_SGR_FOREGROUND_DEFAULT:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_MASK) | (baseMode & FOREGROUND_MASK)\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_BLACK:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK)\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_RED:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_GREEN:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_GREEN\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_YELLOW:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_GREEN\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_BLUE:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_BLUE\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_MAGENTA:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_BLUE\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_CYAN:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_GREEN | FOREGROUND_BLUE\n\n\tcase ansiterm.ANSI_SGR_FOREGROUND_WHITE:\n\t\twindowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE\n\n\t\t// Background colors\n\tcase ansiterm.ANSI_SGR_BACKGROUND_DEFAULT:\n\t\t// Black with no intensity\n\t\twindowsMode = (windowsMode &^ BACKGROUND_MASK) | (baseMode & BACKGROUND_MASK)\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_BLACK:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK)\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_RED:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_GREEN:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_GREEN\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_YELLOW:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_GREEN\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_BLUE:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_BLUE\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_MAGENTA:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_BLUE\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_CYAN:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_GREEN | BACKGROUND_BLUE\n\n\tcase ansiterm.ANSI_SGR_BACKGROUND_WHITE:\n\t\twindowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE\n\t}\n\n\treturn windowsMode, inverted\n}\n\n// invertAttributes inverts the foreground and background colors of a Windows attributes value\nfunc invertAttributes(windowsMode uint16) uint16 {\n\treturn (COMMON_LVB_MASK & windowsMode) | ((FOREGROUND_MASK & windowsMode) << 4) | ((BACKGROUND_MASK & windowsMode) >> 4)\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go",
    "content": "// +build windows\n\npackage winterm\n\nconst (\n\thorizontal = iota\n\tvertical\n)\n\nfunc (h *windowsAnsiEventHandler) getCursorWindow(info *CONSOLE_SCREEN_BUFFER_INFO) SMALL_RECT {\n\tif h.originMode {\n\t\tsr := h.effectiveSr(info.Window)\n\t\treturn SMALL_RECT{\n\t\t\tTop:    sr.top,\n\t\t\tBottom: sr.bottom,\n\t\t\tLeft:   0,\n\t\t\tRight:  info.Size.X - 1,\n\t\t}\n\t} else {\n\t\treturn SMALL_RECT{\n\t\t\tTop:    info.Window.Top,\n\t\t\tBottom: info.Window.Bottom,\n\t\t\tLeft:   0,\n\t\t\tRight:  info.Size.X - 1,\n\t\t}\n\t}\n}\n\n// setCursorPosition sets the cursor to the specified position, bounded to the screen size\nfunc (h *windowsAnsiEventHandler) setCursorPosition(position COORD, window SMALL_RECT) error {\n\tposition.X = ensureInRange(position.X, window.Left, window.Right)\n\tposition.Y = ensureInRange(position.Y, window.Top, window.Bottom)\n\terr := SetConsoleCursorPosition(h.fd, position)\n\tif err != nil {\n\t\treturn err\n\t}\n\th.logf(\"Cursor position set: (%d, %d)\", position.X, position.Y)\n\treturn err\n}\n\nfunc (h *windowsAnsiEventHandler) moveCursorVertical(param int) error {\n\treturn h.moveCursor(vertical, param)\n}\n\nfunc (h *windowsAnsiEventHandler) moveCursorHorizontal(param int) error {\n\treturn h.moveCursor(horizontal, param)\n}\n\nfunc (h *windowsAnsiEventHandler) moveCursor(moveMode int, param int) error {\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tposition := info.CursorPosition\n\tswitch moveMode {\n\tcase horizontal:\n\t\tposition.X += int16(param)\n\tcase vertical:\n\t\tposition.Y += int16(param)\n\t}\n\n\tif err = h.setCursorPosition(position, h.getCursorWindow(info)); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) moveCursorLine(param int) error {\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tposition := info.CursorPosition\n\tposition.X = 0\n\tposition.Y += int16(param)\n\n\tif err = h.setCursorPosition(position, h.getCursorWindow(info)); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) moveCursorColumn(param int) error {\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tposition := info.CursorPosition\n\tposition.X = int16(param) - 1\n\n\tif err = h.setCursorPosition(position, h.getCursorWindow(info)); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/erase_helpers.go",
    "content": "// +build windows\n\npackage winterm\n\nimport \"github.com/Azure/go-ansiterm\"\n\nfunc (h *windowsAnsiEventHandler) clearRange(attributes uint16, fromCoord COORD, toCoord COORD) error {\n\t// Ignore an invalid (negative area) request\n\tif toCoord.Y < fromCoord.Y {\n\t\treturn nil\n\t}\n\n\tvar err error\n\n\tvar coordStart = COORD{}\n\tvar coordEnd = COORD{}\n\n\txCurrent, yCurrent := fromCoord.X, fromCoord.Y\n\txEnd, yEnd := toCoord.X, toCoord.Y\n\n\t// Clear any partial initial line\n\tif xCurrent > 0 {\n\t\tcoordStart.X, coordStart.Y = xCurrent, yCurrent\n\t\tcoordEnd.X, coordEnd.Y = xEnd, yCurrent\n\n\t\terr = h.clearRect(attributes, coordStart, coordEnd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\txCurrent = 0\n\t\tyCurrent += 1\n\t}\n\n\t// Clear intervening rectangular section\n\tif yCurrent < yEnd {\n\t\tcoordStart.X, coordStart.Y = xCurrent, yCurrent\n\t\tcoordEnd.X, coordEnd.Y = xEnd, yEnd-1\n\n\t\terr = h.clearRect(attributes, coordStart, coordEnd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\txCurrent = 0\n\t\tyCurrent = yEnd\n\t}\n\n\t// Clear remaining partial ending line\n\tcoordStart.X, coordStart.Y = xCurrent, yCurrent\n\tcoordEnd.X, coordEnd.Y = xEnd, yEnd\n\n\terr = h.clearRect(attributes, coordStart, coordEnd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) clearRect(attributes uint16, fromCoord COORD, toCoord COORD) error {\n\tregion := SMALL_RECT{Top: fromCoord.Y, Left: fromCoord.X, Bottom: toCoord.Y, Right: toCoord.X}\n\twidth := toCoord.X - fromCoord.X + 1\n\theight := toCoord.Y - fromCoord.Y + 1\n\tsize := uint32(width) * uint32(height)\n\n\tif size <= 0 {\n\t\treturn nil\n\t}\n\n\tbuffer := make([]CHAR_INFO, size)\n\n\tchar := CHAR_INFO{ansiterm.FILL_CHARACTER, attributes}\n\tfor i := 0; i < int(size); i++ {\n\t\tbuffer[i] = char\n\t}\n\n\terr := WriteConsoleOutput(h.fd, buffer, COORD{X: width, Y: height}, COORD{X: 0, Y: 0}, &region)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go",
    "content": "// +build windows\n\npackage winterm\n\n// effectiveSr gets the current effective scroll region in buffer coordinates\nfunc (h *windowsAnsiEventHandler) effectiveSr(window SMALL_RECT) scrollRegion {\n\ttop := addInRange(window.Top, h.sr.top, window.Top, window.Bottom)\n\tbottom := addInRange(window.Top, h.sr.bottom, window.Top, window.Bottom)\n\tif top >= bottom {\n\t\ttop = window.Top\n\t\tbottom = window.Bottom\n\t}\n\treturn scrollRegion{top: top, bottom: bottom}\n}\n\nfunc (h *windowsAnsiEventHandler) scrollUp(param int) error {\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsr := h.effectiveSr(info.Window)\n\treturn h.scroll(param, sr, info)\n}\n\nfunc (h *windowsAnsiEventHandler) scrollDown(param int) error {\n\treturn h.scrollUp(-param)\n}\n\nfunc (h *windowsAnsiEventHandler) deleteLines(param int) error {\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstart := info.CursorPosition.Y\n\tsr := h.effectiveSr(info.Window)\n\t// Lines cannot be inserted or deleted outside the scrolling region.\n\tif start >= sr.top && start <= sr.bottom {\n\t\tsr.top = start\n\t\treturn h.scroll(param, sr, info)\n\t} else {\n\t\treturn nil\n\t}\n}\n\nfunc (h *windowsAnsiEventHandler) insertLines(param int) error {\n\treturn h.deleteLines(-param)\n}\n\n// scroll scrolls the provided scroll region by param lines. The scroll region is in buffer coordinates.\nfunc (h *windowsAnsiEventHandler) scroll(param int, sr scrollRegion, info *CONSOLE_SCREEN_BUFFER_INFO) error {\n\th.logf(\"scroll: scrollTop: %d, scrollBottom: %d\", sr.top, sr.bottom)\n\th.logf(\"scroll: windowTop: %d, windowBottom: %d\", info.Window.Top, info.Window.Bottom)\n\n\t// Copy from and clip to the scroll region (full buffer width)\n\tscrollRect := SMALL_RECT{\n\t\tTop:    sr.top,\n\t\tBottom: sr.bottom,\n\t\tLeft:   0,\n\t\tRight:  info.Size.X - 1,\n\t}\n\n\t// Origin to which area should be copied\n\tdestOrigin := COORD{\n\t\tX: 0,\n\t\tY: sr.top - int16(param),\n\t}\n\n\tchar := CHAR_INFO{\n\t\tUnicodeChar: ' ',\n\t\tAttributes:  h.attributes,\n\t}\n\n\tif err := ScrollConsoleScreenBuffer(h.fd, scrollRect, scrollRect, destOrigin, char); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) deleteCharacters(param int) error {\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn h.scrollLine(param, info.CursorPosition, info)\n}\n\nfunc (h *windowsAnsiEventHandler) insertCharacters(param int) error {\n\treturn h.deleteCharacters(-param)\n}\n\n// scrollLine scrolls a line horizontally starting at the provided position by a number of columns.\nfunc (h *windowsAnsiEventHandler) scrollLine(columns int, position COORD, info *CONSOLE_SCREEN_BUFFER_INFO) error {\n\t// Copy from and clip to the scroll region (full buffer width)\n\tscrollRect := SMALL_RECT{\n\t\tTop:    position.Y,\n\t\tBottom: position.Y,\n\t\tLeft:   position.X,\n\t\tRight:  info.Size.X - 1,\n\t}\n\n\t// Origin to which area should be copied\n\tdestOrigin := COORD{\n\t\tX: position.X - int16(columns),\n\t\tY: position.Y,\n\t}\n\n\tchar := CHAR_INFO{\n\t\tUnicodeChar: ' ',\n\t\tAttributes:  h.attributes,\n\t}\n\n\tif err := ScrollConsoleScreenBuffer(h.fd, scrollRect, scrollRect, destOrigin, char); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/utilities.go",
    "content": "// +build windows\n\npackage winterm\n\n// AddInRange increments a value by the passed quantity while ensuring the values\n// always remain within the supplied min / max range.\nfunc addInRange(n int16, increment int16, min int16, max int16) int16 {\n\treturn ensureInRange(n+increment, min, max)\n}\n"
  },
  {
    "path": "vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go",
    "content": "// +build windows\n\npackage winterm\n\nimport (\n\t\"bytes\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/Azure/go-ansiterm\"\n)\n\ntype windowsAnsiEventHandler struct {\n\tfd             uintptr\n\tfile           *os.File\n\tinfoReset      *CONSOLE_SCREEN_BUFFER_INFO\n\tsr             scrollRegion\n\tbuffer         bytes.Buffer\n\tattributes     uint16\n\tinverted       bool\n\twrapNext       bool\n\tdrewMarginByte bool\n\toriginMode     bool\n\tmarginByte     byte\n\tcurInfo        *CONSOLE_SCREEN_BUFFER_INFO\n\tcurPos         COORD\n\tlogf           func(string, ...interface{})\n}\n\ntype Option func(*windowsAnsiEventHandler)\n\nfunc WithLogf(f func(string, ...interface{})) Option {\n\treturn func(w *windowsAnsiEventHandler) {\n\t\tw.logf = f\n\t}\n}\n\nfunc CreateWinEventHandler(fd uintptr, file *os.File, opts ...Option) ansiterm.AnsiEventHandler {\n\tinfoReset, err := GetConsoleScreenBufferInfo(fd)\n\tif err != nil {\n\t\treturn nil\n\t}\n\n\th := &windowsAnsiEventHandler{\n\t\tfd:         fd,\n\t\tfile:       file,\n\t\tinfoReset:  infoReset,\n\t\tattributes: infoReset.Attributes,\n\t}\n\tfor _, o := range opts {\n\t\to(h)\n\t}\n\n\tif isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == \"1\" {\n\t\tlogFile, _ := os.Create(\"winEventHandler.log\")\n\t\tlogger := log.New(logFile, \"\", log.LstdFlags)\n\t\tif h.logf != nil {\n\t\t\tl := h.logf\n\t\t\th.logf = func(s string, v ...interface{}) {\n\t\t\t\tl(s, v...)\n\t\t\t\tlogger.Printf(s, v...)\n\t\t\t}\n\t\t} else {\n\t\t\th.logf = logger.Printf\n\t\t}\n\t}\n\n\tif h.logf == nil {\n\t\th.logf = func(string, ...interface{}) {}\n\t}\n\n\treturn h\n}\n\ntype scrollRegion struct {\n\ttop    int16\n\tbottom int16\n}\n\n// simulateLF simulates a LF or CR+LF by scrolling if necessary to handle the\n// current cursor position and scroll region settings, in which case it returns\n// true. If no special handling is necessary, then it does nothing and returns\n// false.\n//\n// In the false case, the caller should ensure that a carriage return\n// and line feed are inserted or that the text is otherwise wrapped.\nfunc (h *windowsAnsiEventHandler) simulateLF(includeCR bool) (bool, error) {\n\tif h.wrapNext {\n\t\tif err := h.Flush(); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\th.clearWrap()\n\t}\n\tpos, info, err := h.getCurrentInfo()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tsr := h.effectiveSr(info.Window)\n\tif pos.Y == sr.bottom {\n\t\t// Scrolling is necessary. Let Windows automatically scroll if the scrolling region\n\t\t// is the full window.\n\t\tif sr.top == info.Window.Top && sr.bottom == info.Window.Bottom {\n\t\t\tif includeCR {\n\t\t\t\tpos.X = 0\n\t\t\t\th.updatePos(pos)\n\t\t\t}\n\t\t\treturn false, nil\n\t\t}\n\n\t\t// A custom scroll region is active. Scroll the window manually to simulate\n\t\t// the LF.\n\t\tif err := h.Flush(); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\th.logf(\"Simulating LF inside scroll region\")\n\t\tif err := h.scrollUp(1); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif includeCR {\n\t\t\tpos.X = 0\n\t\t\tif err := SetConsoleCursorPosition(h.fd, pos); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t}\n\t\treturn true, nil\n\n\t} else if pos.Y < info.Window.Bottom {\n\t\t// Let Windows handle the LF.\n\t\tpos.Y++\n\t\tif includeCR {\n\t\t\tpos.X = 0\n\t\t}\n\t\th.updatePos(pos)\n\t\treturn false, nil\n\t} else {\n\t\t// The cursor is at the bottom of the screen but outside the scroll\n\t\t// region. Skip the LF.\n\t\th.logf(\"Simulating LF outside scroll region\")\n\t\tif includeCR {\n\t\t\tif err := h.Flush(); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tpos.X = 0\n\t\t\tif err := SetConsoleCursorPosition(h.fd, pos); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t}\n\t\treturn true, nil\n\t}\n}\n\n// executeLF executes a LF without a CR.\nfunc (h *windowsAnsiEventHandler) executeLF() error {\n\thandled, err := h.simulateLF(false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !handled {\n\t\t// Windows LF will reset the cursor column position. Write the LF\n\t\t// and restore the cursor position.\n\t\tpos, _, err := h.getCurrentInfo()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\th.buffer.WriteByte(ansiterm.ANSI_LINE_FEED)\n\t\tif pos.X != 0 {\n\t\t\tif err := h.Flush(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\th.logf(\"Resetting cursor position for LF without CR\")\n\t\t\tif err := SetConsoleCursorPosition(h.fd, pos); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) Print(b byte) error {\n\tif h.wrapNext {\n\t\th.buffer.WriteByte(h.marginByte)\n\t\th.clearWrap()\n\t\tif _, err := h.simulateLF(true); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tpos, info, err := h.getCurrentInfo()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif pos.X == info.Size.X-1 {\n\t\th.wrapNext = true\n\t\th.marginByte = b\n\t} else {\n\t\tpos.X++\n\t\th.updatePos(pos)\n\t\th.buffer.WriteByte(b)\n\t}\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) Execute(b byte) error {\n\tswitch b {\n\tcase ansiterm.ANSI_TAB:\n\t\th.logf(\"Execute(TAB)\")\n\t\t// Move to the next tab stop, but preserve auto-wrap if already set.\n\t\tif !h.wrapNext {\n\t\t\tpos, info, err := h.getCurrentInfo()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tpos.X = (pos.X + 8) - pos.X%8\n\t\t\tif pos.X >= info.Size.X {\n\t\t\t\tpos.X = info.Size.X - 1\n\t\t\t}\n\t\t\tif err := h.Flush(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := SetConsoleCursorPosition(h.fd, pos); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase ansiterm.ANSI_BEL:\n\t\th.buffer.WriteByte(ansiterm.ANSI_BEL)\n\t\treturn nil\n\n\tcase ansiterm.ANSI_BACKSPACE:\n\t\tif h.wrapNext {\n\t\t\tif err := h.Flush(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\th.clearWrap()\n\t\t}\n\t\tpos, _, err := h.getCurrentInfo()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif pos.X > 0 {\n\t\t\tpos.X--\n\t\t\th.updatePos(pos)\n\t\t\th.buffer.WriteByte(ansiterm.ANSI_BACKSPACE)\n\t\t}\n\t\treturn nil\n\n\tcase ansiterm.ANSI_VERTICAL_TAB, ansiterm.ANSI_FORM_FEED:\n\t\t// Treat as true LF.\n\t\treturn h.executeLF()\n\n\tcase ansiterm.ANSI_LINE_FEED:\n\t\t// Simulate a CR and LF for now since there is no way in go-ansiterm\n\t\t// to tell if the LF should include CR (and more things break when it's\n\t\t// missing than when it's incorrectly added).\n\t\thandled, err := h.simulateLF(true)\n\t\tif handled || err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn h.buffer.WriteByte(ansiterm.ANSI_LINE_FEED)\n\n\tcase ansiterm.ANSI_CARRIAGE_RETURN:\n\t\tif h.wrapNext {\n\t\t\tif err := h.Flush(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\th.clearWrap()\n\t\t}\n\t\tpos, _, err := h.getCurrentInfo()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif pos.X != 0 {\n\t\t\tpos.X = 0\n\t\t\th.updatePos(pos)\n\t\t\th.buffer.WriteByte(ansiterm.ANSI_CARRIAGE_RETURN)\n\t\t}\n\t\treturn nil\n\n\tdefault:\n\t\treturn nil\n\t}\n}\n\nfunc (h *windowsAnsiEventHandler) CUU(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CUU: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.moveCursorVertical(-param)\n}\n\nfunc (h *windowsAnsiEventHandler) CUD(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CUD: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.moveCursorVertical(param)\n}\n\nfunc (h *windowsAnsiEventHandler) CUF(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CUF: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.moveCursorHorizontal(param)\n}\n\nfunc (h *windowsAnsiEventHandler) CUB(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CUB: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.moveCursorHorizontal(-param)\n}\n\nfunc (h *windowsAnsiEventHandler) CNL(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CNL: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.moveCursorLine(param)\n}\n\nfunc (h *windowsAnsiEventHandler) CPL(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CPL: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.moveCursorLine(-param)\n}\n\nfunc (h *windowsAnsiEventHandler) CHA(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CHA: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.moveCursorColumn(param)\n}\n\nfunc (h *windowsAnsiEventHandler) VPA(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"VPA: [[%d]]\", param)\n\th.clearWrap()\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\twindow := h.getCursorWindow(info)\n\tposition := info.CursorPosition\n\tposition.Y = window.Top + int16(param) - 1\n\treturn h.setCursorPosition(position, window)\n}\n\nfunc (h *windowsAnsiEventHandler) CUP(row int, col int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"CUP: [[%d %d]]\", row, col)\n\th.clearWrap()\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\twindow := h.getCursorWindow(info)\n\tposition := COORD{window.Left + int16(col) - 1, window.Top + int16(row) - 1}\n\treturn h.setCursorPosition(position, window)\n}\n\nfunc (h *windowsAnsiEventHandler) HVP(row int, col int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"HVP: [[%d %d]]\", row, col)\n\th.clearWrap()\n\treturn h.CUP(row, col)\n}\n\nfunc (h *windowsAnsiEventHandler) DECTCEM(visible bool) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"DECTCEM: [%v]\", []string{strconv.FormatBool(visible)})\n\th.clearWrap()\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) DECOM(enable bool) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"DECOM: [%v]\", []string{strconv.FormatBool(enable)})\n\th.clearWrap()\n\th.originMode = enable\n\treturn h.CUP(1, 1)\n}\n\nfunc (h *windowsAnsiEventHandler) DECCOLM(use132 bool) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"DECCOLM: [%v]\", []string{strconv.FormatBool(use132)})\n\th.clearWrap()\n\tif err := h.ED(2); err != nil {\n\t\treturn err\n\t}\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\ttargetWidth := int16(80)\n\tif use132 {\n\t\ttargetWidth = 132\n\t}\n\tif info.Size.X < targetWidth {\n\t\tif err := SetConsoleScreenBufferSize(h.fd, COORD{targetWidth, info.Size.Y}); err != nil {\n\t\t\th.logf(\"set buffer failed: %v\", err)\n\t\t\treturn err\n\t\t}\n\t}\n\twindow := info.Window\n\twindow.Left = 0\n\twindow.Right = targetWidth - 1\n\tif err := SetConsoleWindowInfo(h.fd, true, window); err != nil {\n\t\th.logf(\"set window failed: %v\", err)\n\t\treturn err\n\t}\n\tif info.Size.X > targetWidth {\n\t\tif err := SetConsoleScreenBufferSize(h.fd, COORD{targetWidth, info.Size.Y}); err != nil {\n\t\t\th.logf(\"set buffer failed: %v\", err)\n\t\t\treturn err\n\t\t}\n\t}\n\treturn SetConsoleCursorPosition(h.fd, COORD{0, 0})\n}\n\nfunc (h *windowsAnsiEventHandler) ED(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"ED: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\n\t// [J  -- Erases from the cursor to the end of the screen, including the cursor position.\n\t// [1J -- Erases from the beginning of the screen to the cursor, including the cursor position.\n\t// [2J -- Erases the complete display. The cursor does not move.\n\t// Notes:\n\t// -- Clearing the entire buffer, versus just the Window, works best for Windows Consoles\n\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar start COORD\n\tvar end COORD\n\n\tswitch param {\n\tcase 0:\n\t\tstart = info.CursorPosition\n\t\tend = COORD{info.Size.X - 1, info.Size.Y - 1}\n\n\tcase 1:\n\t\tstart = COORD{0, 0}\n\t\tend = info.CursorPosition\n\n\tcase 2:\n\t\tstart = COORD{0, 0}\n\t\tend = COORD{info.Size.X - 1, info.Size.Y - 1}\n\t}\n\n\terr = h.clearRange(h.attributes, start, end)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If the whole buffer was cleared, move the window to the top while preserving\n\t// the window-relative cursor position.\n\tif param == 2 {\n\t\tpos := info.CursorPosition\n\t\twindow := info.Window\n\t\tpos.Y -= window.Top\n\t\twindow.Bottom -= window.Top\n\t\twindow.Top = 0\n\t\tif err := SetConsoleCursorPosition(h.fd, pos); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := SetConsoleWindowInfo(h.fd, true, window); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) EL(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"EL: [%v]\", strconv.Itoa(param))\n\th.clearWrap()\n\n\t// [K  -- Erases from the cursor to the end of the line, including the cursor position.\n\t// [1K -- Erases from the beginning of the line to the cursor, including the cursor position.\n\t// [2K -- Erases the complete line.\n\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar start COORD\n\tvar end COORD\n\n\tswitch param {\n\tcase 0:\n\t\tstart = info.CursorPosition\n\t\tend = COORD{info.Size.X, info.CursorPosition.Y}\n\n\tcase 1:\n\t\tstart = COORD{0, info.CursorPosition.Y}\n\t\tend = info.CursorPosition\n\n\tcase 2:\n\t\tstart = COORD{0, info.CursorPosition.Y}\n\t\tend = COORD{info.Size.X, info.CursorPosition.Y}\n\t}\n\n\terr = h.clearRange(h.attributes, start, end)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) IL(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"IL: [%v]\", strconv.Itoa(param))\n\th.clearWrap()\n\treturn h.insertLines(param)\n}\n\nfunc (h *windowsAnsiEventHandler) DL(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"DL: [%v]\", strconv.Itoa(param))\n\th.clearWrap()\n\treturn h.deleteLines(param)\n}\n\nfunc (h *windowsAnsiEventHandler) ICH(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"ICH: [%v]\", strconv.Itoa(param))\n\th.clearWrap()\n\treturn h.insertCharacters(param)\n}\n\nfunc (h *windowsAnsiEventHandler) DCH(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"DCH: [%v]\", strconv.Itoa(param))\n\th.clearWrap()\n\treturn h.deleteCharacters(param)\n}\n\nfunc (h *windowsAnsiEventHandler) SGR(params []int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\tstrings := []string{}\n\tfor _, v := range params {\n\t\tstrings = append(strings, strconv.Itoa(v))\n\t}\n\n\th.logf(\"SGR: [%v]\", strings)\n\n\tif len(params) <= 0 {\n\t\th.attributes = h.infoReset.Attributes\n\t\th.inverted = false\n\t} else {\n\t\tfor _, attr := range params {\n\n\t\t\tif attr == ansiterm.ANSI_SGR_RESET {\n\t\t\t\th.attributes = h.infoReset.Attributes\n\t\t\t\th.inverted = false\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\th.attributes, h.inverted = collectAnsiIntoWindowsAttributes(h.attributes, h.inverted, h.infoReset.Attributes, int16(attr))\n\t\t}\n\t}\n\n\tattributes := h.attributes\n\tif h.inverted {\n\t\tattributes = invertAttributes(attributes)\n\t}\n\terr := SetConsoleTextAttribute(h.fd, attributes)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) SU(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"SU: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.scrollUp(param)\n}\n\nfunc (h *windowsAnsiEventHandler) SD(param int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"SD: [%v]\", []string{strconv.Itoa(param)})\n\th.clearWrap()\n\treturn h.scrollDown(param)\n}\n\nfunc (h *windowsAnsiEventHandler) DA(params []string) error {\n\th.logf(\"DA: [%v]\", params)\n\t// DA cannot be implemented because it must send data on the VT100 input stream,\n\t// which is not available to go-ansiterm.\n\treturn nil\n}\n\nfunc (h *windowsAnsiEventHandler) DECSTBM(top int, bottom int) error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"DECSTBM: [%d, %d]\", top, bottom)\n\n\t// Windows is 0 indexed, Linux is 1 indexed\n\th.sr.top = int16(top - 1)\n\th.sr.bottom = int16(bottom - 1)\n\n\t// This command also moves the cursor to the origin.\n\th.clearWrap()\n\treturn h.CUP(1, 1)\n}\n\nfunc (h *windowsAnsiEventHandler) RI() error {\n\tif err := h.Flush(); err != nil {\n\t\treturn err\n\t}\n\th.logf(\"RI: []\")\n\th.clearWrap()\n\n\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsr := h.effectiveSr(info.Window)\n\tif info.CursorPosition.Y == sr.top {\n\t\treturn h.scrollDown(1)\n\t}\n\n\treturn h.moveCursorVertical(-1)\n}\n\nfunc (h *windowsAnsiEventHandler) IND() error {\n\th.logf(\"IND: []\")\n\treturn h.executeLF()\n}\n\nfunc (h *windowsAnsiEventHandler) Flush() error {\n\th.curInfo = nil\n\tif h.buffer.Len() > 0 {\n\t\th.logf(\"Flush: [%s]\", h.buffer.Bytes())\n\t\tif _, err := h.buffer.WriteTo(h.file); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif h.wrapNext && !h.drewMarginByte {\n\t\th.logf(\"Flush: drawing margin byte '%c'\", h.marginByte)\n\n\t\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tcharInfo := []CHAR_INFO{{UnicodeChar: uint16(h.marginByte), Attributes: info.Attributes}}\n\t\tsize := COORD{1, 1}\n\t\tposition := COORD{0, 0}\n\t\tregion := SMALL_RECT{Left: info.CursorPosition.X, Top: info.CursorPosition.Y, Right: info.CursorPosition.X, Bottom: info.CursorPosition.Y}\n\t\tif err := WriteConsoleOutput(h.fd, charInfo, size, position, &region); err != nil {\n\t\t\treturn err\n\t\t}\n\t\th.drewMarginByte = true\n\t}\n\treturn nil\n}\n\n// cacheConsoleInfo ensures that the current console screen information has been queried\n// since the last call to Flush(). It must be called before accessing h.curInfo or h.curPos.\nfunc (h *windowsAnsiEventHandler) getCurrentInfo() (COORD, *CONSOLE_SCREEN_BUFFER_INFO, error) {\n\tif h.curInfo == nil {\n\t\tinfo, err := GetConsoleScreenBufferInfo(h.fd)\n\t\tif err != nil {\n\t\t\treturn COORD{}, nil, err\n\t\t}\n\t\th.curInfo = info\n\t\th.curPos = info.CursorPosition\n\t}\n\treturn h.curPos, h.curInfo, nil\n}\n\nfunc (h *windowsAnsiEventHandler) updatePos(pos COORD) {\n\tif h.curInfo == nil {\n\t\tpanic(\"failed to call getCurrentInfo before calling updatePos\")\n\t}\n\th.curPos = pos\n}\n\n// clearWrap clears the state where the cursor is in the margin\n// waiting for the next character before wrapping the line. This must\n// be done before most operations that act on the cursor.\nfunc (h *windowsAnsiEventHandler) clearWrap() {\n\th.wrapNext = false\n\th.drewMarginByte = false\n}\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/.travis.yml",
    "content": "language: go\n\ngo:\n  - 1.6.x\n  - 1.7.x\n  - 1.8.x\n  - 1.9.x\n  - 1.10.x\n  - 1.11.x\n  - 1.12.x\n  - tip\n\n# Setting sudo access to false will let Travis CI use containers rather than\n# VMs to run the tests. For more details see:\n# - http://docs.travis-ci.com/user/workers/container-based-infrastructure/\n# - http://docs.travis-ci.com/user/workers/standard-infrastructure/\nsudo: false\n\nscript:\n  - make setup\n  - make test\n\nnotifications:\n  webhooks:\n    urls:\n      - https://webhooks.gitter.im/e/06e3328629952dabe3e0\n    on_success: change  # options: [always|never|change] default: always\n    on_failure: always  # options: [always|never|change] default: always\n    on_start: never     # options: [always|never|change] default: always\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/CHANGELOG.md",
    "content": "# 1.5.0 (2019-09-11)\n\n## Added\n\n- #103: Add basic fuzzing for `NewVersion()` (thanks @jesse-c)\n\n## Changed\n\n- #82: Clarify wildcard meaning in range constraints and update tests for it (thanks @greysteil)\n- #83: Clarify caret operator range for pre-1.0.0 dependencies (thanks @greysteil)\n- #72: Adding docs comment pointing to vert for a cli\n- #71: Update the docs on pre-release comparator handling\n- #89: Test with new go versions (thanks @thedevsaddam)\n- #87: Added $ to ValidPrerelease for better validation (thanks @jeremycarroll)\n\n## Fixed\n\n- #78: Fix unchecked error in example code (thanks @ravron)\n- #70: Fix the handling of pre-releases and the 0.0.0 release edge case\n- #97: Fixed copyright file for proper display on GitHub\n- #107: Fix handling prerelease when sorting alphanum and num \n- #109: Fixed where Validate sometimes returns wrong message on error\n\n# 1.4.2 (2018-04-10)\n\n## Changed\n- #72: Updated the docs to point to vert for a console appliaction\n- #71: Update the docs on pre-release comparator handling\n\n## Fixed\n- #70: Fix the handling of pre-releases and the 0.0.0 release edge case\n\n# 1.4.1 (2018-04-02)\n\n## Fixed\n- Fixed #64: Fix pre-release precedence issue (thanks @uudashr)\n\n# 1.4.0 (2017-10-04)\n\n## Changed\n- #61: Update NewVersion to parse ints with a 64bit int size (thanks @zknill)\n\n# 1.3.1 (2017-07-10)\n\n## Fixed\n- Fixed #57: number comparisons in prerelease sometimes inaccurate\n\n# 1.3.0 (2017-05-02)\n\n## Added\n- #45: Added json (un)marshaling support (thanks @mh-cbon)\n- Stability marker. See https://masterminds.github.io/stability/\n\n## Fixed\n- #51: Fix handling of single digit tilde constraint (thanks @dgodd)\n\n## Changed\n- #55: The godoc icon moved from png to svg\n\n# 1.2.3 (2017-04-03)\n\n## Fixed\n- #46: Fixed 0.x.x and 0.0.x in constraints being treated as *\n\n# Release 1.2.2 (2016-12-13)\n\n## Fixed\n- #34: Fixed issue where hyphen range was not working with pre-release parsing.\n\n# Release 1.2.1 (2016-11-28)\n\n## Fixed\n- #24: Fixed edge case issue where constraint \"> 0\" does not handle \"0.0.1-alpha\"\n  properly.\n\n# Release 1.2.0 (2016-11-04)\n\n## Added\n- #20: Added MustParse function for versions (thanks @adamreese)\n- #15: Added increment methods on versions (thanks @mh-cbon)\n\n## Fixed\n- Issue #21: Per the SemVer spec (section 9) a pre-release is unstable and\n  might not satisfy the intended compatibility. The change here ignores pre-releases\n  on constraint checks (e.g., ~ or ^) when a pre-release is not part of the\n  constraint. For example, `^1.2.3` will ignore pre-releases while\n  `^1.2.3-alpha` will include them.\n\n# Release 1.1.1 (2016-06-30)\n\n## Changed\n- Issue #9: Speed up version comparison performance (thanks @sdboyer)\n- Issue #8: Added benchmarks (thanks @sdboyer)\n- Updated Go Report Card URL to new location\n- Updated Readme to add code snippet formatting (thanks @mh-cbon)\n- Updating tagging to v[SemVer] structure for compatibility with other tools.\n\n# Release 1.1.0 (2016-03-11)\n\n- Issue #2: Implemented validation to provide reasons a versions failed a\n  constraint.\n\n# Release 1.0.1 (2015-12-31)\n\n- Fixed #1: * constraint failing on valid versions.\n\n# Release 1.0.0 (2015-10-20)\n\n- Initial release\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/LICENSE.txt",
    "content": "Copyright (C) 2014-2019, Matt Butcher and Matt Farina\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": "vendor/github.com/Masterminds/semver/Makefile",
    "content": ".PHONY: setup\nsetup:\n\tgo get -u gopkg.in/alecthomas/gometalinter.v1\n\tgometalinter.v1 --install\n\n.PHONY: test\ntest: validate lint\n\t@echo \"==> Running tests\"\n\tgo test -v\n\n.PHONY: validate\nvalidate:\n\t@echo \"==> Running static validations\"\n\t@gometalinter.v1 \\\n\t  --disable-all \\\n\t  --enable deadcode \\\n\t  --severity deadcode:error \\\n\t  --enable gofmt \\\n\t  --enable gosimple \\\n\t  --enable ineffassign \\\n\t  --enable misspell \\\n\t  --enable vet \\\n\t  --tests \\\n\t  --vendor \\\n\t  --deadline 60s \\\n\t  ./... || exit_code=1\n\n.PHONY: lint\nlint:\n\t@echo \"==> Running linters\"\n\t@gometalinter.v1 \\\n\t  --disable-all \\\n\t  --enable golint \\\n\t  --vendor \\\n\t  --deadline 60s \\\n\t  ./... || :\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/README.md",
    "content": "# SemVer\n\nThe `semver` package provides the ability to work with [Semantic Versions](http://semver.org) in Go. Specifically it provides the ability to:\n\n* Parse semantic versions\n* Sort semantic versions\n* Check if a semantic version fits within a set of constraints\n* Optionally work with a `v` prefix\n\n[![Stability:\nActive](https://masterminds.github.io/stability/active.svg)](https://masterminds.github.io/stability/active.html)\n[![Build Status](https://travis-ci.org/Masterminds/semver.svg)](https://travis-ci.org/Masterminds/semver) [![Build status](https://ci.appveyor.com/api/projects/status/jfk66lib7hb985k8/branch/master?svg=true&passingText=windows%20build%20passing&failingText=windows%20build%20failing)](https://ci.appveyor.com/project/mattfarina/semver/branch/master) [![GoDoc](https://godoc.org/github.com/Masterminds/semver?status.svg)](https://godoc.org/github.com/Masterminds/semver) [![Go Report Card](https://goreportcard.com/badge/github.com/Masterminds/semver)](https://goreportcard.com/report/github.com/Masterminds/semver)\n\nIf you are looking for a command line tool for version comparisons please see\n[vert](https://github.com/Masterminds/vert) which uses this library.\n\n## Parsing Semantic Versions\n\nTo parse a semantic version use the `NewVersion` function. For example,\n\n```go\n    v, err := semver.NewVersion(\"1.2.3-beta.1+build345\")\n```\n\nIf there is an error the version wasn't parseable. The version object has methods\nto get the parts of the version, compare it to other versions, convert the\nversion back into a string, and get the original string. For more details\nplease see the [documentation](https://godoc.org/github.com/Masterminds/semver).\n\n## Sorting Semantic Versions\n\nA set of versions can be sorted using the [`sort`](https://golang.org/pkg/sort/)\npackage from the standard library. For example,\n\n```go\n    raw := []string{\"1.2.3\", \"1.0\", \"1.3\", \"2\", \"0.4.2\",}\n    vs := make([]*semver.Version, len(raw))\n\tfor i, r := range raw {\n\t\tv, err := semver.NewVersion(r)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error parsing version: %s\", err)\n\t\t}\n\n\t\tvs[i] = v\n\t}\n\n\tsort.Sort(semver.Collection(vs))\n```\n\n## Checking Version Constraints\n\nChecking a version against version constraints is one of the most featureful\nparts of the package.\n\n```go\n    c, err := semver.NewConstraint(\">= 1.2.3\")\n    if err != nil {\n        // Handle constraint not being parseable.\n    }\n\n    v, _ := semver.NewVersion(\"1.3\")\n    if err != nil {\n        // Handle version not being parseable.\n    }\n    // Check if the version meets the constraints. The a variable will be true.\n    a := c.Check(v)\n```\n\n## Basic Comparisons\n\nThere are two elements to the comparisons. First, a comparison string is a list\nof comma separated and comparisons. These are then separated by || separated or\ncomparisons. For example, `\">= 1.2, < 3.0.0 || >= 4.2.3\"` is looking for a\ncomparison that's greater than or equal to 1.2 and less than 3.0.0 or is\ngreater than or equal to 4.2.3.\n\nThe basic comparisons are:\n\n* `=`: equal (aliased to no operator)\n* `!=`: not equal\n* `>`: greater than\n* `<`: less than\n* `>=`: greater than or equal to\n* `<=`: less than or equal to\n\n## Working With Pre-release Versions\n\nPre-releases, for those not familiar with them, are used for software releases\nprior to stable or generally available releases. Examples of pre-releases include\ndevelopment, alpha, beta, and release candidate releases. A pre-release may be\na version such as `1.2.3-beta.1` while the stable release would be `1.2.3`. In the\norder of precidence, pre-releases come before their associated releases. In this\nexample `1.2.3-beta.1 < 1.2.3`.\n\nAccording to the Semantic Version specification pre-releases may not be\nAPI compliant with their release counterpart. It says,\n\n> A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version.\n\nSemVer comparisons without a pre-release comparator will skip pre-release versions.\nFor example, `>=1.2.3` will skip pre-releases when looking at a list of releases\nwhile `>=1.2.3-0` will evaluate and find pre-releases.\n\nThe reason for the `0` as a pre-release version in the example comparison is\nbecause pre-releases can only contain ASCII alphanumerics and hyphens (along with\n`.` separators), per the spec. Sorting happens in ASCII sort order, again per the spec. The lowest character is a `0` in ASCII sort order (see an [ASCII Table](http://www.asciitable.com/))\n\nUnderstanding ASCII sort ordering is important because A-Z comes before a-z. That\nmeans `>=1.2.3-BETA` will return `1.2.3-alpha`. What you might expect from case\nsensitivity doesn't apply here. This is due to ASCII sort ordering which is what\nthe spec specifies.\n\n## Hyphen Range Comparisons\n\nThere are multiple methods to handle ranges and the first is hyphens ranges.\nThese look like:\n\n* `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5`\n* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5`\n\n## Wildcards In Comparisons\n\nThe `x`, `X`, and `*` characters can be used as a wildcard character. This works\nfor all comparison operators. When used on the `=` operator it falls\nback to the pack level comparison (see tilde below). For example,\n\n* `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n* `>= 1.2.x` is equivalent to `>= 1.2.0`\n* `<= 2.x` is equivalent to `< 3`\n* `*` is equivalent to `>= 0.0.0`\n\n## Tilde Range Comparisons (Patch)\n\nThe tilde (`~`) comparison operator is for patch level ranges when a minor\nversion is specified and major level changes when the minor number is missing.\nFor example,\n\n* `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0`\n* `~1` is equivalent to `>= 1, < 2`\n* `~2.3` is equivalent to `>= 2.3, < 2.4`\n* `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n* `~1.x` is equivalent to `>= 1, < 2`\n\n## Caret Range Comparisons (Major)\n\nThe caret (`^`) comparison operator is for major level changes. This is useful\nwhen comparisons of API versions as a major change is API breaking. For example,\n\n* `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`\n* `^0.0.1` is equivalent to `>= 0.0.1, < 1.0.0`\n* `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`\n* `^2.3` is equivalent to `>= 2.3, < 3`\n* `^2.x` is equivalent to `>= 2.0.0, < 3`\n\n# Validation\n\nIn addition to testing a version against a constraint, a version can be validated\nagainst a constraint. When validation fails a slice of errors containing why a\nversion didn't meet the constraint is returned. For example,\n\n```go\n    c, err := semver.NewConstraint(\"<= 1.2.3, >= 1.4\")\n    if err != nil {\n        // Handle constraint not being parseable.\n    }\n\n    v, _ := semver.NewVersion(\"1.3\")\n    if err != nil {\n        // Handle version not being parseable.\n    }\n\n    // Validate a version against a constraint.\n    a, msgs := c.Validate(v)\n    // a is false\n    for _, m := range msgs {\n        fmt.Println(m)\n\n        // Loops over the errors which would read\n        // \"1.3 is greater than 1.2.3\"\n        // \"1.3 is less than 1.4\"\n    }\n```\n\n# Fuzzing\n\n [dvyukov/go-fuzz](https://github.com/dvyukov/go-fuzz) is used for fuzzing.\n\n1. `go-fuzz-build`\n2. `go-fuzz -workdir=fuzz`\n\n# Contribute\n\nIf you find an issue or want to contribute please file an [issue](https://github.com/Masterminds/semver/issues)\nor [create a pull request](https://github.com/Masterminds/semver/pulls).\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/appveyor.yml",
    "content": "version: build-{build}.{branch}\n\nclone_folder: C:\\gopath\\src\\github.com\\Masterminds\\semver\nshallow_clone: true\n\nenvironment:\n  GOPATH: C:\\gopath\n\nplatform:\n  - x64\n\ninstall:\n  - go version\n  - go env\n  - go get -u gopkg.in/alecthomas/gometalinter.v1\n  - set PATH=%PATH%;%GOPATH%\\bin\n  - gometalinter.v1.exe --install\n\nbuild_script:\n  - go install -v ./...\n\ntest_script:\n  - \"gometalinter.v1 \\\n    --disable-all \\\n    --enable deadcode \\\n    --severity deadcode:error \\\n    --enable gofmt \\\n    --enable gosimple \\\n    --enable ineffassign \\\n    --enable misspell \\\n    --enable vet \\\n    --tests \\\n    --vendor \\\n    --deadline 60s \\\n    ./... || exit_code=1\"\n  - \"gometalinter.v1 \\\n    --disable-all \\\n    --enable golint \\\n    --vendor \\\n    --deadline 60s \\\n    ./... || :\"\n  - go test -v\n\ndeploy: off\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/collection.go",
    "content": "package semver\n\n// Collection is a collection of Version instances and implements the sort\n// interface. See the sort package for more details.\n// https://golang.org/pkg/sort/\ntype Collection []*Version\n\n// Len returns the length of a collection. The number of Version instances\n// on the slice.\nfunc (c Collection) Len() int {\n\treturn len(c)\n}\n\n// Less is needed for the sort interface to compare two Version objects on the\n// slice. If checks if one is less than the other.\nfunc (c Collection) Less(i, j int) bool {\n\treturn c[i].LessThan(c[j])\n}\n\n// Swap is needed for the sort interface to replace the Version objects\n// at two different positions in the slice.\nfunc (c Collection) Swap(i, j int) {\n\tc[i], c[j] = c[j], c[i]\n}\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/constraints.go",
    "content": "package semver\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// Constraints is one or more constraint that a semantic version can be\n// checked against.\ntype Constraints struct {\n\tconstraints [][]*constraint\n}\n\n// NewConstraint returns a Constraints instance that a Version instance can\n// be checked against. If there is a parse error it will be returned.\nfunc NewConstraint(c string) (*Constraints, error) {\n\n\t// Rewrite - ranges into a comparison operation.\n\tc = rewriteRange(c)\n\n\tors := strings.Split(c, \"||\")\n\tor := make([][]*constraint, len(ors))\n\tfor k, v := range ors {\n\t\tcs := strings.Split(v, \",\")\n\t\tresult := make([]*constraint, len(cs))\n\t\tfor i, s := range cs {\n\t\t\tpc, err := parseConstraint(s)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tresult[i] = pc\n\t\t}\n\t\tor[k] = result\n\t}\n\n\to := &Constraints{constraints: or}\n\treturn o, nil\n}\n\n// Check tests if a version satisfies the constraints.\nfunc (cs Constraints) Check(v *Version) bool {\n\t// loop over the ORs and check the inner ANDs\n\tfor _, o := range cs.constraints {\n\t\tjoy := true\n\t\tfor _, c := range o {\n\t\t\tif !c.check(v) {\n\t\t\t\tjoy = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif joy {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Validate checks if a version satisfies a constraint. If not a slice of\n// reasons for the failure are returned in addition to a bool.\nfunc (cs Constraints) Validate(v *Version) (bool, []error) {\n\t// loop over the ORs and check the inner ANDs\n\tvar e []error\n\n\t// Capture the prerelease message only once. When it happens the first time\n\t// this var is marked\n\tvar prerelesase bool\n\tfor _, o := range cs.constraints {\n\t\tjoy := true\n\t\tfor _, c := range o {\n\t\t\t// Before running the check handle the case there the version is\n\t\t\t// a prerelease and the check is not searching for prereleases.\n\t\t\tif c.con.pre == \"\" && v.pre != \"\" {\n\t\t\t\tif !prerelesase {\n\t\t\t\t\tem := fmt.Errorf(\"%s is a prerelease version and the constraint is only looking for release versions\", v)\n\t\t\t\t\te = append(e, em)\n\t\t\t\t\tprerelesase = true\n\t\t\t\t}\n\t\t\t\tjoy = false\n\n\t\t\t} else {\n\n\t\t\t\tif !c.check(v) {\n\t\t\t\t\tem := fmt.Errorf(c.msg, v, c.orig)\n\t\t\t\t\te = append(e, em)\n\t\t\t\t\tjoy = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif joy {\n\t\t\treturn true, []error{}\n\t\t}\n\t}\n\n\treturn false, e\n}\n\nvar constraintOps map[string]cfunc\nvar constraintMsg map[string]string\nvar constraintRegex *regexp.Regexp\n\nfunc init() {\n\tconstraintOps = map[string]cfunc{\n\t\t\"\":   constraintTildeOrEqual,\n\t\t\"=\":  constraintTildeOrEqual,\n\t\t\"!=\": constraintNotEqual,\n\t\t\">\":  constraintGreaterThan,\n\t\t\"<\":  constraintLessThan,\n\t\t\">=\": constraintGreaterThanEqual,\n\t\t\"=>\": constraintGreaterThanEqual,\n\t\t\"<=\": constraintLessThanEqual,\n\t\t\"=<\": constraintLessThanEqual,\n\t\t\"~\":  constraintTilde,\n\t\t\"~>\": constraintTilde,\n\t\t\"^\":  constraintCaret,\n\t}\n\n\tconstraintMsg = map[string]string{\n\t\t\"\":   \"%s is not equal to %s\",\n\t\t\"=\":  \"%s is not equal to %s\",\n\t\t\"!=\": \"%s is equal to %s\",\n\t\t\">\":  \"%s is less than or equal to %s\",\n\t\t\"<\":  \"%s is greater than or equal to %s\",\n\t\t\">=\": \"%s is less than %s\",\n\t\t\"=>\": \"%s is less than %s\",\n\t\t\"<=\": \"%s is greater than %s\",\n\t\t\"=<\": \"%s is greater than %s\",\n\t\t\"~\":  \"%s does not have same major and minor version as %s\",\n\t\t\"~>\": \"%s does not have same major and minor version as %s\",\n\t\t\"^\":  \"%s does not have same major version as %s\",\n\t}\n\n\tops := make([]string, 0, len(constraintOps))\n\tfor k := range constraintOps {\n\t\tops = append(ops, regexp.QuoteMeta(k))\n\t}\n\n\tconstraintRegex = regexp.MustCompile(fmt.Sprintf(\n\t\t`^\\s*(%s)\\s*(%s)\\s*$`,\n\t\tstrings.Join(ops, \"|\"),\n\t\tcvRegex))\n\n\tconstraintRangeRegex = regexp.MustCompile(fmt.Sprintf(\n\t\t`\\s*(%s)\\s+-\\s+(%s)\\s*`,\n\t\tcvRegex, cvRegex))\n}\n\n// An individual constraint\ntype constraint struct {\n\t// The callback function for the restraint. It performs the logic for\n\t// the constraint.\n\tfunction cfunc\n\n\tmsg string\n\n\t// The version used in the constraint check. For example, if a constraint\n\t// is '<= 2.0.0' the con a version instance representing 2.0.0.\n\tcon *Version\n\n\t// The original parsed version (e.g., 4.x from != 4.x)\n\torig string\n\n\t// When an x is used as part of the version (e.g., 1.x)\n\tminorDirty bool\n\tdirty      bool\n\tpatchDirty bool\n}\n\n// Check if a version meets the constraint\nfunc (c *constraint) check(v *Version) bool {\n\treturn c.function(v, c)\n}\n\ntype cfunc func(v *Version, c *constraint) bool\n\nfunc parseConstraint(c string) (*constraint, error) {\n\tm := constraintRegex.FindStringSubmatch(c)\n\tif m == nil {\n\t\treturn nil, fmt.Errorf(\"improper constraint: %s\", c)\n\t}\n\n\tver := m[2]\n\torig := ver\n\tminorDirty := false\n\tpatchDirty := false\n\tdirty := false\n\tif isX(m[3]) {\n\t\tver = \"0.0.0\"\n\t\tdirty = true\n\t} else if isX(strings.TrimPrefix(m[4], \".\")) || m[4] == \"\" {\n\t\tminorDirty = true\n\t\tdirty = true\n\t\tver = fmt.Sprintf(\"%s.0.0%s\", m[3], m[6])\n\t} else if isX(strings.TrimPrefix(m[5], \".\")) {\n\t\tdirty = true\n\t\tpatchDirty = true\n\t\tver = fmt.Sprintf(\"%s%s.0%s\", m[3], m[4], m[6])\n\t}\n\n\tcon, err := NewVersion(ver)\n\tif err != nil {\n\n\t\t// The constraintRegex should catch any regex parsing errors. So,\n\t\t// we should never get here.\n\t\treturn nil, errors.New(\"constraint Parser Error\")\n\t}\n\n\tcs := &constraint{\n\t\tfunction:   constraintOps[m[1]],\n\t\tmsg:        constraintMsg[m[1]],\n\t\tcon:        con,\n\t\torig:       orig,\n\t\tminorDirty: minorDirty,\n\t\tpatchDirty: patchDirty,\n\t\tdirty:      dirty,\n\t}\n\treturn cs, nil\n}\n\n// Constraint functions\nfunc constraintNotEqual(v *Version, c *constraint) bool {\n\tif c.dirty {\n\n\t\t// If there is a pre-release on the version but the constraint isn't looking\n\t\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t\t// more details.\n\t\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\t\treturn false\n\t\t}\n\n\t\tif c.con.Major() != v.Major() {\n\t\t\treturn true\n\t\t}\n\t\tif c.con.Minor() != v.Minor() && !c.minorDirty {\n\t\t\treturn true\n\t\t} else if c.minorDirty {\n\t\t\treturn false\n\t\t}\n\n\t\treturn false\n\t}\n\n\treturn !v.Equal(c.con)\n}\n\nfunc constraintGreaterThan(v *Version, c *constraint) bool {\n\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\treturn v.Compare(c.con) == 1\n}\n\nfunc constraintLessThan(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif !c.dirty {\n\t\treturn v.Compare(c.con) < 0\n\t}\n\n\tif v.Major() > c.con.Major() {\n\t\treturn false\n\t} else if v.Minor() > c.con.Minor() && !c.minorDirty {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc constraintGreaterThanEqual(v *Version, c *constraint) bool {\n\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\treturn v.Compare(c.con) >= 0\n}\n\nfunc constraintLessThanEqual(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif !c.dirty {\n\t\treturn v.Compare(c.con) <= 0\n\t}\n\n\tif v.Major() > c.con.Major() {\n\t\treturn false\n\t} else if v.Minor() > c.con.Minor() && !c.minorDirty {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// ~*, ~>* --> >= 0.0.0 (any)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0, <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0, <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0, <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3, <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0, <1.3.0\nfunc constraintTilde(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif v.LessThan(c.con) {\n\t\treturn false\n\t}\n\n\t// ~0.0.0 is a special case where all constraints are accepted. It's\n\t// equivalent to >= 0.0.0.\n\tif c.con.Major() == 0 && c.con.Minor() == 0 && c.con.Patch() == 0 &&\n\t\t!c.minorDirty && !c.patchDirty {\n\t\treturn true\n\t}\n\n\tif v.Major() != c.con.Major() {\n\t\treturn false\n\t}\n\n\tif v.Minor() != c.con.Minor() && !c.minorDirty {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// When there is a .x (dirty) status it automatically opts in to ~. Otherwise\n// it's a straight =\nfunc constraintTildeOrEqual(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif c.dirty {\n\t\tc.msg = constraintMsg[\"~\"]\n\t\treturn constraintTilde(v, c)\n\t}\n\n\treturn v.Equal(c.con)\n}\n\n// ^* --> (any)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0, <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0, <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0, <2.0.0\n// ^1.2.3 --> >=1.2.3, <2.0.0\n// ^1.2.0 --> >=1.2.0, <2.0.0\nfunc constraintCaret(v *Version, c *constraint) bool {\n\t// If there is a pre-release on the version but the constraint isn't looking\n\t// for them assume that pre-releases are not compatible. See issue 21 for\n\t// more details.\n\tif v.Prerelease() != \"\" && c.con.Prerelease() == \"\" {\n\t\treturn false\n\t}\n\n\tif v.LessThan(c.con) {\n\t\treturn false\n\t}\n\n\tif v.Major() != c.con.Major() {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nvar constraintRangeRegex *regexp.Regexp\n\nconst cvRegex string = `v?([0-9|x|X|\\*]+)(\\.[0-9|x|X|\\*]+)?(\\.[0-9|x|X|\\*]+)?` +\n\t`(-([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?` +\n\t`(\\+([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?`\n\nfunc isX(x string) bool {\n\tswitch x {\n\tcase \"x\", \"*\", \"X\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc rewriteRange(i string) string {\n\tm := constraintRangeRegex.FindAllStringSubmatch(i, -1)\n\tif m == nil {\n\t\treturn i\n\t}\n\to := i\n\tfor _, v := range m {\n\t\tt := fmt.Sprintf(\">= %s, <= %s\", v[1], v[11])\n\t\to = strings.Replace(o, v[0], t, 1)\n\t}\n\n\treturn o\n}\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/doc.go",
    "content": "/*\nPackage semver provides the ability to work with Semantic Versions (http://semver.org) in Go.\n\nSpecifically it provides the ability to:\n\n    * Parse semantic versions\n    * Sort semantic versions\n    * Check if a semantic version fits within a set of constraints\n    * Optionally work with a `v` prefix\n\nParsing Semantic Versions\n\nTo parse a semantic version use the `NewVersion` function. For example,\n\n    v, err := semver.NewVersion(\"1.2.3-beta.1+build345\")\n\nIf there is an error the version wasn't parseable. The version object has methods\nto get the parts of the version, compare it to other versions, convert the\nversion back into a string, and get the original string. For more details\nplease see the documentation at https://godoc.org/github.com/Masterminds/semver.\n\nSorting Semantic Versions\n\nA set of versions can be sorted using the `sort` package from the standard library.\nFor example,\n\n    raw := []string{\"1.2.3\", \"1.0\", \"1.3\", \"2\", \"0.4.2\",}\n    vs := make([]*semver.Version, len(raw))\n\tfor i, r := range raw {\n\t\tv, err := semver.NewVersion(r)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Error parsing version: %s\", err)\n\t\t}\n\n\t\tvs[i] = v\n\t}\n\n\tsort.Sort(semver.Collection(vs))\n\nChecking Version Constraints\n\nChecking a version against version constraints is one of the most featureful\nparts of the package.\n\n    c, err := semver.NewConstraint(\">= 1.2.3\")\n    if err != nil {\n        // Handle constraint not being parseable.\n    }\n\n    v, err := semver.NewVersion(\"1.3\")\n    if err != nil {\n        // Handle version not being parseable.\n    }\n    // Check if the version meets the constraints. The a variable will be true.\n    a := c.Check(v)\n\nBasic Comparisons\n\nThere are two elements to the comparisons. First, a comparison string is a list\nof comma separated and comparisons. These are then separated by || separated or\ncomparisons. For example, `\">= 1.2, < 3.0.0 || >= 4.2.3\"` is looking for a\ncomparison that's greater than or equal to 1.2 and less than 3.0.0 or is\ngreater than or equal to 4.2.3.\n\nThe basic comparisons are:\n\n    * `=`: equal (aliased to no operator)\n    * `!=`: not equal\n    * `>`: greater than\n    * `<`: less than\n    * `>=`: greater than or equal to\n    * `<=`: less than or equal to\n\nHyphen Range Comparisons\n\nThere are multiple methods to handle ranges and the first is hyphens ranges.\nThese look like:\n\n    * `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5`\n    * `2.3.4 - 4.5` which is equivalent to `>= 2.3.4, <= 4.5`\n\nWildcards In Comparisons\n\nThe `x`, `X`, and `*` characters can be used as a wildcard character. This works\nfor all comparison operators. When used on the `=` operator it falls\nback to the pack level comparison (see tilde below). For example,\n\n    * `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n    * `>= 1.2.x` is equivalent to `>= 1.2.0`\n    * `<= 2.x` is equivalent to `<= 3`\n    * `*` is equivalent to `>= 0.0.0`\n\nTilde Range Comparisons (Patch)\n\nThe tilde (`~`) comparison operator is for patch level ranges when a minor\nversion is specified and major level changes when the minor number is missing.\nFor example,\n\n    * `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0`\n    * `~1` is equivalent to `>= 1, < 2`\n    * `~2.3` is equivalent to `>= 2.3, < 2.4`\n    * `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0`\n    * `~1.x` is equivalent to `>= 1, < 2`\n\nCaret Range Comparisons (Major)\n\nThe caret (`^`) comparison operator is for major level changes. This is useful\nwhen comparisons of API versions as a major change is API breaking. For example,\n\n    * `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0`\n    * `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0`\n    * `^2.3` is equivalent to `>= 2.3, < 3`\n    * `^2.x` is equivalent to `>= 2.0.0, < 3`\n*/\npackage semver\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/version.go",
    "content": "package semver\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// The compiled version of the regex created at init() is cached here so it\n// only needs to be created once.\nvar versionRegex *regexp.Regexp\nvar validPrereleaseRegex *regexp.Regexp\n\nvar (\n\t// ErrInvalidSemVer is returned a version is found to be invalid when\n\t// being parsed.\n\tErrInvalidSemVer = errors.New(\"Invalid Semantic Version\")\n\n\t// ErrInvalidMetadata is returned when the metadata is an invalid format\n\tErrInvalidMetadata = errors.New(\"Invalid Metadata string\")\n\n\t// ErrInvalidPrerelease is returned when the pre-release is an invalid format\n\tErrInvalidPrerelease = errors.New(\"Invalid Prerelease string\")\n)\n\n// SemVerRegex is the regular expression used to parse a semantic version.\nconst SemVerRegex string = `v?([0-9]+)(\\.[0-9]+)?(\\.[0-9]+)?` +\n\t`(-([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?` +\n\t`(\\+([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*))?`\n\n// ValidPrerelease is the regular expression which validates\n// both prerelease and metadata values.\nconst ValidPrerelease string = `^([0-9A-Za-z\\-]+(\\.[0-9A-Za-z\\-]+)*)$`\n\n// Version represents a single semantic version.\ntype Version struct {\n\tmajor, minor, patch int64\n\tpre                 string\n\tmetadata            string\n\toriginal            string\n}\n\nfunc init() {\n\tversionRegex = regexp.MustCompile(\"^\" + SemVerRegex + \"$\")\n\tvalidPrereleaseRegex = regexp.MustCompile(ValidPrerelease)\n}\n\n// NewVersion parses a given version and returns an instance of Version or\n// an error if unable to parse the version.\nfunc NewVersion(v string) (*Version, error) {\n\tm := versionRegex.FindStringSubmatch(v)\n\tif m == nil {\n\t\treturn nil, ErrInvalidSemVer\n\t}\n\n\tsv := &Version{\n\t\tmetadata: m[8],\n\t\tpre:      m[5],\n\t\toriginal: v,\n\t}\n\n\tvar temp int64\n\ttemp, err := strconv.ParseInt(m[1], 10, 64)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error parsing version segment: %s\", err)\n\t}\n\tsv.major = temp\n\n\tif m[2] != \"\" {\n\t\ttemp, err = strconv.ParseInt(strings.TrimPrefix(m[2], \".\"), 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error parsing version segment: %s\", err)\n\t\t}\n\t\tsv.minor = temp\n\t} else {\n\t\tsv.minor = 0\n\t}\n\n\tif m[3] != \"\" {\n\t\ttemp, err = strconv.ParseInt(strings.TrimPrefix(m[3], \".\"), 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error parsing version segment: %s\", err)\n\t\t}\n\t\tsv.patch = temp\n\t} else {\n\t\tsv.patch = 0\n\t}\n\n\treturn sv, nil\n}\n\n// MustParse parses a given version and panics on error.\nfunc MustParse(v string) *Version {\n\tsv, err := NewVersion(v)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn sv\n}\n\n// String converts a Version object to a string.\n// Note, if the original version contained a leading v this version will not.\n// See the Original() method to retrieve the original value. Semantic Versions\n// don't contain a leading v per the spec. Instead it's optional on\n// implementation.\nfunc (v *Version) String() string {\n\tvar buf bytes.Buffer\n\n\tfmt.Fprintf(&buf, \"%d.%d.%d\", v.major, v.minor, v.patch)\n\tif v.pre != \"\" {\n\t\tfmt.Fprintf(&buf, \"-%s\", v.pre)\n\t}\n\tif v.metadata != \"\" {\n\t\tfmt.Fprintf(&buf, \"+%s\", v.metadata)\n\t}\n\n\treturn buf.String()\n}\n\n// Original returns the original value passed in to be parsed.\nfunc (v *Version) Original() string {\n\treturn v.original\n}\n\n// Major returns the major version.\nfunc (v *Version) Major() int64 {\n\treturn v.major\n}\n\n// Minor returns the minor version.\nfunc (v *Version) Minor() int64 {\n\treturn v.minor\n}\n\n// Patch returns the patch version.\nfunc (v *Version) Patch() int64 {\n\treturn v.patch\n}\n\n// Prerelease returns the pre-release version.\nfunc (v *Version) Prerelease() string {\n\treturn v.pre\n}\n\n// Metadata returns the metadata on the version.\nfunc (v *Version) Metadata() string {\n\treturn v.metadata\n}\n\n// originalVPrefix returns the original 'v' prefix if any.\nfunc (v *Version) originalVPrefix() string {\n\n\t// Note, only lowercase v is supported as a prefix by the parser.\n\tif v.original != \"\" && v.original[:1] == \"v\" {\n\t\treturn v.original[:1]\n\t}\n\treturn \"\"\n}\n\n// IncPatch produces the next patch version.\n// If the current version does not have prerelease/metadata information,\n// it unsets metadata and prerelease values, increments patch number.\n// If the current version has any of prerelease or metadata information,\n// it unsets both values and keeps curent patch value\nfunc (v Version) IncPatch() Version {\n\tvNext := v\n\t// according to http://semver.org/#spec-item-9\n\t// Pre-release versions have a lower precedence than the associated normal version.\n\t// according to http://semver.org/#spec-item-10\n\t// Build metadata SHOULD be ignored when determining version precedence.\n\tif v.pre != \"\" {\n\t\tvNext.metadata = \"\"\n\t\tvNext.pre = \"\"\n\t} else {\n\t\tvNext.metadata = \"\"\n\t\tvNext.pre = \"\"\n\t\tvNext.patch = v.patch + 1\n\t}\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext\n}\n\n// IncMinor produces the next minor version.\n// Sets patch to 0.\n// Increments minor number.\n// Unsets metadata.\n// Unsets prerelease status.\nfunc (v Version) IncMinor() Version {\n\tvNext := v\n\tvNext.metadata = \"\"\n\tvNext.pre = \"\"\n\tvNext.patch = 0\n\tvNext.minor = v.minor + 1\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext\n}\n\n// IncMajor produces the next major version.\n// Sets patch to 0.\n// Sets minor to 0.\n// Increments major number.\n// Unsets metadata.\n// Unsets prerelease status.\nfunc (v Version) IncMajor() Version {\n\tvNext := v\n\tvNext.metadata = \"\"\n\tvNext.pre = \"\"\n\tvNext.patch = 0\n\tvNext.minor = 0\n\tvNext.major = v.major + 1\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext\n}\n\n// SetPrerelease defines the prerelease value.\n// Value must not include the required 'hypen' prefix.\nfunc (v Version) SetPrerelease(prerelease string) (Version, error) {\n\tvNext := v\n\tif len(prerelease) > 0 && !validPrereleaseRegex.MatchString(prerelease) {\n\t\treturn vNext, ErrInvalidPrerelease\n\t}\n\tvNext.pre = prerelease\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext, nil\n}\n\n// SetMetadata defines metadata value.\n// Value must not include the required 'plus' prefix.\nfunc (v Version) SetMetadata(metadata string) (Version, error) {\n\tvNext := v\n\tif len(metadata) > 0 && !validPrereleaseRegex.MatchString(metadata) {\n\t\treturn vNext, ErrInvalidMetadata\n\t}\n\tvNext.metadata = metadata\n\tvNext.original = v.originalVPrefix() + \"\" + vNext.String()\n\treturn vNext, nil\n}\n\n// LessThan tests if one version is less than another one.\nfunc (v *Version) LessThan(o *Version) bool {\n\treturn v.Compare(o) < 0\n}\n\n// GreaterThan tests if one version is greater than another one.\nfunc (v *Version) GreaterThan(o *Version) bool {\n\treturn v.Compare(o) > 0\n}\n\n// Equal tests if two versions are equal to each other.\n// Note, versions can be equal with different metadata since metadata\n// is not considered part of the comparable version.\nfunc (v *Version) Equal(o *Version) bool {\n\treturn v.Compare(o) == 0\n}\n\n// Compare compares this version to another one. It returns -1, 0, or 1 if\n// the version smaller, equal, or larger than the other version.\n//\n// Versions are compared by X.Y.Z. Build metadata is ignored. Prerelease is\n// lower than the version without a prerelease.\nfunc (v *Version) Compare(o *Version) int {\n\t// Compare the major, minor, and patch version for differences. If a\n\t// difference is found return the comparison.\n\tif d := compareSegment(v.Major(), o.Major()); d != 0 {\n\t\treturn d\n\t}\n\tif d := compareSegment(v.Minor(), o.Minor()); d != 0 {\n\t\treturn d\n\t}\n\tif d := compareSegment(v.Patch(), o.Patch()); d != 0 {\n\t\treturn d\n\t}\n\n\t// At this point the major, minor, and patch versions are the same.\n\tps := v.pre\n\tpo := o.Prerelease()\n\n\tif ps == \"\" && po == \"\" {\n\t\treturn 0\n\t}\n\tif ps == \"\" {\n\t\treturn 1\n\t}\n\tif po == \"\" {\n\t\treturn -1\n\t}\n\n\treturn comparePrerelease(ps, po)\n}\n\n// UnmarshalJSON implements JSON.Unmarshaler interface.\nfunc (v *Version) UnmarshalJSON(b []byte) error {\n\tvar s string\n\tif err := json.Unmarshal(b, &s); err != nil {\n\t\treturn err\n\t}\n\ttemp, err := NewVersion(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tv.major = temp.major\n\tv.minor = temp.minor\n\tv.patch = temp.patch\n\tv.pre = temp.pre\n\tv.metadata = temp.metadata\n\tv.original = temp.original\n\ttemp = nil\n\treturn nil\n}\n\n// MarshalJSON implements JSON.Marshaler interface.\nfunc (v *Version) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(v.String())\n}\n\nfunc compareSegment(v, o int64) int {\n\tif v < o {\n\t\treturn -1\n\t}\n\tif v > o {\n\t\treturn 1\n\t}\n\n\treturn 0\n}\n\nfunc comparePrerelease(v, o string) int {\n\n\t// split the prelease versions by their part. The separator, per the spec,\n\t// is a .\n\tsparts := strings.Split(v, \".\")\n\toparts := strings.Split(o, \".\")\n\n\t// Find the longer length of the parts to know how many loop iterations to\n\t// go through.\n\tslen := len(sparts)\n\tolen := len(oparts)\n\n\tl := slen\n\tif olen > slen {\n\t\tl = olen\n\t}\n\n\t// Iterate over each part of the prereleases to compare the differences.\n\tfor i := 0; i < l; i++ {\n\t\t// Since the lentgh of the parts can be different we need to create\n\t\t// a placeholder. This is to avoid out of bounds issues.\n\t\tstemp := \"\"\n\t\tif i < slen {\n\t\t\tstemp = sparts[i]\n\t\t}\n\n\t\totemp := \"\"\n\t\tif i < olen {\n\t\t\totemp = oparts[i]\n\t\t}\n\n\t\td := comparePrePart(stemp, otemp)\n\t\tif d != 0 {\n\t\t\treturn d\n\t\t}\n\t}\n\n\t// Reaching here means two versions are of equal value but have different\n\t// metadata (the part following a +). They are not identical in string form\n\t// but the version comparison finds them to be equal.\n\treturn 0\n}\n\nfunc comparePrePart(s, o string) int {\n\t// Fastpath if they are equal\n\tif s == o {\n\t\treturn 0\n\t}\n\n\t// When s or o are empty we can use the other in an attempt to determine\n\t// the response.\n\tif s == \"\" {\n\t\tif o != \"\" {\n\t\t\treturn -1\n\t\t}\n\t\treturn 1\n\t}\n\n\tif o == \"\" {\n\t\tif s != \"\" {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\n\t// When comparing strings \"99\" is greater than \"103\". To handle\n\t// cases like this we need to detect numbers and compare them. According\n\t// to the semver spec, numbers are always positive. If there is a - at the\n\t// start like -99 this is to be evaluated as an alphanum. numbers always\n\t// have precedence over alphanum. Parsing as Uints because negative numbers\n\t// are ignored.\n\n\toi, n1 := strconv.ParseUint(o, 10, 64)\n\tsi, n2 := strconv.ParseUint(s, 10, 64)\n\n\t// The case where both are strings compare the strings\n\tif n1 != nil && n2 != nil {\n\t\tif s > o {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t} else if n1 != nil {\n\t\t// o is a string and s is a number\n\t\treturn -1\n\t} else if n2 != nil {\n\t\t// s is a string and o is a number\n\t\treturn 1\n\t}\n\t// Both are numbers\n\tif si > oi {\n\t\treturn 1\n\t}\n\treturn -1\n\n}\n"
  },
  {
    "path": "vendor/github.com/Masterminds/semver/version_fuzz.go",
    "content": "// +build gofuzz\n\npackage semver\n\nfunc Fuzz(data []byte) int {\n\tif _, err := NewVersion(string(data)); err != nil {\n\t\treturn 0\n\t}\n\treturn 1\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/.gitattributes",
    "content": "* text=auto eol=lf"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/.gitignore",
    "content": ".vscode/\n\n*.exe\n\n# testing\ntestdata\n\n# go workspaces\ngo.work\ngo.work.sum\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/.golangci.yml",
    "content": "linters:\n  enable:\n    # style\n    - containedctx # struct contains a context\n    - dupl # duplicate code\n    - errname # erorrs are named correctly\n    - nolintlint # \"//nolint\" directives are properly explained\n    - revive # golint replacement\n    - unconvert # unnecessary conversions\n    - wastedassign\n\n    # bugs, performance, unused, etc ...\n    - contextcheck # function uses a non-inherited context\n    - errorlint # errors not wrapped for 1.13\n    - exhaustive # check exhaustiveness of enum switch statements\n    - gofmt # files are gofmt'ed\n    - gosec # security\n    - nilerr # returns nil even with non-nil error\n    - thelper #  test helpers without t.Helper()\n    - unparam # unused function params\n\nissues:\n  exclude-dirs:\n    - pkg/etw/sample\n\n  exclude-rules:\n    # err is very often shadowed in nested scopes\n    - linters:\n        - govet\n      text: '^shadow: declaration of \"err\" shadows declaration'\n\n    # ignore long lines for skip autogen directives\n    - linters:\n        - revive\n      text: \"^line-length-limit: \"\n      source: \"^//(go:generate|sys) \"\n\n    #TODO: remove after upgrading to go1.18\n    # ignore comment spacing for nolint and sys directives\n    - linters:\n        - revive\n      text: \"^comment-spacings: no space between comment delimiter and comment text\"\n      source: \"//(cspell:|nolint:|sys |todo)\"\n\n    # not on go 1.18 yet, so no any\n    - linters:\n        - revive\n      text: \"^use-any: since GO 1.18 'interface{}' can be replaced by 'any'\"\n\n    # allow unjustified ignores of error checks in defer statements\n    - linters:\n        - nolintlint\n      text: \"^directive `//nolint:errcheck` should provide explanation\"\n      source: '^\\s*defer '\n\n    # allow unjustified ignores of error lints for io.EOF\n    - linters:\n        - nolintlint\n      text: \"^directive `//nolint:errorlint` should provide explanation\"\n      source: '[=|!]= io.EOF'\n\n\nlinters-settings:\n  exhaustive:\n    default-signifies-exhaustive: true\n  govet:\n    enable-all: true\n    disable:\n      # struct order is often for Win32 compat\n      # also, ignore pointer bytes/GC issues for now until performance becomes an issue\n      - fieldalignment\n  nolintlint:\n    require-explanation: true\n    require-specific: true\n  revive:\n    # revive is more configurable than static check, so likely the preferred alternative to static-check\n    # (once the perf issue is solved: https://github.com/golangci/golangci-lint/issues/2997)\n    enable-all-rules:\n      true\n      # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md\n    rules:\n      # rules with required arguments\n      - name: argument-limit\n        disabled: true\n      - name: banned-characters\n        disabled: true\n      - name: cognitive-complexity\n        disabled: true\n      - name: cyclomatic\n        disabled: true\n      - name: file-header\n        disabled: true\n      - name: function-length\n        disabled: true\n      - name: function-result-limit\n        disabled: true\n      - name: max-public-structs\n        disabled: true\n      # geneally annoying rules\n      - name: add-constant # complains about any and all strings and integers\n        disabled: true\n      - name: confusing-naming # we frequently use \"Foo()\" and \"foo()\" together\n        disabled: true\n      - name: flag-parameter # excessive, and a common idiom we use\n        disabled: true\n      - name: unhandled-error # warns over common fmt.Print* and io.Close; rely on errcheck instead\n        disabled: true\n      # general config\n      - name: line-length-limit\n        arguments:\n          - 140\n      - name: var-naming\n        arguments:\n          - []\n          - - CID\n            - CRI\n            - CTRD\n            - DACL\n            - DLL\n            - DOS\n            - ETW\n            - FSCTL\n            - GCS\n            - GMSA\n            - HCS\n            - HV\n            - IO\n            - LCOW\n            - LDAP\n            - LPAC\n            - LTSC\n            - MMIO\n            - NT\n            - OCI\n            - PMEM\n            - PWSH\n            - RX\n            - SACl\n            - SID\n            - SMB\n            - TX\n            - VHD\n            - VHDX\n            - VMID\n            - VPCI\n            - WCOW\n            - WIM\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/CODEOWNERS",
    "content": "  * @microsoft/containerplat\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Microsoft\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": "vendor/github.com/Microsoft/go-winio/README.md",
    "content": "# go-winio [![Build Status](https://github.com/microsoft/go-winio/actions/workflows/ci.yml/badge.svg)](https://github.com/microsoft/go-winio/actions/workflows/ci.yml)\n\nThis repository contains utilities for efficiently performing Win32 IO operations in\nGo. Currently, this is focused on accessing named pipes and other file handles, and\nfor using named pipes as a net transport.\n\nThis code relies on IO completion ports to avoid blocking IO on system threads, allowing Go\nto reuse the thread to schedule another goroutine. This limits support to Windows Vista and\nnewer operating systems. This is similar to the implementation of network sockets in Go's net\npackage.\n\nPlease see the LICENSE file for licensing information.\n\n## Contributing\n\nThis project welcomes contributions and suggestions.\nMost contributions require you to agree to a Contributor License Agreement (CLA) declaring that\nyou have the right to, and actually do, grant us the rights to use your contribution.\nFor details, visit [Microsoft CLA](https://cla.microsoft.com).\n\nWhen you submit a pull request, a CLA-bot will automatically determine whether you need to\nprovide a CLA and decorate the PR appropriately (e.g., label, comment).\nSimply follow the instructions provided by the bot.\nYou will only need to do this once across all repos using our CLA.\n\nAdditionally, the pull request pipeline requires the following steps to be performed before\nmergining.\n\n### Code Sign-Off\n\nWe require that contributors sign their commits using [`git commit --signoff`][git-commit-s]\nto certify they either authored the work themselves or otherwise have permission to use it in this project.\n\nA range of commits can be signed off using [`git rebase --signoff`][git-rebase-s].\n\nPlease see [the developer certificate](https://developercertificate.org) for more info,\nas well as to make sure that you can attest to the rules listed.\nOur CI uses the DCO Github app to ensure that all commits in a given PR are signed-off.\n\n### Linting\n\nCode must pass a linting stage, which uses [`golangci-lint`][lint].\nThe linting settings are stored in [`.golangci.yaml`](./.golangci.yaml), and can be run\nautomatically with VSCode by adding the following to your workspace or folder settings:\n\n```json\n    \"go.lintTool\": \"golangci-lint\",\n    \"go.lintOnSave\": \"package\",\n```\n\nAdditional editor [integrations options are also available][lint-ide].\n\nAlternatively, `golangci-lint` can be [installed locally][lint-install] and run from the repo root:\n\n```shell\n# use . or specify a path to only lint a package\n# to show all lint errors, use flags \"--max-issues-per-linter=0 --max-same-issues=0\"\n> golangci-lint run ./...\n```\n\n### Go Generate\n\nThe pipeline checks that auto-generated code, via `go generate`, are up to date.\n\nThis can be done for the entire repo:\n\n```shell\n> go generate ./...\n```\n\n## Code of Conduct\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or\ncontact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n## Special Thanks\n\nThanks to [natefinch][natefinch] for the inspiration for this library.\nSee [npipe](https://github.com/natefinch/npipe) for another named pipe implementation.\n\n[lint]: https://golangci-lint.run/\n[lint-ide]: https://golangci-lint.run/usage/integrations/#editor-integration\n[lint-install]: https://golangci-lint.run/usage/install/#local-installation\n\n[git-commit-s]: https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--s\n[git-rebase-s]: https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---signoff\n\n[natefinch]: https://github.com/natefinch\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/SECURITY.md",
    "content": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).\n\nIf you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.\n\n## Reporting Security Issues\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nInstead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).\n\nIf you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).\n\nYou should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). \n\nPlease include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:\n\n  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)\n  * Full paths of source file(s) related to the manifestation of the issue\n  * The location of the affected source code (tag/branch/commit or direct URL)\n  * Any special configuration required to reproduce the issue\n  * Step-by-step instructions to reproduce the issue\n  * Proof-of-concept or exploit code (if possible)\n  * Impact of the issue, including how an attacker might exploit the issue\n\nThis information will help us triage your report more quickly.\n\nIf you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.\n\n## Preferred Languages\n\nWe prefer all communications to be in English.\n\n## Policy\n\nMicrosoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).\n\n<!-- END MICROSOFT SECURITY.MD BLOCK -->\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/backup.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"unicode/utf16\"\n\n\t\"github.com/Microsoft/go-winio/internal/fs\"\n\t\"golang.org/x/sys/windows\"\n)\n\n//sys backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead\n//sys backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite\n\nconst (\n\tBackupData = uint32(iota + 1)\n\tBackupEaData\n\tBackupSecurity\n\tBackupAlternateData\n\tBackupLink\n\tBackupPropertyData\n\tBackupObjectId //revive:disable-line:var-naming ID, not Id\n\tBackupReparseData\n\tBackupSparseBlock\n\tBackupTxfsData\n)\n\nconst (\n\tStreamSparseAttributes = uint32(8)\n)\n\n//nolint:revive // var-naming: ALL_CAPS\nconst (\n\tWRITE_DAC              = windows.WRITE_DAC\n\tWRITE_OWNER            = windows.WRITE_OWNER\n\tACCESS_SYSTEM_SECURITY = windows.ACCESS_SYSTEM_SECURITY\n)\n\n// BackupHeader represents a backup stream of a file.\ntype BackupHeader struct {\n\t//revive:disable-next-line:var-naming ID, not Id\n\tId         uint32 // The backup stream ID\n\tAttributes uint32 // Stream attributes\n\tSize       int64  // The size of the stream in bytes\n\tName       string // The name of the stream (for BackupAlternateData only).\n\tOffset     int64  // The offset of the stream in the file (for BackupSparseBlock only).\n}\n\ntype win32StreamID struct {\n\tStreamID   uint32\n\tAttributes uint32\n\tSize       uint64\n\tNameSize   uint32\n}\n\n// BackupStreamReader reads from a stream produced by the BackupRead Win32 API and produces a series\n// of BackupHeader values.\ntype BackupStreamReader struct {\n\tr         io.Reader\n\tbytesLeft int64\n}\n\n// NewBackupStreamReader produces a BackupStreamReader from any io.Reader.\nfunc NewBackupStreamReader(r io.Reader) *BackupStreamReader {\n\treturn &BackupStreamReader{r, 0}\n}\n\n// Next returns the next backup stream and prepares for calls to Read(). It skips the remainder of the current stream if\n// it was not completely read.\nfunc (r *BackupStreamReader) Next() (*BackupHeader, error) {\n\tif r.bytesLeft > 0 { //nolint:nestif // todo: flatten this\n\t\tif s, ok := r.r.(io.Seeker); ok {\n\t\t\t// Make sure Seek on io.SeekCurrent sometimes succeeds\n\t\t\t// before trying the actual seek.\n\t\t\tif _, err := s.Seek(0, io.SeekCurrent); err == nil {\n\t\t\t\tif _, err = s.Seek(r.bytesLeft, io.SeekCurrent); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tr.bytesLeft = 0\n\t\t\t}\n\t\t}\n\t\tif _, err := io.Copy(io.Discard, r); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tvar wsi win32StreamID\n\tif err := binary.Read(r.r, binary.LittleEndian, &wsi); err != nil {\n\t\treturn nil, err\n\t}\n\thdr := &BackupHeader{\n\t\tId:         wsi.StreamID,\n\t\tAttributes: wsi.Attributes,\n\t\tSize:       int64(wsi.Size),\n\t}\n\tif wsi.NameSize != 0 {\n\t\tname := make([]uint16, int(wsi.NameSize/2))\n\t\tif err := binary.Read(r.r, binary.LittleEndian, name); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\thdr.Name = windows.UTF16ToString(name)\n\t}\n\tif wsi.StreamID == BackupSparseBlock {\n\t\tif err := binary.Read(r.r, binary.LittleEndian, &hdr.Offset); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\thdr.Size -= 8\n\t}\n\tr.bytesLeft = hdr.Size\n\treturn hdr, nil\n}\n\n// Read reads from the current backup stream.\nfunc (r *BackupStreamReader) Read(b []byte) (int, error) {\n\tif r.bytesLeft == 0 {\n\t\treturn 0, io.EOF\n\t}\n\tif int64(len(b)) > r.bytesLeft {\n\t\tb = b[:r.bytesLeft]\n\t}\n\tn, err := r.r.Read(b)\n\tr.bytesLeft -= int64(n)\n\tif err == io.EOF {\n\t\terr = io.ErrUnexpectedEOF\n\t} else if r.bytesLeft == 0 && err == nil {\n\t\terr = io.EOF\n\t}\n\treturn n, err\n}\n\n// BackupStreamWriter writes a stream compatible with the BackupWrite Win32 API.\ntype BackupStreamWriter struct {\n\tw         io.Writer\n\tbytesLeft int64\n}\n\n// NewBackupStreamWriter produces a BackupStreamWriter on top of an io.Writer.\nfunc NewBackupStreamWriter(w io.Writer) *BackupStreamWriter {\n\treturn &BackupStreamWriter{w, 0}\n}\n\n// WriteHeader writes the next backup stream header and prepares for calls to Write().\nfunc (w *BackupStreamWriter) WriteHeader(hdr *BackupHeader) error {\n\tif w.bytesLeft != 0 {\n\t\treturn fmt.Errorf(\"missing %d bytes\", w.bytesLeft)\n\t}\n\tname := utf16.Encode([]rune(hdr.Name))\n\twsi := win32StreamID{\n\t\tStreamID:   hdr.Id,\n\t\tAttributes: hdr.Attributes,\n\t\tSize:       uint64(hdr.Size),\n\t\tNameSize:   uint32(len(name) * 2),\n\t}\n\tif hdr.Id == BackupSparseBlock {\n\t\t// Include space for the int64 block offset\n\t\twsi.Size += 8\n\t}\n\tif err := binary.Write(w.w, binary.LittleEndian, &wsi); err != nil {\n\t\treturn err\n\t}\n\tif len(name) != 0 {\n\t\tif err := binary.Write(w.w, binary.LittleEndian, name); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif hdr.Id == BackupSparseBlock {\n\t\tif err := binary.Write(w.w, binary.LittleEndian, hdr.Offset); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tw.bytesLeft = hdr.Size\n\treturn nil\n}\n\n// Write writes to the current backup stream.\nfunc (w *BackupStreamWriter) Write(b []byte) (int, error) {\n\tif w.bytesLeft < int64(len(b)) {\n\t\treturn 0, fmt.Errorf(\"too many bytes by %d\", int64(len(b))-w.bytesLeft)\n\t}\n\tn, err := w.w.Write(b)\n\tw.bytesLeft -= int64(n)\n\treturn n, err\n}\n\n// BackupFileReader provides an io.ReadCloser interface on top of the BackupRead Win32 API.\ntype BackupFileReader struct {\n\tf               *os.File\n\tincludeSecurity bool\n\tctx             uintptr\n}\n\n// NewBackupFileReader returns a new BackupFileReader from a file handle. If includeSecurity is true,\n// Read will attempt to read the security descriptor of the file.\nfunc NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileReader {\n\tr := &BackupFileReader{f, includeSecurity, 0}\n\treturn r\n}\n\n// Read reads a backup stream from the file by calling the Win32 API BackupRead().\nfunc (r *BackupFileReader) Read(b []byte) (int, error) {\n\tvar bytesRead uint32\n\terr := backupRead(windows.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx)\n\tif err != nil {\n\t\treturn 0, &os.PathError{Op: \"BackupRead\", Path: r.f.Name(), Err: err}\n\t}\n\truntime.KeepAlive(r.f)\n\tif bytesRead == 0 {\n\t\treturn 0, io.EOF\n\t}\n\treturn int(bytesRead), nil\n}\n\n// Close frees Win32 resources associated with the BackupFileReader. It does not close\n// the underlying file.\nfunc (r *BackupFileReader) Close() error {\n\tif r.ctx != 0 {\n\t\t_ = backupRead(windows.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx)\n\t\truntime.KeepAlive(r.f)\n\t\tr.ctx = 0\n\t}\n\treturn nil\n}\n\n// BackupFileWriter provides an io.WriteCloser interface on top of the BackupWrite Win32 API.\ntype BackupFileWriter struct {\n\tf               *os.File\n\tincludeSecurity bool\n\tctx             uintptr\n}\n\n// NewBackupFileWriter returns a new BackupFileWriter from a file handle. If includeSecurity is true,\n// Write() will attempt to restore the security descriptor from the stream.\nfunc NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWriter {\n\tw := &BackupFileWriter{f, includeSecurity, 0}\n\treturn w\n}\n\n// Write restores a portion of the file using the provided backup stream.\nfunc (w *BackupFileWriter) Write(b []byte) (int, error) {\n\tvar bytesWritten uint32\n\terr := backupWrite(windows.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx)\n\tif err != nil {\n\t\treturn 0, &os.PathError{Op: \"BackupWrite\", Path: w.f.Name(), Err: err}\n\t}\n\truntime.KeepAlive(w.f)\n\tif int(bytesWritten) != len(b) {\n\t\treturn int(bytesWritten), errors.New(\"not all bytes could be written\")\n\t}\n\treturn len(b), nil\n}\n\n// Close frees Win32 resources associated with the BackupFileWriter. It does not\n// close the underlying file.\nfunc (w *BackupFileWriter) Close() error {\n\tif w.ctx != 0 {\n\t\t_ = backupWrite(windows.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx)\n\t\truntime.KeepAlive(w.f)\n\t\tw.ctx = 0\n\t}\n\treturn nil\n}\n\n// OpenForBackup opens a file or directory, potentially skipping access checks if the backup\n// or restore privileges have been acquired.\n//\n// If the file opened was a directory, it cannot be used with Readdir().\nfunc OpenForBackup(path string, access uint32, share uint32, createmode uint32) (*os.File, error) {\n\th, err := fs.CreateFile(path,\n\t\tfs.AccessMask(access),\n\t\tfs.FileShareMode(share),\n\t\tnil,\n\t\tfs.FileCreationDisposition(createmode),\n\t\tfs.FILE_FLAG_BACKUP_SEMANTICS|fs.FILE_FLAG_OPEN_REPARSE_POINT,\n\t\t0,\n\t)\n\tif err != nil {\n\t\terr = &os.PathError{Op: \"open\", Path: path, Err: err}\n\t\treturn nil, err\n\t}\n\treturn os.NewFile(uintptr(h), path), nil\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/doc.go",
    "content": "// This package provides utilities for efficiently performing Win32 IO operations in Go.\n// Currently, this package is provides support for genreal IO and management of\n//   - named pipes\n//   - files\n//   - [Hyper-V sockets]\n//\n// This code is similar to Go's [net] package, and uses IO completion ports to avoid\n// blocking IO on system threads, allowing Go to reuse the thread to schedule other goroutines.\n//\n// This limits support to Windows Vista and newer operating systems.\n//\n// Additionally, this package provides support for:\n//   - creating and managing GUIDs\n//   - writing to [ETW]\n//   - opening and manageing VHDs\n//   - parsing [Windows Image files]\n//   - auto-generating Win32 API code\n//\n// [Hyper-V sockets]: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service\n// [ETW]: https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/event-tracing-for-windows--etw-\n// [Windows Image files]: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/work-with-windows-images\npackage winio\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/ea.go",
    "content": "package winio\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n)\n\ntype fileFullEaInformation struct {\n\tNextEntryOffset uint32\n\tFlags           uint8\n\tNameLength      uint8\n\tValueLength     uint16\n}\n\nvar (\n\tfileFullEaInformationSize = binary.Size(&fileFullEaInformation{})\n\n\terrInvalidEaBuffer = errors.New(\"invalid extended attribute buffer\")\n\terrEaNameTooLarge  = errors.New(\"extended attribute name too large\")\n\terrEaValueTooLarge = errors.New(\"extended attribute value too large\")\n)\n\n// ExtendedAttribute represents a single Windows EA.\ntype ExtendedAttribute struct {\n\tName  string\n\tValue []byte\n\tFlags uint8\n}\n\nfunc parseEa(b []byte) (ea ExtendedAttribute, nb []byte, err error) {\n\tvar info fileFullEaInformation\n\terr = binary.Read(bytes.NewReader(b), binary.LittleEndian, &info)\n\tif err != nil {\n\t\terr = errInvalidEaBuffer\n\t\treturn ea, nb, err\n\t}\n\n\tnameOffset := fileFullEaInformationSize\n\tnameLen := int(info.NameLength)\n\tvalueOffset := nameOffset + int(info.NameLength) + 1\n\tvalueLen := int(info.ValueLength)\n\tnextOffset := int(info.NextEntryOffset)\n\tif valueLen+valueOffset > len(b) || nextOffset < 0 || nextOffset > len(b) {\n\t\terr = errInvalidEaBuffer\n\t\treturn ea, nb, err\n\t}\n\n\tea.Name = string(b[nameOffset : nameOffset+nameLen])\n\tea.Value = b[valueOffset : valueOffset+valueLen]\n\tea.Flags = info.Flags\n\tif info.NextEntryOffset != 0 {\n\t\tnb = b[info.NextEntryOffset:]\n\t}\n\treturn ea, nb, err\n}\n\n// DecodeExtendedAttributes decodes a list of EAs from a FILE_FULL_EA_INFORMATION\n// buffer retrieved from BackupRead, ZwQueryEaFile, etc.\nfunc DecodeExtendedAttributes(b []byte) (eas []ExtendedAttribute, err error) {\n\tfor len(b) != 0 {\n\t\tea, nb, err := parseEa(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\teas = append(eas, ea)\n\t\tb = nb\n\t}\n\treturn eas, err\n}\n\nfunc writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error {\n\tif int(uint8(len(ea.Name))) != len(ea.Name) {\n\t\treturn errEaNameTooLarge\n\t}\n\tif int(uint16(len(ea.Value))) != len(ea.Value) {\n\t\treturn errEaValueTooLarge\n\t}\n\tentrySize := uint32(fileFullEaInformationSize + len(ea.Name) + 1 + len(ea.Value))\n\twithPadding := (entrySize + 3) &^ 3\n\tnextOffset := uint32(0)\n\tif !last {\n\t\tnextOffset = withPadding\n\t}\n\tinfo := fileFullEaInformation{\n\t\tNextEntryOffset: nextOffset,\n\t\tFlags:           ea.Flags,\n\t\tNameLength:      uint8(len(ea.Name)),\n\t\tValueLength:     uint16(len(ea.Value)),\n\t}\n\n\terr := binary.Write(buf, binary.LittleEndian, &info)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = buf.Write([]byte(ea.Name))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = buf.WriteByte(0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = buf.Write(ea.Value)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = buf.Write([]byte{0, 0, 0}[0 : withPadding-entrySize])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// EncodeExtendedAttributes encodes a list of EAs into a FILE_FULL_EA_INFORMATION\n// buffer for use with BackupWrite, ZwSetEaFile, etc.\nfunc EncodeExtendedAttributes(eas []ExtendedAttribute) ([]byte, error) {\n\tvar buf bytes.Buffer\n\tfor i := range eas {\n\t\tlast := false\n\t\tif i == len(eas)-1 {\n\t\t\tlast = true\n\t\t}\n\n\t\terr := writeEa(&buf, &eas[i], last)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn buf.Bytes(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/file.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"runtime\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\n//sys cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) = CancelIoEx\n//sys createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) = CreateIoCompletionPort\n//sys getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus\n//sys setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes\n//sys wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult\n\nvar (\n\tErrFileClosed = errors.New(\"file has already been closed\")\n\tErrTimeout    = &timeoutError{}\n)\n\ntype timeoutError struct{}\n\nfunc (*timeoutError) Error() string   { return \"i/o timeout\" }\nfunc (*timeoutError) Timeout() bool   { return true }\nfunc (*timeoutError) Temporary() bool { return true }\n\ntype timeoutChan chan struct{}\n\nvar ioInitOnce sync.Once\nvar ioCompletionPort windows.Handle\n\n// ioResult contains the result of an asynchronous IO operation.\ntype ioResult struct {\n\tbytes uint32\n\terr   error\n}\n\n// ioOperation represents an outstanding asynchronous Win32 IO.\ntype ioOperation struct {\n\to  windows.Overlapped\n\tch chan ioResult\n}\n\nfunc initIO() {\n\th, err := createIoCompletionPort(windows.InvalidHandle, 0, 0, 0xffffffff)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tioCompletionPort = h\n\tgo ioCompletionProcessor(h)\n}\n\n// win32File implements Reader, Writer, and Closer on a Win32 handle without blocking in a syscall.\n// It takes ownership of this handle and will close it if it is garbage collected.\ntype win32File struct {\n\thandle        windows.Handle\n\twg            sync.WaitGroup\n\twgLock        sync.RWMutex\n\tclosing       atomic.Bool\n\tsocket        bool\n\treadDeadline  deadlineHandler\n\twriteDeadline deadlineHandler\n}\n\ntype deadlineHandler struct {\n\tsetLock     sync.Mutex\n\tchannel     timeoutChan\n\tchannelLock sync.RWMutex\n\ttimer       *time.Timer\n\ttimedout    atomic.Bool\n}\n\n// makeWin32File makes a new win32File from an existing file handle.\nfunc makeWin32File(h windows.Handle) (*win32File, error) {\n\tf := &win32File{handle: h}\n\tioInitOnce.Do(initIO)\n\t_, err := createIoCompletionPort(h, ioCompletionPort, 0, 0xffffffff)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = setFileCompletionNotificationModes(h, windows.FILE_SKIP_COMPLETION_PORT_ON_SUCCESS|windows.FILE_SKIP_SET_EVENT_ON_HANDLE)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tf.readDeadline.channel = make(timeoutChan)\n\tf.writeDeadline.channel = make(timeoutChan)\n\treturn f, nil\n}\n\n// Deprecated: use NewOpenFile instead.\nfunc MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) {\n\treturn NewOpenFile(windows.Handle(h))\n}\n\nfunc NewOpenFile(h windows.Handle) (io.ReadWriteCloser, error) {\n\t// If we return the result of makeWin32File directly, it can result in an\n\t// interface-wrapped nil, rather than a nil interface value.\n\tf, err := makeWin32File(h)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn f, nil\n}\n\n// closeHandle closes the resources associated with a Win32 handle.\nfunc (f *win32File) closeHandle() {\n\tf.wgLock.Lock()\n\t// Atomically set that we are closing, releasing the resources only once.\n\tif !f.closing.Swap(true) {\n\t\tf.wgLock.Unlock()\n\t\t// cancel all IO and wait for it to complete\n\t\t_ = cancelIoEx(f.handle, nil)\n\t\tf.wg.Wait()\n\t\t// at this point, no new IO can start\n\t\twindows.Close(f.handle)\n\t\tf.handle = 0\n\t} else {\n\t\tf.wgLock.Unlock()\n\t}\n}\n\n// Close closes a win32File.\nfunc (f *win32File) Close() error {\n\tf.closeHandle()\n\treturn nil\n}\n\n// IsClosed checks if the file has been closed.\nfunc (f *win32File) IsClosed() bool {\n\treturn f.closing.Load()\n}\n\n// prepareIO prepares for a new IO operation.\n// The caller must call f.wg.Done() when the IO is finished, prior to Close() returning.\nfunc (f *win32File) prepareIO() (*ioOperation, error) {\n\tf.wgLock.RLock()\n\tif f.closing.Load() {\n\t\tf.wgLock.RUnlock()\n\t\treturn nil, ErrFileClosed\n\t}\n\tf.wg.Add(1)\n\tf.wgLock.RUnlock()\n\tc := &ioOperation{}\n\tc.ch = make(chan ioResult)\n\treturn c, nil\n}\n\n// ioCompletionProcessor processes completed async IOs forever.\nfunc ioCompletionProcessor(h windows.Handle) {\n\tfor {\n\t\tvar bytes uint32\n\t\tvar key uintptr\n\t\tvar op *ioOperation\n\t\terr := getQueuedCompletionStatus(h, &bytes, &key, &op, windows.INFINITE)\n\t\tif op == nil {\n\t\t\tpanic(err)\n\t\t}\n\t\top.ch <- ioResult{bytes, err}\n\t}\n}\n\n// todo: helsaawy - create an asyncIO version that takes a context\n\n// asyncIO processes the return value from ReadFile or WriteFile, blocking until\n// the operation has actually completed.\nfunc (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, err error) (int, error) {\n\tif err != windows.ERROR_IO_PENDING { //nolint:errorlint // err is Errno\n\t\treturn int(bytes), err\n\t}\n\n\tif f.closing.Load() {\n\t\t_ = cancelIoEx(f.handle, &c.o)\n\t}\n\n\tvar timeout timeoutChan\n\tif d != nil {\n\t\td.channelLock.Lock()\n\t\ttimeout = d.channel\n\t\td.channelLock.Unlock()\n\t}\n\n\tvar r ioResult\n\tselect {\n\tcase r = <-c.ch:\n\t\terr = r.err\n\t\tif err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno\n\t\t\tif f.closing.Load() {\n\t\t\t\terr = ErrFileClosed\n\t\t\t}\n\t\t} else if err != nil && f.socket {\n\t\t\t// err is from Win32. Query the overlapped structure to get the winsock error.\n\t\t\tvar bytes, flags uint32\n\t\t\terr = wsaGetOverlappedResult(f.handle, &c.o, &bytes, false, &flags)\n\t\t}\n\tcase <-timeout:\n\t\t_ = cancelIoEx(f.handle, &c.o)\n\t\tr = <-c.ch\n\t\terr = r.err\n\t\tif err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno\n\t\t\terr = ErrTimeout\n\t\t}\n\t}\n\n\t// runtime.KeepAlive is needed, as c is passed via native\n\t// code to ioCompletionProcessor, c must remain alive\n\t// until the channel read is complete.\n\t// todo: (de)allocate *ioOperation via win32 heap functions, instead of needing to KeepAlive?\n\truntime.KeepAlive(c)\n\treturn int(r.bytes), err\n}\n\n// Read reads from a file handle.\nfunc (f *win32File) Read(b []byte) (int, error) {\n\tc, err := f.prepareIO()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer f.wg.Done()\n\n\tif f.readDeadline.timedout.Load() {\n\t\treturn 0, ErrTimeout\n\t}\n\n\tvar bytes uint32\n\terr = windows.ReadFile(f.handle, b, &bytes, &c.o)\n\tn, err := f.asyncIO(c, &f.readDeadline, bytes, err)\n\truntime.KeepAlive(b)\n\n\t// Handle EOF conditions.\n\tif err == nil && n == 0 && len(b) != 0 {\n\t\treturn 0, io.EOF\n\t} else if err == windows.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno\n\t\treturn 0, io.EOF\n\t}\n\treturn n, err\n}\n\n// Write writes to a file handle.\nfunc (f *win32File) Write(b []byte) (int, error) {\n\tc, err := f.prepareIO()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer f.wg.Done()\n\n\tif f.writeDeadline.timedout.Load() {\n\t\treturn 0, ErrTimeout\n\t}\n\n\tvar bytes uint32\n\terr = windows.WriteFile(f.handle, b, &bytes, &c.o)\n\tn, err := f.asyncIO(c, &f.writeDeadline, bytes, err)\n\truntime.KeepAlive(b)\n\treturn n, err\n}\n\nfunc (f *win32File) SetReadDeadline(deadline time.Time) error {\n\treturn f.readDeadline.set(deadline)\n}\n\nfunc (f *win32File) SetWriteDeadline(deadline time.Time) error {\n\treturn f.writeDeadline.set(deadline)\n}\n\nfunc (f *win32File) Flush() error {\n\treturn windows.FlushFileBuffers(f.handle)\n}\n\nfunc (f *win32File) Fd() uintptr {\n\treturn uintptr(f.handle)\n}\n\nfunc (d *deadlineHandler) set(deadline time.Time) error {\n\td.setLock.Lock()\n\tdefer d.setLock.Unlock()\n\n\tif d.timer != nil {\n\t\tif !d.timer.Stop() {\n\t\t\t<-d.channel\n\t\t}\n\t\td.timer = nil\n\t}\n\td.timedout.Store(false)\n\n\tselect {\n\tcase <-d.channel:\n\t\td.channelLock.Lock()\n\t\td.channel = make(chan struct{})\n\t\td.channelLock.Unlock()\n\tdefault:\n\t}\n\n\tif deadline.IsZero() {\n\t\treturn nil\n\t}\n\n\ttimeoutIO := func() {\n\t\td.timedout.Store(true)\n\t\tclose(d.channel)\n\t}\n\n\tnow := time.Now()\n\tduration := deadline.Sub(now)\n\tif deadline.After(now) {\n\t\t// Deadline is in the future, set a timer to wait\n\t\td.timer = time.AfterFunc(duration, timeoutIO)\n\t} else {\n\t\t// Deadline is in the past. Cancel all pending IO now.\n\t\ttimeoutIO()\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/fileinfo.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\n// FileBasicInfo contains file access time and file attributes information.\ntype FileBasicInfo struct {\n\tCreationTime, LastAccessTime, LastWriteTime, ChangeTime windows.Filetime\n\tFileAttributes                                          uint32\n\t_                                                       uint32 // padding\n}\n\n// alignedFileBasicInfo is a FileBasicInfo, but aligned to uint64 by containing\n// uint64 rather than windows.Filetime. Filetime contains two uint32s. uint64\n// alignment is necessary to pass this as FILE_BASIC_INFO.\ntype alignedFileBasicInfo struct {\n\tCreationTime, LastAccessTime, LastWriteTime, ChangeTime uint64\n\tFileAttributes                                          uint32\n\t_                                                       uint32 // padding\n}\n\n// GetFileBasicInfo retrieves times and attributes for a file.\nfunc GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) {\n\tbi := &alignedFileBasicInfo{}\n\tif err := windows.GetFileInformationByHandleEx(\n\t\twindows.Handle(f.Fd()),\n\t\twindows.FileBasicInfo,\n\t\t(*byte)(unsafe.Pointer(bi)),\n\t\tuint32(unsafe.Sizeof(*bi)),\n\t); err != nil {\n\t\treturn nil, &os.PathError{Op: \"GetFileInformationByHandleEx\", Path: f.Name(), Err: err}\n\t}\n\truntime.KeepAlive(f)\n\t// Reinterpret the alignedFileBasicInfo as a FileBasicInfo so it matches the\n\t// public API of this module. The data may be unnecessarily aligned.\n\treturn (*FileBasicInfo)(unsafe.Pointer(bi)), nil\n}\n\n// SetFileBasicInfo sets times and attributes for a file.\nfunc SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error {\n\t// Create an alignedFileBasicInfo based on a FileBasicInfo. The copy is\n\t// suitable to pass to GetFileInformationByHandleEx.\n\tbiAligned := *(*alignedFileBasicInfo)(unsafe.Pointer(bi))\n\tif err := windows.SetFileInformationByHandle(\n\t\twindows.Handle(f.Fd()),\n\t\twindows.FileBasicInfo,\n\t\t(*byte)(unsafe.Pointer(&biAligned)),\n\t\tuint32(unsafe.Sizeof(biAligned)),\n\t); err != nil {\n\t\treturn &os.PathError{Op: \"SetFileInformationByHandle\", Path: f.Name(), Err: err}\n\t}\n\truntime.KeepAlive(f)\n\treturn nil\n}\n\n// FileStandardInfo contains extended information for the file.\n// FILE_STANDARD_INFO in WinBase.h\n// https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_standard_info\ntype FileStandardInfo struct {\n\tAllocationSize, EndOfFile int64\n\tNumberOfLinks             uint32\n\tDeletePending, Directory  bool\n}\n\n// GetFileStandardInfo retrieves ended information for the file.\nfunc GetFileStandardInfo(f *os.File) (*FileStandardInfo, error) {\n\tsi := &FileStandardInfo{}\n\tif err := windows.GetFileInformationByHandleEx(windows.Handle(f.Fd()),\n\t\twindows.FileStandardInfo,\n\t\t(*byte)(unsafe.Pointer(si)),\n\t\tuint32(unsafe.Sizeof(*si))); err != nil {\n\t\treturn nil, &os.PathError{Op: \"GetFileInformationByHandleEx\", Path: f.Name(), Err: err}\n\t}\n\truntime.KeepAlive(f)\n\treturn si, nil\n}\n\n// FileIDInfo contains the volume serial number and file ID for a file. This pair should be\n// unique on a system.\ntype FileIDInfo struct {\n\tVolumeSerialNumber uint64\n\tFileID             [16]byte\n}\n\n// GetFileID retrieves the unique (volume, file ID) pair for a file.\nfunc GetFileID(f *os.File) (*FileIDInfo, error) {\n\tfileID := &FileIDInfo{}\n\tif err := windows.GetFileInformationByHandleEx(\n\t\twindows.Handle(f.Fd()),\n\t\twindows.FileIdInfo,\n\t\t(*byte)(unsafe.Pointer(fileID)),\n\t\tuint32(unsafe.Sizeof(*fileID)),\n\t); err != nil {\n\t\treturn nil, &os.PathError{Op: \"GetFileInformationByHandleEx\", Path: f.Name(), Err: err}\n\t}\n\truntime.KeepAlive(f)\n\treturn fileID, nil\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/hvsock.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n\n\t\"github.com/Microsoft/go-winio/internal/socket\"\n\t\"github.com/Microsoft/go-winio/pkg/guid\"\n)\n\nconst afHVSock = 34 // AF_HYPERV\n\n// Well known Service and VM IDs\n// https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service#vmid-wildcards\n\n// HvsockGUIDWildcard is the wildcard VmId for accepting connections from all partitions.\nfunc HvsockGUIDWildcard() guid.GUID { // 00000000-0000-0000-0000-000000000000\n\treturn guid.GUID{}\n}\n\n// HvsockGUIDBroadcast is the wildcard VmId for broadcasting sends to all partitions.\nfunc HvsockGUIDBroadcast() guid.GUID { // ffffffff-ffff-ffff-ffff-ffffffffffff\n\treturn guid.GUID{\n\t\tData1: 0xffffffff,\n\t\tData2: 0xffff,\n\t\tData3: 0xffff,\n\t\tData4: [8]uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},\n\t}\n}\n\n// HvsockGUIDLoopback is the Loopback VmId for accepting connections to the same partition as the connector.\nfunc HvsockGUIDLoopback() guid.GUID { // e0e16197-dd56-4a10-9195-5ee7a155a838\n\treturn guid.GUID{\n\t\tData1: 0xe0e16197,\n\t\tData2: 0xdd56,\n\t\tData3: 0x4a10,\n\t\tData4: [8]uint8{0x91, 0x95, 0x5e, 0xe7, 0xa1, 0x55, 0xa8, 0x38},\n\t}\n}\n\n// HvsockGUIDSiloHost is the address of a silo's host partition:\n//   - The silo host of a hosted silo is the utility VM.\n//   - The silo host of a silo on a physical host is the physical host.\nfunc HvsockGUIDSiloHost() guid.GUID { // 36bd0c5c-7276-4223-88ba-7d03b654c568\n\treturn guid.GUID{\n\t\tData1: 0x36bd0c5c,\n\t\tData2: 0x7276,\n\t\tData3: 0x4223,\n\t\tData4: [8]byte{0x88, 0xba, 0x7d, 0x03, 0xb6, 0x54, 0xc5, 0x68},\n\t}\n}\n\n// HvsockGUIDChildren is the wildcard VmId for accepting connections from the connector's child partitions.\nfunc HvsockGUIDChildren() guid.GUID { // 90db8b89-0d35-4f79-8ce9-49ea0ac8b7cd\n\treturn guid.GUID{\n\t\tData1: 0x90db8b89,\n\t\tData2: 0xd35,\n\t\tData3: 0x4f79,\n\t\tData4: [8]uint8{0x8c, 0xe9, 0x49, 0xea, 0xa, 0xc8, 0xb7, 0xcd},\n\t}\n}\n\n// HvsockGUIDParent is the wildcard VmId for accepting connections from the connector's parent partition.\n// Listening on this VmId accepts connection from:\n//   - Inside silos: silo host partition.\n//   - Inside hosted silo: host of the VM.\n//   - Inside VM: VM host.\n//   - Physical host: Not supported.\nfunc HvsockGUIDParent() guid.GUID { // a42e7cda-d03f-480c-9cc2-a4de20abb878\n\treturn guid.GUID{\n\t\tData1: 0xa42e7cda,\n\t\tData2: 0xd03f,\n\t\tData3: 0x480c,\n\t\tData4: [8]uint8{0x9c, 0xc2, 0xa4, 0xde, 0x20, 0xab, 0xb8, 0x78},\n\t}\n}\n\n// hvsockVsockServiceTemplate is the Service GUID used for the VSOCK protocol.\nfunc hvsockVsockServiceTemplate() guid.GUID { // 00000000-facb-11e6-bd58-64006a7986d3\n\treturn guid.GUID{\n\t\tData2: 0xfacb,\n\t\tData3: 0x11e6,\n\t\tData4: [8]uint8{0xbd, 0x58, 0x64, 0x00, 0x6a, 0x79, 0x86, 0xd3},\n\t}\n}\n\n// An HvsockAddr is an address for a AF_HYPERV socket.\ntype HvsockAddr struct {\n\tVMID      guid.GUID\n\tServiceID guid.GUID\n}\n\ntype rawHvsockAddr struct {\n\tFamily    uint16\n\t_         uint16\n\tVMID      guid.GUID\n\tServiceID guid.GUID\n}\n\nvar _ socket.RawSockaddr = &rawHvsockAddr{}\n\n// Network returns the address's network name, \"hvsock\".\nfunc (*HvsockAddr) Network() string {\n\treturn \"hvsock\"\n}\n\nfunc (addr *HvsockAddr) String() string {\n\treturn fmt.Sprintf(\"%s:%s\", &addr.VMID, &addr.ServiceID)\n}\n\n// VsockServiceID returns an hvsock service ID corresponding to the specified AF_VSOCK port.\nfunc VsockServiceID(port uint32) guid.GUID {\n\tg := hvsockVsockServiceTemplate() // make a copy\n\tg.Data1 = port\n\treturn g\n}\n\nfunc (addr *HvsockAddr) raw() rawHvsockAddr {\n\treturn rawHvsockAddr{\n\t\tFamily:    afHVSock,\n\t\tVMID:      addr.VMID,\n\t\tServiceID: addr.ServiceID,\n\t}\n}\n\nfunc (addr *HvsockAddr) fromRaw(raw *rawHvsockAddr) {\n\taddr.VMID = raw.VMID\n\taddr.ServiceID = raw.ServiceID\n}\n\n// Sockaddr returns a pointer to and the size of this struct.\n//\n// Implements the [socket.RawSockaddr] interface, and allows use in\n// [socket.Bind] and [socket.ConnectEx].\nfunc (r *rawHvsockAddr) Sockaddr() (unsafe.Pointer, int32, error) {\n\treturn unsafe.Pointer(r), int32(unsafe.Sizeof(rawHvsockAddr{})), nil\n}\n\n// Sockaddr interface allows use with `sockets.Bind()` and `.ConnectEx()`.\nfunc (r *rawHvsockAddr) FromBytes(b []byte) error {\n\tn := int(unsafe.Sizeof(rawHvsockAddr{}))\n\n\tif len(b) < n {\n\t\treturn fmt.Errorf(\"got %d, want %d: %w\", len(b), n, socket.ErrBufferSize)\n\t}\n\n\tcopy(unsafe.Slice((*byte)(unsafe.Pointer(r)), n), b[:n])\n\tif r.Family != afHVSock {\n\t\treturn fmt.Errorf(\"got %d, want %d: %w\", r.Family, afHVSock, socket.ErrAddrFamily)\n\t}\n\n\treturn nil\n}\n\n// HvsockListener is a socket listener for the AF_HYPERV address family.\ntype HvsockListener struct {\n\tsock *win32File\n\taddr HvsockAddr\n}\n\nvar _ net.Listener = &HvsockListener{}\n\n// HvsockConn is a connected socket of the AF_HYPERV address family.\ntype HvsockConn struct {\n\tsock          *win32File\n\tlocal, remote HvsockAddr\n}\n\nvar _ net.Conn = &HvsockConn{}\n\nfunc newHVSocket() (*win32File, error) {\n\tfd, err := windows.Socket(afHVSock, windows.SOCK_STREAM, 1)\n\tif err != nil {\n\t\treturn nil, os.NewSyscallError(\"socket\", err)\n\t}\n\tf, err := makeWin32File(fd)\n\tif err != nil {\n\t\twindows.Close(fd)\n\t\treturn nil, err\n\t}\n\tf.socket = true\n\treturn f, nil\n}\n\n// ListenHvsock listens for connections on the specified hvsock address.\nfunc ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) {\n\tl := &HvsockListener{addr: *addr}\n\n\tvar sock *win32File\n\tsock, err = newHVSocket()\n\tif err != nil {\n\t\treturn nil, l.opErr(\"listen\", err)\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = sock.Close()\n\t\t}\n\t}()\n\n\tsa := addr.raw()\n\terr = socket.Bind(sock.handle, &sa)\n\tif err != nil {\n\t\treturn nil, l.opErr(\"listen\", os.NewSyscallError(\"socket\", err))\n\t}\n\terr = windows.Listen(sock.handle, 16)\n\tif err != nil {\n\t\treturn nil, l.opErr(\"listen\", os.NewSyscallError(\"listen\", err))\n\t}\n\treturn &HvsockListener{sock: sock, addr: *addr}, nil\n}\n\nfunc (l *HvsockListener) opErr(op string, err error) error {\n\treturn &net.OpError{Op: op, Net: \"hvsock\", Addr: &l.addr, Err: err}\n}\n\n// Addr returns the listener's network address.\nfunc (l *HvsockListener) Addr() net.Addr {\n\treturn &l.addr\n}\n\n// Accept waits for the next connection and returns it.\nfunc (l *HvsockListener) Accept() (_ net.Conn, err error) {\n\tsock, err := newHVSocket()\n\tif err != nil {\n\t\treturn nil, l.opErr(\"accept\", err)\n\t}\n\tdefer func() {\n\t\tif sock != nil {\n\t\t\tsock.Close()\n\t\t}\n\t}()\n\tc, err := l.sock.prepareIO()\n\tif err != nil {\n\t\treturn nil, l.opErr(\"accept\", err)\n\t}\n\tdefer l.sock.wg.Done()\n\n\t// AcceptEx, per documentation, requires an extra 16 bytes per address.\n\t//\n\t// https://docs.microsoft.com/en-us/windows/win32/api/mswsock/nf-mswsock-acceptex\n\tconst addrlen = uint32(16 + unsafe.Sizeof(rawHvsockAddr{}))\n\tvar addrbuf [addrlen * 2]byte\n\n\tvar bytes uint32\n\terr = windows.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o)\n\tif _, err = l.sock.asyncIO(c, nil, bytes, err); err != nil {\n\t\treturn nil, l.opErr(\"accept\", os.NewSyscallError(\"acceptex\", err))\n\t}\n\n\tconn := &HvsockConn{\n\t\tsock: sock,\n\t}\n\t// The local address returned in the AcceptEx buffer is the same as the Listener socket's\n\t// address. However, the service GUID reported by GetSockName is different from the Listeners\n\t// socket, and is sometimes the same as the local address of the socket that dialed the\n\t// address, with the service GUID.Data1 incremented, but othertimes is different.\n\t// todo: does the local address matter? is the listener's address or the actual address appropriate?\n\tconn.local.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[0])))\n\tconn.remote.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[addrlen])))\n\n\t// initialize the accepted socket and update its properties with those of the listening socket\n\tif err = windows.Setsockopt(sock.handle,\n\t\twindows.SOL_SOCKET, windows.SO_UPDATE_ACCEPT_CONTEXT,\n\t\t(*byte)(unsafe.Pointer(&l.sock.handle)), int32(unsafe.Sizeof(l.sock.handle))); err != nil {\n\t\treturn nil, conn.opErr(\"accept\", os.NewSyscallError(\"setsockopt\", err))\n\t}\n\n\tsock = nil\n\treturn conn, nil\n}\n\n// Close closes the listener, causing any pending Accept calls to fail.\nfunc (l *HvsockListener) Close() error {\n\treturn l.sock.Close()\n}\n\n// HvsockDialer configures and dials a Hyper-V Socket (ie, [HvsockConn]).\ntype HvsockDialer struct {\n\t// Deadline is the time the Dial operation must connect before erroring.\n\tDeadline time.Time\n\n\t// Retries is the number of additional connects to try if the connection times out, is refused,\n\t// or the host is unreachable\n\tRetries uint\n\n\t// RetryWait is the time to wait after a connection error to retry\n\tRetryWait time.Duration\n\n\trt *time.Timer // redial wait timer\n}\n\n// Dial the Hyper-V socket at addr.\n//\n// See [HvsockDialer.Dial] for more information.\nfunc Dial(ctx context.Context, addr *HvsockAddr) (conn *HvsockConn, err error) {\n\treturn (&HvsockDialer{}).Dial(ctx, addr)\n}\n\n// Dial attempts to connect to the Hyper-V socket at addr, and returns a connection if successful.\n// Will attempt (HvsockDialer).Retries if dialing fails, waiting (HvsockDialer).RetryWait between\n// retries.\n//\n// Dialing can be cancelled either by providing (HvsockDialer).Deadline, or cancelling ctx.\nfunc (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *HvsockConn, err error) {\n\top := \"dial\"\n\t// create the conn early to use opErr()\n\tconn = &HvsockConn{\n\t\tremote: *addr,\n\t}\n\n\tif !d.Deadline.IsZero() {\n\t\tvar cancel context.CancelFunc\n\t\tctx, cancel = context.WithDeadline(ctx, d.Deadline)\n\t\tdefer cancel()\n\t}\n\n\t// preemptive timeout/cancellation check\n\tif err = ctx.Err(); err != nil {\n\t\treturn nil, conn.opErr(op, err)\n\t}\n\n\tsock, err := newHVSocket()\n\tif err != nil {\n\t\treturn nil, conn.opErr(op, err)\n\t}\n\tdefer func() {\n\t\tif sock != nil {\n\t\t\tsock.Close()\n\t\t}\n\t}()\n\n\tsa := addr.raw()\n\terr = socket.Bind(sock.handle, &sa)\n\tif err != nil {\n\t\treturn nil, conn.opErr(op, os.NewSyscallError(\"bind\", err))\n\t}\n\n\tc, err := sock.prepareIO()\n\tif err != nil {\n\t\treturn nil, conn.opErr(op, err)\n\t}\n\tdefer sock.wg.Done()\n\tvar bytes uint32\n\tfor i := uint(0); i <= d.Retries; i++ {\n\t\terr = socket.ConnectEx(\n\t\t\tsock.handle,\n\t\t\t&sa,\n\t\t\tnil, // sendBuf\n\t\t\t0,   // sendDataLen\n\t\t\t&bytes,\n\t\t\t(*windows.Overlapped)(unsafe.Pointer(&c.o)))\n\t\t_, err = sock.asyncIO(c, nil, bytes, err)\n\t\tif i < d.Retries && canRedial(err) {\n\t\t\tif err = d.redialWait(ctx); err == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\tif err != nil {\n\t\treturn nil, conn.opErr(op, os.NewSyscallError(\"connectex\", err))\n\t}\n\n\t// update the connection properties, so shutdown can be used\n\tif err = windows.Setsockopt(\n\t\tsock.handle,\n\t\twindows.SOL_SOCKET,\n\t\twindows.SO_UPDATE_CONNECT_CONTEXT,\n\t\tnil, // optvalue\n\t\t0,   // optlen\n\t); err != nil {\n\t\treturn nil, conn.opErr(op, os.NewSyscallError(\"setsockopt\", err))\n\t}\n\n\t// get the local name\n\tvar sal rawHvsockAddr\n\terr = socket.GetSockName(sock.handle, &sal)\n\tif err != nil {\n\t\treturn nil, conn.opErr(op, os.NewSyscallError(\"getsockname\", err))\n\t}\n\tconn.local.fromRaw(&sal)\n\n\t// one last check for timeout, since asyncIO doesn't check the context\n\tif err = ctx.Err(); err != nil {\n\t\treturn nil, conn.opErr(op, err)\n\t}\n\n\tconn.sock = sock\n\tsock = nil\n\n\treturn conn, nil\n}\n\n// redialWait waits before attempting to redial, resetting the timer as appropriate.\nfunc (d *HvsockDialer) redialWait(ctx context.Context) (err error) {\n\tif d.RetryWait == 0 {\n\t\treturn nil\n\t}\n\n\tif d.rt == nil {\n\t\td.rt = time.NewTimer(d.RetryWait)\n\t} else {\n\t\t// should already be stopped and drained\n\t\td.rt.Reset(d.RetryWait)\n\t}\n\n\tselect {\n\tcase <-ctx.Done():\n\tcase <-d.rt.C:\n\t\treturn nil\n\t}\n\n\t// stop and drain the timer\n\tif !d.rt.Stop() {\n\t\t<-d.rt.C\n\t}\n\treturn ctx.Err()\n}\n\n// assumes error is a plain, unwrapped windows.Errno provided by direct syscall.\nfunc canRedial(err error) bool {\n\t//nolint:errorlint // guaranteed to be an Errno\n\tswitch err {\n\tcase windows.WSAECONNREFUSED, windows.WSAENETUNREACH, windows.WSAETIMEDOUT,\n\t\twindows.ERROR_CONNECTION_REFUSED, windows.ERROR_CONNECTION_UNAVAIL:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (conn *HvsockConn) opErr(op string, err error) error {\n\t// translate from \"file closed\" to \"socket closed\"\n\tif errors.Is(err, ErrFileClosed) {\n\t\terr = socket.ErrSocketClosed\n\t}\n\treturn &net.OpError{Op: op, Net: \"hvsock\", Source: &conn.local, Addr: &conn.remote, Err: err}\n}\n\nfunc (conn *HvsockConn) Read(b []byte) (int, error) {\n\tc, err := conn.sock.prepareIO()\n\tif err != nil {\n\t\treturn 0, conn.opErr(\"read\", err)\n\t}\n\tdefer conn.sock.wg.Done()\n\tbuf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))}\n\tvar flags, bytes uint32\n\terr = windows.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil)\n\tn, err := conn.sock.asyncIO(c, &conn.sock.readDeadline, bytes, err)\n\tif err != nil {\n\t\tvar eno windows.Errno\n\t\tif errors.As(err, &eno) {\n\t\t\terr = os.NewSyscallError(\"wsarecv\", eno)\n\t\t}\n\t\treturn 0, conn.opErr(\"read\", err)\n\t} else if n == 0 {\n\t\terr = io.EOF\n\t}\n\treturn n, err\n}\n\nfunc (conn *HvsockConn) Write(b []byte) (int, error) {\n\tt := 0\n\tfor len(b) != 0 {\n\t\tn, err := conn.write(b)\n\t\tif err != nil {\n\t\t\treturn t + n, err\n\t\t}\n\t\tt += n\n\t\tb = b[n:]\n\t}\n\treturn t, nil\n}\n\nfunc (conn *HvsockConn) write(b []byte) (int, error) {\n\tc, err := conn.sock.prepareIO()\n\tif err != nil {\n\t\treturn 0, conn.opErr(\"write\", err)\n\t}\n\tdefer conn.sock.wg.Done()\n\tbuf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))}\n\tvar bytes uint32\n\terr = windows.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil)\n\tn, err := conn.sock.asyncIO(c, &conn.sock.writeDeadline, bytes, err)\n\tif err != nil {\n\t\tvar eno windows.Errno\n\t\tif errors.As(err, &eno) {\n\t\t\terr = os.NewSyscallError(\"wsasend\", eno)\n\t\t}\n\t\treturn 0, conn.opErr(\"write\", err)\n\t}\n\treturn n, err\n}\n\n// Close closes the socket connection, failing any pending read or write calls.\nfunc (conn *HvsockConn) Close() error {\n\treturn conn.sock.Close()\n}\n\nfunc (conn *HvsockConn) IsClosed() bool {\n\treturn conn.sock.IsClosed()\n}\n\n// shutdown disables sending or receiving on a socket.\nfunc (conn *HvsockConn) shutdown(how int) error {\n\tif conn.IsClosed() {\n\t\treturn socket.ErrSocketClosed\n\t}\n\n\terr := windows.Shutdown(conn.sock.handle, how)\n\tif err != nil {\n\t\t// If the connection was closed, shutdowns fail with \"not connected\"\n\t\tif errors.Is(err, windows.WSAENOTCONN) ||\n\t\t\terrors.Is(err, windows.WSAESHUTDOWN) {\n\t\t\terr = socket.ErrSocketClosed\n\t\t}\n\t\treturn os.NewSyscallError(\"shutdown\", err)\n\t}\n\treturn nil\n}\n\n// CloseRead shuts down the read end of the socket, preventing future read operations.\nfunc (conn *HvsockConn) CloseRead() error {\n\terr := conn.shutdown(windows.SHUT_RD)\n\tif err != nil {\n\t\treturn conn.opErr(\"closeread\", err)\n\t}\n\treturn nil\n}\n\n// CloseWrite shuts down the write end of the socket, preventing future write operations and\n// notifying the other endpoint that no more data will be written.\nfunc (conn *HvsockConn) CloseWrite() error {\n\terr := conn.shutdown(windows.SHUT_WR)\n\tif err != nil {\n\t\treturn conn.opErr(\"closewrite\", err)\n\t}\n\treturn nil\n}\n\n// LocalAddr returns the local address of the connection.\nfunc (conn *HvsockConn) LocalAddr() net.Addr {\n\treturn &conn.local\n}\n\n// RemoteAddr returns the remote address of the connection.\nfunc (conn *HvsockConn) RemoteAddr() net.Addr {\n\treturn &conn.remote\n}\n\n// SetDeadline implements the net.Conn SetDeadline method.\nfunc (conn *HvsockConn) SetDeadline(t time.Time) error {\n\t// todo: implement `SetDeadline` for `win32File`\n\tif err := conn.SetReadDeadline(t); err != nil {\n\t\treturn fmt.Errorf(\"set read deadline: %w\", err)\n\t}\n\tif err := conn.SetWriteDeadline(t); err != nil {\n\t\treturn fmt.Errorf(\"set write deadline: %w\", err)\n\t}\n\treturn nil\n}\n\n// SetReadDeadline implements the net.Conn SetReadDeadline method.\nfunc (conn *HvsockConn) SetReadDeadline(t time.Time) error {\n\treturn conn.sock.SetReadDeadline(t)\n}\n\n// SetWriteDeadline implements the net.Conn SetWriteDeadline method.\nfunc (conn *HvsockConn) SetWriteDeadline(t time.Time) error {\n\treturn conn.sock.SetWriteDeadline(t)\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/fs/doc.go",
    "content": "// This package contains Win32 filesystem functionality.\npackage fs\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/fs/fs.go",
    "content": "//go:build windows\n\npackage fs\n\nimport (\n\t\"golang.org/x/sys/windows\"\n\n\t\"github.com/Microsoft/go-winio/internal/stringbuffer\"\n)\n\n//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go fs.go\n\n// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew\n//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW\n\nconst NullHandle windows.Handle = 0\n\n// AccessMask defines standard, specific, and generic rights.\n//\n// Used with CreateFile and NtCreateFile (and co.).\n//\n//\tBitmask:\n//\t 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1\n//\t 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0\n//\t+---------------+---------------+-------------------------------+\n//\t|G|G|G|G|Resvd|A| StandardRights|         SpecificRights        |\n//\t|R|W|E|A|     |S|               |                               |\n//\t+-+-------------+---------------+-------------------------------+\n//\n//\tGR     Generic Read\n//\tGW     Generic Write\n//\tGE     Generic Exectue\n//\tGA     Generic All\n//\tResvd  Reserved\n//\tAS     Access Security System\n//\n// https://learn.microsoft.com/en-us/windows/win32/secauthz/access-mask\n//\n// https://learn.microsoft.com/en-us/windows/win32/secauthz/generic-access-rights\n//\n// https://learn.microsoft.com/en-us/windows/win32/fileio/file-access-rights-constants\ntype AccessMask = windows.ACCESS_MASK\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\t// Not actually any.\n\t//\n\t// For CreateFile: \"query certain metadata such as file, directory, or device attributes without accessing that file or device\"\n\t// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#parameters\n\tFILE_ANY_ACCESS AccessMask = 0\n\n\tGENERIC_READ           AccessMask = 0x8000_0000\n\tGENERIC_WRITE          AccessMask = 0x4000_0000\n\tGENERIC_EXECUTE        AccessMask = 0x2000_0000\n\tGENERIC_ALL            AccessMask = 0x1000_0000\n\tACCESS_SYSTEM_SECURITY AccessMask = 0x0100_0000\n\n\t// Specific Object Access\n\t// from ntioapi.h\n\n\tFILE_READ_DATA      AccessMask = (0x0001) // file & pipe\n\tFILE_LIST_DIRECTORY AccessMask = (0x0001) // directory\n\n\tFILE_WRITE_DATA AccessMask = (0x0002) // file & pipe\n\tFILE_ADD_FILE   AccessMask = (0x0002) // directory\n\n\tFILE_APPEND_DATA          AccessMask = (0x0004) // file\n\tFILE_ADD_SUBDIRECTORY     AccessMask = (0x0004) // directory\n\tFILE_CREATE_PIPE_INSTANCE AccessMask = (0x0004) // named pipe\n\n\tFILE_READ_EA         AccessMask = (0x0008) // file & directory\n\tFILE_READ_PROPERTIES AccessMask = FILE_READ_EA\n\n\tFILE_WRITE_EA         AccessMask = (0x0010) // file & directory\n\tFILE_WRITE_PROPERTIES AccessMask = FILE_WRITE_EA\n\n\tFILE_EXECUTE  AccessMask = (0x0020) // file\n\tFILE_TRAVERSE AccessMask = (0x0020) // directory\n\n\tFILE_DELETE_CHILD AccessMask = (0x0040) // directory\n\n\tFILE_READ_ATTRIBUTES AccessMask = (0x0080) // all\n\n\tFILE_WRITE_ATTRIBUTES AccessMask = (0x0100) // all\n\n\tFILE_ALL_ACCESS      AccessMask = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)\n\tFILE_GENERIC_READ    AccessMask = (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE)\n\tFILE_GENERIC_WRITE   AccessMask = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)\n\tFILE_GENERIC_EXECUTE AccessMask = (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)\n\n\tSPECIFIC_RIGHTS_ALL AccessMask = 0x0000FFFF\n\n\t// Standard Access\n\t// from ntseapi.h\n\n\tDELETE       AccessMask = 0x0001_0000\n\tREAD_CONTROL AccessMask = 0x0002_0000\n\tWRITE_DAC    AccessMask = 0x0004_0000\n\tWRITE_OWNER  AccessMask = 0x0008_0000\n\tSYNCHRONIZE  AccessMask = 0x0010_0000\n\n\tSTANDARD_RIGHTS_REQUIRED AccessMask = 0x000F_0000\n\n\tSTANDARD_RIGHTS_READ    AccessMask = READ_CONTROL\n\tSTANDARD_RIGHTS_WRITE   AccessMask = READ_CONTROL\n\tSTANDARD_RIGHTS_EXECUTE AccessMask = READ_CONTROL\n\n\tSTANDARD_RIGHTS_ALL AccessMask = 0x001F_0000\n)\n\ntype FileShareMode uint32\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\tFILE_SHARE_NONE        FileShareMode = 0x00\n\tFILE_SHARE_READ        FileShareMode = 0x01\n\tFILE_SHARE_WRITE       FileShareMode = 0x02\n\tFILE_SHARE_DELETE      FileShareMode = 0x04\n\tFILE_SHARE_VALID_FLAGS FileShareMode = 0x07\n)\n\ntype FileCreationDisposition uint32\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\t// from winbase.h\n\n\tCREATE_NEW        FileCreationDisposition = 0x01\n\tCREATE_ALWAYS     FileCreationDisposition = 0x02\n\tOPEN_EXISTING     FileCreationDisposition = 0x03\n\tOPEN_ALWAYS       FileCreationDisposition = 0x04\n\tTRUNCATE_EXISTING FileCreationDisposition = 0x05\n)\n\n// Create disposition values for NtCreate*\ntype NTFileCreationDisposition uint32\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\t// From ntioapi.h\n\n\tFILE_SUPERSEDE           NTFileCreationDisposition = 0x00\n\tFILE_OPEN                NTFileCreationDisposition = 0x01\n\tFILE_CREATE              NTFileCreationDisposition = 0x02\n\tFILE_OPEN_IF             NTFileCreationDisposition = 0x03\n\tFILE_OVERWRITE           NTFileCreationDisposition = 0x04\n\tFILE_OVERWRITE_IF        NTFileCreationDisposition = 0x05\n\tFILE_MAXIMUM_DISPOSITION NTFileCreationDisposition = 0x05\n)\n\n// CreateFile and co. take flags or attributes together as one parameter.\n// Define alias until we can use generics to allow both\n//\n// https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants\ntype FileFlagOrAttribute uint32\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\t// from winnt.h\n\n\tFILE_FLAG_WRITE_THROUGH       FileFlagOrAttribute = 0x8000_0000\n\tFILE_FLAG_OVERLAPPED          FileFlagOrAttribute = 0x4000_0000\n\tFILE_FLAG_NO_BUFFERING        FileFlagOrAttribute = 0x2000_0000\n\tFILE_FLAG_RANDOM_ACCESS       FileFlagOrAttribute = 0x1000_0000\n\tFILE_FLAG_SEQUENTIAL_SCAN     FileFlagOrAttribute = 0x0800_0000\n\tFILE_FLAG_DELETE_ON_CLOSE     FileFlagOrAttribute = 0x0400_0000\n\tFILE_FLAG_BACKUP_SEMANTICS    FileFlagOrAttribute = 0x0200_0000\n\tFILE_FLAG_POSIX_SEMANTICS     FileFlagOrAttribute = 0x0100_0000\n\tFILE_FLAG_OPEN_REPARSE_POINT  FileFlagOrAttribute = 0x0020_0000\n\tFILE_FLAG_OPEN_NO_RECALL      FileFlagOrAttribute = 0x0010_0000\n\tFILE_FLAG_FIRST_PIPE_INSTANCE FileFlagOrAttribute = 0x0008_0000\n)\n\n// NtCreate* functions take a dedicated CreateOptions parameter.\n//\n// https://learn.microsoft.com/en-us/windows/win32/api/Winternl/nf-winternl-ntcreatefile\n//\n// https://learn.microsoft.com/en-us/windows/win32/devnotes/nt-create-named-pipe-file\ntype NTCreateOptions uint32\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\t// From ntioapi.h\n\n\tFILE_DIRECTORY_FILE            NTCreateOptions = 0x0000_0001\n\tFILE_WRITE_THROUGH             NTCreateOptions = 0x0000_0002\n\tFILE_SEQUENTIAL_ONLY           NTCreateOptions = 0x0000_0004\n\tFILE_NO_INTERMEDIATE_BUFFERING NTCreateOptions = 0x0000_0008\n\n\tFILE_SYNCHRONOUS_IO_ALERT    NTCreateOptions = 0x0000_0010\n\tFILE_SYNCHRONOUS_IO_NONALERT NTCreateOptions = 0x0000_0020\n\tFILE_NON_DIRECTORY_FILE      NTCreateOptions = 0x0000_0040\n\tFILE_CREATE_TREE_CONNECTION  NTCreateOptions = 0x0000_0080\n\n\tFILE_COMPLETE_IF_OPLOCKED NTCreateOptions = 0x0000_0100\n\tFILE_NO_EA_KNOWLEDGE      NTCreateOptions = 0x0000_0200\n\tFILE_DISABLE_TUNNELING    NTCreateOptions = 0x0000_0400\n\tFILE_RANDOM_ACCESS        NTCreateOptions = 0x0000_0800\n\n\tFILE_DELETE_ON_CLOSE        NTCreateOptions = 0x0000_1000\n\tFILE_OPEN_BY_FILE_ID        NTCreateOptions = 0x0000_2000\n\tFILE_OPEN_FOR_BACKUP_INTENT NTCreateOptions = 0x0000_4000\n\tFILE_NO_COMPRESSION         NTCreateOptions = 0x0000_8000\n)\n\ntype FileSQSFlag = FileFlagOrAttribute\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\t// from winbase.h\n\n\tSECURITY_ANONYMOUS      FileSQSFlag = FileSQSFlag(SecurityAnonymous << 16)\n\tSECURITY_IDENTIFICATION FileSQSFlag = FileSQSFlag(SecurityIdentification << 16)\n\tSECURITY_IMPERSONATION  FileSQSFlag = FileSQSFlag(SecurityImpersonation << 16)\n\tSECURITY_DELEGATION     FileSQSFlag = FileSQSFlag(SecurityDelegation << 16)\n\n\tSECURITY_SQOS_PRESENT     FileSQSFlag = 0x0010_0000\n\tSECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F_0000\n)\n\n// GetFinalPathNameByHandle flags\n//\n// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew#parameters\ntype GetFinalPathFlag uint32\n\n//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API.\nconst (\n\tGetFinalPathDefaultFlag GetFinalPathFlag = 0x0\n\n\tFILE_NAME_NORMALIZED GetFinalPathFlag = 0x0\n\tFILE_NAME_OPENED     GetFinalPathFlag = 0x8\n\n\tVOLUME_NAME_DOS  GetFinalPathFlag = 0x0\n\tVOLUME_NAME_GUID GetFinalPathFlag = 0x1\n\tVOLUME_NAME_NT   GetFinalPathFlag = 0x2\n\tVOLUME_NAME_NONE GetFinalPathFlag = 0x4\n)\n\n// getFinalPathNameByHandle facilitates calling the Windows API GetFinalPathNameByHandle\n// with the given handle and flags. It transparently takes care of creating a buffer of the\n// correct size for the call.\n//\n// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew\nfunc GetFinalPathNameByHandle(h windows.Handle, flags GetFinalPathFlag) (string, error) {\n\tb := stringbuffer.NewWString()\n\t//TODO: can loop infinitely if Win32 keeps returning the same (or a larger) n?\n\tfor {\n\t\tn, err := windows.GetFinalPathNameByHandle(h, b.Pointer(), b.Cap(), uint32(flags))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\t// If the buffer wasn't large enough, n will be the total size needed (including null terminator).\n\t\t// Resize and try again.\n\t\tif n > b.Cap() {\n\t\t\tb.ResizeTo(n)\n\t\t\tcontinue\n\t\t}\n\t\t// If the buffer is large enough, n will be the size not including the null terminator.\n\t\t// Convert to a Go string and return.\n\t\treturn b.String(), nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/fs/security.go",
    "content": "package fs\n\n// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ne-winnt-security_impersonation_level\ntype SecurityImpersonationLevel int32 // C default enums underlying type is `int`, which is Go `int32`\n\n// Impersonation levels\nconst (\n\tSecurityAnonymous      SecurityImpersonationLevel = 0\n\tSecurityIdentification SecurityImpersonationLevel = 1\n\tSecurityImpersonation  SecurityImpersonationLevel = 2\n\tSecurityDelegation     SecurityImpersonationLevel = 3\n)\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go",
    "content": "//go:build windows\n\n// Code generated by 'go generate' using \"github.com/Microsoft/go-winio/tools/mkwinsyscall\"; DO NOT EDIT.\n\npackage fs\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nvar _ unsafe.Pointer\n\n// Do the interface allocations only once for common\n// Errno values.\nconst (\n\terrnoERROR_IO_PENDING = 997\n)\n\nvar (\n\terrERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)\n\terrERROR_EINVAL     error = syscall.EINVAL\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e syscall.Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn errERROR_EINVAL\n\tcase errnoERROR_IO_PENDING:\n\t\treturn errERROR_IO_PENDING\n\t}\n\treturn e\n}\n\nvar (\n\tmodkernel32 = windows.NewLazySystemDLL(\"kernel32.dll\")\n\n\tprocCreateFileW = modkernel32.NewProc(\"CreateFileW\")\n)\n\nfunc CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _CreateFile(_p0, access, mode, sa, createmode, attrs, templatefile)\n}\n\nfunc _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile))\n\thandle = windows.Handle(r0)\n\tif handle == windows.InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go",
    "content": "package socket\n\nimport (\n\t\"unsafe\"\n)\n\n// RawSockaddr allows structs to be used with [Bind] and [ConnectEx]. The\n// struct must meet the Win32 sockaddr requirements specified here:\n// https://docs.microsoft.com/en-us/windows/win32/winsock/sockaddr-2\n//\n// Specifically, the struct size must be least larger than an int16 (unsigned short)\n// for the address family.\ntype RawSockaddr interface {\n\t// Sockaddr returns a pointer to the RawSockaddr and its struct size, allowing\n\t// for the RawSockaddr's data to be overwritten by syscalls (if necessary).\n\t//\n\t// It is the callers responsibility to validate that the values are valid; invalid\n\t// pointers or size can cause a panic.\n\tSockaddr() (unsafe.Pointer, int32, error)\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/socket/socket.go",
    "content": "//go:build windows\n\npackage socket\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/Microsoft/go-winio/pkg/guid\"\n\t\"golang.org/x/sys/windows\"\n)\n\n//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go socket.go\n\n//sys getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) [failretval==socketError] = ws2_32.getsockname\n//sys getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) [failretval==socketError] = ws2_32.getpeername\n//sys bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socketError] = ws2_32.bind\n\nconst socketError = uintptr(^uint32(0))\n\nvar (\n\t// todo(helsaawy): create custom error types to store the desired vs actual size and addr family?\n\n\tErrBufferSize     = errors.New(\"buffer size\")\n\tErrAddrFamily     = errors.New(\"address family\")\n\tErrInvalidPointer = errors.New(\"invalid pointer\")\n\tErrSocketClosed   = fmt.Errorf(\"socket closed: %w\", net.ErrClosed)\n)\n\n// todo(helsaawy): replace these with generics, ie: GetSockName[S RawSockaddr](s windows.Handle) (S, error)\n\n// GetSockName writes the local address of socket s to the [RawSockaddr] rsa.\n// If rsa is not large enough, the [windows.WSAEFAULT] is returned.\nfunc GetSockName(s windows.Handle, rsa RawSockaddr) error {\n\tptr, l, err := rsa.Sockaddr()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not retrieve socket pointer and size: %w\", err)\n\t}\n\n\t// although getsockname returns WSAEFAULT if the buffer is too small, it does not set\n\t// &l to the correct size, so--apart from doubling the buffer repeatedly--there is no remedy\n\treturn getsockname(s, ptr, &l)\n}\n\n// GetPeerName returns the remote address the socket is connected to.\n//\n// See [GetSockName] for more information.\nfunc GetPeerName(s windows.Handle, rsa RawSockaddr) error {\n\tptr, l, err := rsa.Sockaddr()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not retrieve socket pointer and size: %w\", err)\n\t}\n\n\treturn getpeername(s, ptr, &l)\n}\n\nfunc Bind(s windows.Handle, rsa RawSockaddr) (err error) {\n\tptr, l, err := rsa.Sockaddr()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not retrieve socket pointer and size: %w\", err)\n\t}\n\n\treturn bind(s, ptr, l)\n}\n\n// \"golang.org/x/sys/windows\".ConnectEx and .Bind only accept internal implementations of the\n// their sockaddr interface, so they cannot be used with HvsockAddr\n// Replicate functionality here from\n// https://cs.opensource.google/go/x/sys/+/master:windows/syscall_windows.go\n\n// The function pointers to `AcceptEx`, `ConnectEx` and `GetAcceptExSockaddrs` must be loaded at\n// runtime via a WSAIoctl call:\n// https://docs.microsoft.com/en-us/windows/win32/api/Mswsock/nc-mswsock-lpfn_connectex#remarks\n\ntype runtimeFunc struct {\n\tid   guid.GUID\n\tonce sync.Once\n\taddr uintptr\n\terr  error\n}\n\nfunc (f *runtimeFunc) Load() error {\n\tf.once.Do(func() {\n\t\tvar s windows.Handle\n\t\ts, f.err = windows.Socket(windows.AF_INET, windows.SOCK_STREAM, windows.IPPROTO_TCP)\n\t\tif f.err != nil {\n\t\t\treturn\n\t\t}\n\t\tdefer windows.CloseHandle(s) //nolint:errcheck\n\n\t\tvar n uint32\n\t\tf.err = windows.WSAIoctl(s,\n\t\t\twindows.SIO_GET_EXTENSION_FUNCTION_POINTER,\n\t\t\t(*byte)(unsafe.Pointer(&f.id)),\n\t\t\tuint32(unsafe.Sizeof(f.id)),\n\t\t\t(*byte)(unsafe.Pointer(&f.addr)),\n\t\t\tuint32(unsafe.Sizeof(f.addr)),\n\t\t\t&n,\n\t\t\tnil, // overlapped\n\t\t\t0,   // completionRoutine\n\t\t)\n\t})\n\treturn f.err\n}\n\nvar (\n\t// todo: add `AcceptEx` and `GetAcceptExSockaddrs`\n\tWSAID_CONNECTEX = guid.GUID{ //revive:disable-line:var-naming ALL_CAPS\n\t\tData1: 0x25a207b9,\n\t\tData2: 0xddf3,\n\t\tData3: 0x4660,\n\t\tData4: [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},\n\t}\n\n\tconnectExFunc = runtimeFunc{id: WSAID_CONNECTEX}\n)\n\nfunc ConnectEx(\n\tfd windows.Handle,\n\trsa RawSockaddr,\n\tsendBuf *byte,\n\tsendDataLen uint32,\n\tbytesSent *uint32,\n\toverlapped *windows.Overlapped,\n) error {\n\tif err := connectExFunc.Load(); err != nil {\n\t\treturn fmt.Errorf(\"failed to load ConnectEx function pointer: %w\", err)\n\t}\n\tptr, n, err := rsa.Sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped)\n}\n\n// BOOL LpfnConnectex(\n//   [in]           SOCKET s,\n//   [in]           const sockaddr *name,\n//   [in]           int namelen,\n//   [in, optional] PVOID lpSendBuffer,\n//   [in]           DWORD dwSendDataLength,\n//   [out]          LPDWORD lpdwBytesSent,\n//   [in]           LPOVERLAPPED lpOverlapped\n// )\n\nfunc connectEx(\n\ts windows.Handle,\n\tname unsafe.Pointer,\n\tnamelen int32,\n\tsendBuf *byte,\n\tsendDataLen uint32,\n\tbytesSent *uint32,\n\toverlapped *windows.Overlapped,\n) (err error) {\n\tr1, _, e1 := syscall.SyscallN(connectExFunc.addr,\n\t\tuintptr(s),\n\t\tuintptr(name),\n\t\tuintptr(namelen),\n\t\tuintptr(unsafe.Pointer(sendBuf)),\n\t\tuintptr(sendDataLen),\n\t\tuintptr(unsafe.Pointer(bytesSent)),\n\t\tuintptr(unsafe.Pointer(overlapped)),\n\t)\n\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = error(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go",
    "content": "//go:build windows\n\n// Code generated by 'go generate' using \"github.com/Microsoft/go-winio/tools/mkwinsyscall\"; DO NOT EDIT.\n\npackage socket\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nvar _ unsafe.Pointer\n\n// Do the interface allocations only once for common\n// Errno values.\nconst (\n\terrnoERROR_IO_PENDING = 997\n)\n\nvar (\n\terrERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)\n\terrERROR_EINVAL     error = syscall.EINVAL\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e syscall.Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn errERROR_EINVAL\n\tcase errnoERROR_IO_PENDING:\n\t\treturn errERROR_IO_PENDING\n\t}\n\treturn e\n}\n\nvar (\n\tmodws2_32 = windows.NewLazySystemDLL(\"ws2_32.dll\")\n\n\tprocbind        = modws2_32.NewProc(\"bind\")\n\tprocgetpeername = modws2_32.NewProc(\"getpeername\")\n\tprocgetsockname = modws2_32.NewProc(\"getsockname\")\n)\n\nfunc bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen))\n\tif r1 == socketError {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))\n\tif r1 == socketError {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen)))\n\tif r1 == socketError {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go",
    "content": "package stringbuffer\n\nimport (\n\t\"sync\"\n\t\"unicode/utf16\"\n)\n\n// TODO: worth exporting and using in mkwinsyscall?\n\n// Uint16BufferSize is the buffer size in the pool, chosen somewhat arbitrarily to accommodate\n// large path strings:\n// MAX_PATH (260) + size of volume GUID prefix (49) + null terminator = 310.\nconst MinWStringCap = 310\n\n// use *[]uint16 since []uint16 creates an extra allocation where the slice header\n// is copied to heap and then referenced via pointer in the interface header that sync.Pool\n// stores.\nvar pathPool = sync.Pool{ // if go1.18+ adds Pool[T], use that to store []uint16 directly\n\tNew: func() interface{} {\n\t\tb := make([]uint16, MinWStringCap)\n\t\treturn &b\n\t},\n}\n\nfunc newBuffer() []uint16 { return *(pathPool.Get().(*[]uint16)) }\n\n// freeBuffer copies the slice header data, and puts a pointer to that in the pool.\n// This avoids taking a pointer to the slice header in WString, which can be set to nil.\nfunc freeBuffer(b []uint16) { pathPool.Put(&b) }\n\n// WString is a wide string buffer ([]uint16) meant for storing UTF-16 encoded strings\n// for interacting with Win32 APIs.\n// Sizes are specified as uint32 and not int.\n//\n// It is not thread safe.\ntype WString struct {\n\t// type-def allows casting to []uint16 directly, use struct to prevent that and allow adding fields in the future.\n\n\t// raw buffer\n\tb []uint16\n}\n\n// NewWString returns a [WString] allocated from a shared pool with an\n// initial capacity of at least [MinWStringCap].\n// Since the buffer may have been previously used, its contents are not guaranteed to be empty.\n//\n// The buffer should be freed via [WString.Free]\nfunc NewWString() *WString {\n\treturn &WString{\n\t\tb: newBuffer(),\n\t}\n}\n\nfunc (b *WString) Free() {\n\tif b.empty() {\n\t\treturn\n\t}\n\tfreeBuffer(b.b)\n\tb.b = nil\n}\n\n// ResizeTo grows the buffer to at least c and returns the new capacity, freeing the\n// previous buffer back into pool.\nfunc (b *WString) ResizeTo(c uint32) uint32 {\n\t// already sufficient (or n is 0)\n\tif c <= b.Cap() {\n\t\treturn b.Cap()\n\t}\n\n\tif c <= MinWStringCap {\n\t\tc = MinWStringCap\n\t}\n\t// allocate at-least double buffer size, as is done in [bytes.Buffer] and other places\n\tif c <= 2*b.Cap() {\n\t\tc = 2 * b.Cap()\n\t}\n\n\tb2 := make([]uint16, c)\n\tif !b.empty() {\n\t\tcopy(b2, b.b)\n\t\tfreeBuffer(b.b)\n\t}\n\tb.b = b2\n\treturn c\n}\n\n// Buffer returns the underlying []uint16 buffer.\nfunc (b *WString) Buffer() []uint16 {\n\tif b.empty() {\n\t\treturn nil\n\t}\n\treturn b.b\n}\n\n// Pointer returns a pointer to the first uint16 in the buffer.\n// If the [WString.Free] has already been called, the pointer will be nil.\nfunc (b *WString) Pointer() *uint16 {\n\tif b.empty() {\n\t\treturn nil\n\t}\n\treturn &b.b[0]\n}\n\n// String returns the returns the UTF-8 encoding of the UTF-16 string in the buffer.\n//\n// It assumes that the data is null-terminated.\nfunc (b *WString) String() string {\n\t// Using [windows.UTF16ToString] would require importing \"golang.org/x/sys/windows\"\n\t// and would make this code Windows-only, which makes no sense.\n\t// So copy UTF16ToString code into here.\n\t// If other windows-specific code is added, switch to [windows.UTF16ToString]\n\n\ts := b.b\n\tfor i, v := range s {\n\t\tif v == 0 {\n\t\t\ts = s[:i]\n\t\t\tbreak\n\t\t}\n\t}\n\treturn string(utf16.Decode(s))\n}\n\n// Cap returns the underlying buffer capacity.\nfunc (b *WString) Cap() uint32 {\n\tif b.empty() {\n\t\treturn 0\n\t}\n\treturn b.cap()\n}\n\nfunc (b *WString) cap() uint32 { return uint32(cap(b.b)) }\nfunc (b *WString) empty() bool { return b == nil || b.cap() == 0 }\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/pipe.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"runtime\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n\n\t\"github.com/Microsoft/go-winio/internal/fs\"\n)\n\n//sys connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) = ConnectNamedPipe\n//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error)  [failretval==windows.InvalidHandle] = CreateNamedPipeW\n//sys disconnectNamedPipe(pipe windows.Handle) (err error) = DisconnectNamedPipe\n//sys getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo\n//sys getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW\n//sys ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile\n//sys rtlNtStatusToDosError(status ntStatus) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb\n//sys rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) = ntdll.RtlDosPathNameToNtPathName_U\n//sys rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) = ntdll.RtlDefaultNpAcl\n\ntype PipeConn interface {\n\tnet.Conn\n\tDisconnect() error\n\tFlush() error\n}\n\n// type aliases for mkwinsyscall code\ntype (\n\tntAccessMask              = fs.AccessMask\n\tntFileShareMode           = fs.FileShareMode\n\tntFileCreationDisposition = fs.NTFileCreationDisposition\n\tntFileOptions             = fs.NTCreateOptions\n)\n\ntype ioStatusBlock struct {\n\tStatus, Information uintptr\n}\n\n//\ttypedef struct _OBJECT_ATTRIBUTES {\n//\t  ULONG           Length;\n//\t  HANDLE          RootDirectory;\n//\t  PUNICODE_STRING ObjectName;\n//\t  ULONG           Attributes;\n//\t  PVOID           SecurityDescriptor;\n//\t  PVOID           SecurityQualityOfService;\n//\t} OBJECT_ATTRIBUTES;\n//\n// https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_object_attributes\ntype objectAttributes struct {\n\tLength             uintptr\n\tRootDirectory      uintptr\n\tObjectName         *unicodeString\n\tAttributes         uintptr\n\tSecurityDescriptor *securityDescriptor\n\tSecurityQoS        uintptr\n}\n\ntype unicodeString struct {\n\tLength        uint16\n\tMaximumLength uint16\n\tBuffer        uintptr\n}\n\n//\ttypedef struct _SECURITY_DESCRIPTOR {\n//\t  BYTE                        Revision;\n//\t  BYTE                        Sbz1;\n//\t  SECURITY_DESCRIPTOR_CONTROL Control;\n//\t  PSID                        Owner;\n//\t  PSID                        Group;\n//\t  PACL                        Sacl;\n//\t  PACL                        Dacl;\n//\t} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;\n//\n// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-security_descriptor\ntype securityDescriptor struct {\n\tRevision byte\n\tSbz1     byte\n\tControl  uint16\n\tOwner    uintptr\n\tGroup    uintptr\n\tSacl     uintptr //revive:disable-line:var-naming SACL, not Sacl\n\tDacl     uintptr //revive:disable-line:var-naming DACL, not Dacl\n}\n\ntype ntStatus int32\n\nfunc (status ntStatus) Err() error {\n\tif status >= 0 {\n\t\treturn nil\n\t}\n\treturn rtlNtStatusToDosError(status)\n}\n\nvar (\n\t// ErrPipeListenerClosed is returned for pipe operations on listeners that have been closed.\n\tErrPipeListenerClosed = net.ErrClosed\n\n\terrPipeWriteClosed = errors.New(\"pipe has been closed for write\")\n)\n\ntype win32Pipe struct {\n\t*win32File\n\tpath string\n}\n\nvar _ PipeConn = (*win32Pipe)(nil)\n\ntype win32MessageBytePipe struct {\n\twin32Pipe\n\twriteClosed bool\n\treadEOF     bool\n}\n\ntype pipeAddress string\n\nfunc (f *win32Pipe) LocalAddr() net.Addr {\n\treturn pipeAddress(f.path)\n}\n\nfunc (f *win32Pipe) RemoteAddr() net.Addr {\n\treturn pipeAddress(f.path)\n}\n\nfunc (f *win32Pipe) SetDeadline(t time.Time) error {\n\tif err := f.SetReadDeadline(t); err != nil {\n\t\treturn err\n\t}\n\treturn f.SetWriteDeadline(t)\n}\n\nfunc (f *win32Pipe) Disconnect() error {\n\treturn disconnectNamedPipe(f.win32File.handle)\n}\n\n// CloseWrite closes the write side of a message pipe in byte mode.\nfunc (f *win32MessageBytePipe) CloseWrite() error {\n\tif f.writeClosed {\n\t\treturn errPipeWriteClosed\n\t}\n\terr := f.win32File.Flush()\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = f.win32File.Write(nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tf.writeClosed = true\n\treturn nil\n}\n\n// Write writes bytes to a message pipe in byte mode. Zero-byte writes are ignored, since\n// they are used to implement CloseWrite().\nfunc (f *win32MessageBytePipe) Write(b []byte) (int, error) {\n\tif f.writeClosed {\n\t\treturn 0, errPipeWriteClosed\n\t}\n\tif len(b) == 0 {\n\t\treturn 0, nil\n\t}\n\treturn f.win32File.Write(b)\n}\n\n// Read reads bytes from a message pipe in byte mode. A read of a zero-byte message on a message\n// mode pipe will return io.EOF, as will all subsequent reads.\nfunc (f *win32MessageBytePipe) Read(b []byte) (int, error) {\n\tif f.readEOF {\n\t\treturn 0, io.EOF\n\t}\n\tn, err := f.win32File.Read(b)\n\tif err == io.EOF { //nolint:errorlint\n\t\t// If this was the result of a zero-byte read, then\n\t\t// it is possible that the read was due to a zero-size\n\t\t// message. Since we are simulating CloseWrite with a\n\t\t// zero-byte message, ensure that all future Read() calls\n\t\t// also return EOF.\n\t\tf.readEOF = true\n\t} else if err == windows.ERROR_MORE_DATA { //nolint:errorlint // err is Errno\n\t\t// ERROR_MORE_DATA indicates that the pipe's read mode is message mode\n\t\t// and the message still has more bytes. Treat this as a success, since\n\t\t// this package presents all named pipes as byte streams.\n\t\terr = nil\n\t}\n\treturn n, err\n}\n\nfunc (pipeAddress) Network() string {\n\treturn \"pipe\"\n}\n\nfunc (s pipeAddress) String() string {\n\treturn string(s)\n}\n\n// tryDialPipe attempts to dial the pipe at `path` until `ctx` cancellation or timeout.\nfunc tryDialPipe(ctx context.Context, path *string, access fs.AccessMask, impLevel PipeImpLevel) (windows.Handle, error) {\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn windows.Handle(0), ctx.Err()\n\t\tdefault:\n\t\t\th, err := fs.CreateFile(*path,\n\t\t\t\taccess,\n\t\t\t\t0,   // mode\n\t\t\t\tnil, // security attributes\n\t\t\t\tfs.OPEN_EXISTING,\n\t\t\t\tfs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.FileSQSFlag(impLevel),\n\t\t\t\t0, // template file handle\n\t\t\t)\n\t\t\tif err == nil {\n\t\t\t\treturn h, nil\n\t\t\t}\n\t\t\tif err != windows.ERROR_PIPE_BUSY { //nolint:errorlint // err is Errno\n\t\t\t\treturn h, &os.PathError{Err: err, Op: \"open\", Path: *path}\n\t\t\t}\n\t\t\t// Wait 10 msec and try again. This is a rather simplistic\n\t\t\t// view, as we always try each 10 milliseconds.\n\t\t\ttime.Sleep(10 * time.Millisecond)\n\t\t}\n\t}\n}\n\n// DialPipe connects to a named pipe by path, timing out if the connection\n// takes longer than the specified duration. If timeout is nil, then we use\n// a default timeout of 2 seconds.  (We do not use WaitNamedPipe.)\nfunc DialPipe(path string, timeout *time.Duration) (net.Conn, error) {\n\tvar absTimeout time.Time\n\tif timeout != nil {\n\t\tabsTimeout = time.Now().Add(*timeout)\n\t} else {\n\t\tabsTimeout = time.Now().Add(2 * time.Second)\n\t}\n\tctx, cancel := context.WithDeadline(context.Background(), absTimeout)\n\tdefer cancel()\n\tconn, err := DialPipeContext(ctx, path)\n\tif errors.Is(err, context.DeadlineExceeded) {\n\t\treturn nil, ErrTimeout\n\t}\n\treturn conn, err\n}\n\n// DialPipeContext attempts to connect to a named pipe by `path` until `ctx`\n// cancellation or timeout.\nfunc DialPipeContext(ctx context.Context, path string) (net.Conn, error) {\n\treturn DialPipeAccess(ctx, path, uint32(fs.GENERIC_READ|fs.GENERIC_WRITE))\n}\n\n// PipeImpLevel is an enumeration of impersonation levels that may be set\n// when calling DialPipeAccessImpersonation.\ntype PipeImpLevel uint32\n\nconst (\n\tPipeImpLevelAnonymous      = PipeImpLevel(fs.SECURITY_ANONYMOUS)\n\tPipeImpLevelIdentification = PipeImpLevel(fs.SECURITY_IDENTIFICATION)\n\tPipeImpLevelImpersonation  = PipeImpLevel(fs.SECURITY_IMPERSONATION)\n\tPipeImpLevelDelegation     = PipeImpLevel(fs.SECURITY_DELEGATION)\n)\n\n// DialPipeAccess attempts to connect to a named pipe by `path` with `access` until `ctx`\n// cancellation or timeout.\nfunc DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, error) {\n\treturn DialPipeAccessImpLevel(ctx, path, access, PipeImpLevelAnonymous)\n}\n\n// DialPipeAccessImpLevel attempts to connect to a named pipe by `path` with\n// `access` at `impLevel` until `ctx` cancellation or timeout. The other\n// DialPipe* implementations use PipeImpLevelAnonymous.\nfunc DialPipeAccessImpLevel(ctx context.Context, path string, access uint32, impLevel PipeImpLevel) (net.Conn, error) {\n\tvar err error\n\tvar h windows.Handle\n\th, err = tryDialPipe(ctx, &path, fs.AccessMask(access), impLevel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar flags uint32\n\terr = getNamedPipeInfo(h, &flags, nil, nil, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tf, err := makeWin32File(h)\n\tif err != nil {\n\t\twindows.Close(h)\n\t\treturn nil, err\n\t}\n\n\t// If the pipe is in message mode, return a message byte pipe, which\n\t// supports CloseWrite().\n\tif flags&windows.PIPE_TYPE_MESSAGE != 0 {\n\t\treturn &win32MessageBytePipe{\n\t\t\twin32Pipe: win32Pipe{win32File: f, path: path},\n\t\t}, nil\n\t}\n\treturn &win32Pipe{win32File: f, path: path}, nil\n}\n\ntype acceptResponse struct {\n\tf   *win32File\n\terr error\n}\n\ntype win32PipeListener struct {\n\tfirstHandle windows.Handle\n\tpath        string\n\tconfig      PipeConfig\n\tacceptCh    chan (chan acceptResponse)\n\tcloseCh     chan int\n\tdoneCh      chan int\n}\n\nfunc makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (windows.Handle, error) {\n\tpath16, err := windows.UTF16FromString(path)\n\tif err != nil {\n\t\treturn 0, &os.PathError{Op: \"open\", Path: path, Err: err}\n\t}\n\n\tvar oa objectAttributes\n\toa.Length = unsafe.Sizeof(oa)\n\n\tvar ntPath unicodeString\n\tif err := rtlDosPathNameToNtPathName(&path16[0],\n\t\t&ntPath,\n\t\t0,\n\t\t0,\n\t).Err(); err != nil {\n\t\treturn 0, &os.PathError{Op: \"open\", Path: path, Err: err}\n\t}\n\tdefer windows.LocalFree(windows.Handle(ntPath.Buffer)) //nolint:errcheck\n\toa.ObjectName = &ntPath\n\toa.Attributes = windows.OBJ_CASE_INSENSITIVE\n\n\t// The security descriptor is only needed for the first pipe.\n\tif first {\n\t\tif sd != nil {\n\t\t\t//todo: does `sdb` need to be allocated on the heap, or can go allocate it?\n\t\t\tl := uint32(len(sd))\n\t\t\tsdb, err := windows.LocalAlloc(0, l)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, fmt.Errorf(\"LocalAlloc for security descriptor with of length %d: %w\", l, err)\n\t\t\t}\n\t\t\tdefer windows.LocalFree(windows.Handle(sdb)) //nolint:errcheck\n\t\t\tcopy((*[0xffff]byte)(unsafe.Pointer(sdb))[:], sd)\n\t\t\toa.SecurityDescriptor = (*securityDescriptor)(unsafe.Pointer(sdb))\n\t\t} else {\n\t\t\t// Construct the default named pipe security descriptor.\n\t\t\tvar dacl uintptr\n\t\t\tif err := rtlDefaultNpAcl(&dacl).Err(); err != nil {\n\t\t\t\treturn 0, fmt.Errorf(\"getting default named pipe ACL: %w\", err)\n\t\t\t}\n\t\t\tdefer windows.LocalFree(windows.Handle(dacl)) //nolint:errcheck\n\n\t\t\tsdb := &securityDescriptor{\n\t\t\t\tRevision: 1,\n\t\t\t\tControl:  windows.SE_DACL_PRESENT,\n\t\t\t\tDacl:     dacl,\n\t\t\t}\n\t\t\toa.SecurityDescriptor = sdb\n\t\t}\n\t}\n\n\ttyp := uint32(windows.FILE_PIPE_REJECT_REMOTE_CLIENTS)\n\tif c.MessageMode {\n\t\ttyp |= windows.FILE_PIPE_MESSAGE_TYPE\n\t}\n\n\tdisposition := fs.FILE_OPEN\n\taccess := fs.GENERIC_READ | fs.GENERIC_WRITE | fs.SYNCHRONIZE\n\tif first {\n\t\tdisposition = fs.FILE_CREATE\n\t\t// By not asking for read or write access, the named pipe file system\n\t\t// will put this pipe into an initially disconnected state, blocking\n\t\t// client connections until the next call with first == false.\n\t\taccess = fs.SYNCHRONIZE\n\t}\n\n\ttimeout := int64(-50 * 10000) // 50ms\n\n\tvar (\n\t\th    windows.Handle\n\t\tiosb ioStatusBlock\n\t)\n\terr = ntCreateNamedPipeFile(&h,\n\t\taccess,\n\t\t&oa,\n\t\t&iosb,\n\t\tfs.FILE_SHARE_READ|fs.FILE_SHARE_WRITE,\n\t\tdisposition,\n\t\t0,\n\t\ttyp,\n\t\t0,\n\t\t0,\n\t\t0xffffffff,\n\t\tuint32(c.InputBufferSize),\n\t\tuint32(c.OutputBufferSize),\n\t\t&timeout).Err()\n\tif err != nil {\n\t\treturn 0, &os.PathError{Op: \"open\", Path: path, Err: err}\n\t}\n\n\truntime.KeepAlive(ntPath)\n\treturn h, nil\n}\n\nfunc (l *win32PipeListener) makeServerPipe() (*win32File, error) {\n\th, err := makeServerPipeHandle(l.path, nil, &l.config, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tf, err := makeWin32File(h)\n\tif err != nil {\n\t\twindows.Close(h)\n\t\treturn nil, err\n\t}\n\treturn f, nil\n}\n\nfunc (l *win32PipeListener) makeConnectedServerPipe() (*win32File, error) {\n\tp, err := l.makeServerPipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Wait for the client to connect.\n\tch := make(chan error)\n\tgo func(p *win32File) {\n\t\tch <- connectPipe(p)\n\t}(p)\n\n\tselect {\n\tcase err = <-ch:\n\t\tif err != nil {\n\t\t\tp.Close()\n\t\t\tp = nil\n\t\t}\n\tcase <-l.closeCh:\n\t\t// Abort the connect request by closing the handle.\n\t\tp.Close()\n\t\tp = nil\n\t\terr = <-ch\n\t\tif err == nil || err == ErrFileClosed { //nolint:errorlint // err is Errno\n\t\t\terr = ErrPipeListenerClosed\n\t\t}\n\t}\n\treturn p, err\n}\n\nfunc (l *win32PipeListener) listenerRoutine() {\n\tclosed := false\n\tfor !closed {\n\t\tselect {\n\t\tcase <-l.closeCh:\n\t\t\tclosed = true\n\t\tcase responseCh := <-l.acceptCh:\n\t\t\tvar (\n\t\t\t\tp   *win32File\n\t\t\t\terr error\n\t\t\t)\n\t\t\tfor {\n\t\t\t\tp, err = l.makeConnectedServerPipe()\n\t\t\t\t// If the connection was immediately closed by the client, try\n\t\t\t\t// again.\n\t\t\t\tif err != windows.ERROR_NO_DATA { //nolint:errorlint // err is Errno\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tresponseCh <- acceptResponse{p, err}\n\t\t\tclosed = err == ErrPipeListenerClosed //nolint:errorlint // err is Errno\n\t\t}\n\t}\n\twindows.Close(l.firstHandle)\n\tl.firstHandle = 0\n\t// Notify Close() and Accept() callers that the handle has been closed.\n\tclose(l.doneCh)\n}\n\n// PipeConfig contain configuration for the pipe listener.\ntype PipeConfig struct {\n\t// SecurityDescriptor contains a Windows security descriptor in SDDL format.\n\tSecurityDescriptor string\n\n\t// MessageMode determines whether the pipe is in byte or message mode. In either\n\t// case the pipe is read in byte mode by default. The only practical difference in\n\t// this implementation is that CloseWrite() is only supported for message mode pipes;\n\t// CloseWrite() is implemented as a zero-byte write, but zero-byte writes are only\n\t// transferred to the reader (and returned as io.EOF in this implementation)\n\t// when the pipe is in message mode.\n\tMessageMode bool\n\n\t// InputBufferSize specifies the size of the input buffer, in bytes.\n\tInputBufferSize int32\n\n\t// OutputBufferSize specifies the size of the output buffer, in bytes.\n\tOutputBufferSize int32\n}\n\n// ListenPipe creates a listener on a Windows named pipe path, e.g. \\\\.\\pipe\\mypipe.\n// The pipe must not already exist.\nfunc ListenPipe(path string, c *PipeConfig) (net.Listener, error) {\n\tvar (\n\t\tsd  []byte\n\t\terr error\n\t)\n\tif c == nil {\n\t\tc = &PipeConfig{}\n\t}\n\tif c.SecurityDescriptor != \"\" {\n\t\tsd, err = SddlToSecurityDescriptor(c.SecurityDescriptor)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\th, err := makeServerPipeHandle(path, sd, c, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tl := &win32PipeListener{\n\t\tfirstHandle: h,\n\t\tpath:        path,\n\t\tconfig:      *c,\n\t\tacceptCh:    make(chan (chan acceptResponse)),\n\t\tcloseCh:     make(chan int),\n\t\tdoneCh:      make(chan int),\n\t}\n\tgo l.listenerRoutine()\n\treturn l, nil\n}\n\nfunc connectPipe(p *win32File) error {\n\tc, err := p.prepareIO()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer p.wg.Done()\n\n\terr = connectNamedPipe(p.handle, &c.o)\n\t_, err = p.asyncIO(c, nil, 0, err)\n\tif err != nil && err != windows.ERROR_PIPE_CONNECTED { //nolint:errorlint // err is Errno\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (l *win32PipeListener) Accept() (net.Conn, error) {\n\tch := make(chan acceptResponse)\n\tselect {\n\tcase l.acceptCh <- ch:\n\t\tresponse := <-ch\n\t\terr := response.err\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif l.config.MessageMode {\n\t\t\treturn &win32MessageBytePipe{\n\t\t\t\twin32Pipe: win32Pipe{win32File: response.f, path: l.path},\n\t\t\t}, nil\n\t\t}\n\t\treturn &win32Pipe{win32File: response.f, path: l.path}, nil\n\tcase <-l.doneCh:\n\t\treturn nil, ErrPipeListenerClosed\n\t}\n}\n\nfunc (l *win32PipeListener) Close() error {\n\tselect {\n\tcase l.closeCh <- 1:\n\t\t<-l.doneCh\n\tcase <-l.doneCh:\n\t}\n\treturn nil\n}\n\nfunc (l *win32PipeListener) Addr() net.Addr {\n\treturn pipeAddress(l.path)\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go",
    "content": "// Package guid provides a GUID type. The backing structure for a GUID is\n// identical to that used by the golang.org/x/sys/windows GUID type.\n// There are two main binary encodings used for a GUID, the big-endian encoding,\n// and the Windows (mixed-endian) encoding. See here for details:\n// https://en.wikipedia.org/wiki/Universally_unique_identifier#Encoding\npackage guid\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/sha1\" //nolint:gosec // not used for secure application\n\t\"encoding\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n//go:generate go run golang.org/x/tools/cmd/stringer -type=Variant -trimprefix=Variant -linecomment\n\n// Variant specifies which GUID variant (or \"type\") of the GUID. It determines\n// how the entirety of the rest of the GUID is interpreted.\ntype Variant uint8\n\n// The variants specified by RFC 4122 section 4.1.1.\nconst (\n\t// VariantUnknown specifies a GUID variant which does not conform to one of\n\t// the variant encodings specified in RFC 4122.\n\tVariantUnknown Variant = iota\n\tVariantNCS\n\tVariantRFC4122 // RFC 4122\n\tVariantMicrosoft\n\tVariantFuture\n)\n\n// Version specifies how the bits in the GUID were generated. For instance, a\n// version 4 GUID is randomly generated, and a version 5 is generated from the\n// hash of an input string.\ntype Version uint8\n\nfunc (v Version) String() string {\n\treturn strconv.FormatUint(uint64(v), 10)\n}\n\nvar _ = (encoding.TextMarshaler)(GUID{})\nvar _ = (encoding.TextUnmarshaler)(&GUID{})\n\n// NewV4 returns a new version 4 (pseudorandom) GUID, as defined by RFC 4122.\nfunc NewV4() (GUID, error) {\n\tvar b [16]byte\n\tif _, err := rand.Read(b[:]); err != nil {\n\t\treturn GUID{}, err\n\t}\n\n\tg := FromArray(b)\n\tg.setVersion(4) // Version 4 means randomly generated.\n\tg.setVariant(VariantRFC4122)\n\n\treturn g, nil\n}\n\n// NewV5 returns a new version 5 (generated from a string via SHA-1 hashing)\n// GUID, as defined by RFC 4122. The RFC is unclear on the encoding of the name,\n// and the sample code treats it as a series of bytes, so we do the same here.\n//\n// Some implementations, such as those found on Windows, treat the name as a\n// big-endian UTF16 stream of bytes. If that is desired, the string can be\n// encoded as such before being passed to this function.\nfunc NewV5(namespace GUID, name []byte) (GUID, error) {\n\tb := sha1.New() //nolint:gosec // not used for secure application\n\tnamespaceBytes := namespace.ToArray()\n\tb.Write(namespaceBytes[:])\n\tb.Write(name)\n\n\ta := [16]byte{}\n\tcopy(a[:], b.Sum(nil))\n\n\tg := FromArray(a)\n\tg.setVersion(5) // Version 5 means generated from a string.\n\tg.setVariant(VariantRFC4122)\n\n\treturn g, nil\n}\n\nfunc fromArray(b [16]byte, order binary.ByteOrder) GUID {\n\tvar g GUID\n\tg.Data1 = order.Uint32(b[0:4])\n\tg.Data2 = order.Uint16(b[4:6])\n\tg.Data3 = order.Uint16(b[6:8])\n\tcopy(g.Data4[:], b[8:16])\n\treturn g\n}\n\nfunc (g GUID) toArray(order binary.ByteOrder) [16]byte {\n\tb := [16]byte{}\n\torder.PutUint32(b[0:4], g.Data1)\n\torder.PutUint16(b[4:6], g.Data2)\n\torder.PutUint16(b[6:8], g.Data3)\n\tcopy(b[8:16], g.Data4[:])\n\treturn b\n}\n\n// FromArray constructs a GUID from a big-endian encoding array of 16 bytes.\nfunc FromArray(b [16]byte) GUID {\n\treturn fromArray(b, binary.BigEndian)\n}\n\n// ToArray returns an array of 16 bytes representing the GUID in big-endian\n// encoding.\nfunc (g GUID) ToArray() [16]byte {\n\treturn g.toArray(binary.BigEndian)\n}\n\n// FromWindowsArray constructs a GUID from a Windows encoding array of bytes.\nfunc FromWindowsArray(b [16]byte) GUID {\n\treturn fromArray(b, binary.LittleEndian)\n}\n\n// ToWindowsArray returns an array of 16 bytes representing the GUID in Windows\n// encoding.\nfunc (g GUID) ToWindowsArray() [16]byte {\n\treturn g.toArray(binary.LittleEndian)\n}\n\nfunc (g GUID) String() string {\n\treturn fmt.Sprintf(\n\t\t\"%08x-%04x-%04x-%04x-%012x\",\n\t\tg.Data1,\n\t\tg.Data2,\n\t\tg.Data3,\n\t\tg.Data4[:2],\n\t\tg.Data4[2:])\n}\n\n// FromString parses a string containing a GUID and returns the GUID. The only\n// format currently supported is the `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`\n// format.\nfunc FromString(s string) (GUID, error) {\n\tif len(s) != 36 {\n\t\treturn GUID{}, fmt.Errorf(\"invalid GUID %q\", s)\n\t}\n\tif s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {\n\t\treturn GUID{}, fmt.Errorf(\"invalid GUID %q\", s)\n\t}\n\n\tvar g GUID\n\n\tdata1, err := strconv.ParseUint(s[0:8], 16, 32)\n\tif err != nil {\n\t\treturn GUID{}, fmt.Errorf(\"invalid GUID %q\", s)\n\t}\n\tg.Data1 = uint32(data1)\n\n\tdata2, err := strconv.ParseUint(s[9:13], 16, 16)\n\tif err != nil {\n\t\treturn GUID{}, fmt.Errorf(\"invalid GUID %q\", s)\n\t}\n\tg.Data2 = uint16(data2)\n\n\tdata3, err := strconv.ParseUint(s[14:18], 16, 16)\n\tif err != nil {\n\t\treturn GUID{}, fmt.Errorf(\"invalid GUID %q\", s)\n\t}\n\tg.Data3 = uint16(data3)\n\n\tfor i, x := range []int{19, 21, 24, 26, 28, 30, 32, 34} {\n\t\tv, err := strconv.ParseUint(s[x:x+2], 16, 8)\n\t\tif err != nil {\n\t\t\treturn GUID{}, fmt.Errorf(\"invalid GUID %q\", s)\n\t\t}\n\t\tg.Data4[i] = uint8(v)\n\t}\n\n\treturn g, nil\n}\n\nfunc (g *GUID) setVariant(v Variant) {\n\td := g.Data4[0]\n\tswitch v {\n\tcase VariantNCS:\n\t\td = (d & 0x7f)\n\tcase VariantRFC4122:\n\t\td = (d & 0x3f) | 0x80\n\tcase VariantMicrosoft:\n\t\td = (d & 0x1f) | 0xc0\n\tcase VariantFuture:\n\t\td = (d & 0x0f) | 0xe0\n\tcase VariantUnknown:\n\t\tfallthrough\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"invalid variant: %d\", v))\n\t}\n\tg.Data4[0] = d\n}\n\n// Variant returns the GUID variant, as defined in RFC 4122.\nfunc (g GUID) Variant() Variant {\n\tb := g.Data4[0]\n\tif b&0x80 == 0 {\n\t\treturn VariantNCS\n\t} else if b&0xc0 == 0x80 {\n\t\treturn VariantRFC4122\n\t} else if b&0xe0 == 0xc0 {\n\t\treturn VariantMicrosoft\n\t} else if b&0xe0 == 0xe0 {\n\t\treturn VariantFuture\n\t}\n\treturn VariantUnknown\n}\n\nfunc (g *GUID) setVersion(v Version) {\n\tg.Data3 = (g.Data3 & 0x0fff) | (uint16(v) << 12)\n}\n\n// Version returns the GUID version, as defined in RFC 4122.\nfunc (g GUID) Version() Version {\n\treturn Version((g.Data3 & 0xF000) >> 12)\n}\n\n// MarshalText returns the textual representation of the GUID.\nfunc (g GUID) MarshalText() ([]byte, error) {\n\treturn []byte(g.String()), nil\n}\n\n// UnmarshalText takes the textual representation of a GUID, and unmarhals it\n// into this GUID.\nfunc (g *GUID) UnmarshalText(text []byte) error {\n\tg2, err := FromString(string(text))\n\tif err != nil {\n\t\treturn err\n\t}\n\t*g = g2\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go",
    "content": "//go:build !windows\n// +build !windows\n\npackage guid\n\n// GUID represents a GUID/UUID. It has the same structure as\n// golang.org/x/sys/windows.GUID so that it can be used with functions expecting\n// that type. It is defined as its own type as that is only available to builds\n// targeted at `windows`. The representation matches that used by native Windows\n// code.\ntype GUID struct {\n\tData1 uint32\n\tData2 uint16\n\tData3 uint16\n\tData4 [8]byte\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go",
    "content": "//go:build windows\n// +build windows\n\npackage guid\n\nimport \"golang.org/x/sys/windows\"\n\n// GUID represents a GUID/UUID. It has the same structure as\n// golang.org/x/sys/windows.GUID so that it can be used with functions expecting\n// that type. It is defined as its own type so that stringification and\n// marshaling can be supported. The representation matches that used by native\n// Windows code.\ntype GUID windows.GUID\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go",
    "content": "// Code generated by \"stringer -type=Variant -trimprefix=Variant -linecomment\"; DO NOT EDIT.\n\npackage guid\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[VariantUnknown-0]\n\t_ = x[VariantNCS-1]\n\t_ = x[VariantRFC4122-2]\n\t_ = x[VariantMicrosoft-3]\n\t_ = x[VariantFuture-4]\n}\n\nconst _Variant_name = \"UnknownNCSRFC 4122MicrosoftFuture\"\n\nvar _Variant_index = [...]uint8{0, 7, 10, 18, 27, 33}\n\nfunc (i Variant) String() string {\n\tif i >= Variant(len(_Variant_index)-1) {\n\t\treturn \"Variant(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _Variant_name[_Variant_index[i]:_Variant_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/privilege.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"sync\"\n\t\"unicode/utf16\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\n//sys adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges\n//sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf\n//sys revertToSelf() (err error) = advapi32.RevertToSelf\n//sys openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken\n//sys getCurrentThread() (h windows.Handle) = GetCurrentThread\n//sys lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) = advapi32.LookupPrivilegeValueW\n//sys lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) = advapi32.LookupPrivilegeNameW\n//sys lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) = advapi32.LookupPrivilegeDisplayNameW\n\nconst (\n\t//revive:disable-next-line:var-naming ALL_CAPS\n\tSE_PRIVILEGE_ENABLED = windows.SE_PRIVILEGE_ENABLED\n\n\t//revive:disable-next-line:var-naming ALL_CAPS\n\tERROR_NOT_ALL_ASSIGNED windows.Errno = windows.ERROR_NOT_ALL_ASSIGNED\n\n\tSeBackupPrivilege   = \"SeBackupPrivilege\"\n\tSeRestorePrivilege  = \"SeRestorePrivilege\"\n\tSeSecurityPrivilege = \"SeSecurityPrivilege\"\n)\n\nvar (\n\tprivNames     = make(map[string]uint64)\n\tprivNameMutex sync.Mutex\n)\n\n// PrivilegeError represents an error enabling privileges.\ntype PrivilegeError struct {\n\tprivileges []uint64\n}\n\nfunc (e *PrivilegeError) Error() string {\n\ts := \"Could not enable privilege \"\n\tif len(e.privileges) > 1 {\n\t\ts = \"Could not enable privileges \"\n\t}\n\tfor i, p := range e.privileges {\n\t\tif i != 0 {\n\t\t\ts += \", \"\n\t\t}\n\t\ts += `\"`\n\t\ts += getPrivilegeName(p)\n\t\ts += `\"`\n\t}\n\treturn s\n}\n\n// RunWithPrivilege enables a single privilege for a function call.\nfunc RunWithPrivilege(name string, fn func() error) error {\n\treturn RunWithPrivileges([]string{name}, fn)\n}\n\n// RunWithPrivileges enables privileges for a function call.\nfunc RunWithPrivileges(names []string, fn func() error) error {\n\tprivileges, err := mapPrivileges(names)\n\tif err != nil {\n\t\treturn err\n\t}\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n\ttoken, err := newThreadToken()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer releaseThreadToken(token)\n\terr = adjustPrivileges(token, privileges, SE_PRIVILEGE_ENABLED)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn fn()\n}\n\nfunc mapPrivileges(names []string) ([]uint64, error) {\n\tprivileges := make([]uint64, 0, len(names))\n\tprivNameMutex.Lock()\n\tdefer privNameMutex.Unlock()\n\tfor _, name := range names {\n\t\tp, ok := privNames[name]\n\t\tif !ok {\n\t\t\terr := lookupPrivilegeValue(\"\", name, &p)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tprivNames[name] = p\n\t\t}\n\t\tprivileges = append(privileges, p)\n\t}\n\treturn privileges, nil\n}\n\n// EnableProcessPrivileges enables privileges globally for the process.\nfunc EnableProcessPrivileges(names []string) error {\n\treturn enableDisableProcessPrivilege(names, SE_PRIVILEGE_ENABLED)\n}\n\n// DisableProcessPrivileges disables privileges globally for the process.\nfunc DisableProcessPrivileges(names []string) error {\n\treturn enableDisableProcessPrivilege(names, 0)\n}\n\nfunc enableDisableProcessPrivilege(names []string, action uint32) error {\n\tprivileges, err := mapPrivileges(names)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp := windows.CurrentProcess()\n\tvar token windows.Token\n\terr = windows.OpenProcessToken(p, windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, &token)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdefer token.Close()\n\treturn adjustPrivileges(token, privileges, action)\n}\n\nfunc adjustPrivileges(token windows.Token, privileges []uint64, action uint32) error {\n\tvar b bytes.Buffer\n\t_ = binary.Write(&b, binary.LittleEndian, uint32(len(privileges)))\n\tfor _, p := range privileges {\n\t\t_ = binary.Write(&b, binary.LittleEndian, p)\n\t\t_ = binary.Write(&b, binary.LittleEndian, action)\n\t}\n\tprevState := make([]byte, b.Len())\n\treqSize := uint32(0)\n\tsuccess, err := adjustTokenPrivileges(token, false, &b.Bytes()[0], uint32(len(prevState)), &prevState[0], &reqSize)\n\tif !success {\n\t\treturn err\n\t}\n\tif err == ERROR_NOT_ALL_ASSIGNED { //nolint:errorlint // err is Errno\n\t\treturn &PrivilegeError{privileges}\n\t}\n\treturn nil\n}\n\nfunc getPrivilegeName(luid uint64) string {\n\tvar nameBuffer [256]uint16\n\tbufSize := uint32(len(nameBuffer))\n\terr := lookupPrivilegeName(\"\", &luid, &nameBuffer[0], &bufSize)\n\tif err != nil {\n\t\treturn fmt.Sprintf(\"<unknown privilege %d>\", luid)\n\t}\n\n\tvar displayNameBuffer [256]uint16\n\tdisplayBufSize := uint32(len(displayNameBuffer))\n\tvar langID uint32\n\terr = lookupPrivilegeDisplayName(\"\", &nameBuffer[0], &displayNameBuffer[0], &displayBufSize, &langID)\n\tif err != nil {\n\t\treturn fmt.Sprintf(\"<unknown privilege %s>\", string(utf16.Decode(nameBuffer[:bufSize])))\n\t}\n\n\treturn string(utf16.Decode(displayNameBuffer[:displayBufSize]))\n}\n\nfunc newThreadToken() (windows.Token, error) {\n\terr := impersonateSelf(windows.SecurityImpersonation)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tvar token windows.Token\n\terr = openThreadToken(getCurrentThread(), windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, false, &token)\n\tif err != nil {\n\t\trerr := revertToSelf()\n\t\tif rerr != nil {\n\t\t\tpanic(rerr)\n\t\t}\n\t\treturn 0, err\n\t}\n\treturn token, nil\n}\n\nfunc releaseThreadToken(h windows.Token) {\n\terr := revertToSelf()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\th.Close()\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/reparse.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strings\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\nconst (\n\treparseTagMountPoint = 0xA0000003\n\treparseTagSymlink    = 0xA000000C\n)\n\ntype reparseDataBuffer struct {\n\tReparseTag           uint32\n\tReparseDataLength    uint16\n\tReserved             uint16\n\tSubstituteNameOffset uint16\n\tSubstituteNameLength uint16\n\tPrintNameOffset      uint16\n\tPrintNameLength      uint16\n}\n\n// ReparsePoint describes a Win32 symlink or mount point.\ntype ReparsePoint struct {\n\tTarget       string\n\tIsMountPoint bool\n}\n\n// UnsupportedReparsePointError is returned when trying to decode a non-symlink or\n// mount point reparse point.\ntype UnsupportedReparsePointError struct {\n\tTag uint32\n}\n\nfunc (e *UnsupportedReparsePointError) Error() string {\n\treturn fmt.Sprintf(\"unsupported reparse point %x\", e.Tag)\n}\n\n// DecodeReparsePoint decodes a Win32 REPARSE_DATA_BUFFER structure containing either a symlink\n// or a mount point.\nfunc DecodeReparsePoint(b []byte) (*ReparsePoint, error) {\n\ttag := binary.LittleEndian.Uint32(b[0:4])\n\treturn DecodeReparsePointData(tag, b[8:])\n}\n\nfunc DecodeReparsePointData(tag uint32, b []byte) (*ReparsePoint, error) {\n\tisMountPoint := false\n\tswitch tag {\n\tcase reparseTagMountPoint:\n\t\tisMountPoint = true\n\tcase reparseTagSymlink:\n\tdefault:\n\t\treturn nil, &UnsupportedReparsePointError{tag}\n\t}\n\tnameOffset := 8 + binary.LittleEndian.Uint16(b[4:6])\n\tif !isMountPoint {\n\t\tnameOffset += 4\n\t}\n\tnameLength := binary.LittleEndian.Uint16(b[6:8])\n\tname := make([]uint16, nameLength/2)\n\terr := binary.Read(bytes.NewReader(b[nameOffset:nameOffset+nameLength]), binary.LittleEndian, &name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &ReparsePoint{string(utf16.Decode(name)), isMountPoint}, nil\n}\n\nfunc isDriveLetter(c byte) bool {\n\treturn (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')\n}\n\n// EncodeReparsePoint encodes a Win32 REPARSE_DATA_BUFFER structure describing a symlink or\n// mount point.\nfunc EncodeReparsePoint(rp *ReparsePoint) []byte {\n\t// Generate an NT path and determine if this is a relative path.\n\tvar ntTarget string\n\trelative := false\n\tif strings.HasPrefix(rp.Target, `\\\\?\\`) {\n\t\tntTarget = `\\??\\` + rp.Target[4:]\n\t} else if strings.HasPrefix(rp.Target, `\\\\`) {\n\t\tntTarget = `\\??\\UNC\\` + rp.Target[2:]\n\t} else if len(rp.Target) >= 2 && isDriveLetter(rp.Target[0]) && rp.Target[1] == ':' {\n\t\tntTarget = `\\??\\` + rp.Target\n\t} else {\n\t\tntTarget = rp.Target\n\t\trelative = true\n\t}\n\n\t// The paths must be NUL-terminated even though they are counted strings.\n\ttarget16 := utf16.Encode([]rune(rp.Target + \"\\x00\"))\n\tntTarget16 := utf16.Encode([]rune(ntTarget + \"\\x00\"))\n\n\tsize := int(unsafe.Sizeof(reparseDataBuffer{})) - 8\n\tsize += len(ntTarget16)*2 + len(target16)*2\n\n\ttag := uint32(reparseTagMountPoint)\n\tif !rp.IsMountPoint {\n\t\ttag = reparseTagSymlink\n\t\tsize += 4 // Add room for symlink flags\n\t}\n\n\tdata := reparseDataBuffer{\n\t\tReparseTag:           tag,\n\t\tReparseDataLength:    uint16(size),\n\t\tSubstituteNameOffset: 0,\n\t\tSubstituteNameLength: uint16((len(ntTarget16) - 1) * 2),\n\t\tPrintNameOffset:      uint16(len(ntTarget16) * 2),\n\t\tPrintNameLength:      uint16((len(target16) - 1) * 2),\n\t}\n\n\tvar b bytes.Buffer\n\t_ = binary.Write(&b, binary.LittleEndian, &data)\n\tif !rp.IsMountPoint {\n\t\tflags := uint32(0)\n\t\tif relative {\n\t\t\tflags |= 1\n\t\t}\n\t\t_ = binary.Write(&b, binary.LittleEndian, flags)\n\t}\n\n\t_ = binary.Write(&b, binary.LittleEndian, ntTarget16)\n\t_ = binary.Write(&b, binary.LittleEndian, target16)\n\treturn b.Bytes()\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/sd.go",
    "content": "//go:build windows\n// +build windows\n\npackage winio\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\n//sys lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountNameW\n//sys lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountSidW\n//sys convertSidToStringSid(sid *byte, str **uint16) (err error) = advapi32.ConvertSidToStringSidW\n//sys convertStringSidToSid(str *uint16, sid **byte) (err error) = advapi32.ConvertStringSidToSidW\n\ntype AccountLookupError struct {\n\tName string\n\tErr  error\n}\n\nfunc (e *AccountLookupError) Error() string {\n\tif e.Name == \"\" {\n\t\treturn \"lookup account: empty account name specified\"\n\t}\n\tvar s string\n\tswitch {\n\tcase errors.Is(e.Err, windows.ERROR_INVALID_SID):\n\t\ts = \"the security ID structure is invalid\"\n\tcase errors.Is(e.Err, windows.ERROR_NONE_MAPPED):\n\t\ts = \"not found\"\n\tdefault:\n\t\ts = e.Err.Error()\n\t}\n\treturn \"lookup account \" + e.Name + \": \" + s\n}\n\nfunc (e *AccountLookupError) Unwrap() error { return e.Err }\n\ntype SddlConversionError struct {\n\tSddl string\n\tErr  error\n}\n\nfunc (e *SddlConversionError) Error() string {\n\treturn \"convert \" + e.Sddl + \": \" + e.Err.Error()\n}\n\nfunc (e *SddlConversionError) Unwrap() error { return e.Err }\n\n// LookupSidByName looks up the SID of an account by name\n//\n//revive:disable-next-line:var-naming SID, not Sid\nfunc LookupSidByName(name string) (sid string, err error) {\n\tif name == \"\" {\n\t\treturn \"\", &AccountLookupError{name, windows.ERROR_NONE_MAPPED}\n\t}\n\n\tvar sidSize, sidNameUse, refDomainSize uint32\n\terr = lookupAccountName(nil, name, nil, &sidSize, nil, &refDomainSize, &sidNameUse)\n\tif err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno\n\t\treturn \"\", &AccountLookupError{name, err}\n\t}\n\tsidBuffer := make([]byte, sidSize)\n\trefDomainBuffer := make([]uint16, refDomainSize)\n\terr = lookupAccountName(nil, name, &sidBuffer[0], &sidSize, &refDomainBuffer[0], &refDomainSize, &sidNameUse)\n\tif err != nil {\n\t\treturn \"\", &AccountLookupError{name, err}\n\t}\n\tvar strBuffer *uint16\n\terr = convertSidToStringSid(&sidBuffer[0], &strBuffer)\n\tif err != nil {\n\t\treturn \"\", &AccountLookupError{name, err}\n\t}\n\tsid = windows.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:])\n\t_, _ = windows.LocalFree(windows.Handle(unsafe.Pointer(strBuffer)))\n\treturn sid, nil\n}\n\n// LookupNameBySid looks up the name of an account by SID\n//\n//revive:disable-next-line:var-naming SID, not Sid\nfunc LookupNameBySid(sid string) (name string, err error) {\n\tif sid == \"\" {\n\t\treturn \"\", &AccountLookupError{sid, windows.ERROR_NONE_MAPPED}\n\t}\n\n\tsidBuffer, err := windows.UTF16PtrFromString(sid)\n\tif err != nil {\n\t\treturn \"\", &AccountLookupError{sid, err}\n\t}\n\n\tvar sidPtr *byte\n\tif err = convertStringSidToSid(sidBuffer, &sidPtr); err != nil {\n\t\treturn \"\", &AccountLookupError{sid, err}\n\t}\n\tdefer windows.LocalFree(windows.Handle(unsafe.Pointer(sidPtr))) //nolint:errcheck\n\n\tvar nameSize, refDomainSize, sidNameUse uint32\n\terr = lookupAccountSid(nil, sidPtr, nil, &nameSize, nil, &refDomainSize, &sidNameUse)\n\tif err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno\n\t\treturn \"\", &AccountLookupError{sid, err}\n\t}\n\n\tnameBuffer := make([]uint16, nameSize)\n\trefDomainBuffer := make([]uint16, refDomainSize)\n\terr = lookupAccountSid(nil, sidPtr, &nameBuffer[0], &nameSize, &refDomainBuffer[0], &refDomainSize, &sidNameUse)\n\tif err != nil {\n\t\treturn \"\", &AccountLookupError{sid, err}\n\t}\n\n\tname = windows.UTF16ToString(nameBuffer)\n\treturn name, nil\n}\n\nfunc SddlToSecurityDescriptor(sddl string) ([]byte, error) {\n\tsd, err := windows.SecurityDescriptorFromString(sddl)\n\tif err != nil {\n\t\treturn nil, &SddlConversionError{Sddl: sddl, Err: err}\n\t}\n\tb := unsafe.Slice((*byte)(unsafe.Pointer(sd)), sd.Length())\n\treturn b, nil\n}\n\nfunc SecurityDescriptorToSddl(sd []byte) (string, error) {\n\tif l := int(unsafe.Sizeof(windows.SECURITY_DESCRIPTOR{})); len(sd) < l {\n\t\treturn \"\", fmt.Errorf(\"SecurityDescriptor (%d) smaller than expected (%d): %w\", len(sd), l, windows.ERROR_INCORRECT_SIZE)\n\t}\n\ts := (*windows.SECURITY_DESCRIPTOR)(unsafe.Pointer(&sd[0]))\n\treturn s.String(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/syscall.go",
    "content": "//go:build windows\n\npackage winio\n\n//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go ./*.go\n"
  },
  {
    "path": "vendor/github.com/Microsoft/go-winio/zsyscall_windows.go",
    "content": "//go:build windows\n\n// Code generated by 'go generate' using \"github.com/Microsoft/go-winio/tools/mkwinsyscall\"; DO NOT EDIT.\n\npackage winio\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nvar _ unsafe.Pointer\n\n// Do the interface allocations only once for common\n// Errno values.\nconst (\n\terrnoERROR_IO_PENDING = 997\n)\n\nvar (\n\terrERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)\n\terrERROR_EINVAL     error = syscall.EINVAL\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e syscall.Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn errERROR_EINVAL\n\tcase errnoERROR_IO_PENDING:\n\t\treturn errERROR_IO_PENDING\n\t}\n\treturn e\n}\n\nvar (\n\tmodadvapi32 = windows.NewLazySystemDLL(\"advapi32.dll\")\n\tmodkernel32 = windows.NewLazySystemDLL(\"kernel32.dll\")\n\tmodntdll    = windows.NewLazySystemDLL(\"ntdll.dll\")\n\tmodws2_32   = windows.NewLazySystemDLL(\"ws2_32.dll\")\n\n\tprocAdjustTokenPrivileges              = modadvapi32.NewProc(\"AdjustTokenPrivileges\")\n\tprocConvertSidToStringSidW             = modadvapi32.NewProc(\"ConvertSidToStringSidW\")\n\tprocConvertStringSidToSidW             = modadvapi32.NewProc(\"ConvertStringSidToSidW\")\n\tprocImpersonateSelf                    = modadvapi32.NewProc(\"ImpersonateSelf\")\n\tprocLookupAccountNameW                 = modadvapi32.NewProc(\"LookupAccountNameW\")\n\tprocLookupAccountSidW                  = modadvapi32.NewProc(\"LookupAccountSidW\")\n\tprocLookupPrivilegeDisplayNameW        = modadvapi32.NewProc(\"LookupPrivilegeDisplayNameW\")\n\tprocLookupPrivilegeNameW               = modadvapi32.NewProc(\"LookupPrivilegeNameW\")\n\tprocLookupPrivilegeValueW              = modadvapi32.NewProc(\"LookupPrivilegeValueW\")\n\tprocOpenThreadToken                    = modadvapi32.NewProc(\"OpenThreadToken\")\n\tprocRevertToSelf                       = modadvapi32.NewProc(\"RevertToSelf\")\n\tprocBackupRead                         = modkernel32.NewProc(\"BackupRead\")\n\tprocBackupWrite                        = modkernel32.NewProc(\"BackupWrite\")\n\tprocCancelIoEx                         = modkernel32.NewProc(\"CancelIoEx\")\n\tprocConnectNamedPipe                   = modkernel32.NewProc(\"ConnectNamedPipe\")\n\tprocCreateIoCompletionPort             = modkernel32.NewProc(\"CreateIoCompletionPort\")\n\tprocCreateNamedPipeW                   = modkernel32.NewProc(\"CreateNamedPipeW\")\n\tprocDisconnectNamedPipe                = modkernel32.NewProc(\"DisconnectNamedPipe\")\n\tprocGetCurrentThread                   = modkernel32.NewProc(\"GetCurrentThread\")\n\tprocGetNamedPipeHandleStateW           = modkernel32.NewProc(\"GetNamedPipeHandleStateW\")\n\tprocGetNamedPipeInfo                   = modkernel32.NewProc(\"GetNamedPipeInfo\")\n\tprocGetQueuedCompletionStatus          = modkernel32.NewProc(\"GetQueuedCompletionStatus\")\n\tprocSetFileCompletionNotificationModes = modkernel32.NewProc(\"SetFileCompletionNotificationModes\")\n\tprocNtCreateNamedPipeFile              = modntdll.NewProc(\"NtCreateNamedPipeFile\")\n\tprocRtlDefaultNpAcl                    = modntdll.NewProc(\"RtlDefaultNpAcl\")\n\tprocRtlDosPathNameToNtPathName_U       = modntdll.NewProc(\"RtlDosPathNameToNtPathName_U\")\n\tprocRtlNtStatusToDosErrorNoTeb         = modntdll.NewProc(\"RtlNtStatusToDosErrorNoTeb\")\n\tprocWSAGetOverlappedResult             = modws2_32.NewProc(\"WSAGetOverlappedResult\")\n)\n\nfunc adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) {\n\tvar _p0 uint32\n\tif releaseAll {\n\t\t_p0 = 1\n\t}\n\tr0, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize)))\n\tsuccess = r0 != 0\n\tif true {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc convertSidToStringSid(sid *byte, str **uint16) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc convertStringSidToSid(str *uint16, sid **byte) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc impersonateSelf(level uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(level))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(accountName)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _lookupAccountName(systemName, _p0, sid, sidSize, refDomain, refDomainSize, sidNameUse)\n}\n\nfunc _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procLookupAccountNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procLookupAccountSidW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(systemName)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _lookupPrivilegeDisplayName(_p0, name, buffer, size, languageId)\n}\n\nfunc _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procLookupPrivilegeDisplayNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(systemName)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _lookupPrivilegeName(_p0, luid, buffer, size)\n}\n\nfunc _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint16, size *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procLookupPrivilegeNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(systemName)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *uint16\n\t_p1, err = syscall.UTF16PtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _lookupPrivilegeValue(_p0, _p1, luid)\n}\n\nfunc _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint64) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procLookupPrivilegeValueW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) {\n\tvar _p0 uint32\n\tif openAsSelf {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procOpenThreadToken.Addr(), uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc revertToSelf() (err error) {\n\tr1, _, e1 := syscall.SyscallN(procRevertToSelf.Addr())\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 uint32\n\tif abort {\n\t\t_p1 = 1\n\t}\n\tvar _p2 uint32\n\tif processSecurity {\n\t\t_p2 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procBackupRead.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 uint32\n\tif abort {\n\t\t_p1 = 1\n\t}\n\tvar _p2 uint32\n\tif processSecurity {\n\t\t_p2 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procBackupWrite.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(file), uintptr(unsafe.Pointer(o)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(o)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount))\n\tnewport = windows.Handle(r0)\n\tif newport == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) {\n\tvar _p0 *uint16\n\t_p0, err = syscall.UTF16PtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn _createNamedPipe(_p0, flags, pipeMode, maxInstances, outSize, inSize, defaultTimeout, sa)\n}\n\nfunc _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) {\n\tr0, _, e1 := syscall.SyscallN(procCreateNamedPipeW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)))\n\thandle = windows.Handle(r0)\n\tif handle == windows.InvalidHandle {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc disconnectNamedPipe(pipe windows.Handle) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procDisconnectNamedPipe.Addr(), uintptr(pipe))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getCurrentThread() (h windows.Handle) {\n\tr0, _, _ := syscall.SyscallN(procGetCurrentThread.Addr())\n\th = windows.Handle(r0)\n\treturn\n}\n\nfunc getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetNamedPipeHandleStateW.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetNamedPipeInfo.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) {\n\tr1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(h), uintptr(flags))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) {\n\tr0, _, _ := syscall.SyscallN(procNtCreateNamedPipeFile.Addr(), uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)))\n\tstatus = ntStatus(r0)\n\treturn\n}\n\nfunc rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) {\n\tr0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(dacl)))\n\tstatus = ntStatus(r0)\n\treturn\n}\n\nfunc rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) {\n\tr0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved))\n\tstatus = ntStatus(r0)\n\treturn\n}\n\nfunc rtlNtStatusToDosError(status ntStatus) (winerr error) {\n\tr0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(status))\n\tif r0 != 0 {\n\t\twinerr = syscall.Errno(r0)\n\t}\n\treturn\n}\n\nfunc wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) {\n\tvar _p0 uint32\n\tif wait {\n\t\t_p0 = 1\n\t}\n\tr1, _, e1 := syscall.SyscallN(procWSAGetOverlappedResult.Addr(), uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)))\n\tif r1 == 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n\n# IDEs\n.idea/\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Cenk Altı\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"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/README.md",
    "content": "# Exponential Backoff [![GoDoc][godoc image]][godoc] [![Build Status][travis image]][travis] [![Coverage Status][coveralls image]][coveralls]\n\nThis is a Go port of the exponential backoff algorithm from [Google's HTTP Client Library for Java][google-http-java-client].\n\n[Exponential backoff][exponential backoff wiki]\nis an algorithm that uses feedback to multiplicatively decrease the rate of some process,\nin order to gradually find an acceptable rate.\nThe retries exponentially increase and stop increasing when a certain threshold is met.\n\n## Usage\n\nImport path is `github.com/cenkalti/backoff/v4`. Please note the version part at the end.\n\nUse https://pkg.go.dev/github.com/cenkalti/backoff/v4 to view the documentation.\n\n## Contributing\n\n* I would like to keep this library as small as possible.\n* Please don't send a PR without opening an issue and discussing it first.\n* If proposed change is not a common use case, I will probably not accept it.\n\n[godoc]: https://pkg.go.dev/github.com/cenkalti/backoff/v4\n[godoc image]: https://godoc.org/github.com/cenkalti/backoff?status.png\n[travis]: https://travis-ci.org/cenkalti/backoff\n[travis image]: https://travis-ci.org/cenkalti/backoff.png?branch=master\n[coveralls]: https://coveralls.io/github/cenkalti/backoff?branch=master\n[coveralls image]: https://coveralls.io/repos/github/cenkalti/backoff/badge.svg?branch=master\n\n[google-http-java-client]: https://github.com/google/google-http-java-client/blob/da1aa993e90285ec18579f1553339b00e19b3ab5/google-http-client/src/main/java/com/google/api/client/util/ExponentialBackOff.java\n[exponential backoff wiki]: http://en.wikipedia.org/wiki/Exponential_backoff\n\n[advanced example]: https://pkg.go.dev/github.com/cenkalti/backoff/v4?tab=doc#pkg-examples\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/backoff.go",
    "content": "// Package backoff implements backoff algorithms for retrying operations.\n//\n// Use Retry function for retrying operations that may fail.\n// If Retry does not meet your needs,\n// copy/paste the function into your project and modify as you wish.\n//\n// There is also Ticker type similar to time.Ticker.\n// You can use it if you need to work with channels.\n//\n// See Examples section below for usage examples.\npackage backoff\n\nimport \"time\"\n\n// BackOff is a backoff policy for retrying an operation.\ntype BackOff interface {\n\t// NextBackOff returns the duration to wait before retrying the operation,\n\t// or backoff. Stop to indicate that no more retries should be made.\n\t//\n\t// Example usage:\n\t//\n\t// \tduration := backoff.NextBackOff();\n\t// \tif (duration == backoff.Stop) {\n\t// \t\t// Do not retry operation.\n\t// \t} else {\n\t// \t\t// Sleep for duration and retry operation.\n\t// \t}\n\t//\n\tNextBackOff() time.Duration\n\n\t// Reset to initial state.\n\tReset()\n}\n\n// Stop indicates that no more retries should be made for use in NextBackOff().\nconst Stop time.Duration = -1\n\n// ZeroBackOff is a fixed backoff policy whose backoff time is always zero,\n// meaning that the operation is retried immediately without waiting, indefinitely.\ntype ZeroBackOff struct{}\n\nfunc (b *ZeroBackOff) Reset() {}\n\nfunc (b *ZeroBackOff) NextBackOff() time.Duration { return 0 }\n\n// StopBackOff is a fixed backoff policy that always returns backoff.Stop for\n// NextBackOff(), meaning that the operation should never be retried.\ntype StopBackOff struct{}\n\nfunc (b *StopBackOff) Reset() {}\n\nfunc (b *StopBackOff) NextBackOff() time.Duration { return Stop }\n\n// ConstantBackOff is a backoff policy that always returns the same backoff delay.\n// This is in contrast to an exponential backoff policy,\n// which returns a delay that grows longer as you call NextBackOff() over and over again.\ntype ConstantBackOff struct {\n\tInterval time.Duration\n}\n\nfunc (b *ConstantBackOff) Reset()                     {}\nfunc (b *ConstantBackOff) NextBackOff() time.Duration { return b.Interval }\n\nfunc NewConstantBackOff(d time.Duration) *ConstantBackOff {\n\treturn &ConstantBackOff{Interval: d}\n}\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/context.go",
    "content": "package backoff\n\nimport (\n\t\"context\"\n\t\"time\"\n)\n\n// BackOffContext is a backoff policy that stops retrying after the context\n// is canceled.\ntype BackOffContext interface { // nolint: golint\n\tBackOff\n\tContext() context.Context\n}\n\ntype backOffContext struct {\n\tBackOff\n\tctx context.Context\n}\n\n// WithContext returns a BackOffContext with context ctx\n//\n// ctx must not be nil\nfunc WithContext(b BackOff, ctx context.Context) BackOffContext { // nolint: golint\n\tif ctx == nil {\n\t\tpanic(\"nil context\")\n\t}\n\n\tif b, ok := b.(*backOffContext); ok {\n\t\treturn &backOffContext{\n\t\t\tBackOff: b.BackOff,\n\t\t\tctx:     ctx,\n\t\t}\n\t}\n\n\treturn &backOffContext{\n\t\tBackOff: b,\n\t\tctx:     ctx,\n\t}\n}\n\nfunc getContext(b BackOff) context.Context {\n\tif cb, ok := b.(BackOffContext); ok {\n\t\treturn cb.Context()\n\t}\n\tif tb, ok := b.(*backOffTries); ok {\n\t\treturn getContext(tb.delegate)\n\t}\n\treturn context.Background()\n}\n\nfunc (b *backOffContext) Context() context.Context {\n\treturn b.ctx\n}\n\nfunc (b *backOffContext) NextBackOff() time.Duration {\n\tselect {\n\tcase <-b.ctx.Done():\n\t\treturn Stop\n\tdefault:\n\t\treturn b.BackOff.NextBackOff()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/exponential.go",
    "content": "package backoff\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n)\n\n/*\nExponentialBackOff is a backoff implementation that increases the backoff\nperiod for each retry attempt using a randomization function that grows exponentially.\n\nNextBackOff() is calculated using the following formula:\n\n randomized interval =\n     RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])\n\nIn other words NextBackOff() will range between the randomization factor\npercentage below and above the retry interval.\n\nFor example, given the following parameters:\n\n RetryInterval = 2\n RandomizationFactor = 0.5\n Multiplier = 2\n\nthe actual backoff period used in the next retry attempt will range between 1 and 3 seconds,\nmultiplied by the exponential, that is, between 2 and 6 seconds.\n\nNote: MaxInterval caps the RetryInterval and not the randomized interval.\n\nIf the time elapsed since an ExponentialBackOff instance is created goes past the\nMaxElapsedTime, then the method NextBackOff() starts returning backoff.Stop.\n\nThe elapsed time can be reset by calling Reset().\n\nExample: Given the following default arguments, for 10 tries the sequence will be,\nand assuming we go over the MaxElapsedTime on the 10th try:\n\n Request #  RetryInterval (seconds)  Randomized Interval (seconds)\n\n  1          0.5                     [0.25,   0.75]\n  2          0.75                    [0.375,  1.125]\n  3          1.125                   [0.562,  1.687]\n  4          1.687                   [0.8435, 2.53]\n  5          2.53                    [1.265,  3.795]\n  6          3.795                   [1.897,  5.692]\n  7          5.692                   [2.846,  8.538]\n  8          8.538                   [4.269, 12.807]\n  9         12.807                   [6.403, 19.210]\n 10         19.210                   backoff.Stop\n\nNote: Implementation is not thread-safe.\n*/\ntype ExponentialBackOff struct {\n\tInitialInterval     time.Duration\n\tRandomizationFactor float64\n\tMultiplier          float64\n\tMaxInterval         time.Duration\n\t// After MaxElapsedTime the ExponentialBackOff returns Stop.\n\t// It never stops if MaxElapsedTime == 0.\n\tMaxElapsedTime time.Duration\n\tStop           time.Duration\n\tClock          Clock\n\n\tcurrentInterval time.Duration\n\tstartTime       time.Time\n}\n\n// Clock is an interface that returns current time for BackOff.\ntype Clock interface {\n\tNow() time.Time\n}\n\n// Default values for ExponentialBackOff.\nconst (\n\tDefaultInitialInterval     = 500 * time.Millisecond\n\tDefaultRandomizationFactor = 0.5\n\tDefaultMultiplier          = 1.5\n\tDefaultMaxInterval         = 60 * time.Second\n\tDefaultMaxElapsedTime      = 15 * time.Minute\n)\n\n// NewExponentialBackOff creates an instance of ExponentialBackOff using default values.\nfunc NewExponentialBackOff() *ExponentialBackOff {\n\tb := &ExponentialBackOff{\n\t\tInitialInterval:     DefaultInitialInterval,\n\t\tRandomizationFactor: DefaultRandomizationFactor,\n\t\tMultiplier:          DefaultMultiplier,\n\t\tMaxInterval:         DefaultMaxInterval,\n\t\tMaxElapsedTime:      DefaultMaxElapsedTime,\n\t\tStop:                Stop,\n\t\tClock:               SystemClock,\n\t}\n\tb.Reset()\n\treturn b\n}\n\ntype systemClock struct{}\n\nfunc (t systemClock) Now() time.Time {\n\treturn time.Now()\n}\n\n// SystemClock implements Clock interface that uses time.Now().\nvar SystemClock = systemClock{}\n\n// Reset the interval back to the initial retry interval and restarts the timer.\n// Reset must be called before using b.\nfunc (b *ExponentialBackOff) Reset() {\n\tb.currentInterval = b.InitialInterval\n\tb.startTime = b.Clock.Now()\n}\n\n// NextBackOff calculates the next backoff interval using the formula:\n// \tRandomized interval = RetryInterval * (1 ± RandomizationFactor)\nfunc (b *ExponentialBackOff) NextBackOff() time.Duration {\n\t// Make sure we have not gone over the maximum elapsed time.\n\telapsed := b.GetElapsedTime()\n\tnext := getRandomValueFromInterval(b.RandomizationFactor, rand.Float64(), b.currentInterval)\n\tb.incrementCurrentInterval()\n\tif b.MaxElapsedTime != 0 && elapsed+next > b.MaxElapsedTime {\n\t\treturn b.Stop\n\t}\n\treturn next\n}\n\n// GetElapsedTime returns the elapsed time since an ExponentialBackOff instance\n// is created and is reset when Reset() is called.\n//\n// The elapsed time is computed using time.Now().UnixNano(). It is\n// safe to call even while the backoff policy is used by a running\n// ticker.\nfunc (b *ExponentialBackOff) GetElapsedTime() time.Duration {\n\treturn b.Clock.Now().Sub(b.startTime)\n}\n\n// Increments the current interval by multiplying it with the multiplier.\nfunc (b *ExponentialBackOff) incrementCurrentInterval() {\n\t// Check for overflow, if overflow is detected set the current interval to the max interval.\n\tif float64(b.currentInterval) >= float64(b.MaxInterval)/b.Multiplier {\n\t\tb.currentInterval = b.MaxInterval\n\t} else {\n\t\tb.currentInterval = time.Duration(float64(b.currentInterval) * b.Multiplier)\n\t}\n}\n\n// Returns a random value from the following interval:\n// \t[currentInterval - randomizationFactor * currentInterval, currentInterval + randomizationFactor * currentInterval].\nfunc getRandomValueFromInterval(randomizationFactor, random float64, currentInterval time.Duration) time.Duration {\n\tif randomizationFactor == 0 {\n\t\treturn currentInterval // make sure no randomness is used when randomizationFactor is 0.\n\t}\n\tvar delta = randomizationFactor * float64(currentInterval)\n\tvar minInterval = float64(currentInterval) - delta\n\tvar maxInterval = float64(currentInterval) + delta\n\n\t// Get a random value from the range [minInterval, maxInterval].\n\t// The formula used below has a +1 because if the minInterval is 1 and the maxInterval is 3 then\n\t// we want a 33% chance for selecting either 1, 2 or 3.\n\treturn time.Duration(minInterval + (random * (maxInterval - minInterval + 1)))\n}\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/retry.go",
    "content": "package backoff\n\nimport (\n\t\"errors\"\n\t\"time\"\n)\n\n// An OperationWithData is executing by RetryWithData() or RetryNotifyWithData().\n// The operation will be retried using a backoff policy if it returns an error.\ntype OperationWithData[T any] func() (T, error)\n\n// An Operation is executing by Retry() or RetryNotify().\n// The operation will be retried using a backoff policy if it returns an error.\ntype Operation func() error\n\nfunc (o Operation) withEmptyData() OperationWithData[struct{}] {\n\treturn func() (struct{}, error) {\n\t\treturn struct{}{}, o()\n\t}\n}\n\n// Notify is a notify-on-error function. It receives an operation error and\n// backoff delay if the operation failed (with an error).\n//\n// NOTE that if the backoff policy stated to stop retrying,\n// the notify function isn't called.\ntype Notify func(error, time.Duration)\n\n// Retry the operation o until it does not return error or BackOff stops.\n// o is guaranteed to be run at least once.\n//\n// If o returns a *PermanentError, the operation is not retried, and the\n// wrapped error is returned.\n//\n// Retry sleeps the goroutine for the duration returned by BackOff after a\n// failed operation returns.\nfunc Retry(o Operation, b BackOff) error {\n\treturn RetryNotify(o, b, nil)\n}\n\n// RetryWithData is like Retry but returns data in the response too.\nfunc RetryWithData[T any](o OperationWithData[T], b BackOff) (T, error) {\n\treturn RetryNotifyWithData(o, b, nil)\n}\n\n// RetryNotify calls notify function with the error and wait duration\n// for each failed attempt before sleep.\nfunc RetryNotify(operation Operation, b BackOff, notify Notify) error {\n\treturn RetryNotifyWithTimer(operation, b, notify, nil)\n}\n\n// RetryNotifyWithData is like RetryNotify but returns data in the response too.\nfunc RetryNotifyWithData[T any](operation OperationWithData[T], b BackOff, notify Notify) (T, error) {\n\treturn doRetryNotify(operation, b, notify, nil)\n}\n\n// RetryNotifyWithTimer calls notify function with the error and wait duration using the given Timer\n// for each failed attempt before sleep.\n// A default timer that uses system timer is used when nil is passed.\nfunc RetryNotifyWithTimer(operation Operation, b BackOff, notify Notify, t Timer) error {\n\t_, err := doRetryNotify(operation.withEmptyData(), b, notify, t)\n\treturn err\n}\n\n// RetryNotifyWithTimerAndData is like RetryNotifyWithTimer but returns data in the response too.\nfunc RetryNotifyWithTimerAndData[T any](operation OperationWithData[T], b BackOff, notify Notify, t Timer) (T, error) {\n\treturn doRetryNotify(operation, b, notify, t)\n}\n\nfunc doRetryNotify[T any](operation OperationWithData[T], b BackOff, notify Notify, t Timer) (T, error) {\n\tvar (\n\t\terr  error\n\t\tnext time.Duration\n\t\tres  T\n\t)\n\tif t == nil {\n\t\tt = &defaultTimer{}\n\t}\n\n\tdefer func() {\n\t\tt.Stop()\n\t}()\n\n\tctx := getContext(b)\n\n\tb.Reset()\n\tfor {\n\t\tres, err = operation()\n\t\tif err == nil {\n\t\t\treturn res, nil\n\t\t}\n\n\t\tvar permanent *PermanentError\n\t\tif errors.As(err, &permanent) {\n\t\t\treturn res, permanent.Err\n\t\t}\n\n\t\tif next = b.NextBackOff(); next == Stop {\n\t\t\tif cerr := ctx.Err(); cerr != nil {\n\t\t\t\treturn res, cerr\n\t\t\t}\n\n\t\t\treturn res, err\n\t\t}\n\n\t\tif notify != nil {\n\t\t\tnotify(err, next)\n\t\t}\n\n\t\tt.Start(next)\n\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn res, ctx.Err()\n\t\tcase <-t.C():\n\t\t}\n\t}\n}\n\n// PermanentError signals that the operation should not be retried.\ntype PermanentError struct {\n\tErr error\n}\n\nfunc (e *PermanentError) Error() string {\n\treturn e.Err.Error()\n}\n\nfunc (e *PermanentError) Unwrap() error {\n\treturn e.Err\n}\n\nfunc (e *PermanentError) Is(target error) bool {\n\t_, ok := target.(*PermanentError)\n\treturn ok\n}\n\n// Permanent wraps the given err in a *PermanentError.\nfunc Permanent(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &PermanentError{\n\t\tErr: err,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/ticker.go",
    "content": "package backoff\n\nimport (\n\t\"context\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Ticker holds a channel that delivers `ticks' of a clock at times reported by a BackOff.\n//\n// Ticks will continue to arrive when the previous operation is still running,\n// so operations that take a while to fail could run in quick succession.\ntype Ticker struct {\n\tC        <-chan time.Time\n\tc        chan time.Time\n\tb        BackOff\n\tctx      context.Context\n\ttimer    Timer\n\tstop     chan struct{}\n\tstopOnce sync.Once\n}\n\n// NewTicker returns a new Ticker containing a channel that will send\n// the time at times specified by the BackOff argument. Ticker is\n// guaranteed to tick at least once.  The channel is closed when Stop\n// method is called or BackOff stops. It is not safe to manipulate the\n// provided backoff policy (notably calling NextBackOff or Reset)\n// while the ticker is running.\nfunc NewTicker(b BackOff) *Ticker {\n\treturn NewTickerWithTimer(b, &defaultTimer{})\n}\n\n// NewTickerWithTimer returns a new Ticker with a custom timer.\n// A default timer that uses system timer is used when nil is passed.\nfunc NewTickerWithTimer(b BackOff, timer Timer) *Ticker {\n\tif timer == nil {\n\t\ttimer = &defaultTimer{}\n\t}\n\tc := make(chan time.Time)\n\tt := &Ticker{\n\t\tC:     c,\n\t\tc:     c,\n\t\tb:     b,\n\t\tctx:   getContext(b),\n\t\ttimer: timer,\n\t\tstop:  make(chan struct{}),\n\t}\n\tt.b.Reset()\n\tgo t.run()\n\treturn t\n}\n\n// Stop turns off a ticker. After Stop, no more ticks will be sent.\nfunc (t *Ticker) Stop() {\n\tt.stopOnce.Do(func() { close(t.stop) })\n}\n\nfunc (t *Ticker) run() {\n\tc := t.c\n\tdefer close(c)\n\n\t// Ticker is guaranteed to tick at least once.\n\tafterC := t.send(time.Now())\n\n\tfor {\n\t\tif afterC == nil {\n\t\t\treturn\n\t\t}\n\n\t\tselect {\n\t\tcase tick := <-afterC:\n\t\t\tafterC = t.send(tick)\n\t\tcase <-t.stop:\n\t\t\tt.c = nil // Prevent future ticks from being sent to the channel.\n\t\t\treturn\n\t\tcase <-t.ctx.Done():\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (t *Ticker) send(tick time.Time) <-chan time.Time {\n\tselect {\n\tcase t.c <- tick:\n\tcase <-t.stop:\n\t\treturn nil\n\t}\n\n\tnext := t.b.NextBackOff()\n\tif next == Stop {\n\t\tt.Stop()\n\t\treturn nil\n\t}\n\n\tt.timer.Start(next)\n\treturn t.timer.C()\n}\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/timer.go",
    "content": "package backoff\n\nimport \"time\"\n\ntype Timer interface {\n\tStart(duration time.Duration)\n\tStop()\n\tC() <-chan time.Time\n}\n\n// defaultTimer implements Timer interface using time.Timer\ntype defaultTimer struct {\n\ttimer *time.Timer\n}\n\n// C returns the timers channel which receives the current time when the timer fires.\nfunc (t *defaultTimer) C() <-chan time.Time {\n\treturn t.timer.C\n}\n\n// Start starts the timer to fire after the given duration\nfunc (t *defaultTimer) Start(duration time.Duration) {\n\tif t.timer == nil {\n\t\tt.timer = time.NewTimer(duration)\n\t} else {\n\t\tt.timer.Reset(duration)\n\t}\n}\n\n// Stop is called when the timer is not used anymore and resources may be freed.\nfunc (t *defaultTimer) Stop() {\n\tif t.timer != nil {\n\t\tt.timer.Stop()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cenkalti/backoff/v4/tries.go",
    "content": "package backoff\n\nimport \"time\"\n\n/*\nWithMaxRetries creates a wrapper around another BackOff, which will\nreturn Stop if NextBackOff() has been called too many times since\nthe last time Reset() was called\n\nNote: Implementation is not thread-safe.\n*/\nfunc WithMaxRetries(b BackOff, max uint64) BackOff {\n\treturn &backOffTries{delegate: b, maxTries: max}\n}\n\ntype backOffTries struct {\n\tdelegate BackOff\n\tmaxTries uint64\n\tnumTries uint64\n}\n\nfunc (b *backOffTries) NextBackOff() time.Duration {\n\tif b.maxTries == 0 {\n\t\treturn Stop\n\t}\n\tif b.maxTries > 0 {\n\t\tif b.maxTries <= b.numTries {\n\t\t\treturn Stop\n\t\t}\n\t\tb.numTries++\n\t}\n\treturn b.delegate.NextBackOff()\n}\n\nfunc (b *backOffTries) Reset() {\n\tb.numTries = 0\n\tb.delegate.Reset()\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/log/.golangci.yml",
    "content": "linters:\n  enable:\n    - exportloopref # Checks for pointers to enclosing loop variables\n    - gofmt\n    - goimports\n    - gosec\n    - ineffassign\n    - misspell\n    - nolintlint\n    - revive\n    - staticcheck\n    - tenv # Detects using os.Setenv instead of t.Setenv since Go 1.17\n    - unconvert\n    - unused\n    - vet\n    - dupword # Checks for duplicate words in the source code\n  disable:\n    - errcheck\n\nrun:\n  timeout: 5m\n  skip-dirs:\n    - api\n    - cluster\n    - design\n    - docs\n    - docs/man\n    - releases\n    - reports\n    - test # e2e scripts\n"
  },
  {
    "path": "vendor/github.com/containerd/log/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        https://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   Copyright The containerd Authors\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       https://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": "vendor/github.com/containerd/log/README.md",
    "content": "# log\n\nA Go package providing a common logging interface across containerd repositories and a way for clients to use and configure logging in containerd packages.\n\nThis package is not intended to be used as a standalone logging package outside of the containerd ecosystem and is intended as an interface wrapper around a logging implementation.\nIn the future this package may be replaced with a common go logging interface.\n\n## Project details\n\n**log** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).\nAs a containerd sub-project, you will find the:\n * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md),\n * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS),\n * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md)\n\ninformation in our [`containerd/project`](https://github.com/containerd/project) repository.\n\n"
  },
  {
    "path": "vendor/github.com/containerd/log/context.go",
    "content": "/*\n   Copyright The containerd Authors.\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// Package log provides types and functions related to logging, passing\n// loggers through a context, and attaching context to the logger.\n//\n// # Transitional types\n//\n// This package contains various types that are aliases for types in [logrus].\n// These aliases are intended for transitioning away from hard-coding logrus\n// as logging implementation. Consumers of this package are encouraged to use\n// the type-aliases from this package instead of directly using their logrus\n// equivalent.\n//\n// The intent is to replace these aliases with locally defined types and\n// interfaces once all consumers are no longer directly importing logrus\n// types.\n//\n// IMPORTANT: due to the transitional purpose of this package, it is not\n// guaranteed for the full logrus API to be provided in the future. As\n// outlined, these aliases are provided as a step to transition away from\n// a specific implementation which, as a result, exposes the full logrus API.\n// While no decisions have been made on the ultimate design and interface\n// provided by this package, we do not expect carrying \"less common\" features.\npackage log\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/sirupsen/logrus\"\n)\n\n// G is a shorthand for [GetLogger].\n//\n// We may want to define this locally to a package to get package tagged log\n// messages.\nvar G = GetLogger\n\n// L is an alias for the standard logger.\nvar L = &Entry{\n\tLogger: logrus.StandardLogger(),\n\t// Default is three fields plus a little extra room.\n\tData: make(Fields, 6),\n}\n\ntype loggerKey struct{}\n\n// Fields type to pass to \"WithFields\".\ntype Fields = map[string]any\n\n// Entry is a logging entry. It contains all the fields passed with\n// [Entry.WithFields]. It's finally logged when Trace, Debug, Info, Warn,\n// Error, Fatal or Panic is called on it. These objects can be reused and\n// passed around as much as you wish to avoid field duplication.\n//\n// Entry is a transitional type, and currently an alias for [logrus.Entry].\ntype Entry = logrus.Entry\n\n// RFC3339NanoFixed is [time.RFC3339Nano] with nanoseconds padded using\n// zeros to ensure the formatted time is always the same number of\n// characters.\nconst RFC3339NanoFixed = \"2006-01-02T15:04:05.000000000Z07:00\"\n\n// Level is a logging level.\ntype Level = logrus.Level\n\n// Supported log levels.\nconst (\n\t// TraceLevel level. Designates finer-grained informational events\n\t// than [DebugLevel].\n\tTraceLevel Level = logrus.TraceLevel\n\n\t// DebugLevel level. Usually only enabled when debugging. Very verbose\n\t// logging.\n\tDebugLevel Level = logrus.DebugLevel\n\n\t// InfoLevel level. General operational entries about what's going on\n\t// inside the application.\n\tInfoLevel Level = logrus.InfoLevel\n\n\t// WarnLevel level. Non-critical entries that deserve eyes.\n\tWarnLevel Level = logrus.WarnLevel\n\n\t// ErrorLevel level. Logs errors that should definitely be noted.\n\t// Commonly used for hooks to send errors to an error tracking service.\n\tErrorLevel Level = logrus.ErrorLevel\n\n\t// FatalLevel level. Logs and then calls \"logger.Exit(1)\". It exits\n\t// even if the logging level is set to Panic.\n\tFatalLevel Level = logrus.FatalLevel\n\n\t// PanicLevel level. This is the highest level of severity. Logs and\n\t// then calls panic with the message passed to Debug, Info, ...\n\tPanicLevel Level = logrus.PanicLevel\n)\n\n// SetLevel sets log level globally. It returns an error if the given\n// level is not supported.\n//\n// level can be one of:\n//\n//   - \"trace\" ([TraceLevel])\n//   - \"debug\" ([DebugLevel])\n//   - \"info\" ([InfoLevel])\n//   - \"warn\" ([WarnLevel])\n//   - \"error\" ([ErrorLevel])\n//   - \"fatal\" ([FatalLevel])\n//   - \"panic\" ([PanicLevel])\nfunc SetLevel(level string) error {\n\tlvl, err := logrus.ParseLevel(level)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tL.Logger.SetLevel(lvl)\n\treturn nil\n}\n\n// GetLevel returns the current log level.\nfunc GetLevel() Level {\n\treturn L.Logger.GetLevel()\n}\n\n// OutputFormat specifies a log output format.\ntype OutputFormat string\n\n// Supported log output formats.\nconst (\n\t// TextFormat represents the text logging format.\n\tTextFormat OutputFormat = \"text\"\n\n\t// JSONFormat represents the JSON logging format.\n\tJSONFormat OutputFormat = \"json\"\n)\n\n// SetFormat sets the log output format ([TextFormat] or [JSONFormat]).\nfunc SetFormat(format OutputFormat) error {\n\tswitch format {\n\tcase TextFormat:\n\t\tL.Logger.SetFormatter(&logrus.TextFormatter{\n\t\t\tTimestampFormat: RFC3339NanoFixed,\n\t\t\tFullTimestamp:   true,\n\t\t})\n\t\treturn nil\n\tcase JSONFormat:\n\t\tL.Logger.SetFormatter(&logrus.JSONFormatter{\n\t\t\tTimestampFormat: RFC3339NanoFixed,\n\t\t})\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown log format: %s\", format)\n\t}\n}\n\n// WithLogger returns a new context with the provided logger. Use in\n// combination with logger.WithField(s) for great effect.\nfunc WithLogger(ctx context.Context, logger *Entry) context.Context {\n\treturn context.WithValue(ctx, loggerKey{}, logger.WithContext(ctx))\n}\n\n// GetLogger retrieves the current logger from the context. If no logger is\n// available, the default logger is returned.\nfunc GetLogger(ctx context.Context) *Entry {\n\tif logger := ctx.Value(loggerKey{}); logger != nil {\n\t\treturn logger.(*Entry)\n\t}\n\treturn L.WithContext(ctx)\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/.gitattributes",
    "content": "*.go text eol=lf"
  },
  {
    "path": "vendor/github.com/containerd/platforms/.golangci.yml",
    "content": "linters:\n  enable:\n    - exportloopref # Checks for pointers to enclosing loop variables\n    - gofmt\n    - goimports\n    - gosec\n    - ineffassign\n    - misspell\n    - nolintlint\n    - revive\n    - staticcheck\n    - tenv # Detects using os.Setenv instead of t.Setenv since Go 1.17\n    - unconvert\n    - unused\n    - vet\n    - dupword # Checks for duplicate words in the source code\n  disable:\n    - errcheck\n\nrun:\n  timeout: 5m\n  skip-dirs:\n    - api\n    - cluster\n    - design\n    - docs\n    - docs/man\n    - releases\n    - reports\n    - test # e2e scripts\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        https://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   Copyright The containerd Authors\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       https://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": "vendor/github.com/containerd/platforms/README.md",
    "content": "# platforms\n\nA Go package for formatting, normalizing and matching container platforms.\n\nThis package is based on the Open Containers Image Spec definition of a [platform](https://github.com/opencontainers/image-spec/blob/main/specs-go/v1/descriptor.go#L52).\n\n## Platform Specifier\n\nWhile the OCI platform specifications provide a tool for components to\nspecify structured information, user input typically doesn't need the full\ncontext and much can be inferred. To solve this problem, this package introduces\n\"specifiers\". A specifier has the format\n`<os>|<arch>|<os>/<arch>[/<variant>]`.  The user can provide either the\noperating system or the architecture or both.\n\nAn example of a common specifier is `linux/amd64`. If the host has a default\nruntime that matches this, the user can simply provide the component that\nmatters. For example, if an image provides `amd64` and `arm64` support, the\noperating system, `linux` can be inferred, so they only have to provide\n`arm64` or `amd64`. Similar behavior is implemented for operating systems,\nwhere the architecture may be known but a runtime may support images from\ndifferent operating systems.\n\n## Project details\n\n**platforms** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).\nAs a containerd sub-project, you will find the:\n * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md),\n * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS),\n * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md)\n\ninformation in our [`containerd/project`](https://github.com/containerd/project) repository."
  },
  {
    "path": "vendor/github.com/containerd/platforms/compare.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// MatchComparer is able to match and compare platforms to\n// filter and sort platforms.\ntype MatchComparer interface {\n\tMatcher\n\n\tLess(specs.Platform, specs.Platform) bool\n}\n\n// platformVector returns an (ordered) vector of appropriate specs.Platform\n// objects to try matching for the given platform object (see platforms.Only).\nfunc platformVector(platform specs.Platform) []specs.Platform {\n\tvector := []specs.Platform{platform}\n\n\tswitch platform.Architecture {\n\tcase \"amd64\":\n\t\tif amd64Version, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, \"v\")); err == nil && amd64Version > 1 {\n\t\t\tfor amd64Version--; amd64Version >= 1; amd64Version-- {\n\t\t\t\tvector = append(vector, specs.Platform{\n\t\t\t\t\tArchitecture: platform.Architecture,\n\t\t\t\t\tOS:           platform.OS,\n\t\t\t\t\tOSVersion:    platform.OSVersion,\n\t\t\t\t\tOSFeatures:   platform.OSFeatures,\n\t\t\t\t\tVariant:      \"v\" + strconv.Itoa(amd64Version),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tvector = append(vector, specs.Platform{\n\t\t\tArchitecture: \"386\",\n\t\t\tOS:           platform.OS,\n\t\t\tOSVersion:    platform.OSVersion,\n\t\t\tOSFeatures:   platform.OSFeatures,\n\t\t})\n\tcase \"arm\":\n\t\tif armVersion, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, \"v\")); err == nil && armVersion > 5 {\n\t\t\tfor armVersion--; armVersion >= 5; armVersion-- {\n\t\t\t\tvector = append(vector, specs.Platform{\n\t\t\t\t\tArchitecture: platform.Architecture,\n\t\t\t\t\tOS:           platform.OS,\n\t\t\t\t\tOSVersion:    platform.OSVersion,\n\t\t\t\t\tOSFeatures:   platform.OSFeatures,\n\t\t\t\t\tVariant:      \"v\" + strconv.Itoa(armVersion),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\tcase \"arm64\":\n\t\tvariant := platform.Variant\n\t\tif variant == \"\" {\n\t\t\tvariant = \"v8\"\n\t\t}\n\t\tvector = append(vector, platformVector(specs.Platform{\n\t\t\tArchitecture: \"arm\",\n\t\t\tOS:           platform.OS,\n\t\t\tOSVersion:    platform.OSVersion,\n\t\t\tOSFeatures:   platform.OSFeatures,\n\t\t\tVariant:      variant,\n\t\t})...)\n\t}\n\n\treturn vector\n}\n\n// Only returns a match comparer for a single platform\n// using default resolution logic for the platform.\n//\n// For arm/v8, will also match arm/v7, arm/v6 and arm/v5\n// For arm/v7, will also match arm/v6 and arm/v5\n// For arm/v6, will also match arm/v5\n// For amd64, will also match 386\nfunc Only(platform specs.Platform) MatchComparer {\n\treturn Ordered(platformVector(Normalize(platform))...)\n}\n\n// OnlyStrict returns a match comparer for a single platform.\n//\n// Unlike Only, OnlyStrict does not match sub platforms.\n// So, \"arm/vN\" will not match \"arm/vM\" where M < N,\n// and \"amd64\" will not also match \"386\".\n//\n// OnlyStrict matches non-canonical forms.\n// So, \"arm64\" matches \"arm/64/v8\".\nfunc OnlyStrict(platform specs.Platform) MatchComparer {\n\treturn Ordered(Normalize(platform))\n}\n\n// Ordered returns a platform MatchComparer which matches any of the platforms\n// but orders them in order they are provided.\nfunc Ordered(platforms ...specs.Platform) MatchComparer {\n\tmatchers := make([]Matcher, len(platforms))\n\tfor i := range platforms {\n\t\tmatchers[i] = NewMatcher(platforms[i])\n\t}\n\treturn orderedPlatformComparer{\n\t\tmatchers: matchers,\n\t}\n}\n\n// Any returns a platform MatchComparer which matches any of the platforms\n// with no preference for ordering.\nfunc Any(platforms ...specs.Platform) MatchComparer {\n\tmatchers := make([]Matcher, len(platforms))\n\tfor i := range platforms {\n\t\tmatchers[i] = NewMatcher(platforms[i])\n\t}\n\treturn anyPlatformComparer{\n\t\tmatchers: matchers,\n\t}\n}\n\n// All is a platform MatchComparer which matches all platforms\n// with preference for ordering.\nvar All MatchComparer = allPlatformComparer{}\n\ntype orderedPlatformComparer struct {\n\tmatchers []Matcher\n}\n\nfunc (c orderedPlatformComparer) Match(platform specs.Platform) bool {\n\tfor _, m := range c.matchers {\n\t\tif m.Match(platform) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (c orderedPlatformComparer) Less(p1 specs.Platform, p2 specs.Platform) bool {\n\tfor _, m := range c.matchers {\n\t\tp1m := m.Match(p1)\n\t\tp2m := m.Match(p2)\n\t\tif p1m && !p2m {\n\t\t\treturn true\n\t\t}\n\t\tif p1m || p2m {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn false\n}\n\ntype anyPlatformComparer struct {\n\tmatchers []Matcher\n}\n\nfunc (c anyPlatformComparer) Match(platform specs.Platform) bool {\n\tfor _, m := range c.matchers {\n\t\tif m.Match(platform) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (c anyPlatformComparer) Less(p1, p2 specs.Platform) bool {\n\tvar p1m, p2m bool\n\tfor _, m := range c.matchers {\n\t\tif !p1m && m.Match(p1) {\n\t\t\tp1m = true\n\t\t}\n\t\tif !p2m && m.Match(p2) {\n\t\t\tp2m = true\n\t\t}\n\t\tif p1m && p2m {\n\t\t\treturn false\n\t\t}\n\t}\n\t// If one matches, and the other does, sort match first\n\treturn p1m && !p2m\n}\n\ntype allPlatformComparer struct{}\n\nfunc (allPlatformComparer) Match(specs.Platform) bool {\n\treturn true\n}\n\nfunc (allPlatformComparer) Less(specs.Platform, specs.Platform) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/cpuinfo.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"runtime\"\n\t\"sync\"\n\n\t\"github.com/containerd/log\"\n)\n\n// Present the ARM instruction set architecture, eg: v7, v8\n// Don't use this value directly; call cpuVariant() instead.\nvar cpuVariantValue string\n\nvar cpuVariantOnce sync.Once\n\nfunc cpuVariant() string {\n\tcpuVariantOnce.Do(func() {\n\t\tif isArmArch(runtime.GOARCH) {\n\t\t\tvar err error\n\t\t\tcpuVariantValue, err = getCPUVariant()\n\t\t\tif err != nil {\n\t\t\t\tlog.L.Errorf(\"Error getCPUVariant for OS %s: %v\", runtime.GOOS, err)\n\t\t\t}\n\t\t}\n\t})\n\treturn cpuVariantValue\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/cpuinfo_linux.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// getMachineArch retrieves the machine architecture through system call\nfunc getMachineArch() (string, error) {\n\tvar uname unix.Utsname\n\terr := unix.Uname(&uname)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tarch := string(uname.Machine[:bytes.IndexByte(uname.Machine[:], 0)])\n\n\treturn arch, nil\n}\n\n// For Linux, the kernel has already detected the ABI, ISA and Features.\n// So we don't need to access the ARM registers to detect platform information\n// by ourselves. We can just parse these information from /proc/cpuinfo\nfunc getCPUInfo(pattern string) (info string, err error) {\n\n\tcpuinfo, err := os.Open(\"/proc/cpuinfo\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer cpuinfo.Close()\n\n\t// Start to Parse the Cpuinfo line by line. For SMP SoC, we parse\n\t// the first core is enough.\n\tscanner := bufio.NewScanner(cpuinfo)\n\tfor scanner.Scan() {\n\t\tnewline := scanner.Text()\n\t\tlist := strings.Split(newline, \":\")\n\n\t\tif len(list) > 1 && strings.EqualFold(strings.TrimSpace(list[0]), pattern) {\n\t\t\treturn strings.TrimSpace(list[1]), nil\n\t\t}\n\t}\n\n\t// Check whether the scanner encountered errors\n\terr = scanner.Err()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn \"\", fmt.Errorf(\"getCPUInfo for pattern %s: %w\", pattern, errNotFound)\n}\n\n// getCPUVariantFromArch get CPU variant from arch through a system call\nfunc getCPUVariantFromArch(arch string) (string, error) {\n\n\tvar variant string\n\n\tarch = strings.ToLower(arch)\n\n\tif arch == \"aarch64\" {\n\t\tvariant = \"8\"\n\t} else if arch[0:4] == \"armv\" && len(arch) >= 5 {\n\t\t// Valid arch format is in form of armvXx\n\t\tswitch arch[3:5] {\n\t\tcase \"v8\":\n\t\t\tvariant = \"8\"\n\t\tcase \"v7\":\n\t\t\tvariant = \"7\"\n\t\tcase \"v6\":\n\t\t\tvariant = \"6\"\n\t\tcase \"v5\":\n\t\t\tvariant = \"5\"\n\t\tcase \"v4\":\n\t\t\tvariant = \"4\"\n\t\tcase \"v3\":\n\t\t\tvariant = \"3\"\n\t\tdefault:\n\t\t\tvariant = \"unknown\"\n\t\t}\n\t} else {\n\t\treturn \"\", fmt.Errorf(\"getCPUVariantFromArch invalid arch: %s, %w\", arch, errInvalidArgument)\n\t}\n\treturn variant, nil\n}\n\n// getCPUVariant returns cpu variant for ARM\n// We first try reading \"Cpu architecture\" field from /proc/cpuinfo\n// If we can't find it, then fall back using a system call\n// This is to cover running ARM in emulated environment on x86 host as this field in /proc/cpuinfo\n// was not present.\nfunc getCPUVariant() (string, error) {\n\tvariant, err := getCPUInfo(\"Cpu architecture\")\n\tif err != nil {\n\t\tif errors.Is(err, errNotFound) {\n\t\t\t// Let's try getting CPU variant from machine architecture\n\t\t\tarch, err := getMachineArch()\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"failure getting machine architecture: %v\", err)\n\t\t\t}\n\n\t\t\tvariant, err = getCPUVariantFromArch(arch)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"failure getting CPU variant from machine architecture: %v\", err)\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\", fmt.Errorf(\"failure getting CPU variant: %v\", err)\n\t\t}\n\t}\n\n\t// handle edge case for Raspberry Pi ARMv6 devices (which due to a kernel quirk, report \"CPU architecture: 7\")\n\t// https://www.raspberrypi.org/forums/viewtopic.php?t=12614\n\tif runtime.GOARCH == \"arm\" && variant == \"7\" {\n\t\tmodel, err := getCPUInfo(\"model name\")\n\t\tif err == nil && strings.HasPrefix(strings.ToLower(model), \"armv6-compatible\") {\n\t\t\tvariant = \"6\"\n\t\t}\n\t}\n\n\tswitch strings.ToLower(variant) {\n\tcase \"8\", \"aarch64\":\n\t\tvariant = \"v8\"\n\tcase \"7\", \"7m\", \"?(12)\", \"?(13)\", \"?(14)\", \"?(15)\", \"?(16)\", \"?(17)\":\n\t\tvariant = \"v7\"\n\tcase \"6\", \"6tej\":\n\t\tvariant = \"v6\"\n\tcase \"5\", \"5t\", \"5te\", \"5tej\":\n\t\tvariant = \"v5\"\n\tcase \"4\", \"4t\":\n\t\tvariant = \"v4\"\n\tcase \"3\":\n\t\tvariant = \"v3\"\n\tdefault:\n\t\tvariant = \"unknown\"\n\t}\n\n\treturn variant, nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/cpuinfo_other.go",
    "content": "//go:build !linux\n\n/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc getCPUVariant() (string, error) {\n\n\tvar variant string\n\n\tif runtime.GOOS == \"windows\" || runtime.GOOS == \"darwin\" {\n\t\t// Windows/Darwin only supports v7 for ARM32 and v8 for ARM64 and so we can use\n\t\t// runtime.GOARCH to determine the variants\n\t\tswitch runtime.GOARCH {\n\t\tcase \"arm64\":\n\t\t\tvariant = \"v8\"\n\t\tcase \"arm\":\n\t\t\tvariant = \"v7\"\n\t\tdefault:\n\t\t\tvariant = \"unknown\"\n\t\t}\n\t} else if runtime.GOOS == \"freebsd\" {\n\t\t// FreeBSD supports ARMv6 and ARMv7 as well as ARMv4 and ARMv5 (though deprecated)\n\t\t// detecting those variants is currently unimplemented\n\t\tswitch runtime.GOARCH {\n\t\tcase \"arm64\":\n\t\t\tvariant = \"v8\"\n\t\tdefault:\n\t\t\tvariant = \"unknown\"\n\t\t}\n\t} else {\n\t\treturn \"\", fmt.Errorf(\"getCPUVariant for OS %s: %v\", runtime.GOOS, errNotImplemented)\n\t}\n\n\treturn variant, nil\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/database.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"runtime\"\n\t\"strings\"\n)\n\n// These function are generated from https://golang.org/src/go/build/syslist.go.\n//\n// We use switch statements because they are slightly faster than map lookups\n// and use a little less memory.\n\n// isKnownOS returns true if we know about the operating system.\n//\n// The OS value should be normalized before calling this function.\nfunc isKnownOS(os string) bool {\n\tswitch os {\n\tcase \"aix\", \"android\", \"darwin\", \"dragonfly\", \"freebsd\", \"hurd\", \"illumos\", \"ios\", \"js\", \"linux\", \"nacl\", \"netbsd\", \"openbsd\", \"plan9\", \"solaris\", \"windows\", \"zos\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// isArmArch returns true if the architecture is ARM.\n//\n// The arch value should be normalized before being passed to this function.\nfunc isArmArch(arch string) bool {\n\tswitch arch {\n\tcase \"arm\", \"arm64\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// isKnownArch returns true if we know about the architecture.\n//\n// The arch value should be normalized before being passed to this function.\nfunc isKnownArch(arch string) bool {\n\tswitch arch {\n\tcase \"386\", \"amd64\", \"amd64p32\", \"arm\", \"armbe\", \"arm64\", \"arm64be\", \"ppc64\", \"ppc64le\", \"loong64\", \"mips\", \"mipsle\", \"mips64\", \"mips64le\", \"mips64p32\", \"mips64p32le\", \"ppc\", \"riscv\", \"riscv64\", \"s390\", \"s390x\", \"sparc\", \"sparc64\", \"wasm\":\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc normalizeOS(os string) string {\n\tif os == \"\" {\n\t\treturn runtime.GOOS\n\t}\n\tos = strings.ToLower(os)\n\n\tswitch os {\n\tcase \"macos\":\n\t\tos = \"darwin\"\n\t}\n\treturn os\n}\n\n// normalizeArch normalizes the architecture.\nfunc normalizeArch(arch, variant string) (string, string) {\n\tarch, variant = strings.ToLower(arch), strings.ToLower(variant)\n\tswitch arch {\n\tcase \"i386\":\n\t\tarch = \"386\"\n\t\tvariant = \"\"\n\tcase \"x86_64\", \"x86-64\", \"amd64\":\n\t\tarch = \"amd64\"\n\t\tif variant == \"v1\" {\n\t\t\tvariant = \"\"\n\t\t}\n\tcase \"aarch64\", \"arm64\":\n\t\tarch = \"arm64\"\n\t\tswitch variant {\n\t\tcase \"8\", \"v8\":\n\t\t\tvariant = \"\"\n\t\t}\n\tcase \"armhf\":\n\t\tarch = \"arm\"\n\t\tvariant = \"v7\"\n\tcase \"armel\":\n\t\tarch = \"arm\"\n\t\tvariant = \"v6\"\n\tcase \"arm\":\n\t\tswitch variant {\n\t\tcase \"\", \"7\":\n\t\t\tvariant = \"v7\"\n\t\tcase \"5\", \"6\", \"8\":\n\t\t\tvariant = \"v\" + variant\n\t\t}\n\t}\n\n\treturn arch, variant\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/defaults.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\n// DefaultString returns the default string specifier for the platform,\n// with [PR#6](https://github.com/containerd/platforms/pull/6) the result\n// may now also include the OSVersion from the provided platform specification.\nfunc DefaultString() string {\n\treturn FormatAll(DefaultSpec())\n}\n\n// DefaultStrict returns strict form of Default.\nfunc DefaultStrict() MatchComparer {\n\treturn OnlyStrict(DefaultSpec())\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/defaults_darwin.go",
    "content": "//go:build darwin\n\n/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"runtime\"\n\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// DefaultSpec returns the current platform's default platform specification.\nfunc DefaultSpec() specs.Platform {\n\treturn specs.Platform{\n\t\tOS:           runtime.GOOS,\n\t\tArchitecture: runtime.GOARCH,\n\t\t// The Variant field will be empty if arch != ARM.\n\t\tVariant: cpuVariant(),\n\t}\n}\n\n// Default returns the default matcher for the platform.\nfunc Default() MatchComparer {\n\treturn Ordered(DefaultSpec(), specs.Platform{\n\t\t// darwin runtime also supports Linux binary via runu/LKL\n\t\tOS:           \"linux\",\n\t\tArchitecture: runtime.GOARCH,\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/defaults_freebsd.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"runtime\"\n\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// DefaultSpec returns the current platform's default platform specification.\nfunc DefaultSpec() specs.Platform {\n\treturn specs.Platform{\n\t\tOS:           runtime.GOOS,\n\t\tArchitecture: runtime.GOARCH,\n\t\t// The Variant field will be empty if arch != ARM.\n\t\tVariant: cpuVariant(),\n\t}\n}\n\n// Default returns the default matcher for the platform.\nfunc Default() MatchComparer {\n\treturn Ordered(DefaultSpec(), specs.Platform{\n\t\tOS:           \"linux\",\n\t\tArchitecture: runtime.GOARCH,\n\t\t// The Variant field will be empty if arch != ARM.\n\t\tVariant: cpuVariant(),\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/defaults_unix.go",
    "content": "//go:build !windows && !darwin && !freebsd\n\n/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"runtime\"\n\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// DefaultSpec returns the current platform's default platform specification.\nfunc DefaultSpec() specs.Platform {\n\treturn specs.Platform{\n\t\tOS:           runtime.GOOS,\n\t\tArchitecture: runtime.GOARCH,\n\t\t// The Variant field will be empty if arch != ARM.\n\t\tVariant: cpuVariant(),\n\t}\n}\n\n// Default returns the default matcher for the platform.\nfunc Default() MatchComparer {\n\treturn Only(DefaultSpec())\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/defaults_windows.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n\t\"golang.org/x/sys/windows\"\n)\n\n// DefaultSpec returns the current platform's default platform specification.\nfunc DefaultSpec() specs.Platform {\n\tmajor, minor, build := windows.RtlGetNtVersionNumbers()\n\treturn specs.Platform{\n\t\tOS:           runtime.GOOS,\n\t\tArchitecture: runtime.GOARCH,\n\t\tOSVersion:    fmt.Sprintf(\"%d.%d.%d\", major, minor, build),\n\t\t// The Variant field will be empty if arch != ARM.\n\t\tVariant: cpuVariant(),\n\t}\n}\n\ntype windowsmatcher struct {\n\tspecs.Platform\n\tosVersionPrefix string\n\tdefaultMatcher  Matcher\n}\n\n// Match matches platform with the same windows major, minor\n// and build version.\nfunc (m windowsmatcher) Match(p specs.Platform) bool {\n\tmatch := m.defaultMatcher.Match(p)\n\n\tif match && m.OS == \"windows\" {\n\t\t// HPC containers do not have OS version filled\n\t\tif m.OSVersion == \"\" || p.OSVersion == \"\" {\n\t\t\treturn true\n\t\t}\n\n\t\thostOsVersion := getOSVersion(m.osVersionPrefix)\n\t\tctrOsVersion := getOSVersion(p.OSVersion)\n\t\treturn checkHostAndContainerCompat(hostOsVersion, ctrOsVersion)\n\t}\n\n\treturn match\n}\n\nfunc getOSVersion(osVersionPrefix string) osVersion {\n\tparts := strings.Split(osVersionPrefix, \".\")\n\tif len(parts) < 3 {\n\t\treturn osVersion{}\n\t}\n\n\tmajorVersion, _ := strconv.Atoi(parts[0])\n\tminorVersion, _ := strconv.Atoi(parts[1])\n\tbuildNumber, _ := strconv.Atoi(parts[2])\n\n\treturn osVersion{\n\t\tMajorVersion: uint8(majorVersion),\n\t\tMinorVersion: uint8(minorVersion),\n\t\tBuild:        uint16(buildNumber),\n\t}\n}\n\n// Less sorts matched platforms in front of other platforms.\n// For matched platforms, it puts platforms with larger revision\n// number in front.\nfunc (m windowsmatcher) Less(p1, p2 specs.Platform) bool {\n\tm1, m2 := m.Match(p1), m.Match(p2)\n\tif m1 && m2 {\n\t\tr1, r2 := revision(p1.OSVersion), revision(p2.OSVersion)\n\t\treturn r1 > r2\n\t}\n\treturn m1 && !m2\n}\n\nfunc revision(v string) int {\n\tparts := strings.Split(v, \".\")\n\tif len(parts) < 4 {\n\t\treturn 0\n\t}\n\tr, err := strconv.Atoi(parts[3])\n\tif err != nil {\n\t\treturn 0\n\t}\n\treturn r\n}\n\nfunc prefix(v string) string {\n\tparts := strings.Split(v, \".\")\n\tif len(parts) < 4 {\n\t\treturn v\n\t}\n\treturn strings.Join(parts[0:3], \".\")\n}\n\n// Default returns the current platform's default platform specification.\nfunc Default() MatchComparer {\n\treturn Only(DefaultSpec())\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/errors.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport \"errors\"\n\n// These errors mirror the errors defined in [github.com/containerd/containerd/errdefs],\n// however, they are not exported as they are not expected to be used as sentinel\n// errors by consumers of this package.\n//\n//nolint:unused // not all errors are used on all platforms.\nvar (\n\terrNotFound        = errors.New(\"not found\")\n\terrInvalidArgument = errors.New(\"invalid argument\")\n\terrNotImplemented  = errors.New(\"not implemented\")\n)\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/platform_compat_windows.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\n// osVersion is a wrapper for Windows version information\n// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx\ntype osVersion struct {\n\tVersion      uint32\n\tMajorVersion uint8\n\tMinorVersion uint8\n\tBuild        uint16\n}\n\n// Windows Client and Server build numbers.\n//\n// See:\n// https://learn.microsoft.com/en-us/windows/release-health/release-information\n// https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info\n// https://learn.microsoft.com/en-us/windows/release-health/windows11-release-information\nconst (\n\t// rs5 (version 1809, codename \"Redstone 5\") corresponds to Windows Server\n\t// 2019 (ltsc2019), and Windows 10 (October 2018 Update).\n\trs5 = 17763\n\n\t// v21H2Server corresponds to Windows Server 2022 (ltsc2022).\n\tv21H2Server = 20348\n\n\t// v22H2Win11 corresponds to Windows 11 (2022 Update).\n\tv22H2Win11 = 22621\n)\n\n// List of stable ABI compliant ltsc releases\n// Note: List must be sorted in ascending order\nvar compatLTSCReleases = []uint16{\n\tv21H2Server,\n}\n\n// CheckHostAndContainerCompat checks if given host and container\n// OS versions are compatible.\n// It includes support for stable ABI compliant versions as well.\n// Every release after WS 2022 will support the previous ltsc\n// container image. Stable ABI is in preview mode for windows 11 client.\n// Refer: https://learn.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility?tabs=windows-server-2022%2Cwindows-10#windows-server-host-os-compatibility\nfunc checkHostAndContainerCompat(host, ctr osVersion) bool {\n\t// check major minor versions of host and guest\n\tif host.MajorVersion != ctr.MajorVersion ||\n\t\thost.MinorVersion != ctr.MinorVersion {\n\t\treturn false\n\t}\n\n\t// If host is < WS 2022, exact version match is required\n\tif host.Build < v21H2Server {\n\t\treturn host.Build == ctr.Build\n\t}\n\n\tvar supportedLtscRelease uint16\n\tfor i := len(compatLTSCReleases) - 1; i >= 0; i-- {\n\t\tif host.Build >= compatLTSCReleases[i] {\n\t\t\tsupportedLtscRelease = compatLTSCReleases[i]\n\t\t\tbreak\n\t\t}\n\t}\n\treturn ctr.Build >= supportedLtscRelease && ctr.Build <= host.Build\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/platforms.go",
    "content": "/*\n   Copyright The containerd Authors.\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// Package platforms provides a toolkit for normalizing, matching and\n// specifying container platforms.\n//\n// Centered around OCI platform specifications, we define a string-based\n// specifier syntax that can be used for user input. With a specifier, users\n// only need to specify the parts of the platform that are relevant to their\n// context, providing an operating system or architecture or both.\n//\n// How do I use this package?\n//\n// The vast majority of use cases should simply use the match function with\n// user input. The first step is to parse a specifier into a matcher:\n//\n//\tm, err := Parse(\"linux\")\n//\tif err != nil { ... }\n//\n// Once you have a matcher, use it to match against the platform declared by a\n// component, typically from an image or runtime. Since extracting an images\n// platform is a little more involved, we'll use an example against the\n// platform default:\n//\n//\tif ok := m.Match(Default()); !ok { /* doesn't match */ }\n//\n// This can be composed in loops for resolving runtimes or used as a filter for\n// fetch and select images.\n//\n// More details of the specifier syntax and platform spec follow.\n//\n// # Declaring Platform Support\n//\n// Components that have strict platform requirements should use the OCI\n// platform specification to declare their support. Typically, this will be\n// images and runtimes that should make these declaring which platform they\n// support specifically. This looks roughly as follows:\n//\n//\t  type Platform struct {\n//\t\t   Architecture string\n//\t\t   OS           string\n//\t\t   Variant      string\n//\t  }\n//\n// Most images and runtimes should at least set Architecture and OS, according\n// to their GOARCH and GOOS values, respectively (follow the OCI image\n// specification when in doubt). ARM should set variant under certain\n// discussions, which are outlined below.\n//\n// # Platform Specifiers\n//\n// While the OCI platform specifications provide a tool for components to\n// specify structured information, user input typically doesn't need the full\n// context and much can be inferred. To solve this problem, we introduced\n// \"specifiers\". A specifier has the format\n// `<os>|<arch>|<os>/<arch>[/<variant>]`.  The user can provide either the\n// operating system or the architecture or both.\n//\n// An example of a common specifier is `linux/amd64`. If the host has a default\n// of runtime that matches this, the user can simply provide the component that\n// matters. For example, if a image provides amd64 and arm64 support, the\n// operating system, `linux` can be inferred, so they only have to provide\n// `arm64` or `amd64`. Similar behavior is implemented for operating systems,\n// where the architecture may be known but a runtime may support images from\n// different operating systems.\n//\n// # Normalization\n//\n// Because not all users are familiar with the way the Go runtime represents\n// platforms, several normalizations have been provided to make this package\n// easier to user.\n//\n// The following are performed for architectures:\n//\n//\tValue    Normalized\n//\taarch64  arm64\n//\tarmhf    arm\n//\tarmel    arm/v6\n//\ti386     386\n//\tx86_64   amd64\n//\tx86-64   amd64\n//\n// We also normalize the operating system `macos` to `darwin`.\n//\n// # ARM Support\n//\n// To qualify ARM architecture, the Variant field is used to qualify the arm\n// version. The most common arm version, v7, is represented without the variant\n// unless it is explicitly provided. This is treated as equivalent to armhf. A\n// previous architecture, armel, will be normalized to arm/v6.\n//\n// Similarly, the most common arm64 version v8, and most common amd64 version v1\n// are represented without the variant.\n//\n// While these normalizations are provided, their support on arm platforms has\n// not yet been fully implemented and tested.\npackage platforms\n\nimport (\n\t\"fmt\"\n\t\"path\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\nvar (\n\tspecifierRe    = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)\n\tosAndVersionRe = regexp.MustCompile(`^([A-Za-z0-9_-]+)(?:\\(([A-Za-z0-9_.-]*)\\))?$`)\n)\n\nconst osAndVersionFormat = \"%s(%s)\"\n\n// Platform is a type alias for convenience, so there is no need to import image-spec package everywhere.\ntype Platform = specs.Platform\n\n// Matcher matches platforms specifications, provided by an image or runtime.\ntype Matcher interface {\n\tMatch(platform specs.Platform) bool\n}\n\n// NewMatcher returns a simple matcher based on the provided platform\n// specification. The returned matcher only looks for equality based on os,\n// architecture and variant.\n//\n// One may implement their own matcher if this doesn't provide the required\n// functionality.\n//\n// Applications should opt to use `Match` over directly parsing specifiers.\nfunc NewMatcher(platform specs.Platform) Matcher {\n\treturn newDefaultMatcher(platform)\n}\n\ntype matcher struct {\n\tspecs.Platform\n}\n\nfunc (m *matcher) Match(platform specs.Platform) bool {\n\tnormalized := Normalize(platform)\n\treturn m.OS == normalized.OS &&\n\t\tm.Architecture == normalized.Architecture &&\n\t\tm.Variant == normalized.Variant\n}\n\nfunc (m *matcher) String() string {\n\treturn FormatAll(m.Platform)\n}\n\n// ParseAll parses a list of platform specifiers into a list of platform.\nfunc ParseAll(specifiers []string) ([]specs.Platform, error) {\n\tplatforms := make([]specs.Platform, len(specifiers))\n\tfor i, s := range specifiers {\n\t\tp, err := Parse(s)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid platform %s: %w\", s, err)\n\t\t}\n\t\tplatforms[i] = p\n\t}\n\treturn platforms, nil\n}\n\n// Parse parses the platform specifier syntax into a platform declaration.\n//\n// Platform specifiers are in the format `<os>[(<OSVersion>)]|<arch>|<os>[(<OSVersion>)]/<arch>[/<variant>]`.\n// The minimum required information for a platform specifier is the operating\n// system or architecture. The OSVersion can be part of the OS like `windows(10.0.17763)`\n// When an OSVersion is specified, then specs.Platform.OSVersion is populated with that value,\n// and an empty string otherwise.\n// If there is only a single string (no slashes), the\n// value will be matched against the known set of operating systems, then fall\n// back to the known set of architectures. The missing component will be\n// inferred based on the local environment.\nfunc Parse(specifier string) (specs.Platform, error) {\n\tif strings.Contains(specifier, \"*\") {\n\t\t// TODO(stevvooe): need to work out exact wildcard handling\n\t\treturn specs.Platform{}, fmt.Errorf(\"%q: wildcards not yet supported: %w\", specifier, errInvalidArgument)\n\t}\n\n\t// Limit to 4 elements to prevent unbounded split\n\tparts := strings.SplitN(specifier, \"/\", 4)\n\n\tvar p specs.Platform\n\tfor i, part := range parts {\n\t\tif i == 0 {\n\t\t\t// First element is <os>[(<OSVersion>)]\n\t\t\tosVer := osAndVersionRe.FindStringSubmatch(part)\n\t\t\tif osVer == nil {\n\t\t\t\treturn specs.Platform{}, fmt.Errorf(\"%q is an invalid OS component of %q: OSAndVersion specifier component must match %q: %w\", part, specifier, osAndVersionRe.String(), errInvalidArgument)\n\t\t\t}\n\n\t\t\tp.OS = normalizeOS(osVer[1])\n\t\t\tp.OSVersion = osVer[2]\n\t\t} else {\n\t\t\tif !specifierRe.MatchString(part) {\n\t\t\t\treturn specs.Platform{}, fmt.Errorf(\"%q is an invalid component of %q: platform specifier component must match %q: %w\", part, specifier, specifierRe.String(), errInvalidArgument)\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch len(parts) {\n\tcase 1:\n\t\t// in this case, we will test that the value might be an OS (with or\n\t\t// without the optional OSVersion specified) and look it up.\n\t\t// If it is not known, we'll treat it as an architecture. Since\n\t\t// we have very little information about the platform here, we are\n\t\t// going to be a little more strict if we don't know about the argument\n\t\t// value.\n\t\tif isKnownOS(p.OS) {\n\t\t\t// picks a default architecture\n\t\t\tp.Architecture = runtime.GOARCH\n\t\t\tif p.Architecture == \"arm\" && cpuVariant() != \"v7\" {\n\t\t\t\tp.Variant = cpuVariant()\n\t\t\t}\n\n\t\t\treturn p, nil\n\t\t}\n\n\t\tp.Architecture, p.Variant = normalizeArch(parts[0], \"\")\n\t\tif p.Architecture == \"arm\" && p.Variant == \"v7\" {\n\t\t\tp.Variant = \"\"\n\t\t}\n\t\tif isKnownArch(p.Architecture) {\n\t\t\tp.OS = runtime.GOOS\n\t\t\treturn p, nil\n\t\t}\n\n\t\treturn specs.Platform{}, fmt.Errorf(\"%q: unknown operating system or architecture: %w\", specifier, errInvalidArgument)\n\tcase 2:\n\t\t// In this case, we treat as a regular OS[(OSVersion)]/arch pair. We don't care\n\t\t// about whether or not we know of the platform.\n\t\tp.Architecture, p.Variant = normalizeArch(parts[1], \"\")\n\t\tif p.Architecture == \"arm\" && p.Variant == \"v7\" {\n\t\t\tp.Variant = \"\"\n\t\t}\n\n\t\treturn p, nil\n\tcase 3:\n\t\t// we have a fully specified variant, this is rare\n\t\tp.Architecture, p.Variant = normalizeArch(parts[1], parts[2])\n\t\tif p.Architecture == \"arm64\" && p.Variant == \"\" {\n\t\t\tp.Variant = \"v8\"\n\t\t}\n\n\t\treturn p, nil\n\t}\n\n\treturn specs.Platform{}, fmt.Errorf(\"%q: cannot parse platform specifier: %w\", specifier, errInvalidArgument)\n}\n\n// MustParse is like Parses but panics if the specifier cannot be parsed.\n// Simplifies initialization of global variables.\nfunc MustParse(specifier string) specs.Platform {\n\tp, err := Parse(specifier)\n\tif err != nil {\n\t\tpanic(\"platform: Parse(\" + strconv.Quote(specifier) + \"): \" + err.Error())\n\t}\n\treturn p\n}\n\n// Format returns a string specifier from the provided platform specification.\nfunc Format(platform specs.Platform) string {\n\tif platform.OS == \"\" {\n\t\treturn \"unknown\"\n\t}\n\n\treturn path.Join(platform.OS, platform.Architecture, platform.Variant)\n}\n\n// FormatAll returns a string specifier that also includes the OSVersion from the\n// provided platform specification.\nfunc FormatAll(platform specs.Platform) string {\n\tif platform.OS == \"\" {\n\t\treturn \"unknown\"\n\t}\n\n\tif platform.OSVersion != \"\" {\n\t\tOSAndVersion := fmt.Sprintf(osAndVersionFormat, platform.OS, platform.OSVersion)\n\t\treturn path.Join(OSAndVersion, platform.Architecture, platform.Variant)\n\t}\n\treturn path.Join(platform.OS, platform.Architecture, platform.Variant)\n}\n\n// Normalize validates and translate the platform to the canonical value.\n//\n// For example, if \"Aarch64\" is encountered, we change it to \"arm64\" or if\n// \"x86_64\" is encountered, it becomes \"amd64\".\nfunc Normalize(platform specs.Platform) specs.Platform {\n\tplatform.OS = normalizeOS(platform.OS)\n\tplatform.Architecture, platform.Variant = normalizeArch(platform.Architecture, platform.Variant)\n\n\treturn platform\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/platforms_other.go",
    "content": "//go:build !windows\n\n/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// NewMatcher returns the default Matcher for containerd\nfunc newDefaultMatcher(platform specs.Platform) Matcher {\n\treturn &matcher{\n\t\tPlatform: Normalize(platform),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/containerd/platforms/platforms_windows.go",
    "content": "/*\n   Copyright The containerd Authors.\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 platforms\n\nimport (\n\tspecs \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// NewMatcher returns a Windows matcher that will match on osVersionPrefix if\n// the platform is Windows otherwise use the default matcher\nfunc newDefaultMatcher(platform specs.Platform) Matcher {\n\tprefix := prefix(platform.OSVersion)\n\treturn windowsmatcher{\n\t\tPlatform:        platform,\n\t\tosVersionPrefix: prefix,\n\t\tdefaultMatcher: &matcher{\n\t\t\tPlatform: Normalize(platform),\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/dockercfg/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Brian Goff\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."
  },
  {
    "path": "vendor/github.com/cpuguy83/dockercfg/README.md",
    "content": "### github.com/cpuguy83/dockercfg\nGo library to load docker CLI configs, auths, etc. with minimal deps.\nSo far the only deps are on the stdlib.\n\n### Usage\nSee the [godoc](https://godoc.org/github.com/cpuguy83/dockercfg) for API details.\n\nI'm currently using this in [zapp](https://github.com/cpuguy83/zapp/blob/d25c43d4cd7ccf29fba184aafbc720a753e1a15d/main.go#L58-L83) to handle registry auth instead of always asking the user to enter it."
  },
  {
    "path": "vendor/github.com/cpuguy83/dockercfg/auth.go",
    "content": "package dockercfg\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/fs\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// This is used by the docker CLI in cases where an oauth identity token is used.\n// In that case the username is stored literally as `<token>`\n// When fetching the credentials we check for this value to determine if.\nconst tokenUsername = \"<token>\"\n\n// GetRegistryCredentials gets registry credentials for the passed in registry host.\n//\n// This will use [LoadDefaultConfig] to read registry auth details from the config.\n// If the config doesn't exist, it will attempt to load registry credentials using the default credential helper for the platform.\nfunc GetRegistryCredentials(hostname string) (string, string, error) {\n\tcfg, err := LoadDefaultConfig()\n\tif err != nil {\n\t\tif !errors.Is(err, fs.ErrNotExist) {\n\t\t\treturn \"\", \"\", fmt.Errorf(\"load default config: %w\", err)\n\t\t}\n\n\t\treturn GetCredentialsFromHelper(\"\", hostname)\n\t}\n\n\treturn cfg.GetRegistryCredentials(hostname)\n}\n\n// ResolveRegistryHost can be used to transform a docker registry host name into what is used for the docker config/cred helpers\n//\n// This is useful for using with containerd authorizers.\n// Naturally this only transforms docker hub URLs.\nfunc ResolveRegistryHost(host string) string {\n\tswitch host {\n\tcase \"index.docker.io\", \"docker.io\", \"https://index.docker.io/v1/\", \"registry-1.docker.io\":\n\t\treturn \"https://index.docker.io/v1/\"\n\t}\n\treturn host\n}\n\n// GetRegistryCredentials gets credentials, if any, for the provided hostname.\n//\n// Hostnames should already be resolved using [ResolveRegistryHost].\n//\n// If the returned username string is empty, the password is an identity token.\nfunc (c *Config) GetRegistryCredentials(hostname string) (string, string, error) {\n\th, ok := c.CredentialHelpers[hostname]\n\tif ok {\n\t\treturn GetCredentialsFromHelper(h, hostname)\n\t}\n\n\tif c.CredentialsStore != \"\" {\n\t\tusername, password, err := GetCredentialsFromHelper(c.CredentialsStore, hostname)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", fmt.Errorf(\"get credentials from store: %w\", err)\n\t\t}\n\n\t\tif username != \"\" || password != \"\" {\n\t\t\treturn username, password, nil\n\t\t}\n\t}\n\n\tauth, ok := c.AuthConfigs[hostname]\n\tif !ok {\n\t\treturn GetCredentialsFromHelper(\"\", hostname)\n\t}\n\n\tif auth.IdentityToken != \"\" {\n\t\treturn \"\", auth.IdentityToken, nil\n\t}\n\n\tif auth.Username != \"\" && auth.Password != \"\" {\n\t\treturn auth.Username, auth.Password, nil\n\t}\n\n\treturn DecodeBase64Auth(auth)\n}\n\n// DecodeBase64Auth decodes the legacy file-based auth storage from the docker CLI.\n// It takes the \"Auth\" filed from AuthConfig and decodes that into a username and password.\n//\n// If \"Auth\" is empty, an empty user/pass will be returned, but not an error.\nfunc DecodeBase64Auth(auth AuthConfig) (string, string, error) {\n\tif auth.Auth == \"\" {\n\t\treturn \"\", \"\", nil\n\t}\n\n\tdecLen := base64.StdEncoding.DecodedLen(len(auth.Auth))\n\tdecoded := make([]byte, decLen)\n\tn, err := base64.StdEncoding.Decode(decoded, []byte(auth.Auth))\n\tif err != nil {\n\t\treturn \"\", \"\", fmt.Errorf(\"decode auth: %w\", err)\n\t}\n\n\tdecoded = decoded[:n]\n\n\tconst sep = \":\"\n\tuser, pass, found := strings.Cut(string(decoded), sep)\n\tif !found {\n\t\treturn \"\", \"\", fmt.Errorf(\"invalid auth: missing %q separator\", sep)\n\t}\n\n\treturn user, pass, nil\n}\n\n// Errors from credential helpers.\nvar (\n\tErrCredentialsNotFound         = errors.New(\"credentials not found in native keychain\")\n\tErrCredentialsMissingServerURL = errors.New(\"no credentials server URL\")\n)\n\n//nolint:gochecknoglobals // These are used to mock exec in tests.\nvar (\n\t// execLookPath is a variable that can be used to mock exec.LookPath in tests.\n\texecLookPath = exec.LookPath\n\t// execCommand is a variable that can be used to mock exec.Command in tests.\n\texecCommand = exec.Command\n)\n\n// GetCredentialsFromHelper attempts to lookup credentials from the passed in docker credential helper.\n//\n// The credential helper should just be the suffix name (no \"docker-credential-\").\n// If the passed in helper program is empty this will look up the default helper for the platform.\n//\n// If the credentials are not found, no error is returned, only empty credentials.\n//\n// Hostnames should already be resolved using [ResolveRegistryHost]\n//\n// If the username string is empty, the password string is an identity token.\nfunc GetCredentialsFromHelper(helper, hostname string) (string, string, error) {\n\tif helper == \"\" {\n\t\thelper, helperErr := getCredentialHelper()\n\t\tif helperErr != nil {\n\t\t\treturn \"\", \"\", fmt.Errorf(\"get credential helper: %w\", helperErr)\n\t\t}\n\n\t\tif helper == \"\" {\n\t\t\treturn \"\", \"\", nil\n\t\t}\n\t}\n\n\thelper = \"docker-credential-\" + helper\n\tp, err := execLookPath(helper)\n\tif err != nil {\n\t\tif !errors.Is(err, exec.ErrNotFound) {\n\t\t\treturn \"\", \"\", fmt.Errorf(\"look up %q: %w\", helper, err)\n\t\t}\n\n\t\treturn \"\", \"\", nil\n\t}\n\n\tvar outBuf, errBuf bytes.Buffer\n\tcmd := execCommand(p, \"get\")\n\tcmd.Stdin = strings.NewReader(hostname)\n\tcmd.Stdout = &outBuf\n\tcmd.Stderr = &errBuf\n\n\tif err = cmd.Run(); err != nil {\n\t\tout := strings.TrimSpace(outBuf.String())\n\t\tswitch out {\n\t\tcase ErrCredentialsNotFound.Error():\n\t\t\treturn \"\", \"\", nil\n\t\tcase ErrCredentialsMissingServerURL.Error():\n\t\t\treturn \"\", \"\", ErrCredentialsMissingServerURL\n\t\tdefault:\n\t\t\treturn \"\", \"\", fmt.Errorf(\"execute %q stdout: %q stderr: %q: %w\",\n\t\t\t\thelper, out, strings.TrimSpace(errBuf.String()), err,\n\t\t\t)\n\t\t}\n\t}\n\n\tvar creds struct {\n\t\tUsername string `json:\"Username\"`\n\t\tSecret   string `json:\"Secret\"`\n\t}\n\n\tif err = json.Unmarshal(outBuf.Bytes(), &creds); err != nil {\n\t\treturn \"\", \"\", fmt.Errorf(\"unmarshal credentials from: %q: %w\", helper, err)\n\t}\n\n\t// When tokenUsername is used, the output is an identity token and the username is garbage.\n\tif creds.Username == tokenUsername {\n\t\tcreds.Username = \"\"\n\t}\n\n\treturn creds.Username, creds.Secret, nil\n}\n\n// getCredentialHelper gets the default credential helper name for the current platform.\nfunc getCredentialHelper() (string, error) {\n\tswitch runtime.GOOS {\n\tcase \"linux\":\n\t\tif _, err := exec.LookPath(\"pass\"); err != nil {\n\t\t\tif errors.Is(err, exec.ErrNotFound) {\n\t\t\t\treturn \"secretservice\", nil\n\t\t\t}\n\t\t\treturn \"\", fmt.Errorf(`look up \"pass\": %w`, err)\n\t\t}\n\t\treturn \"pass\", nil\n\tcase \"darwin\":\n\t\treturn \"osxkeychain\", nil\n\tcase \"windows\":\n\t\treturn \"wincred\", nil\n\tdefault:\n\t\treturn \"\", nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/dockercfg/config.go",
    "content": "package dockercfg\n\n// Config represents the on disk format of the docker CLI's config file.\ntype Config struct {\n\tAuthConfigs          map[string]AuthConfig  `json:\"auths\"`\n\tHTTPHeaders          map[string]string      `json:\"HttpHeaders,omitempty\"`\n\tPsFormat             string                 `json:\"psFormat,omitempty\"`\n\tImagesFormat         string                 `json:\"imagesFormat,omitempty\"`\n\tNetworksFormat       string                 `json:\"networksFormat,omitempty\"`\n\tPluginsFormat        string                 `json:\"pluginsFormat,omitempty\"`\n\tVolumesFormat        string                 `json:\"volumesFormat,omitempty\"`\n\tStatsFormat          string                 `json:\"statsFormat,omitempty\"`\n\tDetachKeys           string                 `json:\"detachKeys,omitempty\"`\n\tCredentialsStore     string                 `json:\"credsStore,omitempty\"`\n\tCredentialHelpers    map[string]string      `json:\"credHelpers,omitempty\"`\n\tFilename             string                 `json:\"-\"` // Note: for internal use only.\n\tServiceInspectFormat string                 `json:\"serviceInspectFormat,omitempty\"`\n\tServicesFormat       string                 `json:\"servicesFormat,omitempty\"`\n\tTasksFormat          string                 `json:\"tasksFormat,omitempty\"`\n\tSecretFormat         string                 `json:\"secretFormat,omitempty\"`\n\tConfigFormat         string                 `json:\"configFormat,omitempty\"`\n\tNodesFormat          string                 `json:\"nodesFormat,omitempty\"`\n\tPruneFilters         []string               `json:\"pruneFilters,omitempty\"`\n\tProxies              map[string]ProxyConfig `json:\"proxies,omitempty\"`\n\tExperimental         string                 `json:\"experimental,omitempty\"`\n\tStackOrchestrator    string                 `json:\"stackOrchestrator,omitempty\"`\n\tKubernetes           *KubernetesConfig      `json:\"kubernetes,omitempty\"`\n\tCurrentContext       string                 `json:\"currentContext,omitempty\"`\n\tCLIPluginsExtraDirs  []string               `json:\"cliPluginsExtraDirs,omitempty\"`\n\tAliases              map[string]string      `json:\"aliases,omitempty\"`\n}\n\n// ProxyConfig contains proxy configuration settings.\ntype ProxyConfig struct {\n\tHTTPProxy  string `json:\"httpProxy,omitempty\"`\n\tHTTPSProxy string `json:\"httpsProxy,omitempty\"`\n\tNoProxy    string `json:\"noProxy,omitempty\"`\n\tFTPProxy   string `json:\"ftpProxy,omitempty\"`\n}\n\n// AuthConfig contains authorization information for connecting to a Registry.\ntype AuthConfig struct {\n\tUsername string `json:\"username,omitempty\"`\n\tPassword string `json:\"password,omitempty\"`\n\tAuth     string `json:\"auth,omitempty\"`\n\n\t// Email is an optional value associated with the username.\n\t// This field is deprecated and will be removed in a later\n\t// version of docker.\n\tEmail string `json:\"email,omitempty\"`\n\n\tServerAddress string `json:\"serveraddress,omitempty\"`\n\n\t// IdentityToken is used to authenticate the user and get\n\t// an access token for the registry.\n\tIdentityToken string `json:\"identitytoken,omitempty\"`\n\n\t// RegistryToken is a bearer token to be sent to a registry.\n\tRegistryToken string `json:\"registrytoken,omitempty\"`\n}\n\n// KubernetesConfig contains Kubernetes orchestrator settings.\ntype KubernetesConfig struct {\n\tAllNamespaces string `json:\"allNamespaces,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/dockercfg/load.go",
    "content": "package dockercfg\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// UserHomeConfigPath returns the path to the docker config in the current user's home dir.\nfunc UserHomeConfigPath() (string, error) {\n\thome, err := os.UserHomeDir()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"user home dir: %w\", err)\n\t}\n\n\treturn filepath.Join(home, \".docker\", \"config.json\"), nil\n}\n\n// ConfigPath returns the path to the docker cli config.\n//\n// It will either use the DOCKER_CONFIG env var if set, or the value from [UserHomeConfigPath]\n// DOCKER_CONFIG would be the dir path where `config.json` is stored, this returns the path to config.json.\nfunc ConfigPath() (string, error) {\n\tif p := os.Getenv(\"DOCKER_CONFIG\"); p != \"\" {\n\t\treturn filepath.Join(p, \"config.json\"), nil\n\t}\n\treturn UserHomeConfigPath()\n}\n\n// LoadDefaultConfig loads the docker cli config from the path returned from [ConfigPath].\nfunc LoadDefaultConfig() (Config, error) {\n\tvar cfg Config\n\tp, err := ConfigPath()\n\tif err != nil {\n\t\treturn cfg, fmt.Errorf(\"config path: %w\", err)\n\t}\n\n\treturn cfg, FromFile(p, &cfg)\n}\n\n// FromFile loads config from the specified path into cfg.\nfunc FromFile(configPath string, cfg *Config) error {\n\tf, err := os.Open(configPath)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"open config: %w\", err)\n\t}\n\tdefer f.Close()\n\n\tif err = json.NewDecoder(f).Decode(&cfg); err != nil {\n\t\treturn fmt.Errorf(\"decode config: %w\", err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2012-2016 Dave Collins <dave@davec.name>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/bypass.go",
    "content": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n// NOTE: Due to the following build constraints, this file will only be compiled\n// when the code is not running on Google App Engine, compiled by GopherJS, and\n// \"-tags safe\" is not added to the go build command line.  The \"disableunsafe\"\n// tag is deprecated and thus should not be used.\n// Go versions prior to 1.4 are disabled because they use a different layout\n// for interfaces which make the implementation of unsafeReflectValue more complex.\n// +build !js,!appengine,!safe,!disableunsafe,go1.4\n\npackage spew\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nconst (\n\t// UnsafeDisabled is a build-time constant which specifies whether or\n\t// not access to the unsafe package is available.\n\tUnsafeDisabled = false\n\n\t// ptrSize is the size of a pointer on the current arch.\n\tptrSize = unsafe.Sizeof((*byte)(nil))\n)\n\ntype flag uintptr\n\nvar (\n\t// flagRO indicates whether the value field of a reflect.Value\n\t// is read-only.\n\tflagRO flag\n\n\t// flagAddr indicates whether the address of the reflect.Value's\n\t// value may be taken.\n\tflagAddr flag\n)\n\n// flagKindMask holds the bits that make up the kind\n// part of the flags field. In all the supported versions,\n// it is in the lower 5 bits.\nconst flagKindMask = flag(0x1f)\n\n// Different versions of Go have used different\n// bit layouts for the flags type. This table\n// records the known combinations.\nvar okFlags = []struct {\n\tro, addr flag\n}{{\n\t// From Go 1.4 to 1.5\n\tro:   1 << 5,\n\taddr: 1 << 7,\n}, {\n\t// Up to Go tip.\n\tro:   1<<5 | 1<<6,\n\taddr: 1 << 8,\n}}\n\nvar flagValOffset = func() uintptr {\n\tfield, ok := reflect.TypeOf(reflect.Value{}).FieldByName(\"flag\")\n\tif !ok {\n\t\tpanic(\"reflect.Value has no flag field\")\n\t}\n\treturn field.Offset\n}()\n\n// flagField returns a pointer to the flag field of a reflect.Value.\nfunc flagField(v *reflect.Value) *flag {\n\treturn (*flag)(unsafe.Pointer(uintptr(unsafe.Pointer(v)) + flagValOffset))\n}\n\n// unsafeReflectValue converts the passed reflect.Value into a one that bypasses\n// the typical safety restrictions preventing access to unaddressable and\n// unexported data.  It works by digging the raw pointer to the underlying\n// value out of the protected value and generating a new unprotected (unsafe)\n// reflect.Value to it.\n//\n// This allows us to check for implementations of the Stringer and error\n// interfaces to be used for pretty printing ordinarily unaddressable and\n// inaccessible values such as unexported struct fields.\nfunc unsafeReflectValue(v reflect.Value) reflect.Value {\n\tif !v.IsValid() || (v.CanInterface() && v.CanAddr()) {\n\t\treturn v\n\t}\n\tflagFieldPtr := flagField(&v)\n\t*flagFieldPtr &^= flagRO\n\t*flagFieldPtr |= flagAddr\n\treturn v\n}\n\n// Sanity checks against future reflect package changes\n// to the type or semantics of the Value.flag field.\nfunc init() {\n\tfield, ok := reflect.TypeOf(reflect.Value{}).FieldByName(\"flag\")\n\tif !ok {\n\t\tpanic(\"reflect.Value has no flag field\")\n\t}\n\tif field.Type.Kind() != reflect.TypeOf(flag(0)).Kind() {\n\t\tpanic(\"reflect.Value flag field has changed kind\")\n\t}\n\ttype t0 int\n\tvar t struct {\n\t\tA t0\n\t\t// t0 will have flagEmbedRO set.\n\t\tt0\n\t\t// a will have flagStickyRO set\n\t\ta t0\n\t}\n\tvA := reflect.ValueOf(t).FieldByName(\"A\")\n\tva := reflect.ValueOf(t).FieldByName(\"a\")\n\tvt0 := reflect.ValueOf(t).FieldByName(\"t0\")\n\n\t// Infer flagRO from the difference between the flags\n\t// for the (otherwise identical) fields in t.\n\tflagPublic := *flagField(&vA)\n\tflagWithRO := *flagField(&va) | *flagField(&vt0)\n\tflagRO = flagPublic ^ flagWithRO\n\n\t// Infer flagAddr from the difference between a value\n\t// taken from a pointer and not.\n\tvPtrA := reflect.ValueOf(&t).Elem().FieldByName(\"A\")\n\tflagNoPtr := *flagField(&vA)\n\tflagPtr := *flagField(&vPtrA)\n\tflagAddr = flagNoPtr ^ flagPtr\n\n\t// Check that the inferred flags tally with one of the known versions.\n\tfor _, f := range okFlags {\n\t\tif flagRO == f.ro && flagAddr == f.addr {\n\t\t\treturn\n\t\t}\n\t}\n\tpanic(\"reflect.Value read-only flag has changed semantics\")\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/bypasssafe.go",
    "content": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n// NOTE: Due to the following build constraints, this file will only be compiled\n// when the code is running on Google App Engine, compiled by GopherJS, or\n// \"-tags safe\" is added to the go build command line.  The \"disableunsafe\"\n// tag is deprecated and thus should not be used.\n// +build js appengine safe disableunsafe !go1.4\n\npackage spew\n\nimport \"reflect\"\n\nconst (\n\t// UnsafeDisabled is a build-time constant which specifies whether or\n\t// not access to the unsafe package is available.\n\tUnsafeDisabled = true\n)\n\n// unsafeReflectValue typically converts the passed reflect.Value into a one\n// that bypasses the typical safety restrictions preventing access to\n// unaddressable and unexported data.  However, doing this relies on access to\n// the unsafe package.  This is a stub version which simply returns the passed\n// reflect.Value when the unsafe package is not available.\nfunc unsafeReflectValue(v reflect.Value) reflect.Value {\n\treturn v\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/common.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n)\n\n// Some constants in the form of bytes to avoid string overhead.  This mirrors\n// the technique used in the fmt package.\nvar (\n\tpanicBytes            = []byte(\"(PANIC=\")\n\tplusBytes             = []byte(\"+\")\n\tiBytes                = []byte(\"i\")\n\ttrueBytes             = []byte(\"true\")\n\tfalseBytes            = []byte(\"false\")\n\tinterfaceBytes        = []byte(\"(interface {})\")\n\tcommaNewlineBytes     = []byte(\",\\n\")\n\tnewlineBytes          = []byte(\"\\n\")\n\topenBraceBytes        = []byte(\"{\")\n\topenBraceNewlineBytes = []byte(\"{\\n\")\n\tcloseBraceBytes       = []byte(\"}\")\n\tasteriskBytes         = []byte(\"*\")\n\tcolonBytes            = []byte(\":\")\n\tcolonSpaceBytes       = []byte(\": \")\n\topenParenBytes        = []byte(\"(\")\n\tcloseParenBytes       = []byte(\")\")\n\tspaceBytes            = []byte(\" \")\n\tpointerChainBytes     = []byte(\"->\")\n\tnilAngleBytes         = []byte(\"<nil>\")\n\tmaxNewlineBytes       = []byte(\"<max depth reached>\\n\")\n\tmaxShortBytes         = []byte(\"<max>\")\n\tcircularBytes         = []byte(\"<already shown>\")\n\tcircularShortBytes    = []byte(\"<shown>\")\n\tinvalidAngleBytes     = []byte(\"<invalid>\")\n\topenBracketBytes      = []byte(\"[\")\n\tcloseBracketBytes     = []byte(\"]\")\n\tpercentBytes          = []byte(\"%\")\n\tprecisionBytes        = []byte(\".\")\n\topenAngleBytes        = []byte(\"<\")\n\tcloseAngleBytes       = []byte(\">\")\n\topenMapBytes          = []byte(\"map[\")\n\tcloseMapBytes         = []byte(\"]\")\n\tlenEqualsBytes        = []byte(\"len=\")\n\tcapEqualsBytes        = []byte(\"cap=\")\n)\n\n// hexDigits is used to map a decimal value to a hex digit.\nvar hexDigits = \"0123456789abcdef\"\n\n// catchPanic handles any panics that might occur during the handleMethods\n// calls.\nfunc catchPanic(w io.Writer, v reflect.Value) {\n\tif err := recover(); err != nil {\n\t\tw.Write(panicBytes)\n\t\tfmt.Fprintf(w, \"%v\", err)\n\t\tw.Write(closeParenBytes)\n\t}\n}\n\n// handleMethods attempts to call the Error and String methods on the underlying\n// type the passed reflect.Value represents and outputes the result to Writer w.\n//\n// It handles panics in any called methods by catching and displaying the error\n// as the formatted value.\nfunc handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) {\n\t// We need an interface to check if the type implements the error or\n\t// Stringer interface.  However, the reflect package won't give us an\n\t// interface on certain things like unexported struct fields in order\n\t// to enforce visibility rules.  We use unsafe, when it's available,\n\t// to bypass these restrictions since this package does not mutate the\n\t// values.\n\tif !v.CanInterface() {\n\t\tif UnsafeDisabled {\n\t\t\treturn false\n\t\t}\n\n\t\tv = unsafeReflectValue(v)\n\t}\n\n\t// Choose whether or not to do error and Stringer interface lookups against\n\t// the base type or a pointer to the base type depending on settings.\n\t// Technically calling one of these methods with a pointer receiver can\n\t// mutate the value, however, types which choose to satisify an error or\n\t// Stringer interface with a pointer receiver should not be mutating their\n\t// state inside these interface methods.\n\tif !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() {\n\t\tv = unsafeReflectValue(v)\n\t}\n\tif v.CanAddr() {\n\t\tv = v.Addr()\n\t}\n\n\t// Is it an error or Stringer?\n\tswitch iface := v.Interface().(type) {\n\tcase error:\n\t\tdefer catchPanic(w, v)\n\t\tif cs.ContinueOnMethod {\n\t\t\tw.Write(openParenBytes)\n\t\t\tw.Write([]byte(iface.Error()))\n\t\t\tw.Write(closeParenBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\treturn false\n\t\t}\n\n\t\tw.Write([]byte(iface.Error()))\n\t\treturn true\n\n\tcase fmt.Stringer:\n\t\tdefer catchPanic(w, v)\n\t\tif cs.ContinueOnMethod {\n\t\t\tw.Write(openParenBytes)\n\t\t\tw.Write([]byte(iface.String()))\n\t\t\tw.Write(closeParenBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\treturn false\n\t\t}\n\t\tw.Write([]byte(iface.String()))\n\t\treturn true\n\t}\n\treturn false\n}\n\n// printBool outputs a boolean value as true or false to Writer w.\nfunc printBool(w io.Writer, val bool) {\n\tif val {\n\t\tw.Write(trueBytes)\n\t} else {\n\t\tw.Write(falseBytes)\n\t}\n}\n\n// printInt outputs a signed integer value to Writer w.\nfunc printInt(w io.Writer, val int64, base int) {\n\tw.Write([]byte(strconv.FormatInt(val, base)))\n}\n\n// printUint outputs an unsigned integer value to Writer w.\nfunc printUint(w io.Writer, val uint64, base int) {\n\tw.Write([]byte(strconv.FormatUint(val, base)))\n}\n\n// printFloat outputs a floating point value using the specified precision,\n// which is expected to be 32 or 64bit, to Writer w.\nfunc printFloat(w io.Writer, val float64, precision int) {\n\tw.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision)))\n}\n\n// printComplex outputs a complex value using the specified float precision\n// for the real and imaginary parts to Writer w.\nfunc printComplex(w io.Writer, c complex128, floatPrecision int) {\n\tr := real(c)\n\tw.Write(openParenBytes)\n\tw.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision)))\n\ti := imag(c)\n\tif i >= 0 {\n\t\tw.Write(plusBytes)\n\t}\n\tw.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision)))\n\tw.Write(iBytes)\n\tw.Write(closeParenBytes)\n}\n\n// printHexPtr outputs a uintptr formatted as hexadecimal with a leading '0x'\n// prefix to Writer w.\nfunc printHexPtr(w io.Writer, p uintptr) {\n\t// Null pointer.\n\tnum := uint64(p)\n\tif num == 0 {\n\t\tw.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\t// Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix\n\tbuf := make([]byte, 18)\n\n\t// It's simpler to construct the hex string right to left.\n\tbase := uint64(16)\n\ti := len(buf) - 1\n\tfor num >= base {\n\t\tbuf[i] = hexDigits[num%base]\n\t\tnum /= base\n\t\ti--\n\t}\n\tbuf[i] = hexDigits[num]\n\n\t// Add '0x' prefix.\n\ti--\n\tbuf[i] = 'x'\n\ti--\n\tbuf[i] = '0'\n\n\t// Strip unused leading bytes.\n\tbuf = buf[i:]\n\tw.Write(buf)\n}\n\n// valuesSorter implements sort.Interface to allow a slice of reflect.Value\n// elements to be sorted.\ntype valuesSorter struct {\n\tvalues  []reflect.Value\n\tstrings []string // either nil or same len and values\n\tcs      *ConfigState\n}\n\n// newValuesSorter initializes a valuesSorter instance, which holds a set of\n// surrogate keys on which the data should be sorted.  It uses flags in\n// ConfigState to decide if and how to populate those surrogate keys.\nfunc newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface {\n\tvs := &valuesSorter{values: values, cs: cs}\n\tif canSortSimply(vs.values[0].Kind()) {\n\t\treturn vs\n\t}\n\tif !cs.DisableMethods {\n\t\tvs.strings = make([]string, len(values))\n\t\tfor i := range vs.values {\n\t\t\tb := bytes.Buffer{}\n\t\t\tif !handleMethods(cs, &b, vs.values[i]) {\n\t\t\t\tvs.strings = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvs.strings[i] = b.String()\n\t\t}\n\t}\n\tif vs.strings == nil && cs.SpewKeys {\n\t\tvs.strings = make([]string, len(values))\n\t\tfor i := range vs.values {\n\t\t\tvs.strings[i] = Sprintf(\"%#v\", vs.values[i].Interface())\n\t\t}\n\t}\n\treturn vs\n}\n\n// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted\n// directly, or whether it should be considered for sorting by surrogate keys\n// (if the ConfigState allows it).\nfunc canSortSimply(kind reflect.Kind) bool {\n\t// This switch parallels valueSortLess, except for the default case.\n\tswitch kind {\n\tcase reflect.Bool:\n\t\treturn true\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\treturn true\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\treturn true\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn true\n\tcase reflect.String:\n\t\treturn true\n\tcase reflect.Uintptr:\n\t\treturn true\n\tcase reflect.Array:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Len returns the number of values in the slice.  It is part of the\n// sort.Interface implementation.\nfunc (s *valuesSorter) Len() int {\n\treturn len(s.values)\n}\n\n// Swap swaps the values at the passed indices.  It is part of the\n// sort.Interface implementation.\nfunc (s *valuesSorter) Swap(i, j int) {\n\ts.values[i], s.values[j] = s.values[j], s.values[i]\n\tif s.strings != nil {\n\t\ts.strings[i], s.strings[j] = s.strings[j], s.strings[i]\n\t}\n}\n\n// valueSortLess returns whether the first value should sort before the second\n// value.  It is used by valueSorter.Less as part of the sort.Interface\n// implementation.\nfunc valueSortLess(a, b reflect.Value) bool {\n\tswitch a.Kind() {\n\tcase reflect.Bool:\n\t\treturn !a.Bool() && b.Bool()\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\treturn a.Int() < b.Int()\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn a.Float() < b.Float()\n\tcase reflect.String:\n\t\treturn a.String() < b.String()\n\tcase reflect.Uintptr:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Array:\n\t\t// Compare the contents of both arrays.\n\t\tl := a.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\tav := a.Index(i)\n\t\t\tbv := b.Index(i)\n\t\t\tif av.Interface() == bv.Interface() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn valueSortLess(av, bv)\n\t\t}\n\t}\n\treturn a.String() < b.String()\n}\n\n// Less returns whether the value at index i should sort before the\n// value at index j.  It is part of the sort.Interface implementation.\nfunc (s *valuesSorter) Less(i, j int) bool {\n\tif s.strings == nil {\n\t\treturn valueSortLess(s.values[i], s.values[j])\n\t}\n\treturn s.strings[i] < s.strings[j]\n}\n\n// sortValues is a sort function that handles both native types and any type that\n// can be converted to error or Stringer.  Other inputs are sorted according to\n// their Value.String() value to ensure display stability.\nfunc sortValues(values []reflect.Value, cs *ConfigState) {\n\tif len(values) == 0 {\n\t\treturn\n\t}\n\tsort.Sort(newValuesSorter(values, cs))\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/config.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\n// ConfigState houses the configuration options used by spew to format and\n// display values.  There is a global instance, Config, that is used to control\n// all top-level Formatter and Dump functionality.  Each ConfigState instance\n// provides methods equivalent to the top-level functions.\n//\n// The zero value for ConfigState provides no indentation.  You would typically\n// want to set it to a space or a tab.\n//\n// Alternatively, you can use NewDefaultConfig to get a ConfigState instance\n// with default settings.  See the documentation of NewDefaultConfig for default\n// values.\ntype ConfigState struct {\n\t// Indent specifies the string to use for each indentation level.  The\n\t// global config instance that all top-level functions use set this to a\n\t// single space by default.  If you would like more indentation, you might\n\t// set this to a tab with \"\\t\" or perhaps two spaces with \"  \".\n\tIndent string\n\n\t// MaxDepth controls the maximum number of levels to descend into nested\n\t// data structures.  The default, 0, means there is no limit.\n\t//\n\t// NOTE: Circular data structures are properly detected, so it is not\n\t// necessary to set this value unless you specifically want to limit deeply\n\t// nested data structures.\n\tMaxDepth int\n\n\t// DisableMethods specifies whether or not error and Stringer interfaces are\n\t// invoked for types that implement them.\n\tDisableMethods bool\n\n\t// DisablePointerMethods specifies whether or not to check for and invoke\n\t// error and Stringer interfaces on types which only accept a pointer\n\t// receiver when the current type is not a pointer.\n\t//\n\t// NOTE: This might be an unsafe action since calling one of these methods\n\t// with a pointer receiver could technically mutate the value, however,\n\t// in practice, types which choose to satisify an error or Stringer\n\t// interface with a pointer receiver should not be mutating their state\n\t// inside these interface methods.  As a result, this option relies on\n\t// access to the unsafe package, so it will not have any effect when\n\t// running in environments without access to the unsafe package such as\n\t// Google App Engine or with the \"safe\" build tag specified.\n\tDisablePointerMethods bool\n\n\t// DisablePointerAddresses specifies whether to disable the printing of\n\t// pointer addresses. This is useful when diffing data structures in tests.\n\tDisablePointerAddresses bool\n\n\t// DisableCapacities specifies whether to disable the printing of capacities\n\t// for arrays, slices, maps and channels. This is useful when diffing\n\t// data structures in tests.\n\tDisableCapacities bool\n\n\t// ContinueOnMethod specifies whether or not recursion should continue once\n\t// a custom error or Stringer interface is invoked.  The default, false,\n\t// means it will print the results of invoking the custom error or Stringer\n\t// interface and return immediately instead of continuing to recurse into\n\t// the internals of the data type.\n\t//\n\t// NOTE: This flag does not have any effect if method invocation is disabled\n\t// via the DisableMethods or DisablePointerMethods options.\n\tContinueOnMethod bool\n\n\t// SortKeys specifies map keys should be sorted before being printed. Use\n\t// this to have a more deterministic, diffable output.  Note that only\n\t// native types (bool, int, uint, floats, uintptr and string) and types\n\t// that support the error or Stringer interfaces (if methods are\n\t// enabled) are supported, with other types sorted according to the\n\t// reflect.Value.String() output which guarantees display stability.\n\tSortKeys bool\n\n\t// SpewKeys specifies that, as a last resort attempt, map keys should\n\t// be spewed to strings and sorted by those strings.  This is only\n\t// considered if SortKeys is true.\n\tSpewKeys bool\n}\n\n// Config is the active configuration of the top-level functions.\n// The configuration can be changed by modifying the contents of spew.Config.\nvar Config = ConfigState{Indent: \" \"}\n\n// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the formatted string as a value that satisfies error.  See NewFormatter\n// for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Errorf(format string, a ...interface{}) (err error) {\n\treturn fmt.Errorf(format, c.convertArgs(a)...)\n}\n\n// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprint(w, c.convertArgs(a)...)\n}\n\n// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintf(w, format, c.convertArgs(a)...)\n}\n\n// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it\n// passed with a Formatter interface returned by c.NewFormatter.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintln(w, c.convertArgs(a)...)\n}\n\n// Print is a wrapper for fmt.Print that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Print(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Print(a ...interface{}) (n int, err error) {\n\treturn fmt.Print(c.convertArgs(a)...)\n}\n\n// Printf is a wrapper for fmt.Printf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Printf(format, c.convertArgs(a)...)\n}\n\n// Println is a wrapper for fmt.Println that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Println(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Println(a ...interface{}) (n int, err error) {\n\treturn fmt.Println(c.convertArgs(a)...)\n}\n\n// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprint(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprint(a ...interface{}) string {\n\treturn fmt.Sprint(c.convertArgs(a)...)\n}\n\n// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprintf(format string, a ...interface{}) string {\n\treturn fmt.Sprintf(format, c.convertArgs(a)...)\n}\n\n// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it\n// were passed with a Formatter interface returned by c.NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprintln(a ...interface{}) string {\n\treturn fmt.Sprintln(c.convertArgs(a)...)\n}\n\n/*\nNewFormatter returns a custom formatter that satisfies the fmt.Formatter\ninterface.  As a result, it integrates cleanly with standard fmt package\nprinting functions.  The formatter is useful for inline printing of smaller data\ntypes similar to the standard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nTypically this function shouldn't be called directly.  It is much easier to make\nuse of the custom formatter by calling one of the convenience functions such as\nc.Printf, c.Println, or c.Printf.\n*/\nfunc (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter {\n\treturn newFormatter(c, v)\n}\n\n// Fdump formats and displays the passed arguments to io.Writer w.  It formats\n// exactly the same as Dump.\nfunc (c *ConfigState) Fdump(w io.Writer, a ...interface{}) {\n\tfdump(c, w, a...)\n}\n\n/*\nDump displays the passed parameters to standard out with newlines, customizable\nindentation, and additional debug information such as complete types and all\npointer addresses used to indirect to the final value.  It provides the\nfollowing features over the built-in printing facilities provided by the fmt\npackage:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output\n\nThe configuration options are controlled by modifying the public members\nof c.  See ConfigState for options documentation.\n\nSee Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to\nget the formatted result as a string.\n*/\nfunc (c *ConfigState) Dump(a ...interface{}) {\n\tfdump(c, os.Stdout, a...)\n}\n\n// Sdump returns a string with the passed arguments formatted exactly the same\n// as Dump.\nfunc (c *ConfigState) Sdump(a ...interface{}) string {\n\tvar buf bytes.Buffer\n\tfdump(c, &buf, a...)\n\treturn buf.String()\n}\n\n// convertArgs accepts a slice of arguments and returns a slice of the same\n// length with each argument converted to a spew Formatter interface using\n// the ConfigState associated with s.\nfunc (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) {\n\tformatters = make([]interface{}, len(args))\n\tfor index, arg := range args {\n\t\tformatters[index] = newFormatter(c, arg)\n\t}\n\treturn formatters\n}\n\n// NewDefaultConfig returns a ConfigState with the following default settings.\n//\n// \tIndent: \" \"\n// \tMaxDepth: 0\n// \tDisableMethods: false\n// \tDisablePointerMethods: false\n// \tContinueOnMethod: false\n// \tSortKeys: false\nfunc NewDefaultConfig() *ConfigState {\n\treturn &ConfigState{Indent: \" \"}\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/doc.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n/*\nPackage spew implements a deep pretty printer for Go data structures to aid in\ndebugging.\n\nA quick overview of the additional features spew provides over the built-in\nprinting facilities for Go data types are as follows:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output (only when using\n\t  Dump style)\n\nThere are two different approaches spew allows for dumping Go data structures:\n\n\t* Dump style which prints with newlines, customizable indentation,\n\t  and additional debug information such as types and all pointer addresses\n\t  used to indirect to the final value\n\t* A custom Formatter interface that integrates cleanly with the standard fmt\n\t  package and replaces %v, %+v, %#v, and %#+v to provide inline printing\n\t  similar to the default %v while providing the additional functionality\n\t  outlined above and passing unsupported format verbs such as %x and %q\n\t  along to fmt\n\nQuick Start\n\nThis section demonstrates how to quickly get started with spew.  See the\nsections below for further details on formatting and configuration options.\n\nTo dump a variable with full newlines, indentation, type, and pointer\ninformation use Dump, Fdump, or Sdump:\n\tspew.Dump(myVar1, myVar2, ...)\n\tspew.Fdump(someWriter, myVar1, myVar2, ...)\n\tstr := spew.Sdump(myVar1, myVar2, ...)\n\nAlternatively, if you would prefer to use format strings with a compacted inline\nprinting style, use the convenience wrappers Printf, Fprintf, etc with\n%v (most compact), %+v (adds pointer addresses), %#v (adds types), or\n%#+v (adds types and pointer addresses):\n\tspew.Printf(\"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Printf(\"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\tspew.Fprintf(someWriter, \"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Fprintf(someWriter, \"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\nConfiguration Options\n\nConfiguration of spew is handled by fields in the ConfigState type.  For\nconvenience, all of the top-level functions use a global state available\nvia the spew.Config global.\n\nIt is also possible to create a ConfigState instance that provides methods\nequivalent to the top-level functions.  This allows concurrent configuration\noptions.  See the ConfigState documentation for more details.\n\nThe following configuration options are available:\n\t* Indent\n\t\tString to use for each indentation level for Dump functions.\n\t\tIt is a single space by default.  A popular alternative is \"\\t\".\n\n\t* MaxDepth\n\t\tMaximum number of levels to descend into nested data structures.\n\t\tThere is no limit by default.\n\n\t* DisableMethods\n\t\tDisables invocation of error and Stringer interface methods.\n\t\tMethod invocation is enabled by default.\n\n\t* DisablePointerMethods\n\t\tDisables invocation of error and Stringer interface methods on types\n\t\twhich only accept pointer receivers from non-pointer variables.\n\t\tPointer method invocation is enabled by default.\n\n\t* DisablePointerAddresses\n\t\tDisablePointerAddresses specifies whether to disable the printing of\n\t\tpointer addresses. This is useful when diffing data structures in tests.\n\n\t* DisableCapacities\n\t\tDisableCapacities specifies whether to disable the printing of\n\t\tcapacities for arrays, slices, maps and channels. This is useful when\n\t\tdiffing data structures in tests.\n\n\t* ContinueOnMethod\n\t\tEnables recursion into types after invoking error and Stringer interface\n\t\tmethods. Recursion after method invocation is disabled by default.\n\n\t* SortKeys\n\t\tSpecifies map keys should be sorted before being printed. Use\n\t\tthis to have a more deterministic, diffable output.  Note that\n\t\tonly native types (bool, int, uint, floats, uintptr and string)\n\t\tand types which implement error or Stringer interfaces are\n\t\tsupported with other types sorted according to the\n\t\treflect.Value.String() output which guarantees display\n\t\tstability.  Natural map order is used by default.\n\n\t* SpewKeys\n\t\tSpecifies that, as a last resort attempt, map keys should be\n\t\tspewed to strings and sorted by those strings.  This is only\n\t\tconsidered if SortKeys is true.\n\nDump Usage\n\nSimply call spew.Dump with a list of variables you want to dump:\n\n\tspew.Dump(myVar1, myVar2, ...)\n\nYou may also call spew.Fdump if you would prefer to output to an arbitrary\nio.Writer.  For example, to dump to standard error:\n\n\tspew.Fdump(os.Stderr, myVar1, myVar2, ...)\n\nA third option is to call spew.Sdump to get the formatted output as a string:\n\n\tstr := spew.Sdump(myVar1, myVar2, ...)\n\nSample Dump Output\n\nSee the Dump example for details on the setup of the types and variables being\nshown here.\n\n\t(main.Foo) {\n\t unexportedField: (*main.Bar)(0xf84002e210)({\n\t  flag: (main.Flag) flagTwo,\n\t  data: (uintptr) <nil>\n\t }),\n\t ExportedField: (map[interface {}]interface {}) (len=1) {\n\t  (string) (len=3) \"one\": (bool) true\n\t }\n\t}\n\nByte (and uint8) arrays and slices are displayed uniquely like the hexdump -C\ncommand as shown.\n\t([]uint8) (len=32 cap=32) {\n\t 00000000  11 12 13 14 15 16 17 18  19 1a 1b 1c 1d 1e 1f 20  |............... |\n\t 00000010  21 22 23 24 25 26 27 28  29 2a 2b 2c 2d 2e 2f 30  |!\"#$%&'()*+,-./0|\n\t 00000020  31 32                                             |12|\n\t}\n\nCustom Formatter\n\nSpew provides a custom formatter that implements the fmt.Formatter interface\nso that it integrates cleanly with standard fmt package printing functions. The\nformatter is useful for inline printing of smaller data types similar to the\nstandard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nCustom Formatter Usage\n\nThe simplest way to make use of the spew custom formatter is to call one of the\nconvenience functions such as spew.Printf, spew.Println, or spew.Printf.  The\nfunctions have syntax you are most likely already familiar with:\n\n\tspew.Printf(\"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Printf(\"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\tspew.Println(myVar, myVar2)\n\tspew.Fprintf(os.Stderr, \"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Fprintf(os.Stderr, \"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\nSee the Index for the full list convenience functions.\n\nSample Formatter Output\n\nDouble pointer to a uint8:\n\t  %v: <**>5\n\t %+v: <**>(0xf8400420d0->0xf8400420c8)5\n\t %#v: (**uint8)5\n\t%#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5\n\nPointer to circular struct with a uint8 field and a pointer to itself:\n\t  %v: <*>{1 <*><shown>}\n\t %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)<shown>}\n\t %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)<shown>}\n\t%#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)<shown>}\n\nSee the Printf example for details on the setup of variables being shown\nhere.\n\nErrors\n\nSince it is possible for custom Stringer/error interfaces to panic, spew\ndetects them and handles them internally by printing the panic information\ninline with the output.  Since spew is intended to provide deep pretty printing\ncapabilities on structures, it intentionally does not return any errors.\n*/\npackage spew\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/dump.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar (\n\t// uint8Type is a reflect.Type representing a uint8.  It is used to\n\t// convert cgo types to uint8 slices for hexdumping.\n\tuint8Type = reflect.TypeOf(uint8(0))\n\n\t// cCharRE is a regular expression that matches a cgo char.\n\t// It is used to detect character arrays to hexdump them.\n\tcCharRE = regexp.MustCompile(`^.*\\._Ctype_char$`)\n\n\t// cUnsignedCharRE is a regular expression that matches a cgo unsigned\n\t// char.  It is used to detect unsigned character arrays to hexdump\n\t// them.\n\tcUnsignedCharRE = regexp.MustCompile(`^.*\\._Ctype_unsignedchar$`)\n\n\t// cUint8tCharRE is a regular expression that matches a cgo uint8_t.\n\t// It is used to detect uint8_t arrays to hexdump them.\n\tcUint8tCharRE = regexp.MustCompile(`^.*\\._Ctype_uint8_t$`)\n)\n\n// dumpState contains information about the state of a dump operation.\ntype dumpState struct {\n\tw                io.Writer\n\tdepth            int\n\tpointers         map[uintptr]int\n\tignoreNextType   bool\n\tignoreNextIndent bool\n\tcs               *ConfigState\n}\n\n// indent performs indentation according to the depth level and cs.Indent\n// option.\nfunc (d *dumpState) indent() {\n\tif d.ignoreNextIndent {\n\t\td.ignoreNextIndent = false\n\t\treturn\n\t}\n\td.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth))\n}\n\n// unpackValue returns values inside of non-nil interfaces when possible.\n// This is useful for data types like structs, arrays, slices, and maps which\n// can contain varying types packed inside an interface.\nfunc (d *dumpState) unpackValue(v reflect.Value) reflect.Value {\n\tif v.Kind() == reflect.Interface && !v.IsNil() {\n\t\tv = v.Elem()\n\t}\n\treturn v\n}\n\n// dumpPtr handles formatting of pointers by indirecting them as necessary.\nfunc (d *dumpState) dumpPtr(v reflect.Value) {\n\t// Remove pointers at or below the current depth from map used to detect\n\t// circular refs.\n\tfor k, depth := range d.pointers {\n\t\tif depth >= d.depth {\n\t\t\tdelete(d.pointers, k)\n\t\t}\n\t}\n\n\t// Keep list of all dereferenced pointers to show later.\n\tpointerChain := make([]uintptr, 0)\n\n\t// Figure out how many levels of indirection there are by dereferencing\n\t// pointers and unpacking interfaces down the chain while detecting circular\n\t// references.\n\tnilFound := false\n\tcycleFound := false\n\tindirects := 0\n\tve := v\n\tfor ve.Kind() == reflect.Ptr {\n\t\tif ve.IsNil() {\n\t\t\tnilFound = true\n\t\t\tbreak\n\t\t}\n\t\tindirects++\n\t\taddr := ve.Pointer()\n\t\tpointerChain = append(pointerChain, addr)\n\t\tif pd, ok := d.pointers[addr]; ok && pd < d.depth {\n\t\t\tcycleFound = true\n\t\t\tindirects--\n\t\t\tbreak\n\t\t}\n\t\td.pointers[addr] = d.depth\n\n\t\tve = ve.Elem()\n\t\tif ve.Kind() == reflect.Interface {\n\t\t\tif ve.IsNil() {\n\t\t\t\tnilFound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tve = ve.Elem()\n\t\t}\n\t}\n\n\t// Display type information.\n\td.w.Write(openParenBytes)\n\td.w.Write(bytes.Repeat(asteriskBytes, indirects))\n\td.w.Write([]byte(ve.Type().String()))\n\td.w.Write(closeParenBytes)\n\n\t// Display pointer information.\n\tif !d.cs.DisablePointerAddresses && len(pointerChain) > 0 {\n\t\td.w.Write(openParenBytes)\n\t\tfor i, addr := range pointerChain {\n\t\t\tif i > 0 {\n\t\t\t\td.w.Write(pointerChainBytes)\n\t\t\t}\n\t\t\tprintHexPtr(d.w, addr)\n\t\t}\n\t\td.w.Write(closeParenBytes)\n\t}\n\n\t// Display dereferenced value.\n\td.w.Write(openParenBytes)\n\tswitch {\n\tcase nilFound:\n\t\td.w.Write(nilAngleBytes)\n\n\tcase cycleFound:\n\t\td.w.Write(circularBytes)\n\n\tdefault:\n\t\td.ignoreNextType = true\n\t\td.dump(ve)\n\t}\n\td.w.Write(closeParenBytes)\n}\n\n// dumpSlice handles formatting of arrays and slices.  Byte (uint8 under\n// reflection) arrays and slices are dumped in hexdump -C fashion.\nfunc (d *dumpState) dumpSlice(v reflect.Value) {\n\t// Determine whether this type should be hex dumped or not.  Also,\n\t// for types which should be hexdumped, try to use the underlying data\n\t// first, then fall back to trying to convert them to a uint8 slice.\n\tvar buf []uint8\n\tdoConvert := false\n\tdoHexDump := false\n\tnumEntries := v.Len()\n\tif numEntries > 0 {\n\t\tvt := v.Index(0).Type()\n\t\tvts := vt.String()\n\t\tswitch {\n\t\t// C types that need to be converted.\n\t\tcase cCharRE.MatchString(vts):\n\t\t\tfallthrough\n\t\tcase cUnsignedCharRE.MatchString(vts):\n\t\t\tfallthrough\n\t\tcase cUint8tCharRE.MatchString(vts):\n\t\t\tdoConvert = true\n\n\t\t// Try to use existing uint8 slices and fall back to converting\n\t\t// and copying if that fails.\n\t\tcase vt.Kind() == reflect.Uint8:\n\t\t\t// We need an addressable interface to convert the type\n\t\t\t// to a byte slice.  However, the reflect package won't\n\t\t\t// give us an interface on certain things like\n\t\t\t// unexported struct fields in order to enforce\n\t\t\t// visibility rules.  We use unsafe, when available, to\n\t\t\t// bypass these restrictions since this package does not\n\t\t\t// mutate the values.\n\t\t\tvs := v\n\t\t\tif !vs.CanInterface() || !vs.CanAddr() {\n\t\t\t\tvs = unsafeReflectValue(vs)\n\t\t\t}\n\t\t\tif !UnsafeDisabled {\n\t\t\t\tvs = vs.Slice(0, numEntries)\n\n\t\t\t\t// Use the existing uint8 slice if it can be\n\t\t\t\t// type asserted.\n\t\t\t\tiface := vs.Interface()\n\t\t\t\tif slice, ok := iface.([]uint8); ok {\n\t\t\t\t\tbuf = slice\n\t\t\t\t\tdoHexDump = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The underlying data needs to be converted if it can't\n\t\t\t// be type asserted to a uint8 slice.\n\t\t\tdoConvert = true\n\t\t}\n\n\t\t// Copy and convert the underlying type if needed.\n\t\tif doConvert && vt.ConvertibleTo(uint8Type) {\n\t\t\t// Convert and copy each element into a uint8 byte\n\t\t\t// slice.\n\t\t\tbuf = make([]uint8, numEntries)\n\t\t\tfor i := 0; i < numEntries; i++ {\n\t\t\t\tvv := v.Index(i)\n\t\t\t\tbuf[i] = uint8(vv.Convert(uint8Type).Uint())\n\t\t\t}\n\t\t\tdoHexDump = true\n\t\t}\n\t}\n\n\t// Hexdump the entire slice as needed.\n\tif doHexDump {\n\t\tindent := strings.Repeat(d.cs.Indent, d.depth)\n\t\tstr := indent + hex.Dump(buf)\n\t\tstr = strings.Replace(str, \"\\n\", \"\\n\"+indent, -1)\n\t\tstr = strings.TrimRight(str, d.cs.Indent)\n\t\td.w.Write([]byte(str))\n\t\treturn\n\t}\n\n\t// Recursively call dump for each item.\n\tfor i := 0; i < numEntries; i++ {\n\t\td.dump(d.unpackValue(v.Index(i)))\n\t\tif i < (numEntries - 1) {\n\t\t\td.w.Write(commaNewlineBytes)\n\t\t} else {\n\t\t\td.w.Write(newlineBytes)\n\t\t}\n\t}\n}\n\n// dump is the main workhorse for dumping a value.  It uses the passed reflect\n// value to figure out what kind of object we are dealing with and formats it\n// appropriately.  It is a recursive function, however circular data structures\n// are detected and handled properly.\nfunc (d *dumpState) dump(v reflect.Value) {\n\t// Handle invalid reflect values immediately.\n\tkind := v.Kind()\n\tif kind == reflect.Invalid {\n\t\td.w.Write(invalidAngleBytes)\n\t\treturn\n\t}\n\n\t// Handle pointers specially.\n\tif kind == reflect.Ptr {\n\t\td.indent()\n\t\td.dumpPtr(v)\n\t\treturn\n\t}\n\n\t// Print type information unless already handled elsewhere.\n\tif !d.ignoreNextType {\n\t\td.indent()\n\t\td.w.Write(openParenBytes)\n\t\td.w.Write([]byte(v.Type().String()))\n\t\td.w.Write(closeParenBytes)\n\t\td.w.Write(spaceBytes)\n\t}\n\td.ignoreNextType = false\n\n\t// Display length and capacity if the built-in len and cap functions\n\t// work with the value's kind and the len/cap itself is non-zero.\n\tvalueLen, valueCap := 0, 0\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Slice, reflect.Chan:\n\t\tvalueLen, valueCap = v.Len(), v.Cap()\n\tcase reflect.Map, reflect.String:\n\t\tvalueLen = v.Len()\n\t}\n\tif valueLen != 0 || !d.cs.DisableCapacities && valueCap != 0 {\n\t\td.w.Write(openParenBytes)\n\t\tif valueLen != 0 {\n\t\t\td.w.Write(lenEqualsBytes)\n\t\t\tprintInt(d.w, int64(valueLen), 10)\n\t\t}\n\t\tif !d.cs.DisableCapacities && valueCap != 0 {\n\t\t\tif valueLen != 0 {\n\t\t\t\td.w.Write(spaceBytes)\n\t\t\t}\n\t\t\td.w.Write(capEqualsBytes)\n\t\t\tprintInt(d.w, int64(valueCap), 10)\n\t\t}\n\t\td.w.Write(closeParenBytes)\n\t\td.w.Write(spaceBytes)\n\t}\n\n\t// Call Stringer/error interfaces if they exist and the handle methods flag\n\t// is enabled\n\tif !d.cs.DisableMethods {\n\t\tif (kind != reflect.Invalid) && (kind != reflect.Interface) {\n\t\t\tif handled := handleMethods(d.cs, d.w, v); handled {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch kind {\n\tcase reflect.Invalid:\n\t\t// Do nothing.  We should never get here since invalid has already\n\t\t// been handled above.\n\n\tcase reflect.Bool:\n\t\tprintBool(d.w, v.Bool())\n\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\tprintInt(d.w, v.Int(), 10)\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\tprintUint(d.w, v.Uint(), 10)\n\n\tcase reflect.Float32:\n\t\tprintFloat(d.w, v.Float(), 32)\n\n\tcase reflect.Float64:\n\t\tprintFloat(d.w, v.Float(), 64)\n\n\tcase reflect.Complex64:\n\t\tprintComplex(d.w, v.Complex(), 32)\n\n\tcase reflect.Complex128:\n\t\tprintComplex(d.w, v.Complex(), 64)\n\n\tcase reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\t\tfallthrough\n\n\tcase reflect.Array:\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\td.dumpSlice(v)\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.String:\n\t\td.w.Write([]byte(strconv.Quote(v.String())))\n\n\tcase reflect.Interface:\n\t\t// The only time we should get here is for nil interfaces due to\n\t\t// unpackValue calls.\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// Do nothing.  We should never get here since pointers have already\n\t\t// been handled above.\n\n\tcase reflect.Map:\n\t\t// nil maps should be indicated as different than empty maps\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\tnumEntries := v.Len()\n\t\t\tkeys := v.MapKeys()\n\t\t\tif d.cs.SortKeys {\n\t\t\t\tsortValues(keys, d.cs)\n\t\t\t}\n\t\t\tfor i, key := range keys {\n\t\t\t\td.dump(d.unpackValue(key))\n\t\t\t\td.w.Write(colonSpaceBytes)\n\t\t\t\td.ignoreNextIndent = true\n\t\t\t\td.dump(d.unpackValue(v.MapIndex(key)))\n\t\t\t\tif i < (numEntries - 1) {\n\t\t\t\t\td.w.Write(commaNewlineBytes)\n\t\t\t\t} else {\n\t\t\t\t\td.w.Write(newlineBytes)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.Struct:\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\tvt := v.Type()\n\t\t\tnumFields := v.NumField()\n\t\t\tfor i := 0; i < numFields; i++ {\n\t\t\t\td.indent()\n\t\t\t\tvtf := vt.Field(i)\n\t\t\t\td.w.Write([]byte(vtf.Name))\n\t\t\t\td.w.Write(colonSpaceBytes)\n\t\t\t\td.ignoreNextIndent = true\n\t\t\t\td.dump(d.unpackValue(v.Field(i)))\n\t\t\t\tif i < (numFields - 1) {\n\t\t\t\t\td.w.Write(commaNewlineBytes)\n\t\t\t\t} else {\n\t\t\t\t\td.w.Write(newlineBytes)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.Uintptr:\n\t\tprintHexPtr(d.w, uintptr(v.Uint()))\n\n\tcase reflect.UnsafePointer, reflect.Chan, reflect.Func:\n\t\tprintHexPtr(d.w, v.Pointer())\n\n\t// There were not any other types at the time this code was written, but\n\t// fall back to letting the default fmt package handle it in case any new\n\t// types are added.\n\tdefault:\n\t\tif v.CanInterface() {\n\t\t\tfmt.Fprintf(d.w, \"%v\", v.Interface())\n\t\t} else {\n\t\t\tfmt.Fprintf(d.w, \"%v\", v.String())\n\t\t}\n\t}\n}\n\n// fdump is a helper function to consolidate the logic from the various public\n// methods which take varying writers and config states.\nfunc fdump(cs *ConfigState, w io.Writer, a ...interface{}) {\n\tfor _, arg := range a {\n\t\tif arg == nil {\n\t\t\tw.Write(interfaceBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\tw.Write(nilAngleBytes)\n\t\t\tw.Write(newlineBytes)\n\t\t\tcontinue\n\t\t}\n\n\t\td := dumpState{w: w, cs: cs}\n\t\td.pointers = make(map[uintptr]int)\n\t\td.dump(reflect.ValueOf(arg))\n\t\td.w.Write(newlineBytes)\n\t}\n}\n\n// Fdump formats and displays the passed arguments to io.Writer w.  It formats\n// exactly the same as Dump.\nfunc Fdump(w io.Writer, a ...interface{}) {\n\tfdump(&Config, w, a...)\n}\n\n// Sdump returns a string with the passed arguments formatted exactly the same\n// as Dump.\nfunc Sdump(a ...interface{}) string {\n\tvar buf bytes.Buffer\n\tfdump(&Config, &buf, a...)\n\treturn buf.String()\n}\n\n/*\nDump displays the passed parameters to standard out with newlines, customizable\nindentation, and additional debug information such as complete types and all\npointer addresses used to indirect to the final value.  It provides the\nfollowing features over the built-in printing facilities provided by the fmt\npackage:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output\n\nThe configuration options are controlled by an exported package global,\nspew.Config.  See ConfigState for options documentation.\n\nSee Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to\nget the formatted result as a string.\n*/\nfunc Dump(a ...interface{}) {\n\tfdump(&Config, os.Stdout, a...)\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/format.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// supportedFlags is a list of all the character flags supported by fmt package.\nconst supportedFlags = \"0-+# \"\n\n// formatState implements the fmt.Formatter interface and contains information\n// about the state of a formatting operation.  The NewFormatter function can\n// be used to get a new Formatter which can be used directly as arguments\n// in standard fmt package printing calls.\ntype formatState struct {\n\tvalue          interface{}\n\tfs             fmt.State\n\tdepth          int\n\tpointers       map[uintptr]int\n\tignoreNextType bool\n\tcs             *ConfigState\n}\n\n// buildDefaultFormat recreates the original format string without precision\n// and width information to pass in to fmt.Sprintf in the case of an\n// unrecognized type.  Unless new types are added to the language, this\n// function won't ever be called.\nfunc (f *formatState) buildDefaultFormat() (format string) {\n\tbuf := bytes.NewBuffer(percentBytes)\n\n\tfor _, flag := range supportedFlags {\n\t\tif f.fs.Flag(int(flag)) {\n\t\t\tbuf.WriteRune(flag)\n\t\t}\n\t}\n\n\tbuf.WriteRune('v')\n\n\tformat = buf.String()\n\treturn format\n}\n\n// constructOrigFormat recreates the original format string including precision\n// and width information to pass along to the standard fmt package.  This allows\n// automatic deferral of all format strings this package doesn't support.\nfunc (f *formatState) constructOrigFormat(verb rune) (format string) {\n\tbuf := bytes.NewBuffer(percentBytes)\n\n\tfor _, flag := range supportedFlags {\n\t\tif f.fs.Flag(int(flag)) {\n\t\t\tbuf.WriteRune(flag)\n\t\t}\n\t}\n\n\tif width, ok := f.fs.Width(); ok {\n\t\tbuf.WriteString(strconv.Itoa(width))\n\t}\n\n\tif precision, ok := f.fs.Precision(); ok {\n\t\tbuf.Write(precisionBytes)\n\t\tbuf.WriteString(strconv.Itoa(precision))\n\t}\n\n\tbuf.WriteRune(verb)\n\n\tformat = buf.String()\n\treturn format\n}\n\n// unpackValue returns values inside of non-nil interfaces when possible and\n// ensures that types for values which have been unpacked from an interface\n// are displayed when the show types flag is also set.\n// This is useful for data types like structs, arrays, slices, and maps which\n// can contain varying types packed inside an interface.\nfunc (f *formatState) unpackValue(v reflect.Value) reflect.Value {\n\tif v.Kind() == reflect.Interface {\n\t\tf.ignoreNextType = false\n\t\tif !v.IsNil() {\n\t\t\tv = v.Elem()\n\t\t}\n\t}\n\treturn v\n}\n\n// formatPtr handles formatting of pointers by indirecting them as necessary.\nfunc (f *formatState) formatPtr(v reflect.Value) {\n\t// Display nil if top level pointer is nil.\n\tshowTypes := f.fs.Flag('#')\n\tif v.IsNil() && (!showTypes || f.ignoreNextType) {\n\t\tf.fs.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\t// Remove pointers at or below the current depth from map used to detect\n\t// circular refs.\n\tfor k, depth := range f.pointers {\n\t\tif depth >= f.depth {\n\t\t\tdelete(f.pointers, k)\n\t\t}\n\t}\n\n\t// Keep list of all dereferenced pointers to possibly show later.\n\tpointerChain := make([]uintptr, 0)\n\n\t// Figure out how many levels of indirection there are by derferencing\n\t// pointers and unpacking interfaces down the chain while detecting circular\n\t// references.\n\tnilFound := false\n\tcycleFound := false\n\tindirects := 0\n\tve := v\n\tfor ve.Kind() == reflect.Ptr {\n\t\tif ve.IsNil() {\n\t\t\tnilFound = true\n\t\t\tbreak\n\t\t}\n\t\tindirects++\n\t\taddr := ve.Pointer()\n\t\tpointerChain = append(pointerChain, addr)\n\t\tif pd, ok := f.pointers[addr]; ok && pd < f.depth {\n\t\t\tcycleFound = true\n\t\t\tindirects--\n\t\t\tbreak\n\t\t}\n\t\tf.pointers[addr] = f.depth\n\n\t\tve = ve.Elem()\n\t\tif ve.Kind() == reflect.Interface {\n\t\t\tif ve.IsNil() {\n\t\t\t\tnilFound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tve = ve.Elem()\n\t\t}\n\t}\n\n\t// Display type or indirection level depending on flags.\n\tif showTypes && !f.ignoreNextType {\n\t\tf.fs.Write(openParenBytes)\n\t\tf.fs.Write(bytes.Repeat(asteriskBytes, indirects))\n\t\tf.fs.Write([]byte(ve.Type().String()))\n\t\tf.fs.Write(closeParenBytes)\n\t} else {\n\t\tif nilFound || cycleFound {\n\t\t\tindirects += strings.Count(ve.Type().String(), \"*\")\n\t\t}\n\t\tf.fs.Write(openAngleBytes)\n\t\tf.fs.Write([]byte(strings.Repeat(\"*\", indirects)))\n\t\tf.fs.Write(closeAngleBytes)\n\t}\n\n\t// Display pointer information depending on flags.\n\tif f.fs.Flag('+') && (len(pointerChain) > 0) {\n\t\tf.fs.Write(openParenBytes)\n\t\tfor i, addr := range pointerChain {\n\t\t\tif i > 0 {\n\t\t\t\tf.fs.Write(pointerChainBytes)\n\t\t\t}\n\t\t\tprintHexPtr(f.fs, addr)\n\t\t}\n\t\tf.fs.Write(closeParenBytes)\n\t}\n\n\t// Display dereferenced value.\n\tswitch {\n\tcase nilFound:\n\t\tf.fs.Write(nilAngleBytes)\n\n\tcase cycleFound:\n\t\tf.fs.Write(circularShortBytes)\n\n\tdefault:\n\t\tf.ignoreNextType = true\n\t\tf.format(ve)\n\t}\n}\n\n// format is the main workhorse for providing the Formatter interface.  It\n// uses the passed reflect value to figure out what kind of object we are\n// dealing with and formats it appropriately.  It is a recursive function,\n// however circular data structures are detected and handled properly.\nfunc (f *formatState) format(v reflect.Value) {\n\t// Handle invalid reflect values immediately.\n\tkind := v.Kind()\n\tif kind == reflect.Invalid {\n\t\tf.fs.Write(invalidAngleBytes)\n\t\treturn\n\t}\n\n\t// Handle pointers specially.\n\tif kind == reflect.Ptr {\n\t\tf.formatPtr(v)\n\t\treturn\n\t}\n\n\t// Print type information unless already handled elsewhere.\n\tif !f.ignoreNextType && f.fs.Flag('#') {\n\t\tf.fs.Write(openParenBytes)\n\t\tf.fs.Write([]byte(v.Type().String()))\n\t\tf.fs.Write(closeParenBytes)\n\t}\n\tf.ignoreNextType = false\n\n\t// Call Stringer/error interfaces if they exist and the handle methods\n\t// flag is enabled.\n\tif !f.cs.DisableMethods {\n\t\tif (kind != reflect.Invalid) && (kind != reflect.Interface) {\n\t\t\tif handled := handleMethods(f.cs, f.fs, v); handled {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch kind {\n\tcase reflect.Invalid:\n\t\t// Do nothing.  We should never get here since invalid has already\n\t\t// been handled above.\n\n\tcase reflect.Bool:\n\t\tprintBool(f.fs, v.Bool())\n\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\tprintInt(f.fs, v.Int(), 10)\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\tprintUint(f.fs, v.Uint(), 10)\n\n\tcase reflect.Float32:\n\t\tprintFloat(f.fs, v.Float(), 32)\n\n\tcase reflect.Float64:\n\t\tprintFloat(f.fs, v.Float(), 64)\n\n\tcase reflect.Complex64:\n\t\tprintComplex(f.fs, v.Complex(), 32)\n\n\tcase reflect.Complex128:\n\t\tprintComplex(f.fs, v.Complex(), 64)\n\n\tcase reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\t\tfallthrough\n\n\tcase reflect.Array:\n\t\tf.fs.Write(openBracketBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tnumEntries := v.Len()\n\t\t\tfor i := 0; i < numEntries; i++ {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(v.Index(i)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeBracketBytes)\n\n\tcase reflect.String:\n\t\tf.fs.Write([]byte(v.String()))\n\n\tcase reflect.Interface:\n\t\t// The only time we should get here is for nil interfaces due to\n\t\t// unpackValue calls.\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// Do nothing.  We should never get here since pointers have already\n\t\t// been handled above.\n\n\tcase reflect.Map:\n\t\t// nil maps should be indicated as different than empty maps\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\n\t\tf.fs.Write(openMapBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tkeys := v.MapKeys()\n\t\t\tif f.cs.SortKeys {\n\t\t\t\tsortValues(keys, f.cs)\n\t\t\t}\n\t\t\tfor i, key := range keys {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(key))\n\t\t\t\tf.fs.Write(colonBytes)\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(v.MapIndex(key)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeMapBytes)\n\n\tcase reflect.Struct:\n\t\tnumFields := v.NumField()\n\t\tf.fs.Write(openBraceBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tvt := v.Type()\n\t\t\tfor i := 0; i < numFields; i++ {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tvtf := vt.Field(i)\n\t\t\t\tif f.fs.Flag('+') || f.fs.Flag('#') {\n\t\t\t\t\tf.fs.Write([]byte(vtf.Name))\n\t\t\t\t\tf.fs.Write(colonBytes)\n\t\t\t\t}\n\t\t\t\tf.format(f.unpackValue(v.Field(i)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeBraceBytes)\n\n\tcase reflect.Uintptr:\n\t\tprintHexPtr(f.fs, uintptr(v.Uint()))\n\n\tcase reflect.UnsafePointer, reflect.Chan, reflect.Func:\n\t\tprintHexPtr(f.fs, v.Pointer())\n\n\t// There were not any other types at the time this code was written, but\n\t// fall back to letting the default fmt package handle it if any get added.\n\tdefault:\n\t\tformat := f.buildDefaultFormat()\n\t\tif v.CanInterface() {\n\t\t\tfmt.Fprintf(f.fs, format, v.Interface())\n\t\t} else {\n\t\t\tfmt.Fprintf(f.fs, format, v.String())\n\t\t}\n\t}\n}\n\n// Format satisfies the fmt.Formatter interface. See NewFormatter for usage\n// details.\nfunc (f *formatState) Format(fs fmt.State, verb rune) {\n\tf.fs = fs\n\n\t// Use standard formatting for verbs that are not v.\n\tif verb != 'v' {\n\t\tformat := f.constructOrigFormat(verb)\n\t\tfmt.Fprintf(fs, format, f.value)\n\t\treturn\n\t}\n\n\tif f.value == nil {\n\t\tif fs.Flag('#') {\n\t\t\tfs.Write(interfaceBytes)\n\t\t}\n\t\tfs.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\tf.format(reflect.ValueOf(f.value))\n}\n\n// newFormatter is a helper function to consolidate the logic from the various\n// public methods which take varying config states.\nfunc newFormatter(cs *ConfigState, v interface{}) fmt.Formatter {\n\tfs := &formatState{value: v, cs: cs}\n\tfs.pointers = make(map[uintptr]int)\n\treturn fs\n}\n\n/*\nNewFormatter returns a custom formatter that satisfies the fmt.Formatter\ninterface.  As a result, it integrates cleanly with standard fmt package\nprinting functions.  The formatter is useful for inline printing of smaller data\ntypes similar to the standard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nTypically this function shouldn't be called directly.  It is much easier to make\nuse of the custom formatter by calling one of the convenience functions such as\nPrintf, Println, or Fprintf.\n*/\nfunc NewFormatter(v interface{}) fmt.Formatter {\n\treturn newFormatter(&Config, v)\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/spew.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the formatted string as a value that satisfies error.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Errorf(format string, a ...interface{}) (err error) {\n\treturn fmt.Errorf(format, convertArgs(a)...)\n}\n\n// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprint(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprint(w, convertArgs(a)...)\n}\n\n// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintf(w, format, convertArgs(a)...)\n}\n\n// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it\n// passed with a default Formatter interface returned by NewFormatter.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprintln(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintln(w, convertArgs(a)...)\n}\n\n// Print is a wrapper for fmt.Print that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Print(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Print(a ...interface{}) (n int, err error) {\n\treturn fmt.Print(convertArgs(a)...)\n}\n\n// Printf is a wrapper for fmt.Printf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Printf(format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Printf(format, convertArgs(a)...)\n}\n\n// Println is a wrapper for fmt.Println that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Println(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Println(a ...interface{}) (n int, err error) {\n\treturn fmt.Println(convertArgs(a)...)\n}\n\n// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprint(a ...interface{}) string {\n\treturn fmt.Sprint(convertArgs(a)...)\n}\n\n// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprintf(format string, a ...interface{}) string {\n\treturn fmt.Sprintf(format, convertArgs(a)...)\n}\n\n// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it\n// were passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprintln(a ...interface{}) string {\n\treturn fmt.Sprintln(convertArgs(a)...)\n}\n\n// convertArgs accepts a slice of arguments and returns a slice of the same\n// length with each argument converted to a default spew Formatter interface.\nfunc convertArgs(args []interface{}) (formatters []interface{}) {\n\tformatters = make([]interface{}, len(args))\n\tfor index, arg := range args {\n\t\tformatters[index] = NewFormatter(arg)\n\t}\n\treturn formatters\n}\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/.gitattributes",
    "content": "*.go text eol=lf\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/.gitignore",
    "content": "# Cover profiles\n*.out\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/.golangci.yml",
    "content": "linters:\n  enable:\n    - bodyclose\n    - dupword # Checks for duplicate words in the source code\n    - gofmt\n    - goimports\n    - ineffassign\n    - misspell\n    - revive\n    - staticcheck\n    - unconvert\n    - unused\n    - vet\n  disable:\n    - errcheck\n\nrun:\n  deadline: 2m\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md",
    "content": "# Code of Conduct\n\nWe follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).\n\nPlease contact the [CNCF Code of Conduct Committee](mailto:conduct@cncf.io) in order to report violations of the Code of Conduct.\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/CONTRIBUTING.md",
    "content": "# Contributing to the reference library\n\n## Community help\n\nIf you need help, please ask in the [#distribution](https://cloud-native.slack.com/archives/C01GVR8SY4R) channel on CNCF community slack.\n[Click here for an invite to the CNCF community slack](https://slack.cncf.io/)\n\n## Reporting security issues\n\nThe maintainers take security seriously. If you discover a security\nissue, please bring it to their attention right away!\n\nPlease **DO NOT** file a public issue, instead send your report privately to\n[cncf-distribution-security@lists.cncf.io](mailto:cncf-distribution-security@lists.cncf.io).\n\n## Reporting an issue properly\n\nBy following these simple rules you will get better and faster feedback on your issue.\n\n - search the bugtracker for an already reported issue\n\n### If you found an issue that describes your problem:\n\n - please read other user comments first, and confirm this is the same issue: a given error condition might be indicative of different problems - you may also find a workaround in the comments\n - please refrain from adding \"same thing here\" or \"+1\" comments\n - you don't need to comment on an issue to get notified of updates: just hit the \"subscribe\" button\n - comment if you have some new, technical and relevant information to add to the case\n - __DO NOT__ comment on closed issues or merged PRs. If you think you have a related problem, open up a new issue and reference the PR or issue.\n\n### If you have not found an existing issue that describes your problem:\n\n 1. create a new issue, with a succinct title that describes your issue:\n   - bad title: \"It doesn't work with my docker\"\n   - good title: \"Private registry push fail: 400 error with E_INVALID_DIGEST\"\n 2. copy the output of (or similar for other container tools):\n   - `docker version`\n   - `docker info`\n   - `docker exec <registry-container> registry --version`\n 3. copy the command line you used to launch your Registry\n 4. restart your docker daemon in debug mode (add `-D` to the daemon launch arguments)\n 5. reproduce your problem and get your docker daemon logs showing the error\n 6. if relevant, copy your registry logs that show the error\n 7. provide any relevant detail about your specific Registry configuration (e.g., storage backend used)\n 8. indicate if you are using an enterprise proxy, Nginx, or anything else between you and your Registry\n\n## Contributing Code\n\nContributions should be made via pull requests. Pull requests will be reviewed\nby one or more maintainers or reviewers and merged when acceptable.\n\nYou should follow the basic GitHub workflow:\n\n 1. Use your own [fork](https://help.github.com/en/articles/about-forks)\n 2. Create your [change](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#successful-changes)\n 3. Test your code\n 4. [Commit](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#commit-messages) your work, always [sign your commits](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#commit-messages)\n 5. Push your change to your fork and create a [Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork)\n\nRefer to [containerd's contribution guide](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#successful-changes)\nfor tips on creating a successful contribution.\n\n## Sign your work\n\nThe sign-off is a simple line at the end of the explanation for the patch. Your\nsignature certifies that you wrote the patch or otherwise have the right to pass\nit on as an open-source patch. The rules are pretty simple: if you can certify\nthe below (from [developercertificate.org](http://developercertificate.org/)):\n\n```\nDeveloper Certificate of Origin\nVersion 1.1\n\nCopyright (C) 2004, 2006 The Linux Foundation and its contributors.\n660 York Street, Suite 102,\nSan Francisco, CA 94110 USA\n\nEveryone is permitted to copy and distribute verbatim copies of this\nlicense document, but changing it is not allowed.\n\nDeveloper's Certificate of Origin 1.1\n\nBy making a contribution to this project, I certify that:\n\n(a) The contribution was created in whole or in part by me and I\n    have the right to submit it under the open source license\n    indicated in the file; or\n\n(b) The contribution is based upon previous work that, to the best\n    of my knowledge, is covered under an appropriate open source\n    license and I have the right under that license to submit that\n    work with modifications, whether created in whole or in part\n    by me, under the same open source license (unless I am\n    permitted to submit under a different license), as indicated\n    in the file; or\n\n(c) The contribution was provided directly to me by some other\n    person who certified (a), (b) or (c) and I have not modified\n    it.\n\n(d) I understand and agree that this project and the contribution\n    are public and that a record of the contribution (including all\n    personal information I submit with it, including my sign-off) is\n    maintained indefinitely and may be redistributed consistent with\n    this project or the open source license(s) involved.\n```\n\nThen you just add a line to every git commit message:\n\n    Signed-off-by: Joe Smith <joe.smith@email.com>\n\nUse your real name (sorry, no pseudonyms or anonymous contributions.)\n\nIf you set your `user.name` and `user.email` git configs, you can sign your\ncommit automatically with `git commit -s`.\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/GOVERNANCE.md",
    "content": "# distribution/reference Project Governance\n\nDistribution [Code of Conduct](./CODE-OF-CONDUCT.md) can be found here.\n\nFor specific guidance on practical contribution steps please\nsee our [CONTRIBUTING.md](./CONTRIBUTING.md) guide.\n\n## Maintainership\n\nThere are different types of maintainers, with different responsibilities, but\nall maintainers have 3 things in common:\n\n1) They share responsibility in the project's success.\n2) They have made a long-term, recurring time investment to improve the project.\n3) They spend that time doing whatever needs to be done, not necessarily what\nis the most interesting or fun.\n\nMaintainers are often under-appreciated, because their work is harder to appreciate.\nIt's easy to appreciate a really cool and technically advanced feature. It's harder\nto appreciate the absence of bugs, the slow but steady improvement in stability,\nor the reliability of a release process. But those things distinguish a good\nproject from a great one.\n\n## Reviewers\n\nA reviewer is a core role within the project.\nThey share in reviewing issues and pull requests and their LGTM counts towards the\nrequired LGTM count to merge a code change into the project.\n\nReviewers are part of the organization but do not have write access.\nBecoming a reviewer is a core aspect in the journey to becoming a maintainer.\n\n## Adding maintainers\n\nMaintainers are first and foremost contributors that have shown they are\ncommitted to the long term success of a project. Contributors wanting to become\nmaintainers are expected to be deeply involved in contributing code, pull\nrequest review, and triage of issues in the project for more than three months.\n\nJust contributing does not make you a maintainer, it is about building trust\nwith the current maintainers of the project and being a person that they can\ndepend on and trust to make decisions in the best interest of the project.\n\nPeriodically, the existing maintainers curate a list of contributors that have\nshown regular activity on the project over the prior months. From this list,\nmaintainer candidates are selected and proposed in a pull request or a\nmaintainers communication channel.\n\nAfter a candidate has been announced to the maintainers, the existing\nmaintainers are given five business days to discuss the candidate, raise\nobjections and cast their vote. Votes may take place on the communication\nchannel or via pull request comment. Candidates must be approved by at least 66%\nof the current maintainers by adding their vote on the mailing list. The\nreviewer role has the same process but only requires 33% of current maintainers.\nOnly maintainers of the repository that the candidate is proposed for are\nallowed to vote.\n\nIf a candidate is approved, a maintainer will contact the candidate to invite\nthe candidate to open a pull request that adds the contributor to the\nMAINTAINERS file. The voting process may take place inside a pull request if a\nmaintainer has already discussed the candidacy with the candidate and a\nmaintainer is willing to be a sponsor by opening the pull request. The candidate\nbecomes a maintainer once the pull request is merged.\n\n## Stepping down policy\n\nLife priorities, interests, and passions can change. If you're a maintainer but\nfeel you must remove yourself from the list, inform other maintainers that you\nintend to step down, and if possible, help find someone to pick up your work.\nAt the very least, ensure your work can be continued where you left off.\n\nAfter you've informed other maintainers, create a pull request to remove\nyourself from the MAINTAINERS file.\n\n## Removal of inactive maintainers\n\nSimilar to the procedure for adding new maintainers, existing maintainers can\nbe removed from the list if they do not show significant activity on the\nproject. Periodically, the maintainers review the list of maintainers and their\nactivity over the last three months.\n\nIf a maintainer has shown insufficient activity over this period, a neutral\nperson will contact the maintainer to ask if they want to continue being\na maintainer. If the maintainer decides to step down as a maintainer, they\nopen a pull request to be removed from the MAINTAINERS file.\n\nIf the maintainer wants to remain a maintainer, but is unable to perform the\nrequired duties they can be removed with a vote of at least 66% of the current\nmaintainers. In this case, maintainers should first propose the change to\nmaintainers via the maintainers communication channel, then open a pull request\nfor voting. The voting period is five business days. The voting pull request\nshould not come as a surpise to any maintainer and any discussion related to\nperformance must not be discussed on the pull request.\n\n## How are decisions made?\n\nDocker distribution is an open-source project with an open design philosophy.\nThis means that the repository is the source of truth for EVERY aspect of the\nproject, including its philosophy, design, road map, and APIs. *If it's part of\nthe project, it's in the repo. If it's in the repo, it's part of the project.*\n\nAs a result, all decisions can be expressed as changes to the repository. An\nimplementation change is a change to the source code. An API change is a change\nto the API specification. A philosophy change is a change to the philosophy\nmanifesto, and so on.\n\nAll decisions affecting distribution, big and small, follow the same 3 steps:\n\n* Step 1: Open a pull request. Anyone can do this.\n\n* Step 2: Discuss the pull request. Anyone can do this.\n\n* Step 3: Merge or refuse the pull request. Who does this depends on the nature\nof the pull request and which areas of the project it affects.\n\n## Helping contributors with the DCO\n\nThe [DCO or `Sign your work`](./CONTRIBUTING.md#sign-your-work)\nrequirement is not intended as a roadblock or speed bump.\n\nSome contributors are not as familiar with `git`, or have used a web\nbased editor, and thus asking them to `git commit --amend -s` is not the best\nway forward.\n\nIn this case, maintainers can update the commits based on clause (c) of the DCO.\nThe most trivial way for a contributor to allow the maintainer to do this, is to\nadd a DCO signature in a pull requests's comment, or a maintainer can simply\nnote that the change is sufficiently trivial that it does not substantially\nchange the existing contribution - i.e., a spelling change.\n\nWhen you add someone's DCO, please also add your own to keep a log.\n\n## I'm a maintainer. Should I make pull requests too?\n\nYes. Nobody should ever push to master directly. All changes should be\nmade through a pull request.\n\n## Conflict Resolution\n\nIf you have a technical dispute that you feel has reached an impasse with a\nsubset of the community, any contributor may open an issue, specifically\ncalling for a resolution vote of the current core maintainers to resolve the\ndispute. The same voting quorums required (2/3) for adding and removing\nmaintainers will apply to conflict resolution.\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/LICENSE",
    "content": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/MAINTAINERS",
    "content": "# Distribution project maintainers & reviewers\n#\n# See GOVERNANCE.md for maintainer versus reviewer roles\n#\n# MAINTAINERS (cncf-distribution-maintainers@lists.cncf.io)\n# GitHub ID, Name, Email address\n\"chrispat\",\"Chris Patterson\",\"chrispat@github.com\"\n\"clarkbw\",\"Bryan Clark\",\"clarkbw@github.com\"\n\"corhere\",\"Cory Snider\",\"csnider@mirantis.com\"\n\"deleteriousEffect\",\"Hayley Swimelar\",\"hswimelar@gitlab.com\"\n\"heww\",\"He Weiwei\",\"hweiwei@vmware.com\"\n\"joaodrp\",\"João Pereira\",\"jpereira@gitlab.com\"\n\"justincormack\",\"Justin Cormack\",\"justin.cormack@docker.com\"\n\"squizzi\",\"Kyle Squizzato\",\"ksquizzato@mirantis.com\"\n\"milosgajdos\",\"Milos Gajdos\",\"milosthegajdos@gmail.com\"\n\"sargun\",\"Sargun Dhillon\",\"sargun@sargun.me\"\n\"wy65701436\",\"Wang Yan\",\"wangyan@vmware.com\"\n\"stevelasker\",\"Steve Lasker\",\"steve.lasker@microsoft.com\"\n#\n# REVIEWERS\n# GitHub ID, Name, Email address\n\"dmcgowan\",\"Derek McGowan\",\"derek@mcgstyle.net\"\n\"stevvooe\",\"Stephen Day\",\"stevvooe@gmail.com\"\n\"thajeztah\",\"Sebastiaan van Stijn\",\"github@gone.nl\"\n\"DavidSpek\", \"David van der Spek\", \"vanderspek.david@gmail.com\"\n\"Jamstah\", \"James Hewitt\", \"james.hewitt@gmail.com\"\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/Makefile",
    "content": "# Project packages.\nPACKAGES=$(shell go list ./...)\n\n# Flags passed to `go test`\nBUILDFLAGS ?= \nTESTFLAGS ?= \n\n.PHONY: all build test coverage\n.DEFAULT: all\n\nall: build\n\nbuild: ## no binaries to build, so just check compilation suceeds\n\tgo build ${BUILDFLAGS} ./...\n\ntest: ## run tests\n\tgo test ${TESTFLAGS} ./...\n\ncoverage: ## generate coverprofiles from the unit tests\n\trm -f coverage.txt\n\tgo test ${TESTFLAGS} -cover -coverprofile=cover.out ./...\n\n.PHONY: help\nhelp:\n\t@awk 'BEGIN {FS = \":.*##\"; printf \"\\nUsage:\\n  make \\033[36m\\033[0m\\n\"} /^[a-zA-Z_\\/%-]+:.*?##/ { printf \"  \\033[36m%-27s\\033[0m %s\\n\", $$1, $$2 } /^##@/ { printf \"\\n\\033[1m%s\\033[0m\\n\", substr($$0, 5) } ' $(MAKEFILE_LIST)\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/README.md",
    "content": "# Distribution reference\n\nGo library to handle references to container images.\n\n<img src=\"/distribution-logo.svg\" width=\"200px\" />\n\n[![Build Status](https://github.com/distribution/reference/actions/workflows/test.yml/badge.svg?branch=main&event=push)](https://github.com/distribution/reference/actions?query=workflow%3ACI)\n[![GoDoc](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/distribution/reference)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)\n[![codecov](https://codecov.io/gh/distribution/reference/branch/main/graph/badge.svg)](https://codecov.io/gh/distribution/reference)\n[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Freference.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Freference?ref=badge_shield)\n\nThis repository contains a library for handling references to container images held in container registries. Please see [godoc](https://pkg.go.dev/github.com/distribution/reference) for details.\n\n## Contribution\n\nPlease see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute\nissues, fixes, and patches to this project.\n\n## Communication\n\nFor async communication and long running discussions please use issues and pull requests on the github repo.\nThis will be the best place to discuss design and implementation.\n\nFor sync communication we have a #distribution channel in the [CNCF Slack](https://slack.cncf.io/)\nthat everyone is welcome to join and chat about development.\n\n## Licenses\n\nThe distribution codebase is released under the [Apache 2.0 license](LICENSE).\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/SECURITY.md",
    "content": "# Security Policy\n\n## Reporting a Vulnerability\n\nThe maintainers take security seriously. If you discover a security issue, please bring it to their attention right away!\n\nPlease DO NOT file a public issue, instead send your report privately to cncf-distribution-security@lists.cncf.io.\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/helpers.go",
    "content": "package reference\n\nimport \"path\"\n\n// IsNameOnly returns true if reference only contains a repo name.\nfunc IsNameOnly(ref Named) bool {\n\tif _, ok := ref.(NamedTagged); ok {\n\t\treturn false\n\t}\n\tif _, ok := ref.(Canonical); ok {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// FamiliarName returns the familiar name string\n// for the given named, familiarizing if needed.\nfunc FamiliarName(ref Named) string {\n\tif nn, ok := ref.(normalizedNamed); ok {\n\t\treturn nn.Familiar().Name()\n\t}\n\treturn ref.Name()\n}\n\n// FamiliarString returns the familiar string representation\n// for the given reference, familiarizing if needed.\nfunc FamiliarString(ref Reference) string {\n\tif nn, ok := ref.(normalizedNamed); ok {\n\t\treturn nn.Familiar().String()\n\t}\n\treturn ref.String()\n}\n\n// FamiliarMatch reports whether ref matches the specified pattern.\n// See [path.Match] for supported patterns.\nfunc FamiliarMatch(pattern string, ref Reference) (bool, error) {\n\tmatched, err := path.Match(pattern, FamiliarString(ref))\n\tif namedRef, isNamed := ref.(Named); isNamed && !matched {\n\t\tmatched, _ = path.Match(pattern, FamiliarName(namedRef))\n\t}\n\treturn matched, err\n}\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/normalize.go",
    "content": "package reference\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/go-digest\"\n)\n\nconst (\n\t// legacyDefaultDomain is the legacy domain for Docker Hub (which was\n\t// originally named \"the Docker Index\"). This domain is still used for\n\t// authentication and image search, which were part of the \"v1\" Docker\n\t// registry specification.\n\t//\n\t// This domain will continue to be supported, but there are plans to consolidate\n\t// legacy domains to new \"canonical\" domains. Once those domains are decided\n\t// on, we must update the normalization functions, but preserve compatibility\n\t// with existing installs, clients, and user configuration.\n\tlegacyDefaultDomain = \"index.docker.io\"\n\n\t// defaultDomain is the default domain used for images on Docker Hub.\n\t// It is used to normalize \"familiar\" names to canonical names, for example,\n\t// to convert \"ubuntu\" to \"docker.io/library/ubuntu:latest\".\n\t//\n\t// Note that actual domain of Docker Hub's registry is registry-1.docker.io.\n\t// This domain will continue to be supported, but there are plans to consolidate\n\t// legacy domains to new \"canonical\" domains. Once those domains are decided\n\t// on, we must update the normalization functions, but preserve compatibility\n\t// with existing installs, clients, and user configuration.\n\tdefaultDomain = \"docker.io\"\n\n\t// officialRepoPrefix is the namespace used for official images on Docker Hub.\n\t// It is used to normalize \"familiar\" names to canonical names, for example,\n\t// to convert \"ubuntu\" to \"docker.io/library/ubuntu:latest\".\n\tofficialRepoPrefix = \"library/\"\n\n\t// defaultTag is the default tag if no tag is provided.\n\tdefaultTag = \"latest\"\n)\n\n// normalizedNamed represents a name which has been\n// normalized and has a familiar form. A familiar name\n// is what is used in Docker UI. An example normalized\n// name is \"docker.io/library/ubuntu\" and corresponding\n// familiar name of \"ubuntu\".\ntype normalizedNamed interface {\n\tNamed\n\tFamiliar() Named\n}\n\n// ParseNormalizedNamed parses a string into a named reference\n// transforming a familiar name from Docker UI to a fully\n// qualified reference. If the value may be an identifier\n// use ParseAnyReference.\nfunc ParseNormalizedNamed(s string) (Named, error) {\n\tif ok := anchoredIdentifierRegexp.MatchString(s); ok {\n\t\treturn nil, fmt.Errorf(\"invalid repository name (%s), cannot specify 64-byte hexadecimal strings\", s)\n\t}\n\tdomain, remainder := splitDockerDomain(s)\n\tvar remote string\n\tif tagSep := strings.IndexRune(remainder, ':'); tagSep > -1 {\n\t\tremote = remainder[:tagSep]\n\t} else {\n\t\tremote = remainder\n\t}\n\tif strings.ToLower(remote) != remote {\n\t\treturn nil, fmt.Errorf(\"invalid reference format: repository name (%s) must be lowercase\", remote)\n\t}\n\n\tref, err := Parse(domain + \"/\" + remainder)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tnamed, isNamed := ref.(Named)\n\tif !isNamed {\n\t\treturn nil, fmt.Errorf(\"reference %s has no name\", ref.String())\n\t}\n\treturn named, nil\n}\n\n// namedTaggedDigested is a reference that has both a tag and a digest.\ntype namedTaggedDigested interface {\n\tNamedTagged\n\tDigested\n}\n\n// ParseDockerRef normalizes the image reference following the docker convention,\n// which allows for references to contain both a tag and a digest. It returns a\n// reference that is either tagged or digested. For references containing both\n// a tag and a digest, it returns a digested reference. For example, the following\n// reference:\n//\n//\tdocker.io/library/busybox:latest@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa\n//\n// Is returned as a digested reference (with the \":latest\" tag removed):\n//\n//\tdocker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa\n//\n// References that are already \"tagged\" or \"digested\" are returned unmodified:\n//\n//\t// Already a digested reference\n//\tdocker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa\n//\n//\t// Already a named reference\n//\tdocker.io/library/busybox:latest\nfunc ParseDockerRef(ref string) (Named, error) {\n\tnamed, err := ParseNormalizedNamed(ref)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif canonical, ok := named.(namedTaggedDigested); ok {\n\t\t// The reference is both tagged and digested; only return digested.\n\t\tnewNamed, err := WithName(canonical.Name())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn WithDigest(newNamed, canonical.Digest())\n\t}\n\treturn TagNameOnly(named), nil\n}\n\n// splitDockerDomain splits a repository name to domain and remote-name.\n// If no valid domain is found, the default domain is used. Repository name\n// needs to be already validated before.\nfunc splitDockerDomain(name string) (domain, remoteName string) {\n\tmaybeDomain, maybeRemoteName, ok := strings.Cut(name, \"/\")\n\tif !ok {\n\t\t// Fast-path for single element (\"familiar\" names), such as \"ubuntu\"\n\t\t// or \"ubuntu:latest\". Familiar names must be handled separately, to\n\t\t// prevent them from being handled as \"hostname:port\".\n\t\t//\n\t\t// Canonicalize them as \"docker.io/library/name[:tag]\"\n\n\t\t// FIXME(thaJeztah): account for bare \"localhost\" or \"example.com\" names, which SHOULD be considered a domain.\n\t\treturn defaultDomain, officialRepoPrefix + name\n\t}\n\n\tswitch {\n\tcase maybeDomain == localhost:\n\t\t// localhost is a reserved namespace and always considered a domain.\n\t\tdomain, remoteName = maybeDomain, maybeRemoteName\n\tcase maybeDomain == legacyDefaultDomain:\n\t\t// canonicalize the Docker Hub and legacy \"Docker Index\" domains.\n\t\tdomain, remoteName = defaultDomain, maybeRemoteName\n\tcase strings.ContainsAny(maybeDomain, \".:\"):\n\t\t// Likely a domain or IP-address:\n\t\t//\n\t\t// - contains a \".\" (e.g., \"example.com\" or \"127.0.0.1\")\n\t\t// - contains a \":\" (e.g., \"example:5000\", \"::1\", or \"[::1]:5000\")\n\t\tdomain, remoteName = maybeDomain, maybeRemoteName\n\tcase strings.ToLower(maybeDomain) != maybeDomain:\n\t\t// Uppercase namespaces are not allowed, so if the first element\n\t\t// is not lowercase, we assume it to be a domain-name.\n\t\tdomain, remoteName = maybeDomain, maybeRemoteName\n\tdefault:\n\t\t// None of the above: it's not a domain, so use the default, and\n\t\t// use the name input the remote-name.\n\t\tdomain, remoteName = defaultDomain, name\n\t}\n\n\tif domain == defaultDomain && !strings.ContainsRune(remoteName, '/') {\n\t\t// Canonicalize \"familiar\" names, but only on Docker Hub, not\n\t\t// on other domains:\n\t\t//\n\t\t// \"docker.io/ubuntu[:tag]\" => \"docker.io/library/ubuntu[:tag]\"\n\t\tremoteName = officialRepoPrefix + remoteName\n\t}\n\n\treturn domain, remoteName\n}\n\n// familiarizeName returns a shortened version of the name familiar\n// to the Docker UI. Familiar names have the default domain\n// \"docker.io\" and \"library/\" repository prefix removed.\n// For example, \"docker.io/library/redis\" will have the familiar\n// name \"redis\" and \"docker.io/dmcgowan/myapp\" will be \"dmcgowan/myapp\".\n// Returns a familiarized named only reference.\nfunc familiarizeName(named namedRepository) repository {\n\trepo := repository{\n\t\tdomain: named.Domain(),\n\t\tpath:   named.Path(),\n\t}\n\n\tif repo.domain == defaultDomain {\n\t\trepo.domain = \"\"\n\t\t// Handle official repositories which have the pattern \"library/<official repo name>\"\n\t\tif strings.HasPrefix(repo.path, officialRepoPrefix) {\n\t\t\t// TODO(thaJeztah): this check may be too strict, as it assumes the\n\t\t\t//  \"library/\" namespace does not have nested namespaces. While this\n\t\t\t//  is true (currently), technically it would be possible for Docker\n\t\t\t//  Hub to use those (e.g. \"library/distros/ubuntu:latest\").\n\t\t\t//  See https://github.com/distribution/distribution/pull/3769#issuecomment-1302031785.\n\t\t\tif remainder := strings.TrimPrefix(repo.path, officialRepoPrefix); !strings.ContainsRune(remainder, '/') {\n\t\t\t\trepo.path = remainder\n\t\t\t}\n\t\t}\n\t}\n\treturn repo\n}\n\nfunc (r reference) Familiar() Named {\n\treturn reference{\n\t\tnamedRepository: familiarizeName(r.namedRepository),\n\t\ttag:             r.tag,\n\t\tdigest:          r.digest,\n\t}\n}\n\nfunc (r repository) Familiar() Named {\n\treturn familiarizeName(r)\n}\n\nfunc (t taggedReference) Familiar() Named {\n\treturn taggedReference{\n\t\tnamedRepository: familiarizeName(t.namedRepository),\n\t\ttag:             t.tag,\n\t}\n}\n\nfunc (c canonicalReference) Familiar() Named {\n\treturn canonicalReference{\n\t\tnamedRepository: familiarizeName(c.namedRepository),\n\t\tdigest:          c.digest,\n\t}\n}\n\n// TagNameOnly adds the default tag \"latest\" to a reference if it only has\n// a repo name.\nfunc TagNameOnly(ref Named) Named {\n\tif IsNameOnly(ref) {\n\t\tnamedTagged, err := WithTag(ref, defaultTag)\n\t\tif err != nil {\n\t\t\t// Default tag must be valid, to create a NamedTagged\n\t\t\t// type with non-validated input the WithTag function\n\t\t\t// should be used instead\n\t\t\tpanic(err)\n\t\t}\n\t\treturn namedTagged\n\t}\n\treturn ref\n}\n\n// ParseAnyReference parses a reference string as a possible identifier,\n// full digest, or familiar name.\nfunc ParseAnyReference(ref string) (Reference, error) {\n\tif ok := anchoredIdentifierRegexp.MatchString(ref); ok {\n\t\treturn digestReference(\"sha256:\" + ref), nil\n\t}\n\tif dgst, err := digest.Parse(ref); err == nil {\n\t\treturn digestReference(dgst), nil\n\t}\n\n\treturn ParseNormalizedNamed(ref)\n}\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/reference.go",
    "content": "// Package reference provides a general type to represent any way of referencing images within the registry.\n// Its main purpose is to abstract tags and digests (content-addressable hash).\n//\n// Grammar\n//\n//\treference                       := name [ \":\" tag ] [ \"@\" digest ]\n//\tname                            := [domain '/'] remote-name\n//\tdomain                          := host [':' port-number]\n//\thost                            := domain-name | IPv4address | \\[ IPv6address \\]\t; rfc3986 appendix-A\n//\tdomain-name                     := domain-component ['.' domain-component]*\n//\tdomain-component                := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/\n//\tport-number                     := /[0-9]+/\n//\tpath-component                  := alpha-numeric [separator alpha-numeric]*\n//\tpath (or \"remote-name\")         := path-component ['/' path-component]*\n//\talpha-numeric                   := /[a-z0-9]+/\n//\tseparator                       := /[_.]|__|[-]*/\n//\n//\ttag                             := /[\\w][\\w.-]{0,127}/\n//\n//\tdigest                          := digest-algorithm \":\" digest-hex\n//\tdigest-algorithm                := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ]*\n//\tdigest-algorithm-separator      := /[+.-_]/\n//\tdigest-algorithm-component      := /[A-Za-z][A-Za-z0-9]*/\n//\tdigest-hex                      := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value\n//\n//\tidentifier                      := /[a-f0-9]{64}/\npackage reference\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/opencontainers/go-digest\"\n)\n\nconst (\n\t// RepositoryNameTotalLengthMax is the maximum total number of characters in a repository name.\n\tRepositoryNameTotalLengthMax = 255\n\n\t// NameTotalLengthMax is the maximum total number of characters in a repository name.\n\t//\n\t// Deprecated: use [RepositoryNameTotalLengthMax] instead.\n\tNameTotalLengthMax = RepositoryNameTotalLengthMax\n)\n\nvar (\n\t// ErrReferenceInvalidFormat represents an error while trying to parse a string as a reference.\n\tErrReferenceInvalidFormat = errors.New(\"invalid reference format\")\n\n\t// ErrTagInvalidFormat represents an error while trying to parse a string as a tag.\n\tErrTagInvalidFormat = errors.New(\"invalid tag format\")\n\n\t// ErrDigestInvalidFormat represents an error while trying to parse a string as a tag.\n\tErrDigestInvalidFormat = errors.New(\"invalid digest format\")\n\n\t// ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters.\n\tErrNameContainsUppercase = errors.New(\"repository name must be lowercase\")\n\n\t// ErrNameEmpty is returned for empty, invalid repository names.\n\tErrNameEmpty = errors.New(\"repository name must have at least one component\")\n\n\t// ErrNameTooLong is returned when a repository name is longer than RepositoryNameTotalLengthMax.\n\tErrNameTooLong = fmt.Errorf(\"repository name must not be more than %v characters\", RepositoryNameTotalLengthMax)\n\n\t// ErrNameNotCanonical is returned when a name is not canonical.\n\tErrNameNotCanonical = errors.New(\"repository name must be canonical\")\n)\n\n// Reference is an opaque object reference identifier that may include\n// modifiers such as a hostname, name, tag, and digest.\ntype Reference interface {\n\t// String returns the full reference\n\tString() string\n}\n\n// Field provides a wrapper type for resolving correct reference types when\n// working with encoding.\ntype Field struct {\n\treference Reference\n}\n\n// AsField wraps a reference in a Field for encoding.\nfunc AsField(reference Reference) Field {\n\treturn Field{reference}\n}\n\n// Reference unwraps the reference type from the field to\n// return the Reference object. This object should be\n// of the appropriate type to further check for different\n// reference types.\nfunc (f Field) Reference() Reference {\n\treturn f.reference\n}\n\n// MarshalText serializes the field to byte text which\n// is the string of the reference.\nfunc (f Field) MarshalText() (p []byte, err error) {\n\treturn []byte(f.reference.String()), nil\n}\n\n// UnmarshalText parses text bytes by invoking the\n// reference parser to ensure the appropriately\n// typed reference object is wrapped by field.\nfunc (f *Field) UnmarshalText(p []byte) error {\n\tr, err := Parse(string(p))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tf.reference = r\n\treturn nil\n}\n\n// Named is an object with a full name\ntype Named interface {\n\tReference\n\tName() string\n}\n\n// Tagged is an object which has a tag\ntype Tagged interface {\n\tReference\n\tTag() string\n}\n\n// NamedTagged is an object including a name and tag.\ntype NamedTagged interface {\n\tNamed\n\tTag() string\n}\n\n// Digested is an object which has a digest\n// in which it can be referenced by\ntype Digested interface {\n\tReference\n\tDigest() digest.Digest\n}\n\n// Canonical reference is an object with a fully unique\n// name including a name with domain and digest\ntype Canonical interface {\n\tNamed\n\tDigest() digest.Digest\n}\n\n// namedRepository is a reference to a repository with a name.\n// A namedRepository has both domain and path components.\ntype namedRepository interface {\n\tNamed\n\tDomain() string\n\tPath() string\n}\n\n// Domain returns the domain part of the [Named] reference.\nfunc Domain(named Named) string {\n\tif r, ok := named.(namedRepository); ok {\n\t\treturn r.Domain()\n\t}\n\tdomain, _ := splitDomain(named.Name())\n\treturn domain\n}\n\n// Path returns the name without the domain part of the [Named] reference.\nfunc Path(named Named) (name string) {\n\tif r, ok := named.(namedRepository); ok {\n\t\treturn r.Path()\n\t}\n\t_, path := splitDomain(named.Name())\n\treturn path\n}\n\n// splitDomain splits a named reference into a hostname and path string.\n// If no valid hostname is found, the hostname is empty and the full value\n// is returned as name\nfunc splitDomain(name string) (string, string) {\n\tmatch := anchoredNameRegexp.FindStringSubmatch(name)\n\tif len(match) != 3 {\n\t\treturn \"\", name\n\t}\n\treturn match[1], match[2]\n}\n\n// Parse parses s and returns a syntactically valid Reference.\n// If an error was encountered it is returned, along with a nil Reference.\nfunc Parse(s string) (Reference, error) {\n\tmatches := ReferenceRegexp.FindStringSubmatch(s)\n\tif matches == nil {\n\t\tif s == \"\" {\n\t\t\treturn nil, ErrNameEmpty\n\t\t}\n\t\tif ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil {\n\t\t\treturn nil, ErrNameContainsUppercase\n\t\t}\n\t\treturn nil, ErrReferenceInvalidFormat\n\t}\n\n\tvar repo repository\n\n\tnameMatch := anchoredNameRegexp.FindStringSubmatch(matches[1])\n\tif len(nameMatch) == 3 {\n\t\trepo.domain = nameMatch[1]\n\t\trepo.path = nameMatch[2]\n\t} else {\n\t\trepo.domain = \"\"\n\t\trepo.path = matches[1]\n\t}\n\n\tif len(repo.path) > RepositoryNameTotalLengthMax {\n\t\treturn nil, ErrNameTooLong\n\t}\n\n\tref := reference{\n\t\tnamedRepository: repo,\n\t\ttag:             matches[2],\n\t}\n\tif matches[3] != \"\" {\n\t\tvar err error\n\t\tref.digest, err = digest.Parse(matches[3])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tr := getBestReferenceType(ref)\n\tif r == nil {\n\t\treturn nil, ErrNameEmpty\n\t}\n\n\treturn r, nil\n}\n\n// ParseNamed parses s and returns a syntactically valid reference implementing\n// the Named interface. The reference must have a name and be in the canonical\n// form, otherwise an error is returned.\n// If an error was encountered it is returned, along with a nil Reference.\nfunc ParseNamed(s string) (Named, error) {\n\tnamed, err := ParseNormalizedNamed(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif named.String() != s {\n\t\treturn nil, ErrNameNotCanonical\n\t}\n\treturn named, nil\n}\n\n// WithName returns a named object representing the given string. If the input\n// is invalid ErrReferenceInvalidFormat will be returned.\nfunc WithName(name string) (Named, error) {\n\tmatch := anchoredNameRegexp.FindStringSubmatch(name)\n\tif match == nil || len(match) != 3 {\n\t\treturn nil, ErrReferenceInvalidFormat\n\t}\n\n\tif len(match[2]) > RepositoryNameTotalLengthMax {\n\t\treturn nil, ErrNameTooLong\n\t}\n\n\treturn repository{\n\t\tdomain: match[1],\n\t\tpath:   match[2],\n\t}, nil\n}\n\n// WithTag combines the name from \"name\" and the tag from \"tag\" to form a\n// reference incorporating both the name and the tag.\nfunc WithTag(name Named, tag string) (NamedTagged, error) {\n\tif !anchoredTagRegexp.MatchString(tag) {\n\t\treturn nil, ErrTagInvalidFormat\n\t}\n\tvar repo repository\n\tif r, ok := name.(namedRepository); ok {\n\t\trepo.domain = r.Domain()\n\t\trepo.path = r.Path()\n\t} else {\n\t\trepo.path = name.Name()\n\t}\n\tif canonical, ok := name.(Canonical); ok {\n\t\treturn reference{\n\t\t\tnamedRepository: repo,\n\t\t\ttag:             tag,\n\t\t\tdigest:          canonical.Digest(),\n\t\t}, nil\n\t}\n\treturn taggedReference{\n\t\tnamedRepository: repo,\n\t\ttag:             tag,\n\t}, nil\n}\n\n// WithDigest combines the name from \"name\" and the digest from \"digest\" to form\n// a reference incorporating both the name and the digest.\nfunc WithDigest(name Named, digest digest.Digest) (Canonical, error) {\n\tif !anchoredDigestRegexp.MatchString(digest.String()) {\n\t\treturn nil, ErrDigestInvalidFormat\n\t}\n\tvar repo repository\n\tif r, ok := name.(namedRepository); ok {\n\t\trepo.domain = r.Domain()\n\t\trepo.path = r.Path()\n\t} else {\n\t\trepo.path = name.Name()\n\t}\n\tif tagged, ok := name.(Tagged); ok {\n\t\treturn reference{\n\t\t\tnamedRepository: repo,\n\t\t\ttag:             tagged.Tag(),\n\t\t\tdigest:          digest,\n\t\t}, nil\n\t}\n\treturn canonicalReference{\n\t\tnamedRepository: repo,\n\t\tdigest:          digest,\n\t}, nil\n}\n\n// TrimNamed removes any tag or digest from the named reference.\nfunc TrimNamed(ref Named) Named {\n\trepo := repository{}\n\tif r, ok := ref.(namedRepository); ok {\n\t\trepo.domain, repo.path = r.Domain(), r.Path()\n\t} else {\n\t\trepo.domain, repo.path = splitDomain(ref.Name())\n\t}\n\treturn repo\n}\n\nfunc getBestReferenceType(ref reference) Reference {\n\tif ref.Name() == \"\" {\n\t\t// Allow digest only references\n\t\tif ref.digest != \"\" {\n\t\t\treturn digestReference(ref.digest)\n\t\t}\n\t\treturn nil\n\t}\n\tif ref.tag == \"\" {\n\t\tif ref.digest != \"\" {\n\t\t\treturn canonicalReference{\n\t\t\t\tnamedRepository: ref.namedRepository,\n\t\t\t\tdigest:          ref.digest,\n\t\t\t}\n\t\t}\n\t\treturn ref.namedRepository\n\t}\n\tif ref.digest == \"\" {\n\t\treturn taggedReference{\n\t\t\tnamedRepository: ref.namedRepository,\n\t\t\ttag:             ref.tag,\n\t\t}\n\t}\n\n\treturn ref\n}\n\ntype reference struct {\n\tnamedRepository\n\ttag    string\n\tdigest digest.Digest\n}\n\nfunc (r reference) String() string {\n\treturn r.Name() + \":\" + r.tag + \"@\" + r.digest.String()\n}\n\nfunc (r reference) Tag() string {\n\treturn r.tag\n}\n\nfunc (r reference) Digest() digest.Digest {\n\treturn r.digest\n}\n\ntype repository struct {\n\tdomain string\n\tpath   string\n}\n\nfunc (r repository) String() string {\n\treturn r.Name()\n}\n\nfunc (r repository) Name() string {\n\tif r.domain == \"\" {\n\t\treturn r.path\n\t}\n\treturn r.domain + \"/\" + r.path\n}\n\nfunc (r repository) Domain() string {\n\treturn r.domain\n}\n\nfunc (r repository) Path() string {\n\treturn r.path\n}\n\ntype digestReference digest.Digest\n\nfunc (d digestReference) String() string {\n\treturn digest.Digest(d).String()\n}\n\nfunc (d digestReference) Digest() digest.Digest {\n\treturn digest.Digest(d)\n}\n\ntype taggedReference struct {\n\tnamedRepository\n\ttag string\n}\n\nfunc (t taggedReference) String() string {\n\treturn t.Name() + \":\" + t.tag\n}\n\nfunc (t taggedReference) Tag() string {\n\treturn t.tag\n}\n\ntype canonicalReference struct {\n\tnamedRepository\n\tdigest digest.Digest\n}\n\nfunc (c canonicalReference) String() string {\n\treturn c.Name() + \"@\" + c.digest.String()\n}\n\nfunc (c canonicalReference) Digest() digest.Digest {\n\treturn c.digest\n}\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/regexp.go",
    "content": "package reference\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n)\n\n// DigestRegexp matches well-formed digests, including algorithm (e.g. \"sha256:<encoded>\").\nvar DigestRegexp = regexp.MustCompile(digestPat)\n\n// DomainRegexp matches hostname or IP-addresses, optionally including a port\n// number. It defines the structure of potential domain components that may be\n// part of image names. This is purposely a subset of what is allowed by DNS to\n// ensure backwards compatibility with Docker image names. It may be a subset of\n// DNS domain name, an IPv4 address in decimal format, or an IPv6 address between\n// square brackets (excluding zone identifiers as defined by [RFC 6874] or special\n// addresses such as IPv4-Mapped).\n//\n// [RFC 6874]: https://www.rfc-editor.org/rfc/rfc6874.\nvar DomainRegexp = regexp.MustCompile(domainAndPort)\n\n// IdentifierRegexp is the format for string identifier used as a\n// content addressable identifier using sha256. These identifiers\n// are like digests without the algorithm, since sha256 is used.\nvar IdentifierRegexp = regexp.MustCompile(identifier)\n\n// NameRegexp is the format for the name component of references, including\n// an optional domain and port, but without tag or digest suffix.\nvar NameRegexp = regexp.MustCompile(namePat)\n\n// ReferenceRegexp is the full supported format of a reference. The regexp\n// is anchored and has capturing groups for name, tag, and digest\n// components.\nvar ReferenceRegexp = regexp.MustCompile(referencePat)\n\n// TagRegexp matches valid tag names. From [docker/docker:graph/tags.go].\n//\n// [docker/docker:graph/tags.go]: https://github.com/moby/moby/blob/v1.6.0/graph/tags.go#L26-L28\nvar TagRegexp = regexp.MustCompile(tag)\n\nconst (\n\t// alphanumeric defines the alphanumeric atom, typically a\n\t// component of names. This only allows lower case characters and digits.\n\talphanumeric = `[a-z0-9]+`\n\n\t// separator defines the separators allowed to be embedded in name\n\t// components. This allows one period, one or two underscore and multiple\n\t// dashes. Repeated dashes and underscores are intentionally treated\n\t// differently. In order to support valid hostnames as name components,\n\t// supporting repeated dash was added. Additionally double underscore is\n\t// now allowed as a separator to loosen the restriction for previously\n\t// supported names.\n\tseparator = `(?:[._]|__|[-]+)`\n\n\t// localhost is treated as a special value for domain-name. Any other\n\t// domain-name without a \".\" or a \":port\" are considered a path component.\n\tlocalhost = `localhost`\n\n\t// domainNameComponent restricts the registry domain component of a\n\t// repository name to start with a component as defined by DomainRegexp.\n\tdomainNameComponent = `(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])`\n\n\t// optionalPort matches an optional port-number including the port separator\n\t// (e.g. \":80\").\n\toptionalPort = `(?::[0-9]+)?`\n\n\t// tag matches valid tag names. From docker/docker:graph/tags.go.\n\ttag = `[\\w][\\w.-]{0,127}`\n\n\t// digestPat matches well-formed digests, including algorithm (e.g. \"sha256:<encoded>\").\n\t//\n\t// TODO(thaJeztah): this should follow the same rules as https://pkg.go.dev/github.com/opencontainers/go-digest@v1.0.0#DigestRegexp\n\t// so that go-digest defines the canonical format. Note that the go-digest is\n\t// more relaxed:\n\t//   - it allows multiple algorithms (e.g. \"sha256+b64:<encoded>\") to allow\n\t//     future expansion of supported algorithms.\n\t//   - it allows the \"<encoded>\" value to use urlsafe base64 encoding as defined\n\t//     in [rfc4648, section 5].\n\t//\n\t// [rfc4648, section 5]: https://www.rfc-editor.org/rfc/rfc4648#section-5.\n\tdigestPat = `[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}`\n\n\t// identifier is the format for a content addressable identifier using sha256.\n\t// These identifiers are like digests without the algorithm, since sha256 is used.\n\tidentifier = `([a-f0-9]{64})`\n\n\t// ipv6address are enclosed between square brackets and may be represented\n\t// in many ways, see rfc5952. Only IPv6 in compressed or uncompressed format\n\t// are allowed, IPv6 zone identifiers (rfc6874) or Special addresses such as\n\t// IPv4-Mapped are deliberately excluded.\n\tipv6address = `\\[(?:[a-fA-F0-9:]+)\\]`\n)\n\nvar (\n\t// domainName defines the structure of potential domain components\n\t// that may be part of image names. This is purposely a subset of what is\n\t// allowed by DNS to ensure backwards compatibility with Docker image\n\t// names. This includes IPv4 addresses on decimal format.\n\tdomainName = domainNameComponent + anyTimes(`\\.`+domainNameComponent)\n\n\t// host defines the structure of potential domains based on the URI\n\t// Host subcomponent on rfc3986. It may be a subset of DNS domain name,\n\t// or an IPv4 address in decimal format, or an IPv6 address between square\n\t// brackets (excluding zone identifiers as defined by rfc6874 or special\n\t// addresses such as IPv4-Mapped).\n\thost = `(?:` + domainName + `|` + ipv6address + `)`\n\n\t// allowed by the URI Host subcomponent on rfc3986 to ensure backwards\n\t// compatibility with Docker image names.\n\tdomainAndPort = host + optionalPort\n\n\t// anchoredTagRegexp matches valid tag names, anchored at the start and\n\t// end of the matched string.\n\tanchoredTagRegexp = regexp.MustCompile(anchored(tag))\n\n\t// anchoredDigestRegexp matches valid digests, anchored at the start and\n\t// end of the matched string.\n\tanchoredDigestRegexp = regexp.MustCompile(anchored(digestPat))\n\n\t// pathComponent restricts path-components to start with an alphanumeric\n\t// character, with following parts able to be separated by a separator\n\t// (one period, one or two underscore and multiple dashes).\n\tpathComponent = alphanumeric + anyTimes(separator+alphanumeric)\n\n\t// remoteName matches the remote-name of a repository. It consists of one\n\t// or more forward slash (/) delimited path-components:\n\t//\n\t//\tpathComponent[[/pathComponent] ...] // e.g., \"library/ubuntu\"\n\tremoteName = pathComponent + anyTimes(`/`+pathComponent)\n\tnamePat    = optional(domainAndPort+`/`) + remoteName\n\n\t// anchoredNameRegexp is used to parse a name value, capturing the\n\t// domain and trailing components.\n\tanchoredNameRegexp = regexp.MustCompile(anchored(optional(capture(domainAndPort), `/`), capture(remoteName)))\n\n\treferencePat = anchored(capture(namePat), optional(`:`, capture(tag)), optional(`@`, capture(digestPat)))\n\n\t// anchoredIdentifierRegexp is used to check or match an\n\t// identifier value, anchored at start and end of string.\n\tanchoredIdentifierRegexp = regexp.MustCompile(anchored(identifier))\n)\n\n// optional wraps the expression in a non-capturing group and makes the\n// production optional.\nfunc optional(res ...string) string {\n\treturn `(?:` + strings.Join(res, \"\") + `)?`\n}\n\n// anyTimes wraps the expression in a non-capturing group that can occur\n// any number of times.\nfunc anyTimes(res ...string) string {\n\treturn `(?:` + strings.Join(res, \"\") + `)*`\n}\n\n// capture wraps the expression in a capturing group.\nfunc capture(res ...string) string {\n\treturn `(` + strings.Join(res, \"\") + `)`\n}\n\n// anchored anchors the regular expression by adding start and end delimiters.\nfunc anchored(res ...string) string {\n\treturn `^` + strings.Join(res, \"\") + `$`\n}\n"
  },
  {
    "path": "vendor/github.com/distribution/reference/sort.go",
    "content": "/*\n   Copyright The containerd Authors.\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 reference\n\nimport (\n\t\"sort\"\n)\n\n// Sort sorts string references preferring higher information references.\n//\n// The precedence is as follows:\n//\n//  1. [Named] + [Tagged] + [Digested] (e.g., \"docker.io/library/busybox:latest@sha256:<digest>\")\n//  2. [Named] + [Tagged]              (e.g., \"docker.io/library/busybox:latest\")\n//  3. [Named] + [Digested]            (e.g., \"docker.io/library/busybo@sha256:<digest>\")\n//  4. [Named]                         (e.g., \"docker.io/library/busybox\")\n//  5. [Digested]                      (e.g., \"docker.io@sha256:<digest>\")\n//  6. Parse error\nfunc Sort(references []string) []string {\n\tvar prefs []Reference\n\tvar bad []string\n\n\tfor _, ref := range references {\n\t\tpref, err := ParseAnyReference(ref)\n\t\tif err != nil {\n\t\t\tbad = append(bad, ref)\n\t\t} else {\n\t\t\tprefs = append(prefs, pref)\n\t\t}\n\t}\n\tsort.Slice(prefs, func(a, b int) bool {\n\t\tar := refRank(prefs[a])\n\t\tbr := refRank(prefs[b])\n\t\tif ar == br {\n\t\t\treturn prefs[a].String() < prefs[b].String()\n\t\t}\n\t\treturn ar < br\n\t})\n\tsort.Strings(bad)\n\tvar refs []string\n\tfor _, pref := range prefs {\n\t\trefs = append(refs, pref.String())\n\t}\n\treturn append(refs, bad...)\n}\n\nfunc refRank(ref Reference) uint8 {\n\tif _, ok := ref.(Named); ok {\n\t\tif _, ok = ref.(Tagged); ok {\n\t\t\tif _, ok = ref.(Digested); ok {\n\t\t\t\treturn 1\n\t\t\t}\n\t\t\treturn 2\n\t\t}\n\t\tif _, ok = ref.(Digested); ok {\n\t\t\treturn 3\n\t\t}\n\t\treturn 4\n\t}\n\treturn 5\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/AUTHORS",
    "content": "# File @generated by hack/generate-authors.sh. DO NOT EDIT.\n# This file lists all contributors to the repository.\n# See hack/generate-authors.sh to make modifications.\n\n7sunarni <710720732@qq.com>\nAanand Prasad <aanand.prasad@gmail.com>\nAarni Koskela <akx@iki.fi>\nAaron Davidson <aaron@databricks.com>\nAaron Feng <aaron.feng@gmail.com>\nAaron Hnatiw <aaron@griddio.com>\nAaron Huslage <huslage@gmail.com>\nAaron L. Xu <liker.xu@foxmail.com>\nAaron Lehmann <alehmann@netflix.com>\nAaron Welch <welch@packet.net>\nAaron Yoshitake <airandfingers@gmail.com>\nAbdur Rehman <abdur_rehman@mentor.com>\nAbel Muiño <amuino@gmail.com>\nAbhijeet Kasurde <akasurde@redhat.com>\nAbhinandan Prativadi <aprativadi@gmail.com>\nAbhinav Ajgaonkar <abhinav316@gmail.com>\nAbhishek Chanda <abhishek.becs@gmail.com>\nAbhishek Sharma <abhishek@asharma.me>\nAbin Shahab <ashahab@altiscale.com>\nAbirdcfly <fp544037857@gmail.com>\nAda Mancini <ada@docker.com>\nAdam Avilla <aavilla@yp.com>\nAdam Dobrawy <naczelnik@jawnosc.tk>\nAdam Eijdenberg <adam.eijdenberg@gmail.com>\nAdam Kunk <adam.kunk@tiaa-cref.org>\nAdam Lamers <adam.lamers@wmsdev.pl>\nAdam Miller <admiller@redhat.com>\nAdam Mills <adam@armills.info>\nAdam Pointer <adam.pointer@skybettingandgaming.com>\nAdam Simon <adamsimon85100@gmail.com>\nAdam Singer <financeCoding@gmail.com>\nAdam Thornton <adam.thornton@maryville.com>\nAdam Walz <adam@adamwalz.net>\nAdam Williams <awilliams@mirantis.com>\nAdamKorcz <adam@adalogics.com>\nAddam Hardy <addam.hardy@gmail.com>\nAditi Rajagopal <arajagopal@us.ibm.com>\nAditya <aditya@netroy.in>\nAdnan Khan <adnkha@amazon.com>\nAdolfo Ochagavía <aochagavia92@gmail.com>\nAdria Casas <adriacasas88@gmail.com>\nAdrian Moisey <adrian@changeover.za.net>\nAdrian Mouat <adrian.mouat@gmail.com>\nAdrian Oprea <adrian@codesi.nz>\nAdrien Folie <folie.adrien@gmail.com>\nAdrien Gallouët <adrien@gallouet.fr>\nAhmed Kamal <email.ahmedkamal@googlemail.com>\nAhmet Alp Balkan <ahmetb@microsoft.com>\nAidan Feldman <aidan.feldman@gmail.com>\nAidan Hobson Sayers <aidanhs@cantab.net>\nAJ Bowen <aj@soulshake.net>\nAjey Charantimath <ajey.charantimath@gmail.com>\najneu <ajneu@users.noreply.github.com>\nAkash Gupta <akagup@microsoft.com>\nAkhil Mohan <akhil.mohan@mayadata.io>\nAkihiro Matsushima <amatsusbit@gmail.com>\nAkihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>\nAkim Demaille <akim.demaille@docker.com>\nAkira Koyasu <mail@akirakoyasu.net>\nAkshay Karle <akshay.a.karle@gmail.com>\nAkshay Moghe <akshay.moghe@gmail.com>\nAl Tobey <al@ooyala.com>\nalambike <alambike@gmail.com>\nAlan Hoyle <alan@alanhoyle.com>\nAlan Scherger <flyinprogrammer@gmail.com>\nAlan Thompson <cloojure@gmail.com>\nAlano Terblanche <alano.terblanche@docker.com>\nAlbert Callarisa <shark234@gmail.com>\nAlbert Zhang <zhgwenming@gmail.com>\nAlbin Kerouanton <albinker@gmail.com>\nAlec Benson <albenson@redhat.com>\nAlejandro González Hevia <alejandrgh11@gmail.com>\nAleksa Sarai <asarai@suse.de>\nAleksandr Chebotov <v-aleche@microsoft.com>\nAleksandrs Fadins <aleks@s-ko.net>\nAlena Prokharchyk <alena@rancher.com>\nAlessandro Boch <aboch@tetrationanalytics.com>\nAlessio Biancalana <dottorblaster@gmail.com>\nAlex Chan <alex@alexwlchan.net>\nAlex Chen <alexchenunix@gmail.com>\nAlex Coventry <alx@empirical.com>\nAlex Crawford <alex.crawford@coreos.com>\nAlex Ellis <alexellis2@gmail.com>\nAlex Gaynor <alex.gaynor@gmail.com>\nAlex Goodman <wagoodman@gmail.com>\nAlex Nordlund <alexander.nordlund@nasdaq.com>\nAlex Olshansky <i@creagenics.com>\nAlex Samorukov <samm@os2.kiev.ua>\nAlex Stockinger <alex@atomicjar.com>\nAlex Warhawk <ax.warhawk@gmail.com>\nAlexander Artemenko <svetlyak.40wt@gmail.com>\nAlexander Boyd <alex@opengroove.org>\nAlexander Larsson <alexl@redhat.com>\nAlexander Midlash <amidlash@docker.com>\nAlexander Morozov <lk4d4math@gmail.com>\nAlexander Polakov <plhk@sdf.org>\nAlexander Shopov <ash@kambanaria.org>\nAlexandre Beslic <alexandre.beslic@gmail.com>\nAlexandre Garnier <zigarn@gmail.com>\nAlexandre González <agonzalezro@gmail.com>\nAlexandre Jomin <alexandrejomin@gmail.com>\nAlexandru Sfirlogea <alexandru.sfirlogea@gmail.com>\nAlexei Margasov <alexei38@yandex.ru>\nAlexey Guskov <lexag@mail.ru>\nAlexey Kotlyarov <alexey@infoxchange.net.au>\nAlexey Shamrin <shamrin@gmail.com>\nAlexis Ries <ries.alexis@gmail.com>\nAlexis Thomas <fr.alexisthomas@gmail.com>\nAlfred Landrum <alfred.landrum@docker.com>\nAli Dehghani <ali.dehghani.g@gmail.com>\nAlicia Lauerman <alicia@eta.im>\nAlihan Demir <alihan_6153@hotmail.com>\nAllen Madsen <blatyo@gmail.com>\nAllen Sun <allensun.shl@alibaba-inc.com>\nalmoehi <almoehi@users.noreply.github.com>\nAlvaro Saurin <alvaro.saurin@gmail.com>\nAlvin Deng <alvin.q.deng@utexas.edu>\nAlvin Richards <alvin.richards@docker.com>\namangoel <amangoel@gmail.com>\nAmen Belayneh <amenbelayneh@gmail.com>\nAmeya Gawde <agawde@mirantis.com>\nAmir Goldstein <amir73il@aquasec.com>\nAmirBuddy <badinlu.amirhossein@gmail.com>\nAmit Bakshi <ambakshi@gmail.com>\nAmit Krishnan <amit.krishnan@oracle.com>\nAmit Shukla <amit.shukla@docker.com>\nAmr Gawish <amr.gawish@gmail.com>\nAmy Lindburg <amy.lindburg@docker.com>\nAnand Patil <anand.prabhakar.patil@gmail.com>\nAnandkumarPatel <anandkumarpatel@gmail.com>\nAnatoly Borodin <anatoly.borodin@gmail.com>\nAnca Iordache <anca.iordache@docker.com>\nAnchal Agrawal <aagrawa4@illinois.edu>\nAnda Xu <anda.xu@docker.com>\nAnders Janmyr <anders@janmyr.com>\nAndre Dublin <81dublin@gmail.com>\nAndre Granovsky <robotciti@live.com>\nAndrea Denisse Gómez <crypto.andrea@protonmail.ch>\nAndrea Luzzardi <aluzzardi@gmail.com>\nAndrea Turli <andrea.turli@gmail.com>\nAndreas Elvers <andreas@work.de>\nAndreas Köhler <andi5.py@gmx.net>\nAndreas Savvides <andreas@editd.com>\nAndreas Tiefenthaler <at@an-ti.eu>\nAndrei Gherzan <andrei@resin.io>\nAndrei Ushakov <aushakov@netflix.com>\nAndrei Vagin <avagin@gmail.com>\nAndrew Baxter <423qpsxzhh8k3h@s.rendaw.me>\nAndrew C. Bodine <acbodine@us.ibm.com>\nAndrew Clay Shafer <andrewcshafer@gmail.com>\nAndrew Duckworth <grillopress@gmail.com>\nAndrew France <andrew@avito.co.uk>\nAndrew Gerrand <adg@golang.org>\nAndrew Guenther <guenther.andrew.j@gmail.com>\nAndrew He <he.andrew.mail@gmail.com>\nAndrew Hsu <andrewhsu@docker.com>\nAndrew Kim <taeyeonkim90@gmail.com>\nAndrew Kuklewicz <kookster@gmail.com>\nAndrew Macgregor <andrew.macgregor@agworld.com.au>\nAndrew Macpherson <hopscotch23@gmail.com>\nAndrew Martin <sublimino@gmail.com>\nAndrew McDonnell <bugs@andrewmcdonnell.net>\nAndrew Munsell <andrew@wizardapps.net>\nAndrew Pennebaker <andrew.pennebaker@gmail.com>\nAndrew Po <absourd.noise@gmail.com>\nAndrew Weiss <andrew.weiss@docker.com>\nAndrew Williams <williams.andrew@gmail.com>\nAndrews Medina <andrewsmedina@gmail.com>\nAndrey Kolomentsev <andrey.kolomentsev@docker.com>\nAndrey Petrov <andrey.petrov@shazow.net>\nAndrey Stolbovsky <andrey.stolbovsky@gmail.com>\nAndré Martins <aanm90@gmail.com>\nAndrés Maldonado <maldonado@codelutin.com>\nAndy Chambers <anchambers@paypal.com>\nandy diller <dillera@gmail.com>\nAndy Goldstein <agoldste@redhat.com>\nAndy Kipp <andy@rstudio.com>\nAndy Lindeman <alindeman@salesforce.com>\nAndy Rothfusz <github@developersupport.net>\nAndy Smith <github@anarkystic.com>\nAndy Wilson <wilson.andrew.j+github@gmail.com>\nAndy Zhang <andy.zhangtao@hotmail.com>\nAneesh Kulkarni <askthefactorcamera@gmail.com>\nAnes Hasicic <anes.hasicic@gmail.com>\nAngel Velazquez <angelcar@amazon.com>\nAnil Belur <askb23@gmail.com>\nAnil Madhavapeddy <anil@recoil.org>\nAnkit Jain <ajatkj@yahoo.co.in>\nAnkush Agarwal <ankushagarwal11@gmail.com>\nAnonmily <michelle@michelleliu.io>\nAnran Qiao <anran.qiao@daocloud.io>\nAnshul Pundir <anshul.pundir@docker.com>\nAnthon van der Neut <anthon@mnt.org>\nAnthony Baire <Anthony.Baire@irisa.fr>\nAnthony Bishopric <git@anthonybishopric.com>\nAnthony Dahanne <anthony.dahanne@gmail.com>\nAnthony Sottile <asottile@umich.edu>\nAnton Löfgren <anton.lofgren@gmail.com>\nAnton Nikitin <anton.k.nikitin@gmail.com>\nAnton Polonskiy <anton.polonskiy@gmail.com>\nAnton Tiurin <noxiouz@yandex.ru>\nAntonio Aguilar <antonio@zoftko.com>\nAntonio Murdaca <antonio.murdaca@gmail.com>\nAntonis Kalipetis <akalipetis@gmail.com>\nAntony Messerli <amesserl@rackspace.com>\nAnuj Bahuguna <anujbahuguna.dev@gmail.com>\nAnuj Varma <anujvarma@thumbtack.com>\nAnusha Ragunathan <anusha.ragunathan@docker.com>\nAnyu Wang <wanganyu@outlook.com>\napocas <petermdias@gmail.com>\nArash Deshmeh <adeshmeh@ca.ibm.com>\narcosx <arcosx@outlook.com>\nArikaChen <eaglesora@gmail.com>\nArko Dasgupta <arko@tetrate.io>\nArnaud Lefebvre <a.lefebvre@outlook.fr>\nArnaud Porterie <icecrime@gmail.com>\nArnaud Rebillout <arnaud.rebillout@collabora.com>\nArtem Khramov <akhramov@pm.me>\nArthur Barr <arthur.barr@uk.ibm.com>\nArthur Gautier <baloo@gandi.net>\nArtur Meyster <arthurfbi@yahoo.com>\nArun Gupta <arun.gupta@gmail.com>\nAsad Saeeduddin <masaeedu@gmail.com>\nAsbjørn Enge <asbjorn@hanafjedle.net>\nAshly Mathew <ashly.mathew@sap.com>\nAustin Vazquez <macedonv@amazon.com>\naveragehuman <averagehuman@users.noreply.github.com>\nAvi Das <andas222@gmail.com>\nAvi Kivity <avi@scylladb.com>\nAvi Miller <avi.miller@oracle.com>\nAvi Vaid <avaid1996@gmail.com>\nAzat Khuyiyakhmetov <shadow_uz@mail.ru>\nBao Yonglei <baoyonglei@huawei.com>\nBardia Keyoumarsi <bkeyouma@ucsc.edu>\nBarnaby Gray <barnaby@pickle.me.uk>\nBarry Allard <barry.allard@gmail.com>\nBartłomiej Piotrowski <b@bpiotrowski.pl>\nBastiaan Bakker <bbakker@xebia.com>\nBastien Pascard <bpascard@hotmail.com>\nbdevloed <boris.de.vloed@gmail.com>\nBearice Ren <bearice@gmail.com>\nBen Bonnefoy <frenchben@docker.com>\nBen Firshman <ben@firshman.co.uk>\nBen Golub <ben.golub@dotcloud.com>\nBen Gould <ben@bengould.co.uk>\nBen Hall <ben@benhall.me.uk>\nBen Langfeld <ben@langfeld.me>\nBen Lovy <ben@deciduously.com>\nBen Sargent <ben@brokendigits.com>\nBen Severson <BenSeverson@users.noreply.github.com>\nBen Toews <mastahyeti@gmail.com>\nBen Wiklund <ben@daisyowl.com>\nBenjamin Atkin <ben@benatkin.com>\nBenjamin Baker <Benjamin.baker@utexas.edu>\nBenjamin Boudreau <boudreau.benjamin@gmail.com>\nBenjamin Böhmke <benjamin@boehmke.net>\nBenjamin Wang <wachao@vmware.com>\nBenjamin Yolken <yolken@stripe.com>\nBenny Ng <benny.tpng@gmail.com>\nBenoit Chesneau <bchesneau@gmail.com>\nBernerd Schaefer <bj.schaefer@gmail.com>\nBernhard M. Wiedemann <bwiedemann@suse.de>\nBert Goethals <bert@bertg.be>\nBertrand Roussel <broussel@sierrawireless.com>\nBevisy Zhang <binbin36520@gmail.com>\nBharath Thiruveedula <bharath_ves@hotmail.com>\nBhiraj Butala <abhiraj.butala@gmail.com>\nBhumika Bayani <bhumikabayani@gmail.com>\nBilal Amarni <bilal.amarni@gmail.com>\nBill Wang <ozbillwang@gmail.com>\nBilly Ridgway <wrridgwa@us.ibm.com>\nBily Zhang <xcoder@tenxcloud.com>\nBin Liu <liubin0329@gmail.com>\nBingshen Wang <bingshen.wbs@alibaba-inc.com>\nBjorn Neergaard <bjorn@neersighted.com>\nBlake Geno <blakegeno@gmail.com>\nBoaz Shuster <ripcurld.github@gmail.com>\nbobby abbott <ttobbaybbob@gmail.com>\nBojun Zhu <bojun.zhu@foxmail.com>\nBoqin Qin <bobbqqin@gmail.com>\nBoris Pruessmann <boris@pruessmann.org>\nBoshi Lian <farmer1992@gmail.com>\nBouke Haarsma <bouke@webatoom.nl>\nBoyd Hemphill <boyd@feedmagnet.com>\nboynux <boynux@gmail.com>\nBradley Cicenas <bradley.cicenas@gmail.com>\nBradley Wright <brad@intranation.com>\nBrandon Liu <bdon@bdon.org>\nBrandon Philips <brandon.philips@coreos.com>\nBrandon Rhodes <brandon@rhodesmill.org>\nBrendan Dixon <brendand@microsoft.com>\nBrennan Kinney <5098581+polarathene@users.noreply.github.com>\nBrent Salisbury <brent.salisbury@docker.com>\nBrett Higgins <brhiggins@arbor.net>\nBrett Kochendorfer <brett.kochendorfer@gmail.com>\nBrett Milford <brettmilford@gmail.com>\nBrett Randall <javabrett@gmail.com>\nBrian (bex) Exelbierd <bexelbie@redhat.com>\nBrian Bland <brian.bland@docker.com>\nBrian DeHamer <brian@dehamer.com>\nBrian Dorsey <brian@dorseys.org>\nBrian Flad <bflad417@gmail.com>\nBrian Goff <cpuguy83@gmail.com>\nBrian McCallister <brianm@skife.org>\nBrian Olsen <brian@maven-group.org>\nBrian Schwind <brianmschwind@gmail.com>\nBrian Shumate <brian@couchbase.com>\nBrian Torres-Gil <brian@dralth.com>\nBrian Trump <btrump@yelp.com>\nBrice Jaglin <bjaglin@teads.tv>\nBriehan Lombaard <briehan.lombaard@gmail.com>\nBrielle Broder <bbroder@google.com>\nBruno Bigras <bigras.bruno@gmail.com>\nBruno Binet <bruno.binet@gmail.com>\nBruno Gazzera <bgazzera@paginar.com>\nBruno Renié <brutasse@gmail.com>\nBruno Tavares <btavare@thoughtworks.com>\nBryan Bess <squarejaw@bsbess.com>\nBryan Boreham <bjboreham@gmail.com>\nBryan Matsuo <bryan.matsuo@gmail.com>\nBryan Murphy <bmurphy1976@gmail.com>\nBurke Libbey <burke@libbey.me>\nByung Kang <byung.kang.ctr@amrdec.army.mil>\nCaleb Spare <cespare@gmail.com>\nCalen Pennington <cale@edx.org>\nCalvin Liu <flycalvin@qq.com>\nCameron Boehmer <cameron.boehmer@gmail.com>\nCameron Sparr <gh@sparr.email>\nCameron Spear <cameronspear@gmail.com>\nCampbell Allen <campbell.allen@gmail.com>\nCandid Dauth <cdauth@cdauth.eu>\nCao Weiwei <cao.weiwei30@zte.com.cn>\nCarl Henrik Lunde <chlunde@ping.uio.no>\nCarl Loa Odin <carlodin@gmail.com>\nCarl X. Su <bcbcarl@gmail.com>\nCarlo Mion <mion00@gmail.com>\nCarlos Alexandro Becker <caarlos0@gmail.com>\nCarlos de Paula <me@carlosedp.com>\nCarlos Sanchez <carlos@apache.org>\nCarol Fager-Higgins <carol.fager-higgins@docker.com>\nCary <caryhartline@users.noreply.github.com>\nCasey Bisson <casey.bisson@joyent.com>\nCatalin Pirvu <pirvu.catalin94@gmail.com>\nCe Gao <ce.gao@outlook.com>\nCedric Davies <cedricda@microsoft.com>\nCezar Sa Espinola <cezarsa@gmail.com>\nChad Swenson <chadswen@gmail.com>\nChance Zibolski <chance.zibolski@gmail.com>\nChander Govindarajan <chandergovind@gmail.com>\nChanhun Jeong <keyolk@gmail.com>\nChao Wang <wangchao.fnst@cn.fujitsu.com>\nCharity Kathure <ckathure@microsoft.com>\nCharles Chan <charleswhchan@users.noreply.github.com>\nCharles Hooper <charles.hooper@dotcloud.com>\nCharles Law <claw@conduce.com>\nCharles Lindsay <chaz@chazomatic.us>\nCharles Merriam <charles.merriam@gmail.com>\nCharles Sarrazin <charles@sarraz.in>\nCharles Smith <charles.smith@docker.com>\nCharlie Drage <charlie@charliedrage.com>\nCharlie Lewis <charliel@lab41.org>\nChase Bolt <chase.bolt@gmail.com>\nChaYoung You <yousbe@gmail.com>\nChee Hau Lim <ch33hau@gmail.com>\nChen Chao <cc272309126@gmail.com>\nChen Chuanliang <chen.chuanliang@zte.com.cn>\nChen Hanxiao <chenhanxiao@cn.fujitsu.com>\nChen Min <chenmin46@huawei.com>\nChen Mingjie <chenmingjie0828@163.com>\nChen Qiu <cheney-90@hotmail.com>\nCheng-mean Liu <soccerl@microsoft.com>\nChengfei Shang <cfshang@alauda.io>\nChengguang Xu <cgxu519@gmx.com>\nChentianze <cmoman@126.com>\nChenyang Yan <memory.yancy@gmail.com>\nchenyuzhu <chenyuzhi@oschina.cn>\nChetan Birajdar <birajdar.chetan@gmail.com>\nChewey <prosto-chewey@users.noreply.github.com>\nChia-liang Kao <clkao@clkao.org>\nChiranjeevi Tirunagari <vchiranjeeviak.tirunagari@gmail.com>\nchli <chli@freewheel.tv>\nCholerae Hu <choleraehyq@gmail.com>\nChris Alfonso <calfonso@redhat.com>\nChris Armstrong <chris@opdemand.com>\nChris Dias <cdias@microsoft.com>\nChris Dituri <csdituri@gmail.com>\nChris Fordham <chris@fordham-nagy.id.au>\nChris Gavin <chris@chrisgavin.me>\nChris Gibson <chris@chrisg.io>\nChris Khoo <chris.khoo@gmail.com>\nChris Kreussling (Flatbush Gardener) <xrisfg@gmail.com>\nChris McKinnel <chris.mckinnel@tangentlabs.co.uk>\nChris McKinnel <chrismckinnel@gmail.com>\nChris Price <cprice@mirantis.com>\nChris Seto <chriskseto@gmail.com>\nChris Snow <chsnow123@gmail.com>\nChris St. Pierre <chris.a.st.pierre@gmail.com>\nChris Stivers <chris@stivers.us>\nChris Swan <chris.swan@iee.org>\nChris Telfer <ctelfer@docker.com>\nChris Wahl <github@wahlnetwork.com>\nChris Weyl <cweyl@alumni.drew.edu>\nChris White <me@cwprogram.com>\nChristian Becker <christian.becker@sixt.com>\nChristian Berendt <berendt@b1-systems.de>\nChristian Brauner <christian.brauner@ubuntu.com>\nChristian Böhme <developement@boehme3d.de>\nChristian Muehlhaeuser <muesli@gmail.com>\nChristian Persson <saser@live.se>\nChristian Rotzoll <ch.rotzoll@gmail.com>\nChristian Simon <simon@swine.de>\nChristian Stefanescu <st.chris@gmail.com>\nChristoph Ziebuhr <chris@codefrickler.de>\nChristophe Mehay <cmehay@online.net>\nChristophe Troestler <christophe.Troestler@umons.ac.be>\nChristophe Vidal <kriss@krizalys.com>\nChristopher Biscardi <biscarch@sketcht.com>\nChristopher Crone <christopher.crone@docker.com>\nChristopher Currie <codemonkey+github@gmail.com>\nChristopher Jones <tophj@linux.vnet.ibm.com>\nChristopher Latham <sudosurootdev@gmail.com>\nChristopher Petito <chrisjpetito@gmail.com>\nChristopher Rigor <crigor@gmail.com>\nChristy Norman <christy@linux.vnet.ibm.com>\nChun Chen <ramichen@tencent.com>\nCiro S. Costa <ciro.costa@usp.br>\nClayton Coleman <ccoleman@redhat.com>\nClint Armstrong <clint@clintarmstrong.net>\nClinton Kitson <clintonskitson@gmail.com>\nclubby789 <jamie@hill-daniel.co.uk>\nCody Roseborough <crrosebo@amazon.com>\nCoenraad Loubser <coenraad@wish.org.za>\nColin Dunklau <colin.dunklau@gmail.com>\nColin Hebert <hebert.colin@gmail.com>\nColin Panisset <github@clabber.com>\nColin Rice <colin@daedrum.net>\nColin Walters <walters@verbum.org>\nCollin Guarino <collin.guarino@gmail.com>\nColm Hally <colmhally@gmail.com>\ncompanycy <companycy@gmail.com>\nConor Evans <coevans@tcd.ie>\nCorbin Coleman <corbin.coleman@docker.com>\nCorey Farrell <git@cfware.com>\nCory Forsyth <cory.forsyth@gmail.com>\nCory Snider <csnider@mirantis.com>\ncressie176 <github@stephen-cresswell.net>\nCristian Ariza <dev@cristianrz.com>\nCristian Staretu <cristian.staretu@gmail.com>\ncristiano balducci <cristiano.balducci@gmail.com>\nCristina Yenyxe Gonzalez Garcia <cristina.yenyxe@gmail.com>\nCruceru Calin-Cristian <crucerucalincristian@gmail.com>\ncui fliter <imcusg@gmail.com>\nCUI Wei <ghostplant@qq.com>\nCuong Manh Le <cuong.manhle.vn@gmail.com>\nCyprian Gracz <cyprian.gracz@micro-jumbo.eu>\nCyril F <cyrilf7x@gmail.com>\nDa McGrady <dabkb@aol.com>\nDaan van Berkel <daan.v.berkel.1980@gmail.com>\nDaehyeok Mun <daehyeok@gmail.com>\nDafydd Crosby <dtcrsby@gmail.com>\ndalanlan <dalanlan925@gmail.com>\nDamian Smyth <damian@dsau.co>\nDamien Nadé <github@livna.org>\nDamien Nozay <damien.nozay@gmail.com>\nDamjan Georgievski <gdamjan@gmail.com>\nDan Anolik <dan@anolik.net>\nDan Buch <d.buch@modcloth.com>\nDan Cotora <dan@bluevision.ro>\nDan Feldman <danf@jfrog.com>\nDan Griffin <dgriffin@peer1.com>\nDan Hirsch <thequux@upstandinghackers.com>\nDan Keder <dan.keder@gmail.com>\nDan Levy <dan@danlevy.net>\nDan McPherson <dmcphers@redhat.com>\nDan Plamadeala <cornul11@gmail.com>\nDan Stine <sw@stinemail.com>\nDan Williams <me@deedubs.com>\nDani Hodovic <dani.hodovic@gmail.com>\nDani Louca <dani.louca@docker.com>\nDaniel Antlinger <d.antlinger@gmx.at>\nDaniel Black <daniel@linux.ibm.com>\nDaniel Dao <dqminh@cloudflare.com>\nDaniel Exner <dex@dragonslave.de>\nDaniel Farrell <dfarrell@redhat.com>\nDaniel Garcia <daniel@danielgarcia.info>\nDaniel Gasienica <daniel@gasienica.ch>\nDaniel Grunwell <mwgrunny@gmail.com>\nDaniel Guns <danbguns@gmail.com>\nDaniel Helfand <helfand.4@gmail.com>\nDaniel Hiltgen <daniel.hiltgen@docker.com>\nDaniel J Walsh <dwalsh@redhat.com>\nDaniel Menet <membership@sontags.ch>\nDaniel Mizyrycki <daniel.mizyrycki@dotcloud.com>\nDaniel Nephin <dnephin@docker.com>\nDaniel Norberg <dano@spotify.com>\nDaniel Nordberg <dnordberg@gmail.com>\nDaniel P. Berrangé <berrange@redhat.com>\nDaniel Robinson <gottagetmac@gmail.com>\nDaniel S <dan.streby@gmail.com>\nDaniel Sweet <danieljsweet@icloud.com>\nDaniel Von Fange <daniel@leancoder.com>\nDaniel Watkins <daniel@daniel-watkins.co.uk>\nDaniel X Moore <yahivin@gmail.com>\nDaniel YC Lin <dlin.tw@gmail.com>\nDaniel Zhang <jmzwcn@gmail.com>\nDaniele Rondina <geaaru@sabayonlinux.org>\nDanny Berger <dpb587@gmail.com>\nDanny Milosavljevic <dannym@scratchpost.org>\nDanny Yates <danny@codeaholics.org>\nDanyal Khaliq <danyal.khaliq@tenpearls.com>\nDarren Coxall <darren@darrencoxall.com>\nDarren Shepherd <darren.s.shepherd@gmail.com>\nDarren Stahl <darst@microsoft.com>\nDattatraya Kumbhar <dattatraya.kumbhar@gslab.com>\nDavanum Srinivas <davanum@gmail.com>\nDave Barboza <dbarboza@datto.com>\nDave Goodchild <buddhamagnet@gmail.com>\nDave Henderson <dhenderson@gmail.com>\nDave MacDonald <mindlapse@gmail.com>\nDave Tucker <dt@docker.com>\nDavid Anderson <dave@natulte.net>\nDavid Bellotti <dbellotti@pivotal.io>\nDavid Calavera <david.calavera@gmail.com>\nDavid Chung <david.chung@docker.com>\nDavid Corking <dmc-source@dcorking.com>\nDavid Cramer <davcrame@cisco.com>\nDavid Currie <david_currie@uk.ibm.com>\nDavid Davis <daviddavis@redhat.com>\nDavid Dooling <dooling@gmail.com>\nDavid Gageot <david@gageot.net>\nDavid Gebler <davidgebler@gmail.com>\nDavid Glasser <glasser@davidglasser.net>\nDavid Karlsson <35727626+dvdksn@users.noreply.github.com>\nDavid Lawrence <david.lawrence@docker.com>\nDavid Lechner <david@lechnology.com>\nDavid M. Karr <davidmichaelkarr@gmail.com>\nDavid Mackey <tdmackey@booleanhaiku.com>\nDavid Manouchehri <manouchehri@riseup.net>\nDavid Mat <david@davidmat.com>\nDavid Mcanulty <github@hellspark.com>\nDavid McKay <david@rawkode.com>\nDavid O'Rourke <david@scalefactory.com>\nDavid P Hilton <david.hilton.p@gmail.com>\nDavid Pelaez <pelaez89@gmail.com>\nDavid R. Jenni <david.r.jenni@gmail.com>\nDavid Röthlisberger <david@rothlis.net>\nDavid Sheets <dsheets@docker.com>\nDavid Sissitka <me@dsissitka.com>\nDavid Trott <github@davidtrott.com>\nDavid Wang <00107082@163.com>\nDavid Williamson <david.williamson@docker.com>\nDavid Xia <dxia@spotify.com>\nDavid Young <yangboh@cn.ibm.com>\nDavide Ceretti <davide.ceretti@hogarthww.com>\nDawn Chen <dawnchen@google.com>\ndbdd <wangtong2712@gmail.com>\ndcylabs <dcylabs@gmail.com>\nDebayan De <debayande@users.noreply.github.com>\nDeborah Gertrude Digges <deborah.gertrude.digges@gmail.com>\ndeed02392 <georgehafiz@gmail.com>\nDeep Debroy <ddebroy@docker.com>\nDeng Guangxing <dengguangxing@huawei.com>\nDeni Bertovic <deni@kset.org>\nDenis Defreyne <denis@soundcloud.com>\nDenis Gladkikh <denis@gladkikh.email>\nDenis Ollier <larchunix@users.noreply.github.com>\nDennis Chen <barracks510@gmail.com>\nDennis Chen <dennis.chen@arm.com>\nDennis Docter <dennis@d23.nl>\nDerek <crq@kernel.org>\nDerek <crquan@gmail.com>\nDerek Ch <denc716@gmail.com>\nDerek McGowan <derek@mcg.dev>\nDeric Crago <deric.crago@gmail.com>\nDeshi Xiao <dxiao@redhat.com>\nDevon Estes <devon.estes@klarna.com>\nDevvyn Murphy <devvyn@devvyn.com>\nDharmit Shah <shahdharmit@gmail.com>\nDhawal Yogesh Bhanushali <dbhanushali@vmware.com>\nDhilip Kumars <dhilip.kumar.s@huawei.com>\nDiego Romero <idiegoromero@gmail.com>\nDiego Siqueira <dieg0@live.com>\nDieter Reuter <dieter.reuter@me.com>\nDillon Dixon <dillondixon@gmail.com>\nDima Stopel <dima@twistlock.com>\nDimitri John Ledkov <dimitri.j.ledkov@intel.com>\nDimitris Mandalidis <dimitris.mandalidis@gmail.com>\nDimitris Rozakis <dimrozakis@gmail.com>\nDimitry Andric <d.andric@activevideo.com>\nDinesh Subhraveti <dineshs@altiscale.com>\nDing Fei <dingfei@stars.org.cn>\ndingwei <dingwei@cmss.chinamobile.com>\nDiogo Monica <diogo@docker.com>\nDiuDiugirl <sophia.wang@pku.edu.cn>\nDjibril Koné <kone.djibril@gmail.com>\nDjordje Lukic <djordje.lukic@docker.com>\ndkumor <daniel@dkumor.com>\nDmitri Logvinenko <dmitri.logvinenko@gmail.com>\nDmitri Shuralyov <shurcooL@gmail.com>\nDmitry Demeshchuk <demeshchuk@gmail.com>\nDmitry Gusev <dmitry.gusev@gmail.com>\nDmitry Kononenko <d@dm42.ru>\nDmitry Sharshakov <d3dx12.xx@gmail.com>\nDmitry Shyshkin <dmitry@shyshkin.org.ua>\nDmitry Smirnov <onlyjob@member.fsf.org>\nDmitry V. Krivenok <krivenok.dmitry@gmail.com>\nDmitry Vorobev <dimahabr@gmail.com>\nDmytro Iakovliev <dmytro.iakovliev@zodiacsystems.com>\ndocker-unir[bot] <docker-unir[bot]@users.noreply.github.com>\nDolph Mathews <dolph.mathews@gmail.com>\nDominic Tubach <dominic.tubach@to.com>\nDominic Yin <yindongchao@inspur.com>\nDominik Dingel <dingel@linux.vnet.ibm.com>\nDominik Finkbeiner <finkes93@gmail.com>\nDominik Honnef <dominik@honnef.co>\nDon Kirkby <donkirkby@users.noreply.github.com>\nDon Kjer <don.kjer@gmail.com>\nDon Spaulding <donspauldingii@gmail.com>\nDonald Huang <don.hcd@gmail.com>\nDong Chen <dongluo.chen@docker.com>\nDonghwa Kim <shanytt@gmail.com>\nDonovan Jones <git@gamma.net.nz>\nDorin Geman <dorin.geman@docker.com>\nDoron Podoleanu <doronp@il.ibm.com>\nDoug Davis <dug@us.ibm.com>\nDoug MacEachern <dougm@vmware.com>\nDoug Tangren <d.tangren@gmail.com>\nDouglas Curtis <dougcurtis1@gmail.com>\nDr Nic Williams <drnicwilliams@gmail.com>\ndragon788 <dragon788@users.noreply.github.com>\nDražen Lučanin <kermit666@gmail.com>\nDrew Erny <derny@mirantis.com>\nDrew Hubl <drew.hubl@gmail.com>\nDustin Sallings <dustin@spy.net>\nEd Costello <epc@epcostello.com>\nEdmund Wagner <edmund-wagner@web.de>\nEiichi Tsukata <devel@etsukata.com>\nEike Herzbach <eike@herzbach.net>\nEivin Giske Skaaren <eivinsn@axis.com>\nEivind Uggedal <eivind@uggedal.com>\nElan Ruusamäe <glen@pld-linux.org>\nElango Sivanandam <elango.siva@docker.com>\nElena Morozova <lelenanam@gmail.com>\nEli Uriegas <seemethere101@gmail.com>\nElias Faxö <elias.faxo@tre.se>\nElias Koromilas <elias.koromilas@gmail.com>\nElias Probst <mail@eliasprobst.eu>\nElijah Zupancic <elijah@zupancic.name>\neluck <mail@eluck.me>\nElvir Kuric <elvirkuric@gmail.com>\nEmil Davtyan <emil2k@gmail.com>\nEmil Hernvall <emil@quench.at>\nEmily Maier <emily@emilymaier.net>\nEmily Rose <emily@contactvibe.com>\nEmir Ozer <emirozer@yandex.com>\nEng Zer Jun <engzerjun@gmail.com>\nEnguerran <engcolson@gmail.com>\nEnrico Weigelt, metux IT consult <info@metux.net>\nEohyung Lee <liquidnuker@gmail.com>\nepeterso <epeterson@breakpoint-labs.com>\ner0k <er0k@er0k.net>\nEric Barch <barch@tomesoftware.com>\nEric Curtin <ericcurtin17@gmail.com>\nEric G. Noriega <enoriega@vizuri.com>\nEric Hanchrow <ehanchrow@ine.com>\nEric Lee <thenorthsecedes@gmail.com>\nEric Mountain <eric.mountain@datadoghq.com>\nEric Myhre <hash@exultant.us>\nEric Paris <eparis@redhat.com>\nEric Rafaloff <erafaloff@gmail.com>\nEric Rosenberg <ehaydenr@gmail.com>\nEric Sage <eric.david.sage@gmail.com>\nEric Soderstrom <ericsoderstrom@gmail.com>\nEric Yang <windfarer@gmail.com>\nEric-Olivier Lamey <eo@lamey.me>\nErica Windisch <erica@windisch.us>\nErich Cordoba <erich.cm@yandex.com>\nErik Bray <erik.m.bray@gmail.com>\nErik Dubbelboer <erik@dubbelboer.com>\nErik Hollensbe <github@hollensbe.org>\nErik Inge Bolsø <knan@redpill-linpro.com>\nErik Kristensen <erik@erikkristensen.com>\nErik Sipsma <erik@sipsma.dev>\nErik Sjölund <erik.sjolund@gmail.com>\nErik St. Martin <alakriti@gmail.com>\nErik Weathers <erikdw@gmail.com>\nErno Hopearuoho <erno.hopearuoho@gmail.com>\nErwin van der Koogh <info@erronis.nl>\nEspen Suenson <mail@espensuenson.dk>\nEthan Bell <ebgamer29@gmail.com>\nEthan Mosbaugh <ethan@replicated.com>\nEuan Harris <euan.harris@docker.com>\nEuan Kemp <euan.kemp@coreos.com>\nEugen Krizo <eugen.krizo@gmail.com>\nEugene Yakubovich <eugene.yakubovich@coreos.com>\nEvan Allrich <evan@unguku.com>\nEvan Carmi <carmi@users.noreply.github.com>\nEvan Hazlett <ejhazlett@gmail.com>\nEvan Krall <krall@yelp.com>\nEvan Lezar <elezar@nvidia.com>\nEvan Phoenix <evan@fallingsnow.net>\nEvan Wies <evan@neomantra.net>\nEvelyn Xu <evelynhsu21@gmail.com>\nEverett Toews <everett.toews@rackspace.com>\nEvgeniy Makhrov <e.makhrov@corp.badoo.com>\nEvgeny Shmarnev <shmarnev@gmail.com>\nEvgeny Vereshchagin <evvers@ya.ru>\nEwa Czechowska <ewa@ai-traders.com>\nEystein Måløy Stenberg <eystein.maloy.stenberg@cfengine.com>\nezbercih <cem.ezberci@gmail.com>\nEzra Silvera <ezra@il.ibm.com>\nFabian Kramm <kramm@covexo.com>\nFabian Lauer <kontakt@softwareschmiede-saar.de>\nFabian Raetz <fabian.raetz@gmail.com>\nFabiano Rosas <farosas@br.ibm.com>\nFabio Falci <fabiofalci@gmail.com>\nFabio Kung <fabio.kung@gmail.com>\nFabio Rapposelli <fabio@vmware.com>\nFabio Rehm <fgrehm@gmail.com>\nFabrizio Regini <freegenie@gmail.com>\nFabrizio Soppelsa <fsoppelsa@mirantis.com>\nFaiz Khan <faizkhan00@gmail.com>\nfalmp <chico.lopes@gmail.com>\nFangming Fang <fangming.fang@arm.com>\nFangyuan Gao <21551127@zju.edu.cn>\nfanjiyun <fan.jiyun@zte.com.cn>\nFareed Dudhia <fareeddudhia@googlemail.com>\nFathi Boudra <fathi.boudra@linaro.org>\nFederico Gimenez <fgimenez@coit.es>\nFelipe Oliveira <felipeweb.programador@gmail.com>\nFelipe Ruhland <felipe.ruhland@gmail.com>\nFelix Abecassis <fabecassis@nvidia.com>\nFelix Geisendörfer <felix@debuggable.com>\nFelix Hupfeld <felix@quobyte.com>\nFelix Rabe <felix@rabe.io>\nFelix Ruess <felix.ruess@gmail.com>\nFelix Schindler <fschindler@weluse.de>\nFeng Yan <fy2462@gmail.com>\nFengtu Wang <wangfengtu@huawei.com>\nFerenc Szabo <pragmaticfrank@gmail.com>\nFernando <fermayo@gmail.com>\nFero Volar <alian@alian.info>\nFeroz Salam <feroz.salam@sourcegraph.com>\nFerran Rodenas <frodenas@gmail.com>\nFilipe Brandenburger <filbranden@google.com>\nFilipe Oliveira <contato@fmoliveira.com.br>\nFilipe Pina <hzlu1ot0@duck.com>\nFlavio Castelli <fcastelli@suse.com>\nFlavio Crisciani <flavio.crisciani@docker.com>\nFlorian <FWirtz@users.noreply.github.com>\nFlorian Klein <florian.klein@free.fr>\nFlorian Maier <marsmensch@users.noreply.github.com>\nFlorian Noeding <noeding@adobe.com>\nFlorian Schmaus <flo@geekplace.eu>\nFlorian Weingarten <flo@hackvalue.de>\nFlorin Asavoaie <florin.asavoaie@gmail.com>\nFlorin Patan <florinpatan@gmail.com>\nfonglh <fonglh@gmail.com>\nFoysal Iqbal <foysal.iqbal.fb@gmail.com>\nFrancesc Campoy <campoy@google.com>\nFrancesco Degrassi <francesco.degrassi@optionfactory.net>\nFrancesco Mari <mari.francesco@gmail.com>\nFrancis Chuang <francis.chuang@boostport.com>\nFrancisco Carriedo <fcarriedo@gmail.com>\nFrancisco Souza <f@souza.cc>\nFrank Groeneveld <frank@ivaldi.nl>\nFrank Herrmann <fgh@4gh.tv>\nFrank Macreery <frank@macreery.com>\nFrank Rosquin <frank.rosquin+github@gmail.com>\nFrank Villaro-Dixon <frank.villarodixon@merkle.com>\nFrank Yang <yyb196@gmail.com>\nFrançois Scala <github@arcenik.net>\nFred Lifton <fred.lifton@docker.com>\nFrederick F. Kautz IV <fkautz@redhat.com>\nFrederico F. de Oliveira <FreddieOliveira@users.noreply.github.com>\nFrederik Loeffert <frederik@zitrusmedia.de>\nFrederik Nordahl Jul Sabroe <frederikns@gmail.com>\nFreek Kalter <freek@kalteronline.org>\nFrieder Bluemle <frieder.bluemle@gmail.com>\nfrobnicaty <92033765+frobnicaty@users.noreply.github.com>\nFrédéric Dalleau <frederic.dalleau@docker.com>\nFu JinLin <withlin@yeah.net>\nFélix Baylac-Jacqué <baylac.felix@gmail.com>\nFélix Cantournet <felix.cantournet@cloudwatt.com>\nGabe Rosenhouse <gabe@missionst.com>\nGabor Nagy <mail@aigeruth.hu>\nGabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>\nGabriel Goller <gabrielgoller123@gmail.com>\nGabriel L. Somlo <gsomlo@gmail.com>\nGabriel Linder <linder.gabriel@gmail.com>\nGabriel Monroy <gabriel@opdemand.com>\nGabriel Nicolas Avellaneda <avellaneda.gabriel@gmail.com>\nGabriel Tomitsuka <gabriel@tomitsuka.com>\nGaetan de Villele <gdevillele@gmail.com>\nGalen Sampson <galen.sampson@gmail.com>\nGang Qiao <qiaohai8866@gmail.com>\nGareth Rushgrove <gareth@morethanseven.net>\nGarrett Barboza <garrett@garrettbarboza.com>\nGary Schaetz <gary@schaetzkc.com>\nGaurav <gaurav.gosec@gmail.com>\nGaurav Singh <gaurav1086@gmail.com>\nGaël PORTAY <gael.portay@savoirfairelinux.com>\nGenki Takiuchi <genki@s21g.com>\nGennadySpb <lipenkov@gmail.com>\nGeoff Levand <geoff@infradead.org>\nGeoffrey Bachelet <grosfrais@gmail.com>\nGeon Kim <geon0250@gmail.com>\nGeorge Adams <georgeadams1995@gmail.com>\nGeorge Kontridze <george@bugsnag.com>\nGeorge Ma <mayangang@outlook.com>\nGeorge MacRorie <gmacr31@gmail.com>\nGeorge Xie <georgexsh@gmail.com>\nGeorgi Hristozov <georgi@forkbomb.nl>\nGeorgy Yakovlev <gyakovlev@gentoo.org>\nGereon Frey <gereon.frey@dynport.de>\nGerman DZ <germ@ndz.com.ar>\nGert van Valkenhoef <g.h.m.van.valkenhoef@rug.nl>\nGerwim Feiken <g.feiken@tfe.nl>\nGhislain Bourgeois <ghislain.bourgeois@gmail.com>\nGiampaolo Mancini <giampaolo@trampolineup.com>\nGianluca Borello <g.borello@gmail.com>\nGildas Cuisinier <gildas.cuisinier@gcuisinier.net>\nGiovan Isa Musthofa <giovanism@outlook.co.id>\ngissehel <public-devgit-dantus@gissehel.org>\nGiuseppe Mazzotta <gdm85@users.noreply.github.com>\nGiuseppe Scrivano <gscrivan@redhat.com>\nGleb Fotengauer-Malinovskiy <glebfm@altlinux.org>\nGleb M Borisov <borisov.gleb@gmail.com>\nGlyn Normington <gnormington@gopivotal.com>\nGoBella <caili_welcome@163.com>\nGoffert van Gool <goffert@phusion.nl>\nGoldwyn Rodrigues <rgoldwyn@suse.com>\nGopikannan Venugopalsamy <gopikannan.venugopalsamy@gmail.com>\nGosuke Miyashita <gosukenator@gmail.com>\nGou Rao <gou@portworx.com>\nGovinda Fichtner <govinda.fichtner@googlemail.com>\nGrace Choi <grace.54109@gmail.com>\nGrant Millar <rid@cylo.io>\nGrant Reaber <grant.reaber@gmail.com>\nGraydon Hoare <graydon@pobox.com>\nGreg Fausak <greg@tacodata.com>\nGreg Pflaum <gpflaum@users.noreply.github.com>\nGreg Stephens <greg@udon.org>\nGreg Thornton <xdissent@me.com>\nGrzegorz Jaśkiewicz <gj.jaskiewicz@gmail.com>\nGuilhem Lettron <guilhem+github@lettron.fr>\nGuilherme Salgado <gsalgado@gmail.com>\nGuillaume Dufour <gdufour.prestataire@voyages-sncf.com>\nGuillaume J. Charmes <guillaume.charmes@docker.com>\nGunadhya S. <6939749+gunadhya@users.noreply.github.com>\nGuoqiang QI <guoqiang.qi1@gmail.com>\nguoxiuyan <guoxiuyan@huawei.com>\nGuri <odg0318@gmail.com>\nGurjeet Singh <gurjeet@singh.im>\nGuruprasad <lgp171188@gmail.com>\nGustav Sinder <gustav.sinder@gmail.com>\ngwx296173 <gaojing3@huawei.com>\nGünter Zöchbauer <guenter@gzoechbauer.com>\nHaichao Yang <yang.haichao@zte.com.cn>\nhaikuoliu <haikuo@amazon.com>\nhaining.cao <haining.cao@daocloud.io>\nHakan Özler <hakan.ozler@kodcu.com>\nHamish Hutchings <moredhel@aoeu.me>\nHannes Ljungberg <hannes@5monkeys.se>\nHans Kristian Flaatten <hans@starefossen.com>\nHans Rødtang <hansrodtang@gmail.com>\nHao Shu Wei <haoshuwei24@gmail.com>\nHao Zhang <21521210@zju.edu.cn>\nHarald Albers <github@albersweb.de>\nHarald Niesche <harald@niesche.de>\nHarley Laue <losinggeneration@gmail.com>\nHarold Cooper <hrldcpr@gmail.com>\nHarrison Turton <harrisonturton@gmail.com>\nHarry Zhang <harryz@hyper.sh>\nHarshal Patil <harshal.patil@in.ibm.com>\nHarshal Patil <harshalp@linux.vnet.ibm.com>\nHe Simei <hesimei@zju.edu.cn>\nHe Xiaoxi <tossmilestone@gmail.com>\nHe Xin <he_xinworld@126.com>\nheartlock <21521209@zju.edu.cn>\nHector Castro <hectcastro@gmail.com>\nHelen Xie <chenjg@harmonycloud.cn>\nHenning Sprang <henning.sprang@gmail.com>\nHiroshi Hatake <hatake@clear-code.com>\nHiroyuki Sasagawa <hs19870702@gmail.com>\nHobofan <goisser94@gmail.com>\nHollie Teal <hollie@docker.com>\nHong Xu <hong@topbug.net>\nHongbin Lu <hongbin034@gmail.com>\nHongxu Jia <hongxu.jia@windriver.com>\nHonza Pokorny <me@honza.ca>\nHsing-Hui Hsu <hsinghui@amazon.com>\nHsing-Yu (David) Chen <davidhsingyuchen@gmail.com>\nhsinko <21551195@zju.edu.cn>\nHu Keping <hukeping@huawei.com>\nHu Tao <hutao@cn.fujitsu.com>\nHuajin Tong <fliterdashen@gmail.com>\nhuang-jl <1046678590@qq.com>\nHuanHuan Ye <logindaveye@gmail.com>\nHuanzhong Zhang <zhanghuanzhong90@gmail.com>\nHuayi Zhang <irachex@gmail.com>\nHugo Barrera <hugo@barrera.io>\nHugo Duncan <hugo@hugoduncan.org>\nHugo Marisco <0x6875676f@gmail.com>\nHui Kang <hkang.sunysb@gmail.com>\nHunter Blanks <hunter@twilio.com>\nhuqun <huqun@zju.edu.cn>\nHuu Nguyen <huu@prismskylabs.com>\nHyeongkyu Lee <hyeongkyu.lee@navercorp.com>\nHyzhou Zhy <hyzhou.zhy@alibaba-inc.com>\nIago López Galeiras <iago@kinvolk.io>\nIan Bishop <ianbishop@pace7.com>\nIan Bull <irbull@gmail.com>\nIan Calvert <ianjcalvert@gmail.com>\nIan Campbell <ian.campbell@docker.com>\nIan Chen <ianre657@gmail.com>\nIan Lee <IanLee1521@gmail.com>\nIan Main <imain@redhat.com>\nIan Philpot <ian.philpot@microsoft.com>\nIan Truslove <ian.truslove@gmail.com>\nIavael <iavaelooeyt@gmail.com>\nIcaro Seara <icaro.seara@gmail.com>\nIgnacio Capurro <icapurrofagian@gmail.com>\nIgor Dolzhikov <bluesriverz@gmail.com>\nIgor Karpovich <i.karpovich@currencysolutions.com>\nIliana Weller <iweller@amazon.com>\nIlkka Laukkanen <ilkka@ilkka.io>\nIllia Antypenko <ilya@antipenko.pp.ua>\nIllo Abdulrahim <abdulrahim.illo@nokia.com>\nIlya Dmitrichenko <errordeveloper@gmail.com>\nIlya Gusev <mail@igusev.ru>\nIlya Khlopotov <ilya.khlopotov@gmail.com>\nimalasong <2879499479@qq.com>\nimre Fitos <imre.fitos+github@gmail.com>\ninglesp <peter.inglesby@gmail.com>\nIngo Gottwald <in.gottwald@gmail.com>\nInnovimax <innovimax@gmail.com>\nIsaac Dupree <antispam@idupree.com>\nIsabel Jimenez <contact.isabeljimenez@gmail.com>\nIsaiah Grace <irgkenya4@gmail.com>\nIsao Jonas <isao.jonas@gmail.com>\nIskander Sharipov <quasilyte@gmail.com>\nIvan Babrou <ibobrik@gmail.com>\nIvan Fraixedes <ifcdev@gmail.com>\nIvan Grcic <igrcic@gmail.com>\nIvan Markin <sw@nogoegst.net>\nJ Bruni <joaohbruni@yahoo.com.br>\nJ. Nunn <jbnunn@gmail.com>\nJack Danger Canty <jackdanger@squareup.com>\nJack Laxson <jackjrabbit@gmail.com>\nJack Walker <90711509+j2walker@users.noreply.github.com>\nJacob Atzen <jacob@jacobatzen.dk>\nJacob Edelman <edelman.jd@gmail.com>\nJacob Tomlinson <jacob@tom.linson.uk>\nJacob Vallejo <jakeev@amazon.com>\nJacob Wen <jian.w.wen@oracle.com>\nJaime Cepeda <jcepedavillamayor@gmail.com>\nJaivish Kothari <janonymous.codevulture@gmail.com>\nJake Champlin <jake.champlin.27@gmail.com>\nJake Moshenko <jake@devtable.com>\nJake Sanders <jsand@google.com>\nJakub Drahos <jdrahos@pulsepoint.com>\nJakub Guzik <jakubmguzik@gmail.com>\nJames Allen <jamesallen0108@gmail.com>\nJames Carey <jecarey@us.ibm.com>\nJames Carr <james.r.carr@gmail.com>\nJames DeFelice <james.defelice@ishisystems.com>\nJames Harrison Fisher <jameshfisher@gmail.com>\nJames Kyburz <james.kyburz@gmail.com>\nJames Kyle <james@jameskyle.org>\nJames Lal <james@lightsofapollo.com>\nJames Mills <prologic@shortcircuit.net.au>\nJames Nesbitt <jnesbitt@mirantis.com>\nJames Nugent <james@jen20.com>\nJames Sanders <james3sanders@gmail.com>\nJames Turnbull <james@lovedthanlost.net>\nJames Watkins-Harvey <jwatkins@progi-media.com>\nJameson Hyde <jameson.hyde@docker.com>\nJamie Hannaford <jamie@limetree.org>\nJamshid Afshar <jafshar@yahoo.com>\nJan Breig <git@pygos.space>\nJan Chren <dev.rindeal@gmail.com>\nJan Garcia <github-public@n-garcia.com>\nJan Götte <jaseg@jaseg.net>\nJan Keromnes <janx@linux.com>\nJan Koprowski <jan.koprowski@gmail.com>\nJan Pazdziora <jpazdziora@redhat.com>\nJan Toebes <jan@toebes.info>\nJan-Gerd Tenberge <janten@gmail.com>\nJan-Jaap Driessen <janjaapdriessen@gmail.com>\nJana Radhakrishnan <mrjana@docker.com>\nJannick Fahlbusch <git@jf-projects.de>\nJanuar Wayong <januar@gmail.com>\nJared Biel <jared.biel@bolderthinking.com>\nJared Hocutt <jaredh@netapp.com>\nJaroslav Jindrak <dzejrou@gmail.com>\nJaroslaw Zabiello <hipertracker@gmail.com>\nJasmine Hegman <jasmine@jhegman.com>\nJason A. Donenfeld <Jason@zx2c4.com>\nJason Divock <jdivock@gmail.com>\nJason Giedymin <jasong@apache.org>\nJason Green <Jason.Green@AverInformatics.Com>\nJason Hall <imjasonh@gmail.com>\nJason Heiss <jheiss@aput.net>\nJason Livesay <ithkuil@gmail.com>\nJason McVetta <jason.mcvetta@gmail.com>\nJason Plum <jplum@devonit.com>\nJason Shepherd <jason@jasonshepherd.net>\nJason Smith <jasonrichardsmith@gmail.com>\nJason Sommer <jsdirv@gmail.com>\nJason Stangroome <jason@codeassassin.com>\nJasper Siepkes <siepkes@serviceplanet.nl>\nJavier Bassi <javierbassi@gmail.com>\njaxgeller <jacksongeller@gmail.com>\nJay <teguhwpurwanto@gmail.com>\nJay Kamat <github@jgkamat.33mail.com>\nJay Lim <jay@imjching.com>\nJean Rouge <rougej+github@gmail.com>\nJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>\nJean-Baptiste Dalido <jeanbaptiste@appgratis.com>\nJean-Christophe Berthon <huygens@berthon.eu>\nJean-Michel Rouet <jm.rouet@gmail.com>\nJean-Paul Calderone <exarkun@twistedmatrix.com>\nJean-Pierre Huynh <jean-pierre.huynh@ounet.fr>\nJean-Tiare Le Bigot <jt@yadutaf.fr>\nJeeva S. Chelladhurai <sjeeva@gmail.com>\nJeff Anderson <jeff@docker.com>\nJeff Hajewski <jeff.hajewski@gmail.com>\nJeff Johnston <jeff.johnston.mn@gmail.com>\nJeff Lindsay <progrium@gmail.com>\nJeff Mickey <j@codemac.net>\nJeff Minard <jeff@creditkarma.com>\nJeff Nickoloff <jeff.nickoloff@gmail.com>\nJeff Silberman <jsilberm@gmail.com>\nJeff Welch <whatthejeff@gmail.com>\nJeff Zvier <zvier20@gmail.com>\nJeffrey Bolle <jeffreybolle@gmail.com>\nJeffrey Morgan <jmorganca@gmail.com>\nJeffrey van Gogh <jvg@google.com>\nJenny Gebske <jennifer@gebske.de>\nJeongseok Kang <piono623@naver.com>\nJeremy Chambers <jeremy@thehipbot.com>\nJeremy Grosser <jeremy@synack.me>\nJeremy Huntwork <jhuntwork@lightcubesolutions.com>\nJeremy Price <jprice.rhit@gmail.com>\nJeremy Qian <vanpire110@163.com>\nJeremy Unruh <jeremybunruh@gmail.com>\nJeremy Yallop <yallop@docker.com>\nJeroen Franse <jeroenfranse@gmail.com>\nJeroen Jacobs <github@jeroenj.be>\nJesse Dearing <jesse.dearing@gmail.com>\nJesse Dubay <jesse@thefortytwo.net>\nJessica Frazelle <jess@oxide.computer>\nJeyanthinath Muthuram <jeyanthinath10@gmail.com>\nJezeniel Zapanta <jpzapanta22@gmail.com>\nJhon Honce <jhonce@redhat.com>\nJi.Zhilong <zhilongji@gmail.com>\nJian Liao <jliao@alauda.io>\nJian Zeng <anonymousknight96@gmail.com>\nJian Zhang <zhangjian.fnst@cn.fujitsu.com>\nJiang Jinyang <jjyruby@gmail.com>\nJianyong Wu <jianyong.wu@arm.com>\nJie Luo <luo612@zju.edu.cn>\nJie Ma <jienius@outlook.com>\nJihyun Hwang <jhhwang@telcoware.com>\nJilles Oldenbeuving <ojilles@gmail.com>\nJim Alateras <jima@comware.com.au>\nJim Carroll <jim.carroll@docker.com>\nJim Ehrismann <jim.ehrismann@docker.com>\nJim Galasyn <jim.galasyn@docker.com>\nJim Lin <b04705003@ntu.edu.tw>\nJim Minter <jminter@redhat.com>\nJim Perrin <jperrin@centos.org>\nJimmy Cuadra <jimmy@jimmycuadra.com>\nJimmy Puckett <jimmy.puckett@spinen.com>\nJimmy Song <rootsongjc@gmail.com>\njinjiadu <jinjiadu@aliyun.com>\nJinsoo Park <cellpjs@gmail.com>\nJintao Zhang <zhangjintao9020@gmail.com>\nJiri Appl <jiria@microsoft.com>\nJiri Popelka <jpopelka@redhat.com>\nJiuyue Ma <majiuyue@huawei.com>\nJiří Župka <jzupka@redhat.com>\njjimbo137 <115816493+jjimbo137@users.noreply.github.com>\nJoakim Roubert <joakim.roubert@axis.com>\nJoan Grau <grautxo.dev@proton.me>\nJoao Fernandes <joao.fernandes@docker.com>\nJoao Trindade <trindade.joao@gmail.com>\nJoe Beda <joe.github@bedafamily.com>\nJoe Doliner <jdoliner@pachyderm.io>\nJoe Ferguson <joe@infosiftr.com>\nJoe Gordon <joe.gordon0@gmail.com>\nJoe Shaw <joe@joeshaw.org>\nJoe Van Dyk <joe@tanga.com>\nJoel Friedly <joelfriedly@gmail.com>\nJoel Handwell <joelhandwell@gmail.com>\nJoel Hansson <joel.hansson@ecraft.com>\nJoel Wurtz <jwurtz@jolicode.com>\nJoey Geiger <jgeiger@gmail.com>\nJoey Geiger <jgeiger@users.noreply.github.com>\nJoey Gibson <joey@joeygibson.com>\nJoffrey F <joffrey@docker.com>\nJohan Euphrosine <proppy@google.com>\nJohan Rydberg <johan.rydberg@gmail.com>\nJohanan Lieberman <johanan.lieberman@gmail.com>\nJohannes 'fish' Ziemke <github@freigeist.org>\nJohn Costa <john.costa@gmail.com>\nJohn Feminella <jxf@jxf.me>\nJohn Gardiner Myers <jgmyers@proofpoint.com>\nJohn Gossman <johngos@microsoft.com>\nJohn Harris <john@johnharris.io>\nJohn Howard <github@lowenna.com>\nJohn Laswell <john.n.laswell@gmail.com>\nJohn Maguire <jmaguire@duosecurity.com>\nJohn Mulhausen <john@docker.com>\nJohn OBrien III <jobrieniii@yahoo.com>\nJohn Starks <jostarks@microsoft.com>\nJohn Stephens <johnstep@docker.com>\nJohn Tims <john.k.tims@gmail.com>\nJohn V. Martinez <jvmatl@gmail.com>\nJohn Warwick <jwarwick@gmail.com>\nJohn Willis <john.willis@docker.com>\nJon Johnson <jonjohnson@google.com>\nJon Surrell <jon.surrell@gmail.com>\nJon Wedaman <jweede@gmail.com>\nJonas Dohse <jonas@dohse.ch>\nJonas Geiler <git@jonasgeiler.com>\nJonas Heinrich <Jonas@JonasHeinrich.com>\nJonas Pfenniger <jonas@pfenniger.name>\nJonathan A. Schweder <jonathanschweder@gmail.com>\nJonathan A. Sternberg <jonathansternberg@gmail.com>\nJonathan Boulle <jonathanboulle@gmail.com>\nJonathan Camp <jonathan@irondojo.com>\nJonathan Choy <jonathan.j.choy@gmail.com>\nJonathan Dowland <jon+github@alcopop.org>\nJonathan Lebon <jlebon@redhat.com>\nJonathan Lomas <jonathan@floatinglomas.ca>\nJonathan McCrohan <jmccrohan@gmail.com>\nJonathan Mueller <j.mueller@apoveda.ch>\nJonathan Pares <jonathanpa@users.noreply.github.com>\nJonathan Rudenberg <jonathan@titanous.com>\nJonathan Stoppani <jonathan.stoppani@divio.com>\nJonh Wendell <jonh.wendell@redhat.com>\nJoni Sar <yoni@cocycles.com>\nJoost Cassee <joost@cassee.net>\nJordan Arentsen <blissdev@gmail.com>\nJordan Jennings <jjn2009@gmail.com>\nJordan Sissel <jls@semicomplete.com>\nJordi Massaguer Pla <jmassaguerpla@suse.de>\nJorge Marin <chipironcin@users.noreply.github.com>\nJorit Kleine-Möllhoff <joppich@bricknet.de>\nJose Diaz-Gonzalez <email@josediazgonzalez.com>\nJoseph Anthony Pasquale Holsten <joseph@josephholsten.com>\nJoseph Hager <ajhager@gmail.com>\nJoseph Kern <jkern@semafour.net>\nJoseph Rothrock <rothrock@rothrock.org>\nJosh <jokajak@gmail.com>\nJosh Bodah <jb3689@yahoo.com>\nJosh Bonczkowski <josh.bonczkowski@gmail.com>\nJosh Chorlton <jchorlton@gmail.com>\nJosh Eveleth <joshe@opendns.com>\nJosh Hawn <josh.hawn@docker.com>\nJosh Horwitz <horwitz@addthis.com>\nJosh Poimboeuf <jpoimboe@redhat.com>\nJosh Soref <jsoref@gmail.com>\nJosh Wilson <josh.wilson@fivestars.com>\nJosiah Kiehl <jkiehl@riotgames.com>\nJosé Tomás Albornoz <jojo@eljojo.net>\nJoyce Jang <mail@joycejang.com>\nJP <jpellerin@leapfrogonline.com>\nJSchltggr <jschltggr@gmail.com>\nJulian Taylor <jtaylor.debian@googlemail.com>\nJulien Barbier <write0@gmail.com>\nJulien Bisconti <veggiemonk@users.noreply.github.com>\nJulien Bordellier <julienbordellier@gmail.com>\nJulien Dubois <julien.dubois@gmail.com>\nJulien Kassar <github@kassisol.com>\nJulien Maitrehenry <julien.maitrehenry@me.com>\nJulien Pervillé <julien.perville@perfect-memory.com>\nJulien Pivotto <roidelapluie@inuits.eu>\nJulio Guerra <julio@sqreen.com>\nJulio Montes <imc.coder@gmail.com>\nJun Du <dujun5@huawei.com>\nJun-Ru Chang <jrjang@gmail.com>\njunxu <xujun@cmss.chinamobile.com>\nJussi Nummelin <jussi.nummelin@gmail.com>\nJustas Brazauskas <brazauskasjustas@gmail.com>\nJusten Martin <jmart@the-coder.com>\nJustin Chadwell <me@jedevc.com>\nJustin Cormack <justin.cormack@docker.com>\nJustin Force <justin.force@gmail.com>\nJustin Keller <85903732+jk-vb@users.noreply.github.com>\nJustin Menga <justin.menga@gmail.com>\nJustin Plock <jplock@users.noreply.github.com>\nJustin Simonelis <justin.p.simonelis@gmail.com>\nJustin Terry <juterry@microsoft.com>\nJustyn Temme <justyntemme@gmail.com>\nJyrki Puttonen <jyrkiput@gmail.com>\nJérémy Leherpeur <amenophis@leherpeur.net>\nJérôme Petazzoni <jerome.petazzoni@docker.com>\nJörg Thalheim <joerg@higgsboson.tk>\nK. Heller <pestophagous@gmail.com>\nKai Blin <kai@samba.org>\nKai Qiang Wu (Kennan) <wkq5325@gmail.com>\nKaijie Chen <chen@kaijie.org>\nKamil Domański <kamil@domanski.co>\nKamjar Gerami <kami.gerami@gmail.com>\nKanstantsin Shautsou <kanstantsin.sha@gmail.com>\nKara Alexandra <kalexandra@us.ibm.com>\nKaran Lyons <karan@karanlyons.com>\nKareem Khazem <karkhaz@karkhaz.com>\nkargakis <kargakis@users.noreply.github.com>\nKarl Grzeszczak <karlgrz@gmail.com>\nKarol Duleba <mr.fuxi@gmail.com>\nKarthik Karanth <karanth.karthik@gmail.com>\nKarthik Nayak <karthik.188@gmail.com>\nKasper Fabæch Brandt <poizan@poizan.dk>\nKate Heddleston <kate.heddleston@gmail.com>\nKatie McLaughlin <katie@glasnt.com>\nKato Kazuyoshi <kato.kazuyoshi@gmail.com>\nKatrina Owen <katrina.owen@gmail.com>\nKawsar Saiyeed <kawsar.saiyeed@projiris.com>\nKay Yan <kay.yan@daocloud.io>\nkayrus <kay.diam@gmail.com>\nKazuhiro Sera <seratch@gmail.com>\nKazuyoshi Kato <katokazu@amazon.com>\nKe Li <kel@splunk.com>\nKe Xu <leonhartx.k@gmail.com>\nKei Ohmura <ohmura.kei@gmail.com>\nKeith Hudgins <greenman@greenman.org>\nKeli Hu <dev@keli.hu>\nKen Bannister <kb2ma@runbox.com>\nKen Cochrane <kencochrane@gmail.com>\nKen Herner <kherner@progress.com>\nKen ICHIKAWA <ichikawa.ken@jp.fujitsu.com>\nKen Reese <krrgithub@gmail.com>\nKenfe-Mickaël Laventure <mickael.laventure@gmail.com>\nKenjiro Nakayama <nakayamakenjiro@gmail.com>\nKent Johnson <kentoj@gmail.com>\nKenta Tada <Kenta.Tada@sony.com>\nKevin \"qwazerty\" Houdebert <kevin.houdebert@gmail.com>\nKevin Alvarez <github@crazymax.dev>\nKevin Burke <kev@inburke.com>\nKevin Clark <kevin.clark@gmail.com>\nKevin Feyrer <kevin.feyrer@btinternet.com>\nKevin J. Lynagh <kevin@keminglabs.com>\nKevin Jing Qiu <kevin@idempotent.ca>\nKevin Kern <kaiwentan@harmonycloud.cn>\nKevin Menard <kevin@nirvdrum.com>\nKevin Meredith <kevin.m.meredith@gmail.com>\nKevin P. Kucharczyk <kevinkucharczyk@gmail.com>\nKevin Parsons <kevpar@microsoft.com>\nKevin Richardson <kevin@kevinrichardson.co>\nKevin Shi <kshi@andrew.cmu.edu>\nKevin Wallace <kevin@pentabarf.net>\nKevin Yap <me@kevinyap.ca>\nKeyvan Fatehi <keyvanfatehi@gmail.com>\nkies <lleelm@gmail.com>\nKim BKC Carlbacker <kim.carlbacker@gmail.com>\nKim Eik <kim@heldig.org>\nKimbro Staken <kstaken@kstaken.com>\nKir Kolyshkin <kolyshkin@gmail.com>\nKiran Gangadharan <kiran.daredevil@gmail.com>\nKirill SIbirev <l0kix2@gmail.com>\nKirk Easterson <kirk.easterson@gmail.com>\nknappe <tyler.knappe@gmail.com>\nKohei Tsuruta <coheyxyz@gmail.com>\nKoichi Shiraishi <k@zchee.io>\nKonrad Kleine <konrad.wilhelm.kleine@gmail.com>\nKonrad Ponichtera <konpon96@gmail.com>\nKonstantin Gribov <grossws@gmail.com>\nKonstantin L <sw.double@gmail.com>\nKonstantin Pelykh <kpelykh@zettaset.com>\nKostadin Plachkov <k.n.plachkov@gmail.com>\nkpcyrd <git@rxv.cc>\nKrasi Georgiev <krasi@vip-consult.solutions>\nKrasimir Georgiev <support@vip-consult.co.uk>\nKris-Mikael Krister <krismikael@protonmail.com>\nKristian Haugene <kristian.haugene@capgemini.com>\nKristina Zabunova <triara.xiii@gmail.com>\nKrystian Wojcicki <kwojcicki@sympatico.ca>\nKunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>\nKunal Tyagi <tyagi.kunal@live.com>\nKyle Conroy <kyle.j.conroy@gmail.com>\nKyle Linden <linden.kyle@gmail.com>\nKyle Squizzato <ksquizz@gmail.com>\nKyle Wuolle <kyle.wuolle@gmail.com>\nkyu <leehk1227@gmail.com>\nLachlan Coote <lcoote@vmware.com>\nLai Jiangshan <jiangshanlai@gmail.com>\nLajos Papp <lajos.papp@sequenceiq.com>\nLakshan Perera <lakshan@laktek.com>\nLalatendu Mohanty <lmohanty@redhat.com>\nLance Chen <cyen0312@gmail.com>\nLance Kinley <lkinley@loyaltymethods.com>\nLars Andringa <l.s.andringa@rug.nl>\nLars Butler <Lars.Butler@gmail.com>\nLars Kellogg-Stedman <lars@redhat.com>\nLars R. Damerow <lars@pixar.com>\nLars-Magnus Skog <ralphtheninja@riseup.net>\nLaszlo Meszaros <lacienator@gmail.com>\nLaura Brehm <laurabrehm@hey.com>\nLaura Frank <ljfrank@gmail.com>\nLaurent Bernaille <laurent.bernaille@datadoghq.com>\nLaurent Erignoux <lerignoux@gmail.com>\nLaurent Goderre <laurent.goderre@docker.com>\nLaurie Voss <github@seldo.com>\nLeandro Motta Barros <lmb@stackedboxes.org>\nLeandro Siqueira <leandro.siqueira@gmail.com>\nLee Calcote <leecalcote@gmail.com>\nLee Chao <932819864@qq.com>\nLee, Meng-Han <sunrisedm4@gmail.com>\nLei Gong <lgong@alauda.io>\nLei Jitang <leijitang@huawei.com>\nLeiiwang <u2takey@gmail.com>\nLen Weincier <len@cloudafrica.net>\nLennie <github@consolejunkie.net>\nLeo Gallucci <elgalu3@gmail.com>\nLeonardo Nodari <me@leonardonodari.it>\nLeonardo Taccari <leot@NetBSD.org>\nLeszek Kowalski <github@leszekkowalski.pl>\nLevi Blackstone <levi.blackstone@rackspace.com>\nLevi Gross <levi@levigross.com>\nLevi Harrison <levisamuelharrison@gmail.com>\nLewis Daly <lewisdaly@me.com>\nLewis Marshall <lewis@lmars.net>\nLewis Peckover <lew+github@lew.io>\nLi Yi <denverdino@gmail.com>\nLiam Macgillavry <liam@kumina.nl>\nLiana Lo <liana.lixia@gmail.com>\nLiang Mingqiang <mqliang.zju@gmail.com>\nLiang-Chi Hsieh <viirya@gmail.com>\nliangwei <liangwei14@huawei.com>\nLiao Qingwei <liaoqingwei@huawei.com>\nLifubang <lifubang@acmcoder.com>\nLihua Tang <lhtang@alauda.io>\nLily Guo <lily.guo@docker.com>\nlimeidan <limeidan@loongson.cn>\nLin Lu <doraalin@163.com>\nLingFaKe <lingfake@huawei.com>\nLinus Heckemann <lheckemann@twig-world.com>\nLiran Tal <liran.tal@gmail.com>\nLiron Levin <liron@twistlock.com>\nLiu Bo <bo.li.liu@oracle.com>\nLiu Hua <sdu.liu@huawei.com>\nliwenqi <vikilwq@zju.edu.cn>\nlixiaobing10051267 <li.xiaobing1@zte.com.cn>\nLiz Zhang <lizzha@microsoft.com>\nLIZAO LI <lzlarryli@gmail.com>\nLizzie Dixon <_@lizzie.io>\nLloyd Dewolf <foolswisdom@gmail.com>\nLokesh Mandvekar <lsm5@fedoraproject.org>\nlongliqiang88 <394564827@qq.com>\nLorenz Leutgeb <lorenz.leutgeb@gmail.com>\nLorenzo Fontana <fontanalorenz@gmail.com>\nLotus Fenn <fenn.lotus@gmail.com>\nLouis Delossantos <ldelossa.ld@gmail.com>\nLouis Opter <kalessin@kalessin.fr>\nLuboslav Pivarc <lpivarc@redhat.com>\nLuca Favatella <luca.favatella@erlang-solutions.com>\nLuca Marturana <lucamarturana@gmail.com>\nLuca Orlandi <luca.orlandi@gmail.com>\nLuca-Bogdan Grigorescu <Luca-Bogdan Grigorescu>\nLucas Chan <lucas-github@lucaschan.com>\nLucas Chi <lucas@teacherspayteachers.com>\nLucas Molas <lmolas@fundacionsadosky.org.ar>\nLucas Silvestre <lukas.silvestre@gmail.com>\nLuciano Mores <leslau@gmail.com>\nLuis Henrique Mulinari <luis.mulinari@gmail.com>\nLuis Martínez de Bartolomé Izquierdo <lmartinez@biicode.com>\nLuiz Svoboda <luizek@gmail.com>\nLukas Heeren <lukas-heeren@hotmail.com>\nLukas Waslowski <cr7pt0gr4ph7@gmail.com>\nlukaspustina <lukas.pustina@centerdevice.com>\nLukasz Zajaczkowski <Lukasz.Zajaczkowski@ts.fujitsu.com>\nLuke Marsden <me@lukemarsden.net>\nLyn <energylyn@zju.edu.cn>\nLynda O'Leary <lyndaoleary29@gmail.com>\nLénaïc Huard <lhuard@amadeus.com>\nMa Müller <mueller-ma@users.noreply.github.com>\nMa Shimiao <mashimiao.fnst@cn.fujitsu.com>\nMabin <bin.ma@huawei.com>\nMadhan Raj Mookkandy <MadhanRaj.Mookkandy@microsoft.com>\nMadhav Puri <madhav.puri@gmail.com>\nMadhu Venugopal <mavenugo@gmail.com>\nMageee <fangpuyi@foxmail.com>\nmaggie44 <64841595+maggie44@users.noreply.github.com>\nMahesh Tiyyagura <tmahesh@gmail.com>\nmalnick <malnick@gmail..com>\nMalte Janduda <mail@janduda.net>\nManfred Touron <m@42.am>\nManfred Zabarauskas <manfredas@zabarauskas.com>\nManjunath A Kumatagi <mkumatag@in.ibm.com>\nMansi Nahar <mmn4185@rit.edu>\nManuel Meurer <manuel@krautcomputing.com>\nManuel Rüger <manuel@rueg.eu>\nManuel Woelker <github@manuel.woelker.org>\nmapk0y <mapk0y@gmail.com>\nMarat Radchenko <marat@slonopotamus.org>\nMarc Abramowitz <marc@marc-abramowitz.com>\nMarc Kuo <kuomarc2@gmail.com>\nMarc Tamsky <mtamsky@gmail.com>\nMarcel Edmund Franke <marcel.edmund.franke@gmail.com>\nMarcelo Horacio Fortino <info@fortinux.com>\nMarcelo Salazar <chelosalazar@gmail.com>\nMarco Hennings <marco.hennings@freiheit.com>\nMarcus Cobden <mcobden@cisco.com>\nMarcus Farkas <toothlessgear@finitebox.com>\nMarcus Linke <marcus.linke@gmx.de>\nMarcus Martins <marcus@docker.com>\nMarcus Ramberg <marcus@nordaaker.com>\nMarek Goldmann <marek.goldmann@gmail.com>\nMarian Marinov <mm@yuhu.biz>\nMarianna Tessel <mtesselh@gmail.com>\nMario Loriedo <mario.loriedo@gmail.com>\nMarius Gundersen <me@mariusgundersen.net>\nMarius Sturm <marius@graylog.com>\nMarius Voila <marius.voila@gmail.com>\nMark Allen <mrallen1@yahoo.com>\nMark Feit <mfeit@internet2.edu>\nMark Jeromin <mark.jeromin@sysfrog.net>\nMark McGranaghan <mmcgrana@gmail.com>\nMark McKinstry <mmckinst@umich.edu>\nMark Milstein <mark@epiloque.com>\nMark Oates <fl0yd@me.com>\nMark Parker <godefroi@users.noreply.github.com>\nMark Vainomaa <mikroskeem@mikroskeem.eu>\nMark West <markewest@gmail.com>\nMarkan Patel <mpatel678@gmail.com>\nMarko Mikulicic <mmikulicic@gmail.com>\nMarko Tibold <marko@tibold.nl>\nMarkus Fix <lispmeister@gmail.com>\nMarkus Kortlang <hyp3rdino@googlemail.com>\nMartijn Dwars <ikben@martijndwars.nl>\nMartijn van Oosterhout <kleptog@svana.org>\nMartin Braun <braun@neuroforge.de>\nMartin Dojcak <martin.dojcak@lablabs.io>\nMartin Honermeyer <maze@strahlungsfrei.de>\nMartin Jirku <martin@jirku.sk>\nMartin Kelly <martin@surround.io>\nMartin Mosegaard Amdisen <martin.amdisen@praqma.com>\nMartin Muzatko <martin@happy-css.com>\nMartin Redmond <redmond.martin@gmail.com>\nMaru Newby <mnewby@thesprawl.net>\nMary Anthony <mary.anthony@docker.com>\nMasahito Zembutsu <zembutsu@users.noreply.github.com>\nMasato Ohba <over.rye@gmail.com>\nMasayuki Morita <minamijoyo@gmail.com>\nMason Malone <mason.malone@gmail.com>\nMateusz Sulima <sulima.mateusz@gmail.com>\nMathias Monnerville <mathias@monnerville.com>\nMathieu Champlon <mathieu.champlon@docker.com>\nMathieu Le Marec - Pasquet <kiorky@cryptelium.net>\nMathieu Parent <math.parent@gmail.com>\nMathieu Paturel <mathieu.paturel@gmail.com>\nMatt Apperson <me@mattapperson.com>\nMatt Bachmann <bachmann.matt@gmail.com>\nMatt Bajor <matt@notevenremotelydorky.com>\nMatt Bentley <matt.bentley@docker.com>\nMatt Haggard <haggardii@gmail.com>\nMatt Hoyle <matt@deployable.co>\nMatt McCormick <matt.mccormick@kitware.com>\nMatt Moore <mattmoor@google.com>\nMatt Morrison <3maven@gmail.com>\nMatt Richardson <matt@redgumtech.com.au>\nMatt Rickard <mrick@google.com>\nMatt Robenolt <matt@ydekproductions.com>\nMatt Schurenko <matt.schurenko@gmail.com>\nMatt Williams <mattyw@me.com>\nMatthew Heon <mheon@redhat.com>\nMatthew Lapworth <matthewl@bit-shift.net>\nMatthew Mayer <matthewkmayer@gmail.com>\nMatthew Mosesohn <raytrac3r@gmail.com>\nMatthew Mueller <mattmuelle@gmail.com>\nMatthew Riley <mattdr@google.com>\nMatthias Klumpp <matthias@tenstral.net>\nMatthias Kühnle <git.nivoc@neverbox.com>\nMatthias Rampke <mr@soundcloud.com>\nMatthieu Fronton <m@tthieu.fr>\nMatthieu Hauglustaine <matt.hauglustaine@gmail.com>\nMattias Jernberg <nostrad@gmail.com>\nMauricio Garavaglia <mauricio@medallia.com>\nmauriyouth <mauriyouth@gmail.com>\nMax Harmathy <max.harmathy@web.de>\nMax Shytikov <mshytikov@gmail.com>\nMax Timchenko <maxvt@pagerduty.com>\nMaxim Fedchyshyn <sevmax@gmail.com>\nMaxim Ivanov <ivanov.maxim@gmail.com>\nMaxim Kulkin <mkulkin@mirantis.com>\nMaxim Treskin <zerthurd@gmail.com>\nMaxime Petazzoni <max@signalfuse.com>\nMaximiliano Maccanti <maccanti@amazon.com>\nMaxwell <csuhp007@gmail.com>\nMeaglith Ma <genedna@gmail.com>\nmeejah <meejah@meejah.ca>\nMegan Kostick <mkostick@us.ibm.com>\nMehul Kar <mehul.kar@gmail.com>\nMei ChunTao <mei.chuntao@zte.com.cn>\nMengdi Gao <usrgdd@gmail.com>\nMenghui Chen <menghui.chen@alibaba-inc.com>\nMert Yazıcıoğlu <merty@users.noreply.github.com>\nmgniu <mgniu@dataman-inc.com>\nMicah Zoltu <micah@newrelic.com>\nMichael A. Smith <michael@smith-li.com>\nMichael Beskin <mrbeskin@gmail.com>\nMichael Bridgen <mikeb@squaremobius.net>\nMichael Brown <michael@netdirect.ca>\nMichael Chiang <mchiang@docker.com>\nMichael Crosby <crosbymichael@gmail.com>\nMichael Currie <mcurrie@bruceforceresearch.com>\nMichael Friis <friism@gmail.com>\nMichael Gorsuch <gorsuch@github.com>\nMichael Grauer <michael.grauer@kitware.com>\nMichael Holzheu <holzheu@linux.vnet.ibm.com>\nMichael Hudson-Doyle <michael.hudson@canonical.com>\nMichael Huettermann <michael@huettermann.net>\nMichael Irwin <mikesir87@gmail.com>\nMichael Kebe <michael.kebe@hkm.de>\nMichael Kuehn <micha@kuehn.io>\nMichael Käufl <docker@c.michael-kaeufl.de>\nMichael Neale <michael.neale@gmail.com>\nMichael Nussbaum <michael.nussbaum@getbraintree.com>\nMichael Prokop <github@michael-prokop.at>\nMichael Scharf <github@scharf.gr>\nMichael Spetsiotis <michael_spets@hotmail.com>\nMichael Stapelberg <michael+gh@stapelberg.de>\nMichael Steinert <mike.steinert@gmail.com>\nMichael Thies <michaelthies78@gmail.com>\nMichael Weidmann <michaelweidmann@web.de>\nMichael West <mwest@mdsol.com>\nMichael Zhao <michael.zhao@arm.com>\nMichal Fojtik <mfojtik@redhat.com>\nMichal Gebauer <mishak@mishak.net>\nMichal Jemala <michal.jemala@gmail.com>\nMichal Kostrzewa <michal.kostrzewa@codilime.com>\nMichal Minář <miminar@redhat.com>\nMichal Rostecki <mrostecki@opensuse.org>\nMichal Wieczorek <wieczorek-michal@wp.pl>\nMichaël Pailloncy <mpapo.dev@gmail.com>\nMichał Czeraszkiewicz <czerasz@gmail.com>\nMichał Gryko <github@odkurzacz.org>\nMichał Kosek <mihao@users.noreply.github.com>\nMichiel de Jong <michiel@unhosted.org>\nMickaël Fortunato <morsi.morsicus@gmail.com>\nMickaël Remars <mickael@remars.com>\nMiguel Angel Fernández <elmendalerenda@gmail.com>\nMiguel Morales <mimoralea@gmail.com>\nMiguel Perez <miguel@voyat.com>\nMihai Borobocea <MihaiBorob@gmail.com>\nMihuleacc Sergiu <mihuleac.sergiu@gmail.com>\nMikael Davranche <mikael.davranche@corp.ovh.com>\nMike Brown <brownwm@us.ibm.com>\nMike Bush <mpbush@gmail.com>\nMike Casas <mkcsas0@gmail.com>\nMike Chelen <michael.chelen@gmail.com>\nMike Danese <mikedanese@google.com>\nMike Dillon <mike@embody.org>\nMike Dougherty <mike.dougherty@docker.com>\nMike Estes <mike.estes@logos.com>\nMike Gaffney <mike@uberu.com>\nMike Goelzer <mike.goelzer@docker.com>\nMike Leone <mleone896@gmail.com>\nMike Lundy <mike@fluffypenguin.org>\nMike MacCana <mike.maccana@gmail.com>\nMike Naberezny <mike@naberezny.com>\nMike Snitzer <snitzer@redhat.com>\nMike Sul <mike.sul@foundries.io>\nmikelinjie <294893458@qq.com>\nMikhail Sobolev <mss@mawhrin.net>\nMiklos Szegedi <miklos.szegedi@cloudera.com>\nMilas Bowman <devnull@milas.dev>\nMilind Chawre <milindchawre@gmail.com>\nMiloslav Trmač <mitr@redhat.com>\nmingqing <limingqing@cyou-inc.com>\nMingzhen Feng <fmzhen@zju.edu.cn>\nMisty Stanley-Jones <misty@docker.com>\nMitch Capper <mitch.capper@gmail.com>\nMizuki Urushida <z11111001011@gmail.com>\nmlarcher <github@ringabell.org>\nMohammad Banikazemi <MBanikazemi@gmail.com>\nMohammad Nasirifar <farnasirim@gmail.com>\nMohammed Aaqib Ansari <maaquib@gmail.com>\nMohd Sadiq <mohdsadiq058@gmail.com>\nMohit Soni <mosoni@ebay.com>\nMoorthy RS <rsmoorthy@gmail.com>\nMorgan Bauer <mbauer@us.ibm.com>\nMorgante Pell <morgante.pell@morgante.net>\nMorgy93 <thomas@ulfertsprygoda.de>\nMorten Siebuhr <sbhr@sbhr.dk>\nMorton Fox <github@qslw.com>\nMoysés Borges <moysesb@gmail.com>\nmrfly <mr.wrfly@gmail.com>\nMrunal Patel <mrunalp@gmail.com>\nMuayyad Alsadi <alsadi@gmail.com>\nMuhammad Zohaib Aslam <zohaibse011@gmail.com>\nMustafa Akın <mustafa91@gmail.com>\nMuthukumar R <muthur@gmail.com>\nMyeongjoon Kim <kimmj8409@gmail.com>\nMáximo Cuadros <mcuadros@gmail.com>\nMédi-Rémi Hashim <medimatrix@users.noreply.github.com>\nNace Oroz <orkica@gmail.com>\nNahum Shalman <nshalman@omniti.com>\nNakul Pathak <nakulpathak3@hotmail.com>\nNalin Dahyabhai <nalin@redhat.com>\nNan Monnand Deng <monnand@gmail.com>\nNaoki Orii <norii@cs.cmu.edu>\nNatalie Parker <nparker@omnifone.com>\nNatanael Copa <natanael.copa@docker.com>\nNatasha Jarus <linuxmercedes@gmail.com>\nNate Brennand <nate.brennand@clever.com>\nNate Eagleson <nate@nateeag.com>\nNate Jones <nate@endot.org>\nNathan Baulch <nathan.baulch@gmail.com>\nNathan Carlson <carl4403@umn.edu>\nNathan Herald <me@nathanherald.com>\nNathan Hsieh <hsieh.nathan@gmail.com>\nNathan Kleyn <nathan@nathankleyn.com>\nNathan LeClaire <nathan.leclaire@docker.com>\nNathan McCauley <nathan.mccauley@docker.com>\nNathan Williams <nathan@teamtreehouse.com>\nNaveed Jamil <naveed.jamil@tenpearls.com>\nNeal McBurnett <neal@mcburnett.org>\nNeil Horman <nhorman@tuxdriver.com>\nNeil Peterson <neilpeterson@outlook.com>\nNelson Chen <crazysim@gmail.com>\nNeyazul Haque <nuhaque@gmail.com>\nNghia Tran <nghia@google.com>\nNiall O'Higgins <niallo@unworkable.org>\nNicholas E. Rabenau <nerab@gmx.at>\nNick Adcock <nick.adcock@docker.com>\nNick DeCoursin <n.decoursin@foodpanda.com>\nNick Irvine <nfirvine@nfirvine.com>\nNick Neisen <nwneisen@gmail.com>\nNick Parker <nikaios@gmail.com>\nNick Payne <nick@kurai.co.uk>\nNick Russo <nicholasjamesrusso@gmail.com>\nNick Santos <nick.santos@docker.com>\nNick Stenning <nick.stenning@digital.cabinet-office.gov.uk>\nNick Stinemates <nick@stinemates.org>\nNick Wood <nwood@microsoft.com>\nNickrenREN <yuquan.ren@easystack.cn>\nNicola Kabar <nicolaka@gmail.com>\nNicolas Borboën <ponsfrilus@gmail.com>\nNicolas De Loof <nicolas.deloof@gmail.com>\nNicolas Dudebout <nicolas.dudebout@gatech.edu>\nNicolas Goy <kuon@goyman.com>\nNicolas Kaiser <nikai@nikai.net>\nNicolas Sterchele <sterchele.nicolas@gmail.com>\nNicolas V Castet <nvcastet@us.ibm.com>\nNicolás Hock Isaza <nhocki@gmail.com>\nNiel Drummond <niel@drummond.lu>\nNigel Poulton <nigelpoulton@hotmail.com>\nNik Nyby <nikolas@gnu.org>\nNikhil Chawla <chawlanikhil24@gmail.com>\nNikolaMandic <mn080202@gmail.com>\nNikolas Garofil <nikolas.garofil@uantwerpen.be>\nNikolay Edigaryev <edigaryev@gmail.com>\nNikolay Milovanov <nmil@itransformers.net>\nningmingxiao <ning.mingxiao@zte.com.cn>\nNirmal Mehta <nirmalkmehta@gmail.com>\nNishant Totla <nishanttotla@gmail.com>\nNIWA Hideyuki <niwa.niwa@nifty.ne.jp>\nNoah Meyerhans <nmeyerha@amazon.com>\nNoah Treuhaft <noah.treuhaft@docker.com>\nNobodyOnSE <ich@sektor.selfip.com>\nnoducks <onemannoducks@gmail.com>\nNolan Darilek <nolan@thewordnerd.info>\nNolan Miles <nolanpmiles@gmail.com>\nNoriki Nakamura <noriki.nakamura@miraclelinux.com>\nnponeccop <andy.melnikov@gmail.com>\nNurahmadie <nurahmadie@gmail.com>\nNuutti Kotivuori <naked@iki.fi>\nnzwsch <hi@nzwsch.com>\nO.S. Tezer <ostezer@gmail.com>\nobjectified <objectified@gmail.com>\nOctol1ttle <l1ttleofficial@outlook.com>\nOdin Ugedal <odin@ugedal.com>\nOguz Bilgic <fisyonet@gmail.com>\nOh Jinkyun <tintypemolly@gmail.com>\nOhad Schneider <ohadschn@users.noreply.github.com>\nohmystack <jun.jiang02@ele.me>\nOle Reifschneider <mail@ole-reifschneider.de>\nOliver Neal <ItsVeryWindy@users.noreply.github.com>\nOliver Reason <oli@overrateddev.co>\nOlivier Gambier <dmp42@users.noreply.github.com>\nOlle Jonsson <olle.jonsson@gmail.com>\nOlli Janatuinen <olli.janatuinen@gmail.com>\nOlly Pomeroy <oppomeroy@gmail.com>\nOmri Shiv <Omri.Shiv@teradata.com>\nOnur Filiz <onur.filiz@microsoft.com>\nOriol Francès <oriolfa@gmail.com>\nOscar Bonilla <6f6231@gmail.com>\noscar.chen <2972789494@qq.com>\nOskar Niburski <oskarniburski@gmail.com>\nOtto Kekäläinen <otto@seravo.fi>\nOuyang Liduo <oyld0210@163.com>\nOvidio Mallo <ovidio.mallo@gmail.com>\nPanagiotis Moustafellos <pmoust@elastic.co>\nPaolo G. Giarrusso <p.giarrusso@gmail.com>\nPascal <pascalgn@users.noreply.github.com>\nPascal Bach <pascal.bach@siemens.com>\nPascal Borreli <pascal@borreli.com>\nPascal Hartig <phartig@rdrei.net>\nPatrick Böänziger <patrick.baenziger@bsi-software.com>\nPatrick Devine <patrick.devine@docker.com>\nPatrick Haas <patrickhaas@google.com>\nPatrick Hemmer <patrick.hemmer@gmail.com>\nPatrick St. laurent <patrick@saint-laurent.us>\nPatrick Stapleton <github@gdi2290.com>\nPatrik Cyvoct <patrik@ptrk.io>\npattichen <craftsbear@gmail.com>\nPaul \"TBBle\" Hampson <Paul.Hampson@Pobox.com>\nPaul <paul9869@gmail.com>\npaul <paul@inkling.com>\nPaul Annesley <paul@annesley.cc>\nPaul Bellamy <paul.a.bellamy@gmail.com>\nPaul Bowsher <pbowsher@globalpersonals.co.uk>\nPaul Furtado <pfurtado@hubspot.com>\nPaul Hammond <paul@paulhammond.org>\nPaul Jimenez <pj@place.org>\nPaul Kehrer <paul.l.kehrer@gmail.com>\nPaul Lietar <paul@lietar.net>\nPaul Liljenberg <liljenberg.paul@gmail.com>\nPaul Morie <pmorie@gmail.com>\nPaul Nasrat <pnasrat@gmail.com>\nPaul Seiffert <paul.seiffert@jimdo.com>\nPaul Weaver <pauweave@cisco.com>\nPaulo Gomes <pjbgf@linux.com>\nPaulo Ribeiro <paigr.io@gmail.com>\nPavel Lobashov <ShockwaveNN@gmail.com>\nPavel Matěja <pavel@verotel.cz>\nPavel Pletenev <cpp.create@gmail.com>\nPavel Pospisil <pospispa@gmail.com>\nPavel Sutyrin <pavel.sutyrin@gmail.com>\nPavel Tikhomirov <ptikhomirov@virtuozzo.com>\nPavlos Ratis <dastergon@gentoo.org>\nPavol Vargovcik <pallly.vargovcik@gmail.com>\nPawel Konczalski <mail@konczalski.de>\nPaweł Gronowski <pawel.gronowski@docker.com>\npayall4u <payall4u@qq.com>\nPeeyush Gupta <gpeeyush@linux.vnet.ibm.com>\nPeggy Li <peggyli.224@gmail.com>\nPei Su <sillyousu@gmail.com>\nPeng Tao <bergwolf@gmail.com>\nPenghan Wang <ph.wang@daocloud.io>\nPer Weijnitz <per.weijnitz@gmail.com>\nperhapszzy@sina.com <perhapszzy@sina.com>\nPete Woods <pete.woods@circleci.com>\nPeter Bourgon <peter@bourgon.org>\nPeter Braden <peterbraden@peterbraden.co.uk>\nPeter Bücker <peter.buecker@pressrelations.de>\nPeter Choi <phkchoi89@gmail.com>\nPeter Dave Hello <hsu@peterdavehello.org>\nPeter Edge <peter.edge@gmail.com>\nPeter Ericson <pdericson@gmail.com>\nPeter Esbensen <pkesbensen@gmail.com>\nPeter Jaffe <pjaffe@nevo.com>\nPeter Kang <peter@spell.run>\nPeter Malmgren <ptmalmgren@gmail.com>\nPeter Salvatore <peter@psftw.com>\nPeter Volpe <petervo@redhat.com>\nPeter Waller <p@pwaller.net>\nPetr Švihlík <svihlik.petr@gmail.com>\nPetros Angelatos <petrosagg@gmail.com>\nPhil <underscorephil@gmail.com>\nPhil Estes <estesp@gmail.com>\nPhil Sphicas <phil.sphicas@att.com>\nPhil Spitler <pspitler@gmail.com>\nPhilip Alexander Etling <paetling@gmail.com>\nPhilip K. Warren <pkwarren@gmail.com>\nPhilip Monroe <phil@philmonroe.com>\nPhilipp Fruck <dev@p-fruck.de>\nPhilipp Gillé <philipp.gille@gmail.com>\nPhilipp Wahala <philipp.wahala@gmail.com>\nPhilipp Weissensteiner <mail@philippweissensteiner.com>\nPhillip Alexander <git@phillipalexander.io>\nphineas <phin@phineas.io>\npidster <pid@pidster.com>\nPiergiuliano Bossi <pgbossi@gmail.com>\nPierre <py@poujade.org>\nPierre Carrier <pierre@meteor.com>\nPierre Dal-Pra <dalpra.pierre@gmail.com>\nPierre Wacrenier <pierre.wacrenier@gmail.com>\nPierre-Alain RIVIERE <pariviere@ippon.fr>\npinglanlu <pinglanlu@outlook.com>\nPiotr Bogdan <ppbogdan@gmail.com>\nPiotr Karbowski <piotr.karbowski@protonmail.ch>\nPorjo <porjo38@yahoo.com.au>\nPoul Kjeldager Sørensen <pks@s-innovations.net>\nPradeep Chhetri <pradeep@indix.com>\nPradip Dhara <pradipd@microsoft.com>\nPradipta Kr. Banerjee <bpradip@in.ibm.com>\nPrasanna Gautam <prasannagautam@gmail.com>\nPratik Karki <prertik@outlook.com>\nPrayag Verma <prayag.verma@gmail.com>\nPriya Wadhwa <priyawadhwa@google.com>\nProjjol Banerji <probaner23@gmail.com>\nPrzemek Hejman <przemyslaw.hejman@gmail.com>\nPuneet Pruthi <puneet.pruthi@oracle.com>\nPure White <daniel48@126.com>\npysqz <randomq@126.com>\nQiang Huang <h.huangqiang@huawei.com>\nQin TianHuan <tianhuan@bingotree.cn>\nQinglan Peng <qinglanpeng@zju.edu.cn>\nQuan Tian <tianquan@cloudin.cn>\nqudongfang <qudongfang@gmail.com>\nQuentin Brossard <qbrossard@gmail.com>\nQuentin Perez <qperez@ocs.online.net>\nQuentin Tayssier <qtayssier@gmail.com>\nr0n22 <cameron.regan@gmail.com>\nRachit Sharma <rachitsharma613@gmail.com>\nRadostin Stoyanov <rstoyanov1@gmail.com>\nRafael Fernández López <ereslibre@ereslibre.es>\nRafal Jeczalik <rjeczalik@gmail.com>\nRafe Colton <rafael.colton@gmail.com>\nRaghavendra K T <raghavendra.kt@linux.vnet.ibm.com>\nRaghuram Devarakonda <draghuram@gmail.com>\nRaja Sami <raja.sami@tenpearls.com>\nRajat Pandit <rp@rajatpandit.com>\nRajdeep Dua <dua_rajdeep@yahoo.com>\nRalf Sippl <ralf.sippl@gmail.com>\nRalle <spam@rasmusa.net>\nRalph Bean <rbean@redhat.com>\nRamkumar Ramachandra <artagnon@gmail.com>\nRamon Brooker <rbrooker@aetherealmind.com>\nRamon van Alteren <ramon@vanalteren.nl>\nRaviTeja Pothana <ravi-teja@live.com>\nRay Tsang <rayt@google.com>\nReadmeCritic <frankensteinbot@gmail.com>\nrealityone <realityone@me.com>\nRecursive Madman <recursive.madman@gmx.de>\nReficul <xuzhenglun@gmail.com>\nRegan McCooey <rmccooey27@aol.com>\nRemi Rampin <remirampin@gmail.com>\nRemy Suen <remy.suen@gmail.com>\nRenato Riccieri Santos Zannon <renato.riccieri@gmail.com>\nRenaud Gaubert <rgaubert@nvidia.com>\nRhys Hiltner <rhys@twitch.tv>\nRi Xu <xuri.me@gmail.com>\nRicardo N Feliciano <FelicianoTech@gmail.com>\nRich Horwood <rjhorwood@apple.com>\nRich Moyse <rich@moyse.us>\nRich Seymour <rseymour@gmail.com>\nRichard Burnison <rburnison@ebay.com>\nRichard Hansen <rhansen@rhansen.org>\nRichard Harvey <richard@squarecows.com>\nRichard Mathie <richard.mathie@amey.co.uk>\nRichard Metzler <richard@paadee.com>\nRichard Scothern <richard.scothern@gmail.com>\nRicho Healey <richo@psych0tik.net>\nRick Bradley <rick@users.noreply.github.com>\nRick van de Loo <rickvandeloo@gmail.com>\nRick Wieman <git@rickw.nl>\nRik Nijessen <rik@keefo.nl>\nRiku Voipio <riku.voipio@linaro.org>\nRiley Guerin <rileytg.dev@gmail.com>\nRitesh H Shukla <sritesh@vmware.com>\nRiyaz Faizullabhoy <riyaz.faizullabhoy@docker.com>\nRob Cowsill <42620235+rcowsill@users.noreply.github.com>\nRob Gulewich <rgulewich@netflix.com>\nRob Murray <rob.murray@docker.com>\nRob Vesse <rvesse@dotnetrdf.org>\nRobert Bachmann <rb@robertbachmann.at>\nRobert Bittle <guywithnose@gmail.com>\nRobert Obryk <robryk@gmail.com>\nRobert Schneider <mail@shakeme.info>\nRobert Shade <robert.shade@gmail.com>\nRobert Stern <lexandro2000@gmail.com>\nRobert Terhaar <rterhaar@atlanticdynamic.com>\nRobert Wallis <smilingrob@gmail.com>\nRobert Wang <robert@arctic.tw>\nRoberto G. Hashioka <roberto.hashioka@docker.com>\nRoberto Muñoz Fernández <robertomf@gmail.com>\nRobin Naundorf <r.naundorf@fh-muenster.de>\nRobin Schneider <ypid@riseup.net>\nRobin Speekenbrink <robin@kingsquare.nl>\nRobin Thoni <robin@rthoni.com>\nrobpc <rpcann@gmail.com>\nRodolfo Carvalho <rhcarvalho@gmail.com>\nRodrigo Campos <rodrigoca@microsoft.com>\nRodrigo Vaz <rodrigo.vaz@gmail.com>\nRoel Van Nyen <roel.vannyen@gmail.com>\nRoger Peppe <rogpeppe@gmail.com>\nRohit Jnagal <jnagal@google.com>\nRohit Kadam <rohit.d.kadam@gmail.com>\nRohit Kapur <rkapur@flatiron.com>\nRojin George <rojingeorge@huawei.com>\nRoland Huß <roland@jolokia.org>\nRoland Kammerer <roland.kammerer@linbit.com>\nRoland Moriz <rmoriz@users.noreply.github.com>\nRoma Sokolov <sokolov.r.v@gmail.com>\nRoman Dudin <katrmr@gmail.com>\nRoman Mazur <roman@balena.io>\nRoman Strashkin <roman.strashkin@gmail.com>\nRoman Volosatovs <roman.volosatovs@docker.com>\nRoman Zabaluev <gpg@haarolean.dev>\nRon Smits <ron.smits@gmail.com>\nRon Williams <ron.a.williams@gmail.com>\nRong Gao <gaoronggood@163.com>\nRong Zhang <rongzhang@alauda.io>\nRongxiang Song <tinysong1226@gmail.com>\nRony Weng <ronyweng@synology.com>\nroot <docker-dummy@example.com>\nroot <root@lxdebmas.marist.edu>\nroot <root@ubuntu-14.04-amd64-vbox>\nroot <root@webm215.cluster016.ha.ovh.net>\nRory Hunter <roryhunter2@gmail.com>\nRory McCune <raesene@gmail.com>\nRoss Boucher <rboucher@gmail.com>\nRovanion Luckey <rovanion.luckey@gmail.com>\nRoy Reznik <roy@wiz.io>\nRoyce Remer <royceremer@gmail.com>\nRozhnov Alexandr <nox73@ya.ru>\nRudolph Gottesheim <r.gottesheim@loot.at>\nRui Cao <ruicao@alauda.io>\nRui JingAn <quiterace@gmail.com>\nRui Lopes <rgl@ruilopes.com>\nRuilin Li <liruilin4@huawei.com>\nRunshen Zhu <runshen.zhu@gmail.com>\nRuss Magee <rmagee@gmail.com>\nRyan Abrams <rdabrams@gmail.com>\nRyan Anderson <anderson.ryanc@gmail.com>\nRyan Aslett <github@mixologic.com>\nRyan Barry <rbarry@mirantis.com>\nRyan Belgrave <rmb1993@gmail.com>\nRyan Campbell <campbellr@gmail.com>\nRyan Detzel <ryan.detzel@gmail.com>\nRyan Fowler <rwfowler@gmail.com>\nRyan Liu <ryanlyy@me.com>\nRyan McLaughlin <rmclaughlin@insidesales.com>\nRyan O'Donnell <odonnellryanc@gmail.com>\nRyan Seto <ryanseto@yak.net>\nRyan Shea <sheabot03@gmail.com>\nRyan Simmen <ryan.simmen@gmail.com>\nRyan Stelly <ryan.stelly@live.com>\nRyan Thomas <rthomas@atlassian.com>\nRyan Trauntvein <rtrauntvein@novacoast.com>\nRyan Wallner <ryan.wallner@clusterhq.com>\nRyan Zhang <ryan.zhang@docker.com>\nryancooper7 <ryan.cooper7@gmail.com>\nRyanDeng <sheldon.d1018@gmail.com>\nRyo Nakao <nakabonne@gmail.com>\nRyoga Saito <contact@proelbtn.com>\nRégis Behmo <regis@behmo.com>\nRémy Greinhofer <remy.greinhofer@livelovely.com>\ns. rannou <mxs@sbrk.org>\nSabin Basyal <sabin.basyal@gmail.com>\nSachin Joshi <sachin_jayant_joshi@hotmail.com>\nSagar Hani <sagarhani33@gmail.com>\nSainath Grandhi <sainath.grandhi@intel.com>\nSakeven Jiang <jc5930@sina.cn>\nSalahuddin Khan <salah@docker.com>\nSally O'Malley <somalley@redhat.com>\nSam Abed <sam.abed@gmail.com>\nSam Alba <sam.alba@gmail.com>\nSam Bailey <cyprix@cyprix.com.au>\nSam J Sharpe <sam.sharpe@digital.cabinet-office.gov.uk>\nSam Neirinck <sam@samneirinck.com>\nSam Reis <sreis@atlassian.com>\nSam Rijs <srijs@airpost.net>\nSam Thibault <sam.thibault@docker.com>\nSam Whited <sam@samwhited.com>\nSambuddha Basu <sambuddhabasu1@gmail.com>\nSami Wagiaalla <swagiaal@redhat.com>\nSamuel Andaya <samuel@andaya.net>\nSamuel Dion-Girardeau <samuel.diongirardeau@gmail.com>\nSamuel Karp <me@samuelkarp.com>\nSamuel PHAN <samuel-phan@users.noreply.github.com>\nsanchayanghosh <sanchayanghosh@outlook.com>\nSandeep Bansal <sabansal@microsoft.com>\nSankar சங்கர் <sankar.curiosity@gmail.com>\nSanket Saurav <sanketsaurav@gmail.com>\nSanthosh Manohar <santhosh@docker.com>\nsapphiredev <se.imas.kr@gmail.com>\nSargun Dhillon <sargun@netflix.com>\nSascha Andres <sascha.andres@outlook.com>\nSascha Grunert <sgrunert@suse.com>\nSataQiu <qiushida@beyondcent.com>\nSatnam Singh <satnam@raintown.org>\nSatoshi Amemiya <satoshi_amemiya@voyagegroup.com>\nSatoshi Tagomori <tagomoris@gmail.com>\nScott Bessler <scottbessler@gmail.com>\nScott Collier <emailscottcollier@gmail.com>\nScott Johnston <scott@docker.com>\nScott Moser <smoser@brickies.net>\nScott Percival <scottp@lastyard.com>\nScott Stamp <scottstamp851@gmail.com>\nScott Walls <sawalls@umich.edu>\nsdreyesg <sdreyesg@gmail.com>\nSean Christopherson <sean.j.christopherson@intel.com>\nSean Cronin <seancron@gmail.com>\nSean Lee <seanlee@tw.ibm.com>\nSean McIntyre <s.mcintyre@xverba.ca>\nSean OMeara <sean@chef.io>\nSean P. Kane <skane@newrelic.com>\nSean Rodman <srodman7689@gmail.com>\nSebastiaan van Steenis <mail@superseb.nl>\nSebastiaan van Stijn <github@gone.nl>\nSebastian Höffner <sebastian.hoeffner@mevis.fraunhofer.de>\nSebastian Radloff <sradloff23@gmail.com>\nSebastian Thomschke <sebthom@users.noreply.github.com>\nSebastien Goasguen <runseb@gmail.com>\nSenthil Kumar Selvaraj <senthil.thecoder@gmail.com>\nSenthil Kumaran <senthil@uthcode.com>\nSeongJae Park <sj38.park@gmail.com>\nSeongyeol Lim <seongyeol37@gmail.com>\nSerge Hallyn <serge.hallyn@ubuntu.com>\nSergey Alekseev <sergey.alekseev.minsk@gmail.com>\nSergey Evstifeev <sergey.evstifeev@gmail.com>\nSergii Kabashniuk <skabashnyuk@codenvy.com>\nSergio Lopez <slp@redhat.com>\nSerhat Gülçiçek <serhat25@gmail.com>\nSerhii Nakon <serhii.n@thescimus.com>\nSeungUkLee <lsy931106@gmail.com>\nSevki Hasirci <s@sevki.org>\nShane Canon <scanon@lbl.gov>\nShane da Silva <shane@dasilva.io>\nShaun Kaasten <shaunk@gmail.com>\nShaun Thompson <shaun.thompson@docker.com>\nshaunol <shaunol@gmail.com>\nShawn Landden <shawn@churchofgit.com>\nShawn Siefkas <shawn.siefkas@meredith.com>\nshawnhe <shawnhe@shawnhedeMacBook-Pro.local>\nShayan Pooya <shayan@liveve.org>\nShayne Wang <shaynexwang@gmail.com>\nShekhar Gulati <shekhargulati84@gmail.com>\nSheng Yang <sheng@yasker.org>\nShengbo Song <thomassong@tencent.com>\nShengjing Zhu <zhsj@debian.org>\nShev Yan <yandong_8212@163.com>\nShih-Yuan Lee <fourdollars@gmail.com>\nShihao Xia <charlesxsh@hotmail.com>\nShijiang Wei <mountkin@gmail.com>\nShijun Qin <qinshijun16@mails.ucas.ac.cn>\nShishir Mahajan <shishir.mahajan@redhat.com>\nShoubhik Bose <sbose78@gmail.com>\nShourya Sarcar <shourya.sarcar@gmail.com>\nShreenidhi Shedi <shreenidhi.shedi@broadcom.com>\nShu-Wai Chow <shu-wai.chow@seattlechildrens.org>\nshuai-z <zs.broccoli@gmail.com>\nShukui Yang <yangshukui@huawei.com>\nSian Lerk Lau <kiawin@gmail.com>\nSiarhei Rasiukevich <s_rasiukevich@wargaming.net>\nSidhartha Mani <sidharthamn@gmail.com>\nsidharthamani <sid@rancher.com>\nSilas Sewell <silas@sewell.org>\nSilvan Jegen <s.jegen@gmail.com>\nSimão Reis <smnrsti@gmail.com>\nSimon Barendse <simon.barendse@gmail.com>\nSimon Eskildsen <sirup@sirupsen.com>\nSimon Ferquel <simon.ferquel@docker.com>\nSimon Leinen <simon.leinen@gmail.com>\nSimon Menke <simon.menke@gmail.com>\nSimon Taranto <simon.taranto@gmail.com>\nSimon Vikstrom <pullreq@devsn.se>\nSindhu S <sindhus@live.in>\nSjoerd Langkemper <sjoerd-github@linuxonly.nl>\nskanehira <sho19921005@gmail.com>\nSmark Meng <smark@freecoop.net>\nSolganik Alexander <solganik@gmail.com>\nSolomon Hykes <solomon@docker.com>\nSong Gao <song@gao.io>\nSoshi Katsuta <soshi.katsuta@gmail.com>\nSotiris Salloumis <sotiris.salloumis@gmail.com>\nSoulou <leo@unbekandt.eu>\nSpencer Brown <spencer@spencerbrown.org>\nSpencer Smith <robertspencersmith@gmail.com>\nSpike Curtis <spike.curtis@metaswitch.com>\nSridatta Thatipamala <sthatipamala@gmail.com>\nSridhar Ratnakumar <sridharr@activestate.com>\nSrini Brahmaroutu <srbrahma@us.ibm.com>\nSrinivasan Srivatsan <srinivasan.srivatsan@hpe.com>\nStaf Wagemakers <staf@wagemakers.be>\nStanislav Bondarenko <stanislav.bondarenko@gmail.com>\nStanislav Levin <slev@altlinux.org>\nSteeve Morin <steeve.morin@gmail.com>\nStefan Berger <stefanb@linux.vnet.ibm.com>\nStefan Gehrig <stefan.gehrig.hn@googlemail.com>\nStefan J. Wernli <swernli@microsoft.com>\nStefan Praszalowicz <stefan@greplin.com>\nStefan S. <tronicum@user.github.com>\nStefan Scherer <stefan.scherer@docker.com>\nStefan Staudenmeyer <doerte@instana.com>\nStefan Weil <sw@weilnetz.de>\nSteffen Butzer <steffen.butzer@outlook.com>\nStephan Henningsen <stephan-henningsen@users.noreply.github.com>\nStephan Spindler <shutefan@gmail.com>\nStephen Benjamin <stephen@redhat.com>\nStephen Crosby <stevecrozz@gmail.com>\nStephen Day <stevvooe@gmail.com>\nStephen Drake <stephen@xenolith.net>\nStephen Rust <srust@blockbridge.com>\nSteve Desmond <steve@vtsv.ca>\nSteve Dougherty <steve@asksteved.com>\nSteve Durrheimer <s.durrheimer@gmail.com>\nSteve Francia <steve.francia@gmail.com>\nSteve Koch <stevekochscience@gmail.com>\nSteven Burgess <steven.a.burgess@hotmail.com>\nSteven Erenst <stevenerenst@gmail.com>\nSteven Hartland <steven.hartland@multiplay.co.uk>\nSteven Iveson <sjiveson@outlook.com>\nSteven Merrill <steven.merrill@gmail.com>\nSteven Richards <steven@axiomzen.co>\nSteven Taylor <steven.taylor@me.com>\nStéphane Este-Gracias <sestegra@gmail.com>\nStig Larsson <stig@larsson.dev>\nSu Wang <su.wang@docker.com>\nSubhajit Ghosh <isubuz.g@gmail.com>\nSujith Haridasan <sujith.h@gmail.com>\nSun Gengze <690388648@qq.com>\nSun Jianbo <wonderflow.sun@gmail.com>\nSune Keller <sune.keller@gmail.com>\nSunny Gogoi <indiasuny000@gmail.com>\nSuryakumar Sudar <surya.trunks@gmail.com>\nSven Dowideit <SvenDowideit@home.org.au>\nSwapnil Daingade <swapnil.daingade@gmail.com>\nSylvain Baubeau <lebauce@gmail.com>\nSylvain Bellemare <sylvain@ascribe.io>\nSébastien <sebastien@yoozio.com>\nSébastien HOUZÉ <cto@verylastroom.com>\nSébastien Luttringer <seblu@seblu.net>\nSébastien Stormacq <sebsto@users.noreply.github.com>\nSören Tempel <soeren+git@soeren-tempel.net>\nTabakhase <mail@tabakhase.com>\nTadej Janež <tadej.j@nez.si>\nTadeusz Dudkiewicz <tadeusz.dudkiewicz@rtbhouse.com>\nTakuto Sato <tockn.jp@gmail.com>\ntang0th <tang0th@gmx.com>\nTangi Colin <tangicolin@gmail.com>\nTatsuki Sugiura <sugi@nemui.org>\nTatsushi Inagaki <e29253@jp.ibm.com>\nTaylan Isikdemir <taylani@google.com>\nTaylor Jones <monitorjbl@gmail.com>\ntcpdumppy <847462026@qq.com>\nTed M. Young <tedyoung@gmail.com>\nTehmasp Chaudhri <tehmasp@gmail.com>\nTejaswini Duggaraju <naduggar@microsoft.com>\nTejesh Mehta <tejesh.mehta@gmail.com>\nTerry Chu <zue.hterry@gmail.com>\nterryding77 <550147740@qq.com>\nThatcher Peskens <thatcher@docker.com>\ntheadactyl <thea.lamkin@gmail.com>\nThell 'Bo' Fowler <thell@tbfowler.name>\nThermionix <bond711@gmail.com>\nThiago Alves Silva <thiago.alves@aurea.com>\nThijs Terlouw <thijsterlouw@gmail.com>\nThomas Bikeev <thomas.bikeev@mac.com>\nThomas Frössman <thomasf@jossystem.se>\nThomas Gazagnaire <thomas@gazagnaire.org>\nThomas Graf <tgraf@suug.ch>\nThomas Grainger <tagrain@gmail.com>\nThomas Hansen <thomas.hansen@gmail.com>\nThomas Ledos <thomas.ledos92@gmail.com>\nThomas Leonard <thomas.leonard@docker.com>\nThomas Léveil <thomasleveil@gmail.com>\nThomas Orozco <thomas@orozco.fr>\nThomas Riccardi <riccardi@systran.fr>\nThomas Schroeter <thomas@cliqz.com>\nThomas Sjögren <konstruktoid@users.noreply.github.com>\nThomas Swift <tgs242@gmail.com>\nThomas Tanaka <thomas.tanaka@oracle.com>\nThomas Texier <sharkone@en-mousse.org>\nTi Zhou <tizhou1986@gmail.com>\nTiago Seabra <tlgs@users.noreply.github.com>\nTianon Gravi <admwiggin@gmail.com>\nTianyi Wang <capkurmagati@gmail.com>\nTibor Vass <teabee89@gmail.com>\nTiffany Jernigan <tiffany.f.j@gmail.com>\nTiffany Low <tiffany@box.com>\nTill Claassen <pixelistik@users.noreply.github.com>\nTill Wegmüller <toasterson@gmail.com>\nTim <elatllat@gmail.com>\nTim Bart <tim@fewagainstmany.com>\nTim Bosse <taim@bosboot.org>\nTim Dettrick <t.dettrick@uq.edu.au>\nTim Düsterhus <tim@bastelstu.be>\nTim Hockin <thockin@google.com>\nTim Potter <tpot@hpe.com>\nTim Ruffles <oi@truffles.me.uk>\nTim Smith <timbot@google.com>\nTim Terhorst <mynamewastaken+git@gmail.com>\nTim Wagner <tim.wagner@freenet.ag>\nTim Wang <timwangdev@gmail.com>\nTim Waugh <twaugh@redhat.com>\nTim Wraight <tim.wraight@tangentlabs.co.uk>\nTim Zju <21651152@zju.edu.cn>\ntimchenxiaoyu <837829664@qq.com>\ntimfeirg <kkcocogogo@gmail.com>\nTimo Rothenpieler <timo@rothenpieler.org>\nTimothy Hobbs <timothyhobbs@seznam.cz>\ntjwebb123 <tjwebb123@users.noreply.github.com>\ntobe <tobegit3hub@gmail.com>\nTobias Bieniek <Tobias.Bieniek@gmx.de>\nTobias Bradtke <webwurst@gmail.com>\nTobias Gesellchen <tobias@gesellix.de>\nTobias Klauser <tklauser@distanz.ch>\nTobias Munk <schmunk@usrbin.de>\nTobias Pfandzelter <tobias@pfandzelter.com>\nTobias Schmidt <ts@soundcloud.com>\nTobias Schwab <tobias.schwab@dynport.de>\nTodd Crane <todd@toddcrane.com>\nTodd Lunter <tlunter@gmail.com>\nTodd Whiteman <todd.whiteman@joyent.com>\nToli Kuznets <toli@docker.com>\nTom Barlow <tomwbarlow@gmail.com>\nTom Booth <tombooth@gmail.com>\nTom Denham <tom@tomdee.co.uk>\nTom Fotherby <tom+github@peopleperhour.com>\nTom Howe <tom.howe@enstratius.com>\nTom Hulihan <hulihan.tom159@gmail.com>\nTom Maaswinkel <tom.maaswinkel@12wiki.eu>\nTom Parker <palfrey@tevp.net>\nTom Sweeney <tsweeney@redhat.com>\nTom Wilkie <tom.wilkie@gmail.com>\nTom X. Tobin <tomxtobin@tomxtobin.com>\nTom Zhao <zlwangel@gmail.com>\nTomas Janousek <tomi@nomi.cz>\nTomas Kral <tomas.kral@gmail.com>\nTomas Tomecek <ttomecek@redhat.com>\nTomasz Kopczynski <tomek@kopczynski.net.pl>\nTomasz Lipinski <tlipinski@users.noreply.github.com>\nTomasz Nurkiewicz <nurkiewicz@gmail.com>\nTomek Mańko <tomek.manko@railgun-solutions.com>\nTommaso Visconti <tommaso.visconti@gmail.com>\nTomoya Tabuchi <t@tomoyat1.com>\nTomáš Hrčka <thrcka@redhat.com>\nTomáš Virtus <nechtom@gmail.com>\ntonic <tonicbupt@gmail.com>\nTonny Xu <tonny.xu@gmail.com>\nTony Abboud <tdabboud@hotmail.com>\nTony Daws <tony@daws.ca>\nTony Miller <mcfiredrill@gmail.com>\ntoogley <toogley@mailbox.org>\nTorstein Husebø <torstein@huseboe.net>\nToshiaki Makita <makita.toshiaki@lab.ntt.co.jp>\nTõnis Tiigi <tonistiigi@gmail.com>\nTrace Andreason <tandreason@gmail.com>\ntracylihui <793912329@qq.com>\nTrapier Marshall <tmarshall@mirantis.com>\nTravis Cline <travis.cline@gmail.com>\nTravis Thieman <travis.thieman@gmail.com>\nTrent Ogren <tedwardo2@gmail.com>\nTrevor <trevinwoodstock@gmail.com>\nTrevor Pounds <trevor.pounds@gmail.com>\nTrevor Sullivan <pcgeek86@gmail.com>\nTrishna Guha <trishnaguha17@gmail.com>\nTristan Carel <tristan@cogniteev.com>\nTroy Denton <trdenton@gmail.com>\nTudor Brindus <me@tbrindus.ca>\nTy Alexander <ty.alexander@sendgrid.com>\nTycho Andersen <tycho@docker.com>\nTyler Brock <tyler.brock@gmail.com>\nTyler Brown <tylers.pile@gmail.com>\nTzu-Jung Lee <roylee17@gmail.com>\nuhayate <uhayate.gong@daocloud.io>\nUlysse Carion <ulyssecarion@gmail.com>\nUmesh Yadav <umesh4257@gmail.com>\nUtz Bacher <utz.bacher@de.ibm.com>\nvagrant <vagrant@ubuntu-14.04-amd64-vbox>\nVaidas Jablonskis <jablonskis@gmail.com>\nValentin Kulesh <valentin.kulesh@virtuozzo.com>\nvanderliang <lansheng@meili-inc.com>\nVelko Ivanov <vivanov@deeperplane.com>\nVeres Lajos <vlajos@gmail.com>\nVictor Algaze <valgaze@gmail.com>\nVictor Coisne <victor.coisne@dotcloud.com>\nVictor Costan <costan@gmail.com>\nVictor I. Wood <viw@t2am.com>\nVictor Lyuboslavsky <victor@victoreda.com>\nVictor Marmol <vmarmol@google.com>\nVictor Palma <palma.victor@gmail.com>\nVictor Toni <victor.toni@gmail.com>\nVictor Vieux <victor.vieux@docker.com>\nVictoria Bialas <victoria.bialas@docker.com>\nVijaya Kumar K <vijayak@caviumnetworks.com>\nVikas Choudhary <choudharyvikas16@gmail.com>\nVikram bir Singh <vsingh@mirantis.com>\nViktor Stanchev <me@viktorstanchev.com>\nViktor Vojnovski <viktor.vojnovski@amadeus.com>\nVinayRaghavanKS <raghavan.vinay@gmail.com>\nVincent Batts <vbatts@redhat.com>\nVincent Bernat <vincent@bernat.ch>\nVincent Boulineau <vincent.boulineau@datadoghq.com>\nVincent Demeester <vincent.demeester@docker.com>\nVincent Giersch <vincent.giersch@ovh.net>\nVincent Mayers <vincent.mayers@inbloom.org>\nVincent Woo <me@vincentwoo.com>\nVinod Kulkarni <vinod.kulkarni@gmail.com>\nVishal Doshi <vishal.doshi@gmail.com>\nVishnu Kannan <vishnuk@google.com>\nVitaly Ostrosablin <vostrosablin@virtuozzo.com>\nVitor Anjos <bartier@users.noreply.github.com>\nVitor Monteiro <vmrmonteiro@gmail.com>\nVivek Agarwal <me@vivek.im>\nVivek Dasgupta <vdasgupt@redhat.com>\nVivek Goyal <vgoyal@redhat.com>\nVladimir Bulyga <xx@ccxx.cc>\nVladimir Kirillov <proger@wilab.org.ua>\nVladimir Pouzanov <farcaller@google.com>\nVladimir Rutsky <altsysrq@gmail.com>\nVladimir Varankin <nek.narqo+git@gmail.com>\nVladimirAus <v_roudakov@yahoo.com>\nVladislav Kolesnikov <vkolesnikov@beget.ru>\nVlastimil Zeman <vlastimil.zeman@diffblue.com>\nVojtech Vitek (V-Teq) <vvitek@redhat.com>\nvoloder <110066198+voloder@users.noreply.github.com>\nWalter Leibbrandt <github@wrl.co.za>\nWalter Stanish <walter@pratyeka.org>\nWang Chao <chao.wang@ucloud.cn>\nWang Guoliang <liangcszzu@163.com>\nWang Jie <wangjie5@chinaskycloud.com>\nWang Long <long.wanglong@huawei.com>\nWang Ping <present.wp@icloud.com>\nWang Xing <hzwangxing@corp.netease.com>\nWang Yuexiao <wang.yuexiao@zte.com.cn>\nWang Yumu <37442693@qq.com>\nwanghuaiqing <wanghuaiqing@loongson.cn>\nWard Vandewege <ward@jhvc.com>\nWarheadsSE <max@warheads.net>\nWassim Dhif <wassimdhif@gmail.com>\nWataru Ishida <ishida.wataru@lab.ntt.co.jp>\nWayne Chang <wayne@neverfear.org>\nWayne Song <wsong@docker.com>\nweebney <weebney@gmail.com>\nWeerasak Chongnguluam <singpor@gmail.com>\nWei Fu <fuweid89@gmail.com>\nWei Wu <wuwei4455@gmail.com>\nWei-Ting Kuo <waitingkuo0527@gmail.com>\nweipeng <weipeng@tuscloud.io>\nweiyan <weiyan3@huawei.com>\nWeiyang Zhu <cnresonant@gmail.com>\nWen Cheng Ma <wenchma@cn.ibm.com>\nWendel Fleming <wfleming@usc.edu>\nWenjun Tang <tangwj2@lenovo.com>\nWenkai Yin <yinw@vmware.com>\nwenlxie <wenlxie@ebay.com>\nWenxuan Zhao <viz@linux.com>\nWenyu You <21551128@zju.edu.cn>\nWenzhi Liang <wenzhi.liang@gmail.com>\nWes Morgan <cap10morgan@gmail.com>\nWesley Pettit <wppttt@amazon.com>\nWewang Xiaorenfine <wang.xiaoren@zte.com.cn>\nWiktor Kwapisiewicz <wiktor@metacode.biz>\nWill Dietz <w@wdtz.org>\nWill Rouesnel <w.rouesnel@gmail.com>\nWill Weaver <monkey@buildingbananas.com>\nwillhf <willhf@gmail.com>\nWilliam Delanoue <william.delanoue@gmail.com>\nWilliam Henry <whenry@redhat.com>\nWilliam Hubbs <w.d.hubbs@gmail.com>\nWilliam Martin <wmartin@pivotal.io>\nWilliam Riancho <wr.wllm@gmail.com>\nWilliam Thurston <thurstw@amazon.com>\nWilson Júnior <wilsonpjunior@gmail.com>\nWing-Kam Wong <wingkwong.code@gmail.com>\nWiseTrem <shepelyov.g@gmail.com>\nWolfgang Nagele <mail@wnagele.com>\nWolfgang Powisch <powo@powo.priv.at>\nWonjun Kim <wonjun.kim@navercorp.com>\nWuLonghui <wlh6666@qq.com>\nxamyzhao <x.amy.zhao@gmail.com>\nXia Wu <xwumzn@amazon.com>\nXian Chaobo <xianchaobo@huawei.com>\nXianglin Gao <xlgao@zju.edu.cn>\nXianjie <guxianjie@gmail.com>\nXianlu Bird <xianlubird@gmail.com>\nXiao YongBiao <xyb4638@gmail.com>\nXiao Zhang <xiaozhang0210@hotmail.com>\nXiaoBing Jiang <s7v7nislands@gmail.com>\nXiaodong Liu <liuxiaodong@loongson.cn>\nXiaodong Zhang <a4012017@sina.com>\nXiaohua Ding <xiao_hua_ding@sina.cn>\nXiaoxi He <xxhe@alauda.io>\nXiaoxu Chen <chenxiaoxu14@otcaix.iscas.ac.cn>\nXiaoyu Zhang <zhang.xiaoyu33@zte.com.cn>\nxichengliudui <1693291525@qq.com>\nxiekeyang <xiekeyang@huawei.com>\nXimo Guanter Gonzálbez <joaquin.guantergonzalbez@telefonica.com>\nxin.li <xin.li@daocloud.io>\nXinbo Weng <xihuanbo_0521@zju.edu.cn>\nXinfeng Liu <XinfengLiu@icloud.com>\nXinzi Zhou <imdreamrunner@gmail.com>\nXiuming Chen <cc@cxm.cc>\nXuecong Liao <satorulogic@gmail.com>\nxuzhaokui <cynicholas@gmail.com>\nYadnyawalkya Tale <ytale@redhat.com>\nYahya <ya7yaz@gmail.com>\nyalpul <yalpul@gmail.com>\nYAMADA Tsuyoshi <tyamada@minimum2scp.org>\nYamasaki Masahide <masahide.y@gmail.com>\nYamazaki Masashi <masi19bw@gmail.com>\nYan Feng <yanfeng2@huawei.com>\nYan Zhu <yanzhu@alauda.io>\nYang Bai <hamo.by@gmail.com>\nYang Li <idealhack@gmail.com>\nYang Pengfei <yangpengfei4@huawei.com>\nyangchenliang <yangchenliang@huawei.com>\nYann Autissier <yann.autissier@gmail.com>\nYanqiang Miao <miao.yanqiang@zte.com.cn>\nYao Zaiyong <yaozaiyong@hotmail.com>\nYash Murty <yashmurty@gmail.com>\nYassine Tijani <yasstij11@gmail.com>\nYasunori Mahata <nori@mahata.net>\nYazhong Liu <yorkiefixer@gmail.com>\nYestin Sun <sunyi0804@gmail.com>\nYi EungJun <eungjun.yi@navercorp.com>\nYibai Zhang <xm1994@gmail.com>\nYihang Ho <hoyihang5@gmail.com>\nYing Li <ying.li@docker.com>\nYohei Ueda <yohei@jp.ibm.com>\nYong Tang <yong.tang.github@outlook.com>\nYongxin Li <yxli@alauda.io>\nYongzhi Pan <panyongzhi@gmail.com>\nYosef Fertel <yfertel@gmail.com>\nYou-Sheng Yang (楊有勝) <vicamo@gmail.com>\nyoucai <omegacoleman@gmail.com>\nYoucef YEKHLEF <yyekhlef@gmail.com>\nYoufu Zhang <zhangyoufu@gmail.com>\nYR Chen <stevapple@icloud.com>\nYu Changchun <yuchangchun1@huawei.com>\nYu Chengxia <yuchengxia@huawei.com>\nYu Peng <yu.peng36@zte.com.cn>\nYu-Ju Hong <yjhong@google.com>\nYuan Sun <sunyuan3@huawei.com>\nYuanhong Peng <pengyuanhong@huawei.com>\nYue Zhang <zy675793960@yeah.net>\nYufei Xiong <yufei.xiong@qq.com>\nYuhao Fang <fangyuhao@gmail.com>\nYuichiro Kaneko <spiketeika@gmail.com>\nYujiOshima <yuji.oshima0x3fd@gmail.com>\nYunxiang Huang <hyxqshk@vip.qq.com>\nYurii Rashkovskii <yrashk@gmail.com>\nYusuf Tarık Günaydın <yusuf_tarik@hotmail.com>\nYves Blusseau <90z7oey02@sneakemail.com>\nYves Junqueira <yves.junqueira@gmail.com>\nZac Dover <zdover@redhat.com>\nZach Borboa <zachborboa@gmail.com>\nZach Gershman <zachgersh@gmail.com>\nZachary Jaffee <zjaffee@us.ibm.com>\nZain Memon <zain@inzain.net>\nZaiste! <oh@zaiste.net>\nZane DeGraffenried <zane.deg@gmail.com>\nZefan Li <lizefan@huawei.com>\nZen Lin(Zhinan Lin) <linzhinan@huawei.com>\nZhang Kun <zkazure@gmail.com>\nZhang Wei <zhangwei555@huawei.com>\nZhang Wentao <zhangwentao234@huawei.com>\nzhangguanzhang <zhangguanzhang@qq.com>\nZhangHang <stevezhang2014@gmail.com>\nzhangxianwei <xianwei.zw@alibaba-inc.com>\nZhenan Ye <21551168@zju.edu.cn>\nzhenghenghuo <zhenghenghuo@zju.edu.cn>\nZhenhai Gao <gaozh1988@live.com>\nZhenkun Bi <bi.zhenkun@zte.com.cn>\nZhiPeng Lu <lu.zhipeng@zte.com.cn>\nzhipengzuo <zuozhipeng@baidu.com>\nZhou Hao <zhouhao@cn.fujitsu.com>\nZhoulin Xie <zhoulin.xie@daocloud.io>\nZhu Guihua <zhugh.fnst@cn.fujitsu.com>\nZhu Kunjia <zhu.kunjia@zte.com.cn>\nZhuoyun Wei <wzyboy@wzyboy.org>\nZiheng Liu <lzhfromustc@gmail.com>\nZilin Du <zilin.du@gmail.com>\nzimbatm <zimbatm@zimbatm.com>\nZiming Dong <bnudzm@foxmail.com>\nZJUshuaizhou <21551191@zju.edu.cn>\nzmarouf <zeid.marouf@gmail.com>\nZoltan Tombol <zoltan.tombol@gmail.com>\nZou Yu <zouyu7@huawei.com>\nzqh <zqhxuyuan@gmail.com>\nZuhayr Elahi <zuhayr.elahi@docker.com>\nZunayed Ali <zunayed@gmail.com>\nÁlvaro Lázaro <alvaro.lazaro.g@gmail.com>\nÁtila Camurça Alves <camurca.home@gmail.com>\n吴小白 <296015668@qq.com>\n尹吉峰 <jifeng.yin@gmail.com>\n屈骏 <qujun@tiduyun.com>\n徐俊杰 <paco.xu@daocloud.io>\n慕陶 <jihui.xjh@alibaba-inc.com>\n搏通 <yufeng.pyf@alibaba-inc.com>\n黄艳红00139573 <huang.yanhong@zte.com.cn>\n정재영 <jjy600901@gmail.com>\n"
  },
  {
    "path": "vendor/github.com/docker/docker/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        https://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   Copyright 2013-2018 Docker, 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       https://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": "vendor/github.com/docker/docker/NOTICE",
    "content": "Docker\nCopyright 2012-2017 Docker, Inc.\n\nThis product includes software developed at Docker, Inc. (https://www.docker.com).\n\nThis product contains software (https://github.com/creack/pty) developed\nby Keith Rarick, licensed under the MIT License.\n\nThe following is courtesy of our legal counsel:\n\n\nUse and transfer of Docker may be subject to certain restrictions by the\nUnited States and other governments.\nIt is your responsibility to ensure that your use and/or transfer does not\nviolate applicable laws.\n\nFor more information, please see https://www.bis.doc.gov\n\nSee also https://www.apache.org/dev/crypto.html and/or seek legal counsel.\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/README.md",
    "content": "# Working on the Engine API\n\nThe Engine API is an HTTP API used by the command-line client to communicate with the daemon. It can also be used by third-party software to control the daemon.\n\nIt consists of various components in this repository:\n\n- `api/swagger.yaml` A Swagger definition of the API.\n- `api/types/` Types shared by both the client and server, representing various objects, options, responses, etc. Most are written manually, but some are automatically generated from the Swagger definition. See [#27919](https://github.com/docker/docker/issues/27919) for progress on this.\n- `cli/` The command-line client.\n- `client/` The Go client used by the command-line client. It can also be used by third-party Go programs.\n- `daemon/` The daemon, which serves the API.\n\n## Swagger definition\n\nThe API is defined by the [Swagger](http://swagger.io/specification/) definition in `api/swagger.yaml`. This definition can be used to:\n\n1. Automatically generate documentation.\n2. Automatically generate the Go server and client. (A work-in-progress.)\n3. Provide a machine readable version of the API for introspecting what it can do, automatically generating clients for other languages, etc.\n\n## Updating the API documentation\n\nThe API documentation is generated entirely from `api/swagger.yaml`. If you make updates to the API, edit this file to represent the change in the documentation.\n\nThe file is split into two main sections:\n\n- `definitions`, which defines re-usable objects used in requests and responses\n- `paths`, which defines the API endpoints (and some inline objects which don't need to be reusable)\n\nTo make an edit, first look for the endpoint you want to edit under `paths`, then make the required edits. Endpoints may reference reusable objects with `$ref`, which can be found in the `definitions` section.\n\nThere is hopefully enough example material in the file for you to copy a similar pattern from elsewhere in the file (e.g. adding new fields or endpoints), but for the full reference, see the [Swagger specification](https://github.com/docker/docker/issues/27919).\n\n`swagger.yaml` is validated by `hack/validate/swagger` to ensure it is a valid Swagger definition. This is useful when making edits to ensure you are doing the right thing.\n\n## Viewing the API documentation\n\nWhen you make edits to `swagger.yaml`, you may want to check the generated API documentation to ensure it renders correctly.\n\nRun `make swagger-docs` and a preview will be running at `http://localhost:9000`. Some of the styling may be incorrect, but you'll be able to ensure that it is generating the correct documentation.\n\nThe production documentation is generated by vendoring `swagger.yaml` into [docker/docker.github.io](https://github.com/docker/docker.github.io).\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/common.go",
    "content": "package api // import \"github.com/docker/docker/api\"\n\n// Common constants for daemon and client.\nconst (\n\t// DefaultVersion of the current REST API.\n\tDefaultVersion = \"1.48\"\n\n\t// MinSupportedAPIVersion is the minimum API version that can be supported\n\t// by the API server, specified as \"major.minor\". Note that the daemon\n\t// may be configured with a different minimum API version, as returned\n\t// in [github.com/docker/docker/api/types.Version.MinAPIVersion].\n\t//\n\t// API requests for API versions lower than the configured version produce\n\t// an error.\n\tMinSupportedAPIVersion = \"1.24\"\n\n\t// NoBaseImageSpecifier is the symbol used by the FROM\n\t// command to specify that no base image is to be used.\n\tNoBaseImageSpecifier = \"scratch\"\n)\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/swagger-gen.yaml",
    "content": "\nlayout:\n  models:\n    - name: definition\n      source: asset:model\n      target: \"{{ joinFilePath .Target .ModelPackage }}\"\n      file_name: \"{{ (snakize (pascalize .Name)) }}.go\"\n  operations:\n    - name: handler\n      source: asset:serverOperation\n      target: \"{{ joinFilePath .Target .APIPackage .Package }}\"\n      file_name: \"{{ (snakize (pascalize .Name)) }}.go\"\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/swagger.yaml",
    "content": "# A Swagger 2.0 (a.k.a. OpenAPI) definition of the Engine API.\n#\n# This is used for generating API documentation and the types used by the\n# client/server. See api/README.md for more information.\n#\n# Some style notes:\n# - This file is used by ReDoc, which allows GitHub Flavored Markdown in\n#   descriptions.\n# - There is no maximum line length, for ease of editing and pretty diffs.\n# - operationIds are in the format \"NounVerb\", with a singular noun.\n\nswagger: \"2.0\"\nschemes:\n  - \"http\"\n  - \"https\"\nproduces:\n  - \"application/json\"\n  - \"text/plain\"\nconsumes:\n  - \"application/json\"\n  - \"text/plain\"\nbasePath: \"/v1.48\"\ninfo:\n  title: \"Docker Engine API\"\n  version: \"1.48\"\n  x-logo:\n    url: \"https://docs.docker.com/assets/images/logo-docker-main.png\"\n  description: |\n    The Engine API is an HTTP API served by Docker Engine. It is the API the\n    Docker client uses to communicate with the Engine, so everything the Docker\n    client can do can be done with the API.\n\n    Most of the client's commands map directly to API endpoints (e.g. `docker ps`\n    is `GET /containers/json`). The notable exception is running containers,\n    which consists of several API calls.\n\n    # Errors\n\n    The API uses standard HTTP status codes to indicate the success or failure\n    of the API call. The body of the response will be JSON in the following\n    format:\n\n    ```\n    {\n      \"message\": \"page not found\"\n    }\n    ```\n\n    # Versioning\n\n    The API is usually changed in each release, so API calls are versioned to\n    ensure that clients don't break. To lock to a specific version of the API,\n    you prefix the URL with its version, for example, call `/v1.30/info` to use\n    the v1.30 version of the `/info` endpoint. If the API version specified in\n    the URL is not supported by the daemon, a HTTP `400 Bad Request` error message\n    is returned.\n\n    If you omit the version-prefix, the current version of the API (v1.48) is used.\n    For example, calling `/info` is the same as calling `/v1.48/info`. Using the\n    API without a version-prefix is deprecated and will be removed in a future release.\n\n    Engine releases in the near future should support this version of the API,\n    so your client will continue to work even if it is talking to a newer Engine.\n\n    The API uses an open schema model, which means the server may add extra properties\n    to responses. Likewise, the server will ignore any extra query parameters and\n    request body properties. When you write clients, you need to ignore additional\n    properties in responses to ensure they do not break when talking to newer\n    daemons.\n\n\n    # Authentication\n\n    Authentication for registries is handled client side. The client has to send\n    authentication details to various endpoints that need to communicate with\n    registries, such as `POST /images/(name)/push`. These are sent as\n    `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5)\n    (JSON) string with the following structure:\n\n    ```\n    {\n      \"username\": \"string\",\n      \"password\": \"string\",\n      \"email\": \"string\",\n      \"serveraddress\": \"string\"\n    }\n    ```\n\n    The `serveraddress` is a domain/IP without a protocol. Throughout this\n    structure, double quotes are required.\n\n    If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth),\n    you can just pass this instead of credentials:\n\n    ```\n    {\n      \"identitytoken\": \"9cbaf023786cd7...\"\n    }\n    ```\n\n# The tags on paths define the menu sections in the ReDoc documentation, so\n# the usage of tags must make sense for that:\n# - They should be singular, not plural.\n# - There should not be too many tags, or the menu becomes unwieldy. For\n#   example, it is preferable to add a path to the \"System\" tag instead of\n#   creating a tag with a single path in it.\n# - The order of tags in this list defines the order in the menu.\ntags:\n  # Primary objects\n  - name: \"Container\"\n    x-displayName: \"Containers\"\n    description: |\n      Create and manage containers.\n  - name: \"Image\"\n    x-displayName: \"Images\"\n  - name: \"Network\"\n    x-displayName: \"Networks\"\n    description: |\n      Networks are user-defined networks that containers can be attached to.\n      See the [networking documentation](https://docs.docker.com/network/)\n      for more information.\n  - name: \"Volume\"\n    x-displayName: \"Volumes\"\n    description: |\n      Create and manage persistent storage that can be attached to containers.\n  - name: \"Exec\"\n    x-displayName: \"Exec\"\n    description: |\n      Run new commands inside running containers. Refer to the\n      [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/)\n      for more information.\n\n      To exec a command in a container, you first need to create an exec instance,\n      then start it. These two API endpoints are wrapped up in a single command-line\n      command, `docker exec`.\n\n  # Swarm things\n  - name: \"Swarm\"\n    x-displayName: \"Swarm\"\n    description: |\n      Engines can be clustered together in a swarm. Refer to the\n      [swarm mode documentation](https://docs.docker.com/engine/swarm/)\n      for more information.\n  - name: \"Node\"\n    x-displayName: \"Nodes\"\n    description: |\n      Nodes are instances of the Engine participating in a swarm. Swarm mode\n      must be enabled for these endpoints to work.\n  - name: \"Service\"\n    x-displayName: \"Services\"\n    description: |\n      Services are the definitions of tasks to run on a swarm. Swarm mode must\n      be enabled for these endpoints to work.\n  - name: \"Task\"\n    x-displayName: \"Tasks\"\n    description: |\n      A task is a container running on a swarm. It is the atomic scheduling unit\n      of swarm. Swarm mode must be enabled for these endpoints to work.\n  - name: \"Secret\"\n    x-displayName: \"Secrets\"\n    description: |\n      Secrets are sensitive data that can be used by services. Swarm mode must\n      be enabled for these endpoints to work.\n  - name: \"Config\"\n    x-displayName: \"Configs\"\n    description: |\n      Configs are application configurations that can be used by services. Swarm\n      mode must be enabled for these endpoints to work.\n  # System things\n  - name: \"Plugin\"\n    x-displayName: \"Plugins\"\n  - name: \"System\"\n    x-displayName: \"System\"\n\ndefinitions:\n  Port:\n    type: \"object\"\n    description: \"An open port on a container\"\n    required: [PrivatePort, Type]\n    properties:\n      IP:\n        type: \"string\"\n        format: \"ip-address\"\n        description: \"Host IP address that the container's port is mapped to\"\n      PrivatePort:\n        type: \"integer\"\n        format: \"uint16\"\n        x-nullable: false\n        description: \"Port on the container\"\n      PublicPort:\n        type: \"integer\"\n        format: \"uint16\"\n        description: \"Port exposed on the host\"\n      Type:\n        type: \"string\"\n        x-nullable: false\n        enum: [\"tcp\", \"udp\", \"sctp\"]\n    example:\n      PrivatePort: 8080\n      PublicPort: 80\n      Type: \"tcp\"\n\n  MountPoint:\n    type: \"object\"\n    description: |\n      MountPoint represents a mount point configuration inside the container.\n      This is used for reporting the mountpoints in use by a container.\n    properties:\n      Type:\n        description: |\n          The mount type:\n\n          - `bind` a mount of a file or directory from the host into the container.\n          - `volume` a docker volume with the given `Name`.\n          - `image` a docker image\n          - `tmpfs` a `tmpfs`.\n          - `npipe` a named pipe from the host into the container.\n          - `cluster` a Swarm cluster volume\n        type: \"string\"\n        enum:\n          - \"bind\"\n          - \"volume\"\n          - \"image\"\n          - \"tmpfs\"\n          - \"npipe\"\n          - \"cluster\"\n        example: \"volume\"\n      Name:\n        description: |\n          Name is the name reference to the underlying data defined by `Source`\n          e.g., the volume name.\n        type: \"string\"\n        example: \"myvolume\"\n      Source:\n        description: |\n          Source location of the mount.\n\n          For volumes, this contains the storage location of the volume (within\n          `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\n          the source (host) part of the bind-mount. For `tmpfs` mount points, this\n          field is empty.\n        type: \"string\"\n        example: \"/var/lib/docker/volumes/myvolume/_data\"\n      Destination:\n        description: |\n          Destination is the path relative to the container root (`/`) where\n          the `Source` is mounted inside the container.\n        type: \"string\"\n        example: \"/usr/share/nginx/html/\"\n      Driver:\n        description: |\n          Driver is the volume driver used to create the volume (if it is a volume).\n        type: \"string\"\n        example: \"local\"\n      Mode:\n        description: |\n          Mode is a comma separated list of options supplied by the user when\n          creating the bind/volume mount.\n\n          The default is platform-specific (`\"z\"` on Linux, empty on Windows).\n        type: \"string\"\n        example: \"z\"\n      RW:\n        description: |\n          Whether the mount is mounted writable (read-write).\n        type: \"boolean\"\n        example: true\n      Propagation:\n        description: |\n          Propagation describes how mounts are propagated from the host into the\n          mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)\n          for details. This field is not used on Windows.\n        type: \"string\"\n        example: \"\"\n\n  DeviceMapping:\n    type: \"object\"\n    description: \"A device mapping between the host and container\"\n    properties:\n      PathOnHost:\n        type: \"string\"\n      PathInContainer:\n        type: \"string\"\n      CgroupPermissions:\n        type: \"string\"\n    example:\n      PathOnHost: \"/dev/deviceName\"\n      PathInContainer: \"/dev/deviceName\"\n      CgroupPermissions: \"mrw\"\n\n  DeviceRequest:\n    type: \"object\"\n    description: \"A request for devices to be sent to device drivers\"\n    properties:\n      Driver:\n        type: \"string\"\n        example: \"nvidia\"\n      Count:\n        type: \"integer\"\n        example: -1\n      DeviceIDs:\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"0\"\n          - \"1\"\n          - \"GPU-fef8089b-4820-abfc-e83e-94318197576e\"\n      Capabilities:\n        description: |\n          A list of capabilities; an OR list of AND lists of capabilities.\n        type: \"array\"\n        items:\n          type: \"array\"\n          items:\n            type: \"string\"\n        example:\n          # gpu AND nvidia AND compute\n          - [\"gpu\", \"nvidia\", \"compute\"]\n      Options:\n        description: |\n          Driver-specific options, specified as a key/value pairs. These options\n          are passed directly to the driver.\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n\n  ThrottleDevice:\n    type: \"object\"\n    properties:\n      Path:\n        description: \"Device path\"\n        type: \"string\"\n      Rate:\n        description: \"Rate\"\n        type: \"integer\"\n        format: \"int64\"\n        minimum: 0\n\n  Mount:\n    type: \"object\"\n    properties:\n      Target:\n        description: \"Container path.\"\n        type: \"string\"\n      Source:\n        description: \"Mount source (e.g. a volume name, a host path).\"\n        type: \"string\"\n      Type:\n        description: |\n          The mount type. Available types:\n\n          - `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n          - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n          - `image` Mounts an image.\n          - `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n          - `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container.\n          - `cluster` a Swarm cluster volume\n        type: \"string\"\n        enum:\n          - \"bind\"\n          - \"volume\"\n          - \"image\"\n          - \"tmpfs\"\n          - \"npipe\"\n          - \"cluster\"\n      ReadOnly:\n        description: \"Whether the mount should be read-only.\"\n        type: \"boolean\"\n      Consistency:\n        description: \"The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.\"\n        type: \"string\"\n      BindOptions:\n        description: \"Optional configuration for the `bind` type.\"\n        type: \"object\"\n        properties:\n          Propagation:\n            description: \"A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.\"\n            type: \"string\"\n            enum:\n              - \"private\"\n              - \"rprivate\"\n              - \"shared\"\n              - \"rshared\"\n              - \"slave\"\n              - \"rslave\"\n          NonRecursive:\n            description: \"Disable recursive bind mount.\"\n            type: \"boolean\"\n            default: false\n          CreateMountpoint:\n            description: \"Create mount point on host if missing\"\n            type: \"boolean\"\n            default: false\n          ReadOnlyNonRecursive:\n            description: |\n               Make the mount non-recursively read-only, but still leave the mount recursive\n               (unless NonRecursive is set to `true` in conjunction).\n\n               Added in v1.44, before that version all read-only mounts were\n               non-recursive by default. To match the previous behaviour this\n               will default to `true` for clients on versions prior to v1.44.\n            type: \"boolean\"\n            default: false\n          ReadOnlyForceRecursive:\n            description: \"Raise an error if the mount cannot be made recursively read-only.\"\n            type: \"boolean\"\n            default: false\n      VolumeOptions:\n        description: \"Optional configuration for the `volume` type.\"\n        type: \"object\"\n        properties:\n          NoCopy:\n            description: \"Populate volume with data from the target.\"\n            type: \"boolean\"\n            default: false\n          Labels:\n            description: \"User-defined key/value metadata.\"\n            type: \"object\"\n            additionalProperties:\n              type: \"string\"\n          DriverConfig:\n            description: \"Map of driver specific options\"\n            type: \"object\"\n            properties:\n              Name:\n                description: \"Name of the driver to use to create the volume.\"\n                type: \"string\"\n              Options:\n                description: \"key/value map of driver specific options.\"\n                type: \"object\"\n                additionalProperties:\n                  type: \"string\"\n          Subpath:\n            description: \"Source path inside the volume. Must be relative without any back traversals.\"\n            type: \"string\"\n            example: \"dir-inside-volume/subdirectory\"\n      ImageOptions:\n        description: \"Optional configuration for the `image` type.\"\n        type: \"object\"\n        properties:\n          Subpath:\n            description: \"Source path inside the image. Must be relative without any back traversals.\"\n            type: \"string\"\n            example: \"dir-inside-image/subdirectory\"\n      TmpfsOptions:\n        description: \"Optional configuration for the `tmpfs` type.\"\n        type: \"object\"\n        properties:\n          SizeBytes:\n            description: \"The size for the tmpfs mount in bytes.\"\n            type: \"integer\"\n            format: \"int64\"\n          Mode:\n            description: \"The permission mode for the tmpfs mount in an integer.\"\n            type: \"integer\"\n          Options:\n            description: |\n              The options to be passed to the tmpfs mount. An array of arrays.\n              Flag options should be provided as 1-length arrays. Other types\n              should be provided as as 2-length arrays, where the first item is\n              the key and the second the value.\n            type: \"array\"\n            items:\n              type: \"array\"\n              minItems: 1\n              maxItems: 2\n              items:\n                type: \"string\"\n            example:\n              [[\"noexec\"]]\n\n  RestartPolicy:\n    description: |\n      The behavior to apply when the container exits. The default is not to\n      restart.\n\n      An ever increasing delay (double the previous delay, starting at 100ms) is\n      added before each restart to prevent flooding the server.\n    type: \"object\"\n    properties:\n      Name:\n        type: \"string\"\n        description: |\n          - Empty string means not to restart\n          - `no` Do not automatically restart\n          - `always` Always restart\n          - `unless-stopped` Restart always except when the user has manually stopped the container\n          - `on-failure` Restart only when the container exit code is non-zero\n        enum:\n          - \"\"\n          - \"no\"\n          - \"always\"\n          - \"unless-stopped\"\n          - \"on-failure\"\n      MaximumRetryCount:\n        type: \"integer\"\n        description: |\n          If `on-failure` is used, the number of times to retry before giving up.\n\n  Resources:\n    description: \"A container's resources (cgroups config, ulimits, etc)\"\n    type: \"object\"\n    properties:\n      # Applicable to all platforms\n      CpuShares:\n        description: |\n          An integer value representing this container's relative CPU weight\n          versus other containers.\n        type: \"integer\"\n      Memory:\n        description: \"Memory limit in bytes.\"\n        type: \"integer\"\n        format: \"int64\"\n        default: 0\n      # Applicable to UNIX platforms\n      CgroupParent:\n        description: |\n          Path to `cgroups` under which the container's `cgroup` is created. If\n          the path is not absolute, the path is considered to be relative to the\n          `cgroups` path of the init process. Cgroups are created if they do not\n          already exist.\n        type: \"string\"\n      BlkioWeight:\n        description: \"Block IO weight (relative weight).\"\n        type: \"integer\"\n        minimum: 0\n        maximum: 1000\n      BlkioWeightDevice:\n        description: |\n          Block IO weight (relative device weight) in the form:\n\n          ```\n          [{\"Path\": \"device_path\", \"Weight\": weight}]\n          ```\n        type: \"array\"\n        items:\n          type: \"object\"\n          properties:\n            Path:\n              type: \"string\"\n            Weight:\n              type: \"integer\"\n              minimum: 0\n      BlkioDeviceReadBps:\n        description: |\n          Limit read rate (bytes per second) from a device, in the form:\n\n          ```\n          [{\"Path\": \"device_path\", \"Rate\": rate}]\n          ```\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ThrottleDevice\"\n      BlkioDeviceWriteBps:\n        description: |\n          Limit write rate (bytes per second) to a device, in the form:\n\n          ```\n          [{\"Path\": \"device_path\", \"Rate\": rate}]\n          ```\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ThrottleDevice\"\n      BlkioDeviceReadIOps:\n        description: |\n          Limit read rate (IO per second) from a device, in the form:\n\n          ```\n          [{\"Path\": \"device_path\", \"Rate\": rate}]\n          ```\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ThrottleDevice\"\n      BlkioDeviceWriteIOps:\n        description: |\n          Limit write rate (IO per second) to a device, in the form:\n\n          ```\n          [{\"Path\": \"device_path\", \"Rate\": rate}]\n          ```\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ThrottleDevice\"\n      CpuPeriod:\n        description: \"The length of a CPU period in microseconds.\"\n        type: \"integer\"\n        format: \"int64\"\n      CpuQuota:\n        description: |\n          Microseconds of CPU time that the container can get in a CPU period.\n        type: \"integer\"\n        format: \"int64\"\n      CpuRealtimePeriod:\n        description: |\n          The length of a CPU real-time period in microseconds. Set to 0 to\n          allocate no time allocated to real-time tasks.\n        type: \"integer\"\n        format: \"int64\"\n      CpuRealtimeRuntime:\n        description: |\n          The length of a CPU real-time runtime in microseconds. Set to 0 to\n          allocate no time allocated to real-time tasks.\n        type: \"integer\"\n        format: \"int64\"\n      CpusetCpus:\n        description: |\n          CPUs in which to allow execution (e.g., `0-3`, `0,1`).\n        type: \"string\"\n        example: \"0-3\"\n      CpusetMems:\n        description: |\n          Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only\n          effective on NUMA systems.\n        type: \"string\"\n      Devices:\n        description: \"A list of devices to add to the container.\"\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/DeviceMapping\"\n      DeviceCgroupRules:\n        description: \"a list of cgroup rules to apply to the container\"\n        type: \"array\"\n        items:\n          type: \"string\"\n          example: \"c 13:* rwm\"\n      DeviceRequests:\n        description: |\n          A list of requests for devices to be sent to device drivers.\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/DeviceRequest\"\n      KernelMemoryTCP:\n        description: |\n          Hard limit for kernel TCP buffer memory (in bytes). Depending on the\n          OCI runtime in use, this option may be ignored. It is no longer supported\n          by the default (runc) runtime.\n\n          This field is omitted when empty.\n        type: \"integer\"\n        format: \"int64\"\n      MemoryReservation:\n        description: \"Memory soft limit in bytes.\"\n        type: \"integer\"\n        format: \"int64\"\n      MemorySwap:\n        description: |\n          Total memory limit (memory + swap). Set as `-1` to enable unlimited\n          swap.\n        type: \"integer\"\n        format: \"int64\"\n      MemorySwappiness:\n        description: |\n          Tune a container's memory swappiness behavior. Accepts an integer\n          between 0 and 100.\n        type: \"integer\"\n        format: \"int64\"\n        minimum: 0\n        maximum: 100\n      NanoCpus:\n        description: \"CPU quota in units of 10<sup>-9</sup> CPUs.\"\n        type: \"integer\"\n        format: \"int64\"\n      OomKillDisable:\n        description: \"Disable OOM Killer for the container.\"\n        type: \"boolean\"\n      Init:\n        description: |\n          Run an init inside the container that forwards signals and reaps\n          processes. This field is omitted if empty, and the default (as\n          configured on the daemon) is used.\n        type: \"boolean\"\n        x-nullable: true\n      PidsLimit:\n        description: |\n          Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null`\n          to not change.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: true\n      Ulimits:\n        description: |\n          A list of resource limits to set in the container. For example:\n\n          ```\n          {\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}\n          ```\n        type: \"array\"\n        items:\n          type: \"object\"\n          properties:\n            Name:\n              description: \"Name of ulimit\"\n              type: \"string\"\n            Soft:\n              description: \"Soft limit\"\n              type: \"integer\"\n            Hard:\n              description: \"Hard limit\"\n              type: \"integer\"\n      # Applicable to Windows\n      CpuCount:\n        description: |\n          The number of usable CPUs (Windows only).\n\n          On Windows Server containers, the processor resource controls are\n          mutually exclusive. The order of precedence is `CPUCount` first, then\n          `CPUShares`, and `CPUPercent` last.\n        type: \"integer\"\n        format: \"int64\"\n      CpuPercent:\n        description: |\n          The usable percentage of the available CPUs (Windows only).\n\n          On Windows Server containers, the processor resource controls are\n          mutually exclusive. The order of precedence is `CPUCount` first, then\n          `CPUShares`, and `CPUPercent` last.\n        type: \"integer\"\n        format: \"int64\"\n      IOMaximumIOps:\n        description: \"Maximum IOps for the container system drive (Windows only)\"\n        type: \"integer\"\n        format: \"int64\"\n      IOMaximumBandwidth:\n        description: |\n          Maximum IO in bytes per second for the container system drive\n          (Windows only).\n        type: \"integer\"\n        format: \"int64\"\n\n  Limit:\n    description: |\n      An object describing a limit on resources which can be requested by a task.\n    type: \"object\"\n    properties:\n      NanoCPUs:\n        type: \"integer\"\n        format: \"int64\"\n        example: 4000000000\n      MemoryBytes:\n        type: \"integer\"\n        format: \"int64\"\n        example: 8272408576\n      Pids:\n        description: |\n          Limits the maximum number of PIDs in the container. Set `0` for unlimited.\n        type: \"integer\"\n        format: \"int64\"\n        default: 0\n        example: 100\n\n  ResourceObject:\n    description: |\n      An object describing the resources which can be advertised by a node and\n      requested by a task.\n    type: \"object\"\n    properties:\n      NanoCPUs:\n        type: \"integer\"\n        format: \"int64\"\n        example: 4000000000\n      MemoryBytes:\n        type: \"integer\"\n        format: \"int64\"\n        example: 8272408576\n      GenericResources:\n        $ref: \"#/definitions/GenericResources\"\n\n  GenericResources:\n    description: |\n      User-defined resources can be either Integer resources (e.g, `SSD=3`) or\n      String resources (e.g, `GPU=UUID1`).\n    type: \"array\"\n    items:\n      type: \"object\"\n      properties:\n        NamedResourceSpec:\n          type: \"object\"\n          properties:\n            Kind:\n              type: \"string\"\n            Value:\n              type: \"string\"\n        DiscreteResourceSpec:\n          type: \"object\"\n          properties:\n            Kind:\n              type: \"string\"\n            Value:\n              type: \"integer\"\n              format: \"int64\"\n    example:\n      - DiscreteResourceSpec:\n          Kind: \"SSD\"\n          Value: 3\n      - NamedResourceSpec:\n          Kind: \"GPU\"\n          Value: \"UUID1\"\n      - NamedResourceSpec:\n          Kind: \"GPU\"\n          Value: \"UUID2\"\n\n  HealthConfig:\n    description: \"A test to perform to check that the container is healthy.\"\n    type: \"object\"\n    properties:\n      Test:\n        description: |\n          The test to perform. Possible values are:\n\n          - `[]` inherit healthcheck from image or parent image\n          - `[\"NONE\"]` disable healthcheck\n          - `[\"CMD\", args...]` exec arguments directly\n          - `[\"CMD-SHELL\", command]` run command with system's default shell\n        type: \"array\"\n        items:\n          type: \"string\"\n      Interval:\n        description: |\n          The time to wait between checks in nanoseconds. It should be 0 or at\n          least 1000000 (1 ms). 0 means inherit.\n        type: \"integer\"\n        format: \"int64\"\n      Timeout:\n        description: |\n          The time to wait before considering the check to have hung. It should\n          be 0 or at least 1000000 (1 ms). 0 means inherit.\n        type: \"integer\"\n        format: \"int64\"\n      Retries:\n        description: |\n          The number of consecutive failures needed to consider a container as\n          unhealthy. 0 means inherit.\n        type: \"integer\"\n      StartPeriod:\n        description: |\n          Start period for the container to initialize before starting\n          health-retries countdown in nanoseconds. It should be 0 or at least\n          1000000 (1 ms). 0 means inherit.\n        type: \"integer\"\n        format: \"int64\"\n      StartInterval:\n        description: |\n          The time to wait between checks in nanoseconds during the start period.\n          It should be 0 or at least 1000000 (1 ms). 0 means inherit.\n        type: \"integer\"\n        format: \"int64\"\n\n  Health:\n    description: |\n      Health stores information about the container's healthcheck results.\n    type: \"object\"\n    x-nullable: true\n    properties:\n      Status:\n        description: |\n          Status is one of `none`, `starting`, `healthy` or `unhealthy`\n\n          - \"none\"      Indicates there is no healthcheck\n          - \"starting\"  Starting indicates that the container is not yet ready\n          - \"healthy\"   Healthy indicates that the container is running correctly\n          - \"unhealthy\" Unhealthy indicates that the container has a problem\n        type: \"string\"\n        enum:\n          - \"none\"\n          - \"starting\"\n          - \"healthy\"\n          - \"unhealthy\"\n        example: \"healthy\"\n      FailingStreak:\n        description: \"FailingStreak is the number of consecutive failures\"\n        type: \"integer\"\n        example: 0\n      Log:\n        type: \"array\"\n        description: |\n          Log contains the last few results (oldest first)\n        items:\n          $ref: \"#/definitions/HealthcheckResult\"\n\n  HealthcheckResult:\n    description: |\n      HealthcheckResult stores information about a single run of a healthcheck probe\n    type: \"object\"\n    x-nullable: true\n    properties:\n      Start:\n        description: |\n          Date and time at which this check started in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"date-time\"\n        example: \"2020-01-04T10:44:24.496525531Z\"\n      End:\n        description: |\n          Date and time at which this check ended in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2020-01-04T10:45:21.364524523Z\"\n      ExitCode:\n        description: |\n          ExitCode meanings:\n\n          - `0` healthy\n          - `1` unhealthy\n          - `2` reserved (considered unhealthy)\n          - other values: error running probe\n        type: \"integer\"\n        example: 0\n      Output:\n        description: \"Output from last check\"\n        type: \"string\"\n\n  HostConfig:\n    description: \"Container configuration that depends on the host we are running on\"\n    allOf:\n      - $ref: \"#/definitions/Resources\"\n      - type: \"object\"\n        properties:\n          # Applicable to all platforms\n          Binds:\n            type: \"array\"\n            description: |\n              A list of volume bindings for this container. Each volume binding\n              is a string in one of these forms:\n\n              - `host-src:container-dest[:options]` to bind-mount a host path\n                into the container. Both `host-src`, and `container-dest` must\n                be an _absolute_ path.\n              - `volume-name:container-dest[:options]` to bind-mount a volume\n                managed by a volume driver into the container. `container-dest`\n                must be an _absolute_ path.\n\n              `options` is an optional, comma-delimited list of:\n\n              - `nocopy` disables automatic copying of data from the container\n                path to the volume. The `nocopy` flag only applies to named volumes.\n              - `[ro|rw]` mounts a volume read-only or read-write, respectively.\n                If omitted or set to `rw`, volumes are mounted read-write.\n              - `[z|Z]` applies SELinux labels to allow or deny multiple containers\n                to read and write to the same volume.\n                  - `z`: a _shared_ content label is applied to the content. This\n                    label indicates that multiple containers can share the volume\n                    content, for both reading and writing.\n                  - `Z`: a _private unshared_ label is applied to the content.\n                    This label indicates that only the current container can use\n                    a private volume. Labeling systems such as SELinux require\n                    proper labels to be placed on volume content that is mounted\n                    into a container. Without a label, the security system can\n                    prevent a container's processes from using the content. By\n                    default, the labels set by the host operating system are not\n                    modified.\n              - `[[r]shared|[r]slave|[r]private]` specifies mount\n                [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt).\n                This only applies to bind-mounted volumes, not internal volumes\n                or named volumes. Mount propagation requires the source mount\n                point (the location where the source directory is mounted in the\n                host operating system) to have the correct propagation properties.\n                For shared volumes, the source mount point must be set to `shared`.\n                For slave volumes, the mount must be set to either `shared` or\n                `slave`.\n            items:\n              type: \"string\"\n          ContainerIDFile:\n            type: \"string\"\n            description: \"Path to a file where the container ID is written\"\n            example: \"\"\n          LogConfig:\n            type: \"object\"\n            description: \"The logging configuration for this container\"\n            properties:\n              Type:\n                description: |-\n                  Name of the logging driver used for the container or \"none\"\n                  if logging is disabled.\n                type: \"string\"\n                enum:\n                  - \"local\"\n                  - \"json-file\"\n                  - \"syslog\"\n                  - \"journald\"\n                  - \"gelf\"\n                  - \"fluentd\"\n                  - \"awslogs\"\n                  - \"splunk\"\n                  - \"etwlogs\"\n                  - \"none\"\n              Config:\n                description: |-\n                  Driver-specific configuration options for the logging driver.\n                type: \"object\"\n                additionalProperties:\n                  type: \"string\"\n                example:\n                  \"max-file\": \"5\"\n                  \"max-size\": \"10m\"\n          NetworkMode:\n            type: \"string\"\n            description: |\n              Network mode to use for this container. Supported standard values\n              are: `bridge`, `host`, `none`, and `container:<name|id>`. Any\n              other value is taken as a custom network's name to which this\n              container should connect to.\n          PortBindings:\n            $ref: \"#/definitions/PortMap\"\n          RestartPolicy:\n            $ref: \"#/definitions/RestartPolicy\"\n          AutoRemove:\n            type: \"boolean\"\n            description: |\n              Automatically remove the container when the container's process\n              exits. This has no effect if `RestartPolicy` is set.\n          VolumeDriver:\n            type: \"string\"\n            description: \"Driver that this container uses to mount volumes.\"\n          VolumesFrom:\n            type: \"array\"\n            description: |\n              A list of volumes to inherit from another container, specified in\n              the form `<container name>[:<ro|rw>]`.\n            items:\n              type: \"string\"\n          Mounts:\n            description: |\n              Specification for mounts to be added to the container.\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Mount\"\n          ConsoleSize:\n            type: \"array\"\n            description: |\n              Initial console size, as an `[height, width]` array.\n            x-nullable: true\n            minItems: 2\n            maxItems: 2\n            items:\n              type: \"integer\"\n              minimum: 0\n            example: [80, 64]\n          Annotations:\n            type: \"object\"\n            description: |\n              Arbitrary non-identifying metadata attached to container and\n              provided to the runtime when the container is started.\n            additionalProperties:\n              type: \"string\"\n\n          # Applicable to UNIX platforms\n          CapAdd:\n            type: \"array\"\n            description: |\n              A list of kernel capabilities to add to the container. Conflicts\n              with option 'Capabilities'.\n            items:\n              type: \"string\"\n          CapDrop:\n            type: \"array\"\n            description: |\n              A list of kernel capabilities to drop from the container. Conflicts\n              with option 'Capabilities'.\n            items:\n              type: \"string\"\n          CgroupnsMode:\n            type: \"string\"\n            enum:\n              - \"private\"\n              - \"host\"\n            description: |\n              cgroup namespace mode for the container. Possible values are:\n\n              - `\"private\"`: the container runs in its own private cgroup namespace\n              - `\"host\"`: use the host system's cgroup namespace\n\n              If not specified, the daemon default is used, which can either be `\"private\"`\n              or `\"host\"`, depending on daemon version, kernel support and configuration.\n          Dns:\n            type: \"array\"\n            description: \"A list of DNS servers for the container to use.\"\n            items:\n              type: \"string\"\n          DnsOptions:\n            type: \"array\"\n            description: \"A list of DNS options.\"\n            items:\n              type: \"string\"\n          DnsSearch:\n            type: \"array\"\n            description: \"A list of DNS search domains.\"\n            items:\n              type: \"string\"\n          ExtraHosts:\n            type: \"array\"\n            description: |\n              A list of hostnames/IP mappings to add to the container's `/etc/hosts`\n              file. Specified in the form `[\"hostname:IP\"]`.\n            items:\n              type: \"string\"\n          GroupAdd:\n            type: \"array\"\n            description: |\n              A list of additional groups that the container process will run as.\n            items:\n              type: \"string\"\n          IpcMode:\n            type: \"string\"\n            description: |\n              IPC sharing mode for the container. Possible values are:\n\n              - `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n              - `\"private\"`: own private IPC namespace\n              - `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n              - `\"container:<name|id>\"`: join another (shareable) container's IPC namespace\n              - `\"host\"`: use the host system's IPC namespace\n\n              If not specified, daemon default is used, which can either be `\"private\"`\n              or `\"shareable\"`, depending on daemon version and configuration.\n          Cgroup:\n            type: \"string\"\n            description: \"Cgroup to use for the container.\"\n          Links:\n            type: \"array\"\n            description: |\n              A list of links for the container in the form `container_name:alias`.\n            items:\n              type: \"string\"\n          OomScoreAdj:\n            type: \"integer\"\n            description: |\n              An integer value containing the score given to the container in\n              order to tune OOM killer preferences.\n            example: 500\n          PidMode:\n            type: \"string\"\n            description: |\n              Set the PID (Process) Namespace mode for the container. It can be\n              either:\n\n              - `\"container:<name|id>\"`: joins another container's PID namespace\n              - `\"host\"`: use the host's PID namespace inside the container\n          Privileged:\n            type: \"boolean\"\n            description: |-\n              Gives the container full access to the host.\n          PublishAllPorts:\n            type: \"boolean\"\n            description: |\n              Allocates an ephemeral host port for all of a container's\n              exposed ports.\n\n              Ports are de-allocated when the container stops and allocated when\n              the container starts. The allocated port might be changed when\n              restarting the container.\n\n              The port is selected from the ephemeral port range that depends on\n              the kernel. For example, on Linux the range is defined by\n              `/proc/sys/net/ipv4/ip_local_port_range`.\n          ReadonlyRootfs:\n            type: \"boolean\"\n            description: \"Mount the container's root filesystem as read only.\"\n          SecurityOpt:\n            type: \"array\"\n            description: |\n              A list of string values to customize labels for MLS systems, such\n              as SELinux.\n            items:\n              type: \"string\"\n          StorageOpt:\n            type: \"object\"\n            description: |\n              Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n            additionalProperties:\n              type: \"string\"\n          Tmpfs:\n            type: \"object\"\n            description: |\n              A map of container directories which should be replaced by tmpfs\n              mounts, and their corresponding mount options. For example:\n\n              ```\n              { \"/run\": \"rw,noexec,nosuid,size=65536k\" }\n              ```\n            additionalProperties:\n              type: \"string\"\n          UTSMode:\n            type: \"string\"\n            description: \"UTS namespace to use for the container.\"\n          UsernsMode:\n            type: \"string\"\n            description: |\n              Sets the usernamespace mode for the container when usernamespace\n              remapping option is enabled.\n          ShmSize:\n            type: \"integer\"\n            format: \"int64\"\n            description: |\n              Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.\n            minimum: 0\n          Sysctls:\n            type: \"object\"\n            x-nullable: true\n            description: |-\n              A list of kernel parameters (sysctls) to set in the container.\n\n              This field is omitted if not set.\n            additionalProperties:\n              type: \"string\"\n            example:\n              \"net.ipv4.ip_forward\": \"1\"\n          Runtime:\n            type: \"string\"\n            x-nullable: true\n            description: |-\n              Runtime to use with this container.\n          # Applicable to Windows\n          Isolation:\n            type: \"string\"\n            description: |\n              Isolation technology of the container. (Windows only)\n            enum:\n              - \"default\"\n              - \"process\"\n              - \"hyperv\"\n              - \"\"\n          MaskedPaths:\n            type: \"array\"\n            description: |\n              The list of paths to be masked inside the container (this overrides\n              the default set of paths).\n            items:\n              type: \"string\"\n            example:\n              - \"/proc/asound\"\n              - \"/proc/acpi\"\n              - \"/proc/kcore\"\n              - \"/proc/keys\"\n              - \"/proc/latency_stats\"\n              - \"/proc/timer_list\"\n              - \"/proc/timer_stats\"\n              - \"/proc/sched_debug\"\n              - \"/proc/scsi\"\n              - \"/sys/firmware\"\n              - \"/sys/devices/virtual/powercap\"\n          ReadonlyPaths:\n            type: \"array\"\n            description: |\n              The list of paths to be set as read-only inside the container\n              (this overrides the default set of paths).\n            items:\n              type: \"string\"\n            example:\n              - \"/proc/bus\"\n              - \"/proc/fs\"\n              - \"/proc/irq\"\n              - \"/proc/sys\"\n              - \"/proc/sysrq-trigger\"\n\n  ContainerConfig:\n    description: |\n      Configuration for a container that is portable between hosts.\n    type: \"object\"\n    properties:\n      Hostname:\n        description: |\n          The hostname to use for the container, as a valid RFC 1123 hostname.\n        type: \"string\"\n        example: \"439f4e91bd1d\"\n      Domainname:\n        description: |\n          The domain name to use for the container.\n        type: \"string\"\n      User:\n        description: |-\n          Commands run as this user inside the container. If omitted, commands\n          run as the user specified in the image the container was started from.\n\n          Can be either user-name or UID, and optional group-name or GID,\n          separated by a colon (`<user-name|UID>[<:group-name|GID>]`).\n        type: \"string\"\n        example: \"123:456\"\n      AttachStdin:\n        description: \"Whether to attach to `stdin`.\"\n        type: \"boolean\"\n        default: false\n      AttachStdout:\n        description: \"Whether to attach to `stdout`.\"\n        type: \"boolean\"\n        default: true\n      AttachStderr:\n        description: \"Whether to attach to `stderr`.\"\n        type: \"boolean\"\n        default: true\n      ExposedPorts:\n        description: |\n          An object mapping ports to an empty object in the form:\n\n          `{\"<port>/<tcp|udp|sctp>\": {}}`\n        type: \"object\"\n        x-nullable: true\n        additionalProperties:\n          type: \"object\"\n          enum:\n            - {}\n          default: {}\n        example: {\n          \"80/tcp\": {},\n          \"443/tcp\": {}\n        }\n      Tty:\n        description: |\n          Attach standard streams to a TTY, including `stdin` if it is not closed.\n        type: \"boolean\"\n        default: false\n      OpenStdin:\n        description: \"Open `stdin`\"\n        type: \"boolean\"\n        default: false\n      StdinOnce:\n        description: \"Close `stdin` after one attached client disconnects\"\n        type: \"boolean\"\n        default: false\n      Env:\n        description: |\n          A list of environment variables to set inside the container in the\n          form `[\"VAR=value\", ...]`. A variable without `=` is removed from the\n          environment, rather than to have an empty value.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"\n      Cmd:\n        description: |\n          Command to run specified as a string or an array of strings.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"/bin/sh\"]\n      Healthcheck:\n        $ref: \"#/definitions/HealthConfig\"\n      ArgsEscaped:\n        description: \"Command is already escaped (Windows only)\"\n        type: \"boolean\"\n        default: false\n        example: false\n        x-nullable: true\n      Image:\n        description: |\n          The name (or reference) of the image to use when creating the container,\n          or which was used when the container was created.\n        type: \"string\"\n        example: \"example-image:1.0\"\n      Volumes:\n        description: |\n          An object mapping mount point paths inside the container to empty\n          objects.\n        type: \"object\"\n        additionalProperties:\n          type: \"object\"\n          enum:\n            - {}\n          default: {}\n      WorkingDir:\n        description: \"The working directory for commands to run in.\"\n        type: \"string\"\n        example: \"/public/\"\n      Entrypoint:\n        description: |\n          The entry point for the container as a string or an array of strings.\n\n          If the array consists of exactly one empty string (`[\"\"]`) then the\n          entry point is reset to system default (i.e., the entry point used by\n          docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: []\n      NetworkDisabled:\n        description: \"Disable networking for the container.\"\n        type: \"boolean\"\n        x-nullable: true\n      MacAddress:\n        description: |\n          MAC address of the container.\n\n          Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead.\n        type: \"string\"\n        x-nullable: true\n      OnBuild:\n        description: |\n          `ONBUILD` metadata that were defined in the image's `Dockerfile`.\n        type: \"array\"\n        x-nullable: true\n        items:\n          type: \"string\"\n        example: []\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      StopSignal:\n        description: |\n          Signal to stop a container as a string or unsigned integer.\n        type: \"string\"\n        example: \"SIGTERM\"\n        x-nullable: true\n      StopTimeout:\n        description: \"Timeout to stop a container in seconds.\"\n        type: \"integer\"\n        default: 10\n        x-nullable: true\n      Shell:\n        description: |\n          Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n        type: \"array\"\n        x-nullable: true\n        items:\n          type: \"string\"\n        example: [\"/bin/sh\", \"-c\"]\n\n  ImageConfig:\n    description: |\n      Configuration of the image. These fields are used as defaults\n      when starting a container from the image.\n    type: \"object\"\n    properties:\n      Hostname:\n        description: |\n          The hostname to use for the container, as a valid RFC 1123 hostname.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always empty. It must not be used, and will be removed in API v1.48.\n        type: \"string\"\n        example: \"\"\n      Domainname:\n        description: |\n          The domain name to use for the container.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always empty. It must not be used, and will be removed in API v1.48.\n        type: \"string\"\n        example: \"\"\n      User:\n        description: \"The user that commands are run as inside the container.\"\n        type: \"string\"\n        example: \"web:web\"\n      AttachStdin:\n        description: |\n          Whether to attach to `stdin`.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always false. It must not be used, and will be removed in API v1.48.\n        type: \"boolean\"\n        default: false\n        example: false\n      AttachStdout:\n        description: |\n          Whether to attach to `stdout`.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always false. It must not be used, and will be removed in API v1.48.\n        type: \"boolean\"\n        default: false\n        example: false\n      AttachStderr:\n        description: |\n          Whether to attach to `stderr`.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always false. It must not be used, and will be removed in API v1.48.\n        type: \"boolean\"\n        default: false\n        example: false\n      ExposedPorts:\n        description: |\n          An object mapping ports to an empty object in the form:\n\n          `{\"<port>/<tcp|udp|sctp>\": {}}`\n        type: \"object\"\n        x-nullable: true\n        additionalProperties:\n          type: \"object\"\n          enum:\n            - {}\n          default: {}\n        example: {\n          \"80/tcp\": {},\n          \"443/tcp\": {}\n        }\n      Tty:\n        description: |\n          Attach standard streams to a TTY, including `stdin` if it is not closed.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always false. It must not be used, and will be removed in API v1.48.\n        type: \"boolean\"\n        default: false\n        example: false\n      OpenStdin:\n        description: |\n          Open `stdin`\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always false. It must not be used, and will be removed in API v1.48.\n        type: \"boolean\"\n        default: false\n        example: false\n      StdinOnce:\n        description: |\n          Close `stdin` after one attached client disconnects.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always false. It must not be used, and will be removed in API v1.48.\n        type: \"boolean\"\n        default: false\n        example: false\n      Env:\n        description: |\n          A list of environment variables to set inside the container in the\n          form `[\"VAR=value\", ...]`. A variable without `=` is removed from the\n          environment, rather than to have an empty value.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"\n      Cmd:\n        description: |\n          Command to run specified as a string or an array of strings.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"/bin/sh\"]\n      Healthcheck:\n        $ref: \"#/definitions/HealthConfig\"\n      ArgsEscaped:\n        description: \"Command is already escaped (Windows only)\"\n        type: \"boolean\"\n        default: false\n        example: false\n        x-nullable: true\n      Image:\n        description: |\n          The name (or reference) of the image to use when creating the container,\n          or which was used when the container was created.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always empty. It must not be used, and will be removed in API v1.48.\n        type: \"string\"\n        default: \"\"\n        example: \"\"\n      Volumes:\n        description: |\n          An object mapping mount point paths inside the container to empty\n          objects.\n        type: \"object\"\n        additionalProperties:\n          type: \"object\"\n          enum:\n            - {}\n          default: {}\n        example:\n          \"/app/data\": {}\n          \"/app/config\": {}\n      WorkingDir:\n        description: \"The working directory for commands to run in.\"\n        type: \"string\"\n        example: \"/public/\"\n      Entrypoint:\n        description: |\n          The entry point for the container as a string or an array of strings.\n\n          If the array consists of exactly one empty string (`[\"\"]`) then the\n          entry point is reset to system default (i.e., the entry point used by\n          docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: []\n      NetworkDisabled:\n        description: |\n          Disable networking for the container.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always omitted. It must not be used, and will be removed in API v1.48.\n        type: \"boolean\"\n        default: false\n        example: false\n        x-nullable: true\n      MacAddress:\n        description: |\n          MAC address of the container.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always omitted. It must not be used, and will be removed in API v1.48.\n        type: \"string\"\n        default: \"\"\n        example: \"\"\n        x-nullable: true\n      OnBuild:\n        description: |\n          `ONBUILD` metadata that were defined in the image's `Dockerfile`.\n        type: \"array\"\n        x-nullable: true\n        items:\n          type: \"string\"\n        example: []\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      StopSignal:\n        description: |\n          Signal to stop a container as a string or unsigned integer.\n        type: \"string\"\n        example: \"SIGTERM\"\n        x-nullable: true\n      StopTimeout:\n        description: |\n          Timeout to stop a container in seconds.\n\n          <p><br /></p>\n\n          > **Deprecated**: this field is not part of the image specification and is\n          > always omitted. It must not be used, and will be removed in API v1.48.\n        type: \"integer\"\n        default: 10\n        x-nullable: true\n      Shell:\n        description: |\n          Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.\n        type: \"array\"\n        x-nullable: true\n        items:\n          type: \"string\"\n        example: [\"/bin/sh\", \"-c\"]\n    # FIXME(thaJeztah): temporarily using a full example to remove some \"omitempty\" fields. Remove once the fields are removed.\n    example:\n      \"Hostname\": \"\"\n      \"Domainname\": \"\"\n      \"User\": \"web:web\"\n      \"AttachStdin\": false\n      \"AttachStdout\": false\n      \"AttachStderr\": false\n      \"ExposedPorts\": {\n        \"80/tcp\": {},\n        \"443/tcp\": {}\n      }\n      \"Tty\": false\n      \"OpenStdin\": false\n      \"StdinOnce\": false\n      \"Env\": [\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"]\n      \"Cmd\": [\"/bin/sh\"]\n      \"Healthcheck\": {\n        \"Test\": [\"string\"],\n        \"Interval\": 0,\n        \"Timeout\": 0,\n        \"Retries\": 0,\n        \"StartPeriod\": 0,\n        \"StartInterval\": 0\n      }\n      \"ArgsEscaped\": true\n      \"Image\": \"\"\n      \"Volumes\": {\n        \"/app/data\": {},\n        \"/app/config\": {}\n      }\n      \"WorkingDir\": \"/public/\"\n      \"Entrypoint\": []\n      \"OnBuild\": []\n      \"Labels\": {\n        \"com.example.some-label\": \"some-value\",\n        \"com.example.some-other-label\": \"some-other-value\"\n      }\n      \"StopSignal\": \"SIGTERM\"\n      \"Shell\": [\"/bin/sh\", \"-c\"]\n\n  NetworkingConfig:\n    description: |\n      NetworkingConfig represents the container's networking configuration for\n      each of its interfaces.\n      It is used for the networking configs specified in the `docker create`\n      and `docker network connect` commands.\n    type: \"object\"\n    properties:\n      EndpointsConfig:\n        description: |\n          A mapping of network name to endpoint configuration for that network.\n          The endpoint configuration can be left empty to connect to that\n          network with no particular endpoint configuration.\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/EndpointSettings\"\n    example:\n      # putting an example here, instead of using the example values from\n      # /definitions/EndpointSettings, because EndpointSettings contains\n      # operational data returned when inspecting a container that we don't\n      # accept here.\n      EndpointsConfig:\n        isolated_nw:\n          IPAMConfig:\n            IPv4Address: \"172.20.30.33\"\n            IPv6Address: \"2001:db8:abcd::3033\"\n            LinkLocalIPs:\n              - \"169.254.34.68\"\n              - \"fe80::3468\"\n          MacAddress: \"02:42:ac:12:05:02\"\n          Links:\n            - \"container_1\"\n            - \"container_2\"\n          Aliases:\n            - \"server_x\"\n            - \"server_y\"\n        database_nw: {}\n\n  NetworkSettings:\n    description: \"NetworkSettings exposes the network settings in the API\"\n    type: \"object\"\n    properties:\n      Bridge:\n        description: |\n          Name of the default bridge interface when dockerd's --bridge flag is set.\n        type: \"string\"\n        example: \"docker0\"\n      SandboxID:\n        description: SandboxID uniquely represents a container's network stack.\n        type: \"string\"\n        example: \"9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3\"\n      HairpinMode:\n        description: |\n          Indicates if hairpin NAT should be enabled on the virtual interface.\n\n          Deprecated: This field is never set and will be removed in a future release.\n        type: \"boolean\"\n        example: false\n      LinkLocalIPv6Address:\n        description: |\n          IPv6 unicast address using the link-local prefix.\n\n          Deprecated: This field is never set and will be removed in a future release.\n        type: \"string\"\n        example: \"\"\n      LinkLocalIPv6PrefixLen:\n        description: |\n          Prefix length of the IPv6 unicast address.\n\n          Deprecated: This field is never set and will be removed in a future release.\n        type: \"integer\"\n        example: \"\"\n      Ports:\n        $ref: \"#/definitions/PortMap\"\n      SandboxKey:\n        description: SandboxKey is the full path of the netns handle\n        type: \"string\"\n        example: \"/var/run/docker/netns/8ab54b426c38\"\n\n      SecondaryIPAddresses:\n        description: \"Deprecated: This field is never set and will be removed in a future release.\"\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/Address\"\n        x-nullable: true\n\n      SecondaryIPv6Addresses:\n        description: \"Deprecated: This field is never set and will be removed in a future release.\"\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/Address\"\n        x-nullable: true\n\n      # TODO properties below are part of DefaultNetworkSettings, which is\n      # marked as deprecated since Docker 1.9 and to be removed in Docker v17.12\n      EndpointID:\n        description: |\n          EndpointID uniquely represents a service endpoint in a Sandbox.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"string\"\n        example: \"b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b\"\n      Gateway:\n        description: |\n          Gateway address for the default \"bridge\" network.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"string\"\n        example: \"172.17.0.1\"\n      GlobalIPv6Address:\n        description: |\n          Global IPv6 address for the default \"bridge\" network.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"string\"\n        example: \"2001:db8::5689\"\n      GlobalIPv6PrefixLen:\n        description: |\n          Mask length of the global IPv6 address.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"integer\"\n        example: 64\n      IPAddress:\n        description: |\n          IPv4 address for the default \"bridge\" network.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"string\"\n        example: \"172.17.0.4\"\n      IPPrefixLen:\n        description: |\n          Mask length of the IPv4 address.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"integer\"\n        example: 16\n      IPv6Gateway:\n        description: |\n          IPv6 gateway address for this network.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"string\"\n        example: \"2001:db8:2::100\"\n      MacAddress:\n        description: |\n          MAC address for the container on the default \"bridge\" network.\n\n          <p><br /></p>\n\n          > **Deprecated**: This field is only propagated when attached to the\n          > default \"bridge\" network. Use the information from the \"bridge\"\n          > network inside the `Networks` map instead, which contains the same\n          > information. This field was deprecated in Docker 1.9 and is scheduled\n          > to be removed in Docker 17.12.0\n        type: \"string\"\n        example: \"02:42:ac:11:00:04\"\n      Networks:\n        description: |\n          Information about all networks that the container is connected to.\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/EndpointSettings\"\n\n  Address:\n    description: Address represents an IPv4 or IPv6 IP address.\n    type: \"object\"\n    properties:\n      Addr:\n        description: IP address.\n        type: \"string\"\n      PrefixLen:\n        description: Mask length of the IP address.\n        type: \"integer\"\n\n  PortMap:\n    description: |\n      PortMap describes the mapping of container ports to host ports, using the\n      container's port-number and protocol as key in the format `<port>/<protocol>`,\n      for example, `80/udp`.\n\n      If a container's port is mapped for multiple protocols, separate entries\n      are added to the mapping table.\n    type: \"object\"\n    additionalProperties:\n      type: \"array\"\n      x-nullable: true\n      items:\n        $ref: \"#/definitions/PortBinding\"\n    example:\n      \"443/tcp\":\n        - HostIp: \"127.0.0.1\"\n          HostPort: \"4443\"\n      \"80/tcp\":\n        - HostIp: \"0.0.0.0\"\n          HostPort: \"80\"\n        - HostIp: \"0.0.0.0\"\n          HostPort: \"8080\"\n      \"80/udp\":\n        - HostIp: \"0.0.0.0\"\n          HostPort: \"80\"\n      \"53/udp\":\n        - HostIp: \"0.0.0.0\"\n          HostPort: \"53\"\n      \"2377/tcp\": null\n\n  PortBinding:\n    description: |\n      PortBinding represents a binding between a host IP address and a host\n      port.\n    type: \"object\"\n    properties:\n      HostIp:\n        description: \"Host IP address that the container's port is mapped to.\"\n        type: \"string\"\n        example: \"127.0.0.1\"\n      HostPort:\n        description: \"Host port number that the container's port is mapped to.\"\n        type: \"string\"\n        example: \"4443\"\n\n  DriverData:\n    description: |\n      Information about the storage driver used to store the container's and\n      image's filesystem.\n    type: \"object\"\n    required: [Name, Data]\n    properties:\n      Name:\n        description: \"Name of the storage driver.\"\n        type: \"string\"\n        x-nullable: false\n        example: \"overlay2\"\n      Data:\n        description: |\n          Low-level storage metadata, provided as key/value pairs.\n\n          This information is driver-specific, and depends on the storage-driver\n          in use, and should be used for informational purposes only.\n        type: \"object\"\n        x-nullable: false\n        additionalProperties:\n          type: \"string\"\n        example: {\n          \"MergedDir\": \"/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged\",\n          \"UpperDir\": \"/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff\",\n          \"WorkDir\": \"/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work\"\n        }\n\n  FilesystemChange:\n    description: |\n      Change in the container's filesystem.\n    type: \"object\"\n    required: [Path, Kind]\n    properties:\n      Path:\n        description: |\n          Path to file or directory that has changed.\n        type: \"string\"\n        x-nullable: false\n      Kind:\n        $ref: \"#/definitions/ChangeType\"\n\n  ChangeType:\n    description: |\n      Kind of change\n\n      Can be one of:\n\n      - `0`: Modified (\"C\")\n      - `1`: Added (\"A\")\n      - `2`: Deleted (\"D\")\n    type: \"integer\"\n    format: \"uint8\"\n    enum: [0, 1, 2]\n    x-nullable: false\n\n  ImageInspect:\n    description: |\n      Information about an image in the local image cache.\n    type: \"object\"\n    properties:\n      Id:\n        description: |\n          ID is the content-addressable ID of an image.\n\n          This identifier is a content-addressable digest calculated from the\n          image's configuration (which includes the digests of layers used by\n          the image).\n\n          Note that this digest differs from the `RepoDigests` below, which\n          holds digests of image manifests that reference the image.\n        type: \"string\"\n        x-nullable: false\n        example: \"sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710\"\n      Descriptor:\n        description: |\n          Descriptor is an OCI descriptor of the image target.\n          In case of a multi-platform image, this descriptor points to the OCI index\n          or a manifest list.\n\n          This field is only present if the daemon provides a multi-platform image store.\n\n          WARNING: This is experimental and may change at any time without any backward\n          compatibility.\n        x-nullable: true\n        $ref: \"#/definitions/OCIDescriptor\"\n      Manifests:\n        description: |\n            Manifests is a list of image manifests available in this image. It\n            provides a more detailed view of the platform-specific image manifests or\n            other image-attached data like build attestations.\n\n            Only available if the daemon provides a multi-platform image store\n            and the `manifests` option is set in the inspect request.\n\n            WARNING: This is experimental and may change at any time without any backward\n            compatibility.\n        type: \"array\"\n        x-nullable: true\n        items:\n          $ref: \"#/definitions/ImageManifestSummary\"\n      RepoTags:\n        description: |\n          List of image names/tags in the local image cache that reference this\n          image.\n\n          Multiple image tags can refer to the same image, and this list may be\n          empty if no tags reference the image, in which case the image is\n          \"untagged\", in which case it can still be referenced by its ID.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"example:1.0\"\n          - \"example:latest\"\n          - \"example:stable\"\n          - \"internal.registry.example.com:5000/example:1.0\"\n      RepoDigests:\n        description: |\n          List of content-addressable digests of locally available image manifests\n          that the image is referenced from. Multiple manifests can refer to the\n          same image.\n\n          These digests are usually only available if the image was either pulled\n          from a registry, or if the image was pushed to a registry, which is when\n          the manifest is generated and its digest calculated.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb\"\n          - \"internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578\"\n      Parent:\n        description: |\n          ID of the parent image.\n\n          Depending on how the image was created, this field may be empty and\n          is only set for images that were built/created locally. This field\n          is empty if the image was pulled from an image registry.\n        type: \"string\"\n        x-nullable: false\n        example: \"\"\n      Comment:\n        description: |\n          Optional message that was set when committing or importing the image.\n        type: \"string\"\n        x-nullable: false\n        example: \"\"\n      Created:\n        description: |\n          Date and time at which the image was created, formatted in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\n          This information is only available if present in the image,\n          and omitted otherwise.\n        type: \"string\"\n        format: \"dateTime\"\n        x-nullable: true\n        example: \"2022-02-04T21:20:12.497794809Z\"\n      DockerVersion:\n        description: |\n          The version of Docker that was used to build the image.\n\n          Depending on how the image was created, this field may be empty.\n        type: \"string\"\n        x-nullable: false\n        example: \"27.0.1\"\n      Author:\n        description: |\n          Name of the author that was specified when committing the image, or as\n          specified through MAINTAINER (deprecated) in the Dockerfile.\n        type: \"string\"\n        x-nullable: false\n        example: \"\"\n      Config:\n        $ref: \"#/definitions/ImageConfig\"\n      Architecture:\n        description: |\n          Hardware CPU architecture that the image runs on.\n        type: \"string\"\n        x-nullable: false\n        example: \"arm\"\n      Variant:\n        description: |\n          CPU architecture variant (presently ARM-only).\n        type: \"string\"\n        x-nullable: true\n        example: \"v7\"\n      Os:\n        description: |\n          Operating System the image is built to run on.\n        type: \"string\"\n        x-nullable: false\n        example: \"linux\"\n      OsVersion:\n        description: |\n          Operating System version the image is built to run on (especially\n          for Windows).\n        type: \"string\"\n        example: \"\"\n        x-nullable: true\n      Size:\n        description: |\n          Total size of the image including all layers it is composed of.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: false\n        example: 1239828\n      VirtualSize:\n        description: |\n          Total size of the image including all layers it is composed of.\n\n          Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.\n        type: \"integer\"\n        format: \"int64\"\n        example: 1239828\n      GraphDriver:\n        $ref: \"#/definitions/DriverData\"\n      RootFS:\n        description: |\n          Information about the image's RootFS, including the layer IDs.\n        type: \"object\"\n        required: [Type]\n        properties:\n          Type:\n            type: \"string\"\n            x-nullable: false\n            example: \"layers\"\n          Layers:\n            type: \"array\"\n            items:\n              type: \"string\"\n            example:\n              - \"sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6\"\n              - \"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef\"\n      Metadata:\n        description: |\n          Additional metadata of the image in the local cache. This information\n          is local to the daemon, and not part of the image itself.\n        type: \"object\"\n        properties:\n          LastTagTime:\n            description: |\n              Date and time at which the image was last tagged in\n              [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n\n              This information is only available if the image was tagged locally,\n              and omitted otherwise.\n            type: \"string\"\n            format: \"dateTime\"\n            example: \"2022-02-28T14:40:02.623929178Z\"\n            x-nullable: true\n\n  ImageSummary:\n    type: \"object\"\n    x-go-name: \"Summary\"\n    required:\n      - Id\n      - ParentId\n      - RepoTags\n      - RepoDigests\n      - Created\n      - Size\n      - SharedSize\n      - Labels\n      - Containers\n    properties:\n      Id:\n        description: |\n          ID is the content-addressable ID of an image.\n\n          This identifier is a content-addressable digest calculated from the\n          image's configuration (which includes the digests of layers used by\n          the image).\n\n          Note that this digest differs from the `RepoDigests` below, which\n          holds digests of image manifests that reference the image.\n        type: \"string\"\n        x-nullable: false\n        example: \"sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710\"\n      ParentId:\n        description: |\n          ID of the parent image.\n\n          Depending on how the image was created, this field may be empty and\n          is only set for images that were built/created locally. This field\n          is empty if the image was pulled from an image registry.\n        type: \"string\"\n        x-nullable: false\n        example: \"\"\n      RepoTags:\n        description: |\n          List of image names/tags in the local image cache that reference this\n          image.\n\n          Multiple image tags can refer to the same image, and this list may be\n          empty if no tags reference the image, in which case the image is\n          \"untagged\", in which case it can still be referenced by its ID.\n        type: \"array\"\n        x-nullable: false\n        items:\n          type: \"string\"\n        example:\n          - \"example:1.0\"\n          - \"example:latest\"\n          - \"example:stable\"\n          - \"internal.registry.example.com:5000/example:1.0\"\n      RepoDigests:\n        description: |\n          List of content-addressable digests of locally available image manifests\n          that the image is referenced from. Multiple manifests can refer to the\n          same image.\n\n          These digests are usually only available if the image was either pulled\n          from a registry, or if the image was pushed to a registry, which is when\n          the manifest is generated and its digest calculated.\n        type: \"array\"\n        x-nullable: false\n        items:\n          type: \"string\"\n        example:\n          - \"example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb\"\n          - \"internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578\"\n      Created:\n        description: |\n          Date and time at which the image was created as a Unix timestamp\n          (number of seconds since EPOCH).\n        type: \"integer\"\n        x-nullable: false\n        example: \"1644009612\"\n      Size:\n        description: |\n          Total size of the image including all layers it is composed of.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: false\n        example: 172064416\n      SharedSize:\n        description: |\n          Total size of image layers that are shared between this image and other\n          images.\n\n          This size is not calculated by default. `-1` indicates that the value\n          has not been set / calculated.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: false\n        example: 1239828\n      VirtualSize:\n        description: |-\n          Total size of the image including all layers it is composed of.\n\n          Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.\n        type: \"integer\"\n        format: \"int64\"\n        example: 172064416\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        x-nullable: false\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      Containers:\n        description: |\n          Number of containers using this image. Includes both stopped and running\n          containers.\n\n          This size is not calculated by default, and depends on which API endpoint\n          is used. `-1` indicates that the value has not been set / calculated.\n        x-nullable: false\n        type: \"integer\"\n        example: 2\n      Manifests:\n        description: |\n          Manifests is a list of manifests available in this image.\n          It provides a more detailed view of the platform-specific image manifests\n          or other image-attached data like build attestations.\n\n          WARNING: This is experimental and may change at any time without any backward\n          compatibility.\n        type: \"array\"\n        x-nullable: false\n        x-omitempty: true\n        items:\n          $ref: \"#/definitions/ImageManifestSummary\"\n      Descriptor:\n        description: |\n          Descriptor is an OCI descriptor of the image target.\n          In case of a multi-platform image, this descriptor points to the OCI index\n          or a manifest list.\n\n          This field is only present if the daemon provides a multi-platform image store.\n\n          WARNING: This is experimental and may change at any time without any backward\n          compatibility.\n        x-nullable: true\n        $ref: \"#/definitions/OCIDescriptor\"\n\n  AuthConfig:\n    type: \"object\"\n    properties:\n      username:\n        type: \"string\"\n      password:\n        type: \"string\"\n      email:\n        type: \"string\"\n      serveraddress:\n        type: \"string\"\n    example:\n      username: \"hannibal\"\n      password: \"xxxx\"\n      serveraddress: \"https://index.docker.io/v1/\"\n\n  ProcessConfig:\n    type: \"object\"\n    properties:\n      privileged:\n        type: \"boolean\"\n      user:\n        type: \"string\"\n      tty:\n        type: \"boolean\"\n      entrypoint:\n        type: \"string\"\n      arguments:\n        type: \"array\"\n        items:\n          type: \"string\"\n\n  Volume:\n    type: \"object\"\n    required: [Name, Driver, Mountpoint, Labels, Scope, Options]\n    properties:\n      Name:\n        type: \"string\"\n        description: \"Name of the volume.\"\n        x-nullable: false\n        example: \"tardis\"\n      Driver:\n        type: \"string\"\n        description: \"Name of the volume driver used by the volume.\"\n        x-nullable: false\n        example: \"custom\"\n      Mountpoint:\n        type: \"string\"\n        description: \"Mount path of the volume on the host.\"\n        x-nullable: false\n        example: \"/var/lib/docker/volumes/tardis\"\n      CreatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n        description: \"Date/Time the volume was created.\"\n        example: \"2016-06-07T20:31:11.853781916Z\"\n      Status:\n        type: \"object\"\n        description: |\n          Low-level details about the volume, provided by the volume driver.\n          Details are returned as a map with key/value pairs:\n          `{\"key\":\"value\",\"key2\":\"value2\"}`.\n\n          The `Status` field is optional, and is omitted if the volume driver\n          does not support this feature.\n        additionalProperties:\n          type: \"object\"\n        example:\n          hello: \"world\"\n      Labels:\n        type: \"object\"\n        description: \"User-defined key/value metadata.\"\n        x-nullable: false\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      Scope:\n        type: \"string\"\n        description: |\n          The level at which the volume exists. Either `global` for cluster-wide,\n          or `local` for machine level.\n        default: \"local\"\n        x-nullable: false\n        enum: [\"local\", \"global\"]\n        example: \"local\"\n      ClusterVolume:\n        $ref: \"#/definitions/ClusterVolume\"\n      Options:\n        type: \"object\"\n        description: |\n          The driver specific options used when creating the volume.\n        additionalProperties:\n          type: \"string\"\n        example:\n          device: \"tmpfs\"\n          o: \"size=100m,uid=1000\"\n          type: \"tmpfs\"\n      UsageData:\n        type: \"object\"\n        x-nullable: true\n        x-go-name: \"UsageData\"\n        required: [Size, RefCount]\n        description: |\n          Usage details about the volume. This information is used by the\n          `GET /system/df` endpoint, and omitted in other endpoints.\n        properties:\n          Size:\n            type: \"integer\"\n            format: \"int64\"\n            default: -1\n            description: |\n              Amount of disk space used by the volume (in bytes). This information\n              is only available for volumes created with the `\"local\"` volume\n              driver. For volumes created with other volume drivers, this field\n              is set to `-1` (\"not available\")\n            x-nullable: false\n          RefCount:\n            type: \"integer\"\n            format: \"int64\"\n            default: -1\n            description: |\n              The number of containers referencing this volume. This field\n              is set to `-1` if the reference-count is not available.\n            x-nullable: false\n\n  VolumeCreateOptions:\n    description: \"Volume configuration\"\n    type: \"object\"\n    title: \"VolumeConfig\"\n    x-go-name: \"CreateOptions\"\n    properties:\n      Name:\n        description: |\n          The new volume's name. If not specified, Docker generates a name.\n        type: \"string\"\n        x-nullable: false\n        example: \"tardis\"\n      Driver:\n        description: \"Name of the volume driver to use.\"\n        type: \"string\"\n        default: \"local\"\n        x-nullable: false\n        example: \"custom\"\n      DriverOpts:\n        description: |\n          A mapping of driver options and values. These options are\n          passed directly to the driver and are driver specific.\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          device: \"tmpfs\"\n          o: \"size=100m,uid=1000\"\n          type: \"tmpfs\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      ClusterVolumeSpec:\n        $ref: \"#/definitions/ClusterVolumeSpec\"\n\n  VolumeListResponse:\n    type: \"object\"\n    title: \"VolumeListResponse\"\n    x-go-name: \"ListResponse\"\n    description: \"Volume list response\"\n    properties:\n      Volumes:\n        type: \"array\"\n        description: \"List of volumes\"\n        items:\n          $ref: \"#/definitions/Volume\"\n      Warnings:\n        type: \"array\"\n        description: |\n          Warnings that occurred when fetching the list of volumes.\n        items:\n          type: \"string\"\n        example: []\n\n  Network:\n    type: \"object\"\n    properties:\n      Name:\n        description: |\n          Name of the network.\n        type: \"string\"\n        example: \"my_network\"\n      Id:\n        description: |\n          ID that uniquely identifies a network on a single machine.\n        type: \"string\"\n        example: \"7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99\"\n      Created:\n        description: |\n          Date and time at which the network was created in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2016-10-19T04:33:30.360899459Z\"\n      Scope:\n        description: |\n          The level at which the network exists (e.g. `swarm` for cluster-wide\n          or `local` for machine level)\n        type: \"string\"\n        example: \"local\"\n      Driver:\n        description: |\n          The name of the driver used to create the network (e.g. `bridge`,\n          `overlay`).\n        type: \"string\"\n        example: \"overlay\"\n      EnableIPv4:\n        description: |\n          Whether the network was created with IPv4 enabled.\n        type: \"boolean\"\n        example: true\n      EnableIPv6:\n        description: |\n          Whether the network was created with IPv6 enabled.\n        type: \"boolean\"\n        example: false\n      IPAM:\n        $ref: \"#/definitions/IPAM\"\n      Internal:\n        description: |\n          Whether the network is created to only allow internal networking\n          connectivity.\n        type: \"boolean\"\n        default: false\n        example: false\n      Attachable:\n        description: |\n          Whether a global / swarm scope network is manually attachable by regular\n          containers from workers in swarm mode.\n        type: \"boolean\"\n        default: false\n        example: false\n      Ingress:\n        description: |\n          Whether the network is providing the routing-mesh for the swarm cluster.\n        type: \"boolean\"\n        default: false\n        example: false\n      ConfigFrom:\n        $ref: \"#/definitions/ConfigReference\"\n      ConfigOnly:\n        description: |\n          Whether the network is a config-only network. Config-only networks are\n          placeholder networks for network configurations to be used by other\n          networks. Config-only networks cannot be used directly to run containers\n          or services.\n        type: \"boolean\"\n        default: false\n      Containers:\n        description: |\n          Contains endpoints attached to the network.\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/NetworkContainer\"\n        example:\n          19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c:\n            Name: \"test\"\n            EndpointID: \"628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a\"\n            MacAddress: \"02:42:ac:13:00:02\"\n            IPv4Address: \"172.19.0.2/16\"\n            IPv6Address: \"\"\n      Options:\n        description: |\n          Network-specific options uses when creating the network.\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.docker.network.bridge.default_bridge: \"true\"\n          com.docker.network.bridge.enable_icc: \"true\"\n          com.docker.network.bridge.enable_ip_masquerade: \"true\"\n          com.docker.network.bridge.host_binding_ipv4: \"0.0.0.0\"\n          com.docker.network.bridge.name: \"docker0\"\n          com.docker.network.driver.mtu: \"1500\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      Peers:\n        description: |\n          List of peer nodes for an overlay network. This field is only present\n          for overlay networks, and omitted for other network types.\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/PeerInfo\"\n        x-nullable: true\n      # TODO: Add Services (only present when \"verbose\" is set).\n\n  ConfigReference:\n    description: |\n      The config-only network source to provide the configuration for\n      this network.\n    type: \"object\"\n    properties:\n      Network:\n        description: |\n          The name of the config-only network that provides the network's\n          configuration. The specified network must be an existing config-only\n          network. Only network names are allowed, not network IDs.\n        type: \"string\"\n        example: \"config_only_network_01\"\n\n  IPAM:\n    type: \"object\"\n    properties:\n      Driver:\n        description: \"Name of the IPAM driver to use.\"\n        type: \"string\"\n        default: \"default\"\n        example: \"default\"\n      Config:\n        description: |\n          List of IPAM configuration options, specified as a map:\n\n          ```\n          {\"Subnet\": <CIDR>, \"IPRange\": <CIDR>, \"Gateway\": <IP address>, \"AuxAddress\": <device_name:IP address>}\n          ```\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/IPAMConfig\"\n      Options:\n        description: \"Driver-specific options, specified as a map.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          foo: \"bar\"\n\n  IPAMConfig:\n    type: \"object\"\n    properties:\n      Subnet:\n        type: \"string\"\n        example: \"172.20.0.0/16\"\n      IPRange:\n        type: \"string\"\n        example: \"172.20.10.0/24\"\n      Gateway:\n        type: \"string\"\n        example: \"172.20.10.11\"\n      AuxiliaryAddresses:\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n\n  NetworkContainer:\n    type: \"object\"\n    properties:\n      Name:\n        type: \"string\"\n        example: \"container_1\"\n      EndpointID:\n        type: \"string\"\n        example: \"628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a\"\n      MacAddress:\n        type: \"string\"\n        example: \"02:42:ac:13:00:02\"\n      IPv4Address:\n        type: \"string\"\n        example: \"172.19.0.2/16\"\n      IPv6Address:\n        type: \"string\"\n        example: \"\"\n\n  PeerInfo:\n    description: |\n      PeerInfo represents one peer of an overlay network.\n    type: \"object\"\n    properties:\n      Name:\n        description:\n          ID of the peer-node in the Swarm cluster.\n        type: \"string\"\n        example: \"6869d7c1732b\"\n      IP:\n        description:\n          IP-address of the peer-node in the Swarm cluster.\n        type: \"string\"\n        example: \"10.133.77.91\"\n\n  NetworkCreateResponse:\n    description: \"OK response to NetworkCreate operation\"\n    type: \"object\"\n    title: \"NetworkCreateResponse\"\n    x-go-name: \"CreateResponse\"\n    required: [Id, Warning]\n    properties:\n      Id:\n        description: \"The ID of the created network.\"\n        type: \"string\"\n        x-nullable: false\n        example: \"b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d\"\n      Warning:\n        description: \"Warnings encountered when creating the container\"\n        type: \"string\"\n        x-nullable: false\n        example: \"\"\n\n  BuildInfo:\n    type: \"object\"\n    properties:\n      id:\n        type: \"string\"\n      stream:\n        type: \"string\"\n      error:\n        type: \"string\"\n        x-nullable: true\n        description: |-\n          errors encountered during the operation.\n\n\n          > **Deprecated**: This field is deprecated since API v1.4, and will be omitted in a future API version. Use the information in errorDetail instead.\n      errorDetail:\n        $ref: \"#/definitions/ErrorDetail\"\n      status:\n        type: \"string\"\n      progress:\n        type: \"string\"\n        x-nullable: true\n        description: |-\n          Progress is a pre-formatted presentation of progressDetail.\n\n\n          > **Deprecated**: This field is deprecated since API v1.8, and will be omitted in a future API version. Use the information in progressDetail instead.\n      progressDetail:\n        $ref: \"#/definitions/ProgressDetail\"\n      aux:\n        $ref: \"#/definitions/ImageID\"\n\n  BuildCache:\n    type: \"object\"\n    description: |\n      BuildCache contains information about a build cache record.\n    properties:\n      ID:\n        type: \"string\"\n        description: |\n          Unique ID of the build cache record.\n        example: \"ndlpt0hhvkqcdfkputsk4cq9c\"\n      Parent:\n        description: |\n          ID of the parent build cache record.\n\n          > **Deprecated**: This field is deprecated, and omitted if empty.\n        type: \"string\"\n        x-nullable: true\n        example: \"\"\n      Parents:\n        description: |\n          List of parent build cache record IDs.\n        type: \"array\"\n        items:\n          type: \"string\"\n        x-nullable: true\n        example: [\"hw53o5aio51xtltp5xjp8v7fx\"]\n      Type:\n        type: \"string\"\n        description: |\n          Cache record type.\n        example: \"regular\"\n        # see https://github.com/moby/buildkit/blob/fce4a32258dc9d9664f71a4831d5de10f0670677/client/diskusage.go#L75-L84\n        enum:\n          - \"internal\"\n          - \"frontend\"\n          - \"source.local\"\n          - \"source.git.checkout\"\n          - \"exec.cachemount\"\n          - \"regular\"\n      Description:\n        type: \"string\"\n        description: |\n          Description of the build-step that produced the build cache.\n        example: \"mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \\\"true\\\";' > /etc/apt/apt.conf.d/keep-cache\"\n      InUse:\n        type: \"boolean\"\n        description: |\n          Indicates if the build cache is in use.\n        example: false\n      Shared:\n        type: \"boolean\"\n        description: |\n          Indicates if the build cache is shared.\n        example: true\n      Size:\n        description: |\n          Amount of disk space used by the build cache (in bytes).\n        type: \"integer\"\n        example: 51\n      CreatedAt:\n        description: |\n          Date and time at which the build cache was created in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2016-08-18T10:44:24.496525531Z\"\n      LastUsedAt:\n        description: |\n          Date and time at which the build cache was last used in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        x-nullable: true\n        example: \"2017-08-09T07:09:37.632105588Z\"\n      UsageCount:\n        type: \"integer\"\n        example: 26\n\n  ImageID:\n    type: \"object\"\n    description: \"Image ID or Digest\"\n    properties:\n      ID:\n        type: \"string\"\n    example:\n      ID: \"sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c\"\n\n  CreateImageInfo:\n    type: \"object\"\n    properties:\n      id:\n        type: \"string\"\n      error:\n        type: \"string\"\n        x-nullable: true\n        description: |-\n          errors encountered during the operation.\n\n\n          > **Deprecated**: This field is deprecated since API v1.4, and will be omitted in a future API version. Use the information in errorDetail instead.\n      errorDetail:\n        $ref: \"#/definitions/ErrorDetail\"\n      status:\n        type: \"string\"\n      progress:\n        type: \"string\"\n        x-nullable: true\n        description: |-\n          Progress is a pre-formatted presentation of progressDetail.\n\n\n          > **Deprecated**: This field is deprecated since API v1.8, and will be omitted in a future API version. Use the information in progressDetail instead.\n      progressDetail:\n        $ref: \"#/definitions/ProgressDetail\"\n\n  PushImageInfo:\n    type: \"object\"\n    properties:\n      error:\n        type: \"string\"\n        x-nullable: true\n        description: |-\n          errors encountered during the operation.\n\n\n          > **Deprecated**: This field is deprecated since API v1.4, and will be omitted in a future API version. Use the information in errorDetail instead.\n      errorDetail:\n        $ref: \"#/definitions/ErrorDetail\"\n      status:\n        type: \"string\"\n      progress:\n        type: \"string\"\n        x-nullable: true\n        description: |-\n          Progress is a pre-formatted presentation of progressDetail.\n\n\n          > **Deprecated**: This field is deprecated since API v1.8, and will be omitted in a future API version. Use the information in progressDetail instead.\n      progressDetail:\n        $ref: \"#/definitions/ProgressDetail\"\n\n  ErrorDetail:\n    type: \"object\"\n    properties:\n      code:\n        type: \"integer\"\n      message:\n        type: \"string\"\n\n  ProgressDetail:\n    type: \"object\"\n    properties:\n      current:\n        type: \"integer\"\n      total:\n        type: \"integer\"\n\n  ErrorResponse:\n    description: \"Represents an error.\"\n    type: \"object\"\n    required: [\"message\"]\n    properties:\n      message:\n        description: \"The error message.\"\n        type: \"string\"\n        x-nullable: false\n    example:\n      message: \"Something went wrong.\"\n\n  IDResponse:\n    description: \"Response to an API call that returns just an Id\"\n    type: \"object\"\n    x-go-name: \"IDResponse\"\n    required: [\"Id\"]\n    properties:\n      Id:\n        description: \"The id of the newly created object.\"\n        type: \"string\"\n        x-nullable: false\n\n  EndpointSettings:\n    description: \"Configuration for a network endpoint.\"\n    type: \"object\"\n    properties:\n      # Configurations\n      IPAMConfig:\n        $ref: \"#/definitions/EndpointIPAMConfig\"\n      Links:\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"container_1\"\n          - \"container_2\"\n      MacAddress:\n        description: |\n          MAC address for the endpoint on this network. The network driver might ignore this parameter.\n        type: \"string\"\n        example: \"02:42:ac:11:00:04\"\n      Aliases:\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"server_x\"\n          - \"server_y\"\n      DriverOpts:\n        description: |\n          DriverOpts is a mapping of driver options and values. These options\n          are passed directly to the driver and are driver specific.\n        type: \"object\"\n        x-nullable: true\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      GwPriority:\n        description: |\n          This property determines which endpoint will provide the default\n          gateway for a container. The endpoint with the highest priority will\n          be used. If multiple endpoints have the same priority, endpoints are\n          lexicographically sorted based on their network name, and the one\n          that sorts first is picked.\n        type: \"number\"\n        example:\n          - 10\n\n      # Operational data\n      NetworkID:\n        description: |\n          Unique ID of the network.\n        type: \"string\"\n        example: \"08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a\"\n      EndpointID:\n        description: |\n          Unique ID for the service endpoint in a Sandbox.\n        type: \"string\"\n        example: \"b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b\"\n      Gateway:\n        description: |\n          Gateway address for this network.\n        type: \"string\"\n        example: \"172.17.0.1\"\n      IPAddress:\n        description: |\n          IPv4 address.\n        type: \"string\"\n        example: \"172.17.0.4\"\n      IPPrefixLen:\n        description: |\n          Mask length of the IPv4 address.\n        type: \"integer\"\n        example: 16\n      IPv6Gateway:\n        description: |\n          IPv6 gateway address.\n        type: \"string\"\n        example: \"2001:db8:2::100\"\n      GlobalIPv6Address:\n        description: |\n          Global IPv6 address.\n        type: \"string\"\n        example: \"2001:db8::5689\"\n      GlobalIPv6PrefixLen:\n        description: |\n          Mask length of the global IPv6 address.\n        type: \"integer\"\n        format: \"int64\"\n        example: 64\n      DNSNames:\n        description: |\n          List of all DNS names an endpoint has on a specific network. This\n          list is based on the container name, network aliases, container short\n          ID, and hostname.\n\n          These DNS names are non-fully qualified but can contain several dots.\n          You can get fully qualified DNS names by appending `.<network-name>`.\n          For instance, if container name is `my.ctr` and the network is named\n          `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be\n          `my.ctr.testnet`.\n        type: array\n        items:\n          type: string\n        example: [\"foobar\", \"server_x\", \"server_y\", \"my.ctr\"]\n\n  EndpointIPAMConfig:\n    description: |\n      EndpointIPAMConfig represents an endpoint's IPAM configuration.\n    type: \"object\"\n    x-nullable: true\n    properties:\n      IPv4Address:\n        type: \"string\"\n        example: \"172.20.30.33\"\n      IPv6Address:\n        type: \"string\"\n        example: \"2001:db8:abcd::3033\"\n      LinkLocalIPs:\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"169.254.34.68\"\n          - \"fe80::3468\"\n\n  PluginMount:\n    type: \"object\"\n    x-nullable: false\n    required: [Name, Description, Settable, Source, Destination, Type, Options]\n    properties:\n      Name:\n        type: \"string\"\n        x-nullable: false\n        example: \"some-mount\"\n      Description:\n        type: \"string\"\n        x-nullable: false\n        example: \"This is a mount that's used by the plugin.\"\n      Settable:\n        type: \"array\"\n        items:\n          type: \"string\"\n      Source:\n        type: \"string\"\n        example: \"/var/lib/docker/plugins/\"\n      Destination:\n        type: \"string\"\n        x-nullable: false\n        example: \"/mnt/state\"\n      Type:\n        type: \"string\"\n        x-nullable: false\n        example: \"bind\"\n      Options:\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"rbind\"\n          - \"rw\"\n\n  PluginDevice:\n    type: \"object\"\n    required: [Name, Description, Settable, Path]\n    x-nullable: false\n    properties:\n      Name:\n        type: \"string\"\n        x-nullable: false\n      Description:\n        type: \"string\"\n        x-nullable: false\n      Settable:\n        type: \"array\"\n        items:\n          type: \"string\"\n      Path:\n        type: \"string\"\n        example: \"/dev/fuse\"\n\n  PluginEnv:\n    type: \"object\"\n    x-nullable: false\n    required: [Name, Description, Settable, Value]\n    properties:\n      Name:\n        x-nullable: false\n        type: \"string\"\n      Description:\n        x-nullable: false\n        type: \"string\"\n      Settable:\n        type: \"array\"\n        items:\n          type: \"string\"\n      Value:\n        type: \"string\"\n\n  PluginInterfaceType:\n    type: \"object\"\n    x-nullable: false\n    required: [Prefix, Capability, Version]\n    properties:\n      Prefix:\n        type: \"string\"\n        x-nullable: false\n      Capability:\n        type: \"string\"\n        x-nullable: false\n      Version:\n        type: \"string\"\n        x-nullable: false\n\n  PluginPrivilege:\n    description: |\n      Describes a permission the user has to accept upon installing\n      the plugin.\n    type: \"object\"\n    x-go-name: \"PluginPrivilege\"\n    properties:\n      Name:\n        type: \"string\"\n        example: \"network\"\n      Description:\n        type: \"string\"\n      Value:\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"host\"\n\n  Plugin:\n    description: \"A plugin for the Engine API\"\n    type: \"object\"\n    required: [Settings, Enabled, Config, Name]\n    properties:\n      Id:\n        type: \"string\"\n        example: \"5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078\"\n      Name:\n        type: \"string\"\n        x-nullable: false\n        example: \"tiborvass/sample-volume-plugin\"\n      Enabled:\n        description:\n          True if the plugin is running. False if the plugin is not running,\n          only installed.\n        type: \"boolean\"\n        x-nullable: false\n        example: true\n      Settings:\n        description: \"Settings that can be modified by users.\"\n        type: \"object\"\n        x-nullable: false\n        required: [Args, Devices, Env, Mounts]\n        properties:\n          Mounts:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginMount\"\n          Env:\n            type: \"array\"\n            items:\n              type: \"string\"\n            example:\n              - \"DEBUG=0\"\n          Args:\n            type: \"array\"\n            items:\n              type: \"string\"\n          Devices:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginDevice\"\n      PluginReference:\n        description: \"plugin remote reference used to push/pull the plugin\"\n        type: \"string\"\n        x-nullable: false\n        example: \"localhost:5000/tiborvass/sample-volume-plugin:latest\"\n      Config:\n        description: \"The config of a plugin.\"\n        type: \"object\"\n        x-nullable: false\n        required:\n          - Description\n          - Documentation\n          - Interface\n          - Entrypoint\n          - WorkDir\n          - Network\n          - Linux\n          - PidHost\n          - PropagatedMount\n          - IpcHost\n          - Mounts\n          - Env\n          - Args\n        properties:\n          DockerVersion:\n            description: \"Docker Version used to create the plugin\"\n            type: \"string\"\n            x-nullable: false\n            example: \"17.06.0-ce\"\n          Description:\n            type: \"string\"\n            x-nullable: false\n            example: \"A sample volume plugin for Docker\"\n          Documentation:\n            type: \"string\"\n            x-nullable: false\n            example: \"https://docs.docker.com/engine/extend/plugins/\"\n          Interface:\n            description: \"The interface between Docker and the plugin\"\n            x-nullable: false\n            type: \"object\"\n            required: [Types, Socket]\n            properties:\n              Types:\n                type: \"array\"\n                items:\n                  $ref: \"#/definitions/PluginInterfaceType\"\n                example:\n                  - \"docker.volumedriver/1.0\"\n              Socket:\n                type: \"string\"\n                x-nullable: false\n                example: \"plugins.sock\"\n              ProtocolScheme:\n                type: \"string\"\n                example: \"some.protocol/v1.0\"\n                description: \"Protocol to use for clients connecting to the plugin.\"\n                enum:\n                  - \"\"\n                  - \"moby.plugins.http/v1\"\n          Entrypoint:\n            type: \"array\"\n            items:\n              type: \"string\"\n            example:\n              - \"/usr/bin/sample-volume-plugin\"\n              - \"/data\"\n          WorkDir:\n            type: \"string\"\n            x-nullable: false\n            example: \"/bin/\"\n          User:\n            type: \"object\"\n            x-nullable: false\n            properties:\n              UID:\n                type: \"integer\"\n                format: \"uint32\"\n                example: 1000\n              GID:\n                type: \"integer\"\n                format: \"uint32\"\n                example: 1000\n          Network:\n            type: \"object\"\n            x-nullable: false\n            required: [Type]\n            properties:\n              Type:\n                x-nullable: false\n                type: \"string\"\n                example: \"host\"\n          Linux:\n            type: \"object\"\n            x-nullable: false\n            required: [Capabilities, AllowAllDevices, Devices]\n            properties:\n              Capabilities:\n                type: \"array\"\n                items:\n                  type: \"string\"\n                example:\n                  - \"CAP_SYS_ADMIN\"\n                  - \"CAP_SYSLOG\"\n              AllowAllDevices:\n                type: \"boolean\"\n                x-nullable: false\n                example: false\n              Devices:\n                type: \"array\"\n                items:\n                  $ref: \"#/definitions/PluginDevice\"\n          PropagatedMount:\n            type: \"string\"\n            x-nullable: false\n            example: \"/mnt/volumes\"\n          IpcHost:\n            type: \"boolean\"\n            x-nullable: false\n            example: false\n          PidHost:\n            type: \"boolean\"\n            x-nullable: false\n            example: false\n          Mounts:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginMount\"\n          Env:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginEnv\"\n            example:\n              - Name: \"DEBUG\"\n                Description: \"If set, prints debug messages\"\n                Settable: null\n                Value: \"0\"\n          Args:\n            type: \"object\"\n            x-nullable: false\n            required: [Name, Description, Settable, Value]\n            properties:\n              Name:\n                x-nullable: false\n                type: \"string\"\n                example: \"args\"\n              Description:\n                x-nullable: false\n                type: \"string\"\n                example: \"command line arguments\"\n              Settable:\n                type: \"array\"\n                items:\n                  type: \"string\"\n              Value:\n                type: \"array\"\n                items:\n                  type: \"string\"\n          rootfs:\n            type: \"object\"\n            properties:\n              type:\n                type: \"string\"\n                example: \"layers\"\n              diff_ids:\n                type: \"array\"\n                items:\n                  type: \"string\"\n                example:\n                  - \"sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887\"\n                  - \"sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8\"\n\n  ObjectVersion:\n    description: |\n      The version number of the object such as node, service, etc. This is needed\n      to avoid conflicting writes. The client must send the version number along\n      with the modified specification when updating these objects.\n\n      This approach ensures safe concurrency and determinism in that the change\n      on the object may not be applied if the version number has changed from the\n      last read. In other words, if two update requests specify the same base\n      version, only one of the requests can succeed. As a result, two separate\n      update requests that happen at the same time will not unintentionally\n      overwrite each other.\n    type: \"object\"\n    properties:\n      Index:\n        type: \"integer\"\n        format: \"uint64\"\n        example: 373531\n\n  NodeSpec:\n    type: \"object\"\n    properties:\n      Name:\n        description: \"Name for the node.\"\n        type: \"string\"\n        example: \"my-node\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n      Role:\n        description: \"Role of the node.\"\n        type: \"string\"\n        enum:\n          - \"worker\"\n          - \"manager\"\n        example: \"manager\"\n      Availability:\n        description: \"Availability of the node.\"\n        type: \"string\"\n        enum:\n          - \"active\"\n          - \"pause\"\n          - \"drain\"\n        example: \"active\"\n    example:\n      Availability: \"active\"\n      Name: \"node-name\"\n      Role: \"manager\"\n      Labels:\n        foo: \"bar\"\n\n  Node:\n    type: \"object\"\n    properties:\n      ID:\n        type: \"string\"\n        example: \"24ifsmvkjbyhk\"\n      Version:\n        $ref: \"#/definitions/ObjectVersion\"\n      CreatedAt:\n        description: |\n          Date and time at which the node was added to the swarm in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2016-08-18T10:44:24.496525531Z\"\n      UpdatedAt:\n        description: |\n          Date and time at which the node was last updated in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2017-08-09T07:09:37.632105588Z\"\n      Spec:\n        $ref: \"#/definitions/NodeSpec\"\n      Description:\n        $ref: \"#/definitions/NodeDescription\"\n      Status:\n        $ref: \"#/definitions/NodeStatus\"\n      ManagerStatus:\n        $ref: \"#/definitions/ManagerStatus\"\n\n  NodeDescription:\n    description: |\n      NodeDescription encapsulates the properties of the Node as reported by the\n      agent.\n    type: \"object\"\n    properties:\n      Hostname:\n        type: \"string\"\n        example: \"bf3067039e47\"\n      Platform:\n        $ref: \"#/definitions/Platform\"\n      Resources:\n        $ref: \"#/definitions/ResourceObject\"\n      Engine:\n        $ref: \"#/definitions/EngineDescription\"\n      TLSInfo:\n        $ref: \"#/definitions/TLSInfo\"\n\n  Platform:\n    description: |\n      Platform represents the platform (Arch/OS).\n    type: \"object\"\n    properties:\n      Architecture:\n        description: |\n          Architecture represents the hardware architecture (for example,\n          `x86_64`).\n        type: \"string\"\n        example: \"x86_64\"\n      OS:\n        description: |\n          OS represents the Operating System (for example, `linux` or `windows`).\n        type: \"string\"\n        example: \"linux\"\n\n  EngineDescription:\n    description: \"EngineDescription provides information about an engine.\"\n    type: \"object\"\n    properties:\n      EngineVersion:\n        type: \"string\"\n        example: \"17.06.0\"\n      Labels:\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          foo: \"bar\"\n      Plugins:\n        type: \"array\"\n        items:\n          type: \"object\"\n          properties:\n            Type:\n              type: \"string\"\n            Name:\n              type: \"string\"\n        example:\n          - Type: \"Log\"\n            Name: \"awslogs\"\n          - Type: \"Log\"\n            Name: \"fluentd\"\n          - Type: \"Log\"\n            Name: \"gcplogs\"\n          - Type: \"Log\"\n            Name: \"gelf\"\n          - Type: \"Log\"\n            Name: \"journald\"\n          - Type: \"Log\"\n            Name: \"json-file\"\n          - Type: \"Log\"\n            Name: \"splunk\"\n          - Type: \"Log\"\n            Name: \"syslog\"\n          - Type: \"Network\"\n            Name: \"bridge\"\n          - Type: \"Network\"\n            Name: \"host\"\n          - Type: \"Network\"\n            Name: \"ipvlan\"\n          - Type: \"Network\"\n            Name: \"macvlan\"\n          - Type: \"Network\"\n            Name: \"null\"\n          - Type: \"Network\"\n            Name: \"overlay\"\n          - Type: \"Volume\"\n            Name: \"local\"\n          - Type: \"Volume\"\n            Name: \"localhost:5000/vieux/sshfs:latest\"\n          - Type: \"Volume\"\n            Name: \"vieux/sshfs:latest\"\n\n  TLSInfo:\n    description: |\n      Information about the issuer of leaf TLS certificates and the trusted root\n      CA certificate.\n    type: \"object\"\n    properties:\n      TrustRoot:\n        description: |\n          The root CA certificate(s) that are used to validate leaf TLS\n          certificates.\n        type: \"string\"\n      CertIssuerSubject:\n        description:\n          The base64-url-safe-encoded raw subject bytes of the issuer.\n        type: \"string\"\n      CertIssuerPublicKey:\n        description: |\n          The base64-url-safe-encoded raw public key bytes of the issuer.\n        type: \"string\"\n    example:\n      TrustRoot: |\n        -----BEGIN CERTIFICATE-----\n        MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\n        EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\n        MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\n        A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n        3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\n        Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\n        PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\n        pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n        -----END CERTIFICATE-----\n      CertIssuerSubject: \"MBMxETAPBgNVBAMTCHN3YXJtLWNh\"\n      CertIssuerPublicKey: \"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==\"\n\n  NodeStatus:\n    description: |\n      NodeStatus represents the status of a node.\n\n      It provides the current status of the node, as seen by the manager.\n    type: \"object\"\n    properties:\n      State:\n        $ref: \"#/definitions/NodeState\"\n      Message:\n        type: \"string\"\n        example: \"\"\n      Addr:\n        description: \"IP address of the node.\"\n        type: \"string\"\n        example: \"172.17.0.2\"\n\n  NodeState:\n    description: \"NodeState represents the state of a node.\"\n    type: \"string\"\n    enum:\n      - \"unknown\"\n      - \"down\"\n      - \"ready\"\n      - \"disconnected\"\n    example: \"ready\"\n\n  ManagerStatus:\n    description: |\n      ManagerStatus represents the status of a manager.\n\n      It provides the current status of a node's manager component, if the node\n      is a manager.\n    x-nullable: true\n    type: \"object\"\n    properties:\n      Leader:\n        type: \"boolean\"\n        default: false\n        example: true\n      Reachability:\n        $ref: \"#/definitions/Reachability\"\n      Addr:\n        description: |\n          The IP address and port at which the manager is reachable.\n        type: \"string\"\n        example: \"10.0.0.46:2377\"\n\n  Reachability:\n    description: \"Reachability represents the reachability of a node.\"\n    type: \"string\"\n    enum:\n      - \"unknown\"\n      - \"unreachable\"\n      - \"reachable\"\n    example: \"reachable\"\n\n  SwarmSpec:\n    description: \"User modifiable swarm configuration.\"\n    type: \"object\"\n    properties:\n      Name:\n        description: \"Name of the swarm.\"\n        type: \"string\"\n        example: \"default\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.corp.type: \"production\"\n          com.example.corp.department: \"engineering\"\n      Orchestration:\n        description: \"Orchestration configuration.\"\n        type: \"object\"\n        x-nullable: true\n        properties:\n          TaskHistoryRetentionLimit:\n            description: |\n              The number of historic tasks to keep per instance or node. If\n              negative, never remove completed or failed tasks.\n            type: \"integer\"\n            format: \"int64\"\n            example: 10\n      Raft:\n        description: \"Raft configuration.\"\n        type: \"object\"\n        properties:\n          SnapshotInterval:\n            description: \"The number of log entries between snapshots.\"\n            type: \"integer\"\n            format: \"uint64\"\n            example: 10000\n          KeepOldSnapshots:\n            description: |\n              The number of snapshots to keep beyond the current snapshot.\n            type: \"integer\"\n            format: \"uint64\"\n          LogEntriesForSlowFollowers:\n            description: |\n              The number of log entries to keep around to sync up slow followers\n              after a snapshot is created.\n            type: \"integer\"\n            format: \"uint64\"\n            example: 500\n          ElectionTick:\n            description: |\n              The number of ticks that a follower will wait for a message from\n              the leader before becoming a candidate and starting an election.\n              `ElectionTick` must be greater than `HeartbeatTick`.\n\n              A tick currently defaults to one second, so these translate\n              directly to seconds currently, but this is NOT guaranteed.\n            type: \"integer\"\n            example: 3\n          HeartbeatTick:\n            description: |\n              The number of ticks between heartbeats. Every HeartbeatTick ticks,\n              the leader will send a heartbeat to the followers.\n\n              A tick currently defaults to one second, so these translate\n              directly to seconds currently, but this is NOT guaranteed.\n            type: \"integer\"\n            example: 1\n      Dispatcher:\n        description: \"Dispatcher configuration.\"\n        type: \"object\"\n        x-nullable: true\n        properties:\n          HeartbeatPeriod:\n            description: |\n              The delay for an agent to send a heartbeat to the dispatcher.\n            type: \"integer\"\n            format: \"int64\"\n            example: 5000000000\n      CAConfig:\n        description: \"CA configuration.\"\n        type: \"object\"\n        x-nullable: true\n        properties:\n          NodeCertExpiry:\n            description: \"The duration node certificates are issued for.\"\n            type: \"integer\"\n            format: \"int64\"\n            example: 7776000000000000\n          ExternalCAs:\n            description: |\n              Configuration for forwarding signing requests to an external\n              certificate authority.\n            type: \"array\"\n            items:\n              type: \"object\"\n              properties:\n                Protocol:\n                  description: |\n                    Protocol for communication with the external CA (currently\n                    only `cfssl` is supported).\n                  type: \"string\"\n                  enum:\n                    - \"cfssl\"\n                  default: \"cfssl\"\n                URL:\n                  description: |\n                    URL where certificate signing requests should be sent.\n                  type: \"string\"\n                Options:\n                  description: |\n                    An object with key/value pairs that are interpreted as\n                    protocol-specific options for the external CA driver.\n                  type: \"object\"\n                  additionalProperties:\n                    type: \"string\"\n                CACert:\n                  description: |\n                    The root CA certificate (in PEM format) this external CA uses\n                    to issue TLS certificates (assumed to be to the current swarm\n                    root CA certificate if not provided).\n                  type: \"string\"\n          SigningCACert:\n            description: |\n              The desired signing CA certificate for all swarm node TLS leaf\n              certificates, in PEM format.\n            type: \"string\"\n          SigningCAKey:\n            description: |\n              The desired signing CA key for all swarm node TLS leaf certificates,\n              in PEM format.\n            type: \"string\"\n          ForceRotate:\n            description: |\n              An integer whose purpose is to force swarm to generate a new\n              signing CA certificate and key, if none have been specified in\n              `SigningCACert` and `SigningCAKey`\n            format: \"uint64\"\n            type: \"integer\"\n      EncryptionConfig:\n        description: \"Parameters related to encryption-at-rest.\"\n        type: \"object\"\n        properties:\n          AutoLockManagers:\n            description: |\n              If set, generate a key and use it to lock data stored on the\n              managers.\n            type: \"boolean\"\n            example: false\n      TaskDefaults:\n        description: \"Defaults for creating tasks in this cluster.\"\n        type: \"object\"\n        properties:\n          LogDriver:\n            description: |\n              The log driver to use for tasks created in the orchestrator if\n              unspecified by a service.\n\n              Updating this value only affects new tasks. Existing tasks continue\n              to use their previously configured log driver until recreated.\n            type: \"object\"\n            properties:\n              Name:\n                description: |\n                  The log driver to use as a default for new tasks.\n                type: \"string\"\n                example: \"json-file\"\n              Options:\n                description: |\n                  Driver-specific options for the selected log driver, specified\n                  as key/value pairs.\n                type: \"object\"\n                additionalProperties:\n                  type: \"string\"\n                example:\n                  \"max-file\": \"10\"\n                  \"max-size\": \"100m\"\n\n  # The Swarm information for `GET /info`. It is the same as `GET /swarm`, but\n  # without `JoinTokens`.\n  ClusterInfo:\n    description: |\n      ClusterInfo represents information about the swarm as is returned by the\n      \"/info\" endpoint. Join-tokens are not included.\n    x-nullable: true\n    type: \"object\"\n    properties:\n      ID:\n        description: \"The ID of the swarm.\"\n        type: \"string\"\n        example: \"abajmipo7b4xz5ip2nrla6b11\"\n      Version:\n        $ref: \"#/definitions/ObjectVersion\"\n      CreatedAt:\n        description: |\n          Date and time at which the swarm was initialised in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2016-08-18T10:44:24.496525531Z\"\n      UpdatedAt:\n        description: |\n          Date and time at which the swarm was last updated in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2017-08-09T07:09:37.632105588Z\"\n      Spec:\n        $ref: \"#/definitions/SwarmSpec\"\n      TLSInfo:\n        $ref: \"#/definitions/TLSInfo\"\n      RootRotationInProgress:\n        description: |\n          Whether there is currently a root CA rotation in progress for the swarm\n        type: \"boolean\"\n        example: false\n      DataPathPort:\n        description: |\n          DataPathPort specifies the data path port number for data traffic.\n          Acceptable port range is 1024 to 49151.\n          If no port is set or is set to 0, the default port (4789) is used.\n        type: \"integer\"\n        format: \"uint32\"\n        default: 4789\n        example: 4789\n      DefaultAddrPool:\n        description: |\n          Default Address Pool specifies default subnet pools for global scope\n          networks.\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"CIDR\"\n          example: [\"10.10.0.0/16\", \"20.20.0.0/16\"]\n      SubnetSize:\n        description: |\n          SubnetSize specifies the subnet size of the networks created from the\n          default subnet pool.\n        type: \"integer\"\n        format: \"uint32\"\n        maximum: 29\n        default: 24\n        example: 24\n\n  JoinTokens:\n    description: |\n      JoinTokens contains the tokens workers and managers need to join the swarm.\n    type: \"object\"\n    properties:\n      Worker:\n        description: |\n          The token workers can use to join the swarm.\n        type: \"string\"\n        example: \"SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx\"\n      Manager:\n        description: |\n          The token managers can use to join the swarm.\n        type: \"string\"\n        example: \"SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2\"\n\n  Swarm:\n    type: \"object\"\n    allOf:\n      - $ref: \"#/definitions/ClusterInfo\"\n      - type: \"object\"\n        properties:\n          JoinTokens:\n            $ref: \"#/definitions/JoinTokens\"\n\n  TaskSpec:\n    description: \"User modifiable task configuration.\"\n    type: \"object\"\n    properties:\n      PluginSpec:\n        type: \"object\"\n        description: |\n          Plugin spec for the service.  *(Experimental release only.)*\n\n          <p><br /></p>\n\n          > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n          > mutually exclusive. PluginSpec is only used when the Runtime field\n          > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n          > field is set to `attachment`.\n        properties:\n          Name:\n            description: \"The name or 'alias' to use for the plugin.\"\n            type: \"string\"\n          Remote:\n            description: \"The plugin image reference to use.\"\n            type: \"string\"\n          Disabled:\n            description: \"Disable the plugin once scheduled.\"\n            type: \"boolean\"\n          PluginPrivilege:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginPrivilege\"\n      ContainerSpec:\n        type: \"object\"\n        description: |\n          Container spec for the service.\n\n          <p><br /></p>\n\n          > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n          > mutually exclusive. PluginSpec is only used when the Runtime field\n          > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n          > field is set to `attachment`.\n        properties:\n          Image:\n            description: \"The image name to use for the container\"\n            type: \"string\"\n          Labels:\n            description: \"User-defined key/value data.\"\n            type: \"object\"\n            additionalProperties:\n              type: \"string\"\n          Command:\n            description: \"The command to be run in the image.\"\n            type: \"array\"\n            items:\n              type: \"string\"\n          Args:\n            description: \"Arguments to the command.\"\n            type: \"array\"\n            items:\n              type: \"string\"\n          Hostname:\n            description: |\n              The hostname to use for the container, as a valid\n              [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname.\n            type: \"string\"\n          Env:\n            description: |\n              A list of environment variables in the form `VAR=value`.\n            type: \"array\"\n            items:\n              type: \"string\"\n          Dir:\n            description: \"The working directory for commands to run in.\"\n            type: \"string\"\n          User:\n            description: \"The user inside the container.\"\n            type: \"string\"\n          Groups:\n            type: \"array\"\n            description: |\n              A list of additional groups that the container process will run as.\n            items:\n              type: \"string\"\n          Privileges:\n            type: \"object\"\n            description: \"Security options for the container\"\n            properties:\n              CredentialSpec:\n                type: \"object\"\n                description: \"CredentialSpec for managed service account (Windows only)\"\n                properties:\n                  Config:\n                    type: \"string\"\n                    example: \"0bt9dmxjvjiqermk6xrop3ekq\"\n                    description: |\n                      Load credential spec from a Swarm Config with the given ID.\n                      The specified config must also be present in the Configs\n                      field with the Runtime property set.\n\n                      <p><br /></p>\n\n\n                      > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n                      > and `CredentialSpec.Config` are mutually exclusive.\n                  File:\n                    type: \"string\"\n                    example: \"spec.json\"\n                    description: |\n                      Load credential spec from this file. The file is read by\n                      the daemon, and must be present in the `CredentialSpecs`\n                      subdirectory in the docker data directory, which defaults\n                      to `C:\\ProgramData\\Docker\\` on Windows.\n\n                      For example, specifying `spec.json` loads\n                      `C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n                      <p><br /></p>\n\n                      > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n                      > and `CredentialSpec.Config` are mutually exclusive.\n                  Registry:\n                    type: \"string\"\n                    description: |\n                      Load credential spec from this value in the Windows\n                      registry. The specified registry value must be located in:\n\n                      `HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n                      <p><br /></p>\n\n\n                      > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`,\n                      > and `CredentialSpec.Config` are mutually exclusive.\n              SELinuxContext:\n                type: \"object\"\n                description: \"SELinux labels of the container\"\n                properties:\n                  Disable:\n                    type: \"boolean\"\n                    description: \"Disable SELinux\"\n                  User:\n                    type: \"string\"\n                    description: \"SELinux user label\"\n                  Role:\n                    type: \"string\"\n                    description: \"SELinux role label\"\n                  Type:\n                    type: \"string\"\n                    description: \"SELinux type label\"\n                  Level:\n                    type: \"string\"\n                    description: \"SELinux level label\"\n              Seccomp:\n                type: \"object\"\n                description: \"Options for configuring seccomp on the container\"\n                properties:\n                  Mode:\n                    type: \"string\"\n                    enum:\n                      - \"default\"\n                      - \"unconfined\"\n                      - \"custom\"\n                  Profile:\n                    description: \"The custom seccomp profile as a json object\"\n                    type: \"string\"\n              AppArmor:\n                type: \"object\"\n                description: \"Options for configuring AppArmor on the container\"\n                properties:\n                  Mode:\n                    type: \"string\"\n                    enum:\n                      - \"default\"\n                      - \"disabled\"\n              NoNewPrivileges:\n                type: \"boolean\"\n                description: \"Configuration of the no_new_privs bit in the container\"\n\n          TTY:\n            description: \"Whether a pseudo-TTY should be allocated.\"\n            type: \"boolean\"\n          OpenStdin:\n            description: \"Open `stdin`\"\n            type: \"boolean\"\n          ReadOnly:\n            description: \"Mount the container's root filesystem as read only.\"\n            type: \"boolean\"\n          Mounts:\n            description: |\n              Specification for mounts to be added to containers created as part\n              of the service.\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Mount\"\n          StopSignal:\n            description: \"Signal to stop the container.\"\n            type: \"string\"\n          StopGracePeriod:\n            description: |\n              Amount of time to wait for the container to terminate before\n              forcefully killing it.\n            type: \"integer\"\n            format: \"int64\"\n          HealthCheck:\n            $ref: \"#/definitions/HealthConfig\"\n          Hosts:\n            type: \"array\"\n            description: |\n              A list of hostname/IP mappings to add to the container's `hosts`\n              file. The format of extra hosts is specified in the\n              [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\n              man page:\n\n                  IP_address canonical_hostname [aliases...]\n            items:\n              type: \"string\"\n          DNSConfig:\n            description: |\n              Specification for DNS related configurations in resolver configuration\n              file (`resolv.conf`).\n            type: \"object\"\n            properties:\n              Nameservers:\n                description: \"The IP addresses of the name servers.\"\n                type: \"array\"\n                items:\n                  type: \"string\"\n              Search:\n                description: \"A search list for host-name lookup.\"\n                type: \"array\"\n                items:\n                  type: \"string\"\n              Options:\n                description: |\n                  A list of internal resolver variables to be modified (e.g.,\n                  `debug`, `ndots:3`, etc.).\n                type: \"array\"\n                items:\n                  type: \"string\"\n          Secrets:\n            description: |\n              Secrets contains references to zero or more secrets that will be\n              exposed to the service.\n            type: \"array\"\n            items:\n              type: \"object\"\n              properties:\n                File:\n                  description: |\n                    File represents a specific target that is backed by a file.\n                  type: \"object\"\n                  properties:\n                    Name:\n                      description: |\n                        Name represents the final filename in the filesystem.\n                      type: \"string\"\n                    UID:\n                      description: \"UID represents the file UID.\"\n                      type: \"string\"\n                    GID:\n                      description: \"GID represents the file GID.\"\n                      type: \"string\"\n                    Mode:\n                      description: \"Mode represents the FileMode of the file.\"\n                      type: \"integer\"\n                      format: \"uint32\"\n                SecretID:\n                  description: |\n                    SecretID represents the ID of the specific secret that we're\n                    referencing.\n                  type: \"string\"\n                SecretName:\n                  description: |\n                    SecretName is the name of the secret that this references,\n                    but this is just provided for lookup/display purposes. The\n                    secret in the reference will be identified by its ID.\n                  type: \"string\"\n          OomScoreAdj:\n            type: \"integer\"\n            format: \"int64\"\n            description: |\n              An integer value containing the score given to the container in\n              order to tune OOM killer preferences.\n            example: 0\n          Configs:\n            description: |\n              Configs contains references to zero or more configs that will be\n              exposed to the service.\n            type: \"array\"\n            items:\n              type: \"object\"\n              properties:\n                File:\n                  description: |\n                    File represents a specific target that is backed by a file.\n\n                    <p><br /><p>\n\n                    > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive\n                  type: \"object\"\n                  properties:\n                    Name:\n                      description: |\n                        Name represents the final filename in the filesystem.\n                      type: \"string\"\n                    UID:\n                      description: \"UID represents the file UID.\"\n                      type: \"string\"\n                    GID:\n                      description: \"GID represents the file GID.\"\n                      type: \"string\"\n                    Mode:\n                      description: \"Mode represents the FileMode of the file.\"\n                      type: \"integer\"\n                      format: \"uint32\"\n                Runtime:\n                  description: |\n                    Runtime represents a target that is not mounted into the\n                    container but is used by the task\n\n                    <p><br /><p>\n\n                    > **Note**: `Configs.File` and `Configs.Runtime` are mutually\n                    > exclusive\n                  type: \"object\"\n                ConfigID:\n                  description: |\n                    ConfigID represents the ID of the specific config that we're\n                    referencing.\n                  type: \"string\"\n                ConfigName:\n                  description: |\n                    ConfigName is the name of the config that this references,\n                    but this is just provided for lookup/display purposes. The\n                    config in the reference will be identified by its ID.\n                  type: \"string\"\n          Isolation:\n            type: \"string\"\n            description: |\n              Isolation technology of the containers running the service.\n              (Windows only)\n            enum:\n              - \"default\"\n              - \"process\"\n              - \"hyperv\"\n              - \"\"\n          Init:\n            description: |\n              Run an init inside the container that forwards signals and reaps\n              processes. This field is omitted if empty, and the default (as\n              configured on the daemon) is used.\n            type: \"boolean\"\n            x-nullable: true\n          Sysctls:\n            description: |\n              Set kernel namedspaced parameters (sysctls) in the container.\n              The Sysctls option on services accepts the same sysctls as the\n              are supported on containers. Note that while the same sysctls are\n              supported, no guarantees or checks are made about their\n              suitability for a clustered environment, and it's up to the user\n              to determine whether a given sysctl will work properly in a\n              Service.\n            type: \"object\"\n            additionalProperties:\n              type: \"string\"\n          # This option is not used by Windows containers\n          CapabilityAdd:\n            type: \"array\"\n            description: |\n              A list of kernel capabilities to add to the default set\n              for the container.\n            items:\n              type: \"string\"\n            example:\n              - \"CAP_NET_RAW\"\n              - \"CAP_SYS_ADMIN\"\n              - \"CAP_SYS_CHROOT\"\n              - \"CAP_SYSLOG\"\n          CapabilityDrop:\n            type: \"array\"\n            description: |\n              A list of kernel capabilities to drop from the default set\n              for the container.\n            items:\n              type: \"string\"\n            example:\n              - \"CAP_NET_RAW\"\n          Ulimits:\n            description: |\n              A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n            type: \"array\"\n            items:\n              type: \"object\"\n              properties:\n                Name:\n                  description: \"Name of ulimit\"\n                  type: \"string\"\n                Soft:\n                  description: \"Soft limit\"\n                  type: \"integer\"\n                Hard:\n                  description: \"Hard limit\"\n                  type: \"integer\"\n      NetworkAttachmentSpec:\n        description: |\n          Read-only spec type for non-swarm containers attached to swarm overlay\n          networks.\n\n          <p><br /></p>\n\n          > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n          > mutually exclusive. PluginSpec is only used when the Runtime field\n          > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n          > field is set to `attachment`.\n        type: \"object\"\n        properties:\n          ContainerID:\n            description: \"ID of the container represented by this task\"\n            type: \"string\"\n      Resources:\n        description: |\n          Resource requirements which apply to each individual container created\n          as part of the service.\n        type: \"object\"\n        properties:\n          Limits:\n            description: \"Define resources limits.\"\n            $ref: \"#/definitions/Limit\"\n          Reservations:\n            description: \"Define resources reservation.\"\n            $ref: \"#/definitions/ResourceObject\"\n      RestartPolicy:\n        description: |\n          Specification for the restart policy which applies to containers\n          created as part of this service.\n        type: \"object\"\n        properties:\n          Condition:\n            description: \"Condition for restart.\"\n            type: \"string\"\n            enum:\n              - \"none\"\n              - \"on-failure\"\n              - \"any\"\n          Delay:\n            description: \"Delay between restart attempts.\"\n            type: \"integer\"\n            format: \"int64\"\n          MaxAttempts:\n            description: |\n              Maximum attempts to restart a given container before giving up\n              (default value is 0, which is ignored).\n            type: \"integer\"\n            format: \"int64\"\n            default: 0\n          Window:\n            description: |\n              Windows is the time window used to evaluate the restart policy\n              (default value is 0, which is unbounded).\n            type: \"integer\"\n            format: \"int64\"\n            default: 0\n      Placement:\n        type: \"object\"\n        properties:\n          Constraints:\n            description: |\n              An array of constraint expressions to limit the set of nodes where\n              a task can be scheduled. Constraint expressions can either use a\n              _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find\n              nodes that satisfy every expression (AND match). Constraints can\n              match node or Docker Engine labels as follows:\n\n              node attribute       | matches                        | example\n              ---------------------|--------------------------------|-----------------------------------------------\n              `node.id`            | Node ID                        | `node.id==2ivku8v2gvtg4`\n              `node.hostname`      | Node hostname                  | `node.hostname!=node-2`\n              `node.role`          | Node role (`manager`/`worker`) | `node.role==manager`\n              `node.platform.os`   | Node operating system          | `node.platform.os==windows`\n              `node.platform.arch` | Node architecture              | `node.platform.arch==x86_64`\n              `node.labels`        | User-defined node labels       | `node.labels.security==high`\n              `engine.labels`      | Docker Engine's labels         | `engine.labels.operatingsystem==ubuntu-24.04`\n\n              `engine.labels` apply to Docker Engine labels like operating system,\n              drivers, etc. Swarm administrators add `node.labels` for operational\n              purposes by using the [`node update endpoint`](#operation/NodeUpdate).\n\n            type: \"array\"\n            items:\n              type: \"string\"\n            example:\n              - \"node.hostname!=node3.corp.example.com\"\n              - \"node.role!=manager\"\n              - \"node.labels.type==production\"\n              - \"node.platform.os==linux\"\n              - \"node.platform.arch==x86_64\"\n          Preferences:\n            description: |\n              Preferences provide a way to make the scheduler aware of factors\n              such as topology. They are provided in order from highest to\n              lowest precedence.\n            type: \"array\"\n            items:\n              type: \"object\"\n              properties:\n                Spread:\n                  type: \"object\"\n                  properties:\n                    SpreadDescriptor:\n                      description: |\n                        label descriptor, such as `engine.labels.az`.\n                      type: \"string\"\n            example:\n              - Spread:\n                  SpreadDescriptor: \"node.labels.datacenter\"\n              - Spread:\n                  SpreadDescriptor: \"node.labels.rack\"\n          MaxReplicas:\n            description: |\n              Maximum number of replicas for per node (default value is 0, which\n              is unlimited)\n            type: \"integer\"\n            format: \"int64\"\n            default: 0\n          Platforms:\n            description: |\n              Platforms stores all the platforms that the service's image can\n              run on. This field is used in the platform filter for scheduling.\n              If empty, then the platform filter is off, meaning there are no\n              scheduling restrictions.\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Platform\"\n      ForceUpdate:\n        description: |\n          A counter that triggers an update even if no relevant parameters have\n          been changed.\n        type: \"integer\"\n      Runtime:\n        description: |\n          Runtime is the type of runtime specified for the task executor.\n        type: \"string\"\n      Networks:\n        description: \"Specifies which networks the service should attach to.\"\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/NetworkAttachmentConfig\"\n      LogDriver:\n        description: |\n          Specifies the log driver to use for tasks created from this spec. If\n          not present, the default one for the swarm will be used, finally\n          falling back to the engine default if not specified.\n        type: \"object\"\n        properties:\n          Name:\n            type: \"string\"\n          Options:\n            type: \"object\"\n            additionalProperties:\n              type: \"string\"\n\n  TaskState:\n    type: \"string\"\n    enum:\n      - \"new\"\n      - \"allocated\"\n      - \"pending\"\n      - \"assigned\"\n      - \"accepted\"\n      - \"preparing\"\n      - \"ready\"\n      - \"starting\"\n      - \"running\"\n      - \"complete\"\n      - \"shutdown\"\n      - \"failed\"\n      - \"rejected\"\n      - \"remove\"\n      - \"orphaned\"\n\n  ContainerStatus:\n    type: \"object\"\n    description: \"represents the status of a container.\"\n    properties:\n      ContainerID:\n        type: \"string\"\n      PID:\n        type: \"integer\"\n      ExitCode:\n        type: \"integer\"\n\n  PortStatus:\n    type: \"object\"\n    description: \"represents the port status of a task's host ports whose service has published host ports\"\n    properties:\n      Ports:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/EndpointPortConfig\"\n\n  TaskStatus:\n    type: \"object\"\n    description: \"represents the status of a task.\"\n    properties:\n      Timestamp:\n        type: \"string\"\n        format: \"dateTime\"\n      State:\n        $ref: \"#/definitions/TaskState\"\n      Message:\n        type: \"string\"\n      Err:\n        type: \"string\"\n      ContainerStatus:\n        $ref: \"#/definitions/ContainerStatus\"\n      PortStatus:\n        $ref: \"#/definitions/PortStatus\"\n\n  Task:\n    type: \"object\"\n    properties:\n      ID:\n        description: \"The ID of the task.\"\n        type: \"string\"\n      Version:\n        $ref: \"#/definitions/ObjectVersion\"\n      CreatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      UpdatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      Name:\n        description: \"Name of the task.\"\n        type: \"string\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n      Spec:\n        $ref: \"#/definitions/TaskSpec\"\n      ServiceID:\n        description: \"The ID of the service this task is part of.\"\n        type: \"string\"\n      Slot:\n        type: \"integer\"\n      NodeID:\n        description: \"The ID of the node that this task is on.\"\n        type: \"string\"\n      AssignedGenericResources:\n        $ref: \"#/definitions/GenericResources\"\n      Status:\n        $ref: \"#/definitions/TaskStatus\"\n      DesiredState:\n        $ref: \"#/definitions/TaskState\"\n      JobIteration:\n        description: |\n          If the Service this Task belongs to is a job-mode service, contains\n          the JobIteration of the Service this Task was created for. Absent if\n          the Task was created for a Replicated or Global Service.\n        $ref: \"#/definitions/ObjectVersion\"\n    example:\n      ID: \"0kzzo1i0y4jz6027t0k7aezc7\"\n      Version:\n        Index: 71\n      CreatedAt: \"2016-06-07T21:07:31.171892745Z\"\n      UpdatedAt: \"2016-06-07T21:07:31.376370513Z\"\n      Spec:\n        ContainerSpec:\n          Image: \"redis\"\n        Resources:\n          Limits: {}\n          Reservations: {}\n        RestartPolicy:\n          Condition: \"any\"\n          MaxAttempts: 0\n        Placement: {}\n      ServiceID: \"9mnpnzenvg8p8tdbtq4wvbkcz\"\n      Slot: 1\n      NodeID: \"60gvrl6tm78dmak4yl7srz94v\"\n      Status:\n        Timestamp: \"2016-06-07T21:07:31.290032978Z\"\n        State: \"running\"\n        Message: \"started\"\n        ContainerStatus:\n          ContainerID: \"e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035\"\n          PID: 677\n      DesiredState: \"running\"\n      NetworksAttachments:\n        - Network:\n            ID: \"4qvuz4ko70xaltuqbt8956gd1\"\n            Version:\n              Index: 18\n            CreatedAt: \"2016-06-07T20:31:11.912919752Z\"\n            UpdatedAt: \"2016-06-07T21:07:29.955277358Z\"\n            Spec:\n              Name: \"ingress\"\n              Labels:\n                com.docker.swarm.internal: \"true\"\n              DriverConfiguration: {}\n              IPAMOptions:\n                Driver: {}\n                Configs:\n                  - Subnet: \"10.255.0.0/16\"\n                    Gateway: \"10.255.0.1\"\n            DriverState:\n              Name: \"overlay\"\n              Options:\n                com.docker.network.driver.overlay.vxlanid_list: \"256\"\n            IPAMOptions:\n              Driver:\n                Name: \"default\"\n              Configs:\n                - Subnet: \"10.255.0.0/16\"\n                  Gateway: \"10.255.0.1\"\n          Addresses:\n            - \"10.255.0.10/16\"\n      AssignedGenericResources:\n        - DiscreteResourceSpec:\n            Kind: \"SSD\"\n            Value: 3\n        - NamedResourceSpec:\n            Kind: \"GPU\"\n            Value: \"UUID1\"\n        - NamedResourceSpec:\n            Kind: \"GPU\"\n            Value: \"UUID2\"\n\n  ServiceSpec:\n    description: \"User modifiable configuration for a service.\"\n    type: object\n    properties:\n      Name:\n        description: \"Name of the service.\"\n        type: \"string\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n      TaskTemplate:\n        $ref: \"#/definitions/TaskSpec\"\n      Mode:\n        description: \"Scheduling mode for the service.\"\n        type: \"object\"\n        properties:\n          Replicated:\n            type: \"object\"\n            properties:\n              Replicas:\n                type: \"integer\"\n                format: \"int64\"\n          Global:\n            type: \"object\"\n          ReplicatedJob:\n            description: |\n              The mode used for services with a finite number of tasks that run\n              to a completed state.\n            type: \"object\"\n            properties:\n              MaxConcurrent:\n                description: |\n                  The maximum number of replicas to run simultaneously.\n                type: \"integer\"\n                format: \"int64\"\n                default: 1\n              TotalCompletions:\n                description: |\n                  The total number of replicas desired to reach the Completed\n                  state. If unset, will default to the value of `MaxConcurrent`\n                type: \"integer\"\n                format: \"int64\"\n          GlobalJob:\n            description: |\n              The mode used for services which run a task to the completed state\n              on each valid node.\n            type: \"object\"\n      UpdateConfig:\n        description: \"Specification for the update strategy of the service.\"\n        type: \"object\"\n        properties:\n          Parallelism:\n            description: |\n              Maximum number of tasks to be updated in one iteration (0 means\n              unlimited parallelism).\n            type: \"integer\"\n            format: \"int64\"\n          Delay:\n            description: \"Amount of time between updates, in nanoseconds.\"\n            type: \"integer\"\n            format: \"int64\"\n          FailureAction:\n            description: |\n              Action to take if an updated task fails to run, or stops running\n              during the update.\n            type: \"string\"\n            enum:\n              - \"continue\"\n              - \"pause\"\n              - \"rollback\"\n          Monitor:\n            description: |\n              Amount of time to monitor each updated task for failures, in\n              nanoseconds.\n            type: \"integer\"\n            format: \"int64\"\n          MaxFailureRatio:\n            description: |\n              The fraction of tasks that may fail during an update before the\n              failure action is invoked, specified as a floating point number\n              between 0 and 1.\n            type: \"number\"\n            default: 0\n          Order:\n            description: |\n              The order of operations when rolling out an updated task. Either\n              the old task is shut down before the new task is started, or the\n              new task is started before the old task is shut down.\n            type: \"string\"\n            enum:\n              - \"stop-first\"\n              - \"start-first\"\n      RollbackConfig:\n        description: \"Specification for the rollback strategy of the service.\"\n        type: \"object\"\n        properties:\n          Parallelism:\n            description: |\n              Maximum number of tasks to be rolled back in one iteration (0 means\n              unlimited parallelism).\n            type: \"integer\"\n            format: \"int64\"\n          Delay:\n            description: |\n              Amount of time between rollback iterations, in nanoseconds.\n            type: \"integer\"\n            format: \"int64\"\n          FailureAction:\n            description: |\n              Action to take if an rolled back task fails to run, or stops\n              running during the rollback.\n            type: \"string\"\n            enum:\n              - \"continue\"\n              - \"pause\"\n          Monitor:\n            description: |\n              Amount of time to monitor each rolled back task for failures, in\n              nanoseconds.\n            type: \"integer\"\n            format: \"int64\"\n          MaxFailureRatio:\n            description: |\n              The fraction of tasks that may fail during a rollback before the\n              failure action is invoked, specified as a floating point number\n              between 0 and 1.\n            type: \"number\"\n            default: 0\n          Order:\n            description: |\n              The order of operations when rolling back a task. Either the old\n              task is shut down before the new task is started, or the new task\n              is started before the old task is shut down.\n            type: \"string\"\n            enum:\n              - \"stop-first\"\n              - \"start-first\"\n      Networks:\n        description: |\n          Specifies which networks the service should attach to.\n\n          Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/NetworkAttachmentConfig\"\n\n      EndpointSpec:\n        $ref: \"#/definitions/EndpointSpec\"\n\n  EndpointPortConfig:\n    type: \"object\"\n    properties:\n      Name:\n        type: \"string\"\n      Protocol:\n        type: \"string\"\n        enum:\n          - \"tcp\"\n          - \"udp\"\n          - \"sctp\"\n      TargetPort:\n        description: \"The port inside the container.\"\n        type: \"integer\"\n      PublishedPort:\n        description: \"The port on the swarm hosts.\"\n        type: \"integer\"\n      PublishMode:\n        description: |\n          The mode in which port is published.\n\n          <p><br /></p>\n\n          - \"ingress\" makes the target port accessible on every node,\n            regardless of whether there is a task for the service running on\n            that node or not.\n          - \"host\" bypasses the routing mesh and publish the port directly on\n            the swarm node where that service is running.\n\n        type: \"string\"\n        enum:\n          - \"ingress\"\n          - \"host\"\n        default: \"ingress\"\n        example: \"ingress\"\n\n  EndpointSpec:\n    description: \"Properties that can be configured to access and load balance a service.\"\n    type: \"object\"\n    properties:\n      Mode:\n        description: |\n          The mode of resolution to use for internal load balancing between tasks.\n        type: \"string\"\n        enum:\n          - \"vip\"\n          - \"dnsrr\"\n        default: \"vip\"\n      Ports:\n        description: |\n          List of exposed ports that this service is accessible on from the\n          outside. Ports can only be provided if `vip` resolution mode is used.\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/EndpointPortConfig\"\n\n  Service:\n    type: \"object\"\n    properties:\n      ID:\n        type: \"string\"\n      Version:\n        $ref: \"#/definitions/ObjectVersion\"\n      CreatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      UpdatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      Spec:\n        $ref: \"#/definitions/ServiceSpec\"\n      Endpoint:\n        type: \"object\"\n        properties:\n          Spec:\n            $ref: \"#/definitions/EndpointSpec\"\n          Ports:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/EndpointPortConfig\"\n          VirtualIPs:\n            type: \"array\"\n            items:\n              type: \"object\"\n              properties:\n                NetworkID:\n                  type: \"string\"\n                Addr:\n                  type: \"string\"\n      UpdateStatus:\n        description: \"The status of a service update.\"\n        type: \"object\"\n        properties:\n          State:\n            type: \"string\"\n            enum:\n              - \"updating\"\n              - \"paused\"\n              - \"completed\"\n          StartedAt:\n            type: \"string\"\n            format: \"dateTime\"\n          CompletedAt:\n            type: \"string\"\n            format: \"dateTime\"\n          Message:\n            type: \"string\"\n      ServiceStatus:\n        description: |\n          The status of the service's tasks. Provided only when requested as\n          part of a ServiceList operation.\n        type: \"object\"\n        properties:\n          RunningTasks:\n            description: |\n              The number of tasks for the service currently in the Running state.\n            type: \"integer\"\n            format: \"uint64\"\n            example: 7\n          DesiredTasks:\n            description: |\n              The number of tasks for the service desired to be running.\n              For replicated services, this is the replica count from the\n              service spec. For global services, this is computed by taking\n              count of all tasks for the service with a Desired State other\n              than Shutdown.\n            type: \"integer\"\n            format: \"uint64\"\n            example: 10\n          CompletedTasks:\n            description: |\n              The number of tasks for a job that are in the Completed state.\n              This field must be cross-referenced with the service type, as the\n              value of 0 may mean the service is not in a job mode, or it may\n              mean the job-mode service has no tasks yet Completed.\n            type: \"integer\"\n            format: \"uint64\"\n      JobStatus:\n        description: |\n          The status of the service when it is in one of ReplicatedJob or\n          GlobalJob modes. Absent on Replicated and Global mode services. The\n          JobIteration is an ObjectVersion, but unlike the Service's version,\n          does not need to be sent with an update request.\n        type: \"object\"\n        properties:\n          JobIteration:\n            description: |\n              JobIteration is a value increased each time a Job is executed,\n              successfully or otherwise. \"Executed\", in this case, means the\n              job as a whole has been started, not that an individual Task has\n              been launched. A job is \"Executed\" when its ServiceSpec is\n              updated. JobIteration can be used to disambiguate Tasks belonging\n              to different executions of a job.  Though JobIteration will\n              increase with each subsequent execution, it may not necessarily\n              increase by 1, and so JobIteration should not be used to\n            $ref: \"#/definitions/ObjectVersion\"\n          LastExecution:\n            description: |\n              The last time, as observed by the server, that this job was\n              started.\n            type: \"string\"\n            format: \"dateTime\"\n    example:\n      ID: \"9mnpnzenvg8p8tdbtq4wvbkcz\"\n      Version:\n        Index: 19\n      CreatedAt: \"2016-06-07T21:05:51.880065305Z\"\n      UpdatedAt: \"2016-06-07T21:07:29.962229872Z\"\n      Spec:\n        Name: \"hopeful_cori\"\n        TaskTemplate:\n          ContainerSpec:\n            Image: \"redis\"\n          Resources:\n            Limits: {}\n            Reservations: {}\n          RestartPolicy:\n            Condition: \"any\"\n            MaxAttempts: 0\n          Placement: {}\n          ForceUpdate: 0\n        Mode:\n          Replicated:\n            Replicas: 1\n        UpdateConfig:\n          Parallelism: 1\n          Delay: 1000000000\n          FailureAction: \"pause\"\n          Monitor: 15000000000\n          MaxFailureRatio: 0.15\n        RollbackConfig:\n          Parallelism: 1\n          Delay: 1000000000\n          FailureAction: \"pause\"\n          Monitor: 15000000000\n          MaxFailureRatio: 0.15\n        EndpointSpec:\n          Mode: \"vip\"\n          Ports:\n            -\n              Protocol: \"tcp\"\n              TargetPort: 6379\n              PublishedPort: 30001\n      Endpoint:\n        Spec:\n          Mode: \"vip\"\n          Ports:\n            -\n              Protocol: \"tcp\"\n              TargetPort: 6379\n              PublishedPort: 30001\n        Ports:\n          -\n            Protocol: \"tcp\"\n            TargetPort: 6379\n            PublishedPort: 30001\n        VirtualIPs:\n          -\n            NetworkID: \"4qvuz4ko70xaltuqbt8956gd1\"\n            Addr: \"10.255.0.2/16\"\n          -\n            NetworkID: \"4qvuz4ko70xaltuqbt8956gd1\"\n            Addr: \"10.255.0.3/16\"\n\n  ImageDeleteResponseItem:\n    type: \"object\"\n    x-go-name: \"DeleteResponse\"\n    properties:\n      Untagged:\n        description: \"The image ID of an image that was untagged\"\n        type: \"string\"\n      Deleted:\n        description: \"The image ID of an image that was deleted\"\n        type: \"string\"\n\n  ServiceCreateResponse:\n    type: \"object\"\n    description: |\n      contains the information returned to a client on the\n      creation of a new service.\n    properties:\n      ID:\n        description: \"The ID of the created service.\"\n        type: \"string\"\n        x-nullable: false\n        example: \"ak7w3gjqoa3kuz8xcpnyy0pvl\"\n      Warnings:\n        description: |\n          Optional warning message.\n\n          FIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n        type: \"array\"\n        x-nullable: true\n        items:\n          type: \"string\"\n        example:\n          - \"unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found\"\n\n  ServiceUpdateResponse:\n    type: \"object\"\n    properties:\n      Warnings:\n        description: \"Optional warning messages\"\n        type: \"array\"\n        items:\n          type: \"string\"\n    example:\n      Warnings:\n        - \"unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found\"\n\n  ContainerInspectResponse:\n    type: \"object\"\n    title: \"ContainerInspectResponse\"\n    x-go-name: \"InspectResponse\"\n    properties:\n      Id:\n        description: |-\n          The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).\n        type: \"string\"\n        x-go-name: \"ID\"\n        minLength: 64\n        maxLength: 64\n        pattern: \"^[0-9a-fA-F]{64}$\"\n        example: \"aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf\"\n      Created:\n        description: |-\n          Date and time at which the container was created, formatted in\n          [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n        type: \"string\"\n        format: \"dateTime\"\n        x-nullable: true\n        example: \"2025-02-17T17:43:39.64001363Z\"\n      Path:\n        description: |-\n          The path to the command being run\n        type: \"string\"\n        example: \"/bin/sh\"\n      Args:\n        description: \"The arguments to the command being run\"\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"-c\"\n          - \"exit 9\"\n      State:\n        $ref: \"#/definitions/ContainerState\"\n      Image:\n        description: |-\n          The ID (digest) of the image that this container was created from.\n        type: \"string\"\n        example: \"sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782\"\n      ResolvConfPath:\n        description: |-\n          Location of the `/etc/resolv.conf` generated for the container on the\n          host.\n\n          This file is managed through the docker daemon, and should not be\n          accessed or modified by other tools.\n        type: \"string\"\n        example: \"/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf\"\n      HostnamePath:\n        description: |-\n          Location of the `/etc/hostname` generated for the container on the\n          host.\n\n          This file is managed through the docker daemon, and should not be\n          accessed or modified by other tools.\n        type: \"string\"\n        example: \"/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname\"\n      HostsPath:\n        description: |-\n          Location of the `/etc/hosts` generated for the container on the\n          host.\n\n          This file is managed through the docker daemon, and should not be\n          accessed or modified by other tools.\n        type: \"string\"\n        example: \"/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts\"\n      LogPath:\n        description: |-\n          Location of the file used to buffer the container's logs. Depending on\n          the logging-driver used for the container, this field may be omitted.\n\n          This file is managed through the docker daemon, and should not be\n          accessed or modified by other tools.\n        type: \"string\"\n        x-nullable: true\n        example: \"/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log\"\n      Name:\n        description: |-\n          The name associated with this container.\n\n          For historic reasons, the name may be prefixed with a forward-slash (`/`).\n        type: \"string\"\n        example: \"/funny_chatelet\"\n      RestartCount:\n        description: |-\n          Number of times the container was restarted since it was created,\n          or since daemon was started.\n        type: \"integer\"\n        example: 0\n      Driver:\n        description: |-\n          The storage-driver used for the container's filesystem (graph-driver\n          or snapshotter).\n        type: \"string\"\n        example: \"overlayfs\"\n      Platform:\n        description: |-\n          The platform (operating system) for which the container was created.\n\n          This field was introduced for the experimental \"LCOW\" (Linux Containers\n          On Windows) features, which has been removed. In most cases, this field\n          is equal to the host's operating system (`linux` or `windows`).\n        type: \"string\"\n        example: \"linux\"\n      ImageManifestDescriptor:\n        $ref: \"#/definitions/OCIDescriptor\"\n        description: |-\n          OCI descriptor of the platform-specific manifest of the image\n          the container was created from.\n\n          Note: Only available if the daemon provides a multi-platform\n          image store.\n      MountLabel:\n        description: |-\n          SELinux mount label set for the container.\n        type: \"string\"\n        example: \"\"\n      ProcessLabel:\n        description: |-\n          SELinux process label set for the container.\n        type: \"string\"\n        example: \"\"\n      AppArmorProfile:\n        description: |-\n          The AppArmor profile set for the container.\n        type: \"string\"\n        example: \"\"\n      ExecIDs:\n        description: |-\n          IDs of exec instances that are running in the container.\n        type: \"array\"\n        items:\n          type: \"string\"\n        x-nullable: true\n        example:\n          - \"b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca\"\n          - \"3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4\"\n      HostConfig:\n        $ref: \"#/definitions/HostConfig\"\n      GraphDriver:\n        $ref: \"#/definitions/DriverData\"\n      SizeRw:\n        description: |-\n          The size of files that have been created or changed by this container.\n\n          This field is omitted by default, and only set when size is requested\n          in the API request.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: true\n        example: \"122880\"\n      SizeRootFs:\n        description: |-\n          The total size of all files in the read-only layers from the image\n          that the container uses. These layers can be shared between containers.\n\n          This field is omitted by default, and only set when size is requested\n          in the API request.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: true\n        example: \"1653948416\"\n      Mounts:\n        description: |-\n          List of mounts used by the container.\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/MountPoint\"\n      Config:\n        $ref: \"#/definitions/ContainerConfig\"\n      NetworkSettings:\n        $ref: \"#/definitions/NetworkSettings\"\n\n  ContainerSummary:\n    type: \"object\"\n    properties:\n      Id:\n        description: |-\n          The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes).\n        type: \"string\"\n        x-go-name: \"ID\"\n        minLength: 64\n        maxLength: 64\n        pattern: \"^[0-9a-fA-F]{64}$\"\n        example: \"aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf\"\n      Names:\n        description: |-\n          The names associated with this container. Most containers have a single\n          name, but when using legacy \"links\", the container can have multiple\n          names.\n\n          For historic reasons, names are prefixed with a forward-slash (`/`).\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"/funny_chatelet\"\n      Image:\n        description: |-\n          The name or ID of the image used to create the container.\n\n          This field shows the image reference as was specified when creating the container,\n          which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest`\n          or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`),\n          short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`).\n\n          The content of this field can be updated at runtime if the image used to\n          create the container is untagged, in which case the field is updated to\n          contain the the image ID (digest) it was resolved to in its canonical,\n          non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`).\n        type: \"string\"\n        example: \"docker.io/library/ubuntu:latest\"\n      ImageID:\n        description: |-\n          The ID (digest) of the image that this container was created from.\n        type: \"string\"\n        example: \"sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782\"\n      ImageManifestDescriptor:\n        $ref: \"#/definitions/OCIDescriptor\"\n        x-nullable: true\n        description: |\n          OCI descriptor of the platform-specific manifest of the image\n          the container was created from.\n\n          Note: Only available if the daemon provides a multi-platform\n          image store.\n\n          This field is not populated in the `GET /system/df` endpoint.\n      Command:\n        description: \"Command to run when starting the container\"\n        type: \"string\"\n        example: \"/bin/bash\"\n      Created:\n        description: |-\n          Date and time at which the container was created as a Unix timestamp\n          (number of seconds since EPOCH).\n        type: \"integer\"\n        format: \"int64\"\n        example: \"1739811096\"\n      Ports:\n        description: |-\n          Port-mappings for the container.\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/Port\"\n      SizeRw:\n        description: |-\n          The size of files that have been created or changed by this container.\n\n          This field is omitted by default, and only set when size is requested\n          in the API request.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: true\n        example: \"122880\"\n      SizeRootFs:\n        description: |-\n          The total size of all files in the read-only layers from the image\n          that the container uses. These layers can be shared between containers.\n\n          This field is omitted by default, and only set when size is requested\n          in the API request.\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: true\n        example: \"1653948416\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.vendor: \"Acme\"\n          com.example.license: \"GPL\"\n          com.example.version: \"1.0\"\n      State:\n        description: |\n          The state of this container.\n        type: \"string\"\n        enum:\n          - \"created\"\n          - \"running\"\n          - \"paused\"\n          - \"restarting\"\n          - \"exited\"\n          - \"removing\"\n          - \"dead\"\n        example: \"running\"\n      Status:\n        description: |-\n          Additional human-readable status of this container (e.g. `Exit 0`)\n        type: \"string\"\n        example: \"Up 4 days\"\n      HostConfig:\n        type: \"object\"\n        description: |-\n          Summary of host-specific runtime information of the container. This\n          is a reduced set of information in the container's \"HostConfig\" as\n          available in the container \"inspect\" response.\n        properties:\n          NetworkMode:\n            description: |-\n              Networking mode (`host`, `none`, `container:<id>`) or name of the\n              primary network the container is using.\n\n              This field is primarily for backward compatibility. The container\n              can be connected to multiple networks for which information can be\n              found in the `NetworkSettings.Networks` field, which enumerates\n              settings per network.\n            type: \"string\"\n            example: \"mynetwork\"\n          Annotations:\n            description: |-\n              Arbitrary key-value metadata attached to the container.\n            type: \"object\"\n            x-nullable: true\n            additionalProperties:\n              type: \"string\"\n            example:\n              io.kubernetes.docker.type: \"container\"\n              io.kubernetes.sandbox.id: \"3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3\"\n      NetworkSettings:\n        description: |-\n          Summary of the container's network settings\n        type: \"object\"\n        properties:\n          Networks:\n            type: \"object\"\n            description: |-\n              Summary of network-settings for each network the container is\n              attached to.\n            additionalProperties:\n              $ref: \"#/definitions/EndpointSettings\"\n      Mounts:\n        type: \"array\"\n        description: |-\n          List of mounts used by the container.\n        items:\n          $ref: \"#/definitions/MountPoint\"\n\n  Driver:\n    description: \"Driver represents a driver (network, logging, secrets).\"\n    type: \"object\"\n    required: [Name]\n    properties:\n      Name:\n        description: \"Name of the driver.\"\n        type: \"string\"\n        x-nullable: false\n        example: \"some-driver\"\n      Options:\n        description: \"Key/value map of driver-specific options.\"\n        type: \"object\"\n        x-nullable: false\n        additionalProperties:\n          type: \"string\"\n        example:\n          OptionA: \"value for driver-specific option A\"\n          OptionB: \"value for driver-specific option B\"\n\n  SecretSpec:\n    type: \"object\"\n    properties:\n      Name:\n        description: \"User-defined name of the secret.\"\n        type: \"string\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-value\"\n          com.example.some-other-label: \"some-other-value\"\n      Data:\n        description: |\n          Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\n          data to store as secret.\n\n          This field is only used to _create_ a secret, and is not returned by\n          other endpoints.\n        type: \"string\"\n        example: \"\"\n      Driver:\n        description: |\n          Name of the secrets driver used to fetch the secret's value from an\n          external secret store.\n        $ref: \"#/definitions/Driver\"\n      Templating:\n        description: |\n          Templating driver, if applicable\n\n          Templating controls whether and how to evaluate the config payload as\n          a template. If no driver is set, no templating is used.\n        $ref: \"#/definitions/Driver\"\n\n  Secret:\n    type: \"object\"\n    properties:\n      ID:\n        type: \"string\"\n        example: \"blt1owaxmitz71s9v5zh81zun\"\n      Version:\n        $ref: \"#/definitions/ObjectVersion\"\n      CreatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2017-07-20T13:55:28.678958722Z\"\n      UpdatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n        example: \"2017-07-20T13:55:28.678958722Z\"\n      Spec:\n        $ref: \"#/definitions/SecretSpec\"\n\n  ConfigSpec:\n    type: \"object\"\n    properties:\n      Name:\n        description: \"User-defined name of the config.\"\n        type: \"string\"\n      Labels:\n        description: \"User-defined key/value metadata.\"\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n      Data:\n        description: |\n          Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5))\n          config data.\n        type: \"string\"\n      Templating:\n        description: |\n          Templating driver, if applicable\n\n          Templating controls whether and how to evaluate the config payload as\n          a template. If no driver is set, no templating is used.\n        $ref: \"#/definitions/Driver\"\n\n  Config:\n    type: \"object\"\n    properties:\n      ID:\n        type: \"string\"\n      Version:\n        $ref: \"#/definitions/ObjectVersion\"\n      CreatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      UpdatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      Spec:\n        $ref: \"#/definitions/ConfigSpec\"\n\n  ContainerState:\n    description: |\n      ContainerState stores container's running state. It's part of ContainerJSONBase\n      and will be returned by the \"inspect\" command.\n    type: \"object\"\n    x-nullable: true\n    properties:\n      Status:\n        description: |\n          String representation of the container state. Can be one of \"created\",\n          \"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\".\n        type: \"string\"\n        enum: [\"created\", \"running\", \"paused\", \"restarting\", \"removing\", \"exited\", \"dead\"]\n        example: \"running\"\n      Running:\n        description: |\n          Whether this container is running.\n\n          Note that a running container can be _paused_. The `Running` and `Paused`\n          booleans are not mutually exclusive:\n\n          When pausing a container (on Linux), the freezer cgroup is used to suspend\n          all processes in the container. Freezing the process requires the process to\n          be running. As a result, paused containers are both `Running` _and_ `Paused`.\n\n          Use the `Status` field instead to determine if a container's state is \"running\".\n        type: \"boolean\"\n        example: true\n      Paused:\n        description: \"Whether this container is paused.\"\n        type: \"boolean\"\n        example: false\n      Restarting:\n        description: \"Whether this container is restarting.\"\n        type: \"boolean\"\n        example: false\n      OOMKilled:\n        description: |\n          Whether a process within this container has been killed because it ran\n          out of memory since the container was last started.\n        type: \"boolean\"\n        example: false\n      Dead:\n        type: \"boolean\"\n        example: false\n      Pid:\n        description: \"The process ID of this container\"\n        type: \"integer\"\n        example: 1234\n      ExitCode:\n        description: \"The last exit code of this container\"\n        type: \"integer\"\n        example: 0\n      Error:\n        type: \"string\"\n      StartedAt:\n        description: \"The time when this container was last started.\"\n        type: \"string\"\n        example: \"2020-01-06T09:06:59.461876391Z\"\n      FinishedAt:\n        description: \"The time when this container last exited.\"\n        type: \"string\"\n        example: \"2020-01-06T09:07:59.461876391Z\"\n      Health:\n        $ref: \"#/definitions/Health\"\n\n  ContainerCreateResponse:\n    description: \"OK response to ContainerCreate operation\"\n    type: \"object\"\n    title: \"ContainerCreateResponse\"\n    x-go-name: \"CreateResponse\"\n    required: [Id, Warnings]\n    properties:\n      Id:\n        description: \"The ID of the created container\"\n        type: \"string\"\n        x-nullable: false\n        example: \"ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743\"\n      Warnings:\n        description: \"Warnings encountered when creating the container\"\n        type: \"array\"\n        x-nullable: false\n        items:\n          type: \"string\"\n        example: []\n\n  ContainerUpdateResponse:\n    type: \"object\"\n    title: \"ContainerUpdateResponse\"\n    x-go-name: \"UpdateResponse\"\n    description: |-\n      Response for a successful container-update.\n    properties:\n      Warnings:\n        type: \"array\"\n        description: |-\n          Warnings encountered when updating the container.\n        items:\n          type: \"string\"\n        example: [\"Published ports are discarded when using host network mode\"]\n\n  ContainerStatsResponse:\n    description: |\n      Statistics sample for a container.\n    type: \"object\"\n    x-go-name: \"StatsResponse\"\n    title: \"ContainerStatsResponse\"\n    properties:\n      name:\n        description: \"Name of the container\"\n        type: \"string\"\n        x-nullable: true\n        example: \"boring_wozniak\"\n      id:\n        description: \"ID of the container\"\n        type: \"string\"\n        x-nullable: true\n        example: \"ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743\"\n      read:\n        description: |\n          Date and time at which this sample was collected.\n          The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\n          with nano-seconds.\n        type: \"string\"\n        format: \"date-time\"\n        example: \"2025-01-16T13:55:22.165243637Z\"\n      preread:\n        description: |\n          Date and time at which this first sample was collected. This field\n          is not propagated if the \"one-shot\" option is set. If the \"one-shot\"\n          option is set, this field may be omitted, empty, or set to a default\n          date (`0001-01-01T00:00:00Z`).\n\n          The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\n          with nano-seconds.\n        type: \"string\"\n        format: \"date-time\"\n        example: \"2025-01-16T13:55:21.160452595Z\"\n      pids_stats:\n        $ref: \"#/definitions/ContainerPidsStats\"\n      blkio_stats:\n        $ref: \"#/definitions/ContainerBlkioStats\"\n      num_procs:\n        description: |\n          The number of processors on the system.\n\n          This field is Windows-specific and always zero for Linux containers.\n        type: \"integer\"\n        format: \"uint32\"\n        example: 16\n      storage_stats:\n        $ref: \"#/definitions/ContainerStorageStats\"\n      cpu_stats:\n        $ref: \"#/definitions/ContainerCPUStats\"\n      precpu_stats:\n        $ref: \"#/definitions/ContainerCPUStats\"\n      memory_stats:\n        $ref: \"#/definitions/ContainerMemoryStats\"\n      networks:\n        description: |\n          Network statistics for the container per interface.\n\n          This field is omitted if the container has no networking enabled.\n        x-nullable: true\n        additionalProperties:\n          $ref: \"#/definitions/ContainerNetworkStats\"\n        example:\n          eth0:\n            rx_bytes: 5338\n            rx_dropped: 0\n            rx_errors: 0\n            rx_packets: 36\n            tx_bytes: 648\n            tx_dropped: 0\n            tx_errors: 0\n            tx_packets: 8\n          eth5:\n            rx_bytes: 4641\n            rx_dropped: 0\n            rx_errors: 0\n            rx_packets: 26\n            tx_bytes: 690\n            tx_dropped: 0\n            tx_errors: 0\n            tx_packets: 9\n\n  ContainerBlkioStats:\n    description: |\n      BlkioStats stores all IO service stats for data read and write.\n\n      This type is Linux-specific and holds many fields that are specific to cgroups v1.\n      On a cgroup v2 host, all fields other than `io_service_bytes_recursive`\n      are omitted or `null`.\n\n      This type is only populated on Linux and omitted for Windows containers.\n    type: \"object\"\n    x-go-name: \"BlkioStats\"\n    x-nullable: true\n    properties:\n      io_service_bytes_recursive:\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n      io_serviced_recursive:\n        description: |\n          This field is only available when using Linux containers with\n          cgroups v1. It is omitted or `null` when using cgroups v2.\n        x-nullable: true\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n      io_queue_recursive:\n        description: |\n          This field is only available when using Linux containers with\n          cgroups v1. It is omitted or `null` when using cgroups v2.\n        x-nullable: true\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n      io_service_time_recursive:\n        description: |\n          This field is only available when using Linux containers with\n          cgroups v1. It is omitted or `null` when using cgroups v2.\n        x-nullable: true\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n      io_wait_time_recursive:\n        description: |\n          This field is only available when using Linux containers with\n          cgroups v1. It is omitted or `null` when using cgroups v2.\n        x-nullable: true\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n      io_merged_recursive:\n        description: |\n          This field is only available when using Linux containers with\n          cgroups v1. It is omitted or `null` when using cgroups v2.\n        x-nullable: true\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n      io_time_recursive:\n        description: |\n          This field is only available when using Linux containers with\n          cgroups v1. It is omitted or `null` when using cgroups v2.\n        x-nullable: true\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n      sectors_recursive:\n        description: |\n          This field is only available when using Linux containers with\n          cgroups v1. It is omitted or `null` when using cgroups v2.\n        x-nullable: true\n        type: \"array\"\n        items:\n          $ref: \"#/definitions/ContainerBlkioStatEntry\"\n    example:\n      io_service_bytes_recursive: [\n        {\"major\": 254, \"minor\": 0, \"op\": \"read\", \"value\": 7593984},\n        {\"major\": 254, \"minor\": 0, \"op\": \"write\", \"value\": 100}\n      ]\n      io_serviced_recursive: null\n      io_queue_recursive: null\n      io_service_time_recursive: null\n      io_wait_time_recursive: null\n      io_merged_recursive: null\n      io_time_recursive: null\n      sectors_recursive: null\n\n  ContainerBlkioStatEntry:\n    description: |\n      Blkio stats entry.\n\n      This type is Linux-specific and omitted for Windows containers.\n    type: \"object\"\n    x-go-name: \"BlkioStatEntry\"\n    x-nullable: true\n    properties:\n      major:\n        type: \"integer\"\n        format: \"uint64\"\n        example: 254\n      minor:\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n      op:\n        type: \"string\"\n        example: \"read\"\n      value:\n        type: \"integer\"\n        format: \"uint64\"\n        example: 7593984\n\n  ContainerCPUStats:\n    description: |\n      CPU related info of the container\n    type: \"object\"\n    x-go-name: \"CPUStats\"\n    x-nullable: true\n    properties:\n      cpu_usage:\n        $ref: \"#/definitions/ContainerCPUUsage\"\n      system_cpu_usage:\n        description: |\n          System Usage.\n\n          This field is Linux-specific and omitted for Windows containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 5\n      online_cpus:\n        description: |\n          Number of online CPUs.\n\n          This field is Linux-specific and omitted for Windows containers.\n        type: \"integer\"\n        format: \"uint32\"\n        x-nullable: true\n        example: 5\n      throttling_data:\n        $ref: \"#/definitions/ContainerThrottlingData\"\n\n  ContainerCPUUsage:\n    description: |\n      All CPU stats aggregated since container inception.\n    type: \"object\"\n    x-go-name: \"CPUUsage\"\n    x-nullable: true\n    properties:\n      total_usage:\n        description: |\n          Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows).\n        type: \"integer\"\n        format: \"uint64\"\n        example: 29912000\n      percpu_usage:\n        description: |\n          Total CPU time (in nanoseconds) consumed per core (Linux).\n\n          This field is Linux-specific when using cgroups v1. It is omitted\n          when using cgroups v2 and Windows containers.\n        type: \"array\"\n        x-nullable: true\n        items:\n          type: \"integer\"\n          format: \"uint64\"\n          example: 29912000\n\n      usage_in_kernelmode:\n        description: |\n          Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux),\n          or time spent (in 100's of nanoseconds) by all container processes in\n          kernel mode (Windows).\n\n          Not populated for Windows containers using Hyper-V isolation.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 21994000\n      usage_in_usermode:\n        description: |\n          Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux),\n          or time spent (in 100's of nanoseconds) by all container processes in\n          kernel mode (Windows).\n\n          Not populated for Windows containers using Hyper-V isolation.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 7918000\n\n  ContainerPidsStats:\n    description: |\n      PidsStats contains Linux-specific stats of a container's process-IDs (PIDs).\n\n      This type is Linux-specific and omitted for Windows containers.\n    type: \"object\"\n    x-go-name: \"PidsStats\"\n    x-nullable: true\n    properties:\n      current:\n        description: |\n          Current is the number of PIDs in the cgroup.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 5\n      limit:\n        description: |\n          Limit is the hard limit on the number of pids in the cgroup.\n          A \"Limit\" of 0 means that there is no limit.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 18446744073709551615\n\n  ContainerThrottlingData:\n    description: |\n      CPU throttling stats of the container.\n\n      This type is Linux-specific and omitted for Windows containers.\n    type: \"object\"\n    x-go-name: \"ThrottlingData\"\n    x-nullable: true\n    properties:\n      periods:\n        description: |\n          Number of periods with throttling active.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n      throttled_periods:\n        description: |\n          Number of periods when the container hit its throttling limit.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n      throttled_time:\n        description: |\n          Aggregated time (in nanoseconds) the container was throttled for.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n\n  ContainerMemoryStats:\n    description: |\n      Aggregates all memory stats since container inception on Linux.\n      Windows returns stats for commit and private working set only.\n    type: \"object\"\n    x-go-name: \"MemoryStats\"\n    properties:\n      usage:\n        description: |\n          Current `res_counter` usage for memory.\n\n          This field is Linux-specific and omitted for Windows containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 0\n      max_usage:\n        description: |\n          Maximum usage ever recorded.\n\n          This field is Linux-specific and only supported on cgroups v1.\n          It is omitted when using cgroups v2 and for Windows containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 0\n      stats:\n        description: |\n          All the stats exported via memory.stat. when using cgroups v2.\n\n          This field is Linux-specific and omitted for Windows containers.\n        type: \"object\"\n        additionalProperties:\n          type: \"integer\"\n          format: \"uint64\"\n          x-nullable: true\n        example:\n          {\n            \"active_anon\": 1572864,\n            \"active_file\": 5115904,\n            \"anon\": 1572864,\n            \"anon_thp\": 0,\n            \"file\": 7626752,\n            \"file_dirty\": 0,\n            \"file_mapped\": 2723840,\n            \"file_writeback\": 0,\n            \"inactive_anon\": 0,\n            \"inactive_file\": 2510848,\n            \"kernel_stack\": 16384,\n            \"pgactivate\": 0,\n            \"pgdeactivate\": 0,\n            \"pgfault\": 2042,\n            \"pglazyfree\": 0,\n            \"pglazyfreed\": 0,\n            \"pgmajfault\": 45,\n            \"pgrefill\": 0,\n            \"pgscan\": 0,\n            \"pgsteal\": 0,\n            \"shmem\": 0,\n            \"slab\": 1180928,\n            \"slab_reclaimable\": 725576,\n            \"slab_unreclaimable\": 455352,\n            \"sock\": 0,\n            \"thp_collapse_alloc\": 0,\n            \"thp_fault_alloc\": 1,\n            \"unevictable\": 0,\n            \"workingset_activate\": 0,\n            \"workingset_nodereclaim\": 0,\n            \"workingset_refault\": 0\n          }\n      failcnt:\n        description: |\n          Number of times memory usage hits limits.\n\n          This field is Linux-specific and only supported on cgroups v1.\n          It is omitted when using cgroups v2 and for Windows containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 0\n      limit:\n        description: |\n          This field is Linux-specific and omitted for Windows containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 8217579520\n      commitbytes:\n        description: |\n          Committed bytes.\n\n          This field is Windows-specific and omitted for Linux containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 0\n      commitpeakbytes:\n        description: |\n          Peak committed bytes.\n\n          This field is Windows-specific and omitted for Linux containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 0\n      privateworkingset:\n        description: |\n          Private working set.\n\n          This field is Windows-specific and omitted for Linux containers.\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 0\n\n  ContainerNetworkStats:\n    description: |\n      Aggregates the network stats of one container\n    type: \"object\"\n    x-go-name: \"NetworkStats\"\n    x-nullable: true\n    properties:\n      rx_bytes:\n        description: |\n          Bytes received. Windows and Linux.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 5338\n      rx_packets:\n        description: |\n          Packets received. Windows and Linux.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 36\n      rx_errors:\n        description: |\n          Received errors. Not used on Windows.\n\n          This field is Linux-specific and always zero for Windows containers.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n      rx_dropped:\n        description: |\n          Incoming packets dropped. Windows and Linux.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n      tx_bytes:\n        description: |\n          Bytes sent. Windows and Linux.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 1200\n      tx_packets:\n        description: |\n          Packets sent. Windows and Linux.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 12\n      tx_errors:\n        description: |\n          Sent errors. Not used on Windows.\n\n          This field is Linux-specific and always zero for Windows containers.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n      tx_dropped:\n        description: |\n          Outgoing packets dropped. Windows and Linux.\n        type: \"integer\"\n        format: \"uint64\"\n        example: 0\n      endpoint_id:\n        description: |\n          Endpoint ID. Not used on Linux.\n\n          This field is Windows-specific and omitted for Linux containers.\n        type: \"string\"\n        x-nullable: true\n      instance_id:\n        description: |\n          Instance ID. Not used on Linux.\n\n          This field is Windows-specific and omitted for Linux containers.\n        type: \"string\"\n        x-nullable: true\n\n  ContainerStorageStats:\n    description: |\n      StorageStats is the disk I/O stats for read/write on Windows.\n\n      This type is Windows-specific and omitted for Linux containers.\n    type: \"object\"\n    x-go-name: \"StorageStats\"\n    x-nullable: true\n    properties:\n      read_count_normalized:\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 7593984\n      read_size_bytes:\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 7593984\n      write_count_normalized:\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 7593984\n      write_size_bytes:\n        type: \"integer\"\n        format: \"uint64\"\n        x-nullable: true\n        example: 7593984\n\n  ContainerTopResponse:\n    type: \"object\"\n    x-go-name: \"TopResponse\"\n    title: \"ContainerTopResponse\"\n    description: |-\n      Container \"top\" response.\n    properties:\n      Titles:\n        description: \"The ps column titles\"\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          Titles:\n            - \"UID\"\n            - \"PID\"\n            - \"PPID\"\n            - \"C\"\n            - \"STIME\"\n            - \"TTY\"\n            - \"TIME\"\n            - \"CMD\"\n      Processes:\n        description: |-\n          Each process running in the container, where each process\n          is an array of values corresponding to the titles.\n        type: \"array\"\n        items:\n          type: \"array\"\n          items:\n            type: \"string\"\n        example:\n          Processes:\n            -\n              - \"root\"\n              - \"13642\"\n              - \"882\"\n              - \"0\"\n              - \"17:03\"\n              - \"pts/0\"\n              - \"00:00:00\"\n              - \"/bin/bash\"\n            -\n              - \"root\"\n              - \"13735\"\n              - \"13642\"\n              - \"0\"\n              - \"17:06\"\n              - \"pts/0\"\n              - \"00:00:00\"\n              - \"sleep 10\"\n\n  ContainerWaitResponse:\n    description: \"OK response to ContainerWait operation\"\n    type: \"object\"\n    x-go-name: \"WaitResponse\"\n    title: \"ContainerWaitResponse\"\n    required: [StatusCode]\n    properties:\n      StatusCode:\n        description: \"Exit code of the container\"\n        type: \"integer\"\n        format: \"int64\"\n        x-nullable: false\n      Error:\n        $ref: \"#/definitions/ContainerWaitExitError\"\n\n  ContainerWaitExitError:\n    description: \"container waiting error, if any\"\n    type: \"object\"\n    x-go-name: \"WaitExitError\"\n    properties:\n      Message:\n        description: \"Details of an error\"\n        type: \"string\"\n\n  SystemVersion:\n    type: \"object\"\n    description: |\n      Response of Engine API: GET \"/version\"\n    properties:\n      Platform:\n        type: \"object\"\n        required: [Name]\n        properties:\n          Name:\n            type: \"string\"\n      Components:\n        type: \"array\"\n        description: |\n          Information about system components\n        items:\n          type: \"object\"\n          x-go-name: ComponentVersion\n          required: [Name, Version]\n          properties:\n            Name:\n              description: |\n                Name of the component\n              type: \"string\"\n              example: \"Engine\"\n            Version:\n              description: |\n                Version of the component\n              type: \"string\"\n              x-nullable: false\n              example: \"27.0.1\"\n            Details:\n              description: |\n                Key/value pairs of strings with additional information about the\n                component. These values are intended for informational purposes\n                only, and their content is not defined, and not part of the API\n                specification.\n\n                These messages can be printed by the client as information to the user.\n              type: \"object\"\n              x-nullable: true\n      Version:\n        description: \"The version of the daemon\"\n        type: \"string\"\n        example: \"27.0.1\"\n      ApiVersion:\n        description: |\n          The default (and highest) API version that is supported by the daemon\n        type: \"string\"\n        example: \"1.47\"\n      MinAPIVersion:\n        description: |\n          The minimum API version that is supported by the daemon\n        type: \"string\"\n        example: \"1.24\"\n      GitCommit:\n        description: |\n          The Git commit of the source code that was used to build the daemon\n        type: \"string\"\n        example: \"48a66213fe\"\n      GoVersion:\n        description: |\n          The version Go used to compile the daemon, and the version of the Go\n          runtime in use.\n        type: \"string\"\n        example: \"go1.22.7\"\n      Os:\n        description: |\n          The operating system that the daemon is running on (\"linux\" or \"windows\")\n        type: \"string\"\n        example: \"linux\"\n      Arch:\n        description: |\n          The architecture that the daemon is running on\n        type: \"string\"\n        example: \"amd64\"\n      KernelVersion:\n        description: |\n          The kernel version (`uname -r`) that the daemon is running on.\n\n          This field is omitted when empty.\n        type: \"string\"\n        example: \"6.8.0-31-generic\"\n      Experimental:\n        description: |\n          Indicates if the daemon is started with experimental features enabled.\n\n          This field is omitted when empty / false.\n        type: \"boolean\"\n        example: true\n      BuildTime:\n        description: |\n          The date and time that the daemon was compiled.\n        type: \"string\"\n        example: \"2020-06-22T15:49:27.000000000+00:00\"\n\n  SystemInfo:\n    type: \"object\"\n    properties:\n      ID:\n        description: |\n          Unique identifier of the daemon.\n\n          <p><br /></p>\n\n          > **Note**: The format of the ID itself is not part of the API, and\n          > should not be considered stable.\n        type: \"string\"\n        example: \"7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS\"\n      Containers:\n        description: \"Total number of containers on the host.\"\n        type: \"integer\"\n        example: 14\n      ContainersRunning:\n        description: |\n          Number of containers with status `\"running\"`.\n        type: \"integer\"\n        example: 3\n      ContainersPaused:\n        description: |\n          Number of containers with status `\"paused\"`.\n        type: \"integer\"\n        example: 1\n      ContainersStopped:\n        description: |\n          Number of containers with status `\"stopped\"`.\n        type: \"integer\"\n        example: 10\n      Images:\n        description: |\n          Total number of images on the host.\n\n          Both _tagged_ and _untagged_ (dangling) images are counted.\n        type: \"integer\"\n        example: 508\n      Driver:\n        description: \"Name of the storage driver in use.\"\n        type: \"string\"\n        example: \"overlay2\"\n      DriverStatus:\n        description: |\n          Information specific to the storage driver, provided as\n          \"label\" / \"value\" pairs.\n\n          This information is provided by the storage driver, and formatted\n          in a way consistent with the output of `docker info` on the command\n          line.\n\n          <p><br /></p>\n\n          > **Note**: The information returned in this field, including the\n          > formatting of values and labels, should not be considered stable,\n          > and may change without notice.\n        type: \"array\"\n        items:\n          type: \"array\"\n          items:\n            type: \"string\"\n        example:\n          - [\"Backing Filesystem\", \"extfs\"]\n          - [\"Supports d_type\", \"true\"]\n          - [\"Native Overlay Diff\", \"true\"]\n      DockerRootDir:\n        description: |\n          Root directory of persistent Docker state.\n\n          Defaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\n          on Windows.\n        type: \"string\"\n        example: \"/var/lib/docker\"\n      Plugins:\n        $ref: \"#/definitions/PluginsInfo\"\n      MemoryLimit:\n        description: \"Indicates if the host has memory limit support enabled.\"\n        type: \"boolean\"\n        example: true\n      SwapLimit:\n        description: \"Indicates if the host has memory swap limit support enabled.\"\n        type: \"boolean\"\n        example: true\n      KernelMemoryTCP:\n        description: |\n          Indicates if the host has kernel memory TCP limit support enabled. This\n          field is omitted if not supported.\n\n          Kernel memory TCP limits are not supported when using cgroups v2, which\n          does not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup.\n        type: \"boolean\"\n        example: true\n      CpuCfsPeriod:\n        description: |\n          Indicates if CPU CFS(Completely Fair Scheduler) period is supported by\n          the host.\n        type: \"boolean\"\n        example: true\n      CpuCfsQuota:\n        description: |\n          Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by\n          the host.\n        type: \"boolean\"\n        example: true\n      CPUShares:\n        description: |\n          Indicates if CPU Shares limiting is supported by the host.\n        type: \"boolean\"\n        example: true\n      CPUSet:\n        description: |\n          Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\n          See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n        type: \"boolean\"\n        example: true\n      PidsLimit:\n        description: \"Indicates if the host kernel has PID limit support enabled.\"\n        type: \"boolean\"\n        example: true\n      OomKillDisable:\n        description: \"Indicates if OOM killer disable is supported on the host.\"\n        type: \"boolean\"\n      IPv4Forwarding:\n        description: \"Indicates IPv4 forwarding is enabled.\"\n        type: \"boolean\"\n        example: true\n      BridgeNfIptables:\n        description: |\n          Indicates if `bridge-nf-call-iptables` is available on the host when\n          the daemon was started.\n\n          <p><br /></p>\n\n          > **Deprecated**: netfilter module is now loaded on-demand and no longer\n          > during daemon startup, making this field obsolete. This field is always\n          > `false` and will be removed in a API v1.49.\n        type: \"boolean\"\n        example: false\n      BridgeNfIp6tables:\n        description: |\n          Indicates if `bridge-nf-call-ip6tables` is available on the host.\n\n          <p><br /></p>\n\n          > **Deprecated**: netfilter module is now loaded on-demand, and no longer\n          > during daemon startup, making this field obsolete. This field is always\n          > `false` and will be removed in a API v1.49.\n        type: \"boolean\"\n        example: false\n      Debug:\n        description: |\n          Indicates if the daemon is running in debug-mode / with debug-level\n          logging enabled.\n        type: \"boolean\"\n        example: true\n      NFd:\n        description: |\n          The total number of file Descriptors in use by the daemon process.\n\n          This information is only returned if debug-mode is enabled.\n        type: \"integer\"\n        example: 64\n      NGoroutines:\n        description: |\n          The  number of goroutines that currently exist.\n\n          This information is only returned if debug-mode is enabled.\n        type: \"integer\"\n        example: 174\n      SystemTime:\n        description: |\n          Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\n          format with nano-seconds.\n        type: \"string\"\n        example: \"2017-08-08T20:28:29.06202363Z\"\n      LoggingDriver:\n        description: |\n          The logging driver to use as a default for new containers.\n        type: \"string\"\n      CgroupDriver:\n        description: |\n          The driver to use for managing cgroups.\n        type: \"string\"\n        enum: [\"cgroupfs\", \"systemd\", \"none\"]\n        default: \"cgroupfs\"\n        example: \"cgroupfs\"\n      CgroupVersion:\n        description: |\n          The version of the cgroup.\n        type: \"string\"\n        enum: [\"1\", \"2\"]\n        default: \"1\"\n        example: \"1\"\n      NEventsListener:\n        description: \"Number of event listeners subscribed.\"\n        type: \"integer\"\n        example: 30\n      KernelVersion:\n        description: |\n          Kernel version of the host.\n\n          On Linux, this information obtained from `uname`. On Windows this\n          information is queried from the <kbd>HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\</kbd>\n          registry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n        type: \"string\"\n        example: \"6.8.0-31-generic\"\n      OperatingSystem:\n        description: |\n          Name of the host's operating system, for example: \"Ubuntu 24.04 LTS\"\n          or \"Windows Server 2016 Datacenter\"\n        type: \"string\"\n        example: \"Ubuntu 24.04 LTS\"\n      OSVersion:\n        description: |\n          Version of the host's operating system\n\n          <p><br /></p>\n\n          > **Note**: The information returned in this field, including its\n          > very existence, and the formatting of values, should not be considered\n          > stable, and may change without notice.\n        type: \"string\"\n        example: \"24.04\"\n      OSType:\n        description: |\n          Generic type of the operating system of the host, as returned by the\n          Go runtime (`GOOS`).\n\n          Currently returned values are \"linux\" and \"windows\". A full list of\n          possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n        type: \"string\"\n        example: \"linux\"\n      Architecture:\n        description: |\n          Hardware architecture of the host, as returned by the Go runtime\n          (`GOARCH`).\n\n          A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment).\n        type: \"string\"\n        example: \"x86_64\"\n      NCPU:\n        description: |\n          The number of logical CPUs usable by the daemon.\n\n          The number of available CPUs is checked by querying the operating\n          system when the daemon starts. Changes to operating system CPU\n          allocation after the daemon is started are not reflected.\n        type: \"integer\"\n        example: 4\n      MemTotal:\n        description: |\n          Total amount of physical memory available on the host, in bytes.\n        type: \"integer\"\n        format: \"int64\"\n        example: 2095882240\n\n      IndexServerAddress:\n        description: |\n          Address / URL of the index server that is used for image search,\n          and as a default for user authentication for Docker Hub and Docker Cloud.\n        default: \"https://index.docker.io/v1/\"\n        type: \"string\"\n        example: \"https://index.docker.io/v1/\"\n      RegistryConfig:\n        $ref: \"#/definitions/RegistryServiceConfig\"\n      GenericResources:\n        $ref: \"#/definitions/GenericResources\"\n      HttpProxy:\n        description: |\n          HTTP-proxy configured for the daemon. This value is obtained from the\n          [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\n          Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\n          are masked in the API response.\n\n          Containers do not automatically inherit this configuration.\n        type: \"string\"\n        example: \"http://xxxxx:xxxxx@proxy.corp.example.com:8080\"\n      HttpsProxy:\n        description: |\n          HTTPS-proxy configured for the daemon. This value is obtained from the\n          [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\n          Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL\n          are masked in the API response.\n\n          Containers do not automatically inherit this configuration.\n        type: \"string\"\n        example: \"https://xxxxx:xxxxx@proxy.corp.example.com:4443\"\n      NoProxy:\n        description: |\n          Comma-separated list of domain extensions for which no proxy should be\n          used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\n          environment variable.\n\n          Containers do not automatically inherit this configuration.\n        type: \"string\"\n        example: \"*.local, 169.254/16\"\n      Name:\n        description: \"Hostname of the host.\"\n        type: \"string\"\n        example: \"node5.corp.example.com\"\n      Labels:\n        description: |\n          User-defined labels (key/value metadata) as set on the daemon.\n\n          <p><br /></p>\n\n          > **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n          > set through the daemon configuration, and _node_ labels, set from a\n          > manager node in the Swarm. Node labels are not included in this\n          > field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n          > on a manager node in the Swarm.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"storage=ssd\", \"production\"]\n      ExperimentalBuild:\n        description: |\n          Indicates if experimental features are enabled on the daemon.\n        type: \"boolean\"\n        example: true\n      ServerVersion:\n        description: |\n          Version string of the daemon.\n        type: \"string\"\n        example: \"27.0.1\"\n      Runtimes:\n        description: |\n          List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\n          runtimes configured on the daemon. Keys hold the \"name\" used to\n          reference the runtime.\n\n          The Docker daemon relies on an OCI compliant runtime (invoked via the\n          `containerd` daemon) as its interface to the Linux kernel namespaces,\n          cgroups, and SELinux.\n\n          The default runtime is `runc`, and automatically configured. Additional\n          runtimes can be configured by the user and will be listed here.\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/Runtime\"\n        default:\n          runc:\n            path: \"runc\"\n        example:\n          runc:\n            path: \"runc\"\n          runc-master:\n            path: \"/go/bin/runc\"\n          custom:\n            path: \"/usr/local/bin/my-oci-runtime\"\n            runtimeArgs: [\"--debug\", \"--systemd-cgroup=false\"]\n      DefaultRuntime:\n        description: |\n          Name of the default OCI runtime that is used when starting containers.\n\n          The default can be overridden per-container at create time.\n        type: \"string\"\n        default: \"runc\"\n        example: \"runc\"\n      Swarm:\n        $ref: \"#/definitions/SwarmInfo\"\n      LiveRestoreEnabled:\n        description: |\n          Indicates if live restore is enabled.\n\n          If enabled, containers are kept running when the daemon is shutdown\n          or upon daemon start if running containers are detected.\n        type: \"boolean\"\n        default: false\n        example: false\n      Isolation:\n        description: |\n          Represents the isolation technology to use as a default for containers.\n          The supported values are platform-specific.\n\n          If no isolation value is specified on daemon start, on Windows client,\n          the default is `hyperv`, and on Windows server, the default is `process`.\n\n          This option is currently not used on other platforms.\n        default: \"default\"\n        type: \"string\"\n        enum:\n          - \"default\"\n          - \"hyperv\"\n          - \"process\"\n          - \"\"\n      InitBinary:\n        description: |\n          Name and, optional, path of the `docker-init` binary.\n\n          If the path is omitted, the daemon searches the host's `$PATH` for the\n          binary and uses the first result.\n        type: \"string\"\n        example: \"docker-init\"\n      ContainerdCommit:\n        $ref: \"#/definitions/Commit\"\n      RuncCommit:\n        $ref: \"#/definitions/Commit\"\n      InitCommit:\n        $ref: \"#/definitions/Commit\"\n      SecurityOptions:\n        description: |\n          List of security features that are enabled on the daemon, such as\n          apparmor, seccomp, SELinux, user-namespaces (userns), rootless and\n          no-new-privileges.\n\n          Additional configuration options for each security feature may\n          be present, and are included as a comma-separated list of key/value\n          pairs.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"name=apparmor\"\n          - \"name=seccomp,profile=default\"\n          - \"name=selinux\"\n          - \"name=userns\"\n          - \"name=rootless\"\n      ProductLicense:\n        description: |\n          Reports a summary of the product license on the daemon.\n\n          If a commercial license has been applied to the daemon, information\n          such as number of nodes, and expiration are included.\n        type: \"string\"\n        example: \"Community Engine\"\n      DefaultAddressPools:\n        description: |\n          List of custom default address pools for local networks, which can be\n          specified in the daemon.json file or dockerd option.\n\n          Example: a Base \"10.10.0.0/16\" with Size 24 will define the set of 256\n          10.10.[0-255].0/24 address pools.\n        type: \"array\"\n        items:\n          type: \"object\"\n          properties:\n            Base:\n              description: \"The network address in CIDR format\"\n              type: \"string\"\n              example: \"10.10.0.0/16\"\n            Size:\n              description: \"The network pool size\"\n              type: \"integer\"\n              example: \"24\"\n      Warnings:\n        description: |\n          List of warnings / informational messages about missing features, or\n          issues related to the daemon configuration.\n\n          These messages can be printed by the client as information to the user.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"WARNING: No memory limit support\"\n      CDISpecDirs:\n        description: |\n          List of directories where (Container Device Interface) CDI\n          specifications are located.\n\n          These specifications define vendor-specific modifications to an OCI\n          runtime specification for a container being created.\n\n          An empty list indicates that CDI device injection is disabled.\n\n          Note that since using CDI device injection requires the daemon to have\n          experimental enabled. For non-experimental daemons an empty list will\n          always be returned.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"/etc/cdi\"\n          - \"/var/run/cdi\"\n      Containerd:\n        $ref: \"#/definitions/ContainerdInfo\"\n\n  ContainerdInfo:\n    description: |\n      Information for connecting to the containerd instance that is used by the daemon.\n      This is included for debugging purposes only.\n    type: \"object\"\n    x-nullable: true\n    properties:\n      Address:\n        description: \"The address of the containerd socket.\"\n        type: \"string\"\n        example: \"/run/containerd/containerd.sock\"\n      Namespaces:\n        description: |\n          The namespaces that the daemon uses for running containers and\n          plugins in containerd. These namespaces can be configured in the\n          daemon configuration, and are considered to be used exclusively\n          by the daemon, Tampering with the containerd instance may cause\n          unexpected behavior.\n\n          As these namespaces are considered to be exclusively accessed\n          by the daemon, it is not recommended to change these values,\n          or to change them to a value that is used by other systems,\n          such as cri-containerd.\n        type: \"object\"\n        properties:\n          Containers:\n            description: |\n              The default containerd namespace used for containers managed\n              by the daemon.\n\n              The default namespace for containers is \"moby\", but will be\n              suffixed with the `<uid>.<gid>` of the remapped `root` if\n              user-namespaces are enabled and the containerd image-store\n              is used.\n            type: \"string\"\n            default: \"moby\"\n            example: \"moby\"\n          Plugins:\n            description: |\n              The default containerd namespace used for plugins managed by\n              the daemon.\n\n              The default namespace for plugins is \"plugins.moby\", but will be\n              suffixed with the `<uid>.<gid>` of the remapped `root` if\n              user-namespaces are enabled and the containerd image-store\n              is used.\n            type: \"string\"\n            default: \"plugins.moby\"\n            example: \"plugins.moby\"\n\n  # PluginsInfo is a temp struct holding Plugins name\n  # registered with docker daemon. It is used by Info struct\n  PluginsInfo:\n    description: |\n      Available plugins per type.\n\n      <p><br /></p>\n\n      > **Note**: Only unmanaged (V1) plugins are included in this list.\n      > V1 plugins are \"lazily\" loaded, and are not returned in this list\n      > if there is no resource using the plugin.\n    type: \"object\"\n    properties:\n      Volume:\n        description: \"Names of available volume-drivers, and network-driver plugins.\"\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"local\"]\n      Network:\n        description: \"Names of available network-drivers, and network-driver plugins.\"\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"bridge\", \"host\", \"ipvlan\", \"macvlan\", \"null\", \"overlay\"]\n      Authorization:\n        description: \"Names of available authorization plugins.\"\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"img-authz-plugin\", \"hbm\"]\n      Log:\n        description: \"Names of available logging-drivers, and logging-driver plugins.\"\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"awslogs\", \"fluentd\", \"gcplogs\", \"gelf\", \"journald\", \"json-file\", \"splunk\", \"syslog\"]\n\n\n  RegistryServiceConfig:\n    description: |\n      RegistryServiceConfig stores daemon registry services configuration.\n    type: \"object\"\n    x-nullable: true\n    properties:\n      AllowNondistributableArtifactsCIDRs:\n        description: |\n          List of IP ranges to which nondistributable artifacts can be pushed,\n          using the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\n          <p><br /></p>\n\n          > **Deprecated**: Pushing nondistributable artifacts is now always enabled\n          > and this field is always `null`. This field will be removed in a API v1.49.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: []\n      AllowNondistributableArtifactsHostnames:\n        description: |\n          List of registry hostnames to which nondistributable artifacts can be\n          pushed, using the format `<hostname>[:<port>]` or `<IP address>[:<port>]`.\n\n          <p><br /></p>\n\n          > **Deprecated**: Pushing nondistributable artifacts is now always enabled\n          > and this field is always `null`. This field will be removed in a API v1.49.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: []\n      InsecureRegistryCIDRs:\n        description: |\n          List of IP ranges of insecure registries, using the CIDR syntax\n          ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\n          accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\n          from unknown CAs) communication.\n\n          By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as\n          insecure. All other registries are secure. Communicating with an\n          insecure registry is not possible if the daemon assumes that registry\n          is secure.\n\n          This configuration override this behavior, insecure communication with\n          registries whose resolved IP address is within the subnet described by\n          the CIDR syntax.\n\n          Registries can also be marked insecure by hostname. Those registries\n          are listed under `IndexConfigs` and have their `Secure` field set to\n          `false`.\n\n          > **Warning**: Using this option can be useful when running a local\n          > registry, but introduces security vulnerabilities. This option\n          > should therefore ONLY be used for testing purposes. For increased\n          > security, users should add their CA to their system's list of trusted\n          > CAs instead of enabling this option.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example: [\"::1/128\", \"127.0.0.0/8\"]\n      IndexConfigs:\n        type: \"object\"\n        additionalProperties:\n          $ref: \"#/definitions/IndexInfo\"\n        example:\n          \"127.0.0.1:5000\":\n            \"Name\": \"127.0.0.1:5000\"\n            \"Mirrors\": []\n            \"Secure\": false\n            \"Official\": false\n          \"[2001:db8:a0b:12f0::1]:80\":\n            \"Name\": \"[2001:db8:a0b:12f0::1]:80\"\n            \"Mirrors\": []\n            \"Secure\": false\n            \"Official\": false\n          \"docker.io\":\n            Name: \"docker.io\"\n            Mirrors: [\"https://hub-mirror.corp.example.com:5000/\"]\n            Secure: true\n            Official: true\n          \"registry.internal.corp.example.com:3000\":\n            Name: \"registry.internal.corp.example.com:3000\"\n            Mirrors: []\n            Secure: false\n            Official: false\n      Mirrors:\n        description: |\n          List of registry URLs that act as a mirror for the official\n          (`docker.io`) registry.\n\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"https://hub-mirror.corp.example.com:5000/\"\n          - \"https://[2001:db8:a0b:12f0::1]/\"\n\n  IndexInfo:\n    description:\n      IndexInfo contains information about a registry.\n    type: \"object\"\n    x-nullable: true\n    properties:\n      Name:\n        description: |\n          Name of the registry, such as \"docker.io\".\n        type: \"string\"\n        example: \"docker.io\"\n      Mirrors:\n        description: |\n          List of mirrors, expressed as URIs.\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"https://hub-mirror.corp.example.com:5000/\"\n          - \"https://registry-2.docker.io/\"\n          - \"https://registry-3.docker.io/\"\n      Secure:\n        description: |\n          Indicates if the registry is part of the list of insecure\n          registries.\n\n          If `false`, the registry is insecure. Insecure registries accept\n          un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\n          unknown CAs) communication.\n\n          > **Warning**: Insecure registries can be useful when running a local\n          > registry. However, because its use creates security vulnerabilities\n          > it should ONLY be enabled for testing purposes. For increased\n          > security, users should add their CA to their system's list of\n          > trusted CAs instead of enabling this option.\n        type: \"boolean\"\n        example: true\n      Official:\n        description: |\n          Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n        type: \"boolean\"\n        example: true\n\n  Runtime:\n    description: |\n      Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\n      runtime.\n\n      The runtime is invoked by the daemon via the `containerd` daemon. OCI\n      runtimes act as an interface to the Linux kernel namespaces, cgroups,\n      and SELinux.\n    type: \"object\"\n    properties:\n      path:\n        description: |\n          Name and, optional, path, of the OCI executable binary.\n\n          If the path is omitted, the daemon searches the host's `$PATH` for the\n          binary and uses the first result.\n        type: \"string\"\n        example: \"/usr/local/bin/my-oci-runtime\"\n      runtimeArgs:\n        description: |\n          List of command-line arguments to pass to the runtime when invoked.\n        type: \"array\"\n        x-nullable: true\n        items:\n          type: \"string\"\n        example: [\"--debug\", \"--systemd-cgroup=false\"]\n      status:\n        description: |\n          Information specific to the runtime.\n\n          While this API specification does not define data provided by runtimes,\n          the following well-known properties may be provided by runtimes:\n\n          `org.opencontainers.runtime-spec.features`: features structure as defined\n          in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md),\n          in a JSON string representation.\n\n          <p><br /></p>\n\n          > **Note**: The information returned in this field, including the\n          > formatting of values and labels, should not be considered stable,\n          > and may change without notice.\n        type: \"object\"\n        x-nullable: true\n        additionalProperties:\n          type: \"string\"\n        example:\n          \"org.opencontainers.runtime-spec.features\": \"{\\\"ociVersionMin\\\":\\\"1.0.0\\\",\\\"ociVersionMax\\\":\\\"1.1.0\\\",\\\"...\\\":\\\"...\\\"}\"\n\n  Commit:\n    description: |\n      Commit holds the Git-commit (SHA1) that a binary was built from, as\n      reported in the version-string of external tools, such as `containerd`,\n      or `runC`.\n    type: \"object\"\n    properties:\n      ID:\n        description: \"Actual commit ID of external tool.\"\n        type: \"string\"\n        example: \"cfb82a876ecc11b5ca0977d1733adbe58599088a\"\n      Expected:\n        description: |\n          Commit ID of external tool expected by dockerd as set at build time.\n\n          **Deprecated**: This field is deprecated and will be omitted in a API v1.49.\n        type: \"string\"\n        example: \"2d41c047c83e09a6d61d464906feb2a2f3c52aa4\"\n\n  SwarmInfo:\n    description: |\n      Represents generic information about swarm.\n    type: \"object\"\n    properties:\n      NodeID:\n        description: \"Unique identifier of for this node in the swarm.\"\n        type: \"string\"\n        default: \"\"\n        example: \"k67qz4598weg5unwwffg6z1m1\"\n      NodeAddr:\n        description: |\n          IP address at which this node can be reached by other nodes in the\n          swarm.\n        type: \"string\"\n        default: \"\"\n        example: \"10.0.0.46\"\n      LocalNodeState:\n        $ref: \"#/definitions/LocalNodeState\"\n      ControlAvailable:\n        type: \"boolean\"\n        default: false\n        example: true\n      Error:\n        type: \"string\"\n        default: \"\"\n      RemoteManagers:\n        description: |\n          List of ID's and addresses of other managers in the swarm.\n        type: \"array\"\n        default: null\n        x-nullable: true\n        items:\n          $ref: \"#/definitions/PeerNode\"\n        example:\n          - NodeID: \"71izy0goik036k48jg985xnds\"\n            Addr: \"10.0.0.158:2377\"\n          - NodeID: \"79y6h1o4gv8n120drcprv5nmc\"\n            Addr: \"10.0.0.159:2377\"\n          - NodeID: \"k67qz4598weg5unwwffg6z1m1\"\n            Addr: \"10.0.0.46:2377\"\n      Nodes:\n        description: \"Total number of nodes in the swarm.\"\n        type: \"integer\"\n        x-nullable: true\n        example: 4\n      Managers:\n        description: \"Total number of managers in the swarm.\"\n        type: \"integer\"\n        x-nullable: true\n        example: 3\n      Cluster:\n        $ref: \"#/definitions/ClusterInfo\"\n\n  LocalNodeState:\n    description: \"Current local status of this node.\"\n    type: \"string\"\n    default: \"\"\n    enum:\n      - \"\"\n      - \"inactive\"\n      - \"pending\"\n      - \"active\"\n      - \"error\"\n      - \"locked\"\n    example: \"active\"\n\n  PeerNode:\n    description: \"Represents a peer-node in the swarm\"\n    type: \"object\"\n    properties:\n      NodeID:\n        description: \"Unique identifier of for this node in the swarm.\"\n        type: \"string\"\n      Addr:\n        description: |\n          IP address and ports at which this node can be reached.\n        type: \"string\"\n\n  NetworkAttachmentConfig:\n    description: |\n      Specifies how a service should be attached to a particular network.\n    type: \"object\"\n    properties:\n      Target:\n        description: |\n          The target network for attachment. Must be a network name or ID.\n        type: \"string\"\n      Aliases:\n        description: |\n          Discoverable alternate names for the service on this network.\n        type: \"array\"\n        items:\n          type: \"string\"\n      DriverOpts:\n        description: |\n          Driver attachment options for the network target.\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n\n  EventActor:\n    description: |\n      Actor describes something that generates events, like a container, network,\n      or a volume.\n    type: \"object\"\n    properties:\n      ID:\n        description: \"The ID of the object emitting the event\"\n        type: \"string\"\n        example: \"ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743\"\n      Attributes:\n        description: |\n          Various key/value attributes of the object, depending on its type.\n        type: \"object\"\n        additionalProperties:\n          type: \"string\"\n        example:\n          com.example.some-label: \"some-label-value\"\n          image: \"alpine:latest\"\n          name: \"my-container\"\n\n  EventMessage:\n    description: |\n      EventMessage represents the information an event contains.\n    type: \"object\"\n    title: \"SystemEventsResponse\"\n    properties:\n      Type:\n        description: \"The type of object emitting the event\"\n        type: \"string\"\n        enum: [\"builder\", \"config\", \"container\", \"daemon\", \"image\", \"network\", \"node\", \"plugin\", \"secret\", \"service\", \"volume\"]\n        example: \"container\"\n      Action:\n        description: \"The type of event\"\n        type: \"string\"\n        example: \"create\"\n      Actor:\n        $ref: \"#/definitions/EventActor\"\n      scope:\n        description: |\n          Scope of the event. Engine events are `local` scope. Cluster (Swarm)\n          events are `swarm` scope.\n        type: \"string\"\n        enum: [\"local\", \"swarm\"]\n      time:\n        description: \"Timestamp of event\"\n        type: \"integer\"\n        format: \"int64\"\n        example: 1629574695\n      timeNano:\n        description: \"Timestamp of event, with nanosecond accuracy\"\n        type: \"integer\"\n        format: \"int64\"\n        example: 1629574695515050031\n\n  OCIDescriptor:\n    type: \"object\"\n    x-go-name: Descriptor\n    description: |\n      A descriptor struct containing digest, media type, and size, as defined in\n      the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md).\n    properties:\n      mediaType:\n        description: |\n          The media type of the object this schema refers to.\n        type: \"string\"\n        example: \"application/vnd.oci.image.manifest.v1+json\"\n      digest:\n        description: |\n          The digest of the targeted content.\n        type: \"string\"\n        example: \"sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96\"\n      size:\n        description: |\n          The size in bytes of the blob.\n        type: \"integer\"\n        format: \"int64\"\n        example: 424\n      urls:\n        description: |-\n          List of URLs from which this object MAY be downloaded.\n        type: \"array\"\n        items:\n          type: \"string\"\n          format: \"uri\"\n        x-nullable: true\n      annotations:\n        description: |-\n          Arbitrary metadata relating to the targeted content.\n        type: \"object\"\n        x-nullable: true\n        additionalProperties:\n          type: \"string\"\n        example:\n          \"com.docker.official-images.bashbrew.arch\": \"amd64\"\n          \"org.opencontainers.image.base.digest\": \"sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8\"\n          \"org.opencontainers.image.base.name\": \"scratch\"\n          \"org.opencontainers.image.created\": \"2025-01-27T00:00:00Z\"\n          \"org.opencontainers.image.revision\": \"9fabb4bad5138435b01857e2fe9363e2dc5f6a79\"\n          \"org.opencontainers.image.source\": \"https://git.launchpad.net/cloud-images/+oci/ubuntu-base\"\n          \"org.opencontainers.image.url\": \"https://hub.docker.com/_/ubuntu\"\n          \"org.opencontainers.image.version\": \"24.04\"\n      data:\n        type: string\n        x-nullable: true\n        description: |-\n          Data is an embedding of the targeted content. This is encoded as a base64\n          string when marshalled to JSON (automatically, by encoding/json). If\n          present, Data can be used directly to avoid fetching the targeted content.\n        example: null\n      platform:\n        $ref: \"#/definitions/OCIPlatform\"\n      artifactType:\n        description: |-\n          ArtifactType is the IANA media type of this artifact.\n        type: \"string\"\n        x-nullable: true\n        example: null\n\n  OCIPlatform:\n    type: \"object\"\n    x-go-name: Platform\n    x-nullable: true\n    description: |\n      Describes the platform which the image in the manifest runs on, as defined\n      in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md).\n    properties:\n      architecture:\n        description: |\n          The CPU architecture, for example `amd64` or `ppc64`.\n        type: \"string\"\n        example: \"arm\"\n      os:\n        description: |\n          The operating system, for example `linux` or `windows`.\n        type: \"string\"\n        example: \"windows\"\n      os.version:\n        description: |\n          Optional field specifying the operating system version, for example on\n          Windows `10.0.19041.1165`.\n        type: \"string\"\n        example: \"10.0.19041.1165\"\n      os.features:\n        description: |\n          Optional field specifying an array of strings, each listing a required\n          OS feature (for example on Windows `win32k`).\n        type: \"array\"\n        items:\n          type: \"string\"\n        example:\n          - \"win32k\"\n      variant:\n        description: |\n          Optional field specifying a variant of the CPU, for example `v7` to\n          specify ARMv7 when architecture is `arm`.\n        type: \"string\"\n        example: \"v7\"\n\n  DistributionInspect:\n    type: \"object\"\n    x-go-name: DistributionInspect\n    title: \"DistributionInspectResponse\"\n    required: [Descriptor, Platforms]\n    description: |\n      Describes the result obtained from contacting the registry to retrieve\n      image metadata.\n    properties:\n      Descriptor:\n        $ref: \"#/definitions/OCIDescriptor\"\n      Platforms:\n        type: \"array\"\n        description: |\n          An array containing all platforms supported by the image.\n        items:\n          $ref: \"#/definitions/OCIPlatform\"\n\n  ClusterVolume:\n    type: \"object\"\n    description: |\n      Options and information specific to, and only present on, Swarm CSI\n      cluster volumes.\n    properties:\n      ID:\n        type: \"string\"\n        description: |\n          The Swarm ID of this volume. Because cluster volumes are Swarm\n          objects, they have an ID, unlike non-cluster volumes. This ID can\n          be used to refer to the Volume instead of the name.\n      Version:\n        $ref: \"#/definitions/ObjectVersion\"\n      CreatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      UpdatedAt:\n        type: \"string\"\n        format: \"dateTime\"\n      Spec:\n        $ref: \"#/definitions/ClusterVolumeSpec\"\n      Info:\n        type: \"object\"\n        description: |\n          Information about the global status of the volume.\n        properties:\n          CapacityBytes:\n            type: \"integer\"\n            format: \"int64\"\n            description: |\n              The capacity of the volume in bytes. A value of 0 indicates that\n              the capacity is unknown.\n          VolumeContext:\n            type: \"object\"\n            description: |\n              A map of strings to strings returned from the storage plugin when\n              the volume is created.\n            additionalProperties:\n              type: \"string\"\n          VolumeID:\n            type: \"string\"\n            description: |\n              The ID of the volume as returned by the CSI storage plugin. This\n              is distinct from the volume's ID as provided by Docker. This ID\n              is never used by the user when communicating with Docker to refer\n              to this volume. If the ID is blank, then the Volume has not been\n              successfully created in the plugin yet.\n          AccessibleTopology:\n            type: \"array\"\n            description: |\n              The topology this volume is actually accessible from.\n            items:\n              $ref: \"#/definitions/Topology\"\n      PublishStatus:\n        type: \"array\"\n        description: |\n          The status of the volume as it pertains to its publishing and use on\n          specific nodes\n        items:\n          type: \"object\"\n          properties:\n            NodeID:\n              type: \"string\"\n              description: |\n                The ID of the Swarm node the volume is published on.\n            State:\n              type: \"string\"\n              description: |\n                The published state of the volume.\n                * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed.\n                * `published` The volume is published successfully to the node.\n                * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so.\n                * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller.\n              enum:\n                - \"pending-publish\"\n                - \"published\"\n                - \"pending-node-unpublish\"\n                - \"pending-controller-unpublish\"\n            PublishContext:\n              type: \"object\"\n              description: |\n                A map of strings to strings returned by the CSI controller\n                plugin when a volume is published.\n              additionalProperties:\n                type: \"string\"\n\n  ClusterVolumeSpec:\n    type: \"object\"\n    description: |\n      Cluster-specific options used to create the volume.\n    properties:\n      Group:\n        type: \"string\"\n        description: |\n          Group defines the volume group of this volume. Volumes belonging to\n          the same group can be referred to by group name when creating\n          Services.  Referring to a volume by group instructs Swarm to treat\n          volumes in that group interchangeably for the purpose of scheduling.\n          Volumes with an empty string for a group technically all belong to\n          the same, emptystring group.\n      AccessMode:\n        type: \"object\"\n        description: |\n          Defines how the volume is used by tasks.\n        properties:\n          Scope:\n            type: \"string\"\n            description: |\n              The set of nodes this volume can be used on at one time.\n              - `single` The volume may only be scheduled to one node at a time.\n              - `multi` the volume may be scheduled to any supported number of nodes at a time.\n            default: \"single\"\n            enum: [\"single\", \"multi\"]\n            x-nullable: false\n          Sharing:\n            type: \"string\"\n            description: |\n              The number and way that different tasks can use this volume\n              at one time.\n              - `none` The volume may only be used by one task at a time.\n              - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly\n              - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write.\n              - `all` The volume may have any number of readers and writers.\n            default: \"none\"\n            enum: [\"none\", \"readonly\", \"onewriter\", \"all\"]\n            x-nullable: false\n          MountVolume:\n            type: \"object\"\n            description: |\n              Options for using this volume as a Mount-type volume.\n\n                  Either MountVolume or BlockVolume, but not both, must be\n                  present.\n                properties:\n                  FsType:\n                    type: \"string\"\n                    description: |\n                      Specifies the filesystem type for the mount volume.\n                      Optional.\n                  MountFlags:\n                    type: \"array\"\n                    description: |\n                      Flags to pass when mounting the volume. Optional.\n                    items:\n                      type: \"string\"\n              BlockVolume:\n                type: \"object\"\n                description: |\n                  Options for using this volume as a Block-type volume.\n                  Intentionally empty.\n          Secrets:\n            type: \"array\"\n            description: |\n              Swarm Secrets that are passed to the CSI storage plugin when\n              operating on this volume.\n            items:\n              type: \"object\"\n              description: |\n                One cluster volume secret entry. Defines a key-value pair that\n                is passed to the plugin.\n              properties:\n                Key:\n                  type: \"string\"\n                  description: |\n                    Key is the name of the key of the key-value pair passed to\n                    the plugin.\n                Secret:\n                  type: \"string\"\n                  description: |\n                    Secret is the swarm Secret object from which to read data.\n                    This can be a Secret name or ID. The Secret data is\n                    retrieved by swarm and used as the value of the key-value\n                    pair passed to the plugin.\n          AccessibilityRequirements:\n            type: \"object\"\n            description: |\n              Requirements for the accessible topology of the volume. These\n              fields are optional. For an in-depth description of what these\n              fields mean, see the CSI specification.\n            properties:\n              Requisite:\n                type: \"array\"\n                description: |\n                  A list of required topologies, at least one of which the\n                  volume must be accessible from.\n                items:\n                  $ref: \"#/definitions/Topology\"\n              Preferred:\n                type: \"array\"\n                description: |\n                  A list of topologies that the volume should attempt to be\n                  provisioned in.\n                items:\n                  $ref: \"#/definitions/Topology\"\n          CapacityRange:\n            type: \"object\"\n            description: |\n              The desired capacity that the volume should be created with. If\n              empty, the plugin will decide the capacity.\n            properties:\n              RequiredBytes:\n                type: \"integer\"\n                format: \"int64\"\n                description: |\n                  The volume must be at least this big. The value of 0\n                  indicates an unspecified minimum\n              LimitBytes:\n                type: \"integer\"\n                format: \"int64\"\n                description: |\n                  The volume must not be bigger than this. The value of 0\n                  indicates an unspecified maximum.\n          Availability:\n            type: \"string\"\n            description: |\n              The availability of the volume for use in tasks.\n              - `active` The volume is fully available for scheduling on the cluster\n              - `pause` No new workloads should use the volume, but existing workloads are not stopped.\n              - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started.\n            default: \"active\"\n            x-nullable: false\n            enum:\n              - \"active\"\n              - \"pause\"\n              - \"drain\"\n\n  Topology:\n    description: |\n      A map of topological domains to topological segments. For in depth\n      details, see documentation for the Topology object in the CSI\n      specification.\n    type: \"object\"\n    additionalProperties:\n      type: \"string\"\n\n  ImageManifestSummary:\n    x-go-name: \"ManifestSummary\"\n    description: |\n      ImageManifestSummary represents a summary of an image manifest.\n    type: \"object\"\n    required: [\"ID\", \"Descriptor\", \"Available\", \"Size\", \"Kind\"]\n    properties:\n      ID:\n        description: |\n          ID is the content-addressable ID of an image and is the same as the\n          digest of the image manifest.\n        type: \"string\"\n        example: \"sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f\"\n      Descriptor:\n        $ref: \"#/definitions/OCIDescriptor\"\n      Available:\n        description: Indicates whether all the child content (image config, layers) is fully available locally.\n        type: \"boolean\"\n        example: true\n      Size:\n        type: \"object\"\n        x-nullable: false\n        required: [\"Content\", \"Total\"]\n        properties:\n          Total:\n            type: \"integer\"\n            format: \"int64\"\n            example: 8213251\n            description: |\n              Total is the total size (in bytes) of all the locally present\n              data (both distributable and non-distributable) that's related to\n              this manifest and its children.\n              This equal to the sum of [Content] size AND all the sizes in the\n              [Size] struct present in the Kind-specific data struct.\n              For example, for an image kind (Kind == \"image\")\n              this would include the size of the image content and unpacked\n              image snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n          Content:\n            description: |\n              Content is the size (in bytes) of all the locally present\n              content in the content store (e.g. image config, layers)\n              referenced by this manifest and its children.\n              This only includes blobs in the content store.\n            type: \"integer\"\n            format: \"int64\"\n            example: 3987495\n      Kind:\n        type: \"string\"\n        example: \"image\"\n        enum:\n          - \"image\"\n          - \"attestation\"\n          - \"unknown\"\n        description: |\n          The kind of the manifest.\n\n          kind         | description\n          -------------|-----------------------------------------------------------\n          image        | Image manifest that can be used to start a container.\n          attestation  | Attestation manifest produced by the Buildkit builder for a specific image manifest.\n      ImageData:\n        description: |\n          The image data for the image manifest.\n          This field is only populated when Kind is \"image\".\n        type: \"object\"\n        x-nullable: true\n        x-omitempty: true\n        required: [\"Platform\", \"Containers\", \"Size\", \"UnpackedSize\"]\n        properties:\n          Platform:\n            $ref: \"#/definitions/OCIPlatform\"\n            description: |\n              OCI platform of the image. This will be the platform specified in the\n              manifest descriptor from the index/manifest list.\n              If it's not available, it will be obtained from the image config.\n          Containers:\n            description: |\n              The IDs of the containers that are using this image.\n            type: \"array\"\n            items:\n              type: \"string\"\n            example: [\"ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430\", \"abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e\"]\n          Size:\n            type: \"object\"\n            x-nullable: false\n            required: [\"Unpacked\"]\n            properties:\n              Unpacked:\n                type: \"integer\"\n                format: \"int64\"\n                example: 3987495\n                description: |\n                  Unpacked is the size (in bytes) of the locally unpacked\n                  (uncompressed) image content that's directly usable by the containers\n                  running this image.\n                  It's independent of the distributable content - e.g.\n                  the image might still have an unpacked data that's still used by\n                  some container even when the distributable/compressed content is\n                  already gone.\n      AttestationData:\n        description: |\n          The image data for the attestation manifest.\n          This field is only populated when Kind is \"attestation\".\n        type: \"object\"\n        x-nullable: true\n        x-omitempty: true\n        required: [\"For\"]\n        properties:\n          For:\n            description: |\n              The digest of the image manifest that this attestation is for.\n            type: \"string\"\n            example: \"sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f\"\n\npaths:\n  /containers/json:\n    get:\n      summary: \"List containers\"\n      description: |\n        Returns a list of containers. For details on the format, see the\n        [inspect endpoint](#operation/ContainerInspect).\n\n        Note that it uses a different, smaller representation of a container\n        than inspecting a single container. For example, the list of linked\n        containers is not propagated .\n      operationId: \"ContainerList\"\n      produces:\n        - \"application/json\"\n      parameters:\n        - name: \"all\"\n          in: \"query\"\n          description: |\n            Return all containers. By default, only running containers are shown.\n          type: \"boolean\"\n          default: false\n        - name: \"limit\"\n          in: \"query\"\n          description: |\n            Return this number of most recently created containers, including\n            non-running ones.\n          type: \"integer\"\n        - name: \"size\"\n          in: \"query\"\n          description: |\n            Return the size of container as fields `SizeRw` and `SizeRootFs`.\n          type: \"boolean\"\n          default: false\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            Filters to process on the container list, encoded as JSON (a\n            `map[string][]string`). For example, `{\"status\": [\"paused\"]}` will\n            only return paused containers.\n\n            Available filters:\n\n            - `ancestor`=(`<image-name>[:<tag>]`, `<image id>`, or `<image@digest>`)\n            - `before`=(`<container id>` or `<container name>`)\n            - `expose`=(`<port>[/<proto>]`|`<startport-endport>/[<proto>]`)\n            - `exited=<int>` containers with exit code of `<int>`\n            - `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n            - `id=<ID>` a container's ID\n            - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n            - `is-task=`(`true`|`false`)\n            - `label=key` or `label=\"key=value\"` of a container label\n            - `name=<name>` a container's name\n            - `network`=(`<network id>` or `<network name>`)\n            - `publish`=(`<port>[/<proto>]`|`<startport-endport>/[<proto>]`)\n            - `since`=(`<container id>` or `<container name>`)\n            - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n            - `volume`=(`<volume name>` or `<mount point destination>`)\n          type: \"string\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/ContainerSummary\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Container\"]\n  /containers/create:\n    post:\n      summary: \"Create a container\"\n      operationId: \"ContainerCreate\"\n      consumes:\n        - \"application/json\"\n        - \"application/octet-stream\"\n      produces:\n        - \"application/json\"\n      parameters:\n        - name: \"name\"\n          in: \"query\"\n          description: |\n            Assign the specified name to the container. Must match\n            `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`.\n          type: \"string\"\n          pattern: \"^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$\"\n        - name: \"platform\"\n          in: \"query\"\n          description: |\n            Platform in the format `os[/arch[/variant]]` used for image lookup.\n\n            When specified, the daemon checks if the requested image is present\n            in the local image cache with the given OS and Architecture, and\n            otherwise returns a `404` status.\n\n            If the option is not set, the host's native OS and Architecture are\n            used to look up the image in the image cache. However, if no platform\n            is passed and the given image does exist in the local image cache,\n            but its OS or architecture does not match, the container is created\n            with the available image, and a warning is added to the `Warnings`\n            field in the response, for example;\n\n                WARNING: The requested image's platform (linux/arm64/v8) does not\n                         match the detected host platform (linux/amd64) and no\n                         specific platform was requested\n\n          type: \"string\"\n          default: \"\"\n        - name: \"body\"\n          in: \"body\"\n          description: \"Container to create\"\n          schema:\n            allOf:\n              - $ref: \"#/definitions/ContainerConfig\"\n              - type: \"object\"\n                properties:\n                  HostConfig:\n                    $ref: \"#/definitions/HostConfig\"\n                  NetworkingConfig:\n                    $ref: \"#/definitions/NetworkingConfig\"\n            example:\n              Hostname: \"\"\n              Domainname: \"\"\n              User: \"\"\n              AttachStdin: false\n              AttachStdout: true\n              AttachStderr: true\n              Tty: false\n              OpenStdin: false\n              StdinOnce: false\n              Env:\n                - \"FOO=bar\"\n                - \"BAZ=quux\"\n              Cmd:\n                - \"date\"\n              Entrypoint: \"\"\n              Image: \"ubuntu\"\n              Labels:\n                com.example.vendor: \"Acme\"\n                com.example.license: \"GPL\"\n                com.example.version: \"1.0\"\n              Volumes:\n                /volumes/data: {}\n              WorkingDir: \"\"\n              NetworkDisabled: false\n              MacAddress: \"12:34:56:78:9a:bc\"\n              ExposedPorts:\n                22/tcp: {}\n              StopSignal: \"SIGTERM\"\n              StopTimeout: 10\n              HostConfig:\n                Binds:\n                  - \"/tmp:/tmp\"\n                Links:\n                  - \"redis3:redis\"\n                Memory: 0\n                MemorySwap: 0\n                MemoryReservation: 0\n                NanoCpus: 500000\n                CpuPercent: 80\n                CpuShares: 512\n                CpuPeriod: 100000\n                CpuRealtimePeriod: 1000000\n                CpuRealtimeRuntime: 10000\n                CpuQuota: 50000\n                CpusetCpus: \"0,1\"\n                CpusetMems: \"0,1\"\n                MaximumIOps: 0\n                MaximumIOBps: 0\n                BlkioWeight: 300\n                BlkioWeightDevice:\n                  - {}\n                BlkioDeviceReadBps:\n                  - {}\n                BlkioDeviceReadIOps:\n                  - {}\n                BlkioDeviceWriteBps:\n                  - {}\n                BlkioDeviceWriteIOps:\n                  - {}\n                DeviceRequests:\n                  - Driver: \"nvidia\"\n                    Count: -1\n                    DeviceIDs\": [\"0\", \"1\", \"GPU-fef8089b-4820-abfc-e83e-94318197576e\"]\n                    Capabilities: [[\"gpu\", \"nvidia\", \"compute\"]]\n                    Options:\n                      property1: \"string\"\n                      property2: \"string\"\n                MemorySwappiness: 60\n                OomKillDisable: false\n                OomScoreAdj: 500\n                PidMode: \"\"\n                PidsLimit: 0\n                PortBindings:\n                  22/tcp:\n                    - HostPort: \"11022\"\n                PublishAllPorts: false\n                Privileged: false\n                ReadonlyRootfs: false\n                Dns:\n                  - \"8.8.8.8\"\n                DnsOptions:\n                  - \"\"\n                DnsSearch:\n                  - \"\"\n                VolumesFrom:\n                  - \"parent\"\n                  - \"other:ro\"\n                CapAdd:\n                  - \"NET_ADMIN\"\n                CapDrop:\n                  - \"MKNOD\"\n                GroupAdd:\n                  - \"newgroup\"\n                RestartPolicy:\n                  Name: \"\"\n                  MaximumRetryCount: 0\n                AutoRemove: true\n                NetworkMode: \"bridge\"\n                Devices: []\n                Ulimits:\n                  - {}\n                LogConfig:\n                  Type: \"json-file\"\n                  Config: {}\n                SecurityOpt: []\n                StorageOpt: {}\n                CgroupParent: \"\"\n                VolumeDriver: \"\"\n                ShmSize: 67108864\n              NetworkingConfig:\n                EndpointsConfig:\n                  isolated_nw:\n                    IPAMConfig:\n                      IPv4Address: \"172.20.30.33\"\n                      IPv6Address: \"2001:db8:abcd::3033\"\n                      LinkLocalIPs:\n                        - \"169.254.34.68\"\n                        - \"fe80::3468\"\n                    Links:\n                      - \"container_1\"\n                      - \"container_2\"\n                    Aliases:\n                      - \"server_x\"\n                      - \"server_y\"\n                  database_nw: {}\n\n          required: true\n      responses:\n        201:\n          description: \"Container created successfully\"\n          schema:\n            $ref: \"#/definitions/ContainerCreateResponse\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such image\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such image: c2ada9df5af8\"\n        409:\n          description: \"conflict\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Container\"]\n  /containers/{id}/json:\n    get:\n      summary: \"Inspect a container\"\n      description: \"Return low-level information about a container.\"\n      operationId: \"ContainerInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/ContainerInspectResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"size\"\n          in: \"query\"\n          type: \"boolean\"\n          default: false\n          description: \"Return the size of container as fields `SizeRw` and `SizeRootFs`\"\n      tags: [\"Container\"]\n  /containers/{id}/top:\n    get:\n      summary: \"List processes running inside a container\"\n      description: |\n        On Unix systems, this is done by running the `ps` command. This endpoint\n        is not supported on Windows.\n      operationId: \"ContainerTop\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/ContainerTopResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"ps_args\"\n          in: \"query\"\n          description: \"The arguments to pass to `ps`. For example, `aux`\"\n          type: \"string\"\n          default: \"-ef\"\n      tags: [\"Container\"]\n  /containers/{id}/logs:\n    get:\n      summary: \"Get container logs\"\n      description: |\n        Get `stdout` and `stderr` logs from a container.\n\n        Note: This endpoint works only for containers with the `json-file` or\n        `journald` logging driver.\n      produces:\n        - \"application/vnd.docker.raw-stream\"\n        - \"application/vnd.docker.multiplexed-stream\"\n      operationId: \"ContainerLogs\"\n      responses:\n        200:\n          description: |\n            logs returned as a stream in response body.\n            For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\n            Note that unlike the attach endpoint, the logs endpoint does not\n            upgrade the connection and does not set Content-Type.\n          schema:\n            type: \"string\"\n            format: \"binary\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"follow\"\n          in: \"query\"\n          description: \"Keep connection after returning logs.\"\n          type: \"boolean\"\n          default: false\n        - name: \"stdout\"\n          in: \"query\"\n          description: \"Return logs from `stdout`\"\n          type: \"boolean\"\n          default: false\n        - name: \"stderr\"\n          in: \"query\"\n          description: \"Return logs from `stderr`\"\n          type: \"boolean\"\n          default: false\n        - name: \"since\"\n          in: \"query\"\n          description: \"Only return logs since this time, as a UNIX timestamp\"\n          type: \"integer\"\n          default: 0\n        - name: \"until\"\n          in: \"query\"\n          description: \"Only return logs before this time, as a UNIX timestamp\"\n          type: \"integer\"\n          default: 0\n        - name: \"timestamps\"\n          in: \"query\"\n          description: \"Add timestamps to every log line\"\n          type: \"boolean\"\n          default: false\n        - name: \"tail\"\n          in: \"query\"\n          description: |\n            Only return this number of log lines from the end of the logs.\n            Specify as an integer or `all` to output all log lines.\n          type: \"string\"\n          default: \"all\"\n      tags: [\"Container\"]\n  /containers/{id}/changes:\n    get:\n      summary: \"Get changes on a container’s filesystem\"\n      description: |\n        Returns which files in a container's filesystem have been added, deleted,\n        or modified. The `Kind` of modification can be one of:\n\n        - `0`: Modified (\"C\")\n        - `1`: Added (\"A\")\n        - `2`: Deleted (\"D\")\n      operationId: \"ContainerChanges\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"The list of changes\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/FilesystemChange\"\n          examples:\n            application/json:\n              - Path: \"/dev\"\n                Kind: 0\n              - Path: \"/dev/kmsg\"\n                Kind: 1\n              - Path: \"/test\"\n                Kind: 1\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n      tags: [\"Container\"]\n  /containers/{id}/export:\n    get:\n      summary: \"Export a container\"\n      description: \"Export the contents of a container as a tarball.\"\n      operationId: \"ContainerExport\"\n      produces:\n        - \"application/octet-stream\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n      tags: [\"Container\"]\n  /containers/{id}/stats:\n    get:\n      summary: \"Get container stats based on resource usage\"\n      description: |\n        This endpoint returns a live stream of a container’s resource usage\n        statistics.\n\n        The `precpu_stats` is the CPU statistic of the *previous* read, and is\n        used to calculate the CPU usage percentage. It is not an exact copy\n        of the `cpu_stats` field.\n\n        If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\n        nil then for compatibility with older daemons the length of the\n        corresponding `cpu_usage.percpu_usage` array should be used.\n\n        On a cgroup v2 host, the following fields are not set\n        * `blkio_stats`: all fields other than `io_service_bytes_recursive`\n        * `cpu_stats`: `cpu_usage.percpu_usage`\n        * `memory_stats`: `max_usage` and `failcnt`\n        Also, `memory_stats.stats` fields are incompatible with cgroup v1.\n\n        To calculate the values shown by the `stats` command of the docker cli tool\n        the following formulas can be used:\n        * used_memory = `memory_stats.usage - memory_stats.stats.cache`\n        * available_memory = `memory_stats.limit`\n        * Memory usage % = `(used_memory / available_memory) * 100.0`\n        * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`\n        * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`\n        * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`\n        * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`\n      operationId: \"ContainerStats\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/ContainerStatsResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"stream\"\n          in: \"query\"\n          description: |\n            Stream the output. If false, the stats will be output once and then\n            it will disconnect.\n          type: \"boolean\"\n          default: true\n        - name: \"one-shot\"\n          in: \"query\"\n          description: |\n            Only get a single stat instead of waiting for 2 cycles. Must be used\n            with `stream=false`.\n          type: \"boolean\"\n          default: false\n      tags: [\"Container\"]\n  /containers/{id}/resize:\n    post:\n      summary: \"Resize a container TTY\"\n      description: \"Resize the TTY for a container.\"\n      operationId: \"ContainerResize\"\n      consumes:\n        - \"application/octet-stream\"\n      produces:\n        - \"text/plain\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"cannot resize container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"h\"\n          in: \"query\"\n          required: true\n          description: \"Height of the TTY session in characters\"\n          type: \"integer\"\n        - name: \"w\"\n          in: \"query\"\n          required: true\n          description: \"Width of the TTY session in characters\"\n          type: \"integer\"\n      tags: [\"Container\"]\n  /containers/{id}/start:\n    post:\n      summary: \"Start a container\"\n      operationId: \"ContainerStart\"\n      responses:\n        204:\n          description: \"no error\"\n        304:\n          description: \"container already started\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"detachKeys\"\n          in: \"query\"\n          description: |\n            Override the key sequence for detaching a container. Format is a\n            single character `[a-Z]` or `ctrl-<value>` where `<value>` is one\n            of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n          type: \"string\"\n      tags: [\"Container\"]\n  /containers/{id}/stop:\n    post:\n      summary: \"Stop a container\"\n      operationId: \"ContainerStop\"\n      responses:\n        204:\n          description: \"no error\"\n        304:\n          description: \"container already stopped\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"signal\"\n          in: \"query\"\n          description: |\n            Signal to send to the container as an integer or string (e.g. `SIGINT`).\n          type: \"string\"\n        - name: \"t\"\n          in: \"query\"\n          description: \"Number of seconds to wait before killing the container\"\n          type: \"integer\"\n      tags: [\"Container\"]\n  /containers/{id}/restart:\n    post:\n      summary: \"Restart a container\"\n      operationId: \"ContainerRestart\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"signal\"\n          in: \"query\"\n          description: |\n            Signal to send to the container as an integer or string (e.g. `SIGINT`).\n          type: \"string\"\n        - name: \"t\"\n          in: \"query\"\n          description: \"Number of seconds to wait before killing the container\"\n          type: \"integer\"\n      tags: [\"Container\"]\n  /containers/{id}/kill:\n    post:\n      summary: \"Kill a container\"\n      description: |\n        Send a POSIX signal to a container, defaulting to killing to the\n        container.\n      operationId: \"ContainerKill\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        409:\n          description: \"container is not running\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"signal\"\n          in: \"query\"\n          description: |\n            Signal to send to the container as an integer or string (e.g. `SIGINT`).\n          type: \"string\"\n          default: \"SIGKILL\"\n      tags: [\"Container\"]\n  /containers/{id}/update:\n    post:\n      summary: \"Update a container\"\n      description: |\n        Change various configuration options of a container without having to\n        recreate it.\n      operationId: \"ContainerUpdate\"\n      consumes: [\"application/json\"]\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"The container has been updated.\"\n          schema:\n            $ref: \"#/definitions/ContainerUpdateResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"update\"\n          in: \"body\"\n          required: true\n          schema:\n            allOf:\n              - $ref: \"#/definitions/Resources\"\n              - type: \"object\"\n                properties:\n                  RestartPolicy:\n                    $ref: \"#/definitions/RestartPolicy\"\n            example:\n              BlkioWeight: 300\n              CpuShares: 512\n              CpuPeriod: 100000\n              CpuQuota: 50000\n              CpuRealtimePeriod: 1000000\n              CpuRealtimeRuntime: 10000\n              CpusetCpus: \"0,1\"\n              CpusetMems: \"0\"\n              Memory: 314572800\n              MemorySwap: 514288000\n              MemoryReservation: 209715200\n              RestartPolicy:\n                MaximumRetryCount: 4\n                Name: \"on-failure\"\n      tags: [\"Container\"]\n  /containers/{id}/rename:\n    post:\n      summary: \"Rename a container\"\n      operationId: \"ContainerRename\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        409:\n          description: \"name already in use\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"name\"\n          in: \"query\"\n          required: true\n          description: \"New name for the container\"\n          type: \"string\"\n      tags: [\"Container\"]\n  /containers/{id}/pause:\n    post:\n      summary: \"Pause a container\"\n      description: |\n        Use the freezer cgroup to suspend all processes in a container.\n\n        Traditionally, when suspending a process the `SIGSTOP` signal is used,\n        which is observable by the process being suspended. With the freezer\n        cgroup the process is unaware, and unable to capture, that it is being\n        suspended, and subsequently resumed.\n      operationId: \"ContainerPause\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n      tags: [\"Container\"]\n  /containers/{id}/unpause:\n    post:\n      summary: \"Unpause a container\"\n      description: \"Resume a container which has been paused.\"\n      operationId: \"ContainerUnpause\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n      tags: [\"Container\"]\n  /containers/{id}/attach:\n    post:\n      summary: \"Attach to a container\"\n      description: |\n        Attach to a container to read its output or send it input. You can attach\n        to the same container multiple times and you can reattach to containers\n        that have been detached.\n\n        Either the `stream` or `logs` parameter must be `true` for this endpoint\n        to do anything.\n\n        See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/)\n        for more details.\n\n        ### Hijacking\n\n        This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`,\n        and `stderr` on the same socket.\n\n        This is the response from the daemon for an attach request:\n\n        ```\n        HTTP/1.1 200 OK\n        Content-Type: application/vnd.docker.raw-stream\n\n        [STREAM]\n        ```\n\n        After the headers and two new lines, the TCP connection can now be used\n        for raw, bidirectional communication between the client and server.\n\n        To hint potential proxies about connection hijacking, the Docker client\n        can also optionally send connection upgrade headers.\n\n        For example, the client sends this request to upgrade the connection:\n\n        ```\n        POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1\n        Upgrade: tcp\n        Connection: Upgrade\n        ```\n\n        The Docker daemon will respond with a `101 UPGRADED` response, and will\n        similarly follow with the raw stream:\n\n        ```\n        HTTP/1.1 101 UPGRADED\n        Content-Type: application/vnd.docker.raw-stream\n        Connection: Upgrade\n        Upgrade: tcp\n\n        [STREAM]\n        ```\n\n        ### Stream format\n\n        When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate),\n        the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream\n        and the stream over the hijacked connected is multiplexed to separate out\n        `stdout` and `stderr`. The stream consists of a series of frames, each\n        containing a header and a payload.\n\n        The header contains the information which the stream writes (`stdout` or\n        `stderr`). It also contains the size of the associated frame encoded in\n        the last four bytes (`uint32`).\n\n        It is encoded on the first eight bytes like this:\n\n        ```go\n        header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n        ```\n\n        `STREAM_TYPE` can be:\n\n        - 0: `stdin` (is written on `stdout`)\n        - 1: `stdout`\n        - 2: `stderr`\n\n        `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size\n        encoded as big endian.\n\n        Following the header is the payload, which is the specified number of\n        bytes of `STREAM_TYPE`.\n\n        The simplest way to implement this protocol is the following:\n\n        1. Read 8 bytes.\n        2. Choose `stdout` or `stderr` depending on the first byte.\n        3. Extract the frame size from the last four bytes.\n        4. Read the extracted size and output it on the correct output.\n        5. Goto 1.\n\n        ### Stream format when using a TTY\n\n        When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate),\n        the stream is not multiplexed. The data exchanged over the hijacked\n        connection is simply the raw data from the process PTY and client's\n        `stdin`.\n\n      operationId: \"ContainerAttach\"\n      produces:\n        - \"application/vnd.docker.raw-stream\"\n        - \"application/vnd.docker.multiplexed-stream\"\n      responses:\n        101:\n          description: \"no error, hints proxy about hijacking\"\n        200:\n          description: \"no error, no upgrade header found\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"detachKeys\"\n          in: \"query\"\n          description: |\n            Override the key sequence for detaching a container.Format is a single\n            character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`,\n            `@`, `^`, `[`, `,` or `_`.\n          type: \"string\"\n        - name: \"logs\"\n          in: \"query\"\n          description: |\n            Replay previous logs from the container.\n\n            This is useful for attaching to a container that has started and you\n            want to output everything since the container started.\n\n            If `stream` is also enabled, once all the previous output has been\n            returned, it will seamlessly transition into streaming current\n            output.\n          type: \"boolean\"\n          default: false\n        - name: \"stream\"\n          in: \"query\"\n          description: |\n            Stream attached streams from the time the request was made onwards.\n          type: \"boolean\"\n          default: false\n        - name: \"stdin\"\n          in: \"query\"\n          description: \"Attach to `stdin`\"\n          type: \"boolean\"\n          default: false\n        - name: \"stdout\"\n          in: \"query\"\n          description: \"Attach to `stdout`\"\n          type: \"boolean\"\n          default: false\n        - name: \"stderr\"\n          in: \"query\"\n          description: \"Attach to `stderr`\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Container\"]\n  /containers/{id}/attach/ws:\n    get:\n      summary: \"Attach to a container via a websocket\"\n      operationId: \"ContainerAttachWebsocket\"\n      responses:\n        101:\n          description: \"no error, hints proxy about hijacking\"\n        200:\n          description: \"no error, no upgrade header found\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"detachKeys\"\n          in: \"query\"\n          description: |\n            Override the key sequence for detaching a container.Format is a single\n            character `[a-Z]` or `ctrl-<value>` where `<value>` is one of: `a-z`,\n            `@`, `^`, `[`, `,`, or `_`.\n          type: \"string\"\n        - name: \"logs\"\n          in: \"query\"\n          description: \"Return logs\"\n          type: \"boolean\"\n          default: false\n        - name: \"stream\"\n          in: \"query\"\n          description: \"Return stream\"\n          type: \"boolean\"\n          default: false\n        - name: \"stdin\"\n          in: \"query\"\n          description: \"Attach to `stdin`\"\n          type: \"boolean\"\n          default: false\n        - name: \"stdout\"\n          in: \"query\"\n          description: \"Attach to `stdout`\"\n          type: \"boolean\"\n          default: false\n        - name: \"stderr\"\n          in: \"query\"\n          description: \"Attach to `stderr`\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Container\"]\n  /containers/{id}/wait:\n    post:\n      summary: \"Wait for a container\"\n      description: \"Block until a container stops, then returns the exit code.\"\n      operationId: \"ContainerWait\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"The container has exit.\"\n          schema:\n            $ref: \"#/definitions/ContainerWaitResponse\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"condition\"\n          in: \"query\"\n          description: |\n            Wait until a container state reaches the given condition.\n\n            Defaults to `not-running` if omitted or empty.\n          type: \"string\"\n          enum:\n            - \"not-running\"\n            - \"next-exit\"\n            - \"removed\"\n          default: \"not-running\"\n      tags: [\"Container\"]\n  /containers/{id}:\n    delete:\n      summary: \"Remove a container\"\n      operationId: \"ContainerDelete\"\n      responses:\n        204:\n          description: \"no error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        409:\n          description: \"conflict\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: |\n                You cannot remove a running container: c2ada9df5af8. Stop the\n                container before attempting removal or force remove\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"v\"\n          in: \"query\"\n          description: \"Remove anonymous volumes associated with the container.\"\n          type: \"boolean\"\n          default: false\n        - name: \"force\"\n          in: \"query\"\n          description: \"If the container is running, kill it before removing it.\"\n          type: \"boolean\"\n          default: false\n        - name: \"link\"\n          in: \"query\"\n          description: \"Remove the specified link associated with the container.\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Container\"]\n  /containers/{id}/archive:\n    head:\n      summary: \"Get information about files in a container\"\n      description: |\n        A response header `X-Docker-Container-Path-Stat` is returned, containing\n        a base64 - encoded JSON object with some filesystem header information\n        about the path.\n      operationId: \"ContainerArchiveInfo\"\n      responses:\n        200:\n          description: \"no error\"\n          headers:\n            X-Docker-Container-Path-Stat:\n              type: \"string\"\n              description: |\n                A base64 - encoded JSON object with some filesystem header\n                information about the path\n        400:\n          description: \"Bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"Container or path does not exist\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"path\"\n          in: \"query\"\n          required: true\n          description: \"Resource in the container’s filesystem to archive.\"\n          type: \"string\"\n      tags: [\"Container\"]\n    get:\n      summary: \"Get an archive of a filesystem resource in a container\"\n      description: \"Get a tar archive of a resource in the filesystem of container id.\"\n      operationId: \"ContainerArchive\"\n      produces: [\"application/x-tar\"]\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"Bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"Container or path does not exist\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"path\"\n          in: \"query\"\n          required: true\n          description: \"Resource in the container’s filesystem to archive.\"\n          type: \"string\"\n      tags: [\"Container\"]\n    put:\n      summary: \"Extract an archive of files or folders to a directory in a container\"\n      description: |\n        Upload a tar archive to be extracted to a path in the filesystem of container id.\n        `path` parameter is asserted to be a directory. If it exists as a file, 400 error\n        will be returned with message \"not a directory\".\n      operationId: \"PutContainerArchive\"\n      consumes: [\"application/x-tar\", \"application/octet-stream\"]\n      responses:\n        200:\n          description: \"The content was extracted successfully\"\n        400:\n          description: \"Bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"not a directory\"\n        403:\n          description: \"Permission denied, the volume or container rootfs is marked as read-only.\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"No such container or path does not exist inside the container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the container\"\n          type: \"string\"\n        - name: \"path\"\n          in: \"query\"\n          required: true\n          description: \"Path to a directory in the container to extract the archive’s contents into. \"\n          type: \"string\"\n        - name: \"noOverwriteDirNonDir\"\n          in: \"query\"\n          description: |\n            If `1`, `true`, or `True` then it will be an error if unpacking the\n            given content would cause an existing directory to be replaced with\n            a non-directory and vice versa.\n          type: \"string\"\n        - name: \"copyUIDGID\"\n          in: \"query\"\n          description: |\n            If `1`, `true`, then it will copy UID/GID maps to the dest file or\n            dir\n          type: \"string\"\n        - name: \"inputStream\"\n          in: \"body\"\n          required: true\n          description: |\n            The input stream must be a tar archive compressed with one of the\n            following algorithms: `identity` (no compression), `gzip`, `bzip2`,\n            or `xz`.\n          schema:\n            type: \"string\"\n            format: \"binary\"\n      tags: [\"Container\"]\n  /containers/prune:\n    post:\n      summary: \"Delete stopped containers\"\n      produces:\n        - \"application/json\"\n      operationId: \"ContainerPrune\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\n            Available filters:\n            - `until=<timestamp>` Prune containers created before this timestamp. The `<timestamp>` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n          type: \"string\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"object\"\n            title: \"ContainerPruneResponse\"\n            properties:\n              ContainersDeleted:\n                description: \"Container IDs that were deleted\"\n                type: \"array\"\n                items:\n                  type: \"string\"\n              SpaceReclaimed:\n                description: \"Disk space reclaimed in bytes\"\n                type: \"integer\"\n                format: \"int64\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Container\"]\n  /images/json:\n    get:\n      summary: \"List Images\"\n      description: \"Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.\"\n      operationId: \"ImageList\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"Summary image data for the images matching the query\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/ImageSummary\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"all\"\n          in: \"query\"\n          description: \"Show all images. Only images from a final layer (no children) are shown by default.\"\n          type: \"boolean\"\n          default: false\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to\n            process on the images list.\n\n            Available filters:\n\n            - `before`=(`<image-name>[:<tag>]`,  `<image id>` or `<image@digest>`)\n            - `dangling=true`\n            - `label=key` or `label=\"key=value\"` of an image label\n            - `reference`=(`<image-name>[:<tag>]`)\n            - `since`=(`<image-name>[:<tag>]`,  `<image id>` or `<image@digest>`)\n            - `until=<timestamp>`\n          type: \"string\"\n        - name: \"shared-size\"\n          in: \"query\"\n          description: \"Compute and show shared size as a `SharedSize` field on each image.\"\n          type: \"boolean\"\n          default: false\n        - name: \"digests\"\n          in: \"query\"\n          description: \"Show digest information as a `RepoDigests` field on each image.\"\n          type: \"boolean\"\n          default: false\n        - name: \"manifests\"\n          in: \"query\"\n          description: \"Include `Manifests` in the image summary.\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Image\"]\n  /build:\n    post:\n      summary: \"Build an image\"\n      description: |\n        Build an image from a tar archive with a `Dockerfile` in it.\n\n        The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\n        The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\n        The build is canceled if the client drops the connection by quitting or being killed.\n      operationId: \"ImageBuild\"\n      consumes:\n        - \"application/octet-stream\"\n      produces:\n        - \"application/json\"\n      parameters:\n        - name: \"inputStream\"\n          in: \"body\"\n          description: \"A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.\"\n          schema:\n            type: \"string\"\n            format: \"binary\"\n        - name: \"dockerfile\"\n          in: \"query\"\n          description: \"Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.\"\n          type: \"string\"\n          default: \"Dockerfile\"\n        - name: \"t\"\n          in: \"query\"\n          description: \"A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.\"\n          type: \"string\"\n        - name: \"extrahosts\"\n          in: \"query\"\n          description: \"Extra hosts to add to /etc/hosts\"\n          type: \"string\"\n        - name: \"remote\"\n          in: \"query\"\n          description: \"A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.\"\n          type: \"string\"\n        - name: \"q\"\n          in: \"query\"\n          description: \"Suppress verbose build output.\"\n          type: \"boolean\"\n          default: false\n        - name: \"nocache\"\n          in: \"query\"\n          description: \"Do not use the cache when building the image.\"\n          type: \"boolean\"\n          default: false\n        - name: \"cachefrom\"\n          in: \"query\"\n          description: \"JSON array of images used for build cache resolution.\"\n          type: \"string\"\n        - name: \"pull\"\n          in: \"query\"\n          description: \"Attempt to pull the image even if an older image exists locally.\"\n          type: \"string\"\n        - name: \"rm\"\n          in: \"query\"\n          description: \"Remove intermediate containers after a successful build.\"\n          type: \"boolean\"\n          default: true\n        - name: \"forcerm\"\n          in: \"query\"\n          description: \"Always remove intermediate containers, even upon failure.\"\n          type: \"boolean\"\n          default: false\n        - name: \"memory\"\n          in: \"query\"\n          description: \"Set memory limit for build.\"\n          type: \"integer\"\n        - name: \"memswap\"\n          in: \"query\"\n          description: \"Total memory (memory + swap). Set as `-1` to disable swap.\"\n          type: \"integer\"\n        - name: \"cpushares\"\n          in: \"query\"\n          description: \"CPU shares (relative weight).\"\n          type: \"integer\"\n        - name: \"cpusetcpus\"\n          in: \"query\"\n          description: \"CPUs in which to allow execution (e.g., `0-3`, `0,1`).\"\n          type: \"string\"\n        - name: \"cpuperiod\"\n          in: \"query\"\n          description: \"The length of a CPU period in microseconds.\"\n          type: \"integer\"\n        - name: \"cpuquota\"\n          in: \"query\"\n          description: \"Microseconds of CPU time that the container can get in a CPU period.\"\n          type: \"integer\"\n        - name: \"buildargs\"\n          in: \"query\"\n          description: >\n            JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker\n            uses the buildargs as the environment context for commands run via the `Dockerfile` RUN\n            instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for\n            passing secret values.\n\n\n            For example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the\n            query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n\n            [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n          type: \"string\"\n        - name: \"shmsize\"\n          in: \"query\"\n          description: \"Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.\"\n          type: \"integer\"\n        - name: \"squash\"\n          in: \"query\"\n          description: \"Squash the resulting images layers into a single layer. *(Experimental release only.)*\"\n          type: \"boolean\"\n        - name: \"labels\"\n          in: \"query\"\n          description: \"Arbitrary key/value labels to set on the image, as a JSON map of string pairs.\"\n          type: \"string\"\n        - name: \"networkmode\"\n          in: \"query\"\n          description: |\n            Sets the networking mode for the run commands during build. Supported\n            standard values are: `bridge`, `host`, `none`, and `container:<name|id>`.\n            Any other value is taken as a custom network's name or ID to which this\n            container should connect to.\n          type: \"string\"\n        - name: \"Content-type\"\n          in: \"header\"\n          type: \"string\"\n          enum:\n            - \"application/x-tar\"\n          default: \"application/x-tar\"\n        - name: \"X-Registry-Config\"\n          in: \"header\"\n          description: |\n            This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\n            The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n            ```\n            {\n              \"docker.example.com\": {\n                \"username\": \"janedoe\",\n                \"password\": \"hunter2\"\n              },\n              \"https://index.docker.io/v1/\": {\n                \"username\": \"mobydock\",\n                \"password\": \"conta1n3rize14\"\n              }\n            }\n            ```\n\n            Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n          type: \"string\"\n        - name: \"platform\"\n          in: \"query\"\n          description: \"Platform in the format os[/arch[/variant]]\"\n          type: \"string\"\n          default: \"\"\n        - name: \"target\"\n          in: \"query\"\n          description: \"Target build stage\"\n          type: \"string\"\n          default: \"\"\n        - name: \"outputs\"\n          in: \"query\"\n          description: \"BuildKit output configuration\"\n          type: \"string\"\n          default: \"\"\n        - name: \"version\"\n          in: \"query\"\n          type: \"string\"\n          default: \"1\"\n          enum: [\"1\", \"2\"]\n          description: |\n            Version of the builder backend to use.\n\n            - `1` is the first generation classic (deprecated) builder in the Docker daemon (default)\n            - `2` is [BuildKit](https://github.com/moby/buildkit)\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"Bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Image\"]\n  /build/prune:\n    post:\n      summary: \"Delete builder cache\"\n      produces:\n        - \"application/json\"\n      operationId: \"BuildPrune\"\n      parameters:\n        - name: \"keep-storage\"\n          in: \"query\"\n          description: |\n            Amount of disk space in bytes to keep for cache\n\n            > **Deprecated**: This parameter is deprecated and has been renamed to \"reserved-space\".\n            > It is kept for backward compatibility and will be removed in API v1.49.\n          type: \"integer\"\n          format: \"int64\"\n        - name: \"reserved-space\"\n          in: \"query\"\n          description: \"Amount of disk space in bytes to keep for cache\"\n          type: \"integer\"\n          format: \"int64\"\n        - name: \"max-used-space\"\n          in: \"query\"\n          description: \"Maximum amount of disk space allowed to keep for cache\"\n          type: \"integer\"\n          format: \"int64\"\n        - name: \"min-free-space\"\n          in: \"query\"\n          description: \"Target amount of free disk space after pruning\"\n          type: \"integer\"\n          format: \"int64\"\n        - name: \"all\"\n          in: \"query\"\n          type: \"boolean\"\n          description: \"Remove all types of build cache\"\n        - name: \"filters\"\n          in: \"query\"\n          type: \"string\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to\n            process on the list of build cache objects.\n\n            Available filters:\n\n            - `until=<timestamp>` remove cache older than `<timestamp>`. The `<timestamp>` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time.\n            - `id=<id>`\n            - `parent=<id>`\n            - `type=<string>`\n            - `description=<string>`\n            - `inuse`\n            - `shared`\n            - `private`\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"object\"\n            title: \"BuildPruneResponse\"\n            properties:\n              CachesDeleted:\n                type: \"array\"\n                items:\n                  description: \"ID of build cache object\"\n                  type: \"string\"\n              SpaceReclaimed:\n                description: \"Disk space reclaimed in bytes\"\n                type: \"integer\"\n                format: \"int64\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Image\"]\n  /images/create:\n    post:\n      summary: \"Create an image\"\n      description: \"Pull or import an image.\"\n      operationId: \"ImageCreate\"\n      consumes:\n        - \"text/plain\"\n        - \"application/octet-stream\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"repository does not exist or no read access\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"fromImage\"\n          in: \"query\"\n          description: |\n            Name of the image to pull. If the name includes a tag or digest, specific behavior applies:\n\n            - If only `fromImage` includes a tag, that tag is used.\n            - If both `fromImage` and `tag` are provided, `tag` takes precedence.\n            - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored.\n            - If neither a tag nor digest is specified, all tags are pulled.\n          type: \"string\"\n        - name: \"fromSrc\"\n          in: \"query\"\n          description: \"Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.\"\n          type: \"string\"\n        - name: \"repo\"\n          in: \"query\"\n          description: \"Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.\"\n          type: \"string\"\n        - name: \"tag\"\n          in: \"query\"\n          description: \"Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.\"\n          type: \"string\"\n        - name: \"message\"\n          in: \"query\"\n          description: \"Set commit message for imported image.\"\n          type: \"string\"\n        - name: \"inputImage\"\n          in: \"body\"\n          description: \"Image content if the value `-` has been specified in fromSrc query parameter\"\n          schema:\n            type: \"string\"\n          required: false\n        - name: \"X-Registry-Auth\"\n          in: \"header\"\n          description: |\n            A base64url-encoded auth configuration.\n\n            Refer to the [authentication section](#section/Authentication) for\n            details.\n          type: \"string\"\n        - name: \"changes\"\n          in: \"query\"\n          description: |\n            Apply `Dockerfile` instructions to the image that is created,\n            for example: `changes=ENV DEBUG=true`.\n            Note that `ENV DEBUG=true` should be URI component encoded.\n\n            Supported `Dockerfile` instructions:\n            `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR`\n          type: \"array\"\n          items:\n            type: \"string\"\n        - name: \"platform\"\n          in: \"query\"\n          description: |\n            Platform in the format os[/arch[/variant]].\n\n            When used in combination with the `fromImage` option, the daemon checks\n            if the given image is present in the local image cache with the given\n            OS and Architecture, and otherwise attempts to pull the image. If the\n            option is not set, the host's native OS and Architecture are used.\n            If the given image does not exist in the local image cache, the daemon\n            attempts to pull the image with the host's native OS and Architecture.\n            If the given image does exists in the local image cache, but its OS or\n            architecture does not match, a warning is produced.\n\n            When used with the `fromSrc` option to import an image from an archive,\n            this option sets the platform information for the imported image. If\n            the option is not set, the host's native OS and Architecture are used\n            for the imported image.\n          type: \"string\"\n          default: \"\"\n      tags: [\"Image\"]\n  /images/{name}/json:\n    get:\n      summary: \"Inspect an image\"\n      description: \"Return low-level information about an image.\"\n      operationId: \"ImageInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            $ref: \"#/definitions/ImageInspect\"\n        404:\n          description: \"No such image\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such image: someimage (tag: latest)\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: \"Image name or id\"\n          type: \"string\"\n          required: true\n        - name: \"manifests\"\n          in: \"query\"\n          description: \"Include Manifests in the image summary.\"\n          type: \"boolean\"\n          default: false\n          required: false\n      tags: [\"Image\"]\n  /images/{name}/history:\n    get:\n      summary: \"Get the history of an image\"\n      description: \"Return parent layers of an image.\"\n      operationId: \"ImageHistory\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"List of image layers\"\n          schema:\n            type: \"array\"\n            items:\n              type: \"object\"\n              x-go-name: HistoryResponseItem\n              title: \"HistoryResponseItem\"\n              description: \"individual image layer information in response to ImageHistory operation\"\n              required: [Id, Created, CreatedBy, Tags, Size, Comment]\n              properties:\n                Id:\n                  type: \"string\"\n                  x-nullable: false\n                Created:\n                  type: \"integer\"\n                  format: \"int64\"\n                  x-nullable: false\n                CreatedBy:\n                  type: \"string\"\n                  x-nullable: false\n                Tags:\n                  type: \"array\"\n                  items:\n                    type: \"string\"\n                Size:\n                  type: \"integer\"\n                  format: \"int64\"\n                  x-nullable: false\n                Comment:\n                  type: \"string\"\n                  x-nullable: false\n          examples:\n            application/json:\n              - Id: \"3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710\"\n                Created: 1398108230\n                CreatedBy: \"/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /\"\n                Tags:\n                  - \"ubuntu:lucid\"\n                  - \"ubuntu:10.04\"\n                Size: 182964289\n                Comment: \"\"\n              - Id: \"6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8\"\n                Created: 1398108222\n                CreatedBy: \"/bin/sh -c #(nop) MAINTAINER Tianon Gravi <admwiggin@gmail.com> - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/\"\n                Tags: []\n                Size: 0\n                Comment: \"\"\n              - Id: \"511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158\"\n                Created: 1371157430\n                CreatedBy: \"\"\n                Tags:\n                  - \"scratch12:latest\"\n                  - \"scratch:latest\"\n                Size: 0\n                Comment: \"Imported from -\"\n        404:\n          description: \"No such image\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: \"Image name or ID\"\n          type: \"string\"\n          required: true\n        - name: \"platform\"\n          type: \"string\"\n          in: \"query\"\n          description: |\n            JSON-encoded OCI platform to select the platform-variant.\n            If omitted, it defaults to any locally available platform,\n            prioritizing the daemon's host platform.\n\n            If the daemon provides a multi-platform image store, this selects\n            the platform-variant to show the history for. If the image is\n            a single-platform image, or if the multi-platform image does not\n            provide a variant matching the given platform, an error is returned.\n\n            Example: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n      tags: [\"Image\"]\n  /images/{name}/push:\n    post:\n      summary: \"Push an image\"\n      description: |\n        Push an image to a registry.\n\n        If you wish to push an image on to a private registry, that image must\n        already have a tag which references the registry. For example,\n        `registry.example.com/myimage:latest`.\n\n        The push is cancelled if the HTTP connection is closed.\n      operationId: \"ImagePush\"\n      consumes:\n        - \"application/octet-stream\"\n      responses:\n        200:\n          description: \"No error\"\n        404:\n          description: \"No such image\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            Name of the image to push. For example, `registry.example.com/myimage`.\n            The image must be present in the local image store with the same name.\n\n            The name should be provided without tag; if a tag is provided, it\n            is ignored. For example, `registry.example.com/myimage:latest` is\n            considered equivalent to `registry.example.com/myimage`.\n\n            Use the `tag` parameter to specify the tag to push.\n          type: \"string\"\n          required: true\n        - name: \"tag\"\n          in: \"query\"\n          description: |\n            Tag of the image to push. For example, `latest`. If no tag is provided,\n            all tags of the given image that are present in the local image store\n            are pushed.\n          type: \"string\"\n        - name: \"platform\"\n          type: \"string\"\n          in: \"query\"\n          description: |\n            JSON-encoded OCI platform to select the platform-variant to push.\n            If not provided, all available variants will attempt to be pushed.\n\n            If the daemon provides a multi-platform image store, this selects\n            the platform-variant to push to the registry. If the image is\n            a single-platform image, or if the multi-platform image does not\n            provide a variant matching the given platform, an error is returned.\n\n            Example: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n        - name: \"X-Registry-Auth\"\n          in: \"header\"\n          description: |\n            A base64url-encoded auth configuration.\n\n            Refer to the [authentication section](#section/Authentication) for\n            details.\n          type: \"string\"\n          required: true\n      tags: [\"Image\"]\n  /images/{name}/tag:\n    post:\n      summary: \"Tag an image\"\n      description: \"Tag an image so that it becomes part of a repository.\"\n      operationId: \"ImageTag\"\n      responses:\n        201:\n          description: \"No error\"\n        400:\n          description: \"Bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"No such image\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        409:\n          description: \"Conflict\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: \"Image name or ID to tag.\"\n          type: \"string\"\n          required: true\n        - name: \"repo\"\n          in: \"query\"\n          description: \"The repository to tag in. For example, `someuser/someimage`.\"\n          type: \"string\"\n        - name: \"tag\"\n          in: \"query\"\n          description: \"The name of the new tag.\"\n          type: \"string\"\n      tags: [\"Image\"]\n  /images/{name}:\n    delete:\n      summary: \"Remove an image\"\n      description: |\n        Remove an image, along with any untagged parent images that were\n        referenced by that image.\n\n        Images can't be removed if they have descendant images, are being\n        used by a running container or are being used by a build.\n      operationId: \"ImageDelete\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"The image was deleted successfully\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/ImageDeleteResponseItem\"\n          examples:\n            application/json:\n              - Untagged: \"3e2f21a89f\"\n              - Deleted: \"3e2f21a89f\"\n              - Deleted: \"53b4f83ac9\"\n        404:\n          description: \"No such image\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        409:\n          description: \"Conflict\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: \"Image name or ID\"\n          type: \"string\"\n          required: true\n        - name: \"force\"\n          in: \"query\"\n          description: \"Remove the image even if it is being used by stopped containers or has other tags\"\n          type: \"boolean\"\n          default: false\n        - name: \"noprune\"\n          in: \"query\"\n          description: \"Do not delete untagged parent images\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Image\"]\n  /images/search:\n    get:\n      summary: \"Search images\"\n      description: \"Search for an image on Docker Hub.\"\n      operationId: \"ImageSearch\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"array\"\n            items:\n              type: \"object\"\n              title: \"ImageSearchResponseItem\"\n              properties:\n                description:\n                  type: \"string\"\n                is_official:\n                  type: \"boolean\"\n                is_automated:\n                  description: |\n                    Whether this repository has automated builds enabled.\n\n                    <p><br /></p>\n\n                    > **Deprecated**: This field is deprecated and will always be \"false\".\n                  type: \"boolean\"\n                  example: false\n                name:\n                  type: \"string\"\n                star_count:\n                  type: \"integer\"\n          examples:\n            application/json:\n              - description: \"A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!\"\n                is_official: true\n                is_automated: false\n                name: \"alpine\"\n                star_count: 10093\n              - description: \"Busybox base image.\"\n                is_official: true\n                is_automated: false\n                name: \"Busybox base image.\"\n                star_count: 3037\n              - description: \"The PostgreSQL object-relational database system provides reliability and data integrity.\"\n                is_official: true\n                is_automated: false\n                name: \"postgres\"\n                star_count: 12408\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"term\"\n          in: \"query\"\n          description: \"Term to search\"\n          type: \"string\"\n          required: true\n        - name: \"limit\"\n          in: \"query\"\n          description: \"Maximum number of results to return\"\n          type: \"integer\"\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n            - `is-official=(true|false)`\n            - `stars=<number>` Matches images that has at least 'number' stars.\n          type: \"string\"\n      tags: [\"Image\"]\n  /images/prune:\n    post:\n      summary: \"Delete unused images\"\n      produces:\n        - \"application/json\"\n      operationId: \"ImagePrune\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n            - `dangling=<boolean>` When set to `true` (or `1`), prune only\n               unused *and* untagged images. When set to `false`\n               (or `0`), all unused images are pruned.\n            - `until=<string>` Prune images created before this timestamp. The `<timestamp>` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n          type: \"string\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"object\"\n            title: \"ImagePruneResponse\"\n            properties:\n              ImagesDeleted:\n                description: \"Images that were deleted\"\n                type: \"array\"\n                items:\n                  $ref: \"#/definitions/ImageDeleteResponseItem\"\n              SpaceReclaimed:\n                description: \"Disk space reclaimed in bytes\"\n                type: \"integer\"\n                format: \"int64\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Image\"]\n  /auth:\n    post:\n      summary: \"Check auth configuration\"\n      description: |\n        Validate credentials for a registry and, if available, get an identity\n        token for accessing the registry without password.\n      operationId: \"SystemAuth\"\n      consumes: [\"application/json\"]\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"An identity token was generated successfully.\"\n          schema:\n            type: \"object\"\n            title: \"SystemAuthResponse\"\n            required: [Status]\n            properties:\n              Status:\n                description: \"The status of the authentication\"\n                type: \"string\"\n                x-nullable: false\n              IdentityToken:\n                description: \"An opaque token used to authenticate a user after a successful login\"\n                type: \"string\"\n                x-nullable: false\n          examples:\n            application/json:\n              Status: \"Login Succeeded\"\n              IdentityToken: \"9cbaf023786cd7...\"\n        204:\n          description: \"No error\"\n        401:\n          description: \"Auth error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"authConfig\"\n          in: \"body\"\n          description: \"Authentication to check\"\n          schema:\n            $ref: \"#/definitions/AuthConfig\"\n      tags: [\"System\"]\n  /info:\n    get:\n      summary: \"Get system information\"\n      operationId: \"SystemInfo\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            $ref: \"#/definitions/SystemInfo\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"System\"]\n  /version:\n    get:\n      summary: \"Get version\"\n      description: \"Returns the version of Docker that is running and various information about the system that Docker is running on.\"\n      operationId: \"SystemVersion\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/SystemVersion\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"System\"]\n  /_ping:\n    get:\n      summary: \"Ping\"\n      description: \"This is a dummy endpoint you can use to test if the server is accessible.\"\n      operationId: \"SystemPing\"\n      produces: [\"text/plain\"]\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"string\"\n            example: \"OK\"\n          headers:\n            Api-Version:\n              type: \"string\"\n              description: \"Max API Version the server supports\"\n            Builder-Version:\n              type: \"string\"\n              description: |\n                Default version of docker image builder\n\n                The default on Linux is version \"2\" (BuildKit), but the daemon\n                can be configured to recommend version \"1\" (classic Builder).\n                Windows does not yet support BuildKit for native Windows images,\n                and uses \"1\" (classic builder) as a default.\n\n                This value is a recommendation as advertised by the daemon, and\n                it is up to the client to choose which builder to use.\n              default: \"2\"\n            Docker-Experimental:\n              type: \"boolean\"\n              description: \"If the server is running with experimental mode enabled\"\n            Swarm:\n              type: \"string\"\n              enum: [\"inactive\", \"pending\", \"error\", \"locked\", \"active/worker\", \"active/manager\"]\n              description: |\n                Contains information about Swarm status of the daemon,\n                and if the daemon is acting as a manager or worker node.\n              default: \"inactive\"\n            Cache-Control:\n              type: \"string\"\n              default: \"no-cache, no-store, must-revalidate\"\n            Pragma:\n              type: \"string\"\n              default: \"no-cache\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          headers:\n            Cache-Control:\n              type: \"string\"\n              default: \"no-cache, no-store, must-revalidate\"\n            Pragma:\n              type: \"string\"\n              default: \"no-cache\"\n      tags: [\"System\"]\n    head:\n      summary: \"Ping\"\n      description: \"This is a dummy endpoint you can use to test if the server is accessible.\"\n      operationId: \"SystemPingHead\"\n      produces: [\"text/plain\"]\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"string\"\n            example: \"(empty)\"\n          headers:\n            Api-Version:\n              type: \"string\"\n              description: \"Max API Version the server supports\"\n            Builder-Version:\n              type: \"string\"\n              description: \"Default version of docker image builder\"\n            Docker-Experimental:\n              type: \"boolean\"\n              description: \"If the server is running with experimental mode enabled\"\n            Swarm:\n              type: \"string\"\n              enum: [\"inactive\", \"pending\", \"error\", \"locked\", \"active/worker\", \"active/manager\"]\n              description: |\n                Contains information about Swarm status of the daemon,\n                and if the daemon is acting as a manager or worker node.\n              default: \"inactive\"\n            Cache-Control:\n              type: \"string\"\n              default: \"no-cache, no-store, must-revalidate\"\n            Pragma:\n              type: \"string\"\n              default: \"no-cache\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"System\"]\n  /commit:\n    post:\n      summary: \"Create a new image from a container\"\n      operationId: \"ImageCommit\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/json\"\n      responses:\n        201:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/IDResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"containerConfig\"\n          in: \"body\"\n          description: \"The container configuration\"\n          schema:\n            $ref: \"#/definitions/ContainerConfig\"\n        - name: \"container\"\n          in: \"query\"\n          description: \"The ID or name of the container to commit\"\n          type: \"string\"\n        - name: \"repo\"\n          in: \"query\"\n          description: \"Repository name for the created image\"\n          type: \"string\"\n        - name: \"tag\"\n          in: \"query\"\n          description: \"Tag name for the create image\"\n          type: \"string\"\n        - name: \"comment\"\n          in: \"query\"\n          description: \"Commit message\"\n          type: \"string\"\n        - name: \"author\"\n          in: \"query\"\n          description: \"Author of the image (e.g., `John Hannibal Smith <hannibal@a-team.com>`)\"\n          type: \"string\"\n        - name: \"pause\"\n          in: \"query\"\n          description: \"Whether to pause the container before committing\"\n          type: \"boolean\"\n          default: true\n        - name: \"changes\"\n          in: \"query\"\n          description: \"`Dockerfile` instructions to apply while committing\"\n          type: \"string\"\n      tags: [\"Image\"]\n  /events:\n    get:\n      summary: \"Monitor events\"\n      description: |\n        Stream real-time events from the server.\n\n        Various objects within Docker report events when something happens to them.\n\n        Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune`\n\n        Images report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune`\n\n        Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune`\n\n        Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune`\n\n        The Docker daemon reports these events: `reload`\n\n        Services report these events: `create`, `update`, and `remove`\n\n        Nodes report these events: `create`, `update`, and `remove`\n\n        Secrets report these events: `create`, `update`, and `remove`\n\n        Configs report these events: `create`, `update`, and `remove`\n\n        The Builder reports `prune` events\n\n      operationId: \"SystemEvents\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/EventMessage\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"since\"\n          in: \"query\"\n          description: \"Show events created since this timestamp then stream new events.\"\n          type: \"string\"\n        - name: \"until\"\n          in: \"query\"\n          description: \"Show events created until this timestamp then stop streaming.\"\n          type: \"string\"\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n            - `config=<string>` config name or ID\n            - `container=<string>` container name or ID\n            - `daemon=<string>` daemon name or ID\n            - `event=<string>` event type\n            - `image=<string>` image name or ID\n            - `label=<string>` image or container label\n            - `network=<string>` network name or ID\n            - `node=<string>` node ID\n            - `plugin`=<string> plugin name or ID\n            - `scope`=<string> local or swarm\n            - `secret=<string>` secret name or ID\n            - `service=<string>` service name or ID\n            - `type=<string>` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n            - `volume=<string>` volume name\n          type: \"string\"\n      tags: [\"System\"]\n  /system/df:\n    get:\n      summary: \"Get data usage information\"\n      operationId: \"SystemDataUsage\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"object\"\n            title: \"SystemDataUsageResponse\"\n            properties:\n              LayersSize:\n                type: \"integer\"\n                format: \"int64\"\n              Images:\n                type: \"array\"\n                items:\n                  $ref: \"#/definitions/ImageSummary\"\n              Containers:\n                type: \"array\"\n                items:\n                  $ref: \"#/definitions/ContainerSummary\"\n              Volumes:\n                type: \"array\"\n                items:\n                  $ref: \"#/definitions/Volume\"\n              BuildCache:\n                type: \"array\"\n                items:\n                  $ref: \"#/definitions/BuildCache\"\n            example:\n              LayersSize: 1092588\n              Images:\n                -\n                  Id: \"sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749\"\n                  ParentId: \"\"\n                  RepoTags:\n                    - \"busybox:latest\"\n                  RepoDigests:\n                    - \"busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6\"\n                  Created: 1466724217\n                  Size: 1092588\n                  SharedSize: 0\n                  Labels: {}\n                  Containers: 1\n              Containers:\n                -\n                  Id: \"e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148\"\n                  Names:\n                    - \"/top\"\n                  Image: \"busybox\"\n                  ImageID: \"sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749\"\n                  Command: \"top\"\n                  Created: 1472592424\n                  Ports: []\n                  SizeRootFs: 1092588\n                  Labels: {}\n                  State: \"exited\"\n                  Status: \"Exited (0) 56 minutes ago\"\n                  HostConfig:\n                    NetworkMode: \"default\"\n                  NetworkSettings:\n                    Networks:\n                      bridge:\n                        IPAMConfig: null\n                        Links: null\n                        Aliases: null\n                        NetworkID: \"d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92\"\n                        EndpointID: \"8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a\"\n                        Gateway: \"172.18.0.1\"\n                        IPAddress: \"172.18.0.2\"\n                        IPPrefixLen: 16\n                        IPv6Gateway: \"\"\n                        GlobalIPv6Address: \"\"\n                        GlobalIPv6PrefixLen: 0\n                        MacAddress: \"02:42:ac:12:00:02\"\n                  Mounts: []\n              Volumes:\n                -\n                  Name: \"my-volume\"\n                  Driver: \"local\"\n                  Mountpoint: \"/var/lib/docker/volumes/my-volume/_data\"\n                  Labels: null\n                  Scope: \"local\"\n                  Options: null\n                  UsageData:\n                    Size: 10920104\n                    RefCount: 2\n              BuildCache:\n                -\n                  ID: \"hw53o5aio51xtltp5xjp8v7fx\"\n                  Parents: []\n                  Type: \"regular\"\n                  Description: \"pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0\"\n                  InUse: false\n                  Shared: true\n                  Size: 0\n                  CreatedAt: \"2021-06-28T13:31:01.474619385Z\"\n                  LastUsedAt: \"2021-07-07T22:02:32.738075951Z\"\n                  UsageCount: 26\n                -\n                  ID: \"ndlpt0hhvkqcdfkputsk4cq9c\"\n                  Parents: [\"ndlpt0hhvkqcdfkputsk4cq9c\"]\n                  Type: \"regular\"\n                  Description: \"mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \\\"true\\\";' > /etc/apt/apt.conf.d/keep-cache\"\n                  InUse: false\n                  Shared: true\n                  Size: 51\n                  CreatedAt: \"2021-06-28T13:31:03.002625487Z\"\n                  LastUsedAt: \"2021-07-07T22:02:32.773909517Z\"\n                  UsageCount: 26\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"type\"\n          in: \"query\"\n          description: |\n            Object types, for which to compute and return data.\n          type: \"array\"\n          collectionFormat: multi\n          items:\n            type: \"string\"\n            enum: [\"container\", \"image\", \"volume\", \"build-cache\"]\n      tags: [\"System\"]\n  /images/{name}/get:\n    get:\n      summary: \"Export an image\"\n      description: |\n        Get a tarball containing all images and metadata for a repository.\n\n        If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n        ### Image tarball format\n\n        An image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n        - `VERSION`: currently `1.0` - the file format version\n        - `json`: detailed layer information, similar to `docker inspect layer_id`\n        - `layer.tar`: A tarfile containing the filesystem changes in this layer\n\n        The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\n        If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n        ```json\n        {\n          \"hello-world\": {\n            \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n          }\n        }\n        ```\n      operationId: \"ImageGet\"\n      produces:\n        - \"application/x-tar\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"string\"\n            format: \"binary\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: \"Image name or ID\"\n          type: \"string\"\n          required: true\n        - name: \"platform\"\n          type: \"string\"\n          in: \"query\"\n          description: |\n            JSON encoded OCI platform describing a platform which will be used\n            to select a platform-specific image to be saved if the image is\n            multi-platform.\n            If not provided, the full multi-platform image will be saved.\n\n            Example: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n  /images/get:\n    get:\n      summary: \"Export several images\"\n      description: |\n        Get a tarball containing all images and metadata for several image\n        repositories.\n\n        For each value of the `names` parameter: if it is a specific name and\n        tag (e.g. `ubuntu:latest`), then only that image (and its parents) are\n        returned; if it is an image ID, similarly only that image (and its parents)\n        are returned and there would be no names referenced in the 'repositories'\n        file for this image ID.\n\n        For details on the format, see the [export image endpoint](#operation/ImageGet).\n      operationId: \"ImageGetAll\"\n      produces:\n        - \"application/x-tar\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"string\"\n            format: \"binary\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"names\"\n          in: \"query\"\n          description: \"Image names to filter by\"\n          type: \"array\"\n          items:\n            type: \"string\"\n      tags: [\"Image\"]\n  /images/load:\n    post:\n      summary: \"Import images\"\n      description: |\n        Load a set of images and tags into a repository.\n\n        For details on the format, see the [export image endpoint](#operation/ImageGet).\n      operationId: \"ImageLoad\"\n      consumes:\n        - \"application/x-tar\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"imagesTarball\"\n          in: \"body\"\n          description: \"Tar archive containing images\"\n          schema:\n            type: \"string\"\n            format: \"binary\"\n        - name: \"quiet\"\n          in: \"query\"\n          description: \"Suppress progress details during load.\"\n          type: \"boolean\"\n          default: false\n        - name: \"platform\"\n          type: \"string\"\n          in: \"query\"\n          description: |\n            JSON encoded OCI platform describing a platform which will be used\n            to select a platform-specific image to be load if the image is\n            multi-platform.\n            If not provided, the full multi-platform image will be loaded.\n\n            Example: `{\"os\": \"linux\", \"architecture\": \"arm\", \"variant\": \"v5\"}`\n      tags: [\"Image\"]\n  /containers/{id}/exec:\n    post:\n      summary: \"Create an exec instance\"\n      description: \"Run a command inside a running container.\"\n      operationId: \"ContainerExec\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/json\"\n      responses:\n        201:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/IDResponse\"\n        404:\n          description: \"no such container\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such container: c2ada9df5af8\"\n        409:\n          description: \"container is paused\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"execConfig\"\n          in: \"body\"\n          description: \"Exec configuration\"\n          schema:\n            type: \"object\"\n            title: \"ExecConfig\"\n            properties:\n              AttachStdin:\n                type: \"boolean\"\n                description: \"Attach to `stdin` of the exec command.\"\n              AttachStdout:\n                type: \"boolean\"\n                description: \"Attach to `stdout` of the exec command.\"\n              AttachStderr:\n                type: \"boolean\"\n                description: \"Attach to `stderr` of the exec command.\"\n              ConsoleSize:\n                type: \"array\"\n                description: \"Initial console size, as an `[height, width]` array.\"\n                x-nullable: true\n                minItems: 2\n                maxItems: 2\n                items:\n                  type: \"integer\"\n                  minimum: 0\n                example: [80, 64]\n              DetachKeys:\n                type: \"string\"\n                description: |\n                  Override the key sequence for detaching a container. Format is\n                  a single character `[a-Z]` or `ctrl-<value>` where `<value>`\n                  is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.\n              Tty:\n                type: \"boolean\"\n                description: \"Allocate a pseudo-TTY.\"\n              Env:\n                description: |\n                  A list of environment variables in the form `[\"VAR=value\", ...]`.\n                type: \"array\"\n                items:\n                  type: \"string\"\n              Cmd:\n                type: \"array\"\n                description: \"Command to run, as a string or array of strings.\"\n                items:\n                  type: \"string\"\n              Privileged:\n                type: \"boolean\"\n                description: \"Runs the exec process with extended privileges.\"\n                default: false\n              User:\n                type: \"string\"\n                description: |\n                  The user, and optionally, group to run the exec process inside\n                  the container. Format is one of: `user`, `user:group`, `uid`,\n                  or `uid:gid`.\n              WorkingDir:\n                type: \"string\"\n                description: |\n                  The working directory for the exec process inside the container.\n            example:\n              AttachStdin: false\n              AttachStdout: true\n              AttachStderr: true\n              DetachKeys: \"ctrl-p,ctrl-q\"\n              Tty: false\n              Cmd:\n                - \"date\"\n              Env:\n                - \"FOO=bar\"\n                - \"BAZ=quux\"\n          required: true\n        - name: \"id\"\n          in: \"path\"\n          description: \"ID or name of container\"\n          type: \"string\"\n          required: true\n      tags: [\"Exec\"]\n  /exec/{id}/start:\n    post:\n      summary: \"Start an exec instance\"\n      description: |\n        Starts a previously set up exec instance. If detach is true, this endpoint\n        returns immediately after starting the command. Otherwise, it sets up an\n        interactive session with the command.\n      operationId: \"ExecStart\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/vnd.docker.raw-stream\"\n        - \"application/vnd.docker.multiplexed-stream\"\n      responses:\n        200:\n          description: \"No error\"\n        404:\n          description: \"No such exec instance\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        409:\n          description: \"Container is stopped or paused\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"execStartConfig\"\n          in: \"body\"\n          schema:\n            type: \"object\"\n            title: \"ExecStartConfig\"\n            properties:\n              Detach:\n                type: \"boolean\"\n                description: \"Detach from the command.\"\n                example: false\n              Tty:\n                type: \"boolean\"\n                description: \"Allocate a pseudo-TTY.\"\n                example: true\n              ConsoleSize:\n                type: \"array\"\n                description: \"Initial console size, as an `[height, width]` array.\"\n                x-nullable: true\n                minItems: 2\n                maxItems: 2\n                items:\n                  type: \"integer\"\n                  minimum: 0\n                example: [80, 64]\n        - name: \"id\"\n          in: \"path\"\n          description: \"Exec instance ID\"\n          required: true\n          type: \"string\"\n      tags: [\"Exec\"]\n  /exec/{id}/resize:\n    post:\n      summary: \"Resize an exec instance\"\n      description: |\n        Resize the TTY session used by an exec instance. This endpoint only works\n        if `tty` was specified as part of creating and starting the exec instance.\n      operationId: \"ExecResize\"\n      responses:\n        200:\n          description: \"No error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"No such exec instance\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"Exec instance ID\"\n          required: true\n          type: \"string\"\n        - name: \"h\"\n          in: \"query\"\n          required: true\n          description: \"Height of the TTY session in characters\"\n          type: \"integer\"\n        - name: \"w\"\n          in: \"query\"\n          required: true\n          description: \"Width of the TTY session in characters\"\n          type: \"integer\"\n      tags: [\"Exec\"]\n  /exec/{id}/json:\n    get:\n      summary: \"Inspect an exec instance\"\n      description: \"Return low-level information about an exec instance.\"\n      operationId: \"ExecInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"object\"\n            title: \"ExecInspectResponse\"\n            properties:\n              CanRemove:\n                type: \"boolean\"\n              DetachKeys:\n                type: \"string\"\n              ID:\n                type: \"string\"\n              Running:\n                type: \"boolean\"\n              ExitCode:\n                type: \"integer\"\n              ProcessConfig:\n                $ref: \"#/definitions/ProcessConfig\"\n              OpenStdin:\n                type: \"boolean\"\n              OpenStderr:\n                type: \"boolean\"\n              OpenStdout:\n                type: \"boolean\"\n              ContainerID:\n                type: \"string\"\n              Pid:\n                type: \"integer\"\n                description: \"The system process ID for the exec process.\"\n          examples:\n            application/json:\n              CanRemove: false\n              ContainerID: \"b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126\"\n              DetachKeys: \"\"\n              ExitCode: 2\n              ID: \"f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b\"\n              OpenStderr: true\n              OpenStdin: true\n              OpenStdout: true\n              ProcessConfig:\n                arguments:\n                  - \"-c\"\n                  - \"exit 2\"\n                entrypoint: \"sh\"\n                privileged: false\n                tty: true\n                user: \"1000\"\n              Running: false\n              Pid: 42000\n        404:\n          description: \"No such exec instance\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"Exec instance ID\"\n          required: true\n          type: \"string\"\n      tags: [\"Exec\"]\n\n  /volumes:\n    get:\n      summary: \"List volumes\"\n      operationId: \"VolumeList\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"Summary volume data that matches the query\"\n          schema:\n            $ref: \"#/definitions/VolumeListResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            JSON encoded value of the filters (a `map[string][]string`) to\n            process on the volumes list. Available filters:\n\n            - `dangling=<boolean>` When set to `true` (or `1`), returns all\n               volumes that are not in use by a container. When set to `false`\n               (or `0`), only volumes that are in use by one or more\n               containers are returned.\n            - `driver=<volume-driver-name>` Matches volumes based on their driver.\n            - `label=<key>` or `label=<key>:<value>` Matches volumes based on\n               the presence of a `label` alone or a `label` and a value.\n            - `name=<volume-name>` Matches all or part of a volume name.\n          type: \"string\"\n          format: \"json\"\n      tags: [\"Volume\"]\n\n  /volumes/create:\n    post:\n      summary: \"Create a volume\"\n      operationId: \"VolumeCreate\"\n      consumes: [\"application/json\"]\n      produces: [\"application/json\"]\n      responses:\n        201:\n          description: \"The volume was created successfully\"\n          schema:\n            $ref: \"#/definitions/Volume\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"volumeConfig\"\n          in: \"body\"\n          required: true\n          description: \"Volume configuration\"\n          schema:\n            $ref: \"#/definitions/VolumeCreateOptions\"\n      tags: [\"Volume\"]\n\n  /volumes/{name}:\n    get:\n      summary: \"Inspect a volume\"\n      operationId: \"VolumeInspect\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            $ref: \"#/definitions/Volume\"\n        404:\n          description: \"No such volume\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          required: true\n          description: \"Volume name or ID\"\n          type: \"string\"\n      tags: [\"Volume\"]\n\n    put:\n      summary: |\n        \"Update a volume. Valid only for Swarm cluster volumes\"\n      operationId: \"VolumeUpdate\"\n      consumes: [\"application/json\"]\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such volume\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: \"The name or ID of the volume\"\n          type: \"string\"\n          required: true\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            # though the schema for is an object that contains only a\n            # ClusterVolumeSpec, wrapping the ClusterVolumeSpec in this object\n            # means that if, later on, we support things like changing the\n            # labels, we can do so without duplicating that information to the\n            # ClusterVolumeSpec.\n            type: \"object\"\n            description: \"Volume configuration\"\n            properties:\n              Spec:\n                $ref: \"#/definitions/ClusterVolumeSpec\"\n          description: |\n            The spec of the volume to update. Currently, only Availability may\n            change. All other fields must remain unchanged.\n        - name: \"version\"\n          in: \"query\"\n          description: |\n            The version number of the volume being updated. This is required to\n            avoid conflicting writes. Found in the volume's `ClusterVolume`\n            field.\n          type: \"integer\"\n          format: \"int64\"\n          required: true\n      tags: [\"Volume\"]\n\n    delete:\n      summary: \"Remove a volume\"\n      description: \"Instruct the driver to remove the volume.\"\n      operationId: \"VolumeDelete\"\n      responses:\n        204:\n          description: \"The volume was removed\"\n        404:\n          description: \"No such volume or volume driver\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        409:\n          description: \"Volume is in use and cannot be removed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          required: true\n          description: \"Volume name or ID\"\n          type: \"string\"\n        - name: \"force\"\n          in: \"query\"\n          description: \"Force the removal of the volume\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Volume\"]\n\n  /volumes/prune:\n    post:\n      summary: \"Delete unused volumes\"\n      produces:\n        - \"application/json\"\n      operationId: \"VolumePrune\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\n            Available filters:\n            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n            - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes.\n          type: \"string\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"object\"\n            title: \"VolumePruneResponse\"\n            properties:\n              VolumesDeleted:\n                description: \"Volumes that were deleted\"\n                type: \"array\"\n                items:\n                  type: \"string\"\n              SpaceReclaimed:\n                description: \"Disk space reclaimed in bytes\"\n                type: \"integer\"\n                format: \"int64\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Volume\"]\n  /networks:\n    get:\n      summary: \"List networks\"\n      description: |\n        Returns a list of networks. For details on the format, see the\n        [network inspect endpoint](#operation/NetworkInspect).\n\n        Note that it uses a different, smaller representation of a network than\n        inspecting a single network. For example, the list of containers attached\n        to the network is not propagated in API versions 1.28 and up.\n      operationId: \"NetworkList\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Network\"\n          examples:\n            application/json:\n              - Name: \"bridge\"\n                Id: \"f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566\"\n                Created: \"2016-10-19T06:21:00.416543526Z\"\n                Scope: \"local\"\n                Driver: \"bridge\"\n                EnableIPv4: true\n                EnableIPv6: false\n                Internal: false\n                Attachable: false\n                Ingress: false\n                IPAM:\n                  Driver: \"default\"\n                  Config:\n                    -\n                      Subnet: \"172.17.0.0/16\"\n                Options:\n                  com.docker.network.bridge.default_bridge: \"true\"\n                  com.docker.network.bridge.enable_icc: \"true\"\n                  com.docker.network.bridge.enable_ip_masquerade: \"true\"\n                  com.docker.network.bridge.host_binding_ipv4: \"0.0.0.0\"\n                  com.docker.network.bridge.name: \"docker0\"\n                  com.docker.network.driver.mtu: \"1500\"\n              - Name: \"none\"\n                Id: \"e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794\"\n                Created: \"0001-01-01T00:00:00Z\"\n                Scope: \"local\"\n                Driver: \"null\"\n                EnableIPv4: false\n                EnableIPv6: false\n                Internal: false\n                Attachable: false\n                Ingress: false\n                IPAM:\n                  Driver: \"default\"\n                  Config: []\n                Containers: {}\n                Options: {}\n              - Name: \"host\"\n                Id: \"13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e\"\n                Created: \"0001-01-01T00:00:00Z\"\n                Scope: \"local\"\n                Driver: \"host\"\n                EnableIPv4: false\n                EnableIPv6: false\n                Internal: false\n                Attachable: false\n                Ingress: false\n                IPAM:\n                  Driver: \"default\"\n                  Config: []\n                Containers: {}\n                Options: {}\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            JSON encoded value of the filters (a `map[string][]string`) to process\n            on the networks list.\n\n            Available filters:\n\n            - `dangling=<boolean>` When set to `true` (or `1`), returns all\n               networks that are not in use by a container. When set to `false`\n               (or `0`), only networks that are in use by one or more\n               containers are returned.\n            - `driver=<driver-name>` Matches a network's driver.\n            - `id=<network-id>` Matches all or part of a network ID.\n            - `label=<key>` or `label=<key>=<value>` of a network label.\n            - `name=<network-name>` Matches all or part of a network name.\n            - `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n            - `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n          type: \"string\"\n      tags: [\"Network\"]\n\n  /networks/{id}:\n    get:\n      summary: \"Inspect a network\"\n      operationId: \"NetworkInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            $ref: \"#/definitions/Network\"\n        404:\n          description: \"Network not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"Network ID or name\"\n          required: true\n          type: \"string\"\n        - name: \"verbose\"\n          in: \"query\"\n          description: \"Detailed inspect output for troubleshooting\"\n          type: \"boolean\"\n          default: false\n        - name: \"scope\"\n          in: \"query\"\n          description: \"Filter the network by scope (swarm, global, or local)\"\n          type: \"string\"\n      tags: [\"Network\"]\n\n    delete:\n      summary: \"Remove a network\"\n      operationId: \"NetworkDelete\"\n      responses:\n        204:\n          description: \"No error\"\n        403:\n          description: \"operation not supported for pre-defined networks\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such network\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"Network ID or name\"\n          required: true\n          type: \"string\"\n      tags: [\"Network\"]\n\n  /networks/create:\n    post:\n      summary: \"Create a network\"\n      operationId: \"NetworkCreate\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/json\"\n      responses:\n        201:\n          description: \"Network created successfully\"\n          schema:\n            $ref: \"#/definitions/NetworkCreateResponse\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        403:\n          description: |\n            Forbidden operation. This happens when trying to create a network named after a pre-defined network,\n            or when trying to create an overlay network on a daemon which is not part of a Swarm cluster.\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"plugin not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"networkConfig\"\n          in: \"body\"\n          description: \"Network configuration\"\n          required: true\n          schema:\n            type: \"object\"\n            title: \"NetworkCreateRequest\"\n            required: [\"Name\"]\n            properties:\n              Name:\n                description: \"The network's name.\"\n                type: \"string\"\n                example: \"my_network\"\n              Driver:\n                description: \"Name of the network driver plugin to use.\"\n                type: \"string\"\n                default: \"bridge\"\n                example: \"bridge\"\n              Scope:\n                description: |\n                  The level at which the network exists (e.g. `swarm` for cluster-wide\n                  or `local` for machine level).\n                type: \"string\"\n              Internal:\n                description: \"Restrict external access to the network.\"\n                type: \"boolean\"\n              Attachable:\n                description: |\n                  Globally scoped network is manually attachable by regular\n                  containers from workers in swarm mode.\n                type: \"boolean\"\n                example: true\n              Ingress:\n                description: |\n                  Ingress network is the network which provides the routing-mesh\n                  in swarm mode.\n                type: \"boolean\"\n                example: false\n              ConfigOnly:\n                description: |\n                  Creates a config-only network. Config-only networks are placeholder\n                  networks for network configurations to be used by other networks.\n                  Config-only networks cannot be used directly to run containers\n                  or services.\n                type: \"boolean\"\n                default: false\n                example: false\n              ConfigFrom:\n                description: |\n                  Specifies the source which will provide the configuration for\n                  this network. The specified network must be an existing\n                  config-only network; see ConfigOnly.\n                $ref: \"#/definitions/ConfigReference\"\n              IPAM:\n                description: \"Optional custom IP scheme for the network.\"\n                $ref: \"#/definitions/IPAM\"\n              EnableIPv4:\n                description: \"Enable IPv4 on the network.\"\n                type: \"boolean\"\n                example: true\n              EnableIPv6:\n                description: \"Enable IPv6 on the network.\"\n                type: \"boolean\"\n                example: true\n              Options:\n                description: \"Network specific options to be used by the drivers.\"\n                type: \"object\"\n                additionalProperties:\n                  type: \"string\"\n                example:\n                  com.docker.network.bridge.default_bridge: \"true\"\n                  com.docker.network.bridge.enable_icc: \"true\"\n                  com.docker.network.bridge.enable_ip_masquerade: \"true\"\n                  com.docker.network.bridge.host_binding_ipv4: \"0.0.0.0\"\n                  com.docker.network.bridge.name: \"docker0\"\n                  com.docker.network.driver.mtu: \"1500\"\n              Labels:\n                description: \"User-defined key/value metadata.\"\n                type: \"object\"\n                additionalProperties:\n                  type: \"string\"\n                example:\n                  com.example.some-label: \"some-value\"\n                  com.example.some-other-label: \"some-other-value\"\n      tags: [\"Network\"]\n\n  /networks/{id}/connect:\n    post:\n      summary: \"Connect a container to a network\"\n      description: \"The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container\"\n      operationId: \"NetworkConnect\"\n      consumes:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        403:\n          description: \"Operation forbidden\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"Network or container not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"Network ID or name\"\n          required: true\n          type: \"string\"\n        - name: \"container\"\n          in: \"body\"\n          required: true\n          schema:\n            type: \"object\"\n            title: \"NetworkConnectRequest\"\n            properties:\n              Container:\n                type: \"string\"\n                description: \"The ID or name of the container to connect to the network.\"\n              EndpointConfig:\n                $ref: \"#/definitions/EndpointSettings\"\n            example:\n              Container: \"3613f73ba0e4\"\n              EndpointConfig:\n                IPAMConfig:\n                  IPv4Address: \"172.24.56.89\"\n                  IPv6Address: \"2001:db8::5689\"\n                MacAddress: \"02:42:ac:12:05:02\"\n                Priority: 100\n      tags: [\"Network\"]\n\n  /networks/{id}/disconnect:\n    post:\n      summary: \"Disconnect a container from a network\"\n      operationId: \"NetworkDisconnect\"\n      consumes:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"No error\"\n        403:\n          description: \"Operation not supported for swarm scoped networks\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"Network or container not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"Network ID or name\"\n          required: true\n          type: \"string\"\n        - name: \"container\"\n          in: \"body\"\n          required: true\n          schema:\n            type: \"object\"\n            title: \"NetworkDisconnectRequest\"\n            properties:\n              Container:\n                type: \"string\"\n                description: |\n                  The ID or name of the container to disconnect from the network.\n              Force:\n                type: \"boolean\"\n                description: |\n                  Force the container to disconnect from the network.\n      tags: [\"Network\"]\n  /networks/prune:\n    post:\n      summary: \"Delete unused networks\"\n      produces:\n        - \"application/json\"\n      operationId: \"NetworkPrune\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\n            Available filters:\n            - `until=<timestamp>` Prune networks created before this timestamp. The `<timestamp>` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n            - `label` (`label=<key>`, `label=<key>=<value>`, `label!=<key>`, or `label!=<key>=<value>`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n          type: \"string\"\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"object\"\n            title: \"NetworkPruneResponse\"\n            properties:\n              NetworksDeleted:\n                description: \"Networks that were deleted\"\n                type: \"array\"\n                items:\n                  type: \"string\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Network\"]\n  /plugins:\n    get:\n      summary: \"List plugins\"\n      operationId: \"PluginList\"\n      description: \"Returns information about installed plugins.\"\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"No error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Plugin\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          type: \"string\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to\n            process on the plugin list.\n\n            Available filters:\n\n            - `capability=<capability name>`\n            - `enable=<true>|<false>`\n      tags: [\"Plugin\"]\n\n  /plugins/privileges:\n    get:\n      summary: \"Get plugin privileges\"\n      operationId: \"GetPluginPrivileges\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginPrivilege\"\n            example:\n              - Name: \"network\"\n                Description: \"\"\n                Value:\n                  - \"host\"\n              - Name: \"mount\"\n                Description: \"\"\n                Value:\n                  - \"/data\"\n              - Name: \"device\"\n                Description: \"\"\n                Value:\n                  - \"/dev/cpu_dma_latency\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"remote\"\n          in: \"query\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n      tags:\n        - \"Plugin\"\n\n  /plugins/pull:\n    post:\n      summary: \"Install a plugin\"\n      operationId: \"PluginPull\"\n      description: |\n        Pulls and installs a plugin. After the plugin is installed, it can be\n        enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n      produces:\n        - \"application/json\"\n      responses:\n        204:\n          description: \"no error\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"remote\"\n          in: \"query\"\n          description: |\n            Remote reference for plugin to install.\n\n            The `:latest` tag is optional, and is used as the default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"name\"\n          in: \"query\"\n          description: |\n            Local name for the pulled plugin.\n\n            The `:latest` tag is optional, and is used as the default if omitted.\n          required: false\n          type: \"string\"\n        - name: \"X-Registry-Auth\"\n          in: \"header\"\n          description: |\n            A base64url-encoded auth configuration to use when pulling a plugin\n            from a registry.\n\n            Refer to the [authentication section](#section/Authentication) for\n            details.\n          type: \"string\"\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginPrivilege\"\n            example:\n              - Name: \"network\"\n                Description: \"\"\n                Value:\n                  - \"host\"\n              - Name: \"mount\"\n                Description: \"\"\n                Value:\n                  - \"/data\"\n              - Name: \"device\"\n                Description: \"\"\n                Value:\n                  - \"/dev/cpu_dma_latency\"\n      tags: [\"Plugin\"]\n  /plugins/{name}/json:\n    get:\n      summary: \"Inspect a plugin\"\n      operationId: \"PluginInspect\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Plugin\"\n        404:\n          description: \"plugin is not installed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n      tags: [\"Plugin\"]\n  /plugins/{name}:\n    delete:\n      summary: \"Remove a plugin\"\n      operationId: \"PluginDelete\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Plugin\"\n        404:\n          description: \"plugin is not installed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"force\"\n          in: \"query\"\n          description: |\n            Disable the plugin before removing. This may result in issues if the\n            plugin is in use by a container.\n          type: \"boolean\"\n          default: false\n      tags: [\"Plugin\"]\n  /plugins/{name}/enable:\n    post:\n      summary: \"Enable a plugin\"\n      operationId: \"PluginEnable\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"plugin is not installed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"timeout\"\n          in: \"query\"\n          description: \"Set the HTTP client timeout (in seconds)\"\n          type: \"integer\"\n          default: 0\n      tags: [\"Plugin\"]\n  /plugins/{name}/disable:\n    post:\n      summary: \"Disable a plugin\"\n      operationId: \"PluginDisable\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"plugin is not installed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"force\"\n          in: \"query\"\n          description: |\n            Force disable a plugin even if still in use.\n          required: false\n          type: \"boolean\"\n      tags: [\"Plugin\"]\n  /plugins/{name}/upgrade:\n    post:\n      summary: \"Upgrade a plugin\"\n      operationId: \"PluginUpgrade\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"plugin not installed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"remote\"\n          in: \"query\"\n          description: |\n            Remote reference to upgrade to.\n\n            The `:latest` tag is optional, and is used as the default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"X-Registry-Auth\"\n          in: \"header\"\n          description: |\n            A base64url-encoded auth configuration to use when pulling a plugin\n            from a registry.\n\n            Refer to the [authentication section](#section/Authentication) for\n            details.\n          type: \"string\"\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/PluginPrivilege\"\n            example:\n              - Name: \"network\"\n                Description: \"\"\n                Value:\n                  - \"host\"\n              - Name: \"mount\"\n                Description: \"\"\n                Value:\n                  - \"/data\"\n              - Name: \"device\"\n                Description: \"\"\n                Value:\n                  - \"/dev/cpu_dma_latency\"\n      tags: [\"Plugin\"]\n  /plugins/create:\n    post:\n      summary: \"Create a plugin\"\n      operationId: \"PluginCreate\"\n      consumes:\n        - \"application/x-tar\"\n      responses:\n        204:\n          description: \"no error\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"query\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"tarContext\"\n          in: \"body\"\n          description: \"Path to tar containing plugin rootfs and manifest\"\n          schema:\n            type: \"string\"\n            format: \"binary\"\n      tags: [\"Plugin\"]\n  /plugins/{name}/push:\n    post:\n      summary: \"Push a plugin\"\n      operationId: \"PluginPush\"\n      description: |\n        Push a plugin to the registry.\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"plugin not installed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Plugin\"]\n  /plugins/{name}/set:\n    post:\n      summary: \"Configure a plugin\"\n      operationId: \"PluginSet\"\n      consumes:\n        - \"application/json\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: |\n            The name of the plugin. The `:latest` tag is optional, and is the\n            default if omitted.\n          required: true\n          type: \"string\"\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            type: \"array\"\n            items:\n              type: \"string\"\n            example: [\"DEBUG=1\"]\n      responses:\n        204:\n          description: \"No error\"\n        404:\n          description: \"Plugin not installed\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Plugin\"]\n  /nodes:\n    get:\n      summary: \"List nodes\"\n      operationId: \"NodeList\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Node\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          description: |\n            Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\n            Available filters:\n            - `id=<node id>`\n            - `label=<engine label>`\n            - `membership=`(`accepted`|`pending`)`\n            - `name=<node name>`\n            - `node.label=<node label>`\n            - `role=`(`manager`|`worker`)`\n          type: \"string\"\n      tags: [\"Node\"]\n  /nodes/{id}:\n    get:\n      summary: \"Inspect a node\"\n      operationId: \"NodeInspect\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Node\"\n        404:\n          description: \"no such node\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"The ID or name of the node\"\n          type: \"string\"\n          required: true\n      tags: [\"Node\"]\n    delete:\n      summary: \"Delete a node\"\n      operationId: \"NodeDelete\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"no such node\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"The ID or name of the node\"\n          type: \"string\"\n          required: true\n        - name: \"force\"\n          in: \"query\"\n          description: \"Force remove a node from the swarm\"\n          default: false\n          type: \"boolean\"\n      tags: [\"Node\"]\n  /nodes/{id}/update:\n    post:\n      summary: \"Update a node\"\n      operationId: \"NodeUpdate\"\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such node\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"The ID of the node\"\n          type: \"string\"\n          required: true\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            $ref: \"#/definitions/NodeSpec\"\n        - name: \"version\"\n          in: \"query\"\n          description: |\n            The version number of the node object being updated. This is required\n            to avoid conflicting writes.\n          type: \"integer\"\n          format: \"int64\"\n          required: true\n      tags: [\"Node\"]\n  /swarm:\n    get:\n      summary: \"Inspect swarm\"\n      operationId: \"SwarmInspect\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Swarm\"\n        404:\n          description: \"no such swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Swarm\"]\n  /swarm/init:\n    post:\n      summary: \"Initialize a new swarm\"\n      operationId: \"SwarmInit\"\n      produces:\n        - \"application/json\"\n        - \"text/plain\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            description: \"The node ID\"\n            type: \"string\"\n            example: \"7v2t30z9blmxuhnyo6s4cpenp\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is already part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"body\"\n          in: \"body\"\n          required: true\n          schema:\n            type: \"object\"\n            title: \"SwarmInitRequest\"\n            properties:\n              ListenAddr:\n                description: |\n                  Listen address used for inter-manager communication, as well\n                  as determining the networking interface used for the VXLAN\n                  Tunnel Endpoint (VTEP). This can either be an address/port\n                  combination in the form `192.168.1.1:4567`, or an interface\n                  followed by a port number, like `eth0:4567`. If the port number\n                  is omitted, the default swarm listening port is used.\n                type: \"string\"\n              AdvertiseAddr:\n                description: |\n                  Externally reachable address advertised to other nodes. This\n                  can either be an address/port combination in the form\n                  `192.168.1.1:4567`, or an interface followed by a port number,\n                  like `eth0:4567`. If the port number is omitted, the port\n                  number from the listen address is used. If `AdvertiseAddr` is\n                  not specified, it will be automatically detected when possible.\n                type: \"string\"\n              DataPathAddr:\n                description: |\n                  Address or interface to use for data path traffic (format:\n                  `<ip|interface>`), for example,  `192.168.1.1`, or an interface,\n                  like `eth0`. If `DataPathAddr` is unspecified, the same address\n                  as `AdvertiseAddr` is used.\n\n                  The `DataPathAddr` specifies the address that global scope\n                  network drivers will publish towards other  nodes in order to\n                  reach the containers running on this node. Using this parameter\n                  it is possible to separate the container data traffic from the\n                  management traffic of the cluster.\n                type: \"string\"\n              DataPathPort:\n                description: |\n                  DataPathPort specifies the data path port number for data traffic.\n                  Acceptable port range is 1024 to 49151.\n                  if no port is set or is set to 0, default port 4789 will be used.\n                type: \"integer\"\n                format: \"uint32\"\n              DefaultAddrPool:\n                description: |\n                  Default Address Pool specifies default subnet pools for global\n                  scope networks.\n                type: \"array\"\n                items:\n                  type: \"string\"\n                  example: [\"10.10.0.0/16\", \"20.20.0.0/16\"]\n              ForceNewCluster:\n                description: \"Force creation of a new swarm.\"\n                type: \"boolean\"\n              SubnetSize:\n                description: |\n                  SubnetSize specifies the subnet size of the networks created\n                  from the default subnet pool.\n                type: \"integer\"\n                format: \"uint32\"\n              Spec:\n                $ref: \"#/definitions/SwarmSpec\"\n            example:\n              ListenAddr: \"0.0.0.0:2377\"\n              AdvertiseAddr: \"192.168.1.1:2377\"\n              DataPathPort: 4789\n              DefaultAddrPool: [\"10.10.0.0/8\", \"20.20.0.0/8\"]\n              SubnetSize: 24\n              ForceNewCluster: false\n              Spec:\n                Orchestration: {}\n                Raft: {}\n                Dispatcher: {}\n                CAConfig: {}\n                EncryptionConfig:\n                  AutoLockManagers: false\n      tags: [\"Swarm\"]\n  /swarm/join:\n    post:\n      summary: \"Join an existing swarm\"\n      operationId: \"SwarmJoin\"\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is already part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"body\"\n          in: \"body\"\n          required: true\n          schema:\n            type: \"object\"\n            title: \"SwarmJoinRequest\"\n            properties:\n              ListenAddr:\n                description: |\n                  Listen address used for inter-manager communication if the node\n                  gets promoted to manager, as well as determining the networking\n                  interface used for the VXLAN Tunnel Endpoint (VTEP).\n                type: \"string\"\n              AdvertiseAddr:\n                description: |\n                  Externally reachable address advertised to other nodes. This\n                  can either be an address/port combination in the form\n                  `192.168.1.1:4567`, or an interface followed by a port number,\n                  like `eth0:4567`. If the port number is omitted, the port\n                  number from the listen address is used. If `AdvertiseAddr` is\n                  not specified, it will be automatically detected when possible.\n                type: \"string\"\n              DataPathAddr:\n                description: |\n                  Address or interface to use for data path traffic (format:\n                  `<ip|interface>`), for example,  `192.168.1.1`, or an interface,\n                  like `eth0`. If `DataPathAddr` is unspecified, the same address\n                  as `AdvertiseAddr` is used.\n\n                  The `DataPathAddr` specifies the address that global scope\n                  network drivers will publish towards other nodes in order to\n                  reach the containers running on this node. Using this parameter\n                  it is possible to separate the container data traffic from the\n                  management traffic of the cluster.\n\n                type: \"string\"\n              RemoteAddrs:\n                description: |\n                  Addresses of manager nodes already participating in the swarm.\n                type: \"array\"\n                items:\n                  type: \"string\"\n              JoinToken:\n                description: \"Secret token for joining this swarm.\"\n                type: \"string\"\n            example:\n              ListenAddr: \"0.0.0.0:2377\"\n              AdvertiseAddr: \"192.168.1.1:2377\"\n              DataPathAddr: \"192.168.1.1\"\n              RemoteAddrs:\n                - \"node1:2377\"\n              JoinToken: \"SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2\"\n      tags: [\"Swarm\"]\n  /swarm/leave:\n    post:\n      summary: \"Leave a swarm\"\n      operationId: \"SwarmLeave\"\n      responses:\n        200:\n          description: \"no error\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"force\"\n          description: |\n            Force leave swarm, even if this is the last manager or that it will\n            break the cluster.\n          in: \"query\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Swarm\"]\n  /swarm/update:\n    post:\n      summary: \"Update a swarm\"\n      operationId: \"SwarmUpdate\"\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"body\"\n          in: \"body\"\n          required: true\n          schema:\n            $ref: \"#/definitions/SwarmSpec\"\n        - name: \"version\"\n          in: \"query\"\n          description: |\n            The version number of the swarm object being updated. This is\n            required to avoid conflicting writes.\n          type: \"integer\"\n          format: \"int64\"\n          required: true\n        - name: \"rotateWorkerToken\"\n          in: \"query\"\n          description: \"Rotate the worker join token.\"\n          type: \"boolean\"\n          default: false\n        - name: \"rotateManagerToken\"\n          in: \"query\"\n          description: \"Rotate the manager join token.\"\n          type: \"boolean\"\n          default: false\n        - name: \"rotateManagerUnlockKey\"\n          in: \"query\"\n          description: \"Rotate the manager unlock key.\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Swarm\"]\n  /swarm/unlockkey:\n    get:\n      summary: \"Get the unlock key\"\n      operationId: \"SwarmUnlockkey\"\n      consumes:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"object\"\n            title: \"UnlockKeyResponse\"\n            properties:\n              UnlockKey:\n                description: \"The swarm's unlock key.\"\n                type: \"string\"\n            example:\n              UnlockKey: \"SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Swarm\"]\n  /swarm/unlock:\n    post:\n      summary: \"Unlock a locked manager\"\n      operationId: \"SwarmUnlock\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/json\"\n      parameters:\n        - name: \"body\"\n          in: \"body\"\n          required: true\n          schema:\n            type: \"object\"\n            title: \"SwarmUnlockRequest\"\n            properties:\n              UnlockKey:\n                description: \"The swarm's unlock key.\"\n                type: \"string\"\n            example:\n              UnlockKey: \"SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8\"\n      responses:\n        200:\n          description: \"no error\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Swarm\"]\n  /services:\n    get:\n      summary: \"List services\"\n      operationId: \"ServiceList\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Service\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          type: \"string\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to\n            process on the services list.\n\n            Available filters:\n\n            - `id=<service id>`\n            - `label=<service label>`\n            - `mode=[\"replicated\"|\"global\"]`\n            - `name=<service name>`\n        - name: \"status\"\n          in: \"query\"\n          type: \"boolean\"\n          description: |\n            Include service status, with count of running and desired tasks.\n      tags: [\"Service\"]\n  /services/create:\n    post:\n      summary: \"Create a service\"\n      operationId: \"ServiceCreate\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/json\"\n      responses:\n        201:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/ServiceCreateResponse\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        403:\n          description: \"network is not eligible for services\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        409:\n          description: \"name conflicts with an existing service\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"body\"\n          in: \"body\"\n          required: true\n          schema:\n            allOf:\n              - $ref: \"#/definitions/ServiceSpec\"\n              - type: \"object\"\n                example:\n                  Name: \"web\"\n                  TaskTemplate:\n                    ContainerSpec:\n                      Image: \"nginx:alpine\"\n                      Mounts:\n                        -\n                          ReadOnly: true\n                          Source: \"web-data\"\n                          Target: \"/usr/share/nginx/html\"\n                          Type: \"volume\"\n                          VolumeOptions:\n                            DriverConfig: {}\n                            Labels:\n                              com.example.something: \"something-value\"\n                      Hosts: [\"10.10.10.10 host1\", \"ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2\"]\n                      User: \"33\"\n                      DNSConfig:\n                        Nameservers: [\"8.8.8.8\"]\n                        Search: [\"example.org\"]\n                        Options: [\"timeout:3\"]\n                      Secrets:\n                        -\n                          File:\n                            Name: \"www.example.org.key\"\n                            UID: \"33\"\n                            GID: \"33\"\n                            Mode: 384\n                          SecretID: \"fpjqlhnwb19zds35k8wn80lq9\"\n                          SecretName: \"example_org_domain_key\"\n                      OomScoreAdj: 0\n                    LogDriver:\n                      Name: \"json-file\"\n                      Options:\n                        max-file: \"3\"\n                        max-size: \"10M\"\n                    Placement: {}\n                    Resources:\n                      Limits:\n                        MemoryBytes: 104857600\n                      Reservations: {}\n                    RestartPolicy:\n                      Condition: \"on-failure\"\n                      Delay: 10000000000\n                      MaxAttempts: 10\n                  Mode:\n                    Replicated:\n                      Replicas: 4\n                  UpdateConfig:\n                    Parallelism: 2\n                    Delay: 1000000000\n                    FailureAction: \"pause\"\n                    Monitor: 15000000000\n                    MaxFailureRatio: 0.15\n                  RollbackConfig:\n                    Parallelism: 1\n                    Delay: 1000000000\n                    FailureAction: \"pause\"\n                    Monitor: 15000000000\n                    MaxFailureRatio: 0.15\n                  EndpointSpec:\n                    Ports:\n                      -\n                        Protocol: \"tcp\"\n                        PublishedPort: 8080\n                        TargetPort: 80\n                  Labels:\n                    foo: \"bar\"\n        - name: \"X-Registry-Auth\"\n          in: \"header\"\n          description: |\n            A base64url-encoded auth configuration for pulling from private\n            registries.\n\n            Refer to the [authentication section](#section/Authentication) for\n            details.\n          type: \"string\"\n      tags: [\"Service\"]\n  /services/{id}:\n    get:\n      summary: \"Inspect a service\"\n      operationId: \"ServiceInspect\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Service\"\n        404:\n          description: \"no such service\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"ID or name of service.\"\n          required: true\n          type: \"string\"\n        - name: \"insertDefaults\"\n          in: \"query\"\n          description: \"Fill empty fields with default values.\"\n          type: \"boolean\"\n          default: false\n      tags: [\"Service\"]\n    delete:\n      summary: \"Delete a service\"\n      operationId: \"ServiceDelete\"\n      responses:\n        200:\n          description: \"no error\"\n        404:\n          description: \"no such service\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"ID or name of service.\"\n          required: true\n          type: \"string\"\n      tags: [\"Service\"]\n  /services/{id}/update:\n    post:\n      summary: \"Update a service\"\n      operationId: \"ServiceUpdate\"\n      consumes: [\"application/json\"]\n      produces: [\"application/json\"]\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/ServiceUpdateResponse\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such service\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"ID or name of service.\"\n          required: true\n          type: \"string\"\n        - name: \"body\"\n          in: \"body\"\n          required: true\n          schema:\n            allOf:\n              - $ref: \"#/definitions/ServiceSpec\"\n              - type: \"object\"\n                example:\n                  Name: \"top\"\n                  TaskTemplate:\n                    ContainerSpec:\n                      Image: \"busybox\"\n                      Args:\n                        - \"top\"\n                      OomScoreAdj: 0\n                    Resources:\n                      Limits: {}\n                      Reservations: {}\n                    RestartPolicy:\n                      Condition: \"any\"\n                      MaxAttempts: 0\n                    Placement: {}\n                    ForceUpdate: 0\n                  Mode:\n                    Replicated:\n                      Replicas: 1\n                  UpdateConfig:\n                    Parallelism: 2\n                    Delay: 1000000000\n                    FailureAction: \"pause\"\n                    Monitor: 15000000000\n                    MaxFailureRatio: 0.15\n                  RollbackConfig:\n                    Parallelism: 1\n                    Delay: 1000000000\n                    FailureAction: \"pause\"\n                    Monitor: 15000000000\n                    MaxFailureRatio: 0.15\n                  EndpointSpec:\n                    Mode: \"vip\"\n\n        - name: \"version\"\n          in: \"query\"\n          description: |\n            The version number of the service object being updated. This is\n            required to avoid conflicting writes.\n            This version number should be the value as currently set on the\n            service *before* the update. You can find the current version by\n            calling `GET /services/{id}`\n          required: true\n          type: \"integer\"\n        - name: \"registryAuthFrom\"\n          in: \"query\"\n          description: |\n            If the `X-Registry-Auth` header is not specified, this parameter\n            indicates where to find registry authorization credentials.\n          type: \"string\"\n          enum: [\"spec\", \"previous-spec\"]\n          default: \"spec\"\n        - name: \"rollback\"\n          in: \"query\"\n          description: |\n            Set to this parameter to `previous` to cause a server-side rollback\n            to the previous service spec. The supplied spec will be ignored in\n            this case.\n          type: \"string\"\n        - name: \"X-Registry-Auth\"\n          in: \"header\"\n          description: |\n            A base64url-encoded auth configuration for pulling from private\n            registries.\n\n            Refer to the [authentication section](#section/Authentication) for\n            details.\n          type: \"string\"\n\n      tags: [\"Service\"]\n  /services/{id}/logs:\n    get:\n      summary: \"Get service logs\"\n      description: |\n        Get `stdout` and `stderr` logs from a service. See also\n        [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n        **Note**: This endpoint works only for services with the `local`,\n        `json-file` or `journald` logging drivers.\n      produces:\n        - \"application/vnd.docker.raw-stream\"\n        - \"application/vnd.docker.multiplexed-stream\"\n      operationId: \"ServiceLogs\"\n      responses:\n        200:\n          description: \"logs returned as a stream in response body\"\n          schema:\n            type: \"string\"\n            format: \"binary\"\n        404:\n          description: \"no such service\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such service: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID or name of the service\"\n          type: \"string\"\n        - name: \"details\"\n          in: \"query\"\n          description: \"Show service context and extra details provided to logs.\"\n          type: \"boolean\"\n          default: false\n        - name: \"follow\"\n          in: \"query\"\n          description: \"Keep connection after returning logs.\"\n          type: \"boolean\"\n          default: false\n        - name: \"stdout\"\n          in: \"query\"\n          description: \"Return logs from `stdout`\"\n          type: \"boolean\"\n          default: false\n        - name: \"stderr\"\n          in: \"query\"\n          description: \"Return logs from `stderr`\"\n          type: \"boolean\"\n          default: false\n        - name: \"since\"\n          in: \"query\"\n          description: \"Only return logs since this time, as a UNIX timestamp\"\n          type: \"integer\"\n          default: 0\n        - name: \"timestamps\"\n          in: \"query\"\n          description: \"Add timestamps to every log line\"\n          type: \"boolean\"\n          default: false\n        - name: \"tail\"\n          in: \"query\"\n          description: |\n            Only return this number of log lines from the end of the logs.\n            Specify as an integer or `all` to output all log lines.\n          type: \"string\"\n          default: \"all\"\n      tags: [\"Service\"]\n  /tasks:\n    get:\n      summary: \"List tasks\"\n      operationId: \"TaskList\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Task\"\n            example:\n              - ID: \"0kzzo1i0y4jz6027t0k7aezc7\"\n                Version:\n                  Index: 71\n                CreatedAt: \"2016-06-07T21:07:31.171892745Z\"\n                UpdatedAt: \"2016-06-07T21:07:31.376370513Z\"\n                Spec:\n                  ContainerSpec:\n                    Image: \"redis\"\n                  Resources:\n                    Limits: {}\n                    Reservations: {}\n                  RestartPolicy:\n                    Condition: \"any\"\n                    MaxAttempts: 0\n                  Placement: {}\n                ServiceID: \"9mnpnzenvg8p8tdbtq4wvbkcz\"\n                Slot: 1\n                NodeID: \"60gvrl6tm78dmak4yl7srz94v\"\n                Status:\n                  Timestamp: \"2016-06-07T21:07:31.290032978Z\"\n                  State: \"running\"\n                  Message: \"started\"\n                  ContainerStatus:\n                    ContainerID: \"e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035\"\n                    PID: 677\n                DesiredState: \"running\"\n                NetworksAttachments:\n                  - Network:\n                      ID: \"4qvuz4ko70xaltuqbt8956gd1\"\n                      Version:\n                        Index: 18\n                      CreatedAt: \"2016-06-07T20:31:11.912919752Z\"\n                      UpdatedAt: \"2016-06-07T21:07:29.955277358Z\"\n                      Spec:\n                        Name: \"ingress\"\n                        Labels:\n                          com.docker.swarm.internal: \"true\"\n                        DriverConfiguration: {}\n                        IPAMOptions:\n                          Driver: {}\n                          Configs:\n                            - Subnet: \"10.255.0.0/16\"\n                              Gateway: \"10.255.0.1\"\n                      DriverState:\n                        Name: \"overlay\"\n                        Options:\n                          com.docker.network.driver.overlay.vxlanid_list: \"256\"\n                      IPAMOptions:\n                        Driver:\n                          Name: \"default\"\n                        Configs:\n                          - Subnet: \"10.255.0.0/16\"\n                            Gateway: \"10.255.0.1\"\n                    Addresses:\n                      - \"10.255.0.10/16\"\n              - ID: \"1yljwbmlr8er2waf8orvqpwms\"\n                Version:\n                  Index: 30\n                CreatedAt: \"2016-06-07T21:07:30.019104782Z\"\n                UpdatedAt: \"2016-06-07T21:07:30.231958098Z\"\n                Name: \"hopeful_cori\"\n                Spec:\n                  ContainerSpec:\n                    Image: \"redis\"\n                  Resources:\n                    Limits: {}\n                    Reservations: {}\n                  RestartPolicy:\n                    Condition: \"any\"\n                    MaxAttempts: 0\n                  Placement: {}\n                ServiceID: \"9mnpnzenvg8p8tdbtq4wvbkcz\"\n                Slot: 1\n                NodeID: \"60gvrl6tm78dmak4yl7srz94v\"\n                Status:\n                  Timestamp: \"2016-06-07T21:07:30.202183143Z\"\n                  State: \"shutdown\"\n                  Message: \"shutdown\"\n                  ContainerStatus:\n                    ContainerID: \"1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213\"\n                DesiredState: \"shutdown\"\n                NetworksAttachments:\n                  - Network:\n                      ID: \"4qvuz4ko70xaltuqbt8956gd1\"\n                      Version:\n                        Index: 18\n                      CreatedAt: \"2016-06-07T20:31:11.912919752Z\"\n                      UpdatedAt: \"2016-06-07T21:07:29.955277358Z\"\n                      Spec:\n                        Name: \"ingress\"\n                        Labels:\n                          com.docker.swarm.internal: \"true\"\n                        DriverConfiguration: {}\n                        IPAMOptions:\n                          Driver: {}\n                          Configs:\n                            - Subnet: \"10.255.0.0/16\"\n                              Gateway: \"10.255.0.1\"\n                      DriverState:\n                        Name: \"overlay\"\n                        Options:\n                          com.docker.network.driver.overlay.vxlanid_list: \"256\"\n                      IPAMOptions:\n                        Driver:\n                          Name: \"default\"\n                        Configs:\n                          - Subnet: \"10.255.0.0/16\"\n                            Gateway: \"10.255.0.1\"\n                    Addresses:\n                      - \"10.255.0.5/16\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          type: \"string\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to\n            process on the tasks list.\n\n            Available filters:\n\n            - `desired-state=(running | shutdown | accepted)`\n            - `id=<task id>`\n            - `label=key` or `label=\"key=value\"`\n            - `name=<task name>`\n            - `node=<node id or name>`\n            - `service=<service name>`\n      tags: [\"Task\"]\n  /tasks/{id}:\n    get:\n      summary: \"Inspect a task\"\n      operationId: \"TaskInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Task\"\n        404:\n          description: \"no such task\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"ID of the task\"\n          required: true\n          type: \"string\"\n      tags: [\"Task\"]\n  /tasks/{id}/logs:\n    get:\n      summary: \"Get task logs\"\n      description: |\n        Get `stdout` and `stderr` logs from a task.\n        See also [`/containers/{id}/logs`](#operation/ContainerLogs).\n\n        **Note**: This endpoint works only for services with the `local`,\n        `json-file` or `journald` logging drivers.\n      operationId: \"TaskLogs\"\n      produces:\n        - \"application/vnd.docker.raw-stream\"\n        - \"application/vnd.docker.multiplexed-stream\"\n      responses:\n        200:\n          description: \"logs returned as a stream in response body\"\n          schema:\n            type: \"string\"\n            format: \"binary\"\n        404:\n          description: \"no such task\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such task: c2ada9df5af8\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          description: \"ID of the task\"\n          type: \"string\"\n        - name: \"details\"\n          in: \"query\"\n          description: \"Show task context and extra details provided to logs.\"\n          type: \"boolean\"\n          default: false\n        - name: \"follow\"\n          in: \"query\"\n          description: \"Keep connection after returning logs.\"\n          type: \"boolean\"\n          default: false\n        - name: \"stdout\"\n          in: \"query\"\n          description: \"Return logs from `stdout`\"\n          type: \"boolean\"\n          default: false\n        - name: \"stderr\"\n          in: \"query\"\n          description: \"Return logs from `stderr`\"\n          type: \"boolean\"\n          default: false\n        - name: \"since\"\n          in: \"query\"\n          description: \"Only return logs since this time, as a UNIX timestamp\"\n          type: \"integer\"\n          default: 0\n        - name: \"timestamps\"\n          in: \"query\"\n          description: \"Add timestamps to every log line\"\n          type: \"boolean\"\n          default: false\n        - name: \"tail\"\n          in: \"query\"\n          description: |\n            Only return this number of log lines from the end of the logs.\n            Specify as an integer or `all` to output all log lines.\n          type: \"string\"\n          default: \"all\"\n      tags: [\"Task\"]\n  /secrets:\n    get:\n      summary: \"List secrets\"\n      operationId: \"SecretList\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Secret\"\n            example:\n              - ID: \"blt1owaxmitz71s9v5zh81zun\"\n                Version:\n                  Index: 85\n                CreatedAt: \"2017-07-20T13:55:28.678958722Z\"\n                UpdatedAt: \"2017-07-20T13:55:28.678958722Z\"\n                Spec:\n                  Name: \"mysql-passwd\"\n                  Labels:\n                    some.label: \"some.value\"\n                  Driver:\n                    Name: \"secret-bucket\"\n                    Options:\n                      OptionA: \"value for driver option A\"\n                      OptionB: \"value for driver option B\"\n              - ID: \"ktnbjxoalbkvbvedmg1urrz8h\"\n                Version:\n                  Index: 11\n                CreatedAt: \"2016-11-05T01:20:17.327670065Z\"\n                UpdatedAt: \"2016-11-05T01:20:17.327670065Z\"\n                Spec:\n                  Name: \"app-dev.crt\"\n                  Labels:\n                    foo: \"bar\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          type: \"string\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to\n            process on the secrets list.\n\n            Available filters:\n\n            - `id=<secret id>`\n            - `label=<key> or label=<key>=value`\n            - `name=<secret name>`\n            - `names=<secret name>`\n      tags: [\"Secret\"]\n  /secrets/create:\n    post:\n      summary: \"Create a secret\"\n      operationId: \"SecretCreate\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/json\"\n      responses:\n        201:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/IDResponse\"\n        409:\n          description: \"name conflicts with an existing object\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            allOf:\n              - $ref: \"#/definitions/SecretSpec\"\n              - type: \"object\"\n                example:\n                  Name: \"app-key.crt\"\n                  Labels:\n                    foo: \"bar\"\n                  Data: \"VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==\"\n                  Driver:\n                    Name: \"secret-bucket\"\n                    Options:\n                      OptionA: \"value for driver option A\"\n                      OptionB: \"value for driver option B\"\n      tags: [\"Secret\"]\n  /secrets/{id}:\n    get:\n      summary: \"Inspect a secret\"\n      operationId: \"SecretInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Secret\"\n          examples:\n            application/json:\n              ID: \"ktnbjxoalbkvbvedmg1urrz8h\"\n              Version:\n                Index: 11\n              CreatedAt: \"2016-11-05T01:20:17.327670065Z\"\n              UpdatedAt: \"2016-11-05T01:20:17.327670065Z\"\n              Spec:\n                Name: \"app-dev.crt\"\n                Labels:\n                  foo: \"bar\"\n                Driver:\n                  Name: \"secret-bucket\"\n                  Options:\n                    OptionA: \"value for driver option A\"\n                    OptionB: \"value for driver option B\"\n\n        404:\n          description: \"secret not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          type: \"string\"\n          description: \"ID of the secret\"\n      tags: [\"Secret\"]\n    delete:\n      summary: \"Delete a secret\"\n      operationId: \"SecretDelete\"\n      produces:\n        - \"application/json\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"secret not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          type: \"string\"\n          description: \"ID of the secret\"\n      tags: [\"Secret\"]\n  /secrets/{id}/update:\n    post:\n      summary: \"Update a Secret\"\n      operationId: \"SecretUpdate\"\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such secret\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"The ID or name of the secret\"\n          type: \"string\"\n          required: true\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            $ref: \"#/definitions/SecretSpec\"\n          description: |\n            The spec of the secret to update. Currently, only the Labels field\n            can be updated. All other fields must remain unchanged from the\n            [SecretInspect endpoint](#operation/SecretInspect) response values.\n        - name: \"version\"\n          in: \"query\"\n          description: |\n            The version number of the secret object being updated. This is\n            required to avoid conflicting writes.\n          type: \"integer\"\n          format: \"int64\"\n          required: true\n      tags: [\"Secret\"]\n  /configs:\n    get:\n      summary: \"List configs\"\n      operationId: \"ConfigList\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            type: \"array\"\n            items:\n              $ref: \"#/definitions/Config\"\n            example:\n              - ID: \"ktnbjxoalbkvbvedmg1urrz8h\"\n                Version:\n                  Index: 11\n                CreatedAt: \"2016-11-05T01:20:17.327670065Z\"\n                UpdatedAt: \"2016-11-05T01:20:17.327670065Z\"\n                Spec:\n                  Name: \"server.conf\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"filters\"\n          in: \"query\"\n          type: \"string\"\n          description: |\n            A JSON encoded value of the filters (a `map[string][]string`) to\n            process on the configs list.\n\n            Available filters:\n\n            - `id=<config id>`\n            - `label=<key> or label=<key>=value`\n            - `name=<config name>`\n            - `names=<config name>`\n      tags: [\"Config\"]\n  /configs/create:\n    post:\n      summary: \"Create a config\"\n      operationId: \"ConfigCreate\"\n      consumes:\n        - \"application/json\"\n      produces:\n        - \"application/json\"\n      responses:\n        201:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/IDResponse\"\n        409:\n          description: \"name conflicts with an existing object\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            allOf:\n              - $ref: \"#/definitions/ConfigSpec\"\n              - type: \"object\"\n                example:\n                  Name: \"server.conf\"\n                  Labels:\n                    foo: \"bar\"\n                  Data: \"VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==\"\n      tags: [\"Config\"]\n  /configs/{id}:\n    get:\n      summary: \"Inspect a config\"\n      operationId: \"ConfigInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"no error\"\n          schema:\n            $ref: \"#/definitions/Config\"\n          examples:\n            application/json:\n              ID: \"ktnbjxoalbkvbvedmg1urrz8h\"\n              Version:\n                Index: 11\n              CreatedAt: \"2016-11-05T01:20:17.327670065Z\"\n              UpdatedAt: \"2016-11-05T01:20:17.327670065Z\"\n              Spec:\n                Name: \"app-dev.crt\"\n        404:\n          description: \"config not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          type: \"string\"\n          description: \"ID of the config\"\n      tags: [\"Config\"]\n    delete:\n      summary: \"Delete a config\"\n      operationId: \"ConfigDelete\"\n      produces:\n        - \"application/json\"\n      responses:\n        204:\n          description: \"no error\"\n        404:\n          description: \"config not found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          required: true\n          type: \"string\"\n          description: \"ID of the config\"\n      tags: [\"Config\"]\n  /configs/{id}/update:\n    post:\n      summary: \"Update a Config\"\n      operationId: \"ConfigUpdate\"\n      responses:\n        200:\n          description: \"no error\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        404:\n          description: \"no such config\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        503:\n          description: \"node is not part of a swarm\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"id\"\n          in: \"path\"\n          description: \"The ID or name of the config\"\n          type: \"string\"\n          required: true\n        - name: \"body\"\n          in: \"body\"\n          schema:\n            $ref: \"#/definitions/ConfigSpec\"\n          description: |\n            The spec of the config to update. Currently, only the Labels field\n            can be updated. All other fields must remain unchanged from the\n            [ConfigInspect endpoint](#operation/ConfigInspect) response values.\n        - name: \"version\"\n          in: \"query\"\n          description: |\n            The version number of the config object being updated. This is\n            required to avoid conflicting writes.\n          type: \"integer\"\n          format: \"int64\"\n          required: true\n      tags: [\"Config\"]\n  /distribution/{name}/json:\n    get:\n      summary: \"Get image information from the registry\"\n      description: |\n        Return image digest and platform information by contacting the registry.\n      operationId: \"DistributionInspect\"\n      produces:\n        - \"application/json\"\n      responses:\n        200:\n          description: \"descriptor and platform information\"\n          schema:\n            $ref: \"#/definitions/DistributionInspect\"\n        401:\n          description: \"Failed authentication or no image found\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n          examples:\n            application/json:\n              message: \"No such image: someimage (tag: latest)\"\n        500:\n          description: \"Server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      parameters:\n        - name: \"name\"\n          in: \"path\"\n          description: \"Image name or id\"\n          type: \"string\"\n          required: true\n      tags: [\"Distribution\"]\n  /session:\n    post:\n      summary: \"Initialize interactive session\"\n      description: |\n        Start a new interactive session with a server. Session allows server to\n        call back to the client for advanced capabilities.\n\n        ### Hijacking\n\n        This endpoint hijacks the HTTP connection to HTTP2 transport that allows\n        the client to expose gPRC services on that connection.\n\n        For example, the client sends this request to upgrade the connection:\n\n        ```\n        POST /session HTTP/1.1\n        Upgrade: h2c\n        Connection: Upgrade\n        ```\n\n        The Docker daemon responds with a `101 UPGRADED` response follow with\n        the raw stream:\n\n        ```\n        HTTP/1.1 101 UPGRADED\n        Connection: Upgrade\n        Upgrade: h2c\n        ```\n      operationId: \"Session\"\n      produces:\n        - \"application/vnd.docker.raw-stream\"\n      responses:\n        101:\n          description: \"no error, hijacking successful\"\n        400:\n          description: \"bad parameter\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n        500:\n          description: \"server error\"\n          schema:\n            $ref: \"#/definitions/ErrorResponse\"\n      tags: [\"Session\"]\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/blkiodev/blkio.go",
    "content": "package blkiodev // import \"github.com/docker/docker/api/types/blkiodev\"\n\nimport \"fmt\"\n\n// WeightDevice is a structure that holds device:weight pair\ntype WeightDevice struct {\n\tPath   string\n\tWeight uint16\n}\n\nfunc (w *WeightDevice) String() string {\n\treturn fmt.Sprintf(\"%s:%d\", w.Path, w.Weight)\n}\n\n// ThrottleDevice is a structure that holds device:rate_per_second pair\ntype ThrottleDevice struct {\n\tPath string\n\tRate uint64\n}\n\nfunc (t *ThrottleDevice) String() string {\n\treturn fmt.Sprintf(\"%s:%d\", t.Path, t.Rate)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/checkpoint/list.go",
    "content": "package checkpoint\n\n// Summary represents the details of a checkpoint when listing endpoints.\ntype Summary struct {\n\t// Name is the name of the checkpoint.\n\tName string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/checkpoint/options.go",
    "content": "package checkpoint\n\n// CreateOptions holds parameters to create a checkpoint from a container.\ntype CreateOptions struct {\n\tCheckpointID  string\n\tCheckpointDir string\n\tExit          bool\n}\n\n// ListOptions holds parameters to list checkpoints for a container.\ntype ListOptions struct {\n\tCheckpointDir string\n}\n\n// DeleteOptions holds parameters to delete a checkpoint from a container.\ntype DeleteOptions struct {\n\tCheckpointID  string\n\tCheckpointDir string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/client.go",
    "content": "package types // import \"github.com/docker/docker/api/types\"\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"io\"\n\t\"net\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/registry\"\n)\n\n// NewHijackedResponse initializes a [HijackedResponse] type.\nfunc NewHijackedResponse(conn net.Conn, mediaType string) HijackedResponse {\n\treturn HijackedResponse{Conn: conn, Reader: bufio.NewReader(conn), mediaType: mediaType}\n}\n\n// HijackedResponse holds connection information for a hijacked request.\ntype HijackedResponse struct {\n\tmediaType string\n\tConn      net.Conn\n\tReader    *bufio.Reader\n}\n\n// Close closes the hijacked connection and reader.\nfunc (h *HijackedResponse) Close() {\n\th.Conn.Close()\n}\n\n// MediaType let client know if HijackedResponse hold a raw or multiplexed stream.\n// returns false if HTTP Content-Type is not relevant, and container must be inspected\nfunc (h *HijackedResponse) MediaType() (string, bool) {\n\tif h.mediaType == \"\" {\n\t\treturn \"\", false\n\t}\n\treturn h.mediaType, true\n}\n\n// CloseWriter is an interface that implements structs\n// that close input streams to prevent from writing.\ntype CloseWriter interface {\n\tCloseWrite() error\n}\n\n// CloseWrite closes a readWriter for writing.\nfunc (h *HijackedResponse) CloseWrite() error {\n\tif conn, ok := h.Conn.(CloseWriter); ok {\n\t\treturn conn.CloseWrite()\n\t}\n\treturn nil\n}\n\n// ImageBuildOptions holds the information\n// necessary to build images.\ntype ImageBuildOptions struct {\n\tTags           []string\n\tSuppressOutput bool\n\tRemoteContext  string\n\tNoCache        bool\n\tRemove         bool\n\tForceRemove    bool\n\tPullParent     bool\n\tIsolation      container.Isolation\n\tCPUSetCPUs     string\n\tCPUSetMems     string\n\tCPUShares      int64\n\tCPUQuota       int64\n\tCPUPeriod      int64\n\tMemory         int64\n\tMemorySwap     int64\n\tCgroupParent   string\n\tNetworkMode    string\n\tShmSize        int64\n\tDockerfile     string\n\tUlimits        []*container.Ulimit\n\t// BuildArgs needs to be a *string instead of just a string so that\n\t// we can tell the difference between \"\" (empty string) and no value\n\t// at all (nil). See the parsing of buildArgs in\n\t// api/server/router/build/build_routes.go for even more info.\n\tBuildArgs   map[string]*string\n\tAuthConfigs map[string]registry.AuthConfig\n\tContext     io.Reader\n\tLabels      map[string]string\n\t// squash the resulting image's layers to the parent\n\t// preserves the original image and creates a new one from the parent with all\n\t// the changes applied to a single layer\n\tSquash bool\n\t// CacheFrom specifies images that are used for matching cache. Images\n\t// specified here do not need to have a valid parent chain to match cache.\n\tCacheFrom   []string\n\tSecurityOpt []string\n\tExtraHosts  []string // List of extra hosts\n\tTarget      string\n\tSessionID   string\n\tPlatform    string\n\t// Version specifies the version of the underlying builder to use\n\tVersion BuilderVersion\n\t// BuildID is an optional identifier that can be passed together with the\n\t// build request. The same identifier can be used to gracefully cancel the\n\t// build with the cancel request.\n\tBuildID string\n\t// Outputs defines configurations for exporting build results. Only supported\n\t// in BuildKit mode\n\tOutputs []ImageBuildOutput\n}\n\n// ImageBuildOutput defines configuration for exporting a build result\ntype ImageBuildOutput struct {\n\tType  string\n\tAttrs map[string]string\n}\n\n// BuilderVersion sets the version of underlying builder to use\ntype BuilderVersion string\n\nconst (\n\t// BuilderV1 is the first generation builder in docker daemon\n\tBuilderV1 BuilderVersion = \"1\"\n\t// BuilderBuildKit is builder based on moby/buildkit project\n\tBuilderBuildKit BuilderVersion = \"2\"\n)\n\n// ImageBuildResponse holds information\n// returned by a server after building\n// an image.\ntype ImageBuildResponse struct {\n\tBody   io.ReadCloser\n\tOSType string\n}\n\n// NodeListOptions holds parameters to list nodes with.\ntype NodeListOptions struct {\n\tFilters filters.Args\n}\n\n// NodeRemoveOptions holds parameters to remove nodes with.\ntype NodeRemoveOptions struct {\n\tForce bool\n}\n\n// ServiceCreateOptions contains the options to use when creating a service.\ntype ServiceCreateOptions struct {\n\t// EncodedRegistryAuth is the encoded registry authorization credentials to\n\t// use when updating the service.\n\t//\n\t// This field follows the format of the X-Registry-Auth header.\n\tEncodedRegistryAuth string\n\n\t// QueryRegistry indicates whether the service update requires\n\t// contacting a registry. A registry may be contacted to retrieve\n\t// the image digest and manifest, which in turn can be used to update\n\t// platform or other information about the service.\n\tQueryRegistry bool\n}\n\n// Values for RegistryAuthFrom in ServiceUpdateOptions\nconst (\n\tRegistryAuthFromSpec         = \"spec\"\n\tRegistryAuthFromPreviousSpec = \"previous-spec\"\n)\n\n// ServiceUpdateOptions contains the options to be used for updating services.\ntype ServiceUpdateOptions struct {\n\t// EncodedRegistryAuth is the encoded registry authorization credentials to\n\t// use when updating the service.\n\t//\n\t// This field follows the format of the X-Registry-Auth header.\n\tEncodedRegistryAuth string\n\n\t// TODO(stevvooe): Consider moving the version parameter of ServiceUpdate\n\t// into this field. While it does open API users up to racy writes, most\n\t// users may not need that level of consistency in practice.\n\n\t// RegistryAuthFrom specifies where to find the registry authorization\n\t// credentials if they are not given in EncodedRegistryAuth. Valid\n\t// values are \"spec\" and \"previous-spec\".\n\tRegistryAuthFrom string\n\n\t// Rollback indicates whether a server-side rollback should be\n\t// performed. When this is set, the provided spec will be ignored.\n\t// The valid values are \"previous\" and \"none\". An empty value is the\n\t// same as \"none\".\n\tRollback string\n\n\t// QueryRegistry indicates whether the service update requires\n\t// contacting a registry. A registry may be contacted to retrieve\n\t// the image digest and manifest, which in turn can be used to update\n\t// platform or other information about the service.\n\tQueryRegistry bool\n}\n\n// ServiceListOptions holds parameters to list services with.\ntype ServiceListOptions struct {\n\tFilters filters.Args\n\n\t// Status indicates whether the server should include the service task\n\t// count of running and desired tasks.\n\tStatus bool\n}\n\n// ServiceInspectOptions holds parameters related to the \"service inspect\"\n// operation.\ntype ServiceInspectOptions struct {\n\tInsertDefaults bool\n}\n\n// TaskListOptions holds parameters to list tasks with.\ntype TaskListOptions struct {\n\tFilters filters.Args\n}\n\n// PluginRemoveOptions holds parameters to remove plugins.\ntype PluginRemoveOptions struct {\n\tForce bool\n}\n\n// PluginEnableOptions holds parameters to enable plugins.\ntype PluginEnableOptions struct {\n\tTimeout int\n}\n\n// PluginDisableOptions holds parameters to disable plugins.\ntype PluginDisableOptions struct {\n\tForce bool\n}\n\n// PluginInstallOptions holds parameters to install a plugin.\ntype PluginInstallOptions struct {\n\tDisabled             bool\n\tAcceptAllPermissions bool\n\tRegistryAuth         string // RegistryAuth is the base64 encoded credentials for the registry\n\tRemoteRef            string // RemoteRef is the plugin name on the registry\n\n\t// PrivilegeFunc is a function that clients can supply to retry operations\n\t// after getting an authorization error. This function returns the registry\n\t// authentication header value in base64 encoded format, or an error if the\n\t// privilege request fails.\n\t//\n\t// For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig].\n\tPrivilegeFunc         func(context.Context) (string, error)\n\tAcceptPermissionsFunc func(context.Context, PluginPrivileges) (bool, error)\n\tArgs                  []string\n}\n\n// SwarmUnlockKeyResponse contains the response for Engine API:\n// GET /swarm/unlockkey\ntype SwarmUnlockKeyResponse struct {\n\t// UnlockKey is the unlock key in ASCII-armored format.\n\tUnlockKey string\n}\n\n// PluginCreateOptions hold all options to plugin create.\ntype PluginCreateOptions struct {\n\tRepoName string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/common/id_response.go",
    "content": "package common\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// IDResponse Response to an API call that returns just an Id\n// swagger:model IDResponse\ntype IDResponse struct {\n\n\t// The id of the newly created object.\n\t// Required: true\n\tID string `json:\"Id\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/change_type.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// ChangeType Kind of change\n//\n// Can be one of:\n//\n// - `0`: Modified (\"C\")\n// - `1`: Added (\"A\")\n// - `2`: Deleted (\"D\")\n//\n// swagger:model ChangeType\ntype ChangeType uint8\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/change_types.go",
    "content": "package container\n\nconst (\n\t// ChangeModify represents the modify operation.\n\tChangeModify ChangeType = 0\n\t// ChangeAdd represents the add operation.\n\tChangeAdd ChangeType = 1\n\t// ChangeDelete represents the delete operation.\n\tChangeDelete ChangeType = 2\n)\n\nfunc (ct ChangeType) String() string {\n\tswitch ct {\n\tcase ChangeModify:\n\t\treturn \"C\"\n\tcase ChangeAdd:\n\t\treturn \"A\"\n\tcase ChangeDelete:\n\t\treturn \"D\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/commit.go",
    "content": "package container\n\nimport \"github.com/docker/docker/api/types/common\"\n\n// CommitResponse response for the commit API call, containing the ID of the\n// image that was produced.\ntype CommitResponse = common.IDResponse\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/config.go",
    "content": "package container // import \"github.com/docker/docker/api/types/container\"\n\nimport (\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/strslice\"\n\t\"github.com/docker/go-connections/nat\"\n\tdockerspec \"github.com/moby/docker-image-spec/specs-go/v1\"\n)\n\n// MinimumDuration puts a minimum on user configured duration.\n// This is to prevent API error on time unit. For example, API may\n// set 3 as healthcheck interval with intention of 3 seconds, but\n// Docker interprets it as 3 nanoseconds.\nconst MinimumDuration = 1 * time.Millisecond\n\n// StopOptions holds the options to stop or restart a container.\ntype StopOptions struct {\n\t// Signal (optional) is the signal to send to the container to (gracefully)\n\t// stop it before forcibly terminating the container with SIGKILL after the\n\t// timeout expires. If not value is set, the default (SIGTERM) is used.\n\tSignal string `json:\",omitempty\"`\n\n\t// Timeout (optional) is the timeout (in seconds) to wait for the container\n\t// to stop gracefully before forcibly terminating it with SIGKILL.\n\t//\n\t// - Use nil to use the default timeout (10 seconds).\n\t// - Use '-1' to wait indefinitely.\n\t// - Use '0' to not wait for the container to exit gracefully, and\n\t//   immediately proceeds to forcibly terminating the container.\n\t// - Other positive values are used as timeout (in seconds).\n\tTimeout *int `json:\",omitempty\"`\n}\n\n// HealthConfig holds configuration settings for the HEALTHCHECK feature.\ntype HealthConfig = dockerspec.HealthcheckConfig\n\n// Config contains the configuration data about a container.\n// It should hold only portable information about the container.\n// Here, \"portable\" means \"independent from the host we are running on\".\n// Non-portable information *should* appear in HostConfig.\n// All fields added to this struct must be marked `omitempty` to keep getting\n// predictable hashes from the old `v1Compatibility` configuration.\ntype Config struct {\n\tHostname        string              // Hostname\n\tDomainname      string              // Domainname\n\tUser            string              // User that will run the command(s) inside the container, also support user:group\n\tAttachStdin     bool                // Attach the standard input, makes possible user interaction\n\tAttachStdout    bool                // Attach the standard output\n\tAttachStderr    bool                // Attach the standard error\n\tExposedPorts    nat.PortSet         `json:\",omitempty\"` // List of exposed ports\n\tTty             bool                // Attach standard streams to a tty, including stdin if it is not closed.\n\tOpenStdin       bool                // Open stdin\n\tStdinOnce       bool                // If true, close stdin after the 1 attached client disconnects.\n\tEnv             []string            // List of environment variable to set in the container\n\tCmd             strslice.StrSlice   // Command to run when starting the container\n\tHealthcheck     *HealthConfig       `json:\",omitempty\"` // Healthcheck describes how to check the container is healthy\n\tArgsEscaped     bool                `json:\",omitempty\"` // True if command is already escaped (meaning treat as a command line) (Windows specific).\n\tImage           string              // Name of the image as it was passed by the operator (e.g. could be symbolic)\n\tVolumes         map[string]struct{} // List of volumes (mounts) used for the container\n\tWorkingDir      string              // Current directory (PWD) in the command will be launched\n\tEntrypoint      strslice.StrSlice   // Entrypoint to run when starting the container\n\tNetworkDisabled bool                `json:\",omitempty\"` // Is network disabled\n\t// Mac Address of the container.\n\t//\n\t// Deprecated: this field is deprecated since API v1.44. Use EndpointSettings.MacAddress instead.\n\tMacAddress  string            `json:\",omitempty\"`\n\tOnBuild     []string          // ONBUILD metadata that were defined on the image Dockerfile\n\tLabels      map[string]string // List of labels set to this container\n\tStopSignal  string            `json:\",omitempty\"` // Signal to stop a container\n\tStopTimeout *int              `json:\",omitempty\"` // Timeout (in seconds) to stop a container\n\tShell       strslice.StrSlice `json:\",omitempty\"` // Shell for shell-form of RUN, CMD, ENTRYPOINT\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/container.go",
    "content": "package container\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/mount\"\n\t\"github.com/docker/docker/api/types/storage\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// ContainerUpdateOKBody OK response to ContainerUpdate operation\n//\n// Deprecated: use [UpdateResponse]. This alias will be removed in the next release.\ntype ContainerUpdateOKBody = UpdateResponse\n\n// ContainerTopOKBody OK response to ContainerTop operation\n//\n// Deprecated: use [TopResponse]. This alias will be removed in the next release.\ntype ContainerTopOKBody = TopResponse\n\n// PruneReport contains the response for Engine API:\n// POST \"/containers/prune\"\ntype PruneReport struct {\n\tContainersDeleted []string\n\tSpaceReclaimed    uint64\n}\n\n// PathStat is used to encode the header from\n// GET \"/containers/{name:.*}/archive\"\n// \"Name\" is the file or directory name.\ntype PathStat struct {\n\tName       string      `json:\"name\"`\n\tSize       int64       `json:\"size\"`\n\tMode       os.FileMode `json:\"mode\"`\n\tMtime      time.Time   `json:\"mtime\"`\n\tLinkTarget string      `json:\"linkTarget\"`\n}\n\n// CopyToContainerOptions holds information\n// about files to copy into a container\ntype CopyToContainerOptions struct {\n\tAllowOverwriteDirWithFile bool\n\tCopyUIDGID                bool\n}\n\n// StatsResponseReader wraps an io.ReadCloser to read (a stream of) stats\n// for a container, as produced by the GET \"/stats\" endpoint.\n//\n// The OSType field is set to the server's platform to allow\n// platform-specific handling of the response.\n//\n// TODO(thaJeztah): remove this wrapper, and make OSType part of [StatsResponse].\ntype StatsResponseReader struct {\n\tBody   io.ReadCloser `json:\"body\"`\n\tOSType string        `json:\"ostype\"`\n}\n\n// MountPoint represents a mount point configuration inside the container.\n// This is used for reporting the mountpoints in use by a container.\ntype MountPoint struct {\n\t// Type is the type of mount, see `Type<foo>` definitions in\n\t// github.com/docker/docker/api/types/mount.Type\n\tType mount.Type `json:\",omitempty\"`\n\n\t// Name is the name reference to the underlying data defined by `Source`\n\t// e.g., the volume name.\n\tName string `json:\",omitempty\"`\n\n\t// Source is the source location of the mount.\n\t//\n\t// For volumes, this contains the storage location of the volume (within\n\t// `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains\n\t// the source (host) part of the bind-mount. For `tmpfs` mount points, this\n\t// field is empty.\n\tSource string\n\n\t// Destination is the path relative to the container root (`/`) where the\n\t// Source is mounted inside the container.\n\tDestination string\n\n\t// Driver is the volume driver used to create the volume (if it is a volume).\n\tDriver string `json:\",omitempty\"`\n\n\t// Mode is a comma separated list of options supplied by the user when\n\t// creating the bind/volume mount.\n\t//\n\t// The default is platform-specific (`\"z\"` on Linux, empty on Windows).\n\tMode string\n\n\t// RW indicates whether the mount is mounted writable (read-write).\n\tRW bool\n\n\t// Propagation describes how mounts are propagated from the host into the\n\t// mount point, and vice-versa. Refer to the Linux kernel documentation\n\t// for details:\n\t// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt\n\t//\n\t// This field is not used on Windows.\n\tPropagation mount.Propagation\n}\n\n// State stores container's running state\n// it's part of ContainerJSONBase and returned by \"inspect\" command\ntype State struct {\n\tStatus     string // String representation of the container state. Can be one of \"created\", \"running\", \"paused\", \"restarting\", \"removing\", \"exited\", or \"dead\"\n\tRunning    bool\n\tPaused     bool\n\tRestarting bool\n\tOOMKilled  bool\n\tDead       bool\n\tPid        int\n\tExitCode   int\n\tError      string\n\tStartedAt  string\n\tFinishedAt string\n\tHealth     *Health `json:\",omitempty\"`\n}\n\n// Summary contains response of Engine API:\n// GET \"/containers/json\"\ntype Summary struct {\n\tID                      string `json:\"Id\"`\n\tNames                   []string\n\tImage                   string\n\tImageID                 string\n\tImageManifestDescriptor *ocispec.Descriptor `json:\"ImageManifestDescriptor,omitempty\"`\n\tCommand                 string\n\tCreated                 int64\n\tPorts                   []Port\n\tSizeRw                  int64 `json:\",omitempty\"`\n\tSizeRootFs              int64 `json:\",omitempty\"`\n\tLabels                  map[string]string\n\tState                   string\n\tStatus                  string\n\tHostConfig              struct {\n\t\tNetworkMode string            `json:\",omitempty\"`\n\t\tAnnotations map[string]string `json:\",omitempty\"`\n\t}\n\tNetworkSettings *NetworkSettingsSummary\n\tMounts          []MountPoint\n}\n\n// ContainerJSONBase contains response of Engine API GET \"/containers/{name:.*}/json\"\n// for API version 1.18 and older.\n//\n// TODO(thaJeztah): combine ContainerJSONBase and InspectResponse into a single struct.\n// The split between ContainerJSONBase (ContainerJSONBase) and InspectResponse (InspectResponse)\n// was done in commit 6deaa58ba5f051039643cedceee97c8695e2af74 (https://github.com/moby/moby/pull/13675).\n// ContainerJSONBase contained all fields for API < 1.19, and InspectResponse\n// held fields that were added in API 1.19 and up. Given that the minimum\n// supported API version is now 1.24, we no longer use the separate type.\ntype ContainerJSONBase struct {\n\tID              string `json:\"Id\"`\n\tCreated         string\n\tPath            string\n\tArgs            []string\n\tState           *State\n\tImage           string\n\tResolvConfPath  string\n\tHostnamePath    string\n\tHostsPath       string\n\tLogPath         string\n\tName            string\n\tRestartCount    int\n\tDriver          string\n\tPlatform        string\n\tMountLabel      string\n\tProcessLabel    string\n\tAppArmorProfile string\n\tExecIDs         []string\n\tHostConfig      *HostConfig\n\tGraphDriver     storage.DriverData\n\tSizeRw          *int64 `json:\",omitempty\"`\n\tSizeRootFs      *int64 `json:\",omitempty\"`\n}\n\n// InspectResponse is the response for the GET \"/containers/{name:.*}/json\"\n// endpoint.\ntype InspectResponse struct {\n\t*ContainerJSONBase\n\tMounts          []MountPoint\n\tConfig          *Config\n\tNetworkSettings *NetworkSettings\n\t// ImageManifestDescriptor is the descriptor of a platform-specific manifest of the image used to create the container.\n\tImageManifestDescriptor *ocispec.Descriptor `json:\"ImageManifestDescriptor,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/create_request.go",
    "content": "package container\n\nimport \"github.com/docker/docker/api/types/network\"\n\n// CreateRequest is the request message sent to the server for container\n// create calls. It is a config wrapper that holds the container [Config]\n// (portable) and the corresponding [HostConfig] (non-portable) and\n// [network.NetworkingConfig].\ntype CreateRequest struct {\n\t*Config\n\tHostConfig       *HostConfig               `json:\"HostConfig,omitempty\"`\n\tNetworkingConfig *network.NetworkingConfig `json:\"NetworkingConfig,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/create_response.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// CreateResponse ContainerCreateResponse\n//\n// OK response to ContainerCreate operation\n// swagger:model CreateResponse\ntype CreateResponse struct {\n\n\t// The ID of the created container\n\t// Required: true\n\tID string `json:\"Id\"`\n\n\t// Warnings encountered when creating the container\n\t// Required: true\n\tWarnings []string `json:\"Warnings\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/errors.go",
    "content": "package container\n\ntype errInvalidParameter struct{ error }\n\nfunc (e *errInvalidParameter) InvalidParameter() {}\n\nfunc (e *errInvalidParameter) Unwrap() error {\n\treturn e.error\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/exec.go",
    "content": "package container\n\nimport \"github.com/docker/docker/api/types/common\"\n\n// ExecCreateResponse is the response for a successful exec-create request.\n// It holds the ID of the exec that was created.\n//\n// TODO(thaJeztah): make this a distinct type.\ntype ExecCreateResponse = common.IDResponse\n\n// ExecOptions is a small subset of the Config struct that holds the configuration\n// for the exec feature of docker.\ntype ExecOptions struct {\n\tUser         string   // User that will run the command\n\tPrivileged   bool     // Is the container in privileged mode\n\tTty          bool     // Attach standard streams to a tty.\n\tConsoleSize  *[2]uint `json:\",omitempty\"` // Initial console size [height, width]\n\tAttachStdin  bool     // Attach the standard input, makes possible user interaction\n\tAttachStderr bool     // Attach the standard error\n\tAttachStdout bool     // Attach the standard output\n\tDetach       bool     // Execute in detach mode\n\tDetachKeys   string   // Escape keys for detach\n\tEnv          []string // Environment variables\n\tWorkingDir   string   // Working directory\n\tCmd          []string // Execution commands and args\n}\n\n// ExecStartOptions is a temp struct used by execStart\n// Config fields is part of ExecConfig in runconfig package\ntype ExecStartOptions struct {\n\t// ExecStart will first check if it's detached\n\tDetach bool\n\t// Check if there's a tty\n\tTty bool\n\t// Terminal size [height, width], unused if Tty == false\n\tConsoleSize *[2]uint `json:\",omitempty\"`\n}\n\n// ExecAttachOptions is a temp struct used by execAttach.\n//\n// TODO(thaJeztah): make this a separate type; ContainerExecAttach does not use the Detach option, and cannot run detached.\ntype ExecAttachOptions = ExecStartOptions\n\n// ExecInspect holds information returned by exec inspect.\ntype ExecInspect struct {\n\tExecID      string `json:\"ID\"`\n\tContainerID string\n\tRunning     bool\n\tExitCode    int\n\tPid         int\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/filesystem_change.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// FilesystemChange Change in the container's filesystem.\n//\n// swagger:model FilesystemChange\ntype FilesystemChange struct {\n\n\t// kind\n\t// Required: true\n\tKind ChangeType `json:\"Kind\"`\n\n\t// Path to file or directory that has changed.\n\t//\n\t// Required: true\n\tPath string `json:\"Path\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/health.go",
    "content": "package container\n\nimport \"time\"\n\n// Health states\nconst (\n\tNoHealthcheck = \"none\"      // Indicates there is no healthcheck\n\tStarting      = \"starting\"  // Starting indicates that the container is not yet ready\n\tHealthy       = \"healthy\"   // Healthy indicates that the container is running correctly\n\tUnhealthy     = \"unhealthy\" // Unhealthy indicates that the container has a problem\n)\n\n// Health stores information about the container's healthcheck results\ntype Health struct {\n\tStatus        string               // Status is one of [Starting], [Healthy] or [Unhealthy].\n\tFailingStreak int                  // FailingStreak is the number of consecutive failures\n\tLog           []*HealthcheckResult // Log contains the last few results (oldest first)\n}\n\n// HealthcheckResult stores information about a single run of a healthcheck probe\ntype HealthcheckResult struct {\n\tStart    time.Time // Start is the time this check started\n\tEnd      time.Time // End is the time this check ended\n\tExitCode int       // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe\n\tOutput   string    // Output from last check\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/hostconfig.go",
    "content": "package container // import \"github.com/docker/docker/api/types/container\"\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types/blkiodev\"\n\t\"github.com/docker/docker/api/types/mount\"\n\t\"github.com/docker/docker/api/types/network\"\n\t\"github.com/docker/docker/api/types/strslice\"\n\t\"github.com/docker/go-connections/nat\"\n\t\"github.com/docker/go-units\"\n)\n\n// CgroupnsMode represents the cgroup namespace mode of the container\ntype CgroupnsMode string\n\n// cgroup namespace modes for containers\nconst (\n\tCgroupnsModeEmpty   CgroupnsMode = \"\"\n\tCgroupnsModePrivate CgroupnsMode = \"private\"\n\tCgroupnsModeHost    CgroupnsMode = \"host\"\n)\n\n// IsPrivate indicates whether the container uses its own private cgroup namespace\nfunc (c CgroupnsMode) IsPrivate() bool {\n\treturn c == CgroupnsModePrivate\n}\n\n// IsHost indicates whether the container shares the host's cgroup namespace\nfunc (c CgroupnsMode) IsHost() bool {\n\treturn c == CgroupnsModeHost\n}\n\n// IsEmpty indicates whether the container cgroup namespace mode is unset\nfunc (c CgroupnsMode) IsEmpty() bool {\n\treturn c == CgroupnsModeEmpty\n}\n\n// Valid indicates whether the cgroup namespace mode is valid\nfunc (c CgroupnsMode) Valid() bool {\n\treturn c.IsEmpty() || c.IsPrivate() || c.IsHost()\n}\n\n// Isolation represents the isolation technology of a container. The supported\n// values are platform specific\ntype Isolation string\n\n// Isolation modes for containers\nconst (\n\tIsolationEmpty   Isolation = \"\"        // IsolationEmpty is unspecified (same behavior as default)\n\tIsolationDefault Isolation = \"default\" // IsolationDefault is the default isolation mode on current daemon\n\tIsolationProcess Isolation = \"process\" // IsolationProcess is process isolation mode\n\tIsolationHyperV  Isolation = \"hyperv\"  // IsolationHyperV is HyperV isolation mode\n)\n\n// IsDefault indicates the default isolation technology of a container. On Linux this\n// is the native driver. On Windows, this is a Windows Server Container.\nfunc (i Isolation) IsDefault() bool {\n\t// TODO consider making isolation-mode strict (case-sensitive)\n\tv := Isolation(strings.ToLower(string(i)))\n\treturn v == IsolationDefault || v == IsolationEmpty\n}\n\n// IsHyperV indicates the use of a Hyper-V partition for isolation\nfunc (i Isolation) IsHyperV() bool {\n\t// TODO consider making isolation-mode strict (case-sensitive)\n\treturn Isolation(strings.ToLower(string(i))) == IsolationHyperV\n}\n\n// IsProcess indicates the use of process isolation\nfunc (i Isolation) IsProcess() bool {\n\t// TODO consider making isolation-mode strict (case-sensitive)\n\treturn Isolation(strings.ToLower(string(i))) == IsolationProcess\n}\n\n// IpcMode represents the container ipc stack.\ntype IpcMode string\n\n// IpcMode constants\nconst (\n\tIPCModeNone      IpcMode = \"none\"\n\tIPCModeHost      IpcMode = \"host\"\n\tIPCModeContainer IpcMode = \"container\"\n\tIPCModePrivate   IpcMode = \"private\"\n\tIPCModeShareable IpcMode = \"shareable\"\n)\n\n// IsPrivate indicates whether the container uses its own private ipc namespace which can not be shared.\nfunc (n IpcMode) IsPrivate() bool {\n\treturn n == IPCModePrivate\n}\n\n// IsHost indicates whether the container shares the host's ipc namespace.\nfunc (n IpcMode) IsHost() bool {\n\treturn n == IPCModeHost\n}\n\n// IsShareable indicates whether the container's ipc namespace can be shared with another container.\nfunc (n IpcMode) IsShareable() bool {\n\treturn n == IPCModeShareable\n}\n\n// IsContainer indicates whether the container uses another container's ipc namespace.\nfunc (n IpcMode) IsContainer() bool {\n\t_, ok := containerID(string(n))\n\treturn ok\n}\n\n// IsNone indicates whether container IpcMode is set to \"none\".\nfunc (n IpcMode) IsNone() bool {\n\treturn n == IPCModeNone\n}\n\n// IsEmpty indicates whether container IpcMode is empty\nfunc (n IpcMode) IsEmpty() bool {\n\treturn n == \"\"\n}\n\n// Valid indicates whether the ipc mode is valid.\nfunc (n IpcMode) Valid() bool {\n\t// TODO(thaJeztah): align with PidMode, and consider container-mode without a container name/ID to be invalid.\n\treturn n.IsEmpty() || n.IsNone() || n.IsPrivate() || n.IsHost() || n.IsShareable() || n.IsContainer()\n}\n\n// Container returns the name of the container ipc stack is going to be used.\nfunc (n IpcMode) Container() (idOrName string) {\n\tidOrName, _ = containerID(string(n))\n\treturn idOrName\n}\n\n// NetworkMode represents the container network stack.\ntype NetworkMode string\n\n// IsNone indicates whether container isn't using a network stack.\nfunc (n NetworkMode) IsNone() bool {\n\treturn n == network.NetworkNone\n}\n\n// IsDefault indicates whether container uses the default network stack.\nfunc (n NetworkMode) IsDefault() bool {\n\treturn n == network.NetworkDefault\n}\n\n// IsPrivate indicates whether container uses its private network stack.\nfunc (n NetworkMode) IsPrivate() bool {\n\treturn !(n.IsHost() || n.IsContainer())\n}\n\n// IsContainer indicates whether container uses a container network stack.\nfunc (n NetworkMode) IsContainer() bool {\n\t_, ok := containerID(string(n))\n\treturn ok\n}\n\n// ConnectedContainer is the id of the container which network this container is connected to.\nfunc (n NetworkMode) ConnectedContainer() (idOrName string) {\n\tidOrName, _ = containerID(string(n))\n\treturn idOrName\n}\n\n// UserDefined indicates user-created network\nfunc (n NetworkMode) UserDefined() string {\n\tif n.IsUserDefined() {\n\t\treturn string(n)\n\t}\n\treturn \"\"\n}\n\n// UsernsMode represents userns mode in the container.\ntype UsernsMode string\n\n// IsHost indicates whether the container uses the host's userns.\nfunc (n UsernsMode) IsHost() bool {\n\treturn n == \"host\"\n}\n\n// IsPrivate indicates whether the container uses the a private userns.\nfunc (n UsernsMode) IsPrivate() bool {\n\treturn !n.IsHost()\n}\n\n// Valid indicates whether the userns is valid.\nfunc (n UsernsMode) Valid() bool {\n\treturn n == \"\" || n.IsHost()\n}\n\n// CgroupSpec represents the cgroup to use for the container.\ntype CgroupSpec string\n\n// IsContainer indicates whether the container is using another container cgroup\nfunc (c CgroupSpec) IsContainer() bool {\n\t_, ok := containerID(string(c))\n\treturn ok\n}\n\n// Valid indicates whether the cgroup spec is valid.\nfunc (c CgroupSpec) Valid() bool {\n\t// TODO(thaJeztah): align with PidMode, and consider container-mode without a container name/ID to be invalid.\n\treturn c == \"\" || c.IsContainer()\n}\n\n// Container returns the ID or name of the container whose cgroup will be used.\nfunc (c CgroupSpec) Container() (idOrName string) {\n\tidOrName, _ = containerID(string(c))\n\treturn idOrName\n}\n\n// UTSMode represents the UTS namespace of the container.\ntype UTSMode string\n\n// IsPrivate indicates whether the container uses its private UTS namespace.\nfunc (n UTSMode) IsPrivate() bool {\n\treturn !n.IsHost()\n}\n\n// IsHost indicates whether the container uses the host's UTS namespace.\nfunc (n UTSMode) IsHost() bool {\n\treturn n == \"host\"\n}\n\n// Valid indicates whether the UTS namespace is valid.\nfunc (n UTSMode) Valid() bool {\n\treturn n == \"\" || n.IsHost()\n}\n\n// PidMode represents the pid namespace of the container.\ntype PidMode string\n\n// IsPrivate indicates whether the container uses its own new pid namespace.\nfunc (n PidMode) IsPrivate() bool {\n\treturn !(n.IsHost() || n.IsContainer())\n}\n\n// IsHost indicates whether the container uses the host's pid namespace.\nfunc (n PidMode) IsHost() bool {\n\treturn n == \"host\"\n}\n\n// IsContainer indicates whether the container uses a container's pid namespace.\nfunc (n PidMode) IsContainer() bool {\n\t_, ok := containerID(string(n))\n\treturn ok\n}\n\n// Valid indicates whether the pid namespace is valid.\nfunc (n PidMode) Valid() bool {\n\treturn n == \"\" || n.IsHost() || validContainer(string(n))\n}\n\n// Container returns the name of the container whose pid namespace is going to be used.\nfunc (n PidMode) Container() (idOrName string) {\n\tidOrName, _ = containerID(string(n))\n\treturn idOrName\n}\n\n// DeviceRequest represents a request for devices from a device driver.\n// Used by GPU device drivers.\ntype DeviceRequest struct {\n\tDriver       string            // Name of device driver\n\tCount        int               // Number of devices to request (-1 = All)\n\tDeviceIDs    []string          // List of device IDs as recognizable by the device driver\n\tCapabilities [][]string        // An OR list of AND lists of device capabilities (e.g. \"gpu\")\n\tOptions      map[string]string // Options to pass onto the device driver\n}\n\n// DeviceMapping represents the device mapping between the host and the container.\ntype DeviceMapping struct {\n\tPathOnHost        string\n\tPathInContainer   string\n\tCgroupPermissions string\n}\n\n// RestartPolicy represents the restart policies of the container.\ntype RestartPolicy struct {\n\tName              RestartPolicyMode\n\tMaximumRetryCount int\n}\n\ntype RestartPolicyMode string\n\nconst (\n\tRestartPolicyDisabled      RestartPolicyMode = \"no\"\n\tRestartPolicyAlways        RestartPolicyMode = \"always\"\n\tRestartPolicyOnFailure     RestartPolicyMode = \"on-failure\"\n\tRestartPolicyUnlessStopped RestartPolicyMode = \"unless-stopped\"\n)\n\n// IsNone indicates whether the container has the \"no\" restart policy.\n// This means the container will not automatically restart when exiting.\nfunc (rp *RestartPolicy) IsNone() bool {\n\treturn rp.Name == RestartPolicyDisabled || rp.Name == \"\"\n}\n\n// IsAlways indicates whether the container has the \"always\" restart policy.\n// This means the container will automatically restart regardless of the exit status.\nfunc (rp *RestartPolicy) IsAlways() bool {\n\treturn rp.Name == RestartPolicyAlways\n}\n\n// IsOnFailure indicates whether the container has the \"on-failure\" restart policy.\n// This means the container will automatically restart of exiting with a non-zero exit status.\nfunc (rp *RestartPolicy) IsOnFailure() bool {\n\treturn rp.Name == RestartPolicyOnFailure\n}\n\n// IsUnlessStopped indicates whether the container has the\n// \"unless-stopped\" restart policy. This means the container will\n// automatically restart unless user has put it to stopped state.\nfunc (rp *RestartPolicy) IsUnlessStopped() bool {\n\treturn rp.Name == RestartPolicyUnlessStopped\n}\n\n// IsSame compares two RestartPolicy to see if they are the same\nfunc (rp *RestartPolicy) IsSame(tp *RestartPolicy) bool {\n\treturn rp.Name == tp.Name && rp.MaximumRetryCount == tp.MaximumRetryCount\n}\n\n// ValidateRestartPolicy validates the given RestartPolicy.\nfunc ValidateRestartPolicy(policy RestartPolicy) error {\n\tswitch policy.Name {\n\tcase RestartPolicyAlways, RestartPolicyUnlessStopped, RestartPolicyDisabled:\n\t\tif policy.MaximumRetryCount != 0 {\n\t\t\tmsg := \"invalid restart policy: maximum retry count can only be used with 'on-failure'\"\n\t\t\tif policy.MaximumRetryCount < 0 {\n\t\t\t\tmsg += \" and cannot be negative\"\n\t\t\t}\n\t\t\treturn &errInvalidParameter{errors.New(msg)}\n\t\t}\n\t\treturn nil\n\tcase RestartPolicyOnFailure:\n\t\tif policy.MaximumRetryCount < 0 {\n\t\t\treturn &errInvalidParameter{errors.New(\"invalid restart policy: maximum retry count cannot be negative\")}\n\t\t}\n\t\treturn nil\n\tcase \"\":\n\t\t// Versions before v25.0.0 created an empty restart-policy \"name\" as\n\t\t// default. Allow an empty name with \"any\" MaximumRetryCount for\n\t\t// backward-compatibility.\n\t\treturn nil\n\tdefault:\n\t\treturn &errInvalidParameter{fmt.Errorf(\"invalid restart policy: unknown policy '%s'; use one of '%s', '%s', '%s', or '%s'\", policy.Name, RestartPolicyDisabled, RestartPolicyAlways, RestartPolicyOnFailure, RestartPolicyUnlessStopped)}\n\t}\n}\n\n// LogMode is a type to define the available modes for logging\n// These modes affect how logs are handled when log messages start piling up.\ntype LogMode string\n\n// Available logging modes\nconst (\n\tLogModeUnset    LogMode = \"\"\n\tLogModeBlocking LogMode = \"blocking\"\n\tLogModeNonBlock LogMode = \"non-blocking\"\n)\n\n// LogConfig represents the logging configuration of the container.\ntype LogConfig struct {\n\tType   string\n\tConfig map[string]string\n}\n\n// Ulimit is an alias for [units.Ulimit], which may be moving to a different\n// location or become a local type. This alias is to help transitioning.\n//\n// Users are recommended to use this alias instead of using [units.Ulimit] directly.\ntype Ulimit = units.Ulimit\n\n// Resources contains container's resources (cgroups config, ulimits...)\ntype Resources struct {\n\t// Applicable to all platforms\n\tCPUShares int64 `json:\"CpuShares\"` // CPU shares (relative weight vs. other containers)\n\tMemory    int64 // Memory limit (in bytes)\n\tNanoCPUs  int64 `json:\"NanoCpus\"` // CPU quota in units of 10<sup>-9</sup> CPUs.\n\n\t// Applicable to UNIX platforms\n\tCgroupParent         string // Parent cgroup.\n\tBlkioWeight          uint16 // Block IO weight (relative weight vs. other containers)\n\tBlkioWeightDevice    []*blkiodev.WeightDevice\n\tBlkioDeviceReadBps   []*blkiodev.ThrottleDevice\n\tBlkioDeviceWriteBps  []*blkiodev.ThrottleDevice\n\tBlkioDeviceReadIOps  []*blkiodev.ThrottleDevice\n\tBlkioDeviceWriteIOps []*blkiodev.ThrottleDevice\n\tCPUPeriod            int64           `json:\"CpuPeriod\"`          // CPU CFS (Completely Fair Scheduler) period\n\tCPUQuota             int64           `json:\"CpuQuota\"`           // CPU CFS (Completely Fair Scheduler) quota\n\tCPURealtimePeriod    int64           `json:\"CpuRealtimePeriod\"`  // CPU real-time period\n\tCPURealtimeRuntime   int64           `json:\"CpuRealtimeRuntime\"` // CPU real-time runtime\n\tCpusetCpus           string          // CpusetCpus 0-2, 0,1\n\tCpusetMems           string          // CpusetMems 0-2, 0,1\n\tDevices              []DeviceMapping // List of devices to map inside the container\n\tDeviceCgroupRules    []string        // List of rule to be added to the device cgroup\n\tDeviceRequests       []DeviceRequest // List of device requests for device drivers\n\n\t// KernelMemory specifies the kernel memory limit (in bytes) for the container.\n\t// Deprecated: kernel 5.4 deprecated kmem.limit_in_bytes.\n\tKernelMemory      int64     `json:\",omitempty\"`\n\tKernelMemoryTCP   int64     `json:\",omitempty\"` // Hard limit for kernel TCP buffer memory (in bytes)\n\tMemoryReservation int64     // Memory soft limit (in bytes)\n\tMemorySwap        int64     // Total memory usage (memory + swap); set `-1` to enable unlimited swap\n\tMemorySwappiness  *int64    // Tuning container memory swappiness behaviour\n\tOomKillDisable    *bool     // Whether to disable OOM Killer or not\n\tPidsLimit         *int64    // Setting PIDs limit for a container; Set `0` or `-1` for unlimited, or `null` to not change.\n\tUlimits           []*Ulimit // List of ulimits to be set in the container\n\n\t// Applicable to Windows\n\tCPUCount           int64  `json:\"CpuCount\"`   // CPU count\n\tCPUPercent         int64  `json:\"CpuPercent\"` // CPU percent\n\tIOMaximumIOps      uint64 // Maximum IOps for the container system drive\n\tIOMaximumBandwidth uint64 // Maximum IO in bytes per second for the container system drive\n}\n\n// UpdateConfig holds the mutable attributes of a Container.\n// Those attributes can be updated at runtime.\ntype UpdateConfig struct {\n\t// Contains container's resources (cgroups, ulimits)\n\tResources\n\tRestartPolicy RestartPolicy\n}\n\n// HostConfig the non-portable Config structure of a container.\n// Here, \"non-portable\" means \"dependent of the host we are running on\".\n// Portable information *should* appear in Config.\ntype HostConfig struct {\n\t// Applicable to all platforms\n\tBinds           []string          // List of volume bindings for this container\n\tContainerIDFile string            // File (path) where the containerId is written\n\tLogConfig       LogConfig         // Configuration of the logs for this container\n\tNetworkMode     NetworkMode       // Network mode to use for the container\n\tPortBindings    nat.PortMap       // Port mapping between the exposed port (container) and the host\n\tRestartPolicy   RestartPolicy     // Restart policy to be used for the container\n\tAutoRemove      bool              // Automatically remove container when it exits\n\tVolumeDriver    string            // Name of the volume driver used to mount volumes\n\tVolumesFrom     []string          // List of volumes to take from other container\n\tConsoleSize     [2]uint           // Initial console size (height,width)\n\tAnnotations     map[string]string `json:\",omitempty\"` // Arbitrary non-identifying metadata attached to container and provided to the runtime\n\n\t// Applicable to UNIX platforms\n\tCapAdd          strslice.StrSlice // List of kernel capabilities to add to the container\n\tCapDrop         strslice.StrSlice // List of kernel capabilities to remove from the container\n\tCgroupnsMode    CgroupnsMode      // Cgroup namespace mode to use for the container\n\tDNS             []string          `json:\"Dns\"`        // List of DNS server to lookup\n\tDNSOptions      []string          `json:\"DnsOptions\"` // List of DNSOption to look for\n\tDNSSearch       []string          `json:\"DnsSearch\"`  // List of DNSSearch to look for\n\tExtraHosts      []string          // List of extra hosts\n\tGroupAdd        []string          // List of additional groups that the container process will run as\n\tIpcMode         IpcMode           // IPC namespace to use for the container\n\tCgroup          CgroupSpec        // Cgroup to use for the container\n\tLinks           []string          // List of links (in the name:alias form)\n\tOomScoreAdj     int               // Container preference for OOM-killing\n\tPidMode         PidMode           // PID namespace to use for the container\n\tPrivileged      bool              // Is the container in privileged mode\n\tPublishAllPorts bool              // Should docker publish all exposed port for the container\n\tReadonlyRootfs  bool              // Is the container root filesystem in read-only\n\tSecurityOpt     []string          // List of string values to customize labels for MLS systems, such as SELinux.\n\tStorageOpt      map[string]string `json:\",omitempty\"` // Storage driver options per container.\n\tTmpfs           map[string]string `json:\",omitempty\"` // List of tmpfs (mounts) used for the container\n\tUTSMode         UTSMode           // UTS namespace to use for the container\n\tUsernsMode      UsernsMode        // The user namespace to use for the container\n\tShmSize         int64             // Total shm memory usage\n\tSysctls         map[string]string `json:\",omitempty\"` // List of Namespaced sysctls used for the container\n\tRuntime         string            `json:\",omitempty\"` // Runtime to use with this container\n\n\t// Applicable to Windows\n\tIsolation Isolation // Isolation technology of the container (e.g. default, hyperv)\n\n\t// Contains container's resources (cgroups, ulimits)\n\tResources\n\n\t// Mounts specs used by the container\n\tMounts []mount.Mount `json:\",omitempty\"`\n\n\t// MaskedPaths is the list of paths to be masked inside the container (this overrides the default set of paths)\n\tMaskedPaths []string\n\n\t// ReadonlyPaths is the list of paths to be set as read-only inside the container (this overrides the default set of paths)\n\tReadonlyPaths []string\n\n\t// Run a custom init inside the container, if null, use the daemon's configured settings\n\tInit *bool `json:\",omitempty\"`\n}\n\n// containerID splits \"container:<ID|name>\" values. It returns the container\n// ID or name, and whether an ID/name was found. It returns an empty string and\n// a \"false\" if the value does not have a \"container:\" prefix. Further validation\n// of the returned, including checking if the value is empty, should be handled\n// by the caller.\nfunc containerID(val string) (idOrName string, ok bool) {\n\tk, v, hasSep := strings.Cut(val, \":\")\n\tif !hasSep || k != \"container\" {\n\t\treturn \"\", false\n\t}\n\treturn v, true\n}\n\n// validContainer checks if the given value is a \"container:\" mode with\n// a non-empty name/ID.\nfunc validContainer(val string) bool {\n\tid, ok := containerID(val)\n\treturn ok && id != \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go",
    "content": "//go:build !windows\n\npackage container // import \"github.com/docker/docker/api/types/container\"\n\nimport \"github.com/docker/docker/api/types/network\"\n\n// IsValid indicates if an isolation technology is valid\nfunc (i Isolation) IsValid() bool {\n\treturn i.IsDefault()\n}\n\n// IsBridge indicates whether container uses the bridge network stack\nfunc (n NetworkMode) IsBridge() bool {\n\treturn n == network.NetworkBridge\n}\n\n// IsHost indicates whether container uses the host network stack.\nfunc (n NetworkMode) IsHost() bool {\n\treturn n == network.NetworkHost\n}\n\n// IsUserDefined indicates user-created network\nfunc (n NetworkMode) IsUserDefined() bool {\n\treturn !n.IsDefault() && !n.IsBridge() && !n.IsHost() && !n.IsNone() && !n.IsContainer()\n}\n\n// NetworkName returns the name of the network stack.\nfunc (n NetworkMode) NetworkName() string {\n\tswitch {\n\tcase n.IsDefault():\n\t\treturn network.NetworkDefault\n\tcase n.IsBridge():\n\t\treturn network.NetworkBridge\n\tcase n.IsHost():\n\t\treturn network.NetworkHost\n\tcase n.IsNone():\n\t\treturn network.NetworkNone\n\tcase n.IsContainer():\n\t\treturn \"container\"\n\tcase n.IsUserDefined():\n\t\treturn n.UserDefined()\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go",
    "content": "package container // import \"github.com/docker/docker/api/types/container\"\n\nimport \"github.com/docker/docker/api/types/network\"\n\n// IsValid indicates if an isolation technology is valid\nfunc (i Isolation) IsValid() bool {\n\treturn i.IsDefault() || i.IsHyperV() || i.IsProcess()\n}\n\n// IsBridge indicates whether container uses the bridge network stack\n// in windows it is given the name NAT\nfunc (n NetworkMode) IsBridge() bool {\n\treturn n == network.NetworkNat\n}\n\n// IsHost indicates whether container uses the host network stack.\n// returns false as this is not supported by windows\nfunc (n NetworkMode) IsHost() bool {\n\treturn false\n}\n\n// IsUserDefined indicates user-created network\nfunc (n NetworkMode) IsUserDefined() bool {\n\treturn !n.IsDefault() && !n.IsNone() && !n.IsBridge() && !n.IsContainer()\n}\n\n// NetworkName returns the name of the network stack.\nfunc (n NetworkMode) NetworkName() string {\n\tswitch {\n\tcase n.IsDefault():\n\t\treturn network.NetworkDefault\n\tcase n.IsBridge():\n\t\treturn network.NetworkNat\n\tcase n.IsHost():\n\t\t// Windows currently doesn't support host network-mode, so\n\t\t// this would currently never happen..\n\t\treturn network.NetworkHost\n\tcase n.IsNone():\n\t\treturn network.NetworkNone\n\tcase n.IsContainer():\n\t\treturn \"container\"\n\tcase n.IsUserDefined():\n\t\treturn n.UserDefined()\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/network_settings.go",
    "content": "package container\n\nimport (\n\t\"github.com/docker/docker/api/types/network\"\n\t\"github.com/docker/go-connections/nat\"\n)\n\n// NetworkSettings exposes the network settings in the api\ntype NetworkSettings struct {\n\tNetworkSettingsBase\n\tDefaultNetworkSettings\n\tNetworks map[string]*network.EndpointSettings\n}\n\n// NetworkSettingsBase holds networking state for a container when inspecting it.\ntype NetworkSettingsBase struct {\n\tBridge     string      // Bridge contains the name of the default bridge interface iff it was set through the daemon --bridge flag.\n\tSandboxID  string      // SandboxID uniquely represents a container's network stack\n\tSandboxKey string      // SandboxKey identifies the sandbox\n\tPorts      nat.PortMap // Ports is a collection of PortBinding indexed by Port\n\n\t// HairpinMode specifies if hairpin NAT should be enabled on the virtual interface\n\t//\n\t// Deprecated: This field is never set and will be removed in a future release.\n\tHairpinMode bool\n\t// LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix\n\t//\n\t// Deprecated: This field is never set and will be removed in a future release.\n\tLinkLocalIPv6Address string\n\t// LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address\n\t//\n\t// Deprecated: This field is never set and will be removed in a future release.\n\tLinkLocalIPv6PrefixLen int\n\tSecondaryIPAddresses   []network.Address // Deprecated: This field is never set and will be removed in a future release.\n\tSecondaryIPv6Addresses []network.Address // Deprecated: This field is never set and will be removed in a future release.\n}\n\n// DefaultNetworkSettings holds network information\n// during the 2 release deprecation period.\n// It will be removed in Docker 1.11.\ntype DefaultNetworkSettings struct {\n\tEndpointID          string // EndpointID uniquely represents a service endpoint in a Sandbox\n\tGateway             string // Gateway holds the gateway address for the network\n\tGlobalIPv6Address   string // GlobalIPv6Address holds network's global IPv6 address\n\tGlobalIPv6PrefixLen int    // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address\n\tIPAddress           string // IPAddress holds the IPv4 address for the network\n\tIPPrefixLen         int    // IPPrefixLen represents mask length of network's IPv4 address\n\tIPv6Gateway         string // IPv6Gateway holds gateway address specific for IPv6\n\tMacAddress          string // MacAddress holds the MAC address for the network\n}\n\n// NetworkSettingsSummary provides a summary of container's networks\n// in /containers/json\ntype NetworkSettingsSummary struct {\n\tNetworks map[string]*network.EndpointSettings\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/options.go",
    "content": "package container\n\nimport \"github.com/docker/docker/api/types/filters\"\n\n// ResizeOptions holds parameters to resize a TTY.\n// It can be used to resize container TTYs and\n// exec process TTYs too.\ntype ResizeOptions struct {\n\tHeight uint\n\tWidth  uint\n}\n\n// AttachOptions holds parameters to attach to a container.\ntype AttachOptions struct {\n\tStream     bool\n\tStdin      bool\n\tStdout     bool\n\tStderr     bool\n\tDetachKeys string\n\tLogs       bool\n}\n\n// CommitOptions holds parameters to commit changes into a container.\ntype CommitOptions struct {\n\tReference string\n\tComment   string\n\tAuthor    string\n\tChanges   []string\n\tPause     bool\n\tConfig    *Config\n}\n\n// RemoveOptions holds parameters to remove containers.\ntype RemoveOptions struct {\n\tRemoveVolumes bool\n\tRemoveLinks   bool\n\tForce         bool\n}\n\n// StartOptions holds parameters to start containers.\ntype StartOptions struct {\n\tCheckpointID  string\n\tCheckpointDir string\n}\n\n// ListOptions holds parameters to list containers with.\ntype ListOptions struct {\n\tSize    bool\n\tAll     bool\n\tLatest  bool\n\tSince   string\n\tBefore  string\n\tLimit   int\n\tFilters filters.Args\n}\n\n// LogsOptions holds parameters to filter logs with.\ntype LogsOptions struct {\n\tShowStdout bool\n\tShowStderr bool\n\tSince      string\n\tUntil      string\n\tTimestamps bool\n\tFollow     bool\n\tTail       string\n\tDetails    bool\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/port.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// Port An open port on a container\n// swagger:model Port\ntype Port struct {\n\n\t// Host IP address that the container's port is mapped to\n\tIP string `json:\"IP,omitempty\"`\n\n\t// Port on the container\n\t// Required: true\n\tPrivatePort uint16 `json:\"PrivatePort\"`\n\n\t// Port exposed on the host\n\tPublicPort uint16 `json:\"PublicPort,omitempty\"`\n\n\t// type\n\t// Required: true\n\tType string `json:\"Type\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/stats.go",
    "content": "package container\n\nimport \"time\"\n\n// ThrottlingData stores CPU throttling stats of one running container.\n// Not used on Windows.\ntype ThrottlingData struct {\n\t// Number of periods with throttling active\n\tPeriods uint64 `json:\"periods\"`\n\t// Number of periods when the container hits its throttling limit.\n\tThrottledPeriods uint64 `json:\"throttled_periods\"`\n\t// Aggregate time the container was throttled for in nanoseconds.\n\tThrottledTime uint64 `json:\"throttled_time\"`\n}\n\n// CPUUsage stores All CPU stats aggregated since container inception.\ntype CPUUsage struct {\n\t// Total CPU time consumed.\n\t// Units: nanoseconds (Linux)\n\t// Units: 100's of nanoseconds (Windows)\n\tTotalUsage uint64 `json:\"total_usage\"`\n\n\t// Total CPU time consumed per core (Linux). Not used on Windows.\n\t// Units: nanoseconds.\n\tPercpuUsage []uint64 `json:\"percpu_usage,omitempty\"`\n\n\t// Time spent by tasks of the cgroup in kernel mode (Linux).\n\t// Time spent by all container processes in kernel mode (Windows).\n\t// Units: nanoseconds (Linux).\n\t// Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers.\n\tUsageInKernelmode uint64 `json:\"usage_in_kernelmode\"`\n\n\t// Time spent by tasks of the cgroup in user mode (Linux).\n\t// Time spent by all container processes in user mode (Windows).\n\t// Units: nanoseconds (Linux).\n\t// Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers\n\tUsageInUsermode uint64 `json:\"usage_in_usermode\"`\n}\n\n// CPUStats aggregates and wraps all CPU related info of container\ntype CPUStats struct {\n\t// CPU Usage. Linux and Windows.\n\tCPUUsage CPUUsage `json:\"cpu_usage\"`\n\n\t// System Usage. Linux only.\n\tSystemUsage uint64 `json:\"system_cpu_usage,omitempty\"`\n\n\t// Online CPUs. Linux only.\n\tOnlineCPUs uint32 `json:\"online_cpus,omitempty\"`\n\n\t// Throttling Data. Linux only.\n\tThrottlingData ThrottlingData `json:\"throttling_data,omitempty\"`\n}\n\n// MemoryStats aggregates all memory stats since container inception on Linux.\n// Windows returns stats for commit and private working set only.\ntype MemoryStats struct {\n\t// Linux Memory Stats\n\n\t// current res_counter usage for memory\n\tUsage uint64 `json:\"usage,omitempty\"`\n\t// maximum usage ever recorded.\n\tMaxUsage uint64 `json:\"max_usage,omitempty\"`\n\t// TODO(vishh): Export these as stronger types.\n\t// all the stats exported via memory.stat.\n\tStats map[string]uint64 `json:\"stats,omitempty\"`\n\t// number of times memory usage hits limits.\n\tFailcnt uint64 `json:\"failcnt,omitempty\"`\n\tLimit   uint64 `json:\"limit,omitempty\"`\n\n\t// Windows Memory Stats\n\t// See https://technet.microsoft.com/en-us/magazine/ff382715.aspx\n\n\t// committed bytes\n\tCommit uint64 `json:\"commitbytes,omitempty\"`\n\t// peak committed bytes\n\tCommitPeak uint64 `json:\"commitpeakbytes,omitempty\"`\n\t// private working set\n\tPrivateWorkingSet uint64 `json:\"privateworkingset,omitempty\"`\n}\n\n// BlkioStatEntry is one small entity to store a piece of Blkio stats\n// Not used on Windows.\ntype BlkioStatEntry struct {\n\tMajor uint64 `json:\"major\"`\n\tMinor uint64 `json:\"minor\"`\n\tOp    string `json:\"op\"`\n\tValue uint64 `json:\"value\"`\n}\n\n// BlkioStats stores All IO service stats for data read and write.\n// This is a Linux specific structure as the differences between expressing\n// block I/O on Windows and Linux are sufficiently significant to make\n// little sense attempting to morph into a combined structure.\ntype BlkioStats struct {\n\t// number of bytes transferred to and from the block device\n\tIoServiceBytesRecursive []BlkioStatEntry `json:\"io_service_bytes_recursive\"`\n\tIoServicedRecursive     []BlkioStatEntry `json:\"io_serviced_recursive\"`\n\tIoQueuedRecursive       []BlkioStatEntry `json:\"io_queue_recursive\"`\n\tIoServiceTimeRecursive  []BlkioStatEntry `json:\"io_service_time_recursive\"`\n\tIoWaitTimeRecursive     []BlkioStatEntry `json:\"io_wait_time_recursive\"`\n\tIoMergedRecursive       []BlkioStatEntry `json:\"io_merged_recursive\"`\n\tIoTimeRecursive         []BlkioStatEntry `json:\"io_time_recursive\"`\n\tSectorsRecursive        []BlkioStatEntry `json:\"sectors_recursive\"`\n}\n\n// StorageStats is the disk I/O stats for read/write on Windows.\ntype StorageStats struct {\n\tReadCountNormalized  uint64 `json:\"read_count_normalized,omitempty\"`\n\tReadSizeBytes        uint64 `json:\"read_size_bytes,omitempty\"`\n\tWriteCountNormalized uint64 `json:\"write_count_normalized,omitempty\"`\n\tWriteSizeBytes       uint64 `json:\"write_size_bytes,omitempty\"`\n}\n\n// NetworkStats aggregates the network stats of one container\ntype NetworkStats struct {\n\t// Bytes received. Windows and Linux.\n\tRxBytes uint64 `json:\"rx_bytes\"`\n\t// Packets received. Windows and Linux.\n\tRxPackets uint64 `json:\"rx_packets\"`\n\t// Received errors. Not used on Windows. Note that we don't `omitempty` this\n\t// field as it is expected in the >=v1.21 API stats structure.\n\tRxErrors uint64 `json:\"rx_errors\"`\n\t// Incoming packets dropped. Windows and Linux.\n\tRxDropped uint64 `json:\"rx_dropped\"`\n\t// Bytes sent. Windows and Linux.\n\tTxBytes uint64 `json:\"tx_bytes\"`\n\t// Packets sent. Windows and Linux.\n\tTxPackets uint64 `json:\"tx_packets\"`\n\t// Sent errors. Not used on Windows. Note that we don't `omitempty` this\n\t// field as it is expected in the >=v1.21 API stats structure.\n\tTxErrors uint64 `json:\"tx_errors\"`\n\t// Outgoing packets dropped. Windows and Linux.\n\tTxDropped uint64 `json:\"tx_dropped\"`\n\t// Endpoint ID. Not used on Linux.\n\tEndpointID string `json:\"endpoint_id,omitempty\"`\n\t// Instance ID. Not used on Linux.\n\tInstanceID string `json:\"instance_id,omitempty\"`\n}\n\n// PidsStats contains the stats of a container's pids\ntype PidsStats struct {\n\t// Current is the number of pids in the cgroup\n\tCurrent uint64 `json:\"current,omitempty\"`\n\t// Limit is the hard limit on the number of pids in the cgroup.\n\t// A \"Limit\" of 0 means that there is no limit.\n\tLimit uint64 `json:\"limit,omitempty\"`\n}\n\n// Stats is Ultimate struct aggregating all types of stats of one container\n//\n// Deprecated: use [StatsResponse] instead. This type will be removed in the next release.\ntype Stats = StatsResponse\n\n// StatsResponse aggregates all types of stats of one container.\ntype StatsResponse struct {\n\tName string `json:\"name,omitempty\"`\n\tID   string `json:\"id,omitempty\"`\n\n\t// Common stats\n\tRead    time.Time `json:\"read\"`\n\tPreRead time.Time `json:\"preread\"`\n\n\t// Linux specific stats, not populated on Windows.\n\tPidsStats  PidsStats  `json:\"pids_stats,omitempty\"`\n\tBlkioStats BlkioStats `json:\"blkio_stats,omitempty\"`\n\n\t// Windows specific stats, not populated on Linux.\n\tNumProcs     uint32       `json:\"num_procs\"`\n\tStorageStats StorageStats `json:\"storage_stats,omitempty\"`\n\n\t// Shared stats\n\tCPUStats    CPUStats                `json:\"cpu_stats,omitempty\"`\n\tPreCPUStats CPUStats                `json:\"precpu_stats,omitempty\"` // \"Pre\"=\"Previous\"\n\tMemoryStats MemoryStats             `json:\"memory_stats,omitempty\"`\n\tNetworks    map[string]NetworkStats `json:\"networks,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/top_response.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// TopResponse ContainerTopResponse\n//\n// Container \"top\" response.\n// swagger:model TopResponse\ntype TopResponse struct {\n\n\t// Each process running in the container, where each process\n\t// is an array of values corresponding to the titles.\n\tProcesses [][]string `json:\"Processes\"`\n\n\t// The ps column titles\n\tTitles []string `json:\"Titles\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/update_response.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// UpdateResponse ContainerUpdateResponse\n//\n// Response for a successful container-update.\n// swagger:model UpdateResponse\ntype UpdateResponse struct {\n\n\t// Warnings encountered when updating the container.\n\tWarnings []string `json:\"Warnings\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/wait_exit_error.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// WaitExitError container waiting error, if any\n// swagger:model WaitExitError\ntype WaitExitError struct {\n\n\t// Details of an error\n\tMessage string `json:\"Message,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/wait_response.go",
    "content": "package container\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// WaitResponse ContainerWaitResponse\n//\n// OK response to ContainerWait operation\n// swagger:model WaitResponse\ntype WaitResponse struct {\n\n\t// error\n\tError *WaitExitError `json:\"Error,omitempty\"`\n\n\t// Exit code of the container\n\t// Required: true\n\tStatusCode int64 `json:\"StatusCode\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/container/waitcondition.go",
    "content": "package container // import \"github.com/docker/docker/api/types/container\"\n\n// WaitCondition is a type used to specify a container state for which\n// to wait.\ntype WaitCondition string\n\n// Possible WaitCondition Values.\n//\n// WaitConditionNotRunning (default) is used to wait for any of the non-running\n// states: \"created\", \"exited\", \"dead\", \"removing\", or \"removed\".\n//\n// WaitConditionNextExit is used to wait for the next time the state changes\n// to a non-running state. If the state is currently \"created\" or \"exited\",\n// this would cause Wait() to block until either the container runs and exits\n// or is removed.\n//\n// WaitConditionRemoved is used to wait for the container to be removed.\nconst (\n\tWaitConditionNotRunning WaitCondition = \"not-running\"\n\tWaitConditionNextExit   WaitCondition = \"next-exit\"\n\tWaitConditionRemoved    WaitCondition = \"removed\"\n)\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/error_response.go",
    "content": "package types\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// ErrorResponse Represents an error.\n// swagger:model ErrorResponse\ntype ErrorResponse struct {\n\n\t// The error message.\n\t// Required: true\n\tMessage string `json:\"message\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/error_response_ext.go",
    "content": "package types\n\n// Error returns the error message\nfunc (e ErrorResponse) Error() string {\n\treturn e.Message\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/events/events.go",
    "content": "package events // import \"github.com/docker/docker/api/types/events\"\nimport \"github.com/docker/docker/api/types/filters\"\n\n// Type is used for event-types.\ntype Type string\n\n// List of known event types.\nconst (\n\tBuilderEventType   Type = \"builder\"   // BuilderEventType is the event type that the builder generates.\n\tConfigEventType    Type = \"config\"    // ConfigEventType is the event type that configs generate.\n\tContainerEventType Type = \"container\" // ContainerEventType is the event type that containers generate.\n\tDaemonEventType    Type = \"daemon\"    // DaemonEventType is the event type that daemon generate.\n\tImageEventType     Type = \"image\"     // ImageEventType is the event type that images generate.\n\tNetworkEventType   Type = \"network\"   // NetworkEventType is the event type that networks generate.\n\tNodeEventType      Type = \"node\"      // NodeEventType is the event type that nodes generate.\n\tPluginEventType    Type = \"plugin\"    // PluginEventType is the event type that plugins generate.\n\tSecretEventType    Type = \"secret\"    // SecretEventType is the event type that secrets generate.\n\tServiceEventType   Type = \"service\"   // ServiceEventType is the event type that services generate.\n\tVolumeEventType    Type = \"volume\"    // VolumeEventType is the event type that volumes generate.\n)\n\n// Action is used for event-actions.\ntype Action string\n\nconst (\n\tActionCreate       Action = \"create\"\n\tActionStart        Action = \"start\"\n\tActionRestart      Action = \"restart\"\n\tActionStop         Action = \"stop\"\n\tActionCheckpoint   Action = \"checkpoint\"\n\tActionPause        Action = \"pause\"\n\tActionUnPause      Action = \"unpause\"\n\tActionAttach       Action = \"attach\"\n\tActionDetach       Action = \"detach\"\n\tActionResize       Action = \"resize\"\n\tActionUpdate       Action = \"update\"\n\tActionRename       Action = \"rename\"\n\tActionKill         Action = \"kill\"\n\tActionDie          Action = \"die\"\n\tActionOOM          Action = \"oom\"\n\tActionDestroy      Action = \"destroy\"\n\tActionRemove       Action = \"remove\"\n\tActionCommit       Action = \"commit\"\n\tActionTop          Action = \"top\"\n\tActionCopy         Action = \"copy\"\n\tActionArchivePath  Action = \"archive-path\"\n\tActionExtractToDir Action = \"extract-to-dir\"\n\tActionExport       Action = \"export\"\n\tActionImport       Action = \"import\"\n\tActionSave         Action = \"save\"\n\tActionLoad         Action = \"load\"\n\tActionTag          Action = \"tag\"\n\tActionUnTag        Action = \"untag\"\n\tActionPush         Action = \"push\"\n\tActionPull         Action = \"pull\"\n\tActionPrune        Action = \"prune\"\n\tActionDelete       Action = \"delete\"\n\tActionEnable       Action = \"enable\"\n\tActionDisable      Action = \"disable\"\n\tActionConnect      Action = \"connect\"\n\tActionDisconnect   Action = \"disconnect\"\n\tActionReload       Action = \"reload\"\n\tActionMount        Action = \"mount\"\n\tActionUnmount      Action = \"unmount\"\n\n\t// ActionExecCreate is the prefix used for exec_create events. These\n\t// event-actions are commonly followed by a colon and space (\": \"),\n\t// and the command that's defined for the exec, for example:\n\t//\n\t//\texec_create: /bin/sh -c 'echo hello'\n\t//\n\t// This is far from ideal; it's a compromise to allow filtering and\n\t// to preserve backward-compatibility.\n\tActionExecCreate Action = \"exec_create\"\n\t// ActionExecStart is the prefix used for exec_create events. These\n\t// event-actions are commonly followed by a colon and space (\": \"),\n\t// and the command that's defined for the exec, for example:\n\t//\n\t//\texec_start: /bin/sh -c 'echo hello'\n\t//\n\t// This is far from ideal; it's a compromise to allow filtering and\n\t// to preserve backward-compatibility.\n\tActionExecStart  Action = \"exec_start\"\n\tActionExecDie    Action = \"exec_die\"\n\tActionExecDetach Action = \"exec_detach\"\n\n\t// ActionHealthStatus is the prefix to use for health_status events.\n\t//\n\t// Health-status events can either have a pre-defined status, in which\n\t// case the \"health_status\" action is followed by a colon, or can be\n\t// \"free-form\", in which case they're followed by the output of the\n\t// health-check output.\n\t//\n\t// This is far form ideal, and a compromise to allow filtering, and\n\t// to preserve backward-compatibility.\n\tActionHealthStatus          Action = \"health_status\"\n\tActionHealthStatusRunning   Action = \"health_status: running\"\n\tActionHealthStatusHealthy   Action = \"health_status: healthy\"\n\tActionHealthStatusUnhealthy Action = \"health_status: unhealthy\"\n)\n\n// Actor describes something that generates events,\n// like a container, or a network, or a volume.\n// It has a defined name and a set of attributes.\n// The container attributes are its labels, other actors\n// can generate these attributes from other properties.\ntype Actor struct {\n\tID         string\n\tAttributes map[string]string\n}\n\n// Message represents the information an event contains\ntype Message struct {\n\t// Deprecated information from JSONMessage.\n\t// With data only in container events.\n\tStatus string `json:\"status,omitempty\"` // Deprecated: use Action instead.\n\tID     string `json:\"id,omitempty\"`     // Deprecated: use Actor.ID instead.\n\tFrom   string `json:\"from,omitempty\"`   // Deprecated: use Actor.Attributes[\"image\"] instead.\n\n\tType   Type\n\tAction Action\n\tActor  Actor\n\t// Engine events are local scope. Cluster events are swarm scope.\n\tScope string `json:\"scope,omitempty\"`\n\n\tTime     int64 `json:\"time,omitempty\"`\n\tTimeNano int64 `json:\"timeNano,omitempty\"`\n}\n\n// ListOptions holds parameters to filter events with.\ntype ListOptions struct {\n\tSince   string\n\tUntil   string\n\tFilters filters.Args\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/filters/errors.go",
    "content": "package filters\n\nimport \"fmt\"\n\n// invalidFilter indicates that the provided filter or its value is invalid\ntype invalidFilter struct {\n\tFilter string\n\tValue  []string\n}\n\nfunc (e invalidFilter) Error() string {\n\tmsg := \"invalid filter\"\n\tif e.Filter != \"\" {\n\t\tmsg += \" '\" + e.Filter\n\t\tif e.Value != nil {\n\t\t\tmsg = fmt.Sprintf(\"%s=%s\", msg, e.Value)\n\t\t}\n\t\tmsg += \"'\"\n\t}\n\treturn msg\n}\n\n// InvalidParameter marks this error as ErrInvalidParameter\nfunc (e invalidFilter) InvalidParameter() {}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/filters/parse.go",
    "content": "/*\nPackage filters provides tools for encoding a mapping of keys to a set of\nmultiple values.\n*/\npackage filters // import \"github.com/docker/docker/api/types/filters\"\n\nimport (\n\t\"encoding/json\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// Args stores a mapping of keys to a set of multiple values.\ntype Args struct {\n\tfields map[string]map[string]bool\n}\n\n// KeyValuePair are used to initialize a new Args\ntype KeyValuePair struct {\n\tKey   string\n\tValue string\n}\n\n// Arg creates a new KeyValuePair for initializing Args\nfunc Arg(key, value string) KeyValuePair {\n\treturn KeyValuePair{Key: key, Value: value}\n}\n\n// NewArgs returns a new Args populated with the initial args\nfunc NewArgs(initialArgs ...KeyValuePair) Args {\n\targs := Args{fields: map[string]map[string]bool{}}\n\tfor _, arg := range initialArgs {\n\t\targs.Add(arg.Key, arg.Value)\n\t}\n\treturn args\n}\n\n// Keys returns all the keys in list of Args\nfunc (args Args) Keys() []string {\n\tkeys := make([]string, 0, len(args.fields))\n\tfor k := range args.fields {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n\n// MarshalJSON returns a JSON byte representation of the Args\nfunc (args Args) MarshalJSON() ([]byte, error) {\n\tif len(args.fields) == 0 {\n\t\treturn []byte(\"{}\"), nil\n\t}\n\treturn json.Marshal(args.fields)\n}\n\n// ToJSON returns the Args as a JSON encoded string\nfunc ToJSON(a Args) (string, error) {\n\tif a.Len() == 0 {\n\t\treturn \"\", nil\n\t}\n\tbuf, err := json.Marshal(a)\n\treturn string(buf), err\n}\n\n// ToParamWithVersion encodes Args as a JSON string. If version is less than 1.22\n// then the encoded format will use an older legacy format where the values are a\n// list of strings, instead of a set.\n//\n// Deprecated: do not use in any new code; use ToJSON instead\nfunc ToParamWithVersion(version string, a Args) (string, error) {\n\tif a.Len() == 0 {\n\t\treturn \"\", nil\n\t}\n\n\tif version != \"\" && versions.LessThan(version, \"1.22\") {\n\t\tbuf, err := json.Marshal(convertArgsToSlice(a.fields))\n\t\treturn string(buf), err\n\t}\n\n\treturn ToJSON(a)\n}\n\n// FromJSON decodes a JSON encoded string into Args\nfunc FromJSON(p string) (Args, error) {\n\targs := NewArgs()\n\n\tif p == \"\" {\n\t\treturn args, nil\n\t}\n\n\traw := []byte(p)\n\terr := json.Unmarshal(raw, &args)\n\tif err == nil {\n\t\treturn args, nil\n\t}\n\n\t// Fallback to parsing arguments in the legacy slice format\n\tdeprecated := map[string][]string{}\n\tif legacyErr := json.Unmarshal(raw, &deprecated); legacyErr != nil {\n\t\treturn args, &invalidFilter{}\n\t}\n\n\targs.fields = deprecatedArgs(deprecated)\n\treturn args, nil\n}\n\n// UnmarshalJSON populates the Args from JSON encode bytes\nfunc (args Args) UnmarshalJSON(raw []byte) error {\n\treturn json.Unmarshal(raw, &args.fields)\n}\n\n// Get returns the list of values associated with the key\nfunc (args Args) Get(key string) []string {\n\tvalues := args.fields[key]\n\tif values == nil {\n\t\treturn make([]string, 0)\n\t}\n\tslice := make([]string, 0, len(values))\n\tfor key := range values {\n\t\tslice = append(slice, key)\n\t}\n\treturn slice\n}\n\n// Add a new value to the set of values\nfunc (args Args) Add(key, value string) {\n\tif _, ok := args.fields[key]; ok {\n\t\targs.fields[key][value] = true\n\t} else {\n\t\targs.fields[key] = map[string]bool{value: true}\n\t}\n}\n\n// Del removes a value from the set\nfunc (args Args) Del(key, value string) {\n\tif _, ok := args.fields[key]; ok {\n\t\tdelete(args.fields[key], value)\n\t\tif len(args.fields[key]) == 0 {\n\t\t\tdelete(args.fields, key)\n\t\t}\n\t}\n}\n\n// Len returns the number of keys in the mapping\nfunc (args Args) Len() int {\n\treturn len(args.fields)\n}\n\n// MatchKVList returns true if all the pairs in sources exist as key=value\n// pairs in the mapping at key, or if there are no values at key.\nfunc (args Args) MatchKVList(key string, sources map[string]string) bool {\n\tfieldValues := args.fields[key]\n\n\t// do not filter if there is no filter set or cannot determine filter\n\tif len(fieldValues) == 0 {\n\t\treturn true\n\t}\n\n\tif len(sources) == 0 {\n\t\treturn false\n\t}\n\n\tfor value := range fieldValues {\n\t\ttestK, testV, hasValue := strings.Cut(value, \"=\")\n\n\t\tv, ok := sources[testK]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\tif hasValue && testV != v {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Match returns true if any of the values at key match the source string\nfunc (args Args) Match(field, source string) bool {\n\tif args.ExactMatch(field, source) {\n\t\treturn true\n\t}\n\n\tfieldValues := args.fields[field]\n\tfor name2match := range fieldValues {\n\t\tmatch, err := regexp.MatchString(name2match, source)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif match {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// GetBoolOrDefault returns a boolean value of the key if the key is present\n// and is interpretable as a boolean value. Otherwise the default value is returned.\n// Error is not nil only if the filter values are not valid boolean or are conflicting.\nfunc (args Args) GetBoolOrDefault(key string, defaultValue bool) (bool, error) {\n\tfieldValues, ok := args.fields[key]\n\tif !ok {\n\t\treturn defaultValue, nil\n\t}\n\n\tif len(fieldValues) == 0 {\n\t\treturn defaultValue, &invalidFilter{key, nil}\n\t}\n\n\tisFalse := fieldValues[\"0\"] || fieldValues[\"false\"]\n\tisTrue := fieldValues[\"1\"] || fieldValues[\"true\"]\n\tif isFalse == isTrue {\n\t\t// Either no or conflicting truthy/falsy value were provided\n\t\treturn defaultValue, &invalidFilter{key, args.Get(key)}\n\t}\n\treturn isTrue, nil\n}\n\n// ExactMatch returns true if the source matches exactly one of the values.\nfunc (args Args) ExactMatch(key, source string) bool {\n\tfieldValues, ok := args.fields[key]\n\t// do not filter if there is no filter set or cannot determine filter\n\tif !ok || len(fieldValues) == 0 {\n\t\treturn true\n\t}\n\n\t// try to match full name value to avoid O(N) regular expression matching\n\treturn fieldValues[source]\n}\n\n// UniqueExactMatch returns true if there is only one value and the source\n// matches exactly the value.\nfunc (args Args) UniqueExactMatch(key, source string) bool {\n\tfieldValues := args.fields[key]\n\t// do not filter if there is no filter set or cannot determine filter\n\tif len(fieldValues) == 0 {\n\t\treturn true\n\t}\n\tif len(args.fields[key]) != 1 {\n\t\treturn false\n\t}\n\n\t// try to match full name value to avoid O(N) regular expression matching\n\treturn fieldValues[source]\n}\n\n// FuzzyMatch returns true if the source matches exactly one value,  or the\n// source has one of the values as a prefix.\nfunc (args Args) FuzzyMatch(key, source string) bool {\n\tif args.ExactMatch(key, source) {\n\t\treturn true\n\t}\n\n\tfieldValues := args.fields[key]\n\tfor prefix := range fieldValues {\n\t\tif strings.HasPrefix(source, prefix) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Contains returns true if the key exists in the mapping\nfunc (args Args) Contains(field string) bool {\n\t_, ok := args.fields[field]\n\treturn ok\n}\n\n// Validate compared the set of accepted keys against the keys in the mapping.\n// An error is returned if any mapping keys are not in the accepted set.\nfunc (args Args) Validate(accepted map[string]bool) error {\n\tfor name := range args.fields {\n\t\tif !accepted[name] {\n\t\t\treturn &invalidFilter{name, nil}\n\t\t}\n\t}\n\treturn nil\n}\n\n// WalkValues iterates over the list of values for a key in the mapping and calls\n// op() for each value. If op returns an error the iteration stops and the\n// error is returned.\nfunc (args Args) WalkValues(field string, op func(value string) error) error {\n\tif _, ok := args.fields[field]; !ok {\n\t\treturn nil\n\t}\n\tfor v := range args.fields[field] {\n\t\tif err := op(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Clone returns a copy of args.\nfunc (args Args) Clone() (newArgs Args) {\n\tnewArgs.fields = make(map[string]map[string]bool, len(args.fields))\n\tfor k, m := range args.fields {\n\t\tvar mm map[string]bool\n\t\tif m != nil {\n\t\t\tmm = make(map[string]bool, len(m))\n\t\t\tfor kk, v := range m {\n\t\t\t\tmm[kk] = v\n\t\t\t}\n\t\t}\n\t\tnewArgs.fields[k] = mm\n\t}\n\treturn newArgs\n}\n\nfunc deprecatedArgs(d map[string][]string) map[string]map[string]bool {\n\tm := map[string]map[string]bool{}\n\tfor k, v := range d {\n\t\tvalues := map[string]bool{}\n\t\tfor _, vv := range v {\n\t\t\tvalues[vv] = true\n\t\t}\n\t\tm[k] = values\n\t}\n\treturn m\n}\n\nfunc convertArgsToSlice(f map[string]map[string]bool) map[string][]string {\n\tm := map[string][]string{}\n\tfor k, v := range f {\n\t\tvalues := []string{}\n\t\tfor kk := range v {\n\t\t\tif v[kk] {\n\t\t\t\tvalues = append(values, kk)\n\t\t\t}\n\t\t}\n\t\tm[k] = values\n\t}\n\treturn m\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/image/delete_response.go",
    "content": "package image\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// DeleteResponse delete response\n// swagger:model DeleteResponse\ntype DeleteResponse struct {\n\n\t// The image ID of an image that was deleted\n\tDeleted string `json:\"Deleted,omitempty\"`\n\n\t// The image ID of an image that was untagged\n\tUntagged string `json:\"Untagged,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/image/image.go",
    "content": "package image\n\nimport (\n\t\"io\"\n\t\"time\"\n)\n\n// Metadata contains engine-local data about the image.\ntype Metadata struct {\n\t// LastTagTime is the date and time at which the image was last tagged.\n\tLastTagTime time.Time `json:\",omitempty\"`\n}\n\n// PruneReport contains the response for Engine API:\n// POST \"/images/prune\"\ntype PruneReport struct {\n\tImagesDeleted  []DeleteResponse\n\tSpaceReclaimed uint64\n}\n\n// LoadResponse returns information to the client about a load process.\n//\n// TODO(thaJeztah): remove this type, and just use an io.ReadCloser\n//\n// This type was added in https://github.com/moby/moby/pull/18878, related\n// to https://github.com/moby/moby/issues/19177;\n//\n// Make docker load to output json when the response content type is json\n// Swarm hijacks the response from docker load and returns JSON rather\n// than plain text like the Engine does. This makes the API library to return\n// information to figure that out.\n//\n// However the \"load\" endpoint unconditionally returns JSON;\n// https://github.com/moby/moby/blob/7b9d2ef6e5518a3d3f3cc418459f8df786cfbbd1/api/server/router/image/image_routes.go#L248-L255\n//\n// PR https://github.com/moby/moby/pull/21959 made the response-type depend\n// on whether \"quiet\" was set, but this logic got changed in a follow-up\n// https://github.com/moby/moby/pull/25557, which made the JSON response-type\n// unconditionally, but the output produced depend on whether\"quiet\" was set.\n//\n// We should deprecated the \"quiet\" option, as it's really a client\n// responsibility.\ntype LoadResponse struct {\n\t// Body must be closed to avoid a resource leak\n\tBody io.ReadCloser\n\tJSON bool\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/image/image_history.go",
    "content": "package image // import \"github.com/docker/docker/api/types/image\"\n\n// ----------------------------------------------------------------------------\n// Code generated by `swagger generate operation`. DO NOT EDIT.\n//\n// See hack/generate-swagger-api.sh\n// ----------------------------------------------------------------------------\n\n// HistoryResponseItem individual image layer information in response to ImageHistory operation\n// swagger:model HistoryResponseItem\ntype HistoryResponseItem struct {\n\n\t// comment\n\t// Required: true\n\tComment string `json:\"Comment\"`\n\n\t// created\n\t// Required: true\n\tCreated int64 `json:\"Created\"`\n\n\t// created by\n\t// Required: true\n\tCreatedBy string `json:\"CreatedBy\"`\n\n\t// Id\n\t// Required: true\n\tID string `json:\"Id\"`\n\n\t// size\n\t// Required: true\n\tSize int64 `json:\"Size\"`\n\n\t// tags\n\t// Required: true\n\tTags []string `json:\"Tags\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/image/image_inspect.go",
    "content": "package image\n\nimport (\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/storage\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// RootFS returns Image's RootFS description including the layer IDs.\ntype RootFS struct {\n\tType   string   `json:\",omitempty\"`\n\tLayers []string `json:\",omitempty\"`\n}\n\n// InspectResponse contains response of Engine API:\n// GET \"/images/{name:.*}/json\"\ntype InspectResponse struct {\n\t// ID is the content-addressable ID of an image.\n\t//\n\t// This identifier is a content-addressable digest calculated from the\n\t// image's configuration (which includes the digests of layers used by\n\t// the image).\n\t//\n\t// Note that this digest differs from the `RepoDigests` below, which\n\t// holds digests of image manifests that reference the image.\n\tID string `json:\"Id\"`\n\n\t// RepoTags is a list of image names/tags in the local image cache that\n\t// reference this image.\n\t//\n\t// Multiple image tags can refer to the same image, and this list may be\n\t// empty if no tags reference the image, in which case the image is\n\t// \"untagged\", in which case it can still be referenced by its ID.\n\tRepoTags []string\n\n\t// RepoDigests is a list of content-addressable digests of locally available\n\t// image manifests that the image is referenced from. Multiple manifests can\n\t// refer to the same image.\n\t//\n\t// These digests are usually only available if the image was either pulled\n\t// from a registry, or if the image was pushed to a registry, which is when\n\t// the manifest is generated and its digest calculated.\n\tRepoDigests []string\n\n\t// Parent is the ID of the parent image.\n\t//\n\t// Depending on how the image was created, this field may be empty and\n\t// is only set for images that were built/created locally. This field\n\t// is empty if the image was pulled from an image registry.\n\tParent string\n\n\t// Comment is an optional message that can be set when committing or\n\t// importing the image.\n\tComment string\n\n\t// Created is the date and time at which the image was created, formatted in\n\t// RFC 3339 nano-seconds (time.RFC3339Nano).\n\t//\n\t// This information is only available if present in the image,\n\t// and omitted otherwise.\n\tCreated string `json:\",omitempty\"`\n\n\t// Container is the ID of the container that was used to create the image.\n\t//\n\t// Depending on how the image was created, this field may be empty.\n\t//\n\t// Deprecated: this field is omitted in API v1.45, but kept for backward compatibility.\n\tContainer string `json:\",omitempty\"`\n\n\t// ContainerConfig is an optional field containing the configuration of the\n\t// container that was last committed when creating the image.\n\t//\n\t// Previous versions of Docker builder used this field to store build cache,\n\t// and it is not in active use anymore.\n\t//\n\t// Deprecated: this field is omitted in API v1.45, but kept for backward compatibility.\n\tContainerConfig *container.Config `json:\",omitempty\"`\n\n\t// DockerVersion is the version of Docker that was used to build the image.\n\t//\n\t// Depending on how the image was created, this field may be empty.\n\tDockerVersion string\n\n\t// Author is the name of the author that was specified when committing the\n\t// image, or as specified through MAINTAINER (deprecated) in the Dockerfile.\n\tAuthor string\n\tConfig *container.Config\n\n\t// Architecture is the hardware CPU architecture that the image runs on.\n\tArchitecture string\n\n\t// Variant is the CPU architecture variant (presently ARM-only).\n\tVariant string `json:\",omitempty\"`\n\n\t// OS is the Operating System the image is built to run on.\n\tOs string\n\n\t// OsVersion is the version of the Operating System the image is built to\n\t// run on (especially for Windows).\n\tOsVersion string `json:\",omitempty\"`\n\n\t// Size is the total size of the image including all layers it is composed of.\n\tSize int64\n\n\t// VirtualSize is the total size of the image including all layers it is\n\t// composed of.\n\t//\n\t// Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.\n\tVirtualSize int64 `json:\"VirtualSize,omitempty\"`\n\n\t// GraphDriver holds information about the storage driver used to store the\n\t// container's and image's filesystem.\n\tGraphDriver storage.DriverData\n\n\t// RootFS contains information about the image's RootFS, including the\n\t// layer IDs.\n\tRootFS RootFS\n\n\t// Metadata of the image in the local cache.\n\t//\n\t// This information is local to the daemon, and not part of the image itself.\n\tMetadata Metadata\n\n\t// Descriptor is the OCI descriptor of the image target.\n\t// It's only set if the daemon provides a multi-platform image store.\n\t//\n\t// WARNING: This is experimental and may change at any time without any backward\n\t// compatibility.\n\tDescriptor *ocispec.Descriptor `json:\"Descriptor,omitempty\"`\n\n\t// Manifests is a list of image manifests available in this image.  It\n\t// provides a more detailed view of the platform-specific image manifests or\n\t// other image-attached data like build attestations.\n\t//\n\t// Only available if the daemon provides a multi-platform image store.\n\t//\n\t// WARNING: This is experimental and may change at any time without any backward\n\t// compatibility.\n\tManifests []ManifestSummary `json:\"Manifests,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/image/manifest.go",
    "content": "package image\n\nimport (\n\t\"github.com/opencontainers/go-digest\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\ntype ManifestKind string\n\nconst (\n\tManifestKindImage       ManifestKind = \"image\"\n\tManifestKindAttestation ManifestKind = \"attestation\"\n\tManifestKindUnknown     ManifestKind = \"unknown\"\n)\n\ntype ManifestSummary struct {\n\t// ID is the content-addressable ID of an image and is the same as the\n\t// digest of the image manifest.\n\t//\n\t// Required: true\n\tID string `json:\"ID\"`\n\n\t// Descriptor is the OCI descriptor of the image.\n\t//\n\t// Required: true\n\tDescriptor ocispec.Descriptor `json:\"Descriptor\"`\n\n\t// Indicates whether all the child content (image config, layers) is\n\t// fully available locally\n\t//\n\t// Required: true\n\tAvailable bool `json:\"Available\"`\n\n\t// Size is the size information of the content related to this manifest.\n\t// Note: These sizes only take the locally available content into account.\n\t//\n\t// Required: true\n\tSize struct {\n\t\t// Content is the size (in bytes) of all the locally present\n\t\t// content in the content store (e.g. image config, layers)\n\t\t// referenced by this manifest and its children.\n\t\t// This only includes blobs in the content store.\n\t\tContent int64 `json:\"Content\"`\n\n\t\t// Total is the total size (in bytes) of all the locally present\n\t\t// data (both distributable and non-distributable) that's related to\n\t\t// this manifest and its children.\n\t\t// This equal to the sum of [Content] size AND all the sizes in the\n\t\t// [Size] struct present in the Kind-specific data struct.\n\t\t// For example, for an image kind (Kind == ManifestKindImage),\n\t\t// this would include the size of the image content and unpacked\n\t\t// image snapshots ([Size.Content] + [ImageData.Size.Unpacked]).\n\t\tTotal int64 `json:\"Total\"`\n\t} `json:\"Size\"`\n\n\t// Kind is the kind of the image manifest.\n\t//\n\t// Required: true\n\tKind ManifestKind `json:\"Kind\"`\n\n\t// Fields below are specific to the kind of the image manifest.\n\n\t// Present only if Kind == ManifestKindImage.\n\tImageData *ImageProperties `json:\"ImageData,omitempty\"`\n\n\t// Present only if Kind == ManifestKindAttestation.\n\tAttestationData *AttestationProperties `json:\"AttestationData,omitempty\"`\n}\n\ntype ImageProperties struct {\n\t// Platform is the OCI platform object describing the platform of the image.\n\t//\n\t// Required: true\n\tPlatform ocispec.Platform `json:\"Platform\"`\n\n\tSize struct {\n\t\t// Unpacked is the size (in bytes) of the locally unpacked\n\t\t// (uncompressed) image content that's directly usable by the containers\n\t\t// running this image.\n\t\t// It's independent of the distributable content - e.g.\n\t\t// the image might still have an unpacked data that's still used by\n\t\t// some container even when the distributable/compressed content is\n\t\t// already gone.\n\t\t//\n\t\t// Required: true\n\t\tUnpacked int64 `json:\"Unpacked\"`\n\t}\n\n\t// Containers is an array containing the IDs of the containers that are\n\t// using this image.\n\t//\n\t// Required: true\n\tContainers []string `json:\"Containers\"`\n}\n\ntype AttestationProperties struct {\n\t// For is the digest of the image manifest that this attestation is for.\n\tFor digest.Digest `json:\"For\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/image/opts.go",
    "content": "package image\n\nimport (\n\t\"context\"\n\t\"io\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// ImportSource holds source information for ImageImport\ntype ImportSource struct {\n\tSource     io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to \"-\" to leverage this.\n\tSourceName string    // SourceName is the name of the image to pull. Set to \"-\" to leverage the Source attribute.\n}\n\n// ImportOptions holds information to import images from the client host.\ntype ImportOptions struct {\n\tTag      string   // Tag is the name to tag this image with. This attribute is deprecated.\n\tMessage  string   // Message is the message to tag the image with\n\tChanges  []string // Changes are the raw changes to apply to this image\n\tPlatform string   // Platform is the target platform of the image\n}\n\n// CreateOptions holds information to create images.\ntype CreateOptions struct {\n\tRegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry.\n\tPlatform     string // Platform is the target platform of the image if it needs to be pulled from the registry.\n}\n\n// PullOptions holds information to pull images.\ntype PullOptions struct {\n\tAll          bool\n\tRegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry\n\n\t// PrivilegeFunc is a function that clients can supply to retry operations\n\t// after getting an authorization error. This function returns the registry\n\t// authentication header value in base64 encoded format, or an error if the\n\t// privilege request fails.\n\t//\n\t// For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig].\n\tPrivilegeFunc func(context.Context) (string, error)\n\tPlatform      string\n}\n\n// PushOptions holds information to push images.\ntype PushOptions struct {\n\tAll          bool\n\tRegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry\n\n\t// PrivilegeFunc is a function that clients can supply to retry operations\n\t// after getting an authorization error. This function returns the registry\n\t// authentication header value in base64 encoded format, or an error if the\n\t// privilege request fails.\n\t//\n\t// For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig].\n\tPrivilegeFunc func(context.Context) (string, error)\n\n\t// Platform is an optional field that selects a specific platform to push\n\t// when the image is a multi-platform image.\n\t// Using this will only push a single platform-specific manifest.\n\tPlatform *ocispec.Platform `json:\",omitempty\"`\n}\n\n// ListOptions holds parameters to list images with.\ntype ListOptions struct {\n\t// All controls whether all images in the graph are filtered, or just\n\t// the heads.\n\tAll bool\n\n\t// Filters is a JSON-encoded set of filter arguments.\n\tFilters filters.Args\n\n\t// SharedSize indicates whether the shared size of images should be computed.\n\tSharedSize bool\n\n\t// ContainerCount indicates whether container count should be computed.\n\tContainerCount bool\n\n\t// Manifests indicates whether the image manifests should be returned.\n\tManifests bool\n}\n\n// RemoveOptions holds parameters to remove images.\ntype RemoveOptions struct {\n\tForce         bool\n\tPruneChildren bool\n}\n\n// HistoryOptions holds parameters to get image history.\ntype HistoryOptions struct {\n\t// Platform from the manifest list to use for history.\n\tPlatform *ocispec.Platform\n}\n\n// LoadOptions holds parameters to load images.\ntype LoadOptions struct {\n\t// Quiet suppresses progress output\n\tQuiet bool\n\n\t// Platforms selects the platforms to load if the image is a\n\t// multi-platform image and has multiple variants.\n\tPlatforms []ocispec.Platform\n}\n\ntype InspectOptions struct {\n\t// Manifests returns the image manifests.\n\tManifests bool\n}\n\n// SaveOptions holds parameters to save images.\ntype SaveOptions struct {\n\t// Platforms selects the platforms to save if the image is a\n\t// multi-platform image and has multiple variants.\n\tPlatforms []ocispec.Platform\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/image/summary.go",
    "content": "package image\n\nimport ocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n\ntype Summary struct {\n\n\t// Number of containers using this image. Includes both stopped and running\n\t// containers.\n\t//\n\t// This size is not calculated by default, and depends on which API endpoint\n\t// is used. `-1` indicates that the value has not been set / calculated.\n\t//\n\t// Required: true\n\tContainers int64 `json:\"Containers\"`\n\n\t// Date and time at which the image was created as a Unix timestamp\n\t// (number of seconds since EPOCH).\n\t//\n\t// Required: true\n\tCreated int64 `json:\"Created\"`\n\n\t// ID is the content-addressable ID of an image.\n\t//\n\t// This identifier is a content-addressable digest calculated from the\n\t// image's configuration (which includes the digests of layers used by\n\t// the image).\n\t//\n\t// Note that this digest differs from the `RepoDigests` below, which\n\t// holds digests of image manifests that reference the image.\n\t//\n\t// Required: true\n\tID string `json:\"Id\"`\n\n\t// User-defined key/value metadata.\n\t// Required: true\n\tLabels map[string]string `json:\"Labels\"`\n\n\t// ID of the parent image.\n\t//\n\t// Depending on how the image was created, this field may be empty and\n\t// is only set for images that were built/created locally. This field\n\t// is empty if the image was pulled from an image registry.\n\t//\n\t// Required: true\n\tParentID string `json:\"ParentId\"`\n\n\t// Descriptor is the OCI descriptor of the image target.\n\t// It's only set if the daemon provides a multi-platform image store.\n\t//\n\t// WARNING: This is experimental and may change at any time without any backward\n\t// compatibility.\n\tDescriptor *ocispec.Descriptor `json:\"Descriptor,omitempty\"`\n\n\t// Manifests is a list of image manifests available in this image.  It\n\t// provides a more detailed view of the platform-specific image manifests or\n\t// other image-attached data like build attestations.\n\t//\n\t// WARNING: This is experimental and may change at any time without any backward\n\t// compatibility.\n\tManifests []ManifestSummary `json:\"Manifests,omitempty\"`\n\n\t// List of content-addressable digests of locally available image manifests\n\t// that the image is referenced from. Multiple manifests can refer to the\n\t// same image.\n\t//\n\t// These digests are usually only available if the image was either pulled\n\t// from a registry, or if the image was pushed to a registry, which is when\n\t// the manifest is generated and its digest calculated.\n\t//\n\t// Required: true\n\tRepoDigests []string `json:\"RepoDigests\"`\n\n\t// List of image names/tags in the local image cache that reference this\n\t// image.\n\t//\n\t// Multiple image tags can refer to the same image, and this list may be\n\t// empty if no tags reference the image, in which case the image is\n\t// \"untagged\", in which case it can still be referenced by its ID.\n\t//\n\t// Required: true\n\tRepoTags []string `json:\"RepoTags\"`\n\n\t// Total size of image layers that are shared between this image and other\n\t// images.\n\t//\n\t// This size is not calculated by default. `-1` indicates that the value\n\t// has not been set / calculated.\n\t//\n\t// Required: true\n\tSharedSize int64 `json:\"SharedSize\"`\n\n\t// Total size of the image including all layers it is composed of.\n\t//\n\t// Required: true\n\tSize int64 `json:\"Size\"`\n\n\t// Total size of the image including all layers it is composed of.\n\t//\n\t// Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead.\n\tVirtualSize int64 `json:\"VirtualSize,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/mount/mount.go",
    "content": "package mount // import \"github.com/docker/docker/api/types/mount\"\n\nimport (\n\t\"os\"\n)\n\n// Type represents the type of a mount.\ntype Type string\n\n// Type constants\nconst (\n\t// TypeBind is the type for mounting host dir\n\tTypeBind Type = \"bind\"\n\t// TypeVolume is the type for remote storage volumes\n\tTypeVolume Type = \"volume\"\n\t// TypeTmpfs is the type for mounting tmpfs\n\tTypeTmpfs Type = \"tmpfs\"\n\t// TypeNamedPipe is the type for mounting Windows named pipes\n\tTypeNamedPipe Type = \"npipe\"\n\t// TypeCluster is the type for Swarm Cluster Volumes.\n\tTypeCluster Type = \"cluster\"\n\t// TypeImage is the type for mounting another image's filesystem\n\tTypeImage Type = \"image\"\n)\n\n// Mount represents a mount (volume).\ntype Mount struct {\n\tType Type `json:\",omitempty\"`\n\t// Source specifies the name of the mount. Depending on mount type, this\n\t// may be a volume name or a host path, or even ignored.\n\t// Source is not supported for tmpfs (must be an empty value)\n\tSource      string      `json:\",omitempty\"`\n\tTarget      string      `json:\",omitempty\"`\n\tReadOnly    bool        `json:\",omitempty\"` // attempts recursive read-only if possible\n\tConsistency Consistency `json:\",omitempty\"`\n\n\tBindOptions    *BindOptions    `json:\",omitempty\"`\n\tVolumeOptions  *VolumeOptions  `json:\",omitempty\"`\n\tImageOptions   *ImageOptions   `json:\",omitempty\"`\n\tTmpfsOptions   *TmpfsOptions   `json:\",omitempty\"`\n\tClusterOptions *ClusterOptions `json:\",omitempty\"`\n}\n\n// Propagation represents the propagation of a mount.\ntype Propagation string\n\nconst (\n\t// PropagationRPrivate RPRIVATE\n\tPropagationRPrivate Propagation = \"rprivate\"\n\t// PropagationPrivate PRIVATE\n\tPropagationPrivate Propagation = \"private\"\n\t// PropagationRShared RSHARED\n\tPropagationRShared Propagation = \"rshared\"\n\t// PropagationShared SHARED\n\tPropagationShared Propagation = \"shared\"\n\t// PropagationRSlave RSLAVE\n\tPropagationRSlave Propagation = \"rslave\"\n\t// PropagationSlave SLAVE\n\tPropagationSlave Propagation = \"slave\"\n)\n\n// Propagations is the list of all valid mount propagations\nvar Propagations = []Propagation{\n\tPropagationRPrivate,\n\tPropagationPrivate,\n\tPropagationRShared,\n\tPropagationShared,\n\tPropagationRSlave,\n\tPropagationSlave,\n}\n\n// Consistency represents the consistency requirements of a mount.\ntype Consistency string\n\nconst (\n\t// ConsistencyFull guarantees bind mount-like consistency\n\tConsistencyFull Consistency = \"consistent\"\n\t// ConsistencyCached mounts can cache read data and FS structure\n\tConsistencyCached Consistency = \"cached\"\n\t// ConsistencyDelegated mounts can cache read and written data and structure\n\tConsistencyDelegated Consistency = \"delegated\"\n\t// ConsistencyDefault provides \"consistent\" behavior unless overridden\n\tConsistencyDefault Consistency = \"default\"\n)\n\n// BindOptions defines options specific to mounts of type \"bind\".\ntype BindOptions struct {\n\tPropagation      Propagation `json:\",omitempty\"`\n\tNonRecursive     bool        `json:\",omitempty\"`\n\tCreateMountpoint bool        `json:\",omitempty\"`\n\t// ReadOnlyNonRecursive makes the mount non-recursively read-only, but still leaves the mount recursive\n\t// (unless NonRecursive is set to true in conjunction).\n\tReadOnlyNonRecursive bool `json:\",omitempty\"`\n\t// ReadOnlyForceRecursive raises an error if the mount cannot be made recursively read-only.\n\tReadOnlyForceRecursive bool `json:\",omitempty\"`\n}\n\n// VolumeOptions represents the options for a mount of type volume.\ntype VolumeOptions struct {\n\tNoCopy       bool              `json:\",omitempty\"`\n\tLabels       map[string]string `json:\",omitempty\"`\n\tSubpath      string            `json:\",omitempty\"`\n\tDriverConfig *Driver           `json:\",omitempty\"`\n}\n\ntype ImageOptions struct {\n\tSubpath string `json:\",omitempty\"`\n}\n\n// Driver represents a volume driver.\ntype Driver struct {\n\tName    string            `json:\",omitempty\"`\n\tOptions map[string]string `json:\",omitempty\"`\n}\n\n// TmpfsOptions defines options specific to mounts of type \"tmpfs\".\ntype TmpfsOptions struct {\n\t// Size sets the size of the tmpfs, in bytes.\n\t//\n\t// This will be converted to an operating system specific value\n\t// depending on the host. For example, on linux, it will be converted to\n\t// use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with\n\t// docker, uses a straight byte value.\n\t//\n\t// Percentages are not supported.\n\tSizeBytes int64 `json:\",omitempty\"`\n\t// Mode of the tmpfs upon creation\n\tMode os.FileMode `json:\",omitempty\"`\n\t// Options to be passed to the tmpfs mount. An array of arrays. Flag\n\t// options should be provided as 1-length arrays. Other types should be\n\t// provided as 2-length arrays, where the first item is the key and the\n\t// second the value.\n\tOptions [][]string `json:\",omitempty\"`\n\t// TODO(stevvooe): There are several more tmpfs flags, specified in the\n\t// daemon, that are accepted. Only the most basic are added for now.\n\t//\n\t// From https://github.com/moby/sys/blob/mount/v0.1.1/mount/flags.go#L47-L56\n\t//\n\t// var validFlags = map[string]bool{\n\t// \t\"\":          true,\n\t// \t\"size\":      true, X\n\t// \t\"mode\":      true, X\n\t// \t\"uid\":       true,\n\t// \t\"gid\":       true,\n\t// \t\"nr_inodes\": true,\n\t// \t\"nr_blocks\": true,\n\t// \t\"mpol\":      true,\n\t// }\n\t//\n\t// Some of these may be straightforward to add, but others, such as\n\t// uid/gid have implications in a clustered system.\n}\n\n// ClusterOptions specifies options for a Cluster volume.\ntype ClusterOptions struct {\n\t// intentionally empty\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/network/create_response.go",
    "content": "package network\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// CreateResponse NetworkCreateResponse\n//\n// OK response to NetworkCreate operation\n// swagger:model CreateResponse\ntype CreateResponse struct {\n\n\t// The ID of the created network.\n\t// Required: true\n\tID string `json:\"Id\"`\n\n\t// Warnings encountered when creating the container\n\t// Required: true\n\tWarning string `json:\"Warning\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/network/endpoint.go",
    "content": "package network\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/docker/docker/internal/multierror\"\n)\n\n// EndpointSettings stores the network endpoint details\ntype EndpointSettings struct {\n\t// Configurations\n\tIPAMConfig *EndpointIPAMConfig\n\tLinks      []string\n\tAliases    []string // Aliases holds the list of extra, user-specified DNS names for this endpoint.\n\t// MacAddress may be used to specify a MAC address when the container is created.\n\t// Once the container is running, it becomes operational data (it may contain a\n\t// generated address).\n\tMacAddress string\n\tDriverOpts map[string]string\n\n\t// GwPriority determines which endpoint will provide the default gateway\n\t// for the container. The endpoint with the highest priority will be used.\n\t// If multiple endpoints have the same priority, they are lexicographically\n\t// sorted based on their network name, and the one that sorts first is picked.\n\tGwPriority int\n\t// Operational data\n\tNetworkID           string\n\tEndpointID          string\n\tGateway             string\n\tIPAddress           string\n\tIPPrefixLen         int\n\tIPv6Gateway         string\n\tGlobalIPv6Address   string\n\tGlobalIPv6PrefixLen int\n\t// DNSNames holds all the (non fully qualified) DNS names associated to this endpoint. First entry is used to\n\t// generate PTR records.\n\tDNSNames []string\n}\n\n// Copy makes a deep copy of `EndpointSettings`\nfunc (es *EndpointSettings) Copy() *EndpointSettings {\n\tepCopy := *es\n\tif es.IPAMConfig != nil {\n\t\tepCopy.IPAMConfig = es.IPAMConfig.Copy()\n\t}\n\n\tif es.Links != nil {\n\t\tlinks := make([]string, 0, len(es.Links))\n\t\tepCopy.Links = append(links, es.Links...)\n\t}\n\n\tif es.Aliases != nil {\n\t\taliases := make([]string, 0, len(es.Aliases))\n\t\tepCopy.Aliases = append(aliases, es.Aliases...)\n\t}\n\n\tif len(es.DNSNames) > 0 {\n\t\tepCopy.DNSNames = make([]string, len(es.DNSNames))\n\t\tcopy(epCopy.DNSNames, es.DNSNames)\n\t}\n\n\treturn &epCopy\n}\n\n// EndpointIPAMConfig represents IPAM configurations for the endpoint\ntype EndpointIPAMConfig struct {\n\tIPv4Address  string   `json:\",omitempty\"`\n\tIPv6Address  string   `json:\",omitempty\"`\n\tLinkLocalIPs []string `json:\",omitempty\"`\n}\n\n// Copy makes a copy of the endpoint ipam config\nfunc (cfg *EndpointIPAMConfig) Copy() *EndpointIPAMConfig {\n\tcfgCopy := *cfg\n\tcfgCopy.LinkLocalIPs = make([]string, 0, len(cfg.LinkLocalIPs))\n\tcfgCopy.LinkLocalIPs = append(cfgCopy.LinkLocalIPs, cfg.LinkLocalIPs...)\n\treturn &cfgCopy\n}\n\n// NetworkSubnet describes a user-defined subnet for a specific network. It's only used to validate if an\n// EndpointIPAMConfig is valid for a specific network.\ntype NetworkSubnet interface {\n\t// Contains checks whether the NetworkSubnet contains [addr].\n\tContains(addr net.IP) bool\n\t// IsStatic checks whether the subnet was statically allocated (ie. user-defined).\n\tIsStatic() bool\n}\n\n// IsInRange checks whether static IP addresses are valid in a specific network.\nfunc (cfg *EndpointIPAMConfig) IsInRange(v4Subnets []NetworkSubnet, v6Subnets []NetworkSubnet) error {\n\tvar errs []error\n\n\tif err := validateEndpointIPAddress(cfg.IPv4Address, v4Subnets); err != nil {\n\t\terrs = append(errs, err)\n\t}\n\tif err := validateEndpointIPAddress(cfg.IPv6Address, v6Subnets); err != nil {\n\t\terrs = append(errs, err)\n\t}\n\n\treturn multierror.Join(errs...)\n}\n\nfunc validateEndpointIPAddress(epAddr string, ipamSubnets []NetworkSubnet) error {\n\tif epAddr == \"\" {\n\t\treturn nil\n\t}\n\n\tvar staticSubnet bool\n\tparsedAddr := net.ParseIP(epAddr)\n\tfor _, subnet := range ipamSubnets {\n\t\tif subnet.IsStatic() {\n\t\t\tstaticSubnet = true\n\t\t\tif subnet.Contains(parsedAddr) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\n\tif staticSubnet {\n\t\treturn fmt.Errorf(\"no configured subnet or ip-range contain the IP address %s\", epAddr)\n\t}\n\n\treturn errors.New(\"user specified IP address is supported only when connecting to networks with user configured subnets\")\n}\n\n// Validate checks whether cfg is valid.\nfunc (cfg *EndpointIPAMConfig) Validate() error {\n\tif cfg == nil {\n\t\treturn nil\n\t}\n\n\tvar errs []error\n\n\tif cfg.IPv4Address != \"\" {\n\t\tif addr := net.ParseIP(cfg.IPv4Address); addr == nil || addr.To4() == nil || addr.IsUnspecified() {\n\t\t\terrs = append(errs, fmt.Errorf(\"invalid IPv4 address: %s\", cfg.IPv4Address))\n\t\t}\n\t}\n\tif cfg.IPv6Address != \"\" {\n\t\tif addr := net.ParseIP(cfg.IPv6Address); addr == nil || addr.To4() != nil || addr.IsUnspecified() {\n\t\t\terrs = append(errs, fmt.Errorf(\"invalid IPv6 address: %s\", cfg.IPv6Address))\n\t\t}\n\t}\n\tfor _, addr := range cfg.LinkLocalIPs {\n\t\tif parsed := net.ParseIP(addr); parsed == nil || parsed.IsUnspecified() {\n\t\t\terrs = append(errs, fmt.Errorf(\"invalid link-local IP address: %s\", addr))\n\t\t}\n\t}\n\n\treturn multierror.Join(errs...)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/network/ipam.go",
    "content": "package network\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/netip\"\n\n\t\"github.com/docker/docker/internal/multierror\"\n)\n\n// IPAM represents IP Address Management\ntype IPAM struct {\n\tDriver  string\n\tOptions map[string]string // Per network IPAM driver options\n\tConfig  []IPAMConfig\n}\n\n// IPAMConfig represents IPAM configurations\ntype IPAMConfig struct {\n\tSubnet     string            `json:\",omitempty\"`\n\tIPRange    string            `json:\",omitempty\"`\n\tGateway    string            `json:\",omitempty\"`\n\tAuxAddress map[string]string `json:\"AuxiliaryAddresses,omitempty\"`\n}\n\ntype ipFamily string\n\nconst (\n\tip4 ipFamily = \"IPv4\"\n\tip6 ipFamily = \"IPv6\"\n)\n\n// ValidateIPAM checks whether the network's IPAM passed as argument is valid. It returns a joinError of the list of\n// errors found.\nfunc ValidateIPAM(ipam *IPAM, enableIPv6 bool) error {\n\tif ipam == nil {\n\t\treturn nil\n\t}\n\n\tvar errs []error\n\tfor _, cfg := range ipam.Config {\n\t\tsubnet, err := netip.ParsePrefix(cfg.Subnet)\n\t\tif err != nil {\n\t\t\terrs = append(errs, fmt.Errorf(\"invalid subnet %s: invalid CIDR block notation\", cfg.Subnet))\n\t\t\tcontinue\n\t\t}\n\t\tsubnetFamily := ip4\n\t\tif subnet.Addr().Is6() {\n\t\t\tsubnetFamily = ip6\n\t\t}\n\n\t\tif !enableIPv6 && subnetFamily == ip6 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif subnet != subnet.Masked() {\n\t\t\terrs = append(errs, fmt.Errorf(\"invalid subnet %s: it should be %s\", subnet, subnet.Masked()))\n\t\t}\n\n\t\tif ipRangeErrs := validateIPRange(cfg.IPRange, subnet, subnetFamily); len(ipRangeErrs) > 0 {\n\t\t\terrs = append(errs, ipRangeErrs...)\n\t\t}\n\n\t\tif err := validateAddress(cfg.Gateway, subnet, subnetFamily); err != nil {\n\t\t\terrs = append(errs, fmt.Errorf(\"invalid gateway %s: %w\", cfg.Gateway, err))\n\t\t}\n\n\t\tfor auxName, aux := range cfg.AuxAddress {\n\t\t\tif err := validateAddress(aux, subnet, subnetFamily); err != nil {\n\t\t\t\terrs = append(errs, fmt.Errorf(\"invalid auxiliary address %s: %w\", auxName, err))\n\t\t\t}\n\t\t}\n\t}\n\n\tif err := multierror.Join(errs...); err != nil {\n\t\treturn fmt.Errorf(\"invalid network config:\\n%w\", err)\n\t}\n\n\treturn nil\n}\n\nfunc validateIPRange(ipRange string, subnet netip.Prefix, subnetFamily ipFamily) []error {\n\tif ipRange == \"\" {\n\t\treturn nil\n\t}\n\tprefix, err := netip.ParsePrefix(ipRange)\n\tif err != nil {\n\t\treturn []error{fmt.Errorf(\"invalid ip-range %s: invalid CIDR block notation\", ipRange)}\n\t}\n\tfamily := ip4\n\tif prefix.Addr().Is6() {\n\t\tfamily = ip6\n\t}\n\n\tif family != subnetFamily {\n\t\treturn []error{fmt.Errorf(\"invalid ip-range %s: parent subnet is an %s block\", ipRange, subnetFamily)}\n\t}\n\n\tvar errs []error\n\tif prefix.Bits() < subnet.Bits() {\n\t\terrs = append(errs, fmt.Errorf(\"invalid ip-range %s: CIDR block is bigger than its parent subnet %s\", ipRange, subnet))\n\t}\n\tif prefix != prefix.Masked() {\n\t\terrs = append(errs, fmt.Errorf(\"invalid ip-range %s: it should be %s\", prefix, prefix.Masked()))\n\t}\n\tif !subnet.Overlaps(prefix) {\n\t\terrs = append(errs, fmt.Errorf(\"invalid ip-range %s: parent subnet %s doesn't contain ip-range\", ipRange, subnet))\n\t}\n\n\treturn errs\n}\n\nfunc validateAddress(address string, subnet netip.Prefix, subnetFamily ipFamily) error {\n\tif address == \"\" {\n\t\treturn nil\n\t}\n\taddr, err := netip.ParseAddr(address)\n\tif err != nil {\n\t\treturn errors.New(\"invalid address\")\n\t}\n\tfamily := ip4\n\tif addr.Is6() {\n\t\tfamily = ip6\n\t}\n\n\tif family != subnetFamily {\n\t\treturn fmt.Errorf(\"parent subnet is an %s block\", subnetFamily)\n\t}\n\tif !subnet.Contains(addr) {\n\t\treturn fmt.Errorf(\"parent subnet %s doesn't contain this address\", subnet)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/network/network.go",
    "content": "package network // import \"github.com/docker/docker/api/types/network\"\n\nimport (\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n)\n\nconst (\n\t// NetworkDefault is a platform-independent alias to choose the platform-specific default network stack.\n\tNetworkDefault = \"default\"\n\t// NetworkHost is the name of the predefined network used when the NetworkMode host is selected (only available on Linux)\n\tNetworkHost = \"host\"\n\t// NetworkNone is the name of the predefined network used when the NetworkMode none is selected (available on both Linux and Windows)\n\tNetworkNone = \"none\"\n\t// NetworkBridge is the name of the default network on Linux\n\tNetworkBridge = \"bridge\"\n\t// NetworkNat is the name of the default network on Windows\n\tNetworkNat = \"nat\"\n)\n\n// CreateRequest is the request message sent to the server for network create call.\ntype CreateRequest struct {\n\tCreateOptions\n\tName string // Name is the requested name of the network.\n\n\t// Deprecated: CheckDuplicate is deprecated since API v1.44, but it defaults to true when sent by the client\n\t// package to older daemons.\n\tCheckDuplicate *bool `json:\",omitempty\"`\n}\n\n// CreateOptions holds options to create a network.\ntype CreateOptions struct {\n\tDriver     string            // Driver is the driver-name used to create the network (e.g. `bridge`, `overlay`)\n\tScope      string            // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level).\n\tEnableIPv4 *bool             `json:\",omitempty\"` // EnableIPv4 represents whether to enable IPv4.\n\tEnableIPv6 *bool             `json:\",omitempty\"` // EnableIPv6 represents whether to enable IPv6.\n\tIPAM       *IPAM             // IPAM is the network's IP Address Management.\n\tInternal   bool              // Internal represents if the network is used internal only.\n\tAttachable bool              // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode.\n\tIngress    bool              // Ingress indicates the network is providing the routing-mesh for the swarm cluster.\n\tConfigOnly bool              // ConfigOnly creates a config-only network. Config-only networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services.\n\tConfigFrom *ConfigReference  // ConfigFrom specifies the source which will provide the configuration for this network. The specified network must be a config-only network; see [CreateOptions.ConfigOnly].\n\tOptions    map[string]string // Options specifies the network-specific options to use for when creating the network.\n\tLabels     map[string]string // Labels holds metadata specific to the network being created.\n}\n\n// ListOptions holds parameters to filter the list of networks with.\ntype ListOptions struct {\n\tFilters filters.Args\n}\n\n// InspectOptions holds parameters to inspect network.\ntype InspectOptions struct {\n\tScope   string\n\tVerbose bool\n}\n\n// ConnectOptions represents the data to be used to connect a container to the\n// network.\ntype ConnectOptions struct {\n\tContainer      string\n\tEndpointConfig *EndpointSettings `json:\",omitempty\"`\n}\n\n// DisconnectOptions represents the data to be used to disconnect a container\n// from the network.\ntype DisconnectOptions struct {\n\tContainer string\n\tForce     bool\n}\n\n// Inspect is the body of the \"get network\" http response message.\ntype Inspect struct {\n\tName       string                      // Name is the name of the network\n\tID         string                      `json:\"Id\"` // ID uniquely identifies a network on a single machine\n\tCreated    time.Time                   // Created is the time the network created\n\tScope      string                      // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level)\n\tDriver     string                      // Driver is the Driver name used to create the network (e.g. `bridge`, `overlay`)\n\tEnableIPv4 bool                        // EnableIPv4 represents whether IPv4 is enabled\n\tEnableIPv6 bool                        // EnableIPv6 represents whether IPv6 is enabled\n\tIPAM       IPAM                        // IPAM is the network's IP Address Management\n\tInternal   bool                        // Internal represents if the network is used internal only\n\tAttachable bool                        // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode.\n\tIngress    bool                        // Ingress indicates the network is providing the routing-mesh for the swarm cluster.\n\tConfigFrom ConfigReference             // ConfigFrom specifies the source which will provide the configuration for this network.\n\tConfigOnly bool                        // ConfigOnly networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services.\n\tContainers map[string]EndpointResource // Containers contains endpoints belonging to the network\n\tOptions    map[string]string           // Options holds the network specific options to use for when creating the network\n\tLabels     map[string]string           // Labels holds metadata specific to the network being created\n\tPeers      []PeerInfo                  `json:\",omitempty\"` // List of peer nodes for an overlay network\n\tServices   map[string]ServiceInfo      `json:\",omitempty\"`\n}\n\n// Summary is used as response when listing networks. It currently is an alias\n// for [Inspect], but may diverge in the future, as not all information may\n// be included when listing networks.\ntype Summary = Inspect\n\n// Address represents an IP address\ntype Address struct {\n\tAddr      string\n\tPrefixLen int\n}\n\n// PeerInfo represents one peer of an overlay network\ntype PeerInfo struct {\n\tName string\n\tIP   string\n}\n\n// Task carries the information about one backend task\ntype Task struct {\n\tName       string\n\tEndpointID string\n\tEndpointIP string\n\tInfo       map[string]string\n}\n\n// ServiceInfo represents service parameters with the list of service's tasks\ntype ServiceInfo struct {\n\tVIP          string\n\tPorts        []string\n\tLocalLBIndex int\n\tTasks        []Task\n}\n\n// EndpointResource contains network resources allocated and used for a\n// container in a network.\ntype EndpointResource struct {\n\tName        string\n\tEndpointID  string\n\tMacAddress  string\n\tIPv4Address string\n\tIPv6Address string\n}\n\n// NetworkingConfig represents the container's networking configuration for each of its interfaces\n// Carries the networking configs specified in the `docker run` and `docker network connect` commands\ntype NetworkingConfig struct {\n\tEndpointsConfig map[string]*EndpointSettings // Endpoint configs for each connecting network\n}\n\n// ConfigReference specifies the source which provides a network's configuration\ntype ConfigReference struct {\n\tNetwork string\n}\n\nvar acceptedFilters = map[string]bool{\n\t\"dangling\": true,\n\t\"driver\":   true,\n\t\"id\":       true,\n\t\"label\":    true,\n\t\"name\":     true,\n\t\"scope\":    true,\n\t\"type\":     true,\n}\n\n// ValidateFilters validates the list of filter args with the available filters.\nfunc ValidateFilters(filter filters.Args) error {\n\treturn filter.Validate(acceptedFilters)\n}\n\n// PruneReport contains the response for Engine API:\n// POST \"/networks/prune\"\ntype PruneReport struct {\n\tNetworksDeleted []string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/plugin.go",
    "content": "package types\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// Plugin A plugin for the Engine API\n// swagger:model Plugin\ntype Plugin struct {\n\n\t// config\n\t// Required: true\n\tConfig PluginConfig `json:\"Config\"`\n\n\t// True if the plugin is running. False if the plugin is not running, only installed.\n\t// Required: true\n\tEnabled bool `json:\"Enabled\"`\n\n\t// Id\n\tID string `json:\"Id,omitempty\"`\n\n\t// name\n\t// Required: true\n\tName string `json:\"Name\"`\n\n\t// plugin remote reference used to push/pull the plugin\n\tPluginReference string `json:\"PluginReference,omitempty\"`\n\n\t// settings\n\t// Required: true\n\tSettings PluginSettings `json:\"Settings\"`\n}\n\n// PluginConfig The config of a plugin.\n// swagger:model PluginConfig\ntype PluginConfig struct {\n\n\t// args\n\t// Required: true\n\tArgs PluginConfigArgs `json:\"Args\"`\n\n\t// description\n\t// Required: true\n\tDescription string `json:\"Description\"`\n\n\t// Docker Version used to create the plugin\n\tDockerVersion string `json:\"DockerVersion,omitempty\"`\n\n\t// documentation\n\t// Required: true\n\tDocumentation string `json:\"Documentation\"`\n\n\t// entrypoint\n\t// Required: true\n\tEntrypoint []string `json:\"Entrypoint\"`\n\n\t// env\n\t// Required: true\n\tEnv []PluginEnv `json:\"Env\"`\n\n\t// interface\n\t// Required: true\n\tInterface PluginConfigInterface `json:\"Interface\"`\n\n\t// ipc host\n\t// Required: true\n\tIpcHost bool `json:\"IpcHost\"`\n\n\t// linux\n\t// Required: true\n\tLinux PluginConfigLinux `json:\"Linux\"`\n\n\t// mounts\n\t// Required: true\n\tMounts []PluginMount `json:\"Mounts\"`\n\n\t// network\n\t// Required: true\n\tNetwork PluginConfigNetwork `json:\"Network\"`\n\n\t// pid host\n\t// Required: true\n\tPidHost bool `json:\"PidHost\"`\n\n\t// propagated mount\n\t// Required: true\n\tPropagatedMount string `json:\"PropagatedMount\"`\n\n\t// user\n\tUser PluginConfigUser `json:\"User,omitempty\"`\n\n\t// work dir\n\t// Required: true\n\tWorkDir string `json:\"WorkDir\"`\n\n\t// rootfs\n\tRootfs *PluginConfigRootfs `json:\"rootfs,omitempty\"`\n}\n\n// PluginConfigArgs plugin config args\n// swagger:model PluginConfigArgs\ntype PluginConfigArgs struct {\n\n\t// description\n\t// Required: true\n\tDescription string `json:\"Description\"`\n\n\t// name\n\t// Required: true\n\tName string `json:\"Name\"`\n\n\t// settable\n\t// Required: true\n\tSettable []string `json:\"Settable\"`\n\n\t// value\n\t// Required: true\n\tValue []string `json:\"Value\"`\n}\n\n// PluginConfigInterface The interface between Docker and the plugin\n// swagger:model PluginConfigInterface\ntype PluginConfigInterface struct {\n\n\t// Protocol to use for clients connecting to the plugin.\n\tProtocolScheme string `json:\"ProtocolScheme,omitempty\"`\n\n\t// socket\n\t// Required: true\n\tSocket string `json:\"Socket\"`\n\n\t// types\n\t// Required: true\n\tTypes []PluginInterfaceType `json:\"Types\"`\n}\n\n// PluginConfigLinux plugin config linux\n// swagger:model PluginConfigLinux\ntype PluginConfigLinux struct {\n\n\t// allow all devices\n\t// Required: true\n\tAllowAllDevices bool `json:\"AllowAllDevices\"`\n\n\t// capabilities\n\t// Required: true\n\tCapabilities []string `json:\"Capabilities\"`\n\n\t// devices\n\t// Required: true\n\tDevices []PluginDevice `json:\"Devices\"`\n}\n\n// PluginConfigNetwork plugin config network\n// swagger:model PluginConfigNetwork\ntype PluginConfigNetwork struct {\n\n\t// type\n\t// Required: true\n\tType string `json:\"Type\"`\n}\n\n// PluginConfigRootfs plugin config rootfs\n// swagger:model PluginConfigRootfs\ntype PluginConfigRootfs struct {\n\n\t// diff ids\n\tDiffIds []string `json:\"diff_ids\"`\n\n\t// type\n\tType string `json:\"type,omitempty\"`\n}\n\n// PluginConfigUser plugin config user\n// swagger:model PluginConfigUser\ntype PluginConfigUser struct {\n\n\t// g ID\n\tGID uint32 `json:\"GID,omitempty\"`\n\n\t// UID\n\tUID uint32 `json:\"UID,omitempty\"`\n}\n\n// PluginSettings Settings that can be modified by users.\n// swagger:model PluginSettings\ntype PluginSettings struct {\n\n\t// args\n\t// Required: true\n\tArgs []string `json:\"Args\"`\n\n\t// devices\n\t// Required: true\n\tDevices []PluginDevice `json:\"Devices\"`\n\n\t// env\n\t// Required: true\n\tEnv []string `json:\"Env\"`\n\n\t// mounts\n\t// Required: true\n\tMounts []PluginMount `json:\"Mounts\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/plugin_device.go",
    "content": "package types\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// PluginDevice plugin device\n// swagger:model PluginDevice\ntype PluginDevice struct {\n\n\t// description\n\t// Required: true\n\tDescription string `json:\"Description\"`\n\n\t// name\n\t// Required: true\n\tName string `json:\"Name\"`\n\n\t// path\n\t// Required: true\n\tPath *string `json:\"Path\"`\n\n\t// settable\n\t// Required: true\n\tSettable []string `json:\"Settable\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/plugin_env.go",
    "content": "package types\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// PluginEnv plugin env\n// swagger:model PluginEnv\ntype PluginEnv struct {\n\n\t// description\n\t// Required: true\n\tDescription string `json:\"Description\"`\n\n\t// name\n\t// Required: true\n\tName string `json:\"Name\"`\n\n\t// settable\n\t// Required: true\n\tSettable []string `json:\"Settable\"`\n\n\t// value\n\t// Required: true\n\tValue *string `json:\"Value\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/plugin_interface_type.go",
    "content": "package types\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// PluginInterfaceType plugin interface type\n// swagger:model PluginInterfaceType\ntype PluginInterfaceType struct {\n\n\t// capability\n\t// Required: true\n\tCapability string `json:\"Capability\"`\n\n\t// prefix\n\t// Required: true\n\tPrefix string `json:\"Prefix\"`\n\n\t// version\n\t// Required: true\n\tVersion string `json:\"Version\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/plugin_mount.go",
    "content": "package types\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// PluginMount plugin mount\n// swagger:model PluginMount\ntype PluginMount struct {\n\n\t// description\n\t// Required: true\n\tDescription string `json:\"Description\"`\n\n\t// destination\n\t// Required: true\n\tDestination string `json:\"Destination\"`\n\n\t// name\n\t// Required: true\n\tName string `json:\"Name\"`\n\n\t// options\n\t// Required: true\n\tOptions []string `json:\"Options\"`\n\n\t// settable\n\t// Required: true\n\tSettable []string `json:\"Settable\"`\n\n\t// source\n\t// Required: true\n\tSource *string `json:\"Source\"`\n\n\t// type\n\t// Required: true\n\tType string `json:\"Type\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/plugin_responses.go",
    "content": "package types // import \"github.com/docker/docker/api/types\"\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"sort\"\n)\n\n// PluginsListResponse contains the response for the Engine API\ntype PluginsListResponse []*Plugin\n\n// UnmarshalJSON implements json.Unmarshaler for PluginInterfaceType\nfunc (t *PluginInterfaceType) UnmarshalJSON(p []byte) error {\n\tversionIndex := len(p)\n\tprefixIndex := 0\n\tif len(p) < 2 || p[0] != '\"' || p[len(p)-1] != '\"' {\n\t\treturn fmt.Errorf(\"%q is not a plugin interface type\", p)\n\t}\n\tp = p[1 : len(p)-1]\nloop:\n\tfor i, b := range p {\n\t\tswitch b {\n\t\tcase '.':\n\t\t\tprefixIndex = i\n\t\tcase '/':\n\t\t\tversionIndex = i\n\t\t\tbreak loop\n\t\t}\n\t}\n\tt.Prefix = string(p[:prefixIndex])\n\tt.Capability = string(p[prefixIndex+1 : versionIndex])\n\tif versionIndex < len(p) {\n\t\tt.Version = string(p[versionIndex+1:])\n\t}\n\treturn nil\n}\n\n// MarshalJSON implements json.Marshaler for PluginInterfaceType\nfunc (t *PluginInterfaceType) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(t.String())\n}\n\n// String implements fmt.Stringer for PluginInterfaceType\nfunc (t PluginInterfaceType) String() string {\n\treturn fmt.Sprintf(\"%s.%s/%s\", t.Prefix, t.Capability, t.Version)\n}\n\n// PluginPrivilege describes a permission the user has to accept\n// upon installing a plugin.\ntype PluginPrivilege struct {\n\tName        string\n\tDescription string\n\tValue       []string\n}\n\n// PluginPrivileges is a list of PluginPrivilege\ntype PluginPrivileges []PluginPrivilege\n\nfunc (s PluginPrivileges) Len() int {\n\treturn len(s)\n}\n\nfunc (s PluginPrivileges) Less(i, j int) bool {\n\treturn s[i].Name < s[j].Name\n}\n\nfunc (s PluginPrivileges) Swap(i, j int) {\n\tsort.Strings(s[i].Value)\n\tsort.Strings(s[j].Value)\n\ts[i], s[j] = s[j], s[i]\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/registry/authconfig.go",
    "content": "package registry // import \"github.com/docker/docker/api/types/registry\"\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\n// AuthHeader is the name of the header used to send encoded registry\n// authorization credentials for registry operations (push/pull).\nconst AuthHeader = \"X-Registry-Auth\"\n\n// RequestAuthConfig is a function interface that clients can supply\n// to retry operations after getting an authorization error.\n//\n// The function must return the [AuthHeader] value ([AuthConfig]), encoded\n// in base64url format ([RFC4648, section 5]), which can be decoded by\n// [DecodeAuthConfig].\n//\n// It must return an error if the privilege request fails.\n//\n// [RFC4648, section 5]: https://tools.ietf.org/html/rfc4648#section-5\ntype RequestAuthConfig func(context.Context) (string, error)\n\n// AuthConfig contains authorization information for connecting to a Registry.\ntype AuthConfig struct {\n\tUsername string `json:\"username,omitempty\"`\n\tPassword string `json:\"password,omitempty\"`\n\tAuth     string `json:\"auth,omitempty\"`\n\n\t// Email is an optional value associated with the username.\n\t// This field is deprecated and will be removed in a later\n\t// version of docker.\n\tEmail string `json:\"email,omitempty\"`\n\n\tServerAddress string `json:\"serveraddress,omitempty\"`\n\n\t// IdentityToken is used to authenticate the user and get\n\t// an access token for the registry.\n\tIdentityToken string `json:\"identitytoken,omitempty\"`\n\n\t// RegistryToken is a bearer token to be sent to a registry\n\tRegistryToken string `json:\"registrytoken,omitempty\"`\n}\n\n// EncodeAuthConfig serializes the auth configuration as a base64url encoded\n// ([RFC4648, section 5]) JSON string for sending through the X-Registry-Auth header.\n//\n// [RFC4648, section 5]: https://tools.ietf.org/html/rfc4648#section-5\nfunc EncodeAuthConfig(authConfig AuthConfig) (string, error) {\n\tbuf, err := json.Marshal(authConfig)\n\tif err != nil {\n\t\treturn \"\", errInvalidParameter{err}\n\t}\n\treturn base64.URLEncoding.EncodeToString(buf), nil\n}\n\n// DecodeAuthConfig decodes base64url encoded ([RFC4648, section 5]) JSON\n// authentication information as sent through the X-Registry-Auth header.\n//\n// This function always returns an [AuthConfig], even if an error occurs. It is up\n// to the caller to decide if authentication is required, and if the error can\n// be ignored.\n//\n// [RFC4648, section 5]: https://tools.ietf.org/html/rfc4648#section-5\nfunc DecodeAuthConfig(authEncoded string) (*AuthConfig, error) {\n\tif authEncoded == \"\" {\n\t\treturn &AuthConfig{}, nil\n\t}\n\n\tauthJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded))\n\treturn decodeAuthConfigFromReader(authJSON)\n}\n\n// DecodeAuthConfigBody decodes authentication information as sent as JSON in the\n// body of a request. This function is to provide backward compatibility with old\n// clients and API versions. Current clients and API versions expect authentication\n// to be provided through the X-Registry-Auth header.\n//\n// Like [DecodeAuthConfig], this function always returns an [AuthConfig], even if an\n// error occurs. It is up to the caller to decide if authentication is required,\n// and if the error can be ignored.\nfunc DecodeAuthConfigBody(rdr io.ReadCloser) (*AuthConfig, error) {\n\treturn decodeAuthConfigFromReader(rdr)\n}\n\nfunc decodeAuthConfigFromReader(rdr io.Reader) (*AuthConfig, error) {\n\tauthConfig := &AuthConfig{}\n\tif err := json.NewDecoder(rdr).Decode(authConfig); err != nil {\n\t\t// always return an (empty) AuthConfig to increase compatibility with\n\t\t// the existing API.\n\t\treturn &AuthConfig{}, invalid(err)\n\t}\n\treturn authConfig, nil\n}\n\nfunc invalid(err error) error {\n\treturn errInvalidParameter{fmt.Errorf(\"invalid X-Registry-Auth header: %w\", err)}\n}\n\ntype errInvalidParameter struct{ error }\n\nfunc (errInvalidParameter) InvalidParameter() {}\n\nfunc (e errInvalidParameter) Cause() error { return e.error }\n\nfunc (e errInvalidParameter) Unwrap() error { return e.error }\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/registry/authenticate.go",
    "content": "package registry // import \"github.com/docker/docker/api/types/registry\"\n\n// ----------------------------------------------------------------------------\n// DO NOT EDIT THIS FILE\n// This file was generated by `swagger generate operation`\n//\n// See hack/generate-swagger-api.sh\n// ----------------------------------------------------------------------------\n\n// AuthenticateOKBody authenticate o k body\n// swagger:model AuthenticateOKBody\ntype AuthenticateOKBody struct {\n\n\t// An opaque token used to authenticate a user after a successful login\n\t// Required: true\n\tIdentityToken string `json:\"IdentityToken\"`\n\n\t// The status of the authentication\n\t// Required: true\n\tStatus string `json:\"Status\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/registry/registry.go",
    "content": "package registry // import \"github.com/docker/docker/api/types/registry\"\n\nimport (\n\t\"encoding/json\"\n\t\"net\"\n\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// ServiceConfig stores daemon registry services configuration.\ntype ServiceConfig struct {\n\tAllowNondistributableArtifactsCIDRs     []*NetIPNet `json:\"AllowNondistributableArtifactsCIDRs,omitempty\"`     // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release.\n\tAllowNondistributableArtifactsHostnames []string    `json:\"AllowNondistributableArtifactsHostnames,omitempty\"` // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release.\n\n\tInsecureRegistryCIDRs []*NetIPNet           `json:\"InsecureRegistryCIDRs\"`\n\tIndexConfigs          map[string]*IndexInfo `json:\"IndexConfigs\"`\n\tMirrors               []string\n}\n\n// MarshalJSON implements a custom marshaler to include legacy fields\n// in API responses.\nfunc (sc ServiceConfig) MarshalJSON() ([]byte, error) {\n\ttmp := map[string]interface{}{\n\t\t\"InsecureRegistryCIDRs\": sc.InsecureRegistryCIDRs,\n\t\t\"IndexConfigs\":          sc.IndexConfigs,\n\t\t\"Mirrors\":               sc.Mirrors,\n\t}\n\tif sc.AllowNondistributableArtifactsCIDRs != nil {\n\t\ttmp[\"AllowNondistributableArtifactsCIDRs\"] = nil\n\t}\n\tif sc.AllowNondistributableArtifactsHostnames != nil {\n\t\ttmp[\"AllowNondistributableArtifactsHostnames\"] = nil\n\t}\n\treturn json.Marshal(tmp)\n}\n\n// NetIPNet is the net.IPNet type, which can be marshalled and\n// unmarshalled to JSON\ntype NetIPNet net.IPNet\n\n// String returns the CIDR notation of ipnet\nfunc (ipnet *NetIPNet) String() string {\n\treturn (*net.IPNet)(ipnet).String()\n}\n\n// MarshalJSON returns the JSON representation of the IPNet\nfunc (ipnet *NetIPNet) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal((*net.IPNet)(ipnet).String())\n}\n\n// UnmarshalJSON sets the IPNet from a byte array of JSON\nfunc (ipnet *NetIPNet) UnmarshalJSON(b []byte) (err error) {\n\tvar ipnetStr string\n\tif err = json.Unmarshal(b, &ipnetStr); err == nil {\n\t\tvar cidr *net.IPNet\n\t\tif _, cidr, err = net.ParseCIDR(ipnetStr); err == nil {\n\t\t\t*ipnet = NetIPNet(*cidr)\n\t\t}\n\t}\n\treturn\n}\n\n// IndexInfo contains information about a registry\n//\n// RepositoryInfo Examples:\n//\n//\t{\n//\t  \"Index\" : {\n//\t    \"Name\" : \"docker.io\",\n//\t    \"Mirrors\" : [\"https://registry-2.docker.io/v1/\", \"https://registry-3.docker.io/v1/\"],\n//\t    \"Secure\" : true,\n//\t    \"Official\" : true,\n//\t  },\n//\t  \"RemoteName\" : \"library/debian\",\n//\t  \"LocalName\" : \"debian\",\n//\t  \"CanonicalName\" : \"docker.io/debian\"\n//\t  \"Official\" : true,\n//\t}\n//\n//\t{\n//\t  \"Index\" : {\n//\t    \"Name\" : \"127.0.0.1:5000\",\n//\t    \"Mirrors\" : [],\n//\t    \"Secure\" : false,\n//\t    \"Official\" : false,\n//\t  },\n//\t  \"RemoteName\" : \"user/repo\",\n//\t  \"LocalName\" : \"127.0.0.1:5000/user/repo\",\n//\t  \"CanonicalName\" : \"127.0.0.1:5000/user/repo\",\n//\t  \"Official\" : false,\n//\t}\ntype IndexInfo struct {\n\t// Name is the name of the registry, such as \"docker.io\"\n\tName string\n\t// Mirrors is a list of mirrors, expressed as URIs\n\tMirrors []string\n\t// Secure is set to false if the registry is part of the list of\n\t// insecure registries. Insecure registries accept HTTP and/or accept\n\t// HTTPS with certificates from unknown CAs.\n\tSecure bool\n\t// Official indicates whether this is an official registry\n\tOfficial bool\n}\n\n// DistributionInspect describes the result obtained from contacting the\n// registry to retrieve image metadata\ntype DistributionInspect struct {\n\t// Descriptor contains information about the manifest, including\n\t// the content addressable digest\n\tDescriptor ocispec.Descriptor\n\t// Platforms contains the list of platforms supported by the image,\n\t// obtained by parsing the manifest\n\tPlatforms []ocispec.Platform\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/registry/search.go",
    "content": "package registry\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n)\n\n// SearchOptions holds parameters to search images with.\ntype SearchOptions struct {\n\tRegistryAuth string\n\n\t// PrivilegeFunc is a function that clients can supply to retry operations\n\t// after getting an authorization error. This function returns the registry\n\t// authentication header value in base64 encoded format, or an error if the\n\t// privilege request fails.\n\t//\n\t// For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig].\n\tPrivilegeFunc func(context.Context) (string, error)\n\tFilters       filters.Args\n\tLimit         int\n}\n\n// SearchResult describes a search result returned from a registry\ntype SearchResult struct {\n\t// StarCount indicates the number of stars this repository has\n\tStarCount int `json:\"star_count\"`\n\t// IsOfficial is true if the result is from an official repository.\n\tIsOfficial bool `json:\"is_official\"`\n\t// Name is the name of the repository\n\tName string `json:\"name\"`\n\t// IsAutomated indicates whether the result is automated.\n\t//\n\t// Deprecated: the \"is_automated\" field is deprecated and will always be \"false\".\n\tIsAutomated bool `json:\"is_automated\"`\n\t// Description is a textual description of the repository\n\tDescription string `json:\"description\"`\n}\n\n// SearchResults lists a collection search results returned from a registry\ntype SearchResults struct {\n\t// Query contains the query string that generated the search results\n\tQuery string `json:\"query\"`\n\t// NumResults indicates the number of results the query returned\n\tNumResults int `json:\"num_results\"`\n\t// Results is a slice containing the actual results for the search\n\tResults []SearchResult `json:\"results\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/storage/driver_data.go",
    "content": "package storage\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// DriverData Information about the storage driver used to store the container's and\n// image's filesystem.\n//\n// swagger:model DriverData\ntype DriverData struct {\n\n\t// Low-level storage metadata, provided as key/value pairs.\n\t//\n\t// This information is driver-specific, and depends on the storage-driver\n\t// in use, and should be used for informational purposes only.\n\t//\n\t// Required: true\n\tData map[string]string `json:\"Data\"`\n\n\t// Name of the storage driver.\n\t// Required: true\n\tName string `json:\"Name\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/strslice/strslice.go",
    "content": "package strslice // import \"github.com/docker/docker/api/types/strslice\"\n\nimport \"encoding/json\"\n\n// StrSlice represents a string or an array of strings.\n// We need to override the json decoder to accept both options.\ntype StrSlice []string\n\n// UnmarshalJSON decodes the byte slice whether it's a string or an array of\n// strings. This method is needed to implement json.Unmarshaler.\nfunc (e *StrSlice) UnmarshalJSON(b []byte) error {\n\tif len(b) == 0 {\n\t\t// With no input, we preserve the existing value by returning nil and\n\t\t// leaving the target alone. This allows defining default values for\n\t\t// the type.\n\t\treturn nil\n\t}\n\n\tp := make([]string, 0, 1)\n\tif err := json.Unmarshal(b, &p); err != nil {\n\t\tvar s string\n\t\tif err := json.Unmarshal(b, &s); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tp = append(p, s)\n\t}\n\n\t*e = p\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/common.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport (\n\t\"strconv\"\n\t\"time\"\n)\n\n// Version represents the internal object version.\ntype Version struct {\n\tIndex uint64 `json:\",omitempty\"`\n}\n\n// String implements fmt.Stringer interface.\nfunc (v Version) String() string {\n\treturn strconv.FormatUint(v.Index, 10)\n}\n\n// Meta is a base object inherited by most of the other once.\ntype Meta struct {\n\tVersion   Version   `json:\",omitempty\"`\n\tCreatedAt time.Time `json:\",omitempty\"`\n\tUpdatedAt time.Time `json:\",omitempty\"`\n}\n\n// Annotations represents how to describe an object.\ntype Annotations struct {\n\tName   string            `json:\",omitempty\"`\n\tLabels map[string]string `json:\"Labels\"`\n}\n\n// Driver represents a driver (network, logging, secrets backend).\ntype Driver struct {\n\tName    string            `json:\",omitempty\"`\n\tOptions map[string]string `json:\",omitempty\"`\n}\n\n// TLSInfo represents the TLS information about what CA certificate is trusted,\n// and who the issuer for a TLS certificate is\ntype TLSInfo struct {\n\t// TrustRoot is the trusted CA root certificate in PEM format\n\tTrustRoot string `json:\",omitempty\"`\n\n\t// CertIssuer is the raw subject bytes of the issuer\n\tCertIssuerSubject []byte `json:\",omitempty\"`\n\n\t// CertIssuerPublicKey is the raw public key bytes of the issuer\n\tCertIssuerPublicKey []byte `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/config.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport \"os\"\n\n// Config represents a config.\ntype Config struct {\n\tID string\n\tMeta\n\tSpec ConfigSpec\n}\n\n// ConfigSpec represents a config specification from a config in swarm\ntype ConfigSpec struct {\n\tAnnotations\n\tData []byte `json:\",omitempty\"`\n\n\t// Templating controls whether and how to evaluate the config payload as\n\t// a template. If it is not set, no templating is used.\n\tTemplating *Driver `json:\",omitempty\"`\n}\n\n// ConfigReferenceFileTarget is a file target in a config reference\ntype ConfigReferenceFileTarget struct {\n\tName string\n\tUID  string\n\tGID  string\n\tMode os.FileMode\n}\n\n// ConfigReferenceRuntimeTarget is a target for a config specifying that it\n// isn't mounted into the container but instead has some other purpose.\ntype ConfigReferenceRuntimeTarget struct{}\n\n// ConfigReference is a reference to a config in swarm\ntype ConfigReference struct {\n\tFile       *ConfigReferenceFileTarget    `json:\",omitempty\"`\n\tRuntime    *ConfigReferenceRuntimeTarget `json:\",omitempty\"`\n\tConfigID   string\n\tConfigName string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/container.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport (\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/mount\"\n)\n\n// DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf)\n// Detailed documentation is available in:\n// http://man7.org/linux/man-pages/man5/resolv.conf.5.html\n// `nameserver`, `search`, `options` have been supported.\n// TODO: `domain` is not supported yet.\ntype DNSConfig struct {\n\t// Nameservers specifies the IP addresses of the name servers\n\tNameservers []string `json:\",omitempty\"`\n\t// Search specifies the search list for host-name lookup\n\tSearch []string `json:\",omitempty\"`\n\t// Options allows certain internal resolver variables to be modified\n\tOptions []string `json:\",omitempty\"`\n}\n\n// SELinuxContext contains the SELinux labels of the container.\ntype SELinuxContext struct {\n\tDisable bool\n\n\tUser  string\n\tRole  string\n\tType  string\n\tLevel string\n}\n\n// SeccompMode is the type used for the enumeration of possible seccomp modes\n// in SeccompOpts\ntype SeccompMode string\n\nconst (\n\tSeccompModeDefault    SeccompMode = \"default\"\n\tSeccompModeUnconfined SeccompMode = \"unconfined\"\n\tSeccompModeCustom     SeccompMode = \"custom\"\n)\n\n// SeccompOpts defines the options for configuring seccomp on a swarm-managed\n// container.\ntype SeccompOpts struct {\n\t// Mode is the SeccompMode used for the container.\n\tMode SeccompMode `json:\",omitempty\"`\n\t// Profile is the custom seccomp profile as a json object to be used with\n\t// the container. Mode should be set to SeccompModeCustom when using a\n\t// custom profile in this manner.\n\tProfile []byte `json:\",omitempty\"`\n}\n\n// AppArmorMode is type used for the enumeration of possible AppArmor modes in\n// AppArmorOpts\ntype AppArmorMode string\n\nconst (\n\tAppArmorModeDefault  AppArmorMode = \"default\"\n\tAppArmorModeDisabled AppArmorMode = \"disabled\"\n)\n\n// AppArmorOpts defines the options for configuring AppArmor on a swarm-managed\n// container.  Currently, custom AppArmor profiles are not supported.\ntype AppArmorOpts struct {\n\tMode AppArmorMode `json:\",omitempty\"`\n}\n\n// CredentialSpec for managed service account (Windows only)\ntype CredentialSpec struct {\n\tConfig   string\n\tFile     string\n\tRegistry string\n}\n\n// Privileges defines the security options for the container.\ntype Privileges struct {\n\tCredentialSpec  *CredentialSpec\n\tSELinuxContext  *SELinuxContext\n\tSeccomp         *SeccompOpts  `json:\",omitempty\"`\n\tAppArmor        *AppArmorOpts `json:\",omitempty\"`\n\tNoNewPrivileges bool\n}\n\n// ContainerSpec represents the spec of a container.\ntype ContainerSpec struct {\n\tImage           string                  `json:\",omitempty\"`\n\tLabels          map[string]string       `json:\",omitempty\"`\n\tCommand         []string                `json:\",omitempty\"`\n\tArgs            []string                `json:\",omitempty\"`\n\tHostname        string                  `json:\",omitempty\"`\n\tEnv             []string                `json:\",omitempty\"`\n\tDir             string                  `json:\",omitempty\"`\n\tUser            string                  `json:\",omitempty\"`\n\tGroups          []string                `json:\",omitempty\"`\n\tPrivileges      *Privileges             `json:\",omitempty\"`\n\tInit            *bool                   `json:\",omitempty\"`\n\tStopSignal      string                  `json:\",omitempty\"`\n\tTTY             bool                    `json:\",omitempty\"`\n\tOpenStdin       bool                    `json:\",omitempty\"`\n\tReadOnly        bool                    `json:\",omitempty\"`\n\tMounts          []mount.Mount           `json:\",omitempty\"`\n\tStopGracePeriod *time.Duration          `json:\",omitempty\"`\n\tHealthcheck     *container.HealthConfig `json:\",omitempty\"`\n\t// The format of extra hosts on swarmkit is specified in:\n\t// http://man7.org/linux/man-pages/man5/hosts.5.html\n\t//    IP_address canonical_hostname [aliases...]\n\tHosts          []string            `json:\",omitempty\"`\n\tDNSConfig      *DNSConfig          `json:\",omitempty\"`\n\tSecrets        []*SecretReference  `json:\",omitempty\"`\n\tConfigs        []*ConfigReference  `json:\",omitempty\"`\n\tIsolation      container.Isolation `json:\",omitempty\"`\n\tSysctls        map[string]string   `json:\",omitempty\"`\n\tCapabilityAdd  []string            `json:\",omitempty\"`\n\tCapabilityDrop []string            `json:\",omitempty\"`\n\tUlimits        []*container.Ulimit `json:\",omitempty\"`\n\tOomScoreAdj    int64               `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/network.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport (\n\t\"github.com/docker/docker/api/types/network\"\n)\n\n// Endpoint represents an endpoint.\ntype Endpoint struct {\n\tSpec       EndpointSpec        `json:\",omitempty\"`\n\tPorts      []PortConfig        `json:\",omitempty\"`\n\tVirtualIPs []EndpointVirtualIP `json:\",omitempty\"`\n}\n\n// EndpointSpec represents the spec of an endpoint.\ntype EndpointSpec struct {\n\tMode  ResolutionMode `json:\",omitempty\"`\n\tPorts []PortConfig   `json:\",omitempty\"`\n}\n\n// ResolutionMode represents a resolution mode.\ntype ResolutionMode string\n\nconst (\n\t// ResolutionModeVIP VIP\n\tResolutionModeVIP ResolutionMode = \"vip\"\n\t// ResolutionModeDNSRR DNSRR\n\tResolutionModeDNSRR ResolutionMode = \"dnsrr\"\n)\n\n// PortConfig represents the config of a port.\ntype PortConfig struct {\n\tName     string             `json:\",omitempty\"`\n\tProtocol PortConfigProtocol `json:\",omitempty\"`\n\t// TargetPort is the port inside the container\n\tTargetPort uint32 `json:\",omitempty\"`\n\t// PublishedPort is the port on the swarm hosts\n\tPublishedPort uint32 `json:\",omitempty\"`\n\t// PublishMode is the mode in which port is published\n\tPublishMode PortConfigPublishMode `json:\",omitempty\"`\n}\n\n// PortConfigPublishMode represents the mode in which the port is to\n// be published.\ntype PortConfigPublishMode string\n\nconst (\n\t// PortConfigPublishModeIngress is used for ports published\n\t// for ingress load balancing using routing mesh.\n\tPortConfigPublishModeIngress PortConfigPublishMode = \"ingress\"\n\t// PortConfigPublishModeHost is used for ports published\n\t// for direct host level access on the host where the task is running.\n\tPortConfigPublishModeHost PortConfigPublishMode = \"host\"\n)\n\n// PortConfigProtocol represents the protocol of a port.\ntype PortConfigProtocol string\n\nconst (\n\t// TODO(stevvooe): These should be used generally, not just for PortConfig.\n\n\t// PortConfigProtocolTCP TCP\n\tPortConfigProtocolTCP PortConfigProtocol = \"tcp\"\n\t// PortConfigProtocolUDP UDP\n\tPortConfigProtocolUDP PortConfigProtocol = \"udp\"\n\t// PortConfigProtocolSCTP SCTP\n\tPortConfigProtocolSCTP PortConfigProtocol = \"sctp\"\n)\n\n// EndpointVirtualIP represents the virtual ip of a port.\ntype EndpointVirtualIP struct {\n\tNetworkID string `json:\",omitempty\"`\n\tAddr      string `json:\",omitempty\"`\n}\n\n// Network represents a network.\ntype Network struct {\n\tID string\n\tMeta\n\tSpec        NetworkSpec  `json:\",omitempty\"`\n\tDriverState Driver       `json:\",omitempty\"`\n\tIPAMOptions *IPAMOptions `json:\",omitempty\"`\n}\n\n// NetworkSpec represents the spec of a network.\ntype NetworkSpec struct {\n\tAnnotations\n\tDriverConfiguration *Driver                  `json:\",omitempty\"`\n\tIPv6Enabled         bool                     `json:\",omitempty\"`\n\tInternal            bool                     `json:\",omitempty\"`\n\tAttachable          bool                     `json:\",omitempty\"`\n\tIngress             bool                     `json:\",omitempty\"`\n\tIPAMOptions         *IPAMOptions             `json:\",omitempty\"`\n\tConfigFrom          *network.ConfigReference `json:\",omitempty\"`\n\tScope               string                   `json:\",omitempty\"`\n}\n\n// NetworkAttachmentConfig represents the configuration of a network attachment.\ntype NetworkAttachmentConfig struct {\n\tTarget     string            `json:\",omitempty\"`\n\tAliases    []string          `json:\",omitempty\"`\n\tDriverOpts map[string]string `json:\",omitempty\"`\n}\n\n// NetworkAttachment represents a network attachment.\ntype NetworkAttachment struct {\n\tNetwork   Network  `json:\",omitempty\"`\n\tAddresses []string `json:\",omitempty\"`\n}\n\n// IPAMOptions represents ipam options.\ntype IPAMOptions struct {\n\tDriver  Driver       `json:\",omitempty\"`\n\tConfigs []IPAMConfig `json:\",omitempty\"`\n}\n\n// IPAMConfig represents ipam configuration.\ntype IPAMConfig struct {\n\tSubnet  string `json:\",omitempty\"`\n\tRange   string `json:\",omitempty\"`\n\tGateway string `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/node.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\n// Node represents a node.\ntype Node struct {\n\tID string\n\tMeta\n\t// Spec defines the desired state of the node as specified by the user.\n\t// The system will honor this and will *never* modify it.\n\tSpec NodeSpec `json:\",omitempty\"`\n\t// Description encapsulates the properties of the Node as reported by the\n\t// agent.\n\tDescription NodeDescription `json:\",omitempty\"`\n\t// Status provides the current status of the node, as seen by the manager.\n\tStatus NodeStatus `json:\",omitempty\"`\n\t// ManagerStatus provides the current status of the node's manager\n\t// component, if the node is a manager.\n\tManagerStatus *ManagerStatus `json:\",omitempty\"`\n}\n\n// NodeSpec represents the spec of a node.\ntype NodeSpec struct {\n\tAnnotations\n\tRole         NodeRole         `json:\",omitempty\"`\n\tAvailability NodeAvailability `json:\",omitempty\"`\n}\n\n// NodeRole represents the role of a node.\ntype NodeRole string\n\nconst (\n\t// NodeRoleWorker WORKER\n\tNodeRoleWorker NodeRole = \"worker\"\n\t// NodeRoleManager MANAGER\n\tNodeRoleManager NodeRole = \"manager\"\n)\n\n// NodeAvailability represents the availability of a node.\ntype NodeAvailability string\n\nconst (\n\t// NodeAvailabilityActive ACTIVE\n\tNodeAvailabilityActive NodeAvailability = \"active\"\n\t// NodeAvailabilityPause PAUSE\n\tNodeAvailabilityPause NodeAvailability = \"pause\"\n\t// NodeAvailabilityDrain DRAIN\n\tNodeAvailabilityDrain NodeAvailability = \"drain\"\n)\n\n// NodeDescription represents the description of a node.\ntype NodeDescription struct {\n\tHostname  string            `json:\",omitempty\"`\n\tPlatform  Platform          `json:\",omitempty\"`\n\tResources Resources         `json:\",omitempty\"`\n\tEngine    EngineDescription `json:\",omitempty\"`\n\tTLSInfo   TLSInfo           `json:\",omitempty\"`\n\tCSIInfo   []NodeCSIInfo     `json:\",omitempty\"`\n}\n\n// Platform represents the platform (Arch/OS).\ntype Platform struct {\n\tArchitecture string `json:\",omitempty\"`\n\tOS           string `json:\",omitempty\"`\n}\n\n// EngineDescription represents the description of an engine.\ntype EngineDescription struct {\n\tEngineVersion string              `json:\",omitempty\"`\n\tLabels        map[string]string   `json:\",omitempty\"`\n\tPlugins       []PluginDescription `json:\",omitempty\"`\n}\n\n// NodeCSIInfo represents information about a CSI plugin available on the node\ntype NodeCSIInfo struct {\n\t// PluginName is the name of the CSI plugin.\n\tPluginName string `json:\",omitempty\"`\n\t// NodeID is the ID of the node as reported by the CSI plugin. This is\n\t// different from the swarm node ID.\n\tNodeID string `json:\",omitempty\"`\n\t// MaxVolumesPerNode is the maximum number of volumes that may be published\n\t// to this node\n\tMaxVolumesPerNode int64 `json:\",omitempty\"`\n\t// AccessibleTopology indicates the location of this node in the CSI\n\t// plugin's topology\n\tAccessibleTopology *Topology `json:\",omitempty\"`\n}\n\n// PluginDescription represents the description of an engine plugin.\ntype PluginDescription struct {\n\tType string `json:\",omitempty\"`\n\tName string `json:\",omitempty\"`\n}\n\n// NodeStatus represents the status of a node.\ntype NodeStatus struct {\n\tState   NodeState `json:\",omitempty\"`\n\tMessage string    `json:\",omitempty\"`\n\tAddr    string    `json:\",omitempty\"`\n}\n\n// Reachability represents the reachability of a node.\ntype Reachability string\n\nconst (\n\t// ReachabilityUnknown UNKNOWN\n\tReachabilityUnknown Reachability = \"unknown\"\n\t// ReachabilityUnreachable UNREACHABLE\n\tReachabilityUnreachable Reachability = \"unreachable\"\n\t// ReachabilityReachable REACHABLE\n\tReachabilityReachable Reachability = \"reachable\"\n)\n\n// ManagerStatus represents the status of a manager.\ntype ManagerStatus struct {\n\tLeader       bool         `json:\",omitempty\"`\n\tReachability Reachability `json:\",omitempty\"`\n\tAddr         string       `json:\",omitempty\"`\n}\n\n// NodeState represents the state of a node.\ntype NodeState string\n\nconst (\n\t// NodeStateUnknown UNKNOWN\n\tNodeStateUnknown NodeState = \"unknown\"\n\t// NodeStateDown DOWN\n\tNodeStateDown NodeState = \"down\"\n\t// NodeStateReady READY\n\tNodeStateReady NodeState = \"ready\"\n\t// NodeStateDisconnected DISCONNECTED\n\tNodeStateDisconnected NodeState = \"disconnected\"\n)\n\n// Topology defines the CSI topology of this node. This type is a duplicate of\n// github.com/docker/docker/api/types.Topology. Because the type definition\n// is so simple and to avoid complicated structure or circular imports, we just\n// duplicate it here. See that type for full documentation\ntype Topology struct {\n\tSegments map[string]string `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/runtime/gen.go",
    "content": "//go:generate protoc --gogofaster_out=import_path=github.com/docker/docker/api/types/swarm/runtime:. plugin.proto\n\npackage runtime // import \"github.com/docker/docker/api/types/swarm/runtime\"\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/runtime/plugin.pb.go",
    "content": "// Code generated by protoc-gen-gogo. DO NOT EDIT.\n// source: plugin.proto\n\npackage runtime\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/gogo/protobuf/proto\"\n\tio \"io\"\n\tmath \"math\"\n\tmath_bits \"math/bits\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package\n\n// PluginSpec defines the base payload which clients can specify for creating\n// a service with the plugin runtime.\ntype PluginSpec struct {\n\tName       string             `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tRemote     string             `protobuf:\"bytes,2,opt,name=remote,proto3\" json:\"remote,omitempty\"`\n\tPrivileges []*PluginPrivilege `protobuf:\"bytes,3,rep,name=privileges,proto3\" json:\"privileges,omitempty\"`\n\tDisabled   bool               `protobuf:\"varint,4,opt,name=disabled,proto3\" json:\"disabled,omitempty\"`\n\tEnv        []string           `protobuf:\"bytes,5,rep,name=env,proto3\" json:\"env,omitempty\"`\n}\n\nfunc (m *PluginSpec) Reset()         { *m = PluginSpec{} }\nfunc (m *PluginSpec) String() string { return proto.CompactTextString(m) }\nfunc (*PluginSpec) ProtoMessage()    {}\nfunc (*PluginSpec) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_22a625af4bc1cc87, []int{0}\n}\nfunc (m *PluginSpec) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *PluginSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PluginSpec.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *PluginSpec) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PluginSpec.Merge(m, src)\n}\nfunc (m *PluginSpec) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *PluginSpec) XXX_DiscardUnknown() {\n\txxx_messageInfo_PluginSpec.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PluginSpec proto.InternalMessageInfo\n\nfunc (m *PluginSpec) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *PluginSpec) GetRemote() string {\n\tif m != nil {\n\t\treturn m.Remote\n\t}\n\treturn \"\"\n}\n\nfunc (m *PluginSpec) GetPrivileges() []*PluginPrivilege {\n\tif m != nil {\n\t\treturn m.Privileges\n\t}\n\treturn nil\n}\n\nfunc (m *PluginSpec) GetDisabled() bool {\n\tif m != nil {\n\t\treturn m.Disabled\n\t}\n\treturn false\n}\n\nfunc (m *PluginSpec) GetEnv() []string {\n\tif m != nil {\n\t\treturn m.Env\n\t}\n\treturn nil\n}\n\n// PluginPrivilege describes a permission the user has to accept\n// upon installing a plugin.\ntype PluginPrivilege struct {\n\tName        string   `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tDescription string   `protobuf:\"bytes,2,opt,name=description,proto3\" json:\"description,omitempty\"`\n\tValue       []string `protobuf:\"bytes,3,rep,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *PluginPrivilege) Reset()         { *m = PluginPrivilege{} }\nfunc (m *PluginPrivilege) String() string { return proto.CompactTextString(m) }\nfunc (*PluginPrivilege) ProtoMessage()    {}\nfunc (*PluginPrivilege) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_22a625af4bc1cc87, []int{1}\n}\nfunc (m *PluginPrivilege) XXX_Unmarshal(b []byte) error {\n\treturn m.Unmarshal(b)\n}\nfunc (m *PluginPrivilege) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\tif deterministic {\n\t\treturn xxx_messageInfo_PluginPrivilege.Marshal(b, m, deterministic)\n\t} else {\n\t\tb = b[:cap(b)]\n\t\tn, err := m.MarshalToSizedBuffer(b)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[:n], nil\n\t}\n}\nfunc (m *PluginPrivilege) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PluginPrivilege.Merge(m, src)\n}\nfunc (m *PluginPrivilege) XXX_Size() int {\n\treturn m.Size()\n}\nfunc (m *PluginPrivilege) XXX_DiscardUnknown() {\n\txxx_messageInfo_PluginPrivilege.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PluginPrivilege proto.InternalMessageInfo\n\nfunc (m *PluginPrivilege) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *PluginPrivilege) GetDescription() string {\n\tif m != nil {\n\t\treturn m.Description\n\t}\n\treturn \"\"\n}\n\nfunc (m *PluginPrivilege) GetValue() []string {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*PluginSpec)(nil), \"PluginSpec\")\n\tproto.RegisterType((*PluginPrivilege)(nil), \"PluginPrivilege\")\n}\n\nfunc init() { proto.RegisterFile(\"plugin.proto\", fileDescriptor_22a625af4bc1cc87) }\n\nvar fileDescriptor_22a625af4bc1cc87 = []byte{\n\t// 225 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0xc8, 0x29, 0x4d,\n\t0xcf, 0xcc, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x57, 0x9a, 0xc1, 0xc8, 0xc5, 0x15, 0x00, 0x16,\n\t0x08, 0x2e, 0x48, 0x4d, 0x16, 0x12, 0xe2, 0x62, 0xc9, 0x4b, 0xcc, 0x4d, 0x95, 0x60, 0x54, 0x60,\n\t0xd4, 0xe0, 0x0c, 0x02, 0xb3, 0x85, 0xc4, 0xb8, 0xd8, 0x8a, 0x52, 0x73, 0xf3, 0x4b, 0x52, 0x25,\n\t0x98, 0xc0, 0xa2, 0x50, 0x9e, 0x90, 0x01, 0x17, 0x57, 0x41, 0x51, 0x66, 0x59, 0x66, 0x4e, 0x6a,\n\t0x7a, 0x6a, 0xb1, 0x04, 0xb3, 0x02, 0xb3, 0x06, 0xb7, 0x91, 0x80, 0x1e, 0xc4, 0xb0, 0x00, 0x98,\n\t0x44, 0x10, 0x92, 0x1a, 0x21, 0x29, 0x2e, 0x8e, 0x94, 0xcc, 0xe2, 0xc4, 0xa4, 0x9c, 0xd4, 0x14,\n\t0x09, 0x16, 0x05, 0x46, 0x0d, 0x8e, 0x20, 0x38, 0x5f, 0x48, 0x80, 0x8b, 0x39, 0x35, 0xaf, 0x4c,\n\t0x82, 0x55, 0x81, 0x59, 0x83, 0x33, 0x08, 0xc4, 0x54, 0x8a, 0xe5, 0xe2, 0x47, 0x33, 0x0c, 0xab,\n\t0xf3, 0x14, 0xb8, 0xb8, 0x53, 0x52, 0x8b, 0x93, 0x8b, 0x32, 0x0b, 0x4a, 0x32, 0xf3, 0xf3, 0xa0,\n\t0x6e, 0x44, 0x16, 0x12, 0x12, 0xe1, 0x62, 0x2d, 0x4b, 0xcc, 0x29, 0x4d, 0x05, 0xbb, 0x91, 0x33,\n\t0x08, 0xc2, 0x71, 0x92, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4,\n\t0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x24, 0x36,\n\t0x70, 0xd0, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x37, 0xea, 0xe2, 0xca, 0x2a, 0x01, 0x00,\n\t0x00,\n}\n\nfunc (m *PluginSpec) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PluginSpec) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PluginSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Env) > 0 {\n\t\tfor iNdEx := len(m.Env) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\ti -= len(m.Env[iNdEx])\n\t\t\tcopy(dAtA[i:], m.Env[iNdEx])\n\t\t\ti = encodeVarintPlugin(dAtA, i, uint64(len(m.Env[iNdEx])))\n\t\t\ti--\n\t\t\tdAtA[i] = 0x2a\n\t\t}\n\t}\n\tif m.Disabled {\n\t\ti--\n\t\tif m.Disabled {\n\t\t\tdAtA[i] = 1\n\t\t} else {\n\t\t\tdAtA[i] = 0\n\t\t}\n\t\ti--\n\t\tdAtA[i] = 0x20\n\t}\n\tif len(m.Privileges) > 0 {\n\t\tfor iNdEx := len(m.Privileges) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\t{\n\t\t\t\tsize, err := m.Privileges[iNdEx].MarshalToSizedBuffer(dAtA[:i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ti -= size\n\t\t\t\ti = encodeVarintPlugin(dAtA, i, uint64(size))\n\t\t\t}\n\t\t\ti--\n\t\t\tdAtA[i] = 0x1a\n\t\t}\n\t}\n\tif len(m.Remote) > 0 {\n\t\ti -= len(m.Remote)\n\t\tcopy(dAtA[i:], m.Remote)\n\t\ti = encodeVarintPlugin(dAtA, i, uint64(len(m.Remote)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintPlugin(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc (m *PluginPrivilege) Marshal() (dAtA []byte, err error) {\n\tsize := m.Size()\n\tdAtA = make([]byte, size)\n\tn, err := m.MarshalToSizedBuffer(dAtA[:size])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dAtA[:n], nil\n}\n\nfunc (m *PluginPrivilege) MarshalTo(dAtA []byte) (int, error) {\n\tsize := m.Size()\n\treturn m.MarshalToSizedBuffer(dAtA[:size])\n}\n\nfunc (m *PluginPrivilege) MarshalToSizedBuffer(dAtA []byte) (int, error) {\n\ti := len(dAtA)\n\t_ = i\n\tvar l int\n\t_ = l\n\tif len(m.Value) > 0 {\n\t\tfor iNdEx := len(m.Value) - 1; iNdEx >= 0; iNdEx-- {\n\t\t\ti -= len(m.Value[iNdEx])\n\t\t\tcopy(dAtA[i:], m.Value[iNdEx])\n\t\t\ti = encodeVarintPlugin(dAtA, i, uint64(len(m.Value[iNdEx])))\n\t\t\ti--\n\t\t\tdAtA[i] = 0x1a\n\t\t}\n\t}\n\tif len(m.Description) > 0 {\n\t\ti -= len(m.Description)\n\t\tcopy(dAtA[i:], m.Description)\n\t\ti = encodeVarintPlugin(dAtA, i, uint64(len(m.Description)))\n\t\ti--\n\t\tdAtA[i] = 0x12\n\t}\n\tif len(m.Name) > 0 {\n\t\ti -= len(m.Name)\n\t\tcopy(dAtA[i:], m.Name)\n\t\ti = encodeVarintPlugin(dAtA, i, uint64(len(m.Name)))\n\t\ti--\n\t\tdAtA[i] = 0xa\n\t}\n\treturn len(dAtA) - i, nil\n}\n\nfunc encodeVarintPlugin(dAtA []byte, offset int, v uint64) int {\n\toffset -= sovPlugin(v)\n\tbase := offset\n\tfor v >= 1<<7 {\n\t\tdAtA[offset] = uint8(v&0x7f | 0x80)\n\t\tv >>= 7\n\t\toffset++\n\t}\n\tdAtA[offset] = uint8(v)\n\treturn base\n}\nfunc (m *PluginSpec) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovPlugin(uint64(l))\n\t}\n\tl = len(m.Remote)\n\tif l > 0 {\n\t\tn += 1 + l + sovPlugin(uint64(l))\n\t}\n\tif len(m.Privileges) > 0 {\n\t\tfor _, e := range m.Privileges {\n\t\t\tl = e.Size()\n\t\t\tn += 1 + l + sovPlugin(uint64(l))\n\t\t}\n\t}\n\tif m.Disabled {\n\t\tn += 2\n\t}\n\tif len(m.Env) > 0 {\n\t\tfor _, s := range m.Env {\n\t\t\tl = len(s)\n\t\t\tn += 1 + l + sovPlugin(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (m *PluginPrivilege) Size() (n int) {\n\tif m == nil {\n\t\treturn 0\n\t}\n\tvar l int\n\t_ = l\n\tl = len(m.Name)\n\tif l > 0 {\n\t\tn += 1 + l + sovPlugin(uint64(l))\n\t}\n\tl = len(m.Description)\n\tif l > 0 {\n\t\tn += 1 + l + sovPlugin(uint64(l))\n\t}\n\tif len(m.Value) > 0 {\n\t\tfor _, s := range m.Value {\n\t\t\tl = len(s)\n\t\t\tn += 1 + l + sovPlugin(uint64(l))\n\t\t}\n\t}\n\treturn n\n}\n\nfunc sovPlugin(x uint64) (n int) {\n\treturn (math_bits.Len64(x|1) + 6) / 7\n}\nfunc sozPlugin(x uint64) (n int) {\n\treturn sovPlugin(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\nfunc (m *PluginSpec) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PluginSpec: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PluginSpec: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Remote\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Remote = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Privileges\", wireType)\n\t\t\t}\n\t\t\tvar msglen int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tmsglen |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif msglen < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tpostIndex := iNdEx + msglen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Privileges = append(m.Privileges, &PluginPrivilege{})\n\t\t\tif err := m.Privileges[len(m.Privileges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tiNdEx = postIndex\n\t\tcase 4:\n\t\t\tif wireType != 0 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Disabled\", wireType)\n\t\t\t}\n\t\t\tvar v int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tv |= int(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tm.Disabled = bool(v != 0)\n\t\tcase 5:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Env\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Env = append(m.Env, string(dAtA[iNdEx:postIndex]))\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipPlugin(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc (m *PluginPrivilege) Unmarshal(dAtA []byte) error {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tfor iNdEx < l {\n\t\tpreIndex := iNdEx\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= uint64(b&0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfieldNum := int32(wire >> 3)\n\t\twireType := int(wire & 0x7)\n\t\tif wireType == 4 {\n\t\t\treturn fmt.Errorf(\"proto: PluginPrivilege: wiretype end group for non-group\")\n\t\t}\n\t\tif fieldNum <= 0 {\n\t\t\treturn fmt.Errorf(\"proto: PluginPrivilege: illegal tag %d (wire type %d)\", fieldNum, wire)\n\t\t}\n\t\tswitch fieldNum {\n\t\tcase 1:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Name\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Name = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 2:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Description\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Description = string(dAtA[iNdEx:postIndex])\n\t\t\tiNdEx = postIndex\n\t\tcase 3:\n\t\t\tif wireType != 2 {\n\t\t\t\treturn fmt.Errorf(\"proto: wrong wireType = %d for field Value\", wireType)\n\t\t\t}\n\t\t\tvar stringLen uint64\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tstringLen |= uint64(b&0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tintStringLen := int(stringLen)\n\t\t\tif intStringLen < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tpostIndex := iNdEx + intStringLen\n\t\t\tif postIndex < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif postIndex > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tm.Value = append(m.Value, string(dAtA[iNdEx:postIndex]))\n\t\t\tiNdEx = postIndex\n\t\tdefault:\n\t\t\tiNdEx = preIndex\n\t\t\tskippy, err := skipPlugin(dAtA[iNdEx:])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif (skippy < 0) || (iNdEx+skippy) < 0 {\n\t\t\t\treturn ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tif (iNdEx + skippy) > l {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tiNdEx += skippy\n\t\t}\n\t}\n\n\tif iNdEx > l {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\nfunc skipPlugin(dAtA []byte) (n int, err error) {\n\tl := len(dAtA)\n\tiNdEx := 0\n\tdepth := 0\n\tfor iNdEx < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif shift >= 64 {\n\t\t\t\treturn 0, ErrIntOverflowPlugin\n\t\t\t}\n\t\t\tif iNdEx >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := dAtA[iNdEx]\n\t\t\tiNdEx++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tiNdEx++\n\t\t\t\tif dAtA[iNdEx-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tcase 1:\n\t\t\tiNdEx += 8\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif shift >= 64 {\n\t\t\t\t\treturn 0, ErrIntOverflowPlugin\n\t\t\t\t}\n\t\t\t\tif iNdEx >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := dAtA[iNdEx]\n\t\t\t\tiNdEx++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif length < 0 {\n\t\t\t\treturn 0, ErrInvalidLengthPlugin\n\t\t\t}\n\t\t\tiNdEx += length\n\t\tcase 3:\n\t\t\tdepth++\n\t\tcase 4:\n\t\t\tif depth == 0 {\n\t\t\t\treturn 0, ErrUnexpectedEndOfGroupPlugin\n\t\t\t}\n\t\t\tdepth--\n\t\tcase 5:\n\t\t\tiNdEx += 4\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t\tif iNdEx < 0 {\n\t\t\treturn 0, ErrInvalidLengthPlugin\n\t\t}\n\t\tif depth == 0 {\n\t\t\treturn iNdEx, nil\n\t\t}\n\t}\n\treturn 0, io.ErrUnexpectedEOF\n}\n\nvar (\n\tErrInvalidLengthPlugin        = fmt.Errorf(\"proto: negative length found during unmarshaling\")\n\tErrIntOverflowPlugin          = fmt.Errorf(\"proto: integer overflow\")\n\tErrUnexpectedEndOfGroupPlugin = fmt.Errorf(\"proto: unexpected end of group\")\n)\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/runtime/plugin.proto",
    "content": "syntax = \"proto3\";\n\n// PluginSpec defines the base payload which clients can specify for creating\n// a service with the plugin runtime.\nmessage PluginSpec {\n\tstring name = 1;\n\tstring remote = 2;\n\trepeated PluginPrivilege privileges = 3;\n\tbool disabled = 4;\n\trepeated string env = 5;\n}\n\n// PluginPrivilege describes a permission the user has to accept\n// upon installing a plugin.\nmessage PluginPrivilege {\n\tstring name = 1;\n\tstring description = 2;\n\trepeated string value = 3;\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/runtime.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\n// RuntimeType is the type of runtime used for the TaskSpec\ntype RuntimeType string\n\n// RuntimeURL is the proto type url\ntype RuntimeURL string\n\nconst (\n\t// RuntimeContainer is the container based runtime\n\tRuntimeContainer RuntimeType = \"container\"\n\t// RuntimePlugin is the plugin based runtime\n\tRuntimePlugin RuntimeType = \"plugin\"\n\t// RuntimeNetworkAttachment is the network attachment runtime\n\tRuntimeNetworkAttachment RuntimeType = \"attachment\"\n\n\t// RuntimeURLContainer is the proto url for the container type\n\tRuntimeURLContainer RuntimeURL = \"types.docker.com/RuntimeContainer\"\n\t// RuntimeURLPlugin is the proto url for the plugin type\n\tRuntimeURLPlugin RuntimeURL = \"types.docker.com/RuntimePlugin\"\n)\n\n// NetworkAttachmentSpec represents the runtime spec type for network\n// attachment tasks\ntype NetworkAttachmentSpec struct {\n\tContainerID string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/secret.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport \"os\"\n\n// Secret represents a secret.\ntype Secret struct {\n\tID string\n\tMeta\n\tSpec SecretSpec\n}\n\n// SecretSpec represents a secret specification from a secret in swarm\ntype SecretSpec struct {\n\tAnnotations\n\tData   []byte  `json:\",omitempty\"`\n\tDriver *Driver `json:\",omitempty\"` // name of the secrets driver used to fetch the secret's value from an external secret store\n\n\t// Templating controls whether and how to evaluate the secret payload as\n\t// a template. If it is not set, no templating is used.\n\tTemplating *Driver `json:\",omitempty\"`\n}\n\n// SecretReferenceFileTarget is a file target in a secret reference\ntype SecretReferenceFileTarget struct {\n\tName string\n\tUID  string\n\tGID  string\n\tMode os.FileMode\n}\n\n// SecretReference is a reference to a secret in swarm\ntype SecretReference struct {\n\tFile       *SecretReferenceFileTarget\n\tSecretID   string\n\tSecretName string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/service.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport \"time\"\n\n// Service represents a service.\ntype Service struct {\n\tID string\n\tMeta\n\tSpec         ServiceSpec   `json:\",omitempty\"`\n\tPreviousSpec *ServiceSpec  `json:\",omitempty\"`\n\tEndpoint     Endpoint      `json:\",omitempty\"`\n\tUpdateStatus *UpdateStatus `json:\",omitempty\"`\n\n\t// ServiceStatus is an optional, extra field indicating the number of\n\t// desired and running tasks. It is provided primarily as a shortcut to\n\t// calculating these values client-side, which otherwise would require\n\t// listing all tasks for a service, an operation that could be\n\t// computation and network expensive.\n\tServiceStatus *ServiceStatus `json:\",omitempty\"`\n\n\t// JobStatus is the status of a Service which is in one of ReplicatedJob or\n\t// GlobalJob modes. It is absent on Replicated and Global services.\n\tJobStatus *JobStatus `json:\",omitempty\"`\n}\n\n// ServiceSpec represents the spec of a service.\ntype ServiceSpec struct {\n\tAnnotations\n\n\t// TaskTemplate defines how the service should construct new tasks when\n\t// orchestrating this service.\n\tTaskTemplate   TaskSpec      `json:\",omitempty\"`\n\tMode           ServiceMode   `json:\",omitempty\"`\n\tUpdateConfig   *UpdateConfig `json:\",omitempty\"`\n\tRollbackConfig *UpdateConfig `json:\",omitempty\"`\n\n\t// Networks specifies which networks the service should attach to.\n\t//\n\t// Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead.\n\tNetworks     []NetworkAttachmentConfig `json:\",omitempty\"`\n\tEndpointSpec *EndpointSpec             `json:\",omitempty\"`\n}\n\n// ServiceMode represents the mode of a service.\ntype ServiceMode struct {\n\tReplicated    *ReplicatedService `json:\",omitempty\"`\n\tGlobal        *GlobalService     `json:\",omitempty\"`\n\tReplicatedJob *ReplicatedJob     `json:\",omitempty\"`\n\tGlobalJob     *GlobalJob         `json:\",omitempty\"`\n}\n\n// UpdateState is the state of a service update.\ntype UpdateState string\n\nconst (\n\t// UpdateStateUpdating is the updating state.\n\tUpdateStateUpdating UpdateState = \"updating\"\n\t// UpdateStatePaused is the paused state.\n\tUpdateStatePaused UpdateState = \"paused\"\n\t// UpdateStateCompleted is the completed state.\n\tUpdateStateCompleted UpdateState = \"completed\"\n\t// UpdateStateRollbackStarted is the state with a rollback in progress.\n\tUpdateStateRollbackStarted UpdateState = \"rollback_started\"\n\t// UpdateStateRollbackPaused is the state with a rollback in progress.\n\tUpdateStateRollbackPaused UpdateState = \"rollback_paused\"\n\t// UpdateStateRollbackCompleted is the state with a rollback in progress.\n\tUpdateStateRollbackCompleted UpdateState = \"rollback_completed\"\n)\n\n// UpdateStatus reports the status of a service update.\ntype UpdateStatus struct {\n\tState       UpdateState `json:\",omitempty\"`\n\tStartedAt   *time.Time  `json:\",omitempty\"`\n\tCompletedAt *time.Time  `json:\",omitempty\"`\n\tMessage     string      `json:\",omitempty\"`\n}\n\n// ReplicatedService is a kind of ServiceMode.\ntype ReplicatedService struct {\n\tReplicas *uint64 `json:\",omitempty\"`\n}\n\n// GlobalService is a kind of ServiceMode.\ntype GlobalService struct{}\n\n// ReplicatedJob is the a type of Service which executes a defined Tasks\n// in parallel until the specified number of Tasks have succeeded.\ntype ReplicatedJob struct {\n\t// MaxConcurrent indicates the maximum number of Tasks that should be\n\t// executing simultaneously for this job at any given time. There may be\n\t// fewer Tasks that MaxConcurrent executing simultaneously; for example, if\n\t// there are fewer than MaxConcurrent tasks needed to reach\n\t// TotalCompletions.\n\t//\n\t// If this field is empty, it will default to a max concurrency of 1.\n\tMaxConcurrent *uint64 `json:\",omitempty\"`\n\n\t// TotalCompletions is the total number of Tasks desired to run to\n\t// completion.\n\t//\n\t// If this field is empty, the value of MaxConcurrent will be used.\n\tTotalCompletions *uint64 `json:\",omitempty\"`\n}\n\n// GlobalJob is the type of a Service which executes a Task on every Node\n// matching the Service's placement constraints. These tasks run to completion\n// and then exit.\n//\n// This type is deliberately empty.\ntype GlobalJob struct{}\n\nconst (\n\t// UpdateFailureActionPause PAUSE\n\tUpdateFailureActionPause = \"pause\"\n\t// UpdateFailureActionContinue CONTINUE\n\tUpdateFailureActionContinue = \"continue\"\n\t// UpdateFailureActionRollback ROLLBACK\n\tUpdateFailureActionRollback = \"rollback\"\n\n\t// UpdateOrderStopFirst STOP_FIRST\n\tUpdateOrderStopFirst = \"stop-first\"\n\t// UpdateOrderStartFirst START_FIRST\n\tUpdateOrderStartFirst = \"start-first\"\n)\n\n// UpdateConfig represents the update configuration.\ntype UpdateConfig struct {\n\t// Maximum number of tasks to be updated in one iteration.\n\t// 0 means unlimited parallelism.\n\tParallelism uint64\n\n\t// Amount of time between updates.\n\tDelay time.Duration `json:\",omitempty\"`\n\n\t// FailureAction is the action to take when an update failures.\n\tFailureAction string `json:\",omitempty\"`\n\n\t// Monitor indicates how long to monitor a task for failure after it is\n\t// created. If the task fails by ending up in one of the states\n\t// REJECTED, COMPLETED, or FAILED, within Monitor from its creation,\n\t// this counts as a failure. If it fails after Monitor, it does not\n\t// count as a failure. If Monitor is unspecified, a default value will\n\t// be used.\n\tMonitor time.Duration `json:\",omitempty\"`\n\n\t// MaxFailureRatio is the fraction of tasks that may fail during\n\t// an update before the failure action is invoked. Any task created by\n\t// the current update which ends up in one of the states REJECTED,\n\t// COMPLETED or FAILED within Monitor from its creation counts as a\n\t// failure. The number of failures is divided by the number of tasks\n\t// being updated, and if this fraction is greater than\n\t// MaxFailureRatio, the failure action is invoked.\n\t//\n\t// If the failure action is CONTINUE, there is no effect.\n\t// If the failure action is PAUSE, no more tasks will be updated until\n\t// another update is started.\n\tMaxFailureRatio float32\n\n\t// Order indicates the order of operations when rolling out an updated\n\t// task. Either the old task is shut down before the new task is\n\t// started, or the new task is started before the old task is shut down.\n\tOrder string\n}\n\n// ServiceStatus represents the number of running tasks in a service and the\n// number of tasks desired to be running.\ntype ServiceStatus struct {\n\t// RunningTasks is the number of tasks for the service actually in the\n\t// Running state\n\tRunningTasks uint64\n\n\t// DesiredTasks is the number of tasks desired to be running by the\n\t// service. For replicated services, this is the replica count. For global\n\t// services, this is computed by taking the number of tasks with desired\n\t// state of not-Shutdown.\n\tDesiredTasks uint64\n\n\t// CompletedTasks is the number of tasks in the state Completed, if this\n\t// service is in ReplicatedJob or GlobalJob mode. This field must be\n\t// cross-referenced with the service type, because the default value of 0\n\t// may mean that a service is not in a job mode, or it may mean that the\n\t// job has yet to complete any tasks.\n\tCompletedTasks uint64\n}\n\n// JobStatus is the status of a job-type service.\ntype JobStatus struct {\n\t// JobIteration is a value increased each time a Job is executed,\n\t// successfully or otherwise. \"Executed\", in this case, means the job as a\n\t// whole has been started, not that an individual Task has been launched. A\n\t// job is \"Executed\" when its ServiceSpec is updated. JobIteration can be\n\t// used to disambiguate Tasks belonging to different executions of a job.\n\t//\n\t// Though JobIteration will increase with each subsequent execution, it may\n\t// not necessarily increase by 1, and so JobIteration should not be used to\n\t// keep track of the number of times a job has been executed.\n\tJobIteration Version\n\n\t// LastExecution is the time that the job was last executed, as observed by\n\t// Swarm manager.\n\tLastExecution time.Time `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/service_create_response.go",
    "content": "package swarm\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// ServiceCreateResponse contains the information returned to a client on the\n// creation of a new service.\n//\n// swagger:model ServiceCreateResponse\ntype ServiceCreateResponse struct {\n\n\t// The ID of the created service.\n\tID string `json:\"ID,omitempty\"`\n\n\t// Optional warning message.\n\t//\n\t// FIXME(thaJeztah): this should have \"omitempty\" in the generated type.\n\t//\n\tWarnings []string `json:\"Warnings\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/service_update_response.go",
    "content": "package swarm\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// ServiceUpdateResponse service update response\n// swagger:model ServiceUpdateResponse\ntype ServiceUpdateResponse struct {\n\n\t// Optional warning messages\n\tWarnings []string `json:\"Warnings\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/swarm.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport (\n\t\"time\"\n)\n\n// ClusterInfo represents info about the cluster for outputting in \"info\"\n// it contains the same information as \"Swarm\", but without the JoinTokens\ntype ClusterInfo struct {\n\tID string\n\tMeta\n\tSpec                   Spec\n\tTLSInfo                TLSInfo\n\tRootRotationInProgress bool\n\tDefaultAddrPool        []string\n\tSubnetSize             uint32\n\tDataPathPort           uint32\n}\n\n// Swarm represents a swarm.\ntype Swarm struct {\n\tClusterInfo\n\tJoinTokens JoinTokens\n}\n\n// JoinTokens contains the tokens workers and managers need to join the swarm.\ntype JoinTokens struct {\n\t// Worker is the join token workers may use to join the swarm.\n\tWorker string\n\t// Manager is the join token managers may use to join the swarm.\n\tManager string\n}\n\n// Spec represents the spec of a swarm.\ntype Spec struct {\n\tAnnotations\n\n\tOrchestration    OrchestrationConfig `json:\",omitempty\"`\n\tRaft             RaftConfig          `json:\",omitempty\"`\n\tDispatcher       DispatcherConfig    `json:\",omitempty\"`\n\tCAConfig         CAConfig            `json:\",omitempty\"`\n\tTaskDefaults     TaskDefaults        `json:\",omitempty\"`\n\tEncryptionConfig EncryptionConfig    `json:\",omitempty\"`\n}\n\n// OrchestrationConfig represents orchestration configuration.\ntype OrchestrationConfig struct {\n\t// TaskHistoryRetentionLimit is the number of historic tasks to keep per instance or\n\t// node. If negative, never remove completed or failed tasks.\n\tTaskHistoryRetentionLimit *int64 `json:\",omitempty\"`\n}\n\n// TaskDefaults parameterizes cluster-level task creation with default values.\ntype TaskDefaults struct {\n\t// LogDriver selects the log driver to use for tasks created in the\n\t// orchestrator if unspecified by a service.\n\t//\n\t// Updating this value will only have an affect on new tasks. Old tasks\n\t// will continue use their previously configured log driver until\n\t// recreated.\n\tLogDriver *Driver `json:\",omitempty\"`\n}\n\n// EncryptionConfig controls at-rest encryption of data and keys.\ntype EncryptionConfig struct {\n\t// AutoLockManagers specifies whether or not managers TLS keys and raft data\n\t// should be encrypted at rest in such a way that they must be unlocked\n\t// before the manager node starts up again.\n\tAutoLockManagers bool\n}\n\n// RaftConfig represents raft configuration.\ntype RaftConfig struct {\n\t// SnapshotInterval is the number of log entries between snapshots.\n\tSnapshotInterval uint64 `json:\",omitempty\"`\n\n\t// KeepOldSnapshots is the number of snapshots to keep beyond the\n\t// current snapshot.\n\tKeepOldSnapshots *uint64 `json:\",omitempty\"`\n\n\t// LogEntriesForSlowFollowers is the number of log entries to keep\n\t// around to sync up slow followers after a snapshot is created.\n\tLogEntriesForSlowFollowers uint64 `json:\",omitempty\"`\n\n\t// ElectionTick is the number of ticks that a follower will wait for a message\n\t// from the leader before becoming a candidate and starting an election.\n\t// ElectionTick must be greater than HeartbeatTick.\n\t//\n\t// A tick currently defaults to one second, so these translate directly to\n\t// seconds currently, but this is NOT guaranteed.\n\tElectionTick int\n\n\t// HeartbeatTick is the number of ticks between heartbeats. Every\n\t// HeartbeatTick ticks, the leader will send a heartbeat to the\n\t// followers.\n\t//\n\t// A tick currently defaults to one second, so these translate directly to\n\t// seconds currently, but this is NOT guaranteed.\n\tHeartbeatTick int\n}\n\n// DispatcherConfig represents dispatcher configuration.\ntype DispatcherConfig struct {\n\t// HeartbeatPeriod defines how often agent should send heartbeats to\n\t// dispatcher.\n\tHeartbeatPeriod time.Duration `json:\",omitempty\"`\n}\n\n// CAConfig represents CA configuration.\ntype CAConfig struct {\n\t// NodeCertExpiry is the duration certificates should be issued for\n\tNodeCertExpiry time.Duration `json:\",omitempty\"`\n\n\t// ExternalCAs is a list of CAs to which a manager node will make\n\t// certificate signing requests for node certificates.\n\tExternalCAs []*ExternalCA `json:\",omitempty\"`\n\n\t// SigningCACert and SigningCAKey specify the desired signing root CA and\n\t// root CA key for the swarm.  When inspecting the cluster, the key will\n\t// be redacted.\n\tSigningCACert string `json:\",omitempty\"`\n\tSigningCAKey  string `json:\",omitempty\"`\n\n\t// If this value changes, and there is no specified signing cert and key,\n\t// then the swarm is forced to generate a new root certificate and key.\n\tForceRotate uint64 `json:\",omitempty\"`\n}\n\n// ExternalCAProtocol represents type of external CA.\ntype ExternalCAProtocol string\n\n// ExternalCAProtocolCFSSL CFSSL\nconst ExternalCAProtocolCFSSL ExternalCAProtocol = \"cfssl\"\n\n// ExternalCA defines external CA to be used by the cluster.\ntype ExternalCA struct {\n\t// Protocol is the protocol used by this external CA.\n\tProtocol ExternalCAProtocol\n\n\t// URL is the URL where the external CA can be reached.\n\tURL string\n\n\t// Options is a set of additional key/value pairs whose interpretation\n\t// depends on the specified CA type.\n\tOptions map[string]string `json:\",omitempty\"`\n\n\t// CACert specifies which root CA is used by this external CA.  This certificate must\n\t// be in PEM format.\n\tCACert string\n}\n\n// InitRequest is the request used to init a swarm.\ntype InitRequest struct {\n\tListenAddr       string\n\tAdvertiseAddr    string\n\tDataPathAddr     string\n\tDataPathPort     uint32\n\tForceNewCluster  bool\n\tSpec             Spec\n\tAutoLockManagers bool\n\tAvailability     NodeAvailability\n\tDefaultAddrPool  []string\n\tSubnetSize       uint32\n}\n\n// JoinRequest is the request used to join a swarm.\ntype JoinRequest struct {\n\tListenAddr    string\n\tAdvertiseAddr string\n\tDataPathAddr  string\n\tRemoteAddrs   []string\n\tJoinToken     string // accept by secret\n\tAvailability  NodeAvailability\n}\n\n// UnlockRequest is the request used to unlock a swarm.\ntype UnlockRequest struct {\n\t// UnlockKey is the unlock key in ASCII-armored format.\n\tUnlockKey string\n}\n\n// LocalNodeState represents the state of the local node.\ntype LocalNodeState string\n\nconst (\n\t// LocalNodeStateInactive INACTIVE\n\tLocalNodeStateInactive LocalNodeState = \"inactive\"\n\t// LocalNodeStatePending PENDING\n\tLocalNodeStatePending LocalNodeState = \"pending\"\n\t// LocalNodeStateActive ACTIVE\n\tLocalNodeStateActive LocalNodeState = \"active\"\n\t// LocalNodeStateError ERROR\n\tLocalNodeStateError LocalNodeState = \"error\"\n\t// LocalNodeStateLocked LOCKED\n\tLocalNodeStateLocked LocalNodeState = \"locked\"\n)\n\n// Info represents generic information about swarm.\ntype Info struct {\n\tNodeID   string\n\tNodeAddr string\n\n\tLocalNodeState   LocalNodeState\n\tControlAvailable bool\n\tError            string\n\n\tRemoteManagers []Peer\n\tNodes          int `json:\",omitempty\"`\n\tManagers       int `json:\",omitempty\"`\n\n\tCluster *ClusterInfo `json:\",omitempty\"`\n\n\tWarnings []string `json:\",omitempty\"`\n}\n\n// Status provides information about the current swarm status and role,\n// obtained from the \"Swarm\" header in the API response.\ntype Status struct {\n\t// NodeState represents the state of the node.\n\tNodeState LocalNodeState\n\n\t// ControlAvailable indicates if the node is a swarm manager.\n\tControlAvailable bool\n}\n\n// Peer represents a peer.\ntype Peer struct {\n\tNodeID string\n\tAddr   string\n}\n\n// UpdateFlags contains flags for SwarmUpdate.\ntype UpdateFlags struct {\n\tRotateWorkerToken      bool\n\tRotateManagerToken     bool\n\tRotateManagerUnlockKey bool\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/swarm/task.go",
    "content": "package swarm // import \"github.com/docker/docker/api/types/swarm\"\n\nimport (\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/swarm/runtime\"\n)\n\n// TaskState represents the state of a task.\ntype TaskState string\n\nconst (\n\t// TaskStateNew NEW\n\tTaskStateNew TaskState = \"new\"\n\t// TaskStateAllocated ALLOCATED\n\tTaskStateAllocated TaskState = \"allocated\"\n\t// TaskStatePending PENDING\n\tTaskStatePending TaskState = \"pending\"\n\t// TaskStateAssigned ASSIGNED\n\tTaskStateAssigned TaskState = \"assigned\"\n\t// TaskStateAccepted ACCEPTED\n\tTaskStateAccepted TaskState = \"accepted\"\n\t// TaskStatePreparing PREPARING\n\tTaskStatePreparing TaskState = \"preparing\"\n\t// TaskStateReady READY\n\tTaskStateReady TaskState = \"ready\"\n\t// TaskStateStarting STARTING\n\tTaskStateStarting TaskState = \"starting\"\n\t// TaskStateRunning RUNNING\n\tTaskStateRunning TaskState = \"running\"\n\t// TaskStateComplete COMPLETE\n\tTaskStateComplete TaskState = \"complete\"\n\t// TaskStateShutdown SHUTDOWN\n\tTaskStateShutdown TaskState = \"shutdown\"\n\t// TaskStateFailed FAILED\n\tTaskStateFailed TaskState = \"failed\"\n\t// TaskStateRejected REJECTED\n\tTaskStateRejected TaskState = \"rejected\"\n\t// TaskStateRemove REMOVE\n\tTaskStateRemove TaskState = \"remove\"\n\t// TaskStateOrphaned ORPHANED\n\tTaskStateOrphaned TaskState = \"orphaned\"\n)\n\n// Task represents a task.\ntype Task struct {\n\tID string\n\tMeta\n\tAnnotations\n\n\tSpec                TaskSpec            `json:\",omitempty\"`\n\tServiceID           string              `json:\",omitempty\"`\n\tSlot                int                 `json:\",omitempty\"`\n\tNodeID              string              `json:\",omitempty\"`\n\tStatus              TaskStatus          `json:\",omitempty\"`\n\tDesiredState        TaskState           `json:\",omitempty\"`\n\tNetworksAttachments []NetworkAttachment `json:\",omitempty\"`\n\tGenericResources    []GenericResource   `json:\",omitempty\"`\n\n\t// JobIteration is the JobIteration of the Service that this Task was\n\t// spawned from, if the Service is a ReplicatedJob or GlobalJob. This is\n\t// used to determine which Tasks belong to which run of the job. This field\n\t// is absent if the Service mode is Replicated or Global.\n\tJobIteration *Version `json:\",omitempty\"`\n\n\t// Volumes is the list of VolumeAttachments for this task. It specifies\n\t// which particular volumes are to be used by this particular task, and\n\t// fulfilling what mounts in the spec.\n\tVolumes []VolumeAttachment\n}\n\n// TaskSpec represents the spec of a task.\ntype TaskSpec struct {\n\t// ContainerSpec, NetworkAttachmentSpec, and PluginSpec are mutually exclusive.\n\t// PluginSpec is only used when the `Runtime` field is set to `plugin`\n\t// NetworkAttachmentSpec is used if the `Runtime` field is set to\n\t// `attachment`.\n\tContainerSpec         *ContainerSpec         `json:\",omitempty\"`\n\tPluginSpec            *runtime.PluginSpec    `json:\",omitempty\"`\n\tNetworkAttachmentSpec *NetworkAttachmentSpec `json:\",omitempty\"`\n\n\tResources     *ResourceRequirements     `json:\",omitempty\"`\n\tRestartPolicy *RestartPolicy            `json:\",omitempty\"`\n\tPlacement     *Placement                `json:\",omitempty\"`\n\tNetworks      []NetworkAttachmentConfig `json:\",omitempty\"`\n\n\t// LogDriver specifies the LogDriver to use for tasks created from this\n\t// spec. If not present, the one on cluster default on swarm.Spec will be\n\t// used, finally falling back to the engine default if not specified.\n\tLogDriver *Driver `json:\",omitempty\"`\n\n\t// ForceUpdate is a counter that triggers an update even if no relevant\n\t// parameters have been changed.\n\tForceUpdate uint64\n\n\tRuntime RuntimeType `json:\",omitempty\"`\n}\n\n// Resources represents resources (CPU/Memory) which can be advertised by a\n// node and requested to be reserved for a task.\ntype Resources struct {\n\tNanoCPUs         int64             `json:\",omitempty\"`\n\tMemoryBytes      int64             `json:\",omitempty\"`\n\tGenericResources []GenericResource `json:\",omitempty\"`\n}\n\n// Limit describes limits on resources which can be requested by a task.\ntype Limit struct {\n\tNanoCPUs    int64 `json:\",omitempty\"`\n\tMemoryBytes int64 `json:\",omitempty\"`\n\tPids        int64 `json:\",omitempty\"`\n}\n\n// GenericResource represents a \"user defined\" resource which can\n// be either an integer (e.g: SSD=3) or a string (e.g: SSD=sda1)\ntype GenericResource struct {\n\tNamedResourceSpec    *NamedGenericResource    `json:\",omitempty\"`\n\tDiscreteResourceSpec *DiscreteGenericResource `json:\",omitempty\"`\n}\n\n// NamedGenericResource represents a \"user defined\" resource which is defined\n// as a string.\n// \"Kind\" is used to describe the Kind of a resource (e.g: \"GPU\", \"FPGA\", \"SSD\", ...)\n// Value is used to identify the resource (GPU=\"UUID-1\", FPGA=\"/dev/sdb5\", ...)\ntype NamedGenericResource struct {\n\tKind  string `json:\",omitempty\"`\n\tValue string `json:\",omitempty\"`\n}\n\n// DiscreteGenericResource represents a \"user defined\" resource which is defined\n// as an integer\n// \"Kind\" is used to describe the Kind of a resource (e.g: \"GPU\", \"FPGA\", \"SSD\", ...)\n// Value is used to count the resource (SSD=5, HDD=3, ...)\ntype DiscreteGenericResource struct {\n\tKind  string `json:\",omitempty\"`\n\tValue int64  `json:\",omitempty\"`\n}\n\n// ResourceRequirements represents resources requirements.\ntype ResourceRequirements struct {\n\tLimits       *Limit     `json:\",omitempty\"`\n\tReservations *Resources `json:\",omitempty\"`\n}\n\n// Placement represents orchestration parameters.\ntype Placement struct {\n\tConstraints []string              `json:\",omitempty\"`\n\tPreferences []PlacementPreference `json:\",omitempty\"`\n\tMaxReplicas uint64                `json:\",omitempty\"`\n\n\t// Platforms stores all the platforms that the image can run on.\n\t// This field is used in the platform filter for scheduling. If empty,\n\t// then the platform filter is off, meaning there are no scheduling restrictions.\n\tPlatforms []Platform `json:\",omitempty\"`\n}\n\n// PlacementPreference provides a way to make the scheduler aware of factors\n// such as topology.\ntype PlacementPreference struct {\n\tSpread *SpreadOver\n}\n\n// SpreadOver is a scheduling preference that instructs the scheduler to spread\n// tasks evenly over groups of nodes identified by labels.\ntype SpreadOver struct {\n\t// label descriptor, such as engine.labels.az\n\tSpreadDescriptor string\n}\n\n// RestartPolicy represents the restart policy.\ntype RestartPolicy struct {\n\tCondition   RestartPolicyCondition `json:\",omitempty\"`\n\tDelay       *time.Duration         `json:\",omitempty\"`\n\tMaxAttempts *uint64                `json:\",omitempty\"`\n\tWindow      *time.Duration         `json:\",omitempty\"`\n}\n\n// RestartPolicyCondition represents when to restart.\ntype RestartPolicyCondition string\n\nconst (\n\t// RestartPolicyConditionNone NONE\n\tRestartPolicyConditionNone RestartPolicyCondition = \"none\"\n\t// RestartPolicyConditionOnFailure ON_FAILURE\n\tRestartPolicyConditionOnFailure RestartPolicyCondition = \"on-failure\"\n\t// RestartPolicyConditionAny ANY\n\tRestartPolicyConditionAny RestartPolicyCondition = \"any\"\n)\n\n// TaskStatus represents the status of a task.\ntype TaskStatus struct {\n\tTimestamp       time.Time        `json:\",omitempty\"`\n\tState           TaskState        `json:\",omitempty\"`\n\tMessage         string           `json:\",omitempty\"`\n\tErr             string           `json:\",omitempty\"`\n\tContainerStatus *ContainerStatus `json:\",omitempty\"`\n\tPortStatus      PortStatus       `json:\",omitempty\"`\n}\n\n// ContainerStatus represents the status of a container.\ntype ContainerStatus struct {\n\tContainerID string\n\tPID         int\n\tExitCode    int\n}\n\n// PortStatus represents the port status of a task's host ports whose\n// service has published host ports\ntype PortStatus struct {\n\tPorts []PortConfig `json:\",omitempty\"`\n}\n\n// VolumeAttachment contains the associating a Volume to a Task.\ntype VolumeAttachment struct {\n\t// ID is the Swarmkit ID of the Volume. This is not the CSI VolumeId.\n\tID string `json:\",omitempty\"`\n\n\t// Source, together with Target, indicates the Mount, as specified in the\n\t// ContainerSpec, that this volume fulfills.\n\tSource string `json:\",omitempty\"`\n\n\t// Target, together with Source, indicates the Mount, as specified\n\t// in the ContainerSpec, that this volume fulfills.\n\tTarget string `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/system/info.go",
    "content": "package system\n\nimport (\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// Info contains response of Engine API:\n// GET \"/info\"\ntype Info struct {\n\tID                 string\n\tContainers         int\n\tContainersRunning  int\n\tContainersPaused   int\n\tContainersStopped  int\n\tImages             int\n\tDriver             string\n\tDriverStatus       [][2]string\n\tSystemStatus       [][2]string `json:\",omitempty\"` // SystemStatus is only propagated by the Swarm standalone API\n\tPlugins            PluginsInfo\n\tMemoryLimit        bool\n\tSwapLimit          bool\n\tKernelMemory       bool `json:\",omitempty\"` // Deprecated: kernel 5.4 deprecated kmem.limit_in_bytes\n\tKernelMemoryTCP    bool `json:\",omitempty\"` // KernelMemoryTCP is not supported on cgroups v2.\n\tCPUCfsPeriod       bool `json:\"CpuCfsPeriod\"`\n\tCPUCfsQuota        bool `json:\"CpuCfsQuota\"`\n\tCPUShares          bool\n\tCPUSet             bool\n\tPidsLimit          bool\n\tIPv4Forwarding     bool\n\tBridgeNfIptables   bool `json:\"BridgeNfIptables\"`  // Deprecated: netfilter module is now loaded on-demand and no longer during daemon startup, making this field obsolete. This field is always false and will be removed in the next release.\n\tBridgeNfIP6tables  bool `json:\"BridgeNfIp6tables\"` // Deprecated: netfilter module is now loaded on-demand and no longer during daemon startup, making this field obsolete. This field is always false and will be removed in the next release.\n\tDebug              bool\n\tNFd                int\n\tOomKillDisable     bool\n\tNGoroutines        int\n\tSystemTime         string\n\tLoggingDriver      string\n\tCgroupDriver       string\n\tCgroupVersion      string `json:\",omitempty\"`\n\tNEventsListener    int\n\tKernelVersion      string\n\tOperatingSystem    string\n\tOSVersion          string\n\tOSType             string\n\tArchitecture       string\n\tIndexServerAddress string\n\tRegistryConfig     *registry.ServiceConfig\n\tNCPU               int\n\tMemTotal           int64\n\tGenericResources   []swarm.GenericResource\n\tDockerRootDir      string\n\tHTTPProxy          string `json:\"HttpProxy\"`\n\tHTTPSProxy         string `json:\"HttpsProxy\"`\n\tNoProxy            string\n\tName               string\n\tLabels             []string\n\tExperimentalBuild  bool\n\tServerVersion      string\n\tRuntimes           map[string]RuntimeWithStatus\n\tDefaultRuntime     string\n\tSwarm              swarm.Info\n\t// LiveRestoreEnabled determines whether containers should be kept\n\t// running when the daemon is shutdown or upon daemon start if\n\t// running containers are detected\n\tLiveRestoreEnabled  bool\n\tIsolation           container.Isolation\n\tInitBinary          string\n\tContainerdCommit    Commit\n\tRuncCommit          Commit\n\tInitCommit          Commit\n\tSecurityOptions     []string\n\tProductLicense      string               `json:\",omitempty\"`\n\tDefaultAddressPools []NetworkAddressPool `json:\",omitempty\"`\n\tCDISpecDirs         []string\n\n\tContainerd *ContainerdInfo `json:\",omitempty\"`\n\n\t// Warnings contains a slice of warnings that occurred  while collecting\n\t// system information. These warnings are intended to be informational\n\t// messages for the user, and are not intended to be parsed / used for\n\t// other purposes, as they do not have a fixed format.\n\tWarnings []string\n}\n\n// ContainerdInfo holds information about the containerd instance used by the daemon.\ntype ContainerdInfo struct {\n\t// Address is the path to the containerd socket.\n\tAddress string `json:\",omitempty\"`\n\t// Namespaces is the containerd namespaces used by the daemon.\n\tNamespaces ContainerdNamespaces\n}\n\n// ContainerdNamespaces reflects the containerd namespaces used by the daemon.\n//\n// These namespaces can be configured in the daemon configuration, and are\n// considered to be used exclusively by the daemon,\n//\n// As these namespaces are considered to be exclusively accessed\n// by the daemon, it is not recommended to change these values,\n// or to change them to a value that is used by other systems,\n// such as cri-containerd.\ntype ContainerdNamespaces struct {\n\t// Containers holds the default containerd namespace used for\n\t// containers managed by the daemon.\n\t//\n\t// The default namespace for containers is \"moby\", but will be\n\t// suffixed with the `<uid>.<gid>` of the remapped `root` if\n\t// user-namespaces are enabled and the containerd image-store\n\t// is used.\n\tContainers string\n\n\t// Plugins holds the default containerd namespace used for\n\t// plugins managed by the daemon.\n\t//\n\t// The default namespace for plugins is \"moby\", but will be\n\t// suffixed with the `<uid>.<gid>` of the remapped `root` if\n\t// user-namespaces are enabled and the containerd image-store\n\t// is used.\n\tPlugins string\n}\n\n// PluginsInfo is a temp struct holding Plugins name\n// registered with docker daemon. It is used by [Info] struct\ntype PluginsInfo struct {\n\t// List of Volume plugins registered\n\tVolume []string\n\t// List of Network plugins registered\n\tNetwork []string\n\t// List of Authorization plugins registered\n\tAuthorization []string\n\t// List of Log plugins registered\n\tLog []string\n}\n\n// Commit holds the Git-commit (SHA1) that a binary was built from, as reported\n// in the version-string of external tools, such as containerd, or runC.\ntype Commit struct {\n\t// ID is the actual commit ID or version of external tool.\n\tID string\n\n\t// Expected is the commit ID of external tool expected by dockerd as set at build time.\n\t//\n\t// Deprecated: this field is no longer used in API v1.49, but kept for backward-compatibility with older API versions.\n\tExpected string\n}\n\n// NetworkAddressPool is a temp struct used by [Info] struct.\ntype NetworkAddressPool struct {\n\tBase string\n\tSize int\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/system/runtime.go",
    "content": "package system\n\n// Runtime describes an OCI runtime\ntype Runtime struct {\n\t// \"Legacy\" runtime configuration for runc-compatible runtimes.\n\n\tPath string   `json:\"path,omitempty\"`\n\tArgs []string `json:\"runtimeArgs,omitempty\"`\n\n\t// Shimv2 runtime configuration. Mutually exclusive with the legacy config above.\n\n\tType    string                 `json:\"runtimeType,omitempty\"`\n\tOptions map[string]interface{} `json:\"options,omitempty\"`\n}\n\n// RuntimeWithStatus extends [Runtime] to hold [RuntimeStatus].\ntype RuntimeWithStatus struct {\n\tRuntime\n\tStatus map[string]string `json:\"status,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/system/security_opts.go",
    "content": "package system\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// SecurityOpt contains the name and options of a security option\ntype SecurityOpt struct {\n\tName    string\n\tOptions []KeyValue\n}\n\n// DecodeSecurityOptions decodes a security options string slice to a\n// type-safe [SecurityOpt].\nfunc DecodeSecurityOptions(opts []string) ([]SecurityOpt, error) {\n\tso := []SecurityOpt{}\n\tfor _, opt := range opts {\n\t\t// support output from a < 1.13 docker daemon\n\t\tif !strings.Contains(opt, \"=\") {\n\t\t\tso = append(so, SecurityOpt{Name: opt})\n\t\t\tcontinue\n\t\t}\n\t\tsecopt := SecurityOpt{}\n\t\tfor _, s := range strings.Split(opt, \",\") {\n\t\t\tk, v, ok := strings.Cut(s, \"=\")\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid security option %q\", s)\n\t\t\t}\n\t\t\tif k == \"\" || v == \"\" {\n\t\t\t\treturn nil, errors.New(\"invalid empty security option\")\n\t\t\t}\n\t\t\tif k == \"name\" {\n\t\t\t\tsecopt.Name = v\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsecopt.Options = append(secopt.Options, KeyValue{Key: k, Value: v})\n\t\t}\n\t\tso = append(so, secopt)\n\t}\n\treturn so, nil\n}\n\n// KeyValue holds a key/value pair.\ntype KeyValue struct {\n\tKey, Value string\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/time/timestamp.go",
    "content": "package time // import \"github.com/docker/docker/api/types/time\"\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// These are additional predefined layouts for use in Time.Format and Time.Parse\n// with --since and --until parameters for `docker logs` and `docker events`\nconst (\n\trFC3339Local     = \"2006-01-02T15:04:05\"           // RFC3339 with local timezone\n\trFC3339NanoLocal = \"2006-01-02T15:04:05.999999999\" // RFC3339Nano with local timezone\n\tdateWithZone     = \"2006-01-02Z07:00\"              // RFC3339 with time at 00:00:00\n\tdateLocal        = \"2006-01-02\"                    // RFC3339 with local timezone and time at 00:00:00\n)\n\n// GetTimestamp tries to parse given string as golang duration,\n// then RFC3339 time and finally as a Unix timestamp. If\n// any of these were successful, it returns a Unix timestamp\n// as string otherwise returns the given value back.\n// In case of duration input, the returned timestamp is computed\n// as the given reference time minus the amount of the duration.\nfunc GetTimestamp(value string, reference time.Time) (string, error) {\n\tif d, err := time.ParseDuration(value); value != \"0\" && err == nil {\n\t\treturn strconv.FormatInt(reference.Add(-d).Unix(), 10), nil\n\t}\n\n\tvar format string\n\t// if the string has a Z or a + or three dashes use parse otherwise use parseinlocation\n\tparseInLocation := !(strings.ContainsAny(value, \"zZ+\") || strings.Count(value, \"-\") == 3)\n\n\tif strings.Contains(value, \".\") {\n\t\tif parseInLocation {\n\t\t\tformat = rFC3339NanoLocal\n\t\t} else {\n\t\t\tformat = time.RFC3339Nano\n\t\t}\n\t} else if strings.Contains(value, \"T\") {\n\t\t// we want the number of colons in the T portion of the timestamp\n\t\ttcolons := strings.Count(value, \":\")\n\t\t// if parseInLocation is off and we have a +/- zone offset (not Z) then\n\t\t// there will be an extra colon in the input for the tz offset subtract that\n\t\t// colon from the tcolons count\n\t\tif !parseInLocation && !strings.ContainsAny(value, \"zZ\") && tcolons > 0 {\n\t\t\ttcolons--\n\t\t}\n\t\tif parseInLocation {\n\t\t\tswitch tcolons {\n\t\t\tcase 0:\n\t\t\t\tformat = \"2006-01-02T15\"\n\t\t\tcase 1:\n\t\t\t\tformat = \"2006-01-02T15:04\"\n\t\t\tdefault:\n\t\t\t\tformat = rFC3339Local\n\t\t\t}\n\t\t} else {\n\t\t\tswitch tcolons {\n\t\t\tcase 0:\n\t\t\t\tformat = \"2006-01-02T15Z07:00\"\n\t\t\tcase 1:\n\t\t\t\tformat = \"2006-01-02T15:04Z07:00\"\n\t\t\tdefault:\n\t\t\t\tformat = time.RFC3339\n\t\t\t}\n\t\t}\n\t} else if parseInLocation {\n\t\tformat = dateLocal\n\t} else {\n\t\tformat = dateWithZone\n\t}\n\n\tvar t time.Time\n\tvar err error\n\n\tif parseInLocation {\n\t\tt, err = time.ParseInLocation(format, value, time.FixedZone(reference.Zone()))\n\t} else {\n\t\tt, err = time.Parse(format, value)\n\t}\n\n\tif err != nil {\n\t\t// if there is a `-` then it's an RFC3339 like timestamp\n\t\tif strings.Contains(value, \"-\") {\n\t\t\treturn \"\", err // was probably an RFC3339 like timestamp but the parser failed with an error\n\t\t}\n\t\tif _, _, err := parseTimestamp(value); err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"failed to parse value as time or duration: %q\", value)\n\t\t}\n\t\treturn value, nil // unix timestamp in and out case (meaning: the value passed at the command line is already in the right format for passing to the server)\n\t}\n\n\treturn fmt.Sprintf(\"%d.%09d\", t.Unix(), int64(t.Nanosecond())), nil\n}\n\n// ParseTimestamps returns seconds and nanoseconds from a timestamp that has\n// the format (\"%d.%09d\", time.Unix(), int64(time.Nanosecond())).\n// If the incoming nanosecond portion is longer than 9 digits it is truncated.\n// The expectation is that the seconds and nanoseconds will be used to create a\n// time variable.  For example:\n//\n//\tseconds, nanoseconds, _ := ParseTimestamp(\"1136073600.000000001\",0)\n//\tsince := time.Unix(seconds, nanoseconds)\n//\n// returns seconds as defaultSeconds if value == \"\"\nfunc ParseTimestamps(value string, defaultSeconds int64) (seconds int64, nanoseconds int64, err error) {\n\tif value == \"\" {\n\t\treturn defaultSeconds, 0, nil\n\t}\n\treturn parseTimestamp(value)\n}\n\nfunc parseTimestamp(value string) (sec int64, nsec int64, err error) {\n\ts, n, ok := strings.Cut(value, \".\")\n\tsec, err = strconv.ParseInt(s, 10, 64)\n\tif err != nil {\n\t\treturn sec, 0, err\n\t}\n\tif !ok {\n\t\treturn sec, 0, nil\n\t}\n\tnsec, err = strconv.ParseInt(n, 10, 64)\n\tif err != nil {\n\t\treturn sec, nsec, err\n\t}\n\t// should already be in nanoseconds but just in case convert n to nanoseconds\n\tnsec = int64(float64(nsec) * math.Pow(float64(10), float64(9-len(n))))\n\treturn sec, nsec, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/types.go",
    "content": "package types // import \"github.com/docker/docker/api/types\"\n\nimport (\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/image\"\n\t\"github.com/docker/docker/api/types/swarm\"\n\t\"github.com/docker/docker/api/types/volume\"\n)\n\nconst (\n\t// MediaTypeRawStream is vendor specific MIME-Type set for raw TTY streams\n\tMediaTypeRawStream = \"application/vnd.docker.raw-stream\"\n\n\t// MediaTypeMultiplexedStream is vendor specific MIME-Type set for stdin/stdout/stderr multiplexed streams\n\tMediaTypeMultiplexedStream = \"application/vnd.docker.multiplexed-stream\"\n)\n\n// Ping contains response of Engine API:\n// GET \"/_ping\"\ntype Ping struct {\n\tAPIVersion     string\n\tOSType         string\n\tExperimental   bool\n\tBuilderVersion BuilderVersion\n\n\t// SwarmStatus provides information about the current swarm status of the\n\t// engine, obtained from the \"Swarm\" header in the API response.\n\t//\n\t// It can be a nil struct if the API version does not provide this header\n\t// in the ping response, or if an error occurred, in which case the client\n\t// should use other ways to get the current swarm status, such as the /swarm\n\t// endpoint.\n\tSwarmStatus *swarm.Status\n}\n\n// ComponentVersion describes the version information for a specific component.\ntype ComponentVersion struct {\n\tName    string\n\tVersion string\n\tDetails map[string]string `json:\",omitempty\"`\n}\n\n// Version contains response of Engine API:\n// GET \"/version\"\ntype Version struct {\n\tPlatform   struct{ Name string } `json:\",omitempty\"`\n\tComponents []ComponentVersion    `json:\",omitempty\"`\n\n\t// The following fields are deprecated, they relate to the Engine component and are kept for backwards compatibility\n\n\tVersion       string\n\tAPIVersion    string `json:\"ApiVersion\"`\n\tMinAPIVersion string `json:\"MinAPIVersion,omitempty\"`\n\tGitCommit     string\n\tGoVersion     string\n\tOs            string\n\tArch          string\n\tKernelVersion string `json:\",omitempty\"`\n\tExperimental  bool   `json:\",omitempty\"`\n\tBuildTime     string `json:\",omitempty\"`\n}\n\n// DiskUsageObject represents an object type used for disk usage query filtering.\ntype DiskUsageObject string\n\nconst (\n\t// ContainerObject represents a container DiskUsageObject.\n\tContainerObject DiskUsageObject = \"container\"\n\t// ImageObject represents an image DiskUsageObject.\n\tImageObject DiskUsageObject = \"image\"\n\t// VolumeObject represents a volume DiskUsageObject.\n\tVolumeObject DiskUsageObject = \"volume\"\n\t// BuildCacheObject represents a build-cache DiskUsageObject.\n\tBuildCacheObject DiskUsageObject = \"build-cache\"\n)\n\n// DiskUsageOptions holds parameters for system disk usage query.\ntype DiskUsageOptions struct {\n\t// Types specifies what object types to include in the response. If empty,\n\t// all object types are returned.\n\tTypes []DiskUsageObject\n}\n\n// DiskUsage contains response of Engine API:\n// GET \"/system/df\"\ntype DiskUsage struct {\n\tLayersSize  int64\n\tImages      []*image.Summary\n\tContainers  []*container.Summary\n\tVolumes     []*volume.Volume\n\tBuildCache  []*BuildCache\n\tBuilderSize int64 `json:\",omitempty\"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40.\n}\n\n// BuildCachePruneReport contains the response for Engine API:\n// POST \"/build/prune\"\ntype BuildCachePruneReport struct {\n\tCachesDeleted  []string\n\tSpaceReclaimed uint64\n}\n\n// SecretCreateResponse contains the information returned to a client\n// on the creation of a new secret.\ntype SecretCreateResponse struct {\n\t// ID is the id of the created secret.\n\tID string\n}\n\n// SecretListOptions holds parameters to list secrets\ntype SecretListOptions struct {\n\tFilters filters.Args\n}\n\n// ConfigCreateResponse contains the information returned to a client\n// on the creation of a new config.\ntype ConfigCreateResponse struct {\n\t// ID is the id of the created config.\n\tID string\n}\n\n// ConfigListOptions holds parameters to list configs\ntype ConfigListOptions struct {\n\tFilters filters.Args\n}\n\n// PushResult contains the tag, manifest digest, and manifest size from the\n// push. It's used to signal this information to the trust code in the client\n// so it can sign the manifest if necessary.\ntype PushResult struct {\n\tTag    string\n\tDigest string\n\tSize   int\n}\n\n// BuildResult contains the image id of a successful build\ntype BuildResult struct {\n\tID string\n}\n\n// BuildCache contains information about a build cache record.\ntype BuildCache struct {\n\t// ID is the unique ID of the build cache record.\n\tID string\n\t// Parent is the ID of the parent build cache record.\n\t//\n\t// Deprecated: deprecated in API v1.42 and up, as it was deprecated in BuildKit; use Parents instead.\n\tParent string `json:\"Parent,omitempty\"`\n\t// Parents is the list of parent build cache record IDs.\n\tParents []string `json:\" Parents,omitempty\"`\n\t// Type is the cache record type.\n\tType string\n\t// Description is a description of the build-step that produced the build cache.\n\tDescription string\n\t// InUse indicates if the build cache is in use.\n\tInUse bool\n\t// Shared indicates if the build cache is shared.\n\tShared bool\n\t// Size is the amount of disk space used by the build cache (in bytes).\n\tSize int64\n\t// CreatedAt is the date and time at which the build cache was created.\n\tCreatedAt time.Time\n\t// LastUsedAt is the date and time at which the build cache was last used.\n\tLastUsedAt *time.Time\n\tUsageCount int\n}\n\n// BuildCachePruneOptions hold parameters to prune the build cache\ntype BuildCachePruneOptions struct {\n\tAll           bool\n\tReservedSpace int64\n\tMaxUsedSpace  int64\n\tMinFreeSpace  int64\n\tFilters       filters.Args\n\n\tKeepStorage int64 // Deprecated: deprecated in API 1.48.\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/types_deprecated.go",
    "content": "package types\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/common\"\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/image\"\n\t\"github.com/docker/docker/api/types/storage\"\n)\n\n// IDResponse Response to an API call that returns just an Id.\n//\n// Deprecated: use either [container.CommitResponse] or [container.ExecCreateResponse]. It will be removed in the next release.\ntype IDResponse = common.IDResponse\n\n// ContainerJSONBase contains response of Engine API GET \"/containers/{name:.*}/json\"\n// for API version 1.18 and older.\n//\n// Deprecated: use [container.InspectResponse] or [container.ContainerJSONBase]. It will be removed in the next release.\ntype ContainerJSONBase = container.ContainerJSONBase\n\n// ContainerJSON is the response for the GET \"/containers/{name:.*}/json\"\n// endpoint.\n//\n// Deprecated: use [container.InspectResponse]. It will be removed in the next release.\ntype ContainerJSON = container.InspectResponse\n\n// Container contains response of Engine API:\n// GET \"/containers/json\"\n//\n// Deprecated: use [container.Summary].\ntype Container = container.Summary\n\n// ContainerState stores container's running state\n//\n// Deprecated: use [container.State].\ntype ContainerState = container.State\n\n// NetworkSettings exposes the network settings in the api.\n//\n// Deprecated: use [container.NetworkSettings].\ntype NetworkSettings = container.NetworkSettings\n\n// NetworkSettingsBase holds networking state for a container when inspecting it.\n//\n// Deprecated: use [container.NetworkSettingsBase].\ntype NetworkSettingsBase = container.NetworkSettingsBase\n\n// DefaultNetworkSettings holds network information\n// during the 2 release deprecation period.\n// It will be removed in Docker 1.11.\n//\n// Deprecated: use [container.DefaultNetworkSettings].\ntype DefaultNetworkSettings = container.DefaultNetworkSettings\n\n// SummaryNetworkSettings provides a summary of container's networks\n// in /containers/json.\n//\n// Deprecated: use [container.NetworkSettingsSummary].\ntype SummaryNetworkSettings = container.NetworkSettingsSummary\n\n// Health states\nconst (\n\tNoHealthcheck = container.NoHealthcheck // Deprecated: use [container.NoHealthcheck].\n\tStarting      = container.Starting      // Deprecated: use [container.Starting].\n\tHealthy       = container.Healthy       // Deprecated: use [container.Healthy].\n\tUnhealthy     = container.Unhealthy     // Deprecated: use [container.Unhealthy].\n)\n\n// Health stores information about the container's healthcheck results.\n//\n// Deprecated: use [container.Health].\ntype Health = container.Health\n\n// HealthcheckResult stores information about a single run of a healthcheck probe.\n//\n// Deprecated: use [container.HealthcheckResult].\ntype HealthcheckResult = container.HealthcheckResult\n\n// MountPoint represents a mount point configuration inside the container.\n// This is used for reporting the mountpoints in use by a container.\n//\n// Deprecated: use [container.MountPoint].\ntype MountPoint = container.MountPoint\n\n// Port An open port on a container\n//\n// Deprecated: use [container.Port].\ntype Port = container.Port\n\n// GraphDriverData Information about the storage driver used to store the container's and\n// image's filesystem.\n//\n// Deprecated: use [storage.DriverData].\ntype GraphDriverData = storage.DriverData\n\n// RootFS returns Image's RootFS description including the layer IDs.\n//\n// Deprecated: use [image.RootFS].\ntype RootFS = image.RootFS\n\n// ImageInspect contains response of Engine API:\n// GET \"/images/{name:.*}/json\"\n//\n// Deprecated: use [image.InspectResponse].\ntype ImageInspect = image.InspectResponse\n\n// RequestPrivilegeFunc is a function interface that clients can supply to\n// retry operations after getting an authorization error.\n// This function returns the registry authentication header value in base64\n// format, or an error if the privilege request fails.\n//\n// Deprecated: moved to [github.com/docker/docker/api/types/registry.RequestAuthConfig].\ntype RequestPrivilegeFunc func(context.Context) (string, error)\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/versions/compare.go",
    "content": "package versions // import \"github.com/docker/docker/api/types/versions\"\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n)\n\n// compare compares two version strings\n// returns -1 if v1 < v2, 1 if v1 > v2, 0 otherwise.\nfunc compare(v1, v2 string) int {\n\tif v1 == v2 {\n\t\treturn 0\n\t}\n\tvar (\n\t\tcurrTab  = strings.Split(v1, \".\")\n\t\totherTab = strings.Split(v2, \".\")\n\t)\n\n\tmaxVer := len(currTab)\n\tif len(otherTab) > maxVer {\n\t\tmaxVer = len(otherTab)\n\t}\n\tfor i := 0; i < maxVer; i++ {\n\t\tvar currInt, otherInt int\n\n\t\tif len(currTab) > i {\n\t\t\tcurrInt, _ = strconv.Atoi(currTab[i])\n\t\t}\n\t\tif len(otherTab) > i {\n\t\t\totherInt, _ = strconv.Atoi(otherTab[i])\n\t\t}\n\t\tif currInt > otherInt {\n\t\t\treturn 1\n\t\t}\n\t\tif otherInt > currInt {\n\t\t\treturn -1\n\t\t}\n\t}\n\treturn 0\n}\n\n// LessThan checks if a version is less than another\nfunc LessThan(v, other string) bool {\n\treturn compare(v, other) == -1\n}\n\n// LessThanOrEqualTo checks if a version is less than or equal to another\nfunc LessThanOrEqualTo(v, other string) bool {\n\treturn compare(v, other) <= 0\n}\n\n// GreaterThan checks if a version is greater than another\nfunc GreaterThan(v, other string) bool {\n\treturn compare(v, other) == 1\n}\n\n// GreaterThanOrEqualTo checks if a version is greater than or equal to another\nfunc GreaterThanOrEqualTo(v, other string) bool {\n\treturn compare(v, other) >= 0\n}\n\n// Equal checks if a version is equal to another\nfunc Equal(v, other string) bool {\n\treturn compare(v, other) == 0\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/volume/cluster_volume.go",
    "content": "package volume\n\nimport (\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// ClusterVolume contains options and information specific to, and only present\n// on, Swarm CSI cluster volumes.\ntype ClusterVolume struct {\n\t// ID is the Swarm ID of the volume. Because cluster volumes are Swarm\n\t// objects, they have an ID, unlike non-cluster volumes, which only have a\n\t// Name. This ID can be used to refer to the cluster volume.\n\tID string\n\n\t// Meta is the swarm metadata about this volume.\n\tswarm.Meta\n\n\t// Spec is the cluster-specific options from which this volume is derived.\n\tSpec ClusterVolumeSpec\n\n\t// PublishStatus contains the status of the volume as it pertains to its\n\t// publishing on Nodes.\n\tPublishStatus []*PublishStatus `json:\",omitempty\"`\n\n\t// Info is information about the global status of the volume.\n\tInfo *Info `json:\",omitempty\"`\n}\n\n// ClusterVolumeSpec contains the spec used to create this volume.\ntype ClusterVolumeSpec struct {\n\t// Group defines the volume group of this volume. Volumes belonging to the\n\t// same group can be referred to by group name when creating Services.\n\t// Referring to a volume by group instructs swarm to treat volumes in that\n\t// group interchangeably for the purpose of scheduling. Volumes with an\n\t// empty string for a group technically all belong to the same, emptystring\n\t// group.\n\tGroup string `json:\",omitempty\"`\n\n\t// AccessMode defines how the volume is used by tasks.\n\tAccessMode *AccessMode `json:\",omitempty\"`\n\n\t// AccessibilityRequirements specifies where in the cluster a volume must\n\t// be accessible from.\n\t//\n\t// This field must be empty if the plugin does not support\n\t// VOLUME_ACCESSIBILITY_CONSTRAINTS capabilities. If it is present but the\n\t// plugin does not support it, volume will not be created.\n\t//\n\t// If AccessibilityRequirements is empty, but the plugin does support\n\t// VOLUME_ACCESSIBILITY_CONSTRAINTS, then Swarmkit will assume the entire\n\t// cluster is a valid target for the volume.\n\tAccessibilityRequirements *TopologyRequirement `json:\",omitempty\"`\n\n\t// CapacityRange defines the desired capacity that the volume should be\n\t// created with. If nil, the plugin will decide the capacity.\n\tCapacityRange *CapacityRange `json:\",omitempty\"`\n\n\t// Secrets defines Swarm Secrets that are passed to the CSI storage plugin\n\t// when operating on this volume.\n\tSecrets []Secret `json:\",omitempty\"`\n\n\t// Availability is the Volume's desired availability. Analogous to Node\n\t// Availability, this allows the user to take volumes offline in order to\n\t// update or delete them.\n\tAvailability Availability `json:\",omitempty\"`\n}\n\n// Availability specifies the availability of the volume.\ntype Availability string\n\nconst (\n\t// AvailabilityActive indicates that the volume is active and fully\n\t// schedulable on the cluster.\n\tAvailabilityActive Availability = \"active\"\n\n\t// AvailabilityPause indicates that no new workloads should use the\n\t// volume, but existing workloads can continue to use it.\n\tAvailabilityPause Availability = \"pause\"\n\n\t// AvailabilityDrain indicates that all workloads using this volume\n\t// should be rescheduled, and the volume unpublished from all nodes.\n\tAvailabilityDrain Availability = \"drain\"\n)\n\n// AccessMode defines the access mode of a volume.\ntype AccessMode struct {\n\t// Scope defines the set of nodes this volume can be used on at one time.\n\tScope Scope `json:\",omitempty\"`\n\n\t// Sharing defines the number and way that different tasks can use this\n\t// volume at one time.\n\tSharing SharingMode `json:\",omitempty\"`\n\n\t// MountVolume defines options for using this volume as a Mount-type\n\t// volume.\n\t//\n\t// Either BlockVolume or MountVolume, but not both, must be present.\n\tMountVolume *TypeMount `json:\",omitempty\"`\n\n\t// BlockVolume defines options for using this volume as a Block-type\n\t// volume.\n\t//\n\t// Either BlockVolume or MountVolume, but not both, must be present.\n\tBlockVolume *TypeBlock `json:\",omitempty\"`\n}\n\n// Scope defines the Scope of a Cluster Volume. This is how many nodes a\n// Volume can be accessed simultaneously on.\ntype Scope string\n\nconst (\n\t// ScopeSingleNode indicates the volume can be used on one node at a\n\t// time.\n\tScopeSingleNode Scope = \"single\"\n\n\t// ScopeMultiNode indicates the volume can be used on many nodes at\n\t// the same time.\n\tScopeMultiNode Scope = \"multi\"\n)\n\n// SharingMode defines the Sharing of a Cluster Volume. This is how Tasks using a\n// Volume at the same time can use it.\ntype SharingMode string\n\nconst (\n\t// SharingNone indicates that only one Task may use the Volume at a\n\t// time.\n\tSharingNone SharingMode = \"none\"\n\n\t// SharingReadOnly indicates that the Volume may be shared by any\n\t// number of Tasks, but they must be read-only.\n\tSharingReadOnly SharingMode = \"readonly\"\n\n\t// SharingOneWriter indicates that the Volume may be shared by any\n\t// number of Tasks, but all after the first must be read-only.\n\tSharingOneWriter SharingMode = \"onewriter\"\n\n\t// SharingAll means that the Volume may be shared by any number of\n\t// Tasks, as readers or writers.\n\tSharingAll SharingMode = \"all\"\n)\n\n// TypeBlock defines options for using a volume as a block-type volume.\n//\n// Intentionally empty.\ntype TypeBlock struct{}\n\n// TypeMount contains options for using a volume as a Mount-type\n// volume.\ntype TypeMount struct {\n\t// FsType specifies the filesystem type for the mount volume. Optional.\n\tFsType string `json:\",omitempty\"`\n\n\t// MountFlags defines flags to pass when mounting the volume. Optional.\n\tMountFlags []string `json:\",omitempty\"`\n}\n\n// TopologyRequirement expresses the user's requirements for a volume's\n// accessible topology.\ntype TopologyRequirement struct {\n\t// Requisite specifies a list of Topologies, at least one of which the\n\t// volume must be accessible from.\n\t//\n\t// Taken verbatim from the CSI Spec:\n\t//\n\t// Specifies the list of topologies the provisioned volume MUST be\n\t// accessible from.\n\t// This field is OPTIONAL. If TopologyRequirement is specified either\n\t// requisite or preferred or both MUST be specified.\n\t//\n\t// If requisite is specified, the provisioned volume MUST be\n\t// accessible from at least one of the requisite topologies.\n\t//\n\t// Given\n\t//   x = number of topologies provisioned volume is accessible from\n\t//   n = number of requisite topologies\n\t// The CO MUST ensure n >= 1. The SP MUST ensure x >= 1\n\t// If x==n, then the SP MUST make the provisioned volume available to\n\t// all topologies from the list of requisite topologies. If it is\n\t// unable to do so, the SP MUST fail the CreateVolume call.\n\t// For example, if a volume should be accessible from a single zone,\n\t// and requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"}\n\t// then the provisioned volume MUST be accessible from the \"region\"\n\t// \"R1\" and the \"zone\" \"Z2\".\n\t// Similarly, if a volume should be accessible from two zones, and\n\t// requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"}\n\t// then the provisioned volume MUST be accessible from the \"region\"\n\t// \"R1\" and both \"zone\" \"Z2\" and \"zone\" \"Z3\".\n\t//\n\t// If x<n, then the SP SHALL choose x unique topologies from the list\n\t// of requisite topologies. If it is unable to do so, the SP MUST fail\n\t// the CreateVolume call.\n\t// For example, if a volume should be accessible from a single zone,\n\t// and requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"}\n\t// then the SP may choose to make the provisioned volume available in\n\t// either the \"zone\" \"Z2\" or the \"zone\" \"Z3\" in the \"region\" \"R1\".\n\t// Similarly, if a volume should be accessible from two zones, and\n\t// requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z4\"}\n\t// then the provisioned volume MUST be accessible from any combination\n\t// of two unique topologies: e.g. \"R1/Z2\" and \"R1/Z3\", or \"R1/Z2\" and\n\t//  \"R1/Z4\", or \"R1/Z3\" and \"R1/Z4\".\n\t//\n\t// If x>n, then the SP MUST make the provisioned volume available from\n\t// all topologies from the list of requisite topologies and MAY choose\n\t// the remaining x-n unique topologies from the list of all possible\n\t// topologies. If it is unable to do so, the SP MUST fail the\n\t// CreateVolume call.\n\t// For example, if a volume should be accessible from two zones, and\n\t// requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"}\n\t// then the provisioned volume MUST be accessible from the \"region\"\n\t// \"R1\" and the \"zone\" \"Z2\" and the SP may select the second zone\n\t// independently, e.g. \"R1/Z4\".\n\tRequisite []Topology `json:\",omitempty\"`\n\n\t// Preferred is a list of Topologies that the volume should attempt to be\n\t// provisioned in.\n\t//\n\t// Taken from the CSI spec:\n\t//\n\t// Specifies the list of topologies the CO would prefer the volume to\n\t// be provisioned in.\n\t//\n\t// This field is OPTIONAL. If TopologyRequirement is specified either\n\t// requisite or preferred or both MUST be specified.\n\t//\n\t// An SP MUST attempt to make the provisioned volume available using\n\t// the preferred topologies in order from first to last.\n\t//\n\t// If requisite is specified, all topologies in preferred list MUST\n\t// also be present in the list of requisite topologies.\n\t//\n\t// If the SP is unable to make the provisioned volume available\n\t// from any of the preferred topologies, the SP MAY choose a topology\n\t// from the list of requisite topologies.\n\t// If the list of requisite topologies is not specified, then the SP\n\t// MAY choose from the list of all possible topologies.\n\t// If the list of requisite topologies is specified and the SP is\n\t// unable to make the provisioned volume available from any of the\n\t// requisite topologies it MUST fail the CreateVolume call.\n\t//\n\t// Example 1:\n\t// Given a volume should be accessible from a single zone, and\n\t// requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"}\n\t// preferred =\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"}\n\t// then the SP SHOULD first attempt to make the provisioned volume\n\t// available from \"zone\" \"Z3\" in the \"region\" \"R1\" and fall back to\n\t// \"zone\" \"Z2\" in the \"region\" \"R1\" if that is not possible.\n\t//\n\t// Example 2:\n\t// Given a volume should be accessible from a single zone, and\n\t// requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z4\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z5\"}\n\t// preferred =\n\t//   {\"region\": \"R1\", \"zone\": \"Z4\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"}\n\t// then the SP SHOULD first attempt to make the provisioned volume\n\t// accessible from \"zone\" \"Z4\" in the \"region\" \"R1\" and fall back to\n\t// \"zone\" \"Z2\" in the \"region\" \"R1\" if that is not possible. If that\n\t// is not possible, the SP may choose between either the \"zone\"\n\t// \"Z3\" or \"Z5\" in the \"region\" \"R1\".\n\t//\n\t// Example 3:\n\t// Given a volume should be accessible from TWO zones (because an\n\t// opaque parameter in CreateVolumeRequest, for example, specifies\n\t// the volume is accessible from two zones, aka synchronously\n\t// replicated), and\n\t// requisite =\n\t//   {\"region\": \"R1\", \"zone\": \"Z2\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z4\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z5\"}\n\t// preferred =\n\t//   {\"region\": \"R1\", \"zone\": \"Z5\"},\n\t//   {\"region\": \"R1\", \"zone\": \"Z3\"}\n\t// then the SP SHOULD first attempt to make the provisioned volume\n\t// accessible from the combination of the two \"zones\" \"Z5\" and \"Z3\" in\n\t// the \"region\" \"R1\". If that's not possible, it should fall back to\n\t// a combination of \"Z5\" and other possibilities from the list of\n\t// requisite. If that's not possible, it should fall back  to a\n\t// combination of \"Z3\" and other possibilities from the list of\n\t// requisite. If that's not possible, it should fall back  to a\n\t// combination of other possibilities from the list of requisite.\n\tPreferred []Topology `json:\",omitempty\"`\n}\n\n// Topology is a map of topological domains to topological segments.\n//\n// This description is taken verbatim from the CSI Spec:\n//\n// A topological domain is a sub-division of a cluster, like \"region\",\n// \"zone\", \"rack\", etc.\n// A topological segment is a specific instance of a topological domain,\n// like \"zone3\", \"rack3\", etc.\n// For example {\"com.company/zone\": \"Z1\", \"com.company/rack\": \"R3\"}\n// Valid keys have two segments: an OPTIONAL prefix and name, separated\n// by a slash (/), for example: \"com.company.example/zone\".\n// The key name segment is REQUIRED. The prefix is OPTIONAL.\n// The key name MUST be 63 characters or less, begin and end with an\n// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-),\n// underscores (_), dots (.), or alphanumerics in between, for example\n// \"zone\".\n// The key prefix MUST be 63 characters or less, begin and end with a\n// lower-case alphanumeric character ([a-z0-9]), contain only\n// dashes (-), dots (.), or lower-case alphanumerics in between, and\n// follow domain name notation format\n// (https://tools.ietf.org/html/rfc1035#section-2.3.1).\n// The key prefix SHOULD include the plugin's host company name and/or\n// the plugin name, to minimize the possibility of collisions with keys\n// from other plugins.\n// If a key prefix is specified, it MUST be identical across all\n// topology keys returned by the SP (across all RPCs).\n// Keys MUST be case-insensitive. Meaning the keys \"Zone\" and \"zone\"\n// MUST not both exist.\n// Each value (topological segment) MUST contain 1 or more strings.\n// Each string MUST be 63 characters or less and begin and end with an\n// alphanumeric character with '-', '_', '.', or alphanumerics in\n// between.\ntype Topology struct {\n\tSegments map[string]string `json:\",omitempty\"`\n}\n\n// CapacityRange describes the minimum and maximum capacity a volume should be\n// created with\ntype CapacityRange struct {\n\t// RequiredBytes specifies that a volume must be at least this big. The\n\t// value of 0 indicates an unspecified minimum.\n\tRequiredBytes int64\n\n\t// LimitBytes specifies that a volume must not be bigger than this. The\n\t// value of 0 indicates an unspecified maximum\n\tLimitBytes int64\n}\n\n// Secret represents a Swarm Secret value that must be passed to the CSI\n// storage plugin when operating on this Volume. It represents one key-value\n// pair of possibly many.\ntype Secret struct {\n\t// Key is the name of the key of the key-value pair passed to the plugin.\n\tKey string\n\n\t// Secret is the swarm Secret object from which to read data. This can be a\n\t// Secret name or ID. The Secret data is retrieved by Swarm and used as the\n\t// value of the key-value pair passed to the plugin.\n\tSecret string\n}\n\n// PublishState represents the state of a Volume as it pertains to its\n// use on a particular Node.\ntype PublishState string\n\nconst (\n\t// StatePending indicates that the volume should be published on\n\t// this node, but the call to ControllerPublishVolume has not been\n\t// successfully completed yet and the result recorded by swarmkit.\n\tStatePending PublishState = \"pending-publish\"\n\n\t// StatePublished means the volume is published successfully to the node.\n\tStatePublished PublishState = \"published\"\n\n\t// StatePendingNodeUnpublish indicates that the Volume should be\n\t// unpublished on the Node, and we're waiting for confirmation that it has\n\t// done so.  After the Node has confirmed that the Volume has been\n\t// unpublished, the state will move to StatePendingUnpublish.\n\tStatePendingNodeUnpublish PublishState = \"pending-node-unpublish\"\n\n\t// StatePendingUnpublish means the volume is still published to the node\n\t// by the controller, awaiting the operation to unpublish it.\n\tStatePendingUnpublish PublishState = \"pending-controller-unpublish\"\n)\n\n// PublishStatus represents the status of the volume as published to an\n// individual node\ntype PublishStatus struct {\n\t// NodeID is the ID of the swarm node this Volume is published to.\n\tNodeID string `json:\",omitempty\"`\n\n\t// State is the publish state of the volume.\n\tState PublishState `json:\",omitempty\"`\n\n\t// PublishContext is the PublishContext returned by the CSI plugin when\n\t// a volume is published.\n\tPublishContext map[string]string `json:\",omitempty\"`\n}\n\n// Info contains information about the Volume as a whole as provided by\n// the CSI storage plugin.\ntype Info struct {\n\t// CapacityBytes is the capacity of the volume in bytes. A value of 0\n\t// indicates that the capacity is unknown.\n\tCapacityBytes int64 `json:\",omitempty\"`\n\n\t// VolumeContext is the context originating from the CSI storage plugin\n\t// when the Volume is created.\n\tVolumeContext map[string]string `json:\",omitempty\"`\n\n\t// VolumeID is the ID of the Volume as seen by the CSI storage plugin. This\n\t// is distinct from the Volume's Swarm ID, which is the ID used by all of\n\t// the Docker Engine to refer to the Volume. If this field is blank, then\n\t// the Volume has not been successfully created yet.\n\tVolumeID string `json:\",omitempty\"`\n\n\t// AccessibleTopology is the topology this volume is actually accessible\n\t// from.\n\tAccessibleTopology []Topology `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/volume/create_options.go",
    "content": "package volume\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// CreateOptions VolumeConfig\n//\n// Volume configuration\n// swagger:model CreateOptions\ntype CreateOptions struct {\n\n\t// cluster volume spec\n\tClusterVolumeSpec *ClusterVolumeSpec `json:\"ClusterVolumeSpec,omitempty\"`\n\n\t// Name of the volume driver to use.\n\tDriver string `json:\"Driver,omitempty\"`\n\n\t// A mapping of driver options and values. These options are\n\t// passed directly to the driver and are driver specific.\n\t//\n\tDriverOpts map[string]string `json:\"DriverOpts,omitempty\"`\n\n\t// User-defined key/value metadata.\n\tLabels map[string]string `json:\"Labels,omitempty\"`\n\n\t// The new volume's name. If not specified, Docker generates a name.\n\t//\n\tName string `json:\"Name,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/volume/list_response.go",
    "content": "package volume\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// ListResponse VolumeListResponse\n//\n// Volume list response\n// swagger:model ListResponse\ntype ListResponse struct {\n\n\t// List of volumes\n\tVolumes []*Volume `json:\"Volumes\"`\n\n\t// Warnings that occurred when fetching the list of volumes.\n\t//\n\tWarnings []string `json:\"Warnings\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/volume/options.go",
    "content": "package volume // import \"github.com/docker/docker/api/types/volume\"\n\nimport \"github.com/docker/docker/api/types/filters\"\n\n// ListOptions holds parameters to list volumes.\ntype ListOptions struct {\n\tFilters filters.Args\n}\n\n// PruneReport contains the response for Engine API:\n// POST \"/volumes/prune\"\ntype PruneReport struct {\n\tVolumesDeleted []string\n\tSpaceReclaimed uint64\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/volume/volume.go",
    "content": "package volume\n\n// This file was generated by the swagger tool.\n// Editing this file might prove futile when you re-run the swagger generate command\n\n// Volume volume\n// swagger:model Volume\ntype Volume struct {\n\n\t// cluster volume\n\tClusterVolume *ClusterVolume `json:\"ClusterVolume,omitempty\"`\n\n\t// Date/Time the volume was created.\n\tCreatedAt string `json:\"CreatedAt,omitempty\"`\n\n\t// Name of the volume driver used by the volume.\n\t// Required: true\n\tDriver string `json:\"Driver\"`\n\n\t// User-defined key/value metadata.\n\t// Required: true\n\tLabels map[string]string `json:\"Labels\"`\n\n\t// Mount path of the volume on the host.\n\t// Required: true\n\tMountpoint string `json:\"Mountpoint\"`\n\n\t// Name of the volume.\n\t// Required: true\n\tName string `json:\"Name\"`\n\n\t// The driver specific options used when creating the volume.\n\t//\n\t// Required: true\n\tOptions map[string]string `json:\"Options\"`\n\n\t// The level at which the volume exists. Either `global` for cluster-wide,\n\t// or `local` for machine level.\n\t//\n\t// Required: true\n\tScope string `json:\"Scope\"`\n\n\t// Low-level details about the volume, provided by the volume driver.\n\t// Details are returned as a map with key/value pairs:\n\t// `{\"key\":\"value\",\"key2\":\"value2\"}`.\n\t//\n\t// The `Status` field is optional, and is omitted if the volume driver\n\t// does not support this feature.\n\t//\n\tStatus map[string]interface{} `json:\"Status,omitempty\"`\n\n\t// usage data\n\tUsageData *UsageData `json:\"UsageData,omitempty\"`\n}\n\n// UsageData Usage details about the volume. This information is used by the\n// `GET /system/df` endpoint, and omitted in other endpoints.\n//\n// swagger:model UsageData\ntype UsageData struct {\n\n\t// The number of containers referencing this volume. This field\n\t// is set to `-1` if the reference-count is not available.\n\t//\n\t// Required: true\n\tRefCount int64 `json:\"RefCount\"`\n\n\t// Amount of disk space used by the volume (in bytes). This information\n\t// is only available for volumes created with the `\"local\"` volume\n\t// driver. For volumes created with other volume drivers, this field\n\t// is set to `-1` (\"not available\")\n\t//\n\t// Required: true\n\tSize int64 `json:\"Size\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/api/types/volume/volume_update.go",
    "content": "package volume // import \"github.com/docker/docker/api/types/volume\"\n\n// UpdateOptions is configuration to update a Volume with.\ntype UpdateOptions struct {\n\t// Spec is the ClusterVolumeSpec to update the volume to.\n\tSpec *ClusterVolumeSpec `json:\"Spec,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/README.md",
    "content": "# Go client for the Docker Engine API\n\nThe `docker` command uses this package to communicate with the daemon. It can\nalso be used by your own Go applications to do anything the command-line\ninterface does – running containers, pulling images, managing swarms, etc.\n\nFor example, to list all containers (the equivalent of `docker ps --all`):\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/client\"\n)\n\nfunc main() {\n\tapiClient, err := client.NewClientWithOpts(client.FromEnv)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer apiClient.Close()\n\n\tcontainers, err := apiClient.ContainerList(context.Background(), container.ListOptions{All: true})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfor _, ctr := range containers {\n\t\tfmt.Printf(\"%s %s (status: %s)\\n\", ctr.ID, ctr.Image, ctr.Status)\n\t}\n}\n```\n\n[Full documentation is available on pkg.go.dev.](https://pkg.go.dev/github.com/docker/docker/client)\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/build_cancel.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n)\n\n// BuildCancel requests the daemon to cancel the ongoing build request.\nfunc (cli *Client) BuildCancel(ctx context.Context, id string) error {\n\tquery := url.Values{}\n\tquery.Set(\"id\", id)\n\n\tresp, err := cli.post(ctx, \"/build/cancel\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/build_prune.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/pkg/errors\"\n)\n\n// BuildCachePrune requests the daemon to delete unused cache data\nfunc (cli *Client) BuildCachePrune(ctx context.Context, opts types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error) {\n\tif err := cli.NewVersionError(ctx, \"1.31\", \"build prune\"); err != nil {\n\t\treturn nil, err\n\t}\n\n\tquery := url.Values{}\n\tif opts.All {\n\t\tquery.Set(\"all\", \"1\")\n\t}\n\n\tif opts.KeepStorage != 0 {\n\t\tquery.Set(\"keep-storage\", strconv.Itoa(int(opts.KeepStorage)))\n\t}\n\tif opts.ReservedSpace != 0 {\n\t\tquery.Set(\"reserved-space\", strconv.Itoa(int(opts.ReservedSpace)))\n\t}\n\tif opts.MaxUsedSpace != 0 {\n\t\tquery.Set(\"max-used-space\", strconv.Itoa(int(opts.MaxUsedSpace)))\n\t}\n\tif opts.MinFreeSpace != 0 {\n\t\tquery.Set(\"min-free-space\", strconv.Itoa(int(opts.MinFreeSpace)))\n\t}\n\tf, err := filters.ToJSON(opts.Filters)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"prune could not marshal filters option\")\n\t}\n\tquery.Set(\"filters\", f)\n\n\tresp, err := cli.post(ctx, \"/build/prune\", query, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treport := types.BuildCachePruneReport{}\n\tif err := json.NewDecoder(resp.Body).Decode(&report); err != nil {\n\t\treturn nil, errors.Wrap(err, \"error retrieving disk usage\")\n\t}\n\n\treturn &report, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/checkpoint.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/checkpoint\"\n)\n\n// CheckpointAPIClient defines API client methods for the checkpoints.\n//\n// Experimental: checkpoint and restore is still an experimental feature,\n// and only available if the daemon is running with experimental features\n// enabled.\ntype CheckpointAPIClient interface {\n\tCheckpointCreate(ctx context.Context, container string, options checkpoint.CreateOptions) error\n\tCheckpointDelete(ctx context.Context, container string, options checkpoint.DeleteOptions) error\n\tCheckpointList(ctx context.Context, container string, options checkpoint.ListOptions) ([]checkpoint.Summary, error)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/checkpoint_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/checkpoint\"\n)\n\n// CheckpointCreate creates a checkpoint from the given container with the given name\nfunc (cli *Client) CheckpointCreate(ctx context.Context, containerID string, options checkpoint.CreateOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/checkpoints\", nil, options, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/checkpoint_delete.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/checkpoint\"\n)\n\n// CheckpointDelete deletes the checkpoint with the given name from the given container\nfunc (cli *Client) CheckpointDelete(ctx context.Context, containerID string, options checkpoint.DeleteOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif options.CheckpointDir != \"\" {\n\t\tquery.Set(\"dir\", options.CheckpointDir)\n\t}\n\n\tresp, err := cli.delete(ctx, \"/containers/\"+containerID+\"/checkpoints/\"+options.CheckpointID, query, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/checkpoint_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/checkpoint\"\n)\n\n// CheckpointList returns the checkpoints of the given container in the docker host\nfunc (cli *Client) CheckpointList(ctx context.Context, container string, options checkpoint.ListOptions) ([]checkpoint.Summary, error) {\n\tvar checkpoints []checkpoint.Summary\n\n\tquery := url.Values{}\n\tif options.CheckpointDir != \"\" {\n\t\tquery.Set(\"dir\", options.CheckpointDir)\n\t}\n\n\tresp, err := cli.get(ctx, \"/containers/\"+container+\"/checkpoints\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn checkpoints, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&checkpoints)\n\treturn checkpoints, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/client.go",
    "content": "/*\nPackage client is a Go client for the Docker Engine API.\n\nFor more information about the Engine API, see the documentation:\nhttps://docs.docker.com/reference/api/engine/\n\n# Usage\n\nYou use the library by constructing a client object using [NewClientWithOpts]\nand calling methods on it. The client can be configured from environment\nvariables by passing the [FromEnv] option, or configured manually by passing any\nof the other available [Opts].\n\nFor example, to list running containers (the equivalent of \"docker ps\"):\n\n\tpackage main\n\n\timport (\n\t\t\"context\"\n\t\t\"fmt\"\n\n\t\t\"github.com/docker/docker/api/types/container\"\n\t\t\"github.com/docker/docker/client\"\n\t)\n\n\tfunc main() {\n\t\tcli, err := client.NewClientWithOpts(client.FromEnv)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tcontainers, err := cli.ContainerList(context.Background(), container.ListOptions{})\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tfor _, ctr := range containers {\n\t\t\tfmt.Printf(\"%s %s\\n\", ctr.ID, ctr.Image)\n\t\t}\n\t}\n*/\npackage client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/docker/docker/api\"\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/versions\"\n\t\"github.com/docker/go-connections/sockets\"\n\t\"github.com/pkg/errors\"\n\t\"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n)\n\n// DummyHost is a hostname used for local communication.\n//\n// It acts as a valid formatted hostname for local connections (such as \"unix://\"\n// or \"npipe://\") which do not require a hostname. It should never be resolved,\n// but uses the special-purpose \".localhost\" TLD (as defined in [RFC 2606, Section 2]\n// and [RFC 6761, Section 6.3]).\n//\n// [RFC 7230, Section 5.4] defines that an empty header must be used for such\n// cases:\n//\n//\tIf the authority component is missing or undefined for the target URI,\n//\tthen a client MUST send a Host header field with an empty field-value.\n//\n// However, [Go stdlib] enforces the semantics of HTTP(S) over TCP, does not\n// allow an empty header to be used, and requires req.URL.Scheme to be either\n// \"http\" or \"https\".\n//\n// For further details, refer to:\n//\n//   - https://github.com/docker/engine-api/issues/189\n//   - https://github.com/golang/go/issues/13624\n//   - https://github.com/golang/go/issues/61076\n//   - https://github.com/moby/moby/issues/45935\n//\n// [RFC 2606, Section 2]: https://www.rfc-editor.org/rfc/rfc2606.html#section-2\n// [RFC 6761, Section 6.3]: https://www.rfc-editor.org/rfc/rfc6761#section-6.3\n// [RFC 7230, Section 5.4]: https://datatracker.ietf.org/doc/html/rfc7230#section-5.4\n// [Go stdlib]: https://github.com/golang/go/blob/6244b1946bc2101b01955468f1be502dbadd6807/src/net/http/transport.go#L558-L569\nconst DummyHost = \"api.moby.localhost\"\n\n// fallbackAPIVersion is the version to fallback to if API-version negotiation\n// fails. This version is the highest version of the API before API-version\n// negotiation was introduced. If negotiation fails (or no API version was\n// included in the API response), we assume the API server uses the most\n// recent version before negotiation was introduced.\nconst fallbackAPIVersion = \"1.24\"\n\n// Ensure that Client always implements APIClient.\nvar _ APIClient = &Client{}\n\n// Client is the API client that performs all operations\n// against a docker server.\ntype Client struct {\n\t// scheme sets the scheme for the client\n\tscheme string\n\t// host holds the server address to connect to\n\thost string\n\t// proto holds the client protocol i.e. unix.\n\tproto string\n\t// addr holds the client address.\n\taddr string\n\t// basePath holds the path to prepend to the requests.\n\tbasePath string\n\t// client used to send and receive http requests.\n\tclient *http.Client\n\t// version of the server to talk to.\n\tversion string\n\t// userAgent is the User-Agent header to use for HTTP requests. It takes\n\t// precedence over User-Agent headers set in customHTTPHeaders, and other\n\t// header variables. When set to an empty string, the User-Agent header\n\t// is removed, and no header is sent.\n\tuserAgent *string\n\t// custom HTTP headers configured by users.\n\tcustomHTTPHeaders map[string]string\n\t// manualOverride is set to true when the version was set by users.\n\tmanualOverride bool\n\n\t// negotiateVersion indicates if the client should automatically negotiate\n\t// the API version to use when making requests. API version negotiation is\n\t// performed on the first request, after which negotiated is set to \"true\"\n\t// so that subsequent requests do not re-negotiate.\n\tnegotiateVersion bool\n\n\t// negotiated indicates that API version negotiation took place\n\tnegotiated atomic.Bool\n\n\t// negotiateLock is used to single-flight the version negotiation process\n\tnegotiateLock sync.Mutex\n\n\ttraceOpts []otelhttp.Option\n\n\t// When the client transport is an *http.Transport (default) we need to do some extra things (like closing idle connections).\n\t// Store the original transport as the http.Client transport will be wrapped with tracing libs.\n\tbaseTransport *http.Transport\n}\n\n// ErrRedirect is the error returned by checkRedirect when the request is non-GET.\nvar ErrRedirect = errors.New(\"unexpected redirect in response\")\n\n// CheckRedirect specifies the policy for dealing with redirect responses. It\n// can be set on [http.Client.CheckRedirect] to prevent HTTP redirects for\n// non-GET requests. It returns an [ErrRedirect] for non-GET request, otherwise\n// returns a [http.ErrUseLastResponse], which is special-cased by http.Client\n// to use the last response.\n//\n// Go 1.8 changed behavior for HTTP redirects (specifically 301, 307, and 308)\n// in the client. The client (and by extension API client) can be made to send\n// a request like \"POST /containers//start\" where what would normally be in the\n// name section of the URL is empty. This triggers an HTTP 301 from the daemon.\n//\n// In go 1.8 this 301 is converted to a GET request, and ends up getting\n// a 404 from the daemon. This behavior change manifests in the client in that\n// before, the 301 was not followed and the client did not generate an error,\n// but now results in a message like \"Error response from daemon: page not found\".\nfunc CheckRedirect(_ *http.Request, via []*http.Request) error {\n\tif via[0].Method == http.MethodGet {\n\t\treturn http.ErrUseLastResponse\n\t}\n\treturn ErrRedirect\n}\n\n// NewClientWithOpts initializes a new API client with a default HTTPClient, and\n// default API host and version. It also initializes the custom HTTP headers to\n// add to each request.\n//\n// It takes an optional list of [Opt] functional arguments, which are applied in\n// the order they're provided, which allows modifying the defaults when creating\n// the client. For example, the following initializes a client that configures\n// itself with values from environment variables ([FromEnv]), and has automatic\n// API version negotiation enabled ([WithAPIVersionNegotiation]).\n//\n//\tcli, err := client.NewClientWithOpts(\n//\t\tclient.FromEnv,\n//\t\tclient.WithAPIVersionNegotiation(),\n//\t)\nfunc NewClientWithOpts(ops ...Opt) (*Client, error) {\n\thostURL, err := ParseHostURL(DefaultDockerHost)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tclient, err := defaultHTTPClient(hostURL)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc := &Client{\n\t\thost:    DefaultDockerHost,\n\t\tversion: api.DefaultVersion,\n\t\tclient:  client,\n\t\tproto:   hostURL.Scheme,\n\t\taddr:    hostURL.Host,\n\n\t\ttraceOpts: []otelhttp.Option{\n\t\t\totelhttp.WithSpanNameFormatter(func(_ string, req *http.Request) string {\n\t\t\t\treturn req.Method + \" \" + req.URL.Path\n\t\t\t}),\n\t\t},\n\t}\n\n\tfor _, op := range ops {\n\t\tif err := op(c); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif tr, ok := c.client.Transport.(*http.Transport); ok {\n\t\t// Store the base transport before we wrap it in tracing libs below\n\t\t// This is used, as an example, to close idle connections when the client is closed\n\t\tc.baseTransport = tr\n\t}\n\n\tif c.scheme == \"\" {\n\t\t// TODO(stevvooe): This isn't really the right way to write clients in Go.\n\t\t// `NewClient` should probably only take an `*http.Client` and work from there.\n\t\t// Unfortunately, the model of having a host-ish/url-thingy as the connection\n\t\t// string has us confusing protocol and transport layers. We continue doing\n\t\t// this to avoid breaking existing clients but this should be addressed.\n\t\tif c.tlsConfig() != nil {\n\t\t\tc.scheme = \"https\"\n\t\t} else {\n\t\t\tc.scheme = \"http\"\n\t\t}\n\t}\n\n\tc.client.Transport = otelhttp.NewTransport(c.client.Transport, c.traceOpts...)\n\n\treturn c, nil\n}\n\nfunc (cli *Client) tlsConfig() *tls.Config {\n\tif cli.baseTransport == nil {\n\t\treturn nil\n\t}\n\treturn cli.baseTransport.TLSClientConfig\n}\n\nfunc defaultHTTPClient(hostURL *url.URL) (*http.Client, error) {\n\ttransport := &http.Transport{}\n\t// Necessary to prevent long-lived processes using the\n\t// client from leaking connections due to idle connections\n\t// not being released.\n\t// TODO: see if we can also address this from the server side,\n\t// or in go-connections.\n\t// see: https://github.com/moby/moby/issues/45539\n\ttransport.MaxIdleConns = 6\n\ttransport.IdleConnTimeout = 30 * time.Second\n\terr := sockets.ConfigureTransport(transport, hostURL.Scheme, hostURL.Host)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &http.Client{\n\t\tTransport:     transport,\n\t\tCheckRedirect: CheckRedirect,\n\t}, nil\n}\n\n// Close the transport used by the client\nfunc (cli *Client) Close() error {\n\tif cli.baseTransport != nil {\n\t\tcli.baseTransport.CloseIdleConnections()\n\t\treturn nil\n\t}\n\treturn nil\n}\n\n// checkVersion manually triggers API version negotiation (if configured).\n// This allows for version-dependent code to use the same version as will\n// be negotiated when making the actual requests, and for which cases\n// we cannot do the negotiation lazily.\nfunc (cli *Client) checkVersion(ctx context.Context) error {\n\tif !cli.manualOverride && cli.negotiateVersion && !cli.negotiated.Load() {\n\t\t// Ensure exclusive write access to version and negotiated fields\n\t\tcli.negotiateLock.Lock()\n\t\tdefer cli.negotiateLock.Unlock()\n\n\t\t// May have been set during last execution of critical zone\n\t\tif cli.negotiated.Load() {\n\t\t\treturn nil\n\t\t}\n\n\t\tping, err := cli.Ping(ctx)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcli.negotiateAPIVersionPing(ping)\n\t}\n\treturn nil\n}\n\n// getAPIPath returns the versioned request path to call the API.\n// It appends the query parameters to the path if they are not empty.\nfunc (cli *Client) getAPIPath(ctx context.Context, p string, query url.Values) string {\n\tvar apiPath string\n\t_ = cli.checkVersion(ctx)\n\tif cli.version != \"\" {\n\t\tapiPath = path.Join(cli.basePath, \"/v\"+strings.TrimPrefix(cli.version, \"v\"), p)\n\t} else {\n\t\tapiPath = path.Join(cli.basePath, p)\n\t}\n\treturn (&url.URL{Path: apiPath, RawQuery: query.Encode()}).String()\n}\n\n// ClientVersion returns the API version used by this client.\nfunc (cli *Client) ClientVersion() string {\n\treturn cli.version\n}\n\n// NegotiateAPIVersion queries the API and updates the version to match the API\n// version. NegotiateAPIVersion downgrades the client's API version to match the\n// APIVersion if the ping version is lower than the default version. If the API\n// version reported by the server is higher than the maximum version supported\n// by the client, it uses the client's maximum version.\n//\n// If a manual override is in place, either through the \"DOCKER_API_VERSION\"\n// ([EnvOverrideAPIVersion]) environment variable, or if the client is initialized\n// with a fixed version ([WithVersion]), no negotiation is performed.\n//\n// If the API server's ping response does not contain an API version, or if the\n// client did not get a successful ping response, it assumes it is connected with\n// an old daemon that does not support API version negotiation, in which case it\n// downgrades to the latest version of the API before version negotiation was\n// added (1.24).\nfunc (cli *Client) NegotiateAPIVersion(ctx context.Context) {\n\tif !cli.manualOverride {\n\t\t// Avoid concurrent modification of version-related fields\n\t\tcli.negotiateLock.Lock()\n\t\tdefer cli.negotiateLock.Unlock()\n\n\t\tping, err := cli.Ping(ctx)\n\t\tif err != nil {\n\t\t\t// FIXME(thaJeztah): Ping returns an error when failing to connect to the API; we should not swallow the error here, and instead returning it.\n\t\t\treturn\n\t\t}\n\t\tcli.negotiateAPIVersionPing(ping)\n\t}\n}\n\n// NegotiateAPIVersionPing downgrades the client's API version to match the\n// APIVersion in the ping response. If the API version in pingResponse is higher\n// than the maximum version supported by the client, it uses the client's maximum\n// version.\n//\n// If a manual override is in place, either through the \"DOCKER_API_VERSION\"\n// ([EnvOverrideAPIVersion]) environment variable, or if the client is initialized\n// with a fixed version ([WithVersion]), no negotiation is performed.\n//\n// If the API server's ping response does not contain an API version, we assume\n// we are connected with an old daemon without API version negotiation support,\n// and downgrade to the latest version of the API before version negotiation was\n// added (1.24).\nfunc (cli *Client) NegotiateAPIVersionPing(pingResponse types.Ping) {\n\tif !cli.manualOverride {\n\t\t// Avoid concurrent modification of version-related fields\n\t\tcli.negotiateLock.Lock()\n\t\tdefer cli.negotiateLock.Unlock()\n\n\t\tcli.negotiateAPIVersionPing(pingResponse)\n\t}\n}\n\n// negotiateAPIVersionPing queries the API and updates the version to match the\n// API version from the ping response.\nfunc (cli *Client) negotiateAPIVersionPing(pingResponse types.Ping) {\n\t// default to the latest version before versioning headers existed\n\tif pingResponse.APIVersion == \"\" {\n\t\tpingResponse.APIVersion = fallbackAPIVersion\n\t}\n\n\t// if the client is not initialized with a version, start with the latest supported version\n\tif cli.version == \"\" {\n\t\tcli.version = api.DefaultVersion\n\t}\n\n\t// if server version is lower than the client version, downgrade\n\tif versions.LessThan(pingResponse.APIVersion, cli.version) {\n\t\tcli.version = pingResponse.APIVersion\n\t}\n\n\t// Store the results, so that automatic API version negotiation (if enabled)\n\t// won't be performed on the next request.\n\tif cli.negotiateVersion {\n\t\tcli.negotiated.Store(true)\n\t}\n}\n\n// DaemonHost returns the host address used by the client\nfunc (cli *Client) DaemonHost() string {\n\treturn cli.host\n}\n\n// HTTPClient returns a copy of the HTTP client bound to the server\nfunc (cli *Client) HTTPClient() *http.Client {\n\tc := *cli.client\n\treturn &c\n}\n\n// ParseHostURL parses a url string, validates the string is a host url, and\n// returns the parsed URL\nfunc ParseHostURL(host string) (*url.URL, error) {\n\tproto, addr, ok := strings.Cut(host, \"://\")\n\tif !ok || addr == \"\" {\n\t\treturn nil, errors.Errorf(\"unable to parse docker host `%s`\", host)\n\t}\n\n\tvar basePath string\n\tif proto == \"tcp\" {\n\t\tparsed, err := url.Parse(\"tcp://\" + addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\taddr = parsed.Host\n\t\tbasePath = parsed.Path\n\t}\n\treturn &url.URL{\n\t\tScheme: proto,\n\t\tHost:   addr,\n\t\tPath:   basePath,\n\t}, nil\n}\n\nfunc (cli *Client) dialerFromTransport() func(context.Context, string, string) (net.Conn, error) {\n\tif cli.baseTransport == nil || cli.baseTransport.DialContext == nil {\n\t\treturn nil\n\t}\n\n\tif cli.baseTransport.TLSClientConfig != nil {\n\t\t// When using a tls config we don't use the configured dialer but instead a fallback dialer...\n\t\t// Note: It seems like this should use the normal dialer and wrap the returned net.Conn in a tls.Conn\n\t\t// I honestly don't know why it doesn't do that, but it doesn't and such a change is entirely unrelated to the change in this commit.\n\t\treturn nil\n\t}\n\treturn cli.baseTransport.DialContext\n}\n\n// Dialer returns a dialer for a raw stream connection, with an HTTP/1.1 header,\n// that can be used for proxying the daemon connection. It is used by\n// [\"docker dial-stdio\"].\n//\n// [\"docker dial-stdio\"]: https://github.com/docker/cli/pull/1014\nfunc (cli *Client) Dialer() func(context.Context) (net.Conn, error) {\n\treturn cli.dialer()\n}\n\nfunc (cli *Client) dialer() func(context.Context) (net.Conn, error) {\n\treturn func(ctx context.Context) (net.Conn, error) {\n\t\tif dialFn := cli.dialerFromTransport(); dialFn != nil {\n\t\t\treturn dialFn(ctx, cli.proto, cli.addr)\n\t\t}\n\t\tswitch cli.proto {\n\t\tcase \"unix\":\n\t\t\treturn net.Dial(cli.proto, cli.addr)\n\t\tcase \"npipe\":\n\t\t\treturn sockets.DialPipe(cli.addr, 32*time.Second)\n\t\tdefault:\n\t\t\tif tlsConfig := cli.tlsConfig(); tlsConfig != nil {\n\t\t\t\treturn tls.Dial(cli.proto, cli.addr, tlsConfig)\n\t\t\t}\n\t\t\treturn net.Dial(cli.proto, cli.addr)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/client_deprecated.go",
    "content": "package client\n\nimport \"net/http\"\n\n// NewClient initializes a new API client for the given host and API version.\n// It uses the given http client as transport.\n// It also initializes the custom http headers to add to each request.\n//\n// It won't send any version information if the version number is empty. It is\n// highly recommended that you set a version or your client may break if the\n// server is upgraded.\n//\n// Deprecated: use [NewClientWithOpts] passing the [WithHost], [WithVersion],\n// [WithHTTPClient] and [WithHTTPHeaders] options. We recommend enabling API\n// version negotiation by passing the [WithAPIVersionNegotiation] option instead\n// of WithVersion.\nfunc NewClient(host string, version string, client *http.Client, httpHeaders map[string]string) (*Client, error) {\n\treturn NewClientWithOpts(WithHost(host), WithVersion(version), WithHTTPClient(client), WithHTTPHeaders(httpHeaders))\n}\n\n// NewEnvClient initializes a new API client based on environment variables.\n// See FromEnv for a list of support environment variables.\n//\n// Deprecated: use [NewClientWithOpts] passing the [FromEnv] option.\nfunc NewEnvClient() (*Client, error) {\n\treturn NewClientWithOpts(FromEnv)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/client_interfaces.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/events\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/image\"\n\t\"github.com/docker/docker/api/types/network\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/api/types/swarm\"\n\t\"github.com/docker/docker/api/types/system\"\n\t\"github.com/docker/docker/api/types/volume\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// CommonAPIClient is the common methods between stable and experimental versions of APIClient.\n//\n// Deprecated: use [APIClient] instead. This type will be an alias for [APIClient] in the next release, and removed after.\ntype CommonAPIClient = stableAPIClient\n\n// APIClient is an interface that clients that talk with a docker server must implement.\ntype APIClient interface {\n\tstableAPIClient\n\tCheckpointAPIClient // CheckpointAPIClient is still experimental.\n}\n\ntype stableAPIClient interface {\n\tConfigAPIClient\n\tContainerAPIClient\n\tDistributionAPIClient\n\tImageAPIClient\n\tNetworkAPIClient\n\tPluginAPIClient\n\tSystemAPIClient\n\tVolumeAPIClient\n\tClientVersion() string\n\tDaemonHost() string\n\tHTTPClient() *http.Client\n\tServerVersion(ctx context.Context) (types.Version, error)\n\tNegotiateAPIVersion(ctx context.Context)\n\tNegotiateAPIVersionPing(types.Ping)\n\tHijackDialer\n\tDialer() func(context.Context) (net.Conn, error)\n\tClose() error\n\tSwarmManagementAPIClient\n}\n\n// SwarmManagementAPIClient defines all methods for managing Swarm-specific\n// objects.\ntype SwarmManagementAPIClient interface {\n\tSwarmAPIClient\n\tNodeAPIClient\n\tServiceAPIClient\n\tSecretAPIClient\n\tConfigAPIClient\n}\n\n// HijackDialer defines methods for a hijack dialer.\ntype HijackDialer interface {\n\tDialHijack(ctx context.Context, url, proto string, meta map[string][]string) (net.Conn, error)\n}\n\n// ContainerAPIClient defines API client methods for the containers\ntype ContainerAPIClient interface {\n\tContainerAttach(ctx context.Context, container string, options container.AttachOptions) (types.HijackedResponse, error)\n\tContainerCommit(ctx context.Context, container string, options container.CommitOptions) (container.CommitResponse, error)\n\tContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *ocispec.Platform, containerName string) (container.CreateResponse, error)\n\tContainerDiff(ctx context.Context, container string) ([]container.FilesystemChange, error)\n\tContainerExecAttach(ctx context.Context, execID string, options container.ExecAttachOptions) (types.HijackedResponse, error)\n\tContainerExecCreate(ctx context.Context, container string, options container.ExecOptions) (container.ExecCreateResponse, error)\n\tContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error)\n\tContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error\n\tContainerExecStart(ctx context.Context, execID string, options container.ExecStartOptions) error\n\tContainerExport(ctx context.Context, container string) (io.ReadCloser, error)\n\tContainerInspect(ctx context.Context, container string) (container.InspectResponse, error)\n\tContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (container.InspectResponse, []byte, error)\n\tContainerKill(ctx context.Context, container, signal string) error\n\tContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error)\n\tContainerLogs(ctx context.Context, container string, options container.LogsOptions) (io.ReadCloser, error)\n\tContainerPause(ctx context.Context, container string) error\n\tContainerRemove(ctx context.Context, container string, options container.RemoveOptions) error\n\tContainerRename(ctx context.Context, container, newContainerName string) error\n\tContainerResize(ctx context.Context, container string, options container.ResizeOptions) error\n\tContainerRestart(ctx context.Context, container string, options container.StopOptions) error\n\tContainerStatPath(ctx context.Context, container, path string) (container.PathStat, error)\n\tContainerStats(ctx context.Context, container string, stream bool) (container.StatsResponseReader, error)\n\tContainerStatsOneShot(ctx context.Context, container string) (container.StatsResponseReader, error)\n\tContainerStart(ctx context.Context, container string, options container.StartOptions) error\n\tContainerStop(ctx context.Context, container string, options container.StopOptions) error\n\tContainerTop(ctx context.Context, container string, arguments []string) (container.TopResponse, error)\n\tContainerUnpause(ctx context.Context, container string) error\n\tContainerUpdate(ctx context.Context, container string, updateConfig container.UpdateConfig) (container.UpdateResponse, error)\n\tContainerWait(ctx context.Context, container string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error)\n\tCopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, container.PathStat, error)\n\tCopyToContainer(ctx context.Context, container, path string, content io.Reader, options container.CopyToContainerOptions) error\n\tContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error)\n}\n\n// DistributionAPIClient defines API client methods for the registry\ntype DistributionAPIClient interface {\n\tDistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registry.DistributionInspect, error)\n}\n\n// ImageAPIClient defines API client methods for the images\ntype ImageAPIClient interface {\n\tImageBuild(ctx context.Context, context io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error)\n\tBuildCachePrune(ctx context.Context, opts types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error)\n\tBuildCancel(ctx context.Context, id string) error\n\tImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error)\n\tImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error)\n\n\tImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error)\n\tImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error)\n\tImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error)\n\tImageRemove(ctx context.Context, image string, options image.RemoveOptions) ([]image.DeleteResponse, error)\n\tImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error)\n\tImageTag(ctx context.Context, image, ref string) error\n\tImagesPrune(ctx context.Context, pruneFilter filters.Args) (image.PruneReport, error)\n\n\tImageInspect(ctx context.Context, image string, _ ...ImageInspectOption) (image.InspectResponse, error)\n\tImageHistory(ctx context.Context, image string, _ ...ImageHistoryOption) ([]image.HistoryResponseItem, error)\n\tImageLoad(ctx context.Context, input io.Reader, _ ...ImageLoadOption) (image.LoadResponse, error)\n\tImageSave(ctx context.Context, images []string, _ ...ImageSaveOption) (io.ReadCloser, error)\n\n\tImageAPIClientDeprecated\n}\n\n// ImageAPIClientDeprecated defines deprecated methods of the ImageAPIClient.\ntype ImageAPIClientDeprecated interface {\n\t// ImageInspectWithRaw returns the image information and its raw representation.\n\t//\n\t// Deprecated: Use [Client.ImageInspect] instead. Raw response can be obtained using the [ImageInspectWithRawResponse] option.\n\tImageInspectWithRaw(ctx context.Context, image string) (image.InspectResponse, []byte, error)\n}\n\n// NetworkAPIClient defines API client methods for the networks\ntype NetworkAPIClient interface {\n\tNetworkConnect(ctx context.Context, network, container string, config *network.EndpointSettings) error\n\tNetworkCreate(ctx context.Context, name string, options network.CreateOptions) (network.CreateResponse, error)\n\tNetworkDisconnect(ctx context.Context, network, container string, force bool) error\n\tNetworkInspect(ctx context.Context, network string, options network.InspectOptions) (network.Inspect, error)\n\tNetworkInspectWithRaw(ctx context.Context, network string, options network.InspectOptions) (network.Inspect, []byte, error)\n\tNetworkList(ctx context.Context, options network.ListOptions) ([]network.Summary, error)\n\tNetworkRemove(ctx context.Context, network string) error\n\tNetworksPrune(ctx context.Context, pruneFilter filters.Args) (network.PruneReport, error)\n}\n\n// NodeAPIClient defines API client methods for the nodes\ntype NodeAPIClient interface {\n\tNodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error)\n\tNodeList(ctx context.Context, options types.NodeListOptions) ([]swarm.Node, error)\n\tNodeRemove(ctx context.Context, nodeID string, options types.NodeRemoveOptions) error\n\tNodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error\n}\n\n// PluginAPIClient defines API client methods for the plugins\ntype PluginAPIClient interface {\n\tPluginList(ctx context.Context, filter filters.Args) (types.PluginsListResponse, error)\n\tPluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error\n\tPluginEnable(ctx context.Context, name string, options types.PluginEnableOptions) error\n\tPluginDisable(ctx context.Context, name string, options types.PluginDisableOptions) error\n\tPluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error)\n\tPluginUpgrade(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error)\n\tPluginPush(ctx context.Context, name string, registryAuth string) (io.ReadCloser, error)\n\tPluginSet(ctx context.Context, name string, args []string) error\n\tPluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error)\n\tPluginCreate(ctx context.Context, createContext io.Reader, options types.PluginCreateOptions) error\n}\n\n// ServiceAPIClient defines API client methods for the services\ntype ServiceAPIClient interface {\n\tServiceCreate(ctx context.Context, service swarm.ServiceSpec, options types.ServiceCreateOptions) (swarm.ServiceCreateResponse, error)\n\tServiceInspectWithRaw(ctx context.Context, serviceID string, options types.ServiceInspectOptions) (swarm.Service, []byte, error)\n\tServiceList(ctx context.Context, options types.ServiceListOptions) ([]swarm.Service, error)\n\tServiceRemove(ctx context.Context, serviceID string) error\n\tServiceUpdate(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (swarm.ServiceUpdateResponse, error)\n\tServiceLogs(ctx context.Context, serviceID string, options container.LogsOptions) (io.ReadCloser, error)\n\tTaskLogs(ctx context.Context, taskID string, options container.LogsOptions) (io.ReadCloser, error)\n\tTaskInspectWithRaw(ctx context.Context, taskID string) (swarm.Task, []byte, error)\n\tTaskList(ctx context.Context, options types.TaskListOptions) ([]swarm.Task, error)\n}\n\n// SwarmAPIClient defines API client methods for the swarm\ntype SwarmAPIClient interface {\n\tSwarmInit(ctx context.Context, req swarm.InitRequest) (string, error)\n\tSwarmJoin(ctx context.Context, req swarm.JoinRequest) error\n\tSwarmGetUnlockKey(ctx context.Context) (types.SwarmUnlockKeyResponse, error)\n\tSwarmUnlock(ctx context.Context, req swarm.UnlockRequest) error\n\tSwarmLeave(ctx context.Context, force bool) error\n\tSwarmInspect(ctx context.Context) (swarm.Swarm, error)\n\tSwarmUpdate(ctx context.Context, version swarm.Version, swarm swarm.Spec, flags swarm.UpdateFlags) error\n}\n\n// SystemAPIClient defines API client methods for the system\ntype SystemAPIClient interface {\n\tEvents(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error)\n\tInfo(ctx context.Context) (system.Info, error)\n\tRegistryLogin(ctx context.Context, auth registry.AuthConfig) (registry.AuthenticateOKBody, error)\n\tDiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error)\n\tPing(ctx context.Context) (types.Ping, error)\n}\n\n// VolumeAPIClient defines API client methods for the volumes\ntype VolumeAPIClient interface {\n\tVolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error)\n\tVolumeInspect(ctx context.Context, volumeID string) (volume.Volume, error)\n\tVolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error)\n\tVolumeList(ctx context.Context, options volume.ListOptions) (volume.ListResponse, error)\n\tVolumeRemove(ctx context.Context, volumeID string, force bool) error\n\tVolumesPrune(ctx context.Context, pruneFilter filters.Args) (volume.PruneReport, error)\n\tVolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error\n}\n\n// SecretAPIClient defines API client methods for secrets\ntype SecretAPIClient interface {\n\tSecretList(ctx context.Context, options types.SecretListOptions) ([]swarm.Secret, error)\n\tSecretCreate(ctx context.Context, secret swarm.SecretSpec) (types.SecretCreateResponse, error)\n\tSecretRemove(ctx context.Context, id string) error\n\tSecretInspectWithRaw(ctx context.Context, name string) (swarm.Secret, []byte, error)\n\tSecretUpdate(ctx context.Context, id string, version swarm.Version, secret swarm.SecretSpec) error\n}\n\n// ConfigAPIClient defines API client methods for configs\ntype ConfigAPIClient interface {\n\tConfigList(ctx context.Context, options types.ConfigListOptions) ([]swarm.Config, error)\n\tConfigCreate(ctx context.Context, config swarm.ConfigSpec) (types.ConfigCreateResponse, error)\n\tConfigRemove(ctx context.Context, id string) error\n\tConfigInspectWithRaw(ctx context.Context, name string) (swarm.Config, []byte, error)\n\tConfigUpdate(ctx context.Context, id string, version swarm.Version, config swarm.ConfigSpec) error\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/client_unix.go",
    "content": "//go:build !windows\n\npackage client // import \"github.com/docker/docker/client\"\n\n// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST\n// (EnvOverrideHost) environment variable is unset or empty.\nconst DefaultDockerHost = \"unix:///var/run/docker.sock\"\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/client_windows.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\n// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST\n// (EnvOverrideHost) environment variable is unset or empty.\nconst DefaultDockerHost = \"npipe:////./pipe/docker_engine\"\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/config_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// ConfigCreate creates a new config.\nfunc (cli *Client) ConfigCreate(ctx context.Context, config swarm.ConfigSpec) (types.ConfigCreateResponse, error) {\n\tvar response types.ConfigCreateResponse\n\tif err := cli.NewVersionError(ctx, \"1.30\", \"config create\"); err != nil {\n\t\treturn response, err\n\t}\n\tresp, err := cli.post(ctx, \"/configs/create\", nil, config, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn response, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/config_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// ConfigInspectWithRaw returns the config information with raw data\nfunc (cli *Client) ConfigInspectWithRaw(ctx context.Context, id string) (swarm.Config, []byte, error) {\n\tid, err := trimID(\"contig\", id)\n\tif err != nil {\n\t\treturn swarm.Config{}, nil, err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.30\", \"config inspect\"); err != nil {\n\t\treturn swarm.Config{}, nil, err\n\t}\n\tresp, err := cli.get(ctx, \"/configs/\"+id, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn swarm.Config{}, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn swarm.Config{}, nil, err\n\t}\n\n\tvar config swarm.Config\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&config)\n\n\treturn config, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/config_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// ConfigList returns the list of configs.\nfunc (cli *Client) ConfigList(ctx context.Context, options types.ConfigListOptions) ([]swarm.Config, error) {\n\tif err := cli.NewVersionError(ctx, \"1.30\", \"config list\"); err != nil {\n\t\treturn nil, err\n\t}\n\tquery := url.Values{}\n\n\tif options.Filters.Len() > 0 {\n\t\tfilterJSON, err := filters.ToJSON(options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\tresp, err := cli.get(ctx, \"/configs\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar configs []swarm.Config\n\terr = json.NewDecoder(resp.Body).Decode(&configs)\n\treturn configs, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/config_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport \"context\"\n\n// ConfigRemove removes a config.\nfunc (cli *Client) ConfigRemove(ctx context.Context, id string) error {\n\tid, err := trimID(\"config\", id)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.30\", \"config remove\"); err != nil {\n\t\treturn err\n\t}\n\tresp, err := cli.delete(ctx, \"/configs/\"+id, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/config_update.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// ConfigUpdate attempts to update a config\nfunc (cli *Client) ConfigUpdate(ctx context.Context, id string, version swarm.Version, config swarm.ConfigSpec) error {\n\tid, err := trimID(\"config\", id)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.30\", \"config update\"); err != nil {\n\t\treturn err\n\t}\n\tquery := url.Values{}\n\tquery.Set(\"version\", version.String())\n\tresp, err := cli.post(ctx, \"/configs/\"+id+\"/update\", query, config, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_attach.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerAttach attaches a connection to a container in the server.\n// It returns a types.HijackedConnection with the hijacked connection\n// and the a reader to get output. It's up to the called to close\n// the hijacked connection by calling types.HijackedResponse.Close.\n//\n// The stream format on the response will be in one of two formats:\n//\n// If the container is using a TTY, there is only a single stream (stdout), and\n// data is copied directly from the container output stream, no extra\n// multiplexing or headers.\n//\n// If the container is *not* using a TTY, streams for stdout and stderr are\n// multiplexed.\n// The format of the multiplexed stream is as follows:\n//\n//\t[8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}[]byte{OUTPUT}\n//\n// STREAM_TYPE can be 1 for stdout and 2 for stderr\n//\n// SIZE1, SIZE2, SIZE3, and SIZE4 are four bytes of uint32 encoded as big endian.\n// This is the size of OUTPUT.\n//\n// You can use github.com/docker/docker/pkg/stdcopy.StdCopy to demultiplex this\n// stream.\nfunc (cli *Client) ContainerAttach(ctx context.Context, containerID string, options container.AttachOptions) (types.HijackedResponse, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn types.HijackedResponse{}, err\n\t}\n\n\tquery := url.Values{}\n\tif options.Stream {\n\t\tquery.Set(\"stream\", \"1\")\n\t}\n\tif options.Stdin {\n\t\tquery.Set(\"stdin\", \"1\")\n\t}\n\tif options.Stdout {\n\t\tquery.Set(\"stdout\", \"1\")\n\t}\n\tif options.Stderr {\n\t\tquery.Set(\"stderr\", \"1\")\n\t}\n\tif options.DetachKeys != \"\" {\n\t\tquery.Set(\"detachKeys\", options.DetachKeys)\n\t}\n\tif options.Logs {\n\t\tquery.Set(\"logs\", \"1\")\n\t}\n\n\treturn cli.postHijacked(ctx, \"/containers/\"+containerID+\"/attach\", query, nil, http.Header{\n\t\t\"Content-Type\": {\"text/plain\"},\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_commit.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"net/url\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerCommit applies changes to a container and creates a new tagged image.\nfunc (cli *Client) ContainerCommit(ctx context.Context, containerID string, options container.CommitOptions) (container.CommitResponse, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.CommitResponse{}, err\n\t}\n\n\tvar repository, tag string\n\tif options.Reference != \"\" {\n\t\tref, err := reference.ParseNormalizedNamed(options.Reference)\n\t\tif err != nil {\n\t\t\treturn container.CommitResponse{}, err\n\t\t}\n\n\t\tif _, isCanonical := ref.(reference.Canonical); isCanonical {\n\t\t\treturn container.CommitResponse{}, errors.New(\"refusing to create a tag with a digest reference\")\n\t\t}\n\t\tref = reference.TagNameOnly(ref)\n\n\t\tif tagged, ok := ref.(reference.Tagged); ok {\n\t\t\ttag = tagged.Tag()\n\t\t}\n\t\trepository = reference.FamiliarName(ref)\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"container\", containerID)\n\tquery.Set(\"repo\", repository)\n\tquery.Set(\"tag\", tag)\n\tquery.Set(\"comment\", options.Comment)\n\tquery.Set(\"author\", options.Author)\n\tfor _, change := range options.Changes {\n\t\tquery.Add(\"changes\", change)\n\t}\n\tif !options.Pause {\n\t\tquery.Set(\"pause\", \"0\")\n\t}\n\n\tvar response container.CommitResponse\n\tresp, err := cli.post(ctx, \"/commit\", query, options.Config, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn response, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_copy.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerStatPath returns stat information about a path inside the container filesystem.\nfunc (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (container.PathStat, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.PathStat{}, err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"path\", filepath.ToSlash(path)) // Normalize the paths used in the API.\n\n\tresp, err := cli.head(ctx, \"/containers/\"+containerID+\"/archive\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn container.PathStat{}, err\n\t}\n\treturn getContainerPathStatFromHeader(resp.Header)\n}\n\n// CopyToContainer copies content into the container filesystem.\n// Note that `content` must be a Reader for a TAR archive\nfunc (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options container.CopyToContainerOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"path\", filepath.ToSlash(dstPath)) // Normalize the paths used in the API.\n\t// Do not allow for an existing directory to be overwritten by a non-directory and vice versa.\n\tif !options.AllowOverwriteDirWithFile {\n\t\tquery.Set(\"noOverwriteDirNonDir\", \"true\")\n\t}\n\n\tif options.CopyUIDGID {\n\t\tquery.Set(\"copyUIDGID\", \"true\")\n\t}\n\n\tresponse, err := cli.putRaw(ctx, \"/containers/\"+containerID+\"/archive\", query, content, nil)\n\tdefer ensureReaderClosed(response)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// CopyFromContainer gets the content from the container and returns it as a Reader\n// for a TAR archive to manipulate it in the host. It's up to the caller to close the reader.\nfunc (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, container.PathStat, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn nil, container.PathStat{}, err\n\t}\n\n\tquery := make(url.Values, 1)\n\tquery.Set(\"path\", filepath.ToSlash(srcPath)) // Normalize the paths used in the API.\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/archive\", query, nil)\n\tif err != nil {\n\t\treturn nil, container.PathStat{}, err\n\t}\n\n\t// In order to get the copy behavior right, we need to know information\n\t// about both the source and the destination. The response headers include\n\t// stat info about the source that we can use in deciding exactly how to\n\t// copy it locally. Along with the stat info about the local destination,\n\t// we have everything we need to handle the multiple possibilities there\n\t// can be when copying a file/dir from one location to another file/dir.\n\tstat, err := getContainerPathStatFromHeader(resp.Header)\n\tif err != nil {\n\t\treturn nil, stat, fmt.Errorf(\"unable to get resource stat from response: %s\", err)\n\t}\n\treturn resp.Body, stat, err\n}\n\nfunc getContainerPathStatFromHeader(header http.Header) (container.PathStat, error) {\n\tvar stat container.PathStat\n\n\tencodedStat := header.Get(\"X-Docker-Container-Path-Stat\")\n\tstatDecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(encodedStat))\n\n\terr := json.NewDecoder(statDecoder).Decode(&stat)\n\tif err != nil {\n\t\terr = fmt.Errorf(\"unable to decode container path stat header: %s\", err)\n\t}\n\n\treturn stat, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\t\"path\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/network\"\n\t\"github.com/docker/docker/api/types/versions\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// ContainerCreate creates a new container based on the given configuration.\n// It can be associated with a name, but it's not mandatory.\nfunc (cli *Client) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *ocispec.Platform, containerName string) (container.CreateResponse, error) {\n\tvar response container.CreateResponse\n\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\treturn response, err\n\t}\n\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"stop timeout\"); config != nil && config.StopTimeout != nil && err != nil {\n\t\treturn response, err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.41\", \"specify container image platform\"); platform != nil && err != nil {\n\t\treturn response, err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.44\", \"specify health-check start interval\"); config != nil && config.Healthcheck != nil && config.Healthcheck.StartInterval != 0 && err != nil {\n\t\treturn response, err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.44\", \"specify mac-address per network\"); hasEndpointSpecificMacAddress(networkingConfig) && err != nil {\n\t\treturn response, err\n\t}\n\n\tif hostConfig != nil {\n\t\tif versions.LessThan(cli.ClientVersion(), \"1.25\") {\n\t\t\t// When using API 1.24 and under, the client is responsible for removing the container\n\t\t\thostConfig.AutoRemove = false\n\t\t}\n\t\tif versions.GreaterThanOrEqualTo(cli.ClientVersion(), \"1.42\") || versions.LessThan(cli.ClientVersion(), \"1.40\") {\n\t\t\t// KernelMemory was added in API 1.40, and deprecated in API 1.42\n\t\t\thostConfig.KernelMemory = 0\n\t\t}\n\t\tif platform != nil && platform.OS == \"linux\" && versions.LessThan(cli.ClientVersion(), \"1.42\") {\n\t\t\t// When using API under 1.42, the Linux daemon doesn't respect the ConsoleSize\n\t\t\thostConfig.ConsoleSize = [2]uint{0, 0}\n\t\t}\n\n\t\thostConfig.CapAdd = normalizeCapabilities(hostConfig.CapAdd)\n\t\thostConfig.CapDrop = normalizeCapabilities(hostConfig.CapDrop)\n\t}\n\n\t// Since API 1.44, the container-wide MacAddress is deprecated and will trigger a WARNING if it's specified.\n\tif versions.GreaterThanOrEqualTo(cli.ClientVersion(), \"1.44\") {\n\t\tconfig.MacAddress = \"\" //nolint:staticcheck // ignore SA1019: field is deprecated, but still used on API < v1.44.\n\t}\n\n\tquery := url.Values{}\n\tif p := formatPlatform(platform); p != \"\" {\n\t\tquery.Set(\"platform\", p)\n\t}\n\n\tif containerName != \"\" {\n\t\tquery.Set(\"name\", containerName)\n\t}\n\n\tbody := container.CreateRequest{\n\t\tConfig:           config,\n\t\tHostConfig:       hostConfig,\n\t\tNetworkingConfig: networkingConfig,\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/create\", query, body, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn response, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n\n// formatPlatform returns a formatted string representing platform (e.g. linux/arm/v7).\n//\n// Similar to containerd's platforms.Format(), but does allow components to be\n// omitted (e.g. pass \"architecture\" only, without \"os\":\n// https://github.com/containerd/containerd/blob/v1.5.2/platforms/platforms.go#L243-L263\nfunc formatPlatform(platform *ocispec.Platform) string {\n\tif platform == nil {\n\t\treturn \"\"\n\t}\n\treturn path.Join(platform.OS, platform.Architecture, platform.Variant)\n}\n\n// hasEndpointSpecificMacAddress checks whether one of the endpoint in networkingConfig has a MacAddress defined.\nfunc hasEndpointSpecificMacAddress(networkingConfig *network.NetworkingConfig) bool {\n\tif networkingConfig == nil {\n\t\treturn false\n\t}\n\tfor _, endpoint := range networkingConfig.EndpointsConfig {\n\t\tif endpoint.MacAddress != \"\" {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// allCapabilities is a magic value for \"all capabilities\"\nconst allCapabilities = \"ALL\"\n\n// normalizeCapabilities normalizes capabilities to their canonical form,\n// removes duplicates, and sorts the results.\n//\n// It is similar to [github.com/docker/docker/oci/caps.NormalizeLegacyCapabilities],\n// but performs no validation based on supported capabilities.\nfunc normalizeCapabilities(caps []string) []string {\n\tvar normalized []string\n\n\tunique := make(map[string]struct{})\n\tfor _, c := range caps {\n\t\tc = normalizeCap(c)\n\t\tif _, ok := unique[c]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tunique[c] = struct{}{}\n\t\tnormalized = append(normalized, c)\n\t}\n\n\tsort.Strings(normalized)\n\treturn normalized\n}\n\n// normalizeCap normalizes a capability to its canonical format by upper-casing\n// and adding a \"CAP_\" prefix (if not yet present). It also accepts the \"ALL\"\n// magic-value.\nfunc normalizeCap(cap string) string {\n\tcap = strings.ToUpper(cap)\n\tif cap == allCapabilities {\n\t\treturn cap\n\t}\n\tif !strings.HasPrefix(cap, \"CAP_\") {\n\t\tcap = \"CAP_\" + cap\n\t}\n\treturn cap\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_diff.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerDiff shows differences in a container filesystem since it was started.\nfunc (cli *Client) ContainerDiff(ctx context.Context, containerID string) ([]container.FilesystemChange, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/changes\", url.Values{}, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar changes []container.FilesystemChange\n\terr = json.NewDecoder(resp.Body).Decode(&changes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn changes, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_exec.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// ContainerExecCreate creates a new exec configuration to run an exec process.\nfunc (cli *Client) ContainerExecCreate(ctx context.Context, containerID string, options container.ExecOptions) (container.ExecCreateResponse, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.ExecCreateResponse{}, err\n\t}\n\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\treturn container.ExecCreateResponse{}, err\n\t}\n\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"env\"); len(options.Env) != 0 && err != nil {\n\t\treturn container.ExecCreateResponse{}, err\n\t}\n\tif versions.LessThan(cli.ClientVersion(), \"1.42\") {\n\t\toptions.ConsoleSize = nil\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/exec\", nil, options, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn container.ExecCreateResponse{}, err\n\t}\n\n\tvar response container.ExecCreateResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n\n// ContainerExecStart starts an exec process already created in the docker host.\nfunc (cli *Client) ContainerExecStart(ctx context.Context, execID string, config container.ExecStartOptions) error {\n\tif versions.LessThan(cli.ClientVersion(), \"1.42\") {\n\t\tconfig.ConsoleSize = nil\n\t}\n\tresp, err := cli.post(ctx, \"/exec/\"+execID+\"/start\", nil, config, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n\n// ContainerExecAttach attaches a connection to an exec process in the server.\n// It returns a types.HijackedConnection with the hijacked connection\n// and the a reader to get output. It's up to the called to close\n// the hijacked connection by calling types.HijackedResponse.Close.\nfunc (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config container.ExecAttachOptions) (types.HijackedResponse, error) {\n\tif versions.LessThan(cli.ClientVersion(), \"1.42\") {\n\t\tconfig.ConsoleSize = nil\n\t}\n\treturn cli.postHijacked(ctx, \"/exec/\"+execID+\"/start\", nil, config, http.Header{\n\t\t\"Content-Type\": {\"application/json\"},\n\t})\n}\n\n// ContainerExecInspect returns information about a specific exec process on the docker host.\nfunc (cli *Client) ContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error) {\n\tvar response container.ExecInspect\n\tresp, err := cli.get(ctx, \"/exec/\"+execID+\"/json\", nil, nil)\n\tif err != nil {\n\t\treturn response, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\tensureReaderClosed(resp)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_export.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/url\"\n)\n\n// ContainerExport retrieves the raw contents of a container\n// and returns them as an io.ReadCloser. It's up to the caller\n// to close the stream.\nfunc (cli *Client) ContainerExport(ctx context.Context, containerID string) (io.ReadCloser, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/export\", url.Values{}, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn resp.Body, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerInspect returns the container information.\nfunc (cli *Client) ContainerInspect(ctx context.Context, containerID string) (container.InspectResponse, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.InspectResponse{}, err\n\t}\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/json\", nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn container.InspectResponse{}, err\n\t}\n\n\tvar response container.InspectResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n\n// ContainerInspectWithRaw returns the container information and its raw representation.\nfunc (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (container.InspectResponse, []byte, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.InspectResponse{}, nil, err\n\t}\n\n\tquery := url.Values{}\n\tif getSize {\n\t\tquery.Set(\"size\", \"1\")\n\t}\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/json\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn container.InspectResponse{}, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn container.InspectResponse{}, nil, err\n\t}\n\n\tvar response container.InspectResponse\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&response)\n\treturn response, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_kill.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n)\n\n// ContainerKill terminates the container process but does not remove the container from the docker host.\nfunc (cli *Client) ContainerKill(ctx context.Context, containerID, signal string) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif signal != \"\" {\n\t\tquery.Set(\"signal\", signal)\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/kill\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/filters\"\n)\n\n// ContainerList returns the list of containers in the docker host.\nfunc (cli *Client) ContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error) {\n\tquery := url.Values{}\n\n\tif options.All {\n\t\tquery.Set(\"all\", \"1\")\n\t}\n\n\tif options.Limit > 0 {\n\t\tquery.Set(\"limit\", strconv.Itoa(options.Limit))\n\t}\n\n\tif options.Since != \"\" {\n\t\tquery.Set(\"since\", options.Since)\n\t}\n\n\tif options.Before != \"\" {\n\t\tquery.Set(\"before\", options.Before)\n\t}\n\n\tif options.Size {\n\t\tquery.Set(\"size\", \"1\")\n\t}\n\n\tif options.Filters.Len() > 0 {\n\t\t//nolint:staticcheck // ignore SA1019 for old code\n\t\tfilterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\tresp, err := cli.get(ctx, \"/containers/json\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar containers []container.Summary\n\terr = json.NewDecoder(resp.Body).Decode(&containers)\n\treturn containers, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_logs.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/url\"\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\ttimetypes \"github.com/docker/docker/api/types/time\"\n\t\"github.com/pkg/errors\"\n)\n\n// ContainerLogs returns the logs generated by a container in an io.ReadCloser.\n// It's up to the caller to close the stream.\n//\n// The stream format on the response will be in one of two formats:\n//\n// If the container is using a TTY, there is only a single stream (stdout), and\n// data is copied directly from the container output stream, no extra\n// multiplexing or headers.\n//\n// If the container is *not* using a TTY, streams for stdout and stderr are\n// multiplexed.\n// The format of the multiplexed stream is as follows:\n//\n//\t[8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}[]byte{OUTPUT}\n//\n// STREAM_TYPE can be 1 for stdout and 2 for stderr\n//\n// SIZE1, SIZE2, SIZE3, and SIZE4 are four bytes of uint32 encoded as big endian.\n// This is the size of OUTPUT.\n//\n// You can use github.com/docker/docker/pkg/stdcopy.StdCopy to demultiplex this\n// stream.\nfunc (cli *Client) ContainerLogs(ctx context.Context, containerID string, options container.LogsOptions) (io.ReadCloser, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tquery := url.Values{}\n\tif options.ShowStdout {\n\t\tquery.Set(\"stdout\", \"1\")\n\t}\n\n\tif options.ShowStderr {\n\t\tquery.Set(\"stderr\", \"1\")\n\t}\n\n\tif options.Since != \"\" {\n\t\tts, err := timetypes.GetTimestamp(options.Since, time.Now())\n\t\tif err != nil {\n\t\t\treturn nil, errors.Wrap(err, `invalid value for \"since\"`)\n\t\t}\n\t\tquery.Set(\"since\", ts)\n\t}\n\n\tif options.Until != \"\" {\n\t\tts, err := timetypes.GetTimestamp(options.Until, time.Now())\n\t\tif err != nil {\n\t\t\treturn nil, errors.Wrap(err, `invalid value for \"until\"`)\n\t\t}\n\t\tquery.Set(\"until\", ts)\n\t}\n\n\tif options.Timestamps {\n\t\tquery.Set(\"timestamps\", \"1\")\n\t}\n\n\tif options.Details {\n\t\tquery.Set(\"details\", \"1\")\n\t}\n\n\tif options.Follow {\n\t\tquery.Set(\"follow\", \"1\")\n\t}\n\tquery.Set(\"tail\", options.Tail)\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/logs\", query, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_pause.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport \"context\"\n\n// ContainerPause pauses the main process of a given container without terminating it.\nfunc (cli *Client) ContainerPause(ctx context.Context, containerID string) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/pause\", nil, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_prune.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/filters\"\n)\n\n// ContainersPrune requests the daemon to delete unused data\nfunc (cli *Client) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) {\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"container prune\"); err != nil {\n\t\treturn container.PruneReport{}, err\n\t}\n\n\tquery, err := getFiltersQuery(pruneFilters)\n\tif err != nil {\n\t\treturn container.PruneReport{}, err\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/prune\", query, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn container.PruneReport{}, err\n\t}\n\n\tvar report container.PruneReport\n\tif err := json.NewDecoder(resp.Body).Decode(&report); err != nil {\n\t\treturn container.PruneReport{}, fmt.Errorf(\"Error retrieving disk usage: %v\", err)\n\t}\n\n\treturn report, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerRemove kills and removes a container from the docker host.\nfunc (cli *Client) ContainerRemove(ctx context.Context, containerID string, options container.RemoveOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif options.RemoveVolumes {\n\t\tquery.Set(\"v\", \"1\")\n\t}\n\tif options.RemoveLinks {\n\t\tquery.Set(\"link\", \"1\")\n\t}\n\n\tif options.Force {\n\t\tquery.Set(\"force\", \"1\")\n\t}\n\n\tresp, err := cli.delete(ctx, \"/containers/\"+containerID, query, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_rename.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n)\n\n// ContainerRename changes the name of a given container.\nfunc (cli *Client) ContainerRename(ctx context.Context, containerID, newContainerName string) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"name\", newContainerName)\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/rename\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_resize.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerResize changes the size of the tty for a container.\nfunc (cli *Client) ContainerResize(ctx context.Context, containerID string, options container.ResizeOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn cli.resize(ctx, \"/containers/\"+containerID, options.Height, options.Width)\n}\n\n// ContainerExecResize changes the size of the tty for an exec process running inside a container.\nfunc (cli *Client) ContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error {\n\texecID, err := trimID(\"exec\", execID)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn cli.resize(ctx, \"/exec/\"+execID, options.Height, options.Width)\n}\n\nfunc (cli *Client) resize(ctx context.Context, basePath string, height, width uint) error {\n\t// FIXME(thaJeztah): the API / backend accepts uint32, but container.ResizeOptions uses uint.\n\tquery := url.Values{}\n\tquery.Set(\"h\", strconv.FormatUint(uint64(height), 10))\n\tquery.Set(\"w\", strconv.FormatUint(uint64(width), 10))\n\n\tresp, err := cli.post(ctx, basePath+\"/resize\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_restart.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// ContainerRestart stops and starts a container again.\n// It makes the daemon wait for the container to be up again for\n// a specific amount of time, given the timeout.\nfunc (cli *Client) ContainerRestart(ctx context.Context, containerID string, options container.StopOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif options.Timeout != nil {\n\t\tquery.Set(\"t\", strconv.Itoa(*options.Timeout))\n\t}\n\tif options.Signal != \"\" {\n\t\t// Make sure we negotiated (if the client is configured to do so),\n\t\t// as code below contains API-version specific handling of options.\n\t\t//\n\t\t// Normally, version-negotiation (if enabled) would not happen until\n\t\t// the API request is made.\n\t\tif err := cli.checkVersion(ctx); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif versions.GreaterThanOrEqualTo(cli.version, \"1.42\") {\n\t\t\tquery.Set(\"signal\", options.Signal)\n\t\t}\n\t}\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/restart\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_start.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerStart sends a request to the docker daemon to start a container.\nfunc (cli *Client) ContainerStart(ctx context.Context, containerID string, options container.StartOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif len(options.CheckpointID) != 0 {\n\t\tquery.Set(\"checkpoint\", options.CheckpointID)\n\t}\n\tif len(options.CheckpointDir) != 0 {\n\t\tquery.Set(\"checkpoint-dir\", options.CheckpointDir)\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/start\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_stats.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerStats returns near realtime stats for a given container.\n// It's up to the caller to close the io.ReadCloser returned.\nfunc (cli *Client) ContainerStats(ctx context.Context, containerID string, stream bool) (container.StatsResponseReader, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.StatsResponseReader{}, err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"stream\", \"0\")\n\tif stream {\n\t\tquery.Set(\"stream\", \"1\")\n\t}\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/stats\", query, nil)\n\tif err != nil {\n\t\treturn container.StatsResponseReader{}, err\n\t}\n\n\treturn container.StatsResponseReader{\n\t\tBody:   resp.Body,\n\t\tOSType: getDockerOS(resp.Header.Get(\"Server\")),\n\t}, nil\n}\n\n// ContainerStatsOneShot gets a single stat entry from a container.\n// It differs from `ContainerStats` in that the API should not wait to prime the stats\nfunc (cli *Client) ContainerStatsOneShot(ctx context.Context, containerID string) (container.StatsResponseReader, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.StatsResponseReader{}, err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"stream\", \"0\")\n\tquery.Set(\"one-shot\", \"1\")\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/stats\", query, nil)\n\tif err != nil {\n\t\treturn container.StatsResponseReader{}, err\n\t}\n\n\treturn container.StatsResponseReader{\n\t\tBody:   resp.Body,\n\t\tOSType: getDockerOS(resp.Header.Get(\"Server\")),\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_stop.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// ContainerStop stops a container. In case the container fails to stop\n// gracefully within a time frame specified by the timeout argument,\n// it is forcefully terminated (killed).\n//\n// If the timeout is nil, the container's StopTimeout value is used, if set,\n// otherwise the engine default. A negative timeout value can be specified,\n// meaning no timeout, i.e. no forceful termination is performed.\nfunc (cli *Client) ContainerStop(ctx context.Context, containerID string, options container.StopOptions) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif options.Timeout != nil {\n\t\tquery.Set(\"t\", strconv.Itoa(*options.Timeout))\n\t}\n\tif options.Signal != \"\" {\n\t\t// Make sure we negotiated (if the client is configured to do so),\n\t\t// as code below contains API-version specific handling of options.\n\t\t//\n\t\t// Normally, version-negotiation (if enabled) would not happen until\n\t\t// the API request is made.\n\t\tif err := cli.checkVersion(ctx); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif versions.GreaterThanOrEqualTo(cli.version, \"1.42\") {\n\t\t\tquery.Set(\"signal\", options.Signal)\n\t\t}\n\t}\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/stop\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_top.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerTop shows process information from within a container.\nfunc (cli *Client) ContainerTop(ctx context.Context, containerID string, arguments []string) (container.TopResponse, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.TopResponse{}, err\n\t}\n\n\tquery := url.Values{}\n\tif len(arguments) > 0 {\n\t\tquery.Set(\"ps_args\", strings.Join(arguments, \" \"))\n\t}\n\n\tresp, err := cli.get(ctx, \"/containers/\"+containerID+\"/top\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn container.TopResponse{}, err\n\t}\n\n\tvar response container.TopResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_unpause.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport \"context\"\n\n// ContainerUnpause resumes the process execution within a container\nfunc (cli *Client) ContainerUnpause(ctx context.Context, containerID string) error {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/unpause\", nil, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_update.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types/container\"\n)\n\n// ContainerUpdate updates the resources of a container.\nfunc (cli *Client) ContainerUpdate(ctx context.Context, containerID string, updateConfig container.UpdateConfig) (container.UpdateResponse, error) {\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn container.UpdateResponse{}, err\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/update\", nil, updateConfig, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn container.UpdateResponse{}, err\n\t}\n\n\tvar response container.UpdateResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/container_wait.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"io\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\nconst containerWaitErrorMsgLimit = 2 * 1024 /* Max: 2KiB */\n\n// ContainerWait waits until the specified container is in a certain state\n// indicated by the given condition, either \"not-running\" (default),\n// \"next-exit\", or \"removed\".\n//\n// If this client's API version is before 1.30, condition is ignored and\n// ContainerWait will return immediately with the two channels, as the server\n// will wait as if the condition were \"not-running\".\n//\n// If this client's API version is at least 1.30, ContainerWait blocks until\n// the request has been acknowledged by the server (with a response header),\n// then returns two channels on which the caller can wait for the exit status\n// of the container or an error if there was a problem either beginning the\n// wait request or in getting the response. This allows the caller to\n// synchronize ContainerWait with other calls, such as specifying a\n// \"next-exit\" condition before issuing a ContainerStart request.\nfunc (cli *Client) ContainerWait(ctx context.Context, containerID string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error) {\n\tresultC := make(chan container.WaitResponse)\n\terrC := make(chan error, 1)\n\n\tcontainerID, err := trimID(\"container\", containerID)\n\tif err != nil {\n\t\terrC <- err\n\t\treturn resultC, errC\n\t}\n\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\terrC <- err\n\t\treturn resultC, errC\n\t}\n\tif versions.LessThan(cli.ClientVersion(), \"1.30\") {\n\t\treturn cli.legacyContainerWait(ctx, containerID)\n\t}\n\n\tquery := url.Values{}\n\tif condition != \"\" {\n\t\tquery.Set(\"condition\", string(condition))\n\t}\n\n\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/wait\", query, nil, nil)\n\tif err != nil {\n\t\tdefer ensureReaderClosed(resp)\n\t\terrC <- err\n\t\treturn resultC, errC\n\t}\n\n\tgo func() {\n\t\tdefer ensureReaderClosed(resp)\n\n\t\tresponseText := bytes.NewBuffer(nil)\n\t\tstream := io.TeeReader(resp.Body, responseText)\n\n\t\tvar res container.WaitResponse\n\t\tif err := json.NewDecoder(stream).Decode(&res); err != nil {\n\t\t\t// NOTE(nicks): The /wait API does not work well with HTTP proxies.\n\t\t\t// At any time, the proxy could cut off the response stream.\n\t\t\t//\n\t\t\t// But because the HTTP status has already been written, the proxy's\n\t\t\t// only option is to write a plaintext error message.\n\t\t\t//\n\t\t\t// If there's a JSON parsing error, read the real error message\n\t\t\t// off the body and send it to the client.\n\t\t\tif errors.As(err, new(*json.SyntaxError)) {\n\t\t\t\t_, _ = io.ReadAll(io.LimitReader(stream, containerWaitErrorMsgLimit))\n\t\t\t\terrC <- errors.New(responseText.String())\n\t\t\t} else {\n\t\t\t\terrC <- err\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tresultC <- res\n\t}()\n\n\treturn resultC, errC\n}\n\n// legacyContainerWait returns immediately and doesn't have an option to wait\n// until the container is removed.\nfunc (cli *Client) legacyContainerWait(ctx context.Context, containerID string) (<-chan container.WaitResponse, <-chan error) {\n\tresultC := make(chan container.WaitResponse)\n\terrC := make(chan error)\n\n\tgo func() {\n\t\tresp, err := cli.post(ctx, \"/containers/\"+containerID+\"/wait\", nil, nil, nil)\n\t\tif err != nil {\n\t\t\terrC <- err\n\t\t\treturn\n\t\t}\n\t\tdefer ensureReaderClosed(resp)\n\n\t\tvar res container.WaitResponse\n\t\tif err := json.NewDecoder(resp.Body).Decode(&res); err != nil {\n\t\t\terrC <- err\n\t\t\treturn\n\t\t}\n\n\t\tresultC <- res\n\t}()\n\n\treturn resultC, errC\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/disk_usage.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// DiskUsage requests the current data usage from the daemon\nfunc (cli *Client) DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error) {\n\tvar query url.Values\n\tif len(options.Types) > 0 {\n\t\tquery = url.Values{}\n\t\tfor _, t := range options.Types {\n\t\t\tquery.Add(\"type\", string(t))\n\t\t}\n\t}\n\n\tresp, err := cli.get(ctx, \"/system/df\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn types.DiskUsage{}, err\n\t}\n\n\tvar du types.DiskUsage\n\tif err := json.NewDecoder(resp.Body).Decode(&du); err != nil {\n\t\treturn types.DiskUsage{}, fmt.Errorf(\"Error retrieving disk usage: %v\", err)\n\t}\n\treturn du, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/distribution_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/registry\"\n)\n\n// DistributionInspect returns the image digest with the full manifest.\nfunc (cli *Client) DistributionInspect(ctx context.Context, imageRef, encodedRegistryAuth string) (registry.DistributionInspect, error) {\n\tif imageRef == \"\" {\n\t\treturn registry.DistributionInspect{}, objectNotFoundError{object: \"distribution\", id: imageRef}\n\t}\n\n\tif err := cli.NewVersionError(ctx, \"1.30\", \"distribution inspect\"); err != nil {\n\t\treturn registry.DistributionInspect{}, err\n\t}\n\n\tvar headers http.Header\n\tif encodedRegistryAuth != \"\" {\n\t\theaders = http.Header{\n\t\t\tregistry.AuthHeader: {encodedRegistryAuth},\n\t\t}\n\t}\n\n\t// Contact the registry to retrieve digest and platform information\n\tresp, err := cli.get(ctx, \"/distribution/\"+imageRef+\"/json\", url.Values{}, headers)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn registry.DistributionInspect{}, err\n\t}\n\n\tvar distributionInspect registry.DistributionInspect\n\terr = json.NewDecoder(resp.Body).Decode(&distributionInspect)\n\treturn distributionInspect, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/envvars.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nconst (\n\t// EnvOverrideHost is the name of the environment variable that can be used\n\t// to override the default host to connect to (DefaultDockerHost).\n\t//\n\t// This env-var is read by FromEnv and WithHostFromEnv and when set to a\n\t// non-empty value, takes precedence over the default host (which is platform\n\t// specific), or any host already set.\n\tEnvOverrideHost = \"DOCKER_HOST\"\n\n\t// EnvOverrideAPIVersion is the name of the environment variable that can\n\t// be used to override the API version to use. Value should be\n\t// formatted as MAJOR.MINOR, for example, \"1.19\".\n\t//\n\t// This env-var is read by FromEnv and WithVersionFromEnv and when set to a\n\t// non-empty value, takes precedence over API version negotiation.\n\t//\n\t// This environment variable should be used for debugging purposes only, as\n\t// it can set the client to use an incompatible (or invalid) API version.\n\tEnvOverrideAPIVersion = \"DOCKER_API_VERSION\"\n\n\t// EnvOverrideCertPath is the name of the environment variable that can be\n\t// used to specify the directory from which to load the TLS certificates\n\t// (ca.pem, cert.pem, key.pem) from. These certificates are used to configure\n\t// the Client for a TCP connection protected by TLS client authentication.\n\t//\n\t// TLS certificate verification is enabled by default if the Client is configured\n\t// to use a TLS connection. Refer to EnvTLSVerify below to learn how to\n\t// disable verification for testing purposes.\n\t//\n\t// WARNING: Access to the remote API is equivalent to root access to the\n\t// host where the daemon runs. Do not expose the API without protection,\n\t// and only if needed. Make sure you are familiar with the \"daemon attack\n\t// surface\" (https://docs.docker.com/go/attack-surface/).\n\t//\n\t// For local access to the API, it is recommended to connect with the daemon\n\t// using the default local socket connection (on Linux), or the named pipe\n\t// (on Windows).\n\t//\n\t// If you need to access the API of a remote daemon, consider using an SSH\n\t// (ssh://) connection, which is easier to set up, and requires no additional\n\t// configuration if the host is accessible using ssh.\n\t//\n\t// If you cannot use the alternatives above, and you must expose the API over\n\t// a TCP connection, refer to https://docs.docker.com/engine/security/protect-access/\n\t// to learn how to configure the daemon and client to use a TCP connection\n\t// with TLS client authentication. Make sure you know the differences between\n\t// a regular TLS connection and a TLS connection protected by TLS client\n\t// authentication, and verify that the API cannot be accessed by other clients.\n\tEnvOverrideCertPath = \"DOCKER_CERT_PATH\"\n\n\t// EnvTLSVerify is the name of the environment variable that can be used to\n\t// enable or disable TLS certificate verification. When set to a non-empty\n\t// value, TLS certificate verification is enabled, and the client is configured\n\t// to use a TLS connection, using certificates from the default directories\n\t// (within `~/.docker`); refer to EnvOverrideCertPath above for additional\n\t// details.\n\t//\n\t// WARNING: Access to the remote API is equivalent to root access to the\n\t// host where the daemon runs. Do not expose the API without protection,\n\t// and only if needed. Make sure you are familiar with the \"daemon attack\n\t// surface\" (https://docs.docker.com/go/attack-surface/).\n\t//\n\t// Before setting up your client and daemon to use a TCP connection with TLS\n\t// client authentication, consider using one of the alternatives mentioned\n\t// in EnvOverrideCertPath above.\n\t//\n\t// Disabling TLS certificate verification (for testing purposes)\n\t//\n\t// TLS certificate verification is enabled by default if the Client is configured\n\t// to use a TLS connection, and it is highly recommended to keep verification\n\t// enabled to prevent machine-in-the-middle attacks. Refer to the documentation\n\t// at https://docs.docker.com/engine/security/protect-access/ and pages linked\n\t// from that page to learn how to configure the daemon and client to use a\n\t// TCP connection with TLS client authentication enabled.\n\t//\n\t// Set the \"DOCKER_TLS_VERIFY\" environment to an empty string (\"\") to\n\t// disable TLS certificate verification. Disabling verification is insecure,\n\t// so should only be done for testing purposes. From the Go documentation\n\t// (https://pkg.go.dev/crypto/tls#Config):\n\t//\n\t// InsecureSkipVerify controls whether a client verifies the server's\n\t// certificate chain and host name. If InsecureSkipVerify is true, crypto/tls\n\t// accepts any certificate presented by the server and any host name in that\n\t// certificate. In this mode, TLS is susceptible to machine-in-the-middle\n\t// attacks unless custom verification is used. This should be used only for\n\t// testing or in combination with VerifyConnection or VerifyPeerCertificate.\n\tEnvTLSVerify = \"DOCKER_TLS_VERIFY\"\n)\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/errors.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/versions\"\n\t\"github.com/docker/docker/errdefs\"\n)\n\n// errConnectionFailed implements an error returned when connection failed.\ntype errConnectionFailed struct {\n\terror\n}\n\n// Error returns a string representation of an errConnectionFailed\nfunc (e errConnectionFailed) Error() string {\n\treturn e.error.Error()\n}\n\nfunc (e errConnectionFailed) Unwrap() error {\n\treturn e.error\n}\n\n// IsErrConnectionFailed returns true if the error is caused by connection failed.\nfunc IsErrConnectionFailed(err error) bool {\n\treturn errors.As(err, &errConnectionFailed{})\n}\n\n// ErrorConnectionFailed returns an error with host in the error message when connection to docker daemon failed.\n//\n// Deprecated: this function was only used internally, and will be removed in the next release.\nfunc ErrorConnectionFailed(host string) error {\n\treturn connectionFailed(host)\n}\n\n// connectionFailed returns an error with host in the error message when connection\n// to docker daemon failed.\nfunc connectionFailed(host string) error {\n\tvar err error\n\tif host == \"\" {\n\t\terr = errors.New(\"Cannot connect to the Docker daemon. Is the docker daemon running on this host?\")\n\t} else {\n\t\terr = fmt.Errorf(\"Cannot connect to the Docker daemon at %s. Is the docker daemon running?\", host)\n\t}\n\treturn errConnectionFailed{error: err}\n}\n\n// IsErrNotFound returns true if the error is a NotFound error, which is returned\n// by the API when some object is not found. It is an alias for [errdefs.IsNotFound].\nfunc IsErrNotFound(err error) bool {\n\treturn errdefs.IsNotFound(err)\n}\n\ntype objectNotFoundError struct {\n\tobject string\n\tid     string\n}\n\nfunc (e objectNotFoundError) NotFound() {}\n\nfunc (e objectNotFoundError) Error() string {\n\treturn fmt.Sprintf(\"Error: No such %s: %s\", e.object, e.id)\n}\n\n// NewVersionError returns an error if the APIVersion required is less than the\n// current supported version.\n//\n// It performs API-version negotiation if the Client is configured with this\n// option, otherwise it assumes the latest API version is used.\nfunc (cli *Client) NewVersionError(ctx context.Context, APIrequired, feature string) error {\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\treturn err\n\t}\n\tif cli.version != \"\" && versions.LessThan(cli.version, APIrequired) {\n\t\treturn fmt.Errorf(\"%q requires API version %s, but the Docker daemon API version is %s\", feature, APIrequired, cli.version)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/events.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/events\"\n\t\"github.com/docker/docker/api/types/filters\"\n\ttimetypes \"github.com/docker/docker/api/types/time\"\n)\n\n// Events returns a stream of events in the daemon. It's up to the caller to close the stream\n// by cancelling the context. Once the stream has been completely read an io.EOF error will\n// be sent over the error channel. If an error is sent all processing will be stopped. It's up\n// to the caller to reopen the stream in the event of an error by reinvoking this method.\nfunc (cli *Client) Events(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error) {\n\tmessages := make(chan events.Message)\n\terrs := make(chan error, 1)\n\n\tstarted := make(chan struct{})\n\tgo func() {\n\t\tdefer close(errs)\n\n\t\tquery, err := buildEventsQueryParams(cli.version, options)\n\t\tif err != nil {\n\t\t\tclose(started)\n\t\t\terrs <- err\n\t\t\treturn\n\t\t}\n\n\t\tresp, err := cli.get(ctx, \"/events\", query, nil)\n\t\tif err != nil {\n\t\t\tclose(started)\n\t\t\terrs <- err\n\t\t\treturn\n\t\t}\n\t\tdefer resp.Body.Close()\n\n\t\tdecoder := json.NewDecoder(resp.Body)\n\n\t\tclose(started)\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\terrs <- ctx.Err()\n\t\t\t\treturn\n\t\t\tdefault:\n\t\t\t\tvar event events.Message\n\t\t\t\tif err := decoder.Decode(&event); err != nil {\n\t\t\t\t\terrs <- err\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tselect {\n\t\t\t\tcase messages <- event:\n\t\t\t\tcase <-ctx.Done():\n\t\t\t\t\terrs <- ctx.Err()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}()\n\t<-started\n\n\treturn messages, errs\n}\n\nfunc buildEventsQueryParams(cliVersion string, options events.ListOptions) (url.Values, error) {\n\tquery := url.Values{}\n\tref := time.Now()\n\n\tif options.Since != \"\" {\n\t\tts, err := timetypes.GetTimestamp(options.Since, ref)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery.Set(\"since\", ts)\n\t}\n\n\tif options.Until != \"\" {\n\t\tts, err := timetypes.GetTimestamp(options.Until, ref)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery.Set(\"until\", ts)\n\t}\n\n\tif options.Filters.Len() > 0 {\n\t\t//nolint:staticcheck // ignore SA1019 for old code\n\t\tfilterJSON, err := filters.ToParamWithVersion(cliVersion, options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\treturn query, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/hijack.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/versions\"\n\t\"github.com/pkg/errors\"\n\t\"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n)\n\n// postHijacked sends a POST request and hijacks the connection.\nfunc (cli *Client) postHijacked(ctx context.Context, path string, query url.Values, body interface{}, headers map[string][]string) (types.HijackedResponse, error) {\n\tbodyEncoded, err := encodeData(body)\n\tif err != nil {\n\t\treturn types.HijackedResponse{}, err\n\t}\n\treq, err := cli.buildRequest(ctx, http.MethodPost, cli.getAPIPath(ctx, path, query), bodyEncoded, headers)\n\tif err != nil {\n\t\treturn types.HijackedResponse{}, err\n\t}\n\tconn, mediaType, err := setupHijackConn(cli.dialer(), req, \"tcp\")\n\tif err != nil {\n\t\treturn types.HijackedResponse{}, err\n\t}\n\n\tif versions.LessThan(cli.ClientVersion(), \"1.42\") {\n\t\t// Prior to 1.42, Content-Type is always set to raw-stream and not relevant\n\t\tmediaType = \"\"\n\t}\n\n\treturn types.NewHijackedResponse(conn, mediaType), nil\n}\n\n// DialHijack returns a hijacked connection with negotiated protocol proto.\nfunc (cli *Client) DialHijack(ctx context.Context, url, proto string, meta map[string][]string) (net.Conn, error) {\n\treq, err := http.NewRequestWithContext(ctx, http.MethodPost, url, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq = cli.addHeaders(req, meta)\n\n\tconn, _, err := setupHijackConn(cli.Dialer(), req, proto)\n\treturn conn, err\n}\n\nfunc setupHijackConn(dialer func(context.Context) (net.Conn, error), req *http.Request, proto string) (_ net.Conn, _ string, retErr error) {\n\tctx := req.Context()\n\treq.Header.Set(\"Connection\", \"Upgrade\")\n\treq.Header.Set(\"Upgrade\", proto)\n\n\tconn, err := dialer(ctx)\n\tif err != nil {\n\t\treturn nil, \"\", errors.Wrap(err, \"cannot connect to the Docker daemon. Is 'docker daemon' running on this host?\")\n\t}\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\tconn.Close()\n\t\t}\n\t}()\n\n\t// When we set up a TCP connection for hijack, there could be long periods\n\t// of inactivity (a long running command with no output) that in certain\n\t// network setups may cause ECONNTIMEOUT, leaving the client in an unknown\n\t// state. Setting TCP KeepAlive on the socket connection will prohibit\n\t// ECONNTIMEOUT unless the socket connection truly is broken\n\tif tcpConn, ok := conn.(*net.TCPConn); ok {\n\t\t_ = tcpConn.SetKeepAlive(true)\n\t\t_ = tcpConn.SetKeepAlivePeriod(30 * time.Second)\n\t}\n\n\thc := &hijackedConn{conn, bufio.NewReader(conn)}\n\n\t// Server hijacks the connection, error 'connection closed' expected\n\tresp, err := otelhttp.NewTransport(hc).RoundTrip(req)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tif resp.StatusCode != http.StatusSwitchingProtocols {\n\t\t_ = resp.Body.Close()\n\t\treturn nil, \"\", fmt.Errorf(\"unable to upgrade to %s, received %d\", proto, resp.StatusCode)\n\t}\n\n\tif hc.r.Buffered() > 0 {\n\t\t// If there is buffered content, wrap the connection.  We return an\n\t\t// object that implements CloseWrite if the underlying connection\n\t\t// implements it.\n\t\tif _, ok := hc.Conn.(types.CloseWriter); ok {\n\t\t\tconn = &hijackedConnCloseWriter{hc}\n\t\t} else {\n\t\t\tconn = hc\n\t\t}\n\t} else {\n\t\thc.r.Reset(nil)\n\t}\n\n\treturn conn, resp.Header.Get(\"Content-Type\"), nil\n}\n\n// hijackedConn wraps a net.Conn and is returned by setupHijackConn in the case\n// that a) there was already buffered data in the http layer when Hijack() was\n// called, and b) the underlying net.Conn does *not* implement CloseWrite().\n// hijackedConn does not implement CloseWrite() either.\ntype hijackedConn struct {\n\tnet.Conn\n\tr *bufio.Reader\n}\n\nfunc (c *hijackedConn) RoundTrip(req *http.Request) (*http.Response, error) {\n\tif err := req.Write(c.Conn); err != nil {\n\t\treturn nil, err\n\t}\n\treturn http.ReadResponse(c.r, req)\n}\n\nfunc (c *hijackedConn) Read(b []byte) (int, error) {\n\treturn c.r.Read(b)\n}\n\n// hijackedConnCloseWriter is a hijackedConn which additionally implements\n// CloseWrite().  It is returned by setupHijackConn in the case that a) there\n// was already buffered data in the http layer when Hijack() was called, and b)\n// the underlying net.Conn *does* implement CloseWrite().\ntype hijackedConnCloseWriter struct {\n\t*hijackedConn\n}\n\nvar _ types.CloseWriter = &hijackedConnCloseWriter{}\n\nfunc (c *hijackedConnCloseWriter) CloseWrite() error {\n\tconn := c.Conn.(types.CloseWriter)\n\treturn conn.CloseWrite()\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_build.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/container\"\n\t\"github.com/docker/docker/api/types/network\"\n)\n\n// ImageBuild sends a request to the daemon to build images.\n// The Body in the response implements an io.ReadCloser and it's up to the caller to\n// close it.\nfunc (cli *Client) ImageBuild(ctx context.Context, buildContext io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error) {\n\tquery, err := cli.imageBuildOptionsToQuery(ctx, options)\n\tif err != nil {\n\t\treturn types.ImageBuildResponse{}, err\n\t}\n\n\tbuf, err := json.Marshal(options.AuthConfigs)\n\tif err != nil {\n\t\treturn types.ImageBuildResponse{}, err\n\t}\n\n\theaders := http.Header{}\n\theaders.Add(\"X-Registry-Config\", base64.URLEncoding.EncodeToString(buf))\n\theaders.Set(\"Content-Type\", \"application/x-tar\")\n\n\tresp, err := cli.postRaw(ctx, \"/build\", query, buildContext, headers)\n\tif err != nil {\n\t\treturn types.ImageBuildResponse{}, err\n\t}\n\n\treturn types.ImageBuildResponse{\n\t\tBody:   resp.Body,\n\t\tOSType: getDockerOS(resp.Header.Get(\"Server\")),\n\t}, nil\n}\n\nfunc (cli *Client) imageBuildOptionsToQuery(ctx context.Context, options types.ImageBuildOptions) (url.Values, error) {\n\tquery := url.Values{}\n\tif len(options.Tags) > 0 {\n\t\tquery[\"t\"] = options.Tags\n\t}\n\tif len(options.SecurityOpt) > 0 {\n\t\tquery[\"securityopt\"] = options.SecurityOpt\n\t}\n\tif len(options.ExtraHosts) > 0 {\n\t\tquery[\"extrahosts\"] = options.ExtraHosts\n\t}\n\tif options.SuppressOutput {\n\t\tquery.Set(\"q\", \"1\")\n\t}\n\tif options.RemoteContext != \"\" {\n\t\tquery.Set(\"remote\", options.RemoteContext)\n\t}\n\tif options.NoCache {\n\t\tquery.Set(\"nocache\", \"1\")\n\t}\n\tif !options.Remove {\n\t\t// only send value when opting out because the daemon's default is\n\t\t// to remove intermediate containers after a successful build,\n\t\t//\n\t\t// TODO(thaJeztah): deprecate \"Remove\" option, and provide a \"NoRemove\" or \"Keep\" option instead.\n\t\tquery.Set(\"rm\", \"0\")\n\t}\n\n\tif options.ForceRemove {\n\t\tquery.Set(\"forcerm\", \"1\")\n\t}\n\n\tif options.PullParent {\n\t\tquery.Set(\"pull\", \"1\")\n\t}\n\n\tif options.Squash {\n\t\tif err := cli.NewVersionError(ctx, \"1.25\", \"squash\"); err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"squash\", \"1\")\n\t}\n\n\tif !container.Isolation.IsDefault(options.Isolation) {\n\t\tquery.Set(\"isolation\", string(options.Isolation))\n\t}\n\n\tif options.CPUSetCPUs != \"\" {\n\t\tquery.Set(\"cpusetcpus\", options.CPUSetCPUs)\n\t}\n\tif options.NetworkMode != \"\" && options.NetworkMode != network.NetworkDefault {\n\t\tquery.Set(\"networkmode\", options.NetworkMode)\n\t}\n\tif options.CPUSetMems != \"\" {\n\t\tquery.Set(\"cpusetmems\", options.CPUSetMems)\n\t}\n\tif options.CPUShares != 0 {\n\t\tquery.Set(\"cpushares\", strconv.FormatInt(options.CPUShares, 10))\n\t}\n\tif options.CPUQuota != 0 {\n\t\tquery.Set(\"cpuquota\", strconv.FormatInt(options.CPUQuota, 10))\n\t}\n\tif options.CPUPeriod != 0 {\n\t\tquery.Set(\"cpuperiod\", strconv.FormatInt(options.CPUPeriod, 10))\n\t}\n\tif options.Memory != 0 {\n\t\tquery.Set(\"memory\", strconv.FormatInt(options.Memory, 10))\n\t}\n\tif options.MemorySwap != 0 {\n\t\tquery.Set(\"memswap\", strconv.FormatInt(options.MemorySwap, 10))\n\t}\n\tif options.CgroupParent != \"\" {\n\t\tquery.Set(\"cgroupparent\", options.CgroupParent)\n\t}\n\tif options.ShmSize != 0 {\n\t\tquery.Set(\"shmsize\", strconv.FormatInt(options.ShmSize, 10))\n\t}\n\tif options.Dockerfile != \"\" {\n\t\tquery.Set(\"dockerfile\", options.Dockerfile)\n\t}\n\tif options.Target != \"\" {\n\t\tquery.Set(\"target\", options.Target)\n\t}\n\tif len(options.Ulimits) != 0 {\n\t\tulimitsJSON, err := json.Marshal(options.Ulimits)\n\t\tif err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"ulimits\", string(ulimitsJSON))\n\t}\n\tif len(options.BuildArgs) != 0 {\n\t\tbuildArgsJSON, err := json.Marshal(options.BuildArgs)\n\t\tif err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"buildargs\", string(buildArgsJSON))\n\t}\n\tif len(options.Labels) != 0 {\n\t\tlabelsJSON, err := json.Marshal(options.Labels)\n\t\tif err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"labels\", string(labelsJSON))\n\t}\n\tif len(options.CacheFrom) != 0 {\n\t\tcacheFromJSON, err := json.Marshal(options.CacheFrom)\n\t\tif err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"cachefrom\", string(cacheFromJSON))\n\t}\n\tif options.SessionID != \"\" {\n\t\tquery.Set(\"session\", options.SessionID)\n\t}\n\tif options.Platform != \"\" {\n\t\tif err := cli.NewVersionError(ctx, \"1.32\", \"platform\"); err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"platform\", strings.ToLower(options.Platform))\n\t}\n\tif options.BuildID != \"\" {\n\t\tquery.Set(\"buildid\", options.BuildID)\n\t}\n\tif options.Version != \"\" {\n\t\tquery.Set(\"version\", string(options.Version))\n\t}\n\n\tif options.Outputs != nil {\n\t\toutputsJSON, err := json.Marshal(options.Outputs)\n\t\tif err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"outputs\", string(outputsJSON))\n\t}\n\treturn query, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types/image\"\n\t\"github.com/docker/docker/api/types/registry\"\n)\n\n// ImageCreate creates a new image based on the parent options.\n// It returns the JSON content in the response body.\nfunc (cli *Client) ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error) {\n\tref, err := reference.ParseNormalizedNamed(parentReference)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"fromImage\", reference.FamiliarName(ref))\n\tquery.Set(\"tag\", getAPITagFromNamedRef(ref))\n\tif options.Platform != \"\" {\n\t\tquery.Set(\"platform\", strings.ToLower(options.Platform))\n\t}\n\tresp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n\nfunc (cli *Client) tryImageCreate(ctx context.Context, query url.Values, registryAuth string) (*http.Response, error) {\n\treturn cli.post(ctx, \"/images/create\", query, nil, http.Header{\n\t\tregistry.AuthHeader: {registryAuth},\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_history.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/image\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// ImageHistoryWithPlatform sets the platform for the image history operation.\nfunc ImageHistoryWithPlatform(platform ocispec.Platform) ImageHistoryOption {\n\treturn imageHistoryOptionFunc(func(opt *imageHistoryOpts) error {\n\t\tif opt.apiOptions.Platform != nil {\n\t\t\treturn fmt.Errorf(\"platform already set to %s\", *opt.apiOptions.Platform)\n\t\t}\n\t\topt.apiOptions.Platform = &platform\n\t\treturn nil\n\t})\n}\n\n// ImageHistory returns the changes in an image in history format.\nfunc (cli *Client) ImageHistory(ctx context.Context, imageID string, historyOpts ...ImageHistoryOption) ([]image.HistoryResponseItem, error) {\n\tquery := url.Values{}\n\n\tvar opts imageHistoryOpts\n\tfor _, o := range historyOpts {\n\t\tif err := o.Apply(&opts); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif opts.apiOptions.Platform != nil {\n\t\tif err := cli.NewVersionError(ctx, \"1.48\", \"platform\"); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tp, err := encodePlatform(opts.apiOptions.Platform)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery.Set(\"platform\", p)\n\t}\n\n\tresp, err := cli.get(ctx, \"/images/\"+imageID+\"/history\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar history []image.HistoryResponseItem\n\terr = json.NewDecoder(resp.Body).Decode(&history)\n\treturn history, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_history_opts.go",
    "content": "package client\n\nimport (\n\t\"github.com/docker/docker/api/types/image\"\n)\n\n// ImageHistoryOption is a type representing functional options for the image history operation.\ntype ImageHistoryOption interface {\n\tApply(*imageHistoryOpts) error\n}\ntype imageHistoryOptionFunc func(opt *imageHistoryOpts) error\n\nfunc (f imageHistoryOptionFunc) Apply(o *imageHistoryOpts) error {\n\treturn f(o)\n}\n\ntype imageHistoryOpts struct {\n\tapiOptions image.HistoryOptions\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_import.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types/image\"\n)\n\n// ImageImport creates a new image based on the source options.\n// It returns the JSON content in the response body.\nfunc (cli *Client) ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) {\n\tif ref != \"\" {\n\t\t// Check if the given image name can be resolved\n\t\tif _, err := reference.ParseNormalizedNamed(ref); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tquery := url.Values{}\n\tif source.SourceName != \"\" {\n\t\tquery.Set(\"fromSrc\", source.SourceName)\n\t}\n\tif ref != \"\" {\n\t\tquery.Set(\"repo\", ref)\n\t}\n\tif options.Tag != \"\" {\n\t\tquery.Set(\"tag\", options.Tag)\n\t}\n\tif options.Message != \"\" {\n\t\tquery.Set(\"message\", options.Message)\n\t}\n\tif options.Platform != \"\" {\n\t\tquery.Set(\"platform\", strings.ToLower(options.Platform))\n\t}\n\tfor _, change := range options.Changes {\n\t\tquery.Add(\"changes\", change)\n\t}\n\n\tresp, err := cli.postRaw(ctx, \"/images/create\", query, source.Source, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/image\"\n)\n\n// ImageInspect returns the image information.\nfunc (cli *Client) ImageInspect(ctx context.Context, imageID string, inspectOpts ...ImageInspectOption) (image.InspectResponse, error) {\n\tif imageID == \"\" {\n\t\treturn image.InspectResponse{}, objectNotFoundError{object: \"image\", id: imageID}\n\t}\n\n\tvar opts imageInspectOpts\n\tfor _, opt := range inspectOpts {\n\t\tif err := opt.Apply(&opts); err != nil {\n\t\t\treturn image.InspectResponse{}, fmt.Errorf(\"error applying image inspect option: %w\", err)\n\t\t}\n\t}\n\n\tquery := url.Values{}\n\tif opts.apiOptions.Manifests {\n\t\tif err := cli.NewVersionError(ctx, \"1.48\", \"manifests\"); err != nil {\n\t\t\treturn image.InspectResponse{}, err\n\t\t}\n\t\tquery.Set(\"manifests\", \"1\")\n\t}\n\n\tresp, err := cli.get(ctx, \"/images/\"+imageID+\"/json\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn image.InspectResponse{}, err\n\t}\n\n\tbuf := opts.raw\n\tif buf == nil {\n\t\tbuf = &bytes.Buffer{}\n\t}\n\n\tif _, err := io.Copy(buf, resp.Body); err != nil {\n\t\treturn image.InspectResponse{}, err\n\t}\n\n\tvar response image.InspectResponse\n\terr = json.Unmarshal(buf.Bytes(), &response)\n\treturn response, err\n}\n\n// ImageInspectWithRaw returns the image information and its raw representation.\n//\n// Deprecated: Use [Client.ImageInspect] instead. Raw response can be obtained using the [ImageInspectWithRawResponse] option.\nfunc (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (image.InspectResponse, []byte, error) {\n\tvar buf bytes.Buffer\n\tresp, err := cli.ImageInspect(ctx, imageID, ImageInspectWithRawResponse(&buf))\n\tif err != nil {\n\t\treturn image.InspectResponse{}, nil, err\n\t}\n\treturn resp, buf.Bytes(), err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_inspect_opts.go",
    "content": "package client\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/docker/docker/api/types/image\"\n)\n\n// ImageInspectOption is a type representing functional options for the image inspect operation.\ntype ImageInspectOption interface {\n\tApply(*imageInspectOpts) error\n}\ntype imageInspectOptionFunc func(opt *imageInspectOpts) error\n\nfunc (f imageInspectOptionFunc) Apply(o *imageInspectOpts) error {\n\treturn f(o)\n}\n\n// ImageInspectWithRawResponse instructs the client to additionally store the\n// raw inspect response in the provided buffer.\nfunc ImageInspectWithRawResponse(raw *bytes.Buffer) ImageInspectOption {\n\treturn imageInspectOptionFunc(func(opts *imageInspectOpts) error {\n\t\topts.raw = raw\n\t\treturn nil\n\t})\n}\n\n// ImageInspectWithManifests sets manifests API option for the image inspect operation.\n// This option is only available for API version 1.48 and up.\n// With this option set, the image inspect operation response will have the\n// [image.InspectResponse.Manifests] field populated if the server is multi-platform capable.\nfunc ImageInspectWithManifests(manifests bool) ImageInspectOption {\n\treturn imageInspectOptionFunc(func(clientOpts *imageInspectOpts) error {\n\t\tclientOpts.apiOptions.Manifests = manifests\n\t\treturn nil\n\t})\n}\n\n// ImageInspectWithAPIOpts sets the API options for the image inspect operation.\nfunc ImageInspectWithAPIOpts(opts image.InspectOptions) ImageInspectOption {\n\treturn imageInspectOptionFunc(func(clientOpts *imageInspectOpts) error {\n\t\tclientOpts.apiOptions = opts\n\t\treturn nil\n\t})\n}\n\ntype imageInspectOpts struct {\n\traw        *bytes.Buffer\n\tapiOptions image.InspectOptions\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/image\"\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// ImageList returns a list of images in the docker host.\n//\n// Experimental: Setting the [options.Manifest] will populate\n// [image.Summary.Manifests] with information about image manifests.\n// This is experimental and might change in the future without any backward\n// compatibility.\nfunc (cli *Client) ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) {\n\tvar images []image.Summary\n\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\treturn images, err\n\t}\n\n\tquery := url.Values{}\n\n\toptionFilters := options.Filters\n\treferenceFilters := optionFilters.Get(\"reference\")\n\tif versions.LessThan(cli.version, \"1.25\") && len(referenceFilters) > 0 {\n\t\tquery.Set(\"filter\", referenceFilters[0])\n\t\tfor _, filterValue := range referenceFilters {\n\t\t\toptionFilters.Del(\"reference\", filterValue)\n\t\t}\n\t}\n\tif optionFilters.Len() > 0 {\n\t\t//nolint:staticcheck // ignore SA1019 for old code\n\t\tfilterJSON, err := filters.ToParamWithVersion(cli.version, optionFilters)\n\t\tif err != nil {\n\t\t\treturn images, err\n\t\t}\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\tif options.All {\n\t\tquery.Set(\"all\", \"1\")\n\t}\n\tif options.SharedSize && versions.GreaterThanOrEqualTo(cli.version, \"1.42\") {\n\t\tquery.Set(\"shared-size\", \"1\")\n\t}\n\tif options.Manifests && versions.GreaterThanOrEqualTo(cli.version, \"1.47\") {\n\t\tquery.Set(\"manifests\", \"1\")\n\t}\n\n\tresp, err := cli.get(ctx, \"/images/json\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn images, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&images)\n\treturn images, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_load.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/image\"\n)\n\n// ImageLoad loads an image in the docker host from the client host.\n// It's up to the caller to close the io.ReadCloser in the\n// ImageLoadResponse returned by this function.\n//\n// Platform is an optional parameter that specifies the platform to load from\n// the provided multi-platform image. This is only has effect if the input image\n// is a multi-platform image.\nfunc (cli *Client) ImageLoad(ctx context.Context, input io.Reader, loadOpts ...ImageLoadOption) (image.LoadResponse, error) {\n\tvar opts imageLoadOpts\n\tfor _, opt := range loadOpts {\n\t\tif err := opt.Apply(&opts); err != nil {\n\t\t\treturn image.LoadResponse{}, err\n\t\t}\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"quiet\", \"0\")\n\tif opts.apiOptions.Quiet {\n\t\tquery.Set(\"quiet\", \"1\")\n\t}\n\tif len(opts.apiOptions.Platforms) > 0 {\n\t\tif err := cli.NewVersionError(ctx, \"1.48\", \"platform\"); err != nil {\n\t\t\treturn image.LoadResponse{}, err\n\t\t}\n\n\t\tp, err := encodePlatforms(opts.apiOptions.Platforms...)\n\t\tif err != nil {\n\t\t\treturn image.LoadResponse{}, err\n\t\t}\n\t\tquery[\"platform\"] = p\n\t}\n\n\tresp, err := cli.postRaw(ctx, \"/images/load\", query, input, http.Header{\n\t\t\"Content-Type\": {\"application/x-tar\"},\n\t})\n\tif err != nil {\n\t\treturn image.LoadResponse{}, err\n\t}\n\treturn image.LoadResponse{\n\t\tBody: resp.Body,\n\t\tJSON: resp.Header.Get(\"Content-Type\") == \"application/json\",\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_load_opts.go",
    "content": "package client\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/image\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\n// ImageLoadOption is a type representing functional options for the image load operation.\ntype ImageLoadOption interface {\n\tApply(*imageLoadOpts) error\n}\ntype imageLoadOptionFunc func(opt *imageLoadOpts) error\n\nfunc (f imageLoadOptionFunc) Apply(o *imageLoadOpts) error {\n\treturn f(o)\n}\n\ntype imageLoadOpts struct {\n\tapiOptions image.LoadOptions\n}\n\n// ImageLoadWithQuiet sets the quiet option for the image load operation.\nfunc ImageLoadWithQuiet(quiet bool) ImageLoadOption {\n\treturn imageLoadOptionFunc(func(opt *imageLoadOpts) error {\n\t\topt.apiOptions.Quiet = quiet\n\t\treturn nil\n\t})\n}\n\n// ImageLoadWithPlatforms sets the platforms to be loaded from the image.\nfunc ImageLoadWithPlatforms(platforms ...ocispec.Platform) ImageLoadOption {\n\treturn imageLoadOptionFunc(func(opt *imageLoadOpts) error {\n\t\tif opt.apiOptions.Platforms != nil {\n\t\t\treturn fmt.Errorf(\"platforms already set to %v\", opt.apiOptions.Platforms)\n\t\t}\n\t\topt.apiOptions.Platforms = platforms\n\t\treturn nil\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_prune.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/image\"\n)\n\n// ImagesPrune requests the daemon to delete unused data\nfunc (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (image.PruneReport, error) {\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"image prune\"); err != nil {\n\t\treturn image.PruneReport{}, err\n\t}\n\n\tquery, err := getFiltersQuery(pruneFilters)\n\tif err != nil {\n\t\treturn image.PruneReport{}, err\n\t}\n\n\tresp, err := cli.post(ctx, \"/images/prune\", query, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn image.PruneReport{}, err\n\t}\n\n\tvar report image.PruneReport\n\tif err := json.NewDecoder(resp.Body).Decode(&report); err != nil {\n\t\treturn image.PruneReport{}, fmt.Errorf(\"Error retrieving disk usage: %v\", err)\n\t}\n\n\treturn report, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_pull.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types/image\"\n\t\"github.com/docker/docker/errdefs\"\n)\n\n// ImagePull requests the docker host to pull an image from a remote registry.\n// It executes the privileged function if the operation is unauthorized\n// and it tries one more time.\n// It's up to the caller to handle the io.ReadCloser and close it properly.\n//\n// FIXME(vdemeester): there is currently used in a few way in docker/docker\n// - if not in trusted content, ref is used to pass the whole reference, and tag is empty\n// - if in trusted content, ref is used to pass the reference name, and tag for the digest\nfunc (cli *Client) ImagePull(ctx context.Context, refStr string, options image.PullOptions) (io.ReadCloser, error) {\n\tref, err := reference.ParseNormalizedNamed(refStr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"fromImage\", reference.FamiliarName(ref))\n\tif !options.All {\n\t\tquery.Set(\"tag\", getAPITagFromNamedRef(ref))\n\t}\n\tif options.Platform != \"\" {\n\t\tquery.Set(\"platform\", strings.ToLower(options.Platform))\n\t}\n\n\tresp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth)\n\tif errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {\n\t\tnewAuthHeader, privilegeErr := options.PrivilegeFunc(ctx)\n\t\tif privilegeErr != nil {\n\t\t\treturn nil, privilegeErr\n\t\t}\n\t\tresp, err = cli.tryImageCreate(ctx, query, newAuthHeader)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n\n// getAPITagFromNamedRef returns a tag from the specified reference.\n// This function is necessary as long as the docker \"server\" api expects\n// digests to be sent as tags and makes a distinction between the name\n// and tag/digest part of a reference.\nfunc getAPITagFromNamedRef(ref reference.Named) string {\n\tif digested, ok := ref.(reference.Digested); ok {\n\t\treturn digested.Digest().String()\n\t}\n\tref = reference.TagNameOnly(ref)\n\tif tagged, ok := ref.(reference.Tagged); ok {\n\t\treturn tagged.Tag()\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_push.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types/image\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/errdefs\"\n)\n\n// ImagePush requests the docker host to push an image to a remote registry.\n// It executes the privileged function if the operation is unauthorized\n// and it tries one more time.\n// It's up to the caller to handle the io.ReadCloser and close it properly.\nfunc (cli *Client) ImagePush(ctx context.Context, image string, options image.PushOptions) (io.ReadCloser, error) {\n\tref, err := reference.ParseNormalizedNamed(image)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif _, isCanonical := ref.(reference.Canonical); isCanonical {\n\t\treturn nil, errors.New(\"cannot push a digest reference\")\n\t}\n\n\tname := reference.FamiliarName(ref)\n\tquery := url.Values{}\n\tif !options.All {\n\t\tref = reference.TagNameOnly(ref)\n\t\tif tagged, ok := ref.(reference.Tagged); ok {\n\t\t\tquery.Set(\"tag\", tagged.Tag())\n\t\t}\n\t}\n\n\tif options.Platform != nil {\n\t\tif err := cli.NewVersionError(ctx, \"1.46\", \"platform\"); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tp := *options.Platform\n\t\tpJson, err := json.Marshal(p)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid platform: %v\", err)\n\t\t}\n\n\t\tquery.Set(\"platform\", string(pJson))\n\t}\n\n\tresp, err := cli.tryImagePush(ctx, name, query, options.RegistryAuth)\n\tif errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {\n\t\tnewAuthHeader, privilegeErr := options.PrivilegeFunc(ctx)\n\t\tif privilegeErr != nil {\n\t\t\treturn nil, privilegeErr\n\t\t}\n\t\tresp, err = cli.tryImagePush(ctx, name, query, newAuthHeader)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n\nfunc (cli *Client) tryImagePush(ctx context.Context, imageID string, query url.Values, registryAuth string) (*http.Response, error) {\n\treturn cli.post(ctx, \"/images/\"+imageID+\"/push\", query, nil, http.Header{\n\t\tregistry.AuthHeader: {registryAuth},\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/image\"\n)\n\n// ImageRemove removes an image from the docker host.\nfunc (cli *Client) ImageRemove(ctx context.Context, imageID string, options image.RemoveOptions) ([]image.DeleteResponse, error) {\n\tquery := url.Values{}\n\n\tif options.Force {\n\t\tquery.Set(\"force\", \"1\")\n\t}\n\tif !options.PruneChildren {\n\t\tquery.Set(\"noprune\", \"1\")\n\t}\n\n\tresp, err := cli.delete(ctx, \"/images/\"+imageID, query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar dels []image.DeleteResponse\n\terr = json.NewDecoder(resp.Body).Decode(&dels)\n\treturn dels, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_save.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/url\"\n)\n\n// ImageSave retrieves one or more images from the docker host as an io.ReadCloser.\n//\n// Platforms is an optional parameter that specifies the platforms to save from the image.\n// This is only has effect if the input image is a multi-platform image.\nfunc (cli *Client) ImageSave(ctx context.Context, imageIDs []string, saveOpts ...ImageSaveOption) (io.ReadCloser, error) {\n\tvar opts imageSaveOpts\n\tfor _, opt := range saveOpts {\n\t\tif err := opt.Apply(&opts); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tquery := url.Values{\n\t\t\"names\": imageIDs,\n\t}\n\n\tif len(opts.apiOptions.Platforms) > 0 {\n\t\tif err := cli.NewVersionError(ctx, \"1.48\", \"platform\"); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tp, err := encodePlatforms(opts.apiOptions.Platforms...)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery[\"platform\"] = p\n\t}\n\n\tresp, err := cli.get(ctx, \"/images/get\", query, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_save_opts.go",
    "content": "package client\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/image\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\ntype ImageSaveOption interface {\n\tApply(*imageSaveOpts) error\n}\n\ntype imageSaveOptionFunc func(opt *imageSaveOpts) error\n\nfunc (f imageSaveOptionFunc) Apply(o *imageSaveOpts) error {\n\treturn f(o)\n}\n\n// ImageSaveWithPlatforms sets the platforms to be saved from the image.\nfunc ImageSaveWithPlatforms(platforms ...ocispec.Platform) ImageSaveOption {\n\treturn imageSaveOptionFunc(func(opt *imageSaveOpts) error {\n\t\tif opt.apiOptions.Platforms != nil {\n\t\t\treturn fmt.Errorf(\"platforms already set to %v\", opt.apiOptions.Platforms)\n\t\t}\n\t\topt.apiOptions.Platforms = platforms\n\t\treturn nil\n\t})\n}\n\ntype imageSaveOpts struct {\n\tapiOptions image.SaveOptions\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_search.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/errdefs\"\n)\n\n// ImageSearch makes the docker host search by a term in a remote registry.\n// The list of results is not sorted in any fashion.\nfunc (cli *Client) ImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error) {\n\tvar results []registry.SearchResult\n\tquery := url.Values{}\n\tquery.Set(\"term\", term)\n\tif options.Limit > 0 {\n\t\tquery.Set(\"limit\", strconv.Itoa(options.Limit))\n\t}\n\n\tif options.Filters.Len() > 0 {\n\t\tfilterJSON, err := filters.ToJSON(options.Filters)\n\t\tif err != nil {\n\t\t\treturn results, err\n\t\t}\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\tresp, err := cli.tryImageSearch(ctx, query, options.RegistryAuth)\n\tdefer ensureReaderClosed(resp)\n\tif errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {\n\t\tnewAuthHeader, privilegeErr := options.PrivilegeFunc(ctx)\n\t\tif privilegeErr != nil {\n\t\t\treturn results, privilegeErr\n\t\t}\n\t\tresp, err = cli.tryImageSearch(ctx, query, newAuthHeader)\n\t}\n\tif err != nil {\n\t\treturn results, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&results)\n\treturn results, err\n}\n\nfunc (cli *Client) tryImageSearch(ctx context.Context, query url.Values, registryAuth string) (*http.Response, error) {\n\treturn cli.get(ctx, \"/images/search\", query, http.Header{\n\t\tregistry.AuthHeader: {registryAuth},\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/image_tag.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/pkg/errors\"\n)\n\n// ImageTag tags an image in the docker host\nfunc (cli *Client) ImageTag(ctx context.Context, source, target string) error {\n\tif _, err := reference.ParseAnyReference(source); err != nil {\n\t\treturn errors.Wrapf(err, \"Error parsing reference: %q is not a valid repository/tag\", source)\n\t}\n\n\tref, err := reference.ParseNormalizedNamed(target)\n\tif err != nil {\n\t\treturn errors.Wrapf(err, \"Error parsing reference: %q is not a valid repository/tag\", target)\n\t}\n\n\tif _, isCanonical := ref.(reference.Canonical); isCanonical {\n\t\treturn errors.New(\"refusing to create a tag with a digest reference\")\n\t}\n\n\tref = reference.TagNameOnly(ref)\n\n\tquery := url.Values{}\n\tquery.Set(\"repo\", reference.FamiliarName(ref))\n\tif tagged, ok := ref.(reference.Tagged); ok {\n\t\tquery.Set(\"tag\", tagged.Tag())\n\t}\n\n\tresp, err := cli.post(ctx, \"/images/\"+source+\"/tag\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/info.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/system\"\n)\n\n// Info returns information about the docker server.\nfunc (cli *Client) Info(ctx context.Context) (system.Info, error) {\n\tvar info system.Info\n\tresp, err := cli.get(ctx, \"/info\", url.Values{}, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn info, err\n\t}\n\n\tif err := json.NewDecoder(resp.Body).Decode(&info); err != nil {\n\t\treturn info, fmt.Errorf(\"Error reading remote info: %v\", err)\n\t}\n\n\treturn info, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/login.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/registry\"\n)\n\n// RegistryLogin authenticates the docker server with a given docker registry.\n// It returns unauthorizedError when the authentication fails.\nfunc (cli *Client) RegistryLogin(ctx context.Context, auth registry.AuthConfig) (registry.AuthenticateOKBody, error) {\n\tresp, err := cli.post(ctx, \"/auth\", url.Values{}, auth, nil)\n\tdefer ensureReaderClosed(resp)\n\n\tif err != nil {\n\t\treturn registry.AuthenticateOKBody{}, err\n\t}\n\n\tvar response registry.AuthenticateOKBody\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/network_connect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/network\"\n)\n\n// NetworkConnect connects a container to an existent network in the docker host.\nfunc (cli *Client) NetworkConnect(ctx context.Context, networkID, containerID string, config *network.EndpointSettings) error {\n\tnetworkID, err := trimID(\"network\", networkID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcontainerID, err = trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tnc := network.ConnectOptions{\n\t\tContainer:      containerID,\n\t\tEndpointConfig: config,\n\t}\n\tresp, err := cli.post(ctx, \"/networks/\"+networkID+\"/connect\", nil, nc, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/network_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types/network\"\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// NetworkCreate creates a new network in the docker host.\nfunc (cli *Client) NetworkCreate(ctx context.Context, name string, options network.CreateOptions) (network.CreateResponse, error) {\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\treturn network.CreateResponse{}, err\n\t}\n\n\tnetworkCreateRequest := network.CreateRequest{\n\t\tCreateOptions: options,\n\t\tName:          name,\n\t}\n\tif versions.LessThan(cli.version, \"1.44\") {\n\t\tenabled := true\n\t\tnetworkCreateRequest.CheckDuplicate = &enabled //nolint:staticcheck // ignore SA1019: CheckDuplicate is deprecated since API v1.44.\n\t}\n\n\tresp, err := cli.post(ctx, \"/networks/create\", nil, networkCreateRequest, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn network.CreateResponse{}, err\n\t}\n\n\tvar response network.CreateResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/network_disconnect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/network\"\n)\n\n// NetworkDisconnect disconnects a container from an existent network in the docker host.\nfunc (cli *Client) NetworkDisconnect(ctx context.Context, networkID, containerID string, force bool) error {\n\tnetworkID, err := trimID(\"network\", networkID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcontainerID, err = trimID(\"container\", containerID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tnd := network.DisconnectOptions{\n\t\tContainer: containerID,\n\t\tForce:     force,\n\t}\n\tresp, err := cli.post(ctx, \"/networks/\"+networkID+\"/disconnect\", nil, nd, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/network_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/network\"\n)\n\n// NetworkInspect returns the information for a specific network configured in the docker host.\nfunc (cli *Client) NetworkInspect(ctx context.Context, networkID string, options network.InspectOptions) (network.Inspect, error) {\n\tnetworkResource, _, err := cli.NetworkInspectWithRaw(ctx, networkID, options)\n\treturn networkResource, err\n}\n\n// NetworkInspectWithRaw returns the information for a specific network configured in the docker host and its raw representation.\nfunc (cli *Client) NetworkInspectWithRaw(ctx context.Context, networkID string, options network.InspectOptions) (network.Inspect, []byte, error) {\n\tnetworkID, err := trimID(\"network\", networkID)\n\tif err != nil {\n\t\treturn network.Inspect{}, nil, err\n\t}\n\tquery := url.Values{}\n\tif options.Verbose {\n\t\tquery.Set(\"verbose\", \"true\")\n\t}\n\tif options.Scope != \"\" {\n\t\tquery.Set(\"scope\", options.Scope)\n\t}\n\n\tresp, err := cli.get(ctx, \"/networks/\"+networkID, query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn network.Inspect{}, nil, err\n\t}\n\n\traw, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn network.Inspect{}, nil, err\n\t}\n\n\tvar nw network.Inspect\n\terr = json.NewDecoder(bytes.NewReader(raw)).Decode(&nw)\n\treturn nw, raw, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/network_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/network\"\n)\n\n// NetworkList returns the list of networks configured in the docker host.\nfunc (cli *Client) NetworkList(ctx context.Context, options network.ListOptions) ([]network.Summary, error) {\n\tquery := url.Values{}\n\tif options.Filters.Len() > 0 {\n\t\t//nolint:staticcheck // ignore SA1019 for old code\n\t\tfilterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\tvar networkResources []network.Summary\n\tresp, err := cli.get(ctx, \"/networks\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn networkResources, err\n\t}\n\terr = json.NewDecoder(resp.Body).Decode(&networkResources)\n\treturn networkResources, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/network_prune.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/network\"\n)\n\n// NetworksPrune requests the daemon to delete unused networks\nfunc (cli *Client) NetworksPrune(ctx context.Context, pruneFilters filters.Args) (network.PruneReport, error) {\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"network prune\"); err != nil {\n\t\treturn network.PruneReport{}, err\n\t}\n\n\tquery, err := getFiltersQuery(pruneFilters)\n\tif err != nil {\n\t\treturn network.PruneReport{}, err\n\t}\n\n\tresp, err := cli.post(ctx, \"/networks/prune\", query, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn network.PruneReport{}, err\n\t}\n\n\tvar report network.PruneReport\n\tif err := json.NewDecoder(resp.Body).Decode(&report); err != nil {\n\t\treturn network.PruneReport{}, fmt.Errorf(\"Error retrieving network prune report: %v\", err)\n\t}\n\n\treturn report, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/network_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport \"context\"\n\n// NetworkRemove removes an existent network from the docker host.\nfunc (cli *Client) NetworkRemove(ctx context.Context, networkID string) error {\n\tnetworkID, err := trimID(\"network\", networkID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tresp, err := cli.delete(ctx, \"/networks/\"+networkID, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/node_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// NodeInspectWithRaw returns the node information.\nfunc (cli *Client) NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) {\n\tnodeID, err := trimID(\"node\", nodeID)\n\tif err != nil {\n\t\treturn swarm.Node{}, nil, err\n\t}\n\tresp, err := cli.get(ctx, \"/nodes/\"+nodeID, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn swarm.Node{}, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn swarm.Node{}, nil, err\n\t}\n\n\tvar response swarm.Node\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&response)\n\treturn response, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/node_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// NodeList returns the list of nodes.\nfunc (cli *Client) NodeList(ctx context.Context, options types.NodeListOptions) ([]swarm.Node, error) {\n\tquery := url.Values{}\n\n\tif options.Filters.Len() > 0 {\n\t\tfilterJSON, err := filters.ToJSON(options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\tresp, err := cli.get(ctx, \"/nodes\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar nodes []swarm.Node\n\terr = json.NewDecoder(resp.Body).Decode(&nodes)\n\treturn nodes, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/node_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// NodeRemove removes a Node.\nfunc (cli *Client) NodeRemove(ctx context.Context, nodeID string, options types.NodeRemoveOptions) error {\n\tnodeID, err := trimID(\"node\", nodeID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif options.Force {\n\t\tquery.Set(\"force\", \"1\")\n\t}\n\n\tresp, err := cli.delete(ctx, \"/nodes/\"+nodeID, query, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/node_update.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// NodeUpdate updates a Node.\nfunc (cli *Client) NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error {\n\tnodeID, err := trimID(\"node\", nodeID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"version\", version.String())\n\tresp, err := cli.post(ctx, \"/nodes/\"+nodeID+\"/update\", query, node, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/options.go",
    "content": "package client\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/docker/go-connections/sockets\"\n\t\"github.com/docker/go-connections/tlsconfig\"\n\t\"github.com/pkg/errors\"\n\t\"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\n// Opt is a configuration option to initialize a [Client].\ntype Opt func(*Client) error\n\n// FromEnv configures the client with values from environment variables. It\n// is the equivalent of using the [WithTLSClientConfigFromEnv], [WithHostFromEnv],\n// and [WithVersionFromEnv] options.\n//\n// FromEnv uses the following environment variables:\n//\n//   - DOCKER_HOST ([EnvOverrideHost]) to set the URL to the docker server.\n//   - DOCKER_API_VERSION ([EnvOverrideAPIVersion]) to set the version of the\n//     API to use, leave empty for latest.\n//   - DOCKER_CERT_PATH ([EnvOverrideCertPath]) to specify the directory from\n//     which to load the TLS certificates (\"ca.pem\", \"cert.pem\", \"key.pem').\n//   - DOCKER_TLS_VERIFY ([EnvTLSVerify]) to enable or disable TLS verification\n//     (off by default).\nfunc FromEnv(c *Client) error {\n\tops := []Opt{\n\t\tWithTLSClientConfigFromEnv(),\n\t\tWithHostFromEnv(),\n\t\tWithVersionFromEnv(),\n\t}\n\tfor _, op := range ops {\n\t\tif err := op(c); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// WithDialContext applies the dialer to the client transport. This can be\n// used to set the Timeout and KeepAlive settings of the client. It returns\n// an error if the client does not have a [http.Transport] configured.\nfunc WithDialContext(dialContext func(ctx context.Context, network, addr string) (net.Conn, error)) Opt {\n\treturn func(c *Client) error {\n\t\tif transport, ok := c.client.Transport.(*http.Transport); ok {\n\t\t\ttransport.DialContext = dialContext\n\t\t\treturn nil\n\t\t}\n\t\treturn errors.Errorf(\"cannot apply dialer to transport: %T\", c.client.Transport)\n\t}\n}\n\n// WithHost overrides the client host with the specified one.\nfunc WithHost(host string) Opt {\n\treturn func(c *Client) error {\n\t\thostURL, err := ParseHostURL(host)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tc.host = host\n\t\tc.proto = hostURL.Scheme\n\t\tc.addr = hostURL.Host\n\t\tc.basePath = hostURL.Path\n\t\tif transport, ok := c.client.Transport.(*http.Transport); ok {\n\t\t\treturn sockets.ConfigureTransport(transport, c.proto, c.addr)\n\t\t}\n\t\treturn errors.Errorf(\"cannot apply host to transport: %T\", c.client.Transport)\n\t}\n}\n\n// WithHostFromEnv overrides the client host with the host specified in the\n// DOCKER_HOST ([EnvOverrideHost]) environment variable. If DOCKER_HOST is not set,\n// or set to an empty value, the host is not modified.\nfunc WithHostFromEnv() Opt {\n\treturn func(c *Client) error {\n\t\tif host := os.Getenv(EnvOverrideHost); host != \"\" {\n\t\t\treturn WithHost(host)(c)\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithHTTPClient overrides the client's HTTP client with the specified one.\nfunc WithHTTPClient(client *http.Client) Opt {\n\treturn func(c *Client) error {\n\t\tif client != nil {\n\t\t\tc.client = client\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithTimeout configures the time limit for requests made by the HTTP client.\nfunc WithTimeout(timeout time.Duration) Opt {\n\treturn func(c *Client) error {\n\t\tc.client.Timeout = timeout\n\t\treturn nil\n\t}\n}\n\n// WithUserAgent configures the User-Agent header to use for HTTP requests.\n// It overrides any User-Agent set in headers. When set to an empty string,\n// the User-Agent header is removed, and no header is sent.\nfunc WithUserAgent(ua string) Opt {\n\treturn func(c *Client) error {\n\t\tc.userAgent = &ua\n\t\treturn nil\n\t}\n}\n\n// WithHTTPHeaders appends custom HTTP headers to the client's default headers.\n// It does not allow for built-in headers (such as \"User-Agent\", if set) to\n// be overridden. Also see [WithUserAgent].\nfunc WithHTTPHeaders(headers map[string]string) Opt {\n\treturn func(c *Client) error {\n\t\tc.customHTTPHeaders = headers\n\t\treturn nil\n\t}\n}\n\n// WithScheme overrides the client scheme with the specified one.\nfunc WithScheme(scheme string) Opt {\n\treturn func(c *Client) error {\n\t\tc.scheme = scheme\n\t\treturn nil\n\t}\n}\n\n// WithTLSClientConfig applies a TLS config to the client transport.\nfunc WithTLSClientConfig(cacertPath, certPath, keyPath string) Opt {\n\treturn func(c *Client) error {\n\t\ttransport, ok := c.client.Transport.(*http.Transport)\n\t\tif !ok {\n\t\t\treturn errors.Errorf(\"cannot apply tls config to transport: %T\", c.client.Transport)\n\t\t}\n\t\tconfig, err := tlsconfig.Client(tlsconfig.Options{\n\t\t\tCAFile:             cacertPath,\n\t\t\tCertFile:           certPath,\n\t\t\tKeyFile:            keyPath,\n\t\t\tExclusiveRootPools: true,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn errors.Wrap(err, \"failed to create tls config\")\n\t\t}\n\t\ttransport.TLSClientConfig = config\n\t\treturn nil\n\t}\n}\n\n// WithTLSClientConfigFromEnv configures the client's TLS settings with the\n// settings in the DOCKER_CERT_PATH ([EnvOverrideCertPath]) and DOCKER_TLS_VERIFY\n// ([EnvTLSVerify]) environment variables. If DOCKER_CERT_PATH is not set or empty,\n// TLS configuration is not modified.\n//\n// WithTLSClientConfigFromEnv uses the following environment variables:\n//\n//   - DOCKER_CERT_PATH ([EnvOverrideCertPath]) to specify the directory from\n//     which to load the TLS certificates (\"ca.pem\", \"cert.pem\", \"key.pem\").\n//   - DOCKER_TLS_VERIFY ([EnvTLSVerify]) to enable or disable TLS verification\n//     (off by default).\nfunc WithTLSClientConfigFromEnv() Opt {\n\treturn func(c *Client) error {\n\t\tdockerCertPath := os.Getenv(EnvOverrideCertPath)\n\t\tif dockerCertPath == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\ttlsc, err := tlsconfig.Client(tlsconfig.Options{\n\t\t\tCAFile:             filepath.Join(dockerCertPath, \"ca.pem\"),\n\t\t\tCertFile:           filepath.Join(dockerCertPath, \"cert.pem\"),\n\t\t\tKeyFile:            filepath.Join(dockerCertPath, \"key.pem\"),\n\t\t\tInsecureSkipVerify: os.Getenv(EnvTLSVerify) == \"\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tc.client = &http.Client{\n\t\t\tTransport:     &http.Transport{TLSClientConfig: tlsc},\n\t\t\tCheckRedirect: CheckRedirect,\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithVersion overrides the client version with the specified one. If an empty\n// version is provided, the value is ignored to allow version negotiation\n// (see [WithAPIVersionNegotiation]).\nfunc WithVersion(version string) Opt {\n\treturn func(c *Client) error {\n\t\tif v := strings.TrimPrefix(version, \"v\"); v != \"\" {\n\t\t\tc.version = v\n\t\t\tc.manualOverride = true\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithVersionFromEnv overrides the client version with the version specified in\n// the DOCKER_API_VERSION ([EnvOverrideAPIVersion]) environment variable.\n// If DOCKER_API_VERSION is not set, or set to an empty value, the version\n// is not modified.\nfunc WithVersionFromEnv() Opt {\n\treturn func(c *Client) error {\n\t\treturn WithVersion(os.Getenv(EnvOverrideAPIVersion))(c)\n\t}\n}\n\n// WithAPIVersionNegotiation enables automatic API version negotiation for the client.\n// With this option enabled, the client automatically negotiates the API version\n// to use when making requests. API version negotiation is performed on the first\n// request; subsequent requests do not re-negotiate.\nfunc WithAPIVersionNegotiation() Opt {\n\treturn func(c *Client) error {\n\t\tc.negotiateVersion = true\n\t\treturn nil\n\t}\n}\n\n// WithTraceProvider sets the trace provider for the client.\n// If this is not set then the global trace provider will be used.\nfunc WithTraceProvider(provider trace.TracerProvider) Opt {\n\treturn WithTraceOptions(otelhttp.WithTracerProvider(provider))\n}\n\n// WithTraceOptions sets tracing span options for the client.\nfunc WithTraceOptions(opts ...otelhttp.Option) Opt {\n\treturn func(c *Client) error {\n\t\tc.traceOpts = append(c.traceOpts, opts...)\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/ping.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// Ping pings the server and returns the value of the \"Docker-Experimental\",\n// \"Builder-Version\", \"OS-Type\" & \"API-Version\" headers. It attempts to use\n// a HEAD request on the endpoint, but falls back to GET if HEAD is not supported\n// by the daemon. It ignores internal server errors returned by the API, which\n// may be returned if the daemon is in an unhealthy state, but returns errors\n// for other non-success status codes, failing to connect to the API, or failing\n// to parse the API response.\nfunc (cli *Client) Ping(ctx context.Context) (types.Ping, error) {\n\tvar ping types.Ping\n\n\t// Using cli.buildRequest() + cli.doRequest() instead of cli.sendRequest()\n\t// because ping requests are used during API version negotiation, so we want\n\t// to hit the non-versioned /_ping endpoint, not /v1.xx/_ping\n\treq, err := cli.buildRequest(ctx, http.MethodHead, path.Join(cli.basePath, \"/_ping\"), nil, nil)\n\tif err != nil {\n\t\treturn ping, err\n\t}\n\tresp, err := cli.doRequest(req)\n\tif err != nil {\n\t\tif IsErrConnectionFailed(err) {\n\t\t\treturn ping, err\n\t\t}\n\t\t// We managed to connect, but got some error; continue and try GET request.\n\t} else {\n\t\tdefer ensureReaderClosed(resp)\n\t\tswitch resp.StatusCode {\n\t\tcase http.StatusOK, http.StatusInternalServerError:\n\t\t\t// Server handled the request, so parse the response\n\t\t\treturn parsePingResponse(cli, resp)\n\t\t}\n\t}\n\n\t// HEAD failed; fallback to GET.\n\treq.Method = http.MethodGet\n\tresp, err = cli.doRequest(req)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn ping, err\n\t}\n\treturn parsePingResponse(cli, resp)\n}\n\nfunc parsePingResponse(cli *Client, resp *http.Response) (types.Ping, error) {\n\tif resp == nil {\n\t\treturn types.Ping{}, nil\n\t}\n\n\tvar ping types.Ping\n\tif resp.Header == nil {\n\t\treturn ping, cli.checkResponseErr(resp)\n\t}\n\tping.APIVersion = resp.Header.Get(\"Api-Version\")\n\tping.OSType = resp.Header.Get(\"Ostype\")\n\tif resp.Header.Get(\"Docker-Experimental\") == \"true\" {\n\t\tping.Experimental = true\n\t}\n\tif bv := resp.Header.Get(\"Builder-Version\"); bv != \"\" {\n\t\tping.BuilderVersion = types.BuilderVersion(bv)\n\t}\n\tif si := resp.Header.Get(\"Swarm\"); si != \"\" {\n\t\tstate, role, _ := strings.Cut(si, \"/\")\n\t\tping.SwarmStatus = &swarm.Status{\n\t\t\tNodeState:        swarm.LocalNodeState(state),\n\t\t\tControlAvailable: role == \"manager\",\n\t\t}\n\t}\n\treturn ping, cli.checkResponseErr(resp)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// PluginCreate creates a plugin\nfunc (cli *Client) PluginCreate(ctx context.Context, createContext io.Reader, createOptions types.PluginCreateOptions) error {\n\theaders := http.Header(make(map[string][]string))\n\theaders.Set(\"Content-Type\", \"application/x-tar\")\n\n\tquery := url.Values{}\n\tquery.Set(\"name\", createOptions.RepoName)\n\n\tresp, err := cli.postRaw(ctx, \"/plugins/create\", query, createContext, headers)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_disable.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// PluginDisable disables a plugin\nfunc (cli *Client) PluginDisable(ctx context.Context, name string, options types.PluginDisableOptions) error {\n\tname, err := trimID(\"plugin\", name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tquery := url.Values{}\n\tif options.Force {\n\t\tquery.Set(\"force\", \"1\")\n\t}\n\tresp, err := cli.post(ctx, \"/plugins/\"+name+\"/disable\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_enable.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// PluginEnable enables a plugin\nfunc (cli *Client) PluginEnable(ctx context.Context, name string, options types.PluginEnableOptions) error {\n\tname, err := trimID(\"plugin\", name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tquery := url.Values{}\n\tquery.Set(\"timeout\", strconv.Itoa(options.Timeout))\n\n\tresp, err := cli.post(ctx, \"/plugins/\"+name+\"/enable\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// PluginInspectWithRaw inspects an existing plugin\nfunc (cli *Client) PluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error) {\n\tname, err := trimID(\"plugin\", name)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tresp, err := cli.get(ctx, \"/plugins/\"+name+\"/json\", nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tvar p types.Plugin\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&p)\n\treturn &p, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_install.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/errdefs\"\n\t\"github.com/pkg/errors\"\n)\n\n// PluginInstall installs a plugin\nfunc (cli *Client) PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) (rc io.ReadCloser, err error) {\n\tquery := url.Values{}\n\tif _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil {\n\t\treturn nil, errors.Wrap(err, \"invalid remote reference\")\n\t}\n\tquery.Set(\"remote\", options.RemoteRef)\n\n\tprivileges, err := cli.checkPluginPermissions(ctx, query, options)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// set name for plugin pull, if empty should default to remote reference\n\tquery.Set(\"name\", name)\n\n\tresp, err := cli.tryPluginPull(ctx, query, privileges, options.RegistryAuth)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tname = resp.Header.Get(\"Docker-Plugin-Name\")\n\n\tpr, pw := io.Pipe()\n\tgo func() { // todo: the client should probably be designed more around the actual api\n\t\t_, err := io.Copy(pw, resp.Body)\n\t\tif err != nil {\n\t\t\t_ = pw.CloseWithError(err)\n\t\t\treturn\n\t\t}\n\t\tdefer func() {\n\t\t\tif err != nil {\n\t\t\t\tdelResp, _ := cli.delete(ctx, \"/plugins/\"+name, nil, nil)\n\t\t\t\tensureReaderClosed(delResp)\n\t\t\t}\n\t\t}()\n\t\tif len(options.Args) > 0 {\n\t\t\tif err := cli.PluginSet(ctx, name, options.Args); err != nil {\n\t\t\t\t_ = pw.CloseWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tif options.Disabled {\n\t\t\t_ = pw.Close()\n\t\t\treturn\n\t\t}\n\n\t\tenableErr := cli.PluginEnable(ctx, name, types.PluginEnableOptions{Timeout: 0})\n\t\t_ = pw.CloseWithError(enableErr)\n\t}()\n\treturn pr, nil\n}\n\nfunc (cli *Client) tryPluginPrivileges(ctx context.Context, query url.Values, registryAuth string) (*http.Response, error) {\n\treturn cli.get(ctx, \"/plugins/privileges\", query, http.Header{\n\t\tregistry.AuthHeader: {registryAuth},\n\t})\n}\n\nfunc (cli *Client) tryPluginPull(ctx context.Context, query url.Values, privileges types.PluginPrivileges, registryAuth string) (*http.Response, error) {\n\treturn cli.post(ctx, \"/plugins/pull\", query, privileges, http.Header{\n\t\tregistry.AuthHeader: {registryAuth},\n\t})\n}\n\nfunc (cli *Client) checkPluginPermissions(ctx context.Context, query url.Values, options types.PluginInstallOptions) (types.PluginPrivileges, error) {\n\tresp, err := cli.tryPluginPrivileges(ctx, query, options.RegistryAuth)\n\tif errdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil {\n\t\t// todo: do inspect before to check existing name before checking privileges\n\t\tnewAuthHeader, privilegeErr := options.PrivilegeFunc(ctx)\n\t\tif privilegeErr != nil {\n\t\t\tensureReaderClosed(resp)\n\t\t\treturn nil, privilegeErr\n\t\t}\n\t\toptions.RegistryAuth = newAuthHeader\n\t\tresp, err = cli.tryPluginPrivileges(ctx, query, options.RegistryAuth)\n\t}\n\tif err != nil {\n\t\tensureReaderClosed(resp)\n\t\treturn nil, err\n\t}\n\n\tvar privileges types.PluginPrivileges\n\tif err := json.NewDecoder(resp.Body).Decode(&privileges); err != nil {\n\t\tensureReaderClosed(resp)\n\t\treturn nil, err\n\t}\n\tensureReaderClosed(resp)\n\n\tif !options.AcceptAllPermissions && options.AcceptPermissionsFunc != nil && len(privileges) > 0 {\n\t\taccept, err := options.AcceptPermissionsFunc(ctx, privileges)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !accept {\n\t\t\treturn nil, errors.Errorf(\"permission denied while installing plugin %s\", options.RemoteRef)\n\t\t}\n\t}\n\treturn privileges, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/filters\"\n)\n\n// PluginList returns the installed plugins\nfunc (cli *Client) PluginList(ctx context.Context, filter filters.Args) (types.PluginsListResponse, error) {\n\tvar plugins types.PluginsListResponse\n\tquery := url.Values{}\n\n\tif filter.Len() > 0 {\n\t\t//nolint:staticcheck // ignore SA1019 for old code\n\t\tfilterJSON, err := filters.ToParamWithVersion(cli.version, filter)\n\t\tif err != nil {\n\t\t\treturn plugins, err\n\t\t}\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\tresp, err := cli.get(ctx, \"/plugins\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn plugins, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&plugins)\n\treturn plugins, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_push.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\n\t\"github.com/docker/docker/api/types/registry\"\n)\n\n// PluginPush pushes a plugin to a registry\nfunc (cli *Client) PluginPush(ctx context.Context, name string, registryAuth string) (io.ReadCloser, error) {\n\tname, err := trimID(\"plugin\", name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp, err := cli.post(ctx, \"/plugins/\"+name+\"/push\", nil, nil, http.Header{\n\t\tregistry.AuthHeader: {registryAuth},\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// PluginRemove removes a plugin\nfunc (cli *Client) PluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error {\n\tname, err := trimID(\"plugin\", name)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif options.Force {\n\t\tquery.Set(\"force\", \"1\")\n\t}\n\n\tresp, err := cli.delete(ctx, \"/plugins/\"+name, query, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_set.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n)\n\n// PluginSet modifies settings for an existing plugin\nfunc (cli *Client) PluginSet(ctx context.Context, name string, args []string) error {\n\tname, err := trimID(\"plugin\", name)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tresp, err := cli.post(ctx, \"/plugins/\"+name+\"/set\", nil, args, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/plugin_upgrade.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/pkg/errors\"\n)\n\n// PluginUpgrade upgrades a plugin\nfunc (cli *Client) PluginUpgrade(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error) {\n\tname, err := trimID(\"plugin\", name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := cli.NewVersionError(ctx, \"1.26\", \"plugin upgrade\"); err != nil {\n\t\treturn nil, err\n\t}\n\tquery := url.Values{}\n\tif _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil {\n\t\treturn nil, errors.Wrap(err, \"invalid remote reference\")\n\t}\n\tquery.Set(\"remote\", options.RemoteRef)\n\n\tprivileges, err := cli.checkPluginPermissions(ctx, query, options)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresp, err := cli.tryPluginUpgrade(ctx, query, privileges, name, options.RegistryAuth)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n\nfunc (cli *Client) tryPluginUpgrade(ctx context.Context, query url.Values, privileges types.PluginPrivileges, name, registryAuth string) (*http.Response, error) {\n\treturn cli.post(ctx, \"/plugins/\"+name+\"/upgrade\", query, privileges, http.Header{\n\t\tregistry.AuthHeader: {registryAuth},\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/request.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/versions\"\n\t\"github.com/docker/docker/errdefs\"\n\t\"github.com/pkg/errors\"\n)\n\n// head sends an http request to the docker API using the method HEAD.\nfunc (cli *Client) head(ctx context.Context, path string, query url.Values, headers http.Header) (*http.Response, error) {\n\treturn cli.sendRequest(ctx, http.MethodHead, path, query, nil, headers)\n}\n\n// get sends an http request to the docker API using the method GET with a specific Go context.\nfunc (cli *Client) get(ctx context.Context, path string, query url.Values, headers http.Header) (*http.Response, error) {\n\treturn cli.sendRequest(ctx, http.MethodGet, path, query, nil, headers)\n}\n\n// post sends an http request to the docker API using the method POST with a specific Go context.\nfunc (cli *Client) post(ctx context.Context, path string, query url.Values, obj interface{}, headers http.Header) (*http.Response, error) {\n\tbody, headers, err := encodeBody(obj, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn cli.sendRequest(ctx, http.MethodPost, path, query, body, headers)\n}\n\nfunc (cli *Client) postRaw(ctx context.Context, path string, query url.Values, body io.Reader, headers http.Header) (*http.Response, error) {\n\treturn cli.sendRequest(ctx, http.MethodPost, path, query, body, headers)\n}\n\nfunc (cli *Client) put(ctx context.Context, path string, query url.Values, obj interface{}, headers http.Header) (*http.Response, error) {\n\tbody, headers, err := encodeBody(obj, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn cli.putRaw(ctx, path, query, body, headers)\n}\n\n// putRaw sends an http request to the docker API using the method PUT.\nfunc (cli *Client) putRaw(ctx context.Context, path string, query url.Values, body io.Reader, headers http.Header) (*http.Response, error) {\n\t// PUT requests are expected to always have a body (apparently)\n\t// so explicitly pass an empty body to sendRequest to signal that\n\t// it should set the Content-Type header if not already present.\n\tif body == nil {\n\t\tbody = http.NoBody\n\t}\n\treturn cli.sendRequest(ctx, http.MethodPut, path, query, body, headers)\n}\n\n// delete sends an http request to the docker API using the method DELETE.\nfunc (cli *Client) delete(ctx context.Context, path string, query url.Values, headers http.Header) (*http.Response, error) {\n\treturn cli.sendRequest(ctx, http.MethodDelete, path, query, nil, headers)\n}\n\nfunc encodeBody(obj interface{}, headers http.Header) (io.Reader, http.Header, error) {\n\tif obj == nil {\n\t\treturn nil, headers, nil\n\t}\n\t// encoding/json encodes a nil pointer as the JSON document `null`,\n\t// irrespective of whether the type implements json.Marshaler or encoding.TextMarshaler.\n\t// That is almost certainly not what the caller intended as the request body.\n\tif reflect.TypeOf(obj).Kind() == reflect.Ptr && reflect.ValueOf(obj).IsNil() {\n\t\treturn nil, headers, nil\n\t}\n\n\tbody, err := encodeData(obj)\n\tif err != nil {\n\t\treturn nil, headers, err\n\t}\n\tif headers == nil {\n\t\theaders = make(map[string][]string)\n\t}\n\theaders[\"Content-Type\"] = []string{\"application/json\"}\n\treturn body, headers, nil\n}\n\nfunc (cli *Client) buildRequest(ctx context.Context, method, path string, body io.Reader, headers http.Header) (*http.Request, error) {\n\treq, err := http.NewRequestWithContext(ctx, method, path, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq = cli.addHeaders(req, headers)\n\treq.URL.Scheme = cli.scheme\n\treq.URL.Host = cli.addr\n\n\tif cli.proto == \"unix\" || cli.proto == \"npipe\" {\n\t\t// Override host header for non-tcp connections.\n\t\treq.Host = DummyHost\n\t}\n\n\tif body != nil && req.Header.Get(\"Content-Type\") == \"\" {\n\t\treq.Header.Set(\"Content-Type\", \"text/plain\")\n\t}\n\treturn req, nil\n}\n\nfunc (cli *Client) sendRequest(ctx context.Context, method, path string, query url.Values, body io.Reader, headers http.Header) (*http.Response, error) {\n\treq, err := cli.buildRequest(ctx, method, cli.getAPIPath(ctx, path, query), body, headers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresp, err := cli.doRequest(req)\n\tswitch {\n\tcase errors.Is(err, context.Canceled):\n\t\treturn nil, errdefs.Cancelled(err)\n\tcase errors.Is(err, context.DeadlineExceeded):\n\t\treturn nil, errdefs.Deadline(err)\n\tcase err == nil:\n\t\treturn resp, cli.checkResponseErr(resp)\n\tdefault:\n\t\treturn resp, err\n\t}\n}\n\nfunc (cli *Client) doRequest(req *http.Request) (*http.Response, error) {\n\tresp, err := cli.client.Do(req)\n\tif err != nil {\n\t\tif cli.scheme != \"https\" && strings.Contains(err.Error(), \"malformed HTTP response\") {\n\t\t\treturn nil, errConnectionFailed{fmt.Errorf(\"%v.\\n* Are you trying to connect to a TLS-enabled daemon without TLS?\", err)}\n\t\t}\n\n\t\tif cli.scheme == \"https\" && strings.Contains(err.Error(), \"bad certificate\") {\n\t\t\treturn nil, errConnectionFailed{errors.Wrap(err, \"the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings\")}\n\t\t}\n\n\t\t// Don't decorate context sentinel errors; users may be comparing to\n\t\t// them directly.\n\t\tif errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar uErr *url.Error\n\t\tif errors.As(err, &uErr) {\n\t\t\tvar nErr *net.OpError\n\t\t\tif errors.As(uErr.Err, &nErr) {\n\t\t\t\tif os.IsPermission(nErr.Err) {\n\t\t\t\t\treturn nil, errConnectionFailed{errors.Wrapf(err, \"permission denied while trying to connect to the Docker daemon socket at %v\", cli.host)}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar nErr net.Error\n\t\tif errors.As(err, &nErr) {\n\t\t\t// FIXME(thaJeztah): any net.Error should be considered a connection error (but we should include the original error)?\n\t\t\tif nErr.Timeout() {\n\t\t\t\treturn nil, connectionFailed(cli.host)\n\t\t\t}\n\t\t\tif strings.Contains(nErr.Error(), \"connection refused\") || strings.Contains(nErr.Error(), \"dial unix\") {\n\t\t\t\treturn nil, connectionFailed(cli.host)\n\t\t\t}\n\t\t}\n\n\t\t// Although there's not a strongly typed error for this in go-winio,\n\t\t// lots of people are using the default configuration for the docker\n\t\t// daemon on Windows where the daemon is listening on a named pipe\n\t\t// `//./pipe/docker_engine, and the client must be running elevated.\n\t\t// Give users a clue rather than the not-overly useful message\n\t\t// such as `error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.26/info:\n\t\t// open //./pipe/docker_engine: The system cannot find the file specified.`.\n\t\t// Note we can't string compare \"The system cannot find the file specified\" as\n\t\t// this is localised - for example in French the error would be\n\t\t// `open //./pipe/docker_engine: Le fichier spécifié est introuvable.`\n\t\tif strings.Contains(err.Error(), `open //./pipe/docker_engine`) {\n\t\t\t// Checks if client is running with elevated privileges\n\t\t\tif f, elevatedErr := os.Open(`\\\\.\\PHYSICALDRIVE0`); elevatedErr != nil {\n\t\t\t\terr = errors.Wrap(err, \"in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect\")\n\t\t\t} else {\n\t\t\t\t_ = f.Close()\n\t\t\t\terr = errors.Wrap(err, \"this error may indicate that the docker daemon is not running\")\n\t\t\t}\n\t\t}\n\n\t\treturn nil, errConnectionFailed{errors.Wrap(err, \"error during connect\")}\n\t}\n\n\treturn resp, nil\n}\n\nfunc (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) {\n\tif serverResp == nil {\n\t\treturn nil\n\t}\n\tif serverResp.StatusCode >= 200 && serverResp.StatusCode < 400 {\n\t\treturn nil\n\t}\n\tdefer func() {\n\t\tretErr = errdefs.FromStatusCode(retErr, serverResp.StatusCode)\n\t}()\n\n\tvar body []byte\n\tvar err error\n\tvar reqURL string\n\tif serverResp.Request != nil {\n\t\treqURL = serverResp.Request.URL.String()\n\t}\n\tstatusMsg := serverResp.Status\n\tif statusMsg == \"\" {\n\t\tstatusMsg = http.StatusText(serverResp.StatusCode)\n\t}\n\tif serverResp.Body != nil {\n\t\tbodyMax := 1 * 1024 * 1024 // 1 MiB\n\t\tbodyR := &io.LimitedReader{\n\t\t\tR: serverResp.Body,\n\t\t\tN: int64(bodyMax),\n\t\t}\n\t\tbody, err = io.ReadAll(bodyR)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif bodyR.N == 0 {\n\t\t\tif reqURL != \"\" {\n\t\t\t\treturn fmt.Errorf(\"request returned %s with a message (> %d bytes) for API route and version %s, check if the server supports the requested API version\", statusMsg, bodyMax, reqURL)\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"request returned %s with a message (> %d bytes); check if the server supports the requested API version\", statusMsg, bodyMax)\n\t\t}\n\t}\n\tif len(body) == 0 {\n\t\tif reqURL != \"\" {\n\t\t\treturn fmt.Errorf(\"request returned %s for API route and version %s, check if the server supports the requested API version\", statusMsg, reqURL)\n\t\t}\n\t\treturn fmt.Errorf(\"request returned %s; check if the server supports the requested API version\", statusMsg)\n\t}\n\n\tvar daemonErr error\n\tif serverResp.Header.Get(\"Content-Type\") == \"application/json\" && (cli.version == \"\" || versions.GreaterThan(cli.version, \"1.23\")) {\n\t\tvar errorResponse types.ErrorResponse\n\t\tif err := json.Unmarshal(body, &errorResponse); err != nil {\n\t\t\treturn errors.Wrap(err, \"Error reading JSON\")\n\t\t}\n\t\tif errorResponse.Message == \"\" {\n\t\t\t// Error-message is empty, which means that we successfully parsed the\n\t\t\t// JSON-response (no error produced), but it didn't contain an error\n\t\t\t// message. This could either be because the response was empty, or\n\t\t\t// the response was valid JSON, but not with the expected schema\n\t\t\t// ([types.ErrorResponse]).\n\t\t\t//\n\t\t\t// We cannot use \"strict\" JSON handling (json.NewDecoder with DisallowUnknownFields)\n\t\t\t// due to the API using an open schema (we must anticipate fields\n\t\t\t// being added to [types.ErrorResponse] in the future, and not\n\t\t\t// reject those responses.\n\t\t\t//\n\t\t\t// For these cases, we construct an error with the status-code\n\t\t\t// returned, but we could consider returning (a truncated version\n\t\t\t// of) the actual response as-is.\n\t\t\t//\n\t\t\t// TODO(thaJeztah): consider adding a log.Debug to allow clients to debug the actual response when enabling debug logging.\n\t\t\tdaemonErr = fmt.Errorf(`API returned a %d (%s) but provided no error-message`,\n\t\t\t\tserverResp.StatusCode,\n\t\t\t\thttp.StatusText(serverResp.StatusCode),\n\t\t\t)\n\t\t} else {\n\t\t\tdaemonErr = errors.New(strings.TrimSpace(errorResponse.Message))\n\t\t}\n\t} else {\n\t\t// Fall back to returning the response as-is for API versions < 1.24\n\t\t// that didn't support JSON error responses, and for situations\n\t\t// where a plain text error is returned. This branch may also catch\n\t\t// situations where a proxy is involved, returning a HTML response.\n\t\tdaemonErr = errors.New(strings.TrimSpace(string(body)))\n\t}\n\treturn errors.Wrap(daemonErr, \"Error response from daemon\")\n}\n\nfunc (cli *Client) addHeaders(req *http.Request, headers http.Header) *http.Request {\n\t// Add CLI Config's HTTP Headers BEFORE we set the Docker headers\n\t// then the user can't change OUR headers\n\tfor k, v := range cli.customHTTPHeaders {\n\t\tif versions.LessThan(cli.version, \"1.25\") && http.CanonicalHeaderKey(k) == \"User-Agent\" {\n\t\t\tcontinue\n\t\t}\n\t\treq.Header.Set(k, v)\n\t}\n\n\tfor k, v := range headers {\n\t\treq.Header[http.CanonicalHeaderKey(k)] = v\n\t}\n\n\tif cli.userAgent != nil {\n\t\tif *cli.userAgent == \"\" {\n\t\t\treq.Header.Del(\"User-Agent\")\n\t\t} else {\n\t\t\treq.Header.Set(\"User-Agent\", *cli.userAgent)\n\t\t}\n\t}\n\treturn req\n}\n\nfunc encodeData(data interface{}) (*bytes.Buffer, error) {\n\tparams := bytes.NewBuffer(nil)\n\tif data != nil {\n\t\tif err := json.NewEncoder(params).Encode(data); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn params, nil\n}\n\nfunc ensureReaderClosed(response *http.Response) {\n\tif response != nil && response.Body != nil {\n\t\t// Drain up to 512 bytes and close the body to let the Transport reuse the connection\n\t\t// see https://github.com/google/go-github/pull/317/files#r57536827\n\t\t//\n\t\t// TODO(thaJeztah): see if this optimization is still needed, or already implemented in stdlib,\n\t\t//   and check if context-cancellation should handle this as well. If still needed, consider\n\t\t//   wrapping response.Body, or returning a \"closer()\" from [Client.sendRequest] and related\n\t\t//   methods.\n\t\t_, _ = io.CopyN(io.Discard, response.Body, 512)\n\t\t_ = response.Body.Close()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/secret_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SecretCreate creates a new secret.\nfunc (cli *Client) SecretCreate(ctx context.Context, secret swarm.SecretSpec) (types.SecretCreateResponse, error) {\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"secret create\"); err != nil {\n\t\treturn types.SecretCreateResponse{}, err\n\t}\n\tresp, err := cli.post(ctx, \"/secrets/create\", nil, secret, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn types.SecretCreateResponse{}, err\n\t}\n\n\tvar response types.SecretCreateResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/secret_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SecretInspectWithRaw returns the secret information with raw data\nfunc (cli *Client) SecretInspectWithRaw(ctx context.Context, id string) (swarm.Secret, []byte, error) {\n\tid, err := trimID(\"secret\", id)\n\tif err != nil {\n\t\treturn swarm.Secret{}, nil, err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"secret inspect\"); err != nil {\n\t\treturn swarm.Secret{}, nil, err\n\t}\n\tresp, err := cli.get(ctx, \"/secrets/\"+id, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn swarm.Secret{}, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn swarm.Secret{}, nil, err\n\t}\n\n\tvar secret swarm.Secret\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&secret)\n\n\treturn secret, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/secret_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SecretList returns the list of secrets.\nfunc (cli *Client) SecretList(ctx context.Context, options types.SecretListOptions) ([]swarm.Secret, error) {\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"secret list\"); err != nil {\n\t\treturn nil, err\n\t}\n\tquery := url.Values{}\n\n\tif options.Filters.Len() > 0 {\n\t\tfilterJSON, err := filters.ToJSON(options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\tresp, err := cli.get(ctx, \"/secrets\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar secrets []swarm.Secret\n\terr = json.NewDecoder(resp.Body).Decode(&secrets)\n\treturn secrets, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/secret_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport \"context\"\n\n// SecretRemove removes a secret.\nfunc (cli *Client) SecretRemove(ctx context.Context, id string) error {\n\tid, err := trimID(\"secret\", id)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"secret remove\"); err != nil {\n\t\treturn err\n\t}\n\tresp, err := cli.delete(ctx, \"/secrets/\"+id, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/secret_update.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SecretUpdate attempts to update a secret.\nfunc (cli *Client) SecretUpdate(ctx context.Context, id string, version swarm.Version, secret swarm.SecretSpec) error {\n\tid, err := trimID(\"secret\", id)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"secret update\"); err != nil {\n\t\treturn err\n\t}\n\tquery := url.Values{}\n\tquery.Set(\"version\", version.String())\n\tresp, err := cli.post(ctx, \"/secrets/\"+id+\"/update\", query, secret, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/service_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/distribution/reference\"\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/api/types/swarm\"\n\t\"github.com/docker/docker/api/types/versions\"\n\t\"github.com/opencontainers/go-digest\"\n\t\"github.com/pkg/errors\"\n)\n\n// ServiceCreate creates a new service.\nfunc (cli *Client) ServiceCreate(ctx context.Context, service swarm.ServiceSpec, options types.ServiceCreateOptions) (swarm.ServiceCreateResponse, error) {\n\tvar response swarm.ServiceCreateResponse\n\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\treturn response, err\n\t}\n\n\t// Make sure containerSpec is not nil when no runtime is set or the runtime is set to container\n\tif service.TaskTemplate.ContainerSpec == nil && (service.TaskTemplate.Runtime == \"\" || service.TaskTemplate.Runtime == swarm.RuntimeContainer) {\n\t\tservice.TaskTemplate.ContainerSpec = &swarm.ContainerSpec{}\n\t}\n\n\tif err := validateServiceSpec(service); err != nil {\n\t\treturn response, err\n\t}\n\n\t// ensure that the image is tagged\n\tvar resolveWarning string\n\tswitch {\n\tcase service.TaskTemplate.ContainerSpec != nil:\n\t\tif taggedImg := imageWithTagString(service.TaskTemplate.ContainerSpec.Image); taggedImg != \"\" {\n\t\t\tservice.TaskTemplate.ContainerSpec.Image = taggedImg\n\t\t}\n\t\tif options.QueryRegistry {\n\t\t\tresolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)\n\t\t}\n\tcase service.TaskTemplate.PluginSpec != nil:\n\t\tif taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != \"\" {\n\t\t\tservice.TaskTemplate.PluginSpec.Remote = taggedImg\n\t\t}\n\t\tif options.QueryRegistry {\n\t\t\tresolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)\n\t\t}\n\t}\n\n\theaders := http.Header{}\n\tif versions.LessThan(cli.version, \"1.30\") {\n\t\t// the custom \"version\" header was used by engine API before 20.10\n\t\t// (API 1.30) to switch between client- and server-side lookup of\n\t\t// image digests.\n\t\theaders[\"version\"] = []string{cli.version}\n\t}\n\tif options.EncodedRegistryAuth != \"\" {\n\t\theaders[registry.AuthHeader] = []string{options.EncodedRegistryAuth}\n\t}\n\tresp, err := cli.post(ctx, \"/services/create\", nil, service, headers)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn response, err\n\t}\n\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\tif resolveWarning != \"\" {\n\t\tresponse.Warnings = append(response.Warnings, resolveWarning)\n\t}\n\n\treturn response, err\n}\n\nfunc resolveContainerSpecImage(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string {\n\tvar warning string\n\tif img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.ContainerSpec.Image, encodedAuth); err != nil {\n\t\twarning = digestWarning(taskSpec.ContainerSpec.Image)\n\t} else {\n\t\ttaskSpec.ContainerSpec.Image = img\n\t\tif len(imgPlatforms) > 0 {\n\t\t\tif taskSpec.Placement == nil {\n\t\t\t\ttaskSpec.Placement = &swarm.Placement{}\n\t\t\t}\n\t\t\ttaskSpec.Placement.Platforms = imgPlatforms\n\t\t}\n\t}\n\treturn warning\n}\n\nfunc resolvePluginSpecRemote(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string {\n\tvar warning string\n\tif img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.PluginSpec.Remote, encodedAuth); err != nil {\n\t\twarning = digestWarning(taskSpec.PluginSpec.Remote)\n\t} else {\n\t\ttaskSpec.PluginSpec.Remote = img\n\t\tif len(imgPlatforms) > 0 {\n\t\t\tif taskSpec.Placement == nil {\n\t\t\t\ttaskSpec.Placement = &swarm.Placement{}\n\t\t\t}\n\t\t\ttaskSpec.Placement.Platforms = imgPlatforms\n\t\t}\n\t}\n\treturn warning\n}\n\nfunc imageDigestAndPlatforms(ctx context.Context, cli DistributionAPIClient, image, encodedAuth string) (string, []swarm.Platform, error) {\n\tdistributionInspect, err := cli.DistributionInspect(ctx, image, encodedAuth)\n\tvar platforms []swarm.Platform\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\n\timageWithDigest := imageWithDigestString(image, distributionInspect.Descriptor.Digest)\n\n\tif len(distributionInspect.Platforms) > 0 {\n\t\tplatforms = make([]swarm.Platform, 0, len(distributionInspect.Platforms))\n\t\tfor _, p := range distributionInspect.Platforms {\n\t\t\t// clear architecture field for arm. This is a temporary patch to address\n\t\t\t// https://github.com/docker/swarmkit/issues/2294. The issue is that while\n\t\t\t// image manifests report \"arm\" as the architecture, the node reports\n\t\t\t// something like \"armv7l\" (includes the variant), which causes arm images\n\t\t\t// to stop working with swarm mode. This patch removes the architecture\n\t\t\t// constraint for arm images to ensure tasks get scheduled.\n\t\t\tarch := p.Architecture\n\t\t\tif strings.ToLower(arch) == \"arm\" {\n\t\t\t\tarch = \"\"\n\t\t\t}\n\t\t\tplatforms = append(platforms, swarm.Platform{\n\t\t\t\tArchitecture: arch,\n\t\t\t\tOS:           p.OS,\n\t\t\t})\n\t\t}\n\t}\n\treturn imageWithDigest, platforms, err\n}\n\n// imageWithDigestString takes an image string and a digest, and updates\n// the image string if it didn't originally contain a digest. It returns\n// image unmodified in other situations.\nfunc imageWithDigestString(image string, dgst digest.Digest) string {\n\tnamedRef, err := reference.ParseNormalizedNamed(image)\n\tif err == nil {\n\t\tif _, isCanonical := namedRef.(reference.Canonical); !isCanonical {\n\t\t\t// ensure that image gets a default tag if none is provided\n\t\t\timg, err := reference.WithDigest(namedRef, dgst)\n\t\t\tif err == nil {\n\t\t\t\treturn reference.FamiliarString(img)\n\t\t\t}\n\t\t}\n\t}\n\treturn image\n}\n\n// imageWithTagString takes an image string, and returns a tagged image\n// string, adding a 'latest' tag if one was not provided. It returns an\n// empty string if a canonical reference was provided\nfunc imageWithTagString(image string) string {\n\tnamedRef, err := reference.ParseNormalizedNamed(image)\n\tif err == nil {\n\t\treturn reference.FamiliarString(reference.TagNameOnly(namedRef))\n\t}\n\treturn \"\"\n}\n\n// digestWarning constructs a formatted warning string using the\n// image name that could not be pinned by digest. The formatting\n// is hardcoded, but could me made smarter in the future\nfunc digestWarning(image string) string {\n\treturn fmt.Sprintf(\"image %s could not be accessed on a registry to record\\nits digest. Each node will access %s independently,\\npossibly leading to different nodes running different\\nversions of the image.\\n\", image, image)\n}\n\nfunc validateServiceSpec(s swarm.ServiceSpec) error {\n\tif s.TaskTemplate.ContainerSpec != nil && s.TaskTemplate.PluginSpec != nil {\n\t\treturn errors.New(\"must not specify both a container spec and a plugin spec in the task template\")\n\t}\n\tif s.TaskTemplate.PluginSpec != nil && s.TaskTemplate.Runtime != swarm.RuntimePlugin {\n\t\treturn errors.New(\"mismatched runtime with plugin spec\")\n\t}\n\tif s.TaskTemplate.ContainerSpec != nil && (s.TaskTemplate.Runtime != \"\" && s.TaskTemplate.Runtime != swarm.RuntimeContainer) {\n\t\treturn errors.New(\"mismatched runtime with container spec\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/service_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// ServiceInspectWithRaw returns the service information and the raw data.\nfunc (cli *Client) ServiceInspectWithRaw(ctx context.Context, serviceID string, opts types.ServiceInspectOptions) (swarm.Service, []byte, error) {\n\tserviceID, err := trimID(\"service\", serviceID)\n\tif err != nil {\n\t\treturn swarm.Service{}, nil, err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"insertDefaults\", fmt.Sprintf(\"%v\", opts.InsertDefaults))\n\tresp, err := cli.get(ctx, \"/services/\"+serviceID, query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn swarm.Service{}, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn swarm.Service{}, nil, err\n\t}\n\n\tvar response swarm.Service\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&response)\n\treturn response, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/service_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// ServiceList returns the list of services.\nfunc (cli *Client) ServiceList(ctx context.Context, options types.ServiceListOptions) ([]swarm.Service, error) {\n\tquery := url.Values{}\n\n\tif options.Filters.Len() > 0 {\n\t\tfilterJSON, err := filters.ToJSON(options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\tif options.Status {\n\t\tquery.Set(\"status\", \"true\")\n\t}\n\n\tresp, err := cli.get(ctx, \"/services\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar services []swarm.Service\n\terr = json.NewDecoder(resp.Body).Decode(&services)\n\treturn services, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/service_logs.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/url\"\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\ttimetypes \"github.com/docker/docker/api/types/time\"\n\t\"github.com/pkg/errors\"\n)\n\n// ServiceLogs returns the logs generated by a service in an io.ReadCloser.\n// It's up to the caller to close the stream.\nfunc (cli *Client) ServiceLogs(ctx context.Context, serviceID string, options container.LogsOptions) (io.ReadCloser, error) {\n\tserviceID, err := trimID(\"service\", serviceID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tquery := url.Values{}\n\tif options.ShowStdout {\n\t\tquery.Set(\"stdout\", \"1\")\n\t}\n\n\tif options.ShowStderr {\n\t\tquery.Set(\"stderr\", \"1\")\n\t}\n\n\tif options.Since != \"\" {\n\t\tts, err := timetypes.GetTimestamp(options.Since, time.Now())\n\t\tif err != nil {\n\t\t\treturn nil, errors.Wrap(err, `invalid value for \"since\"`)\n\t\t}\n\t\tquery.Set(\"since\", ts)\n\t}\n\n\tif options.Timestamps {\n\t\tquery.Set(\"timestamps\", \"1\")\n\t}\n\n\tif options.Details {\n\t\tquery.Set(\"details\", \"1\")\n\t}\n\n\tif options.Follow {\n\t\tquery.Set(\"follow\", \"1\")\n\t}\n\tquery.Set(\"tail\", options.Tail)\n\n\tresp, err := cli.get(ctx, \"/services/\"+serviceID+\"/logs\", query, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/service_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport \"context\"\n\n// ServiceRemove kills and removes a service.\nfunc (cli *Client) ServiceRemove(ctx context.Context, serviceID string) error {\n\tserviceID, err := trimID(\"service\", serviceID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tresp, err := cli.delete(ctx, \"/services/\"+serviceID, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/service_update.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/registry\"\n\t\"github.com/docker/docker/api/types/swarm\"\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// ServiceUpdate updates a Service. The version number is required to avoid conflicting writes.\n// It should be the value as set *before* the update. You can find this value in the Meta field\n// of swarm.Service, which can be found using ServiceInspectWithRaw.\nfunc (cli *Client) ServiceUpdate(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options types.ServiceUpdateOptions) (swarm.ServiceUpdateResponse, error) {\n\tserviceID, err := trimID(\"service\", serviceID)\n\tif err != nil {\n\t\treturn swarm.ServiceUpdateResponse{}, err\n\t}\n\n\t// Make sure we negotiated (if the client is configured to do so),\n\t// as code below contains API-version specific handling of options.\n\t//\n\t// Normally, version-negotiation (if enabled) would not happen until\n\t// the API request is made.\n\tif err := cli.checkVersion(ctx); err != nil {\n\t\treturn swarm.ServiceUpdateResponse{}, err\n\t}\n\n\tquery := url.Values{}\n\tif options.RegistryAuthFrom != \"\" {\n\t\tquery.Set(\"registryAuthFrom\", options.RegistryAuthFrom)\n\t}\n\n\tif options.Rollback != \"\" {\n\t\tquery.Set(\"rollback\", options.Rollback)\n\t}\n\n\tquery.Set(\"version\", version.String())\n\n\tif err := validateServiceSpec(service); err != nil {\n\t\treturn swarm.ServiceUpdateResponse{}, err\n\t}\n\n\t// ensure that the image is tagged\n\tvar resolveWarning string\n\tswitch {\n\tcase service.TaskTemplate.ContainerSpec != nil:\n\t\tif taggedImg := imageWithTagString(service.TaskTemplate.ContainerSpec.Image); taggedImg != \"\" {\n\t\t\tservice.TaskTemplate.ContainerSpec.Image = taggedImg\n\t\t}\n\t\tif options.QueryRegistry {\n\t\t\tresolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)\n\t\t}\n\tcase service.TaskTemplate.PluginSpec != nil:\n\t\tif taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != \"\" {\n\t\t\tservice.TaskTemplate.PluginSpec.Remote = taggedImg\n\t\t}\n\t\tif options.QueryRegistry {\n\t\t\tresolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth)\n\t\t}\n\t}\n\n\theaders := http.Header{}\n\tif versions.LessThan(cli.version, \"1.30\") {\n\t\t// the custom \"version\" header was used by engine API before 20.10\n\t\t// (API 1.30) to switch between client- and server-side lookup of\n\t\t// image digests.\n\t\theaders[\"version\"] = []string{cli.version}\n\t}\n\tif options.EncodedRegistryAuth != \"\" {\n\t\theaders[registry.AuthHeader] = []string{options.EncodedRegistryAuth}\n\t}\n\tresp, err := cli.post(ctx, \"/services/\"+serviceID+\"/update\", query, service, headers)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn swarm.ServiceUpdateResponse{}, err\n\t}\n\n\tvar response swarm.ServiceUpdateResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\tif resolveWarning != \"\" {\n\t\tresponse.Warnings = append(response.Warnings, resolveWarning)\n\t}\n\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/swarm_get_unlock_key.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// SwarmGetUnlockKey retrieves the swarm's unlock key.\nfunc (cli *Client) SwarmGetUnlockKey(ctx context.Context) (types.SwarmUnlockKeyResponse, error) {\n\tresp, err := cli.get(ctx, \"/swarm/unlockkey\", nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn types.SwarmUnlockKeyResponse{}, err\n\t}\n\n\tvar response types.SwarmUnlockKeyResponse\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/swarm_init.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SwarmInit initializes the swarm.\nfunc (cli *Client) SwarmInit(ctx context.Context, req swarm.InitRequest) (string, error) {\n\tresp, err := cli.post(ctx, \"/swarm/init\", nil, req, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tvar response string\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/swarm_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SwarmInspect inspects the swarm.\nfunc (cli *Client) SwarmInspect(ctx context.Context) (swarm.Swarm, error) {\n\tresp, err := cli.get(ctx, \"/swarm\", nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn swarm.Swarm{}, err\n\t}\n\n\tvar response swarm.Swarm\n\terr = json.NewDecoder(resp.Body).Decode(&response)\n\treturn response, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/swarm_join.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SwarmJoin joins the swarm.\nfunc (cli *Client) SwarmJoin(ctx context.Context, req swarm.JoinRequest) error {\n\tresp, err := cli.post(ctx, \"/swarm/join\", nil, req, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/swarm_leave.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n)\n\n// SwarmLeave leaves the swarm.\nfunc (cli *Client) SwarmLeave(ctx context.Context, force bool) error {\n\tquery := url.Values{}\n\tif force {\n\t\tquery.Set(\"force\", \"1\")\n\t}\n\tresp, err := cli.post(ctx, \"/swarm/leave\", query, nil, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/swarm_unlock.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SwarmUnlock unlocks locked swarm.\nfunc (cli *Client) SwarmUnlock(ctx context.Context, req swarm.UnlockRequest) error {\n\tresp, err := cli.post(ctx, \"/swarm/unlock\", nil, req, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/swarm_update.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// SwarmUpdate updates the swarm.\nfunc (cli *Client) SwarmUpdate(ctx context.Context, version swarm.Version, swarm swarm.Spec, flags swarm.UpdateFlags) error {\n\tquery := url.Values{}\n\tquery.Set(\"version\", version.String())\n\tquery.Set(\"rotateWorkerToken\", strconv.FormatBool(flags.RotateWorkerToken))\n\tquery.Set(\"rotateManagerToken\", strconv.FormatBool(flags.RotateManagerToken))\n\tquery.Set(\"rotateManagerUnlockKey\", strconv.FormatBool(flags.RotateManagerUnlockKey))\n\tresp, err := cli.post(ctx, \"/swarm/update\", query, swarm, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/task_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// TaskInspectWithRaw returns the task information and its raw representation.\nfunc (cli *Client) TaskInspectWithRaw(ctx context.Context, taskID string) (swarm.Task, []byte, error) {\n\ttaskID, err := trimID(\"task\", taskID)\n\tif err != nil {\n\t\treturn swarm.Task{}, nil, err\n\t}\n\n\tresp, err := cli.get(ctx, \"/tasks/\"+taskID, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn swarm.Task{}, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn swarm.Task{}, nil, err\n\t}\n\n\tvar response swarm.Task\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&response)\n\treturn response, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/task_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types\"\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/swarm\"\n)\n\n// TaskList returns the list of tasks.\nfunc (cli *Client) TaskList(ctx context.Context, options types.TaskListOptions) ([]swarm.Task, error) {\n\tquery := url.Values{}\n\n\tif options.Filters.Len() > 0 {\n\t\tfilterJSON, err := filters.ToJSON(options.Filters)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\n\tresp, err := cli.get(ctx, \"/tasks\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar tasks []swarm.Task\n\terr = json.NewDecoder(resp.Body).Decode(&tasks)\n\treturn tasks, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/task_logs.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/url\"\n\t\"time\"\n\n\t\"github.com/docker/docker/api/types/container\"\n\ttimetypes \"github.com/docker/docker/api/types/time\"\n)\n\n// TaskLogs returns the logs generated by a task in an io.ReadCloser.\n// It's up to the caller to close the stream.\nfunc (cli *Client) TaskLogs(ctx context.Context, taskID string, options container.LogsOptions) (io.ReadCloser, error) {\n\tquery := url.Values{}\n\tif options.ShowStdout {\n\t\tquery.Set(\"stdout\", \"1\")\n\t}\n\n\tif options.ShowStderr {\n\t\tquery.Set(\"stderr\", \"1\")\n\t}\n\n\tif options.Since != \"\" {\n\t\tts, err := timetypes.GetTimestamp(options.Since, time.Now())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery.Set(\"since\", ts)\n\t}\n\n\tif options.Timestamps {\n\t\tquery.Set(\"timestamps\", \"1\")\n\t}\n\n\tif options.Details {\n\t\tquery.Set(\"details\", \"1\")\n\t}\n\n\tif options.Follow {\n\t\tquery.Set(\"follow\", \"1\")\n\t}\n\tquery.Set(\"tail\", options.Tail)\n\n\tresp, err := cli.get(ctx, \"/tasks/\"+taskID+\"/logs\", query, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp.Body, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/utils.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/errdefs\"\n\t\"github.com/docker/docker/internal/lazyregexp\"\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\nvar headerRegexp = lazyregexp.New(`\\ADocker/.+\\s\\((.+)\\)\\z`)\n\ntype emptyIDError string\n\nfunc (e emptyIDError) InvalidParameter() {}\n\nfunc (e emptyIDError) Error() string {\n\treturn \"invalid \" + string(e) + \" name or ID: value is empty\"\n}\n\n// trimID trims the given object-ID / name, returning an error if it's empty.\nfunc trimID(objType, id string) (string, error) {\n\tid = strings.TrimSpace(id)\n\tif len(id) == 0 {\n\t\treturn \"\", emptyIDError(objType)\n\t}\n\treturn id, nil\n}\n\n// getDockerOS returns the operating system based on the server header from the daemon.\nfunc getDockerOS(serverHeader string) string {\n\tvar osType string\n\tmatches := headerRegexp.FindStringSubmatch(serverHeader)\n\tif len(matches) > 0 {\n\t\tosType = matches[1]\n\t}\n\treturn osType\n}\n\n// getFiltersQuery returns a url query with \"filters\" query term, based on the\n// filters provided.\nfunc getFiltersQuery(f filters.Args) (url.Values, error) {\n\tquery := url.Values{}\n\tif f.Len() > 0 {\n\t\tfilterJSON, err := filters.ToJSON(f)\n\t\tif err != nil {\n\t\t\treturn query, err\n\t\t}\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\treturn query, nil\n}\n\n// encodePlatforms marshals the given platform(s) to JSON format, to\n// be used for query-parameters for filtering / selecting platforms.\nfunc encodePlatforms(platform ...ocispec.Platform) ([]string, error) {\n\tif len(platform) == 0 {\n\t\treturn []string{}, nil\n\t}\n\tif len(platform) == 1 {\n\t\tp, err := encodePlatform(&platform[0])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn []string{p}, nil\n\t}\n\n\tseen := make(map[string]struct{}, len(platform))\n\tout := make([]string, 0, len(platform))\n\tfor i := range platform {\n\t\tp, err := encodePlatform(&platform[i])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif _, ok := seen[p]; !ok {\n\t\t\tout = append(out, p)\n\t\t\tseen[p] = struct{}{}\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// encodePlatform marshals the given platform to JSON format, to\n// be used for query-parameters for filtering / selecting platforms. It\n// is used as a helper for encodePlatforms,\nfunc encodePlatform(platform *ocispec.Platform) (string, error) {\n\tp, err := json.Marshal(platform)\n\tif err != nil {\n\t\treturn \"\", errdefs.InvalidParameter(fmt.Errorf(\"invalid platform: %v\", err))\n\t}\n\treturn string(p), nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/version.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types\"\n)\n\n// ServerVersion returns information of the docker client and server host.\nfunc (cli *Client) ServerVersion(ctx context.Context) (types.Version, error) {\n\tresp, err := cli.get(ctx, \"/version\", nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn types.Version{}, err\n\t}\n\n\tvar server types.Version\n\terr = json.NewDecoder(resp.Body).Decode(&server)\n\treturn server, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/volume_create.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/docker/docker/api/types/volume\"\n)\n\n// VolumeCreate creates a volume in the docker host.\nfunc (cli *Client) VolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error) {\n\tresp, err := cli.post(ctx, \"/volumes/create\", nil, options, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn volume.Volume{}, err\n\t}\n\n\tvar vol volume.Volume\n\terr = json.NewDecoder(resp.Body).Decode(&vol)\n\treturn vol, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/volume_inspect.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\n\t\"github.com/docker/docker/api/types/volume\"\n)\n\n// VolumeInspect returns the information about a specific volume in the docker host.\nfunc (cli *Client) VolumeInspect(ctx context.Context, volumeID string) (volume.Volume, error) {\n\tvol, _, err := cli.VolumeInspectWithRaw(ctx, volumeID)\n\treturn vol, err\n}\n\n// VolumeInspectWithRaw returns the information about a specific volume in the docker host and its raw representation\nfunc (cli *Client) VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) {\n\tvolumeID, err := trimID(\"volume\", volumeID)\n\tif err != nil {\n\t\treturn volume.Volume{}, nil, err\n\t}\n\n\tresp, err := cli.get(ctx, \"/volumes/\"+volumeID, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn volume.Volume{}, nil, err\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn volume.Volume{}, nil, err\n\t}\n\n\tvar vol volume.Volume\n\trdr := bytes.NewReader(body)\n\terr = json.NewDecoder(rdr).Decode(&vol)\n\treturn vol, body, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/volume_list.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/volume\"\n)\n\n// VolumeList returns the volumes configured in the docker host.\nfunc (cli *Client) VolumeList(ctx context.Context, options volume.ListOptions) (volume.ListResponse, error) {\n\tquery := url.Values{}\n\n\tif options.Filters.Len() > 0 {\n\t\t//nolint:staticcheck // ignore SA1019 for old code\n\t\tfilterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters)\n\t\tif err != nil {\n\t\t\treturn volume.ListResponse{}, err\n\t\t}\n\t\tquery.Set(\"filters\", filterJSON)\n\t}\n\tresp, err := cli.get(ctx, \"/volumes\", query, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn volume.ListResponse{}, err\n\t}\n\n\tvar volumes volume.ListResponse\n\terr = json.NewDecoder(resp.Body).Decode(&volumes)\n\treturn volumes, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/volume_prune.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/docker/docker/api/types/filters\"\n\t\"github.com/docker/docker/api/types/volume\"\n)\n\n// VolumesPrune requests the daemon to delete unused data\nfunc (cli *Client) VolumesPrune(ctx context.Context, pruneFilters filters.Args) (volume.PruneReport, error) {\n\tif err := cli.NewVersionError(ctx, \"1.25\", \"volume prune\"); err != nil {\n\t\treturn volume.PruneReport{}, err\n\t}\n\n\tquery, err := getFiltersQuery(pruneFilters)\n\tif err != nil {\n\t\treturn volume.PruneReport{}, err\n\t}\n\n\tresp, err := cli.post(ctx, \"/volumes/prune\", query, nil, nil)\n\tdefer ensureReaderClosed(resp)\n\tif err != nil {\n\t\treturn volume.PruneReport{}, err\n\t}\n\n\tvar report volume.PruneReport\n\tif err := json.NewDecoder(resp.Body).Decode(&report); err != nil {\n\t\treturn volume.PruneReport{}, fmt.Errorf(\"Error retrieving volume prune report: %v\", err)\n\t}\n\n\treturn report, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/volume_remove.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/versions\"\n)\n\n// VolumeRemove removes a volume from the docker host.\nfunc (cli *Client) VolumeRemove(ctx context.Context, volumeID string, force bool) error {\n\tvolumeID, err := trimID(\"volume\", volumeID)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tif force {\n\t\t// Make sure we negotiated (if the client is configured to do so),\n\t\t// as code below contains API-version specific handling of options.\n\t\t//\n\t\t// Normally, version-negotiation (if enabled) would not happen until\n\t\t// the API request is made.\n\t\tif err := cli.checkVersion(ctx); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif versions.GreaterThanOrEqualTo(cli.version, \"1.25\") {\n\t\t\tquery.Set(\"force\", \"1\")\n\t\t}\n\t}\n\tresp, err := cli.delete(ctx, \"/volumes/\"+volumeID, query, nil)\n\tdefer ensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/client/volume_update.go",
    "content": "package client // import \"github.com/docker/docker/client\"\n\nimport (\n\t\"context\"\n\t\"net/url\"\n\n\t\"github.com/docker/docker/api/types/swarm\"\n\t\"github.com/docker/docker/api/types/volume\"\n)\n\n// VolumeUpdate updates a volume. This only works for Cluster Volumes, and\n// only some fields can be updated.\nfunc (cli *Client) VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error {\n\tvolumeID, err := trimID(\"volume\", volumeID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := cli.NewVersionError(ctx, \"1.42\", \"volume update\"); err != nil {\n\t\treturn err\n\t}\n\n\tquery := url.Values{}\n\tquery.Set(\"version\", version.String())\n\n\tresp, err := cli.put(ctx, \"/volumes/\"+volumeID, query, options, nil)\n\tensureReaderClosed(resp)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/errdefs/defs.go",
    "content": "package errdefs\n\n// ErrNotFound signals that the requested object doesn't exist\ntype ErrNotFound interface {\n\tNotFound()\n}\n\n// ErrInvalidParameter signals that the user input is invalid\ntype ErrInvalidParameter interface {\n\tInvalidParameter()\n}\n\n// ErrConflict signals that some internal state conflicts with the requested action and can't be performed.\n// A change in state should be able to clear this error.\ntype ErrConflict interface {\n\tConflict()\n}\n\n// ErrUnauthorized is used to signify that the user is not authorized to perform a specific action\ntype ErrUnauthorized interface {\n\tUnauthorized()\n}\n\n// ErrUnavailable signals that the requested action/subsystem is not available.\ntype ErrUnavailable interface {\n\tUnavailable()\n}\n\n// ErrForbidden signals that the requested action cannot be performed under any circumstances.\n// When a ErrForbidden is returned, the caller should never retry the action.\ntype ErrForbidden interface {\n\tForbidden()\n}\n\n// ErrSystem signals that some internal error occurred.\n// An example of this would be a failed mount request.\ntype ErrSystem interface {\n\tSystem()\n}\n\n// ErrNotModified signals that an action can't be performed because it's already in the desired state\ntype ErrNotModified interface {\n\tNotModified()\n}\n\n// ErrNotImplemented signals that the requested action/feature is not implemented on the system as configured.\ntype ErrNotImplemented interface {\n\tNotImplemented()\n}\n\n// ErrUnknown signals that the kind of error that occurred is not known.\ntype ErrUnknown interface {\n\tUnknown()\n}\n\n// ErrCancelled signals that the action was cancelled.\ntype ErrCancelled interface {\n\tCancelled()\n}\n\n// ErrDeadline signals that the deadline was reached before the action completed.\ntype ErrDeadline interface {\n\tDeadlineExceeded()\n}\n\n// ErrDataLoss indicates that data was lost or there is data corruption.\ntype ErrDataLoss interface {\n\tDataLoss()\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/errdefs/doc.go",
    "content": "// Package errdefs defines a set of error interfaces that packages should use for communicating classes of errors.\n// Errors that cross the package boundary should implement one (and only one) of these interfaces.\n//\n// Packages should not reference these interfaces directly, only implement them.\n// To check if a particular error implements one of these interfaces, there are helper\n// functions provided (e.g. `Is<SomeError>`) which can be used rather than asserting the interfaces directly.\n// If you must assert on these interfaces, be sure to check the causal chain (`err.Cause()`).\npackage errdefs // import \"github.com/docker/docker/errdefs\"\n"
  },
  {
    "path": "vendor/github.com/docker/docker/errdefs/helpers.go",
    "content": "package errdefs\n\nimport \"context\"\n\ntype errNotFound struct{ error }\n\nfunc (errNotFound) NotFound() {}\n\nfunc (e errNotFound) Cause() error {\n\treturn e.error\n}\n\nfunc (e errNotFound) Unwrap() error {\n\treturn e.error\n}\n\n// NotFound creates an [ErrNotFound] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrNotFound],\nfunc NotFound(err error) error {\n\tif err == nil || IsNotFound(err) {\n\t\treturn err\n\t}\n\treturn errNotFound{err}\n}\n\ntype errInvalidParameter struct{ error }\n\nfunc (errInvalidParameter) InvalidParameter() {}\n\nfunc (e errInvalidParameter) Cause() error {\n\treturn e.error\n}\n\nfunc (e errInvalidParameter) Unwrap() error {\n\treturn e.error\n}\n\n// InvalidParameter creates an [ErrInvalidParameter] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrInvalidParameter],\nfunc InvalidParameter(err error) error {\n\tif err == nil || IsInvalidParameter(err) {\n\t\treturn err\n\t}\n\treturn errInvalidParameter{err}\n}\n\ntype errConflict struct{ error }\n\nfunc (errConflict) Conflict() {}\n\nfunc (e errConflict) Cause() error {\n\treturn e.error\n}\n\nfunc (e errConflict) Unwrap() error {\n\treturn e.error\n}\n\n// Conflict creates an [ErrConflict] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrConflict],\nfunc Conflict(err error) error {\n\tif err == nil || IsConflict(err) {\n\t\treturn err\n\t}\n\treturn errConflict{err}\n}\n\ntype errUnauthorized struct{ error }\n\nfunc (errUnauthorized) Unauthorized() {}\n\nfunc (e errUnauthorized) Cause() error {\n\treturn e.error\n}\n\nfunc (e errUnauthorized) Unwrap() error {\n\treturn e.error\n}\n\n// Unauthorized creates an [ErrUnauthorized] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrUnauthorized],\nfunc Unauthorized(err error) error {\n\tif err == nil || IsUnauthorized(err) {\n\t\treturn err\n\t}\n\treturn errUnauthorized{err}\n}\n\ntype errUnavailable struct{ error }\n\nfunc (errUnavailable) Unavailable() {}\n\nfunc (e errUnavailable) Cause() error {\n\treturn e.error\n}\n\nfunc (e errUnavailable) Unwrap() error {\n\treturn e.error\n}\n\n// Unavailable creates an [ErrUnavailable] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrUnavailable],\nfunc Unavailable(err error) error {\n\tif err == nil || IsUnavailable(err) {\n\t\treturn err\n\t}\n\treturn errUnavailable{err}\n}\n\ntype errForbidden struct{ error }\n\nfunc (errForbidden) Forbidden() {}\n\nfunc (e errForbidden) Cause() error {\n\treturn e.error\n}\n\nfunc (e errForbidden) Unwrap() error {\n\treturn e.error\n}\n\n// Forbidden creates an [ErrForbidden] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrForbidden],\nfunc Forbidden(err error) error {\n\tif err == nil || IsForbidden(err) {\n\t\treturn err\n\t}\n\treturn errForbidden{err}\n}\n\ntype errSystem struct{ error }\n\nfunc (errSystem) System() {}\n\nfunc (e errSystem) Cause() error {\n\treturn e.error\n}\n\nfunc (e errSystem) Unwrap() error {\n\treturn e.error\n}\n\n// System creates an [ErrSystem] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrSystem],\nfunc System(err error) error {\n\tif err == nil || IsSystem(err) {\n\t\treturn err\n\t}\n\treturn errSystem{err}\n}\n\ntype errNotModified struct{ error }\n\nfunc (errNotModified) NotModified() {}\n\nfunc (e errNotModified) Cause() error {\n\treturn e.error\n}\n\nfunc (e errNotModified) Unwrap() error {\n\treturn e.error\n}\n\n// NotModified creates an [ErrNotModified] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [NotModified],\nfunc NotModified(err error) error {\n\tif err == nil || IsNotModified(err) {\n\t\treturn err\n\t}\n\treturn errNotModified{err}\n}\n\ntype errNotImplemented struct{ error }\n\nfunc (errNotImplemented) NotImplemented() {}\n\nfunc (e errNotImplemented) Cause() error {\n\treturn e.error\n}\n\nfunc (e errNotImplemented) Unwrap() error {\n\treturn e.error\n}\n\n// NotImplemented creates an [ErrNotImplemented] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrNotImplemented],\nfunc NotImplemented(err error) error {\n\tif err == nil || IsNotImplemented(err) {\n\t\treturn err\n\t}\n\treturn errNotImplemented{err}\n}\n\ntype errUnknown struct{ error }\n\nfunc (errUnknown) Unknown() {}\n\nfunc (e errUnknown) Cause() error {\n\treturn e.error\n}\n\nfunc (e errUnknown) Unwrap() error {\n\treturn e.error\n}\n\n// Unknown creates an [ErrUnknown] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrUnknown],\nfunc Unknown(err error) error {\n\tif err == nil || IsUnknown(err) {\n\t\treturn err\n\t}\n\treturn errUnknown{err}\n}\n\ntype errCancelled struct{ error }\n\nfunc (errCancelled) Cancelled() {}\n\nfunc (e errCancelled) Cause() error {\n\treturn e.error\n}\n\nfunc (e errCancelled) Unwrap() error {\n\treturn e.error\n}\n\n// Cancelled creates an [ErrCancelled] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrCancelled],\nfunc Cancelled(err error) error {\n\tif err == nil || IsCancelled(err) {\n\t\treturn err\n\t}\n\treturn errCancelled{err}\n}\n\ntype errDeadline struct{ error }\n\nfunc (errDeadline) DeadlineExceeded() {}\n\nfunc (e errDeadline) Cause() error {\n\treturn e.error\n}\n\nfunc (e errDeadline) Unwrap() error {\n\treturn e.error\n}\n\n// Deadline creates an [ErrDeadline] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrDeadline],\nfunc Deadline(err error) error {\n\tif err == nil || IsDeadline(err) {\n\t\treturn err\n\t}\n\treturn errDeadline{err}\n}\n\ntype errDataLoss struct{ error }\n\nfunc (errDataLoss) DataLoss() {}\n\nfunc (e errDataLoss) Cause() error {\n\treturn e.error\n}\n\nfunc (e errDataLoss) Unwrap() error {\n\treturn e.error\n}\n\n// DataLoss creates an [ErrDataLoss] error from the given error.\n// It returns the error as-is if it is either nil (no error) or already implements\n// [ErrDataLoss],\nfunc DataLoss(err error) error {\n\tif err == nil || IsDataLoss(err) {\n\t\treturn err\n\t}\n\treturn errDataLoss{err}\n}\n\n// FromContext returns the error class from the passed in context\nfunc FromContext(ctx context.Context) error {\n\te := ctx.Err()\n\tif e == nil {\n\t\treturn nil\n\t}\n\n\tif e == context.Canceled {\n\t\treturn Cancelled(e)\n\t}\n\tif e == context.DeadlineExceeded {\n\t\treturn Deadline(e)\n\t}\n\treturn Unknown(e)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/errdefs/http_helpers.go",
    "content": "package errdefs\n\nimport (\n\t\"net/http\"\n)\n\n// FromStatusCode creates an errdef error, based on the provided HTTP status-code\nfunc FromStatusCode(err error, statusCode int) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\tswitch statusCode {\n\tcase http.StatusNotFound:\n\t\treturn NotFound(err)\n\tcase http.StatusBadRequest:\n\t\treturn InvalidParameter(err)\n\tcase http.StatusConflict:\n\t\treturn Conflict(err)\n\tcase http.StatusUnauthorized:\n\t\treturn Unauthorized(err)\n\tcase http.StatusServiceUnavailable:\n\t\treturn Unavailable(err)\n\tcase http.StatusForbidden:\n\t\treturn Forbidden(err)\n\tcase http.StatusNotModified:\n\t\treturn NotModified(err)\n\tcase http.StatusNotImplemented:\n\t\treturn NotImplemented(err)\n\tcase http.StatusInternalServerError:\n\t\tif IsCancelled(err) || IsSystem(err) || IsUnknown(err) || IsDataLoss(err) || IsDeadline(err) {\n\t\t\treturn err\n\t\t}\n\t\treturn System(err)\n\tdefault:\n\t\tswitch {\n\t\tcase statusCode >= 200 && statusCode < 400:\n\t\t\t// it's a client error\n\t\t\treturn err\n\t\tcase statusCode >= 400 && statusCode < 500:\n\t\t\treturn InvalidParameter(err)\n\t\tcase statusCode >= 500 && statusCode < 600:\n\t\t\treturn System(err)\n\t\tdefault:\n\t\t\treturn Unknown(err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/errdefs/is.go",
    "content": "package errdefs\n\nimport (\n\t\"context\"\n\t\"errors\"\n)\n\ntype causer interface {\n\tCause() error\n}\n\ntype wrapErr interface {\n\tUnwrap() error\n}\n\nfunc getImplementer(err error) error {\n\tswitch e := err.(type) {\n\tcase\n\t\tErrNotFound,\n\t\tErrInvalidParameter,\n\t\tErrConflict,\n\t\tErrUnauthorized,\n\t\tErrUnavailable,\n\t\tErrForbidden,\n\t\tErrSystem,\n\t\tErrNotModified,\n\t\tErrNotImplemented,\n\t\tErrCancelled,\n\t\tErrDeadline,\n\t\tErrDataLoss,\n\t\tErrUnknown:\n\t\treturn err\n\tcase causer:\n\t\treturn getImplementer(e.Cause())\n\tcase wrapErr:\n\t\treturn getImplementer(e.Unwrap())\n\tdefault:\n\t\treturn err\n\t}\n}\n\n// IsNotFound returns if the passed in error is an [ErrNotFound],\nfunc IsNotFound(err error) bool {\n\t_, ok := getImplementer(err).(ErrNotFound)\n\treturn ok\n}\n\n// IsInvalidParameter returns if the passed in error is an [ErrInvalidParameter].\nfunc IsInvalidParameter(err error) bool {\n\t_, ok := getImplementer(err).(ErrInvalidParameter)\n\treturn ok\n}\n\n// IsConflict returns if the passed in error is an [ErrConflict].\nfunc IsConflict(err error) bool {\n\t_, ok := getImplementer(err).(ErrConflict)\n\treturn ok\n}\n\n// IsUnauthorized returns if the passed in error is an [ErrUnauthorized].\nfunc IsUnauthorized(err error) bool {\n\t_, ok := getImplementer(err).(ErrUnauthorized)\n\treturn ok\n}\n\n// IsUnavailable returns if the passed in error is an [ErrUnavailable].\nfunc IsUnavailable(err error) bool {\n\t_, ok := getImplementer(err).(ErrUnavailable)\n\treturn ok\n}\n\n// IsForbidden returns if the passed in error is an [ErrForbidden].\nfunc IsForbidden(err error) bool {\n\t_, ok := getImplementer(err).(ErrForbidden)\n\treturn ok\n}\n\n// IsSystem returns if the passed in error is an [ErrSystem].\nfunc IsSystem(err error) bool {\n\t_, ok := getImplementer(err).(ErrSystem)\n\treturn ok\n}\n\n// IsNotModified returns if the passed in error is an [ErrNotModified].\nfunc IsNotModified(err error) bool {\n\t_, ok := getImplementer(err).(ErrNotModified)\n\treturn ok\n}\n\n// IsNotImplemented returns if the passed in error is an [ErrNotImplemented].\nfunc IsNotImplemented(err error) bool {\n\t_, ok := getImplementer(err).(ErrNotImplemented)\n\treturn ok\n}\n\n// IsUnknown returns if the passed in error is an [ErrUnknown].\nfunc IsUnknown(err error) bool {\n\t_, ok := getImplementer(err).(ErrUnknown)\n\treturn ok\n}\n\n// IsCancelled returns if the passed in error is an [ErrCancelled].\nfunc IsCancelled(err error) bool {\n\t_, ok := getImplementer(err).(ErrCancelled)\n\treturn ok\n}\n\n// IsDeadline returns if the passed in error is an [ErrDeadline].\nfunc IsDeadline(err error) bool {\n\t_, ok := getImplementer(err).(ErrDeadline)\n\treturn ok\n}\n\n// IsDataLoss returns if the passed in error is an [ErrDataLoss].\nfunc IsDataLoss(err error) bool {\n\t_, ok := getImplementer(err).(ErrDataLoss)\n\treturn ok\n}\n\n// IsContext returns if the passed in error is due to context cancellation or deadline exceeded.\nfunc IsContext(err error) bool {\n\treturn errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/internal/lazyregexp/lazyregexp.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Code below was largely copied from golang.org/x/mod@v0.22;\n// https://github.com/golang/mod/blob/v0.22.0/internal/lazyregexp/lazyre.go\n// with some additional methods added.\n\n// Package lazyregexp is a thin wrapper over regexp, allowing the use of global\n// regexp variables without forcing them to be compiled at init.\npackage lazyregexp\n\nimport (\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// Regexp is a wrapper around [regexp.Regexp], where the underlying regexp will be\n// compiled the first time it is needed.\ntype Regexp struct {\n\tstr  string\n\tonce sync.Once\n\trx   *regexp.Regexp\n}\n\nfunc (r *Regexp) re() *regexp.Regexp {\n\tr.once.Do(r.build)\n\treturn r.rx\n}\n\nfunc (r *Regexp) build() {\n\tr.rx = regexp.MustCompile(r.str)\n\tr.str = \"\"\n}\n\nfunc (r *Regexp) FindSubmatch(s []byte) [][]byte {\n\treturn r.re().FindSubmatch(s)\n}\n\nfunc (r *Regexp) FindAllStringSubmatch(s string, n int) [][]string {\n\treturn r.re().FindAllStringSubmatch(s, n)\n}\n\nfunc (r *Regexp) FindStringSubmatch(s string) []string {\n\treturn r.re().FindStringSubmatch(s)\n}\n\nfunc (r *Regexp) FindStringSubmatchIndex(s string) []int {\n\treturn r.re().FindStringSubmatchIndex(s)\n}\n\nfunc (r *Regexp) ReplaceAllString(src, repl string) string {\n\treturn r.re().ReplaceAllString(src, repl)\n}\n\nfunc (r *Regexp) FindString(s string) string {\n\treturn r.re().FindString(s)\n}\n\nfunc (r *Regexp) FindAllString(s string, n int) []string {\n\treturn r.re().FindAllString(s, n)\n}\n\nfunc (r *Regexp) MatchString(s string) bool {\n\treturn r.re().MatchString(s)\n}\n\nfunc (r *Regexp) ReplaceAllStringFunc(src string, repl func(string) string) string {\n\treturn r.re().ReplaceAllStringFunc(src, repl)\n}\n\nfunc (r *Regexp) SubexpNames() []string {\n\treturn r.re().SubexpNames()\n}\n\nvar inTest = len(os.Args) > 0 && strings.HasSuffix(strings.TrimSuffix(os.Args[0], \".exe\"), \".test\")\n\n// New creates a new lazy regexp, delaying the compiling work until it is first\n// needed. If the code is being run as part of tests, the regexp compiling will\n// happen immediately.\nfunc New(str string) *Regexp {\n\tlr := &Regexp{str: str}\n\tif inTest {\n\t\t// In tests, always compile the regexps early.\n\t\tlr.re()\n\t}\n\treturn lr\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/internal/multierror/multierror.go",
    "content": "package multierror\n\nimport (\n\t\"strings\"\n)\n\n// Join is a drop-in replacement for errors.Join with better formatting.\nfunc Join(errs ...error) error {\n\tn := 0\n\tfor _, err := range errs {\n\t\tif err != nil {\n\t\t\tn++\n\t\t}\n\t}\n\tif n == 0 {\n\t\treturn nil\n\t}\n\te := &joinError{\n\t\terrs: make([]error, 0, n),\n\t}\n\tfor _, err := range errs {\n\t\tif err != nil {\n\t\t\te.errs = append(e.errs, err)\n\t\t}\n\t}\n\treturn e\n}\n\ntype joinError struct {\n\terrs []error\n}\n\nfunc (e *joinError) Error() string {\n\tif len(e.errs) == 1 {\n\t\treturn strings.TrimSpace(e.errs[0].Error())\n\t}\n\tstringErrs := make([]string, 0, len(e.errs))\n\tfor _, subErr := range e.errs {\n\t\tstringErrs = append(stringErrs, strings.Replace(subErr.Error(), \"\\n\", \"\\n\\t\", -1))\n\t}\n\treturn \"* \" + strings.Join(stringErrs, \"\\n* \")\n}\n\nfunc (e *joinError) Unwrap() []error {\n\treturn e.errs\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/archive.go",
    "content": "// Package archive provides helper functions for dealing with archive files.\npackage archive\n\nimport (\n\t\"archive/tar\"\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/bzip2\"\n\t\"compress/gzip\"\n\t\"context\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/containerd/log\"\n\t\"github.com/docker/docker/pkg/idtools\"\n\t\"github.com/klauspost/compress/zstd\"\n\t\"github.com/moby/patternmatcher\"\n\t\"github.com/moby/sys/sequential\"\n)\n\n// ImpliedDirectoryMode represents the mode (Unix permissions) applied to directories that are implied by files in a\n// tar, but that do not have their own header entry.\n//\n// The permissions mask is stored in a constant instead of locally to ensure that magic numbers do not\n// proliferate in the codebase. The default value 0755 has been selected based on the default umask of 0022, and\n// a convention of mkdir(1) calling mkdir(2) with permissions of 0777, resulting in a final value of 0755.\n//\n// This value is currently implementation-defined, and not captured in any cross-runtime specification. Thus, it is\n// subject to change in Moby at any time -- image authors who require consistent or known directory permissions\n// should explicitly control them by ensuring that header entries exist for any applicable path.\nconst ImpliedDirectoryMode = 0o755\n\ntype (\n\t// Compression is the state represents if compressed or not.\n\tCompression int\n\t// WhiteoutFormat is the format of whiteouts unpacked\n\tWhiteoutFormat int\n\n\t// TarOptions wraps the tar options.\n\tTarOptions struct {\n\t\tIncludeFiles     []string\n\t\tExcludePatterns  []string\n\t\tCompression      Compression\n\t\tNoLchown         bool\n\t\tIDMap            idtools.IdentityMapping\n\t\tChownOpts        *idtools.Identity\n\t\tIncludeSourceDir bool\n\t\t// WhiteoutFormat is the expected on disk format for whiteout files.\n\t\t// This format will be converted to the standard format on pack\n\t\t// and from the standard format on unpack.\n\t\tWhiteoutFormat WhiteoutFormat\n\t\t// When unpacking, specifies whether overwriting a directory with a\n\t\t// non-directory is allowed and vice versa.\n\t\tNoOverwriteDirNonDir bool\n\t\t// For each include when creating an archive, the included name will be\n\t\t// replaced with the matching name from this map.\n\t\tRebaseNames map[string]string\n\t\tInUserNS    bool\n\t\t// Allow unpacking to succeed in spite of failures to set extended\n\t\t// attributes on the unpacked files due to the destination filesystem\n\t\t// not supporting them or a lack of permissions. Extended attributes\n\t\t// were probably in the archive for a reason, so set this option at\n\t\t// your own peril.\n\t\tBestEffortXattrs bool\n\t}\n)\n\n// Archiver implements the Archiver interface and allows the reuse of most utility functions of\n// this package with a pluggable Untar function. Also, to facilitate the passing of specific id\n// mappings for untar, an Archiver can be created with maps which will then be passed to Untar operations.\ntype Archiver struct {\n\tUntar     func(io.Reader, string, *TarOptions) error\n\tIDMapping idtools.IdentityMapping\n}\n\n// NewDefaultArchiver returns a new Archiver without any IdentityMapping\nfunc NewDefaultArchiver() *Archiver {\n\treturn &Archiver{Untar: Untar}\n}\n\n// breakoutError is used to differentiate errors related to breaking out\n// When testing archive breakout in the unit tests, this error is expected\n// in order for the test to pass.\ntype breakoutError error\n\nconst (\n\tUncompressed Compression = 0 // Uncompressed represents the uncompressed.\n\tBzip2        Compression = 1 // Bzip2 is bzip2 compression algorithm.\n\tGzip         Compression = 2 // Gzip is gzip compression algorithm.\n\tXz           Compression = 3 // Xz is xz compression algorithm.\n\tZstd         Compression = 4 // Zstd is zstd compression algorithm.\n)\n\nconst (\n\tAUFSWhiteoutFormat    WhiteoutFormat = 0 // AUFSWhiteoutFormat is the default format for whiteouts\n\tOverlayWhiteoutFormat WhiteoutFormat = 1 // OverlayWhiteoutFormat formats whiteout according to the overlay standard.\n)\n\n// IsArchivePath checks if the (possibly compressed) file at the given path\n// starts with a tar file header.\nfunc IsArchivePath(path string) bool {\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn false\n\t}\n\tdefer file.Close()\n\trdr, err := DecompressStream(file)\n\tif err != nil {\n\t\treturn false\n\t}\n\tdefer rdr.Close()\n\tr := tar.NewReader(rdr)\n\t_, err = r.Next()\n\treturn err == nil\n}\n\nconst (\n\tzstdMagicSkippableStart = 0x184D2A50\n\tzstdMagicSkippableMask  = 0xFFFFFFF0\n)\n\nvar (\n\tbzip2Magic = []byte{0x42, 0x5A, 0x68}\n\tgzipMagic  = []byte{0x1F, 0x8B, 0x08}\n\txzMagic    = []byte{0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00}\n\tzstdMagic  = []byte{0x28, 0xb5, 0x2f, 0xfd}\n)\n\ntype matcher = func([]byte) bool\n\nfunc magicNumberMatcher(m []byte) matcher {\n\treturn func(source []byte) bool {\n\t\treturn bytes.HasPrefix(source, m)\n\t}\n}\n\n// zstdMatcher detects zstd compression algorithm.\n// Zstandard compressed data is made of one or more frames.\n// There are two frame formats defined by Zstandard: Zstandard frames and Skippable frames.\n// See https://datatracker.ietf.org/doc/html/rfc8878#section-3 for more details.\nfunc zstdMatcher() matcher {\n\treturn func(source []byte) bool {\n\t\tif bytes.HasPrefix(source, zstdMagic) {\n\t\t\t// Zstandard frame\n\t\t\treturn true\n\t\t}\n\t\t// skippable frame\n\t\tif len(source) < 8 {\n\t\t\treturn false\n\t\t}\n\t\t// magic number from 0x184D2A50 to 0x184D2A5F.\n\t\tif binary.LittleEndian.Uint32(source[:4])&zstdMagicSkippableMask == zstdMagicSkippableStart {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\n// DetectCompression detects the compression algorithm of the source.\nfunc DetectCompression(source []byte) Compression {\n\tcompressionMap := map[Compression]matcher{\n\t\tBzip2: magicNumberMatcher(bzip2Magic),\n\t\tGzip:  magicNumberMatcher(gzipMagic),\n\t\tXz:    magicNumberMatcher(xzMagic),\n\t\tZstd:  zstdMatcher(),\n\t}\n\tfor _, compression := range []Compression{Bzip2, Gzip, Xz, Zstd} {\n\t\tfn := compressionMap[compression]\n\t\tif fn(source) {\n\t\t\treturn compression\n\t\t}\n\t}\n\treturn Uncompressed\n}\n\nfunc xzDecompress(ctx context.Context, archive io.Reader) (io.ReadCloser, error) {\n\targs := []string{\"xz\", \"-d\", \"-c\", \"-q\"}\n\n\treturn cmdStream(exec.CommandContext(ctx, args[0], args[1:]...), archive)\n}\n\nfunc gzDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) {\n\tif noPigzEnv := os.Getenv(\"MOBY_DISABLE_PIGZ\"); noPigzEnv != \"\" {\n\t\tnoPigz, err := strconv.ParseBool(noPigzEnv)\n\t\tif err != nil {\n\t\t\tlog.G(ctx).WithError(err).Warn(\"invalid value in MOBY_DISABLE_PIGZ env var\")\n\t\t}\n\t\tif noPigz {\n\t\t\tlog.G(ctx).Debugf(\"Use of pigz is disabled due to MOBY_DISABLE_PIGZ=%s\", noPigzEnv)\n\t\t\treturn gzip.NewReader(buf)\n\t\t}\n\t}\n\n\tunpigzPath, err := exec.LookPath(\"unpigz\")\n\tif err != nil {\n\t\tlog.G(ctx).Debugf(\"unpigz binary not found, falling back to go gzip library\")\n\t\treturn gzip.NewReader(buf)\n\t}\n\n\tlog.G(ctx).Debugf(\"Using %s to decompress\", unpigzPath)\n\n\treturn cmdStream(exec.CommandContext(ctx, unpigzPath, \"-d\", \"-c\"), buf)\n}\n\ntype readCloserWrapper struct {\n\tio.Reader\n\tcloser func() error\n\tclosed atomic.Bool\n}\n\nfunc (r *readCloserWrapper) Close() error {\n\tif !r.closed.CompareAndSwap(false, true) {\n\t\tlog.G(context.TODO()).Error(\"subsequent attempt to close readCloserWrapper\")\n\t\tif log.GetLevel() >= log.DebugLevel {\n\t\t\tlog.G(context.TODO()).Errorf(\"stack trace: %s\", string(debug.Stack()))\n\t\t}\n\n\t\treturn nil\n\t}\n\tif r.closer != nil {\n\t\treturn r.closer()\n\t}\n\treturn nil\n}\n\nvar (\n\tbufioReader32KPool = &sync.Pool{\n\t\tNew: func() interface{} { return bufio.NewReaderSize(nil, 32*1024) },\n\t}\n)\n\ntype bufferedReader struct {\n\tbuf *bufio.Reader\n}\n\nfunc newBufferedReader(r io.Reader) *bufferedReader {\n\tbuf := bufioReader32KPool.Get().(*bufio.Reader)\n\tbuf.Reset(r)\n\treturn &bufferedReader{buf}\n}\n\nfunc (r *bufferedReader) Read(p []byte) (n int, err error) {\n\tif r.buf == nil {\n\t\treturn 0, io.EOF\n\t}\n\tn, err = r.buf.Read(p)\n\tif err == io.EOF {\n\t\tr.buf.Reset(nil)\n\t\tbufioReader32KPool.Put(r.buf)\n\t\tr.buf = nil\n\t}\n\treturn\n}\n\nfunc (r *bufferedReader) Peek(n int) ([]byte, error) {\n\tif r.buf == nil {\n\t\treturn nil, io.EOF\n\t}\n\treturn r.buf.Peek(n)\n}\n\n// DecompressStream decompresses the archive and returns a ReaderCloser with the decompressed archive.\nfunc DecompressStream(archive io.Reader) (io.ReadCloser, error) {\n\tbuf := newBufferedReader(archive)\n\tbs, err := buf.Peek(10)\n\tif err != nil && err != io.EOF {\n\t\t// Note: we'll ignore any io.EOF error because there are some odd\n\t\t// cases where the layer.tar file will be empty (zero bytes) and\n\t\t// that results in an io.EOF from the Peek() call. So, in those\n\t\t// cases we'll just treat it as a non-compressed stream and\n\t\t// that means just create an empty layer.\n\t\t// See Issue 18170\n\t\treturn nil, err\n\t}\n\n\tcompression := DetectCompression(bs)\n\tswitch compression {\n\tcase Uncompressed:\n\t\treturn &readCloserWrapper{\n\t\t\tReader: buf,\n\t\t}, nil\n\tcase Gzip:\n\t\tctx, cancel := context.WithCancel(context.Background())\n\n\t\tgzReader, err := gzDecompress(ctx, buf)\n\t\tif err != nil {\n\t\t\tcancel()\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &readCloserWrapper{\n\t\t\tReader: gzReader,\n\t\t\tcloser: func() error {\n\t\t\t\tcancel()\n\t\t\t\treturn gzReader.Close()\n\t\t\t},\n\t\t}, nil\n\tcase Bzip2:\n\t\tbz2Reader := bzip2.NewReader(buf)\n\t\treturn &readCloserWrapper{\n\t\t\tReader: bz2Reader,\n\t\t}, nil\n\tcase Xz:\n\t\tctx, cancel := context.WithCancel(context.Background())\n\n\t\txzReader, err := xzDecompress(ctx, buf)\n\t\tif err != nil {\n\t\t\tcancel()\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn &readCloserWrapper{\n\t\t\tReader: xzReader,\n\t\t\tcloser: func() error {\n\t\t\t\tcancel()\n\t\t\t\treturn xzReader.Close()\n\t\t\t},\n\t\t}, nil\n\tcase Zstd:\n\t\tzstdReader, err := zstd.NewReader(buf)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &readCloserWrapper{\n\t\t\tReader: zstdReader,\n\t\t\tcloser: func() error {\n\t\t\t\tzstdReader.Close()\n\t\t\t\treturn nil\n\t\t\t},\n\t\t}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Unsupported compression format %s\", (&compression).Extension())\n\t}\n}\n\ntype nopWriteCloser struct {\n\tio.Writer\n}\n\nfunc (nopWriteCloser) Close() error { return nil }\n\n// CompressStream compresses the dest with specified compression algorithm.\nfunc CompressStream(dest io.Writer, compression Compression) (io.WriteCloser, error) {\n\tswitch compression {\n\tcase Uncompressed:\n\t\treturn nopWriteCloser{dest}, nil\n\tcase Gzip:\n\t\treturn gzip.NewWriter(dest), nil\n\tcase Bzip2, Xz:\n\t\t// archive/bzip2 does not support writing, and there is no xz support at all\n\t\t// However, this is not a problem as docker only currently generates gzipped tars\n\t\treturn nil, fmt.Errorf(\"Unsupported compression format %s\", (&compression).Extension())\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Unsupported compression format %s\", (&compression).Extension())\n\t}\n}\n\n// TarModifierFunc is a function that can be passed to ReplaceFileTarWrapper to\n// modify the contents or header of an entry in the archive. If the file already\n// exists in the archive the TarModifierFunc will be called with the Header and\n// a reader which will return the files content. If the file does not exist both\n// header and content will be nil.\ntype TarModifierFunc func(path string, header *tar.Header, content io.Reader) (*tar.Header, []byte, error)\n\n// ReplaceFileTarWrapper converts inputTarStream to a new tar stream. Files in the\n// tar stream are modified if they match any of the keys in mods.\nfunc ReplaceFileTarWrapper(inputTarStream io.ReadCloser, mods map[string]TarModifierFunc) io.ReadCloser {\n\tpipeReader, pipeWriter := io.Pipe()\n\n\tgo func() {\n\t\ttarReader := tar.NewReader(inputTarStream)\n\t\ttarWriter := tar.NewWriter(pipeWriter)\n\t\tdefer inputTarStream.Close()\n\t\tdefer tarWriter.Close()\n\n\t\tmodify := func(name string, original *tar.Header, modifier TarModifierFunc, tarReader io.Reader) error {\n\t\t\theader, data, err := modifier(name, original, tarReader)\n\t\t\tswitch {\n\t\t\tcase err != nil:\n\t\t\t\treturn err\n\t\t\tcase header == nil:\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif header.Name == \"\" {\n\t\t\t\theader.Name = name\n\t\t\t}\n\t\t\theader.Size = int64(len(data))\n\t\t\tif err := tarWriter.WriteHeader(header); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif len(data) != 0 {\n\t\t\t\tif _, err := tarWriter.Write(data); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tvar err error\n\t\tvar originalHeader *tar.Header\n\t\tfor {\n\t\t\toriginalHeader, err = tarReader.Next()\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tpipeWriter.CloseWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tmodifier, ok := mods[originalHeader.Name]\n\t\t\tif !ok {\n\t\t\t\t// No modifiers for this file, copy the header and data\n\t\t\t\tif err := tarWriter.WriteHeader(originalHeader); err != nil {\n\t\t\t\t\tpipeWriter.CloseWithError(err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif _, err := copyWithBuffer(tarWriter, tarReader); err != nil {\n\t\t\t\t\tpipeWriter.CloseWithError(err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdelete(mods, originalHeader.Name)\n\n\t\t\tif err := modify(originalHeader.Name, originalHeader, modifier, tarReader); err != nil {\n\t\t\t\tpipeWriter.CloseWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\t// Apply the modifiers that haven't matched any files in the archive\n\t\tfor name, modifier := range mods {\n\t\t\tif err := modify(name, nil, modifier, nil); err != nil {\n\t\t\t\tpipeWriter.CloseWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tpipeWriter.Close()\n\t}()\n\treturn pipeReader\n}\n\n// Extension returns the extension of a file that uses the specified compression algorithm.\nfunc (compression *Compression) Extension() string {\n\tswitch *compression {\n\tcase Uncompressed:\n\t\treturn \"tar\"\n\tcase Bzip2:\n\t\treturn \"tar.bz2\"\n\tcase Gzip:\n\t\treturn \"tar.gz\"\n\tcase Xz:\n\t\treturn \"tar.xz\"\n\tcase Zstd:\n\t\treturn \"tar.zst\"\n\t}\n\treturn \"\"\n}\n\n// assert that we implement [tar.FileInfoNames].\n//\n// TODO(thaJeztah): disabled to allow compiling on < go1.23. un-comment once we drop support for older versions of go.\n// var _ tar.FileInfoNames = (*nosysFileInfo)(nil)\n\n// nosysFileInfo hides the system-dependent info of the wrapped FileInfo to\n// prevent tar.FileInfoHeader from introspecting it and potentially calling into\n// glibc.\n//\n// It implements [tar.FileInfoNames] to further prevent [tar.FileInfoHeader]\n// from performing any lookups on go1.23 and up. see https://go.dev/issue/50102\ntype nosysFileInfo struct {\n\tos.FileInfo\n}\n\n// Uname stubs out looking up username. It implements [tar.FileInfoNames]\n// to prevent [tar.FileInfoHeader] from loading libraries to perform\n// username lookups.\nfunc (fi nosysFileInfo) Uname() (string, error) {\n\treturn \"\", nil\n}\n\n// Gname stubs out looking up group-name. It implements [tar.FileInfoNames]\n// to prevent [tar.FileInfoHeader] from loading libraries to perform\n// username lookups.\nfunc (fi nosysFileInfo) Gname() (string, error) {\n\treturn \"\", nil\n}\n\nfunc (fi nosysFileInfo) Sys() interface{} {\n\t// A Sys value of type *tar.Header is safe as it is system-independent.\n\t// The tar.FileInfoHeader function copies the fields into the returned\n\t// header without performing any OS lookups.\n\tif sys, ok := fi.FileInfo.Sys().(*tar.Header); ok {\n\t\treturn sys\n\t}\n\treturn nil\n}\n\n// sysStat, if non-nil, populates hdr from system-dependent fields of fi.\nvar sysStat func(fi os.FileInfo, hdr *tar.Header) error\n\n// FileInfoHeaderNoLookups creates a partially-populated tar.Header from fi.\n//\n// Compared to the archive/tar.FileInfoHeader function, this function is safe to\n// call from a chrooted process as it does not populate fields which would\n// require operating system lookups. It behaves identically to\n// tar.FileInfoHeader when fi is a FileInfo value returned from\n// tar.Header.FileInfo().\n//\n// When fi is a FileInfo for a native file, such as returned from os.Stat() and\n// os.Lstat(), the returned Header value differs from one returned from\n// tar.FileInfoHeader in the following ways. The Uname and Gname fields are not\n// set as OS lookups would be required to populate them. The AccessTime and\n// ChangeTime fields are not currently set (not yet implemented) although that\n// is subject to change. Callers which require the AccessTime or ChangeTime\n// fields to be zeroed should explicitly zero them out in the returned Header\n// value to avoid any compatibility issues in the future.\nfunc FileInfoHeaderNoLookups(fi os.FileInfo, link string) (*tar.Header, error) {\n\thdr, err := tar.FileInfoHeader(nosysFileInfo{fi}, link)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif sysStat != nil {\n\t\treturn hdr, sysStat(fi, hdr)\n\t}\n\treturn hdr, nil\n}\n\n// FileInfoHeader creates a populated Header from fi.\n//\n// Compared to the archive/tar package, this function fills in less information\n// but is safe to call from a chrooted process. The AccessTime and ChangeTime\n// fields are not set in the returned header, ModTime is truncated to one-second\n// precision, and the Uname and Gname fields are only set when fi is a FileInfo\n// value returned from tar.Header.FileInfo().\nfunc FileInfoHeader(name string, fi os.FileInfo, link string) (*tar.Header, error) {\n\thdr, err := FileInfoHeaderNoLookups(fi, link)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thdr.Format = tar.FormatPAX\n\thdr.ModTime = hdr.ModTime.Truncate(time.Second)\n\thdr.AccessTime = time.Time{}\n\thdr.ChangeTime = time.Time{}\n\thdr.Mode = int64(chmodTarEntry(os.FileMode(hdr.Mode)))\n\thdr.Name = canonicalTarName(name, fi.IsDir())\n\treturn hdr, nil\n}\n\nconst paxSchilyXattr = \"SCHILY.xattr.\"\n\n// ReadSecurityXattrToTarHeader reads security.capability xattr from filesystem\n// to a tar header\nfunc ReadSecurityXattrToTarHeader(path string, hdr *tar.Header) error {\n\tconst (\n\t\t// Values based on linux/include/uapi/linux/capability.h\n\t\txattrCapsSz2    = 20\n\t\tversionOffset   = 3\n\t\tvfsCapRevision2 = 2\n\t\tvfsCapRevision3 = 3\n\t)\n\tcapability, _ := lgetxattr(path, \"security.capability\")\n\tif capability != nil {\n\t\tif capability[versionOffset] == vfsCapRevision3 {\n\t\t\t// Convert VFS_CAP_REVISION_3 to VFS_CAP_REVISION_2 as root UID makes no\n\t\t\t// sense outside the user namespace the archive is built in.\n\t\t\tcapability[versionOffset] = vfsCapRevision2\n\t\t\tcapability = capability[:xattrCapsSz2]\n\t\t}\n\t\tif hdr.PAXRecords == nil {\n\t\t\thdr.PAXRecords = make(map[string]string)\n\t\t}\n\t\thdr.PAXRecords[paxSchilyXattr+\"security.capability\"] = string(capability)\n\t}\n\treturn nil\n}\n\ntype tarWhiteoutConverter interface {\n\tConvertWrite(*tar.Header, string, os.FileInfo) (*tar.Header, error)\n\tConvertRead(*tar.Header, string) (bool, error)\n}\n\ntype tarAppender struct {\n\tTarWriter *tar.Writer\n\n\t// for hardlink mapping\n\tSeenFiles       map[uint64]string\n\tIdentityMapping idtools.IdentityMapping\n\tChownOpts       *idtools.Identity\n\n\t// For packing and unpacking whiteout files in the\n\t// non standard format. The whiteout files defined\n\t// by the AUFS standard are used as the tar whiteout\n\t// standard.\n\tWhiteoutConverter tarWhiteoutConverter\n}\n\nfunc newTarAppender(idMapping idtools.IdentityMapping, writer io.Writer, chownOpts *idtools.Identity) *tarAppender {\n\treturn &tarAppender{\n\t\tSeenFiles:       make(map[uint64]string),\n\t\tTarWriter:       tar.NewWriter(writer),\n\t\tIdentityMapping: idMapping,\n\t\tChownOpts:       chownOpts,\n\t}\n}\n\n// canonicalTarName provides a platform-independent and consistent POSIX-style\n// path for files and directories to be archived regardless of the platform.\nfunc canonicalTarName(name string, isDir bool) string {\n\tname = filepath.ToSlash(name)\n\n\t// suffix with '/' for directories\n\tif isDir && !strings.HasSuffix(name, \"/\") {\n\t\tname += \"/\"\n\t}\n\treturn name\n}\n\n// addTarFile adds to the tar archive a file from `path` as `name`\nfunc (ta *tarAppender) addTarFile(path, name string) error {\n\tfi, err := os.Lstat(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar link string\n\tif fi.Mode()&os.ModeSymlink != 0 {\n\t\tvar err error\n\t\tlink, err = os.Readlink(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\thdr, err := FileInfoHeader(name, fi, link)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := ReadSecurityXattrToTarHeader(path, hdr); err != nil {\n\t\treturn err\n\t}\n\n\t// if it's not a directory and has more than 1 link,\n\t// it's hard linked, so set the type flag accordingly\n\tif !fi.IsDir() && hasHardlinks(fi) {\n\t\tinode, err := getInodeFromStat(fi.Sys())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// a link should have a name that it links too\n\t\t// and that linked name should be first in the tar archive\n\t\tif oldpath, ok := ta.SeenFiles[inode]; ok {\n\t\t\thdr.Typeflag = tar.TypeLink\n\t\t\thdr.Linkname = oldpath\n\t\t\thdr.Size = 0 // This Must be here for the writer math to add up!\n\t\t} else {\n\t\t\tta.SeenFiles[inode] = name\n\t\t}\n\t}\n\n\t// check whether the file is overlayfs whiteout\n\t// if yes, skip re-mapping container ID mappings.\n\tisOverlayWhiteout := fi.Mode()&os.ModeCharDevice != 0 && hdr.Devmajor == 0 && hdr.Devminor == 0\n\n\t// handle re-mapping container ID mappings back to host ID mappings before\n\t// writing tar headers/files. We skip whiteout files because they were written\n\t// by the kernel and already have proper ownership relative to the host\n\tif !isOverlayWhiteout && !strings.HasPrefix(filepath.Base(hdr.Name), WhiteoutPrefix) && !ta.IdentityMapping.Empty() {\n\t\tfileIDPair, err := getFileUIDGID(fi.Sys())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thdr.Uid, hdr.Gid, err = ta.IdentityMapping.ToContainer(fileIDPair)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// explicitly override with ChownOpts\n\tif ta.ChownOpts != nil {\n\t\thdr.Uid = ta.ChownOpts.UID\n\t\thdr.Gid = ta.ChownOpts.GID\n\t}\n\n\tif ta.WhiteoutConverter != nil {\n\t\two, err := ta.WhiteoutConverter.ConvertWrite(hdr, path, fi)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// If a new whiteout file exists, write original hdr, then\n\t\t// replace hdr with wo to be written after. Whiteouts should\n\t\t// always be written after the original. Note the original\n\t\t// hdr may have been updated to be a whiteout with returning\n\t\t// a whiteout header\n\t\tif wo != nil {\n\t\t\tif err := ta.TarWriter.WriteHeader(hdr); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif hdr.Typeflag == tar.TypeReg && hdr.Size > 0 {\n\t\t\t\treturn fmt.Errorf(\"tar: cannot use whiteout for non-empty file\")\n\t\t\t}\n\t\t\thdr = wo\n\t\t}\n\t}\n\n\tif err := ta.TarWriter.WriteHeader(hdr); err != nil {\n\t\treturn err\n\t}\n\n\tif hdr.Typeflag == tar.TypeReg && hdr.Size > 0 {\n\t\t// We use sequential file access to avoid depleting the standby list on\n\t\t// Windows. On Linux, this equates to a regular os.Open.\n\t\tfile, err := sequential.Open(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t_, err = copyWithBuffer(ta.TarWriter, file)\n\t\tfile.Close()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, opts *TarOptions) error {\n\tvar (\n\t\tLchown                     = true\n\t\tinUserns, bestEffortXattrs bool\n\t\tchownOpts                  *idtools.Identity\n\t)\n\n\t// TODO(thaJeztah): make opts a required argument.\n\tif opts != nil {\n\t\tLchown = !opts.NoLchown\n\t\tinUserns = opts.InUserNS // TODO(thaJeztah): consider deprecating opts.InUserNS and detect locally.\n\t\tchownOpts = opts.ChownOpts\n\t\tbestEffortXattrs = opts.BestEffortXattrs\n\t}\n\n\t// hdr.Mode is in linux format, which we can use for sycalls,\n\t// but for os.Foo() calls we need the mode converted to os.FileMode,\n\t// so use hdrInfo.Mode() (they differ for e.g. setuid bits)\n\thdrInfo := hdr.FileInfo()\n\n\tswitch hdr.Typeflag {\n\tcase tar.TypeDir:\n\t\t// Create directory unless it exists as a directory already.\n\t\t// In that case we just want to merge the two\n\t\tif fi, err := os.Lstat(path); !(err == nil && fi.IsDir()) {\n\t\t\tif err := os.Mkdir(path, hdrInfo.Mode()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\tcase tar.TypeReg:\n\t\t// Source is regular file. We use sequential file access to avoid depleting\n\t\t// the standby list on Windows. On Linux, this equates to a regular os.OpenFile.\n\t\tfile, err := sequential.OpenFile(path, os.O_CREATE|os.O_WRONLY, hdrInfo.Mode())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := copyWithBuffer(file, reader); err != nil {\n\t\t\tfile.Close()\n\t\t\treturn err\n\t\t}\n\t\tfile.Close()\n\n\tcase tar.TypeBlock, tar.TypeChar:\n\t\tif inUserns { // cannot create devices in a userns\n\t\t\tlog.G(context.TODO()).WithFields(log.Fields{\"path\": path, \"type\": hdr.Typeflag}).Debug(\"skipping device nodes in a userns\")\n\t\t\treturn nil\n\t\t}\n\t\t// Handle this is an OS-specific way\n\t\tif err := handleTarTypeBlockCharFifo(hdr, path); err != nil {\n\t\t\treturn err\n\t\t}\n\n\tcase tar.TypeFifo:\n\t\t// Handle this is an OS-specific way\n\t\tif err := handleTarTypeBlockCharFifo(hdr, path); err != nil {\n\t\t\tif inUserns && errors.Is(err, syscall.EPERM) {\n\t\t\t\t// In most cases, cannot create a fifo if running in user namespace\n\t\t\t\tlog.G(context.TODO()).WithFields(log.Fields{\"error\": err, \"path\": path, \"type\": hdr.Typeflag}).Debug(\"creating fifo node in a userns\")\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\tcase tar.TypeLink:\n\t\t// #nosec G305 -- The target path is checked for path traversal.\n\t\ttargetPath := filepath.Join(extractDir, hdr.Linkname)\n\t\t// check for hardlink breakout\n\t\tif !strings.HasPrefix(targetPath, extractDir) {\n\t\t\treturn breakoutError(fmt.Errorf(\"invalid hardlink %q -> %q\", targetPath, hdr.Linkname))\n\t\t}\n\t\tif err := os.Link(targetPath, path); err != nil {\n\t\t\treturn err\n\t\t}\n\n\tcase tar.TypeSymlink:\n\t\t// \tpath \t\t\t\t-> hdr.Linkname = targetPath\n\t\t// e.g. /extractDir/path/to/symlink \t-> ../2/file\t= /extractDir/path/2/file\n\t\ttargetPath := filepath.Join(filepath.Dir(path), hdr.Linkname) // #nosec G305 -- The target path is checked for path traversal.\n\n\t\t// the reason we don't need to check symlinks in the path (with FollowSymlinkInScope) is because\n\t\t// that symlink would first have to be created, which would be caught earlier, at this very check:\n\t\tif !strings.HasPrefix(targetPath, extractDir) {\n\t\t\treturn breakoutError(fmt.Errorf(\"invalid symlink %q -> %q\", path, hdr.Linkname))\n\t\t}\n\t\tif err := os.Symlink(hdr.Linkname, path); err != nil {\n\t\t\treturn err\n\t\t}\n\n\tcase tar.TypeXGlobalHeader:\n\t\tlog.G(context.TODO()).Debug(\"PAX Global Extended Headers found and ignored\")\n\t\treturn nil\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unhandled tar header type %d\", hdr.Typeflag)\n\t}\n\n\t// Lchown is not supported on Windows.\n\tif Lchown && runtime.GOOS != \"windows\" {\n\t\tif chownOpts == nil {\n\t\t\tchownOpts = &idtools.Identity{UID: hdr.Uid, GID: hdr.Gid}\n\t\t}\n\t\tif err := os.Lchown(path, chownOpts.UID, chownOpts.GID); err != nil {\n\t\t\tvar msg string\n\t\t\tif inUserns && errors.Is(err, syscall.EINVAL) {\n\t\t\t\tmsg = \" (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid)\"\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"failed to Lchown %q for UID %d, GID %d%s: %w\", path, hdr.Uid, hdr.Gid, msg, err)\n\t\t}\n\t}\n\n\tvar xattrErrs []string\n\tfor key, value := range hdr.PAXRecords {\n\t\txattr, ok := strings.CutPrefix(key, paxSchilyXattr)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tif err := lsetxattr(path, xattr, []byte(value), 0); err != nil {\n\t\t\tif bestEffortXattrs && errors.Is(err, syscall.ENOTSUP) || errors.Is(err, syscall.EPERM) {\n\t\t\t\t// EPERM occurs if modifying xattrs is not allowed. This can\n\t\t\t\t// happen when running in userns with restrictions (ChromeOS).\n\t\t\t\txattrErrs = append(xattrErrs, err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif len(xattrErrs) > 0 {\n\t\tlog.G(context.TODO()).WithFields(log.Fields{\n\t\t\t\"errors\": xattrErrs,\n\t\t}).Warn(\"ignored xattrs in archive: underlying filesystem doesn't support them\")\n\t}\n\n\t// There is no LChmod, so ignore mode for symlink. Also, this\n\t// must happen after chown, as that can modify the file mode\n\tif err := handleLChmod(hdr, path, hdrInfo); err != nil {\n\t\treturn err\n\t}\n\n\taTime := boundTime(latestTime(hdr.AccessTime, hdr.ModTime))\n\tmTime := boundTime(hdr.ModTime)\n\n\t// chtimes doesn't support a NOFOLLOW flag atm\n\tif hdr.Typeflag == tar.TypeLink {\n\t\tif fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {\n\t\t\tif err := chtimes(path, aTime, mTime); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t} else if hdr.Typeflag != tar.TypeSymlink {\n\t\tif err := chtimes(path, aTime, mTime); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tif err := lchtimes(path, aTime, mTime); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Tar creates an archive from the directory at `path`, and returns it as a\n// stream of bytes.\nfunc Tar(path string, compression Compression) (io.ReadCloser, error) {\n\treturn TarWithOptions(path, &TarOptions{Compression: compression})\n}\n\n// TarWithOptions creates an archive from the directory at `path`, only including files whose relative\n// paths are included in `options.IncludeFiles` (if non-nil) or not in `options.ExcludePatterns`.\nfunc TarWithOptions(srcPath string, options *TarOptions) (io.ReadCloser, error) {\n\ttb, err := NewTarballer(srcPath, options)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo tb.Do()\n\treturn tb.Reader(), nil\n}\n\n// Tarballer is a lower-level interface to TarWithOptions which gives the caller\n// control over which goroutine the archiving operation executes on.\ntype Tarballer struct {\n\tsrcPath           string\n\toptions           *TarOptions\n\tpm                *patternmatcher.PatternMatcher\n\tpipeReader        *io.PipeReader\n\tpipeWriter        *io.PipeWriter\n\tcompressWriter    io.WriteCloser\n\twhiteoutConverter tarWhiteoutConverter\n}\n\n// NewTarballer constructs a new tarballer. The arguments are the same as for\n// TarWithOptions.\nfunc NewTarballer(srcPath string, options *TarOptions) (*Tarballer, error) {\n\tpm, err := patternmatcher.New(options.ExcludePatterns)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpipeReader, pipeWriter := io.Pipe()\n\n\tcompressWriter, err := CompressStream(pipeWriter, options.Compression)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &Tarballer{\n\t\t// Fix the source path to work with long path names. This is a no-op\n\t\t// on platforms other than Windows.\n\t\tsrcPath:           addLongPathPrefix(srcPath),\n\t\toptions:           options,\n\t\tpm:                pm,\n\t\tpipeReader:        pipeReader,\n\t\tpipeWriter:        pipeWriter,\n\t\tcompressWriter:    compressWriter,\n\t\twhiteoutConverter: getWhiteoutConverter(options.WhiteoutFormat),\n\t}, nil\n}\n\n// Reader returns the reader for the created archive.\nfunc (t *Tarballer) Reader() io.ReadCloser {\n\treturn t.pipeReader\n}\n\n// Do performs the archiving operation in the background. The resulting archive\n// can be read from t.Reader(). Do should only be called once on each Tarballer\n// instance.\nfunc (t *Tarballer) Do() {\n\tta := newTarAppender(\n\t\tt.options.IDMap,\n\t\tt.compressWriter,\n\t\tt.options.ChownOpts,\n\t)\n\tta.WhiteoutConverter = t.whiteoutConverter\n\n\tdefer func() {\n\t\t// Make sure to check the error on Close.\n\t\tif err := ta.TarWriter.Close(); err != nil {\n\t\t\tlog.G(context.TODO()).Errorf(\"Can't close tar writer: %s\", err)\n\t\t}\n\t\tif err := t.compressWriter.Close(); err != nil {\n\t\t\tlog.G(context.TODO()).Errorf(\"Can't close compress writer: %s\", err)\n\t\t}\n\t\tif err := t.pipeWriter.Close(); err != nil {\n\t\t\tlog.G(context.TODO()).Errorf(\"Can't close pipe writer: %s\", err)\n\t\t}\n\t}()\n\n\t// In general we log errors here but ignore them because\n\t// during e.g. a diff operation the container can continue\n\t// mutating the filesystem and we can see transient errors\n\t// from this\n\n\tstat, err := os.Lstat(t.srcPath)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif !stat.IsDir() {\n\t\t// We can't later join a non-dir with any includes because the\n\t\t// 'walk' will error if \"file/.\" is stat-ed and \"file\" is not a\n\t\t// directory. So, we must split the source path and use the\n\t\t// basename as the include.\n\t\tif len(t.options.IncludeFiles) > 0 {\n\t\t\tlog.G(context.TODO()).Warn(\"Tar: Can't archive a file with includes\")\n\t\t}\n\n\t\tdir, base := SplitPathDirEntry(t.srcPath)\n\t\tt.srcPath = dir\n\t\tt.options.IncludeFiles = []string{base}\n\t}\n\n\tif len(t.options.IncludeFiles) == 0 {\n\t\tt.options.IncludeFiles = []string{\".\"}\n\t}\n\n\tseen := make(map[string]bool)\n\n\tfor _, include := range t.options.IncludeFiles {\n\t\trebaseName := t.options.RebaseNames[include]\n\n\t\tvar (\n\t\t\tparentMatchInfo []patternmatcher.MatchInfo\n\t\t\tparentDirs      []string\n\t\t)\n\n\t\twalkRoot := getWalkRoot(t.srcPath, include)\n\t\tfilepath.WalkDir(walkRoot, func(filePath string, f os.DirEntry, err error) error {\n\t\t\tif err != nil {\n\t\t\t\tlog.G(context.TODO()).Errorf(\"Tar: Can't stat file %s to tar: %s\", t.srcPath, err)\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\trelFilePath, err := filepath.Rel(t.srcPath, filePath)\n\t\t\tif err != nil || (!t.options.IncludeSourceDir && relFilePath == \".\" && f.IsDir()) {\n\t\t\t\t// Error getting relative path OR we are looking\n\t\t\t\t// at the source directory path. Skip in both situations.\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif t.options.IncludeSourceDir && include == \".\" && relFilePath != \".\" {\n\t\t\t\trelFilePath = strings.Join([]string{\".\", relFilePath}, string(filepath.Separator))\n\t\t\t}\n\n\t\t\tskip := false\n\n\t\t\t// If \"include\" is an exact match for the current file\n\t\t\t// then even if there's an \"excludePatterns\" pattern that\n\t\t\t// matches it, don't skip it. IOW, assume an explicit 'include'\n\t\t\t// is asking for that file no matter what - which is true\n\t\t\t// for some files, like .dockerignore and Dockerfile (sometimes)\n\t\t\tif include != relFilePath {\n\t\t\t\tfor len(parentDirs) != 0 {\n\t\t\t\t\tlastParentDir := parentDirs[len(parentDirs)-1]\n\t\t\t\t\tif strings.HasPrefix(relFilePath, lastParentDir+string(os.PathSeparator)) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tparentDirs = parentDirs[:len(parentDirs)-1]\n\t\t\t\t\tparentMatchInfo = parentMatchInfo[:len(parentMatchInfo)-1]\n\t\t\t\t}\n\n\t\t\t\tvar matchInfo patternmatcher.MatchInfo\n\t\t\t\tif len(parentMatchInfo) != 0 {\n\t\t\t\t\tskip, matchInfo, err = t.pm.MatchesUsingParentResults(relFilePath, parentMatchInfo[len(parentMatchInfo)-1])\n\t\t\t\t} else {\n\t\t\t\t\tskip, matchInfo, err = t.pm.MatchesUsingParentResults(relFilePath, patternmatcher.MatchInfo{})\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\tlog.G(context.TODO()).Errorf(\"Error matching %s: %v\", relFilePath, err)\n\t\t\t\t\treturn err\n\t\t\t\t}\n\n\t\t\t\tif f.IsDir() {\n\t\t\t\t\tparentDirs = append(parentDirs, relFilePath)\n\t\t\t\t\tparentMatchInfo = append(parentMatchInfo, matchInfo)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif skip {\n\t\t\t\t// If we want to skip this file and its a directory\n\t\t\t\t// then we should first check to see if there's an\n\t\t\t\t// excludes pattern (e.g. !dir/file) that starts with this\n\t\t\t\t// dir. If so then we can't skip this dir.\n\n\t\t\t\t// Its not a dir then so we can just return/skip.\n\t\t\t\tif !f.IsDir() {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\n\t\t\t\t// No exceptions (!...) in patterns so just skip dir\n\t\t\t\tif !t.pm.Exclusions() {\n\t\t\t\t\treturn filepath.SkipDir\n\t\t\t\t}\n\n\t\t\t\tdirSlash := relFilePath + string(filepath.Separator)\n\n\t\t\t\tfor _, pat := range t.pm.Patterns() {\n\t\t\t\t\tif !pat.Exclusion() {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif strings.HasPrefix(pat.String()+string(filepath.Separator), dirSlash) {\n\t\t\t\t\t\t// found a match - so can't skip this dir\n\t\t\t\t\t\treturn nil\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// No matching exclusion dir so just skip dir\n\t\t\t\treturn filepath.SkipDir\n\t\t\t}\n\n\t\t\tif seen[relFilePath] {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tseen[relFilePath] = true\n\n\t\t\t// Rename the base resource.\n\t\t\tif rebaseName != \"\" {\n\t\t\t\tvar replacement string\n\t\t\t\tif rebaseName != string(filepath.Separator) {\n\t\t\t\t\t// Special case the root directory to replace with an\n\t\t\t\t\t// empty string instead so that we don't end up with\n\t\t\t\t\t// double slashes in the paths.\n\t\t\t\t\treplacement = rebaseName\n\t\t\t\t}\n\n\t\t\t\trelFilePath = strings.Replace(relFilePath, include, replacement, 1)\n\t\t\t}\n\n\t\t\tif err := ta.addTarFile(filePath, relFilePath); err != nil {\n\t\t\t\tlog.G(context.TODO()).Errorf(\"Can't add file %s to tar: %s\", filePath, err)\n\t\t\t\t// if pipe is broken, stop writing tar stream to it\n\t\t\t\tif err == io.ErrClosedPipe {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\t}\n}\n\n// Unpack unpacks the decompressedArchive to dest with options.\nfunc Unpack(decompressedArchive io.Reader, dest string, options *TarOptions) error {\n\ttr := tar.NewReader(decompressedArchive)\n\n\tvar dirs []*tar.Header\n\twhiteoutConverter := getWhiteoutConverter(options.WhiteoutFormat)\n\n\t// Iterate through the files in the archive.\nloop:\n\tfor {\n\t\thdr, err := tr.Next()\n\t\tif err == io.EOF {\n\t\t\t// end of tar archive\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// ignore XGlobalHeader early to avoid creating parent directories for them\n\t\tif hdr.Typeflag == tar.TypeXGlobalHeader {\n\t\t\tlog.G(context.TODO()).Debugf(\"PAX Global Extended Headers found for %s and ignored\", hdr.Name)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Normalize name, for safety and for a simple is-root check\n\t\t// This keeps \"../\" as-is, but normalizes \"/../\" to \"/\". Or Windows:\n\t\t// This keeps \"..\\\" as-is, but normalizes \"\\..\\\" to \"\\\".\n\t\thdr.Name = filepath.Clean(hdr.Name)\n\n\t\tfor _, exclude := range options.ExcludePatterns {\n\t\t\tif strings.HasPrefix(hdr.Name, exclude) {\n\t\t\t\tcontinue loop\n\t\t\t}\n\t\t}\n\n\t\t// Ensure that the parent directory exists.\n\t\terr = createImpliedDirectories(dest, hdr, options)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// #nosec G305 -- The joined path is checked for path traversal.\n\t\tpath := filepath.Join(dest, hdr.Name)\n\t\trel, err := filepath.Rel(dest, path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif strings.HasPrefix(rel, \"..\"+string(os.PathSeparator)) {\n\t\t\treturn breakoutError(fmt.Errorf(\"%q is outside of %q\", hdr.Name, dest))\n\t\t}\n\n\t\t// If path exits we almost always just want to remove and replace it\n\t\t// The only exception is when it is a directory *and* the file from\n\t\t// the layer is also a directory. Then we want to merge them (i.e.\n\t\t// just apply the metadata from the layer).\n\t\tif fi, err := os.Lstat(path); err == nil {\n\t\t\tif options.NoOverwriteDirNonDir && fi.IsDir() && hdr.Typeflag != tar.TypeDir {\n\t\t\t\t// If NoOverwriteDirNonDir is true then we cannot replace\n\t\t\t\t// an existing directory with a non-directory from the archive.\n\t\t\t\treturn fmt.Errorf(\"cannot overwrite directory %q with non-directory %q\", path, dest)\n\t\t\t}\n\n\t\t\tif options.NoOverwriteDirNonDir && !fi.IsDir() && hdr.Typeflag == tar.TypeDir {\n\t\t\t\t// If NoOverwriteDirNonDir is true then we cannot replace\n\t\t\t\t// an existing non-directory with a directory from the archive.\n\t\t\t\treturn fmt.Errorf(\"cannot overwrite non-directory %q with directory %q\", path, dest)\n\t\t\t}\n\n\t\t\tif fi.IsDir() && hdr.Name == \".\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif !(fi.IsDir() && hdr.Typeflag == tar.TypeDir) {\n\t\t\t\tif err := os.RemoveAll(path); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err := remapIDs(options.IDMap, hdr); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif whiteoutConverter != nil {\n\t\t\twriteFile, err := whiteoutConverter.ConvertRead(hdr, path)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !writeFile {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif err := createTarFile(path, dest, hdr, tr, options); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Directory mtimes must be handled at the end to avoid further\n\t\t// file creation in them to modify the directory mtime\n\t\tif hdr.Typeflag == tar.TypeDir {\n\t\t\tdirs = append(dirs, hdr)\n\t\t}\n\t}\n\n\tfor _, hdr := range dirs {\n\t\t// #nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice.\n\t\tpath := filepath.Join(dest, hdr.Name)\n\n\t\tif err := chtimes(path, boundTime(latestTime(hdr.AccessTime, hdr.ModTime)), boundTime(hdr.ModTime)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// createImpliedDirectories will create all parent directories of the current path with default permissions, if they do\n// not already exist. This is possible as the tar format supports 'implicit' directories, where their existence is\n// defined by the paths of files in the tar, but there are no header entries for the directories themselves, and thus\n// we most both create them and choose metadata like permissions.\n//\n// The caller should have performed filepath.Clean(hdr.Name), so hdr.Name will now be in the filepath format for the OS\n// on which the daemon is running. This precondition is required because this function assumes a OS-specific path\n// separator when checking that a path is not the root.\nfunc createImpliedDirectories(dest string, hdr *tar.Header, options *TarOptions) error {\n\t// Not the root directory, ensure that the parent directory exists\n\tif !strings.HasSuffix(hdr.Name, string(os.PathSeparator)) {\n\t\tparent := filepath.Dir(hdr.Name)\n\t\tparentPath := filepath.Join(dest, parent)\n\t\tif _, err := os.Lstat(parentPath); err != nil && os.IsNotExist(err) {\n\t\t\t// RootPair() is confined inside this loop as most cases will not require a call, so we can spend some\n\t\t\t// unneeded function calls in the uncommon case to encapsulate logic -- implied directories are a niche\n\t\t\t// usage that reduces the portability of an image.\n\t\t\trootIDs := options.IDMap.RootPair()\n\n\t\t\terr = idtools.MkdirAllAndChownNew(parentPath, ImpliedDirectoryMode, rootIDs)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Untar reads a stream of bytes from `archive`, parses it as a tar archive,\n// and unpacks it into the directory at `dest`.\n// The archive may be compressed with one of the following algorithms:\n// identity (uncompressed), gzip, bzip2, xz.\n//\n// FIXME: specify behavior when target path exists vs. doesn't exist.\nfunc Untar(tarArchive io.Reader, dest string, options *TarOptions) error {\n\treturn untarHandler(tarArchive, dest, options, true)\n}\n\n// UntarUncompressed reads a stream of bytes from `archive`, parses it as a tar archive,\n// and unpacks it into the directory at `dest`.\n// The archive must be an uncompressed stream.\nfunc UntarUncompressed(tarArchive io.Reader, dest string, options *TarOptions) error {\n\treturn untarHandler(tarArchive, dest, options, false)\n}\n\n// Handler for teasing out the automatic decompression\nfunc untarHandler(tarArchive io.Reader, dest string, options *TarOptions, decompress bool) error {\n\tif tarArchive == nil {\n\t\treturn fmt.Errorf(\"Empty archive\")\n\t}\n\tdest = filepath.Clean(dest)\n\tif options == nil {\n\t\toptions = &TarOptions{}\n\t}\n\tif options.ExcludePatterns == nil {\n\t\toptions.ExcludePatterns = []string{}\n\t}\n\n\tr := tarArchive\n\tif decompress {\n\t\tdecompressedArchive, err := DecompressStream(tarArchive)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer decompressedArchive.Close()\n\t\tr = decompressedArchive\n\t}\n\n\treturn Unpack(r, dest, options)\n}\n\n// TarUntar is a convenience function which calls Tar and Untar, with the output of one piped into the other.\n// If either Tar or Untar fails, TarUntar aborts and returns the error.\nfunc (archiver *Archiver) TarUntar(src, dst string) error {\n\tarchive, err := TarWithOptions(src, &TarOptions{Compression: Uncompressed})\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer archive.Close()\n\toptions := &TarOptions{\n\t\tIDMap: archiver.IDMapping,\n\t}\n\treturn archiver.Untar(archive, dst, options)\n}\n\n// UntarPath untar a file from path to a destination, src is the source tar file path.\nfunc (archiver *Archiver) UntarPath(src, dst string) error {\n\tarchive, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer archive.Close()\n\toptions := &TarOptions{\n\t\tIDMap: archiver.IDMapping,\n\t}\n\treturn archiver.Untar(archive, dst, options)\n}\n\n// CopyWithTar creates a tar archive of filesystem path `src`, and\n// unpacks it at filesystem path `dst`.\n// The archive is streamed directly with fixed buffering and no\n// intermediary disk IO.\nfunc (archiver *Archiver) CopyWithTar(src, dst string) error {\n\tsrcSt, err := os.Stat(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !srcSt.IsDir() {\n\t\treturn archiver.CopyFileWithTar(src, dst)\n\t}\n\n\t// if this Archiver is set up with ID mapping we need to create\n\t// the new destination directory with the remapped root UID/GID pair\n\t// as owner\n\trootIDs := archiver.IDMapping.RootPair()\n\t// Create dst, copy src's content into it\n\tif err := idtools.MkdirAllAndChownNew(dst, 0o755, rootIDs); err != nil {\n\t\treturn err\n\t}\n\treturn archiver.TarUntar(src, dst)\n}\n\n// CopyFileWithTar emulates the behavior of the 'cp' command-line\n// for a single file. It copies a regular file from path `src` to\n// path `dst`, and preserves all its metadata.\nfunc (archiver *Archiver) CopyFileWithTar(src, dst string) (err error) {\n\tsrcSt, err := os.Stat(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif srcSt.IsDir() {\n\t\treturn fmt.Errorf(\"Can't copy a directory\")\n\t}\n\n\t// Clean up the trailing slash. This must be done in an operating\n\t// system specific manner.\n\tif dst[len(dst)-1] == os.PathSeparator {\n\t\tdst = filepath.Join(dst, filepath.Base(src))\n\t}\n\t// Create the holding directory if necessary\n\tif err := os.MkdirAll(filepath.Dir(dst), 0o700); err != nil {\n\t\treturn err\n\t}\n\n\tr, w := io.Pipe()\n\terrC := make(chan error, 1)\n\n\tgo func() {\n\t\tdefer close(errC)\n\n\t\terrC <- func() error {\n\t\t\tdefer w.Close()\n\n\t\t\tsrcF, err := os.Open(src)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdefer srcF.Close()\n\n\t\t\thdr, err := FileInfoHeaderNoLookups(srcSt, \"\")\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\thdr.Format = tar.FormatPAX\n\t\t\thdr.ModTime = hdr.ModTime.Truncate(time.Second)\n\t\t\thdr.AccessTime = time.Time{}\n\t\t\thdr.ChangeTime = time.Time{}\n\t\t\thdr.Name = filepath.Base(dst)\n\t\t\thdr.Mode = int64(chmodTarEntry(os.FileMode(hdr.Mode)))\n\n\t\t\tif err := remapIDs(archiver.IDMapping, hdr); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\ttw := tar.NewWriter(w)\n\t\t\tdefer tw.Close()\n\t\t\tif err := tw.WriteHeader(hdr); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif _, err := copyWithBuffer(tw, srcF); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}()\n\t}()\n\tdefer func() {\n\t\tif er := <-errC; err == nil && er != nil {\n\t\t\terr = er\n\t\t}\n\t}()\n\n\terr = archiver.Untar(r, filepath.Dir(dst), nil)\n\tif err != nil {\n\t\tr.CloseWithError(err)\n\t}\n\treturn err\n}\n\n// IdentityMapping returns the IdentityMapping of the archiver.\nfunc (archiver *Archiver) IdentityMapping() idtools.IdentityMapping {\n\treturn archiver.IDMapping\n}\n\nfunc remapIDs(idMapping idtools.IdentityMapping, hdr *tar.Header) error {\n\tids, err := idMapping.ToHost(idtools.Identity{UID: hdr.Uid, GID: hdr.Gid})\n\thdr.Uid, hdr.Gid = ids.UID, ids.GID\n\treturn err\n}\n\n// cmdStream executes a command, and returns its stdout as a stream.\n// If the command fails to run or doesn't complete successfully, an error\n// will be returned, including anything written on stderr.\nfunc cmdStream(cmd *exec.Cmd, input io.Reader) (io.ReadCloser, error) {\n\tcmd.Stdin = input\n\tpipeR, pipeW := io.Pipe()\n\tcmd.Stdout = pipeW\n\tvar errBuf bytes.Buffer\n\tcmd.Stderr = &errBuf\n\n\t// Run the command and return the pipe\n\tif err := cmd.Start(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Ensure the command has exited before we clean anything up\n\tdone := make(chan struct{})\n\n\t// Copy stdout to the returned pipe\n\tgo func() {\n\t\tif err := cmd.Wait(); err != nil {\n\t\t\tpipeW.CloseWithError(fmt.Errorf(\"%s: %s\", err, errBuf.String()))\n\t\t} else {\n\t\t\tpipeW.Close()\n\t\t}\n\t\tclose(done)\n\t}()\n\n\treturn &readCloserWrapper{\n\t\tReader: pipeR,\n\t\tcloser: func() error {\n\t\t\t// Close pipeR, and then wait for the command to complete before returning. We have to close pipeR first, as\n\t\t\t// cmd.Wait waits for any non-file stdout/stderr/stdin to close.\n\t\t\terr := pipeR.Close()\n\t\t\t<-done\n\t\t\treturn err\n\t\t},\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/archive_linux.go",
    "content": "package archive\n\nimport (\n\t\"archive/tar\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/moby/sys/userns\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc getWhiteoutConverter(format WhiteoutFormat) tarWhiteoutConverter {\n\tif format == OverlayWhiteoutFormat {\n\t\treturn overlayWhiteoutConverter{}\n\t}\n\treturn nil\n}\n\ntype overlayWhiteoutConverter struct{}\n\nfunc (overlayWhiteoutConverter) ConvertWrite(hdr *tar.Header, path string, fi os.FileInfo) (wo *tar.Header, err error) {\n\t// convert whiteouts to AUFS format\n\tif fi.Mode()&os.ModeCharDevice != 0 && hdr.Devmajor == 0 && hdr.Devminor == 0 {\n\t\t// we just rename the file and make it normal\n\t\tdir, filename := filepath.Split(hdr.Name)\n\t\thdr.Name = filepath.Join(dir, WhiteoutPrefix+filename)\n\t\thdr.Mode = 0o600\n\t\thdr.Typeflag = tar.TypeReg\n\t\thdr.Size = 0\n\t}\n\n\tif fi.Mode()&os.ModeDir != 0 {\n\t\topaqueXattrName := \"trusted.overlay.opaque\"\n\t\tif userns.RunningInUserNS() {\n\t\t\topaqueXattrName = \"user.overlay.opaque\"\n\t\t}\n\n\t\t// convert opaque dirs to AUFS format by writing an empty file with the prefix\n\t\topaque, err := lgetxattr(path, opaqueXattrName)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif len(opaque) == 1 && opaque[0] == 'y' {\n\t\t\tdelete(hdr.PAXRecords, paxSchilyXattr+opaqueXattrName)\n\n\t\t\t// create a header for the whiteout file\n\t\t\t// it should inherit some properties from the parent, but be a regular file\n\t\t\two = &tar.Header{\n\t\t\t\tTypeflag:   tar.TypeReg,\n\t\t\t\tMode:       hdr.Mode & int64(os.ModePerm),\n\t\t\t\tName:       filepath.Join(hdr.Name, WhiteoutOpaqueDir), // #nosec G305 -- An archive is being created, not extracted.\n\t\t\t\tSize:       0,\n\t\t\t\tUid:        hdr.Uid,\n\t\t\t\tUname:      hdr.Uname,\n\t\t\t\tGid:        hdr.Gid,\n\t\t\t\tGname:      hdr.Gname,\n\t\t\t\tAccessTime: hdr.AccessTime,\n\t\t\t\tChangeTime: hdr.ChangeTime,\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (c overlayWhiteoutConverter) ConvertRead(hdr *tar.Header, path string) (bool, error) {\n\tbase := filepath.Base(path)\n\tdir := filepath.Dir(path)\n\n\t// if a directory is marked as opaque by the AUFS special file, we need to translate that to overlay\n\tif base == WhiteoutOpaqueDir {\n\t\topaqueXattrName := \"trusted.overlay.opaque\"\n\t\tif userns.RunningInUserNS() {\n\t\t\topaqueXattrName = \"user.overlay.opaque\"\n\t\t}\n\n\t\terr := unix.Setxattr(dir, opaqueXattrName, []byte{'y'}, 0)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"setxattr('%s', %s=y): %w\", dir, opaqueXattrName, err)\n\t\t}\n\t\t// don't write the file itself\n\t\treturn false, err\n\t}\n\n\t// if a file was deleted and we are using overlay, we need to create a character device\n\tif strings.HasPrefix(base, WhiteoutPrefix) {\n\t\toriginalBase := base[len(WhiteoutPrefix):]\n\t\toriginalPath := filepath.Join(dir, originalBase)\n\n\t\tif err := unix.Mknod(originalPath, unix.S_IFCHR, 0); err != nil {\n\t\t\treturn false, fmt.Errorf(\"failed to mknod('%s', S_IFCHR, 0): %w\", originalPath, err)\n\t\t}\n\t\tif err := os.Chown(originalPath, hdr.Uid, hdr.Gid); err != nil {\n\t\t\treturn false, err\n\t\t}\n\n\t\t// don't write the file itself\n\t\treturn false, nil\n\t}\n\n\treturn true, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/archive_other.go",
    "content": "//go:build !linux\n\npackage archive\n\nfunc getWhiteoutConverter(format WhiteoutFormat) tarWhiteoutConverter {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/archive_unix.go",
    "content": "//go:build !windows\n\npackage archive\n\nimport (\n\t\"archive/tar\"\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/docker/docker/pkg/idtools\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc init() {\n\tsysStat = statUnix\n}\n\n// addLongPathPrefix adds the Windows long path prefix to the path provided if\n// it does not already have it. It is a no-op on platforms other than Windows.\nfunc addLongPathPrefix(srcPath string) string {\n\treturn srcPath\n}\n\n// getWalkRoot calculates the root path when performing a TarWithOptions.\n// We use a separate function as this is platform specific. On Linux, we\n// can't use filepath.Join(srcPath,include) because this will clean away\n// a trailing \".\" or \"/\" which may be important.\nfunc getWalkRoot(srcPath string, include string) string {\n\treturn strings.TrimSuffix(srcPath, string(filepath.Separator)) + string(filepath.Separator) + include\n}\n\n// chmodTarEntry is used to adjust the file permissions used in tar header based\n// on the platform the archival is done.\nfunc chmodTarEntry(perm os.FileMode) os.FileMode {\n\treturn perm // noop for unix as golang APIs provide perm bits correctly\n}\n\n// statUnix populates hdr from system-dependent fields of fi without performing\n// any OS lookups.\nfunc statUnix(fi os.FileInfo, hdr *tar.Header) error {\n\t// Devmajor and Devminor are only needed for special devices.\n\n\t// In FreeBSD, RDev for regular files is -1 (unless overridden by FS):\n\t// https://cgit.freebsd.org/src/tree/sys/kern/vfs_default.c?h=stable/13#n1531\n\t// (NODEV is -1: https://cgit.freebsd.org/src/tree/sys/sys/param.h?h=stable/13#n241).\n\n\t// ZFS in particular does not override the default:\n\t// https://cgit.freebsd.org/src/tree/sys/contrib/openzfs/module/os/freebsd/zfs/zfs_vnops_os.c?h=stable/13#n2027\n\n\t// Since `Stat_t.Rdev` is uint64, the cast turns -1 into (2^64 - 1).\n\t// Such large values cannot be encoded in a tar header.\n\tif runtime.GOOS == \"freebsd\" && hdr.Typeflag != tar.TypeBlock && hdr.Typeflag != tar.TypeChar {\n\t\treturn nil\n\t}\n\ts, ok := fi.Sys().(*syscall.Stat_t)\n\tif !ok {\n\t\treturn nil\n\t}\n\n\thdr.Uid = int(s.Uid)\n\thdr.Gid = int(s.Gid)\n\n\tif s.Mode&unix.S_IFBLK != 0 ||\n\t\ts.Mode&unix.S_IFCHR != 0 {\n\t\thdr.Devmajor = int64(unix.Major(uint64(s.Rdev))) //nolint: unconvert\n\t\thdr.Devminor = int64(unix.Minor(uint64(s.Rdev))) //nolint: unconvert\n\t}\n\n\treturn nil\n}\n\nfunc getInodeFromStat(stat interface{}) (inode uint64, err error) {\n\ts, ok := stat.(*syscall.Stat_t)\n\n\tif ok {\n\t\tinode = s.Ino\n\t}\n\n\treturn\n}\n\nfunc getFileUIDGID(stat interface{}) (idtools.Identity, error) {\n\ts, ok := stat.(*syscall.Stat_t)\n\n\tif !ok {\n\t\treturn idtools.Identity{}, errors.New(\"cannot convert stat value to syscall.Stat_t\")\n\t}\n\treturn idtools.Identity{UID: int(s.Uid), GID: int(s.Gid)}, nil\n}\n\n// handleTarTypeBlockCharFifo is an OS-specific helper function used by\n// createTarFile to handle the following types of header: Block; Char; Fifo.\n//\n// Creating device nodes is not supported when running in a user namespace,\n// produces a [syscall.EPERM] in most cases.\nfunc handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {\n\tmode := uint32(hdr.Mode & 0o7777)\n\tswitch hdr.Typeflag {\n\tcase tar.TypeBlock:\n\t\tmode |= unix.S_IFBLK\n\tcase tar.TypeChar:\n\t\tmode |= unix.S_IFCHR\n\tcase tar.TypeFifo:\n\t\tmode |= unix.S_IFIFO\n\t}\n\n\treturn mknod(path, mode, unix.Mkdev(uint32(hdr.Devmajor), uint32(hdr.Devminor)))\n}\n\nfunc handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error {\n\tif hdr.Typeflag == tar.TypeLink {\n\t\tif fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) {\n\t\t\tif err := os.Chmod(path, hdrInfo.Mode()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t} else if hdr.Typeflag != tar.TypeSymlink {\n\t\tif err := os.Chmod(path, hdrInfo.Mode()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/archive_windows.go",
    "content": "package archive\n\nimport (\n\t\"archive/tar\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/docker/docker/pkg/idtools\"\n)\n\n// longPathPrefix is the longpath prefix for Windows file paths.\nconst longPathPrefix = `\\\\?\\`\n\n// addLongPathPrefix adds the Windows long path prefix to the path provided if\n// it does not already have it. It is a no-op on platforms other than Windows.\n//\n// addLongPathPrefix is a copy of [github.com/docker/docker/pkg/longpath.AddPrefix].\nfunc addLongPathPrefix(srcPath string) string {\n\tif strings.HasPrefix(srcPath, longPathPrefix) {\n\t\treturn srcPath\n\t}\n\tif strings.HasPrefix(srcPath, `\\\\`) {\n\t\t// This is a UNC path, so we need to add 'UNC' to the path as well.\n\t\treturn longPathPrefix + `UNC` + srcPath[1:]\n\t}\n\treturn longPathPrefix + srcPath\n}\n\n// getWalkRoot calculates the root path when performing a TarWithOptions.\n// We use a separate function as this is platform specific.\nfunc getWalkRoot(srcPath string, include string) string {\n\treturn filepath.Join(srcPath, include)\n}\n\n// chmodTarEntry is used to adjust the file permissions used in tar header based\n// on the platform the archival is done.\nfunc chmodTarEntry(perm os.FileMode) os.FileMode {\n\t// Remove group- and world-writable bits.\n\tperm &= 0o755\n\n\t// Add the x bit: make everything +x on Windows\n\treturn perm | 0o111\n}\n\nfunc setHeaderForSpecialDevice(hdr *tar.Header, name string, stat interface{}) (err error) {\n\t// do nothing. no notion of Rdev, Nlink in stat on Windows\n\treturn\n}\n\nfunc getInodeFromStat(stat interface{}) (inode uint64, err error) {\n\t// do nothing. no notion of Inode in stat on Windows\n\treturn\n}\n\n// handleTarTypeBlockCharFifo is an OS-specific helper function used by\n// createTarFile to handle the following types of header: Block; Char; Fifo\nfunc handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {\n\treturn nil\n}\n\nfunc handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error {\n\treturn nil\n}\n\nfunc getFileUIDGID(stat interface{}) (idtools.Identity, error) {\n\t// no notion of file ownership mapping yet on Windows\n\treturn idtools.Identity{UID: 0, GID: 0}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/changes.go",
    "content": "package archive\n\nimport (\n\t\"archive/tar\"\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/containerd/log\"\n\t\"github.com/docker/docker/pkg/idtools\"\n)\n\n// ChangeType represents the change type.\ntype ChangeType int\n\nconst (\n\tChangeModify = 0 // ChangeModify represents the modify operation.\n\tChangeAdd    = 1 // ChangeAdd represents the add operation.\n\tChangeDelete = 2 // ChangeDelete represents the delete operation.\n)\n\nfunc (c ChangeType) String() string {\n\tswitch c {\n\tcase ChangeModify:\n\t\treturn \"C\"\n\tcase ChangeAdd:\n\t\treturn \"A\"\n\tcase ChangeDelete:\n\t\treturn \"D\"\n\t}\n\treturn \"\"\n}\n\n// Change represents a change, it wraps the change type and path.\n// It describes changes of the files in the path respect to the\n// parent layers. The change could be modify, add, delete.\n// This is used for layer diff.\ntype Change struct {\n\tPath string\n\tKind ChangeType\n}\n\nfunc (change *Change) String() string {\n\treturn fmt.Sprintf(\"%s %s\", change.Kind, change.Path)\n}\n\n// for sort.Sort\ntype changesByPath []Change\n\nfunc (c changesByPath) Less(i, j int) bool { return c[i].Path < c[j].Path }\nfunc (c changesByPath) Len() int           { return len(c) }\nfunc (c changesByPath) Swap(i, j int)      { c[j], c[i] = c[i], c[j] }\n\n// Gnu tar doesn't have sub-second mtime precision. The go tar\n// writer (1.10+) does when using PAX format, but we round times to seconds\n// to ensure archives have the same hashes for backwards compatibility.\n// See https://github.com/moby/moby/pull/35739/commits/fb170206ba12752214630b269a40ac7be6115ed4.\n//\n// Non-sub-second is problematic when we apply changes via tar\n// files. We handle this by comparing for exact times, *or* same\n// second count and either a or b having exactly 0 nanoseconds\nfunc sameFsTime(a, b time.Time) bool {\n\treturn a.Equal(b) ||\n\t\t(a.Unix() == b.Unix() &&\n\t\t\t(a.Nanosecond() == 0 || b.Nanosecond() == 0))\n}\n\n// Changes walks the path rw and determines changes for the files in the path,\n// with respect to the parent layers\nfunc Changes(layers []string, rw string) ([]Change, error) {\n\treturn changes(layers, rw, aufsDeletedFile, aufsMetadataSkip)\n}\n\nfunc aufsMetadataSkip(path string) (skip bool, err error) {\n\tskip, err = filepath.Match(string(os.PathSeparator)+WhiteoutMetaPrefix+\"*\", path)\n\tif err != nil {\n\t\tskip = true\n\t}\n\treturn\n}\n\nfunc aufsDeletedFile(root, path string, fi os.FileInfo) (string, error) {\n\tf := filepath.Base(path)\n\n\t// If there is a whiteout, then the file was removed\n\tif strings.HasPrefix(f, WhiteoutPrefix) {\n\t\toriginalFile := f[len(WhiteoutPrefix):]\n\t\treturn filepath.Join(filepath.Dir(path), originalFile), nil\n\t}\n\n\treturn \"\", nil\n}\n\ntype (\n\tskipChange   func(string) (bool, error)\n\tdeleteChange func(string, string, os.FileInfo) (string, error)\n)\n\nfunc changes(layers []string, rw string, dc deleteChange, sc skipChange) ([]Change, error) {\n\tvar (\n\t\tchanges     []Change\n\t\tchangedDirs = make(map[string]struct{})\n\t)\n\n\terr := filepath.Walk(rw, func(path string, f os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Rebase path\n\t\tpath, err = filepath.Rel(rw, path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// As this runs on the daemon side, file paths are OS specific.\n\t\tpath = filepath.Join(string(os.PathSeparator), path)\n\n\t\t// Skip root\n\t\tif path == string(os.PathSeparator) {\n\t\t\treturn nil\n\t\t}\n\n\t\tif sc != nil {\n\t\t\tif skip, err := sc(path); skip {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tchange := Change{\n\t\t\tPath: path,\n\t\t}\n\n\t\tdeletedFile, err := dc(rw, path, f)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Find out what kind of modification happened\n\t\tif deletedFile != \"\" {\n\t\t\tchange.Path = deletedFile\n\t\t\tchange.Kind = ChangeDelete\n\t\t} else {\n\t\t\t// Otherwise, the file was added\n\t\t\tchange.Kind = ChangeAdd\n\n\t\t\t// ...Unless it already existed in a top layer, in which case, it's a modification\n\t\t\tfor _, layer := range layers {\n\t\t\t\tstat, err := os.Stat(filepath.Join(layer, path))\n\t\t\t\tif err != nil && !os.IsNotExist(err) {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err == nil {\n\t\t\t\t\t// The file existed in the top layer, so that's a modification\n\n\t\t\t\t\t// However, if it's a directory, maybe it wasn't actually modified.\n\t\t\t\t\t// If you modify /foo/bar/baz, then /foo will be part of the changed files only because it's the parent of bar\n\t\t\t\t\tif stat.IsDir() && f.IsDir() {\n\t\t\t\t\t\tif f.Size() == stat.Size() && f.Mode() == stat.Mode() && sameFsTime(f.ModTime(), stat.ModTime()) {\n\t\t\t\t\t\t\t// Both directories are the same, don't record the change\n\t\t\t\t\t\t\treturn nil\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tchange.Kind = ChangeModify\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If /foo/bar/file.txt is modified, then /foo/bar must be part of the changed files.\n\t\t// This block is here to ensure the change is recorded even if the\n\t\t// modify time, mode and size of the parent directory in the rw and ro layers are all equal.\n\t\t// Check https://github.com/docker/docker/pull/13590 for details.\n\t\tif f.IsDir() {\n\t\t\tchangedDirs[path] = struct{}{}\n\t\t}\n\t\tif change.Kind == ChangeAdd || change.Kind == ChangeDelete {\n\t\t\tparent := filepath.Dir(path)\n\t\t\tif _, ok := changedDirs[parent]; !ok && parent != \"/\" {\n\t\t\t\tchanges = append(changes, Change{Path: parent, Kind: ChangeModify})\n\t\t\t\tchangedDirs[parent] = struct{}{}\n\t\t\t}\n\t\t}\n\n\t\t// Record change\n\t\tchanges = append(changes, change)\n\t\treturn nil\n\t})\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn nil, err\n\t}\n\treturn changes, nil\n}\n\n// FileInfo describes the information of a file.\ntype FileInfo struct {\n\tparent     *FileInfo\n\tname       string\n\tstat       fs.FileInfo\n\tchildren   map[string]*FileInfo\n\tcapability []byte\n\tadded      bool\n}\n\n// LookUp looks up the file information of a file.\nfunc (info *FileInfo) LookUp(path string) *FileInfo {\n\t// As this runs on the daemon side, file paths are OS specific.\n\tparent := info\n\tif path == string(os.PathSeparator) {\n\t\treturn info\n\t}\n\n\tpathElements := strings.Split(path, string(os.PathSeparator))\n\tfor _, elem := range pathElements {\n\t\tif elem != \"\" {\n\t\t\tchild := parent.children[elem]\n\t\t\tif child == nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tparent = child\n\t\t}\n\t}\n\treturn parent\n}\n\nfunc (info *FileInfo) path() string {\n\tif info.parent == nil {\n\t\t// As this runs on the daemon side, file paths are OS specific.\n\t\treturn string(os.PathSeparator)\n\t}\n\treturn filepath.Join(info.parent.path(), info.name)\n}\n\nfunc (info *FileInfo) addChanges(oldInfo *FileInfo, changes *[]Change) {\n\tsizeAtEntry := len(*changes)\n\n\tif oldInfo == nil {\n\t\t// add\n\t\tchange := Change{\n\t\t\tPath: info.path(),\n\t\t\tKind: ChangeAdd,\n\t\t}\n\t\t*changes = append(*changes, change)\n\t\tinfo.added = true\n\t}\n\n\t// We make a copy so we can modify it to detect additions\n\t// also, we only recurse on the old dir if the new info is a directory\n\t// otherwise any previous delete/change is considered recursive\n\toldChildren := make(map[string]*FileInfo)\n\tif oldInfo != nil && info.isDir() {\n\t\tfor k, v := range oldInfo.children {\n\t\t\toldChildren[k] = v\n\t\t}\n\t}\n\n\tfor name, newChild := range info.children {\n\t\toldChild := oldChildren[name]\n\t\tif oldChild != nil {\n\t\t\t// change?\n\t\t\toldStat := oldChild.stat\n\t\t\tnewStat := newChild.stat\n\t\t\t// Note: We can't compare inode or ctime or blocksize here, because these change\n\t\t\t// when copying a file into a container. However, that is not generally a problem\n\t\t\t// because any content change will change mtime, and any status change should\n\t\t\t// be visible when actually comparing the stat fields. The only time this\n\t\t\t// breaks down is if some code intentionally hides a change by setting\n\t\t\t// back mtime\n\t\t\tif statDifferent(oldStat, newStat) ||\n\t\t\t\t!bytes.Equal(oldChild.capability, newChild.capability) {\n\t\t\t\tchange := Change{\n\t\t\t\t\tPath: newChild.path(),\n\t\t\t\t\tKind: ChangeModify,\n\t\t\t\t}\n\t\t\t\t*changes = append(*changes, change)\n\t\t\t\tnewChild.added = true\n\t\t\t}\n\n\t\t\t// Remove from copy so we can detect deletions\n\t\t\tdelete(oldChildren, name)\n\t\t}\n\n\t\tnewChild.addChanges(oldChild, changes)\n\t}\n\tfor _, oldChild := range oldChildren {\n\t\t// delete\n\t\tchange := Change{\n\t\t\tPath: oldChild.path(),\n\t\t\tKind: ChangeDelete,\n\t\t}\n\t\t*changes = append(*changes, change)\n\t}\n\n\t// If there were changes inside this directory, we need to add it, even if the directory\n\t// itself wasn't changed. This is needed to properly save and restore filesystem permissions.\n\t// As this runs on the daemon side, file paths are OS specific.\n\tif len(*changes) > sizeAtEntry && info.isDir() && !info.added && info.path() != string(os.PathSeparator) {\n\t\tchange := Change{\n\t\t\tPath: info.path(),\n\t\t\tKind: ChangeModify,\n\t\t}\n\t\t// Let's insert the directory entry before the recently added entries located inside this dir\n\t\t*changes = append(*changes, change) // just to resize the slice, will be overwritten\n\t\tcopy((*changes)[sizeAtEntry+1:], (*changes)[sizeAtEntry:])\n\t\t(*changes)[sizeAtEntry] = change\n\t}\n}\n\n// Changes add changes to file information.\nfunc (info *FileInfo) Changes(oldInfo *FileInfo) []Change {\n\tvar changes []Change\n\n\tinfo.addChanges(oldInfo, &changes)\n\n\treturn changes\n}\n\nfunc newRootFileInfo() *FileInfo {\n\t// As this runs on the daemon side, file paths are OS specific.\n\troot := &FileInfo{\n\t\tname:     string(os.PathSeparator),\n\t\tchildren: make(map[string]*FileInfo),\n\t}\n\treturn root\n}\n\n// ChangesDirs compares two directories and generates an array of Change objects describing the changes.\n// If oldDir is \"\", then all files in newDir will be Add-Changes.\nfunc ChangesDirs(newDir, oldDir string) ([]Change, error) {\n\tvar oldRoot, newRoot *FileInfo\n\tif oldDir == \"\" {\n\t\temptyDir, err := os.MkdirTemp(\"\", \"empty\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer os.Remove(emptyDir)\n\t\toldDir = emptyDir\n\t}\n\toldRoot, newRoot, err := collectFileInfoForChanges(oldDir, newDir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn newRoot.Changes(oldRoot), nil\n}\n\n// ChangesSize calculates the size in bytes of the provided changes, based on newDir.\nfunc ChangesSize(newDir string, changes []Change) int64 {\n\tvar (\n\t\tsize int64\n\t\tsf   = make(map[uint64]struct{})\n\t)\n\tfor _, change := range changes {\n\t\tif change.Kind == ChangeModify || change.Kind == ChangeAdd {\n\t\t\tfile := filepath.Join(newDir, change.Path)\n\t\t\tfileInfo, err := os.Lstat(file)\n\t\t\tif err != nil {\n\t\t\t\tlog.G(context.TODO()).Errorf(\"Can not stat %q: %s\", file, err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif fileInfo != nil && !fileInfo.IsDir() {\n\t\t\t\tif hasHardlinks(fileInfo) {\n\t\t\t\t\tinode := getIno(fileInfo)\n\t\t\t\t\tif _, ok := sf[inode]; !ok {\n\t\t\t\t\t\tsize += fileInfo.Size()\n\t\t\t\t\t\tsf[inode] = struct{}{}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsize += fileInfo.Size()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn size\n}\n\n// ExportChanges produces an Archive from the provided changes, relative to dir.\nfunc ExportChanges(dir string, changes []Change, idMap idtools.IdentityMapping) (io.ReadCloser, error) {\n\treader, writer := io.Pipe()\n\tgo func() {\n\t\tta := newTarAppender(idMap, writer, nil)\n\n\t\tsort.Sort(changesByPath(changes))\n\n\t\t// In general we log errors here but ignore them because\n\t\t// during e.g. a diff operation the container can continue\n\t\t// mutating the filesystem and we can see transient errors\n\t\t// from this\n\t\tfor _, change := range changes {\n\t\t\tif change.Kind == ChangeDelete {\n\t\t\t\twhiteOutDir := filepath.Dir(change.Path)\n\t\t\t\twhiteOutBase := filepath.Base(change.Path)\n\t\t\t\twhiteOut := filepath.Join(whiteOutDir, WhiteoutPrefix+whiteOutBase)\n\t\t\t\ttimestamp := time.Now()\n\t\t\t\thdr := &tar.Header{\n\t\t\t\t\tName:       whiteOut[1:],\n\t\t\t\t\tSize:       0,\n\t\t\t\t\tModTime:    timestamp,\n\t\t\t\t\tAccessTime: timestamp,\n\t\t\t\t\tChangeTime: timestamp,\n\t\t\t\t}\n\t\t\t\tif err := ta.TarWriter.WriteHeader(hdr); err != nil {\n\t\t\t\t\tlog.G(context.TODO()).Debugf(\"Can't write whiteout header: %s\", err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpath := filepath.Join(dir, change.Path)\n\t\t\t\tif err := ta.addTarFile(path, change.Path[1:]); err != nil {\n\t\t\t\t\tlog.G(context.TODO()).Debugf(\"Can't add file %s to tar: %s\", path, err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Make sure to check the error on Close.\n\t\tif err := ta.TarWriter.Close(); err != nil {\n\t\t\tlog.G(context.TODO()).Debugf(\"Can't close layer: %s\", err)\n\t\t}\n\t\tif err := writer.Close(); err != nil {\n\t\t\tlog.G(context.TODO()).Debugf(\"failed close Changes writer: %s\", err)\n\t\t}\n\t}()\n\treturn reader, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/changes_linux.go",
    "content": "package archive\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// walker is used to implement collectFileInfoForChanges on linux. Where this\n// method in general returns the entire contents of two directory trees, we\n// optimize some FS calls out on linux. In particular, we take advantage of the\n// fact that getdents(2) returns the inode of each file in the directory being\n// walked, which, when walking two trees in parallel to generate a list of\n// changes, can be used to prune subtrees without ever having to lstat(2) them\n// directly. Eliminating stat calls in this way can save up to seconds on large\n// images.\ntype walker struct {\n\tdir1  string\n\tdir2  string\n\troot1 *FileInfo\n\troot2 *FileInfo\n}\n\n// collectFileInfoForChanges returns a complete representation of the trees\n// rooted at dir1 and dir2, with one important exception: any subtree or\n// leaf where the inode and device numbers are an exact match between dir1\n// and dir2 will be pruned from the results. This method is *only* to be used\n// to generating a list of changes between the two directories, as it does not\n// reflect the full contents.\nfunc collectFileInfoForChanges(dir1, dir2 string) (*FileInfo, *FileInfo, error) {\n\tw := &walker{\n\t\tdir1:  dir1,\n\t\tdir2:  dir2,\n\t\troot1: newRootFileInfo(),\n\t\troot2: newRootFileInfo(),\n\t}\n\n\ti1, err := os.Lstat(w.dir1)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\ti2, err := os.Lstat(w.dir2)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := w.walk(\"/\", i1, i2); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn w.root1, w.root2, nil\n}\n\n// Given a FileInfo, its path info, and a reference to the root of the tree\n// being constructed, register this file with the tree.\nfunc walkchunk(path string, fi os.FileInfo, dir string, root *FileInfo) error {\n\tif fi == nil {\n\t\treturn nil\n\t}\n\tparent := root.LookUp(filepath.Dir(path))\n\tif parent == nil {\n\t\treturn fmt.Errorf(\"walkchunk: Unexpectedly no parent for %s\", path)\n\t}\n\tinfo := &FileInfo{\n\t\tname:     filepath.Base(path),\n\t\tchildren: make(map[string]*FileInfo),\n\t\tparent:   parent,\n\t}\n\tcpath := filepath.Join(dir, path)\n\tinfo.stat = fi\n\tinfo.capability, _ = lgetxattr(cpath, \"security.capability\") // lgetxattr(2): fs access\n\tparent.children[info.name] = info\n\treturn nil\n}\n\n// Walk a subtree rooted at the same path in both trees being iterated. For\n// example, /docker/overlay/1234/a/b/c/d and /docker/overlay/8888/a/b/c/d\nfunc (w *walker) walk(path string, i1, i2 os.FileInfo) (err error) {\n\t// Register these nodes with the return trees, unless we're still at the\n\t// (already-created) roots:\n\tif path != \"/\" {\n\t\tif err := walkchunk(path, i1, w.dir1, w.root1); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := walkchunk(path, i2, w.dir2, w.root2); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tis1Dir := i1 != nil && i1.IsDir()\n\tis2Dir := i2 != nil && i2.IsDir()\n\n\tsameDevice := false\n\tif i1 != nil && i2 != nil {\n\t\tsi1 := i1.Sys().(*syscall.Stat_t)\n\t\tsi2 := i2.Sys().(*syscall.Stat_t)\n\t\tif si1.Dev == si2.Dev {\n\t\t\tsameDevice = true\n\t\t}\n\t}\n\n\t// If these files are both non-existent, or leaves (non-dirs), we are done.\n\tif !is1Dir && !is2Dir {\n\t\treturn nil\n\t}\n\n\t// Fetch the names of all the files contained in both directories being walked:\n\tvar names1, names2 []nameIno\n\tif is1Dir {\n\t\tnames1, err = readdirnames(filepath.Join(w.dir1, path)) // getdents(2): fs access\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif is2Dir {\n\t\tnames2, err = readdirnames(filepath.Join(w.dir2, path)) // getdents(2): fs access\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// We have lists of the files contained in both parallel directories, sorted\n\t// in the same order. Walk them in parallel, generating a unique merged list\n\t// of all items present in either or both directories.\n\tvar names []string\n\tix1 := 0\n\tix2 := 0\n\n\tfor {\n\t\tif ix1 >= len(names1) {\n\t\t\tbreak\n\t\t}\n\t\tif ix2 >= len(names2) {\n\t\t\tbreak\n\t\t}\n\n\t\tni1 := names1[ix1]\n\t\tni2 := names2[ix2]\n\n\t\tswitch strings.Compare(ni1.name, ni2.name) {\n\t\tcase -1: // ni1 < ni2 -- advance ni1\n\t\t\t// we will not encounter ni1 in names2\n\t\t\tnames = append(names, ni1.name)\n\t\t\tix1++\n\t\tcase 0: // ni1 == ni2\n\t\t\tif ni1.ino != ni2.ino || !sameDevice {\n\t\t\t\tnames = append(names, ni1.name)\n\t\t\t}\n\t\t\tix1++\n\t\t\tix2++\n\t\tcase 1: // ni1 > ni2 -- advance ni2\n\t\t\t// we will not encounter ni2 in names1\n\t\t\tnames = append(names, ni2.name)\n\t\t\tix2++\n\t\t}\n\t}\n\tfor ix1 < len(names1) {\n\t\tnames = append(names, names1[ix1].name)\n\t\tix1++\n\t}\n\tfor ix2 < len(names2) {\n\t\tnames = append(names, names2[ix2].name)\n\t\tix2++\n\t}\n\n\t// For each of the names present in either or both of the directories being\n\t// iterated, stat the name under each root, and recurse the pair of them:\n\tfor _, name := range names {\n\t\tfname := filepath.Join(path, name)\n\t\tvar cInfo1, cInfo2 os.FileInfo\n\t\tif is1Dir {\n\t\t\tcInfo1, err = os.Lstat(filepath.Join(w.dir1, fname)) // lstat(2): fs access\n\t\t\tif err != nil && !os.IsNotExist(err) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif is2Dir {\n\t\t\tcInfo2, err = os.Lstat(filepath.Join(w.dir2, fname)) // lstat(2): fs access\n\t\t\tif err != nil && !os.IsNotExist(err) {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif err = w.walk(fname, cInfo1, cInfo2); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// {name,inode} pairs used to support the early-pruning logic of the walker type\ntype nameIno struct {\n\tname string\n\tino  uint64\n}\n\ntype nameInoSlice []nameIno\n\nfunc (s nameInoSlice) Len() int           { return len(s) }\nfunc (s nameInoSlice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s nameInoSlice) Less(i, j int) bool { return s[i].name < s[j].name }\n\n// readdirnames is a hacked-apart version of the Go stdlib code, exposing inode\n// numbers further up the stack when reading directory contents. Unlike\n// os.Readdirnames, which returns a list of filenames, this function returns a\n// list of {filename,inode} pairs.\nfunc readdirnames(dirname string) (names []nameIno, err error) {\n\tvar (\n\t\tsize = 100\n\t\tbuf  = make([]byte, 4096)\n\t\tnbuf int\n\t\tbufp int\n\t\tnb   int\n\t)\n\n\tf, err := os.Open(dirname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tnames = make([]nameIno, 0, size) // Empty with room to grow.\n\tfor {\n\t\t// Refill the buffer if necessary\n\t\tif bufp >= nbuf {\n\t\t\tbufp = 0\n\t\t\tnbuf, err = unix.ReadDirent(int(f.Fd()), buf) // getdents on linux\n\t\t\tif nbuf < 0 {\n\t\t\t\tnbuf = 0\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn nil, os.NewSyscallError(\"readdirent\", err)\n\t\t\t}\n\t\t\tif nbuf <= 0 {\n\t\t\t\tbreak // EOF\n\t\t\t}\n\t\t}\n\n\t\t// Drain the buffer\n\t\tnb, names = parseDirent(buf[bufp:nbuf], names)\n\t\tbufp += nb\n\t}\n\n\tsl := nameInoSlice(names)\n\tsort.Sort(sl)\n\treturn sl, nil\n}\n\n// parseDirent is a minor modification of unix.ParseDirent (linux version)\n// which returns {name,inode} pairs instead of just names.\nfunc parseDirent(buf []byte, names []nameIno) (consumed int, newnames []nameIno) {\n\toriglen := len(buf)\n\tfor len(buf) > 0 {\n\t\tdirent := (*unix.Dirent)(unsafe.Pointer(&buf[0])) // #nosec G103 -- Ignore \"G103: Use of unsafe calls should be audited\"\n\t\tbuf = buf[dirent.Reclen:]\n\t\tif dirent.Ino == 0 { // File absent in directory.\n\t\t\tcontinue\n\t\t}\n\t\tb := (*[10000]byte)(unsafe.Pointer(&dirent.Name[0])) // #nosec G103 -- Ignore \"G103: Use of unsafe calls should be audited\"\n\t\tname := string(b[0:clen(b[:])])\n\t\tif name == \".\" || name == \"..\" { // Useless names\n\t\t\tcontinue\n\t\t}\n\t\tnames = append(names, nameIno{name, dirent.Ino})\n\t}\n\treturn origlen - len(buf), names\n}\n\nfunc clen(n []byte) int {\n\tfor i := 0; i < len(n); i++ {\n\t\tif n[i] == 0 {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn len(n)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/changes_other.go",
    "content": "//go:build !linux\n\npackage archive\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nfunc collectFileInfoForChanges(oldDir, newDir string) (*FileInfo, *FileInfo, error) {\n\tvar (\n\t\toldRoot, newRoot *FileInfo\n\t\terr1, err2       error\n\t\terrs             = make(chan error, 2)\n\t)\n\tgo func() {\n\t\toldRoot, err1 = collectFileInfo(oldDir)\n\t\terrs <- err1\n\t}()\n\tgo func() {\n\t\tnewRoot, err2 = collectFileInfo(newDir)\n\t\terrs <- err2\n\t}()\n\n\t// block until both routines have returned\n\tfor i := 0; i < 2; i++ {\n\t\tif err := <-errs; err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t}\n\n\treturn oldRoot, newRoot, nil\n}\n\nfunc collectFileInfo(sourceDir string) (*FileInfo, error) {\n\troot := newRootFileInfo()\n\n\terr := filepath.WalkDir(sourceDir, func(path string, _ os.DirEntry, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Rebase path\n\t\trelPath, err := filepath.Rel(sourceDir, path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// As this runs on the daemon side, file paths are OS specific.\n\t\trelPath = filepath.Join(string(os.PathSeparator), relPath)\n\n\t\t// See https://github.com/golang/go/issues/9168 - bug in filepath.Join.\n\t\t// Temporary workaround. If the returned path starts with two backslashes,\n\t\t// trim it down to a single backslash. Only relevant on Windows.\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\tif strings.HasPrefix(relPath, `\\\\`) {\n\t\t\t\trelPath = relPath[1:]\n\t\t\t}\n\t\t}\n\n\t\tif relPath == string(os.PathSeparator) {\n\t\t\treturn nil\n\t\t}\n\n\t\tparent := root.LookUp(filepath.Dir(relPath))\n\t\tif parent == nil {\n\t\t\treturn fmt.Errorf(\"collectFileInfo: Unexpectedly no parent for %s\", relPath)\n\t\t}\n\n\t\ts, err := os.Lstat(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tinfo := &FileInfo{\n\t\t\tname:     filepath.Base(relPath),\n\t\t\tchildren: make(map[string]*FileInfo),\n\t\t\tparent:   parent,\n\t\t\tstat:     s,\n\t\t}\n\n\t\tinfo.capability, _ = lgetxattr(path, \"security.capability\")\n\n\t\tparent.children[info.name] = info\n\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn root, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/changes_unix.go",
    "content": "//go:build !windows\n\npackage archive\n\nimport (\n\t\"io/fs\"\n\t\"os\"\n\t\"syscall\"\n)\n\nfunc statDifferent(oldStat fs.FileInfo, newStat fs.FileInfo) bool {\n\toldSys := oldStat.Sys().(*syscall.Stat_t)\n\tnewSys := newStat.Sys().(*syscall.Stat_t)\n\t// Don't look at size for dirs, its not a good measure of change\n\tif oldStat.Mode() != newStat.Mode() ||\n\t\toldSys.Uid != newSys.Uid ||\n\t\toldSys.Gid != newSys.Gid ||\n\t\toldSys.Rdev != newSys.Rdev ||\n\t\t// Don't look at size or modification time for dirs, its not a good\n\t\t// measure of change. See https://github.com/moby/moby/issues/9874\n\t\t// for a description of the issue with modification time, and\n\t\t// https://github.com/moby/moby/pull/11422 for the change.\n\t\t// (Note that in the Windows implementation of this function,\n\t\t// modification time IS taken as a change). See\n\t\t// https://github.com/moby/moby/pull/37982 for more information.\n\t\t(!oldStat.Mode().IsDir() &&\n\t\t\t(!sameFsTime(oldStat.ModTime(), newStat.ModTime()) || (oldStat.Size() != newStat.Size()))) {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (info *FileInfo) isDir() bool {\n\treturn info.parent == nil || info.stat.Mode().IsDir()\n}\n\nfunc getIno(fi os.FileInfo) uint64 {\n\treturn fi.Sys().(*syscall.Stat_t).Ino\n}\n\nfunc hasHardlinks(fi os.FileInfo) bool {\n\treturn fi.Sys().(*syscall.Stat_t).Nlink > 1\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/changes_windows.go",
    "content": "package archive\n\nimport (\n\t\"io/fs\"\n\t\"os\"\n)\n\nfunc statDifferent(oldStat fs.FileInfo, newStat fs.FileInfo) bool {\n\t// Note there is slight difference between the Linux and Windows\n\t// implementations here. Due to https://github.com/moby/moby/issues/9874,\n\t// and the fix at https://github.com/moby/moby/pull/11422, Linux does not\n\t// consider a change to the directory time as a change. Windows on NTFS\n\t// does. See https://github.com/moby/moby/pull/37982 for more information.\n\n\tif !sameFsTime(oldStat.ModTime(), newStat.ModTime()) ||\n\t\toldStat.Mode() != newStat.Mode() ||\n\t\toldStat.Size() != newStat.Size() && !oldStat.Mode().IsDir() {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (info *FileInfo) isDir() bool {\n\treturn info.parent == nil || info.stat.Mode().IsDir()\n}\n\nfunc getIno(fi os.FileInfo) (inode uint64) {\n\treturn\n}\n\nfunc hasHardlinks(fi os.FileInfo) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/copy.go",
    "content": "package archive\n\nimport (\n\t\"archive/tar\"\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/containerd/log\"\n)\n\n// Errors used or returned by this file.\nvar (\n\tErrNotDirectory      = errors.New(\"not a directory\")\n\tErrDirNotExists      = errors.New(\"no such directory\")\n\tErrCannotCopyDir     = errors.New(\"cannot copy directory\")\n\tErrInvalidCopySource = errors.New(\"invalid copy source content\")\n)\n\nvar copyPool = sync.Pool{\n\tNew: func() interface{} { s := make([]byte, 32*1024); return &s },\n}\n\nfunc copyWithBuffer(dst io.Writer, src io.Reader) (written int64, err error) {\n\tbuf := copyPool.Get().(*[]byte)\n\twritten, err = io.CopyBuffer(dst, src, *buf)\n\tcopyPool.Put(buf)\n\treturn\n}\n\n// PreserveTrailingDotOrSeparator returns the given cleaned path (after\n// processing using any utility functions from the path or filepath stdlib\n// packages) and appends a trailing `/.` or `/` if its corresponding  original\n// path (from before being processed by utility functions from the path or\n// filepath stdlib packages) ends with a trailing `/.` or `/`. If the cleaned\n// path already ends in a `.` path segment, then another is not added. If the\n// clean path already ends in a path separator, then another is not added.\nfunc PreserveTrailingDotOrSeparator(cleanedPath string, originalPath string) string {\n\t// Ensure paths are in platform semantics\n\tcleanedPath = normalizePath(cleanedPath)\n\toriginalPath = normalizePath(originalPath)\n\n\tif !specifiesCurrentDir(cleanedPath) && specifiesCurrentDir(originalPath) {\n\t\tif !hasTrailingPathSeparator(cleanedPath) {\n\t\t\t// Add a separator if it doesn't already end with one (a cleaned\n\t\t\t// path would only end in a separator if it is the root).\n\t\t\tcleanedPath += string(filepath.Separator)\n\t\t}\n\t\tcleanedPath += \".\"\n\t}\n\n\tif !hasTrailingPathSeparator(cleanedPath) && hasTrailingPathSeparator(originalPath) {\n\t\tcleanedPath += string(filepath.Separator)\n\t}\n\n\treturn cleanedPath\n}\n\n// assertsDirectory returns whether the given path is\n// asserted to be a directory, i.e., the path ends with\n// a trailing '/' or `/.`, assuming a path separator of `/`.\nfunc assertsDirectory(path string) bool {\n\treturn hasTrailingPathSeparator(path) || specifiesCurrentDir(path)\n}\n\n// hasTrailingPathSeparator returns whether the given\n// path ends with the system's path separator character.\nfunc hasTrailingPathSeparator(path string) bool {\n\treturn len(path) > 0 && path[len(path)-1] == filepath.Separator\n}\n\n// specifiesCurrentDir returns whether the given path specifies\n// a \"current directory\", i.e., the last path segment is `.`.\nfunc specifiesCurrentDir(path string) bool {\n\treturn filepath.Base(path) == \".\"\n}\n\n// SplitPathDirEntry splits the given path between its directory name and its\n// basename by first cleaning the path but preserves a trailing \".\" if the\n// original path specified the current directory.\nfunc SplitPathDirEntry(path string) (dir, base string) {\n\tcleanedPath := filepath.Clean(filepath.FromSlash(path))\n\n\tif specifiesCurrentDir(path) {\n\t\tcleanedPath += string(os.PathSeparator) + \".\"\n\t}\n\n\treturn filepath.Dir(cleanedPath), filepath.Base(cleanedPath)\n}\n\n// TarResource archives the resource described by the given CopyInfo to a Tar\n// archive. A non-nil error is returned if sourcePath does not exist or is\n// asserted to be a directory but exists as another type of file.\n//\n// This function acts as a convenient wrapper around TarWithOptions, which\n// requires a directory as the source path. TarResource accepts either a\n// directory or a file path and correctly sets the Tar options.\nfunc TarResource(sourceInfo CopyInfo) (content io.ReadCloser, err error) {\n\treturn TarResourceRebase(sourceInfo.Path, sourceInfo.RebaseName)\n}\n\n// TarResourceRebase is like TarResource but renames the first path element of\n// items in the resulting tar archive to match the given rebaseName if not \"\".\nfunc TarResourceRebase(sourcePath, rebaseName string) (content io.ReadCloser, err error) {\n\tsourcePath = normalizePath(sourcePath)\n\tif _, err = os.Lstat(sourcePath); err != nil {\n\t\t// Catches the case where the source does not exist or is not a\n\t\t// directory if asserted to be a directory, as this also causes an\n\t\t// error.\n\t\treturn\n\t}\n\n\t// Separate the source path between its directory and\n\t// the entry in that directory which we are archiving.\n\tsourceDir, sourceBase := SplitPathDirEntry(sourcePath)\n\topts := TarResourceRebaseOpts(sourceBase, rebaseName)\n\n\tlog.G(context.TODO()).Debugf(\"copying %q from %q\", sourceBase, sourceDir)\n\treturn TarWithOptions(sourceDir, opts)\n}\n\n// TarResourceRebaseOpts does not preform the Tar, but instead just creates the rebase\n// parameters to be sent to TarWithOptions (the TarOptions struct)\nfunc TarResourceRebaseOpts(sourceBase string, rebaseName string) *TarOptions {\n\tfilter := []string{sourceBase}\n\treturn &TarOptions{\n\t\tCompression:      Uncompressed,\n\t\tIncludeFiles:     filter,\n\t\tIncludeSourceDir: true,\n\t\tRebaseNames: map[string]string{\n\t\t\tsourceBase: rebaseName,\n\t\t},\n\t}\n}\n\n// CopyInfo holds basic info about the source\n// or destination path of a copy operation.\ntype CopyInfo struct {\n\tPath       string\n\tExists     bool\n\tIsDir      bool\n\tRebaseName string\n}\n\n// CopyInfoSourcePath stats the given path to create a CopyInfo\n// struct representing that resource for the source of an archive copy\n// operation. The given path should be an absolute local path. A source path\n// has all symlinks evaluated that appear before the last path separator (\"/\"\n// on Unix). As it is to be a copy source, the path must exist.\nfunc CopyInfoSourcePath(path string, followLink bool) (CopyInfo, error) {\n\t// normalize the file path and then evaluate the symbol link\n\t// we will use the target file instead of the symbol link if\n\t// followLink is set\n\tpath = normalizePath(path)\n\n\tresolvedPath, rebaseName, err := ResolveHostSourcePath(path, followLink)\n\tif err != nil {\n\t\treturn CopyInfo{}, err\n\t}\n\n\tstat, err := os.Lstat(resolvedPath)\n\tif err != nil {\n\t\treturn CopyInfo{}, err\n\t}\n\n\treturn CopyInfo{\n\t\tPath:       resolvedPath,\n\t\tExists:     true,\n\t\tIsDir:      stat.IsDir(),\n\t\tRebaseName: rebaseName,\n\t}, nil\n}\n\n// CopyInfoDestinationPath stats the given path to create a CopyInfo\n// struct representing that resource for the destination of an archive copy\n// operation. The given path should be an absolute local path.\nfunc CopyInfoDestinationPath(path string) (info CopyInfo, err error) {\n\tmaxSymlinkIter := 10 // filepath.EvalSymlinks uses 255, but 10 already seems like a lot.\n\tpath = normalizePath(path)\n\toriginalPath := path\n\n\tstat, err := os.Lstat(path)\n\n\tif err == nil && stat.Mode()&os.ModeSymlink == 0 {\n\t\t// The path exists and is not a symlink.\n\t\treturn CopyInfo{\n\t\t\tPath:   path,\n\t\t\tExists: true,\n\t\t\tIsDir:  stat.IsDir(),\n\t\t}, nil\n\t}\n\n\t// While the path is a symlink.\n\tfor n := 0; err == nil && stat.Mode()&os.ModeSymlink != 0; n++ {\n\t\tif n > maxSymlinkIter {\n\t\t\t// Don't follow symlinks more than this arbitrary number of times.\n\t\t\treturn CopyInfo{}, errors.New(\"too many symlinks in \" + originalPath)\n\t\t}\n\n\t\t// The path is a symbolic link. We need to evaluate it so that the\n\t\t// destination of the copy operation is the link target and not the\n\t\t// link itself. This is notably different than CopyInfoSourcePath which\n\t\t// only evaluates symlinks before the last appearing path separator.\n\t\t// Also note that it is okay if the last path element is a broken\n\t\t// symlink as the copy operation should create the target.\n\t\tvar linkTarget string\n\n\t\tlinkTarget, err = os.Readlink(path)\n\t\tif err != nil {\n\t\t\treturn CopyInfo{}, err\n\t\t}\n\n\t\tif !filepath.IsAbs(linkTarget) {\n\t\t\t// Join with the parent directory.\n\t\t\tdstParent, _ := SplitPathDirEntry(path)\n\t\t\tlinkTarget = filepath.Join(dstParent, linkTarget)\n\t\t}\n\n\t\tpath = linkTarget\n\t\tstat, err = os.Lstat(path)\n\t}\n\n\tif err != nil {\n\t\t// It's okay if the destination path doesn't exist. We can still\n\t\t// continue the copy operation if the parent directory exists.\n\t\tif !os.IsNotExist(err) {\n\t\t\treturn CopyInfo{}, err\n\t\t}\n\n\t\t// Ensure destination parent dir exists.\n\t\tdstParent, _ := SplitPathDirEntry(path)\n\n\t\tparentDirStat, err := os.Stat(dstParent)\n\t\tif err != nil {\n\t\t\treturn CopyInfo{}, err\n\t\t}\n\t\tif !parentDirStat.IsDir() {\n\t\t\treturn CopyInfo{}, ErrNotDirectory\n\t\t}\n\n\t\treturn CopyInfo{Path: path}, nil\n\t}\n\n\t// The path exists after resolving symlinks.\n\treturn CopyInfo{\n\t\tPath:   path,\n\t\tExists: true,\n\t\tIsDir:  stat.IsDir(),\n\t}, nil\n}\n\n// PrepareArchiveCopy prepares the given srcContent archive, which should\n// contain the archived resource described by srcInfo, to the destination\n// described by dstInfo. Returns the possibly modified content archive along\n// with the path to the destination directory which it should be extracted to.\nfunc PrepareArchiveCopy(srcContent io.Reader, srcInfo, dstInfo CopyInfo) (dstDir string, content io.ReadCloser, err error) {\n\t// Ensure in platform semantics\n\tsrcInfo.Path = normalizePath(srcInfo.Path)\n\tdstInfo.Path = normalizePath(dstInfo.Path)\n\n\t// Separate the destination path between its directory and base\n\t// components in case the source archive contents need to be rebased.\n\tdstDir, dstBase := SplitPathDirEntry(dstInfo.Path)\n\t_, srcBase := SplitPathDirEntry(srcInfo.Path)\n\n\tswitch {\n\tcase dstInfo.Exists && dstInfo.IsDir:\n\t\t// The destination exists as a directory. No alteration\n\t\t// to srcContent is needed as its contents can be\n\t\t// simply extracted to the destination directory.\n\t\treturn dstInfo.Path, io.NopCloser(srcContent), nil\n\tcase dstInfo.Exists && srcInfo.IsDir:\n\t\t// The destination exists as some type of file and the source\n\t\t// content is a directory. This is an error condition since\n\t\t// you cannot copy a directory to an existing file location.\n\t\treturn \"\", nil, ErrCannotCopyDir\n\tcase dstInfo.Exists:\n\t\t// The destination exists as some type of file and the source content\n\t\t// is also a file. The source content entry will have to be renamed to\n\t\t// have a basename which matches the destination path's basename.\n\t\tif len(srcInfo.RebaseName) != 0 {\n\t\t\tsrcBase = srcInfo.RebaseName\n\t\t}\n\t\treturn dstDir, RebaseArchiveEntries(srcContent, srcBase, dstBase), nil\n\tcase srcInfo.IsDir:\n\t\t// The destination does not exist and the source content is an archive\n\t\t// of a directory. The archive should be extracted to the parent of\n\t\t// the destination path instead, and when it is, the directory that is\n\t\t// created as a result should take the name of the destination path.\n\t\t// The source content entries will have to be renamed to have a\n\t\t// basename which matches the destination path's basename.\n\t\tif len(srcInfo.RebaseName) != 0 {\n\t\t\tsrcBase = srcInfo.RebaseName\n\t\t}\n\t\treturn dstDir, RebaseArchiveEntries(srcContent, srcBase, dstBase), nil\n\tcase assertsDirectory(dstInfo.Path):\n\t\t// The destination does not exist and is asserted to be created as a\n\t\t// directory, but the source content is not a directory. This is an\n\t\t// error condition since you cannot create a directory from a file\n\t\t// source.\n\t\treturn \"\", nil, ErrDirNotExists\n\tdefault:\n\t\t// The last remaining case is when the destination does not exist, is\n\t\t// not asserted to be a directory, and the source content is not an\n\t\t// archive of a directory. It this case, the destination file will need\n\t\t// to be created when the archive is extracted and the source content\n\t\t// entry will have to be renamed to have a basename which matches the\n\t\t// destination path's basename.\n\t\tif len(srcInfo.RebaseName) != 0 {\n\t\t\tsrcBase = srcInfo.RebaseName\n\t\t}\n\t\treturn dstDir, RebaseArchiveEntries(srcContent, srcBase, dstBase), nil\n\t}\n}\n\n// RebaseArchiveEntries rewrites the given srcContent archive replacing\n// an occurrence of oldBase with newBase at the beginning of entry names.\nfunc RebaseArchiveEntries(srcContent io.Reader, oldBase, newBase string) io.ReadCloser {\n\tif oldBase == string(os.PathSeparator) {\n\t\t// If oldBase specifies the root directory, use an empty string as\n\t\t// oldBase instead so that newBase doesn't replace the path separator\n\t\t// that all paths will start with.\n\t\toldBase = \"\"\n\t}\n\n\trebased, w := io.Pipe()\n\n\tgo func() {\n\t\tsrcTar := tar.NewReader(srcContent)\n\t\trebasedTar := tar.NewWriter(w)\n\n\t\tfor {\n\t\t\thdr, err := srcTar.Next()\n\t\t\tif err == io.EOF {\n\t\t\t\t// Signals end of archive.\n\t\t\t\trebasedTar.Close()\n\t\t\t\tw.Close()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tw.CloseWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// srcContent tar stream, as served by TarWithOptions(), is\n\t\t\t// definitely in PAX format, but tar.Next() mistakenly guesses it\n\t\t\t// as USTAR, which creates a problem: if the newBase is >100\n\t\t\t// characters long, WriteHeader() returns an error like\n\t\t\t// \"archive/tar: cannot encode header: Format specifies USTAR; and USTAR cannot encode Name=...\".\n\t\t\t//\n\t\t\t// To fix, set the format to PAX here. See docker/for-linux issue #484.\n\t\t\thdr.Format = tar.FormatPAX\n\t\t\thdr.Name = strings.Replace(hdr.Name, oldBase, newBase, 1)\n\t\t\tif hdr.Typeflag == tar.TypeLink {\n\t\t\t\thdr.Linkname = strings.Replace(hdr.Linkname, oldBase, newBase, 1)\n\t\t\t}\n\n\t\t\tif err = rebasedTar.WriteHeader(hdr); err != nil {\n\t\t\t\tw.CloseWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Ignoring GoSec G110. See https://github.com/securego/gosec/pull/433\n\t\t\t// and https://cure53.de/pentest-report_opa.pdf, which recommends to\n\t\t\t// replace io.Copy with io.CopyN7. The latter allows to specify the\n\t\t\t// maximum number of bytes that should be read. By properly defining\n\t\t\t// the limit, it can be assured that a GZip compression bomb cannot\n\t\t\t// easily cause a Denial-of-Service.\n\t\t\t// After reviewing with @tonistiigi and @cpuguy83, this should not\n\t\t\t// affect us, because here we do not read into memory, hence should\n\t\t\t// not be vulnerable to this code consuming memory.\n\t\t\t//nolint:gosec // G110: Potential DoS vulnerability via decompression bomb (gosec)\n\t\t\tif _, err = io.Copy(rebasedTar, srcTar); err != nil {\n\t\t\t\tw.CloseWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn rebased\n}\n\n// CopyResource performs an archive copy from the given source path to the\n// given destination path. The source path MUST exist and the destination\n// path's parent directory must exist.\nfunc CopyResource(srcPath, dstPath string, followLink bool) error {\n\tvar (\n\t\tsrcInfo CopyInfo\n\t\terr     error\n\t)\n\n\t// Ensure in platform semantics\n\tsrcPath = normalizePath(srcPath)\n\tdstPath = normalizePath(dstPath)\n\n\t// Clean the source and destination paths.\n\tsrcPath = PreserveTrailingDotOrSeparator(filepath.Clean(srcPath), srcPath)\n\tdstPath = PreserveTrailingDotOrSeparator(filepath.Clean(dstPath), dstPath)\n\n\tif srcInfo, err = CopyInfoSourcePath(srcPath, followLink); err != nil {\n\t\treturn err\n\t}\n\n\tcontent, err := TarResource(srcInfo)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer content.Close()\n\n\treturn CopyTo(content, srcInfo, dstPath)\n}\n\n// CopyTo handles extracting the given content whose\n// entries should be sourced from srcInfo to dstPath.\nfunc CopyTo(content io.Reader, srcInfo CopyInfo, dstPath string) error {\n\t// The destination path need not exist, but CopyInfoDestinationPath will\n\t// ensure that at least the parent directory exists.\n\tdstInfo, err := CopyInfoDestinationPath(normalizePath(dstPath))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdstDir, copyArchive, err := PrepareArchiveCopy(content, srcInfo, dstInfo)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer copyArchive.Close()\n\n\toptions := &TarOptions{\n\t\tNoLchown:             true,\n\t\tNoOverwriteDirNonDir: true,\n\t}\n\n\treturn Untar(copyArchive, dstDir, options)\n}\n\n// ResolveHostSourcePath decides real path need to be copied with parameters such as\n// whether to follow symbol link or not, if followLink is true, resolvedPath will return\n// link target of any symbol link file, else it will only resolve symlink of directory\n// but return symbol link file itself without resolving.\nfunc ResolveHostSourcePath(path string, followLink bool) (resolvedPath, rebaseName string, err error) {\n\tif followLink {\n\t\tresolvedPath, err = filepath.EvalSymlinks(path)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\tresolvedPath, rebaseName = GetRebaseName(path, resolvedPath)\n\t} else {\n\t\tdirPath, basePath := filepath.Split(path)\n\n\t\t// if not follow symbol link, then resolve symbol link of parent dir\n\t\tvar resolvedDirPath string\n\t\tresolvedDirPath, err = filepath.EvalSymlinks(dirPath)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\t// resolvedDirPath will have been cleaned (no trailing path separators) so\n\t\t// we can manually join it with the base path element.\n\t\tresolvedPath = resolvedDirPath + string(filepath.Separator) + basePath\n\t\tif hasTrailingPathSeparator(path) &&\n\t\t\tfilepath.Base(path) != filepath.Base(resolvedPath) {\n\t\t\trebaseName = filepath.Base(path)\n\t\t}\n\t}\n\treturn resolvedPath, rebaseName, nil\n}\n\n// GetRebaseName normalizes and compares path and resolvedPath,\n// return completed resolved path and rebased file name\nfunc GetRebaseName(path, resolvedPath string) (string, string) {\n\t// linkTarget will have been cleaned (no trailing path separators and dot) so\n\t// we can manually join it with them\n\tvar rebaseName string\n\tif specifiesCurrentDir(path) &&\n\t\t!specifiesCurrentDir(resolvedPath) {\n\t\tresolvedPath += string(filepath.Separator) + \".\"\n\t}\n\n\tif hasTrailingPathSeparator(path) &&\n\t\t!hasTrailingPathSeparator(resolvedPath) {\n\t\tresolvedPath += string(filepath.Separator)\n\t}\n\n\tif filepath.Base(path) != filepath.Base(resolvedPath) {\n\t\t// In the case where the path had a trailing separator and a symlink\n\t\t// evaluation has changed the last path component, we will need to\n\t\t// rebase the name in the archive that is being copied to match the\n\t\t// originally requested name.\n\t\trebaseName = filepath.Base(path)\n\t}\n\treturn resolvedPath, rebaseName\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/copy_unix.go",
    "content": "//go:build !windows\n\npackage archive\n\nimport (\n\t\"path/filepath\"\n)\n\nfunc normalizePath(path string) string {\n\treturn filepath.ToSlash(path)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/copy_windows.go",
    "content": "package archive\n\nimport (\n\t\"path/filepath\"\n)\n\nfunc normalizePath(path string) string {\n\treturn filepath.FromSlash(path)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/dev_freebsd.go",
    "content": "//go:build freebsd\n\npackage archive\n\nimport \"golang.org/x/sys/unix\"\n\nvar mknod = unix.Mknod\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/dev_unix.go",
    "content": "//go:build !windows && !freebsd\n\npackage archive\n\nimport \"golang.org/x/sys/unix\"\n\nfunc mknod(path string, mode uint32, dev uint64) error {\n\treturn unix.Mknod(path, mode, int(dev))\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/diff.go",
    "content": "package archive\n\nimport (\n\t\"archive/tar\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/containerd/log\"\n)\n\n// UnpackLayer unpack `layer` to a `dest`. The stream `layer` can be\n// compressed or uncompressed.\n// Returns the size in bytes of the contents of the layer.\nfunc UnpackLayer(dest string, layer io.Reader, options *TarOptions) (size int64, err error) {\n\ttr := tar.NewReader(layer)\n\n\tvar dirs []*tar.Header\n\tunpackedPaths := make(map[string]struct{})\n\n\tif options == nil {\n\t\toptions = &TarOptions{}\n\t}\n\tif options.ExcludePatterns == nil {\n\t\toptions.ExcludePatterns = []string{}\n\t}\n\n\taufsTempdir := \"\"\n\taufsHardlinks := make(map[string]*tar.Header)\n\n\t// Iterate through the files in the archive.\n\tfor {\n\t\thdr, err := tr.Next()\n\t\tif err == io.EOF {\n\t\t\t// end of tar archive\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tsize += hdr.Size\n\n\t\t// Normalize name, for safety and for a simple is-root check\n\t\thdr.Name = filepath.Clean(hdr.Name)\n\n\t\t// Windows does not support filenames with colons in them. Ignore\n\t\t// these files. This is not a problem though (although it might\n\t\t// appear that it is). Let's suppose a client is running docker pull.\n\t\t// The daemon it points to is Windows. Would it make sense for the\n\t\t// client to be doing a docker pull Ubuntu for example (which has files\n\t\t// with colons in the name under /usr/share/man/man3)? No, absolutely\n\t\t// not as it would really only make sense that they were pulling a\n\t\t// Windows image. However, for development, it is necessary to be able\n\t\t// to pull Linux images which are in the repository.\n\t\t//\n\t\t// TODO Windows. Once the registry is aware of what images are Windows-\n\t\t// specific or Linux-specific, this warning should be changed to an error\n\t\t// to cater for the situation where someone does manage to upload a Linux\n\t\t// image but have it tagged as Windows inadvertently.\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\tif strings.Contains(hdr.Name, \":\") {\n\t\t\t\tlog.G(context.TODO()).Warnf(\"Windows: Ignoring %s (is this a Linux image?)\", hdr.Name)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// Ensure that the parent directory exists.\n\t\terr = createImpliedDirectories(dest, hdr, options)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\t// Skip AUFS metadata dirs\n\t\tif strings.HasPrefix(hdr.Name, WhiteoutMetaPrefix) {\n\t\t\t// Regular files inside /.wh..wh.plnk can be used as hardlink targets\n\t\t\t// We don't want this directory, but we need the files in them so that\n\t\t\t// such hardlinks can be resolved.\n\t\t\tif strings.HasPrefix(hdr.Name, WhiteoutLinkDir) && hdr.Typeflag == tar.TypeReg {\n\t\t\t\tbasename := filepath.Base(hdr.Name)\n\t\t\t\taufsHardlinks[basename] = hdr\n\t\t\t\tif aufsTempdir == \"\" {\n\t\t\t\t\tif aufsTempdir, err = os.MkdirTemp(dest, \"dockerplnk\"); err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t\tdefer os.RemoveAll(aufsTempdir)\n\t\t\t\t}\n\t\t\t\tif err := createTarFile(filepath.Join(aufsTempdir, basename), dest, hdr, tr, options); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif hdr.Name != WhiteoutOpaqueDir {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\t// #nosec G305 -- The joined path is guarded against path traversal.\n\t\tpath := filepath.Join(dest, hdr.Name)\n\t\trel, err := filepath.Rel(dest, path)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\t// Note as these operations are platform specific, so must the slash be.\n\t\tif strings.HasPrefix(rel, \"..\"+string(os.PathSeparator)) {\n\t\t\treturn 0, breakoutError(fmt.Errorf(\"%q is outside of %q\", hdr.Name, dest))\n\t\t}\n\t\tbase := filepath.Base(path)\n\n\t\tif strings.HasPrefix(base, WhiteoutPrefix) {\n\t\t\tdir := filepath.Dir(path)\n\t\t\tif base == WhiteoutOpaqueDir {\n\t\t\t\t_, err := os.Lstat(dir)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\terr = filepath.WalkDir(dir, func(path string, info os.DirEntry, err error) error {\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tif os.IsNotExist(err) {\n\t\t\t\t\t\t\terr = nil // parent was deleted\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif path == dir {\n\t\t\t\t\t\treturn nil\n\t\t\t\t\t}\n\t\t\t\t\tif _, exists := unpackedPaths[path]; !exists {\n\t\t\t\t\t\treturn os.RemoveAll(path)\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toriginalBase := base[len(WhiteoutPrefix):]\n\t\t\t\toriginalPath := filepath.Join(dir, originalBase)\n\t\t\t\tif err := os.RemoveAll(originalPath); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// If path exits we almost always just want to remove and replace it.\n\t\t\t// The only exception is when it is a directory *and* the file from\n\t\t\t// the layer is also a directory. Then we want to merge them (i.e.\n\t\t\t// just apply the metadata from the layer).\n\t\t\tif fi, err := os.Lstat(path); err == nil {\n\t\t\t\tif !(fi.IsDir() && hdr.Typeflag == tar.TypeDir) {\n\t\t\t\t\tif err := os.RemoveAll(path); err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsrcData := io.Reader(tr)\n\t\t\tsrcHdr := hdr\n\n\t\t\t// Hard links into /.wh..wh.plnk don't work, as we don't extract that directory, so\n\t\t\t// we manually retarget these into the temporary files we extracted them into\n\t\t\tif hdr.Typeflag == tar.TypeLink && strings.HasPrefix(filepath.Clean(hdr.Linkname), WhiteoutLinkDir) {\n\t\t\t\tlinkBasename := filepath.Base(hdr.Linkname)\n\t\t\t\tsrcHdr = aufsHardlinks[linkBasename]\n\t\t\t\tif srcHdr == nil {\n\t\t\t\t\treturn 0, fmt.Errorf(\"Invalid aufs hardlink\")\n\t\t\t\t}\n\t\t\t\ttmpFile, err := os.Open(filepath.Join(aufsTempdir, linkBasename))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\tdefer tmpFile.Close()\n\t\t\t\tsrcData = tmpFile\n\t\t\t}\n\n\t\t\tif err := remapIDs(options.IDMap, srcHdr); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\n\t\t\tif err := createTarFile(path, dest, srcHdr, srcData, options); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\n\t\t\t// Directory mtimes must be handled at the end to avoid further\n\t\t\t// file creation in them to modify the directory mtime\n\t\t\tif hdr.Typeflag == tar.TypeDir {\n\t\t\t\tdirs = append(dirs, hdr)\n\t\t\t}\n\t\t\tunpackedPaths[path] = struct{}{}\n\t\t}\n\t}\n\n\tfor _, hdr := range dirs {\n\t\t// #nosec G305 -- The header was checked for path traversal before it was appended to the dirs slice.\n\t\tpath := filepath.Join(dest, hdr.Name)\n\t\tif err := chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\treturn size, nil\n}\n\n// ApplyLayer parses a diff in the standard layer format from `layer`,\n// and applies it to the directory `dest`. The stream `layer` can be\n// compressed or uncompressed.\n// Returns the size in bytes of the contents of the layer.\nfunc ApplyLayer(dest string, layer io.Reader) (int64, error) {\n\treturn applyLayerHandler(dest, layer, &TarOptions{}, true)\n}\n\n// ApplyUncompressedLayer parses a diff in the standard layer format from\n// `layer`, and applies it to the directory `dest`. The stream `layer`\n// can only be uncompressed.\n// Returns the size in bytes of the contents of the layer.\nfunc ApplyUncompressedLayer(dest string, layer io.Reader, options *TarOptions) (int64, error) {\n\treturn applyLayerHandler(dest, layer, options, false)\n}\n\n// IsEmpty checks if the tar archive is empty (doesn't contain any entries).\nfunc IsEmpty(rd io.Reader) (bool, error) {\n\tdecompRd, err := DecompressStream(rd)\n\tif err != nil {\n\t\treturn true, fmt.Errorf(\"failed to decompress archive: %v\", err)\n\t}\n\tdefer decompRd.Close()\n\n\ttarReader := tar.NewReader(decompRd)\n\tif _, err := tarReader.Next(); err != nil {\n\t\tif err == io.EOF {\n\t\t\treturn true, nil\n\t\t}\n\t\treturn false, fmt.Errorf(\"failed to read next archive header: %v\", err)\n\t}\n\n\treturn false, nil\n}\n\n// do the bulk load of ApplyLayer, but allow for not calling DecompressStream\nfunc applyLayerHandler(dest string, layer io.Reader, options *TarOptions, decompress bool) (int64, error) {\n\tdest = filepath.Clean(dest)\n\n\t// We need to be able to set any perms\n\trestore := overrideUmask(0)\n\tdefer restore()\n\n\tif decompress {\n\t\tdecompLayer, err := DecompressStream(layer)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tdefer decompLayer.Close()\n\t\tlayer = decompLayer\n\t}\n\treturn UnpackLayer(dest, layer, options)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/diff_unix.go",
    "content": "//go:build !windows\n\npackage archive\n\nimport \"golang.org/x/sys/unix\"\n\n// overrideUmask sets current process's file mode creation mask to newmask\n// and returns a function to restore it.\n//\n// WARNING for readers stumbling upon this code. Changing umask in a multi-\n// threaded environment isn't safe. Don't use this without understanding the\n// risks, and don't export this function for others to use (we shouldn't even\n// be using this ourself).\n//\n// FIXME(thaJeztah): we should get rid of these hacks if possible.\nfunc overrideUmask(newMask int) func() {\n\toldMask := unix.Umask(newMask)\n\treturn func() {\n\t\tunix.Umask(oldMask)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/diff_windows.go",
    "content": "package archive\n\n// overrideUmask is a no-op on windows.\nfunc overrideUmask(newmask int) func() {\n\treturn func() {}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/path.go",
    "content": "package archive\n\n// CheckSystemDriveAndRemoveDriveLetter verifies that a path, if it includes a drive letter,\n// is the system drive.\n// On Linux: this is a no-op.\n// On Windows: this does the following>\n// CheckSystemDriveAndRemoveDriveLetter verifies and manipulates a Windows path.\n// This is used, for example, when validating a user provided path in docker cp.\n// If a drive letter is supplied, it must be the system drive. The drive letter\n// is always removed. Also, it translates it to OS semantics (IOW / to \\). We\n// need the path in this syntax so that it can ultimately be concatenated with\n// a Windows long-path which doesn't support drive-letters. Examples:\n// C:\t\t\t--> Fail\n// C:\\\t\t\t--> \\\n// a\t\t\t--> a\n// /a\t\t\t--> \\a\n// d:\\\t\t\t--> Fail\nfunc CheckSystemDriveAndRemoveDriveLetter(path string) (string, error) {\n\treturn checkSystemDriveAndRemoveDriveLetter(path)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/path_unix.go",
    "content": "//go:build !windows\n\npackage archive\n\n// checkSystemDriveAndRemoveDriveLetter is the non-Windows implementation\n// of CheckSystemDriveAndRemoveDriveLetter\nfunc checkSystemDriveAndRemoveDriveLetter(path string) (string, error) {\n\treturn path, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/path_windows.go",
    "content": "package archive\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// checkSystemDriveAndRemoveDriveLetter is the Windows implementation\n// of CheckSystemDriveAndRemoveDriveLetter\nfunc checkSystemDriveAndRemoveDriveLetter(path string) (string, error) {\n\tif len(path) == 2 && string(path[1]) == \":\" {\n\t\treturn \"\", fmt.Errorf(\"no relative path specified in %q\", path)\n\t}\n\tif !filepath.IsAbs(path) || len(path) < 2 {\n\t\treturn filepath.FromSlash(path), nil\n\t}\n\tif string(path[1]) == \":\" && !strings.EqualFold(string(path[0]), \"c\") {\n\t\treturn \"\", fmt.Errorf(\"the specified path is not on the system drive (C:)\")\n\t}\n\treturn filepath.FromSlash(path[2:]), nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/time.go",
    "content": "package archive\n\nimport (\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\nvar (\n\tminTime = time.Unix(0, 0)\n\tmaxTime time.Time\n)\n\nfunc init() {\n\tif unsafe.Sizeof(syscall.Timespec{}.Nsec) == 8 {\n\t\t// This is a 64 bit timespec\n\t\t// os.Chtimes limits time to the following\n\t\tmaxTime = time.Unix(0, 1<<63-1)\n\t} else {\n\t\t// This is a 32 bit timespec\n\t\tmaxTime = time.Unix(1<<31-1, 0)\n\t}\n}\n\nfunc boundTime(t time.Time) time.Time {\n\tif t.Before(minTime) || t.After(maxTime) {\n\t\treturn minTime\n\t}\n\n\treturn t\n}\n\nfunc latestTime(t1, t2 time.Time) time.Time {\n\tif t1.Before(t2) {\n\t\treturn t2\n\t}\n\treturn t1\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/time_nonwindows.go",
    "content": "//go:build !windows\n\npackage archive\n\nimport (\n\t\"os\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// chtimes changes the access time and modified time of a file at the given path.\n// If the modified time is prior to the Unix Epoch (unixMinTime), or after the\n// end of Unix Time (unixEpochTime), os.Chtimes has undefined behavior. In this\n// case, Chtimes defaults to Unix Epoch, just in case.\nfunc chtimes(name string, atime time.Time, mtime time.Time) error {\n\treturn os.Chtimes(name, atime, mtime)\n}\n\nfunc timeToTimespec(time time.Time) (ts unix.Timespec) {\n\tif time.IsZero() {\n\t\t// Return UTIME_OMIT special value\n\t\tts.Sec = 0\n\t\tts.Nsec = (1 << 30) - 2\n\t\treturn\n\t}\n\treturn unix.NsecToTimespec(time.UnixNano())\n}\n\nfunc lchtimes(name string, atime time.Time, mtime time.Time) error {\n\tutimes := [2]unix.Timespec{\n\t\ttimeToTimespec(atime),\n\t\ttimeToTimespec(mtime),\n\t}\n\terr := unix.UtimesNanoAt(unix.AT_FDCWD, name, utimes[0:], unix.AT_SYMLINK_NOFOLLOW)\n\tif err != nil && err != unix.ENOSYS {\n\t\treturn err\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/time_windows.go",
    "content": "package archive\n\nimport (\n\t\"os\"\n\t\"time\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nfunc chtimes(name string, atime time.Time, mtime time.Time) error {\n\tif err := os.Chtimes(name, atime, mtime); err != nil {\n\t\treturn err\n\t}\n\n\tpathp, err := windows.UTF16PtrFromString(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\th, err := windows.CreateFile(pathp,\n\t\twindows.FILE_WRITE_ATTRIBUTES, windows.FILE_SHARE_WRITE, nil,\n\t\twindows.OPEN_EXISTING, windows.FILE_FLAG_BACKUP_SEMANTICS, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer windows.Close(h)\n\tc := windows.NsecToFiletime(mtime.UnixNano())\n\treturn windows.SetFileTime(h, &c, nil, nil)\n}\n\nfunc lchtimes(name string, atime time.Time, mtime time.Time) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/whiteouts.go",
    "content": "package archive\n\n// Whiteouts are files with a special meaning for the layered filesystem.\n// Docker uses AUFS whiteout files inside exported archives. In other\n// filesystems these files are generated/handled on tar creation/extraction.\n\n// WhiteoutPrefix prefix means file is a whiteout. If this is followed by a\n// filename this means that file has been removed from the base layer.\nconst WhiteoutPrefix = \".wh.\"\n\n// WhiteoutMetaPrefix prefix means whiteout has a special meaning and is not\n// for removing an actual file. Normally these files are excluded from exported\n// archives.\nconst WhiteoutMetaPrefix = WhiteoutPrefix + WhiteoutPrefix\n\n// WhiteoutLinkDir is a directory AUFS uses for storing hardlink links to other\n// layers. Normally these should not go into exported archives and all changed\n// hardlinks should be copied to the top layer.\nconst WhiteoutLinkDir = WhiteoutMetaPrefix + \"plnk\"\n\n// WhiteoutOpaqueDir file means directory has been made opaque - meaning\n// readdir calls to this directory do not follow to lower layers.\nconst WhiteoutOpaqueDir = WhiteoutMetaPrefix + \".opq\"\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/wrap.go",
    "content": "package archive\n\nimport (\n\t\"archive/tar\"\n\t\"bytes\"\n\t\"io\"\n)\n\n// Generate generates a new archive from the content provided\n// as input.\n//\n// `files` is a sequence of path/content pairs. A new file is\n// added to the archive for each pair.\n// If the last pair is incomplete, the file is created with an\n// empty content. For example:\n//\n// Generate(\"foo.txt\", \"hello world\", \"emptyfile\")\n//\n// The above call will return an archive with 2 files:\n//   - ./foo.txt with content \"hello world\"\n//   - ./empty with empty content\n//\n// FIXME: stream content instead of buffering\n// FIXME: specify permissions and other archive metadata\nfunc Generate(input ...string) (io.Reader, error) {\n\tfiles := parseStringPairs(input...)\n\tbuf := new(bytes.Buffer)\n\ttw := tar.NewWriter(buf)\n\tfor _, file := range files {\n\t\tname, content := file[0], file[1]\n\t\thdr := &tar.Header{\n\t\t\tName: name,\n\t\t\tSize: int64(len(content)),\n\t\t}\n\t\tif err := tw.WriteHeader(hdr); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif _, err := tw.Write([]byte(content)); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif err := tw.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf, nil\n}\n\nfunc parseStringPairs(input ...string) (output [][2]string) {\n\toutput = make([][2]string, 0, len(input)/2+1)\n\tfor i := 0; i < len(input); i += 2 {\n\t\tvar pair [2]string\n\t\tpair[0] = input[i]\n\t\tif i+1 < len(input) {\n\t\t\tpair[1] = input[i+1]\n\t\t}\n\t\toutput = append(output, pair)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/xattr_supported.go",
    "content": "//go:build linux || darwin || freebsd || netbsd\n\npackage archive\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io/fs\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// lgetxattr retrieves the value of the extended attribute identified by attr\n// and associated with the given path in the file system.\n// It returns a nil slice and nil error if the xattr is not set.\nfunc lgetxattr(path string, attr string) ([]byte, error) {\n\t// Start with a 128 length byte array\n\tdest := make([]byte, 128)\n\tsz, err := unix.Lgetxattr(path, attr, dest)\n\n\tfor errors.Is(err, unix.ERANGE) {\n\t\t// Buffer too small, use zero-sized buffer to get the actual size\n\t\tsz, err = unix.Lgetxattr(path, attr, []byte{})\n\t\tif err != nil {\n\t\t\treturn nil, wrapPathError(\"lgetxattr\", path, attr, err)\n\t\t}\n\t\tdest = make([]byte, sz)\n\t\tsz, err = unix.Lgetxattr(path, attr, dest)\n\t}\n\n\tif err != nil {\n\t\tif errors.Is(err, noattr) {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn nil, wrapPathError(\"lgetxattr\", path, attr, err)\n\t}\n\n\treturn dest[:sz], nil\n}\n\n// lsetxattr sets the value of the extended attribute identified by attr\n// and associated with the given path in the file system.\nfunc lsetxattr(path string, attr string, data []byte, flags int) error {\n\treturn wrapPathError(\"lsetxattr\", path, attr, unix.Lsetxattr(path, attr, data, flags))\n}\n\nfunc wrapPathError(op, path, attr string, err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &fs.PathError{Op: op, Path: path, Err: fmt.Errorf(\"xattr %q: %w\", attr, err)}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/xattr_supported_linux.go",
    "content": "package archive\n\nimport \"golang.org/x/sys/unix\"\n\nvar noattr = unix.ENODATA\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/xattr_supported_unix.go",
    "content": "//go:build !linux && !windows\n\npackage archive\n\nimport \"golang.org/x/sys/unix\"\n\nvar noattr = unix.ENOATTR\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/archive/xattr_unsupported.go",
    "content": "//go:build !linux && !darwin && !freebsd && !netbsd\n\npackage archive\n\nfunc lgetxattr(path string, attr string) ([]byte, error) {\n\treturn nil, nil\n}\n\nfunc lsetxattr(path string, attr string, data []byte, flags int) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/idtools/idtools.go",
    "content": "package idtools\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\n// IDMap contains a single entry for user namespace range remapping. An array\n// of IDMap entries represents the structure that will be provided to the Linux\n// kernel for creating a user namespace.\ntype IDMap struct {\n\tContainerID int `json:\"container_id\"`\n\tHostID      int `json:\"host_id\"`\n\tSize        int `json:\"size\"`\n}\n\n// MkdirAllAndChown creates a directory (include any along the path) and then modifies\n// ownership to the requested uid/gid.  If the directory already exists, this\n// function will still change ownership and permissions.\nfunc MkdirAllAndChown(path string, mode os.FileMode, owner Identity) error {\n\treturn mkdirAs(path, mode, owner, true, true)\n}\n\n// MkdirAndChown creates a directory and then modifies ownership to the requested uid/gid.\n// If the directory already exists, this function still changes ownership and permissions.\n// Note that unlike os.Mkdir(), this function does not return IsExist error\n// in case path already exists.\nfunc MkdirAndChown(path string, mode os.FileMode, owner Identity) error {\n\treturn mkdirAs(path, mode, owner, false, true)\n}\n\n// MkdirAllAndChownNew creates a directory (include any along the path) and then modifies\n// ownership ONLY of newly created directories to the requested uid/gid. If the\n// directories along the path exist, no change of ownership or permissions will be performed\nfunc MkdirAllAndChownNew(path string, mode os.FileMode, owner Identity) error {\n\treturn mkdirAs(path, mode, owner, true, false)\n}\n\n// GetRootUIDGID retrieves the remapped root uid/gid pair from the set of maps.\n// If the maps are empty, then the root uid/gid will default to \"real\" 0/0\nfunc GetRootUIDGID(uidMap, gidMap []IDMap) (int, int, error) {\n\tuid, err := toHost(0, uidMap)\n\tif err != nil {\n\t\treturn -1, -1, err\n\t}\n\tgid, err := toHost(0, gidMap)\n\tif err != nil {\n\t\treturn -1, -1, err\n\t}\n\treturn uid, gid, nil\n}\n\n// toContainer takes an id mapping, and uses it to translate a\n// host ID to the remapped ID. If no map is provided, then the translation\n// assumes a 1-to-1 mapping and returns the passed in id\nfunc toContainer(hostID int, idMap []IDMap) (int, error) {\n\tif idMap == nil {\n\t\treturn hostID, nil\n\t}\n\tfor _, m := range idMap {\n\t\tif (hostID >= m.HostID) && (hostID <= (m.HostID + m.Size - 1)) {\n\t\t\tcontID := m.ContainerID + (hostID - m.HostID)\n\t\t\treturn contID, nil\n\t\t}\n\t}\n\treturn -1, fmt.Errorf(\"Host ID %d cannot be mapped to a container ID\", hostID)\n}\n\n// toHost takes an id mapping and a remapped ID, and translates the\n// ID to the mapped host ID. If no map is provided, then the translation\n// assumes a 1-to-1 mapping and returns the passed in id #\nfunc toHost(contID int, idMap []IDMap) (int, error) {\n\tif idMap == nil {\n\t\treturn contID, nil\n\t}\n\tfor _, m := range idMap {\n\t\tif (contID >= m.ContainerID) && (contID <= (m.ContainerID + m.Size - 1)) {\n\t\t\thostID := m.HostID + (contID - m.ContainerID)\n\t\t\treturn hostID, nil\n\t\t}\n\t}\n\treturn -1, fmt.Errorf(\"Container ID %d cannot be mapped to a host ID\", contID)\n}\n\n// Identity is either a UID and GID pair or a SID (but not both)\ntype Identity struct {\n\tUID int\n\tGID int\n\tSID string\n}\n\n// Chown changes the numeric uid and gid of the named file to id.UID and id.GID.\nfunc (id Identity) Chown(name string) error {\n\treturn os.Chown(name, id.UID, id.GID)\n}\n\n// IdentityMapping contains a mappings of UIDs and GIDs.\n// The zero value represents an empty mapping.\ntype IdentityMapping struct {\n\tUIDMaps []IDMap `json:\"UIDMaps\"`\n\tGIDMaps []IDMap `json:\"GIDMaps\"`\n}\n\n// RootPair returns a uid and gid pair for the root user. The error is ignored\n// because a root user always exists, and the defaults are correct when the uid\n// and gid maps are empty.\nfunc (i IdentityMapping) RootPair() Identity {\n\tuid, gid, _ := GetRootUIDGID(i.UIDMaps, i.GIDMaps)\n\treturn Identity{UID: uid, GID: gid}\n}\n\n// ToHost returns the host UID and GID for the container uid, gid.\n// Remapping is only performed if the ids aren't already the remapped root ids\nfunc (i IdentityMapping) ToHost(pair Identity) (Identity, error) {\n\tvar err error\n\ttarget := i.RootPair()\n\n\tif pair.UID != target.UID {\n\t\ttarget.UID, err = toHost(pair.UID, i.UIDMaps)\n\t\tif err != nil {\n\t\t\treturn target, err\n\t\t}\n\t}\n\n\tif pair.GID != target.GID {\n\t\ttarget.GID, err = toHost(pair.GID, i.GIDMaps)\n\t}\n\treturn target, err\n}\n\n// ToContainer returns the container UID and GID for the host uid and gid\nfunc (i IdentityMapping) ToContainer(pair Identity) (int, int, error) {\n\tuid, err := toContainer(pair.UID, i.UIDMaps)\n\tif err != nil {\n\t\treturn -1, -1, err\n\t}\n\tgid, err := toContainer(pair.GID, i.GIDMaps)\n\treturn uid, gid, err\n}\n\n// Empty returns true if there are no id mappings\nfunc (i IdentityMapping) Empty() bool {\n\treturn len(i.UIDMaps) == 0 && len(i.GIDMaps) == 0\n}\n\n// CurrentIdentity returns the identity of the current process\nfunc CurrentIdentity() Identity {\n\treturn Identity{UID: os.Getuid(), GID: os.Getegid()}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/idtools/idtools_unix.go",
    "content": "//go:build !windows\n\npackage idtools\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"syscall\"\n\n\t\"github.com/moby/sys/user\"\n)\n\nfunc mkdirAs(path string, mode os.FileMode, owner Identity, mkAll, chownExisting bool) error {\n\tpath, err := filepath.Abs(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstat, err := os.Stat(path)\n\tif err == nil {\n\t\tif !stat.IsDir() {\n\t\t\treturn &os.PathError{Op: \"mkdir\", Path: path, Err: syscall.ENOTDIR}\n\t\t}\n\t\tif !chownExisting {\n\t\t\treturn nil\n\t\t}\n\n\t\t// short-circuit -- we were called with an existing directory and chown was requested\n\t\treturn setPermissions(path, mode, owner, stat)\n\t}\n\n\t// make an array containing the original path asked for, plus (for mkAll == true)\n\t// all path components leading up to the complete path that don't exist before we MkdirAll\n\t// so that we can chown all of them properly at the end.  If chownExisting is false, we won't\n\t// chown the full directory path if it exists\n\tvar paths []string\n\tif os.IsNotExist(err) {\n\t\tpaths = []string{path}\n\t}\n\n\tif mkAll {\n\t\t// walk back to \"/\" looking for directories which do not exist\n\t\t// and add them to the paths array for chown after creation\n\t\tdirPath := path\n\t\tfor {\n\t\t\tdirPath = filepath.Dir(dirPath)\n\t\t\tif dirPath == \"/\" {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif _, err = os.Stat(dirPath); err != nil && os.IsNotExist(err) {\n\t\t\t\tpaths = append(paths, dirPath)\n\t\t\t}\n\t\t}\n\t\tif err = os.MkdirAll(path, mode); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else if err = os.Mkdir(path, mode); err != nil {\n\t\treturn err\n\t}\n\t// even if it existed, we will chown the requested path + any subpaths that\n\t// didn't exist when we called MkdirAll\n\tfor _, pathComponent := range paths {\n\t\tif err = setPermissions(pathComponent, mode, owner, nil); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// LookupUser uses traditional local system files lookup (from libcontainer/user) on a username\n//\n// Deprecated: use [user.LookupUser] instead\nfunc LookupUser(name string) (user.User, error) {\n\treturn user.LookupUser(name)\n}\n\n// LookupUID uses traditional local system files lookup (from libcontainer/user) on a uid\n//\n// Deprecated: use [user.LookupUid] instead\nfunc LookupUID(uid int) (user.User, error) {\n\treturn user.LookupUid(uid)\n}\n\n// LookupGroup uses traditional local system files lookup (from libcontainer/user) on a group name,\n//\n// Deprecated: use [user.LookupGroup] instead\nfunc LookupGroup(name string) (user.Group, error) {\n\treturn user.LookupGroup(name)\n}\n\n// setPermissions performs a chown/chmod only if the uid/gid don't match what's requested\n// Normally a Chown is a no-op if uid/gid match, but in some cases this can still cause an error, e.g. if the\n// dir is on an NFS share, so don't call chown unless we absolutely must.\n// Likewise for setting permissions.\nfunc setPermissions(p string, mode os.FileMode, owner Identity, stat os.FileInfo) error {\n\tif stat == nil {\n\t\tvar err error\n\t\tstat, err = os.Stat(p)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif stat.Mode().Perm() != mode.Perm() {\n\t\tif err := os.Chmod(p, mode.Perm()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tssi := stat.Sys().(*syscall.Stat_t)\n\tif ssi.Uid == uint32(owner.UID) && ssi.Gid == uint32(owner.GID) {\n\t\treturn nil\n\t}\n\treturn os.Chown(p, owner.UID, owner.GID)\n}\n\n// LoadIdentityMapping takes a requested username and\n// using the data from /etc/sub{uid,gid} ranges, creates the\n// proper uid and gid remapping ranges for that user/group pair\nfunc LoadIdentityMapping(name string) (IdentityMapping, error) {\n\t// TODO: Consider adding support for calling out to \"getent\"\n\tusr, err := user.LookupUser(name)\n\tif err != nil {\n\t\treturn IdentityMapping{}, fmt.Errorf(\"could not get user for username %s: %v\", name, err)\n\t}\n\n\tsubuidRanges, err := lookupSubRangesFile(\"/etc/subuid\", usr)\n\tif err != nil {\n\t\treturn IdentityMapping{}, err\n\t}\n\tsubgidRanges, err := lookupSubRangesFile(\"/etc/subgid\", usr)\n\tif err != nil {\n\t\treturn IdentityMapping{}, err\n\t}\n\n\treturn IdentityMapping{\n\t\tUIDMaps: subuidRanges,\n\t\tGIDMaps: subgidRanges,\n\t}, nil\n}\n\nfunc lookupSubRangesFile(path string, usr user.User) ([]IDMap, error) {\n\tuidstr := strconv.Itoa(usr.Uid)\n\trangeList, err := user.ParseSubIDFileFilter(path, func(sid user.SubID) bool {\n\t\treturn sid.Name == usr.Name || sid.Name == uidstr\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(rangeList) == 0 {\n\t\treturn nil, fmt.Errorf(\"no subuid ranges found for user %q\", usr.Name)\n\t}\n\n\tidMap := []IDMap{}\n\n\tcontainerID := 0\n\tfor _, idrange := range rangeList {\n\t\tidMap = append(idMap, IDMap{\n\t\t\tContainerID: containerID,\n\t\t\tHostID:      int(idrange.SubID),\n\t\t\tSize:        int(idrange.Count),\n\t\t})\n\t\tcontainerID = containerID + int(idrange.Count)\n\t}\n\treturn idMap, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/idtools/idtools_windows.go",
    "content": "package idtools\n\nimport (\n\t\"os\"\n)\n\nconst (\n\tSeTakeOwnershipPrivilege = \"SeTakeOwnershipPrivilege\"\n)\n\n// TODO(thaJeztah): these magic consts need a source of reference, and should be defined in a canonical location\nconst (\n\tContainerAdministratorSidString = \"S-1-5-93-2-1\"\n\n\tContainerUserSidString = \"S-1-5-93-2-2\"\n)\n\n// This is currently a wrapper around [os.MkdirAll] since currently\n// permissions aren't set through this path, the identity isn't utilized.\n// Ownership is handled elsewhere, but in the future could be support here\n// too.\nfunc mkdirAs(path string, _ os.FileMode, _ Identity, _, _ bool) error {\n\treturn os.MkdirAll(path, 0)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go",
    "content": "package jsonmessage // import \"github.com/docker/docker/pkg/jsonmessage\"\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/docker/go-units\"\n\t\"github.com/moby/term\"\n\t\"github.com/morikuni/aec\"\n)\n\n// RFC3339NanoFixed is time.RFC3339Nano with nanoseconds padded using zeros to\n// ensure the formatted time isalways the same number of characters.\nconst RFC3339NanoFixed = \"2006-01-02T15:04:05.000000000Z07:00\"\n\n// JSONError wraps a concrete Code and Message, Code is\n// an integer error code, Message is the error message.\ntype JSONError struct {\n\tCode    int    `json:\"code,omitempty\"`\n\tMessage string `json:\"message,omitempty\"`\n}\n\nfunc (e *JSONError) Error() string {\n\treturn e.Message\n}\n\n// JSONProgress describes a progress message in a JSON stream.\ntype JSONProgress struct {\n\t// Current is the current status and value of the progress made towards Total.\n\tCurrent int64 `json:\"current,omitempty\"`\n\t// Total is the end value describing when we made 100% progress for an operation.\n\tTotal int64 `json:\"total,omitempty\"`\n\t// Start is the initial value for the operation.\n\tStart int64 `json:\"start,omitempty\"`\n\t// HideCounts. if true, hides the progress count indicator (xB/yB).\n\tHideCounts bool `json:\"hidecounts,omitempty\"`\n\t// Units is the unit to print for progress. It defaults to \"bytes\" if empty.\n\tUnits string `json:\"units,omitempty\"`\n\n\t// terminalFd is the fd of the current terminal, if any. It is used\n\t// to get the terminal width.\n\tterminalFd uintptr\n\n\t// nowFunc is used to override the current time in tests.\n\tnowFunc func() time.Time\n\n\t// winSize is used to override the terminal width in tests.\n\twinSize int\n}\n\nfunc (p *JSONProgress) String() string {\n\tvar (\n\t\twidth      = p.width()\n\t\tpbBox      string\n\t\tnumbersBox string\n\t)\n\tif p.Current <= 0 && p.Total <= 0 {\n\t\treturn \"\"\n\t}\n\tif p.Total <= 0 {\n\t\tswitch p.Units {\n\t\tcase \"\":\n\t\t\treturn fmt.Sprintf(\"%8v\", units.HumanSize(float64(p.Current)))\n\t\tdefault:\n\t\t\treturn fmt.Sprintf(\"%d %s\", p.Current, p.Units)\n\t\t}\n\t}\n\n\tpercentage := int(float64(p.Current)/float64(p.Total)*100) / 2\n\tif percentage > 50 {\n\t\tpercentage = 50\n\t}\n\tif width > 110 {\n\t\t// this number can't be negative gh#7136\n\t\tnumSpaces := 0\n\t\tif 50-percentage > 0 {\n\t\t\tnumSpaces = 50 - percentage\n\t\t}\n\t\tpbBox = fmt.Sprintf(\"[%s>%s] \", strings.Repeat(\"=\", percentage), strings.Repeat(\" \", numSpaces))\n\t}\n\n\tswitch {\n\tcase p.HideCounts:\n\tcase p.Units == \"\": // no units, use bytes\n\t\tcurrent := units.HumanSize(float64(p.Current))\n\t\ttotal := units.HumanSize(float64(p.Total))\n\n\t\tnumbersBox = fmt.Sprintf(\"%8v/%v\", current, total)\n\n\t\tif p.Current > p.Total {\n\t\t\t// remove total display if the reported current is wonky.\n\t\t\tnumbersBox = fmt.Sprintf(\"%8v\", current)\n\t\t}\n\tdefault:\n\t\tnumbersBox = fmt.Sprintf(\"%d/%d %s\", p.Current, p.Total, p.Units)\n\n\t\tif p.Current > p.Total {\n\t\t\t// remove total display if the reported current is wonky.\n\t\t\tnumbersBox = fmt.Sprintf(\"%d %s\", p.Current, p.Units)\n\t\t}\n\t}\n\n\t// Show approximation of remaining time if there's enough width.\n\tvar timeLeftBox string\n\tif width > 50 {\n\t\tif p.Current > 0 && p.Start > 0 && percentage < 50 {\n\t\t\tfromStart := p.now().Sub(time.Unix(p.Start, 0))\n\t\t\tperEntry := fromStart / time.Duration(p.Current)\n\t\t\tleft := time.Duration(p.Total-p.Current) * perEntry\n\t\t\ttimeLeftBox = \" \" + left.Round(time.Second).String()\n\t\t}\n\t}\n\treturn pbBox + numbersBox + timeLeftBox\n}\n\n// now returns the current time in UTC, but can be overridden in tests\n// by setting JSONProgress.nowFunc to a custom function.\nfunc (p *JSONProgress) now() time.Time {\n\tif p.nowFunc != nil {\n\t\treturn p.nowFunc()\n\t}\n\treturn time.Now().UTC()\n}\n\n// width returns the current terminal's width, but can be overridden\n// in tests by setting JSONProgress.winSize to a non-zero value.\nfunc (p *JSONProgress) width() int {\n\tif p.winSize != 0 {\n\t\treturn p.winSize\n\t}\n\tws, err := term.GetWinsize(p.terminalFd)\n\tif err == nil {\n\t\treturn int(ws.Width)\n\t}\n\treturn 200\n}\n\n// JSONMessage defines a message struct. It describes\n// the created time, where it from, status, ID of the\n// message. It's used for docker events.\ntype JSONMessage struct {\n\tStream   string        `json:\"stream,omitempty\"`\n\tStatus   string        `json:\"status,omitempty\"`\n\tProgress *JSONProgress `json:\"progressDetail,omitempty\"`\n\n\t// ProgressMessage is a pre-formatted presentation of [Progress].\n\t//\n\t// Deprecated: this field is deprecated since docker v0.7.1 / API v1.8. Use the information in [Progress] instead. This field will be omitted in a future release.\n\tProgressMessage string     `json:\"progress,omitempty\"`\n\tID              string     `json:\"id,omitempty\"`\n\tFrom            string     `json:\"from,omitempty\"`\n\tTime            int64      `json:\"time,omitempty\"`\n\tTimeNano        int64      `json:\"timeNano,omitempty\"`\n\tError           *JSONError `json:\"errorDetail,omitempty\"`\n\n\t// ErrorMessage contains errors encountered during the operation.\n\t//\n\t// Deprecated: this field is deprecated since docker v0.6.0 / API v1.4. Use [Error.Message] instead. This field will be omitted in a future release.\n\tErrorMessage string `json:\"error,omitempty\"` // deprecated\n\t// Aux contains out-of-band data, such as digests for push signing and image id after building.\n\tAux *json.RawMessage `json:\"aux,omitempty\"`\n}\n\nfunc clearLine(out io.Writer) {\n\teraseMode := aec.EraseModes.All\n\tcl := aec.EraseLine(eraseMode)\n\tfmt.Fprint(out, cl)\n}\n\nfunc cursorUp(out io.Writer, l uint) {\n\tfmt.Fprint(out, aec.Up(l))\n}\n\nfunc cursorDown(out io.Writer, l uint) {\n\tfmt.Fprint(out, aec.Down(l))\n}\n\n// Display prints the JSONMessage to out. If isTerminal is true, it erases\n// the entire current line when displaying the progressbar. It returns an\n// error if the [JSONMessage.Error] field is non-nil.\nfunc (jm *JSONMessage) Display(out io.Writer, isTerminal bool) error {\n\tif jm.Error != nil {\n\t\treturn jm.Error\n\t}\n\tvar endl string\n\tif isTerminal && jm.Stream == \"\" && jm.Progress != nil {\n\t\tclearLine(out)\n\t\tendl = \"\\r\"\n\t\tfmt.Fprint(out, endl)\n\t} else if jm.Progress != nil && jm.Progress.String() != \"\" { // disable progressbar in non-terminal\n\t\treturn nil\n\t}\n\tif jm.TimeNano != 0 {\n\t\tfmt.Fprintf(out, \"%s \", time.Unix(0, jm.TimeNano).Format(RFC3339NanoFixed))\n\t} else if jm.Time != 0 {\n\t\tfmt.Fprintf(out, \"%s \", time.Unix(jm.Time, 0).Format(RFC3339NanoFixed))\n\t}\n\tif jm.ID != \"\" {\n\t\tfmt.Fprintf(out, \"%s: \", jm.ID)\n\t}\n\tif jm.From != \"\" {\n\t\tfmt.Fprintf(out, \"(from %s) \", jm.From)\n\t}\n\tif jm.Progress != nil && isTerminal {\n\t\tfmt.Fprintf(out, \"%s %s%s\", jm.Status, jm.Progress.String(), endl)\n\t} else if jm.ProgressMessage != \"\" { // deprecated\n\t\tfmt.Fprintf(out, \"%s %s%s\", jm.Status, jm.ProgressMessage, endl)\n\t} else if jm.Stream != \"\" {\n\t\tfmt.Fprintf(out, \"%s%s\", jm.Stream, endl)\n\t} else {\n\t\tfmt.Fprintf(out, \"%s%s\\n\", jm.Status, endl)\n\t}\n\treturn nil\n}\n\n// DisplayJSONMessagesStream reads a JSON message stream from in, and writes\n// each [JSONMessage] to out. It returns an error if an invalid JSONMessage\n// is received, or if a JSONMessage containers a non-zero [JSONMessage.Error].\n//\n// Presentation of the JSONMessage depends on whether a terminal is attached,\n// and on the terminal width. Progress bars ([JSONProgress]) are suppressed\n// on narrower terminals (< 110 characters).\n//\n//   - isTerminal describes if out is a terminal, in which case it prints\n//     a newline (\"\\n\") at the end of each line and moves the cursor while\n//     displaying.\n//   - terminalFd is the fd of the current terminal (if any), and used\n//     to get the terminal width.\n//   - auxCallback allows handling the [JSONMessage.Aux] field. It is\n//     called if a JSONMessage contains an Aux field, in which case\n//     DisplayJSONMessagesStream does not present the JSONMessage.\nfunc DisplayJSONMessagesStream(in io.Reader, out io.Writer, terminalFd uintptr, isTerminal bool, auxCallback func(JSONMessage)) error {\n\tvar (\n\t\tdec = json.NewDecoder(in)\n\t\tids = make(map[string]uint)\n\t)\n\n\tfor {\n\t\tvar diff uint\n\t\tvar jm JSONMessage\n\t\tif err := dec.Decode(&jm); err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tif jm.Aux != nil {\n\t\t\tif auxCallback != nil {\n\t\t\t\tauxCallback(jm)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif jm.Progress != nil {\n\t\t\tjm.Progress.terminalFd = terminalFd\n\t\t}\n\t\tif jm.ID != \"\" && (jm.Progress != nil || jm.ProgressMessage != \"\") {\n\t\t\tline, ok := ids[jm.ID]\n\t\t\tif !ok {\n\t\t\t\t// NOTE: This approach of using len(id) to\n\t\t\t\t// figure out the number of lines of history\n\t\t\t\t// only works as long as we clear the history\n\t\t\t\t// when we output something that's not\n\t\t\t\t// accounted for in the map, such as a line\n\t\t\t\t// with no ID.\n\t\t\t\tline = uint(len(ids))\n\t\t\t\tids[jm.ID] = line\n\t\t\t\tif isTerminal {\n\t\t\t\t\tfmt.Fprintf(out, \"\\n\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tdiff = uint(len(ids)) - line\n\t\t\tif isTerminal {\n\t\t\t\tcursorUp(out, diff)\n\t\t\t}\n\t\t} else {\n\t\t\t// When outputting something that isn't progress\n\t\t\t// output, clear the history of previous lines. We\n\t\t\t// don't want progress entries from some previous\n\t\t\t// operation to be updated (for example, pull -a\n\t\t\t// with multiple tags).\n\t\t\tids = make(map[string]uint)\n\t\t}\n\t\terr := jm.Display(out, isTerminal)\n\t\tif jm.ID != \"\" && isTerminal {\n\t\t\tcursorDown(out, diff)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Stream is an io.Writer for output with utilities to get the output's file\n// descriptor and to detect whether it's a terminal.\n//\n// it is subset of the streams.Out type in\n// https://pkg.go.dev/github.com/docker/cli@v20.10.17+incompatible/cli/streams#Out\ntype Stream interface {\n\tio.Writer\n\tFD() uintptr\n\tIsTerminal() bool\n}\n\n// DisplayJSONMessagesToStream prints json messages to the output Stream. It is\n// used by the Docker CLI to print JSONMessage streams.\nfunc DisplayJSONMessagesToStream(in io.Reader, stream Stream, auxCallback func(JSONMessage)) error {\n\treturn DisplayJSONMessagesStream(in, stream, stream.FD(), stream.IsTerminal(), auxCallback)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/docker/pkg/stdcopy/stdcopy.go",
    "content": "package stdcopy // import \"github.com/docker/docker/pkg/stdcopy\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n)\n\n// StdType is the type of standard stream\n// a writer can multiplex to.\ntype StdType byte\n\nconst (\n\t// Stdin represents standard input stream type.\n\tStdin StdType = iota\n\t// Stdout represents standard output stream type.\n\tStdout\n\t// Stderr represents standard error steam type.\n\tStderr\n\t// Systemerr represents errors originating from the system that make it\n\t// into the multiplexed stream.\n\tSystemerr\n\n\tstdWriterPrefixLen = 8\n\tstdWriterFdIndex   = 0\n\tstdWriterSizeIndex = 4\n\n\tstartingBufLen = 32*1024 + stdWriterPrefixLen + 1\n)\n\nvar bufPool = &sync.Pool{New: func() interface{} { return bytes.NewBuffer(nil) }}\n\n// stdWriter is wrapper of io.Writer with extra customized info.\ntype stdWriter struct {\n\tio.Writer\n\tprefix byte\n}\n\n// Write sends the buffer to the underneath writer.\n// It inserts the prefix header before the buffer,\n// so stdcopy.StdCopy knows where to multiplex the output.\n// It makes stdWriter to implement io.Writer.\nfunc (w *stdWriter) Write(p []byte) (n int, err error) {\n\tif w == nil || w.Writer == nil {\n\t\treturn 0, errors.New(\"Writer not instantiated\")\n\t}\n\tif p == nil {\n\t\treturn 0, nil\n\t}\n\n\theader := [stdWriterPrefixLen]byte{stdWriterFdIndex: w.prefix}\n\tbinary.BigEndian.PutUint32(header[stdWriterSizeIndex:], uint32(len(p)))\n\tbuf := bufPool.Get().(*bytes.Buffer)\n\tbuf.Write(header[:])\n\tbuf.Write(p)\n\n\tn, err = w.Writer.Write(buf.Bytes())\n\tn -= stdWriterPrefixLen\n\tif n < 0 {\n\t\tn = 0\n\t}\n\n\tbuf.Reset()\n\tbufPool.Put(buf)\n\treturn\n}\n\n// NewStdWriter instantiates a new Writer.\n// Everything written to it will be encapsulated using a custom format,\n// and written to the underlying `w` stream.\n// This allows multiple write streams (e.g. stdout and stderr) to be muxed into a single connection.\n// `t` indicates the id of the stream to encapsulate.\n// It can be stdcopy.Stdin, stdcopy.Stdout, stdcopy.Stderr.\nfunc NewStdWriter(w io.Writer, t StdType) io.Writer {\n\treturn &stdWriter{\n\t\tWriter: w,\n\t\tprefix: byte(t),\n\t}\n}\n\n// StdCopy is a modified version of io.Copy.\n//\n// StdCopy will demultiplex `src`, assuming that it contains two streams,\n// previously multiplexed together using a StdWriter instance.\n// As it reads from `src`, StdCopy will write to `dstout` and `dsterr`.\n//\n// StdCopy will read until it hits EOF on `src`. It will then return a nil error.\n// In other words: if `err` is non nil, it indicates a real underlying error.\n//\n// `written` will hold the total number of bytes written to `dstout` and `dsterr`.\nfunc StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, err error) {\n\tvar (\n\t\tbuf       = make([]byte, startingBufLen)\n\t\tbufLen    = len(buf)\n\t\tnr, nw    int\n\t\ter, ew    error\n\t\tout       io.Writer\n\t\tframeSize int\n\t)\n\n\tfor {\n\t\t// Make sure we have at least a full header\n\t\tfor nr < stdWriterPrefixLen {\n\t\t\tvar nr2 int\n\t\t\tnr2, er = src.Read(buf[nr:])\n\t\t\tnr += nr2\n\t\t\tif er == io.EOF {\n\t\t\t\tif nr < stdWriterPrefixLen {\n\t\t\t\t\treturn written, nil\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif er != nil {\n\t\t\t\treturn 0, er\n\t\t\t}\n\t\t}\n\n\t\tstream := StdType(buf[stdWriterFdIndex])\n\t\t// Check the first byte to know where to write\n\t\tswitch stream {\n\t\tcase Stdin:\n\t\t\tfallthrough\n\t\tcase Stdout:\n\t\t\t// Write on stdout\n\t\t\tout = dstout\n\t\tcase Stderr:\n\t\t\t// Write on stderr\n\t\t\tout = dsterr\n\t\tcase Systemerr:\n\t\t\t// If we're on Systemerr, we won't write anywhere.\n\t\t\t// NB: if this code changes later, make sure you don't try to write\n\t\t\t// to outstream if Systemerr is the stream\n\t\t\tout = nil\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"Unrecognized input header: %d\", buf[stdWriterFdIndex])\n\t\t}\n\n\t\t// Retrieve the size of the frame\n\t\tframeSize = int(binary.BigEndian.Uint32(buf[stdWriterSizeIndex : stdWriterSizeIndex+4]))\n\n\t\t// Check if the buffer is big enough to read the frame.\n\t\t// Extend it if necessary.\n\t\tif frameSize+stdWriterPrefixLen > bufLen {\n\t\t\tbuf = append(buf, make([]byte, frameSize+stdWriterPrefixLen-bufLen+1)...)\n\t\t\tbufLen = len(buf)\n\t\t}\n\n\t\t// While the amount of bytes read is less than the size of the frame + header, we keep reading\n\t\tfor nr < frameSize+stdWriterPrefixLen {\n\t\t\tvar nr2 int\n\t\t\tnr2, er = src.Read(buf[nr:])\n\t\t\tnr += nr2\n\t\t\tif er == io.EOF {\n\t\t\t\tif nr < frameSize+stdWriterPrefixLen {\n\t\t\t\t\treturn written, nil\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif er != nil {\n\t\t\t\treturn 0, er\n\t\t\t}\n\t\t}\n\n\t\t// we might have an error from the source mixed up in our multiplexed\n\t\t// stream. if we do, return it.\n\t\tif stream == Systemerr {\n\t\t\treturn written, fmt.Errorf(\"error from daemon in stream: %s\", string(buf[stdWriterPrefixLen:frameSize+stdWriterPrefixLen]))\n\t\t}\n\n\t\t// Write the retrieved frame (without header)\n\t\tnw, ew = out.Write(buf[stdWriterPrefixLen : frameSize+stdWriterPrefixLen])\n\t\tif ew != nil {\n\t\t\treturn 0, ew\n\t\t}\n\n\t\t// If the frame has not been fully written: error\n\t\tif nw != frameSize {\n\t\t\treturn 0, io.ErrShortWrite\n\t\t}\n\t\twritten += int64(nw)\n\n\t\t// Move the rest of the buffer to the beginning\n\t\tcopy(buf, buf[frameSize+stdWriterPrefixLen:])\n\t\t// Move the index\n\t\tnr -= frameSize + stdWriterPrefixLen\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        https://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   Copyright 2015 Docker, 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       https://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": "vendor/github.com/docker/go-connections/nat/nat.go",
    "content": "// Package nat is a convenience package for manipulation of strings describing network ports.\npackage nat\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// PortBinding represents a binding between a Host IP address and a Host Port\ntype PortBinding struct {\n\t// HostIP is the host IP Address\n\tHostIP string `json:\"HostIp\"`\n\t// HostPort is the host port number\n\tHostPort string\n}\n\n// PortMap is a collection of PortBinding indexed by Port\ntype PortMap map[Port][]PortBinding\n\n// PortSet is a collection of structs indexed by Port\ntype PortSet map[Port]struct{}\n\n// Port is a string containing port number and protocol in the format \"80/tcp\"\ntype Port string\n\n// NewPort creates a new instance of a Port given a protocol and port number or port range\nfunc NewPort(proto, port string) (Port, error) {\n\t// Check for parsing issues on \"port\" now so we can avoid having\n\t// to check it later on.\n\n\tportStartInt, portEndInt, err := ParsePortRangeToInt(port)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif portStartInt == portEndInt {\n\t\treturn Port(fmt.Sprintf(\"%d/%s\", portStartInt, proto)), nil\n\t}\n\treturn Port(fmt.Sprintf(\"%d-%d/%s\", portStartInt, portEndInt, proto)), nil\n}\n\n// ParsePort parses the port number string and returns an int\nfunc ParsePort(rawPort string) (int, error) {\n\tif len(rawPort) == 0 {\n\t\treturn 0, nil\n\t}\n\tport, err := strconv.ParseUint(rawPort, 10, 16)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int(port), nil\n}\n\n// ParsePortRangeToInt parses the port range string and returns start/end ints\nfunc ParsePortRangeToInt(rawPort string) (int, int, error) {\n\tif len(rawPort) == 0 {\n\t\treturn 0, 0, nil\n\t}\n\tstart, end, err := ParsePortRange(rawPort)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\treturn int(start), int(end), nil\n}\n\n// Proto returns the protocol of a Port\nfunc (p Port) Proto() string {\n\tproto, _ := SplitProtoPort(string(p))\n\treturn proto\n}\n\n// Port returns the port number of a Port\nfunc (p Port) Port() string {\n\t_, port := SplitProtoPort(string(p))\n\treturn port\n}\n\n// Int returns the port number of a Port as an int\nfunc (p Port) Int() int {\n\tportStr := p.Port()\n\t// We don't need to check for an error because we're going to\n\t// assume that any error would have been found, and reported, in NewPort()\n\tport, _ := ParsePort(portStr)\n\treturn port\n}\n\n// Range returns the start/end port numbers of a Port range as ints\nfunc (p Port) Range() (int, int, error) {\n\treturn ParsePortRangeToInt(p.Port())\n}\n\n// SplitProtoPort splits a port in the format of proto/port\nfunc SplitProtoPort(rawPort string) (string, string) {\n\tparts := strings.Split(rawPort, \"/\")\n\tl := len(parts)\n\tif len(rawPort) == 0 || l == 0 || len(parts[0]) == 0 {\n\t\treturn \"\", \"\"\n\t}\n\tif l == 1 {\n\t\treturn \"tcp\", rawPort\n\t}\n\tif len(parts[1]) == 0 {\n\t\treturn \"tcp\", parts[0]\n\t}\n\treturn parts[1], parts[0]\n}\n\nfunc validateProto(proto string) bool {\n\tfor _, availableProto := range []string{\"tcp\", \"udp\", \"sctp\"} {\n\t\tif availableProto == proto {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// ParsePortSpecs receives port specs in the format of ip:public:private/proto and parses\n// these in to the internal types\nfunc ParsePortSpecs(ports []string) (map[Port]struct{}, map[Port][]PortBinding, error) {\n\tvar (\n\t\texposedPorts = make(map[Port]struct{}, len(ports))\n\t\tbindings     = make(map[Port][]PortBinding)\n\t)\n\tfor _, rawPort := range ports {\n\t\tportMappings, err := ParsePortSpec(rawPort)\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\n\t\tfor _, portMapping := range portMappings {\n\t\t\tport := portMapping.Port\n\t\t\tif _, exists := exposedPorts[port]; !exists {\n\t\t\t\texposedPorts[port] = struct{}{}\n\t\t\t}\n\t\t\tbslice, exists := bindings[port]\n\t\t\tif !exists {\n\t\t\t\tbslice = []PortBinding{}\n\t\t\t}\n\t\t\tbindings[port] = append(bslice, portMapping.Binding)\n\t\t}\n\t}\n\treturn exposedPorts, bindings, nil\n}\n\n// PortMapping is a data object mapping a Port to a PortBinding\ntype PortMapping struct {\n\tPort    Port\n\tBinding PortBinding\n}\n\nfunc splitParts(rawport string) (string, string, string) {\n\tparts := strings.Split(rawport, \":\")\n\tn := len(parts)\n\tcontainerPort := parts[n-1]\n\n\tswitch n {\n\tcase 1:\n\t\treturn \"\", \"\", containerPort\n\tcase 2:\n\t\treturn \"\", parts[0], containerPort\n\tcase 3:\n\t\treturn parts[0], parts[1], containerPort\n\tdefault:\n\t\treturn strings.Join(parts[:n-2], \":\"), parts[n-2], containerPort\n\t}\n}\n\n// ParsePortSpec parses a port specification string into a slice of PortMappings\nfunc ParsePortSpec(rawPort string) ([]PortMapping, error) {\n\tvar proto string\n\tip, hostPort, containerPort := splitParts(rawPort)\n\tproto, containerPort = SplitProtoPort(containerPort)\n\n\tif ip != \"\" && ip[0] == '[' {\n\t\t// Strip [] from IPV6 addresses\n\t\trawIP, _, err := net.SplitHostPort(ip + \":\")\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid IP address %v: %w\", ip, err)\n\t\t}\n\t\tip = rawIP\n\t}\n\tif ip != \"\" && net.ParseIP(ip) == nil {\n\t\treturn nil, fmt.Errorf(\"invalid IP address: %s\", ip)\n\t}\n\tif containerPort == \"\" {\n\t\treturn nil, fmt.Errorf(\"no port specified: %s<empty>\", rawPort)\n\t}\n\n\tstartPort, endPort, err := ParsePortRange(containerPort)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid containerPort: %s\", containerPort)\n\t}\n\n\tvar startHostPort, endHostPort uint64 = 0, 0\n\tif len(hostPort) > 0 {\n\t\tstartHostPort, endHostPort, err = ParsePortRange(hostPort)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid hostPort: %s\", hostPort)\n\t\t}\n\t}\n\n\tif hostPort != \"\" && (endPort-startPort) != (endHostPort-startHostPort) {\n\t\t// Allow host port range iff containerPort is not a range.\n\t\t// In this case, use the host port range as the dynamic\n\t\t// host port range to allocate into.\n\t\tif endPort != startPort {\n\t\t\treturn nil, fmt.Errorf(\"invalid ranges specified for container and host Ports: %s and %s\", containerPort, hostPort)\n\t\t}\n\t}\n\n\tif !validateProto(strings.ToLower(proto)) {\n\t\treturn nil, fmt.Errorf(\"invalid proto: %s\", proto)\n\t}\n\n\tports := []PortMapping{}\n\tfor i := uint64(0); i <= (endPort - startPort); i++ {\n\t\tcontainerPort = strconv.FormatUint(startPort+i, 10)\n\t\tif len(hostPort) > 0 {\n\t\t\thostPort = strconv.FormatUint(startHostPort+i, 10)\n\t\t}\n\t\t// Set hostPort to a range only if there is a single container port\n\t\t// and a dynamic host port.\n\t\tif startPort == endPort && startHostPort != endHostPort {\n\t\t\thostPort = fmt.Sprintf(\"%s-%s\", hostPort, strconv.FormatUint(endHostPort, 10))\n\t\t}\n\t\tport, err := NewPort(strings.ToLower(proto), containerPort)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbinding := PortBinding{\n\t\t\tHostIP:   ip,\n\t\t\tHostPort: hostPort,\n\t\t}\n\t\tports = append(ports, PortMapping{Port: port, Binding: binding})\n\t}\n\treturn ports, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/nat/parse.go",
    "content": "package nat\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// ParsePortRange parses and validates the specified string as a port-range (8000-9000)\nfunc ParsePortRange(ports string) (uint64, uint64, error) {\n\tif ports == \"\" {\n\t\treturn 0, 0, fmt.Errorf(\"empty string specified for ports\")\n\t}\n\tif !strings.Contains(ports, \"-\") {\n\t\tstart, err := strconv.ParseUint(ports, 10, 16)\n\t\tend := start\n\t\treturn start, end, err\n\t}\n\n\tparts := strings.Split(ports, \"-\")\n\tstart, err := strconv.ParseUint(parts[0], 10, 16)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\tend, err := strconv.ParseUint(parts[1], 10, 16)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\tif end < start {\n\t\treturn 0, 0, fmt.Errorf(\"invalid range specified for port: %s\", ports)\n\t}\n\treturn start, end, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/nat/sort.go",
    "content": "package nat\n\nimport (\n\t\"sort\"\n\t\"strings\"\n)\n\ntype portSorter struct {\n\tports []Port\n\tby    func(i, j Port) bool\n}\n\nfunc (s *portSorter) Len() int {\n\treturn len(s.ports)\n}\n\nfunc (s *portSorter) Swap(i, j int) {\n\ts.ports[i], s.ports[j] = s.ports[j], s.ports[i]\n}\n\nfunc (s *portSorter) Less(i, j int) bool {\n\tip := s.ports[i]\n\tjp := s.ports[j]\n\n\treturn s.by(ip, jp)\n}\n\n// Sort sorts a list of ports using the provided predicate\n// This function should compare `i` and `j`, returning true if `i` is\n// considered to be less than `j`\nfunc Sort(ports []Port, predicate func(i, j Port) bool) {\n\ts := &portSorter{ports, predicate}\n\tsort.Sort(s)\n}\n\ntype portMapEntry struct {\n\tport    Port\n\tbinding PortBinding\n}\n\ntype portMapSorter []portMapEntry\n\nfunc (s portMapSorter) Len() int      { return len(s) }\nfunc (s portMapSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\n\n// Less sorts the port so that the order is:\n// 1. port with larger specified bindings\n// 2. larger port\n// 3. port with tcp protocol\nfunc (s portMapSorter) Less(i, j int) bool {\n\tpi, pj := s[i].port, s[j].port\n\thpi, hpj := toInt(s[i].binding.HostPort), toInt(s[j].binding.HostPort)\n\treturn hpi > hpj || pi.Int() > pj.Int() || (pi.Int() == pj.Int() && strings.ToLower(pi.Proto()) == \"tcp\")\n}\n\n// SortPortMap sorts the list of ports and their respected mapping. The ports\n// will explicit HostPort will be placed first.\nfunc SortPortMap(ports []Port, bindings PortMap) {\n\ts := portMapSorter{}\n\tfor _, p := range ports {\n\t\tif binding, ok := bindings[p]; ok && len(binding) > 0 {\n\t\t\tfor _, b := range binding {\n\t\t\t\ts = append(s, portMapEntry{port: p, binding: b})\n\t\t\t}\n\t\t\tbindings[p] = []PortBinding{}\n\t\t} else {\n\t\t\ts = append(s, portMapEntry{port: p})\n\t\t}\n\t}\n\n\tsort.Sort(s)\n\tvar (\n\t\ti  int\n\t\tpm = make(map[Port]struct{})\n\t)\n\t// reorder ports\n\tfor _, entry := range s {\n\t\tif _, ok := pm[entry.port]; !ok {\n\t\t\tports[i] = entry.port\n\t\t\tpm[entry.port] = struct{}{}\n\t\t\ti++\n\t\t}\n\t\t// reorder bindings for this port\n\t\tif _, ok := bindings[entry.port]; ok {\n\t\t\tbindings[entry.port] = append(bindings[entry.port], entry.binding)\n\t\t}\n\t}\n}\n\nfunc toInt(s string) uint64 {\n\ti, _, err := ParsePortRange(s)\n\tif err != nil {\n\t\ti = 0\n\t}\n\treturn i\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/README.md",
    "content": ""
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/inmem_socket.go",
    "content": "package sockets\n\nimport (\n\t\"errors\"\n\t\"net\"\n\t\"sync\"\n)\n\nvar errClosed = errors.New(\"use of closed network connection\")\n\n// InmemSocket implements net.Listener using in-memory only connections.\ntype InmemSocket struct {\n\tchConn  chan net.Conn\n\tchClose chan struct{}\n\taddr    string\n\tmu      sync.Mutex\n}\n\n// dummyAddr is used to satisfy net.Addr for the in-mem socket\n// it is just stored as a string and returns the string for all calls\ntype dummyAddr string\n\n// NewInmemSocket creates an in-memory only net.Listener\n// The addr argument can be any string, but is used to satisfy the `Addr()` part\n// of the net.Listener interface\nfunc NewInmemSocket(addr string, bufSize int) *InmemSocket {\n\treturn &InmemSocket{\n\t\tchConn:  make(chan net.Conn, bufSize),\n\t\tchClose: make(chan struct{}),\n\t\taddr:    addr,\n\t}\n}\n\n// Addr returns the socket's addr string to satisfy net.Listener\nfunc (s *InmemSocket) Addr() net.Addr {\n\treturn dummyAddr(s.addr)\n}\n\n// Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn.\nfunc (s *InmemSocket) Accept() (net.Conn, error) {\n\tselect {\n\tcase conn := <-s.chConn:\n\t\treturn conn, nil\n\tcase <-s.chClose:\n\t\treturn nil, errClosed\n\t}\n}\n\n// Close closes the listener. It will be unavailable for use once closed.\nfunc (s *InmemSocket) Close() error {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tselect {\n\tcase <-s.chClose:\n\tdefault:\n\t\tclose(s.chClose)\n\t}\n\treturn nil\n}\n\n// Dial is used to establish a connection with the in-mem server\nfunc (s *InmemSocket) Dial(network, addr string) (net.Conn, error) {\n\tsrvConn, clientConn := net.Pipe()\n\tselect {\n\tcase s.chConn <- srvConn:\n\tcase <-s.chClose:\n\t\treturn nil, errClosed\n\t}\n\n\treturn clientConn, nil\n}\n\n// Network returns the addr string, satisfies net.Addr\nfunc (a dummyAddr) Network() string {\n\treturn string(a)\n}\n\n// String returns the string form\nfunc (a dummyAddr) String() string {\n\treturn string(a)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/proxy.go",
    "content": "package sockets\n\nimport (\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n)\n\n// GetProxyEnv allows access to the uppercase and the lowercase forms of\n// proxy-related variables.  See the Go specification for details on these\n// variables. https://golang.org/pkg/net/http/\nfunc GetProxyEnv(key string) string {\n\tproxyValue := os.Getenv(strings.ToUpper(key))\n\tif proxyValue == \"\" {\n\t\treturn os.Getenv(strings.ToLower(key))\n\t}\n\treturn proxyValue\n}\n\n// DialerFromEnvironment was previously used to configure a net.Dialer to route\n// connections through a SOCKS proxy.\n// DEPRECATED: SOCKS proxies are now supported by configuring only\n// http.Transport.Proxy, and no longer require changing http.Transport.Dial.\n// Therefore, only sockets.ConfigureTransport() needs to be called, and any\n// sockets.DialerFromEnvironment() calls can be dropped.\nfunc DialerFromEnvironment(direct *net.Dialer) (*net.Dialer, error) {\n\treturn direct, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/sockets.go",
    "content": "// Package sockets provides helper functions to create and configure Unix or TCP sockets.\npackage sockets\n\nimport (\n\t\"errors\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n)\n\nconst defaultTimeout = 10 * time.Second\n\n// ErrProtocolNotAvailable is returned when a given transport protocol is not provided by the operating system.\nvar ErrProtocolNotAvailable = errors.New(\"protocol not available\")\n\n// ConfigureTransport configures the specified [http.Transport] according to the specified proto\n// and addr.\n//\n// If the proto is unix (using a unix socket to communicate) or npipe the compression is disabled.\n// For other protos, compression is enabled. If you want to manually enable/disable compression,\n// make sure you do it _after_ any subsequent calls to ConfigureTransport is made against the same\n// [http.Transport].\nfunc ConfigureTransport(tr *http.Transport, proto, addr string) error {\n\tswitch proto {\n\tcase \"unix\":\n\t\treturn configureUnixTransport(tr, proto, addr)\n\tcase \"npipe\":\n\t\treturn configureNpipeTransport(tr, proto, addr)\n\tdefault:\n\t\ttr.Proxy = http.ProxyFromEnvironment\n\t\ttr.DisableCompression = false\n\t\ttr.DialContext = (&net.Dialer{\n\t\t\tTimeout: defaultTimeout,\n\t\t}).DialContext\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/sockets_unix.go",
    "content": "//go:build !windows\n\npackage sockets\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"syscall\"\n\t\"time\"\n)\n\nconst maxUnixSocketPathSize = len(syscall.RawSockaddrUnix{}.Path)\n\nfunc configureUnixTransport(tr *http.Transport, proto, addr string) error {\n\tif len(addr) > maxUnixSocketPathSize {\n\t\treturn fmt.Errorf(\"unix socket path %q is too long\", addr)\n\t}\n\t// No need for compression in local communications.\n\ttr.DisableCompression = true\n\tdialer := &net.Dialer{\n\t\tTimeout: defaultTimeout,\n\t}\n\ttr.DialContext = func(ctx context.Context, _, _ string) (net.Conn, error) {\n\t\treturn dialer.DialContext(ctx, proto, addr)\n\t}\n\treturn nil\n}\n\nfunc configureNpipeTransport(tr *http.Transport, proto, addr string) error {\n\treturn ErrProtocolNotAvailable\n}\n\n// DialPipe connects to a Windows named pipe.\n// This is not supported on other OSes.\nfunc DialPipe(_ string, _ time.Duration) (net.Conn, error) {\n\treturn nil, syscall.EAFNOSUPPORT\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/sockets_windows.go",
    "content": "package sockets\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/Microsoft/go-winio\"\n)\n\nfunc configureUnixTransport(tr *http.Transport, proto, addr string) error {\n\treturn ErrProtocolNotAvailable\n}\n\nfunc configureNpipeTransport(tr *http.Transport, proto, addr string) error {\n\t// No need for compression in local communications.\n\ttr.DisableCompression = true\n\ttr.DialContext = func(ctx context.Context, _, _ string) (net.Conn, error) {\n\t\treturn winio.DialPipeContext(ctx, addr)\n\t}\n\treturn nil\n}\n\n// DialPipe connects to a Windows named pipe.\nfunc DialPipe(addr string, timeout time.Duration) (net.Conn, error) {\n\treturn winio.DialPipe(addr, &timeout)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/tcp_socket.go",
    "content": "// Package sockets provides helper functions to create and configure Unix or TCP sockets.\npackage sockets\n\nimport (\n\t\"crypto/tls\"\n\t\"net\"\n)\n\n// NewTCPSocket creates a TCP socket listener with the specified address and\n// the specified tls configuration. If TLSConfig is set, will encapsulate the\n// TCP listener inside a TLS one.\nfunc NewTCPSocket(addr string, tlsConfig *tls.Config) (net.Listener, error) {\n\tl, err := net.Listen(\"tcp\", addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif tlsConfig != nil {\n\t\ttlsConfig.NextProtos = []string{\"http/1.1\"}\n\t\tl = tls.NewListener(l, tlsConfig)\n\t}\n\treturn l, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/sockets/unix_socket.go",
    "content": "//go:build !windows\n\n/*\nPackage sockets is a simple unix domain socket wrapper.\n\n# Usage\n\nFor example:\n\n\timport(\n\t\t\"fmt\"\n\t\t\"net\"\n\t\t\"os\"\n\t\t\"github.com/docker/go-connections/sockets\"\n\t)\n\n\tfunc main() {\n\t\tl, err := sockets.NewUnixSocketWithOpts(\"/path/to/sockets\",\n\t\t\tsockets.WithChown(0,0),sockets.WithChmod(0660))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\techoStr := \"hello\"\n\n\t\tgo func() {\n\t\t\tfor {\n\t\t\t\tconn, err := l.Accept()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconn.Write([]byte(echoStr))\n\t\t\t\tconn.Close()\n\t\t\t}\n\t\t}()\n\n\t\tconn, err := net.Dial(\"unix\", path)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tbuf := make([]byte, 5)\n\t\tif _, err := conn.Read(buf); err != nil {\n\t\t\tpanic(err)\n\t\t} else if string(buf) != echoStr {\n\t\t\tpanic(fmt.Errorf(\"msg may lost\"))\n\t\t}\n\t}\n*/\npackage sockets\n\nimport (\n\t\"net\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// SockOption sets up socket file's creating option\ntype SockOption func(string) error\n\n// WithChown modifies the socket file's uid and gid\nfunc WithChown(uid, gid int) SockOption {\n\treturn func(path string) error {\n\t\tif err := os.Chown(path, uid, gid); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithChmod modifies socket file's access mode.\nfunc WithChmod(mask os.FileMode) SockOption {\n\treturn func(path string) error {\n\t\tif err := os.Chmod(path, mask); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// NewUnixSocketWithOpts creates a unix socket with the specified options.\n// By default, socket permissions are 0000 (i.e.: no access for anyone); pass\n// WithChmod() and WithChown() to set the desired ownership and permissions.\n//\n// This function temporarily changes the system's \"umask\" to 0777 to work around\n// a race condition between creating the socket and setting its permissions. While\n// this should only be for a short duration, it may affect other processes that\n// create files/directories during that period.\nfunc NewUnixSocketWithOpts(path string, opts ...SockOption) (net.Listener, error) {\n\tif err := syscall.Unlink(path); err != nil && !os.IsNotExist(err) {\n\t\treturn nil, err\n\t}\n\n\t// net.Listen does not allow for permissions to be set. As a result, when\n\t// specifying custom permissions (\"WithChmod()\"), there is a short time\n\t// between creating the socket and applying the permissions, during which\n\t// the socket permissions are Less restrictive than desired.\n\t//\n\t// To work around this limitation of net.Listen(), we temporarily set the\n\t// umask to 0777, which forces the socket to be created with 000 permissions\n\t// (i.e.: no access for anyone). After that, WithChmod() must be used to set\n\t// the desired permissions.\n\t//\n\t// We don't use \"defer\" here, to reset the umask to its original value as soon\n\t// as possible. Ideally we'd be able to detect if WithChmod() was passed as\n\t// an option, and skip changing umask if default permissions are used.\n\torigUmask := syscall.Umask(0o777)\n\tl, err := net.Listen(\"unix\", path)\n\tsyscall.Umask(origUmask)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, op := range opts {\n\t\tif err := op(path); err != nil {\n\t\t\t_ = l.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn l, nil\n}\n\n// NewUnixSocket creates a unix socket with the specified path and group.\nfunc NewUnixSocket(path string, gid int) (net.Listener, error) {\n\treturn NewUnixSocketWithOpts(path, WithChown(0, gid), WithChmod(0o660))\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/tlsconfig/certpool.go",
    "content": "package tlsconfig\n\nimport (\n\t\"crypto/x509\"\n\t\"runtime\"\n)\n\n// SystemCertPool returns a copy of the system cert pool,\n// returns an error if failed to load or empty pool on windows.\nfunc SystemCertPool() (*x509.CertPool, error) {\n\tcertpool, err := x509.SystemCertPool()\n\tif err != nil && runtime.GOOS == \"windows\" {\n\t\treturn x509.NewCertPool(), nil\n\t}\n\treturn certpool, err\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/tlsconfig/config.go",
    "content": "// Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers.\n//\n// As a reminder from https://golang.org/pkg/crypto/tls/#Config:\n//\n//\tA Config structure is used to configure a TLS client or server. After one has been passed to a TLS function it must not be modified.\n//\tA Config may be reused; the tls package will also not modify it.\npackage tlsconfig\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n)\n\n// Options represents the information needed to create client and server TLS configurations.\ntype Options struct {\n\tCAFile string\n\n\t// If either CertFile or KeyFile is empty, Client() will not load them\n\t// preventing the client from authenticating to the server.\n\t// However, Server() requires them and will error out if they are empty.\n\tCertFile string\n\tKeyFile  string\n\n\t// client-only option\n\tInsecureSkipVerify bool\n\t// server-only option\n\tClientAuth tls.ClientAuthType\n\t// If ExclusiveRootPools is set, then if a CA file is provided, the root pool used for TLS\n\t// creds will include exclusively the roots in that CA file.  If no CA file is provided,\n\t// the system pool will be used.\n\tExclusiveRootPools bool\n\tMinVersion         uint16\n\t// If Passphrase is set, it will be used to decrypt a TLS private key\n\t// if the key is encrypted.\n\t//\n\t// Deprecated: Use of encrypted TLS private keys has been deprecated, and\n\t// will be removed in a future release. Golang has deprecated support for\n\t// legacy PEM encryption (as specified in RFC 1423), as it is insecure by\n\t// design (see https://go-review.googlesource.com/c/go/+/264159).\n\tPassphrase string\n}\n\n// Extra (server-side) accepted CBC cipher suites - will phase out in the future\nvar acceptedCBCCiphers = []uint16{\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,\n\ttls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,\n\ttls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,\n}\n\n// DefaultServerAcceptedCiphers should be uses by code which already has a crypto/tls\n// options struct but wants to use a commonly accepted set of TLS cipher suites, with\n// known weak algorithms removed.\nvar DefaultServerAcceptedCiphers = append(clientCipherSuites, acceptedCBCCiphers...)\n\n// ServerDefault returns a secure-enough TLS configuration for the server TLS configuration.\nfunc ServerDefault(ops ...func(*tls.Config)) *tls.Config {\n\ttlsConfig := &tls.Config{\n\t\t// Avoid fallback by default to SSL protocols < TLS1.2\n\t\tMinVersion:               tls.VersionTLS12,\n\t\tPreferServerCipherSuites: true,\n\t\tCipherSuites:             DefaultServerAcceptedCiphers,\n\t}\n\n\tfor _, op := range ops {\n\t\top(tlsConfig)\n\t}\n\n\treturn tlsConfig\n}\n\n// ClientDefault returns a secure-enough TLS configuration for the client TLS configuration.\nfunc ClientDefault(ops ...func(*tls.Config)) *tls.Config {\n\ttlsConfig := &tls.Config{\n\t\t// Prefer TLS1.2 as the client minimum\n\t\tMinVersion:   tls.VersionTLS12,\n\t\tCipherSuites: clientCipherSuites,\n\t}\n\n\tfor _, op := range ops {\n\t\top(tlsConfig)\n\t}\n\n\treturn tlsConfig\n}\n\n// certPool returns an X.509 certificate pool from `caFile`, the certificate file.\nfunc certPool(caFile string, exclusivePool bool) (*x509.CertPool, error) {\n\t// If we should verify the server, we need to load a trusted ca\n\tvar (\n\t\tcertPool *x509.CertPool\n\t\terr      error\n\t)\n\tif exclusivePool {\n\t\tcertPool = x509.NewCertPool()\n\t} else {\n\t\tcertPool, err = SystemCertPool()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to read system certificates: %v\", err)\n\t\t}\n\t}\n\tpemData, err := os.ReadFile(caFile)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not read CA certificate %q: %v\", caFile, err)\n\t}\n\tif !certPool.AppendCertsFromPEM(pemData) {\n\t\treturn nil, fmt.Errorf(\"failed to append certificates from PEM file: %q\", caFile)\n\t}\n\treturn certPool, nil\n}\n\n// allTLSVersions lists all the TLS versions and is used by the code that validates\n// a uint16 value as a TLS version.\nvar allTLSVersions = map[uint16]struct{}{\n\ttls.VersionTLS10: {},\n\ttls.VersionTLS11: {},\n\ttls.VersionTLS12: {},\n\ttls.VersionTLS13: {},\n}\n\n// isValidMinVersion checks that the input value is a valid tls minimum version\nfunc isValidMinVersion(version uint16) bool {\n\t_, ok := allTLSVersions[version]\n\treturn ok\n}\n\n// adjustMinVersion sets the MinVersion on `config`, the input configuration.\n// It assumes the current MinVersion on the `config` is the lowest allowed.\nfunc adjustMinVersion(options Options, config *tls.Config) error {\n\tif options.MinVersion > 0 {\n\t\tif !isValidMinVersion(options.MinVersion) {\n\t\t\treturn fmt.Errorf(\"invalid minimum TLS version: %x\", options.MinVersion)\n\t\t}\n\t\tif options.MinVersion < config.MinVersion {\n\t\t\treturn fmt.Errorf(\"requested minimum TLS version is too low. Should be at-least: %x\", config.MinVersion)\n\t\t}\n\t\tconfig.MinVersion = options.MinVersion\n\t}\n\n\treturn nil\n}\n\n// IsErrEncryptedKey returns true if the 'err' is an error of incorrect\n// password when trying to decrypt a TLS private key.\n//\n// Deprecated: Use of encrypted TLS private keys has been deprecated, and\n// will be removed in a future release. Golang has deprecated support for\n// legacy PEM encryption (as specified in RFC 1423), as it is insecure by\n// design (see https://go-review.googlesource.com/c/go/+/264159).\nfunc IsErrEncryptedKey(err error) bool {\n\treturn errors.Is(err, x509.IncorrectPasswordError)\n}\n\n// getPrivateKey returns the private key in 'keyBytes', in PEM-encoded format.\n// If the private key is encrypted, 'passphrase' is used to decrypted the\n// private key.\nfunc getPrivateKey(keyBytes []byte, passphrase string) ([]byte, error) {\n\t// this section makes some small changes to code from notary/tuf/utils/x509.go\n\tpemBlock, _ := pem.Decode(keyBytes)\n\tif pemBlock == nil {\n\t\treturn nil, fmt.Errorf(\"no valid private key found\")\n\t}\n\n\tvar err error\n\tif x509.IsEncryptedPEMBlock(pemBlock) { //nolint:staticcheck // Ignore SA1019 (IsEncryptedPEMBlock is deprecated)\n\t\tkeyBytes, err = x509.DecryptPEMBlock(pemBlock, []byte(passphrase)) //nolint:staticcheck // Ignore SA1019 (DecryptPEMBlock is deprecated)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"private key is encrypted, but could not decrypt it: %w\", err)\n\t\t}\n\t\tkeyBytes = pem.EncodeToMemory(&pem.Block{Type: pemBlock.Type, Bytes: keyBytes})\n\t}\n\n\treturn keyBytes, nil\n}\n\n// getCert returns a Certificate from the CertFile and KeyFile in 'options',\n// if the key is encrypted, the Passphrase in 'options' will be used to\n// decrypt it.\nfunc getCert(options Options) ([]tls.Certificate, error) {\n\tif options.CertFile == \"\" && options.KeyFile == \"\" {\n\t\treturn nil, nil\n\t}\n\n\tcert, err := os.ReadFile(options.CertFile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tprKeyBytes, err := os.ReadFile(options.KeyFile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tprKeyBytes, err = getPrivateKey(prKeyBytes, options.Passphrase)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttlsCert, err := tls.X509KeyPair(cert, prKeyBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn []tls.Certificate{tlsCert}, nil\n}\n\n// Client returns a TLS configuration meant to be used by a client.\nfunc Client(options Options) (*tls.Config, error) {\n\ttlsConfig := ClientDefault()\n\ttlsConfig.InsecureSkipVerify = options.InsecureSkipVerify\n\tif !options.InsecureSkipVerify && options.CAFile != \"\" {\n\t\tCAs, err := certPool(options.CAFile, options.ExclusiveRootPools)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttlsConfig.RootCAs = CAs\n\t}\n\n\ttlsCerts, err := getCert(options)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not load X509 key pair: %w\", err)\n\t}\n\ttlsConfig.Certificates = tlsCerts\n\n\tif err := adjustMinVersion(options, tlsConfig); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn tlsConfig, nil\n}\n\n// Server returns a TLS configuration meant to be used by a server.\nfunc Server(options Options) (*tls.Config, error) {\n\ttlsConfig := ServerDefault()\n\ttlsConfig.ClientAuth = options.ClientAuth\n\ttlsCert, err := tls.LoadX509KeyPair(options.CertFile, options.KeyFile)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil, fmt.Errorf(\"could not load X509 key pair (cert: %q, key: %q): %v\", options.CertFile, options.KeyFile, err)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"error reading X509 key pair - make sure the key is not encrypted (cert: %q, key: %q): %v\", options.CertFile, options.KeyFile, err)\n\t}\n\ttlsConfig.Certificates = []tls.Certificate{tlsCert}\n\tif options.ClientAuth >= tls.VerifyClientCertIfGiven && options.CAFile != \"\" {\n\t\tCAs, err := certPool(options.CAFile, options.ExclusiveRootPools)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttlsConfig.ClientCAs = CAs\n\t}\n\n\tif err := adjustMinVersion(options, tlsConfig); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn tlsConfig, nil\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-connections/tlsconfig/config_client_ciphers.go",
    "content": "// Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers.\npackage tlsconfig\n\nimport (\n\t\"crypto/tls\"\n)\n\n// Client TLS cipher suites (dropping CBC ciphers for client preferred suite set)\nvar clientCipherSuites = []uint16{\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,\n\ttls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,\n\ttls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-units/CONTRIBUTING.md",
    "content": "# Contributing to go-units\n\nWant to hack on go-units? Awesome! Here are instructions to get you started.\n\ngo-units is a part of the [Docker](https://www.docker.com) project, and follows\nthe same rules and principles. If you're already familiar with the way\nDocker does things, you'll feel right at home.\n\nOtherwise, go read Docker's\n[contributions guidelines](https://github.com/docker/docker/blob/master/CONTRIBUTING.md),\n[issue triaging](https://github.com/docker/docker/blob/master/project/ISSUE-TRIAGE.md),\n[review process](https://github.com/docker/docker/blob/master/project/REVIEWING.md) and\n[branches and tags](https://github.com/docker/docker/blob/master/project/BRANCHES-AND-TAGS.md).\n\n### Sign your work\n\nThe sign-off is a simple line at the end of the explanation for the patch. Your\nsignature certifies that you wrote the patch or otherwise have the right to pass\nit on as an open-source patch. The rules are pretty simple: if you can certify\nthe below (from [developercertificate.org](http://developercertificate.org/)):\n\n```\nDeveloper Certificate of Origin\nVersion 1.1\n\nCopyright (C) 2004, 2006 The Linux Foundation and its contributors.\n660 York Street, Suite 102,\nSan Francisco, CA 94110 USA\n\nEveryone is permitted to copy and distribute verbatim copies of this\nlicense document, but changing it is not allowed.\n\nDeveloper's Certificate of Origin 1.1\n\nBy making a contribution to this project, I certify that:\n\n(a) The contribution was created in whole or in part by me and I\n    have the right to submit it under the open source license\n    indicated in the file; or\n\n(b) The contribution is based upon previous work that, to the best\n    of my knowledge, is covered under an appropriate open source\n    license and I have the right under that license to submit that\n    work with modifications, whether created in whole or in part\n    by me, under the same open source license (unless I am\n    permitted to submit under a different license), as indicated\n    in the file; or\n\n(c) The contribution was provided directly to me by some other\n    person who certified (a), (b) or (c) and I have not modified\n    it.\n\n(d) I understand and agree that this project and the contribution\n    are public and that a record of the contribution (including all\n    personal information I submit with it, including my sign-off) is\n    maintained indefinitely and may be redistributed consistent with\n    this project or the open source license(s) involved.\n```\n\nThen you just add a line to every git commit message:\n\n    Signed-off-by: Joe Smith <joe.smith@email.com>\n\nUse your real name (sorry, no pseudonyms or anonymous contributions.)\n\nIf you set your `user.name` and `user.email` git configs, you can sign your\ncommit automatically with `git commit -s`.\n"
  },
  {
    "path": "vendor/github.com/docker/go-units/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        https://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   Copyright 2015 Docker, 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       https://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": "vendor/github.com/docker/go-units/MAINTAINERS",
    "content": "# go-units maintainers file\n#\n# This file describes who runs the docker/go-units project and how.\n# This is a living document - if you see something out of date or missing, speak up!\n#\n# It is structured to be consumable by both humans and programs.\n# To extract its contents programmatically, use any TOML-compliant parser.\n#\n# This file is compiled into the MAINTAINERS file in docker/opensource.\n#\n[Org]\n\t[Org.\"Core maintainers\"]\n\t\tpeople = [\n\t\t\t\"akihirosuda\",\n\t\t\t\"dnephin\",\n\t\t\t\"thajeztah\",\n\t\t\t\"vdemeester\",\n\t\t]\n\n[people]\n\n# A reference list of all people associated with the project.\n# All other sections should refer to people by their canonical key\n# in the people section.\n\n\t# ADD YOURSELF HERE IN ALPHABETICAL ORDER\n\n\t[people.akihirosuda]\n\tName = \"Akihiro Suda\"\n\tEmail = \"akihiro.suda.cz@hco.ntt.co.jp\"\n\tGitHub = \"AkihiroSuda\"\n\n\t[people.dnephin]\n\tName = \"Daniel Nephin\"\n\tEmail = \"dnephin@gmail.com\"\n\tGitHub = \"dnephin\"\n\t\n\t[people.thajeztah]\n\tName = \"Sebastiaan van Stijn\"\n\tEmail = \"github@gone.nl\"\n\tGitHub = \"thaJeztah\"\n\n\t[people.vdemeester]\n\tName = \"Vincent Demeester\"\n\tEmail = \"vincent@sbr.pm\"\n\tGitHub = \"vdemeester\""
  },
  {
    "path": "vendor/github.com/docker/go-units/README.md",
    "content": "[![GoDoc](https://godoc.org/github.com/docker/go-units?status.svg)](https://godoc.org/github.com/docker/go-units)\n\n# Introduction\n\ngo-units is a library to transform human friendly measurements into machine friendly values.\n\n## Usage\n\nSee the [docs in godoc](https://godoc.org/github.com/docker/go-units) for examples and documentation.\n\n## Copyright and license\n\nCopyright © 2015 Docker, Inc.\n\ngo-units is licensed under the Apache License, Version 2.0.\nSee [LICENSE](LICENSE) for the full text of the license.\n"
  },
  {
    "path": "vendor/github.com/docker/go-units/circle.yml",
    "content": "dependencies:\n  post:\n    # install golint\n    - go get golang.org/x/lint/golint\n\ntest:\n  pre:\n    # run analysis before tests\n    - go vet ./...\n    - test -z \"$(golint ./... | tee /dev/stderr)\"\n    - test -z \"$(gofmt -s -l . | tee /dev/stderr)\"\n"
  },
  {
    "path": "vendor/github.com/docker/go-units/duration.go",
    "content": "// Package units provides helper function to parse and print size and time units\n// in human-readable format.\npackage units\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n// HumanDuration returns a human-readable approximation of a duration\n// (eg. \"About a minute\", \"4 hours ago\", etc.).\nfunc HumanDuration(d time.Duration) string {\n\tif seconds := int(d.Seconds()); seconds < 1 {\n\t\treturn \"Less than a second\"\n\t} else if seconds == 1 {\n\t\treturn \"1 second\"\n\t} else if seconds < 60 {\n\t\treturn fmt.Sprintf(\"%d seconds\", seconds)\n\t} else if minutes := int(d.Minutes()); minutes == 1 {\n\t\treturn \"About a minute\"\n\t} else if minutes < 60 {\n\t\treturn fmt.Sprintf(\"%d minutes\", minutes)\n\t} else if hours := int(d.Hours() + 0.5); hours == 1 {\n\t\treturn \"About an hour\"\n\t} else if hours < 48 {\n\t\treturn fmt.Sprintf(\"%d hours\", hours)\n\t} else if hours < 24*7*2 {\n\t\treturn fmt.Sprintf(\"%d days\", hours/24)\n\t} else if hours < 24*30*2 {\n\t\treturn fmt.Sprintf(\"%d weeks\", hours/24/7)\n\t} else if hours < 24*365*2 {\n\t\treturn fmt.Sprintf(\"%d months\", hours/24/30)\n\t}\n\treturn fmt.Sprintf(\"%d years\", int(d.Hours())/24/365)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-units/size.go",
    "content": "package units\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// See: http://en.wikipedia.org/wiki/Binary_prefix\nconst (\n\t// Decimal\n\n\tKB = 1000\n\tMB = 1000 * KB\n\tGB = 1000 * MB\n\tTB = 1000 * GB\n\tPB = 1000 * TB\n\n\t// Binary\n\n\tKiB = 1024\n\tMiB = 1024 * KiB\n\tGiB = 1024 * MiB\n\tTiB = 1024 * GiB\n\tPiB = 1024 * TiB\n)\n\ntype unitMap map[byte]int64\n\nvar (\n\tdecimalMap = unitMap{'k': KB, 'm': MB, 'g': GB, 't': TB, 'p': PB}\n\tbinaryMap  = unitMap{'k': KiB, 'm': MiB, 'g': GiB, 't': TiB, 'p': PiB}\n)\n\nvar (\n\tdecimapAbbrs = []string{\"B\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"}\n\tbinaryAbbrs  = []string{\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"}\n)\n\nfunc getSizeAndUnit(size float64, base float64, _map []string) (float64, string) {\n\ti := 0\n\tunitsLimit := len(_map) - 1\n\tfor size >= base && i < unitsLimit {\n\t\tsize = size / base\n\t\ti++\n\t}\n\treturn size, _map[i]\n}\n\n// CustomSize returns a human-readable approximation of a size\n// using custom format.\nfunc CustomSize(format string, size float64, base float64, _map []string) string {\n\tsize, unit := getSizeAndUnit(size, base, _map)\n\treturn fmt.Sprintf(format, size, unit)\n}\n\n// HumanSizeWithPrecision allows the size to be in any precision,\n// instead of 4 digit precision used in units.HumanSize.\nfunc HumanSizeWithPrecision(size float64, precision int) string {\n\tsize, unit := getSizeAndUnit(size, 1000.0, decimapAbbrs)\n\treturn fmt.Sprintf(\"%.*g%s\", precision, size, unit)\n}\n\n// HumanSize returns a human-readable approximation of a size\n// capped at 4 valid numbers (eg. \"2.746 MB\", \"796 KB\").\nfunc HumanSize(size float64) string {\n\treturn HumanSizeWithPrecision(size, 4)\n}\n\n// BytesSize returns a human-readable size in bytes, kibibytes,\n// mebibytes, gibibytes, or tebibytes (eg. \"44kiB\", \"17MiB\").\nfunc BytesSize(size float64) string {\n\treturn CustomSize(\"%.4g%s\", size, 1024.0, binaryAbbrs)\n}\n\n// FromHumanSize returns an integer from a human-readable specification of a\n// size using SI standard (eg. \"44kB\", \"17MB\").\nfunc FromHumanSize(size string) (int64, error) {\n\treturn parseSize(size, decimalMap)\n}\n\n// RAMInBytes parses a human-readable string representing an amount of RAM\n// in bytes, kibibytes, mebibytes, gibibytes, or tebibytes and\n// returns the number of bytes, or -1 if the string is unparseable.\n// Units are case-insensitive, and the 'b' suffix is optional.\nfunc RAMInBytes(size string) (int64, error) {\n\treturn parseSize(size, binaryMap)\n}\n\n// Parses the human-readable size string into the amount it represents.\nfunc parseSize(sizeStr string, uMap unitMap) (int64, error) {\n\t// TODO: rewrite to use strings.Cut if there's a space\n\t// once Go < 1.18 is deprecated.\n\tsep := strings.LastIndexAny(sizeStr, \"01234567890. \")\n\tif sep == -1 {\n\t\t// There should be at least a digit.\n\t\treturn -1, fmt.Errorf(\"invalid size: '%s'\", sizeStr)\n\t}\n\tvar num, sfx string\n\tif sizeStr[sep] != ' ' {\n\t\tnum = sizeStr[:sep+1]\n\t\tsfx = sizeStr[sep+1:]\n\t} else {\n\t\t// Omit the space separator.\n\t\tnum = sizeStr[:sep]\n\t\tsfx = sizeStr[sep+1:]\n\t}\n\n\tsize, err := strconv.ParseFloat(num, 64)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\t// Backward compatibility: reject negative sizes.\n\tif size < 0 {\n\t\treturn -1, fmt.Errorf(\"invalid size: '%s'\", sizeStr)\n\t}\n\n\tif len(sfx) == 0 {\n\t\treturn int64(size), nil\n\t}\n\n\t// Process the suffix.\n\n\tif len(sfx) > 3 { // Too long.\n\t\tgoto badSuffix\n\t}\n\tsfx = strings.ToLower(sfx)\n\t// Trivial case: b suffix.\n\tif sfx[0] == 'b' {\n\t\tif len(sfx) > 1 { // no extra characters allowed after b.\n\t\t\tgoto badSuffix\n\t\t}\n\t\treturn int64(size), nil\n\t}\n\t// A suffix from the map.\n\tif mul, ok := uMap[sfx[0]]; ok {\n\t\tsize *= float64(mul)\n\t} else {\n\t\tgoto badSuffix\n\t}\n\n\t// The suffix may have extra \"b\" or \"ib\" (e.g. KiB or MB).\n\tswitch {\n\tcase len(sfx) == 2 && sfx[1] != 'b':\n\t\tgoto badSuffix\n\tcase len(sfx) == 3 && sfx[1:] != \"ib\":\n\t\tgoto badSuffix\n\t}\n\n\treturn int64(size), nil\n\nbadSuffix:\n\treturn -1, fmt.Errorf(\"invalid suffix: '%s'\", sfx)\n}\n"
  },
  {
    "path": "vendor/github.com/docker/go-units/ulimit.go",
    "content": "package units\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Ulimit is a human friendly version of Rlimit.\ntype Ulimit struct {\n\tName string\n\tHard int64\n\tSoft int64\n}\n\n// Rlimit specifies the resource limits, such as max open files.\ntype Rlimit struct {\n\tType int    `json:\"type,omitempty\"`\n\tHard uint64 `json:\"hard,omitempty\"`\n\tSoft uint64 `json:\"soft,omitempty\"`\n}\n\nconst (\n\t// magic numbers for making the syscall\n\t// some of these are defined in the syscall package, but not all.\n\t// Also since Windows client doesn't get access to the syscall package, need to\n\t//\tdefine these here\n\trlimitAs         = 9\n\trlimitCore       = 4\n\trlimitCPU        = 0\n\trlimitData       = 2\n\trlimitFsize      = 1\n\trlimitLocks      = 10\n\trlimitMemlock    = 8\n\trlimitMsgqueue   = 12\n\trlimitNice       = 13\n\trlimitNofile     = 7\n\trlimitNproc      = 6\n\trlimitRss        = 5\n\trlimitRtprio     = 14\n\trlimitRttime     = 15\n\trlimitSigpending = 11\n\trlimitStack      = 3\n)\n\nvar ulimitNameMapping = map[string]int{\n\t//\"as\":         rlimitAs, // Disabled since this doesn't seem usable with the way Docker inits a container.\n\t\"core\":       rlimitCore,\n\t\"cpu\":        rlimitCPU,\n\t\"data\":       rlimitData,\n\t\"fsize\":      rlimitFsize,\n\t\"locks\":      rlimitLocks,\n\t\"memlock\":    rlimitMemlock,\n\t\"msgqueue\":   rlimitMsgqueue,\n\t\"nice\":       rlimitNice,\n\t\"nofile\":     rlimitNofile,\n\t\"nproc\":      rlimitNproc,\n\t\"rss\":        rlimitRss,\n\t\"rtprio\":     rlimitRtprio,\n\t\"rttime\":     rlimitRttime,\n\t\"sigpending\": rlimitSigpending,\n\t\"stack\":      rlimitStack,\n}\n\n// ParseUlimit parses and returns a Ulimit from the specified string.\nfunc ParseUlimit(val string) (*Ulimit, error) {\n\tparts := strings.SplitN(val, \"=\", 2)\n\tif len(parts) != 2 {\n\t\treturn nil, fmt.Errorf(\"invalid ulimit argument: %s\", val)\n\t}\n\n\tif _, exists := ulimitNameMapping[parts[0]]; !exists {\n\t\treturn nil, fmt.Errorf(\"invalid ulimit type: %s\", parts[0])\n\t}\n\n\tvar (\n\t\tsoft int64\n\t\thard = &soft // default to soft in case no hard was set\n\t\ttemp int64\n\t\terr  error\n\t)\n\tswitch limitVals := strings.Split(parts[1], \":\"); len(limitVals) {\n\tcase 2:\n\t\ttemp, err = strconv.ParseInt(limitVals[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\thard = &temp\n\t\tfallthrough\n\tcase 1:\n\t\tsoft, err = strconv.ParseInt(limitVals[0], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"too many limit value arguments - %s, can only have up to two, `soft[:hard]`\", parts[1])\n\t}\n\n\tif *hard != -1 {\n\t\tif soft == -1 {\n\t\t\treturn nil, fmt.Errorf(\"ulimit soft limit must be less than or equal to hard limit: soft: -1 (unlimited), hard: %d\", *hard)\n\t\t}\n\t\tif soft > *hard {\n\t\t\treturn nil, fmt.Errorf(\"ulimit soft limit must be less than or equal to hard limit: %d > %d\", soft, *hard)\n\t\t}\n\t}\n\n\treturn &Ulimit{Name: parts[0], Soft: soft, Hard: *hard}, nil\n}\n\n// GetRlimit returns the RLimit corresponding to Ulimit.\nfunc (u *Ulimit) GetRlimit() (*Rlimit, error) {\n\tt, exists := ulimitNameMapping[u.Name]\n\tif !exists {\n\t\treturn nil, fmt.Errorf(\"invalid ulimit name %s\", u.Name)\n\t}\n\n\treturn &Rlimit{Type: t, Soft: uint64(u.Soft), Hard: uint64(u.Hard)}, nil\n}\n\nfunc (u *Ulimit) String() string {\n\treturn fmt.Sprintf(\"%s=%d:%d\", u.Name, u.Soft, u.Hard)\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/.gitignore",
    "content": "*~\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/README.md",
    "content": "# purego\n[![Go Reference](https://pkg.go.dev/badge/github.com/ebitengine/purego?GOOS=darwin.svg)](https://pkg.go.dev/github.com/ebitengine/purego?GOOS=darwin)\n\nA library for calling C functions from Go without Cgo.\n\n> This is beta software so expect bugs and potentially API breaking changes\n> but each release will be tagged to avoid breaking people's code.\n> Bug reports are encouraged.\n\n## Motivation\n\nThe [Ebitengine](https://github.com/hajimehoshi/ebiten) game engine was ported to use only Go on Windows. This enabled\ncross-compiling to Windows from any other operating system simply by setting `GOOS=windows`. The purego project was\nborn to bring that same vision to the other platforms supported by Ebitengine.\n\n## Benefits\n\n- **Simple Cross-Compilation**: No C means you can build for other platforms easily without a C compiler.\n- **Faster Compilation**: Efficiently cache your entirely Go builds.\n- **Smaller Binaries**: Using Cgo generates a C wrapper function for each C function called. Purego doesn't!\n- **Dynamic Linking**: Load symbols at runtime and use it as a plugin system.\n- **Foreign Function Interface**: Call into other languages that are compiled into shared objects.\n- **Cgo Fallback**: Works even with CGO_ENABLED=1 so incremental porting is possible. \nThis also means unsupported GOARCHs (freebsd/riscv64, linux/mips, etc.) will still work\nexcept for float arguments and return values.\n\n## Supported Platforms\n\n- **FreeBSD**: amd64, arm64\n- **Linux**: amd64, arm64\n- **macOS / iOS**: amd64, arm64\n- **Windows**: 386*, amd64, arm*, arm64\n\n`*` These architectures only support SyscallN and NewCallback\n\n## Example\n\nThe example below only showcases purego use for macOS and Linux. The other platforms require special handling which can\nbe seen in the complete example at [examples/libc](https://github.com/ebitengine/purego/tree/main/examples/libc) which supports Windows and FreeBSD.\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\n\t\"github.com/ebitengine/purego\"\n)\n\nfunc getSystemLibrary() string {\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\treturn \"/usr/lib/libSystem.B.dylib\"\n\tcase \"linux\":\n\t\treturn \"libc.so.6\"\n\tdefault:\n\t\tpanic(fmt.Errorf(\"GOOS=%s is not supported\", runtime.GOOS))\n\t}\n}\n\nfunc main() {\n\tlibc, err := purego.Dlopen(getSystemLibrary(), purego.RTLD_NOW|purego.RTLD_GLOBAL)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tvar puts func(string)\n\tpurego.RegisterLibFunc(&puts, libc, \"puts\")\n\tputs(\"Calling C from Go without Cgo!\")\n}\n```\n\nThen to run: `CGO_ENABLED=0 go run main.go`\n\n## Questions\n\nIf you have questions about how to incorporate purego in your project or want to discuss\nhow it works join the [Discord](https://discord.gg/HzGZVD6BkY)!\n\n### External Code\n\nPurego uses code that originates from the Go runtime. These files are under the BSD-3\nLicense that can be found [in the Go Source](https://github.com/golang/go/blob/master/LICENSE).\nThis is a list of the copied files:\n\n* `abi_*.h` from package `runtime/cgo`\n* `zcallback_darwin_*.s` from package `runtime`\n* `internal/fakecgo/abi_*.h` from package `runtime/cgo`\n* `internal/fakecgo/asm_GOARCH.s` from package `runtime/cgo`\n* `internal/fakecgo/callbacks.go` from package `runtime/cgo`\n* `internal/fakecgo/go_GOOS_GOARCH.go` from package `runtime/cgo`\n* `internal/fakecgo/iscgo.go` from package `runtime/cgo`\n* `internal/fakecgo/setenv.go` from package `runtime/cgo`\n* `internal/fakecgo/freebsd.go` from package `runtime/cgo`\n\nThe files `abi_*.h` and `internal/fakecgo/abi_*.h` are the same because Bazel does not support cross-package use of\n`#include` so we need each one once per package. (cf. [issue](https://github.com/bazelbuild/rules_go/issues/3636))\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/abi_amd64.h",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Macros for transitioning from the host ABI to Go ABI0.\n//\n// These save the frame pointer, so in general, functions that use\n// these should have zero frame size to suppress the automatic frame\n// pointer, though it's harmless to not do this.\n\n#ifdef GOOS_windows\n\n// REGS_HOST_TO_ABI0_STACK is the stack bytes used by\n// PUSH_REGS_HOST_TO_ABI0.\n#define REGS_HOST_TO_ABI0_STACK (28*8 + 8)\n\n// PUSH_REGS_HOST_TO_ABI0 prepares for transitioning from\n// the host ABI to Go ABI0 code. It saves all registers that are\n// callee-save in the host ABI and caller-save in Go ABI0 and prepares\n// for entry to Go.\n//\n// Save DI SI BP BX R12 R13 R14 R15 X6-X15 registers and the DF flag.\n// Clear the DF flag for the Go ABI.\n// MXCSR matches the Go ABI, so we don't have to set that,\n// and Go doesn't modify it, so we don't have to save it.\n#define PUSH_REGS_HOST_TO_ABI0()\t\\\n\tPUSHFQ\t\t\t\\\n\tCLD\t\t\t\\\n\tADJSP\t$(REGS_HOST_TO_ABI0_STACK - 8)\t\\\n\tMOVQ\tDI, (0*0)(SP)\t\\\n\tMOVQ\tSI, (1*8)(SP)\t\\\n\tMOVQ\tBP, (2*8)(SP)\t\\\n\tMOVQ\tBX, (3*8)(SP)\t\\\n\tMOVQ\tR12, (4*8)(SP)\t\\\n\tMOVQ\tR13, (5*8)(SP)\t\\\n\tMOVQ\tR14, (6*8)(SP)\t\\\n\tMOVQ\tR15, (7*8)(SP)\t\\\n\tMOVUPS\tX6, (8*8)(SP)\t\\\n\tMOVUPS\tX7, (10*8)(SP)\t\\\n\tMOVUPS\tX8, (12*8)(SP)\t\\\n\tMOVUPS\tX9, (14*8)(SP)\t\\\n\tMOVUPS\tX10, (16*8)(SP)\t\\\n\tMOVUPS\tX11, (18*8)(SP)\t\\\n\tMOVUPS\tX12, (20*8)(SP)\t\\\n\tMOVUPS\tX13, (22*8)(SP)\t\\\n\tMOVUPS\tX14, (24*8)(SP)\t\\\n\tMOVUPS\tX15, (26*8)(SP)\n\n#define POP_REGS_HOST_TO_ABI0()\t\\\n\tMOVQ\t(0*0)(SP), DI\t\\\n\tMOVQ\t(1*8)(SP), SI\t\\\n\tMOVQ\t(2*8)(SP), BP\t\\\n\tMOVQ\t(3*8)(SP), BX\t\\\n\tMOVQ\t(4*8)(SP), R12\t\\\n\tMOVQ\t(5*8)(SP), R13\t\\\n\tMOVQ\t(6*8)(SP), R14\t\\\n\tMOVQ\t(7*8)(SP), R15\t\\\n\tMOVUPS\t(8*8)(SP), X6\t\\\n\tMOVUPS\t(10*8)(SP), X7\t\\\n\tMOVUPS\t(12*8)(SP), X8\t\\\n\tMOVUPS\t(14*8)(SP), X9\t\\\n\tMOVUPS\t(16*8)(SP), X10\t\\\n\tMOVUPS\t(18*8)(SP), X11\t\\\n\tMOVUPS\t(20*8)(SP), X12\t\\\n\tMOVUPS\t(22*8)(SP), X13\t\\\n\tMOVUPS\t(24*8)(SP), X14\t\\\n\tMOVUPS\t(26*8)(SP), X15\t\\\n\tADJSP\t$-(REGS_HOST_TO_ABI0_STACK - 8)\t\\\n\tPOPFQ\n\n#else\n// SysV ABI\n\n#define REGS_HOST_TO_ABI0_STACK (6*8)\n\n// SysV MXCSR matches the Go ABI, so we don't have to set that,\n// and Go doesn't modify it, so we don't have to save it.\n// Both SysV and Go require DF to be cleared, so that's already clear.\n// The SysV and Go frame pointer conventions are compatible.\n#define PUSH_REGS_HOST_TO_ABI0()\t\\\n\tADJSP\t$(REGS_HOST_TO_ABI0_STACK)\t\\\n\tMOVQ\tBP, (5*8)(SP)\t\\\n\tLEAQ\t(5*8)(SP), BP\t\\\n\tMOVQ\tBX, (0*8)(SP)\t\\\n\tMOVQ\tR12, (1*8)(SP)\t\\\n\tMOVQ\tR13, (2*8)(SP)\t\\\n\tMOVQ\tR14, (3*8)(SP)\t\\\n\tMOVQ\tR15, (4*8)(SP)\n\n#define POP_REGS_HOST_TO_ABI0()\t\\\n\tMOVQ\t(0*8)(SP), BX\t\\\n\tMOVQ\t(1*8)(SP), R12\t\\\n\tMOVQ\t(2*8)(SP), R13\t\\\n\tMOVQ\t(3*8)(SP), R14\t\\\n\tMOVQ\t(4*8)(SP), R15\t\\\n\tMOVQ\t(5*8)(SP), BP\t\\\n\tADJSP\t$-(REGS_HOST_TO_ABI0_STACK)\n\n#endif\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/abi_arm64.h",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Macros for transitioning from the host ABI to Go ABI0.\n//\n// These macros save and restore the callee-saved registers\n// from the stack, but they don't adjust stack pointer, so\n// the user should prepare stack space in advance.\n// SAVE_R19_TO_R28(offset) saves R19 ~ R28 to the stack space\n// of ((offset)+0*8)(RSP) ~ ((offset)+9*8)(RSP).\n//\n// SAVE_F8_TO_F15(offset) saves F8 ~ F15 to the stack space\n// of ((offset)+0*8)(RSP) ~ ((offset)+7*8)(RSP).\n//\n// R29 is not saved because Go will save and restore it.\n\n#define SAVE_R19_TO_R28(offset) \\\n\tSTP\t(R19, R20), ((offset)+0*8)(RSP) \\\n\tSTP\t(R21, R22), ((offset)+2*8)(RSP) \\\n\tSTP\t(R23, R24), ((offset)+4*8)(RSP) \\\n\tSTP\t(R25, R26), ((offset)+6*8)(RSP) \\\n\tSTP\t(R27, g), ((offset)+8*8)(RSP)\n#define RESTORE_R19_TO_R28(offset) \\\n\tLDP\t((offset)+0*8)(RSP), (R19, R20) \\\n\tLDP\t((offset)+2*8)(RSP), (R21, R22) \\\n\tLDP\t((offset)+4*8)(RSP), (R23, R24) \\\n\tLDP\t((offset)+6*8)(RSP), (R25, R26) \\\n\tLDP\t((offset)+8*8)(RSP), (R27, g) /* R28 */\n#define SAVE_F8_TO_F15(offset) \\\n\tFSTPD\t(F8, F9), ((offset)+0*8)(RSP) \\\n\tFSTPD\t(F10, F11), ((offset)+2*8)(RSP) \\\n\tFSTPD\t(F12, F13), ((offset)+4*8)(RSP) \\\n\tFSTPD\t(F14, F15), ((offset)+6*8)(RSP)\n#define RESTORE_F8_TO_F15(offset) \\\n\tFLDPD\t((offset)+0*8)(RSP), (F8, F9) \\\n\tFLDPD\t((offset)+2*8)(RSP), (F10, F11) \\\n\tFLDPD\t((offset)+4*8)(RSP), (F12, F13) \\\n\tFLDPD\t((offset)+6*8)(RSP), (F14, F15)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/cgo.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build cgo && (darwin || freebsd || linux)\n\npackage purego\n\n// if CGO_ENABLED=1 import the Cgo runtime to ensure that it is set up properly.\n// This is required since some frameworks need TLS setup the C way which Go doesn't do.\n// We currently don't support ios in fakecgo mode so force Cgo or fail\n// Even if CGO_ENABLED=1 the Cgo runtime is not imported unless `import \"C\"` is used.\n// which will import this package automatically. Normally this isn't an issue since it\n// usually isn't possible to call into C without using that import. However, with purego\n// it is since we don't use `import \"C\"`!\nimport (\n\t_ \"runtime/cgo\"\n\n\t_ \"github.com/ebitengine/purego/internal/cgo\"\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlerror.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2023 The Ebitengine Authors\n\n//go:build darwin || freebsd || linux\n\npackage purego\n\n// Dlerror represents an error value returned from Dlopen, Dlsym, or Dlclose.\n//\n// This type is not available on Windows as there is no counterpart to it on Windows.\ntype Dlerror struct {\n\ts string\n}\n\nfunc (e Dlerror) Error() string {\n\treturn e.s\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build (darwin || freebsd || linux) && !android && !faketime\n\npackage purego\n\nimport (\n\t\"unsafe\"\n)\n\n// Unix Specification for dlfcn.h: https://pubs.opengroup.org/onlinepubs/7908799/xsh/dlfcn.h.html\n\nvar (\n\tfnDlopen  func(path string, mode int) uintptr\n\tfnDlsym   func(handle uintptr, name string) uintptr\n\tfnDlerror func() string\n\tfnDlclose func(handle uintptr) bool\n)\n\nfunc init() {\n\tRegisterFunc(&fnDlopen, dlopenABI0)\n\tRegisterFunc(&fnDlsym, dlsymABI0)\n\tRegisterFunc(&fnDlerror, dlerrorABI0)\n\tRegisterFunc(&fnDlclose, dlcloseABI0)\n}\n\n// Dlopen examines the dynamic library or bundle file specified by path. If the file is compatible\n// with the current process and has not already been loaded into the\n// current process, it is loaded and linked. After being linked, if it contains\n// any initializer functions, they are called, before Dlopen\n// returns. It returns a handle that can be used with Dlsym and Dlclose.\n// A second call to Dlopen with the same path will return the same handle, but the internal\n// reference count for the handle will be incremented. Therefore, all\n// Dlopen calls should be balanced with a Dlclose call.\n//\n// This function is not available on Windows.\n// Use [golang.org/x/sys/windows.LoadLibrary], [golang.org/x/sys/windows.LoadLibraryEx],\n// [golang.org/x/sys/windows.NewLazyDLL], or [golang.org/x/sys/windows.NewLazySystemDLL] for Windows instead.\nfunc Dlopen(path string, mode int) (uintptr, error) {\n\tu := fnDlopen(path, mode)\n\tif u == 0 {\n\t\treturn 0, Dlerror{fnDlerror()}\n\t}\n\treturn u, nil\n}\n\n// Dlsym takes a \"handle\" of a dynamic library returned by Dlopen and the symbol name.\n// It returns the address where that symbol is loaded into memory. If the symbol is not found,\n// in the specified library or any of the libraries that were automatically loaded by Dlopen\n// when that library was loaded, Dlsym returns zero.\n//\n// This function is not available on Windows.\n// Use [golang.org/x/sys/windows.GetProcAddress] for Windows instead.\nfunc Dlsym(handle uintptr, name string) (uintptr, error) {\n\tu := fnDlsym(handle, name)\n\tif u == 0 {\n\t\treturn 0, Dlerror{fnDlerror()}\n\t}\n\treturn u, nil\n}\n\n// Dlclose decrements the reference count on the dynamic library handle.\n// If the reference count drops to zero and no other loaded libraries\n// use symbols in it, then the dynamic library is unloaded.\n//\n// This function is not available on Windows.\n// Use [golang.org/x/sys/windows.FreeLibrary] for Windows instead.\nfunc Dlclose(handle uintptr) error {\n\tif fnDlclose(handle) {\n\t\treturn Dlerror{fnDlerror()}\n\t}\n\treturn nil\n}\n\nfunc loadSymbol(handle uintptr, name string) (uintptr, error) {\n\treturn Dlsym(handle, name)\n}\n\n// these functions exist in dlfcn_stubs.s and are calling C functions linked to in dlfcn_GOOS.go\n// the indirection is necessary because a function is actually a pointer to the pointer to the code.\n// sadly, I do not know of anyway to remove the assembly stubs entirely because //go:linkname doesn't\n// appear to work if you link directly to the C function on darwin arm64.\n\n//go:linkname dlopen dlopen\nvar dlopen uintptr\nvar dlopenABI0 = uintptr(unsafe.Pointer(&dlopen))\n\n//go:linkname dlsym dlsym\nvar dlsym uintptr\nvar dlsymABI0 = uintptr(unsafe.Pointer(&dlsym))\n\n//go:linkname dlclose dlclose\nvar dlclose uintptr\nvar dlcloseABI0 = uintptr(unsafe.Pointer(&dlclose))\n\n//go:linkname dlerror dlerror\nvar dlerror uintptr\nvar dlerrorABI0 = uintptr(unsafe.Pointer(&dlerror))\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_android.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2024 The Ebitengine Authors\n\npackage purego\n\nimport \"github.com/ebitengine/purego/internal/cgo\"\n\n// Source for constants: https://android.googlesource.com/platform/bionic/+/refs/heads/main/libc/include/dlfcn.h\n\nconst (\n\tis64bit      = 1 << (^uintptr(0) >> 63) / 2\n\tis32bit      = 1 - is64bit\n\tRTLD_DEFAULT = is32bit * 0xffffffff\n\tRTLD_LAZY    = 0x00000001\n\tRTLD_NOW     = is64bit * 0x00000002\n\tRTLD_LOCAL   = 0x00000000\n\tRTLD_GLOBAL  = is64bit*0x00100 | is32bit*0x00000002\n)\n\nfunc Dlopen(path string, mode int) (uintptr, error) {\n\treturn cgo.Dlopen(path, mode)\n}\n\nfunc Dlsym(handle uintptr, name string) (uintptr, error) {\n\treturn cgo.Dlsym(handle, name)\n}\n\nfunc Dlclose(handle uintptr) error {\n\treturn cgo.Dlclose(handle)\n}\n\nfunc loadSymbol(handle uintptr, name string) (uintptr, error) {\n\treturn Dlsym(handle, name)\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_darwin.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\npackage purego\n\n// Source for constants: https://opensource.apple.com/source/dyld/dyld-360.14/include/dlfcn.h.auto.html\n\nconst (\n\tRTLD_DEFAULT = 1<<64 - 2 // Pseudo-handle for dlsym so search for any loaded symbol\n\tRTLD_LAZY    = 0x1       // Relocations are performed at an implementation-dependent time.\n\tRTLD_NOW     = 0x2       // Relocations are performed when the object is loaded.\n\tRTLD_LOCAL   = 0x4       // All symbols are not made available for relocation processing by other modules.\n\tRTLD_GLOBAL  = 0x8       // All symbols are available for relocation processing of other modules.\n)\n\n//go:cgo_import_dynamic purego_dlopen dlopen \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_dlsym dlsym \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_dlerror dlerror \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_dlclose dlclose \"/usr/lib/libSystem.B.dylib\"\n\n//go:cgo_import_dynamic purego_dlopen dlopen \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_dlsym dlsym \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_dlerror dlerror \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_dlclose dlclose \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_freebsd.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\npackage purego\n\n// Constants as defined in https://github.com/freebsd/freebsd-src/blob/main/include/dlfcn.h\nconst (\n\tintSize      = 32 << (^uint(0) >> 63) // 32 or 64\n\tRTLD_DEFAULT = 1<<intSize - 2         // Pseudo-handle for dlsym so search for any loaded symbol\n\tRTLD_LAZY    = 0x00000001             // Relocations are performed at an implementation-dependent time.\n\tRTLD_NOW     = 0x00000002             // Relocations are performed when the object is loaded.\n\tRTLD_LOCAL   = 0x00000000             // All symbols are not made available for relocation processing by other modules.\n\tRTLD_GLOBAL  = 0x00000100             // All symbols are available for relocation processing of other modules.\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_linux.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !android\n\npackage purego\n\n// Source for constants: https://codebrowser.dev/glibc/glibc/bits/dlfcn.h.html\n\nconst (\n\tRTLD_DEFAULT = 0x00000 // Pseudo-handle for dlsym so search for any loaded symbol\n\tRTLD_LAZY    = 0x00001 // Relocations are performed at an implementation-dependent time.\n\tRTLD_NOW     = 0x00002 // Relocations are performed when the object is loaded.\n\tRTLD_LOCAL   = 0x00000 // All symbols are not made available for relocation processing by other modules.\n\tRTLD_GLOBAL  = 0x00100 // All symbols are available for relocation processing of other modules.\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_nocgo_freebsd.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage purego\n\n//go:cgo_import_dynamic purego_dlopen dlopen \"libc.so.7\"\n//go:cgo_import_dynamic purego_dlsym dlsym \"libc.so.7\"\n//go:cgo_import_dynamic purego_dlerror dlerror \"libc.so.7\"\n//go:cgo_import_dynamic purego_dlclose dlclose \"libc.so.7\"\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_nocgo_linux.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && !faketime\n\npackage purego\n\n// if there is no Cgo we must link to each of the functions from dlfcn.h\n// then the functions are called inside dlfcn_stubs.s\n\n//go:cgo_import_dynamic purego_dlopen dlopen \"libdl.so.2\"\n//go:cgo_import_dynamic purego_dlsym dlsym \"libdl.so.2\"\n//go:cgo_import_dynamic purego_dlerror dlerror \"libdl.so.2\"\n//go:cgo_import_dynamic purego_dlclose dlclose \"libdl.so.2\"\n\n// on amd64 we don't need the following line - on 386 we do...\n// anyway - with those lines the output is better (but doesn't matter) - without it on amd64 we get multiple DT_NEEDED with \"libc.so.6\" etc\n\n//go:cgo_import_dynamic _ _ \"libdl.so.2\"\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_playground.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2024 The Ebitengine Authors\n\n//go:build faketime\n\npackage purego\n\nimport \"errors\"\n\nfunc Dlopen(path string, mode int) (uintptr, error) {\n\treturn 0, errors.New(\"Dlopen is not supported in the playground\")\n}\n\nfunc Dlsym(handle uintptr, name string) (uintptr, error) {\n\treturn 0, errors.New(\"Dlsym is not supported in the playground\")\n}\n\nfunc Dlclose(handle uintptr) error {\n\treturn errors.New(\"Dlclose is not supported in the playground\")\n}\n\nfunc loadSymbol(handle uintptr, name string) (uintptr, error) {\n\treturn Dlsym(handle, name)\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/dlfcn_stubs.s",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build darwin || !cgo && (freebsd || linux) && !faketime\n\n#include \"textflag.h\"\n\n// func dlopen(path *byte, mode int) (ret uintptr)\nTEXT dlopen(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_dlopen(SB)\n\tRET\n\n// func dlsym(handle uintptr, symbol *byte) (ret uintptr)\nTEXT dlsym(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_dlsym(SB)\n\tRET\n\n// func dlerror() (ret *byte)\nTEXT dlerror(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_dlerror(SB)\n\tRET\n\n// func dlclose(handle uintptr) (ret int)\nTEXT dlclose(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_dlclose(SB)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/func.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build darwin || freebsd || linux || windows\n\npackage purego\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/ebitengine/purego/internal/strings\"\n)\n\n// RegisterLibFunc is a wrapper around RegisterFunc that uses the C function returned from Dlsym(handle, name).\n// It panics if it can't find the name symbol.\nfunc RegisterLibFunc(fptr interface{}, handle uintptr, name string) {\n\tsym, err := loadSymbol(handle, name)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tRegisterFunc(fptr, sym)\n}\n\n// RegisterFunc takes a pointer to a Go function representing the calling convention of the C function.\n// fptr will be set to a function that when called will call the C function given by cfn with the\n// parameters passed in the correct registers and stack.\n//\n// A panic is produced if the type is not a function pointer or if the function returns more than 1 value.\n//\n// These conversions describe how a Go type in the fptr will be used to call\n// the C function. It is important to note that there is no way to verify that fptr\n// matches the C function. This also holds true for struct types where the padding\n// needs to be ensured to match that of C; RegisterFunc does not verify this.\n//\n// # Type Conversions (Go <=> C)\n//\n//\tstring <=> char*\n//\tbool <=> _Bool\n//\tuintptr <=> uintptr_t\n//\tuint <=> uint32_t or uint64_t\n//\tuint8 <=> uint8_t\n//\tuint16 <=> uint16_t\n//\tuint32 <=> uint32_t\n//\tuint64 <=> uint64_t\n//\tint <=> int32_t or int64_t\n//\tint8 <=> int8_t\n//\tint16 <=> int16_t\n//\tint32 <=> int32_t\n//\tint64 <=> int64_t\n//\tfloat32 <=> float\n//\tfloat64 <=> double\n//\tstruct <=> struct (WIP - darwin only)\n//\tfunc <=> C function\n//\tunsafe.Pointer, *T <=> void*\n//\t[]T => void*\n//\n// There is a special case when the last argument of fptr is a variadic interface (or []interface}\n// it will be expanded into a call to the C function as if it had the arguments in that slice.\n// This means that using arg ...interface{} is like a cast to the function with the arguments inside arg.\n// This is not the same as C variadic.\n//\n// # Memory\n//\n// In general it is not possible for purego to guarantee the lifetimes of objects returned or received from\n// calling functions using RegisterFunc. For arguments to a C function it is important that the C function doesn't\n// hold onto a reference to Go memory. This is the same as the [Cgo rules].\n//\n// However, there are some special cases. When passing a string as an argument if the string does not end in a null\n// terminated byte (\\x00) then the string will be copied into memory maintained by purego. The memory is only valid for\n// that specific call. Therefore, if the C code keeps a reference to that string it may become invalid at some\n// undefined time. However, if the string does already contain a null-terminated byte then no copy is done.\n// It is then the responsibility of the caller to ensure the string stays alive as long as it's needed in C memory.\n// This can be done using runtime.KeepAlive or allocating the string in C memory using malloc. When a C function\n// returns a null-terminated pointer to char a Go string can be used. Purego will allocate a new string in Go memory\n// and copy the data over. This string will be garbage collected whenever Go decides it's no longer referenced.\n// This C created string will not be freed by purego. If the pointer to char is not null-terminated or must continue\n// to point to C memory (because it's a buffer for example) then use a pointer to byte and then convert that to a slice\n// using unsafe.Slice. Doing this means that it becomes the responsibility of the caller to care about the lifetime\n// of the pointer\n//\n// # Structs\n//\n// Purego can handle the most common structs that have fields of builtin types like int8, uint16, float32, etc. However,\n// it does not support aligning fields properly. It is therefore the responsibility of the caller to ensure\n// that all padding is added to the Go struct to match the C one. See `BoolStructFn` in struct_test.go for an example.\n//\n// # Example\n//\n// All functions below call this C function:\n//\n//\tchar *foo(char *str);\n//\n//\t// Let purego convert types\n//\tvar foo func(s string) string\n//\tgoString := foo(\"copied\")\n//\t// Go will garbage collect this string\n//\n//\t// Manually, handle allocations\n//\tvar foo2 func(b string) *byte\n//\tmustFree := foo2(\"not copied\\x00\")\n//\tdefer free(mustFree)\n//\n// [Cgo rules]: https://pkg.go.dev/cmd/cgo#hdr-Go_references_to_C\nfunc RegisterFunc(fptr interface{}, cfn uintptr) {\n\tfn := reflect.ValueOf(fptr).Elem()\n\tty := fn.Type()\n\tif ty.Kind() != reflect.Func {\n\t\tpanic(\"purego: fptr must be a function pointer\")\n\t}\n\tif ty.NumOut() > 1 {\n\t\tpanic(\"purego: function can only return zero or one values\")\n\t}\n\tif cfn == 0 {\n\t\tpanic(\"purego: cfn is nil\")\n\t}\n\tif ty.NumOut() == 1 && (ty.Out(0).Kind() == reflect.Float32 || ty.Out(0).Kind() == reflect.Float64) &&\n\t\truntime.GOARCH != \"arm64\" && runtime.GOARCH != \"amd64\" {\n\t\tpanic(\"purego: float returns are not supported\")\n\t}\n\t{\n\t\t// this code checks how many registers and stack this function will use\n\t\t// to avoid crashing with too many arguments\n\t\tvar ints int\n\t\tvar floats int\n\t\tvar stack int\n\t\tfor i := 0; i < ty.NumIn(); i++ {\n\t\t\targ := ty.In(i)\n\t\t\tswitch arg.Kind() {\n\t\t\tcase reflect.Func:\n\t\t\t\t// This only does preliminary testing to ensure the CDecl argument\n\t\t\t\t// is the first argument. Full testing is done when the callback is actually\n\t\t\t\t// created in NewCallback.\n\t\t\t\tfor j := 0; j < arg.NumIn(); j++ {\n\t\t\t\t\tin := arg.In(j)\n\t\t\t\t\tif !in.AssignableTo(reflect.TypeOf(CDecl{})) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif j != 0 {\n\t\t\t\t\t\tpanic(\"purego: CDecl must be the first argument\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase reflect.String, reflect.Uintptr, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,\n\t\t\t\treflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Ptr, reflect.UnsafePointer,\n\t\t\t\treflect.Slice, reflect.Bool:\n\t\t\t\tif ints < numOfIntegerRegisters() {\n\t\t\t\t\tints++\n\t\t\t\t} else {\n\t\t\t\t\tstack++\n\t\t\t\t}\n\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\tconst is32bit = unsafe.Sizeof(uintptr(0)) == 4\n\t\t\t\tif is32bit {\n\t\t\t\t\tpanic(\"purego: floats only supported on 64bit platforms\")\n\t\t\t\t}\n\t\t\t\tif floats < numOfFloats {\n\t\t\t\t\tfloats++\n\t\t\t\t} else {\n\t\t\t\t\tstack++\n\t\t\t\t}\n\t\t\tcase reflect.Struct:\n\t\t\t\tif runtime.GOOS != \"darwin\" || (runtime.GOARCH != \"amd64\" && runtime.GOARCH != \"arm64\") {\n\t\t\t\t\tpanic(\"purego: struct arguments are only supported on darwin amd64 & arm64\")\n\t\t\t\t}\n\t\t\t\tif arg.Size() == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\taddInt := func(u uintptr) {\n\t\t\t\t\tints++\n\t\t\t\t}\n\t\t\t\taddFloat := func(u uintptr) {\n\t\t\t\t\tfloats++\n\t\t\t\t}\n\t\t\t\taddStack := func(u uintptr) {\n\t\t\t\t\tstack++\n\t\t\t\t}\n\t\t\t\t_ = addStruct(reflect.New(arg).Elem(), &ints, &floats, &stack, addInt, addFloat, addStack, nil)\n\t\t\tdefault:\n\t\t\t\tpanic(\"purego: unsupported kind \" + arg.Kind().String())\n\t\t\t}\n\t\t}\n\t\tif ty.NumOut() == 1 && ty.Out(0).Kind() == reflect.Struct {\n\t\t\tif runtime.GOOS != \"darwin\" {\n\t\t\t\tpanic(\"purego: struct return values only supported on darwin arm64 & amd64\")\n\t\t\t}\n\t\t\toutType := ty.Out(0)\n\t\t\tcheckStructFieldsSupported(outType)\n\t\t\tif runtime.GOARCH == \"amd64\" && outType.Size() > maxRegAllocStructSize {\n\t\t\t\t// on amd64 if struct is bigger than 16 bytes allocate the return struct\n\t\t\t\t// and pass it in as a hidden first argument.\n\t\t\t\tints++\n\t\t\t}\n\t\t}\n\t\tsizeOfStack := maxArgs - numOfIntegerRegisters()\n\t\tif stack > sizeOfStack {\n\t\t\tpanic(\"purego: too many arguments\")\n\t\t}\n\t}\n\tv := reflect.MakeFunc(ty, func(args []reflect.Value) (results []reflect.Value) {\n\t\tif len(args) > 0 {\n\t\t\tif variadic, ok := args[len(args)-1].Interface().([]interface{}); ok {\n\t\t\t\t// subtract one from args bc the last argument in args is []interface{}\n\t\t\t\t// which we are currently expanding\n\t\t\t\ttmp := make([]reflect.Value, len(args)-1+len(variadic))\n\t\t\t\tn := copy(tmp, args[:len(args)-1])\n\t\t\t\tfor i, v := range variadic {\n\t\t\t\t\ttmp[n+i] = reflect.ValueOf(v)\n\t\t\t\t}\n\t\t\t\targs = tmp\n\t\t\t}\n\t\t}\n\t\tvar sysargs [maxArgs]uintptr\n\t\tstack := sysargs[numOfIntegerRegisters():]\n\t\tvar floats [numOfFloats]uintptr\n\t\tvar numInts int\n\t\tvar numFloats int\n\t\tvar numStack int\n\t\tvar addStack, addInt, addFloat func(x uintptr)\n\t\tif runtime.GOARCH == \"arm64\" || runtime.GOOS != \"windows\" {\n\t\t\t// Windows arm64 uses the same calling convention as macOS and Linux\n\t\t\taddStack = func(x uintptr) {\n\t\t\t\tstack[numStack] = x\n\t\t\t\tnumStack++\n\t\t\t}\n\t\t\taddInt = func(x uintptr) {\n\t\t\t\tif numInts >= numOfIntegerRegisters() {\n\t\t\t\t\taddStack(x)\n\t\t\t\t} else {\n\t\t\t\t\tsysargs[numInts] = x\n\t\t\t\t\tnumInts++\n\t\t\t\t}\n\t\t\t}\n\t\t\taddFloat = func(x uintptr) {\n\t\t\t\tif numFloats < len(floats) {\n\t\t\t\t\tfloats[numFloats] = x\n\t\t\t\t\tnumFloats++\n\t\t\t\t} else {\n\t\t\t\t\taddStack(x)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// On Windows amd64 the arguments are passed in the numbered registered.\n\t\t\t// So the first int is in the first integer register and the first float\n\t\t\t// is in the second floating register if there is already a first int.\n\t\t\t// This is in contrast to how macOS and Linux pass arguments which\n\t\t\t// tries to use as many registers as possible in the calling convention.\n\t\t\taddStack = func(x uintptr) {\n\t\t\t\tsysargs[numStack] = x\n\t\t\t\tnumStack++\n\t\t\t}\n\t\t\taddInt = addStack\n\t\t\taddFloat = addStack\n\t\t}\n\n\t\tvar keepAlive []interface{}\n\t\tdefer func() {\n\t\t\truntime.KeepAlive(keepAlive)\n\t\t\truntime.KeepAlive(args)\n\t\t}()\n\t\tvar syscall syscall15Args\n\t\tif ty.NumOut() == 1 && ty.Out(0).Kind() == reflect.Struct {\n\t\t\toutType := ty.Out(0)\n\t\t\tif runtime.GOARCH == \"amd64\" && outType.Size() > maxRegAllocStructSize {\n\t\t\t\tval := reflect.New(outType)\n\t\t\t\tkeepAlive = append(keepAlive, val)\n\t\t\t\taddInt(val.Pointer())\n\t\t\t} else if runtime.GOARCH == \"arm64\" && outType.Size() > maxRegAllocStructSize {\n\t\t\t\tisAllFloats, numFields := isAllSameFloat(outType)\n\t\t\t\tif !isAllFloats || numFields > 4 {\n\t\t\t\t\tval := reflect.New(outType)\n\t\t\t\t\tkeepAlive = append(keepAlive, val)\n\t\t\t\t\tsyscall.arm64_r8 = val.Pointer()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor _, v := range args {\n\t\t\tswitch v.Kind() {\n\t\t\tcase reflect.String:\n\t\t\t\tptr := strings.CString(v.String())\n\t\t\t\tkeepAlive = append(keepAlive, ptr)\n\t\t\t\taddInt(uintptr(unsafe.Pointer(ptr)))\n\t\t\tcase reflect.Uintptr, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\taddInt(uintptr(v.Uint()))\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\taddInt(uintptr(v.Int()))\n\t\t\tcase reflect.Ptr, reflect.UnsafePointer, reflect.Slice:\n\t\t\t\t// There is no need to keepAlive this pointer separately because it is kept alive in the args variable\n\t\t\t\taddInt(v.Pointer())\n\t\t\tcase reflect.Func:\n\t\t\t\taddInt(NewCallback(v.Interface()))\n\t\t\tcase reflect.Bool:\n\t\t\t\tif v.Bool() {\n\t\t\t\t\taddInt(1)\n\t\t\t\t} else {\n\t\t\t\t\taddInt(0)\n\t\t\t\t}\n\t\t\tcase reflect.Float32:\n\t\t\t\taddFloat(uintptr(math.Float32bits(float32(v.Float()))))\n\t\t\tcase reflect.Float64:\n\t\t\t\taddFloat(uintptr(math.Float64bits(v.Float())))\n\t\t\tcase reflect.Struct:\n\t\t\t\tkeepAlive = addStruct(v, &numInts, &numFloats, &numStack, addInt, addFloat, addStack, keepAlive)\n\t\t\tdefault:\n\t\t\t\tpanic(\"purego: unsupported kind: \" + v.Kind().String())\n\t\t\t}\n\t\t}\n\t\tif runtime.GOARCH == \"arm64\" || runtime.GOOS != \"windows\" {\n\t\t\t// Use the normal arm64 calling convention even on Windows\n\t\t\tsyscall = syscall15Args{\n\t\t\t\tcfn,\n\t\t\t\tsysargs[0], sysargs[1], sysargs[2], sysargs[3], sysargs[4], sysargs[5],\n\t\t\t\tsysargs[6], sysargs[7], sysargs[8], sysargs[9], sysargs[10], sysargs[11],\n\t\t\t\tsysargs[12], sysargs[13], sysargs[14],\n\t\t\t\tfloats[0], floats[1], floats[2], floats[3], floats[4], floats[5], floats[6], floats[7],\n\t\t\t\tsyscall.arm64_r8,\n\t\t\t}\n\t\t\truntime_cgocall(syscall15XABI0, unsafe.Pointer(&syscall))\n\t\t} else {\n\t\t\t// This is a fallback for Windows amd64, 386, and arm. Note this may not support floats\n\t\t\tsyscall.a1, syscall.a2, _ = syscall_syscall15X(cfn, sysargs[0], sysargs[1], sysargs[2], sysargs[3], sysargs[4],\n\t\t\t\tsysargs[5], sysargs[6], sysargs[7], sysargs[8], sysargs[9], sysargs[10], sysargs[11],\n\t\t\t\tsysargs[12], sysargs[13], sysargs[14])\n\t\t\tsyscall.f1 = syscall.a2 // on amd64 a2 stores the float return. On 32bit platforms floats aren't support\n\t\t}\n\t\tif ty.NumOut() == 0 {\n\t\t\treturn nil\n\t\t}\n\t\toutType := ty.Out(0)\n\t\tv := reflect.New(outType).Elem()\n\t\tswitch outType.Kind() {\n\t\tcase reflect.Uintptr, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tv.SetUint(uint64(syscall.a1))\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tv.SetInt(int64(syscall.a1))\n\t\tcase reflect.Bool:\n\t\t\tv.SetBool(byte(syscall.a1) != 0)\n\t\tcase reflect.UnsafePointer:\n\t\t\t// We take the address and then dereference it to trick go vet from creating a possible miss-use of unsafe.Pointer\n\t\t\tv.SetPointer(*(*unsafe.Pointer)(unsafe.Pointer(&syscall.a1)))\n\t\tcase reflect.Ptr:\n\t\t\tv = reflect.NewAt(outType, unsafe.Pointer(&syscall.a1)).Elem()\n\t\tcase reflect.Func:\n\t\t\t// wrap this C function in a nicely typed Go function\n\t\t\tv = reflect.New(outType)\n\t\t\tRegisterFunc(v.Interface(), syscall.a1)\n\t\tcase reflect.String:\n\t\t\tv.SetString(strings.GoString(syscall.a1))\n\t\tcase reflect.Float32:\n\t\t\t// NOTE: syscall.r2 is only the floating return value on 64bit platforms.\n\t\t\t// On 32bit platforms syscall.r2 is the upper part of a 64bit return.\n\t\t\tv.SetFloat(float64(math.Float32frombits(uint32(syscall.f1))))\n\t\tcase reflect.Float64:\n\t\t\t// NOTE: syscall.r2 is only the floating return value on 64bit platforms.\n\t\t\t// On 32bit platforms syscall.r2 is the upper part of a 64bit return.\n\t\t\tv.SetFloat(math.Float64frombits(uint64(syscall.f1)))\n\t\tcase reflect.Struct:\n\t\t\tv = getStruct(outType, syscall)\n\t\tdefault:\n\t\t\tpanic(\"purego: unsupported return kind: \" + outType.Kind().String())\n\t\t}\n\t\treturn []reflect.Value{v}\n\t})\n\tfn.Set(v)\n}\n\n// maxRegAllocStructSize is the biggest a struct can be while still fitting in registers.\n// if it is bigger than this than enough space must be allocated on the heap and then passed into\n// the function as the first parameter on amd64 or in R8 on arm64.\n//\n// If you change this make sure to update it in objc_runtime_darwin.go\nconst maxRegAllocStructSize = 16\n\nfunc isAllSameFloat(ty reflect.Type) (allFloats bool, numFields int) {\n\tallFloats = true\n\troot := ty.Field(0).Type\n\tfor root.Kind() == reflect.Struct {\n\t\troot = root.Field(0).Type\n\t}\n\tfirst := root.Kind()\n\tif first != reflect.Float32 && first != reflect.Float64 {\n\t\tallFloats = false\n\t}\n\tfor i := 0; i < ty.NumField(); i++ {\n\t\tf := ty.Field(i).Type\n\t\tif f.Kind() == reflect.Struct {\n\t\t\tvar structNumFields int\n\t\t\tallFloats, structNumFields = isAllSameFloat(f)\n\t\t\tnumFields += structNumFields\n\t\t\tcontinue\n\t\t}\n\t\tnumFields++\n\t\tif f.Kind() != first {\n\t\t\tallFloats = false\n\t\t}\n\t}\n\treturn allFloats, numFields\n}\n\nfunc checkStructFieldsSupported(ty reflect.Type) {\n\tfor i := 0; i < ty.NumField(); i++ {\n\t\tf := ty.Field(i).Type\n\t\tif f.Kind() == reflect.Array {\n\t\t\tf = f.Elem()\n\t\t} else if f.Kind() == reflect.Struct {\n\t\t\tcheckStructFieldsSupported(f)\n\t\t\tcontinue\n\t\t}\n\t\tswitch f.Kind() {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,\n\t\t\treflect.Uintptr, reflect.Ptr, reflect.UnsafePointer, reflect.Float64, reflect.Float32:\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"purego: struct field type %s is not supported\", f))\n\t\t}\n\t}\n}\n\nfunc roundUpTo8(val uintptr) uintptr {\n\treturn (val + 7) &^ 7\n}\n\nfunc numOfIntegerRegisters() int {\n\tswitch runtime.GOARCH {\n\tcase \"arm64\":\n\t\treturn 8\n\tcase \"amd64\":\n\t\treturn 6\n\tdefault:\n\t\t// since this platform isn't supported and can therefore only access\n\t\t// integer registers it is fine to return the maxArgs\n\t\treturn maxArgs\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/go_runtime.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build darwin || freebsd || linux || windows\n\npackage purego\n\nimport (\n\t\"unsafe\"\n)\n\n//go:linkname runtime_cgocall runtime.cgocall\nfunc runtime_cgocall(fn uintptr, arg unsafe.Pointer) int32 // from runtime/sys_libc.go\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/cgo/dlfcn_cgo_unix.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2024 The Ebitengine Authors\n\n//go:build freebsd || linux\n\npackage cgo\n\n/*\n #cgo LDFLAGS: -ldl\n\n#include <dlfcn.h>\n#include <stdlib.h>\n*/\nimport \"C\"\n\nimport (\n\t\"errors\"\n\t\"unsafe\"\n)\n\nfunc Dlopen(filename string, flag int) (uintptr, error) {\n\tcfilename := C.CString(filename)\n\tdefer C.free(unsafe.Pointer(cfilename))\n\thandle := C.dlopen(cfilename, C.int(flag))\n\tif handle == nil {\n\t\treturn 0, errors.New(C.GoString(C.dlerror()))\n\t}\n\treturn uintptr(handle), nil\n}\n\nfunc Dlsym(handle uintptr, symbol string) (uintptr, error) {\n\tcsymbol := C.CString(symbol)\n\tdefer C.free(unsafe.Pointer(csymbol))\n\tsymbolAddr := C.dlsym(*(*unsafe.Pointer)(unsafe.Pointer(&handle)), csymbol)\n\tif symbolAddr == nil {\n\t\treturn 0, errors.New(C.GoString(C.dlerror()))\n\t}\n\treturn uintptr(symbolAddr), nil\n}\n\nfunc Dlclose(handle uintptr) error {\n\tresult := C.dlclose(*(*unsafe.Pointer)(unsafe.Pointer(&handle)))\n\tif result != 0 {\n\t\treturn errors.New(C.GoString(C.dlerror()))\n\t}\n\treturn nil\n}\n\n// all that is needed is to assign each dl function because then its\n// symbol will then be made available to the linker and linked to inside dlfcn.go\nvar (\n\t_ = C.dlopen\n\t_ = C.dlsym\n\t_ = C.dlerror\n\t_ = C.dlclose\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/cgo/empty.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2024 The Ebitengine Authors\n\npackage cgo\n\n// Empty so that importing this package doesn't cause issue for certain platforms.\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/cgo/syscall_cgo_unix.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build freebsd || (linux && !(arm64 || amd64))\n\npackage cgo\n\n// this file is placed inside internal/cgo and not package purego\n// because Cgo and assembly files can't be in the same package.\n\n/*\n #cgo LDFLAGS: -ldl\n\n#include <stdint.h>\n#include <dlfcn.h>\n#include <errno.h>\n#include <assert.h>\n\ntypedef struct syscall15Args {\n\tuintptr_t fn;\n\tuintptr_t a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;\n\tuintptr_t f1, f2, f3, f4, f5, f6, f7, f8;\n\tuintptr_t err;\n} syscall15Args;\n\nvoid syscall15(struct syscall15Args *args) {\n\tassert((args->f1|args->f2|args->f3|args->f4|args->f5|args->f6|args->f7|args->f8) == 0);\n\tuintptr_t (*func_name)(uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6,\n\t\tuintptr_t a7, uintptr_t a8, uintptr_t a9, uintptr_t a10, uintptr_t a11, uintptr_t a12,\n\t\tuintptr_t a13, uintptr_t a14, uintptr_t a15);\n\t*(void**)(&func_name) = (void*)(args->fn);\n\tuintptr_t r1 =  func_name(args->a1,args->a2,args->a3,args->a4,args->a5,args->a6,args->a7,args->a8,args->a9,\n\t\targs->a10,args->a11,args->a12,args->a13,args->a14,args->a15);\n\targs->a1 = r1;\n\targs->err = errno;\n}\n\n*/\nimport \"C\"\nimport \"unsafe\"\n\n// assign purego.syscall15XABI0 to the C version of this function.\nvar Syscall15XABI0 = unsafe.Pointer(C.syscall15)\n\n//go:nosplit\nfunc Syscall15X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2, err uintptr) {\n\targs := C.syscall15Args{\n\t\tC.uintptr_t(fn), C.uintptr_t(a1), C.uintptr_t(a2), C.uintptr_t(a3),\n\t\tC.uintptr_t(a4), C.uintptr_t(a5), C.uintptr_t(a6),\n\t\tC.uintptr_t(a7), C.uintptr_t(a8), C.uintptr_t(a9), C.uintptr_t(a10), C.uintptr_t(a11), C.uintptr_t(a12),\n\t\tC.uintptr_t(a13), C.uintptr_t(a14), C.uintptr_t(a15), 0, 0, 0, 0, 0, 0, 0, 0, 0,\n\t}\n\tC.syscall15(&args)\n\treturn uintptr(args.a1), 0, uintptr(args.err)\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/abi_amd64.h",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Macros for transitioning from the host ABI to Go ABI0.\n//\n// These save the frame pointer, so in general, functions that use\n// these should have zero frame size to suppress the automatic frame\n// pointer, though it's harmless to not do this.\n\n#ifdef GOOS_windows\n\n// REGS_HOST_TO_ABI0_STACK is the stack bytes used by\n// PUSH_REGS_HOST_TO_ABI0.\n#define REGS_HOST_TO_ABI0_STACK (28*8 + 8)\n\n// PUSH_REGS_HOST_TO_ABI0 prepares for transitioning from\n// the host ABI to Go ABI0 code. It saves all registers that are\n// callee-save in the host ABI and caller-save in Go ABI0 and prepares\n// for entry to Go.\n//\n// Save DI SI BP BX R12 R13 R14 R15 X6-X15 registers and the DF flag.\n// Clear the DF flag for the Go ABI.\n// MXCSR matches the Go ABI, so we don't have to set that,\n// and Go doesn't modify it, so we don't have to save it.\n#define PUSH_REGS_HOST_TO_ABI0()\t\\\n\tPUSHFQ\t\t\t\\\n\tCLD\t\t\t\\\n\tADJSP\t$(REGS_HOST_TO_ABI0_STACK - 8)\t\\\n\tMOVQ\tDI, (0*0)(SP)\t\\\n\tMOVQ\tSI, (1*8)(SP)\t\\\n\tMOVQ\tBP, (2*8)(SP)\t\\\n\tMOVQ\tBX, (3*8)(SP)\t\\\n\tMOVQ\tR12, (4*8)(SP)\t\\\n\tMOVQ\tR13, (5*8)(SP)\t\\\n\tMOVQ\tR14, (6*8)(SP)\t\\\n\tMOVQ\tR15, (7*8)(SP)\t\\\n\tMOVUPS\tX6, (8*8)(SP)\t\\\n\tMOVUPS\tX7, (10*8)(SP)\t\\\n\tMOVUPS\tX8, (12*8)(SP)\t\\\n\tMOVUPS\tX9, (14*8)(SP)\t\\\n\tMOVUPS\tX10, (16*8)(SP)\t\\\n\tMOVUPS\tX11, (18*8)(SP)\t\\\n\tMOVUPS\tX12, (20*8)(SP)\t\\\n\tMOVUPS\tX13, (22*8)(SP)\t\\\n\tMOVUPS\tX14, (24*8)(SP)\t\\\n\tMOVUPS\tX15, (26*8)(SP)\n\n#define POP_REGS_HOST_TO_ABI0()\t\\\n\tMOVQ\t(0*0)(SP), DI\t\\\n\tMOVQ\t(1*8)(SP), SI\t\\\n\tMOVQ\t(2*8)(SP), BP\t\\\n\tMOVQ\t(3*8)(SP), BX\t\\\n\tMOVQ\t(4*8)(SP), R12\t\\\n\tMOVQ\t(5*8)(SP), R13\t\\\n\tMOVQ\t(6*8)(SP), R14\t\\\n\tMOVQ\t(7*8)(SP), R15\t\\\n\tMOVUPS\t(8*8)(SP), X6\t\\\n\tMOVUPS\t(10*8)(SP), X7\t\\\n\tMOVUPS\t(12*8)(SP), X8\t\\\n\tMOVUPS\t(14*8)(SP), X9\t\\\n\tMOVUPS\t(16*8)(SP), X10\t\\\n\tMOVUPS\t(18*8)(SP), X11\t\\\n\tMOVUPS\t(20*8)(SP), X12\t\\\n\tMOVUPS\t(22*8)(SP), X13\t\\\n\tMOVUPS\t(24*8)(SP), X14\t\\\n\tMOVUPS\t(26*8)(SP), X15\t\\\n\tADJSP\t$-(REGS_HOST_TO_ABI0_STACK - 8)\t\\\n\tPOPFQ\n\n#else\n// SysV ABI\n\n#define REGS_HOST_TO_ABI0_STACK (6*8)\n\n// SysV MXCSR matches the Go ABI, so we don't have to set that,\n// and Go doesn't modify it, so we don't have to save it.\n// Both SysV and Go require DF to be cleared, so that's already clear.\n// The SysV and Go frame pointer conventions are compatible.\n#define PUSH_REGS_HOST_TO_ABI0()\t\\\n\tADJSP\t$(REGS_HOST_TO_ABI0_STACK)\t\\\n\tMOVQ\tBP, (5*8)(SP)\t\\\n\tLEAQ\t(5*8)(SP), BP\t\\\n\tMOVQ\tBX, (0*8)(SP)\t\\\n\tMOVQ\tR12, (1*8)(SP)\t\\\n\tMOVQ\tR13, (2*8)(SP)\t\\\n\tMOVQ\tR14, (3*8)(SP)\t\\\n\tMOVQ\tR15, (4*8)(SP)\n\n#define POP_REGS_HOST_TO_ABI0()\t\\\n\tMOVQ\t(0*8)(SP), BX\t\\\n\tMOVQ\t(1*8)(SP), R12\t\\\n\tMOVQ\t(2*8)(SP), R13\t\\\n\tMOVQ\t(3*8)(SP), R14\t\\\n\tMOVQ\t(4*8)(SP), R15\t\\\n\tMOVQ\t(5*8)(SP), BP\t\\\n\tADJSP\t$-(REGS_HOST_TO_ABI0_STACK)\n\n#endif\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/abi_arm64.h",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Macros for transitioning from the host ABI to Go ABI0.\n//\n// These macros save and restore the callee-saved registers\n// from the stack, but they don't adjust stack pointer, so\n// the user should prepare stack space in advance.\n// SAVE_R19_TO_R28(offset) saves R19 ~ R28 to the stack space\n// of ((offset)+0*8)(RSP) ~ ((offset)+9*8)(RSP).\n//\n// SAVE_F8_TO_F15(offset) saves F8 ~ F15 to the stack space\n// of ((offset)+0*8)(RSP) ~ ((offset)+7*8)(RSP).\n//\n// R29 is not saved because Go will save and restore it.\n\n#define SAVE_R19_TO_R28(offset) \\\n\tSTP\t(R19, R20), ((offset)+0*8)(RSP) \\\n\tSTP\t(R21, R22), ((offset)+2*8)(RSP) \\\n\tSTP\t(R23, R24), ((offset)+4*8)(RSP) \\\n\tSTP\t(R25, R26), ((offset)+6*8)(RSP) \\\n\tSTP\t(R27, g), ((offset)+8*8)(RSP)\n#define RESTORE_R19_TO_R28(offset) \\\n\tLDP\t((offset)+0*8)(RSP), (R19, R20) \\\n\tLDP\t((offset)+2*8)(RSP), (R21, R22) \\\n\tLDP\t((offset)+4*8)(RSP), (R23, R24) \\\n\tLDP\t((offset)+6*8)(RSP), (R25, R26) \\\n\tLDP\t((offset)+8*8)(RSP), (R27, g) /* R28 */\n#define SAVE_F8_TO_F15(offset) \\\n\tFSTPD\t(F8, F9), ((offset)+0*8)(RSP) \\\n\tFSTPD\t(F10, F11), ((offset)+2*8)(RSP) \\\n\tFSTPD\t(F12, F13), ((offset)+4*8)(RSP) \\\n\tFSTPD\t(F14, F15), ((offset)+6*8)(RSP)\n#define RESTORE_F8_TO_F15(offset) \\\n\tFLDPD\t((offset)+0*8)(RSP), (F8, F9) \\\n\tFLDPD\t((offset)+2*8)(RSP), (F10, F11) \\\n\tFLDPD\t((offset)+4*8)(RSP), (F12, F13) \\\n\tFLDPD\t((offset)+6*8)(RSP), (F14, F15)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/asm_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n#include \"abi_amd64.h\"\n\n// Called by C code generated by cmd/cgo.\n// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)\n// Saves C callee-saved registers and calls cgocallback with three arguments.\n// fn is the PC of a func(a unsafe.Pointer) function.\n// This signature is known to SWIG, so we can't change it.\nTEXT crosscall2(SB), NOSPLIT, $0-0\n\tPUSH_REGS_HOST_TO_ABI0()\n\n\t// Make room for arguments to cgocallback.\n\tADJSP $0x18\n\n#ifndef GOOS_windows\n\tMOVQ DI, 0x0(SP) // fn\n\tMOVQ SI, 0x8(SP) // arg\n\n\t// Skip n in DX.\n\tMOVQ CX, 0x10(SP) // ctxt\n\n#else\n\tMOVQ CX, 0x0(SP) // fn\n\tMOVQ DX, 0x8(SP) // arg\n\n\t// Skip n in R8.\n\tMOVQ R9, 0x10(SP) // ctxt\n\n#endif\n\n\tCALL runtime·cgocallback(SB)\n\n\tADJSP $-0x18\n\tPOP_REGS_HOST_TO_ABI0()\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm64.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n#include \"abi_arm64.h\"\n\n// Called by C code generated by cmd/cgo.\n// func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr)\n// Saves C callee-saved registers and calls cgocallback with three arguments.\n// fn is the PC of a func(a unsafe.Pointer) function.\nTEXT crosscall2(SB), NOSPLIT|NOFRAME, $0\n/*\n * We still need to save all callee save register as before, and then\n *  push 3 args for fn (R0, R1, R3), skipping R2.\n * Also note that at procedure entry in gc world, 8(RSP) will be the\n *  first arg.\n */\n\tSUB  $(8*24), RSP\n\tSTP  (R0, R1), (8*1)(RSP)\n\tMOVD R3, (8*3)(RSP)\n\n\tSAVE_R19_TO_R28(8*4)\n\tSAVE_F8_TO_F15(8*14)\n\tSTP (R29, R30), (8*22)(RSP)\n\n\t// Initialize Go ABI environment\n\tBL runtime·load_g(SB)\n\tBL runtime·cgocallback(SB)\n\n\tRESTORE_R19_TO_R28(8*4)\n\tRESTORE_F8_TO_F15(8*14)\n\tLDP (8*22)(RSP), (R29, R30)\n\n\tADD $(8*24), RSP\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/callbacks.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage fakecgo\n\nimport (\n\t_ \"unsafe\"\n)\n\n// TODO: decide if we need _runtime_cgo_panic_internal\n\n//go:linkname x_cgo_init_trampoline x_cgo_init_trampoline\n//go:linkname _cgo_init _cgo_init\nvar x_cgo_init_trampoline byte\nvar _cgo_init = &x_cgo_init_trampoline\n\n// Creates a new system thread without updating any Go state.\n//\n// This method is invoked during shared library loading to create a new OS\n// thread to perform the runtime initialization. This method is similar to\n// _cgo_sys_thread_start except that it doesn't update any Go state.\n\n//go:linkname x_cgo_thread_start_trampoline x_cgo_thread_start_trampoline\n//go:linkname _cgo_thread_start _cgo_thread_start\nvar x_cgo_thread_start_trampoline byte\nvar _cgo_thread_start = &x_cgo_thread_start_trampoline\n\n// Notifies that the runtime has been initialized.\n//\n// We currently block at every CGO entry point (via _cgo_wait_runtime_init_done)\n// to ensure that the runtime has been initialized before the CGO call is\n// executed. This is necessary for shared libraries where we kickoff runtime\n// initialization in a separate thread and return without waiting for this\n// thread to complete the init.\n\n//go:linkname x_cgo_notify_runtime_init_done_trampoline x_cgo_notify_runtime_init_done_trampoline\n//go:linkname _cgo_notify_runtime_init_done _cgo_notify_runtime_init_done\nvar x_cgo_notify_runtime_init_done_trampoline byte\nvar _cgo_notify_runtime_init_done = &x_cgo_notify_runtime_init_done_trampoline\n\n// Indicates whether a dummy thread key has been created or not.\n//\n// When calling go exported function from C, we register a destructor\n// callback, for a dummy thread key, by using pthread_key_create.\n\n//go:linkname _cgo_pthread_key_created _cgo_pthread_key_created\nvar x_cgo_pthread_key_created uintptr\nvar _cgo_pthread_key_created = &x_cgo_pthread_key_created\n\n// Set the x_crosscall2_ptr C function pointer variable point to crosscall2.\n// It's for the runtime package to call at init time.\nfunc set_crosscall2() {\n\t// nothing needs to be done here for fakecgo\n\t// because it's possible to just call cgocallback directly\n}\n\n//go:linkname _set_crosscall2 runtime.set_crosscall2\nvar _set_crosscall2 = set_crosscall2\n\n// Store the g into the thread-specific value.\n// So that pthread_key_destructor will dropm when the thread is exiting.\n\n//go:linkname x_cgo_bindm_trampoline x_cgo_bindm_trampoline\n//go:linkname _cgo_bindm _cgo_bindm\nvar x_cgo_bindm_trampoline byte\nvar _cgo_bindm = &x_cgo_bindm_trampoline\n\n// TODO: decide if we need x_cgo_set_context_function\n// TODO: decide if we need _cgo_yield\n\nvar (\n\t// In Go 1.20 the race detector was rewritten to pure Go\n\t// on darwin. This means that when CGO_ENABLED=0 is set\n\t// fakecgo is built with race detector code. This is not\n\t// good since this code is pretending to be C. The go:norace\n\t// pragma is not enough, since it only applies to the native\n\t// ABIInternal function. The ABIO wrapper (which is necessary,\n\t// since all references to text symbols from assembly will use it)\n\t// does not inherit the go:norace pragma, so it will still be\n\t// instrumented by the race detector.\n\t//\n\t// To circumvent this issue, using closure calls in the\n\t// assembly, which forces the compiler to use the ABIInternal\n\t// native implementation (which has go:norace) instead.\n\tthreadentry_call        = threadentry\n\tx_cgo_init_call         = x_cgo_init\n\tx_cgo_setenv_call       = x_cgo_setenv\n\tx_cgo_unsetenv_call     = x_cgo_unsetenv\n\tx_cgo_thread_start_call = x_cgo_thread_start\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/doc.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\n// Package fakecgo implements the Cgo runtime (runtime/cgo) entirely in Go.\n// This allows code that calls into C to function properly when CGO_ENABLED=0.\n//\n// # Goals\n//\n// fakecgo attempts to replicate the same naming structure as in the runtime.\n// For example, functions that have the prefix \"gcc_*\" are named \"go_*\".\n// This makes it easier to port other GOOSs and GOARCHs as well as to keep\n// it in sync with runtime/cgo.\n//\n// # Support\n//\n// Currently, fakecgo only supports macOS on amd64 & arm64. It also cannot\n// be used with -buildmode=c-archive because that requires special initialization\n// that fakecgo does not implement at the moment.\n//\n// # Usage\n//\n// Using fakecgo is easy just import _ \"github.com/ebitengine/purego\" and then\n// set the environment variable CGO_ENABLED=0.\n// The recommended usage for fakecgo is to prefer using runtime/cgo if possible\n// but if cross-compiling or fast build times are important fakecgo is available.\n// Purego will pick which ever Cgo runtime is available and prefer the one that\n// comes with Go (runtime/cgo).\npackage fakecgo\n\n//go:generate go run gen.go\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/freebsd.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build freebsd && !cgo\n\npackage fakecgo\n\nimport _ \"unsafe\" // for go:linkname\n\n// Supply environ and __progname, because we don't\n// link against the standard FreeBSD crt0.o and the\n// libc dynamic library needs them.\n\n// Note: when building with cross-compiling or CGO_ENABLED=0, add\n// the following argument to `go` so that these symbols are defined by\n// making fakecgo the Cgo.\n//   -gcflags=\"github.com/ebitengine/purego/internal/fakecgo=-std\"\n\n//go:linkname _environ environ\n//go:linkname _progname __progname\n\n//go:cgo_export_dynamic environ\n//go:cgo_export_dynamic __progname\n\nvar _environ uintptr\nvar _progname uintptr\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin_amd64.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo\n\npackage fakecgo\n\nimport \"unsafe\"\n\n//go:nosplit\n//go:norace\nfunc _cgo_sys_thread_start(ts *ThreadStart) {\n\tvar attr pthread_attr_t\n\tvar ign, oset sigset_t\n\tvar p pthread_t\n\tvar size size_t\n\tvar err int\n\n\tsigfillset(&ign)\n\tpthread_sigmask(SIG_SETMASK, &ign, &oset)\n\n\tsize = pthread_get_stacksize_np(pthread_self())\n\tpthread_attr_init(&attr)\n\tpthread_attr_setstacksize(&attr, size)\n\t// Leave stacklo=0 and set stackhi=size; mstart will do the rest.\n\tts.g.stackhi = uintptr(size)\n\n\terr = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts)\n\n\tpthread_sigmask(SIG_SETMASK, &oset, nil)\n\n\tif err != 0 {\n\t\tprint(\"fakecgo: pthread_create failed: \")\n\t\tprintln(err)\n\t\tabort()\n\t}\n}\n\n// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function\n//\n//go:linkname x_threadentry_trampoline threadentry_trampoline\nvar x_threadentry_trampoline byte\nvar threadentry_trampolineABI0 = &x_threadentry_trampoline\n\n//go:nosplit\n//go:norace\nfunc threadentry(v unsafe.Pointer) unsafe.Pointer {\n\tts := *(*ThreadStart)(v)\n\tfree(v)\n\n\tsetg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g)))\n\n\t// faking funcs in go is a bit a... involved - but the following works :)\n\tfn := uintptr(unsafe.Pointer(&ts.fn))\n\t(*(*func())(unsafe.Pointer(&fn)))()\n\n\treturn nil\n}\n\n// here we will store a pointer to the provided setg func\nvar setg_func uintptr\n\n//go:nosplit\n//go:norace\nfunc x_cgo_init(g *G, setg uintptr) {\n\tvar size size_t\n\n\tsetg_func = setg\n\n\tsize = pthread_get_stacksize_np(pthread_self())\n\tg.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096))\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin_arm64.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo\n\npackage fakecgo\n\nimport \"unsafe\"\n\n//go:nosplit\n//go:norace\nfunc _cgo_sys_thread_start(ts *ThreadStart) {\n\tvar attr pthread_attr_t\n\tvar ign, oset sigset_t\n\tvar p pthread_t\n\tvar size size_t\n\tvar err int\n\n\tsigfillset(&ign)\n\tpthread_sigmask(SIG_SETMASK, &ign, &oset)\n\n\tsize = pthread_get_stacksize_np(pthread_self())\n\tpthread_attr_init(&attr)\n\tpthread_attr_setstacksize(&attr, size)\n\t// Leave stacklo=0 and set stackhi=size; mstart will do the rest.\n\tts.g.stackhi = uintptr(size)\n\n\terr = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts)\n\n\tpthread_sigmask(SIG_SETMASK, &oset, nil)\n\n\tif err != 0 {\n\t\tprint(\"fakecgo: pthread_create failed: \")\n\t\tprintln(err)\n\t\tabort()\n\t}\n}\n\n// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function\n//\n//go:linkname x_threadentry_trampoline threadentry_trampoline\nvar x_threadentry_trampoline byte\nvar threadentry_trampolineABI0 = &x_threadentry_trampoline\n\n//go:nosplit\n//go:norace\nfunc threadentry(v unsafe.Pointer) unsafe.Pointer {\n\tts := *(*ThreadStart)(v)\n\tfree(v)\n\n\t// TODO: support ios\n\t//#if TARGET_OS_IPHONE\n\t//\tdarwin_arm_init_thread_exception_port();\n\t//#endif\n\tsetg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g)))\n\n\t// faking funcs in go is a bit a... involved - but the following works :)\n\tfn := uintptr(unsafe.Pointer(&ts.fn))\n\t(*(*func())(unsafe.Pointer(&fn)))()\n\n\treturn nil\n}\n\n// here we will store a pointer to the provided setg func\nvar setg_func uintptr\n\n// x_cgo_init(G *g, void (*setg)(void*)) (runtime/cgo/gcc_linux_amd64.c)\n// This get's called during startup, adjusts stacklo, and provides a pointer to setg_gcc for us\n// Additionally, if we set _cgo_init to non-null, go won't do it's own TLS setup\n// This function can't be go:systemstack since go is not in a state where the systemcheck would work.\n//\n//go:nosplit\n//go:norace\nfunc x_cgo_init(g *G, setg uintptr) {\n\tvar size size_t\n\n\tsetg_func = setg\n\tsize = pthread_get_stacksize_np(pthread_self())\n\tg.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096))\n\n\t//TODO: support ios\n\t//#if TARGET_OS_IPHONE\n\t//\tdarwin_arm_init_mach_exception_handler();\n\t//\tdarwin_arm_init_thread_exception_port();\n\t//\tinit_working_dir();\n\t//#endif\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd_amd64.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo\n\npackage fakecgo\n\nimport \"unsafe\"\n\n//go:nosplit\nfunc _cgo_sys_thread_start(ts *ThreadStart) {\n\tvar attr pthread_attr_t\n\tvar ign, oset sigset_t\n\tvar p pthread_t\n\tvar size size_t\n\tvar err int\n\n\t//fprintf(stderr, \"runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\\n\", ts->fn, ts->g); // debug\n\tsigfillset(&ign)\n\tpthread_sigmask(SIG_SETMASK, &ign, &oset)\n\n\tpthread_attr_init(&attr)\n\tpthread_attr_getstacksize(&attr, &size)\n\t// Leave stacklo=0 and set stackhi=size; mstart will do the rest.\n\tts.g.stackhi = uintptr(size)\n\n\terr = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts)\n\n\tpthread_sigmask(SIG_SETMASK, &oset, nil)\n\n\tif err != 0 {\n\t\tprint(\"fakecgo: pthread_create failed: \")\n\t\tprintln(err)\n\t\tabort()\n\t}\n}\n\n// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function\n//\n//go:linkname x_threadentry_trampoline threadentry_trampoline\nvar x_threadentry_trampoline byte\nvar threadentry_trampolineABI0 = &x_threadentry_trampoline\n\n//go:nosplit\nfunc threadentry(v unsafe.Pointer) unsafe.Pointer {\n\tts := *(*ThreadStart)(v)\n\tfree(v)\n\n\tsetg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g)))\n\n\t// faking funcs in go is a bit a... involved - but the following works :)\n\tfn := uintptr(unsafe.Pointer(&ts.fn))\n\t(*(*func())(unsafe.Pointer(&fn)))()\n\n\treturn nil\n}\n\n// here we will store a pointer to the provided setg func\nvar setg_func uintptr\n\n//go:nosplit\nfunc x_cgo_init(g *G, setg uintptr) {\n\tvar size size_t\n\tvar attr *pthread_attr_t\n\n\t/* The memory sanitizer distributed with versions of clang\n\t   before 3.8 has a bug: if you call mmap before malloc, mmap\n\t   may return an address that is later overwritten by the msan\n\t   library.  Avoid this problem by forcing a call to malloc\n\t   here, before we ever call malloc.\n\n\t   This is only required for the memory sanitizer, so it's\n\t   unfortunate that we always run it.  It should be possible\n\t   to remove this when we no longer care about versions of\n\t   clang before 3.8.  The test for this is\n\t   misc/cgo/testsanitizers.\n\n\t   GCC works hard to eliminate a seemingly unnecessary call to\n\t   malloc, so we actually use the memory we allocate.  */\n\n\tsetg_func = setg\n\tattr = (*pthread_attr_t)(malloc(unsafe.Sizeof(*attr)))\n\tif attr == nil {\n\t\tprintln(\"fakecgo: malloc failed\")\n\t\tabort()\n\t}\n\tpthread_attr_init(attr)\n\tpthread_attr_getstacksize(attr, &size)\n\t// runtime/cgo uses __builtin_frame_address(0) instead of `uintptr(unsafe.Pointer(&size))`\n\t// but this should be OK since we are taking the address of the first variable in this function.\n\tg.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096\n\tpthread_attr_destroy(attr)\n\tfree(unsafe.Pointer(attr))\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd_arm64.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo\n\npackage fakecgo\n\nimport \"unsafe\"\n\n//go:nosplit\nfunc _cgo_sys_thread_start(ts *ThreadStart) {\n\tvar attr pthread_attr_t\n\tvar ign, oset sigset_t\n\tvar p pthread_t\n\tvar size size_t\n\tvar err int\n\n\t// fprintf(stderr, \"runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\\n\", ts->fn, ts->g); // debug\n\tsigfillset(&ign)\n\tpthread_sigmask(SIG_SETMASK, &ign, &oset)\n\n\tpthread_attr_init(&attr)\n\tpthread_attr_getstacksize(&attr, &size)\n\t// Leave stacklo=0 and set stackhi=size; mstart will do the rest.\n\tts.g.stackhi = uintptr(size)\n\n\terr = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts)\n\n\tpthread_sigmask(SIG_SETMASK, &oset, nil)\n\n\tif err != 0 {\n\t\tprint(\"fakecgo: pthread_create failed: \")\n\t\tprintln(err)\n\t\tabort()\n\t}\n}\n\n// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function\n//\n//go:linkname x_threadentry_trampoline threadentry_trampoline\nvar x_threadentry_trampoline byte\nvar threadentry_trampolineABI0 = &x_threadentry_trampoline\n\n//go:nosplit\nfunc threadentry(v unsafe.Pointer) unsafe.Pointer {\n\tts := *(*ThreadStart)(v)\n\tfree(v)\n\n\tsetg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g)))\n\n\t// faking funcs in go is a bit a... involved - but the following works :)\n\tfn := uintptr(unsafe.Pointer(&ts.fn))\n\t(*(*func())(unsafe.Pointer(&fn)))()\n\n\treturn nil\n}\n\n// here we will store a pointer to the provided setg func\nvar setg_func uintptr\n\n// x_cgo_init(G *g, void (*setg)(void*)) (runtime/cgo/gcc_linux_amd64.c)\n// This get's called during startup, adjusts stacklo, and provides a pointer to setg_gcc for us\n// Additionally, if we set _cgo_init to non-null, go won't do it's own TLS setup\n// This function can't be go:systemstack since go is not in a state where the systemcheck would work.\n//\n//go:nosplit\nfunc x_cgo_init(g *G, setg uintptr) {\n\tvar size size_t\n\tvar attr *pthread_attr_t\n\n\t/* The memory sanitizer distributed with versions of clang\n\t   before 3.8 has a bug: if you call mmap before malloc, mmap\n\t   may return an address that is later overwritten by the msan\n\t   library.  Avoid this problem by forcing a call to malloc\n\t   here, before we ever call malloc.\n\n\t   This is only required for the memory sanitizer, so it's\n\t   unfortunate that we always run it.  It should be possible\n\t   to remove this when we no longer care about versions of\n\t   clang before 3.8.  The test for this is\n\t   misc/cgo/testsanitizers.\n\n\t   GCC works hard to eliminate a seemingly unnecessary call to\n\t   malloc, so we actually use the memory we allocate.  */\n\n\tsetg_func = setg\n\tattr = (*pthread_attr_t)(malloc(unsafe.Sizeof(*attr)))\n\tif attr == nil {\n\t\tprintln(\"fakecgo: malloc failed\")\n\t\tabort()\n\t}\n\tpthread_attr_init(attr)\n\tpthread_attr_getstacksize(attr, &size)\n\tg.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096\n\tpthread_attr_destroy(attr)\n\tfree(unsafe.Pointer(attr))\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage fakecgo\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tpthread_g pthread_key_t\n\n\truntime_init_cond = PTHREAD_COND_INITIALIZER\n\truntime_init_mu   = PTHREAD_MUTEX_INITIALIZER\n\truntime_init_done int\n)\n\n//go:nosplit\nfunc x_cgo_notify_runtime_init_done() {\n\tpthread_mutex_lock(&runtime_init_mu)\n\truntime_init_done = 1\n\tpthread_cond_broadcast(&runtime_init_cond)\n\tpthread_mutex_unlock(&runtime_init_mu)\n}\n\n// Store the g into a thread-specific value associated with the pthread key pthread_g.\n// And pthread_key_destructor will dropm when the thread is exiting.\nfunc x_cgo_bindm(g unsafe.Pointer) {\n\t// We assume this will always succeed, otherwise, there might be extra M leaking,\n\t// when a C thread exits after a cgo call.\n\t// We only invoke this function once per thread in runtime.needAndBindM,\n\t// and the next calls just reuse the bound m.\n\tpthread_setspecific(pthread_g, g)\n}\n\n// _cgo_try_pthread_create retries pthread_create if it fails with\n// EAGAIN.\n//\n//go:nosplit\n//go:norace\nfunc _cgo_try_pthread_create(thread *pthread_t, attr *pthread_attr_t, pfn unsafe.Pointer, arg *ThreadStart) int {\n\tvar ts syscall.Timespec\n\t// tries needs to be the same type as syscall.Timespec.Nsec\n\t// but the fields are int32 on 32bit and int64 on 64bit.\n\t// tries is assigned to syscall.Timespec.Nsec in order to match its type.\n\ttries := ts.Nsec\n\tvar err int\n\n\tfor tries = 0; tries < 20; tries++ {\n\t\t// inlined this call because it ran out of stack when inlining was disabled\n\t\terr = int(call5(pthread_createABI0, uintptr(unsafe.Pointer(thread)), uintptr(unsafe.Pointer(attr)), uintptr(pfn), uintptr(unsafe.Pointer(arg)), 0))\n\t\tif err == 0 {\n\t\t\t// inlined this call because it ran out of stack when inlining was disabled\n\t\t\tcall5(pthread_detachABI0, uintptr(*thread), 0, 0, 0, 0)\n\t\t\treturn 0\n\t\t}\n\t\tif err != int(syscall.EAGAIN) {\n\t\t\treturn err\n\t\t}\n\t\tts.Sec = 0\n\t\tts.Nsec = (tries + 1) * 1000 * 1000 // Milliseconds.\n\t\t// inlined this call because it ran out of stack when inlining was disabled\n\t\tcall5(nanosleepABI0, uintptr(unsafe.Pointer(&ts)), 0, 0, 0, 0)\n\t}\n\treturn int(syscall.EAGAIN)\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux_amd64.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo\n\npackage fakecgo\n\nimport \"unsafe\"\n\n//go:nosplit\nfunc _cgo_sys_thread_start(ts *ThreadStart) {\n\tvar attr pthread_attr_t\n\tvar ign, oset sigset_t\n\tvar p pthread_t\n\tvar size size_t\n\tvar err int\n\n\t//fprintf(stderr, \"runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\\n\", ts->fn, ts->g); // debug\n\tsigfillset(&ign)\n\tpthread_sigmask(SIG_SETMASK, &ign, &oset)\n\n\tpthread_attr_init(&attr)\n\tpthread_attr_getstacksize(&attr, &size)\n\t// Leave stacklo=0 and set stackhi=size; mstart will do the rest.\n\tts.g.stackhi = uintptr(size)\n\n\terr = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts)\n\n\tpthread_sigmask(SIG_SETMASK, &oset, nil)\n\n\tif err != 0 {\n\t\tprint(\"fakecgo: pthread_create failed: \")\n\t\tprintln(err)\n\t\tabort()\n\t}\n}\n\n// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function\n//\n//go:linkname x_threadentry_trampoline threadentry_trampoline\nvar x_threadentry_trampoline byte\nvar threadentry_trampolineABI0 = &x_threadentry_trampoline\n\n//go:nosplit\nfunc threadentry(v unsafe.Pointer) unsafe.Pointer {\n\tts := *(*ThreadStart)(v)\n\tfree(v)\n\n\tsetg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g)))\n\n\t// faking funcs in go is a bit a... involved - but the following works :)\n\tfn := uintptr(unsafe.Pointer(&ts.fn))\n\t(*(*func())(unsafe.Pointer(&fn)))()\n\n\treturn nil\n}\n\n// here we will store a pointer to the provided setg func\nvar setg_func uintptr\n\n//go:nosplit\nfunc x_cgo_init(g *G, setg uintptr) {\n\tvar size size_t\n\tvar attr *pthread_attr_t\n\n\t/* The memory sanitizer distributed with versions of clang\n\t   before 3.8 has a bug: if you call mmap before malloc, mmap\n\t   may return an address that is later overwritten by the msan\n\t   library.  Avoid this problem by forcing a call to malloc\n\t   here, before we ever call malloc.\n\n\t   This is only required for the memory sanitizer, so it's\n\t   unfortunate that we always run it.  It should be possible\n\t   to remove this when we no longer care about versions of\n\t   clang before 3.8.  The test for this is\n\t   misc/cgo/testsanitizers.\n\n\t   GCC works hard to eliminate a seemingly unnecessary call to\n\t   malloc, so we actually use the memory we allocate.  */\n\n\tsetg_func = setg\n\tattr = (*pthread_attr_t)(malloc(unsafe.Sizeof(*attr)))\n\tif attr == nil {\n\t\tprintln(\"fakecgo: malloc failed\")\n\t\tabort()\n\t}\n\tpthread_attr_init(attr)\n\tpthread_attr_getstacksize(attr, &size)\n\t// runtime/cgo uses __builtin_frame_address(0) instead of `uintptr(unsafe.Pointer(&size))`\n\t// but this should be OK since we are taking the address of the first variable in this function.\n\tg.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096\n\tpthread_attr_destroy(attr)\n\tfree(unsafe.Pointer(attr))\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux_arm64.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo\n\npackage fakecgo\n\nimport \"unsafe\"\n\n//go:nosplit\nfunc _cgo_sys_thread_start(ts *ThreadStart) {\n\tvar attr pthread_attr_t\n\tvar ign, oset sigset_t\n\tvar p pthread_t\n\tvar size size_t\n\tvar err int\n\n\t//fprintf(stderr, \"runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\\n\", ts->fn, ts->g); // debug\n\tsigfillset(&ign)\n\tpthread_sigmask(SIG_SETMASK, &ign, &oset)\n\n\tpthread_attr_init(&attr)\n\tpthread_attr_getstacksize(&attr, &size)\n\t// Leave stacklo=0 and set stackhi=size; mstart will do the rest.\n\tts.g.stackhi = uintptr(size)\n\n\terr = _cgo_try_pthread_create(&p, &attr, unsafe.Pointer(threadentry_trampolineABI0), ts)\n\n\tpthread_sigmask(SIG_SETMASK, &oset, nil)\n\n\tif err != 0 {\n\t\tprint(\"fakecgo: pthread_create failed: \")\n\t\tprintln(err)\n\t\tabort()\n\t}\n}\n\n// threadentry_trampolineABI0 maps the C ABI to Go ABI then calls the Go function\n//\n//go:linkname x_threadentry_trampoline threadentry_trampoline\nvar x_threadentry_trampoline byte\nvar threadentry_trampolineABI0 = &x_threadentry_trampoline\n\n//go:nosplit\nfunc threadentry(v unsafe.Pointer) unsafe.Pointer {\n\tts := *(*ThreadStart)(v)\n\tfree(v)\n\n\tsetg_trampoline(setg_func, uintptr(unsafe.Pointer(ts.g)))\n\n\t// faking funcs in go is a bit a... involved - but the following works :)\n\tfn := uintptr(unsafe.Pointer(&ts.fn))\n\t(*(*func())(unsafe.Pointer(&fn)))()\n\n\treturn nil\n}\n\n// here we will store a pointer to the provided setg func\nvar setg_func uintptr\n\n// x_cgo_init(G *g, void (*setg)(void*)) (runtime/cgo/gcc_linux_amd64.c)\n// This get's called during startup, adjusts stacklo, and provides a pointer to setg_gcc for us\n// Additionally, if we set _cgo_init to non-null, go won't do it's own TLS setup\n// This function can't be go:systemstack since go is not in a state where the systemcheck would work.\n//\n//go:nosplit\nfunc x_cgo_init(g *G, setg uintptr) {\n\tvar size size_t\n\tvar attr *pthread_attr_t\n\n\t/* The memory sanitizer distributed with versions of clang\n\t   before 3.8 has a bug: if you call mmap before malloc, mmap\n\t   may return an address that is later overwritten by the msan\n\t   library.  Avoid this problem by forcing a call to malloc\n\t   here, before we ever call malloc.\n\n\t   This is only required for the memory sanitizer, so it's\n\t   unfortunate that we always run it.  It should be possible\n\t   to remove this when we no longer care about versions of\n\t   clang before 3.8.  The test for this is\n\t   misc/cgo/testsanitizers.\n\n\t   GCC works hard to eliminate a seemingly unnecessary call to\n\t   malloc, so we actually use the memory we allocate.  */\n\n\tsetg_func = setg\n\tattr = (*pthread_attr_t)(malloc(unsafe.Sizeof(*attr)))\n\tif attr == nil {\n\t\tprintln(\"fakecgo: malloc failed\")\n\t\tabort()\n\t}\n\tpthread_attr_init(attr)\n\tpthread_attr_getstacksize(attr, &size)\n\tg.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096\n\tpthread_attr_destroy(attr)\n\tfree(unsafe.Pointer(attr))\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_setenv.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage fakecgo\n\n//go:nosplit\n//go:norace\nfunc x_cgo_setenv(arg *[2]*byte) {\n\tsetenv(arg[0], arg[1], 1)\n}\n\n//go:nosplit\n//go:norace\nfunc x_cgo_unsetenv(arg *[1]*byte) {\n\tunsetenv(arg[0])\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/go_util.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage fakecgo\n\nimport \"unsafe\"\n\n// _cgo_thread_start is split into three parts in cgo since only one part is system dependent (keep it here for easier handling)\n\n// _cgo_thread_start(ThreadStart *arg) (runtime/cgo/gcc_util.c)\n// This get's called instead of the go code for creating new threads\n// -> pthread_* stuff is used, so threads are setup correctly for C\n// If this is missing, TLS is only setup correctly on thread 1!\n// This function should be go:systemstack instead of go:nosplit (but that requires runtime)\n//\n//go:nosplit\n//go:norace\nfunc x_cgo_thread_start(arg *ThreadStart) {\n\tvar ts *ThreadStart\n\t// Make our own copy that can persist after we return.\n\t//\t_cgo_tsan_acquire();\n\tts = (*ThreadStart)(malloc(unsafe.Sizeof(*ts)))\n\t//\t_cgo_tsan_release();\n\tif ts == nil {\n\t\tprintln(\"fakecgo: out of memory in thread_start\")\n\t\tabort()\n\t}\n\t// *ts = *arg would cause a writebarrier so copy using slices\n\ts1 := unsafe.Slice((*uintptr)(unsafe.Pointer(ts)), unsafe.Sizeof(*ts)/8)\n\ts2 := unsafe.Slice((*uintptr)(unsafe.Pointer(arg)), unsafe.Sizeof(*arg)/8)\n\tfor i := range s2 {\n\t\ts1[i] = s2[i]\n\t}\n\t_cgo_sys_thread_start(ts) // OS-dependent half\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/iscgo.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo && (darwin || freebsd || linux)\n\n// The runtime package contains an uninitialized definition\n// for runtime·iscgo. Override it to tell the runtime we're here.\n// There are various function pointers that should be set too,\n// but those depend on dynamic linker magic to get initialized\n// correctly, and sometimes they break. This variable is a\n// backup: it depends only on old C style static linking rules.\n\npackage fakecgo\n\nimport _ \"unsafe\" // for go:linkname\n\n//go:linkname _iscgo runtime.iscgo\nvar _iscgo bool = true\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage fakecgo\n\ntype (\n\tsize_t uintptr\n\t// Sources:\n\t// Darwin (32 bytes) - https://github.com/apple/darwin-xnu/blob/2ff845c2e033bd0ff64b5b6aa6063a1f8f65aa32/bsd/sys/_types.h#L74\n\t// FreeBSD (32 bytes) - https://github.com/DoctorWkt/xv6-freebsd/blob/d2a294c2a984baed27676068b15ed9a29b06ab6f/include/signal.h#L98C9-L98C21\n\t// Linux (128 bytes) - https://github.com/torvalds/linux/blob/ab75170520d4964f3acf8bb1f91d34cbc650688e/arch/x86/include/asm/signal.h#L25\n\tsigset_t       [128]byte\n\tpthread_attr_t [64]byte\n\tpthread_t      int\n\tpthread_key_t  uint64\n)\n\n// for pthread_sigmask:\n\ntype sighow int32\n\nconst (\n\tSIG_BLOCK   sighow = 0\n\tSIG_UNBLOCK sighow = 1\n\tSIG_SETMASK sighow = 2\n)\n\ntype G struct {\n\tstacklo uintptr\n\tstackhi uintptr\n}\n\ntype ThreadStart struct {\n\tg   *G\n\ttls *uintptr\n\tfn  uintptr\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_darwin.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage fakecgo\n\ntype (\n\tpthread_mutex_t struct {\n\t\tsig    int64\n\t\topaque [56]byte\n\t}\n\tpthread_cond_t struct {\n\t\tsig    int64\n\t\topaque [40]byte\n\t}\n)\n\nvar (\n\tPTHREAD_COND_INITIALIZER  = pthread_cond_t{sig: 0x3CB0B1BB}\n\tPTHREAD_MUTEX_INITIALIZER = pthread_mutex_t{sig: 0x32AAABA7}\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_freebsd.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage fakecgo\n\ntype (\n\tpthread_cond_t  uintptr\n\tpthread_mutex_t uintptr\n)\n\nvar (\n\tPTHREAD_COND_INITIALIZER  = pthread_cond_t(0)\n\tPTHREAD_MUTEX_INITIALIZER = pthread_mutex_t(0)\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_linux.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage fakecgo\n\ntype (\n\tpthread_cond_t  [48]byte\n\tpthread_mutex_t [48]byte\n)\n\nvar (\n\tPTHREAD_COND_INITIALIZER  = pthread_cond_t{}\n\tPTHREAD_MUTEX_INITIALIZER = pthread_mutex_t{}\n)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/setenv.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage fakecgo\n\nimport _ \"unsafe\" // for go:linkname\n\n//go:linkname x_cgo_setenv_trampoline x_cgo_setenv_trampoline\n//go:linkname _cgo_setenv runtime._cgo_setenv\nvar x_cgo_setenv_trampoline byte\nvar _cgo_setenv = &x_cgo_setenv_trampoline\n\n//go:linkname x_cgo_unsetenv_trampoline x_cgo_unsetenv_trampoline\n//go:linkname _cgo_unsetenv runtime._cgo_unsetenv\nvar x_cgo_unsetenv_trampoline byte\nvar _cgo_unsetenv = &x_cgo_unsetenv_trampoline\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/symbols.go",
    "content": "// Code generated by 'go generate' with gen.go. DO NOT EDIT.\n\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage fakecgo\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// setg_trampoline calls setg with the G provided\nfunc setg_trampoline(setg uintptr, G uintptr)\n\n// call5 takes fn the C function and 5 arguments and calls the function with those arguments\nfunc call5(fn, a1, a2, a3, a4, a5 uintptr) uintptr\n\n//go:nosplit\nfunc malloc(size uintptr) unsafe.Pointer {\n\tret := call5(mallocABI0, uintptr(size), 0, 0, 0, 0)\n\t// this indirection is to avoid go vet complaining about possible misuse of unsafe.Pointer\n\treturn *(*unsafe.Pointer)(unsafe.Pointer(&ret))\n}\n\n//go:nosplit\nfunc free(ptr unsafe.Pointer) {\n\tcall5(freeABI0, uintptr(ptr), 0, 0, 0, 0)\n}\n\n//go:nosplit\nfunc setenv(name *byte, value *byte, overwrite int32) int32 {\n\treturn int32(call5(setenvABI0, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), uintptr(overwrite), 0, 0))\n}\n\n//go:nosplit\nfunc unsetenv(name *byte) int32 {\n\treturn int32(call5(unsetenvABI0, uintptr(unsafe.Pointer(name)), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc sigfillset(set *sigset_t) int32 {\n\treturn int32(call5(sigfillsetABI0, uintptr(unsafe.Pointer(set)), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc nanosleep(ts *syscall.Timespec, rem *syscall.Timespec) int32 {\n\treturn int32(call5(nanosleepABI0, uintptr(unsafe.Pointer(ts)), uintptr(unsafe.Pointer(rem)), 0, 0, 0))\n}\n\n//go:nosplit\nfunc abort() {\n\tcall5(abortABI0, 0, 0, 0, 0, 0)\n}\n\n//go:nosplit\nfunc pthread_attr_init(attr *pthread_attr_t) int32 {\n\treturn int32(call5(pthread_attr_initABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_create(thread *pthread_t, attr *pthread_attr_t, start unsafe.Pointer, arg unsafe.Pointer) int32 {\n\treturn int32(call5(pthread_createABI0, uintptr(unsafe.Pointer(thread)), uintptr(unsafe.Pointer(attr)), uintptr(start), uintptr(arg), 0))\n}\n\n//go:nosplit\nfunc pthread_detach(thread pthread_t) int32 {\n\treturn int32(call5(pthread_detachABI0, uintptr(thread), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_sigmask(how sighow, ign *sigset_t, oset *sigset_t) int32 {\n\treturn int32(call5(pthread_sigmaskABI0, uintptr(how), uintptr(unsafe.Pointer(ign)), uintptr(unsafe.Pointer(oset)), 0, 0))\n}\n\n//go:nosplit\nfunc pthread_self() pthread_t {\n\treturn pthread_t(call5(pthread_selfABI0, 0, 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_get_stacksize_np(thread pthread_t) size_t {\n\treturn size_t(call5(pthread_get_stacksize_npABI0, uintptr(thread), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_attr_getstacksize(attr *pthread_attr_t, stacksize *size_t) int32 {\n\treturn int32(call5(pthread_attr_getstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(unsafe.Pointer(stacksize)), 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_attr_setstacksize(attr *pthread_attr_t, size size_t) int32 {\n\treturn int32(call5(pthread_attr_setstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(size), 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_attr_destroy(attr *pthread_attr_t) int32 {\n\treturn int32(call5(pthread_attr_destroyABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_mutex_lock(mutex *pthread_mutex_t) int32 {\n\treturn int32(call5(pthread_mutex_lockABI0, uintptr(unsafe.Pointer(mutex)), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_mutex_unlock(mutex *pthread_mutex_t) int32 {\n\treturn int32(call5(pthread_mutex_unlockABI0, uintptr(unsafe.Pointer(mutex)), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_cond_broadcast(cond *pthread_cond_t) int32 {\n\treturn int32(call5(pthread_cond_broadcastABI0, uintptr(unsafe.Pointer(cond)), 0, 0, 0, 0))\n}\n\n//go:nosplit\nfunc pthread_setspecific(key pthread_key_t, value unsafe.Pointer) int32 {\n\treturn int32(call5(pthread_setspecificABI0, uintptr(key), uintptr(value), 0, 0, 0))\n}\n\n//go:linkname _malloc _malloc\nvar _malloc uintptr\nvar mallocABI0 = uintptr(unsafe.Pointer(&_malloc))\n\n//go:linkname _free _free\nvar _free uintptr\nvar freeABI0 = uintptr(unsafe.Pointer(&_free))\n\n//go:linkname _setenv _setenv\nvar _setenv uintptr\nvar setenvABI0 = uintptr(unsafe.Pointer(&_setenv))\n\n//go:linkname _unsetenv _unsetenv\nvar _unsetenv uintptr\nvar unsetenvABI0 = uintptr(unsafe.Pointer(&_unsetenv))\n\n//go:linkname _sigfillset _sigfillset\nvar _sigfillset uintptr\nvar sigfillsetABI0 = uintptr(unsafe.Pointer(&_sigfillset))\n\n//go:linkname _nanosleep _nanosleep\nvar _nanosleep uintptr\nvar nanosleepABI0 = uintptr(unsafe.Pointer(&_nanosleep))\n\n//go:linkname _abort _abort\nvar _abort uintptr\nvar abortABI0 = uintptr(unsafe.Pointer(&_abort))\n\n//go:linkname _pthread_attr_init _pthread_attr_init\nvar _pthread_attr_init uintptr\nvar pthread_attr_initABI0 = uintptr(unsafe.Pointer(&_pthread_attr_init))\n\n//go:linkname _pthread_create _pthread_create\nvar _pthread_create uintptr\nvar pthread_createABI0 = uintptr(unsafe.Pointer(&_pthread_create))\n\n//go:linkname _pthread_detach _pthread_detach\nvar _pthread_detach uintptr\nvar pthread_detachABI0 = uintptr(unsafe.Pointer(&_pthread_detach))\n\n//go:linkname _pthread_sigmask _pthread_sigmask\nvar _pthread_sigmask uintptr\nvar pthread_sigmaskABI0 = uintptr(unsafe.Pointer(&_pthread_sigmask))\n\n//go:linkname _pthread_self _pthread_self\nvar _pthread_self uintptr\nvar pthread_selfABI0 = uintptr(unsafe.Pointer(&_pthread_self))\n\n//go:linkname _pthread_get_stacksize_np _pthread_get_stacksize_np\nvar _pthread_get_stacksize_np uintptr\nvar pthread_get_stacksize_npABI0 = uintptr(unsafe.Pointer(&_pthread_get_stacksize_np))\n\n//go:linkname _pthread_attr_getstacksize _pthread_attr_getstacksize\nvar _pthread_attr_getstacksize uintptr\nvar pthread_attr_getstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_getstacksize))\n\n//go:linkname _pthread_attr_setstacksize _pthread_attr_setstacksize\nvar _pthread_attr_setstacksize uintptr\nvar pthread_attr_setstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_setstacksize))\n\n//go:linkname _pthread_attr_destroy _pthread_attr_destroy\nvar _pthread_attr_destroy uintptr\nvar pthread_attr_destroyABI0 = uintptr(unsafe.Pointer(&_pthread_attr_destroy))\n\n//go:linkname _pthread_mutex_lock _pthread_mutex_lock\nvar _pthread_mutex_lock uintptr\nvar pthread_mutex_lockABI0 = uintptr(unsafe.Pointer(&_pthread_mutex_lock))\n\n//go:linkname _pthread_mutex_unlock _pthread_mutex_unlock\nvar _pthread_mutex_unlock uintptr\nvar pthread_mutex_unlockABI0 = uintptr(unsafe.Pointer(&_pthread_mutex_unlock))\n\n//go:linkname _pthread_cond_broadcast _pthread_cond_broadcast\nvar _pthread_cond_broadcast uintptr\nvar pthread_cond_broadcastABI0 = uintptr(unsafe.Pointer(&_pthread_cond_broadcast))\n\n//go:linkname _pthread_setspecific _pthread_setspecific\nvar _pthread_setspecific uintptr\nvar pthread_setspecificABI0 = uintptr(unsafe.Pointer(&_pthread_setspecific))\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/symbols_darwin.go",
    "content": "// Code generated by 'go generate' with gen.go. DO NOT EDIT.\n\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage fakecgo\n\n//go:cgo_import_dynamic purego_malloc malloc \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_free free \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_setenv setenv \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_unsetenv unsetenv \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_sigfillset sigfillset \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_nanosleep nanosleep \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_abort abort \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_create pthread_create \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_detach pthread_detach \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_self pthread_self \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_get_stacksize_np pthread_get_stacksize_np \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_attr_getstacksize pthread_attr_getstacksize \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_attr_setstacksize pthread_attr_setstacksize \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_attr_destroy pthread_attr_destroy \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast \"/usr/lib/libSystem.B.dylib\"\n//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/symbols_freebsd.go",
    "content": "// Code generated by 'go generate' with gen.go. DO NOT EDIT.\n\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage fakecgo\n\n//go:cgo_import_dynamic purego_malloc malloc \"libc.so.7\"\n//go:cgo_import_dynamic purego_free free \"libc.so.7\"\n//go:cgo_import_dynamic purego_setenv setenv \"libc.so.7\"\n//go:cgo_import_dynamic purego_unsetenv unsetenv \"libc.so.7\"\n//go:cgo_import_dynamic purego_sigfillset sigfillset \"libc.so.7\"\n//go:cgo_import_dynamic purego_nanosleep nanosleep \"libc.so.7\"\n//go:cgo_import_dynamic purego_abort abort \"libc.so.7\"\n//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_create pthread_create \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_detach pthread_detach \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_self pthread_self \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_get_stacksize_np pthread_get_stacksize_np \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_attr_getstacksize pthread_attr_getstacksize \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_attr_setstacksize pthread_attr_setstacksize \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_attr_destroy pthread_attr_destroy \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast \"libpthread.so\"\n//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific \"libpthread.so\"\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/symbols_linux.go",
    "content": "// Code generated by 'go generate' with gen.go. DO NOT EDIT.\n\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage fakecgo\n\n//go:cgo_import_dynamic purego_malloc malloc \"libc.so.6\"\n//go:cgo_import_dynamic purego_free free \"libc.so.6\"\n//go:cgo_import_dynamic purego_setenv setenv \"libc.so.6\"\n//go:cgo_import_dynamic purego_unsetenv unsetenv \"libc.so.6\"\n//go:cgo_import_dynamic purego_sigfillset sigfillset \"libc.so.6\"\n//go:cgo_import_dynamic purego_nanosleep nanosleep \"libc.so.6\"\n//go:cgo_import_dynamic purego_abort abort \"libc.so.6\"\n//go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_create pthread_create \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_detach pthread_detach \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_sigmask pthread_sigmask \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_self pthread_self \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_get_stacksize_np pthread_get_stacksize_np \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_attr_getstacksize pthread_attr_getstacksize \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_attr_setstacksize pthread_attr_setstacksize \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_attr_destroy pthread_attr_destroy \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_mutex_lock pthread_mutex_lock \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_mutex_unlock pthread_mutex_unlock \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_cond_broadcast pthread_cond_broadcast \"libpthread.so.0\"\n//go:cgo_import_dynamic purego_pthread_setspecific pthread_setspecific \"libpthread.so.0\"\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || linux || freebsd)\n\n/*\ntrampoline for emulating required C functions for cgo in go (see cgo.go)\n(we convert cdecl calling convention to go and vice-versa)\n\nSince we're called from go and call into C we can cheat a bit with the calling conventions:\n - in go all the registers are caller saved\n - in C we have a couple of callee saved registers\n\n=> we can use BX, R12, R13, R14, R15 instead of the stack\n\nC Calling convention cdecl used here (we only need integer args):\n1. arg: DI\n2. arg: SI\n3. arg: DX\n4. arg: CX\n5. arg: R8\n6. arg: R9\nWe don't need floats with these functions -> AX=0\nreturn value will be in AX\n*/\n#include \"textflag.h\"\n#include \"go_asm.h\"\n\n// these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions.\n\nTEXT x_cgo_init_trampoline(SB), NOSPLIT, $16\n\tMOVQ DI, AX\n\tMOVQ SI, BX\n\tMOVQ ·x_cgo_init_call(SB), DX\n\tMOVQ (DX), CX\n\tCALL CX\n\tRET\n\nTEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $8\n\tMOVQ DI, AX\n\tMOVQ ·x_cgo_thread_start_call(SB), DX\n\tMOVQ (DX), CX\n\tCALL CX\n\tRET\n\nTEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $8\n\tMOVQ DI, AX\n\tMOVQ ·x_cgo_setenv_call(SB), DX\n\tMOVQ (DX), CX\n\tCALL CX\n\tRET\n\nTEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $8\n\tMOVQ DI, AX\n\tMOVQ ·x_cgo_unsetenv_call(SB), DX\n\tMOVQ (DX), CX\n\tCALL CX\n\tRET\n\nTEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0\n\tCALL ·x_cgo_notify_runtime_init_done(SB)\n\tRET\n\nTEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0\n\tCALL ·x_cgo_bindm(SB)\n\tRET\n\n// func setg_trampoline(setg uintptr, g uintptr)\nTEXT ·setg_trampoline(SB), NOSPLIT, $0-16\n\tMOVQ G+8(FP), DI\n\tMOVQ setg+0(FP), BX\n\tXORL AX, AX\n\tCALL BX\n\tRET\n\nTEXT threadentry_trampoline(SB), NOSPLIT, $16\n\tMOVQ DI, AX\n\tMOVQ ·threadentry_call(SB), DX\n\tMOVQ (DX), CX\n\tCALL CX\n\tRET\n\nTEXT ·call5(SB), NOSPLIT, $0-56\n\tMOVQ fn+0(FP), BX\n\tMOVQ a1+8(FP), DI\n\tMOVQ a2+16(FP), SI\n\tMOVQ a3+24(FP), DX\n\tMOVQ a4+32(FP), CX\n\tMOVQ a5+40(FP), R8\n\n\tXORL AX, AX // no floats\n\n\tPUSHQ BP       // save BP\n\tMOVQ  SP, BP   // save SP inside BP bc BP is callee-saved\n\tSUBQ  $16, SP  // allocate space for alignment\n\tANDQ  $-16, SP // align on 16 bytes for SSE\n\n\tCALL BX\n\n\tMOVQ BP, SP // get SP back\n\tPOPQ BP     // restore BP\n\n\tMOVQ AX, ret+48(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\n#include \"textflag.h\"\n#include \"go_asm.h\"\n\n// these trampolines map the gcc ABI to Go ABI and then calls into the Go equivalent functions.\n\nTEXT x_cgo_init_trampoline(SB), NOSPLIT, $0-0\n\tMOVD R0, 8(RSP)\n\tMOVD R1, 16(RSP)\n\tMOVD ·x_cgo_init_call(SB), R26\n\tMOVD (R26), R2\n\tCALL (R2)\n\tRET\n\nTEXT x_cgo_thread_start_trampoline(SB), NOSPLIT, $0-0\n\tMOVD R0, 8(RSP)\n\tMOVD ·x_cgo_thread_start_call(SB), R26\n\tMOVD (R26), R2\n\tCALL (R2)\n\tRET\n\nTEXT x_cgo_setenv_trampoline(SB), NOSPLIT, $0-0\n\tMOVD R0, 8(RSP)\n\tMOVD ·x_cgo_setenv_call(SB), R26\n\tMOVD (R26), R2\n\tCALL (R2)\n\tRET\n\nTEXT x_cgo_unsetenv_trampoline(SB), NOSPLIT, $0-0\n\tMOVD R0, 8(RSP)\n\tMOVD ·x_cgo_unsetenv_call(SB), R26\n\tMOVD (R26), R2\n\tCALL (R2)\n\tRET\n\nTEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0-0\n\tCALL ·x_cgo_notify_runtime_init_done(SB)\n\tRET\n\nTEXT x_cgo_bindm_trampoline(SB), NOSPLIT, $0\n\tCALL ·x_cgo_bindm(SB)\n\tRET\n\n// func setg_trampoline(setg uintptr, g uintptr)\nTEXT ·setg_trampoline(SB), NOSPLIT, $0-16\n\tMOVD G+8(FP), R0\n\tMOVD setg+0(FP), R1\n\tCALL R1\n\tRET\n\nTEXT threadentry_trampoline(SB), NOSPLIT, $0-0\n\tMOVD R0, 8(RSP)\n\tMOVD ·threadentry_call(SB), R26\n\tMOVD (R26), R2\n\tCALL (R2)\n\tMOVD $0, R0                     // TODO: get the return value from threadentry\n\tRET\n\nTEXT ·call5(SB), NOSPLIT, $0-0\n\tMOVD fn+0(FP), R6\n\tMOVD a1+8(FP), R0\n\tMOVD a2+16(FP), R1\n\tMOVD a3+24(FP), R2\n\tMOVD a4+32(FP), R3\n\tMOVD a5+40(FP), R4\n\tCALL R6\n\tMOVD R0, ret+48(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_stubs.s",
    "content": "// Code generated by 'go generate' with gen.go. DO NOT EDIT.\n\n// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\n#include \"textflag.h\"\n\n// these stubs are here because it is not possible to go:linkname directly the C functions on darwin arm64\n\nTEXT _malloc(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_malloc(SB)\n\tRET\n\nTEXT _free(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_free(SB)\n\tRET\n\nTEXT _setenv(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_setenv(SB)\n\tRET\n\nTEXT _unsetenv(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_unsetenv(SB)\n\tRET\n\nTEXT _sigfillset(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_sigfillset(SB)\n\tRET\n\nTEXT _nanosleep(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_nanosleep(SB)\n\tRET\n\nTEXT _abort(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_abort(SB)\n\tRET\n\nTEXT _pthread_attr_init(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_attr_init(SB)\n\tRET\n\nTEXT _pthread_create(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_create(SB)\n\tRET\n\nTEXT _pthread_detach(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_detach(SB)\n\tRET\n\nTEXT _pthread_sigmask(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_sigmask(SB)\n\tRET\n\nTEXT _pthread_self(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_self(SB)\n\tRET\n\nTEXT _pthread_get_stacksize_np(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_get_stacksize_np(SB)\n\tRET\n\nTEXT _pthread_attr_getstacksize(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_attr_getstacksize(SB)\n\tRET\n\nTEXT _pthread_attr_setstacksize(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_attr_setstacksize(SB)\n\tRET\n\nTEXT _pthread_attr_destroy(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_attr_destroy(SB)\n\tRET\n\nTEXT _pthread_mutex_lock(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_mutex_lock(SB)\n\tRET\n\nTEXT _pthread_mutex_unlock(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_mutex_unlock(SB)\n\tRET\n\nTEXT _pthread_cond_broadcast(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_cond_broadcast(SB)\n\tRET\n\nTEXT _pthread_setspecific(SB), NOSPLIT|NOFRAME, $0-0\n\tJMP purego_pthread_setspecific(SB)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/internal/strings/strings.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\npackage strings\n\nimport (\n\t\"unsafe\"\n)\n\n// hasSuffix tests whether the string s ends with suffix.\nfunc hasSuffix(s, suffix string) bool {\n\treturn len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix\n}\n\n// CString converts a go string to *byte that can be passed to C code.\nfunc CString(name string) *byte {\n\tif hasSuffix(name, \"\\x00\") {\n\t\treturn &(*(*[]byte)(unsafe.Pointer(&name)))[0]\n\t}\n\tb := make([]byte, len(name)+1)\n\tcopy(b, name)\n\treturn &b[0]\n}\n\n// GoString copies a null-terminated char* to a Go string.\nfunc GoString(c uintptr) string {\n\t// We take the address and then dereference it to trick go vet from creating a possible misuse of unsafe.Pointer\n\tptr := *(*unsafe.Pointer)(unsafe.Pointer(&c))\n\tif ptr == nil {\n\t\treturn \"\"\n\t}\n\tvar length int\n\tfor {\n\t\tif *(*byte)(unsafe.Add(ptr, uintptr(length))) == '\\x00' {\n\t\t\tbreak\n\t\t}\n\t\tlength++\n\t}\n\treturn string(unsafe.Slice((*byte)(ptr), length))\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/is_ios.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo\n\npackage purego\n\n// if you are getting this error it means that you have\n// CGO_ENABLED=0 while trying to build for ios.\n// purego does not support this mode yet.\n// the fix is to set CGO_ENABLED=1 which will require\n// a C compiler.\nvar _ = _PUREGO_REQUIRES_CGO_ON_IOS\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/nocgo.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build !cgo && (darwin || freebsd || linux)\n\npackage purego\n\n// if CGO_ENABLED=0 import fakecgo to setup the Cgo runtime correctly.\n// This is required since some frameworks need TLS setup the C way which Go doesn't do.\n// We currently don't support ios in fakecgo mode so force Cgo or fail\n//\n// The way that the Cgo runtime (runtime/cgo) works is by setting some variables found\n// in runtime with non-null GCC compiled functions. The variables that are replaced are\n// var (\n//\t\tiscgo             bool \t\t\t\t\t\t\t// in runtime/cgo.go\n//\t\t_cgo_init         unsafe.Pointer \t\t\t\t// in runtime/cgo.go\n//\t\t_cgo_thread_start unsafe.Pointer\t\t\t\t// in runtime/cgo.go\n//\t\t_cgo_notify_runtime_init_done unsafe.Pointer \t// in runtime/cgo.go\n//\t\t_cgo_setenv unsafe.Pointer  \t\t\t\t\t// in runtime/env_posix.go\n//\t\t_cgo_unsetenv unsafe.Pointer\t\t\t\t\t// in runtime/env_posix.go\n// )\n// importing fakecgo will set these (using //go:linkname) with functions written\n// entirely in Go (except for some assembly trampolines to change GCC ABI to Go ABI).\n// Doing so makes it possible to build applications that call into C without CGO_ENABLED=1.\nimport _ \"github.com/ebitengine/purego/internal/fakecgo\"\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/struct_amd64.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2024 The Ebitengine Authors\n\npackage purego\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nfunc getStruct(outType reflect.Type, syscall syscall15Args) (v reflect.Value) {\n\toutSize := outType.Size()\n\tswitch {\n\tcase outSize == 0:\n\t\treturn reflect.New(outType).Elem()\n\tcase outSize <= 8:\n\t\tif isAllFloats(outType) {\n\t\t\t// 2 float32s or 1 float64s are return in the float register\n\t\t\treturn reflect.NewAt(outType, unsafe.Pointer(&struct{ a uintptr }{syscall.f1})).Elem()\n\t\t}\n\t\t// up to 8 bytes is returned in RAX\n\t\treturn reflect.NewAt(outType, unsafe.Pointer(&struct{ a uintptr }{syscall.a1})).Elem()\n\tcase outSize <= 16:\n\t\tr1, r2 := syscall.a1, syscall.a2\n\t\tif isAllFloats(outType) {\n\t\t\tr1 = syscall.f1\n\t\t\tr2 = syscall.f2\n\t\t} else {\n\t\t\t// check first 8 bytes if it's floats\n\t\t\thasFirstFloat := false\n\t\t\tf1 := outType.Field(0).Type\n\t\t\tif f1.Kind() == reflect.Float64 || f1.Kind() == reflect.Float32 && outType.Field(1).Type.Kind() == reflect.Float32 {\n\t\t\t\tr1 = syscall.f1\n\t\t\t\thasFirstFloat = true\n\t\t\t}\n\n\t\t\t// find index of the field that starts the second 8 bytes\n\t\t\tvar i int\n\t\t\tfor i = 0; i < outType.NumField(); i++ {\n\t\t\t\tif outType.Field(i).Offset == 8 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// check last 8 bytes if they are floats\n\t\t\tf1 = outType.Field(i).Type\n\t\t\tif f1.Kind() == reflect.Float64 || f1.Kind() == reflect.Float32 && i+1 == outType.NumField() {\n\t\t\t\tr2 = syscall.f1\n\t\t\t} else if hasFirstFloat {\n\t\t\t\t// if the first field was a float then that means the second integer field\n\t\t\t\t// comes from the first integer register\n\t\t\t\tr2 = syscall.a1\n\t\t\t}\n\t\t}\n\t\treturn reflect.NewAt(outType, unsafe.Pointer(&struct{ a, b uintptr }{r1, r2})).Elem()\n\tdefault:\n\t\t// create struct from the Go pointer created above\n\t\t// weird pointer dereference to circumvent go vet\n\t\treturn reflect.NewAt(outType, *(*unsafe.Pointer)(unsafe.Pointer(&syscall.a1))).Elem()\n\t}\n}\n\nfunc isAllFloats(ty reflect.Type) bool {\n\tfor i := 0; i < ty.NumField(); i++ {\n\t\tf := ty.Field(i)\n\t\tswitch f.Type.Kind() {\n\t\tcase reflect.Float64, reflect.Float32:\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// https://refspecs.linuxbase.org/elf/x86_64-abi-0.99.pdf\n// https://gitlab.com/x86-psABIs/x86-64-ABI\n// Class determines where the 8 byte value goes.\n// Higher value classes win over lower value classes\nconst (\n\t_NO_CLASS = 0b0000\n\t_SSE      = 0b0001\n\t_X87      = 0b0011 // long double not used in Go\n\t_INTEGER  = 0b0111\n\t_MEMORY   = 0b1111\n)\n\nfunc addStruct(v reflect.Value, numInts, numFloats, numStack *int, addInt, addFloat, addStack func(uintptr), keepAlive []interface{}) []interface{} {\n\tif v.Type().Size() == 0 {\n\t\treturn keepAlive\n\t}\n\n\t// if greater than 64 bytes place on stack\n\tif v.Type().Size() > 8*8 {\n\t\tplaceStack(v, addStack)\n\t\treturn keepAlive\n\t}\n\tvar (\n\t\tsavedNumFloats = *numFloats\n\t\tsavedNumInts   = *numInts\n\t\tsavedNumStack  = *numStack\n\t)\n\tplaceOnStack := postMerger(v.Type()) || !tryPlaceRegister(v, addFloat, addInt)\n\tif placeOnStack {\n\t\t// reset any values placed in registers\n\t\t*numFloats = savedNumFloats\n\t\t*numInts = savedNumInts\n\t\t*numStack = savedNumStack\n\t\tplaceStack(v, addStack)\n\t}\n\treturn keepAlive\n}\n\nfunc postMerger(t reflect.Type) (passInMemory bool) {\n\t// (c) If the size of the aggregate exceeds two eightbytes and the first eight- byte isn’t SSE or any other\n\t// eightbyte isn’t SSEUP, the whole argument is passed in memory.\n\tif t.Kind() != reflect.Struct {\n\t\treturn false\n\t}\n\tif t.Size() <= 2*8 {\n\t\treturn false\n\t}\n\treturn true // Go does not have an SSE/SEEUP type so this is always true\n}\n\nfunc tryPlaceRegister(v reflect.Value, addFloat func(uintptr), addInt func(uintptr)) (ok bool) {\n\tok = true\n\tvar val uint64\n\tvar shift byte // # of bits to shift\n\tvar flushed bool\n\tclass := _NO_CLASS\n\tflushIfNeeded := func() {\n\t\tif flushed {\n\t\t\treturn\n\t\t}\n\t\tflushed = true\n\t\tif class == _SSE {\n\t\t\taddFloat(uintptr(val))\n\t\t} else {\n\t\t\taddInt(uintptr(val))\n\t\t}\n\t\tval = 0\n\t\tshift = 0\n\t\tclass = _NO_CLASS\n\t}\n\tvar place func(v reflect.Value)\n\tplace = func(v reflect.Value) {\n\t\tvar numFields int\n\t\tif v.Kind() == reflect.Struct {\n\t\t\tnumFields = v.Type().NumField()\n\t\t} else {\n\t\t\tnumFields = v.Type().Len()\n\t\t}\n\n\t\tfor i := 0; i < numFields; i++ {\n\t\t\tflushed = false\n\t\t\tvar f reflect.Value\n\t\t\tif v.Kind() == reflect.Struct {\n\t\t\t\tf = v.Field(i)\n\t\t\t} else {\n\t\t\t\tf = v.Index(i)\n\t\t\t}\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Struct:\n\t\t\t\tplace(f)\n\t\t\tcase reflect.Bool:\n\t\t\t\tif f.Bool() {\n\t\t\t\t\tval |= 1\n\t\t\t\t}\n\t\t\t\tshift += 8\n\t\t\t\tclass |= _INTEGER\n\t\t\tcase reflect.Pointer:\n\t\t\t\tok = false\n\t\t\t\treturn\n\t\t\tcase reflect.Int8:\n\t\t\t\tval |= uint64(f.Int()&0xFF) << shift\n\t\t\t\tshift += 8\n\t\t\t\tclass |= _INTEGER\n\t\t\tcase reflect.Int16:\n\t\t\t\tval |= uint64(f.Int()&0xFFFF) << shift\n\t\t\t\tshift += 16\n\t\t\t\tclass |= _INTEGER\n\t\t\tcase reflect.Int32:\n\t\t\t\tval |= uint64(f.Int()&0xFFFF_FFFF) << shift\n\t\t\t\tshift += 32\n\t\t\t\tclass |= _INTEGER\n\t\t\tcase reflect.Int64, reflect.Int:\n\t\t\t\tval = uint64(f.Int())\n\t\t\t\tshift = 64\n\t\t\t\tclass = _INTEGER\n\t\t\tcase reflect.Uint8:\n\t\t\t\tval |= f.Uint() << shift\n\t\t\t\tshift += 8\n\t\t\t\tclass |= _INTEGER\n\t\t\tcase reflect.Uint16:\n\t\t\t\tval |= f.Uint() << shift\n\t\t\t\tshift += 16\n\t\t\t\tclass |= _INTEGER\n\t\t\tcase reflect.Uint32:\n\t\t\t\tval |= f.Uint() << shift\n\t\t\t\tshift += 32\n\t\t\t\tclass |= _INTEGER\n\t\t\tcase reflect.Uint64, reflect.Uint:\n\t\t\t\tval = f.Uint()\n\t\t\t\tshift = 64\n\t\t\t\tclass = _INTEGER\n\t\t\tcase reflect.Float32:\n\t\t\t\tval |= uint64(math.Float32bits(float32(f.Float()))) << shift\n\t\t\t\tshift += 32\n\t\t\t\tclass |= _SSE\n\t\t\tcase reflect.Float64:\n\t\t\t\tif v.Type().Size() > 16 {\n\t\t\t\t\tok = false\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tval = uint64(math.Float64bits(f.Float()))\n\t\t\t\tshift = 64\n\t\t\t\tclass = _SSE\n\t\t\tcase reflect.Array:\n\t\t\t\tplace(f)\n\t\t\tdefault:\n\t\t\t\tpanic(\"purego: unsupported kind \" + f.Kind().String())\n\t\t\t}\n\n\t\t\tif shift == 64 {\n\t\t\t\tflushIfNeeded()\n\t\t\t} else if shift > 64 {\n\t\t\t\t// Should never happen, but may if we forget to reset shift after flush (or forget to flush),\n\t\t\t\t// better fall apart here, than corrupt arguments.\n\t\t\t\tpanic(\"purego: tryPlaceRegisters shift > 64\")\n\t\t\t}\n\t\t}\n\t}\n\n\tplace(v)\n\tflushIfNeeded()\n\treturn ok\n}\n\nfunc placeStack(v reflect.Value, addStack func(uintptr)) {\n\tfor i := 0; i < v.Type().NumField(); i++ {\n\t\tf := v.Field(i)\n\t\tswitch f.Kind() {\n\t\tcase reflect.Pointer:\n\t\t\taddStack(f.Pointer())\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\taddStack(uintptr(f.Int()))\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\taddStack(uintptr(f.Uint()))\n\t\tcase reflect.Float32:\n\t\t\taddStack(uintptr(math.Float32bits(float32(f.Float()))))\n\t\tcase reflect.Float64:\n\t\t\taddStack(uintptr(math.Float64bits(f.Float())))\n\t\tcase reflect.Struct:\n\t\t\tplaceStack(f, addStack)\n\t\tdefault:\n\t\t\tpanic(\"purego: unsupported kind \" + f.Kind().String())\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/struct_arm64.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2024 The Ebitengine Authors\n\npackage purego\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nfunc getStruct(outType reflect.Type, syscall syscall15Args) (v reflect.Value) {\n\toutSize := outType.Size()\n\tswitch {\n\tcase outSize == 0:\n\t\treturn reflect.New(outType).Elem()\n\tcase outSize <= 8:\n\t\tr1 := syscall.a1\n\t\tif isAllFloats, numFields := isAllSameFloat(outType); isAllFloats {\n\t\t\tr1 = syscall.f1\n\t\t\tif numFields == 2 {\n\t\t\t\tr1 = syscall.f2<<32 | syscall.f1\n\t\t\t}\n\t\t}\n\t\treturn reflect.NewAt(outType, unsafe.Pointer(&struct{ a uintptr }{r1})).Elem()\n\tcase outSize <= 16:\n\t\tr1, r2 := syscall.a1, syscall.a2\n\t\tif isAllFloats, numFields := isAllSameFloat(outType); isAllFloats {\n\t\t\tswitch numFields {\n\t\t\tcase 4:\n\t\t\t\tr1 = syscall.f2<<32 | syscall.f1\n\t\t\t\tr2 = syscall.f4<<32 | syscall.f3\n\t\t\tcase 3:\n\t\t\t\tr1 = syscall.f2<<32 | syscall.f1\n\t\t\t\tr2 = syscall.f3\n\t\t\tcase 2:\n\t\t\t\tr1 = syscall.f1\n\t\t\t\tr2 = syscall.f2\n\t\t\tdefault:\n\t\t\t\tpanic(\"unreachable\")\n\t\t\t}\n\t\t}\n\t\treturn reflect.NewAt(outType, unsafe.Pointer(&struct{ a, b uintptr }{r1, r2})).Elem()\n\tdefault:\n\t\tif isAllFloats, numFields := isAllSameFloat(outType); isAllFloats && numFields <= 4 {\n\t\t\tswitch numFields {\n\t\t\tcase 4:\n\t\t\t\treturn reflect.NewAt(outType, unsafe.Pointer(&struct{ a, b, c, d uintptr }{syscall.f1, syscall.f2, syscall.f3, syscall.f4})).Elem()\n\t\t\tcase 3:\n\t\t\t\treturn reflect.NewAt(outType, unsafe.Pointer(&struct{ a, b, c uintptr }{syscall.f1, syscall.f2, syscall.f3})).Elem()\n\t\t\tdefault:\n\t\t\t\tpanic(\"unreachable\")\n\t\t\t}\n\t\t}\n\t\t// create struct from the Go pointer created in arm64_r8\n\t\t// weird pointer dereference to circumvent go vet\n\t\treturn reflect.NewAt(outType, *(*unsafe.Pointer)(unsafe.Pointer(&syscall.arm64_r8))).Elem()\n\t}\n}\n\n// https://github.com/ARM-software/abi-aa/blob/main/sysvabi64/sysvabi64.rst\nconst (\n\t_NO_CLASS = 0b00\n\t_FLOAT    = 0b01\n\t_INT      = 0b11\n)\n\nfunc addStruct(v reflect.Value, numInts, numFloats, numStack *int, addInt, addFloat, addStack func(uintptr), keepAlive []interface{}) []interface{} {\n\tif v.Type().Size() == 0 {\n\t\treturn keepAlive\n\t}\n\n\tif hva, hfa, size := isHVA(v.Type()), isHFA(v.Type()), v.Type().Size(); hva || hfa || size <= 16 {\n\t\t// if this doesn't fit entirely in registers then\n\t\t// each element goes onto the stack\n\t\tif hfa && *numFloats+v.NumField() > numOfFloats {\n\t\t\t*numFloats = numOfFloats\n\t\t} else if hva && *numInts+v.NumField() > numOfIntegerRegisters() {\n\t\t\t*numInts = numOfIntegerRegisters()\n\t\t}\n\n\t\tplaceRegisters(v, addFloat, addInt)\n\t} else {\n\t\tkeepAlive = placeStack(v, keepAlive, addInt)\n\t}\n\treturn keepAlive // the struct was allocated so don't panic\n}\n\nfunc placeRegisters(v reflect.Value, addFloat func(uintptr), addInt func(uintptr)) {\n\tvar val uint64\n\tvar shift byte\n\tvar flushed bool\n\tclass := _NO_CLASS\n\tvar place func(v reflect.Value)\n\tplace = func(v reflect.Value) {\n\t\tvar numFields int\n\t\tif v.Kind() == reflect.Struct {\n\t\t\tnumFields = v.Type().NumField()\n\t\t} else {\n\t\t\tnumFields = v.Type().Len()\n\t\t}\n\t\tfor k := 0; k < numFields; k++ {\n\t\t\tflushed = false\n\t\t\tvar f reflect.Value\n\t\t\tif v.Kind() == reflect.Struct {\n\t\t\t\tf = v.Field(k)\n\t\t\t} else {\n\t\t\t\tf = v.Index(k)\n\t\t\t}\n\t\t\tif shift >= 64 {\n\t\t\t\tshift = 0\n\t\t\t\tflushed = true\n\t\t\t\tif class == _FLOAT {\n\t\t\t\t\taddFloat(uintptr(val))\n\t\t\t\t} else {\n\t\t\t\t\taddInt(uintptr(val))\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch f.Type().Kind() {\n\t\t\tcase reflect.Struct:\n\t\t\t\tplace(f)\n\t\t\tcase reflect.Bool:\n\t\t\t\tif f.Bool() {\n\t\t\t\t\tval |= 1\n\t\t\t\t}\n\t\t\t\tshift += 8\n\t\t\t\tclass |= _INT\n\t\t\tcase reflect.Uint8:\n\t\t\t\tval |= f.Uint() << shift\n\t\t\t\tshift += 8\n\t\t\t\tclass |= _INT\n\t\t\tcase reflect.Uint16:\n\t\t\t\tval |= f.Uint() << shift\n\t\t\t\tshift += 16\n\t\t\t\tclass |= _INT\n\t\t\tcase reflect.Uint32:\n\t\t\t\tval |= f.Uint() << shift\n\t\t\t\tshift += 32\n\t\t\t\tclass |= _INT\n\t\t\tcase reflect.Uint64:\n\t\t\t\taddInt(uintptr(f.Uint()))\n\t\t\t\tshift = 0\n\t\t\t\tflushed = true\n\t\t\tcase reflect.Int8:\n\t\t\t\tval |= uint64(f.Int()&0xFF) << shift\n\t\t\t\tshift += 8\n\t\t\t\tclass |= _INT\n\t\t\tcase reflect.Int16:\n\t\t\t\tval |= uint64(f.Int()&0xFFFF) << shift\n\t\t\t\tshift += 16\n\t\t\t\tclass |= _INT\n\t\t\tcase reflect.Int32:\n\t\t\t\tval |= uint64(f.Int()&0xFFFF_FFFF) << shift\n\t\t\t\tshift += 32\n\t\t\t\tclass |= _INT\n\t\t\tcase reflect.Int64:\n\t\t\t\taddInt(uintptr(f.Int()))\n\t\t\t\tshift = 0\n\t\t\t\tflushed = true\n\t\t\tcase reflect.Float32:\n\t\t\t\tif class == _FLOAT {\n\t\t\t\t\taddFloat(uintptr(val))\n\t\t\t\t\tval = 0\n\t\t\t\t\tshift = 0\n\t\t\t\t}\n\t\t\t\tval |= uint64(math.Float32bits(float32(f.Float()))) << shift\n\t\t\t\tshift += 32\n\t\t\t\tclass |= _FLOAT\n\t\t\tcase reflect.Float64:\n\t\t\t\taddFloat(uintptr(math.Float64bits(float64(f.Float()))))\n\t\t\t\tshift = 0\n\t\t\t\tflushed = true\n\t\t\tcase reflect.Array:\n\t\t\t\tplace(f)\n\t\t\tdefault:\n\t\t\t\tpanic(\"purego: unsupported kind \" + f.Kind().String())\n\t\t\t}\n\t\t}\n\t}\n\tplace(v)\n\tif !flushed {\n\t\tif class == _FLOAT {\n\t\t\taddFloat(uintptr(val))\n\t\t} else {\n\t\t\taddInt(uintptr(val))\n\t\t}\n\t}\n}\n\nfunc placeStack(v reflect.Value, keepAlive []interface{}, addInt func(uintptr)) []interface{} {\n\t// Struct is too big to be placed in registers.\n\t// Copy to heap and place the pointer in register\n\tptrStruct := reflect.New(v.Type())\n\tptrStruct.Elem().Set(v)\n\tptr := ptrStruct.Elem().Addr().UnsafePointer()\n\tkeepAlive = append(keepAlive, ptr)\n\taddInt(uintptr(ptr))\n\treturn keepAlive\n}\n\n// isHFA reports a Homogeneous Floating-point Aggregate (HFA) which is a Fundamental Data Type that is a\n// Floating-Point type and at most four uniquely addressable members (5.9.5.1 in [Arm64 Calling Convention]).\n// This type of struct will be placed more compactly than the individual fields.\n//\n// [Arm64 Calling Convention]: https://github.com/ARM-software/abi-aa/blob/main/sysvabi64/sysvabi64.rst\nfunc isHFA(t reflect.Type) bool {\n\t// round up struct size to nearest 8 see section B.4\n\tstructSize := roundUpTo8(t.Size())\n\tif structSize == 0 || t.NumField() > 4 {\n\t\treturn false\n\t}\n\tfirst := t.Field(0)\n\tswitch first.Type.Kind() {\n\tcase reflect.Float32, reflect.Float64:\n\t\tfirstKind := first.Type.Kind()\n\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\tif t.Field(i).Type.Kind() != firstKind {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase reflect.Array:\n\t\tswitch first.Type.Elem().Kind() {\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\treturn true\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\tcase reflect.Struct:\n\t\tfor i := 0; i < first.Type.NumField(); i++ {\n\t\t\tif !isHFA(first.Type) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// isHVA reports a Homogeneous Aggregate with a Fundamental Data Type that is a Short-Vector type\n// and at most four uniquely addressable members (5.9.5.2 in [Arm64 Calling Convention]).\n// A short vector is a machine type that is composed of repeated instances of one fundamental integral or\n// floating-point type. It may be 8 or 16 bytes in total size (5.4 in [Arm64 Calling Convention]).\n// This type of struct will be placed more compactly than the individual fields.\n//\n// [Arm64 Calling Convention]: https://github.com/ARM-software/abi-aa/blob/main/sysvabi64/sysvabi64.rst\nfunc isHVA(t reflect.Type) bool {\n\t// round up struct size to nearest 8 see section B.4\n\tstructSize := roundUpTo8(t.Size())\n\tif structSize == 0 || (structSize != 8 && structSize != 16) {\n\t\treturn false\n\t}\n\tfirst := t.Field(0)\n\tswitch first.Type.Kind() {\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Int8, reflect.Int16, reflect.Int32:\n\t\tfirstKind := first.Type.Kind()\n\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\tif t.Field(i).Type.Kind() != firstKind {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase reflect.Array:\n\t\tswitch first.Type.Elem().Kind() {\n\t\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Int8, reflect.Int16, reflect.Int32:\n\t\t\treturn true\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/struct_other.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2024 The Ebitengine Authors\n\n//go:build !amd64 && !arm64\n\npackage purego\n\nimport \"reflect\"\n\nfunc addStruct(v reflect.Value, numInts, numFloats, numStack *int, addInt, addFloat, addStack func(uintptr), keepAlive []interface{}) []interface{} {\n\tpanic(\"purego: struct arguments are not supported\")\n}\n\nfunc getStruct(outType reflect.Type, syscall syscall15Args) (v reflect.Value) {\n\tpanic(\"purego: struct returns are not supported\")\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/sys_amd64.s",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build darwin || freebsd || linux\n\n#include \"textflag.h\"\n#include \"abi_amd64.h\"\n#include \"go_asm.h\"\n#include \"funcdata.h\"\n\n#define STACK_SIZE 80\n#define PTR_ADDRESS (STACK_SIZE - 8)\n\n// syscall15X calls a function in libc on behalf of the syscall package.\n// syscall15X takes a pointer to a struct like:\n// struct {\n//\tfn    uintptr\n//\ta1    uintptr\n//\ta2    uintptr\n//\ta3    uintptr\n//\ta4    uintptr\n//\ta5    uintptr\n//\ta6    uintptr\n//\ta7    uintptr\n//\ta8    uintptr\n//\ta9    uintptr\n//\ta10    uintptr\n//\ta11    uintptr\n//\ta12    uintptr\n//\ta13    uintptr\n//\ta14    uintptr\n//\ta15    uintptr\n//\tr1    uintptr\n//\tr2    uintptr\n//\terr   uintptr\n// }\n// syscall15X must be called on the g0 stack with the\n// C calling convention (use libcCall).\nGLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8\nDATA ·syscall15XABI0(SB)/8, $syscall15X(SB)\nTEXT syscall15X(SB), NOSPLIT|NOFRAME, $0\n\tPUSHQ BP\n\tMOVQ  SP, BP\n\tSUBQ  $STACK_SIZE, SP\n\tMOVQ  DI, PTR_ADDRESS(BP) // save the pointer\n\tMOVQ  DI, R11\n\n\tMOVQ syscall15Args_f1(R11), X0 // f1\n\tMOVQ syscall15Args_f2(R11), X1 // f2\n\tMOVQ syscall15Args_f3(R11), X2 // f3\n\tMOVQ syscall15Args_f4(R11), X3 // f4\n\tMOVQ syscall15Args_f5(R11), X4 // f5\n\tMOVQ syscall15Args_f6(R11), X5 // f6\n\tMOVQ syscall15Args_f7(R11), X6 // f7\n\tMOVQ syscall15Args_f8(R11), X7 // f8\n\n\tMOVQ syscall15Args_a1(R11), DI // a1\n\tMOVQ syscall15Args_a2(R11), SI // a2\n\tMOVQ syscall15Args_a3(R11), DX // a3\n\tMOVQ syscall15Args_a4(R11), CX // a4\n\tMOVQ syscall15Args_a5(R11), R8 // a5\n\tMOVQ syscall15Args_a6(R11), R9 // a6\n\n\t// push the remaining paramters onto the stack\n\tMOVQ syscall15Args_a7(R11), R12\n\tMOVQ R12, 0(SP)                  // push a7\n\tMOVQ syscall15Args_a8(R11), R12\n\tMOVQ R12, 8(SP)                  // push a8\n\tMOVQ syscall15Args_a9(R11), R12\n\tMOVQ R12, 16(SP)                 // push a9\n\tMOVQ syscall15Args_a10(R11), R12\n\tMOVQ R12, 24(SP)                 // push a10\n\tMOVQ syscall15Args_a11(R11), R12\n\tMOVQ R12, 32(SP)                 // push a11\n\tMOVQ syscall15Args_a12(R11), R12\n\tMOVQ R12, 40(SP)                 // push a12\n\tMOVQ syscall15Args_a13(R11), R12\n\tMOVQ R12, 48(SP)                 // push a13\n\tMOVQ syscall15Args_a14(R11), R12\n\tMOVQ R12, 56(SP)                 // push a14\n\tMOVQ syscall15Args_a15(R11), R12\n\tMOVQ R12, 64(SP)                 // push a15\n\tXORL AX, AX                      // vararg: say \"no float args\"\n\n\tMOVQ syscall15Args_fn(R11), R10 // fn\n\tCALL R10\n\n\tMOVQ PTR_ADDRESS(BP), DI      // get the pointer back\n\tMOVQ AX, syscall15Args_a1(DI) // r1\n\tMOVQ DX, syscall15Args_a2(DI) // r3\n\tMOVQ X0, syscall15Args_f1(DI) // f1\n\tMOVQ X1, syscall15Args_f2(DI) // f2\n\n\tXORL AX, AX          // no error (it's ignored anyway)\n\tADDQ $STACK_SIZE, SP\n\tMOVQ BP, SP\n\tPOPQ BP\n\tRET\n\nTEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0\n\tMOVQ 0(SP), AX  // save the return address to calculate the cb index\n\tMOVQ 8(SP), R10 // get the return SP so that we can align register args with stack args\n\tADDQ $8, SP     // remove return address from stack, we are not returning to callbackasm, but to its caller.\n\n\t// make space for first six int and 8 float arguments below the frame\n\tADJSP $14*8, SP\n\tMOVSD X0, (1*8)(SP)\n\tMOVSD X1, (2*8)(SP)\n\tMOVSD X2, (3*8)(SP)\n\tMOVSD X3, (4*8)(SP)\n\tMOVSD X4, (5*8)(SP)\n\tMOVSD X5, (6*8)(SP)\n\tMOVSD X6, (7*8)(SP)\n\tMOVSD X7, (8*8)(SP)\n\tMOVQ  DI, (9*8)(SP)\n\tMOVQ  SI, (10*8)(SP)\n\tMOVQ  DX, (11*8)(SP)\n\tMOVQ  CX, (12*8)(SP)\n\tMOVQ  R8, (13*8)(SP)\n\tMOVQ  R9, (14*8)(SP)\n\tLEAQ  8(SP), R8      // R8 = address of args vector\n\n\tPUSHQ R10 // push the stack pointer below registers\n\n\t// Switch from the host ABI to the Go ABI.\n\tPUSH_REGS_HOST_TO_ABI0()\n\n\t// determine index into runtime·cbs table\n\tMOVQ $callbackasm(SB), DX\n\tSUBQ DX, AX\n\tMOVQ $0, DX\n\tMOVQ $5, CX               // divide by 5 because each call instruction in ·callbacks is 5 bytes long\n\tDIVL CX\n\tSUBQ $1, AX               // subtract 1 because return PC is to the next slot\n\n\t// Create a struct callbackArgs on our stack to be passed as\n\t// the \"frame\" to cgocallback and on to callbackWrap.\n\t// $24 to make enough room for the arguments to runtime.cgocallback\n\tSUBQ $(24+callbackArgs__size), SP\n\tMOVQ AX, (24+callbackArgs_index)(SP)  // callback index\n\tMOVQ R8, (24+callbackArgs_args)(SP)   // address of args vector\n\tMOVQ $0, (24+callbackArgs_result)(SP) // result\n\tLEAQ 24(SP), AX                       // take the address of callbackArgs\n\n\t// Call cgocallback, which will call callbackWrap(frame).\n\tMOVQ ·callbackWrap_call(SB), DI // Get the ABIInternal function pointer\n\tMOVQ (DI), DI                   // without <ABIInternal> by using a closure.\n\tMOVQ AX, SI                     // frame (address of callbackArgs)\n\tMOVQ $0, CX                     // context\n\n\tCALL crosscall2(SB) // runtime.cgocallback(fn, frame, ctxt uintptr)\n\n\t// Get callback result.\n\tMOVQ (24+callbackArgs_result)(SP), AX\n\tADDQ $(24+callbackArgs__size), SP     // remove callbackArgs struct\n\n\tPOP_REGS_HOST_TO_ABI0()\n\n\tPOPQ  R10        // get the SP back\n\tADJSP $-14*8, SP // remove arguments\n\n\tMOVQ R10, 0(SP)\n\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/sys_arm64.s",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build darwin || freebsd || linux || windows\n\n#include \"textflag.h\"\n#include \"go_asm.h\"\n#include \"funcdata.h\"\n\n#define STACK_SIZE 64\n#define PTR_ADDRESS (STACK_SIZE - 8)\n\n// syscall15X calls a function in libc on behalf of the syscall package.\n// syscall15X takes a pointer to a struct like:\n// struct {\n//\tfn    uintptr\n//\ta1    uintptr\n//\ta2    uintptr\n//\ta3    uintptr\n//\ta4    uintptr\n//\ta5    uintptr\n//\ta6    uintptr\n//\ta7    uintptr\n//\ta8    uintptr\n//\ta9    uintptr\n//\ta10    uintptr\n//\ta11    uintptr\n//\ta12    uintptr\n//\ta13    uintptr\n//\ta14    uintptr\n//\ta15    uintptr\n//\tr1    uintptr\n//\tr2    uintptr\n//\terr   uintptr\n// }\n// syscall15X must be called on the g0 stack with the\n// C calling convention (use libcCall).\nGLOBL ·syscall15XABI0(SB), NOPTR|RODATA, $8\nDATA ·syscall15XABI0(SB)/8, $syscall15X(SB)\nTEXT syscall15X(SB), NOSPLIT, $0\n\tSUB  $STACK_SIZE, RSP     // push structure pointer\n\tMOVD R0, PTR_ADDRESS(RSP)\n\tMOVD R0, R9\n\n\tFMOVD syscall15Args_f1(R9), F0 // f1\n\tFMOVD syscall15Args_f2(R9), F1 // f2\n\tFMOVD syscall15Args_f3(R9), F2 // f3\n\tFMOVD syscall15Args_f4(R9), F3 // f4\n\tFMOVD syscall15Args_f5(R9), F4 // f5\n\tFMOVD syscall15Args_f6(R9), F5 // f6\n\tFMOVD syscall15Args_f7(R9), F6 // f7\n\tFMOVD syscall15Args_f8(R9), F7 // f8\n\n\tMOVD syscall15Args_a1(R9), R0       // a1\n\tMOVD syscall15Args_a2(R9), R1       // a2\n\tMOVD syscall15Args_a3(R9), R2       // a3\n\tMOVD syscall15Args_a4(R9), R3       // a4\n\tMOVD syscall15Args_a5(R9), R4       // a5\n\tMOVD syscall15Args_a6(R9), R5       // a6\n\tMOVD syscall15Args_a7(R9), R6       // a7\n\tMOVD syscall15Args_a8(R9), R7       // a8\n\tMOVD syscall15Args_arm64_r8(R9), R8 // r8\n\n\tMOVD syscall15Args_a9(R9), R10\n\tMOVD R10, 0(RSP)                // push a9 onto stack\n\tMOVD syscall15Args_a10(R9), R10\n\tMOVD R10, 8(RSP)                // push a10 onto stack\n\tMOVD syscall15Args_a11(R9), R10\n\tMOVD R10, 16(RSP)               // push a11 onto stack\n\tMOVD syscall15Args_a12(R9), R10\n\tMOVD R10, 24(RSP)               // push a12 onto stack\n\tMOVD syscall15Args_a13(R9), R10\n\tMOVD R10, 32(RSP)               // push a13 onto stack\n\tMOVD syscall15Args_a14(R9), R10\n\tMOVD R10, 40(RSP)               // push a14 onto stack\n\tMOVD syscall15Args_a15(R9), R10\n\tMOVD R10, 48(RSP)               // push a15 onto stack\n\n\tMOVD syscall15Args_fn(R9), R10 // fn\n\tBL   (R10)\n\n\tMOVD PTR_ADDRESS(RSP), R2 // pop structure pointer\n\tADD  $STACK_SIZE, RSP\n\n\tMOVD  R0, syscall15Args_a1(R2) // save r1\n\tMOVD  R1, syscall15Args_a2(R2) // save r3\n\tFMOVD F0, syscall15Args_f1(R2) // save f0\n\tFMOVD F1, syscall15Args_f2(R2) // save f1\n\tFMOVD F2, syscall15Args_f3(R2) // save f2\n\tFMOVD F3, syscall15Args_f4(R2) // save f3\n\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/sys_unix_arm64.s",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2023 The Ebitengine Authors\n\n//go:build darwin || freebsd || linux\n\n#include \"textflag.h\"\n#include \"go_asm.h\"\n#include \"funcdata.h\"\n#include \"abi_arm64.h\"\n\nTEXT callbackasm1(SB), NOSPLIT|NOFRAME, $0\n\tNO_LOCAL_POINTERS\n\n\t// On entry, the trampoline in zcallback_darwin_arm64.s left\n\t// the callback index in R12 (which is volatile in the C ABI).\n\n\t// Save callback register arguments R0-R7 and F0-F7.\n\t// We do this at the top of the frame so they're contiguous with stack arguments.\n\tSUB   $(16*8), RSP, R14\n\tFSTPD (F0, F1), (0*8)(R14)\n\tFSTPD (F2, F3), (2*8)(R14)\n\tFSTPD (F4, F5), (4*8)(R14)\n\tFSTPD (F6, F7), (6*8)(R14)\n\tSTP   (R0, R1), (8*8)(R14)\n\tSTP   (R2, R3), (10*8)(R14)\n\tSTP   (R4, R5), (12*8)(R14)\n\tSTP   (R6, R7), (14*8)(R14)\n\n\t// Adjust SP by frame size.\n\tSUB $(26*8), RSP\n\n\t// It is important to save R27 because the go assembler\n\t// uses it for move instructions for a variable.\n\t// This line:\n\t// MOVD ·callbackWrap_call(SB), R0\n\t// Creates the instructions:\n\t// ADRP 14335(PC), R27\n\t// MOVD 388(27), R0\n\t// R27 is a callee saved register so we are responsible\n\t// for ensuring its value doesn't change. So save it and\n\t// restore it at the end of this function.\n\t// R30 is the link register. crosscall2 doesn't save it\n\t// so it's saved here.\n\tSTP (R27, R30), 0(RSP)\n\n\t// Create a struct callbackArgs on our stack.\n\tMOVD $(callbackArgs__size)(RSP), R13\n\tMOVD R12, callbackArgs_index(R13)    // callback index\n\tMOVD R14, callbackArgs_args(R13)     // address of args vector\n\tMOVD ZR, callbackArgs_result(R13)    // result\n\n\t// Move parameters into registers\n\t// Get the ABIInternal function pointer\n\t// without <ABIInternal> by using a closure.\n\tMOVD ·callbackWrap_call(SB), R0\n\tMOVD (R0), R0                   // fn unsafe.Pointer\n\tMOVD R13, R1                    // frame (&callbackArgs{...})\n\tMOVD $0, R3                     // ctxt uintptr\n\n\tBL crosscall2(SB)\n\n\t// Get callback result.\n\tMOVD $(callbackArgs__size)(RSP), R13\n\tMOVD callbackArgs_result(R13), R0\n\n\t// Restore LR and R27\n\tLDP 0(RSP), (R27, R30)\n\tADD $(26*8), RSP\n\n\tRET\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/syscall.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build darwin || freebsd || linux || windows\n\npackage purego\n\n// CDecl marks a function as being called using the __cdecl calling convention as defined in\n// the [MSDocs] when passed to NewCallback. It must be the first argument to the function.\n// This is only useful on 386 Windows, but it is safe to use on other platforms.\n//\n// [MSDocs]: https://learn.microsoft.com/en-us/cpp/cpp/cdecl?view=msvc-170\ntype CDecl struct{}\n\nconst (\n\tmaxArgs     = 15\n\tnumOfFloats = 8 // arm64 and amd64 both have 8 float registers\n)\n\ntype syscall15Args struct {\n\tfn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr\n\tf1, f2, f3, f4, f5, f6, f7, f8                                       uintptr\n\tarm64_r8                                                             uintptr\n}\n\n// SyscallN takes fn, a C function pointer and a list of arguments as uintptr.\n// There is an internal maximum number of arguments that SyscallN can take. It panics\n// when the maximum is exceeded. It returns the result and the libc error code if there is one.\n//\n// NOTE: SyscallN does not properly call functions that have both integer and float parameters.\n// See discussion comment https://github.com/ebiten/purego/pull/1#issuecomment-1128057607\n// for an explanation of why that is.\n//\n// On amd64, if there are more than 8 floats the 9th and so on will be placed incorrectly on the\n// stack.\n//\n// The pragma go:nosplit is not needed at this function declaration because it uses go:uintptrescapes\n// which forces all the objects that the uintptrs point to onto the heap where a stack split won't affect\n// their memory location.\n//\n//go:uintptrescapes\nfunc SyscallN(fn uintptr, args ...uintptr) (r1, r2, err uintptr) {\n\tif fn == 0 {\n\t\tpanic(\"purego: fn is nil\")\n\t}\n\tif len(args) > maxArgs {\n\t\tpanic(\"purego: too many arguments to SyscallN\")\n\t}\n\t// add padding so there is no out-of-bounds slicing\n\tvar tmp [maxArgs]uintptr\n\tcopy(tmp[:], args)\n\treturn syscall_syscall15X(fn, tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5], tmp[6], tmp[7], tmp[8], tmp[9], tmp[10], tmp[11], tmp[12], tmp[13], tmp[14])\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/syscall_cgo_linux.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build cgo && !(amd64 || arm64)\n\npackage purego\n\nimport (\n\t\"github.com/ebitengine/purego/internal/cgo\"\n)\n\nvar syscall15XABI0 = uintptr(cgo.Syscall15XABI0)\n\n//go:nosplit\nfunc syscall_syscall15X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2, err uintptr) {\n\treturn cgo.Syscall15X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)\n}\n\nfunc NewCallback(_ interface{}) uintptr {\n\tpanic(\"purego: NewCallback on Linux is only supported on amd64/arm64\")\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/syscall_sysv.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\n//go:build darwin || freebsd || (linux && (amd64 || arm64))\n\npackage purego\n\nimport (\n\t\"reflect\"\n\t\"runtime\"\n\t\"sync\"\n\t\"unsafe\"\n)\n\nvar syscall15XABI0 uintptr\n\n//go:nosplit\nfunc syscall_syscall15X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2, err uintptr) {\n\targs := syscall15Args{\n\t\tfn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,\n\t\ta1, a2, a3, a4, a5, a6, a7, a8,\n\t\t0,\n\t}\n\truntime_cgocall(syscall15XABI0, unsafe.Pointer(&args))\n\treturn args.a1, args.a2, 0\n}\n\n// NewCallback converts a Go function to a function pointer conforming to the C calling convention.\n// This is useful when interoperating with C code requiring callbacks. The argument is expected to be a\n// function with zero or one uintptr-sized result. The function must not have arguments with size larger than the size\n// of uintptr. Only a limited number of callbacks may be created in a single Go process, and any memory allocated\n// for these callbacks is never released. At least 2000 callbacks can always be created. Although this function\n// provides similar functionality to windows.NewCallback it is distinct.\nfunc NewCallback(fn interface{}) uintptr {\n\tty := reflect.TypeOf(fn)\n\tfor i := 0; i < ty.NumIn(); i++ {\n\t\tin := ty.In(i)\n\t\tif !in.AssignableTo(reflect.TypeOf(CDecl{})) {\n\t\t\tcontinue\n\t\t}\n\t\tif i != 0 {\n\t\t\tpanic(\"purego: CDecl must be the first argument\")\n\t\t}\n\t}\n\treturn compileCallback(fn)\n}\n\n// maxCb is the maximum number of callbacks\n// only increase this if you have added more to the callbackasm function\nconst maxCB = 2000\n\nvar cbs struct {\n\tlock  sync.Mutex\n\tnumFn int                  // the number of functions currently in cbs.funcs\n\tfuncs [maxCB]reflect.Value // the saved callbacks\n}\n\ntype callbackArgs struct {\n\tindex uintptr\n\t// args points to the argument block.\n\t//\n\t// The structure of the arguments goes\n\t// float registers followed by the\n\t// integer registers followed by the stack.\n\t//\n\t// This variable is treated as a continuous\n\t// block of memory containing all of the arguments\n\t// for this callback.\n\targs unsafe.Pointer\n\t// Below are out-args from callbackWrap\n\tresult uintptr\n}\n\nfunc compileCallback(fn interface{}) uintptr {\n\tval := reflect.ValueOf(fn)\n\tif val.Kind() != reflect.Func {\n\t\tpanic(\"purego: the type must be a function but was not\")\n\t}\n\tif val.IsNil() {\n\t\tpanic(\"purego: function must not be nil\")\n\t}\n\tty := val.Type()\n\tfor i := 0; i < ty.NumIn(); i++ {\n\t\tin := ty.In(i)\n\t\tswitch in.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tif i == 0 && in.AssignableTo(reflect.TypeOf(CDecl{})) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase reflect.Interface, reflect.Func, reflect.Slice,\n\t\t\treflect.Chan, reflect.Complex64, reflect.Complex128,\n\t\t\treflect.String, reflect.Map, reflect.Invalid:\n\t\t\tpanic(\"purego: unsupported argument type: \" + in.Kind().String())\n\t\t}\n\t}\noutput:\n\tswitch {\n\tcase ty.NumOut() == 1:\n\t\tswitch ty.Out(0).Kind() {\n\t\tcase reflect.Pointer, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,\n\t\t\treflect.Bool, reflect.UnsafePointer:\n\t\t\tbreak output\n\t\t}\n\t\tpanic(\"purego: unsupported return type: \" + ty.String())\n\tcase ty.NumOut() > 1:\n\t\tpanic(\"purego: callbacks can only have one return\")\n\t}\n\tcbs.lock.Lock()\n\tdefer cbs.lock.Unlock()\n\tif cbs.numFn >= maxCB {\n\t\tpanic(\"purego: the maximum number of callbacks has been reached\")\n\t}\n\tcbs.funcs[cbs.numFn] = val\n\tcbs.numFn++\n\treturn callbackasmAddr(cbs.numFn - 1)\n}\n\nconst ptrSize = unsafe.Sizeof((*int)(nil))\n\nconst callbackMaxFrame = 64 * ptrSize\n\n// callbackasm is implemented in zcallback_GOOS_GOARCH.s\n//\n//go:linkname __callbackasm callbackasm\nvar __callbackasm byte\nvar callbackasmABI0 = uintptr(unsafe.Pointer(&__callbackasm))\n\n// callbackWrap_call allows the calling of the ABIInternal wrapper\n// which is required for runtime.cgocallback without the\n// <ABIInternal> tag which is only allowed in the runtime.\n// This closure is used inside sys_darwin_GOARCH.s\nvar callbackWrap_call = callbackWrap\n\n// callbackWrap is called by assembly code which determines which Go function to call.\n// This function takes the arguments and passes them to the Go function and returns the result.\nfunc callbackWrap(a *callbackArgs) {\n\tcbs.lock.Lock()\n\tfn := cbs.funcs[a.index]\n\tcbs.lock.Unlock()\n\tfnType := fn.Type()\n\targs := make([]reflect.Value, fnType.NumIn())\n\tframe := (*[callbackMaxFrame]uintptr)(a.args)\n\tvar floatsN int // floatsN represents the number of float arguments processed\n\tvar intsN int   // intsN represents the number of integer arguments processed\n\t// stack points to the index into frame of the current stack element.\n\t// The stack begins after the float and integer registers.\n\tstack := numOfIntegerRegisters() + numOfFloats\n\tfor i := range args {\n\t\tvar pos int\n\t\tswitch fnType.In(i).Kind() {\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\tif floatsN >= numOfFloats {\n\t\t\t\tpos = stack\n\t\t\t\tstack++\n\t\t\t} else {\n\t\t\t\tpos = floatsN\n\t\t\t}\n\t\t\tfloatsN++\n\t\tcase reflect.Struct:\n\t\t\t// This is the CDecl field\n\t\t\targs[i] = reflect.Zero(fnType.In(i))\n\t\t\tcontinue\n\t\tdefault:\n\n\t\t\tif intsN >= numOfIntegerRegisters() {\n\t\t\t\tpos = stack\n\t\t\t\tstack++\n\t\t\t} else {\n\t\t\t\t// the integers begin after the floats in frame\n\t\t\t\tpos = intsN + numOfFloats\n\t\t\t}\n\t\t\tintsN++\n\t\t}\n\t\targs[i] = reflect.NewAt(fnType.In(i), unsafe.Pointer(&frame[pos])).Elem()\n\t}\n\tret := fn.Call(args)\n\tif len(ret) > 0 {\n\t\tswitch k := ret[0].Kind(); k {\n\t\tcase reflect.Uint, reflect.Uint64, reflect.Uint32, reflect.Uint16, reflect.Uint8, reflect.Uintptr:\n\t\t\ta.result = uintptr(ret[0].Uint())\n\t\tcase reflect.Int, reflect.Int64, reflect.Int32, reflect.Int16, reflect.Int8:\n\t\t\ta.result = uintptr(ret[0].Int())\n\t\tcase reflect.Bool:\n\t\t\tif ret[0].Bool() {\n\t\t\t\ta.result = 1\n\t\t\t} else {\n\t\t\t\ta.result = 0\n\t\t\t}\n\t\tcase reflect.Pointer:\n\t\t\ta.result = ret[0].Pointer()\n\t\tcase reflect.UnsafePointer:\n\t\t\ta.result = ret[0].Pointer()\n\t\tdefault:\n\t\t\tpanic(\"purego: unsupported kind: \" + k.String())\n\t\t}\n\t}\n}\n\n// callbackasmAddr returns address of runtime.callbackasm\n// function adjusted by i.\n// On x86 and amd64, runtime.callbackasm is a series of CALL instructions,\n// and we want callback to arrive at\n// correspondent call instruction instead of start of\n// runtime.callbackasm.\n// On ARM, runtime.callbackasm is a series of mov and branch instructions.\n// R12 is loaded with the callback index. Each entry is two instructions,\n// hence 8 bytes.\nfunc callbackasmAddr(i int) uintptr {\n\tvar entrySize int\n\tswitch runtime.GOARCH {\n\tdefault:\n\t\tpanic(\"purego: unsupported architecture\")\n\tcase \"386\", \"amd64\":\n\t\tentrySize = 5\n\tcase \"arm\", \"arm64\":\n\t\t// On ARM and ARM64, each entry is a MOV instruction\n\t\t// followed by a branch instruction\n\t\tentrySize = 8\n\t}\n\treturn callbackasmABI0 + uintptr(i*entrySize)\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/syscall_windows.go",
    "content": "// SPDX-License-Identifier: Apache-2.0\n// SPDX-FileCopyrightText: 2022 The Ebitengine Authors\n\npackage purego\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n)\n\nvar syscall15XABI0 uintptr\n\nfunc syscall_syscall15X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 uintptr) (r1, r2, err uintptr) {\n\tr1, r2, errno := syscall.Syscall15(fn, 15, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)\n\treturn r1, r2, uintptr(errno)\n}\n\n// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention.\n// This is useful when interoperating with Windows code requiring callbacks. The argument is expected to be a\n// function with one uintptr-sized result. The function must not have arguments with size larger than the\n// size of uintptr. Only a limited number of callbacks may be created in a single Go process, and any memory\n// allocated for these callbacks is never released. Between NewCallback and NewCallbackCDecl, at least 1024\n// callbacks can always be created. Although this function is similiar to the darwin version it may act\n// differently.\nfunc NewCallback(fn interface{}) uintptr {\n\tisCDecl := false\n\tty := reflect.TypeOf(fn)\n\tfor i := 0; i < ty.NumIn(); i++ {\n\t\tin := ty.In(i)\n\t\tif !in.AssignableTo(reflect.TypeOf(CDecl{})) {\n\t\t\tcontinue\n\t\t}\n\t\tif i != 0 {\n\t\t\tpanic(\"purego: CDecl must be the first argument\")\n\t\t}\n\t\tisCDecl = true\n\t}\n\tif isCDecl {\n\t\treturn syscall.NewCallbackCDecl(fn)\n\t}\n\treturn syscall.NewCallback(fn)\n}\n\nfunc loadSymbol(handle uintptr, name string) (uintptr, error) {\n\treturn syscall.GetProcAddress(syscall.Handle(handle), name)\n}\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/zcallback_amd64.s",
    "content": "// Code generated by wincallback.go using 'go generate'. DO NOT EDIT.\n\n//go:build darwin || freebsd || linux\n\n// runtime·callbackasm is called by external code to\n// execute Go implemented callback function. It is not\n// called from the start, instead runtime·compilecallback\n// always returns address into runtime·callbackasm offset\n// appropriately so different callbacks start with different\n// CALL instruction in runtime·callbackasm. This determines\n// which Go callback function is executed later on.\n#include \"textflag.h\"\n\nTEXT callbackasm(SB), NOSPLIT|NOFRAME, $0\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n\tCALL callbackasm1(SB)\n"
  },
  {
    "path": "vendor/github.com/ebitengine/purego/zcallback_arm64.s",
    "content": "// Code generated by wincallback.go using 'go generate'. DO NOT EDIT.\n\n//go:build darwin || freebsd || linux\n\n// External code calls into callbackasm at an offset corresponding\n// to the callback index. Callbackasm is a table of MOV and B instructions.\n// The MOV instruction loads R12 with the callback index, and the\n// B instruction branches to callbackasm1.\n// callbackasm1 takes the callback index from R12 and\n// indexes into an array that stores information about each callback.\n// It then calls the Go implementation for that callback.\n#include \"textflag.h\"\n\nTEXT callbackasm(SB), NOSPLIT|NOFRAME, $0\n\tMOVD $0, R12\n\tB    callbackasm1(SB)\n\tMOVD $1, R12\n\tB    callbackasm1(SB)\n\tMOVD $2, R12\n\tB    callbackasm1(SB)\n\tMOVD $3, R12\n\tB    callbackasm1(SB)\n\tMOVD $4, R12\n\tB    callbackasm1(SB)\n\tMOVD $5, R12\n\tB    callbackasm1(SB)\n\tMOVD $6, R12\n\tB    callbackasm1(SB)\n\tMOVD $7, R12\n\tB    callbackasm1(SB)\n\tMOVD $8, R12\n\tB    callbackasm1(SB)\n\tMOVD $9, R12\n\tB    callbackasm1(SB)\n\tMOVD $10, R12\n\tB    callbackasm1(SB)\n\tMOVD $11, R12\n\tB    callbackasm1(SB)\n\tMOVD $12, R12\n\tB    callbackasm1(SB)\n\tMOVD $13, R12\n\tB    callbackasm1(SB)\n\tMOVD $14, R12\n\tB    callbackasm1(SB)\n\tMOVD $15, R12\n\tB    callbackasm1(SB)\n\tMOVD $16, R12\n\tB    callbackasm1(SB)\n\tMOVD $17, R12\n\tB    callbackasm1(SB)\n\tMOVD $18, R12\n\tB    callbackasm1(SB)\n\tMOVD $19, R12\n\tB    callbackasm1(SB)\n\tMOVD $20, R12\n\tB    callbackasm1(SB)\n\tMOVD $21, R12\n\tB    callbackasm1(SB)\n\tMOVD $22, R12\n\tB    callbackasm1(SB)\n\tMOVD $23, R12\n\tB    callbackasm1(SB)\n\tMOVD $24, R12\n\tB    callbackasm1(SB)\n\tMOVD $25, R12\n\tB    callbackasm1(SB)\n\tMOVD $26, R12\n\tB    callbackasm1(SB)\n\tMOVD $27, R12\n\tB    callbackasm1(SB)\n\tMOVD $28, R12\n\tB    callbackasm1(SB)\n\tMOVD $29, R12\n\tB    callbackasm1(SB)\n\tMOVD $30, R12\n\tB    callbackasm1(SB)\n\tMOVD $31, R12\n\tB    callbackasm1(SB)\n\tMOVD $32, R12\n\tB    callbackasm1(SB)\n\tMOVD $33, R12\n\tB    callbackasm1(SB)\n\tMOVD $34, R12\n\tB    callbackasm1(SB)\n\tMOVD $35, R12\n\tB    callbackasm1(SB)\n\tMOVD $36, R12\n\tB    callbackasm1(SB)\n\tMOVD $37, R12\n\tB    callbackasm1(SB)\n\tMOVD $38, R12\n\tB    callbackasm1(SB)\n\tMOVD $39, R12\n\tB    callbackasm1(SB)\n\tMOVD $40, R12\n\tB    callbackasm1(SB)\n\tMOVD $41, R12\n\tB    callbackasm1(SB)\n\tMOVD $42, R12\n\tB    callbackasm1(SB)\n\tMOVD $43, R12\n\tB    callbackasm1(SB)\n\tMOVD $44, R12\n\tB    callbackasm1(SB)\n\tMOVD $45, R12\n\tB    callbackasm1(SB)\n\tMOVD $46, R12\n\tB    callbackasm1(SB)\n\tMOVD $47, R12\n\tB    callbackasm1(SB)\n\tMOVD $48, R12\n\tB    callbackasm1(SB)\n\tMOVD $49, R12\n\tB    callbackasm1(SB)\n\tMOVD $50, R12\n\tB    callbackasm1(SB)\n\tMOVD $51, R12\n\tB    callbackasm1(SB)\n\tMOVD $52, R12\n\tB    callbackasm1(SB)\n\tMOVD $53, R12\n\tB    callbackasm1(SB)\n\tMOVD $54, R12\n\tB    callbackasm1(SB)\n\tMOVD $55, R12\n\tB    callbackasm1(SB)\n\tMOVD $56, R12\n\tB    callbackasm1(SB)\n\tMOVD $57, R12\n\tB    callbackasm1(SB)\n\tMOVD $58, R12\n\tB    callbackasm1(SB)\n\tMOVD $59, R12\n\tB    callbackasm1(SB)\n\tMOVD $60, R12\n\tB    callbackasm1(SB)\n\tMOVD $61, R12\n\tB    callbackasm1(SB)\n\tMOVD $62, R12\n\tB    callbackasm1(SB)\n\tMOVD $63, R12\n\tB    callbackasm1(SB)\n\tMOVD $64, R12\n\tB    callbackasm1(SB)\n\tMOVD $65, R12\n\tB    callbackasm1(SB)\n\tMOVD $66, R12\n\tB    callbackasm1(SB)\n\tMOVD $67, R12\n\tB    callbackasm1(SB)\n\tMOVD $68, R12\n\tB    callbackasm1(SB)\n\tMOVD $69, R12\n\tB    callbackasm1(SB)\n\tMOVD $70, R12\n\tB    callbackasm1(SB)\n\tMOVD $71, R12\n\tB    callbackasm1(SB)\n\tMOVD $72, R12\n\tB    callbackasm1(SB)\n\tMOVD $73, R12\n\tB    callbackasm1(SB)\n\tMOVD $74, R12\n\tB    callbackasm1(SB)\n\tMOVD $75, R12\n\tB    callbackasm1(SB)\n\tMOVD $76, R12\n\tB    callbackasm1(SB)\n\tMOVD $77, R12\n\tB    callbackasm1(SB)\n\tMOVD $78, R12\n\tB    callbackasm1(SB)\n\tMOVD $79, R12\n\tB    callbackasm1(SB)\n\tMOVD $80, R12\n\tB    callbackasm1(SB)\n\tMOVD $81, R12\n\tB    callbackasm1(SB)\n\tMOVD $82, R12\n\tB    callbackasm1(SB)\n\tMOVD $83, R12\n\tB    callbackasm1(SB)\n\tMOVD $84, R12\n\tB    callbackasm1(SB)\n\tMOVD $85, R12\n\tB    callbackasm1(SB)\n\tMOVD $86, R12\n\tB    callbackasm1(SB)\n\tMOVD $87, R12\n\tB    callbackasm1(SB)\n\tMOVD $88, R12\n\tB    callbackasm1(SB)\n\tMOVD $89, R12\n\tB    callbackasm1(SB)\n\tMOVD $90, R12\n\tB    callbackasm1(SB)\n\tMOVD $91, R12\n\tB    callbackasm1(SB)\n\tMOVD $92, R12\n\tB    callbackasm1(SB)\n\tMOVD $93, R12\n\tB    callbackasm1(SB)\n\tMOVD $94, R12\n\tB    callbackasm1(SB)\n\tMOVD $95, R12\n\tB    callbackasm1(SB)\n\tMOVD $96, R12\n\tB    callbackasm1(SB)\n\tMOVD $97, R12\n\tB    callbackasm1(SB)\n\tMOVD $98, R12\n\tB    callbackasm1(SB)\n\tMOVD $99, R12\n\tB    callbackasm1(SB)\n\tMOVD $100, R12\n\tB    callbackasm1(SB)\n\tMOVD $101, R12\n\tB    callbackasm1(SB)\n\tMOVD $102, R12\n\tB    callbackasm1(SB)\n\tMOVD $103, R12\n\tB    callbackasm1(SB)\n\tMOVD $104, R12\n\tB    callbackasm1(SB)\n\tMOVD $105, R12\n\tB    callbackasm1(SB)\n\tMOVD $106, R12\n\tB    callbackasm1(SB)\n\tMOVD $107, R12\n\tB    callbackasm1(SB)\n\tMOVD $108, R12\n\tB    callbackasm1(SB)\n\tMOVD $109, R12\n\tB    callbackasm1(SB)\n\tMOVD $110, R12\n\tB    callbackasm1(SB)\n\tMOVD $111, R12\n\tB    callbackasm1(SB)\n\tMOVD $112, R12\n\tB    callbackasm1(SB)\n\tMOVD $113, R12\n\tB    callbackasm1(SB)\n\tMOVD $114, R12\n\tB    callbackasm1(SB)\n\tMOVD $115, R12\n\tB    callbackasm1(SB)\n\tMOVD $116, R12\n\tB    callbackasm1(SB)\n\tMOVD $117, R12\n\tB    callbackasm1(SB)\n\tMOVD $118, R12\n\tB    callbackasm1(SB)\n\tMOVD $119, R12\n\tB    callbackasm1(SB)\n\tMOVD $120, R12\n\tB    callbackasm1(SB)\n\tMOVD $121, R12\n\tB    callbackasm1(SB)\n\tMOVD $122, R12\n\tB    callbackasm1(SB)\n\tMOVD $123, R12\n\tB    callbackasm1(SB)\n\tMOVD $124, R12\n\tB    callbackasm1(SB)\n\tMOVD $125, R12\n\tB    callbackasm1(SB)\n\tMOVD $126, R12\n\tB    callbackasm1(SB)\n\tMOVD $127, R12\n\tB    callbackasm1(SB)\n\tMOVD $128, R12\n\tB    callbackasm1(SB)\n\tMOVD $129, R12\n\tB    callbackasm1(SB)\n\tMOVD $130, R12\n\tB    callbackasm1(SB)\n\tMOVD $131, R12\n\tB    callbackasm1(SB)\n\tMOVD $132, R12\n\tB    callbackasm1(SB)\n\tMOVD $133, R12\n\tB    callbackasm1(SB)\n\tMOVD $134, R12\n\tB    callbackasm1(SB)\n\tMOVD $135, R12\n\tB    callbackasm1(SB)\n\tMOVD $136, R12\n\tB    callbackasm1(SB)\n\tMOVD $137, R12\n\tB    callbackasm1(SB)\n\tMOVD $138, R12\n\tB    callbackasm1(SB)\n\tMOVD $139, R12\n\tB    callbackasm1(SB)\n\tMOVD $140, R12\n\tB    callbackasm1(SB)\n\tMOVD $141, R12\n\tB    callbackasm1(SB)\n\tMOVD $142, R12\n\tB    callbackasm1(SB)\n\tMOVD $143, R12\n\tB    callbackasm1(SB)\n\tMOVD $144, R12\n\tB    callbackasm1(SB)\n\tMOVD $145, R12\n\tB    callbackasm1(SB)\n\tMOVD $146, R12\n\tB    callbackasm1(SB)\n\tMOVD $147, R12\n\tB    callbackasm1(SB)\n\tMOVD $148, R12\n\tB    callbackasm1(SB)\n\tMOVD $149, R12\n\tB    callbackasm1(SB)\n\tMOVD $150, R12\n\tB    callbackasm1(SB)\n\tMOVD $151, R12\n\tB    callbackasm1(SB)\n\tMOVD $152, R12\n\tB    callbackasm1(SB)\n\tMOVD $153, R12\n\tB    callbackasm1(SB)\n\tMOVD $154, R12\n\tB    callbackasm1(SB)\n\tMOVD $155, R12\n\tB    callbackasm1(SB)\n\tMOVD $156, R12\n\tB    callbackasm1(SB)\n\tMOVD $157, R12\n\tB    callbackasm1(SB)\n\tMOVD $158, R12\n\tB    callbackasm1(SB)\n\tMOVD $159, R12\n\tB    callbackasm1(SB)\n\tMOVD $160, R12\n\tB    callbackasm1(SB)\n\tMOVD $161, R12\n\tB    callbackasm1(SB)\n\tMOVD $162, R12\n\tB    callbackasm1(SB)\n\tMOVD $163, R12\n\tB    callbackasm1(SB)\n\tMOVD $164, R12\n\tB    callbackasm1(SB)\n\tMOVD $165, R12\n\tB    callbackasm1(SB)\n\tMOVD $166, R12\n\tB    callbackasm1(SB)\n\tMOVD $167, R12\n\tB    callbackasm1(SB)\n\tMOVD $168, R12\n\tB    callbackasm1(SB)\n\tMOVD $169, R12\n\tB    callbackasm1(SB)\n\tMOVD $170, R12\n\tB    callbackasm1(SB)\n\tMOVD $171, R12\n\tB    callbackasm1(SB)\n\tMOVD $172, R12\n\tB    callbackasm1(SB)\n\tMOVD $173, R12\n\tB    callbackasm1(SB)\n\tMOVD $174, R12\n\tB    callbackasm1(SB)\n\tMOVD $175, R12\n\tB    callbackasm1(SB)\n\tMOVD $176, R12\n\tB    callbackasm1(SB)\n\tMOVD $177, R12\n\tB    callbackasm1(SB)\n\tMOVD $178, R12\n\tB    callbackasm1(SB)\n\tMOVD $179, R12\n\tB    callbackasm1(SB)\n\tMOVD $180, R12\n\tB    callbackasm1(SB)\n\tMOVD $181, R12\n\tB    callbackasm1(SB)\n\tMOVD $182, R12\n\tB    callbackasm1(SB)\n\tMOVD $183, R12\n\tB    callbackasm1(SB)\n\tMOVD $184, R12\n\tB    callbackasm1(SB)\n\tMOVD $185, R12\n\tB    callbackasm1(SB)\n\tMOVD $186, R12\n\tB    callbackasm1(SB)\n\tMOVD $187, R12\n\tB    callbackasm1(SB)\n\tMOVD $188, R12\n\tB    callbackasm1(SB)\n\tMOVD $189, R12\n\tB    callbackasm1(SB)\n\tMOVD $190, R12\n\tB    callbackasm1(SB)\n\tMOVD $191, R12\n\tB    callbackasm1(SB)\n\tMOVD $192, R12\n\tB    callbackasm1(SB)\n\tMOVD $193, R12\n\tB    callbackasm1(SB)\n\tMOVD $194, R12\n\tB    callbackasm1(SB)\n\tMOVD $195, R12\n\tB    callbackasm1(SB)\n\tMOVD $196, R12\n\tB    callbackasm1(SB)\n\tMOVD $197, R12\n\tB    callbackasm1(SB)\n\tMOVD $198, R12\n\tB    callbackasm1(SB)\n\tMOVD $199, R12\n\tB    callbackasm1(SB)\n\tMOVD $200, R12\n\tB    callbackasm1(SB)\n\tMOVD $201, R12\n\tB    callbackasm1(SB)\n\tMOVD $202, R12\n\tB    callbackasm1(SB)\n\tMOVD $203, R12\n\tB    callbackasm1(SB)\n\tMOVD $204, R12\n\tB    callbackasm1(SB)\n\tMOVD $205, R12\n\tB    callbackasm1(SB)\n\tMOVD $206, R12\n\tB    callbackasm1(SB)\n\tMOVD $207, R12\n\tB    callbackasm1(SB)\n\tMOVD $208, R12\n\tB    callbackasm1(SB)\n\tMOVD $209, R12\n\tB    callbackasm1(SB)\n\tMOVD $210, R12\n\tB    callbackasm1(SB)\n\tMOVD $211, R12\n\tB    callbackasm1(SB)\n\tMOVD $212, R12\n\tB    callbackasm1(SB)\n\tMOVD $213, R12\n\tB    callbackasm1(SB)\n\tMOVD $214, R12\n\tB    callbackasm1(SB)\n\tMOVD $215, R12\n\tB    callbackasm1(SB)\n\tMOVD $216, R12\n\tB    callbackasm1(SB)\n\tMOVD $217, R12\n\tB    callbackasm1(SB)\n\tMOVD $218, R12\n\tB    callbackasm1(SB)\n\tMOVD $219, R12\n\tB    callbackasm1(SB)\n\tMOVD $220, R12\n\tB    callbackasm1(SB)\n\tMOVD $221, R12\n\tB    callbackasm1(SB)\n\tMOVD $222, R12\n\tB    callbackasm1(SB)\n\tMOVD $223, R12\n\tB    callbackasm1(SB)\n\tMOVD $224, R12\n\tB    callbackasm1(SB)\n\tMOVD $225, R12\n\tB    callbackasm1(SB)\n\tMOVD $226, R12\n\tB    callbackasm1(SB)\n\tMOVD $227, R12\n\tB    callbackasm1(SB)\n\tMOVD $228, R12\n\tB    callbackasm1(SB)\n\tMOVD $229, R12\n\tB    callbackasm1(SB)\n\tMOVD $230, R12\n\tB    callbackasm1(SB)\n\tMOVD $231, R12\n\tB    callbackasm1(SB)\n\tMOVD $232, R12\n\tB    callbackasm1(SB)\n\tMOVD $233, R12\n\tB    callbackasm1(SB)\n\tMOVD $234, R12\n\tB    callbackasm1(SB)\n\tMOVD $235, R12\n\tB    callbackasm1(SB)\n\tMOVD $236, R12\n\tB    callbackasm1(SB)\n\tMOVD $237, R12\n\tB    callbackasm1(SB)\n\tMOVD $238, R12\n\tB    callbackasm1(SB)\n\tMOVD $239, R12\n\tB    callbackasm1(SB)\n\tMOVD $240, R12\n\tB    callbackasm1(SB)\n\tMOVD $241, R12\n\tB    callbackasm1(SB)\n\tMOVD $242, R12\n\tB    callbackasm1(SB)\n\tMOVD $243, R12\n\tB    callbackasm1(SB)\n\tMOVD $244, R12\n\tB    callbackasm1(SB)\n\tMOVD $245, R12\n\tB    callbackasm1(SB)\n\tMOVD $246, R12\n\tB    callbackasm1(SB)\n\tMOVD $247, R12\n\tB    callbackasm1(SB)\n\tMOVD $248, R12\n\tB    callbackasm1(SB)\n\tMOVD $249, R12\n\tB    callbackasm1(SB)\n\tMOVD $250, R12\n\tB    callbackasm1(SB)\n\tMOVD $251, R12\n\tB    callbackasm1(SB)\n\tMOVD $252, R12\n\tB    callbackasm1(SB)\n\tMOVD $253, R12\n\tB    callbackasm1(SB)\n\tMOVD $254, R12\n\tB    callbackasm1(SB)\n\tMOVD $255, R12\n\tB    callbackasm1(SB)\n\tMOVD $256, R12\n\tB    callbackasm1(SB)\n\tMOVD $257, R12\n\tB    callbackasm1(SB)\n\tMOVD $258, R12\n\tB    callbackasm1(SB)\n\tMOVD $259, R12\n\tB    callbackasm1(SB)\n\tMOVD $260, R12\n\tB    callbackasm1(SB)\n\tMOVD $261, R12\n\tB    callbackasm1(SB)\n\tMOVD $262, R12\n\tB    callbackasm1(SB)\n\tMOVD $263, R12\n\tB    callbackasm1(SB)\n\tMOVD $264, R12\n\tB    callbackasm1(SB)\n\tMOVD $265, R12\n\tB    callbackasm1(SB)\n\tMOVD $266, R12\n\tB    callbackasm1(SB)\n\tMOVD $267, R12\n\tB    callbackasm1(SB)\n\tMOVD $268, R12\n\tB    callbackasm1(SB)\n\tMOVD $269, R12\n\tB    callbackasm1(SB)\n\tMOVD $270, R12\n\tB    callbackasm1(SB)\n\tMOVD $271, R12\n\tB    callbackasm1(SB)\n\tMOVD $272, R12\n\tB    callbackasm1(SB)\n\tMOVD $273, R12\n\tB    callbackasm1(SB)\n\tMOVD $274, R12\n\tB    callbackasm1(SB)\n\tMOVD $275, R12\n\tB    callbackasm1(SB)\n\tMOVD $276, R12\n\tB    callbackasm1(SB)\n\tMOVD $277, R12\n\tB    callbackasm1(SB)\n\tMOVD $278, R12\n\tB    callbackasm1(SB)\n\tMOVD $279, R12\n\tB    callbackasm1(SB)\n\tMOVD $280, R12\n\tB    callbackasm1(SB)\n\tMOVD $281, R12\n\tB    callbackasm1(SB)\n\tMOVD $282, R12\n\tB    callbackasm1(SB)\n\tMOVD $283, R12\n\tB    callbackasm1(SB)\n\tMOVD $284, R12\n\tB    callbackasm1(SB)\n\tMOVD $285, R12\n\tB    callbackasm1(SB)\n\tMOVD $286, R12\n\tB    callbackasm1(SB)\n\tMOVD $287, R12\n\tB    callbackasm1(SB)\n\tMOVD $288, R12\n\tB    callbackasm1(SB)\n\tMOVD $289, R12\n\tB    callbackasm1(SB)\n\tMOVD $290, R12\n\tB    callbackasm1(SB)\n\tMOVD $291, R12\n\tB    callbackasm1(SB)\n\tMOVD $292, R12\n\tB    callbackasm1(SB)\n\tMOVD $293, R12\n\tB    callbackasm1(SB)\n\tMOVD $294, R12\n\tB    callbackasm1(SB)\n\tMOVD $295, R12\n\tB    callbackasm1(SB)\n\tMOVD $296, R12\n\tB    callbackasm1(SB)\n\tMOVD $297, R12\n\tB    callbackasm1(SB)\n\tMOVD $298, R12\n\tB    callbackasm1(SB)\n\tMOVD $299, R12\n\tB    callbackasm1(SB)\n\tMOVD $300, R12\n\tB    callbackasm1(SB)\n\tMOVD $301, R12\n\tB    callbackasm1(SB)\n\tMOVD $302, R12\n\tB    callbackasm1(SB)\n\tMOVD $303, R12\n\tB    callbackasm1(SB)\n\tMOVD $304, R12\n\tB    callbackasm1(SB)\n\tMOVD $305, R12\n\tB    callbackasm1(SB)\n\tMOVD $306, R12\n\tB    callbackasm1(SB)\n\tMOVD $307, R12\n\tB    callbackasm1(SB)\n\tMOVD $308, R12\n\tB    callbackasm1(SB)\n\tMOVD $309, R12\n\tB    callbackasm1(SB)\n\tMOVD $310, R12\n\tB    callbackasm1(SB)\n\tMOVD $311, R12\n\tB    callbackasm1(SB)\n\tMOVD $312, R12\n\tB    callbackasm1(SB)\n\tMOVD $313, R12\n\tB    callbackasm1(SB)\n\tMOVD $314, R12\n\tB    callbackasm1(SB)\n\tMOVD $315, R12\n\tB    callbackasm1(SB)\n\tMOVD $316, R12\n\tB    callbackasm1(SB)\n\tMOVD $317, R12\n\tB    callbackasm1(SB)\n\tMOVD $318, R12\n\tB    callbackasm1(SB)\n\tMOVD $319, R12\n\tB    callbackasm1(SB)\n\tMOVD $320, R12\n\tB    callbackasm1(SB)\n\tMOVD $321, R12\n\tB    callbackasm1(SB)\n\tMOVD $322, R12\n\tB    callbackasm1(SB)\n\tMOVD $323, R12\n\tB    callbackasm1(SB)\n\tMOVD $324, R12\n\tB    callbackasm1(SB)\n\tMOVD $325, R12\n\tB    callbackasm1(SB)\n\tMOVD $326, R12\n\tB    callbackasm1(SB)\n\tMOVD $327, R12\n\tB    callbackasm1(SB)\n\tMOVD $328, R12\n\tB    callbackasm1(SB)\n\tMOVD $329, R12\n\tB    callbackasm1(SB)\n\tMOVD $330, R12\n\tB    callbackasm1(SB)\n\tMOVD $331, R12\n\tB    callbackasm1(SB)\n\tMOVD $332, R12\n\tB    callbackasm1(SB)\n\tMOVD $333, R12\n\tB    callbackasm1(SB)\n\tMOVD $334, R12\n\tB    callbackasm1(SB)\n\tMOVD $335, R12\n\tB    callbackasm1(SB)\n\tMOVD $336, R12\n\tB    callbackasm1(SB)\n\tMOVD $337, R12\n\tB    callbackasm1(SB)\n\tMOVD $338, R12\n\tB    callbackasm1(SB)\n\tMOVD $339, R12\n\tB    callbackasm1(SB)\n\tMOVD $340, R12\n\tB    callbackasm1(SB)\n\tMOVD $341, R12\n\tB    callbackasm1(SB)\n\tMOVD $342, R12\n\tB    callbackasm1(SB)\n\tMOVD $343, R12\n\tB    callbackasm1(SB)\n\tMOVD $344, R12\n\tB    callbackasm1(SB)\n\tMOVD $345, R12\n\tB    callbackasm1(SB)\n\tMOVD $346, R12\n\tB    callbackasm1(SB)\n\tMOVD $347, R12\n\tB    callbackasm1(SB)\n\tMOVD $348, R12\n\tB    callbackasm1(SB)\n\tMOVD $349, R12\n\tB    callbackasm1(SB)\n\tMOVD $350, R12\n\tB    callbackasm1(SB)\n\tMOVD $351, R12\n\tB    callbackasm1(SB)\n\tMOVD $352, R12\n\tB    callbackasm1(SB)\n\tMOVD $353, R12\n\tB    callbackasm1(SB)\n\tMOVD $354, R12\n\tB    callbackasm1(SB)\n\tMOVD $355, R12\n\tB    callbackasm1(SB)\n\tMOVD $356, R12\n\tB    callbackasm1(SB)\n\tMOVD $357, R12\n\tB    callbackasm1(SB)\n\tMOVD $358, R12\n\tB    callbackasm1(SB)\n\tMOVD $359, R12\n\tB    callbackasm1(SB)\n\tMOVD $360, R12\n\tB    callbackasm1(SB)\n\tMOVD $361, R12\n\tB    callbackasm1(SB)\n\tMOVD $362, R12\n\tB    callbackasm1(SB)\n\tMOVD $363, R12\n\tB    callbackasm1(SB)\n\tMOVD $364, R12\n\tB    callbackasm1(SB)\n\tMOVD $365, R12\n\tB    callbackasm1(SB)\n\tMOVD $366, R12\n\tB    callbackasm1(SB)\n\tMOVD $367, R12\n\tB    callbackasm1(SB)\n\tMOVD $368, R12\n\tB    callbackasm1(SB)\n\tMOVD $369, R12\n\tB    callbackasm1(SB)\n\tMOVD $370, R12\n\tB    callbackasm1(SB)\n\tMOVD $371, R12\n\tB    callbackasm1(SB)\n\tMOVD $372, R12\n\tB    callbackasm1(SB)\n\tMOVD $373, R12\n\tB    callbackasm1(SB)\n\tMOVD $374, R12\n\tB    callbackasm1(SB)\n\tMOVD $375, R12\n\tB    callbackasm1(SB)\n\tMOVD $376, R12\n\tB    callbackasm1(SB)\n\tMOVD $377, R12\n\tB    callbackasm1(SB)\n\tMOVD $378, R12\n\tB    callbackasm1(SB)\n\tMOVD $379, R12\n\tB    callbackasm1(SB)\n\tMOVD $380, R12\n\tB    callbackasm1(SB)\n\tMOVD $381, R12\n\tB    callbackasm1(SB)\n\tMOVD $382, R12\n\tB    callbackasm1(SB)\n\tMOVD $383, R12\n\tB    callbackasm1(SB)\n\tMOVD $384, R12\n\tB    callbackasm1(SB)\n\tMOVD $385, R12\n\tB    callbackasm1(SB)\n\tMOVD $386, R12\n\tB    callbackasm1(SB)\n\tMOVD $387, R12\n\tB    callbackasm1(SB)\n\tMOVD $388, R12\n\tB    callbackasm1(SB)\n\tMOVD $389, R12\n\tB    callbackasm1(SB)\n\tMOVD $390, R12\n\tB    callbackasm1(SB)\n\tMOVD $391, R12\n\tB    callbackasm1(SB)\n\tMOVD $392, R12\n\tB    callbackasm1(SB)\n\tMOVD $393, R12\n\tB    callbackasm1(SB)\n\tMOVD $394, R12\n\tB    callbackasm1(SB)\n\tMOVD $395, R12\n\tB    callbackasm1(SB)\n\tMOVD $396, R12\n\tB    callbackasm1(SB)\n\tMOVD $397, R12\n\tB    callbackasm1(SB)\n\tMOVD $398, R12\n\tB    callbackasm1(SB)\n\tMOVD $399, R12\n\tB    callbackasm1(SB)\n\tMOVD $400, R12\n\tB    callbackasm1(SB)\n\tMOVD $401, R12\n\tB    callbackasm1(SB)\n\tMOVD $402, R12\n\tB    callbackasm1(SB)\n\tMOVD $403, R12\n\tB    callbackasm1(SB)\n\tMOVD $404, R12\n\tB    callbackasm1(SB)\n\tMOVD $405, R12\n\tB    callbackasm1(SB)\n\tMOVD $406, R12\n\tB    callbackasm1(SB)\n\tMOVD $407, R12\n\tB    callbackasm1(SB)\n\tMOVD $408, R12\n\tB    callbackasm1(SB)\n\tMOVD $409, R12\n\tB    callbackasm1(SB)\n\tMOVD $410, R12\n\tB    callbackasm1(SB)\n\tMOVD $411, R12\n\tB    callbackasm1(SB)\n\tMOVD $412, R12\n\tB    callbackasm1(SB)\n\tMOVD $413, R12\n\tB    callbackasm1(SB)\n\tMOVD $414, R12\n\tB    callbackasm1(SB)\n\tMOVD $415, R12\n\tB    callbackasm1(SB)\n\tMOVD $416, R12\n\tB    callbackasm1(SB)\n\tMOVD $417, R12\n\tB    callbackasm1(SB)\n\tMOVD $418, R12\n\tB    callbackasm1(SB)\n\tMOVD $419, R12\n\tB    callbackasm1(SB)\n\tMOVD $420, R12\n\tB    callbackasm1(SB)\n\tMOVD $421, R12\n\tB    callbackasm1(SB)\n\tMOVD $422, R12\n\tB    callbackasm1(SB)\n\tMOVD $423, R12\n\tB    callbackasm1(SB)\n\tMOVD $424, R12\n\tB    callbackasm1(SB)\n\tMOVD $425, R12\n\tB    callbackasm1(SB)\n\tMOVD $426, R12\n\tB    callbackasm1(SB)\n\tMOVD $427, R12\n\tB    callbackasm1(SB)\n\tMOVD $428, R12\n\tB    callbackasm1(SB)\n\tMOVD $429, R12\n\tB    callbackasm1(SB)\n\tMOVD $430, R12\n\tB    callbackasm1(SB)\n\tMOVD $431, R12\n\tB    callbackasm1(SB)\n\tMOVD $432, R12\n\tB    callbackasm1(SB)\n\tMOVD $433, R12\n\tB    callbackasm1(SB)\n\tMOVD $434, R12\n\tB    callbackasm1(SB)\n\tMOVD $435, R12\n\tB    callbackasm1(SB)\n\tMOVD $436, R12\n\tB    callbackasm1(SB)\n\tMOVD $437, R12\n\tB    callbackasm1(SB)\n\tMOVD $438, R12\n\tB    callbackasm1(SB)\n\tMOVD $439, R12\n\tB    callbackasm1(SB)\n\tMOVD $440, R12\n\tB    callbackasm1(SB)\n\tMOVD $441, R12\n\tB    callbackasm1(SB)\n\tMOVD $442, R12\n\tB    callbackasm1(SB)\n\tMOVD $443, R12\n\tB    callbackasm1(SB)\n\tMOVD $444, R12\n\tB    callbackasm1(SB)\n\tMOVD $445, R12\n\tB    callbackasm1(SB)\n\tMOVD $446, R12\n\tB    callbackasm1(SB)\n\tMOVD $447, R12\n\tB    callbackasm1(SB)\n\tMOVD $448, R12\n\tB    callbackasm1(SB)\n\tMOVD $449, R12\n\tB    callbackasm1(SB)\n\tMOVD $450, R12\n\tB    callbackasm1(SB)\n\tMOVD $451, R12\n\tB    callbackasm1(SB)\n\tMOVD $452, R12\n\tB    callbackasm1(SB)\n\tMOVD $453, R12\n\tB    callbackasm1(SB)\n\tMOVD $454, R12\n\tB    callbackasm1(SB)\n\tMOVD $455, R12\n\tB    callbackasm1(SB)\n\tMOVD $456, R12\n\tB    callbackasm1(SB)\n\tMOVD $457, R12\n\tB    callbackasm1(SB)\n\tMOVD $458, R12\n\tB    callbackasm1(SB)\n\tMOVD $459, R12\n\tB    callbackasm1(SB)\n\tMOVD $460, R12\n\tB    callbackasm1(SB)\n\tMOVD $461, R12\n\tB    callbackasm1(SB)\n\tMOVD $462, R12\n\tB    callbackasm1(SB)\n\tMOVD $463, R12\n\tB    callbackasm1(SB)\n\tMOVD $464, R12\n\tB    callbackasm1(SB)\n\tMOVD $465, R12\n\tB    callbackasm1(SB)\n\tMOVD $466, R12\n\tB    callbackasm1(SB)\n\tMOVD $467, R12\n\tB    callbackasm1(SB)\n\tMOVD $468, R12\n\tB    callbackasm1(SB)\n\tMOVD $469, R12\n\tB    callbackasm1(SB)\n\tMOVD $470, R12\n\tB    callbackasm1(SB)\n\tMOVD $471, R12\n\tB    callbackasm1(SB)\n\tMOVD $472, R12\n\tB    callbackasm1(SB)\n\tMOVD $473, R12\n\tB    callbackasm1(SB)\n\tMOVD $474, R12\n\tB    callbackasm1(SB)\n\tMOVD $475, R12\n\tB    callbackasm1(SB)\n\tMOVD $476, R12\n\tB    callbackasm1(SB)\n\tMOVD $477, R12\n\tB    callbackasm1(SB)\n\tMOVD $478, R12\n\tB    callbackasm1(SB)\n\tMOVD $479, R12\n\tB    callbackasm1(SB)\n\tMOVD $480, R12\n\tB    callbackasm1(SB)\n\tMOVD $481, R12\n\tB    callbackasm1(SB)\n\tMOVD $482, R12\n\tB    callbackasm1(SB)\n\tMOVD $483, R12\n\tB    callbackasm1(SB)\n\tMOVD $484, R12\n\tB    callbackasm1(SB)\n\tMOVD $485, R12\n\tB    callbackasm1(SB)\n\tMOVD $486, R12\n\tB    callbackasm1(SB)\n\tMOVD $487, R12\n\tB    callbackasm1(SB)\n\tMOVD $488, R12\n\tB    callbackasm1(SB)\n\tMOVD $489, R12\n\tB    callbackasm1(SB)\n\tMOVD $490, R12\n\tB    callbackasm1(SB)\n\tMOVD $491, R12\n\tB    callbackasm1(SB)\n\tMOVD $492, R12\n\tB    callbackasm1(SB)\n\tMOVD $493, R12\n\tB    callbackasm1(SB)\n\tMOVD $494, R12\n\tB    callbackasm1(SB)\n\tMOVD $495, R12\n\tB    callbackasm1(SB)\n\tMOVD $496, R12\n\tB    callbackasm1(SB)\n\tMOVD $497, R12\n\tB    callbackasm1(SB)\n\tMOVD $498, R12\n\tB    callbackasm1(SB)\n\tMOVD $499, R12\n\tB    callbackasm1(SB)\n\tMOVD $500, R12\n\tB    callbackasm1(SB)\n\tMOVD $501, R12\n\tB    callbackasm1(SB)\n\tMOVD $502, R12\n\tB    callbackasm1(SB)\n\tMOVD $503, R12\n\tB    callbackasm1(SB)\n\tMOVD $504, R12\n\tB    callbackasm1(SB)\n\tMOVD $505, R12\n\tB    callbackasm1(SB)\n\tMOVD $506, R12\n\tB    callbackasm1(SB)\n\tMOVD $507, R12\n\tB    callbackasm1(SB)\n\tMOVD $508, R12\n\tB    callbackasm1(SB)\n\tMOVD $509, R12\n\tB    callbackasm1(SB)\n\tMOVD $510, R12\n\tB    callbackasm1(SB)\n\tMOVD $511, R12\n\tB    callbackasm1(SB)\n\tMOVD $512, R12\n\tB    callbackasm1(SB)\n\tMOVD $513, R12\n\tB    callbackasm1(SB)\n\tMOVD $514, R12\n\tB    callbackasm1(SB)\n\tMOVD $515, R12\n\tB    callbackasm1(SB)\n\tMOVD $516, R12\n\tB    callbackasm1(SB)\n\tMOVD $517, R12\n\tB    callbackasm1(SB)\n\tMOVD $518, R12\n\tB    callbackasm1(SB)\n\tMOVD $519, R12\n\tB    callbackasm1(SB)\n\tMOVD $520, R12\n\tB    callbackasm1(SB)\n\tMOVD $521, R12\n\tB    callbackasm1(SB)\n\tMOVD $522, R12\n\tB    callbackasm1(SB)\n\tMOVD $523, R12\n\tB    callbackasm1(SB)\n\tMOVD $524, R12\n\tB    callbackasm1(SB)\n\tMOVD $525, R12\n\tB    callbackasm1(SB)\n\tMOVD $526, R12\n\tB    callbackasm1(SB)\n\tMOVD $527, R12\n\tB    callbackasm1(SB)\n\tMOVD $528, R12\n\tB    callbackasm1(SB)\n\tMOVD $529, R12\n\tB    callbackasm1(SB)\n\tMOVD $530, R12\n\tB    callbackasm1(SB)\n\tMOVD $531, R12\n\tB    callbackasm1(SB)\n\tMOVD $532, R12\n\tB    callbackasm1(SB)\n\tMOVD $533, R12\n\tB    callbackasm1(SB)\n\tMOVD $534, R12\n\tB    callbackasm1(SB)\n\tMOVD $535, R12\n\tB    callbackasm1(SB)\n\tMOVD $536, R12\n\tB    callbackasm1(SB)\n\tMOVD $537, R12\n\tB    callbackasm1(SB)\n\tMOVD $538, R12\n\tB    callbackasm1(SB)\n\tMOVD $539, R12\n\tB    callbackasm1(SB)\n\tMOVD $540, R12\n\tB    callbackasm1(SB)\n\tMOVD $541, R12\n\tB    callbackasm1(SB)\n\tMOVD $542, R12\n\tB    callbackasm1(SB)\n\tMOVD $543, R12\n\tB    callbackasm1(SB)\n\tMOVD $544, R12\n\tB    callbackasm1(SB)\n\tMOVD $545, R12\n\tB    callbackasm1(SB)\n\tMOVD $546, R12\n\tB    callbackasm1(SB)\n\tMOVD $547, R12\n\tB    callbackasm1(SB)\n\tMOVD $548, R12\n\tB    callbackasm1(SB)\n\tMOVD $549, R12\n\tB    callbackasm1(SB)\n\tMOVD $550, R12\n\tB    callbackasm1(SB)\n\tMOVD $551, R12\n\tB    callbackasm1(SB)\n\tMOVD $552, R12\n\tB    callbackasm1(SB)\n\tMOVD $553, R12\n\tB    callbackasm1(SB)\n\tMOVD $554, R12\n\tB    callbackasm1(SB)\n\tMOVD $555, R12\n\tB    callbackasm1(SB)\n\tMOVD $556, R12\n\tB    callbackasm1(SB)\n\tMOVD $557, R12\n\tB    callbackasm1(SB)\n\tMOVD $558, R12\n\tB    callbackasm1(SB)\n\tMOVD $559, R12\n\tB    callbackasm1(SB)\n\tMOVD $560, R12\n\tB    callbackasm1(SB)\n\tMOVD $561, R12\n\tB    callbackasm1(SB)\n\tMOVD $562, R12\n\tB    callbackasm1(SB)\n\tMOVD $563, R12\n\tB    callbackasm1(SB)\n\tMOVD $564, R12\n\tB    callbackasm1(SB)\n\tMOVD $565, R12\n\tB    callbackasm1(SB)\n\tMOVD $566, R12\n\tB    callbackasm1(SB)\n\tMOVD $567, R12\n\tB    callbackasm1(SB)\n\tMOVD $568, R12\n\tB    callbackasm1(SB)\n\tMOVD $569, R12\n\tB    callbackasm1(SB)\n\tMOVD $570, R12\n\tB    callbackasm1(SB)\n\tMOVD $571, R12\n\tB    callbackasm1(SB)\n\tMOVD $572, R12\n\tB    callbackasm1(SB)\n\tMOVD $573, R12\n\tB    callbackasm1(SB)\n\tMOVD $574, R12\n\tB    callbackasm1(SB)\n\tMOVD $575, R12\n\tB    callbackasm1(SB)\n\tMOVD $576, R12\n\tB    callbackasm1(SB)\n\tMOVD $577, R12\n\tB    callbackasm1(SB)\n\tMOVD $578, R12\n\tB    callbackasm1(SB)\n\tMOVD $579, R12\n\tB    callbackasm1(SB)\n\tMOVD $580, R12\n\tB    callbackasm1(SB)\n\tMOVD $581, R12\n\tB    callbackasm1(SB)\n\tMOVD $582, R12\n\tB    callbackasm1(SB)\n\tMOVD $583, R12\n\tB    callbackasm1(SB)\n\tMOVD $584, R12\n\tB    callbackasm1(SB)\n\tMOVD $585, R12\n\tB    callbackasm1(SB)\n\tMOVD $586, R12\n\tB    callbackasm1(SB)\n\tMOVD $587, R12\n\tB    callbackasm1(SB)\n\tMOVD $588, R12\n\tB    callbackasm1(SB)\n\tMOVD $589, R12\n\tB    callbackasm1(SB)\n\tMOVD $590, R12\n\tB    callbackasm1(SB)\n\tMOVD $591, R12\n\tB    callbackasm1(SB)\n\tMOVD $592, R12\n\tB    callbackasm1(SB)\n\tMOVD $593, R12\n\tB    callbackasm1(SB)\n\tMOVD $594, R12\n\tB    callbackasm1(SB)\n\tMOVD $595, R12\n\tB    callbackasm1(SB)\n\tMOVD $596, R12\n\tB    callbackasm1(SB)\n\tMOVD $597, R12\n\tB    callbackasm1(SB)\n\tMOVD $598, R12\n\tB    callbackasm1(SB)\n\tMOVD $599, R12\n\tB    callbackasm1(SB)\n\tMOVD $600, R12\n\tB    callbackasm1(SB)\n\tMOVD $601, R12\n\tB    callbackasm1(SB)\n\tMOVD $602, R12\n\tB    callbackasm1(SB)\n\tMOVD $603, R12\n\tB    callbackasm1(SB)\n\tMOVD $604, R12\n\tB    callbackasm1(SB)\n\tMOVD $605, R12\n\tB    callbackasm1(SB)\n\tMOVD $606, R12\n\tB    callbackasm1(SB)\n\tMOVD $607, R12\n\tB    callbackasm1(SB)\n\tMOVD $608, R12\n\tB    callbackasm1(SB)\n\tMOVD $609, R12\n\tB    callbackasm1(SB)\n\tMOVD $610, R12\n\tB    callbackasm1(SB)\n\tMOVD $611, R12\n\tB    callbackasm1(SB)\n\tMOVD $612, R12\n\tB    callbackasm1(SB)\n\tMOVD $613, R12\n\tB    callbackasm1(SB)\n\tMOVD $614, R12\n\tB    callbackasm1(SB)\n\tMOVD $615, R12\n\tB    callbackasm1(SB)\n\tMOVD $616, R12\n\tB    callbackasm1(SB)\n\tMOVD $617, R12\n\tB    callbackasm1(SB)\n\tMOVD $618, R12\n\tB    callbackasm1(SB)\n\tMOVD $619, R12\n\tB    callbackasm1(SB)\n\tMOVD $620, R12\n\tB    callbackasm1(SB)\n\tMOVD $621, R12\n\tB    callbackasm1(SB)\n\tMOVD $622, R12\n\tB    callbackasm1(SB)\n\tMOVD $623, R12\n\tB    callbackasm1(SB)\n\tMOVD $624, R12\n\tB    callbackasm1(SB)\n\tMOVD $625, R12\n\tB    callbackasm1(SB)\n\tMOVD $626, R12\n\tB    callbackasm1(SB)\n\tMOVD $627, R12\n\tB    callbackasm1(SB)\n\tMOVD $628, R12\n\tB    callbackasm1(SB)\n\tMOVD $629, R12\n\tB    callbackasm1(SB)\n\tMOVD $630, R12\n\tB    callbackasm1(SB)\n\tMOVD $631, R12\n\tB    callbackasm1(SB)\n\tMOVD $632, R12\n\tB    callbackasm1(SB)\n\tMOVD $633, R12\n\tB    callbackasm1(SB)\n\tMOVD $634, R12\n\tB    callbackasm1(SB)\n\tMOVD $635, R12\n\tB    callbackasm1(SB)\n\tMOVD $636, R12\n\tB    callbackasm1(SB)\n\tMOVD $637, R12\n\tB    callbackasm1(SB)\n\tMOVD $638, R12\n\tB    callbackasm1(SB)\n\tMOVD $639, R12\n\tB    callbackasm1(SB)\n\tMOVD $640, R12\n\tB    callbackasm1(SB)\n\tMOVD $641, R12\n\tB    callbackasm1(SB)\n\tMOVD $642, R12\n\tB    callbackasm1(SB)\n\tMOVD $643, R12\n\tB    callbackasm1(SB)\n\tMOVD $644, R12\n\tB    callbackasm1(SB)\n\tMOVD $645, R12\n\tB    callbackasm1(SB)\n\tMOVD $646, R12\n\tB    callbackasm1(SB)\n\tMOVD $647, R12\n\tB    callbackasm1(SB)\n\tMOVD $648, R12\n\tB    callbackasm1(SB)\n\tMOVD $649, R12\n\tB    callbackasm1(SB)\n\tMOVD $650, R12\n\tB    callbackasm1(SB)\n\tMOVD $651, R12\n\tB    callbackasm1(SB)\n\tMOVD $652, R12\n\tB    callbackasm1(SB)\n\tMOVD $653, R12\n\tB    callbackasm1(SB)\n\tMOVD $654, R12\n\tB    callbackasm1(SB)\n\tMOVD $655, R12\n\tB    callbackasm1(SB)\n\tMOVD $656, R12\n\tB    callbackasm1(SB)\n\tMOVD $657, R12\n\tB    callbackasm1(SB)\n\tMOVD $658, R12\n\tB    callbackasm1(SB)\n\tMOVD $659, R12\n\tB    callbackasm1(SB)\n\tMOVD $660, R12\n\tB    callbackasm1(SB)\n\tMOVD $661, R12\n\tB    callbackasm1(SB)\n\tMOVD $662, R12\n\tB    callbackasm1(SB)\n\tMOVD $663, R12\n\tB    callbackasm1(SB)\n\tMOVD $664, R12\n\tB    callbackasm1(SB)\n\tMOVD $665, R12\n\tB    callbackasm1(SB)\n\tMOVD $666, R12\n\tB    callbackasm1(SB)\n\tMOVD $667, R12\n\tB    callbackasm1(SB)\n\tMOVD $668, R12\n\tB    callbackasm1(SB)\n\tMOVD $669, R12\n\tB    callbackasm1(SB)\n\tMOVD $670, R12\n\tB    callbackasm1(SB)\n\tMOVD $671, R12\n\tB    callbackasm1(SB)\n\tMOVD $672, R12\n\tB    callbackasm1(SB)\n\tMOVD $673, R12\n\tB    callbackasm1(SB)\n\tMOVD $674, R12\n\tB    callbackasm1(SB)\n\tMOVD $675, R12\n\tB    callbackasm1(SB)\n\tMOVD $676, R12\n\tB    callbackasm1(SB)\n\tMOVD $677, R12\n\tB    callbackasm1(SB)\n\tMOVD $678, R12\n\tB    callbackasm1(SB)\n\tMOVD $679, R12\n\tB    callbackasm1(SB)\n\tMOVD $680, R12\n\tB    callbackasm1(SB)\n\tMOVD $681, R12\n\tB    callbackasm1(SB)\n\tMOVD $682, R12\n\tB    callbackasm1(SB)\n\tMOVD $683, R12\n\tB    callbackasm1(SB)\n\tMOVD $684, R12\n\tB    callbackasm1(SB)\n\tMOVD $685, R12\n\tB    callbackasm1(SB)\n\tMOVD $686, R12\n\tB    callbackasm1(SB)\n\tMOVD $687, R12\n\tB    callbackasm1(SB)\n\tMOVD $688, R12\n\tB    callbackasm1(SB)\n\tMOVD $689, R12\n\tB    callbackasm1(SB)\n\tMOVD $690, R12\n\tB    callbackasm1(SB)\n\tMOVD $691, R12\n\tB    callbackasm1(SB)\n\tMOVD $692, R12\n\tB    callbackasm1(SB)\n\tMOVD $693, R12\n\tB    callbackasm1(SB)\n\tMOVD $694, R12\n\tB    callbackasm1(SB)\n\tMOVD $695, R12\n\tB    callbackasm1(SB)\n\tMOVD $696, R12\n\tB    callbackasm1(SB)\n\tMOVD $697, R12\n\tB    callbackasm1(SB)\n\tMOVD $698, R12\n\tB    callbackasm1(SB)\n\tMOVD $699, R12\n\tB    callbackasm1(SB)\n\tMOVD $700, R12\n\tB    callbackasm1(SB)\n\tMOVD $701, R12\n\tB    callbackasm1(SB)\n\tMOVD $702, R12\n\tB    callbackasm1(SB)\n\tMOVD $703, R12\n\tB    callbackasm1(SB)\n\tMOVD $704, R12\n\tB    callbackasm1(SB)\n\tMOVD $705, R12\n\tB    callbackasm1(SB)\n\tMOVD $706, R12\n\tB    callbackasm1(SB)\n\tMOVD $707, R12\n\tB    callbackasm1(SB)\n\tMOVD $708, R12\n\tB    callbackasm1(SB)\n\tMOVD $709, R12\n\tB    callbackasm1(SB)\n\tMOVD $710, R12\n\tB    callbackasm1(SB)\n\tMOVD $711, R12\n\tB    callbackasm1(SB)\n\tMOVD $712, R12\n\tB    callbackasm1(SB)\n\tMOVD $713, R12\n\tB    callbackasm1(SB)\n\tMOVD $714, R12\n\tB    callbackasm1(SB)\n\tMOVD $715, R12\n\tB    callbackasm1(SB)\n\tMOVD $716, R12\n\tB    callbackasm1(SB)\n\tMOVD $717, R12\n\tB    callbackasm1(SB)\n\tMOVD $718, R12\n\tB    callbackasm1(SB)\n\tMOVD $719, R12\n\tB    callbackasm1(SB)\n\tMOVD $720, R12\n\tB    callbackasm1(SB)\n\tMOVD $721, R12\n\tB    callbackasm1(SB)\n\tMOVD $722, R12\n\tB    callbackasm1(SB)\n\tMOVD $723, R12\n\tB    callbackasm1(SB)\n\tMOVD $724, R12\n\tB    callbackasm1(SB)\n\tMOVD $725, R12\n\tB    callbackasm1(SB)\n\tMOVD $726, R12\n\tB    callbackasm1(SB)\n\tMOVD $727, R12\n\tB    callbackasm1(SB)\n\tMOVD $728, R12\n\tB    callbackasm1(SB)\n\tMOVD $729, R12\n\tB    callbackasm1(SB)\n\tMOVD $730, R12\n\tB    callbackasm1(SB)\n\tMOVD $731, R12\n\tB    callbackasm1(SB)\n\tMOVD $732, R12\n\tB    callbackasm1(SB)\n\tMOVD $733, R12\n\tB    callbackasm1(SB)\n\tMOVD $734, R12\n\tB    callbackasm1(SB)\n\tMOVD $735, R12\n\tB    callbackasm1(SB)\n\tMOVD $736, R12\n\tB    callbackasm1(SB)\n\tMOVD $737, R12\n\tB    callbackasm1(SB)\n\tMOVD $738, R12\n\tB    callbackasm1(SB)\n\tMOVD $739, R12\n\tB    callbackasm1(SB)\n\tMOVD $740, R12\n\tB    callbackasm1(SB)\n\tMOVD $741, R12\n\tB    callbackasm1(SB)\n\tMOVD $742, R12\n\tB    callbackasm1(SB)\n\tMOVD $743, R12\n\tB    callbackasm1(SB)\n\tMOVD $744, R12\n\tB    callbackasm1(SB)\n\tMOVD $745, R12\n\tB    callbackasm1(SB)\n\tMOVD $746, R12\n\tB    callbackasm1(SB)\n\tMOVD $747, R12\n\tB    callbackasm1(SB)\n\tMOVD $748, R12\n\tB    callbackasm1(SB)\n\tMOVD $749, R12\n\tB    callbackasm1(SB)\n\tMOVD $750, R12\n\tB    callbackasm1(SB)\n\tMOVD $751, R12\n\tB    callbackasm1(SB)\n\tMOVD $752, R12\n\tB    callbackasm1(SB)\n\tMOVD $753, R12\n\tB    callbackasm1(SB)\n\tMOVD $754, R12\n\tB    callbackasm1(SB)\n\tMOVD $755, R12\n\tB    callbackasm1(SB)\n\tMOVD $756, R12\n\tB    callbackasm1(SB)\n\tMOVD $757, R12\n\tB    callbackasm1(SB)\n\tMOVD $758, R12\n\tB    callbackasm1(SB)\n\tMOVD $759, R12\n\tB    callbackasm1(SB)\n\tMOVD $760, R12\n\tB    callbackasm1(SB)\n\tMOVD $761, R12\n\tB    callbackasm1(SB)\n\tMOVD $762, R12\n\tB    callbackasm1(SB)\n\tMOVD $763, R12\n\tB    callbackasm1(SB)\n\tMOVD $764, R12\n\tB    callbackasm1(SB)\n\tMOVD $765, R12\n\tB    callbackasm1(SB)\n\tMOVD $766, R12\n\tB    callbackasm1(SB)\n\tMOVD $767, R12\n\tB    callbackasm1(SB)\n\tMOVD $768, R12\n\tB    callbackasm1(SB)\n\tMOVD $769, R12\n\tB    callbackasm1(SB)\n\tMOVD $770, R12\n\tB    callbackasm1(SB)\n\tMOVD $771, R12\n\tB    callbackasm1(SB)\n\tMOVD $772, R12\n\tB    callbackasm1(SB)\n\tMOVD $773, R12\n\tB    callbackasm1(SB)\n\tMOVD $774, R12\n\tB    callbackasm1(SB)\n\tMOVD $775, R12\n\tB    callbackasm1(SB)\n\tMOVD $776, R12\n\tB    callbackasm1(SB)\n\tMOVD $777, R12\n\tB    callbackasm1(SB)\n\tMOVD $778, R12\n\tB    callbackasm1(SB)\n\tMOVD $779, R12\n\tB    callbackasm1(SB)\n\tMOVD $780, R12\n\tB    callbackasm1(SB)\n\tMOVD $781, R12\n\tB    callbackasm1(SB)\n\tMOVD $782, R12\n\tB    callbackasm1(SB)\n\tMOVD $783, R12\n\tB    callbackasm1(SB)\n\tMOVD $784, R12\n\tB    callbackasm1(SB)\n\tMOVD $785, R12\n\tB    callbackasm1(SB)\n\tMOVD $786, R12\n\tB    callbackasm1(SB)\n\tMOVD $787, R12\n\tB    callbackasm1(SB)\n\tMOVD $788, R12\n\tB    callbackasm1(SB)\n\tMOVD $789, R12\n\tB    callbackasm1(SB)\n\tMOVD $790, R12\n\tB    callbackasm1(SB)\n\tMOVD $791, R12\n\tB    callbackasm1(SB)\n\tMOVD $792, R12\n\tB    callbackasm1(SB)\n\tMOVD $793, R12\n\tB    callbackasm1(SB)\n\tMOVD $794, R12\n\tB    callbackasm1(SB)\n\tMOVD $795, R12\n\tB    callbackasm1(SB)\n\tMOVD $796, R12\n\tB    callbackasm1(SB)\n\tMOVD $797, R12\n\tB    callbackasm1(SB)\n\tMOVD $798, R12\n\tB    callbackasm1(SB)\n\tMOVD $799, R12\n\tB    callbackasm1(SB)\n\tMOVD $800, R12\n\tB    callbackasm1(SB)\n\tMOVD $801, R12\n\tB    callbackasm1(SB)\n\tMOVD $802, R12\n\tB    callbackasm1(SB)\n\tMOVD $803, R12\n\tB    callbackasm1(SB)\n\tMOVD $804, R12\n\tB    callbackasm1(SB)\n\tMOVD $805, R12\n\tB    callbackasm1(SB)\n\tMOVD $806, R12\n\tB    callbackasm1(SB)\n\tMOVD $807, R12\n\tB    callbackasm1(SB)\n\tMOVD $808, R12\n\tB    callbackasm1(SB)\n\tMOVD $809, R12\n\tB    callbackasm1(SB)\n\tMOVD $810, R12\n\tB    callbackasm1(SB)\n\tMOVD $811, R12\n\tB    callbackasm1(SB)\n\tMOVD $812, R12\n\tB    callbackasm1(SB)\n\tMOVD $813, R12\n\tB    callbackasm1(SB)\n\tMOVD $814, R12\n\tB    callbackasm1(SB)\n\tMOVD $815, R12\n\tB    callbackasm1(SB)\n\tMOVD $816, R12\n\tB    callbackasm1(SB)\n\tMOVD $817, R12\n\tB    callbackasm1(SB)\n\tMOVD $818, R12\n\tB    callbackasm1(SB)\n\tMOVD $819, R12\n\tB    callbackasm1(SB)\n\tMOVD $820, R12\n\tB    callbackasm1(SB)\n\tMOVD $821, R12\n\tB    callbackasm1(SB)\n\tMOVD $822, R12\n\tB    callbackasm1(SB)\n\tMOVD $823, R12\n\tB    callbackasm1(SB)\n\tMOVD $824, R12\n\tB    callbackasm1(SB)\n\tMOVD $825, R12\n\tB    callbackasm1(SB)\n\tMOVD $826, R12\n\tB    callbackasm1(SB)\n\tMOVD $827, R12\n\tB    callbackasm1(SB)\n\tMOVD $828, R12\n\tB    callbackasm1(SB)\n\tMOVD $829, R12\n\tB    callbackasm1(SB)\n\tMOVD $830, R12\n\tB    callbackasm1(SB)\n\tMOVD $831, R12\n\tB    callbackasm1(SB)\n\tMOVD $832, R12\n\tB    callbackasm1(SB)\n\tMOVD $833, R12\n\tB    callbackasm1(SB)\n\tMOVD $834, R12\n\tB    callbackasm1(SB)\n\tMOVD $835, R12\n\tB    callbackasm1(SB)\n\tMOVD $836, R12\n\tB    callbackasm1(SB)\n\tMOVD $837, R12\n\tB    callbackasm1(SB)\n\tMOVD $838, R12\n\tB    callbackasm1(SB)\n\tMOVD $839, R12\n\tB    callbackasm1(SB)\n\tMOVD $840, R12\n\tB    callbackasm1(SB)\n\tMOVD $841, R12\n\tB    callbackasm1(SB)\n\tMOVD $842, R12\n\tB    callbackasm1(SB)\n\tMOVD $843, R12\n\tB    callbackasm1(SB)\n\tMOVD $844, R12\n\tB    callbackasm1(SB)\n\tMOVD $845, R12\n\tB    callbackasm1(SB)\n\tMOVD $846, R12\n\tB    callbackasm1(SB)\n\tMOVD $847, R12\n\tB    callbackasm1(SB)\n\tMOVD $848, R12\n\tB    callbackasm1(SB)\n\tMOVD $849, R12\n\tB    callbackasm1(SB)\n\tMOVD $850, R12\n\tB    callbackasm1(SB)\n\tMOVD $851, R12\n\tB    callbackasm1(SB)\n\tMOVD $852, R12\n\tB    callbackasm1(SB)\n\tMOVD $853, R12\n\tB    callbackasm1(SB)\n\tMOVD $854, R12\n\tB    callbackasm1(SB)\n\tMOVD $855, R12\n\tB    callbackasm1(SB)\n\tMOVD $856, R12\n\tB    callbackasm1(SB)\n\tMOVD $857, R12\n\tB    callbackasm1(SB)\n\tMOVD $858, R12\n\tB    callbackasm1(SB)\n\tMOVD $859, R12\n\tB    callbackasm1(SB)\n\tMOVD $860, R12\n\tB    callbackasm1(SB)\n\tMOVD $861, R12\n\tB    callbackasm1(SB)\n\tMOVD $862, R12\n\tB    callbackasm1(SB)\n\tMOVD $863, R12\n\tB    callbackasm1(SB)\n\tMOVD $864, R12\n\tB    callbackasm1(SB)\n\tMOVD $865, R12\n\tB    callbackasm1(SB)\n\tMOVD $866, R12\n\tB    callbackasm1(SB)\n\tMOVD $867, R12\n\tB    callbackasm1(SB)\n\tMOVD $868, R12\n\tB    callbackasm1(SB)\n\tMOVD $869, R12\n\tB    callbackasm1(SB)\n\tMOVD $870, R12\n\tB    callbackasm1(SB)\n\tMOVD $871, R12\n\tB    callbackasm1(SB)\n\tMOVD $872, R12\n\tB    callbackasm1(SB)\n\tMOVD $873, R12\n\tB    callbackasm1(SB)\n\tMOVD $874, R12\n\tB    callbackasm1(SB)\n\tMOVD $875, R12\n\tB    callbackasm1(SB)\n\tMOVD $876, R12\n\tB    callbackasm1(SB)\n\tMOVD $877, R12\n\tB    callbackasm1(SB)\n\tMOVD $878, R12\n\tB    callbackasm1(SB)\n\tMOVD $879, R12\n\tB    callbackasm1(SB)\n\tMOVD $880, R12\n\tB    callbackasm1(SB)\n\tMOVD $881, R12\n\tB    callbackasm1(SB)\n\tMOVD $882, R12\n\tB    callbackasm1(SB)\n\tMOVD $883, R12\n\tB    callbackasm1(SB)\n\tMOVD $884, R12\n\tB    callbackasm1(SB)\n\tMOVD $885, R12\n\tB    callbackasm1(SB)\n\tMOVD $886, R12\n\tB    callbackasm1(SB)\n\tMOVD $887, R12\n\tB    callbackasm1(SB)\n\tMOVD $888, R12\n\tB    callbackasm1(SB)\n\tMOVD $889, R12\n\tB    callbackasm1(SB)\n\tMOVD $890, R12\n\tB    callbackasm1(SB)\n\tMOVD $891, R12\n\tB    callbackasm1(SB)\n\tMOVD $892, R12\n\tB    callbackasm1(SB)\n\tMOVD $893, R12\n\tB    callbackasm1(SB)\n\tMOVD $894, R12\n\tB    callbackasm1(SB)\n\tMOVD $895, R12\n\tB    callbackasm1(SB)\n\tMOVD $896, R12\n\tB    callbackasm1(SB)\n\tMOVD $897, R12\n\tB    callbackasm1(SB)\n\tMOVD $898, R12\n\tB    callbackasm1(SB)\n\tMOVD $899, R12\n\tB    callbackasm1(SB)\n\tMOVD $900, R12\n\tB    callbackasm1(SB)\n\tMOVD $901, R12\n\tB    callbackasm1(SB)\n\tMOVD $902, R12\n\tB    callbackasm1(SB)\n\tMOVD $903, R12\n\tB    callbackasm1(SB)\n\tMOVD $904, R12\n\tB    callbackasm1(SB)\n\tMOVD $905, R12\n\tB    callbackasm1(SB)\n\tMOVD $906, R12\n\tB    callbackasm1(SB)\n\tMOVD $907, R12\n\tB    callbackasm1(SB)\n\tMOVD $908, R12\n\tB    callbackasm1(SB)\n\tMOVD $909, R12\n\tB    callbackasm1(SB)\n\tMOVD $910, R12\n\tB    callbackasm1(SB)\n\tMOVD $911, R12\n\tB    callbackasm1(SB)\n\tMOVD $912, R12\n\tB    callbackasm1(SB)\n\tMOVD $913, R12\n\tB    callbackasm1(SB)\n\tMOVD $914, R12\n\tB    callbackasm1(SB)\n\tMOVD $915, R12\n\tB    callbackasm1(SB)\n\tMOVD $916, R12\n\tB    callbackasm1(SB)\n\tMOVD $917, R12\n\tB    callbackasm1(SB)\n\tMOVD $918, R12\n\tB    callbackasm1(SB)\n\tMOVD $919, R12\n\tB    callbackasm1(SB)\n\tMOVD $920, R12\n\tB    callbackasm1(SB)\n\tMOVD $921, R12\n\tB    callbackasm1(SB)\n\tMOVD $922, R12\n\tB    callbackasm1(SB)\n\tMOVD $923, R12\n\tB    callbackasm1(SB)\n\tMOVD $924, R12\n\tB    callbackasm1(SB)\n\tMOVD $925, R12\n\tB    callbackasm1(SB)\n\tMOVD $926, R12\n\tB    callbackasm1(SB)\n\tMOVD $927, R12\n\tB    callbackasm1(SB)\n\tMOVD $928, R12\n\tB    callbackasm1(SB)\n\tMOVD $929, R12\n\tB    callbackasm1(SB)\n\tMOVD $930, R12\n\tB    callbackasm1(SB)\n\tMOVD $931, R12\n\tB    callbackasm1(SB)\n\tMOVD $932, R12\n\tB    callbackasm1(SB)\n\tMOVD $933, R12\n\tB    callbackasm1(SB)\n\tMOVD $934, R12\n\tB    callbackasm1(SB)\n\tMOVD $935, R12\n\tB    callbackasm1(SB)\n\tMOVD $936, R12\n\tB    callbackasm1(SB)\n\tMOVD $937, R12\n\tB    callbackasm1(SB)\n\tMOVD $938, R12\n\tB    callbackasm1(SB)\n\tMOVD $939, R12\n\tB    callbackasm1(SB)\n\tMOVD $940, R12\n\tB    callbackasm1(SB)\n\tMOVD $941, R12\n\tB    callbackasm1(SB)\n\tMOVD $942, R12\n\tB    callbackasm1(SB)\n\tMOVD $943, R12\n\tB    callbackasm1(SB)\n\tMOVD $944, R12\n\tB    callbackasm1(SB)\n\tMOVD $945, R12\n\tB    callbackasm1(SB)\n\tMOVD $946, R12\n\tB    callbackasm1(SB)\n\tMOVD $947, R12\n\tB    callbackasm1(SB)\n\tMOVD $948, R12\n\tB    callbackasm1(SB)\n\tMOVD $949, R12\n\tB    callbackasm1(SB)\n\tMOVD $950, R12\n\tB    callbackasm1(SB)\n\tMOVD $951, R12\n\tB    callbackasm1(SB)\n\tMOVD $952, R12\n\tB    callbackasm1(SB)\n\tMOVD $953, R12\n\tB    callbackasm1(SB)\n\tMOVD $954, R12\n\tB    callbackasm1(SB)\n\tMOVD $955, R12\n\tB    callbackasm1(SB)\n\tMOVD $956, R12\n\tB    callbackasm1(SB)\n\tMOVD $957, R12\n\tB    callbackasm1(SB)\n\tMOVD $958, R12\n\tB    callbackasm1(SB)\n\tMOVD $959, R12\n\tB    callbackasm1(SB)\n\tMOVD $960, R12\n\tB    callbackasm1(SB)\n\tMOVD $961, R12\n\tB    callbackasm1(SB)\n\tMOVD $962, R12\n\tB    callbackasm1(SB)\n\tMOVD $963, R12\n\tB    callbackasm1(SB)\n\tMOVD $964, R12\n\tB    callbackasm1(SB)\n\tMOVD $965, R12\n\tB    callbackasm1(SB)\n\tMOVD $966, R12\n\tB    callbackasm1(SB)\n\tMOVD $967, R12\n\tB    callbackasm1(SB)\n\tMOVD $968, R12\n\tB    callbackasm1(SB)\n\tMOVD $969, R12\n\tB    callbackasm1(SB)\n\tMOVD $970, R12\n\tB    callbackasm1(SB)\n\tMOVD $971, R12\n\tB    callbackasm1(SB)\n\tMOVD $972, R12\n\tB    callbackasm1(SB)\n\tMOVD $973, R12\n\tB    callbackasm1(SB)\n\tMOVD $974, R12\n\tB    callbackasm1(SB)\n\tMOVD $975, R12\n\tB    callbackasm1(SB)\n\tMOVD $976, R12\n\tB    callbackasm1(SB)\n\tMOVD $977, R12\n\tB    callbackasm1(SB)\n\tMOVD $978, R12\n\tB    callbackasm1(SB)\n\tMOVD $979, R12\n\tB    callbackasm1(SB)\n\tMOVD $980, R12\n\tB    callbackasm1(SB)\n\tMOVD $981, R12\n\tB    callbackasm1(SB)\n\tMOVD $982, R12\n\tB    callbackasm1(SB)\n\tMOVD $983, R12\n\tB    callbackasm1(SB)\n\tMOVD $984, R12\n\tB    callbackasm1(SB)\n\tMOVD $985, R12\n\tB    callbackasm1(SB)\n\tMOVD $986, R12\n\tB    callbackasm1(SB)\n\tMOVD $987, R12\n\tB    callbackasm1(SB)\n\tMOVD $988, R12\n\tB    callbackasm1(SB)\n\tMOVD $989, R12\n\tB    callbackasm1(SB)\n\tMOVD $990, R12\n\tB    callbackasm1(SB)\n\tMOVD $991, R12\n\tB    callbackasm1(SB)\n\tMOVD $992, R12\n\tB    callbackasm1(SB)\n\tMOVD $993, R12\n\tB    callbackasm1(SB)\n\tMOVD $994, R12\n\tB    callbackasm1(SB)\n\tMOVD $995, R12\n\tB    callbackasm1(SB)\n\tMOVD $996, R12\n\tB    callbackasm1(SB)\n\tMOVD $997, R12\n\tB    callbackasm1(SB)\n\tMOVD $998, R12\n\tB    callbackasm1(SB)\n\tMOVD $999, R12\n\tB    callbackasm1(SB)\n\tMOVD $1000, R12\n\tB    callbackasm1(SB)\n\tMOVD $1001, R12\n\tB    callbackasm1(SB)\n\tMOVD $1002, R12\n\tB    callbackasm1(SB)\n\tMOVD $1003, R12\n\tB    callbackasm1(SB)\n\tMOVD $1004, R12\n\tB    callbackasm1(SB)\n\tMOVD $1005, R12\n\tB    callbackasm1(SB)\n\tMOVD $1006, R12\n\tB    callbackasm1(SB)\n\tMOVD $1007, R12\n\tB    callbackasm1(SB)\n\tMOVD $1008, R12\n\tB    callbackasm1(SB)\n\tMOVD $1009, R12\n\tB    callbackasm1(SB)\n\tMOVD $1010, R12\n\tB    callbackasm1(SB)\n\tMOVD $1011, R12\n\tB    callbackasm1(SB)\n\tMOVD $1012, R12\n\tB    callbackasm1(SB)\n\tMOVD $1013, R12\n\tB    callbackasm1(SB)\n\tMOVD $1014, R12\n\tB    callbackasm1(SB)\n\tMOVD $1015, R12\n\tB    callbackasm1(SB)\n\tMOVD $1016, R12\n\tB    callbackasm1(SB)\n\tMOVD $1017, R12\n\tB    callbackasm1(SB)\n\tMOVD $1018, R12\n\tB    callbackasm1(SB)\n\tMOVD $1019, R12\n\tB    callbackasm1(SB)\n\tMOVD $1020, R12\n\tB    callbackasm1(SB)\n\tMOVD $1021, R12\n\tB    callbackasm1(SB)\n\tMOVD $1022, R12\n\tB    callbackasm1(SB)\n\tMOVD $1023, R12\n\tB    callbackasm1(SB)\n\tMOVD $1024, R12\n\tB    callbackasm1(SB)\n\tMOVD $1025, R12\n\tB    callbackasm1(SB)\n\tMOVD $1026, R12\n\tB    callbackasm1(SB)\n\tMOVD $1027, R12\n\tB    callbackasm1(SB)\n\tMOVD $1028, R12\n\tB    callbackasm1(SB)\n\tMOVD $1029, R12\n\tB    callbackasm1(SB)\n\tMOVD $1030, R12\n\tB    callbackasm1(SB)\n\tMOVD $1031, R12\n\tB    callbackasm1(SB)\n\tMOVD $1032, R12\n\tB    callbackasm1(SB)\n\tMOVD $1033, R12\n\tB    callbackasm1(SB)\n\tMOVD $1034, R12\n\tB    callbackasm1(SB)\n\tMOVD $1035, R12\n\tB    callbackasm1(SB)\n\tMOVD $1036, R12\n\tB    callbackasm1(SB)\n\tMOVD $1037, R12\n\tB    callbackasm1(SB)\n\tMOVD $1038, R12\n\tB    callbackasm1(SB)\n\tMOVD $1039, R12\n\tB    callbackasm1(SB)\n\tMOVD $1040, R12\n\tB    callbackasm1(SB)\n\tMOVD $1041, R12\n\tB    callbackasm1(SB)\n\tMOVD $1042, R12\n\tB    callbackasm1(SB)\n\tMOVD $1043, R12\n\tB    callbackasm1(SB)\n\tMOVD $1044, R12\n\tB    callbackasm1(SB)\n\tMOVD $1045, R12\n\tB    callbackasm1(SB)\n\tMOVD $1046, R12\n\tB    callbackasm1(SB)\n\tMOVD $1047, R12\n\tB    callbackasm1(SB)\n\tMOVD $1048, R12\n\tB    callbackasm1(SB)\n\tMOVD $1049, R12\n\tB    callbackasm1(SB)\n\tMOVD $1050, R12\n\tB    callbackasm1(SB)\n\tMOVD $1051, R12\n\tB    callbackasm1(SB)\n\tMOVD $1052, R12\n\tB    callbackasm1(SB)\n\tMOVD $1053, R12\n\tB    callbackasm1(SB)\n\tMOVD $1054, R12\n\tB    callbackasm1(SB)\n\tMOVD $1055, R12\n\tB    callbackasm1(SB)\n\tMOVD $1056, R12\n\tB    callbackasm1(SB)\n\tMOVD $1057, R12\n\tB    callbackasm1(SB)\n\tMOVD $1058, R12\n\tB    callbackasm1(SB)\n\tMOVD $1059, R12\n\tB    callbackasm1(SB)\n\tMOVD $1060, R12\n\tB    callbackasm1(SB)\n\tMOVD $1061, R12\n\tB    callbackasm1(SB)\n\tMOVD $1062, R12\n\tB    callbackasm1(SB)\n\tMOVD $1063, R12\n\tB    callbackasm1(SB)\n\tMOVD $1064, R12\n\tB    callbackasm1(SB)\n\tMOVD $1065, R12\n\tB    callbackasm1(SB)\n\tMOVD $1066, R12\n\tB    callbackasm1(SB)\n\tMOVD $1067, R12\n\tB    callbackasm1(SB)\n\tMOVD $1068, R12\n\tB    callbackasm1(SB)\n\tMOVD $1069, R12\n\tB    callbackasm1(SB)\n\tMOVD $1070, R12\n\tB    callbackasm1(SB)\n\tMOVD $1071, R12\n\tB    callbackasm1(SB)\n\tMOVD $1072, R12\n\tB    callbackasm1(SB)\n\tMOVD $1073, R12\n\tB    callbackasm1(SB)\n\tMOVD $1074, R12\n\tB    callbackasm1(SB)\n\tMOVD $1075, R12\n\tB    callbackasm1(SB)\n\tMOVD $1076, R12\n\tB    callbackasm1(SB)\n\tMOVD $1077, R12\n\tB    callbackasm1(SB)\n\tMOVD $1078, R12\n\tB    callbackasm1(SB)\n\tMOVD $1079, R12\n\tB    callbackasm1(SB)\n\tMOVD $1080, R12\n\tB    callbackasm1(SB)\n\tMOVD $1081, R12\n\tB    callbackasm1(SB)\n\tMOVD $1082, R12\n\tB    callbackasm1(SB)\n\tMOVD $1083, R12\n\tB    callbackasm1(SB)\n\tMOVD $1084, R12\n\tB    callbackasm1(SB)\n\tMOVD $1085, R12\n\tB    callbackasm1(SB)\n\tMOVD $1086, R12\n\tB    callbackasm1(SB)\n\tMOVD $1087, R12\n\tB    callbackasm1(SB)\n\tMOVD $1088, R12\n\tB    callbackasm1(SB)\n\tMOVD $1089, R12\n\tB    callbackasm1(SB)\n\tMOVD $1090, R12\n\tB    callbackasm1(SB)\n\tMOVD $1091, R12\n\tB    callbackasm1(SB)\n\tMOVD $1092, R12\n\tB    callbackasm1(SB)\n\tMOVD $1093, R12\n\tB    callbackasm1(SB)\n\tMOVD $1094, R12\n\tB    callbackasm1(SB)\n\tMOVD $1095, R12\n\tB    callbackasm1(SB)\n\tMOVD $1096, R12\n\tB    callbackasm1(SB)\n\tMOVD $1097, R12\n\tB    callbackasm1(SB)\n\tMOVD $1098, R12\n\tB    callbackasm1(SB)\n\tMOVD $1099, R12\n\tB    callbackasm1(SB)\n\tMOVD $1100, R12\n\tB    callbackasm1(SB)\n\tMOVD $1101, R12\n\tB    callbackasm1(SB)\n\tMOVD $1102, R12\n\tB    callbackasm1(SB)\n\tMOVD $1103, R12\n\tB    callbackasm1(SB)\n\tMOVD $1104, R12\n\tB    callbackasm1(SB)\n\tMOVD $1105, R12\n\tB    callbackasm1(SB)\n\tMOVD $1106, R12\n\tB    callbackasm1(SB)\n\tMOVD $1107, R12\n\tB    callbackasm1(SB)\n\tMOVD $1108, R12\n\tB    callbackasm1(SB)\n\tMOVD $1109, R12\n\tB    callbackasm1(SB)\n\tMOVD $1110, R12\n\tB    callbackasm1(SB)\n\tMOVD $1111, R12\n\tB    callbackasm1(SB)\n\tMOVD $1112, R12\n\tB    callbackasm1(SB)\n\tMOVD $1113, R12\n\tB    callbackasm1(SB)\n\tMOVD $1114, R12\n\tB    callbackasm1(SB)\n\tMOVD $1115, R12\n\tB    callbackasm1(SB)\n\tMOVD $1116, R12\n\tB    callbackasm1(SB)\n\tMOVD $1117, R12\n\tB    callbackasm1(SB)\n\tMOVD $1118, R12\n\tB    callbackasm1(SB)\n\tMOVD $1119, R12\n\tB    callbackasm1(SB)\n\tMOVD $1120, R12\n\tB    callbackasm1(SB)\n\tMOVD $1121, R12\n\tB    callbackasm1(SB)\n\tMOVD $1122, R12\n\tB    callbackasm1(SB)\n\tMOVD $1123, R12\n\tB    callbackasm1(SB)\n\tMOVD $1124, R12\n\tB    callbackasm1(SB)\n\tMOVD $1125, R12\n\tB    callbackasm1(SB)\n\tMOVD $1126, R12\n\tB    callbackasm1(SB)\n\tMOVD $1127, R12\n\tB    callbackasm1(SB)\n\tMOVD $1128, R12\n\tB    callbackasm1(SB)\n\tMOVD $1129, R12\n\tB    callbackasm1(SB)\n\tMOVD $1130, R12\n\tB    callbackasm1(SB)\n\tMOVD $1131, R12\n\tB    callbackasm1(SB)\n\tMOVD $1132, R12\n\tB    callbackasm1(SB)\n\tMOVD $1133, R12\n\tB    callbackasm1(SB)\n\tMOVD $1134, R12\n\tB    callbackasm1(SB)\n\tMOVD $1135, R12\n\tB    callbackasm1(SB)\n\tMOVD $1136, R12\n\tB    callbackasm1(SB)\n\tMOVD $1137, R12\n\tB    callbackasm1(SB)\n\tMOVD $1138, R12\n\tB    callbackasm1(SB)\n\tMOVD $1139, R12\n\tB    callbackasm1(SB)\n\tMOVD $1140, R12\n\tB    callbackasm1(SB)\n\tMOVD $1141, R12\n\tB    callbackasm1(SB)\n\tMOVD $1142, R12\n\tB    callbackasm1(SB)\n\tMOVD $1143, R12\n\tB    callbackasm1(SB)\n\tMOVD $1144, R12\n\tB    callbackasm1(SB)\n\tMOVD $1145, R12\n\tB    callbackasm1(SB)\n\tMOVD $1146, R12\n\tB    callbackasm1(SB)\n\tMOVD $1147, R12\n\tB    callbackasm1(SB)\n\tMOVD $1148, R12\n\tB    callbackasm1(SB)\n\tMOVD $1149, R12\n\tB    callbackasm1(SB)\n\tMOVD $1150, R12\n\tB    callbackasm1(SB)\n\tMOVD $1151, R12\n\tB    callbackasm1(SB)\n\tMOVD $1152, R12\n\tB    callbackasm1(SB)\n\tMOVD $1153, R12\n\tB    callbackasm1(SB)\n\tMOVD $1154, R12\n\tB    callbackasm1(SB)\n\tMOVD $1155, R12\n\tB    callbackasm1(SB)\n\tMOVD $1156, R12\n\tB    callbackasm1(SB)\n\tMOVD $1157, R12\n\tB    callbackasm1(SB)\n\tMOVD $1158, R12\n\tB    callbackasm1(SB)\n\tMOVD $1159, R12\n\tB    callbackasm1(SB)\n\tMOVD $1160, R12\n\tB    callbackasm1(SB)\n\tMOVD $1161, R12\n\tB    callbackasm1(SB)\n\tMOVD $1162, R12\n\tB    callbackasm1(SB)\n\tMOVD $1163, R12\n\tB    callbackasm1(SB)\n\tMOVD $1164, R12\n\tB    callbackasm1(SB)\n\tMOVD $1165, R12\n\tB    callbackasm1(SB)\n\tMOVD $1166, R12\n\tB    callbackasm1(SB)\n\tMOVD $1167, R12\n\tB    callbackasm1(SB)\n\tMOVD $1168, R12\n\tB    callbackasm1(SB)\n\tMOVD $1169, R12\n\tB    callbackasm1(SB)\n\tMOVD $1170, R12\n\tB    callbackasm1(SB)\n\tMOVD $1171, R12\n\tB    callbackasm1(SB)\n\tMOVD $1172, R12\n\tB    callbackasm1(SB)\n\tMOVD $1173, R12\n\tB    callbackasm1(SB)\n\tMOVD $1174, R12\n\tB    callbackasm1(SB)\n\tMOVD $1175, R12\n\tB    callbackasm1(SB)\n\tMOVD $1176, R12\n\tB    callbackasm1(SB)\n\tMOVD $1177, R12\n\tB    callbackasm1(SB)\n\tMOVD $1178, R12\n\tB    callbackasm1(SB)\n\tMOVD $1179, R12\n\tB    callbackasm1(SB)\n\tMOVD $1180, R12\n\tB    callbackasm1(SB)\n\tMOVD $1181, R12\n\tB    callbackasm1(SB)\n\tMOVD $1182, R12\n\tB    callbackasm1(SB)\n\tMOVD $1183, R12\n\tB    callbackasm1(SB)\n\tMOVD $1184, R12\n\tB    callbackasm1(SB)\n\tMOVD $1185, R12\n\tB    callbackasm1(SB)\n\tMOVD $1186, R12\n\tB    callbackasm1(SB)\n\tMOVD $1187, R12\n\tB    callbackasm1(SB)\n\tMOVD $1188, R12\n\tB    callbackasm1(SB)\n\tMOVD $1189, R12\n\tB    callbackasm1(SB)\n\tMOVD $1190, R12\n\tB    callbackasm1(SB)\n\tMOVD $1191, R12\n\tB    callbackasm1(SB)\n\tMOVD $1192, R12\n\tB    callbackasm1(SB)\n\tMOVD $1193, R12\n\tB    callbackasm1(SB)\n\tMOVD $1194, R12\n\tB    callbackasm1(SB)\n\tMOVD $1195, R12\n\tB    callbackasm1(SB)\n\tMOVD $1196, R12\n\tB    callbackasm1(SB)\n\tMOVD $1197, R12\n\tB    callbackasm1(SB)\n\tMOVD $1198, R12\n\tB    callbackasm1(SB)\n\tMOVD $1199, R12\n\tB    callbackasm1(SB)\n\tMOVD $1200, R12\n\tB    callbackasm1(SB)\n\tMOVD $1201, R12\n\tB    callbackasm1(SB)\n\tMOVD $1202, R12\n\tB    callbackasm1(SB)\n\tMOVD $1203, R12\n\tB    callbackasm1(SB)\n\tMOVD $1204, R12\n\tB    callbackasm1(SB)\n\tMOVD $1205, R12\n\tB    callbackasm1(SB)\n\tMOVD $1206, R12\n\tB    callbackasm1(SB)\n\tMOVD $1207, R12\n\tB    callbackasm1(SB)\n\tMOVD $1208, R12\n\tB    callbackasm1(SB)\n\tMOVD $1209, R12\n\tB    callbackasm1(SB)\n\tMOVD $1210, R12\n\tB    callbackasm1(SB)\n\tMOVD $1211, R12\n\tB    callbackasm1(SB)\n\tMOVD $1212, R12\n\tB    callbackasm1(SB)\n\tMOVD $1213, R12\n\tB    callbackasm1(SB)\n\tMOVD $1214, R12\n\tB    callbackasm1(SB)\n\tMOVD $1215, R12\n\tB    callbackasm1(SB)\n\tMOVD $1216, R12\n\tB    callbackasm1(SB)\n\tMOVD $1217, R12\n\tB    callbackasm1(SB)\n\tMOVD $1218, R12\n\tB    callbackasm1(SB)\n\tMOVD $1219, R12\n\tB    callbackasm1(SB)\n\tMOVD $1220, R12\n\tB    callbackasm1(SB)\n\tMOVD $1221, R12\n\tB    callbackasm1(SB)\n\tMOVD $1222, R12\n\tB    callbackasm1(SB)\n\tMOVD $1223, R12\n\tB    callbackasm1(SB)\n\tMOVD $1224, R12\n\tB    callbackasm1(SB)\n\tMOVD $1225, R12\n\tB    callbackasm1(SB)\n\tMOVD $1226, R12\n\tB    callbackasm1(SB)\n\tMOVD $1227, R12\n\tB    callbackasm1(SB)\n\tMOVD $1228, R12\n\tB    callbackasm1(SB)\n\tMOVD $1229, R12\n\tB    callbackasm1(SB)\n\tMOVD $1230, R12\n\tB    callbackasm1(SB)\n\tMOVD $1231, R12\n\tB    callbackasm1(SB)\n\tMOVD $1232, R12\n\tB    callbackasm1(SB)\n\tMOVD $1233, R12\n\tB    callbackasm1(SB)\n\tMOVD $1234, R12\n\tB    callbackasm1(SB)\n\tMOVD $1235, R12\n\tB    callbackasm1(SB)\n\tMOVD $1236, R12\n\tB    callbackasm1(SB)\n\tMOVD $1237, R12\n\tB    callbackasm1(SB)\n\tMOVD $1238, R12\n\tB    callbackasm1(SB)\n\tMOVD $1239, R12\n\tB    callbackasm1(SB)\n\tMOVD $1240, R12\n\tB    callbackasm1(SB)\n\tMOVD $1241, R12\n\tB    callbackasm1(SB)\n\tMOVD $1242, R12\n\tB    callbackasm1(SB)\n\tMOVD $1243, R12\n\tB    callbackasm1(SB)\n\tMOVD $1244, R12\n\tB    callbackasm1(SB)\n\tMOVD $1245, R12\n\tB    callbackasm1(SB)\n\tMOVD $1246, R12\n\tB    callbackasm1(SB)\n\tMOVD $1247, R12\n\tB    callbackasm1(SB)\n\tMOVD $1248, R12\n\tB    callbackasm1(SB)\n\tMOVD $1249, R12\n\tB    callbackasm1(SB)\n\tMOVD $1250, R12\n\tB    callbackasm1(SB)\n\tMOVD $1251, R12\n\tB    callbackasm1(SB)\n\tMOVD $1252, R12\n\tB    callbackasm1(SB)\n\tMOVD $1253, R12\n\tB    callbackasm1(SB)\n\tMOVD $1254, R12\n\tB    callbackasm1(SB)\n\tMOVD $1255, R12\n\tB    callbackasm1(SB)\n\tMOVD $1256, R12\n\tB    callbackasm1(SB)\n\tMOVD $1257, R12\n\tB    callbackasm1(SB)\n\tMOVD $1258, R12\n\tB    callbackasm1(SB)\n\tMOVD $1259, R12\n\tB    callbackasm1(SB)\n\tMOVD $1260, R12\n\tB    callbackasm1(SB)\n\tMOVD $1261, R12\n\tB    callbackasm1(SB)\n\tMOVD $1262, R12\n\tB    callbackasm1(SB)\n\tMOVD $1263, R12\n\tB    callbackasm1(SB)\n\tMOVD $1264, R12\n\tB    callbackasm1(SB)\n\tMOVD $1265, R12\n\tB    callbackasm1(SB)\n\tMOVD $1266, R12\n\tB    callbackasm1(SB)\n\tMOVD $1267, R12\n\tB    callbackasm1(SB)\n\tMOVD $1268, R12\n\tB    callbackasm1(SB)\n\tMOVD $1269, R12\n\tB    callbackasm1(SB)\n\tMOVD $1270, R12\n\tB    callbackasm1(SB)\n\tMOVD $1271, R12\n\tB    callbackasm1(SB)\n\tMOVD $1272, R12\n\tB    callbackasm1(SB)\n\tMOVD $1273, R12\n\tB    callbackasm1(SB)\n\tMOVD $1274, R12\n\tB    callbackasm1(SB)\n\tMOVD $1275, R12\n\tB    callbackasm1(SB)\n\tMOVD $1276, R12\n\tB    callbackasm1(SB)\n\tMOVD $1277, R12\n\tB    callbackasm1(SB)\n\tMOVD $1278, R12\n\tB    callbackasm1(SB)\n\tMOVD $1279, R12\n\tB    callbackasm1(SB)\n\tMOVD $1280, R12\n\tB    callbackasm1(SB)\n\tMOVD $1281, R12\n\tB    callbackasm1(SB)\n\tMOVD $1282, R12\n\tB    callbackasm1(SB)\n\tMOVD $1283, R12\n\tB    callbackasm1(SB)\n\tMOVD $1284, R12\n\tB    callbackasm1(SB)\n\tMOVD $1285, R12\n\tB    callbackasm1(SB)\n\tMOVD $1286, R12\n\tB    callbackasm1(SB)\n\tMOVD $1287, R12\n\tB    callbackasm1(SB)\n\tMOVD $1288, R12\n\tB    callbackasm1(SB)\n\tMOVD $1289, R12\n\tB    callbackasm1(SB)\n\tMOVD $1290, R12\n\tB    callbackasm1(SB)\n\tMOVD $1291, R12\n\tB    callbackasm1(SB)\n\tMOVD $1292, R12\n\tB    callbackasm1(SB)\n\tMOVD $1293, R12\n\tB    callbackasm1(SB)\n\tMOVD $1294, R12\n\tB    callbackasm1(SB)\n\tMOVD $1295, R12\n\tB    callbackasm1(SB)\n\tMOVD $1296, R12\n\tB    callbackasm1(SB)\n\tMOVD $1297, R12\n\tB    callbackasm1(SB)\n\tMOVD $1298, R12\n\tB    callbackasm1(SB)\n\tMOVD $1299, R12\n\tB    callbackasm1(SB)\n\tMOVD $1300, R12\n\tB    callbackasm1(SB)\n\tMOVD $1301, R12\n\tB    callbackasm1(SB)\n\tMOVD $1302, R12\n\tB    callbackasm1(SB)\n\tMOVD $1303, R12\n\tB    callbackasm1(SB)\n\tMOVD $1304, R12\n\tB    callbackasm1(SB)\n\tMOVD $1305, R12\n\tB    callbackasm1(SB)\n\tMOVD $1306, R12\n\tB    callbackasm1(SB)\n\tMOVD $1307, R12\n\tB    callbackasm1(SB)\n\tMOVD $1308, R12\n\tB    callbackasm1(SB)\n\tMOVD $1309, R12\n\tB    callbackasm1(SB)\n\tMOVD $1310, R12\n\tB    callbackasm1(SB)\n\tMOVD $1311, R12\n\tB    callbackasm1(SB)\n\tMOVD $1312, R12\n\tB    callbackasm1(SB)\n\tMOVD $1313, R12\n\tB    callbackasm1(SB)\n\tMOVD $1314, R12\n\tB    callbackasm1(SB)\n\tMOVD $1315, R12\n\tB    callbackasm1(SB)\n\tMOVD $1316, R12\n\tB    callbackasm1(SB)\n\tMOVD $1317, R12\n\tB    callbackasm1(SB)\n\tMOVD $1318, R12\n\tB    callbackasm1(SB)\n\tMOVD $1319, R12\n\tB    callbackasm1(SB)\n\tMOVD $1320, R12\n\tB    callbackasm1(SB)\n\tMOVD $1321, R12\n\tB    callbackasm1(SB)\n\tMOVD $1322, R12\n\tB    callbackasm1(SB)\n\tMOVD $1323, R12\n\tB    callbackasm1(SB)\n\tMOVD $1324, R12\n\tB    callbackasm1(SB)\n\tMOVD $1325, R12\n\tB    callbackasm1(SB)\n\tMOVD $1326, R12\n\tB    callbackasm1(SB)\n\tMOVD $1327, R12\n\tB    callbackasm1(SB)\n\tMOVD $1328, R12\n\tB    callbackasm1(SB)\n\tMOVD $1329, R12\n\tB    callbackasm1(SB)\n\tMOVD $1330, R12\n\tB    callbackasm1(SB)\n\tMOVD $1331, R12\n\tB    callbackasm1(SB)\n\tMOVD $1332, R12\n\tB    callbackasm1(SB)\n\tMOVD $1333, R12\n\tB    callbackasm1(SB)\n\tMOVD $1334, R12\n\tB    callbackasm1(SB)\n\tMOVD $1335, R12\n\tB    callbackasm1(SB)\n\tMOVD $1336, R12\n\tB    callbackasm1(SB)\n\tMOVD $1337, R12\n\tB    callbackasm1(SB)\n\tMOVD $1338, R12\n\tB    callbackasm1(SB)\n\tMOVD $1339, R12\n\tB    callbackasm1(SB)\n\tMOVD $1340, R12\n\tB    callbackasm1(SB)\n\tMOVD $1341, R12\n\tB    callbackasm1(SB)\n\tMOVD $1342, R12\n\tB    callbackasm1(SB)\n\tMOVD $1343, R12\n\tB    callbackasm1(SB)\n\tMOVD $1344, R12\n\tB    callbackasm1(SB)\n\tMOVD $1345, R12\n\tB    callbackasm1(SB)\n\tMOVD $1346, R12\n\tB    callbackasm1(SB)\n\tMOVD $1347, R12\n\tB    callbackasm1(SB)\n\tMOVD $1348, R12\n\tB    callbackasm1(SB)\n\tMOVD $1349, R12\n\tB    callbackasm1(SB)\n\tMOVD $1350, R12\n\tB    callbackasm1(SB)\n\tMOVD $1351, R12\n\tB    callbackasm1(SB)\n\tMOVD $1352, R12\n\tB    callbackasm1(SB)\n\tMOVD $1353, R12\n\tB    callbackasm1(SB)\n\tMOVD $1354, R12\n\tB    callbackasm1(SB)\n\tMOVD $1355, R12\n\tB    callbackasm1(SB)\n\tMOVD $1356, R12\n\tB    callbackasm1(SB)\n\tMOVD $1357, R12\n\tB    callbackasm1(SB)\n\tMOVD $1358, R12\n\tB    callbackasm1(SB)\n\tMOVD $1359, R12\n\tB    callbackasm1(SB)\n\tMOVD $1360, R12\n\tB    callbackasm1(SB)\n\tMOVD $1361, R12\n\tB    callbackasm1(SB)\n\tMOVD $1362, R12\n\tB    callbackasm1(SB)\n\tMOVD $1363, R12\n\tB    callbackasm1(SB)\n\tMOVD $1364, R12\n\tB    callbackasm1(SB)\n\tMOVD $1365, R12\n\tB    callbackasm1(SB)\n\tMOVD $1366, R12\n\tB    callbackasm1(SB)\n\tMOVD $1367, R12\n\tB    callbackasm1(SB)\n\tMOVD $1368, R12\n\tB    callbackasm1(SB)\n\tMOVD $1369, R12\n\tB    callbackasm1(SB)\n\tMOVD $1370, R12\n\tB    callbackasm1(SB)\n\tMOVD $1371, R12\n\tB    callbackasm1(SB)\n\tMOVD $1372, R12\n\tB    callbackasm1(SB)\n\tMOVD $1373, R12\n\tB    callbackasm1(SB)\n\tMOVD $1374, R12\n\tB    callbackasm1(SB)\n\tMOVD $1375, R12\n\tB    callbackasm1(SB)\n\tMOVD $1376, R12\n\tB    callbackasm1(SB)\n\tMOVD $1377, R12\n\tB    callbackasm1(SB)\n\tMOVD $1378, R12\n\tB    callbackasm1(SB)\n\tMOVD $1379, R12\n\tB    callbackasm1(SB)\n\tMOVD $1380, R12\n\tB    callbackasm1(SB)\n\tMOVD $1381, R12\n\tB    callbackasm1(SB)\n\tMOVD $1382, R12\n\tB    callbackasm1(SB)\n\tMOVD $1383, R12\n\tB    callbackasm1(SB)\n\tMOVD $1384, R12\n\tB    callbackasm1(SB)\n\tMOVD $1385, R12\n\tB    callbackasm1(SB)\n\tMOVD $1386, R12\n\tB    callbackasm1(SB)\n\tMOVD $1387, R12\n\tB    callbackasm1(SB)\n\tMOVD $1388, R12\n\tB    callbackasm1(SB)\n\tMOVD $1389, R12\n\tB    callbackasm1(SB)\n\tMOVD $1390, R12\n\tB    callbackasm1(SB)\n\tMOVD $1391, R12\n\tB    callbackasm1(SB)\n\tMOVD $1392, R12\n\tB    callbackasm1(SB)\n\tMOVD $1393, R12\n\tB    callbackasm1(SB)\n\tMOVD $1394, R12\n\tB    callbackasm1(SB)\n\tMOVD $1395, R12\n\tB    callbackasm1(SB)\n\tMOVD $1396, R12\n\tB    callbackasm1(SB)\n\tMOVD $1397, R12\n\tB    callbackasm1(SB)\n\tMOVD $1398, R12\n\tB    callbackasm1(SB)\n\tMOVD $1399, R12\n\tB    callbackasm1(SB)\n\tMOVD $1400, R12\n\tB    callbackasm1(SB)\n\tMOVD $1401, R12\n\tB    callbackasm1(SB)\n\tMOVD $1402, R12\n\tB    callbackasm1(SB)\n\tMOVD $1403, R12\n\tB    callbackasm1(SB)\n\tMOVD $1404, R12\n\tB    callbackasm1(SB)\n\tMOVD $1405, R12\n\tB    callbackasm1(SB)\n\tMOVD $1406, R12\n\tB    callbackasm1(SB)\n\tMOVD $1407, R12\n\tB    callbackasm1(SB)\n\tMOVD $1408, R12\n\tB    callbackasm1(SB)\n\tMOVD $1409, R12\n\tB    callbackasm1(SB)\n\tMOVD $1410, R12\n\tB    callbackasm1(SB)\n\tMOVD $1411, R12\n\tB    callbackasm1(SB)\n\tMOVD $1412, R12\n\tB    callbackasm1(SB)\n\tMOVD $1413, R12\n\tB    callbackasm1(SB)\n\tMOVD $1414, R12\n\tB    callbackasm1(SB)\n\tMOVD $1415, R12\n\tB    callbackasm1(SB)\n\tMOVD $1416, R12\n\tB    callbackasm1(SB)\n\tMOVD $1417, R12\n\tB    callbackasm1(SB)\n\tMOVD $1418, R12\n\tB    callbackasm1(SB)\n\tMOVD $1419, R12\n\tB    callbackasm1(SB)\n\tMOVD $1420, R12\n\tB    callbackasm1(SB)\n\tMOVD $1421, R12\n\tB    callbackasm1(SB)\n\tMOVD $1422, R12\n\tB    callbackasm1(SB)\n\tMOVD $1423, R12\n\tB    callbackasm1(SB)\n\tMOVD $1424, R12\n\tB    callbackasm1(SB)\n\tMOVD $1425, R12\n\tB    callbackasm1(SB)\n\tMOVD $1426, R12\n\tB    callbackasm1(SB)\n\tMOVD $1427, R12\n\tB    callbackasm1(SB)\n\tMOVD $1428, R12\n\tB    callbackasm1(SB)\n\tMOVD $1429, R12\n\tB    callbackasm1(SB)\n\tMOVD $1430, R12\n\tB    callbackasm1(SB)\n\tMOVD $1431, R12\n\tB    callbackasm1(SB)\n\tMOVD $1432, R12\n\tB    callbackasm1(SB)\n\tMOVD $1433, R12\n\tB    callbackasm1(SB)\n\tMOVD $1434, R12\n\tB    callbackasm1(SB)\n\tMOVD $1435, R12\n\tB    callbackasm1(SB)\n\tMOVD $1436, R12\n\tB    callbackasm1(SB)\n\tMOVD $1437, R12\n\tB    callbackasm1(SB)\n\tMOVD $1438, R12\n\tB    callbackasm1(SB)\n\tMOVD $1439, R12\n\tB    callbackasm1(SB)\n\tMOVD $1440, R12\n\tB    callbackasm1(SB)\n\tMOVD $1441, R12\n\tB    callbackasm1(SB)\n\tMOVD $1442, R12\n\tB    callbackasm1(SB)\n\tMOVD $1443, R12\n\tB    callbackasm1(SB)\n\tMOVD $1444, R12\n\tB    callbackasm1(SB)\n\tMOVD $1445, R12\n\tB    callbackasm1(SB)\n\tMOVD $1446, R12\n\tB    callbackasm1(SB)\n\tMOVD $1447, R12\n\tB    callbackasm1(SB)\n\tMOVD $1448, R12\n\tB    callbackasm1(SB)\n\tMOVD $1449, R12\n\tB    callbackasm1(SB)\n\tMOVD $1450, R12\n\tB    callbackasm1(SB)\n\tMOVD $1451, R12\n\tB    callbackasm1(SB)\n\tMOVD $1452, R12\n\tB    callbackasm1(SB)\n\tMOVD $1453, R12\n\tB    callbackasm1(SB)\n\tMOVD $1454, R12\n\tB    callbackasm1(SB)\n\tMOVD $1455, R12\n\tB    callbackasm1(SB)\n\tMOVD $1456, R12\n\tB    callbackasm1(SB)\n\tMOVD $1457, R12\n\tB    callbackasm1(SB)\n\tMOVD $1458, R12\n\tB    callbackasm1(SB)\n\tMOVD $1459, R12\n\tB    callbackasm1(SB)\n\tMOVD $1460, R12\n\tB    callbackasm1(SB)\n\tMOVD $1461, R12\n\tB    callbackasm1(SB)\n\tMOVD $1462, R12\n\tB    callbackasm1(SB)\n\tMOVD $1463, R12\n\tB    callbackasm1(SB)\n\tMOVD $1464, R12\n\tB    callbackasm1(SB)\n\tMOVD $1465, R12\n\tB    callbackasm1(SB)\n\tMOVD $1466, R12\n\tB    callbackasm1(SB)\n\tMOVD $1467, R12\n\tB    callbackasm1(SB)\n\tMOVD $1468, R12\n\tB    callbackasm1(SB)\n\tMOVD $1469, R12\n\tB    callbackasm1(SB)\n\tMOVD $1470, R12\n\tB    callbackasm1(SB)\n\tMOVD $1471, R12\n\tB    callbackasm1(SB)\n\tMOVD $1472, R12\n\tB    callbackasm1(SB)\n\tMOVD $1473, R12\n\tB    callbackasm1(SB)\n\tMOVD $1474, R12\n\tB    callbackasm1(SB)\n\tMOVD $1475, R12\n\tB    callbackasm1(SB)\n\tMOVD $1476, R12\n\tB    callbackasm1(SB)\n\tMOVD $1477, R12\n\tB    callbackasm1(SB)\n\tMOVD $1478, R12\n\tB    callbackasm1(SB)\n\tMOVD $1479, R12\n\tB    callbackasm1(SB)\n\tMOVD $1480, R12\n\tB    callbackasm1(SB)\n\tMOVD $1481, R12\n\tB    callbackasm1(SB)\n\tMOVD $1482, R12\n\tB    callbackasm1(SB)\n\tMOVD $1483, R12\n\tB    callbackasm1(SB)\n\tMOVD $1484, R12\n\tB    callbackasm1(SB)\n\tMOVD $1485, R12\n\tB    callbackasm1(SB)\n\tMOVD $1486, R12\n\tB    callbackasm1(SB)\n\tMOVD $1487, R12\n\tB    callbackasm1(SB)\n\tMOVD $1488, R12\n\tB    callbackasm1(SB)\n\tMOVD $1489, R12\n\tB    callbackasm1(SB)\n\tMOVD $1490, R12\n\tB    callbackasm1(SB)\n\tMOVD $1491, R12\n\tB    callbackasm1(SB)\n\tMOVD $1492, R12\n\tB    callbackasm1(SB)\n\tMOVD $1493, R12\n\tB    callbackasm1(SB)\n\tMOVD $1494, R12\n\tB    callbackasm1(SB)\n\tMOVD $1495, R12\n\tB    callbackasm1(SB)\n\tMOVD $1496, R12\n\tB    callbackasm1(SB)\n\tMOVD $1497, R12\n\tB    callbackasm1(SB)\n\tMOVD $1498, R12\n\tB    callbackasm1(SB)\n\tMOVD $1499, R12\n\tB    callbackasm1(SB)\n\tMOVD $1500, R12\n\tB    callbackasm1(SB)\n\tMOVD $1501, R12\n\tB    callbackasm1(SB)\n\tMOVD $1502, R12\n\tB    callbackasm1(SB)\n\tMOVD $1503, R12\n\tB    callbackasm1(SB)\n\tMOVD $1504, R12\n\tB    callbackasm1(SB)\n\tMOVD $1505, R12\n\tB    callbackasm1(SB)\n\tMOVD $1506, R12\n\tB    callbackasm1(SB)\n\tMOVD $1507, R12\n\tB    callbackasm1(SB)\n\tMOVD $1508, R12\n\tB    callbackasm1(SB)\n\tMOVD $1509, R12\n\tB    callbackasm1(SB)\n\tMOVD $1510, R12\n\tB    callbackasm1(SB)\n\tMOVD $1511, R12\n\tB    callbackasm1(SB)\n\tMOVD $1512, R12\n\tB    callbackasm1(SB)\n\tMOVD $1513, R12\n\tB    callbackasm1(SB)\n\tMOVD $1514, R12\n\tB    callbackasm1(SB)\n\tMOVD $1515, R12\n\tB    callbackasm1(SB)\n\tMOVD $1516, R12\n\tB    callbackasm1(SB)\n\tMOVD $1517, R12\n\tB    callbackasm1(SB)\n\tMOVD $1518, R12\n\tB    callbackasm1(SB)\n\tMOVD $1519, R12\n\tB    callbackasm1(SB)\n\tMOVD $1520, R12\n\tB    callbackasm1(SB)\n\tMOVD $1521, R12\n\tB    callbackasm1(SB)\n\tMOVD $1522, R12\n\tB    callbackasm1(SB)\n\tMOVD $1523, R12\n\tB    callbackasm1(SB)\n\tMOVD $1524, R12\n\tB    callbackasm1(SB)\n\tMOVD $1525, R12\n\tB    callbackasm1(SB)\n\tMOVD $1526, R12\n\tB    callbackasm1(SB)\n\tMOVD $1527, R12\n\tB    callbackasm1(SB)\n\tMOVD $1528, R12\n\tB    callbackasm1(SB)\n\tMOVD $1529, R12\n\tB    callbackasm1(SB)\n\tMOVD $1530, R12\n\tB    callbackasm1(SB)\n\tMOVD $1531, R12\n\tB    callbackasm1(SB)\n\tMOVD $1532, R12\n\tB    callbackasm1(SB)\n\tMOVD $1533, R12\n\tB    callbackasm1(SB)\n\tMOVD $1534, R12\n\tB    callbackasm1(SB)\n\tMOVD $1535, R12\n\tB    callbackasm1(SB)\n\tMOVD $1536, R12\n\tB    callbackasm1(SB)\n\tMOVD $1537, R12\n\tB    callbackasm1(SB)\n\tMOVD $1538, R12\n\tB    callbackasm1(SB)\n\tMOVD $1539, R12\n\tB    callbackasm1(SB)\n\tMOVD $1540, R12\n\tB    callbackasm1(SB)\n\tMOVD $1541, R12\n\tB    callbackasm1(SB)\n\tMOVD $1542, R12\n\tB    callbackasm1(SB)\n\tMOVD $1543, R12\n\tB    callbackasm1(SB)\n\tMOVD $1544, R12\n\tB    callbackasm1(SB)\n\tMOVD $1545, R12\n\tB    callbackasm1(SB)\n\tMOVD $1546, R12\n\tB    callbackasm1(SB)\n\tMOVD $1547, R12\n\tB    callbackasm1(SB)\n\tMOVD $1548, R12\n\tB    callbackasm1(SB)\n\tMOVD $1549, R12\n\tB    callbackasm1(SB)\n\tMOVD $1550, R12\n\tB    callbackasm1(SB)\n\tMOVD $1551, R12\n\tB    callbackasm1(SB)\n\tMOVD $1552, R12\n\tB    callbackasm1(SB)\n\tMOVD $1553, R12\n\tB    callbackasm1(SB)\n\tMOVD $1554, R12\n\tB    callbackasm1(SB)\n\tMOVD $1555, R12\n\tB    callbackasm1(SB)\n\tMOVD $1556, R12\n\tB    callbackasm1(SB)\n\tMOVD $1557, R12\n\tB    callbackasm1(SB)\n\tMOVD $1558, R12\n\tB    callbackasm1(SB)\n\tMOVD $1559, R12\n\tB    callbackasm1(SB)\n\tMOVD $1560, R12\n\tB    callbackasm1(SB)\n\tMOVD $1561, R12\n\tB    callbackasm1(SB)\n\tMOVD $1562, R12\n\tB    callbackasm1(SB)\n\tMOVD $1563, R12\n\tB    callbackasm1(SB)\n\tMOVD $1564, R12\n\tB    callbackasm1(SB)\n\tMOVD $1565, R12\n\tB    callbackasm1(SB)\n\tMOVD $1566, R12\n\tB    callbackasm1(SB)\n\tMOVD $1567, R12\n\tB    callbackasm1(SB)\n\tMOVD $1568, R12\n\tB    callbackasm1(SB)\n\tMOVD $1569, R12\n\tB    callbackasm1(SB)\n\tMOVD $1570, R12\n\tB    callbackasm1(SB)\n\tMOVD $1571, R12\n\tB    callbackasm1(SB)\n\tMOVD $1572, R12\n\tB    callbackasm1(SB)\n\tMOVD $1573, R12\n\tB    callbackasm1(SB)\n\tMOVD $1574, R12\n\tB    callbackasm1(SB)\n\tMOVD $1575, R12\n\tB    callbackasm1(SB)\n\tMOVD $1576, R12\n\tB    callbackasm1(SB)\n\tMOVD $1577, R12\n\tB    callbackasm1(SB)\n\tMOVD $1578, R12\n\tB    callbackasm1(SB)\n\tMOVD $1579, R12\n\tB    callbackasm1(SB)\n\tMOVD $1580, R12\n\tB    callbackasm1(SB)\n\tMOVD $1581, R12\n\tB    callbackasm1(SB)\n\tMOVD $1582, R12\n\tB    callbackasm1(SB)\n\tMOVD $1583, R12\n\tB    callbackasm1(SB)\n\tMOVD $1584, R12\n\tB    callbackasm1(SB)\n\tMOVD $1585, R12\n\tB    callbackasm1(SB)\n\tMOVD $1586, R12\n\tB    callbackasm1(SB)\n\tMOVD $1587, R12\n\tB    callbackasm1(SB)\n\tMOVD $1588, R12\n\tB    callbackasm1(SB)\n\tMOVD $1589, R12\n\tB    callbackasm1(SB)\n\tMOVD $1590, R12\n\tB    callbackasm1(SB)\n\tMOVD $1591, R12\n\tB    callbackasm1(SB)\n\tMOVD $1592, R12\n\tB    callbackasm1(SB)\n\tMOVD $1593, R12\n\tB    callbackasm1(SB)\n\tMOVD $1594, R12\n\tB    callbackasm1(SB)\n\tMOVD $1595, R12\n\tB    callbackasm1(SB)\n\tMOVD $1596, R12\n\tB    callbackasm1(SB)\n\tMOVD $1597, R12\n\tB    callbackasm1(SB)\n\tMOVD $1598, R12\n\tB    callbackasm1(SB)\n\tMOVD $1599, R12\n\tB    callbackasm1(SB)\n\tMOVD $1600, R12\n\tB    callbackasm1(SB)\n\tMOVD $1601, R12\n\tB    callbackasm1(SB)\n\tMOVD $1602, R12\n\tB    callbackasm1(SB)\n\tMOVD $1603, R12\n\tB    callbackasm1(SB)\n\tMOVD $1604, R12\n\tB    callbackasm1(SB)\n\tMOVD $1605, R12\n\tB    callbackasm1(SB)\n\tMOVD $1606, R12\n\tB    callbackasm1(SB)\n\tMOVD $1607, R12\n\tB    callbackasm1(SB)\n\tMOVD $1608, R12\n\tB    callbackasm1(SB)\n\tMOVD $1609, R12\n\tB    callbackasm1(SB)\n\tMOVD $1610, R12\n\tB    callbackasm1(SB)\n\tMOVD $1611, R12\n\tB    callbackasm1(SB)\n\tMOVD $1612, R12\n\tB    callbackasm1(SB)\n\tMOVD $1613, R12\n\tB    callbackasm1(SB)\n\tMOVD $1614, R12\n\tB    callbackasm1(SB)\n\tMOVD $1615, R12\n\tB    callbackasm1(SB)\n\tMOVD $1616, R12\n\tB    callbackasm1(SB)\n\tMOVD $1617, R12\n\tB    callbackasm1(SB)\n\tMOVD $1618, R12\n\tB    callbackasm1(SB)\n\tMOVD $1619, R12\n\tB    callbackasm1(SB)\n\tMOVD $1620, R12\n\tB    callbackasm1(SB)\n\tMOVD $1621, R12\n\tB    callbackasm1(SB)\n\tMOVD $1622, R12\n\tB    callbackasm1(SB)\n\tMOVD $1623, R12\n\tB    callbackasm1(SB)\n\tMOVD $1624, R12\n\tB    callbackasm1(SB)\n\tMOVD $1625, R12\n\tB    callbackasm1(SB)\n\tMOVD $1626, R12\n\tB    callbackasm1(SB)\n\tMOVD $1627, R12\n\tB    callbackasm1(SB)\n\tMOVD $1628, R12\n\tB    callbackasm1(SB)\n\tMOVD $1629, R12\n\tB    callbackasm1(SB)\n\tMOVD $1630, R12\n\tB    callbackasm1(SB)\n\tMOVD $1631, R12\n\tB    callbackasm1(SB)\n\tMOVD $1632, R12\n\tB    callbackasm1(SB)\n\tMOVD $1633, R12\n\tB    callbackasm1(SB)\n\tMOVD $1634, R12\n\tB    callbackasm1(SB)\n\tMOVD $1635, R12\n\tB    callbackasm1(SB)\n\tMOVD $1636, R12\n\tB    callbackasm1(SB)\n\tMOVD $1637, R12\n\tB    callbackasm1(SB)\n\tMOVD $1638, R12\n\tB    callbackasm1(SB)\n\tMOVD $1639, R12\n\tB    callbackasm1(SB)\n\tMOVD $1640, R12\n\tB    callbackasm1(SB)\n\tMOVD $1641, R12\n\tB    callbackasm1(SB)\n\tMOVD $1642, R12\n\tB    callbackasm1(SB)\n\tMOVD $1643, R12\n\tB    callbackasm1(SB)\n\tMOVD $1644, R12\n\tB    callbackasm1(SB)\n\tMOVD $1645, R12\n\tB    callbackasm1(SB)\n\tMOVD $1646, R12\n\tB    callbackasm1(SB)\n\tMOVD $1647, R12\n\tB    callbackasm1(SB)\n\tMOVD $1648, R12\n\tB    callbackasm1(SB)\n\tMOVD $1649, R12\n\tB    callbackasm1(SB)\n\tMOVD $1650, R12\n\tB    callbackasm1(SB)\n\tMOVD $1651, R12\n\tB    callbackasm1(SB)\n\tMOVD $1652, R12\n\tB    callbackasm1(SB)\n\tMOVD $1653, R12\n\tB    callbackasm1(SB)\n\tMOVD $1654, R12\n\tB    callbackasm1(SB)\n\tMOVD $1655, R12\n\tB    callbackasm1(SB)\n\tMOVD $1656, R12\n\tB    callbackasm1(SB)\n\tMOVD $1657, R12\n\tB    callbackasm1(SB)\n\tMOVD $1658, R12\n\tB    callbackasm1(SB)\n\tMOVD $1659, R12\n\tB    callbackasm1(SB)\n\tMOVD $1660, R12\n\tB    callbackasm1(SB)\n\tMOVD $1661, R12\n\tB    callbackasm1(SB)\n\tMOVD $1662, R12\n\tB    callbackasm1(SB)\n\tMOVD $1663, R12\n\tB    callbackasm1(SB)\n\tMOVD $1664, R12\n\tB    callbackasm1(SB)\n\tMOVD $1665, R12\n\tB    callbackasm1(SB)\n\tMOVD $1666, R12\n\tB    callbackasm1(SB)\n\tMOVD $1667, R12\n\tB    callbackasm1(SB)\n\tMOVD $1668, R12\n\tB    callbackasm1(SB)\n\tMOVD $1669, R12\n\tB    callbackasm1(SB)\n\tMOVD $1670, R12\n\tB    callbackasm1(SB)\n\tMOVD $1671, R12\n\tB    callbackasm1(SB)\n\tMOVD $1672, R12\n\tB    callbackasm1(SB)\n\tMOVD $1673, R12\n\tB    callbackasm1(SB)\n\tMOVD $1674, R12\n\tB    callbackasm1(SB)\n\tMOVD $1675, R12\n\tB    callbackasm1(SB)\n\tMOVD $1676, R12\n\tB    callbackasm1(SB)\n\tMOVD $1677, R12\n\tB    callbackasm1(SB)\n\tMOVD $1678, R12\n\tB    callbackasm1(SB)\n\tMOVD $1679, R12\n\tB    callbackasm1(SB)\n\tMOVD $1680, R12\n\tB    callbackasm1(SB)\n\tMOVD $1681, R12\n\tB    callbackasm1(SB)\n\tMOVD $1682, R12\n\tB    callbackasm1(SB)\n\tMOVD $1683, R12\n\tB    callbackasm1(SB)\n\tMOVD $1684, R12\n\tB    callbackasm1(SB)\n\tMOVD $1685, R12\n\tB    callbackasm1(SB)\n\tMOVD $1686, R12\n\tB    callbackasm1(SB)\n\tMOVD $1687, R12\n\tB    callbackasm1(SB)\n\tMOVD $1688, R12\n\tB    callbackasm1(SB)\n\tMOVD $1689, R12\n\tB    callbackasm1(SB)\n\tMOVD $1690, R12\n\tB    callbackasm1(SB)\n\tMOVD $1691, R12\n\tB    callbackasm1(SB)\n\tMOVD $1692, R12\n\tB    callbackasm1(SB)\n\tMOVD $1693, R12\n\tB    callbackasm1(SB)\n\tMOVD $1694, R12\n\tB    callbackasm1(SB)\n\tMOVD $1695, R12\n\tB    callbackasm1(SB)\n\tMOVD $1696, R12\n\tB    callbackasm1(SB)\n\tMOVD $1697, R12\n\tB    callbackasm1(SB)\n\tMOVD $1698, R12\n\tB    callbackasm1(SB)\n\tMOVD $1699, R12\n\tB    callbackasm1(SB)\n\tMOVD $1700, R12\n\tB    callbackasm1(SB)\n\tMOVD $1701, R12\n\tB    callbackasm1(SB)\n\tMOVD $1702, R12\n\tB    callbackasm1(SB)\n\tMOVD $1703, R12\n\tB    callbackasm1(SB)\n\tMOVD $1704, R12\n\tB    callbackasm1(SB)\n\tMOVD $1705, R12\n\tB    callbackasm1(SB)\n\tMOVD $1706, R12\n\tB    callbackasm1(SB)\n\tMOVD $1707, R12\n\tB    callbackasm1(SB)\n\tMOVD $1708, R12\n\tB    callbackasm1(SB)\n\tMOVD $1709, R12\n\tB    callbackasm1(SB)\n\tMOVD $1710, R12\n\tB    callbackasm1(SB)\n\tMOVD $1711, R12\n\tB    callbackasm1(SB)\n\tMOVD $1712, R12\n\tB    callbackasm1(SB)\n\tMOVD $1713, R12\n\tB    callbackasm1(SB)\n\tMOVD $1714, R12\n\tB    callbackasm1(SB)\n\tMOVD $1715, R12\n\tB    callbackasm1(SB)\n\tMOVD $1716, R12\n\tB    callbackasm1(SB)\n\tMOVD $1717, R12\n\tB    callbackasm1(SB)\n\tMOVD $1718, R12\n\tB    callbackasm1(SB)\n\tMOVD $1719, R12\n\tB    callbackasm1(SB)\n\tMOVD $1720, R12\n\tB    callbackasm1(SB)\n\tMOVD $1721, R12\n\tB    callbackasm1(SB)\n\tMOVD $1722, R12\n\tB    callbackasm1(SB)\n\tMOVD $1723, R12\n\tB    callbackasm1(SB)\n\tMOVD $1724, R12\n\tB    callbackasm1(SB)\n\tMOVD $1725, R12\n\tB    callbackasm1(SB)\n\tMOVD $1726, R12\n\tB    callbackasm1(SB)\n\tMOVD $1727, R12\n\tB    callbackasm1(SB)\n\tMOVD $1728, R12\n\tB    callbackasm1(SB)\n\tMOVD $1729, R12\n\tB    callbackasm1(SB)\n\tMOVD $1730, R12\n\tB    callbackasm1(SB)\n\tMOVD $1731, R12\n\tB    callbackasm1(SB)\n\tMOVD $1732, R12\n\tB    callbackasm1(SB)\n\tMOVD $1733, R12\n\tB    callbackasm1(SB)\n\tMOVD $1734, R12\n\tB    callbackasm1(SB)\n\tMOVD $1735, R12\n\tB    callbackasm1(SB)\n\tMOVD $1736, R12\n\tB    callbackasm1(SB)\n\tMOVD $1737, R12\n\tB    callbackasm1(SB)\n\tMOVD $1738, R12\n\tB    callbackasm1(SB)\n\tMOVD $1739, R12\n\tB    callbackasm1(SB)\n\tMOVD $1740, R12\n\tB    callbackasm1(SB)\n\tMOVD $1741, R12\n\tB    callbackasm1(SB)\n\tMOVD $1742, R12\n\tB    callbackasm1(SB)\n\tMOVD $1743, R12\n\tB    callbackasm1(SB)\n\tMOVD $1744, R12\n\tB    callbackasm1(SB)\n\tMOVD $1745, R12\n\tB    callbackasm1(SB)\n\tMOVD $1746, R12\n\tB    callbackasm1(SB)\n\tMOVD $1747, R12\n\tB    callbackasm1(SB)\n\tMOVD $1748, R12\n\tB    callbackasm1(SB)\n\tMOVD $1749, R12\n\tB    callbackasm1(SB)\n\tMOVD $1750, R12\n\tB    callbackasm1(SB)\n\tMOVD $1751, R12\n\tB    callbackasm1(SB)\n\tMOVD $1752, R12\n\tB    callbackasm1(SB)\n\tMOVD $1753, R12\n\tB    callbackasm1(SB)\n\tMOVD $1754, R12\n\tB    callbackasm1(SB)\n\tMOVD $1755, R12\n\tB    callbackasm1(SB)\n\tMOVD $1756, R12\n\tB    callbackasm1(SB)\n\tMOVD $1757, R12\n\tB    callbackasm1(SB)\n\tMOVD $1758, R12\n\tB    callbackasm1(SB)\n\tMOVD $1759, R12\n\tB    callbackasm1(SB)\n\tMOVD $1760, R12\n\tB    callbackasm1(SB)\n\tMOVD $1761, R12\n\tB    callbackasm1(SB)\n\tMOVD $1762, R12\n\tB    callbackasm1(SB)\n\tMOVD $1763, R12\n\tB    callbackasm1(SB)\n\tMOVD $1764, R12\n\tB    callbackasm1(SB)\n\tMOVD $1765, R12\n\tB    callbackasm1(SB)\n\tMOVD $1766, R12\n\tB    callbackasm1(SB)\n\tMOVD $1767, R12\n\tB    callbackasm1(SB)\n\tMOVD $1768, R12\n\tB    callbackasm1(SB)\n\tMOVD $1769, R12\n\tB    callbackasm1(SB)\n\tMOVD $1770, R12\n\tB    callbackasm1(SB)\n\tMOVD $1771, R12\n\tB    callbackasm1(SB)\n\tMOVD $1772, R12\n\tB    callbackasm1(SB)\n\tMOVD $1773, R12\n\tB    callbackasm1(SB)\n\tMOVD $1774, R12\n\tB    callbackasm1(SB)\n\tMOVD $1775, R12\n\tB    callbackasm1(SB)\n\tMOVD $1776, R12\n\tB    callbackasm1(SB)\n\tMOVD $1777, R12\n\tB    callbackasm1(SB)\n\tMOVD $1778, R12\n\tB    callbackasm1(SB)\n\tMOVD $1779, R12\n\tB    callbackasm1(SB)\n\tMOVD $1780, R12\n\tB    callbackasm1(SB)\n\tMOVD $1781, R12\n\tB    callbackasm1(SB)\n\tMOVD $1782, R12\n\tB    callbackasm1(SB)\n\tMOVD $1783, R12\n\tB    callbackasm1(SB)\n\tMOVD $1784, R12\n\tB    callbackasm1(SB)\n\tMOVD $1785, R12\n\tB    callbackasm1(SB)\n\tMOVD $1786, R12\n\tB    callbackasm1(SB)\n\tMOVD $1787, R12\n\tB    callbackasm1(SB)\n\tMOVD $1788, R12\n\tB    callbackasm1(SB)\n\tMOVD $1789, R12\n\tB    callbackasm1(SB)\n\tMOVD $1790, R12\n\tB    callbackasm1(SB)\n\tMOVD $1791, R12\n\tB    callbackasm1(SB)\n\tMOVD $1792, R12\n\tB    callbackasm1(SB)\n\tMOVD $1793, R12\n\tB    callbackasm1(SB)\n\tMOVD $1794, R12\n\tB    callbackasm1(SB)\n\tMOVD $1795, R12\n\tB    callbackasm1(SB)\n\tMOVD $1796, R12\n\tB    callbackasm1(SB)\n\tMOVD $1797, R12\n\tB    callbackasm1(SB)\n\tMOVD $1798, R12\n\tB    callbackasm1(SB)\n\tMOVD $1799, R12\n\tB    callbackasm1(SB)\n\tMOVD $1800, R12\n\tB    callbackasm1(SB)\n\tMOVD $1801, R12\n\tB    callbackasm1(SB)\n\tMOVD $1802, R12\n\tB    callbackasm1(SB)\n\tMOVD $1803, R12\n\tB    callbackasm1(SB)\n\tMOVD $1804, R12\n\tB    callbackasm1(SB)\n\tMOVD $1805, R12\n\tB    callbackasm1(SB)\n\tMOVD $1806, R12\n\tB    callbackasm1(SB)\n\tMOVD $1807, R12\n\tB    callbackasm1(SB)\n\tMOVD $1808, R12\n\tB    callbackasm1(SB)\n\tMOVD $1809, R12\n\tB    callbackasm1(SB)\n\tMOVD $1810, R12\n\tB    callbackasm1(SB)\n\tMOVD $1811, R12\n\tB    callbackasm1(SB)\n\tMOVD $1812, R12\n\tB    callbackasm1(SB)\n\tMOVD $1813, R12\n\tB    callbackasm1(SB)\n\tMOVD $1814, R12\n\tB    callbackasm1(SB)\n\tMOVD $1815, R12\n\tB    callbackasm1(SB)\n\tMOVD $1816, R12\n\tB    callbackasm1(SB)\n\tMOVD $1817, R12\n\tB    callbackasm1(SB)\n\tMOVD $1818, R12\n\tB    callbackasm1(SB)\n\tMOVD $1819, R12\n\tB    callbackasm1(SB)\n\tMOVD $1820, R12\n\tB    callbackasm1(SB)\n\tMOVD $1821, R12\n\tB    callbackasm1(SB)\n\tMOVD $1822, R12\n\tB    callbackasm1(SB)\n\tMOVD $1823, R12\n\tB    callbackasm1(SB)\n\tMOVD $1824, R12\n\tB    callbackasm1(SB)\n\tMOVD $1825, R12\n\tB    callbackasm1(SB)\n\tMOVD $1826, R12\n\tB    callbackasm1(SB)\n\tMOVD $1827, R12\n\tB    callbackasm1(SB)\n\tMOVD $1828, R12\n\tB    callbackasm1(SB)\n\tMOVD $1829, R12\n\tB    callbackasm1(SB)\n\tMOVD $1830, R12\n\tB    callbackasm1(SB)\n\tMOVD $1831, R12\n\tB    callbackasm1(SB)\n\tMOVD $1832, R12\n\tB    callbackasm1(SB)\n\tMOVD $1833, R12\n\tB    callbackasm1(SB)\n\tMOVD $1834, R12\n\tB    callbackasm1(SB)\n\tMOVD $1835, R12\n\tB    callbackasm1(SB)\n\tMOVD $1836, R12\n\tB    callbackasm1(SB)\n\tMOVD $1837, R12\n\tB    callbackasm1(SB)\n\tMOVD $1838, R12\n\tB    callbackasm1(SB)\n\tMOVD $1839, R12\n\tB    callbackasm1(SB)\n\tMOVD $1840, R12\n\tB    callbackasm1(SB)\n\tMOVD $1841, R12\n\tB    callbackasm1(SB)\n\tMOVD $1842, R12\n\tB    callbackasm1(SB)\n\tMOVD $1843, R12\n\tB    callbackasm1(SB)\n\tMOVD $1844, R12\n\tB    callbackasm1(SB)\n\tMOVD $1845, R12\n\tB    callbackasm1(SB)\n\tMOVD $1846, R12\n\tB    callbackasm1(SB)\n\tMOVD $1847, R12\n\tB    callbackasm1(SB)\n\tMOVD $1848, R12\n\tB    callbackasm1(SB)\n\tMOVD $1849, R12\n\tB    callbackasm1(SB)\n\tMOVD $1850, R12\n\tB    callbackasm1(SB)\n\tMOVD $1851, R12\n\tB    callbackasm1(SB)\n\tMOVD $1852, R12\n\tB    callbackasm1(SB)\n\tMOVD $1853, R12\n\tB    callbackasm1(SB)\n\tMOVD $1854, R12\n\tB    callbackasm1(SB)\n\tMOVD $1855, R12\n\tB    callbackasm1(SB)\n\tMOVD $1856, R12\n\tB    callbackasm1(SB)\n\tMOVD $1857, R12\n\tB    callbackasm1(SB)\n\tMOVD $1858, R12\n\tB    callbackasm1(SB)\n\tMOVD $1859, R12\n\tB    callbackasm1(SB)\n\tMOVD $1860, R12\n\tB    callbackasm1(SB)\n\tMOVD $1861, R12\n\tB    callbackasm1(SB)\n\tMOVD $1862, R12\n\tB    callbackasm1(SB)\n\tMOVD $1863, R12\n\tB    callbackasm1(SB)\n\tMOVD $1864, R12\n\tB    callbackasm1(SB)\n\tMOVD $1865, R12\n\tB    callbackasm1(SB)\n\tMOVD $1866, R12\n\tB    callbackasm1(SB)\n\tMOVD $1867, R12\n\tB    callbackasm1(SB)\n\tMOVD $1868, R12\n\tB    callbackasm1(SB)\n\tMOVD $1869, R12\n\tB    callbackasm1(SB)\n\tMOVD $1870, R12\n\tB    callbackasm1(SB)\n\tMOVD $1871, R12\n\tB    callbackasm1(SB)\n\tMOVD $1872, R12\n\tB    callbackasm1(SB)\n\tMOVD $1873, R12\n\tB    callbackasm1(SB)\n\tMOVD $1874, R12\n\tB    callbackasm1(SB)\n\tMOVD $1875, R12\n\tB    callbackasm1(SB)\n\tMOVD $1876, R12\n\tB    callbackasm1(SB)\n\tMOVD $1877, R12\n\tB    callbackasm1(SB)\n\tMOVD $1878, R12\n\tB    callbackasm1(SB)\n\tMOVD $1879, R12\n\tB    callbackasm1(SB)\n\tMOVD $1880, R12\n\tB    callbackasm1(SB)\n\tMOVD $1881, R12\n\tB    callbackasm1(SB)\n\tMOVD $1882, R12\n\tB    callbackasm1(SB)\n\tMOVD $1883, R12\n\tB    callbackasm1(SB)\n\tMOVD $1884, R12\n\tB    callbackasm1(SB)\n\tMOVD $1885, R12\n\tB    callbackasm1(SB)\n\tMOVD $1886, R12\n\tB    callbackasm1(SB)\n\tMOVD $1887, R12\n\tB    callbackasm1(SB)\n\tMOVD $1888, R12\n\tB    callbackasm1(SB)\n\tMOVD $1889, R12\n\tB    callbackasm1(SB)\n\tMOVD $1890, R12\n\tB    callbackasm1(SB)\n\tMOVD $1891, R12\n\tB    callbackasm1(SB)\n\tMOVD $1892, R12\n\tB    callbackasm1(SB)\n\tMOVD $1893, R12\n\tB    callbackasm1(SB)\n\tMOVD $1894, R12\n\tB    callbackasm1(SB)\n\tMOVD $1895, R12\n\tB    callbackasm1(SB)\n\tMOVD $1896, R12\n\tB    callbackasm1(SB)\n\tMOVD $1897, R12\n\tB    callbackasm1(SB)\n\tMOVD $1898, R12\n\tB    callbackasm1(SB)\n\tMOVD $1899, R12\n\tB    callbackasm1(SB)\n\tMOVD $1900, R12\n\tB    callbackasm1(SB)\n\tMOVD $1901, R12\n\tB    callbackasm1(SB)\n\tMOVD $1902, R12\n\tB    callbackasm1(SB)\n\tMOVD $1903, R12\n\tB    callbackasm1(SB)\n\tMOVD $1904, R12\n\tB    callbackasm1(SB)\n\tMOVD $1905, R12\n\tB    callbackasm1(SB)\n\tMOVD $1906, R12\n\tB    callbackasm1(SB)\n\tMOVD $1907, R12\n\tB    callbackasm1(SB)\n\tMOVD $1908, R12\n\tB    callbackasm1(SB)\n\tMOVD $1909, R12\n\tB    callbackasm1(SB)\n\tMOVD $1910, R12\n\tB    callbackasm1(SB)\n\tMOVD $1911, R12\n\tB    callbackasm1(SB)\n\tMOVD $1912, R12\n\tB    callbackasm1(SB)\n\tMOVD $1913, R12\n\tB    callbackasm1(SB)\n\tMOVD $1914, R12\n\tB    callbackasm1(SB)\n\tMOVD $1915, R12\n\tB    callbackasm1(SB)\n\tMOVD $1916, R12\n\tB    callbackasm1(SB)\n\tMOVD $1917, R12\n\tB    callbackasm1(SB)\n\tMOVD $1918, R12\n\tB    callbackasm1(SB)\n\tMOVD $1919, R12\n\tB    callbackasm1(SB)\n\tMOVD $1920, R12\n\tB    callbackasm1(SB)\n\tMOVD $1921, R12\n\tB    callbackasm1(SB)\n\tMOVD $1922, R12\n\tB    callbackasm1(SB)\n\tMOVD $1923, R12\n\tB    callbackasm1(SB)\n\tMOVD $1924, R12\n\tB    callbackasm1(SB)\n\tMOVD $1925, R12\n\tB    callbackasm1(SB)\n\tMOVD $1926, R12\n\tB    callbackasm1(SB)\n\tMOVD $1927, R12\n\tB    callbackasm1(SB)\n\tMOVD $1928, R12\n\tB    callbackasm1(SB)\n\tMOVD $1929, R12\n\tB    callbackasm1(SB)\n\tMOVD $1930, R12\n\tB    callbackasm1(SB)\n\tMOVD $1931, R12\n\tB    callbackasm1(SB)\n\tMOVD $1932, R12\n\tB    callbackasm1(SB)\n\tMOVD $1933, R12\n\tB    callbackasm1(SB)\n\tMOVD $1934, R12\n\tB    callbackasm1(SB)\n\tMOVD $1935, R12\n\tB    callbackasm1(SB)\n\tMOVD $1936, R12\n\tB    callbackasm1(SB)\n\tMOVD $1937, R12\n\tB    callbackasm1(SB)\n\tMOVD $1938, R12\n\tB    callbackasm1(SB)\n\tMOVD $1939, R12\n\tB    callbackasm1(SB)\n\tMOVD $1940, R12\n\tB    callbackasm1(SB)\n\tMOVD $1941, R12\n\tB    callbackasm1(SB)\n\tMOVD $1942, R12\n\tB    callbackasm1(SB)\n\tMOVD $1943, R12\n\tB    callbackasm1(SB)\n\tMOVD $1944, R12\n\tB    callbackasm1(SB)\n\tMOVD $1945, R12\n\tB    callbackasm1(SB)\n\tMOVD $1946, R12\n\tB    callbackasm1(SB)\n\tMOVD $1947, R12\n\tB    callbackasm1(SB)\n\tMOVD $1948, R12\n\tB    callbackasm1(SB)\n\tMOVD $1949, R12\n\tB    callbackasm1(SB)\n\tMOVD $1950, R12\n\tB    callbackasm1(SB)\n\tMOVD $1951, R12\n\tB    callbackasm1(SB)\n\tMOVD $1952, R12\n\tB    callbackasm1(SB)\n\tMOVD $1953, R12\n\tB    callbackasm1(SB)\n\tMOVD $1954, R12\n\tB    callbackasm1(SB)\n\tMOVD $1955, R12\n\tB    callbackasm1(SB)\n\tMOVD $1956, R12\n\tB    callbackasm1(SB)\n\tMOVD $1957, R12\n\tB    callbackasm1(SB)\n\tMOVD $1958, R12\n\tB    callbackasm1(SB)\n\tMOVD $1959, R12\n\tB    callbackasm1(SB)\n\tMOVD $1960, R12\n\tB    callbackasm1(SB)\n\tMOVD $1961, R12\n\tB    callbackasm1(SB)\n\tMOVD $1962, R12\n\tB    callbackasm1(SB)\n\tMOVD $1963, R12\n\tB    callbackasm1(SB)\n\tMOVD $1964, R12\n\tB    callbackasm1(SB)\n\tMOVD $1965, R12\n\tB    callbackasm1(SB)\n\tMOVD $1966, R12\n\tB    callbackasm1(SB)\n\tMOVD $1967, R12\n\tB    callbackasm1(SB)\n\tMOVD $1968, R12\n\tB    callbackasm1(SB)\n\tMOVD $1969, R12\n\tB    callbackasm1(SB)\n\tMOVD $1970, R12\n\tB    callbackasm1(SB)\n\tMOVD $1971, R12\n\tB    callbackasm1(SB)\n\tMOVD $1972, R12\n\tB    callbackasm1(SB)\n\tMOVD $1973, R12\n\tB    callbackasm1(SB)\n\tMOVD $1974, R12\n\tB    callbackasm1(SB)\n\tMOVD $1975, R12\n\tB    callbackasm1(SB)\n\tMOVD $1976, R12\n\tB    callbackasm1(SB)\n\tMOVD $1977, R12\n\tB    callbackasm1(SB)\n\tMOVD $1978, R12\n\tB    callbackasm1(SB)\n\tMOVD $1979, R12\n\tB    callbackasm1(SB)\n\tMOVD $1980, R12\n\tB    callbackasm1(SB)\n\tMOVD $1981, R12\n\tB    callbackasm1(SB)\n\tMOVD $1982, R12\n\tB    callbackasm1(SB)\n\tMOVD $1983, R12\n\tB    callbackasm1(SB)\n\tMOVD $1984, R12\n\tB    callbackasm1(SB)\n\tMOVD $1985, R12\n\tB    callbackasm1(SB)\n\tMOVD $1986, R12\n\tB    callbackasm1(SB)\n\tMOVD $1987, R12\n\tB    callbackasm1(SB)\n\tMOVD $1988, R12\n\tB    callbackasm1(SB)\n\tMOVD $1989, R12\n\tB    callbackasm1(SB)\n\tMOVD $1990, R12\n\tB    callbackasm1(SB)\n\tMOVD $1991, R12\n\tB    callbackasm1(SB)\n\tMOVD $1992, R12\n\tB    callbackasm1(SB)\n\tMOVD $1993, R12\n\tB    callbackasm1(SB)\n\tMOVD $1994, R12\n\tB    callbackasm1(SB)\n\tMOVD $1995, R12\n\tB    callbackasm1(SB)\n\tMOVD $1996, R12\n\tB    callbackasm1(SB)\n\tMOVD $1997, R12\n\tB    callbackasm1(SB)\n\tMOVD $1998, R12\n\tB    callbackasm1(SB)\n\tMOVD $1999, R12\n\tB    callbackasm1(SB)\n"
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/.gitignore",
    "content": ""
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/LICENSE.txt",
    "content": "Copyright (c) 2016 Felix Geisendörfer (felix@debuggable.com)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/Makefile",
    "content": ".PHONY: ci generate clean\n\nci: clean generate\n\tgo test -race -v ./...\n\ngenerate:\n\tgo generate .\n\nclean:\n\trm -rf *_generated*.go\n"
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/README.md",
    "content": "# httpsnoop\n\nPackage httpsnoop provides an easy way to capture http related metrics (i.e.\nresponse time, bytes written, and http status code) from your application's\nhttp.Handlers.\n\nDoing this requires non-trivial wrapping of the http.ResponseWriter interface,\nwhich is also exposed for users interested in a more low-level API.\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/felixge/httpsnoop.svg)](https://pkg.go.dev/github.com/felixge/httpsnoop)\n[![Build Status](https://github.com/felixge/httpsnoop/actions/workflows/main.yaml/badge.svg)](https://github.com/felixge/httpsnoop/actions/workflows/main.yaml)\n\n## Usage Example\n\n```go\n// myH is your app's http handler, perhaps a http.ServeMux or similar.\nvar myH http.Handler\n// wrappedH wraps myH in order to log every request.\nwrappedH := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\tm := httpsnoop.CaptureMetrics(myH, w, r)\n\tlog.Printf(\n\t\t\"%s %s (code=%d dt=%s written=%d)\",\n\t\tr.Method,\n\t\tr.URL,\n\t\tm.Code,\n\t\tm.Duration,\n\t\tm.Written,\n\t)\n})\nhttp.ListenAndServe(\":8080\", wrappedH)\n```\n\n## Why this package exists\n\nInstrumenting an application's http.Handler is surprisingly difficult.\n\nHowever if you google for e.g. \"capture ResponseWriter status code\" you'll find\nlots of advise and code examples that suggest it to be a fairly trivial\nundertaking. Unfortunately everything I've seen so far has a high chance of\nbreaking your application.\n\nThe main problem is that a `http.ResponseWriter` often implements additional\ninterfaces such as `http.Flusher`, `http.CloseNotifier`, `http.Hijacker`, `http.Pusher`, and\n`io.ReaderFrom`. So the naive approach of just wrapping `http.ResponseWriter`\nin your own struct that also implements the `http.ResponseWriter` interface\nwill hide the additional interfaces mentioned above. This has a high change of\nintroducing subtle bugs into any non-trivial application.\n\nAnother approach I've seen people take is to return a struct that implements\nall of the interfaces above. However, that's also problematic, because it's\ndifficult to fake some of these interfaces behaviors when the underlying\n`http.ResponseWriter` doesn't have an implementation. It's also dangerous,\nbecause an application may choose to operate differently, merely because it\ndetects the presence of these additional interfaces.\n\nThis package solves this problem by checking which additional interfaces a\n`http.ResponseWriter` implements, returning a wrapped version implementing the\nexact same set of interfaces.\n\nAdditionally this package properly handles edge cases such as `WriteHeader` not\nbeing called, or called more than once, as well as concurrent calls to\n`http.ResponseWriter` methods, and even calls happening after the wrapped\n`ServeHTTP` has already returned.\n\nUnfortunately this package is not perfect either. It's possible that it is\nstill missing some interfaces provided by the go core (let me know if you find\none), and it won't work for applications adding their own interfaces into the\nmix. You can however use `httpsnoop.Unwrap(w)` to access the underlying\n`http.ResponseWriter` and type-assert the result to its other interfaces.\n\nHowever, hopefully the explanation above has sufficiently scared you of rolling\nyour own solution to this problem. httpsnoop may still break your application,\nbut at least it tries to avoid it as much as possible.\n\nAnyway, the real problem here is that smuggling additional interfaces inside\n`http.ResponseWriter` is a problematic design choice, but it probably goes as\ndeep as the Go language specification itself. But that's okay, I still prefer\nGo over the alternatives ;).\n\n## Performance\n\n```\nBenchmarkBaseline-8      \t   20000\t     94912 ns/op\nBenchmarkCaptureMetrics-8\t   20000\t     95461 ns/op\n```\n\nAs you can see, using `CaptureMetrics` on a vanilla http.Handler introduces an\noverhead of ~500 ns per http request on my machine. However, the margin of\nerror appears to be larger than that, therefor it should be reasonable to\nassume that the overhead introduced by `CaptureMetrics` is absolutely\nnegligible.\n\n## License\n\nMIT\n"
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/capture_metrics.go",
    "content": "package httpsnoop\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Metrics holds metrics captured from CaptureMetrics.\ntype Metrics struct {\n\t// Code is the first http response code passed to the WriteHeader func of\n\t// the ResponseWriter. If no such call is made, a default code of 200 is\n\t// assumed instead.\n\tCode int\n\t// Duration is the time it took to execute the handler.\n\tDuration time.Duration\n\t// Written is the number of bytes successfully written by the Write or\n\t// ReadFrom function of the ResponseWriter. ResponseWriters may also write\n\t// data to their underlaying connection directly (e.g. headers), but those\n\t// are not tracked. Therefor the number of Written bytes will usually match\n\t// the size of the response body.\n\tWritten int64\n}\n\n// CaptureMetrics wraps the given hnd, executes it with the given w and r, and\n// returns the metrics it captured from it.\nfunc CaptureMetrics(hnd http.Handler, w http.ResponseWriter, r *http.Request) Metrics {\n\treturn CaptureMetricsFn(w, func(ww http.ResponseWriter) {\n\t\thnd.ServeHTTP(ww, r)\n\t})\n}\n\n// CaptureMetricsFn wraps w and calls fn with the wrapped w and returns the\n// resulting metrics. This is very similar to CaptureMetrics (which is just\n// sugar on top of this func), but is a more usable interface if your\n// application doesn't use the Go http.Handler interface.\nfunc CaptureMetricsFn(w http.ResponseWriter, fn func(http.ResponseWriter)) Metrics {\n\tm := Metrics{Code: http.StatusOK}\n\tm.CaptureMetrics(w, fn)\n\treturn m\n}\n\n// CaptureMetrics wraps w and calls fn with the wrapped w and updates\n// Metrics m with the resulting metrics. This is similar to CaptureMetricsFn,\n// but allows one to customize starting Metrics object.\nfunc (m *Metrics) CaptureMetrics(w http.ResponseWriter, fn func(http.ResponseWriter)) {\n\tvar (\n\t\tstart         = time.Now()\n\t\theaderWritten bool\n\t\thooks         = Hooks{\n\t\t\tWriteHeader: func(next WriteHeaderFunc) WriteHeaderFunc {\n\t\t\t\treturn func(code int) {\n\t\t\t\t\tnext(code)\n\n\t\t\t\t\tif !(code >= 100 && code <= 199) && !headerWritten {\n\t\t\t\t\t\tm.Code = code\n\t\t\t\t\t\theaderWritten = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tWrite: func(next WriteFunc) WriteFunc {\n\t\t\t\treturn func(p []byte) (int, error) {\n\t\t\t\t\tn, err := next(p)\n\n\t\t\t\t\tm.Written += int64(n)\n\t\t\t\t\theaderWritten = true\n\t\t\t\t\treturn n, err\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tReadFrom: func(next ReadFromFunc) ReadFromFunc {\n\t\t\t\treturn func(src io.Reader) (int64, error) {\n\t\t\t\t\tn, err := next(src)\n\n\t\t\t\t\theaderWritten = true\n\t\t\t\t\tm.Written += n\n\t\t\t\t\treturn n, err\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t)\n\n\tfn(Wrap(w, hooks))\n\tm.Duration += time.Since(start)\n}\n"
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/docs.go",
    "content": "// Package httpsnoop provides an easy way to capture http related metrics (i.e.\n// response time, bytes written, and http status code) from your application's\n// http.Handlers.\n//\n// Doing this requires non-trivial wrapping of the http.ResponseWriter\n// interface, which is also exposed for users interested in a more low-level\n// API.\npackage httpsnoop\n\n//go:generate go run codegen/main.go\n"
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/wrap_generated_gteq_1.8.go",
    "content": "// +build go1.8\n// Code generated by \"httpsnoop/codegen\"; DO NOT EDIT.\n\npackage httpsnoop\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n)\n\n// HeaderFunc is part of the http.ResponseWriter interface.\ntype HeaderFunc func() http.Header\n\n// WriteHeaderFunc is part of the http.ResponseWriter interface.\ntype WriteHeaderFunc func(code int)\n\n// WriteFunc is part of the http.ResponseWriter interface.\ntype WriteFunc func(b []byte) (int, error)\n\n// FlushFunc is part of the http.Flusher interface.\ntype FlushFunc func()\n\n// CloseNotifyFunc is part of the http.CloseNotifier interface.\ntype CloseNotifyFunc func() <-chan bool\n\n// HijackFunc is part of the http.Hijacker interface.\ntype HijackFunc func() (net.Conn, *bufio.ReadWriter, error)\n\n// ReadFromFunc is part of the io.ReaderFrom interface.\ntype ReadFromFunc func(src io.Reader) (int64, error)\n\n// PushFunc is part of the http.Pusher interface.\ntype PushFunc func(target string, opts *http.PushOptions) error\n\n// Hooks defines a set of method interceptors for methods included in\n// http.ResponseWriter as well as some others. You can think of them as\n// middleware for the function calls they target. See Wrap for more details.\ntype Hooks struct {\n\tHeader      func(HeaderFunc) HeaderFunc\n\tWriteHeader func(WriteHeaderFunc) WriteHeaderFunc\n\tWrite       func(WriteFunc) WriteFunc\n\tFlush       func(FlushFunc) FlushFunc\n\tCloseNotify func(CloseNotifyFunc) CloseNotifyFunc\n\tHijack      func(HijackFunc) HijackFunc\n\tReadFrom    func(ReadFromFunc) ReadFromFunc\n\tPush        func(PushFunc) PushFunc\n}\n\n// Wrap returns a wrapped version of w that provides the exact same interface\n// as w. Specifically if w implements any combination of:\n//\n// - http.Flusher\n// - http.CloseNotifier\n// - http.Hijacker\n// - io.ReaderFrom\n// - http.Pusher\n//\n// The wrapped version will implement the exact same combination. If no hooks\n// are set, the wrapped version also behaves exactly as w. Hooks targeting\n// methods not supported by w are ignored. Any other hooks will intercept the\n// method they target and may modify the call's arguments and/or return values.\n// The CaptureMetrics implementation serves as a working example for how the\n// hooks can be used.\nfunc Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter {\n\trw := &rw{w: w, h: hooks}\n\t_, i0 := w.(http.Flusher)\n\t_, i1 := w.(http.CloseNotifier)\n\t_, i2 := w.(http.Hijacker)\n\t_, i3 := w.(io.ReaderFrom)\n\t_, i4 := w.(http.Pusher)\n\tswitch {\n\t// combination 1/32\n\tcase !i0 && !i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t}{rw, rw}\n\t// combination 2/32\n\tcase !i0 && !i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw}\n\t// combination 3/32\n\tcase !i0 && !i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw}\n\t// combination 4/32\n\tcase !i0 && !i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw}\n\t// combination 5/32\n\tcase !i0 && !i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw}\n\t// combination 6/32\n\tcase !i0 && !i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw}\n\t// combination 7/32\n\tcase !i0 && !i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw}\n\t// combination 8/32\n\tcase !i0 && !i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 9/32\n\tcase !i0 && i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t}{rw, rw, rw}\n\t// combination 10/32\n\tcase !i0 && i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw}\n\t// combination 11/32\n\tcase !i0 && i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw}\n\t// combination 12/32\n\tcase !i0 && i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 13/32\n\tcase !i0 && i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw, rw}\n\t// combination 14/32\n\tcase !i0 && i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 15/32\n\tcase !i0 && i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 16/32\n\tcase !i0 && i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw, rw}\n\t// combination 17/32\n\tcase i0 && !i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t}{rw, rw, rw}\n\t// combination 18/32\n\tcase i0 && !i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw}\n\t// combination 19/32\n\tcase i0 && !i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw}\n\t// combination 20/32\n\tcase i0 && !i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 21/32\n\tcase i0 && !i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw, rw}\n\t// combination 22/32\n\tcase i0 && !i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 23/32\n\tcase i0 && !i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 24/32\n\tcase i0 && !i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw, rw}\n\t// combination 25/32\n\tcase i0 && i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t}{rw, rw, rw, rw}\n\t// combination 26/32\n\tcase i0 && i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 27/32\n\tcase i0 && i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 28/32\n\tcase i0 && i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw, rw}\n\t// combination 29/32\n\tcase i0 && i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 30/32\n\tcase i0 && i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw, rw}\n\t// combination 31/32\n\tcase i0 && i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw, rw}\n\t// combination 32/32\n\tcase i0 && i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t\thttp.Pusher\n\t\t}{rw, rw, rw, rw, rw, rw, rw}\n\t}\n\tpanic(\"unreachable\")\n}\n\ntype rw struct {\n\tw http.ResponseWriter\n\th Hooks\n}\n\nfunc (w *rw) Unwrap() http.ResponseWriter {\n\treturn w.w\n}\n\nfunc (w *rw) Header() http.Header {\n\tf := w.w.(http.ResponseWriter).Header\n\tif w.h.Header != nil {\n\t\tf = w.h.Header(f)\n\t}\n\treturn f()\n}\n\nfunc (w *rw) WriteHeader(code int) {\n\tf := w.w.(http.ResponseWriter).WriteHeader\n\tif w.h.WriteHeader != nil {\n\t\tf = w.h.WriteHeader(f)\n\t}\n\tf(code)\n}\n\nfunc (w *rw) Write(b []byte) (int, error) {\n\tf := w.w.(http.ResponseWriter).Write\n\tif w.h.Write != nil {\n\t\tf = w.h.Write(f)\n\t}\n\treturn f(b)\n}\n\nfunc (w *rw) Flush() {\n\tf := w.w.(http.Flusher).Flush\n\tif w.h.Flush != nil {\n\t\tf = w.h.Flush(f)\n\t}\n\tf()\n}\n\nfunc (w *rw) CloseNotify() <-chan bool {\n\tf := w.w.(http.CloseNotifier).CloseNotify\n\tif w.h.CloseNotify != nil {\n\t\tf = w.h.CloseNotify(f)\n\t}\n\treturn f()\n}\n\nfunc (w *rw) Hijack() (net.Conn, *bufio.ReadWriter, error) {\n\tf := w.w.(http.Hijacker).Hijack\n\tif w.h.Hijack != nil {\n\t\tf = w.h.Hijack(f)\n\t}\n\treturn f()\n}\n\nfunc (w *rw) ReadFrom(src io.Reader) (int64, error) {\n\tf := w.w.(io.ReaderFrom).ReadFrom\n\tif w.h.ReadFrom != nil {\n\t\tf = w.h.ReadFrom(f)\n\t}\n\treturn f(src)\n}\n\nfunc (w *rw) Push(target string, opts *http.PushOptions) error {\n\tf := w.w.(http.Pusher).Push\n\tif w.h.Push != nil {\n\t\tf = w.h.Push(f)\n\t}\n\treturn f(target, opts)\n}\n\ntype Unwrapper interface {\n\tUnwrap() http.ResponseWriter\n}\n\n// Unwrap returns the underlying http.ResponseWriter from within zero or more\n// layers of httpsnoop wrappers.\nfunc Unwrap(w http.ResponseWriter) http.ResponseWriter {\n\tif rw, ok := w.(Unwrapper); ok {\n\t\t// recurse until rw.Unwrap() returns a non-Unwrapper\n\t\treturn Unwrap(rw.Unwrap())\n\t} else {\n\t\treturn w\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/felixge/httpsnoop/wrap_generated_lt_1.8.go",
    "content": "// +build !go1.8\n// Code generated by \"httpsnoop/codegen\"; DO NOT EDIT.\n\npackage httpsnoop\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n)\n\n// HeaderFunc is part of the http.ResponseWriter interface.\ntype HeaderFunc func() http.Header\n\n// WriteHeaderFunc is part of the http.ResponseWriter interface.\ntype WriteHeaderFunc func(code int)\n\n// WriteFunc is part of the http.ResponseWriter interface.\ntype WriteFunc func(b []byte) (int, error)\n\n// FlushFunc is part of the http.Flusher interface.\ntype FlushFunc func()\n\n// CloseNotifyFunc is part of the http.CloseNotifier interface.\ntype CloseNotifyFunc func() <-chan bool\n\n// HijackFunc is part of the http.Hijacker interface.\ntype HijackFunc func() (net.Conn, *bufio.ReadWriter, error)\n\n// ReadFromFunc is part of the io.ReaderFrom interface.\ntype ReadFromFunc func(src io.Reader) (int64, error)\n\n// Hooks defines a set of method interceptors for methods included in\n// http.ResponseWriter as well as some others. You can think of them as\n// middleware for the function calls they target. See Wrap for more details.\ntype Hooks struct {\n\tHeader      func(HeaderFunc) HeaderFunc\n\tWriteHeader func(WriteHeaderFunc) WriteHeaderFunc\n\tWrite       func(WriteFunc) WriteFunc\n\tFlush       func(FlushFunc) FlushFunc\n\tCloseNotify func(CloseNotifyFunc) CloseNotifyFunc\n\tHijack      func(HijackFunc) HijackFunc\n\tReadFrom    func(ReadFromFunc) ReadFromFunc\n}\n\n// Wrap returns a wrapped version of w that provides the exact same interface\n// as w. Specifically if w implements any combination of:\n//\n// - http.Flusher\n// - http.CloseNotifier\n// - http.Hijacker\n// - io.ReaderFrom\n//\n// The wrapped version will implement the exact same combination. If no hooks\n// are set, the wrapped version also behaves exactly as w. Hooks targeting\n// methods not supported by w are ignored. Any other hooks will intercept the\n// method they target and may modify the call's arguments and/or return values.\n// The CaptureMetrics implementation serves as a working example for how the\n// hooks can be used.\nfunc Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter {\n\trw := &rw{w: w, h: hooks}\n\t_, i0 := w.(http.Flusher)\n\t_, i1 := w.(http.CloseNotifier)\n\t_, i2 := w.(http.Hijacker)\n\t_, i3 := w.(io.ReaderFrom)\n\tswitch {\n\t// combination 1/16\n\tcase !i0 && !i1 && !i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t}{rw, rw}\n\t// combination 2/16\n\tcase !i0 && !i1 && !i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw}\n\t// combination 3/16\n\tcase !i0 && !i1 && i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw}\n\t// combination 4/16\n\tcase !i0 && !i1 && i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw}\n\t// combination 5/16\n\tcase !i0 && i1 && !i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t}{rw, rw, rw}\n\t// combination 6/16\n\tcase !i0 && i1 && !i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw}\n\t// combination 7/16\n\tcase !i0 && i1 && i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw, rw}\n\t// combination 8/16\n\tcase !i0 && i1 && i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 9/16\n\tcase i0 && !i1 && !i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t}{rw, rw, rw}\n\t// combination 10/16\n\tcase i0 && !i1 && !i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw}\n\t// combination 11/16\n\tcase i0 && !i1 && i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw, rw}\n\t// combination 12/16\n\tcase i0 && !i1 && i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 13/16\n\tcase i0 && i1 && !i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t}{rw, rw, rw, rw}\n\t// combination 14/16\n\tcase i0 && i1 && !i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 15/16\n\tcase i0 && i1 && i2 && !i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t}{rw, rw, rw, rw, rw}\n\t// combination 16/16\n\tcase i0 && i1 && i2 && i3:\n\t\treturn struct {\n\t\t\tUnwrapper\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{rw, rw, rw, rw, rw, rw}\n\t}\n\tpanic(\"unreachable\")\n}\n\ntype rw struct {\n\tw http.ResponseWriter\n\th Hooks\n}\n\nfunc (w *rw) Unwrap() http.ResponseWriter {\n\treturn w.w\n}\n\nfunc (w *rw) Header() http.Header {\n\tf := w.w.(http.ResponseWriter).Header\n\tif w.h.Header != nil {\n\t\tf = w.h.Header(f)\n\t}\n\treturn f()\n}\n\nfunc (w *rw) WriteHeader(code int) {\n\tf := w.w.(http.ResponseWriter).WriteHeader\n\tif w.h.WriteHeader != nil {\n\t\tf = w.h.WriteHeader(f)\n\t}\n\tf(code)\n}\n\nfunc (w *rw) Write(b []byte) (int, error) {\n\tf := w.w.(http.ResponseWriter).Write\n\tif w.h.Write != nil {\n\t\tf = w.h.Write(f)\n\t}\n\treturn f(b)\n}\n\nfunc (w *rw) Flush() {\n\tf := w.w.(http.Flusher).Flush\n\tif w.h.Flush != nil {\n\t\tf = w.h.Flush(f)\n\t}\n\tf()\n}\n\nfunc (w *rw) CloseNotify() <-chan bool {\n\tf := w.w.(http.CloseNotifier).CloseNotify\n\tif w.h.CloseNotify != nil {\n\t\tf = w.h.CloseNotify(f)\n\t}\n\treturn f()\n}\n\nfunc (w *rw) Hijack() (net.Conn, *bufio.ReadWriter, error) {\n\tf := w.w.(http.Hijacker).Hijack\n\tif w.h.Hijack != nil {\n\t\tf = w.h.Hijack(f)\n\t}\n\treturn f()\n}\n\nfunc (w *rw) ReadFrom(src io.Reader) (int64, error) {\n\tf := w.w.(io.ReaderFrom).ReadFrom\n\tif w.h.ReadFrom != nil {\n\t\tf = w.h.ReadFrom(f)\n\t}\n\treturn f(src)\n}\n\ntype Unwrapper interface {\n\tUnwrap() http.ResponseWriter\n}\n\n// Unwrap returns the underlying http.ResponseWriter from within zero or more\n// layers of httpsnoop wrappers.\nfunc Unwrap(w http.ResponseWriter) http.ResponseWriter {\n\tif rw, ok := w.(Unwrapper); ok {\n\t\t// recurse until rw.Unwrap() returns a non-Unwrapper\n\t\treturn Unwrap(rw.Unwrap())\n\t} else {\n\t\treturn w\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/.editorconfig",
    "content": "# http://editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*_test.go]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/.gitignore",
    "content": "testdata/conf_out.ini\nini.sublime-project\nini.sublime-workspace\ntestdata/conf_reflect.ini\n.idea\n/.vscode\n.DS_Store\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/.golangci.yml",
    "content": "linters-settings:\n  staticcheck:\n    checks: [\n      \"all\",\n      \"-SA1019\" # There are valid use cases of strings.Title\n    ]\n  nakedret:\n    max-func-lines: 0 # Disallow any unnamed return statement\n\nlinters:\n  enable:\n    - deadcode\n    - errcheck\n    - gosimple\n    - govet\n    - ineffassign\n    - staticcheck\n    - structcheck\n    - typecheck\n    - unused\n    - varcheck\n    - nakedret\n    - gofmt\n    - rowserrcheck\n    - unconvert\n    - goimports\n    - unparam\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/LICENSE",
    "content": "Apache License\nVersion 2.0, January 2004\nhttp://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, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, \"control\" means (i) the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising\npermissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that\nis based on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work\nby the copyright owner or by an individual or Legal Entity authorized to submit\non behalf of the copyright owner. For the purposes of this definition,\n\"submitted\" means any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems, and\nissue tracking systems that are managed by, or on behalf of, the Licensor for\nthe purpose of discussing and improving the Work, but excluding communication\nthat is conspicuously marked or otherwise designated in writing by the copyright\nowner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf\nof whom a Contribution has been received by Licensor and subsequently\nincorporated within the Work.\n\n2. Grant of Copyright License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable copyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the Work and such\nDerivative Works in Source or Object form.\n\n3. Grant of Patent License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable (except as stated in this section) patent license to make, have\nmade, use, offer to sell, sell, import, and otherwise transfer the Work, where\nsuch license applies only to those patent claims licensable by such Contributor\nthat are necessarily infringed by their Contribution(s) alone or by combination\nof their Contribution(s) with the Work to which such Contribution(s) was\nsubmitted. If You institute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work or a\nContribution incorporated within the Work constitutes direct or contributory\npatent infringement, then any patent licenses granted to You under this License\nfor that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution.\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof\nin any medium, with or without modifications, and in Source or Object form,\nprovided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of\nthis License; and\nYou must cause any modified files to carry prominent notices stating that You\nchanged the files; and\nYou must retain, in the Source form of any Derivative Works that You distribute,\nall copyright, patent, trademark, and attribution notices from the Source form\nof the Work, excluding those notices that do not pertain to any part of the\nDerivative Works; and\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any\nDerivative Works that You distribute must include a readable copy of the\nattribution notices contained within such NOTICE file, excluding those notices\nthat do not pertain to any part of the Derivative Works, in at least one of the\nfollowing places: within a NOTICE text file distributed as part of the\nDerivative Works; within the Source form or documentation, if provided along\nwith the Derivative Works; or, within a display generated by the Derivative\nWorks, if and wherever such third-party notices normally appear. The contents of\nthe NOTICE file are for informational purposes only and do not modify the\nLicense. You may add Your own attribution notices within Derivative Works that\nYou distribute, alongside or as an addendum to the NOTICE text from the Work,\nprovided that such additional attribution notices cannot be construed as\nmodifying the License.\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n5. Submission of Contributions.\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted\nfor inclusion in the Work by You to the Licensor shall be under the terms and\nconditions of this License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify the terms of\nany separate license agreement you may have executed with Licensor regarding\nsuch Contributions.\n\n6. Trademarks.\n\nThis License does not grant permission to use the trade names, trademarks,\nservice marks, or product names of the Licensor, except as required for\nreasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty.\n\nUnless required by applicable law or agreed to in writing, Licensor provides the\nWork (and each Contributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,\nincluding, without limitation, any warranties or conditions of TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are\nsolely responsible for determining the appropriateness of using or\nredistributing the Work and assume any risks associated with Your exercise of\npermissions under this License.\n\n8. Limitation of Liability.\n\nIn no event and under no legal theory, whether in tort (including negligence),\ncontract, or otherwise, unless required by applicable law (such as deliberate\nand grossly negligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special, incidental,\nor consequential damages of any character arising as a result of this License or\nout of the use or inability to use the Work (including but not limited to\ndamages for loss of goodwill, work stoppage, computer failure or malfunction, or\nany and all other commercial damages or losses), even if such Contributor has\nbeen advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability.\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to\noffer, and charge a fee for, acceptance of support, warranty, indemnity, or\nother liability obligations and/or rights consistent with this License. However,\nin accepting such obligations, You may act only on Your own behalf and on Your\nsole responsibility, not on behalf of any other Contributor, and only if You\nagree to indemnify, defend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason of your\naccepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets \"[]\" replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also\nrecommend that a file or class name and description of purpose be included on\nthe same \"printed page\" as the copyright notice for easier identification within\nthird-party archives.\n\n   Copyright 2014 Unknwon\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": "vendor/github.com/go-ini/ini/Makefile",
    "content": ".PHONY: build test bench vet coverage\n\nbuild: vet bench\n\ntest:\n\tgo test -v -cover -race\n\nbench:\n\tgo test -v -cover -test.bench=. -test.benchmem\n\nvet:\n\tgo vet\n\ncoverage:\n\tgo test -coverprofile=c.out && go tool cover -html=c.out && rm c.out\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/README.md",
    "content": "# INI\n\n[![GitHub Workflow Status](https://img.shields.io/github/checks-status/go-ini/ini/main?logo=github&style=for-the-badge)](https://github.com/go-ini/ini/actions?query=branch%3Amain)\n[![codecov](https://img.shields.io/codecov/c/github/go-ini/ini/master?logo=codecov&style=for-the-badge)](https://codecov.io/gh/go-ini/ini)\n[![GoDoc](https://img.shields.io/badge/GoDoc-Reference-blue?style=for-the-badge&logo=go)](https://pkg.go.dev/github.com/go-ini/ini?tab=doc)\n[![Sourcegraph](https://img.shields.io/badge/view%20on-Sourcegraph-brightgreen.svg?style=for-the-badge&logo=sourcegraph)](https://sourcegraph.com/github.com/go-ini/ini)\n\n![](https://avatars0.githubusercontent.com/u/10216035?v=3&s=200)\n\nPackage ini provides INI file read and write functionality in Go.\n\n## Features\n\n- Load from multiple data sources(file, `[]byte`, `io.Reader` and `io.ReadCloser`) with overwrites.\n- Read with recursion values.\n- Read with parent-child sections.\n- Read with auto-increment key names.\n- Read with multiple-line values.\n- Read with tons of helper methods.\n- Read and convert values to Go types.\n- Read and **WRITE** comments of sections and keys.\n- Manipulate sections, keys and comments with ease.\n- Keep sections and keys in order as you parse and save.\n\n## Installation\n\nThe minimum requirement of Go is **1.13**.\n\n```sh\n$ go get gopkg.in/ini.v1\n```\n\nPlease add `-u` flag to update in the future.\n\n## Getting Help\n\n- [Getting Started](https://ini.unknwon.io/docs/intro/getting_started)\n- [API Documentation](https://gowalker.org/gopkg.in/ini.v1)\n- 中国大陆镜像：https://ini.unknwon.cn\n\n## License\n\nThis project is under Apache v2 License. See the [LICENSE](LICENSE) file for the full license text.\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/codecov.yml",
    "content": "coverage:\n  range: \"60...95\"\n  status:\n    project:\n      default:\n        threshold: 1%\n        informational: true\n    patch:\n      defualt:\n        only_pulls: true\n        informational: true\n\ncomment:\n  layout: 'diff'\n\ngithub_checks: false\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/data_source.go",
    "content": "// Copyright 2019 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n)\n\nvar (\n\t_ dataSource = (*sourceFile)(nil)\n\t_ dataSource = (*sourceData)(nil)\n\t_ dataSource = (*sourceReadCloser)(nil)\n)\n\n// dataSource is an interface that returns object which can be read and closed.\ntype dataSource interface {\n\tReadCloser() (io.ReadCloser, error)\n}\n\n// sourceFile represents an object that contains content on the local file system.\ntype sourceFile struct {\n\tname string\n}\n\nfunc (s sourceFile) ReadCloser() (_ io.ReadCloser, err error) {\n\treturn os.Open(s.name)\n}\n\n// sourceData represents an object that contains content in memory.\ntype sourceData struct {\n\tdata []byte\n}\n\nfunc (s *sourceData) ReadCloser() (io.ReadCloser, error) {\n\treturn ioutil.NopCloser(bytes.NewReader(s.data)), nil\n}\n\n// sourceReadCloser represents an input stream with Close method.\ntype sourceReadCloser struct {\n\treader io.ReadCloser\n}\n\nfunc (s *sourceReadCloser) ReadCloser() (io.ReadCloser, error) {\n\treturn s.reader, nil\n}\n\nfunc parseDataSource(source interface{}) (dataSource, error) {\n\tswitch s := source.(type) {\n\tcase string:\n\t\treturn sourceFile{s}, nil\n\tcase []byte:\n\t\treturn &sourceData{s}, nil\n\tcase io.ReadCloser:\n\t\treturn &sourceReadCloser{s}, nil\n\tcase io.Reader:\n\t\treturn &sourceReadCloser{ioutil.NopCloser(s)}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"error parsing data source: unknown type %q\", s)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/deprecated.go",
    "content": "// Copyright 2019 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nvar (\n\t// Deprecated: Use \"DefaultSection\" instead.\n\tDEFAULT_SECTION = DefaultSection\n\t// Deprecated: AllCapsUnderscore converts to format ALL_CAPS_UNDERSCORE.\n\tAllCapsUnderscore = SnackCase\n)\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/error.go",
    "content": "// Copyright 2016 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"fmt\"\n)\n\n// ErrDelimiterNotFound indicates the error type of no delimiter is found which there should be one.\ntype ErrDelimiterNotFound struct {\n\tLine string\n}\n\n// IsErrDelimiterNotFound returns true if the given error is an instance of ErrDelimiterNotFound.\nfunc IsErrDelimiterNotFound(err error) bool {\n\t_, ok := err.(ErrDelimiterNotFound)\n\treturn ok\n}\n\nfunc (err ErrDelimiterNotFound) Error() string {\n\treturn fmt.Sprintf(\"key-value delimiter not found: %s\", err.Line)\n}\n\n// ErrEmptyKeyName indicates the error type of no key name is found which there should be one.\ntype ErrEmptyKeyName struct {\n\tLine string\n}\n\n// IsErrEmptyKeyName returns true if the given error is an instance of ErrEmptyKeyName.\nfunc IsErrEmptyKeyName(err error) bool {\n\t_, ok := err.(ErrEmptyKeyName)\n\treturn ok\n}\n\nfunc (err ErrEmptyKeyName) Error() string {\n\treturn fmt.Sprintf(\"empty key name: %s\", err.Line)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/file.go",
    "content": "// Copyright 2017 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// File represents a combination of one or more INI files in memory.\ntype File struct {\n\toptions     LoadOptions\n\tdataSources []dataSource\n\n\t// Should make things safe, but sometimes doesn't matter.\n\tBlockMode bool\n\tlock      sync.RWMutex\n\n\t// To keep data in order.\n\tsectionList []string\n\t// To keep track of the index of a section with same name.\n\t// This meta list is only used with non-unique section names are allowed.\n\tsectionIndexes []int\n\n\t// Actual data is stored here.\n\tsections map[string][]*Section\n\n\tNameMapper\n\tValueMapper\n}\n\n// newFile initializes File object with given data sources.\nfunc newFile(dataSources []dataSource, opts LoadOptions) *File {\n\tif len(opts.KeyValueDelimiters) == 0 {\n\t\topts.KeyValueDelimiters = \"=:\"\n\t}\n\tif len(opts.KeyValueDelimiterOnWrite) == 0 {\n\t\topts.KeyValueDelimiterOnWrite = \"=\"\n\t}\n\tif len(opts.ChildSectionDelimiter) == 0 {\n\t\topts.ChildSectionDelimiter = \".\"\n\t}\n\n\treturn &File{\n\t\tBlockMode:   true,\n\t\tdataSources: dataSources,\n\t\tsections:    make(map[string][]*Section),\n\t\toptions:     opts,\n\t}\n}\n\n// Empty returns an empty file object.\nfunc Empty(opts ...LoadOptions) *File {\n\tvar opt LoadOptions\n\tif len(opts) > 0 {\n\t\topt = opts[0]\n\t}\n\n\t// Ignore error here, we are sure our data is good.\n\tf, _ := LoadSources(opt, []byte(\"\"))\n\treturn f\n}\n\n// NewSection creates a new section.\nfunc (f *File) NewSection(name string) (*Section, error) {\n\tif len(name) == 0 {\n\t\treturn nil, errors.New(\"empty section name\")\n\t}\n\n\tif (f.options.Insensitive || f.options.InsensitiveSections) && name != DefaultSection {\n\t\tname = strings.ToLower(name)\n\t}\n\n\tif f.BlockMode {\n\t\tf.lock.Lock()\n\t\tdefer f.lock.Unlock()\n\t}\n\n\tif !f.options.AllowNonUniqueSections && inSlice(name, f.sectionList) {\n\t\treturn f.sections[name][0], nil\n\t}\n\n\tf.sectionList = append(f.sectionList, name)\n\n\t// NOTE: Append to indexes must happen before appending to sections,\n\t// otherwise index will have off-by-one problem.\n\tf.sectionIndexes = append(f.sectionIndexes, len(f.sections[name]))\n\n\tsec := newSection(f, name)\n\tf.sections[name] = append(f.sections[name], sec)\n\n\treturn sec, nil\n}\n\n// NewRawSection creates a new section with an unparseable body.\nfunc (f *File) NewRawSection(name, body string) (*Section, error) {\n\tsection, err := f.NewSection(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsection.isRawSection = true\n\tsection.rawBody = body\n\treturn section, nil\n}\n\n// NewSections creates a list of sections.\nfunc (f *File) NewSections(names ...string) (err error) {\n\tfor _, name := range names {\n\t\tif _, err = f.NewSection(name); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// GetSection returns section by given name.\nfunc (f *File) GetSection(name string) (*Section, error) {\n\tsecs, err := f.SectionsByName(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn secs[0], err\n}\n\n// HasSection returns true if the file contains a section with given name.\nfunc (f *File) HasSection(name string) bool {\n\tsection, _ := f.GetSection(name)\n\treturn section != nil\n}\n\n// SectionsByName returns all sections with given name.\nfunc (f *File) SectionsByName(name string) ([]*Section, error) {\n\tif len(name) == 0 {\n\t\tname = DefaultSection\n\t}\n\tif f.options.Insensitive || f.options.InsensitiveSections {\n\t\tname = strings.ToLower(name)\n\t}\n\n\tif f.BlockMode {\n\t\tf.lock.RLock()\n\t\tdefer f.lock.RUnlock()\n\t}\n\n\tsecs := f.sections[name]\n\tif len(secs) == 0 {\n\t\treturn nil, fmt.Errorf(\"section %q does not exist\", name)\n\t}\n\n\treturn secs, nil\n}\n\n// Section assumes named section exists and returns a zero-value when not.\nfunc (f *File) Section(name string) *Section {\n\tsec, err := f.GetSection(name)\n\tif err != nil {\n\t\tif name == \"\" {\n\t\t\tname = DefaultSection\n\t\t}\n\t\tsec, _ = f.NewSection(name)\n\t\treturn sec\n\t}\n\treturn sec\n}\n\n// SectionWithIndex assumes named section exists and returns a new section when not.\nfunc (f *File) SectionWithIndex(name string, index int) *Section {\n\tsecs, err := f.SectionsByName(name)\n\tif err != nil || len(secs) <= index {\n\t\t// NOTE: It's OK here because the only possible error is empty section name,\n\t\t// but if it's empty, this piece of code won't be executed.\n\t\tnewSec, _ := f.NewSection(name)\n\t\treturn newSec\n\t}\n\n\treturn secs[index]\n}\n\n// Sections returns a list of Section stored in the current instance.\nfunc (f *File) Sections() []*Section {\n\tif f.BlockMode {\n\t\tf.lock.RLock()\n\t\tdefer f.lock.RUnlock()\n\t}\n\n\tsections := make([]*Section, len(f.sectionList))\n\tfor i, name := range f.sectionList {\n\t\tsections[i] = f.sections[name][f.sectionIndexes[i]]\n\t}\n\treturn sections\n}\n\n// ChildSections returns a list of child sections of given section name.\nfunc (f *File) ChildSections(name string) []*Section {\n\treturn f.Section(name).ChildSections()\n}\n\n// SectionStrings returns list of section names.\nfunc (f *File) SectionStrings() []string {\n\tlist := make([]string, len(f.sectionList))\n\tcopy(list, f.sectionList)\n\treturn list\n}\n\n// DeleteSection deletes a section or all sections with given name.\nfunc (f *File) DeleteSection(name string) {\n\tsecs, err := f.SectionsByName(name)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tfor i := 0; i < len(secs); i++ {\n\t\t// For non-unique sections, it is always needed to remove the first one so\n\t\t// in the next iteration, the subsequent section continue having index 0.\n\t\t// Ignoring the error as index 0 never returns an error.\n\t\t_ = f.DeleteSectionWithIndex(name, 0)\n\t}\n}\n\n// DeleteSectionWithIndex deletes a section with given name and index.\nfunc (f *File) DeleteSectionWithIndex(name string, index int) error {\n\tif !f.options.AllowNonUniqueSections && index != 0 {\n\t\treturn fmt.Errorf(\"delete section with non-zero index is only allowed when non-unique sections is enabled\")\n\t}\n\n\tif len(name) == 0 {\n\t\tname = DefaultSection\n\t}\n\tif f.options.Insensitive || f.options.InsensitiveSections {\n\t\tname = strings.ToLower(name)\n\t}\n\n\tif f.BlockMode {\n\t\tf.lock.Lock()\n\t\tdefer f.lock.Unlock()\n\t}\n\n\t// Count occurrences of the sections\n\toccurrences := 0\n\n\tsectionListCopy := make([]string, len(f.sectionList))\n\tcopy(sectionListCopy, f.sectionList)\n\n\tfor i, s := range sectionListCopy {\n\t\tif s != name {\n\t\t\tcontinue\n\t\t}\n\n\t\tif occurrences == index {\n\t\t\tif len(f.sections[name]) <= 1 {\n\t\t\t\tdelete(f.sections, name) // The last one in the map\n\t\t\t} else {\n\t\t\t\tf.sections[name] = append(f.sections[name][:index], f.sections[name][index+1:]...)\n\t\t\t}\n\n\t\t\t// Fix section lists\n\t\t\tf.sectionList = append(f.sectionList[:i], f.sectionList[i+1:]...)\n\t\t\tf.sectionIndexes = append(f.sectionIndexes[:i], f.sectionIndexes[i+1:]...)\n\n\t\t} else if occurrences > index {\n\t\t\t// Fix the indices of all following sections with this name.\n\t\t\tf.sectionIndexes[i-1]--\n\t\t}\n\n\t\toccurrences++\n\t}\n\n\treturn nil\n}\n\nfunc (f *File) reload(s dataSource) error {\n\tr, err := s.ReadCloser()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer r.Close()\n\n\treturn f.parse(r)\n}\n\n// Reload reloads and parses all data sources.\nfunc (f *File) Reload() (err error) {\n\tfor _, s := range f.dataSources {\n\t\tif err = f.reload(s); err != nil {\n\t\t\t// In loose mode, we create an empty default section for nonexistent files.\n\t\t\tif os.IsNotExist(err) && f.options.Loose {\n\t\t\t\t_ = f.parse(bytes.NewBuffer(nil))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tif f.options.ShortCircuit {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn nil\n}\n\n// Append appends one or more data sources and reloads automatically.\nfunc (f *File) Append(source interface{}, others ...interface{}) error {\n\tds, err := parseDataSource(source)\n\tif err != nil {\n\t\treturn err\n\t}\n\tf.dataSources = append(f.dataSources, ds)\n\tfor _, s := range others {\n\t\tds, err = parseDataSource(s)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tf.dataSources = append(f.dataSources, ds)\n\t}\n\treturn f.Reload()\n}\n\nfunc (f *File) writeToBuffer(indent string) (*bytes.Buffer, error) {\n\tequalSign := DefaultFormatLeft + f.options.KeyValueDelimiterOnWrite + DefaultFormatRight\n\n\tif PrettyFormat || PrettyEqual {\n\t\tequalSign = fmt.Sprintf(\" %s \", f.options.KeyValueDelimiterOnWrite)\n\t}\n\n\t// Use buffer to make sure target is safe until finish encoding.\n\tbuf := bytes.NewBuffer(nil)\n\tlastSectionIdx := len(f.sectionList) - 1\n\tfor i, sname := range f.sectionList {\n\t\tsec := f.SectionWithIndex(sname, f.sectionIndexes[i])\n\t\tif len(sec.Comment) > 0 {\n\t\t\t// Support multiline comments\n\t\t\tlines := strings.Split(sec.Comment, LineBreak)\n\t\t\tfor i := range lines {\n\t\t\t\tif lines[i][0] != '#' && lines[i][0] != ';' {\n\t\t\t\t\tlines[i] = \"; \" + lines[i]\n\t\t\t\t} else {\n\t\t\t\t\tlines[i] = lines[i][:1] + \" \" + strings.TrimSpace(lines[i][1:])\n\t\t\t\t}\n\n\t\t\t\tif _, err := buf.WriteString(lines[i] + LineBreak); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif i > 0 || DefaultHeader || (i == 0 && strings.ToUpper(sec.name) != DefaultSection) {\n\t\t\tif _, err := buf.WriteString(\"[\" + sname + \"]\" + LineBreak); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t} else {\n\t\t\t// Write nothing if default section is empty\n\t\t\tif len(sec.keyList) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tisLastSection := i == lastSectionIdx\n\t\tif sec.isRawSection {\n\t\t\tif _, err := buf.WriteString(sec.rawBody); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tif PrettySection && !isLastSection {\n\t\t\t\t// Put a line between sections\n\t\t\t\tif _, err := buf.WriteString(LineBreak); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Count and generate alignment length and buffer spaces using the\n\t\t// longest key. Keys may be modified if they contain certain characters so\n\t\t// we need to take that into account in our calculation.\n\t\talignLength := 0\n\t\tif PrettyFormat {\n\t\t\tfor _, kname := range sec.keyList {\n\t\t\t\tkeyLength := len(kname)\n\t\t\t\t// First case will surround key by ` and second by \"\"\"\n\t\t\t\tif strings.Contains(kname, \"\\\"\") || strings.ContainsAny(kname, f.options.KeyValueDelimiters) {\n\t\t\t\t\tkeyLength += 2\n\t\t\t\t} else if strings.Contains(kname, \"`\") {\n\t\t\t\t\tkeyLength += 6\n\t\t\t\t}\n\n\t\t\t\tif keyLength > alignLength {\n\t\t\t\t\talignLength = keyLength\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\talignSpaces := bytes.Repeat([]byte(\" \"), alignLength)\n\n\tKeyList:\n\t\tfor _, kname := range sec.keyList {\n\t\t\tkey := sec.Key(kname)\n\t\t\tif len(key.Comment) > 0 {\n\t\t\t\tif len(indent) > 0 && sname != DefaultSection {\n\t\t\t\t\tbuf.WriteString(indent)\n\t\t\t\t}\n\n\t\t\t\t// Support multiline comments\n\t\t\t\tlines := strings.Split(key.Comment, LineBreak)\n\t\t\t\tfor i := range lines {\n\t\t\t\t\tif lines[i][0] != '#' && lines[i][0] != ';' {\n\t\t\t\t\t\tlines[i] = \"; \" + strings.TrimSpace(lines[i])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlines[i] = lines[i][:1] + \" \" + strings.TrimSpace(lines[i][1:])\n\t\t\t\t\t}\n\n\t\t\t\t\tif _, err := buf.WriteString(lines[i] + LineBreak); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif len(indent) > 0 && sname != DefaultSection {\n\t\t\t\tbuf.WriteString(indent)\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase key.isAutoIncrement:\n\t\t\t\tkname = \"-\"\n\t\t\tcase strings.Contains(kname, \"\\\"\") || strings.ContainsAny(kname, f.options.KeyValueDelimiters):\n\t\t\t\tkname = \"`\" + kname + \"`\"\n\t\t\tcase strings.Contains(kname, \"`\"):\n\t\t\t\tkname = `\"\"\"` + kname + `\"\"\"`\n\t\t\t}\n\n\t\t\twriteKeyValue := func(val string) (bool, error) {\n\t\t\t\tif _, err := buf.WriteString(kname); err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\n\t\t\t\tif key.isBooleanType {\n\t\t\t\t\tbuf.WriteString(LineBreak)\n\t\t\t\t\treturn true, nil\n\t\t\t\t}\n\n\t\t\t\t// Write out alignment spaces before \"=\" sign\n\t\t\t\tif PrettyFormat {\n\t\t\t\t\tbuf.Write(alignSpaces[:alignLength-len(kname)])\n\t\t\t\t}\n\n\t\t\t\t// In case key value contains \"\\n\", \"`\", \"\\\"\", \"#\" or \";\"\n\t\t\t\tif strings.ContainsAny(val, \"\\n`\") {\n\t\t\t\t\tval = `\"\"\"` + val + `\"\"\"`\n\t\t\t\t} else if !f.options.IgnoreInlineComment && strings.ContainsAny(val, \"#;\") {\n\t\t\t\t\tval = \"`\" + val + \"`\"\n\t\t\t\t} else if len(strings.TrimSpace(val)) != len(val) {\n\t\t\t\t\tval = `\"` + val + `\"`\n\t\t\t\t}\n\t\t\t\tif _, err := buf.WriteString(equalSign + val + LineBreak); err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t\treturn false, nil\n\t\t\t}\n\n\t\t\tshadows := key.ValueWithShadows()\n\t\t\tif len(shadows) == 0 {\n\t\t\t\tif _, err := writeKeyValue(\"\"); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor _, val := range shadows {\n\t\t\t\texitLoop, err := writeKeyValue(val)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t} else if exitLoop {\n\t\t\t\t\tcontinue KeyList\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor _, val := range key.nestedValues {\n\t\t\t\tif _, err := buf.WriteString(indent + \"  \" + val + LineBreak); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif PrettySection && !isLastSection {\n\t\t\t// Put a line between sections\n\t\t\tif _, err := buf.WriteString(LineBreak); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn buf, nil\n}\n\n// WriteToIndent writes content into io.Writer with given indention.\n// If PrettyFormat has been set to be true,\n// it will align \"=\" sign with spaces under each section.\nfunc (f *File) WriteToIndent(w io.Writer, indent string) (int64, error) {\n\tbuf, err := f.writeToBuffer(indent)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn buf.WriteTo(w)\n}\n\n// WriteTo writes file content into io.Writer.\nfunc (f *File) WriteTo(w io.Writer) (int64, error) {\n\treturn f.WriteToIndent(w, \"\")\n}\n\n// SaveToIndent writes content to file system with given value indention.\nfunc (f *File) SaveToIndent(filename, indent string) error {\n\t// Note: Because we are truncating with os.Create,\n\t// \tso it's safer to save to a temporary file location and rename after done.\n\tbuf, err := f.writeToBuffer(indent)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn ioutil.WriteFile(filename, buf.Bytes(), 0666)\n}\n\n// SaveTo writes content to file system.\nfunc (f *File) SaveTo(filename string) error {\n\treturn f.SaveToIndent(filename, \"\")\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/helper.go",
    "content": "// Copyright 2019 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nfunc inSlice(str string, s []string) bool {\n\tfor _, v := range s {\n\t\tif str == v {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/ini.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\n// Package ini provides INI file read and write functionality in Go.\npackage ini\n\nimport (\n\t\"os\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nconst (\n\t// Maximum allowed depth when recursively substituing variable names.\n\tdepthValues = 99\n)\n\nvar (\n\t// DefaultSection is the name of default section. You can use this var or the string literal.\n\t// In most of cases, an empty string is all you need to access the section.\n\tDefaultSection = \"DEFAULT\"\n\n\t// LineBreak is the delimiter to determine or compose a new line.\n\t// This variable will be changed to \"\\r\\n\" automatically on Windows at package init time.\n\tLineBreak = \"\\n\"\n\n\t// Variable regexp pattern: %(variable)s\n\tvarPattern = regexp.MustCompile(`%\\(([^)]+)\\)s`)\n\n\t// DefaultHeader explicitly writes default section header.\n\tDefaultHeader = false\n\n\t// PrettySection indicates whether to put a line between sections.\n\tPrettySection = true\n\t// PrettyFormat indicates whether to align \"=\" sign with spaces to produce pretty output\n\t// or reduce all possible spaces for compact format.\n\tPrettyFormat = true\n\t// PrettyEqual places spaces around \"=\" sign even when PrettyFormat is false.\n\tPrettyEqual = false\n\t// DefaultFormatLeft places custom spaces on the left when PrettyFormat and PrettyEqual are both disabled.\n\tDefaultFormatLeft = \"\"\n\t// DefaultFormatRight places custom spaces on the right when PrettyFormat and PrettyEqual are both disabled.\n\tDefaultFormatRight = \"\"\n)\n\nvar inTest = len(os.Args) > 0 && strings.HasSuffix(strings.TrimSuffix(os.Args[0], \".exe\"), \".test\")\n\nfunc init() {\n\tif runtime.GOOS == \"windows\" && !inTest {\n\t\tLineBreak = \"\\r\\n\"\n\t}\n}\n\n// LoadOptions contains all customized options used for load data source(s).\ntype LoadOptions struct {\n\t// Loose indicates whether the parser should ignore nonexistent files or return error.\n\tLoose bool\n\t// Insensitive indicates whether the parser forces all section and key names to lowercase.\n\tInsensitive bool\n\t// InsensitiveSections indicates whether the parser forces all section to lowercase.\n\tInsensitiveSections bool\n\t// InsensitiveKeys indicates whether the parser forces all key names to lowercase.\n\tInsensitiveKeys bool\n\t// IgnoreContinuation indicates whether to ignore continuation lines while parsing.\n\tIgnoreContinuation bool\n\t// IgnoreInlineComment indicates whether to ignore comments at the end of value and treat it as part of value.\n\tIgnoreInlineComment bool\n\t// SkipUnrecognizableLines indicates whether to skip unrecognizable lines that do not conform to key/value pairs.\n\tSkipUnrecognizableLines bool\n\t// ShortCircuit indicates whether to ignore other configuration sources after loaded the first available configuration source.\n\tShortCircuit bool\n\t// AllowBooleanKeys indicates whether to allow boolean type keys or treat as value is missing.\n\t// This type of keys are mostly used in my.cnf.\n\tAllowBooleanKeys bool\n\t// AllowShadows indicates whether to keep track of keys with same name under same section.\n\tAllowShadows bool\n\t// AllowNestedValues indicates whether to allow AWS-like nested values.\n\t// Docs: http://docs.aws.amazon.com/cli/latest/topic/config-vars.html#nested-values\n\tAllowNestedValues bool\n\t// AllowPythonMultilineValues indicates whether to allow Python-like multi-line values.\n\t// Docs: https://docs.python.org/3/library/configparser.html#supported-ini-file-structure\n\t// Relevant quote:  Values can also span multiple lines, as long as they are indented deeper\n\t// than the first line of the value.\n\tAllowPythonMultilineValues bool\n\t// SpaceBeforeInlineComment indicates whether to allow comment symbols (\\# and \\;) inside value.\n\t// Docs: https://docs.python.org/2/library/configparser.html\n\t// Quote: Comments may appear on their own in an otherwise empty line, or may be entered in lines holding values or section names.\n\t// In the latter case, they need to be preceded by a whitespace character to be recognized as a comment.\n\tSpaceBeforeInlineComment bool\n\t// UnescapeValueDoubleQuotes indicates whether to unescape double quotes inside value to regular format\n\t// when value is surrounded by double quotes, e.g. key=\"a \\\"value\\\"\" => key=a \"value\"\n\tUnescapeValueDoubleQuotes bool\n\t// UnescapeValueCommentSymbols indicates to unescape comment symbols (\\# and \\;) inside value to regular format\n\t// when value is NOT surrounded by any quotes.\n\t// Note: UNSTABLE, behavior might change to only unescape inside double quotes but may noy necessary at all.\n\tUnescapeValueCommentSymbols bool\n\t// UnparseableSections stores a list of blocks that are allowed with raw content which do not otherwise\n\t// conform to key/value pairs. Specify the names of those blocks here.\n\tUnparseableSections []string\n\t// KeyValueDelimiters is the sequence of delimiters that are used to separate key and value. By default, it is \"=:\".\n\tKeyValueDelimiters string\n\t// KeyValueDelimiterOnWrite is the delimiter that are used to separate key and value output. By default, it is \"=\".\n\tKeyValueDelimiterOnWrite string\n\t// ChildSectionDelimiter is the delimiter that is used to separate child sections. By default, it is \".\".\n\tChildSectionDelimiter string\n\t// PreserveSurroundedQuote indicates whether to preserve surrounded quote (single and double quotes).\n\tPreserveSurroundedQuote bool\n\t// DebugFunc is called to collect debug information (currently only useful to debug parsing Python-style multiline values).\n\tDebugFunc DebugFunc\n\t// ReaderBufferSize is the buffer size of the reader in bytes.\n\tReaderBufferSize int\n\t// AllowNonUniqueSections indicates whether to allow sections with the same name multiple times.\n\tAllowNonUniqueSections bool\n\t// AllowDuplicateShadowValues indicates whether values for shadowed keys should be deduplicated.\n\tAllowDuplicateShadowValues bool\n}\n\n// DebugFunc is the type of function called to log parse events.\ntype DebugFunc func(message string)\n\n// LoadSources allows caller to apply customized options for loading from data source(s).\nfunc LoadSources(opts LoadOptions, source interface{}, others ...interface{}) (_ *File, err error) {\n\tsources := make([]dataSource, len(others)+1)\n\tsources[0], err = parseDataSource(source)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor i := range others {\n\t\tsources[i+1], err = parseDataSource(others[i])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tf := newFile(sources, opts)\n\tif err = f.Reload(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn f, nil\n}\n\n// Load loads and parses from INI data sources.\n// Arguments can be mixed of file name with string type, or raw data in []byte.\n// It will return error if list contains nonexistent files.\nfunc Load(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{}, source, others...)\n}\n\n// LooseLoad has exactly same functionality as Load function\n// except it ignores nonexistent files instead of returning error.\nfunc LooseLoad(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{Loose: true}, source, others...)\n}\n\n// InsensitiveLoad has exactly same functionality as Load function\n// except it forces all section and key names to be lowercased.\nfunc InsensitiveLoad(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{Insensitive: true}, source, others...)\n}\n\n// ShadowLoad has exactly same functionality as Load function\n// except it allows have shadow keys.\nfunc ShadowLoad(source interface{}, others ...interface{}) (*File, error) {\n\treturn LoadSources(LoadOptions{AllowShadows: true}, source, others...)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/key.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// Key represents a key under a section.\ntype Key struct {\n\ts               *Section\n\tComment         string\n\tname            string\n\tvalue           string\n\tisAutoIncrement bool\n\tisBooleanType   bool\n\n\tisShadow bool\n\tshadows  []*Key\n\n\tnestedValues []string\n}\n\n// newKey simply return a key object with given values.\nfunc newKey(s *Section, name, val string) *Key {\n\treturn &Key{\n\t\ts:     s,\n\t\tname:  name,\n\t\tvalue: val,\n\t}\n}\n\nfunc (k *Key) addShadow(val string) error {\n\tif k.isShadow {\n\t\treturn errors.New(\"cannot add shadow to another shadow key\")\n\t} else if k.isAutoIncrement || k.isBooleanType {\n\t\treturn errors.New(\"cannot add shadow to auto-increment or boolean key\")\n\t}\n\n\tif !k.s.f.options.AllowDuplicateShadowValues {\n\t\t// Deduplicate shadows based on their values.\n\t\tif k.value == val {\n\t\t\treturn nil\n\t\t}\n\t\tfor i := range k.shadows {\n\t\t\tif k.shadows[i].value == val {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\n\tshadow := newKey(k.s, k.name, val)\n\tshadow.isShadow = true\n\tk.shadows = append(k.shadows, shadow)\n\treturn nil\n}\n\n// AddShadow adds a new shadow key to itself.\nfunc (k *Key) AddShadow(val string) error {\n\tif !k.s.f.options.AllowShadows {\n\t\treturn errors.New(\"shadow key is not allowed\")\n\t}\n\treturn k.addShadow(val)\n}\n\nfunc (k *Key) addNestedValue(val string) error {\n\tif k.isAutoIncrement || k.isBooleanType {\n\t\treturn errors.New(\"cannot add nested value to auto-increment or boolean key\")\n\t}\n\n\tk.nestedValues = append(k.nestedValues, val)\n\treturn nil\n}\n\n// AddNestedValue adds a nested value to the key.\nfunc (k *Key) AddNestedValue(val string) error {\n\tif !k.s.f.options.AllowNestedValues {\n\t\treturn errors.New(\"nested value is not allowed\")\n\t}\n\treturn k.addNestedValue(val)\n}\n\n// ValueMapper represents a mapping function for values, e.g. os.ExpandEnv\ntype ValueMapper func(string) string\n\n// Name returns name of key.\nfunc (k *Key) Name() string {\n\treturn k.name\n}\n\n// Value returns raw value of key for performance purpose.\nfunc (k *Key) Value() string {\n\treturn k.value\n}\n\n// ValueWithShadows returns raw values of key and its shadows if any. Shadow\n// keys with empty values are ignored from the returned list.\nfunc (k *Key) ValueWithShadows() []string {\n\tif len(k.shadows) == 0 {\n\t\tif k.value == \"\" {\n\t\t\treturn []string{}\n\t\t}\n\t\treturn []string{k.value}\n\t}\n\n\tvals := make([]string, 0, len(k.shadows)+1)\n\tif k.value != \"\" {\n\t\tvals = append(vals, k.value)\n\t}\n\tfor _, s := range k.shadows {\n\t\tif s.value != \"\" {\n\t\t\tvals = append(vals, s.value)\n\t\t}\n\t}\n\treturn vals\n}\n\n// NestedValues returns nested values stored in the key.\n// It is possible returned value is nil if no nested values stored in the key.\nfunc (k *Key) NestedValues() []string {\n\treturn k.nestedValues\n}\n\n// transformValue takes a raw value and transforms to its final string.\nfunc (k *Key) transformValue(val string) string {\n\tif k.s.f.ValueMapper != nil {\n\t\tval = k.s.f.ValueMapper(val)\n\t}\n\n\t// Fail-fast if no indicate char found for recursive value\n\tif !strings.Contains(val, \"%\") {\n\t\treturn val\n\t}\n\tfor i := 0; i < depthValues; i++ {\n\t\tvr := varPattern.FindString(val)\n\t\tif len(vr) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// Take off leading '%(' and trailing ')s'.\n\t\tnoption := vr[2 : len(vr)-2]\n\n\t\t// Search in the same section.\n\t\t// If not found or found the key itself, then search again in default section.\n\t\tnk, err := k.s.GetKey(noption)\n\t\tif err != nil || k == nk {\n\t\t\tnk, _ = k.s.f.Section(\"\").GetKey(noption)\n\t\t\tif nk == nil {\n\t\t\t\t// Stop when no results found in the default section,\n\t\t\t\t// and returns the value as-is.\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// Substitute by new value and take off leading '%(' and trailing ')s'.\n\t\tval = strings.Replace(val, vr, nk.value, -1)\n\t}\n\treturn val\n}\n\n// String returns string representation of value.\nfunc (k *Key) String() string {\n\treturn k.transformValue(k.value)\n}\n\n// Validate accepts a validate function which can\n// return modifed result as key value.\nfunc (k *Key) Validate(fn func(string) string) string {\n\treturn fn(k.String())\n}\n\n// parseBool returns the boolean value represented by the string.\n//\n// It accepts 1, t, T, TRUE, true, True, YES, yes, Yes, y, ON, on, On,\n// 0, f, F, FALSE, false, False, NO, no, No, n, OFF, off, Off.\n// Any other value returns an error.\nfunc parseBool(str string) (value bool, err error) {\n\tswitch str {\n\tcase \"1\", \"t\", \"T\", \"true\", \"TRUE\", \"True\", \"YES\", \"yes\", \"Yes\", \"y\", \"ON\", \"on\", \"On\":\n\t\treturn true, nil\n\tcase \"0\", \"f\", \"F\", \"false\", \"FALSE\", \"False\", \"NO\", \"no\", \"No\", \"n\", \"OFF\", \"off\", \"Off\":\n\t\treturn false, nil\n\t}\n\treturn false, fmt.Errorf(\"parsing \\\"%s\\\": invalid syntax\", str)\n}\n\n// Bool returns bool type value.\nfunc (k *Key) Bool() (bool, error) {\n\treturn parseBool(k.String())\n}\n\n// Float64 returns float64 type value.\nfunc (k *Key) Float64() (float64, error) {\n\treturn strconv.ParseFloat(k.String(), 64)\n}\n\n// Int returns int type value.\nfunc (k *Key) Int() (int, error) {\n\tv, err := strconv.ParseInt(k.String(), 0, 64)\n\treturn int(v), err\n}\n\n// Int64 returns int64 type value.\nfunc (k *Key) Int64() (int64, error) {\n\treturn strconv.ParseInt(k.String(), 0, 64)\n}\n\n// Uint returns uint type valued.\nfunc (k *Key) Uint() (uint, error) {\n\tu, e := strconv.ParseUint(k.String(), 0, 64)\n\treturn uint(u), e\n}\n\n// Uint64 returns uint64 type value.\nfunc (k *Key) Uint64() (uint64, error) {\n\treturn strconv.ParseUint(k.String(), 0, 64)\n}\n\n// Duration returns time.Duration type value.\nfunc (k *Key) Duration() (time.Duration, error) {\n\treturn time.ParseDuration(k.String())\n}\n\n// TimeFormat parses with given format and returns time.Time type value.\nfunc (k *Key) TimeFormat(format string) (time.Time, error) {\n\treturn time.Parse(format, k.String())\n}\n\n// Time parses with RFC3339 format and returns time.Time type value.\nfunc (k *Key) Time() (time.Time, error) {\n\treturn k.TimeFormat(time.RFC3339)\n}\n\n// MustString returns default value if key value is empty.\nfunc (k *Key) MustString(defaultVal string) string {\n\tval := k.String()\n\tif len(val) == 0 {\n\t\tk.value = defaultVal\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// MustBool always returns value without error,\n// it returns false if error occurs.\nfunc (k *Key) MustBool(defaultVal ...bool) bool {\n\tval, err := k.Bool()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatBool(defaultVal[0])\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustFloat64 always returns value without error,\n// it returns 0.0 if error occurs.\nfunc (k *Key) MustFloat64(defaultVal ...float64) float64 {\n\tval, err := k.Float64()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatFloat(defaultVal[0], 'f', -1, 64)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustInt always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustInt(defaultVal ...int) int {\n\tval, err := k.Int()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatInt(int64(defaultVal[0]), 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustInt64 always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustInt64(defaultVal ...int64) int64 {\n\tval, err := k.Int64()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatInt(defaultVal[0], 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustUint always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustUint(defaultVal ...uint) uint {\n\tval, err := k.Uint()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatUint(uint64(defaultVal[0]), 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustUint64 always returns value without error,\n// it returns 0 if error occurs.\nfunc (k *Key) MustUint64(defaultVal ...uint64) uint64 {\n\tval, err := k.Uint64()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = strconv.FormatUint(defaultVal[0], 10)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustDuration always returns value without error,\n// it returns zero value if error occurs.\nfunc (k *Key) MustDuration(defaultVal ...time.Duration) time.Duration {\n\tval, err := k.Duration()\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = defaultVal[0].String()\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustTimeFormat always parses with given format and returns value without error,\n// it returns zero value if error occurs.\nfunc (k *Key) MustTimeFormat(format string, defaultVal ...time.Time) time.Time {\n\tval, err := k.TimeFormat(format)\n\tif len(defaultVal) > 0 && err != nil {\n\t\tk.value = defaultVal[0].Format(format)\n\t\treturn defaultVal[0]\n\t}\n\treturn val\n}\n\n// MustTime always parses with RFC3339 format and returns value without error,\n// it returns zero value if error occurs.\nfunc (k *Key) MustTime(defaultVal ...time.Time) time.Time {\n\treturn k.MustTimeFormat(time.RFC3339, defaultVal...)\n}\n\n// In always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) In(defaultVal string, candidates []string) string {\n\tval := k.String()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InFloat64 always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InFloat64(defaultVal float64, candidates []float64) float64 {\n\tval := k.MustFloat64()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InInt always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InInt(defaultVal int, candidates []int) int {\n\tval := k.MustInt()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InInt64 always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InInt64(defaultVal int64, candidates []int64) int64 {\n\tval := k.MustInt64()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InUint always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InUint(defaultVal uint, candidates []uint) uint {\n\tval := k.MustUint()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InUint64 always returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InUint64(defaultVal uint64, candidates []uint64) uint64 {\n\tval := k.MustUint64()\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InTimeFormat always parses with given format and returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InTimeFormat(format string, defaultVal time.Time, candidates []time.Time) time.Time {\n\tval := k.MustTimeFormat(format)\n\tfor _, cand := range candidates {\n\t\tif val == cand {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn defaultVal\n}\n\n// InTime always parses with RFC3339 format and returns value without error,\n// it returns default value if error occurs or doesn't fit into candidates.\nfunc (k *Key) InTime(defaultVal time.Time, candidates []time.Time) time.Time {\n\treturn k.InTimeFormat(time.RFC3339, defaultVal, candidates)\n}\n\n// RangeFloat64 checks if value is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeFloat64(defaultVal, min, max float64) float64 {\n\tval := k.MustFloat64()\n\tif val < min || val > max {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeInt checks if value is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeInt(defaultVal, min, max int) int {\n\tval := k.MustInt()\n\tif val < min || val > max {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeInt64 checks if value is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeInt64(defaultVal, min, max int64) int64 {\n\tval := k.MustInt64()\n\tif val < min || val > max {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeTimeFormat checks if value with given format is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeTimeFormat(format string, defaultVal, min, max time.Time) time.Time {\n\tval := k.MustTimeFormat(format)\n\tif val.Unix() < min.Unix() || val.Unix() > max.Unix() {\n\t\treturn defaultVal\n\t}\n\treturn val\n}\n\n// RangeTime checks if value with RFC3339 format is in given range inclusively,\n// and returns default value if it's not.\nfunc (k *Key) RangeTime(defaultVal, min, max time.Time) time.Time {\n\treturn k.RangeTimeFormat(time.RFC3339, defaultVal, min, max)\n}\n\n// Strings returns list of string divided by given delimiter.\nfunc (k *Key) Strings(delim string) []string {\n\tstr := k.String()\n\tif len(str) == 0 {\n\t\treturn []string{}\n\t}\n\n\trunes := []rune(str)\n\tvals := make([]string, 0, 2)\n\tvar buf bytes.Buffer\n\tescape := false\n\tidx := 0\n\tfor {\n\t\tif escape {\n\t\t\tescape = false\n\t\t\tif runes[idx] != '\\\\' && !strings.HasPrefix(string(runes[idx:]), delim) {\n\t\t\t\tbuf.WriteRune('\\\\')\n\t\t\t}\n\t\t\tbuf.WriteRune(runes[idx])\n\t\t} else {\n\t\t\tif runes[idx] == '\\\\' {\n\t\t\t\tescape = true\n\t\t\t} else if strings.HasPrefix(string(runes[idx:]), delim) {\n\t\t\t\tidx += len(delim) - 1\n\t\t\t\tvals = append(vals, strings.TrimSpace(buf.String()))\n\t\t\t\tbuf.Reset()\n\t\t\t} else {\n\t\t\t\tbuf.WriteRune(runes[idx])\n\t\t\t}\n\t\t}\n\t\tidx++\n\t\tif idx == len(runes) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif buf.Len() > 0 {\n\t\tvals = append(vals, strings.TrimSpace(buf.String()))\n\t}\n\n\treturn vals\n}\n\n// StringsWithShadows returns list of string divided by given delimiter.\n// Shadows will also be appended if any.\nfunc (k *Key) StringsWithShadows(delim string) []string {\n\tvals := k.ValueWithShadows()\n\tresults := make([]string, 0, len(vals)*2)\n\tfor i := range vals {\n\t\tif len(vals) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tresults = append(results, strings.Split(vals[i], delim)...)\n\t}\n\n\tfor i := range results {\n\t\tresults[i] = k.transformValue(strings.TrimSpace(results[i]))\n\t}\n\treturn results\n}\n\n// Float64s returns list of float64 divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Float64s(delim string) []float64 {\n\tvals, _ := k.parseFloat64s(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Ints returns list of int divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Ints(delim string) []int {\n\tvals, _ := k.parseInts(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Int64s returns list of int64 divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Int64s(delim string) []int64 {\n\tvals, _ := k.parseInt64s(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Uints returns list of uint divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Uints(delim string) []uint {\n\tvals, _ := k.parseUints(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Uint64s returns list of uint64 divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Uint64s(delim string) []uint64 {\n\tvals, _ := k.parseUint64s(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Bools returns list of bool divided by given delimiter. Any invalid input will be treated as zero value.\nfunc (k *Key) Bools(delim string) []bool {\n\tvals, _ := k.parseBools(k.Strings(delim), true, false)\n\treturn vals\n}\n\n// TimesFormat parses with given format and returns list of time.Time divided by given delimiter.\n// Any invalid input will be treated as zero value (0001-01-01 00:00:00 +0000 UTC).\nfunc (k *Key) TimesFormat(format, delim string) []time.Time {\n\tvals, _ := k.parseTimesFormat(format, k.Strings(delim), true, false)\n\treturn vals\n}\n\n// Times parses with RFC3339 format and returns list of time.Time divided by given delimiter.\n// Any invalid input will be treated as zero value (0001-01-01 00:00:00 +0000 UTC).\nfunc (k *Key) Times(delim string) []time.Time {\n\treturn k.TimesFormat(time.RFC3339, delim)\n}\n\n// ValidFloat64s returns list of float64 divided by given delimiter. If some value is not float, then\n// it will not be included to result list.\nfunc (k *Key) ValidFloat64s(delim string) []float64 {\n\tvals, _ := k.parseFloat64s(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidInts returns list of int divided by given delimiter. If some value is not integer, then it will\n// not be included to result list.\nfunc (k *Key) ValidInts(delim string) []int {\n\tvals, _ := k.parseInts(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidInt64s returns list of int64 divided by given delimiter. If some value is not 64-bit integer,\n// then it will not be included to result list.\nfunc (k *Key) ValidInt64s(delim string) []int64 {\n\tvals, _ := k.parseInt64s(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidUints returns list of uint divided by given delimiter. If some value is not unsigned integer,\n// then it will not be included to result list.\nfunc (k *Key) ValidUints(delim string) []uint {\n\tvals, _ := k.parseUints(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidUint64s returns list of uint64 divided by given delimiter. If some value is not 64-bit unsigned\n// integer, then it will not be included to result list.\nfunc (k *Key) ValidUint64s(delim string) []uint64 {\n\tvals, _ := k.parseUint64s(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidBools returns list of bool divided by given delimiter. If some value is not 64-bit unsigned\n// integer, then it will not be included to result list.\nfunc (k *Key) ValidBools(delim string) []bool {\n\tvals, _ := k.parseBools(k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidTimesFormat parses with given format and returns list of time.Time divided by given delimiter.\nfunc (k *Key) ValidTimesFormat(format, delim string) []time.Time {\n\tvals, _ := k.parseTimesFormat(format, k.Strings(delim), false, false)\n\treturn vals\n}\n\n// ValidTimes parses with RFC3339 format and returns list of time.Time divided by given delimiter.\nfunc (k *Key) ValidTimes(delim string) []time.Time {\n\treturn k.ValidTimesFormat(time.RFC3339, delim)\n}\n\n// StrictFloat64s returns list of float64 divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictFloat64s(delim string) ([]float64, error) {\n\treturn k.parseFloat64s(k.Strings(delim), false, true)\n}\n\n// StrictInts returns list of int divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictInts(delim string) ([]int, error) {\n\treturn k.parseInts(k.Strings(delim), false, true)\n}\n\n// StrictInt64s returns list of int64 divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictInt64s(delim string) ([]int64, error) {\n\treturn k.parseInt64s(k.Strings(delim), false, true)\n}\n\n// StrictUints returns list of uint divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictUints(delim string) ([]uint, error) {\n\treturn k.parseUints(k.Strings(delim), false, true)\n}\n\n// StrictUint64s returns list of uint64 divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictUint64s(delim string) ([]uint64, error) {\n\treturn k.parseUint64s(k.Strings(delim), false, true)\n}\n\n// StrictBools returns list of bool divided by given delimiter or error on first invalid input.\nfunc (k *Key) StrictBools(delim string) ([]bool, error) {\n\treturn k.parseBools(k.Strings(delim), false, true)\n}\n\n// StrictTimesFormat parses with given format and returns list of time.Time divided by given delimiter\n// or error on first invalid input.\nfunc (k *Key) StrictTimesFormat(format, delim string) ([]time.Time, error) {\n\treturn k.parseTimesFormat(format, k.Strings(delim), false, true)\n}\n\n// StrictTimes parses with RFC3339 format and returns list of time.Time divided by given delimiter\n// or error on first invalid input.\nfunc (k *Key) StrictTimes(delim string) ([]time.Time, error) {\n\treturn k.StrictTimesFormat(time.RFC3339, delim)\n}\n\n// parseBools transforms strings to bools.\nfunc (k *Key) parseBools(strs []string, addInvalid, returnOnInvalid bool) ([]bool, error) {\n\tvals := make([]bool, 0, len(strs))\n\tparser := func(str string) (interface{}, error) {\n\t\tval, err := parseBool(str)\n\t\treturn val, err\n\t}\n\trawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)\n\tif err == nil {\n\t\tfor _, val := range rawVals {\n\t\t\tvals = append(vals, val.(bool))\n\t\t}\n\t}\n\treturn vals, err\n}\n\n// parseFloat64s transforms strings to float64s.\nfunc (k *Key) parseFloat64s(strs []string, addInvalid, returnOnInvalid bool) ([]float64, error) {\n\tvals := make([]float64, 0, len(strs))\n\tparser := func(str string) (interface{}, error) {\n\t\tval, err := strconv.ParseFloat(str, 64)\n\t\treturn val, err\n\t}\n\trawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)\n\tif err == nil {\n\t\tfor _, val := range rawVals {\n\t\t\tvals = append(vals, val.(float64))\n\t\t}\n\t}\n\treturn vals, err\n}\n\n// parseInts transforms strings to ints.\nfunc (k *Key) parseInts(strs []string, addInvalid, returnOnInvalid bool) ([]int, error) {\n\tvals := make([]int, 0, len(strs))\n\tparser := func(str string) (interface{}, error) {\n\t\tval, err := strconv.ParseInt(str, 0, 64)\n\t\treturn val, err\n\t}\n\trawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)\n\tif err == nil {\n\t\tfor _, val := range rawVals {\n\t\t\tvals = append(vals, int(val.(int64)))\n\t\t}\n\t}\n\treturn vals, err\n}\n\n// parseInt64s transforms strings to int64s.\nfunc (k *Key) parseInt64s(strs []string, addInvalid, returnOnInvalid bool) ([]int64, error) {\n\tvals := make([]int64, 0, len(strs))\n\tparser := func(str string) (interface{}, error) {\n\t\tval, err := strconv.ParseInt(str, 0, 64)\n\t\treturn val, err\n\t}\n\n\trawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)\n\tif err == nil {\n\t\tfor _, val := range rawVals {\n\t\t\tvals = append(vals, val.(int64))\n\t\t}\n\t}\n\treturn vals, err\n}\n\n// parseUints transforms strings to uints.\nfunc (k *Key) parseUints(strs []string, addInvalid, returnOnInvalid bool) ([]uint, error) {\n\tvals := make([]uint, 0, len(strs))\n\tparser := func(str string) (interface{}, error) {\n\t\tval, err := strconv.ParseUint(str, 0, 64)\n\t\treturn val, err\n\t}\n\n\trawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)\n\tif err == nil {\n\t\tfor _, val := range rawVals {\n\t\t\tvals = append(vals, uint(val.(uint64)))\n\t\t}\n\t}\n\treturn vals, err\n}\n\n// parseUint64s transforms strings to uint64s.\nfunc (k *Key) parseUint64s(strs []string, addInvalid, returnOnInvalid bool) ([]uint64, error) {\n\tvals := make([]uint64, 0, len(strs))\n\tparser := func(str string) (interface{}, error) {\n\t\tval, err := strconv.ParseUint(str, 0, 64)\n\t\treturn val, err\n\t}\n\trawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)\n\tif err == nil {\n\t\tfor _, val := range rawVals {\n\t\t\tvals = append(vals, val.(uint64))\n\t\t}\n\t}\n\treturn vals, err\n}\n\ntype Parser func(str string) (interface{}, error)\n\n// parseTimesFormat transforms strings to times in given format.\nfunc (k *Key) parseTimesFormat(format string, strs []string, addInvalid, returnOnInvalid bool) ([]time.Time, error) {\n\tvals := make([]time.Time, 0, len(strs))\n\tparser := func(str string) (interface{}, error) {\n\t\tval, err := time.Parse(format, str)\n\t\treturn val, err\n\t}\n\trawVals, err := k.doParse(strs, addInvalid, returnOnInvalid, parser)\n\tif err == nil {\n\t\tfor _, val := range rawVals {\n\t\t\tvals = append(vals, val.(time.Time))\n\t\t}\n\t}\n\treturn vals, err\n}\n\n// doParse transforms strings to different types\nfunc (k *Key) doParse(strs []string, addInvalid, returnOnInvalid bool, parser Parser) ([]interface{}, error) {\n\tvals := make([]interface{}, 0, len(strs))\n\tfor _, str := range strs {\n\t\tval, err := parser(str)\n\t\tif err != nil && returnOnInvalid {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err == nil || addInvalid {\n\t\t\tvals = append(vals, val)\n\t\t}\n\t}\n\treturn vals, nil\n}\n\n// SetValue changes key value.\nfunc (k *Key) SetValue(v string) {\n\tif k.s.f.BlockMode {\n\t\tk.s.f.lock.Lock()\n\t\tdefer k.s.f.lock.Unlock()\n\t}\n\n\tk.value = v\n\tk.s.keysHash[k.name] = v\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/parser.go",
    "content": "// Copyright 2015 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n)\n\nconst minReaderBufferSize = 4096\n\nvar pythonMultiline = regexp.MustCompile(`^([\\t\\f ]+)(.*)`)\n\ntype parserOptions struct {\n\tIgnoreContinuation          bool\n\tIgnoreInlineComment         bool\n\tAllowPythonMultilineValues  bool\n\tSpaceBeforeInlineComment    bool\n\tUnescapeValueDoubleQuotes   bool\n\tUnescapeValueCommentSymbols bool\n\tPreserveSurroundedQuote     bool\n\tDebugFunc                   DebugFunc\n\tReaderBufferSize            int\n}\n\ntype parser struct {\n\tbuf     *bufio.Reader\n\toptions parserOptions\n\n\tisEOF   bool\n\tcount   int\n\tcomment *bytes.Buffer\n}\n\nfunc (p *parser) debug(format string, args ...interface{}) {\n\tif p.options.DebugFunc != nil {\n\t\tp.options.DebugFunc(fmt.Sprintf(format, args...))\n\t}\n}\n\nfunc newParser(r io.Reader, opts parserOptions) *parser {\n\tsize := opts.ReaderBufferSize\n\tif size < minReaderBufferSize {\n\t\tsize = minReaderBufferSize\n\t}\n\n\treturn &parser{\n\t\tbuf:     bufio.NewReaderSize(r, size),\n\t\toptions: opts,\n\t\tcount:   1,\n\t\tcomment: &bytes.Buffer{},\n\t}\n}\n\n// BOM handles header of UTF-8, UTF-16 LE and UTF-16 BE's BOM format.\n// http://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding\nfunc (p *parser) BOM() error {\n\tmask, err := p.buf.Peek(2)\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t} else if len(mask) < 2 {\n\t\treturn nil\n\t}\n\n\tswitch {\n\tcase mask[0] == 254 && mask[1] == 255:\n\t\tfallthrough\n\tcase mask[0] == 255 && mask[1] == 254:\n\t\t_, err = p.buf.Read(mask)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\tcase mask[0] == 239 && mask[1] == 187:\n\t\tmask, err := p.buf.Peek(3)\n\t\tif err != nil && err != io.EOF {\n\t\t\treturn err\n\t\t} else if len(mask) < 3 {\n\t\t\treturn nil\n\t\t}\n\t\tif mask[2] == 191 {\n\t\t\t_, err = p.buf.Read(mask)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (p *parser) readUntil(delim byte) ([]byte, error) {\n\tdata, err := p.buf.ReadBytes(delim)\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\tp.isEOF = true\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn data, nil\n}\n\nfunc cleanComment(in []byte) ([]byte, bool) {\n\ti := bytes.IndexAny(in, \"#;\")\n\tif i == -1 {\n\t\treturn nil, false\n\t}\n\treturn in[i:], true\n}\n\nfunc readKeyName(delimiters string, in []byte) (string, int, error) {\n\tline := string(in)\n\n\t// Check if key name surrounded by quotes.\n\tvar keyQuote string\n\tif line[0] == '\"' {\n\t\tif len(line) > 6 && line[0:3] == `\"\"\"` {\n\t\t\tkeyQuote = `\"\"\"`\n\t\t} else {\n\t\t\tkeyQuote = `\"`\n\t\t}\n\t} else if line[0] == '`' {\n\t\tkeyQuote = \"`\"\n\t}\n\n\t// Get out key name\n\tvar endIdx int\n\tif len(keyQuote) > 0 {\n\t\tstartIdx := len(keyQuote)\n\t\t// FIXME: fail case -> \"\"\"\"\"\"name\"\"\"=value\n\t\tpos := strings.Index(line[startIdx:], keyQuote)\n\t\tif pos == -1 {\n\t\t\treturn \"\", -1, fmt.Errorf(\"missing closing key quote: %s\", line)\n\t\t}\n\t\tpos += startIdx\n\n\t\t// Find key-value delimiter\n\t\ti := strings.IndexAny(line[pos+startIdx:], delimiters)\n\t\tif i < 0 {\n\t\t\treturn \"\", -1, ErrDelimiterNotFound{line}\n\t\t}\n\t\tendIdx = pos + i\n\t\treturn strings.TrimSpace(line[startIdx:pos]), endIdx + startIdx + 1, nil\n\t}\n\n\tendIdx = strings.IndexAny(line, delimiters)\n\tif endIdx < 0 {\n\t\treturn \"\", -1, ErrDelimiterNotFound{line}\n\t}\n\tif endIdx == 0 {\n\t\treturn \"\", -1, ErrEmptyKeyName{line}\n\t}\n\n\treturn strings.TrimSpace(line[0:endIdx]), endIdx + 1, nil\n}\n\nfunc (p *parser) readMultilines(line, val, valQuote string) (string, error) {\n\tfor {\n\t\tdata, err := p.readUntil('\\n')\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tnext := string(data)\n\n\t\tpos := strings.LastIndex(next, valQuote)\n\t\tif pos > -1 {\n\t\t\tval += next[:pos]\n\n\t\t\tcomment, has := cleanComment([]byte(next[pos:]))\n\t\t\tif has {\n\t\t\t\tp.comment.Write(bytes.TrimSpace(comment))\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tval += next\n\t\tif p.isEOF {\n\t\t\treturn \"\", fmt.Errorf(\"missing closing key quote from %q to %q\", line, next)\n\t\t}\n\t}\n\treturn val, nil\n}\n\nfunc (p *parser) readContinuationLines(val string) (string, error) {\n\tfor {\n\t\tdata, err := p.readUntil('\\n')\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tnext := strings.TrimSpace(string(data))\n\n\t\tif len(next) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tval += next\n\t\tif val[len(val)-1] != '\\\\' {\n\t\t\tbreak\n\t\t}\n\t\tval = val[:len(val)-1]\n\t}\n\treturn val, nil\n}\n\n// hasSurroundedQuote check if and only if the first and last characters\n// are quotes \\\" or \\'.\n// It returns false if any other parts also contain same kind of quotes.\nfunc hasSurroundedQuote(in string, quote byte) bool {\n\treturn len(in) >= 2 && in[0] == quote && in[len(in)-1] == quote &&\n\t\tstrings.IndexByte(in[1:], quote) == len(in)-2\n}\n\nfunc (p *parser) readValue(in []byte, bufferSize int) (string, error) {\n\n\tline := strings.TrimLeftFunc(string(in), unicode.IsSpace)\n\tif len(line) == 0 {\n\t\tif p.options.AllowPythonMultilineValues && len(in) > 0 && in[len(in)-1] == '\\n' {\n\t\t\treturn p.readPythonMultilines(line, bufferSize)\n\t\t}\n\t\treturn \"\", nil\n\t}\n\n\tvar valQuote string\n\tif len(line) > 3 && line[0:3] == `\"\"\"` {\n\t\tvalQuote = `\"\"\"`\n\t} else if line[0] == '`' {\n\t\tvalQuote = \"`\"\n\t} else if p.options.UnescapeValueDoubleQuotes && line[0] == '\"' {\n\t\tvalQuote = `\"`\n\t}\n\n\tif len(valQuote) > 0 {\n\t\tstartIdx := len(valQuote)\n\t\tpos := strings.LastIndex(line[startIdx:], valQuote)\n\t\t// Check for multi-line value\n\t\tif pos == -1 {\n\t\t\treturn p.readMultilines(line, line[startIdx:], valQuote)\n\t\t}\n\n\t\tif p.options.UnescapeValueDoubleQuotes && valQuote == `\"` {\n\t\t\treturn strings.Replace(line[startIdx:pos+startIdx], `\\\"`, `\"`, -1), nil\n\t\t}\n\t\treturn line[startIdx : pos+startIdx], nil\n\t}\n\n\tlastChar := line[len(line)-1]\n\t// Won't be able to reach here if value only contains whitespace\n\tline = strings.TrimSpace(line)\n\ttrimmedLastChar := line[len(line)-1]\n\n\t// Check continuation lines when desired\n\tif !p.options.IgnoreContinuation && trimmedLastChar == '\\\\' {\n\t\treturn p.readContinuationLines(line[:len(line)-1])\n\t}\n\n\t// Check if ignore inline comment\n\tif !p.options.IgnoreInlineComment {\n\t\tvar i int\n\t\tif p.options.SpaceBeforeInlineComment {\n\t\t\ti = strings.Index(line, \" #\")\n\t\t\tif i == -1 {\n\t\t\t\ti = strings.Index(line, \" ;\")\n\t\t\t}\n\n\t\t} else {\n\t\t\ti = strings.IndexAny(line, \"#;\")\n\t\t}\n\n\t\tif i > -1 {\n\t\t\tp.comment.WriteString(line[i:])\n\t\t\tline = strings.TrimSpace(line[:i])\n\t\t}\n\n\t}\n\n\t// Trim single and double quotes\n\tif (hasSurroundedQuote(line, '\\'') ||\n\t\thasSurroundedQuote(line, '\"')) && !p.options.PreserveSurroundedQuote {\n\t\tline = line[1 : len(line)-1]\n\t} else if len(valQuote) == 0 && p.options.UnescapeValueCommentSymbols {\n\t\tline = strings.ReplaceAll(line, `\\;`, \";\")\n\t\tline = strings.ReplaceAll(line, `\\#`, \"#\")\n\t} else if p.options.AllowPythonMultilineValues && lastChar == '\\n' {\n\t\treturn p.readPythonMultilines(line, bufferSize)\n\t}\n\n\treturn line, nil\n}\n\nfunc (p *parser) readPythonMultilines(line string, bufferSize int) (string, error) {\n\tparserBufferPeekResult, _ := p.buf.Peek(bufferSize)\n\tpeekBuffer := bytes.NewBuffer(parserBufferPeekResult)\n\n\tfor {\n\t\tpeekData, peekErr := peekBuffer.ReadBytes('\\n')\n\t\tif peekErr != nil && peekErr != io.EOF {\n\t\t\tp.debug(\"readPythonMultilines: failed to peek with error: %v\", peekErr)\n\t\t\treturn \"\", peekErr\n\t\t}\n\n\t\tp.debug(\"readPythonMultilines: parsing %q\", string(peekData))\n\n\t\tpeekMatches := pythonMultiline.FindStringSubmatch(string(peekData))\n\t\tp.debug(\"readPythonMultilines: matched %d parts\", len(peekMatches))\n\t\tfor n, v := range peekMatches {\n\t\t\tp.debug(\"   %d: %q\", n, v)\n\t\t}\n\n\t\t// Return if not a Python multiline value.\n\t\tif len(peekMatches) != 3 {\n\t\t\tp.debug(\"readPythonMultilines: end of value, got: %q\", line)\n\t\t\treturn line, nil\n\t\t}\n\n\t\t// Advance the parser reader (buffer) in-sync with the peek buffer.\n\t\t_, err := p.buf.Discard(len(peekData))\n\t\tif err != nil {\n\t\t\tp.debug(\"readPythonMultilines: failed to skip to the end, returning error\")\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tline += \"\\n\" + peekMatches[0]\n\t}\n}\n\n// parse parses data through an io.Reader.\nfunc (f *File) parse(reader io.Reader) (err error) {\n\tp := newParser(reader, parserOptions{\n\t\tIgnoreContinuation:          f.options.IgnoreContinuation,\n\t\tIgnoreInlineComment:         f.options.IgnoreInlineComment,\n\t\tAllowPythonMultilineValues:  f.options.AllowPythonMultilineValues,\n\t\tSpaceBeforeInlineComment:    f.options.SpaceBeforeInlineComment,\n\t\tUnescapeValueDoubleQuotes:   f.options.UnescapeValueDoubleQuotes,\n\t\tUnescapeValueCommentSymbols: f.options.UnescapeValueCommentSymbols,\n\t\tPreserveSurroundedQuote:     f.options.PreserveSurroundedQuote,\n\t\tDebugFunc:                   f.options.DebugFunc,\n\t\tReaderBufferSize:            f.options.ReaderBufferSize,\n\t})\n\tif err = p.BOM(); err != nil {\n\t\treturn fmt.Errorf(\"BOM: %v\", err)\n\t}\n\n\t// Ignore error because default section name is never empty string.\n\tname := DefaultSection\n\tif f.options.Insensitive || f.options.InsensitiveSections {\n\t\tname = strings.ToLower(DefaultSection)\n\t}\n\tsection, _ := f.NewSection(name)\n\n\t// This \"last\" is not strictly equivalent to \"previous one\" if current key is not the first nested key\n\tvar isLastValueEmpty bool\n\tvar lastRegularKey *Key\n\n\tvar line []byte\n\tvar inUnparseableSection bool\n\n\t// NOTE: Iterate and increase `currentPeekSize` until\n\t// the size of the parser buffer is found.\n\t// TODO(unknwon): When Golang 1.10 is the lowest version supported, replace with `parserBufferSize := p.buf.Size()`.\n\tparserBufferSize := 0\n\t// NOTE: Peek 4kb at a time.\n\tcurrentPeekSize := minReaderBufferSize\n\n\tif f.options.AllowPythonMultilineValues {\n\t\tfor {\n\t\t\tpeekBytes, _ := p.buf.Peek(currentPeekSize)\n\t\t\tpeekBytesLength := len(peekBytes)\n\n\t\t\tif parserBufferSize >= peekBytesLength {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcurrentPeekSize *= 2\n\t\t\tparserBufferSize = peekBytesLength\n\t\t}\n\t}\n\n\tfor !p.isEOF {\n\t\tline, err = p.readUntil('\\n')\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif f.options.AllowNestedValues &&\n\t\t\tisLastValueEmpty && len(line) > 0 {\n\t\t\tif line[0] == ' ' || line[0] == '\\t' {\n\t\t\t\terr = lastRegularKey.addNestedValue(string(bytes.TrimSpace(line)))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tline = bytes.TrimLeftFunc(line, unicode.IsSpace)\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Comments\n\t\tif line[0] == '#' || line[0] == ';' {\n\t\t\t// Note: we do not care ending line break,\n\t\t\t// it is needed for adding second line,\n\t\t\t// so just clean it once at the end when set to value.\n\t\t\tp.comment.Write(line)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Section\n\t\tif line[0] == '[' {\n\t\t\t// Read to the next ']' (TODO: support quoted strings)\n\t\t\tcloseIdx := bytes.LastIndexByte(line, ']')\n\t\t\tif closeIdx == -1 {\n\t\t\t\treturn fmt.Errorf(\"unclosed section: %s\", line)\n\t\t\t}\n\n\t\t\tname := string(line[1:closeIdx])\n\t\t\tsection, err = f.NewSection(name)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tcomment, has := cleanComment(line[closeIdx+1:])\n\t\t\tif has {\n\t\t\t\tp.comment.Write(comment)\n\t\t\t}\n\n\t\t\tsection.Comment = strings.TrimSpace(p.comment.String())\n\n\t\t\t// Reset auto-counter and comments\n\t\t\tp.comment.Reset()\n\t\t\tp.count = 1\n\t\t\t// Nested values can't span sections\n\t\t\tisLastValueEmpty = false\n\n\t\t\tinUnparseableSection = false\n\t\t\tfor i := range f.options.UnparseableSections {\n\t\t\t\tif f.options.UnparseableSections[i] == name ||\n\t\t\t\t\t((f.options.Insensitive || f.options.InsensitiveSections) && strings.EqualFold(f.options.UnparseableSections[i], name)) {\n\t\t\t\t\tinUnparseableSection = true\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif inUnparseableSection {\n\t\t\tsection.isRawSection = true\n\t\t\tsection.rawBody += string(line)\n\t\t\tcontinue\n\t\t}\n\n\t\tkname, offset, err := readKeyName(f.options.KeyValueDelimiters, line)\n\t\tif err != nil {\n\t\t\tswitch {\n\t\t\t// Treat as boolean key when desired, and whole line is key name.\n\t\t\tcase IsErrDelimiterNotFound(err):\n\t\t\t\tswitch {\n\t\t\t\tcase f.options.AllowBooleanKeys:\n\t\t\t\t\tkname, err := p.readValue(line, parserBufferSize)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tkey, err := section.NewBooleanKey(kname)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tkey.Comment = strings.TrimSpace(p.comment.String())\n\t\t\t\t\tp.comment.Reset()\n\t\t\t\t\tcontinue\n\n\t\t\t\tcase f.options.SkipUnrecognizableLines:\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\tcase IsErrEmptyKeyName(err) && f.options.SkipUnrecognizableLines:\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\t// Auto increment.\n\t\tisAutoIncr := false\n\t\tif kname == \"-\" {\n\t\t\tisAutoIncr = true\n\t\t\tkname = \"#\" + strconv.Itoa(p.count)\n\t\t\tp.count++\n\t\t}\n\n\t\tvalue, err := p.readValue(line[offset:], parserBufferSize)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tisLastValueEmpty = len(value) == 0\n\n\t\tkey, err := section.NewKey(kname, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey.isAutoIncrement = isAutoIncr\n\t\tkey.Comment = strings.TrimSpace(p.comment.String())\n\t\tp.comment.Reset()\n\t\tlastRegularKey = key\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/section.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// Section represents a config section.\ntype Section struct {\n\tf        *File\n\tComment  string\n\tname     string\n\tkeys     map[string]*Key\n\tkeyList  []string\n\tkeysHash map[string]string\n\n\tisRawSection bool\n\trawBody      string\n}\n\nfunc newSection(f *File, name string) *Section {\n\treturn &Section{\n\t\tf:        f,\n\t\tname:     name,\n\t\tkeys:     make(map[string]*Key),\n\t\tkeyList:  make([]string, 0, 10),\n\t\tkeysHash: make(map[string]string),\n\t}\n}\n\n// Name returns name of Section.\nfunc (s *Section) Name() string {\n\treturn s.name\n}\n\n// Body returns rawBody of Section if the section was marked as unparseable.\n// It still follows the other rules of the INI format surrounding leading/trailing whitespace.\nfunc (s *Section) Body() string {\n\treturn strings.TrimSpace(s.rawBody)\n}\n\n// SetBody updates body content only if section is raw.\nfunc (s *Section) SetBody(body string) {\n\tif !s.isRawSection {\n\t\treturn\n\t}\n\ts.rawBody = body\n}\n\n// NewKey creates a new key to given section.\nfunc (s *Section) NewKey(name, val string) (*Key, error) {\n\tif len(name) == 0 {\n\t\treturn nil, errors.New(\"error creating new key: empty key name\")\n\t} else if s.f.options.Insensitive || s.f.options.InsensitiveKeys {\n\t\tname = strings.ToLower(name)\n\t}\n\n\tif s.f.BlockMode {\n\t\ts.f.lock.Lock()\n\t\tdefer s.f.lock.Unlock()\n\t}\n\n\tif inSlice(name, s.keyList) {\n\t\tif s.f.options.AllowShadows {\n\t\t\tif err := s.keys[name].addShadow(val); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t} else {\n\t\t\ts.keys[name].value = val\n\t\t\ts.keysHash[name] = val\n\t\t}\n\t\treturn s.keys[name], nil\n\t}\n\n\ts.keyList = append(s.keyList, name)\n\ts.keys[name] = newKey(s, name, val)\n\ts.keysHash[name] = val\n\treturn s.keys[name], nil\n}\n\n// NewBooleanKey creates a new boolean type key to given section.\nfunc (s *Section) NewBooleanKey(name string) (*Key, error) {\n\tkey, err := s.NewKey(name, \"true\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkey.isBooleanType = true\n\treturn key, nil\n}\n\n// GetKey returns key in section by given name.\nfunc (s *Section) GetKey(name string) (*Key, error) {\n\tif s.f.BlockMode {\n\t\ts.f.lock.RLock()\n\t}\n\tif s.f.options.Insensitive || s.f.options.InsensitiveKeys {\n\t\tname = strings.ToLower(name)\n\t}\n\tkey := s.keys[name]\n\tif s.f.BlockMode {\n\t\ts.f.lock.RUnlock()\n\t}\n\n\tif key == nil {\n\t\t// Check if it is a child-section.\n\t\tsname := s.name\n\t\tfor {\n\t\t\tif i := strings.LastIndex(sname, s.f.options.ChildSectionDelimiter); i > -1 {\n\t\t\t\tsname = sname[:i]\n\t\t\t\tsec, err := s.f.GetSection(sname)\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn sec.GetKey(name)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\treturn nil, fmt.Errorf(\"error when getting key of section %q: key %q not exists\", s.name, name)\n\t}\n\treturn key, nil\n}\n\n// HasKey returns true if section contains a key with given name.\nfunc (s *Section) HasKey(name string) bool {\n\tkey, _ := s.GetKey(name)\n\treturn key != nil\n}\n\n// Deprecated: Use \"HasKey\" instead.\nfunc (s *Section) Haskey(name string) bool {\n\treturn s.HasKey(name)\n}\n\n// HasValue returns true if section contains given raw value.\nfunc (s *Section) HasValue(value string) bool {\n\tif s.f.BlockMode {\n\t\ts.f.lock.RLock()\n\t\tdefer s.f.lock.RUnlock()\n\t}\n\n\tfor _, k := range s.keys {\n\t\tif value == k.value {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Key assumes named Key exists in section and returns a zero-value when not.\nfunc (s *Section) Key(name string) *Key {\n\tkey, err := s.GetKey(name)\n\tif err != nil {\n\t\t// It's OK here because the only possible error is empty key name,\n\t\t// but if it's empty, this piece of code won't be executed.\n\t\tkey, _ = s.NewKey(name, \"\")\n\t\treturn key\n\t}\n\treturn key\n}\n\n// Keys returns list of keys of section.\nfunc (s *Section) Keys() []*Key {\n\tkeys := make([]*Key, len(s.keyList))\n\tfor i := range s.keyList {\n\t\tkeys[i] = s.Key(s.keyList[i])\n\t}\n\treturn keys\n}\n\n// ParentKeys returns list of keys of parent section.\nfunc (s *Section) ParentKeys() []*Key {\n\tvar parentKeys []*Key\n\tsname := s.name\n\tfor {\n\t\tif i := strings.LastIndex(sname, s.f.options.ChildSectionDelimiter); i > -1 {\n\t\t\tsname = sname[:i]\n\t\t\tsec, err := s.f.GetSection(sname)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tparentKeys = append(parentKeys, sec.Keys()...)\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\n\t}\n\treturn parentKeys\n}\n\n// KeyStrings returns list of key names of section.\nfunc (s *Section) KeyStrings() []string {\n\tlist := make([]string, len(s.keyList))\n\tcopy(list, s.keyList)\n\treturn list\n}\n\n// KeysHash returns keys hash consisting of names and values.\nfunc (s *Section) KeysHash() map[string]string {\n\tif s.f.BlockMode {\n\t\ts.f.lock.RLock()\n\t\tdefer s.f.lock.RUnlock()\n\t}\n\n\thash := make(map[string]string, len(s.keysHash))\n\tfor key, value := range s.keysHash {\n\t\thash[key] = value\n\t}\n\treturn hash\n}\n\n// DeleteKey deletes a key from section.\nfunc (s *Section) DeleteKey(name string) {\n\tif s.f.BlockMode {\n\t\ts.f.lock.Lock()\n\t\tdefer s.f.lock.Unlock()\n\t}\n\n\tfor i, k := range s.keyList {\n\t\tif k == name {\n\t\t\ts.keyList = append(s.keyList[:i], s.keyList[i+1:]...)\n\t\t\tdelete(s.keys, name)\n\t\t\tdelete(s.keysHash, name)\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// ChildSections returns a list of child sections of current section.\n// For example, \"[parent.child1]\" and \"[parent.child12]\" are child sections\n// of section \"[parent]\".\nfunc (s *Section) ChildSections() []*Section {\n\tprefix := s.name + s.f.options.ChildSectionDelimiter\n\tchildren := make([]*Section, 0, 3)\n\tfor _, name := range s.f.sectionList {\n\t\tif strings.HasPrefix(name, prefix) {\n\t\t\tchildren = append(children, s.f.sections[name]...)\n\t\t}\n\t}\n\treturn children\n}\n"
  },
  {
    "path": "vendor/github.com/go-ini/ini/struct.go",
    "content": "// Copyright 2014 Unknwon\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"): you may\n// not use this file except in compliance with the License. You may obtain\n// 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, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations\n// under the License.\n\npackage ini\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n)\n\n// NameMapper represents a ini tag name mapper.\ntype NameMapper func(string) string\n\n// Built-in name getters.\nvar (\n\t// SnackCase converts to format SNACK_CASE.\n\tSnackCase NameMapper = func(raw string) string {\n\t\tnewstr := make([]rune, 0, len(raw))\n\t\tfor i, chr := range raw {\n\t\t\tif isUpper := 'A' <= chr && chr <= 'Z'; isUpper {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tnewstr = append(newstr, '_')\n\t\t\t\t}\n\t\t\t}\n\t\t\tnewstr = append(newstr, unicode.ToUpper(chr))\n\t\t}\n\t\treturn string(newstr)\n\t}\n\t// TitleUnderscore converts to format title_underscore.\n\tTitleUnderscore NameMapper = func(raw string) string {\n\t\tnewstr := make([]rune, 0, len(raw))\n\t\tfor i, chr := range raw {\n\t\t\tif isUpper := 'A' <= chr && chr <= 'Z'; isUpper {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tnewstr = append(newstr, '_')\n\t\t\t\t}\n\t\t\t\tchr -= 'A' - 'a'\n\t\t\t}\n\t\t\tnewstr = append(newstr, chr)\n\t\t}\n\t\treturn string(newstr)\n\t}\n)\n\nfunc (s *Section) parseFieldName(raw, actual string) string {\n\tif len(actual) > 0 {\n\t\treturn actual\n\t}\n\tif s.f.NameMapper != nil {\n\t\treturn s.f.NameMapper(raw)\n\t}\n\treturn raw\n}\n\nfunc parseDelim(actual string) string {\n\tif len(actual) > 0 {\n\t\treturn actual\n\t}\n\treturn \",\"\n}\n\nvar reflectTime = reflect.TypeOf(time.Now()).Kind()\n\n// setSliceWithProperType sets proper values to slice based on its type.\nfunc setSliceWithProperType(key *Key, field reflect.Value, delim string, allowShadow, isStrict bool) error {\n\tvar strs []string\n\tif allowShadow {\n\t\tstrs = key.StringsWithShadows(delim)\n\t} else {\n\t\tstrs = key.Strings(delim)\n\t}\n\n\tnumVals := len(strs)\n\tif numVals == 0 {\n\t\treturn nil\n\t}\n\n\tvar vals interface{}\n\tvar err error\n\n\tsliceOf := field.Type().Elem().Kind()\n\tswitch sliceOf {\n\tcase reflect.String:\n\t\tvals = strs\n\tcase reflect.Int:\n\t\tvals, err = key.parseInts(strs, true, false)\n\tcase reflect.Int64:\n\t\tvals, err = key.parseInt64s(strs, true, false)\n\tcase reflect.Uint:\n\t\tvals, err = key.parseUints(strs, true, false)\n\tcase reflect.Uint64:\n\t\tvals, err = key.parseUint64s(strs, true, false)\n\tcase reflect.Float64:\n\t\tvals, err = key.parseFloat64s(strs, true, false)\n\tcase reflect.Bool:\n\t\tvals, err = key.parseBools(strs, true, false)\n\tcase reflectTime:\n\t\tvals, err = key.parseTimesFormat(time.RFC3339, strs, true, false)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type '[]%s'\", sliceOf)\n\t}\n\tif err != nil && isStrict {\n\t\treturn err\n\t}\n\n\tslice := reflect.MakeSlice(field.Type(), numVals, numVals)\n\tfor i := 0; i < numVals; i++ {\n\t\tswitch sliceOf {\n\t\tcase reflect.String:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]string)[i]))\n\t\tcase reflect.Int:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]int)[i]))\n\t\tcase reflect.Int64:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]int64)[i]))\n\t\tcase reflect.Uint:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]uint)[i]))\n\t\tcase reflect.Uint64:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]uint64)[i]))\n\t\tcase reflect.Float64:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]float64)[i]))\n\t\tcase reflect.Bool:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]bool)[i]))\n\t\tcase reflectTime:\n\t\t\tslice.Index(i).Set(reflect.ValueOf(vals.([]time.Time)[i]))\n\t\t}\n\t}\n\tfield.Set(slice)\n\treturn nil\n}\n\nfunc wrapStrictError(err error, isStrict bool) error {\n\tif isStrict {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// setWithProperType sets proper value to field based on its type,\n// but it does not return error for failing parsing,\n// because we want to use default value that is already assigned to struct.\nfunc setWithProperType(t reflect.Type, key *Key, field reflect.Value, delim string, allowShadow, isStrict bool) error {\n\tvt := t\n\tisPtr := t.Kind() == reflect.Ptr\n\tif isPtr {\n\t\tvt = t.Elem()\n\t}\n\tswitch vt.Kind() {\n\tcase reflect.String:\n\t\tstringVal := key.String()\n\t\tif isPtr {\n\t\t\tfield.Set(reflect.ValueOf(&stringVal))\n\t\t} else if len(stringVal) > 0 {\n\t\t\tfield.SetString(key.String())\n\t\t}\n\tcase reflect.Bool:\n\t\tboolVal, err := key.Bool()\n\t\tif err != nil {\n\t\t\treturn wrapStrictError(err, isStrict)\n\t\t}\n\t\tif isPtr {\n\t\t\tfield.Set(reflect.ValueOf(&boolVal))\n\t\t} else {\n\t\t\tfield.SetBool(boolVal)\n\t\t}\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t// ParseDuration will not return err for `0`, so check the type name\n\t\tif vt.Name() == \"Duration\" {\n\t\t\tdurationVal, err := key.Duration()\n\t\t\tif err != nil {\n\t\t\t\tif intVal, err := key.Int64(); err == nil {\n\t\t\t\t\tfield.SetInt(intVal)\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\treturn wrapStrictError(err, isStrict)\n\t\t\t}\n\t\t\tif isPtr {\n\t\t\t\tfield.Set(reflect.ValueOf(&durationVal))\n\t\t\t} else if int64(durationVal) > 0 {\n\t\t\t\tfield.Set(reflect.ValueOf(durationVal))\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tintVal, err := key.Int64()\n\t\tif err != nil {\n\t\t\treturn wrapStrictError(err, isStrict)\n\t\t}\n\t\tif isPtr {\n\t\t\tpv := reflect.New(t.Elem())\n\t\t\tpv.Elem().SetInt(intVal)\n\t\t\tfield.Set(pv)\n\t\t} else {\n\t\t\tfield.SetInt(intVal)\n\t\t}\n\t//\tbyte is an alias for uint8, so supporting uint8 breaks support for byte\n\tcase reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tdurationVal, err := key.Duration()\n\t\t// Skip zero value\n\t\tif err == nil && uint64(durationVal) > 0 {\n\t\t\tif isPtr {\n\t\t\t\tfield.Set(reflect.ValueOf(&durationVal))\n\t\t\t} else {\n\t\t\t\tfield.Set(reflect.ValueOf(durationVal))\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tuintVal, err := key.Uint64()\n\t\tif err != nil {\n\t\t\treturn wrapStrictError(err, isStrict)\n\t\t}\n\t\tif isPtr {\n\t\t\tpv := reflect.New(t.Elem())\n\t\t\tpv.Elem().SetUint(uintVal)\n\t\t\tfield.Set(pv)\n\t\t} else {\n\t\t\tfield.SetUint(uintVal)\n\t\t}\n\n\tcase reflect.Float32, reflect.Float64:\n\t\tfloatVal, err := key.Float64()\n\t\tif err != nil {\n\t\t\treturn wrapStrictError(err, isStrict)\n\t\t}\n\t\tif isPtr {\n\t\t\tpv := reflect.New(t.Elem())\n\t\t\tpv.Elem().SetFloat(floatVal)\n\t\t\tfield.Set(pv)\n\t\t} else {\n\t\t\tfield.SetFloat(floatVal)\n\t\t}\n\tcase reflectTime:\n\t\ttimeVal, err := key.Time()\n\t\tif err != nil {\n\t\t\treturn wrapStrictError(err, isStrict)\n\t\t}\n\t\tif isPtr {\n\t\t\tfield.Set(reflect.ValueOf(&timeVal))\n\t\t} else {\n\t\t\tfield.Set(reflect.ValueOf(timeVal))\n\t\t}\n\tcase reflect.Slice:\n\t\treturn setSliceWithProperType(key, field, delim, allowShadow, isStrict)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type %q\", t)\n\t}\n\treturn nil\n}\n\nfunc parseTagOptions(tag string) (rawName string, omitEmpty bool, allowShadow bool, allowNonUnique bool, extends bool) {\n\topts := strings.SplitN(tag, \",\", 5)\n\trawName = opts[0]\n\tfor _, opt := range opts[1:] {\n\t\tomitEmpty = omitEmpty || (opt == \"omitempty\")\n\t\tallowShadow = allowShadow || (opt == \"allowshadow\")\n\t\tallowNonUnique = allowNonUnique || (opt == \"nonunique\")\n\t\textends = extends || (opt == \"extends\")\n\t}\n\treturn rawName, omitEmpty, allowShadow, allowNonUnique, extends\n}\n\n// mapToField maps the given value to the matching field of the given section.\n// The sectionIndex is the index (if non unique sections are enabled) to which the value should be added.\nfunc (s *Section) mapToField(val reflect.Value, isStrict bool, sectionIndex int, sectionName string) error {\n\tif val.Kind() == reflect.Ptr {\n\t\tval = val.Elem()\n\t}\n\ttyp := val.Type()\n\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\tfield := val.Field(i)\n\t\ttpField := typ.Field(i)\n\n\t\ttag := tpField.Tag.Get(\"ini\")\n\t\tif tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\trawName, _, allowShadow, allowNonUnique, extends := parseTagOptions(tag)\n\t\tfieldName := s.parseFieldName(tpField.Name, rawName)\n\t\tif len(fieldName) == 0 || !field.CanSet() {\n\t\t\tcontinue\n\t\t}\n\n\t\tisStruct := tpField.Type.Kind() == reflect.Struct\n\t\tisStructPtr := tpField.Type.Kind() == reflect.Ptr && tpField.Type.Elem().Kind() == reflect.Struct\n\t\tisAnonymousPtr := tpField.Type.Kind() == reflect.Ptr && tpField.Anonymous\n\t\tif isAnonymousPtr {\n\t\t\tfield.Set(reflect.New(tpField.Type.Elem()))\n\t\t}\n\n\t\tif extends && (isAnonymousPtr || (isStruct && tpField.Anonymous)) {\n\t\t\tif isStructPtr && field.IsNil() {\n\t\t\t\tfield.Set(reflect.New(tpField.Type.Elem()))\n\t\t\t}\n\t\t\tfieldSection := s\n\t\t\tif rawName != \"\" {\n\t\t\t\tsectionName = s.name + s.f.options.ChildSectionDelimiter + rawName\n\t\t\t\tif secs, err := s.f.SectionsByName(sectionName); err == nil && sectionIndex < len(secs) {\n\t\t\t\t\tfieldSection = secs[sectionIndex]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif err := fieldSection.mapToField(field, isStrict, sectionIndex, sectionName); err != nil {\n\t\t\t\treturn fmt.Errorf(\"map to field %q: %v\", fieldName, err)\n\t\t\t}\n\t\t} else if isAnonymousPtr || isStruct || isStructPtr {\n\t\t\tif secs, err := s.f.SectionsByName(fieldName); err == nil {\n\t\t\t\tif len(secs) <= sectionIndex {\n\t\t\t\t\treturn fmt.Errorf(\"there are not enough sections (%d <= %d) for the field %q\", len(secs), sectionIndex, fieldName)\n\t\t\t\t}\n\t\t\t\t// Only set the field to non-nil struct value if we have a section for it.\n\t\t\t\t// Otherwise, we end up with a non-nil struct ptr even though there is no data.\n\t\t\t\tif isStructPtr && field.IsNil() {\n\t\t\t\t\tfield.Set(reflect.New(tpField.Type.Elem()))\n\t\t\t\t}\n\t\t\t\tif err = secs[sectionIndex].mapToField(field, isStrict, sectionIndex, fieldName); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"map to field %q: %v\", fieldName, err)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// Map non-unique sections\n\t\tif allowNonUnique && tpField.Type.Kind() == reflect.Slice {\n\t\t\tnewField, err := s.mapToSlice(fieldName, field, isStrict)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"map to slice %q: %v\", fieldName, err)\n\t\t\t}\n\n\t\t\tfield.Set(newField)\n\t\t\tcontinue\n\t\t}\n\n\t\tif key, err := s.GetKey(fieldName); err == nil {\n\t\t\tdelim := parseDelim(tpField.Tag.Get(\"delim\"))\n\t\t\tif err = setWithProperType(tpField.Type, key, field, delim, allowShadow, isStrict); err != nil {\n\t\t\t\treturn fmt.Errorf(\"set field %q: %v\", fieldName, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// mapToSlice maps all sections with the same name and returns the new value.\n// The type of the Value must be a slice.\nfunc (s *Section) mapToSlice(secName string, val reflect.Value, isStrict bool) (reflect.Value, error) {\n\tsecs, err := s.f.SectionsByName(secName)\n\tif err != nil {\n\t\treturn reflect.Value{}, err\n\t}\n\n\ttyp := val.Type().Elem()\n\tfor i, sec := range secs {\n\t\telem := reflect.New(typ)\n\t\tif err = sec.mapToField(elem, isStrict, i, sec.name); err != nil {\n\t\t\treturn reflect.Value{}, fmt.Errorf(\"map to field from section %q: %v\", secName, err)\n\t\t}\n\n\t\tval = reflect.Append(val, elem.Elem())\n\t}\n\treturn val, nil\n}\n\n// mapTo maps a section to object v.\nfunc (s *Section) mapTo(v interface{}, isStrict bool) error {\n\ttyp := reflect.TypeOf(v)\n\tval := reflect.ValueOf(v)\n\tif typ.Kind() == reflect.Ptr {\n\t\ttyp = typ.Elem()\n\t\tval = val.Elem()\n\t} else {\n\t\treturn errors.New(\"not a pointer to a struct\")\n\t}\n\n\tif typ.Kind() == reflect.Slice {\n\t\tnewField, err := s.mapToSlice(s.name, val, isStrict)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tval.Set(newField)\n\t\treturn nil\n\t}\n\n\treturn s.mapToField(val, isStrict, 0, s.name)\n}\n\n// MapTo maps section to given struct.\nfunc (s *Section) MapTo(v interface{}) error {\n\treturn s.mapTo(v, false)\n}\n\n// StrictMapTo maps section to given struct in strict mode,\n// which returns all possible error including value parsing error.\nfunc (s *Section) StrictMapTo(v interface{}) error {\n\treturn s.mapTo(v, true)\n}\n\n// MapTo maps file to given struct.\nfunc (f *File) MapTo(v interface{}) error {\n\treturn f.Section(\"\").MapTo(v)\n}\n\n// StrictMapTo maps file to given struct in strict mode,\n// which returns all possible error including value parsing error.\nfunc (f *File) StrictMapTo(v interface{}) error {\n\treturn f.Section(\"\").StrictMapTo(v)\n}\n\n// MapToWithMapper maps data sources to given struct with name mapper.\nfunc MapToWithMapper(v interface{}, mapper NameMapper, source interface{}, others ...interface{}) error {\n\tcfg, err := Load(source, others...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcfg.NameMapper = mapper\n\treturn cfg.MapTo(v)\n}\n\n// StrictMapToWithMapper maps data sources to given struct with name mapper in strict mode,\n// which returns all possible error including value parsing error.\nfunc StrictMapToWithMapper(v interface{}, mapper NameMapper, source interface{}, others ...interface{}) error {\n\tcfg, err := Load(source, others...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tcfg.NameMapper = mapper\n\treturn cfg.StrictMapTo(v)\n}\n\n// MapTo maps data sources to given struct.\nfunc MapTo(v, source interface{}, others ...interface{}) error {\n\treturn MapToWithMapper(v, nil, source, others...)\n}\n\n// StrictMapTo maps data sources to given struct in strict mode,\n// which returns all possible error including value parsing error.\nfunc StrictMapTo(v, source interface{}, others ...interface{}) error {\n\treturn StrictMapToWithMapper(v, nil, source, others...)\n}\n\n// reflectSliceWithProperType does the opposite thing as setSliceWithProperType.\nfunc reflectSliceWithProperType(key *Key, field reflect.Value, delim string, allowShadow bool) error {\n\tslice := field.Slice(0, field.Len())\n\tif field.Len() == 0 {\n\t\treturn nil\n\t}\n\tsliceOf := field.Type().Elem().Kind()\n\n\tif allowShadow {\n\t\tvar keyWithShadows *Key\n\t\tfor i := 0; i < field.Len(); i++ {\n\t\t\tvar val string\n\t\t\tswitch sliceOf {\n\t\t\tcase reflect.String:\n\t\t\t\tval = slice.Index(i).String()\n\t\t\tcase reflect.Int, reflect.Int64:\n\t\t\t\tval = fmt.Sprint(slice.Index(i).Int())\n\t\t\tcase reflect.Uint, reflect.Uint64:\n\t\t\t\tval = fmt.Sprint(slice.Index(i).Uint())\n\t\t\tcase reflect.Float64:\n\t\t\t\tval = fmt.Sprint(slice.Index(i).Float())\n\t\t\tcase reflect.Bool:\n\t\t\t\tval = fmt.Sprint(slice.Index(i).Bool())\n\t\t\tcase reflectTime:\n\t\t\t\tval = slice.Index(i).Interface().(time.Time).Format(time.RFC3339)\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"unsupported type '[]%s'\", sliceOf)\n\t\t\t}\n\n\t\t\tif i == 0 {\n\t\t\t\tkeyWithShadows = newKey(key.s, key.name, val)\n\t\t\t} else {\n\t\t\t\t_ = keyWithShadows.AddShadow(val)\n\t\t\t}\n\t\t}\n\t\t*key = *keyWithShadows\n\t\treturn nil\n\t}\n\n\tvar buf bytes.Buffer\n\tfor i := 0; i < field.Len(); i++ {\n\t\tswitch sliceOf {\n\t\tcase reflect.String:\n\t\t\tbuf.WriteString(slice.Index(i).String())\n\t\tcase reflect.Int, reflect.Int64:\n\t\t\tbuf.WriteString(fmt.Sprint(slice.Index(i).Int()))\n\t\tcase reflect.Uint, reflect.Uint64:\n\t\t\tbuf.WriteString(fmt.Sprint(slice.Index(i).Uint()))\n\t\tcase reflect.Float64:\n\t\t\tbuf.WriteString(fmt.Sprint(slice.Index(i).Float()))\n\t\tcase reflect.Bool:\n\t\t\tbuf.WriteString(fmt.Sprint(slice.Index(i).Bool()))\n\t\tcase reflectTime:\n\t\t\tbuf.WriteString(slice.Index(i).Interface().(time.Time).Format(time.RFC3339))\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported type '[]%s'\", sliceOf)\n\t\t}\n\t\tbuf.WriteString(delim)\n\t}\n\tkey.SetValue(buf.String()[:buf.Len()-len(delim)])\n\treturn nil\n}\n\n// reflectWithProperType does the opposite thing as setWithProperType.\nfunc reflectWithProperType(t reflect.Type, key *Key, field reflect.Value, delim string, allowShadow bool) error {\n\tswitch t.Kind() {\n\tcase reflect.String:\n\t\tkey.SetValue(field.String())\n\tcase reflect.Bool:\n\t\tkey.SetValue(fmt.Sprint(field.Bool()))\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tkey.SetValue(fmt.Sprint(field.Int()))\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tkey.SetValue(fmt.Sprint(field.Uint()))\n\tcase reflect.Float32, reflect.Float64:\n\t\tkey.SetValue(fmt.Sprint(field.Float()))\n\tcase reflectTime:\n\t\tkey.SetValue(fmt.Sprint(field.Interface().(time.Time).Format(time.RFC3339)))\n\tcase reflect.Slice:\n\t\treturn reflectSliceWithProperType(key, field, delim, allowShadow)\n\tcase reflect.Ptr:\n\t\tif !field.IsNil() {\n\t\t\treturn reflectWithProperType(t.Elem(), key, field.Elem(), delim, allowShadow)\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type %q\", t)\n\t}\n\treturn nil\n}\n\n// CR: copied from encoding/json/encode.go with modifications of time.Time support.\n// TODO: add more test coverage.\nfunc isEmptyValue(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\treturn v.Len() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\tcase reflectTime:\n\t\tt, ok := v.Interface().(time.Time)\n\t\treturn ok && t.IsZero()\n\t}\n\treturn false\n}\n\n// StructReflector is the interface implemented by struct types that can extract themselves into INI objects.\ntype StructReflector interface {\n\tReflectINIStruct(*File) error\n}\n\nfunc (s *Section) reflectFrom(val reflect.Value) error {\n\tif val.Kind() == reflect.Ptr {\n\t\tval = val.Elem()\n\t}\n\ttyp := val.Type()\n\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\tif !val.Field(i).CanInterface() {\n\t\t\tcontinue\n\t\t}\n\n\t\tfield := val.Field(i)\n\t\ttpField := typ.Field(i)\n\n\t\ttag := tpField.Tag.Get(\"ini\")\n\t\tif tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\trawName, omitEmpty, allowShadow, allowNonUnique, extends := parseTagOptions(tag)\n\t\tif omitEmpty && isEmptyValue(field) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif r, ok := field.Interface().(StructReflector); ok {\n\t\t\treturn r.ReflectINIStruct(s.f)\n\t\t}\n\n\t\tfieldName := s.parseFieldName(tpField.Name, rawName)\n\t\tif len(fieldName) == 0 || !field.CanSet() {\n\t\t\tcontinue\n\t\t}\n\n\t\tif extends && tpField.Anonymous && (tpField.Type.Kind() == reflect.Ptr || tpField.Type.Kind() == reflect.Struct) {\n\t\t\tif err := s.reflectFrom(field); err != nil {\n\t\t\t\treturn fmt.Errorf(\"reflect from field %q: %v\", fieldName, err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif (tpField.Type.Kind() == reflect.Ptr && tpField.Type.Elem().Kind() == reflect.Struct) ||\n\t\t\t(tpField.Type.Kind() == reflect.Struct && tpField.Type.Name() != \"Time\") {\n\t\t\t// Note: The only error here is section doesn't exist.\n\t\t\tsec, err := s.f.GetSection(fieldName)\n\t\t\tif err != nil {\n\t\t\t\t// Note: fieldName can never be empty here, ignore error.\n\t\t\t\tsec, _ = s.f.NewSection(fieldName)\n\t\t\t}\n\n\t\t\t// Add comment from comment tag\n\t\t\tif len(sec.Comment) == 0 {\n\t\t\t\tsec.Comment = tpField.Tag.Get(\"comment\")\n\t\t\t}\n\n\t\t\tif err = sec.reflectFrom(field); err != nil {\n\t\t\t\treturn fmt.Errorf(\"reflect from field %q: %v\", fieldName, err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif allowNonUnique && tpField.Type.Kind() == reflect.Slice {\n\t\t\tslice := field.Slice(0, field.Len())\n\t\t\tif field.Len() == 0 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tsliceOf := field.Type().Elem().Kind()\n\n\t\t\tfor i := 0; i < field.Len(); i++ {\n\t\t\t\tif sliceOf != reflect.Struct && sliceOf != reflect.Ptr {\n\t\t\t\t\treturn fmt.Errorf(\"field %q is not a slice of pointer or struct\", fieldName)\n\t\t\t\t}\n\n\t\t\t\tsec, err := s.f.NewSection(fieldName)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\n\t\t\t\t// Add comment from comment tag\n\t\t\t\tif len(sec.Comment) == 0 {\n\t\t\t\t\tsec.Comment = tpField.Tag.Get(\"comment\")\n\t\t\t\t}\n\n\t\t\t\tif err := sec.reflectFrom(slice.Index(i)); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"reflect from field %q: %v\", fieldName, err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Note: Same reason as section.\n\t\tkey, err := s.GetKey(fieldName)\n\t\tif err != nil {\n\t\t\tkey, _ = s.NewKey(fieldName, \"\")\n\t\t}\n\n\t\t// Add comment from comment tag\n\t\tif len(key.Comment) == 0 {\n\t\t\tkey.Comment = tpField.Tag.Get(\"comment\")\n\t\t}\n\n\t\tdelim := parseDelim(tpField.Tag.Get(\"delim\"))\n\t\tif err = reflectWithProperType(tpField.Type, key, field, delim, allowShadow); err != nil {\n\t\t\treturn fmt.Errorf(\"reflect field %q: %v\", fieldName, err)\n\t\t}\n\n\t}\n\treturn nil\n}\n\n// ReflectFrom reflects section from given struct. It overwrites existing ones.\nfunc (s *Section) ReflectFrom(v interface{}) error {\n\ttyp := reflect.TypeOf(v)\n\tval := reflect.ValueOf(v)\n\n\tif s.name != DefaultSection && s.f.options.AllowNonUniqueSections &&\n\t\t(typ.Kind() == reflect.Slice || typ.Kind() == reflect.Ptr) {\n\t\t// Clear sections to make sure none exists before adding the new ones\n\t\ts.f.DeleteSection(s.name)\n\n\t\tif typ.Kind() == reflect.Ptr {\n\t\t\tsec, err := s.f.NewSection(s.name)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn sec.reflectFrom(val.Elem())\n\t\t}\n\n\t\tslice := val.Slice(0, val.Len())\n\t\tsliceOf := val.Type().Elem().Kind()\n\t\tif sliceOf != reflect.Ptr {\n\t\t\treturn fmt.Errorf(\"not a slice of pointers\")\n\t\t}\n\n\t\tfor i := 0; i < slice.Len(); i++ {\n\t\t\tsec, err := s.f.NewSection(s.name)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\terr = sec.reflectFrom(slice.Index(i))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"reflect from %dth field: %v\", i, err)\n\t\t\t}\n\t\t}\n\n\t\treturn nil\n\t}\n\n\tif typ.Kind() == reflect.Ptr {\n\t\tval = val.Elem()\n\t} else {\n\t\treturn errors.New(\"not a pointer to a struct\")\n\t}\n\n\treturn s.reflectFrom(val)\n}\n\n// ReflectFrom reflects file from given struct.\nfunc (f *File) ReflectFrom(v interface{}) error {\n\treturn f.Section(\"\").ReflectFrom(v)\n}\n\n// ReflectFromWithMapper reflects data sources from given struct with name mapper.\nfunc ReflectFromWithMapper(cfg *File, v interface{}, mapper NameMapper) error {\n\tcfg.NameMapper = mapper\n\treturn cfg.ReflectFrom(v)\n}\n\n// ReflectFrom reflects data sources from given struct.\nfunc ReflectFrom(cfg *File, v interface{}) error {\n\treturn ReflectFromWithMapper(cfg, v, nil)\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/.golangci.yaml",
    "content": "run:\n  timeout: 1m\n  tests: true\n\nlinters:\n  disable-all: true\n  enable:\n    - asciicheck\n    - errcheck\n    - forcetypeassert\n    - gocritic\n    - gofmt\n    - goimports\n    - gosimple\n    - govet\n    - ineffassign\n    - misspell\n    - revive\n    - staticcheck\n    - typecheck\n    - unused\n\nissues:\n  exclude-use-default: false\n  max-issues-per-linter: 0\n  max-same-issues: 10\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/CHANGELOG.md",
    "content": "# CHANGELOG\n\n## v1.0.0-rc1\n\nThis is the first logged release.  Major changes (including breaking changes)\nhave occurred since earlier tags.\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/CONTRIBUTING.md",
    "content": "# Contributing\n\nLogr is open to pull-requests, provided they fit within the intended scope of\nthe project.  Specifically, this library aims to be VERY small and minimalist,\nwith no external dependencies.\n\n## Compatibility\n\nThis project intends to follow [semantic versioning](http://semver.org) and\nis very strict about compatibility.  Any proposed changes MUST follow those\nrules.\n\n## Performance\n\nAs a logging library, logr must be as light-weight as possible.  Any proposed\ncode change must include results of running the [benchmark](./benchmark)\nbefore and after the change.\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/README.md",
    "content": "# A minimal logging API for Go\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/go-logr/logr.svg)](https://pkg.go.dev/github.com/go-logr/logr)\n[![Go Report Card](https://goreportcard.com/badge/github.com/go-logr/logr)](https://goreportcard.com/report/github.com/go-logr/logr)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/go-logr/logr/badge)](https://securityscorecards.dev/viewer/?platform=github.com&org=go-logr&repo=logr)\n\nlogr offers an(other) opinion on how Go programs and libraries can do logging\nwithout becoming coupled to a particular logging implementation.  This is not\nan implementation of logging - it is an API.  In fact it is two APIs with two\ndifferent sets of users.\n\nThe `Logger` type is intended for application and library authors.  It provides\na relatively small API which can be used everywhere you want to emit logs.  It\ndefers the actual act of writing logs (to files, to stdout, or whatever) to the\n`LogSink` interface.\n\nThe `LogSink` interface is intended for logging library implementers.  It is a\npure interface which can be implemented by logging frameworks to provide the actual logging\nfunctionality.\n\nThis decoupling allows application and library developers to write code in\nterms of `logr.Logger` (which has very low dependency fan-out) while the\nimplementation of logging is managed \"up stack\" (e.g. in or near `main()`.)\nApplication developers can then switch out implementations as necessary.\n\nMany people assert that libraries should not be logging, and as such efforts\nlike this are pointless.  Those people are welcome to convince the authors of\nthe tens-of-thousands of libraries that *DO* write logs that they are all\nwrong.  In the meantime, logr takes a more practical approach.\n\n## Typical usage\n\nSomewhere, early in an application's life, it will make a decision about which\nlogging library (implementation) it actually wants to use.  Something like:\n\n```\n    func main() {\n        // ... other setup code ...\n\n        // Create the \"root\" logger.  We have chosen the \"logimpl\" implementation,\n        // which takes some initial parameters and returns a logr.Logger.\n        logger := logimpl.New(param1, param2)\n\n        // ... other setup code ...\n```\n\nMost apps will call into other libraries, create structures to govern the flow,\netc.  The `logr.Logger` object can be passed to these other libraries, stored\nin structs, or even used as a package-global variable, if needed.  For example:\n\n```\n    app := createTheAppObject(logger)\n    app.Run()\n```\n\nOutside of this early setup, no other packages need to know about the choice of\nimplementation.  They write logs in terms of the `logr.Logger` that they\nreceived:\n\n```\n    type appObject struct {\n        // ... other fields ...\n        logger logr.Logger\n        // ... other fields ...\n    }\n\n    func (app *appObject) Run() {\n        app.logger.Info(\"starting up\", \"timestamp\", time.Now())\n\n        // ... app code ...\n```\n\n## Background\n\nIf the Go standard library had defined an interface for logging, this project\nprobably would not be needed.  Alas, here we are.\n\nWhen the Go developers started developing such an interface with\n[slog](https://github.com/golang/go/issues/56345), they adopted some of the\nlogr design but also left out some parts and changed others:\n\n| Feature | logr | slog |\n|---------|------|------|\n| High-level API | `Logger` (passed by value) | `Logger` (passed by [pointer](https://github.com/golang/go/issues/59126)) |\n| Low-level API | `LogSink` | `Handler` |\n| Stack unwinding | done by `LogSink` | done by `Logger` |\n| Skipping helper functions | `WithCallDepth`, `WithCallStackHelper` | [not supported by Logger](https://github.com/golang/go/issues/59145) |\n| Generating a value for logging on demand | `Marshaler` | `LogValuer` |\n| Log levels | >= 0, higher meaning \"less important\" | positive and negative, with 0 for \"info\" and higher meaning \"more important\" |\n| Error log entries | always logged, don't have a verbosity level | normal log entries with level >= `LevelError` |\n| Passing logger via context | `NewContext`, `FromContext` | no API |\n| Adding a name to a logger | `WithName` | no API |\n| Modify verbosity of log entries in a call chain | `V` | no API |\n| Grouping of key/value pairs | not supported | `WithGroup`, `GroupValue` |\n| Pass context for extracting additional values | no API | API variants like `InfoCtx` |\n\nThe high-level slog API is explicitly meant to be one of many different APIs\nthat can be layered on top of a shared `slog.Handler`. logr is one such\nalternative API, with [interoperability](#slog-interoperability) provided by\nsome conversion functions.\n\n### Inspiration\n\nBefore you consider this package, please read [this blog post by the\ninimitable Dave Cheney][warning-makes-no-sense].  We really appreciate what\nhe has to say, and it largely aligns with our own experiences.\n\n### Differences from Dave's ideas\n\nThe main differences are:\n\n1. Dave basically proposes doing away with the notion of a logging API in favor\nof `fmt.Printf()`.  We disagree, especially when you consider things like output\nlocations, timestamps, file and line decorations, and structured logging.  This\npackage restricts the logging API to just 2 types of logs: info and error.\n\nInfo logs are things you want to tell the user which are not errors.  Error\nlogs are, well, errors.  If your code receives an `error` from a subordinate\nfunction call and is logging that `error` *and not returning it*, use error\nlogs.\n\n2. Verbosity-levels on info logs.  This gives developers a chance to indicate\narbitrary grades of importance for info logs, without assigning names with\nsemantic meaning such as \"warning\", \"trace\", and \"debug.\"  Superficially this\nmay feel very similar, but the primary difference is the lack of semantics.\nBecause verbosity is a numerical value, it's safe to assume that an app running\nwith higher verbosity means more (and less important) logs will be generated.\n\n## Implementations (non-exhaustive)\n\nThere are implementations for the following logging libraries:\n\n- **a function** (can bridge to non-structured libraries): [funcr](https://github.com/go-logr/logr/tree/master/funcr)\n- **a testing.T** (for use in Go tests, with JSON-like output): [testr](https://github.com/go-logr/logr/tree/master/testr)\n- **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr)\n- **k8s.io/klog** (for Kubernetes): [klogr](https://git.k8s.io/klog/klogr)\n- **a testing.T** (with klog-like text output): [ktesting](https://git.k8s.io/klog/ktesting)\n- **go.uber.org/zap**: [zapr](https://github.com/go-logr/zapr)\n- **log** (the Go standard library logger): [stdr](https://github.com/go-logr/stdr)\n- **github.com/sirupsen/logrus**: [logrusr](https://github.com/bombsimon/logrusr)\n- **github.com/wojas/genericr**: [genericr](https://github.com/wojas/genericr) (makes it easy to implement your own backend)\n- **logfmt** (Heroku style [logging](https://www.brandur.org/logfmt)): [logfmtr](https://github.com/iand/logfmtr)\n- **github.com/rs/zerolog**: [zerologr](https://github.com/go-logr/zerologr)\n- **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0)\n- **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing)\n\n## slog interoperability\n\nInteroperability goes both ways, using the `logr.Logger` API with a `slog.Handler`\nand using the `slog.Logger` API with a `logr.LogSink`. `FromSlogHandler` and\n`ToSlogHandler` convert between a `logr.Logger` and a `slog.Handler`.\nAs usual, `slog.New` can be used to wrap such a `slog.Handler` in the high-level\nslog API.\n\n### Using a `logr.LogSink` as backend for slog\n\nIdeally, a logr sink implementation should support both logr and slog by\nimplementing both the normal logr interface(s) and `SlogSink`.  Because\nof a conflict in the parameters of the common `Enabled` method, it is [not\npossible to implement both slog.Handler and logr.Sink in the same\ntype](https://github.com/golang/go/issues/59110).\n\nIf both are supported, log calls can go from the high-level APIs to the backend\nwithout the need to convert parameters. `FromSlogHandler` and `ToSlogHandler` can\nconvert back and forth without adding additional wrappers, with one exception:\nwhen `Logger.V` was used to adjust the verbosity for a `slog.Handler`, then\n`ToSlogHandler` has to use a wrapper which adjusts the verbosity for future\nlog calls.\n\nSuch an implementation should also support values that implement specific\ninterfaces from both packages for logging (`logr.Marshaler`, `slog.LogValuer`,\n`slog.GroupValue`). logr does not convert those.\n\nNot supporting slog has several drawbacks:\n- Recording source code locations works correctly if the handler gets called\n  through `slog.Logger`, but may be wrong in other cases. That's because a\n  `logr.Sink` does its own stack unwinding instead of using the program counter\n  provided by the high-level API.\n- slog levels <= 0 can be mapped to logr levels by negating the level without a\n  loss of information. But all slog levels > 0 (e.g. `slog.LevelWarning` as\n  used by `slog.Logger.Warn`) must be mapped to 0 before calling the sink\n  because logr does not support \"more important than info\" levels.\n- The slog group concept is supported by prefixing each key in a key/value\n  pair with the group names, separated by a dot. For structured output like\n  JSON it would be better to group the key/value pairs inside an object.\n- Special slog values and interfaces don't work as expected.\n- The overhead is likely to be higher.\n\nThese drawbacks are severe enough that applications using a mixture of slog and\nlogr should switch to a different backend.\n\n### Using a `slog.Handler` as backend for logr\n\nUsing a plain `slog.Handler` without support for logr works better than the\nother direction:\n- All logr verbosity levels can be mapped 1:1 to their corresponding slog level\n  by negating them.\n- Stack unwinding is done by the `SlogSink` and the resulting program\n  counter is passed to the `slog.Handler`.\n- Names added via `Logger.WithName` are gathered and recorded in an additional\n  attribute with `logger` as key and the names separated by slash as value.\n- `Logger.Error` is turned into a log record with `slog.LevelError` as level\n  and an additional attribute with `err` as key, if an error was provided.\n\nThe main drawback is that `logr.Marshaler` will not be supported. Types should\nideally support both `logr.Marshaler` and `slog.Valuer`. If compatibility\nwith logr implementations without slog support is not important, then\n`slog.Valuer` is sufficient.\n\n### Context support for slog\n\nStoring a logger in a `context.Context` is not supported by\nslog. `NewContextWithSlogLogger` and `FromContextAsSlogLogger` can be\nused to fill this gap. They store and retrieve a `slog.Logger` pointer\nunder the same context key that is also used by `NewContext` and\n`FromContext` for `logr.Logger` value.\n\nWhen `NewContextWithSlogLogger` is followed by `FromContext`, the latter will\nautomatically convert the `slog.Logger` to a\n`logr.Logger`. `FromContextAsSlogLogger` does the same for the other direction.\n\nWith this approach, binaries which use either slog or logr are as efficient as\npossible with no unnecessary allocations. This is also why the API stores a\n`slog.Logger` pointer: when storing a `slog.Handler`, creating a `slog.Logger`\non retrieval would need to allocate one.\n\nThe downside is that switching back and forth needs more allocations. Because\nlogr is the API that is already in use by different packages, in particular\nKubernetes, the recommendation is to use the `logr.Logger` API in code which\nuses contextual logging.\n\nAn alternative to adding values to a logger and storing that logger in the\ncontext is to store the values in the context and to configure a logging\nbackend to extract those values when emitting log entries. This only works when\nlog calls are passed the context, which is not supported by the logr API.\n\nWith the slog API, it is possible, but not\nrequired. https://github.com/veqryn/slog-context is a package for slog which\nprovides additional support code for this approach. It also contains wrappers\nfor the context functions in logr, so developers who prefer to not use the logr\nAPIs directly can use those instead and the resulting code will still be\ninteroperable with logr.\n\n## FAQ\n\n### Conceptual\n\n#### Why structured logging?\n\n- **Structured logs are more easily queryable**: Since you've got\n  key-value pairs, it's much easier to query your structured logs for\n  particular values by filtering on the contents of a particular key --\n  think searching request logs for error codes, Kubernetes reconcilers for\n  the name and namespace of the reconciled object, etc.\n\n- **Structured logging makes it easier to have cross-referenceable logs**:\n  Similarly to searchability, if you maintain conventions around your\n  keys, it becomes easy to gather all log lines related to a particular\n  concept.\n\n- **Structured logs allow better dimensions of filtering**: if you have\n  structure to your logs, you've got more precise control over how much\n  information is logged -- you might choose in a particular configuration\n  to log certain keys but not others, only log lines where a certain key\n  matches a certain value, etc., instead of just having v-levels and names\n  to key off of.\n\n- **Structured logs better represent structured data**: sometimes, the\n  data that you want to log is inherently structured (think tuple-link\n  objects.)  Structured logs allow you to preserve that structure when\n  outputting.\n\n#### Why V-levels?\n\n**V-levels give operators an easy way to control the chattiness of log\noperations**.  V-levels provide a way for a given package to distinguish\nthe relative importance or verbosity of a given log message.  Then, if\na particular logger or package is logging too many messages, the user\nof the package can simply change the v-levels for that library.\n\n#### Why not named levels, like Info/Warning/Error?\n\nRead [Dave Cheney's post][warning-makes-no-sense].  Then read [Differences\nfrom Dave's ideas](#differences-from-daves-ideas).\n\n#### Why not allow format strings, too?\n\n**Format strings negate many of the benefits of structured logs**:\n\n- They're not easily searchable without resorting to fuzzy searching,\n  regular expressions, etc.\n\n- They don't store structured data well, since contents are flattened into\n  a string.\n\n- They're not cross-referenceable.\n\n- They don't compress easily, since the message is not constant.\n\n(Unless you turn positional parameters into key-value pairs with numerical\nkeys, at which point you've gotten key-value logging with meaningless\nkeys.)\n\n### Practical\n\n#### Why key-value pairs, and not a map?\n\nKey-value pairs are *much* easier to optimize, especially around\nallocations.  Zap (a structured logger that inspired logr's interface) has\n[performance measurements](https://github.com/uber-go/zap#performance)\nthat show this quite nicely.\n\nWhile the interface ends up being a little less obvious, you get\npotentially better performance, plus avoid making users type\n`map[string]string{}` every time they want to log.\n\n#### What if my V-levels differ between libraries?\n\nThat's fine.  Control your V-levels on a per-logger basis, and use the\n`WithName` method to pass different loggers to different libraries.\n\nGenerally, you should take care to ensure that you have relatively\nconsistent V-levels within a given logger, however, as this makes deciding\non what verbosity of logs to request easier.\n\n#### But I really want to use a format string!\n\nThat's not actually a question.  Assuming your question is \"how do\nI convert my mental model of logging with format strings to logging with\nconstant messages\":\n\n1. Figure out what the error actually is, as you'd write in a TL;DR style,\n   and use that as a message.\n\n2. For every place you'd write a format specifier, look to the word before\n   it, and add that as a key value pair.\n\nFor instance, consider the following examples (all taken from spots in the\nKubernetes codebase):\n\n- `klog.V(4).Infof(\"Client is returning errors: code %v, error %v\",\n  responseCode, err)` becomes `logger.Error(err, \"client returned an\n  error\", \"code\", responseCode)`\n\n- `klog.V(4).Infof(\"Got a Retry-After %ds response for attempt %d to %v\",\n  seconds, retries, url)` becomes `logger.V(4).Info(\"got a retry-after\n  response when requesting url\", \"attempt\", retries, \"after\n  seconds\", seconds, \"url\", url)`\n\nIf you *really* must use a format string, use it in a key's value, and\ncall `fmt.Sprintf` yourself.  For instance: `log.Printf(\"unable to\nreflect over type %T\")` becomes `logger.Info(\"unable to reflect over\ntype\", \"type\", fmt.Sprintf(\"%T\"))`.  In general though, the cases where\nthis is necessary should be few and far between.\n\n#### How do I choose my V-levels?\n\nThis is basically the only hard constraint: increase V-levels to denote\nmore verbose or more debug-y logs.\n\nOtherwise, you can start out with `0` as \"you always want to see this\",\n`1` as \"common logging that you might *possibly* want to turn off\", and\n`10` as \"I would like to performance-test your log collection stack.\"\n\nThen gradually choose levels in between as you need them, working your way\ndown from 10 (for debug and trace style logs) and up from 1 (for chattier\ninfo-type logs). For reference, slog pre-defines -4 for debug logs\n(corresponds to 4 in logr), which matches what is\n[recommended for Kubernetes](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md#what-method-to-use).\n\n#### How do I choose my keys?\n\nKeys are fairly flexible, and can hold more or less any string\nvalue. For best compatibility with implementations and consistency\nwith existing code in other projects, there are a few conventions you\nshould consider.\n\n- Make your keys human-readable.\n- Constant keys are generally a good idea.\n- Be consistent across your codebase.\n- Keys should naturally match parts of the message string.\n- Use lower case for simple keys and\n  [lowerCamelCase](https://en.wiktionary.org/wiki/lowerCamelCase) for\n  more complex ones. Kubernetes is one example of a project that has\n  [adopted that\n  convention](https://github.com/kubernetes/community/blob/HEAD/contributors/devel/sig-instrumentation/migration-to-structured-logging.md#name-arguments).\n\nWhile key names are mostly unrestricted (and spaces are acceptable),\nit's generally a good idea to stick to printable ascii characters, or at\nleast match the general character set of your log lines.\n\n#### Why should keys be constant values?\n\nThe point of structured logging is to make later log processing easier.  Your\nkeys are, effectively, the schema of each log message.  If you use different\nkeys across instances of the same log line, you will make your structured logs\nmuch harder to use.  `Sprintf()` is for values, not for keys!\n\n#### Why is this not a pure interface?\n\nThe Logger type is implemented as a struct in order to allow the Go compiler to\noptimize things like high-V `Info` logs that are not triggered.  Not all of\nthese implementations are implemented yet, but this structure was suggested as\na way to ensure they *can* be implemented.  All of the real work is behind the\n`LogSink` interface.\n\n[warning-makes-no-sense]: http://dave.cheney.net/2015/11/05/lets-talk-about-logging\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/SECURITY.md",
    "content": "# Security Policy\n\nIf you have discovered a security vulnerability in this project, please report it\nprivately. **Do not disclose it as a public issue.** This gives us time to work with you\nto fix the issue before public exposure, reducing the chance that the exploit will be\nused before a patch is released.\n\nYou may submit the report in the following ways:\n\n- send an email to go-logr-security@googlegroups.com\n- send us a [private vulnerability report](https://github.com/go-logr/logr/security/advisories/new)\n\nPlease provide the following information in your report:\n\n- A description of the vulnerability and its impact\n- How to reproduce the issue\n\nWe ask that you give us 90 days to work on a fix before public exposure.\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/context.go",
    "content": "/*\nCopyright 2023 The logr Authors.\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\npackage logr\n\n// contextKey is how we find Loggers in a context.Context. With Go < 1.21,\n// the value is always a Logger value. With Go >= 1.21, the value can be a\n// Logger value or a slog.Logger pointer.\ntype contextKey struct{}\n\n// notFoundError exists to carry an IsNotFound method.\ntype notFoundError struct{}\n\nfunc (notFoundError) Error() string {\n\treturn \"no logr.Logger was present\"\n}\n\nfunc (notFoundError) IsNotFound() bool {\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/context_noslog.go",
    "content": "//go:build !go1.21\n// +build !go1.21\n\n/*\nCopyright 2019 The logr Authors.\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\npackage logr\n\nimport (\n\t\"context\"\n)\n\n// FromContext returns a Logger from ctx or an error if no Logger is found.\nfunc FromContext(ctx context.Context) (Logger, error) {\n\tif v, ok := ctx.Value(contextKey{}).(Logger); ok {\n\t\treturn v, nil\n\t}\n\n\treturn Logger{}, notFoundError{}\n}\n\n// FromContextOrDiscard returns a Logger from ctx.  If no Logger is found, this\n// returns a Logger that discards all log messages.\nfunc FromContextOrDiscard(ctx context.Context) Logger {\n\tif v, ok := ctx.Value(contextKey{}).(Logger); ok {\n\t\treturn v\n\t}\n\n\treturn Discard()\n}\n\n// NewContext returns a new Context, derived from ctx, which carries the\n// provided Logger.\nfunc NewContext(ctx context.Context, logger Logger) context.Context {\n\treturn context.WithValue(ctx, contextKey{}, logger)\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/context_slog.go",
    "content": "//go:build go1.21\n// +build go1.21\n\n/*\nCopyright 2019 The logr Authors.\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\npackage logr\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n)\n\n// FromContext returns a Logger from ctx or an error if no Logger is found.\nfunc FromContext(ctx context.Context) (Logger, error) {\n\tv := ctx.Value(contextKey{})\n\tif v == nil {\n\t\treturn Logger{}, notFoundError{}\n\t}\n\n\tswitch v := v.(type) {\n\tcase Logger:\n\t\treturn v, nil\n\tcase *slog.Logger:\n\t\treturn FromSlogHandler(v.Handler()), nil\n\tdefault:\n\t\t// Not reached.\n\t\tpanic(fmt.Sprintf(\"unexpected value type for logr context key: %T\", v))\n\t}\n}\n\n// FromContextAsSlogLogger returns a slog.Logger from ctx or nil if no such Logger is found.\nfunc FromContextAsSlogLogger(ctx context.Context) *slog.Logger {\n\tv := ctx.Value(contextKey{})\n\tif v == nil {\n\t\treturn nil\n\t}\n\n\tswitch v := v.(type) {\n\tcase Logger:\n\t\treturn slog.New(ToSlogHandler(v))\n\tcase *slog.Logger:\n\t\treturn v\n\tdefault:\n\t\t// Not reached.\n\t\tpanic(fmt.Sprintf(\"unexpected value type for logr context key: %T\", v))\n\t}\n}\n\n// FromContextOrDiscard returns a Logger from ctx.  If no Logger is found, this\n// returns a Logger that discards all log messages.\nfunc FromContextOrDiscard(ctx context.Context) Logger {\n\tif logger, err := FromContext(ctx); err == nil {\n\t\treturn logger\n\t}\n\treturn Discard()\n}\n\n// NewContext returns a new Context, derived from ctx, which carries the\n// provided Logger.\nfunc NewContext(ctx context.Context, logger Logger) context.Context {\n\treturn context.WithValue(ctx, contextKey{}, logger)\n}\n\n// NewContextWithSlogLogger returns a new Context, derived from ctx, which carries the\n// provided slog.Logger.\nfunc NewContextWithSlogLogger(ctx context.Context, logger *slog.Logger) context.Context {\n\treturn context.WithValue(ctx, contextKey{}, logger)\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/discard.go",
    "content": "/*\nCopyright 2020 The logr Authors.\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\npackage logr\n\n// Discard returns a Logger that discards all messages logged to it.  It can be\n// used whenever the caller is not interested in the logs.  Logger instances\n// produced by this function always compare as equal.\nfunc Discard() Logger {\n\treturn New(nil)\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/funcr/funcr.go",
    "content": "/*\nCopyright 2021 The logr Authors.\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\n// Package funcr implements formatting of structured log messages and\n// optionally captures the call site and timestamp.\n//\n// The simplest way to use it is via its implementation of a\n// github.com/go-logr/logr.LogSink with output through an arbitrary\n// \"write\" function.  See New and NewJSON for details.\n//\n// # Custom LogSinks\n//\n// For users who need more control, a funcr.Formatter can be embedded inside\n// your own custom LogSink implementation. This is useful when the LogSink\n// needs to implement additional methods, for example.\n//\n// # Formatting\n//\n// This will respect logr.Marshaler, fmt.Stringer, and error interfaces for\n// values which are being logged.  When rendering a struct, funcr will use Go's\n// standard JSON tags (all except \"string\").\npackage funcr\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/go-logr/logr\"\n)\n\n// New returns a logr.Logger which is implemented by an arbitrary function.\nfunc New(fn func(prefix, args string), opts Options) logr.Logger {\n\treturn logr.New(newSink(fn, NewFormatter(opts)))\n}\n\n// NewJSON returns a logr.Logger which is implemented by an arbitrary function\n// and produces JSON output.\nfunc NewJSON(fn func(obj string), opts Options) logr.Logger {\n\tfnWrapper := func(_, obj string) {\n\t\tfn(obj)\n\t}\n\treturn logr.New(newSink(fnWrapper, NewFormatterJSON(opts)))\n}\n\n// Underlier exposes access to the underlying logging function. Since\n// callers only have a logr.Logger, they have to know which\n// implementation is in use, so this interface is less of an\n// abstraction and more of a way to test type conversion.\ntype Underlier interface {\n\tGetUnderlying() func(prefix, args string)\n}\n\nfunc newSink(fn func(prefix, args string), formatter Formatter) logr.LogSink {\n\tl := &fnlogger{\n\t\tFormatter: formatter,\n\t\twrite:     fn,\n\t}\n\t// For skipping fnlogger.Info and fnlogger.Error.\n\tl.Formatter.AddCallDepth(1)\n\treturn l\n}\n\n// Options carries parameters which influence the way logs are generated.\ntype Options struct {\n\t// LogCaller tells funcr to add a \"caller\" key to some or all log lines.\n\t// This has some overhead, so some users might not want it.\n\tLogCaller MessageClass\n\n\t// LogCallerFunc tells funcr to also log the calling function name.  This\n\t// has no effect if caller logging is not enabled (see Options.LogCaller).\n\tLogCallerFunc bool\n\n\t// LogTimestamp tells funcr to add a \"ts\" key to log lines.  This has some\n\t// overhead, so some users might not want it.\n\tLogTimestamp bool\n\n\t// TimestampFormat tells funcr how to render timestamps when LogTimestamp\n\t// is enabled.  If not specified, a default format will be used.  For more\n\t// details, see docs for Go's time.Layout.\n\tTimestampFormat string\n\n\t// LogInfoLevel tells funcr what key to use to log the info level.\n\t// If not specified, the info level will be logged as \"level\".\n\t// If this is set to \"\", the info level will not be logged at all.\n\tLogInfoLevel *string\n\n\t// Verbosity tells funcr which V logs to produce.  Higher values enable\n\t// more logs.  Info logs at or below this level will be written, while logs\n\t// above this level will be discarded.\n\tVerbosity int\n\n\t// RenderBuiltinsHook allows users to mutate the list of key-value pairs\n\t// while a log line is being rendered.  The kvList argument follows logr\n\t// conventions - each pair of slice elements is comprised of a string key\n\t// and an arbitrary value (verified and sanitized before calling this\n\t// hook).  The value returned must follow the same conventions.  This hook\n\t// can be used to audit or modify logged data.  For example, you might want\n\t// to prefix all of funcr's built-in keys with some string.  This hook is\n\t// only called for built-in (provided by funcr itself) key-value pairs.\n\t// Equivalent hooks are offered for key-value pairs saved via\n\t// logr.Logger.WithValues or Formatter.AddValues (see RenderValuesHook) and\n\t// for user-provided pairs (see RenderArgsHook).\n\tRenderBuiltinsHook func(kvList []any) []any\n\n\t// RenderValuesHook is the same as RenderBuiltinsHook, except that it is\n\t// only called for key-value pairs saved via logr.Logger.WithValues.  See\n\t// RenderBuiltinsHook for more details.\n\tRenderValuesHook func(kvList []any) []any\n\n\t// RenderArgsHook is the same as RenderBuiltinsHook, except that it is only\n\t// called for key-value pairs passed directly to Info and Error.  See\n\t// RenderBuiltinsHook for more details.\n\tRenderArgsHook func(kvList []any) []any\n\n\t// MaxLogDepth tells funcr how many levels of nested fields (e.g. a struct\n\t// that contains a struct, etc.) it may log.  Every time it finds a struct,\n\t// slice, array, or map the depth is increased by one.  When the maximum is\n\t// reached, the value will be converted to a string indicating that the max\n\t// depth has been exceeded.  If this field is not specified, a default\n\t// value will be used.\n\tMaxLogDepth int\n}\n\n// MessageClass indicates which category or categories of messages to consider.\ntype MessageClass int\n\nconst (\n\t// None ignores all message classes.\n\tNone MessageClass = iota\n\t// All considers all message classes.\n\tAll\n\t// Info only considers info messages.\n\tInfo\n\t// Error only considers error messages.\n\tError\n)\n\n// fnlogger inherits some of its LogSink implementation from Formatter\n// and just needs to add some glue code.\ntype fnlogger struct {\n\tFormatter\n\twrite func(prefix, args string)\n}\n\nfunc (l fnlogger) WithName(name string) logr.LogSink {\n\tl.Formatter.AddName(name)\n\treturn &l\n}\n\nfunc (l fnlogger) WithValues(kvList ...any) logr.LogSink {\n\tl.Formatter.AddValues(kvList)\n\treturn &l\n}\n\nfunc (l fnlogger) WithCallDepth(depth int) logr.LogSink {\n\tl.Formatter.AddCallDepth(depth)\n\treturn &l\n}\n\nfunc (l fnlogger) Info(level int, msg string, kvList ...any) {\n\tprefix, args := l.FormatInfo(level, msg, kvList)\n\tl.write(prefix, args)\n}\n\nfunc (l fnlogger) Error(err error, msg string, kvList ...any) {\n\tprefix, args := l.FormatError(err, msg, kvList)\n\tl.write(prefix, args)\n}\n\nfunc (l fnlogger) GetUnderlying() func(prefix, args string) {\n\treturn l.write\n}\n\n// Assert conformance to the interfaces.\nvar _ logr.LogSink = &fnlogger{}\nvar _ logr.CallDepthLogSink = &fnlogger{}\nvar _ Underlier = &fnlogger{}\n\n// NewFormatter constructs a Formatter which emits a JSON-like key=value format.\nfunc NewFormatter(opts Options) Formatter {\n\treturn newFormatter(opts, outputKeyValue)\n}\n\n// NewFormatterJSON constructs a Formatter which emits strict JSON.\nfunc NewFormatterJSON(opts Options) Formatter {\n\treturn newFormatter(opts, outputJSON)\n}\n\n// Defaults for Options.\nconst defaultTimestampFormat = \"2006-01-02 15:04:05.000000\"\nconst defaultMaxLogDepth = 16\n\nfunc newFormatter(opts Options, outfmt outputFormat) Formatter {\n\tif opts.TimestampFormat == \"\" {\n\t\topts.TimestampFormat = defaultTimestampFormat\n\t}\n\tif opts.MaxLogDepth == 0 {\n\t\topts.MaxLogDepth = defaultMaxLogDepth\n\t}\n\tif opts.LogInfoLevel == nil {\n\t\topts.LogInfoLevel = new(string)\n\t\t*opts.LogInfoLevel = \"level\"\n\t}\n\tf := Formatter{\n\t\toutputFormat: outfmt,\n\t\tprefix:       \"\",\n\t\tvalues:       nil,\n\t\tdepth:        0,\n\t\topts:         &opts,\n\t}\n\treturn f\n}\n\n// Formatter is an opaque struct which can be embedded in a LogSink\n// implementation. It should be constructed with NewFormatter. Some of\n// its methods directly implement logr.LogSink.\ntype Formatter struct {\n\toutputFormat outputFormat\n\tprefix       string\n\tvalues       []any\n\tvaluesStr    string\n\tdepth        int\n\topts         *Options\n\tgroupName    string // for slog groups\n\tgroups       []groupDef\n}\n\n// outputFormat indicates which outputFormat to use.\ntype outputFormat int\n\nconst (\n\t// outputKeyValue emits a JSON-like key=value format, but not strict JSON.\n\toutputKeyValue outputFormat = iota\n\t// outputJSON emits strict JSON.\n\toutputJSON\n)\n\n// groupDef represents a saved group.  The values may be empty, but we don't\n// know if we need to render the group until the final record is rendered.\ntype groupDef struct {\n\tname   string\n\tvalues string\n}\n\n// PseudoStruct is a list of key-value pairs that gets logged as a struct.\ntype PseudoStruct []any\n\n// render produces a log line, ready to use.\nfunc (f Formatter) render(builtins, args []any) string {\n\t// Empirically bytes.Buffer is faster than strings.Builder for this.\n\tbuf := bytes.NewBuffer(make([]byte, 0, 1024))\n\n\tif f.outputFormat == outputJSON {\n\t\tbuf.WriteByte('{') // for the whole record\n\t}\n\n\t// Render builtins\n\tvals := builtins\n\tif hook := f.opts.RenderBuiltinsHook; hook != nil {\n\t\tvals = hook(f.sanitize(vals))\n\t}\n\tf.flatten(buf, vals, false) // keys are ours, no need to escape\n\tcontinuing := len(builtins) > 0\n\n\t// Turn the inner-most group into a string\n\targsStr := func() string {\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, 1024))\n\n\t\tvals = args\n\t\tif hook := f.opts.RenderArgsHook; hook != nil {\n\t\t\tvals = hook(f.sanitize(vals))\n\t\t}\n\t\tf.flatten(buf, vals, true) // escape user-provided keys\n\n\t\treturn buf.String()\n\t}()\n\n\t// Render the stack of groups from the inside out.\n\tbodyStr := f.renderGroup(f.groupName, f.valuesStr, argsStr)\n\tfor i := len(f.groups) - 1; i >= 0; i-- {\n\t\tgrp := &f.groups[i]\n\t\tif grp.values == \"\" && bodyStr == \"\" {\n\t\t\t// no contents, so we must elide the whole group\n\t\t\tcontinue\n\t\t}\n\t\tbodyStr = f.renderGroup(grp.name, grp.values, bodyStr)\n\t}\n\n\tif bodyStr != \"\" {\n\t\tif continuing {\n\t\t\tbuf.WriteByte(f.comma())\n\t\t}\n\t\tbuf.WriteString(bodyStr)\n\t}\n\n\tif f.outputFormat == outputJSON {\n\t\tbuf.WriteByte('}') // for the whole record\n\t}\n\n\treturn buf.String()\n}\n\n// renderGroup returns a string representation of the named group with rendered\n// values and args.  If the name is empty, this will return the values and args,\n// joined.  If the name is not empty, this will return a single key-value pair,\n// where the value is a grouping of the values and args.  If the values and\n// args are both empty, this will return an empty string, even if the name was\n// specified.\nfunc (f Formatter) renderGroup(name string, values string, args string) string {\n\tbuf := bytes.NewBuffer(make([]byte, 0, 1024))\n\n\tneedClosingBrace := false\n\tif name != \"\" && (values != \"\" || args != \"\") {\n\t\tbuf.WriteString(f.quoted(name, true)) // escape user-provided keys\n\t\tbuf.WriteByte(f.colon())\n\t\tbuf.WriteByte('{')\n\t\tneedClosingBrace = true\n\t}\n\n\tcontinuing := false\n\tif values != \"\" {\n\t\tbuf.WriteString(values)\n\t\tcontinuing = true\n\t}\n\n\tif args != \"\" {\n\t\tif continuing {\n\t\t\tbuf.WriteByte(f.comma())\n\t\t}\n\t\tbuf.WriteString(args)\n\t}\n\n\tif needClosingBrace {\n\t\tbuf.WriteByte('}')\n\t}\n\n\treturn buf.String()\n}\n\n// flatten renders a list of key-value pairs into a buffer.  If escapeKeys is\n// true, the keys are assumed to have non-JSON-compatible characters in them\n// and must be evaluated for escapes.\n//\n// This function returns a potentially modified version of kvList, which\n// ensures that there is a value for every key (adding a value if needed) and\n// that each key is a string (substituting a key if needed).\nfunc (f Formatter) flatten(buf *bytes.Buffer, kvList []any, escapeKeys bool) []any {\n\t// This logic overlaps with sanitize() but saves one type-cast per key,\n\t// which can be measurable.\n\tif len(kvList)%2 != 0 {\n\t\tkvList = append(kvList, noValue)\n\t}\n\tcopied := false\n\tfor i := 0; i < len(kvList); i += 2 {\n\t\tk, ok := kvList[i].(string)\n\t\tif !ok {\n\t\t\tif !copied {\n\t\t\t\tnewList := make([]any, len(kvList))\n\t\t\t\tcopy(newList, kvList)\n\t\t\t\tkvList = newList\n\t\t\t\tcopied = true\n\t\t\t}\n\t\t\tk = f.nonStringKey(kvList[i])\n\t\t\tkvList[i] = k\n\t\t}\n\t\tv := kvList[i+1]\n\n\t\tif i > 0 {\n\t\t\tif f.outputFormat == outputJSON {\n\t\t\t\tbuf.WriteByte(f.comma())\n\t\t\t} else {\n\t\t\t\t// In theory the format could be something we don't understand.  In\n\t\t\t\t// practice, we control it, so it won't be.\n\t\t\t\tbuf.WriteByte(' ')\n\t\t\t}\n\t\t}\n\n\t\tbuf.WriteString(f.quoted(k, escapeKeys))\n\t\tbuf.WriteByte(f.colon())\n\t\tbuf.WriteString(f.pretty(v))\n\t}\n\treturn kvList\n}\n\nfunc (f Formatter) quoted(str string, escape bool) string {\n\tif escape {\n\t\treturn prettyString(str)\n\t}\n\t// this is faster\n\treturn `\"` + str + `\"`\n}\n\nfunc (f Formatter) comma() byte {\n\tif f.outputFormat == outputJSON {\n\t\treturn ','\n\t}\n\treturn ' '\n}\n\nfunc (f Formatter) colon() byte {\n\tif f.outputFormat == outputJSON {\n\t\treturn ':'\n\t}\n\treturn '='\n}\n\nfunc (f Formatter) pretty(value any) string {\n\treturn f.prettyWithFlags(value, 0, 0)\n}\n\nconst (\n\tflagRawStruct = 0x1 // do not print braces on structs\n)\n\n// TODO: This is not fast. Most of the overhead goes here.\nfunc (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string {\n\tif depth > f.opts.MaxLogDepth {\n\t\treturn `\"<max-log-depth-exceeded>\"`\n\t}\n\n\t// Handle types that take full control of logging.\n\tif v, ok := value.(logr.Marshaler); ok {\n\t\t// Replace the value with what the type wants to get logged.\n\t\t// That then gets handled below via reflection.\n\t\tvalue = invokeMarshaler(v)\n\t}\n\n\t// Handle types that want to format themselves.\n\tswitch v := value.(type) {\n\tcase fmt.Stringer:\n\t\tvalue = invokeStringer(v)\n\tcase error:\n\t\tvalue = invokeError(v)\n\t}\n\n\t// Handling the most common types without reflect is a small perf win.\n\tswitch v := value.(type) {\n\tcase bool:\n\t\treturn strconv.FormatBool(v)\n\tcase string:\n\t\treturn prettyString(v)\n\tcase int:\n\t\treturn strconv.FormatInt(int64(v), 10)\n\tcase int8:\n\t\treturn strconv.FormatInt(int64(v), 10)\n\tcase int16:\n\t\treturn strconv.FormatInt(int64(v), 10)\n\tcase int32:\n\t\treturn strconv.FormatInt(int64(v), 10)\n\tcase int64:\n\t\treturn strconv.FormatInt(int64(v), 10)\n\tcase uint:\n\t\treturn strconv.FormatUint(uint64(v), 10)\n\tcase uint8:\n\t\treturn strconv.FormatUint(uint64(v), 10)\n\tcase uint16:\n\t\treturn strconv.FormatUint(uint64(v), 10)\n\tcase uint32:\n\t\treturn strconv.FormatUint(uint64(v), 10)\n\tcase uint64:\n\t\treturn strconv.FormatUint(v, 10)\n\tcase uintptr:\n\t\treturn strconv.FormatUint(uint64(v), 10)\n\tcase float32:\n\t\treturn strconv.FormatFloat(float64(v), 'f', -1, 32)\n\tcase float64:\n\t\treturn strconv.FormatFloat(v, 'f', -1, 64)\n\tcase complex64:\n\t\treturn `\"` + strconv.FormatComplex(complex128(v), 'f', -1, 64) + `\"`\n\tcase complex128:\n\t\treturn `\"` + strconv.FormatComplex(v, 'f', -1, 128) + `\"`\n\tcase PseudoStruct:\n\t\tbuf := bytes.NewBuffer(make([]byte, 0, 1024))\n\t\tv = f.sanitize(v)\n\t\tif flags&flagRawStruct == 0 {\n\t\t\tbuf.WriteByte('{')\n\t\t}\n\t\tfor i := 0; i < len(v); i += 2 {\n\t\t\tif i > 0 {\n\t\t\t\tbuf.WriteByte(f.comma())\n\t\t\t}\n\t\t\tk, _ := v[i].(string) // sanitize() above means no need to check success\n\t\t\t// arbitrary keys might need escaping\n\t\t\tbuf.WriteString(prettyString(k))\n\t\t\tbuf.WriteByte(f.colon())\n\t\t\tbuf.WriteString(f.prettyWithFlags(v[i+1], 0, depth+1))\n\t\t}\n\t\tif flags&flagRawStruct == 0 {\n\t\t\tbuf.WriteByte('}')\n\t\t}\n\t\treturn buf.String()\n\t}\n\n\tbuf := bytes.NewBuffer(make([]byte, 0, 256))\n\tt := reflect.TypeOf(value)\n\tif t == nil {\n\t\treturn \"null\"\n\t}\n\tv := reflect.ValueOf(value)\n\tswitch t.Kind() {\n\tcase reflect.Bool:\n\t\treturn strconv.FormatBool(v.Bool())\n\tcase reflect.String:\n\t\treturn prettyString(v.String())\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn strconv.FormatInt(int64(v.Int()), 10)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn strconv.FormatUint(uint64(v.Uint()), 10)\n\tcase reflect.Float32:\n\t\treturn strconv.FormatFloat(float64(v.Float()), 'f', -1, 32)\n\tcase reflect.Float64:\n\t\treturn strconv.FormatFloat(v.Float(), 'f', -1, 64)\n\tcase reflect.Complex64:\n\t\treturn `\"` + strconv.FormatComplex(complex128(v.Complex()), 'f', -1, 64) + `\"`\n\tcase reflect.Complex128:\n\t\treturn `\"` + strconv.FormatComplex(v.Complex(), 'f', -1, 128) + `\"`\n\tcase reflect.Struct:\n\t\tif flags&flagRawStruct == 0 {\n\t\t\tbuf.WriteByte('{')\n\t\t}\n\t\tprintComma := false // testing i>0 is not enough because of JSON omitted fields\n\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\tfld := t.Field(i)\n\t\t\tif fld.PkgPath != \"\" {\n\t\t\t\t// reflect says this field is only defined for non-exported fields.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !v.Field(i).CanInterface() {\n\t\t\t\t// reflect isn't clear exactly what this means, but we can't use it.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tname := \"\"\n\t\t\tomitempty := false\n\t\t\tif tag, found := fld.Tag.Lookup(\"json\"); found {\n\t\t\t\tif tag == \"-\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif comma := strings.Index(tag, \",\"); comma != -1 {\n\t\t\t\t\tif n := tag[:comma]; n != \"\" {\n\t\t\t\t\t\tname = n\n\t\t\t\t\t}\n\t\t\t\t\trest := tag[comma:]\n\t\t\t\t\tif strings.Contains(rest, \",omitempty,\") || strings.HasSuffix(rest, \",omitempty\") {\n\t\t\t\t\t\tomitempty = true\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tname = tag\n\t\t\t\t}\n\t\t\t}\n\t\t\tif omitempty && isEmpty(v.Field(i)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif printComma {\n\t\t\t\tbuf.WriteByte(f.comma())\n\t\t\t}\n\t\t\tprintComma = true // if we got here, we are rendering a field\n\t\t\tif fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == \"\" {\n\t\t\t\tbuf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif name == \"\" {\n\t\t\t\tname = fld.Name\n\t\t\t}\n\t\t\t// field names can't contain characters which need escaping\n\t\t\tbuf.WriteString(f.quoted(name, false))\n\t\t\tbuf.WriteByte(f.colon())\n\t\t\tbuf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), 0, depth+1))\n\t\t}\n\t\tif flags&flagRawStruct == 0 {\n\t\t\tbuf.WriteByte('}')\n\t\t}\n\t\treturn buf.String()\n\tcase reflect.Slice, reflect.Array:\n\t\t// If this is outputing as JSON make sure this isn't really a json.RawMessage.\n\t\t// If so just emit \"as-is\" and don't pretty it as that will just print\n\t\t// it as [X,Y,Z,...] which isn't terribly useful vs the string form you really want.\n\t\tif f.outputFormat == outputJSON {\n\t\t\tif rm, ok := value.(json.RawMessage); ok {\n\t\t\t\t// If it's empty make sure we emit an empty value as the array style would below.\n\t\t\t\tif len(rm) > 0 {\n\t\t\t\t\tbuf.Write(rm)\n\t\t\t\t} else {\n\t\t\t\t\tbuf.WriteString(\"null\")\n\t\t\t\t}\n\t\t\t\treturn buf.String()\n\t\t\t}\n\t\t}\n\t\tbuf.WriteByte('[')\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tif i > 0 {\n\t\t\t\tbuf.WriteByte(f.comma())\n\t\t\t}\n\t\t\te := v.Index(i)\n\t\t\tbuf.WriteString(f.prettyWithFlags(e.Interface(), 0, depth+1))\n\t\t}\n\t\tbuf.WriteByte(']')\n\t\treturn buf.String()\n\tcase reflect.Map:\n\t\tbuf.WriteByte('{')\n\t\t// This does not sort the map keys, for best perf.\n\t\tit := v.MapRange()\n\t\ti := 0\n\t\tfor it.Next() {\n\t\t\tif i > 0 {\n\t\t\t\tbuf.WriteByte(f.comma())\n\t\t\t}\n\t\t\t// If a map key supports TextMarshaler, use it.\n\t\t\tkeystr := \"\"\n\t\t\tif m, ok := it.Key().Interface().(encoding.TextMarshaler); ok {\n\t\t\t\ttxt, err := m.MarshalText()\n\t\t\t\tif err != nil {\n\t\t\t\t\tkeystr = fmt.Sprintf(\"<error-MarshalText: %s>\", err.Error())\n\t\t\t\t} else {\n\t\t\t\t\tkeystr = string(txt)\n\t\t\t\t}\n\t\t\t\tkeystr = prettyString(keystr)\n\t\t\t} else {\n\t\t\t\t// prettyWithFlags will produce already-escaped values\n\t\t\t\tkeystr = f.prettyWithFlags(it.Key().Interface(), 0, depth+1)\n\t\t\t\tif t.Key().Kind() != reflect.String {\n\t\t\t\t\t// JSON only does string keys.  Unlike Go's standard JSON, we'll\n\t\t\t\t\t// convert just about anything to a string.\n\t\t\t\t\tkeystr = prettyString(keystr)\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.WriteString(keystr)\n\t\t\tbuf.WriteByte(f.colon())\n\t\t\tbuf.WriteString(f.prettyWithFlags(it.Value().Interface(), 0, depth+1))\n\t\t\ti++\n\t\t}\n\t\tbuf.WriteByte('}')\n\t\treturn buf.String()\n\tcase reflect.Ptr, reflect.Interface:\n\t\tif v.IsNil() {\n\t\t\treturn \"null\"\n\t\t}\n\t\treturn f.prettyWithFlags(v.Elem().Interface(), 0, depth)\n\t}\n\treturn fmt.Sprintf(`\"<unhandled-%s>\"`, t.Kind().String())\n}\n\nfunc prettyString(s string) string {\n\t// Avoid escaping (which does allocations) if we can.\n\tif needsEscape(s) {\n\t\treturn strconv.Quote(s)\n\t}\n\tb := bytes.NewBuffer(make([]byte, 0, 1024))\n\tb.WriteByte('\"')\n\tb.WriteString(s)\n\tb.WriteByte('\"')\n\treturn b.String()\n}\n\n// needsEscape determines whether the input string needs to be escaped or not,\n// without doing any allocations.\nfunc needsEscape(s string) bool {\n\tfor _, r := range s {\n\t\tif !strconv.IsPrint(r) || r == '\\\\' || r == '\"' {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isEmpty(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\treturn v.Len() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Complex64, reflect.Complex128:\n\t\treturn v.Complex() == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\t}\n\treturn false\n}\n\nfunc invokeMarshaler(m logr.Marshaler) (ret any) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tret = fmt.Sprintf(\"<panic: %s>\", r)\n\t\t}\n\t}()\n\treturn m.MarshalLog()\n}\n\nfunc invokeStringer(s fmt.Stringer) (ret string) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tret = fmt.Sprintf(\"<panic: %s>\", r)\n\t\t}\n\t}()\n\treturn s.String()\n}\n\nfunc invokeError(e error) (ret string) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tret = fmt.Sprintf(\"<panic: %s>\", r)\n\t\t}\n\t}()\n\treturn e.Error()\n}\n\n// Caller represents the original call site for a log line, after considering\n// logr.Logger.WithCallDepth and logr.Logger.WithCallStackHelper.  The File and\n// Line fields will always be provided, while the Func field is optional.\n// Users can set the render hook fields in Options to examine logged key-value\n// pairs, one of which will be {\"caller\", Caller} if the Options.LogCaller\n// field is enabled for the given MessageClass.\ntype Caller struct {\n\t// File is the basename of the file for this call site.\n\tFile string `json:\"file\"`\n\t// Line is the line number in the file for this call site.\n\tLine int `json:\"line\"`\n\t// Func is the function name for this call site, or empty if\n\t// Options.LogCallerFunc is not enabled.\n\tFunc string `json:\"function,omitempty\"`\n}\n\nfunc (f Formatter) caller() Caller {\n\t// +1 for this frame, +1 for Info/Error.\n\tpc, file, line, ok := runtime.Caller(f.depth + 2)\n\tif !ok {\n\t\treturn Caller{\"<unknown>\", 0, \"\"}\n\t}\n\tfn := \"\"\n\tif f.opts.LogCallerFunc {\n\t\tif fp := runtime.FuncForPC(pc); fp != nil {\n\t\t\tfn = fp.Name()\n\t\t}\n\t}\n\n\treturn Caller{filepath.Base(file), line, fn}\n}\n\nconst noValue = \"<no-value>\"\n\nfunc (f Formatter) nonStringKey(v any) string {\n\treturn fmt.Sprintf(\"<non-string-key: %s>\", f.snippet(v))\n}\n\n// snippet produces a short snippet string of an arbitrary value.\nfunc (f Formatter) snippet(v any) string {\n\tconst snipLen = 16\n\n\tsnip := f.pretty(v)\n\tif len(snip) > snipLen {\n\t\tsnip = snip[:snipLen]\n\t}\n\treturn snip\n}\n\n// sanitize ensures that a list of key-value pairs has a value for every key\n// (adding a value if needed) and that each key is a string (substituting a key\n// if needed).\nfunc (f Formatter) sanitize(kvList []any) []any {\n\tif len(kvList)%2 != 0 {\n\t\tkvList = append(kvList, noValue)\n\t}\n\tfor i := 0; i < len(kvList); i += 2 {\n\t\t_, ok := kvList[i].(string)\n\t\tif !ok {\n\t\t\tkvList[i] = f.nonStringKey(kvList[i])\n\t\t}\n\t}\n\treturn kvList\n}\n\n// startGroup opens a new group scope (basically a sub-struct), which locks all\n// the current saved values and starts them anew.  This is needed to satisfy\n// slog.\nfunc (f *Formatter) startGroup(name string) {\n\t// Unnamed groups are just inlined.\n\tif name == \"\" {\n\t\treturn\n\t}\n\n\tn := len(f.groups)\n\tf.groups = append(f.groups[:n:n], groupDef{f.groupName, f.valuesStr})\n\n\t// Start collecting new values.\n\tf.groupName = name\n\tf.valuesStr = \"\"\n\tf.values = nil\n}\n\n// Init configures this Formatter from runtime info, such as the call depth\n// imposed by logr itself.\n// Note that this receiver is a pointer, so depth can be saved.\nfunc (f *Formatter) Init(info logr.RuntimeInfo) {\n\tf.depth += info.CallDepth\n}\n\n// Enabled checks whether an info message at the given level should be logged.\nfunc (f Formatter) Enabled(level int) bool {\n\treturn level <= f.opts.Verbosity\n}\n\n// GetDepth returns the current depth of this Formatter.  This is useful for\n// implementations which do their own caller attribution.\nfunc (f Formatter) GetDepth() int {\n\treturn f.depth\n}\n\n// FormatInfo renders an Info log message into strings.  The prefix will be\n// empty when no names were set (via AddNames), or when the output is\n// configured for JSON.\nfunc (f Formatter) FormatInfo(level int, msg string, kvList []any) (prefix, argsStr string) {\n\targs := make([]any, 0, 64) // using a constant here impacts perf\n\tprefix = f.prefix\n\tif f.outputFormat == outputJSON {\n\t\targs = append(args, \"logger\", prefix)\n\t\tprefix = \"\"\n\t}\n\tif f.opts.LogTimestamp {\n\t\targs = append(args, \"ts\", time.Now().Format(f.opts.TimestampFormat))\n\t}\n\tif policy := f.opts.LogCaller; policy == All || policy == Info {\n\t\targs = append(args, \"caller\", f.caller())\n\t}\n\tif key := *f.opts.LogInfoLevel; key != \"\" {\n\t\targs = append(args, key, level)\n\t}\n\targs = append(args, \"msg\", msg)\n\treturn prefix, f.render(args, kvList)\n}\n\n// FormatError renders an Error log message into strings.  The prefix will be\n// empty when no names were set (via AddNames), or when the output is\n// configured for JSON.\nfunc (f Formatter) FormatError(err error, msg string, kvList []any) (prefix, argsStr string) {\n\targs := make([]any, 0, 64) // using a constant here impacts perf\n\tprefix = f.prefix\n\tif f.outputFormat == outputJSON {\n\t\targs = append(args, \"logger\", prefix)\n\t\tprefix = \"\"\n\t}\n\tif f.opts.LogTimestamp {\n\t\targs = append(args, \"ts\", time.Now().Format(f.opts.TimestampFormat))\n\t}\n\tif policy := f.opts.LogCaller; policy == All || policy == Error {\n\t\targs = append(args, \"caller\", f.caller())\n\t}\n\targs = append(args, \"msg\", msg)\n\tvar loggableErr any\n\tif err != nil {\n\t\tloggableErr = err.Error()\n\t}\n\targs = append(args, \"error\", loggableErr)\n\treturn prefix, f.render(args, kvList)\n}\n\n// AddName appends the specified name.  funcr uses '/' characters to separate\n// name elements.  Callers should not pass '/' in the provided name string, but\n// this library does not actually enforce that.\nfunc (f *Formatter) AddName(name string) {\n\tif len(f.prefix) > 0 {\n\t\tf.prefix += \"/\"\n\t}\n\tf.prefix += name\n}\n\n// AddValues adds key-value pairs to the set of saved values to be logged with\n// each log line.\nfunc (f *Formatter) AddValues(kvList []any) {\n\t// Three slice args forces a copy.\n\tn := len(f.values)\n\tf.values = append(f.values[:n:n], kvList...)\n\n\tvals := f.values\n\tif hook := f.opts.RenderValuesHook; hook != nil {\n\t\tvals = hook(f.sanitize(vals))\n\t}\n\n\t// Pre-render values, so we don't have to do it on each Info/Error call.\n\tbuf := bytes.NewBuffer(make([]byte, 0, 1024))\n\tf.flatten(buf, vals, true) // escape user-provided keys\n\tf.valuesStr = buf.String()\n}\n\n// AddCallDepth increases the number of stack-frames to skip when attributing\n// the log line to a file and line.\nfunc (f *Formatter) AddCallDepth(depth int) {\n\tf.depth += depth\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/funcr/slogsink.go",
    "content": "//go:build go1.21\n// +build go1.21\n\n/*\nCopyright 2023 The logr Authors.\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\npackage funcr\n\nimport (\n\t\"context\"\n\t\"log/slog\"\n\n\t\"github.com/go-logr/logr\"\n)\n\nvar _ logr.SlogSink = &fnlogger{}\n\nconst extraSlogSinkDepth = 3 // 2 for slog, 1 for SlogSink\n\nfunc (l fnlogger) Handle(_ context.Context, record slog.Record) error {\n\tkvList := make([]any, 0, 2*record.NumAttrs())\n\trecord.Attrs(func(attr slog.Attr) bool {\n\t\tkvList = attrToKVs(attr, kvList)\n\t\treturn true\n\t})\n\n\tif record.Level >= slog.LevelError {\n\t\tl.WithCallDepth(extraSlogSinkDepth).Error(nil, record.Message, kvList...)\n\t} else {\n\t\tlevel := l.levelFromSlog(record.Level)\n\t\tl.WithCallDepth(extraSlogSinkDepth).Info(level, record.Message, kvList...)\n\t}\n\treturn nil\n}\n\nfunc (l fnlogger) WithAttrs(attrs []slog.Attr) logr.SlogSink {\n\tkvList := make([]any, 0, 2*len(attrs))\n\tfor _, attr := range attrs {\n\t\tkvList = attrToKVs(attr, kvList)\n\t}\n\tl.AddValues(kvList)\n\treturn &l\n}\n\nfunc (l fnlogger) WithGroup(name string) logr.SlogSink {\n\tl.startGroup(name)\n\treturn &l\n}\n\n// attrToKVs appends a slog.Attr to a logr-style kvList.  It handle slog Groups\n// and other details of slog.\nfunc attrToKVs(attr slog.Attr, kvList []any) []any {\n\tattrVal := attr.Value.Resolve()\n\tif attrVal.Kind() == slog.KindGroup {\n\t\tgroupVal := attrVal.Group()\n\t\tgrpKVs := make([]any, 0, 2*len(groupVal))\n\t\tfor _, attr := range groupVal {\n\t\t\tgrpKVs = attrToKVs(attr, grpKVs)\n\t\t}\n\t\tif attr.Key == \"\" {\n\t\t\t// slog says we have to inline these\n\t\t\tkvList = append(kvList, grpKVs...)\n\t\t} else {\n\t\t\tkvList = append(kvList, attr.Key, PseudoStruct(grpKVs))\n\t\t}\n\t} else if attr.Key != \"\" {\n\t\tkvList = append(kvList, attr.Key, attrVal.Any())\n\t}\n\n\treturn kvList\n}\n\n// levelFromSlog adjusts the level by the logger's verbosity and negates it.\n// It ensures that the result is >= 0. This is necessary because the result is\n// passed to a LogSink and that API did not historically document whether\n// levels could be negative or what that meant.\n//\n// Some example usage:\n//\n//\tlogrV0 := getMyLogger()\n//\tlogrV2 := logrV0.V(2)\n//\tslogV2 := slog.New(logr.ToSlogHandler(logrV2))\n//\tslogV2.Debug(\"msg\") // =~ logrV2.V(4) =~ logrV0.V(6)\n//\tslogV2.Info(\"msg\")  // =~  logrV2.V(0) =~ logrV0.V(2)\n//\tslogv2.Warn(\"msg\")  // =~ logrV2.V(-4) =~ logrV0.V(0)\nfunc (l fnlogger) levelFromSlog(level slog.Level) int {\n\tresult := -level\n\tif result < 0 {\n\t\tresult = 0 // because LogSink doesn't expect negative V levels\n\t}\n\treturn int(result)\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/logr.go",
    "content": "/*\nCopyright 2019 The logr Authors.\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\n// This design derives from Dave Cheney's blog:\n//     http://dave.cheney.net/2015/11/05/lets-talk-about-logging\n\n// Package logr defines a general-purpose logging API and abstract interfaces\n// to back that API.  Packages in the Go ecosystem can depend on this package,\n// while callers can implement logging with whatever backend is appropriate.\n//\n// # Usage\n//\n// Logging is done using a Logger instance.  Logger is a concrete type with\n// methods, which defers the actual logging to a LogSink interface.  The main\n// methods of Logger are Info() and Error().  Arguments to Info() and Error()\n// are key/value pairs rather than printf-style formatted strings, emphasizing\n// \"structured logging\".\n//\n// With Go's standard log package, we might write:\n//\n//\tlog.Printf(\"setting target value %s\", targetValue)\n//\n// With logr's structured logging, we'd write:\n//\n//\tlogger.Info(\"setting target\", \"value\", targetValue)\n//\n// Errors are much the same.  Instead of:\n//\n//\tlog.Printf(\"failed to open the pod bay door for user %s: %v\", user, err)\n//\n// We'd write:\n//\n//\tlogger.Error(err, \"failed to open the pod bay door\", \"user\", user)\n//\n// Info() and Error() are very similar, but they are separate methods so that\n// LogSink implementations can choose to do things like attach additional\n// information (such as stack traces) on calls to Error(). Error() messages are\n// always logged, regardless of the current verbosity.  If there is no error\n// instance available, passing nil is valid.\n//\n// # Verbosity\n//\n// Often we want to log information only when the application in \"verbose\n// mode\".  To write log lines that are more verbose, Logger has a V() method.\n// The higher the V-level of a log line, the less critical it is considered.\n// Log-lines with V-levels that are not enabled (as per the LogSink) will not\n// be written.  Level V(0) is the default, and logger.V(0).Info() has the same\n// meaning as logger.Info().  Negative V-levels have the same meaning as V(0).\n// Error messages do not have a verbosity level and are always logged.\n//\n// Where we might have written:\n//\n//\tif flVerbose >= 2 {\n//\t    log.Printf(\"an unusual thing happened\")\n//\t}\n//\n// We can write:\n//\n//\tlogger.V(2).Info(\"an unusual thing happened\")\n//\n// # Logger Names\n//\n// Logger instances can have name strings so that all messages logged through\n// that instance have additional context.  For example, you might want to add\n// a subsystem name:\n//\n//\tlogger.WithName(\"compactor\").Info(\"started\", \"time\", time.Now())\n//\n// The WithName() method returns a new Logger, which can be passed to\n// constructors or other functions for further use.  Repeated use of WithName()\n// will accumulate name \"segments\".  These name segments will be joined in some\n// way by the LogSink implementation.  It is strongly recommended that name\n// segments contain simple identifiers (letters, digits, and hyphen), and do\n// not contain characters that could muddle the log output or confuse the\n// joining operation (e.g. whitespace, commas, periods, slashes, brackets,\n// quotes, etc).\n//\n// # Saved Values\n//\n// Logger instances can store any number of key/value pairs, which will be\n// logged alongside all messages logged through that instance.  For example,\n// you might want to create a Logger instance per managed object:\n//\n// With the standard log package, we might write:\n//\n//\tlog.Printf(\"decided to set field foo to value %q for object %s/%s\",\n//\t    targetValue, object.Namespace, object.Name)\n//\n// With logr we'd write:\n//\n//\t// Elsewhere: set up the logger to log the object name.\n//\tobj.logger = mainLogger.WithValues(\n//\t    \"name\", obj.name, \"namespace\", obj.namespace)\n//\n//\t// later on...\n//\tobj.logger.Info(\"setting foo\", \"value\", targetValue)\n//\n// # Best Practices\n//\n// Logger has very few hard rules, with the goal that LogSink implementations\n// might have a lot of freedom to differentiate.  There are, however, some\n// things to consider.\n//\n// The log message consists of a constant message attached to the log line.\n// This should generally be a simple description of what's occurring, and should\n// never be a format string.  Variable information can then be attached using\n// named values.\n//\n// Keys are arbitrary strings, but should generally be constant values.  Values\n// may be any Go value, but how the value is formatted is determined by the\n// LogSink implementation.\n//\n// Logger instances are meant to be passed around by value. Code that receives\n// such a value can call its methods without having to check whether the\n// instance is ready for use.\n//\n// The zero logger (= Logger{}) is identical to Discard() and discards all log\n// entries. Code that receives a Logger by value can simply call it, the methods\n// will never crash. For cases where passing a logger is optional, a pointer to Logger\n// should be used.\n//\n// # Key Naming Conventions\n//\n// Keys are not strictly required to conform to any specification or regex, but\n// it is recommended that they:\n//   - be human-readable and meaningful (not auto-generated or simple ordinals)\n//   - be constant (not dependent on input data)\n//   - contain only printable characters\n//   - not contain whitespace or punctuation\n//   - use lower case for simple keys and lowerCamelCase for more complex ones\n//\n// These guidelines help ensure that log data is processed properly regardless\n// of the log implementation.  For example, log implementations will try to\n// output JSON data or will store data for later database (e.g. SQL) queries.\n//\n// While users are generally free to use key names of their choice, it's\n// generally best to avoid using the following keys, as they're frequently used\n// by implementations:\n//   - \"caller\": the calling information (file/line) of a particular log line\n//   - \"error\": the underlying error value in the `Error` method\n//   - \"level\": the log level\n//   - \"logger\": the name of the associated logger\n//   - \"msg\": the log message\n//   - \"stacktrace\": the stack trace associated with a particular log line or\n//     error (often from the `Error` message)\n//   - \"ts\": the timestamp for a log line\n//\n// Implementations are encouraged to make use of these keys to represent the\n// above concepts, when necessary (for example, in a pure-JSON output form, it\n// would be necessary to represent at least message and timestamp as ordinary\n// named values).\n//\n// # Break Glass\n//\n// Implementations may choose to give callers access to the underlying\n// logging implementation.  The recommended pattern for this is:\n//\n//\t// Underlier exposes access to the underlying logging implementation.\n//\t// Since callers only have a logr.Logger, they have to know which\n//\t// implementation is in use, so this interface is less of an abstraction\n//\t// and more of way to test type conversion.\n//\ttype Underlier interface {\n//\t    GetUnderlying() <underlying-type>\n//\t}\n//\n// Logger grants access to the sink to enable type assertions like this:\n//\n//\tfunc DoSomethingWithImpl(log logr.Logger) {\n//\t    if underlier, ok := log.GetSink().(impl.Underlier); ok {\n//\t       implLogger := underlier.GetUnderlying()\n//\t       ...\n//\t    }\n//\t}\n//\n// Custom `With*` functions can be implemented by copying the complete\n// Logger struct and replacing the sink in the copy:\n//\n//\t// WithFooBar changes the foobar parameter in the log sink and returns a\n//\t// new logger with that modified sink.  It does nothing for loggers where\n//\t// the sink doesn't support that parameter.\n//\tfunc WithFoobar(log logr.Logger, foobar int) logr.Logger {\n//\t   if foobarLogSink, ok := log.GetSink().(FoobarSink); ok {\n//\t      log = log.WithSink(foobarLogSink.WithFooBar(foobar))\n//\t   }\n//\t   return log\n//\t}\n//\n// Don't use New to construct a new Logger with a LogSink retrieved from an\n// existing Logger. Source code attribution might not work correctly and\n// unexported fields in Logger get lost.\n//\n// Beware that the same LogSink instance may be shared by different logger\n// instances. Calling functions that modify the LogSink will affect all of\n// those.\npackage logr\n\n// New returns a new Logger instance.  This is primarily used by libraries\n// implementing LogSink, rather than end users.  Passing a nil sink will create\n// a Logger which discards all log lines.\nfunc New(sink LogSink) Logger {\n\tlogger := Logger{}\n\tlogger.setSink(sink)\n\tif sink != nil {\n\t\tsink.Init(runtimeInfo)\n\t}\n\treturn logger\n}\n\n// setSink stores the sink and updates any related fields. It mutates the\n// logger and thus is only safe to use for loggers that are not currently being\n// used concurrently.\nfunc (l *Logger) setSink(sink LogSink) {\n\tl.sink = sink\n}\n\n// GetSink returns the stored sink.\nfunc (l Logger) GetSink() LogSink {\n\treturn l.sink\n}\n\n// WithSink returns a copy of the logger with the new sink.\nfunc (l Logger) WithSink(sink LogSink) Logger {\n\tl.setSink(sink)\n\treturn l\n}\n\n// Logger is an interface to an abstract logging implementation.  This is a\n// concrete type for performance reasons, but all the real work is passed on to\n// a LogSink.  Implementations of LogSink should provide their own constructors\n// that return Logger, not LogSink.\n//\n// The underlying sink can be accessed through GetSink and be modified through\n// WithSink. This enables the implementation of custom extensions (see \"Break\n// Glass\" in the package documentation). Normally the sink should be used only\n// indirectly.\ntype Logger struct {\n\tsink  LogSink\n\tlevel int\n}\n\n// Enabled tests whether this Logger is enabled.  For example, commandline\n// flags might be used to set the logging verbosity and disable some info logs.\nfunc (l Logger) Enabled() bool {\n\t// Some implementations of LogSink look at the caller in Enabled (e.g.\n\t// different verbosity levels per package or file), but we only pass one\n\t// CallDepth in (via Init).  This means that all calls from Logger to the\n\t// LogSink's Enabled, Info, and Error methods must have the same number of\n\t// frames.  In other words, Logger methods can't call other Logger methods\n\t// which call these LogSink methods unless we do it the same in all paths.\n\treturn l.sink != nil && l.sink.Enabled(l.level)\n}\n\n// Info logs a non-error message with the given key/value pairs as context.\n//\n// The msg argument should be used to add some constant description to the log\n// line.  The key/value pairs can then be used to add additional variable\n// information.  The key/value pairs must alternate string keys and arbitrary\n// values.\nfunc (l Logger) Info(msg string, keysAndValues ...any) {\n\tif l.sink == nil {\n\t\treturn\n\t}\n\tif l.sink.Enabled(l.level) { // see comment in Enabled\n\t\tif withHelper, ok := l.sink.(CallStackHelperLogSink); ok {\n\t\t\twithHelper.GetCallStackHelper()()\n\t\t}\n\t\tl.sink.Info(l.level, msg, keysAndValues...)\n\t}\n}\n\n// Error logs an error, with the given message and key/value pairs as context.\n// It functions similarly to Info, but may have unique behavior, and should be\n// preferred for logging errors (see the package documentations for more\n// information). The log message will always be emitted, regardless of\n// verbosity level.\n//\n// The msg argument should be used to add context to any underlying error,\n// while the err argument should be used to attach the actual error that\n// triggered this log line, if present. The err parameter is optional\n// and nil may be passed instead of an error instance.\nfunc (l Logger) Error(err error, msg string, keysAndValues ...any) {\n\tif l.sink == nil {\n\t\treturn\n\t}\n\tif withHelper, ok := l.sink.(CallStackHelperLogSink); ok {\n\t\twithHelper.GetCallStackHelper()()\n\t}\n\tl.sink.Error(err, msg, keysAndValues...)\n}\n\n// V returns a new Logger instance for a specific verbosity level, relative to\n// this Logger.  In other words, V-levels are additive.  A higher verbosity\n// level means a log message is less important.  Negative V-levels are treated\n// as 0.\nfunc (l Logger) V(level int) Logger {\n\tif l.sink == nil {\n\t\treturn l\n\t}\n\tif level < 0 {\n\t\tlevel = 0\n\t}\n\tl.level += level\n\treturn l\n}\n\n// GetV returns the verbosity level of the logger. If the logger's LogSink is\n// nil as in the Discard logger, this will always return 0.\nfunc (l Logger) GetV() int {\n\t// 0 if l.sink nil because of the if check in V above.\n\treturn l.level\n}\n\n// WithValues returns a new Logger instance with additional key/value pairs.\n// See Info for documentation on how key/value pairs work.\nfunc (l Logger) WithValues(keysAndValues ...any) Logger {\n\tif l.sink == nil {\n\t\treturn l\n\t}\n\tl.setSink(l.sink.WithValues(keysAndValues...))\n\treturn l\n}\n\n// WithName returns a new Logger instance with the specified name element added\n// to the Logger's name.  Successive calls with WithName append additional\n// suffixes to the Logger's name.  It's strongly recommended that name segments\n// contain only letters, digits, and hyphens (see the package documentation for\n// more information).\nfunc (l Logger) WithName(name string) Logger {\n\tif l.sink == nil {\n\t\treturn l\n\t}\n\tl.setSink(l.sink.WithName(name))\n\treturn l\n}\n\n// WithCallDepth returns a Logger instance that offsets the call stack by the\n// specified number of frames when logging call site information, if possible.\n// This is useful for users who have helper functions between the \"real\" call\n// site and the actual calls to Logger methods.  If depth is 0 the attribution\n// should be to the direct caller of this function.  If depth is 1 the\n// attribution should skip 1 call frame, and so on.  Successive calls to this\n// are additive.\n//\n// If the underlying log implementation supports a WithCallDepth(int) method,\n// it will be called and the result returned.  If the implementation does not\n// support CallDepthLogSink, the original Logger will be returned.\n//\n// To skip one level, WithCallStackHelper() should be used instead of\n// WithCallDepth(1) because it works with implementions that support the\n// CallDepthLogSink and/or CallStackHelperLogSink interfaces.\nfunc (l Logger) WithCallDepth(depth int) Logger {\n\tif l.sink == nil {\n\t\treturn l\n\t}\n\tif withCallDepth, ok := l.sink.(CallDepthLogSink); ok {\n\t\tl.setSink(withCallDepth.WithCallDepth(depth))\n\t}\n\treturn l\n}\n\n// WithCallStackHelper returns a new Logger instance that skips the direct\n// caller when logging call site information, if possible.  This is useful for\n// users who have helper functions between the \"real\" call site and the actual\n// calls to Logger methods and want to support loggers which depend on marking\n// each individual helper function, like loggers based on testing.T.\n//\n// In addition to using that new logger instance, callers also must call the\n// returned function.\n//\n// If the underlying log implementation supports a WithCallDepth(int) method,\n// WithCallDepth(1) will be called to produce a new logger. If it supports a\n// WithCallStackHelper() method, that will be also called. If the\n// implementation does not support either of these, the original Logger will be\n// returned.\nfunc (l Logger) WithCallStackHelper() (func(), Logger) {\n\tif l.sink == nil {\n\t\treturn func() {}, l\n\t}\n\tvar helper func()\n\tif withCallDepth, ok := l.sink.(CallDepthLogSink); ok {\n\t\tl.setSink(withCallDepth.WithCallDepth(1))\n\t}\n\tif withHelper, ok := l.sink.(CallStackHelperLogSink); ok {\n\t\thelper = withHelper.GetCallStackHelper()\n\t} else {\n\t\thelper = func() {}\n\t}\n\treturn helper, l\n}\n\n// IsZero returns true if this logger is an uninitialized zero value\nfunc (l Logger) IsZero() bool {\n\treturn l.sink == nil\n}\n\n// RuntimeInfo holds information that the logr \"core\" library knows which\n// LogSinks might want to know.\ntype RuntimeInfo struct {\n\t// CallDepth is the number of call frames the logr library adds between the\n\t// end-user and the LogSink.  LogSink implementations which choose to print\n\t// the original logging site (e.g. file & line) should climb this many\n\t// additional frames to find it.\n\tCallDepth int\n}\n\n// runtimeInfo is a static global.  It must not be changed at run time.\nvar runtimeInfo = RuntimeInfo{\n\tCallDepth: 1,\n}\n\n// LogSink represents a logging implementation.  End-users will generally not\n// interact with this type.\ntype LogSink interface {\n\t// Init receives optional information about the logr library for LogSink\n\t// implementations that need it.\n\tInit(info RuntimeInfo)\n\n\t// Enabled tests whether this LogSink is enabled at the specified V-level.\n\t// For example, commandline flags might be used to set the logging\n\t// verbosity and disable some info logs.\n\tEnabled(level int) bool\n\n\t// Info logs a non-error message with the given key/value pairs as context.\n\t// The level argument is provided for optional logging.  This method will\n\t// only be called when Enabled(level) is true. See Logger.Info for more\n\t// details.\n\tInfo(level int, msg string, keysAndValues ...any)\n\n\t// Error logs an error, with the given message and key/value pairs as\n\t// context.  See Logger.Error for more details.\n\tError(err error, msg string, keysAndValues ...any)\n\n\t// WithValues returns a new LogSink with additional key/value pairs.  See\n\t// Logger.WithValues for more details.\n\tWithValues(keysAndValues ...any) LogSink\n\n\t// WithName returns a new LogSink with the specified name appended.  See\n\t// Logger.WithName for more details.\n\tWithName(name string) LogSink\n}\n\n// CallDepthLogSink represents a LogSink that knows how to climb the call stack\n// to identify the original call site and can offset the depth by a specified\n// number of frames.  This is useful for users who have helper functions\n// between the \"real\" call site and the actual calls to Logger methods.\n// Implementations that log information about the call site (such as file,\n// function, or line) would otherwise log information about the intermediate\n// helper functions.\n//\n// This is an optional interface and implementations are not required to\n// support it.\ntype CallDepthLogSink interface {\n\t// WithCallDepth returns a LogSink that will offset the call\n\t// stack by the specified number of frames when logging call\n\t// site information.\n\t//\n\t// If depth is 0, the LogSink should skip exactly the number\n\t// of call frames defined in RuntimeInfo.CallDepth when Info\n\t// or Error are called, i.e. the attribution should be to the\n\t// direct caller of Logger.Info or Logger.Error.\n\t//\n\t// If depth is 1 the attribution should skip 1 call frame, and so on.\n\t// Successive calls to this are additive.\n\tWithCallDepth(depth int) LogSink\n}\n\n// CallStackHelperLogSink represents a LogSink that knows how to climb\n// the call stack to identify the original call site and can skip\n// intermediate helper functions if they mark themselves as\n// helper. Go's testing package uses that approach.\n//\n// This is useful for users who have helper functions between the\n// \"real\" call site and the actual calls to Logger methods.\n// Implementations that log information about the call site (such as\n// file, function, or line) would otherwise log information about the\n// intermediate helper functions.\n//\n// This is an optional interface and implementations are not required\n// to support it. Implementations that choose to support this must not\n// simply implement it as WithCallDepth(1), because\n// Logger.WithCallStackHelper will call both methods if they are\n// present. This should only be implemented for LogSinks that actually\n// need it, as with testing.T.\ntype CallStackHelperLogSink interface {\n\t// GetCallStackHelper returns a function that must be called\n\t// to mark the direct caller as helper function when logging\n\t// call site information.\n\tGetCallStackHelper() func()\n}\n\n// Marshaler is an optional interface that logged values may choose to\n// implement. Loggers with structured output, such as JSON, should\n// log the object return by the MarshalLog method instead of the\n// original value.\ntype Marshaler interface {\n\t// MarshalLog can be used to:\n\t//   - ensure that structs are not logged as strings when the original\n\t//     value has a String method: return a different type without a\n\t//     String method\n\t//   - select which fields of a complex type should get logged:\n\t//     return a simpler struct with fewer fields\n\t//   - log unexported fields: return a different struct\n\t//     with exported fields\n\t//\n\t// It may return any value of any type.\n\tMarshalLog() any\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/sloghandler.go",
    "content": "//go:build go1.21\n// +build go1.21\n\n/*\nCopyright 2023 The logr Authors.\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\npackage logr\n\nimport (\n\t\"context\"\n\t\"log/slog\"\n)\n\ntype slogHandler struct {\n\t// May be nil, in which case all logs get discarded.\n\tsink LogSink\n\t// Non-nil if sink is non-nil and implements SlogSink.\n\tslogSink SlogSink\n\n\t// groupPrefix collects values from WithGroup calls. It gets added as\n\t// prefix to value keys when handling a log record.\n\tgroupPrefix string\n\n\t// levelBias can be set when constructing the handler to influence the\n\t// slog.Level of log records. A positive levelBias reduces the\n\t// slog.Level value. slog has no API to influence this value after the\n\t// handler got created, so it can only be set indirectly through\n\t// Logger.V.\n\tlevelBias slog.Level\n}\n\nvar _ slog.Handler = &slogHandler{}\n\n// groupSeparator is used to concatenate WithGroup names and attribute keys.\nconst groupSeparator = \".\"\n\n// GetLevel is used for black box unit testing.\nfunc (l *slogHandler) GetLevel() slog.Level {\n\treturn l.levelBias\n}\n\nfunc (l *slogHandler) Enabled(_ context.Context, level slog.Level) bool {\n\treturn l.sink != nil && (level >= slog.LevelError || l.sink.Enabled(l.levelFromSlog(level)))\n}\n\nfunc (l *slogHandler) Handle(ctx context.Context, record slog.Record) error {\n\tif l.slogSink != nil {\n\t\t// Only adjust verbosity level of log entries < slog.LevelError.\n\t\tif record.Level < slog.LevelError {\n\t\t\trecord.Level -= l.levelBias\n\t\t}\n\t\treturn l.slogSink.Handle(ctx, record)\n\t}\n\n\t// No need to check for nil sink here because Handle will only be called\n\t// when Enabled returned true.\n\n\tkvList := make([]any, 0, 2*record.NumAttrs())\n\trecord.Attrs(func(attr slog.Attr) bool {\n\t\tkvList = attrToKVs(attr, l.groupPrefix, kvList)\n\t\treturn true\n\t})\n\tif record.Level >= slog.LevelError {\n\t\tl.sinkWithCallDepth().Error(nil, record.Message, kvList...)\n\t} else {\n\t\tlevel := l.levelFromSlog(record.Level)\n\t\tl.sinkWithCallDepth().Info(level, record.Message, kvList...)\n\t}\n\treturn nil\n}\n\n// sinkWithCallDepth adjusts the stack unwinding so that when Error or Info\n// are called by Handle, code in slog gets skipped.\n//\n// This offset currently (Go 1.21.0) works for calls through\n// slog.New(ToSlogHandler(...)).  There's no guarantee that the call\n// chain won't change. Wrapping the handler will also break unwinding. It's\n// still better than not adjusting at all....\n//\n// This cannot be done when constructing the handler because FromSlogHandler needs\n// access to the original sink without this adjustment. A second copy would\n// work, but then WithAttrs would have to be called for both of them.\nfunc (l *slogHandler) sinkWithCallDepth() LogSink {\n\tif sink, ok := l.sink.(CallDepthLogSink); ok {\n\t\treturn sink.WithCallDepth(2)\n\t}\n\treturn l.sink\n}\n\nfunc (l *slogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {\n\tif l.sink == nil || len(attrs) == 0 {\n\t\treturn l\n\t}\n\n\tclone := *l\n\tif l.slogSink != nil {\n\t\tclone.slogSink = l.slogSink.WithAttrs(attrs)\n\t\tclone.sink = clone.slogSink\n\t} else {\n\t\tkvList := make([]any, 0, 2*len(attrs))\n\t\tfor _, attr := range attrs {\n\t\t\tkvList = attrToKVs(attr, l.groupPrefix, kvList)\n\t\t}\n\t\tclone.sink = l.sink.WithValues(kvList...)\n\t}\n\treturn &clone\n}\n\nfunc (l *slogHandler) WithGroup(name string) slog.Handler {\n\tif l.sink == nil {\n\t\treturn l\n\t}\n\tif name == \"\" {\n\t\t// slog says to inline empty groups\n\t\treturn l\n\t}\n\tclone := *l\n\tif l.slogSink != nil {\n\t\tclone.slogSink = l.slogSink.WithGroup(name)\n\t\tclone.sink = clone.slogSink\n\t} else {\n\t\tclone.groupPrefix = addPrefix(clone.groupPrefix, name)\n\t}\n\treturn &clone\n}\n\n// attrToKVs appends a slog.Attr to a logr-style kvList.  It handle slog Groups\n// and other details of slog.\nfunc attrToKVs(attr slog.Attr, groupPrefix string, kvList []any) []any {\n\tattrVal := attr.Value.Resolve()\n\tif attrVal.Kind() == slog.KindGroup {\n\t\tgroupVal := attrVal.Group()\n\t\tgrpKVs := make([]any, 0, 2*len(groupVal))\n\t\tprefix := groupPrefix\n\t\tif attr.Key != \"\" {\n\t\t\tprefix = addPrefix(groupPrefix, attr.Key)\n\t\t}\n\t\tfor _, attr := range groupVal {\n\t\t\tgrpKVs = attrToKVs(attr, prefix, grpKVs)\n\t\t}\n\t\tkvList = append(kvList, grpKVs...)\n\t} else if attr.Key != \"\" {\n\t\tkvList = append(kvList, addPrefix(groupPrefix, attr.Key), attrVal.Any())\n\t}\n\n\treturn kvList\n}\n\nfunc addPrefix(prefix, name string) string {\n\tif prefix == \"\" {\n\t\treturn name\n\t}\n\tif name == \"\" {\n\t\treturn prefix\n\t}\n\treturn prefix + groupSeparator + name\n}\n\n// levelFromSlog adjusts the level by the logger's verbosity and negates it.\n// It ensures that the result is >= 0. This is necessary because the result is\n// passed to a LogSink and that API did not historically document whether\n// levels could be negative or what that meant.\n//\n// Some example usage:\n//\n//\tlogrV0 := getMyLogger()\n//\tlogrV2 := logrV0.V(2)\n//\tslogV2 := slog.New(logr.ToSlogHandler(logrV2))\n//\tslogV2.Debug(\"msg\") // =~ logrV2.V(4) =~ logrV0.V(6)\n//\tslogV2.Info(\"msg\")  // =~  logrV2.V(0) =~ logrV0.V(2)\n//\tslogv2.Warn(\"msg\")  // =~ logrV2.V(-4) =~ logrV0.V(0)\nfunc (l *slogHandler) levelFromSlog(level slog.Level) int {\n\tresult := -level\n\tresult += l.levelBias // in case the original Logger had a V level\n\tif result < 0 {\n\t\tresult = 0 // because LogSink doesn't expect negative V levels\n\t}\n\treturn int(result)\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/slogr.go",
    "content": "//go:build go1.21\n// +build go1.21\n\n/*\nCopyright 2023 The logr Authors.\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\npackage logr\n\nimport (\n\t\"context\"\n\t\"log/slog\"\n)\n\n// FromSlogHandler returns a Logger which writes to the slog.Handler.\n//\n// The logr verbosity level is mapped to slog levels such that V(0) becomes\n// slog.LevelInfo and V(4) becomes slog.LevelDebug.\nfunc FromSlogHandler(handler slog.Handler) Logger {\n\tif handler, ok := handler.(*slogHandler); ok {\n\t\tif handler.sink == nil {\n\t\t\treturn Discard()\n\t\t}\n\t\treturn New(handler.sink).V(int(handler.levelBias))\n\t}\n\treturn New(&slogSink{handler: handler})\n}\n\n// ToSlogHandler returns a slog.Handler which writes to the same sink as the Logger.\n//\n// The returned logger writes all records with level >= slog.LevelError as\n// error log entries with LogSink.Error, regardless of the verbosity level of\n// the Logger:\n//\n//\tlogger := <some Logger with 0 as verbosity level>\n//\tslog.New(ToSlogHandler(logger.V(10))).Error(...) -> logSink.Error(...)\n//\n// The level of all other records gets reduced by the verbosity\n// level of the Logger and the result is negated. If it happens\n// to be negative, then it gets replaced by zero because a LogSink\n// is not expected to handled negative levels:\n//\n//\tslog.New(ToSlogHandler(logger)).Debug(...) -> logger.GetSink().Info(level=4, ...)\n//\tslog.New(ToSlogHandler(logger)).Warning(...) -> logger.GetSink().Info(level=0, ...)\n//\tslog.New(ToSlogHandler(logger)).Info(...) -> logger.GetSink().Info(level=0, ...)\n//\tslog.New(ToSlogHandler(logger.V(4))).Info(...) -> logger.GetSink().Info(level=4, ...)\nfunc ToSlogHandler(logger Logger) slog.Handler {\n\tif sink, ok := logger.GetSink().(*slogSink); ok && logger.GetV() == 0 {\n\t\treturn sink.handler\n\t}\n\n\thandler := &slogHandler{sink: logger.GetSink(), levelBias: slog.Level(logger.GetV())}\n\tif slogSink, ok := handler.sink.(SlogSink); ok {\n\t\thandler.slogSink = slogSink\n\t}\n\treturn handler\n}\n\n// SlogSink is an optional interface that a LogSink can implement to support\n// logging through the slog.Logger or slog.Handler APIs better. It then should\n// also support special slog values like slog.Group. When used as a\n// slog.Handler, the advantages are:\n//\n//   - stack unwinding gets avoided in favor of logging the pre-recorded PC,\n//     as intended by slog\n//   - proper grouping of key/value pairs via WithGroup\n//   - verbosity levels > slog.LevelInfo can be recorded\n//   - less overhead\n//\n// Both APIs (Logger and slog.Logger/Handler) then are supported equally\n// well. Developers can pick whatever API suits them better and/or mix\n// packages which use either API in the same binary with a common logging\n// implementation.\n//\n// This interface is necessary because the type implementing the LogSink\n// interface cannot also implement the slog.Handler interface due to the\n// different prototype of the common Enabled method.\n//\n// An implementation could support both interfaces in two different types, but then\n// additional interfaces would be needed to convert between those types in FromSlogHandler\n// and ToSlogHandler.\ntype SlogSink interface {\n\tLogSink\n\n\tHandle(ctx context.Context, record slog.Record) error\n\tWithAttrs(attrs []slog.Attr) SlogSink\n\tWithGroup(name string) SlogSink\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/logr/slogsink.go",
    "content": "//go:build go1.21\n// +build go1.21\n\n/*\nCopyright 2023 The logr Authors.\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\npackage logr\n\nimport (\n\t\"context\"\n\t\"log/slog\"\n\t\"runtime\"\n\t\"time\"\n)\n\nvar (\n\t_ LogSink          = &slogSink{}\n\t_ CallDepthLogSink = &slogSink{}\n\t_ Underlier        = &slogSink{}\n)\n\n// Underlier is implemented by the LogSink returned by NewFromLogHandler.\ntype Underlier interface {\n\t// GetUnderlying returns the Handler used by the LogSink.\n\tGetUnderlying() slog.Handler\n}\n\nconst (\n\t// nameKey is used to log the `WithName` values as an additional attribute.\n\tnameKey = \"logger\"\n\n\t// errKey is used to log the error parameter of Error as an additional attribute.\n\terrKey = \"err\"\n)\n\ntype slogSink struct {\n\tcallDepth int\n\tname      string\n\thandler   slog.Handler\n}\n\nfunc (l *slogSink) Init(info RuntimeInfo) {\n\tl.callDepth = info.CallDepth\n}\n\nfunc (l *slogSink) GetUnderlying() slog.Handler {\n\treturn l.handler\n}\n\nfunc (l *slogSink) WithCallDepth(depth int) LogSink {\n\tnewLogger := *l\n\tnewLogger.callDepth += depth\n\treturn &newLogger\n}\n\nfunc (l *slogSink) Enabled(level int) bool {\n\treturn l.handler.Enabled(context.Background(), slog.Level(-level))\n}\n\nfunc (l *slogSink) Info(level int, msg string, kvList ...interface{}) {\n\tl.log(nil, msg, slog.Level(-level), kvList...)\n}\n\nfunc (l *slogSink) Error(err error, msg string, kvList ...interface{}) {\n\tl.log(err, msg, slog.LevelError, kvList...)\n}\n\nfunc (l *slogSink) log(err error, msg string, level slog.Level, kvList ...interface{}) {\n\tvar pcs [1]uintptr\n\t// skip runtime.Callers, this function, Info/Error, and all helper functions above that.\n\truntime.Callers(3+l.callDepth, pcs[:])\n\n\trecord := slog.NewRecord(time.Now(), level, msg, pcs[0])\n\tif l.name != \"\" {\n\t\trecord.AddAttrs(slog.String(nameKey, l.name))\n\t}\n\tif err != nil {\n\t\trecord.AddAttrs(slog.Any(errKey, err))\n\t}\n\trecord.Add(kvList...)\n\t_ = l.handler.Handle(context.Background(), record)\n}\n\nfunc (l slogSink) WithName(name string) LogSink {\n\tif l.name != \"\" {\n\t\tl.name += \"/\"\n\t}\n\tl.name += name\n\treturn &l\n}\n\nfunc (l slogSink) WithValues(kvList ...interface{}) LogSink {\n\tl.handler = l.handler.WithAttrs(kvListToAttrs(kvList...))\n\treturn &l\n}\n\nfunc kvListToAttrs(kvList ...interface{}) []slog.Attr {\n\t// We don't need the record itself, only its Add method.\n\trecord := slog.NewRecord(time.Time{}, 0, \"\", 0)\n\trecord.Add(kvList...)\n\tattrs := make([]slog.Attr, 0, record.NumAttrs())\n\trecord.Attrs(func(attr slog.Attr) bool {\n\t\tattrs = append(attrs, attr)\n\t\treturn true\n\t})\n\treturn attrs\n}\n"
  },
  {
    "path": "vendor/github.com/go-logr/stdr/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/go-logr/stdr/README.md",
    "content": "# Minimal Go logging using logr and Go's standard library\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/go-logr/stdr.svg)](https://pkg.go.dev/github.com/go-logr/stdr)\n\nThis package implements the [logr interface](https://github.com/go-logr/logr)\nin terms of Go's standard log package(https://pkg.go.dev/log).\n"
  },
  {
    "path": "vendor/github.com/go-logr/stdr/stdr.go",
    "content": "/*\nCopyright 2019 The logr Authors.\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\n// Package stdr implements github.com/go-logr/logr.Logger in terms of\n// Go's standard log package.\npackage stdr\n\nimport (\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/go-logr/logr\"\n\t\"github.com/go-logr/logr/funcr\"\n)\n\n// The global verbosity level.  See SetVerbosity().\nvar globalVerbosity int\n\n// SetVerbosity sets the global level against which all info logs will be\n// compared.  If this is greater than or equal to the \"V\" of the logger, the\n// message will be logged.  A higher value here means more logs will be written.\n// The previous verbosity value is returned.  This is not concurrent-safe -\n// callers must be sure to call it from only one goroutine.\nfunc SetVerbosity(v int) int {\n\told := globalVerbosity\n\tglobalVerbosity = v\n\treturn old\n}\n\n// New returns a logr.Logger which is implemented by Go's standard log package,\n// or something like it.  If std is nil, this will use a default logger\n// instead.\n//\n// Example: stdr.New(log.New(os.Stderr, \"\", log.LstdFlags|log.Lshortfile)))\nfunc New(std StdLogger) logr.Logger {\n\treturn NewWithOptions(std, Options{})\n}\n\n// NewWithOptions returns a logr.Logger which is implemented by Go's standard\n// log package, or something like it.  See New for details.\nfunc NewWithOptions(std StdLogger, opts Options) logr.Logger {\n\tif std == nil {\n\t\t// Go's log.Default() is only available in 1.16 and higher.\n\t\tstd = log.New(os.Stderr, \"\", log.LstdFlags)\n\t}\n\n\tif opts.Depth < 0 {\n\t\topts.Depth = 0\n\t}\n\n\tfopts := funcr.Options{\n\t\tLogCaller: funcr.MessageClass(opts.LogCaller),\n\t}\n\n\tsl := &logger{\n\t\tFormatter: funcr.NewFormatter(fopts),\n\t\tstd:       std,\n\t}\n\n\t// For skipping our own logger.Info/Error.\n\tsl.Formatter.AddCallDepth(1 + opts.Depth)\n\n\treturn logr.New(sl)\n}\n\n// Options carries parameters which influence the way logs are generated.\ntype Options struct {\n\t// Depth biases the assumed number of call frames to the \"true\" caller.\n\t// This is useful when the calling code calls a function which then calls\n\t// stdr (e.g. a logging shim to another API).  Values less than zero will\n\t// be treated as zero.\n\tDepth int\n\n\t// LogCaller tells stdr to add a \"caller\" key to some or all log lines.\n\t// Go's log package has options to log this natively, too.\n\tLogCaller MessageClass\n\n\t// TODO: add an option to log the date/time\n}\n\n// MessageClass indicates which category or categories of messages to consider.\ntype MessageClass int\n\nconst (\n\t// None ignores all message classes.\n\tNone MessageClass = iota\n\t// All considers all message classes.\n\tAll\n\t// Info only considers info messages.\n\tInfo\n\t// Error only considers error messages.\n\tError\n)\n\n// StdLogger is the subset of the Go stdlib log.Logger API that is needed for\n// this adapter.\ntype StdLogger interface {\n\t// Output is the same as log.Output and log.Logger.Output.\n\tOutput(calldepth int, logline string) error\n}\n\ntype logger struct {\n\tfuncr.Formatter\n\tstd StdLogger\n}\n\nvar _ logr.LogSink = &logger{}\nvar _ logr.CallDepthLogSink = &logger{}\n\nfunc (l logger) Enabled(level int) bool {\n\treturn globalVerbosity >= level\n}\n\nfunc (l logger) Info(level int, msg string, kvList ...interface{}) {\n\tprefix, args := l.FormatInfo(level, msg, kvList)\n\tif prefix != \"\" {\n\t\targs = prefix + \": \" + args\n\t}\n\t_ = l.std.Output(l.Formatter.GetDepth()+1, args)\n}\n\nfunc (l logger) Error(err error, msg string, kvList ...interface{}) {\n\tprefix, args := l.FormatError(err, msg, kvList)\n\tif prefix != \"\" {\n\t\targs = prefix + \": \" + args\n\t}\n\t_ = l.std.Output(l.Formatter.GetDepth()+1, args)\n}\n\nfunc (l logger) WithName(name string) logr.LogSink {\n\tl.Formatter.AddName(name)\n\treturn &l\n}\n\nfunc (l logger) WithValues(kvList ...interface{}) logr.LogSink {\n\tl.Formatter.AddValues(kvList)\n\treturn &l\n}\n\nfunc (l logger) WithCallDepth(depth int) logr.LogSink {\n\tl.Formatter.AddCallDepth(depth)\n\treturn &l\n}\n\n// Underlier exposes access to the underlying logging implementation.  Since\n// callers only have a logr.Logger, they have to know which implementation is\n// in use, so this interface is less of an abstraction and more of way to test\n// type conversion.\ntype Underlier interface {\n\tGetUnderlying() StdLogger\n}\n\n// GetUnderlying returns the StdLogger underneath this logger.  Since StdLogger\n// is itself an interface, the result may or may not be a Go log.Logger.\nfunc (l logger) GetUnderlying() StdLogger {\n\treturn l.std\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 siddontang\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"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/auth.go",
    "content": "package client\n\nimport (\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/packet\"\n\t\"github.com/pingcap/errors\"\n\t\"github.com/pingcap/tidb/pkg/parser/charset\"\n)\n\nconst defaultAuthPluginName = AUTH_NATIVE_PASSWORD\n\n// defines the supported auth plugins\nvar supportedAuthPlugins = []string{AUTH_NATIVE_PASSWORD, AUTH_SHA256_PASSWORD, AUTH_CACHING_SHA2_PASSWORD}\n\n// helper function to determine what auth methods are allowed by this client\nfunc authPluginAllowed(pluginName string) bool {\n\tfor _, p := range supportedAuthPlugins {\n\t\tif pluginName == p {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// See:\n//   - https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_packets_protocol_handshake_v10.html\n//   - https://github.com/alibaba/canal/blob/0ec46991499a22870dde4ae736b2586cbcbfea94/driver/src/main/java/com/alibaba/otter/canal/parse/driver/mysql/packets/server/HandshakeInitializationPacket.java#L89\n//   - https://github.com/vapor/mysql-nio/blob/main/Sources/MySQLNIO/Protocol/MySQLProtocol%2BHandshakeV10.swift\n//   - https://github.com/github/vitess-gh/blob/70ae1a2b3a116ff6411b0f40852d6e71382f6e07/go/mysql/client.go\nfunc (c *Conn) readInitialHandshake() error {\n\tdata, err := c.ReadPacket()\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif data[0] == ERR_HEADER {\n\t\treturn errors.Annotate(c.handleErrorPacket(data), \"read initial handshake error\")\n\t}\n\n\tif data[0] != ClassicProtocolVersion {\n\t\tif data[0] == XProtocolVersion {\n\t\t\treturn errors.Errorf(\n\t\t\t\t\"invalid protocol version %d, expected 10. \"+\n\t\t\t\t\t\"This might be X Protocol, make sure to connect to the right port\",\n\t\t\t\tdata[0])\n\t\t}\n\t\treturn errors.Errorf(\"invalid protocol version %d, expected 10\", data[0])\n\t}\n\tpos := 1\n\n\t// skip mysql version\n\t// mysql version end with 0x00\n\tversion := data[pos : bytes.IndexByte(data[pos:], 0x00)+1]\n\tc.serverVersion = string(version)\n\tpos += len(version) + 1 /*trailing zero byte*/\n\n\t// connection id length is 4\n\tc.connectionID = binary.LittleEndian.Uint32(data[pos : pos+4])\n\tpos += 4\n\n\t// first 8 bytes of the plugin provided data (scramble)\n\tc.salt = append(c.salt[:0], data[pos:pos+8]...)\n\tpos += 8\n\n\tif data[pos] != 0 { // \t0x00 byte, terminating the first part of a scramble\n\t\treturn errors.Errorf(\"expect 0x00 after scramble, got %q\", rune(data[pos]))\n\t}\n\tpos++\n\n\t// The lower 2 bytes of the Capabilities Flags\n\tc.capability = uint32(binary.LittleEndian.Uint16(data[pos : pos+2]))\n\t// check protocol\n\tif c.capability&CLIENT_PROTOCOL_41 == 0 {\n\t\treturn errors.New(\"the MySQL server can not support protocol 41 and above required by the client\")\n\t}\n\tif c.capability&CLIENT_SSL == 0 && c.tlsConfig != nil {\n\t\treturn errors.New(\"the MySQL Server does not support TLS required by the client\")\n\t}\n\tpos += 2\n\n\tif len(data) > pos {\n\t\t// default server a_protocol_character_set, only the lower 8-bits\n\t\t// c.charset = data[pos]\n\t\tpos += 1\n\n\t\tc.status = binary.LittleEndian.Uint16(data[pos : pos+2])\n\t\tpos += 2\n\n\t\t// The upper 2 bytes of the Capabilities Flags\n\t\tc.capability = uint32(binary.LittleEndian.Uint16(data[pos:pos+2]))<<16 | c.capability\n\t\tpos += 2\n\n\t\t// length of the combined auth_plugin_data (scramble), if auth_plugin_data_len is > 0\n\t\tauthPluginDataLen := data[pos]\n\t\tif (c.capability&CLIENT_PLUGIN_AUTH == 0) && (authPluginDataLen > 0) {\n\t\t\treturn errors.Errorf(\"invalid auth plugin data filler %d\", authPluginDataLen)\n\t\t}\n\t\tpos++\n\n\t\t// skip reserved (all [00] ?)\n\t\tpos += 10\n\n\t\tif c.capability&CLIENT_SECURE_CONNECTION != 0 {\n\t\t\t// Rest of the plugin provided data (scramble)\n\n\t\t\t// https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_packets_protocol_handshake_v10.html\n\t\t\t// $len=MAX(13, length of auth-plugin-data - 8)\n\t\t\t//\n\t\t\t// https://github.com/mysql/mysql-server/blob/1bfe02bdad6604d54913c62614bde57a055c8332/sql/auth/sql_authentication.cc#L1641-L1642\n\t\t\t// the first packet *must* have at least 20 bytes of a scramble.\n\t\t\t// if a plugin provided less, we pad it to 20 with zeros\n\t\t\trest := int(authPluginDataLen) - 8\n\t\t\tif rest < 13 {\n\t\t\t\trest = 13\n\t\t\t}\n\n\t\t\tauthPluginDataPart2 := data[pos : pos+rest-1]\n\t\t\tpos += rest\n\n\t\t\tc.salt = append(c.salt, authPluginDataPart2...)\n\t\t}\n\n\t\tif c.capability&CLIENT_PLUGIN_AUTH != 0 {\n\t\t\tc.authPluginName = string(data[pos : pos+bytes.IndexByte(data[pos:], 0x00)])\n\t\t\tpos += len(c.authPluginName)\n\n\t\t\tif data[pos] != 0 {\n\t\t\t\treturn errors.Errorf(\"expect 0x00 after authPluginName, got %q\", rune(data[pos]))\n\t\t\t}\n\t\t\t// pos++ // ineffectual\n\t\t}\n\t}\n\n\t// if server gives no default auth plugin name, use a client default\n\tif c.authPluginName == \"\" {\n\t\tc.authPluginName = defaultAuthPluginName\n\t}\n\n\treturn nil\n}\n\n// generate auth response data according to auth plugin\n//\n// NOTE: the returned boolean value indicates whether to add a \\NUL to the end of data.\n// it is quite tricky because MySQL server expects different formats of responses in different auth situations.\n// here the \\NUL needs to be added when sending back the empty password or cleartext password in 'sha256_password'\n// authentication.\nfunc (c *Conn) genAuthResponse(authData []byte) ([]byte, bool, error) {\n\t// password hashing\n\tswitch c.authPluginName {\n\tcase AUTH_NATIVE_PASSWORD:\n\t\treturn CalcPassword(authData[:20], []byte(c.password)), false, nil\n\tcase AUTH_CACHING_SHA2_PASSWORD:\n\t\treturn CalcCachingSha2Password(authData, c.password), false, nil\n\tcase AUTH_CLEAR_PASSWORD:\n\t\treturn []byte(c.password), true, nil\n\tcase AUTH_SHA256_PASSWORD:\n\t\tif len(c.password) == 0 {\n\t\t\treturn nil, true, nil\n\t\t}\n\t\tif c.tlsConfig != nil || c.proto == \"unix\" {\n\t\t\t// write cleartext auth packet\n\t\t\t// see: https://dev.mysql.com/doc/refman/8.0/en/sha256-pluggable-authentication.html\n\t\t\treturn []byte(c.password), true, nil\n\t\t} else {\n\t\t\t// request public key from server\n\t\t\t// see: https://dev.mysql.com/doc/internals/en/public-key-retrieval.html\n\t\t\treturn []byte{1}, false, nil\n\t\t}\n\tdefault:\n\t\t// not reachable\n\t\treturn nil, false, fmt.Errorf(\"auth plugin '%s' is not supported\", c.authPluginName)\n\t}\n}\n\n// generate connection attributes data\nfunc (c *Conn) genAttributes() []byte {\n\tif len(c.attributes) == 0 {\n\t\treturn nil\n\t}\n\n\tattrData := make([]byte, 0)\n\tfor k, v := range c.attributes {\n\t\tattrData = append(attrData, PutLengthEncodedString([]byte(k))...)\n\t\tattrData = append(attrData, PutLengthEncodedString([]byte(v))...)\n\t}\n\treturn append(PutLengthEncodedInt(uint64(len(attrData))), attrData...)\n}\n\n// See: http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse\nfunc (c *Conn) writeAuthHandshake() error {\n\tif !authPluginAllowed(c.authPluginName) {\n\t\treturn fmt.Errorf(\"unknow auth plugin name '%s'\", c.authPluginName)\n\t}\n\n\t// Set default client capabilities that reflect the abilities of this library\n\tcapability := CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION |\n\t\tCLIENT_LONG_PASSWORD | CLIENT_TRANSACTIONS | CLIENT_PLUGIN_AUTH\n\t// Adjust client capability flags based on server support\n\tcapability |= c.capability & CLIENT_LONG_FLAG\n\t// Adjust client capability flags on specific client requests\n\t// Only flags that would make any sense setting and aren't handled elsewhere\n\t// in the library are supported here\n\tcapability |= c.ccaps&CLIENT_FOUND_ROWS | c.ccaps&CLIENT_IGNORE_SPACE |\n\t\tc.ccaps&CLIENT_MULTI_STATEMENTS | c.ccaps&CLIENT_MULTI_RESULTS |\n\t\tc.ccaps&CLIENT_PS_MULTI_RESULTS | c.ccaps&CLIENT_CONNECT_ATTRS |\n\t\tc.ccaps&CLIENT_COMPRESS | c.ccaps&CLIENT_ZSTD_COMPRESSION_ALGORITHM |\n\t\tc.ccaps&CLIENT_LOCAL_FILES\n\n\t// To enable TLS / SSL\n\tif c.tlsConfig != nil {\n\t\tcapability |= CLIENT_SSL\n\t}\n\n\tauth, addNull, err := c.genAuthResponse(c.salt)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// encode length of the auth plugin data\n\t// here we use the Length-Encoded-Integer(LEI) as the data length may not fit into one byte\n\t// see: https://dev.mysql.com/doc/internals/en/integer.html#length-encoded-integer\n\tvar authRespLEIBuf [9]byte\n\tauthRespLEI := AppendLengthEncodedInteger(authRespLEIBuf[:0], uint64(len(auth)))\n\tif len(authRespLEI) > 1 {\n\t\t// if the length can not be written in 1 byte, it must be written as a\n\t\t// length encoded integer\n\t\tcapability |= CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA\n\t}\n\n\t// packet length\n\t// capability 4\n\t// max-packet size 4\n\t// charset 1\n\t// reserved all[0] 23\n\t// username\n\t// auth\n\t// mysql_native_password + null-terminated\n\tlength := 4 + 4 + 1 + 23 + len(c.user) + 1 + len(authRespLEI) + len(auth) + 21 + 1\n\tif addNull {\n\t\tlength++\n\t}\n\t// db name\n\tif len(c.db) > 0 {\n\t\tcapability |= CLIENT_CONNECT_WITH_DB\n\t\tlength += len(c.db) + 1\n\t}\n\t// connection attributes\n\tattrData := c.genAttributes()\n\tif len(attrData) > 0 {\n\t\tcapability |= CLIENT_CONNECT_ATTRS\n\t\tlength += len(attrData)\n\t}\n\tif c.ccaps&CLIENT_ZSTD_COMPRESSION_ALGORITHM > 0 {\n\t\tlength++\n\t}\n\n\tdata := make([]byte, length+4)\n\n\t// capability [32 bit]\n\tdata[4] = byte(capability)\n\tdata[5] = byte(capability >> 8)\n\tdata[6] = byte(capability >> 16)\n\tdata[7] = byte(capability >> 24)\n\n\t// MaxPacketSize [32 bit] (none)\n\tdata[8] = 0x00\n\tdata[9] = 0x00\n\tdata[10] = 0x00\n\tdata[11] = 0x00\n\n\t// Charset [1 byte]\n\t// use default collation id 33 here, is `utf8mb3_general_ci`\n\tcollationName := c.collation\n\tif len(collationName) == 0 {\n\t\tcollationName = DEFAULT_COLLATION_NAME\n\t}\n\tcollation, err := charset.GetCollationByName(collationName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid collation name %s\", collationName)\n\t}\n\n\t// the MySQL protocol calls for the collation id to be sent as 1 byte, where only the\n\t// lower 8 bits are used in this field.\n\tdata[12] = byte(collation.ID & 0xff)\n\n\t// SSL Connection Request Packet\n\t// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest\n\tif c.tlsConfig != nil {\n\t\t// Send TLS / SSL request packet\n\t\tif err := c.WritePacket(data[:(4+4+1+23)+4]); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Switch to TLS\n\t\ttlsConn := tls.Client(c.Conn.Conn, c.tlsConfig)\n\t\tif err := tlsConn.Handshake(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tcurrentSequence := c.Sequence\n\t\tc.Conn = packet.NewConnWithTimeout(tlsConn, c.ReadTimeout, c.WriteTimeout, c.BufferSize)\n\t\tc.Sequence = currentSequence\n\t}\n\n\t// Filler [23 bytes] (all 0x00)\n\tpos := 13\n\tfor ; pos < 13+23; pos++ {\n\t\tdata[pos] = 0\n\t}\n\n\t// User [null terminated string]\n\tif len(c.user) > 0 {\n\t\tpos += copy(data[pos:], c.user)\n\t}\n\tdata[pos] = 0x00\n\tpos++\n\n\t// auth [length encoded integer]\n\tpos += copy(data[pos:], authRespLEI)\n\tpos += copy(data[pos:], auth)\n\tif addNull {\n\t\tdata[pos] = 0x00\n\t\tpos++\n\t}\n\n\t// db [null terminated string]\n\tif len(c.db) > 0 {\n\t\tpos += copy(data[pos:], c.db)\n\t\tdata[pos] = 0x00\n\t\tpos++\n\t}\n\n\t// Assume native client during response\n\tpos += copy(data[pos:], c.authPluginName)\n\tdata[pos] = 0x00\n\tpos++\n\n\t// connection attributes\n\tif len(attrData) > 0 {\n\t\tpos += copy(data[pos:], attrData)\n\t}\n\n\tif c.ccaps&CLIENT_ZSTD_COMPRESSION_ALGORITHM > 0 {\n\t\t// zstd_compression_level\n\t\tdata[pos] = 0x03\n\t}\n\n\treturn c.WritePacket(data)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/conn.go",
    "content": "package client\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"crypto/tls\"\n\t\"fmt\"\n\t\"net\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/pingcap/errors\"\n\t\"github.com/pingcap/tidb/pkg/parser/charset\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/packet\"\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\nconst defaultBufferSize = 65536 // 64kb\n\ntype Option func(*Conn) error\n\ntype Conn struct {\n\t*packet.Conn\n\n\tuser      string\n\tpassword  string\n\tdb        string\n\ttlsConfig *tls.Config\n\tproto     string\n\n\t// Connection read and write timeouts to set on the connection\n\tReadTimeout  time.Duration\n\tWriteTimeout time.Duration\n\n\t// The buffer size to use in the packet connection\n\tBufferSize int\n\n\tserverVersion string\n\t// server capabilities\n\tcapability uint32\n\t// client-set capabilities only\n\tccaps uint32\n\n\tattributes map[string]string\n\n\tstatus uint16\n\n\tcharset string\n\t// sets the collation to be set on the auth handshake, this does not issue a 'set names' command\n\tcollation string\n\n\tsalt           []byte\n\tauthPluginName string\n\n\tconnectionID uint32\n}\n\n// This function will be called for every row in resultset from ExecuteSelectStreaming.\ntype SelectPerRowCallback func(row []FieldValue) error\n\n// This function will be called once per result from ExecuteSelectStreaming\ntype SelectPerResultCallback func(result *Result) error\n\n// This function will be called once per result from ExecuteMultiple\ntype ExecPerResultCallback func(result *Result, err error)\n\nfunc getNetProto(addr string) string {\n\tproto := \"tcp\"\n\tif strings.Contains(addr, \"/\") {\n\t\tproto = \"unix\"\n\t}\n\treturn proto\n}\n\n// Connect to a MySQL server, addr can be ip:port, or a unix socket domain like /var/sock.\n// Accepts a series of configuration functions as a variadic argument.\nfunc Connect(addr, user, password, dbName string, options ...Option) (*Conn, error) {\n\treturn ConnectWithTimeout(addr, user, password, dbName, time.Second*10, options...)\n}\n\n// ConnectWithTimeout to a MySQL address using a timeout.\nfunc ConnectWithTimeout(addr, user, password, dbName string, timeout time.Duration, options ...Option) (*Conn, error) {\n\treturn ConnectWithContext(context.Background(), addr, user, password, dbName, time.Second*10, options...)\n}\n\n// ConnectWithContext to a MySQL addr using the provided context.\nfunc ConnectWithContext(ctx context.Context, addr, user, password, dbName string, timeout time.Duration, options ...Option) (*Conn, error) {\n\tdialer := &net.Dialer{Timeout: timeout}\n\treturn ConnectWithDialer(ctx, \"\", addr, user, password, dbName, dialer.DialContext, options...)\n}\n\n// Dialer connects to the address on the named network using the provided context.\ntype Dialer func(ctx context.Context, network, address string) (net.Conn, error)\n\n// ConnectWithDialer to a MySQL server using the given Dialer.\nfunc ConnectWithDialer(ctx context.Context, network, addr, user, password, dbName string, dialer Dialer, options ...Option) (*Conn, error) {\n\tc := new(Conn)\n\n\tc.BufferSize = defaultBufferSize\n\tc.attributes = map[string]string{\n\t\t\"_client_name\": \"go-mysql\",\n\t\t// \"_client_version\": \"0.1\",\n\t\t\"_os\":              runtime.GOOS,\n\t\t\"_platform\":        runtime.GOARCH,\n\t\t\"_runtime_version\": runtime.Version(),\n\t}\n\n\tif network == \"\" {\n\t\tnetwork = getNetProto(addr)\n\t}\n\n\tvar err error\n\tconn, err := dialer(ctx, network, addr)\n\tif err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tc.user = user\n\tc.password = password\n\tc.db = dbName\n\tc.proto = network\n\n\t// use default charset here, utf-8\n\tc.charset = DEFAULT_CHARSET\n\n\t// Apply configuration functions.\n\tfor _, option := range options {\n\t\tif err := option(c); err != nil {\n\t\t\t// must close the connection in the event the provided configuration is not valid\n\t\t\t_ = conn.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tc.Conn = packet.NewConnWithTimeout(conn, c.ReadTimeout, c.WriteTimeout, c.BufferSize)\n\tif c.tlsConfig != nil {\n\t\tseq := c.Conn.Sequence\n\t\tc.Conn = packet.NewTLSConnWithTimeout(conn, c.ReadTimeout, c.WriteTimeout)\n\t\tc.Conn.Sequence = seq\n\t}\n\n\tif err = c.handshake(); err != nil {\n\t\t// in the event of an error c.handshake() will close the connection\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tif c.ccaps&CLIENT_COMPRESS > 0 {\n\t\tc.Conn.Compression = MYSQL_COMPRESS_ZLIB\n\t} else if c.ccaps&CLIENT_ZSTD_COMPRESSION_ALGORITHM > 0 {\n\t\tc.Conn.Compression = MYSQL_COMPRESS_ZSTD\n\t}\n\n\t// if a collation was set with a ID of > 255, then we need to call SET NAMES ...\n\t// since the auth handshake response only support collations with 1-byte ids\n\tif len(c.collation) != 0 {\n\t\tcollation, err := charset.GetCollationByName(c.collation)\n\t\tif err != nil {\n\t\t\tc.Close()\n\t\t\treturn nil, errors.Trace(fmt.Errorf(\"invalid collation name %s\", c.collation))\n\t\t}\n\n\t\tif collation.ID > 255 {\n\t\t\tif _, err := c.exec(fmt.Sprintf(\"SET NAMES %s COLLATE %s\", c.charset, c.collation)); err != nil {\n\t\t\t\tc.Close()\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn c, nil\n}\n\nfunc (c *Conn) handshake() error {\n\tvar err error\n\tif err = c.readInitialHandshake(); err != nil {\n\t\tc.Close()\n\t\treturn errors.Trace(fmt.Errorf(\"readInitialHandshake: %w\", err))\n\t}\n\n\tif err := c.writeAuthHandshake(); err != nil {\n\t\tc.Close()\n\n\t\treturn errors.Trace(fmt.Errorf(\"writeAuthHandshake: %w\", err))\n\t}\n\n\tif err := c.handleAuthResult(); err != nil {\n\t\tc.Close()\n\t\treturn errors.Trace(fmt.Errorf(\"handleAuthResult: %w\", err))\n\t}\n\n\treturn nil\n}\n\nfunc (c *Conn) Close() error {\n\treturn c.Conn.Close()\n}\n\nfunc (c *Conn) Quit() error {\n\tif err := c.writeCommand(COM_QUIT); err != nil {\n\t\treturn err\n\t}\n\treturn c.Close()\n}\n\nfunc (c *Conn) Ping() error {\n\tif err := c.writeCommand(COM_PING); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif _, err := c.readOK(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn nil\n}\n\n// SetCapability enables the use of a specific capability\nfunc (c *Conn) SetCapability(cap uint32) {\n\tc.ccaps |= cap\n}\n\n// UnsetCapability disables the use of a specific capability\nfunc (c *Conn) UnsetCapability(cap uint32) {\n\tc.ccaps &= ^cap\n}\n\n// HasCapability returns true if the connection has the specific capability\nfunc (c *Conn) HasCapability(cap uint32) bool {\n\treturn c.ccaps&cap > 0\n}\n\n// UseSSL: use default SSL\n// pass to options when connect\nfunc (c *Conn) UseSSL(insecureSkipVerify bool) {\n\tc.tlsConfig = &tls.Config{InsecureSkipVerify: insecureSkipVerify}\n}\n\n// SetTLSConfig: use user-specified TLS config\n// pass to options when connect\nfunc (c *Conn) SetTLSConfig(config *tls.Config) {\n\tc.tlsConfig = config\n}\n\nfunc (c *Conn) UseDB(dbName string) error {\n\tif c.db == dbName {\n\t\treturn nil\n\t}\n\n\tif err := c.writeCommandStr(COM_INIT_DB, dbName); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif _, err := c.readOK(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tc.db = dbName\n\treturn nil\n}\n\nfunc (c *Conn) GetDB() string {\n\treturn c.db\n}\n\n// GetServerVersion returns the version of the server as reported by the server\n// in the initial server greeting.\nfunc (c *Conn) GetServerVersion() string {\n\treturn c.serverVersion\n}\n\n// CompareServerVersion is comparing version v against the version\n// of the server and returns 0 if they are equal, and 1 if the server version\n// is higher and -1 if the server version is lower.\nfunc (c *Conn) CompareServerVersion(v string) (int, error) {\n\treturn CompareServerVersions(c.serverVersion, v)\n}\n\nfunc (c *Conn) Execute(command string, args ...interface{}) (*Result, error) {\n\tif len(args) == 0 {\n\t\treturn c.exec(command)\n\t} else {\n\t\tif s, err := c.Prepare(command); err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t} else {\n\t\t\tvar r *Result\n\t\t\tr, err = s.Execute(args...)\n\t\t\ts.Close()\n\t\t\treturn r, err\n\t\t}\n\t}\n}\n\n// ExecuteMultiple will call perResultCallback for every result of the multiple queries\n// that are executed.\n//\n// When ExecuteMultiple is used, the connection should have the SERVER_MORE_RESULTS_EXISTS\n// flag set to signal the server multiple queries are executed. Handling the responses\n// is up to the implementation of perResultCallback.\nfunc (c *Conn) ExecuteMultiple(query string, perResultCallback ExecPerResultCallback) (*Result, error) {\n\tif err := c.writeCommandStr(COM_QUERY, query); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tvar err error\n\tvar result *Result\n\n\tbs := utils.ByteSliceGet(16)\n\tdefer utils.ByteSlicePut(bs)\n\n\tfor {\n\t\tbs.B, err = c.ReadPacketReuseMem(bs.B[:0])\n\t\tif err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t}\n\n\t\tswitch bs.B[0] {\n\t\tcase OK_HEADER:\n\t\t\tresult, err = c.handleOKPacket(bs.B)\n\t\tcase ERR_HEADER:\n\t\t\terr = c.handleErrorPacket(bytes.Repeat(bs.B, 1))\n\t\t\tresult = nil\n\t\tcase LocalInFile_HEADER:\n\t\t\terr = ErrMalformPacket\n\t\t\tresult = nil\n\t\tdefault:\n\t\t\tresult, err = c.readResultset(bs.B, false)\n\t\t}\n\t\t// call user-defined callback\n\t\tperResultCallback(result, err)\n\n\t\t// if there was an error of this was the last result, stop looping\n\t\tif err != nil || result.Status&SERVER_MORE_RESULTS_EXISTS == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// return an empty result(set) signaling we're done streaming a multiple\n\t// streaming session\n\t// if this would end up in WriteValue, it would just be ignored as all\n\t// responses should have been handled in perResultCallback\n\trs := NewResultset(0)\n\trs.Streaming = StreamingMultiple\n\trs.StreamingDone = true\n\treturn NewResult(rs), nil\n}\n\n// ExecuteSelectStreaming will call perRowCallback for every row in resultset\n// WITHOUT saving any row data to Result.{Values/RawPkg/RowDatas} fields.\n// When given, perResultCallback will be called once per result\n//\n// ExecuteSelectStreaming should be used only for SELECT queries with a large response resultset for memory preserving.\nfunc (c *Conn) ExecuteSelectStreaming(command string, result *Result, perRowCallback SelectPerRowCallback, perResultCallback SelectPerResultCallback) error {\n\tif err := c.writeCommandStr(COM_QUERY, command); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn c.readResultStreaming(false, result, perRowCallback, perResultCallback)\n}\n\nfunc (c *Conn) Begin() error {\n\t_, err := c.exec(\"BEGIN\")\n\treturn errors.Trace(err)\n}\n\nfunc (c *Conn) Commit() error {\n\t_, err := c.exec(\"COMMIT\")\n\treturn errors.Trace(err)\n}\n\nfunc (c *Conn) Rollback() error {\n\t_, err := c.exec(\"ROLLBACK\")\n\treturn errors.Trace(err)\n}\n\nfunc (c *Conn) SetAttributes(attributes map[string]string) {\n\tfor k, v := range attributes {\n\t\tc.attributes[k] = v\n\t}\n}\n\nfunc (c *Conn) SetCharset(charset string) error {\n\tif c.charset == charset {\n\t\treturn nil\n\t}\n\n\tif _, err := c.exec(fmt.Sprintf(\"SET NAMES %s\", charset)); err != nil {\n\t\treturn errors.Trace(err)\n\t} else {\n\t\tc.charset = charset\n\t\treturn nil\n\t}\n}\n\nfunc (c *Conn) SetCollation(collation string) error {\n\tif len(c.serverVersion) != 0 {\n\t\treturn errors.Trace(errors.Errorf(\"cannot set collation after connection is established\"))\n\t}\n\n\tc.collation = collation\n\treturn nil\n}\n\nfunc (c *Conn) GetCollation() string {\n\treturn c.collation\n}\n\nfunc (c *Conn) FieldList(table string, wildcard string) ([]*Field, error) {\n\tif err := c.writeCommandStrStr(COM_FIELD_LIST, table, wildcard); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tfs := make([]*Field, 0, 4)\n\tvar f *Field\n\tfor {\n\t\tdata, err := c.ReadPacket()\n\t\tif err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t}\n\n\t\t// ERR Packet\n\t\tif data[0] == ERR_HEADER {\n\t\t\treturn nil, c.handleErrorPacket(data)\n\t\t}\n\n\t\t// EOF Packet\n\t\tif c.isEOFPacket(data) {\n\t\t\treturn fs, nil\n\t\t}\n\n\t\tif f, err = FieldData(data).Parse(); err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t}\n\t\tfs = append(fs, f)\n\t}\n}\n\nfunc (c *Conn) SetAutoCommit() error {\n\tif !c.IsAutoCommit() {\n\t\tif _, err := c.exec(\"SET AUTOCOMMIT = 1\"); err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *Conn) IsAutoCommit() bool {\n\treturn c.status&SERVER_STATUS_AUTOCOMMIT > 0\n}\n\nfunc (c *Conn) IsInTransaction() bool {\n\treturn c.status&SERVER_STATUS_IN_TRANS > 0\n}\n\nfunc (c *Conn) GetCharset() string {\n\treturn c.charset\n}\n\nfunc (c *Conn) GetConnectionID() uint32 {\n\treturn c.connectionID\n}\n\nfunc (c *Conn) HandleOKPacket(data []byte) *Result {\n\tr, _ := c.handleOKPacket(data)\n\treturn r\n}\n\nfunc (c *Conn) HandleErrorPacket(data []byte) error {\n\treturn c.handleErrorPacket(data)\n}\n\nfunc (c *Conn) ReadOKPacket() (*Result, error) {\n\treturn c.readOK()\n}\n\nfunc (c *Conn) exec(query string) (*Result, error) {\n\tif err := c.writeCommandStr(COM_QUERY, query); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\treturn c.readResult(false)\n}\n\n// CapabilityString is returning a string with the names of capability flags\n// separated by \"|\". Examples of capability names are CLIENT_DEPRECATE_EOF and CLIENT_PROTOCOL_41.\nfunc (c *Conn) CapabilityString() string {\n\tvar caps []string\n\tcapability := c.capability\n\tfor i := 0; capability != 0; i++ {\n\t\tfield := uint32(1 << i)\n\t\tif capability&field == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tcapability ^= field\n\n\t\tswitch field {\n\t\tcase CLIENT_LONG_PASSWORD:\n\t\t\tcaps = append(caps, \"CLIENT_LONG_PASSWORD\")\n\t\tcase CLIENT_FOUND_ROWS:\n\t\t\tcaps = append(caps, \"CLIENT_FOUND_ROWS\")\n\t\tcase CLIENT_LONG_FLAG:\n\t\t\tcaps = append(caps, \"CLIENT_LONG_FLAG\")\n\t\tcase CLIENT_CONNECT_WITH_DB:\n\t\t\tcaps = append(caps, \"CLIENT_CONNECT_WITH_DB\")\n\t\tcase CLIENT_NO_SCHEMA:\n\t\t\tcaps = append(caps, \"CLIENT_NO_SCHEMA\")\n\t\tcase CLIENT_COMPRESS:\n\t\t\tcaps = append(caps, \"CLIENT_COMPRESS\")\n\t\tcase CLIENT_ODBC:\n\t\t\tcaps = append(caps, \"CLIENT_ODBC\")\n\t\tcase CLIENT_LOCAL_FILES:\n\t\t\tcaps = append(caps, \"CLIENT_LOCAL_FILES\")\n\t\tcase CLIENT_IGNORE_SPACE:\n\t\t\tcaps = append(caps, \"CLIENT_IGNORE_SPACE\")\n\t\tcase CLIENT_PROTOCOL_41:\n\t\t\tcaps = append(caps, \"CLIENT_PROTOCOL_41\")\n\t\tcase CLIENT_INTERACTIVE:\n\t\t\tcaps = append(caps, \"CLIENT_INTERACTIVE\")\n\t\tcase CLIENT_SSL:\n\t\t\tcaps = append(caps, \"CLIENT_SSL\")\n\t\tcase CLIENT_IGNORE_SIGPIPE:\n\t\t\tcaps = append(caps, \"CLIENT_IGNORE_SIGPIPE\")\n\t\tcase CLIENT_TRANSACTIONS:\n\t\t\tcaps = append(caps, \"CLIENT_TRANSACTIONS\")\n\t\tcase CLIENT_RESERVED:\n\t\t\tcaps = append(caps, \"CLIENT_RESERVED\")\n\t\tcase CLIENT_SECURE_CONNECTION:\n\t\t\tcaps = append(caps, \"CLIENT_SECURE_CONNECTION\")\n\t\tcase CLIENT_MULTI_STATEMENTS:\n\t\t\tcaps = append(caps, \"CLIENT_MULTI_STATEMENTS\")\n\t\tcase CLIENT_MULTI_RESULTS:\n\t\t\tcaps = append(caps, \"CLIENT_MULTI_RESULTS\")\n\t\tcase CLIENT_PS_MULTI_RESULTS:\n\t\t\tcaps = append(caps, \"CLIENT_PS_MULTI_RESULTS\")\n\t\tcase CLIENT_PLUGIN_AUTH:\n\t\t\tcaps = append(caps, \"CLIENT_PLUGIN_AUTH\")\n\t\tcase CLIENT_CONNECT_ATTRS:\n\t\t\tcaps = append(caps, \"CLIENT_CONNECT_ATTRS\")\n\t\tcase CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA:\n\t\t\tcaps = append(caps, \"CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA\")\n\t\tcase CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS:\n\t\t\tcaps = append(caps, \"CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS\")\n\t\tcase CLIENT_SESSION_TRACK:\n\t\t\tcaps = append(caps, \"CLIENT_SESSION_TRACK\")\n\t\tcase CLIENT_DEPRECATE_EOF:\n\t\t\tcaps = append(caps, \"CLIENT_DEPRECATE_EOF\")\n\t\tcase CLIENT_OPTIONAL_RESULTSET_METADATA:\n\t\t\tcaps = append(caps, \"CLIENT_OPTIONAL_RESULTSET_METADATA\")\n\t\tcase CLIENT_ZSTD_COMPRESSION_ALGORITHM:\n\t\t\tcaps = append(caps, \"CLIENT_ZSTD_COMPRESSION_ALGORITHM\")\n\t\tcase CLIENT_QUERY_ATTRIBUTES:\n\t\t\tcaps = append(caps, \"CLIENT_QUERY_ATTRIBUTES\")\n\t\tcase MULTI_FACTOR_AUTHENTICATION:\n\t\t\tcaps = append(caps, \"MULTI_FACTOR_AUTHENTICATION\")\n\t\tcase CLIENT_CAPABILITY_EXTENSION:\n\t\t\tcaps = append(caps, \"CLIENT_CAPABILITY_EXTENSION\")\n\t\tcase CLIENT_SSL_VERIFY_SERVER_CERT:\n\t\t\tcaps = append(caps, \"CLIENT_SSL_VERIFY_SERVER_CERT\")\n\t\tcase CLIENT_REMEMBER_OPTIONS:\n\t\t\tcaps = append(caps, \"CLIENT_REMEMBER_OPTIONS\")\n\t\tdefault:\n\t\t\tcaps = append(caps, fmt.Sprintf(\"(%d)\", field))\n\t\t}\n\t}\n\n\treturn strings.Join(caps, \"|\")\n}\n\nfunc (c *Conn) StatusString() string {\n\tvar stats []string\n\tstatus := c.status\n\tfor i := 0; status != 0; i++ {\n\t\tfield := uint16(1 << i)\n\t\tif status&field == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tstatus ^= field\n\n\t\tswitch field {\n\t\tcase SERVER_STATUS_IN_TRANS:\n\t\t\tstats = append(stats, \"SERVER_STATUS_IN_TRANS\")\n\t\tcase SERVER_STATUS_AUTOCOMMIT:\n\t\t\tstats = append(stats, \"SERVER_STATUS_AUTOCOMMIT\")\n\t\tcase SERVER_MORE_RESULTS_EXISTS:\n\t\t\tstats = append(stats, \"SERVER_MORE_RESULTS_EXISTS\")\n\t\tcase SERVER_STATUS_NO_GOOD_INDEX_USED:\n\t\t\tstats = append(stats, \"SERVER_STATUS_NO_GOOD_INDEX_USED\")\n\t\tcase SERVER_STATUS_NO_INDEX_USED:\n\t\t\tstats = append(stats, \"SERVER_STATUS_NO_INDEX_USED\")\n\t\tcase SERVER_STATUS_CURSOR_EXISTS:\n\t\t\tstats = append(stats, \"SERVER_STATUS_CURSOR_EXISTS\")\n\t\tcase SERVER_STATUS_LAST_ROW_SEND:\n\t\t\tstats = append(stats, \"SERVER_STATUS_LAST_ROW_SEND\")\n\t\tcase SERVER_STATUS_DB_DROPPED:\n\t\t\tstats = append(stats, \"SERVER_STATUS_DB_DROPPED\")\n\t\tcase SERVER_STATUS_NO_BACKSLASH_ESCAPED:\n\t\t\tstats = append(stats, \"SERVER_STATUS_NO_BACKSLASH_ESCAPED\")\n\t\tcase SERVER_STATUS_METADATA_CHANGED:\n\t\t\tstats = append(stats, \"SERVER_STATUS_METADATA_CHANGED\")\n\t\tcase SERVER_QUERY_WAS_SLOW:\n\t\t\tstats = append(stats, \"SERVER_QUERY_WAS_SLOW\")\n\t\tcase SERVER_PS_OUT_PARAMS:\n\t\t\tstats = append(stats, \"SERVER_PS_OUT_PARAMS\")\n\t\tdefault:\n\t\t\tstats = append(stats, fmt.Sprintf(\"(%d)\", field))\n\t\t}\n\t}\n\n\treturn strings.Join(stats, \"|\")\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/pool.go",
    "content": "package client\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"math\"\n\t\"math/rand\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/pingcap/errors\"\n)\n\n/*\nPool for efficient reuse of connections.\n\nUsage:\n\tpool := client.NewPool(log.Debugf, 100, 400, 5, `127.0.0.1:3306`, `username`, `userpwd`, `dbname`)\n\t...\n\tconn, _ := pool.GetConn(ctx)\n\tdefer pool.PutConn(conn)\n\tconn.Execute/conn.Begin/etc...\n*/\n\ntype (\n\tTimestamp int64\n\n\tLogFunc func(format string, args ...interface{})\n\n\tPool struct {\n\t\tlogFunc          LogFunc\n\t\tminAlive         int\n\t\tmaxAlive         int\n\t\tmaxIdle          int\n\t\tidleCloseTimeout Timestamp\n\t\tidlePingTimeout  Timestamp\n\t\tconnect          func() (*Conn, error)\n\n\t\tsynchro struct {\n\t\t\tsync.Mutex\n\t\t\tidleConnections []Connection\n\t\t\tstats           ConnectionStats\n\t\t}\n\n\t\treadyConnection chan Connection\n\t\tctx             context.Context\n\t\tcancel          context.CancelFunc\n\t\twg              sync.WaitGroup\n\t}\n\n\tConnectionStats struct {\n\t\t// Uses internally\n\t\tTotalCount int\n\n\t\t// Only for stats\n\t\tIdleCount    int\n\t\tCreatedCount int64\n\t}\n\n\tConnection struct {\n\t\tconn      *Conn\n\t\tlastUseAt Timestamp\n\t}\n)\n\nvar (\n\t// MaxIdleTimeoutWithoutPing - If the connection has been idle for more than this time,\n\t//   then ping will be performed before use to check if it alive\n\tMaxIdleTimeoutWithoutPing = 10 * time.Second\n\n\t// DefaultIdleTimeout - If the connection has been idle for more than this time,\n\t//   we can close it (but we should remember about Pool.minAlive)\n\tDefaultIdleTimeout = 30 * time.Second\n\n\t// MaxNewConnectionAtOnce - If we need to create new connections,\n\t//   then we will create no more than this number of connections at a time.\n\t// This restriction will be ignored on pool initialization.\n\tMaxNewConnectionAtOnce = 5\n)\n\n// NewPoolWithOptions initializes new connection pool and uses params: addr, user, password, dbName and options.\nfunc NewPoolWithOptions(\n\taddr string,\n\tuser string,\n\tpassword string,\n\tdbName string,\n\toptions ...PoolOption,\n) (*Pool, error) {\n\tpo := getDefaultPoolOptions()\n\n\tpo.addr = addr\n\tpo.user = user\n\tpo.password = password\n\tpo.dbName = dbName\n\n\tfor _, o := range options {\n\t\to(&po)\n\t}\n\n\tif po.minAlive > po.maxAlive {\n\t\tpo.minAlive = po.maxAlive\n\t}\n\tif po.maxIdle > po.maxAlive {\n\t\tpo.maxIdle = po.maxAlive\n\t}\n\tif po.maxIdle <= po.minAlive {\n\t\tpo.maxIdle = po.minAlive\n\t}\n\n\tpool := &Pool{\n\t\tlogFunc:  po.logFunc,\n\t\tminAlive: po.minAlive,\n\t\tmaxAlive: po.maxAlive,\n\t\tmaxIdle:  po.maxIdle,\n\n\t\tidleCloseTimeout: Timestamp(math.Ceil(DefaultIdleTimeout.Seconds())),\n\t\tidlePingTimeout:  Timestamp(math.Ceil(MaxIdleTimeoutWithoutPing.Seconds())),\n\n\t\tconnect: func() (*Conn, error) {\n\t\t\treturn Connect(addr, user, password, dbName, po.connOptions...)\n\t\t},\n\n\t\treadyConnection: make(chan Connection),\n\t}\n\n\tpool.ctx, pool.cancel = context.WithCancel(context.Background())\n\n\tpool.synchro.idleConnections = make([]Connection, 0, pool.maxIdle)\n\n\tpool.wg.Add(1)\n\tgo pool.newConnectionProducer()\n\n\tif pool.minAlive > 0 {\n\t\tgo pool.startNewConnections(pool.minAlive)\n\t}\n\n\tpool.wg.Add(1)\n\tgo pool.closeOldIdleConnections()\n\n\tif po.newPoolPingTimeout > 0 {\n\t\tctx, cancel := context.WithTimeout(pool.ctx, po.newPoolPingTimeout)\n\t\terr := pool.checkConnection(ctx)\n\t\tcancel()\n\t\tif err != nil {\n\t\t\tpool.Close()\n\t\t\treturn nil, errors.Errorf(\"checkConnection: %s\", err)\n\t\t}\n\t}\n\n\treturn pool, nil\n}\n\n// NewPool initializes new connection pool and uses params: addr, user, password, dbName and options.\n// minAlive specifies the minimum number of open connections that the pool will try to maintain.\n// maxAlive specifies the maximum number of open connections (for internal reasons,\n// may be greater by 1 inside newConnectionProducer).\n// maxIdle specifies the maximum number of idle connections (see DefaultIdleTimeout).\n//\n// Deprecated: use NewPoolWithOptions\nfunc NewPool(\n\tlogFunc LogFunc,\n\tminAlive int,\n\tmaxAlive int,\n\tmaxIdle int,\n\taddr string,\n\tuser string,\n\tpassword string,\n\tdbName string,\n\toptions ...Option,\n) *Pool {\n\tpool, err := NewPoolWithOptions(\n\t\taddr,\n\t\tuser,\n\t\tpassword,\n\t\tdbName,\n\t\tWithLogFunc(logFunc),\n\t\tWithPoolLimits(minAlive, maxAlive, maxIdle),\n\t\tWithConnOptions(options...),\n\t)\n\tif err != nil {\n\t\tpool.logFunc(`Pool: NewPool: %s`, err.Error())\n\t}\n\n\treturn pool\n}\n\nfunc (pool *Pool) GetStats(stats *ConnectionStats) {\n\tpool.synchro.Lock()\n\n\t*stats = pool.synchro.stats\n\n\tstats.IdleCount = len(pool.synchro.idleConnections)\n\n\tpool.synchro.Unlock()\n}\n\n// GetConn returns connection from the pool or create new\nfunc (pool *Pool) GetConn(ctx context.Context) (*Conn, error) {\n\tfor {\n\t\tif pool.ctx.Err() != nil {\n\t\t\treturn nil, errors.Errorf(\"failed get conn, pool closed\")\n\t\t}\n\t\tconnection, err := pool.getConnection(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// For long time idle connections, we do a ping check\n\t\tif delta := pool.nowTs() - connection.lastUseAt; delta > pool.idlePingTimeout {\n\t\t\tif err := pool.ping(connection.conn); err != nil {\n\t\t\t\tpool.closeConn(connection.conn)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\treturn connection.conn, nil\n\t}\n}\n\n// PutConn returns working connection back to pool\nfunc (pool *Pool) PutConn(conn *Conn) {\n\tpool.putConnection(Connection{\n\t\tconn:      conn,\n\t\tlastUseAt: pool.nowTs(),\n\t})\n}\n\n// DropConn closes the connection without any checks\nfunc (pool *Pool) DropConn(conn *Conn) {\n\tpool.closeConn(conn)\n}\n\nfunc (pool *Pool) putConnection(connection Connection) {\n\tpool.synchro.Lock()\n\tdefer pool.synchro.Unlock()\n\n\t// If someone is already waiting for a connection, then we return it to him\n\tselect {\n\tcase pool.readyConnection <- connection:\n\t\treturn\n\tdefault:\n\t}\n\n\t// Nobody needs this connection\n\n\tpool.putConnectionUnsafe(connection)\n}\n\nfunc (pool *Pool) nowTs() Timestamp {\n\treturn Timestamp(utils.Now().Unix())\n}\n\nfunc (pool *Pool) getConnection(ctx context.Context) (Connection, error) {\n\tpool.synchro.Lock()\n\n\tconnection := pool.getIdleConnectionUnsafe()\n\tif connection.conn != nil {\n\t\tpool.synchro.Unlock()\n\t\treturn connection, nil\n\t}\n\tpool.synchro.Unlock()\n\n\t// No idle connections are available\n\n\tselect {\n\tcase connection := <-pool.readyConnection:\n\t\treturn connection, nil\n\n\tcase <-ctx.Done():\n\t\treturn Connection{}, ctx.Err()\n\t}\n}\n\nfunc (pool *Pool) putConnectionUnsafe(connection Connection) {\n\tif len(pool.synchro.idleConnections) == cap(pool.synchro.idleConnections) {\n\t\tpool.synchro.stats.TotalCount--\n\t\t_ = connection.conn.Close() // Could it be more effective to close older connections?\n\t} else {\n\t\tpool.synchro.idleConnections = append(pool.synchro.idleConnections, connection)\n\t}\n}\n\nfunc (pool *Pool) newConnectionProducer() {\n\tdefer pool.wg.Done()\n\n\tvar connection Connection\n\tvar err error\n\n\tfor {\n\t\tconnection.conn = nil\n\n\t\tpool.synchro.Lock()\n\n\t\tconnection = pool.getIdleConnectionUnsafe()\n\t\tif connection.conn == nil {\n\t\t\tif pool.synchro.stats.TotalCount >= pool.maxAlive {\n\t\t\t\t// Can't create more connections\n\t\t\t\tpool.synchro.Unlock()\n\t\t\t\ttime.Sleep(10 * time.Millisecond)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpool.synchro.stats.TotalCount++ // \"Reserving\" new connection\n\t\t}\n\n\t\tpool.synchro.Unlock()\n\n\t\tif connection.conn == nil {\n\t\t\tconnection, err = pool.createNewConnection()\n\t\t\tif err != nil {\n\t\t\t\tpool.synchro.Lock()\n\t\t\t\tpool.synchro.stats.TotalCount-- // Bad luck, should try again\n\t\t\t\tpool.synchro.Unlock()\n\n\t\t\t\tpool.logFunc(\"Cannot establish new db connection: %s\", err.Error())\n\n\t\t\t\ttimer := time.NewTimer(\n\t\t\t\t\ttime.Duration(10+rand.Intn(90)) * time.Millisecond,\n\t\t\t\t)\n\n\t\t\t\tselect {\n\t\t\t\tcase <-timer.C:\n\t\t\t\t\tcontinue\n\t\t\t\tcase <-pool.ctx.Done():\n\t\t\t\t\tif !timer.Stop() {\n\t\t\t\t\t\t<-timer.C\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tselect {\n\t\tcase pool.readyConnection <- connection:\n\t\tcase <-pool.ctx.Done():\n\t\t\tpool.closeConn(connection.conn)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (pool *Pool) createNewConnection() (Connection, error) {\n\tvar connection Connection\n\tvar err error\n\n\tconnection.conn, err = pool.connect()\n\tif err != nil {\n\t\treturn Connection{}, errors.Errorf(`Could not connect to mysql: %s`, err)\n\t}\n\tconnection.lastUseAt = pool.nowTs()\n\n\tpool.synchro.Lock()\n\tpool.synchro.stats.CreatedCount++\n\tpool.synchro.Unlock()\n\n\treturn connection, nil\n}\n\nfunc (pool *Pool) getIdleConnectionUnsafe() Connection {\n\tcnt := len(pool.synchro.idleConnections)\n\tif cnt == 0 {\n\t\treturn Connection{}\n\t}\n\n\tlast := cnt - 1\n\tconnection := pool.synchro.idleConnections[last]\n\tpool.synchro.idleConnections[last].conn = nil\n\tpool.synchro.idleConnections = pool.synchro.idleConnections[:last]\n\n\treturn connection\n}\n\nfunc (pool *Pool) closeOldIdleConnections() {\n\tdefer pool.wg.Done()\n\n\tvar toPing []Connection\n\n\tticker := time.NewTicker(5 * time.Second)\n\n\tfor {\n\t\tselect {\n\t\tcase <-pool.ctx.Done():\n\t\t\treturn\n\t\tcase <-ticker.C:\n\t\t\ttoPing = pool.getOldIdleConnections(toPing[:0])\n\t\t\tif len(toPing) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpool.recheckConnections(toPing)\n\n\t\t\tif !pool.spawnConnectionsIfNeeded() {\n\t\t\t\tpool.closeIdleConnectionsIfCan()\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (pool *Pool) getOldIdleConnections(dst []Connection) []Connection {\n\tdst = dst[:0]\n\n\tpool.synchro.Lock()\n\n\tsynchro := &pool.synchro\n\n\tidleCnt := len(synchro.idleConnections)\n\tcheckBefore := pool.nowTs() - pool.idlePingTimeout\n\n\tfor i := idleCnt - 1; i >= 0; i-- {\n\t\tif synchro.idleConnections[i].lastUseAt > checkBefore {\n\t\t\tcontinue\n\t\t}\n\n\t\tdst = append(dst, synchro.idleConnections[i])\n\n\t\tlast := idleCnt - 1\n\t\tif i < last {\n\t\t\t// Removing an item from the middle of a slice\n\t\t\tsynchro.idleConnections[i], synchro.idleConnections[last] = synchro.idleConnections[last], synchro.idleConnections[i]\n\t\t}\n\n\t\tsynchro.idleConnections[last].conn = nil\n\t\tsynchro.idleConnections = synchro.idleConnections[:last]\n\t\tidleCnt--\n\t}\n\n\tpool.synchro.Unlock()\n\n\treturn dst\n}\n\nfunc (pool *Pool) recheckConnections(connections []Connection) {\n\tconst workerCnt = 2 // Heuristic :)\n\n\tqueue := make(chan Connection, len(connections))\n\tfor _, connection := range connections {\n\t\tqueue <- connection\n\t}\n\tclose(queue)\n\n\tvar wg sync.WaitGroup\n\twg.Add(workerCnt)\n\tfor worker := 0; worker < workerCnt; worker++ {\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tfor connection := range queue {\n\t\t\t\tif err := pool.ping(connection.conn); err != nil {\n\t\t\t\t\tpool.closeConn(connection.conn)\n\t\t\t\t} else {\n\t\t\t\t\tpool.putConnection(connection)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t}\n\n\twg.Wait()\n}\n\n// spawnConnectionsIfNeeded creates new connections if there are not enough of them and returns true in this case\nfunc (pool *Pool) spawnConnectionsIfNeeded() bool {\n\tpool.synchro.Lock()\n\ttotalCount := pool.synchro.stats.TotalCount\n\tidleCount := len(pool.synchro.idleConnections)\n\tneedSpanNew := pool.minAlive - totalCount\n\tpool.synchro.Unlock()\n\n\tif needSpanNew <= 0 {\n\t\treturn false\n\t}\n\n\t// Не хватает соединений, нужно создать еще\n\n\tif needSpanNew > MaxNewConnectionAtOnce {\n\t\tneedSpanNew = MaxNewConnectionAtOnce\n\t}\n\n\tpool.logFunc(`Pool: Setup %d new connections (total: %d idle: %d)...`, needSpanNew, totalCount, idleCount)\n\tpool.startNewConnections(needSpanNew)\n\n\treturn true\n}\n\nfunc (pool *Pool) closeIdleConnectionsIfCan() {\n\tpool.synchro.Lock()\n\n\tcanCloseCnt := pool.synchro.stats.TotalCount - pool.minAlive\n\tcanCloseCnt-- // -1 to account for an open but unused connection (pool.readyConnection <- connection in newConnectionProducer)\n\n\tidleCnt := len(pool.synchro.idleConnections)\n\n\tinFly := pool.synchro.stats.TotalCount - idleCnt\n\n\t// We can close no more than 10% connections at a time, but at least 1, if possible\n\tidleCanCloseCnt := idleCnt / 10\n\tif idleCanCloseCnt == 0 {\n\t\tidleCanCloseCnt = 1\n\t}\n\tif canCloseCnt > idleCanCloseCnt {\n\t\tcanCloseCnt = idleCanCloseCnt\n\t}\n\tif canCloseCnt <= 0 {\n\t\tpool.synchro.Unlock()\n\t\treturn\n\t}\n\n\tcloseFromIdx := idleCnt - canCloseCnt\n\tif closeFromIdx < 0 {\n\t\t// If there are enough requests in the \"flight\" now, then we can close all unnecessary\n\t\tcloseFromIdx = 0\n\t}\n\n\ttoClose := append([]Connection{}, pool.synchro.idleConnections[closeFromIdx:]...)\n\n\tfor i := closeFromIdx; i < idleCnt; i++ {\n\t\tpool.synchro.idleConnections[i].conn = nil\n\t}\n\tpool.synchro.idleConnections = pool.synchro.idleConnections[:closeFromIdx]\n\n\tpool.synchro.Unlock()\n\n\tpool.logFunc(`Pool: Close %d idle connections (in fly %d)`, len(toClose), inFly)\n\tfor _, connection := range toClose {\n\t\tpool.closeConn(connection.conn)\n\t}\n}\n\nfunc (pool *Pool) closeConn(conn *Conn) {\n\tpool.synchro.Lock()\n\tpool.synchro.stats.TotalCount--\n\tpool.synchro.Unlock()\n\n\t_ = conn.Close() // Closing is not an instant action, so do it outside the lock\n}\n\nfunc (pool *Pool) startNewConnections(count int) {\n\tpool.logFunc(`Pool: Setup %d new connections (minimal pool size)...`, count)\n\n\tconnections := make([]Connection, 0, count)\n\tfor i := 0; i < count; i++ {\n\t\tif conn, err := pool.createNewConnection(); err == nil {\n\t\t\tpool.synchro.Lock()\n\t\t\tpool.synchro.stats.TotalCount++\n\t\t\tpool.synchro.Unlock()\n\t\t\tconnections = append(connections, conn)\n\t\t} else {\n\t\t\tpool.logFunc(`Pool: createNewConnection: %s`, err)\n\t\t}\n\t}\n\n\tpool.synchro.Lock()\n\tfor _, connection := range connections {\n\t\tpool.putConnectionUnsafe(connection)\n\t}\n\tpool.synchro.Unlock()\n}\n\nfunc (pool *Pool) ping(conn *Conn) error {\n\tdeadline := utils.Now().Add(100 * time.Millisecond)\n\t_ = conn.SetDeadline(deadline)\n\terr := conn.Ping()\n\tif err != nil {\n\t\tpool.logFunc(`Pool: ping query fail: %s`, err.Error())\n\t} else {\n\t\t_ = conn.SetDeadline(time.Time{})\n\t}\n\treturn err\n}\n\n// Close only shutdown idle connections. we couldn't control the connection which not in the pool.\n// So before call Close, Call PutConn to put all connections that in use back to connection pool first.\nfunc (pool *Pool) Close() {\n\tpool.cancel()\n\t//wait newConnectionProducer exit.\n\tpool.wg.Wait()\n\t//close idle connections\n\tpool.synchro.Lock()\n\tfor _, connection := range pool.synchro.idleConnections {\n\t\tpool.synchro.stats.TotalCount--\n\t\t_ = connection.conn.Close()\n\t}\n\tpool.synchro.idleConnections = nil\n\tpool.synchro.Unlock()\n}\n\n// checkConnection tries to connect and ping DB server\nfunc (pool *Pool) checkConnection(ctx context.Context) error {\n\terrChan := make(chan error, 1)\n\n\tgo func() {\n\t\tconn, err := pool.connect()\n\t\tif err == nil {\n\t\t\terr = conn.Ping()\n\t\t\t_ = conn.Close()\n\t\t}\n\t\terrChan <- err\n\t}()\n\n\tselect {\n\tcase err := <-errChan:\n\t\treturn err\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\t}\n}\n\n// getDefaultPoolOptions returns pool config for low load services\nfunc getDefaultPoolOptions() poolOptions {\n\treturn poolOptions{\n\t\tlogFunc:  log.Printf,\n\t\tminAlive: 1,\n\t\tmaxAlive: 10,\n\t\tmaxIdle:  2,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/pool_options.go",
    "content": "package client\n\nimport (\n\t\"time\"\n)\n\ntype (\n\tpoolOptions struct {\n\t\tlogFunc LogFunc\n\n\t\tminAlive int\n\t\tmaxAlive int\n\t\tmaxIdle  int\n\n\t\taddr     string\n\t\tuser     string\n\t\tpassword string\n\t\tdbName   string\n\n\t\tconnOptions []Option\n\n\t\tnewPoolPingTimeout time.Duration\n\t}\n)\n\ntype (\n\tPoolOption func(o *poolOptions)\n)\n\n// WithPoolLimits sets pool limits:\n//   - minAlive specifies the minimum number of open connections that the pool will try to maintain.\n//   - maxAlive specifies the maximum number of open connections (for internal reasons,\n//     may be greater by 1 inside newConnectionProducer).\n//   - maxIdle specifies the maximum number of idle connections (see DefaultIdleTimeout).\nfunc WithPoolLimits(minAlive, maxAlive, maxIdle int) PoolOption {\n\treturn func(o *poolOptions) {\n\t\to.minAlive = minAlive\n\t\to.maxAlive = maxAlive\n\t\to.maxIdle = maxIdle\n\t}\n}\n\nfunc WithLogFunc(f LogFunc) PoolOption {\n\treturn func(o *poolOptions) {\n\t\to.logFunc = f\n\t}\n}\n\nfunc WithConnOptions(options ...Option) PoolOption {\n\treturn func(o *poolOptions) {\n\t\to.connOptions = append(o.connOptions, options...)\n\t}\n}\n\n// WithNewPoolPingTimeout enables connect & ping to DB during the pool initialization\nfunc WithNewPoolPingTimeout(timeout time.Duration) PoolOption {\n\treturn func(o *poolOptions) {\n\t\to.newPoolPingTimeout = timeout\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/req.go",
    "content": "package client\n\nimport (\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\nfunc (c *Conn) writeCommand(command byte) error {\n\tc.ResetSequence()\n\n\treturn c.WritePacket([]byte{\n\t\t0x01, //1 bytes long\n\t\t0x00,\n\t\t0x00,\n\t\t0x00, //sequence\n\t\tcommand,\n\t})\n}\n\nfunc (c *Conn) writeCommandBuf(command byte, arg []byte) error {\n\tc.ResetSequence()\n\n\tlength := len(arg) + 1\n\tdata := utils.ByteSliceGet(length + 4)\n\tdata.B[4] = command\n\n\tcopy(data.B[5:], arg)\n\n\terr := c.WritePacket(data.B)\n\n\tutils.ByteSlicePut(data)\n\n\treturn err\n}\n\nfunc (c *Conn) writeCommandStr(command byte, arg string) error {\n\treturn c.writeCommandBuf(command, utils.StringToByteSlice(arg))\n}\n\nfunc (c *Conn) writeCommandUint32(command byte, arg uint32) error {\n\tc.ResetSequence()\n\n\tbuf := utils.ByteSliceGet(9)\n\n\tbuf.B[0] = 0x05 //5 bytes long\n\tbuf.B[1] = 0x00\n\tbuf.B[2] = 0x00\n\tbuf.B[3] = 0x00 //sequence\n\n\tbuf.B[4] = command\n\n\tbuf.B[5] = byte(arg)\n\tbuf.B[6] = byte(arg >> 8)\n\tbuf.B[7] = byte(arg >> 16)\n\tbuf.B[8] = byte(arg >> 24)\n\n\terr := c.WritePacket(buf.B)\n\tutils.ByteSlicePut(buf)\n\treturn err\n}\n\nfunc (c *Conn) writeCommandStrStr(command byte, arg1 string, arg2 string) error {\n\tc.ResetSequence()\n\n\tdata := make([]byte, 4, 6+len(arg1)+len(arg2))\n\n\tdata = append(data, command)\n\tdata = append(data, arg1...)\n\tdata = append(data, 0)\n\tdata = append(data, arg2...)\n\n\treturn c.WritePacket(data)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/resp.go",
    "content": "package client\n\nimport (\n\t\"bytes\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"encoding/binary\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\n\t\"github.com/pingcap/errors\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\nfunc (c *Conn) readUntilEOF() (err error) {\n\tvar data []byte\n\n\tfor {\n\t\tdata, err = c.ReadPacket()\n\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\t// EOF Packet\n\t\tif c.isEOFPacket(data) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (c *Conn) isEOFPacket(data []byte) bool {\n\treturn data[0] == EOF_HEADER && len(data) <= 5\n}\n\nfunc (c *Conn) handleOKPacket(data []byte) (*Result, error) {\n\tvar n int\n\tvar pos = 1\n\n\tr := NewResultReserveResultset(0)\n\n\tr.AffectedRows, _, n = LengthEncodedInt(data[pos:])\n\tpos += n\n\tr.InsertId, _, n = LengthEncodedInt(data[pos:])\n\tpos += n\n\n\tif c.capability&CLIENT_PROTOCOL_41 > 0 {\n\t\tr.Status = binary.LittleEndian.Uint16(data[pos:])\n\t\tc.status = r.Status\n\t\tpos += 2\n\n\t\t//todo:strict_mode, check warnings as error\n\t\tr.Warnings = binary.LittleEndian.Uint16(data[pos:])\n\t\t// pos += 2\n\t} else if c.capability&CLIENT_TRANSACTIONS > 0 {\n\t\tr.Status = binary.LittleEndian.Uint16(data[pos:])\n\t\tc.status = r.Status\n\t\t// pos += 2\n\t}\n\n\t// new ok package will check CLIENT_SESSION_TRACK too, but I don't support it now.\n\n\t// skip info\n\treturn r, nil\n}\n\nfunc (c *Conn) handleErrorPacket(data []byte) error {\n\te := new(MyError)\n\n\tvar pos = 1\n\n\te.Code = binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\tif c.capability&CLIENT_PROTOCOL_41 > 0 {\n\t\t// skip '#'\n\t\tpos++\n\t\te.State = utils.ByteSliceToString(data[pos : pos+5])\n\t\tpos += 5\n\t}\n\n\te.Message = utils.ByteSliceToString(data[pos:])\n\n\treturn e\n}\n\nfunc (c *Conn) handleAuthResult() error {\n\tdata, switchToPlugin, err := c.readAuthResult()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"readAuthResult: %w\", err)\n\t}\n\t// handle auth switch, only support 'sha256_password', and 'caching_sha2_password'\n\tif switchToPlugin != \"\" {\n\t\t// fmt.Printf(\"now switching auth plugin to '%s'\\n\", switchToPlugin)\n\t\tif data == nil {\n\t\t\tdata = c.salt\n\t\t} else {\n\t\t\tcopy(c.salt, data)\n\t\t}\n\t\tc.authPluginName = switchToPlugin\n\t\tauth, addNull, err := c.genAuthResponse(data)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err = c.WriteAuthSwitchPacket(auth, addNull); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Read Result Packet\n\t\tdata, switchToPlugin, err = c.readAuthResult()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Do not allow to change the auth plugin more than once\n\t\tif switchToPlugin != \"\" {\n\t\t\treturn errors.Errorf(\"can not switch auth plugin more than once\")\n\t\t}\n\t}\n\n\t// handle caching_sha2_password\n\tif c.authPluginName == AUTH_CACHING_SHA2_PASSWORD {\n\t\tif data == nil {\n\t\t\treturn nil // auth already succeeded\n\t\t}\n\t\tif data[0] == CACHE_SHA2_FAST_AUTH {\n\t\t\t_, err = c.readOK()\n\t\t\treturn err\n\t\t} else if data[0] == CACHE_SHA2_FULL_AUTH {\n\t\t\t// need full authentication\n\t\t\tif c.tlsConfig != nil || c.proto == \"unix\" {\n\t\t\t\tif err = c.WriteClearAuthPacket(c.password); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err = c.WritePublicKeyAuthPacket(c.password, c.salt); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\t_, err = c.readOK()\n\t\t\treturn err\n\t\t} else {\n\t\t\treturn errors.Errorf(\"invalid packet %x\", data[0])\n\t\t}\n\t} else if c.authPluginName == AUTH_SHA256_PASSWORD {\n\t\tif len(data) == 0 {\n\t\t\treturn nil // auth already succeeded\n\t\t}\n\t\tblock, _ := pem.Decode(data)\n\t\tpub, err := x509.ParsePKIXPublicKey(block.Bytes)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// send encrypted password\n\t\terr = c.WriteEncryptedPassword(c.password, c.salt, pub.(*rsa.PublicKey))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = c.readOK()\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (c *Conn) readAuthResult() ([]byte, string, error) {\n\tdata, err := c.ReadPacket()\n\tif err != nil {\n\t\treturn nil, \"\", fmt.Errorf(\"ReadPacket: %w\", err)\n\t}\n\n\t// see: https://insidemysql.com/preparing-your-community-connector-for-mysql-8-part-2-sha256/\n\t// packet indicator\n\tswitch data[0] {\n\tcase OK_HEADER:\n\t\t_, err := c.handleOKPacket(data)\n\t\treturn nil, \"\", err\n\n\tcase MORE_DATE_HEADER:\n\t\treturn data[1:], \"\", err\n\n\tcase EOF_HEADER:\n\t\t// server wants to switch auth\n\t\tif len(data) < 1 {\n\t\t\t// https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::OldAuthSwitchRequest\n\t\t\treturn nil, AUTH_MYSQL_OLD_PASSWORD, nil\n\t\t}\n\t\tpluginEndIndex := bytes.IndexByte(data, 0x00)\n\t\tif pluginEndIndex < 0 {\n\t\t\treturn nil, \"\", errors.New(\"invalid packet\")\n\t\t}\n\t\tplugin := string(data[1:pluginEndIndex])\n\t\tauthData := data[pluginEndIndex+1:]\n\t\treturn authData, plugin, nil\n\n\tdefault: // Error otherwise\n\t\treturn nil, \"\", c.handleErrorPacket(data)\n\t}\n}\n\nfunc (c *Conn) readOK() (*Result, error) {\n\tdata, err := c.ReadPacket()\n\tif err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tif data[0] == OK_HEADER {\n\t\treturn c.handleOKPacket(data)\n\t} else if data[0] == ERR_HEADER {\n\t\treturn nil, c.handleErrorPacket(data)\n\t} else {\n\t\treturn nil, errors.New(\"invalid ok packet\")\n\t}\n}\n\nfunc (c *Conn) readResult(binary bool) (*Result, error) {\n\tbs := utils.ByteSliceGet(16)\n\tdefer utils.ByteSlicePut(bs)\n\tvar err error\n\tbs.B, err = c.ReadPacketReuseMem(bs.B[:0])\n\tif err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tswitch bs.B[0] {\n\tcase OK_HEADER:\n\t\treturn c.handleOKPacket(bs.B)\n\tcase ERR_HEADER:\n\t\treturn nil, c.handleErrorPacket(bytes.Repeat(bs.B, 1))\n\tcase LocalInFile_HEADER:\n\t\treturn nil, ErrMalformPacket\n\tdefault:\n\t\treturn c.readResultset(bs.B, binary)\n\t}\n}\n\nfunc (c *Conn) readResultStreaming(binary bool, result *Result, perRowCb SelectPerRowCallback, perResCb SelectPerResultCallback) error {\n\tbs := utils.ByteSliceGet(16)\n\tdefer utils.ByteSlicePut(bs)\n\tvar err error\n\tbs.B, err = c.ReadPacketReuseMem(bs.B[:0])\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tswitch bs.B[0] {\n\tcase OK_HEADER:\n\t\t// https://dev.mysql.com/doc/internals/en/com-query-response.html\n\t\t// 14.6.4.1 COM_QUERY Response\n\t\t// If the number of columns in the resultset is 0, this is a OK_Packet.\n\n\t\tokResult, err := c.handleOKPacket(bs.B)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\n\t\tresult.Status = okResult.Status\n\t\tresult.AffectedRows = okResult.AffectedRows\n\t\tresult.InsertId = okResult.InsertId\n\t\tresult.Warnings = okResult.Warnings\n\t\tif result.Resultset == nil {\n\t\t\tresult.Resultset = NewResultset(0)\n\t\t} else {\n\t\t\tresult.Reset(0)\n\t\t}\n\t\treturn nil\n\tcase ERR_HEADER:\n\t\treturn c.handleErrorPacket(bytes.Repeat(bs.B, 1))\n\tcase LocalInFile_HEADER:\n\t\treturn ErrMalformPacket\n\tdefault:\n\t\treturn c.readResultsetStreaming(bs.B, binary, result, perRowCb, perResCb)\n\t}\n}\n\nfunc (c *Conn) readResultset(data []byte, binary bool) (*Result, error) {\n\t// column count\n\tcount, _, n := LengthEncodedInt(data)\n\n\tif n-len(data) != 0 {\n\t\treturn nil, ErrMalformPacket\n\t}\n\n\tresult := NewResultReserveResultset(int(count))\n\n\tif err := c.readResultColumns(result); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tif err := c.readResultRows(result, binary); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\treturn result, nil\n}\n\nfunc (c *Conn) readResultsetStreaming(data []byte, binary bool, result *Result, perRowCb SelectPerRowCallback, perResCb SelectPerResultCallback) error {\n\tcolumnCount, _, n := LengthEncodedInt(data)\n\n\tif n-len(data) != 0 {\n\t\treturn ErrMalformPacket\n\t}\n\n\tif result.Resultset == nil {\n\t\tresult.Resultset = NewResultset(int(columnCount))\n\t} else {\n\t\t// Reuse memory if can\n\t\tresult.Reset(int(columnCount))\n\t}\n\n\t// this is a streaming resultset\n\tresult.Resultset.Streaming = StreamingSelect\n\n\tif err := c.readResultColumns(result); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif perResCb != nil {\n\t\tif err := perResCb(result); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := c.readResultRowsStreaming(result, binary, perRowCb); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\t// this resultset is done streaming\n\tresult.Resultset.StreamingDone = true\n\n\treturn nil\n}\n\nfunc (c *Conn) readResultColumns(result *Result) (err error) {\n\tvar i = 0\n\tvar data []byte\n\n\tfor {\n\t\trawPkgLen := len(result.RawPkg)\n\t\tresult.RawPkg, err = c.ReadPacketReuseMem(result.RawPkg)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdata = result.RawPkg[rawPkgLen:]\n\n\t\t// EOF Packet\n\t\tif c.isEOFPacket(data) {\n\t\t\tif c.capability&CLIENT_PROTOCOL_41 > 0 {\n\t\t\t\tresult.Warnings = binary.LittleEndian.Uint16(data[1:])\n\t\t\t\t// todo add strict_mode, warning will be treat as error\n\t\t\t\tresult.Status = binary.LittleEndian.Uint16(data[3:])\n\t\t\t\tc.status = result.Status\n\t\t\t}\n\n\t\t\tif i != len(result.Fields) {\n\t\t\t\terr = ErrMalformPacket\n\t\t\t}\n\n\t\t\treturn err\n\t\t}\n\n\t\tif result.Fields[i] == nil {\n\t\t\tresult.Fields[i] = &Field{}\n\t\t}\n\t\terr = result.Fields[i].Parse(data)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tresult.FieldNames[utils.ByteSliceToString(result.Fields[i].Name)] = i\n\n\t\ti++\n\t}\n}\n\nfunc (c *Conn) readResultRows(result *Result, isBinary bool) (err error) {\n\tvar data []byte\n\n\tfor {\n\t\trawPkgLen := len(result.RawPkg)\n\t\tresult.RawPkg, err = c.ReadPacketReuseMem(result.RawPkg)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdata = result.RawPkg[rawPkgLen:]\n\n\t\t// EOF Packet\n\t\tif c.isEOFPacket(data) {\n\t\t\tif c.capability&CLIENT_PROTOCOL_41 > 0 {\n\t\t\t\tresult.Warnings = binary.LittleEndian.Uint16(data[1:])\n\t\t\t\t// todo add strict_mode, warning will be treat as error\n\t\t\t\tresult.Status = binary.LittleEndian.Uint16(data[3:])\n\t\t\t\tc.status = result.Status\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\n\t\tif data[0] == ERR_HEADER {\n\t\t\treturn c.handleErrorPacket(data)\n\t\t}\n\n\t\tresult.RowDatas = append(result.RowDatas, data)\n\t}\n\n\tif cap(result.Values) < len(result.RowDatas) {\n\t\tresult.Values = make([][]FieldValue, len(result.RowDatas))\n\t} else {\n\t\tresult.Values = result.Values[:len(result.RowDatas)]\n\t}\n\n\tfor i := range result.Values {\n\t\tresult.Values[i], err = result.RowDatas[i].Parse(result.Fields, isBinary, result.Values[i])\n\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (c *Conn) readResultRowsStreaming(result *Result, isBinary bool, perRowCb SelectPerRowCallback) (err error) {\n\tvar (\n\t\tdata []byte\n\t\trow  []FieldValue\n\t)\n\n\tfor {\n\t\tdata, err = c.ReadPacketReuseMem(data[:0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// EOF Packet\n\t\tif c.isEOFPacket(data) {\n\t\t\tif c.capability&CLIENT_PROTOCOL_41 > 0 {\n\t\t\t\tresult.Warnings = binary.LittleEndian.Uint16(data[1:])\n\t\t\t\t// todo add strict_mode, warning will be treat as error\n\t\t\t\tresult.Status = binary.LittleEndian.Uint16(data[3:])\n\t\t\t\tc.status = result.Status\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\n\t\tif data[0] == ERR_HEADER {\n\t\t\treturn c.handleErrorPacket(data)\n\t\t}\n\n\t\t// Parse this row\n\t\trow, err = RowData(data).Parse(result.Fields, isBinary, row)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\n\t\t// Send the row to \"userland\" code\n\t\terr = perRowCb(row)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/stmt.go",
    "content": "package client\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/pingcap/errors\"\n)\n\ntype Stmt struct {\n\tconn *Conn\n\tid   uint32\n\n\tparams   int\n\tcolumns  int\n\twarnings int\n}\n\nfunc (s *Stmt) ParamNum() int {\n\treturn s.params\n}\n\nfunc (s *Stmt) ColumnNum() int {\n\treturn s.columns\n}\n\nfunc (s *Stmt) WarningsNum() int {\n\treturn s.warnings\n}\n\nfunc (s *Stmt) Execute(args ...interface{}) (*Result, error) {\n\tif err := s.write(args...); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\treturn s.conn.readResult(true)\n}\n\nfunc (s *Stmt) ExecuteSelectStreaming(result *Result, perRowCb SelectPerRowCallback, perResCb SelectPerResultCallback, args ...interface{}) error {\n\tif err := s.write(args...); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn s.conn.readResultStreaming(true, result, perRowCb, perResCb)\n}\n\nfunc (s *Stmt) Close() error {\n\tif err := s.conn.writeCommandUint32(COM_STMT_CLOSE, s.id); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn nil\n}\n\nfunc (s *Stmt) write(args ...interface{}) error {\n\tparamsNum := s.params\n\n\tif len(args) != paramsNum {\n\t\treturn fmt.Errorf(\"argument mismatch, need %d but got %d\", s.params, len(args))\n\t}\n\n\tparamTypes := make([]byte, paramsNum<<1)\n\tparamValues := make([][]byte, paramsNum)\n\n\t//NULL-bitmap, length: (num-params+7)\n\tnullBitmap := make([]byte, (paramsNum+7)>>3)\n\n\tlength := 1 + 4 + 1 + 4 + ((paramsNum + 7) >> 3) + 1 + (paramsNum << 1)\n\n\tvar newParamBoundFlag byte = 0\n\n\tfor i := range args {\n\t\tif args[i] == nil {\n\t\t\tnullBitmap[i/8] |= 1 << (uint(i) % 8)\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_NULL\n\t\t\tcontinue\n\t\t}\n\n\t\tnewParamBoundFlag = 1\n\n\t\tswitch v := args[i].(type) {\n\t\tcase int8:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_TINY\n\t\t\tparamValues[i] = []byte{byte(v)}\n\t\tcase int16:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_SHORT\n\t\t\tparamValues[i] = Uint16ToBytes(uint16(v))\n\t\tcase int32:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_LONG\n\t\t\tparamValues[i] = Uint32ToBytes(uint32(v))\n\t\tcase int:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_LONGLONG\n\t\t\tparamValues[i] = Uint64ToBytes(uint64(v))\n\t\tcase int64:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_LONGLONG\n\t\t\tparamValues[i] = Uint64ToBytes(uint64(v))\n\t\tcase uint8:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_TINY\n\t\t\tparamTypes[(i<<1)+1] = 0x80\n\t\t\tparamValues[i] = []byte{v}\n\t\tcase uint16:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_SHORT\n\t\t\tparamTypes[(i<<1)+1] = 0x80\n\t\t\tparamValues[i] = Uint16ToBytes(v)\n\t\tcase uint32:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_LONG\n\t\t\tparamTypes[(i<<1)+1] = 0x80\n\t\t\tparamValues[i] = Uint32ToBytes(v)\n\t\tcase uint:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_LONGLONG\n\t\t\tparamTypes[(i<<1)+1] = 0x80\n\t\t\tparamValues[i] = Uint64ToBytes(uint64(v))\n\t\tcase uint64:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_LONGLONG\n\t\t\tparamTypes[(i<<1)+1] = 0x80\n\t\t\tparamValues[i] = Uint64ToBytes(v)\n\t\tcase bool:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_TINY\n\t\t\tif v {\n\t\t\t\tparamValues[i] = []byte{1}\n\t\t\t} else {\n\t\t\t\tparamValues[i] = []byte{0}\n\t\t\t}\n\t\tcase float32:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_FLOAT\n\t\t\tparamValues[i] = Uint32ToBytes(math.Float32bits(v))\n\t\tcase float64:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_DOUBLE\n\t\t\tparamValues[i] = Uint64ToBytes(math.Float64bits(v))\n\t\tcase string:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_STRING\n\t\t\tparamValues[i] = append(PutLengthEncodedInt(uint64(len(v))), v...)\n\t\tcase []byte:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_STRING\n\t\t\tparamValues[i] = append(PutLengthEncodedInt(uint64(len(v))), v...)\n\t\tcase json.RawMessage:\n\t\t\tparamTypes[i<<1] = MYSQL_TYPE_STRING\n\t\t\tparamValues[i] = append(PutLengthEncodedInt(uint64(len(v))), v...)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"invalid argument type %T\", args[i])\n\t\t}\n\n\t\tlength += len(paramValues[i])\n\t}\n\n\tdata := utils.BytesBufferGet()\n\tdefer func() {\n\t\tutils.BytesBufferPut(data)\n\t}()\n\tif data.Len() < length+4 {\n\t\tdata.Grow(4 + length)\n\t}\n\n\tdata.Write([]byte{0, 0, 0, 0})\n\tdata.WriteByte(COM_STMT_EXECUTE)\n\tdata.Write([]byte{byte(s.id), byte(s.id >> 8), byte(s.id >> 16), byte(s.id >> 24)})\n\n\t//flag: CURSOR_TYPE_NO_CURSOR\n\tdata.WriteByte(0x00)\n\n\t//iteration-count, always 1\n\tdata.Write([]byte{1, 0, 0, 0})\n\n\tif s.params > 0 {\n\t\tdata.Write(nullBitmap)\n\n\t\t//new-params-bound-flag\n\t\tdata.WriteByte(newParamBoundFlag)\n\n\t\tif newParamBoundFlag == 1 {\n\t\t\t//type of each parameter, length: num-params * 2\n\t\t\tdata.Write(paramTypes)\n\n\t\t\t//value of each parameter\n\t\t\tfor _, v := range paramValues {\n\t\t\t\tdata.Write(v)\n\t\t\t}\n\t\t}\n\t}\n\n\ts.conn.ResetSequence()\n\n\treturn s.conn.WritePacket(data.Bytes())\n}\n\nfunc (c *Conn) Prepare(query string) (*Stmt, error) {\n\tif err := c.writeCommandStr(COM_STMT_PREPARE, query); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tdata, err := c.ReadPacket()\n\tif err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tif data[0] == ERR_HEADER {\n\t\treturn nil, c.handleErrorPacket(data)\n\t} else if data[0] != OK_HEADER {\n\t\treturn nil, ErrMalformPacket\n\t}\n\n\ts := new(Stmt)\n\ts.conn = c\n\n\tpos := 1\n\n\t//for statement id\n\ts.id = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\t//number columns\n\ts.columns = int(binary.LittleEndian.Uint16(data[pos:]))\n\tpos += 2\n\n\t//number params\n\ts.params = int(binary.LittleEndian.Uint16(data[pos:]))\n\tpos += 2\n\n\t//warnings\n\ts.warnings = int(binary.LittleEndian.Uint16(data[pos:]))\n\t// pos += 2\n\n\tif s.params > 0 {\n\t\tif err := s.conn.readUntilEOF(); err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t}\n\t}\n\n\tif s.columns > 0 {\n\t\tif err := s.conn.readUntilEOF(); err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t}\n\t}\n\n\treturn s, nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/client/tls.go",
    "content": "package client\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n)\n\n// NewClientTLSConfig: generate TLS config for client side\n// if insecureSkipVerify is set to true, serverName will not be validated\nfunc NewClientTLSConfig(caPem, certPem, keyPem []byte, insecureSkipVerify bool, serverName string) *tls.Config {\n\tpool := x509.NewCertPool()\n\tif !pool.AppendCertsFromPEM(caPem) {\n\t\tpanic(\"failed to add ca PEM\")\n\t}\n\n\tvar config *tls.Config\n\n\t// Allow cert and key to be optional\n\t// Send through `make([]byte, 0)` for \"nil\"\n\tif string(certPem) != \"\" && string(keyPem) != \"\" {\n\t\tcert, err := tls.X509KeyPair(certPem, keyPem)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tconfig = &tls.Config{\n\t\t\tRootCAs:            pool,\n\t\t\tCertificates:       []tls.Certificate{cert},\n\t\t\tInsecureSkipVerify: insecureSkipVerify,\n\t\t\tServerName:         serverName,\n\t\t}\n\t} else {\n\t\tconfig = &tls.Config{\n\t\t\tRootCAs:            pool,\n\t\t\tInsecureSkipVerify: insecureSkipVerify,\n\t\t\tServerName:         serverName,\n\t\t}\n\t}\n\n\treturn config\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/compress/zlib.go",
    "content": "package compress\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/zlib\"\n)\n\nconst DefaultCompressionLevel = 6\n\nvar (\n\tzlibReaderPool *sync.Pool\n\tzlibWriterPool sync.Pool\n)\n\nfunc init() {\n\tzlibReaderPool = &sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn nil\n\t\t},\n\t}\n\n\tzlibWriterPool = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\tw, err := zlib.NewWriterLevel(new(bytes.Buffer), DefaultCompressionLevel)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\treturn w\n\t\t},\n\t}\n}\n\nvar _ io.WriteCloser = zlibWriter{}\nvar _ io.ReadCloser = zlibReader{}\n\ntype zlibWriter struct {\n\tw *zlib.Writer\n}\n\ntype zlibReader struct {\n\tr io.ReadCloser\n}\n\nfunc GetPooledZlibWriter(target io.Writer) (io.WriteCloser, error) {\n\tw := zlibWriterPool.Get().(*zlib.Writer)\n\tw.Reset(target)\n\n\treturn zlibWriter{\n\t\tw: w,\n\t}, nil\n}\n\nfunc GetPooledZlibReader(src io.Reader) (io.ReadCloser, error) {\n\tvar (\n\t\trc  io.ReadCloser\n\t\terr error\n\t)\n\n\tif r := zlibReaderPool.Get(); r != nil {\n\t\trc = r.(io.ReadCloser)\n\t\tif rc.(zlib.Resetter).Reset(src, nil) != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else {\n\t\tif rc, err = zlib.NewReader(src); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn zlibReader{\n\t\tr: rc,\n\t}, nil\n}\n\nfunc (c zlibWriter) Write(data []byte) (n int, err error) {\n\treturn c.w.Write(data)\n}\n\nfunc (c zlibWriter) Close() error {\n\terr := c.w.Close()\n\tzlibWriterPool.Put(c.w)\n\treturn err\n}\n\nfunc (d zlibReader) Read(buf []byte) (n int, err error) {\n\treturn d.r.Read(buf)\n}\n\nfunc (d zlibReader) Close() error {\n\terr := d.r.Close()\n\tzlibReaderPool.Put(d.r)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/const.go",
    "content": "package mysql\n\nconst (\n\tClassicProtocolVersion byte   = 10\n\tXProtocolVersion       byte   = 11\n\tMaxPayloadLen          int    = 1<<24 - 1\n\tTimeFormat             string = \"2006-01-02 15:04:05\"\n)\n\nconst (\n\tOK_HEADER          byte = 0x00\n\tMORE_DATE_HEADER   byte = 0x01\n\tERR_HEADER         byte = 0xff\n\tEOF_HEADER         byte = 0xfe\n\tLocalInFile_HEADER byte = 0xfb\n\n\tCACHE_SHA2_FAST_AUTH byte = 0x03\n\tCACHE_SHA2_FULL_AUTH byte = 0x04\n)\n\nconst (\n\tAUTH_MYSQL_OLD_PASSWORD    = \"mysql_old_password\"\n\tAUTH_NATIVE_PASSWORD       = \"mysql_native_password\"\n\tAUTH_CLEAR_PASSWORD        = \"mysql_clear_password\"\n\tAUTH_CACHING_SHA2_PASSWORD = \"caching_sha2_password\"\n\tAUTH_SHA256_PASSWORD       = \"sha256_password\"\n)\n\nconst (\n\tSERVER_STATUS_IN_TRANS             uint16 = 0x0001\n\tSERVER_STATUS_AUTOCOMMIT           uint16 = 0x0002\n\tSERVER_MORE_RESULTS_EXISTS         uint16 = 0x0008\n\tSERVER_STATUS_NO_GOOD_INDEX_USED   uint16 = 0x0010\n\tSERVER_STATUS_NO_INDEX_USED        uint16 = 0x0020\n\tSERVER_STATUS_CURSOR_EXISTS        uint16 = 0x0040\n\tSERVER_STATUS_LAST_ROW_SEND        uint16 = 0x0080\n\tSERVER_STATUS_DB_DROPPED           uint16 = 0x0100\n\tSERVER_STATUS_NO_BACKSLASH_ESCAPED uint16 = 0x0200\n\tSERVER_STATUS_METADATA_CHANGED     uint16 = 0x0400\n\tSERVER_QUERY_WAS_SLOW              uint16 = 0x0800\n\tSERVER_PS_OUT_PARAMS               uint16 = 0x1000\n)\n\nconst (\n\tCOM_SLEEP byte = iota\n\tCOM_QUIT\n\tCOM_INIT_DB\n\tCOM_QUERY\n\tCOM_FIELD_LIST\n\tCOM_CREATE_DB\n\tCOM_DROP_DB\n\tCOM_REFRESH\n\tCOM_SHUTDOWN\n\tCOM_STATISTICS\n\tCOM_PROCESS_INFO\n\tCOM_CONNECT\n\tCOM_PROCESS_KILL\n\tCOM_DEBUG\n\tCOM_PING\n\tCOM_TIME\n\tCOM_DELAYED_INSERT\n\tCOM_CHANGE_USER\n\tCOM_BINLOG_DUMP\n\tCOM_TABLE_DUMP\n\tCOM_CONNECT_OUT\n\tCOM_REGISTER_SLAVE\n\tCOM_STMT_PREPARE\n\tCOM_STMT_EXECUTE\n\tCOM_STMT_SEND_LONG_DATA\n\tCOM_STMT_CLOSE\n\tCOM_STMT_RESET\n\tCOM_SET_OPTION\n\tCOM_STMT_FETCH\n\tCOM_DAEMON\n\tCOM_BINLOG_DUMP_GTID\n\tCOM_RESET_CONNECTION\n)\n\nconst (\n\t// https://dev.mysql.com/doc/dev/mysql-server/latest/group__group__cs__capabilities__flags.html\n\n\tCLIENT_LONG_PASSWORD uint32 = 1 << iota\n\tCLIENT_FOUND_ROWS\n\tCLIENT_LONG_FLAG\n\tCLIENT_CONNECT_WITH_DB\n\tCLIENT_NO_SCHEMA\n\tCLIENT_COMPRESS\n\tCLIENT_ODBC\n\tCLIENT_LOCAL_FILES\n\tCLIENT_IGNORE_SPACE\n\tCLIENT_PROTOCOL_41\n\tCLIENT_INTERACTIVE\n\tCLIENT_SSL\n\tCLIENT_IGNORE_SIGPIPE\n\tCLIENT_TRANSACTIONS\n\tCLIENT_RESERVED\n\tCLIENT_SECURE_CONNECTION\n\tCLIENT_MULTI_STATEMENTS\n\tCLIENT_MULTI_RESULTS\n\tCLIENT_PS_MULTI_RESULTS\n\tCLIENT_PLUGIN_AUTH\n\tCLIENT_CONNECT_ATTRS\n\tCLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA\n\tCLIENT_CAN_HANDLE_EXPIRED_PASSWORDS\n\tCLIENT_SESSION_TRACK\n\tCLIENT_DEPRECATE_EOF\n\tCLIENT_OPTIONAL_RESULTSET_METADATA\n\tCLIENT_ZSTD_COMPRESSION_ALGORITHM\n\tCLIENT_QUERY_ATTRIBUTES\n\tMULTI_FACTOR_AUTHENTICATION\n\tCLIENT_CAPABILITY_EXTENSION\n\tCLIENT_SSL_VERIFY_SERVER_CERT\n\tCLIENT_REMEMBER_OPTIONS\n)\n\nconst (\n\tMYSQL_TYPE_DECIMAL byte = iota\n\tMYSQL_TYPE_TINY\n\tMYSQL_TYPE_SHORT\n\tMYSQL_TYPE_LONG\n\tMYSQL_TYPE_FLOAT\n\tMYSQL_TYPE_DOUBLE\n\tMYSQL_TYPE_NULL\n\tMYSQL_TYPE_TIMESTAMP\n\tMYSQL_TYPE_LONGLONG\n\tMYSQL_TYPE_INT24\n\tMYSQL_TYPE_DATE\n\tMYSQL_TYPE_TIME\n\tMYSQL_TYPE_DATETIME\n\tMYSQL_TYPE_YEAR\n\tMYSQL_TYPE_NEWDATE\n\tMYSQL_TYPE_VARCHAR\n\tMYSQL_TYPE_BIT\n\n\t// mysql 5.6\n\tMYSQL_TYPE_TIMESTAMP2\n\tMYSQL_TYPE_DATETIME2\n\tMYSQL_TYPE_TIME2\n)\n\nconst (\n\tMYSQL_TYPE_JSON byte = iota + 0xf5\n\tMYSQL_TYPE_NEWDECIMAL\n\tMYSQL_TYPE_ENUM\n\tMYSQL_TYPE_SET\n\tMYSQL_TYPE_TINY_BLOB\n\tMYSQL_TYPE_MEDIUM_BLOB\n\tMYSQL_TYPE_LONG_BLOB\n\tMYSQL_TYPE_BLOB\n\tMYSQL_TYPE_VAR_STRING\n\tMYSQL_TYPE_STRING\n\tMYSQL_TYPE_GEOMETRY\n)\n\nconst (\n\tNOT_NULL_FLAG       = 1\n\tPRI_KEY_FLAG        = 2\n\tUNIQUE_KEY_FLAG     = 4\n\tBLOB_FLAG           = 16\n\tUNSIGNED_FLAG       = 32\n\tZEROFILL_FLAG       = 64\n\tBINARY_FLAG         = 128\n\tENUM_FLAG           = 256\n\tAUTO_INCREMENT_FLAG = 512\n\tTIMESTAMP_FLAG      = 1024\n\tSET_FLAG            = 2048\n\tNUM_FLAG            = 32768\n\tPART_KEY_FLAG       = 16384\n\tGROUP_FLAG          = 32768\n\tUNIQUE_FLAG         = 65536\n)\n\nconst (\n\tDEFAULT_ADDR                  = \"127.0.0.1:3306\"\n\tDEFAULT_IPV6_ADDR             = \"[::1]:3306\"\n\tDEFAULT_USER                  = \"root\"\n\tDEFAULT_PASSWORD              = \"\"\n\tDEFAULT_FLAVOR                = \"mysql\"\n\tDEFAULT_CHARSET               = \"utf8\"\n\tDEFAULT_COLLATION_ID   uint8  = 33\n\tDEFAULT_COLLATION_NAME string = \"utf8_general_ci\"\n)\n\nconst (\n\tDEFAULT_DUMP_EXECUTION_PATH = \"mysqldump\"\n)\n\n// Like vitess, use flavor for different MySQL versions,\nconst (\n\tMySQLFlavor   = \"mysql\"\n\tMariaDBFlavor = \"mariadb\"\n)\n\nconst (\n\tMYSQL_OPTION_MULTI_STATEMENTS_ON = iota\n\tMYSQL_OPTION_MULTI_STATEMENTS_OFF\n)\n\nconst (\n\tMYSQL_COMPRESS_NONE = iota\n\tMYSQL_COMPRESS_ZLIB\n\tMYSQL_COMPRESS_ZSTD\n)\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/errcode.go",
    "content": "package mysql\n\nconst (\n\tER_ERROR_FIRST                                                      = 1000\n\tER_HASHCHK                                                          = 1000\n\tER_NISAMCHK                                                         = 1001\n\tER_NO                                                               = 1002\n\tER_YES                                                              = 1003\n\tER_CANT_CREATE_FILE                                                 = 1004\n\tER_CANT_CREATE_TABLE                                                = 1005\n\tER_CANT_CREATE_DB                                                   = 1006\n\tER_DB_CREATE_EXISTS                                                 = 1007\n\tER_DB_DROP_EXISTS                                                   = 1008\n\tER_DB_DROP_DELETE                                                   = 1009\n\tER_DB_DROP_RMDIR                                                    = 1010\n\tER_CANT_DELETE_FILE                                                 = 1011\n\tER_CANT_FIND_SYSTEM_REC                                             = 1012\n\tER_CANT_GET_STAT                                                    = 1013\n\tER_CANT_GET_WD                                                      = 1014\n\tER_CANT_LOCK                                                        = 1015\n\tER_CANT_OPEN_FILE                                                   = 1016\n\tER_FILE_NOT_FOUND                                                   = 1017\n\tER_CANT_READ_DIR                                                    = 1018\n\tER_CANT_SET_WD                                                      = 1019\n\tER_CHECKREAD                                                        = 1020\n\tER_DISK_FULL                                                        = 1021\n\tER_DUP_KEY                                                          = 1022\n\tER_ERROR_ON_CLOSE                                                   = 1023\n\tER_ERROR_ON_READ                                                    = 1024\n\tER_ERROR_ON_RENAME                                                  = 1025\n\tER_ERROR_ON_WRITE                                                   = 1026\n\tER_FILE_USED                                                        = 1027\n\tER_FILSORT_ABORT                                                    = 1028\n\tER_FORM_NOT_FOUND                                                   = 1029\n\tER_GET_ERRNO                                                        = 1030\n\tER_ILLEGAL_HA                                                       = 1031\n\tER_KEY_NOT_FOUND                                                    = 1032\n\tER_NOT_FORM_FILE                                                    = 1033\n\tER_NOT_KEYFILE                                                      = 1034\n\tER_OLD_KEYFILE                                                      = 1035\n\tER_OPEN_AS_READONLY                                                 = 1036\n\tER_OUTOFMEMORY                                                      = 1037\n\tER_OUT_OF_SORTMEMORY                                                = 1038\n\tER_UNEXPECTED_EOF                                                   = 1039\n\tER_CON_COUNT_ERROR                                                  = 1040\n\tER_OUT_OF_RESOURCES                                                 = 1041\n\tER_BAD_HOST_ERROR                                                   = 1042\n\tER_HANDSHAKE_ERROR                                                  = 1043\n\tER_DBACCESS_DENIED_ERROR                                            = 1044\n\tER_ACCESS_DENIED_ERROR                                              = 1045\n\tER_NO_DB_ERROR                                                      = 1046\n\tER_UNKNOWN_COM_ERROR                                                = 1047\n\tER_BAD_NULL_ERROR                                                   = 1048\n\tER_BAD_DB_ERROR                                                     = 1049\n\tER_TABLE_EXISTS_ERROR                                               = 1050\n\tER_BAD_TABLE_ERROR                                                  = 1051\n\tER_NON_UNIQ_ERROR                                                   = 1052\n\tER_SERVER_SHUTDOWN                                                  = 1053\n\tER_BAD_FIELD_ERROR                                                  = 1054\n\tER_WRONG_FIELD_WITH_GROUP                                           = 1055\n\tER_WRONG_GROUP_FIELD                                                = 1056\n\tER_WRONG_SUM_SELECT                                                 = 1057\n\tER_WRONG_VALUE_COUNT                                                = 1058\n\tER_TOO_LONG_IDENT                                                   = 1059\n\tER_DUP_FIELDNAME                                                    = 1060\n\tER_DUP_KEYNAME                                                      = 1061\n\tER_DUP_ENTRY                                                        = 1062\n\tER_WRONG_FIELD_SPEC                                                 = 1063\n\tER_PARSE_ERROR                                                      = 1064\n\tER_EMPTY_QUERY                                                      = 1065\n\tER_NONUNIQ_TABLE                                                    = 1066\n\tER_INVALID_DEFAULT                                                  = 1067\n\tER_MULTIPLE_PRI_KEY                                                 = 1068\n\tER_TOO_MANY_KEYS                                                    = 1069\n\tER_TOO_MANY_KEY_PARTS                                               = 1070\n\tER_TOO_LONG_KEY                                                     = 1071\n\tER_KEY_COLUMN_DOES_NOT_EXITS                                        = 1072\n\tER_BLOB_USED_AS_KEY                                                 = 1073\n\tER_TOO_BIG_FIELDLENGTH                                              = 1074\n\tER_WRONG_AUTO_KEY                                                   = 1075\n\tER_READY                                                            = 1076\n\tER_NORMAL_SHUTDOWN                                                  = 1077\n\tER_GOT_SIGNAL                                                       = 1078\n\tER_SHUTDOWN_COMPLETE                                                = 1079\n\tER_FORCING_CLOSE                                                    = 1080\n\tER_IPSOCK_ERROR                                                     = 1081\n\tER_NO_SUCH_INDEX                                                    = 1082\n\tER_WRONG_FIELD_TERMINATORS                                          = 1083\n\tER_BLOBS_AND_NO_TERMINATED                                          = 1084\n\tER_TEXTFILE_NOT_READABLE                                            = 1085\n\tER_FILE_EXISTS_ERROR                                                = 1086\n\tER_LOAD_INFO                                                        = 1087\n\tER_ALTER_INFO                                                       = 1088\n\tER_WRONG_SUB_KEY                                                    = 1089\n\tER_CANT_REMOVE_ALL_FIELDS                                           = 1090\n\tER_CANT_DROP_FIELD_OR_KEY                                           = 1091\n\tER_INSERT_INFO                                                      = 1092\n\tER_UPDATE_TABLE_USED                                                = 1093\n\tER_NO_SUCH_THREAD                                                   = 1094\n\tER_KILL_DENIED_ERROR                                                = 1095\n\tER_NO_TABLES_USED                                                   = 1096\n\tER_TOO_BIG_SET                                                      = 1097\n\tER_NO_UNIQUE_LOGFILE                                                = 1098\n\tER_TABLE_NOT_LOCKED_FOR_WRITE                                       = 1099\n\tER_TABLE_NOT_LOCKED                                                 = 1100\n\tER_BLOB_CANT_HAVE_DEFAULT                                           = 1101\n\tER_WRONG_DB_NAME                                                    = 1102\n\tER_WRONG_TABLE_NAME                                                 = 1103\n\tER_TOO_BIG_SELECT                                                   = 1104\n\tER_UNKNOWN_ERROR                                                    = 1105\n\tER_UNKNOWN_PROCEDURE                                                = 1106\n\tER_WRONG_PARAMCOUNT_TO_PROCEDURE                                    = 1107\n\tER_WRONG_PARAMETERS_TO_PROCEDURE                                    = 1108\n\tER_UNKNOWN_TABLE                                                    = 1109\n\tER_FIELD_SPECIFIED_TWICE                                            = 1110\n\tER_INVALID_GROUP_FUNC_USE                                           = 1111\n\tER_UNSUPPORTED_EXTENSION                                            = 1112\n\tER_TABLE_MUST_HAVE_COLUMNS                                          = 1113\n\tER_RECORD_FILE_FULL                                                 = 1114\n\tER_UNKNOWN_CHARACTER_SET                                            = 1115\n\tER_TOO_MANY_TABLES                                                  = 1116\n\tER_TOO_MANY_FIELDS                                                  = 1117\n\tER_TOO_BIG_ROWSIZE                                                  = 1118\n\tER_STACK_OVERRUN                                                    = 1119\n\tER_WRONG_OUTER_JOIN                                                 = 1120\n\tER_NULL_COLUMN_IN_INDEX                                             = 1121\n\tER_CANT_FIND_UDF                                                    = 1122\n\tER_CANT_INITIALIZE_UDF                                              = 1123\n\tER_UDF_NO_PATHS                                                     = 1124\n\tER_UDF_EXISTS                                                       = 1125\n\tER_CANT_OPEN_LIBRARY                                                = 1126\n\tER_CANT_FIND_DL_ENTRY                                               = 1127\n\tER_FUNCTION_NOT_DEFINED                                             = 1128\n\tER_HOST_IS_BLOCKED                                                  = 1129\n\tER_HOST_NOT_PRIVILEGED                                              = 1130\n\tER_PASSWORD_ANONYMOUS_USER                                          = 1131\n\tER_PASSWORD_NOT_ALLOWED                                             = 1132\n\tER_PASSWORD_NO_MATCH                                                = 1133\n\tER_UPDATE_INFO                                                      = 1134\n\tER_CANT_CREATE_THREAD                                               = 1135\n\tER_WRONG_VALUE_COUNT_ON_ROW                                         = 1136\n\tER_CANT_REOPEN_TABLE                                                = 1137\n\tER_INVALID_USE_OF_NULL                                              = 1138\n\tER_REGEXP_ERROR                                                     = 1139\n\tER_MIX_OF_GROUP_FUNC_AND_FIELDS                                     = 1140\n\tER_NONEXISTING_GRANT                                                = 1141\n\tER_TABLEACCESS_DENIED_ERROR                                         = 1142\n\tER_COLUMNACCESS_DENIED_ERROR                                        = 1143\n\tER_ILLEGAL_GRANT_FOR_TABLE                                          = 1144\n\tER_GRANT_WRONG_HOST_OR_USER                                         = 1145\n\tER_NO_SUCH_TABLE                                                    = 1146\n\tER_NONEXISTING_TABLE_GRANT                                          = 1147\n\tER_NOT_ALLOWED_COMMAND                                              = 1148\n\tER_SYNTAX_ERROR                                                     = 1149\n\tER_DELAYED_CANT_CHANGE_LOCK                                         = 1150\n\tER_TOO_MANY_DELAYED_THREADS                                         = 1151\n\tER_ABORTING_CONNECTION                                              = 1152\n\tER_NET_PACKET_TOO_LARGE                                             = 1153\n\tER_NET_READ_ERROR_FROM_PIPE                                         = 1154\n\tER_NET_FCNTL_ERROR                                                  = 1155\n\tER_NET_PACKETS_OUT_OF_ORDER                                         = 1156\n\tER_NET_UNCOMPRESS_ERROR                                             = 1157\n\tER_NET_READ_ERROR                                                   = 1158\n\tER_NET_READ_INTERRUPTED                                             = 1159\n\tER_NET_ERROR_ON_WRITE                                               = 1160\n\tER_NET_WRITE_INTERRUPTED                                            = 1161\n\tER_TOO_LONG_STRING                                                  = 1162\n\tER_TABLE_CANT_HANDLE_BLOB                                           = 1163\n\tER_TABLE_CANT_HANDLE_AUTO_INCREMENT                                 = 1164\n\tER_DELAYED_INSERT_TABLE_LOCKED                                      = 1165\n\tER_WRONG_COLUMN_NAME                                                = 1166\n\tER_WRONG_KEY_COLUMN                                                 = 1167\n\tER_WRONG_MRG_TABLE                                                  = 1168\n\tER_DUP_UNIQUE                                                       = 1169\n\tER_BLOB_KEY_WITHOUT_LENGTH                                          = 1170\n\tER_PRIMARY_CANT_HAVE_NULL                                           = 1171\n\tER_TOO_MANY_ROWS                                                    = 1172\n\tER_REQUIRES_PRIMARY_KEY                                             = 1173\n\tER_NO_RAID_COMPILED                                                 = 1174\n\tER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE                                  = 1175\n\tER_KEY_DOES_NOT_EXITS                                               = 1176\n\tER_CHECK_NO_SUCH_TABLE                                              = 1177\n\tER_CHECK_NOT_IMPLEMENTED                                            = 1178\n\tER_CANT_DO_THIS_DURING_AN_TRANSACTION                               = 1179\n\tER_ERROR_DURING_COMMIT                                              = 1180\n\tER_ERROR_DURING_ROLLBACK                                            = 1181\n\tER_ERROR_DURING_FLUSH_LOGS                                          = 1182\n\tER_ERROR_DURING_CHECKPOINT                                          = 1183\n\tER_NEW_ABORTING_CONNECTION                                          = 1184\n\tER_DUMP_NOT_IMPLEMENTED                                             = 1185\n\tER_FLUSH_MASTER_BINLOG_CLOSED                                       = 1186\n\tER_INDEX_REBUILD                                                    = 1187\n\tER_MASTER                                                           = 1188\n\tER_MASTER_NET_READ                                                  = 1189\n\tER_MASTER_NET_WRITE                                                 = 1190\n\tER_FT_MATCHING_KEY_NOT_FOUND                                        = 1191\n\tER_LOCK_OR_ACTIVE_TRANSACTION                                       = 1192\n\tER_UNKNOWN_SYSTEM_VARIABLE                                          = 1193\n\tER_CRASHED_ON_USAGE                                                 = 1194\n\tER_CRASHED_ON_REPAIR                                                = 1195\n\tER_WARNING_NOT_COMPLETE_ROLLBACK                                    = 1196\n\tER_TRANS_CACHE_FULL                                                 = 1197\n\tER_SLAVE_MUST_STOP                                                  = 1198\n\tER_SLAVE_NOT_RUNNING                                                = 1199\n\tER_BAD_SLAVE                                                        = 1200\n\tER_MASTER_INFO                                                      = 1201\n\tER_SLAVE_THREAD                                                     = 1202\n\tER_TOO_MANY_USER_CONNECTIONS                                        = 1203\n\tER_SET_CONSTANTS_ONLY                                               = 1204\n\tER_LOCK_WAIT_TIMEOUT                                                = 1205\n\tER_LOCK_TABLE_FULL                                                  = 1206\n\tER_READ_ONLY_TRANSACTION                                            = 1207\n\tER_DROP_DB_WITH_READ_LOCK                                           = 1208\n\tER_CREATE_DB_WITH_READ_LOCK                                         = 1209\n\tER_WRONG_ARGUMENTS                                                  = 1210\n\tER_NO_PERMISSION_TO_CREATE_USER                                     = 1211\n\tER_UNION_TABLES_IN_DIFFERENT_DIR                                    = 1212\n\tER_LOCK_DEADLOCK                                                    = 1213\n\tER_TABLE_CANT_HANDLE_FT                                             = 1214\n\tER_CANNOT_ADD_FOREIGN                                               = 1215\n\tER_NO_REFERENCED_ROW                                                = 1216\n\tER_ROW_IS_REFERENCED                                                = 1217\n\tER_CONNECT_TO_MASTER                                                = 1218\n\tER_QUERY_ON_MASTER                                                  = 1219\n\tER_ERROR_WHEN_EXECUTING_COMMAND                                     = 1220\n\tER_WRONG_USAGE                                                      = 1221\n\tER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT                                = 1222\n\tER_CANT_UPDATE_WITH_READLOCK                                        = 1223\n\tER_MIXING_NOT_ALLOWED                                               = 1224\n\tER_DUP_ARGUMENT                                                     = 1225\n\tER_USER_LIMIT_REACHED                                               = 1226\n\tER_SPECIFIC_ACCESS_DENIED_ERROR                                     = 1227\n\tER_LOCAL_VARIABLE                                                   = 1228\n\tER_GLOBAL_VARIABLE                                                  = 1229\n\tER_NO_DEFAULT                                                       = 1230\n\tER_WRONG_VALUE_FOR_VAR                                              = 1231\n\tER_WRONG_TYPE_FOR_VAR                                               = 1232\n\tER_VAR_CANT_BE_READ                                                 = 1233\n\tER_CANT_USE_OPTION_HERE                                             = 1234\n\tER_NOT_SUPPORTED_YET                                                = 1235\n\tER_MASTER_FATAL_ERROR_READING_BINLOG                                = 1236\n\tER_SLAVE_IGNORED_TABLE                                              = 1237\n\tER_INCORRECT_GLOBAL_LOCAL_VAR                                       = 1238\n\tER_WRONG_FK_DEF                                                     = 1239\n\tER_KEY_REF_DO_NOT_MATCH_TABLE_REF                                   = 1240\n\tER_OPERAND_COLUMNS                                                  = 1241\n\tER_SUBQUERY_NO_1_ROW                                                = 1242\n\tER_UNKNOWN_STMT_HANDLER                                             = 1243\n\tER_CORRUPT_HELP_DB                                                  = 1244\n\tER_CYCLIC_REFERENCE                                                 = 1245\n\tER_AUTO_CONVERT                                                     = 1246\n\tER_ILLEGAL_REFERENCE                                                = 1247\n\tER_DERIVED_MUST_HAVE_ALIAS                                          = 1248\n\tER_SELECT_REDUCED                                                   = 1249\n\tER_TABLENAME_NOT_ALLOWED_HERE                                       = 1250\n\tER_NOT_SUPPORTED_AUTH_MODE                                          = 1251\n\tER_SPATIAL_CANT_HAVE_NULL                                           = 1252\n\tER_COLLATION_CHARSET_MISMATCH                                       = 1253\n\tER_SLAVE_WAS_RUNNING                                                = 1254\n\tER_SLAVE_WAS_NOT_RUNNING                                            = 1255\n\tER_TOO_BIG_FOR_UNCOMPRESS                                           = 1256\n\tER_ZLIB_Z_MEM_ERROR                                                 = 1257\n\tER_ZLIB_Z_BUF_ERROR                                                 = 1258\n\tER_ZLIB_Z_DATA_ERROR                                                = 1259\n\tER_CUT_VALUE_GROUP_CONCAT                                           = 1260\n\tER_WARN_TOO_FEW_RECORDS                                             = 1261\n\tER_WARN_TOO_MANY_RECORDS                                            = 1262\n\tER_WARN_NULL_TO_NOTNULL                                             = 1263\n\tER_WARN_DATA_OUT_OF_RANGE                                           = 1264\n\tWARN_DATA_TRUNCATED                                                 = 1265\n\tER_WARN_USING_OTHER_HANDLER                                         = 1266\n\tER_CANT_AGGREGATE_2COLLATIONS                                       = 1267\n\tER_DROP_USER                                                        = 1268\n\tER_REVOKE_GRANTS                                                    = 1269\n\tER_CANT_AGGREGATE_3COLLATIONS                                       = 1270\n\tER_CANT_AGGREGATE_NCOLLATIONS                                       = 1271\n\tER_VARIABLE_IS_NOT_STRUCT                                           = 1272\n\tER_UNKNOWN_COLLATION                                                = 1273\n\tER_SLAVE_IGNORED_SSL_PARAMS                                         = 1274\n\tER_SERVER_IS_IN_SECURE_AUTH_MODE                                    = 1275\n\tER_WARN_FIELD_RESOLVED                                              = 1276\n\tER_BAD_SLAVE_UNTIL_COND                                             = 1277\n\tER_MISSING_SKIP_SLAVE                                               = 1278\n\tER_UNTIL_COND_IGNORED                                               = 1279\n\tER_WRONG_NAME_FOR_INDEX                                             = 1280\n\tER_WRONG_NAME_FOR_CATALOG                                           = 1281\n\tER_WARN_QC_RESIZE                                                   = 1282\n\tER_BAD_FT_COLUMN                                                    = 1283\n\tER_UNKNOWN_KEY_CACHE                                                = 1284\n\tER_WARN_HOSTNAME_WONT_WORK                                          = 1285\n\tER_UNKNOWN_STORAGE_ENGINE                                           = 1286\n\tER_WARN_DEPRECATED_SYNTAX                                           = 1287\n\tER_NON_UPDATABLE_TABLE                                              = 1288\n\tER_FEATURE_DISABLED                                                 = 1289\n\tER_OPTION_PREVENTS_STATEMENT                                        = 1290\n\tER_DUPLICATED_VALUE_IN_TYPE                                         = 1291\n\tER_TRUNCATED_WRONG_VALUE                                            = 1292\n\tER_TOO_MUCH_AUTO_TIMESTAMP_COLS                                     = 1293\n\tER_INVALID_ON_UPDATE                                                = 1294\n\tER_UNSUPPORTED_PS                                                   = 1295\n\tER_GET_ERRMSG                                                       = 1296\n\tER_GET_TEMPORARY_ERRMSG                                             = 1297\n\tER_UNKNOWN_TIME_ZONE                                                = 1298\n\tER_WARN_INVALID_TIMESTAMP                                           = 1299\n\tER_INVALID_CHARACTER_STRING                                         = 1300\n\tER_WARN_ALLOWED_PACKET_OVERFLOWED                                   = 1301\n\tER_CONFLICTING_DECLARATIONS                                         = 1302\n\tER_SP_NO_RECURSIVE_CREATE                                           = 1303\n\tER_SP_ALREADY_EXISTS                                                = 1304\n\tER_SP_DOES_NOT_EXIST                                                = 1305\n\tER_SP_DROP_FAILED                                                   = 1306\n\tER_SP_STORE_FAILED                                                  = 1307\n\tER_SP_LILABEL_MISMATCH                                              = 1308\n\tER_SP_LABEL_REDEFINE                                                = 1309\n\tER_SP_LABEL_MISMATCH                                                = 1310\n\tER_SP_UNINIT_VAR                                                    = 1311\n\tER_SP_BADSELECT                                                     = 1312\n\tER_SP_BADRETURN                                                     = 1313\n\tER_SP_BADSTATEMENT                                                  = 1314\n\tER_UPDATE_LOG_DEPRECATED_IGNORED                                    = 1315\n\tER_UPDATE_LOG_DEPRECATED_TRANSLATED                                 = 1316\n\tER_QUERY_INTERRUPTED                                                = 1317\n\tER_SP_WRONG_NO_OF_ARGS                                              = 1318\n\tER_SP_COND_MISMATCH                                                 = 1319\n\tER_SP_NORETURN                                                      = 1320\n\tER_SP_NORETURNEND                                                   = 1321\n\tER_SP_BAD_CURSOR_QUERY                                              = 1322\n\tER_SP_BAD_CURSOR_SELECT                                             = 1323\n\tER_SP_CURSOR_MISMATCH                                               = 1324\n\tER_SP_CURSOR_ALREADY_OPEN                                           = 1325\n\tER_SP_CURSOR_NOT_OPEN                                               = 1326\n\tER_SP_UNDECLARED_VAR                                                = 1327\n\tER_SP_WRONG_NO_OF_FETCH_ARGS                                        = 1328\n\tER_SP_FETCH_NO_DATA                                                 = 1329\n\tER_SP_DUP_PARAM                                                     = 1330\n\tER_SP_DUP_VAR                                                       = 1331\n\tER_SP_DUP_COND                                                      = 1332\n\tER_SP_DUP_CURS                                                      = 1333\n\tER_SP_CANT_ALTER                                                    = 1334\n\tER_SP_SUBSELECT_NYI                                                 = 1335\n\tER_STMT_NOT_ALLOWED_IN_SF_OR_TRG                                    = 1336\n\tER_SP_VARCOND_AFTER_CURSHNDLR                                       = 1337\n\tER_SP_CURSOR_AFTER_HANDLER                                          = 1338\n\tER_SP_CASE_NOT_FOUND                                                = 1339\n\tER_FPARSER_TOO_BIG_FILE                                             = 1340\n\tER_FPARSER_BAD_HEADER                                               = 1341\n\tER_FPARSER_EOF_IN_COMMENT                                           = 1342\n\tER_FPARSER_ERROR_IN_PARAMETER                                       = 1343\n\tER_FPARSER_EOF_IN_UNKNOWN_PARAMETER                                 = 1344\n\tER_VIEW_NO_EXPLAIN                                                  = 1345\n\tER_FRM_UNKNOWN_TYPE                                                 = 1346\n\tER_WRONG_OBJECT                                                     = 1347\n\tER_NONUPDATEABLE_COLUMN                                             = 1348\n\tER_VIEW_SELECT_DERIVED                                              = 1349\n\tER_VIEW_SELECT_CLAUSE                                               = 1350\n\tER_VIEW_SELECT_VARIABLE                                             = 1351\n\tER_VIEW_SELECT_TMPTABLE                                             = 1352\n\tER_VIEW_WRONG_LIST                                                  = 1353\n\tER_WARN_VIEW_MERGE                                                  = 1354\n\tER_WARN_VIEW_WITHOUT_KEY                                            = 1355\n\tER_VIEW_INVALID                                                     = 1356\n\tER_SP_NO_DROP_SP                                                    = 1357\n\tER_SP_GOTO_IN_HNDLR                                                 = 1358\n\tER_TRG_ALREADY_EXISTS                                               = 1359\n\tER_TRG_DOES_NOT_EXIST                                               = 1360\n\tER_TRG_ON_VIEW_OR_TEMP_TABLE                                        = 1361\n\tER_TRG_CANT_CHANGE_ROW                                              = 1362\n\tER_TRG_NO_SUCH_ROW_IN_TRG                                           = 1363\n\tER_NO_DEFAULT_FOR_FIELD                                             = 1364\n\tER_DIVISION_BY_ZERO                                                 = 1365\n\tER_TRUNCATED_WRONG_VALUE_FOR_FIELD                                  = 1366\n\tER_ILLEGAL_VALUE_FOR_TYPE                                           = 1367\n\tER_VIEW_NONUPD_CHECK                                                = 1368\n\tER_VIEW_CHECK_FAILED                                                = 1369\n\tER_PROCACCESS_DENIED_ERROR                                          = 1370\n\tER_RELAY_LOG_FAIL                                                   = 1371\n\tER_PASSWD_LENGTH                                                    = 1372\n\tER_UNKNOWN_TARGET_BINLOG                                            = 1373\n\tER_IO_ERR_LOG_INDEX_READ                                            = 1374\n\tER_BINLOG_PURGE_PROHIBITED                                          = 1375\n\tER_FSEEK_FAIL                                                       = 1376\n\tER_BINLOG_PURGE_FATAL_ERR                                           = 1377\n\tER_LOG_IN_USE                                                       = 1378\n\tER_LOG_PURGE_UNKNOWN_ERR                                            = 1379\n\tER_RELAY_LOG_INIT                                                   = 1380\n\tER_NO_BINARY_LOGGING                                                = 1381\n\tER_RESERVED_SYNTAX                                                  = 1382\n\tER_WSAS_FAILED                                                      = 1383\n\tER_DIFF_GROUPS_PROC                                                 = 1384\n\tER_NO_GROUP_FOR_PROC                                                = 1385\n\tER_ORDER_WITH_PROC                                                  = 1386\n\tER_LOGGING_PROHIBIT_CHANGING_OF                                     = 1387\n\tER_NO_FILE_MAPPING                                                  = 1388\n\tER_WRONG_MAGIC                                                      = 1389\n\tER_PS_MANY_PARAM                                                    = 1390\n\tER_KEY_PART_0                                                       = 1391\n\tER_VIEW_CHECKSUM                                                    = 1392\n\tER_VIEW_MULTIUPDATE                                                 = 1393\n\tER_VIEW_NO_INSERT_FIELD_LIST                                        = 1394\n\tER_VIEW_DELETE_MERGE_VIEW                                           = 1395\n\tER_CANNOT_USER                                                      = 1396\n\tER_XAER_NOTA                                                        = 1397\n\tER_XAER_INVAL                                                       = 1398\n\tER_XAER_RMFAIL                                                      = 1399\n\tER_XAER_OUTSIDE                                                     = 1400\n\tER_XAER_RMERR                                                       = 1401\n\tER_XA_RBROLLBACK                                                    = 1402\n\tER_NONEXISTING_PROC_GRANT                                           = 1403\n\tER_PROC_AUTO_GRANT_FAIL                                             = 1404\n\tER_PROC_AUTO_REVOKE_FAIL                                            = 1405\n\tER_DATA_TOO_LONG                                                    = 1406\n\tER_SP_BAD_SQLSTATE                                                  = 1407\n\tER_STARTUP                                                          = 1408\n\tER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR                                 = 1409\n\tER_CANT_CREATE_USER_WITH_GRANT                                      = 1410\n\tER_WRONG_VALUE_FOR_TYPE                                             = 1411\n\tER_TABLE_DEF_CHANGED                                                = 1412\n\tER_SP_DUP_HANDLER                                                   = 1413\n\tER_SP_NOT_VAR_ARG                                                   = 1414\n\tER_SP_NO_RETSET                                                     = 1415\n\tER_CANT_CREATE_GEOMETRY_OBJECT                                      = 1416\n\tER_FAILED_ROUTINE_BREAK_BINLOG                                      = 1417\n\tER_BINLOG_UNSAFE_ROUTINE                                            = 1418\n\tER_BINLOG_CREATE_ROUTINE_NEED_SUPER                                 = 1419\n\tER_EXEC_STMT_WITH_OPEN_CURSOR                                       = 1420\n\tER_STMT_HAS_NO_OPEN_CURSOR                                          = 1421\n\tER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG                                  = 1422\n\tER_NO_DEFAULT_FOR_VIEW_FIELD                                        = 1423\n\tER_SP_NO_RECURSION                                                  = 1424\n\tER_TOO_BIG_SCALE                                                    = 1425\n\tER_TOO_BIG_PRECISION                                                = 1426\n\tER_M_BIGGER_THAN_D                                                  = 1427\n\tER_WRONG_LOCK_OF_SYSTEM_TABLE                                       = 1428\n\tER_CONNECT_TO_FOREIGN_DATA_SOURCE                                   = 1429\n\tER_QUERY_ON_FOREIGN_DATA_SOURCE                                     = 1430\n\tER_FOREIGN_DATA_SOURCE_DOESNT_EXIST                                 = 1431\n\tER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE                          = 1432\n\tER_FOREIGN_DATA_STRING_INVALID                                      = 1433\n\tER_CANT_CREATE_FEDERATED_TABLE                                      = 1434\n\tER_TRG_IN_WRONG_SCHEMA                                              = 1435\n\tER_STACK_OVERRUN_NEED_MORE                                          = 1436\n\tER_TOO_LONG_BODY                                                    = 1437\n\tER_WARN_CANT_DROP_DEFAULT_KEYCACHE                                  = 1438\n\tER_TOO_BIG_DISPLAYWIDTH                                             = 1439\n\tER_XAER_DUPID                                                       = 1440\n\tER_DATETIME_FUNCTION_OVERFLOW                                       = 1441\n\tER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG                              = 1442\n\tER_VIEW_PREVENT_UPDATE                                              = 1443\n\tER_PS_NO_RECURSION                                                  = 1444\n\tER_SP_CANT_SET_AUTOCOMMIT                                           = 1445\n\tER_MALFORMED_DEFINER                                                = 1446\n\tER_VIEW_FRM_NO_USER                                                 = 1447\n\tER_VIEW_OTHER_USER                                                  = 1448\n\tER_NO_SUCH_USER                                                     = 1449\n\tER_FORBID_SCHEMA_CHANGE                                             = 1450\n\tER_ROW_IS_REFERENCED_2                                              = 1451\n\tER_NO_REFERENCED_ROW_2                                              = 1452\n\tER_SP_BAD_VAR_SHADOW                                                = 1453\n\tER_TRG_NO_DEFINER                                                   = 1454\n\tER_OLD_FILE_FORMAT                                                  = 1455\n\tER_SP_RECURSION_LIMIT                                               = 1456\n\tER_SP_PROC_TABLE_CORRUPT                                            = 1457\n\tER_SP_WRONG_NAME                                                    = 1458\n\tER_TABLE_NEEDS_UPGRADE                                              = 1459\n\tER_SP_NO_AGGREGATE                                                  = 1460\n\tER_MAX_PREPARED_STMT_COUNT_REACHED                                  = 1461\n\tER_VIEW_RECURSIVE                                                   = 1462\n\tER_NON_GROUPING_FIELD_USED                                          = 1463\n\tER_TABLE_CANT_HANDLE_SPKEYS                                         = 1464\n\tER_NO_TRIGGERS_ON_SYSTEM_SCHEMA                                     = 1465\n\tER_REMOVED_SPACES                                                   = 1466\n\tER_AUTOINC_READ_FAILED                                              = 1467\n\tER_USERNAME                                                         = 1468\n\tER_HOSTNAME                                                         = 1469\n\tER_WRONG_STRING_LENGTH                                              = 1470\n\tER_NON_INSERTABLE_TABLE                                             = 1471\n\tER_ADMIN_WRONG_MRG_TABLE                                            = 1472\n\tER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT                             = 1473\n\tER_NAME_BECOMES_EMPTY                                               = 1474\n\tER_AMBIGUOUS_FIELD_TERM                                             = 1475\n\tER_FOREIGN_SERVER_EXISTS                                            = 1476\n\tER_FOREIGN_SERVER_DOESNT_EXIST                                      = 1477\n\tER_ILLEGAL_HA_CREATE_OPTION                                         = 1478\n\tER_PARTITION_REQUIRES_VALUES_ERROR                                  = 1479\n\tER_PARTITION_WRONG_VALUES_ERROR                                     = 1480\n\tER_PARTITION_MAXVALUE_ERROR                                         = 1481\n\tER_PARTITION_SUBPARTITION_ERROR                                     = 1482\n\tER_PARTITION_SUBPART_MIX_ERROR                                      = 1483\n\tER_PARTITION_WRONG_NO_PART_ERROR                                    = 1484\n\tER_PARTITION_WRONG_NO_SUBPART_ERROR                                 = 1485\n\tER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR                               = 1486\n\tER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR                             = 1487\n\tER_FIELD_NOT_FOUND_PART_ERROR                                       = 1488\n\tER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR                                = 1489\n\tER_INCONSISTENT_PARTITION_INFO_ERROR                                = 1490\n\tER_PARTITION_FUNC_NOT_ALLOWED_ERROR                                 = 1491\n\tER_PARTITIONS_MUST_BE_DEFINED_ERROR                                 = 1492\n\tER_RANGE_NOT_INCREASING_ERROR                                       = 1493\n\tER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR                             = 1494\n\tER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR                            = 1495\n\tER_PARTITION_ENTRY_ERROR                                            = 1496\n\tER_MIX_HANDLER_ERROR                                                = 1497\n\tER_PARTITION_NOT_DEFINED_ERROR                                      = 1498\n\tER_TOO_MANY_PARTITIONS_ERROR                                        = 1499\n\tER_SUBPARTITION_ERROR                                               = 1500\n\tER_CANT_CREATE_HANDLER_FILE                                         = 1501\n\tER_BLOB_FIELD_IN_PART_FUNC_ERROR                                    = 1502\n\tER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF                                 = 1503\n\tER_NO_PARTS_ERROR                                                   = 1504\n\tER_PARTITION_MGMT_ON_NONPARTITIONED                                 = 1505\n\tER_FOREIGN_KEY_ON_PARTITIONED                                       = 1506\n\tER_DROP_PARTITION_NON_EXISTENT                                      = 1507\n\tER_DROP_LAST_PARTITION                                              = 1508\n\tER_COALESCE_ONLY_ON_HASH_PARTITION                                  = 1509\n\tER_REORG_HASH_ONLY_ON_SAME_NO                                       = 1510\n\tER_REORG_NO_PARAM_ERROR                                             = 1511\n\tER_ONLY_ON_RANGE_LIST_PARTITION                                     = 1512\n\tER_ADD_PARTITION_SUBPART_ERROR                                      = 1513\n\tER_ADD_PARTITION_NO_NEW_PARTITION                                   = 1514\n\tER_COALESCE_PARTITION_NO_PARTITION                                  = 1515\n\tER_REORG_PARTITION_NOT_EXIST                                        = 1516\n\tER_SAME_NAME_PARTITION                                              = 1517\n\tER_NO_BINLOG_ERROR                                                  = 1518\n\tER_CONSECUTIVE_REORG_PARTITIONS                                     = 1519\n\tER_REORG_OUTSIDE_RANGE                                              = 1520\n\tER_PARTITION_FUNCTION_FAILURE                                       = 1521\n\tER_PART_STATE_ERROR                                                 = 1522\n\tER_LIMITED_PART_RANGE                                               = 1523\n\tER_PLUGIN_IS_NOT_LOADED                                             = 1524\n\tER_WRONG_VALUE                                                      = 1525\n\tER_NO_PARTITION_FOR_GIVEN_VALUE                                     = 1526\n\tER_FILEGROUP_OPTION_ONLY_ONCE                                       = 1527\n\tER_CREATE_FILEGROUP_FAILED                                          = 1528\n\tER_DROP_FILEGROUP_FAILED                                            = 1529\n\tER_TABLESPACE_AUTO_EXTEND_ERROR                                     = 1530\n\tER_WRONG_SIZE_NUMBER                                                = 1531\n\tER_SIZE_OVERFLOW_ERROR                                              = 1532\n\tER_ALTER_FILEGROUP_FAILED                                           = 1533\n\tER_BINLOG_ROW_LOGGING_FAILED                                        = 1534\n\tER_BINLOG_ROW_WRONG_TABLE_DEF                                       = 1535\n\tER_BINLOG_ROW_RBR_TO_SBR                                            = 1536\n\tER_EVENT_ALREADY_EXISTS                                             = 1537\n\tER_EVENT_STORE_FAILED                                               = 1538\n\tER_EVENT_DOES_NOT_EXIST                                             = 1539\n\tER_EVENT_CANT_ALTER                                                 = 1540\n\tER_EVENT_DROP_FAILED                                                = 1541\n\tER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG                           = 1542\n\tER_EVENT_ENDS_BEFORE_STARTS                                         = 1543\n\tER_EVENT_EXEC_TIME_IN_THE_PAST                                      = 1544\n\tER_EVENT_OPEN_TABLE_FAILED                                          = 1545\n\tER_EVENT_NEITHER_M_EXPR_NOR_M_AT                                    = 1546\n\tER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED                        = 1547\n\tER_OBSOLETE_CANNOT_LOAD_FROM_TABLE                                  = 1548\n\tER_EVENT_CANNOT_DELETE                                              = 1549\n\tER_EVENT_COMPILE_ERROR                                              = 1550\n\tER_EVENT_SAME_NAME                                                  = 1551\n\tER_EVENT_DATA_TOO_LONG                                              = 1552\n\tER_DROP_INDEX_FK                                                    = 1553\n\tER_WARN_DEPRECATED_SYNTAX_WITH_VER                                  = 1554\n\tER_CANT_WRITE_LOCK_LOG_TABLE                                        = 1555\n\tER_CANT_LOCK_LOG_TABLE                                              = 1556\n\tER_FOREIGN_DUPLICATE_KEY_OLD_UNUSED                                 = 1557\n\tER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE                             = 1558\n\tER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR                            = 1559\n\tER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT                    = 1560\n\tER_NDB_CANT_SWITCH_BINLOG_FORMAT                                    = 1561\n\tER_PARTITION_NO_TEMPORARY                                           = 1562\n\tER_PARTITION_CONST_DOMAIN_ERROR                                     = 1563\n\tER_PARTITION_FUNCTION_IS_NOT_ALLOWED                                = 1564\n\tER_DDL_LOG_ERROR                                                    = 1565\n\tER_NULL_IN_VALUES_LESS_THAN                                         = 1566\n\tER_WRONG_PARTITION_NAME                                             = 1567\n\tER_CANT_CHANGE_TX_CHARACTERISTICS                                   = 1568\n\tER_DUP_ENTRY_AUTOINCREMENT_CASE                                     = 1569\n\tER_EVENT_MODIFY_QUEUE_ERROR                                         = 1570\n\tER_EVENT_SET_VAR_ERROR                                              = 1571\n\tER_PARTITION_MERGE_ERROR                                            = 1572\n\tER_CANT_ACTIVATE_LOG                                                = 1573\n\tER_RBR_NOT_AVAILABLE                                                = 1574\n\tER_BASE64_DECODE_ERROR                                              = 1575\n\tER_EVENT_RECURSION_FORBIDDEN                                        = 1576\n\tER_EVENTS_DB_ERROR                                                  = 1577\n\tER_ONLY_INTEGERS_ALLOWED                                            = 1578\n\tER_UNSUPORTED_LOG_ENGINE                                            = 1579\n\tER_BAD_LOG_STATEMENT                                                = 1580\n\tER_CANT_RENAME_LOG_TABLE                                            = 1581\n\tER_WRONG_PARAMCOUNT_TO_NATIVE_FCT                                   = 1582\n\tER_WRONG_PARAMETERS_TO_NATIVE_FCT                                   = 1583\n\tER_WRONG_PARAMETERS_TO_STORED_FCT                                   = 1584\n\tER_NATIVE_FCT_NAME_COLLISION                                        = 1585\n\tER_DUP_ENTRY_WITH_KEY_NAME                                          = 1586\n\tER_BINLOG_PURGE_EMFILE                                              = 1587\n\tER_EVENT_CANNOT_CREATE_IN_THE_PAST                                  = 1588\n\tER_EVENT_CANNOT_ALTER_IN_THE_PAST                                   = 1589\n\tER_SLAVE_INCIDENT                                                   = 1590\n\tER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT                              = 1591\n\tER_BINLOG_UNSAFE_STATEMENT                                          = 1592\n\tER_SLAVE_FATAL_ERROR                                                = 1593\n\tER_SLAVE_RELAY_LOG_READ_FAILURE                                     = 1594\n\tER_SLAVE_RELAY_LOG_WRITE_FAILURE                                    = 1595\n\tER_SLAVE_CREATE_EVENT_FAILURE                                       = 1596\n\tER_SLAVE_MASTER_COM_FAILURE                                         = 1597\n\tER_BINLOG_LOGGING_IMPOSSIBLE                                        = 1598\n\tER_VIEW_NO_CREATION_CTX                                             = 1599\n\tER_VIEW_INVALID_CREATION_CTX                                        = 1600\n\tER_SR_INVALID_CREATION_CTX                                          = 1601\n\tER_TRG_CORRUPTED_FILE                                               = 1602\n\tER_TRG_NO_CREATION_CTX                                              = 1603\n\tER_TRG_INVALID_CREATION_CTX                                         = 1604\n\tER_EVENT_INVALID_CREATION_CTX                                       = 1605\n\tER_TRG_CANT_OPEN_TABLE                                              = 1606\n\tER_CANT_CREATE_SROUTINE                                             = 1607\n\tER_NEVER_USED                                                       = 1608\n\tER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT              = 1609\n\tER_SLAVE_CORRUPT_EVENT                                              = 1610\n\tER_LOAD_DATA_INVALID_COLUMN                                         = 1611\n\tER_LOG_PURGE_NO_FILE                                                = 1612\n\tER_XA_RBTIMEOUT                                                     = 1613\n\tER_XA_RBDEADLOCK                                                    = 1614\n\tER_NEED_REPREPARE                                                   = 1615\n\tER_DELAYED_NOT_SUPPORTED                                            = 1616\n\tWARN_NO_MASTER_INFO                                                 = 1617\n\tWARN_OPTION_IGNORED                                                 = 1618\n\tWARN_PLUGIN_DELETE_BUILTIN                                          = 1619\n\tWARN_PLUGIN_BUSY                                                    = 1620\n\tER_VARIABLE_IS_READONLY                                             = 1621\n\tER_WARN_ENGINE_TRANSACTION_ROLLBACK                                 = 1622\n\tER_SLAVE_HEARTBEAT_FAILURE                                          = 1623\n\tER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE                               = 1624\n\tER_NDB_REPLICATION_SCHEMA_ERROR                                     = 1625\n\tER_CONFLICT_FN_PARSE_ERROR                                          = 1626\n\tER_EXCEPTIONS_WRITE_ERROR                                           = 1627\n\tER_TOO_LONG_TABLE_COMMENT                                           = 1628\n\tER_TOO_LONG_FIELD_COMMENT                                           = 1629\n\tER_FUNC_INEXISTENT_NAME_COLLISION                                   = 1630\n\tER_DATABASE_NAME                                                    = 1631\n\tER_TABLE_NAME                                                       = 1632\n\tER_PARTITION_NAME                                                   = 1633\n\tER_SUBPARTITION_NAME                                                = 1634\n\tER_TEMPORARY_NAME                                                   = 1635\n\tER_RENAMED_NAME                                                     = 1636\n\tER_TOO_MANY_CONCURRENT_TRXS                                         = 1637\n\tWARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED                            = 1638\n\tER_DEBUG_SYNC_TIMEOUT                                               = 1639\n\tER_DEBUG_SYNC_HIT_LIMIT                                             = 1640\n\tER_DUP_SIGNAL_SET                                                   = 1641\n\tER_SIGNAL_WARN                                                      = 1642\n\tER_SIGNAL_NOT_FOUND                                                 = 1643\n\tER_SIGNAL_EXCEPTION                                                 = 1644\n\tER_RESIGNAL_WITHOUT_ACTIVE_HANDLER                                  = 1645\n\tER_SIGNAL_BAD_CONDITION_TYPE                                        = 1646\n\tWARN_COND_ITEM_TRUNCATED                                            = 1647\n\tER_COND_ITEM_TOO_LONG                                               = 1648\n\tER_UNKNOWN_LOCALE                                                   = 1649\n\tER_SLAVE_IGNORE_SERVER_IDS                                          = 1650\n\tER_QUERY_CACHE_DISABLED                                             = 1651\n\tER_SAME_NAME_PARTITION_FIELD                                        = 1652\n\tER_PARTITION_COLUMN_LIST_ERROR                                      = 1653\n\tER_WRONG_TYPE_COLUMN_VALUE_ERROR                                    = 1654\n\tER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR                             = 1655\n\tER_MAXVALUE_IN_VALUES_IN                                            = 1656\n\tER_TOO_MANY_VALUES_ERROR                                            = 1657\n\tER_ROW_SINGLE_PARTITION_FIELD_ERROR                                 = 1658\n\tER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD                        = 1659\n\tER_PARTITION_FIELDS_TOO_LONG                                        = 1660\n\tER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE                                = 1661\n\tER_BINLOG_ROW_MODE_AND_STMT_ENGINE                                  = 1662\n\tER_BINLOG_UNSAFE_AND_STMT_ENGINE                                    = 1663\n\tER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE                             = 1664\n\tER_BINLOG_STMT_MODE_AND_ROW_ENGINE                                  = 1665\n\tER_BINLOG_ROW_INJECTION_AND_STMT_MODE                               = 1666\n\tER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE                  = 1667\n\tER_BINLOG_UNSAFE_LIMIT                                              = 1668\n\tER_BINLOG_UNSAFE_INSERT_DELAYED                                     = 1669\n\tER_BINLOG_UNSAFE_SYSTEM_TABLE                                       = 1670\n\tER_BINLOG_UNSAFE_AUTOINC_COLUMNS                                    = 1671\n\tER_BINLOG_UNSAFE_UDF                                                = 1672\n\tER_BINLOG_UNSAFE_SYSTEM_VARIABLE                                    = 1673\n\tER_BINLOG_UNSAFE_SYSTEM_FUNCTION                                    = 1674\n\tER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS                               = 1675\n\tER_MESSAGE_AND_STATEMENT                                            = 1676\n\tER_SLAVE_CONVERSION_FAILED                                          = 1677\n\tER_SLAVE_CANT_CREATE_CONVERSION                                     = 1678\n\tER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT                 = 1679\n\tER_PATH_LENGTH                                                      = 1680\n\tER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT                            = 1681\n\tER_WRONG_NATIVE_TABLE_STRUCTURE                                     = 1682\n\tER_WRONG_PERFSCHEMA_USAGE                                           = 1683\n\tER_WARN_I_S_SKIPPED_TABLE                                           = 1684\n\tER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT                 = 1685\n\tER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT                    = 1686\n\tER_SPATIAL_MUST_HAVE_GEOM_COL                                       = 1687\n\tER_TOO_LONG_INDEX_COMMENT                                           = 1688\n\tER_LOCK_ABORTED                                                     = 1689\n\tER_DATA_OUT_OF_RANGE                                                = 1690\n\tER_WRONG_SPVAR_TYPE_IN_LIMIT                                        = 1691\n\tER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE           = 1692\n\tER_BINLOG_UNSAFE_MIXED_STATEMENT                                    = 1693\n\tER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN                   = 1694\n\tER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN                      = 1695\n\tER_FAILED_READ_FROM_PAR_FILE                                        = 1696\n\tER_VALUES_IS_NOT_INT_TYPE_ERROR                                     = 1697\n\tER_ACCESS_DENIED_NO_PASSWORD_ERROR                                  = 1698\n\tER_SET_PASSWORD_AUTH_PLUGIN                                         = 1699\n\tER_GRANT_PLUGIN_USER_EXISTS                                         = 1700\n\tER_TRUNCATE_ILLEGAL_FK                                              = 1701\n\tER_PLUGIN_IS_PERMANENT                                              = 1702\n\tER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN                           = 1703\n\tER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX                           = 1704\n\tER_STMT_CACHE_FULL                                                  = 1705\n\tER_MULTI_UPDATE_KEY_CONFLICT                                        = 1706\n\tER_TABLE_NEEDS_REBUILD                                              = 1707\n\tWARN_OPTION_BELOW_LIMIT                                             = 1708\n\tER_INDEX_COLUMN_TOO_LONG                                            = 1709\n\tER_ERROR_IN_TRIGGER_BODY                                            = 1710\n\tER_ERROR_IN_UNKNOWN_TRIGGER_BODY                                    = 1711\n\tER_INDEX_CORRUPT                                                    = 1712\n\tER_UNDO_RECORD_TOO_BIG                                              = 1713\n\tER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT                               = 1714\n\tER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE                               = 1715\n\tER_BINLOG_UNSAFE_REPLACE_SELECT                                     = 1716\n\tER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT                               = 1717\n\tER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT                              = 1718\n\tER_BINLOG_UNSAFE_UPDATE_IGNORE                                      = 1719\n\tER_PLUGIN_NO_UNINSTALL                                              = 1720\n\tER_PLUGIN_NO_INSTALL                                                = 1721\n\tER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT                               = 1722\n\tER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC                              = 1723\n\tER_BINLOG_UNSAFE_INSERT_TWO_KEYS                                    = 1724\n\tER_TABLE_IN_FK_CHECK                                                = 1725\n\tER_UNSUPPORTED_ENGINE                                               = 1726\n\tER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST                                  = 1727\n\tER_CANNOT_LOAD_FROM_TABLE_V2                                        = 1728\n\tER_MASTER_DELAY_VALUE_OUT_OF_RANGE                                  = 1729\n\tER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT               = 1730\n\tER_PARTITION_EXCHANGE_DIFFERENT_OPTION                              = 1731\n\tER_PARTITION_EXCHANGE_PART_TABLE                                    = 1732\n\tER_PARTITION_EXCHANGE_TEMP_TABLE                                    = 1733\n\tER_PARTITION_INSTEAD_OF_SUBPARTITION                                = 1734\n\tER_UNKNOWN_PARTITION                                                = 1735\n\tER_TABLES_DIFFERENT_METADATA                                        = 1736\n\tER_ROW_DOES_NOT_MATCH_PARTITION                                     = 1737\n\tER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX                               = 1738\n\tER_WARN_INDEX_NOT_APPLICABLE                                        = 1739\n\tER_PARTITION_EXCHANGE_FOREIGN_KEY                                   = 1740\n\tER_NO_SUCH_KEY_VALUE                                                = 1741\n\tER_RPL_INFO_DATA_TOO_LONG                                           = 1742\n\tER_NETWORK_READ_EVENT_CHECKSUM_FAILURE                              = 1743\n\tER_BINLOG_READ_EVENT_CHECKSUM_FAILURE                               = 1744\n\tER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX                          = 1745\n\tER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT                         = 1746\n\tER_PARTITION_CLAUSE_ON_NONPARTITIONED                               = 1747\n\tER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET                           = 1748\n\tER_NO_SUCH_PARTITION__UNUSED                                        = 1749\n\tER_CHANGE_RPL_INFO_REPOSITORY_FAILURE                               = 1750\n\tER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE            = 1751\n\tER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE            = 1752\n\tER_MTS_FEATURE_IS_NOT_SUPPORTED                                     = 1753\n\tER_MTS_UPDATED_DBS_GREATER_MAX                                      = 1754\n\tER_MTS_CANT_PARALLEL                                                = 1755\n\tER_MTS_INCONSISTENT_DATA                                            = 1756\n\tER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING                         = 1757\n\tER_DA_INVALID_CONDITION_NUMBER                                      = 1758\n\tER_INSECURE_PLAIN_TEXT                                              = 1759\n\tER_INSECURE_CHANGE_MASTER                                           = 1760\n\tER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO                            = 1761\n\tER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO                         = 1762\n\tER_SQLTHREAD_WITH_SECURE_SLAVE                                      = 1763\n\tER_TABLE_HAS_NO_FT                                                  = 1764\n\tER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER                           = 1765\n\tER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION                             = 1766\n\tER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST                               = 1767\n\tER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION_WHEN_GTID_NEXT_LIST_IS_NULL = 1768\n\tER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION                             = 1769\n\tER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL        = 1770\n\tER_SKIPPING_LOGGED_TRANSACTION                                      = 1771\n\tER_MALFORMED_GTID_SET_SPECIFICATION                                 = 1772\n\tER_MALFORMED_GTID_SET_ENCODING                                      = 1773\n\tER_MALFORMED_GTID_SPECIFICATION                                     = 1774\n\tER_GNO_EXHAUSTED                                                    = 1775\n\tER_BAD_SLAVE_AUTO_POSITION                                          = 1776\n\tER_AUTO_POSITION_REQUIRES_GTID_MODE_ON                              = 1777\n\tER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET             = 1778\n\tER_GTID_MODE_2_OR_3_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON            = 1779\n\tER_GTID_MODE_REQUIRES_BINLOG                                        = 1780\n\tER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF                 = 1781\n\tER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON             = 1782\n\tER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF        = 1783\n\tER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF                           = 1784\n\tER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE                              = 1785\n\tER_GTID_UNSAFE_CREATE_SELECT                                        = 1786\n\tER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION           = 1787\n\tER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME                     = 1788\n\tER_MASTER_HAS_PURGED_REQUIRED_GTIDS                                 = 1789\n\tER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID                              = 1790\n\tER_UNKNOWN_EXPLAIN_FORMAT                                           = 1791\n\tER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION                            = 1792\n\tER_TOO_LONG_TABLE_PARTITION_COMMENT                                 = 1793\n\tER_SLAVE_CONFIGURATION                                              = 1794\n\tER_INNODB_FT_LIMIT                                                  = 1795\n\tER_INNODB_NO_FT_TEMP_TABLE                                          = 1796\n\tER_INNODB_FT_WRONG_DOCID_COLUMN                                     = 1797\n\tER_INNODB_FT_WRONG_DOCID_INDEX                                      = 1798\n\tER_INNODB_ONLINE_LOG_TOO_BIG                                        = 1799\n\tER_UNKNOWN_ALTER_ALGORITHM                                          = 1800\n\tER_UNKNOWN_ALTER_LOCK                                               = 1801\n\tER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS                             = 1802\n\tER_MTS_RECOVERY_FAILURE                                             = 1803\n\tER_MTS_RESET_WORKERS                                                = 1804\n\tER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2                              = 1805\n\tER_SLAVE_SILENT_RETRY_TRANSACTION                                   = 1806\n\tER_DISCARD_FK_CHECKS_RUNNING                                        = 1807\n\tER_TABLE_SCHEMA_MISMATCH                                            = 1808\n\tER_TABLE_IN_SYSTEM_TABLESPACE                                       = 1809\n\tER_IO_READ_ERROR                                                    = 1810\n\tER_IO_WRITE_ERROR                                                   = 1811\n\tER_TABLESPACE_MISSING                                               = 1812\n\tER_TABLESPACE_EXISTS                                                = 1813\n\tER_TABLESPACE_DISCARDED                                             = 1814\n\tER_INTERNAL_ERROR                                                   = 1815\n\tER_INNODB_IMPORT_ERROR                                              = 1816\n\tER_INNODB_INDEX_CORRUPT                                             = 1817\n\tER_INVALID_YEAR_COLUMN_LENGTH                                       = 1818\n\tER_NOT_VALID_PASSWORD                                               = 1819\n\tER_MUST_CHANGE_PASSWORD                                             = 1820\n\tER_FK_NO_INDEX_CHILD                                                = 1821\n\tER_FK_NO_INDEX_PARENT                                               = 1822\n\tER_FK_FAIL_ADD_SYSTEM                                               = 1823\n\tER_FK_CANNOT_OPEN_PARENT                                            = 1824\n\tER_FK_INCORRECT_OPTION                                              = 1825\n\tER_FK_DUP_NAME                                                      = 1826\n\tER_PASSWORD_FORMAT                                                  = 1827\n\tER_FK_COLUMN_CANNOT_DROP                                            = 1828\n\tER_FK_COLUMN_CANNOT_DROP_CHILD                                      = 1829\n\tER_FK_COLUMN_NOT_NULL                                               = 1830\n\tER_DUP_INDEX                                                        = 1831\n\tER_FK_COLUMN_CANNOT_CHANGE                                          = 1832\n\tER_FK_COLUMN_CANNOT_CHANGE_CHILD                                    = 1833\n\tER_FK_CANNOT_DELETE_PARENT                                          = 1834\n\tER_MALFORMED_PACKET                                                 = 1835\n\tER_READ_ONLY_MODE                                                   = 1836\n\tER_GTID_NEXT_TYPE_UNDEFINED_GROUP                                   = 1837\n\tER_VARIABLE_NOT_SETTABLE_IN_SP                                      = 1838\n\tER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF                       = 1839\n\tER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY             = 1840\n\tER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY               = 1841\n\tER_GTID_PURGED_WAS_CHANGED                                          = 1842\n\tER_GTID_EXECUTED_WAS_CHANGED                                        = 1843\n\tER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES                              = 1844\n\tER_ALTER_OPERATION_NOT_SUPPORTED                                    = 1845\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON                             = 1846\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY                        = 1847\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION                   = 1848\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME                   = 1849\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE                 = 1850\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK                    = 1851\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE                      = 1852\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK                        = 1853\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC                     = 1854\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS                  = 1855\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS                  = 1856\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS                         = 1857\n\tER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE                 = 1858\n\tER_DUP_UNKNOWN_IN_INDEX                                             = 1859\n\tER_IDENT_CAUSES_TOO_LONG_PATH                                       = 1860\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL                    = 1861\n\tER_MUST_CHANGE_PASSWORD_LOGIN                                       = 1862\n\tER_ROW_IN_WRONG_PARTITION                                           = 1863\n\tER_ERROR_LAST                                                       = 1863\n)\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/errname.go",
    "content": "package mysql\n\nvar MySQLErrName = map[uint16]string{\n\tER_HASHCHK:                                       \"hashchk\",\n\tER_NISAMCHK:                                      \"isamchk\",\n\tER_NO:                                            \"NO\",\n\tER_YES:                                           \"YES\",\n\tER_CANT_CREATE_FILE:                              \"Can't create file '%-.200s' (errno: %d - %s)\",\n\tER_CANT_CREATE_TABLE:                             \"Can't create table '%-.200s' (errno: %d)\",\n\tER_CANT_CREATE_DB:                                \"Can't create database '%-.192s' (errno: %d)\",\n\tER_DB_CREATE_EXISTS:                              \"Can't create database '%-.192s'; database exists\",\n\tER_DB_DROP_EXISTS:                                \"Can't drop database '%-.192s'; database doesn't exist\",\n\tER_DB_DROP_DELETE:                                \"Error dropping database (can't delete '%-.192s', errno: %d)\",\n\tER_DB_DROP_RMDIR:                                 \"Error dropping database (can't rmdir '%-.192s', errno: %d)\",\n\tER_CANT_DELETE_FILE:                              \"Error on delete of '%-.192s' (errno: %d - %s)\",\n\tER_CANT_FIND_SYSTEM_REC:                          \"Can't read record in system table\",\n\tER_CANT_GET_STAT:                                 \"Can't get status of '%-.200s' (errno: %d - %s)\",\n\tER_CANT_GET_WD:                                   \"Can't get working directory (errno: %d - %s)\",\n\tER_CANT_LOCK:                                     \"Can't lock file (errno: %d - %s)\",\n\tER_CANT_OPEN_FILE:                                \"Can't open file: '%-.200s' (errno: %d - %s)\",\n\tER_FILE_NOT_FOUND:                                \"Can't find file: '%-.200s' (errno: %d - %s)\",\n\tER_CANT_READ_DIR:                                 \"Can't read dir of '%-.192s' (errno: %d - %s)\",\n\tER_CANT_SET_WD:                                   \"Can't change dir to '%-.192s' (errno: %d - %s)\",\n\tER_CHECKREAD:                                     \"Record has changed since last read in table '%-.192s'\",\n\tER_DISK_FULL:                                     \"Disk full (%s); waiting for someone to free some space... (errno: %d - %s)\",\n\tER_DUP_KEY:                                       \"Can't write; duplicate key in table '%-.192s'\",\n\tER_ERROR_ON_CLOSE:                                \"Error on close of '%-.192s' (errno: %d - %s)\",\n\tER_ERROR_ON_READ:                                 \"Error reading file '%-.200s' (errno: %d - %s)\",\n\tER_ERROR_ON_RENAME:                               \"Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s)\",\n\tER_ERROR_ON_WRITE:                                \"Error writing file '%-.200s' (errno: %d - %s)\",\n\tER_FILE_USED:                                     \"'%-.192s' is locked against change\",\n\tER_FILSORT_ABORT:                                 \"Sort aborted\",\n\tER_FORM_NOT_FOUND:                                \"View '%-.192s' doesn't exist for '%-.192s'\",\n\tER_GET_ERRNO:                                     \"Got error %d from storage engine\",\n\tER_ILLEGAL_HA:                                    \"Table storage engine for '%-.192s' doesn't have this option\",\n\tER_KEY_NOT_FOUND:                                 \"Can't find record in '%-.192s'\",\n\tER_NOT_FORM_FILE:                                 \"Incorrect information in file: '%-.200s'\",\n\tER_NOT_KEYFILE:                                   \"Incorrect key file for table '%-.200s'; try to repair it\",\n\tER_OLD_KEYFILE:                                   \"Old key file for table '%-.192s'; repair it!\",\n\tER_OPEN_AS_READONLY:                              \"Table '%-.192s' is read only\",\n\tER_OUTOFMEMORY:                                   \"Out of memory; restart server and try again (needed %d bytes)\",\n\tER_OUT_OF_SORTMEMORY:                             \"Out of sort memory, consider increasing server sort buffer size\",\n\tER_UNEXPECTED_EOF:                                \"Unexpected EOF found when reading file '%-.192s' (errno: %d - %s)\",\n\tER_CON_COUNT_ERROR:                               \"Too many connections\",\n\tER_OUT_OF_RESOURCES:                              \"Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space\",\n\tER_BAD_HOST_ERROR:                                \"Can't get hostname for your address\",\n\tER_HANDSHAKE_ERROR:                               \"Bad handshake\",\n\tER_DBACCESS_DENIED_ERROR:                         \"Access denied for user '%-.48s'@'%-.64s' to database '%-.192s'\",\n\tER_ACCESS_DENIED_ERROR:                           \"Access denied for user '%-.48s'@'%-.64s' (using password: %s)\",\n\tER_NO_DB_ERROR:                                   \"No database selected\",\n\tER_UNKNOWN_COM_ERROR:                             \"Unknown command\",\n\tER_BAD_NULL_ERROR:                                \"Column '%-.192s' cannot be null\",\n\tER_BAD_DB_ERROR:                                  \"Unknown database '%-.192s'\",\n\tER_TABLE_EXISTS_ERROR:                            \"Table '%-.192s' already exists\",\n\tER_BAD_TABLE_ERROR:                               \"Unknown table '%-.100s'\",\n\tER_NON_UNIQ_ERROR:                                \"Column '%-.192s' in %-.192s is ambiguous\",\n\tER_SERVER_SHUTDOWN:                               \"Server shutdown in progress\",\n\tER_BAD_FIELD_ERROR:                               \"Unknown column '%-.192s' in '%-.192s'\",\n\tER_WRONG_FIELD_WITH_GROUP:                        \"'%-.192s' isn't in GROUP BY\",\n\tER_WRONG_GROUP_FIELD:                             \"Can't group on '%-.192s'\",\n\tER_WRONG_SUM_SELECT:                              \"Statement has sum functions and columns in same statement\",\n\tER_WRONG_VALUE_COUNT:                             \"Column count doesn't match value count\",\n\tER_TOO_LONG_IDENT:                                \"Identifier name '%-.100s' is too long\",\n\tER_DUP_FIELDNAME:                                 \"Duplicate column name '%-.192s'\",\n\tER_DUP_KEYNAME:                                   \"Duplicate key name '%-.192s'\",\n\tER_DUP_ENTRY:                                     \"Duplicate entry '%-.192s' for key %d\",\n\tER_WRONG_FIELD_SPEC:                              \"Incorrect column specifier for column '%-.192s'\",\n\tER_PARSE_ERROR:                                   \"%s near '%-.80s' at line %d\",\n\tER_EMPTY_QUERY:                                   \"Query was empty\",\n\tER_NONUNIQ_TABLE:                                 \"Not unique table/alias: '%-.192s'\",\n\tER_INVALID_DEFAULT:                               \"Invalid default value for '%-.192s'\",\n\tER_MULTIPLE_PRI_KEY:                              \"Multiple primary key defined\",\n\tER_TOO_MANY_KEYS:                                 \"Too many keys specified; max %d keys allowed\",\n\tER_TOO_MANY_KEY_PARTS:                            \"Too many key parts specified; max %d parts allowed\",\n\tER_TOO_LONG_KEY:                                  \"Specified key was too long; max key length is %d bytes\",\n\tER_KEY_COLUMN_DOES_NOT_EXITS:                     \"Key column '%-.192s' doesn't exist in table\",\n\tER_BLOB_USED_AS_KEY:                              \"BLOB column '%-.192s' can't be used in key specification with the used table type\",\n\tER_TOO_BIG_FIELDLENGTH:                           \"Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead\",\n\tER_WRONG_AUTO_KEY:                                \"Incorrect table definition; there can be only one auto column and it must be defined as a key\",\n\tER_READY:                                         \"%s: ready for connections.\\nVersion: '%s'  socket: '%s'  port: %d\",\n\tER_NORMAL_SHUTDOWN:                               \"%s: Normal shutdown\\n\",\n\tER_GOT_SIGNAL:                                    \"%s: Got signal %d. Aborting!\\n\",\n\tER_SHUTDOWN_COMPLETE:                             \"%s: Shutdown complete\\n\",\n\tER_FORCING_CLOSE:                                 \"%s: Forcing close of thread %d  user: '%-.48s'\\n\",\n\tER_IPSOCK_ERROR:                                  \"Can't create IP socket\",\n\tER_NO_SUCH_INDEX:                                 \"Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table\",\n\tER_WRONG_FIELD_TERMINATORS:                       \"Field separator argument is not what is expected; check the manual\",\n\tER_BLOBS_AND_NO_TERMINATED:                       \"You can't use fixed rowlength with BLOBs; please use 'fields terminated by'\",\n\tER_TEXTFILE_NOT_READABLE:                         \"The file '%-.128s' must be in the database directory or be readable by all\",\n\tER_FILE_EXISTS_ERROR:                             \"File '%-.200s' already exists\",\n\tER_LOAD_INFO:                                     \"Records: %d  Deleted: %d  Skipped: %d  Warnings: %d\",\n\tER_ALTER_INFO:                                    \"Records: %d  Duplicates: %d\",\n\tER_WRONG_SUB_KEY:                                 \"Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys\",\n\tER_CANT_REMOVE_ALL_FIELDS:                        \"You can't delete all columns with ALTER TABLE; use DROP TABLE instead\",\n\tER_CANT_DROP_FIELD_OR_KEY:                        \"Can't DROP '%-.192s'; check that column/key exists\",\n\tER_INSERT_INFO:                                   \"Records: %d  Duplicates: %d  Warnings: %d\",\n\tER_UPDATE_TABLE_USED:                             \"You can't specify target table '%-.192s' for update in FROM clause\",\n\tER_NO_SUCH_THREAD:                                \"Unknown thread id: %d\",\n\tER_KILL_DENIED_ERROR:                             \"You are not owner of thread %d\",\n\tER_NO_TABLES_USED:                                \"No tables used\",\n\tER_TOO_BIG_SET:                                   \"Too many strings for column %-.192s and SET\",\n\tER_NO_UNIQUE_LOGFILE:                             \"Can't generate a unique log-filename %-.200s.(1-999)\\n\",\n\tER_TABLE_NOT_LOCKED_FOR_WRITE:                    \"Table '%-.192s' was locked with a READ lock and can't be updated\",\n\tER_TABLE_NOT_LOCKED:                              \"Table '%-.192s' was not locked with LOCK TABLES\",\n\tER_BLOB_CANT_HAVE_DEFAULT:                        \"BLOB/TEXT column '%-.192s' can't have a default value\",\n\tER_WRONG_DB_NAME:                                 \"Incorrect database name '%-.100s'\",\n\tER_WRONG_TABLE_NAME:                              \"Incorrect table name '%-.100s'\",\n\tER_TOO_BIG_SELECT:                                \"The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay\",\n\tER_UNKNOWN_ERROR:                                 \"Unknown error\",\n\tER_UNKNOWN_PROCEDURE:                             \"Unknown procedure '%-.192s'\",\n\tER_WRONG_PARAMCOUNT_TO_PROCEDURE:                 \"Incorrect parameter count to procedure '%-.192s'\",\n\tER_WRONG_PARAMETERS_TO_PROCEDURE:                 \"Incorrect parameters to procedure '%-.192s'\",\n\tER_UNKNOWN_TABLE:                                 \"Unknown table '%-.192s' in %-.32s\",\n\tER_FIELD_SPECIFIED_TWICE:                         \"Column '%-.192s' specified twice\",\n\tER_INVALID_GROUP_FUNC_USE:                        \"Invalid use of group function\",\n\tER_UNSUPPORTED_EXTENSION:                         \"Table '%-.192s' uses an extension that doesn't exist in this MySQL version\",\n\tER_TABLE_MUST_HAVE_COLUMNS:                       \"A table must have at least 1 column\",\n\tER_RECORD_FILE_FULL:                              \"The table '%-.192s' is full\",\n\tER_UNKNOWN_CHARACTER_SET:                         \"Unknown character set: '%-.64s'\",\n\tER_TOO_MANY_TABLES:                               \"Too many tables; MySQL can only use %d tables in a join\",\n\tER_TOO_MANY_FIELDS:                               \"Too many columns\",\n\tER_TOO_BIG_ROWSIZE:                               \"Row size too large. The maximum row size for the used table type, not counting BLOBs, is %d. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs\",\n\tER_STACK_OVERRUN:                                 \"Thread stack overrun:  Used: %d of a %d stack.  Use 'mysqld --thread_stack=#' to specify a bigger stack if needed\",\n\tER_WRONG_OUTER_JOIN:                              \"Cross dependency found in OUTER JOIN; examine your ON conditions\",\n\tER_NULL_COLUMN_IN_INDEX:                          \"Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler\",\n\tER_CANT_FIND_UDF:                                 \"Can't load function '%-.192s'\",\n\tER_CANT_INITIALIZE_UDF:                           \"Can't initialize function '%-.192s'; %-.80s\",\n\tER_UDF_NO_PATHS:                                  \"No paths allowed for shared library\",\n\tER_UDF_EXISTS:                                    \"Function '%-.192s' already exists\",\n\tER_CANT_OPEN_LIBRARY:                             \"Can't open shared library '%-.192s' (errno: %d %-.128s)\",\n\tER_CANT_FIND_DL_ENTRY:                            \"Can't find symbol '%-.128s' in library\",\n\tER_FUNCTION_NOT_DEFINED:                          \"Function '%-.192s' is not defined\",\n\tER_HOST_IS_BLOCKED:                               \"Host '%-.64s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'\",\n\tER_HOST_NOT_PRIVILEGED:                           \"Host '%-.64s' is not allowed to connect to this MySQL server\",\n\tER_PASSWORD_ANONYMOUS_USER:                       \"You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords\",\n\tER_PASSWORD_NOT_ALLOWED:                          \"You must have privileges to update tables in the mysql database to be able to change passwords for others\",\n\tER_PASSWORD_NO_MATCH:                             \"Can't find any matching row in the user table\",\n\tER_UPDATE_INFO:                                   \"Rows matched: %d  Changed: %d  Warnings: %d\",\n\tER_CANT_CREATE_THREAD:                            \"Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug\",\n\tER_WRONG_VALUE_COUNT_ON_ROW:                      \"Column count doesn't match value count at row %d\",\n\tER_CANT_REOPEN_TABLE:                             \"Can't reopen table: '%-.192s'\",\n\tER_INVALID_USE_OF_NULL:                           \"Invalid use of NULL value\",\n\tER_REGEXP_ERROR:                                  \"Got error '%-.64s' from regexp\",\n\tER_MIX_OF_GROUP_FUNC_AND_FIELDS:                  \"Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause\",\n\tER_NONEXISTING_GRANT:                             \"There is no such grant defined for user '%-.48s' on host '%-.64s'\",\n\tER_TABLEACCESS_DENIED_ERROR:                      \"%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s'\",\n\tER_COLUMNACCESS_DENIED_ERROR:                     \"%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'\",\n\tER_ILLEGAL_GRANT_FOR_TABLE:                       \"Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used\",\n\tER_GRANT_WRONG_HOST_OR_USER:                      \"The host or user argument to GRANT is too long\",\n\tER_NO_SUCH_TABLE:                                 \"Table '%-.192s.%-.192s' doesn't exist\",\n\tER_NONEXISTING_TABLE_GRANT:                       \"There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'\",\n\tER_NOT_ALLOWED_COMMAND:                           \"The used command is not allowed with this MySQL version\",\n\tER_SYNTAX_ERROR:                                  \"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use\",\n\tER_DELAYED_CANT_CHANGE_LOCK:                      \"Delayed insert thread couldn't get requested lock for table %-.192s\",\n\tER_TOO_MANY_DELAYED_THREADS:                      \"Too many delayed threads in use\",\n\tER_ABORTING_CONNECTION:                           \"Aborted connection %d to db: '%-.192s' user: '%-.48s' (%-.64s)\",\n\tER_NET_PACKET_TOO_LARGE:                          \"Got a packet bigger than 'max_allowed_packet' bytes\",\n\tER_NET_READ_ERROR_FROM_PIPE:                      \"Got a read error from the connection pipe\",\n\tER_NET_FCNTL_ERROR:                               \"Got an error from fcntl()\",\n\tER_NET_PACKETS_OUT_OF_ORDER:                      \"Got packets out of order\",\n\tER_NET_UNCOMPRESS_ERROR:                          \"Couldn't uncompress communication packet\",\n\tER_NET_READ_ERROR:                                \"Got an error reading communication packets\",\n\tER_NET_READ_INTERRUPTED:                          \"Got timeout reading communication packets\",\n\tER_NET_ERROR_ON_WRITE:                            \"Got an error writing communication packets\",\n\tER_NET_WRITE_INTERRUPTED:                         \"Got timeout writing communication packets\",\n\tER_TOO_LONG_STRING:                               \"Result string is longer than 'max_allowed_packet' bytes\",\n\tER_TABLE_CANT_HANDLE_BLOB:                        \"The used table type doesn't support BLOB/TEXT columns\",\n\tER_TABLE_CANT_HANDLE_AUTO_INCREMENT:              \"The used table type doesn't support AUTO_INCREMENT columns\",\n\tER_DELAYED_INSERT_TABLE_LOCKED:                   \"INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES\",\n\tER_WRONG_COLUMN_NAME:                             \"Incorrect column name '%-.100s'\",\n\tER_WRONG_KEY_COLUMN:                              \"The used storage engine can't index column '%-.192s'\",\n\tER_WRONG_MRG_TABLE:                               \"Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist\",\n\tER_DUP_UNIQUE:                                    \"Can't write, because of unique constraint, to table '%-.192s'\",\n\tER_BLOB_KEY_WITHOUT_LENGTH:                       \"BLOB/TEXT column '%-.192s' used in key specification without a key length\",\n\tER_PRIMARY_CANT_HAVE_NULL:                        \"All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead\",\n\tER_TOO_MANY_ROWS:                                 \"Result consisted of more than one row\",\n\tER_REQUIRES_PRIMARY_KEY:                          \"This table type requires a primary key\",\n\tER_NO_RAID_COMPILED:                              \"This version of MySQL is not compiled with RAID support\",\n\tER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE:               \"You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column\",\n\tER_KEY_DOES_NOT_EXITS:                            \"Key '%-.192s' doesn't exist in table '%-.192s'\",\n\tER_CHECK_NO_SUCH_TABLE:                           \"Can't open table\",\n\tER_CHECK_NOT_IMPLEMENTED:                         \"The storage engine for the table doesn't support %s\",\n\tER_CANT_DO_THIS_DURING_AN_TRANSACTION:            \"You are not allowed to execute this command in a transaction\",\n\tER_ERROR_DURING_COMMIT:                           \"Got error %d during COMMIT\",\n\tER_ERROR_DURING_ROLLBACK:                         \"Got error %d during ROLLBACK\",\n\tER_ERROR_DURING_FLUSH_LOGS:                       \"Got error %d during FLUSH_LOGS\",\n\tER_ERROR_DURING_CHECKPOINT:                       \"Got error %d during CHECKPOINT\",\n\tER_NEW_ABORTING_CONNECTION:                       \"Aborted connection %d to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)\",\n\tER_DUMP_NOT_IMPLEMENTED:                          \"The storage engine for the table does not support binary table dump\",\n\tER_FLUSH_MASTER_BINLOG_CLOSED:                    \"Binlog closed, cannot RESET MASTER\",\n\tER_INDEX_REBUILD:                                 \"Failed rebuilding the index of  dumped table '%-.192s'\",\n\tER_MASTER:                                        \"Error from master: '%-.64s'\",\n\tER_MASTER_NET_READ:                               \"Net error reading from master\",\n\tER_MASTER_NET_WRITE:                              \"Net error writing to master\",\n\tER_FT_MATCHING_KEY_NOT_FOUND:                     \"Can't find FULLTEXT index matching the column list\",\n\tER_LOCK_OR_ACTIVE_TRANSACTION:                    \"Can't execute the given command because you have active locked tables or an active transaction\",\n\tER_UNKNOWN_SYSTEM_VARIABLE:                       \"Unknown system variable '%-.64s'\",\n\tER_CRASHED_ON_USAGE:                              \"Table '%-.192s' is marked as crashed and should be repaired\",\n\tER_CRASHED_ON_REPAIR:                             \"Table '%-.192s' is marked as crashed and last (automatic?) repair failed\",\n\tER_WARNING_NOT_COMPLETE_ROLLBACK:                 \"Some non-transactional changed tables couldn't be rolled back\",\n\tER_TRANS_CACHE_FULL:                              \"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again\",\n\tER_SLAVE_MUST_STOP:                               \"This operation cannot be performed with a running slave; run STOP SLAVE first\",\n\tER_SLAVE_NOT_RUNNING:                             \"This operation requires a running slave; configure slave and do START SLAVE\",\n\tER_BAD_SLAVE:                                     \"The server is not configured as slave; fix in config file or with CHANGE MASTER TO\",\n\tER_MASTER_INFO:                                   \"Could not initialize master info structure; more error messages can be found in the MySQL error log\",\n\tER_SLAVE_THREAD:                                  \"Could not create slave thread; check system resources\",\n\tER_TOO_MANY_USER_CONNECTIONS:                     \"User %-.64s already has more than 'max_user_connections' active connections\",\n\tER_SET_CONSTANTS_ONLY:                            \"You may only use constant expressions with SET\",\n\tER_LOCK_WAIT_TIMEOUT:                             \"Lock wait timeout exceeded; try restarting transaction\",\n\tER_LOCK_TABLE_FULL:                               \"The total number of locks exceeds the lock table size\",\n\tER_READ_ONLY_TRANSACTION:                         \"Update locks cannot be acquired during a READ UNCOMMITTED transaction\",\n\tER_DROP_DB_WITH_READ_LOCK:                        \"DROP DATABASE not allowed while thread is holding global read lock\",\n\tER_CREATE_DB_WITH_READ_LOCK:                      \"CREATE DATABASE not allowed while thread is holding global read lock\",\n\tER_WRONG_ARGUMENTS:                               \"Incorrect arguments to %s\",\n\tER_NO_PERMISSION_TO_CREATE_USER:                  \"'%-.48s'@'%-.64s' is not allowed to create new users\",\n\tER_UNION_TABLES_IN_DIFFERENT_DIR:                 \"Incorrect table definition; all MERGE tables must be in the same database\",\n\tER_LOCK_DEADLOCK:                                 \"Deadlock found when trying to get lock; try restarting transaction\",\n\tER_TABLE_CANT_HANDLE_FT:                          \"The used table type doesn't support FULLTEXT indexes\",\n\tER_CANNOT_ADD_FOREIGN:                            \"Cannot add foreign key constraint\",\n\tER_NO_REFERENCED_ROW:                             \"Cannot add or update a child row: a foreign key constraint fails\",\n\tER_ROW_IS_REFERENCED:                             \"Cannot delete or update a parent row: a foreign key constraint fails\",\n\tER_CONNECT_TO_MASTER:                             \"Error connecting to master: %-.128s\",\n\tER_QUERY_ON_MASTER:                               \"Error running query on master: %-.128s\",\n\tER_ERROR_WHEN_EXECUTING_COMMAND:                  \"Error when executing command %s: %-.128s\",\n\tER_WRONG_USAGE:                                   \"Incorrect usage of %s and %s\",\n\tER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT:             \"The used SELECT statements have a different number of columns\",\n\tER_CANT_UPDATE_WITH_READLOCK:                     \"Can't execute the query because you have a conflicting read lock\",\n\tER_MIXING_NOT_ALLOWED:                            \"Mixing of transactional and non-transactional tables is disabled\",\n\tER_DUP_ARGUMENT:                                  \"Option '%s' used twice in statement\",\n\tER_USER_LIMIT_REACHED:                            \"User '%-.64s' has exceeded the '%s' resource (current value: %d)\",\n\tER_SPECIFIC_ACCESS_DENIED_ERROR:                  \"Access denied; you need (at least one of) the %-.128s privilege(s) for this operation\",\n\tER_LOCAL_VARIABLE:                                \"Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL\",\n\tER_GLOBAL_VARIABLE:                               \"Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL\",\n\tER_NO_DEFAULT:                                    \"Variable '%-.64s' doesn't have a default value\",\n\tER_WRONG_VALUE_FOR_VAR:                           \"Variable '%-.64s' can't be set to the value of '%-.200s'\",\n\tER_WRONG_TYPE_FOR_VAR:                            \"Incorrect argument type to variable '%-.64s'\",\n\tER_VAR_CANT_BE_READ:                              \"Variable '%-.64s' can only be set, not read\",\n\tER_CANT_USE_OPTION_HERE:                          \"Incorrect usage/placement of '%s'\",\n\tER_NOT_SUPPORTED_YET:                             \"This version of MySQL doesn't yet support '%s'\",\n\tER_MASTER_FATAL_ERROR_READING_BINLOG:             \"Got fatal error %d from master when reading data from binary log: '%-.320s'\",\n\tER_SLAVE_IGNORED_TABLE:                           \"Slave SQL thread ignored the query because of replicate-*-table rules\",\n\tER_INCORRECT_GLOBAL_LOCAL_VAR:                    \"Variable '%-.192s' is a %s variable\",\n\tER_WRONG_FK_DEF:                                  \"Incorrect foreign key definition for '%-.192s': %s\",\n\tER_KEY_REF_DO_NOT_MATCH_TABLE_REF:                \"Key reference and table reference don't match\",\n\tER_OPERAND_COLUMNS:                               \"Operand should contain %d column(s)\",\n\tER_SUBQUERY_NO_1_ROW:                             \"Subquery returns more than 1 row\",\n\tER_UNKNOWN_STMT_HANDLER:                          \"Unknown prepared statement handler (%.*s) given to %s\",\n\tER_CORRUPT_HELP_DB:                               \"Help database is corrupt or does not exist\",\n\tER_CYCLIC_REFERENCE:                              \"Cyclic reference on subqueries\",\n\tER_AUTO_CONVERT:                                  \"Converting column '%s' from %s to %s\",\n\tER_ILLEGAL_REFERENCE:                             \"Reference '%-.64s' not supported (%s)\",\n\tER_DERIVED_MUST_HAVE_ALIAS:                       \"Every derived table must have its own alias\",\n\tER_SELECT_REDUCED:                                \"Select %d was reduced during optimization\",\n\tER_TABLENAME_NOT_ALLOWED_HERE:                    \"Table '%-.192s' from one of the SELECTs cannot be used in %-.32s\",\n\tER_NOT_SUPPORTED_AUTH_MODE:                       \"Client does not support authentication protocol requested by server; consider upgrading MySQL client\",\n\tER_SPATIAL_CANT_HAVE_NULL:                        \"All parts of a SPATIAL index must be NOT NULL\",\n\tER_COLLATION_CHARSET_MISMATCH:                    \"COLLATION '%s' is not valid for CHARACTER SET '%s'\",\n\tER_SLAVE_WAS_RUNNING:                             \"Slave is already running\",\n\tER_SLAVE_WAS_NOT_RUNNING:                         \"Slave already has been stopped\",\n\tER_TOO_BIG_FOR_UNCOMPRESS:                        \"Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)\",\n\tER_ZLIB_Z_MEM_ERROR:                              \"ZLIB: Not enough memory\",\n\tER_ZLIB_Z_BUF_ERROR:                              \"ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)\",\n\tER_ZLIB_Z_DATA_ERROR:                             \"ZLIB: Input data corrupted\",\n\tER_CUT_VALUE_GROUP_CONCAT:                        \"Row %d was cut by GROUP_CONCAT()\",\n\tER_WARN_TOO_FEW_RECORDS:                          \"Row %d doesn't contain data for all columns\",\n\tER_WARN_TOO_MANY_RECORDS:                         \"Row %d was truncated; it contained more data than there were input columns\",\n\tER_WARN_NULL_TO_NOTNULL:                          \"Column set to default value; NULL supplied to NOT NULL column '%s' at row %d\",\n\tER_WARN_DATA_OUT_OF_RANGE:                        \"Out of range value for column '%s' at row %d\",\n\tWARN_DATA_TRUNCATED:                              \"Data truncated for column '%s' at row %d\",\n\tER_WARN_USING_OTHER_HANDLER:                      \"Using storage engine %s for table '%s'\",\n\tER_CANT_AGGREGATE_2COLLATIONS:                    \"Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'\",\n\tER_DROP_USER:                                     \"Cannot drop one or more of the requested users\",\n\tER_REVOKE_GRANTS:                                 \"Can't revoke all privileges for one or more of the requested users\",\n\tER_CANT_AGGREGATE_3COLLATIONS:                    \"Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'\",\n\tER_CANT_AGGREGATE_NCOLLATIONS:                    \"Illegal mix of collations for operation '%s'\",\n\tER_VARIABLE_IS_NOT_STRUCT:                        \"Variable '%-.64s' is not a variable component (can't be used as XXXX.variable_name)\",\n\tER_UNKNOWN_COLLATION:                             \"Unknown collation: '%-.64s'\",\n\tER_SLAVE_IGNORED_SSL_PARAMS:                      \"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started\",\n\tER_SERVER_IS_IN_SECURE_AUTH_MODE:                 \"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format\",\n\tER_WARN_FIELD_RESOLVED:                           \"Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d\",\n\tER_BAD_SLAVE_UNTIL_COND:                          \"Incorrect parameter or combination of parameters for START SLAVE UNTIL\",\n\tER_MISSING_SKIP_SLAVE:                            \"It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart\",\n\tER_UNTIL_COND_IGNORED:                            \"SQL thread is not to be started so UNTIL options are ignored\",\n\tER_WRONG_NAME_FOR_INDEX:                          \"Incorrect index name '%-.100s'\",\n\tER_WRONG_NAME_FOR_CATALOG:                        \"Incorrect catalog name '%-.100s'\",\n\tER_WARN_QC_RESIZE:                                \"Query cache failed to set size %d; new query cache size is %d\",\n\tER_BAD_FT_COLUMN:                                 \"Column '%-.192s' cannot be part of FULLTEXT index\",\n\tER_UNKNOWN_KEY_CACHE:                             \"Unknown key cache '%-.100s'\",\n\tER_WARN_HOSTNAME_WONT_WORK:                       \"MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work\",\n\tER_UNKNOWN_STORAGE_ENGINE:                        \"Unknown storage engine '%s'\",\n\tER_WARN_DEPRECATED_SYNTAX:                        \"'%s' is deprecated and will be removed in a future release. Please use %s instead\",\n\tER_NON_UPDATABLE_TABLE:                           \"The target table %-.100s of the %s is not updatable\",\n\tER_FEATURE_DISABLED:                              \"The '%s' feature is disabled; you need MySQL built with '%s' to have it working\",\n\tER_OPTION_PREVENTS_STATEMENT:                     \"The MySQL server is running with the %s option so it cannot execute this statement\",\n\tER_DUPLICATED_VALUE_IN_TYPE:                      \"Column '%-.100s' has duplicated value '%-.64s' in %s\",\n\tER_TRUNCATED_WRONG_VALUE:                         \"Truncated incorrect %-.32s value: '%-.128s'\",\n\tER_TOO_MUCH_AUTO_TIMESTAMP_COLS:                  \"Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause\",\n\tER_INVALID_ON_UPDATE:                             \"Invalid ON UPDATE clause for '%-.192s' column\",\n\tER_UNSUPPORTED_PS:                                \"This command is not supported in the prepared statement protocol yet\",\n\tER_GET_ERRMSG:                                    \"Got error %d '%-.100s' from %s\",\n\tER_GET_TEMPORARY_ERRMSG:                          \"Got temporary error %d '%-.100s' from %s\",\n\tER_UNKNOWN_TIME_ZONE:                             \"Unknown or incorrect time zone: '%-.64s'\",\n\tER_WARN_INVALID_TIMESTAMP:                        \"Invalid TIMESTAMP value in column '%s' at row %d\",\n\tER_INVALID_CHARACTER_STRING:                      \"Invalid %s character string: '%.64s'\",\n\tER_WARN_ALLOWED_PACKET_OVERFLOWED:                \"Result of %s() was larger than max_allowed_packet (%d) - truncated\",\n\tER_CONFLICTING_DECLARATIONS:                      \"Conflicting declarations: '%s%s' and '%s%s'\",\n\tER_SP_NO_RECURSIVE_CREATE:                        \"Can't create a %s from within another stored routine\",\n\tER_SP_ALREADY_EXISTS:                             \"%s %s already exists\",\n\tER_SP_DOES_NOT_EXIST:                             \"%s %s does not exist\",\n\tER_SP_DROP_FAILED:                                \"Failed to DROP %s %s\",\n\tER_SP_STORE_FAILED:                               \"Failed to CREATE %s %s\",\n\tER_SP_LILABEL_MISMATCH:                           \"%s with no matching label: %s\",\n\tER_SP_LABEL_REDEFINE:                             \"Redefining label %s\",\n\tER_SP_LABEL_MISMATCH:                             \"End-label %s without match\",\n\tER_SP_UNINIT_VAR:                                 \"Referring to uninitialized variable %s\",\n\tER_SP_BADSELECT:                                  \"PROCEDURE %s can't return a result set in the given context\",\n\tER_SP_BADRETURN:                                  \"RETURN is only allowed in a FUNCTION\",\n\tER_SP_BADSTATEMENT:                               \"%s is not allowed in stored procedures\",\n\tER_UPDATE_LOG_DEPRECATED_IGNORED:                 \"The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored.\",\n\tER_UPDATE_LOG_DEPRECATED_TRANSLATED:              \"The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN.\",\n\tER_QUERY_INTERRUPTED:                             \"Query execution was interrupted\",\n\tER_SP_WRONG_NO_OF_ARGS:                           \"Incorrect number of arguments for %s %s; expected %d, got %d\",\n\tER_SP_COND_MISMATCH:                              \"Undefined CONDITION: %s\",\n\tER_SP_NORETURN:                                   \"No RETURN found in FUNCTION %s\",\n\tER_SP_NORETURNEND:                                \"FUNCTION %s ended without RETURN\",\n\tER_SP_BAD_CURSOR_QUERY:                           \"Cursor statement must be a SELECT\",\n\tER_SP_BAD_CURSOR_SELECT:                          \"Cursor SELECT must not have INTO\",\n\tER_SP_CURSOR_MISMATCH:                            \"Undefined CURSOR: %s\",\n\tER_SP_CURSOR_ALREADY_OPEN:                        \"Cursor is already open\",\n\tER_SP_CURSOR_NOT_OPEN:                            \"Cursor is not open\",\n\tER_SP_UNDECLARED_VAR:                             \"Undeclared variable: %s\",\n\tER_SP_WRONG_NO_OF_FETCH_ARGS:                     \"Incorrect number of FETCH variables\",\n\tER_SP_FETCH_NO_DATA:                              \"No data - zero rows fetched, selected, or processed\",\n\tER_SP_DUP_PARAM:                                  \"Duplicate parameter: %s\",\n\tER_SP_DUP_VAR:                                    \"Duplicate variable: %s\",\n\tER_SP_DUP_COND:                                   \"Duplicate condition: %s\",\n\tER_SP_DUP_CURS:                                   \"Duplicate cursor: %s\",\n\tER_SP_CANT_ALTER:                                 \"Failed to ALTER %s %s\",\n\tER_SP_SUBSELECT_NYI:                              \"Subquery value not supported\",\n\tER_STMT_NOT_ALLOWED_IN_SF_OR_TRG:                 \"%s is not allowed in stored function or trigger\",\n\tER_SP_VARCOND_AFTER_CURSHNDLR:                    \"Variable or condition declaration after cursor or handler declaration\",\n\tER_SP_CURSOR_AFTER_HANDLER:                       \"Cursor declaration after handler declaration\",\n\tER_SP_CASE_NOT_FOUND:                             \"Case not found for CASE statement\",\n\tER_FPARSER_TOO_BIG_FILE:                          \"Configuration file '%-.192s' is too big\",\n\tER_FPARSER_BAD_HEADER:                            \"Malformed file type header in file '%-.192s'\",\n\tER_FPARSER_EOF_IN_COMMENT:                        \"Unexpected end of file while parsing comment '%-.200s'\",\n\tER_FPARSER_ERROR_IN_PARAMETER:                    \"Error while parsing parameter '%-.192s' (line: '%-.192s')\",\n\tER_FPARSER_EOF_IN_UNKNOWN_PARAMETER:              \"Unexpected end of file while skipping unknown parameter '%-.192s'\",\n\tER_VIEW_NO_EXPLAIN:                               \"EXPLAIN/SHOW can not be issued; lacking privileges for underlying table\",\n\tER_FRM_UNKNOWN_TYPE:                              \"File '%-.192s' has unknown type '%-.64s' in its header\",\n\tER_WRONG_OBJECT:                                  \"'%-.192s.%-.192s' is not %s\",\n\tER_NONUPDATEABLE_COLUMN:                          \"Column '%-.192s' is not updatable\",\n\tER_VIEW_SELECT_DERIVED:                           \"View's SELECT contains a subquery in the FROM clause\",\n\tER_VIEW_SELECT_CLAUSE:                            \"View's SELECT contains a '%s' clause\",\n\tER_VIEW_SELECT_VARIABLE:                          \"View's SELECT contains a variable or parameter\",\n\tER_VIEW_SELECT_TMPTABLE:                          \"View's SELECT refers to a temporary table '%-.192s'\",\n\tER_VIEW_WRONG_LIST:                               \"View's SELECT and view's field list have different column counts\",\n\tER_WARN_VIEW_MERGE:                               \"View merge algorithm can't be used here for now (assumed undefined algorithm)\",\n\tER_WARN_VIEW_WITHOUT_KEY:                         \"View being updated does not have complete key of underlying table in it\",\n\tER_VIEW_INVALID:                                  \"View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them\",\n\tER_SP_NO_DROP_SP:                                 \"Can't drop or alter a %s from within another stored routine\",\n\tER_SP_GOTO_IN_HNDLR:                              \"GOTO is not allowed in a stored procedure handler\",\n\tER_TRG_ALREADY_EXISTS:                            \"Trigger already exists\",\n\tER_TRG_DOES_NOT_EXIST:                            \"Trigger does not exist\",\n\tER_TRG_ON_VIEW_OR_TEMP_TABLE:                     \"Trigger's '%-.192s' is view or temporary table\",\n\tER_TRG_CANT_CHANGE_ROW:                           \"Updating of %s row is not allowed in %strigger\",\n\tER_TRG_NO_SUCH_ROW_IN_TRG:                        \"There is no %s row in %s trigger\",\n\tER_NO_DEFAULT_FOR_FIELD:                          \"Field '%-.192s' doesn't have a default value\",\n\tER_DIVISION_BY_ZERO:                              \"Division by 0\",\n\tER_TRUNCATED_WRONG_VALUE_FOR_FIELD:               \"Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d\",\n\tER_ILLEGAL_VALUE_FOR_TYPE:                        \"Illegal %s '%-.192s' value found during parsing\",\n\tER_VIEW_NONUPD_CHECK:                             \"CHECK OPTION on non-updatable view '%-.192s.%-.192s'\",\n\tER_VIEW_CHECK_FAILED:                             \"CHECK OPTION failed '%-.192s.%-.192s'\",\n\tER_PROCACCESS_DENIED_ERROR:                       \"%-.16s command denied to user '%-.48s'@'%-.64s' for routine '%-.192s'\",\n\tER_RELAY_LOG_FAIL:                                \"Failed purging old relay logs: %s\",\n\tER_PASSWD_LENGTH:                                 \"Password hash should be a %d-digit hexadecimal number\",\n\tER_UNKNOWN_TARGET_BINLOG:                         \"Target log not found in binlog index\",\n\tER_IO_ERR_LOG_INDEX_READ:                         \"I/O error reading log index file\",\n\tER_BINLOG_PURGE_PROHIBITED:                       \"Server configuration does not permit binlog purge\",\n\tER_FSEEK_FAIL:                                    \"Failed on fseek()\",\n\tER_BINLOG_PURGE_FATAL_ERR:                        \"Fatal error during log purge\",\n\tER_LOG_IN_USE:                                    \"A purgeable log is in use, will not purge\",\n\tER_LOG_PURGE_UNKNOWN_ERR:                         \"Unknown error during log purge\",\n\tER_RELAY_LOG_INIT:                                \"Failed initializing relay log position: %s\",\n\tER_NO_BINARY_LOGGING:                             \"You are not using binary logging\",\n\tER_RESERVED_SYNTAX:                               \"The '%-.64s' syntax is reserved for purposes internal to the MySQL server\",\n\tER_WSAS_FAILED:                                   \"WSAStartup Failed\",\n\tER_DIFF_GROUPS_PROC:                              \"Can't handle procedures with different groups yet\",\n\tER_NO_GROUP_FOR_PROC:                             \"Select must have a group with this procedure\",\n\tER_ORDER_WITH_PROC:                               \"Can't use ORDER clause with this procedure\",\n\tER_LOGGING_PROHIBIT_CHANGING_OF:                  \"Binary logging and replication forbid changing the global server %s\",\n\tER_NO_FILE_MAPPING:                               \"Can't map file: %-.200s, errno: %d\",\n\tER_WRONG_MAGIC:                                   \"Wrong magic in %-.64s\",\n\tER_PS_MANY_PARAM:                                 \"Prepared statement contains too many placeholders\",\n\tER_KEY_PART_0:                                    \"Key part '%-.192s' length cannot be 0\",\n\tER_VIEW_CHECKSUM:                                 \"View text checksum failed\",\n\tER_VIEW_MULTIUPDATE:                              \"Can not modify more than one base table through a join view '%-.192s.%-.192s'\",\n\tER_VIEW_NO_INSERT_FIELD_LIST:                     \"Can not insert into join view '%-.192s.%-.192s' without fields list\",\n\tER_VIEW_DELETE_MERGE_VIEW:                        \"Can not delete from join view '%-.192s.%-.192s'\",\n\tER_CANNOT_USER:                                   \"Operation %s failed for %.256s\",\n\tER_XAER_NOTA:                                     \"XAER_NOTA: Unknown XID\",\n\tER_XAER_INVAL:                                    \"XAER_INVAL: Invalid arguments (or unsupported command)\",\n\tER_XAER_RMFAIL:                                   \"XAER_RMFAIL: The command cannot be executed when global transaction is in the  %.64s state\",\n\tER_XAER_OUTSIDE:                                  \"XAER_OUTSIDE: Some work is done outside global transaction\",\n\tER_XAER_RMERR:                                    \"XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency\",\n\tER_XA_RBROLLBACK:                                 \"XA_RBROLLBACK: Transaction branch was rolled back\",\n\tER_NONEXISTING_PROC_GRANT:                        \"There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'\",\n\tER_PROC_AUTO_GRANT_FAIL:                          \"Failed to grant EXECUTE and ALTER ROUTINE privileges\",\n\tER_PROC_AUTO_REVOKE_FAIL:                         \"Failed to revoke all privileges to dropped routine\",\n\tER_DATA_TOO_LONG:                                 \"Data too long for column '%s' at row %d\",\n\tER_SP_BAD_SQLSTATE:                               \"Bad SQLSTATE: '%s'\",\n\tER_STARTUP:                                       \"%s: ready for connections.\\nVersion: '%s'  socket: '%s'  port: %d  %s\",\n\tER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR:              \"Can't load value from file with fixed size rows to variable\",\n\tER_CANT_CREATE_USER_WITH_GRANT:                   \"You are not allowed to create a user with GRANT\",\n\tER_WRONG_VALUE_FOR_TYPE:                          \"Incorrect %-.32s value: '%-.128s' for function %-.32s\",\n\tER_TABLE_DEF_CHANGED:                             \"Table definition has changed, please retry transaction\",\n\tER_SP_DUP_HANDLER:                                \"Duplicate handler declared in the same block\",\n\tER_SP_NOT_VAR_ARG:                                \"OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger\",\n\tER_SP_NO_RETSET:                                  \"Not allowed to return a result set from a %s\",\n\tER_CANT_CREATE_GEOMETRY_OBJECT:                   \"Cannot get geometry object from data you send to the GEOMETRY field\",\n\tER_FAILED_ROUTINE_BREAK_BINLOG:                   \"A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes\",\n\tER_BINLOG_UNSAFE_ROUTINE:                         \"This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)\",\n\tER_BINLOG_CREATE_ROUTINE_NEED_SUPER:              \"You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)\",\n\tER_EXEC_STMT_WITH_OPEN_CURSOR:                    \"You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.\",\n\tER_STMT_HAS_NO_OPEN_CURSOR:                       \"The statement (%d) has no open cursor.\",\n\tER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG:               \"Explicit or implicit commit is not allowed in stored function or trigger.\",\n\tER_NO_DEFAULT_FOR_VIEW_FIELD:                     \"Field of view '%-.192s.%-.192s' underlying table doesn't have a default value\",\n\tER_SP_NO_RECURSION:                               \"Recursive stored functions and triggers are not allowed.\",\n\tER_TOO_BIG_SCALE:                                 \"Too big scale %d specified for column '%-.192s'. Maximum is %d.\",\n\tER_TOO_BIG_PRECISION:                             \"Too big precision %d specified for column '%-.192s'. Maximum is %d.\",\n\tER_M_BIGGER_THAN_D:                               \"For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s').\",\n\tER_WRONG_LOCK_OF_SYSTEM_TABLE:                    \"You can't combine write-locking of system tables with other tables or lock types\",\n\tER_CONNECT_TO_FOREIGN_DATA_SOURCE:                \"Unable to connect to foreign data source: %.64s\",\n\tER_QUERY_ON_FOREIGN_DATA_SOURCE:                  \"There was a problem processing the query on the foreign data source. Data source error: %-.64s\",\n\tER_FOREIGN_DATA_SOURCE_DOESNT_EXIST:              \"The foreign data source you are trying to reference does not exist. Data source error:  %-.64s\",\n\tER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE:       \"Can't create federated table. The data source connection string '%-.64s' is not in the correct format\",\n\tER_FOREIGN_DATA_STRING_INVALID:                   \"The data source connection string '%-.64s' is not in the correct format\",\n\tER_CANT_CREATE_FEDERATED_TABLE:                   \"Can't create federated table. Foreign data src error:  %-.64s\",\n\tER_TRG_IN_WRONG_SCHEMA:                           \"Trigger in wrong schema\",\n\tER_STACK_OVERRUN_NEED_MORE:                       \"Thread stack overrun:  %d bytes used of a %d byte stack, and %d bytes needed.  Use 'mysqld --thread_stack=#' to specify a bigger stack.\",\n\tER_TOO_LONG_BODY:                                 \"Routine body for '%-.100s' is too long\",\n\tER_WARN_CANT_DROP_DEFAULT_KEYCACHE:               \"Cannot drop default keycache\",\n\tER_TOO_BIG_DISPLAYWIDTH:                          \"Display width out of range for column '%-.192s' (max = %d)\",\n\tER_XAER_DUPID:                                    \"XAER_DUPID: The XID already exists\",\n\tER_DATETIME_FUNCTION_OVERFLOW:                    \"Datetime function: %-.32s field overflow\",\n\tER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG:           \"Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.\",\n\tER_VIEW_PREVENT_UPDATE:                           \"The definition of table '%-.192s' prevents operation %.192s on table '%-.192s'.\",\n\tER_PS_NO_RECURSION:                               \"The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner\",\n\tER_SP_CANT_SET_AUTOCOMMIT:                        \"Not allowed to set autocommit from a stored function or trigger\",\n\tER_MALFORMED_DEFINER:                             \"Definer is not fully qualified\",\n\tER_VIEW_FRM_NO_USER:                              \"View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!\",\n\tER_VIEW_OTHER_USER:                               \"You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer\",\n\tER_NO_SUCH_USER:                                  \"The user specified as a definer ('%-.64s'@'%-.64s') does not exist\",\n\tER_FORBID_SCHEMA_CHANGE:                          \"Changing schema from '%-.192s' to '%-.192s' is not allowed.\",\n\tER_ROW_IS_REFERENCED_2:                           \"Cannot delete or update a parent row: a foreign key constraint fails (%.192s)\",\n\tER_NO_REFERENCED_ROW_2:                           \"Cannot add or update a child row: a foreign key constraint fails (%.192s)\",\n\tER_SP_BAD_VAR_SHADOW:                             \"Variable '%-.64s' must be quoted with `...`, or renamed\",\n\tER_TRG_NO_DEFINER:                                \"No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.\",\n\tER_OLD_FILE_FORMAT:                               \"'%-.192s' has an old format, you should re-create the '%s' object(s)\",\n\tER_SP_RECURSION_LIMIT:                            \"Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %.192s\",\n\tER_SP_PROC_TABLE_CORRUPT:                         \"Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)\",\n\tER_SP_WRONG_NAME:                                 \"Incorrect routine name '%-.192s'\",\n\tER_TABLE_NEEDS_UPGRADE:                           \"Table upgrade required. Please do \\\"REPAIR TABLE `%-.32s`\\\" or dump/reload to fix it!\",\n\tER_SP_NO_AGGREGATE:                               \"AGGREGATE is not supported for stored functions\",\n\tER_MAX_PREPARED_STMT_COUNT_REACHED:               \"Can't create more than max_prepared_stmt_count statements (current value: %d)\",\n\tER_VIEW_RECURSIVE:                                \"`%-.192s`.`%-.192s` contains view recursion\",\n\tER_NON_GROUPING_FIELD_USED:                       \"Non-grouping field '%-.192s' is used in %-.64s clause\",\n\tER_TABLE_CANT_HANDLE_SPKEYS:                      \"The used table type doesn't support SPATIAL indexes\",\n\tER_NO_TRIGGERS_ON_SYSTEM_SCHEMA:                  \"Triggers can not be created on system tables\",\n\tER_REMOVED_SPACES:                                \"Leading spaces are removed from name '%s'\",\n\tER_AUTOINC_READ_FAILED:                           \"Failed to read auto-increment value from storage engine\",\n\tER_USERNAME:                                      \"user name\",\n\tER_HOSTNAME:                                      \"host name\",\n\tER_WRONG_STRING_LENGTH:                           \"String '%-.70s' is too long for %s (should be no longer than %d)\",\n\tER_NON_INSERTABLE_TABLE:                          \"The target table %-.100s of the %s is not insertable-into\",\n\tER_ADMIN_WRONG_MRG_TABLE:                         \"Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist\",\n\tER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT:          \"Too high level of nesting for select\",\n\tER_NAME_BECOMES_EMPTY:                            \"Name '%-.64s' has become ''\",\n\tER_AMBIGUOUS_FIELD_TERM:                          \"First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY\",\n\tER_FOREIGN_SERVER_EXISTS:                         \"The foreign server, %s, you are trying to create already exists.\",\n\tER_FOREIGN_SERVER_DOESNT_EXIST:                   \"The foreign server name you are trying to reference does not exist. Data source error:  %-.64s\",\n\tER_ILLEGAL_HA_CREATE_OPTION:                      \"Table storage engine '%-.64s' does not support the create option '%.64s'\",\n\tER_PARTITION_REQUIRES_VALUES_ERROR:               \"Syntax error: %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition\",\n\tER_PARTITION_WRONG_VALUES_ERROR:                  \"Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition\",\n\tER_PARTITION_MAXVALUE_ERROR:                      \"MAXVALUE can only be used in last partition definition\",\n\tER_PARTITION_SUBPARTITION_ERROR:                  \"Subpartitions can only be hash partitions and by key\",\n\tER_PARTITION_SUBPART_MIX_ERROR:                   \"Must define subpartitions on all partitions if on one partition\",\n\tER_PARTITION_WRONG_NO_PART_ERROR:                 \"Wrong number of partitions defined, mismatch with previous setting\",\n\tER_PARTITION_WRONG_NO_SUBPART_ERROR:              \"Wrong number of subpartitions defined, mismatch with previous setting\",\n\tER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR:            \"Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed\",\n\tER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR:          \"Expression in RANGE/LIST VALUES must be constant\",\n\tER_FIELD_NOT_FOUND_PART_ERROR:                    \"Field in list of fields for partition function not found in table\",\n\tER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR:             \"List of fields is only allowed in KEY partitions\",\n\tER_INCONSISTENT_PARTITION_INFO_ERROR:             \"The partition info in the frm file is not consistent with what can be written into the frm file\",\n\tER_PARTITION_FUNC_NOT_ALLOWED_ERROR:              \"The %-.192s function returns the wrong type\",\n\tER_PARTITIONS_MUST_BE_DEFINED_ERROR:              \"For %-.64s partitions each partition must be defined\",\n\tER_RANGE_NOT_INCREASING_ERROR:                    \"VALUES LESS THAN value must be strictly increasing for each partition\",\n\tER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR:          \"VALUES value must be of same type as partition function\",\n\tER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR:         \"Multiple definition of same constant in list partitioning\",\n\tER_PARTITION_ENTRY_ERROR:                         \"Partitioning can not be used stand-alone in query\",\n\tER_MIX_HANDLER_ERROR:                             \"The mix of handlers in the partitions is not allowed in this version of MySQL\",\n\tER_PARTITION_NOT_DEFINED_ERROR:                   \"For the partitioned engine it is necessary to define all %-.64s\",\n\tER_TOO_MANY_PARTITIONS_ERROR:                     \"Too many partitions (including subpartitions) were defined\",\n\tER_SUBPARTITION_ERROR:                            \"It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning\",\n\tER_CANT_CREATE_HANDLER_FILE:                      \"Failed to create specific handler file\",\n\tER_BLOB_FIELD_IN_PART_FUNC_ERROR:                 \"A BLOB field is not allowed in partition function\",\n\tER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF:              \"A %-.192s must include all columns in the table's partitioning function\",\n\tER_NO_PARTS_ERROR:                                \"Number of %-.64s = 0 is not an allowed value\",\n\tER_PARTITION_MGMT_ON_NONPARTITIONED:              \"Partition management on a not partitioned table is not possible\",\n\tER_FOREIGN_KEY_ON_PARTITIONED:                    \"Foreign key clause is not yet supported in conjunction with partitioning\",\n\tER_DROP_PARTITION_NON_EXISTENT:                   \"Error in list of partitions to %-.64s\",\n\tER_DROP_LAST_PARTITION:                           \"Cannot remove all partitions, use DROP TABLE instead\",\n\tER_COALESCE_ONLY_ON_HASH_PARTITION:               \"COALESCE PARTITION can only be used on HASH/KEY partitions\",\n\tER_REORG_HASH_ONLY_ON_SAME_NO:                    \"REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers\",\n\tER_REORG_NO_PARAM_ERROR:                          \"REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs\",\n\tER_ONLY_ON_RANGE_LIST_PARTITION:                  \"%-.64s PARTITION can only be used on RANGE/LIST partitions\",\n\tER_ADD_PARTITION_SUBPART_ERROR:                   \"Trying to Add partition(s) with wrong number of subpartitions\",\n\tER_ADD_PARTITION_NO_NEW_PARTITION:                \"At least one partition must be added\",\n\tER_COALESCE_PARTITION_NO_PARTITION:               \"At least one partition must be coalesced\",\n\tER_REORG_PARTITION_NOT_EXIST:                     \"More partitions to reorganize than there are partitions\",\n\tER_SAME_NAME_PARTITION:                           \"Duplicate partition name %-.192s\",\n\tER_NO_BINLOG_ERROR:                               \"It is not allowed to shut off binlog on this command\",\n\tER_CONSECUTIVE_REORG_PARTITIONS:                  \"When reorganizing a set of partitions they must be in consecutive order\",\n\tER_REORG_OUTSIDE_RANGE:                           \"Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range\",\n\tER_PARTITION_FUNCTION_FAILURE:                    \"Partition function not supported in this version for this handler\",\n\tER_PART_STATE_ERROR:                              \"Partition state cannot be defined from CREATE/ALTER TABLE\",\n\tER_LIMITED_PART_RANGE:                            \"The %-.64s handler only supports 32 bit integers in VALUES\",\n\tER_PLUGIN_IS_NOT_LOADED:                          \"Plugin '%-.192s' is not loaded\",\n\tER_WRONG_VALUE:                                   \"Incorrect %-.32s value: '%-.128s'\",\n\tER_NO_PARTITION_FOR_GIVEN_VALUE:                  \"Table has no partition for value %-.64s\",\n\tER_FILEGROUP_OPTION_ONLY_ONCE:                    \"It is not allowed to specify %s more than once\",\n\tER_CREATE_FILEGROUP_FAILED:                       \"Failed to create %s\",\n\tER_DROP_FILEGROUP_FAILED:                         \"Failed to drop %s\",\n\tER_TABLESPACE_AUTO_EXTEND_ERROR:                  \"The handler doesn't support autoextend of tablespaces\",\n\tER_WRONG_SIZE_NUMBER:                             \"A size parameter was incorrectly specified, either number or on the form 10M\",\n\tER_SIZE_OVERFLOW_ERROR:                           \"The size number was correct but we don't allow the digit part to be more than 2 billion\",\n\tER_ALTER_FILEGROUP_FAILED:                        \"Failed to alter: %s\",\n\tER_BINLOG_ROW_LOGGING_FAILED:                     \"Writing one row to the row-based binary log failed\",\n\tER_BINLOG_ROW_WRONG_TABLE_DEF:                    \"Table definition on master and slave does not match: %s\",\n\tER_BINLOG_ROW_RBR_TO_SBR:                         \"Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events\",\n\tER_EVENT_ALREADY_EXISTS:                          \"Event '%-.192s' already exists\",\n\tER_EVENT_STORE_FAILED:                            \"Failed to store event %s. Error code %d from storage engine.\",\n\tER_EVENT_DOES_NOT_EXIST:                          \"Unknown event '%-.192s'\",\n\tER_EVENT_CANT_ALTER:                              \"Failed to alter event '%-.192s'\",\n\tER_EVENT_DROP_FAILED:                             \"Failed to drop %s\",\n\tER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG:        \"INTERVAL is either not positive or too big\",\n\tER_EVENT_ENDS_BEFORE_STARTS:                      \"ENDS is either invalid or before STARTS\",\n\tER_EVENT_EXEC_TIME_IN_THE_PAST:                   \"Event execution time is in the past. Event has been disabled\",\n\tER_EVENT_OPEN_TABLE_FAILED:                       \"Failed to open mysql.event\",\n\tER_EVENT_NEITHER_M_EXPR_NOR_M_AT:                 \"No datetime expression provided\",\n\tER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED:     \"Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted\",\n\tER_OBSOLETE_CANNOT_LOAD_FROM_TABLE:               \"Cannot load from mysql.%s. The table is probably corrupted\",\n\tER_EVENT_CANNOT_DELETE:                           \"Failed to delete the event from mysql.event\",\n\tER_EVENT_COMPILE_ERROR:                           \"Error during compilation of event's body\",\n\tER_EVENT_SAME_NAME:                               \"Same old and new event name\",\n\tER_EVENT_DATA_TOO_LONG:                           \"Data for column '%s' too long\",\n\tER_DROP_INDEX_FK:                                 \"Cannot drop index '%-.192s': needed in a foreign key constraint\",\n\tER_WARN_DEPRECATED_SYNTAX_WITH_VER:               \"The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead\",\n\tER_CANT_WRITE_LOCK_LOG_TABLE:                     \"You can't write-lock a log table. Only read access is possible\",\n\tER_CANT_LOCK_LOG_TABLE:                           \"You can't use locks with log tables.\",\n\tER_FOREIGN_DUPLICATE_KEY_OLD_UNUSED:              \"Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry\",\n\tER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE:          \"Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysql_upgrade to fix this error.\",\n\tER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR:         \"Cannot switch out of the row-based binary log format when the session has open temporary tables\",\n\tER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT: \"Cannot change the binary logging format inside a stored function or trigger\",\n\tER_NDB_CANT_SWITCH_BINLOG_FORMAT:                 \"The NDB cluster engine does not support changing the binlog format on the fly yet\",\n\tER_PARTITION_NO_TEMPORARY:                        \"Cannot create temporary table with partitions\",\n\tER_PARTITION_CONST_DOMAIN_ERROR:                  \"Partition constant is out of partition function domain\",\n\tER_PARTITION_FUNCTION_IS_NOT_ALLOWED:             \"This partition function is not allowed\",\n\tER_DDL_LOG_ERROR:                                 \"Error in DDL log\",\n\tER_NULL_IN_VALUES_LESS_THAN:                      \"Not allowed to use NULL value in VALUES LESS THAN\",\n\tER_WRONG_PARTITION_NAME:                          \"Incorrect partition name\",\n\tER_CANT_CHANGE_TX_CHARACTERISTICS:                \"Transaction characteristics can't be changed while a transaction is in progress\",\n\tER_DUP_ENTRY_AUTOINCREMENT_CASE:                  \"ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '%-.192s' for key '%-.192s'\",\n\tER_EVENT_MODIFY_QUEUE_ERROR:                      \"Internal scheduler error %d\",\n\tER_EVENT_SET_VAR_ERROR:                           \"Error during starting/stopping of the scheduler. Error code %d\",\n\tER_PARTITION_MERGE_ERROR:                         \"Engine cannot be used in partitioned tables\",\n\tER_CANT_ACTIVATE_LOG:                             \"Cannot activate '%-.64s' log\",\n\tER_RBR_NOT_AVAILABLE:                             \"The server was not built with row-based replication\",\n\tER_BASE64_DECODE_ERROR:                           \"Decoding of base64 string failed\",\n\tER_EVENT_RECURSION_FORBIDDEN:                     \"Recursion of EVENT DDL statements is forbidden when body is present\",\n\tER_EVENTS_DB_ERROR:                               \"Cannot proceed because system tables used by Event Scheduler were found damaged at server start\",\n\tER_ONLY_INTEGERS_ALLOWED:                         \"Only integers allowed as number here\",\n\tER_UNSUPORTED_LOG_ENGINE:                         \"This storage engine cannot be used for log tables\\\"\",\n\tER_BAD_LOG_STATEMENT:                             \"You cannot '%s' a log table if logging is enabled\",\n\tER_CANT_RENAME_LOG_TABLE:                         \"Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'\",\n\tER_WRONG_PARAMCOUNT_TO_NATIVE_FCT:                \"Incorrect parameter count in the call to native function '%-.192s'\",\n\tER_WRONG_PARAMETERS_TO_NATIVE_FCT:                \"Incorrect parameters in the call to native function '%-.192s'\",\n\tER_WRONG_PARAMETERS_TO_STORED_FCT:                \"Incorrect parameters in the call to stored function '%-.192s'\",\n\tER_NATIVE_FCT_NAME_COLLISION:                     \"This function '%-.192s' has the same name as a native function\",\n\tER_DUP_ENTRY_WITH_KEY_NAME:                       \"Duplicate entry '%-.64s' for key '%-.192s'\",\n\tER_BINLOG_PURGE_EMFILE:                           \"Too many files opened, please execute the command again\",\n\tER_EVENT_CANNOT_CREATE_IN_THE_PAST:               \"Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.\",\n\tER_EVENT_CANNOT_ALTER_IN_THE_PAST:                \"Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future.\",\n\tER_SLAVE_INCIDENT:                                \"The incident %s occurred on the master. Message: %-.64s\",\n\tER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT:           \"Table has no partition for some existing values\",\n\tER_BINLOG_UNSAFE_STATEMENT:                       \"Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. %s\",\n\tER_SLAVE_FATAL_ERROR:                             \"Fatal error: %s\",\n\tER_SLAVE_RELAY_LOG_READ_FAILURE:                  \"Relay log read failure: %s\",\n\tER_SLAVE_RELAY_LOG_WRITE_FAILURE:                 \"Relay log write failure: %s\",\n\tER_SLAVE_CREATE_EVENT_FAILURE:                    \"Failed to create %s\",\n\tER_SLAVE_MASTER_COM_FAILURE:                      \"Master command %s failed: %s\",\n\tER_BINLOG_LOGGING_IMPOSSIBLE:                     \"Binary logging not possible. Message: %s\",\n\tER_VIEW_NO_CREATION_CTX:                          \"View `%-.64s`.`%-.64s` has no creation context\",\n\tER_VIEW_INVALID_CREATION_CTX:                     \"Creation context of view `%-.64s`.`%-.64s' is invalid\",\n\tER_SR_INVALID_CREATION_CTX:                       \"Creation context of stored routine `%-.64s`.`%-.64s` is invalid\",\n\tER_TRG_CORRUPTED_FILE:                            \"Corrupted TRG file for table `%-.64s`.`%-.64s`\",\n\tER_TRG_NO_CREATION_CTX:                           \"Triggers for table `%-.64s`.`%-.64s` have no creation context\",\n\tER_TRG_INVALID_CREATION_CTX:                      \"Trigger creation context of table `%-.64s`.`%-.64s` is invalid\",\n\tER_EVENT_INVALID_CREATION_CTX:                    \"Creation context of event `%-.64s`.`%-.64s` is invalid\",\n\tER_TRG_CANT_OPEN_TABLE:                           \"Cannot open table for trigger `%-.64s`.`%-.64s`\",\n\tER_CANT_CREATE_SROUTINE:                          \"Cannot create stored routine `%-.64s`. Check warnings\",\n\tER_NEVER_USED:                                    \"Ambiguous slave modes combination. %s\",\n\tER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT:              \"The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.\",\n\tER_SLAVE_CORRUPT_EVENT:                                              \"Corrupted replication event was detected\",\n\tER_LOAD_DATA_INVALID_COLUMN:                                         \"Invalid column reference (%-.64s) in LOAD DATA\",\n\tER_LOG_PURGE_NO_FILE:                                                \"Being purged log %s was not found\",\n\tER_XA_RBTIMEOUT:                                                     \"XA_RBTIMEOUT: Transaction branch was rolled back: took too long\",\n\tER_XA_RBDEADLOCK:                                                    \"XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected\",\n\tER_NEED_REPREPARE:                                                   \"Prepared statement needs to be re-prepared\",\n\tER_DELAYED_NOT_SUPPORTED:                                            \"DELAYED option not supported for table '%-.192s'\",\n\tWARN_NO_MASTER_INFO:                                                 \"The master info structure does not exist\",\n\tWARN_OPTION_IGNORED:                                                 \"<%-.64s> option ignored\",\n\tWARN_PLUGIN_DELETE_BUILTIN:                                          \"Built-in plugins cannot be deleted\",\n\tWARN_PLUGIN_BUSY:                                                    \"Plugin is busy and will be uninstalled on shutdown\",\n\tER_VARIABLE_IS_READONLY:                                             \"%s variable '%s' is read-only. Use SET %s to assign the value\",\n\tER_WARN_ENGINE_TRANSACTION_ROLLBACK:                                 \"Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted\",\n\tER_SLAVE_HEARTBEAT_FAILURE:                                          \"Unexpected master's heartbeat data: %s\",\n\tER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE:                               \"The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).\",\n\tER_NDB_REPLICATION_SCHEMA_ERROR:                                     \"Bad schema for mysql.ndb_replication table. Message: %-.64s\",\n\tER_CONFLICT_FN_PARSE_ERROR:                                          \"Error in parsing conflict function. Message: %-.64s\",\n\tER_EXCEPTIONS_WRITE_ERROR:                                           \"Write to exceptions table failed. Message: %-.128s\\\"\",\n\tER_TOO_LONG_TABLE_COMMENT:                                           \"Comment for table '%-.64s' is too long (max = %d)\",\n\tER_TOO_LONG_FIELD_COMMENT:                                           \"Comment for field '%-.64s' is too long (max = %d)\",\n\tER_FUNC_INEXISTENT_NAME_COLLISION:                                   \"FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual\",\n\tER_DATABASE_NAME:                                                    \"Database\",\n\tER_TABLE_NAME:                                                       \"Table\",\n\tER_PARTITION_NAME:                                                   \"Partition\",\n\tER_SUBPARTITION_NAME:                                                \"Subpartition\",\n\tER_TEMPORARY_NAME:                                                   \"Temporary\",\n\tER_RENAMED_NAME:                                                     \"Renamed\",\n\tER_TOO_MANY_CONCURRENT_TRXS:                                         \"Too many active concurrent transactions\",\n\tWARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED:                            \"Non-ASCII separator arguments are not fully supported\",\n\tER_DEBUG_SYNC_TIMEOUT:                                               \"debug sync point wait timed out\",\n\tER_DEBUG_SYNC_HIT_LIMIT:                                             \"debug sync point hit limit reached\",\n\tER_DUP_SIGNAL_SET:                                                   \"Duplicate condition information item '%s'\",\n\tER_SIGNAL_WARN:                                                      \"Unhandled user-defined warning condition\",\n\tER_SIGNAL_NOT_FOUND:                                                 \"Unhandled user-defined not found condition\",\n\tER_SIGNAL_EXCEPTION:                                                 \"Unhandled user-defined exception condition\",\n\tER_RESIGNAL_WITHOUT_ACTIVE_HANDLER:                                  \"RESIGNAL when handler not active\",\n\tER_SIGNAL_BAD_CONDITION_TYPE:                                        \"SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE\",\n\tWARN_COND_ITEM_TRUNCATED:                                            \"Data truncated for condition item '%s'\",\n\tER_COND_ITEM_TOO_LONG:                                               \"Data too long for condition item '%s'\",\n\tER_UNKNOWN_LOCALE:                                                   \"Unknown locale: '%-.64s'\",\n\tER_SLAVE_IGNORE_SERVER_IDS:                                          \"The requested server id %d clashes with the slave startup option --replicate-same-server-id\",\n\tER_QUERY_CACHE_DISABLED:                                             \"Query cache is disabled; restart the server with query_cache_type=1 to enable it\",\n\tER_SAME_NAME_PARTITION_FIELD:                                        \"Duplicate partition field name '%-.192s'\",\n\tER_PARTITION_COLUMN_LIST_ERROR:                                      \"Inconsistency in usage of column lists for partitioning\",\n\tER_WRONG_TYPE_COLUMN_VALUE_ERROR:                                    \"Partition column values of incorrect type\",\n\tER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR:                             \"Too many fields in '%-.192s'\",\n\tER_MAXVALUE_IN_VALUES_IN:                                            \"Cannot use MAXVALUE as value in VALUES IN\",\n\tER_TOO_MANY_VALUES_ERROR:                                            \"Cannot have more than one value for this type of %-.64s partitioning\",\n\tER_ROW_SINGLE_PARTITION_FIELD_ERROR:                                 \"Row expressions in VALUES IN only allowed for multi-field column partitioning\",\n\tER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD:                        \"Field '%-.192s' is of a not allowed type for this type of partitioning\",\n\tER_PARTITION_FIELDS_TOO_LONG:                                        \"The total length of the partitioning fields is too large\",\n\tER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE:                                \"Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved.\",\n\tER_BINLOG_ROW_MODE_AND_STMT_ENGINE:                                  \"Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based logging.\",\n\tER_BINLOG_UNSAFE_AND_STMT_ENGINE:                                    \"Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOG_FORMAT = MIXED. %s\",\n\tER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE:                             \"Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging.\",\n\tER_BINLOG_STMT_MODE_AND_ROW_ENGINE:                                  \"Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s\",\n\tER_BINLOG_ROW_INJECTION_AND_STMT_MODE:                               \"Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.\",\n\tER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE:                  \"Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.\",\n\tER_BINLOG_UNSAFE_LIMIT:                                              \"The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.\",\n\tER_BINLOG_UNSAFE_INSERT_DELAYED:                                     \"The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.\",\n\tER_BINLOG_UNSAFE_SYSTEM_TABLE:                                       \"The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.\",\n\tER_BINLOG_UNSAFE_AUTOINC_COLUMNS:                                    \"Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.\",\n\tER_BINLOG_UNSAFE_UDF:                                                \"Statement is unsafe because it uses a UDF which may not return the same value on the slave.\",\n\tER_BINLOG_UNSAFE_SYSTEM_VARIABLE:                                    \"Statement is unsafe because it uses a system variable that may have a different value on the slave.\",\n\tER_BINLOG_UNSAFE_SYSTEM_FUNCTION:                                    \"Statement is unsafe because it uses a system function that may return a different value on the slave.\",\n\tER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS:                               \"Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.\",\n\tER_MESSAGE_AND_STATEMENT:                                            \"%s Statement: %s\",\n\tER_SLAVE_CONVERSION_FAILED:                                          \"Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'\",\n\tER_SLAVE_CANT_CREATE_CONVERSION:                                     \"Can't create conversion table for table '%-.192s.%-.192s'\",\n\tER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT:                 \"Cannot modify @@session.binlog_format inside a transaction\",\n\tER_PATH_LENGTH:                                                      \"The path specified for %.64s is too long.\",\n\tER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT:                            \"'%s' is deprecated and will be removed in a future release.\",\n\tER_WRONG_NATIVE_TABLE_STRUCTURE:                                     \"Native table '%-.64s'.'%-.64s' has the wrong structure\",\n\tER_WRONG_PERFSCHEMA_USAGE:                                           \"Invalid performance_schema usage.\",\n\tER_WARN_I_S_SKIPPED_TABLE:                                           \"Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement\",\n\tER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT:                 \"Cannot modify @@session.binlog_direct_non_transactional_updates inside a transaction\",\n\tER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT:                    \"Cannot change the binlog direct flag inside a stored function or trigger\",\n\tER_SPATIAL_MUST_HAVE_GEOM_COL:                                       \"A SPATIAL index may only contain a geometrical type column\",\n\tER_TOO_LONG_INDEX_COMMENT:                                           \"Comment for index '%-.64s' is too long (max = %d)\",\n\tER_LOCK_ABORTED:                                                     \"Wait on a lock was aborted due to a pending exclusive lock\",\n\tER_DATA_OUT_OF_RANGE:                                                \"%s value is out of range in '%s'\",\n\tER_WRONG_SPVAR_TYPE_IN_LIMIT:                                        \"A variable of a non-integer based type in LIMIT clause\",\n\tER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE:           \"Mixing self-logging and non-self-logging engines in a statement is unsafe.\",\n\tER_BINLOG_UNSAFE_MIXED_STATEMENT:                                    \"Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.\",\n\tER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN:                   \"Cannot modify @@session.sql_log_bin inside a transaction\",\n\tER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN:                      \"Cannot change the sql_log_bin inside a stored function or trigger\",\n\tER_FAILED_READ_FROM_PAR_FILE:                                        \"Failed to read from the .par file\",\n\tER_VALUES_IS_NOT_INT_TYPE_ERROR:                                     \"VALUES value for partition '%-.64s' must have type INT\",\n\tER_ACCESS_DENIED_NO_PASSWORD_ERROR:                                  \"Access denied for user '%-.48s'@'%-.64s'\",\n\tER_SET_PASSWORD_AUTH_PLUGIN:                                         \"SET PASSWORD has no significance for users authenticating via plugins\",\n\tER_GRANT_PLUGIN_USER_EXISTS:                                         \"GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists\",\n\tER_TRUNCATE_ILLEGAL_FK:                                              \"Cannot truncate a table referenced in a foreign key constraint (%.192s)\",\n\tER_PLUGIN_IS_PERMANENT:                                              \"Plugin '%s' is force_plus_permanent and can not be unloaded\",\n\tER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN:                           \"The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.\",\n\tER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX:                           \"The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout.\",\n\tER_STMT_CACHE_FULL:                                                  \"Multi-row statements required more than 'max_binlog_stmt_cache_size' bytes of storage; increase this mysqld variable and try again\",\n\tER_MULTI_UPDATE_KEY_CONFLICT:                                        \"Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'.\",\n\tER_TABLE_NEEDS_REBUILD:                                              \"Table rebuild required. Please do \\\"ALTER TABLE `%-.32s` FORCE\\\" or dump/reload to fix it!\",\n\tWARN_OPTION_BELOW_LIMIT:                                             \"The value of '%s' should be no less than the value of '%s'\",\n\tER_INDEX_COLUMN_TOO_LONG:                                            \"Index column size too large. The maximum column size is %d bytes.\",\n\tER_ERROR_IN_TRIGGER_BODY:                                            \"Trigger '%-.64s' has an error in its body: '%-.256s'\",\n\tER_ERROR_IN_UNKNOWN_TRIGGER_BODY:                                    \"Unknown trigger has an error in its body: '%-.256s'\",\n\tER_INDEX_CORRUPT:                                                    \"Index %s is corrupted\",\n\tER_UNDO_RECORD_TOO_BIG:                                              \"Undo log record is too big.\",\n\tER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT:                               \"INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.\",\n\tER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE:                               \"INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave.\",\n\tER_BINLOG_UNSAFE_REPLACE_SELECT:                                     \"REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.\",\n\tER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT:                               \"CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.\",\n\tER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT:                              \"CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.\",\n\tER_BINLOG_UNSAFE_UPDATE_IGNORE:                                      \"UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.\",\n\tER_PLUGIN_NO_UNINSTALL:                                              \"Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it.\",\n\tER_PLUGIN_NO_INSTALL:                                                \"Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it.\",\n\tER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT:                               \"Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.\",\n\tER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC:                              \"CREATE TABLE... SELECT...  on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave.\",\n\tER_BINLOG_UNSAFE_INSERT_TWO_KEYS:                                    \"INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe\",\n\tER_TABLE_IN_FK_CHECK:                                                \"Table is being used in foreign key check.\",\n\tER_UNSUPPORTED_ENGINE:                                               \"Storage engine '%s' does not support system tables. [%s.%s]\",\n\tER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST:                                  \"INSERT into autoincrement field which is not the first part in the composed primary key is unsafe.\",\n\tER_CANNOT_LOAD_FROM_TABLE_V2:                                        \"Cannot load from %s.%s. The table is probably corrupted\",\n\tER_MASTER_DELAY_VALUE_OUT_OF_RANGE:                                  \"The requested value %d for the master delay exceeds the maximum %d\",\n\tER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT:               \"Only Format_description_log_event and row events are allowed in BINLOG statements (but %s was provided)\",\n\tER_PARTITION_EXCHANGE_DIFFERENT_OPTION:                              \"Non matching attribute '%-.64s' between partition and table\",\n\tER_PARTITION_EXCHANGE_PART_TABLE:                                    \"Table to exchange with partition is partitioned: '%-.64s'\",\n\tER_PARTITION_EXCHANGE_TEMP_TABLE:                                    \"Table to exchange with partition is temporary: '%-.64s'\",\n\tER_PARTITION_INSTEAD_OF_SUBPARTITION:                                \"Subpartitioned table, use subpartition instead of partition\",\n\tER_UNKNOWN_PARTITION:                                                \"Unknown partition '%-.64s' in table '%-.64s'\",\n\tER_TABLES_DIFFERENT_METADATA:                                        \"Tables have different definitions\",\n\tER_ROW_DOES_NOT_MATCH_PARTITION:                                     \"Found a row that does not match the partition\",\n\tER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX:                               \"Option binlog_cache_size (%d) is greater than max_binlog_cache_size (%d); setting binlog_cache_size equal to max_binlog_cache_size.\",\n\tER_WARN_INDEX_NOT_APPLICABLE:                                        \"Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'\",\n\tER_PARTITION_EXCHANGE_FOREIGN_KEY:                                   \"Table to exchange with partition has foreign key references: '%-.64s'\",\n\tER_NO_SUCH_KEY_VALUE:                                                \"Key value '%-.192s' was not found in table '%-.192s.%-.192s'\",\n\tER_RPL_INFO_DATA_TOO_LONG:                                           \"Data for column '%s' too long\",\n\tER_NETWORK_READ_EVENT_CHECKSUM_FAILURE:                              \"Replication event checksum verification failed while reading from network.\",\n\tER_BINLOG_READ_EVENT_CHECKSUM_FAILURE:                               \"Replication event checksum verification failed while reading from a log file.\",\n\tER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX:                          \"Option binlog_stmt_cache_size (%d) is greater than max_binlog_stmt_cache_size (%d); setting binlog_stmt_cache_size equal to max_binlog_stmt_cache_size.\",\n\tER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT:                         \"Can't update table '%-.192s' while '%-.192s' is being created.\",\n\tER_PARTITION_CLAUSE_ON_NONPARTITIONED:                               \"PARTITION () clause on non partitioned table\",\n\tER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET:                           \"Found a row not matching the given partition set\",\n\tER_NO_SUCH_PARTITION__UNUSED:                                        \"partition '%-.64s' doesn't exist\",\n\tER_CHANGE_RPL_INFO_REPOSITORY_FAILURE:                               \"Failure while changing the type of replication repository: %s.\",\n\tER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE:            \"The creation of some temporary tables could not be rolled back.\",\n\tER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE:            \"Some temporary tables were dropped, but these operations could not be rolled back.\",\n\tER_MTS_FEATURE_IS_NOT_SUPPORTED:                                     \"%s is not supported in multi-threaded slave mode. %s\",\n\tER_MTS_UPDATED_DBS_GREATER_MAX:                                      \"The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata.\",\n\tER_MTS_CANT_PARALLEL:                                                \"Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s.\",\n\tER_MTS_INCONSISTENT_DATA:                                            \"%s\",\n\tER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING:                         \"FULLTEXT index is not supported for partitioned tables.\",\n\tER_DA_INVALID_CONDITION_NUMBER:                                      \"Invalid condition number\",\n\tER_INSECURE_PLAIN_TEXT:                                              \"Sending passwords in plain text without SSL/TLS is extremely insecure.\",\n\tER_INSECURE_CHANGE_MASTER:                                           \"Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.\",\n\tER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO:                            \"Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'\",\n\tER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO:                         \"Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table\",\n\tER_SQLTHREAD_WITH_SECURE_SLAVE:                                      \"Setting authentication options is not possible when only the Slave SQL Thread is being started.\",\n\tER_TABLE_HAS_NO_FT:                                                  \"The table does not have FULLTEXT index to support this query\",\n\tER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER:                           \"The system variable %.200s cannot be set in stored functions or triggers.\",\n\tER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION:                             \"The system variable %.200s cannot be set when there is an ongoing transaction.\",\n\tER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST:                               \"The system variable @@SESSION.GTID_NEXT has the value %.200s, which is not listed in @@SESSION.GTID_NEXT_LIST.\",\n\tER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION_WHEN_GTID_NEXT_LIST_IS_NULL: \"When @@SESSION.GTID_NEXT_LIST == NULL, the system variable @@SESSION.GTID_NEXT cannot change inside a transaction.\",\n\tER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION:                             \"The statement 'SET %.200s' cannot invoke a stored function.\",\n\tER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL:        \"The system variable @@SESSION.GTID_NEXT cannot be 'AUTOMATIC' when @@SESSION.GTID_NEXT_LIST is non-NULL.\",\n\tER_SKIPPING_LOGGED_TRANSACTION:                                      \"Skipping transaction %.200s because it has already been executed and logged.\",\n\tER_MALFORMED_GTID_SET_SPECIFICATION:                                 \"Malformed GTID set specification '%.200s'.\",\n\tER_MALFORMED_GTID_SET_ENCODING:                                      \"Malformed GTID set encoding.\",\n\tER_MALFORMED_GTID_SPECIFICATION:                                     \"Malformed GTID specification '%.200s'.\",\n\tER_GNO_EXHAUSTED:                                                    \"Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new server_uuid.\",\n\tER_BAD_SLAVE_AUTO_POSITION:                                          \"Parameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS cannot be set when MASTER_AUTO_POSITION is active.\",\n\tER_AUTO_POSITION_REQUIRES_GTID_MODE_ON:                              \"CHANGE MASTER TO MASTER_AUTO_POSITION = 1 can only be executed when @@GLOBAL.GTID_MODE = ON.\",\n\tER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET:             \"Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTID_NEXT != AUTOMATIC or @@SESSION.GTID_NEXT_LIST != NULL.\",\n\tER_GTID_MODE_2_OR_3_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON:            \"@@GLOBAL.GTID_MODE = ON or UPGRADE_STEP_2 requires @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1.\",\n\tER_GTID_MODE_REQUIRES_BINLOG:                                        \"@@GLOBAL.GTID_MODE = ON or UPGRADE_STEP_1 or UPGRADE_STEP_2 requires --log-bin and --log-slave-updates.\",\n\tER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF:                 \"@@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF.\",\n\tER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON:             \"@@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON.\",\n\tER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF:        \"@@SESSION.GTID_NEXT_LIST cannot be set to a non-NULL value when @@GLOBAL.GTID_MODE = OFF.\",\n\tER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF:                           \"Found a Gtid_log_event or Previous_gtids_log_event when @@GLOBAL.GTID_MODE = OFF.\",\n\tER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE:                              \"When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.\",\n\tER_GTID_UNSAFE_CREATE_SELECT:                                        \"CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1.\",\n\tER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION:           \"When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.\",\n\tER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME:                     \"The value of @@GLOBAL.GTID_MODE can only change one step at a time: OFF <-> UPGRADE_STEP_1 <-> UPGRADE_STEP_2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.\",\n\tER_MASTER_HAS_PURGED_REQUIRED_GTIDS:                                 \"The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.\",\n\tER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID:                              \"@@SESSION.GTID_NEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK.\",\n\tER_UNKNOWN_EXPLAIN_FORMAT:                                           \"Unknown EXPLAIN format name: '%s'\",\n\tER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION:                            \"Cannot execute statement in a READ ONLY transaction.\",\n\tER_TOO_LONG_TABLE_PARTITION_COMMENT:                                 \"Comment for table partition '%-.64s' is too long (max = %d)\",\n\tER_SLAVE_CONFIGURATION:                                              \"Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.\",\n\tER_INNODB_FT_LIMIT:                                                  \"InnoDB presently supports one FULLTEXT index creation at a time\",\n\tER_INNODB_NO_FT_TEMP_TABLE:                                          \"Cannot create FULLTEXT index on temporary InnoDB table\",\n\tER_INNODB_FT_WRONG_DOCID_COLUMN:                                     \"Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index\",\n\tER_INNODB_FT_WRONG_DOCID_INDEX:                                      \"Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index\",\n\tER_INNODB_ONLINE_LOG_TOO_BIG:                                        \"Creating index '%-.192s' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.\",\n\tER_UNKNOWN_ALTER_ALGORITHM:                                          \"Unknown ALGORITHM '%s'\",\n\tER_UNKNOWN_ALTER_LOCK:                                               \"Unknown LOCK type '%s'\",\n\tER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS:                             \"CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL.\",\n\tER_MTS_RECOVERY_FAILURE:                                             \"Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log.\",\n\tER_MTS_RESET_WORKERS:                                                \"Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log.\",\n\tER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2:                              \"Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted\",\n\tER_SLAVE_SILENT_RETRY_TRANSACTION:                                   \"Slave must silently retry current transaction\",\n\tER_DISCARD_FK_CHECKS_RUNNING:                                        \"There is a foreign key check running on table '%-.192s'. Cannot discard the table.\",\n\tER_TABLE_SCHEMA_MISMATCH:                                            \"Schema mismatch (%s)\",\n\tER_TABLE_IN_SYSTEM_TABLESPACE:                                       \"Table '%-.192s' in system tablespace\",\n\tER_IO_READ_ERROR:                                                    \"IO Read error: (%d, %s) %s\",\n\tER_IO_WRITE_ERROR:                                                   \"IO Write error: (%d, %s) %s\",\n\tER_TABLESPACE_MISSING:                                               \"Tablespace is missing for table '%-.192s'\",\n\tER_TABLESPACE_EXISTS:                                                \"Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT.\",\n\tER_TABLESPACE_DISCARDED:                                             \"Tablespace has been discarded for table '%-.192s'\",\n\tER_INTERNAL_ERROR:                                                   \"Internal error: %s\",\n\tER_INNODB_IMPORT_ERROR:                                              \"ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %d : '%s'\",\n\tER_INNODB_INDEX_CORRUPT:                                             \"Index corrupt: %s\",\n\tER_INVALID_YEAR_COLUMN_LENGTH:                                       \"YEAR(%d) column type is deprecated. Creating YEAR(4) column instead.\",\n\tER_NOT_VALID_PASSWORD:                                               \"Your password does not satisfy the current policy requirements\",\n\tER_MUST_CHANGE_PASSWORD:                                             \"You must SET PASSWORD before executing this statement\",\n\tER_FK_NO_INDEX_CHILD:                                                \"Failed to add the foreign key constaint. Missing index for constraint '%s' in the foreign table '%s'\",\n\tER_FK_NO_INDEX_PARENT:                                               \"Failed to add the foreign key constaint. Missing index for constraint '%s' in the referenced table '%s'\",\n\tER_FK_FAIL_ADD_SYSTEM:                                               \"Failed to add the foreign key constraint '%s' to system tables\",\n\tER_FK_CANNOT_OPEN_PARENT:                                            \"Failed to open the referenced table '%s'\",\n\tER_FK_INCORRECT_OPTION:                                              \"Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'\",\n\tER_FK_DUP_NAME:                                                      \"Duplicate foreign key constraint name '%s'\",\n\tER_PASSWORD_FORMAT:                                                  \"The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.\",\n\tER_FK_COLUMN_CANNOT_DROP:                                            \"Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'\",\n\tER_FK_COLUMN_CANNOT_DROP_CHILD:                                      \"Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table '%-.192s'\",\n\tER_FK_COLUMN_NOT_NULL:                                               \"Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL\",\n\tER_DUP_INDEX:                                                        \"Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release.\",\n\tER_FK_COLUMN_CANNOT_CHANGE:                                          \"Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'\",\n\tER_FK_COLUMN_CANNOT_CHANGE_CHILD:                                    \"Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'\",\n\tER_FK_CANNOT_DELETE_PARENT:                                          \"Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'\",\n\tER_MALFORMED_PACKET:                                                 \"Malformed communication packet.\",\n\tER_READ_ONLY_MODE:                                                   \"Running in read-only mode\",\n\tER_GTID_NEXT_TYPE_UNDEFINED_GROUP:                                   \"When @@SESSION.GTID_NEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET @@SESSION.GTID_NEXT before a transaction and forgot to set @@SESSION.GTID_NEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current @@SESSION.GTID_NEXT is '%s'.\",\n\tER_VARIABLE_NOT_SETTABLE_IN_SP:                                      \"The system variable %.200s cannot be set in stored procedures.\",\n\tER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF:                       \"@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON.\",\n\tER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY:             \"@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.\",\n\tER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY:               \"@@GLOBAL.GTID_PURGED can only be set when there are no ongoing transactions (not even in other clients).\",\n\tER_GTID_PURGED_WAS_CHANGED:                                          \"@@GLOBAL.GTID_PURGED was changed from '%s' to '%s'.\",\n\tER_GTID_EXECUTED_WAS_CHANGED:                                        \"@@GLOBAL.GTID_EXECUTED was changed from '%s' to '%s'.\",\n\tER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES:                              \"Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT, and both replicated and non replicated tables are written to.\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED:                                    \"%s is not supported for this operation. Try %s.\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON:                             \"%s is not supported. Reason: %s. Try %s.\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY:                        \"COPY algorithm requires a lock\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION:                   \"Partition specific operations do not yet support LOCK/ALGORITHM\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME:                   \"Columns participating in a foreign key are renamed\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE:                 \"Cannot change column type INPLACE\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK:                    \"Adding foreign keys needs foreign_key_checks=OFF\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE:                      \"Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK:                        \"Dropping a primary key is not allowed without also adding a new primary key\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC:                     \"Adding an auto-increment column requires a lock\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS:                  \"Cannot replace hidden FTS_DOC_ID with a user-visible one\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS:                  \"Cannot drop or rename FTS_DOC_ID\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS:                         \"Fulltext index creation requires a lock\",\n\tER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE:                 \"sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction\",\n\tER_DUP_UNKNOWN_IN_INDEX:                                             \"Duplicate entry for key '%-.192s'\",\n\tER_IDENT_CAUSES_TOO_LONG_PATH:                                       \"Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'.\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL:                    \"cannot silently convert NULL values, as required in this SQL_MODE\",\n\tER_MUST_CHANGE_PASSWORD_LOGIN:                                       \"Your password has expired. To log in you must change it using a client that supports expired passwords.\",\n\tER_ROW_IN_WRONG_PARTITION:                                           \"Found a row in wrong partition %s\",\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/error.go",
    "content": "package mysql\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pingcap/errors\"\n)\n\nvar (\n\tErrBadConn       = errors.New(\"connection was bad\")\n\tErrMalformPacket = errors.New(\"Malform packet error\")\n\n\tErrTxDone = errors.New(\"sql: Transaction has already been committed or rolled back\")\n)\n\ntype MyError struct {\n\tCode    uint16\n\tMessage string\n\tState   string\n}\n\nfunc (e *MyError) Error() string {\n\treturn fmt.Sprintf(\"ERROR %d (%s): %s\", e.Code, e.State, e.Message)\n}\n\n// NewDefaultError: default mysql error, must adapt errname message format\nfunc NewDefaultError(errCode uint16, args ...interface{}) *MyError {\n\te := new(MyError)\n\te.Code = errCode\n\n\tif s, ok := MySQLState[errCode]; ok {\n\t\te.State = s\n\t} else {\n\t\te.State = DEFAULT_MYSQL_STATE\n\t}\n\n\tif format, ok := MySQLErrName[errCode]; ok {\n\t\te.Message = fmt.Sprintf(format, args...)\n\t} else {\n\t\te.Message = fmt.Sprint(args...)\n\t}\n\n\treturn e\n}\n\nfunc NewError(errCode uint16, message string) *MyError {\n\te := new(MyError)\n\te.Code = errCode\n\n\tif s, ok := MySQLState[errCode]; ok {\n\t\te.State = s\n\t} else {\n\t\te.State = DEFAULT_MYSQL_STATE\n\t}\n\n\te.Message = message\n\n\treturn e\n}\n\nfunc ErrorCode(errMsg string) (code int) {\n\tvar tmpStr string\n\t// golang scanf doesn't support %*,so I used a temporary variable\n\t_, _ = fmt.Sscanf(errMsg, \"%s%d\", &tmpStr, &code)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/field.go",
    "content": "package mysql\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\ntype FieldData []byte\n\ntype Field struct {\n\tData         FieldData\n\tSchema       []byte\n\tTable        []byte\n\tOrgTable     []byte\n\tName         []byte\n\tOrgName      []byte\n\tCharset      uint16\n\tColumnLength uint32\n\tType         uint8\n\tFlag         uint16\n\tDecimal      uint8\n\n\tDefaultValueLength uint64\n\tDefaultValue       []byte\n}\n\ntype FieldValueType uint8\n\ntype FieldValue struct {\n\tType  FieldValueType\n\tvalue uint64 // Also for int64 and float64\n\tstr   []byte\n}\n\nconst (\n\tFieldValueTypeNull = iota\n\tFieldValueTypeUnsigned\n\tFieldValueTypeSigned\n\tFieldValueTypeFloat\n\tFieldValueTypeString\n)\n\nfunc NewFieldValue(t FieldValueType, v uint64, str []byte) FieldValue {\n\treturn FieldValue{\n\t\tType:  t,\n\t\tvalue: v,\n\t\tstr:   str,\n\t}\n}\n\nfunc (f *Field) Parse(p FieldData) (err error) {\n\tf.Data = p\n\n\tvar n int\n\tpos := 0\n\t//skip catelog, always def\n\tn, err = SkipLengthEncodedString(p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tpos += n\n\n\t//schema\n\tf.Schema, _, n, err = LengthEncodedString(p[pos:])\n\tif err != nil {\n\t\treturn err\n\t}\n\tpos += n\n\n\t//table\n\tf.Table, _, n, err = LengthEncodedString(p[pos:])\n\tif err != nil {\n\t\treturn err\n\t}\n\tpos += n\n\n\t//org_table\n\tf.OrgTable, _, n, err = LengthEncodedString(p[pos:])\n\tif err != nil {\n\t\treturn err\n\t}\n\tpos += n\n\n\t//name\n\tf.Name, _, n, err = LengthEncodedString(p[pos:])\n\tif err != nil {\n\t\treturn err\n\t}\n\tpos += n\n\n\t//org_name\n\tf.OrgName, _, n, err = LengthEncodedString(p[pos:])\n\tif err != nil {\n\t\treturn err\n\t}\n\tpos += n\n\n\t//skip oc\n\tpos += 1\n\n\t//charset\n\tf.Charset = binary.LittleEndian.Uint16(p[pos:])\n\tpos += 2\n\n\t//column length\n\tf.ColumnLength = binary.LittleEndian.Uint32(p[pos:])\n\tpos += 4\n\n\t//type\n\tf.Type = p[pos]\n\tpos++\n\n\t//flag\n\tf.Flag = binary.LittleEndian.Uint16(p[pos:])\n\tpos += 2\n\n\t//decimals 1\n\tf.Decimal = p[pos]\n\tpos++\n\n\t//filter [0x00][0x00]\n\tpos += 2\n\n\tf.DefaultValue = nil\n\t//if more data, command was field list\n\tif len(p) > pos {\n\t\t//length of default value lenenc-int\n\t\tf.DefaultValueLength, _, n = LengthEncodedInt(p[pos:])\n\t\tpos += n\n\n\t\tif pos+int(f.DefaultValueLength) > len(p) {\n\t\t\terr = ErrMalformPacket\n\t\t\treturn err\n\t\t}\n\n\t\t//default value string[$len]\n\t\tf.DefaultValue = p[pos:(pos + int(f.DefaultValueLength))]\n\t}\n\n\treturn nil\n}\n\nfunc (p FieldData) Parse() (f *Field, err error) {\n\tf = new(Field)\n\tif err = f.Parse(p); err != nil {\n\t\treturn nil, err\n\t}\n\treturn f, nil\n}\n\nfunc (f *Field) Dump() []byte {\n\tif f == nil {\n\t\tf = &Field{}\n\t}\n\tif f.Data != nil {\n\t\treturn f.Data\n\t}\n\n\tl := len(f.Schema) + len(f.Table) + len(f.OrgTable) + len(f.Name) + len(f.OrgName) + len(f.DefaultValue) + 48\n\n\tdata := make([]byte, 0, l)\n\n\tdata = append(data, PutLengthEncodedString([]byte(\"def\"))...)\n\n\tdata = append(data, PutLengthEncodedString(f.Schema)...)\n\n\tdata = append(data, PutLengthEncodedString(f.Table)...)\n\tdata = append(data, PutLengthEncodedString(f.OrgTable)...)\n\n\tdata = append(data, PutLengthEncodedString(f.Name)...)\n\tdata = append(data, PutLengthEncodedString(f.OrgName)...)\n\n\tdata = append(data, 0x0c)\n\n\tdata = append(data, Uint16ToBytes(f.Charset)...)\n\tdata = append(data, Uint32ToBytes(f.ColumnLength)...)\n\tdata = append(data, f.Type)\n\tdata = append(data, Uint16ToBytes(f.Flag)...)\n\tdata = append(data, f.Decimal)\n\tdata = append(data, 0, 0)\n\n\tif f.DefaultValue != nil {\n\t\tdata = append(data, Uint64ToBytes(f.DefaultValueLength)...)\n\t\tdata = append(data, f.DefaultValue...)\n\t}\n\n\treturn data\n}\n\nfunc (fv *FieldValue) AsUint64() uint64 {\n\treturn fv.value\n}\n\nfunc (fv *FieldValue) AsInt64() int64 {\n\treturn utils.Uint64ToInt64(fv.value)\n}\n\nfunc (fv *FieldValue) AsFloat64() float64 {\n\treturn utils.Uint64ToFloat64(fv.value)\n}\n\nfunc (fv *FieldValue) AsString() []byte {\n\treturn fv.str\n}\n\nfunc (fv *FieldValue) Value() interface{} {\n\tswitch fv.Type {\n\tcase FieldValueTypeUnsigned:\n\t\treturn fv.AsUint64()\n\tcase FieldValueTypeSigned:\n\t\treturn fv.AsInt64()\n\tcase FieldValueTypeFloat:\n\t\treturn fv.AsFloat64()\n\tcase FieldValueTypeString:\n\t\treturn fv.AsString()\n\tdefault: // FieldValueTypeNull\n\t\treturn nil\n\t}\n}\n\n// String returns a MySQL literal string that equals the value.\nfunc (fv *FieldValue) String() string {\n\tswitch fv.Type {\n\tcase FieldValueTypeNull:\n\t\treturn \"NULL\"\n\tcase FieldValueTypeUnsigned:\n\t\treturn strconv.FormatUint(fv.AsUint64(), 10)\n\tcase FieldValueTypeSigned:\n\t\treturn strconv.FormatInt(fv.AsInt64(), 10)\n\tcase FieldValueTypeFloat:\n\t\treturn strconv.FormatFloat(fv.AsFloat64(), 'f', -1, 64)\n\tcase FieldValueTypeString:\n\t\tb := strings.Builder{}\n\t\tb.Grow(len(fv.str) + 2)\n\t\tb.WriteByte('\\'')\n\t\tfor i := range fv.str {\n\t\t\tif fv.str[i] == '\\'' {\n\t\t\t\tb.WriteByte('\\\\')\n\t\t\t}\n\t\t\tb.WriteByte(fv.str[i])\n\t\t}\n\t\tb.WriteByte('\\'')\n\t\treturn b.String()\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown type %d of FieldValue\", fv.Type)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/gtid.go",
    "content": "package mysql\n\nimport (\n\t\"github.com/pingcap/errors\"\n)\n\ntype GTIDSet interface {\n\tString() string\n\n\t// Encode GTID set into binary format used in binlog dump commands\n\tEncode() []byte\n\n\tEqual(o GTIDSet) bool\n\n\tContain(o GTIDSet) bool\n\n\tUpdate(GTIDStr string) error\n\n\tClone() GTIDSet\n}\n\nfunc ParseGTIDSet(flavor string, s string) (GTIDSet, error) {\n\tswitch flavor {\n\tcase MySQLFlavor:\n\t\treturn ParseMysqlGTIDSet(s)\n\tcase MariaDBFlavor:\n\t\treturn ParseMariadbGTIDSet(s)\n\tdefault:\n\t\treturn nil, errors.Errorf(\"invalid flavor %s\", flavor)\n\t}\n}\n\ntype BinlogGTIDEvent interface {\n\tGTIDNext() (GTIDSet, error)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/mariadb_gtid.go",
    "content": "package mysql\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/pingcap/errors\"\n\t\"github.com/siddontang/go-log/log\"\n)\n\n// MariadbGTID represent mariadb gtid, [domain ID]-[server-id]-[sequence]\ntype MariadbGTID struct {\n\tDomainID       uint32\n\tServerID       uint32\n\tSequenceNumber uint64\n}\n\n// ParseMariadbGTID parses mariadb gtid, [domain ID]-[server-id]-[sequence]\nfunc ParseMariadbGTID(str string) (*MariadbGTID, error) {\n\tif len(str) == 0 {\n\t\treturn &MariadbGTID{0, 0, 0}, nil\n\t}\n\n\tseps := strings.Split(str, \"-\")\n\n\tgtid := new(MariadbGTID)\n\n\tif len(seps) != 3 {\n\t\treturn gtid, errors.Errorf(\"invalid Mariadb GTID %v, must domain-server-sequence\", str)\n\t}\n\n\tdomainID, err := strconv.ParseUint(seps[0], 10, 32)\n\tif err != nil {\n\t\treturn gtid, errors.Errorf(\"invalid MariaDB GTID Domain ID (%v): %v\", seps[0], err)\n\t}\n\n\tserverID, err := strconv.ParseUint(seps[1], 10, 32)\n\tif err != nil {\n\t\treturn gtid, errors.Errorf(\"invalid MariaDB GTID Server ID (%v): %v\", seps[1], err)\n\t}\n\n\tsequenceID, err := strconv.ParseUint(seps[2], 10, 64)\n\tif err != nil {\n\t\treturn gtid, errors.Errorf(\"invalid MariaDB GTID Sequence number (%v): %v\", seps[2], err)\n\t}\n\n\treturn &MariadbGTID{\n\t\tDomainID:       uint32(domainID),\n\t\tServerID:       uint32(serverID),\n\t\tSequenceNumber: sequenceID}, nil\n}\n\nfunc (gtid *MariadbGTID) String() string {\n\tif gtid.DomainID == 0 && gtid.ServerID == 0 && gtid.SequenceNumber == 0 {\n\t\treturn \"\"\n\t}\n\n\treturn fmt.Sprintf(\"%d-%d-%d\", gtid.DomainID, gtid.ServerID, gtid.SequenceNumber)\n}\n\n// Contain return whether one mariadb gtid covers another mariadb gtid\nfunc (gtid *MariadbGTID) Contain(other *MariadbGTID) bool {\n\treturn gtid.DomainID == other.DomainID && gtid.SequenceNumber >= other.SequenceNumber\n}\n\n// Clone clones a mariadb gtid\nfunc (gtid *MariadbGTID) Clone() *MariadbGTID {\n\to := new(MariadbGTID)\n\t*o = *gtid\n\treturn o\n}\n\nfunc (gtid *MariadbGTID) forward(newer *MariadbGTID) error {\n\tif newer.DomainID != gtid.DomainID {\n\t\treturn errors.Errorf(\"%s is not same with doamin of %s\", newer, gtid)\n\t}\n\n\t/*\n\t\tHere's a simplified example of binlog events.\n\t\tAlthough I think one domain should have only one update at same time, we can't limit the user's usage.\n\t\twe just output a warn log and let it go on\n\t\t| mysqld-bin.000001 | 1453 | Gtid              |       112 |        1495 | BEGIN GTID 0-112-6  |\n\t\t| mysqld-bin.000001 | 1624 | Xid               |       112 |        1655 | COMMIT xid=74       |\n\t\t| mysqld-bin.000001 | 1655 | Gtid              |       112 |        1697 | BEGIN GTID 0-112-7  |\n\t\t| mysqld-bin.000001 | 1826 | Xid               |       112 |        1857 | COMMIT xid=75       |\n\t\t| mysqld-bin.000001 | 1857 | Gtid              |       111 |        1899 | BEGIN GTID 0-111-5  |\n\t\t| mysqld-bin.000001 | 1981 | Xid               |       111 |        2012 | COMMIT xid=77       |\n\t\t| mysqld-bin.000001 | 2012 | Gtid              |       112 |        2054 | BEGIN GTID 0-112-8  |\n\t\t| mysqld-bin.000001 | 2184 | Xid               |       112 |        2215 | COMMIT xid=116      |\n\t\t| mysqld-bin.000001 | 2215 | Gtid              |       111 |        2257 | BEGIN GTID 0-111-6  |\n\t*/\n\tif newer.SequenceNumber <= gtid.SequenceNumber {\n\t\tlog.Warnf(\"out of order binlog appears with gtid %s vs current position gtid %s\", newer, gtid)\n\t}\n\n\tgtid.ServerID = newer.ServerID\n\tgtid.SequenceNumber = newer.SequenceNumber\n\treturn nil\n}\n\n// MariadbGTIDSet is a set of mariadb gtid\ntype MariadbGTIDSet struct {\n\tSets map[uint32]map[uint32]*MariadbGTID\n}\n\n// ParseMariadbGTIDSet parses str into mariadb gtid sets\nfunc ParseMariadbGTIDSet(str string) (GTIDSet, error) {\n\ts := new(MariadbGTIDSet)\n\ts.Sets = make(map[uint32]map[uint32]*MariadbGTID)\n\tif str == \"\" {\n\t\treturn s, nil\n\t}\n\terr := s.Update(str)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn s, nil\n}\n\n// AddSet adds mariadb gtid into mariadb gtid set\nfunc (s *MariadbGTIDSet) AddSet(gtid *MariadbGTID) error {\n\tif gtid == nil {\n\t\treturn nil\n\t}\n\n\tif serverSets, ok := s.Sets[gtid.DomainID]; !ok {\n\t\ts.Sets[gtid.DomainID] = map[uint32]*MariadbGTID{\n\t\t\tgtid.ServerID: gtid,\n\t\t}\n\t} else if o, ok := serverSets[gtid.ServerID]; !ok {\n\t\tserverSets[gtid.ServerID] = gtid\n\t} else {\n\t\terr := o.forward(gtid)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Update updates mariadb gtid set\nfunc (s *MariadbGTIDSet) Update(GTIDStr string) error {\n\tsp := strings.Split(GTIDStr, \",\")\n\t//todo, handle redundant same uuid\n\tfor i := 0; i < len(sp); i++ {\n\t\tgtid, err := ParseMariadbGTID(sp[i])\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t\terr = s.AddSet(gtid)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (s *MariadbGTIDSet) String() string {\n\tsets := make([]string, 0, len(s.Sets))\n\tfor _, set := range s.Sets {\n\t\tfor _, gtid := range set {\n\t\t\tsets = append(sets, gtid.String())\n\t\t}\n\t}\n\tsort.Strings(sets)\n\n\treturn strings.Join(sets, \",\")\n}\n\n// Encode encodes mariadb gtid set\nfunc (s *MariadbGTIDSet) Encode() []byte {\n\tvar buf bytes.Buffer\n\tsep := \"\"\n\tfor _, set := range s.Sets {\n\t\tfor _, gtid := range set {\n\t\t\tbuf.WriteString(sep)\n\t\t\tbuf.WriteString(gtid.String())\n\t\t\tsep = \",\"\n\t\t}\n\t}\n\n\treturn buf.Bytes()\n}\n\n// Clone clones a mariadb gtid set\nfunc (s *MariadbGTIDSet) Clone() GTIDSet {\n\tclone := &MariadbGTIDSet{\n\t\tSets: make(map[uint32]map[uint32]*MariadbGTID),\n\t}\n\tfor domainID, set := range s.Sets {\n\t\tclone.Sets[domainID] = make(map[uint32]*MariadbGTID)\n\t\tfor serverID, gtid := range set {\n\t\t\tclone.Sets[domainID][serverID] = gtid.Clone()\n\t\t}\n\t}\n\n\treturn clone\n}\n\n// Equal returns true if two mariadb gtid set is same, otherwise return false\nfunc (s *MariadbGTIDSet) Equal(o GTIDSet) bool {\n\tother, ok := o.(*MariadbGTIDSet)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tif len(other.Sets) != len(s.Sets) {\n\t\treturn false\n\t}\n\n\tfor domainID, set := range other.Sets {\n\t\tserverSet, ok := s.Sets[domainID]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\tif len(serverSet) != len(set) {\n\t\t\treturn false\n\t\t}\n\t\tfor serverID, gtid := range set {\n\t\t\tif o, ok := serverSet[serverID]; !ok {\n\t\t\t\treturn false\n\t\t\t} else if *gtid != *o {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Contain return whether one mariadb gtid set covers another mariadb gtid set\nfunc (s *MariadbGTIDSet) Contain(o GTIDSet) bool {\n\tother, ok := o.(*MariadbGTIDSet)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tfor doaminID, set := range other.Sets {\n\t\tserverSet, ok := s.Sets[doaminID]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\tfor serverID, gtid := range set {\n\t\t\tif o, ok := serverSet[serverID]; !ok {\n\t\t\t\treturn false\n\t\t\t} else if !o.Contain(gtid) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/mysql_gtid.go",
    "content": "package mysql\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/google/uuid\"\n\t\"github.com/pingcap/errors\"\n)\n\n// Like MySQL GTID Interval struct, [start, stop), left closed and right open\n// See MySQL rpl_gtid.h\ntype Interval struct {\n\t// The first GID of this interval.\n\tStart int64\n\t// The first GID after this interval.\n\tStop int64\n}\n\n// Interval is [start, stop), but the GTID string's format is [n] or [n1-n2], closed interval\nfunc parseInterval(str string) (i Interval, err error) {\n\tp := strings.Split(str, \"-\")\n\tswitch len(p) {\n\tcase 1:\n\t\ti.Start, err = strconv.ParseInt(p[0], 10, 64)\n\t\ti.Stop = i.Start + 1\n\tcase 2:\n\t\ti.Start, err = strconv.ParseInt(p[0], 10, 64)\n\t\tif err == nil {\n\t\t\ti.Stop, err = strconv.ParseInt(p[1], 10, 64)\n\t\t\ti.Stop++\n\t\t}\n\tdefault:\n\t\terr = errors.Errorf(\"invalid interval format, must n[-n]\")\n\t}\n\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif i.Stop <= i.Start {\n\t\terr = errors.Errorf(\"invalid interval format, must n[-n] and the end must >= start\")\n\t}\n\n\treturn\n}\n\nfunc (i Interval) String() string {\n\tif i.Stop == i.Start+1 {\n\t\treturn fmt.Sprintf(\"%d\", i.Start)\n\t} else {\n\t\treturn fmt.Sprintf(\"%d-%d\", i.Start, i.Stop-1)\n\t}\n}\n\ntype IntervalSlice []Interval\n\nfunc (s IntervalSlice) Len() int {\n\treturn len(s)\n}\n\nfunc (s IntervalSlice) Less(i, j int) bool {\n\tif s[i].Start < s[j].Start {\n\t\treturn true\n\t} else if s[i].Start > s[j].Start {\n\t\treturn false\n\t} else {\n\t\treturn s[i].Stop < s[j].Stop\n\t}\n}\n\nfunc (s IntervalSlice) Swap(i, j int) {\n\ts[i], s[j] = s[j], s[i]\n}\n\nfunc (s IntervalSlice) Sort() {\n\tsort.Sort(s)\n}\n\nfunc (s IntervalSlice) Normalize() IntervalSlice {\n\tvar n IntervalSlice\n\tif len(s) == 0 {\n\t\treturn n\n\t}\n\n\ts.Sort()\n\n\tn = append(n, s[0])\n\n\tfor i := 1; i < len(s); i++ {\n\t\tlast := n[len(n)-1]\n\t\tif s[i].Start > last.Stop {\n\t\t\tn = append(n, s[i])\n\t\t\tcontinue\n\t\t} else {\n\t\t\tstop := s[i].Stop\n\t\t\tif last.Stop > stop {\n\t\t\t\tstop = last.Stop\n\t\t\t}\n\t\t\tn[len(n)-1] = Interval{last.Start, stop}\n\t\t}\n\t}\n\n\treturn n\n}\n\nfunc min(a, b int64) int64 {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc max(a, b int64) int64 {\n\tif a > b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc (s *IntervalSlice) InsertInterval(interval Interval) {\n\tvar (\n\t\tcount int\n\t\ti     int\n\t)\n\n\t*s = append(*s, interval)\n\ttotal := len(*s)\n\tfor i = total - 1; i > 0; i-- {\n\t\tif (*s)[i].Stop < (*s)[i-1].Start {\n\t\t\t(*s)[i], (*s)[i-1] = (*s)[i-1], (*s)[i]\n\t\t} else if (*s)[i].Start > (*s)[i-1].Stop {\n\t\t\tbreak\n\t\t} else {\n\t\t\t(*s)[i-1].Start = min((*s)[i-1].Start, (*s)[i].Start)\n\t\t\t(*s)[i-1].Stop = max((*s)[i-1].Stop, (*s)[i].Stop)\n\t\t\tcount++\n\t\t}\n\t}\n\tif count > 0 {\n\t\ti++\n\t\tif i+count < total {\n\t\t\tcopy((*s)[i:], (*s)[i+count:])\n\t\t}\n\t\t*s = (*s)[:total-count]\n\t}\n}\n\n// Contain returns true if sub in s\nfunc (s IntervalSlice) Contain(sub IntervalSlice) bool {\n\tj := 0\n\tfor i := 0; i < len(sub); i++ {\n\t\tfor ; j < len(s); j++ {\n\t\t\tif sub[i].Start > s[j].Stop {\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif j == len(s) {\n\t\t\treturn false\n\t\t}\n\n\t\tif sub[i].Start < s[j].Start || sub[i].Stop > s[j].Stop {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (s IntervalSlice) Equal(o IntervalSlice) bool {\n\tif len(s) != len(o) {\n\t\treturn false\n\t}\n\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i].Start != o[i].Start || s[i].Stop != o[i].Stop {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (s IntervalSlice) Compare(o IntervalSlice) int {\n\tif s.Equal(o) {\n\t\treturn 0\n\t} else if s.Contain(o) {\n\t\treturn 1\n\t} else {\n\t\treturn -1\n\t}\n}\n\n// Refer http://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html\ntype UUIDSet struct {\n\tSID uuid.UUID\n\n\tIntervals IntervalSlice\n}\n\nfunc ParseUUIDSet(str string) (*UUIDSet, error) {\n\tstr = strings.TrimSpace(str)\n\tsep := strings.Split(str, \":\")\n\tif len(sep) < 2 {\n\t\treturn nil, errors.Errorf(\"invalid GTID format, must UUID:interval[:interval]\")\n\t}\n\n\tvar err error\n\ts := new(UUIDSet)\n\tif s.SID, err = uuid.Parse(sep[0]); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\t// Handle interval\n\tfor i := 1; i < len(sep); i++ {\n\t\tif in, err := parseInterval(sep[i]); err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t} else {\n\t\t\ts.Intervals = append(s.Intervals, in)\n\t\t}\n\t}\n\n\ts.Intervals = s.Intervals.Normalize()\n\n\treturn s, nil\n}\n\nfunc NewUUIDSet(sid uuid.UUID, in ...Interval) *UUIDSet {\n\ts := new(UUIDSet)\n\ts.SID = sid\n\n\ts.Intervals = in\n\ts.Intervals = s.Intervals.Normalize()\n\n\treturn s\n}\n\nfunc (s *UUIDSet) Contain(sub *UUIDSet) bool {\n\tif s.SID != sub.SID {\n\t\treturn false\n\t}\n\n\treturn s.Intervals.Contain(sub.Intervals)\n}\n\nfunc (s *UUIDSet) Bytes() []byte {\n\tvar buf bytes.Buffer\n\n\tbuf.WriteString(s.SID.String())\n\n\tfor _, i := range s.Intervals {\n\t\tbuf.WriteString(\":\")\n\t\tbuf.WriteString(i.String())\n\t}\n\n\treturn buf.Bytes()\n}\n\nfunc (s *UUIDSet) AddInterval(in IntervalSlice) {\n\ts.Intervals = append(s.Intervals, in...)\n\ts.Intervals = s.Intervals.Normalize()\n}\n\nfunc (s *UUIDSet) MinusInterval(in IntervalSlice) {\n\tvar n IntervalSlice\n\tin = in.Normalize()\n\n\ti, j := 0, 0\n\tvar minuend Interval\n\tvar subtrahend Interval\n\tfor i < len(s.Intervals) {\n\t\tif minuend.Stop != s.Intervals[i].Stop { // `i` changed?\n\t\t\tminuend = s.Intervals[i]\n\t\t}\n\t\tif j < len(in) {\n\t\t\tsubtrahend = in[j]\n\t\t} else {\n\t\t\tsubtrahend = Interval{math.MaxInt64, math.MaxInt64}\n\t\t}\n\n\t\tif minuend.Stop <= subtrahend.Start {\n\t\t\t// no overlapping\n\t\t\tn = append(n, minuend)\n\t\t\ti++\n\t\t} else if minuend.Start >= subtrahend.Stop {\n\t\t\t// no overlapping\n\t\t\tj++\n\t\t} else {\n\t\t\tif minuend.Start < subtrahend.Start && minuend.Stop <= subtrahend.Stop {\n\t\t\t\tn = append(n, Interval{minuend.Start, subtrahend.Start})\n\t\t\t\ti++\n\t\t\t} else if minuend.Start >= subtrahend.Start && minuend.Stop > subtrahend.Stop {\n\t\t\t\tminuend = Interval{subtrahend.Stop, minuend.Stop}\n\t\t\t\tj++\n\t\t\t} else if minuend.Start >= subtrahend.Start && minuend.Stop <= subtrahend.Stop {\n\t\t\t\t// minuend is completely removed\n\t\t\t\ti++\n\t\t\t} else if minuend.Start < subtrahend.Start && minuend.Stop > subtrahend.Stop {\n\t\t\t\tn = append(n, Interval{minuend.Start, subtrahend.Start})\n\t\t\t\tminuend = Interval{subtrahend.Stop, minuend.Stop}\n\t\t\t\tj++\n\t\t\t} else {\n\t\t\t\tpanic(\"should never be here\")\n\t\t\t}\n\t\t}\n\t}\n\n\ts.Intervals = n.Normalize()\n}\n\nfunc (s *UUIDSet) String() string {\n\treturn utils.ByteSliceToString(s.Bytes())\n}\n\nfunc (s *UUIDSet) encode(w io.Writer) {\n\tb, _ := s.SID.MarshalBinary()\n\n\t_, _ = w.Write(b)\n\tn := int64(len(s.Intervals))\n\n\t_ = binary.Write(w, binary.LittleEndian, n)\n\n\tfor _, i := range s.Intervals {\n\t\t_ = binary.Write(w, binary.LittleEndian, i.Start)\n\t\t_ = binary.Write(w, binary.LittleEndian, i.Stop)\n\t}\n}\n\nfunc (s *UUIDSet) Encode() []byte {\n\tvar buf bytes.Buffer\n\n\ts.encode(&buf)\n\n\treturn buf.Bytes()\n}\n\nfunc (s *UUIDSet) decode(data []byte) (int, error) {\n\tif len(data) < 24 {\n\t\treturn 0, errors.Errorf(\"invalid uuid set buffer, less 24\")\n\t}\n\n\tpos := 0\n\tvar err error\n\tif s.SID, err = uuid.FromBytes(data[0:16]); err != nil {\n\t\treturn 0, err\n\t}\n\tpos += 16\n\n\tn := int64(binary.LittleEndian.Uint64(data[pos : pos+8]))\n\tpos += 8\n\tif len(data) < int(16*n)+pos {\n\t\treturn 0, errors.Errorf(\"invalid uuid set buffer, must %d, but %d\", pos+int(16*n), len(data))\n\t}\n\n\ts.Intervals = make([]Interval, 0, n)\n\n\tvar in Interval\n\tfor i := int64(0); i < n; i++ {\n\t\tin.Start = int64(binary.LittleEndian.Uint64(data[pos : pos+8]))\n\t\tpos += 8\n\t\tin.Stop = int64(binary.LittleEndian.Uint64(data[pos : pos+8]))\n\t\tpos += 8\n\t\ts.Intervals = append(s.Intervals, in)\n\t}\n\n\treturn pos, nil\n}\n\nfunc (s *UUIDSet) Decode(data []byte) error {\n\tn, err := s.decode(data)\n\tif n != len(data) {\n\t\treturn errors.Errorf(\"invalid uuid set buffer, must %d, but %d\", n, len(data))\n\t}\n\treturn err\n}\n\nfunc (s *UUIDSet) Clone() *UUIDSet {\n\tclone := new(UUIDSet)\n\tclone.SID = s.SID\n\tclone.Intervals = make([]Interval, len(s.Intervals))\n\tcopy(clone.Intervals, s.Intervals)\n\treturn clone\n}\n\ntype MysqlGTIDSet struct {\n\tSets map[string]*UUIDSet\n}\n\nvar _ GTIDSet = &MysqlGTIDSet{}\n\nfunc ParseMysqlGTIDSet(str string) (GTIDSet, error) {\n\ts := new(MysqlGTIDSet)\n\ts.Sets = make(map[string]*UUIDSet)\n\tif str == \"\" {\n\t\treturn s, nil\n\t}\n\n\tsp := strings.Split(str, \",\")\n\n\t//todo, handle redundant same uuid\n\tfor i := 0; i < len(sp); i++ {\n\t\tif set, err := ParseUUIDSet(sp[i]); err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t} else {\n\t\t\ts.AddSet(set)\n\t\t}\n\t}\n\treturn s, nil\n}\n\nfunc DecodeMysqlGTIDSet(data []byte) (*MysqlGTIDSet, error) {\n\ts := new(MysqlGTIDSet)\n\n\tif len(data) < 8 {\n\t\treturn nil, errors.Errorf(\"invalid gtid set buffer, less 4\")\n\t}\n\n\tn := int(binary.LittleEndian.Uint64(data))\n\ts.Sets = make(map[string]*UUIDSet, n)\n\n\tpos := 8\n\n\tfor i := 0; i < n; i++ {\n\t\tset := new(UUIDSet)\n\t\tif n, err := set.decode(data[pos:]); err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t} else {\n\t\t\tpos += n\n\n\t\t\ts.AddSet(set)\n\t\t}\n\t}\n\treturn s, nil\n}\n\nfunc (s *MysqlGTIDSet) AddSet(set *UUIDSet) {\n\tif set == nil {\n\t\treturn\n\t}\n\tsid := set.SID.String()\n\to, ok := s.Sets[sid]\n\tif ok {\n\t\to.AddInterval(set.Intervals)\n\t} else {\n\t\ts.Sets[sid] = set\n\t}\n}\n\nfunc (s *MysqlGTIDSet) MinusSet(set *UUIDSet) {\n\tif set == nil {\n\t\treturn\n\t}\n\tsid := set.SID.String()\n\tuuidSet, ok := s.Sets[sid]\n\tif ok {\n\t\tuuidSet.MinusInterval(set.Intervals)\n\t\tif uuidSet.Intervals == nil {\n\t\t\tdelete(s.Sets, sid)\n\t\t}\n\t}\n}\n\nfunc (s *MysqlGTIDSet) Update(GTIDStr string) error {\n\tgtidSet, err := ParseMysqlGTIDSet(GTIDStr)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, uuidSet := range gtidSet.(*MysqlGTIDSet).Sets {\n\t\ts.AddSet(uuidSet)\n\t}\n\treturn nil\n}\n\nfunc (s *MysqlGTIDSet) AddGTID(uuid uuid.UUID, gno int64) {\n\tsid := uuid.String()\n\to, ok := s.Sets[sid]\n\tif ok {\n\t\to.Intervals.InsertInterval(Interval{gno, gno + 1})\n\t} else {\n\t\ts.Sets[sid] = &UUIDSet{uuid, IntervalSlice{Interval{gno, gno + 1}}}\n\t}\n}\n\nfunc (s *MysqlGTIDSet) Add(addend MysqlGTIDSet) error {\n\tfor _, uuidSet := range addend.Sets {\n\t\ts.AddSet(uuidSet)\n\t}\n\treturn nil\n}\n\nfunc (s *MysqlGTIDSet) Minus(subtrahend MysqlGTIDSet) error {\n\tfor _, uuidSet := range subtrahend.Sets {\n\t\ts.MinusSet(uuidSet)\n\t}\n\treturn nil\n}\n\nfunc (s *MysqlGTIDSet) Contain(o GTIDSet) bool {\n\tsub, ok := o.(*MysqlGTIDSet)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tfor key, set := range sub.Sets {\n\t\to, ok := s.Sets[key]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\n\t\tif !o.Contain(set) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (s *MysqlGTIDSet) Equal(o GTIDSet) bool {\n\tsub, ok := o.(*MysqlGTIDSet)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tif len(sub.Sets) != len(s.Sets) {\n\t\treturn false\n\t}\n\n\tfor key, set := range sub.Sets {\n\t\to, ok := s.Sets[key]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\n\t\tif !o.Intervals.Equal(set.Intervals) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (s *MysqlGTIDSet) String() string {\n\t// there is only one element in gtid set\n\tif len(s.Sets) == 1 {\n\t\tfor _, set := range s.Sets {\n\t\t\treturn set.String()\n\t\t}\n\t}\n\n\t// sort multi set\n\tvar buf bytes.Buffer\n\tsets := make([]string, 0, len(s.Sets))\n\tfor _, set := range s.Sets {\n\t\tsets = append(sets, set.String())\n\t}\n\tsort.Strings(sets)\n\n\tsep := \"\"\n\tfor _, set := range sets {\n\t\tbuf.WriteString(sep)\n\t\tbuf.WriteString(set)\n\t\tsep = \",\"\n\t}\n\n\treturn utils.ByteSliceToString(buf.Bytes())\n}\n\nfunc (s *MysqlGTIDSet) Encode() []byte {\n\tvar buf bytes.Buffer\n\n\t_ = binary.Write(&buf, binary.LittleEndian, uint64(len(s.Sets)))\n\n\tfor i := range s.Sets {\n\t\ts.Sets[i].encode(&buf)\n\t}\n\n\treturn buf.Bytes()\n}\n\nfunc (gtid *MysqlGTIDSet) Clone() GTIDSet {\n\tclone := &MysqlGTIDSet{\n\t\tSets: make(map[string]*UUIDSet),\n\t}\n\tfor sid, uuidSet := range gtid.Sets {\n\t\tclone.Sets[sid] = uuidSet.Clone()\n\t}\n\n\treturn clone\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/parse_binary.go",
    "content": "package mysql\n\nimport (\n\t\"encoding/binary\"\n\t\"math\"\n)\n\nfunc ParseBinaryInt8(data []byte) int8 {\n\treturn int8(data[0])\n}\nfunc ParseBinaryUint8(data []byte) uint8 {\n\treturn data[0]\n}\n\nfunc ParseBinaryInt16(data []byte) int16 {\n\treturn int16(binary.LittleEndian.Uint16(data))\n}\nfunc ParseBinaryUint16(data []byte) uint16 {\n\treturn binary.LittleEndian.Uint16(data)\n}\n\nfunc ParseBinaryInt24(data []byte) int32 {\n\tu32 := ParseBinaryUint24(data)\n\tif u32&0x00800000 != 0 {\n\t\tu32 |= 0xFF000000\n\t}\n\treturn int32(u32)\n}\nfunc ParseBinaryUint24(data []byte) uint32 {\n\treturn uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16\n}\n\nfunc ParseBinaryInt32(data []byte) int32 {\n\treturn int32(binary.LittleEndian.Uint32(data))\n}\nfunc ParseBinaryUint32(data []byte) uint32 {\n\treturn binary.LittleEndian.Uint32(data)\n}\n\nfunc ParseBinaryInt64(data []byte) int64 {\n\treturn int64(binary.LittleEndian.Uint64(data))\n}\nfunc ParseBinaryUint64(data []byte) uint64 {\n\treturn binary.LittleEndian.Uint64(data)\n}\n\nfunc ParseBinaryFloat32(data []byte) float32 {\n\treturn math.Float32frombits(binary.LittleEndian.Uint32(data))\n}\n\nfunc ParseBinaryFloat64(data []byte) float64 {\n\treturn math.Float64frombits(binary.LittleEndian.Uint64(data))\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/position.go",
    "content": "package mysql\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Position for binlog filename + position based replication\ntype Position struct {\n\tName string\n\tPos  uint32\n}\n\n// Compare the position information between the p and o,\n// if p > o return 1 means the position of p is further back than o.\nfunc (p Position) Compare(o Position) int {\n\t// First compare binlog name\n\tnameCmp := CompareBinlogFileName(p.Name, o.Name)\n\tif nameCmp != 0 {\n\t\treturn nameCmp\n\t}\n\t// Same binlog file, compare position\n\tif p.Pos > o.Pos {\n\t\treturn 1\n\t} else if p.Pos < o.Pos {\n\t\treturn -1\n\t} else {\n\t\treturn 0\n\t}\n}\n\nfunc (p Position) String() string {\n\treturn fmt.Sprintf(\"(%s, %d)\", p.Name, p.Pos)\n}\n\n// CompareBinlogFileName compares the binlog filename of a and b.\n// if a>b will return 1.\n// if b>a will return -1.\nfunc CompareBinlogFileName(a, b string) int {\n\t// sometimes it's convenient to construct a `Position` literal with no `Name`\n\tif a == \"\" && b == \"\" {\n\t\treturn 0\n\t} else if a == \"\" {\n\t\treturn -1\n\t} else if b == \"\" {\n\t\treturn 1\n\t}\n\n\tsplitBinlogName := func(n string) (string, int) {\n\t\t// mysqld appends a numeric extension to the binary log base name to generate binary log file names\n\t\t// ...\n\t\t// If you supply an extension in the log name (for example, --log-bin=base_name.extension),\n\t\t// the extension is silently removed and ignored.\n\t\t// ref: https://dev.mysql.com/doc/refman/8.0/en/binary-log.html\n\t\ti := strings.LastIndexByte(n, '.')\n\t\tif i == -1 {\n\t\t\t// try keeping backward compatibility\n\t\t\treturn n, 0\n\t\t}\n\n\t\tseq, err := strconv.Atoi(n[i+1:])\n\t\tif err != nil {\n\t\t\tpanic(fmt.Sprintf(\"binlog file %s doesn't contain numeric extension\", err))\n\t\t}\n\t\treturn n[:i], seq\n\t}\n\n\t// get the basename(aBase) and the serial number(aSeq)\n\taBase, aSeq := splitBinlogName(a)\n\tbBase, bSeq := splitBinlogName(b)\n\n\t// aBase and bBase generally will be equal if they are both from the same database configuration.\n\tif aBase > bBase {\n\t\treturn 1\n\t} else if aBase < bBase {\n\t\treturn -1\n\t}\n\n\tif aSeq > bSeq {\n\t\treturn 1\n\t} else if aSeq < bSeq {\n\t\treturn -1\n\t} else {\n\t\treturn 0\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/result.go",
    "content": "package mysql\n\n// Result should be created by NewResultWithoutRows or NewResult. The zero value\n// of Result is invalid.\ntype Result struct {\n\tStatus   uint16\n\tWarnings uint16\n\n\tInsertId     uint64\n\tAffectedRows uint64\n\n\t*Resultset\n}\n\nfunc NewResult(resultset *Resultset) *Result {\n\treturn &Result{\n\t\tResultset: resultset,\n\t}\n}\n\nfunc NewResultReserveResultset(fieldCount int) *Result {\n\treturn &Result{\n\t\tResultset: NewResultset(fieldCount),\n\t}\n}\n\ntype Executer interface {\n\tExecute(query string, args ...interface{}) (*Result, error)\n}\n\nfunc (r *Result) Close() {\n\tif r.Resultset != nil {\n\t\tr.Resultset.returnToPool()\n\t\tr.Resultset = nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/resultset.go",
    "content": "package mysql\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"sync\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/pingcap/errors\"\n)\n\ntype StreamingType int\n\nconst (\n\t// StreamingNone means there is no streaming\n\tStreamingNone StreamingType = iota\n\t// StreamingSelect is used with select queries for which each result is\n\t// directly returned to the client\n\tStreamingSelect\n\t// StreamingMultiple is used when multiple queries are given at once\n\t// usually in combination with SERVER_MORE_RESULTS_EXISTS flag set\n\tStreamingMultiple\n)\n\n// Resultset should be created with NewResultset to avoid nil pointer and reduce\n// GC pressure.\ntype Resultset struct {\n\tFields     []*Field\n\tFieldNames map[string]int\n\tValues     [][]FieldValue\n\n\tRawPkg []byte\n\n\tRowDatas []RowData\n\n\tStreaming     StreamingType\n\tStreamingDone bool\n}\n\nvar (\n\tresultsetPool = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn &Resultset{}\n\t\t},\n\t}\n)\n\nfunc NewResultset(fieldsCount int) *Resultset {\n\tr := resultsetPool.Get().(*Resultset)\n\tr.Reset(fieldsCount)\n\treturn r\n}\n\nfunc (r *Resultset) returnToPool() {\n\tresultsetPool.Put(r)\n}\n\nfunc (r *Resultset) Reset(fieldsCount int) {\n\tr.RawPkg = r.RawPkg[:0]\n\n\tr.Fields = r.Fields[:0]\n\tr.Values = r.Values[:0]\n\tr.RowDatas = r.RowDatas[:0]\n\n\tif r.FieldNames != nil {\n\t\tclear(r.FieldNames)\n\t} else {\n\t\tr.FieldNames = make(map[string]int)\n\t}\n\n\tif fieldsCount == 0 {\n\t\treturn\n\t}\n\n\tif cap(r.Fields) < fieldsCount {\n\t\tr.Fields = make([]*Field, fieldsCount)\n\t} else {\n\t\tr.Fields = r.Fields[:fieldsCount]\n\t}\n}\n\n// RowNumber is returning the number of rows in the [Resultset].\nfunc (r *Resultset) RowNumber() int {\n\treturn len(r.Values)\n}\n\n// ColumnNumber is returning the number of fields in the [Resultset].\nfunc (r *Resultset) ColumnNumber() int {\n\treturn len(r.Fields)\n}\n\nfunc (r *Resultset) GetValue(row, column int) (interface{}, error) {\n\tif row >= len(r.Values) || row < 0 {\n\t\treturn nil, errors.Errorf(\"invalid row index %d\", row)\n\t}\n\n\tif column >= len(r.Fields) || column < 0 {\n\t\treturn nil, errors.Errorf(\"invalid column index %d\", column)\n\t}\n\n\treturn r.Values[row][column].Value(), nil\n}\n\nfunc (r *Resultset) NameIndex(name string) (int, error) {\n\tif column, ok := r.FieldNames[name]; ok {\n\t\treturn column, nil\n\t} else {\n\t\treturn 0, errors.Errorf(\"invalid field name %s\", name)\n\t}\n}\n\nfunc (r *Resultset) GetValueByName(row int, name string) (interface{}, error) {\n\tif column, err := r.NameIndex(name); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t} else {\n\t\treturn r.GetValue(row, column)\n\t}\n}\n\nfunc (r *Resultset) IsNull(row, column int) (bool, error) {\n\td, err := r.GetValue(row, column)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn d == nil, nil\n}\n\nfunc (r *Resultset) IsNullByName(row int, name string) (bool, error) {\n\tif column, err := r.NameIndex(name); err != nil {\n\t\treturn false, err\n\t} else {\n\t\treturn r.IsNull(row, column)\n\t}\n}\n\nfunc (r *Resultset) GetUint(row, column int) (uint64, error) {\n\td, err := r.GetValue(row, column)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tswitch v := d.(type) {\n\tcase int:\n\t\treturn uint64(v), nil\n\tcase int8:\n\t\treturn uint64(v), nil\n\tcase int16:\n\t\treturn uint64(v), nil\n\tcase int32:\n\t\treturn uint64(v), nil\n\tcase int64:\n\t\treturn uint64(v), nil\n\tcase uint:\n\t\treturn uint64(v), nil\n\tcase uint8:\n\t\treturn uint64(v), nil\n\tcase uint16:\n\t\treturn uint64(v), nil\n\tcase uint32:\n\t\treturn uint64(v), nil\n\tcase uint64:\n\t\treturn v, nil\n\tcase float32:\n\t\treturn uint64(v), nil\n\tcase float64:\n\t\treturn uint64(v), nil\n\tcase string:\n\t\treturn strconv.ParseUint(v, 10, 64)\n\tcase []byte:\n\t\treturn strconv.ParseUint(string(v), 10, 64)\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, errors.Errorf(\"data type is %T\", v)\n\t}\n}\n\nfunc (r *Resultset) GetUintByName(row int, name string) (uint64, error) {\n\tif column, err := r.NameIndex(name); err != nil {\n\t\treturn 0, err\n\t} else {\n\t\treturn r.GetUint(row, column)\n\t}\n}\n\nfunc (r *Resultset) GetInt(row, column int) (int64, error) {\n\td, err := r.GetValue(row, column)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tswitch v := d.(type) {\n\tcase int:\n\t\treturn int64(v), nil\n\tcase int8:\n\t\treturn int64(v), nil\n\tcase int16:\n\t\treturn int64(v), nil\n\tcase int32:\n\t\treturn int64(v), nil\n\tcase int64:\n\t\treturn v, nil\n\tcase uint:\n\t\treturn int64(v), nil\n\tcase uint8:\n\t\treturn int64(v), nil\n\tcase uint16:\n\t\treturn int64(v), nil\n\tcase uint32:\n\t\treturn int64(v), nil\n\tcase uint64:\n\t\treturn int64(v), nil\n\tcase float32:\n\t\treturn int64(v), nil\n\tcase float64:\n\t\treturn int64(v), nil\n\tcase string:\n\t\treturn strconv.ParseInt(v, 10, 64)\n\tcase []byte:\n\t\treturn strconv.ParseInt(string(v), 10, 64)\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, errors.Errorf(\"data type is %T\", v)\n\t}\n}\n\nfunc (r *Resultset) GetIntByName(row int, name string) (int64, error) {\n\tv, err := r.GetUintByName(row, name)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn int64(v), nil\n}\n\nfunc (r *Resultset) GetFloat(row, column int) (float64, error) {\n\td, err := r.GetValue(row, column)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tswitch v := d.(type) {\n\tcase int:\n\t\treturn float64(v), nil\n\tcase int8:\n\t\treturn float64(v), nil\n\tcase int16:\n\t\treturn float64(v), nil\n\tcase int32:\n\t\treturn float64(v), nil\n\tcase int64:\n\t\treturn float64(v), nil\n\tcase uint:\n\t\treturn float64(v), nil\n\tcase uint8:\n\t\treturn float64(v), nil\n\tcase uint16:\n\t\treturn float64(v), nil\n\tcase uint32:\n\t\treturn float64(v), nil\n\tcase uint64:\n\t\treturn float64(v), nil\n\tcase float32:\n\t\treturn float64(v), nil\n\tcase float64:\n\t\treturn v, nil\n\tcase string:\n\t\treturn strconv.ParseFloat(v, 64)\n\tcase []byte:\n\t\treturn strconv.ParseFloat(string(v), 64)\n\tcase nil:\n\t\treturn 0, nil\n\tdefault:\n\t\treturn 0, errors.Errorf(\"data type is %T\", v)\n\t}\n}\n\nfunc (r *Resultset) GetFloatByName(row int, name string) (float64, error) {\n\tif column, err := r.NameIndex(name); err != nil {\n\t\treturn 0, err\n\t} else {\n\t\treturn r.GetFloat(row, column)\n\t}\n}\n\nfunc (r *Resultset) GetString(row, column int) (string, error) {\n\td, err := r.GetValue(row, column)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tswitch v := d.(type) {\n\tcase string:\n\t\treturn v, nil\n\tcase []byte:\n\t\treturn utils.ByteSliceToString(v), nil\n\tcase int, int8, int16, int32, int64,\n\t\tuint, uint8, uint16, uint32, uint64:\n\t\treturn fmt.Sprintf(\"%d\", v), nil\n\tcase float32:\n\t\treturn strconv.FormatFloat(float64(v), 'f', -1, 64), nil\n\tcase float64:\n\t\treturn strconv.FormatFloat(v, 'f', -1, 64), nil\n\tcase nil:\n\t\treturn \"\", nil\n\tdefault:\n\t\treturn \"\", errors.Errorf(\"data type is %T\", v)\n\t}\n}\n\nfunc (r *Resultset) GetStringByName(row int, name string) (string, error) {\n\tif column, err := r.NameIndex(name); err != nil {\n\t\treturn \"\", err\n\t} else {\n\t\treturn r.GetString(row, column)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/resultset_helper.go",
    "content": "package mysql\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"math\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/pingcap/errors\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\nfunc FormatTextValue(value interface{}) ([]byte, error) {\n\tswitch v := value.(type) {\n\tcase int8:\n\t\treturn strconv.AppendInt(nil, int64(v), 10), nil\n\tcase int16:\n\t\treturn strconv.AppendInt(nil, int64(v), 10), nil\n\tcase int32:\n\t\treturn strconv.AppendInt(nil, int64(v), 10), nil\n\tcase int64:\n\t\treturn strconv.AppendInt(nil, v, 10), nil\n\tcase int:\n\t\treturn strconv.AppendInt(nil, int64(v), 10), nil\n\tcase uint8:\n\t\treturn strconv.AppendUint(nil, uint64(v), 10), nil\n\tcase uint16:\n\t\treturn strconv.AppendUint(nil, uint64(v), 10), nil\n\tcase uint32:\n\t\treturn strconv.AppendUint(nil, uint64(v), 10), nil\n\tcase uint64:\n\t\treturn strconv.AppendUint(nil, v, 10), nil\n\tcase uint:\n\t\treturn strconv.AppendUint(nil, uint64(v), 10), nil\n\tcase float32:\n\t\treturn strconv.AppendFloat(nil, float64(v), 'f', -1, 64), nil\n\tcase float64:\n\t\treturn strconv.AppendFloat(nil, v, 'f', -1, 64), nil\n\tcase []byte:\n\t\treturn v, nil\n\tcase string:\n\t\treturn utils.StringToByteSlice(v), nil\n\tcase time.Time:\n\t\treturn utils.StringToByteSlice(v.Format(time.DateTime)), nil\n\tcase nil:\n\t\treturn nil, nil\n\tdefault:\n\t\treturn nil, errors.Errorf(\"invalid type %T\", value)\n\t}\n}\n\nfunc toBinaryDateTime(t time.Time) ([]byte, error) {\n\tvar buf bytes.Buffer\n\n\tif t.IsZero() {\n\t\treturn nil, nil\n\t}\n\n\tyear, month, day := t.Year(), t.Month(), t.Day()\n\thour, min, sec := t.Hour(), t.Minute(), t.Second()\n\tnanosec := t.Nanosecond()\n\n\tif nanosec > 0 {\n\t\tbuf.WriteByte(byte(11))\n\t\t_ = binary.Write(&buf, binary.LittleEndian, uint16(year))\n\t\tbuf.WriteByte(byte(month))\n\t\tbuf.WriteByte(byte(day))\n\t\tbuf.WriteByte(byte(hour))\n\t\tbuf.WriteByte(byte(min))\n\t\tbuf.WriteByte(byte(sec))\n\t\t_ = binary.Write(&buf, binary.LittleEndian, uint32(nanosec/1000))\n\t} else if hour > 0 || min > 0 || sec > 0 {\n\t\tbuf.WriteByte(byte(7))\n\t\t_ = binary.Write(&buf, binary.LittleEndian, uint16(year))\n\t\tbuf.WriteByte(byte(month))\n\t\tbuf.WriteByte(byte(day))\n\t\tbuf.WriteByte(byte(hour))\n\t\tbuf.WriteByte(byte(min))\n\t\tbuf.WriteByte(byte(sec))\n\t} else {\n\t\tbuf.WriteByte(byte(4))\n\t\t_ = binary.Write(&buf, binary.LittleEndian, uint16(year))\n\t\tbuf.WriteByte(byte(month))\n\t\tbuf.WriteByte(byte(day))\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\nfunc formatBinaryValue(value interface{}) ([]byte, error) {\n\tswitch v := value.(type) {\n\tcase int8:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase int16:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase int32:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase int64:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase int:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase uint8:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase uint16:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase uint32:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase uint64:\n\t\treturn Uint64ToBytes(v), nil\n\tcase uint:\n\t\treturn Uint64ToBytes(uint64(v)), nil\n\tcase float32:\n\t\treturn Uint64ToBytes(math.Float64bits(float64(v))), nil\n\tcase float64:\n\t\treturn Uint64ToBytes(math.Float64bits(v)), nil\n\tcase []byte:\n\t\treturn v, nil\n\tcase string:\n\t\treturn utils.StringToByteSlice(v), nil\n\tcase time.Time:\n\t\treturn toBinaryDateTime(v)\n\tdefault:\n\t\treturn nil, errors.Errorf(\"invalid type %T\", value)\n\t}\n}\n\nfunc fieldType(value interface{}) (typ uint8, err error) {\n\tswitch value.(type) {\n\tcase int8, int16, int32, int64, int:\n\t\ttyp = MYSQL_TYPE_LONGLONG\n\tcase uint8, uint16, uint32, uint64, uint:\n\t\ttyp = MYSQL_TYPE_LONGLONG\n\tcase float32, float64:\n\t\ttyp = MYSQL_TYPE_DOUBLE\n\tcase string, []byte:\n\t\ttyp = MYSQL_TYPE_VAR_STRING\n\tcase time.Time:\n\t\ttyp = MYSQL_TYPE_DATETIME\n\tcase nil:\n\t\ttyp = MYSQL_TYPE_NULL\n\tdefault:\n\t\terr = errors.Errorf(\"unsupport type %T for resultset\", value)\n\t}\n\treturn\n}\n\nfunc formatField(field *Field, value interface{}) error {\n\tswitch value.(type) {\n\tcase int8, int16, int32, int64, int:\n\t\tfield.Charset = 63\n\t\tfield.Flag = BINARY_FLAG | NOT_NULL_FLAG\n\tcase uint8, uint16, uint32, uint64, uint:\n\t\tfield.Charset = 63\n\t\tfield.Flag = BINARY_FLAG | NOT_NULL_FLAG | UNSIGNED_FLAG\n\tcase float32, float64:\n\t\tfield.Charset = 63\n\t\tfield.Flag = BINARY_FLAG | NOT_NULL_FLAG\n\tcase string, []byte, time.Time:\n\t\tfield.Charset = 33\n\tcase nil:\n\t\tfield.Charset = 33\n\tdefault:\n\t\treturn errors.Errorf(\"unsupport type %T for resultset\", value)\n\t}\n\treturn nil\n}\n\nfunc BuildSimpleTextResultset(names []string, values [][]interface{}) (*Resultset, error) {\n\tr := NewResultset(len(names))\n\n\tvar b []byte\n\n\tif len(values) == 0 {\n\t\tfor i, name := range names {\n\t\t\tr.Fields[i] = &Field{Name: utils.StringToByteSlice(name), Charset: 33, Type: MYSQL_TYPE_NULL}\n\t\t}\n\t\treturn r, nil\n\t}\n\n\tfor i, vs := range values {\n\t\tif len(vs) != len(r.Fields) {\n\t\t\treturn nil, errors.Errorf(\"row %d has %d column not equal %d\", i, len(vs), len(r.Fields))\n\t\t}\n\n\t\tvar row []byte\n\t\tfor j, value := range vs {\n\t\t\ttyp, err := fieldType(value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\t\t\tif r.Fields[j] == nil {\n\t\t\t\tr.Fields[j] = &Field{Name: utils.StringToByteSlice(names[j]), Type: typ}\n\t\t\t\terr = formatField(r.Fields[j], value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t\t}\n\t\t\t} else if typ != r.Fields[j].Type {\n\t\t\t\t// we got another type in the same column. in general, we treat it as an error, except\n\t\t\t\t// the case, when old value was null, and the new one isn't null, so we can update\n\t\t\t\t// type info for fields.\n\t\t\t\toldIsNull, newIsNull := r.Fields[j].Type == MYSQL_TYPE_NULL, typ == MYSQL_TYPE_NULL\n\t\t\t\tif oldIsNull && !newIsNull { // old is null, new isn't, update type info.\n\t\t\t\t\tr.Fields[j].Type = typ\n\t\t\t\t\terr = formatField(r.Fields[j], value)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t\t\t}\n\t\t\t\t} else if !oldIsNull && !newIsNull { // different non-null types, that's an error.\n\t\t\t\t\treturn nil, errors.Errorf(\"row types aren't consistent\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tb, err = FormatTextValue(value)\n\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\n\t\t\tif b == nil {\n\t\t\t\t// NULL value is encoded as 0xfb here (without additional info about length)\n\t\t\t\trow = append(row, 0xfb)\n\t\t\t} else {\n\t\t\t\trow = append(row, PutLengthEncodedString(b)...)\n\t\t\t}\n\t\t}\n\n\t\tr.RowDatas = append(r.RowDatas, row)\n\t}\n\n\treturn r, nil\n}\n\nfunc BuildSimpleBinaryResultset(names []string, values [][]interface{}) (*Resultset, error) {\n\tr := NewResultset(len(names))\n\n\tvar b []byte\n\n\tbitmapLen := (len(names) + 7 + 2) >> 3\n\n\tfor i, vs := range values {\n\t\tif len(vs) != len(r.Fields) {\n\t\t\treturn nil, errors.Errorf(\"row %d has %d column not equal %d\", i, len(vs), len(r.Fields))\n\t\t}\n\n\t\tvar row []byte\n\t\tnullBitmap := make([]byte, bitmapLen)\n\n\t\trow = append(row, 0)\n\t\trow = append(row, nullBitmap...)\n\n\t\tfor j, value := range vs {\n\t\t\ttyp, err := fieldType(value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\t\t\tif i == 0 {\n\t\t\t\tfield := &Field{Type: typ}\n\t\t\t\tr.Fields[j] = field\n\t\t\t\tfield.Name = utils.StringToByteSlice(names[j])\n\n\t\t\t\tif err = formatField(field, value); err != nil {\n\t\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif value == nil {\n\t\t\t\tnullBitmap[(j+2)/8] |= 1 << (uint(j+2) % 8)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tb, err = formatBinaryValue(value)\n\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\n\t\t\tif r.Fields[j].Type == MYSQL_TYPE_VAR_STRING {\n\t\t\t\trow = append(row, PutLengthEncodedString(b)...)\n\t\t\t} else {\n\t\t\t\trow = append(row, b...)\n\t\t\t}\n\t\t}\n\n\t\tcopy(row[1:], nullBitmap)\n\n\t\tr.RowDatas = append(r.RowDatas, row)\n\t}\n\n\treturn r, nil\n}\n\nfunc BuildSimpleResultset(names []string, values [][]interface{}, binary bool) (*Resultset, error) {\n\tif binary {\n\t\treturn BuildSimpleBinaryResultset(names, values)\n\t} else {\n\t\treturn BuildSimpleTextResultset(names, values)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/rowdata.go",
    "content": "package mysql\n\nimport (\n\t\"strconv\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/pingcap/errors\"\n)\n\ntype RowData []byte\n\nfunc (p RowData) Parse(f []*Field, binary bool, dst []FieldValue) ([]FieldValue, error) {\n\tif binary {\n\t\treturn p.ParseBinary(f, dst)\n\t} else {\n\t\treturn p.ParseText(f, dst)\n\t}\n}\n\nfunc (p RowData) ParseText(f []*Field, dst []FieldValue) ([]FieldValue, error) {\n\tfor len(dst) < len(f) {\n\t\tdst = append(dst, FieldValue{})\n\t}\n\tdata := dst[:len(f)]\n\n\tvar err error\n\tvar v []byte\n\tvar isNull bool\n\tvar pos, n int\n\n\tfor i := range f {\n\t\tv, isNull, n, err = LengthEncodedString(p[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, errors.Trace(err)\n\t\t}\n\n\t\tpos += n\n\n\t\tif isNull {\n\t\t\tdata[i].Type = FieldValueTypeNull\n\t\t} else {\n\t\t\tisUnsigned := f[i].Flag&UNSIGNED_FLAG != 0\n\n\t\t\tswitch f[i].Type {\n\t\t\tcase MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_INT24,\n\t\t\t\tMYSQL_TYPE_LONGLONG, MYSQL_TYPE_LONG, MYSQL_TYPE_YEAR:\n\t\t\t\tif isUnsigned {\n\t\t\t\t\tvar val uint64\n\t\t\t\t\tdata[i].Type = FieldValueTypeUnsigned\n\t\t\t\t\tval, err = strconv.ParseUint(utils.ByteSliceToString(v), 10, 64)\n\t\t\t\t\tdata[i].value = val\n\t\t\t\t} else {\n\t\t\t\t\tvar val int64\n\t\t\t\t\tdata[i].Type = FieldValueTypeSigned\n\t\t\t\t\tval, err = strconv.ParseInt(utils.ByteSliceToString(v), 10, 64)\n\t\t\t\t\tdata[i].value = utils.Int64ToUint64(val)\n\t\t\t\t}\n\t\t\tcase MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE:\n\t\t\t\tvar val float64\n\t\t\t\tdata[i].Type = FieldValueTypeFloat\n\t\t\t\tval, err = strconv.ParseFloat(utils.ByteSliceToString(v), 64)\n\t\t\t\tdata[i].value = utils.Float64ToUint64(val)\n\t\t\tdefault:\n\t\t\t\tdata[i].Type = FieldValueTypeString\n\t\t\t\tdata[i].str = append(data[i].str[:0], v...)\n\t\t\t}\n\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data, nil\n}\n\n// ParseBinary parses the binary format of data\n// see https://dev.mysql.com/doc/internals/en/binary-protocol-value.html\nfunc (p RowData) ParseBinary(f []*Field, dst []FieldValue) ([]FieldValue, error) {\n\tfor len(dst) < len(f) {\n\t\tdst = append(dst, FieldValue{})\n\t}\n\tdata := dst[:len(f)]\n\n\tif p[0] != OK_HEADER {\n\t\treturn nil, ErrMalformPacket\n\t}\n\n\tpos := 1 + ((len(f) + 7 + 2) >> 3)\n\n\tnullBitmap := p[1:pos]\n\n\tvar isNull bool\n\tvar n int\n\tvar err error\n\tvar v []byte\n\tfor i := range data {\n\t\tif nullBitmap[(i+2)/8]&(1<<(uint(i+2)%8)) > 0 {\n\t\t\tdata[i].Type = FieldValueTypeNull\n\t\t\tcontinue\n\t\t}\n\n\t\tisUnsigned := f[i].Flag&UNSIGNED_FLAG != 0\n\n\t\tswitch f[i].Type {\n\t\tcase MYSQL_TYPE_NULL:\n\t\t\tdata[i].Type = FieldValueTypeNull\n\t\t\tcontinue\n\n\t\tcase MYSQL_TYPE_TINY:\n\t\t\tif isUnsigned {\n\t\t\t\tv := ParseBinaryUint8(p[pos : pos+1])\n\t\t\t\tdata[i].Type = FieldValueTypeUnsigned\n\t\t\t\tdata[i].value = uint64(v)\n\t\t\t} else {\n\t\t\t\tv := ParseBinaryInt8(p[pos : pos+1])\n\t\t\t\tdata[i].Type = FieldValueTypeSigned\n\t\t\t\tdata[i].value = utils.Int64ToUint64(int64(v))\n\t\t\t}\n\t\t\tpos++\n\t\t\tcontinue\n\n\t\tcase MYSQL_TYPE_SHORT, MYSQL_TYPE_YEAR:\n\t\t\tif isUnsigned {\n\t\t\t\tv := ParseBinaryUint16(p[pos : pos+2])\n\t\t\t\tdata[i].Type = FieldValueTypeUnsigned\n\t\t\t\tdata[i].value = uint64(v)\n\t\t\t} else {\n\t\t\t\tv := ParseBinaryInt16(p[pos : pos+2])\n\t\t\t\tdata[i].Type = FieldValueTypeSigned\n\t\t\t\tdata[i].value = utils.Int64ToUint64(int64(v))\n\t\t\t}\n\t\t\tpos += 2\n\t\t\tcontinue\n\n\t\tcase MYSQL_TYPE_INT24, MYSQL_TYPE_LONG:\n\t\t\tif isUnsigned {\n\t\t\t\tv := ParseBinaryUint32(p[pos : pos+4])\n\t\t\t\tdata[i].Type = FieldValueTypeUnsigned\n\t\t\t\tdata[i].value = uint64(v)\n\t\t\t} else {\n\t\t\t\tv := ParseBinaryInt32(p[pos : pos+4])\n\t\t\t\tdata[i].Type = FieldValueTypeSigned\n\t\t\t\tdata[i].value = utils.Int64ToUint64(int64(v))\n\t\t\t}\n\t\t\tpos += 4\n\t\t\tcontinue\n\n\t\tcase MYSQL_TYPE_LONGLONG:\n\t\t\tif isUnsigned {\n\t\t\t\tv := ParseBinaryUint64(p[pos : pos+8])\n\t\t\t\tdata[i].Type = FieldValueTypeUnsigned\n\t\t\t\tdata[i].value = v\n\t\t\t} else {\n\t\t\t\tv := ParseBinaryInt64(p[pos : pos+8])\n\t\t\t\tdata[i].Type = FieldValueTypeSigned\n\t\t\t\tdata[i].value = utils.Int64ToUint64(v)\n\t\t\t}\n\t\t\tpos += 8\n\t\t\tcontinue\n\n\t\tcase MYSQL_TYPE_FLOAT:\n\t\t\tv := ParseBinaryFloat32(p[pos : pos+4])\n\t\t\tdata[i].Type = FieldValueTypeFloat\n\t\t\tdata[i].value = utils.Float64ToUint64(float64(v))\n\t\t\tpos += 4\n\t\t\tcontinue\n\n\t\tcase MYSQL_TYPE_DOUBLE:\n\t\t\tv := ParseBinaryFloat64(p[pos : pos+8])\n\t\t\tdata[i].Type = FieldValueTypeFloat\n\t\t\tdata[i].value = utils.Float64ToUint64(v)\n\t\t\tpos += 8\n\t\t\tcontinue\n\n\t\tcase MYSQL_TYPE_DECIMAL, MYSQL_TYPE_NEWDECIMAL, MYSQL_TYPE_VARCHAR,\n\t\t\tMYSQL_TYPE_BIT, MYSQL_TYPE_ENUM, MYSQL_TYPE_SET, MYSQL_TYPE_TINY_BLOB,\n\t\t\tMYSQL_TYPE_MEDIUM_BLOB, MYSQL_TYPE_LONG_BLOB, MYSQL_TYPE_BLOB,\n\t\t\tMYSQL_TYPE_VAR_STRING, MYSQL_TYPE_STRING, MYSQL_TYPE_GEOMETRY, MYSQL_TYPE_JSON:\n\t\t\tv, isNull, n, err = LengthEncodedString(p[pos:])\n\t\t\tpos += n\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\n\t\t\tif !isNull {\n\t\t\t\tdata[i].Type = FieldValueTypeString\n\t\t\t\tdata[i].str = append(data[i].str[:0], v...)\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\tdata[i].Type = FieldValueTypeNull\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\tcase MYSQL_TYPE_DATE, MYSQL_TYPE_NEWDATE:\n\t\t\tvar num uint64\n\t\t\tnum, isNull, n = LengthEncodedInt(p[pos:])\n\n\t\t\tpos += n\n\n\t\t\tif isNull {\n\t\t\t\tdata[i].Type = FieldValueTypeNull\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdata[i].Type = FieldValueTypeString\n\t\t\tdata[i].str, err = FormatBinaryDate(int(num), p[pos:])\n\t\t\tpos += int(num)\n\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\n\t\tcase MYSQL_TYPE_TIMESTAMP, MYSQL_TYPE_DATETIME:\n\t\t\tvar num uint64\n\t\t\tnum, isNull, n = LengthEncodedInt(p[pos:])\n\n\t\t\tpos += n\n\n\t\t\tif isNull {\n\t\t\t\tdata[i].Type = FieldValueTypeNull\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdata[i].Type = FieldValueTypeString\n\t\t\tdata[i].str, err = FormatBinaryDateTime(int(num), p[pos:])\n\t\t\tpos += int(num)\n\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\n\t\tcase MYSQL_TYPE_TIME:\n\t\t\tvar num uint64\n\t\t\tnum, isNull, n = LengthEncodedInt(p[pos:])\n\n\t\t\tpos += n\n\n\t\t\tif isNull {\n\t\t\t\tdata[i].Type = FieldValueTypeNull\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdata[i].Type = FieldValueTypeString\n\t\t\tdata[i].str, err = FormatBinaryTime(int(num), p[pos:])\n\t\t\tpos += int(num)\n\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Trace(err)\n\t\t\t}\n\n\t\tdefault:\n\t\t\treturn nil, errors.Errorf(\"Stmt Unknown FieldType %d %s\", f[i].Type, f[i].Name)\n\t\t}\n\t}\n\n\treturn data, nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/state.go",
    "content": "package mysql\n\nconst (\n\tDEFAULT_MYSQL_STATE = \"HY000\"\n)\n\nvar MySQLState = map[uint16]string{\n\tER_DUP_KEY:                                  \"23000\",\n\tER_OUTOFMEMORY:                              \"HY001\",\n\tER_OUT_OF_SORTMEMORY:                        \"HY001\",\n\tER_CON_COUNT_ERROR:                          \"08004\",\n\tER_BAD_HOST_ERROR:                           \"08S01\",\n\tER_HANDSHAKE_ERROR:                          \"08S01\",\n\tER_DBACCESS_DENIED_ERROR:                    \"42000\",\n\tER_ACCESS_DENIED_ERROR:                      \"28000\",\n\tER_NO_DB_ERROR:                              \"3D000\",\n\tER_UNKNOWN_COM_ERROR:                        \"08S01\",\n\tER_BAD_NULL_ERROR:                           \"23000\",\n\tER_BAD_DB_ERROR:                             \"42000\",\n\tER_TABLE_EXISTS_ERROR:                       \"42S01\",\n\tER_BAD_TABLE_ERROR:                          \"42S02\",\n\tER_NON_UNIQ_ERROR:                           \"23000\",\n\tER_SERVER_SHUTDOWN:                          \"08S01\",\n\tER_BAD_FIELD_ERROR:                          \"42S22\",\n\tER_WRONG_FIELD_WITH_GROUP:                   \"42000\",\n\tER_WRONG_SUM_SELECT:                         \"42000\",\n\tER_WRONG_GROUP_FIELD:                        \"42000\",\n\tER_WRONG_VALUE_COUNT:                        \"21S01\",\n\tER_TOO_LONG_IDENT:                           \"42000\",\n\tER_DUP_FIELDNAME:                            \"42S21\",\n\tER_DUP_KEYNAME:                              \"42000\",\n\tER_DUP_ENTRY:                                \"23000\",\n\tER_WRONG_FIELD_SPEC:                         \"42000\",\n\tER_PARSE_ERROR:                              \"42000\",\n\tER_EMPTY_QUERY:                              \"42000\",\n\tER_NONUNIQ_TABLE:                            \"42000\",\n\tER_INVALID_DEFAULT:                          \"42000\",\n\tER_MULTIPLE_PRI_KEY:                         \"42000\",\n\tER_TOO_MANY_KEYS:                            \"42000\",\n\tER_TOO_MANY_KEY_PARTS:                       \"42000\",\n\tER_TOO_LONG_KEY:                             \"42000\",\n\tER_KEY_COLUMN_DOES_NOT_EXITS:                \"42000\",\n\tER_BLOB_USED_AS_KEY:                         \"42000\",\n\tER_TOO_BIG_FIELDLENGTH:                      \"42000\",\n\tER_WRONG_AUTO_KEY:                           \"42000\",\n\tER_FORCING_CLOSE:                            \"08S01\",\n\tER_IPSOCK_ERROR:                             \"08S01\",\n\tER_NO_SUCH_INDEX:                            \"42S12\",\n\tER_WRONG_FIELD_TERMINATORS:                  \"42000\",\n\tER_BLOBS_AND_NO_TERMINATED:                  \"42000\",\n\tER_CANT_REMOVE_ALL_FIELDS:                   \"42000\",\n\tER_CANT_DROP_FIELD_OR_KEY:                   \"42000\",\n\tER_BLOB_CANT_HAVE_DEFAULT:                   \"42000\",\n\tER_WRONG_DB_NAME:                            \"42000\",\n\tER_WRONG_TABLE_NAME:                         \"42000\",\n\tER_TOO_BIG_SELECT:                           \"42000\",\n\tER_UNKNOWN_PROCEDURE:                        \"42000\",\n\tER_WRONG_PARAMCOUNT_TO_PROCEDURE:            \"42000\",\n\tER_UNKNOWN_TABLE:                            \"42S02\",\n\tER_FIELD_SPECIFIED_TWICE:                    \"42000\",\n\tER_UNSUPPORTED_EXTENSION:                    \"42000\",\n\tER_TABLE_MUST_HAVE_COLUMNS:                  \"42000\",\n\tER_UNKNOWN_CHARACTER_SET:                    \"42000\",\n\tER_TOO_BIG_ROWSIZE:                          \"42000\",\n\tER_WRONG_OUTER_JOIN:                         \"42000\",\n\tER_NULL_COLUMN_IN_INDEX:                     \"42000\",\n\tER_PASSWORD_ANONYMOUS_USER:                  \"42000\",\n\tER_PASSWORD_NOT_ALLOWED:                     \"42000\",\n\tER_PASSWORD_NO_MATCH:                        \"42000\",\n\tER_WRONG_VALUE_COUNT_ON_ROW:                 \"21S01\",\n\tER_INVALID_USE_OF_NULL:                      \"22004\",\n\tER_REGEXP_ERROR:                             \"42000\",\n\tER_MIX_OF_GROUP_FUNC_AND_FIELDS:             \"42000\",\n\tER_NONEXISTING_GRANT:                        \"42000\",\n\tER_TABLEACCESS_DENIED_ERROR:                 \"42000\",\n\tER_COLUMNACCESS_DENIED_ERROR:                \"42000\",\n\tER_ILLEGAL_GRANT_FOR_TABLE:                  \"42000\",\n\tER_GRANT_WRONG_HOST_OR_USER:                 \"42000\",\n\tER_NO_SUCH_TABLE:                            \"42S02\",\n\tER_NONEXISTING_TABLE_GRANT:                  \"42000\",\n\tER_NOT_ALLOWED_COMMAND:                      \"42000\",\n\tER_SYNTAX_ERROR:                             \"42000\",\n\tER_ABORTING_CONNECTION:                      \"08S01\",\n\tER_NET_PACKET_TOO_LARGE:                     \"08S01\",\n\tER_NET_READ_ERROR_FROM_PIPE:                 \"08S01\",\n\tER_NET_FCNTL_ERROR:                          \"08S01\",\n\tER_NET_PACKETS_OUT_OF_ORDER:                 \"08S01\",\n\tER_NET_UNCOMPRESS_ERROR:                     \"08S01\",\n\tER_NET_READ_ERROR:                           \"08S01\",\n\tER_NET_READ_INTERRUPTED:                     \"08S01\",\n\tER_NET_ERROR_ON_WRITE:                       \"08S01\",\n\tER_NET_WRITE_INTERRUPTED:                    \"08S01\",\n\tER_TOO_LONG_STRING:                          \"42000\",\n\tER_TABLE_CANT_HANDLE_BLOB:                   \"42000\",\n\tER_TABLE_CANT_HANDLE_AUTO_INCREMENT:         \"42000\",\n\tER_WRONG_COLUMN_NAME:                        \"42000\",\n\tER_WRONG_KEY_COLUMN:                         \"42000\",\n\tER_DUP_UNIQUE:                               \"23000\",\n\tER_BLOB_KEY_WITHOUT_LENGTH:                  \"42000\",\n\tER_PRIMARY_CANT_HAVE_NULL:                   \"42000\",\n\tER_TOO_MANY_ROWS:                            \"42000\",\n\tER_REQUIRES_PRIMARY_KEY:                     \"42000\",\n\tER_KEY_DOES_NOT_EXITS:                       \"42000\",\n\tER_CHECK_NO_SUCH_TABLE:                      \"42000\",\n\tER_CHECK_NOT_IMPLEMENTED:                    \"42000\",\n\tER_CANT_DO_THIS_DURING_AN_TRANSACTION:       \"25000\",\n\tER_NEW_ABORTING_CONNECTION:                  \"08S01\",\n\tER_MASTER_NET_READ:                          \"08S01\",\n\tER_MASTER_NET_WRITE:                         \"08S01\",\n\tER_TOO_MANY_USER_CONNECTIONS:                \"42000\",\n\tER_READ_ONLY_TRANSACTION:                    \"25000\",\n\tER_NO_PERMISSION_TO_CREATE_USER:             \"42000\",\n\tER_LOCK_DEADLOCK:                            \"40001\",\n\tER_NO_REFERENCED_ROW:                        \"23000\",\n\tER_ROW_IS_REFERENCED:                        \"23000\",\n\tER_CONNECT_TO_MASTER:                        \"08S01\",\n\tER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT:        \"21000\",\n\tER_USER_LIMIT_REACHED:                       \"42000\",\n\tER_SPECIFIC_ACCESS_DENIED_ERROR:             \"42000\",\n\tER_NO_DEFAULT:                               \"42000\",\n\tER_WRONG_VALUE_FOR_VAR:                      \"42000\",\n\tER_WRONG_TYPE_FOR_VAR:                       \"42000\",\n\tER_CANT_USE_OPTION_HERE:                     \"42000\",\n\tER_NOT_SUPPORTED_YET:                        \"42000\",\n\tER_WRONG_FK_DEF:                             \"42000\",\n\tER_OPERAND_COLUMNS:                          \"21000\",\n\tER_SUBQUERY_NO_1_ROW:                        \"21000\",\n\tER_ILLEGAL_REFERENCE:                        \"42S22\",\n\tER_DERIVED_MUST_HAVE_ALIAS:                  \"42000\",\n\tER_SELECT_REDUCED:                           \"01000\",\n\tER_TABLENAME_NOT_ALLOWED_HERE:               \"42000\",\n\tER_NOT_SUPPORTED_AUTH_MODE:                  \"08004\",\n\tER_SPATIAL_CANT_HAVE_NULL:                   \"42000\",\n\tER_COLLATION_CHARSET_MISMATCH:               \"42000\",\n\tER_WARN_TOO_FEW_RECORDS:                     \"01000\",\n\tER_WARN_TOO_MANY_RECORDS:                    \"01000\",\n\tER_WARN_NULL_TO_NOTNULL:                     \"22004\",\n\tER_WARN_DATA_OUT_OF_RANGE:                   \"22003\",\n\tWARN_DATA_TRUNCATED:                         \"01000\",\n\tER_WRONG_NAME_FOR_INDEX:                     \"42000\",\n\tER_WRONG_NAME_FOR_CATALOG:                   \"42000\",\n\tER_UNKNOWN_STORAGE_ENGINE:                   \"42000\",\n\tER_TRUNCATED_WRONG_VALUE:                    \"22007\",\n\tER_SP_NO_RECURSIVE_CREATE:                   \"2F003\",\n\tER_SP_ALREADY_EXISTS:                        \"42000\",\n\tER_SP_DOES_NOT_EXIST:                        \"42000\",\n\tER_SP_LILABEL_MISMATCH:                      \"42000\",\n\tER_SP_LABEL_REDEFINE:                        \"42000\",\n\tER_SP_LABEL_MISMATCH:                        \"42000\",\n\tER_SP_UNINIT_VAR:                            \"01000\",\n\tER_SP_BADSELECT:                             \"0A000\",\n\tER_SP_BADRETURN:                             \"42000\",\n\tER_SP_BADSTATEMENT:                          \"0A000\",\n\tER_UPDATE_LOG_DEPRECATED_IGNORED:            \"42000\",\n\tER_UPDATE_LOG_DEPRECATED_TRANSLATED:         \"42000\",\n\tER_QUERY_INTERRUPTED:                        \"70100\",\n\tER_SP_WRONG_NO_OF_ARGS:                      \"42000\",\n\tER_SP_COND_MISMATCH:                         \"42000\",\n\tER_SP_NORETURN:                              \"42000\",\n\tER_SP_NORETURNEND:                           \"2F005\",\n\tER_SP_BAD_CURSOR_QUERY:                      \"42000\",\n\tER_SP_BAD_CURSOR_SELECT:                     \"42000\",\n\tER_SP_CURSOR_MISMATCH:                       \"42000\",\n\tER_SP_CURSOR_ALREADY_OPEN:                   \"24000\",\n\tER_SP_CURSOR_NOT_OPEN:                       \"24000\",\n\tER_SP_UNDECLARED_VAR:                        \"42000\",\n\tER_SP_FETCH_NO_DATA:                         \"02000\",\n\tER_SP_DUP_PARAM:                             \"42000\",\n\tER_SP_DUP_VAR:                               \"42000\",\n\tER_SP_DUP_COND:                              \"42000\",\n\tER_SP_DUP_CURS:                              \"42000\",\n\tER_SP_SUBSELECT_NYI:                         \"0A000\",\n\tER_STMT_NOT_ALLOWED_IN_SF_OR_TRG:            \"0A000\",\n\tER_SP_VARCOND_AFTER_CURSHNDLR:               \"42000\",\n\tER_SP_CURSOR_AFTER_HANDLER:                  \"42000\",\n\tER_SP_CASE_NOT_FOUND:                        \"20000\",\n\tER_DIVISION_BY_ZERO:                         \"22012\",\n\tER_ILLEGAL_VALUE_FOR_TYPE:                   \"22007\",\n\tER_PROCACCESS_DENIED_ERROR:                  \"42000\",\n\tER_XAER_NOTA:                                \"XAE04\",\n\tER_XAER_INVAL:                               \"XAE05\",\n\tER_XAER_RMFAIL:                              \"XAE07\",\n\tER_XAER_OUTSIDE:                             \"XAE09\",\n\tER_XAER_RMERR:                               \"XAE03\",\n\tER_XA_RBROLLBACK:                            \"XA100\",\n\tER_NONEXISTING_PROC_GRANT:                   \"42000\",\n\tER_DATA_TOO_LONG:                            \"22001\",\n\tER_SP_BAD_SQLSTATE:                          \"42000\",\n\tER_CANT_CREATE_USER_WITH_GRANT:              \"42000\",\n\tER_SP_DUP_HANDLER:                           \"42000\",\n\tER_SP_NOT_VAR_ARG:                           \"42000\",\n\tER_SP_NO_RETSET:                             \"0A000\",\n\tER_CANT_CREATE_GEOMETRY_OBJECT:              \"22003\",\n\tER_TOO_BIG_SCALE:                            \"42000\",\n\tER_TOO_BIG_PRECISION:                        \"42000\",\n\tER_M_BIGGER_THAN_D:                          \"42000\",\n\tER_TOO_LONG_BODY:                            \"42000\",\n\tER_TOO_BIG_DISPLAYWIDTH:                     \"42000\",\n\tER_XAER_DUPID:                               \"XAE08\",\n\tER_DATETIME_FUNCTION_OVERFLOW:               \"22008\",\n\tER_ROW_IS_REFERENCED_2:                      \"23000\",\n\tER_NO_REFERENCED_ROW_2:                      \"23000\",\n\tER_SP_BAD_VAR_SHADOW:                        \"42000\",\n\tER_SP_WRONG_NAME:                            \"42000\",\n\tER_SP_NO_AGGREGATE:                          \"42000\",\n\tER_MAX_PREPARED_STMT_COUNT_REACHED:          \"42000\",\n\tER_NON_GROUPING_FIELD_USED:                  \"42000\",\n\tER_FOREIGN_DUPLICATE_KEY_OLD_UNUSED:         \"23000\",\n\tER_CANT_CHANGE_TX_CHARACTERISTICS:           \"25001\",\n\tER_WRONG_PARAMCOUNT_TO_NATIVE_FCT:           \"42000\",\n\tER_WRONG_PARAMETERS_TO_NATIVE_FCT:           \"42000\",\n\tER_WRONG_PARAMETERS_TO_STORED_FCT:           \"42000\",\n\tER_DUP_ENTRY_WITH_KEY_NAME:                  \"23000\",\n\tER_XA_RBTIMEOUT:                             \"XA106\",\n\tER_XA_RBDEADLOCK:                            \"XA102\",\n\tER_FUNC_INEXISTENT_NAME_COLLISION:           \"42000\",\n\tER_DUP_SIGNAL_SET:                           \"42000\",\n\tER_SIGNAL_WARN:                              \"01000\",\n\tER_SIGNAL_NOT_FOUND:                         \"02000\",\n\tER_SIGNAL_EXCEPTION:                         \"HY000\",\n\tER_RESIGNAL_WITHOUT_ACTIVE_HANDLER:          \"0K000\",\n\tER_SPATIAL_MUST_HAVE_GEOM_COL:               \"42000\",\n\tER_DATA_OUT_OF_RANGE:                        \"22003\",\n\tER_ACCESS_DENIED_NO_PASSWORD_ERROR:          \"28000\",\n\tER_TRUNCATE_ILLEGAL_FK:                      \"42000\",\n\tER_DA_INVALID_CONDITION_NUMBER:              \"35000\",\n\tER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO:    \"23000\",\n\tER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO: \"23000\",\n\tER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION:    \"25006\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED:            \"0A000\",\n\tER_ALTER_OPERATION_NOT_SUPPORTED_REASON:     \"0A000\",\n\tER_DUP_UNKNOWN_IN_INDEX:                     \"23000\",\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/util.go",
    "content": "package mysql\n\nimport (\n\t\"bytes\"\n\t\"compress/zlib\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\tmrand \"math/rand\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/Masterminds/semver\"\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/pingcap/errors\"\n)\n\nfunc Pstack() string {\n\tbuf := make([]byte, 1024)\n\tn := runtime.Stack(buf, false)\n\treturn string(buf[0:n])\n}\n\nfunc CalcPassword(scramble, password []byte) []byte {\n\tif len(password) == 0 {\n\t\treturn nil\n\t}\n\n\t// stage1Hash = SHA1(password)\n\tcrypt := sha1.New()\n\tcrypt.Write(password)\n\tstage1 := crypt.Sum(nil)\n\n\t// scrambleHash = SHA1(scramble + SHA1(stage1Hash))\n\t// inner Hash\n\tcrypt.Reset()\n\tcrypt.Write(stage1)\n\thash := crypt.Sum(nil)\n\n\t// outer Hash\n\tcrypt.Reset()\n\tcrypt.Write(scramble)\n\tcrypt.Write(hash)\n\tscramble = crypt.Sum(nil)\n\n\t// token = scrambleHash XOR stage1Hash\n\tfor i := range scramble {\n\t\tscramble[i] ^= stage1[i]\n\t}\n\treturn scramble\n}\n\n// CalcCachingSha2Password: Hash password using MySQL 8+ method (SHA256)\nfunc CalcCachingSha2Password(scramble []byte, password string) []byte {\n\tif len(password) == 0 {\n\t\treturn nil\n\t}\n\n\t// XOR(SHA256(password), SHA256(SHA256(SHA256(password)), scramble))\n\n\tcrypt := sha256.New()\n\tcrypt.Write([]byte(password))\n\tmessage1 := crypt.Sum(nil)\n\n\tcrypt.Reset()\n\tcrypt.Write(message1)\n\tmessage1Hash := crypt.Sum(nil)\n\n\tcrypt.Reset()\n\tcrypt.Write(message1Hash)\n\tcrypt.Write(scramble)\n\tmessage2 := crypt.Sum(nil)\n\n\tfor i := range message1 {\n\t\tmessage1[i] ^= message2[i]\n\t}\n\n\treturn message1\n}\n\nfunc EncryptPassword(password string, seed []byte, pub *rsa.PublicKey) ([]byte, error) {\n\tplain := make([]byte, len(password)+1)\n\tcopy(plain, password)\n\tfor i := range plain {\n\t\tj := i % len(seed)\n\t\tplain[i] ^= seed[j]\n\t}\n\tsha1v := sha1.New()\n\treturn rsa.EncryptOAEP(sha1v, rand.Reader, pub, plain, nil)\n}\n\nfunc DecompressMariadbData(data []byte) ([]byte, error) {\n\t// algorithm always 0=zlib\n\t// algorithm := (data[pos] & 0x07) >> 4\n\theaderSize := int(data[0] & 0x07)\n\tuncompressedDataSize := BFixedLengthInt(data[1 : 1+headerSize])\n\tuncompressedData := make([]byte, uncompressedDataSize)\n\tr, err := zlib.NewReader(bytes.NewReader(data[1+headerSize:]))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer r.Close()\n\t_, err = io.ReadFull(r, uncompressedData)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn uncompressedData, nil\n}\n\n// AppendLengthEncodedInteger: encodes a uint64 value and appends it to the given bytes slice\nfunc AppendLengthEncodedInteger(b []byte, n uint64) []byte {\n\tswitch {\n\tcase n <= 250:\n\t\treturn append(b, byte(n))\n\n\tcase n <= 0xffff:\n\t\treturn append(b, 0xfc, byte(n), byte(n>>8))\n\n\tcase n <= 0xffffff:\n\t\treturn append(b, 0xfd, byte(n), byte(n>>8), byte(n>>16))\n\t}\n\treturn append(b, 0xfe, byte(n), byte(n>>8), byte(n>>16), byte(n>>24),\n\t\tbyte(n>>32), byte(n>>40), byte(n>>48), byte(n>>56))\n}\n\nfunc RandomBuf(size int) []byte {\n\tbuf := make([]byte, size)\n\t// When this project supports golang 1.20 as a minimum, then this mrand.New(...)\n\t// line can be eliminated and the random number can be generated by simply\n\t// calling mrand.Intn()\n\trandom := mrand.New(mrand.NewSource(time.Now().UTC().UnixNano()))\n\tmin, max := 30, 127\n\tfor i := 0; i < size; i++ {\n\t\tbuf[i] = byte(min + random.Intn(max-min))\n\t}\n\treturn buf\n}\n\n// FixedLengthInt: little endian\nfunc FixedLengthInt(buf []byte) uint64 {\n\tvar num uint64 = 0\n\tfor i, b := range buf {\n\t\tnum |= uint64(b) << (uint(i) * 8)\n\t}\n\treturn num\n}\n\n// BFixedLengthInt: big endian\nfunc BFixedLengthInt(buf []byte) uint64 {\n\tvar num uint64 = 0\n\tfor i, b := range buf {\n\t\tnum |= uint64(b) << (uint(len(buf)-i-1) * 8)\n\t}\n\treturn num\n}\n\nfunc LengthEncodedInt(b []byte) (num uint64, isNull bool, n int) {\n\tif len(b) == 0 {\n\t\treturn 0, true, 0\n\t}\n\n\tswitch b[0] {\n\t// 251: NULL\n\tcase 0xfb:\n\t\treturn 0, true, 1\n\n\t\t// 252: value of following 2\n\tcase 0xfc:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8, false, 3\n\n\t\t// 253: value of following 3\n\tcase 0xfd:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16, false, 4\n\n\t\t// 254: value of following 8\n\tcase 0xfe:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 |\n\t\t\t\tuint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 |\n\t\t\t\tuint64(b[7])<<48 | uint64(b[8])<<56,\n\t\t\tfalse, 9\n\t}\n\n\t// 0-250: value of first byte\n\treturn uint64(b[0]), false, 1\n}\n\nfunc PutLengthEncodedInt(n uint64) []byte {\n\tswitch {\n\tcase n <= 250:\n\t\treturn []byte{byte(n)}\n\n\tcase n <= 0xffff:\n\t\treturn []byte{0xfc, byte(n), byte(n >> 8)}\n\n\tcase n <= 0xffffff:\n\t\treturn []byte{0xfd, byte(n), byte(n >> 8), byte(n >> 16)}\n\n\tdefault:\n\t\t// handles case n <= 0xffffffffffffffff\n\t\t// using 'default' instead of 'case' to avoid static analysis error\n\t\t// SA4003: every value of type uint64 is <= math.MaxUint64\n\t\treturn []byte{0xfe, byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24),\n\t\t\tbyte(n >> 32), byte(n >> 40), byte(n >> 48), byte(n >> 56)}\n\t}\n}\n\n// LengthEncodedString returns the string read as a bytes slice, whether the value is NULL,\n// the number of bytes read and an error, in case the string is longer than\n// the input slice\nfunc LengthEncodedString(b []byte) ([]byte, bool, int, error) {\n\t// Get length\n\tnum, isNull, n := LengthEncodedInt(b)\n\tif num < 1 {\n\t\treturn b[n:n], isNull, n, nil\n\t}\n\n\tn += int(num)\n\n\t// Check data length\n\tif len(b) >= n {\n\t\treturn b[n-int(num) : n : n], false, n, nil\n\t}\n\treturn nil, false, n, io.EOF\n}\n\nfunc SkipLengthEncodedString(b []byte) (int, error) {\n\t// Get length\n\tnum, _, n := LengthEncodedInt(b)\n\tif num < 1 {\n\t\treturn n, nil\n\t}\n\n\tn += int(num)\n\n\t// Check data length\n\tif len(b) >= n {\n\t\treturn n, nil\n\t}\n\treturn n, io.EOF\n}\n\nfunc PutLengthEncodedString(b []byte) []byte {\n\tdata := make([]byte, 0, len(b)+9)\n\tdata = append(data, PutLengthEncodedInt(uint64(len(b)))...)\n\tdata = append(data, b...)\n\treturn data\n}\n\nfunc Uint16ToBytes(n uint16) []byte {\n\treturn []byte{\n\t\tbyte(n),\n\t\tbyte(n >> 8),\n\t}\n}\n\nfunc Uint32ToBytes(n uint32) []byte {\n\treturn []byte{\n\t\tbyte(n),\n\t\tbyte(n >> 8),\n\t\tbyte(n >> 16),\n\t\tbyte(n >> 24),\n\t}\n}\n\nfunc Uint64ToBytes(n uint64) []byte {\n\treturn []byte{\n\t\tbyte(n),\n\t\tbyte(n >> 8),\n\t\tbyte(n >> 16),\n\t\tbyte(n >> 24),\n\t\tbyte(n >> 32),\n\t\tbyte(n >> 40),\n\t\tbyte(n >> 48),\n\t\tbyte(n >> 56),\n\t}\n}\n\nfunc FormatBinaryDate(n int, data []byte) ([]byte, error) {\n\tswitch n {\n\tcase 0:\n\t\treturn []byte(\"0000-00-00\"), nil\n\tcase 4:\n\t\treturn []byte(fmt.Sprintf(\"%04d-%02d-%02d\",\n\t\t\tbinary.LittleEndian.Uint16(data[:2]),\n\t\t\tdata[2],\n\t\t\tdata[3])), nil\n\tdefault:\n\t\treturn nil, errors.Errorf(\"invalid date packet length %d\", n)\n\t}\n}\n\nfunc FormatBinaryDateTime(n int, data []byte) ([]byte, error) {\n\tswitch n {\n\tcase 0:\n\t\treturn []byte(\"0000-00-00 00:00:00\"), nil\n\tcase 4:\n\t\treturn []byte(fmt.Sprintf(\"%04d-%02d-%02d 00:00:00\",\n\t\t\tbinary.LittleEndian.Uint16(data[:2]),\n\t\t\tdata[2],\n\t\t\tdata[3])), nil\n\tcase 7:\n\t\treturn []byte(fmt.Sprintf(\n\t\t\t\"%04d-%02d-%02d %02d:%02d:%02d\",\n\t\t\tbinary.LittleEndian.Uint16(data[:2]),\n\t\t\tdata[2],\n\t\t\tdata[3],\n\t\t\tdata[4],\n\t\t\tdata[5],\n\t\t\tdata[6])), nil\n\tcase 11:\n\t\treturn []byte(fmt.Sprintf(\n\t\t\t\"%04d-%02d-%02d %02d:%02d:%02d.%06d\",\n\t\t\tbinary.LittleEndian.Uint16(data[:2]),\n\t\t\tdata[2],\n\t\t\tdata[3],\n\t\t\tdata[4],\n\t\t\tdata[5],\n\t\t\tdata[6],\n\t\t\tbinary.LittleEndian.Uint32(data[7:11]))), nil\n\tdefault:\n\t\treturn nil, errors.Errorf(\"invalid datetime packet length %d\", n)\n\t}\n}\n\nfunc FormatBinaryTime(n int, data []byte) ([]byte, error) {\n\tif n == 0 {\n\t\treturn []byte(\"00:00:00\"), nil\n\t}\n\n\tvar sign byte\n\tif data[0] == 1 {\n\t\tsign = byte('-')\n\t}\n\n\tvar bytes []byte\n\tswitch n {\n\tcase 8:\n\t\tbytes = []byte(fmt.Sprintf(\n\t\t\t\"%c%02d:%02d:%02d\",\n\t\t\tsign,\n\t\t\tuint16(data[1])*24+uint16(data[5]),\n\t\t\tdata[6],\n\t\t\tdata[7],\n\t\t))\n\tcase 12:\n\t\tbytes = []byte(fmt.Sprintf(\n\t\t\t\"%c%02d:%02d:%02d.%06d\",\n\t\t\tsign,\n\t\t\tuint16(data[1])*24+uint16(data[5]),\n\t\t\tdata[6],\n\t\t\tdata[7],\n\t\t\tbinary.LittleEndian.Uint32(data[8:12]),\n\t\t))\n\tdefault:\n\t\treturn nil, errors.Errorf(\"invalid time packet length %d\", n)\n\t}\n\tif bytes[0] == 0 {\n\t\treturn bytes[1:], nil\n\t}\n\treturn bytes, nil\n}\n\nvar (\n\tDONTESCAPE = byte(255)\n\n\tEncodeMap [256]byte\n)\n\n// Escape: only support utf-8\nfunc Escape(sql string) string {\n\tdest := make([]byte, 0, 2*len(sql))\n\n\tfor _, w := range utils.StringToByteSlice(sql) {\n\t\tif c := EncodeMap[w]; c == DONTESCAPE {\n\t\t\tdest = append(dest, w)\n\t\t} else {\n\t\t\tdest = append(dest, '\\\\', c)\n\t\t}\n\t}\n\n\treturn string(dest)\n}\n\nfunc GetNetProto(addr string) string {\n\tif strings.Contains(addr, \"/\") {\n\t\treturn \"unix\"\n\t} else {\n\t\treturn \"tcp\"\n\t}\n}\n\n// ErrorEqual returns a boolean indicating whether err1 is equal to err2.\nfunc ErrorEqual(err1, err2 error) bool {\n\te1 := errors.Cause(err1)\n\te2 := errors.Cause(err2)\n\n\tif e1 == e2 {\n\t\treturn true\n\t}\n\n\tif e1 == nil || e2 == nil {\n\t\treturn e1 == e2\n\t}\n\n\treturn e1.Error() == e2.Error()\n}\n\nfunc CompareServerVersions(a, b string) (int, error) {\n\tvar (\n\t\taVer, bVer *semver.Version\n\t\terr        error\n\t)\n\n\tif aVer, err = semver.NewVersion(a); err != nil {\n\t\treturn 0, fmt.Errorf(\"cannot parse %q as semver: %w\", a, err)\n\t}\n\n\tif bVer, err = semver.NewVersion(b); err != nil {\n\t\treturn 0, fmt.Errorf(\"cannot parse %q as semver: %w\", b, err)\n\t}\n\n\treturn aVer.Compare(bVer), nil\n}\n\nvar encodeRef = map[byte]byte{\n\t'\\x00': '0',\n\t'\\'':   '\\'',\n\t'\"':    '\"',\n\t'\\b':   'b',\n\t'\\n':   'n',\n\t'\\r':   'r',\n\t'\\t':   't',\n\t26:     'Z', // ctl-Z\n\t'\\\\':   '\\\\',\n}\n\nfunc init() {\n\tfor i := range EncodeMap {\n\t\tEncodeMap[i] = DONTESCAPE\n\t}\n\tfor i := range EncodeMap {\n\t\tif to, ok := encodeRef[byte(i)]; ok {\n\t\t\tEncodeMap[byte(i)] = to\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/mysql/validate.go",
    "content": "package mysql\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\nfunc ValidateFlavor(flavor string) error {\n\tswitch strings.ToLower(flavor) {\n\tcase MySQLFlavor:\n\t\treturn nil\n\tcase MariaDBFlavor:\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"%s is not a valid flavor\", flavor)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/packet/conn.go",
    "content": "package packet\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\tgoErrors \"errors\"\n\t\"io\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/go-mysql-org/go-mysql/compress\"\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/klauspost/compress/zstd\"\n\t\"github.com/pingcap/errors\"\n)\n\nconst MinCompressionLength = 50\nconst DefaultBufferSize = 16 * 1024\n\n// Conn is the base class to handle MySQL protocol.\ntype Conn struct {\n\tnet.Conn\n\n\treadTimeout  time.Duration\n\twriteTimeout time.Duration\n\n\t// Buffered reader for net.Conn in Non-TLS connection only to address replication performance issue.\n\t// See https://github.com/go-mysql-org/go-mysql/pull/422 for more details.\n\tbr     *bufio.Reader\n\treader io.Reader\n\n\tcopyNBuf []byte\n\n\theader [4]byte\n\n\tSequence uint8\n\n\tCompression uint8\n\n\tCompressedSequence uint8\n\n\tcompressedHeader [7]byte\n\n\tcompressedReader io.Reader\n\n\tcompressedReaderActive bool\n}\n\nfunc NewConn(conn net.Conn) *Conn {\n\treturn NewBufferedConn(conn, 65536) // 64kb\n}\n\nfunc NewBufferedConn(conn net.Conn, bufferSize int) *Conn {\n\tc := new(Conn)\n\tc.Conn = conn\n\n\tc.br = bufio.NewReaderSize(c, bufferSize)\n\tc.reader = c.br\n\n\tc.copyNBuf = make([]byte, DefaultBufferSize)\n\n\treturn c\n}\n\nfunc NewConnWithTimeout(conn net.Conn, readTimeout, writeTimeout time.Duration, bufferSize int) *Conn {\n\tc := NewBufferedConn(conn, bufferSize)\n\tc.readTimeout = readTimeout\n\tc.writeTimeout = writeTimeout\n\treturn c\n}\n\nfunc NewTLSConn(conn net.Conn) *Conn {\n\tc := new(Conn)\n\tc.Conn = conn\n\n\tc.reader = c\n\n\tc.copyNBuf = make([]byte, DefaultBufferSize)\n\n\treturn c\n}\n\nfunc NewTLSConnWithTimeout(conn net.Conn, readTimeout, writeTimeout time.Duration) *Conn {\n\tc := NewTLSConn(conn)\n\tc.readTimeout = readTimeout\n\tc.writeTimeout = writeTimeout\n\treturn c\n}\n\nfunc (c *Conn) ReadPacket() ([]byte, error) {\n\treturn c.ReadPacketReuseMem(nil)\n}\n\nfunc (c *Conn) ReadPacketReuseMem(dst []byte) ([]byte, error) {\n\t// Here we use `sync.Pool` to avoid allocate/destroy buffers frequently.\n\tbuf := utils.BytesBufferGet()\n\tdefer func() {\n\t\tutils.BytesBufferPut(buf)\n\t}()\n\n\tif c.Compression != MYSQL_COMPRESS_NONE {\n\t\t// it's possible that we're using compression but the server response with a compressed\n\t\t// packet with uncompressed length of 0. In this case we leave compressedReader nil. The\n\t\t// compressedReaderActive flag is important to track the state of the reader, allowing\n\t\t// for the compressedReader to be reset after a packet write. Without this flag, when a\n\t\t// compressed packet with uncompressed length of 0 is read, the compressedReader would\n\t\t// be nil, and we'd incorrectly attempt to read the next packet as compressed.\n\t\tif !c.compressedReaderActive {\n\t\t\tvar err error\n\t\t\tc.compressedReader, err = c.newCompressedPacketReader()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tc.compressedReaderActive = true\n\t\t}\n\t}\n\n\tif err := c.ReadPacketTo(buf); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\treadBytes := buf.Bytes()\n\treadSize := len(readBytes)\n\tvar result []byte\n\tif len(dst) > 0 {\n\t\tresult = append(dst, readBytes...)\n\t\t// if read block is big, do not cache buf anymore\n\t\tif readSize > utils.TooBigBlockSize {\n\t\t\tbuf = nil\n\t\t}\n\t} else {\n\t\tif readSize > utils.TooBigBlockSize {\n\t\t\t// if read block is big, use read block as result and do not cache buf anymore\n\t\t\tresult = readBytes\n\t\t\tbuf = nil\n\t\t} else {\n\t\t\tresult = append(dst, readBytes...)\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\n// newCompressedPacketReader creates a new compressed packet reader.\nfunc (c *Conn) newCompressedPacketReader() (io.Reader, error) {\n\tif c.readTimeout != 0 {\n\t\tif err := c.SetReadDeadline(utils.Now().Add(c.readTimeout)); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif _, err := io.ReadFull(c.reader, c.compressedHeader[:7]); err != nil {\n\t\treturn nil, errors.Wrapf(ErrBadConn, \"io.ReadFull(compressedHeader) failed. err %v\", err)\n\t}\n\n\tcompressedSequence := c.compressedHeader[3]\n\tif compressedSequence != c.CompressedSequence {\n\t\treturn nil, errors.Errorf(\"invalid compressed sequence %d != %d\",\n\t\t\tcompressedSequence, c.CompressedSequence)\n\t}\n\n\tcompressedLength := int(uint32(c.compressedHeader[0]) | uint32(c.compressedHeader[1])<<8 | uint32(c.compressedHeader[2])<<16)\n\tuncompressedLength := int(uint32(c.compressedHeader[4]) | uint32(c.compressedHeader[5])<<8 | uint32(c.compressedHeader[6])<<16)\n\tif uncompressedLength > 0 {\n\t\tlimitedReader := io.LimitReader(c.reader, int64(compressedLength))\n\t\tswitch c.Compression {\n\t\tcase MYSQL_COMPRESS_ZLIB:\n\t\t\treturn compress.GetPooledZlibReader(limitedReader)\n\t\tcase MYSQL_COMPRESS_ZSTD:\n\t\t\treturn zstd.NewReader(limitedReader)\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\nfunc (c *Conn) currentPacketReader() io.Reader {\n\tif c.Compression == MYSQL_COMPRESS_NONE || c.compressedReader == nil {\n\t\treturn c.reader\n\t} else {\n\t\treturn c.compressedReader\n\t}\n}\n\nfunc (c *Conn) copyN(dst io.Writer, n int64) (int64, error) {\n\tvar written int64\n\n\tfor n > 0 {\n\t\tbcap := cap(c.copyNBuf)\n\t\tif int64(bcap) > n {\n\t\t\tbcap = int(n)\n\t\t}\n\t\tbuf := c.copyNBuf[:bcap]\n\n\t\t// Call ReadAtLeast with the currentPacketReader as it may change on every iteration\n\t\t// of this loop.\n\t\tif c.readTimeout != 0 {\n\t\t\tif err := c.SetReadDeadline(utils.Now().Add(c.readTimeout)); err != nil {\n\t\t\t\treturn written, err\n\t\t\t}\n\t\t}\n\t\trd, err := io.ReadAtLeast(c.currentPacketReader(), buf, bcap)\n\n\t\tn -= int64(rd)\n\n\t\t// ReadAtLeast will return EOF or ErrUnexpectedEOF when fewer than the min\n\t\t// bytes are read. In this case, and when we have compression then advance\n\t\t// the sequence number and reset the compressed reader to continue reading\n\t\t// the remaining bytes in the next compressed packet.\n\t\tif c.Compression != MYSQL_COMPRESS_NONE &&\n\t\t\t(goErrors.Is(err, io.ErrUnexpectedEOF) || goErrors.Is(err, io.EOF)) {\n\t\t\t// we have read to EOF and read an incomplete uncompressed packet\n\t\t\t// so advance the compressed sequence number and reset the compressed reader\n\t\t\t// to get the remaining unread uncompressed bytes from the next compressed packet.\n\t\t\tc.CompressedSequence++\n\t\t\tif c.compressedReader, err = c.newCompressedPacketReader(); err != nil {\n\t\t\t\treturn written, errors.Trace(err)\n\t\t\t}\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn written, errors.Trace(err)\n\t\t}\n\n\t\t// careful to only write from the buffer the number of bytes read\n\t\twr, err := dst.Write(buf[:rd])\n\t\twritten += int64(wr)\n\t\tif err != nil {\n\t\t\treturn written, errors.Trace(err)\n\t\t}\n\t}\n\n\treturn written, nil\n}\n\nfunc (c *Conn) ReadPacketTo(w io.Writer) error {\n\tb := utils.BytesBufferGet()\n\tdefer func() {\n\t\tutils.BytesBufferPut(b)\n\t}()\n\n\t// packets that come in a compressed packet may be partial\n\t// so use the copyN function to read the packet header into a\n\t// buffer, since copyN is capable of getting the next compressed\n\t// packet and updating the Conn state with a new compressedReader.\n\tif _, err := c.copyN(b, 4); err != nil {\n\t\treturn errors.Wrapf(ErrBadConn, \"io.ReadFull(header) failed. err %v\", err)\n\t} else {\n\t\t// copy was successful so copy the 4 bytes from the buffer to the header\n\t\tcopy(c.header[:4], b.Bytes()[:4])\n\t}\n\n\tlength := int(uint32(c.header[0]) | uint32(c.header[1])<<8 | uint32(c.header[2])<<16)\n\tsequence := c.header[3]\n\n\tif sequence != c.Sequence {\n\t\treturn errors.Errorf(\"invalid sequence %d != %d\", sequence, c.Sequence)\n\t}\n\n\tc.Sequence++\n\n\tif buf, ok := w.(*bytes.Buffer); ok {\n\t\t// Allocate the buffer with expected length directly instead of call `grow` and migrate data many times.\n\t\tbuf.Grow(length)\n\t}\n\n\tif n, err := c.copyN(w, int64(length)); err != nil {\n\t\treturn errors.Wrapf(ErrBadConn, \"io.CopyN failed. err %v, copied %v, expected %v\", err, n, length)\n\t} else if n != int64(length) {\n\t\treturn errors.Wrapf(ErrBadConn, \"io.CopyN failed(n != int64(length)). %v bytes copied, while %v expected\", n, length)\n\t} else {\n\t\tif length < MaxPayloadLen {\n\t\t\treturn nil\n\t\t}\n\n\t\tif err = c.ReadPacketTo(w); err != nil {\n\t\t\treturn errors.Wrap(err, \"ReadPacketTo failed\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// WritePacket data already has 4 bytes header will modify data in-place\nfunc (c *Conn) WritePacket(data []byte) error {\n\tlength := len(data) - 4\n\n\tfor length >= MaxPayloadLen {\n\t\tdata[0] = 0xff\n\t\tdata[1] = 0xff\n\t\tdata[2] = 0xff\n\n\t\tdata[3] = c.Sequence\n\n\t\tif n, err := c.writeWithTimeout(data[:4+MaxPayloadLen]); err != nil {\n\t\t\treturn errors.Wrapf(ErrBadConn, \"Write(payload portion) failed. err %v\", err)\n\t\t} else if n != (4 + MaxPayloadLen) {\n\t\t\treturn errors.Wrapf(ErrBadConn, \"Write(payload portion) failed. only %v bytes written, while %v expected\", n, 4+MaxPayloadLen)\n\t\t} else {\n\t\t\tc.Sequence++\n\t\t\tlength -= MaxPayloadLen\n\t\t\tdata = data[MaxPayloadLen:]\n\t\t}\n\t}\n\n\tdata[0] = byte(length)\n\tdata[1] = byte(length >> 8)\n\tdata[2] = byte(length >> 16)\n\tdata[3] = c.Sequence\n\n\tswitch c.Compression {\n\tcase MYSQL_COMPRESS_NONE:\n\t\tif n, err := c.writeWithTimeout(data); err != nil {\n\t\t\treturn errors.Wrapf(ErrBadConn, \"Write failed. err %v\", err)\n\t\t} else if n != len(data) {\n\t\t\treturn errors.Wrapf(ErrBadConn, \"Write failed. only %v bytes written, while %v expected\", n, len(data))\n\t\t}\n\tcase MYSQL_COMPRESS_ZLIB, MYSQL_COMPRESS_ZSTD:\n\t\tif n, err := c.writeCompressed(data); err != nil {\n\t\t\treturn errors.Wrapf(ErrBadConn, \"Write failed. err %v\", err)\n\t\t} else if n != len(data) {\n\t\t\treturn errors.Wrapf(ErrBadConn, \"Write failed. only %v bytes written, while %v expected\", n, len(data))\n\t\t}\n\n\t\tc.compressedReaderActive = false\n\t\tif c.compressedReader != nil {\n\t\t\tif _, ok := c.compressedReader.(io.ReadCloser); ok {\n\t\t\t\t_ = c.compressedReader.(io.ReadCloser).Close()\n\t\t\t}\n\t\t\tc.compressedReader = nil\n\t\t}\n\tdefault:\n\t\treturn errors.Wrapf(ErrBadConn, \"Write failed. Unsuppored compression algorithm set\")\n\t}\n\n\tc.Sequence++\n\treturn nil\n}\n\nfunc (c *Conn) writeWithTimeout(b []byte) (n int, err error) {\n\tif c.writeTimeout != 0 {\n\t\tif err := c.SetWriteDeadline(utils.Now().Add(c.writeTimeout)); err != nil {\n\t\t\treturn n, err\n\t\t}\n\t}\n\n\treturn c.Write(b)\n}\n\nfunc (c *Conn) writeCompressed(data []byte) (n int, err error) {\n\tvar (\n\t\tcompressedLength, uncompressedLength int\n\t\tpayload                              *bytes.Buffer\n\t\tcompressedHeader                     = make([]byte, 7)\n\t)\n\n\tif len(data) > MinCompressionLength {\n\t\tvar w io.WriteCloser\n\t\tpayload = utils.BytesBufferGet()\n\t\tdefer utils.BytesBufferPut(payload)\n\n\t\tswitch c.Compression {\n\t\tcase MYSQL_COMPRESS_ZLIB:\n\t\t\tw, err = compress.GetPooledZlibWriter(payload)\n\t\tcase MYSQL_COMPRESS_ZSTD:\n\t\t\tw, err = zstd.NewWriter(payload)\n\t\tdefault:\n\t\t\treturn 0, errors.Wrapf(ErrBadConn, \"Write failed. Unsuppored compression algorithm set\")\n\t\t}\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tuncompressedLength = len(data)\n\t\tif n, err = w.Write(data); err != nil {\n\t\t\t_ = w.Close()\n\t\t\treturn 0, err\n\t\t}\n\t\tif err = w.Close(); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tcompressedLength = payload.Len()\n\t} else {\n\t\tcompressedLength = len(data)\n\t}\n\n\tc.CompressedSequence = 0\n\t// write the compressed packet header\n\tcompressedPacket := utils.BytesBufferGet()\n\tdefer utils.BytesBufferPut(compressedPacket)\n\n\tcompressedHeader[0] = byte(compressedLength)\n\tcompressedHeader[1] = byte(compressedLength >> 8)\n\tcompressedHeader[2] = byte(compressedLength >> 16)\n\tcompressedHeader[3] = c.CompressedSequence\n\tcompressedHeader[4] = byte(uncompressedLength)\n\tcompressedHeader[5] = byte(uncompressedLength >> 8)\n\tcompressedHeader[6] = byte(uncompressedLength >> 16)\n\tif _, err = compressedPacket.Write(compressedHeader); err != nil {\n\t\treturn 0, err\n\t}\n\tc.CompressedSequence++\n\n\tif payload != nil {\n\t\t_, err = compressedPacket.Write(payload.Bytes())\n\t} else {\n\t\tn, err = compressedPacket.Write(data)\n\t}\n\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif _, err = c.writeWithTimeout(compressedPacket.Bytes()); err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn n, nil\n}\n\n// WriteClearAuthPacket Client clear text authentication packet\n// https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_packets_protocol_auth_switch_response.html\nfunc (c *Conn) WriteClearAuthPacket(password string) error {\n\t// Calculate the packet length and add a tailing 0\n\tpktLen := len(password) + 1\n\tdata := make([]byte, 4+pktLen)\n\n\t// Add the clear password [null terminated string]\n\tcopy(data[4:], password)\n\tdata[4+pktLen-1] = 0x00\n\n\treturn errors.Wrap(c.WritePacket(data), \"WritePacket failed\")\n}\n\n// WritePublicKeyAuthPacket Caching sha2 authentication. Public key request and send encrypted password\n// https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_packets_protocol_auth_switch_response.html\nfunc (c *Conn) WritePublicKeyAuthPacket(password string, cipher []byte) error {\n\t// request public key\n\tdata := make([]byte, 4+1)\n\tdata[4] = 2 // cachingSha2PasswordRequestPublicKey\n\tif err := c.WritePacket(data); err != nil {\n\t\treturn errors.Wrap(err, \"WritePacket(single byte) failed\")\n\t}\n\n\tdata, err := c.ReadPacket()\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"ReadPacket failed\")\n\t}\n\n\tblock, _ := pem.Decode(data[1:])\n\tpub, err := x509.ParsePKIXPublicKey(block.Bytes)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"x509.ParsePKIXPublicKey failed\")\n\t}\n\n\tplain := make([]byte, len(password)+1)\n\tcopy(plain, password)\n\tfor i := range plain {\n\t\tj := i % len(cipher)\n\t\tplain[i] ^= cipher[j]\n\t}\n\tsha1v := sha1.New()\n\tenc, _ := rsa.EncryptOAEP(sha1v, rand.Reader, pub.(*rsa.PublicKey), plain, nil)\n\tdata = make([]byte, 4+len(enc))\n\tcopy(data[4:], enc)\n\treturn errors.Wrap(c.WritePacket(data), \"WritePacket failed\")\n}\n\nfunc (c *Conn) WriteEncryptedPassword(password string, seed []byte, pub *rsa.PublicKey) error {\n\tenc, err := EncryptPassword(password, seed, pub)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"EncryptPassword failed\")\n\t}\n\treturn errors.Wrap(c.WriteAuthSwitchPacket(enc, false), \"WriteAuthSwitchPacket failed\")\n}\n\n// WriteAuthSwitchPacket see https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase_packets_protocol_auth_switch_response.html\nfunc (c *Conn) WriteAuthSwitchPacket(authData []byte, addNUL bool) error {\n\tpktLen := 4 + len(authData)\n\tif addNUL {\n\t\tpktLen++\n\t}\n\tdata := make([]byte, pktLen)\n\n\t// Add the auth data [EOF]\n\tcopy(data[4:], authData)\n\tif addNUL {\n\t\tdata[pktLen-1] = 0x00\n\t}\n\n\treturn errors.Wrap(c.WritePacket(data), \"WritePacket failed\")\n}\n\nfunc (c *Conn) ResetSequence() {\n\tc.Sequence = 0\n}\n\nfunc (c *Conn) Close() error {\n\tc.Sequence = 0\n\tif c.Conn != nil {\n\t\treturn errors.Wrap(c.Conn.Close(), \"Conn.Close failed\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/backup.go",
    "content": "package replication\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"os\"\n\t\"path\"\n\t\"sync\"\n\t\"time\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/pingcap/errors\"\n)\n\n// StartBackup starts the backup process for the binary log and writes to the backup directory.\nfunc (b *BinlogSyncer) StartBackup(backupDir string, p Position, timeout time.Duration) error {\n\terr := os.MkdirAll(backupDir, 0755)\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\tif b.cfg.SynchronousEventHandler == nil {\n\t\treturn b.StartBackupWithHandler(p, timeout, func(filename string) (io.WriteCloser, error) {\n\t\t\treturn os.OpenFile(path.Join(backupDir, filename), os.O_CREATE|os.O_WRONLY, 0644)\n\t\t})\n\t} else {\n\t\treturn b.StartSynchronousBackup(p, timeout)\n\t}\n}\n\n// StartBackupWithHandler starts the backup process for the binary log using the specified position and handler.\n// The process will continue until the timeout is reached or an error occurs.\n// This method should not be used together with SynchronousEventHandler.\n//\n// Parameters:\n//   - p: The starting position in the binlog from which to begin the backup.\n//   - timeout: The maximum duration to wait for new binlog events before stopping the backup process.\n//     If set to 0, a default very long timeout (30 days) is used instead.\n//   - handler: A function that takes a binlog filename and returns an WriteCloser for writing raw events to.\nfunc (b *BinlogSyncer) StartBackupWithHandler(p Position, timeout time.Duration,\n\thandler func(binlogFilename string) (io.WriteCloser, error)) (retErr error) {\n\tif timeout == 0 {\n\t\t// a very long timeout here\n\t\ttimeout = 30 * 3600 * 24 * time.Second\n\t}\n\tif b.cfg.SynchronousEventHandler != nil {\n\t\treturn errors.New(\"StartBackupWithHandler cannot be used when SynchronousEventHandler is set. Use StartSynchronousBackup instead.\")\n\t}\n\n\t// Force use raw mode\n\tb.parser.SetRawMode(true)\n\n\t// Set up the backup event handler\n\tbackupHandler := &BackupEventHandler{\n\t\thandler: handler,\n\t}\n\n\ts, err := b.StartSync(p)\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tdefer func() {\n\t\tif backupHandler.w != nil {\n\t\t\tcloseErr := backupHandler.w.Close()\n\t\t\tif retErr == nil {\n\t\t\t\tretErr = closeErr\n\t\t\t}\n\t\t}\n\t}()\n\n\tfor {\n\t\tctx, cancel := context.WithTimeout(context.Background(), timeout)\n\t\tdefer cancel()\n\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn nil\n\t\tcase <-b.ctx.Done():\n\t\t\treturn nil\n\t\tcase err := <-s.ech:\n\t\t\treturn errors.Trace(err)\n\t\tcase e := <-s.ch:\n\t\t\terr = backupHandler.HandleEvent(e)\n\t\t\tif err != nil {\n\t\t\t\treturn errors.Trace(err)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// StartSynchronousBackup starts the backup process using the SynchronousEventHandler in the BinlogSyncerConfig.\nfunc (b *BinlogSyncer) StartSynchronousBackup(p Position, timeout time.Duration) error {\n\tif b.cfg.SynchronousEventHandler == nil {\n\t\treturn errors.New(\"SynchronousEventHandler must be set in BinlogSyncerConfig to use StartSynchronousBackup\")\n\t}\n\n\ts, err := b.StartSync(p)\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tvar ctx context.Context\n\tvar cancel context.CancelFunc\n\n\tif timeout > 0 {\n\t\tctx, cancel = context.WithTimeout(context.Background(), timeout)\n\t\tdefer cancel()\n\t} else {\n\t\tctx = context.Background()\n\t}\n\n\tselect {\n\tcase <-ctx.Done():\n\t\t// The timeout has been reached\n\t\treturn nil\n\tcase <-b.ctx.Done():\n\t\t// The BinlogSyncer has been closed\n\t\treturn nil\n\tcase err := <-s.ech:\n\t\t// An error occurred during streaming\n\t\treturn errors.Trace(err)\n\t}\n}\n\n// BackupEventHandler handles writing events for backup\ntype BackupEventHandler struct {\n\thandler func(binlogFilename string) (io.WriteCloser, error)\n\tw       io.WriteCloser\n\tmutex   sync.Mutex\n\n\tfilename string\n}\n\nfunc NewBackupEventHandler(handlerFunction func(filename string) (io.WriteCloser, error)) *BackupEventHandler {\n\treturn &BackupEventHandler{\n\t\thandler: handlerFunction,\n\t}\n}\n\n// HandleEvent processes a single event for the backup.\nfunc (h *BackupEventHandler) HandleEvent(e *BinlogEvent) error {\n\th.mutex.Lock()\n\tdefer h.mutex.Unlock()\n\n\tvar err error\n\toffset := e.Header.LogPos\n\n\tif e.Header.EventType == ROTATE_EVENT {\n\t\trotateEvent := e.Event.(*RotateEvent)\n\t\th.filename = string(rotateEvent.NextLogName)\n\t\tif e.Header.Timestamp == 0 || offset == 0 {\n\t\t\t// fake rotate event\n\t\t\treturn nil\n\t\t}\n\t} else if e.Header.EventType == FORMAT_DESCRIPTION_EVENT {\n\t\tif h.w != nil {\n\t\t\tif err = h.w.Close(); err != nil {\n\t\t\t\th.w = nil\n\t\t\t\treturn errors.Trace(err)\n\t\t\t}\n\t\t}\n\n\t\tif len(h.filename) == 0 {\n\t\t\treturn errors.Errorf(\"empty binlog filename for FormatDescriptionEvent\")\n\t\t}\n\n\t\th.w, err = h.handler(h.filename)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\n\t\t// Write binlog header 0xfebin\n\t\t_, err = h.w.Write(BinLogFileHeader)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\tif h.w != nil {\n\t\tn, err := h.w.Write(e.RawData)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t\tif n != len(e.RawData) {\n\t\t\treturn errors.Trace(io.ErrShortWrite)\n\t\t}\n\t} else {\n\t\treturn errors.New(\"writer is not initialized\")\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/binlogstreamer.go",
    "content": "package replication\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\t\"github.com/pingcap/errors\"\n\t\"github.com/siddontang/go-log/log\"\n)\n\nvar (\n\tErrNeedSyncAgain = errors.New(\"Last sync error or closed, try sync and get event again\")\n\tErrSyncClosed    = errors.New(\"Sync was closed\")\n)\n\n// BinlogStreamer gets the streaming event.\ntype BinlogStreamer struct {\n\tch  chan *BinlogEvent\n\tech chan error\n\terr error\n}\n\n// GetEvent gets the binlog event one by one, it will block until Syncer receives any events from MySQL\n// or meets a sync error. You can pass a context (like Cancel or Timeout) to break the block.\nfunc (s *BinlogStreamer) GetEvent(ctx context.Context) (*BinlogEvent, error) {\n\tif s.err != nil {\n\t\treturn nil, ErrNeedSyncAgain\n\t}\n\n\tselect {\n\tcase c := <-s.ch:\n\t\treturn c, nil\n\tcase s.err = <-s.ech:\n\t\treturn nil, s.err\n\tcase <-ctx.Done():\n\t\treturn nil, ctx.Err()\n\t}\n}\n\n// GetEventWithStartTime gets the binlog event with starttime, if current binlog event timestamp smaller than specify starttime\n// return nil event\nfunc (s *BinlogStreamer) GetEventWithStartTime(ctx context.Context, startTime time.Time) (*BinlogEvent, error) {\n\tif s.err != nil {\n\t\treturn nil, ErrNeedSyncAgain\n\t}\n\tstartUnix := startTime.Unix()\n\tselect {\n\tcase c := <-s.ch:\n\t\tif int64(c.Header.Timestamp) >= startUnix {\n\t\t\treturn c, nil\n\t\t}\n\t\treturn nil, nil\n\tcase s.err = <-s.ech:\n\t\treturn nil, s.err\n\tcase <-ctx.Done():\n\t\treturn nil, ctx.Err()\n\t}\n}\n\n// DumpEvents dumps all left events\nfunc (s *BinlogStreamer) DumpEvents() []*BinlogEvent {\n\tcount := len(s.ch)\n\tevents := make([]*BinlogEvent, count)\n\tfor i := range events {\n\t\tevents[i] = <-s.ch\n\t}\n\treturn events\n}\n\nfunc (s *BinlogStreamer) close() {\n\ts.closeWithError(nil)\n}\n\nfunc (s *BinlogStreamer) closeWithError(err error) {\n\tif err == nil {\n\t\terr = ErrSyncClosed\n\t} else {\n\t\tlog.Errorf(\"close sync with err: %v\", err)\n\t}\n\n\tselect {\n\tcase s.ech <- err:\n\tdefault:\n\t}\n}\n\nfunc NewBinlogStreamer() *BinlogStreamer {\n\treturn NewBinlogStreamerWithChanSize(10240)\n}\n\nfunc NewBinlogStreamerWithChanSize(chanSize int) *BinlogStreamer {\n\ts := new(BinlogStreamer)\n\n\tif chanSize <= 0 {\n\t\tchanSize = 10240\n\t}\n\n\ts.ch = make(chan *BinlogEvent, chanSize)\n\ts.ech = make(chan error, 4)\n\n\treturn s\n}\n\n// AddEventToStreamer adds a binlog event to the streamer. You can use it when you want to add an event to the streamer manually.\n// can be used in replication handlers\nfunc (s *BinlogStreamer) AddEventToStreamer(ev *BinlogEvent) error {\n\tselect {\n\tcase s.ch <- ev:\n\t\treturn nil\n\tcase err := <-s.ech:\n\t\treturn err\n\t}\n}\n\n// AddErrorToStreamer adds an error to the streamer.\nfunc (s *BinlogStreamer) AddErrorToStreamer(err error) bool {\n\tselect {\n\tcase s.ech <- err:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/binlogsyncer.go",
    "content": "package replication\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pingcap/errors\"\n\t\"github.com/siddontang/go-log/log\"\n\t\"github.com/siddontang/go-log/loggers\"\n\n\t\"github.com/go-mysql-org/go-mysql/client\"\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\nvar (\n\terrSyncRunning = errors.New(\"Sync is running, must Close first\")\n)\n\n// BinlogSyncerConfig is the configuration for BinlogSyncer.\ntype BinlogSyncerConfig struct {\n\t// ServerID is the unique ID in cluster.\n\tServerID uint32\n\t// Flavor is \"mysql\" or \"mariadb\", if not set, use \"mysql\" default.\n\tFlavor string\n\n\t// Host is for MySQL server host.\n\tHost string\n\t// Port is for MySQL server port.\n\tPort uint16\n\t// User is for MySQL user.\n\tUser string\n\t// Password is for MySQL password.\n\tPassword string\n\n\t// Localhost is local hostname if register salve.\n\t// If not set, use os.Hostname() instead.\n\tLocalhost string\n\n\t// Charset is for MySQL client character set\n\tCharset string\n\n\t// SemiSyncEnabled enables semi-sync or not.\n\tSemiSyncEnabled bool\n\n\t// RawModeEnabled is for not parsing binlog event.\n\tRawModeEnabled bool\n\n\t// If not nil, use the provided tls.Config to connect to the database using TLS/SSL.\n\tTLSConfig *tls.Config\n\n\t// Use replication.Time structure for timestamp and datetime.\n\t// We will use Local location for timestamp and UTC location for datetime.\n\tParseTime bool\n\n\t// If ParseTime is false, convert TIMESTAMP into this specified timezone. If\n\t// ParseTime is true, this option will have no effect and TIMESTAMP data will\n\t// be parsed into the local timezone and a full time.Time struct will be\n\t// returned.\n\t//\n\t// Note that MySQL TIMESTAMP columns are offset from the machine local\n\t// timezone while DATETIME columns are offset from UTC. This is consistent\n\t// with documented MySQL behaviour as it return TIMESTAMP in local timezone\n\t// and DATETIME in UTC.\n\t//\n\t// Setting this to UTC effectively equalizes the TIMESTAMP and DATETIME time\n\t// strings obtained from MySQL.\n\tTimestampStringLocation *time.Location\n\n\t// Use decimal.Decimal structure for decimals.\n\tUseDecimal bool\n\n\t// RecvBufferSize sets the size in bytes of the operating system's receive buffer associated with the connection.\n\tRecvBufferSize int\n\n\t// master heartbeat period\n\tHeartbeatPeriod time.Duration\n\n\t// read timeout\n\tReadTimeout time.Duration\n\n\t// maximum number of attempts to re-establish a broken connection, zero or negative number means infinite retry.\n\t// this configuration will not work if DisableRetrySync is true\n\tMaxReconnectAttempts int\n\n\t// whether disable re-sync for broken connection\n\tDisableRetrySync bool\n\n\t// Only works when MySQL/MariaDB variable binlog_checksum=CRC32.\n\t// For MySQL, binlog_checksum was introduced since 5.6.2, but CRC32 was set as default value since 5.6.6 .\n\t// https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#option_mysqld_binlog-checksum\n\t// For MariaDB, binlog_checksum was introduced since MariaDB 5.3, but CRC32 was set as default value since MariaDB 10.2.1 .\n\t// https://mariadb.com/kb/en/library/replication-and-binary-log-server-system-variables/#binlog_checksum\n\tVerifyChecksum bool\n\n\t// DumpCommandFlag is used to send binglog dump command. Default 0, aka BINLOG_DUMP_NEVER_STOP.\n\t// For MySQL, BINLOG_DUMP_NEVER_STOP and BINLOG_DUMP_NON_BLOCK are available.\n\t// https://dev.mysql.com/doc/internals/en/com-binlog-dump.html#binlog-dump-non-block\n\t// For MariaDB, BINLOG_DUMP_NEVER_STOP, BINLOG_DUMP_NON_BLOCK and BINLOG_SEND_ANNOTATE_ROWS_EVENT are available.\n\t// https://mariadb.com/kb/en/library/com_binlog_dump/\n\t// https://mariadb.com/kb/en/library/annotate_rows_event/\n\tDumpCommandFlag uint16\n\n\t//Option function is used to set outside of BinlogSyncerConfig， between mysql connection and COM_REGISTER_SLAVE\n\t//For MariaDB: slave_gtid_ignore_duplicates、skip_replication、slave_until_gtid\n\tOption func(*client.Conn) error\n\n\t// Set Logger\n\tLogger loggers.Advanced\n\n\t// Set Dialer\n\tDialer client.Dialer\n\n\tRowsEventDecodeFunc func(*RowsEvent, []byte) error\n\n\tTableMapOptionalMetaDecodeFunc func([]byte) error\n\n\tDiscardGTIDSet bool\n\n\tEventCacheCount int\n\n\t// SynchronousEventHandler is used for synchronous event handling.\n\t// This should not be used together with StartBackupWithHandler.\n\t// If this is not nil, GetEvent does not need to be called.\n\tSynchronousEventHandler EventHandler\n}\n\n// EventHandler defines the interface for processing binlog events.\ntype EventHandler interface {\n\tHandleEvent(e *BinlogEvent) error\n}\n\n// BinlogSyncer syncs binlog events from the server.\ntype BinlogSyncer struct {\n\tm sync.RWMutex\n\n\tcfg BinlogSyncerConfig\n\n\tc *client.Conn\n\n\twg sync.WaitGroup\n\n\tparser *BinlogParser\n\n\tnextPos Position\n\n\tprevGset, currGset GTIDSet\n\n\t// instead of GTIDSet.Clone, use this to speed up calculate prevGset\n\tprevMySQLGTIDEvent *GTIDEvent\n\n\trunning bool\n\n\tctx    context.Context\n\tcancel context.CancelFunc\n\n\tlastConnectionID uint32\n\n\tretryCount int\n}\n\n// NewBinlogSyncer creates the BinlogSyncer with the given configuration.\nfunc NewBinlogSyncer(cfg BinlogSyncerConfig) *BinlogSyncer {\n\tif cfg.Logger == nil {\n\t\tstreamHandler, _ := log.NewStreamHandler(os.Stdout)\n\t\tcfg.Logger = log.NewDefault(streamHandler)\n\t}\n\tif cfg.ServerID == 0 {\n\t\tcfg.Logger.Fatal(\"can't use 0 as the server ID\")\n\t}\n\tif cfg.Dialer == nil {\n\t\tdialer := &net.Dialer{}\n\t\tcfg.Dialer = dialer.DialContext\n\t}\n\tif cfg.EventCacheCount == 0 {\n\t\tcfg.EventCacheCount = 10240\n\t}\n\n\t// Clear the Password to avoid outputting it in logs.\n\tpass := cfg.Password\n\tcfg.Password = \"\"\n\tcfg.Logger.Infof(\"create BinlogSyncer with config %+v\", cfg)\n\tcfg.Password = pass\n\n\tb := new(BinlogSyncer)\n\n\tb.cfg = cfg\n\tb.parser = NewBinlogParser()\n\tb.parser.SetFlavor(cfg.Flavor)\n\tb.parser.SetRawMode(b.cfg.RawModeEnabled)\n\tb.parser.SetParseTime(b.cfg.ParseTime)\n\tb.parser.SetTimestampStringLocation(b.cfg.TimestampStringLocation)\n\tb.parser.SetUseDecimal(b.cfg.UseDecimal)\n\tb.parser.SetVerifyChecksum(b.cfg.VerifyChecksum)\n\tb.parser.SetRowsEventDecodeFunc(b.cfg.RowsEventDecodeFunc)\n\tb.parser.SetTableMapOptionalMetaDecodeFunc(b.cfg.TableMapOptionalMetaDecodeFunc)\n\tb.running = false\n\tb.ctx, b.cancel = context.WithCancel(context.Background())\n\n\treturn b\n}\n\n// Close closes the BinlogSyncer.\nfunc (b *BinlogSyncer) Close() {\n\tb.m.Lock()\n\tdefer b.m.Unlock()\n\n\tb.close()\n}\n\nfunc (b *BinlogSyncer) close() {\n\tif b.isClosed() {\n\t\treturn\n\t}\n\n\tb.cfg.Logger.Info(\"syncer is closing...\")\n\n\tb.running = false\n\tb.cancel()\n\n\tif b.c != nil {\n\t\terr := b.c.SetReadDeadline(utils.Now().Add(100 * time.Millisecond))\n\t\tif err != nil {\n\t\t\tb.cfg.Logger.Warnf(`could not set read deadline: %s`, err)\n\t\t}\n\t}\n\n\t// kill last connection id\n\tif b.lastConnectionID > 0 {\n\t\t// Use a new connection to kill the binlog syncer\n\t\t// because calling KILL from the same connection\n\t\t// doesn't actually disconnect it.\n\t\tc, err := b.newConnection(context.Background())\n\t\tif err == nil {\n\t\t\tb.killConnection(c, b.lastConnectionID)\n\t\t\tc.Close()\n\t\t}\n\t}\n\n\tb.wg.Wait()\n\n\tif b.c != nil {\n\t\tb.c.Close()\n\t}\n\n\tb.cfg.Logger.Info(\"syncer is closed\")\n}\n\nfunc (b *BinlogSyncer) isClosed() bool {\n\tselect {\n\tcase <-b.ctx.Done():\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (b *BinlogSyncer) registerSlave() error {\n\tif b.c != nil {\n\t\tb.c.Close()\n\t}\n\n\tvar err error\n\tb.c, err = b.newConnection(b.ctx)\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif b.cfg.Option != nil {\n\t\tif err = b.cfg.Option(b.c); err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\tif len(b.cfg.Charset) != 0 {\n\t\tif err = b.c.SetCharset(b.cfg.Charset); err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\t//set read timeout\n\tif b.cfg.ReadTimeout > 0 {\n\t\t_ = b.c.SetReadDeadline(utils.Now().Add(b.cfg.ReadTimeout))\n\t}\n\n\tif b.cfg.RecvBufferSize > 0 {\n\t\tif tcp, ok := b.c.Conn.Conn.(*net.TCPConn); ok {\n\t\t\t_ = tcp.SetReadBuffer(b.cfg.RecvBufferSize)\n\t\t}\n\t}\n\n\t// kill last connection id\n\tif b.lastConnectionID > 0 {\n\t\tb.killConnection(b.c, b.lastConnectionID)\n\t}\n\n\t// save last last connection id for kill\n\tb.lastConnectionID = b.c.GetConnectionID()\n\n\t//for mysql 5.6+, binlog has a crc32 checksum\n\t//before mysql 5.6, this will not work, don't matter.:-)\n\tif r, err := b.c.Execute(\"SHOW GLOBAL VARIABLES LIKE 'BINLOG_CHECKSUM'\"); err != nil {\n\t\treturn errors.Trace(err)\n\t} else {\n\t\ts, _ := r.GetString(0, 1)\n\t\tif s != \"\" {\n\t\t\t// maybe CRC32 or NONE\n\n\t\t\t// mysqlbinlog.cc use NONE, see its below comments:\n\t\t\t// Make a notice to the server that this client\n\t\t\t// is checksum-aware. It does not need the first fake Rotate\n\t\t\t// necessary checksummed.\n\t\t\t// That preference is specified below.\n\n\t\t\tif _, err = b.c.Execute(`SET @master_binlog_checksum='NONE'`); err != nil {\n\t\t\t\treturn errors.Trace(err)\n\t\t\t}\n\n\t\t\t// if _, err = b.c.Execute(`SET @master_binlog_checksum=@@global.binlog_checksum`); err != nil {\n\t\t\t// \treturn errors.Trace(err)\n\t\t\t// }\n\t\t}\n\t}\n\n\tif b.cfg.Flavor == MariaDBFlavor {\n\t\t// Refer https://github.com/alibaba/canal/wiki/BinlogChange(MariaDB5&10)\n\t\t// Tell the server that we understand GTIDs by setting our slave capability\n\t\t// to MARIA_SLAVE_CAPABILITY_GTID = 4 (MariaDB >= 10.0.1).\n\t\tif _, err := b.c.Execute(\"SET @mariadb_slave_capability=4\"); err != nil {\n\t\t\treturn errors.Errorf(\"failed to set @mariadb_slave_capability=4: %v\", err)\n\t\t}\n\t}\n\n\tif b.cfg.HeartbeatPeriod > 0 {\n\t\t_, err = b.c.Execute(fmt.Sprintf(\"SET @master_heartbeat_period=%d;\", b.cfg.HeartbeatPeriod))\n\t\tif err != nil {\n\t\t\tb.cfg.Logger.Errorf(\"failed to set @master_heartbeat_period=%d, err: %v\", b.cfg.HeartbeatPeriod, err)\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\tserverUUID, err := uuid.NewUUID()\n\tif err != nil {\n\t\tb.cfg.Logger.Errorf(\"failed to get new uuid %v\", err)\n\t\treturn errors.Trace(err)\n\t}\n\tif _, err = b.c.Execute(fmt.Sprintf(\"SET @slave_uuid = '%s', @replica_uuid = '%s'\", serverUUID, serverUUID)); err != nil {\n\t\tb.cfg.Logger.Errorf(\"failed to set @slave_uuid = '%s', err: %v\", serverUUID, err)\n\t\treturn errors.Trace(err)\n\t}\n\n\tif err = b.writeRegisterSlaveCommand(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif _, err = b.c.ReadOKPacket(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn nil\n}\n\nfunc (b *BinlogSyncer) enableSemiSync() error {\n\tif !b.cfg.SemiSyncEnabled {\n\t\treturn nil\n\t}\n\n\tif r, err := b.c.Execute(\"SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';\"); err != nil {\n\t\treturn errors.Trace(err)\n\t} else {\n\t\ts, _ := r.GetString(0, 1)\n\t\tif s != \"ON\" {\n\t\t\tb.cfg.Logger.Errorf(\"master does not support semi synchronous replication, use no semi-sync\")\n\t\t\tb.cfg.SemiSyncEnabled = false\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t_, err := b.c.Execute(`SET @rpl_semi_sync_slave = 1;`)\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn nil\n}\n\nfunc (b *BinlogSyncer) prepare() error {\n\tif b.isClosed() {\n\t\treturn errors.Trace(ErrSyncClosed)\n\t}\n\n\tif err := b.registerSlave(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif err := b.enableSemiSync(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tb.cfg.Logger.Infof(\"Connected to %s %s server\", b.cfg.Flavor, b.c.GetServerVersion())\n\n\treturn nil\n}\n\nfunc (b *BinlogSyncer) startDumpStream() *BinlogStreamer {\n\tb.running = true\n\n\ts := NewBinlogStreamerWithChanSize(b.cfg.EventCacheCount)\n\n\tb.wg.Add(1)\n\tgo b.onStream(s)\n\treturn s\n}\n\n// GetNextPosition returns the next position of the syncer\nfunc (b *BinlogSyncer) GetNextPosition() Position {\n\treturn b.nextPos\n}\n\nfunc (b *BinlogSyncer) checkFlavor() {\n\tserverVersion := b.c.GetServerVersion()\n\tif b.cfg.Flavor != MariaDBFlavor &&\n\t\tstrings.Contains(b.c.GetServerVersion(), \"MariaDB\") {\n\t\t// Setting the flavor to `mysql` causes MariaDB to try and behave\n\t\t// in a MySQL compatible way. In this mode MariaDB won't use\n\t\t// MariaDB specific binlog event types, but may used dummy events instead.\n\t\tb.cfg.Logger.Errorf(\"misconfigured flavor (%s) for server %s\",\n\t\t\tb.cfg.Flavor, serverVersion)\n\t}\n}\n\n// StartSync starts syncing from the `pos` position.\nfunc (b *BinlogSyncer) StartSync(pos Position) (*BinlogStreamer, error) {\n\tb.cfg.Logger.Infof(\"begin to sync binlog from position %s\", pos)\n\n\tb.m.Lock()\n\tdefer b.m.Unlock()\n\n\tif b.running {\n\t\treturn nil, errors.Trace(errSyncRunning)\n\t}\n\n\tif err := b.prepareSyncPos(pos); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tb.checkFlavor()\n\n\treturn b.startDumpStream(), nil\n}\n\n// StartSyncGTID starts syncing from the `gset` GTIDSet.\nfunc (b *BinlogSyncer) StartSyncGTID(gset GTIDSet) (*BinlogStreamer, error) {\n\tb.cfg.Logger.Infof(\"begin to sync binlog from GTID set %s\", gset)\n\n\tb.prevMySQLGTIDEvent = nil\n\tb.prevGset = gset\n\n\tb.m.Lock()\n\tdefer b.m.Unlock()\n\n\tif b.running {\n\t\treturn nil, errors.Trace(errSyncRunning)\n\t}\n\n\t// establishing network connection here and will start getting binlog events from \"gset + 1\", thus until first\n\t// MariadbGTIDEvent/GTIDEvent event is received - we effectively do not have a \"current GTID\"\n\tb.currGset = nil\n\n\tif err := b.prepare(); err != nil {\n\t\treturn nil, errors.Trace(err)\n\t}\n\n\tvar err error\n\tswitch b.cfg.Flavor {\n\tcase MariaDBFlavor:\n\t\terr = b.writeBinlogDumpMariadbGTIDCommand(gset)\n\tdefault:\n\t\t// default use MySQL\n\t\terr = b.writeBinlogDumpMysqlGTIDCommand(gset)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tb.checkFlavor()\n\n\treturn b.startDumpStream(), nil\n}\n\nfunc (b *BinlogSyncer) writeBinlogDumpCommand(p Position) error {\n\tb.c.ResetSequence()\n\n\tdata := make([]byte, 4+1+4+2+4+len(p.Name))\n\n\tpos := 4\n\tdata[pos] = COM_BINLOG_DUMP\n\tpos++\n\n\tbinary.LittleEndian.PutUint32(data[pos:], p.Pos)\n\tpos += 4\n\n\tbinary.LittleEndian.PutUint16(data[pos:], b.cfg.DumpCommandFlag)\n\tpos += 2\n\n\tbinary.LittleEndian.PutUint32(data[pos:], b.cfg.ServerID)\n\tpos += 4\n\n\tcopy(data[pos:], p.Name)\n\n\treturn b.c.WritePacket(data)\n}\n\nfunc (b *BinlogSyncer) writeBinlogDumpMysqlGTIDCommand(gset GTIDSet) error {\n\tp := Position{Name: \"\", Pos: 4}\n\tgtidData := gset.Encode()\n\n\tb.c.ResetSequence()\n\n\tdata := make([]byte, 4+1+2+4+4+len(p.Name)+8+4+len(gtidData))\n\tpos := 4\n\tdata[pos] = COM_BINLOG_DUMP_GTID\n\tpos++\n\n\tbinary.LittleEndian.PutUint16(data[pos:], 0)\n\tpos += 2\n\n\tbinary.LittleEndian.PutUint32(data[pos:], b.cfg.ServerID)\n\tpos += 4\n\n\tbinary.LittleEndian.PutUint32(data[pos:], uint32(len(p.Name)))\n\tpos += 4\n\n\tn := copy(data[pos:], p.Name)\n\tpos += n\n\n\tbinary.LittleEndian.PutUint64(data[pos:], uint64(p.Pos))\n\tpos += 8\n\n\tbinary.LittleEndian.PutUint32(data[pos:], uint32(len(gtidData)))\n\tpos += 4\n\tn = copy(data[pos:], gtidData)\n\tpos += n\n\n\tdata = data[0:pos]\n\n\treturn b.c.WritePacket(data)\n}\n\nfunc (b *BinlogSyncer) writeBinlogDumpMariadbGTIDCommand(gset GTIDSet) error {\n\t// Copy from vitess\n\n\tstartPos := gset.String()\n\n\t// Set the slave_connect_state variable before issuing COM_BINLOG_DUMP to\n\t// provide the start position in GTID form.\n\tquery := fmt.Sprintf(\"SET @slave_connect_state='%s'\", startPos)\n\n\tif _, err := b.c.Execute(query); err != nil {\n\t\treturn errors.Errorf(\"failed to set @slave_connect_state='%s': %v\", startPos, err)\n\t}\n\n\t// Real slaves set this upon connecting if their gtid_strict_mode option was\n\t// enabled. We always use gtid_strict_mode because we need it to make our\n\t// internal GTID comparisons safe.\n\tif _, err := b.c.Execute(\"SET @slave_gtid_strict_mode=1\"); err != nil {\n\t\treturn errors.Errorf(\"failed to set @slave_gtid_strict_mode=1: %v\", err)\n\t}\n\n\t// Since we use @slave_connect_state, the file and position here are ignored.\n\treturn b.writeBinlogDumpCommand(Position{Name: \"\", Pos: 0})\n}\n\n// localHostname returns the hostname that register slave would register as.\nfunc (b *BinlogSyncer) localHostname() string {\n\tif len(b.cfg.Localhost) == 0 {\n\t\th, _ := os.Hostname()\n\t\treturn h\n\t}\n\treturn b.cfg.Localhost\n}\n\nfunc (b *BinlogSyncer) writeRegisterSlaveCommand() error {\n\tb.c.ResetSequence()\n\n\thostname := b.localHostname()\n\n\t// This should be the name of slave host not the host we are connecting to.\n\tdata := make([]byte, 4+1+4+1+len(hostname)+1+len(b.cfg.User)+1+2+4+4)\n\tpos := 4\n\n\tdata[pos] = COM_REGISTER_SLAVE\n\tpos++\n\n\tbinary.LittleEndian.PutUint32(data[pos:], b.cfg.ServerID)\n\tpos += 4\n\n\t// This should be the name of slave hostname not the host we are connecting to.\n\tdata[pos] = uint8(len(hostname))\n\tpos++\n\tn := copy(data[pos:], hostname)\n\tpos += n\n\n\tdata[pos] = uint8(len(b.cfg.User))\n\tpos++\n\tn = copy(data[pos:], b.cfg.User)\n\tpos += n\n\n\tdata[pos] = uint8(0)\n\tpos++\n\n\tbinary.LittleEndian.PutUint16(data[pos:], b.cfg.Port)\n\tpos += 2\n\n\t//replication rank, not used\n\tbinary.LittleEndian.PutUint32(data[pos:], 0)\n\tpos += 4\n\n\t// master ID, 0 is OK\n\tbinary.LittleEndian.PutUint32(data[pos:], 0)\n\n\treturn b.c.WritePacket(data)\n}\n\nfunc (b *BinlogSyncer) replySemiSyncACK(p Position) error {\n\tb.c.ResetSequence()\n\n\tdata := make([]byte, 4+1+8+len(p.Name))\n\tpos := 4\n\t// semi sync indicator\n\tdata[pos] = SemiSyncIndicator\n\tpos++\n\n\tbinary.LittleEndian.PutUint64(data[pos:], uint64(p.Pos))\n\tpos += 8\n\n\tcopy(data[pos:], p.Name)\n\n\terr := b.c.WritePacket(data)\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn nil\n}\n\nfunc (b *BinlogSyncer) retrySync() error {\n\tb.m.Lock()\n\tdefer b.m.Unlock()\n\n\tb.parser.Reset()\n\tb.prevMySQLGTIDEvent = nil\n\n\tif b.prevGset != nil {\n\t\tmsg := fmt.Sprintf(\"begin to re-sync from %s\", b.prevGset.String())\n\t\tif b.currGset != nil {\n\t\t\tmsg = fmt.Sprintf(\"%v (last read GTID=%v)\", msg, b.currGset)\n\t\t}\n\t\tb.cfg.Logger.Infof(msg)\n\n\t\tif err := b.prepareSyncGTID(b.prevGset); err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t} else {\n\t\tb.cfg.Logger.Infof(\"begin to re-sync from %s\", b.nextPos)\n\t\tif err := b.prepareSyncPos(b.nextPos); err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (b *BinlogSyncer) prepareSyncPos(pos Position) error {\n\t// always start from position 4\n\tif pos.Pos < 4 {\n\t\tpos.Pos = 4\n\t}\n\n\tif err := b.prepare(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif err := b.writeBinlogDumpCommand(pos); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\treturn nil\n}\n\nfunc (b *BinlogSyncer) prepareSyncGTID(gset GTIDSet) error {\n\tvar err error\n\n\t// re establishing network connection here and will start getting binlog events from \"gset + 1\", thus until first\n\t// MariadbGTIDEvent/GTIDEvent event is received - we effectively do not have a \"current GTID\"\n\tb.currGset = nil\n\n\tif err = b.prepare(); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tswitch b.cfg.Flavor {\n\tcase MariaDBFlavor:\n\t\terr = b.writeBinlogDumpMariadbGTIDCommand(gset)\n\tdefault:\n\t\t// default use MySQL\n\t\terr = b.writeBinlogDumpMysqlGTIDCommand(gset)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (b *BinlogSyncer) onStream(s *BinlogStreamer) {\n\tdefer func() {\n\t\tif e := recover(); e != nil {\n\t\t\ts.closeWithError(fmt.Errorf(\"Err: %v\\n Stack: %s\", e, Pstack()))\n\t\t}\n\t\tb.wg.Done()\n\t}()\n\n\tfor {\n\t\tdata, err := b.c.ReadPacket()\n\t\tselect {\n\t\tcase <-b.ctx.Done():\n\t\t\ts.close()\n\t\t\treturn\n\t\tdefault:\n\t\t}\n\n\t\tif err != nil {\n\t\t\tb.cfg.Logger.Error(err)\n\t\t\t// we meet connection error, should re-connect again with\n\t\t\t// last nextPos or nextGTID we got.\n\t\t\tif len(b.nextPos.Name) == 0 && b.prevGset == nil {\n\t\t\t\t// we can't get the correct position, close.\n\t\t\t\ts.closeWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif b.cfg.DisableRetrySync {\n\t\t\t\tb.cfg.Logger.Warn(\"retry sync is disabled\")\n\t\t\t\ts.closeWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tfor {\n\t\t\t\tselect {\n\t\t\t\tcase <-b.ctx.Done():\n\t\t\t\t\ts.close()\n\t\t\t\t\treturn\n\t\t\t\tcase <-time.After(time.Second):\n\t\t\t\t\tb.retryCount++\n\t\t\t\t\tif err = b.retrySync(); err != nil {\n\t\t\t\t\t\tif b.cfg.MaxReconnectAttempts > 0 && b.retryCount >= b.cfg.MaxReconnectAttempts {\n\t\t\t\t\t\t\tb.cfg.Logger.Errorf(\n\t\t\t\t\t\t\t\t\"retry sync err: %v, exceeded max retries (%d)\",\n\t\t\t\t\t\t\t\terr, b.cfg.MaxReconnectAttempts,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\ts.closeWithError(err)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tb.cfg.Logger.Errorf(\n\t\t\t\t\t\t\t\"retry sync err: %v, wait 1s and retry again (retries: %d/%d)\",\n\t\t\t\t\t\t\terr, b.retryCount, b.cfg.MaxReconnectAttempts,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// we connect the server and begin to re-sync again.\n\t\t\tcontinue\n\t\t}\n\n\t\t//set read timeout\n\t\tif b.cfg.ReadTimeout > 0 {\n\t\t\t_ = b.c.SetReadDeadline(utils.Now().Add(b.cfg.ReadTimeout))\n\t\t}\n\n\t\t// Reset retry count on successful packet receieve\n\t\tb.retryCount = 0\n\n\t\tswitch data[0] {\n\t\tcase OK_HEADER:\n\t\t\t// Parse the event\n\t\t\te, needACK, err := b.parseEvent(data)\n\t\t\tif err != nil {\n\t\t\t\ts.closeWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Handle the event and send ACK if necessary\n\t\t\terr = b.handleEventAndACK(s, e, needACK)\n\t\t\tif err != nil {\n\t\t\t\ts.closeWithError(err)\n\t\t\t\treturn\n\t\t\t}\n\t\tcase ERR_HEADER:\n\t\t\terr = b.c.HandleErrorPacket(data)\n\t\t\ts.closeWithError(err)\n\t\t\treturn\n\t\tcase EOF_HEADER:\n\t\t\t// refer to https://dev.mysql.com/doc/internals/en/com-binlog-dump.html#binlog-dump-non-block\n\t\t\t// when COM_BINLOG_DUMP command use BINLOG_DUMP_NON_BLOCK flag,\n\t\t\t// if there is no more event to send an EOF_Packet instead of blocking the connection\n\t\t\tb.cfg.Logger.Info(\"receive EOF packet, no more binlog event now.\")\n\t\t\tcontinue\n\t\tdefault:\n\t\t\tb.cfg.Logger.Errorf(\"invalid stream header %c\", data[0])\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\n// parseEvent parses the raw data into a BinlogEvent.\n// It only handles parsing and does not perform any side effects.\n// Returns the parsed BinlogEvent, a boolean indicating if an ACK is needed, and an error if the\n// parsing fails\nfunc (b *BinlogSyncer) parseEvent(data []byte) (event *BinlogEvent, needACK bool, err error) {\n\t// Skip OK byte (0x00)\n\tdata = data[1:]\n\n\tneedACK = false\n\tif b.cfg.SemiSyncEnabled && data[0] == SemiSyncIndicator {\n\t\tneedACK = data[1] == 0x01\n\t\t// Skip semi-sync header\n\t\tdata = data[2:]\n\t}\n\n\t// Parse the event using the BinlogParser\n\tevent, err = b.parser.Parse(data)\n\tif err != nil {\n\t\treturn nil, false, errors.Trace(err)\n\t}\n\n\treturn event, needACK, nil\n}\n\n// handleEventAndACK processes an event and sends an ACK if necessary.\nfunc (b *BinlogSyncer) handleEventAndACK(s *BinlogStreamer, e *BinlogEvent, needACK bool) error {\n\t// Update the next position based on the event's LogPos\n\tif e.Header.LogPos > 0 {\n\t\t// Some events like FormatDescriptionEvent return 0, ignore.\n\t\tb.nextPos.Pos = e.Header.LogPos\n\t}\n\n\t// Handle event types to update positions and GTID sets\n\tswitch event := e.Event.(type) {\n\tcase *RotateEvent:\n\t\tb.nextPos.Name = string(event.NextLogName)\n\t\tb.nextPos.Pos = uint32(event.Position)\n\t\tb.cfg.Logger.Infof(\"rotate to %s\", b.nextPos)\n\n\tcase *GTIDEvent:\n\t\tif b.prevGset == nil {\n\t\t\tbreak\n\t\t}\n\t\tif b.currGset == nil {\n\t\t\tb.currGset = b.prevGset.Clone()\n\t\t}\n\t\tu, err := uuid.FromBytes(event.SID)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t\tb.currGset.(*MysqlGTIDSet).AddGTID(u, event.GNO)\n\t\tif b.prevMySQLGTIDEvent != nil {\n\t\t\tu, err = uuid.FromBytes(b.prevMySQLGTIDEvent.SID)\n\t\t\tif err != nil {\n\t\t\t\treturn errors.Trace(err)\n\t\t\t}\n\t\t\tb.prevGset.(*MysqlGTIDSet).AddGTID(u, b.prevMySQLGTIDEvent.GNO)\n\t\t}\n\t\tb.prevMySQLGTIDEvent = event\n\n\tcase *MariadbGTIDEvent:\n\t\tif b.prevGset == nil {\n\t\t\tbreak\n\t\t}\n\t\tif b.currGset == nil {\n\t\t\tb.currGset = b.prevGset.Clone()\n\t\t}\n\t\tprev := b.currGset.Clone()\n\t\terr := b.currGset.(*MariadbGTIDSet).AddSet(&event.GTID)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t\t// Right after reconnect we may see the same GTID as before; update prevGset if currGset changed\n\t\tif !b.currGset.Equal(prev) {\n\t\t\tb.prevGset = prev\n\t\t}\n\n\tcase *XIDEvent:\n\t\tif !b.cfg.DiscardGTIDSet {\n\t\t\tevent.GSet = b.getCurrentGtidSet()\n\t\t}\n\n\tcase *QueryEvent:\n\t\tif !b.cfg.DiscardGTIDSet {\n\t\t\tevent.GSet = b.getCurrentGtidSet()\n\t\t}\n\t}\n\n\t// Use SynchronousEventHandler if it's set\n\tif b.cfg.SynchronousEventHandler != nil {\n\t\terr := b.cfg.SynchronousEventHandler.HandleEvent(e)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t} else {\n\t\t// Asynchronous mode: send the event to the streamer channel\n\t\tselect {\n\t\tcase s.ch <- e:\n\t\tcase <-b.ctx.Done():\n\t\t\treturn errors.New(\"sync is being closed...\")\n\t\t}\n\t}\n\n\tif needACK {\n\t\terr := b.replySemiSyncACK(b.nextPos)\n\t\tif err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// getCurrentGtidSet returns a clone of the current GTID set.\nfunc (b *BinlogSyncer) getCurrentGtidSet() GTIDSet {\n\tif b.currGset != nil {\n\t\treturn b.currGset.Clone()\n\t}\n\treturn nil\n}\n\n// LastConnectionID returns last connectionID.\nfunc (b *BinlogSyncer) LastConnectionID() uint32 {\n\treturn b.lastConnectionID\n}\n\nfunc (b *BinlogSyncer) newConnection(ctx context.Context) (*client.Conn, error) {\n\tvar addr string\n\tif b.cfg.Port != 0 {\n\t\taddr = net.JoinHostPort(b.cfg.Host, strconv.Itoa(int(b.cfg.Port)))\n\t} else {\n\t\taddr = b.cfg.Host\n\t}\n\n\ttimeoutCtx, cancel := context.WithTimeout(ctx, time.Second*10)\n\tdefer cancel()\n\n\treturn client.ConnectWithDialer(timeoutCtx, \"\", addr, b.cfg.User, b.cfg.Password,\n\t\t\"\", b.cfg.Dialer, func(c *client.Conn) error {\n\t\t\tc.SetTLSConfig(b.cfg.TLSConfig)\n\t\t\tc.SetAttributes(map[string]string{\"_client_role\": \"binary_log_listener\"})\n\t\t\tif b.cfg.ReadTimeout > 0 {\n\t\t\t\tc.ReadTimeout = b.cfg.ReadTimeout\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n}\n\nfunc (b *BinlogSyncer) killConnection(conn *client.Conn, id uint32) {\n\tcmd := fmt.Sprintf(\"KILL %d\", id)\n\tif _, err := conn.Execute(cmd); err != nil {\n\t\tb.cfg.Logger.Errorf(\"kill connection %d error %v\", id, err)\n\t\t// Unknown thread id\n\t\tif code := ErrorCode(err.Error()); code != ER_NO_SUCH_THREAD {\n\t\t\tb.cfg.Logger.Error(errors.Trace(err))\n\t\t}\n\t}\n\tb.cfg.Logger.Infof(\"kill last connection id %d\", id)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/const.go",
    "content": "package replication\n\nconst (\n\t//we only support MySQL 5.0.0+ binlog format, maybe???\n\tMinBinlogVersion = 4\n)\n\nvar (\n\t//binlog header [ fe `bin` ]\n\tBinLogFileHeader = []byte{0xfe, 0x62, 0x69, 0x6e}\n\n\tSemiSyncIndicator byte = 0xef\n)\n\nconst (\n\tLOG_EVENT_BINLOG_IN_USE_F            uint16 = 0x0001\n\tLOG_EVENT_FORCED_ROTATE_F            uint16 = 0x0002\n\tLOG_EVENT_THREAD_SPECIFIC_F          uint16 = 0x0004\n\tLOG_EVENT_SUPPRESS_USE_F             uint16 = 0x0008\n\tLOG_EVENT_UPDATE_TABLE_MAP_VERSION_F uint16 = 0x0010\n\tLOG_EVENT_ARTIFICIAL_F               uint16 = 0x0020\n\tLOG_EVENT_RELAY_LOG_F                uint16 = 0x0040\n\tLOG_EVENT_IGNORABLE_F                uint16 = 0x0080\n\tLOG_EVENT_NO_FILTER_F                uint16 = 0x0100\n\tLOG_EVENT_MTS_ISOLATE_F              uint16 = 0x0200\n)\n\nconst (\n\tBINLOG_DUMP_NEVER_STOP          uint16 = 0x00\n\tBINLOG_DUMP_NON_BLOCK           uint16 = 0x01\n\tBINLOG_SEND_ANNOTATE_ROWS_EVENT uint16 = 0x02\n\tBINLOG_THROUGH_POSITION         uint16 = 0x02\n\tBINLOG_THROUGH_GTID             uint16 = 0x04\n)\n\nconst (\n\tBINLOG_ROW_IMAGE_FULL    = \"FULL\"\n\tBINLOG_ROW_IMAGE_MINIMAL = \"MINIMAL\"\n\tBINLOG_ROW_IMAGE_NOBLOB  = \"NOBLOB\"\n)\n\nconst (\n\tBINLOG_MARIADB_FL_STANDALONE      = 1 << iota /*1  - FL_STANDALONE is set when there is no terminating COMMIT event*/\n\tBINLOG_MARIADB_FL_GROUP_COMMIT_ID             /*2  - FL_GROUP_COMMIT_ID is set when event group is part of a group commit on the master. Groups with same commit_id are part of the same group commit.*/\n\tBINLOG_MARIADB_FL_TRANSACTIONAL               /*4  - FL_TRANSACTIONAL is set for an event group that can be safely rolled back (no MyISAM, eg.).*/\n\tBINLOG_MARIADB_FL_ALLOW_PARALLEL              /*8  - FL_ALLOW_PARALLEL reflects the (negation of the) value of @@SESSION.skip_parallel_replication at the time of commit*/\n\tBINLOG_MARIADB_FL_WAITED                      /*16 = FL_WAITED is set if a row lock wait (or other wait) is detected during the execution of the transaction*/\n\tBINLOG_MARIADB_FL_DDL                         /*32 - FL_DDL is set for event group containing DDL*/\n)\n\n// See `Log_event_type` in binlog_event.h\n// https://github.com/mysql/mysql-server/blob/trunk/libs/mysql/binlog/event/binlog_event.h\n\ntype EventType byte\n\nconst (\n\tUNKNOWN_EVENT EventType = iota\n\tSTART_EVENT_V3\n\tQUERY_EVENT\n\tSTOP_EVENT\n\tROTATE_EVENT\n\tINTVAR_EVENT\n\tLOAD_EVENT\n\tSLAVE_EVENT\n\tCREATE_FILE_EVENT\n\tAPPEND_BLOCK_EVENT\n\tEXEC_LOAD_EVENT\n\tDELETE_FILE_EVENT\n\tNEW_LOAD_EVENT\n\tRAND_EVENT\n\tUSER_VAR_EVENT\n\tFORMAT_DESCRIPTION_EVENT\n\tXID_EVENT\n\tBEGIN_LOAD_QUERY_EVENT\n\tEXECUTE_LOAD_QUERY_EVENT\n\tTABLE_MAP_EVENT\n\tWRITE_ROWS_EVENTv0\n\tUPDATE_ROWS_EVENTv0\n\tDELETE_ROWS_EVENTv0\n\tWRITE_ROWS_EVENTv1\n\tUPDATE_ROWS_EVENTv1\n\tDELETE_ROWS_EVENTv1\n\tINCIDENT_EVENT\n\tHEARTBEAT_EVENT\n\tIGNORABLE_EVENT\n\tROWS_QUERY_EVENT\n\tWRITE_ROWS_EVENTv2\n\tUPDATE_ROWS_EVENTv2\n\tDELETE_ROWS_EVENTv2\n\tGTID_EVENT\n\tANONYMOUS_GTID_EVENT\n\tPREVIOUS_GTIDS_EVENT\n\tTRANSACTION_CONTEXT_EVENT\n\tVIEW_CHANGE_EVENT\n\tXA_PREPARE_LOG_EVENT\n\tPARTIAL_UPDATE_ROWS_EVENT\n\tTRANSACTION_PAYLOAD_EVENT\n\tHEARTBEAT_LOG_EVENT_V2\n\tGTID_TAGGED_LOG_EVENT\n)\n\nconst (\n\t// MariaDB event starts from 160\n\tMARIADB_ANNOTATE_ROWS_EVENT EventType = 160 + iota\n\tMARIADB_BINLOG_CHECKPOINT_EVENT\n\tMARIADB_GTID_EVENT\n\tMARIADB_GTID_LIST_EVENT\n\tMARIADB_START_ENCRYPTION_EVENT\n\tMARIADB_QUERY_COMPRESSED_EVENT\n\tMARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1\n\tMARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1\n\tMARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1\n)\n\nfunc (e EventType) String() string {\n\tswitch e {\n\tcase UNKNOWN_EVENT:\n\t\treturn \"UnknownEvent\"\n\tcase START_EVENT_V3:\n\t\treturn \"StartEventV3\"\n\tcase QUERY_EVENT:\n\t\treturn \"QueryEvent\"\n\tcase STOP_EVENT:\n\t\treturn \"StopEvent\"\n\tcase ROTATE_EVENT:\n\t\treturn \"RotateEvent\"\n\tcase INTVAR_EVENT:\n\t\treturn \"IntVarEvent\"\n\tcase LOAD_EVENT:\n\t\treturn \"LoadEvent\"\n\tcase SLAVE_EVENT:\n\t\treturn \"SlaveEvent\"\n\tcase CREATE_FILE_EVENT:\n\t\treturn \"CreateFileEvent\"\n\tcase APPEND_BLOCK_EVENT:\n\t\treturn \"AppendBlockEvent\"\n\tcase EXEC_LOAD_EVENT:\n\t\treturn \"ExecLoadEvent\"\n\tcase DELETE_FILE_EVENT:\n\t\treturn \"DeleteFileEvent\"\n\tcase NEW_LOAD_EVENT:\n\t\treturn \"NewLoadEvent\"\n\tcase RAND_EVENT:\n\t\treturn \"RandEvent\"\n\tcase USER_VAR_EVENT:\n\t\treturn \"UserVarEvent\"\n\tcase FORMAT_DESCRIPTION_EVENT:\n\t\treturn \"FormatDescriptionEvent\"\n\tcase XID_EVENT:\n\t\treturn \"XIDEvent\"\n\tcase BEGIN_LOAD_QUERY_EVENT:\n\t\treturn \"BeginLoadQueryEvent\"\n\tcase EXECUTE_LOAD_QUERY_EVENT:\n\t\treturn \"ExectueLoadQueryEvent\"\n\tcase TABLE_MAP_EVENT:\n\t\treturn \"TableMapEvent\"\n\tcase WRITE_ROWS_EVENTv0:\n\t\treturn \"WriteRowsEventV0\"\n\tcase UPDATE_ROWS_EVENTv0:\n\t\treturn \"UpdateRowsEventV0\"\n\tcase DELETE_ROWS_EVENTv0:\n\t\treturn \"DeleteRowsEventV0\"\n\tcase WRITE_ROWS_EVENTv1:\n\t\treturn \"WriteRowsEventV1\"\n\tcase UPDATE_ROWS_EVENTv1:\n\t\treturn \"UpdateRowsEventV1\"\n\tcase DELETE_ROWS_EVENTv1:\n\t\treturn \"DeleteRowsEventV1\"\n\tcase INCIDENT_EVENT:\n\t\treturn \"IncidentEvent\"\n\tcase HEARTBEAT_EVENT:\n\t\treturn \"HeartbeatEvent\"\n\tcase IGNORABLE_EVENT:\n\t\treturn \"IgnorableEvent\"\n\tcase ROWS_QUERY_EVENT:\n\t\treturn \"RowsQueryEvent\"\n\tcase WRITE_ROWS_EVENTv2:\n\t\treturn \"WriteRowsEventV2\"\n\tcase UPDATE_ROWS_EVENTv2:\n\t\treturn \"UpdateRowsEventV2\"\n\tcase DELETE_ROWS_EVENTv2:\n\t\treturn \"DeleteRowsEventV2\"\n\tcase GTID_EVENT:\n\t\treturn \"GTIDEvent\"\n\tcase ANONYMOUS_GTID_EVENT:\n\t\treturn \"AnonymousGTIDEvent\"\n\tcase PREVIOUS_GTIDS_EVENT:\n\t\treturn \"PreviousGTIDsEvent\"\n\tcase MARIADB_ANNOTATE_ROWS_EVENT:\n\t\treturn \"MariadbAnnotateRowsEvent\"\n\tcase MARIADB_BINLOG_CHECKPOINT_EVENT:\n\t\treturn \"MariadbBinLogCheckPointEvent\"\n\tcase MARIADB_GTID_EVENT:\n\t\treturn \"MariadbGTIDEvent\"\n\tcase MARIADB_GTID_LIST_EVENT:\n\t\treturn \"MariadbGTIDListEvent\"\n\tcase TRANSACTION_CONTEXT_EVENT:\n\t\treturn \"TransactionContextEvent\"\n\tcase VIEW_CHANGE_EVENT:\n\t\treturn \"ViewChangeEvent\"\n\tcase XA_PREPARE_LOG_EVENT:\n\t\treturn \"XAPrepareLogEvent\"\n\tcase PARTIAL_UPDATE_ROWS_EVENT:\n\t\treturn \"PartialUpdateRowsEvent\"\n\tcase TRANSACTION_PAYLOAD_EVENT:\n\t\treturn \"TransactionPayloadEvent\"\n\tcase HEARTBEAT_LOG_EVENT_V2:\n\t\treturn \"HeartbeatLogEventV2\"\n\tcase GTID_TAGGED_LOG_EVENT:\n\t\treturn \"Gtid_tagged_log_event\"\n\tcase MARIADB_START_ENCRYPTION_EVENT:\n\t\treturn \"MariadbStartEncryptionEvent\"\n\tcase MARIADB_QUERY_COMPRESSED_EVENT:\n\t\treturn \"MariadbQueryCompressedEvent\"\n\tcase MARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1:\n\t\treturn \"MariadbWriteRowsCompressedEventV1\"\n\tcase MARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1:\n\t\treturn \"MariadbUpdateRowsCompressedEventV1\"\n\tcase MARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1:\n\t\treturn \"MariadbDeleteRowsCompressedEventV1\"\n\n\tdefault:\n\t\treturn \"UnknownEvent\"\n\t}\n}\n\nconst (\n\tBINLOG_CHECKSUM_ALG_OFF byte = 0 // Events are without checksum though its generator\n\t// is checksum-capable New Master (NM).\n\tBINLOG_CHECKSUM_ALG_CRC32 byte = 1 // CRC32 of zlib algorithm.\n\t//  BINLOG_CHECKSUM_ALG_ENUM_END,  // the cut line: valid alg range is [1, 0x7f].\n\tBINLOG_CHECKSUM_ALG_UNDEF byte = 255 // special value to tag undetermined yet checksum\n\t// or events from checksum-unaware servers\n)\n\n// These are TABLE_MAP_EVENT's optional metadata field type, from: libbinlogevents/include/rows_event.h\nconst (\n\tTABLE_MAP_OPT_META_SIGNEDNESS byte = iota + 1\n\tTABLE_MAP_OPT_META_DEFAULT_CHARSET\n\tTABLE_MAP_OPT_META_COLUMN_CHARSET\n\tTABLE_MAP_OPT_META_COLUMN_NAME\n\tTABLE_MAP_OPT_META_SET_STR_VALUE\n\tTABLE_MAP_OPT_META_ENUM_STR_VALUE\n\tTABLE_MAP_OPT_META_GEOMETRY_TYPE\n\tTABLE_MAP_OPT_META_SIMPLE_PRIMARY_KEY\n\tTABLE_MAP_OPT_META_PRIMARY_KEY_WITH_PREFIX\n\tTABLE_MAP_OPT_META_ENUM_AND_SET_DEFAULT_CHARSET\n\tTABLE_MAP_OPT_META_ENUM_AND_SET_COLUMN_CHARSET\n\tTABLE_MAP_OPT_META_COLUMN_VISIBILITY\n)\n\ntype IntVarEventType byte\n\nconst (\n\tINVALID IntVarEventType = iota\n\tLAST_INSERT_ID\n\tINSERT_ID\n)\n\nconst (\n\tENUM_EXTRA_ROW_INFO_TYPECODE_NDB byte = iota\n\tENUM_EXTRA_ROW_INFO_TYPECODE_PARTITION\n)\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/doc.go",
    "content": "/*\nReplication package is to handle MySQL replication protocol.\n\nTodo:\n\n+ Get table information when handing rows event.\n*/\npackage replication\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/event.go",
    "content": "package replication\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/pingcap/errors\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n)\n\nconst (\n\tEventHeaderSize            = 19\n\tSidLength                  = 16\n\tLogicalTimestampTypeCode   = 2\n\tPartLogicalTimestampLength = 8\n\tBinlogChecksumLength       = 4\n\tUndefinedServerVer         = 999999 // UNDEFINED_SERVER_VERSION\n)\n\ntype BinlogEvent struct {\n\t// raw binlog data which contains all data, including binlog header and event body, and including crc32 checksum if exists\n\tRawData []byte\n\n\tHeader *EventHeader\n\tEvent  Event\n}\n\nfunc (e *BinlogEvent) Dump(w io.Writer) {\n\te.Header.Dump(w)\n\te.Event.Dump(w)\n}\n\ntype Event interface {\n\t//Dump Event, format like python-mysql-replication\n\tDump(w io.Writer)\n\n\tDecode(data []byte) error\n}\n\ntype EventError struct {\n\tHeader *EventHeader\n\n\t//Error message\n\tErr string\n\n\t//Event data\n\tData []byte\n}\n\nfunc (e *EventError) Error() string {\n\treturn fmt.Sprintf(\"Header %#v, Data %q, Err: %v\", e.Header, e.Data, e.Err)\n}\n\ntype EventHeader struct {\n\tTimestamp uint32\n\tEventType EventType\n\tServerID  uint32\n\tEventSize uint32\n\tLogPos    uint32\n\tFlags     uint16\n}\n\nfunc (h *EventHeader) Decode(data []byte) error {\n\tif len(data) < EventHeaderSize {\n\t\treturn errors.Errorf(\"header size too short %d, must 19\", len(data))\n\t}\n\n\tpos := 0\n\n\th.Timestamp = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\th.EventType = EventType(data[pos])\n\tpos++\n\n\th.ServerID = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\th.EventSize = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\th.LogPos = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\th.Flags = binary.LittleEndian.Uint16(data[pos:])\n\t// pos += 2\n\n\tif h.EventSize < uint32(EventHeaderSize) {\n\t\treturn errors.Errorf(\"invalid event size %d, must >= 19\", h.EventSize)\n\t}\n\n\treturn nil\n}\n\nfunc (h *EventHeader) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"=== %s ===\\n\", h.EventType)\n\tfmt.Fprintf(w, \"Date: %s\\n\", time.Unix(int64(h.Timestamp), 0).Format(TimeFormat))\n\tfmt.Fprintf(w, \"Log position: %d\\n\", h.LogPos)\n\tfmt.Fprintf(w, \"Event size: %d\\n\", h.EventSize)\n}\n\nvar (\n\tchecksumVersionSplitMysql   = []int{5, 6, 1}\n\tchecksumVersionProductMysql = (checksumVersionSplitMysql[0]*256+checksumVersionSplitMysql[1])*256 + checksumVersionSplitMysql[2]\n\n\tchecksumVersionSplitMariaDB   = []int{5, 3, 0}\n\tchecksumVersionProductMariaDB = (checksumVersionSplitMariaDB[0]*256+checksumVersionSplitMariaDB[1])*256 + checksumVersionSplitMariaDB[2]\n)\n\n// server version format X.Y.Zabc, a is not . or number\nfunc splitServerVersion(server string) []int {\n\tseps := strings.Split(server, \".\")\n\tif len(seps) < 3 {\n\t\treturn []int{0, 0, 0}\n\t}\n\n\tx, _ := strconv.Atoi(seps[0])\n\ty, _ := strconv.Atoi(seps[1])\n\n\tindex := 0\n\tfor i, c := range seps[2] {\n\t\tif !unicode.IsNumber(c) {\n\t\t\tindex = i\n\t\t\tbreak\n\t\t}\n\t}\n\n\tz, _ := strconv.Atoi(seps[2][0:index])\n\n\treturn []int{x, y, z}\n}\n\nfunc calcVersionProduct(server string) int {\n\tversionSplit := splitServerVersion(server)\n\n\treturn (versionSplit[0]*256+versionSplit[1])*256 + versionSplit[2]\n}\n\ntype FormatDescriptionEvent struct {\n\tVersion                uint16\n\tServerVersion          string\n\tCreateTimestamp        uint32\n\tEventHeaderLength      uint8\n\tEventTypeHeaderLengths []byte\n\n\t// 0 is off, 1 is for CRC32, 255 is undefined\n\tChecksumAlgorithm byte\n}\n\nfunc (e *FormatDescriptionEvent) Decode(data []byte) error {\n\tpos := 0\n\te.Version = binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\tserverVersionRaw := make([]byte, 50)\n\tcopy(serverVersionRaw, data[pos:])\n\tpos += 50\n\n\te.CreateTimestamp = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.EventHeaderLength = data[pos]\n\tpos++\n\n\tif e.EventHeaderLength != byte(EventHeaderSize) {\n\t\treturn errors.Errorf(\"invalid event header length %d, must 19\", e.EventHeaderLength)\n\t}\n\n\tserverVersionLength := bytes.Index(serverVersionRaw, []byte{0x0})\n\tif serverVersionLength < 0 {\n\t\te.ServerVersion = string(serverVersionRaw)\n\t} else {\n\t\te.ServerVersion = string(serverVersionRaw[:serverVersionLength])\n\t}\n\tchecksumProduct := checksumVersionProductMysql\n\tif strings.Contains(strings.ToLower(e.ServerVersion), \"mariadb\") {\n\t\tchecksumProduct = checksumVersionProductMariaDB\n\t}\n\n\tif calcVersionProduct(e.ServerVersion) >= checksumProduct {\n\t\t// here, the last 5 bytes is 1 byte check sum alg type and 4 byte checksum if exists\n\t\te.ChecksumAlgorithm = data[len(data)-5]\n\t\te.EventTypeHeaderLengths = data[pos : len(data)-5]\n\t} else {\n\t\te.ChecksumAlgorithm = BINLOG_CHECKSUM_ALG_UNDEF\n\t\te.EventTypeHeaderLengths = data[pos:]\n\t}\n\n\treturn nil\n}\n\nfunc (e *FormatDescriptionEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Version: %d\\n\", e.Version)\n\tfmt.Fprintf(w, \"Server version: %s\\n\", e.ServerVersion)\n\t//fmt.Fprintf(w, \"Create date: %s\\n\", time.Unix(int64(e.CreateTimestamp), 0).Format(TimeFormat))\n\tfmt.Fprintf(w, \"Checksum algorithm: %d\\n\", e.ChecksumAlgorithm)\n\t//fmt.Fprintf(w, \"Event header lengths: \\n%s\", hex.Dump(e.EventTypeHeaderLengths))\n\tfmt.Fprintln(w)\n}\n\ntype RotateEvent struct {\n\tPosition    uint64\n\tNextLogName []byte\n}\n\nfunc (e *RotateEvent) Decode(data []byte) error {\n\te.Position = binary.LittleEndian.Uint64(data[0:])\n\te.NextLogName = data[8:]\n\n\treturn nil\n}\n\nfunc (e *RotateEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Position: %d\\n\", e.Position)\n\tfmt.Fprintf(w, \"Next log name: %s\\n\", e.NextLogName)\n\tfmt.Fprintln(w)\n}\n\ntype PreviousGTIDsEvent struct {\n\tGTIDSets string\n}\n\ntype GtidFormat int\n\nconst (\n\tGtidFormatClassic = iota\n\tGtidFormatTagged\n)\n\n// Decode the number of sids (source identifiers) and if it is using\n// tagged GTIDs or classic (non-tagged) GTIDs.\n//\n// Note that each gtid tag increases the sidno here, so a single UUID\n// might turn up multiple times if there are multipl tags.\n//\n// see also:\n// decode_nsids_format in mysql/mysql-server\n// https://github.com/mysql/mysql-server/blob/61a3a1d8ef15512396b4c2af46e922a19bf2b174/sql/rpl_gtid_set.cc#L1363-L1378\nfunc decodeSid(data []byte) (format GtidFormat, sidnr uint64) {\n\tif data[7] == 1 {\n\t\tformat = GtidFormatTagged\n\t}\n\n\tif format == GtidFormatTagged {\n\t\tmasked := make([]byte, 8)\n\t\tcopy(masked, data[1:7])\n\t\tsidnr = binary.LittleEndian.Uint64(masked)\n\t\treturn\n\t}\n\tsidnr = binary.LittleEndian.Uint64(data[:8])\n\treturn\n}\n\nfunc (e *PreviousGTIDsEvent) Decode(data []byte) error {\n\tpos := 0\n\n\tformat, uuidCount := decodeSid(data)\n\tpos += 8\n\n\tpreviousGTIDSets := make([]string, uuidCount)\n\n\tcurrentSetnr := 0\n\tvar buf strings.Builder\n\tfor range previousGTIDSets {\n\t\tuuid := e.decodeUuid(data[pos : pos+16])\n\t\tpos += 16\n\t\tvar tag string\n\t\tif format == GtidFormatTagged {\n\t\t\ttagLength := int(data[pos]) / 2\n\t\t\tpos += 1\n\t\t\tif tagLength > 0 { // 0 == no tag, >0 == tag\n\t\t\t\ttag = string(data[pos : pos+tagLength])\n\t\t\t\tpos += tagLength\n\t\t\t}\n\t\t}\n\n\t\tif len(tag) > 0 {\n\t\t\tbuf.WriteString(\":\")\n\t\t\tbuf.WriteString(tag)\n\t\t} else {\n\t\t\tif currentSetnr != 0 {\n\t\t\t\tbuf.WriteString(\",\")\n\t\t\t}\n\t\t\tbuf.WriteString(uuid)\n\t\t\tcurrentSetnr += 1\n\t\t}\n\n\t\tsliceCount := binary.LittleEndian.Uint16(data[pos : pos+8])\n\t\tpos += 8\n\t\tfor range sliceCount {\n\t\t\tbuf.WriteString(\":\")\n\n\t\t\tstart := e.decodeInterval(data[pos : pos+8])\n\t\t\tpos += 8\n\t\t\tstop := e.decodeInterval(data[pos : pos+8])\n\t\t\tpos += 8\n\t\t\tif stop == start+1 {\n\t\t\t\tfmt.Fprintf(&buf, \"%d\", start)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(&buf, \"%d-%d\", start, stop-1)\n\t\t\t}\n\t\t}\n\t\tif len(tag) == 0 {\n\t\t\tcurrentSetnr += 1\n\t\t}\n\t}\n\te.GTIDSets = buf.String()\n\treturn nil\n}\n\nfunc (e *PreviousGTIDsEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Previous GTID Event: %s\\n\", e.GTIDSets)\n\tfmt.Fprintln(w)\n}\n\nfunc (e *PreviousGTIDsEvent) decodeUuid(data []byte) string {\n\treturn fmt.Sprintf(\"%s-%s-%s-%s-%s\", hex.EncodeToString(data[0:4]), hex.EncodeToString(data[4:6]),\n\t\thex.EncodeToString(data[6:8]), hex.EncodeToString(data[8:10]), hex.EncodeToString(data[10:]))\n}\n\nfunc (e *PreviousGTIDsEvent) decodeInterval(data []byte) uint64 {\n\treturn binary.LittleEndian.Uint64(data)\n}\n\ntype XIDEvent struct {\n\tXID uint64\n\n\t// in fact XIDEvent dosen't have the GTIDSet information, just for beneficial to use\n\tGSet GTIDSet\n}\n\nfunc (e *XIDEvent) Decode(data []byte) error {\n\te.XID = binary.LittleEndian.Uint64(data)\n\treturn nil\n}\n\nfunc (e *XIDEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"XID: %d\\n\", e.XID)\n\tif e.GSet != nil {\n\t\tfmt.Fprintf(w, \"GTIDSet: %s\\n\", e.GSet.String())\n\t}\n\tfmt.Fprintln(w)\n}\n\ntype QueryEvent struct {\n\tSlaveProxyID  uint32\n\tExecutionTime uint32\n\tErrorCode     uint16\n\tStatusVars    []byte\n\tSchema        []byte\n\tQuery         []byte\n\n\t// for mariadb QUERY_COMPRESSED_EVENT\n\tcompressed bool\n\n\t// in fact QueryEvent dosen't have the GTIDSet information, just for beneficial to use\n\tGSet GTIDSet\n}\n\nfunc (e *QueryEvent) Decode(data []byte) error {\n\tpos := 0\n\n\te.SlaveProxyID = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.ExecutionTime = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\tschemaLength := data[pos]\n\tpos++\n\n\te.ErrorCode = binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\tstatusVarsLength := binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\te.StatusVars = data[pos : pos+int(statusVarsLength)]\n\tpos += int(statusVarsLength)\n\n\te.Schema = data[pos : pos+int(schemaLength)]\n\tpos += int(schemaLength)\n\n\t//skip 0x00\n\tpos++\n\n\tif e.compressed {\n\t\tdecompressedQuery, err := DecompressMariadbData(data[pos:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\te.Query = decompressedQuery\n\t} else {\n\t\te.Query = data[pos:]\n\t}\n\treturn nil\n}\n\nfunc (e *QueryEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Slave proxy ID: %d\\n\", e.SlaveProxyID)\n\tfmt.Fprintf(w, \"Execution time: %d\\n\", e.ExecutionTime)\n\tfmt.Fprintf(w, \"Error code: %d\\n\", e.ErrorCode)\n\t//fmt.Fprintf(w, \"Status vars: \\n%s\", hex.Dump(e.StatusVars))\n\tfmt.Fprintf(w, \"Schema: %s\\n\", e.Schema)\n\tfmt.Fprintf(w, \"Query: %s\\n\", e.Query)\n\tif e.GSet != nil {\n\t\tfmt.Fprintf(w, \"GTIDSet: %s\\n\", e.GSet.String())\n\t}\n\tfmt.Fprintln(w)\n}\n\ntype GTIDEvent struct {\n\tCommitFlag     uint8\n\tSID            []byte\n\tGNO            int64\n\tLastCommitted  int64\n\tSequenceNumber int64\n\n\t// ImmediateCommitTimestamp/OriginalCommitTimestamp are introduced in MySQL-8.0.1, see:\n\t// https://mysqlhighavailability.com/replication-features-in-mysql-8-0-1/\n\tImmediateCommitTimestamp uint64\n\tOriginalCommitTimestamp  uint64\n\n\t// Total transaction length (including this GTIDEvent), introduced in MySQL-8.0.2, see:\n\t// https://mysqlhighavailability.com/taking-advantage-of-new-transaction-length-metadata/\n\tTransactionLength uint64\n\n\t// ImmediateServerVersion/OriginalServerVersion are introduced in MySQL-8.0.14, see\n\t// https://dev.mysql.com/doc/refman/8.0/en/replication-compatibility.html\n\tImmediateServerVersion uint32\n\tOriginalServerVersion  uint32\n}\n\nfunc (e *GTIDEvent) Decode(data []byte) error {\n\tpos := 0\n\te.CommitFlag = data[pos]\n\tpos++\n\te.SID = data[pos : pos+SidLength]\n\tpos += SidLength\n\te.GNO = int64(binary.LittleEndian.Uint64(data[pos:]))\n\tpos += 8\n\n\tif len(data) >= 42 {\n\t\tif data[pos] == LogicalTimestampTypeCode {\n\t\t\tpos++\n\t\t\te.LastCommitted = int64(binary.LittleEndian.Uint64(data[pos:]))\n\t\t\tpos += PartLogicalTimestampLength\n\t\t\te.SequenceNumber = int64(binary.LittleEndian.Uint64(data[pos:]))\n\t\t\tpos += 8\n\n\t\t\t// IMMEDIATE_COMMIT_TIMESTAMP_LENGTH = 7\n\t\t\tif len(data)-pos < 7 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\te.ImmediateCommitTimestamp = FixedLengthInt(data[pos : pos+7])\n\t\t\tpos += 7\n\t\t\tif (e.ImmediateCommitTimestamp & (uint64(1) << 55)) != 0 {\n\t\t\t\t// If the most significant bit set, another 7 byte follows representing OriginalCommitTimestamp\n\t\t\t\te.ImmediateCommitTimestamp &= ^(uint64(1) << 55)\n\t\t\t\te.OriginalCommitTimestamp = FixedLengthInt(data[pos : pos+7])\n\t\t\t\tpos += 7\n\t\t\t} else {\n\t\t\t\t// Otherwise OriginalCommitTimestamp == ImmediateCommitTimestamp\n\t\t\t\te.OriginalCommitTimestamp = e.ImmediateCommitTimestamp\n\t\t\t}\n\n\t\t\t// TRANSACTION_LENGTH_MIN_LENGTH = 1\n\t\t\tif len(data)-pos < 1 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tvar n int\n\t\t\te.TransactionLength, _, n = LengthEncodedInt(data[pos:])\n\t\t\tpos += n\n\n\t\t\t// IMMEDIATE_SERVER_VERSION_LENGTH = 4\n\t\t\te.ImmediateServerVersion = UndefinedServerVer\n\t\t\te.OriginalServerVersion = UndefinedServerVer\n\t\t\tif len(data)-pos < 4 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\te.ImmediateServerVersion = binary.LittleEndian.Uint32(data[pos:])\n\t\t\tpos += 4\n\t\t\tif (e.ImmediateServerVersion & (uint32(1) << 31)) != 0 {\n\t\t\t\t// If the most significant bit set, another 4 byte follows representing OriginalServerVersion\n\t\t\t\te.ImmediateServerVersion &= ^(uint32(1) << 31)\n\t\t\t\te.OriginalServerVersion = binary.LittleEndian.Uint32(data[pos:])\n\t\t\t\t// pos += 4\n\t\t\t} else {\n\t\t\t\t// Otherwise OriginalServerVersion == ImmediateServerVersion\n\t\t\t\te.OriginalServerVersion = e.ImmediateServerVersion\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (e *GTIDEvent) Dump(w io.Writer) {\n\tfmtTime := func(t time.Time) string {\n\t\tif t.IsZero() {\n\t\t\treturn \"<n/a>\"\n\t\t}\n\t\treturn t.Format(time.RFC3339Nano)\n\t}\n\n\tfmt.Fprintf(w, \"Commit flag: %d\\n\", e.CommitFlag)\n\tu, _ := uuid.FromBytes(e.SID)\n\tfmt.Fprintf(w, \"GTID_NEXT: %s:%d\\n\", u.String(), e.GNO)\n\tfmt.Fprintf(w, \"LAST_COMMITTED: %d\\n\", e.LastCommitted)\n\tfmt.Fprintf(w, \"SEQUENCE_NUMBER: %d\\n\", e.SequenceNumber)\n\tfmt.Fprintf(w, \"Immediate commmit timestamp: %d (%s)\\n\", e.ImmediateCommitTimestamp, fmtTime(e.ImmediateCommitTime()))\n\tfmt.Fprintf(w, \"Orignal commmit timestamp: %d (%s)\\n\", e.OriginalCommitTimestamp, fmtTime(e.OriginalCommitTime()))\n\tfmt.Fprintf(w, \"Transaction length: %d\\n\", e.TransactionLength)\n\tfmt.Fprintf(w, \"Immediate server version: %d\\n\", e.ImmediateServerVersion)\n\tfmt.Fprintf(w, \"Orignal server version: %d\\n\", e.OriginalServerVersion)\n\tfmt.Fprintln(w)\n}\n\nfunc (e *GTIDEvent) GTIDNext() (GTIDSet, error) {\n\tu, err := uuid.FromBytes(e.SID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn ParseMysqlGTIDSet(strings.Join([]string{u.String(), strconv.FormatInt(e.GNO, 10)}, \":\"))\n}\n\n// ImmediateCommitTime returns the commit time of this trx on the immediate server\n// or zero time if not available.\nfunc (e *GTIDEvent) ImmediateCommitTime() time.Time {\n\treturn microSecTimestampToTime(e.ImmediateCommitTimestamp)\n}\n\n// OriginalCommitTime returns the commit time of this trx on the original server\n// or zero time if not available.\nfunc (e *GTIDEvent) OriginalCommitTime() time.Time {\n\treturn microSecTimestampToTime(e.OriginalCommitTimestamp)\n}\n\ntype BeginLoadQueryEvent struct {\n\tFileID    uint32\n\tBlockData []byte\n}\n\nfunc (e *BeginLoadQueryEvent) Decode(data []byte) error {\n\tpos := 0\n\n\te.FileID = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.BlockData = data[pos:]\n\n\treturn nil\n}\n\nfunc (e *BeginLoadQueryEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"File ID: %d\\n\", e.FileID)\n\tfmt.Fprintf(w, \"Block data: %s\\n\", e.BlockData)\n\tfmt.Fprintln(w)\n}\n\ntype ExecuteLoadQueryEvent struct {\n\tSlaveProxyID     uint32\n\tExecutionTime    uint32\n\tSchemaLength     uint8\n\tErrorCode        uint16\n\tStatusVars       uint16\n\tFileID           uint32\n\tStartPos         uint32\n\tEndPos           uint32\n\tDupHandlingFlags uint8\n}\n\nfunc (e *ExecuteLoadQueryEvent) Decode(data []byte) error {\n\tpos := 0\n\n\te.SlaveProxyID = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.ExecutionTime = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.SchemaLength = data[pos]\n\tpos++\n\n\te.ErrorCode = binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\te.StatusVars = binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\te.FileID = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.StartPos = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.EndPos = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\te.DupHandlingFlags = data[pos]\n\n\treturn nil\n}\n\nfunc (e *ExecuteLoadQueryEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Slave proxy ID: %d\\n\", e.SlaveProxyID)\n\tfmt.Fprintf(w, \"Execution time: %d\\n\", e.ExecutionTime)\n\tfmt.Fprintf(w, \"Schame length: %d\\n\", e.SchemaLength)\n\tfmt.Fprintf(w, \"Error code: %d\\n\", e.ErrorCode)\n\tfmt.Fprintf(w, \"Status vars length: %d\\n\", e.StatusVars)\n\tfmt.Fprintf(w, \"File ID: %d\\n\", e.FileID)\n\tfmt.Fprintf(w, \"Start pos: %d\\n\", e.StartPos)\n\tfmt.Fprintf(w, \"End pos: %d\\n\", e.EndPos)\n\tfmt.Fprintf(w, \"Dup handling flags: %d\\n\", e.DupHandlingFlags)\n\tfmt.Fprintln(w)\n}\n\n// case MARIADB_ANNOTATE_ROWS_EVENT:\n// \treturn \"MariadbAnnotateRowsEvent\"\n\ntype MariadbAnnotateRowsEvent struct {\n\tQuery []byte\n}\n\nfunc (e *MariadbAnnotateRowsEvent) Decode(data []byte) error {\n\te.Query = data\n\treturn nil\n}\n\nfunc (e *MariadbAnnotateRowsEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Query: %s\\n\", e.Query)\n\tfmt.Fprintln(w)\n}\n\ntype MariadbBinlogCheckPointEvent struct {\n\tInfo []byte\n}\n\nfunc (e *MariadbBinlogCheckPointEvent) Decode(data []byte) error {\n\te.Info = data\n\treturn nil\n}\n\nfunc (e *MariadbBinlogCheckPointEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Info: %s\\n\", e.Info)\n\tfmt.Fprintln(w)\n}\n\ntype MariadbGTIDEvent struct {\n\tGTID     MariadbGTID\n\tFlags    byte\n\tCommitID uint64\n}\n\nfunc (e *MariadbGTIDEvent) IsDDL() bool {\n\treturn (e.Flags & BINLOG_MARIADB_FL_DDL) != 0\n}\n\nfunc (e *MariadbGTIDEvent) IsStandalone() bool {\n\treturn (e.Flags & BINLOG_MARIADB_FL_STANDALONE) != 0\n}\n\nfunc (e *MariadbGTIDEvent) IsGroupCommit() bool {\n\treturn (e.Flags & BINLOG_MARIADB_FL_GROUP_COMMIT_ID) != 0\n}\n\nfunc (e *MariadbGTIDEvent) Decode(data []byte) error {\n\tpos := 0\n\te.GTID.SequenceNumber = binary.LittleEndian.Uint64(data)\n\tpos += 8\n\te.GTID.DomainID = binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\te.Flags = data[pos]\n\tpos += 1\n\n\tif (e.Flags & BINLOG_MARIADB_FL_GROUP_COMMIT_ID) > 0 {\n\t\te.CommitID = binary.LittleEndian.Uint64(data[pos:])\n\t}\n\n\treturn nil\n}\n\nfunc (e *MariadbGTIDEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"GTID: %v\\n\", e.GTID)\n\tfmt.Fprintf(w, \"Flags: %v\\n\", e.Flags)\n\tfmt.Fprintf(w, \"CommitID: %v\\n\", e.CommitID)\n\tfmt.Fprintln(w)\n}\n\nfunc (e *MariadbGTIDEvent) GTIDNext() (GTIDSet, error) {\n\treturn ParseMariadbGTIDSet(e.GTID.String())\n}\n\ntype MariadbGTIDListEvent struct {\n\tGTIDs []MariadbGTID\n}\n\nfunc (e *MariadbGTIDListEvent) Decode(data []byte) error {\n\tpos := 0\n\tv := binary.LittleEndian.Uint32(data[pos:])\n\tpos += 4\n\n\tcount := v & uint32((1<<28)-1)\n\n\te.GTIDs = make([]MariadbGTID, count)\n\n\tfor i := uint32(0); i < count; i++ {\n\t\te.GTIDs[i].DomainID = binary.LittleEndian.Uint32(data[pos:])\n\t\tpos += 4\n\t\te.GTIDs[i].ServerID = binary.LittleEndian.Uint32(data[pos:])\n\t\tpos += 4\n\t\te.GTIDs[i].SequenceNumber = binary.LittleEndian.Uint64(data[pos:])\n\t\tpos += 8\n\t}\n\n\treturn nil\n}\n\nfunc (e *MariadbGTIDListEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Lists: %v\\n\", e.GTIDs)\n\tfmt.Fprintln(w)\n}\n\ntype IntVarEvent struct {\n\tType  IntVarEventType\n\tValue uint64\n}\n\nfunc (i *IntVarEvent) Decode(data []byte) error {\n\ti.Type = IntVarEventType(data[0])\n\ti.Value = binary.LittleEndian.Uint64(data[1:])\n\treturn nil\n}\n\nfunc (i *IntVarEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Type: %d\\n\", i.Type)\n\tfmt.Fprintf(w, \"Value: %d\\n\", i.Value)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/generic_event.go",
    "content": "package replication\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// we don't parse all event, so some we will use GenericEvent instead\ntype GenericEvent struct {\n\tData []byte\n}\n\nfunc (e *GenericEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Event data: \\n%s\", hex.Dump(e.Data))\n\tfmt.Fprintln(w)\n}\n\nfunc (e *GenericEvent) Decode(data []byte) error {\n\te.Data = data\n\n\treturn nil\n}\n\n//below events are generic events, maybe later I will consider handle some.\n\n// type StartEventV3 struct {\n// \tVersion         uint16\n// \tServerVersion   [50]byte\n// \tCreateTimestamp uint32\n// }\n\n// type StopEvent struct{}\n\n// type LoadEvent struct {\n// \tSlaveProxyID uint32\n// \tExecTime     uint32\n// \tSkipLines    uint32\n// \tTableNameLen uint8\n// \tSchemaLen    uint8\n// \tNumFileds    uint32\n// \tFieldTerm    uint8\n// \tEnclosedBy   uint8\n// \tLineTerm     uint8\n// \tLineStart    uint8\n// \tEscapedBy    uint8\n// \tOptFlags     uint8\n// \tEmptyFlags   uint8\n\n// \t//len = 1 * NumFields\n// \tFieldNameLengths []byte\n\n// \t//len = sum(FieldNameLengths) + NumFields\n// \t//array of nul-terminated strings\n// \tFieldNames []byte\n\n// \t//len = TableNameLen + 1, nul-terminated string\n// \tTableName []byte\n\n// \t//len = SchemaLen + 1, nul-terminated string\n// \tSchemaName []byte\n\n// \t//string.NUL\n// \tFileName []byte\n// }\n\n// type NewLoadEvent struct {\n// \tSlaveProxyID  uint32\n// \tExecTime      uint32\n// \tSkipLines     uint32\n// \tTableNameLen  uint8\n// \tSchemaLen     uint8\n// \tNumFields     uint32\n// \tFieldTermLen  uint8\n// \tFieldTerm     []byte\n// \tEnclosedByLen uint8\n// \tEnclosedBy    []byte\n// \tLineTermLen   uint8\n// \tLineTerm      []byte\n// \tLineStartLen  uint8\n// \tLineStart     []byte\n// \tEscapedByLen  uint8\n// \tEscapedBy     []byte\n// \tOptFlags      uint8\n\n// \t//len = 1 * NumFields\n// \tFieldNameLengths []byte\n\n// \t//len = sum(FieldNameLengths) + NumFields\n// \t//array of nul-terminated strings\n// \tFieldNames []byte\n\n// \t//len = TableNameLen, nul-terminated string\n// \tTableName []byte\n\n// \t//len = SchemaLen, nul-terminated string\n// \tSchemaName []byte\n\n// \t//string.EOF\n// \tFileName []byte\n// }\n\n// type CreateFileEvent struct {\n// \tFileID    uint32\n// \tBlockData []byte\n// }\n\n// type AppendBlockEvent struct {\n// \tFileID    uint32\n// \tBlockData []byte\n// }\n\n// type ExecLoadEvent struct {\n// \tFileID uint32\n// }\n\n// type BeginLoadQueryEvent struct {\n// \tFileID    uint32\n// \tBlockData []byte\n// }\n\n// type ExecuteLoadQueryEvent struct {\n// \tSlaveProxyID     uint32\n// \tExecutionTime    uint32\n// \tSchemaLength     uint8\n// \tErrorCode        uint16\n// \tStatusVarsLength uint16\n\n// \tFileID           uint32\n// \tStartPos         uint32\n// \tEndPos           uint32\n// \tDupHandlingFlags uint8\n// }\n\n// type DeleteFileEvent struct {\n// \tFileID uint32\n// }\n\n// type RandEvent struct {\n// \tSeed1 uint64\n// \tSeed2 uint64\n// }\n\n// type UserVarEvent struct {\n// \tNameLength uint32\n// \tName       []byte\n// \tIsNull     uint8\n\n// \t//if not is null\n// \tType        uint8\n// \tCharset     uint32\n// \tValueLength uint32\n// \tValue       []byte\n\n// \t//if more data\n// \tFlags uint8\n// }\n\n// type IncidentEvent struct {\n// \tType          uint16\n// \tMessageLength uint8\n// \tMessage       []byte\n// }\n\n// type HeartbeatEvent struct {\n// }\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/json_binary.go",
    "content": "package replication\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n\t\"github.com/goccy/go-json\"\n\t\"github.com/pingcap/errors\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n)\n\nconst (\n\tJSONB_SMALL_OBJECT byte = iota // small JSON object\n\tJSONB_LARGE_OBJECT             // large JSON object\n\tJSONB_SMALL_ARRAY              // small JSON array\n\tJSONB_LARGE_ARRAY              // large JSON array\n\tJSONB_LITERAL                  // literal (true/false/null)\n\tJSONB_INT16                    // int16\n\tJSONB_UINT16                   // uint16\n\tJSONB_INT32                    // int32\n\tJSONB_UINT32                   // uint32\n\tJSONB_INT64                    // int64\n\tJSONB_UINT64                   // uint64\n\tJSONB_DOUBLE                   // double\n\tJSONB_STRING                   // string\n\tJSONB_OPAQUE       byte = 0x0f // custom data (any MySQL data type)\n)\n\nconst (\n\tJSONB_NULL_LITERAL  byte = 0x00\n\tJSONB_TRUE_LITERAL  byte = 0x01\n\tJSONB_FALSE_LITERAL byte = 0x02\n)\n\nconst (\n\tjsonbSmallOffsetSize = 2\n\tjsonbLargeOffsetSize = 4\n\n\tjsonbKeyEntrySizeSmall = 2 + jsonbSmallOffsetSize\n\tjsonbKeyEntrySizeLarge = 2 + jsonbLargeOffsetSize\n\n\tjsonbValueEntrySizeSmall = 1 + jsonbSmallOffsetSize\n\tjsonbValueEntrySizeLarge = 1 + jsonbLargeOffsetSize\n)\n\nvar (\n\tErrCorruptedJSONDiff = fmt.Errorf(\"corrupted JSON diff\") // ER_CORRUPTED_JSON_DIFF\n)\n\ntype (\n\t// JsonDiffOperation is an enum that describes what kind of operation a JsonDiff object represents.\n\t// https://github.com/mysql/mysql-server/blob/8.0/sql/json_diff.h\n\tJsonDiffOperation byte\n)\n\nconst (\n\t// The JSON value in the given path is replaced with a new value.\n\t//\n\t// It has the same effect as `JSON_REPLACE(col, path, value)`.\n\tJsonDiffOperationReplace = JsonDiffOperation(iota)\n\n\t// Add a new element at the given path.\n\t//\n\t//  If the path specifies an array element, it has the same effect as `JSON_ARRAY_INSERT(col, path, value)`.\n\t//\n\t//  If the path specifies an object member, it has the same effect as `JSON_INSERT(col, path, value)`.\n\tJsonDiffOperationInsert\n\n\t// The JSON value at the given path is removed from an array or object.\n\t//\n\t// It has the same effect as `JSON_REMOVE(col, path)`.\n\tJsonDiffOperationRemove\n)\n\ntype (\n\tJsonDiff struct {\n\t\tOp    JsonDiffOperation\n\t\tPath  string\n\t\tValue string\n\t}\n)\n\nfunc (op JsonDiffOperation) String() string {\n\tswitch op {\n\tcase JsonDiffOperationReplace:\n\t\treturn \"Replace\"\n\tcase JsonDiffOperationInsert:\n\t\treturn \"Insert\"\n\tcase JsonDiffOperationRemove:\n\t\treturn \"Remove\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown(%d)\", op)\n\t}\n}\n\nfunc (jd *JsonDiff) String() string {\n\treturn fmt.Sprintf(\"json_diff(op:%s path:%s value:%s)\", jd.Op, jd.Path, jd.Value)\n}\n\nfunc jsonbGetOffsetSize(isSmall bool) int {\n\tif isSmall {\n\t\treturn jsonbSmallOffsetSize\n\t}\n\n\treturn jsonbLargeOffsetSize\n}\n\nfunc jsonbGetKeyEntrySize(isSmall bool) int {\n\tif isSmall {\n\t\treturn jsonbKeyEntrySizeSmall\n\t}\n\n\treturn jsonbKeyEntrySizeLarge\n}\n\nfunc jsonbGetValueEntrySize(isSmall bool) int {\n\tif isSmall {\n\t\treturn jsonbValueEntrySizeSmall\n\t}\n\n\treturn jsonbValueEntrySizeLarge\n}\n\n// decodeJsonBinary decodes the JSON binary encoding data and returns\n// the common JSON encoding data.\nfunc (e *RowsEvent) decodeJsonBinary(data []byte) ([]byte, error) {\n\td := jsonBinaryDecoder{\n\t\tuseDecimal:      e.useDecimal,\n\t\tignoreDecodeErr: e.ignoreJSONDecodeErr,\n\t}\n\n\tif d.isDataShort(data, 1) {\n\t\treturn nil, d.err\n\t}\n\n\tv := d.decodeValue(data[0], data[1:])\n\tif d.err != nil {\n\t\treturn nil, d.err\n\t}\n\n\treturn json.Marshal(v)\n}\n\ntype jsonBinaryDecoder struct {\n\tuseDecimal      bool\n\tignoreDecodeErr bool\n\terr             error\n}\n\nfunc (d *jsonBinaryDecoder) decodeValue(tp byte, data []byte) interface{} {\n\tif d.err != nil {\n\t\treturn nil\n\t}\n\n\tswitch tp {\n\tcase JSONB_SMALL_OBJECT:\n\t\treturn d.decodeObjectOrArray(data, true, true)\n\tcase JSONB_LARGE_OBJECT:\n\t\treturn d.decodeObjectOrArray(data, false, true)\n\tcase JSONB_SMALL_ARRAY:\n\t\treturn d.decodeObjectOrArray(data, true, false)\n\tcase JSONB_LARGE_ARRAY:\n\t\treturn d.decodeObjectOrArray(data, false, false)\n\tcase JSONB_LITERAL:\n\t\treturn d.decodeLiteral(data)\n\tcase JSONB_INT16:\n\t\treturn d.decodeInt16(data)\n\tcase JSONB_UINT16:\n\t\treturn d.decodeUint16(data)\n\tcase JSONB_INT32:\n\t\treturn d.decodeInt32(data)\n\tcase JSONB_UINT32:\n\t\treturn d.decodeUint32(data)\n\tcase JSONB_INT64:\n\t\treturn d.decodeInt64(data)\n\tcase JSONB_UINT64:\n\t\treturn d.decodeUint64(data)\n\tcase JSONB_DOUBLE:\n\t\treturn d.decodeDouble(data)\n\tcase JSONB_STRING:\n\t\treturn d.decodeString(data)\n\tcase JSONB_OPAQUE:\n\t\treturn d.decodeOpaque(data)\n\tdefault:\n\t\td.err = errors.Errorf(\"invalid json type %d\", tp)\n\t}\n\n\treturn nil\n}\n\nfunc (d *jsonBinaryDecoder) decodeObjectOrArray(data []byte, isSmall bool, isObject bool) interface{} {\n\toffsetSize := jsonbGetOffsetSize(isSmall)\n\tif d.isDataShort(data, 2*offsetSize) {\n\t\treturn nil\n\t}\n\n\tcount := d.decodeCount(data, isSmall)\n\tsize := d.decodeCount(data[offsetSize:], isSmall)\n\n\tif d.isDataShort(data, size) {\n\t\t// Before MySQL 5.7.22, json type generated column may have invalid value,\n\t\t// bug ref: https://bugs.mysql.com/bug.php?id=88791\n\t\t// As generated column value is not used in replication, we can just ignore\n\t\t// this error and return a dummy value for this column.\n\t\tif d.ignoreDecodeErr {\n\t\t\td.err = nil\n\t\t}\n\t\treturn nil\n\t}\n\n\tkeyEntrySize := jsonbGetKeyEntrySize(isSmall)\n\tvalueEntrySize := jsonbGetValueEntrySize(isSmall)\n\n\theaderSize := 2*offsetSize + count*valueEntrySize\n\n\tif isObject {\n\t\theaderSize += count * keyEntrySize\n\t}\n\n\tif headerSize > size {\n\t\td.err = errors.Errorf(\"header size %d > size %d\", headerSize, size)\n\t\treturn nil\n\t}\n\n\tvar keys []string\n\tif isObject {\n\t\tkeys = make([]string, count)\n\t\tfor i := 0; i < count; i++ {\n\t\t\t// decode key\n\t\t\tentryOffset := 2*offsetSize + keyEntrySize*i\n\t\t\tkeyOffset := d.decodeCount(data[entryOffset:], isSmall)\n\t\t\tkeyLength := int(d.decodeUint16(data[entryOffset+offsetSize:]))\n\n\t\t\t// Key must start after value entry\n\t\t\tif keyOffset < headerSize {\n\t\t\t\td.err = errors.Errorf(\"invalid key offset %d, must > %d\", keyOffset, headerSize)\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif d.isDataShort(data, keyOffset+keyLength) {\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tkeys[i] = utils.ByteSliceToString(data[keyOffset : keyOffset+keyLength])\n\t\t}\n\t}\n\n\tif d.err != nil {\n\t\treturn nil\n\t}\n\n\tvalues := make([]interface{}, count)\n\tfor i := 0; i < count; i++ {\n\t\t// decode value\n\t\tentryOffset := 2*offsetSize + valueEntrySize*i\n\t\tif isObject {\n\t\t\tentryOffset += keyEntrySize * count\n\t\t}\n\n\t\ttp := data[entryOffset]\n\n\t\tif isInlineValue(tp, isSmall) {\n\t\t\tvalues[i] = d.decodeValue(tp, data[entryOffset+1:entryOffset+valueEntrySize])\n\t\t\tcontinue\n\t\t}\n\n\t\tvalueOffset := d.decodeCount(data[entryOffset+1:], isSmall)\n\n\t\tif d.isDataShort(data, valueOffset) {\n\t\t\treturn nil\n\t\t}\n\n\t\tvalues[i] = d.decodeValue(tp, data[valueOffset:])\n\t}\n\n\tif d.err != nil {\n\t\treturn nil\n\t}\n\n\tif !isObject {\n\t\treturn values\n\t}\n\n\tm := make(map[string]interface{}, count)\n\tfor i := 0; i < count; i++ {\n\t\tm[keys[i]] = values[i]\n\t}\n\n\treturn m\n}\n\nfunc isInlineValue(tp byte, isSmall bool) bool {\n\tswitch tp {\n\tcase JSONB_INT16, JSONB_UINT16, JSONB_LITERAL:\n\t\treturn true\n\tcase JSONB_INT32, JSONB_UINT32:\n\t\treturn !isSmall\n\t}\n\n\treturn false\n}\n\nfunc (d *jsonBinaryDecoder) decodeLiteral(data []byte) interface{} {\n\tif d.isDataShort(data, 1) {\n\t\treturn nil\n\t}\n\n\ttp := data[0]\n\n\tswitch tp {\n\tcase JSONB_NULL_LITERAL:\n\t\treturn nil\n\tcase JSONB_TRUE_LITERAL:\n\t\treturn true\n\tcase JSONB_FALSE_LITERAL:\n\t\treturn false\n\t}\n\n\td.err = errors.Errorf(\"invalid literal %c\", tp)\n\n\treturn nil\n}\n\nfunc (d *jsonBinaryDecoder) isDataShort(data []byte, expected int) bool {\n\tif d.err != nil {\n\t\treturn true\n\t}\n\n\tif len(data) < expected {\n\t\td.err = errors.Errorf(\"data len %d < expected %d\", len(data), expected)\n\t}\n\n\treturn d.err != nil\n}\n\nfunc (d *jsonBinaryDecoder) decodeInt16(data []byte) int16 {\n\tif d.isDataShort(data, 2) {\n\t\treturn 0\n\t}\n\n\tv := ParseBinaryInt16(data[0:2])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeUint16(data []byte) uint16 {\n\tif d.isDataShort(data, 2) {\n\t\treturn 0\n\t}\n\n\tv := ParseBinaryUint16(data[0:2])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeInt32(data []byte) int32 {\n\tif d.isDataShort(data, 4) {\n\t\treturn 0\n\t}\n\n\tv := ParseBinaryInt32(data[0:4])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeUint32(data []byte) uint32 {\n\tif d.isDataShort(data, 4) {\n\t\treturn 0\n\t}\n\n\tv := ParseBinaryUint32(data[0:4])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeInt64(data []byte) int64 {\n\tif d.isDataShort(data, 8) {\n\t\treturn 0\n\t}\n\n\tv := ParseBinaryInt64(data[0:8])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeUint64(data []byte) uint64 {\n\tif d.isDataShort(data, 8) {\n\t\treturn 0\n\t}\n\n\tv := ParseBinaryUint64(data[0:8])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeDouble(data []byte) float64 {\n\tif d.isDataShort(data, 8) {\n\t\treturn 0\n\t}\n\n\tv := ParseBinaryFloat64(data[0:8])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeString(data []byte) string {\n\tif d.err != nil {\n\t\treturn \"\"\n\t}\n\n\tl, n := d.decodeVariableLength(data)\n\n\tif d.isDataShort(data, l+n) {\n\t\treturn \"\"\n\t}\n\n\tdata = data[n:]\n\n\tv := utils.ByteSliceToString(data[0:l])\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeOpaque(data []byte) interface{} {\n\tif d.isDataShort(data, 1) {\n\t\treturn nil\n\t}\n\n\ttp := data[0]\n\tdata = data[1:]\n\n\tl, n := d.decodeVariableLength(data)\n\n\tif d.isDataShort(data, l+n) {\n\t\treturn nil\n\t}\n\n\tdata = data[n : l+n]\n\n\tswitch tp {\n\tcase MYSQL_TYPE_NEWDECIMAL:\n\t\treturn d.decodeDecimal(data)\n\tcase MYSQL_TYPE_TIME:\n\t\treturn d.decodeTime(data)\n\tcase MYSQL_TYPE_DATE, MYSQL_TYPE_DATETIME, MYSQL_TYPE_TIMESTAMP:\n\t\treturn d.decodeDateTime(data)\n\tdefault:\n\t\treturn utils.ByteSliceToString(data)\n\t}\n}\n\nfunc (d *jsonBinaryDecoder) decodeDecimal(data []byte) interface{} {\n\tprecision := int(data[0])\n\tscale := int(data[1])\n\n\tv, _, err := decodeDecimal(data[2:], precision, scale, d.useDecimal)\n\td.err = err\n\n\treturn v\n}\n\nfunc (d *jsonBinaryDecoder) decodeTime(data []byte) interface{} {\n\tv := d.decodeInt64(data)\n\n\tif v == 0 {\n\t\treturn \"00:00:00\"\n\t}\n\n\tsign := \"\"\n\tif v < 0 {\n\t\tsign = \"-\"\n\t\tv = -v\n\t}\n\n\tintPart := v >> 24\n\thour := (intPart >> 12) % (1 << 10)\n\tmin := (intPart >> 6) % (1 << 6)\n\tsec := intPart % (1 << 6)\n\tfrac := v % (1 << 24)\n\n\treturn fmt.Sprintf(\"%s%02d:%02d:%02d.%06d\", sign, hour, min, sec, frac)\n}\n\nfunc (d *jsonBinaryDecoder) decodeDateTime(data []byte) interface{} {\n\tv := d.decodeInt64(data)\n\tif v == 0 {\n\t\treturn \"0000-00-00 00:00:00\"\n\t}\n\n\t// handle negative?\n\tif v < 0 {\n\t\tv = -v\n\t}\n\n\tintPart := v >> 24\n\tymd := intPart >> 17\n\tym := ymd >> 5\n\thms := intPart % (1 << 17)\n\n\tyear := ym / 13\n\tmonth := ym % 13\n\tday := ymd % (1 << 5)\n\thour := hms >> 12\n\tminute := (hms >> 6) % (1 << 6)\n\tsecond := hms % (1 << 6)\n\tfrac := v % (1 << 24)\n\n\treturn fmt.Sprintf(\"%04d-%02d-%02d %02d:%02d:%02d.%06d\", year, month, day, hour, minute, second, frac)\n}\n\nfunc (d *jsonBinaryDecoder) decodeCount(data []byte, isSmall bool) int {\n\tif isSmall {\n\t\tv := d.decodeUint16(data)\n\t\treturn int(v)\n\t}\n\n\treturn int(d.decodeUint32(data))\n}\n\nfunc (d *jsonBinaryDecoder) decodeVariableLength(data []byte) (int, int) {\n\t// The max size for variable length is math.MaxUint32, so\n\t// here we can use 5 bytes to save it.\n\tmaxCount := 5\n\tif len(data) < maxCount {\n\t\tmaxCount = len(data)\n\t}\n\n\tpos := 0\n\tlength := uint64(0)\n\tfor ; pos < maxCount; pos++ {\n\t\tv := data[pos]\n\t\tlength |= uint64(v&0x7F) << uint(7*pos)\n\n\t\tif v&0x80 == 0 {\n\t\t\tif length > math.MaxUint32 {\n\t\t\t\td.err = errors.Errorf(\"variable length %d must <= %d\", length, int64(math.MaxUint32))\n\t\t\t\treturn 0, 0\n\t\t\t}\n\n\t\t\tpos += 1\n\t\t\t// TODO: should consider length overflow int here.\n\t\t\treturn int(length), pos\n\t\t}\n\t}\n\n\td.err = errors.New(\"decode variable length failed\")\n\n\treturn 0, 0\n}\n\nfunc (e *RowsEvent) decodeJsonPartialBinary(data []byte) (*JsonDiff, error) {\n\t// see Json_diff_vector::read_binary() in mysql-server/sql/json_diff.cc\n\toperationNumber := JsonDiffOperation(data[0])\n\tswitch operationNumber {\n\tcase JsonDiffOperationReplace:\n\tcase JsonDiffOperationInsert:\n\tcase JsonDiffOperationRemove:\n\tdefault:\n\t\treturn nil, ErrCorruptedJSONDiff\n\t}\n\tdata = data[1:]\n\n\tpathLength, _, n := LengthEncodedInt(data)\n\tdata = data[n:]\n\n\tpath := data[:pathLength]\n\tdata = data[pathLength:]\n\n\tdiff := &JsonDiff{\n\t\tOp:   operationNumber,\n\t\tPath: string(path),\n\t\t// Value will be filled below\n\t}\n\n\tif operationNumber == JsonDiffOperationRemove {\n\t\treturn diff, nil\n\t}\n\n\tvalueLength, _, n := LengthEncodedInt(data)\n\tdata = data[n:]\n\n\td, err := e.decodeJsonBinary(data[:valueLength])\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot read json diff for field %q: %w\", path, err)\n\t}\n\tdiff.Value = string(d)\n\n\treturn diff, nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/parser.go",
    "content": "package replication\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\t\"io\"\n\t\"os\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/pingcap/errors\"\n\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\nvar (\n\t// ErrChecksumMismatch indicates binlog checksum mismatch.\n\tErrChecksumMismatch = errors.New(\"binlog checksum mismatch, data may be corrupted\")\n)\n\ntype BinlogParser struct {\n\t// \"mysql\" or \"mariadb\", if not set, use \"mysql\" by default\n\tflavor string\n\n\tformat *FormatDescriptionEvent\n\n\ttables map[uint64]*TableMapEvent\n\n\t// for rawMode, we only parse FormatDescriptionEvent and RotateEvent\n\trawMode bool\n\n\tparseTime               bool\n\ttimestampStringLocation *time.Location\n\n\t// used to start/stop processing\n\tstopProcessing uint32\n\n\tuseDecimal          bool\n\tignoreJSONDecodeErr bool\n\tverifyChecksum      bool\n\n\trowsEventDecodeFunc func(*RowsEvent, []byte) error\n\n\ttableMapOptionalMetaDecodeFunc func([]byte) error\n}\n\nfunc NewBinlogParser() *BinlogParser {\n\tp := new(BinlogParser)\n\n\tp.tables = make(map[uint64]*TableMapEvent)\n\n\treturn p\n}\n\nfunc (p *BinlogParser) Stop() {\n\tatomic.StoreUint32(&p.stopProcessing, 1)\n}\n\nfunc (p *BinlogParser) Resume() {\n\tatomic.StoreUint32(&p.stopProcessing, 0)\n}\n\nfunc (p *BinlogParser) Reset() {\n\tp.format = nil\n}\n\ntype OnEventFunc func(*BinlogEvent) error\n\nfunc (p *BinlogParser) ParseFile(name string, offset int64, onEvent OnEventFunc) error {\n\tf, err := os.Open(name)\n\tif err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\tdefer f.Close()\n\n\tb := make([]byte, 4)\n\tif _, err = f.Read(b); err != nil {\n\t\treturn errors.Trace(err)\n\t} else if !bytes.Equal(b, BinLogFileHeader) {\n\t\treturn errors.Errorf(\"%s is not a valid binlog file, head 4 bytes must fe'bin' \", name)\n\t}\n\n\tif offset < 4 {\n\t\toffset = 4\n\t} else if offset > 4 {\n\t\t//  FORMAT_DESCRIPTION event should be read by default always (despite that fact passed offset may be higher than 4)\n\t\tif _, err = f.Seek(4, io.SeekStart); err != nil {\n\t\t\treturn errors.Errorf(\"seek %s to %d error %v\", name, offset, err)\n\t\t}\n\n\t\tif err = p.parseFormatDescriptionEvent(f, onEvent); err != nil {\n\t\t\treturn errors.Annotatef(err, \"parse FormatDescriptionEvent\")\n\t\t}\n\t}\n\n\tif _, err = f.Seek(offset, io.SeekStart); err != nil {\n\t\treturn errors.Errorf(\"seek %s to %d error %v\", name, offset, err)\n\t}\n\n\treturn p.ParseReader(f, onEvent)\n}\n\nfunc (p *BinlogParser) parseFormatDescriptionEvent(r io.Reader, onEvent OnEventFunc) error {\n\t_, err := p.parseSingleEvent(r, onEvent)\n\treturn err\n}\n\n// ParseSingleEvent parses single binlog event and passes the event to onEvent function.\nfunc (p *BinlogParser) ParseSingleEvent(r io.Reader, onEvent OnEventFunc) (bool, error) {\n\treturn p.parseSingleEvent(r, onEvent)\n}\n\nfunc (p *BinlogParser) parseSingleEvent(r io.Reader, onEvent OnEventFunc) (bool, error) {\n\tvar err error\n\tvar n int64\n\n\t// Here we use `sync.Pool` to avoid allocate/destroy buffers frequently.\n\tbuf := utils.BytesBufferGet()\n\tdefer utils.BytesBufferPut(buf)\n\n\tif n, err = io.CopyN(buf, r, EventHeaderSize); err == io.EOF {\n\t\treturn true, nil\n\t} else if err != nil {\n\t\treturn false, errors.Errorf(\"get event header err %v, need %d but got %d\", err, EventHeaderSize, n)\n\t}\n\n\tvar h *EventHeader\n\th, err = p.parseHeader(buf.Bytes())\n\tif err != nil {\n\t\treturn false, errors.Trace(err)\n\t}\n\n\tif h.EventSize < uint32(EventHeaderSize) {\n\t\treturn false, errors.Errorf(\"invalid event header, event size is %d, too small\", h.EventSize)\n\t}\n\tif n, err = io.CopyN(buf, r, int64(h.EventSize-EventHeaderSize)); err != nil {\n\t\treturn false, errors.Errorf(\"get event err %v, need %d but got %d\", err, h.EventSize, n)\n\t}\n\tif buf.Len() != int(h.EventSize) {\n\t\treturn false, errors.Errorf(\"invalid raw data size in event %s, need %d but got %d\", h.EventType, h.EventSize, buf.Len())\n\t}\n\n\tvar rawData []byte\n\trawData = append(rawData, buf.Bytes()...)\n\tbodyLen := int(h.EventSize) - EventHeaderSize\n\tbody := rawData[EventHeaderSize:]\n\tif len(body) != bodyLen {\n\t\treturn false, errors.Errorf(\"invalid body data size in event %s, need %d but got %d\", h.EventType, bodyLen, len(body))\n\t}\n\n\tvar e Event\n\te, err = p.parseEvent(h, body, rawData)\n\tif err != nil {\n\t\tif err == errMissingTableMapEvent {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, errors.Trace(err)\n\t}\n\n\tif err = onEvent(&BinlogEvent{RawData: rawData, Header: h, Event: e}); err != nil {\n\t\treturn false, errors.Trace(err)\n\t}\n\n\treturn false, nil\n}\n\nfunc (p *BinlogParser) ParseReader(r io.Reader, onEvent OnEventFunc) error {\n\tfor {\n\t\tif atomic.LoadUint32(&p.stopProcessing) == 1 {\n\t\t\tbreak\n\t\t}\n\n\t\tdone, err := p.parseSingleEvent(r, onEvent)\n\t\tif err != nil {\n\t\t\tif err == errMissingTableMapEvent {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn errors.Trace(err)\n\t\t}\n\n\t\tif done {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (p *BinlogParser) SetRawMode(mode bool) {\n\tp.rawMode = mode\n}\n\nfunc (p *BinlogParser) SetParseTime(parseTime bool) {\n\tp.parseTime = parseTime\n}\n\nfunc (p *BinlogParser) SetTimestampStringLocation(timestampStringLocation *time.Location) {\n\tp.timestampStringLocation = timestampStringLocation\n}\n\nfunc (p *BinlogParser) SetUseDecimal(useDecimal bool) {\n\tp.useDecimal = useDecimal\n}\n\nfunc (p *BinlogParser) SetIgnoreJSONDecodeError(ignoreJSONDecodeErr bool) {\n\tp.ignoreJSONDecodeErr = ignoreJSONDecodeErr\n}\n\nfunc (p *BinlogParser) SetVerifyChecksum(verify bool) {\n\tp.verifyChecksum = verify\n}\n\nfunc (p *BinlogParser) SetFlavor(flavor string) {\n\tp.flavor = flavor\n}\n\nfunc (p *BinlogParser) SetRowsEventDecodeFunc(rowsEventDecodeFunc func(*RowsEvent, []byte) error) {\n\tp.rowsEventDecodeFunc = rowsEventDecodeFunc\n}\n\nfunc (p *BinlogParser) SetTableMapOptionalMetaDecodeFunc(tableMapOptionalMetaDecondeFunc func([]byte) error) {\n\tp.tableMapOptionalMetaDecodeFunc = tableMapOptionalMetaDecondeFunc\n}\n\nfunc (p *BinlogParser) parseHeader(data []byte) (*EventHeader, error) {\n\th := new(EventHeader)\n\terr := h.Decode(data)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn h, nil\n}\n\nfunc (p *BinlogParser) parseEvent(h *EventHeader, data []byte, rawData []byte) (Event, error) {\n\tvar e Event\n\n\tif h.EventType == FORMAT_DESCRIPTION_EVENT {\n\t\tp.format = &FormatDescriptionEvent{}\n\t\te = p.format\n\t} else {\n\t\tif p.format != nil && p.format.ChecksumAlgorithm == BINLOG_CHECKSUM_ALG_CRC32 {\n\t\t\terr := p.verifyCrc32Checksum(rawData)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tdata = data[0 : len(data)-BinlogChecksumLength]\n\t\t}\n\n\t\tif h.EventType == ROTATE_EVENT {\n\t\t\te = &RotateEvent{}\n\t\t} else if !p.rawMode {\n\t\t\tswitch h.EventType {\n\t\t\tcase QUERY_EVENT:\n\t\t\t\te = &QueryEvent{}\n\t\t\tcase MARIADB_QUERY_COMPRESSED_EVENT:\n\t\t\t\te = &QueryEvent{\n\t\t\t\t\tcompressed: true,\n\t\t\t\t}\n\t\t\tcase XID_EVENT:\n\t\t\t\te = &XIDEvent{}\n\t\t\tcase TABLE_MAP_EVENT:\n\t\t\t\tte := &TableMapEvent{\n\t\t\t\t\tflavor:                 p.flavor,\n\t\t\t\t\toptionalMetaDecodeFunc: p.tableMapOptionalMetaDecodeFunc,\n\t\t\t\t}\n\t\t\t\tif p.format.EventTypeHeaderLengths[TABLE_MAP_EVENT-1] == 6 {\n\t\t\t\t\tte.tableIDSize = 4\n\t\t\t\t} else {\n\t\t\t\t\tte.tableIDSize = 6\n\t\t\t\t}\n\t\t\t\te = te\n\t\t\tcase WRITE_ROWS_EVENTv0,\n\t\t\t\tUPDATE_ROWS_EVENTv0,\n\t\t\t\tDELETE_ROWS_EVENTv0,\n\t\t\t\tWRITE_ROWS_EVENTv1,\n\t\t\t\tDELETE_ROWS_EVENTv1,\n\t\t\t\tUPDATE_ROWS_EVENTv1,\n\t\t\t\tWRITE_ROWS_EVENTv2,\n\t\t\t\tUPDATE_ROWS_EVENTv2,\n\t\t\t\tDELETE_ROWS_EVENTv2,\n\t\t\t\tMARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1,\n\t\t\t\tMARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1,\n\t\t\t\tMARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1,\n\t\t\t\tPARTIAL_UPDATE_ROWS_EVENT: // Extension of UPDATE_ROWS_EVENT, allowing partial values according to binlog_row_value_options\n\n\t\t\t\te = p.newRowsEvent(h)\n\t\t\tcase ROWS_QUERY_EVENT:\n\t\t\t\te = &RowsQueryEvent{}\n\t\t\tcase GTID_EVENT:\n\t\t\t\te = &GTIDEvent{}\n\t\t\tcase ANONYMOUS_GTID_EVENT:\n\t\t\t\te = &GTIDEvent{}\n\t\t\tcase BEGIN_LOAD_QUERY_EVENT:\n\t\t\t\te = &BeginLoadQueryEvent{}\n\t\t\tcase EXECUTE_LOAD_QUERY_EVENT:\n\t\t\t\te = &ExecuteLoadQueryEvent{}\n\t\t\tcase MARIADB_ANNOTATE_ROWS_EVENT:\n\t\t\t\te = &MariadbAnnotateRowsEvent{}\n\t\t\tcase MARIADB_BINLOG_CHECKPOINT_EVENT:\n\t\t\t\te = &MariadbBinlogCheckPointEvent{}\n\t\t\tcase MARIADB_GTID_LIST_EVENT:\n\t\t\t\te = &MariadbGTIDListEvent{}\n\t\t\tcase MARIADB_GTID_EVENT:\n\t\t\t\tee := &MariadbGTIDEvent{}\n\t\t\t\tee.GTID.ServerID = h.ServerID\n\t\t\t\te = ee\n\t\t\tcase PREVIOUS_GTIDS_EVENT:\n\t\t\t\te = &PreviousGTIDsEvent{}\n\t\t\tcase INTVAR_EVENT:\n\t\t\t\te = &IntVarEvent{}\n\t\t\tcase TRANSACTION_PAYLOAD_EVENT:\n\t\t\t\te = p.newTransactionPayloadEvent()\n\t\t\tdefault:\n\t\t\t\te = &GenericEvent{}\n\t\t\t}\n\t\t} else {\n\t\t\te = &GenericEvent{}\n\t\t}\n\t}\n\n\tvar err error\n\tif re, ok := e.(*RowsEvent); ok && p.rowsEventDecodeFunc != nil {\n\t\terr = p.rowsEventDecodeFunc(re, data)\n\t} else {\n\t\terr = e.Decode(data)\n\t}\n\tif err != nil {\n\t\treturn nil, &EventError{h, err.Error(), data}\n\t}\n\n\tif te, ok := e.(*TableMapEvent); ok {\n\t\tp.tables[te.TableID] = te\n\t}\n\n\tif re, ok := e.(*RowsEvent); ok {\n\t\tif (re.Flags & RowsEventStmtEndFlag) > 0 {\n\t\t\t// Refer https://github.com/alibaba/canal/blob/38cc81b7dab29b51371096fb6763ca3a8432ffee/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogEvent.java#L176\n\t\t\tp.tables = make(map[uint64]*TableMapEvent)\n\t\t}\n\t}\n\n\treturn e, nil\n}\n\n// Parse: Given the bytes for a a binary log event: return the decoded event.\n// With the exception of the FORMAT_DESCRIPTION_EVENT event type\n// there must have previously been passed a FORMAT_DESCRIPTION_EVENT\n// into the parser for this to work properly on any given event.\n// Passing a new FORMAT_DESCRIPTION_EVENT into the parser will replace\n// an existing one.\nfunc (p *BinlogParser) Parse(data []byte) (*BinlogEvent, error) {\n\trawData := data\n\n\th, err := p.parseHeader(data)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdata = data[EventHeaderSize:]\n\teventLen := int(h.EventSize) - EventHeaderSize\n\n\tif len(data) != eventLen {\n\t\treturn nil, fmt.Errorf(\"invalid data size %d in event %s, less event length %d\", len(data), h.EventType, eventLen)\n\t}\n\n\te, err := p.parseEvent(h, data, rawData)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &BinlogEvent{RawData: rawData, Header: h, Event: e}, nil\n}\n\nfunc (p *BinlogParser) verifyCrc32Checksum(rawData []byte) error {\n\tif !p.verifyChecksum {\n\t\treturn nil\n\t}\n\n\tcalculatedPart := rawData[0 : len(rawData)-BinlogChecksumLength]\n\texpectedChecksum := rawData[len(rawData)-BinlogChecksumLength:]\n\n\t// mysql use zlib's CRC32 implementation, which uses polynomial 0xedb88320UL.\n\t// reference: https://github.com/madler/zlib/blob/master/crc32.c\n\t// https://github.com/madler/zlib/blob/master/doc/rfc1952.txt#L419\n\tchecksum := crc32.ChecksumIEEE(calculatedPart)\n\tcomputed := make([]byte, BinlogChecksumLength)\n\tbinary.LittleEndian.PutUint32(computed, checksum)\n\tif !bytes.Equal(expectedChecksum, computed) {\n\t\treturn ErrChecksumMismatch\n\t}\n\treturn nil\n}\n\nfunc (p *BinlogParser) newRowsEvent(h *EventHeader) *RowsEvent {\n\te := &RowsEvent{}\n\n\tpostHeaderLen := p.format.EventTypeHeaderLengths[h.EventType-1]\n\tif postHeaderLen == 6 {\n\t\te.tableIDSize = 4\n\t} else {\n\t\te.tableIDSize = 6\n\t}\n\n\te.needBitmap2 = false\n\te.tables = p.tables\n\te.eventType = h.EventType\n\te.parseTime = p.parseTime\n\te.timestampStringLocation = p.timestampStringLocation\n\te.useDecimal = p.useDecimal\n\te.ignoreJSONDecodeErr = p.ignoreJSONDecodeErr\n\n\tswitch h.EventType {\n\tcase WRITE_ROWS_EVENTv0:\n\t\te.Version = 0\n\tcase UPDATE_ROWS_EVENTv0:\n\t\te.Version = 0\n\tcase DELETE_ROWS_EVENTv0:\n\t\te.Version = 0\n\tcase WRITE_ROWS_EVENTv1:\n\t\te.Version = 1\n\tcase DELETE_ROWS_EVENTv1:\n\t\te.Version = 1\n\tcase UPDATE_ROWS_EVENTv1:\n\t\te.Version = 1\n\t\te.needBitmap2 = true\n\tcase MARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1:\n\t\te.Version = 1\n\t\te.compressed = true\n\tcase MARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1:\n\t\te.Version = 1\n\t\te.compressed = true\n\tcase MARIADB_UPDATE_ROWS_COMPRESSED_EVENT_V1:\n\t\te.Version = 1\n\t\te.compressed = true\n\t\te.needBitmap2 = true\n\tcase WRITE_ROWS_EVENTv2:\n\t\te.Version = 2\n\tcase UPDATE_ROWS_EVENTv2:\n\t\te.Version = 2\n\t\te.needBitmap2 = true\n\tcase DELETE_ROWS_EVENTv2:\n\t\te.Version = 2\n\tcase PARTIAL_UPDATE_ROWS_EVENT:\n\t\te.Version = 2\n\t\te.needBitmap2 = true\n\t}\n\n\treturn e\n}\n\nfunc (p *BinlogParser) newTransactionPayloadEvent() *TransactionPayloadEvent {\n\te := &TransactionPayloadEvent{}\n\te.format = *p.format\n\n\treturn e\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/row_event.go",
    "content": "package replication\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/pingcap/errors\"\n\t\"github.com/shopspring/decimal\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n\t\"github.com/go-mysql-org/go-mysql/utils\"\n)\n\nvar errMissingTableMapEvent = errors.New(\"invalid table id, no corresponding table map event\")\n\ntype TableMapEvent struct {\n\tflavor      string\n\ttableIDSize int\n\n\tTableID uint64\n\n\tFlags uint16\n\n\tSchema []byte\n\tTable  []byte\n\n\tColumnCount uint64\n\tColumnType  []byte\n\tColumnMeta  []uint16\n\n\t// len = (ColumnCount + 7) / 8\n\tNullBitmap []byte\n\n\t/*\n\t\tThe following are available only after MySQL-8.0.1 or MariaDB-10.5.0\n\t\tBy default MySQL and MariaDB do not log the full row metadata.\n\t\tsee:\n\t\t\t- https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_row_metadata\n\t\t\t- https://mariadb.com/kb/en/replication-and-binary-log-system-variables/#binlog_row_metadata\n\t*/\n\n\t// SignednessBitmap stores signedness info for numeric columns.\n\tSignednessBitmap []byte\n\n\t// DefaultCharset/ColumnCharset stores collation info for character columns.\n\n\t// DefaultCharset[0] is the default collation of character columns.\n\t// For character columns that have different charset,\n\t// (character column index, column collation) pairs follows\n\tDefaultCharset []uint64\n\t// ColumnCharset contains collation sequence for all character columns\n\tColumnCharset []uint64\n\n\t// SetStrValue stores values for set columns.\n\tSetStrValue       [][][]byte\n\tsetStrValueString [][]string\n\n\t// EnumStrValue stores values for enum columns.\n\tEnumStrValue       [][][]byte\n\tenumStrValueString [][]string\n\n\t// ColumnName list all column names.\n\tColumnName       [][]byte\n\tcolumnNameString []string // the same as ColumnName in string type, just for reuse\n\n\t// GeometryType stores real type for geometry columns.\n\tGeometryType []uint64\n\n\t// PrimaryKey is a sequence of column indexes of primary key.\n\tPrimaryKey []uint64\n\n\t// PrimaryKeyPrefix is the prefix length used for each column of primary key.\n\t// 0 means that the whole column length is used.\n\tPrimaryKeyPrefix []uint64\n\n\t// EnumSetDefaultCharset/EnumSetColumnCharset is similar to DefaultCharset/ColumnCharset but for enum/set columns.\n\tEnumSetDefaultCharset []uint64\n\tEnumSetColumnCharset  []uint64\n\n\t// VisibilityBitmap stores bits that are set if corresponding column is not invisible (MySQL 8.0.23+)\n\tVisibilityBitmap []byte\n\n\toptionalMetaDecodeFunc func(data []byte) (err error)\n}\n\nfunc (e *TableMapEvent) Decode(data []byte) error {\n\tpos := 0\n\te.TableID = FixedLengthInt(data[0:e.tableIDSize])\n\tpos += e.tableIDSize\n\n\te.Flags = binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\tschemaLength := data[pos]\n\tpos++\n\n\te.Schema = data[pos : pos+int(schemaLength)]\n\tpos += int(schemaLength)\n\n\t// skip 0x00\n\tpos++\n\n\ttableLength := data[pos]\n\tpos++\n\n\te.Table = data[pos : pos+int(tableLength)]\n\tpos += int(tableLength)\n\n\t// skip 0x00\n\tpos++\n\n\tvar n int\n\te.ColumnCount, _, n = LengthEncodedInt(data[pos:])\n\tpos += n\n\n\te.ColumnType = data[pos : pos+int(e.ColumnCount)]\n\tpos += int(e.ColumnCount)\n\n\tvar err error\n\tvar metaData []byte\n\tif metaData, _, n, err = LengthEncodedString(data[pos:]); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tif err = e.decodeMeta(metaData); err != nil {\n\t\treturn errors.Trace(err)\n\t}\n\n\tpos += n\n\n\tnullBitmapSize := bitmapByteSize(int(e.ColumnCount))\n\tif len(data[pos:]) < nullBitmapSize {\n\t\treturn io.EOF\n\t}\n\n\te.NullBitmap = data[pos : pos+nullBitmapSize]\n\n\tpos += nullBitmapSize\n\n\tif e.optionalMetaDecodeFunc != nil {\n\t\tif err = e.optionalMetaDecodeFunc(data[pos:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tif err = e.decodeOptionalMeta(data[pos:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc bitmapByteSize(columnCount int) int {\n\treturn (columnCount + 7) / 8\n}\n\n// see mysql sql/log_event.h\n/*\n\t0 byte\n\tMYSQL_TYPE_DECIMAL\n\tMYSQL_TYPE_TINY\n\tMYSQL_TYPE_SHORT\n\tMYSQL_TYPE_LONG\n\tMYSQL_TYPE_NULL\n\tMYSQL_TYPE_TIMESTAMP\n\tMYSQL_TYPE_LONGLONG\n\tMYSQL_TYPE_INT24\n\tMYSQL_TYPE_DATE\n\tMYSQL_TYPE_TIME\n\tMYSQL_TYPE_DATETIME\n\tMYSQL_TYPE_YEAR\n\n\t1 byte\n\tMYSQL_TYPE_FLOAT\n\tMYSQL_TYPE_DOUBLE\n\tMYSQL_TYPE_BLOB\n\tMYSQL_TYPE_GEOMETRY\n\n\t//maybe\n\tMYSQL_TYPE_TIME2\n\tMYSQL_TYPE_DATETIME2\n\tMYSQL_TYPE_TIMESTAMP2\n\n\t2 byte\n\tMYSQL_TYPE_VARCHAR\n\tMYSQL_TYPE_BIT\n\tMYSQL_TYPE_NEWDECIMAL\n\tMYSQL_TYPE_VAR_STRING\n\tMYSQL_TYPE_STRING\n\n\tThis enumeration value is only used internally and cannot exist in a binlog.\n\tMYSQL_TYPE_NEWDATE\n\tMYSQL_TYPE_ENUM\n\tMYSQL_TYPE_SET\n\tMYSQL_TYPE_TINY_BLOB\n\tMYSQL_TYPE_MEDIUM_BLOB\n\tMYSQL_TYPE_LONG_BLOB\n*/\nfunc (e *TableMapEvent) decodeMeta(data []byte) error {\n\tpos := 0\n\te.ColumnMeta = make([]uint16, e.ColumnCount)\n\tfor i, t := range e.ColumnType {\n\t\tswitch t {\n\t\tcase MYSQL_TYPE_STRING:\n\t\t\tvar x = uint16(data[pos]) << 8 // real type\n\t\t\tx += uint16(data[pos+1])       // pack or field length\n\t\t\te.ColumnMeta[i] = x\n\t\t\tpos += 2\n\t\tcase MYSQL_TYPE_NEWDECIMAL:\n\t\t\tvar x = uint16(data[pos]) << 8 // precision\n\t\t\tx += uint16(data[pos+1])       // decimals\n\t\t\te.ColumnMeta[i] = x\n\t\t\tpos += 2\n\t\tcase MYSQL_TYPE_VAR_STRING,\n\t\t\tMYSQL_TYPE_VARCHAR,\n\t\t\tMYSQL_TYPE_BIT:\n\t\t\te.ColumnMeta[i] = binary.LittleEndian.Uint16(data[pos:])\n\t\t\tpos += 2\n\t\tcase MYSQL_TYPE_BLOB,\n\t\t\tMYSQL_TYPE_DOUBLE,\n\t\t\tMYSQL_TYPE_FLOAT,\n\t\t\tMYSQL_TYPE_GEOMETRY,\n\t\t\tMYSQL_TYPE_JSON:\n\t\t\te.ColumnMeta[i] = uint16(data[pos])\n\t\t\tpos++\n\t\tcase MYSQL_TYPE_TIME2,\n\t\t\tMYSQL_TYPE_DATETIME2,\n\t\t\tMYSQL_TYPE_TIMESTAMP2:\n\t\t\te.ColumnMeta[i] = uint16(data[pos])\n\t\t\tpos++\n\t\tcase MYSQL_TYPE_NEWDATE,\n\t\t\tMYSQL_TYPE_ENUM,\n\t\t\tMYSQL_TYPE_SET,\n\t\t\tMYSQL_TYPE_TINY_BLOB,\n\t\t\tMYSQL_TYPE_MEDIUM_BLOB,\n\t\t\tMYSQL_TYPE_LONG_BLOB:\n\t\t\treturn errors.Errorf(\"unsupport type in binlog %d\", t)\n\t\tdefault:\n\t\t\te.ColumnMeta[i] = 0\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *TableMapEvent) decodeOptionalMeta(data []byte) (err error) {\n\tpos := 0\n\tfor pos < len(data) {\n\t\t// optional metadata fields are stored in Type, Length, Value(TLV) format\n\t\t// Type takes 1 byte. Length is a packed integer value. Values takes Length bytes\n\t\tt := data[pos]\n\t\tpos++\n\n\t\tl, _, n := LengthEncodedInt(data[pos:])\n\t\tpos += n\n\n\t\tv := data[pos : pos+int(l)]\n\t\tpos += int(l)\n\n\t\tswitch t {\n\t\tcase TABLE_MAP_OPT_META_SIGNEDNESS:\n\t\t\te.SignednessBitmap = v\n\n\t\tcase TABLE_MAP_OPT_META_DEFAULT_CHARSET:\n\t\t\te.DefaultCharset, err = e.decodeDefaultCharset(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_COLUMN_CHARSET:\n\t\t\te.ColumnCharset, err = e.decodeIntSeq(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_COLUMN_NAME:\n\t\t\tif err = e.decodeColumnNames(v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_SET_STR_VALUE:\n\t\t\te.SetStrValue, err = e.decodeStrValue(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_ENUM_STR_VALUE:\n\t\t\te.EnumStrValue, err = e.decodeStrValue(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_GEOMETRY_TYPE:\n\t\t\te.GeometryType, err = e.decodeIntSeq(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_SIMPLE_PRIMARY_KEY:\n\t\t\tif err = e.decodeSimplePrimaryKey(v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_PRIMARY_KEY_WITH_PREFIX:\n\t\t\tif err = e.decodePrimaryKeyWithPrefix(v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_ENUM_AND_SET_DEFAULT_CHARSET:\n\t\t\te.EnumSetDefaultCharset, err = e.decodeDefaultCharset(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_ENUM_AND_SET_COLUMN_CHARSET:\n\t\t\te.EnumSetColumnCharset, err = e.decodeIntSeq(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\tcase TABLE_MAP_OPT_META_COLUMN_VISIBILITY:\n\t\t\te.VisibilityBitmap = v\n\n\t\tdefault:\n\t\t\t// Ignore for future extension\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *TableMapEvent) decodeIntSeq(v []byte) (ret []uint64, err error) {\n\tp := 0\n\tfor p < len(v) {\n\t\ti, _, n := LengthEncodedInt(v[p:])\n\t\tp += n\n\t\tret = append(ret, i)\n\t}\n\treturn\n}\n\nfunc (e *TableMapEvent) decodeDefaultCharset(v []byte) (ret []uint64, err error) {\n\tret, err = e.decodeIntSeq(v)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len(ret)%2 != 1 {\n\t\treturn nil, errors.Errorf(\"Expect odd item in DefaultCharset but got %d\", len(ret))\n\t}\n\treturn\n}\n\nfunc (e *TableMapEvent) decodeColumnNames(v []byte) error {\n\tp := 0\n\te.ColumnName = make([][]byte, 0, e.ColumnCount)\n\tfor p < len(v) {\n\t\tn := int(v[p])\n\t\tp++\n\t\te.ColumnName = append(e.ColumnName, v[p:p+n])\n\t\tp += n\n\t}\n\n\tif len(e.ColumnName) != int(e.ColumnCount) {\n\t\treturn errors.Errorf(\"Expect %d column names but got %d\", e.ColumnCount, len(e.ColumnName))\n\t}\n\treturn nil\n}\n\nfunc (e *TableMapEvent) decodeStrValue(v []byte) (ret [][][]byte, err error) {\n\tp := 0\n\tfor p < len(v) {\n\t\tnVal, _, n := LengthEncodedInt(v[p:])\n\t\tp += n\n\t\tvals := make([][]byte, 0, int(nVal))\n\t\tfor i := 0; i < int(nVal); i++ {\n\t\t\tval, _, n, err := LengthEncodedString(v[p:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tp += n\n\t\t\tvals = append(vals, val)\n\t\t}\n\t\tret = append(ret, vals)\n\t}\n\treturn\n}\n\nfunc (e *TableMapEvent) decodeSimplePrimaryKey(v []byte) error {\n\tp := 0\n\tfor p < len(v) {\n\t\ti, _, n := LengthEncodedInt(v[p:])\n\t\te.PrimaryKey = append(e.PrimaryKey, i)\n\t\te.PrimaryKeyPrefix = append(e.PrimaryKeyPrefix, 0)\n\t\tp += n\n\t}\n\treturn nil\n}\n\nfunc (e *TableMapEvent) decodePrimaryKeyWithPrefix(v []byte) error {\n\tp := 0\n\tfor p < len(v) {\n\t\ti, _, n := LengthEncodedInt(v[p:])\n\t\te.PrimaryKey = append(e.PrimaryKey, i)\n\t\tp += n\n\t\ti, _, n = LengthEncodedInt(v[p:])\n\t\te.PrimaryKeyPrefix = append(e.PrimaryKeyPrefix, i)\n\t\tp += n\n\t}\n\treturn nil\n}\n\nfunc (e *TableMapEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"TableID: %d\\n\", e.TableID)\n\tfmt.Fprintf(w, \"TableID size: %d\\n\", e.tableIDSize)\n\tfmt.Fprintf(w, \"Flags: %d\\n\", e.Flags)\n\tfmt.Fprintf(w, \"Schema: %s\\n\", e.Schema)\n\tfmt.Fprintf(w, \"Table: %s\\n\", e.Table)\n\tfmt.Fprintf(w, \"Column count: %d\\n\", e.ColumnCount)\n\tfmt.Fprintf(w, \"Column type: \\n%s\", hex.Dump(e.ColumnType))\n\tfmt.Fprintf(w, \"NULL bitmap: \\n%s\", hex.Dump(e.NullBitmap))\n\n\tfmt.Fprintf(w, \"Signedness bitmap: \\n%s\", hex.Dump(e.SignednessBitmap))\n\tfmt.Fprintf(w, \"Default charset: %v\\n\", e.DefaultCharset)\n\tfmt.Fprintf(w, \"Column charset: %v\\n\", e.ColumnCharset)\n\tfmt.Fprintf(w, \"Set str value: %v\\n\", e.SetStrValueString())\n\tfmt.Fprintf(w, \"Enum str value: %v\\n\", e.EnumStrValueString())\n\tfmt.Fprintf(w, \"Column name: %v\\n\", e.ColumnNameString())\n\tfmt.Fprintf(w, \"Geometry type: %v\\n\", e.GeometryType)\n\tfmt.Fprintf(w, \"Primary key: %v\\n\", e.PrimaryKey)\n\tfmt.Fprintf(w, \"Primary key prefix: %v\\n\", e.PrimaryKeyPrefix)\n\tfmt.Fprintf(w, \"Enum/set default charset: %v\\n\", e.EnumSetDefaultCharset)\n\tfmt.Fprintf(w, \"Enum/set column charset: %v\\n\", e.EnumSetColumnCharset)\n\tfmt.Fprintf(w, \"Invisible Column bitmap: \\n%s\", hex.Dump(e.VisibilityBitmap))\n\n\tunsignedMap := e.UnsignedMap()\n\tfmt.Fprintf(w, \"UnsignedMap: %#v\\n\", unsignedMap)\n\n\tcollationMap := e.CollationMap()\n\tfmt.Fprintf(w, \"CollationMap: %#v\\n\", collationMap)\n\n\tenumSetCollationMap := e.EnumSetCollationMap()\n\tfmt.Fprintf(w, \"EnumSetCollationMap: %#v\\n\", enumSetCollationMap)\n\n\tenumStrValueMap := e.EnumStrValueMap()\n\tfmt.Fprintf(w, \"EnumStrValueMap: %#v\\n\", enumStrValueMap)\n\n\tsetStrValueMap := e.SetStrValueMap()\n\tfmt.Fprintf(w, \"SetStrValueMap: %#v\\n\", setStrValueMap)\n\n\tgeometryTypeMap := e.GeometryTypeMap()\n\tfmt.Fprintf(w, \"GeometryTypeMap: %#v\\n\", geometryTypeMap)\n\n\tvisibilityMap := e.VisibilityMap()\n\tfmt.Fprintf(w, \"VisibilityMap: %#v\\n\", visibilityMap)\n\n\tnameMaxLen := 0\n\tfor _, name := range e.ColumnName {\n\t\tif len(name) > nameMaxLen {\n\t\t\tnameMaxLen = len(name)\n\t\t}\n\t}\n\tnameFmt := \"  %s\"\n\tif nameMaxLen > 0 {\n\t\tnameFmt = fmt.Sprintf(\"  %%-%ds\", nameMaxLen)\n\t}\n\n\tprimaryKey := map[int]struct{}{}\n\tfor _, pk := range e.PrimaryKey {\n\t\tprimaryKey[int(pk)] = struct{}{}\n\t}\n\n\tfmt.Fprintf(w, \"Columns: \\n\")\n\tfor i := 0; i < int(e.ColumnCount); i++ {\n\t\tif len(e.ColumnName) == 0 {\n\t\t\tfmt.Fprintf(w, nameFmt, \"<n/a>\")\n\t\t} else {\n\t\t\tfmt.Fprintf(w, nameFmt, e.ColumnName[i])\n\t\t}\n\n\t\tfmt.Fprintf(w, \"  type=%-3d\", e.realType(i))\n\n\t\tif e.IsNumericColumn(i) {\n\t\t\tif len(unsignedMap) == 0 {\n\t\t\t\tfmt.Fprintf(w, \"  unsigned=<n/a>\")\n\t\t\t} else if unsignedMap[i] {\n\t\t\t\tfmt.Fprintf(w, \"  unsigned=yes\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"  unsigned=no \")\n\t\t\t}\n\t\t}\n\t\tif e.IsCharacterColumn(i) {\n\t\t\tif len(collationMap) == 0 {\n\t\t\t\tfmt.Fprintf(w, \"  collation=<n/a>\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"  collation=%d \", collationMap[i])\n\t\t\t}\n\t\t}\n\t\tif e.IsEnumColumn(i) {\n\t\t\tif len(enumSetCollationMap) == 0 {\n\t\t\t\tfmt.Fprintf(w, \"  enum_collation=<n/a>\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"  enum_collation=%d\", enumSetCollationMap[i])\n\t\t\t}\n\n\t\t\tif len(enumStrValueMap) == 0 {\n\t\t\t\tfmt.Fprintf(w, \"  enum=<n/a>\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"  enum=%v\", enumStrValueMap[i])\n\t\t\t}\n\t\t}\n\t\tif e.IsSetColumn(i) {\n\t\t\tif len(enumSetCollationMap) == 0 {\n\t\t\t\tfmt.Fprintf(w, \"  set_collation=<n/a>\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"  set_collation=%d\", enumSetCollationMap[i])\n\t\t\t}\n\n\t\t\tif len(setStrValueMap) == 0 {\n\t\t\t\tfmt.Fprintf(w, \"  set=<n/a>\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"  set=%v\", setStrValueMap[i])\n\t\t\t}\n\t\t}\n\t\tif e.IsGeometryColumn(i) {\n\t\t\tif len(geometryTypeMap) == 0 {\n\t\t\t\tfmt.Fprintf(w, \"  geometry_type=<n/a>\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"  geometry_type=%v\", geometryTypeMap[i])\n\t\t\t}\n\t\t}\n\n\t\tavailable, nullable := e.Nullable(i)\n\t\tif !available {\n\t\t\tfmt.Fprintf(w, \"  null=<n/a>\")\n\t\t} else if nullable {\n\t\t\tfmt.Fprintf(w, \"  null=yes\")\n\t\t} else {\n\t\t\tfmt.Fprintf(w, \"  null=no \")\n\t\t}\n\n\t\tif _, ok := primaryKey[i]; ok {\n\t\t\tfmt.Fprintf(w, \"  pri\")\n\t\t}\n\n\t\tfmt.Fprintf(w, \"\\n\")\n\t}\n\n\tfmt.Fprintln(w)\n}\n\n// Nullable returns the nullablity of the i-th column.\n// If null bits are not available, available is false.\n// i must be in range [0, ColumnCount).\nfunc (e *TableMapEvent) Nullable(i int) (available, nullable bool) {\n\tif len(e.NullBitmap) == 0 {\n\t\treturn\n\t}\n\treturn true, e.NullBitmap[i/8]&(1<<uint(i%8)) != 0\n}\n\n// SetStrValueString returns values for set columns as string slices.\n// nil is returned if not available or no set columns at all.\nfunc (e *TableMapEvent) SetStrValueString() [][]string {\n\tif e.setStrValueString == nil {\n\t\tif len(e.SetStrValue) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\te.setStrValueString = make([][]string, len(e.SetStrValue))\n\t\tfor i, vals := range e.SetStrValue {\n\t\t\te.setStrValueString[i] = e.bytesSlice2StrSlice(vals)\n\t\t}\n\t}\n\treturn e.setStrValueString\n}\n\n// EnumStrValueString returns values for enum columns as string slices.\n// nil is returned if not available or no enum columns at all.\nfunc (e *TableMapEvent) EnumStrValueString() [][]string {\n\tif e.enumStrValueString == nil {\n\t\tif len(e.EnumStrValue) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\te.enumStrValueString = make([][]string, len(e.EnumStrValue))\n\t\tfor i, vals := range e.EnumStrValue {\n\t\t\te.enumStrValueString[i] = e.bytesSlice2StrSlice(vals)\n\t\t}\n\t}\n\treturn e.enumStrValueString\n}\n\n// ColumnNameString returns column names as string slice.\n// nil is returned if not available.\nfunc (e *TableMapEvent) ColumnNameString() []string {\n\tif e.columnNameString == nil {\n\t\te.columnNameString = e.bytesSlice2StrSlice(e.ColumnName)\n\t}\n\treturn e.columnNameString\n}\n\nfunc (e *TableMapEvent) bytesSlice2StrSlice(src [][]byte) []string {\n\tif src == nil {\n\t\treturn nil\n\t}\n\tret := make([]string, len(src))\n\tfor i, item := range src {\n\t\tret[i] = string(item)\n\t}\n\treturn ret\n}\n\n// UnsignedMap returns a map: column index -> unsigned.\n// Note that only numeric columns will be returned.\n// nil is returned if not available or no numeric columns at all.\nfunc (e *TableMapEvent) UnsignedMap() map[int]bool {\n\tif len(e.SignednessBitmap) == 0 {\n\t\treturn nil\n\t}\n\tret := make(map[int]bool)\n\ti := 0\n\tfor _, field := range e.SignednessBitmap {\n\t\tfor c := 0x80; c != 0; {\n\t\t\tif e.IsNumericColumn(i) {\n\t\t\t\tret[i] = field&byte(c) != 0\n\t\t\t\tc >>= 1\n\t\t\t}\n\t\t\ti++\n\t\t\tif i >= int(e.ColumnCount) {\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\t}\n\treturn ret\n}\n\n// CollationMap returns a map: column index -> collation id.\n// Note that only character columns will be returned.\n// nil is returned if not available or no character columns at all.\nfunc (e *TableMapEvent) CollationMap() map[int]uint64 {\n\treturn e.collationMap(e.IsCharacterColumn, e.DefaultCharset, e.ColumnCharset)\n}\n\n// EnumSetCollationMap returns a map: column index -> collation id.\n// Note that only enum or set columns will be returned.\n// nil is returned if not available or no enum/set columns at all.\nfunc (e *TableMapEvent) EnumSetCollationMap() map[int]uint64 {\n\treturn e.collationMap(e.IsEnumOrSetColumn, e.EnumSetDefaultCharset, e.EnumSetColumnCharset)\n}\n\nfunc (e *TableMapEvent) collationMap(includeType func(int) bool, defaultCharset, columnCharset []uint64) map[int]uint64 {\n\tif len(defaultCharset) != 0 {\n\t\tdefaultCollation := defaultCharset[0]\n\n\t\t// character column index -> collation\n\t\tcollations := make(map[int]uint64)\n\t\tfor i := 1; i < len(defaultCharset); i += 2 {\n\t\t\tcollations[int(defaultCharset[i])] = defaultCharset[i+1]\n\t\t}\n\n\t\tp := 0\n\t\tret := make(map[int]uint64)\n\t\tfor i := 0; i < int(e.ColumnCount); i++ {\n\t\t\tif !includeType(i) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif collation, ok := collations[p]; ok {\n\t\t\t\tret[i] = collation\n\t\t\t} else {\n\t\t\t\tret[i] = defaultCollation\n\t\t\t}\n\t\t\tp++\n\t\t}\n\n\t\treturn ret\n\t}\n\n\tif len(columnCharset) != 0 {\n\t\tp := 0\n\t\tret := make(map[int]uint64)\n\t\tfor i := 0; i < int(e.ColumnCount); i++ {\n\t\t\tif !includeType(i) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tret[i] = columnCharset[p]\n\t\t\tp++\n\t\t}\n\n\t\treturn ret\n\t}\n\n\treturn nil\n}\n\n// EnumStrValueMap returns a map: column index -> enum string value.\n// Note that only enum columns will be returned.\n// nil is returned if not available or no enum columns at all.\nfunc (e *TableMapEvent) EnumStrValueMap() map[int][]string {\n\treturn e.strValueMap(e.IsEnumColumn, e.EnumStrValueString())\n}\n\n// SetStrValueMap returns a map: column index -> set string value.\n// Note that only set columns will be returned.\n// nil is returned if not available or no set columns at all.\nfunc (e *TableMapEvent) SetStrValueMap() map[int][]string {\n\treturn e.strValueMap(e.IsSetColumn, e.SetStrValueString())\n}\n\nfunc (e *TableMapEvent) strValueMap(includeType func(int) bool, strValue [][]string) map[int][]string {\n\tif len(strValue) == 0 {\n\t\treturn nil\n\t}\n\tp := 0\n\tret := make(map[int][]string)\n\tfor i := 0; i < int(e.ColumnCount); i++ {\n\t\tif !includeType(i) {\n\t\t\tcontinue\n\t\t}\n\t\tret[i] = strValue[p]\n\t\tp++\n\t}\n\treturn ret\n}\n\n// GeometryTypeMap returns a map: column index -> geometry type.\n// Note that only geometry columns will be returned.\n// nil is returned if not available or no geometry columns at all.\nfunc (e *TableMapEvent) GeometryTypeMap() map[int]uint64 {\n\tif len(e.GeometryType) == 0 {\n\t\treturn nil\n\t}\n\tp := 0\n\tret := make(map[int]uint64)\n\tfor i := 0; i < int(e.ColumnCount); i++ {\n\t\tif !e.IsGeometryColumn(i) {\n\t\t\tcontinue\n\t\t}\n\n\t\tret[i] = e.GeometryType[p]\n\t\tp++\n\t}\n\treturn ret\n}\n\n// VisibilityMap returns a map: column index -> visiblity.\n// Invisible column was introduced in MySQL 8.0.23\n// nil is returned if not available.\nfunc (e *TableMapEvent) VisibilityMap() map[int]bool {\n\tif len(e.VisibilityBitmap) == 0 {\n\t\treturn nil\n\t}\n\tret := make(map[int]bool)\n\ti := 0\n\tfor _, field := range e.VisibilityBitmap {\n\t\tfor c := 0x80; c != 0; c >>= 1 {\n\t\t\tret[i] = field&byte(c) != 0\n\t\t\ti++\n\t\t\tif uint64(i) >= e.ColumnCount {\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\t}\n\treturn ret\n}\n\n// Below realType and IsXXXColumn are base from:\n//   table_def::type in sql/rpl_utility.h\n//   Table_map_log_event::print_columns in mysql-8.0/sql/log_event.cc and mariadb-10.5/sql/log_event_client.cc\n\nfunc (e *TableMapEvent) realType(i int) byte {\n\ttyp := e.ColumnType[i]\n\n\tswitch typ {\n\tcase MYSQL_TYPE_STRING:\n\t\trtyp := byte(e.ColumnMeta[i] >> 8)\n\t\tif rtyp == MYSQL_TYPE_ENUM || rtyp == MYSQL_TYPE_SET {\n\t\t\treturn rtyp\n\t\t}\n\n\tcase MYSQL_TYPE_DATE:\n\t\treturn MYSQL_TYPE_NEWDATE\n\t}\n\n\treturn typ\n}\n\nfunc (e *TableMapEvent) IsNumericColumn(i int) bool {\n\tswitch e.realType(i) {\n\tcase MYSQL_TYPE_TINY,\n\t\tMYSQL_TYPE_SHORT,\n\t\tMYSQL_TYPE_INT24,\n\t\tMYSQL_TYPE_LONG,\n\t\tMYSQL_TYPE_LONGLONG,\n\t\tMYSQL_TYPE_NEWDECIMAL,\n\t\tMYSQL_TYPE_FLOAT,\n\t\tMYSQL_TYPE_DOUBLE:\n\t\treturn true\n\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// IsCharacterColumn returns true if the column type is considered as character type.\n// Note that JSON/GEOMETRY types are treated as character type in mariadb.\n// (JSON is an alias for LONGTEXT in mariadb: https://mariadb.com/kb/en/json-data-type/)\nfunc (e *TableMapEvent) IsCharacterColumn(i int) bool {\n\tswitch e.realType(i) {\n\tcase MYSQL_TYPE_STRING,\n\t\tMYSQL_TYPE_VAR_STRING,\n\t\tMYSQL_TYPE_VARCHAR,\n\t\tMYSQL_TYPE_BLOB:\n\t\treturn true\n\n\tcase MYSQL_TYPE_GEOMETRY:\n\t\tif e.flavor == \"mariadb\" {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (e *TableMapEvent) IsEnumColumn(i int) bool {\n\treturn e.realType(i) == MYSQL_TYPE_ENUM\n}\n\nfunc (e *TableMapEvent) IsSetColumn(i int) bool {\n\treturn e.realType(i) == MYSQL_TYPE_SET\n}\n\nfunc (e *TableMapEvent) IsGeometryColumn(i int) bool {\n\treturn e.realType(i) == MYSQL_TYPE_GEOMETRY\n}\n\nfunc (e *TableMapEvent) IsEnumOrSetColumn(i int) bool {\n\trtyp := e.realType(i)\n\treturn rtyp == MYSQL_TYPE_ENUM || rtyp == MYSQL_TYPE_SET\n}\n\n// JsonColumnCount returns the number of JSON columns in this table\nfunc (e *TableMapEvent) JsonColumnCount() uint64 {\n\tcount := uint64(0)\n\tfor _, t := range e.ColumnType {\n\t\tif t == MYSQL_TYPE_JSON {\n\t\t\tcount++\n\t\t}\n\t}\n\n\treturn count\n}\n\n// RowsEventStmtEndFlag is set in the end of the statement.\nconst RowsEventStmtEndFlag = 0x01\n\n// RowsEvent represents a MySQL rows event like DELETE_ROWS_EVENT,\n// UPDATE_ROWS_EVENT, etc.\n// RowsEvent.Rows saves the rows data, and the MySQL type to golang type mapping\n// is\n// - MYSQL_TYPE_NULL: nil\n// - MYSQL_TYPE_LONG: int32\n// - MYSQL_TYPE_TINY: int8\n// - MYSQL_TYPE_SHORT: int16\n// - MYSQL_TYPE_INT24: int32\n// - MYSQL_TYPE_LONGLONG: int64\n// - MYSQL_TYPE_NEWDECIMAL: string / \"github.com/shopspring/decimal\".Decimal\n// - MYSQL_TYPE_FLOAT: float32\n// - MYSQL_TYPE_DOUBLE: float64\n// - MYSQL_TYPE_BIT: int64\n// - MYSQL_TYPE_TIMESTAMP: string / time.Time\n// - MYSQL_TYPE_TIMESTAMP2: string / time.Time\n// - MYSQL_TYPE_DATETIME: string / time.Time\n// - MYSQL_TYPE_DATETIME2: string / time.Time\n// - MYSQL_TYPE_TIME: string\n// - MYSQL_TYPE_TIME2: string\n// - MYSQL_TYPE_DATE: string\n// - MYSQL_TYPE_YEAR: int\n// - MYSQL_TYPE_ENUM: int64\n// - MYSQL_TYPE_SET: int64\n// - MYSQL_TYPE_BLOB: []byte\n// - MYSQL_TYPE_VARCHAR: string\n// - MYSQL_TYPE_VAR_STRING: string\n// - MYSQL_TYPE_STRING: string\n// - MYSQL_TYPE_JSON: []byte / *replication.JsonDiff\n// - MYSQL_TYPE_GEOMETRY: []byte\ntype RowsEvent struct {\n\t// 0, 1, 2\n\tVersion int\n\n\ttableIDSize int\n\ttables      map[uint64]*TableMapEvent\n\tneedBitmap2 bool\n\n\t// for mariadb *_COMPRESSED_EVENT_V1\n\tcompressed bool\n\n\teventType EventType\n\n\tTable *TableMapEvent\n\n\tTableID uint64\n\n\tFlags uint16\n\n\t// if version == 2\n\t// Use when DataLen value is greater than 2\n\tNdbFormat byte\n\tNdbData   []byte\n\n\tPartitionId       uint16\n\tSourcePartitionId uint16\n\n\t// lenenc_int\n\tColumnCount uint64\n\n\t/*\n\t\tBy default MySQL and MariaDB log the full row image.\n\t\tsee\n\t\t\t- https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_row_image\n\t\t\t- https://mariadb.com/kb/en/replication-and-binary-log-system-variables/#binlog_row_image\n\n\t\tColumnBitmap1, ColumnBitmap2 and SkippedColumns are not set on the full row image.\n\t*/\n\n\t// len = (ColumnCount + 7) / 8\n\tColumnBitmap1 []byte\n\n\t// if UPDATE_ROWS_EVENTv1 or v2, or PARTIAL_UPDATE_ROWS_EVENT\n\t// len = (ColumnCount + 7) / 8\n\tColumnBitmap2 []byte\n\n\t// rows: all return types from RowsEvent.decodeValue()\n\tRows           [][]interface{}\n\tSkippedColumns [][]int\n\n\tparseTime               bool\n\ttimestampStringLocation *time.Location\n\tuseDecimal              bool\n\tignoreJSONDecodeErr     bool\n}\n\n// EnumRowImageType is allowed types for every row in mysql binlog.\n// See https://github.com/mysql/mysql-server/blob/1bfe02bdad6604d54913c62614bde57a055c8332/sql/rpl_record.h#L39\n// enum class enum_row_image_type { WRITE_AI, UPDATE_BI, UPDATE_AI, DELETE_BI };\ntype EnumRowImageType byte\n\nconst (\n\tEnumRowImageTypeWriteAI = EnumRowImageType(iota)\n\tEnumRowImageTypeUpdateBI\n\tEnumRowImageTypeUpdateAI\n\tEnumRowImageTypeDeleteBI\n)\n\nfunc (t EnumRowImageType) String() string {\n\tswitch t {\n\tcase EnumRowImageTypeWriteAI:\n\t\treturn \"WriteAI\"\n\tcase EnumRowImageTypeUpdateBI:\n\t\treturn \"UpdateBI\"\n\tcase EnumRowImageTypeUpdateAI:\n\t\treturn \"UpdateAI\"\n\tcase EnumRowImageTypeDeleteBI:\n\t\treturn \"DeleteBI\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"(%d)\", t)\n\t}\n}\n\n// Bits for binlog_row_value_options sysvar\ntype EnumBinlogRowValueOptions byte\n\nconst (\n\t// Store JSON updates in partial form\n\tEnumBinlogRowValueOptionsPartialJsonUpdates = EnumBinlogRowValueOptions(iota + 1)\n)\n\nfunc (e *RowsEvent) DecodeHeader(data []byte) (int, error) {\n\tpos := 0\n\te.TableID = FixedLengthInt(data[0:e.tableIDSize])\n\tpos += e.tableIDSize\n\n\te.Flags = binary.LittleEndian.Uint16(data[pos:])\n\tpos += 2\n\n\tif e.Version == 2 {\n\t\tdataLen := binary.LittleEndian.Uint16(data[pos:])\n\t\tpos += 2\n\t\tif dataLen > 2 {\n\t\t\terr := e.decodeExtraData(data[pos:])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t}\n\t\tpos += int(dataLen - 2)\n\t}\n\n\tvar n int\n\te.ColumnCount, _, n = LengthEncodedInt(data[pos:])\n\tpos += n\n\n\tbitCount := bitmapByteSize(int(e.ColumnCount))\n\te.ColumnBitmap1 = data[pos : pos+bitCount]\n\tpos += bitCount\n\n\tif e.needBitmap2 {\n\t\te.ColumnBitmap2 = data[pos : pos+bitCount]\n\t\tpos += bitCount\n\t}\n\n\tvar ok bool\n\te.Table, ok = e.tables[e.TableID]\n\tif !ok {\n\t\tif len(e.tables) > 0 {\n\t\t\treturn 0, errors.Errorf(\"invalid table id %d, no corresponding table map event\", e.TableID)\n\t\t} else {\n\t\t\treturn 0, errors.Annotatef(errMissingTableMapEvent, \"table id %d\", e.TableID)\n\t\t}\n\t}\n\treturn pos, nil\n}\n\nfunc (e *RowsEvent) decodeExtraData(data []byte) (err2 error) {\n\tpos := 0\n\textraDataType := data[pos]\n\tpos += 1\n\tswitch extraDataType {\n\tcase ENUM_EXTRA_ROW_INFO_TYPECODE_NDB:\n\t\tvar ndbLength int = int(data[pos])\n\t\tpos += 1\n\t\te.NdbFormat = data[pos]\n\t\tpos += 1\n\t\te.NdbData = data[pos : pos+ndbLength-2]\n\tcase ENUM_EXTRA_ROW_INFO_TYPECODE_PARTITION:\n\t\tif e.eventType == UPDATE_ROWS_EVENTv1 || e.eventType == UPDATE_ROWS_EVENTv2 || e.eventType == PARTIAL_UPDATE_ROWS_EVENT {\n\t\t\te.PartitionId = binary.LittleEndian.Uint16(data[pos:])\n\t\t\tpos += 2\n\t\t\te.SourcePartitionId = binary.LittleEndian.Uint16(data[pos:])\n\t\t} else {\n\t\t\te.PartitionId = binary.LittleEndian.Uint16(data[pos:])\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (e *RowsEvent) DecodeData(pos int, data []byte) (err2 error) {\n\tif e.compressed {\n\t\tdata, err2 = DecompressMariadbData(data[pos:])\n\t\tif err2 != nil {\n\t\t\t//nolint:nakedret\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Rows_log_event::print_verbose()\n\n\tvar (\n\t\tn   int\n\t\terr error\n\t)\n\t// ... repeat rows until event-end\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\terr2 = errors.Errorf(\"parse rows event panic %v, data %q, parsed rows %#v, table map %#v\", r, data, e, e.Table)\n\t\t}\n\t}()\n\n\t// Pre-allocate memory for rows: before image + (optional) after image\n\trowsLen := 1\n\tif e.needBitmap2 {\n\t\trowsLen++\n\t}\n\te.SkippedColumns = make([][]int, 0, rowsLen)\n\te.Rows = make([][]interface{}, 0, rowsLen)\n\n\tvar rowImageType EnumRowImageType\n\tswitch e.eventType {\n\tcase WRITE_ROWS_EVENTv0, WRITE_ROWS_EVENTv1, WRITE_ROWS_EVENTv2, MARIADB_WRITE_ROWS_COMPRESSED_EVENT_V1:\n\t\trowImageType = EnumRowImageTypeWriteAI\n\tcase DELETE_ROWS_EVENTv0, DELETE_ROWS_EVENTv1, DELETE_ROWS_EVENTv2, MARIADB_DELETE_ROWS_COMPRESSED_EVENT_V1:\n\t\trowImageType = EnumRowImageTypeDeleteBI\n\tdefault:\n\t\trowImageType = EnumRowImageTypeUpdateBI\n\t}\n\n\tfor pos < len(data) {\n\t\t// Parse the first image\n\t\tif n, err = e.decodeImage(data[pos:], e.ColumnBitmap1, rowImageType); err != nil {\n\t\t\treturn errors.Trace(err)\n\t\t}\n\t\tpos += n\n\n\t\t// Parse the second image (for UPDATE only)\n\t\tif e.needBitmap2 {\n\t\t\tif n, err = e.decodeImage(data[pos:], e.ColumnBitmap2, EnumRowImageTypeUpdateAI); err != nil {\n\t\t\t\treturn errors.Trace(err)\n\t\t\t}\n\t\t\tpos += n\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *RowsEvent) Decode(data []byte) error {\n\tpos, err := e.DecodeHeader(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn e.DecodeData(pos, data)\n}\n\nfunc isBitSet(bitmap []byte, i int) bool {\n\treturn bitmap[i>>3]&(1<<(uint(i)&7)) > 0\n}\n\nfunc isBitSetIncr(bitmap []byte, i *int) bool {\n\tv := isBitSet(bitmap, *i)\n\t*i++\n\treturn v\n}\n\nfunc (e *RowsEvent) decodeImage(data []byte, bitmap []byte, rowImageType EnumRowImageType) (int, error) {\n\t// Rows_log_event::print_verbose_one_row()\n\n\tpos := 0\n\n\tvar isPartialJsonUpdate bool\n\n\tvar partialBitmap []byte\n\tif e.eventType == PARTIAL_UPDATE_ROWS_EVENT && rowImageType == EnumRowImageTypeUpdateAI {\n\t\tbinlogRowValueOptions, _, n := LengthEncodedInt(data[pos:]) // binlog_row_value_options\n\t\tpos += n\n\t\tisPartialJsonUpdate = EnumBinlogRowValueOptions(binlogRowValueOptions)&EnumBinlogRowValueOptionsPartialJsonUpdates != 0\n\t\tif isPartialJsonUpdate {\n\t\t\tbyteCount := bitmapByteSize(int(e.Table.JsonColumnCount()))\n\t\t\tpartialBitmap = data[pos : pos+byteCount]\n\t\t\tpos += byteCount\n\t\t}\n\t}\n\n\trow := make([]interface{}, e.ColumnCount)\n\tskips := make([]int, 0)\n\n\t// refer: https://github.com/alibaba/canal/blob/c3e38e50e269adafdd38a48c63a1740cde304c67/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java#L63\n\tcount := 0\n\tfor i := 0; i < int(e.ColumnCount); i++ {\n\t\tif isBitSet(bitmap, i) {\n\t\t\tcount++\n\t\t}\n\t}\n\tcount = bitmapByteSize(count)\n\n\tnullBitmap := data[pos : pos+count]\n\tpos += count\n\n\tpartialBitmapIndex := 0\n\tnullBitmapIndex := 0\n\n\tfor i := 0; i < int(e.ColumnCount); i++ {\n\t\t/*\n\t\t   Note: need to read partial bit before reading cols_bitmap, since\n\t\t   the partial_bits bitmap has a bit for every JSON column\n\t\t   regardless of whether it is included in the bitmap or not.\n\t\t*/\n\t\tisPartial := isPartialJsonUpdate &&\n\t\t\t(rowImageType == EnumRowImageTypeUpdateAI) &&\n\t\t\t(e.Table.ColumnType[i] == MYSQL_TYPE_JSON) &&\n\t\t\tisBitSetIncr(partialBitmap, &partialBitmapIndex)\n\n\t\tif !isBitSet(bitmap, i) {\n\t\t\tskips = append(skips, i)\n\t\t\tcontinue\n\t\t}\n\n\t\tif isBitSetIncr(nullBitmap, &nullBitmapIndex) {\n\t\t\trow[i] = nil\n\t\t\tcontinue\n\t\t}\n\n\t\tvar n int\n\t\tvar err error\n\t\trow[i], n, err = e.decodeValue(data[pos:], e.Table.ColumnType[i], e.Table.ColumnMeta[i], isPartial)\n\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tpos += n\n\t}\n\n\te.Rows = append(e.Rows, row)\n\te.SkippedColumns = append(e.SkippedColumns, skips)\n\treturn pos, nil\n}\n\nfunc (e *RowsEvent) parseFracTime(t interface{}) interface{} {\n\tv, ok := t.(fracTime)\n\tif !ok {\n\t\treturn t\n\t}\n\n\tif !e.parseTime {\n\t\t// Don't parse time, return string directly\n\t\treturn v.String()\n\t}\n\n\t// return Golang time directly\n\treturn v.Time\n}\n\n// see mysql sql/log_event.cc log_event_print_value\nfunc (e *RowsEvent) decodeValue(data []byte, tp byte, meta uint16, isPartial bool) (v interface{}, n int, err error) {\n\tvar length = 0\n\n\tif tp == MYSQL_TYPE_STRING {\n\t\tif meta >= 256 {\n\t\t\tb0 := uint8(meta >> 8)\n\t\t\tb1 := uint8(meta & 0xFF)\n\n\t\t\tif b0&0x30 != 0x30 {\n\t\t\t\tlength = int(uint16(b1) | (uint16((b0&0x30)^0x30) << 4))\n\t\t\t\ttp = b0 | 0x30\n\t\t\t} else {\n\t\t\t\tlength = int(meta & 0xFF)\n\t\t\t\ttp = b0\n\t\t\t}\n\t\t} else {\n\t\t\tlength = int(meta)\n\t\t}\n\t}\n\n\tswitch tp {\n\tcase MYSQL_TYPE_NULL:\n\t\treturn nil, 0, nil\n\tcase MYSQL_TYPE_LONG:\n\t\tn = 4\n\t\tv = ParseBinaryInt32(data)\n\tcase MYSQL_TYPE_TINY:\n\t\tn = 1\n\t\tv = ParseBinaryInt8(data)\n\tcase MYSQL_TYPE_SHORT:\n\t\tn = 2\n\t\tv = ParseBinaryInt16(data)\n\tcase MYSQL_TYPE_INT24:\n\t\tn = 3\n\t\tv = ParseBinaryInt24(data)\n\tcase MYSQL_TYPE_LONGLONG:\n\t\tn = 8\n\t\tv = ParseBinaryInt64(data)\n\tcase MYSQL_TYPE_NEWDECIMAL:\n\t\tprec := uint8(meta >> 8)\n\t\tscale := uint8(meta & 0xFF)\n\t\tv, n, err = decodeDecimal(data, int(prec), int(scale), e.useDecimal)\n\tcase MYSQL_TYPE_FLOAT:\n\t\tn = 4\n\t\tv = ParseBinaryFloat32(data)\n\tcase MYSQL_TYPE_DOUBLE:\n\t\tn = 8\n\t\tv = ParseBinaryFloat64(data)\n\tcase MYSQL_TYPE_BIT:\n\t\tnbits := ((meta >> 8) * 8) + (meta & 0xFF)\n\t\tn = int(nbits+7) / 8\n\n\t\t// use int64 for bit\n\t\tv, err = decodeBit(data, int(nbits), n)\n\tcase MYSQL_TYPE_TIMESTAMP:\n\t\tn = 4\n\t\tt := binary.LittleEndian.Uint32(data)\n\t\tif t == 0 {\n\t\t\tv = formatZeroTime(0, 0)\n\t\t} else {\n\t\t\tv = e.parseFracTime(fracTime{\n\t\t\t\tTime:                    time.Unix(int64(t), 0),\n\t\t\t\tDec:                     0,\n\t\t\t\ttimestampStringLocation: e.timestampStringLocation,\n\t\t\t})\n\t\t}\n\tcase MYSQL_TYPE_TIMESTAMP2:\n\t\tv, n, err = decodeTimestamp2(data, meta, e.timestampStringLocation)\n\t\tv = e.parseFracTime(v)\n\tcase MYSQL_TYPE_DATETIME:\n\t\tn = 8\n\t\ti64 := binary.LittleEndian.Uint64(data)\n\t\tif i64 == 0 {\n\t\t\tv = formatZeroTime(0, 0)\n\t\t} else {\n\t\t\td := i64 / 1000000\n\t\t\tt := i64 % 1000000\n\t\t\tv = e.parseFracTime(fracTime{\n\t\t\t\tTime: time.Date(\n\t\t\t\t\tint(d/10000),\n\t\t\t\t\ttime.Month((d%10000)/100),\n\t\t\t\t\tint(d%100),\n\t\t\t\t\tint(t/10000),\n\t\t\t\t\tint((t%10000)/100),\n\t\t\t\t\tint(t%100),\n\t\t\t\t\t0,\n\t\t\t\t\ttime.UTC,\n\t\t\t\t),\n\t\t\t\tDec: 0,\n\t\t\t})\n\t\t}\n\tcase MYSQL_TYPE_DATETIME2:\n\t\tv, n, err = decodeDatetime2(data, meta)\n\t\tv = e.parseFracTime(v)\n\tcase MYSQL_TYPE_TIME:\n\t\tn = 3\n\t\ti32 := uint32(FixedLengthInt(data[0:3]))\n\t\tif i32 == 0 {\n\t\t\tv = \"00:00:00\"\n\t\t} else {\n\t\t\tv = fmt.Sprintf(\"%02d:%02d:%02d\", i32/10000, (i32%10000)/100, i32%100)\n\t\t}\n\tcase MYSQL_TYPE_TIME2:\n\t\tv, n, err = decodeTime2(data, meta)\n\tcase MYSQL_TYPE_DATE:\n\t\tn = 3\n\t\ti32 := uint32(FixedLengthInt(data[0:3]))\n\t\tif i32 == 0 {\n\t\t\tv = \"0000-00-00\"\n\t\t} else {\n\t\t\tv = fmt.Sprintf(\"%04d-%02d-%02d\", i32/(16*32), i32/32%16, i32%32)\n\t\t}\n\n\tcase MYSQL_TYPE_YEAR:\n\t\tn = 1\n\t\tyear := int(data[0])\n\t\tif year == 0 {\n\t\t\tv = year\n\t\t} else {\n\t\t\tv = year + 1900\n\t\t}\n\tcase MYSQL_TYPE_ENUM:\n\t\tl := meta & 0xFF\n\t\tswitch l {\n\t\tcase 1:\n\t\t\tv = int64(data[0])\n\t\t\tn = 1\n\t\tcase 2:\n\t\t\tv = int64(binary.LittleEndian.Uint16(data))\n\t\t\tn = 2\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"Unknown ENUM packlen=%d\", l)\n\t\t}\n\tcase MYSQL_TYPE_SET:\n\t\tn = int(meta & 0xFF)\n\t\tnbits := n * 8\n\n\t\tv, err = littleDecodeBit(data, nbits, n)\n\tcase MYSQL_TYPE_BLOB:\n\t\tv, n, err = decodeBlob(data, meta)\n\tcase MYSQL_TYPE_VARCHAR,\n\t\tMYSQL_TYPE_VAR_STRING:\n\t\tlength = int(meta)\n\t\tv, n = decodeString(data, length)\n\tcase MYSQL_TYPE_STRING:\n\t\tv, n = decodeString(data, length)\n\tcase MYSQL_TYPE_JSON:\n\t\t// Refer: https://github.com/shyiko/mysql-binlog-connector-java/blob/master/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/AbstractRowsEventDataDeserializer.java#L404\n\t\tlength = int(FixedLengthInt(data[0:meta]))\n\t\tn = length + int(meta)\n\n\t\t/*\n\t\t   See https://github.com/mysql/mysql-server/blob/7b6fb0753b428537410f5b1b8dc60e5ccabc9f70/sql-common/json_binary.cc#L1077\n\n\t\t   Each document should start with a one-byte type specifier, so an\n\t\t   empty document is invalid according to the format specification.\n\t\t   Empty documents may appear due to inserts using the IGNORE keyword\n\t\t   or with non-strict SQL mode, which will insert an empty string if\n\t\t   the value NULL is inserted into a NOT NULL column. We choose to\n\t\t   interpret empty values as the JSON null literal.\n\n\t\t   In our implementation (go-mysql) for backward compatibility we prefer return empty slice.\n\t\t*/\n\t\tif length == 0 {\n\t\t\tv = []byte{}\n\t\t} else {\n\t\t\tif isPartial {\n\t\t\t\tvar diff *JsonDiff\n\t\t\t\tdiff, err = e.decodeJsonPartialBinary(data[meta:n])\n\t\t\t\tif err == nil {\n\t\t\t\t\tv = diff\n\t\t\t\t} else {\n\t\t\t\t\tfmt.Printf(\"decodeJsonPartialBinary(%q) fail: %s\\n\", data[meta:n], err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar d []byte\n\t\t\t\td, err = e.decodeJsonBinary(data[meta:n])\n\t\t\t\tif err == nil {\n\t\t\t\t\tv = utils.ByteSliceToString(d)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase MYSQL_TYPE_GEOMETRY:\n\t\t// MySQL saves Geometry as Blob in binlog\n\t\t// Seem that the binary format is SRID (4 bytes) + WKB, outer can use\n\t\t// MySQL GeoFromWKB or others to create the geometry data.\n\t\t// Refer https://dev.mysql.com/doc/refman/5.7/en/gis-wkb-functions.html\n\t\t// I also find some go libs to handle WKB if possible\n\t\t// see https://github.com/twpayne/go-geom or https://github.com/paulmach/go.geo\n\t\tv, n, err = decodeBlob(data, meta)\n\tdefault:\n\t\terr = fmt.Errorf(\"unsupport type %d in binlog and don't know how to handle\", tp)\n\t}\n\n\treturn v, n, err\n}\n\nfunc decodeString(data []byte, length int) (v string, n int) {\n\tif length < 256 {\n\t\tlength = int(data[0])\n\n\t\tn = length + 1\n\t\tv = utils.ByteSliceToString(data[1:n])\n\t} else {\n\t\tlength = int(binary.LittleEndian.Uint16(data[0:]))\n\t\tn = length + 2\n\t\tv = utils.ByteSliceToString(data[2:n])\n\t}\n\n\treturn\n}\n\n// ref: https://github.com/mysql/mysql-server/blob/a9b0c712de3509d8d08d3ba385d41a4df6348775/strings/decimal.c#L137\nconst digitsPerInteger int = 9\n\nvar compressedBytes = []int{0, 1, 1, 2, 2, 3, 3, 4, 4, 4}\n\nfunc decodeDecimalDecompressValue(compIndx int, data []byte, mask uint8) (size int, value uint32) {\n\tsize = compressedBytes[compIndx]\n\tswitch size {\n\tcase 0:\n\tcase 1:\n\t\tvalue = uint32(data[0] ^ mask)\n\tcase 2:\n\t\tvalue = uint32(data[1]^mask) | uint32(data[0]^mask)<<8\n\tcase 3:\n\t\tvalue = uint32(data[2]^mask) | uint32(data[1]^mask)<<8 | uint32(data[0]^mask)<<16\n\tcase 4:\n\t\tvalue = uint32(data[3]^mask) | uint32(data[2]^mask)<<8 | uint32(data[1]^mask)<<16 | uint32(data[0]^mask)<<24\n\t}\n\treturn\n}\n\nvar zeros = [digitsPerInteger]byte{48, 48, 48, 48, 48, 48, 48, 48, 48}\n\nfunc decodeDecimal(data []byte, precision int, decimals int, useDecimal bool) (interface{}, int, error) {\n\t// see python mysql replication and https://github.com/jeremycole/mysql_binlog\n\tintegral := precision - decimals\n\tuncompIntegral := integral / digitsPerInteger\n\tuncompFractional := decimals / digitsPerInteger\n\tcompIntegral := integral - (uncompIntegral * digitsPerInteger)\n\tcompFractional := decimals - (uncompFractional * digitsPerInteger)\n\n\tbinSize := uncompIntegral*4 + compressedBytes[compIntegral] +\n\t\tuncompFractional*4 + compressedBytes[compFractional]\n\n\tbuf := make([]byte, binSize)\n\tcopy(buf, data[:binSize])\n\n\t// must copy the data for later change\n\tdata = buf\n\n\t// Support negative\n\t// The sign is encoded in the high bit of the the byte\n\t// But this bit can also be used in the value\n\tvalue := uint32(data[0])\n\tvar res strings.Builder\n\tres.Grow(precision + 2)\n\tvar mask uint32 = 0\n\tif value&0x80 == 0 {\n\t\tmask = uint32((1 << 32) - 1)\n\t\tres.WriteString(\"-\")\n\t}\n\n\t// clear sign\n\tdata[0] ^= 0x80\n\n\tzeroLeading := true\n\n\tpos, value := decodeDecimalDecompressValue(compIntegral, data, uint8(mask))\n\tif value != 0 {\n\t\tzeroLeading = false\n\t\tres.WriteString(strconv.FormatUint(uint64(value), 10))\n\t}\n\n\tfor i := 0; i < uncompIntegral; i++ {\n\t\tvalue = binary.BigEndian.Uint32(data[pos:]) ^ mask\n\t\tpos += 4\n\t\tif zeroLeading {\n\t\t\tif value != 0 {\n\t\t\t\tzeroLeading = false\n\t\t\t\tres.WriteString(strconv.FormatUint(uint64(value), 10))\n\t\t\t}\n\t\t} else {\n\t\t\ttoWrite := strconv.FormatUint(uint64(value), 10)\n\t\t\tres.Write(zeros[:digitsPerInteger-len(toWrite)])\n\t\t\tres.WriteString(toWrite)\n\t\t}\n\t}\n\n\tif zeroLeading {\n\t\tres.WriteString(\"0\")\n\t}\n\n\tif pos < len(data) {\n\t\tres.WriteString(\".\")\n\n\t\tfor i := 0; i < uncompFractional; i++ {\n\t\t\tvalue = binary.BigEndian.Uint32(data[pos:]) ^ mask\n\t\t\tpos += 4\n\t\t\ttoWrite := strconv.FormatUint(uint64(value), 10)\n\t\t\tres.Write(zeros[:digitsPerInteger-len(toWrite)])\n\t\t\tres.WriteString(toWrite)\n\t\t}\n\n\t\tif size, value := decodeDecimalDecompressValue(compFractional, data[pos:], uint8(mask)); size > 0 {\n\t\t\ttoWrite := strconv.FormatUint(uint64(value), 10)\n\t\t\tpadding := compFractional - len(toWrite)\n\t\t\tif padding > 0 {\n\t\t\t\tres.Write(zeros[:padding])\n\t\t\t}\n\t\t\tres.WriteString(toWrite)\n\t\t\tpos += size\n\t\t}\n\t}\n\n\tif useDecimal {\n\t\tf, err := decimal.NewFromString(res.String())\n\t\treturn f, pos, err\n\t}\n\n\treturn res.String(), pos, nil\n}\n\nfunc decodeBit(data []byte, nbits int, length int) (value int64, err error) {\n\tif nbits > 1 {\n\t\tswitch length {\n\t\tcase 1:\n\t\t\tvalue = int64(data[0])\n\t\tcase 2:\n\t\t\tvalue = int64(binary.BigEndian.Uint16(data))\n\t\tcase 3:\n\t\t\tvalue = int64(BFixedLengthInt(data[0:3]))\n\t\tcase 4:\n\t\t\tvalue = int64(binary.BigEndian.Uint32(data))\n\t\tcase 5:\n\t\t\tvalue = int64(BFixedLengthInt(data[0:5]))\n\t\tcase 6:\n\t\t\tvalue = int64(BFixedLengthInt(data[0:6]))\n\t\tcase 7:\n\t\t\tvalue = int64(BFixedLengthInt(data[0:7]))\n\t\tcase 8:\n\t\t\tvalue = int64(binary.BigEndian.Uint64(data))\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"invalid bit length %d\", length)\n\t\t}\n\t} else {\n\t\tif length != 1 {\n\t\t\terr = fmt.Errorf(\"invalid bit length %d\", length)\n\t\t} else {\n\t\t\tvalue = int64(data[0])\n\t\t}\n\t}\n\treturn\n}\n\nfunc littleDecodeBit(data []byte, nbits int, length int) (value int64, err error) {\n\tif nbits > 1 {\n\t\tswitch length {\n\t\tcase 1:\n\t\t\tvalue = int64(data[0])\n\t\tcase 2:\n\t\t\tvalue = int64(binary.LittleEndian.Uint16(data))\n\t\tcase 3:\n\t\t\tvalue = int64(FixedLengthInt(data[0:3]))\n\t\tcase 4:\n\t\t\tvalue = int64(binary.LittleEndian.Uint32(data))\n\t\tcase 5:\n\t\t\tvalue = int64(FixedLengthInt(data[0:5]))\n\t\tcase 6:\n\t\t\tvalue = int64(FixedLengthInt(data[0:6]))\n\t\tcase 7:\n\t\t\tvalue = int64(FixedLengthInt(data[0:7]))\n\t\tcase 8:\n\t\t\tvalue = int64(binary.LittleEndian.Uint64(data))\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"invalid bit length %d\", length)\n\t\t}\n\t} else {\n\t\tif length != 1 {\n\t\t\terr = fmt.Errorf(\"invalid bit length %d\", length)\n\t\t} else {\n\t\t\tvalue = int64(data[0])\n\t\t}\n\t}\n\treturn\n}\n\nfunc decodeTimestamp2(data []byte, dec uint16, timestampStringLocation *time.Location) (interface{}, int, error) {\n\t// get timestamp binary length\n\tn := int(4 + (dec+1)/2)\n\tsec := int64(binary.BigEndian.Uint32(data[0:4]))\n\tusec := int64(0)\n\tswitch dec {\n\tcase 1, 2:\n\t\tusec = int64(data[4]) * 10000\n\tcase 3, 4:\n\t\tusec = int64(binary.BigEndian.Uint16(data[4:])) * 100\n\tcase 5, 6:\n\t\tusec = int64(BFixedLengthInt(data[4:7]))\n\t}\n\n\tif sec == 0 {\n\t\treturn formatZeroTime(int(usec), int(dec)), n, nil\n\t}\n\n\treturn fracTime{\n\t\tTime:                    time.Unix(sec, usec*1000),\n\t\tDec:                     int(dec),\n\t\ttimestampStringLocation: timestampStringLocation,\n\t}, n, nil\n}\n\nconst DATETIMEF_INT_OFS int64 = 0x8000000000\n\nfunc decodeDatetime2(data []byte, dec uint16) (interface{}, int, error) {\n\t// get datetime binary length\n\tn := int(5 + (dec+1)/2)\n\n\tintPart := int64(BFixedLengthInt(data[0:5])) - DATETIMEF_INT_OFS\n\tvar frac int64 = 0\n\n\tswitch dec {\n\tcase 1, 2:\n\t\tfrac = int64(data[5]) * 10000\n\tcase 3, 4:\n\t\tfrac = int64(binary.BigEndian.Uint16(data[5:7])) * 100\n\tcase 5, 6:\n\t\tfrac = int64(BFixedLengthInt(data[5:8]))\n\t}\n\n\tif intPart == 0 {\n\t\treturn formatZeroTime(int(frac), int(dec)), n, nil\n\t}\n\n\ttmp := intPart<<24 + frac\n\t// handle sign???\n\tif tmp < 0 {\n\t\ttmp = -tmp\n\t}\n\n\t// var secPart int64 = tmp % (1 << 24)\n\tymdhms := tmp >> 24\n\n\tymd := ymdhms >> 17\n\tym := ymd >> 5\n\thms := ymdhms % (1 << 17)\n\n\tday := int(ymd % (1 << 5))\n\tmonth := int(ym % 13)\n\tyear := int(ym / 13)\n\n\tsecond := int(hms % (1 << 6))\n\tminute := int((hms >> 6) % (1 << 6))\n\thour := int(hms >> 12)\n\n\t// DATETIME encoding for nonfractional part after MySQL 5.6.4\n\t// https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html\n\t// integer value for 1970-01-01 00:00:00 is\n\t// year*13+month = 25611 = 0b110010000001011\n\t// day = 1 = 0b00001\n\t// hour = 0 = 0b00000\n\t// minute = 0 = 0b000000\n\t// second = 0 = 0b000000\n\t// integer value = 0b1100100000010110000100000000000000000 = 107420450816\n\tif intPart < 107420450816 {\n\t\treturn formatBeforeUnixZeroTime(year, month, day, hour, minute, second, int(frac), int(dec)), n, nil\n\t}\n\n\treturn fracTime{\n\t\tTime: time.Date(year, time.Month(month), day, hour, minute, second, int(frac*1000), time.UTC),\n\t\tDec:  int(dec),\n\t}, n, nil\n}\n\nconst TIMEF_OFS int64 = 0x800000000000\nconst TIMEF_INT_OFS int64 = 0x800000\n\nfunc decodeTime2(data []byte, dec uint16) (string, int, error) {\n\t// time  binary length\n\tn := int(3 + (dec+1)/2)\n\n\ttmp := int64(0)\n\tintPart := int64(0)\n\tfrac := int64(0)\n\tswitch dec {\n\tcase 1, 2:\n\t\tintPart = int64(BFixedLengthInt(data[0:3])) - TIMEF_INT_OFS\n\t\tfrac = int64(data[3])\n\t\tif intPart < 0 && frac != 0 {\n\t\t\t/*\n\t\t\t   Negative values are stored with reverse fractional part order,\n\t\t\t   for binary sort compatibility.\n\n\t\t\t     Disk value  intpart frac   Time value   Memory value\n\t\t\t     800000.00    0      0      00:00:00.00  0000000000.000000\n\t\t\t     7FFFFF.FF   -1      255   -00:00:00.01  FFFFFFFFFF.FFD8F0\n\t\t\t     7FFFFF.9D   -1      99    -00:00:00.99  FFFFFFFFFF.F0E4D0\n\t\t\t     7FFFFF.00   -1      0     -00:00:01.00  FFFFFFFFFF.000000\n\t\t\t     7FFFFE.FF   -1      255   -00:00:01.01  FFFFFFFFFE.FFD8F0\n\t\t\t     7FFFFE.F6   -2      246   -00:00:01.10  FFFFFFFFFE.FE7960\n\n\t\t\t     Formula to convert fractional part from disk format\n\t\t\t     (now stored in \"frac\" variable) to absolute value: \"0x100 - frac\".\n\t\t\t     To reconstruct in-memory value, we shift\n\t\t\t     to the next integer value and then substruct fractional part.\n\t\t\t*/\n\t\t\tintPart++     /* Shift to the next integer value */\n\t\t\tfrac -= 0x100 /* -(0x100 - frac) */\n\t\t}\n\t\ttmp = intPart<<24 + frac*10000\n\tcase 3, 4:\n\t\tintPart = int64(BFixedLengthInt(data[0:3])) - TIMEF_INT_OFS\n\t\tfrac = int64(binary.BigEndian.Uint16(data[3:5]))\n\t\tif intPart < 0 && frac != 0 {\n\t\t\t/*\n\t\t\t   Fix reverse fractional part order: \"0x10000 - frac\".\n\t\t\t   See comments for FSP=1 and FSP=2 above.\n\t\t\t*/\n\t\t\tintPart++       /* Shift to the next integer value */\n\t\t\tfrac -= 0x10000 /* -(0x10000-frac) */\n\t\t}\n\t\ttmp = intPart<<24 + frac*100\n\n\tcase 5, 6:\n\t\ttmp = int64(BFixedLengthInt(data[0:6])) - TIMEF_OFS\n\t\treturn timeFormat(tmp, dec, n)\n\tdefault:\n\t\tintPart = int64(BFixedLengthInt(data[0:3])) - TIMEF_INT_OFS\n\t\ttmp = intPart << 24\n\t}\n\n\tif intPart == 0 && frac == 0 {\n\t\treturn \"00:00:00\", n, nil\n\t}\n\n\treturn timeFormat(tmp, dec, n)\n}\n\nfunc timeFormat(tmp int64, dec uint16, n int) (string, int, error) {\n\thms := int64(0)\n\tsign := \"\"\n\tif tmp < 0 {\n\t\ttmp = -tmp\n\t\tsign = \"-\"\n\t}\n\n\thms = tmp >> 24\n\n\thour := (hms >> 12) % (1 << 10) /* 10 bits starting at 12th */\n\tminute := (hms >> 6) % (1 << 6) /* 6 bits starting at 6th   */\n\tsecond := hms % (1 << 6)        /* 6 bits starting at 0th   */\n\tsecPart := tmp % (1 << 24)\n\n\tif secPart != 0 {\n\t\ts := fmt.Sprintf(\"%s%02d:%02d:%02d.%06d\", sign, hour, minute, second, secPart)\n\t\treturn s[0 : len(s)-(6-int(dec))], n, nil\n\t}\n\n\treturn fmt.Sprintf(\"%s%02d:%02d:%02d\", sign, hour, minute, second), n, nil\n}\n\nfunc decodeBlob(data []byte, meta uint16) (v []byte, n int, err error) {\n\tvar length int\n\tswitch meta {\n\tcase 1:\n\t\tlength = int(data[0])\n\t\tv = data[1 : 1+length]\n\t\tn = length + 1\n\tcase 2:\n\t\tlength = int(binary.LittleEndian.Uint16(data))\n\t\tv = data[2 : 2+length]\n\t\tn = length + 2\n\tcase 3:\n\t\tlength = int(FixedLengthInt(data[0:3]))\n\t\tv = data[3 : 3+length]\n\t\tn = length + 3\n\tcase 4:\n\t\tlength = int(binary.LittleEndian.Uint32(data))\n\t\tv = data[4 : 4+length]\n\t\tn = length + 4\n\tdefault:\n\t\terr = fmt.Errorf(\"invalid blob packlen = %d\", meta)\n\t}\n\n\treturn\n}\n\nfunc (e *RowsEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"TableID: %d\\n\", e.TableID)\n\tfmt.Fprintf(w, \"Flags: %d\\n\", e.Flags)\n\tfmt.Fprintf(w, \"Column count: %d\\n\", e.ColumnCount)\n\tfmt.Fprintf(w, \"NDB data: %s\\n\", e.NdbData)\n\n\tfmt.Fprintf(w, \"Values:\\n\")\n\tfor _, rows := range e.Rows {\n\t\tfmt.Fprintf(w, \"--\\n\")\n\t\tfor j, d := range rows {\n\t\t\tswitch dt := d.(type) {\n\t\t\tcase []byte:\n\t\t\t\tfmt.Fprintf(w, \"%d:%q\\n\", j, dt)\n\t\t\tcase *JsonDiff:\n\t\t\t\tfmt.Fprintf(w, \"%d:%s\\n\", j, dt)\n\t\t\tdefault:\n\t\t\t\tfmt.Fprintf(w, \"%d:%#v\\n\", j, d)\n\t\t\t}\n\t\t}\n\t}\n\tfmt.Fprintln(w)\n}\n\ntype RowsQueryEvent struct {\n\tQuery []byte\n}\n\nfunc (e *RowsQueryEvent) Decode(data []byte) error {\n\t// ignore length byte 1\n\te.Query = data[1:]\n\treturn nil\n}\n\nfunc (e *RowsQueryEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Query: %s\\n\", e.Query)\n\tfmt.Fprintln(w)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/time.go",
    "content": "package replication\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar (\n\tfracTimeFormat []string\n)\n\n// fracTime is a help structure wrapping Golang Time.\ntype fracTime struct {\n\ttime.Time\n\n\t// Dec must in [0, 6]\n\tDec int\n\n\ttimestampStringLocation *time.Location\n}\n\nfunc (t fracTime) String() string {\n\ttt := t.Time\n\tif t.timestampStringLocation != nil {\n\t\ttt = tt.In(t.timestampStringLocation)\n\t}\n\treturn tt.Format(fracTimeFormat[t.Dec])\n}\n\nfunc formatZeroTime(frac int, dec int) string {\n\tif dec == 0 {\n\t\treturn \"0000-00-00 00:00:00\"\n\t}\n\n\ts := fmt.Sprintf(\"0000-00-00 00:00:00.%06d\", frac)\n\n\t// dec must < 6, if frac is 924000, but dec is 3, we must output 924 here.\n\treturn s[0 : len(s)-(6-dec)]\n}\n\nfunc formatBeforeUnixZeroTime(year, month, day, hour, minute, second, frac, dec int) string {\n\tif dec == 0 {\n\t\treturn fmt.Sprintf(\"%04d-%02d-%02d %02d:%02d:%02d\", year, month, day, hour, minute, second)\n\t}\n\n\ts := fmt.Sprintf(\"%04d-%02d-%02d %02d:%02d:%02d.%06d\", year, month, day, hour, minute, second, frac)\n\n\t// dec must < 6, if frac is 924000, but dec is 3, we must output 924 here.\n\treturn s[0 : len(s)-(6-dec)]\n}\n\nfunc microSecTimestampToTime(ts uint64) time.Time {\n\tif ts == 0 {\n\t\treturn time.Time{}\n\t}\n\treturn time.Unix(int64(ts/1000000), int64(ts%1000000)*1000)\n}\n\nfunc init() {\n\tfracTimeFormat = make([]string, 7)\n\tfracTimeFormat[0] = \"2006-01-02 15:04:05\"\n\n\tfor i := 1; i <= 6; i++ {\n\t\tfracTimeFormat[i] = fmt.Sprintf(\"2006-01-02 15:04:05.%s\", strings.Repeat(\"0\", i))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/replication/transaction_payload_event.go",
    "content": "package replication\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/klauspost/compress/zstd\"\n\n\t. \"github.com/go-mysql-org/go-mysql/mysql\"\n)\n\n// On The Wire: Field Types\n// See also binary_log::codecs::binary::Transaction_payload::fields in MySQL\n// https://dev.mysql.com/doc/dev/mysql-server/latest/classbinary__log_1_1codecs_1_1binary_1_1Transaction__payload.html#a9fff7ac12ba064f40e9216565c53d07b\nconst (\n\tOTW_PAYLOAD_HEADER_END_MARK = iota\n\tOTW_PAYLOAD_SIZE_FIELD\n\tOTW_PAYLOAD_COMPRESSION_TYPE_FIELD\n\tOTW_PAYLOAD_UNCOMPRESSED_SIZE_FIELD\n)\n\n// Compression Types\nconst (\n\tZSTD = 0\n\tNONE = 255\n)\n\ntype TransactionPayloadEvent struct {\n\tformat           FormatDescriptionEvent\n\tSize             uint64\n\tUncompressedSize uint64\n\tCompressionType  uint64\n\tPayload          []byte\n\tEvents           []*BinlogEvent\n}\n\nfunc (e *TransactionPayloadEvent) compressionType() string {\n\tswitch e.CompressionType {\n\tcase ZSTD:\n\t\treturn \"ZSTD\"\n\tcase NONE:\n\t\treturn \"NONE\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\nfunc (e *TransactionPayloadEvent) Dump(w io.Writer) {\n\tfmt.Fprintf(w, \"Payload Size: %d\\n\", e.Size)\n\tfmt.Fprintf(w, \"Payload Uncompressed Size: %d\\n\", e.UncompressedSize)\n\tfmt.Fprintf(w, \"Payload CompressionType: %s\\n\", e.compressionType())\n\tfmt.Fprintf(w, \"Payload Body: \\n%s\", hex.Dump(e.Payload))\n\tfmt.Fprintln(w, \"=== Start of events decoded from compressed payload ===\")\n\tfor _, event := range e.Events {\n\t\tevent.Dump(w)\n\t}\n\tfmt.Fprintln(w, \"=== End of events decoded from compressed payload ===\")\n\tfmt.Fprintln(w)\n}\n\nfunc (e *TransactionPayloadEvent) Decode(data []byte) error {\n\terr := e.decodeFields(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn e.decodePayload()\n}\n\nfunc (e *TransactionPayloadEvent) decodeFields(data []byte) error {\n\toffset := uint64(0)\n\n\tfor {\n\t\tfieldType := FixedLengthInt(data[offset : offset+1])\n\t\toffset++\n\n\t\tif fieldType == OTW_PAYLOAD_HEADER_END_MARK {\n\t\t\te.Payload = data[offset:]\n\t\t\tbreak\n\t\t} else {\n\t\t\tfieldLength := FixedLengthInt(data[offset : offset+1])\n\t\t\toffset++\n\n\t\t\tswitch fieldType {\n\t\t\tcase OTW_PAYLOAD_SIZE_FIELD:\n\t\t\t\te.Size = FixedLengthInt(data[offset : offset+fieldLength])\n\t\t\tcase OTW_PAYLOAD_COMPRESSION_TYPE_FIELD:\n\t\t\t\te.CompressionType = FixedLengthInt(data[offset : offset+fieldLength])\n\t\t\tcase OTW_PAYLOAD_UNCOMPRESSED_SIZE_FIELD:\n\t\t\t\te.UncompressedSize = FixedLengthInt(data[offset : offset+fieldLength])\n\t\t\t}\n\n\t\t\toffset += fieldLength\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *TransactionPayloadEvent) decodePayload() error {\n\tif e.CompressionType != ZSTD {\n\t\treturn fmt.Errorf(\"TransactionPayloadEvent has compression type %d (%s)\",\n\t\t\te.CompressionType, e.compressionType())\n\t}\n\n\tvar decoder, err = zstd.NewReader(nil, zstd.WithDecoderConcurrency(0))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer decoder.Close()\n\n\tpayloadUncompressed, err := decoder.DecodeAll(e.Payload, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// The uncompressed data needs to be split up into individual events for Parse()\n\t// to work on them. We can't use e.parser directly as we need to disable checksums\n\t// but we still need the initialization from the FormatDescriptionEvent. We can't\n\t// modify e.parser as it is used elsewhere.\n\tparser := NewBinlogParser()\n\tparser.format = &FormatDescriptionEvent{\n\t\tVersion:                e.format.Version,\n\t\tServerVersion:          e.format.ServerVersion,\n\t\tCreateTimestamp:        e.format.CreateTimestamp,\n\t\tEventHeaderLength:      e.format.EventHeaderLength,\n\t\tEventTypeHeaderLengths: e.format.EventTypeHeaderLengths,\n\t\tChecksumAlgorithm:      BINLOG_CHECKSUM_ALG_OFF,\n\t}\n\n\toffset := uint32(0)\n\tfor {\n\t\tpayloadUncompressedLength := uint32(len(payloadUncompressed))\n\t\tif offset+13 > payloadUncompressedLength {\n\t\t\tbreak\n\t\t}\n\t\teventLength := binary.LittleEndian.Uint32(payloadUncompressed[offset+9 : offset+13])\n\t\tif offset+eventLength > payloadUncompressedLength {\n\t\t\treturn fmt.Errorf(\"Event length of %d with offset %d in uncompressed payload exceeds payload length of %d\",\n\t\t\t\teventLength, offset, payloadUncompressedLength)\n\t\t}\n\t\tdata := payloadUncompressed[offset : offset+eventLength]\n\n\t\tpe, err := parser.Parse(data)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\te.Events = append(e.Events, pe)\n\n\t\toffset += eventLength\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/utils/byte_slice_pool.go",
    "content": "package utils\n\nimport \"sync\"\n\ntype ByteSlice struct {\n\tB []byte\n}\n\nvar (\n\tbyteSlicePool = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn new(ByteSlice)\n\t\t},\n\t}\n)\n\nfunc ByteSliceGet(length int) *ByteSlice {\n\tdata := byteSlicePool.Get().(*ByteSlice)\n\tif cap(data.B) < length {\n\t\tdata.B = make([]byte, length)\n\t} else {\n\t\tdata.B = data.B[:length]\n\t}\n\treturn data\n}\n\nfunc ByteSlicePut(data *ByteSlice) {\n\tdata.B = data.B[:0]\n\tbyteSlicePool.Put(data)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/utils/bytes_buffer_pool.go",
    "content": "package utils\n\nimport (\n\t\"bytes\"\n\t\"sync\"\n)\n\nconst (\n\tTooBigBlockSize = 1024 * 1024 * 4\n)\n\nvar (\n\tbytesBufferPool = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn &bytes.Buffer{}\n\t\t},\n\t}\n)\n\nfunc BytesBufferGet() (data *bytes.Buffer) {\n\tdata = bytesBufferPool.Get().(*bytes.Buffer)\n\tdata.Reset()\n\treturn data\n}\n\nfunc BytesBufferPut(data *bytes.Buffer) {\n\tif data == nil || data.Len() > TooBigBlockSize {\n\t\treturn\n\t}\n\tbytesBufferPool.Put(data)\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/utils/now.go",
    "content": "//go:build !unix\n\npackage utils\n\nimport \"time\"\n\nvar Now = time.Now\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/utils/now_unix.go",
    "content": "//go:build unix\n\npackage utils\n\nimport (\n\t\"syscall\"\n\t\"time\"\n)\n\n// Now is a faster method to get current time\nfunc Now() time.Time {\n\tvar tv syscall.Timeval\n\tif err := syscall.Gettimeofday(&tv); err != nil {\n\t\t// If it failed at syscall, use time package instead\n\t\treturn time.Now()\n\t}\n\n\treturn time.Unix(0, syscall.TimevalToNsec(tv))\n}\n"
  },
  {
    "path": "vendor/github.com/go-mysql-org/go-mysql/utils/zeroalloc.go",
    "content": "package utils\n\nimport (\n\t\"math\"\n\t\"unsafe\"\n)\n\nfunc StringToByteSlice(s string) []byte {\n\treturn unsafe.Slice(unsafe.StringData(s), len(s))\n}\n\nfunc ByteSliceToString(b []byte) string {\n\treturn unsafe.String(unsafe.SliceData(b), len(b))\n}\n\nfunc Uint64ToInt64(val uint64) int64 {\n\treturn int64(val)\n}\n\nfunc Uint64ToFloat64(val uint64) float64 {\n\treturn math.Float64frombits(val)\n}\n\nfunc Int64ToUint64(val int64) uint64 {\n\treturn uint64(val)\n}\n\nfunc Float64ToUint64(val float64) uint64 {\n\treturn math.Float64bits(val)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/.travis.yml",
    "content": "language: go\nsudo: false\n\ngo:\n  - 1.9.x\n  - 1.10.x\n  - 1.11.x\n  - tip\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ChangeLog.md",
    "content": "# Version 1.x.x\n\n* **Add more test cases and reference new test COM server project.** (Placeholder for future additions)\n\n# Version 1.2.0-alphaX\n\n**Minimum supported version is now Go 1.4. Go 1.1 support is deprecated, but should still build.**\n\n * Added CI configuration for Travis-CI and AppVeyor.\n * Added test InterfaceID and ClassID for the COM Test Server project.\n * Added more inline documentation (#83).\n * Added IEnumVARIANT implementation (#88).\n * Added IEnumVARIANT test cases (#99, #100, #101).\n * Added support for retrieving `time.Time` from VARIANT (#92).\n * Added test case for IUnknown (#64).\n * Added test case for IDispatch (#64).\n * Added test cases for scalar variants (#64, #76).\n\n# Version 1.1.1\n\n * Fixes for Linux build.\n * Fixes for Windows build.\n\n# Version 1.1.0\n\nThe change to provide building on all platforms is a new feature. The increase in minor version reflects that and allows those who wish to stay on 1.0.x to continue to do so. Support for 1.0.x will be limited to bug fixes.\n\n * Move GUID out of variables.go into its own file to make new documentation available.\n * Move OleError out of ole.go into its own file to make new documentation available.\n * Add documentation to utility functions.\n * Add documentation to variant receiver functions.\n * Add documentation to ole structures.\n * Make variant available to other systems outside of Windows.\n * Make OLE structures available to other systems outside of Windows.\n\n## New Features\n\n * Library should now be built on all platforms supported by Go. Library will NOOP on any platform that is not Windows.\n * More functions are now documented and available on godoc.org.\n\n# Version 1.0.1\n\n 1. Fix package references from repository location change.\n\n# Version 1.0.0\n\nThis version is stable enough for use. The COM API is still incomplete, but provides enough functionality for accessing COM servers using IDispatch interface.\n\nThere is no changelog for this version. Check commits for history.\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright © 2013-2017 Yasuhiro Matsumoto, <mattn.jp@gmail.com>\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\nof the Software, and to permit persons to whom the Software is furnished to do\nso, 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": "vendor/github.com/go-ole/go-ole/README.md",
    "content": "# Go OLE\n\n[![Build status](https://ci.appveyor.com/api/projects/status/qr0u2sf7q43us9fj?svg=true)](https://ci.appveyor.com/project/jacobsantos/go-ole-jgs28)\n[![Build Status](https://travis-ci.org/go-ole/go-ole.svg?branch=master)](https://travis-ci.org/go-ole/go-ole)\n[![GoDoc](https://godoc.org/github.com/go-ole/go-ole?status.svg)](https://godoc.org/github.com/go-ole/go-ole)\n\nGo bindings for Windows COM using shared libraries instead of cgo.\n\nBy Yasuhiro Matsumoto.\n\n## Install\n\nTo experiment with go-ole, you can just compile and run the example program:\n\n```\ngo get github.com/go-ole/go-ole\ncd /path/to/go-ole/\ngo test\n\ncd /path/to/go-ole/example/excel\ngo run excel.go\n```\n\n## Continuous Integration\n\nContinuous integration configuration has been added for both Travis-CI and AppVeyor. You will have to add these to your own account for your fork in order for it to run.\n\n**Travis-CI**\n\nTravis-CI was added to check builds on Linux to ensure that `go get` works when cross building. Currently, Travis-CI is not used to test cross-building, but this may be changed in the future. It is also not currently possible to test the library on Linux, since COM API is specific to Windows and it is not currently possible to run a COM server on Linux or even connect to a remote COM server.\n\n**AppVeyor**\n\nAppVeyor is used to build on Windows using the (in-development) test COM server. It is currently only used to test the build and ensure that the code works on Windows. It will be used to register a COM server and then run the test cases based on the test COM server.\n\nThe tests currently do run and do pass and this should be maintained with commits.\n\n## Versioning\n\nGo OLE uses [semantic versioning](http://semver.org) for version numbers, which is similar to the version contract of the Go language. Which means that the major version will always maintain backwards compatibility with minor versions. Minor versions will only add new additions and changes. Fixes will always be in patch. \n\nThis contract should allow you to upgrade to new minor and patch versions without breakage or modifications to your existing code. Leave a ticket, if there is breakage, so that it could be fixed.\n\n## LICENSE\n\nUnder the MIT License: http://mattn.mit-license.org/2013\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/appveyor.yml",
    "content": "# Notes:\n#   - Minimal appveyor.yml file is an empty file. All sections are optional.\n#   - Indent each level of configuration with 2 spaces. Do not use tabs!\n#   - All section names are case-sensitive.\n#   - Section names should be unique on each level.\n\nversion: \"1.3.0.{build}-alpha-{branch}\"\n\nos: Windows Server 2012 R2\n\nbranches:\n  only:\n    - master\n    - v1.2\n    - v1.1\n    - v1.0\n\nskip_tags: true\n\nclone_folder: c:\\gopath\\src\\github.com\\go-ole\\go-ole\n\nenvironment:\n  GOPATH: c:\\gopath\n  matrix:\n  - GOARCH: amd64\n    GOVERSION: 1.5\n    GOROOT: c:\\go\n    DOWNLOADPLATFORM: \"x64\"\n\ninstall:\n  - choco install mingw\n  - SET PATH=c:\\tools\\mingw64\\bin;%PATH%\n  # - Download COM Server\n  - ps: Start-FileDownload \"https://github.com/go-ole/test-com-server/releases/download/v1.0.2/test-com-server-${env:DOWNLOADPLATFORM}.zip\"\n  - 7z e test-com-server-%DOWNLOADPLATFORM%.zip -oc:\\gopath\\src\\github.com\\go-ole\\go-ole > NUL\n  - c:\\gopath\\src\\github.com\\go-ole\\go-ole\\build\\register-assembly.bat\n  # - set\n  - go version\n  - go env\n  - go get -u golang.org/x/tools/cmd/cover\n  - go get -u golang.org/x/tools/cmd/godoc\n  - go get -u golang.org/x/tools/cmd/stringer\n\nbuild_script:\n  - cd c:\\gopath\\src\\github.com\\go-ole\\go-ole\n  - go get -v -t ./...\n  - go build\n  - go test -v -cover ./...\n\n# disable automatic tests\ntest: off\n\n# disable deployment\ndeploy: off\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/com.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\nvar (\n\tprocCoInitialize            = modole32.NewProc(\"CoInitialize\")\n\tprocCoInitializeEx          = modole32.NewProc(\"CoInitializeEx\")\n\tprocCoUninitialize          = modole32.NewProc(\"CoUninitialize\")\n\tprocCoCreateInstance        = modole32.NewProc(\"CoCreateInstance\")\n\tprocCoTaskMemFree           = modole32.NewProc(\"CoTaskMemFree\")\n\tprocCLSIDFromProgID         = modole32.NewProc(\"CLSIDFromProgID\")\n\tprocCLSIDFromString         = modole32.NewProc(\"CLSIDFromString\")\n\tprocStringFromCLSID         = modole32.NewProc(\"StringFromCLSID\")\n\tprocStringFromIID           = modole32.NewProc(\"StringFromIID\")\n\tprocIIDFromString           = modole32.NewProc(\"IIDFromString\")\n\tprocCoGetObject             = modole32.NewProc(\"CoGetObject\")\n\tprocGetUserDefaultLCID      = modkernel32.NewProc(\"GetUserDefaultLCID\")\n\tprocCopyMemory              = modkernel32.NewProc(\"RtlMoveMemory\")\n\tprocVariantInit             = modoleaut32.NewProc(\"VariantInit\")\n\tprocVariantClear            = modoleaut32.NewProc(\"VariantClear\")\n\tprocVariantTimeToSystemTime = modoleaut32.NewProc(\"VariantTimeToSystemTime\")\n\tprocSysAllocString          = modoleaut32.NewProc(\"SysAllocString\")\n\tprocSysAllocStringLen       = modoleaut32.NewProc(\"SysAllocStringLen\")\n\tprocSysFreeString           = modoleaut32.NewProc(\"SysFreeString\")\n\tprocSysStringLen            = modoleaut32.NewProc(\"SysStringLen\")\n\tprocCreateDispTypeInfo      = modoleaut32.NewProc(\"CreateDispTypeInfo\")\n\tprocCreateStdDispatch       = modoleaut32.NewProc(\"CreateStdDispatch\")\n\tprocGetActiveObject         = modoleaut32.NewProc(\"GetActiveObject\")\n\n\tprocGetMessageW      = moduser32.NewProc(\"GetMessageW\")\n\tprocDispatchMessageW = moduser32.NewProc(\"DispatchMessageW\")\n)\n\n// coInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc coInitialize() (err error) {\n\t// http://msdn.microsoft.com/en-us/library/windows/desktop/ms678543(v=vs.85).aspx\n\t// Suggests that no value should be passed to CoInitialized.\n\t// Could just be Call() since the parameter is optional. <-- Needs testing to be sure.\n\thr, _, _ := procCoInitialize.Call(uintptr(0))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// coInitializeEx initializes COM library with concurrency model.\nfunc coInitializeEx(coinit uint32) (err error) {\n\t// http://msdn.microsoft.com/en-us/library/windows/desktop/ms695279(v=vs.85).aspx\n\t// Suggests that the first parameter is not only optional but should always be NULL.\n\thr, _, _ := procCoInitializeEx.Call(uintptr(0), uintptr(coinit))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// CoInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc CoInitialize(p uintptr) (err error) {\n\t// p is ignored and won't be used.\n\t// Avoid any variable not used errors.\n\tp = uintptr(0)\n\treturn coInitialize()\n}\n\n// CoInitializeEx initializes COM library with concurrency model.\nfunc CoInitializeEx(p uintptr, coinit uint32) (err error) {\n\t// Avoid any variable not used errors.\n\tp = uintptr(0)\n\treturn coInitializeEx(coinit)\n}\n\n// CoUninitialize uninitializes COM Library.\nfunc CoUninitialize() {\n\tprocCoUninitialize.Call()\n}\n\n// CoTaskMemFree frees memory pointer.\nfunc CoTaskMemFree(memptr uintptr) {\n\tprocCoTaskMemFree.Call(memptr)\n}\n\n// CLSIDFromProgID retrieves Class Identifier with the given Program Identifier.\n//\n// The Programmatic Identifier must be registered, because it will be looked up\n// in the Windows Registry. The registry entry has the following keys: CLSID,\n// Insertable, Protocol and Shell\n// (https://msdn.microsoft.com/en-us/library/dd542719(v=vs.85).aspx).\n//\n// programID identifies the class id with less precision and is not guaranteed\n// to be unique. These are usually found in the registry under\n// HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes, usually with the format of\n// \"Program.Component.Version\" with version being optional.\n//\n// CLSIDFromProgID in Windows API.\nfunc CLSIDFromProgID(progId string) (clsid *GUID, err error) {\n\tvar guid GUID\n\tlpszProgID := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(progId)))\n\thr, _, _ := procCLSIDFromProgID.Call(lpszProgID, uintptr(unsafe.Pointer(&guid)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tclsid = &guid\n\treturn\n}\n\n// CLSIDFromString retrieves Class ID from string representation.\n//\n// This is technically the string version of the GUID and will convert the\n// string to object.\n//\n// CLSIDFromString in Windows API.\nfunc CLSIDFromString(str string) (clsid *GUID, err error) {\n\tvar guid GUID\n\tlpsz := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(str)))\n\thr, _, _ := procCLSIDFromString.Call(lpsz, uintptr(unsafe.Pointer(&guid)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tclsid = &guid\n\treturn\n}\n\n// StringFromCLSID returns GUID formated string from GUID object.\nfunc StringFromCLSID(clsid *GUID) (str string, err error) {\n\tvar p *uint16\n\thr, _, _ := procStringFromCLSID.Call(uintptr(unsafe.Pointer(clsid)), uintptr(unsafe.Pointer(&p)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tstr = LpOleStrToString(p)\n\treturn\n}\n\n// IIDFromString returns GUID from program ID.\nfunc IIDFromString(progId string) (clsid *GUID, err error) {\n\tvar guid GUID\n\tlpsz := uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(progId)))\n\thr, _, _ := procIIDFromString.Call(lpsz, uintptr(unsafe.Pointer(&guid)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tclsid = &guid\n\treturn\n}\n\n// StringFromIID returns GUID formatted string from GUID object.\nfunc StringFromIID(iid *GUID) (str string, err error) {\n\tvar p *uint16\n\thr, _, _ := procStringFromIID.Call(uintptr(unsafe.Pointer(iid)), uintptr(unsafe.Pointer(&p)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\tstr = LpOleStrToString(p)\n\treturn\n}\n\n// CreateInstance of single uninitialized object with GUID.\nfunc CreateInstance(clsid *GUID, iid *GUID) (unk *IUnknown, err error) {\n\tif iid == nil {\n\t\tiid = IID_IUnknown\n\t}\n\thr, _, _ := procCoCreateInstance.Call(\n\t\tuintptr(unsafe.Pointer(clsid)),\n\t\t0,\n\t\tCLSCTX_SERVER,\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&unk)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// GetActiveObject retrieves pointer to active object.\nfunc GetActiveObject(clsid *GUID, iid *GUID) (unk *IUnknown, err error) {\n\tif iid == nil {\n\t\tiid = IID_IUnknown\n\t}\n\thr, _, _ := procGetActiveObject.Call(\n\t\tuintptr(unsafe.Pointer(clsid)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&unk)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\ntype BindOpts struct {\n\tCbStruct          uint32\n\tGrfFlags          uint32\n\tGrfMode           uint32\n\tTickCountDeadline uint32\n}\n\n// GetObject retrieves pointer to active object.\nfunc GetObject(programID string, bindOpts *BindOpts, iid *GUID) (unk *IUnknown, err error) {\n\tif bindOpts != nil {\n\t\tbindOpts.CbStruct = uint32(unsafe.Sizeof(BindOpts{}))\n\t}\n\tif iid == nil {\n\t\tiid = IID_IUnknown\n\t}\n\thr, _, _ := procCoGetObject.Call(\n\t\tuintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(programID))),\n\t\tuintptr(unsafe.Pointer(bindOpts)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&unk)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// VariantInit initializes variant.\nfunc VariantInit(v *VARIANT) (err error) {\n\thr, _, _ := procVariantInit.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// VariantClear clears value in Variant settings to VT_EMPTY.\nfunc VariantClear(v *VARIANT) (err error) {\n\thr, _, _ := procVariantClear.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// SysAllocString allocates memory for string and copies string into memory.\nfunc SysAllocString(v string) (ss *int16) {\n\tpss, _, _ := procSysAllocString.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(v))))\n\tss = (*int16)(unsafe.Pointer(pss))\n\treturn\n}\n\n// SysAllocStringLen copies up to length of given string returning pointer.\nfunc SysAllocStringLen(v string) (ss *int16) {\n\tutf16 := utf16.Encode([]rune(v + \"\\x00\"))\n\tptr := &utf16[0]\n\n\tpss, _, _ := procSysAllocStringLen.Call(uintptr(unsafe.Pointer(ptr)), uintptr(len(utf16)-1))\n\tss = (*int16)(unsafe.Pointer(pss))\n\treturn\n}\n\n// SysFreeString frees string system memory. This must be called with SysAllocString.\nfunc SysFreeString(v *int16) (err error) {\n\thr, _, _ := procSysFreeString.Call(uintptr(unsafe.Pointer(v)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// SysStringLen is the length of the system allocated string.\nfunc SysStringLen(v *int16) uint32 {\n\tl, _, _ := procSysStringLen.Call(uintptr(unsafe.Pointer(v)))\n\treturn uint32(l)\n}\n\n// CreateStdDispatch provides default IDispatch implementation for IUnknown.\n//\n// This handles default IDispatch implementation for objects. It haves a few\n// limitations with only supporting one language. It will also only return\n// default exception codes.\nfunc CreateStdDispatch(unk *IUnknown, v uintptr, ptinfo *IUnknown) (disp *IDispatch, err error) {\n\thr, _, _ := procCreateStdDispatch.Call(\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\tv,\n\t\tuintptr(unsafe.Pointer(ptinfo)),\n\t\tuintptr(unsafe.Pointer(&disp)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// CreateDispTypeInfo provides default ITypeInfo implementation for IDispatch.\n//\n// This will not handle the full implementation of the interface.\nfunc CreateDispTypeInfo(idata *INTERFACEDATA) (pptinfo *IUnknown, err error) {\n\thr, _, _ := procCreateDispTypeInfo.Call(\n\t\tuintptr(unsafe.Pointer(idata)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(unsafe.Pointer(&pptinfo)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// copyMemory moves location of a block of memory.\nfunc copyMemory(dest unsafe.Pointer, src unsafe.Pointer, length uint32) {\n\tprocCopyMemory.Call(uintptr(dest), uintptr(src), uintptr(length))\n}\n\n// GetUserDefaultLCID retrieves current user default locale.\nfunc GetUserDefaultLCID() (lcid uint32) {\n\tret, _, _ := procGetUserDefaultLCID.Call()\n\tlcid = uint32(ret)\n\treturn\n}\n\n// GetMessage in message queue from runtime.\n//\n// This function appears to block. PeekMessage does not block.\nfunc GetMessage(msg *Msg, hwnd uint32, MsgFilterMin uint32, MsgFilterMax uint32) (ret int32, err error) {\n\tr0, _, err := procGetMessageW.Call(uintptr(unsafe.Pointer(msg)), uintptr(hwnd), uintptr(MsgFilterMin), uintptr(MsgFilterMax))\n\tret = int32(r0)\n\treturn\n}\n\n// DispatchMessage to window procedure.\nfunc DispatchMessage(msg *Msg) (ret int32) {\n\tr0, _, _ := procDispatchMessageW.Call(uintptr(unsafe.Pointer(msg)))\n\tret = int32(r0)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/com_func.go",
    "content": "// +build !windows\n\npackage ole\n\nimport (\n\t\"time\"\n\t\"unsafe\"\n)\n\n// coInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc coInitialize() error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// coInitializeEx initializes COM library with concurrency model.\nfunc coInitializeEx(coinit uint32) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// CoInitialize initializes COM library on current thread.\n//\n// MSDN documentation suggests that this function should not be called. Call\n// CoInitializeEx() instead. The reason has to do with threading and this\n// function is only for single-threaded apartments.\n//\n// That said, most users of the library have gotten away with just this\n// function. If you are experiencing threading issues, then use\n// CoInitializeEx().\nfunc CoInitialize(p uintptr) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// CoInitializeEx initializes COM library with concurrency model.\nfunc CoInitializeEx(p uintptr, coinit uint32) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// CoUninitialize uninitializes COM Library.\nfunc CoUninitialize() {}\n\n// CoTaskMemFree frees memory pointer.\nfunc CoTaskMemFree(memptr uintptr) {}\n\n// CLSIDFromProgID retrieves Class Identifier with the given Program Identifier.\n//\n// The Programmatic Identifier must be registered, because it will be looked up\n// in the Windows Registry. The registry entry has the following keys: CLSID,\n// Insertable, Protocol and Shell\n// (https://msdn.microsoft.com/en-us/library/dd542719(v=vs.85).aspx).\n//\n// programID identifies the class id with less precision and is not guaranteed\n// to be unique. These are usually found in the registry under\n// HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes, usually with the format of\n// \"Program.Component.Version\" with version being optional.\n//\n// CLSIDFromProgID in Windows API.\nfunc CLSIDFromProgID(progId string) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// CLSIDFromString retrieves Class ID from string representation.\n//\n// This is technically the string version of the GUID and will convert the\n// string to object.\n//\n// CLSIDFromString in Windows API.\nfunc CLSIDFromString(str string) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// StringFromCLSID returns GUID formated string from GUID object.\nfunc StringFromCLSID(clsid *GUID) (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\n// IIDFromString returns GUID from program ID.\nfunc IIDFromString(progId string) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// StringFromIID returns GUID formatted string from GUID object.\nfunc StringFromIID(iid *GUID) (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\n// CreateInstance of single uninitialized object with GUID.\nfunc CreateInstance(clsid *GUID, iid *GUID) (*IUnknown, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// GetActiveObject retrieves pointer to active object.\nfunc GetActiveObject(clsid *GUID, iid *GUID) (*IUnknown, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// VariantInit initializes variant.\nfunc VariantInit(v *VARIANT) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// VariantClear clears value in Variant settings to VT_EMPTY.\nfunc VariantClear(v *VARIANT) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// SysAllocString allocates memory for string and copies string into memory.\nfunc SysAllocString(v string) *int16 {\n\tu := int16(0)\n\treturn &u\n}\n\n// SysAllocStringLen copies up to length of given string returning pointer.\nfunc SysAllocStringLen(v string) *int16 {\n\tu := int16(0)\n\treturn &u\n}\n\n// SysFreeString frees string system memory. This must be called with SysAllocString.\nfunc SysFreeString(v *int16) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// SysStringLen is the length of the system allocated string.\nfunc SysStringLen(v *int16) uint32 {\n\treturn uint32(0)\n}\n\n// CreateStdDispatch provides default IDispatch implementation for IUnknown.\n//\n// This handles default IDispatch implementation for objects. It haves a few\n// limitations with only supporting one language. It will also only return\n// default exception codes.\nfunc CreateStdDispatch(unk *IUnknown, v uintptr, ptinfo *IUnknown) (*IDispatch, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// CreateDispTypeInfo provides default ITypeInfo implementation for IDispatch.\n//\n// This will not handle the full implementation of the interface.\nfunc CreateDispTypeInfo(idata *INTERFACEDATA) (*IUnknown, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// copyMemory moves location of a block of memory.\nfunc copyMemory(dest unsafe.Pointer, src unsafe.Pointer, length uint32) {}\n\n// GetUserDefaultLCID retrieves current user default locale.\nfunc GetUserDefaultLCID() uint32 {\n\treturn uint32(0)\n}\n\n// GetMessage in message queue from runtime.\n//\n// This function appears to block. PeekMessage does not block.\nfunc GetMessage(msg *Msg, hwnd uint32, MsgFilterMin uint32, MsgFilterMax uint32) (int32, error) {\n\treturn int32(0), NewError(E_NOTIMPL)\n}\n\n// DispatchMessage to window procedure.\nfunc DispatchMessage(msg *Msg) int32 {\n\treturn int32(0)\n}\n\nfunc GetVariantDate(value uint64) (time.Time, error) {\n\treturn time.Now(), NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/connect.go",
    "content": "package ole\n\n// Connection contains IUnknown for fluent interface interaction.\n//\n// Deprecated. Use oleutil package instead.\ntype Connection struct {\n\tObject *IUnknown // Access COM\n}\n\n// Initialize COM.\nfunc (*Connection) Initialize() (err error) {\n\treturn coInitialize()\n}\n\n// Uninitialize COM.\nfunc (*Connection) Uninitialize() {\n\tCoUninitialize()\n}\n\n// Create IUnknown object based first on ProgId and then from String.\nfunc (c *Connection) Create(progId string) (err error) {\n\tvar clsid *GUID\n\tclsid, err = CLSIDFromProgID(progId)\n\tif err != nil {\n\t\tclsid, err = CLSIDFromString(progId)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tunknown, err := CreateInstance(clsid, IID_IUnknown)\n\tif err != nil {\n\t\treturn\n\t}\n\tc.Object = unknown\n\n\treturn\n}\n\n// Release IUnknown object.\nfunc (c *Connection) Release() {\n\tc.Object.Release()\n}\n\n// Load COM object from list of programIDs or strings.\nfunc (c *Connection) Load(names ...string) (errors []error) {\n\tvar tempErrors []error = make([]error, len(names))\n\tvar numErrors int = 0\n\tfor _, name := range names {\n\t\terr := c.Create(name)\n\t\tif err != nil {\n\t\t\ttempErrors = append(tempErrors, err)\n\t\t\tnumErrors += 1\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\n\tcopy(errors, tempErrors[0:numErrors])\n\treturn\n}\n\n// Dispatch returns Dispatch object.\nfunc (c *Connection) Dispatch() (object *Dispatch, err error) {\n\tdispatch, err := c.Object.QueryInterface(IID_IDispatch)\n\tif err != nil {\n\t\treturn\n\t}\n\tobject = &Dispatch{dispatch}\n\treturn\n}\n\n// Dispatch stores IDispatch object.\ntype Dispatch struct {\n\tObject *IDispatch // Dispatch object.\n}\n\n// Call method on IDispatch with parameters.\nfunc (d *Dispatch) Call(method string, params ...interface{}) (result *VARIANT, err error) {\n\tid, err := d.GetId(method)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_METHOD, params)\n\treturn\n}\n\n// MustCall method on IDispatch with parameters.\nfunc (d *Dispatch) MustCall(method string, params ...interface{}) (result *VARIANT) {\n\tid, err := d.GetId(method)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_METHOD, params)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn\n}\n\n// Get property on IDispatch with parameters.\nfunc (d *Dispatch) Get(name string, params ...interface{}) (result *VARIANT, err error) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYGET, params)\n\treturn\n}\n\n// MustGet property on IDispatch with parameters.\nfunc (d *Dispatch) MustGet(name string, params ...interface{}) (result *VARIANT) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYGET, params)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn\n}\n\n// Set property on IDispatch with parameters.\nfunc (d *Dispatch) Set(name string, params ...interface{}) (result *VARIANT, err error) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYPUT, params)\n\treturn\n}\n\n// MustSet property on IDispatch with parameters.\nfunc (d *Dispatch) MustSet(name string, params ...interface{}) (result *VARIANT) {\n\tid, err := d.GetId(name)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tresult, err = d.Invoke(id, DISPATCH_PROPERTYPUT, params)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn\n}\n\n// GetId retrieves ID of name on IDispatch.\nfunc (d *Dispatch) GetId(name string) (id int32, err error) {\n\tvar dispid []int32\n\tdispid, err = d.Object.GetIDsOfName([]string{name})\n\tif err != nil {\n\t\treturn\n\t}\n\tid = dispid[0]\n\treturn\n}\n\n// GetIds retrieves all IDs of names on IDispatch.\nfunc (d *Dispatch) GetIds(names ...string) (dispid []int32, err error) {\n\tdispid, err = d.Object.GetIDsOfName(names)\n\treturn\n}\n\n// Invoke IDispatch on DisplayID of dispatch type with parameters.\n//\n// There have been problems where if send cascading params..., it would error\n// out because the parameters would be empty.\nfunc (d *Dispatch) Invoke(id int32, dispatch int16, params []interface{}) (result *VARIANT, err error) {\n\tif len(params) < 1 {\n\t\tresult, err = d.Object.Invoke(id, dispatch)\n\t} else {\n\t\tresult, err = d.Object.Invoke(id, dispatch, params...)\n\t}\n\treturn\n}\n\n// Release IDispatch object.\nfunc (d *Dispatch) Release() {\n\td.Object.Release()\n}\n\n// Connect initializes COM and attempts to load IUnknown based on given names.\nfunc Connect(names ...string) (connection *Connection) {\n\tconnection.Initialize()\n\tconnection.Load(names...)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/constants.go",
    "content": "package ole\n\nconst (\n\tCLSCTX_INPROC_SERVER   = 1\n\tCLSCTX_INPROC_HANDLER  = 2\n\tCLSCTX_LOCAL_SERVER    = 4\n\tCLSCTX_INPROC_SERVER16 = 8\n\tCLSCTX_REMOTE_SERVER   = 16\n\tCLSCTX_ALL             = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER\n\tCLSCTX_INPROC          = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER\n\tCLSCTX_SERVER          = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER\n)\n\nconst (\n\tCOINIT_APARTMENTTHREADED = 0x2\n\tCOINIT_MULTITHREADED     = 0x0\n\tCOINIT_DISABLE_OLE1DDE   = 0x4\n\tCOINIT_SPEED_OVER_MEMORY = 0x8\n)\n\nconst (\n\tDISPATCH_METHOD         = 1\n\tDISPATCH_PROPERTYGET    = 2\n\tDISPATCH_PROPERTYPUT    = 4\n\tDISPATCH_PROPERTYPUTREF = 8\n)\n\nconst (\n\tS_OK           = 0x00000000\n\tE_UNEXPECTED   = 0x8000FFFF\n\tE_NOTIMPL      = 0x80004001\n\tE_OUTOFMEMORY  = 0x8007000E\n\tE_INVALIDARG   = 0x80070057\n\tE_NOINTERFACE  = 0x80004002\n\tE_POINTER      = 0x80004003\n\tE_HANDLE       = 0x80070006\n\tE_ABORT        = 0x80004004\n\tE_FAIL         = 0x80004005\n\tE_ACCESSDENIED = 0x80070005\n\tE_PENDING      = 0x8000000A\n\n\tCO_E_CLASSSTRING = 0x800401F3\n)\n\nconst (\n\tCC_FASTCALL = iota\n\tCC_CDECL\n\tCC_MSCPASCAL\n\tCC_PASCAL = CC_MSCPASCAL\n\tCC_MACPASCAL\n\tCC_STDCALL\n\tCC_FPFASTCALL\n\tCC_SYSCALL\n\tCC_MPWCDECL\n\tCC_MPWPASCAL\n\tCC_MAX = CC_MPWPASCAL\n)\n\ntype VT uint16\n\nconst (\n\tVT_EMPTY           VT = 0x0\n\tVT_NULL            VT = 0x1\n\tVT_I2              VT = 0x2\n\tVT_I4              VT = 0x3\n\tVT_R4              VT = 0x4\n\tVT_R8              VT = 0x5\n\tVT_CY              VT = 0x6\n\tVT_DATE            VT = 0x7\n\tVT_BSTR            VT = 0x8\n\tVT_DISPATCH        VT = 0x9\n\tVT_ERROR           VT = 0xa\n\tVT_BOOL            VT = 0xb\n\tVT_VARIANT         VT = 0xc\n\tVT_UNKNOWN         VT = 0xd\n\tVT_DECIMAL         VT = 0xe\n\tVT_I1              VT = 0x10\n\tVT_UI1             VT = 0x11\n\tVT_UI2             VT = 0x12\n\tVT_UI4             VT = 0x13\n\tVT_I8              VT = 0x14\n\tVT_UI8             VT = 0x15\n\tVT_INT             VT = 0x16\n\tVT_UINT            VT = 0x17\n\tVT_VOID            VT = 0x18\n\tVT_HRESULT         VT = 0x19\n\tVT_PTR             VT = 0x1a\n\tVT_SAFEARRAY       VT = 0x1b\n\tVT_CARRAY          VT = 0x1c\n\tVT_USERDEFINED     VT = 0x1d\n\tVT_LPSTR           VT = 0x1e\n\tVT_LPWSTR          VT = 0x1f\n\tVT_RECORD          VT = 0x24\n\tVT_INT_PTR         VT = 0x25\n\tVT_UINT_PTR        VT = 0x26\n\tVT_FILETIME        VT = 0x40\n\tVT_BLOB            VT = 0x41\n\tVT_STREAM          VT = 0x42\n\tVT_STORAGE         VT = 0x43\n\tVT_STREAMED_OBJECT VT = 0x44\n\tVT_STORED_OBJECT   VT = 0x45\n\tVT_BLOB_OBJECT     VT = 0x46\n\tVT_CF              VT = 0x47\n\tVT_CLSID           VT = 0x48\n\tVT_BSTR_BLOB       VT = 0xfff\n\tVT_VECTOR          VT = 0x1000\n\tVT_ARRAY           VT = 0x2000\n\tVT_BYREF           VT = 0x4000\n\tVT_RESERVED        VT = 0x8000\n\tVT_ILLEGAL         VT = 0xffff\n\tVT_ILLEGALMASKED   VT = 0xfff\n\tVT_TYPEMASK        VT = 0xfff\n)\n\nconst (\n\tDISPID_UNKNOWN     = -1\n\tDISPID_VALUE       = 0\n\tDISPID_PROPERTYPUT = -3\n\tDISPID_NEWENUM     = -4\n\tDISPID_EVALUATE    = -5\n\tDISPID_CONSTRUCTOR = -6\n\tDISPID_DESTRUCTOR  = -7\n\tDISPID_COLLECT     = -8\n)\n\nconst (\n\tTKIND_ENUM      = 1\n\tTKIND_RECORD    = 2\n\tTKIND_MODULE    = 3\n\tTKIND_INTERFACE = 4\n\tTKIND_DISPATCH  = 5\n\tTKIND_COCLASS   = 6\n\tTKIND_ALIAS     = 7\n\tTKIND_UNION     = 8\n\tTKIND_MAX       = 9\n)\n\n// Safe Array Feature Flags\n\nconst (\n\tFADF_AUTO        = 0x0001\n\tFADF_STATIC      = 0x0002\n\tFADF_EMBEDDED    = 0x0004\n\tFADF_FIXEDSIZE   = 0x0010\n\tFADF_RECORD      = 0x0020\n\tFADF_HAVEIID     = 0x0040\n\tFADF_HAVEVARTYPE = 0x0080\n\tFADF_BSTR        = 0x0100\n\tFADF_UNKNOWN     = 0x0200\n\tFADF_DISPATCH    = 0x0400\n\tFADF_VARIANT     = 0x0800\n\tFADF_RESERVED    = 0xF008\n)\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/error.go",
    "content": "package ole\n\n// OleError stores COM errors.\ntype OleError struct {\n\thr          uintptr\n\tdescription string\n\tsubError    error\n}\n\n// NewError creates new error with HResult.\nfunc NewError(hr uintptr) *OleError {\n\treturn &OleError{hr: hr}\n}\n\n// NewErrorWithDescription creates new COM error with HResult and description.\nfunc NewErrorWithDescription(hr uintptr, description string) *OleError {\n\treturn &OleError{hr: hr, description: description}\n}\n\n// NewErrorWithSubError creates new COM error with parent error.\nfunc NewErrorWithSubError(hr uintptr, description string, err error) *OleError {\n\treturn &OleError{hr: hr, description: description, subError: err}\n}\n\n// Code is the HResult.\nfunc (v *OleError) Code() uintptr {\n\treturn uintptr(v.hr)\n}\n\n// String description, either manually set or format message with error code.\nfunc (v *OleError) String() string {\n\tif v.description != \"\" {\n\t\treturn errstr(int(v.hr)) + \" (\" + v.description + \")\"\n\t}\n\treturn errstr(int(v.hr))\n}\n\n// Error implements error interface.\nfunc (v *OleError) Error() string {\n\treturn v.String()\n}\n\n// Description retrieves error summary, if there is one.\nfunc (v *OleError) Description() string {\n\treturn v.description\n}\n\n// SubError returns parent error, if there is one.\nfunc (v *OleError) SubError() error {\n\treturn v.subError\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/error_func.go",
    "content": "// +build !windows\n\npackage ole\n\n// errstr converts error code to string.\nfunc errstr(errno int) string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/error_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unicode/utf16\"\n)\n\n// errstr converts error code to string.\nfunc errstr(errno int) string {\n\t// ask windows for the remaining errors\n\tvar flags uint32 = syscall.FORMAT_MESSAGE_FROM_SYSTEM | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS\n\tb := make([]uint16, 300)\n\tn, err := syscall.FormatMessage(flags, 0, uint32(errno), 0, b, nil)\n\tif err != nil {\n\t\treturn fmt.Sprintf(\"error %d (FormatMessage failed with: %v)\", errno, err)\n\t}\n\t// trim terminating \\r and \\n\n\tfor ; n > 0 && (b[n-1] == '\\n' || b[n-1] == '\\r'); n-- {\n\t}\n\treturn string(utf16.Decode(b[:n]))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/guid.go",
    "content": "package ole\n\nvar (\n\t// IID_NULL is null Interface ID, used when no other Interface ID is known.\n\tIID_NULL = NewGUID(\"{00000000-0000-0000-0000-000000000000}\")\n\n\t// IID_IUnknown is for IUnknown interfaces.\n\tIID_IUnknown = NewGUID(\"{00000000-0000-0000-C000-000000000046}\")\n\n\t// IID_IDispatch is for IDispatch interfaces.\n\tIID_IDispatch = NewGUID(\"{00020400-0000-0000-C000-000000000046}\")\n\n\t// IID_IEnumVariant is for IEnumVariant interfaces\n\tIID_IEnumVariant = NewGUID(\"{00020404-0000-0000-C000-000000000046}\")\n\n\t// IID_IConnectionPointContainer is for IConnectionPointContainer interfaces.\n\tIID_IConnectionPointContainer = NewGUID(\"{B196B284-BAB4-101A-B69C-00AA00341D07}\")\n\n\t// IID_IConnectionPoint is for IConnectionPoint interfaces.\n\tIID_IConnectionPoint = NewGUID(\"{B196B286-BAB4-101A-B69C-00AA00341D07}\")\n\n\t// IID_IInspectable is for IInspectable interfaces.\n\tIID_IInspectable = NewGUID(\"{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}\")\n\n\t// IID_IProvideClassInfo is for IProvideClassInfo interfaces.\n\tIID_IProvideClassInfo = NewGUID(\"{B196B283-BAB4-101A-B69C-00AA00341D07}\")\n)\n\n// These are for testing and not part of any library.\nvar (\n\t// IID_ICOMTestString is for ICOMTestString interfaces.\n\t//\n\t// {E0133EB4-C36F-469A-9D3D-C66B84BE19ED}\n\tIID_ICOMTestString = NewGUID(\"{E0133EB4-C36F-469A-9D3D-C66B84BE19ED}\")\n\n\t// IID_ICOMTestInt8 is for ICOMTestInt8 interfaces.\n\t//\n\t// {BEB06610-EB84-4155-AF58-E2BFF53680B4}\n\tIID_ICOMTestInt8 = NewGUID(\"{BEB06610-EB84-4155-AF58-E2BFF53680B4}\")\n\n\t// IID_ICOMTestInt16 is for ICOMTestInt16 interfaces.\n\t//\n\t// {DAA3F9FA-761E-4976-A860-8364CE55F6FC}\n\tIID_ICOMTestInt16 = NewGUID(\"{DAA3F9FA-761E-4976-A860-8364CE55F6FC}\")\n\n\t// IID_ICOMTestInt32 is for ICOMTestInt32 interfaces.\n\t//\n\t// {E3DEDEE7-38A2-4540-91D1-2EEF1D8891B0}\n\tIID_ICOMTestInt32 = NewGUID(\"{E3DEDEE7-38A2-4540-91D1-2EEF1D8891B0}\")\n\n\t// IID_ICOMTestInt64 is for ICOMTestInt64 interfaces.\n\t//\n\t// {8D437CBC-B3ED-485C-BC32-C336432A1623}\n\tIID_ICOMTestInt64 = NewGUID(\"{8D437CBC-B3ED-485C-BC32-C336432A1623}\")\n\n\t// IID_ICOMTestFloat is for ICOMTestFloat interfaces.\n\t//\n\t// {BF1ED004-EA02-456A-AA55-2AC8AC6B054C}\n\tIID_ICOMTestFloat = NewGUID(\"{BF1ED004-EA02-456A-AA55-2AC8AC6B054C}\")\n\n\t// IID_ICOMTestDouble is for ICOMTestDouble interfaces.\n\t//\n\t// {BF908A81-8687-4E93-999F-D86FAB284BA0}\n\tIID_ICOMTestDouble = NewGUID(\"{BF908A81-8687-4E93-999F-D86FAB284BA0}\")\n\n\t// IID_ICOMTestBoolean is for ICOMTestBoolean interfaces.\n\t//\n\t// {D530E7A6-4EE8-40D1-8931-3D63B8605010}\n\tIID_ICOMTestBoolean = NewGUID(\"{D530E7A6-4EE8-40D1-8931-3D63B8605010}\")\n\n\t// IID_ICOMEchoTestObject is for ICOMEchoTestObject interfaces.\n\t//\n\t// {6485B1EF-D780-4834-A4FE-1EBB51746CA3}\n\tIID_ICOMEchoTestObject = NewGUID(\"{6485B1EF-D780-4834-A4FE-1EBB51746CA3}\")\n\n\t// IID_ICOMTestTypes is for ICOMTestTypes interfaces.\n\t//\n\t// {CCA8D7AE-91C0-4277-A8B3-FF4EDF28D3C0}\n\tIID_ICOMTestTypes = NewGUID(\"{CCA8D7AE-91C0-4277-A8B3-FF4EDF28D3C0}\")\n\n\t// CLSID_COMEchoTestObject is for COMEchoTestObject class.\n\t//\n\t// {3C24506A-AE9E-4D50-9157-EF317281F1B0}\n\tCLSID_COMEchoTestObject = NewGUID(\"{3C24506A-AE9E-4D50-9157-EF317281F1B0}\")\n\n\t// CLSID_COMTestScalarClass is for COMTestScalarClass class.\n\t//\n\t// {865B85C5-0334-4AC6-9EF6-AACEC8FC5E86}\n\tCLSID_COMTestScalarClass = NewGUID(\"{865B85C5-0334-4AC6-9EF6-AACEC8FC5E86}\")\n)\n\nconst hextable = \"0123456789ABCDEF\"\nconst emptyGUID = \"{00000000-0000-0000-0000-000000000000}\"\n\n// GUID is Windows API specific GUID type.\n//\n// This exists to match Windows GUID type for direct passing for COM.\n// Format is in xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx.\ntype GUID struct {\n\tData1 uint32\n\tData2 uint16\n\tData3 uint16\n\tData4 [8]byte\n}\n\n// NewGUID converts the given string into a globally unique identifier that is\n// compliant with the Windows API.\n//\n// The supplied string may be in any of these formats:\n//\n//  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n//  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n//  {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\n//\n// The conversion of the supplied string is not case-sensitive.\nfunc NewGUID(guid string) *GUID {\n\td := []byte(guid)\n\tvar d1, d2, d3, d4a, d4b []byte\n\n\tswitch len(d) {\n\tcase 38:\n\t\tif d[0] != '{' || d[37] != '}' {\n\t\t\treturn nil\n\t\t}\n\t\td = d[1:37]\n\t\tfallthrough\n\tcase 36:\n\t\tif d[8] != '-' || d[13] != '-' || d[18] != '-' || d[23] != '-' {\n\t\t\treturn nil\n\t\t}\n\t\td1 = d[0:8]\n\t\td2 = d[9:13]\n\t\td3 = d[14:18]\n\t\td4a = d[19:23]\n\t\td4b = d[24:36]\n\tcase 32:\n\t\td1 = d[0:8]\n\t\td2 = d[8:12]\n\t\td3 = d[12:16]\n\t\td4a = d[16:20]\n\t\td4b = d[20:32]\n\tdefault:\n\t\treturn nil\n\t}\n\n\tvar g GUID\n\tvar ok1, ok2, ok3, ok4 bool\n\tg.Data1, ok1 = decodeHexUint32(d1)\n\tg.Data2, ok2 = decodeHexUint16(d2)\n\tg.Data3, ok3 = decodeHexUint16(d3)\n\tg.Data4, ok4 = decodeHexByte64(d4a, d4b)\n\tif ok1 && ok2 && ok3 && ok4 {\n\t\treturn &g\n\t}\n\treturn nil\n}\n\nfunc decodeHexUint32(src []byte) (value uint32, ok bool) {\n\tvar b1, b2, b3, b4 byte\n\tvar ok1, ok2, ok3, ok4 bool\n\tb1, ok1 = decodeHexByte(src[0], src[1])\n\tb2, ok2 = decodeHexByte(src[2], src[3])\n\tb3, ok3 = decodeHexByte(src[4], src[5])\n\tb4, ok4 = decodeHexByte(src[6], src[7])\n\tvalue = (uint32(b1) << 24) | (uint32(b2) << 16) | (uint32(b3) << 8) | uint32(b4)\n\tok = ok1 && ok2 && ok3 && ok4\n\treturn\n}\n\nfunc decodeHexUint16(src []byte) (value uint16, ok bool) {\n\tvar b1, b2 byte\n\tvar ok1, ok2 bool\n\tb1, ok1 = decodeHexByte(src[0], src[1])\n\tb2, ok2 = decodeHexByte(src[2], src[3])\n\tvalue = (uint16(b1) << 8) | uint16(b2)\n\tok = ok1 && ok2\n\treturn\n}\n\nfunc decodeHexByte64(s1 []byte, s2 []byte) (value [8]byte, ok bool) {\n\tvar ok1, ok2, ok3, ok4, ok5, ok6, ok7, ok8 bool\n\tvalue[0], ok1 = decodeHexByte(s1[0], s1[1])\n\tvalue[1], ok2 = decodeHexByte(s1[2], s1[3])\n\tvalue[2], ok3 = decodeHexByte(s2[0], s2[1])\n\tvalue[3], ok4 = decodeHexByte(s2[2], s2[3])\n\tvalue[4], ok5 = decodeHexByte(s2[4], s2[5])\n\tvalue[5], ok6 = decodeHexByte(s2[6], s2[7])\n\tvalue[6], ok7 = decodeHexByte(s2[8], s2[9])\n\tvalue[7], ok8 = decodeHexByte(s2[10], s2[11])\n\tok = ok1 && ok2 && ok3 && ok4 && ok5 && ok6 && ok7 && ok8\n\treturn\n}\n\nfunc decodeHexByte(c1, c2 byte) (value byte, ok bool) {\n\tvar n1, n2 byte\n\tvar ok1, ok2 bool\n\tn1, ok1 = decodeHexChar(c1)\n\tn2, ok2 = decodeHexChar(c2)\n\tvalue = (n1 << 4) | n2\n\tok = ok1 && ok2\n\treturn\n}\n\nfunc decodeHexChar(c byte) (byte, bool) {\n\tswitch {\n\tcase '0' <= c && c <= '9':\n\t\treturn c - '0', true\n\tcase 'a' <= c && c <= 'f':\n\t\treturn c - 'a' + 10, true\n\tcase 'A' <= c && c <= 'F':\n\t\treturn c - 'A' + 10, true\n\t}\n\n\treturn 0, false\n}\n\n// String converts the GUID to string form. It will adhere to this pattern:\n//\n//  {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\n//\n// If the GUID is nil, the string representation of an empty GUID is returned:\n//\n//  {00000000-0000-0000-0000-000000000000}\nfunc (guid *GUID) String() string {\n\tif guid == nil {\n\t\treturn emptyGUID\n\t}\n\n\tvar c [38]byte\n\tc[0] = '{'\n\tputUint32Hex(c[1:9], guid.Data1)\n\tc[9] = '-'\n\tputUint16Hex(c[10:14], guid.Data2)\n\tc[14] = '-'\n\tputUint16Hex(c[15:19], guid.Data3)\n\tc[19] = '-'\n\tputByteHex(c[20:24], guid.Data4[0:2])\n\tc[24] = '-'\n\tputByteHex(c[25:37], guid.Data4[2:8])\n\tc[37] = '}'\n\treturn string(c[:])\n}\n\nfunc putUint32Hex(b []byte, v uint32) {\n\tb[0] = hextable[byte(v>>24)>>4]\n\tb[1] = hextable[byte(v>>24)&0x0f]\n\tb[2] = hextable[byte(v>>16)>>4]\n\tb[3] = hextable[byte(v>>16)&0x0f]\n\tb[4] = hextable[byte(v>>8)>>4]\n\tb[5] = hextable[byte(v>>8)&0x0f]\n\tb[6] = hextable[byte(v)>>4]\n\tb[7] = hextable[byte(v)&0x0f]\n}\n\nfunc putUint16Hex(b []byte, v uint16) {\n\tb[0] = hextable[byte(v>>8)>>4]\n\tb[1] = hextable[byte(v>>8)&0x0f]\n\tb[2] = hextable[byte(v)>>4]\n\tb[3] = hextable[byte(v)&0x0f]\n}\n\nfunc putByteHex(dst, src []byte) {\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i*2] = hextable[src[i]>>4]\n\t\tdst[i*2+1] = hextable[src[i]&0x0f]\n\t}\n}\n\n// IsEqualGUID compares two GUID.\n//\n// Not constant time comparison.\nfunc IsEqualGUID(guid1 *GUID, guid2 *GUID) bool {\n\treturn guid1.Data1 == guid2.Data1 &&\n\t\tguid1.Data2 == guid2.Data2 &&\n\t\tguid1.Data3 == guid2.Data3 &&\n\t\tguid1.Data4[0] == guid2.Data4[0] &&\n\t\tguid1.Data4[1] == guid2.Data4[1] &&\n\t\tguid1.Data4[2] == guid2.Data4[2] &&\n\t\tguid1.Data4[3] == guid2.Data4[3] &&\n\t\tguid1.Data4[4] == guid2.Data4[4] &&\n\t\tguid1.Data4[5] == guid2.Data4[5] &&\n\t\tguid1.Data4[6] == guid2.Data4[6] &&\n\t\tguid1.Data4[7] == guid2.Data4[7]\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpoint.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IConnectionPoint struct {\n\tIUnknown\n}\n\ntype IConnectionPointVtbl struct {\n\tIUnknownVtbl\n\tGetConnectionInterface      uintptr\n\tGetConnectionPointContainer uintptr\n\tAdvise                      uintptr\n\tUnadvise                    uintptr\n\tEnumConnections             uintptr\n}\n\nfunc (v *IConnectionPoint) VTable() *IConnectionPointVtbl {\n\treturn (*IConnectionPointVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpoint_func.go",
    "content": "// +build !windows\n\npackage ole\n\nimport \"unsafe\"\n\nfunc (v *IConnectionPoint) GetConnectionInterface(piid **GUID) int32 {\n\treturn int32(0)\n}\n\nfunc (v *IConnectionPoint) Advise(unknown *IUnknown) (uint32, error) {\n\treturn uint32(0), NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPoint) Unadvise(cookie uint32) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPoint) EnumConnections(p *unsafe.Pointer) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpoint_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *IConnectionPoint) GetConnectionInterface(piid **GUID) int32 {\n\t// XXX: This doesn't look like it does what it's supposed to\n\treturn release((*IUnknown)(unsafe.Pointer(v)))\n}\n\nfunc (v *IConnectionPoint) Advise(unknown *IUnknown) (cookie uint32, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().Advise,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(unknown)),\n\t\tuintptr(unsafe.Pointer(&cookie)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (v *IConnectionPoint) Unadvise(cookie uint32) (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().Unadvise,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(cookie),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (v *IConnectionPoint) EnumConnections(p *unsafe.Pointer) error {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpointcontainer.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IConnectionPointContainer struct {\n\tIUnknown\n}\n\ntype IConnectionPointContainerVtbl struct {\n\tIUnknownVtbl\n\tEnumConnectionPoints uintptr\n\tFindConnectionPoint  uintptr\n}\n\nfunc (v *IConnectionPointContainer) VTable() *IConnectionPointContainerVtbl {\n\treturn (*IConnectionPointContainerVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (v *IConnectionPointContainer) EnumConnectionPoints(points interface{}) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPointContainer) FindConnectionPoint(iid *GUID, point **IConnectionPoint) error {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *IConnectionPointContainer) EnumConnectionPoints(points interface{}) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (v *IConnectionPointContainer) FindConnectionPoint(iid *GUID, point **IConnectionPoint) (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().FindConnectionPoint,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(point)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/idispatch.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IDispatch struct {\n\tIUnknown\n}\n\ntype IDispatchVtbl struct {\n\tIUnknownVtbl\n\tGetTypeInfoCount uintptr\n\tGetTypeInfo      uintptr\n\tGetIDsOfNames    uintptr\n\tInvoke           uintptr\n}\n\nfunc (v *IDispatch) VTable() *IDispatchVtbl {\n\treturn (*IDispatchVtbl)(unsafe.Pointer(v.RawVTable))\n}\n\nfunc (v *IDispatch) GetIDsOfName(names []string) (dispid []int32, err error) {\n\tdispid, err = getIDsOfName(v, names)\n\treturn\n}\n\nfunc (v *IDispatch) Invoke(dispid int32, dispatch int16, params ...interface{}) (result *VARIANT, err error) {\n\tresult, err = invoke(v, dispid, dispatch, params...)\n\treturn\n}\n\nfunc (v *IDispatch) GetTypeInfoCount() (c uint32, err error) {\n\tc, err = getTypeInfoCount(v)\n\treturn\n}\n\nfunc (v *IDispatch) GetTypeInfo() (tinfo *ITypeInfo, err error) {\n\ttinfo, err = getTypeInfo(v)\n\treturn\n}\n\n// GetSingleIDOfName is a helper that returns single display ID for IDispatch name.\n//\n// This replaces the common pattern of attempting to get a single name from the list of available\n// IDs. It gives the first ID, if it is available.\nfunc (v *IDispatch) GetSingleIDOfName(name string) (displayID int32, err error) {\n\tvar displayIDs []int32\n\tdisplayIDs, err = v.GetIDsOfName([]string{name})\n\tif err != nil {\n\t\treturn\n\t}\n\tdisplayID = displayIDs[0]\n\treturn\n}\n\n// InvokeWithOptionalArgs accepts arguments as an array, works like Invoke.\n//\n// Accepts name and will attempt to retrieve Display ID to pass to Invoke.\n//\n// Passing params as an array is a workaround that could be fixed in later versions of Go that\n// prevent passing empty params. During testing it was discovered that this is an acceptable way of\n// getting around not being able to pass params normally.\nfunc (v *IDispatch) InvokeWithOptionalArgs(name string, dispatch int16, params []interface{}) (result *VARIANT, err error) {\n\tdisplayID, err := v.GetSingleIDOfName(name)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif len(params) < 1 {\n\t\tresult, err = v.Invoke(displayID, dispatch)\n\t} else {\n\t\tresult, err = v.Invoke(displayID, dispatch, params...)\n\t}\n\n\treturn\n}\n\n// CallMethod invokes named function with arguments on object.\nfunc (v *IDispatch) CallMethod(name string, params ...interface{}) (*VARIANT, error) {\n\treturn v.InvokeWithOptionalArgs(name, DISPATCH_METHOD, params)\n}\n\n// GetProperty retrieves the property with the name with the ability to pass arguments.\n//\n// Most of the time you will not need to pass arguments as most objects do not allow for this\n// feature. Or at least, should not allow for this feature. Some servers don't follow best practices\n// and this is provided for those edge cases.\nfunc (v *IDispatch) GetProperty(name string, params ...interface{}) (*VARIANT, error) {\n\treturn v.InvokeWithOptionalArgs(name, DISPATCH_PROPERTYGET, params)\n}\n\n// PutProperty attempts to mutate a property in the object.\nfunc (v *IDispatch) PutProperty(name string, params ...interface{}) (*VARIANT, error) {\n\treturn v.InvokeWithOptionalArgs(name, DISPATCH_PROPERTYPUT, params)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/idispatch_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc getIDsOfName(disp *IDispatch, names []string) ([]int32, error) {\n\treturn []int32{}, NewError(E_NOTIMPL)\n}\n\nfunc getTypeInfoCount(disp *IDispatch) (uint32, error) {\n\treturn uint32(0), NewError(E_NOTIMPL)\n}\n\nfunc getTypeInfo(disp *IDispatch) (*ITypeInfo, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\nfunc invoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (*VARIANT, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/idispatch_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"math/big\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\nfunc getIDsOfName(disp *IDispatch, names []string) (dispid []int32, err error) {\n\twnames := make([]*uint16, len(names))\n\tfor i := 0; i < len(names); i++ {\n\t\twnames[i] = syscall.StringToUTF16Ptr(names[i])\n\t}\n\tdispid = make([]int32, len(names))\n\tnamelen := uint32(len(names))\n\thr, _, _ := syscall.Syscall6(\n\t\tdisp.VTable().GetIDsOfNames,\n\t\t6,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(unsafe.Pointer(IID_NULL)),\n\t\tuintptr(unsafe.Pointer(&wnames[0])),\n\t\tuintptr(namelen),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(unsafe.Pointer(&dispid[0])))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc getTypeInfoCount(disp *IDispatch) (c uint32, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tdisp.VTable().GetTypeInfoCount,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(unsafe.Pointer(&c)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc getTypeInfo(disp *IDispatch) (tinfo *ITypeInfo, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tdisp.VTable().GetTypeInfo,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(unsafe.Pointer(&tinfo)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc invoke(disp *IDispatch, dispid int32, dispatch int16, params ...interface{}) (result *VARIANT, err error) {\n\tvar dispparams DISPPARAMS\n\n\tif dispatch&DISPATCH_PROPERTYPUT != 0 {\n\t\tdispnames := [1]int32{DISPID_PROPERTYPUT}\n\t\tdispparams.rgdispidNamedArgs = uintptr(unsafe.Pointer(&dispnames[0]))\n\t\tdispparams.cNamedArgs = 1\n\t} else if dispatch&DISPATCH_PROPERTYPUTREF != 0 {\n\t\tdispnames := [1]int32{DISPID_PROPERTYPUT}\n\t\tdispparams.rgdispidNamedArgs = uintptr(unsafe.Pointer(&dispnames[0]))\n\t\tdispparams.cNamedArgs = 1\n\t}\n\tvar vargs []VARIANT\n\tif len(params) > 0 {\n\t\tvargs = make([]VARIANT, len(params))\n\t\tfor i, v := range params {\n\t\t\t//n := len(params)-i-1\n\t\t\tn := len(params) - i - 1\n\t\t\tVariantInit(&vargs[n])\n\t\t\tswitch vv := v.(type) {\n\t\t\tcase bool:\n\t\t\t\tif vv {\n\t\t\t\t\tvargs[n] = NewVariant(VT_BOOL, 0xffff)\n\t\t\t\t} else {\n\t\t\t\t\tvargs[n] = NewVariant(VT_BOOL, 0)\n\t\t\t\t}\n\t\t\tcase *bool:\n\t\t\t\tvargs[n] = NewVariant(VT_BOOL|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*bool)))))\n\t\t\tcase uint8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1, int64(v.(uint8)))\n\t\t\tcase *uint8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint8)))))\n\t\t\tcase int8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1, int64(v.(int8)))\n\t\t\tcase *int8:\n\t\t\t\tvargs[n] = NewVariant(VT_I1|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint8)))))\n\t\t\tcase int16:\n\t\t\t\tvargs[n] = NewVariant(VT_I2, int64(v.(int16)))\n\t\t\tcase *int16:\n\t\t\t\tvargs[n] = NewVariant(VT_I2|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int16)))))\n\t\t\tcase uint16:\n\t\t\t\tvargs[n] = NewVariant(VT_UI2, int64(v.(uint16)))\n\t\t\tcase *uint16:\n\t\t\t\tvargs[n] = NewVariant(VT_UI2|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint16)))))\n\t\t\tcase int32:\n\t\t\t\tvargs[n] = NewVariant(VT_I4, int64(v.(int32)))\n\t\t\tcase *int32:\n\t\t\t\tvargs[n] = NewVariant(VT_I4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int32)))))\n\t\t\tcase uint32:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4, int64(v.(uint32)))\n\t\t\tcase *uint32:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint32)))))\n\t\t\tcase int64:\n\t\t\t\tvargs[n] = NewVariant(VT_I8, int64(v.(int64)))\n\t\t\tcase *int64:\n\t\t\t\tvargs[n] = NewVariant(VT_I8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int64)))))\n\t\t\tcase uint64:\n\t\t\t\tvargs[n] = NewVariant(VT_UI8, int64(uintptr(v.(uint64))))\n\t\t\tcase *uint64:\n\t\t\t\tvargs[n] = NewVariant(VT_UI8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint64)))))\n\t\t\tcase int:\n\t\t\t\tvargs[n] = NewVariant(VT_I4, int64(v.(int)))\n\t\t\tcase *int:\n\t\t\t\tvargs[n] = NewVariant(VT_I4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*int)))))\n\t\t\tcase uint:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4, int64(v.(uint)))\n\t\t\tcase *uint:\n\t\t\t\tvargs[n] = NewVariant(VT_UI4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*uint)))))\n\t\t\tcase float32:\n\t\t\t\tvargs[n] = NewVariant(VT_R4, *(*int64)(unsafe.Pointer(&vv)))\n\t\t\tcase *float32:\n\t\t\t\tvargs[n] = NewVariant(VT_R4|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*float32)))))\n\t\t\tcase float64:\n\t\t\t\tvargs[n] = NewVariant(VT_R8, *(*int64)(unsafe.Pointer(&vv)))\n\t\t\tcase *float64:\n\t\t\t\tvargs[n] = NewVariant(VT_R8|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*float64)))))\n\t\t\tcase *big.Int:\n\t\t\t\tvargs[n] = NewVariant(VT_DECIMAL, v.(*big.Int).Int64())\n\t\t\tcase string:\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR, int64(uintptr(unsafe.Pointer(SysAllocStringLen(v.(string))))))\n\t\t\tcase *string:\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*string)))))\n\t\t\tcase time.Time:\n\t\t\t\ts := vv.Format(\"2006-01-02 15:04:05\")\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR, int64(uintptr(unsafe.Pointer(SysAllocStringLen(s)))))\n\t\t\tcase *time.Time:\n\t\t\t\ts := vv.Format(\"2006-01-02 15:04:05\")\n\t\t\t\tvargs[n] = NewVariant(VT_BSTR|VT_BYREF, int64(uintptr(unsafe.Pointer(&s))))\n\t\t\tcase *IDispatch:\n\t\t\t\tvargs[n] = NewVariant(VT_DISPATCH, int64(uintptr(unsafe.Pointer(v.(*IDispatch)))))\n\t\t\tcase **IDispatch:\n\t\t\t\tvargs[n] = NewVariant(VT_DISPATCH|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(**IDispatch)))))\n\t\t\tcase nil:\n\t\t\t\tvargs[n] = NewVariant(VT_NULL, 0)\n\t\t\tcase *VARIANT:\n\t\t\t\tvargs[n] = NewVariant(VT_VARIANT|VT_BYREF, int64(uintptr(unsafe.Pointer(v.(*VARIANT)))))\n\t\t\tcase []byte:\n\t\t\t\tsafeByteArray := safeArrayFromByteSlice(v.([]byte))\n\t\t\t\tvargs[n] = NewVariant(VT_ARRAY|VT_UI1, int64(uintptr(unsafe.Pointer(safeByteArray))))\n\t\t\t\tdefer VariantClear(&vargs[n])\n\t\t\tcase []string:\n\t\t\t\tsafeByteArray := safeArrayFromStringSlice(v.([]string))\n\t\t\t\tvargs[n] = NewVariant(VT_ARRAY|VT_BSTR, int64(uintptr(unsafe.Pointer(safeByteArray))))\n\t\t\t\tdefer VariantClear(&vargs[n])\n\t\t\tdefault:\n\t\t\t\tpanic(\"unknown type\")\n\t\t\t}\n\t\t}\n\t\tdispparams.rgvarg = uintptr(unsafe.Pointer(&vargs[0]))\n\t\tdispparams.cArgs = uint32(len(params))\n\t}\n\n\tresult = new(VARIANT)\n\tvar excepInfo EXCEPINFO\n\tVariantInit(result)\n\thr, _, _ := syscall.Syscall9(\n\t\tdisp.VTable().Invoke,\n\t\t9,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(dispid),\n\t\tuintptr(unsafe.Pointer(IID_NULL)),\n\t\tuintptr(GetUserDefaultLCID()),\n\t\tuintptr(dispatch),\n\t\tuintptr(unsafe.Pointer(&dispparams)),\n\t\tuintptr(unsafe.Pointer(result)),\n\t\tuintptr(unsafe.Pointer(&excepInfo)),\n\t\t0)\n\tif hr != 0 {\n\t\texcepInfo.renderStrings()\n\t\texcepInfo.Clear()\n\t\terr = NewErrorWithSubError(hr, excepInfo.description, excepInfo)\n\t}\n\tfor i, varg := range vargs {\n\t\tn := len(params) - i - 1\n\t\tif varg.VT == VT_BSTR && varg.Val != 0 {\n\t\t\tSysFreeString(((*int16)(unsafe.Pointer(uintptr(varg.Val)))))\n\t\t}\n\t\tif varg.VT == (VT_BSTR|VT_BYREF) && varg.Val != 0 {\n\t\t\t*(params[n].(*string)) = LpOleStrToString(*(**uint16)(unsafe.Pointer(uintptr(varg.Val))))\n\t\t}\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ienumvariant.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IEnumVARIANT struct {\n\tIUnknown\n}\n\ntype IEnumVARIANTVtbl struct {\n\tIUnknownVtbl\n\tNext  uintptr\n\tSkip  uintptr\n\tReset uintptr\n\tClone uintptr\n}\n\nfunc (v *IEnumVARIANT) VTable() *IEnumVARIANTVtbl {\n\treturn (*IEnumVARIANTVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ienumvariant_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (enum *IEnumVARIANT) Clone() (*IEnumVARIANT, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\nfunc (enum *IEnumVARIANT) Reset() error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (enum *IEnumVARIANT) Skip(celt uint) error {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc (enum *IEnumVARIANT) Next(celt uint) (VARIANT, uint, error) {\n\treturn NewVariant(VT_NULL, int64(0)), 0, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ienumvariant_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (enum *IEnumVARIANT) Clone() (cloned *IEnumVARIANT, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tenum.VTable().Clone,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\tuintptr(unsafe.Pointer(&cloned)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (enum *IEnumVARIANT) Reset() (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tenum.VTable().Reset,\n\t\t1,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\t0,\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (enum *IEnumVARIANT) Skip(celt uint) (err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tenum.VTable().Skip,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\tuintptr(celt),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc (enum *IEnumVARIANT) Next(celt uint) (array VARIANT, length uint, err error) {\n\thr, _, _ := syscall.Syscall6(\n\t\tenum.VTable().Next,\n\t\t4,\n\t\tuintptr(unsafe.Pointer(enum)),\n\t\tuintptr(celt),\n\t\tuintptr(unsafe.Pointer(&array)),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iinspectable.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IInspectable struct {\n\tIUnknown\n}\n\ntype IInspectableVtbl struct {\n\tIUnknownVtbl\n\tGetIIds             uintptr\n\tGetRuntimeClassName uintptr\n\tGetTrustLevel       uintptr\n}\n\nfunc (v *IInspectable) VTable() *IInspectableVtbl {\n\treturn (*IInspectableVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iinspectable_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (v *IInspectable) GetIids() ([]*GUID, error) {\n\treturn []*GUID{}, NewError(E_NOTIMPL)\n}\n\nfunc (v *IInspectable) GetRuntimeClassName() (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\nfunc (v *IInspectable) GetTrustLevel() (uint32, error) {\n\treturn uint32(0), NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iinspectable_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"reflect\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *IInspectable) GetIids() (iids []*GUID, err error) {\n\tvar count uint32\n\tvar array uintptr\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().GetIIds,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&count)),\n\t\tuintptr(unsafe.Pointer(&array)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t\treturn\n\t}\n\tdefer CoTaskMemFree(array)\n\n\tiids = make([]*GUID, count)\n\tbyteCount := count * uint32(unsafe.Sizeof(GUID{}))\n\tslicehdr := reflect.SliceHeader{Data: array, Len: int(byteCount), Cap: int(byteCount)}\n\tbyteSlice := *(*[]byte)(unsafe.Pointer(&slicehdr))\n\treader := bytes.NewReader(byteSlice)\n\tfor i := range iids {\n\t\tguid := GUID{}\n\t\terr = binary.Read(reader, binary.LittleEndian, &guid)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tiids[i] = &guid\n\t}\n\treturn\n}\n\nfunc (v *IInspectable) GetRuntimeClassName() (s string, err error) {\n\tvar hstring HString\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().GetRuntimeClassName,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&hstring)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t\treturn\n\t}\n\ts = hstring.String()\n\tDeleteHString(hstring)\n\treturn\n}\n\nfunc (v *IInspectable) GetTrustLevel() (level uint32, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tv.VTable().GetTrustLevel,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&level)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iprovideclassinfo.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IProvideClassInfo struct {\n\tIUnknown\n}\n\ntype IProvideClassInfoVtbl struct {\n\tIUnknownVtbl\n\tGetClassInfo uintptr\n}\n\nfunc (v *IProvideClassInfo) VTable() *IProvideClassInfoVtbl {\n\treturn (*IProvideClassInfoVtbl)(unsafe.Pointer(v.RawVTable))\n}\n\nfunc (v *IProvideClassInfo) GetClassInfo() (cinfo *ITypeInfo, err error) {\n\tcinfo, err = getClassInfo(v)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iprovideclassinfo_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc getClassInfo(disp *IProvideClassInfo) (tinfo *ITypeInfo, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iprovideclassinfo_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc getClassInfo(disp *IProvideClassInfo) (tinfo *ITypeInfo, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tdisp.VTable().GetClassInfo,\n\t\t2,\n\t\tuintptr(unsafe.Pointer(disp)),\n\t\tuintptr(unsafe.Pointer(&tinfo)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/itypeinfo.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype ITypeInfo struct {\n\tIUnknown\n}\n\ntype ITypeInfoVtbl struct {\n\tIUnknownVtbl\n\tGetTypeAttr          uintptr\n\tGetTypeComp          uintptr\n\tGetFuncDesc          uintptr\n\tGetVarDesc           uintptr\n\tGetNames             uintptr\n\tGetRefTypeOfImplType uintptr\n\tGetImplTypeFlags     uintptr\n\tGetIDsOfNames        uintptr\n\tInvoke               uintptr\n\tGetDocumentation     uintptr\n\tGetDllEntry          uintptr\n\tGetRefTypeInfo       uintptr\n\tAddressOfMember      uintptr\n\tCreateInstance       uintptr\n\tGetMops              uintptr\n\tGetContainingTypeLib uintptr\n\tReleaseTypeAttr      uintptr\n\tReleaseFuncDesc      uintptr\n\tReleaseVarDesc       uintptr\n}\n\nfunc (v *ITypeInfo) VTable() *ITypeInfoVtbl {\n\treturn (*ITypeInfoVtbl)(unsafe.Pointer(v.RawVTable))\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/itypeinfo_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc (v *ITypeInfo) GetTypeAttr() (*TYPEATTR, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/itypeinfo_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (v *ITypeInfo) GetTypeAttr() (tattr *TYPEATTR, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tuintptr(v.VTable().GetTypeAttr),\n\t\t2,\n\t\tuintptr(unsafe.Pointer(v)),\n\t\tuintptr(unsafe.Pointer(&tattr)),\n\t\t0)\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iunknown.go",
    "content": "package ole\n\nimport \"unsafe\"\n\ntype IUnknown struct {\n\tRawVTable *interface{}\n}\n\ntype IUnknownVtbl struct {\n\tQueryInterface uintptr\n\tAddRef         uintptr\n\tRelease        uintptr\n}\n\ntype UnknownLike interface {\n\tQueryInterface(iid *GUID) (disp *IDispatch, err error)\n\tAddRef() int32\n\tRelease() int32\n}\n\nfunc (v *IUnknown) VTable() *IUnknownVtbl {\n\treturn (*IUnknownVtbl)(unsafe.Pointer(v.RawVTable))\n}\n\nfunc (v *IUnknown) PutQueryInterface(interfaceID *GUID, obj interface{}) error {\n\treturn reflectQueryInterface(v, v.VTable().QueryInterface, interfaceID, obj)\n}\n\nfunc (v *IUnknown) IDispatch(interfaceID *GUID) (dispatch *IDispatch, err error) {\n\terr = v.PutQueryInterface(interfaceID, &dispatch)\n\treturn\n}\n\nfunc (v *IUnknown) IEnumVARIANT(interfaceID *GUID) (enum *IEnumVARIANT, err error) {\n\terr = v.PutQueryInterface(interfaceID, &enum)\n\treturn\n}\n\nfunc (v *IUnknown) QueryInterface(iid *GUID) (*IDispatch, error) {\n\treturn queryInterface(v, iid)\n}\n\nfunc (v *IUnknown) MustQueryInterface(iid *GUID) (disp *IDispatch) {\n\tunk, err := queryInterface(v, iid)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn unk\n}\n\nfunc (v *IUnknown) AddRef() int32 {\n\treturn addRef(v)\n}\n\nfunc (v *IUnknown) Release() int32 {\n\treturn release(v)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iunknown_func.go",
    "content": "// +build !windows\n\npackage ole\n\nfunc reflectQueryInterface(self interface{}, method uintptr, interfaceID *GUID, obj interface{}) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n\nfunc queryInterface(unk *IUnknown, iid *GUID) (disp *IDispatch, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\nfunc addRef(unk *IUnknown) int32 {\n\treturn 0\n}\n\nfunc release(unk *IUnknown) int32 {\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/iunknown_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc reflectQueryInterface(self interface{}, method uintptr, interfaceID *GUID, obj interface{}) (err error) {\n\tselfValue := reflect.ValueOf(self).Elem()\n\tobjValue := reflect.ValueOf(obj).Elem()\n\n\thr, _, _ := syscall.Syscall(\n\t\tmethod,\n\t\t3,\n\t\tselfValue.UnsafeAddr(),\n\t\tuintptr(unsafe.Pointer(interfaceID)),\n\t\tobjValue.Addr().Pointer())\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc queryInterface(unk *IUnknown, iid *GUID) (disp *IDispatch, err error) {\n\thr, _, _ := syscall.Syscall(\n\t\tunk.VTable().QueryInterface,\n\t\t3,\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&disp)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc addRef(unk *IUnknown) int32 {\n\tret, _, _ := syscall.Syscall(\n\t\tunk.VTable().AddRef,\n\t\t1,\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\t0,\n\t\t0)\n\treturn int32(ret)\n}\n\nfunc release(unk *IUnknown) int32 {\n\tret, _, _ := syscall.Syscall(\n\t\tunk.VTable().Release,\n\t\t1,\n\t\tuintptr(unsafe.Pointer(unk)),\n\t\t0,\n\t\t0)\n\treturn int32(ret)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/ole.go",
    "content": "package ole\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// DISPPARAMS are the arguments that passed to methods or property.\ntype DISPPARAMS struct {\n\trgvarg            uintptr\n\trgdispidNamedArgs uintptr\n\tcArgs             uint32\n\tcNamedArgs        uint32\n}\n\n// EXCEPINFO defines exception info.\ntype EXCEPINFO struct {\n\twCode             uint16\n\twReserved         uint16\n\tbstrSource        *uint16\n\tbstrDescription   *uint16\n\tbstrHelpFile      *uint16\n\tdwHelpContext     uint32\n\tpvReserved        uintptr\n\tpfnDeferredFillIn uintptr\n\tscode             uint32\n\n\t// Go-specific part. Don't move upper cos it'll break structure layout for native code.\n\trendered    bool\n\tsource      string\n\tdescription string\n\thelpFile    string\n}\n\n// renderStrings translates BSTR strings to Go ones so `.Error` and `.String`\n// could be safely called after `.Clear`. We need this when we can't rely on\n// a caller to call `.Clear`.\nfunc (e *EXCEPINFO) renderStrings() {\n\te.rendered = true\n\tif e.bstrSource == nil {\n\t\te.source = \"<nil>\"\n\t} else {\n\t\te.source = BstrToString(e.bstrSource)\n\t}\n\tif e.bstrDescription == nil {\n\t\te.description = \"<nil>\"\n\t} else {\n\t\te.description = BstrToString(e.bstrDescription)\n\t}\n\tif e.bstrHelpFile == nil {\n\t\te.helpFile = \"<nil>\"\n\t} else {\n\t\te.helpFile = BstrToString(e.bstrHelpFile)\n\t}\n}\n\n// Clear frees BSTR strings inside an EXCEPINFO and set it to NULL.\nfunc (e *EXCEPINFO) Clear() {\n\tfreeBSTR := func(s *uint16) {\n\t\t// SysFreeString don't return errors and is safe for call's on NULL.\n\t\t// https://docs.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-sysfreestring\n\t\t_ = SysFreeString((*int16)(unsafe.Pointer(s)))\n\t}\n\n\tif e.bstrSource != nil {\n\t\tfreeBSTR(e.bstrSource)\n\t\te.bstrSource = nil\n\t}\n\tif e.bstrDescription != nil {\n\t\tfreeBSTR(e.bstrDescription)\n\t\te.bstrDescription = nil\n\t}\n\tif e.bstrHelpFile != nil {\n\t\tfreeBSTR(e.bstrHelpFile)\n\t\te.bstrHelpFile = nil\n\t}\n}\n\n// WCode return wCode in EXCEPINFO.\nfunc (e EXCEPINFO) WCode() uint16 {\n\treturn e.wCode\n}\n\n// SCODE return scode in EXCEPINFO.\nfunc (e EXCEPINFO) SCODE() uint32 {\n\treturn e.scode\n}\n\n// String convert EXCEPINFO to string.\nfunc (e EXCEPINFO) String() string {\n\tif !e.rendered {\n\t\te.renderStrings()\n\t}\n\treturn fmt.Sprintf(\n\t\t\"wCode: %#x, bstrSource: %v, bstrDescription: %v, bstrHelpFile: %v, dwHelpContext: %#x, scode: %#x\",\n\t\te.wCode, e.source, e.description, e.helpFile, e.dwHelpContext, e.scode,\n\t)\n}\n\n// Error implements error interface and returns error string.\nfunc (e EXCEPINFO) Error() string {\n\tif !e.rendered {\n\t\te.renderStrings()\n\t}\n\n\tif e.description != \"<nil>\" {\n\t\treturn strings.TrimSpace(e.description)\n\t}\n\n\tcode := e.scode\n\tif e.wCode != 0 {\n\t\tcode = uint32(e.wCode)\n\t}\n\treturn fmt.Sprintf(\"%v: %#x\", e.source, code)\n}\n\n// PARAMDATA defines parameter data type.\ntype PARAMDATA struct {\n\tName *int16\n\tVt   uint16\n}\n\n// METHODDATA defines method info.\ntype METHODDATA struct {\n\tName     *uint16\n\tData     *PARAMDATA\n\tDispid   int32\n\tMeth     uint32\n\tCC       int32\n\tCArgs    uint32\n\tFlags    uint16\n\tVtReturn uint32\n}\n\n// INTERFACEDATA defines interface info.\ntype INTERFACEDATA struct {\n\tMethodData *METHODDATA\n\tCMembers   uint32\n}\n\n// Point is 2D vector type.\ntype Point struct {\n\tX int32\n\tY int32\n}\n\n// Msg is message between processes.\ntype Msg struct {\n\tHwnd    uint32\n\tMessage uint32\n\tWparam  int32\n\tLparam  int32\n\tTime    uint32\n\tPt      Point\n}\n\n// TYPEDESC defines data type.\ntype TYPEDESC struct {\n\tHreftype uint32\n\tVT       uint16\n}\n\n// IDLDESC defines IDL info.\ntype IDLDESC struct {\n\tDwReserved uint32\n\tWIDLFlags  uint16\n}\n\n// TYPEATTR defines type info.\ntype TYPEATTR struct {\n\tGuid             GUID\n\tLcid             uint32\n\tdwReserved       uint32\n\tMemidConstructor int32\n\tMemidDestructor  int32\n\tLpstrSchema      *uint16\n\tCbSizeInstance   uint32\n\tTypekind         int32\n\tCFuncs           uint16\n\tCVars            uint16\n\tCImplTypes       uint16\n\tCbSizeVft        uint16\n\tCbAlignment      uint16\n\tWTypeFlags       uint16\n\tWMajorVerNum     uint16\n\tWMinorVerNum     uint16\n\tTdescAlias       TYPEDESC\n\tIdldescType      IDLDESC\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/connection.go",
    "content": "// +build windows\n\npackage oleutil\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n\n\tole \"github.com/go-ole/go-ole\"\n)\n\ntype stdDispatch struct {\n\tlpVtbl  *stdDispatchVtbl\n\tref     int32\n\tiid     *ole.GUID\n\tiface   interface{}\n\tfuncMap map[string]int32\n}\n\ntype stdDispatchVtbl struct {\n\tpQueryInterface   uintptr\n\tpAddRef           uintptr\n\tpRelease          uintptr\n\tpGetTypeInfoCount uintptr\n\tpGetTypeInfo      uintptr\n\tpGetIDsOfNames    uintptr\n\tpInvoke           uintptr\n}\n\nfunc dispQueryInterface(this *ole.IUnknown, iid *ole.GUID, punk **ole.IUnknown) uint32 {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\t*punk = nil\n\tif ole.IsEqualGUID(iid, ole.IID_IUnknown) ||\n\t\tole.IsEqualGUID(iid, ole.IID_IDispatch) {\n\t\tdispAddRef(this)\n\t\t*punk = this\n\t\treturn ole.S_OK\n\t}\n\tif ole.IsEqualGUID(iid, pthis.iid) {\n\t\tdispAddRef(this)\n\t\t*punk = this\n\t\treturn ole.S_OK\n\t}\n\treturn ole.E_NOINTERFACE\n}\n\nfunc dispAddRef(this *ole.IUnknown) int32 {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tpthis.ref++\n\treturn pthis.ref\n}\n\nfunc dispRelease(this *ole.IUnknown) int32 {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tpthis.ref--\n\treturn pthis.ref\n}\n\nfunc dispGetIDsOfNames(this *ole.IUnknown, iid *ole.GUID, wnames []*uint16, namelen int, lcid int, pdisp []int32) uintptr {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tnames := make([]string, len(wnames))\n\tfor i := 0; i < len(names); i++ {\n\t\tnames[i] = ole.LpOleStrToString(wnames[i])\n\t}\n\tfor n := 0; n < namelen; n++ {\n\t\tif id, ok := pthis.funcMap[names[n]]; ok {\n\t\t\tpdisp[n] = id\n\t\t}\n\t}\n\treturn ole.S_OK\n}\n\nfunc dispGetTypeInfoCount(pcount *int) uintptr {\n\tif pcount != nil {\n\t\t*pcount = 0\n\t}\n\treturn ole.S_OK\n}\n\nfunc dispGetTypeInfo(ptypeif *uintptr) uintptr {\n\treturn ole.E_NOTIMPL\n}\n\nfunc dispInvoke(this *ole.IDispatch, dispid int32, riid *ole.GUID, lcid int, flags int16, dispparams *ole.DISPPARAMS, result *ole.VARIANT, pexcepinfo *ole.EXCEPINFO, nerr *uint) uintptr {\n\tpthis := (*stdDispatch)(unsafe.Pointer(this))\n\tfound := \"\"\n\tfor name, id := range pthis.funcMap {\n\t\tif id == dispid {\n\t\t\tfound = name\n\t\t}\n\t}\n\tif found != \"\" {\n\t\trv := reflect.ValueOf(pthis.iface).Elem()\n\t\trm := rv.MethodByName(found)\n\t\trr := rm.Call([]reflect.Value{})\n\t\tprintln(len(rr))\n\t\treturn ole.S_OK\n\t}\n\treturn ole.E_NOTIMPL\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/connection_func.go",
    "content": "// +build !windows\n\npackage oleutil\n\nimport ole \"github.com/go-ole/go-ole\"\n\n// ConnectObject creates a connection point between two services for communication.\nfunc ConnectObject(disp *ole.IDispatch, iid *ole.GUID, idisp interface{}) (uint32, error) {\n\treturn 0, ole.NewError(ole.E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/connection_windows.go",
    "content": "// +build windows\n\npackage oleutil\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tole \"github.com/go-ole/go-ole\"\n)\n\n// ConnectObject creates a connection point between two services for communication.\nfunc ConnectObject(disp *ole.IDispatch, iid *ole.GUID, idisp interface{}) (cookie uint32, err error) {\n\tunknown, err := disp.QueryInterface(ole.IID_IConnectionPointContainer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tcontainer := (*ole.IConnectionPointContainer)(unsafe.Pointer(unknown))\n\tvar point *ole.IConnectionPoint\n\terr = container.FindConnectionPoint(iid, &point)\n\tif err != nil {\n\t\treturn\n\t}\n\tif edisp, ok := idisp.(*ole.IUnknown); ok {\n\t\tcookie, err = point.Advise(edisp)\n\t\tcontainer.Release()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\trv := reflect.ValueOf(disp).Elem()\n\tif rv.Type().Kind() == reflect.Struct {\n\t\tdest := &stdDispatch{}\n\t\tdest.lpVtbl = &stdDispatchVtbl{}\n\t\tdest.lpVtbl.pQueryInterface = syscall.NewCallback(dispQueryInterface)\n\t\tdest.lpVtbl.pAddRef = syscall.NewCallback(dispAddRef)\n\t\tdest.lpVtbl.pRelease = syscall.NewCallback(dispRelease)\n\t\tdest.lpVtbl.pGetTypeInfoCount = syscall.NewCallback(dispGetTypeInfoCount)\n\t\tdest.lpVtbl.pGetTypeInfo = syscall.NewCallback(dispGetTypeInfo)\n\t\tdest.lpVtbl.pGetIDsOfNames = syscall.NewCallback(dispGetIDsOfNames)\n\t\tdest.lpVtbl.pInvoke = syscall.NewCallback(dispInvoke)\n\t\tdest.iface = disp\n\t\tdest.iid = iid\n\t\tcookie, err = point.Advise((*ole.IUnknown)(unsafe.Pointer(dest)))\n\t\tcontainer.Release()\n\t\tif err != nil {\n\t\t\tpoint.Release()\n\t\t\treturn\n\t\t}\n\t\treturn\n\t}\n\n\tcontainer.Release()\n\n\treturn 0, ole.NewError(ole.E_INVALIDARG)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/go-get.go",
    "content": "// This file is here so go get succeeds as without it errors with:\n// no buildable Go source files in ...\n//\n// +build !windows\n\npackage oleutil\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/oleutil/oleutil.go",
    "content": "package oleutil\n\nimport ole \"github.com/go-ole/go-ole\"\n\n// ClassIDFrom retrieves class ID whether given is program ID or application string.\nfunc ClassIDFrom(programID string) (classID *ole.GUID, err error) {\n\treturn ole.ClassIDFrom(programID)\n}\n\n// CreateObject creates object from programID based on interface type.\n//\n// Only supports IUnknown.\n//\n// Program ID can be either program ID or application string.\nfunc CreateObject(programID string) (unknown *ole.IUnknown, err error) {\n\tclassID, err := ole.ClassIDFrom(programID)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tunknown, err = ole.CreateInstance(classID, ole.IID_IUnknown)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn\n}\n\n// GetActiveObject retrieves active object for program ID and interface ID based\n// on interface type.\n//\n// Only supports IUnknown.\n//\n// Program ID can be either program ID or application string.\nfunc GetActiveObject(programID string) (unknown *ole.IUnknown, err error) {\n\tclassID, err := ole.ClassIDFrom(programID)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tunknown, err = ole.GetActiveObject(classID, ole.IID_IUnknown)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn\n}\n\n// CallMethod calls method on IDispatch with parameters.\nfunc CallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {\n\treturn disp.InvokeWithOptionalArgs(name, ole.DISPATCH_METHOD, params)\n}\n\n// MustCallMethod calls method on IDispatch with parameters or panics.\nfunc MustCallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {\n\tr, err := CallMethod(disp, name, params...)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn r\n}\n\n// GetProperty retrieves property from IDispatch.\nfunc GetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {\n\treturn disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYGET, params)\n}\n\n// MustGetProperty retrieves property from IDispatch or panics.\nfunc MustGetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {\n\tr, err := GetProperty(disp, name, params...)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn r\n}\n\n// PutProperty mutates property.\nfunc PutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {\n\treturn disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYPUT, params)\n}\n\n// MustPutProperty mutates property or panics.\nfunc MustPutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {\n\tr, err := PutProperty(disp, name, params...)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn r\n}\n\n// PutPropertyRef mutates property reference.\nfunc PutPropertyRef(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {\n\treturn disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYPUTREF, params)\n}\n\n// MustPutPropertyRef mutates property reference or panics.\nfunc MustPutPropertyRef(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {\n\tr, err := PutPropertyRef(disp, name, params...)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn r\n}\n\nfunc ForEach(disp *ole.IDispatch, f func(v *ole.VARIANT) error) error {\n\tnewEnum, err := disp.GetProperty(\"_NewEnum\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer newEnum.Clear()\n\n\tenum, err := newEnum.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer enum.Release()\n\n\tfor item, length, err := enum.Next(1); length > 0; item, length, err = enum.Next(1) {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif ferr := f(&item); ferr != nil {\n\t\t\treturn ferr\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearray.go",
    "content": "// Package is meant to retrieve and process safe array data returned from COM.\n\npackage ole\n\n// SafeArrayBound defines the SafeArray boundaries.\ntype SafeArrayBound struct {\n\tElements   uint32\n\tLowerBound int32\n}\n\n// SafeArray is how COM handles arrays.\ntype SafeArray struct {\n\tDimensions   uint16\n\tFeaturesFlag uint16\n\tElementsSize uint32\n\tLocksAmount  uint32\n\tData         uint32\n\tBounds       [16]byte\n}\n\n// SAFEARRAY is obsolete, exists for backwards compatibility.\n// Use SafeArray\ntype SAFEARRAY SafeArray\n\n// SAFEARRAYBOUND is obsolete, exists for backwards compatibility.\n// Use SafeArrayBound\ntype SAFEARRAYBOUND SafeArrayBound\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearray_func.go",
    "content": "// +build !windows\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\n// safeArrayAccessData returns raw array pointer.\n//\n// AKA: SafeArrayAccessData in Windows API.\nfunc safeArrayAccessData(safearray *SafeArray) (uintptr, error) {\n\treturn uintptr(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayUnaccessData releases raw array.\n//\n// AKA: SafeArrayUnaccessData in Windows API.\nfunc safeArrayUnaccessData(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayAllocData allocates SafeArray.\n//\n// AKA: SafeArrayAllocData in Windows API.\nfunc safeArrayAllocData(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayAllocDescriptor allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptor in Windows API.\nfunc safeArrayAllocDescriptor(dimensions uint32) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayAllocDescriptorEx allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptorEx in Windows API.\nfunc safeArrayAllocDescriptorEx(variantType VT, dimensions uint32) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCopy returns copy of SafeArray.\n//\n// AKA: SafeArrayCopy in Windows API.\nfunc safeArrayCopy(original *SafeArray) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCopyData duplicates SafeArray into another SafeArray object.\n//\n// AKA: SafeArrayCopyData in Windows API.\nfunc safeArrayCopyData(original *SafeArray, duplicate *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayCreate creates SafeArray.\n//\n// AKA: SafeArrayCreate in Windows API.\nfunc safeArrayCreate(variantType VT, dimensions uint32, bounds *SafeArrayBound) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCreateEx creates SafeArray.\n//\n// AKA: SafeArrayCreateEx in Windows API.\nfunc safeArrayCreateEx(variantType VT, dimensions uint32, bounds *SafeArrayBound, extra uintptr) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCreateVector creates SafeArray.\n//\n// AKA: SafeArrayCreateVector in Windows API.\nfunc safeArrayCreateVector(variantType VT, lowerBound int32, length uint32) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayCreateVectorEx creates SafeArray.\n//\n// AKA: SafeArrayCreateVectorEx in Windows API.\nfunc safeArrayCreateVectorEx(variantType VT, lowerBound int32, length uint32, extra uintptr) (*SafeArray, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayDestroy destroys SafeArray object.\n//\n// AKA: SafeArrayDestroy in Windows API.\nfunc safeArrayDestroy(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayDestroyData destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyData in Windows API.\nfunc safeArrayDestroyData(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayDestroyDescriptor destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyDescriptor in Windows API.\nfunc safeArrayDestroyDescriptor(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayGetDim is the amount of dimensions in the SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetDim in Windows API.\nfunc safeArrayGetDim(safearray *SafeArray) (*uint32, error) {\n\tu := uint32(0)\n\treturn &u, NewError(E_NOTIMPL)\n}\n\n// safeArrayGetElementSize is the element size in bytes.\n//\n// AKA: SafeArrayGetElemsize in Windows API.\nfunc safeArrayGetElementSize(safearray *SafeArray) (*uint32, error) {\n\tu := uint32(0)\n\treturn &u, NewError(E_NOTIMPL)\n}\n\n// safeArrayGetElement retrieves element at given index.\nfunc safeArrayGetElement(safearray *SafeArray, index int32, pv unsafe.Pointer) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayGetElement retrieves element at given index and converts to string.\nfunc safeArrayGetElementString(safearray *SafeArray, index int32) (string, error) {\n\treturn \"\", NewError(E_NOTIMPL)\n}\n\n// safeArrayGetIID is the InterfaceID of the elements in the SafeArray.\n//\n// AKA: SafeArrayGetIID in Windows API.\nfunc safeArrayGetIID(safearray *SafeArray) (*GUID, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArrayGetLBound returns lower bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetLBound in Windows API.\nfunc safeArrayGetLBound(safearray *SafeArray, dimension uint32) (int32, error) {\n\treturn int32(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayGetUBound returns upper bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetUBound in Windows API.\nfunc safeArrayGetUBound(safearray *SafeArray, dimension uint32) (int32, error) {\n\treturn int32(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayGetVartype returns data type of SafeArray.\n//\n// AKA: SafeArrayGetVartype in Windows API.\nfunc safeArrayGetVartype(safearray *SafeArray) (uint16, error) {\n\treturn uint16(0), NewError(E_NOTIMPL)\n}\n\n// safeArrayLock locks SafeArray for reading to modify SafeArray.\n//\n// This must be called during some calls to ensure that another process does not\n// read or write to the SafeArray during editing.\n//\n// AKA: SafeArrayLock in Windows API.\nfunc safeArrayLock(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayUnlock unlocks SafeArray for reading.\n//\n// AKA: SafeArrayUnlock in Windows API.\nfunc safeArrayUnlock(safearray *SafeArray) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayPutElement stores the data element at the specified location in the\n// array.\n//\n// AKA: SafeArrayPutElement in Windows API.\nfunc safeArrayPutElement(safearray *SafeArray, index int64, element uintptr) error {\n\treturn NewError(E_NOTIMPL)\n}\n\n// safeArrayGetRecordInfo accesses IRecordInfo info for custom types.\n//\n// AKA: SafeArrayGetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArrayGetRecordInfo(safearray *SafeArray) (interface{}, error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// safeArraySetRecordInfo mutates IRecordInfo info for custom types.\n//\n// AKA: SafeArraySetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArraySetRecordInfo(safearray *SafeArray, recordInfo interface{}) error {\n\treturn NewError(E_NOTIMPL)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearray_windows.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\nvar (\n\tprocSafeArrayAccessData        = modoleaut32.NewProc(\"SafeArrayAccessData\")\n\tprocSafeArrayAllocData         = modoleaut32.NewProc(\"SafeArrayAllocData\")\n\tprocSafeArrayAllocDescriptor   = modoleaut32.NewProc(\"SafeArrayAllocDescriptor\")\n\tprocSafeArrayAllocDescriptorEx = modoleaut32.NewProc(\"SafeArrayAllocDescriptorEx\")\n\tprocSafeArrayCopy              = modoleaut32.NewProc(\"SafeArrayCopy\")\n\tprocSafeArrayCopyData          = modoleaut32.NewProc(\"SafeArrayCopyData\")\n\tprocSafeArrayCreate            = modoleaut32.NewProc(\"SafeArrayCreate\")\n\tprocSafeArrayCreateEx          = modoleaut32.NewProc(\"SafeArrayCreateEx\")\n\tprocSafeArrayCreateVector      = modoleaut32.NewProc(\"SafeArrayCreateVector\")\n\tprocSafeArrayCreateVectorEx    = modoleaut32.NewProc(\"SafeArrayCreateVectorEx\")\n\tprocSafeArrayDestroy           = modoleaut32.NewProc(\"SafeArrayDestroy\")\n\tprocSafeArrayDestroyData       = modoleaut32.NewProc(\"SafeArrayDestroyData\")\n\tprocSafeArrayDestroyDescriptor = modoleaut32.NewProc(\"SafeArrayDestroyDescriptor\")\n\tprocSafeArrayGetDim            = modoleaut32.NewProc(\"SafeArrayGetDim\")\n\tprocSafeArrayGetElement        = modoleaut32.NewProc(\"SafeArrayGetElement\")\n\tprocSafeArrayGetElemsize       = modoleaut32.NewProc(\"SafeArrayGetElemsize\")\n\tprocSafeArrayGetIID            = modoleaut32.NewProc(\"SafeArrayGetIID\")\n\tprocSafeArrayGetLBound         = modoleaut32.NewProc(\"SafeArrayGetLBound\")\n\tprocSafeArrayGetUBound         = modoleaut32.NewProc(\"SafeArrayGetUBound\")\n\tprocSafeArrayGetVartype        = modoleaut32.NewProc(\"SafeArrayGetVartype\")\n\tprocSafeArrayLock              = modoleaut32.NewProc(\"SafeArrayLock\")\n\tprocSafeArrayPtrOfIndex        = modoleaut32.NewProc(\"SafeArrayPtrOfIndex\")\n\tprocSafeArrayUnaccessData      = modoleaut32.NewProc(\"SafeArrayUnaccessData\")\n\tprocSafeArrayUnlock            = modoleaut32.NewProc(\"SafeArrayUnlock\")\n\tprocSafeArrayPutElement        = modoleaut32.NewProc(\"SafeArrayPutElement\")\n\t//procSafeArrayRedim             = modoleaut32.NewProc(\"SafeArrayRedim\") // TODO\n\t//procSafeArraySetIID            = modoleaut32.NewProc(\"SafeArraySetIID\") // TODO\n\tprocSafeArrayGetRecordInfo = modoleaut32.NewProc(\"SafeArrayGetRecordInfo\")\n\tprocSafeArraySetRecordInfo = modoleaut32.NewProc(\"SafeArraySetRecordInfo\")\n)\n\n// safeArrayAccessData returns raw array pointer.\n//\n// AKA: SafeArrayAccessData in Windows API.\n// Todo: Test\nfunc safeArrayAccessData(safearray *SafeArray) (element uintptr, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayAccessData.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&element))))\n\treturn\n}\n\n// safeArrayUnaccessData releases raw array.\n//\n// AKA: SafeArrayUnaccessData in Windows API.\nfunc safeArrayUnaccessData(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayUnaccessData.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayAllocData allocates SafeArray.\n//\n// AKA: SafeArrayAllocData in Windows API.\nfunc safeArrayAllocData(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayAllocData.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayAllocDescriptor allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptor in Windows API.\nfunc safeArrayAllocDescriptor(dimensions uint32) (safearray *SafeArray, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayAllocDescriptor.Call(uintptr(dimensions), uintptr(unsafe.Pointer(&safearray))))\n\treturn\n}\n\n// safeArrayAllocDescriptorEx allocates SafeArray.\n//\n// AKA: SafeArrayAllocDescriptorEx in Windows API.\nfunc safeArrayAllocDescriptorEx(variantType VT, dimensions uint32) (safearray *SafeArray, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayAllocDescriptorEx.Call(\n\t\t\tuintptr(variantType),\n\t\t\tuintptr(dimensions),\n\t\t\tuintptr(unsafe.Pointer(&safearray))))\n\treturn\n}\n\n// safeArrayCopy returns copy of SafeArray.\n//\n// AKA: SafeArrayCopy in Windows API.\nfunc safeArrayCopy(original *SafeArray) (safearray *SafeArray, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayCopy.Call(\n\t\t\tuintptr(unsafe.Pointer(original)),\n\t\t\tuintptr(unsafe.Pointer(&safearray))))\n\treturn\n}\n\n// safeArrayCopyData duplicates SafeArray into another SafeArray object.\n//\n// AKA: SafeArrayCopyData in Windows API.\nfunc safeArrayCopyData(original *SafeArray, duplicate *SafeArray) (err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayCopyData.Call(\n\t\t\tuintptr(unsafe.Pointer(original)),\n\t\t\tuintptr(unsafe.Pointer(duplicate))))\n\treturn\n}\n\n// safeArrayCreate creates SafeArray.\n//\n// AKA: SafeArrayCreate in Windows API.\nfunc safeArrayCreate(variantType VT, dimensions uint32, bounds *SafeArrayBound) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreate.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(dimensions),\n\t\tuintptr(unsafe.Pointer(bounds)))\n\tsafearray = (*SafeArray)(unsafe.Pointer(&sa))\n\treturn\n}\n\n// safeArrayCreateEx creates SafeArray.\n//\n// AKA: SafeArrayCreateEx in Windows API.\nfunc safeArrayCreateEx(variantType VT, dimensions uint32, bounds *SafeArrayBound, extra uintptr) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreateEx.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(dimensions),\n\t\tuintptr(unsafe.Pointer(bounds)),\n\t\textra)\n\tsafearray = (*SafeArray)(unsafe.Pointer(sa))\n\treturn\n}\n\n// safeArrayCreateVector creates SafeArray.\n//\n// AKA: SafeArrayCreateVector in Windows API.\nfunc safeArrayCreateVector(variantType VT, lowerBound int32, length uint32) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreateVector.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(lowerBound),\n\t\tuintptr(length))\n\tsafearray = (*SafeArray)(unsafe.Pointer(sa))\n\treturn\n}\n\n// safeArrayCreateVectorEx creates SafeArray.\n//\n// AKA: SafeArrayCreateVectorEx in Windows API.\nfunc safeArrayCreateVectorEx(variantType VT, lowerBound int32, length uint32, extra uintptr) (safearray *SafeArray, err error) {\n\tsa, _, err := procSafeArrayCreateVectorEx.Call(\n\t\tuintptr(variantType),\n\t\tuintptr(lowerBound),\n\t\tuintptr(length),\n\t\textra)\n\tsafearray = (*SafeArray)(unsafe.Pointer(sa))\n\treturn\n}\n\n// safeArrayDestroy destroys SafeArray object.\n//\n// AKA: SafeArrayDestroy in Windows API.\nfunc safeArrayDestroy(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayDestroy.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayDestroyData destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyData in Windows API.\nfunc safeArrayDestroyData(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayDestroyData.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayDestroyDescriptor destroys SafeArray object.\n//\n// AKA: SafeArrayDestroyDescriptor in Windows API.\nfunc safeArrayDestroyDescriptor(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayDestroyDescriptor.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayGetDim is the amount of dimensions in the SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetDim in Windows API.\nfunc safeArrayGetDim(safearray *SafeArray) (dimensions *uint32, err error) {\n\tl, _, err := procSafeArrayGetDim.Call(uintptr(unsafe.Pointer(safearray)))\n\tdimensions = (*uint32)(unsafe.Pointer(l))\n\treturn\n}\n\n// safeArrayGetElementSize is the element size in bytes.\n//\n// AKA: SafeArrayGetElemsize in Windows API.\nfunc safeArrayGetElementSize(safearray *SafeArray) (length *uint32, err error) {\n\tl, _, err := procSafeArrayGetElemsize.Call(uintptr(unsafe.Pointer(safearray)))\n\tlength = (*uint32)(unsafe.Pointer(l))\n\treturn\n}\n\n// safeArrayGetElement retrieves element at given index.\nfunc safeArrayGetElement(safearray *SafeArray, index int32, pv unsafe.Pointer) error {\n\treturn convertHresultToError(\n\t\tprocSafeArrayGetElement.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&index)),\n\t\t\tuintptr(pv)))\n}\n\n// safeArrayGetElementString retrieves element at given index and converts to string.\nfunc safeArrayGetElementString(safearray *SafeArray, index int32) (str string, err error) {\n\tvar element *int16\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetElement.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&index)),\n\t\t\tuintptr(unsafe.Pointer(&element))))\n\tstr = BstrToString(*(**uint16)(unsafe.Pointer(&element)))\n\tSysFreeString(element)\n\treturn\n}\n\n// safeArrayGetIID is the InterfaceID of the elements in the SafeArray.\n//\n// AKA: SafeArrayGetIID in Windows API.\nfunc safeArrayGetIID(safearray *SafeArray) (guid *GUID, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetIID.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&guid))))\n\treturn\n}\n\n// safeArrayGetLBound returns lower bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetLBound in Windows API.\nfunc safeArrayGetLBound(safearray *SafeArray, dimension uint32) (lowerBound int32, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetLBound.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(dimension),\n\t\t\tuintptr(unsafe.Pointer(&lowerBound))))\n\treturn\n}\n\n// safeArrayGetUBound returns upper bounds of SafeArray.\n//\n// SafeArrays may have multiple dimensions. Meaning, it could be\n// multidimensional array.\n//\n// AKA: SafeArrayGetUBound in Windows API.\nfunc safeArrayGetUBound(safearray *SafeArray, dimension uint32) (upperBound int32, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetUBound.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(dimension),\n\t\t\tuintptr(unsafe.Pointer(&upperBound))))\n\treturn\n}\n\n// safeArrayGetVartype returns data type of SafeArray.\n//\n// AKA: SafeArrayGetVartype in Windows API.\nfunc safeArrayGetVartype(safearray *SafeArray) (varType uint16, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetVartype.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&varType))))\n\treturn\n}\n\n// safeArrayLock locks SafeArray for reading to modify SafeArray.\n//\n// This must be called during some calls to ensure that another process does not\n// read or write to the SafeArray during editing.\n//\n// AKA: SafeArrayLock in Windows API.\nfunc safeArrayLock(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayLock.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayUnlock unlocks SafeArray for reading.\n//\n// AKA: SafeArrayUnlock in Windows API.\nfunc safeArrayUnlock(safearray *SafeArray) (err error) {\n\terr = convertHresultToError(procSafeArrayUnlock.Call(uintptr(unsafe.Pointer(safearray))))\n\treturn\n}\n\n// safeArrayPutElement stores the data element at the specified location in the\n// array.\n//\n// AKA: SafeArrayPutElement in Windows API.\nfunc safeArrayPutElement(safearray *SafeArray, index int64, element uintptr) (err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayPutElement.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&index)),\n\t\t\tuintptr(unsafe.Pointer(element))))\n\treturn\n}\n\n// safeArrayGetRecordInfo accesses IRecordInfo info for custom types.\n//\n// AKA: SafeArrayGetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArrayGetRecordInfo(safearray *SafeArray) (recordInfo interface{}, err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArrayGetRecordInfo.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&recordInfo))))\n\treturn\n}\n\n// safeArraySetRecordInfo mutates IRecordInfo info for custom types.\n//\n// AKA: SafeArraySetRecordInfo in Windows API.\n//\n// XXX: Must implement IRecordInfo interface for this to return.\nfunc safeArraySetRecordInfo(safearray *SafeArray, recordInfo interface{}) (err error) {\n\terr = convertHresultToError(\n\t\tprocSafeArraySetRecordInfo.Call(\n\t\t\tuintptr(unsafe.Pointer(safearray)),\n\t\t\tuintptr(unsafe.Pointer(&recordInfo))))\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearrayconversion.go",
    "content": "// Helper for converting SafeArray to array of objects.\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\ntype SafeArrayConversion struct {\n\tArray *SafeArray\n}\n\nfunc (sac *SafeArrayConversion) ToStringArray() (strings []string) {\n\ttotalElements, _ := sac.TotalElements(0)\n\tstrings = make([]string, totalElements)\n\n\tfor i := int32(0); i < totalElements; i++ {\n\t\tstrings[int32(i)], _ = safeArrayGetElementString(sac.Array, i)\n\t}\n\n\treturn\n}\n\nfunc (sac *SafeArrayConversion) ToByteArray() (bytes []byte) {\n\ttotalElements, _ := sac.TotalElements(0)\n\tbytes = make([]byte, totalElements)\n\n\tfor i := int32(0); i < totalElements; i++ {\n\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&bytes[int32(i)]))\n\t}\n\n\treturn\n}\n\nfunc (sac *SafeArrayConversion) ToValueArray() (values []interface{}) {\n\ttotalElements, _ := sac.TotalElements(0)\n\tvalues = make([]interface{}, totalElements)\n\tvt, _ := safeArrayGetVartype(sac.Array)\n\n\tfor i := int32(0); i < totalElements; i++ {\n\t\tswitch VT(vt) {\n\t\tcase VT_BOOL:\n\t\t\tvar v bool\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I1:\n\t\t\tvar v int8\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I2:\n\t\t\tvar v int16\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I4:\n\t\t\tvar v int32\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_I8:\n\t\t\tvar v int64\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI1:\n\t\t\tvar v uint8\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI2:\n\t\t\tvar v uint16\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI4:\n\t\t\tvar v uint32\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_UI8:\n\t\t\tvar v uint64\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_R4:\n\t\t\tvar v float32\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_R8:\n\t\t\tvar v float64\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v\n\t\tcase VT_BSTR:\n\t\t\tv , _ := safeArrayGetElementString(sac.Array, i)\n\t\t\tvalues[i] = v\n\t\tcase VT_VARIANT:\n\t\t\tvar v VARIANT\n\t\t\tsafeArrayGetElement(sac.Array, i, unsafe.Pointer(&v))\n\t\t\tvalues[i] = v.Value()\n\t\t\tv.Clear()\n\t\tdefault:\n\t\t\t// TODO\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (sac *SafeArrayConversion) GetType() (varType uint16, err error) {\n\treturn safeArrayGetVartype(sac.Array)\n}\n\nfunc (sac *SafeArrayConversion) GetDimensions() (dimensions *uint32, err error) {\n\treturn safeArrayGetDim(sac.Array)\n}\n\nfunc (sac *SafeArrayConversion) GetSize() (length *uint32, err error) {\n\treturn safeArrayGetElementSize(sac.Array)\n}\n\nfunc (sac *SafeArrayConversion) TotalElements(index uint32) (totalElements int32, err error) {\n\tif index < 1 {\n\t\tindex = 1\n\t}\n\n\t// Get array bounds\n\tvar LowerBounds int32\n\tvar UpperBounds int32\n\n\tLowerBounds, err = safeArrayGetLBound(sac.Array, index)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tUpperBounds, err = safeArrayGetUBound(sac.Array, index)\n\tif err != nil {\n\t\treturn\n\t}\n\n\ttotalElements = UpperBounds - LowerBounds + 1\n\treturn\n}\n\n// Release Safe Array memory\nfunc (sac *SafeArrayConversion) Release() {\n\tsafeArrayDestroy(sac.Array)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/safearrayslices.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"unsafe\"\n)\n\nfunc safeArrayFromByteSlice(slice []byte) *SafeArray {\n\tarray, _ := safeArrayCreateVector(VT_UI1, 0, uint32(len(slice)))\n\n\tif array == nil {\n\t\tpanic(\"Could not convert []byte to SAFEARRAY\")\n\t}\n\n\tfor i, v := range slice {\n\t\tsafeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(&v)))\n\t}\n\treturn array\n}\n\nfunc safeArrayFromStringSlice(slice []string) *SafeArray {\n\tarray, _ := safeArrayCreateVector(VT_BSTR, 0, uint32(len(slice)))\n\n\tif array == nil {\n\t\tpanic(\"Could not convert []string to SAFEARRAY\")\n\t}\n\t// SysAllocStringLen(s)\n\tfor i, v := range slice {\n\t\tsafeArrayPutElement(array, int64(i), uintptr(unsafe.Pointer(SysAllocStringLen(v))))\n\t}\n\treturn array\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/utility.go",
    "content": "package ole\n\nimport (\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\n// ClassIDFrom retrieves class ID whether given is program ID or application string.\n//\n// Helper that provides check against both Class ID from Program ID and Class ID from string. It is\n// faster, if you know which you are using, to use the individual functions, but this will check\n// against available functions for you.\nfunc ClassIDFrom(programID string) (classID *GUID, err error) {\n\tclassID, err = CLSIDFromProgID(programID)\n\tif err != nil {\n\t\tclassID, err = CLSIDFromString(programID)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// BytePtrToString converts byte pointer to a Go string.\nfunc BytePtrToString(p *byte) string {\n\ta := (*[10000]uint8)(unsafe.Pointer(p))\n\ti := 0\n\tfor a[i] != 0 {\n\t\ti++\n\t}\n\treturn string(a[:i])\n}\n\n// UTF16PtrToString is alias for LpOleStrToString.\n//\n// Kept for compatibility reasons.\nfunc UTF16PtrToString(p *uint16) string {\n\treturn LpOleStrToString(p)\n}\n\n// LpOleStrToString converts COM Unicode to Go string.\nfunc LpOleStrToString(p *uint16) string {\n\tif p == nil {\n\t\treturn \"\"\n\t}\n\n\tlength := lpOleStrLen(p)\n\ta := make([]uint16, length)\n\n\tptr := unsafe.Pointer(p)\n\n\tfor i := 0; i < int(length); i++ {\n\t\ta[i] = *(*uint16)(ptr)\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 2)\n\t}\n\n\treturn string(utf16.Decode(a))\n}\n\n// BstrToString converts COM binary string to Go string.\nfunc BstrToString(p *uint16) string {\n\tif p == nil {\n\t\treturn \"\"\n\t}\n\tlength := SysStringLen((*int16)(unsafe.Pointer(p)))\n\ta := make([]uint16, length)\n\n\tptr := unsafe.Pointer(p)\n\n\tfor i := 0; i < int(length); i++ {\n\t\ta[i] = *(*uint16)(ptr)\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 2)\n\t}\n\treturn string(utf16.Decode(a))\n}\n\n// lpOleStrLen returns the length of Unicode string.\nfunc lpOleStrLen(p *uint16) (length int64) {\n\tif p == nil {\n\t\treturn 0\n\t}\n\n\tptr := unsafe.Pointer(p)\n\n\tfor i := 0; ; i++ {\n\t\tif 0 == *(*uint16)(ptr) {\n\t\t\tlength = int64(i)\n\t\t\tbreak\n\t\t}\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 2)\n\t}\n\treturn\n}\n\n// convertHresultToError converts syscall to error, if call is unsuccessful.\nfunc convertHresultToError(hr uintptr, r2 uintptr, ignore error) (err error) {\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variables.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"golang.org/x/sys/windows\"\n)\n\nvar (\n\tmodcombase  = windows.NewLazySystemDLL(\"combase.dll\")\n\tmodkernel32 = windows.NewLazySystemDLL(\"kernel32.dll\")\n\tmodole32    = windows.NewLazySystemDLL(\"ole32.dll\")\n\tmodoleaut32 = windows.NewLazySystemDLL(\"oleaut32.dll\")\n\tmoduser32   = windows.NewLazySystemDLL(\"user32.dll\")\n)\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant.go",
    "content": "package ole\n\nimport \"unsafe\"\n\n// NewVariant returns new variant based on type and value.\nfunc NewVariant(vt VT, val int64) VARIANT {\n\treturn VARIANT{VT: vt, Val: val}\n}\n\n// ToIUnknown converts Variant to Unknown object.\nfunc (v *VARIANT) ToIUnknown() *IUnknown {\n\tif v.VT != VT_UNKNOWN {\n\t\treturn nil\n\t}\n\treturn (*IUnknown)(unsafe.Pointer(uintptr(v.Val)))\n}\n\n// ToIDispatch converts variant to dispatch object.\nfunc (v *VARIANT) ToIDispatch() *IDispatch {\n\tif v.VT != VT_DISPATCH {\n\t\treturn nil\n\t}\n\treturn (*IDispatch)(unsafe.Pointer(uintptr(v.Val)))\n}\n\n// ToArray converts variant to SafeArray helper.\nfunc (v *VARIANT) ToArray() *SafeArrayConversion {\n\tif v.VT != VT_SAFEARRAY {\n\t\tif v.VT&VT_ARRAY == 0 {\n\t\t\treturn nil\n\t\t}\n\t}\n\tvar safeArray *SafeArray = (*SafeArray)(unsafe.Pointer(uintptr(v.Val)))\n\treturn &SafeArrayConversion{safeArray}\n}\n\n// ToString converts variant to Go string.\nfunc (v *VARIANT) ToString() string {\n\tif v.VT != VT_BSTR {\n\t\treturn \"\"\n\t}\n\treturn BstrToString(*(**uint16)(unsafe.Pointer(&v.Val)))\n}\n\n// Clear the memory of variant object.\nfunc (v *VARIANT) Clear() error {\n\treturn VariantClear(v)\n}\n\n// Value returns variant value based on its type.\n//\n// Currently supported types: 2- and 4-byte integers, strings, bools.\n// Note that 64-bit integers, datetimes, and other types are stored as strings\n// and will be returned as strings.\n//\n// Needs to be further converted, because this returns an interface{}.\nfunc (v *VARIANT) Value() interface{} {\n\tswitch v.VT {\n\tcase VT_I1:\n\t\treturn int8(v.Val)\n\tcase VT_UI1:\n\t\treturn uint8(v.Val)\n\tcase VT_I2:\n\t\treturn int16(v.Val)\n\tcase VT_UI2:\n\t\treturn uint16(v.Val)\n\tcase VT_I4:\n\t\treturn int32(v.Val)\n\tcase VT_UI4:\n\t\treturn uint32(v.Val)\n\tcase VT_I8:\n\t\treturn int64(v.Val)\n\tcase VT_UI8:\n\t\treturn uint64(v.Val)\n\tcase VT_INT:\n\t\treturn int(v.Val)\n\tcase VT_UINT:\n\t\treturn uint(v.Val)\n\tcase VT_INT_PTR:\n\t\treturn uintptr(v.Val) // TODO\n\tcase VT_UINT_PTR:\n\t\treturn uintptr(v.Val)\n\tcase VT_R4:\n\t\treturn *(*float32)(unsafe.Pointer(&v.Val))\n\tcase VT_R8:\n\t\treturn *(*float64)(unsafe.Pointer(&v.Val))\n\tcase VT_BSTR:\n\t\treturn v.ToString()\n\tcase VT_DATE:\n\t\t// VT_DATE type will either return float64 or time.Time.\n\t\td := uint64(v.Val)\n\t\tdate, err := GetVariantDate(d)\n\t\tif err != nil {\n\t\t\treturn float64(v.Val)\n\t\t}\n\t\treturn date\n\tcase VT_UNKNOWN:\n\t\treturn v.ToIUnknown()\n\tcase VT_DISPATCH:\n\t\treturn v.ToIDispatch()\n\tcase VT_BOOL:\n\t\treturn v.Val != 0\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_386.go",
    "content": "// +build 386\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT     //  2\n\twReserved1 uint16 //  4\n\twReserved2 uint16 //  6\n\twReserved3 uint16 //  8\n\tVal        int64  // 16\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_amd64.go",
    "content": "// +build amd64\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT      //  2\n\twReserved1 uint16  //  4\n\twReserved2 uint16  //  6\n\twReserved3 uint16  //  8\n\tVal        int64   // 16\n\t_          [8]byte // 24\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_arm.go",
    "content": "// +build arm\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT     //  2\n\twReserved1 uint16 //  4\n\twReserved2 uint16 //  6\n\twReserved3 uint16 //  8\n\tVal        int64  // 16\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_arm64.go",
    "content": "//go:build arm64\n// +build arm64\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT      //  2\n\twReserved1 uint16  //  4\n\twReserved2 uint16  //  6\n\twReserved3 uint16  //  8\n\tVal        int64   // 16\n\t_          [8]byte // 24\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_date_386.go",
    "content": "// +build windows,386\n\npackage ole\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\n// GetVariantDate converts COM Variant Time value to Go time.Time.\nfunc GetVariantDate(value uint64) (time.Time, error) {\n\tvar st syscall.Systemtime\n\tv1 := uint32(value)\n\tv2 := uint32(value >> 32)\n\tr, _, _ := procVariantTimeToSystemTime.Call(uintptr(v1), uintptr(v2), uintptr(unsafe.Pointer(&st)))\n\tif r != 0 {\n\t\treturn time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil\n\t}\n\treturn time.Now(), errors.New(\"Could not convert to time, passing current time.\")\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_date_amd64.go",
    "content": "// +build windows,amd64\n\npackage ole\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\n// GetVariantDate converts COM Variant Time value to Go time.Time.\nfunc GetVariantDate(value uint64) (time.Time, error) {\n\tvar st syscall.Systemtime\n\tr, _, _ := procVariantTimeToSystemTime.Call(uintptr(value), uintptr(unsafe.Pointer(&st)))\n\tif r != 0 {\n\t\treturn time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil\n\t}\n\treturn time.Now(), errors.New(\"Could not convert to time, passing current time.\")\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_date_arm.go",
    "content": "// +build windows,arm\n\npackage ole\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\n// GetVariantDate converts COM Variant Time value to Go time.Time.\nfunc GetVariantDate(value uint64) (time.Time, error) {\n\tvar st syscall.Systemtime\n\tv1 := uint32(value)\n\tv2 := uint32(value >> 32)\n\tr, _, _ := procVariantTimeToSystemTime.Call(uintptr(v1), uintptr(v2), uintptr(unsafe.Pointer(&st)))\n\tif r != 0 {\n\t\treturn time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil\n\t}\n\treturn time.Now(), errors.New(\"Could not convert to time, passing current time.\")\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_date_arm64.go",
    "content": "//go:build windows && arm64\n// +build windows,arm64\n\npackage ole\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\n// GetVariantDate converts COM Variant Time value to Go time.Time.\nfunc GetVariantDate(value uint64) (time.Time, error) {\n\tvar st syscall.Systemtime\n\tv1 := uint32(value)\n\tv2 := uint32(value >> 32)\n\tr, _, _ := procVariantTimeToSystemTime.Call(uintptr(v1), uintptr(v2), uintptr(unsafe.Pointer(&st)))\n\tif r != 0 {\n\t\treturn time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil\n\t}\n\treturn time.Now(), errors.New(\"Could not convert to time, passing current time.\")\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_ppc64le.go",
    "content": "// +build ppc64le\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT      //  2\n\twReserved1 uint16  //  4\n\twReserved2 uint16  //  6\n\twReserved3 uint16  //  8\n\tVal        int64   // 16\n\t_          [8]byte // 24\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/variant_s390x.go",
    "content": "// +build s390x\n\npackage ole\n\ntype VARIANT struct {\n\tVT         VT      //  2\n\twReserved1 uint16  //  4\n\twReserved2 uint16  //  6\n\twReserved3 uint16  //  8\n\tVal        int64   // 16\n\t_          [8]byte // 24\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/vt_string.go",
    "content": "// generated by stringer -output vt_string.go -type VT; DO NOT EDIT\n\npackage ole\n\nimport \"fmt\"\n\nconst (\n\t_VT_name_0 = \"VT_EMPTYVT_NULLVT_I2VT_I4VT_R4VT_R8VT_CYVT_DATEVT_BSTRVT_DISPATCHVT_ERRORVT_BOOLVT_VARIANTVT_UNKNOWNVT_DECIMAL\"\n\t_VT_name_1 = \"VT_I1VT_UI1VT_UI2VT_UI4VT_I8VT_UI8VT_INTVT_UINTVT_VOIDVT_HRESULTVT_PTRVT_SAFEARRAYVT_CARRAYVT_USERDEFINEDVT_LPSTRVT_LPWSTR\"\n\t_VT_name_2 = \"VT_RECORDVT_INT_PTRVT_UINT_PTR\"\n\t_VT_name_3 = \"VT_FILETIMEVT_BLOBVT_STREAMVT_STORAGEVT_STREAMED_OBJECTVT_STORED_OBJECTVT_BLOB_OBJECTVT_CFVT_CLSID\"\n\t_VT_name_4 = \"VT_BSTR_BLOBVT_VECTOR\"\n\t_VT_name_5 = \"VT_ARRAY\"\n\t_VT_name_6 = \"VT_BYREF\"\n\t_VT_name_7 = \"VT_RESERVED\"\n\t_VT_name_8 = \"VT_ILLEGAL\"\n)\n\nvar (\n\t_VT_index_0 = [...]uint8{0, 8, 15, 20, 25, 30, 35, 40, 47, 54, 65, 73, 80, 90, 100, 110}\n\t_VT_index_1 = [...]uint8{0, 5, 11, 17, 23, 28, 34, 40, 47, 54, 64, 70, 82, 91, 105, 113, 122}\n\t_VT_index_2 = [...]uint8{0, 9, 19, 30}\n\t_VT_index_3 = [...]uint8{0, 11, 18, 27, 37, 55, 71, 85, 90, 98}\n\t_VT_index_4 = [...]uint8{0, 12, 21}\n\t_VT_index_5 = [...]uint8{0, 8}\n\t_VT_index_6 = [...]uint8{0, 8}\n\t_VT_index_7 = [...]uint8{0, 11}\n\t_VT_index_8 = [...]uint8{0, 10}\n)\n\nfunc (i VT) String() string {\n\tswitch {\n\tcase 0 <= i && i <= 14:\n\t\treturn _VT_name_0[_VT_index_0[i]:_VT_index_0[i+1]]\n\tcase 16 <= i && i <= 31:\n\t\ti -= 16\n\t\treturn _VT_name_1[_VT_index_1[i]:_VT_index_1[i+1]]\n\tcase 36 <= i && i <= 38:\n\t\ti -= 36\n\t\treturn _VT_name_2[_VT_index_2[i]:_VT_index_2[i+1]]\n\tcase 64 <= i && i <= 72:\n\t\ti -= 64\n\t\treturn _VT_name_3[_VT_index_3[i]:_VT_index_3[i+1]]\n\tcase 4095 <= i && i <= 4096:\n\t\ti -= 4095\n\t\treturn _VT_name_4[_VT_index_4[i]:_VT_index_4[i+1]]\n\tcase i == 8192:\n\t\treturn _VT_name_5\n\tcase i == 16384:\n\t\treturn _VT_name_6\n\tcase i == 32768:\n\t\treturn _VT_name_7\n\tcase i == 65535:\n\t\treturn _VT_name_8\n\tdefault:\n\t\treturn fmt.Sprintf(\"VT(%d)\", i)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/winrt.go",
    "content": "// +build windows\n\npackage ole\n\nimport (\n\t\"reflect\"\n\t\"syscall\"\n\t\"unicode/utf8\"\n\t\"unsafe\"\n)\n\nvar (\n\tprocRoInitialize              = modcombase.NewProc(\"RoInitialize\")\n\tprocRoActivateInstance        = modcombase.NewProc(\"RoActivateInstance\")\n\tprocRoGetActivationFactory    = modcombase.NewProc(\"RoGetActivationFactory\")\n\tprocWindowsCreateString       = modcombase.NewProc(\"WindowsCreateString\")\n\tprocWindowsDeleteString       = modcombase.NewProc(\"WindowsDeleteString\")\n\tprocWindowsGetStringRawBuffer = modcombase.NewProc(\"WindowsGetStringRawBuffer\")\n)\n\nfunc RoInitialize(thread_type uint32) (err error) {\n\thr, _, _ := procRoInitialize.Call(uintptr(thread_type))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc RoActivateInstance(clsid string) (ins *IInspectable, err error) {\n\thClsid, err := NewHString(clsid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer DeleteHString(hClsid)\n\n\thr, _, _ := procRoActivateInstance.Call(\n\t\tuintptr(unsafe.Pointer(hClsid)),\n\t\tuintptr(unsafe.Pointer(&ins)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\nfunc RoGetActivationFactory(clsid string, iid *GUID) (ins *IInspectable, err error) {\n\thClsid, err := NewHString(clsid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer DeleteHString(hClsid)\n\n\thr, _, _ := procRoGetActivationFactory.Call(\n\t\tuintptr(unsafe.Pointer(hClsid)),\n\t\tuintptr(unsafe.Pointer(iid)),\n\t\tuintptr(unsafe.Pointer(&ins)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// HString is handle string for pointers.\ntype HString uintptr\n\n// NewHString returns a new HString for Go string.\nfunc NewHString(s string) (hstring HString, err error) {\n\tu16 := syscall.StringToUTF16Ptr(s)\n\tlen := uint32(utf8.RuneCountInString(s))\n\thr, _, _ := procWindowsCreateString.Call(\n\t\tuintptr(unsafe.Pointer(u16)),\n\t\tuintptr(len),\n\t\tuintptr(unsafe.Pointer(&hstring)))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// DeleteHString deletes HString.\nfunc DeleteHString(hstring HString) (err error) {\n\thr, _, _ := procWindowsDeleteString.Call(uintptr(hstring))\n\tif hr != 0 {\n\t\terr = NewError(hr)\n\t}\n\treturn\n}\n\n// String returns Go string value of HString.\nfunc (h HString) String() string {\n\tvar u16buf uintptr\n\tvar u16len uint32\n\tu16buf, _, _ = procWindowsGetStringRawBuffer.Call(\n\t\tuintptr(h),\n\t\tuintptr(unsafe.Pointer(&u16len)))\n\n\tu16hdr := reflect.SliceHeader{Data: u16buf, Len: int(u16len), Cap: int(u16len)}\n\tu16 := *(*[]uint16)(unsafe.Pointer(&u16hdr))\n\treturn syscall.UTF16ToString(u16)\n}\n"
  },
  {
    "path": "vendor/github.com/go-ole/go-ole/winrt_doc.go",
    "content": "// +build !windows\n\npackage ole\n\n// RoInitialize\nfunc RoInitialize(thread_type uint32) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n\n// RoActivateInstance\nfunc RoActivateInstance(clsid string) (ins *IInspectable, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// RoGetActivationFactory\nfunc RoGetActivationFactory(clsid string, iid *GUID) (ins *IInspectable, err error) {\n\treturn nil, NewError(E_NOTIMPL)\n}\n\n// HString is handle string for pointers.\ntype HString uintptr\n\n// NewHString returns a new HString for Go string.\nfunc NewHString(s string) (hstring HString, err error) {\n\treturn HString(uintptr(0)), NewError(E_NOTIMPL)\n}\n\n// DeleteHString deletes HString.\nfunc DeleteHString(hstring HString) (err error) {\n\treturn NewError(E_NOTIMPL)\n}\n\n// String returns Go string value of HString.\nfunc (h HString) String() string {\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/.gitignore",
    "content": ".DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\nIcon?\nehthumbs.db\nThumbs.db\n.idea\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/AUTHORS",
    "content": "# This is the official list of Go-MySQL-Driver authors for copyright purposes.\n\n# If you are submitting a patch, please add your name or the name of the\n# organization which holds the copyright to this list in alphabetical order.\n\n# Names should be added to this file as\n#\tName <email address>\n# The email address is not required for organizations.\n# Please keep the list sorted.\n\n\n# Individual Persons\n\nAaron Hopkins <go-sql-driver at die.net>\nAchille Roussel <achille.roussel at gmail.com>\nAidan <aidan.liu at pingcap.com>\nAlex Snast <alexsn at fb.com>\nAlexey Palazhchenko <alexey.palazhchenko at gmail.com>\nAndrew Reid <andrew.reid at tixtrack.com>\nAnimesh Ray <mail.rayanimesh at gmail.com>\nArne Hormann <arnehormann at gmail.com>\nAriel Mashraki <ariel at mashraki.co.il>\nAsta Xie <xiemengjun at gmail.com>\nBrian Hendriks <brian at dolthub.com>\nBulat Gaifullin <gaifullinbf at gmail.com>\nCaine Jette <jette at alum.mit.edu>\nCarlos Nieto <jose.carlos at menteslibres.net>\nChris Kirkland <chriskirkland at github.com>\nChris Moos <chris at tech9computers.com>\nCraig Wilson <craiggwilson at gmail.com>\nDaemonxiao <735462752 at qq.com>\nDaniel Montoya <dsmontoyam at gmail.com>\nDaniel Nichter <nil at codenode.com>\nDaniël van Eeden <git at myname.nl>\nDave Protasowski <dprotaso at gmail.com>\nDisposaBoy <disposaboy at dby.me>\nEgor Smolyakov <egorsmkv at gmail.com>\nErwan Martin <hello at erwan.io>\nEvan Elias <evan at skeema.net>\nEvan Shaw <evan at vendhq.com>\nFrederick Mayle <frederickmayle at gmail.com>\nGustavo Kristic <gkristic at gmail.com>\nGusted <postmaster at gusted.xyz>\nHajime Nakagami <nakagami at gmail.com>\nHanno Braun <mail at hannobraun.com>\nHenri Yandell <flamefew at gmail.com>\nHirotaka Yamamoto <ymmt2005 at gmail.com>\nHuyiguang <hyg at webterren.com>\nICHINOSE Shogo <shogo82148 at gmail.com>\nIlia Cimpoes <ichimpoesh at gmail.com>\nINADA Naoki <songofacandy at gmail.com>\nJacek Szwec <szwec.jacek at gmail.com>\nJames Harr <james.harr at gmail.com>\nJanek Vedock <janekvedock at comcast.net>\nJason Ng <oblitorum at gmail.com>\nJean-Yves Pellé <jy at pelle.link>\nJeff Hodges <jeff at somethingsimilar.com>\nJeffrey Charles <jeffreycharles at gmail.com>\nJennifer Purevsuren <jennifer at dolthub.com>\nJerome Meyer <jxmeyer at gmail.com>\nJiajia Zhong <zhong2plus at gmail.com>\nJian Zhen <zhenjl at gmail.com>\nJoshua Prunier <joshua.prunier at gmail.com>\nJulien Lefevre <julien.lefevr at gmail.com>\nJulien Schmidt <go-sql-driver at julienschmidt.com>\nJustin Li <jli at j-li.net>\nJustin Nuß <nuss.justin at gmail.com>\nKamil Dziedzic <kamil at klecza.pl>\nKei Kamikawa <x00.x7f.x86 at gmail.com>\nKevin Malachowski <kevin at chowski.com>\nKieron Woodhouse <kieron.woodhouse at infosum.com>\nLance Tian <lance6716 at gmail.com>\nLennart Rudolph <lrudolph at hmc.edu>\nLeonardo YongUk Kim <dalinaum at gmail.com>\nLinh Tran Tuan <linhduonggnu at gmail.com>\nLion Yang <lion at aosc.xyz>\nLuca Looz <luca.looz92 at gmail.com>\nLucas Liu <extrafliu at gmail.com>\nLunny Xiao <xiaolunwen at gmail.com>\nLuke Scott <luke at webconnex.com>\nMaciej Zimnoch <maciej.zimnoch at codilime.com>\nMichael Woolnough <michael.woolnough at gmail.com>\nNathanial Murphy <nathanial.murphy at gmail.com>\nNicola Peduzzi <thenikso at gmail.com>\nOliver Bone <owbone at github.com>\nOlivier Mengué <dolmen at cpan.org>\noscarzhao <oscarzhaosl at gmail.com>\nPaul Bonser <misterpib at gmail.com>\nPaulius Lozys <pauliuslozys at gmail.com>\nPeter Schultz <peter.schultz at classmarkets.com>\nPhil Porada <philporada at gmail.com>\nRebecca Chin <rchin at pivotal.io>\nReed Allman <rdallman10 at gmail.com>\nRichard Wilkes <wilkes at me.com>\nRobert Russell <robert at rrbrussell.com>\nRunrioter Wung <runrioter at gmail.com>\nSamantha Frank <hello at entropy.cat>\nSanthosh Kumar Tekuri <santhosh.tekuri at gmail.com>\nSho Iizuka <sho.i518 at gmail.com>\nSho Ikeda <suicaicoca at gmail.com>\nShuode Li <elemount at qq.com>\nSimon J Mudd <sjmudd at pobox.com>\nSoroush Pour <me at soroushjp.com>\nStan Putrya <root.vagner at gmail.com>\nStanley Gunawan <gunawan.stanley at gmail.com>\nSteven Hartland <steven.hartland at multiplay.co.uk>\nTan Jinhua <312841925 at qq.com>\nTetsuro Aoki <t.aoki1130 at gmail.com>\nThomas Wodarek <wodarekwebpage at gmail.com>\nTim Ruffles <timruffles at gmail.com>\nTom Jenkinson <tom at tjenkinson.me>\nVladimir Kovpak <cn007b at gmail.com>\nVladyslav Zhelezniak <zhvladi at gmail.com>\nXiangyu Hu <xiangyu.hu at outlook.com>\nXiaobing Jiang <s7v7nislands at gmail.com>\nXiuming Chen <cc at cxm.cc>\nXuehong Chan <chanxuehong at gmail.com>\nZhang Xiang <angwerzx at 126.com>\nZhenye Xie <xiezhenye at gmail.com>\nZhixin Wen <john.wenzhixin at gmail.com>\nZiheng Lyu <zihenglv at gmail.com>\n\n# Organizations\n\nBarracuda Networks, Inc.\nCounting Ltd.\nDigitalOcean Inc.\nDolthub Inc.\ndyves labs AG\nFacebook Inc.\nGitHub Inc.\nGoogle Inc.\nInfoSum Ltd.\nKeybase Inc.\nMicrosoft Corp.\nMultiplay Ltd.\nPercona LLC\nPingCAP Inc.\nPivotal Inc.\nShattered Silicon Ltd.\nStripe Inc.\nZendesk Inc.\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/CHANGELOG.md",
    "content": "## Version 1.8.1 (2024-03-26)\n\nBugfixes:\n\n- fix race condition when context is canceled in [#1562](https://github.com/go-sql-driver/mysql/pull/1562) and [#1570](https://github.com/go-sql-driver/mysql/pull/1570)\n\n## Version 1.8.0 (2024-03-09)\n\nMajor Changes:\n\n- Use `SET NAMES charset COLLATE collation`. by @methane in [#1437](https://github.com/go-sql-driver/mysql/pull/1437)\n  - Older go-mysql-driver used `collation_id` in the handshake packet. But it caused collation mismatch in some situation.\n  - If you don't specify charset nor collation, go-mysql-driver sends `SET NAMES utf8mb4` for new connection. This uses server's default collation for utf8mb4.\n  - If you specify charset, go-mysql-driver sends `SET NAMES <charset>`. This uses the server's default collation for `<charset>`.\n  - If you specify collation and/or charset, go-mysql-driver sends `SET NAMES charset COLLATE collation`.\n- PathEscape dbname in DSN. by @methane in [#1432](https://github.com/go-sql-driver/mysql/pull/1432)\n  - This is backward incompatible in rare case. Check your DSN.\n- Drop Go 1.13-17 support by @methane in [#1420](https://github.com/go-sql-driver/mysql/pull/1420)\n  - Use Go 1.18+\n- Parse numbers on text protocol too by @methane in [#1452](https://github.com/go-sql-driver/mysql/pull/1452)\n  - When text protocol is used, go-mysql-driver passed bare `[]byte` to database/sql for avoid unnecessary allocation and conversion.\n  - If user specified `*any` to `Scan()`, database/sql passed the `[]byte` into the target variable.\n  - This confused users because most user doesn't know when text/binary protocol used.\n  - go-mysql-driver 1.8 converts integer/float values into int64/double even in text protocol. This doesn't increase allocation compared to `[]byte` and conversion cost is negatable.\n- New options start using the Functional Option Pattern to avoid increasing technical debt in the Config object. Future version may introduce Functional Option for existing options, but not for now.\n  - Make TimeTruncate functional option by @methane in [1552](https://github.com/go-sql-driver/mysql/pull/1552)\n  - Add BeforeConnect callback to configuration object by @ItalyPaleAle in [#1469](https://github.com/go-sql-driver/mysql/pull/1469)\n\n\nOther changes:\n\n- Adding DeregisterDialContext to prevent memory leaks with dialers we don't need anymore by @jypelle in https://github.com/go-sql-driver/mysql/pull/1422\n- Make logger configurable per connection by @frozenbonito in https://github.com/go-sql-driver/mysql/pull/1408\n- Fix ColumnType.DatabaseTypeName for mediumint unsigned by @evanelias in https://github.com/go-sql-driver/mysql/pull/1428\n- Add connection attributes by @Daemonxiao in https://github.com/go-sql-driver/mysql/pull/1389\n- Stop `ColumnTypeScanType()` from returning `sql.RawBytes` by @methane in https://github.com/go-sql-driver/mysql/pull/1424\n- Exec() now provides access to status of multiple statements. by @mherr-google in https://github.com/go-sql-driver/mysql/pull/1309\n- Allow to change (or disable) the default driver name for registration by @dolmen in https://github.com/go-sql-driver/mysql/pull/1499\n- Add default connection attribute '_server_host' by @oblitorum in https://github.com/go-sql-driver/mysql/pull/1506\n- QueryUnescape DSN ConnectionAttribute value by @zhangyangyu in https://github.com/go-sql-driver/mysql/pull/1470\n- Add client_ed25519 authentication by @Gusted in https://github.com/go-sql-driver/mysql/pull/1518\n\n## Version 1.7.1 (2023-04-25)\n\nChanges:\n\n  - bump actions/checkout@v3 and actions/setup-go@v3 (#1375)\n  - Add go1.20 and mariadb10.11 to the testing matrix (#1403)\n  - Increase default maxAllowedPacket size. (#1411)\n\nBugfixes:\n\n  - Use SET syntax as specified in the MySQL documentation (#1402)\n\n\n## Version 1.7 (2022-11-29)\n\nChanges:\n\n  - Drop support of Go 1.12 (#1211)\n  - Refactoring `(*textRows).readRow` in a more clear way (#1230)\n  - util: Reduce boundary check in escape functions. (#1316)\n  - enhancement for mysqlConn handleAuthResult (#1250)\n\nNew Features:\n\n  - support Is comparison on MySQLError (#1210)\n  - return unsigned in database type name when necessary (#1238)\n  - Add API to express like a --ssl-mode=PREFERRED MySQL client (#1370)\n  - Add SQLState to MySQLError (#1321)\n\nBugfixes:\n\n  -  Fix parsing 0 year. (#1257)\n\n\n## Version 1.6 (2021-04-01)\n\nChanges:\n\n  - Migrate the CI service from travis-ci to GitHub Actions (#1176, #1183, #1190)\n  - `NullTime` is deprecated (#960, #1144)\n  - Reduce allocations when building SET command (#1111)\n  - Performance improvement for time formatting (#1118)\n  - Performance improvement for time parsing (#1098, #1113)\n\nNew Features:\n\n  - Implement `driver.Validator` interface (#1106, #1174)\n  - Support returning `uint64` from `Valuer` in `ConvertValue` (#1143)\n  - Add `json.RawMessage` for converter and prepared statement (#1059)\n  - Interpolate `json.RawMessage` as `string` (#1058)\n  - Implements `CheckNamedValue` (#1090)\n\nBugfixes:\n\n  - Stop rounding times (#1121, #1172)\n  - Put zero filler into the SSL handshake packet (#1066)\n  - Fix checking cancelled connections back into the connection pool (#1095)\n  - Fix remove last 0 byte for mysql_old_password when password is empty (#1133)\n\n\n## Version 1.5 (2020-01-07)\n\nChanges:\n\n  - Dropped support Go 1.9 and lower (#823, #829, #886, #1016, #1017)\n  - Improve buffer handling (#890)\n  - Document potentially insecure TLS configs (#901)\n  - Use a double-buffering scheme to prevent data races (#943)\n  - Pass uint64 values without converting them to string (#838, #955)\n  - Update collations and make utf8mb4 default (#877, #1054)\n  - Make NullTime compatible with sql.NullTime in Go 1.13+ (#995)\n  - Removed CloudSQL support (#993, #1007)\n  - Add Go Module support (#1003)\n\nNew Features:\n\n  - Implement support of optional TLS (#900)\n  - Check connection liveness (#934, #964, #997, #1048, #1051, #1052)\n  - Implement Connector Interface (#941, #958, #1020, #1035)\n\nBugfixes:\n\n  - Mark connections as bad on error during ping (#875)\n  - Mark connections as bad on error during dial (#867)\n  - Fix connection leak caused by rapid context cancellation (#1024)\n  - Mark connections as bad on error during Conn.Prepare (#1030)\n\n\n## Version 1.4.1 (2018-11-14)\n\nBugfixes:\n\n - Fix TIME format for binary columns (#818)\n - Fix handling of empty auth plugin names (#835)\n - Fix caching_sha2_password with empty password (#826)\n - Fix canceled context broke mysqlConn (#862)\n - Fix OldAuthSwitchRequest support (#870)\n - Fix Auth Response packet for cleartext password (#887)\n\n## Version 1.4 (2018-06-03)\n\nChanges:\n\n - Documentation fixes (#530, #535, #567)\n - Refactoring (#575, #579, #580, #581, #603, #615, #704)\n - Cache column names (#444)\n - Sort the DSN parameters in DSNs generated from a config (#637)\n - Allow native password authentication by default (#644)\n - Use the default port if it is missing in the DSN (#668)\n - Removed the `strict` mode (#676)\n - Do not query `max_allowed_packet` by default (#680)\n - Dropped support Go 1.6 and lower (#696)\n - Updated `ConvertValue()` to match the database/sql/driver implementation (#760)\n - Document the usage of `0000-00-00T00:00:00` as the time.Time zero value (#783)\n - Improved the compatibility of the authentication system (#807)\n\nNew Features:\n\n - Multi-Results support (#537)\n - `rejectReadOnly` DSN option (#604)\n - `context.Context` support (#608, #612, #627, #761)\n - Transaction isolation level support (#619, #744)\n - Read-Only transactions support (#618, #634)\n - `NewConfig` function which initializes a config with default values (#679)\n - Implemented the `ColumnType` interfaces (#667, #724)\n - Support for custom string types in `ConvertValue` (#623)\n - Implemented `NamedValueChecker`, improving support for uint64 with high bit set (#690, #709, #710)\n - `caching_sha2_password` authentication plugin support (#794, #800, #801, #802)\n - Implemented `driver.SessionResetter` (#779)\n - `sha256_password` authentication plugin support (#808)\n\nBugfixes:\n\n - Use the DSN hostname as TLS default ServerName if `tls=true` (#564, #718)\n - Fixed LOAD LOCAL DATA INFILE for empty files (#590)\n - Removed columns definition cache since it sometimes cached invalid data (#592)\n - Don't mutate registered TLS configs (#600)\n - Make RegisterTLSConfig concurrency-safe (#613)\n - Handle missing auth data in the handshake packet correctly (#646)\n - Do not retry queries when data was written to avoid data corruption (#302, #736)\n - Cache the connection pointer for error handling before invalidating it (#678)\n - Fixed imports for appengine/cloudsql (#700)\n - Fix sending STMT_LONG_DATA for 0 byte data (#734)\n - Set correct capacity for []bytes read from length-encoded strings (#766)\n - Make RegisterDial concurrency-safe (#773)\n\n\n## Version 1.3 (2016-12-01)\n\nChanges:\n\n - Go 1.1 is no longer supported\n - Use decimals fields in MySQL to format time types (#249)\n - Buffer optimizations (#269)\n - TLS ServerName defaults to the host (#283)\n - Refactoring (#400, #410, #437)\n - Adjusted documentation for second generation CloudSQL (#485)\n - Documented DSN system var quoting rules (#502)\n - Made statement.Close() calls idempotent to avoid errors in Go 1.6+ (#512)\n\nNew Features:\n\n - Enable microsecond resolution on TIME, DATETIME and TIMESTAMP (#249)\n - Support for returning table alias on Columns() (#289, #359, #382)\n - Placeholder interpolation, can be activated with the DSN parameter `interpolateParams=true` (#309, #318, #490)\n - Support for uint64 parameters with high bit set (#332, #345)\n - Cleartext authentication plugin support (#327)\n - Exported ParseDSN function and the Config struct (#403, #419, #429)\n - Read / Write timeouts (#401)\n - Support for JSON field type (#414)\n - Support for multi-statements and multi-results (#411, #431)\n - DSN parameter to set the driver-side max_allowed_packet value manually (#489)\n - Native password authentication plugin support (#494, #524)\n\nBugfixes:\n\n - Fixed handling of queries without columns and rows (#255)\n - Fixed a panic when SetKeepAlive() failed (#298)\n - Handle ERR packets while reading rows (#321)\n - Fixed reading NULL length-encoded integers in MySQL 5.6+ (#349)\n - Fixed absolute paths support in LOAD LOCAL DATA INFILE (#356)\n - Actually zero out bytes in handshake response (#378)\n - Fixed race condition in registering LOAD DATA INFILE handler (#383)\n - Fixed tests with MySQL 5.7.9+ (#380)\n - QueryUnescape TLS config names (#397)\n - Fixed \"broken pipe\" error by writing to closed socket (#390)\n - Fixed LOAD LOCAL DATA INFILE buffering (#424)\n - Fixed parsing of floats into float64 when placeholders are used (#434)\n - Fixed DSN tests with Go 1.7+ (#459)\n - Handle ERR packets while waiting for EOF (#473)\n - Invalidate connection on error while discarding additional results (#513)\n - Allow terminating packets of length 0 (#516)\n\n\n## Version 1.2 (2014-06-03)\n\nChanges:\n\n - We switched back to a \"rolling release\". `go get` installs the current master branch again\n - Version v1 of the driver will not be maintained anymore. Go 1.0 is no longer supported by this driver\n - Exported errors to allow easy checking from application code\n - Enabled TCP Keepalives on TCP connections\n - Optimized INFILE handling (better buffer size calculation, lazy init, ...)\n - The DSN parser also checks for a missing separating slash\n - Faster binary date / datetime to string formatting\n - Also exported the MySQLWarning type\n - mysqlConn.Close returns the first error encountered instead of ignoring all errors\n - writePacket() automatically writes the packet size to the header\n - readPacket() uses an iterative approach instead of the recursive approach to merge split packets\n\nNew Features:\n\n - `RegisterDial` allows the usage of a custom dial function to establish the network connection\n - Setting the connection collation is possible with the `collation` DSN parameter. This parameter should be preferred over the `charset` parameter\n - Logging of critical errors is configurable with `SetLogger`\n - Google CloudSQL support\n\nBugfixes:\n\n - Allow more than 32 parameters in prepared statements\n - Various old_password fixes\n - Fixed TestConcurrent test to pass Go's race detection\n - Fixed appendLengthEncodedInteger for large numbers\n - Renamed readLengthEnodedString to readLengthEncodedString and skipLengthEnodedString to skipLengthEncodedString (fixed typo)\n\n\n## Version 1.1 (2013-11-02)\n\nChanges:\n\n  - Go-MySQL-Driver now requires Go 1.1\n  - Connections now use the collation `utf8_general_ci` by default. Adding `&charset=UTF8` to the DSN should not be necessary anymore\n  - Made closing rows and connections error tolerant. This allows for example deferring rows.Close() without checking for errors\n  - `[]byte(nil)` is now treated as a NULL value. Before, it was treated like an empty string / `[]byte(\"\")`\n  - DSN parameter values must now be url.QueryEscape'ed. This allows text values to contain special characters, such as '&'.\n  - Use the IO buffer also for writing. This results in zero allocations (by the driver) for most queries\n  - Optimized the buffer for reading\n  - stmt.Query now caches column metadata\n  - New Logo\n  - Changed the copyright header to include all contributors\n  - Improved the LOAD INFILE documentation\n  - The driver struct is now exported to make the driver directly accessible\n  - Refactored the driver tests\n  - Added more benchmarks and moved all to a separate file\n  - Other small refactoring\n\nNew Features:\n\n  - Added *old_passwords* support: Required in some cases, but must be enabled by adding `allowOldPasswords=true` to the DSN since it is insecure\n  - Added a `clientFoundRows` parameter: Return the number of matching rows instead of the number of rows changed on UPDATEs\n  - Added TLS/SSL support: Use a TLS/SSL encrypted connection to the server. Custom TLS configs can be registered and used\n\nBugfixes:\n\n  - Fixed MySQL 4.1 support: MySQL 4.1 sends packets with lengths which differ from the specification\n  - Convert to DB timezone when inserting `time.Time`\n  - Split packets (more than 16MB) are now merged correctly\n  - Fixed false positive `io.EOF` errors when the data was fully read\n  - Avoid panics on reuse of closed connections\n  - Fixed empty string producing false nil values\n  - Fixed sign byte for positive TIME fields\n\n\n## Version 1.0 (2013-05-14)\n\nInitial Release\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/LICENSE",
    "content": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in \n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n  This Source Code Form is subject to the terms of the Mozilla Public\n  License, v. 2.0. If a copy of the MPL was not distributed with this\n  file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular\nfile, then You may include the notice in a location (such as a LICENSE\nfile in a relevant directory) where a recipient would be likely to look\nfor such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n  This Source Code Form is \"Incompatible With Secondary Licenses\", as\n  defined by the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/README.md",
    "content": "# Go-MySQL-Driver\n\nA MySQL-Driver for Go's [database/sql](https://golang.org/pkg/database/sql/) package\n\n![Go-MySQL-Driver logo](https://raw.github.com/wiki/go-sql-driver/mysql/gomysql_m.png \"Golang Gopher holding the MySQL Dolphin\")\n\n---------------------------------------\n  * [Features](#features)\n  * [Requirements](#requirements)\n  * [Installation](#installation)\n  * [Usage](#usage)\n    * [DSN (Data Source Name)](#dsn-data-source-name)\n      * [Password](#password)\n      * [Protocol](#protocol)\n      * [Address](#address)\n      * [Parameters](#parameters)\n      * [Examples](#examples)\n    * [Connection pool and timeouts](#connection-pool-and-timeouts)\n    * [context.Context Support](#contextcontext-support)\n    * [ColumnType Support](#columntype-support)\n    * [LOAD DATA LOCAL INFILE support](#load-data-local-infile-support)\n    * [time.Time support](#timetime-support)\n    * [Unicode support](#unicode-support)\n  * [Testing / Development](#testing--development)\n  * [License](#license)\n\n---------------------------------------\n\n## Features\n  * Lightweight and [fast](https://github.com/go-sql-driver/sql-benchmark \"golang MySQL-Driver performance\")\n  * Native Go implementation. No C-bindings, just pure Go\n  * Connections over TCP/IPv4, TCP/IPv6, Unix domain sockets or [custom protocols](https://godoc.org/github.com/go-sql-driver/mysql#DialFunc)\n  * Automatic handling of broken connections\n  * Automatic Connection Pooling *(by database/sql package)*\n  * Supports queries larger than 16MB\n  * Full [`sql.RawBytes`](https://golang.org/pkg/database/sql/#RawBytes) support.\n  * Intelligent `LONG DATA` handling in prepared statements\n  * Secure `LOAD DATA LOCAL INFILE` support with file allowlisting and `io.Reader` support\n  * Optional `time.Time` parsing\n  * Optional placeholder interpolation\n\n## Requirements\n\n* Go 1.19 or higher. We aim to support the 3 latest versions of Go.\n* MySQL (5.7+) and MariaDB (10.3+) are supported.\n* [TiDB](https://github.com/pingcap/tidb) is supported by PingCAP.\n  * Do not ask questions about TiDB in our issue tracker or forum.\n  * [Document](https://docs.pingcap.com/tidb/v6.1/dev-guide-sample-application-golang)\n  * [Forum](https://ask.pingcap.com/)\n* go-mysql would work with Percona Server, Google CloudSQL or Sphinx (2.2.3+).\n  * Maintainers won't support them. Do not expect issues are investigated and resolved by maintainers.\n  * Investigate issues yourself and please send a pull request to fix it.\n\n---------------------------------------\n\n## Installation\nSimple install the package to your [$GOPATH](https://github.com/golang/go/wiki/GOPATH \"GOPATH\") with the [go tool](https://golang.org/cmd/go/ \"go command\") from shell:\n```bash\ngo get -u github.com/go-sql-driver/mysql\n```\nMake sure [Git is installed](https://git-scm.com/downloads) on your machine and in your system's `PATH`.\n\n## Usage\n_Go MySQL Driver_ is an implementation of Go's `database/sql/driver` interface. You only need to import the driver and can use the full [`database/sql`](https://golang.org/pkg/database/sql/) API then.\n\nUse `mysql` as `driverName` and a valid [DSN](#dsn-data-source-name)  as `dataSourceName`:\n\n```go\nimport (\n\t\"database/sql\"\n\t\"time\"\n\n\t_ \"github.com/go-sql-driver/mysql\"\n)\n\n// ...\n\ndb, err := sql.Open(\"mysql\", \"user:password@/dbname\")\nif err != nil {\n\tpanic(err)\n}\n// See \"Important settings\" section.\ndb.SetConnMaxLifetime(time.Minute * 3)\ndb.SetMaxOpenConns(10)\ndb.SetMaxIdleConns(10)\n```\n\n[Examples are available in our Wiki](https://github.com/go-sql-driver/mysql/wiki/Examples \"Go-MySQL-Driver Examples\").\n\n### Important settings\n\n`db.SetConnMaxLifetime()` is required to ensure connections are closed by the driver safely before connection is closed by MySQL server, OS, or other middlewares. Since some middlewares close idle connections by 5 minutes, we recommend timeout shorter than 5 minutes. This setting helps load balancing and changing system variables too.\n\n`db.SetMaxOpenConns()` is highly recommended to limit the number of connection used by the application. There is no recommended limit number because it depends on application and MySQL server.\n\n`db.SetMaxIdleConns()` is recommended to be set same to `db.SetMaxOpenConns()`. When it is smaller than `SetMaxOpenConns()`, connections can be opened and closed much more frequently than you expect. Idle connections can be closed by the `db.SetConnMaxLifetime()`. If you want to close idle connections more rapidly, you can use `db.SetConnMaxIdleTime()` since Go 1.15.\n\n\n### DSN (Data Source Name)\n\nThe Data Source Name has a common format, like e.g. [PEAR DB](http://pear.php.net/manual/en/package.database.db.intro-dsn.php) uses it, but without type-prefix (optional parts marked by squared brackets):\n```\n[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]\n```\n\nA DSN in its fullest form:\n```\nusername:password@protocol(address)/dbname?param=value\n```\n\nExcept for the databasename, all values are optional. So the minimal DSN is:\n```\n/dbname\n```\n\nIf you do not want to preselect a database, leave `dbname` empty:\n```\n/\n```\nThis has the same effect as an empty DSN string:\n```\n\n```\n\n`dbname` is escaped by [PathEscape()](https://pkg.go.dev/net/url#PathEscape) since v1.8.0. If your database name is `dbname/withslash`, it becomes:\n\n```\n/dbname%2Fwithslash\n```\n\nAlternatively, [Config.FormatDSN](https://godoc.org/github.com/go-sql-driver/mysql#Config.FormatDSN) can be used to create a DSN string by filling a struct.\n\n#### Password\nPasswords can consist of any character. Escaping is **not** necessary.\n\n#### Protocol\nSee [net.Dial](https://golang.org/pkg/net/#Dial) for more information which networks are available.\nIn general you should use a Unix domain socket if available and TCP otherwise for best performance.\n\n#### Address\nFor TCP and UDP networks, addresses have the form `host[:port]`.\nIf `port` is omitted, the default port will be used.\nIf `host` is a literal IPv6 address, it must be enclosed in square brackets.\nThe functions [net.JoinHostPort](https://golang.org/pkg/net/#JoinHostPort) and [net.SplitHostPort](https://golang.org/pkg/net/#SplitHostPort) manipulate addresses in this form.\n\nFor Unix domain sockets the address is the absolute path to the MySQL-Server-socket, e.g. `/var/run/mysqld/mysqld.sock` or `/tmp/mysql.sock`.\n\n#### Parameters\n*Parameters are case-sensitive!*\n\nNotice that any of `true`, `TRUE`, `True` or `1` is accepted to stand for a true boolean value. Not surprisingly, false can be specified as any of: `false`, `FALSE`, `False` or `0`.\n\n##### `allowAllFiles`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\n`allowAllFiles=true` disables the file allowlist for `LOAD DATA LOCAL INFILE` and allows *all* files.\n[*Might be insecure!*](https://dev.mysql.com/doc/refman/8.0/en/load-data.html#load-data-local)\n\n##### `allowCleartextPasswords`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\n`allowCleartextPasswords=true` allows using the [cleartext client side plugin](https://dev.mysql.com/doc/en/cleartext-pluggable-authentication.html) if required by an account, such as one defined with the [PAM authentication plugin](http://dev.mysql.com/doc/en/pam-authentication-plugin.html). Sending passwords in clear text may be a security problem in some configurations. To avoid problems if there is any possibility that the password would be intercepted, clients should connect to MySQL Server using a method that protects the password. Possibilities include [TLS / SSL](#tls), IPsec, or a private network.\n\n\n##### `allowFallbackToPlaintext`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\n`allowFallbackToPlaintext=true` acts like a `--ssl-mode=PREFERRED` MySQL client as described in [Command Options for Connecting to the Server](https://dev.mysql.com/doc/refman/5.7/en/connection-options.html#option_general_ssl-mode)\n\n##### `allowNativePasswords`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        true\n```\n`allowNativePasswords=false` disallows the usage of MySQL native password method.\n\n##### `allowOldPasswords`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n`allowOldPasswords=true` allows the usage of the insecure old password method. This should be avoided, but is necessary in some cases. See also [the old_passwords wiki page](https://github.com/go-sql-driver/mysql/wiki/old_passwords).\n\n##### `charset`\n\n```\nType:           string\nValid Values:   <name>\nDefault:        none\n```\n\nSets the charset used for client-server interaction (`\"SET NAMES <value>\"`). If multiple charsets are set (separated by a comma), the following charset is used if setting the charset fails. This enables for example support for `utf8mb4` ([introduced in MySQL 5.5.3](http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html)) with fallback to `utf8` for older servers (`charset=utf8mb4,utf8`).\n\nSee also [Unicode Support](#unicode-support).\n\n##### `checkConnLiveness`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        true\n```\n\nOn supported platforms connections retrieved from the connection pool are checked for liveness before using them. If the check fails, the respective connection is marked as bad and the query retried with another connection.\n`checkConnLiveness=false` disables this liveness check of connections.\n\n##### `collation`\n\n```\nType:           string\nValid Values:   <name>\nDefault:        utf8mb4_general_ci\n```\n\nSets the collation used for client-server interaction on connection. In contrast to `charset`, `collation` does not issue additional queries. If the specified collation is unavailable on the target server, the connection will fail.\n\nA list of valid charsets for a server is retrievable with `SHOW COLLATION`.\n\nThe default collation (`utf8mb4_general_ci`) is supported from MySQL 5.5.  You should use an older collation (e.g. `utf8_general_ci`) for older MySQL.\n\nCollations for charset \"ucs2\", \"utf16\", \"utf16le\", and \"utf32\" can not be used ([ref](https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-impermissible-client-charset)).\n\nSee also [Unicode Support](#unicode-support).\n\n##### `clientFoundRows`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\n`clientFoundRows=true` causes an UPDATE to return the number of matching rows instead of the number of rows changed.\n\n##### `columnsWithAlias`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\nWhen `columnsWithAlias` is true, calls to `sql.Rows.Columns()` will return the table alias and the column name separated by a dot. For example:\n\n```\nSELECT u.id FROM users as u\n```\n\nwill return `u.id` instead of just `id` if `columnsWithAlias=true`.\n\n##### `interpolateParams`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\nIf `interpolateParams` is true, placeholders (`?`) in calls to `db.Query()` and `db.Exec()` are interpolated into a single query string with given parameters. This reduces the number of roundtrips, since the driver has to prepare a statement, execute it with given parameters and close the statement again with `interpolateParams=false`.\n\n*This can not be used together with the multibyte encodings BIG5, CP932, GB2312, GBK or SJIS. These are rejected as they may [introduce a SQL injection vulnerability](http://stackoverflow.com/a/12118602/3430118)!*\n\n##### `loc`\n\n```\nType:           string\nValid Values:   <escaped name>\nDefault:        UTC\n```\n\nSets the location for time.Time values (when using `parseTime=true`). *\"Local\"* sets the system's location. See [time.LoadLocation](https://golang.org/pkg/time/#LoadLocation) for details.\n\nNote that this sets the location for time.Time values but does not change MySQL's [time_zone setting](https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html). For that see the [time_zone system variable](#system-variables), which can also be set as a DSN parameter.\n\nPlease keep in mind, that param values must be [url.QueryEscape](https://golang.org/pkg/net/url/#QueryEscape)'ed. Alternatively you can manually replace the `/` with `%2F`. For example `US/Pacific` would be `loc=US%2FPacific`.\n\n##### `timeTruncate`\n\n```\nType:           duration\nDefault:        0\n```\n\n[Truncate time values](https://pkg.go.dev/time#Duration.Truncate) to the specified duration. The value must be a decimal number with a unit suffix (*\"ms\"*, *\"s\"*, *\"m\"*, *\"h\"*), such as *\"30s\"*, *\"0.5m\"* or *\"1m30s\"*.\n\n##### `maxAllowedPacket`\n```\nType:          decimal number\nDefault:       64*1024*1024\n```\n\nMax packet size allowed in bytes. The default value is 64 MiB and should be adjusted to match the server settings. `maxAllowedPacket=0` can be used to automatically fetch the `max_allowed_packet` variable from server *on every connection*.\n\n##### `multiStatements`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\nAllow multiple statements in one query. This can be used to bach multiple queries. Use [Rows.NextResultSet()](https://pkg.go.dev/database/sql#Rows.NextResultSet) to get result of the second and subsequent queries.\n\nWhen `multiStatements` is used, `?` parameters must only be used in the first statement. [interpolateParams](#interpolateparams) can be used to avoid this limitation unless prepared statement is used explicitly.\n\nIt's possible to access the last inserted ID and number of affected rows for multiple statements by using `sql.Conn.Raw()` and the `mysql.Result`. For example:\n\n```go\nconn, _ := db.Conn(ctx)\nconn.Raw(func(conn any) error {\n  ex := conn.(driver.Execer)\n  res, err := ex.Exec(`\n  UPDATE point SET x = 1 WHERE y = 2;\n  UPDATE point SET x = 2 WHERE y = 3;\n  `, nil)\n  // Both slices have 2 elements.\n  log.Print(res.(mysql.Result).AllRowsAffected())\n  log.Print(res.(mysql.Result).AllLastInsertIds())\n})\n```\n\n##### `parseTime`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\n`parseTime=true` changes the output type of `DATE` and `DATETIME` values to `time.Time` instead of `[]byte` / `string`\nThe date or datetime like `0000-00-00 00:00:00` is converted into zero value of `time.Time`.\n\n\n##### `readTimeout`\n\n```\nType:           duration\nDefault:        0\n```\n\nI/O read timeout. The value must be a decimal number with a unit suffix (*\"ms\"*, *\"s\"*, *\"m\"*, *\"h\"*), such as *\"30s\"*, *\"0.5m\"* or *\"1m30s\"*.\n\n##### `rejectReadOnly`\n\n```\nType:           bool\nValid Values:   true, false\nDefault:        false\n```\n\n\n`rejectReadOnly=true` causes the driver to reject read-only connections. This\nis for a possible race condition during an automatic failover, where the mysql\nclient gets connected to a read-only replica after the failover.\n\nNote that this should be a fairly rare case, as an automatic failover normally\nhappens when the primary is down, and the race condition shouldn't happen\nunless it comes back up online as soon as the failover is kicked off. On the\nother hand, when this happens, a MySQL application can get stuck on a\nread-only connection until restarted. It is however fairly easy to reproduce,\nfor example, using a manual failover on AWS Aurora's MySQL-compatible cluster.\n\nIf you are not relying on read-only transactions to reject writes that aren't\nsupposed to happen, setting this on some MySQL providers (such as AWS Aurora)\nis safer for failovers.\n\nNote that ERROR 1290 can be returned for a `read-only` server and this option will\ncause a retry for that error. However the same error number is used for some\nother cases. You should ensure your application will never cause an ERROR 1290\nexcept for `read-only` mode when enabling this option.\n\n\n##### `serverPubKey`\n\n```\nType:           string\nValid Values:   <name>\nDefault:        none\n```\n\nServer public keys can be registered with [`mysql.RegisterServerPubKey`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterServerPubKey), which can then be used by the assigned name in the DSN.\nPublic keys are used to transmit encrypted data, e.g. for authentication.\nIf the server's public key is known, it should be set manually to avoid expensive and potentially insecure transmissions of the public key from the server to the client each time it is required.\n\n\n##### `timeout`\n\n```\nType:           duration\nDefault:        OS default\n```\n\nTimeout for establishing connections, aka dial timeout. The value must be a decimal number with a unit suffix (*\"ms\"*, *\"s\"*, *\"m\"*, *\"h\"*), such as *\"30s\"*, *\"0.5m\"* or *\"1m30s\"*.\n\n\n##### `tls`\n\n```\nType:           bool / string\nValid Values:   true, false, skip-verify, preferred, <name>\nDefault:        false\n```\n\n`tls=true` enables TLS / SSL encrypted connection to the server. Use `skip-verify` if you want to use a self-signed or invalid certificate (server side) or use `preferred` to use TLS only when advertised by the server. This is similar to `skip-verify`, but additionally allows a fallback to a connection which is not encrypted. Neither `skip-verify` nor `preferred` add any reliable security. You can use a custom TLS config after registering it with [`mysql.RegisterTLSConfig`](https://godoc.org/github.com/go-sql-driver/mysql#RegisterTLSConfig).\n\n\n##### `writeTimeout`\n\n```\nType:           duration\nDefault:        0\n```\n\nI/O write timeout. The value must be a decimal number with a unit suffix (*\"ms\"*, *\"s\"*, *\"m\"*, *\"h\"*), such as *\"30s\"*, *\"0.5m\"* or *\"1m30s\"*.\n\n##### `connectionAttributes`\n\n```\nType:           comma-delimited string of user-defined \"key:value\" pairs\nValid Values:   (<name1>:<value1>,<name2>:<value2>,...)\nDefault:        none\n```\n\n[Connection attributes](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html) are key-value pairs that application programs can pass to the server at connect time.\n\n##### System Variables\n\nAny other parameters are interpreted as system variables:\n  * `<boolean_var>=<value>`: `SET <boolean_var>=<value>`\n  * `<enum_var>=<value>`: `SET <enum_var>=<value>`\n  * `<string_var>=%27<value>%27`: `SET <string_var>='<value>'`\n\nRules:\n* The values for string variables must be quoted with `'`.\n* The values must also be [url.QueryEscape](http://golang.org/pkg/net/url/#QueryEscape)'ed!\n (which implies values of string variables must be wrapped with `%27`).\n\nExamples:\n  * `autocommit=1`: `SET autocommit=1`\n  * [`time_zone=%27Europe%2FParis%27`](https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html): `SET time_zone='Europe/Paris'`\n  * [`transaction_isolation=%27REPEATABLE-READ%27`](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_isolation): `SET transaction_isolation='REPEATABLE-READ'`\n\n\n#### Examples\n```\nuser@unix(/path/to/socket)/dbname\n```\n\n```\nroot:pw@unix(/tmp/mysql.sock)/myDatabase?loc=Local\n```\n\n```\nuser:password@tcp(localhost:5555)/dbname?tls=skip-verify&autocommit=true\n```\n\nTreat warnings as errors by setting the system variable [`sql_mode`](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html):\n```\nuser:password@/dbname?sql_mode=TRADITIONAL\n```\n\nTCP via IPv6:\n```\nuser:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname?timeout=90s&collation=utf8mb4_unicode_ci\n```\n\nTCP on a remote host, e.g. Amazon RDS:\n```\nid:password@tcp(your-amazonaws-uri.com:3306)/dbname\n```\n\nGoogle Cloud SQL on App Engine:\n```\nuser:password@unix(/cloudsql/project-id:region-name:instance-name)/dbname\n```\n\nTCP using default port (3306) on localhost:\n```\nuser:password@tcp/dbname?charset=utf8mb4,utf8&sys_var=esc%40ped\n```\n\nUse the default protocol (tcp) and host (localhost:3306):\n```\nuser:password@/dbname\n```\n\nNo Database preselected:\n```\nuser:password@/\n```\n\n\n### Connection pool and timeouts\nThe connection pool is managed by Go's database/sql package. For details on how to configure the size of the pool and how long connections stay in the pool see `*DB.SetMaxOpenConns`, `*DB.SetMaxIdleConns`, and `*DB.SetConnMaxLifetime` in the [database/sql documentation](https://golang.org/pkg/database/sql/). The read, write, and dial timeouts for each individual connection are configured with the DSN parameters [`readTimeout`](#readtimeout), [`writeTimeout`](#writetimeout), and [`timeout`](#timeout), respectively.\n\n## `ColumnType` Support\nThis driver supports the [`ColumnType` interface](https://golang.org/pkg/database/sql/#ColumnType) introduced in Go 1.8, with the exception of [`ColumnType.Length()`](https://golang.org/pkg/database/sql/#ColumnType.Length), which is currently not supported. All Unsigned database type names will be returned `UNSIGNED ` with `INT`, `TINYINT`, `SMALLINT`, `MEDIUMINT`, `BIGINT`.\n\n## `context.Context` Support\nGo 1.8 added `database/sql` support for `context.Context`. This driver supports query timeouts and cancellation via contexts.\nSee [context support in the database/sql package](https://golang.org/doc/go1.8#database_sql) for more details.\n\n\n### `LOAD DATA LOCAL INFILE` support\nFor this feature you need direct access to the package. Therefore you must change the import path (no `_`):\n```go\nimport \"github.com/go-sql-driver/mysql\"\n```\n\nFiles must be explicitly allowed by registering them with `mysql.RegisterLocalFile(filepath)` (recommended) or the allowlist check must be deactivated by using the DSN parameter `allowAllFiles=true` ([*Might be insecure!*](https://dev.mysql.com/doc/refman/8.0/en/load-data.html#load-data-local)).\n\nTo use a `io.Reader` a handler function must be registered with `mysql.RegisterReaderHandler(name, handler)` which returns a `io.Reader` or `io.ReadCloser`. The Reader is available with the filepath `Reader::<name>` then. Choose different names for different handlers and `DeregisterReaderHandler` when you don't need it anymore.\n\nSee the [godoc of Go-MySQL-Driver](https://godoc.org/github.com/go-sql-driver/mysql \"golang mysql driver documentation\") for details.\n\n\n### `time.Time` support\nThe default internal output type of MySQL `DATE` and `DATETIME` values is `[]byte` which allows you to scan the value into a `[]byte`, `string` or `sql.RawBytes` variable in your program.\n\nHowever, many want to scan MySQL `DATE` and `DATETIME` values into `time.Time` variables, which is the logical equivalent in Go to `DATE` and `DATETIME` in MySQL. You can do that by changing the internal output type from `[]byte` to `time.Time` with the DSN parameter `parseTime=true`. You can set the default [`time.Time` location](https://golang.org/pkg/time/#Location) with the `loc` DSN parameter.\n\n**Caution:** As of Go 1.1, this makes `time.Time` the only variable type you can scan `DATE` and `DATETIME` values into. This breaks for example [`sql.RawBytes` support](https://github.com/go-sql-driver/mysql/wiki/Examples#rawbytes).\n\n\n### Unicode support\nSince version 1.5 Go-MySQL-Driver automatically uses the collation ` utf8mb4_general_ci` by default.\n\nOther charsets / collations can be set using the [`charset`](#charset) or [`collation`](#collation) DSN parameter.\n\n- When only the `charset` is specified, the `SET NAMES <charset>` query is sent and the server's default collation is used.\n- When both the `charset` and `collation` are specified, the `SET NAMES <charset> COLLATE <collation>` query is sent.\n- When only the `collation` is specified, the collation is specified in the protocol handshake and the `SET NAMES` query is not sent. This can save one roundtrip, but note that the server may ignore the specified collation silently and use the server's default charset/collation instead.\n\nSee http://dev.mysql.com/doc/refman/8.0/en/charset-unicode.html for more details on MySQL's Unicode support.\n\n## Testing / Development\nTo run the driver tests you may need to adjust the configuration. See the [Testing Wiki-Page](https://github.com/go-sql-driver/mysql/wiki/Testing \"Testing\") for details.\n\nGo-MySQL-Driver is not feature-complete yet. Your help is very appreciated.\nIf you want to contribute, you can work on an [open issue](https://github.com/go-sql-driver/mysql/issues?state=open) or review a [pull request](https://github.com/go-sql-driver/mysql/pulls).\n\nSee the [Contribution Guidelines](https://github.com/go-sql-driver/mysql/blob/master/.github/CONTRIBUTING.md) for details.\n\n---------------------------------------\n\n## License\nGo-MySQL-Driver is licensed under the [Mozilla Public License Version 2.0](https://raw.github.com/go-sql-driver/mysql/master/LICENSE)\n\nMozilla summarizes the license scope as follows:\n> MPL: The copyleft applies to any files containing MPLed code.\n\n\nThat means:\n  * You can **use** the **unchanged** source code both in private and commercially.\n  * When distributing, you **must publish** the source code of any **changed files** licensed under the MPL 2.0 under a) the MPL 2.0 itself or b) a compatible license (e.g. GPL 3.0 or Apache License 2.0).\n  * You **needn't publish** the source code of your library as long as the files licensed under the MPL 2.0 are **unchanged**.\n\nPlease read the [MPL 2.0 FAQ](https://www.mozilla.org/en-US/MPL/2.0/FAQ/) if you have further questions regarding the license.\n\nYou can read the full terms here: [LICENSE](https://raw.github.com/go-sql-driver/mysql/master/LICENSE).\n\n![Go Gopher and MySQL Dolphin](https://raw.github.com/wiki/go-sql-driver/mysql/go-mysql-driver_m.jpg \"Golang Gopher transporting the MySQL Dolphin in a wheelbarrow\")\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/atomic_bool.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package.\n//\n// Copyright 2022 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n//go:build go1.19\n// +build go1.19\n\npackage mysql\n\nimport \"sync/atomic\"\n\n/******************************************************************************\n*                               Sync utils                                    *\n******************************************************************************/\n\ntype atomicBool = atomic.Bool\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/atomic_bool_go118.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package.\n//\n// Copyright 2022 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n//go:build !go1.19\n// +build !go1.19\n\npackage mysql\n\nimport \"sync/atomic\"\n\n/******************************************************************************\n*                               Sync utils                                    *\n******************************************************************************/\n\n// atomicBool is an implementation of atomic.Bool for older version of Go.\n// it is a wrapper around uint32 for usage as a boolean value with\n// atomic access.\ntype atomicBool struct {\n\t_     noCopy\n\tvalue uint32\n}\n\n// Load returns whether the current boolean value is true\nfunc (ab *atomicBool) Load() bool {\n\treturn atomic.LoadUint32(&ab.value) > 0\n}\n\n// Store sets the value of the bool regardless of the previous value\nfunc (ab *atomicBool) Store(value bool) {\n\tif value {\n\t\tatomic.StoreUint32(&ab.value, 1)\n\t} else {\n\t\tatomic.StoreUint32(&ab.value, 0)\n\t}\n}\n\n// Swap sets the value of the bool and returns the old value.\nfunc (ab *atomicBool) Swap(value bool) bool {\n\tif value {\n\t\treturn atomic.SwapUint32(&ab.value, 1) > 0\n\t}\n\treturn atomic.SwapUint32(&ab.value, 0) > 0\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/auth.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"crypto/sha512\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"filippo.io/edwards25519\"\n)\n\n// server pub keys registry\nvar (\n\tserverPubKeyLock     sync.RWMutex\n\tserverPubKeyRegistry map[string]*rsa.PublicKey\n)\n\n// RegisterServerPubKey registers a server RSA public key which can be used to\n// send data in a secure manner to the server without receiving the public key\n// in a potentially insecure way from the server first.\n// Registered keys can afterwards be used adding serverPubKey=<name> to the DSN.\n//\n// Note: The provided rsa.PublicKey instance is exclusively owned by the driver\n// after registering it and may not be modified.\n//\n//\tdata, err := os.ReadFile(\"mykey.pem\")\n//\tif err != nil {\n//\t\tlog.Fatal(err)\n//\t}\n//\n//\tblock, _ := pem.Decode(data)\n//\tif block == nil || block.Type != \"PUBLIC KEY\" {\n//\t\tlog.Fatal(\"failed to decode PEM block containing public key\")\n//\t}\n//\n//\tpub, err := x509.ParsePKIXPublicKey(block.Bytes)\n//\tif err != nil {\n//\t\tlog.Fatal(err)\n//\t}\n//\n//\tif rsaPubKey, ok := pub.(*rsa.PublicKey); ok {\n//\t\tmysql.RegisterServerPubKey(\"mykey\", rsaPubKey)\n//\t} else {\n//\t\tlog.Fatal(\"not a RSA public key\")\n//\t}\nfunc RegisterServerPubKey(name string, pubKey *rsa.PublicKey) {\n\tserverPubKeyLock.Lock()\n\tif serverPubKeyRegistry == nil {\n\t\tserverPubKeyRegistry = make(map[string]*rsa.PublicKey)\n\t}\n\n\tserverPubKeyRegistry[name] = pubKey\n\tserverPubKeyLock.Unlock()\n}\n\n// DeregisterServerPubKey removes the public key registered with the given name.\nfunc DeregisterServerPubKey(name string) {\n\tserverPubKeyLock.Lock()\n\tif serverPubKeyRegistry != nil {\n\t\tdelete(serverPubKeyRegistry, name)\n\t}\n\tserverPubKeyLock.Unlock()\n}\n\nfunc getServerPubKey(name string) (pubKey *rsa.PublicKey) {\n\tserverPubKeyLock.RLock()\n\tif v, ok := serverPubKeyRegistry[name]; ok {\n\t\tpubKey = v\n\t}\n\tserverPubKeyLock.RUnlock()\n\treturn\n}\n\n// Hash password using pre 4.1 (old password) method\n// https://github.com/atcurtis/mariadb/blob/master/mysys/my_rnd.c\ntype myRnd struct {\n\tseed1, seed2 uint32\n}\n\nconst myRndMaxVal = 0x3FFFFFFF\n\n// Pseudo random number generator\nfunc newMyRnd(seed1, seed2 uint32) *myRnd {\n\treturn &myRnd{\n\t\tseed1: seed1 % myRndMaxVal,\n\t\tseed2: seed2 % myRndMaxVal,\n\t}\n}\n\n// Tested to be equivalent to MariaDB's floating point variant\n// http://play.golang.org/p/QHvhd4qved\n// http://play.golang.org/p/RG0q4ElWDx\nfunc (r *myRnd) NextByte() byte {\n\tr.seed1 = (r.seed1*3 + r.seed2) % myRndMaxVal\n\tr.seed2 = (r.seed1 + r.seed2 + 33) % myRndMaxVal\n\n\treturn byte(uint64(r.seed1) * 31 / myRndMaxVal)\n}\n\n// Generate binary hash from byte string using insecure pre 4.1 method\nfunc pwHash(password []byte) (result [2]uint32) {\n\tvar add uint32 = 7\n\tvar tmp uint32\n\n\tresult[0] = 1345345333\n\tresult[1] = 0x12345671\n\n\tfor _, c := range password {\n\t\t// skip spaces and tabs in password\n\t\tif c == ' ' || c == '\\t' {\n\t\t\tcontinue\n\t\t}\n\n\t\ttmp = uint32(c)\n\t\tresult[0] ^= (((result[0] & 63) + add) * tmp) + (result[0] << 8)\n\t\tresult[1] += (result[1] << 8) ^ result[0]\n\t\tadd += tmp\n\t}\n\n\t// Remove sign bit (1<<31)-1)\n\tresult[0] &= 0x7FFFFFFF\n\tresult[1] &= 0x7FFFFFFF\n\n\treturn\n}\n\n// Hash password using insecure pre 4.1 method\nfunc scrambleOldPassword(scramble []byte, password string) []byte {\n\tscramble = scramble[:8]\n\n\thashPw := pwHash([]byte(password))\n\thashSc := pwHash(scramble)\n\n\tr := newMyRnd(hashPw[0]^hashSc[0], hashPw[1]^hashSc[1])\n\n\tvar out [8]byte\n\tfor i := range out {\n\t\tout[i] = r.NextByte() + 64\n\t}\n\n\tmask := r.NextByte()\n\tfor i := range out {\n\t\tout[i] ^= mask\n\t}\n\n\treturn out[:]\n}\n\n// Hash password using 4.1+ method (SHA1)\nfunc scramblePassword(scramble []byte, password string) []byte {\n\tif len(password) == 0 {\n\t\treturn nil\n\t}\n\n\t// stage1Hash = SHA1(password)\n\tcrypt := sha1.New()\n\tcrypt.Write([]byte(password))\n\tstage1 := crypt.Sum(nil)\n\n\t// scrambleHash = SHA1(scramble + SHA1(stage1Hash))\n\t// inner Hash\n\tcrypt.Reset()\n\tcrypt.Write(stage1)\n\thash := crypt.Sum(nil)\n\n\t// outer Hash\n\tcrypt.Reset()\n\tcrypt.Write(scramble)\n\tcrypt.Write(hash)\n\tscramble = crypt.Sum(nil)\n\n\t// token = scrambleHash XOR stage1Hash\n\tfor i := range scramble {\n\t\tscramble[i] ^= stage1[i]\n\t}\n\treturn scramble\n}\n\n// Hash password using MySQL 8+ method (SHA256)\nfunc scrambleSHA256Password(scramble []byte, password string) []byte {\n\tif len(password) == 0 {\n\t\treturn nil\n\t}\n\n\t// XOR(SHA256(password), SHA256(SHA256(SHA256(password)), scramble))\n\n\tcrypt := sha256.New()\n\tcrypt.Write([]byte(password))\n\tmessage1 := crypt.Sum(nil)\n\n\tcrypt.Reset()\n\tcrypt.Write(message1)\n\tmessage1Hash := crypt.Sum(nil)\n\n\tcrypt.Reset()\n\tcrypt.Write(message1Hash)\n\tcrypt.Write(scramble)\n\tmessage2 := crypt.Sum(nil)\n\n\tfor i := range message1 {\n\t\tmessage1[i] ^= message2[i]\n\t}\n\n\treturn message1\n}\n\nfunc encryptPassword(password string, seed []byte, pub *rsa.PublicKey) ([]byte, error) {\n\tplain := make([]byte, len(password)+1)\n\tcopy(plain, password)\n\tfor i := range plain {\n\t\tj := i % len(seed)\n\t\tplain[i] ^= seed[j]\n\t}\n\tsha1 := sha1.New()\n\treturn rsa.EncryptOAEP(sha1, rand.Reader, pub, plain, nil)\n}\n\n// authEd25519 does ed25519 authentication used by MariaDB.\nfunc authEd25519(scramble []byte, password string) ([]byte, error) {\n\t// Derived from https://github.com/MariaDB/server/blob/d8e6bb00888b1f82c031938f4c8ac5d97f6874c3/plugin/auth_ed25519/ref10/sign.c\n\t// Code style is from https://cs.opensource.google/go/go/+/refs/tags/go1.21.5:src/crypto/ed25519/ed25519.go;l=207\n\th := sha512.Sum512([]byte(password))\n\n\ts, err := edwards25519.NewScalar().SetBytesWithClamping(h[:32])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tA := (&edwards25519.Point{}).ScalarBaseMult(s)\n\n\tmh := sha512.New()\n\tmh.Write(h[32:])\n\tmh.Write(scramble)\n\tmessageDigest := mh.Sum(nil)\n\tr, err := edwards25519.NewScalar().SetUniformBytes(messageDigest)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tR := (&edwards25519.Point{}).ScalarBaseMult(r)\n\n\tkh := sha512.New()\n\tkh.Write(R.Bytes())\n\tkh.Write(A.Bytes())\n\tkh.Write(scramble)\n\thramDigest := kh.Sum(nil)\n\tk, err := edwards25519.NewScalar().SetUniformBytes(hramDigest)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tS := k.MultiplyAdd(k, s, r)\n\n\treturn append(R.Bytes(), S.Bytes()...), nil\n}\n\nfunc (mc *mysqlConn) sendEncryptedPassword(seed []byte, pub *rsa.PublicKey) error {\n\tenc, err := encryptPassword(mc.cfg.Passwd, seed, pub)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn mc.writeAuthSwitchPacket(enc)\n}\n\nfunc (mc *mysqlConn) auth(authData []byte, plugin string) ([]byte, error) {\n\tswitch plugin {\n\tcase \"caching_sha2_password\":\n\t\tauthResp := scrambleSHA256Password(authData, mc.cfg.Passwd)\n\t\treturn authResp, nil\n\n\tcase \"mysql_old_password\":\n\t\tif !mc.cfg.AllowOldPasswords {\n\t\t\treturn nil, ErrOldPassword\n\t\t}\n\t\tif len(mc.cfg.Passwd) == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\t\t// Note: there are edge cases where this should work but doesn't;\n\t\t// this is currently \"wontfix\":\n\t\t// https://github.com/go-sql-driver/mysql/issues/184\n\t\tauthResp := append(scrambleOldPassword(authData[:8], mc.cfg.Passwd), 0)\n\t\treturn authResp, nil\n\n\tcase \"mysql_clear_password\":\n\t\tif !mc.cfg.AllowCleartextPasswords {\n\t\t\treturn nil, ErrCleartextPassword\n\t\t}\n\t\t// http://dev.mysql.com/doc/refman/5.7/en/cleartext-authentication-plugin.html\n\t\t// http://dev.mysql.com/doc/refman/5.7/en/pam-authentication-plugin.html\n\t\treturn append([]byte(mc.cfg.Passwd), 0), nil\n\n\tcase \"mysql_native_password\":\n\t\tif !mc.cfg.AllowNativePasswords {\n\t\t\treturn nil, ErrNativePassword\n\t\t}\n\t\t// https://dev.mysql.com/doc/internals/en/secure-password-authentication.html\n\t\t// Native password authentication only need and will need 20-byte challenge.\n\t\tauthResp := scramblePassword(authData[:20], mc.cfg.Passwd)\n\t\treturn authResp, nil\n\n\tcase \"sha256_password\":\n\t\tif len(mc.cfg.Passwd) == 0 {\n\t\t\treturn []byte{0}, nil\n\t\t}\n\t\t// unlike caching_sha2_password, sha256_password does not accept\n\t\t// cleartext password on unix transport.\n\t\tif mc.cfg.TLS != nil {\n\t\t\t// write cleartext auth packet\n\t\t\treturn append([]byte(mc.cfg.Passwd), 0), nil\n\t\t}\n\n\t\tpubKey := mc.cfg.pubKey\n\t\tif pubKey == nil {\n\t\t\t// request public key from server\n\t\t\treturn []byte{1}, nil\n\t\t}\n\n\t\t// encrypted password\n\t\tenc, err := encryptPassword(mc.cfg.Passwd, authData, pubKey)\n\t\treturn enc, err\n\n\tcase \"client_ed25519\":\n\t\tif len(authData) != 32 {\n\t\t\treturn nil, ErrMalformPkt\n\t\t}\n\t\treturn authEd25519(authData, mc.cfg.Passwd)\n\n\tdefault:\n\t\tmc.log(\"unknown auth plugin:\", plugin)\n\t\treturn nil, ErrUnknownPlugin\n\t}\n}\n\nfunc (mc *mysqlConn) handleAuthResult(oldAuthData []byte, plugin string) error {\n\t// Read Result Packet\n\tauthData, newPlugin, err := mc.readAuthResult()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// handle auth plugin switch, if requested\n\tif newPlugin != \"\" {\n\t\t// If CLIENT_PLUGIN_AUTH capability is not supported, no new cipher is\n\t\t// sent and we have to keep using the cipher sent in the init packet.\n\t\tif authData == nil {\n\t\t\tauthData = oldAuthData\n\t\t} else {\n\t\t\t// copy data from read buffer to owned slice\n\t\t\tcopy(oldAuthData, authData)\n\t\t}\n\n\t\tplugin = newPlugin\n\n\t\tauthResp, err := mc.auth(authData, plugin)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err = mc.writeAuthSwitchPacket(authResp); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Read Result Packet\n\t\tauthData, newPlugin, err = mc.readAuthResult()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Do not allow to change the auth plugin more than once\n\t\tif newPlugin != \"\" {\n\t\t\treturn ErrMalformPkt\n\t\t}\n\t}\n\n\tswitch plugin {\n\n\t// https://dev.mysql.com/blog-archive/preparing-your-community-connector-for-mysql-8-part-2-sha256/\n\tcase \"caching_sha2_password\":\n\t\tswitch len(authData) {\n\t\tcase 0:\n\t\t\treturn nil // auth successful\n\t\tcase 1:\n\t\t\tswitch authData[0] {\n\t\t\tcase cachingSha2PasswordFastAuthSuccess:\n\t\t\t\tif err = mc.resultUnchanged().readResultOK(); err == nil {\n\t\t\t\t\treturn nil // auth successful\n\t\t\t\t}\n\n\t\t\tcase cachingSha2PasswordPerformFullAuthentication:\n\t\t\t\tif mc.cfg.TLS != nil || mc.cfg.Net == \"unix\" {\n\t\t\t\t\t// write cleartext auth packet\n\t\t\t\t\terr = mc.writeAuthSwitchPacket(append([]byte(mc.cfg.Passwd), 0))\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpubKey := mc.cfg.pubKey\n\t\t\t\t\tif pubKey == nil {\n\t\t\t\t\t\t// request public key from server\n\t\t\t\t\t\tdata, err := mc.buf.takeSmallBuffer(4 + 1)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata[4] = cachingSha2PasswordRequestPublicKey\n\t\t\t\t\t\terr = mc.writePacket(data)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif data, err = mc.readPacket(); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif data[0] != iAuthMoreData {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"unexpected resp from server for caching_sha2_password, perform full authentication\")\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// parse public key\n\t\t\t\t\t\tblock, rest := pem.Decode(data[1:])\n\t\t\t\t\t\tif block == nil {\n\t\t\t\t\t\t\treturn fmt.Errorf(\"no pem data found, data: %s\", rest)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpkix, err := x509.ParsePKIXPublicKey(block.Bytes)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpubKey = pkix.(*rsa.PublicKey)\n\t\t\t\t\t}\n\n\t\t\t\t\t// send encrypted password\n\t\t\t\t\terr = mc.sendEncryptedPassword(oldAuthData, pubKey)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn mc.resultUnchanged().readResultOK()\n\n\t\t\tdefault:\n\t\t\t\treturn ErrMalformPkt\n\t\t\t}\n\t\tdefault:\n\t\t\treturn ErrMalformPkt\n\t\t}\n\n\tcase \"sha256_password\":\n\t\tswitch len(authData) {\n\t\tcase 0:\n\t\t\treturn nil // auth successful\n\t\tdefault:\n\t\t\tblock, _ := pem.Decode(authData)\n\t\t\tif block == nil {\n\t\t\t\treturn fmt.Errorf(\"no Pem data found, data: %s\", authData)\n\t\t\t}\n\n\t\t\tpub, err := x509.ParsePKIXPublicKey(block.Bytes)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// send encrypted password\n\t\t\terr = mc.sendEncryptedPassword(oldAuthData, pub.(*rsa.PublicKey))\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn mc.resultUnchanged().readResultOK()\n\t\t}\n\n\tdefault:\n\t\treturn nil // auth successful\n\t}\n\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/buffer.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"io\"\n\t\"net\"\n\t\"time\"\n)\n\nconst defaultBufSize = 4096\nconst maxCachedBufSize = 256 * 1024\n\n// A buffer which is used for both reading and writing.\n// This is possible since communication on each connection is synchronous.\n// In other words, we can't write and read simultaneously on the same connection.\n// The buffer is similar to bufio.Reader / Writer but zero-copy-ish\n// Also highly optimized for this particular use case.\n// This buffer is backed by two byte slices in a double-buffering scheme\ntype buffer struct {\n\tbuf     []byte // buf is a byte buffer who's length and capacity are equal.\n\tnc      net.Conn\n\tidx     int\n\tlength  int\n\ttimeout time.Duration\n\tdbuf    [2][]byte // dbuf is an array with the two byte slices that back this buffer\n\tflipcnt uint      // flipccnt is the current buffer counter for double-buffering\n}\n\n// newBuffer allocates and returns a new buffer.\nfunc newBuffer(nc net.Conn) buffer {\n\tfg := make([]byte, defaultBufSize)\n\treturn buffer{\n\t\tbuf:  fg,\n\t\tnc:   nc,\n\t\tdbuf: [2][]byte{fg, nil},\n\t}\n}\n\n// flip replaces the active buffer with the background buffer\n// this is a delayed flip that simply increases the buffer counter;\n// the actual flip will be performed the next time we call `buffer.fill`\nfunc (b *buffer) flip() {\n\tb.flipcnt += 1\n}\n\n// fill reads into the buffer until at least _need_ bytes are in it\nfunc (b *buffer) fill(need int) error {\n\tn := b.length\n\t// fill data into its double-buffering target: if we've called\n\t// flip on this buffer, we'll be copying to the background buffer,\n\t// and then filling it with network data; otherwise we'll just move\n\t// the contents of the current buffer to the front before filling it\n\tdest := b.dbuf[b.flipcnt&1]\n\n\t// grow buffer if necessary to fit the whole packet.\n\tif need > len(dest) {\n\t\t// Round up to the next multiple of the default size\n\t\tdest = make([]byte, ((need/defaultBufSize)+1)*defaultBufSize)\n\n\t\t// if the allocated buffer is not too large, move it to backing storage\n\t\t// to prevent extra allocations on applications that perform large reads\n\t\tif len(dest) <= maxCachedBufSize {\n\t\t\tb.dbuf[b.flipcnt&1] = dest\n\t\t}\n\t}\n\n\t// if we're filling the fg buffer, move the existing data to the start of it.\n\t// if we're filling the bg buffer, copy over the data\n\tif n > 0 {\n\t\tcopy(dest[:n], b.buf[b.idx:])\n\t}\n\n\tb.buf = dest\n\tb.idx = 0\n\n\tfor {\n\t\tif b.timeout > 0 {\n\t\t\tif err := b.nc.SetReadDeadline(time.Now().Add(b.timeout)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tnn, err := b.nc.Read(b.buf[n:])\n\t\tn += nn\n\n\t\tswitch err {\n\t\tcase nil:\n\t\t\tif n < need {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tb.length = n\n\t\t\treturn nil\n\n\t\tcase io.EOF:\n\t\t\tif n >= need {\n\t\t\t\tb.length = n\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn io.ErrUnexpectedEOF\n\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\t}\n}\n\n// returns next N bytes from buffer.\n// The returned slice is only guaranteed to be valid until the next read\nfunc (b *buffer) readNext(need int) ([]byte, error) {\n\tif b.length < need {\n\t\t// refill\n\t\tif err := b.fill(need); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\toffset := b.idx\n\tb.idx += need\n\tb.length -= need\n\treturn b.buf[offset:b.idx], nil\n}\n\n// takeBuffer returns a buffer with the requested size.\n// If possible, a slice from the existing buffer is returned.\n// Otherwise a bigger buffer is made.\n// Only one buffer (total) can be used at a time.\nfunc (b *buffer) takeBuffer(length int) ([]byte, error) {\n\tif b.length > 0 {\n\t\treturn nil, ErrBusyBuffer\n\t}\n\n\t// test (cheap) general case first\n\tif length <= cap(b.buf) {\n\t\treturn b.buf[:length], nil\n\t}\n\n\tif length < maxPacketSize {\n\t\tb.buf = make([]byte, length)\n\t\treturn b.buf, nil\n\t}\n\n\t// buffer is larger than we want to store.\n\treturn make([]byte, length), nil\n}\n\n// takeSmallBuffer is shortcut which can be used if length is\n// known to be smaller than defaultBufSize.\n// Only one buffer (total) can be used at a time.\nfunc (b *buffer) takeSmallBuffer(length int) ([]byte, error) {\n\tif b.length > 0 {\n\t\treturn nil, ErrBusyBuffer\n\t}\n\treturn b.buf[:length], nil\n}\n\n// takeCompleteBuffer returns the complete existing buffer.\n// This can be used if the necessary buffer size is unknown.\n// cap and len of the returned buffer will be equal.\n// Only one buffer (total) can be used at a time.\nfunc (b *buffer) takeCompleteBuffer() ([]byte, error) {\n\tif b.length > 0 {\n\t\treturn nil, ErrBusyBuffer\n\t}\n\treturn b.buf, nil\n}\n\n// store stores buf, an updated buffer, if its suitable to do so.\nfunc (b *buffer) store(buf []byte) error {\n\tif b.length > 0 {\n\t\treturn ErrBusyBuffer\n\t} else if cap(buf) <= maxPacketSize && cap(buf) > cap(b.buf) {\n\t\tb.buf = buf[:cap(buf)]\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/collations.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2014 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nconst defaultCollation = \"utf8mb4_general_ci\"\nconst binaryCollationID = 63\n\n// A list of available collations mapped to the internal ID.\n// To update this map use the following MySQL query:\n//\n//\tSELECT COLLATION_NAME, ID FROM information_schema.COLLATIONS WHERE ID<256 ORDER BY ID\n//\n// Handshake packet have only 1 byte for collation_id.  So we can't use collations with ID > 255.\n//\n// ucs2, utf16, and utf32 can't be used for connection charset.\n// https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-impermissible-client-charset\n// They are commented out to reduce this map.\nvar collations = map[string]byte{\n\t\"big5_chinese_ci\":      1,\n\t\"latin2_czech_cs\":      2,\n\t\"dec8_swedish_ci\":      3,\n\t\"cp850_general_ci\":     4,\n\t\"latin1_german1_ci\":    5,\n\t\"hp8_english_ci\":       6,\n\t\"koi8r_general_ci\":     7,\n\t\"latin1_swedish_ci\":    8,\n\t\"latin2_general_ci\":    9,\n\t\"swe7_swedish_ci\":      10,\n\t\"ascii_general_ci\":     11,\n\t\"ujis_japanese_ci\":     12,\n\t\"sjis_japanese_ci\":     13,\n\t\"cp1251_bulgarian_ci\":  14,\n\t\"latin1_danish_ci\":     15,\n\t\"hebrew_general_ci\":    16,\n\t\"tis620_thai_ci\":       18,\n\t\"euckr_korean_ci\":      19,\n\t\"latin7_estonian_cs\":   20,\n\t\"latin2_hungarian_ci\":  21,\n\t\"koi8u_general_ci\":     22,\n\t\"cp1251_ukrainian_ci\":  23,\n\t\"gb2312_chinese_ci\":    24,\n\t\"greek_general_ci\":     25,\n\t\"cp1250_general_ci\":    26,\n\t\"latin2_croatian_ci\":   27,\n\t\"gbk_chinese_ci\":       28,\n\t\"cp1257_lithuanian_ci\": 29,\n\t\"latin5_turkish_ci\":    30,\n\t\"latin1_german2_ci\":    31,\n\t\"armscii8_general_ci\":  32,\n\t\"utf8_general_ci\":      33,\n\t\"cp1250_czech_cs\":      34,\n\t//\"ucs2_general_ci\":          35,\n\t\"cp866_general_ci\":    36,\n\t\"keybcs2_general_ci\":  37,\n\t\"macce_general_ci\":    38,\n\t\"macroman_general_ci\": 39,\n\t\"cp852_general_ci\":    40,\n\t\"latin7_general_ci\":   41,\n\t\"latin7_general_cs\":   42,\n\t\"macce_bin\":           43,\n\t\"cp1250_croatian_ci\":  44,\n\t\"utf8mb4_general_ci\":  45,\n\t\"utf8mb4_bin\":         46,\n\t\"latin1_bin\":          47,\n\t\"latin1_general_ci\":   48,\n\t\"latin1_general_cs\":   49,\n\t\"cp1251_bin\":          50,\n\t\"cp1251_general_ci\":   51,\n\t\"cp1251_general_cs\":   52,\n\t\"macroman_bin\":        53,\n\t//\"utf16_general_ci\":         54,\n\t//\"utf16_bin\":                55,\n\t//\"utf16le_general_ci\":       56,\n\t\"cp1256_general_ci\": 57,\n\t\"cp1257_bin\":        58,\n\t\"cp1257_general_ci\": 59,\n\t//\"utf32_general_ci\":         60,\n\t//\"utf32_bin\":                61,\n\t//\"utf16le_bin\":              62,\n\t\"binary\":          63,\n\t\"armscii8_bin\":    64,\n\t\"ascii_bin\":       65,\n\t\"cp1250_bin\":      66,\n\t\"cp1256_bin\":      67,\n\t\"cp866_bin\":       68,\n\t\"dec8_bin\":        69,\n\t\"greek_bin\":       70,\n\t\"hebrew_bin\":      71,\n\t\"hp8_bin\":         72,\n\t\"keybcs2_bin\":     73,\n\t\"koi8r_bin\":       74,\n\t\"koi8u_bin\":       75,\n\t\"utf8_tolower_ci\": 76,\n\t\"latin2_bin\":      77,\n\t\"latin5_bin\":      78,\n\t\"latin7_bin\":      79,\n\t\"cp850_bin\":       80,\n\t\"cp852_bin\":       81,\n\t\"swe7_bin\":        82,\n\t\"utf8_bin\":        83,\n\t\"big5_bin\":        84,\n\t\"euckr_bin\":       85,\n\t\"gb2312_bin\":      86,\n\t\"gbk_bin\":         87,\n\t\"sjis_bin\":        88,\n\t\"tis620_bin\":      89,\n\t//\"ucs2_bin\":                 90,\n\t\"ujis_bin\":            91,\n\t\"geostd8_general_ci\":  92,\n\t\"geostd8_bin\":         93,\n\t\"latin1_spanish_ci\":   94,\n\t\"cp932_japanese_ci\":   95,\n\t\"cp932_bin\":           96,\n\t\"eucjpms_japanese_ci\": 97,\n\t\"eucjpms_bin\":         98,\n\t\"cp1250_polish_ci\":    99,\n\t//\"utf16_unicode_ci\":         101,\n\t//\"utf16_icelandic_ci\":       102,\n\t//\"utf16_latvian_ci\":         103,\n\t//\"utf16_romanian_ci\":        104,\n\t//\"utf16_slovenian_ci\":       105,\n\t//\"utf16_polish_ci\":          106,\n\t//\"utf16_estonian_ci\":        107,\n\t//\"utf16_spanish_ci\":         108,\n\t//\"utf16_swedish_ci\":         109,\n\t//\"utf16_turkish_ci\":         110,\n\t//\"utf16_czech_ci\":           111,\n\t//\"utf16_danish_ci\":          112,\n\t//\"utf16_lithuanian_ci\":      113,\n\t//\"utf16_slovak_ci\":          114,\n\t//\"utf16_spanish2_ci\":        115,\n\t//\"utf16_roman_ci\":           116,\n\t//\"utf16_persian_ci\":         117,\n\t//\"utf16_esperanto_ci\":       118,\n\t//\"utf16_hungarian_ci\":       119,\n\t//\"utf16_sinhala_ci\":         120,\n\t//\"utf16_german2_ci\":         121,\n\t//\"utf16_croatian_ci\":        122,\n\t//\"utf16_unicode_520_ci\":     123,\n\t//\"utf16_vietnamese_ci\":      124,\n\t//\"ucs2_unicode_ci\":          128,\n\t//\"ucs2_icelandic_ci\":        129,\n\t//\"ucs2_latvian_ci\":          130,\n\t//\"ucs2_romanian_ci\":         131,\n\t//\"ucs2_slovenian_ci\":        132,\n\t//\"ucs2_polish_ci\":           133,\n\t//\"ucs2_estonian_ci\":         134,\n\t//\"ucs2_spanish_ci\":          135,\n\t//\"ucs2_swedish_ci\":          136,\n\t//\"ucs2_turkish_ci\":          137,\n\t//\"ucs2_czech_ci\":            138,\n\t//\"ucs2_danish_ci\":           139,\n\t//\"ucs2_lithuanian_ci\":       140,\n\t//\"ucs2_slovak_ci\":           141,\n\t//\"ucs2_spanish2_ci\":         142,\n\t//\"ucs2_roman_ci\":            143,\n\t//\"ucs2_persian_ci\":          144,\n\t//\"ucs2_esperanto_ci\":        145,\n\t//\"ucs2_hungarian_ci\":        146,\n\t//\"ucs2_sinhala_ci\":          147,\n\t//\"ucs2_german2_ci\":          148,\n\t//\"ucs2_croatian_ci\":         149,\n\t//\"ucs2_unicode_520_ci\":      150,\n\t//\"ucs2_vietnamese_ci\":       151,\n\t//\"ucs2_general_mysql500_ci\": 159,\n\t//\"utf32_unicode_ci\":         160,\n\t//\"utf32_icelandic_ci\":       161,\n\t//\"utf32_latvian_ci\":         162,\n\t//\"utf32_romanian_ci\":        163,\n\t//\"utf32_slovenian_ci\":       164,\n\t//\"utf32_polish_ci\":          165,\n\t//\"utf32_estonian_ci\":        166,\n\t//\"utf32_spanish_ci\":         167,\n\t//\"utf32_swedish_ci\":         168,\n\t//\"utf32_turkish_ci\":         169,\n\t//\"utf32_czech_ci\":           170,\n\t//\"utf32_danish_ci\":          171,\n\t//\"utf32_lithuanian_ci\":      172,\n\t//\"utf32_slovak_ci\":          173,\n\t//\"utf32_spanish2_ci\":        174,\n\t//\"utf32_roman_ci\":           175,\n\t//\"utf32_persian_ci\":         176,\n\t//\"utf32_esperanto_ci\":       177,\n\t//\"utf32_hungarian_ci\":       178,\n\t//\"utf32_sinhala_ci\":         179,\n\t//\"utf32_german2_ci\":         180,\n\t//\"utf32_croatian_ci\":        181,\n\t//\"utf32_unicode_520_ci\":     182,\n\t//\"utf32_vietnamese_ci\":      183,\n\t\"utf8_unicode_ci\":          192,\n\t\"utf8_icelandic_ci\":        193,\n\t\"utf8_latvian_ci\":          194,\n\t\"utf8_romanian_ci\":         195,\n\t\"utf8_slovenian_ci\":        196,\n\t\"utf8_polish_ci\":           197,\n\t\"utf8_estonian_ci\":         198,\n\t\"utf8_spanish_ci\":          199,\n\t\"utf8_swedish_ci\":          200,\n\t\"utf8_turkish_ci\":          201,\n\t\"utf8_czech_ci\":            202,\n\t\"utf8_danish_ci\":           203,\n\t\"utf8_lithuanian_ci\":       204,\n\t\"utf8_slovak_ci\":           205,\n\t\"utf8_spanish2_ci\":         206,\n\t\"utf8_roman_ci\":            207,\n\t\"utf8_persian_ci\":          208,\n\t\"utf8_esperanto_ci\":        209,\n\t\"utf8_hungarian_ci\":        210,\n\t\"utf8_sinhala_ci\":          211,\n\t\"utf8_german2_ci\":          212,\n\t\"utf8_croatian_ci\":         213,\n\t\"utf8_unicode_520_ci\":      214,\n\t\"utf8_vietnamese_ci\":       215,\n\t\"utf8_general_mysql500_ci\": 223,\n\t\"utf8mb4_unicode_ci\":       224,\n\t\"utf8mb4_icelandic_ci\":     225,\n\t\"utf8mb4_latvian_ci\":       226,\n\t\"utf8mb4_romanian_ci\":      227,\n\t\"utf8mb4_slovenian_ci\":     228,\n\t\"utf8mb4_polish_ci\":        229,\n\t\"utf8mb4_estonian_ci\":      230,\n\t\"utf8mb4_spanish_ci\":       231,\n\t\"utf8mb4_swedish_ci\":       232,\n\t\"utf8mb4_turkish_ci\":       233,\n\t\"utf8mb4_czech_ci\":         234,\n\t\"utf8mb4_danish_ci\":        235,\n\t\"utf8mb4_lithuanian_ci\":    236,\n\t\"utf8mb4_slovak_ci\":        237,\n\t\"utf8mb4_spanish2_ci\":      238,\n\t\"utf8mb4_roman_ci\":         239,\n\t\"utf8mb4_persian_ci\":       240,\n\t\"utf8mb4_esperanto_ci\":     241,\n\t\"utf8mb4_hungarian_ci\":     242,\n\t\"utf8mb4_sinhala_ci\":       243,\n\t\"utf8mb4_german2_ci\":       244,\n\t\"utf8mb4_croatian_ci\":      245,\n\t\"utf8mb4_unicode_520_ci\":   246,\n\t\"utf8mb4_vietnamese_ci\":    247,\n\t\"gb18030_chinese_ci\":       248,\n\t\"gb18030_bin\":              249,\n\t\"gb18030_unicode_520_ci\":   250,\n\t\"utf8mb4_0900_ai_ci\":       255,\n}\n\n// A denylist of collations which is unsafe to interpolate parameters.\n// These multibyte encodings may contains 0x5c (`\\`) in their trailing bytes.\nvar unsafeCollations = map[string]bool{\n\t\"big5_chinese_ci\":        true,\n\t\"sjis_japanese_ci\":       true,\n\t\"gbk_chinese_ci\":         true,\n\t\"big5_bin\":               true,\n\t\"gb2312_bin\":             true,\n\t\"gbk_bin\":                true,\n\t\"sjis_bin\":               true,\n\t\"cp932_japanese_ci\":      true,\n\t\"cp932_bin\":              true,\n\t\"gb18030_chinese_ci\":     true,\n\t\"gb18030_bin\":            true,\n\t\"gb18030_unicode_520_ci\": true,\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/conncheck.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\n//go:build linux || darwin || dragonfly || freebsd || netbsd || openbsd || solaris || illumos\n// +build linux darwin dragonfly freebsd netbsd openbsd solaris illumos\n\npackage mysql\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"syscall\"\n)\n\nvar errUnexpectedRead = errors.New(\"unexpected read from socket\")\n\nfunc connCheck(conn net.Conn) error {\n\tvar sysErr error\n\n\tsysConn, ok := conn.(syscall.Conn)\n\tif !ok {\n\t\treturn nil\n\t}\n\trawConn, err := sysConn.SyscallConn()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = rawConn.Read(func(fd uintptr) bool {\n\t\tvar buf [1]byte\n\t\tn, err := syscall.Read(int(fd), buf[:])\n\t\tswitch {\n\t\tcase n == 0 && err == nil:\n\t\t\tsysErr = io.EOF\n\t\tcase n > 0:\n\t\t\tsysErr = errUnexpectedRead\n\t\tcase err == syscall.EAGAIN || err == syscall.EWOULDBLOCK:\n\t\t\tsysErr = nil\n\t\tdefault:\n\t\t\tsysErr = err\n\t\t}\n\t\treturn true\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn sysErr\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/conncheck_dummy.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\n//go:build !linux && !darwin && !dragonfly && !freebsd && !netbsd && !openbsd && !solaris && !illumos\n// +build !linux,!darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!illumos\n\npackage mysql\n\nimport \"net\"\n\nfunc connCheck(conn net.Conn) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/connection.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"database/sql/driver\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype mysqlConn struct {\n\tbuf              buffer\n\tnetConn          net.Conn\n\trawConn          net.Conn    // underlying connection when netConn is TLS connection.\n\tresult           mysqlResult // managed by clearResult() and handleOkPacket().\n\tcfg              *Config\n\tconnector        *connector\n\tmaxAllowedPacket int\n\tmaxWriteSize     int\n\twriteTimeout     time.Duration\n\tflags            clientFlag\n\tstatus           statusFlag\n\tsequence         uint8\n\tparseTime        bool\n\n\t// for context support (Go 1.8+)\n\twatching bool\n\twatcher  chan<- context.Context\n\tclosech  chan struct{}\n\tfinished chan<- struct{}\n\tcanceled atomicError // set non-nil if conn is canceled\n\tclosed   atomicBool  // set when conn is closed, before closech is closed\n}\n\n// Helper function to call per-connection logger.\nfunc (mc *mysqlConn) log(v ...any) {\n\tmc.cfg.Logger.Print(v...)\n}\n\n// Handles parameters set in DSN after the connection is established\nfunc (mc *mysqlConn) handleParams() (err error) {\n\tvar cmdSet strings.Builder\n\n\tfor param, val := range mc.cfg.Params {\n\t\tswitch param {\n\t\t// Charset: character_set_connection, character_set_client, character_set_results\n\t\tcase \"charset\":\n\t\t\tcharsets := strings.Split(val, \",\")\n\t\t\tfor _, cs := range charsets {\n\t\t\t\t// ignore errors here - a charset may not exist\n\t\t\t\tif mc.cfg.Collation != \"\" {\n\t\t\t\t\terr = mc.exec(\"SET NAMES \" + cs + \" COLLATE \" + mc.cfg.Collation)\n\t\t\t\t} else {\n\t\t\t\t\terr = mc.exec(\"SET NAMES \" + cs)\n\t\t\t\t}\n\t\t\t\tif err == nil {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// Other system vars accumulated in a single SET command\n\t\tdefault:\n\t\t\tif cmdSet.Len() == 0 {\n\t\t\t\t// Heuristic: 29 chars for each other key=value to reduce reallocations\n\t\t\t\tcmdSet.Grow(4 + len(param) + 3 + len(val) + 30*(len(mc.cfg.Params)-1))\n\t\t\t\tcmdSet.WriteString(\"SET \")\n\t\t\t} else {\n\t\t\t\tcmdSet.WriteString(\", \")\n\t\t\t}\n\t\t\tcmdSet.WriteString(param)\n\t\t\tcmdSet.WriteString(\" = \")\n\t\t\tcmdSet.WriteString(val)\n\t\t}\n\t}\n\n\tif cmdSet.Len() > 0 {\n\t\terr = mc.exec(cmdSet.String())\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (mc *mysqlConn) markBadConn(err error) error {\n\tif mc == nil {\n\t\treturn err\n\t}\n\tif err != errBadConnNoWrite {\n\t\treturn err\n\t}\n\treturn driver.ErrBadConn\n}\n\nfunc (mc *mysqlConn) Begin() (driver.Tx, error) {\n\treturn mc.begin(false)\n}\n\nfunc (mc *mysqlConn) begin(readOnly bool) (driver.Tx, error) {\n\tif mc.closed.Load() {\n\t\tmc.log(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\tvar q string\n\tif readOnly {\n\t\tq = \"START TRANSACTION READ ONLY\"\n\t} else {\n\t\tq = \"START TRANSACTION\"\n\t}\n\terr := mc.exec(q)\n\tif err == nil {\n\t\treturn &mysqlTx{mc}, err\n\t}\n\treturn nil, mc.markBadConn(err)\n}\n\nfunc (mc *mysqlConn) Close() (err error) {\n\t// Makes Close idempotent\n\tif !mc.closed.Load() {\n\t\terr = mc.writeCommandPacket(comQuit)\n\t}\n\n\tmc.cleanup()\n\tmc.clearResult()\n\treturn\n}\n\n// Closes the network connection and unsets internal variables. Do not call this\n// function after successfully authentication, call Close instead. This function\n// is called before auth or on auth failure because MySQL will have already\n// closed the network connection.\nfunc (mc *mysqlConn) cleanup() {\n\tif mc.closed.Swap(true) {\n\t\treturn\n\t}\n\n\t// Makes cleanup idempotent\n\tclose(mc.closech)\n\tconn := mc.rawConn\n\tif conn == nil {\n\t\treturn\n\t}\n\tif err := conn.Close(); err != nil {\n\t\tmc.log(err)\n\t}\n\t// This function can be called from multiple goroutines.\n\t// So we can not mc.clearResult() here.\n\t// Caller should do it if they are in safe goroutine.\n}\n\nfunc (mc *mysqlConn) error() error {\n\tif mc.closed.Load() {\n\t\tif err := mc.canceled.Value(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn ErrInvalidConn\n\t}\n\treturn nil\n}\n\nfunc (mc *mysqlConn) Prepare(query string) (driver.Stmt, error) {\n\tif mc.closed.Load() {\n\t\tmc.log(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\t// Send command\n\terr := mc.writeCommandPacketStr(comStmtPrepare, query)\n\tif err != nil {\n\t\t// STMT_PREPARE is safe to retry.  So we can return ErrBadConn here.\n\t\tmc.log(err)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\n\tstmt := &mysqlStmt{\n\t\tmc: mc,\n\t}\n\n\t// Read Result\n\tcolumnCount, err := stmt.readPrepareResultPacket()\n\tif err == nil {\n\t\tif stmt.paramCount > 0 {\n\t\t\tif err = mc.readUntilEOF(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tif columnCount > 0 {\n\t\t\terr = mc.readUntilEOF()\n\t\t}\n\t}\n\n\treturn stmt, err\n}\n\nfunc (mc *mysqlConn) interpolateParams(query string, args []driver.Value) (string, error) {\n\t// Number of ? should be same to len(args)\n\tif strings.Count(query, \"?\") != len(args) {\n\t\treturn \"\", driver.ErrSkip\n\t}\n\n\tbuf, err := mc.buf.takeCompleteBuffer()\n\tif err != nil {\n\t\t// can not take the buffer. Something must be wrong with the connection\n\t\tmc.log(err)\n\t\treturn \"\", ErrInvalidConn\n\t}\n\tbuf = buf[:0]\n\targPos := 0\n\n\tfor i := 0; i < len(query); i++ {\n\t\tq := strings.IndexByte(query[i:], '?')\n\t\tif q == -1 {\n\t\t\tbuf = append(buf, query[i:]...)\n\t\t\tbreak\n\t\t}\n\t\tbuf = append(buf, query[i:i+q]...)\n\t\ti += q\n\n\t\targ := args[argPos]\n\t\targPos++\n\n\t\tif arg == nil {\n\t\t\tbuf = append(buf, \"NULL\"...)\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch v := arg.(type) {\n\t\tcase int64:\n\t\t\tbuf = strconv.AppendInt(buf, v, 10)\n\t\tcase uint64:\n\t\t\t// Handle uint64 explicitly because our custom ConvertValue emits unsigned values\n\t\t\tbuf = strconv.AppendUint(buf, v, 10)\n\t\tcase float64:\n\t\t\tbuf = strconv.AppendFloat(buf, v, 'g', -1, 64)\n\t\tcase bool:\n\t\t\tif v {\n\t\t\t\tbuf = append(buf, '1')\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, '0')\n\t\t\t}\n\t\tcase time.Time:\n\t\t\tif v.IsZero() {\n\t\t\t\tbuf = append(buf, \"'0000-00-00'\"...)\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, '\\'')\n\t\t\t\tbuf, err = appendDateTime(buf, v.In(mc.cfg.Loc), mc.cfg.timeTruncate)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", err\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, '\\'')\n\t\t\t}\n\t\tcase json.RawMessage:\n\t\t\tbuf = append(buf, '\\'')\n\t\t\tif mc.status&statusNoBackslashEscapes == 0 {\n\t\t\t\tbuf = escapeBytesBackslash(buf, v)\n\t\t\t} else {\n\t\t\t\tbuf = escapeBytesQuotes(buf, v)\n\t\t\t}\n\t\t\tbuf = append(buf, '\\'')\n\t\tcase []byte:\n\t\t\tif v == nil {\n\t\t\t\tbuf = append(buf, \"NULL\"...)\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, \"_binary'\"...)\n\t\t\t\tif mc.status&statusNoBackslashEscapes == 0 {\n\t\t\t\t\tbuf = escapeBytesBackslash(buf, v)\n\t\t\t\t} else {\n\t\t\t\t\tbuf = escapeBytesQuotes(buf, v)\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, '\\'')\n\t\t\t}\n\t\tcase string:\n\t\t\tbuf = append(buf, '\\'')\n\t\t\tif mc.status&statusNoBackslashEscapes == 0 {\n\t\t\t\tbuf = escapeStringBackslash(buf, v)\n\t\t\t} else {\n\t\t\t\tbuf = escapeStringQuotes(buf, v)\n\t\t\t}\n\t\t\tbuf = append(buf, '\\'')\n\t\tdefault:\n\t\t\treturn \"\", driver.ErrSkip\n\t\t}\n\n\t\tif len(buf)+4 > mc.maxAllowedPacket {\n\t\t\treturn \"\", driver.ErrSkip\n\t\t}\n\t}\n\tif argPos != len(args) {\n\t\treturn \"\", driver.ErrSkip\n\t}\n\treturn string(buf), nil\n}\n\nfunc (mc *mysqlConn) Exec(query string, args []driver.Value) (driver.Result, error) {\n\tif mc.closed.Load() {\n\t\tmc.log(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\tif len(args) != 0 {\n\t\tif !mc.cfg.InterpolateParams {\n\t\t\treturn nil, driver.ErrSkip\n\t\t}\n\t\t// try to interpolate the parameters to save extra roundtrips for preparing and closing a statement\n\t\tprepared, err := mc.interpolateParams(query, args)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery = prepared\n\t}\n\n\terr := mc.exec(query)\n\tif err == nil {\n\t\tcopied := mc.result\n\t\treturn &copied, err\n\t}\n\treturn nil, mc.markBadConn(err)\n}\n\n// Internal function to execute commands\nfunc (mc *mysqlConn) exec(query string) error {\n\thandleOk := mc.clearResult()\n\t// Send command\n\tif err := mc.writeCommandPacketStr(comQuery, query); err != nil {\n\t\treturn mc.markBadConn(err)\n\t}\n\n\t// Read Result\n\tresLen, err := handleOk.readResultSetHeaderPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif resLen > 0 {\n\t\t// columns\n\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// rows\n\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn handleOk.discardResults()\n}\n\nfunc (mc *mysqlConn) Query(query string, args []driver.Value) (driver.Rows, error) {\n\treturn mc.query(query, args)\n}\n\nfunc (mc *mysqlConn) query(query string, args []driver.Value) (*textRows, error) {\n\thandleOk := mc.clearResult()\n\n\tif mc.closed.Load() {\n\t\tmc.log(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\tif len(args) != 0 {\n\t\tif !mc.cfg.InterpolateParams {\n\t\t\treturn nil, driver.ErrSkip\n\t\t}\n\t\t// try client-side prepare to reduce roundtrip\n\t\tprepared, err := mc.interpolateParams(query, args)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tquery = prepared\n\t}\n\t// Send command\n\terr := mc.writeCommandPacketStr(comQuery, query)\n\tif err == nil {\n\t\t// Read Result\n\t\tvar resLen int\n\t\tresLen, err = handleOk.readResultSetHeaderPacket()\n\t\tif err == nil {\n\t\t\trows := new(textRows)\n\t\t\trows.mc = mc\n\n\t\t\tif resLen == 0 {\n\t\t\t\trows.rs.done = true\n\n\t\t\t\tswitch err := rows.NextResultSet(); err {\n\t\t\t\tcase nil, io.EOF:\n\t\t\t\t\treturn rows, nil\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Columns\n\t\t\trows.rs.columns, err = mc.readColumns(resLen)\n\t\t\treturn rows, err\n\t\t}\n\t}\n\treturn nil, mc.markBadConn(err)\n}\n\n// Gets the value of the given MySQL System Variable\n// The returned byte slice is only valid until the next read\nfunc (mc *mysqlConn) getSystemVar(name string) ([]byte, error) {\n\t// Send command\n\thandleOk := mc.clearResult()\n\tif err := mc.writeCommandPacketStr(comQuery, \"SELECT @@\"+name); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Read Result\n\tresLen, err := handleOk.readResultSetHeaderPacket()\n\tif err == nil {\n\t\trows := new(textRows)\n\t\trows.mc = mc\n\t\trows.rs.columns = []mysqlField{{fieldType: fieldTypeVarChar}}\n\n\t\tif resLen > 0 {\n\t\t\t// Columns\n\t\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tdest := make([]driver.Value, resLen)\n\t\tif err = rows.readRow(dest); err == nil {\n\t\t\treturn dest[0].([]byte), mc.readUntilEOF()\n\t\t}\n\t}\n\treturn nil, err\n}\n\n// finish is called when the query has canceled.\nfunc (mc *mysqlConn) cancel(err error) {\n\tmc.canceled.Set(err)\n\tmc.cleanup()\n}\n\n// finish is called when the query has succeeded.\nfunc (mc *mysqlConn) finish() {\n\tif !mc.watching || mc.finished == nil {\n\t\treturn\n\t}\n\tselect {\n\tcase mc.finished <- struct{}{}:\n\t\tmc.watching = false\n\tcase <-mc.closech:\n\t}\n}\n\n// Ping implements driver.Pinger interface\nfunc (mc *mysqlConn) Ping(ctx context.Context) (err error) {\n\tif mc.closed.Load() {\n\t\tmc.log(ErrInvalidConn)\n\t\treturn driver.ErrBadConn\n\t}\n\n\tif err = mc.watchCancel(ctx); err != nil {\n\t\treturn\n\t}\n\tdefer mc.finish()\n\n\thandleOk := mc.clearResult()\n\tif err = mc.writeCommandPacket(comPing); err != nil {\n\t\treturn mc.markBadConn(err)\n\t}\n\n\treturn handleOk.readResultOK()\n}\n\n// BeginTx implements driver.ConnBeginTx interface\nfunc (mc *mysqlConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {\n\tif mc.closed.Load() {\n\t\treturn nil, driver.ErrBadConn\n\t}\n\n\tif err := mc.watchCancel(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\tdefer mc.finish()\n\n\tif sql.IsolationLevel(opts.Isolation) != sql.LevelDefault {\n\t\tlevel, err := mapIsolationLevel(opts.Isolation)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = mc.exec(\"SET TRANSACTION ISOLATION LEVEL \" + level)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn mc.begin(opts.ReadOnly)\n}\n\nfunc (mc *mysqlConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {\n\tdargs, err := namedValueToValue(args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := mc.watchCancel(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\trows, err := mc.query(query, dargs)\n\tif err != nil {\n\t\tmc.finish()\n\t\treturn nil, err\n\t}\n\trows.finish = mc.finish\n\treturn rows, err\n}\n\nfunc (mc *mysqlConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {\n\tdargs, err := namedValueToValue(args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := mc.watchCancel(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\tdefer mc.finish()\n\n\treturn mc.Exec(query, dargs)\n}\n\nfunc (mc *mysqlConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) {\n\tif err := mc.watchCancel(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tstmt, err := mc.Prepare(query)\n\tmc.finish()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tselect {\n\tdefault:\n\tcase <-ctx.Done():\n\t\tstmt.Close()\n\t\treturn nil, ctx.Err()\n\t}\n\treturn stmt, nil\n}\n\nfunc (stmt *mysqlStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) {\n\tdargs, err := namedValueToValue(args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := stmt.mc.watchCancel(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\trows, err := stmt.query(dargs)\n\tif err != nil {\n\t\tstmt.mc.finish()\n\t\treturn nil, err\n\t}\n\trows.finish = stmt.mc.finish\n\treturn rows, err\n}\n\nfunc (stmt *mysqlStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) {\n\tdargs, err := namedValueToValue(args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := stmt.mc.watchCancel(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\tdefer stmt.mc.finish()\n\n\treturn stmt.Exec(dargs)\n}\n\nfunc (mc *mysqlConn) watchCancel(ctx context.Context) error {\n\tif mc.watching {\n\t\t// Reach here if canceled,\n\t\t// so the connection is already invalid\n\t\tmc.cleanup()\n\t\treturn nil\n\t}\n\t// When ctx is already cancelled, don't watch it.\n\tif err := ctx.Err(); err != nil {\n\t\treturn err\n\t}\n\t// When ctx is not cancellable, don't watch it.\n\tif ctx.Done() == nil {\n\t\treturn nil\n\t}\n\t// When watcher is not alive, can't watch it.\n\tif mc.watcher == nil {\n\t\treturn nil\n\t}\n\n\tmc.watching = true\n\tmc.watcher <- ctx\n\treturn nil\n}\n\nfunc (mc *mysqlConn) startWatcher() {\n\twatcher := make(chan context.Context, 1)\n\tmc.watcher = watcher\n\tfinished := make(chan struct{})\n\tmc.finished = finished\n\tgo func() {\n\t\tfor {\n\t\t\tvar ctx context.Context\n\t\t\tselect {\n\t\t\tcase ctx = <-watcher:\n\t\t\tcase <-mc.closech:\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\tmc.cancel(ctx.Err())\n\t\t\tcase <-finished:\n\t\t\tcase <-mc.closech:\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n}\n\nfunc (mc *mysqlConn) CheckNamedValue(nv *driver.NamedValue) (err error) {\n\tnv.Value, err = converter{}.ConvertValue(nv.Value)\n\treturn\n}\n\n// ResetSession implements driver.SessionResetter.\n// (From Go 1.10)\nfunc (mc *mysqlConn) ResetSession(ctx context.Context) error {\n\tif mc.closed.Load() {\n\t\treturn driver.ErrBadConn\n\t}\n\n\t// Perform a stale connection check. We only perform this check for\n\t// the first query on a connection that has been checked out of the\n\t// connection pool: a fresh connection from the pool is more likely\n\t// to be stale, and it has not performed any previous writes that\n\t// could cause data corruption, so it's safe to return ErrBadConn\n\t// if the check fails.\n\tif mc.cfg.CheckConnLiveness {\n\t\tconn := mc.netConn\n\t\tif mc.rawConn != nil {\n\t\t\tconn = mc.rawConn\n\t\t}\n\t\tvar err error\n\t\tif mc.cfg.ReadTimeout != 0 {\n\t\t\terr = conn.SetReadDeadline(time.Now().Add(mc.cfg.ReadTimeout))\n\t\t}\n\t\tif err == nil {\n\t\t\terr = connCheck(conn)\n\t\t}\n\t\tif err != nil {\n\t\t\tmc.log(\"closing bad idle connection: \", err)\n\t\t\treturn driver.ErrBadConn\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// IsValid implements driver.Validator interface\n// (From Go 1.15)\nfunc (mc *mysqlConn) IsValid() bool {\n\treturn !mc.closed.Load()\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/connector.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2018 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"context\"\n\t\"database/sql/driver\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype connector struct {\n\tcfg               *Config // immutable private copy.\n\tencodedAttributes string  // Encoded connection attributes.\n}\n\nfunc encodeConnectionAttributes(cfg *Config) string {\n\tconnAttrsBuf := make([]byte, 0)\n\n\t// default connection attributes\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrClientName)\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrClientNameValue)\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrOS)\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrOSValue)\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrPlatform)\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrPlatformValue)\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrPid)\n\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, strconv.Itoa(os.Getpid()))\n\tserverHost, _, _ := net.SplitHostPort(cfg.Addr)\n\tif serverHost != \"\" {\n\t\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, connAttrServerHost)\n\t\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, serverHost)\n\t}\n\n\t// user-defined connection attributes\n\tfor _, connAttr := range strings.Split(cfg.ConnectionAttributes, \",\") {\n\t\tk, v, found := strings.Cut(connAttr, \":\")\n\t\tif !found {\n\t\t\tcontinue\n\t\t}\n\t\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, k)\n\t\tconnAttrsBuf = appendLengthEncodedString(connAttrsBuf, v)\n\t}\n\n\treturn string(connAttrsBuf)\n}\n\nfunc newConnector(cfg *Config) *connector {\n\tencodedAttributes := encodeConnectionAttributes(cfg)\n\treturn &connector{\n\t\tcfg:               cfg,\n\t\tencodedAttributes: encodedAttributes,\n\t}\n}\n\n// Connect implements driver.Connector interface.\n// Connect returns a connection to the database.\nfunc (c *connector) Connect(ctx context.Context) (driver.Conn, error) {\n\tvar err error\n\n\t// Invoke beforeConnect if present, with a copy of the configuration\n\tcfg := c.cfg\n\tif c.cfg.beforeConnect != nil {\n\t\tcfg = c.cfg.Clone()\n\t\terr = c.cfg.beforeConnect(ctx, cfg)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// New mysqlConn\n\tmc := &mysqlConn{\n\t\tmaxAllowedPacket: maxPacketSize,\n\t\tmaxWriteSize:     maxPacketSize - 1,\n\t\tclosech:          make(chan struct{}),\n\t\tcfg:              cfg,\n\t\tconnector:        c,\n\t}\n\tmc.parseTime = mc.cfg.ParseTime\n\n\t// Connect to Server\n\tdialsLock.RLock()\n\tdial, ok := dials[mc.cfg.Net]\n\tdialsLock.RUnlock()\n\tif ok {\n\t\tdctx := ctx\n\t\tif mc.cfg.Timeout > 0 {\n\t\t\tvar cancel context.CancelFunc\n\t\t\tdctx, cancel = context.WithTimeout(ctx, c.cfg.Timeout)\n\t\t\tdefer cancel()\n\t\t}\n\t\tmc.netConn, err = dial(dctx, mc.cfg.Addr)\n\t} else {\n\t\tnd := net.Dialer{Timeout: mc.cfg.Timeout}\n\t\tmc.netConn, err = nd.DialContext(ctx, mc.cfg.Net, mc.cfg.Addr)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmc.rawConn = mc.netConn\n\n\t// Enable TCP Keepalives on TCP connections\n\tif tc, ok := mc.netConn.(*net.TCPConn); ok {\n\t\tif err := tc.SetKeepAlive(true); err != nil {\n\t\t\tc.cfg.Logger.Print(err)\n\t\t}\n\t}\n\n\t// Call startWatcher for context support (From Go 1.8)\n\tmc.startWatcher()\n\tif err := mc.watchCancel(ctx); err != nil {\n\t\tmc.cleanup()\n\t\treturn nil, err\n\t}\n\tdefer mc.finish()\n\n\tmc.buf = newBuffer(mc.netConn)\n\n\t// Set I/O timeouts\n\tmc.buf.timeout = mc.cfg.ReadTimeout\n\tmc.writeTimeout = mc.cfg.WriteTimeout\n\n\t// Reading Handshake Initialization Packet\n\tauthData, plugin, err := mc.readHandshakePacket()\n\tif err != nil {\n\t\tmc.cleanup()\n\t\treturn nil, err\n\t}\n\n\tif plugin == \"\" {\n\t\tplugin = defaultAuthPlugin\n\t}\n\n\t// Send Client Authentication Packet\n\tauthResp, err := mc.auth(authData, plugin)\n\tif err != nil {\n\t\t// try the default auth plugin, if using the requested plugin failed\n\t\tc.cfg.Logger.Print(\"could not use requested auth plugin '\"+plugin+\"': \", err.Error())\n\t\tplugin = defaultAuthPlugin\n\t\tauthResp, err = mc.auth(authData, plugin)\n\t\tif err != nil {\n\t\t\tmc.cleanup()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif err = mc.writeHandshakeResponsePacket(authResp, plugin); err != nil {\n\t\tmc.cleanup()\n\t\treturn nil, err\n\t}\n\n\t// Handle response to auth packet, switch methods if possible\n\tif err = mc.handleAuthResult(authData, plugin); err != nil {\n\t\t// Authentication failed and MySQL has already closed the connection\n\t\t// (https://dev.mysql.com/doc/internals/en/authentication-fails.html).\n\t\t// Do not send COM_QUIT, just cleanup and return the error.\n\t\tmc.cleanup()\n\t\treturn nil, err\n\t}\n\n\tif mc.cfg.MaxAllowedPacket > 0 {\n\t\tmc.maxAllowedPacket = mc.cfg.MaxAllowedPacket\n\t} else {\n\t\t// Get max allowed packet size\n\t\tmaxap, err := mc.getSystemVar(\"max_allowed_packet\")\n\t\tif err != nil {\n\t\t\tmc.Close()\n\t\t\treturn nil, err\n\t\t}\n\t\tmc.maxAllowedPacket = stringToInt(maxap) - 1\n\t}\n\tif mc.maxAllowedPacket < maxPacketSize {\n\t\tmc.maxWriteSize = mc.maxAllowedPacket\n\t}\n\n\t// Handle DSN Params\n\terr = mc.handleParams()\n\tif err != nil {\n\t\tmc.Close()\n\t\treturn nil, err\n\t}\n\n\treturn mc, nil\n}\n\n// Driver implements driver.Connector interface.\n// Driver returns &MySQLDriver{}.\nfunc (c *connector) Driver() driver.Driver {\n\treturn &MySQLDriver{}\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/const.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport \"runtime\"\n\nconst (\n\tdefaultAuthPlugin       = \"mysql_native_password\"\n\tdefaultMaxAllowedPacket = 64 << 20 // 64 MiB. See https://github.com/go-sql-driver/mysql/issues/1355\n\tminProtocolVersion      = 10\n\tmaxPacketSize           = 1<<24 - 1\n\ttimeFormat              = \"2006-01-02 15:04:05.999999\"\n\n\t// Connection attributes\n\t// See https://dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html#performance-schema-connection-attributes-available\n\tconnAttrClientName      = \"_client_name\"\n\tconnAttrClientNameValue = \"Go-MySQL-Driver\"\n\tconnAttrOS              = \"_os\"\n\tconnAttrOSValue         = runtime.GOOS\n\tconnAttrPlatform        = \"_platform\"\n\tconnAttrPlatformValue   = runtime.GOARCH\n\tconnAttrPid             = \"_pid\"\n\tconnAttrServerHost      = \"_server_host\"\n)\n\n// MySQL constants documentation:\n// http://dev.mysql.com/doc/internals/en/client-server-protocol.html\n\nconst (\n\tiOK           byte = 0x00\n\tiAuthMoreData byte = 0x01\n\tiLocalInFile  byte = 0xfb\n\tiEOF          byte = 0xfe\n\tiERR          byte = 0xff\n)\n\n// https://dev.mysql.com/doc/internals/en/capability-flags.html#packet-Protocol::CapabilityFlags\ntype clientFlag uint32\n\nconst (\n\tclientLongPassword clientFlag = 1 << iota\n\tclientFoundRows\n\tclientLongFlag\n\tclientConnectWithDB\n\tclientNoSchema\n\tclientCompress\n\tclientODBC\n\tclientLocalFiles\n\tclientIgnoreSpace\n\tclientProtocol41\n\tclientInteractive\n\tclientSSL\n\tclientIgnoreSIGPIPE\n\tclientTransactions\n\tclientReserved\n\tclientSecureConn\n\tclientMultiStatements\n\tclientMultiResults\n\tclientPSMultiResults\n\tclientPluginAuth\n\tclientConnectAttrs\n\tclientPluginAuthLenEncClientData\n\tclientCanHandleExpiredPasswords\n\tclientSessionTrack\n\tclientDeprecateEOF\n)\n\nconst (\n\tcomQuit byte = iota + 1\n\tcomInitDB\n\tcomQuery\n\tcomFieldList\n\tcomCreateDB\n\tcomDropDB\n\tcomRefresh\n\tcomShutdown\n\tcomStatistics\n\tcomProcessInfo\n\tcomConnect\n\tcomProcessKill\n\tcomDebug\n\tcomPing\n\tcomTime\n\tcomDelayedInsert\n\tcomChangeUser\n\tcomBinlogDump\n\tcomTableDump\n\tcomConnectOut\n\tcomRegisterSlave\n\tcomStmtPrepare\n\tcomStmtExecute\n\tcomStmtSendLongData\n\tcomStmtClose\n\tcomStmtReset\n\tcomSetOption\n\tcomStmtFetch\n)\n\n// https://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnType\ntype fieldType byte\n\nconst (\n\tfieldTypeDecimal fieldType = iota\n\tfieldTypeTiny\n\tfieldTypeShort\n\tfieldTypeLong\n\tfieldTypeFloat\n\tfieldTypeDouble\n\tfieldTypeNULL\n\tfieldTypeTimestamp\n\tfieldTypeLongLong\n\tfieldTypeInt24\n\tfieldTypeDate\n\tfieldTypeTime\n\tfieldTypeDateTime\n\tfieldTypeYear\n\tfieldTypeNewDate\n\tfieldTypeVarChar\n\tfieldTypeBit\n)\nconst (\n\tfieldTypeJSON fieldType = iota + 0xf5\n\tfieldTypeNewDecimal\n\tfieldTypeEnum\n\tfieldTypeSet\n\tfieldTypeTinyBLOB\n\tfieldTypeMediumBLOB\n\tfieldTypeLongBLOB\n\tfieldTypeBLOB\n\tfieldTypeVarString\n\tfieldTypeString\n\tfieldTypeGeometry\n)\n\ntype fieldFlag uint16\n\nconst (\n\tflagNotNULL fieldFlag = 1 << iota\n\tflagPriKey\n\tflagUniqueKey\n\tflagMultipleKey\n\tflagBLOB\n\tflagUnsigned\n\tflagZeroFill\n\tflagBinary\n\tflagEnum\n\tflagAutoIncrement\n\tflagTimestamp\n\tflagSet\n\tflagUnknown1\n\tflagUnknown2\n\tflagUnknown3\n\tflagUnknown4\n)\n\n// http://dev.mysql.com/doc/internals/en/status-flags.html\ntype statusFlag uint16\n\nconst (\n\tstatusInTrans statusFlag = 1 << iota\n\tstatusInAutocommit\n\tstatusReserved // Not in documentation\n\tstatusMoreResultsExists\n\tstatusNoGoodIndexUsed\n\tstatusNoIndexUsed\n\tstatusCursorExists\n\tstatusLastRowSent\n\tstatusDbDropped\n\tstatusNoBackslashEscapes\n\tstatusMetadataChanged\n\tstatusQueryWasSlow\n\tstatusPsOutParams\n\tstatusInTransReadonly\n\tstatusSessionStateChanged\n)\n\nconst (\n\tcachingSha2PasswordRequestPublicKey          = 2\n\tcachingSha2PasswordFastAuthSuccess           = 3\n\tcachingSha2PasswordPerformFullAuthentication = 4\n)\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/driver.go",
    "content": "// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\n// Package mysql provides a MySQL driver for Go's database/sql package.\n//\n// The driver should be used via the database/sql package:\n//\n//\timport \"database/sql\"\n//\timport _ \"github.com/go-sql-driver/mysql\"\n//\n//\tdb, err := sql.Open(\"mysql\", \"user:password@/dbname\")\n//\n// See https://github.com/go-sql-driver/mysql#usage for details\npackage mysql\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"database/sql/driver\"\n\t\"net\"\n\t\"sync\"\n)\n\n// MySQLDriver is exported to make the driver directly accessible.\n// In general the driver is used via the database/sql package.\ntype MySQLDriver struct{}\n\n// DialFunc is a function which can be used to establish the network connection.\n// Custom dial functions must be registered with RegisterDial\n//\n// Deprecated: users should register a DialContextFunc instead\ntype DialFunc func(addr string) (net.Conn, error)\n\n// DialContextFunc is a function which can be used to establish the network connection.\n// Custom dial functions must be registered with RegisterDialContext\ntype DialContextFunc func(ctx context.Context, addr string) (net.Conn, error)\n\nvar (\n\tdialsLock sync.RWMutex\n\tdials     map[string]DialContextFunc\n)\n\n// RegisterDialContext registers a custom dial function. It can then be used by the\n// network address mynet(addr), where mynet is the registered new network.\n// The current context for the connection and its address is passed to the dial function.\nfunc RegisterDialContext(net string, dial DialContextFunc) {\n\tdialsLock.Lock()\n\tdefer dialsLock.Unlock()\n\tif dials == nil {\n\t\tdials = make(map[string]DialContextFunc)\n\t}\n\tdials[net] = dial\n}\n\n// DeregisterDialContext removes the custom dial function registered with the given net.\nfunc DeregisterDialContext(net string) {\n\tdialsLock.Lock()\n\tdefer dialsLock.Unlock()\n\tif dials != nil {\n\t\tdelete(dials, net)\n\t}\n}\n\n// RegisterDial registers a custom dial function. It can then be used by the\n// network address mynet(addr), where mynet is the registered new network.\n// addr is passed as a parameter to the dial function.\n//\n// Deprecated: users should call RegisterDialContext instead\nfunc RegisterDial(network string, dial DialFunc) {\n\tRegisterDialContext(network, func(_ context.Context, addr string) (net.Conn, error) {\n\t\treturn dial(addr)\n\t})\n}\n\n// Open new Connection.\n// See https://github.com/go-sql-driver/mysql#dsn-data-source-name for how\n// the DSN string is formatted\nfunc (d MySQLDriver) Open(dsn string) (driver.Conn, error) {\n\tcfg, err := ParseDSN(dsn)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc := newConnector(cfg)\n\treturn c.Connect(context.Background())\n}\n\n// This variable can be replaced with -ldflags like below:\n// go build \"-ldflags=-X github.com/go-sql-driver/mysql.driverName=custom\"\nvar driverName = \"mysql\"\n\nfunc init() {\n\tif driverName != \"\" {\n\t\tsql.Register(driverName, &MySQLDriver{})\n\t}\n}\n\n// NewConnector returns new driver.Connector.\nfunc NewConnector(cfg *Config) (driver.Connector, error) {\n\tcfg = cfg.Clone()\n\t// normalize the contents of cfg so calls to NewConnector have the same\n\t// behavior as MySQLDriver.OpenConnector\n\tif err := cfg.normalize(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn newConnector(cfg), nil\n}\n\n// OpenConnector implements driver.DriverContext.\nfunc (d MySQLDriver) OpenConnector(dsn string) (driver.Connector, error) {\n\tcfg, err := ParseDSN(dsn)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newConnector(cfg), nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/dsn.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2016 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"crypto/rsa\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math/big\"\n\t\"net\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar (\n\terrInvalidDSNUnescaped       = errors.New(\"invalid DSN: did you forget to escape a param value?\")\n\terrInvalidDSNAddr            = errors.New(\"invalid DSN: network address not terminated (missing closing brace)\")\n\terrInvalidDSNNoSlash         = errors.New(\"invalid DSN: missing the slash separating the database name\")\n\terrInvalidDSNUnsafeCollation = errors.New(\"invalid DSN: interpolateParams can not be used with unsafe collations\")\n)\n\n// Config is a configuration parsed from a DSN string.\n// If a new Config is created instead of being parsed from a DSN string,\n// the NewConfig function should be used, which sets default values.\ntype Config struct {\n\t// non boolean fields\n\n\tUser                 string            // Username\n\tPasswd               string            // Password (requires User)\n\tNet                  string            // Network (e.g. \"tcp\", \"tcp6\", \"unix\". default: \"tcp\")\n\tAddr                 string            // Address (default: \"127.0.0.1:3306\" for \"tcp\" and \"/tmp/mysql.sock\" for \"unix\")\n\tDBName               string            // Database name\n\tParams               map[string]string // Connection parameters\n\tConnectionAttributes string            // Connection Attributes, comma-delimited string of user-defined \"key:value\" pairs\n\tCollation            string            // Connection collation\n\tLoc                  *time.Location    // Location for time.Time values\n\tMaxAllowedPacket     int               // Max packet size allowed\n\tServerPubKey         string            // Server public key name\n\tTLSConfig            string            // TLS configuration name\n\tTLS                  *tls.Config       // TLS configuration, its priority is higher than TLSConfig\n\tTimeout              time.Duration     // Dial timeout\n\tReadTimeout          time.Duration     // I/O read timeout\n\tWriteTimeout         time.Duration     // I/O write timeout\n\tLogger               Logger            // Logger\n\n\t// boolean fields\n\n\tAllowAllFiles            bool // Allow all files to be used with LOAD DATA LOCAL INFILE\n\tAllowCleartextPasswords  bool // Allows the cleartext client side plugin\n\tAllowFallbackToPlaintext bool // Allows fallback to unencrypted connection if server does not support TLS\n\tAllowNativePasswords     bool // Allows the native password authentication method\n\tAllowOldPasswords        bool // Allows the old insecure password method\n\tCheckConnLiveness        bool // Check connections for liveness before using them\n\tClientFoundRows          bool // Return number of matching rows instead of rows changed\n\tColumnsWithAlias         bool // Prepend table alias to column names\n\tInterpolateParams        bool // Interpolate placeholders into query string\n\tMultiStatements          bool // Allow multiple statements in one query\n\tParseTime                bool // Parse time values to time.Time\n\tRejectReadOnly           bool // Reject read-only connections\n\n\t// unexported fields. new options should be come here\n\n\tbeforeConnect func(context.Context, *Config) error // Invoked before a connection is established\n\tpubKey        *rsa.PublicKey                       // Server public key\n\ttimeTruncate  time.Duration                        // Truncate time.Time values to the specified duration\n}\n\n// Functional Options Pattern\n// https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis\ntype Option func(*Config) error\n\n// NewConfig creates a new Config and sets default values.\nfunc NewConfig() *Config {\n\tcfg := &Config{\n\t\tLoc:                  time.UTC,\n\t\tMaxAllowedPacket:     defaultMaxAllowedPacket,\n\t\tLogger:               defaultLogger,\n\t\tAllowNativePasswords: true,\n\t\tCheckConnLiveness:    true,\n\t}\n\n\treturn cfg\n}\n\n// Apply applies the given options to the Config object.\nfunc (c *Config) Apply(opts ...Option) error {\n\tfor _, opt := range opts {\n\t\terr := opt(c)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// TimeTruncate sets the time duration to truncate time.Time values in\n// query parameters.\nfunc TimeTruncate(d time.Duration) Option {\n\treturn func(cfg *Config) error {\n\t\tcfg.timeTruncate = d\n\t\treturn nil\n\t}\n}\n\n// BeforeConnect sets the function to be invoked before a connection is established.\nfunc BeforeConnect(fn func(context.Context, *Config) error) Option {\n\treturn func(cfg *Config) error {\n\t\tcfg.beforeConnect = fn\n\t\treturn nil\n\t}\n}\n\nfunc (cfg *Config) Clone() *Config {\n\tcp := *cfg\n\tif cp.TLS != nil {\n\t\tcp.TLS = cfg.TLS.Clone()\n\t}\n\tif len(cp.Params) > 0 {\n\t\tcp.Params = make(map[string]string, len(cfg.Params))\n\t\tfor k, v := range cfg.Params {\n\t\t\tcp.Params[k] = v\n\t\t}\n\t}\n\tif cfg.pubKey != nil {\n\t\tcp.pubKey = &rsa.PublicKey{\n\t\t\tN: new(big.Int).Set(cfg.pubKey.N),\n\t\t\tE: cfg.pubKey.E,\n\t\t}\n\t}\n\treturn &cp\n}\n\nfunc (cfg *Config) normalize() error {\n\tif cfg.InterpolateParams && cfg.Collation != \"\" && unsafeCollations[cfg.Collation] {\n\t\treturn errInvalidDSNUnsafeCollation\n\t}\n\n\t// Set default network if empty\n\tif cfg.Net == \"\" {\n\t\tcfg.Net = \"tcp\"\n\t}\n\n\t// Set default address if empty\n\tif cfg.Addr == \"\" {\n\t\tswitch cfg.Net {\n\t\tcase \"tcp\":\n\t\t\tcfg.Addr = \"127.0.0.1:3306\"\n\t\tcase \"unix\":\n\t\t\tcfg.Addr = \"/tmp/mysql.sock\"\n\t\tdefault:\n\t\t\treturn errors.New(\"default addr for network '\" + cfg.Net + \"' unknown\")\n\t\t}\n\t} else if cfg.Net == \"tcp\" {\n\t\tcfg.Addr = ensureHavePort(cfg.Addr)\n\t}\n\n\tif cfg.TLS == nil {\n\t\tswitch cfg.TLSConfig {\n\t\tcase \"false\", \"\":\n\t\t\t// don't set anything\n\t\tcase \"true\":\n\t\t\tcfg.TLS = &tls.Config{}\n\t\tcase \"skip-verify\":\n\t\t\tcfg.TLS = &tls.Config{InsecureSkipVerify: true}\n\t\tcase \"preferred\":\n\t\t\tcfg.TLS = &tls.Config{InsecureSkipVerify: true}\n\t\t\tcfg.AllowFallbackToPlaintext = true\n\t\tdefault:\n\t\t\tcfg.TLS = getTLSConfigClone(cfg.TLSConfig)\n\t\t\tif cfg.TLS == nil {\n\t\t\t\treturn errors.New(\"invalid value / unknown config name: \" + cfg.TLSConfig)\n\t\t\t}\n\t\t}\n\t}\n\n\tif cfg.TLS != nil && cfg.TLS.ServerName == \"\" && !cfg.TLS.InsecureSkipVerify {\n\t\thost, _, err := net.SplitHostPort(cfg.Addr)\n\t\tif err == nil {\n\t\t\tcfg.TLS.ServerName = host\n\t\t}\n\t}\n\n\tif cfg.ServerPubKey != \"\" {\n\t\tcfg.pubKey = getServerPubKey(cfg.ServerPubKey)\n\t\tif cfg.pubKey == nil {\n\t\t\treturn errors.New(\"invalid value / unknown server pub key name: \" + cfg.ServerPubKey)\n\t\t}\n\t}\n\n\tif cfg.Logger == nil {\n\t\tcfg.Logger = defaultLogger\n\t}\n\n\treturn nil\n}\n\nfunc writeDSNParam(buf *bytes.Buffer, hasParam *bool, name, value string) {\n\tbuf.Grow(1 + len(name) + 1 + len(value))\n\tif !*hasParam {\n\t\t*hasParam = true\n\t\tbuf.WriteByte('?')\n\t} else {\n\t\tbuf.WriteByte('&')\n\t}\n\tbuf.WriteString(name)\n\tbuf.WriteByte('=')\n\tbuf.WriteString(value)\n}\n\n// FormatDSN formats the given Config into a DSN string which can be passed to\n// the driver.\n//\n// Note: use [NewConnector] and [database/sql.OpenDB] to open a connection from a [*Config].\nfunc (cfg *Config) FormatDSN() string {\n\tvar buf bytes.Buffer\n\n\t// [username[:password]@]\n\tif len(cfg.User) > 0 {\n\t\tbuf.WriteString(cfg.User)\n\t\tif len(cfg.Passwd) > 0 {\n\t\t\tbuf.WriteByte(':')\n\t\t\tbuf.WriteString(cfg.Passwd)\n\t\t}\n\t\tbuf.WriteByte('@')\n\t}\n\n\t// [protocol[(address)]]\n\tif len(cfg.Net) > 0 {\n\t\tbuf.WriteString(cfg.Net)\n\t\tif len(cfg.Addr) > 0 {\n\t\t\tbuf.WriteByte('(')\n\t\t\tbuf.WriteString(cfg.Addr)\n\t\t\tbuf.WriteByte(')')\n\t\t}\n\t}\n\n\t// /dbname\n\tbuf.WriteByte('/')\n\tbuf.WriteString(url.PathEscape(cfg.DBName))\n\n\t// [?param1=value1&...&paramN=valueN]\n\thasParam := false\n\n\tif cfg.AllowAllFiles {\n\t\thasParam = true\n\t\tbuf.WriteString(\"?allowAllFiles=true\")\n\t}\n\n\tif cfg.AllowCleartextPasswords {\n\t\twriteDSNParam(&buf, &hasParam, \"allowCleartextPasswords\", \"true\")\n\t}\n\n\tif cfg.AllowFallbackToPlaintext {\n\t\twriteDSNParam(&buf, &hasParam, \"allowFallbackToPlaintext\", \"true\")\n\t}\n\n\tif !cfg.AllowNativePasswords {\n\t\twriteDSNParam(&buf, &hasParam, \"allowNativePasswords\", \"false\")\n\t}\n\n\tif cfg.AllowOldPasswords {\n\t\twriteDSNParam(&buf, &hasParam, \"allowOldPasswords\", \"true\")\n\t}\n\n\tif !cfg.CheckConnLiveness {\n\t\twriteDSNParam(&buf, &hasParam, \"checkConnLiveness\", \"false\")\n\t}\n\n\tif cfg.ClientFoundRows {\n\t\twriteDSNParam(&buf, &hasParam, \"clientFoundRows\", \"true\")\n\t}\n\n\tif col := cfg.Collation; col != \"\" {\n\t\twriteDSNParam(&buf, &hasParam, \"collation\", col)\n\t}\n\n\tif cfg.ColumnsWithAlias {\n\t\twriteDSNParam(&buf, &hasParam, \"columnsWithAlias\", \"true\")\n\t}\n\n\tif cfg.InterpolateParams {\n\t\twriteDSNParam(&buf, &hasParam, \"interpolateParams\", \"true\")\n\t}\n\n\tif cfg.Loc != time.UTC && cfg.Loc != nil {\n\t\twriteDSNParam(&buf, &hasParam, \"loc\", url.QueryEscape(cfg.Loc.String()))\n\t}\n\n\tif cfg.MultiStatements {\n\t\twriteDSNParam(&buf, &hasParam, \"multiStatements\", \"true\")\n\t}\n\n\tif cfg.ParseTime {\n\t\twriteDSNParam(&buf, &hasParam, \"parseTime\", \"true\")\n\t}\n\n\tif cfg.timeTruncate > 0 {\n\t\twriteDSNParam(&buf, &hasParam, \"timeTruncate\", cfg.timeTruncate.String())\n\t}\n\n\tif cfg.ReadTimeout > 0 {\n\t\twriteDSNParam(&buf, &hasParam, \"readTimeout\", cfg.ReadTimeout.String())\n\t}\n\n\tif cfg.RejectReadOnly {\n\t\twriteDSNParam(&buf, &hasParam, \"rejectReadOnly\", \"true\")\n\t}\n\n\tif len(cfg.ServerPubKey) > 0 {\n\t\twriteDSNParam(&buf, &hasParam, \"serverPubKey\", url.QueryEscape(cfg.ServerPubKey))\n\t}\n\n\tif cfg.Timeout > 0 {\n\t\twriteDSNParam(&buf, &hasParam, \"timeout\", cfg.Timeout.String())\n\t}\n\n\tif len(cfg.TLSConfig) > 0 {\n\t\twriteDSNParam(&buf, &hasParam, \"tls\", url.QueryEscape(cfg.TLSConfig))\n\t}\n\n\tif cfg.WriteTimeout > 0 {\n\t\twriteDSNParam(&buf, &hasParam, \"writeTimeout\", cfg.WriteTimeout.String())\n\t}\n\n\tif cfg.MaxAllowedPacket != defaultMaxAllowedPacket {\n\t\twriteDSNParam(&buf, &hasParam, \"maxAllowedPacket\", strconv.Itoa(cfg.MaxAllowedPacket))\n\t}\n\n\t// other params\n\tif cfg.Params != nil {\n\t\tvar params []string\n\t\tfor param := range cfg.Params {\n\t\t\tparams = append(params, param)\n\t\t}\n\t\tsort.Strings(params)\n\t\tfor _, param := range params {\n\t\t\twriteDSNParam(&buf, &hasParam, param, url.QueryEscape(cfg.Params[param]))\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\n// ParseDSN parses the DSN string to a Config\nfunc ParseDSN(dsn string) (cfg *Config, err error) {\n\t// New config with some default values\n\tcfg = NewConfig()\n\n\t// [user[:password]@][net[(addr)]]/dbname[?param1=value1&paramN=valueN]\n\t// Find the last '/' (since the password or the net addr might contain a '/')\n\tfoundSlash := false\n\tfor i := len(dsn) - 1; i >= 0; i-- {\n\t\tif dsn[i] == '/' {\n\t\t\tfoundSlash = true\n\t\t\tvar j, k int\n\n\t\t\t// left part is empty if i <= 0\n\t\t\tif i > 0 {\n\t\t\t\t// [username[:password]@][protocol[(address)]]\n\t\t\t\t// Find the last '@' in dsn[:i]\n\t\t\t\tfor j = i; j >= 0; j-- {\n\t\t\t\t\tif dsn[j] == '@' {\n\t\t\t\t\t\t// username[:password]\n\t\t\t\t\t\t// Find the first ':' in dsn[:j]\n\t\t\t\t\t\tfor k = 0; k < j; k++ {\n\t\t\t\t\t\t\tif dsn[k] == ':' {\n\t\t\t\t\t\t\t\tcfg.Passwd = dsn[k+1 : j]\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\tcfg.User = dsn[:k]\n\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// [protocol[(address)]]\n\t\t\t\t// Find the first '(' in dsn[j+1:i]\n\t\t\t\tfor k = j + 1; k < i; k++ {\n\t\t\t\t\tif dsn[k] == '(' {\n\t\t\t\t\t\t// dsn[i-1] must be == ')' if an address is specified\n\t\t\t\t\t\tif dsn[i-1] != ')' {\n\t\t\t\t\t\t\tif strings.ContainsRune(dsn[k+1:i], ')') {\n\t\t\t\t\t\t\t\treturn nil, errInvalidDSNUnescaped\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn nil, errInvalidDSNAddr\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcfg.Addr = dsn[k+1 : i-1]\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcfg.Net = dsn[j+1 : k]\n\t\t\t}\n\n\t\t\t// dbname[?param1=value1&...&paramN=valueN]\n\t\t\t// Find the first '?' in dsn[i+1:]\n\t\t\tfor j = i + 1; j < len(dsn); j++ {\n\t\t\t\tif dsn[j] == '?' {\n\t\t\t\t\tif err = parseDSNParams(cfg, dsn[j+1:]); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdbname := dsn[i+1 : j]\n\t\t\tif cfg.DBName, err = url.PathUnescape(dbname); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid dbname %q: %w\", dbname, err)\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif !foundSlash && len(dsn) > 0 {\n\t\treturn nil, errInvalidDSNNoSlash\n\t}\n\n\tif err = cfg.normalize(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn\n}\n\n// parseDSNParams parses the DSN \"query string\"\n// Values must be url.QueryEscape'ed\nfunc parseDSNParams(cfg *Config, params string) (err error) {\n\tfor _, v := range strings.Split(params, \"&\") {\n\t\tkey, value, found := strings.Cut(v, \"=\")\n\t\tif !found {\n\t\t\tcontinue\n\t\t}\n\n\t\t// cfg params\n\t\tswitch key {\n\t\t// Disable INFILE allowlist / enable all files\n\t\tcase \"allowAllFiles\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowAllFiles, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Use cleartext authentication mode (MySQL 5.5.10+)\n\t\tcase \"allowCleartextPasswords\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowCleartextPasswords, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Allow fallback to unencrypted connection if server does not support TLS\n\t\tcase \"allowFallbackToPlaintext\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowFallbackToPlaintext, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Use native password authentication\n\t\tcase \"allowNativePasswords\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowNativePasswords, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Use old authentication mode (pre MySQL 4.1)\n\t\tcase \"allowOldPasswords\":\n\t\t\tvar isBool bool\n\t\t\tcfg.AllowOldPasswords, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Check connections for Liveness before using them\n\t\tcase \"checkConnLiveness\":\n\t\t\tvar isBool bool\n\t\t\tcfg.CheckConnLiveness, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Switch \"rowsAffected\" mode\n\t\tcase \"clientFoundRows\":\n\t\t\tvar isBool bool\n\t\t\tcfg.ClientFoundRows, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Collation\n\t\tcase \"collation\":\n\t\t\tcfg.Collation = value\n\n\t\tcase \"columnsWithAlias\":\n\t\t\tvar isBool bool\n\t\t\tcfg.ColumnsWithAlias, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Compression\n\t\tcase \"compress\":\n\t\t\treturn errors.New(\"compression not implemented yet\")\n\n\t\t// Enable client side placeholder substitution\n\t\tcase \"interpolateParams\":\n\t\t\tvar isBool bool\n\t\t\tcfg.InterpolateParams, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Time Location\n\t\tcase \"loc\":\n\t\t\tif value, err = url.QueryUnescape(value); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcfg.Loc, err = time.LoadLocation(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// multiple statements in one query\n\t\tcase \"multiStatements\":\n\t\t\tvar isBool bool\n\t\t\tcfg.MultiStatements, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// time.Time parsing\n\t\tcase \"parseTime\":\n\t\t\tvar isBool bool\n\t\t\tcfg.ParseTime, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// time.Time truncation\n\t\tcase \"timeTruncate\":\n\t\t\tcfg.timeTruncate, err = time.ParseDuration(value)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid timeTruncate value: %v, error: %w\", value, err)\n\t\t\t}\n\n\t\t// I/O read Timeout\n\t\tcase \"readTimeout\":\n\t\t\tcfg.ReadTimeout, err = time.ParseDuration(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// Reject read-only connections\n\t\tcase \"rejectReadOnly\":\n\t\t\tvar isBool bool\n\t\t\tcfg.RejectReadOnly, isBool = readBool(value)\n\t\t\tif !isBool {\n\t\t\t\treturn errors.New(\"invalid bool value: \" + value)\n\t\t\t}\n\n\t\t// Server public key\n\t\tcase \"serverPubKey\":\n\t\t\tname, err := url.QueryUnescape(value)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid value for server pub key name: %v\", err)\n\t\t\t}\n\t\t\tcfg.ServerPubKey = name\n\n\t\t// Strict mode\n\t\tcase \"strict\":\n\t\t\tpanic(\"strict mode has been removed. See https://github.com/go-sql-driver/mysql/wiki/strict-mode\")\n\n\t\t// Dial Timeout\n\t\tcase \"timeout\":\n\t\t\tcfg.Timeout, err = time.ParseDuration(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// TLS-Encryption\n\t\tcase \"tls\":\n\t\t\tboolValue, isBool := readBool(value)\n\t\t\tif isBool {\n\t\t\t\tif boolValue {\n\t\t\t\t\tcfg.TLSConfig = \"true\"\n\t\t\t\t} else {\n\t\t\t\t\tcfg.TLSConfig = \"false\"\n\t\t\t\t}\n\t\t\t} else if vl := strings.ToLower(value); vl == \"skip-verify\" || vl == \"preferred\" {\n\t\t\t\tcfg.TLSConfig = vl\n\t\t\t} else {\n\t\t\t\tname, err := url.QueryUnescape(value)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"invalid value for TLS config name: %v\", err)\n\t\t\t\t}\n\t\t\t\tcfg.TLSConfig = name\n\t\t\t}\n\n\t\t// I/O write Timeout\n\t\tcase \"writeTimeout\":\n\t\t\tcfg.WriteTimeout, err = time.ParseDuration(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\tcase \"maxAllowedPacket\":\n\t\t\tcfg.MaxAllowedPacket, err = strconv.Atoi(value)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t// Connection attributes\n\t\tcase \"connectionAttributes\":\n\t\t\tconnectionAttributes, err := url.QueryUnescape(value)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid connectionAttributes value: %v\", err)\n\t\t\t}\n\t\t\tcfg.ConnectionAttributes = connectionAttributes\n\n\t\tdefault:\n\t\t\t// lazy init\n\t\t\tif cfg.Params == nil {\n\t\t\t\tcfg.Params = make(map[string]string)\n\t\t\t}\n\n\t\t\tif cfg.Params[key], err = url.QueryUnescape(value); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc ensureHavePort(addr string) string {\n\tif _, _, err := net.SplitHostPort(addr); err != nil {\n\t\treturn net.JoinHostPort(addr, \"3306\")\n\t}\n\treturn addr\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/errors.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n)\n\n// Various errors the driver might return. Can change between driver versions.\nvar (\n\tErrInvalidConn       = errors.New(\"invalid connection\")\n\tErrMalformPkt        = errors.New(\"malformed packet\")\n\tErrNoTLS             = errors.New(\"TLS requested but server does not support TLS\")\n\tErrCleartextPassword = errors.New(\"this user requires clear text authentication. If you still want to use it, please add 'allowCleartextPasswords=1' to your DSN\")\n\tErrNativePassword    = errors.New(\"this user requires mysql native password authentication\")\n\tErrOldPassword       = errors.New(\"this user requires old password authentication. If you still want to use it, please add 'allowOldPasswords=1' to your DSN. See also https://github.com/go-sql-driver/mysql/wiki/old_passwords\")\n\tErrUnknownPlugin     = errors.New(\"this authentication plugin is not supported\")\n\tErrOldProtocol       = errors.New(\"MySQL server does not support required protocol 41+\")\n\tErrPktSync           = errors.New(\"commands out of sync. You can't run this command now\")\n\tErrPktSyncMul        = errors.New(\"commands out of sync. Did you run multiple statements at once?\")\n\tErrPktTooLarge       = errors.New(\"packet for query is too large. Try adjusting the `Config.MaxAllowedPacket`\")\n\tErrBusyBuffer        = errors.New(\"busy buffer\")\n\n\t// errBadConnNoWrite is used for connection errors where nothing was sent to the database yet.\n\t// If this happens first in a function starting a database interaction, it should be replaced by driver.ErrBadConn\n\t// to trigger a resend.\n\t// See https://github.com/go-sql-driver/mysql/pull/302\n\terrBadConnNoWrite = errors.New(\"bad connection\")\n)\n\nvar defaultLogger = Logger(log.New(os.Stderr, \"[mysql] \", log.Ldate|log.Ltime|log.Lshortfile))\n\n// Logger is used to log critical error messages.\ntype Logger interface {\n\tPrint(v ...any)\n}\n\n// NopLogger is a nop implementation of the Logger interface.\ntype NopLogger struct{}\n\n// Print implements Logger interface.\nfunc (nl *NopLogger) Print(_ ...any) {}\n\n// SetLogger is used to set the default logger for critical errors.\n// The initial logger is os.Stderr.\nfunc SetLogger(logger Logger) error {\n\tif logger == nil {\n\t\treturn errors.New(\"logger is nil\")\n\t}\n\tdefaultLogger = logger\n\treturn nil\n}\n\n// MySQLError is an error type which represents a single MySQL error\ntype MySQLError struct {\n\tNumber   uint16\n\tSQLState [5]byte\n\tMessage  string\n}\n\nfunc (me *MySQLError) Error() string {\n\tif me.SQLState != [5]byte{} {\n\t\treturn fmt.Sprintf(\"Error %d (%s): %s\", me.Number, me.SQLState, me.Message)\n\t}\n\n\treturn fmt.Sprintf(\"Error %d: %s\", me.Number, me.Message)\n}\n\nfunc (me *MySQLError) Is(err error) bool {\n\tif merr, ok := err.(*MySQLError); ok {\n\t\treturn merr.Number == me.Number\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/fields.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2017 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql\"\n\t\"reflect\"\n)\n\nfunc (mf *mysqlField) typeDatabaseName() string {\n\tswitch mf.fieldType {\n\tcase fieldTypeBit:\n\t\treturn \"BIT\"\n\tcase fieldTypeBLOB:\n\t\tif mf.charSet != binaryCollationID {\n\t\t\treturn \"TEXT\"\n\t\t}\n\t\treturn \"BLOB\"\n\tcase fieldTypeDate:\n\t\treturn \"DATE\"\n\tcase fieldTypeDateTime:\n\t\treturn \"DATETIME\"\n\tcase fieldTypeDecimal:\n\t\treturn \"DECIMAL\"\n\tcase fieldTypeDouble:\n\t\treturn \"DOUBLE\"\n\tcase fieldTypeEnum:\n\t\treturn \"ENUM\"\n\tcase fieldTypeFloat:\n\t\treturn \"FLOAT\"\n\tcase fieldTypeGeometry:\n\t\treturn \"GEOMETRY\"\n\tcase fieldTypeInt24:\n\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\treturn \"UNSIGNED MEDIUMINT\"\n\t\t}\n\t\treturn \"MEDIUMINT\"\n\tcase fieldTypeJSON:\n\t\treturn \"JSON\"\n\tcase fieldTypeLong:\n\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\treturn \"UNSIGNED INT\"\n\t\t}\n\t\treturn \"INT\"\n\tcase fieldTypeLongBLOB:\n\t\tif mf.charSet != binaryCollationID {\n\t\t\treturn \"LONGTEXT\"\n\t\t}\n\t\treturn \"LONGBLOB\"\n\tcase fieldTypeLongLong:\n\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\treturn \"UNSIGNED BIGINT\"\n\t\t}\n\t\treturn \"BIGINT\"\n\tcase fieldTypeMediumBLOB:\n\t\tif mf.charSet != binaryCollationID {\n\t\t\treturn \"MEDIUMTEXT\"\n\t\t}\n\t\treturn \"MEDIUMBLOB\"\n\tcase fieldTypeNewDate:\n\t\treturn \"DATE\"\n\tcase fieldTypeNewDecimal:\n\t\treturn \"DECIMAL\"\n\tcase fieldTypeNULL:\n\t\treturn \"NULL\"\n\tcase fieldTypeSet:\n\t\treturn \"SET\"\n\tcase fieldTypeShort:\n\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\treturn \"UNSIGNED SMALLINT\"\n\t\t}\n\t\treturn \"SMALLINT\"\n\tcase fieldTypeString:\n\t\tif mf.flags&flagEnum != 0 {\n\t\t\treturn \"ENUM\"\n\t\t} else if mf.flags&flagSet != 0 {\n\t\t\treturn \"SET\"\n\t\t}\n\t\tif mf.charSet == binaryCollationID {\n\t\t\treturn \"BINARY\"\n\t\t}\n\t\treturn \"CHAR\"\n\tcase fieldTypeTime:\n\t\treturn \"TIME\"\n\tcase fieldTypeTimestamp:\n\t\treturn \"TIMESTAMP\"\n\tcase fieldTypeTiny:\n\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\treturn \"UNSIGNED TINYINT\"\n\t\t}\n\t\treturn \"TINYINT\"\n\tcase fieldTypeTinyBLOB:\n\t\tif mf.charSet != binaryCollationID {\n\t\t\treturn \"TINYTEXT\"\n\t\t}\n\t\treturn \"TINYBLOB\"\n\tcase fieldTypeVarChar:\n\t\tif mf.charSet == binaryCollationID {\n\t\t\treturn \"VARBINARY\"\n\t\t}\n\t\treturn \"VARCHAR\"\n\tcase fieldTypeVarString:\n\t\tif mf.charSet == binaryCollationID {\n\t\t\treturn \"VARBINARY\"\n\t\t}\n\t\treturn \"VARCHAR\"\n\tcase fieldTypeYear:\n\t\treturn \"YEAR\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nvar (\n\tscanTypeFloat32    = reflect.TypeOf(float32(0))\n\tscanTypeFloat64    = reflect.TypeOf(float64(0))\n\tscanTypeInt8       = reflect.TypeOf(int8(0))\n\tscanTypeInt16      = reflect.TypeOf(int16(0))\n\tscanTypeInt32      = reflect.TypeOf(int32(0))\n\tscanTypeInt64      = reflect.TypeOf(int64(0))\n\tscanTypeNullFloat  = reflect.TypeOf(sql.NullFloat64{})\n\tscanTypeNullInt    = reflect.TypeOf(sql.NullInt64{})\n\tscanTypeNullTime   = reflect.TypeOf(sql.NullTime{})\n\tscanTypeUint8      = reflect.TypeOf(uint8(0))\n\tscanTypeUint16     = reflect.TypeOf(uint16(0))\n\tscanTypeUint32     = reflect.TypeOf(uint32(0))\n\tscanTypeUint64     = reflect.TypeOf(uint64(0))\n\tscanTypeString     = reflect.TypeOf(\"\")\n\tscanTypeNullString = reflect.TypeOf(sql.NullString{})\n\tscanTypeBytes      = reflect.TypeOf([]byte{})\n\tscanTypeUnknown    = reflect.TypeOf(new(any))\n)\n\ntype mysqlField struct {\n\ttableName string\n\tname      string\n\tlength    uint32\n\tflags     fieldFlag\n\tfieldType fieldType\n\tdecimals  byte\n\tcharSet   uint8\n}\n\nfunc (mf *mysqlField) scanType() reflect.Type {\n\tswitch mf.fieldType {\n\tcase fieldTypeTiny:\n\t\tif mf.flags&flagNotNULL != 0 {\n\t\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\t\treturn scanTypeUint8\n\t\t\t}\n\t\t\treturn scanTypeInt8\n\t\t}\n\t\treturn scanTypeNullInt\n\n\tcase fieldTypeShort, fieldTypeYear:\n\t\tif mf.flags&flagNotNULL != 0 {\n\t\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\t\treturn scanTypeUint16\n\t\t\t}\n\t\t\treturn scanTypeInt16\n\t\t}\n\t\treturn scanTypeNullInt\n\n\tcase fieldTypeInt24, fieldTypeLong:\n\t\tif mf.flags&flagNotNULL != 0 {\n\t\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\t\treturn scanTypeUint32\n\t\t\t}\n\t\t\treturn scanTypeInt32\n\t\t}\n\t\treturn scanTypeNullInt\n\n\tcase fieldTypeLongLong:\n\t\tif mf.flags&flagNotNULL != 0 {\n\t\t\tif mf.flags&flagUnsigned != 0 {\n\t\t\t\treturn scanTypeUint64\n\t\t\t}\n\t\t\treturn scanTypeInt64\n\t\t}\n\t\treturn scanTypeNullInt\n\n\tcase fieldTypeFloat:\n\t\tif mf.flags&flagNotNULL != 0 {\n\t\t\treturn scanTypeFloat32\n\t\t}\n\t\treturn scanTypeNullFloat\n\n\tcase fieldTypeDouble:\n\t\tif mf.flags&flagNotNULL != 0 {\n\t\t\treturn scanTypeFloat64\n\t\t}\n\t\treturn scanTypeNullFloat\n\n\tcase fieldTypeBit, fieldTypeTinyBLOB, fieldTypeMediumBLOB, fieldTypeLongBLOB,\n\t\tfieldTypeBLOB, fieldTypeVarString, fieldTypeString, fieldTypeGeometry:\n\t\tif mf.charSet == binaryCollationID {\n\t\t\treturn scanTypeBytes\n\t\t}\n\t\tfallthrough\n\tcase fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar,\n\t\tfieldTypeEnum, fieldTypeSet, fieldTypeJSON, fieldTypeTime:\n\t\tif mf.flags&flagNotNULL != 0 {\n\t\t\treturn scanTypeString\n\t\t}\n\t\treturn scanTypeNullString\n\n\tcase fieldTypeDate, fieldTypeNewDate,\n\t\tfieldTypeTimestamp, fieldTypeDateTime:\n\t\t// NullTime is always returned for more consistent behavior as it can\n\t\t// handle both cases of parseTime regardless if the field is nullable.\n\t\treturn scanTypeNullTime\n\n\tdefault:\n\t\treturn scanTypeUnknown\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/infile.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\tfileRegister       map[string]bool\n\tfileRegisterLock   sync.RWMutex\n\treaderRegister     map[string]func() io.Reader\n\treaderRegisterLock sync.RWMutex\n)\n\n// RegisterLocalFile adds the given file to the file allowlist,\n// so that it can be used by \"LOAD DATA LOCAL INFILE <filepath>\".\n// Alternatively you can allow the use of all local files with\n// the DSN parameter 'allowAllFiles=true'\n//\n//\tfilePath := \"/home/gopher/data.csv\"\n//\tmysql.RegisterLocalFile(filePath)\n//\terr := db.Exec(\"LOAD DATA LOCAL INFILE '\" + filePath + \"' INTO TABLE foo\")\n//\tif err != nil {\n//\t...\nfunc RegisterLocalFile(filePath string) {\n\tfileRegisterLock.Lock()\n\t// lazy map init\n\tif fileRegister == nil {\n\t\tfileRegister = make(map[string]bool)\n\t}\n\n\tfileRegister[strings.Trim(filePath, `\"`)] = true\n\tfileRegisterLock.Unlock()\n}\n\n// DeregisterLocalFile removes the given filepath from the allowlist.\nfunc DeregisterLocalFile(filePath string) {\n\tfileRegisterLock.Lock()\n\tdelete(fileRegister, strings.Trim(filePath, `\"`))\n\tfileRegisterLock.Unlock()\n}\n\n// RegisterReaderHandler registers a handler function which is used\n// to receive a io.Reader.\n// The Reader can be used by \"LOAD DATA LOCAL INFILE Reader::<name>\".\n// If the handler returns a io.ReadCloser Close() is called when the\n// request is finished.\n//\n//\tmysql.RegisterReaderHandler(\"data\", func() io.Reader {\n//\t\tvar csvReader io.Reader // Some Reader that returns CSV data\n//\t\t... // Open Reader here\n//\t\treturn csvReader\n//\t})\n//\terr := db.Exec(\"LOAD DATA LOCAL INFILE 'Reader::data' INTO TABLE foo\")\n//\tif err != nil {\n//\t...\nfunc RegisterReaderHandler(name string, handler func() io.Reader) {\n\treaderRegisterLock.Lock()\n\t// lazy map init\n\tif readerRegister == nil {\n\t\treaderRegister = make(map[string]func() io.Reader)\n\t}\n\n\treaderRegister[name] = handler\n\treaderRegisterLock.Unlock()\n}\n\n// DeregisterReaderHandler removes the ReaderHandler function with\n// the given name from the registry.\nfunc DeregisterReaderHandler(name string) {\n\treaderRegisterLock.Lock()\n\tdelete(readerRegister, name)\n\treaderRegisterLock.Unlock()\n}\n\nfunc deferredClose(err *error, closer io.Closer) {\n\tcloseErr := closer.Close()\n\tif *err == nil {\n\t\t*err = closeErr\n\t}\n}\n\nconst defaultPacketSize = 16 * 1024 // 16KB is small enough for disk readahead and large enough for TCP\n\nfunc (mc *okHandler) handleInFileRequest(name string) (err error) {\n\tvar rdr io.Reader\n\tvar data []byte\n\tpacketSize := defaultPacketSize\n\tif mc.maxWriteSize < packetSize {\n\t\tpacketSize = mc.maxWriteSize\n\t}\n\n\tif idx := strings.Index(name, \"Reader::\"); idx == 0 || (idx > 0 && name[idx-1] == '/') { // io.Reader\n\t\t// The server might return an an absolute path. See issue #355.\n\t\tname = name[idx+8:]\n\n\t\treaderRegisterLock.RLock()\n\t\thandler, inMap := readerRegister[name]\n\t\treaderRegisterLock.RUnlock()\n\n\t\tif inMap {\n\t\t\trdr = handler()\n\t\t\tif rdr != nil {\n\t\t\t\tif cl, ok := rdr.(io.Closer); ok {\n\t\t\t\t\tdefer deferredClose(&err, cl)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terr = fmt.Errorf(\"reader '%s' is <nil>\", name)\n\t\t\t}\n\t\t} else {\n\t\t\terr = fmt.Errorf(\"reader '%s' is not registered\", name)\n\t\t}\n\t} else { // File\n\t\tname = strings.Trim(name, `\"`)\n\t\tfileRegisterLock.RLock()\n\t\tfr := fileRegister[name]\n\t\tfileRegisterLock.RUnlock()\n\t\tif mc.cfg.AllowAllFiles || fr {\n\t\t\tvar file *os.File\n\t\t\tvar fi os.FileInfo\n\n\t\t\tif file, err = os.Open(name); err == nil {\n\t\t\t\tdefer deferredClose(&err, file)\n\n\t\t\t\t// get file size\n\t\t\t\tif fi, err = file.Stat(); err == nil {\n\t\t\t\t\trdr = file\n\t\t\t\t\tif fileSize := int(fi.Size()); fileSize < packetSize {\n\t\t\t\t\t\tpacketSize = fileSize\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\terr = fmt.Errorf(\"local file '%s' is not registered\", name)\n\t\t}\n\t}\n\n\t// send content packets\n\t// if packetSize == 0, the Reader contains no data\n\tif err == nil && packetSize > 0 {\n\t\tdata := make([]byte, 4+packetSize)\n\t\tvar n int\n\t\tfor err == nil {\n\t\t\tn, err = rdr.Read(data[4:])\n\t\t\tif n > 0 {\n\t\t\t\tif ioErr := mc.conn().writePacket(data[:4+n]); ioErr != nil {\n\t\t\t\t\treturn ioErr\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err == io.EOF {\n\t\t\terr = nil\n\t\t}\n\t}\n\n\t// send empty packet (termination)\n\tif data == nil {\n\t\tdata = make([]byte, 4)\n\t}\n\tif ioErr := mc.conn().writePacket(data[:4]); ioErr != nil {\n\t\treturn ioErr\n\t}\n\n\t// read OK packet\n\tif err == nil {\n\t\treturn mc.readResultOK()\n\t}\n\n\tmc.conn().readPacket()\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/nulltime.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql\"\n\t\"database/sql/driver\"\n\t\"fmt\"\n\t\"time\"\n)\n\n// NullTime represents a time.Time that may be NULL.\n// NullTime implements the Scanner interface so\n// it can be used as a scan destination:\n//\n//\tvar nt NullTime\n//\terr := db.QueryRow(\"SELECT time FROM foo WHERE id=?\", id).Scan(&nt)\n//\t...\n//\tif nt.Valid {\n//\t   // use nt.Time\n//\t} else {\n//\t   // NULL value\n//\t}\n//\n// # This NullTime implementation is not driver-specific\n//\n// Deprecated: NullTime doesn't honor the loc DSN parameter.\n// NullTime.Scan interprets a time as UTC, not the loc DSN parameter.\n// Use sql.NullTime instead.\ntype NullTime sql.NullTime\n\n// Scan implements the Scanner interface.\n// The value type must be time.Time or string / []byte (formatted time-string),\n// otherwise Scan fails.\nfunc (nt *NullTime) Scan(value any) (err error) {\n\tif value == nil {\n\t\tnt.Time, nt.Valid = time.Time{}, false\n\t\treturn\n\t}\n\n\tswitch v := value.(type) {\n\tcase time.Time:\n\t\tnt.Time, nt.Valid = v, true\n\t\treturn\n\tcase []byte:\n\t\tnt.Time, err = parseDateTime(v, time.UTC)\n\t\tnt.Valid = (err == nil)\n\t\treturn\n\tcase string:\n\t\tnt.Time, err = parseDateTime([]byte(v), time.UTC)\n\t\tnt.Valid = (err == nil)\n\t\treturn\n\t}\n\n\tnt.Valid = false\n\treturn fmt.Errorf(\"can't convert %T to time.Time\", value)\n}\n\n// Value implements the driver Valuer interface.\nfunc (nt NullTime) Value() (driver.Value, error) {\n\tif !nt.Valid {\n\t\treturn nil, nil\n\t}\n\treturn nt.Time, nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/packets.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"database/sql/driver\"\n\t\"encoding/binary\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// Packets documentation:\n// http://dev.mysql.com/doc/internals/en/client-server-protocol.html\n\n// Read packet to buffer 'data'\nfunc (mc *mysqlConn) readPacket() ([]byte, error) {\n\tvar prevData []byte\n\tfor {\n\t\t// read packet header\n\t\tdata, err := mc.buf.readNext(4)\n\t\tif err != nil {\n\t\t\tif cerr := mc.canceled.Value(); cerr != nil {\n\t\t\t\treturn nil, cerr\n\t\t\t}\n\t\t\tmc.log(err)\n\t\t\tmc.Close()\n\t\t\treturn nil, ErrInvalidConn\n\t\t}\n\n\t\t// packet length [24 bit]\n\t\tpktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16)\n\n\t\t// check packet sync [8 bit]\n\t\tif data[3] != mc.sequence {\n\t\t\tmc.Close()\n\t\t\tif data[3] > mc.sequence {\n\t\t\t\treturn nil, ErrPktSyncMul\n\t\t\t}\n\t\t\treturn nil, ErrPktSync\n\t\t}\n\t\tmc.sequence++\n\n\t\t// packets with length 0 terminate a previous packet which is a\n\t\t// multiple of (2^24)-1 bytes long\n\t\tif pktLen == 0 {\n\t\t\t// there was no previous packet\n\t\t\tif prevData == nil {\n\t\t\t\tmc.log(ErrMalformPkt)\n\t\t\t\tmc.Close()\n\t\t\t\treturn nil, ErrInvalidConn\n\t\t\t}\n\n\t\t\treturn prevData, nil\n\t\t}\n\n\t\t// read packet body [pktLen bytes]\n\t\tdata, err = mc.buf.readNext(pktLen)\n\t\tif err != nil {\n\t\t\tif cerr := mc.canceled.Value(); cerr != nil {\n\t\t\t\treturn nil, cerr\n\t\t\t}\n\t\t\tmc.log(err)\n\t\t\tmc.Close()\n\t\t\treturn nil, ErrInvalidConn\n\t\t}\n\n\t\t// return data if this was the last packet\n\t\tif pktLen < maxPacketSize {\n\t\t\t// zero allocations for non-split packets\n\t\t\tif prevData == nil {\n\t\t\t\treturn data, nil\n\t\t\t}\n\n\t\t\treturn append(prevData, data...), nil\n\t\t}\n\n\t\tprevData = append(prevData, data...)\n\t}\n}\n\n// Write packet buffer 'data'\nfunc (mc *mysqlConn) writePacket(data []byte) error {\n\tpktLen := len(data) - 4\n\n\tif pktLen > mc.maxAllowedPacket {\n\t\treturn ErrPktTooLarge\n\t}\n\n\tfor {\n\t\tvar size int\n\t\tif pktLen >= maxPacketSize {\n\t\t\tdata[0] = 0xff\n\t\t\tdata[1] = 0xff\n\t\t\tdata[2] = 0xff\n\t\t\tsize = maxPacketSize\n\t\t} else {\n\t\t\tdata[0] = byte(pktLen)\n\t\t\tdata[1] = byte(pktLen >> 8)\n\t\t\tdata[2] = byte(pktLen >> 16)\n\t\t\tsize = pktLen\n\t\t}\n\t\tdata[3] = mc.sequence\n\n\t\t// Write packet\n\t\tif mc.writeTimeout > 0 {\n\t\t\tif err := mc.netConn.SetWriteDeadline(time.Now().Add(mc.writeTimeout)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tn, err := mc.netConn.Write(data[:4+size])\n\t\tif err == nil && n == 4+size {\n\t\t\tmc.sequence++\n\t\t\tif size != maxPacketSize {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tpktLen -= size\n\t\t\tdata = data[size:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Handle error\n\t\tif err == nil { // n != len(data)\n\t\t\tmc.cleanup()\n\t\t\tmc.log(ErrMalformPkt)\n\t\t} else {\n\t\t\tif cerr := mc.canceled.Value(); cerr != nil {\n\t\t\t\treturn cerr\n\t\t\t}\n\t\t\tif n == 0 && pktLen == len(data)-4 {\n\t\t\t\t// only for the first loop iteration when nothing was written yet\n\t\t\t\treturn errBadConnNoWrite\n\t\t\t}\n\t\t\tmc.cleanup()\n\t\t\tmc.log(err)\n\t\t}\n\t\treturn ErrInvalidConn\n\t}\n}\n\n/******************************************************************************\n*                           Initialization Process                            *\n******************************************************************************/\n\n// Handshake Initialization Packet\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake\nfunc (mc *mysqlConn) readHandshakePacket() (data []byte, plugin string, err error) {\n\tdata, err = mc.readPacket()\n\tif err != nil {\n\t\t// for init we can rewrite this to ErrBadConn for sql.Driver to retry, since\n\t\t// in connection initialization we don't risk retrying non-idempotent actions.\n\t\tif err == ErrInvalidConn {\n\t\t\treturn nil, \"\", driver.ErrBadConn\n\t\t}\n\t\treturn\n\t}\n\n\tif data[0] == iERR {\n\t\treturn nil, \"\", mc.handleErrorPacket(data)\n\t}\n\n\t// protocol version [1 byte]\n\tif data[0] < minProtocolVersion {\n\t\treturn nil, \"\", fmt.Errorf(\n\t\t\t\"unsupported protocol version %d. Version %d or higher is required\",\n\t\t\tdata[0],\n\t\t\tminProtocolVersion,\n\t\t)\n\t}\n\n\t// server version [null terminated string]\n\t// connection id [4 bytes]\n\tpos := 1 + bytes.IndexByte(data[1:], 0x00) + 1 + 4\n\n\t// first part of the password cipher [8 bytes]\n\tauthData := data[pos : pos+8]\n\n\t// (filler) always 0x00 [1 byte]\n\tpos += 8 + 1\n\n\t// capability flags (lower 2 bytes) [2 bytes]\n\tmc.flags = clientFlag(binary.LittleEndian.Uint16(data[pos : pos+2]))\n\tif mc.flags&clientProtocol41 == 0 {\n\t\treturn nil, \"\", ErrOldProtocol\n\t}\n\tif mc.flags&clientSSL == 0 && mc.cfg.TLS != nil {\n\t\tif mc.cfg.AllowFallbackToPlaintext {\n\t\t\tmc.cfg.TLS = nil\n\t\t} else {\n\t\t\treturn nil, \"\", ErrNoTLS\n\t\t}\n\t}\n\tpos += 2\n\n\tif len(data) > pos {\n\t\t// character set [1 byte]\n\t\t// status flags [2 bytes]\n\t\t// capability flags (upper 2 bytes) [2 bytes]\n\t\t// length of auth-plugin-data [1 byte]\n\t\t// reserved (all [00]) [10 bytes]\n\t\tpos += 1 + 2 + 2 + 1 + 10\n\n\t\t// second part of the password cipher [minimum 13 bytes],\n\t\t// where len=MAX(13, length of auth-plugin-data - 8)\n\t\t//\n\t\t// The web documentation is ambiguous about the length. However,\n\t\t// according to mysql-5.7/sql/auth/sql_authentication.cc line 538,\n\t\t// the 13th byte is \"\\0 byte, terminating the second part of\n\t\t// a scramble\". So the second part of the password cipher is\n\t\t// a NULL terminated string that's at least 13 bytes with the\n\t\t// last byte being NULL.\n\t\t//\n\t\t// The official Python library uses the fixed length 12\n\t\t// which seems to work but technically could have a hidden bug.\n\t\tauthData = append(authData, data[pos:pos+12]...)\n\t\tpos += 13\n\n\t\t// EOF if version (>= 5.5.7 and < 5.5.10) or (>= 5.6.0 and < 5.6.2)\n\t\t// \\NUL otherwise\n\t\tif end := bytes.IndexByte(data[pos:], 0x00); end != -1 {\n\t\t\tplugin = string(data[pos : pos+end])\n\t\t} else {\n\t\t\tplugin = string(data[pos:])\n\t\t}\n\n\t\t// make a memory safe copy of the cipher slice\n\t\tvar b [20]byte\n\t\tcopy(b[:], authData)\n\t\treturn b[:], plugin, nil\n\t}\n\n\t// make a memory safe copy of the cipher slice\n\tvar b [8]byte\n\tcopy(b[:], authData)\n\treturn b[:], plugin, nil\n}\n\n// Client Authentication Packet\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse\nfunc (mc *mysqlConn) writeHandshakeResponsePacket(authResp []byte, plugin string) error {\n\t// Adjust client flags based on server support\n\tclientFlags := clientProtocol41 |\n\t\tclientSecureConn |\n\t\tclientLongPassword |\n\t\tclientTransactions |\n\t\tclientLocalFiles |\n\t\tclientPluginAuth |\n\t\tclientMultiResults |\n\t\tclientConnectAttrs |\n\t\tmc.flags&clientLongFlag\n\n\tif mc.cfg.ClientFoundRows {\n\t\tclientFlags |= clientFoundRows\n\t}\n\n\t// To enable TLS / SSL\n\tif mc.cfg.TLS != nil {\n\t\tclientFlags |= clientSSL\n\t}\n\n\tif mc.cfg.MultiStatements {\n\t\tclientFlags |= clientMultiStatements\n\t}\n\n\t// encode length of the auth plugin data\n\tvar authRespLEIBuf [9]byte\n\tauthRespLen := len(authResp)\n\tauthRespLEI := appendLengthEncodedInteger(authRespLEIBuf[:0], uint64(authRespLen))\n\tif len(authRespLEI) > 1 {\n\t\t// if the length can not be written in 1 byte, it must be written as a\n\t\t// length encoded integer\n\t\tclientFlags |= clientPluginAuthLenEncClientData\n\t}\n\n\tpktLen := 4 + 4 + 1 + 23 + len(mc.cfg.User) + 1 + len(authRespLEI) + len(authResp) + 21 + 1\n\n\t// To specify a db name\n\tif n := len(mc.cfg.DBName); n > 0 {\n\t\tclientFlags |= clientConnectWithDB\n\t\tpktLen += n + 1\n\t}\n\n\t// encode length of the connection attributes\n\tvar connAttrsLEIBuf [9]byte\n\tconnAttrsLen := len(mc.connector.encodedAttributes)\n\tconnAttrsLEI := appendLengthEncodedInteger(connAttrsLEIBuf[:0], uint64(connAttrsLen))\n\tpktLen += len(connAttrsLEI) + len(mc.connector.encodedAttributes)\n\n\t// Calculate packet length and get buffer with that size\n\tdata, err := mc.buf.takeBuffer(pktLen + 4)\n\tif err != nil {\n\t\t// cannot take the buffer. Something must be wrong with the connection\n\t\tmc.log(err)\n\t\treturn errBadConnNoWrite\n\t}\n\n\t// ClientFlags [32 bit]\n\tdata[4] = byte(clientFlags)\n\tdata[5] = byte(clientFlags >> 8)\n\tdata[6] = byte(clientFlags >> 16)\n\tdata[7] = byte(clientFlags >> 24)\n\n\t// MaxPacketSize [32 bit] (none)\n\tdata[8] = 0x00\n\tdata[9] = 0x00\n\tdata[10] = 0x00\n\tdata[11] = 0x00\n\n\t// Collation ID [1 byte]\n\tcname := mc.cfg.Collation\n\tif cname == \"\" {\n\t\tcname = defaultCollation\n\t}\n\tvar found bool\n\tdata[12], found = collations[cname]\n\tif !found {\n\t\t// Note possibility for false negatives:\n\t\t// could be triggered  although the collation is valid if the\n\t\t// collations map does not contain entries the server supports.\n\t\treturn fmt.Errorf(\"unknown collation: %q\", cname)\n\t}\n\n\t// Filler [23 bytes] (all 0x00)\n\tpos := 13\n\tfor ; pos < 13+23; pos++ {\n\t\tdata[pos] = 0\n\t}\n\n\t// SSL Connection Request Packet\n\t// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::SSLRequest\n\tif mc.cfg.TLS != nil {\n\t\t// Send TLS / SSL request packet\n\t\tif err := mc.writePacket(data[:(4+4+1+23)+4]); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Switch to TLS\n\t\ttlsConn := tls.Client(mc.netConn, mc.cfg.TLS)\n\t\tif err := tlsConn.Handshake(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmc.netConn = tlsConn\n\t\tmc.buf.nc = tlsConn\n\t}\n\n\t// User [null terminated string]\n\tif len(mc.cfg.User) > 0 {\n\t\tpos += copy(data[pos:], mc.cfg.User)\n\t}\n\tdata[pos] = 0x00\n\tpos++\n\n\t// Auth Data [length encoded integer]\n\tpos += copy(data[pos:], authRespLEI)\n\tpos += copy(data[pos:], authResp)\n\n\t// Databasename [null terminated string]\n\tif len(mc.cfg.DBName) > 0 {\n\t\tpos += copy(data[pos:], mc.cfg.DBName)\n\t\tdata[pos] = 0x00\n\t\tpos++\n\t}\n\n\tpos += copy(data[pos:], plugin)\n\tdata[pos] = 0x00\n\tpos++\n\n\t// Connection Attributes\n\tpos += copy(data[pos:], connAttrsLEI)\n\tpos += copy(data[pos:], []byte(mc.connector.encodedAttributes))\n\n\t// Send Auth packet\n\treturn mc.writePacket(data[:pos])\n}\n\n// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse\nfunc (mc *mysqlConn) writeAuthSwitchPacket(authData []byte) error {\n\tpktLen := 4 + len(authData)\n\tdata, err := mc.buf.takeSmallBuffer(pktLen)\n\tif err != nil {\n\t\t// cannot take the buffer. Something must be wrong with the connection\n\t\tmc.log(err)\n\t\treturn errBadConnNoWrite\n\t}\n\n\t// Add the auth data [EOF]\n\tcopy(data[4:], authData)\n\treturn mc.writePacket(data)\n}\n\n/******************************************************************************\n*                             Command Packets                                 *\n******************************************************************************/\n\nfunc (mc *mysqlConn) writeCommandPacket(command byte) error {\n\t// Reset Packet Sequence\n\tmc.sequence = 0\n\n\tdata, err := mc.buf.takeSmallBuffer(4 + 1)\n\tif err != nil {\n\t\t// cannot take the buffer. Something must be wrong with the connection\n\t\tmc.log(err)\n\t\treturn errBadConnNoWrite\n\t}\n\n\t// Add command byte\n\tdata[4] = command\n\n\t// Send CMD packet\n\treturn mc.writePacket(data)\n}\n\nfunc (mc *mysqlConn) writeCommandPacketStr(command byte, arg string) error {\n\t// Reset Packet Sequence\n\tmc.sequence = 0\n\n\tpktLen := 1 + len(arg)\n\tdata, err := mc.buf.takeBuffer(pktLen + 4)\n\tif err != nil {\n\t\t// cannot take the buffer. Something must be wrong with the connection\n\t\tmc.log(err)\n\t\treturn errBadConnNoWrite\n\t}\n\n\t// Add command byte\n\tdata[4] = command\n\n\t// Add arg\n\tcopy(data[5:], arg)\n\n\t// Send CMD packet\n\treturn mc.writePacket(data)\n}\n\nfunc (mc *mysqlConn) writeCommandPacketUint32(command byte, arg uint32) error {\n\t// Reset Packet Sequence\n\tmc.sequence = 0\n\n\tdata, err := mc.buf.takeSmallBuffer(4 + 1 + 4)\n\tif err != nil {\n\t\t// cannot take the buffer. Something must be wrong with the connection\n\t\tmc.log(err)\n\t\treturn errBadConnNoWrite\n\t}\n\n\t// Add command byte\n\tdata[4] = command\n\n\t// Add arg [32 bit]\n\tdata[5] = byte(arg)\n\tdata[6] = byte(arg >> 8)\n\tdata[7] = byte(arg >> 16)\n\tdata[8] = byte(arg >> 24)\n\n\t// Send CMD packet\n\treturn mc.writePacket(data)\n}\n\n/******************************************************************************\n*                              Result Packets                                 *\n******************************************************************************/\n\nfunc (mc *mysqlConn) readAuthResult() ([]byte, string, error) {\n\tdata, err := mc.readPacket()\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\n\t// packet indicator\n\tswitch data[0] {\n\n\tcase iOK:\n\t\t// resultUnchanged, since auth happens before any queries or\n\t\t// commands have been executed.\n\t\treturn nil, \"\", mc.resultUnchanged().handleOkPacket(data)\n\n\tcase iAuthMoreData:\n\t\treturn data[1:], \"\", err\n\n\tcase iEOF:\n\t\tif len(data) == 1 {\n\t\t\t// https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::OldAuthSwitchRequest\n\t\t\treturn nil, \"mysql_old_password\", nil\n\t\t}\n\t\tpluginEndIndex := bytes.IndexByte(data, 0x00)\n\t\tif pluginEndIndex < 0 {\n\t\t\treturn nil, \"\", ErrMalformPkt\n\t\t}\n\t\tplugin := string(data[1:pluginEndIndex])\n\t\tauthData := data[pluginEndIndex+1:]\n\t\treturn authData, plugin, nil\n\n\tdefault: // Error otherwise\n\t\treturn nil, \"\", mc.handleErrorPacket(data)\n\t}\n}\n\n// Returns error if Packet is not a 'Result OK'-Packet\nfunc (mc *okHandler) readResultOK() error {\n\tdata, err := mc.conn().readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif data[0] == iOK {\n\t\treturn mc.handleOkPacket(data)\n\t}\n\treturn mc.conn().handleErrorPacket(data)\n}\n\n// Result Set Header Packet\n// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::Resultset\nfunc (mc *okHandler) readResultSetHeaderPacket() (int, error) {\n\t// handleOkPacket replaces both values; other cases leave the values unchanged.\n\tmc.result.affectedRows = append(mc.result.affectedRows, 0)\n\tmc.result.insertIds = append(mc.result.insertIds, 0)\n\n\tdata, err := mc.conn().readPacket()\n\tif err == nil {\n\t\tswitch data[0] {\n\n\t\tcase iOK:\n\t\t\treturn 0, mc.handleOkPacket(data)\n\n\t\tcase iERR:\n\t\t\treturn 0, mc.conn().handleErrorPacket(data)\n\n\t\tcase iLocalInFile:\n\t\t\treturn 0, mc.handleInFileRequest(string(data[1:]))\n\t\t}\n\n\t\t// column count\n\t\tnum, _, _ := readLengthEncodedInteger(data)\n\t\t// ignore remaining data in the packet. see #1478.\n\t\treturn int(num), nil\n\t}\n\treturn 0, err\n}\n\n// Error Packet\n// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-ERR_Packet\nfunc (mc *mysqlConn) handleErrorPacket(data []byte) error {\n\tif data[0] != iERR {\n\t\treturn ErrMalformPkt\n\t}\n\n\t// 0xff [1 byte]\n\n\t// Error Number [16 bit uint]\n\terrno := binary.LittleEndian.Uint16(data[1:3])\n\n\t// 1792: ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION\n\t// 1290: ER_OPTION_PREVENTS_STATEMENT (returned by Aurora during failover)\n\tif (errno == 1792 || errno == 1290) && mc.cfg.RejectReadOnly {\n\t\t// Oops; we are connected to a read-only connection, and won't be able\n\t\t// to issue any write statements. Since RejectReadOnly is configured,\n\t\t// we throw away this connection hoping this one would have write\n\t\t// permission. This is specifically for a possible race condition\n\t\t// during failover (e.g. on AWS Aurora). See README.md for more.\n\t\t//\n\t\t// We explicitly close the connection before returning\n\t\t// driver.ErrBadConn to ensure that `database/sql` purges this\n\t\t// connection and initiates a new one for next statement next time.\n\t\tmc.Close()\n\t\treturn driver.ErrBadConn\n\t}\n\n\tme := &MySQLError{Number: errno}\n\n\tpos := 3\n\n\t// SQL State [optional: # + 5bytes string]\n\tif data[3] == 0x23 {\n\t\tcopy(me.SQLState[:], data[4:4+5])\n\t\tpos = 9\n\t}\n\n\t// Error Message [string]\n\tme.Message = string(data[pos:])\n\n\treturn me\n}\n\nfunc readStatus(b []byte) statusFlag {\n\treturn statusFlag(b[0]) | statusFlag(b[1])<<8\n}\n\n// Returns an instance of okHandler for codepaths where mysqlConn.result doesn't\n// need to be cleared first (e.g. during authentication, or while additional\n// resultsets are being fetched.)\nfunc (mc *mysqlConn) resultUnchanged() *okHandler {\n\treturn (*okHandler)(mc)\n}\n\n// okHandler represents the state of the connection when mysqlConn.result has\n// been prepared for processing of OK packets.\n//\n// To correctly populate mysqlConn.result (updated by handleOkPacket()), all\n// callpaths must either:\n//\n// 1. first clear it using clearResult(), or\n// 2. confirm that they don't need to (by calling resultUnchanged()).\n//\n// Both return an instance of type *okHandler.\ntype okHandler mysqlConn\n\n// Exposes the underlying type's methods.\nfunc (mc *okHandler) conn() *mysqlConn {\n\treturn (*mysqlConn)(mc)\n}\n\n// clearResult clears the connection's stored affectedRows and insertIds\n// fields.\n//\n// It returns a handler that can process OK responses.\nfunc (mc *mysqlConn) clearResult() *okHandler {\n\tmc.result = mysqlResult{}\n\treturn (*okHandler)(mc)\n}\n\n// Ok Packet\n// http://dev.mysql.com/doc/internals/en/generic-response-packets.html#packet-OK_Packet\nfunc (mc *okHandler) handleOkPacket(data []byte) error {\n\tvar n, m int\n\tvar affectedRows, insertId uint64\n\n\t// 0x00 [1 byte]\n\n\t// Affected rows [Length Coded Binary]\n\taffectedRows, _, n = readLengthEncodedInteger(data[1:])\n\n\t// Insert id [Length Coded Binary]\n\tinsertId, _, m = readLengthEncodedInteger(data[1+n:])\n\n\t// Update for the current statement result (only used by\n\t// readResultSetHeaderPacket).\n\tif len(mc.result.affectedRows) > 0 {\n\t\tmc.result.affectedRows[len(mc.result.affectedRows)-1] = int64(affectedRows)\n\t}\n\tif len(mc.result.insertIds) > 0 {\n\t\tmc.result.insertIds[len(mc.result.insertIds)-1] = int64(insertId)\n\t}\n\n\t// server_status [2 bytes]\n\tmc.status = readStatus(data[1+n+m : 1+n+m+2])\n\tif mc.status&statusMoreResultsExists != 0 {\n\t\treturn nil\n\t}\n\n\t// warning count [2 bytes]\n\n\treturn nil\n}\n\n// Read Packets as Field Packets until EOF-Packet or an Error appears\n// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-Protocol::ColumnDefinition41\nfunc (mc *mysqlConn) readColumns(count int) ([]mysqlField, error) {\n\tcolumns := make([]mysqlField, count)\n\n\tfor i := 0; ; i++ {\n\t\tdata, err := mc.readPacket()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// EOF Packet\n\t\tif data[0] == iEOF && (len(data) == 5 || len(data) == 1) {\n\t\t\tif i == count {\n\t\t\t\treturn columns, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"column count mismatch n:%d len:%d\", count, len(columns))\n\t\t}\n\n\t\t// Catalog\n\t\tpos, err := skipLengthEncodedString(data)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Database [len coded string]\n\t\tn, err := skipLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpos += n\n\n\t\t// Table [len coded string]\n\t\tif mc.cfg.ColumnsWithAlias {\n\t\t\ttableName, _, n, err := readLengthEncodedString(data[pos:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tpos += n\n\t\t\tcolumns[i].tableName = string(tableName)\n\t\t} else {\n\t\t\tn, err = skipLengthEncodedString(data[pos:])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tpos += n\n\t\t}\n\n\t\t// Original table [len coded string]\n\t\tn, err = skipLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpos += n\n\n\t\t// Name [len coded string]\n\t\tname, _, n, err := readLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcolumns[i].name = string(name)\n\t\tpos += n\n\n\t\t// Original name [len coded string]\n\t\tn, err = skipLengthEncodedString(data[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tpos += n\n\n\t\t// Filler [uint8]\n\t\tpos++\n\n\t\t// Charset [charset, collation uint8]\n\t\tcolumns[i].charSet = data[pos]\n\t\tpos += 2\n\n\t\t// Length [uint32]\n\t\tcolumns[i].length = binary.LittleEndian.Uint32(data[pos : pos+4])\n\t\tpos += 4\n\n\t\t// Field type [uint8]\n\t\tcolumns[i].fieldType = fieldType(data[pos])\n\t\tpos++\n\n\t\t// Flags [uint16]\n\t\tcolumns[i].flags = fieldFlag(binary.LittleEndian.Uint16(data[pos : pos+2]))\n\t\tpos += 2\n\n\t\t// Decimals [uint8]\n\t\tcolumns[i].decimals = data[pos]\n\t\t//pos++\n\n\t\t// Default value [len coded binary]\n\t\t//if pos < len(data) {\n\t\t//\tdefaultVal, _, err = bytesToLengthCodedBinary(data[pos:])\n\t\t//}\n\t}\n}\n\n// Read Packets as Field Packets until EOF-Packet or an Error appears\n// http://dev.mysql.com/doc/internals/en/com-query-response.html#packet-ProtocolText::ResultsetRow\nfunc (rows *textRows) readRow(dest []driver.Value) error {\n\tmc := rows.mc\n\n\tif rows.rs.done {\n\t\treturn io.EOF\n\t}\n\n\tdata, err := mc.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// EOF Packet\n\tif data[0] == iEOF && len(data) == 5 {\n\t\t// server_status [2 bytes]\n\t\trows.mc.status = readStatus(data[3:])\n\t\trows.rs.done = true\n\t\tif !rows.HasNextResultSet() {\n\t\t\trows.mc = nil\n\t\t}\n\t\treturn io.EOF\n\t}\n\tif data[0] == iERR {\n\t\trows.mc = nil\n\t\treturn mc.handleErrorPacket(data)\n\t}\n\n\t// RowSet Packet\n\tvar (\n\t\tn      int\n\t\tisNull bool\n\t\tpos    int = 0\n\t)\n\n\tfor i := range dest {\n\t\t// Read bytes and convert to string\n\t\tvar buf []byte\n\t\tbuf, isNull, n, err = readLengthEncodedString(data[pos:])\n\t\tpos += n\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif isNull {\n\t\t\tdest[i] = nil\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch rows.rs.columns[i].fieldType {\n\t\tcase fieldTypeTimestamp,\n\t\t\tfieldTypeDateTime,\n\t\t\tfieldTypeDate,\n\t\t\tfieldTypeNewDate:\n\t\t\tif mc.parseTime {\n\t\t\t\tdest[i], err = parseDateTime(buf, mc.cfg.Loc)\n\t\t\t} else {\n\t\t\t\tdest[i] = buf\n\t\t\t}\n\n\t\tcase fieldTypeTiny, fieldTypeShort, fieldTypeInt24, fieldTypeYear, fieldTypeLong:\n\t\t\tdest[i], err = strconv.ParseInt(string(buf), 10, 64)\n\n\t\tcase fieldTypeLongLong:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tdest[i], err = strconv.ParseUint(string(buf), 10, 64)\n\t\t\t} else {\n\t\t\t\tdest[i], err = strconv.ParseInt(string(buf), 10, 64)\n\t\t\t}\n\n\t\tcase fieldTypeFloat:\n\t\t\tvar d float64\n\t\t\td, err = strconv.ParseFloat(string(buf), 32)\n\t\t\tdest[i] = float32(d)\n\n\t\tcase fieldTypeDouble:\n\t\t\tdest[i], err = strconv.ParseFloat(string(buf), 64)\n\n\t\tdefault:\n\t\t\tdest[i] = buf\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Reads Packets until EOF-Packet or an Error appears. Returns count of Packets read\nfunc (mc *mysqlConn) readUntilEOF() error {\n\tfor {\n\t\tdata, err := mc.readPacket()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tswitch data[0] {\n\t\tcase iERR:\n\t\t\treturn mc.handleErrorPacket(data)\n\t\tcase iEOF:\n\t\t\tif len(data) == 5 {\n\t\t\t\tmc.status = readStatus(data[3:])\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\n/******************************************************************************\n*                           Prepared Statements                               *\n******************************************************************************/\n\n// Prepare Result Packets\n// http://dev.mysql.com/doc/internals/en/com-stmt-prepare-response.html\nfunc (stmt *mysqlStmt) readPrepareResultPacket() (uint16, error) {\n\tdata, err := stmt.mc.readPacket()\n\tif err == nil {\n\t\t// packet indicator [1 byte]\n\t\tif data[0] != iOK {\n\t\t\treturn 0, stmt.mc.handleErrorPacket(data)\n\t\t}\n\n\t\t// statement id [4 bytes]\n\t\tstmt.id = binary.LittleEndian.Uint32(data[1:5])\n\n\t\t// Column count [16 bit uint]\n\t\tcolumnCount := binary.LittleEndian.Uint16(data[5:7])\n\n\t\t// Param count [16 bit uint]\n\t\tstmt.paramCount = int(binary.LittleEndian.Uint16(data[7:9]))\n\n\t\t// Reserved [8 bit]\n\n\t\t// Warning count [16 bit uint]\n\n\t\treturn columnCount, nil\n\t}\n\treturn 0, err\n}\n\n// http://dev.mysql.com/doc/internals/en/com-stmt-send-long-data.html\nfunc (stmt *mysqlStmt) writeCommandLongData(paramID int, arg []byte) error {\n\tmaxLen := stmt.mc.maxAllowedPacket - 1\n\tpktLen := maxLen\n\n\t// After the header (bytes 0-3) follows before the data:\n\t// 1 byte command\n\t// 4 bytes stmtID\n\t// 2 bytes paramID\n\tconst dataOffset = 1 + 4 + 2\n\n\t// Cannot use the write buffer since\n\t// a) the buffer is too small\n\t// b) it is in use\n\tdata := make([]byte, 4+1+4+2+len(arg))\n\n\tcopy(data[4+dataOffset:], arg)\n\n\tfor argLen := len(arg); argLen > 0; argLen -= pktLen - dataOffset {\n\t\tif dataOffset+argLen < maxLen {\n\t\t\tpktLen = dataOffset + argLen\n\t\t}\n\n\t\tstmt.mc.sequence = 0\n\t\t// Add command byte [1 byte]\n\t\tdata[4] = comStmtSendLongData\n\n\t\t// Add stmtID [32 bit]\n\t\tdata[5] = byte(stmt.id)\n\t\tdata[6] = byte(stmt.id >> 8)\n\t\tdata[7] = byte(stmt.id >> 16)\n\t\tdata[8] = byte(stmt.id >> 24)\n\n\t\t// Add paramID [16 bit]\n\t\tdata[9] = byte(paramID)\n\t\tdata[10] = byte(paramID >> 8)\n\n\t\t// Send CMD packet\n\t\terr := stmt.mc.writePacket(data[:4+pktLen])\n\t\tif err == nil {\n\t\t\tdata = data[pktLen-dataOffset:]\n\t\t\tcontinue\n\t\t}\n\t\treturn err\n\n\t}\n\n\t// Reset Packet Sequence\n\tstmt.mc.sequence = 0\n\treturn nil\n}\n\n// Execute Prepared Statement\n// http://dev.mysql.com/doc/internals/en/com-stmt-execute.html\nfunc (stmt *mysqlStmt) writeExecutePacket(args []driver.Value) error {\n\tif len(args) != stmt.paramCount {\n\t\treturn fmt.Errorf(\n\t\t\t\"argument count mismatch (got: %d; has: %d)\",\n\t\t\tlen(args),\n\t\t\tstmt.paramCount,\n\t\t)\n\t}\n\n\tconst minPktLen = 4 + 1 + 4 + 1 + 4\n\tmc := stmt.mc\n\n\t// Determine threshold dynamically to avoid packet size shortage.\n\tlongDataSize := mc.maxAllowedPacket / (stmt.paramCount + 1)\n\tif longDataSize < 64 {\n\t\tlongDataSize = 64\n\t}\n\n\t// Reset packet-sequence\n\tmc.sequence = 0\n\n\tvar data []byte\n\tvar err error\n\n\tif len(args) == 0 {\n\t\tdata, err = mc.buf.takeBuffer(minPktLen)\n\t} else {\n\t\tdata, err = mc.buf.takeCompleteBuffer()\n\t\t// In this case the len(data) == cap(data) which is used to optimise the flow below.\n\t}\n\tif err != nil {\n\t\t// cannot take the buffer. Something must be wrong with the connection\n\t\tmc.log(err)\n\t\treturn errBadConnNoWrite\n\t}\n\n\t// command [1 byte]\n\tdata[4] = comStmtExecute\n\n\t// statement_id [4 bytes]\n\tdata[5] = byte(stmt.id)\n\tdata[6] = byte(stmt.id >> 8)\n\tdata[7] = byte(stmt.id >> 16)\n\tdata[8] = byte(stmt.id >> 24)\n\n\t// flags (0: CURSOR_TYPE_NO_CURSOR) [1 byte]\n\tdata[9] = 0x00\n\n\t// iteration_count (uint32(1)) [4 bytes]\n\tdata[10] = 0x01\n\tdata[11] = 0x00\n\tdata[12] = 0x00\n\tdata[13] = 0x00\n\n\tif len(args) > 0 {\n\t\tpos := minPktLen\n\n\t\tvar nullMask []byte\n\t\tif maskLen, typesLen := (len(args)+7)/8, 1+2*len(args); pos+maskLen+typesLen >= cap(data) {\n\t\t\t// buffer has to be extended but we don't know by how much so\n\t\t\t// we depend on append after all data with known sizes fit.\n\t\t\t// We stop at that because we deal with a lot of columns here\n\t\t\t// which makes the required allocation size hard to guess.\n\t\t\ttmp := make([]byte, pos+maskLen+typesLen)\n\t\t\tcopy(tmp[:pos], data[:pos])\n\t\t\tdata = tmp\n\t\t\tnullMask = data[pos : pos+maskLen]\n\t\t\t// No need to clean nullMask as make ensures that.\n\t\t\tpos += maskLen\n\t\t} else {\n\t\t\tnullMask = data[pos : pos+maskLen]\n\t\t\tfor i := range nullMask {\n\t\t\t\tnullMask[i] = 0\n\t\t\t}\n\t\t\tpos += maskLen\n\t\t}\n\n\t\t// newParameterBoundFlag 1 [1 byte]\n\t\tdata[pos] = 0x01\n\t\tpos++\n\n\t\t// type of each parameter [len(args)*2 bytes]\n\t\tparamTypes := data[pos:]\n\t\tpos += len(args) * 2\n\n\t\t// value of each parameter [n bytes]\n\t\tparamValues := data[pos:pos]\n\t\tvaluesCap := cap(paramValues)\n\n\t\tfor i, arg := range args {\n\t\t\t// build NULL-bitmap\n\t\t\tif arg == nil {\n\t\t\t\tnullMask[i/8] |= 1 << (uint(i) & 7)\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeNULL)\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif v, ok := arg.(json.RawMessage); ok {\n\t\t\t\targ = []byte(v)\n\t\t\t}\n\t\t\t// cache types and values\n\t\t\tswitch v := arg.(type) {\n\t\t\tcase int64:\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeLongLong)\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif cap(paramValues)-len(paramValues)-8 >= 0 {\n\t\t\t\t\tparamValues = paramValues[:len(paramValues)+8]\n\t\t\t\t\tbinary.LittleEndian.PutUint64(\n\t\t\t\t\t\tparamValues[len(paramValues)-8:],\n\t\t\t\t\t\tuint64(v),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tparamValues = append(paramValues,\n\t\t\t\t\t\tuint64ToBytes(uint64(v))...,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\tcase uint64:\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeLongLong)\n\t\t\t\tparamTypes[i+i+1] = 0x80 // type is unsigned\n\n\t\t\t\tif cap(paramValues)-len(paramValues)-8 >= 0 {\n\t\t\t\t\tparamValues = paramValues[:len(paramValues)+8]\n\t\t\t\t\tbinary.LittleEndian.PutUint64(\n\t\t\t\t\t\tparamValues[len(paramValues)-8:],\n\t\t\t\t\t\tuint64(v),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tparamValues = append(paramValues,\n\t\t\t\t\t\tuint64ToBytes(uint64(v))...,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\tcase float64:\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeDouble)\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif cap(paramValues)-len(paramValues)-8 >= 0 {\n\t\t\t\t\tparamValues = paramValues[:len(paramValues)+8]\n\t\t\t\t\tbinary.LittleEndian.PutUint64(\n\t\t\t\t\t\tparamValues[len(paramValues)-8:],\n\t\t\t\t\t\tmath.Float64bits(v),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tparamValues = append(paramValues,\n\t\t\t\t\t\tuint64ToBytes(math.Float64bits(v))...,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\tcase bool:\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeTiny)\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif v {\n\t\t\t\t\tparamValues = append(paramValues, 0x01)\n\t\t\t\t} else {\n\t\t\t\t\tparamValues = append(paramValues, 0x00)\n\t\t\t\t}\n\n\t\t\tcase []byte:\n\t\t\t\t// Common case (non-nil value) first\n\t\t\t\tif v != nil {\n\t\t\t\t\tparamTypes[i+i] = byte(fieldTypeString)\n\t\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\t\tif len(v) < longDataSize {\n\t\t\t\t\t\tparamValues = appendLengthEncodedInteger(paramValues,\n\t\t\t\t\t\t\tuint64(len(v)),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tparamValues = append(paramValues, v...)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif err := stmt.writeCommandLongData(i, v); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Handle []byte(nil) as a NULL value\n\t\t\t\tnullMask[i/8] |= 1 << (uint(i) & 7)\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeNULL)\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\tcase string:\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeString)\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tif len(v) < longDataSize {\n\t\t\t\t\tparamValues = appendLengthEncodedInteger(paramValues,\n\t\t\t\t\t\tuint64(len(v)),\n\t\t\t\t\t)\n\t\t\t\t\tparamValues = append(paramValues, v...)\n\t\t\t\t} else {\n\t\t\t\t\tif err := stmt.writeCommandLongData(i, []byte(v)); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase time.Time:\n\t\t\t\tparamTypes[i+i] = byte(fieldTypeString)\n\t\t\t\tparamTypes[i+i+1] = 0x00\n\n\t\t\t\tvar a [64]byte\n\t\t\t\tvar b = a[:0]\n\n\t\t\t\tif v.IsZero() {\n\t\t\t\t\tb = append(b, \"0000-00-00\"...)\n\t\t\t\t} else {\n\t\t\t\t\tb, err = appendDateTime(b, v.In(mc.cfg.Loc), mc.cfg.timeTruncate)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tparamValues = appendLengthEncodedInteger(paramValues,\n\t\t\t\t\tuint64(len(b)),\n\t\t\t\t)\n\t\t\t\tparamValues = append(paramValues, b...)\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"cannot convert type: %T\", arg)\n\t\t\t}\n\t\t}\n\n\t\t// Check if param values exceeded the available buffer\n\t\t// In that case we must build the data packet with the new values buffer\n\t\tif valuesCap != cap(paramValues) {\n\t\t\tdata = append(data[:pos], paramValues...)\n\t\t\tif err = mc.buf.store(data); err != nil {\n\t\t\t\tmc.log(err)\n\t\t\t\treturn errBadConnNoWrite\n\t\t\t}\n\t\t}\n\n\t\tpos += len(paramValues)\n\t\tdata = data[:pos]\n\t}\n\n\treturn mc.writePacket(data)\n}\n\n// For each remaining resultset in the stream, discards its rows and updates\n// mc.affectedRows and mc.insertIds.\nfunc (mc *okHandler) discardResults() error {\n\tfor mc.status&statusMoreResultsExists != 0 {\n\t\tresLen, err := mc.readResultSetHeaderPacket()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif resLen > 0 {\n\t\t\t// columns\n\t\t\tif err := mc.conn().readUntilEOF(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// rows\n\t\t\tif err := mc.conn().readUntilEOF(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// http://dev.mysql.com/doc/internals/en/binary-protocol-resultset-row.html\nfunc (rows *binaryRows) readRow(dest []driver.Value) error {\n\tdata, err := rows.mc.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// packet indicator [1 byte]\n\tif data[0] != iOK {\n\t\t// EOF Packet\n\t\tif data[0] == iEOF && len(data) == 5 {\n\t\t\trows.mc.status = readStatus(data[3:])\n\t\t\trows.rs.done = true\n\t\t\tif !rows.HasNextResultSet() {\n\t\t\t\trows.mc = nil\n\t\t\t}\n\t\t\treturn io.EOF\n\t\t}\n\t\tmc := rows.mc\n\t\trows.mc = nil\n\n\t\t// Error otherwise\n\t\treturn mc.handleErrorPacket(data)\n\t}\n\n\t// NULL-bitmap,  [(column-count + 7 + 2) / 8 bytes]\n\tpos := 1 + (len(dest)+7+2)>>3\n\tnullMask := data[1:pos]\n\n\tfor i := range dest {\n\t\t// Field is NULL\n\t\t// (byte >> bit-pos) % 2 == 1\n\t\tif ((nullMask[(i+2)>>3] >> uint((i+2)&7)) & 1) == 1 {\n\t\t\tdest[i] = nil\n\t\t\tcontinue\n\t\t}\n\n\t\t// Convert to byte-coded string\n\t\tswitch rows.rs.columns[i].fieldType {\n\t\tcase fieldTypeNULL:\n\t\t\tdest[i] = nil\n\t\t\tcontinue\n\n\t\t// Numeric Types\n\t\tcase fieldTypeTiny:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tdest[i] = int64(data[pos])\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(int8(data[pos]))\n\t\t\t}\n\t\t\tpos++\n\t\t\tcontinue\n\n\t\tcase fieldTypeShort, fieldTypeYear:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tdest[i] = int64(binary.LittleEndian.Uint16(data[pos : pos+2]))\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(int16(binary.LittleEndian.Uint16(data[pos : pos+2])))\n\t\t\t}\n\t\t\tpos += 2\n\t\t\tcontinue\n\n\t\tcase fieldTypeInt24, fieldTypeLong:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tdest[i] = int64(binary.LittleEndian.Uint32(data[pos : pos+4]))\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(int32(binary.LittleEndian.Uint32(data[pos : pos+4])))\n\t\t\t}\n\t\t\tpos += 4\n\t\t\tcontinue\n\n\t\tcase fieldTypeLongLong:\n\t\t\tif rows.rs.columns[i].flags&flagUnsigned != 0 {\n\t\t\t\tval := binary.LittleEndian.Uint64(data[pos : pos+8])\n\t\t\t\tif val > math.MaxInt64 {\n\t\t\t\t\tdest[i] = uint64ToString(val)\n\t\t\t\t} else {\n\t\t\t\t\tdest[i] = int64(val)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdest[i] = int64(binary.LittleEndian.Uint64(data[pos : pos+8]))\n\t\t\t}\n\t\t\tpos += 8\n\t\t\tcontinue\n\n\t\tcase fieldTypeFloat:\n\t\t\tdest[i] = math.Float32frombits(binary.LittleEndian.Uint32(data[pos : pos+4]))\n\t\t\tpos += 4\n\t\t\tcontinue\n\n\t\tcase fieldTypeDouble:\n\t\t\tdest[i] = math.Float64frombits(binary.LittleEndian.Uint64(data[pos : pos+8]))\n\t\t\tpos += 8\n\t\t\tcontinue\n\n\t\t// Length coded Binary Strings\n\t\tcase fieldTypeDecimal, fieldTypeNewDecimal, fieldTypeVarChar,\n\t\t\tfieldTypeBit, fieldTypeEnum, fieldTypeSet, fieldTypeTinyBLOB,\n\t\t\tfieldTypeMediumBLOB, fieldTypeLongBLOB, fieldTypeBLOB,\n\t\t\tfieldTypeVarString, fieldTypeString, fieldTypeGeometry, fieldTypeJSON:\n\t\t\tvar isNull bool\n\t\t\tvar n int\n\t\t\tdest[i], isNull, n, err = readLengthEncodedString(data[pos:])\n\t\t\tpos += n\n\t\t\tif err == nil {\n\t\t\t\tif !isNull {\n\t\t\t\t\tcontinue\n\t\t\t\t} else {\n\t\t\t\t\tdest[i] = nil\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn err\n\n\t\tcase\n\t\t\tfieldTypeDate, fieldTypeNewDate, // Date YYYY-MM-DD\n\t\t\tfieldTypeTime,                         // Time [-][H]HH:MM:SS[.fractal]\n\t\t\tfieldTypeTimestamp, fieldTypeDateTime: // Timestamp YYYY-MM-DD HH:MM:SS[.fractal]\n\n\t\t\tnum, isNull, n := readLengthEncodedInteger(data[pos:])\n\t\t\tpos += n\n\n\t\t\tswitch {\n\t\t\tcase isNull:\n\t\t\t\tdest[i] = nil\n\t\t\t\tcontinue\n\t\t\tcase rows.rs.columns[i].fieldType == fieldTypeTime:\n\t\t\t\t// database/sql does not support an equivalent to TIME, return a string\n\t\t\t\tvar dstlen uint8\n\t\t\t\tswitch decimals := rows.rs.columns[i].decimals; decimals {\n\t\t\t\tcase 0x00, 0x1f:\n\t\t\t\t\tdstlen = 8\n\t\t\t\tcase 1, 2, 3, 4, 5, 6:\n\t\t\t\t\tdstlen = 8 + 1 + decimals\n\t\t\t\tdefault:\n\t\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\t\"protocol error, illegal decimals value %d\",\n\t\t\t\t\t\trows.rs.columns[i].decimals,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tdest[i], err = formatBinaryTime(data[pos:pos+int(num)], dstlen)\n\t\t\tcase rows.mc.parseTime:\n\t\t\t\tdest[i], err = parseBinaryDateTime(num, data[pos:], rows.mc.cfg.Loc)\n\t\t\tdefault:\n\t\t\t\tvar dstlen uint8\n\t\t\t\tif rows.rs.columns[i].fieldType == fieldTypeDate {\n\t\t\t\t\tdstlen = 10\n\t\t\t\t} else {\n\t\t\t\t\tswitch decimals := rows.rs.columns[i].decimals; decimals {\n\t\t\t\t\tcase 0x00, 0x1f:\n\t\t\t\t\t\tdstlen = 19\n\t\t\t\t\tcase 1, 2, 3, 4, 5, 6:\n\t\t\t\t\t\tdstlen = 19 + 1 + decimals\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\t\t\"protocol error, illegal decimals value %d\",\n\t\t\t\t\t\t\trows.rs.columns[i].decimals,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen)\n\t\t\t}\n\n\t\t\tif err == nil {\n\t\t\t\tpos += int(num)\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t// Please report if this happens!\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown field type %d\", rows.rs.columns[i].fieldType)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/result.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport \"database/sql/driver\"\n\n// Result exposes data not available through *connection.Result.\n//\n// This is accessible by executing statements using sql.Conn.Raw() and\n// downcasting the returned result:\n//\n//\tres, err := rawConn.Exec(...)\n//\tres.(mysql.Result).AllRowsAffected()\ntype Result interface {\n\tdriver.Result\n\t// AllRowsAffected returns a slice containing the affected rows for each\n\t// executed statement.\n\tAllRowsAffected() []int64\n\t// AllLastInsertIds returns a slice containing the last inserted ID for each\n\t// executed statement.\n\tAllLastInsertIds() []int64\n}\n\ntype mysqlResult struct {\n\t// One entry in both slices is created for every executed statement result.\n\taffectedRows []int64\n\tinsertIds    []int64\n}\n\nfunc (res *mysqlResult) LastInsertId() (int64, error) {\n\treturn res.insertIds[len(res.insertIds)-1], nil\n}\n\nfunc (res *mysqlResult) RowsAffected() (int64, error) {\n\treturn res.affectedRows[len(res.affectedRows)-1], nil\n}\n\nfunc (res *mysqlResult) AllLastInsertIds() []int64 {\n\treturn append([]int64{}, res.insertIds...) // defensive copy\n}\n\nfunc (res *mysqlResult) AllRowsAffected() []int64 {\n\treturn append([]int64{}, res.affectedRows...) // defensive copy\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/rows.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql/driver\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n)\n\ntype resultSet struct {\n\tcolumns     []mysqlField\n\tcolumnNames []string\n\tdone        bool\n}\n\ntype mysqlRows struct {\n\tmc     *mysqlConn\n\trs     resultSet\n\tfinish func()\n}\n\ntype binaryRows struct {\n\tmysqlRows\n}\n\ntype textRows struct {\n\tmysqlRows\n}\n\nfunc (rows *mysqlRows) Columns() []string {\n\tif rows.rs.columnNames != nil {\n\t\treturn rows.rs.columnNames\n\t}\n\n\tcolumns := make([]string, len(rows.rs.columns))\n\tif rows.mc != nil && rows.mc.cfg.ColumnsWithAlias {\n\t\tfor i := range columns {\n\t\t\tif tableName := rows.rs.columns[i].tableName; len(tableName) > 0 {\n\t\t\t\tcolumns[i] = tableName + \".\" + rows.rs.columns[i].name\n\t\t\t} else {\n\t\t\t\tcolumns[i] = rows.rs.columns[i].name\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor i := range columns {\n\t\t\tcolumns[i] = rows.rs.columns[i].name\n\t\t}\n\t}\n\n\trows.rs.columnNames = columns\n\treturn columns\n}\n\nfunc (rows *mysqlRows) ColumnTypeDatabaseTypeName(i int) string {\n\treturn rows.rs.columns[i].typeDatabaseName()\n}\n\n// func (rows *mysqlRows) ColumnTypeLength(i int) (length int64, ok bool) {\n// \treturn int64(rows.rs.columns[i].length), true\n// }\n\nfunc (rows *mysqlRows) ColumnTypeNullable(i int) (nullable, ok bool) {\n\treturn rows.rs.columns[i].flags&flagNotNULL == 0, true\n}\n\nfunc (rows *mysqlRows) ColumnTypePrecisionScale(i int) (int64, int64, bool) {\n\tcolumn := rows.rs.columns[i]\n\tdecimals := int64(column.decimals)\n\n\tswitch column.fieldType {\n\tcase fieldTypeDecimal, fieldTypeNewDecimal:\n\t\tif decimals > 0 {\n\t\t\treturn int64(column.length) - 2, decimals, true\n\t\t}\n\t\treturn int64(column.length) - 1, decimals, true\n\tcase fieldTypeTimestamp, fieldTypeDateTime, fieldTypeTime:\n\t\treturn decimals, decimals, true\n\tcase fieldTypeFloat, fieldTypeDouble:\n\t\tif decimals == 0x1f {\n\t\t\treturn math.MaxInt64, math.MaxInt64, true\n\t\t}\n\t\treturn math.MaxInt64, decimals, true\n\t}\n\n\treturn 0, 0, false\n}\n\nfunc (rows *mysqlRows) ColumnTypeScanType(i int) reflect.Type {\n\treturn rows.rs.columns[i].scanType()\n}\n\nfunc (rows *mysqlRows) Close() (err error) {\n\tif f := rows.finish; f != nil {\n\t\tf()\n\t\trows.finish = nil\n\t}\n\n\tmc := rows.mc\n\tif mc == nil {\n\t\treturn nil\n\t}\n\tif err := mc.error(); err != nil {\n\t\treturn err\n\t}\n\n\t// flip the buffer for this connection if we need to drain it.\n\t// note that for a successful query (i.e. one where rows.next()\n\t// has been called until it returns false), `rows.mc` will be nil\n\t// by the time the user calls `(*Rows).Close`, so we won't reach this\n\t// see: https://github.com/golang/go/commit/651ddbdb5056ded455f47f9c494c67b389622a47\n\tmc.buf.flip()\n\n\t// Remove unread packets from stream\n\tif !rows.rs.done {\n\t\terr = mc.readUntilEOF()\n\t}\n\tif err == nil {\n\t\thandleOk := mc.clearResult()\n\t\tif err = handleOk.discardResults(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\trows.mc = nil\n\treturn err\n}\n\nfunc (rows *mysqlRows) HasNextResultSet() (b bool) {\n\tif rows.mc == nil {\n\t\treturn false\n\t}\n\treturn rows.mc.status&statusMoreResultsExists != 0\n}\n\nfunc (rows *mysqlRows) nextResultSet() (int, error) {\n\tif rows.mc == nil {\n\t\treturn 0, io.EOF\n\t}\n\tif err := rows.mc.error(); err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Remove unread packets from stream\n\tif !rows.rs.done {\n\t\tif err := rows.mc.readUntilEOF(); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\trows.rs.done = true\n\t}\n\n\tif !rows.HasNextResultSet() {\n\t\trows.mc = nil\n\t\treturn 0, io.EOF\n\t}\n\trows.rs = resultSet{}\n\t// rows.mc.affectedRows and rows.mc.insertIds accumulate on each call to\n\t// nextResultSet.\n\tresLen, err := rows.mc.resultUnchanged().readResultSetHeaderPacket()\n\tif err != nil {\n\t\t// Clean up about multi-results flag\n\t\trows.rs.done = true\n\t\trows.mc.status = rows.mc.status & (^statusMoreResultsExists)\n\t}\n\treturn resLen, err\n}\n\nfunc (rows *mysqlRows) nextNotEmptyResultSet() (int, error) {\n\tfor {\n\t\tresLen, err := rows.nextResultSet()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tif resLen > 0 {\n\t\t\treturn resLen, nil\n\t\t}\n\n\t\trows.rs.done = true\n\t}\n}\n\nfunc (rows *binaryRows) NextResultSet() error {\n\tresLen, err := rows.nextNotEmptyResultSet()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trows.rs.columns, err = rows.mc.readColumns(resLen)\n\treturn err\n}\n\nfunc (rows *binaryRows) Next(dest []driver.Value) error {\n\tif mc := rows.mc; mc != nil {\n\t\tif err := mc.error(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Fetch next row from stream\n\t\treturn rows.readRow(dest)\n\t}\n\treturn io.EOF\n}\n\nfunc (rows *textRows) NextResultSet() (err error) {\n\tresLen, err := rows.nextNotEmptyResultSet()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trows.rs.columns, err = rows.mc.readColumns(resLen)\n\treturn err\n}\n\nfunc (rows *textRows) Next(dest []driver.Value) error {\n\tif mc := rows.mc; mc != nil {\n\t\tif err := mc.error(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Fetch next row from stream\n\t\treturn rows.readRow(dest)\n\t}\n\treturn io.EOF\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/statement.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"database/sql/driver\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n)\n\ntype mysqlStmt struct {\n\tmc         *mysqlConn\n\tid         uint32\n\tparamCount int\n}\n\nfunc (stmt *mysqlStmt) Close() error {\n\tif stmt.mc == nil || stmt.mc.closed.Load() {\n\t\t// driver.Stmt.Close can be called more than once, thus this function\n\t\t// has to be idempotent.\n\t\t// See also Issue #450 and golang/go#16019.\n\t\t//errLog.Print(ErrInvalidConn)\n\t\treturn driver.ErrBadConn\n\t}\n\n\terr := stmt.mc.writeCommandPacketUint32(comStmtClose, stmt.id)\n\tstmt.mc = nil\n\treturn err\n}\n\nfunc (stmt *mysqlStmt) NumInput() int {\n\treturn stmt.paramCount\n}\n\nfunc (stmt *mysqlStmt) ColumnConverter(idx int) driver.ValueConverter {\n\treturn converter{}\n}\n\nfunc (stmt *mysqlStmt) CheckNamedValue(nv *driver.NamedValue) (err error) {\n\tnv.Value, err = converter{}.ConvertValue(nv.Value)\n\treturn\n}\n\nfunc (stmt *mysqlStmt) Exec(args []driver.Value) (driver.Result, error) {\n\tif stmt.mc.closed.Load() {\n\t\tstmt.mc.log(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\t// Send command\n\terr := stmt.writeExecutePacket(args)\n\tif err != nil {\n\t\treturn nil, stmt.mc.markBadConn(err)\n\t}\n\n\tmc := stmt.mc\n\thandleOk := stmt.mc.clearResult()\n\n\t// Read Result\n\tresLen, err := handleOk.readResultSetHeaderPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif resLen > 0 {\n\t\t// Columns\n\t\tif err = mc.readUntilEOF(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Rows\n\t\tif err := mc.readUntilEOF(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif err := handleOk.discardResults(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tcopied := mc.result\n\treturn &copied, nil\n}\n\nfunc (stmt *mysqlStmt) Query(args []driver.Value) (driver.Rows, error) {\n\treturn stmt.query(args)\n}\n\nfunc (stmt *mysqlStmt) query(args []driver.Value) (*binaryRows, error) {\n\tif stmt.mc.closed.Load() {\n\t\tstmt.mc.log(ErrInvalidConn)\n\t\treturn nil, driver.ErrBadConn\n\t}\n\t// Send command\n\terr := stmt.writeExecutePacket(args)\n\tif err != nil {\n\t\treturn nil, stmt.mc.markBadConn(err)\n\t}\n\n\tmc := stmt.mc\n\n\t// Read Result\n\thandleOk := stmt.mc.clearResult()\n\tresLen, err := handleOk.readResultSetHeaderPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\trows := new(binaryRows)\n\n\tif resLen > 0 {\n\t\trows.mc = mc\n\t\trows.rs.columns, err = mc.readColumns(resLen)\n\t} else {\n\t\trows.rs.done = true\n\n\t\tswitch err := rows.NextResultSet(); err {\n\t\tcase nil, io.EOF:\n\t\t\treturn rows, nil\n\t\tdefault:\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn rows, err\n}\n\nvar jsonType = reflect.TypeOf(json.RawMessage{})\n\ntype converter struct{}\n\n// ConvertValue mirrors the reference/default converter in database/sql/driver\n// with _one_ exception.  We support uint64 with their high bit and the default\n// implementation does not.  This function should be kept in sync with\n// database/sql/driver defaultConverter.ConvertValue() except for that\n// deliberate difference.\nfunc (c converter) ConvertValue(v any) (driver.Value, error) {\n\tif driver.IsValue(v) {\n\t\treturn v, nil\n\t}\n\n\tif vr, ok := v.(driver.Valuer); ok {\n\t\tsv, err := callValuerValue(vr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif driver.IsValue(sv) {\n\t\t\treturn sv, nil\n\t\t}\n\t\t// A value returned from the Valuer interface can be \"a type handled by\n\t\t// a database driver's NamedValueChecker interface\" so we should accept\n\t\t// uint64 here as well.\n\t\tif u, ok := sv.(uint64); ok {\n\t\t\treturn u, nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"non-Value type %T returned from Value\", sv)\n\t}\n\trv := reflect.ValueOf(v)\n\tswitch rv.Kind() {\n\tcase reflect.Ptr:\n\t\t// indirect pointers\n\t\tif rv.IsNil() {\n\t\t\treturn nil, nil\n\t\t} else {\n\t\t\treturn c.ConvertValue(rv.Elem().Interface())\n\t\t}\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn rv.Int(), nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\treturn rv.Uint(), nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn rv.Float(), nil\n\tcase reflect.Bool:\n\t\treturn rv.Bool(), nil\n\tcase reflect.Slice:\n\t\tswitch t := rv.Type(); {\n\t\tcase t == jsonType:\n\t\t\treturn v, nil\n\t\tcase t.Elem().Kind() == reflect.Uint8:\n\t\t\treturn rv.Bytes(), nil\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported type %T, a slice of %s\", v, t.Elem().Kind())\n\t\t}\n\tcase reflect.String:\n\t\treturn rv.String(), nil\n\t}\n\treturn nil, fmt.Errorf(\"unsupported type %T, a %s\", v, rv.Kind())\n}\n\nvar valuerReflectType = reflect.TypeOf((*driver.Valuer)(nil)).Elem()\n\n// callValuerValue returns vr.Value(), with one exception:\n// If vr.Value is an auto-generated method on a pointer type and the\n// pointer is nil, it would panic at runtime in the panicwrap\n// method. Treat it like nil instead.\n//\n// This is so people can implement driver.Value on value types and\n// still use nil pointers to those types to mean nil/NULL, just like\n// string/*string.\n//\n// This is an exact copy of the same-named unexported function from the\n// database/sql package.\nfunc callValuerValue(vr driver.Valuer) (v driver.Value, err error) {\n\tif rv := reflect.ValueOf(vr); rv.Kind() == reflect.Ptr &&\n\t\trv.IsNil() &&\n\t\trv.Type().Elem().Implements(valuerReflectType) {\n\t\treturn nil, nil\n\t}\n\treturn vr.Value()\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/transaction.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\ntype mysqlTx struct {\n\tmc *mysqlConn\n}\n\nfunc (tx *mysqlTx) Commit() (err error) {\n\tif tx.mc == nil || tx.mc.closed.Load() {\n\t\treturn ErrInvalidConn\n\t}\n\terr = tx.mc.exec(\"COMMIT\")\n\ttx.mc = nil\n\treturn\n}\n\nfunc (tx *mysqlTx) Rollback() (err error) {\n\tif tx.mc == nil || tx.mc.closed.Load() {\n\t\treturn ErrInvalidConn\n\t}\n\terr = tx.mc.exec(\"ROLLBACK\")\n\ttx.mc = nil\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/go-sql-driver/mysql/utils.go",
    "content": "// Go MySQL Driver - A MySQL-Driver for Go's database/sql package\n//\n// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.\n//\n// This Source Code Form is subject to the terms of the Mozilla Public\n// License, v. 2.0. If a copy of the MPL was not distributed with this file,\n// You can obtain one at http://mozilla.org/MPL/2.0/.\n\npackage mysql\n\nimport (\n\t\"crypto/tls\"\n\t\"database/sql\"\n\t\"database/sql/driver\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n)\n\n// Registry for custom tls.Configs\nvar (\n\ttlsConfigLock     sync.RWMutex\n\ttlsConfigRegistry map[string]*tls.Config\n)\n\n// RegisterTLSConfig registers a custom tls.Config to be used with sql.Open.\n// Use the key as a value in the DSN where tls=value.\n//\n// Note: The provided tls.Config is exclusively owned by the driver after\n// registering it.\n//\n//\trootCertPool := x509.NewCertPool()\n//\tpem, err := os.ReadFile(\"/path/ca-cert.pem\")\n//\tif err != nil {\n//\t    log.Fatal(err)\n//\t}\n//\tif ok := rootCertPool.AppendCertsFromPEM(pem); !ok {\n//\t    log.Fatal(\"Failed to append PEM.\")\n//\t}\n//\tclientCert := make([]tls.Certificate, 0, 1)\n//\tcerts, err := tls.LoadX509KeyPair(\"/path/client-cert.pem\", \"/path/client-key.pem\")\n//\tif err != nil {\n//\t    log.Fatal(err)\n//\t}\n//\tclientCert = append(clientCert, certs)\n//\tmysql.RegisterTLSConfig(\"custom\", &tls.Config{\n//\t    RootCAs: rootCertPool,\n//\t    Certificates: clientCert,\n//\t})\n//\tdb, err := sql.Open(\"mysql\", \"user@tcp(localhost:3306)/test?tls=custom\")\nfunc RegisterTLSConfig(key string, config *tls.Config) error {\n\tif _, isBool := readBool(key); isBool || strings.ToLower(key) == \"skip-verify\" || strings.ToLower(key) == \"preferred\" {\n\t\treturn fmt.Errorf(\"key '%s' is reserved\", key)\n\t}\n\n\ttlsConfigLock.Lock()\n\tif tlsConfigRegistry == nil {\n\t\ttlsConfigRegistry = make(map[string]*tls.Config)\n\t}\n\n\ttlsConfigRegistry[key] = config\n\ttlsConfigLock.Unlock()\n\treturn nil\n}\n\n// DeregisterTLSConfig removes the tls.Config associated with key.\nfunc DeregisterTLSConfig(key string) {\n\ttlsConfigLock.Lock()\n\tif tlsConfigRegistry != nil {\n\t\tdelete(tlsConfigRegistry, key)\n\t}\n\ttlsConfigLock.Unlock()\n}\n\nfunc getTLSConfigClone(key string) (config *tls.Config) {\n\ttlsConfigLock.RLock()\n\tif v, ok := tlsConfigRegistry[key]; ok {\n\t\tconfig = v.Clone()\n\t}\n\ttlsConfigLock.RUnlock()\n\treturn\n}\n\n// Returns the bool value of the input.\n// The 2nd return value indicates if the input was a valid bool value\nfunc readBool(input string) (value bool, valid bool) {\n\tswitch input {\n\tcase \"1\", \"true\", \"TRUE\", \"True\":\n\t\treturn true, true\n\tcase \"0\", \"false\", \"FALSE\", \"False\":\n\t\treturn false, true\n\t}\n\n\t// Not a valid bool value\n\treturn\n}\n\n/******************************************************************************\n*                           Time related utils                                *\n******************************************************************************/\n\nfunc parseDateTime(b []byte, loc *time.Location) (time.Time, error) {\n\tconst base = \"0000-00-00 00:00:00.000000\"\n\tswitch len(b) {\n\tcase 10, 19, 21, 22, 23, 24, 25, 26: // up to \"YYYY-MM-DD HH:MM:SS.MMMMMM\"\n\t\tif string(b) == base[:len(b)] {\n\t\t\treturn time.Time{}, nil\n\t\t}\n\n\t\tyear, err := parseByteYear(b)\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\tif b[4] != '-' {\n\t\t\treturn time.Time{}, fmt.Errorf(\"bad value for field: `%c`\", b[4])\n\t\t}\n\n\t\tm, err := parseByte2Digits(b[5], b[6])\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\tmonth := time.Month(m)\n\n\t\tif b[7] != '-' {\n\t\t\treturn time.Time{}, fmt.Errorf(\"bad value for field: `%c`\", b[7])\n\t\t}\n\n\t\tday, err := parseByte2Digits(b[8], b[9])\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\tif len(b) == 10 {\n\t\t\treturn time.Date(year, month, day, 0, 0, 0, 0, loc), nil\n\t\t}\n\n\t\tif b[10] != ' ' {\n\t\t\treturn time.Time{}, fmt.Errorf(\"bad value for field: `%c`\", b[10])\n\t\t}\n\n\t\thour, err := parseByte2Digits(b[11], b[12])\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\tif b[13] != ':' {\n\t\t\treturn time.Time{}, fmt.Errorf(\"bad value for field: `%c`\", b[13])\n\t\t}\n\n\t\tmin, err := parseByte2Digits(b[14], b[15])\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\tif b[16] != ':' {\n\t\t\treturn time.Time{}, fmt.Errorf(\"bad value for field: `%c`\", b[16])\n\t\t}\n\n\t\tsec, err := parseByte2Digits(b[17], b[18])\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\tif len(b) == 19 {\n\t\t\treturn time.Date(year, month, day, hour, min, sec, 0, loc), nil\n\t\t}\n\n\t\tif b[19] != '.' {\n\t\t\treturn time.Time{}, fmt.Errorf(\"bad value for field: `%c`\", b[19])\n\t\t}\n\t\tnsec, err := parseByteNanoSec(b[20:])\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\treturn time.Date(year, month, day, hour, min, sec, nsec, loc), nil\n\tdefault:\n\t\treturn time.Time{}, fmt.Errorf(\"invalid time bytes: %s\", b)\n\t}\n}\n\nfunc parseByteYear(b []byte) (int, error) {\n\tyear, n := 0, 1000\n\tfor i := 0; i < 4; i++ {\n\t\tv, err := bToi(b[i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tyear += v * n\n\t\tn /= 10\n\t}\n\treturn year, nil\n}\n\nfunc parseByte2Digits(b1, b2 byte) (int, error) {\n\td1, err := bToi(b1)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\td2, err := bToi(b2)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d1*10 + d2, nil\n}\n\nfunc parseByteNanoSec(b []byte) (int, error) {\n\tns, digit := 0, 100000 // max is 6-digits\n\tfor i := 0; i < len(b); i++ {\n\t\tv, err := bToi(b[i])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tns += v * digit\n\t\tdigit /= 10\n\t}\n\t// nanoseconds has 10-digits. (needs to scale digits)\n\t// 10 - 6 = 4, so we have to multiple 1000.\n\treturn ns * 1000, nil\n}\n\nfunc bToi(b byte) (int, error) {\n\tif b < '0' || b > '9' {\n\t\treturn 0, errors.New(\"not [0-9]\")\n\t}\n\treturn int(b - '0'), nil\n}\n\nfunc parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) {\n\tswitch num {\n\tcase 0:\n\t\treturn time.Time{}, nil\n\tcase 4:\n\t\treturn time.Date(\n\t\t\tint(binary.LittleEndian.Uint16(data[:2])), // year\n\t\t\ttime.Month(data[2]),                       // month\n\t\t\tint(data[3]),                              // day\n\t\t\t0, 0, 0, 0,\n\t\t\tloc,\n\t\t), nil\n\tcase 7:\n\t\treturn time.Date(\n\t\t\tint(binary.LittleEndian.Uint16(data[:2])), // year\n\t\t\ttime.Month(data[2]),                       // month\n\t\t\tint(data[3]),                              // day\n\t\t\tint(data[4]),                              // hour\n\t\t\tint(data[5]),                              // minutes\n\t\t\tint(data[6]),                              // seconds\n\t\t\t0,\n\t\t\tloc,\n\t\t), nil\n\tcase 11:\n\t\treturn time.Date(\n\t\t\tint(binary.LittleEndian.Uint16(data[:2])), // year\n\t\t\ttime.Month(data[2]),                       // month\n\t\t\tint(data[3]),                              // day\n\t\t\tint(data[4]),                              // hour\n\t\t\tint(data[5]),                              // minutes\n\t\t\tint(data[6]),                              // seconds\n\t\t\tint(binary.LittleEndian.Uint32(data[7:11]))*1000, // nanoseconds\n\t\t\tloc,\n\t\t), nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid DATETIME packet length %d\", num)\n}\n\nfunc appendDateTime(buf []byte, t time.Time, timeTruncate time.Duration) ([]byte, error) {\n\tif timeTruncate > 0 {\n\t\tt = t.Truncate(timeTruncate)\n\t}\n\n\tyear, month, day := t.Date()\n\thour, min, sec := t.Clock()\n\tnsec := t.Nanosecond()\n\n\tif year < 1 || year > 9999 {\n\t\treturn buf, errors.New(\"year is not in the range [1, 9999]: \" + strconv.Itoa(year)) // use errors.New instead of fmt.Errorf to avoid year escape to heap\n\t}\n\tyear100 := year / 100\n\tyear1 := year % 100\n\n\tvar localBuf [len(\"2006-01-02T15:04:05.999999999\")]byte // does not escape\n\tlocalBuf[0], localBuf[1], localBuf[2], localBuf[3] = digits10[year100], digits01[year100], digits10[year1], digits01[year1]\n\tlocalBuf[4] = '-'\n\tlocalBuf[5], localBuf[6] = digits10[month], digits01[month]\n\tlocalBuf[7] = '-'\n\tlocalBuf[8], localBuf[9] = digits10[day], digits01[day]\n\n\tif hour == 0 && min == 0 && sec == 0 && nsec == 0 {\n\t\treturn append(buf, localBuf[:10]...), nil\n\t}\n\n\tlocalBuf[10] = ' '\n\tlocalBuf[11], localBuf[12] = digits10[hour], digits01[hour]\n\tlocalBuf[13] = ':'\n\tlocalBuf[14], localBuf[15] = digits10[min], digits01[min]\n\tlocalBuf[16] = ':'\n\tlocalBuf[17], localBuf[18] = digits10[sec], digits01[sec]\n\n\tif nsec == 0 {\n\t\treturn append(buf, localBuf[:19]...), nil\n\t}\n\tnsec100000000 := nsec / 100000000\n\tnsec1000000 := (nsec / 1000000) % 100\n\tnsec10000 := (nsec / 10000) % 100\n\tnsec100 := (nsec / 100) % 100\n\tnsec1 := nsec % 100\n\tlocalBuf[19] = '.'\n\n\t// milli second\n\tlocalBuf[20], localBuf[21], localBuf[22] =\n\t\tdigits01[nsec100000000], digits10[nsec1000000], digits01[nsec1000000]\n\t// micro second\n\tlocalBuf[23], localBuf[24], localBuf[25] =\n\t\tdigits10[nsec10000], digits01[nsec10000], digits10[nsec100]\n\t// nano second\n\tlocalBuf[26], localBuf[27], localBuf[28] =\n\t\tdigits01[nsec100], digits10[nsec1], digits01[nsec1]\n\n\t// trim trailing zeros\n\tn := len(localBuf)\n\tfor n > 0 && localBuf[n-1] == '0' {\n\t\tn--\n\t}\n\n\treturn append(buf, localBuf[:n]...), nil\n}\n\n// zeroDateTime is used in formatBinaryDateTime to avoid an allocation\n// if the DATE or DATETIME has the zero value.\n// It must never be changed.\n// The current behavior depends on database/sql copying the result.\nvar zeroDateTime = []byte(\"0000-00-00 00:00:00.000000\")\n\nconst digits01 = \"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\"\nconst digits10 = \"0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999\"\n\nfunc appendMicrosecs(dst, src []byte, decimals int) []byte {\n\tif decimals <= 0 {\n\t\treturn dst\n\t}\n\tif len(src) == 0 {\n\t\treturn append(dst, \".000000\"[:decimals+1]...)\n\t}\n\n\tmicrosecs := binary.LittleEndian.Uint32(src[:4])\n\tp1 := byte(microsecs / 10000)\n\tmicrosecs -= 10000 * uint32(p1)\n\tp2 := byte(microsecs / 100)\n\tmicrosecs -= 100 * uint32(p2)\n\tp3 := byte(microsecs)\n\n\tswitch decimals {\n\tdefault:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2], digits01[p2],\n\t\t\tdigits10[p3], digits01[p3],\n\t\t)\n\tcase 1:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1],\n\t\t)\n\tcase 2:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t)\n\tcase 3:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2],\n\t\t)\n\tcase 4:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2], digits01[p2],\n\t\t)\n\tcase 5:\n\t\treturn append(dst, '.',\n\t\t\tdigits10[p1], digits01[p1],\n\t\t\tdigits10[p2], digits01[p2],\n\t\t\tdigits10[p3],\n\t\t)\n\t}\n}\n\nfunc formatBinaryDateTime(src []byte, length uint8) (driver.Value, error) {\n\t// length expects the deterministic length of the zero value,\n\t// negative time and 100+ hours are automatically added if needed\n\tif len(src) == 0 {\n\t\treturn zeroDateTime[:length], nil\n\t}\n\tvar dst []byte      // return value\n\tvar p1, p2, p3 byte // current digit pair\n\n\tswitch length {\n\tcase 10, 19, 21, 22, 23, 24, 25, 26:\n\tdefault:\n\t\tt := \"DATE\"\n\t\tif length > 10 {\n\t\t\tt += \"TIME\"\n\t\t}\n\t\treturn nil, fmt.Errorf(\"illegal %s length %d\", t, length)\n\t}\n\tswitch len(src) {\n\tcase 4, 7, 11:\n\tdefault:\n\t\tt := \"DATE\"\n\t\tif length > 10 {\n\t\t\tt += \"TIME\"\n\t\t}\n\t\treturn nil, fmt.Errorf(\"illegal %s packet length %d\", t, len(src))\n\t}\n\tdst = make([]byte, 0, length)\n\t// start with the date\n\tyear := binary.LittleEndian.Uint16(src[:2])\n\tpt := year / 100\n\tp1 = byte(year - 100*uint16(pt))\n\tp2, p3 = src[2], src[3]\n\tdst = append(dst,\n\t\tdigits10[pt], digits01[pt],\n\t\tdigits10[p1], digits01[p1], '-',\n\t\tdigits10[p2], digits01[p2], '-',\n\t\tdigits10[p3], digits01[p3],\n\t)\n\tif length == 10 {\n\t\treturn dst, nil\n\t}\n\tif len(src) == 4 {\n\t\treturn append(dst, zeroDateTime[10:length]...), nil\n\t}\n\tdst = append(dst, ' ')\n\tp1 = src[4] // hour\n\tsrc = src[5:]\n\n\t// p1 is 2-digit hour, src is after hour\n\tp2, p3 = src[0], src[1]\n\tdst = append(dst,\n\t\tdigits10[p1], digits01[p1], ':',\n\t\tdigits10[p2], digits01[p2], ':',\n\t\tdigits10[p3], digits01[p3],\n\t)\n\treturn appendMicrosecs(dst, src[2:], int(length)-20), nil\n}\n\nfunc formatBinaryTime(src []byte, length uint8) (driver.Value, error) {\n\t// length expects the deterministic length of the zero value,\n\t// negative time and 100+ hours are automatically added if needed\n\tif len(src) == 0 {\n\t\treturn zeroDateTime[11 : 11+length], nil\n\t}\n\tvar dst []byte // return value\n\n\tswitch length {\n\tcase\n\t\t8,                      // time (can be up to 10 when negative and 100+ hours)\n\t\t10, 11, 12, 13, 14, 15: // time with fractional seconds\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"illegal TIME length %d\", length)\n\t}\n\tswitch len(src) {\n\tcase 8, 12:\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid TIME packet length %d\", len(src))\n\t}\n\t// +2 to enable negative time and 100+ hours\n\tdst = make([]byte, 0, length+2)\n\tif src[0] == 1 {\n\t\tdst = append(dst, '-')\n\t}\n\tdays := binary.LittleEndian.Uint32(src[1:5])\n\thours := int64(days)*24 + int64(src[5])\n\n\tif hours >= 100 {\n\t\tdst = strconv.AppendInt(dst, hours, 10)\n\t} else {\n\t\tdst = append(dst, digits10[hours], digits01[hours])\n\t}\n\n\tmin, sec := src[6], src[7]\n\tdst = append(dst, ':',\n\t\tdigits10[min], digits01[min], ':',\n\t\tdigits10[sec], digits01[sec],\n\t)\n\treturn appendMicrosecs(dst, src[8:], int(length)-9), nil\n}\n\n/******************************************************************************\n*                       Convert from and to bytes                             *\n******************************************************************************/\n\nfunc uint64ToBytes(n uint64) []byte {\n\treturn []byte{\n\t\tbyte(n),\n\t\tbyte(n >> 8),\n\t\tbyte(n >> 16),\n\t\tbyte(n >> 24),\n\t\tbyte(n >> 32),\n\t\tbyte(n >> 40),\n\t\tbyte(n >> 48),\n\t\tbyte(n >> 56),\n\t}\n}\n\nfunc uint64ToString(n uint64) []byte {\n\tvar a [20]byte\n\ti := 20\n\n\t// U+0030 = 0\n\t// ...\n\t// U+0039 = 9\n\n\tvar q uint64\n\tfor n >= 10 {\n\t\ti--\n\t\tq = n / 10\n\t\ta[i] = uint8(n-q*10) + 0x30\n\t\tn = q\n\t}\n\n\ti--\n\ta[i] = uint8(n) + 0x30\n\n\treturn a[i:]\n}\n\n// treats string value as unsigned integer representation\nfunc stringToInt(b []byte) int {\n\tval := 0\n\tfor i := range b {\n\t\tval *= 10\n\t\tval += int(b[i] - 0x30)\n\t}\n\treturn val\n}\n\n// returns the string read as a bytes slice, whether the value is NULL,\n// the number of bytes read and an error, in case the string is longer than\n// the input slice\nfunc readLengthEncodedString(b []byte) ([]byte, bool, int, error) {\n\t// Get length\n\tnum, isNull, n := readLengthEncodedInteger(b)\n\tif num < 1 {\n\t\treturn b[n:n], isNull, n, nil\n\t}\n\n\tn += int(num)\n\n\t// Check data length\n\tif len(b) >= n {\n\t\treturn b[n-int(num) : n : n], false, n, nil\n\t}\n\treturn nil, false, n, io.EOF\n}\n\n// returns the number of bytes skipped and an error, in case the string is\n// longer than the input slice\nfunc skipLengthEncodedString(b []byte) (int, error) {\n\t// Get length\n\tnum, _, n := readLengthEncodedInteger(b)\n\tif num < 1 {\n\t\treturn n, nil\n\t}\n\n\tn += int(num)\n\n\t// Check data length\n\tif len(b) >= n {\n\t\treturn n, nil\n\t}\n\treturn n, io.EOF\n}\n\n// returns the number read, whether the value is NULL and the number of bytes read\nfunc readLengthEncodedInteger(b []byte) (uint64, bool, int) {\n\t// See issue #349\n\tif len(b) == 0 {\n\t\treturn 0, true, 1\n\t}\n\n\tswitch b[0] {\n\t// 251: NULL\n\tcase 0xfb:\n\t\treturn 0, true, 1\n\n\t// 252: value of following 2\n\tcase 0xfc:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8, false, 3\n\n\t// 253: value of following 3\n\tcase 0xfd:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16, false, 4\n\n\t// 254: value of following 8\n\tcase 0xfe:\n\t\treturn uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 |\n\t\t\t\tuint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 |\n\t\t\t\tuint64(b[7])<<48 | uint64(b[8])<<56,\n\t\t\tfalse, 9\n\t}\n\n\t// 0-250: value of first byte\n\treturn uint64(b[0]), false, 1\n}\n\n// encodes a uint64 value and appends it to the given bytes slice\nfunc appendLengthEncodedInteger(b []byte, n uint64) []byte {\n\tswitch {\n\tcase n <= 250:\n\t\treturn append(b, byte(n))\n\n\tcase n <= 0xffff:\n\t\treturn append(b, 0xfc, byte(n), byte(n>>8))\n\n\tcase n <= 0xffffff:\n\t\treturn append(b, 0xfd, byte(n), byte(n>>8), byte(n>>16))\n\t}\n\treturn append(b, 0xfe, byte(n), byte(n>>8), byte(n>>16), byte(n>>24),\n\t\tbyte(n>>32), byte(n>>40), byte(n>>48), byte(n>>56))\n}\n\nfunc appendLengthEncodedString(b []byte, s string) []byte {\n\tb = appendLengthEncodedInteger(b, uint64(len(s)))\n\treturn append(b, s...)\n}\n\n// reserveBuffer checks cap(buf) and expand buffer to len(buf) + appendSize.\n// If cap(buf) is not enough, reallocate new buffer.\nfunc reserveBuffer(buf []byte, appendSize int) []byte {\n\tnewSize := len(buf) + appendSize\n\tif cap(buf) < newSize {\n\t\t// Grow buffer exponentially\n\t\tnewBuf := make([]byte, len(buf)*2+appendSize)\n\t\tcopy(newBuf, buf)\n\t\tbuf = newBuf\n\t}\n\treturn buf[:newSize]\n}\n\n// escapeBytesBackslash escapes []byte with backslashes (\\)\n// This escapes the contents of a string (provided as []byte) by adding backslashes before special\n// characters, and turning others into specific escape sequences, such as\n// turning newlines into \\n and null bytes into \\0.\n// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L823-L932\nfunc escapeBytesBackslash(buf, v []byte) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor _, c := range v {\n\t\tswitch c {\n\t\tcase '\\x00':\n\t\t\tbuf[pos+1] = '0'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\n':\n\t\t\tbuf[pos+1] = 'n'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\r':\n\t\t\tbuf[pos+1] = 'r'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\x1a':\n\t\t\tbuf[pos+1] = 'Z'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\'':\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\"':\n\t\t\tbuf[pos+1] = '\"'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\\\':\n\t\t\tbuf[pos+1] = '\\\\'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tdefault:\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n\n// escapeStringBackslash is similar to escapeBytesBackslash but for string.\nfunc escapeStringBackslash(buf []byte, v string) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor i := 0; i < len(v); i++ {\n\t\tc := v[i]\n\t\tswitch c {\n\t\tcase '\\x00':\n\t\t\tbuf[pos+1] = '0'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\n':\n\t\t\tbuf[pos+1] = 'n'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\r':\n\t\t\tbuf[pos+1] = 'r'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\x1a':\n\t\t\tbuf[pos+1] = 'Z'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\'':\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\"':\n\t\t\tbuf[pos+1] = '\"'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tcase '\\\\':\n\t\t\tbuf[pos+1] = '\\\\'\n\t\t\tbuf[pos] = '\\\\'\n\t\t\tpos += 2\n\t\tdefault:\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n\n// escapeBytesQuotes escapes apostrophes in []byte by doubling them up.\n// This escapes the contents of a string by doubling up any apostrophes that\n// it contains. This is used when the NO_BACKSLASH_ESCAPES SQL_MODE is in\n// effect on the server.\n// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L963-L1038\nfunc escapeBytesQuotes(buf, v []byte) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor _, c := range v {\n\t\tif c == '\\'' {\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tbuf[pos] = '\\''\n\t\t\tpos += 2\n\t\t} else {\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n\n// escapeStringQuotes is similar to escapeBytesQuotes but for string.\nfunc escapeStringQuotes(buf []byte, v string) []byte {\n\tpos := len(buf)\n\tbuf = reserveBuffer(buf, len(v)*2)\n\n\tfor i := 0; i < len(v); i++ {\n\t\tc := v[i]\n\t\tif c == '\\'' {\n\t\t\tbuf[pos+1] = '\\''\n\t\t\tbuf[pos] = '\\''\n\t\t\tpos += 2\n\t\t} else {\n\t\t\tbuf[pos] = c\n\t\t\tpos++\n\t\t}\n\t}\n\n\treturn buf[:pos]\n}\n\n/******************************************************************************\n*                               Sync utils                                    *\n******************************************************************************/\n\n// noCopy may be embedded into structs which must not be copied\n// after the first use.\n//\n// See https://github.com/golang/go/issues/8005#issuecomment-190753527\n// for details.\ntype noCopy struct{}\n\n// Lock is a no-op used by -copylocks checker from `go vet`.\nfunc (*noCopy) Lock() {}\n\n// Unlock is a no-op used by -copylocks checker from `go vet`.\n// noCopy should implement sync.Locker from Go 1.11\n// https://github.com/golang/go/commit/c2eba53e7f80df21d51285879d51ab81bcfbf6bc\n// https://github.com/golang/go/issues/26165\nfunc (*noCopy) Unlock() {}\n\n// atomicError is a wrapper for atomically accessed error values\ntype atomicError struct {\n\t_     noCopy\n\tvalue atomic.Value\n}\n\n// Set sets the error value regardless of the previous value.\n// The value must not be nil\nfunc (ae *atomicError) Set(value error) {\n\tae.value.Store(value)\n}\n\n// Value returns the current error value\nfunc (ae *atomicError) Value() error {\n\tif v := ae.value.Load(); v != nil {\n\t\t// this will panic if the value doesn't implement the error interface\n\t\treturn v.(error)\n\t}\n\treturn nil\n}\n\nfunc namedValueToValue(named []driver.NamedValue) ([]driver.Value, error) {\n\tdargs := make([]driver.Value, len(named))\n\tfor n, param := range named {\n\t\tif len(param.Name) > 0 {\n\t\t\t// TODO: support the use of Named Parameters #561\n\t\t\treturn nil, errors.New(\"mysql: driver does not support the use of Named Parameters\")\n\t\t}\n\t\tdargs[n] = param.Value\n\t}\n\treturn dargs, nil\n}\n\nfunc mapIsolationLevel(level driver.IsolationLevel) (string, error) {\n\tswitch sql.IsolationLevel(level) {\n\tcase sql.LevelRepeatableRead:\n\t\treturn \"REPEATABLE READ\", nil\n\tcase sql.LevelReadCommitted:\n\t\treturn \"READ COMMITTED\", nil\n\tcase sql.LevelReadUncommitted:\n\t\treturn \"READ UNCOMMITTED\", nil\n\tcase sql.LevelSerializable:\n\t\treturn \"SERIALIZABLE\", nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"mysql: unsupported isolation level: %v\", level)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/.codecov.yml",
    "content": "codecov:\n  require_ci_to_pass: yes\n\ncoverage:\n  precision: 2\n  round: down\n  range: \"70...100\"\n\n  status:\n    project:\n      default:\n        target: 70%\n        threshold: 2%\n    patch: off\n    changes: no\n\nparsers:\n  gcov:\n    branch_detection:\n      conditional: yes\n      loop: yes\n      method: no\n      macro: no\n\ncomment:\n  layout: \"header,diff\"\n  behavior: default\n  require_changes: no\n\nignore:\n  - internal/encoder/vm_color\n  - internal/encoder/vm_color_indent\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/.gitignore",
    "content": "cover.html\ncover.out\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/.golangci.yml",
    "content": "run:\n  skip-files:\n    - encode_optype.go\n    - \".*_test\\\\.go$\"\n\nlinters-settings:\n  govet:\n    enable-all: true\n    disable:\n      - shadow\n\nlinters:\n  enable-all: true\n  disable:\n    - dogsled\n    - dupl\n    - exhaustive\n    - exhaustivestruct\n    - errorlint\n    - forbidigo\n    - funlen\n    - gci\n    - gochecknoglobals\n    - gochecknoinits\n    - gocognit\n    - gocritic\n    - gocyclo\n    - godot\n    - godox\n    - goerr113\n    - gofumpt\n    - gomnd\n    - gosec\n    - ifshort\n    - lll\n    - makezero\n    - nakedret\n    - nestif\n    - nlreturn\n    - paralleltest\n    - testpackage\n    - thelper\n    - wrapcheck\n    - interfacer\n    - lll\n    - nakedret\n    - nestif\n    - nlreturn\n    - testpackage\n    - wsl\n    - varnamelen\n    - nilnil\n    - ireturn\n    - govet\n    - forcetypeassert\n    - cyclop\n    - containedctx\n    - revive\n\nissues:\n  exclude-rules:\n    # not needed\n    - path: /*.go\n      text: \"ST1003: should not use underscores in package names\"\n      linters:\n        - stylecheck\n    - path: /*.go\n      text: \"don't use an underscore in package name\"\n      linters:\n        - golint\n    - path: rtype.go\n      linters:\n        - golint\n        - stylecheck\n    - path: error.go\n      linters:\n        - staticcheck\n\n  # Maximum issues count per one linter. Set to 0 to disable. Default is 50.\n  max-issues-per-linter: 0\n\n  # Maximum count of issues with the same text. Set to 0 to disable. Default is 3.\n  max-same-issues: 0\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/CHANGELOG.md",
    "content": "# v0.10.2 - 2023/03/20\n\n### New features\n\n* Support DebugDOT option for debugging encoder ( #440 )\n\n### Fix bugs\n\n* Fix combination of embedding structure and omitempty option ( #442 )\n\n# v0.10.1 - 2023/03/13\n\n### Fix bugs\n\n* Fix checkptr error for array decoder ( #415 )\n* Fix added buffer size check when decoding key ( #430 )\n* Fix handling of anonymous fields other than struct ( #431 )\n* Fix to not optimize when lower conversion can't handle byte-by-byte ( #432 )\n* Fix a problem that MarshalIndent does not work when UnorderedMap is specified ( #435 )\n* Fix mapDecoder.DecodeStream() for empty objects containing whitespace ( #425 )\n* Fix an issue that could not set the correct NextField for fields in the embedded structure ( #438 )\n\n# v0.10.0 - 2022/11/29\n\n### New features\n\n* Support JSON Path ( #250 )\n\n### Fix bugs\n\n* Fix marshaler for map's key ( #409 )\n\n# v0.9.11 - 2022/08/18\n\n### Fix bugs\n\n* Fix unexpected behavior when buffer ends with backslash ( #383 )\n* Fix stream decoding of escaped character ( #387 )\n\n# v0.9.10 - 2022/07/15\n\n### Fix bugs\n\n* Fix boundary exception of type caching ( #382 )\n\n# v0.9.9 - 2022/07/15\n\n### Fix bugs\n\n* Fix encoding of directed interface with typed nil ( #377 )\n* Fix embedded primitive type encoding using alias ( #378 )\n* Fix slice/array type encoding with types implementing MarshalJSON ( #379 )\n* Fix unicode decoding when the expected buffer state is not met after reading ( #380 )\n\n# v0.9.8 - 2022/06/30\n\n### Fix bugs\n\n* Fix decoding of surrogate-pair ( #365 )\n* Fix handling of embedded primitive type ( #366 )\n* Add validation of escape sequence for decoder ( #367 )\n* Fix stream tokenizing respecting UseNumber ( #369 )\n* Fix encoding when struct pointer type that implements Marshal JSON is embedded ( #375 )\n\n### Improve performance\n\n* Improve performance of linkRecursiveCode ( #368 )\n\n# v0.9.7 - 2022/04/22\n\n### Fix bugs\n\n#### Encoder\n\n* Add filtering process for encoding on slow path ( #355 )\n* Fix encoding of interface{} with pointer type ( #363 )\n\n#### Decoder\n\n* Fix map key decoder that implements UnmarshalJSON ( #353 )\n* Fix decoding of []uint8 type ( #361 )\n\n### New features\n\n* Add DebugWith option for encoder ( #356 )\n\n# v0.9.6 - 2022/03/22\n\n### Fix bugs\n\n* Correct the handling of the minimum value of int type for decoder ( #344 )\n* Fix bugs of stream decoder's bufferSize ( #349 )\n* Add a guard to use typeptr more safely ( #351 )\n\n### Improve decoder performance\n\n* Improve escapeString's performance ( #345 )\n\n### Others\n\n* Update go version for CI ( #347 )\n\n# v0.9.5 - 2022/03/04\n\n### Fix bugs\n\n* Fix panic when decoding time.Time with context ( #328 )\n* Fix reading the next character in buffer to nul consideration ( #338 )\n* Fix incorrect handling on skipValue ( #341 )\n\n### Improve decoder performance\n\n* Improve performance when a payload contains escape sequence ( #334 )\n\n# v0.9.4 - 2022/01/21\n\n* Fix IsNilForMarshaler for string type with omitempty ( #323 )\n* Fix the case where the embedded field is at the end ( #326 )\n\n# v0.9.3 - 2022/01/14\n\n* Fix logic of removing struct field for decoder ( #322 )\n\n# v0.9.2 - 2022/01/14\n\n* Add invalid decoder to delay type error judgment at decode ( #321 )\n\n# v0.9.1 - 2022/01/11\n\n* Fix encoding of MarshalText/MarshalJSON operation with head offset ( #319 )\n\n# v0.9.0 - 2022/01/05\n\n### New feature\n\n* Supports dynamic filtering of struct fields ( #314 )\n\n### Improve encoding performance\n\n* Improve map encoding performance ( #310 )\n* Optimize encoding path for escaped string ( #311 )\n* Add encoding option for performance ( #312 )\n\n### Fix bugs\n\n* Fix panic at encoding map value on 1.18 ( #310 )\n* Fix MarshalIndent for interface type ( #317 )\n\n# v0.8.1 - 2021/12/05\n\n* Fix operation conversion from PtrHead to Head in Recursive type ( #305 )\n\n# v0.8.0 - 2021/12/02\n\n* Fix embedded field conflict behavior ( #300 )\n* Refactor compiler for encoder ( #301 #302 )\n\n# v0.7.10 - 2021/10/16\n\n* Fix conversion from pointer to uint64  ( #294 )\n\n# v0.7.9 - 2021/09/28\n\n* Fix encoding of nil value about interface type that has method ( #291 )\n\n# v0.7.8 - 2021/09/01\n\n* Fix mapassign_faststr for indirect struct type ( #283 )\n* Fix encoding of not empty interface type ( #284 )\n* Fix encoding of empty struct interface type ( #286 )\n\n# v0.7.7 - 2021/08/25\n\n* Fix invalid utf8 on stream decoder ( #279 )\n* Fix buffer length bug on string stream decoder ( #280 )\n\nThank you @orisano !!\n\n# v0.7.6 - 2021/08/13\n\n* Fix nil slice assignment ( #276 )\n* Improve error message ( #277 )\n\n# v0.7.5 - 2021/08/12\n\n* Fix encoding of embedded struct with tags ( #265 )\n* Fix encoding of embedded struct that isn't first field ( #272 )\n* Fix decoding of binary type with escaped char ( #273 )\n\n# v0.7.4 - 2021/07/06\n\n* Fix encoding of indirect layout structure ( #264 )\n\n# v0.7.3 - 2021/06/29\n\n* Fix encoding of pointer type in empty interface ( #262 )\n\n# v0.7.2 - 2021/06/26\n\n### Fix decoder\n\n* Add decoder for func type to fix decoding of nil function value ( #257 )\n* Fix stream decoding of []byte type ( #258 )\n\n### Performance\n\n* Improve decoding performance of map[string]interface{} type ( use `mapassign_faststr` ) ( #256 )\n* Improve encoding performance of empty interface type ( remove recursive calling of `vm.Run` ) ( #259 )\n\n### Benchmark\n\n* Add bytedance/sonic as benchmark target ( #254 )\n\n# v0.7.1 - 2021/06/18\n\n### Fix decoder\n\n* Fix error when unmarshal empty array ( #253 )\n\n# v0.7.0 - 2021/06/12\n\n### Support context for MarshalJSON and UnmarshalJSON ( #248 )\n\n* json.MarshalContext(context.Context, interface{}, ...json.EncodeOption) ([]byte, error)\n* json.NewEncoder(io.Writer).EncodeContext(context.Context, interface{}, ...json.EncodeOption) error\n* json.UnmarshalContext(context.Context, []byte, interface{}, ...json.DecodeOption) error\n* json.NewDecoder(io.Reader).DecodeContext(context.Context, interface{}) error\n\n```go\ntype MarshalerContext interface {\n  MarshalJSON(context.Context) ([]byte, error)\n}\n\ntype UnmarshalerContext interface {\n  UnmarshalJSON(context.Context, []byte) error\n}\n```\n\n### Add DecodeFieldPriorityFirstWin option ( #242 )\n\nIn the default behavior, go-json, like encoding/json, will reflect the result of the last evaluation when a field with the same name exists. I've added new options to allow you to change this behavior. `json.DecodeFieldPriorityFirstWin` option reflects the result of the first evaluation if a field with the same name exists. This behavior has a performance advantage as it allows the subsequent strings to be skipped if all fields have been evaluated.\n\n### Fix encoder\n\n* Fix indent number contains recursive type ( #249 )\n* Fix encoding of using empty interface as map key ( #244 )\n\n### Fix decoder\n\n* Fix decoding fields containing escaped characters ( #237 )\n\n### Refactor\n\n* Move some tests to subdirectory ( #243 )\n* Refactor package layout for decoder ( #238 )\n\n# v0.6.1 - 2021/06/02\n\n### Fix encoder\n\n* Fix value of totalLength for encoding ( #236 )\n\n# v0.6.0 - 2021/06/01\n\n### Support Colorize option for encoding (#233)\n\n```go\nb, err := json.MarshalWithOption(v, json.Colorize(json.DefaultColorScheme))\nif err != nil {\n  ...\n}\nfmt.Println(string(b)) // print colored json\n```\n\n### Refactor\n\n* Fix opcode layout - Adjust memory layout of the opcode to 128 bytes in a 64-bit environment ( #230 )\n* Refactor encode option ( #231 )\n* Refactor escape string ( #232 )\n\n# v0.5.1 - 2021/5/20\n\n### Optimization\n\n* Add type addrShift to enable bigger encoder/decoder cache ( #213 )\n\n### Fix decoder\n\n* Keep original reference of slice element ( #229 )\n\n### Refactor\n\n* Refactor Debug mode for encoding ( #226 )\n* Generate VM sources for encoding ( #227 )\n* Refactor validator for null/true/false for decoding ( #221 )\n\n# v0.5.0 - 2021/5/9\n\n### Supports using omitempty and string tags at the same time ( #216 )\n\n### Fix decoder\n\n* Fix stream decoder for unicode char ( #215 )\n* Fix decoding of slice element ( #219 )\n* Fix calculating of buffer length for stream decoder ( #220 )\n\n### Refactor\n\n* replace skipWhiteSpace goto by loop ( #212 )\n\n# v0.4.14 - 2021/5/4\n\n### Benchmark\n\n* Add valyala/fastjson to benchmark ( #193 )\n* Add benchmark task for CI ( #211 )\n\n### Fix decoder\n\n* Fix decoding of slice with unmarshal json type ( #198 )\n* Fix decoding of null value for interface type that does not implement Unmarshaler ( #205 )\n* Fix decoding of null value to []byte by json.Unmarshal ( #206 )\n* Fix decoding of backslash char at the end of string ( #207 )\n* Fix stream decoder for null/true/false value ( #208 )\n* Fix stream decoder for slow reader ( #211 )\n\n### Performance\n\n* If cap of slice is enough, reuse slice data for compatibility with encoding/json ( #200 )\n\n# v0.4.13 - 2021/4/20\n\n### Fix json.Compact and json.Indent\n\n* Support validation the input buffer for json.Compact and json.Indent ( #189 )\n* Optimize json.Compact and json.Indent ( improve memory footprint ) ( #190 )\n\n# v0.4.12 - 2021/4/15\n\n### Fix encoder\n\n* Fix unnecessary indent for empty slice type ( #181 )\n* Fix encoding of omitempty feature for the slice or interface type ( #183 )\n* Fix encoding custom types zero values with omitempty when marshaller exists ( #187 )\n\n### Fix decoder\n\n* Fix decoder for invalid top level value ( #184 )\n* Fix decoder for invalid number value ( #185 )\n\n# v0.4.11 - 2021/4/3\n\n* Improve decoder performance for interface type\n\n# v0.4.10 - 2021/4/2\n\n### Fix encoder\n\n* Fixed a bug when encoding slice and map containing recursive structures\n* Fixed a logic to determine if indirect reference\n\n# v0.4.9 - 2021/3/29\n\n### Add debug mode\n\nIf you use `json.MarshalWithOption(v, json.Debug())` and `panic` occurred in `go-json`, produces debug information to console.\n\n### Support a new feature to compatible with encoding/json\n\n- invalid UTF-8 is coerced to valid UTF-8 ( without performance down )\n\n### Fix encoder\n\n- Fixed handling of MarshalJSON of function type\n\n### Fix decoding of slice of pointer type\n\nIf there is a pointer value, go-json will use it. (This behavior is necessary to achieve the ability to prioritize pre-filled values). However, since slices are reused internally, there was a bug that referred to the previous pointer value. Therefore, it is not necessary to refer to the pointer value in advance for the slice element, so we explicitly initialize slice element by `nil`.\n\n# v0.4.8 - 2021/3/21\n\n### Reduce memory usage at compile time\n\n* go-json have used about 2GB of memory at compile time, but now it can compile with about less than 550MB.\n\n### Fix any encoder's bug\n\n* Add many test cases for encoder\n* Fix composite type ( slice/array/map )\n* Fix pointer types\n* Fix encoding of MarshalJSON or MarshalText or json.Number type\n\n### Refactor encoder\n\n* Change package layout for reducing memory usage at compile\n* Remove anonymous and only operation\n* Remove root property from encodeCompileContext and opcode\n\n### Fix CI\n\n* Add Go 1.16\n* Remove Go 1.13\n* Fix `make cover` task\n\n### Number/Delim/Token/RawMessage use the types defined in encoding/json by type alias\n\n# v0.4.7 - 2021/02/22\n\n### Fix decoder\n\n* Fix decoding of deep recursive structure\n* Fix decoding of embedded unexported pointer field\n* Fix invalid test case\n* Fix decoding of invalid value\n* Fix decoding of prefilled value\n* Fix not being able to return UnmarshalTypeError when it should be returned\n* Fix decoding of null value\n* Fix decoding of type of null string\n* Use pre allocated pointer if exists it at decoding\n\n### Reduce memory usage at compile\n\n* Integrate int/int8/int16/int32/int64 and uint/uint8/uint16/uint32/uint64 operation to reduce memory usage at compile\n\n### Remove unnecessary optype\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Masaaki Goshima\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": "vendor/github.com/goccy/go-json/Makefile",
    "content": "PKG := github.com/goccy/go-json\n\nBIN_DIR := $(CURDIR)/bin\nPKGS := $(shell go list ./... | grep -v internal/cmd|grep -v test)\nCOVER_PKGS := $(foreach pkg,$(PKGS),$(subst $(PKG),.,$(pkg)))\n\nCOMMA := ,\nEMPTY :=\nSPACE := $(EMPTY) $(EMPTY)\nCOVERPKG_OPT := $(subst $(SPACE),$(COMMA),$(COVER_PKGS))\n\n$(BIN_DIR):\n\t@mkdir -p $(BIN_DIR)\n\n.PHONY: cover\ncover:\n\tgo test -coverpkg=$(COVERPKG_OPT) -coverprofile=cover.out ./...\n\n.PHONY: cover-html\ncover-html: cover\n\tgo tool cover -html=cover.out\n\n.PHONY: lint\nlint: golangci-lint\n\t$(BIN_DIR)/golangci-lint run\n\ngolangci-lint: | $(BIN_DIR)\n\t@{ \\\n\t\tset -e; \\\n\t\tGOLANGCI_LINT_TMP_DIR=$$(mktemp -d); \\\n\t\tcd $$GOLANGCI_LINT_TMP_DIR; \\\n\t\tgo mod init tmp; \\\n\t\tGOBIN=$(BIN_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.48.0; \\\n\t\trm -rf $$GOLANGCI_LINT_TMP_DIR; \\\n\t}\n\n.PHONY: generate\ngenerate:\n\tgo generate ./internal/...\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/README.md",
    "content": "# go-json\n\n![Go](https://github.com/goccy/go-json/workflows/Go/badge.svg)\n[![GoDoc](https://godoc.org/github.com/goccy/go-json?status.svg)](https://pkg.go.dev/github.com/goccy/go-json?tab=doc)\n[![codecov](https://codecov.io/gh/goccy/go-json/branch/master/graph/badge.svg)](https://codecov.io/gh/goccy/go-json)\n\nFast JSON encoder/decoder compatible with encoding/json for Go\n\n<img width=\"400px\" src=\"https://user-images.githubusercontent.com/209884/92572337-42b42900-f2bf-11ea-973a-c74a359553a5.png\"></img>\n\n# Roadmap\n\n```\n* version ( expected release date )\n\n* v0.9.0\n |\n | while maintaining compatibility with encoding/json, we will add convenient APIs\n |\n v\n* v1.0.0\n```\n\nWe are accepting requests for features that will be implemented between v0.9.0 and v.1.0.0.\nIf you have the API you need, please submit your issue [here](https://github.com/goccy/go-json/issues).\n\n# Features\n\n- Drop-in replacement of `encoding/json`\n- Fast ( See [Benchmark section](https://github.com/goccy/go-json#benchmarks) )\n- Flexible customization with options\n- Coloring the encoded string\n- Can propagate context.Context to `MarshalJSON` or `UnmarshalJSON`\n- Can dynamically filter the fields of the structure type-safely\n\n# Installation\n\n```\ngo get github.com/goccy/go-json\n```\n\n# How to use\n\nReplace import statement from `encoding/json` to `github.com/goccy/go-json`\n\n```\n-import \"encoding/json\"\n+import \"github.com/goccy/go-json\"\n```\n\n# JSON library comparison\n\n|  name  |  encoder | decoder | compatible with `encoding/json` |\n| :----: | :------: | :-----: | :-----------------------------: |\n| encoding/json |  yes | yes | N/A |\n| [json-iterator/go](https://github.com/json-iterator/go) | yes | yes | partial |\n| [easyjson](https://github.com/mailru/easyjson) | yes | yes |  no |\n| [gojay](https://github.com/francoispqt/gojay) | yes | yes |  no |\n| [segmentio/encoding/json](https://github.com/segmentio/encoding/tree/master/json) | yes | yes | partial |\n| [jettison](https://github.com/wI2L/jettison) | yes | no | no |\n| [simdjson-go](https://github.com/minio/simdjson-go) | no | yes | no |\n| goccy/go-json | yes | yes | yes |\n\n- `json-iterator/go` isn't compatible with `encoding/json` in many ways (e.g. https://github.com/json-iterator/go/issues/229 ), but it hasn't been supported for a long time.\n- `segmentio/encoding/json` is well supported for encoders, but some are not supported for decoder APIs such as `Token` ( streaming decode )\n\n## Other libraries\n\n- [jingo](https://github.com/bet365/jingo)\n\nI tried the benchmark but it didn't work.\nAlso, it seems to panic when it receives an unexpected value because there is no error handling...\n\n- [ffjson](https://github.com/pquerna/ffjson)\n\nBenchmarking gave very slow results.\nIt seems that it is assumed that the user will use the buffer pool properly.\nAlso, development seems to have already stopped\n\n# Benchmarks\n\n```\n$ cd benchmarks\n$ go test -bench .\n```\n\n## Encode\n\n<img width=\"700px\" src=\"https://user-images.githubusercontent.com/209884/107126758-0845cb00-68f5-11eb-8db7-086fcf9bcfaa.png\"></img>\n<img width=\"700px\" src=\"https://user-images.githubusercontent.com/209884/107126757-07ad3480-68f5-11eb-87aa-858cc5eacfcb.png\"></img>\n\n## Decode\n\n<img width=\"700\" alt=\"\" src=\"https://user-images.githubusercontent.com/209884/107979944-bd1d6d80-7002-11eb-944b-9d17b6674e3f.png\">\n<img width=\"700\" alt=\"\" src=\"https://user-images.githubusercontent.com/209884/107979931-b989e680-7002-11eb-87a0-66fc22d90dd4.png\">\n<img width=\"700\" alt=\"\" src=\"https://user-images.githubusercontent.com/209884/107979940-bc84d700-7002-11eb-9647-869bbc25c9d9.png\">\n\n\n# Fuzzing\n\n[go-json-fuzz](https://github.com/goccy/go-json-fuzz) is the repository for fuzzing tests.\nIf you run the test in this repository and find a bug, please commit to corpus to go-json-fuzz and report the issue to [go-json](https://github.com/goccy/go-json/issues).\n\n# How it works\n\n`go-json` is very fast in both encoding and decoding compared to other libraries.\nIt's easier to implement by using automatic code generation for performance or by using a dedicated interface, but `go-json` dares to stick to compatibility with `encoding/json` and is the simple interface. Despite this, we are developing with the aim of being the fastest library.\n\nHere, we explain the various speed-up techniques implemented by `go-json`.\n\n## Basic technique\n\nThe techniques listed here are the ones used by most of the libraries listed above.\n\n### Buffer reuse\n\nSince the only value required for the result of `json.Marshal(interface{}) ([]byte, error)` is `[]byte`, the only value that must be allocated during encoding is the return value `[]byte` .\n\nAlso, as the number of allocations increases, the performance will be affected, so the number of allocations should be kept as low as possible when creating `[]byte`.\n\nTherefore, there is a technique to reduce the number of times a new buffer must be allocated by reusing the buffer used for the previous encoding by using `sync.Pool`.\n\nFinally, you allocate a buffer that is as long as the resulting buffer and copy the contents into it, you only need to allocate the buffer once in theory.\n\n```go\ntype buffer struct {\n    data []byte\n}\n\nvar bufPool = sync.Pool{\n    New: func() interface{} {\n        return &buffer{data: make([]byte, 0, 1024)}\n    },\n}\n\nbuf := bufPool.Get().(*buffer)\ndata := encode(buf.data) // reuse buf.data\n\nnewBuf := make([]byte, len(data))\ncopy(newBuf, buf)\n\nbuf.data = data\nbufPool.Put(buf)\n```\n\n### Elimination of reflection\n\nAs you know, the reflection operation is very slow.\n\nTherefore, using the fact that the address position where the type information is stored is fixed for each binary ( we call this `typeptr` ),\nwe can use the address in the type information to call a pre-built optimized process.\n\nFor example, you can get the address to the type information from `interface{}` as follows and you can use that information to call a process that does not have reflection.\n\nTo process without reflection, pass a pointer (`unsafe.Pointer`) to the value is stored.\n\n```go\n\ntype emptyInterface struct {\n    typ unsafe.Pointer\n    ptr unsafe.Pointer\n}\n\nvar typeToEncoder = map[uintptr]func(unsafe.Pointer)([]byte, error){}\n\nfunc Marshal(v interface{}) ([]byte, error) {\n    iface := (*emptyInterface)(unsafe.Pointer(&v)\n    typeptr := uintptr(iface.typ)\n    if enc, exists := typeToEncoder[typeptr]; exists {\n        return enc(iface.ptr)\n    }\n    ...\n}\n```\n\n※ In reality, `typeToEncoder` can be referenced by multiple goroutines, so exclusive control is required.\n\n## Unique speed-up technique\n\n## Encoder\n\n### Do not escape arguments of `Marshal`\n\n`json.Marshal` and `json.Unmarshal` receive `interface{}` value and they perform type determination dynamically to process.\nIn normal case, you need to use the `reflect` library to determine the type dynamically, but since `reflect.Type` is defined as `interface`, when you call the method of `reflect.Type`, The reflect's argument is escaped.\n\nTherefore, the arguments for `Marshal` and `Unmarshal` are always escaped to the heap.\nHowever, `go-json` can use the feature of `reflect.Type` while avoiding escaping.\n\n`reflect.Type` is defined as `interface`, but in reality `reflect.Type` is implemented only by the structure `rtype` defined in the `reflect` package.\nFor this reason, to date `reflect.Type` is the same as `*reflect.rtype`.\n\nTherefore, by directly handling `*reflect.rtype`, which is an implementation of `reflect.Type`, it is possible to avoid escaping because it changes from `interface` to using `struct`.\n\nThe technique for working with `*reflect.rtype` directly from `go-json` is implemented at [rtype.go](https://github.com/goccy/go-json/blob/master/internal/runtime/rtype.go)\n\nAlso, the same technique is cut out as a library ( https://github.com/goccy/go-reflect )\n\nInitially this feature was the default behavior of `go-json`.\nBut after careful testing, I found that I passed a large value to `json.Marshal()` and if the argument could not be assigned to the stack, it could not be properly escaped to the heap (a bug in the Go compiler).\n\nTherefore, this feature will be provided as an **optional** until this issue is resolved.\n\nTo use it, add `NoEscape` like `MarshalNoEscape()`\n\n### Encoding using opcode sequence\n\nI explained that you can use `typeptr` to call a pre-built process from type information.\n\nIn other libraries, this dedicated process is processed by making it an function calling like anonymous function, but function calls are inherently slow processes and should be avoided as much as possible.\n\nTherefore, `go-json` adopted the Instruction-based execution processing system, which is also used to implement virtual machines for programming language.\n\nIf it is the first type to encode, create the opcode ( instruction ) sequence required for encoding.\nFrom the second time onward, use `typeptr` to get the cached pre-built opcode sequence and encode it based on it. An example of the opcode sequence is shown below.\n\n```go\njson.Marshal(struct{\n    X int `json:\"x\"`\n    Y string `json:\"y\"`\n}{X: 1, Y: \"hello\"})\n```\n\nWhen encoding a structure like the one above, create a sequence of opcodes like this:\n\n```\n- opStructFieldHead ( `{` )\n- opStructFieldInt ( `\"x\": 1,` )\n- opStructFieldString ( `\"y\": \"hello\"` )\n- opStructEnd ( `}` )\n- opEnd\n```\n\n※ When processing each operation, write the letters on the right.\n\nIn addition, each opcode is managed by the following structure ( \nPseudo code ).\n\n```go\ntype opType int\nconst (\n    opStructFieldHead opType = iota\n    opStructFieldInt\n    opStructFieldStirng\n    opStructEnd\n    opEnd\n)\ntype opcode struct {\n    op opType\n    key []byte\n    next *opcode\n}\n```\n\nThe process of encoding using the opcode sequence is roughly implemented as follows.\n\n```go\nfunc encode(code *opcode, b []byte, p unsafe.Pointer) ([]byte, error) {\n    for {\n        switch code.op {\n        case opStructFieldHead:\n            b = append(b, '{')\n            code = code.next\n        case opStructFieldInt:\n            b = append(b, code.key...)\n            b = appendInt((*int)(unsafe.Pointer(uintptr(p)+code.offset)))\n            code = code.next\n        case opStructFieldString:\n            b = append(b, code.key...)\n            b = appendString((*string)(unsafe.Pointer(uintptr(p)+code.offset)))\n            code = code.next\n        case opStructEnd:\n            b = append(b, '}')\n            code = code.next\n        case opEnd:\n            goto END\n        }\n    }\nEND:\n    return b, nil\n}\n```\n\nIn this way, the huge `switch-case` is used to encode by manipulating the linked list opcodes to avoid unnecessary function calls.\n\n### Opcode sequence optimization\n\nOne of the advantages of encoding using the opcode sequence is the ease of optimization.\nThe opcode sequence mentioned above is actually converted into the following optimized operations and used.\n\n```\n- opStructFieldHeadInt ( `{\"x\": 1,` )\n- opStructEndString ( `\"y\": \"hello\"}` )\n- opEnd\n```\n\nIt has been reduced from 5 opcodes to 3 opcodes !\nReducing the number of opcodees means reducing the number of branches with `switch-case`.\nIn other words, the closer the number of operations is to 1, the faster the processing can be performed.\n\nIn `go-json`, optimization to reduce the number of opcodes itself like the above and it speeds up by preparing opcodes with optimized paths.\n\n### Change recursive call from CALL to JMP\n\nRecursive processing is required during encoding if the type is defined recursively as follows:\n\n```go\ntype T struct {\n    X int\n    U *U\n}\n\ntype U struct {\n    T *T\n}\n\nb, err := json.Marshal(&T{\n    X: 1,\n    U: &U{\n        T: &T{\n            X: 2,\n        },\n    },\n})\nfmt.Println(string(b)) // {\"X\":1,\"U\":{\"T\":{\"X\":2,\"U\":null}}}\n```\n\nIn `go-json`, recursive processing is processed by the operation type of ` opStructFieldRecursive`.\n\nIn this operation, after acquiring the opcode sequence used for recursive processing, the function is **not** called recursively as it is, but the necessary values ​​are saved by itself and implemented by moving to the next operation.\n\nThe technique of implementing recursive processing with the `JMP` operation while avoiding the `CALL` operation is a famous technique for implementing a high-speed virtual machine.\n\nFor more details, please refer to [the article](https://engineering.mercari.com/blog/entry/1599563768-081104c850) ( but Japanese only ).\n\n### Dispatch by typeptr from map to slice\n\nWhen retrieving the data cached from the type information by `typeptr`, we usually use map.\nMap requires exclusive control, so use `sync.Map` for a naive implementation.\n\nHowever, this is slow, so it's a good idea to use the `atomic` package for exclusive control as implemented by `segmentio/encoding/json` ( https://github.com/segmentio/encoding/blob/master/json/codec.go#L41-L55 ).\n\nThis implementation slows down the set instead of speeding up the get, but it works well because of the nature of the library, it encodes much more for the same type.\n\nHowever, as a result of profiling, I noticed that `runtime.mapaccess2` accounts for a significant percentage of the execution time. So I thought if I could change the lookup from map to slice.\n\nThere is an API named `typelinks` defined in the `runtime` package that the `reflect` package uses internally.\nThis allows you to get all the type information defined in the binary at runtime.\n\nThe fact that all type information can be acquired means that by constructing slices in advance with the acquired total number of type information, it is possible to look up with the value of `typeptr` without worrying about out-of-range access.\n\nHowever, if there is too much type information, it will use a lot of memory, so by default we will only use this optimization if the slice size fits within **2Mib** .\n\nIf this approach is not available, it will fall back to the `atomic` based process described above.\n\nIf you want to know more, please refer to the implementation [here](https://github.com/goccy/go-json/blob/master/internal/runtime/type.go#L36-L100)\n\n## Decoder\n\n### Dispatch by typeptr from map to slice\n\nLike the encoder, the decoder also uses typeptr to call the dedicated process.\n\n### Faster termination character inspection using NUL character\n\nIn order to decode, you have to traverse the input buffer character by position.\nAt that time, if you check whether the buffer has reached the end, it will be very slow.\n\n`buf` : `[]byte` type variable. holds the string passed to the decoder\n`cursor` : `int64` type variable. holds the current read position\n\n```go\nbuflen := len(buf)\nfor ; cursor < buflen; cursor++ { // compare cursor and buflen at all times, it is so slow.\n    switch buf[cursor] {\n    case ' ', '\\n', '\\r', '\\t':\n    }\n}\n```\n\nTherefore, by adding the `NUL` (`\\000`) character to the end of the read buffer as shown below, it is possible to check the termination character at the same time as other characters.\n\n```go\nfor {\n    switch buf[cursor] {\n    case ' ', '\\n', '\\r', '\\t':\n    case '\\000':\n        return nil\n    }\n    cursor++\n}\n```\n\n### Use Boundary Check Elimination\n\nDue to the `NUL` character optimization, the Go compiler does a boundary check every time, even though `buf[cursor]` does not cause out-of-range access.\n\nTherefore, `go-json` eliminates boundary check by fetching characters for hotspot by pointer operation. For example, the following code.\n\n```go\nfunc char(ptr unsafe.Pointer, offset int64) byte {\n\treturn *(*byte)(unsafe.Pointer(uintptr(ptr) + uintptr(offset)))\n}\n\np := (*sliceHeader)(&unsafe.Pointer(buf)).data\nfor {\n    switch char(p, cursor) {\n    case ' ', '\\n', '\\r', '\\t':\n    case '\\000':\n        return nil\n    }\n    cursor++\n}\n```\n\n### Checking the existence of fields of struct using Bitmaps\n\nI found by the profiling result, in the struct decode, lookup process for field was taking a long time.\n\nFor example, consider decoding a string like `{\"a\":1,\"b\":2,\"c\":3}` into the following structure:\n\n```go\ntype T struct {\n    A int `json:\"a\"`\n    B int `json:\"b\"`\n    C int `json:\"c\"`\n}\n```\n\nAt this time, it was found that it takes a lot of time to acquire the decoding process corresponding to the field from the field name as shown below during the decoding process.\n\n```go\nfieldName := decodeKey(buf, cursor) // \"a\" or \"b\" or \"c\"\ndecoder, exists := fieldToDecoderMap[fieldName] // so slow\nif exists {\n    decoder(buf, cursor)\n} else {\n    skipValue(buf, cursor)\n}\n```\n\nTo improve this process, `json-iterator/go` is optimized so that it can be branched by switch-case when the number of fields in the structure is 10 or less (switch-case is faster than map). However, there is a risk of hash collision because the value hashed by the FNV algorithm is used for conditional branching. Also, `gojay` processes this part at high speed by letting the library user yourself write `switch-case`.\n\n\n`go-json` considers and implements a new approach that is different from these. I call this **bitmap field optimization**.\n\nThe range of values ​​per character can be represented by `[256]byte`. Also, if the number of fields in the structure is 8 or less, `int8` type can represent the state of each field.\nIn other words, it has the following structure.\n\n- Base ( 8bit ): `00000000`\n- Key \"a\": `00000001` ( assign key \"a\" to the first bit )\n- Key \"b\": `00000010` ( assign key \"b\" to the second bit )\n- Key \"c\": `00000100` ( assign key \"c\" to the third bit )\n\nBitmap structure is the following\n\n```\n        | key index(0) |\n------------------------\n 0      | 00000000     |\n 1      | 00000000     |\n~~      |              |\n97 (a)  | 00000001     |\n98 (b)  | 00000010     |\n99 (c)  | 00000100     |\n~~      |              |\n255     | 00000000     |\n```\n\nYou can think of this as a Bitmap with a height of `256` and a width of the maximum string length in the field name.\nIn other words, it can be represented by the following type .\n\n```go\n[maxFieldKeyLength][256]int8\n```\n\nWhen decoding a field character, check whether the corresponding character exists by referring to the pre-built bitmap like the following.\n\n```go\nvar curBit int8 = math.MaxInt8 // 11111111\n\nc := char(buf, cursor)\nbit := bitmap[keyIdx][c]\ncurBit &= bit\nif curBit == 0 {\n    // not found field\n}\n```\n\nIf `curBit` is not `0` until the end of the field string, then the string is\nYou may have hit one of the fields.\nBut the possibility is that if the decoded string is shorter than the field string, you will get a false hit.\n\n- input: `{\"a\":1}`\n```go\ntype T struct {\n    X int `json:\"abc\"`\n}\n```\n※ Since `a` is shorter than `abc`, it can decode to the end of the field character without `curBit` being 0.\n\nRest assured. In this case, it doesn't matter because you can tell if you hit by comparing the string length of `a` with the string length of `abc`.\n\nFinally, calculate the position of the bit where `1` is set and get the corresponding value, and you're done.\n\nUsing this technique, field lookups are possible with only bitwise operations and access to slices.\n\n`go-json` uses a similar technique for fields with 9 or more and 16 or less fields. At this time, Bitmap is constructed as `[maxKeyLen][256]int16` type.\n\nCurrently, this optimization is not performed when the maximum length of the field name is long (specifically, 64 bytes or more) in addition to the limitation of the number of fields from the viewpoint of saving memory usage.\n\n### Others\n\nI have done a lot of other optimizations. I will find time to write about them. If you have any questions about what's written here or other optimizations, please visit the `#go-json` channel on `gophers.slack.com` .\n\n## Reference\n\nRegarding the story of go-json, there are the following articles in Japanese only.\n\n- https://speakerdeck.com/goccy/zui-su-falsejsonraiburariwoqiu-mete\n- https://engineering.mercari.com/blog/entry/1599563768-081104c850/\n\n# Looking for Sponsors\n\nI'm looking for sponsors this library. This library is being developed as a personal project in my spare time. If you want a quick response or problem resolution when using this library in your project, please register as a [sponsor](https://github.com/sponsors/goccy). I will cooperate as much as possible. Of course, this library is developed as an MIT license, so you can use it freely for free.\n\n# License\n\nMIT\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/color.go",
    "content": "package json\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\ntype (\n\tColorFormat = encoder.ColorFormat\n\tColorScheme = encoder.ColorScheme\n)\n\nconst escape = \"\\x1b\"\n\ntype colorAttr int\n\n//nolint:deadcode,varcheck\nconst (\n\tfgBlackColor colorAttr = iota + 30\n\tfgRedColor\n\tfgGreenColor\n\tfgYellowColor\n\tfgBlueColor\n\tfgMagentaColor\n\tfgCyanColor\n\tfgWhiteColor\n)\n\n//nolint:deadcode,varcheck\nconst (\n\tfgHiBlackColor colorAttr = iota + 90\n\tfgHiRedColor\n\tfgHiGreenColor\n\tfgHiYellowColor\n\tfgHiBlueColor\n\tfgHiMagentaColor\n\tfgHiCyanColor\n\tfgHiWhiteColor\n)\n\nfunc createColorFormat(attr colorAttr) ColorFormat {\n\treturn ColorFormat{\n\t\tHeader: wrapColor(attr),\n\t\tFooter: resetColor(),\n\t}\n}\n\nfunc wrapColor(attr colorAttr) string {\n\treturn fmt.Sprintf(\"%s[%dm\", escape, attr)\n}\n\nfunc resetColor() string {\n\treturn wrapColor(colorAttr(0))\n}\n\nvar (\n\tDefaultColorScheme = &ColorScheme{\n\t\tInt:       createColorFormat(fgHiMagentaColor),\n\t\tUint:      createColorFormat(fgHiMagentaColor),\n\t\tFloat:     createColorFormat(fgHiMagentaColor),\n\t\tBool:      createColorFormat(fgHiYellowColor),\n\t\tString:    createColorFormat(fgHiGreenColor),\n\t\tBinary:    createColorFormat(fgHiRedColor),\n\t\tObjectKey: createColorFormat(fgHiCyanColor),\n\t\tNull:      createColorFormat(fgBlueColor),\n\t}\n)\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/decode.go",
    "content": "package json\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/decoder\"\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype Decoder struct {\n\ts *decoder.Stream\n}\n\nconst (\n\tnul = '\\000'\n)\n\ntype emptyInterface struct {\n\ttyp *runtime.Type\n\tptr unsafe.Pointer\n}\n\nfunc unmarshal(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {\n\tsrc := make([]byte, len(data)+1) // append nul byte to the end\n\tcopy(src, data)\n\n\theader := (*emptyInterface)(unsafe.Pointer(&v))\n\n\tif err := validateType(header.typ, uintptr(header.ptr)); err != nil {\n\t\treturn err\n\t}\n\tdec, err := decoder.CompileToGetDecoder(header.typ)\n\tif err != nil {\n\t\treturn err\n\t}\n\tctx := decoder.TakeRuntimeContext()\n\tctx.Buf = src\n\tctx.Option.Flags = 0\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(ctx.Option)\n\t}\n\tcursor, err := dec.Decode(ctx, 0, 0, header.ptr)\n\tif err != nil {\n\t\tdecoder.ReleaseRuntimeContext(ctx)\n\t\treturn err\n\t}\n\tdecoder.ReleaseRuntimeContext(ctx)\n\treturn validateEndBuf(src, cursor)\n}\n\nfunc unmarshalContext(ctx context.Context, data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {\n\tsrc := make([]byte, len(data)+1) // append nul byte to the end\n\tcopy(src, data)\n\n\theader := (*emptyInterface)(unsafe.Pointer(&v))\n\n\tif err := validateType(header.typ, uintptr(header.ptr)); err != nil {\n\t\treturn err\n\t}\n\tdec, err := decoder.CompileToGetDecoder(header.typ)\n\tif err != nil {\n\t\treturn err\n\t}\n\trctx := decoder.TakeRuntimeContext()\n\trctx.Buf = src\n\trctx.Option.Flags = 0\n\trctx.Option.Flags |= decoder.ContextOption\n\trctx.Option.Context = ctx\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(rctx.Option)\n\t}\n\tcursor, err := dec.Decode(rctx, 0, 0, header.ptr)\n\tif err != nil {\n\t\tdecoder.ReleaseRuntimeContext(rctx)\n\t\treturn err\n\t}\n\tdecoder.ReleaseRuntimeContext(rctx)\n\treturn validateEndBuf(src, cursor)\n}\n\nvar (\n\tpathDecoder = decoder.NewPathDecoder()\n)\n\nfunc extractFromPath(path *Path, data []byte, optFuncs ...DecodeOptionFunc) ([][]byte, error) {\n\tif path.path.RootSelectorOnly {\n\t\treturn [][]byte{data}, nil\n\t}\n\tsrc := make([]byte, len(data)+1) // append nul byte to the end\n\tcopy(src, data)\n\n\tctx := decoder.TakeRuntimeContext()\n\tctx.Buf = src\n\tctx.Option.Flags = 0\n\tctx.Option.Flags |= decoder.PathOption\n\tctx.Option.Path = path.path\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(ctx.Option)\n\t}\n\tpaths, cursor, err := pathDecoder.DecodePath(ctx, 0, 0)\n\tif err != nil {\n\t\tdecoder.ReleaseRuntimeContext(ctx)\n\t\treturn nil, err\n\t}\n\tdecoder.ReleaseRuntimeContext(ctx)\n\tif err := validateEndBuf(src, cursor); err != nil {\n\t\treturn nil, err\n\t}\n\treturn paths, nil\n}\n\nfunc unmarshalNoEscape(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {\n\tsrc := make([]byte, len(data)+1) // append nul byte to the end\n\tcopy(src, data)\n\n\theader := (*emptyInterface)(unsafe.Pointer(&v))\n\n\tif err := validateType(header.typ, uintptr(header.ptr)); err != nil {\n\t\treturn err\n\t}\n\tdec, err := decoder.CompileToGetDecoder(header.typ)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tctx := decoder.TakeRuntimeContext()\n\tctx.Buf = src\n\tctx.Option.Flags = 0\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(ctx.Option)\n\t}\n\tcursor, err := dec.Decode(ctx, 0, 0, noescape(header.ptr))\n\tif err != nil {\n\t\tdecoder.ReleaseRuntimeContext(ctx)\n\t\treturn err\n\t}\n\tdecoder.ReleaseRuntimeContext(ctx)\n\treturn validateEndBuf(src, cursor)\n}\n\nfunc validateEndBuf(src []byte, cursor int64) error {\n\tfor {\n\t\tswitch src[cursor] {\n\t\tcase ' ', '\\t', '\\n', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase nul:\n\t\t\treturn nil\n\t\t}\n\t\treturn errors.ErrSyntax(\n\t\t\tfmt.Sprintf(\"invalid character '%c' after top-level value\", src[cursor]),\n\t\t\tcursor+1,\n\t\t)\n\t}\n}\n\n//nolint:staticcheck\n//go:nosplit\nfunc noescape(p unsafe.Pointer) unsafe.Pointer {\n\tx := uintptr(p)\n\treturn unsafe.Pointer(x ^ 0)\n}\n\nfunc validateType(typ *runtime.Type, p uintptr) error {\n\tif typ == nil || typ.Kind() != reflect.Ptr || p == 0 {\n\t\treturn &InvalidUnmarshalError{Type: runtime.RType2Type(typ)}\n\t}\n\treturn nil\n}\n\n// NewDecoder returns a new decoder that reads from r.\n//\n// The decoder introduces its own buffering and may\n// read data from r beyond the JSON values requested.\nfunc NewDecoder(r io.Reader) *Decoder {\n\ts := decoder.NewStream(r)\n\treturn &Decoder{\n\t\ts: s,\n\t}\n}\n\n// Buffered returns a reader of the data remaining in the Decoder's\n// buffer. The reader is valid until the next call to Decode.\nfunc (d *Decoder) Buffered() io.Reader {\n\treturn d.s.Buffered()\n}\n\n// Decode reads the next JSON-encoded value from its\n// input and stores it in the value pointed to by v.\n//\n// See the documentation for Unmarshal for details about\n// the conversion of JSON into a Go value.\nfunc (d *Decoder) Decode(v interface{}) error {\n\treturn d.DecodeWithOption(v)\n}\n\n// DecodeContext reads the next JSON-encoded value from its\n// input and stores it in the value pointed to by v with context.Context.\nfunc (d *Decoder) DecodeContext(ctx context.Context, v interface{}) error {\n\td.s.Option.Flags |= decoder.ContextOption\n\td.s.Option.Context = ctx\n\treturn d.DecodeWithOption(v)\n}\n\nfunc (d *Decoder) DecodeWithOption(v interface{}, optFuncs ...DecodeOptionFunc) error {\n\theader := (*emptyInterface)(unsafe.Pointer(&v))\n\ttyp := header.typ\n\tptr := uintptr(header.ptr)\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\t// noescape trick for header.typ ( reflect.*rtype )\n\tcopiedType := *(**runtime.Type)(unsafe.Pointer(&typeptr))\n\n\tif err := validateType(copiedType, ptr); err != nil {\n\t\treturn err\n\t}\n\n\tdec, err := decoder.CompileToGetDecoder(typ)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := d.s.PrepareForDecode(); err != nil {\n\t\treturn err\n\t}\n\ts := d.s\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(s.Option)\n\t}\n\tif err := dec.DecodeStream(s, 0, header.ptr); err != nil {\n\t\treturn err\n\t}\n\ts.Reset()\n\treturn nil\n}\n\nfunc (d *Decoder) More() bool {\n\treturn d.s.More()\n}\n\nfunc (d *Decoder) Token() (Token, error) {\n\treturn d.s.Token()\n}\n\n// DisallowUnknownFields causes the Decoder to return an error when the destination\n// is a struct and the input contains object keys which do not match any\n// non-ignored, exported fields in the destination.\nfunc (d *Decoder) DisallowUnknownFields() {\n\td.s.DisallowUnknownFields = true\n}\n\nfunc (d *Decoder) InputOffset() int64 {\n\treturn d.s.TotalOffset()\n}\n\n// UseNumber causes the Decoder to unmarshal a number into an interface{} as a\n// Number instead of as a float64.\nfunc (d *Decoder) UseNumber() {\n\td.s.UseNumber = true\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/docker-compose.yml",
    "content": "version: '2'\nservices:\n  go-json:\n    image: golang:1.18\n    volumes:\n      - '.:/go/src/go-json'\n    deploy:\n      resources:\n        limits:\n          memory: 620M\n    working_dir: /go/src/go-json\n    command: |\n      sh -c \"go test -c . && ls go-json.test\"\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/encode.go",
    "content": "package json\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/encoder/vm\"\n\t\"github.com/goccy/go-json/internal/encoder/vm_color\"\n\t\"github.com/goccy/go-json/internal/encoder/vm_color_indent\"\n\t\"github.com/goccy/go-json/internal/encoder/vm_indent\"\n)\n\n// An Encoder writes JSON values to an output stream.\ntype Encoder struct {\n\tw                 io.Writer\n\tenabledIndent     bool\n\tenabledHTMLEscape bool\n\tprefix            string\n\tindentStr         string\n}\n\n// NewEncoder returns a new encoder that writes to w.\nfunc NewEncoder(w io.Writer) *Encoder {\n\treturn &Encoder{w: w, enabledHTMLEscape: true}\n}\n\n// Encode writes the JSON encoding of v to the stream, followed by a newline character.\n//\n// See the documentation for Marshal for details about the conversion of Go values to JSON.\nfunc (e *Encoder) Encode(v interface{}) error {\n\treturn e.EncodeWithOption(v)\n}\n\n// EncodeWithOption call Encode with EncodeOption.\nfunc (e *Encoder) EncodeWithOption(v interface{}, optFuncs ...EncodeOptionFunc) error {\n\tctx := encoder.TakeRuntimeContext()\n\tctx.Option.Flag = 0\n\n\terr := e.encodeWithOption(ctx, v, optFuncs...)\n\n\tencoder.ReleaseRuntimeContext(ctx)\n\treturn err\n}\n\n// EncodeContext call Encode with context.Context and EncodeOption.\nfunc (e *Encoder) EncodeContext(ctx context.Context, v interface{}, optFuncs ...EncodeOptionFunc) error {\n\trctx := encoder.TakeRuntimeContext()\n\trctx.Option.Flag = 0\n\trctx.Option.Flag |= encoder.ContextOption\n\trctx.Option.Context = ctx\n\n\terr := e.encodeWithOption(rctx, v, optFuncs...)\n\n\tencoder.ReleaseRuntimeContext(rctx)\n\treturn err\n}\n\nfunc (e *Encoder) encodeWithOption(ctx *encoder.RuntimeContext, v interface{}, optFuncs ...EncodeOptionFunc) error {\n\tif e.enabledHTMLEscape {\n\t\tctx.Option.Flag |= encoder.HTMLEscapeOption\n\t}\n\tctx.Option.Flag |= encoder.NormalizeUTF8Option\n\tctx.Option.DebugOut = os.Stdout\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(ctx.Option)\n\t}\n\tvar (\n\t\tbuf []byte\n\t\terr error\n\t)\n\tif e.enabledIndent {\n\t\tbuf, err = encodeIndent(ctx, v, e.prefix, e.indentStr)\n\t} else {\n\t\tbuf, err = encode(ctx, v)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tif e.enabledIndent {\n\t\tbuf = buf[:len(buf)-2]\n\t} else {\n\t\tbuf = buf[:len(buf)-1]\n\t}\n\tbuf = append(buf, '\\n')\n\tif _, err := e.w.Write(buf); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// SetEscapeHTML specifies whether problematic HTML characters should be escaped inside JSON quoted strings.\n// The default behavior is to escape &, <, and > to \\u0026, \\u003c, and \\u003e to avoid certain safety problems that can arise when embedding JSON in HTML.\n//\n// In non-HTML settings where the escaping interferes with the readability of the output, SetEscapeHTML(false) disables this behavior.\nfunc (e *Encoder) SetEscapeHTML(on bool) {\n\te.enabledHTMLEscape = on\n}\n\n// SetIndent instructs the encoder to format each subsequent encoded value as if indented by the package-level function Indent(dst, src, prefix, indent).\n// Calling SetIndent(\"\", \"\") disables indentation.\nfunc (e *Encoder) SetIndent(prefix, indent string) {\n\tif prefix == \"\" && indent == \"\" {\n\t\te.enabledIndent = false\n\t\treturn\n\t}\n\te.prefix = prefix\n\te.indentStr = indent\n\te.enabledIndent = true\n}\n\nfunc marshalContext(ctx context.Context, v interface{}, optFuncs ...EncodeOptionFunc) ([]byte, error) {\n\trctx := encoder.TakeRuntimeContext()\n\trctx.Option.Flag = 0\n\trctx.Option.Flag = encoder.HTMLEscapeOption | encoder.NormalizeUTF8Option | encoder.ContextOption\n\trctx.Option.Context = ctx\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(rctx.Option)\n\t}\n\n\tbuf, err := encode(rctx, v)\n\tif err != nil {\n\t\tencoder.ReleaseRuntimeContext(rctx)\n\t\treturn nil, err\n\t}\n\n\t// this line exists to escape call of `runtime.makeslicecopy` .\n\t// if use `make([]byte, len(buf)-1)` and `copy(copied, buf)`,\n\t// dst buffer size and src buffer size are differrent.\n\t// in this case, compiler uses `runtime.makeslicecopy`, but it is slow.\n\tbuf = buf[:len(buf)-1]\n\tcopied := make([]byte, len(buf))\n\tcopy(copied, buf)\n\n\tencoder.ReleaseRuntimeContext(rctx)\n\treturn copied, nil\n}\n\nfunc marshal(v interface{}, optFuncs ...EncodeOptionFunc) ([]byte, error) {\n\tctx := encoder.TakeRuntimeContext()\n\n\tctx.Option.Flag = 0\n\tctx.Option.Flag |= (encoder.HTMLEscapeOption | encoder.NormalizeUTF8Option)\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(ctx.Option)\n\t}\n\n\tbuf, err := encode(ctx, v)\n\tif err != nil {\n\t\tencoder.ReleaseRuntimeContext(ctx)\n\t\treturn nil, err\n\t}\n\n\t// this line exists to escape call of `runtime.makeslicecopy` .\n\t// if use `make([]byte, len(buf)-1)` and `copy(copied, buf)`,\n\t// dst buffer size and src buffer size are differrent.\n\t// in this case, compiler uses `runtime.makeslicecopy`, but it is slow.\n\tbuf = buf[:len(buf)-1]\n\tcopied := make([]byte, len(buf))\n\tcopy(copied, buf)\n\n\tencoder.ReleaseRuntimeContext(ctx)\n\treturn copied, nil\n}\n\nfunc marshalNoEscape(v interface{}) ([]byte, error) {\n\tctx := encoder.TakeRuntimeContext()\n\n\tctx.Option.Flag = 0\n\tctx.Option.Flag |= (encoder.HTMLEscapeOption | encoder.NormalizeUTF8Option)\n\n\tbuf, err := encodeNoEscape(ctx, v)\n\tif err != nil {\n\t\tencoder.ReleaseRuntimeContext(ctx)\n\t\treturn nil, err\n\t}\n\n\t// this line exists to escape call of `runtime.makeslicecopy` .\n\t// if use `make([]byte, len(buf)-1)` and `copy(copied, buf)`,\n\t// dst buffer size and src buffer size are differrent.\n\t// in this case, compiler uses `runtime.makeslicecopy`, but it is slow.\n\tbuf = buf[:len(buf)-1]\n\tcopied := make([]byte, len(buf))\n\tcopy(copied, buf)\n\n\tencoder.ReleaseRuntimeContext(ctx)\n\treturn copied, nil\n}\n\nfunc marshalIndent(v interface{}, prefix, indent string, optFuncs ...EncodeOptionFunc) ([]byte, error) {\n\tctx := encoder.TakeRuntimeContext()\n\n\tctx.Option.Flag = 0\n\tctx.Option.Flag |= (encoder.HTMLEscapeOption | encoder.NormalizeUTF8Option | encoder.IndentOption)\n\tfor _, optFunc := range optFuncs {\n\t\toptFunc(ctx.Option)\n\t}\n\n\tbuf, err := encodeIndent(ctx, v, prefix, indent)\n\tif err != nil {\n\t\tencoder.ReleaseRuntimeContext(ctx)\n\t\treturn nil, err\n\t}\n\n\tbuf = buf[:len(buf)-2]\n\tcopied := make([]byte, len(buf))\n\tcopy(copied, buf)\n\n\tencoder.ReleaseRuntimeContext(ctx)\n\treturn copied, nil\n}\n\nfunc encode(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error) {\n\tb := ctx.Buf[:0]\n\tif v == nil {\n\t\tb = encoder.AppendNull(ctx, b)\n\t\tb = encoder.AppendComma(ctx, b)\n\t\treturn b, nil\n\t}\n\theader := (*emptyInterface)(unsafe.Pointer(&v))\n\ttyp := header.typ\n\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\tcodeSet, err := encoder.CompileToGetCodeSet(ctx, typeptr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp := uintptr(header.ptr)\n\tctx.Init(p, codeSet.CodeLength)\n\tctx.KeepRefs = append(ctx.KeepRefs, header.ptr)\n\n\tbuf, err := encodeRunCode(ctx, b, codeSet)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tctx.Buf = buf\n\treturn buf, nil\n}\n\nfunc encodeNoEscape(ctx *encoder.RuntimeContext, v interface{}) ([]byte, error) {\n\tb := ctx.Buf[:0]\n\tif v == nil {\n\t\tb = encoder.AppendNull(ctx, b)\n\t\tb = encoder.AppendComma(ctx, b)\n\t\treturn b, nil\n\t}\n\theader := (*emptyInterface)(unsafe.Pointer(&v))\n\ttyp := header.typ\n\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\tcodeSet, err := encoder.CompileToGetCodeSet(ctx, typeptr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp := uintptr(header.ptr)\n\tctx.Init(p, codeSet.CodeLength)\n\tbuf, err := encodeRunCode(ctx, b, codeSet)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.Buf = buf\n\treturn buf, nil\n}\n\nfunc encodeIndent(ctx *encoder.RuntimeContext, v interface{}, prefix, indent string) ([]byte, error) {\n\tb := ctx.Buf[:0]\n\tif v == nil {\n\t\tb = encoder.AppendNull(ctx, b)\n\t\tb = encoder.AppendCommaIndent(ctx, b)\n\t\treturn b, nil\n\t}\n\theader := (*emptyInterface)(unsafe.Pointer(&v))\n\ttyp := header.typ\n\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\tcodeSet, err := encoder.CompileToGetCodeSet(ctx, typeptr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp := uintptr(header.ptr)\n\tctx.Init(p, codeSet.CodeLength)\n\tbuf, err := encodeRunIndentCode(ctx, b, codeSet, prefix, indent)\n\n\tctx.KeepRefs = append(ctx.KeepRefs, header.ptr)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.Buf = buf\n\treturn buf, nil\n}\n\nfunc encodeRunCode(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\tif (ctx.Option.Flag & encoder.DebugOption) != 0 {\n\t\tif (ctx.Option.Flag & encoder.ColorizeOption) != 0 {\n\t\t\treturn vm_color.DebugRun(ctx, b, codeSet)\n\t\t}\n\t\treturn vm.DebugRun(ctx, b, codeSet)\n\t}\n\tif (ctx.Option.Flag & encoder.ColorizeOption) != 0 {\n\t\treturn vm_color.Run(ctx, b, codeSet)\n\t}\n\treturn vm.Run(ctx, b, codeSet)\n}\n\nfunc encodeRunIndentCode(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet, prefix, indent string) ([]byte, error) {\n\tctx.Prefix = []byte(prefix)\n\tctx.IndentStr = []byte(indent)\n\tif (ctx.Option.Flag & encoder.DebugOption) != 0 {\n\t\tif (ctx.Option.Flag & encoder.ColorizeOption) != 0 {\n\t\t\treturn vm_color_indent.DebugRun(ctx, b, codeSet)\n\t\t}\n\t\treturn vm_indent.DebugRun(ctx, b, codeSet)\n\t}\n\tif (ctx.Option.Flag & encoder.ColorizeOption) != 0 {\n\t\treturn vm_color_indent.Run(ctx, b, codeSet)\n\t}\n\treturn vm_indent.Run(ctx, b, codeSet)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/error.go",
    "content": "package json\n\nimport (\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\n// Before Go 1.2, an InvalidUTF8Error was returned by Marshal when\n// attempting to encode a string value with invalid UTF-8 sequences.\n// As of Go 1.2, Marshal instead coerces the string to valid UTF-8 by\n// replacing invalid bytes with the Unicode replacement rune U+FFFD.\n//\n// Deprecated: No longer used; kept for compatibility.\ntype InvalidUTF8Error = errors.InvalidUTF8Error\n\n// An InvalidUnmarshalError describes an invalid argument passed to Unmarshal.\n// (The argument to Unmarshal must be a non-nil pointer.)\ntype InvalidUnmarshalError = errors.InvalidUnmarshalError\n\n// A MarshalerError represents an error from calling a MarshalJSON or MarshalText method.\ntype MarshalerError = errors.MarshalerError\n\n// A SyntaxError is a description of a JSON syntax error.\ntype SyntaxError = errors.SyntaxError\n\n// An UnmarshalFieldError describes a JSON object key that\n// led to an unexported (and therefore unwritable) struct field.\n//\n// Deprecated: No longer used; kept for compatibility.\ntype UnmarshalFieldError = errors.UnmarshalFieldError\n\n// An UnmarshalTypeError describes a JSON value that was\n// not appropriate for a value of a specific Go type.\ntype UnmarshalTypeError = errors.UnmarshalTypeError\n\n// An UnsupportedTypeError is returned by Marshal when attempting\n// to encode an unsupported value type.\ntype UnsupportedTypeError = errors.UnsupportedTypeError\n\ntype UnsupportedValueError = errors.UnsupportedValueError\n\ntype PathError = errors.PathError\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/anonymous_field.go",
    "content": "package decoder\n\nimport (\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype anonymousFieldDecoder struct {\n\tstructType *runtime.Type\n\toffset     uintptr\n\tdec        Decoder\n}\n\nfunc newAnonymousFieldDecoder(structType *runtime.Type, offset uintptr, dec Decoder) *anonymousFieldDecoder {\n\treturn &anonymousFieldDecoder{\n\t\tstructType: structType,\n\t\toffset:     offset,\n\t\tdec:        dec,\n\t}\n}\n\nfunc (d *anonymousFieldDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tif *(*unsafe.Pointer)(p) == nil {\n\t\t*(*unsafe.Pointer)(p) = unsafe_New(d.structType)\n\t}\n\tp = *(*unsafe.Pointer)(p)\n\treturn d.dec.DecodeStream(s, depth, unsafe.Pointer(uintptr(p)+d.offset))\n}\n\nfunc (d *anonymousFieldDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tif *(*unsafe.Pointer)(p) == nil {\n\t\t*(*unsafe.Pointer)(p) = unsafe_New(d.structType)\n\t}\n\tp = *(*unsafe.Pointer)(p)\n\treturn d.dec.Decode(ctx, cursor, depth, unsafe.Pointer(uintptr(p)+d.offset))\n}\n\nfunc (d *anonymousFieldDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn d.dec.DecodePath(ctx, cursor, depth)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/array.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype arrayDecoder struct {\n\telemType     *runtime.Type\n\tsize         uintptr\n\tvalueDecoder Decoder\n\talen         int\n\tstructName   string\n\tfieldName    string\n\tzeroValue    unsafe.Pointer\n}\n\nfunc newArrayDecoder(dec Decoder, elemType *runtime.Type, alen int, structName, fieldName string) *arrayDecoder {\n\t// workaround to avoid checkptr errors. cannot use `*(*unsafe.Pointer)(unsafe_New(elemType))` directly.\n\tzeroValuePtr := unsafe_New(elemType)\n\tzeroValue := **(**unsafe.Pointer)(unsafe.Pointer(&zeroValuePtr))\n\treturn &arrayDecoder{\n\t\tvalueDecoder: dec,\n\t\telemType:     elemType,\n\t\tsize:         elemType.Size(),\n\t\talen:         alen,\n\t\tstructName:   structName,\n\t\tfieldName:    fieldName,\n\t\tzeroValue:    zeroValue,\n\t}\n}\n\nfunc (d *arrayDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t}\n\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\tcase '[':\n\t\t\tidx := 0\n\t\t\ts.cursor++\n\t\t\tif s.skipWhiteSpace() == ']' {\n\t\t\t\tfor idx < d.alen {\n\t\t\t\t\t*(*unsafe.Pointer)(unsafe.Pointer(uintptr(p) + uintptr(idx)*d.size)) = d.zeroValue\n\t\t\t\t\tidx++\n\t\t\t\t}\n\t\t\t\ts.cursor++\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tfor {\n\t\t\t\tif idx < d.alen {\n\t\t\t\t\tif err := d.valueDecoder.DecodeStream(s, depth, unsafe.Pointer(uintptr(p)+uintptr(idx)*d.size)); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif err := s.skipValue(depth); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tidx++\n\t\t\t\tswitch s.skipWhiteSpace() {\n\t\t\t\tcase ']':\n\t\t\t\t\tfor idx < d.alen {\n\t\t\t\t\t\t*(*unsafe.Pointer)(unsafe.Pointer(uintptr(p) + uintptr(idx)*d.size)) = d.zeroValue\n\t\t\t\t\t\tidx++\n\t\t\t\t\t}\n\t\t\t\t\ts.cursor++\n\t\t\t\t\treturn nil\n\t\t\t\tcase ',':\n\t\t\t\t\ts.cursor++\n\t\t\t\t\tcontinue\n\t\t\t\tcase nul:\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\ts.cursor++\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tgoto ERROR\n\t\t\t\tdefault:\n\t\t\t\t\tgoto ERROR\n\t\t\t\t}\n\t\t\t}\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto ERROR\n\t\tdefault:\n\t\t\tgoto ERROR\n\t\t}\n\t\ts.cursor++\n\t}\nERROR:\n\treturn errors.ErrUnexpectedEndOfJSON(\"array\", s.totalOffset())\n}\n\nfunc (d *arrayDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t}\n\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn cursor, nil\n\t\tcase '[':\n\t\t\tidx := 0\n\t\t\tcursor++\n\t\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\t\tif buf[cursor] == ']' {\n\t\t\t\tfor idx < d.alen {\n\t\t\t\t\t*(*unsafe.Pointer)(unsafe.Pointer(uintptr(p) + uintptr(idx)*d.size)) = d.zeroValue\n\t\t\t\t\tidx++\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t\treturn cursor, nil\n\t\t\t}\n\t\t\tfor {\n\t\t\t\tif idx < d.alen {\n\t\t\t\t\tc, err := d.valueDecoder.Decode(ctx, cursor, depth, unsafe.Pointer(uintptr(p)+uintptr(idx)*d.size))\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t\tcursor = c\n\t\t\t\t} else {\n\t\t\t\t\tc, err := skipValue(buf, cursor, depth)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t\tcursor = c\n\t\t\t\t}\n\t\t\t\tidx++\n\t\t\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\t\t\tswitch buf[cursor] {\n\t\t\t\tcase ']':\n\t\t\t\t\tfor idx < d.alen {\n\t\t\t\t\t\t*(*unsafe.Pointer)(unsafe.Pointer(uintptr(p) + uintptr(idx)*d.size)) = d.zeroValue\n\t\t\t\t\t\tidx++\n\t\t\t\t\t}\n\t\t\t\t\tcursor++\n\t\t\t\t\treturn cursor, nil\n\t\t\t\tcase ',':\n\t\t\t\t\tcursor++\n\t\t\t\t\tcontinue\n\t\t\t\tdefault:\n\t\t\t\t\treturn 0, errors.ErrInvalidCharacter(buf[cursor], \"array\", cursor)\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"array\", cursor)\n\t\t}\n\t}\n}\n\nfunc (d *arrayDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: array decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/assign.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n)\n\nvar (\n\tnilValue = reflect.ValueOf(nil)\n)\n\nfunc AssignValue(src, dst reflect.Value) error {\n\tif dst.Type().Kind() != reflect.Ptr {\n\t\treturn fmt.Errorf(\"invalid dst type. required pointer type: %T\", dst.Type())\n\t}\n\tcasted, err := castValue(dst.Elem().Type(), src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdst.Elem().Set(casted)\n\treturn nil\n}\n\nfunc castValue(t reflect.Type, v reflect.Value) (reflect.Value, error) {\n\tswitch t.Kind() {\n\tcase reflect.Int:\n\t\tvv, err := castInt(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(int(vv.Int())), nil\n\tcase reflect.Int8:\n\t\tvv, err := castInt(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(int8(vv.Int())), nil\n\tcase reflect.Int16:\n\t\tvv, err := castInt(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(int16(vv.Int())), nil\n\tcase reflect.Int32:\n\t\tvv, err := castInt(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(int32(vv.Int())), nil\n\tcase reflect.Int64:\n\t\treturn castInt(v)\n\tcase reflect.Uint:\n\t\tvv, err := castUint(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(uint(vv.Uint())), nil\n\tcase reflect.Uint8:\n\t\tvv, err := castUint(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(uint8(vv.Uint())), nil\n\tcase reflect.Uint16:\n\t\tvv, err := castUint(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(uint16(vv.Uint())), nil\n\tcase reflect.Uint32:\n\t\tvv, err := castUint(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(uint32(vv.Uint())), nil\n\tcase reflect.Uint64:\n\t\treturn castUint(v)\n\tcase reflect.Uintptr:\n\t\tvv, err := castUint(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(uintptr(vv.Uint())), nil\n\tcase reflect.String:\n\t\treturn castString(v)\n\tcase reflect.Bool:\n\t\treturn castBool(v)\n\tcase reflect.Float32:\n\t\tvv, err := castFloat(v)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(float32(vv.Float())), nil\n\tcase reflect.Float64:\n\t\treturn castFloat(v)\n\tcase reflect.Array:\n\t\treturn castArray(t, v)\n\tcase reflect.Slice:\n\t\treturn castSlice(t, v)\n\tcase reflect.Map:\n\t\treturn castMap(t, v)\n\tcase reflect.Struct:\n\t\treturn castStruct(t, v)\n\t}\n\treturn v, nil\n}\n\nfunc castInt(v reflect.Value) (reflect.Value, error) {\n\tswitch v.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v, nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn reflect.ValueOf(int64(v.Uint())), nil\n\tcase reflect.String:\n\t\ti64, err := strconv.ParseInt(v.String(), 10, 64)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(i64), nil\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\treturn reflect.ValueOf(int64(1)), nil\n\t\t}\n\t\treturn reflect.ValueOf(int64(0)), nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn reflect.ValueOf(int64(v.Float())), nil\n\tcase reflect.Array:\n\t\tif v.Len() > 0 {\n\t\t\treturn castInt(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to int64 from empty array\")\n\tcase reflect.Slice:\n\t\tif v.Len() > 0 {\n\t\t\treturn castInt(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to int64 from empty slice\")\n\tcase reflect.Interface:\n\t\treturn castInt(reflect.ValueOf(v.Interface()))\n\tcase reflect.Map:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to int64 from map\")\n\tcase reflect.Struct:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to int64 from struct\")\n\tcase reflect.Ptr:\n\t\treturn castInt(v.Elem())\n\t}\n\treturn nilValue, fmt.Errorf(\"failed to cast to int64 from %s\", v.Type().Kind())\n}\n\nfunc castUint(v reflect.Value) (reflect.Value, error) {\n\tswitch v.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn reflect.ValueOf(uint64(v.Int())), nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v, nil\n\tcase reflect.String:\n\t\tu64, err := strconv.ParseUint(v.String(), 10, 64)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(u64), nil\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\treturn reflect.ValueOf(uint64(1)), nil\n\t\t}\n\t\treturn reflect.ValueOf(uint64(0)), nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn reflect.ValueOf(uint64(v.Float())), nil\n\tcase reflect.Array:\n\t\tif v.Len() > 0 {\n\t\t\treturn castUint(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to uint64 from empty array\")\n\tcase reflect.Slice:\n\t\tif v.Len() > 0 {\n\t\t\treturn castUint(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to uint64 from empty slice\")\n\tcase reflect.Interface:\n\t\treturn castUint(reflect.ValueOf(v.Interface()))\n\tcase reflect.Map:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to uint64 from map\")\n\tcase reflect.Struct:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to uint64 from struct\")\n\tcase reflect.Ptr:\n\t\treturn castUint(v.Elem())\n\t}\n\treturn nilValue, fmt.Errorf(\"failed to cast to uint64 from %s\", v.Type().Kind())\n}\n\nfunc castString(v reflect.Value) (reflect.Value, error) {\n\tswitch v.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn reflect.ValueOf(fmt.Sprint(v.Int())), nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn reflect.ValueOf(fmt.Sprint(v.Uint())), nil\n\tcase reflect.String:\n\t\treturn v, nil\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\treturn reflect.ValueOf(\"true\"), nil\n\t\t}\n\t\treturn reflect.ValueOf(\"false\"), nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn reflect.ValueOf(fmt.Sprint(v.Float())), nil\n\tcase reflect.Array:\n\t\tif v.Len() > 0 {\n\t\t\treturn castString(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from empty array\")\n\tcase reflect.Slice:\n\t\tif v.Len() > 0 {\n\t\t\treturn castString(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from empty slice\")\n\tcase reflect.Interface:\n\t\treturn castString(reflect.ValueOf(v.Interface()))\n\tcase reflect.Map:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from map\")\n\tcase reflect.Struct:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from struct\")\n\tcase reflect.Ptr:\n\t\treturn castString(v.Elem())\n\t}\n\treturn nilValue, fmt.Errorf(\"failed to cast to string from %s\", v.Type().Kind())\n}\n\nfunc castBool(v reflect.Value) (reflect.Value, error) {\n\tswitch v.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tswitch v.Int() {\n\t\tcase 0:\n\t\t\treturn reflect.ValueOf(false), nil\n\t\tcase 1:\n\t\t\treturn reflect.ValueOf(true), nil\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to bool from %d\", v.Int())\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tswitch v.Uint() {\n\t\tcase 0:\n\t\t\treturn reflect.ValueOf(false), nil\n\t\tcase 1:\n\t\t\treturn reflect.ValueOf(true), nil\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to bool from %d\", v.Uint())\n\tcase reflect.String:\n\t\tb, err := strconv.ParseBool(v.String())\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(b), nil\n\tcase reflect.Bool:\n\t\treturn v, nil\n\tcase reflect.Float32, reflect.Float64:\n\t\tswitch v.Float() {\n\t\tcase 0:\n\t\t\treturn reflect.ValueOf(false), nil\n\t\tcase 1:\n\t\t\treturn reflect.ValueOf(true), nil\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to bool from %f\", v.Float())\n\tcase reflect.Array:\n\t\tif v.Len() > 0 {\n\t\t\treturn castBool(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from empty array\")\n\tcase reflect.Slice:\n\t\tif v.Len() > 0 {\n\t\t\treturn castBool(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from empty slice\")\n\tcase reflect.Interface:\n\t\treturn castBool(reflect.ValueOf(v.Interface()))\n\tcase reflect.Map:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from map\")\n\tcase reflect.Struct:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to string from struct\")\n\tcase reflect.Ptr:\n\t\treturn castBool(v.Elem())\n\t}\n\treturn nilValue, fmt.Errorf(\"failed to cast to bool from %s\", v.Type().Kind())\n}\n\nfunc castFloat(v reflect.Value) (reflect.Value, error) {\n\tswitch v.Type().Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn reflect.ValueOf(float64(v.Int())), nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn reflect.ValueOf(float64(v.Uint())), nil\n\tcase reflect.String:\n\t\tf64, err := strconv.ParseFloat(v.String(), 64)\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\treturn reflect.ValueOf(f64), nil\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\treturn reflect.ValueOf(float64(1)), nil\n\t\t}\n\t\treturn reflect.ValueOf(float64(0)), nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v, nil\n\tcase reflect.Array:\n\t\tif v.Len() > 0 {\n\t\t\treturn castFloat(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to float64 from empty array\")\n\tcase reflect.Slice:\n\t\tif v.Len() > 0 {\n\t\t\treturn castFloat(v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to float64 from empty slice\")\n\tcase reflect.Interface:\n\t\treturn castFloat(reflect.ValueOf(v.Interface()))\n\tcase reflect.Map:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to float64 from map\")\n\tcase reflect.Struct:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to float64 from struct\")\n\tcase reflect.Ptr:\n\t\treturn castFloat(v.Elem())\n\t}\n\treturn nilValue, fmt.Errorf(\"failed to cast to float64 from %s\", v.Type().Kind())\n}\n\nfunc castArray(t reflect.Type, v reflect.Value) (reflect.Value, error) {\n\tkind := v.Type().Kind()\n\tif kind == reflect.Interface {\n\t\treturn castArray(t, reflect.ValueOf(v.Interface()))\n\t}\n\tif kind != reflect.Slice && kind != reflect.Array {\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to array from %s\", kind)\n\t}\n\tif t.Elem() == v.Type().Elem() {\n\t\treturn v, nil\n\t}\n\tif t.Len() != v.Len() {\n\t\treturn nilValue, fmt.Errorf(\"failed to cast [%d]array from slice of %d length\", t.Len(), v.Len())\n\t}\n\tret := reflect.New(t).Elem()\n\tfor i := 0; i < v.Len(); i++ {\n\t\tvv, err := castValue(t.Elem(), v.Index(i))\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\tret.Index(i).Set(vv)\n\t}\n\treturn ret, nil\n}\n\nfunc castSlice(t reflect.Type, v reflect.Value) (reflect.Value, error) {\n\tkind := v.Type().Kind()\n\tif kind == reflect.Interface {\n\t\treturn castSlice(t, reflect.ValueOf(v.Interface()))\n\t}\n\tif kind != reflect.Slice && kind != reflect.Array {\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to slice from %s\", kind)\n\t}\n\tif t.Elem() == v.Type().Elem() {\n\t\treturn v, nil\n\t}\n\tret := reflect.MakeSlice(t, v.Len(), v.Len())\n\tfor i := 0; i < v.Len(); i++ {\n\t\tvv, err := castValue(t.Elem(), v.Index(i))\n\t\tif err != nil {\n\t\t\treturn nilValue, err\n\t\t}\n\t\tret.Index(i).Set(vv)\n\t}\n\treturn ret, nil\n}\n\nfunc castMap(t reflect.Type, v reflect.Value) (reflect.Value, error) {\n\tret := reflect.MakeMap(t)\n\tswitch v.Type().Kind() {\n\tcase reflect.Map:\n\t\titer := v.MapRange()\n\t\tfor iter.Next() {\n\t\t\tkey, err := castValue(t.Key(), iter.Key())\n\t\t\tif err != nil {\n\t\t\t\treturn nilValue, err\n\t\t\t}\n\t\t\tvalue, err := castValue(t.Elem(), iter.Value())\n\t\t\tif err != nil {\n\t\t\t\treturn nilValue, err\n\t\t\t}\n\t\t\tret.SetMapIndex(key, value)\n\t\t}\n\t\treturn ret, nil\n\tcase reflect.Interface:\n\t\treturn castMap(t, reflect.ValueOf(v.Interface()))\n\tcase reflect.Slice:\n\t\tif v.Len() > 0 {\n\t\t\treturn castMap(t, v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to map from empty slice\")\n\t}\n\treturn nilValue, fmt.Errorf(\"failed to cast to map from %s\", v.Type().Kind())\n}\n\nfunc castStruct(t reflect.Type, v reflect.Value) (reflect.Value, error) {\n\tret := reflect.New(t).Elem()\n\tswitch v.Type().Kind() {\n\tcase reflect.Map:\n\t\titer := v.MapRange()\n\t\tfor iter.Next() {\n\t\t\tkey := iter.Key()\n\t\t\tk, err := castString(key)\n\t\t\tif err != nil {\n\t\t\t\treturn nilValue, err\n\t\t\t}\n\t\t\tfieldName := k.String()\n\t\t\tfield, ok := t.FieldByName(fieldName)\n\t\t\tif ok {\n\t\t\t\tvalue, err := castValue(field.Type, iter.Value())\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nilValue, err\n\t\t\t\t}\n\t\t\t\tret.FieldByName(fieldName).Set(value)\n\t\t\t}\n\t\t}\n\t\treturn ret, nil\n\tcase reflect.Struct:\n\t\tfor i := 0; i < v.Type().NumField(); i++ {\n\t\t\tname := v.Type().Field(i).Name\n\t\t\tret.FieldByName(name).Set(v.FieldByName(name))\n\t\t}\n\t\treturn ret, nil\n\tcase reflect.Interface:\n\t\treturn castStruct(t, reflect.ValueOf(v.Interface()))\n\tcase reflect.Slice:\n\t\tif v.Len() > 0 {\n\t\t\treturn castStruct(t, v.Index(0))\n\t\t}\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to struct from empty slice\")\n\tdefault:\n\t\treturn nilValue, fmt.Errorf(\"failed to cast to struct from %s\", v.Type().Kind())\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/bool.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\ntype boolDecoder struct {\n\tstructName string\n\tfieldName  string\n}\n\nfunc newBoolDecoder(structName, fieldName string) *boolDecoder {\n\treturn &boolDecoder{structName: structName, fieldName: fieldName}\n}\n\nfunc (d *boolDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tc := s.skipWhiteSpace()\n\tfor {\n\t\tswitch c {\n\t\tcase 't':\n\t\t\tif err := trueBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t**(**bool)(unsafe.Pointer(&p)) = true\n\t\t\treturn nil\n\t\tcase 'f':\n\t\t\tif err := falseBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t**(**bool)(unsafe.Pointer(&p)) = false\n\t\t\treturn nil\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tc = s.char()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto ERROR\n\t\t}\n\t\tbreak\n\t}\nERROR:\n\treturn errors.ErrUnexpectedEndOfJSON(\"bool\", s.totalOffset())\n}\n\nfunc (d *boolDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tswitch buf[cursor] {\n\tcase 't':\n\t\tif err := validateTrue(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 4\n\t\t**(**bool)(unsafe.Pointer(&p)) = true\n\t\treturn cursor, nil\n\tcase 'f':\n\t\tif err := validateFalse(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 5\n\t\t**(**bool)(unsafe.Pointer(&p)) = false\n\t\treturn cursor, nil\n\tcase 'n':\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 4\n\t\treturn cursor, nil\n\t}\n\treturn 0, errors.ErrUnexpectedEndOfJSON(\"bool\", cursor)\n}\n\nfunc (d *boolDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: bool decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/bytes.go",
    "content": "package decoder\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype bytesDecoder struct {\n\ttyp           *runtime.Type\n\tsliceDecoder  Decoder\n\tstringDecoder *stringDecoder\n\tstructName    string\n\tfieldName     string\n}\n\nfunc byteUnmarshalerSliceDecoder(typ *runtime.Type, structName string, fieldName string) Decoder {\n\tvar unmarshalDecoder Decoder\n\tswitch {\n\tcase runtime.PtrTo(typ).Implements(unmarshalJSONType):\n\t\tunmarshalDecoder = newUnmarshalJSONDecoder(runtime.PtrTo(typ), structName, fieldName)\n\tcase runtime.PtrTo(typ).Implements(unmarshalTextType):\n\t\tunmarshalDecoder = newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName)\n\tdefault:\n\t\tunmarshalDecoder, _ = compileUint8(typ, structName, fieldName)\n\t}\n\treturn newSliceDecoder(unmarshalDecoder, typ, 1, structName, fieldName)\n}\n\nfunc newBytesDecoder(typ *runtime.Type, structName string, fieldName string) *bytesDecoder {\n\treturn &bytesDecoder{\n\t\ttyp:           typ,\n\t\tsliceDecoder:  byteUnmarshalerSliceDecoder(typ, structName, fieldName),\n\t\tstringDecoder: newStringDecoder(structName, fieldName),\n\t\tstructName:    structName,\n\t\tfieldName:     fieldName,\n\t}\n}\n\nfunc (d *bytesDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tbytes, err := d.decodeStreamBinary(s, depth, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif bytes == nil {\n\t\ts.reset()\n\t\treturn nil\n\t}\n\tdecodedLen := base64.StdEncoding.DecodedLen(len(bytes))\n\tbuf := make([]byte, decodedLen)\n\tn, err := base64.StdEncoding.Decode(buf, bytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*(*[]byte)(p) = buf[:n]\n\ts.reset()\n\treturn nil\n}\n\nfunc (d *bytesDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbytes, c, err := d.decodeBinary(ctx, cursor, depth, p)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif bytes == nil {\n\t\treturn c, nil\n\t}\n\tcursor = c\n\tdecodedLen := base64.StdEncoding.DecodedLen(len(bytes))\n\tb := make([]byte, decodedLen)\n\tn, err := base64.StdEncoding.Decode(b, bytes)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\t*(*[]byte)(p) = b[:n]\n\treturn cursor, nil\n}\n\nfunc (d *bytesDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: []byte decoder does not support decode path\")\n}\n\nfunc (d *bytesDecoder) decodeStreamBinary(s *Stream, depth int64, p unsafe.Pointer) ([]byte, error) {\n\tc := s.skipWhiteSpace()\n\tif c == '[' {\n\t\tif d.sliceDecoder == nil {\n\t\t\treturn nil, &errors.UnmarshalTypeError{\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\t}\n\t\terr := d.sliceDecoder.DecodeStream(s, depth, p)\n\t\treturn nil, err\n\t}\n\treturn d.stringDecoder.decodeStreamByte(s)\n}\n\nfunc (d *bytesDecoder) decodeBinary(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) ([]byte, int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tif buf[cursor] == '[' {\n\t\tif d.sliceDecoder == nil {\n\t\t\treturn nil, 0, &errors.UnmarshalTypeError{\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: cursor,\n\t\t\t}\n\t\t}\n\t\tc, err := d.sliceDecoder.Decode(ctx, cursor, depth, p)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\treturn nil, c, nil\n\t}\n\treturn d.stringDecoder.decodeByte(buf, cursor)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/compile.go",
    "content": "package decoder\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"unicode\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nvar (\n\tjsonNumberType   = reflect.TypeOf(json.Number(\"\"))\n\ttypeAddr         *runtime.TypeAddr\n\tcachedDecoderMap unsafe.Pointer // map[uintptr]decoder\n\tcachedDecoder    []Decoder\n)\n\nfunc init() {\n\ttypeAddr = runtime.AnalyzeTypeAddr()\n\tif typeAddr == nil {\n\t\ttypeAddr = &runtime.TypeAddr{}\n\t}\n\tcachedDecoder = make([]Decoder, typeAddr.AddrRange>>typeAddr.AddrShift+1)\n}\n\nfunc loadDecoderMap() map[uintptr]Decoder {\n\tp := atomic.LoadPointer(&cachedDecoderMap)\n\treturn *(*map[uintptr]Decoder)(unsafe.Pointer(&p))\n}\n\nfunc storeDecoder(typ uintptr, dec Decoder, m map[uintptr]Decoder) {\n\tnewDecoderMap := make(map[uintptr]Decoder, len(m)+1)\n\tnewDecoderMap[typ] = dec\n\n\tfor k, v := range m {\n\t\tnewDecoderMap[k] = v\n\t}\n\n\tatomic.StorePointer(&cachedDecoderMap, *(*unsafe.Pointer)(unsafe.Pointer(&newDecoderMap)))\n}\n\nfunc compileToGetDecoderSlowPath(typeptr uintptr, typ *runtime.Type) (Decoder, error) {\n\tdecoderMap := loadDecoderMap()\n\tif dec, exists := decoderMap[typeptr]; exists {\n\t\treturn dec, nil\n\t}\n\n\tdec, err := compileHead(typ, map[uintptr]Decoder{})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstoreDecoder(typeptr, dec, decoderMap)\n\treturn dec, nil\n}\n\nfunc compileHead(typ *runtime.Type, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\tswitch {\n\tcase implementsUnmarshalJSONType(runtime.PtrTo(typ)):\n\t\treturn newUnmarshalJSONDecoder(runtime.PtrTo(typ), \"\", \"\"), nil\n\tcase runtime.PtrTo(typ).Implements(unmarshalTextType):\n\t\treturn newUnmarshalTextDecoder(runtime.PtrTo(typ), \"\", \"\"), nil\n\t}\n\treturn compile(typ.Elem(), \"\", \"\", structTypeToDecoder)\n}\n\nfunc compile(typ *runtime.Type, structName, fieldName string, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\tswitch {\n\tcase implementsUnmarshalJSONType(runtime.PtrTo(typ)):\n\t\treturn newUnmarshalJSONDecoder(runtime.PtrTo(typ), structName, fieldName), nil\n\tcase runtime.PtrTo(typ).Implements(unmarshalTextType):\n\t\treturn newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName), nil\n\t}\n\n\tswitch typ.Kind() {\n\tcase reflect.Ptr:\n\t\treturn compilePtr(typ, structName, fieldName, structTypeToDecoder)\n\tcase reflect.Struct:\n\t\treturn compileStruct(typ, structName, fieldName, structTypeToDecoder)\n\tcase reflect.Slice:\n\t\telem := typ.Elem()\n\t\tif elem.Kind() == reflect.Uint8 {\n\t\t\treturn compileBytes(elem, structName, fieldName)\n\t\t}\n\t\treturn compileSlice(typ, structName, fieldName, structTypeToDecoder)\n\tcase reflect.Array:\n\t\treturn compileArray(typ, structName, fieldName, structTypeToDecoder)\n\tcase reflect.Map:\n\t\treturn compileMap(typ, structName, fieldName, structTypeToDecoder)\n\tcase reflect.Interface:\n\t\treturn compileInterface(typ, structName, fieldName)\n\tcase reflect.Uintptr:\n\t\treturn compileUint(typ, structName, fieldName)\n\tcase reflect.Int:\n\t\treturn compileInt(typ, structName, fieldName)\n\tcase reflect.Int8:\n\t\treturn compileInt8(typ, structName, fieldName)\n\tcase reflect.Int16:\n\t\treturn compileInt16(typ, structName, fieldName)\n\tcase reflect.Int32:\n\t\treturn compileInt32(typ, structName, fieldName)\n\tcase reflect.Int64:\n\t\treturn compileInt64(typ, structName, fieldName)\n\tcase reflect.Uint:\n\t\treturn compileUint(typ, structName, fieldName)\n\tcase reflect.Uint8:\n\t\treturn compileUint8(typ, structName, fieldName)\n\tcase reflect.Uint16:\n\t\treturn compileUint16(typ, structName, fieldName)\n\tcase reflect.Uint32:\n\t\treturn compileUint32(typ, structName, fieldName)\n\tcase reflect.Uint64:\n\t\treturn compileUint64(typ, structName, fieldName)\n\tcase reflect.String:\n\t\treturn compileString(typ, structName, fieldName)\n\tcase reflect.Bool:\n\t\treturn compileBool(structName, fieldName)\n\tcase reflect.Float32:\n\t\treturn compileFloat32(structName, fieldName)\n\tcase reflect.Float64:\n\t\treturn compileFloat64(structName, fieldName)\n\tcase reflect.Func:\n\t\treturn compileFunc(typ, structName, fieldName)\n\t}\n\treturn newInvalidDecoder(typ, structName, fieldName), nil\n}\n\nfunc isStringTagSupportedType(typ *runtime.Type) bool {\n\tswitch {\n\tcase implementsUnmarshalJSONType(runtime.PtrTo(typ)):\n\t\treturn false\n\tcase runtime.PtrTo(typ).Implements(unmarshalTextType):\n\t\treturn false\n\t}\n\tswitch typ.Kind() {\n\tcase reflect.Map:\n\t\treturn false\n\tcase reflect.Slice:\n\t\treturn false\n\tcase reflect.Array:\n\t\treturn false\n\tcase reflect.Struct:\n\t\treturn false\n\tcase reflect.Interface:\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc compileMapKey(typ *runtime.Type, structName, fieldName string, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\tif runtime.PtrTo(typ).Implements(unmarshalTextType) {\n\t\treturn newUnmarshalTextDecoder(runtime.PtrTo(typ), structName, fieldName), nil\n\t}\n\tif typ.Kind() == reflect.String {\n\t\treturn newStringDecoder(structName, fieldName), nil\n\t}\n\tdec, err := compile(typ, structName, fieldName, structTypeToDecoder)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor {\n\t\tswitch t := dec.(type) {\n\t\tcase *stringDecoder, *interfaceDecoder:\n\t\t\treturn dec, nil\n\t\tcase *boolDecoder, *intDecoder, *uintDecoder, *numberDecoder:\n\t\t\treturn newWrappedStringDecoder(typ, dec, structName, fieldName), nil\n\t\tcase *ptrDecoder:\n\t\t\tdec = t.dec\n\t\tdefault:\n\t\t\treturn newInvalidDecoder(typ, structName, fieldName), nil\n\t\t}\n\t}\n}\n\nfunc compilePtr(typ *runtime.Type, structName, fieldName string, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\tdec, err := compile(typ.Elem(), structName, fieldName, structTypeToDecoder)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newPtrDecoder(dec, typ.Elem(), structName, fieldName), nil\n}\n\nfunc compileInt(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newIntDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v int64) {\n\t\t*(*int)(p) = int(v)\n\t}), nil\n}\n\nfunc compileInt8(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newIntDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v int64) {\n\t\t*(*int8)(p) = int8(v)\n\t}), nil\n}\n\nfunc compileInt16(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newIntDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v int64) {\n\t\t*(*int16)(p) = int16(v)\n\t}), nil\n}\n\nfunc compileInt32(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newIntDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v int64) {\n\t\t*(*int32)(p) = int32(v)\n\t}), nil\n}\n\nfunc compileInt64(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newIntDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v int64) {\n\t\t*(*int64)(p) = v\n\t}), nil\n}\n\nfunc compileUint(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newUintDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v uint64) {\n\t\t*(*uint)(p) = uint(v)\n\t}), nil\n}\n\nfunc compileUint8(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newUintDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v uint64) {\n\t\t*(*uint8)(p) = uint8(v)\n\t}), nil\n}\n\nfunc compileUint16(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newUintDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v uint64) {\n\t\t*(*uint16)(p) = uint16(v)\n\t}), nil\n}\n\nfunc compileUint32(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newUintDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v uint64) {\n\t\t*(*uint32)(p) = uint32(v)\n\t}), nil\n}\n\nfunc compileUint64(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newUintDecoder(typ, structName, fieldName, func(p unsafe.Pointer, v uint64) {\n\t\t*(*uint64)(p) = v\n\t}), nil\n}\n\nfunc compileFloat32(structName, fieldName string) (Decoder, error) {\n\treturn newFloatDecoder(structName, fieldName, func(p unsafe.Pointer, v float64) {\n\t\t*(*float32)(p) = float32(v)\n\t}), nil\n}\n\nfunc compileFloat64(structName, fieldName string) (Decoder, error) {\n\treturn newFloatDecoder(structName, fieldName, func(p unsafe.Pointer, v float64) {\n\t\t*(*float64)(p) = v\n\t}), nil\n}\n\nfunc compileString(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\tif typ == runtime.Type2RType(jsonNumberType) {\n\t\treturn newNumberDecoder(structName, fieldName, func(p unsafe.Pointer, v json.Number) {\n\t\t\t*(*json.Number)(p) = v\n\t\t}), nil\n\t}\n\treturn newStringDecoder(structName, fieldName), nil\n}\n\nfunc compileBool(structName, fieldName string) (Decoder, error) {\n\treturn newBoolDecoder(structName, fieldName), nil\n}\n\nfunc compileBytes(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newBytesDecoder(typ, structName, fieldName), nil\n}\n\nfunc compileSlice(typ *runtime.Type, structName, fieldName string, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\telem := typ.Elem()\n\tdecoder, err := compile(elem, structName, fieldName, structTypeToDecoder)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newSliceDecoder(decoder, elem, elem.Size(), structName, fieldName), nil\n}\n\nfunc compileArray(typ *runtime.Type, structName, fieldName string, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\telem := typ.Elem()\n\tdecoder, err := compile(elem, structName, fieldName, structTypeToDecoder)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newArrayDecoder(decoder, elem, typ.Len(), structName, fieldName), nil\n}\n\nfunc compileMap(typ *runtime.Type, structName, fieldName string, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\tkeyDec, err := compileMapKey(typ.Key(), structName, fieldName, structTypeToDecoder)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvalueDec, err := compile(typ.Elem(), structName, fieldName, structTypeToDecoder)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newMapDecoder(typ, typ.Key(), keyDec, typ.Elem(), valueDec, structName, fieldName), nil\n}\n\nfunc compileInterface(typ *runtime.Type, structName, fieldName string) (Decoder, error) {\n\treturn newInterfaceDecoder(typ, structName, fieldName), nil\n}\n\nfunc compileFunc(typ *runtime.Type, strutName, fieldName string) (Decoder, error) {\n\treturn newFuncDecoder(typ, strutName, fieldName), nil\n}\n\nfunc typeToStructTags(typ *runtime.Type) runtime.StructTags {\n\ttags := runtime.StructTags{}\n\tfieldNum := typ.NumField()\n\tfor i := 0; i < fieldNum; i++ {\n\t\tfield := typ.Field(i)\n\t\tif runtime.IsIgnoredStructField(field) {\n\t\t\tcontinue\n\t\t}\n\t\ttags = append(tags, runtime.StructTagFromField(field))\n\t}\n\treturn tags\n}\n\nfunc compileStruct(typ *runtime.Type, structName, fieldName string, structTypeToDecoder map[uintptr]Decoder) (Decoder, error) {\n\tfieldNum := typ.NumField()\n\tfieldMap := map[string]*structFieldSet{}\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\tif dec, exists := structTypeToDecoder[typeptr]; exists {\n\t\treturn dec, nil\n\t}\n\tstructDec := newStructDecoder(structName, fieldName, fieldMap)\n\tstructTypeToDecoder[typeptr] = structDec\n\tstructName = typ.Name()\n\ttags := typeToStructTags(typ)\n\tallFields := []*structFieldSet{}\n\tfor i := 0; i < fieldNum; i++ {\n\t\tfield := typ.Field(i)\n\t\tif runtime.IsIgnoredStructField(field) {\n\t\t\tcontinue\n\t\t}\n\t\tisUnexportedField := unicode.IsLower([]rune(field.Name)[0])\n\t\ttag := runtime.StructTagFromField(field)\n\t\tdec, err := compile(runtime.Type2RType(field.Type), structName, field.Name, structTypeToDecoder)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif field.Anonymous && !tag.IsTaggedKey {\n\t\t\tif stDec, ok := dec.(*structDecoder); ok {\n\t\t\t\tif runtime.Type2RType(field.Type) == typ {\n\t\t\t\t\t// recursive definition\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor k, v := range stDec.fieldMap {\n\t\t\t\t\tif tags.ExistsKey(k) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfieldSet := &structFieldSet{\n\t\t\t\t\t\tdec:         v.dec,\n\t\t\t\t\t\toffset:      field.Offset + v.offset,\n\t\t\t\t\t\tisTaggedKey: v.isTaggedKey,\n\t\t\t\t\t\tkey:         k,\n\t\t\t\t\t\tkeyLen:      int64(len(k)),\n\t\t\t\t\t}\n\t\t\t\t\tallFields = append(allFields, fieldSet)\n\t\t\t\t}\n\t\t\t} else if pdec, ok := dec.(*ptrDecoder); ok {\n\t\t\t\tcontentDec := pdec.contentDecoder()\n\t\t\t\tif pdec.typ == typ {\n\t\t\t\t\t// recursive definition\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvar fieldSetErr error\n\t\t\t\tif isUnexportedField {\n\t\t\t\t\tfieldSetErr = fmt.Errorf(\n\t\t\t\t\t\t\"json: cannot set embedded pointer to unexported struct: %v\",\n\t\t\t\t\t\tfield.Type.Elem(),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif dec, ok := contentDec.(*structDecoder); ok {\n\t\t\t\t\tfor k, v := range dec.fieldMap {\n\t\t\t\t\t\tif tags.ExistsKey(k) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfieldSet := &structFieldSet{\n\t\t\t\t\t\t\tdec:         newAnonymousFieldDecoder(pdec.typ, v.offset, v.dec),\n\t\t\t\t\t\t\toffset:      field.Offset,\n\t\t\t\t\t\t\tisTaggedKey: v.isTaggedKey,\n\t\t\t\t\t\t\tkey:         k,\n\t\t\t\t\t\t\tkeyLen:      int64(len(k)),\n\t\t\t\t\t\t\terr:         fieldSetErr,\n\t\t\t\t\t\t}\n\t\t\t\t\t\tallFields = append(allFields, fieldSet)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfieldSet := &structFieldSet{\n\t\t\t\t\t\tdec:         pdec,\n\t\t\t\t\t\toffset:      field.Offset,\n\t\t\t\t\t\tisTaggedKey: tag.IsTaggedKey,\n\t\t\t\t\t\tkey:         field.Name,\n\t\t\t\t\t\tkeyLen:      int64(len(field.Name)),\n\t\t\t\t\t}\n\t\t\t\t\tallFields = append(allFields, fieldSet)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfieldSet := &structFieldSet{\n\t\t\t\t\tdec:         dec,\n\t\t\t\t\toffset:      field.Offset,\n\t\t\t\t\tisTaggedKey: tag.IsTaggedKey,\n\t\t\t\t\tkey:         field.Name,\n\t\t\t\t\tkeyLen:      int64(len(field.Name)),\n\t\t\t\t}\n\t\t\t\tallFields = append(allFields, fieldSet)\n\t\t\t}\n\t\t} else {\n\t\t\tif tag.IsString && isStringTagSupportedType(runtime.Type2RType(field.Type)) {\n\t\t\t\tdec = newWrappedStringDecoder(runtime.Type2RType(field.Type), dec, structName, field.Name)\n\t\t\t}\n\t\t\tvar key string\n\t\t\tif tag.Key != \"\" {\n\t\t\t\tkey = tag.Key\n\t\t\t} else {\n\t\t\t\tkey = field.Name\n\t\t\t}\n\t\t\tfieldSet := &structFieldSet{\n\t\t\t\tdec:         dec,\n\t\t\t\toffset:      field.Offset,\n\t\t\t\tisTaggedKey: tag.IsTaggedKey,\n\t\t\t\tkey:         key,\n\t\t\t\tkeyLen:      int64(len(key)),\n\t\t\t}\n\t\t\tallFields = append(allFields, fieldSet)\n\t\t}\n\t}\n\tfor _, set := range filterDuplicatedFields(allFields) {\n\t\tfieldMap[set.key] = set\n\t\tlower := strings.ToLower(set.key)\n\t\tif _, exists := fieldMap[lower]; !exists {\n\t\t\t// first win\n\t\t\tfieldMap[lower] = set\n\t\t}\n\t}\n\tdelete(structTypeToDecoder, typeptr)\n\tstructDec.tryOptimize()\n\treturn structDec, nil\n}\n\nfunc filterDuplicatedFields(allFields []*structFieldSet) []*structFieldSet {\n\tfieldMap := map[string][]*structFieldSet{}\n\tfor _, field := range allFields {\n\t\tfieldMap[field.key] = append(fieldMap[field.key], field)\n\t}\n\tduplicatedFieldMap := map[string]struct{}{}\n\tfor k, sets := range fieldMap {\n\t\tsets = filterFieldSets(sets)\n\t\tif len(sets) != 1 {\n\t\t\tduplicatedFieldMap[k] = struct{}{}\n\t\t}\n\t}\n\n\tfiltered := make([]*structFieldSet, 0, len(allFields))\n\tfor _, field := range allFields {\n\t\tif _, exists := duplicatedFieldMap[field.key]; exists {\n\t\t\tcontinue\n\t\t}\n\t\tfiltered = append(filtered, field)\n\t}\n\treturn filtered\n}\n\nfunc filterFieldSets(sets []*structFieldSet) []*structFieldSet {\n\tif len(sets) == 1 {\n\t\treturn sets\n\t}\n\tfiltered := make([]*structFieldSet, 0, len(sets))\n\tfor _, set := range sets {\n\t\tif set.isTaggedKey {\n\t\t\tfiltered = append(filtered, set)\n\t\t}\n\t}\n\treturn filtered\n}\n\nfunc implementsUnmarshalJSONType(typ *runtime.Type) bool {\n\treturn typ.Implements(unmarshalJSONType) || typ.Implements(unmarshalJSONContextType)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go",
    "content": "//go:build !race\n// +build !race\n\npackage decoder\n\nimport (\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nfunc CompileToGetDecoder(typ *runtime.Type) (Decoder, error) {\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\tif typeptr > typeAddr.MaxTypeAddr {\n\t\treturn compileToGetDecoderSlowPath(typeptr, typ)\n\t}\n\n\tindex := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift\n\tif dec := cachedDecoder[index]; dec != nil {\n\t\treturn dec, nil\n\t}\n\n\tdec, err := compileHead(typ, map[uintptr]Decoder{})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcachedDecoder[index] = dec\n\treturn dec, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/compile_race.go",
    "content": "//go:build race\n// +build race\n\npackage decoder\n\nimport (\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nvar decMu sync.RWMutex\n\nfunc CompileToGetDecoder(typ *runtime.Type) (Decoder, error) {\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\tif typeptr > typeAddr.MaxTypeAddr {\n\t\treturn compileToGetDecoderSlowPath(typeptr, typ)\n\t}\n\n\tindex := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift\n\tdecMu.RLock()\n\tif dec := cachedDecoder[index]; dec != nil {\n\t\tdecMu.RUnlock()\n\t\treturn dec, nil\n\t}\n\tdecMu.RUnlock()\n\n\tdec, err := compileHead(typ, map[uintptr]Decoder{})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdecMu.Lock()\n\tcachedDecoder[index] = dec\n\tdecMu.Unlock()\n\treturn dec, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/context.go",
    "content": "package decoder\n\nimport (\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\ntype RuntimeContext struct {\n\tBuf    []byte\n\tOption *Option\n}\n\nvar (\n\truntimeContextPool = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn &RuntimeContext{\n\t\t\t\tOption: &Option{},\n\t\t\t}\n\t\t},\n\t}\n)\n\nfunc TakeRuntimeContext() *RuntimeContext {\n\treturn runtimeContextPool.Get().(*RuntimeContext)\n}\n\nfunc ReleaseRuntimeContext(ctx *RuntimeContext) {\n\truntimeContextPool.Put(ctx)\n}\n\nvar (\n\tisWhiteSpace = [256]bool{}\n)\n\nfunc init() {\n\tisWhiteSpace[' '] = true\n\tisWhiteSpace['\\n'] = true\n\tisWhiteSpace['\\t'] = true\n\tisWhiteSpace['\\r'] = true\n}\n\nfunc char(ptr unsafe.Pointer, offset int64) byte {\n\treturn *(*byte)(unsafe.Pointer(uintptr(ptr) + uintptr(offset)))\n}\n\nfunc skipWhiteSpace(buf []byte, cursor int64) int64 {\n\tfor isWhiteSpace[buf[cursor]] {\n\t\tcursor++\n\t}\n\treturn cursor\n}\n\nfunc skipObject(buf []byte, cursor, depth int64) (int64, error) {\n\tbraceCount := 1\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase '{':\n\t\t\tbraceCount++\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t\t\t}\n\t\tcase '}':\n\t\t\tdepth--\n\t\t\tbraceCount--\n\t\t\tif braceCount == 0 {\n\t\t\t\treturn cursor + 1, nil\n\t\t\t}\n\t\tcase '[':\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t\t\t}\n\t\tcase ']':\n\t\t\tdepth--\n\t\tcase '\"':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tswitch buf[cursor] {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tif buf[cursor] == nul {\n\t\t\t\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t\t}\n\t\t\t\tcase '\"':\n\t\t\t\t\tgoto SWITCH_OUT\n\t\t\t\tcase nul:\n\t\t\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nul:\n\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"object of object\", cursor)\n\t\t}\n\tSWITCH_OUT:\n\t\tcursor++\n\t}\n}\n\nfunc skipArray(buf []byte, cursor, depth int64) (int64, error) {\n\tbracketCount := 1\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase '[':\n\t\t\tbracketCount++\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t\t\t}\n\t\tcase ']':\n\t\t\tbracketCount--\n\t\t\tdepth--\n\t\t\tif bracketCount == 0 {\n\t\t\t\treturn cursor + 1, nil\n\t\t\t}\n\t\tcase '{':\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t\t\t}\n\t\tcase '}':\n\t\t\tdepth--\n\t\tcase '\"':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tswitch buf[cursor] {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tif buf[cursor] == nul {\n\t\t\t\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t\t}\n\t\t\t\tcase '\"':\n\t\t\t\t\tgoto SWITCH_OUT\n\t\t\t\tcase nul:\n\t\t\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nul:\n\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"array of object\", cursor)\n\t\t}\n\tSWITCH_OUT:\n\t\tcursor++\n\t}\n}\n\nfunc skipValue(buf []byte, cursor, depth int64) (int64, error) {\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\t', '\\n', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase '{':\n\t\t\treturn skipObject(buf, cursor+1, depth+1)\n\t\tcase '[':\n\t\t\treturn skipArray(buf, cursor+1, depth+1)\n\t\tcase '\"':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tswitch buf[cursor] {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tif buf[cursor] == nul {\n\t\t\t\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t\t}\n\t\t\t\tcase '\"':\n\t\t\t\t\treturn cursor + 1, nil\n\t\t\t\tcase nul:\n\t\t\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t}\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tif floatTable[buf[cursor]] {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn cursor, nil\n\t\tcase 't':\n\t\t\tif err := validateTrue(buf, cursor); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn cursor, nil\n\t\tcase 'f':\n\t\t\tif err := validateFalse(buf, cursor); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcursor += 5\n\t\t\treturn cursor, nil\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn cursor, nil\n\t\tdefault:\n\t\t\treturn cursor, errors.ErrUnexpectedEndOfJSON(\"null\", cursor)\n\t\t}\n\t}\n}\n\nfunc validateTrue(buf []byte, cursor int64) error {\n\tif cursor+3 >= int64(len(buf)) {\n\t\treturn errors.ErrUnexpectedEndOfJSON(\"true\", cursor)\n\t}\n\tif buf[cursor+1] != 'r' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+1], \"true\", cursor)\n\t}\n\tif buf[cursor+2] != 'u' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+2], \"true\", cursor)\n\t}\n\tif buf[cursor+3] != 'e' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+3], \"true\", cursor)\n\t}\n\treturn nil\n}\n\nfunc validateFalse(buf []byte, cursor int64) error {\n\tif cursor+4 >= int64(len(buf)) {\n\t\treturn errors.ErrUnexpectedEndOfJSON(\"false\", cursor)\n\t}\n\tif buf[cursor+1] != 'a' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+1], \"false\", cursor)\n\t}\n\tif buf[cursor+2] != 'l' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+2], \"false\", cursor)\n\t}\n\tif buf[cursor+3] != 's' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+3], \"false\", cursor)\n\t}\n\tif buf[cursor+4] != 'e' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+4], \"false\", cursor)\n\t}\n\treturn nil\n}\n\nfunc validateNull(buf []byte, cursor int64) error {\n\tif cursor+3 >= int64(len(buf)) {\n\t\treturn errors.ErrUnexpectedEndOfJSON(\"null\", cursor)\n\t}\n\tif buf[cursor+1] != 'u' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+1], \"null\", cursor)\n\t}\n\tif buf[cursor+2] != 'l' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+2], \"null\", cursor)\n\t}\n\tif buf[cursor+3] != 'l' {\n\t\treturn errors.ErrInvalidCharacter(buf[cursor+3], \"null\", cursor)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/float.go",
    "content": "package decoder\n\nimport (\n\t\"strconv\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\ntype floatDecoder struct {\n\top         func(unsafe.Pointer, float64)\n\tstructName string\n\tfieldName  string\n}\n\nfunc newFloatDecoder(structName, fieldName string, op func(unsafe.Pointer, float64)) *floatDecoder {\n\treturn &floatDecoder{op: op, structName: structName, fieldName: fieldName}\n}\n\nvar (\n\tfloatTable = [256]bool{\n\t\t'0': true,\n\t\t'1': true,\n\t\t'2': true,\n\t\t'3': true,\n\t\t'4': true,\n\t\t'5': true,\n\t\t'6': true,\n\t\t'7': true,\n\t\t'8': true,\n\t\t'9': true,\n\t\t'.': true,\n\t\t'e': true,\n\t\t'E': true,\n\t\t'+': true,\n\t\t'-': true,\n\t}\n\n\tvalidEndNumberChar = [256]bool{\n\t\tnul:  true,\n\t\t' ':  true,\n\t\t'\\t': true,\n\t\t'\\r': true,\n\t\t'\\n': true,\n\t\t',':  true,\n\t\t':':  true,\n\t\t'}':  true,\n\t\t']':  true,\n\t}\n)\n\nfunc floatBytes(s *Stream) []byte {\n\tstart := s.cursor\n\tfor {\n\t\ts.cursor++\n\t\tif floatTable[s.char()] {\n\t\t\tcontinue\n\t\t} else if s.char() == nul {\n\t\t\tif s.read() {\n\t\t\t\ts.cursor-- // for retry current character\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\treturn s.buf[start:s.cursor]\n}\n\nfunc (d *floatDecoder) decodeStreamByte(s *Stream) ([]byte, error) {\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn floatBytes(s), nil\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto ERROR\n\t\tdefault:\n\t\t\tgoto ERROR\n\t\t}\n\t}\nERROR:\n\treturn nil, errors.ErrUnexpectedEndOfJSON(\"float\", s.totalOffset())\n}\n\nfunc (d *floatDecoder) decodeByte(buf []byte, cursor int64) ([]byte, int64, error) {\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tstart := cursor\n\t\t\tcursor++\n\t\t\tfor floatTable[buf[cursor]] {\n\t\t\t\tcursor++\n\t\t\t}\n\t\t\tnum := buf[start:cursor]\n\t\t\treturn num, cursor, nil\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn nil, cursor, nil\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"float\", cursor)\n\t\t}\n\t}\n}\n\nfunc (d *floatDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tbytes, err := d.decodeStreamByte(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif bytes == nil {\n\t\treturn nil\n\t}\n\tstr := *(*string)(unsafe.Pointer(&bytes))\n\tf64, err := strconv.ParseFloat(str, 64)\n\tif err != nil {\n\t\treturn errors.ErrSyntax(err.Error(), s.totalOffset())\n\t}\n\td.op(p, f64)\n\treturn nil\n}\n\nfunc (d *floatDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tbytes, c, err := d.decodeByte(buf, cursor)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif bytes == nil {\n\t\treturn c, nil\n\t}\n\tcursor = c\n\tif !validEndNumberChar[buf[cursor]] {\n\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"float\", cursor)\n\t}\n\ts := *(*string)(unsafe.Pointer(&bytes))\n\tf64, err := strconv.ParseFloat(s, 64)\n\tif err != nil {\n\t\treturn 0, errors.ErrSyntax(err.Error(), cursor)\n\t}\n\td.op(p, f64)\n\treturn cursor, nil\n}\n\nfunc (d *floatDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\tbuf := ctx.Buf\n\tbytes, c, err := d.decodeByte(buf, cursor)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\tif bytes == nil {\n\t\treturn [][]byte{nullbytes}, c, nil\n\t}\n\treturn [][]byte{bytes}, c, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/func.go",
    "content": "package decoder\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype funcDecoder struct {\n\ttyp        *runtime.Type\n\tstructName string\n\tfieldName  string\n}\n\nfunc newFuncDecoder(typ *runtime.Type, structName, fieldName string) *funcDecoder {\n\tfnDecoder := &funcDecoder{typ, structName, fieldName}\n\treturn fnDecoder\n}\n\nfunc (d *funcDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\ts.skipWhiteSpace()\n\tstart := s.cursor\n\tif err := s.skipValue(depth); err != nil {\n\t\treturn err\n\t}\n\tsrc := s.buf[start:s.cursor]\n\tif len(src) > 0 {\n\t\tswitch src[0] {\n\t\tcase '\"':\n\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"string\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\tcase '[':\n\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"array\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\tcase '{':\n\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"object\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"number\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*(*unsafe.Pointer)(p) = nil\n\t\t\treturn nil\n\t\tcase 't':\n\t\t\tif err := trueBytes(s); err == nil {\n\t\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\t\tValue:  \"boolean\",\n\t\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\t\tOffset: s.totalOffset(),\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'f':\n\t\t\tif err := falseBytes(s); err == nil {\n\t\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\t\tValue:  \"boolean\",\n\t\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\t\tOffset: s.totalOffset(),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn errors.ErrInvalidBeginningOfValue(s.buf[s.cursor], s.totalOffset())\n}\n\nfunc (d *funcDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tstart := cursor\n\tend, err := skipValue(buf, cursor, depth)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tsrc := buf[start:end]\n\tif len(src) > 0 {\n\t\tswitch src[0] {\n\t\tcase '\"':\n\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"string\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: start,\n\t\t\t}\n\t\tcase '[':\n\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"array\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: start,\n\t\t\t}\n\t\tcase '{':\n\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"object\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: start,\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"number\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: start,\n\t\t\t}\n\t\tcase 'n':\n\t\t\tif bytes.Equal(src, nullbytes) {\n\t\t\t\t*(*unsafe.Pointer)(p) = nil\n\t\t\t\treturn end, nil\n\t\t\t}\n\t\tcase 't':\n\t\t\tif err := validateTrue(buf, start); err == nil {\n\t\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\t\tValue:  \"boolean\",\n\t\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\t\tOffset: start,\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'f':\n\t\t\tif err := validateFalse(buf, start); err == nil {\n\t\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\t\tValue:  \"boolean\",\n\t\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\t\tOffset: start,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)\n}\n\nfunc (d *funcDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: func decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/int.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype intDecoder struct {\n\ttyp        *runtime.Type\n\tkind       reflect.Kind\n\top         func(unsafe.Pointer, int64)\n\tstructName string\n\tfieldName  string\n}\n\nfunc newIntDecoder(typ *runtime.Type, structName, fieldName string, op func(unsafe.Pointer, int64)) *intDecoder {\n\treturn &intDecoder{\n\t\ttyp:        typ,\n\t\tkind:       typ.Kind(),\n\t\top:         op,\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *intDecoder) typeError(buf []byte, offset int64) *errors.UnmarshalTypeError {\n\treturn &errors.UnmarshalTypeError{\n\t\tValue:  fmt.Sprintf(\"number %s\", string(buf)),\n\t\tType:   runtime.RType2Type(d.typ),\n\t\tStruct: d.structName,\n\t\tField:  d.fieldName,\n\t\tOffset: offset,\n\t}\n}\n\nvar (\n\tpow10i64 = [...]int64{\n\t\t1e00, 1e01, 1e02, 1e03, 1e04, 1e05, 1e06, 1e07, 1e08, 1e09,\n\t\t1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18,\n\t}\n\tpow10i64Len = len(pow10i64)\n)\n\nfunc (d *intDecoder) parseInt(b []byte) (int64, error) {\n\tisNegative := false\n\tif b[0] == '-' {\n\t\tb = b[1:]\n\t\tisNegative = true\n\t}\n\tmaxDigit := len(b)\n\tif maxDigit > pow10i64Len {\n\t\treturn 0, fmt.Errorf(\"invalid length of number\")\n\t}\n\tsum := int64(0)\n\tfor i := 0; i < maxDigit; i++ {\n\t\tc := int64(b[i]) - 48\n\t\tdigitValue := pow10i64[maxDigit-i-1]\n\t\tsum += c * digitValue\n\t}\n\tif isNegative {\n\t\treturn -1 * sum, nil\n\t}\n\treturn sum, nil\n}\n\nvar (\n\tnumTable = [256]bool{\n\t\t'0': true,\n\t\t'1': true,\n\t\t'2': true,\n\t\t'3': true,\n\t\t'4': true,\n\t\t'5': true,\n\t\t'6': true,\n\t\t'7': true,\n\t\t'8': true,\n\t\t'9': true,\n\t}\n)\n\nvar (\n\tnumZeroBuf = []byte{'0'}\n)\n\nfunc (d *intDecoder) decodeStreamByte(s *Stream) ([]byte, error) {\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase '-':\n\t\t\tstart := s.cursor\n\t\t\tfor {\n\t\t\t\ts.cursor++\n\t\t\t\tif numTable[s.char()] {\n\t\t\t\t\tcontinue\n\t\t\t\t} else if s.char() == nul {\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\ts.cursor-- // for retry current character\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tnum := s.buf[start:s.cursor]\n\t\t\tif len(num) < 2 {\n\t\t\t\tgoto ERROR\n\t\t\t}\n\t\t\treturn num, nil\n\t\tcase '0':\n\t\t\ts.cursor++\n\t\t\treturn numZeroBuf, nil\n\t\tcase '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tstart := s.cursor\n\t\t\tfor {\n\t\t\t\ts.cursor++\n\t\t\t\tif numTable[s.char()] {\n\t\t\t\t\tcontinue\n\t\t\t\t} else if s.char() == nul {\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\ts.cursor-- // for retry current character\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tnum := s.buf[start:s.cursor]\n\t\t\treturn num, nil\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto ERROR\n\t\tdefault:\n\t\t\treturn nil, d.typeError([]byte{s.char()}, s.totalOffset())\n\t\t}\n\t}\nERROR:\n\treturn nil, errors.ErrUnexpectedEndOfJSON(\"number(integer)\", s.totalOffset())\n}\n\nfunc (d *intDecoder) decodeByte(buf []byte, cursor int64) ([]byte, int64, error) {\n\tb := (*sliceHeader)(unsafe.Pointer(&buf)).data\n\tfor {\n\t\tswitch char(b, cursor) {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase '0':\n\t\t\tcursor++\n\t\t\treturn numZeroBuf, cursor, nil\n\t\tcase '-', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tstart := cursor\n\t\t\tcursor++\n\t\t\tfor numTable[char(b, cursor)] {\n\t\t\t\tcursor++\n\t\t\t}\n\t\t\tnum := buf[start:cursor]\n\t\t\treturn num, cursor, nil\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn nil, cursor, nil\n\t\tdefault:\n\t\t\treturn nil, 0, d.typeError([]byte{char(b, cursor)}, cursor)\n\t\t}\n\t}\n}\n\nfunc (d *intDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tbytes, err := d.decodeStreamByte(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif bytes == nil {\n\t\treturn nil\n\t}\n\ti64, err := d.parseInt(bytes)\n\tif err != nil {\n\t\treturn d.typeError(bytes, s.totalOffset())\n\t}\n\tswitch d.kind {\n\tcase reflect.Int8:\n\t\tif i64 < -1*(1<<7) || (1<<7) <= i64 {\n\t\t\treturn d.typeError(bytes, s.totalOffset())\n\t\t}\n\tcase reflect.Int16:\n\t\tif i64 < -1*(1<<15) || (1<<15) <= i64 {\n\t\t\treturn d.typeError(bytes, s.totalOffset())\n\t\t}\n\tcase reflect.Int32:\n\t\tif i64 < -1*(1<<31) || (1<<31) <= i64 {\n\t\t\treturn d.typeError(bytes, s.totalOffset())\n\t\t}\n\t}\n\td.op(p, i64)\n\ts.reset()\n\treturn nil\n}\n\nfunc (d *intDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbytes, c, err := d.decodeByte(ctx.Buf, cursor)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif bytes == nil {\n\t\treturn c, nil\n\t}\n\tcursor = c\n\n\ti64, err := d.parseInt(bytes)\n\tif err != nil {\n\t\treturn 0, d.typeError(bytes, cursor)\n\t}\n\tswitch d.kind {\n\tcase reflect.Int8:\n\t\tif i64 < -1*(1<<7) || (1<<7) <= i64 {\n\t\t\treturn 0, d.typeError(bytes, cursor)\n\t\t}\n\tcase reflect.Int16:\n\t\tif i64 < -1*(1<<15) || (1<<15) <= i64 {\n\t\t\treturn 0, d.typeError(bytes, cursor)\n\t\t}\n\tcase reflect.Int32:\n\t\tif i64 < -1*(1<<31) || (1<<31) <= i64 {\n\t\t\treturn 0, d.typeError(bytes, cursor)\n\t\t}\n\t}\n\td.op(p, i64)\n\treturn cursor, nil\n}\n\nfunc (d *intDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: int decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/interface.go",
    "content": "package decoder\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype interfaceDecoder struct {\n\ttyp           *runtime.Type\n\tstructName    string\n\tfieldName     string\n\tsliceDecoder  *sliceDecoder\n\tmapDecoder    *mapDecoder\n\tfloatDecoder  *floatDecoder\n\tnumberDecoder *numberDecoder\n\tstringDecoder *stringDecoder\n}\n\nfunc newEmptyInterfaceDecoder(structName, fieldName string) *interfaceDecoder {\n\tifaceDecoder := &interfaceDecoder{\n\t\ttyp:        emptyInterfaceType,\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t\tfloatDecoder: newFloatDecoder(structName, fieldName, func(p unsafe.Pointer, v float64) {\n\t\t\t*(*interface{})(p) = v\n\t\t}),\n\t\tnumberDecoder: newNumberDecoder(structName, fieldName, func(p unsafe.Pointer, v json.Number) {\n\t\t\t*(*interface{})(p) = v\n\t\t}),\n\t\tstringDecoder: newStringDecoder(structName, fieldName),\n\t}\n\tifaceDecoder.sliceDecoder = newSliceDecoder(\n\t\tifaceDecoder,\n\t\temptyInterfaceType,\n\t\temptyInterfaceType.Size(),\n\t\tstructName, fieldName,\n\t)\n\tifaceDecoder.mapDecoder = newMapDecoder(\n\t\tinterfaceMapType,\n\t\tstringType,\n\t\tifaceDecoder.stringDecoder,\n\t\tinterfaceMapType.Elem(),\n\t\tifaceDecoder,\n\t\tstructName,\n\t\tfieldName,\n\t)\n\treturn ifaceDecoder\n}\n\nfunc newInterfaceDecoder(typ *runtime.Type, structName, fieldName string) *interfaceDecoder {\n\temptyIfaceDecoder := newEmptyInterfaceDecoder(structName, fieldName)\n\tstringDecoder := newStringDecoder(structName, fieldName)\n\treturn &interfaceDecoder{\n\t\ttyp:        typ,\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t\tsliceDecoder: newSliceDecoder(\n\t\t\temptyIfaceDecoder,\n\t\t\temptyInterfaceType,\n\t\t\temptyInterfaceType.Size(),\n\t\t\tstructName, fieldName,\n\t\t),\n\t\tmapDecoder: newMapDecoder(\n\t\t\tinterfaceMapType,\n\t\t\tstringType,\n\t\t\tstringDecoder,\n\t\t\tinterfaceMapType.Elem(),\n\t\t\temptyIfaceDecoder,\n\t\t\tstructName,\n\t\t\tfieldName,\n\t\t),\n\t\tfloatDecoder: newFloatDecoder(structName, fieldName, func(p unsafe.Pointer, v float64) {\n\t\t\t*(*interface{})(p) = v\n\t\t}),\n\t\tnumberDecoder: newNumberDecoder(structName, fieldName, func(p unsafe.Pointer, v json.Number) {\n\t\t\t*(*interface{})(p) = v\n\t\t}),\n\t\tstringDecoder: stringDecoder,\n\t}\n}\n\nfunc (d *interfaceDecoder) numDecoder(s *Stream) Decoder {\n\tif s.UseNumber {\n\t\treturn d.numberDecoder\n\t}\n\treturn d.floatDecoder\n}\n\nvar (\n\temptyInterfaceType = runtime.Type2RType(reflect.TypeOf((*interface{})(nil)).Elem())\n\tEmptyInterfaceType = emptyInterfaceType\n\tinterfaceMapType   = runtime.Type2RType(\n\t\treflect.TypeOf((*map[string]interface{})(nil)).Elem(),\n\t)\n\tstringType = runtime.Type2RType(\n\t\treflect.TypeOf(\"\"),\n\t)\n)\n\nfunc decodeStreamUnmarshaler(s *Stream, depth int64, unmarshaler json.Unmarshaler) error {\n\tstart := s.cursor\n\tif err := s.skipValue(depth); err != nil {\n\t\treturn err\n\t}\n\tsrc := s.buf[start:s.cursor]\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tif err := unmarshaler.UnmarshalJSON(dst); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc decodeStreamUnmarshalerContext(s *Stream, depth int64, unmarshaler unmarshalerContext) error {\n\tstart := s.cursor\n\tif err := s.skipValue(depth); err != nil {\n\t\treturn err\n\t}\n\tsrc := s.buf[start:s.cursor]\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tif err := unmarshaler.UnmarshalJSON(s.Option.Context, dst); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc decodeUnmarshaler(buf []byte, cursor, depth int64, unmarshaler json.Unmarshaler) (int64, error) {\n\tcursor = skipWhiteSpace(buf, cursor)\n\tstart := cursor\n\tend, err := skipValue(buf, cursor, depth)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tsrc := buf[start:end]\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tif err := unmarshaler.UnmarshalJSON(dst); err != nil {\n\t\treturn 0, err\n\t}\n\treturn end, nil\n}\n\nfunc decodeUnmarshalerContext(ctx *RuntimeContext, buf []byte, cursor, depth int64, unmarshaler unmarshalerContext) (int64, error) {\n\tcursor = skipWhiteSpace(buf, cursor)\n\tstart := cursor\n\tend, err := skipValue(buf, cursor, depth)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tsrc := buf[start:end]\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tif err := unmarshaler.UnmarshalJSON(ctx.Option.Context, dst); err != nil {\n\t\treturn 0, err\n\t}\n\treturn end, nil\n}\n\nfunc decodeStreamTextUnmarshaler(s *Stream, depth int64, unmarshaler encoding.TextUnmarshaler, p unsafe.Pointer) error {\n\tstart := s.cursor\n\tif err := s.skipValue(depth); err != nil {\n\t\treturn err\n\t}\n\tsrc := s.buf[start:s.cursor]\n\tif bytes.Equal(src, nullbytes) {\n\t\t*(*unsafe.Pointer)(p) = nil\n\t\treturn nil\n\t}\n\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tif err := unmarshaler.UnmarshalText(dst); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc decodeTextUnmarshaler(buf []byte, cursor, depth int64, unmarshaler encoding.TextUnmarshaler, p unsafe.Pointer) (int64, error) {\n\tcursor = skipWhiteSpace(buf, cursor)\n\tstart := cursor\n\tend, err := skipValue(buf, cursor, depth)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tsrc := buf[start:end]\n\tif bytes.Equal(src, nullbytes) {\n\t\t*(*unsafe.Pointer)(p) = nil\n\t\treturn end, nil\n\t}\n\tif s, ok := unquoteBytes(src); ok {\n\t\tsrc = s\n\t}\n\tif err := unmarshaler.UnmarshalText(src); err != nil {\n\t\treturn 0, err\n\t}\n\treturn end, nil\n}\n\nfunc (d *interfaceDecoder) decodeStreamEmptyInterface(s *Stream, depth int64, p unsafe.Pointer) error {\n\tc := s.skipWhiteSpace()\n\tfor {\n\t\tswitch c {\n\t\tcase '{':\n\t\t\tvar v map[string]interface{}\n\t\t\tptr := unsafe.Pointer(&v)\n\t\t\tif err := d.mapDecoder.DecodeStream(s, depth, ptr); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*(*interface{})(p) = v\n\t\t\treturn nil\n\t\tcase '[':\n\t\t\tvar v []interface{}\n\t\t\tptr := unsafe.Pointer(&v)\n\t\t\tif err := d.sliceDecoder.DecodeStream(s, depth, ptr); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*(*interface{})(p) = v\n\t\t\treturn nil\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn d.numDecoder(s).DecodeStream(s, depth, p)\n\t\tcase '\"':\n\t\t\ts.cursor++\n\t\t\tstart := s.cursor\n\t\t\tfor {\n\t\t\t\tswitch s.char() {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tif _, err := decodeEscapeString(s, nil); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\tcase '\"':\n\t\t\t\t\tliteral := s.buf[start:s.cursor]\n\t\t\t\t\ts.cursor++\n\t\t\t\t\t*(*interface{})(p) = string(literal)\n\t\t\t\t\treturn nil\n\t\t\t\tcase nul:\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t\t\t\t}\n\t\t\t\ts.cursor++\n\t\t\t}\n\t\tcase 't':\n\t\t\tif err := trueBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t**(**interface{})(unsafe.Pointer(&p)) = true\n\t\t\treturn nil\n\t\tcase 'f':\n\t\t\tif err := falseBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t**(**interface{})(unsafe.Pointer(&p)) = false\n\t\t\treturn nil\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*(*interface{})(p) = nil\n\t\t\treturn nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tc = s.char()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\treturn errors.ErrInvalidBeginningOfValue(c, s.totalOffset())\n}\n\ntype emptyInterface struct {\n\ttyp *runtime.Type\n\tptr unsafe.Pointer\n}\n\nfunc (d *interfaceDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\truntimeInterfaceValue := *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: d.typ,\n\t\tptr: p,\n\t}))\n\trv := reflect.ValueOf(runtimeInterfaceValue)\n\tif rv.NumMethod() > 0 && rv.CanInterface() {\n\t\tif u, ok := rv.Interface().(unmarshalerContext); ok {\n\t\t\treturn decodeStreamUnmarshalerContext(s, depth, u)\n\t\t}\n\t\tif u, ok := rv.Interface().(json.Unmarshaler); ok {\n\t\t\treturn decodeStreamUnmarshaler(s, depth, u)\n\t\t}\n\t\tif u, ok := rv.Interface().(encoding.TextUnmarshaler); ok {\n\t\t\treturn decodeStreamTextUnmarshaler(s, depth, u, p)\n\t\t}\n\t\tif s.skipWhiteSpace() == 'n' {\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*(*interface{})(p) = nil\n\t\t\treturn nil\n\t\t}\n\t\treturn d.errUnmarshalType(rv.Type(), s.totalOffset())\n\t}\n\tiface := rv.Interface()\n\tifaceHeader := (*emptyInterface)(unsafe.Pointer(&iface))\n\ttyp := ifaceHeader.typ\n\tif ifaceHeader.ptr == nil || d.typ == typ || typ == nil {\n\t\t// concrete type is empty interface\n\t\treturn d.decodeStreamEmptyInterface(s, depth, p)\n\t}\n\tif typ.Kind() == reflect.Ptr && typ.Elem() == d.typ || typ.Kind() != reflect.Ptr {\n\t\treturn d.decodeStreamEmptyInterface(s, depth, p)\n\t}\n\tif s.skipWhiteSpace() == 'n' {\n\t\tif err := nullBytes(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*(*interface{})(p) = nil\n\t\treturn nil\n\t}\n\tdecoder, err := CompileToGetDecoder(typ)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn decoder.DecodeStream(s, depth, ifaceHeader.ptr)\n}\n\nfunc (d *interfaceDecoder) errUnmarshalType(typ reflect.Type, offset int64) *errors.UnmarshalTypeError {\n\treturn &errors.UnmarshalTypeError{\n\t\tValue:  typ.String(),\n\t\tType:   typ,\n\t\tOffset: offset,\n\t\tStruct: d.structName,\n\t\tField:  d.fieldName,\n\t}\n}\n\nfunc (d *interfaceDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\truntimeInterfaceValue := *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: d.typ,\n\t\tptr: p,\n\t}))\n\trv := reflect.ValueOf(runtimeInterfaceValue)\n\tif rv.NumMethod() > 0 && rv.CanInterface() {\n\t\tif u, ok := rv.Interface().(unmarshalerContext); ok {\n\t\t\treturn decodeUnmarshalerContext(ctx, buf, cursor, depth, u)\n\t\t}\n\t\tif u, ok := rv.Interface().(json.Unmarshaler); ok {\n\t\t\treturn decodeUnmarshaler(buf, cursor, depth, u)\n\t\t}\n\t\tif u, ok := rv.Interface().(encoding.TextUnmarshaler); ok {\n\t\t\treturn decodeTextUnmarshaler(buf, cursor, depth, u, p)\n\t\t}\n\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\tif buf[cursor] == 'n' {\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\t**(**interface{})(unsafe.Pointer(&p)) = nil\n\t\t\treturn cursor, nil\n\t\t}\n\t\treturn 0, d.errUnmarshalType(rv.Type(), cursor)\n\t}\n\n\tiface := rv.Interface()\n\tifaceHeader := (*emptyInterface)(unsafe.Pointer(&iface))\n\ttyp := ifaceHeader.typ\n\tif ifaceHeader.ptr == nil || d.typ == typ || typ == nil {\n\t\t// concrete type is empty interface\n\t\treturn d.decodeEmptyInterface(ctx, cursor, depth, p)\n\t}\n\tif typ.Kind() == reflect.Ptr && typ.Elem() == d.typ || typ.Kind() != reflect.Ptr {\n\t\treturn d.decodeEmptyInterface(ctx, cursor, depth, p)\n\t}\n\tcursor = skipWhiteSpace(buf, cursor)\n\tif buf[cursor] == 'n' {\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 4\n\t\t**(**interface{})(unsafe.Pointer(&p)) = nil\n\t\treturn cursor, nil\n\t}\n\tdecoder, err := CompileToGetDecoder(typ)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn decoder.Decode(ctx, cursor, depth, ifaceHeader.ptr)\n}\n\nfunc (d *interfaceDecoder) decodeEmptyInterface(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tswitch buf[cursor] {\n\tcase '{':\n\t\tvar v map[string]interface{}\n\t\tptr := unsafe.Pointer(&v)\n\t\tcursor, err := d.mapDecoder.Decode(ctx, cursor, depth, ptr)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\t**(**interface{})(unsafe.Pointer(&p)) = v\n\t\treturn cursor, nil\n\tcase '[':\n\t\tvar v []interface{}\n\t\tptr := unsafe.Pointer(&v)\n\t\tcursor, err := d.sliceDecoder.Decode(ctx, cursor, depth, ptr)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\t**(**interface{})(unsafe.Pointer(&p)) = v\n\t\treturn cursor, nil\n\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\treturn d.floatDecoder.Decode(ctx, cursor, depth, p)\n\tcase '\"':\n\t\tvar v string\n\t\tptr := unsafe.Pointer(&v)\n\t\tcursor, err := d.stringDecoder.Decode(ctx, cursor, depth, ptr)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\t**(**interface{})(unsafe.Pointer(&p)) = v\n\t\treturn cursor, nil\n\tcase 't':\n\t\tif err := validateTrue(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 4\n\t\t**(**interface{})(unsafe.Pointer(&p)) = true\n\t\treturn cursor, nil\n\tcase 'f':\n\t\tif err := validateFalse(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 5\n\t\t**(**interface{})(unsafe.Pointer(&p)) = false\n\t\treturn cursor, nil\n\tcase 'n':\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 4\n\t\t**(**interface{})(unsafe.Pointer(&p)) = nil\n\t\treturn cursor, nil\n\t}\n\treturn cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)\n}\n\nfunc NewPathDecoder() Decoder {\n\tifaceDecoder := &interfaceDecoder{\n\t\ttyp:        emptyInterfaceType,\n\t\tstructName: \"\",\n\t\tfieldName:  \"\",\n\t\tfloatDecoder: newFloatDecoder(\"\", \"\", func(p unsafe.Pointer, v float64) {\n\t\t\t*(*interface{})(p) = v\n\t\t}),\n\t\tnumberDecoder: newNumberDecoder(\"\", \"\", func(p unsafe.Pointer, v json.Number) {\n\t\t\t*(*interface{})(p) = v\n\t\t}),\n\t\tstringDecoder: newStringDecoder(\"\", \"\"),\n\t}\n\tifaceDecoder.sliceDecoder = newSliceDecoder(\n\t\tifaceDecoder,\n\t\temptyInterfaceType,\n\t\temptyInterfaceType.Size(),\n\t\t\"\", \"\",\n\t)\n\tifaceDecoder.mapDecoder = newMapDecoder(\n\t\tinterfaceMapType,\n\t\tstringType,\n\t\tifaceDecoder.stringDecoder,\n\t\tinterfaceMapType.Elem(),\n\t\tifaceDecoder,\n\t\t\"\", \"\",\n\t)\n\treturn ifaceDecoder\n}\n\nvar (\n\ttruebytes  = []byte(\"true\")\n\tfalsebytes = []byte(\"false\")\n)\n\nfunc (d *interfaceDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tswitch buf[cursor] {\n\tcase '{':\n\t\treturn d.mapDecoder.DecodePath(ctx, cursor, depth)\n\tcase '[':\n\t\treturn d.sliceDecoder.DecodePath(ctx, cursor, depth)\n\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\treturn d.floatDecoder.DecodePath(ctx, cursor, depth)\n\tcase '\"':\n\t\treturn d.stringDecoder.DecodePath(ctx, cursor, depth)\n\tcase 't':\n\t\tif err := validateTrue(buf, cursor); err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor += 4\n\t\treturn [][]byte{truebytes}, cursor, nil\n\tcase 'f':\n\t\tif err := validateFalse(buf, cursor); err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor += 5\n\t\treturn [][]byte{falsebytes}, cursor, nil\n\tcase 'n':\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor += 4\n\t\treturn [][]byte{nullbytes}, cursor, nil\n\t}\n\treturn nil, cursor, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/invalid.go",
    "content": "package decoder\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype invalidDecoder struct {\n\ttyp        *runtime.Type\n\tkind       reflect.Kind\n\tstructName string\n\tfieldName  string\n}\n\nfunc newInvalidDecoder(typ *runtime.Type, structName, fieldName string) *invalidDecoder {\n\treturn &invalidDecoder{\n\t\ttyp:        typ,\n\t\tkind:       typ.Kind(),\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *invalidDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\treturn &errors.UnmarshalTypeError{\n\t\tValue:  \"object\",\n\t\tType:   runtime.RType2Type(d.typ),\n\t\tOffset: s.totalOffset(),\n\t\tStruct: d.structName,\n\t\tField:  d.fieldName,\n\t}\n}\n\nfunc (d *invalidDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\treturn 0, &errors.UnmarshalTypeError{\n\t\tValue:  \"object\",\n\t\tType:   runtime.RType2Type(d.typ),\n\t\tOffset: cursor,\n\t\tStruct: d.structName,\n\t\tField:  d.fieldName,\n\t}\n}\n\nfunc (d *invalidDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, &errors.UnmarshalTypeError{\n\t\tValue:  \"object\",\n\t\tType:   runtime.RType2Type(d.typ),\n\t\tOffset: cursor,\n\t\tStruct: d.structName,\n\t\tField:  d.fieldName,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/map.go",
    "content": "package decoder\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype mapDecoder struct {\n\tmapType                 *runtime.Type\n\tkeyType                 *runtime.Type\n\tvalueType               *runtime.Type\n\tcanUseAssignFaststrType bool\n\tkeyDecoder              Decoder\n\tvalueDecoder            Decoder\n\tstructName              string\n\tfieldName               string\n}\n\nfunc newMapDecoder(mapType *runtime.Type, keyType *runtime.Type, keyDec Decoder, valueType *runtime.Type, valueDec Decoder, structName, fieldName string) *mapDecoder {\n\treturn &mapDecoder{\n\t\tmapType:                 mapType,\n\t\tkeyDecoder:              keyDec,\n\t\tkeyType:                 keyType,\n\t\tcanUseAssignFaststrType: canUseAssignFaststrType(keyType, valueType),\n\t\tvalueType:               valueType,\n\t\tvalueDecoder:            valueDec,\n\t\tstructName:              structName,\n\t\tfieldName:               fieldName,\n\t}\n}\n\nconst (\n\tmapMaxElemSize = 128\n)\n\n// See detail: https://github.com/goccy/go-json/pull/283\nfunc canUseAssignFaststrType(key *runtime.Type, value *runtime.Type) bool {\n\tindirectElem := value.Size() > mapMaxElemSize\n\tif indirectElem {\n\t\treturn false\n\t}\n\treturn key.Kind() == reflect.String\n}\n\n//go:linkname makemap reflect.makemap\nfunc makemap(*runtime.Type, int) unsafe.Pointer\n\n//nolint:golint\n//go:linkname mapassign_faststr runtime.mapassign_faststr\n//go:noescape\nfunc mapassign_faststr(t *runtime.Type, m unsafe.Pointer, s string) unsafe.Pointer\n\n//go:linkname mapassign reflect.mapassign\n//go:noescape\nfunc mapassign(t *runtime.Type, m unsafe.Pointer, k, v unsafe.Pointer)\n\nfunc (d *mapDecoder) mapassign(t *runtime.Type, m, k, v unsafe.Pointer) {\n\tif d.canUseAssignFaststrType {\n\t\tmapV := mapassign_faststr(t, m, *(*string)(k))\n\t\ttypedmemmove(d.valueType, mapV, v)\n\t} else {\n\t\tmapassign(t, m, k, v)\n\t}\n}\n\nfunc (d *mapDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t}\n\n\tswitch s.skipWhiteSpace() {\n\tcase 'n':\n\t\tif err := nullBytes(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t**(**unsafe.Pointer)(unsafe.Pointer(&p)) = nil\n\t\treturn nil\n\tcase '{':\n\tdefault:\n\t\treturn errors.ErrExpected(\"{ character for map value\", s.totalOffset())\n\t}\n\tmapValue := *(*unsafe.Pointer)(p)\n\tif mapValue == nil {\n\t\tmapValue = makemap(d.mapType, 0)\n\t}\n\ts.cursor++\n\tif s.skipWhiteSpace() == '}' {\n\t\t*(*unsafe.Pointer)(p) = mapValue\n\t\ts.cursor++\n\t\treturn nil\n\t}\n\tfor {\n\t\tk := unsafe_New(d.keyType)\n\t\tif err := d.keyDecoder.DecodeStream(s, depth, k); err != nil {\n\t\t\treturn err\n\t\t}\n\t\ts.skipWhiteSpace()\n\t\tif !s.equalChar(':') {\n\t\t\treturn errors.ErrExpected(\"colon after object key\", s.totalOffset())\n\t\t}\n\t\ts.cursor++\n\t\tv := unsafe_New(d.valueType)\n\t\tif err := d.valueDecoder.DecodeStream(s, depth, v); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.mapassign(d.mapType, mapValue, k, v)\n\t\ts.skipWhiteSpace()\n\t\tif s.equalChar('}') {\n\t\t\t**(**unsafe.Pointer)(unsafe.Pointer(&p)) = mapValue\n\t\t\ts.cursor++\n\t\t\treturn nil\n\t\t}\n\t\tif !s.equalChar(',') {\n\t\t\treturn errors.ErrExpected(\"comma after object value\", s.totalOffset())\n\t\t}\n\t\ts.cursor++\n\t}\n}\n\nfunc (d *mapDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t}\n\n\tcursor = skipWhiteSpace(buf, cursor)\n\tbuflen := int64(len(buf))\n\tif buflen < 2 {\n\t\treturn 0, errors.ErrExpected(\"{} for map\", cursor)\n\t}\n\tswitch buf[cursor] {\n\tcase 'n':\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 4\n\t\t**(**unsafe.Pointer)(unsafe.Pointer(&p)) = nil\n\t\treturn cursor, nil\n\tcase '{':\n\tdefault:\n\t\treturn 0, errors.ErrExpected(\"{ character for map value\", cursor)\n\t}\n\tcursor++\n\tcursor = skipWhiteSpace(buf, cursor)\n\tmapValue := *(*unsafe.Pointer)(p)\n\tif mapValue == nil {\n\t\tmapValue = makemap(d.mapType, 0)\n\t}\n\tif buf[cursor] == '}' {\n\t\t**(**unsafe.Pointer)(unsafe.Pointer(&p)) = mapValue\n\t\tcursor++\n\t\treturn cursor, nil\n\t}\n\tfor {\n\t\tk := unsafe_New(d.keyType)\n\t\tkeyCursor, err := d.keyDecoder.Decode(ctx, cursor, depth, k)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(buf, keyCursor)\n\t\tif buf[cursor] != ':' {\n\t\t\treturn 0, errors.ErrExpected(\"colon after object key\", cursor)\n\t\t}\n\t\tcursor++\n\t\tv := unsafe_New(d.valueType)\n\t\tvalueCursor, err := d.valueDecoder.Decode(ctx, cursor, depth, v)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\td.mapassign(d.mapType, mapValue, k, v)\n\t\tcursor = skipWhiteSpace(buf, valueCursor)\n\t\tif buf[cursor] == '}' {\n\t\t\t**(**unsafe.Pointer)(unsafe.Pointer(&p)) = mapValue\n\t\t\tcursor++\n\t\t\treturn cursor, nil\n\t\t}\n\t\tif buf[cursor] != ',' {\n\t\t\treturn 0, errors.ErrExpected(\"comma after object value\", cursor)\n\t\t}\n\t\tcursor++\n\t}\n}\n\nfunc (d *mapDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\tbuf := ctx.Buf\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn nil, 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t}\n\n\tcursor = skipWhiteSpace(buf, cursor)\n\tbuflen := int64(len(buf))\n\tif buflen < 2 {\n\t\treturn nil, 0, errors.ErrExpected(\"{} for map\", cursor)\n\t}\n\tswitch buf[cursor] {\n\tcase 'n':\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor += 4\n\t\treturn [][]byte{nullbytes}, cursor, nil\n\tcase '{':\n\tdefault:\n\t\treturn nil, 0, errors.ErrExpected(\"{ character for map value\", cursor)\n\t}\n\tcursor++\n\tcursor = skipWhiteSpace(buf, cursor)\n\tif buf[cursor] == '}' {\n\t\tcursor++\n\t\treturn nil, cursor, nil\n\t}\n\tkeyDecoder, ok := d.keyDecoder.(*stringDecoder)\n\tif !ok {\n\t\treturn nil, 0, &errors.UnmarshalTypeError{\n\t\t\tValue:  \"string\",\n\t\t\tType:   reflect.TypeOf(\"\"),\n\t\t\tOffset: cursor,\n\t\t\tStruct: d.structName,\n\t\t\tField:  d.fieldName,\n\t\t}\n\t}\n\tret := [][]byte{}\n\tfor {\n\t\tkey, keyCursor, err := keyDecoder.decodeByte(buf, cursor)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(buf, keyCursor)\n\t\tif buf[cursor] != ':' {\n\t\t\treturn nil, 0, errors.ErrExpected(\"colon after object key\", cursor)\n\t\t}\n\t\tcursor++\n\t\tchild, found, err := ctx.Option.Path.Field(string(key))\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tif found {\n\t\t\tif child != nil {\n\t\t\t\toldPath := ctx.Option.Path.node\n\t\t\t\tctx.Option.Path.node = child\n\t\t\t\tpaths, c, err := d.valueDecoder.DecodePath(ctx, cursor, depth)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, 0, err\n\t\t\t\t}\n\t\t\t\tctx.Option.Path.node = oldPath\n\t\t\t\tret = append(ret, paths...)\n\t\t\t\tcursor = c\n\t\t\t} else {\n\t\t\t\tstart := cursor\n\t\t\t\tend, err := skipValue(buf, cursor, depth)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, 0, err\n\t\t\t\t}\n\t\t\t\tret = append(ret, buf[start:end])\n\t\t\t\tcursor = end\n\t\t\t}\n\t\t} else {\n\t\t\tc, err := skipValue(buf, cursor, depth)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tcursor = c\n\t\t}\n\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\tif buf[cursor] == '}' {\n\t\t\tcursor++\n\t\t\treturn ret, cursor, nil\n\t\t}\n\t\tif buf[cursor] != ',' {\n\t\t\treturn nil, 0, errors.ErrExpected(\"comma after object value\", cursor)\n\t\t}\n\t\tcursor++\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/number.go",
    "content": "package decoder\n\nimport (\n\t\"encoding/json\"\n\t\"strconv\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\ntype numberDecoder struct {\n\tstringDecoder *stringDecoder\n\top            func(unsafe.Pointer, json.Number)\n\tstructName    string\n\tfieldName     string\n}\n\nfunc newNumberDecoder(structName, fieldName string, op func(unsafe.Pointer, json.Number)) *numberDecoder {\n\treturn &numberDecoder{\n\t\tstringDecoder: newStringDecoder(structName, fieldName),\n\t\top:            op,\n\t\tstructName:    structName,\n\t\tfieldName:     fieldName,\n\t}\n}\n\nfunc (d *numberDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tbytes, err := d.decodeStreamByte(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err := strconv.ParseFloat(*(*string)(unsafe.Pointer(&bytes)), 64); err != nil {\n\t\treturn errors.ErrSyntax(err.Error(), s.totalOffset())\n\t}\n\td.op(p, json.Number(string(bytes)))\n\ts.reset()\n\treturn nil\n}\n\nfunc (d *numberDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbytes, c, err := d.decodeByte(ctx.Buf, cursor)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif _, err := strconv.ParseFloat(*(*string)(unsafe.Pointer(&bytes)), 64); err != nil {\n\t\treturn 0, errors.ErrSyntax(err.Error(), c)\n\t}\n\tcursor = c\n\ts := *(*string)(unsafe.Pointer(&bytes))\n\td.op(p, json.Number(s))\n\treturn cursor, nil\n}\n\nfunc (d *numberDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\tbytes, c, err := d.decodeByte(ctx.Buf, cursor)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\tif bytes == nil {\n\t\treturn [][]byte{nullbytes}, c, nil\n\t}\n\treturn [][]byte{bytes}, c, nil\n}\n\nfunc (d *numberDecoder) decodeStreamByte(s *Stream) ([]byte, error) {\n\tstart := s.cursor\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn floatBytes(s), nil\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tcase '\"':\n\t\t\treturn d.stringDecoder.decodeStreamByte(s)\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto ERROR\n\t\tdefault:\n\t\t\tgoto ERROR\n\t\t}\n\t}\nERROR:\n\tif s.cursor == start {\n\t\treturn nil, errors.ErrInvalidBeginningOfValue(s.char(), s.totalOffset())\n\t}\n\treturn nil, errors.ErrUnexpectedEndOfJSON(\"json.Number\", s.totalOffset())\n}\n\nfunc (d *numberDecoder) decodeByte(buf []byte, cursor int64) ([]byte, int64, error) {\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tstart := cursor\n\t\t\tcursor++\n\t\t\tfor floatTable[buf[cursor]] {\n\t\t\t\tcursor++\n\t\t\t}\n\t\t\tnum := buf[start:cursor]\n\t\t\treturn num, cursor, nil\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn nil, cursor, nil\n\t\tcase '\"':\n\t\t\treturn d.stringDecoder.decodeByte(buf, cursor)\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"json.Number\", cursor)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/option.go",
    "content": "package decoder\n\nimport \"context\"\n\ntype OptionFlags uint8\n\nconst (\n\tFirstWinOption OptionFlags = 1 << iota\n\tContextOption\n\tPathOption\n)\n\ntype Option struct {\n\tFlags   OptionFlags\n\tContext context.Context\n\tPath    *Path\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/path.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype PathString string\n\nfunc (s PathString) Build() (*Path, error) {\n\tbuilder := new(PathBuilder)\n\treturn builder.Build([]rune(s))\n}\n\ntype PathBuilder struct {\n\troot                    PathNode\n\tnode                    PathNode\n\tsingleQuotePathSelector bool\n\tdoubleQuotePathSelector bool\n}\n\nfunc (b *PathBuilder) Build(buf []rune) (*Path, error) {\n\tnode, err := b.build(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Path{\n\t\tnode:                    node,\n\t\tRootSelectorOnly:        node == nil,\n\t\tSingleQuotePathSelector: b.singleQuotePathSelector,\n\t\tDoubleQuotePathSelector: b.doubleQuotePathSelector,\n\t}, nil\n}\n\nfunc (b *PathBuilder) build(buf []rune) (PathNode, error) {\n\tif len(buf) == 0 {\n\t\treturn nil, errors.ErrEmptyPath()\n\t}\n\tif buf[0] != '$' {\n\t\treturn nil, errors.ErrInvalidPath(\"JSON Path must start with a $ character\")\n\t}\n\tif len(buf) == 1 {\n\t\treturn nil, nil\n\t}\n\tbuf = buf[1:]\n\toffset, err := b.buildNext(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(buf) > offset {\n\t\treturn nil, errors.ErrInvalidPath(\"remain invalid path %q\", buf[offset:])\n\t}\n\treturn b.root, nil\n}\n\nfunc (b *PathBuilder) buildNextCharIfExists(buf []rune, cursor int) (int, error) {\n\tif len(buf) > cursor {\n\t\toffset, err := b.buildNext(buf[cursor:])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn cursor + 1 + offset, nil\n\t}\n\treturn cursor, nil\n}\n\nfunc (b *PathBuilder) buildNext(buf []rune) (int, error) {\n\tswitch buf[0] {\n\tcase '.':\n\t\tif len(buf) == 1 {\n\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with dot character\")\n\t\t}\n\t\toffset, err := b.buildSelector(buf[1:])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn offset + 1, nil\n\tcase '[':\n\t\tif len(buf) == 1 {\n\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with left bracket character\")\n\t\t}\n\t\toffset, err := b.buildIndex(buf[1:])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn offset + 1, nil\n\tdefault:\n\t\treturn 0, errors.ErrInvalidPath(\"expect dot or left bracket character. but found %c character\", buf[0])\n\t}\n}\n\nfunc (b *PathBuilder) buildSelector(buf []rune) (int, error) {\n\tswitch buf[0] {\n\tcase '.':\n\t\tif len(buf) == 1 {\n\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with double dot character\")\n\t\t}\n\t\toffset, err := b.buildPathRecursive(buf[1:])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn 1 + offset, nil\n\tcase '[', ']', '$', '*':\n\t\treturn 0, errors.ErrInvalidPath(\"found invalid path character %c after dot\", buf[0])\n\t}\n\tfor cursor := 0; cursor < len(buf); cursor++ {\n\t\tswitch buf[cursor] {\n\t\tcase '$', '*', ']':\n\t\t\treturn 0, errors.ErrInvalidPath(\"found %c character in field selector context\", buf[cursor])\n\t\tcase '.':\n\t\t\tif cursor+1 >= len(buf) {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with dot character\")\n\t\t\t}\n\t\t\tselector := buf[:cursor]\n\t\t\tb.addSelectorNode(string(selector))\n\t\t\toffset, err := b.buildSelector(buf[cursor+1:])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn cursor + 1 + offset, nil\n\t\tcase '[':\n\t\t\tif cursor+1 >= len(buf) {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with left bracket character\")\n\t\t\t}\n\t\t\tselector := buf[:cursor]\n\t\t\tb.addSelectorNode(string(selector))\n\t\t\toffset, err := b.buildIndex(buf[cursor+1:])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn cursor + 1 + offset, nil\n\t\tcase '\"':\n\t\t\tif cursor+1 >= len(buf) {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with double quote character\")\n\t\t\t}\n\t\t\toffset, err := b.buildQuoteSelector(buf[cursor+1:], DoubleQuotePathSelector)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn cursor + 1 + offset, nil\n\t\t}\n\t}\n\tb.addSelectorNode(string(buf))\n\treturn len(buf), nil\n}\n\nfunc (b *PathBuilder) buildQuoteSelector(buf []rune, sel QuotePathSelector) (int, error) {\n\tswitch buf[0] {\n\tcase '[', ']', '$', '.', '*', '\\'', '\"':\n\t\treturn 0, errors.ErrInvalidPath(\"found invalid path character %c after quote\", buf[0])\n\t}\n\tfor cursor := 0; cursor < len(buf); cursor++ {\n\t\tswitch buf[cursor] {\n\t\tcase '\\'':\n\t\t\tif sel != SingleQuotePathSelector {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"found double quote character in field selector with single quote context\")\n\t\t\t}\n\t\t\tif len(buf) <= cursor+1 {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with single quote character in field selector context\")\n\t\t\t}\n\t\t\tif buf[cursor+1] != ']' {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"expect right bracket for field selector with single quote but found %c\", buf[cursor+1])\n\t\t\t}\n\t\t\tselector := buf[:cursor]\n\t\t\tb.addSelectorNode(string(selector))\n\t\t\tb.singleQuotePathSelector = true\n\t\t\treturn b.buildNextCharIfExists(buf, cursor+2)\n\t\tcase '\"':\n\t\t\tif sel != DoubleQuotePathSelector {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"found single quote character in field selector with double quote context\")\n\t\t\t}\n\t\t\tselector := buf[:cursor]\n\t\t\tb.addSelectorNode(string(selector))\n\t\t\tb.doubleQuotePathSelector = true\n\t\t\treturn b.buildNextCharIfExists(buf, cursor+1)\n\t\t}\n\t}\n\treturn 0, errors.ErrInvalidPath(\"couldn't find quote character in selector quote path context\")\n}\n\nfunc (b *PathBuilder) buildPathRecursive(buf []rune) (int, error) {\n\tswitch buf[0] {\n\tcase '.', '[', ']', '$', '*':\n\t\treturn 0, errors.ErrInvalidPath(\"found invalid path character %c after double dot\", buf[0])\n\t}\n\tfor cursor := 0; cursor < len(buf); cursor++ {\n\t\tswitch buf[cursor] {\n\t\tcase '$', '*', ']':\n\t\t\treturn 0, errors.ErrInvalidPath(\"found %c character in field selector context\", buf[cursor])\n\t\tcase '.':\n\t\t\tif cursor+1 >= len(buf) {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with dot character\")\n\t\t\t}\n\t\t\tselector := buf[:cursor]\n\t\t\tb.addRecursiveNode(string(selector))\n\t\t\toffset, err := b.buildSelector(buf[cursor+1:])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn cursor + 1 + offset, nil\n\t\tcase '[':\n\t\t\tif cursor+1 >= len(buf) {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with left bracket character\")\n\t\t\t}\n\t\t\tselector := buf[:cursor]\n\t\t\tb.addRecursiveNode(string(selector))\n\t\t\toffset, err := b.buildIndex(buf[cursor+1:])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn cursor + 1 + offset, nil\n\t\t}\n\t}\n\tb.addRecursiveNode(string(buf))\n\treturn len(buf), nil\n}\n\nfunc (b *PathBuilder) buildIndex(buf []rune) (int, error) {\n\tswitch buf[0] {\n\tcase '.', '[', ']', '$':\n\t\treturn 0, errors.ErrInvalidPath(\"found invalid path character %c after left bracket\", buf[0])\n\tcase '\\'':\n\t\tif len(buf) == 1 {\n\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with single quote character\")\n\t\t}\n\t\toffset, err := b.buildQuoteSelector(buf[1:], SingleQuotePathSelector)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn 1 + offset, nil\n\tcase '*':\n\t\tif len(buf) == 1 {\n\t\t\treturn 0, errors.ErrInvalidPath(\"JSON Path ends with star character\")\n\t\t}\n\t\tif buf[1] != ']' {\n\t\t\treturn 0, errors.ErrInvalidPath(\"expect right bracket character for index all path but found %c character\", buf[1])\n\t\t}\n\t\tb.addIndexAllNode()\n\t\toffset := len(\"*]\")\n\t\tif len(buf) > 2 {\n\t\t\tbuildOffset, err := b.buildNext(buf[2:])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn offset + buildOffset, nil\n\t\t}\n\t\treturn offset, nil\n\t}\n\n\tfor cursor := 0; cursor < len(buf); cursor++ {\n\t\tswitch buf[cursor] {\n\t\tcase ']':\n\t\t\tindex, err := strconv.ParseInt(string(buf[:cursor]), 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, errors.ErrInvalidPath(\"%q is unexpected index path\", buf[:cursor])\n\t\t\t}\n\t\t\tb.addIndexNode(int(index))\n\t\t\treturn b.buildNextCharIfExists(buf, cursor+1)\n\t\t}\n\t}\n\treturn 0, errors.ErrInvalidPath(\"couldn't find right bracket character in index path context\")\n}\n\nfunc (b *PathBuilder) addIndexAllNode() {\n\tnode := newPathIndexAllNode()\n\tif b.root == nil {\n\t\tb.root = node\n\t\tb.node = node\n\t} else {\n\t\tb.node = b.node.chain(node)\n\t}\n}\n\nfunc (b *PathBuilder) addRecursiveNode(selector string) {\n\tnode := newPathRecursiveNode(selector)\n\tif b.root == nil {\n\t\tb.root = node\n\t\tb.node = node\n\t} else {\n\t\tb.node = b.node.chain(node)\n\t}\n}\n\nfunc (b *PathBuilder) addSelectorNode(name string) {\n\tnode := newPathSelectorNode(name)\n\tif b.root == nil {\n\t\tb.root = node\n\t\tb.node = node\n\t} else {\n\t\tb.node = b.node.chain(node)\n\t}\n}\n\nfunc (b *PathBuilder) addIndexNode(idx int) {\n\tnode := newPathIndexNode(idx)\n\tif b.root == nil {\n\t\tb.root = node\n\t\tb.node = node\n\t} else {\n\t\tb.node = b.node.chain(node)\n\t}\n}\n\ntype QuotePathSelector int\n\nconst (\n\tSingleQuotePathSelector QuotePathSelector = 1\n\tDoubleQuotePathSelector QuotePathSelector = 2\n)\n\ntype Path struct {\n\tnode                    PathNode\n\tRootSelectorOnly        bool\n\tSingleQuotePathSelector bool\n\tDoubleQuotePathSelector bool\n}\n\nfunc (p *Path) Field(sel string) (PathNode, bool, error) {\n\tif p.node == nil {\n\t\treturn nil, false, nil\n\t}\n\treturn p.node.Field(sel)\n}\n\nfunc (p *Path) Get(src, dst reflect.Value) error {\n\tif p.node == nil {\n\t\treturn nil\n\t}\n\treturn p.node.Get(src, dst)\n}\n\nfunc (p *Path) String() string {\n\tif p.node == nil {\n\t\treturn \"$\"\n\t}\n\treturn p.node.String()\n}\n\ntype PathNode interface {\n\tfmt.Stringer\n\tIndex(idx int) (PathNode, bool, error)\n\tField(fieldName string) (PathNode, bool, error)\n\tGet(src, dst reflect.Value) error\n\tchain(PathNode) PathNode\n\ttarget() bool\n\tsingle() bool\n}\n\ntype BasePathNode struct {\n\tchild PathNode\n}\n\nfunc (n *BasePathNode) chain(node PathNode) PathNode {\n\tn.child = node\n\treturn node\n}\n\nfunc (n *BasePathNode) target() bool {\n\treturn n.child == nil\n}\n\nfunc (n *BasePathNode) single() bool {\n\treturn true\n}\n\ntype PathSelectorNode struct {\n\t*BasePathNode\n\tselector string\n}\n\nfunc newPathSelectorNode(selector string) *PathSelectorNode {\n\treturn &PathSelectorNode{\n\t\tBasePathNode: &BasePathNode{},\n\t\tselector:     selector,\n\t}\n}\n\nfunc (n *PathSelectorNode) Index(idx int) (PathNode, bool, error) {\n\treturn nil, false, &errors.PathError{}\n}\n\nfunc (n *PathSelectorNode) Field(fieldName string) (PathNode, bool, error) {\n\tif n.selector == fieldName {\n\t\treturn n.child, true, nil\n\t}\n\treturn nil, false, nil\n}\n\nfunc (n *PathSelectorNode) Get(src, dst reflect.Value) error {\n\tswitch src.Type().Kind() {\n\tcase reflect.Map:\n\t\titer := src.MapRange()\n\t\tfor iter.Next() {\n\t\t\tkey, ok := iter.Key().Interface().(string)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"invalid map key type %T\", src.Type().Key())\n\t\t\t}\n\t\t\tchild, found, err := n.Field(key)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif found {\n\t\t\t\tif child != nil {\n\t\t\t\t\treturn child.Get(iter.Value(), dst)\n\t\t\t\t}\n\t\t\t\treturn AssignValue(iter.Value(), dst)\n\t\t\t}\n\t\t}\n\tcase reflect.Struct:\n\t\ttyp := src.Type()\n\t\tfor i := 0; i < typ.Len(); i++ {\n\t\t\ttag := runtime.StructTagFromField(typ.Field(i))\n\t\t\tchild, found, err := n.Field(tag.Key)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif found {\n\t\t\t\tif child != nil {\n\t\t\t\t\treturn child.Get(src.Field(i), dst)\n\t\t\t\t}\n\t\t\t\treturn AssignValue(src.Field(i), dst)\n\t\t\t}\n\t\t}\n\tcase reflect.Ptr:\n\t\treturn n.Get(src.Elem(), dst)\n\tcase reflect.Interface:\n\t\treturn n.Get(reflect.ValueOf(src.Interface()), dst)\n\tcase reflect.Float64, reflect.String, reflect.Bool:\n\t\treturn AssignValue(src, dst)\n\t}\n\treturn fmt.Errorf(\"failed to get %s value from %s\", n.selector, src.Type())\n}\n\nfunc (n *PathSelectorNode) String() string {\n\ts := fmt.Sprintf(\".%s\", n.selector)\n\tif n.child != nil {\n\t\ts += n.child.String()\n\t}\n\treturn s\n}\n\ntype PathIndexNode struct {\n\t*BasePathNode\n\tselector int\n}\n\nfunc newPathIndexNode(selector int) *PathIndexNode {\n\treturn &PathIndexNode{\n\t\tBasePathNode: &BasePathNode{},\n\t\tselector:     selector,\n\t}\n}\n\nfunc (n *PathIndexNode) Index(idx int) (PathNode, bool, error) {\n\tif n.selector == idx {\n\t\treturn n.child, true, nil\n\t}\n\treturn nil, false, nil\n}\n\nfunc (n *PathIndexNode) Field(fieldName string) (PathNode, bool, error) {\n\treturn nil, false, &errors.PathError{}\n}\n\nfunc (n *PathIndexNode) Get(src, dst reflect.Value) error {\n\tswitch src.Type().Kind() {\n\tcase reflect.Array, reflect.Slice:\n\t\tif src.Len() > n.selector {\n\t\t\tif n.child != nil {\n\t\t\t\treturn n.child.Get(src.Index(n.selector), dst)\n\t\t\t}\n\t\t\treturn AssignValue(src.Index(n.selector), dst)\n\t\t}\n\tcase reflect.Ptr:\n\t\treturn n.Get(src.Elem(), dst)\n\tcase reflect.Interface:\n\t\treturn n.Get(reflect.ValueOf(src.Interface()), dst)\n\t}\n\treturn fmt.Errorf(\"failed to get [%d] value from %s\", n.selector, src.Type())\n}\n\nfunc (n *PathIndexNode) String() string {\n\ts := fmt.Sprintf(\"[%d]\", n.selector)\n\tif n.child != nil {\n\t\ts += n.child.String()\n\t}\n\treturn s\n}\n\ntype PathIndexAllNode struct {\n\t*BasePathNode\n}\n\nfunc newPathIndexAllNode() *PathIndexAllNode {\n\treturn &PathIndexAllNode{\n\t\tBasePathNode: &BasePathNode{},\n\t}\n}\n\nfunc (n *PathIndexAllNode) Index(idx int) (PathNode, bool, error) {\n\treturn n.child, true, nil\n}\n\nfunc (n *PathIndexAllNode) Field(fieldName string) (PathNode, bool, error) {\n\treturn nil, false, &errors.PathError{}\n}\n\nfunc (n *PathIndexAllNode) Get(src, dst reflect.Value) error {\n\tswitch src.Type().Kind() {\n\tcase reflect.Array, reflect.Slice:\n\t\tvar arr []interface{}\n\t\tfor i := 0; i < src.Len(); i++ {\n\t\t\tvar v interface{}\n\t\t\trv := reflect.ValueOf(&v)\n\t\t\tif n.child != nil {\n\t\t\t\tif err := n.child.Get(src.Index(i), rv); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := AssignValue(src.Index(i), rv); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tarr = append(arr, v)\n\t\t}\n\t\tif err := AssignValue(reflect.ValueOf(arr), dst); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\tcase reflect.Ptr:\n\t\treturn n.Get(src.Elem(), dst)\n\tcase reflect.Interface:\n\t\treturn n.Get(reflect.ValueOf(src.Interface()), dst)\n\t}\n\treturn fmt.Errorf(\"failed to get all value from %s\", src.Type())\n}\n\nfunc (n *PathIndexAllNode) String() string {\n\ts := \"[*]\"\n\tif n.child != nil {\n\t\ts += n.child.String()\n\t}\n\treturn s\n}\n\ntype PathRecursiveNode struct {\n\t*BasePathNode\n\tselector string\n}\n\nfunc newPathRecursiveNode(selector string) *PathRecursiveNode {\n\tnode := newPathSelectorNode(selector)\n\treturn &PathRecursiveNode{\n\t\tBasePathNode: &BasePathNode{\n\t\t\tchild: node,\n\t\t},\n\t\tselector: selector,\n\t}\n}\n\nfunc (n *PathRecursiveNode) Field(fieldName string) (PathNode, bool, error) {\n\tif n.selector == fieldName {\n\t\treturn n.child, true, nil\n\t}\n\treturn nil, false, nil\n}\n\nfunc (n *PathRecursiveNode) Index(_ int) (PathNode, bool, error) {\n\treturn n, true, nil\n}\n\nfunc valueToSliceValue(v interface{}) []interface{} {\n\trv := reflect.ValueOf(v)\n\tret := []interface{}{}\n\tif rv.Type().Kind() == reflect.Slice || rv.Type().Kind() == reflect.Array {\n\t\tfor i := 0; i < rv.Len(); i++ {\n\t\t\tret = append(ret, rv.Index(i).Interface())\n\t\t}\n\t\treturn ret\n\t}\n\treturn []interface{}{v}\n}\n\nfunc (n *PathRecursiveNode) Get(src, dst reflect.Value) error {\n\tif n.child == nil {\n\t\treturn fmt.Errorf(\"failed to get by recursive path ..%s\", n.selector)\n\t}\n\tvar arr []interface{}\n\tswitch src.Type().Kind() {\n\tcase reflect.Map:\n\t\titer := src.MapRange()\n\t\tfor iter.Next() {\n\t\t\tkey, ok := iter.Key().Interface().(string)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"invalid map key type %T\", src.Type().Key())\n\t\t\t}\n\t\t\tchild, found, err := n.Field(key)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif found {\n\t\t\t\tvar v interface{}\n\t\t\t\trv := reflect.ValueOf(&v)\n\t\t\t\t_ = child.Get(iter.Value(), rv)\n\t\t\t\tarr = append(arr, valueToSliceValue(v)...)\n\t\t\t} else {\n\t\t\t\tvar v interface{}\n\t\t\t\trv := reflect.ValueOf(&v)\n\t\t\t\t_ = n.Get(iter.Value(), rv)\n\t\t\t\tif v != nil {\n\t\t\t\t\tarr = append(arr, valueToSliceValue(v)...)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_ = AssignValue(reflect.ValueOf(arr), dst)\n\t\treturn nil\n\tcase reflect.Struct:\n\t\ttyp := src.Type()\n\t\tfor i := 0; i < typ.Len(); i++ {\n\t\t\ttag := runtime.StructTagFromField(typ.Field(i))\n\t\t\tchild, found, err := n.Field(tag.Key)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif found {\n\t\t\t\tvar v interface{}\n\t\t\t\trv := reflect.ValueOf(&v)\n\t\t\t\t_ = child.Get(src.Field(i), rv)\n\t\t\t\tarr = append(arr, valueToSliceValue(v)...)\n\t\t\t} else {\n\t\t\t\tvar v interface{}\n\t\t\t\trv := reflect.ValueOf(&v)\n\t\t\t\t_ = n.Get(src.Field(i), rv)\n\t\t\t\tif v != nil {\n\t\t\t\t\tarr = append(arr, valueToSliceValue(v)...)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_ = AssignValue(reflect.ValueOf(arr), dst)\n\t\treturn nil\n\tcase reflect.Array, reflect.Slice:\n\t\tfor i := 0; i < src.Len(); i++ {\n\t\t\tvar v interface{}\n\t\t\trv := reflect.ValueOf(&v)\n\t\t\t_ = n.Get(src.Index(i), rv)\n\t\t\tif v != nil {\n\t\t\t\tarr = append(arr, valueToSliceValue(v)...)\n\t\t\t}\n\t\t}\n\t\t_ = AssignValue(reflect.ValueOf(arr), dst)\n\t\treturn nil\n\tcase reflect.Ptr:\n\t\treturn n.Get(src.Elem(), dst)\n\tcase reflect.Interface:\n\t\treturn n.Get(reflect.ValueOf(src.Interface()), dst)\n\t}\n\treturn fmt.Errorf(\"failed to get %s value from %s\", n.selector, src.Type())\n}\n\nfunc (n *PathRecursiveNode) String() string {\n\ts := fmt.Sprintf(\"..%s\", n.selector)\n\tif n.child != nil {\n\t\ts += n.child.String()\n\t}\n\treturn s\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/ptr.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype ptrDecoder struct {\n\tdec        Decoder\n\ttyp        *runtime.Type\n\tstructName string\n\tfieldName  string\n}\n\nfunc newPtrDecoder(dec Decoder, typ *runtime.Type, structName, fieldName string) *ptrDecoder {\n\treturn &ptrDecoder{\n\t\tdec:        dec,\n\t\ttyp:        typ,\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *ptrDecoder) contentDecoder() Decoder {\n\tdec, ok := d.dec.(*ptrDecoder)\n\tif !ok {\n\t\treturn d.dec\n\t}\n\treturn dec.contentDecoder()\n}\n\n//nolint:golint\n//go:linkname unsafe_New reflect.unsafe_New\nfunc unsafe_New(*runtime.Type) unsafe.Pointer\n\nfunc UnsafeNew(t *runtime.Type) unsafe.Pointer {\n\treturn unsafe_New(t)\n}\n\nfunc (d *ptrDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tif s.skipWhiteSpace() == nul {\n\t\ts.read()\n\t}\n\tif s.char() == 'n' {\n\t\tif err := nullBytes(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*(*unsafe.Pointer)(p) = nil\n\t\treturn nil\n\t}\n\tvar newptr unsafe.Pointer\n\tif *(*unsafe.Pointer)(p) == nil {\n\t\tnewptr = unsafe_New(d.typ)\n\t\t*(*unsafe.Pointer)(p) = newptr\n\t} else {\n\t\tnewptr = *(*unsafe.Pointer)(p)\n\t}\n\tif err := d.dec.DecodeStream(s, depth, newptr); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (d *ptrDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tif buf[cursor] == 'n' {\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif p != nil {\n\t\t\t*(*unsafe.Pointer)(p) = nil\n\t\t}\n\t\tcursor += 4\n\t\treturn cursor, nil\n\t}\n\tvar newptr unsafe.Pointer\n\tif *(*unsafe.Pointer)(p) == nil {\n\t\tnewptr = unsafe_New(d.typ)\n\t\t*(*unsafe.Pointer)(p) = newptr\n\t} else {\n\t\tnewptr = *(*unsafe.Pointer)(p)\n\t}\n\tc, err := d.dec.Decode(ctx, cursor, depth, newptr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tcursor = c\n\treturn cursor, nil\n}\n\nfunc (d *ptrDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: ptr decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/slice.go",
    "content": "package decoder\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nvar (\n\tsliceType = runtime.Type2RType(\n\t\treflect.TypeOf((*sliceHeader)(nil)).Elem(),\n\t)\n\tnilSlice = unsafe.Pointer(&sliceHeader{})\n)\n\ntype sliceDecoder struct {\n\telemType          *runtime.Type\n\tisElemPointerType bool\n\tvalueDecoder      Decoder\n\tsize              uintptr\n\tarrayPool         sync.Pool\n\tstructName        string\n\tfieldName         string\n}\n\n// If use reflect.SliceHeader, data type is uintptr.\n// In this case, Go compiler cannot trace reference created by newArray().\n// So, define using unsafe.Pointer as data type\ntype sliceHeader struct {\n\tdata unsafe.Pointer\n\tlen  int\n\tcap  int\n}\n\nconst (\n\tdefaultSliceCapacity = 2\n)\n\nfunc newSliceDecoder(dec Decoder, elemType *runtime.Type, size uintptr, structName, fieldName string) *sliceDecoder {\n\treturn &sliceDecoder{\n\t\tvalueDecoder:      dec,\n\t\telemType:          elemType,\n\t\tisElemPointerType: elemType.Kind() == reflect.Ptr || elemType.Kind() == reflect.Map,\n\t\tsize:              size,\n\t\tarrayPool: sync.Pool{\n\t\t\tNew: func() interface{} {\n\t\t\t\treturn &sliceHeader{\n\t\t\t\t\tdata: newArray(elemType, defaultSliceCapacity),\n\t\t\t\t\tlen:  0,\n\t\t\t\t\tcap:  defaultSliceCapacity,\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *sliceDecoder) newSlice(src *sliceHeader) *sliceHeader {\n\tslice := d.arrayPool.Get().(*sliceHeader)\n\tif src.len > 0 {\n\t\t// copy original elem\n\t\tif slice.cap < src.cap {\n\t\t\tdata := newArray(d.elemType, src.cap)\n\t\t\tslice = &sliceHeader{data: data, len: src.len, cap: src.cap}\n\t\t} else {\n\t\t\tslice.len = src.len\n\t\t}\n\t\tcopySlice(d.elemType, *slice, *src)\n\t} else {\n\t\tslice.len = 0\n\t}\n\treturn slice\n}\n\nfunc (d *sliceDecoder) releaseSlice(p *sliceHeader) {\n\td.arrayPool.Put(p)\n}\n\n//go:linkname copySlice reflect.typedslicecopy\nfunc copySlice(elemType *runtime.Type, dst, src sliceHeader) int\n\n//go:linkname newArray reflect.unsafe_NewArray\nfunc newArray(*runtime.Type, int) unsafe.Pointer\n\n//go:linkname typedmemmove reflect.typedmemmove\nfunc typedmemmove(t *runtime.Type, dst, src unsafe.Pointer)\n\nfunc (d *sliceDecoder) errNumber(offset int64) *errors.UnmarshalTypeError {\n\treturn &errors.UnmarshalTypeError{\n\t\tValue:  \"number\",\n\t\tType:   reflect.SliceOf(runtime.RType2Type(d.elemType)),\n\t\tStruct: d.structName,\n\t\tField:  d.fieldName,\n\t\tOffset: offset,\n\t}\n}\n\nfunc (d *sliceDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t}\n\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttypedmemmove(sliceType, p, nilSlice)\n\t\t\treturn nil\n\t\tcase '[':\n\t\t\ts.cursor++\n\t\t\tif s.skipWhiteSpace() == ']' {\n\t\t\t\tdst := (*sliceHeader)(p)\n\t\t\t\tif dst.data == nil {\n\t\t\t\t\tdst.data = newArray(d.elemType, 0)\n\t\t\t\t} else {\n\t\t\t\t\tdst.len = 0\n\t\t\t\t}\n\t\t\t\ts.cursor++\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tidx := 0\n\t\t\tslice := d.newSlice((*sliceHeader)(p))\n\t\t\tsrcLen := slice.len\n\t\t\tcapacity := slice.cap\n\t\t\tdata := slice.data\n\t\t\tfor {\n\t\t\t\tif capacity <= idx {\n\t\t\t\t\tsrc := sliceHeader{data: data, len: idx, cap: capacity}\n\t\t\t\t\tcapacity *= 2\n\t\t\t\t\tdata = newArray(d.elemType, capacity)\n\t\t\t\t\tdst := sliceHeader{data: data, len: idx, cap: capacity}\n\t\t\t\t\tcopySlice(d.elemType, dst, src)\n\t\t\t\t}\n\t\t\t\tep := unsafe.Pointer(uintptr(data) + uintptr(idx)*d.size)\n\n\t\t\t\t// if srcLen is greater than idx, keep the original reference\n\t\t\t\tif srcLen <= idx {\n\t\t\t\t\tif d.isElemPointerType {\n\t\t\t\t\t\t**(**unsafe.Pointer)(unsafe.Pointer(&ep)) = nil // initialize elem pointer\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// assign new element to the slice\n\t\t\t\t\t\ttypedmemmove(d.elemType, ep, unsafe_New(d.elemType))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif err := d.valueDecoder.DecodeStream(s, depth, ep); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\ts.skipWhiteSpace()\n\t\t\tRETRY:\n\t\t\t\tswitch s.char() {\n\t\t\t\tcase ']':\n\t\t\t\t\tslice.cap = capacity\n\t\t\t\t\tslice.len = idx + 1\n\t\t\t\t\tslice.data = data\n\t\t\t\t\tdst := (*sliceHeader)(p)\n\t\t\t\t\tdst.len = idx + 1\n\t\t\t\t\tif dst.len > dst.cap {\n\t\t\t\t\t\tdst.data = newArray(d.elemType, dst.len)\n\t\t\t\t\t\tdst.cap = dst.len\n\t\t\t\t\t}\n\t\t\t\t\tcopySlice(d.elemType, *dst, *slice)\n\t\t\t\t\td.releaseSlice(slice)\n\t\t\t\t\ts.cursor++\n\t\t\t\t\treturn nil\n\t\t\t\tcase ',':\n\t\t\t\t\tidx++\n\t\t\t\tcase nul:\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\tgoto RETRY\n\t\t\t\t\t}\n\t\t\t\t\tslice.cap = capacity\n\t\t\t\t\tslice.data = data\n\t\t\t\t\td.releaseSlice(slice)\n\t\t\t\t\tgoto ERROR\n\t\t\t\tdefault:\n\t\t\t\t\tslice.cap = capacity\n\t\t\t\t\tslice.data = data\n\t\t\t\t\td.releaseSlice(slice)\n\t\t\t\t\tgoto ERROR\n\t\t\t\t}\n\t\t\t\ts.cursor++\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn d.errNumber(s.totalOffset())\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto ERROR\n\t\tdefault:\n\t\t\tgoto ERROR\n\t\t}\n\t}\nERROR:\n\treturn errors.ErrUnexpectedEndOfJSON(\"slice\", s.totalOffset())\n}\n\nfunc (d *sliceDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t}\n\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\ttypedmemmove(sliceType, p, nilSlice)\n\t\t\treturn cursor, nil\n\t\tcase '[':\n\t\t\tcursor++\n\t\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\t\tif buf[cursor] == ']' {\n\t\t\t\tdst := (*sliceHeader)(p)\n\t\t\t\tif dst.data == nil {\n\t\t\t\t\tdst.data = newArray(d.elemType, 0)\n\t\t\t\t} else {\n\t\t\t\t\tdst.len = 0\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t\treturn cursor, nil\n\t\t\t}\n\t\t\tidx := 0\n\t\t\tslice := d.newSlice((*sliceHeader)(p))\n\t\t\tsrcLen := slice.len\n\t\t\tcapacity := slice.cap\n\t\t\tdata := slice.data\n\t\t\tfor {\n\t\t\t\tif capacity <= idx {\n\t\t\t\t\tsrc := sliceHeader{data: data, len: idx, cap: capacity}\n\t\t\t\t\tcapacity *= 2\n\t\t\t\t\tdata = newArray(d.elemType, capacity)\n\t\t\t\t\tdst := sliceHeader{data: data, len: idx, cap: capacity}\n\t\t\t\t\tcopySlice(d.elemType, dst, src)\n\t\t\t\t}\n\t\t\t\tep := unsafe.Pointer(uintptr(data) + uintptr(idx)*d.size)\n\t\t\t\t// if srcLen is greater than idx, keep the original reference\n\t\t\t\tif srcLen <= idx {\n\t\t\t\t\tif d.isElemPointerType {\n\t\t\t\t\t\t**(**unsafe.Pointer)(unsafe.Pointer(&ep)) = nil // initialize elem pointer\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// assign new element to the slice\n\t\t\t\t\t\ttypedmemmove(d.elemType, ep, unsafe_New(d.elemType))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tc, err := d.valueDecoder.Decode(ctx, cursor, depth, ep)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\tcursor = c\n\t\t\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\t\t\tswitch buf[cursor] {\n\t\t\t\tcase ']':\n\t\t\t\t\tslice.cap = capacity\n\t\t\t\t\tslice.len = idx + 1\n\t\t\t\t\tslice.data = data\n\t\t\t\t\tdst := (*sliceHeader)(p)\n\t\t\t\t\tdst.len = idx + 1\n\t\t\t\t\tif dst.len > dst.cap {\n\t\t\t\t\t\tdst.data = newArray(d.elemType, dst.len)\n\t\t\t\t\t\tdst.cap = dst.len\n\t\t\t\t\t}\n\t\t\t\t\tcopySlice(d.elemType, *dst, *slice)\n\t\t\t\t\td.releaseSlice(slice)\n\t\t\t\t\tcursor++\n\t\t\t\t\treturn cursor, nil\n\t\t\t\tcase ',':\n\t\t\t\t\tidx++\n\t\t\t\tdefault:\n\t\t\t\t\tslice.cap = capacity\n\t\t\t\t\tslice.data = data\n\t\t\t\t\td.releaseSlice(slice)\n\t\t\t\t\treturn 0, errors.ErrInvalidCharacter(buf[cursor], \"slice\", cursor)\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn 0, d.errNumber(cursor)\n\t\tdefault:\n\t\t\treturn 0, errors.ErrUnexpectedEndOfJSON(\"slice\", cursor)\n\t\t}\n\t}\n}\n\nfunc (d *sliceDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\tbuf := ctx.Buf\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn nil, 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t}\n\n\tret := [][]byte{}\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn [][]byte{nullbytes}, cursor, nil\n\t\tcase '[':\n\t\t\tcursor++\n\t\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\t\tif buf[cursor] == ']' {\n\t\t\t\tcursor++\n\t\t\t\treturn ret, cursor, nil\n\t\t\t}\n\t\t\tidx := 0\n\t\t\tfor {\n\t\t\t\tchild, found, err := ctx.Option.Path.node.Index(idx)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, 0, err\n\t\t\t\t}\n\t\t\t\tif found {\n\t\t\t\t\tif child != nil {\n\t\t\t\t\t\toldPath := ctx.Option.Path.node\n\t\t\t\t\t\tctx.Option.Path.node = child\n\t\t\t\t\t\tpaths, c, err := d.valueDecoder.DecodePath(ctx, cursor, depth)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn nil, 0, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx.Option.Path.node = oldPath\n\t\t\t\t\t\tret = append(ret, paths...)\n\t\t\t\t\t\tcursor = c\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstart := cursor\n\t\t\t\t\t\tend, err := skipValue(buf, cursor, depth)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn nil, 0, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tret = append(ret, buf[start:end])\n\t\t\t\t\t\tcursor = end\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tc, err := skipValue(buf, cursor, depth)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, 0, err\n\t\t\t\t\t}\n\t\t\t\t\tcursor = c\n\t\t\t\t}\n\t\t\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\t\t\tswitch buf[cursor] {\n\t\t\t\tcase ']':\n\t\t\t\t\tcursor++\n\t\t\t\t\treturn ret, cursor, nil\n\t\t\t\tcase ',':\n\t\t\t\t\tidx++\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, 0, errors.ErrInvalidCharacter(buf[cursor], \"slice\", cursor)\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn nil, 0, d.errNumber(cursor)\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"slice\", cursor)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/stream.go",
    "content": "package decoder\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"strconv\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\nconst (\n\tinitBufSize = 512\n)\n\ntype Stream struct {\n\tbuf                   []byte\n\tbufSize               int64\n\tlength                int64\n\tr                     io.Reader\n\toffset                int64\n\tcursor                int64\n\tfilledBuffer          bool\n\tallRead               bool\n\tUseNumber             bool\n\tDisallowUnknownFields bool\n\tOption                *Option\n}\n\nfunc NewStream(r io.Reader) *Stream {\n\treturn &Stream{\n\t\tr:       r,\n\t\tbufSize: initBufSize,\n\t\tbuf:     make([]byte, initBufSize),\n\t\tOption:  &Option{},\n\t}\n}\n\nfunc (s *Stream) TotalOffset() int64 {\n\treturn s.totalOffset()\n}\n\nfunc (s *Stream) Buffered() io.Reader {\n\tbuflen := int64(len(s.buf))\n\tfor i := s.cursor; i < buflen; i++ {\n\t\tif s.buf[i] == nul {\n\t\t\treturn bytes.NewReader(s.buf[s.cursor:i])\n\t\t}\n\t}\n\treturn bytes.NewReader(s.buf[s.cursor:])\n}\n\nfunc (s *Stream) PrepareForDecode() error {\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\t', '\\r', '\\n':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase ',', ':':\n\t\t\ts.cursor++\n\t\t\treturn nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn io.EOF\n\t\t}\n\t\tbreak\n\t}\n\treturn nil\n}\n\nfunc (s *Stream) totalOffset() int64 {\n\treturn s.offset + s.cursor\n}\n\nfunc (s *Stream) char() byte {\n\treturn s.buf[s.cursor]\n}\n\nfunc (s *Stream) equalChar(c byte) bool {\n\tcur := s.buf[s.cursor]\n\tif cur == nul {\n\t\ts.read()\n\t\tcur = s.buf[s.cursor]\n\t}\n\treturn cur == c\n}\n\nfunc (s *Stream) stat() ([]byte, int64, unsafe.Pointer) {\n\treturn s.buf, s.cursor, (*sliceHeader)(unsafe.Pointer(&s.buf)).data\n}\n\nfunc (s *Stream) bufptr() unsafe.Pointer {\n\treturn (*sliceHeader)(unsafe.Pointer(&s.buf)).data\n}\n\nfunc (s *Stream) statForRetry() ([]byte, int64, unsafe.Pointer) {\n\ts.cursor-- // for retry ( because caller progress cursor position in each loop )\n\treturn s.buf, s.cursor, (*sliceHeader)(unsafe.Pointer(&s.buf)).data\n}\n\nfunc (s *Stream) Reset() {\n\ts.reset()\n\ts.bufSize = int64(len(s.buf))\n}\n\nfunc (s *Stream) More() bool {\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\r', '\\t':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase '}', ']':\n\t\t\treturn false\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tbreak\n\t}\n\treturn true\n}\n\nfunc (s *Stream) Token() (interface{}, error) {\n\tfor {\n\t\tc := s.char()\n\t\tswitch c {\n\t\tcase ' ', '\\n', '\\r', '\\t':\n\t\t\ts.cursor++\n\t\tcase '{', '[', ']', '}':\n\t\t\ts.cursor++\n\t\t\treturn json.Delim(c), nil\n\t\tcase ',', ':':\n\t\t\ts.cursor++\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tbytes := floatBytes(s)\n\t\t\tstr := *(*string)(unsafe.Pointer(&bytes))\n\t\t\tif s.UseNumber {\n\t\t\t\treturn json.Number(str), nil\n\t\t\t}\n\t\t\tf64, err := strconv.ParseFloat(str, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn f64, nil\n\t\tcase '\"':\n\t\t\tbytes, err := stringBytes(s)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn string(bytes), nil\n\t\tcase 't':\n\t\t\tif err := trueBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn true, nil\n\t\tcase 'f':\n\t\t\tif err := falseBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn false, nil\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto END\n\t\tdefault:\n\t\t\treturn nil, errors.ErrInvalidCharacter(s.char(), \"token\", s.totalOffset())\n\t\t}\n\t}\nEND:\n\treturn nil, io.EOF\n}\n\nfunc (s *Stream) reset() {\n\ts.offset += s.cursor\n\ts.buf = s.buf[s.cursor:]\n\ts.length -= s.cursor\n\ts.cursor = 0\n}\n\nfunc (s *Stream) readBuf() []byte {\n\tif s.filledBuffer {\n\t\ts.bufSize *= 2\n\t\tremainBuf := s.buf\n\t\ts.buf = make([]byte, s.bufSize)\n\t\tcopy(s.buf, remainBuf)\n\t}\n\tremainLen := s.length - s.cursor\n\tremainNotNulCharNum := int64(0)\n\tfor i := int64(0); i < remainLen; i++ {\n\t\tif s.buf[s.cursor+i] == nul {\n\t\t\tbreak\n\t\t}\n\t\tremainNotNulCharNum++\n\t}\n\ts.length = s.cursor + remainNotNulCharNum\n\treturn s.buf[s.cursor+remainNotNulCharNum:]\n}\n\nfunc (s *Stream) read() bool {\n\tif s.allRead {\n\t\treturn false\n\t}\n\tbuf := s.readBuf()\n\tlast := len(buf) - 1\n\tbuf[last] = nul\n\tn, err := s.r.Read(buf[:last])\n\ts.length += int64(n)\n\tif n == last {\n\t\ts.filledBuffer = true\n\t} else {\n\t\ts.filledBuffer = false\n\t}\n\tif err == io.EOF {\n\t\ts.allRead = true\n\t} else if err != nil {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (s *Stream) skipWhiteSpace() byte {\n\tp := s.bufptr()\nLOOP:\n\tc := char(p, s.cursor)\n\tswitch c {\n\tcase ' ', '\\n', '\\t', '\\r':\n\t\ts.cursor++\n\t\tgoto LOOP\n\tcase nul:\n\t\tif s.read() {\n\t\t\tp = s.bufptr()\n\t\t\tgoto LOOP\n\t\t}\n\t}\n\treturn c\n}\n\nfunc (s *Stream) skipObject(depth int64) error {\n\tbraceCount := 1\n\t_, cursor, p := s.stat()\n\tfor {\n\t\tswitch char(p, cursor) {\n\t\tcase '{':\n\t\t\tbraceCount++\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t\t\t}\n\t\tcase '}':\n\t\t\tbraceCount--\n\t\t\tdepth--\n\t\t\tif braceCount == 0 {\n\t\t\t\ts.cursor = cursor + 1\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase '[':\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t\t\t}\n\t\tcase ']':\n\t\t\tdepth--\n\t\tcase '\"':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tswitch char(p, cursor) {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tif char(p, cursor) == nul {\n\t\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t\t}\n\t\t\t\tcase '\"':\n\t\t\t\t\tgoto SWITCH_OUT\n\t\t\t\tcase nul:\n\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t_, cursor, p = s.statForRetry()\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nul:\n\t\t\ts.cursor = cursor\n\t\t\tif s.read() {\n\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"object of object\", cursor)\n\t\t}\n\tSWITCH_OUT:\n\t\tcursor++\n\t}\n}\n\nfunc (s *Stream) skipArray(depth int64) error {\n\tbracketCount := 1\n\t_, cursor, p := s.stat()\n\tfor {\n\t\tswitch char(p, cursor) {\n\t\tcase '[':\n\t\t\tbracketCount++\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t\t\t}\n\t\tcase ']':\n\t\t\tbracketCount--\n\t\t\tdepth--\n\t\t\tif bracketCount == 0 {\n\t\t\t\ts.cursor = cursor + 1\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase '{':\n\t\t\tdepth++\n\t\t\tif depth > maxDecodeNestingDepth {\n\t\t\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t\t\t}\n\t\tcase '}':\n\t\t\tdepth--\n\t\tcase '\"':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tswitch char(p, cursor) {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tif char(p, cursor) == nul {\n\t\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t\t}\n\t\t\t\tcase '\"':\n\t\t\t\t\tgoto SWITCH_OUT\n\t\t\t\tcase nul:\n\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t_, cursor, p = s.statForRetry()\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"string of object\", cursor)\n\t\t\t\t}\n\t\t\t}\n\t\tcase nul:\n\t\t\ts.cursor = cursor\n\t\t\tif s.read() {\n\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"array of object\", cursor)\n\t\t}\n\tSWITCH_OUT:\n\t\tcursor++\n\t}\n}\n\nfunc (s *Stream) skipValue(depth int64) error {\n\t_, cursor, p := s.stat()\n\tfor {\n\t\tswitch char(p, cursor) {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase nul:\n\t\t\ts.cursor = cursor\n\t\t\tif s.read() {\n\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"value of object\", s.totalOffset())\n\t\tcase '{':\n\t\t\ts.cursor = cursor + 1\n\t\t\treturn s.skipObject(depth + 1)\n\t\tcase '[':\n\t\t\ts.cursor = cursor + 1\n\t\t\treturn s.skipArray(depth + 1)\n\t\tcase '\"':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tswitch char(p, cursor) {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tif char(p, cursor) == nul {\n\t\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"value of string\", s.totalOffset())\n\t\t\t\t\t}\n\t\t\t\tcase '\"':\n\t\t\t\t\ts.cursor = cursor + 1\n\t\t\t\t\treturn nil\n\t\t\t\tcase nul:\n\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t_, cursor, p = s.statForRetry()\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn errors.ErrUnexpectedEndOfJSON(\"value of string\", s.totalOffset())\n\t\t\t\t}\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tfor {\n\t\t\t\tcursor++\n\t\t\t\tc := char(p, cursor)\n\t\t\t\tif floatTable[c] {\n\t\t\t\t\tcontinue\n\t\t\t\t} else if c == nul {\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ts.cursor = cursor\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase 't':\n\t\t\ts.cursor = cursor\n\t\t\tif err := trueBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\tcase 'f':\n\t\t\ts.cursor = cursor\n\t\t\tif err := falseBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\tcase 'n':\n\t\t\ts.cursor = cursor\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\tcursor++\n\t}\n}\n\nfunc nullBytes(s *Stream) error {\n\t// current cursor's character is 'n'\n\ts.cursor++\n\tif s.char() != 'u' {\n\t\tif err := retryReadNull(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\tif s.char() != 'l' {\n\t\tif err := retryReadNull(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\tif s.char() != 'l' {\n\t\tif err := retryReadNull(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\treturn nil\n}\n\nfunc retryReadNull(s *Stream) error {\n\tif s.char() == nul && s.read() {\n\t\treturn nil\n\t}\n\treturn errors.ErrInvalidCharacter(s.char(), \"null\", s.totalOffset())\n}\n\nfunc trueBytes(s *Stream) error {\n\t// current cursor's character is 't'\n\ts.cursor++\n\tif s.char() != 'r' {\n\t\tif err := retryReadTrue(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\tif s.char() != 'u' {\n\t\tif err := retryReadTrue(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\tif s.char() != 'e' {\n\t\tif err := retryReadTrue(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\treturn nil\n}\n\nfunc retryReadTrue(s *Stream) error {\n\tif s.char() == nul && s.read() {\n\t\treturn nil\n\t}\n\treturn errors.ErrInvalidCharacter(s.char(), \"bool(true)\", s.totalOffset())\n}\n\nfunc falseBytes(s *Stream) error {\n\t// current cursor's character is 'f'\n\ts.cursor++\n\tif s.char() != 'a' {\n\t\tif err := retryReadFalse(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\tif s.char() != 'l' {\n\t\tif err := retryReadFalse(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\tif s.char() != 's' {\n\t\tif err := retryReadFalse(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\tif s.char() != 'e' {\n\t\tif err := retryReadFalse(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.cursor++\n\treturn nil\n}\n\nfunc retryReadFalse(s *Stream) error {\n\tif s.char() == nul && s.read() {\n\t\treturn nil\n\t}\n\treturn errors.ErrInvalidCharacter(s.char(), \"bool(false)\", s.totalOffset())\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/string.go",
    "content": "package decoder\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"unicode\"\n\t\"unicode/utf16\"\n\t\"unicode/utf8\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\ntype stringDecoder struct {\n\tstructName string\n\tfieldName  string\n}\n\nfunc newStringDecoder(structName, fieldName string) *stringDecoder {\n\treturn &stringDecoder{\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *stringDecoder) errUnmarshalType(typeName string, offset int64) *errors.UnmarshalTypeError {\n\treturn &errors.UnmarshalTypeError{\n\t\tValue:  typeName,\n\t\tType:   reflect.TypeOf(\"\"),\n\t\tOffset: offset,\n\t\tStruct: d.structName,\n\t\tField:  d.fieldName,\n\t}\n}\n\nfunc (d *stringDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tbytes, err := d.decodeStreamByte(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif bytes == nil {\n\t\treturn nil\n\t}\n\t**(**string)(unsafe.Pointer(&p)) = *(*string)(unsafe.Pointer(&bytes))\n\ts.reset()\n\treturn nil\n}\n\nfunc (d *stringDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbytes, c, err := d.decodeByte(ctx.Buf, cursor)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif bytes == nil {\n\t\treturn c, nil\n\t}\n\tcursor = c\n\t**(**string)(unsafe.Pointer(&p)) = *(*string)(unsafe.Pointer(&bytes))\n\treturn cursor, nil\n}\n\nfunc (d *stringDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\tbytes, c, err := d.decodeByte(ctx.Buf, cursor)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\tif bytes == nil {\n\t\treturn [][]byte{nullbytes}, c, nil\n\t}\n\treturn [][]byte{bytes}, c, nil\n}\n\nvar (\n\thexToInt = [256]int{\n\t\t'0': 0,\n\t\t'1': 1,\n\t\t'2': 2,\n\t\t'3': 3,\n\t\t'4': 4,\n\t\t'5': 5,\n\t\t'6': 6,\n\t\t'7': 7,\n\t\t'8': 8,\n\t\t'9': 9,\n\t\t'A': 10,\n\t\t'B': 11,\n\t\t'C': 12,\n\t\t'D': 13,\n\t\t'E': 14,\n\t\t'F': 15,\n\t\t'a': 10,\n\t\t'b': 11,\n\t\t'c': 12,\n\t\t'd': 13,\n\t\t'e': 14,\n\t\t'f': 15,\n\t}\n)\n\nfunc unicodeToRune(code []byte) rune {\n\tvar r rune\n\tfor i := 0; i < len(code); i++ {\n\t\tr = r*16 + rune(hexToInt[code[i]])\n\t}\n\treturn r\n}\n\nfunc readAtLeast(s *Stream, n int64, p *unsafe.Pointer) bool {\n\tfor s.cursor+n >= s.length {\n\t\tif !s.read() {\n\t\t\treturn false\n\t\t}\n\t\t*p = s.bufptr()\n\t}\n\treturn true\n}\n\nfunc decodeUnicodeRune(s *Stream, p unsafe.Pointer) (rune, int64, unsafe.Pointer, error) {\n\tconst defaultOffset = 5\n\tconst surrogateOffset = 11\n\n\tif !readAtLeast(s, defaultOffset, &p) {\n\t\treturn rune(0), 0, nil, errors.ErrInvalidCharacter(s.char(), \"escaped string\", s.totalOffset())\n\t}\n\n\tr := unicodeToRune(s.buf[s.cursor+1 : s.cursor+defaultOffset])\n\tif utf16.IsSurrogate(r) {\n\t\tif !readAtLeast(s, surrogateOffset, &p) {\n\t\t\treturn unicode.ReplacementChar, defaultOffset, p, nil\n\t\t}\n\t\tif s.buf[s.cursor+defaultOffset] != '\\\\' || s.buf[s.cursor+defaultOffset+1] != 'u' {\n\t\t\treturn unicode.ReplacementChar, defaultOffset, p, nil\n\t\t}\n\t\tr2 := unicodeToRune(s.buf[s.cursor+defaultOffset+2 : s.cursor+surrogateOffset])\n\t\tif r := utf16.DecodeRune(r, r2); r != unicode.ReplacementChar {\n\t\t\treturn r, surrogateOffset, p, nil\n\t\t}\n\t}\n\treturn r, defaultOffset, p, nil\n}\n\nfunc decodeUnicode(s *Stream, p unsafe.Pointer) (unsafe.Pointer, error) {\n\tconst backSlashAndULen = 2 // length of \\u\n\n\tr, offset, pp, err := decodeUnicodeRune(s, p)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tunicode := []byte(string(r))\n\tunicodeLen := int64(len(unicode))\n\ts.buf = append(append(s.buf[:s.cursor-1], unicode...), s.buf[s.cursor+offset:]...)\n\tunicodeOrgLen := offset - 1\n\ts.length = s.length - (backSlashAndULen + (unicodeOrgLen - unicodeLen))\n\ts.cursor = s.cursor - backSlashAndULen + unicodeLen\n\treturn pp, nil\n}\n\nfunc decodeEscapeString(s *Stream, p unsafe.Pointer) (unsafe.Pointer, error) {\n\ts.cursor++\nRETRY:\n\tswitch s.buf[s.cursor] {\n\tcase '\"':\n\t\ts.buf[s.cursor] = '\"'\n\tcase '\\\\':\n\t\ts.buf[s.cursor] = '\\\\'\n\tcase '/':\n\t\ts.buf[s.cursor] = '/'\n\tcase 'b':\n\t\ts.buf[s.cursor] = '\\b'\n\tcase 'f':\n\t\ts.buf[s.cursor] = '\\f'\n\tcase 'n':\n\t\ts.buf[s.cursor] = '\\n'\n\tcase 'r':\n\t\ts.buf[s.cursor] = '\\r'\n\tcase 't':\n\t\ts.buf[s.cursor] = '\\t'\n\tcase 'u':\n\t\treturn decodeUnicode(s, p)\n\tcase nul:\n\t\tif !s.read() {\n\t\t\treturn nil, errors.ErrInvalidCharacter(s.char(), \"escaped string\", s.totalOffset())\n\t\t}\n\t\tp = s.bufptr()\n\t\tgoto RETRY\n\tdefault:\n\t\treturn nil, errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t}\n\ts.buf = append(s.buf[:s.cursor-1], s.buf[s.cursor:]...)\n\ts.length--\n\ts.cursor--\n\tp = s.bufptr()\n\treturn p, nil\n}\n\nvar (\n\truneErrBytes    = []byte(string(utf8.RuneError))\n\truneErrBytesLen = int64(len(runeErrBytes))\n)\n\nfunc stringBytes(s *Stream) ([]byte, error) {\n\t_, cursor, p := s.stat()\n\tcursor++ // skip double quote char\n\tstart := cursor\n\tfor {\n\t\tswitch char(p, cursor) {\n\t\tcase '\\\\':\n\t\t\ts.cursor = cursor\n\t\t\tpp, err := decodeEscapeString(s, p)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tp = pp\n\t\t\tcursor = s.cursor\n\t\tcase '\"':\n\t\t\tliteral := s.buf[start:cursor]\n\t\t\tcursor++\n\t\t\ts.cursor = cursor\n\t\t\treturn literal, nil\n\t\tcase\n\t\t\t// 0x00 is nul, 0x5c is '\\\\', 0x22 is '\"' .\n\t\t\t0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, // 0x00-0x0F\n\t\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, // 0x10-0x1F\n\t\t\t0x20, 0x21 /*0x22,*/, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, // 0x20-0x2F\n\t\t\t0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, // 0x30-0x3F\n\t\t\t0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, // 0x40-0x4F\n\t\t\t0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B /*0x5C,*/, 0x5D, 0x5E, 0x5F, // 0x50-0x5F\n\t\t\t0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, // 0x60-0x6F\n\t\t\t0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F: // 0x70-0x7F\n\t\t\t// character is ASCII. skip to next char\n\t\tcase\n\t\t\t0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, // 0x80-0x8F\n\t\t\t0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, // 0x90-0x9F\n\t\t\t0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, // 0xA0-0xAF\n\t\t\t0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, // 0xB0-0xBF\n\t\t\t0xC0, 0xC1, // 0xC0-0xC1\n\t\t\t0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF: // 0xF5-0xFE\n\t\t\t// character is invalid\n\t\t\ts.buf = append(append(append([]byte{}, s.buf[:cursor]...), runeErrBytes...), s.buf[cursor+1:]...)\n\t\t\t_, _, p = s.stat()\n\t\t\tcursor += runeErrBytesLen\n\t\t\ts.length += runeErrBytesLen\n\t\t\tcontinue\n\t\tcase nul:\n\t\t\ts.cursor = cursor\n\t\t\tif s.read() {\n\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgoto ERROR\n\t\tcase 0xEF:\n\t\t\t// RuneError is {0xEF, 0xBF, 0xBD}\n\t\t\tif s.buf[cursor+1] == 0xBF && s.buf[cursor+2] == 0xBD {\n\t\t\t\t// found RuneError: skip\n\t\t\t\tcursor += 2\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tdefault:\n\t\t\t// multi bytes character\n\t\t\tif !utf8.FullRune(s.buf[cursor : len(s.buf)-1]) {\n\t\t\t\ts.cursor = cursor\n\t\t\t\tif s.read() {\n\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tgoto ERROR\n\t\t\t}\n\t\t\tr, size := utf8.DecodeRune(s.buf[cursor:])\n\t\t\tif r == utf8.RuneError {\n\t\t\t\ts.buf = append(append(append([]byte{}, s.buf[:cursor]...), runeErrBytes...), s.buf[cursor+1:]...)\n\t\t\t\tcursor += runeErrBytesLen\n\t\t\t\ts.length += runeErrBytesLen\n\t\t\t\t_, _, p = s.stat()\n\t\t\t} else {\n\t\t\t\tcursor += int64(size)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tcursor++\n\t}\nERROR:\n\treturn nil, errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n}\n\nfunc (d *stringDecoder) decodeStreamByte(s *Stream) ([]byte, error) {\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase '[':\n\t\t\treturn nil, d.errUnmarshalType(\"array\", s.totalOffset())\n\t\tcase '{':\n\t\t\treturn nil, d.errUnmarshalType(\"object\", s.totalOffset())\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn nil, d.errUnmarshalType(\"number\", s.totalOffset())\n\t\tcase '\"':\n\t\t\treturn stringBytes(s)\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\treturn nil, errors.ErrInvalidBeginningOfValue(s.char(), s.totalOffset())\n}\n\nfunc (d *stringDecoder) decodeByte(buf []byte, cursor int64) ([]byte, int64, error) {\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\tcase '[':\n\t\t\treturn nil, 0, d.errUnmarshalType(\"array\", cursor)\n\t\tcase '{':\n\t\t\treturn nil, 0, d.errUnmarshalType(\"object\", cursor)\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn nil, 0, d.errUnmarshalType(\"number\", cursor)\n\t\tcase '\"':\n\t\t\tcursor++\n\t\t\tstart := cursor\n\t\t\tb := (*sliceHeader)(unsafe.Pointer(&buf)).data\n\t\t\tescaped := 0\n\t\t\tfor {\n\t\t\t\tswitch char(b, cursor) {\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tescaped++\n\t\t\t\t\tcursor++\n\t\t\t\t\tswitch char(b, cursor) {\n\t\t\t\t\tcase '\"', '\\\\', '/', 'b', 'f', 'n', 'r', 't':\n\t\t\t\t\t\tcursor++\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tbuflen := int64(len(buf))\n\t\t\t\t\t\tif cursor+5 >= buflen {\n\t\t\t\t\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"escaped string\", cursor)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor i := int64(1); i <= 4; i++ {\n\t\t\t\t\t\t\tc := char(b, cursor+i)\n\t\t\t\t\t\t\tif !(('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F')) {\n\t\t\t\t\t\t\t\treturn nil, 0, errors.ErrSyntax(fmt.Sprintf(\"json: invalid character %c in \\\\u hexadecimal character escape\", c), cursor+i)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcursor += 5\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"escaped string\", cursor)\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\tcase '\"':\n\t\t\t\t\tliteral := buf[start:cursor]\n\t\t\t\t\tif escaped > 0 {\n\t\t\t\t\t\tliteral = literal[:unescapeString(literal)]\n\t\t\t\t\t}\n\t\t\t\t\tcursor++\n\t\t\t\t\treturn literal, cursor, nil\n\t\t\t\tcase nul:\n\t\t\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"string\", cursor)\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t}\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn nil, cursor, nil\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrInvalidBeginningOfValue(buf[cursor], cursor)\n\t\t}\n\t}\n}\n\nvar unescapeMap = [256]byte{\n\t'\"':  '\"',\n\t'\\\\': '\\\\',\n\t'/':  '/',\n\t'b':  '\\b',\n\t'f':  '\\f',\n\t'n':  '\\n',\n\t'r':  '\\r',\n\t't':  '\\t',\n}\n\nfunc unsafeAdd(ptr unsafe.Pointer, offset int) unsafe.Pointer {\n\treturn unsafe.Pointer(uintptr(ptr) + uintptr(offset))\n}\n\nfunc unescapeString(buf []byte) int {\n\tp := (*sliceHeader)(unsafe.Pointer(&buf)).data\n\tend := unsafeAdd(p, len(buf))\n\tsrc := unsafeAdd(p, bytes.IndexByte(buf, '\\\\'))\n\tdst := src\n\tfor src != end {\n\t\tc := char(src, 0)\n\t\tif c == '\\\\' {\n\t\t\tescapeChar := char(src, 1)\n\t\t\tif escapeChar != 'u' {\n\t\t\t\t*(*byte)(dst) = unescapeMap[escapeChar]\n\t\t\t\tsrc = unsafeAdd(src, 2)\n\t\t\t\tdst = unsafeAdd(dst, 1)\n\t\t\t} else {\n\t\t\t\tv1 := hexToInt[char(src, 2)]\n\t\t\t\tv2 := hexToInt[char(src, 3)]\n\t\t\t\tv3 := hexToInt[char(src, 4)]\n\t\t\t\tv4 := hexToInt[char(src, 5)]\n\t\t\t\tcode := rune((v1 << 12) | (v2 << 8) | (v3 << 4) | v4)\n\t\t\t\tif code >= 0xd800 && code < 0xdc00 && uintptr(unsafeAdd(src, 11)) < uintptr(end) {\n\t\t\t\t\tif char(src, 6) == '\\\\' && char(src, 7) == 'u' {\n\t\t\t\t\t\tv1 := hexToInt[char(src, 8)]\n\t\t\t\t\t\tv2 := hexToInt[char(src, 9)]\n\t\t\t\t\t\tv3 := hexToInt[char(src, 10)]\n\t\t\t\t\t\tv4 := hexToInt[char(src, 11)]\n\t\t\t\t\t\tlo := rune((v1 << 12) | (v2 << 8) | (v3 << 4) | v4)\n\t\t\t\t\t\tif lo >= 0xdc00 && lo < 0xe000 {\n\t\t\t\t\t\t\tcode = (code-0xd800)<<10 | (lo - 0xdc00) + 0x10000\n\t\t\t\t\t\t\tsrc = unsafeAdd(src, 6)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar b [utf8.UTFMax]byte\n\t\t\t\tn := utf8.EncodeRune(b[:], code)\n\t\t\t\tswitch n {\n\t\t\t\tcase 4:\n\t\t\t\t\t*(*byte)(unsafeAdd(dst, 3)) = b[3]\n\t\t\t\t\tfallthrough\n\t\t\t\tcase 3:\n\t\t\t\t\t*(*byte)(unsafeAdd(dst, 2)) = b[2]\n\t\t\t\t\tfallthrough\n\t\t\t\tcase 2:\n\t\t\t\t\t*(*byte)(unsafeAdd(dst, 1)) = b[1]\n\t\t\t\t\tfallthrough\n\t\t\t\tcase 1:\n\t\t\t\t\t*(*byte)(unsafeAdd(dst, 0)) = b[0]\n\t\t\t\t}\n\t\t\t\tsrc = unsafeAdd(src, 6)\n\t\t\t\tdst = unsafeAdd(dst, n)\n\t\t\t}\n\t\t} else {\n\t\t\t*(*byte)(dst) = c\n\t\t\tsrc = unsafeAdd(src, 1)\n\t\t\tdst = unsafeAdd(dst, 1)\n\t\t}\n\t}\n\treturn int(uintptr(dst) - uintptr(p))\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/struct.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"math/bits\"\n\t\"sort\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\ntype structFieldSet struct {\n\tdec         Decoder\n\toffset      uintptr\n\tisTaggedKey bool\n\tfieldIdx    int\n\tkey         string\n\tkeyLen      int64\n\terr         error\n}\n\ntype structDecoder struct {\n\tfieldMap           map[string]*structFieldSet\n\tfieldUniqueNameNum int\n\tstringDecoder      *stringDecoder\n\tstructName         string\n\tfieldName          string\n\tisTriedOptimize    bool\n\tkeyBitmapUint8     [][256]uint8\n\tkeyBitmapUint16    [][256]uint16\n\tsortedFieldSets    []*structFieldSet\n\tkeyDecoder         func(*structDecoder, []byte, int64) (int64, *structFieldSet, error)\n\tkeyStreamDecoder   func(*structDecoder, *Stream) (*structFieldSet, string, error)\n}\n\nvar (\n\tlargeToSmallTable [256]byte\n)\n\nfunc init() {\n\tfor i := 0; i < 256; i++ {\n\t\tc := i\n\t\tif 'A' <= c && c <= 'Z' {\n\t\t\tc += 'a' - 'A'\n\t\t}\n\t\tlargeToSmallTable[i] = byte(c)\n\t}\n}\n\nfunc toASCIILower(s string) string {\n\tb := []byte(s)\n\tfor i := range b {\n\t\tb[i] = largeToSmallTable[b[i]]\n\t}\n\treturn string(b)\n}\n\nfunc newStructDecoder(structName, fieldName string, fieldMap map[string]*structFieldSet) *structDecoder {\n\treturn &structDecoder{\n\t\tfieldMap:         fieldMap,\n\t\tstringDecoder:    newStringDecoder(structName, fieldName),\n\t\tstructName:       structName,\n\t\tfieldName:        fieldName,\n\t\tkeyDecoder:       decodeKey,\n\t\tkeyStreamDecoder: decodeKeyStream,\n\t}\n}\n\nconst (\n\tallowOptimizeMaxKeyLen   = 64\n\tallowOptimizeMaxFieldLen = 16\n)\n\nfunc (d *structDecoder) tryOptimize() {\n\tfieldUniqueNameMap := map[string]int{}\n\tfieldIdx := -1\n\tfor k, v := range d.fieldMap {\n\t\tlower := strings.ToLower(k)\n\t\tidx, exists := fieldUniqueNameMap[lower]\n\t\tif exists {\n\t\t\tv.fieldIdx = idx\n\t\t} else {\n\t\t\tfieldIdx++\n\t\t\tv.fieldIdx = fieldIdx\n\t\t}\n\t\tfieldUniqueNameMap[lower] = fieldIdx\n\t}\n\td.fieldUniqueNameNum = len(fieldUniqueNameMap)\n\n\tif d.isTriedOptimize {\n\t\treturn\n\t}\n\tfieldMap := map[string]*structFieldSet{}\n\tconflicted := map[string]struct{}{}\n\tfor k, v := range d.fieldMap {\n\t\tkey := strings.ToLower(k)\n\t\tif key != k {\n\t\t\tif key != toASCIILower(k) {\n\t\t\t\td.isTriedOptimize = true\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// already exists same key (e.g. Hello and HELLO has same lower case key\n\t\t\tif _, exists := conflicted[key]; exists {\n\t\t\t\td.isTriedOptimize = true\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconflicted[key] = struct{}{}\n\t\t}\n\t\tif field, exists := fieldMap[key]; exists {\n\t\t\tif field != v {\n\t\t\t\td.isTriedOptimize = true\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tfieldMap[key] = v\n\t}\n\n\tif len(fieldMap) > allowOptimizeMaxFieldLen {\n\t\td.isTriedOptimize = true\n\t\treturn\n\t}\n\n\tvar maxKeyLen int\n\tsortedKeys := []string{}\n\tfor key := range fieldMap {\n\t\tkeyLen := len(key)\n\t\tif keyLen > allowOptimizeMaxKeyLen {\n\t\t\td.isTriedOptimize = true\n\t\t\treturn\n\t\t}\n\t\tif maxKeyLen < keyLen {\n\t\t\tmaxKeyLen = keyLen\n\t\t}\n\t\tsortedKeys = append(sortedKeys, key)\n\t}\n\tsort.Strings(sortedKeys)\n\n\t// By allocating one extra capacity than `maxKeyLen`,\n\t// it is possible to avoid the process of comparing the index of the key with the length of the bitmap each time.\n\tbitmapLen := maxKeyLen + 1\n\tif len(sortedKeys) <= 8 {\n\t\tkeyBitmap := make([][256]uint8, bitmapLen)\n\t\tfor i, key := range sortedKeys {\n\t\t\tfor j := 0; j < len(key); j++ {\n\t\t\t\tc := key[j]\n\t\t\t\tkeyBitmap[j][c] |= (1 << uint(i))\n\t\t\t}\n\t\t\td.sortedFieldSets = append(d.sortedFieldSets, fieldMap[key])\n\t\t}\n\t\td.keyBitmapUint8 = keyBitmap\n\t\td.keyDecoder = decodeKeyByBitmapUint8\n\t\td.keyStreamDecoder = decodeKeyByBitmapUint8Stream\n\t} else {\n\t\tkeyBitmap := make([][256]uint16, bitmapLen)\n\t\tfor i, key := range sortedKeys {\n\t\t\tfor j := 0; j < len(key); j++ {\n\t\t\t\tc := key[j]\n\t\t\t\tkeyBitmap[j][c] |= (1 << uint(i))\n\t\t\t}\n\t\t\td.sortedFieldSets = append(d.sortedFieldSets, fieldMap[key])\n\t\t}\n\t\td.keyBitmapUint16 = keyBitmap\n\t\td.keyDecoder = decodeKeyByBitmapUint16\n\t\td.keyStreamDecoder = decodeKeyByBitmapUint16Stream\n\t}\n}\n\n// decode from '\\uXXXX'\nfunc decodeKeyCharByUnicodeRune(buf []byte, cursor int64) ([]byte, int64, error) {\n\tconst defaultOffset = 4\n\tconst surrogateOffset = 6\n\n\tif cursor+defaultOffset >= int64(len(buf)) {\n\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"escaped string\", cursor)\n\t}\n\n\tr := unicodeToRune(buf[cursor : cursor+defaultOffset])\n\tif utf16.IsSurrogate(r) {\n\t\tcursor += defaultOffset\n\t\tif cursor+surrogateOffset >= int64(len(buf)) || buf[cursor] != '\\\\' || buf[cursor+1] != 'u' {\n\t\t\treturn []byte(string(unicode.ReplacementChar)), cursor + defaultOffset - 1, nil\n\t\t}\n\t\tcursor += 2\n\t\tr2 := unicodeToRune(buf[cursor : cursor+defaultOffset])\n\t\tif r := utf16.DecodeRune(r, r2); r != unicode.ReplacementChar {\n\t\t\treturn []byte(string(r)), cursor + defaultOffset - 1, nil\n\t\t}\n\t}\n\treturn []byte(string(r)), cursor + defaultOffset - 1, nil\n}\n\nfunc decodeKeyCharByEscapedChar(buf []byte, cursor int64) ([]byte, int64, error) {\n\tc := buf[cursor]\n\tcursor++\n\tswitch c {\n\tcase '\"':\n\t\treturn []byte{'\"'}, cursor, nil\n\tcase '\\\\':\n\t\treturn []byte{'\\\\'}, cursor, nil\n\tcase '/':\n\t\treturn []byte{'/'}, cursor, nil\n\tcase 'b':\n\t\treturn []byte{'\\b'}, cursor, nil\n\tcase 'f':\n\t\treturn []byte{'\\f'}, cursor, nil\n\tcase 'n':\n\t\treturn []byte{'\\n'}, cursor, nil\n\tcase 'r':\n\t\treturn []byte{'\\r'}, cursor, nil\n\tcase 't':\n\t\treturn []byte{'\\t'}, cursor, nil\n\tcase 'u':\n\t\treturn decodeKeyCharByUnicodeRune(buf, cursor)\n\t}\n\treturn nil, cursor, nil\n}\n\nfunc decodeKeyByBitmapUint8(d *structDecoder, buf []byte, cursor int64) (int64, *structFieldSet, error) {\n\tvar (\n\t\tcurBit uint8 = math.MaxUint8\n\t)\n\tb := (*sliceHeader)(unsafe.Pointer(&buf)).data\n\tfor {\n\t\tswitch char(b, cursor) {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\tcase '\"':\n\t\t\tcursor++\n\t\t\tc := char(b, cursor)\n\t\t\tswitch c {\n\t\t\tcase '\"':\n\t\t\t\tcursor++\n\t\t\t\treturn cursor, nil, nil\n\t\t\tcase nul:\n\t\t\t\treturn 0, nil, errors.ErrUnexpectedEndOfJSON(\"string\", cursor)\n\t\t\t}\n\t\t\tkeyIdx := 0\n\t\t\tbitmap := d.keyBitmapUint8\n\t\t\tstart := cursor\n\t\t\tfor {\n\t\t\t\tc := char(b, cursor)\n\t\t\t\tswitch c {\n\t\t\t\tcase '\"':\n\t\t\t\t\tfieldSetIndex := bits.TrailingZeros8(curBit)\n\t\t\t\t\tfield := d.sortedFieldSets[fieldSetIndex]\n\t\t\t\t\tkeyLen := cursor - start\n\t\t\t\t\tcursor++\n\t\t\t\t\tif keyLen < field.keyLen {\n\t\t\t\t\t\t// early match\n\t\t\t\t\t\treturn cursor, nil, nil\n\t\t\t\t\t}\n\t\t\t\t\treturn cursor, field, nil\n\t\t\t\tcase nul:\n\t\t\t\t\treturn 0, nil, errors.ErrUnexpectedEndOfJSON(\"string\", cursor)\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tchars, nextCursor, err := decodeKeyCharByEscapedChar(buf, cursor)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, nil, err\n\t\t\t\t\t}\n\t\t\t\t\tfor _, c := range chars {\n\t\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\t\treturn decodeKeyNotFound(b, cursor)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeyIdx++\n\t\t\t\t\t}\n\t\t\t\t\tcursor = nextCursor\n\t\t\t\tdefault:\n\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\treturn decodeKeyNotFound(b, cursor)\n\t\t\t\t\t}\n\t\t\t\t\tkeyIdx++\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t}\n\t\tdefault:\n\t\t\treturn cursor, nil, errors.ErrInvalidBeginningOfValue(char(b, cursor), cursor)\n\t\t}\n\t}\n}\n\nfunc decodeKeyByBitmapUint16(d *structDecoder, buf []byte, cursor int64) (int64, *structFieldSet, error) {\n\tvar (\n\t\tcurBit uint16 = math.MaxUint16\n\t)\n\tb := (*sliceHeader)(unsafe.Pointer(&buf)).data\n\tfor {\n\t\tswitch char(b, cursor) {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\tcase '\"':\n\t\t\tcursor++\n\t\t\tc := char(b, cursor)\n\t\t\tswitch c {\n\t\t\tcase '\"':\n\t\t\t\tcursor++\n\t\t\t\treturn cursor, nil, nil\n\t\t\tcase nul:\n\t\t\t\treturn 0, nil, errors.ErrUnexpectedEndOfJSON(\"string\", cursor)\n\t\t\t}\n\t\t\tkeyIdx := 0\n\t\t\tbitmap := d.keyBitmapUint16\n\t\t\tstart := cursor\n\t\t\tfor {\n\t\t\t\tc := char(b, cursor)\n\t\t\t\tswitch c {\n\t\t\t\tcase '\"':\n\t\t\t\t\tfieldSetIndex := bits.TrailingZeros16(curBit)\n\t\t\t\t\tfield := d.sortedFieldSets[fieldSetIndex]\n\t\t\t\t\tkeyLen := cursor - start\n\t\t\t\t\tcursor++\n\t\t\t\t\tif keyLen < field.keyLen {\n\t\t\t\t\t\t// early match\n\t\t\t\t\t\treturn cursor, nil, nil\n\t\t\t\t\t}\n\t\t\t\t\treturn cursor, field, nil\n\t\t\t\tcase nul:\n\t\t\t\t\treturn 0, nil, errors.ErrUnexpectedEndOfJSON(\"string\", cursor)\n\t\t\t\tcase '\\\\':\n\t\t\t\t\tcursor++\n\t\t\t\t\tchars, nextCursor, err := decodeKeyCharByEscapedChar(buf, cursor)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, nil, err\n\t\t\t\t\t}\n\t\t\t\t\tfor _, c := range chars {\n\t\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\t\treturn decodeKeyNotFound(b, cursor)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeyIdx++\n\t\t\t\t\t}\n\t\t\t\t\tcursor = nextCursor\n\t\t\t\tdefault:\n\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\treturn decodeKeyNotFound(b, cursor)\n\t\t\t\t\t}\n\t\t\t\t\tkeyIdx++\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t}\n\t\tdefault:\n\t\t\treturn cursor, nil, errors.ErrInvalidBeginningOfValue(char(b, cursor), cursor)\n\t\t}\n\t}\n}\n\nfunc decodeKeyNotFound(b unsafe.Pointer, cursor int64) (int64, *structFieldSet, error) {\n\tfor {\n\t\tcursor++\n\t\tswitch char(b, cursor) {\n\t\tcase '\"':\n\t\t\tcursor++\n\t\t\treturn cursor, nil, nil\n\t\tcase '\\\\':\n\t\t\tcursor++\n\t\t\tif char(b, cursor) == nul {\n\t\t\t\treturn 0, nil, errors.ErrUnexpectedEndOfJSON(\"string\", cursor)\n\t\t\t}\n\t\tcase nul:\n\t\t\treturn 0, nil, errors.ErrUnexpectedEndOfJSON(\"string\", cursor)\n\t\t}\n\t}\n}\n\nfunc decodeKey(d *structDecoder, buf []byte, cursor int64) (int64, *structFieldSet, error) {\n\tkey, c, err := d.stringDecoder.decodeByte(buf, cursor)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\tcursor = c\n\tk := *(*string)(unsafe.Pointer(&key))\n\tfield, exists := d.fieldMap[k]\n\tif !exists {\n\t\treturn cursor, nil, nil\n\t}\n\treturn cursor, field, nil\n}\n\nfunc decodeKeyByBitmapUint8Stream(d *structDecoder, s *Stream) (*structFieldSet, string, error) {\n\tvar (\n\t\tcurBit uint8 = math.MaxUint8\n\t)\n\t_, cursor, p := s.stat()\n\tfor {\n\t\tswitch char(p, cursor) {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\tcase nul:\n\t\t\ts.cursor = cursor\n\t\t\tif s.read() {\n\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, \"\", errors.ErrInvalidBeginningOfValue(char(p, cursor), s.totalOffset())\n\t\tcase '\"':\n\t\t\tcursor++\n\t\tFIRST_CHAR:\n\t\t\tstart := cursor\n\t\t\tswitch char(p, cursor) {\n\t\t\tcase '\"':\n\t\t\t\tcursor++\n\t\t\t\ts.cursor = cursor\n\t\t\t\treturn nil, \"\", nil\n\t\t\tcase nul:\n\t\t\t\ts.cursor = cursor\n\t\t\t\tif s.read() {\n\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\tgoto FIRST_CHAR\n\t\t\t\t}\n\t\t\t\treturn nil, \"\", errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t\t\t}\n\t\t\tkeyIdx := 0\n\t\t\tbitmap := d.keyBitmapUint8\n\t\t\tfor {\n\t\t\t\tc := char(p, cursor)\n\t\t\t\tswitch c {\n\t\t\t\tcase '\"':\n\t\t\t\t\tfieldSetIndex := bits.TrailingZeros8(curBit)\n\t\t\t\t\tfield := d.sortedFieldSets[fieldSetIndex]\n\t\t\t\t\tkeyLen := cursor - start\n\t\t\t\t\tcursor++\n\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\tif keyLen < field.keyLen {\n\t\t\t\t\t\t// early match\n\t\t\t\t\t\treturn nil, field.key, nil\n\t\t\t\t\t}\n\t\t\t\t\treturn field, field.key, nil\n\t\t\t\tcase nul:\n\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn nil, \"\", errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t\t\t\tcase '\\\\':\n\t\t\t\t\ts.cursor = cursor + 1 // skip '\\' char\n\t\t\t\t\tchars, err := decodeKeyCharByEscapeCharStream(s)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, \"\", err\n\t\t\t\t\t}\n\t\t\t\t\tcursor = s.cursor\n\t\t\t\t\tfor _, c := range chars {\n\t\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\t\t\treturn decodeKeyNotFoundStream(s, start)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeyIdx++\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\t\treturn decodeKeyNotFoundStream(s, start)\n\t\t\t\t\t}\n\t\t\t\t\tkeyIdx++\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, \"\", errors.ErrInvalidBeginningOfValue(char(p, cursor), s.totalOffset())\n\t\t}\n\t}\n}\n\nfunc decodeKeyByBitmapUint16Stream(d *structDecoder, s *Stream) (*structFieldSet, string, error) {\n\tvar (\n\t\tcurBit uint16 = math.MaxUint16\n\t)\n\t_, cursor, p := s.stat()\n\tfor {\n\t\tswitch char(p, cursor) {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\tcase nul:\n\t\t\ts.cursor = cursor\n\t\t\tif s.read() {\n\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, \"\", errors.ErrInvalidBeginningOfValue(char(p, cursor), s.totalOffset())\n\t\tcase '\"':\n\t\t\tcursor++\n\t\tFIRST_CHAR:\n\t\t\tstart := cursor\n\t\t\tswitch char(p, cursor) {\n\t\t\tcase '\"':\n\t\t\t\tcursor++\n\t\t\t\ts.cursor = cursor\n\t\t\t\treturn nil, \"\", nil\n\t\t\tcase nul:\n\t\t\t\ts.cursor = cursor\n\t\t\t\tif s.read() {\n\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\tgoto FIRST_CHAR\n\t\t\t\t}\n\t\t\t\treturn nil, \"\", errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t\t\t}\n\t\t\tkeyIdx := 0\n\t\t\tbitmap := d.keyBitmapUint16\n\t\t\tfor {\n\t\t\t\tc := char(p, cursor)\n\t\t\t\tswitch c {\n\t\t\t\tcase '\"':\n\t\t\t\t\tfieldSetIndex := bits.TrailingZeros16(curBit)\n\t\t\t\t\tfield := d.sortedFieldSets[fieldSetIndex]\n\t\t\t\t\tkeyLen := cursor - start\n\t\t\t\t\tcursor++\n\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\tif keyLen < field.keyLen {\n\t\t\t\t\t\t// early match\n\t\t\t\t\t\treturn nil, field.key, nil\n\t\t\t\t\t}\n\t\t\t\t\treturn field, field.key, nil\n\t\t\t\tcase nul:\n\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\t_, cursor, p = s.stat()\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn nil, \"\", errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t\t\t\tcase '\\\\':\n\t\t\t\t\ts.cursor = cursor + 1 // skip '\\' char\n\t\t\t\t\tchars, err := decodeKeyCharByEscapeCharStream(s)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, \"\", err\n\t\t\t\t\t}\n\t\t\t\t\tcursor = s.cursor\n\t\t\t\t\tfor _, c := range chars {\n\t\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\t\t\treturn decodeKeyNotFoundStream(s, start)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeyIdx++\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tcurBit &= bitmap[keyIdx][largeToSmallTable[c]]\n\t\t\t\t\tif curBit == 0 {\n\t\t\t\t\t\ts.cursor = cursor\n\t\t\t\t\t\treturn decodeKeyNotFoundStream(s, start)\n\t\t\t\t\t}\n\t\t\t\t\tkeyIdx++\n\t\t\t\t}\n\t\t\t\tcursor++\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, \"\", errors.ErrInvalidBeginningOfValue(char(p, cursor), s.totalOffset())\n\t\t}\n\t}\n}\n\n// decode from '\\uXXXX'\nfunc decodeKeyCharByUnicodeRuneStream(s *Stream) ([]byte, error) {\n\tconst defaultOffset = 4\n\tconst surrogateOffset = 6\n\n\tif s.cursor+defaultOffset >= s.length {\n\t\tif !s.read() {\n\t\t\treturn nil, errors.ErrInvalidCharacter(s.char(), \"escaped unicode char\", s.totalOffset())\n\t\t}\n\t}\n\n\tr := unicodeToRune(s.buf[s.cursor : s.cursor+defaultOffset])\n\tif utf16.IsSurrogate(r) {\n\t\ts.cursor += defaultOffset\n\t\tif s.cursor+surrogateOffset >= s.length {\n\t\t\ts.read()\n\t\t}\n\t\tif s.cursor+surrogateOffset >= s.length || s.buf[s.cursor] != '\\\\' || s.buf[s.cursor+1] != 'u' {\n\t\t\ts.cursor += defaultOffset - 1\n\t\t\treturn []byte(string(unicode.ReplacementChar)), nil\n\t\t}\n\t\tr2 := unicodeToRune(s.buf[s.cursor+defaultOffset+2 : s.cursor+surrogateOffset])\n\t\tif r := utf16.DecodeRune(r, r2); r != unicode.ReplacementChar {\n\t\t\ts.cursor += defaultOffset - 1\n\t\t\treturn []byte(string(r)), nil\n\t\t}\n\t}\n\ts.cursor += defaultOffset - 1\n\treturn []byte(string(r)), nil\n}\n\nfunc decodeKeyCharByEscapeCharStream(s *Stream) ([]byte, error) {\n\tc := s.buf[s.cursor]\n\ts.cursor++\nRETRY:\n\tswitch c {\n\tcase '\"':\n\t\treturn []byte{'\"'}, nil\n\tcase '\\\\':\n\t\treturn []byte{'\\\\'}, nil\n\tcase '/':\n\t\treturn []byte{'/'}, nil\n\tcase 'b':\n\t\treturn []byte{'\\b'}, nil\n\tcase 'f':\n\t\treturn []byte{'\\f'}, nil\n\tcase 'n':\n\t\treturn []byte{'\\n'}, nil\n\tcase 'r':\n\t\treturn []byte{'\\r'}, nil\n\tcase 't':\n\t\treturn []byte{'\\t'}, nil\n\tcase 'u':\n\t\treturn decodeKeyCharByUnicodeRuneStream(s)\n\tcase nul:\n\t\tif !s.read() {\n\t\t\treturn nil, errors.ErrInvalidCharacter(s.char(), \"escaped char\", s.totalOffset())\n\t\t}\n\t\tgoto RETRY\n\tdefault:\n\t\treturn nil, errors.ErrUnexpectedEndOfJSON(\"struct field\", s.totalOffset())\n\t}\n}\n\nfunc decodeKeyNotFoundStream(s *Stream, start int64) (*structFieldSet, string, error) {\n\tbuf, cursor, p := s.stat()\n\tfor {\n\t\tcursor++\n\t\tswitch char(p, cursor) {\n\t\tcase '\"':\n\t\t\tb := buf[start:cursor]\n\t\t\tkey := *(*string)(unsafe.Pointer(&b))\n\t\t\tcursor++\n\t\t\ts.cursor = cursor\n\t\t\treturn nil, key, nil\n\t\tcase '\\\\':\n\t\t\tcursor++\n\t\t\tif char(p, cursor) == nul {\n\t\t\t\ts.cursor = cursor\n\t\t\t\tif !s.read() {\n\t\t\t\t\treturn nil, \"\", errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t\t\t\t}\n\t\t\t\tbuf, cursor, p = s.statForRetry()\n\t\t\t}\n\t\tcase nul:\n\t\t\ts.cursor = cursor\n\t\t\tif !s.read() {\n\t\t\t\treturn nil, \"\", errors.ErrUnexpectedEndOfJSON(\"string\", s.totalOffset())\n\t\t\t}\n\t\t\tbuf, cursor, p = s.statForRetry()\n\t\t}\n\t}\n}\n\nfunc decodeKeyStream(d *structDecoder, s *Stream) (*structFieldSet, string, error) {\n\tkey, err := d.stringDecoder.decodeStreamByte(s)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tk := *(*string)(unsafe.Pointer(&key))\n\treturn d.fieldMap[k], k, nil\n}\n\nfunc (d *structDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn errors.ErrExceededMaxDepth(s.char(), s.cursor)\n\t}\n\n\tc := s.skipWhiteSpace()\n\tswitch c {\n\tcase 'n':\n\t\tif err := nullBytes(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\tdefault:\n\t\tif s.char() != '{' {\n\t\t\treturn errors.ErrInvalidBeginningOfValue(s.char(), s.totalOffset())\n\t\t}\n\t}\n\ts.cursor++\n\tif s.skipWhiteSpace() == '}' {\n\t\ts.cursor++\n\t\treturn nil\n\t}\n\tvar (\n\t\tseenFields   map[int]struct{}\n\t\tseenFieldNum int\n\t)\n\tfirstWin := (s.Option.Flags & FirstWinOption) != 0\n\tif firstWin {\n\t\tseenFields = make(map[int]struct{}, d.fieldUniqueNameNum)\n\t}\n\tfor {\n\t\ts.reset()\n\t\tfield, key, err := d.keyStreamDecoder(d, s)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif s.skipWhiteSpace() != ':' {\n\t\t\treturn errors.ErrExpected(\"colon after object key\", s.totalOffset())\n\t\t}\n\t\ts.cursor++\n\t\tif field != nil {\n\t\t\tif field.err != nil {\n\t\t\t\treturn field.err\n\t\t\t}\n\t\t\tif firstWin {\n\t\t\t\tif _, exists := seenFields[field.fieldIdx]; exists {\n\t\t\t\t\tif err := s.skipValue(depth); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif err := field.dec.DecodeStream(s, depth, unsafe.Pointer(uintptr(p)+field.offset)); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tseenFieldNum++\n\t\t\t\t\tif d.fieldUniqueNameNum <= seenFieldNum {\n\t\t\t\t\t\treturn s.skipObject(depth)\n\t\t\t\t\t}\n\t\t\t\t\tseenFields[field.fieldIdx] = struct{}{}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := field.dec.DecodeStream(s, depth, unsafe.Pointer(uintptr(p)+field.offset)); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t} else if s.DisallowUnknownFields {\n\t\t\treturn fmt.Errorf(\"json: unknown field %q\", key)\n\t\t} else {\n\t\t\tif err := s.skipValue(depth); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tc := s.skipWhiteSpace()\n\t\tif c == '}' {\n\t\t\ts.cursor++\n\t\t\treturn nil\n\t\t}\n\t\tif c != ',' {\n\t\t\treturn errors.ErrExpected(\"comma after object element\", s.totalOffset())\n\t\t}\n\t\ts.cursor++\n\t}\n}\n\nfunc (d *structDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tdepth++\n\tif depth > maxDecodeNestingDepth {\n\t\treturn 0, errors.ErrExceededMaxDepth(buf[cursor], cursor)\n\t}\n\tbuflen := int64(len(buf))\n\tcursor = skipWhiteSpace(buf, cursor)\n\tb := (*sliceHeader)(unsafe.Pointer(&buf)).data\n\tswitch char(b, cursor) {\n\tcase 'n':\n\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor += 4\n\t\treturn cursor, nil\n\tcase '{':\n\tdefault:\n\t\treturn 0, errors.ErrInvalidBeginningOfValue(char(b, cursor), cursor)\n\t}\n\tcursor++\n\tcursor = skipWhiteSpace(buf, cursor)\n\tif buf[cursor] == '}' {\n\t\tcursor++\n\t\treturn cursor, nil\n\t}\n\tvar (\n\t\tseenFields   map[int]struct{}\n\t\tseenFieldNum int\n\t)\n\tfirstWin := (ctx.Option.Flags & FirstWinOption) != 0\n\tif firstWin {\n\t\tseenFields = make(map[int]struct{}, d.fieldUniqueNameNum)\n\t}\n\tfor {\n\t\tc, field, err := d.keyDecoder(d, buf, cursor)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(buf, c)\n\t\tif char(b, cursor) != ':' {\n\t\t\treturn 0, errors.ErrExpected(\"colon after object key\", cursor)\n\t\t}\n\t\tcursor++\n\t\tif cursor >= buflen {\n\t\t\treturn 0, errors.ErrExpected(\"object value after colon\", cursor)\n\t\t}\n\t\tif field != nil {\n\t\t\tif field.err != nil {\n\t\t\t\treturn 0, field.err\n\t\t\t}\n\t\t\tif firstWin {\n\t\t\t\tif _, exists := seenFields[field.fieldIdx]; exists {\n\t\t\t\t\tc, err := skipValue(buf, cursor, depth)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t\tcursor = c\n\t\t\t\t} else {\n\t\t\t\t\tc, err := field.dec.Decode(ctx, cursor, depth, unsafe.Pointer(uintptr(p)+field.offset))\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t\tcursor = c\n\t\t\t\t\tseenFieldNum++\n\t\t\t\t\tif d.fieldUniqueNameNum <= seenFieldNum {\n\t\t\t\t\t\treturn skipObject(buf, cursor, depth)\n\t\t\t\t\t}\n\t\t\t\t\tseenFields[field.fieldIdx] = struct{}{}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tc, err := field.dec.Decode(ctx, cursor, depth, unsafe.Pointer(uintptr(p)+field.offset))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\tcursor = c\n\t\t\t}\n\t\t} else {\n\t\t\tc, err := skipValue(buf, cursor, depth)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tcursor = c\n\t\t}\n\t\tcursor = skipWhiteSpace(buf, cursor)\n\t\tif char(b, cursor) == '}' {\n\t\t\tcursor++\n\t\t\treturn cursor, nil\n\t\t}\n\t\tif char(b, cursor) != ',' {\n\t\t\treturn 0, errors.ErrExpected(\"comma after object element\", cursor)\n\t\t}\n\t\tcursor++\n\t}\n}\n\nfunc (d *structDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: struct decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/type.go",
    "content": "package decoder\n\nimport (\n\t\"context\"\n\t\"encoding\"\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"unsafe\"\n)\n\ntype Decoder interface {\n\tDecode(*RuntimeContext, int64, int64, unsafe.Pointer) (int64, error)\n\tDecodePath(*RuntimeContext, int64, int64) ([][]byte, int64, error)\n\tDecodeStream(*Stream, int64, unsafe.Pointer) error\n}\n\nconst (\n\tnul                   = '\\000'\n\tmaxDecodeNestingDepth = 10000\n)\n\ntype unmarshalerContext interface {\n\tUnmarshalJSON(context.Context, []byte) error\n}\n\nvar (\n\tunmarshalJSONType        = reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()\n\tunmarshalJSONContextType = reflect.TypeOf((*unmarshalerContext)(nil)).Elem()\n\tunmarshalTextType        = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()\n)\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/uint.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype uintDecoder struct {\n\ttyp        *runtime.Type\n\tkind       reflect.Kind\n\top         func(unsafe.Pointer, uint64)\n\tstructName string\n\tfieldName  string\n}\n\nfunc newUintDecoder(typ *runtime.Type, structName, fieldName string, op func(unsafe.Pointer, uint64)) *uintDecoder {\n\treturn &uintDecoder{\n\t\ttyp:        typ,\n\t\tkind:       typ.Kind(),\n\t\top:         op,\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *uintDecoder) typeError(buf []byte, offset int64) *errors.UnmarshalTypeError {\n\treturn &errors.UnmarshalTypeError{\n\t\tValue:  fmt.Sprintf(\"number %s\", string(buf)),\n\t\tType:   runtime.RType2Type(d.typ),\n\t\tOffset: offset,\n\t}\n}\n\nvar (\n\tpow10u64 = [...]uint64{\n\t\t1e00, 1e01, 1e02, 1e03, 1e04, 1e05, 1e06, 1e07, 1e08, 1e09,\n\t\t1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,\n\t}\n\tpow10u64Len = len(pow10u64)\n)\n\nfunc (d *uintDecoder) parseUint(b []byte) (uint64, error) {\n\tmaxDigit := len(b)\n\tif maxDigit > pow10u64Len {\n\t\treturn 0, fmt.Errorf(\"invalid length of number\")\n\t}\n\tsum := uint64(0)\n\tfor i := 0; i < maxDigit; i++ {\n\t\tc := uint64(b[i]) - 48\n\t\tdigitValue := pow10u64[maxDigit-i-1]\n\t\tsum += c * digitValue\n\t}\n\treturn sum, nil\n}\n\nfunc (d *uintDecoder) decodeStreamByte(s *Stream) ([]byte, error) {\n\tfor {\n\t\tswitch s.char() {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\ts.cursor++\n\t\t\tcontinue\n\t\tcase '0':\n\t\t\ts.cursor++\n\t\t\treturn numZeroBuf, nil\n\t\tcase '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tstart := s.cursor\n\t\t\tfor {\n\t\t\t\ts.cursor++\n\t\t\t\tif numTable[s.char()] {\n\t\t\t\t\tcontinue\n\t\t\t\t} else if s.char() == nul {\n\t\t\t\t\tif s.read() {\n\t\t\t\t\t\ts.cursor-- // for retry current character\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tnum := s.buf[start:s.cursor]\n\t\t\treturn num, nil\n\t\tcase 'n':\n\t\t\tif err := nullBytes(s); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, nil\n\t\tcase nul:\n\t\t\tif s.read() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, d.typeError([]byte{s.char()}, s.totalOffset())\n\t\t}\n\t\tbreak\n\t}\n\treturn nil, errors.ErrUnexpectedEndOfJSON(\"number(unsigned integer)\", s.totalOffset())\n}\n\nfunc (d *uintDecoder) decodeByte(buf []byte, cursor int64) ([]byte, int64, error) {\n\tfor {\n\t\tswitch buf[cursor] {\n\t\tcase ' ', '\\n', '\\t', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase '0':\n\t\t\tcursor++\n\t\t\treturn numZeroBuf, cursor, nil\n\t\tcase '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tstart := cursor\n\t\t\tcursor++\n\t\t\tfor numTable[buf[cursor]] {\n\t\t\t\tcursor++\n\t\t\t}\n\t\t\tnum := buf[start:cursor]\n\t\t\treturn num, cursor, nil\n\t\tcase 'n':\n\t\t\tif err := validateNull(buf, cursor); err != nil {\n\t\t\t\treturn nil, 0, err\n\t\t\t}\n\t\t\tcursor += 4\n\t\t\treturn nil, cursor, nil\n\t\tdefault:\n\t\t\treturn nil, 0, d.typeError([]byte{buf[cursor]}, cursor)\n\t\t}\n\t}\n}\n\nfunc (d *uintDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tbytes, err := d.decodeStreamByte(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif bytes == nil {\n\t\treturn nil\n\t}\n\tu64, err := d.parseUint(bytes)\n\tif err != nil {\n\t\treturn d.typeError(bytes, s.totalOffset())\n\t}\n\tswitch d.kind {\n\tcase reflect.Uint8:\n\t\tif (1 << 8) <= u64 {\n\t\t\treturn d.typeError(bytes, s.totalOffset())\n\t\t}\n\tcase reflect.Uint16:\n\t\tif (1 << 16) <= u64 {\n\t\t\treturn d.typeError(bytes, s.totalOffset())\n\t\t}\n\tcase reflect.Uint32:\n\t\tif (1 << 32) <= u64 {\n\t\t\treturn d.typeError(bytes, s.totalOffset())\n\t\t}\n\t}\n\td.op(p, u64)\n\treturn nil\n}\n\nfunc (d *uintDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbytes, c, err := d.decodeByte(ctx.Buf, cursor)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif bytes == nil {\n\t\treturn c, nil\n\t}\n\tcursor = c\n\tu64, err := d.parseUint(bytes)\n\tif err != nil {\n\t\treturn 0, d.typeError(bytes, cursor)\n\t}\n\tswitch d.kind {\n\tcase reflect.Uint8:\n\t\tif (1 << 8) <= u64 {\n\t\t\treturn 0, d.typeError(bytes, cursor)\n\t\t}\n\tcase reflect.Uint16:\n\t\tif (1 << 16) <= u64 {\n\t\t\treturn 0, d.typeError(bytes, cursor)\n\t\t}\n\tcase reflect.Uint32:\n\t\tif (1 << 32) <= u64 {\n\t\t\treturn 0, d.typeError(bytes, cursor)\n\t\t}\n\t}\n\td.op(p, u64)\n\treturn cursor, nil\n}\n\nfunc (d *uintDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: uint decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go",
    "content": "package decoder\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype unmarshalJSONDecoder struct {\n\ttyp        *runtime.Type\n\tstructName string\n\tfieldName  string\n}\n\nfunc newUnmarshalJSONDecoder(typ *runtime.Type, structName, fieldName string) *unmarshalJSONDecoder {\n\treturn &unmarshalJSONDecoder{\n\t\ttyp:        typ,\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *unmarshalJSONDecoder) annotateError(cursor int64, err error) {\n\tswitch e := err.(type) {\n\tcase *errors.UnmarshalTypeError:\n\t\te.Struct = d.structName\n\t\te.Field = d.fieldName\n\tcase *errors.SyntaxError:\n\t\te.Offset = cursor\n\t}\n}\n\nfunc (d *unmarshalJSONDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\ts.skipWhiteSpace()\n\tstart := s.cursor\n\tif err := s.skipValue(depth); err != nil {\n\t\treturn err\n\t}\n\tsrc := s.buf[start:s.cursor]\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tv := *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: d.typ,\n\t\tptr: p,\n\t}))\n\tswitch v := v.(type) {\n\tcase unmarshalerContext:\n\t\tvar ctx context.Context\n\t\tif (s.Option.Flags & ContextOption) != 0 {\n\t\t\tctx = s.Option.Context\n\t\t} else {\n\t\t\tctx = context.Background()\n\t\t}\n\t\tif err := v.UnmarshalJSON(ctx, dst); err != nil {\n\t\t\td.annotateError(s.cursor, err)\n\t\t\treturn err\n\t\t}\n\tcase json.Unmarshaler:\n\t\tif err := v.UnmarshalJSON(dst); err != nil {\n\t\t\td.annotateError(s.cursor, err)\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (d *unmarshalJSONDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tstart := cursor\n\tend, err := skipValue(buf, cursor, depth)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tsrc := buf[start:end]\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tv := *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: d.typ,\n\t\tptr: p,\n\t}))\n\tif (ctx.Option.Flags & ContextOption) != 0 {\n\t\tif err := v.(unmarshalerContext).UnmarshalJSON(ctx.Option.Context, dst); err != nil {\n\t\t\td.annotateError(cursor, err)\n\t\t\treturn 0, err\n\t\t}\n\t} else {\n\t\tif err := v.(json.Unmarshaler).UnmarshalJSON(dst); err != nil {\n\t\t\td.annotateError(cursor, err)\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn end, nil\n}\n\nfunc (d *unmarshalJSONDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: unmarshal json decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go",
    "content": "package decoder\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"fmt\"\n\t\"unicode\"\n\t\"unicode/utf16\"\n\t\"unicode/utf8\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype unmarshalTextDecoder struct {\n\ttyp        *runtime.Type\n\tstructName string\n\tfieldName  string\n}\n\nfunc newUnmarshalTextDecoder(typ *runtime.Type, structName, fieldName string) *unmarshalTextDecoder {\n\treturn &unmarshalTextDecoder{\n\t\ttyp:        typ,\n\t\tstructName: structName,\n\t\tfieldName:  fieldName,\n\t}\n}\n\nfunc (d *unmarshalTextDecoder) annotateError(cursor int64, err error) {\n\tswitch e := err.(type) {\n\tcase *errors.UnmarshalTypeError:\n\t\te.Struct = d.structName\n\t\te.Field = d.fieldName\n\tcase *errors.SyntaxError:\n\t\te.Offset = cursor\n\t}\n}\n\nvar (\n\tnullbytes = []byte(`null`)\n)\n\nfunc (d *unmarshalTextDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\ts.skipWhiteSpace()\n\tstart := s.cursor\n\tif err := s.skipValue(depth); err != nil {\n\t\treturn err\n\t}\n\tsrc := s.buf[start:s.cursor]\n\tif len(src) > 0 {\n\t\tswitch src[0] {\n\t\tcase '[':\n\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"array\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\tcase '{':\n\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"object\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"number\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: s.totalOffset(),\n\t\t\t}\n\t\tcase 'n':\n\t\t\tif bytes.Equal(src, nullbytes) {\n\t\t\t\t*(*unsafe.Pointer)(p) = nil\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\n\tif b, ok := unquoteBytes(dst); ok {\n\t\tdst = b\n\t}\n\tv := *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: d.typ,\n\t\tptr: p,\n\t}))\n\tif err := v.(encoding.TextUnmarshaler).UnmarshalText(dst); err != nil {\n\t\td.annotateError(s.cursor, err)\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (d *unmarshalTextDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbuf := ctx.Buf\n\tcursor = skipWhiteSpace(buf, cursor)\n\tstart := cursor\n\tend, err := skipValue(buf, cursor, depth)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tsrc := buf[start:end]\n\tif len(src) > 0 {\n\t\tswitch src[0] {\n\t\tcase '[':\n\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"array\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: start,\n\t\t\t}\n\t\tcase '{':\n\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"object\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: start,\n\t\t\t}\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn 0, &errors.UnmarshalTypeError{\n\t\t\t\tValue:  \"number\",\n\t\t\t\tType:   runtime.RType2Type(d.typ),\n\t\t\t\tOffset: start,\n\t\t\t}\n\t\tcase 'n':\n\t\t\tif bytes.Equal(src, nullbytes) {\n\t\t\t\t*(*unsafe.Pointer)(p) = nil\n\t\t\t\treturn end, nil\n\t\t\t}\n\t\t}\n\t}\n\n\tif s, ok := unquoteBytes(src); ok {\n\t\tsrc = s\n\t}\n\tv := *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: d.typ,\n\t\tptr: *(*unsafe.Pointer)(unsafe.Pointer(&p)),\n\t}))\n\tif err := v.(encoding.TextUnmarshaler).UnmarshalText(src); err != nil {\n\t\td.annotateError(cursor, err)\n\t\treturn 0, err\n\t}\n\treturn end, nil\n}\n\nfunc (d *unmarshalTextDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: unmarshal text decoder does not support decode path\")\n}\n\nfunc unquoteBytes(s []byte) (t []byte, ok bool) {\n\tlength := len(s)\n\tif length < 2 || s[0] != '\"' || s[length-1] != '\"' {\n\t\treturn\n\t}\n\ts = s[1 : length-1]\n\tlength -= 2\n\n\t// Check for unusual characters. If there are none,\n\t// then no unquoting is needed, so return a slice of the\n\t// original bytes.\n\tr := 0\n\tfor r < length {\n\t\tc := s[r]\n\t\tif c == '\\\\' || c == '\"' || c < ' ' {\n\t\t\tbreak\n\t\t}\n\t\tif c < utf8.RuneSelf {\n\t\t\tr++\n\t\t\tcontinue\n\t\t}\n\t\trr, size := utf8.DecodeRune(s[r:])\n\t\tif rr == utf8.RuneError && size == 1 {\n\t\t\tbreak\n\t\t}\n\t\tr += size\n\t}\n\tif r == length {\n\t\treturn s, true\n\t}\n\n\tb := make([]byte, length+2*utf8.UTFMax)\n\tw := copy(b, s[0:r])\n\tfor r < length {\n\t\t// Out of room? Can only happen if s is full of\n\t\t// malformed UTF-8 and we're replacing each\n\t\t// byte with RuneError.\n\t\tif w >= len(b)-2*utf8.UTFMax {\n\t\t\tnb := make([]byte, (len(b)+utf8.UTFMax)*2)\n\t\t\tcopy(nb, b[0:w])\n\t\t\tb = nb\n\t\t}\n\t\tswitch c := s[r]; {\n\t\tcase c == '\\\\':\n\t\t\tr++\n\t\t\tif r >= length {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tswitch s[r] {\n\t\t\tdefault:\n\t\t\t\treturn\n\t\t\tcase '\"', '\\\\', '/', '\\'':\n\t\t\t\tb[w] = s[r]\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'b':\n\t\t\t\tb[w] = '\\b'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'f':\n\t\t\t\tb[w] = '\\f'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'n':\n\t\t\t\tb[w] = '\\n'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'r':\n\t\t\t\tb[w] = '\\r'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 't':\n\t\t\t\tb[w] = '\\t'\n\t\t\t\tr++\n\t\t\t\tw++\n\t\t\tcase 'u':\n\t\t\t\tr--\n\t\t\t\trr := getu4(s[r:])\n\t\t\t\tif rr < 0 {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tr += 6\n\t\t\t\tif utf16.IsSurrogate(rr) {\n\t\t\t\t\trr1 := getu4(s[r:])\n\t\t\t\t\tif dec := utf16.DecodeRune(rr, rr1); dec != unicode.ReplacementChar {\n\t\t\t\t\t\t// A valid pair; consume.\n\t\t\t\t\t\tr += 6\n\t\t\t\t\t\tw += utf8.EncodeRune(b[w:], dec)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// Invalid surrogate; fall back to replacement rune.\n\t\t\t\t\trr = unicode.ReplacementChar\n\t\t\t\t}\n\t\t\t\tw += utf8.EncodeRune(b[w:], rr)\n\t\t\t}\n\n\t\t// Quote, control characters are invalid.\n\t\tcase c == '\"', c < ' ':\n\t\t\treturn\n\n\t\t// ASCII\n\t\tcase c < utf8.RuneSelf:\n\t\t\tb[w] = c\n\t\t\tr++\n\t\t\tw++\n\n\t\t// Coerce to well-formed UTF-8.\n\t\tdefault:\n\t\t\trr, size := utf8.DecodeRune(s[r:])\n\t\t\tr += size\n\t\t\tw += utf8.EncodeRune(b[w:], rr)\n\t\t}\n\t}\n\treturn b[0:w], true\n}\n\nfunc getu4(s []byte) rune {\n\tif len(s) < 6 || s[0] != '\\\\' || s[1] != 'u' {\n\t\treturn -1\n\t}\n\tvar r rune\n\tfor _, c := range s[2:6] {\n\t\tswitch {\n\t\tcase '0' <= c && c <= '9':\n\t\t\tc = c - '0'\n\t\tcase 'a' <= c && c <= 'f':\n\t\t\tc = c - 'a' + 10\n\t\tcase 'A' <= c && c <= 'F':\n\t\t\tc = c - 'A' + 10\n\t\tdefault:\n\t\t\treturn -1\n\t\t}\n\t\tr = r*16 + rune(c)\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/decoder/wrapped_string.go",
    "content": "package decoder\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype wrappedStringDecoder struct {\n\ttyp           *runtime.Type\n\tdec           Decoder\n\tstringDecoder *stringDecoder\n\tstructName    string\n\tfieldName     string\n\tisPtrType     bool\n}\n\nfunc newWrappedStringDecoder(typ *runtime.Type, dec Decoder, structName, fieldName string) *wrappedStringDecoder {\n\treturn &wrappedStringDecoder{\n\t\ttyp:           typ,\n\t\tdec:           dec,\n\t\tstringDecoder: newStringDecoder(structName, fieldName),\n\t\tstructName:    structName,\n\t\tfieldName:     fieldName,\n\t\tisPtrType:     typ.Kind() == reflect.Ptr,\n\t}\n}\n\nfunc (d *wrappedStringDecoder) DecodeStream(s *Stream, depth int64, p unsafe.Pointer) error {\n\tbytes, err := d.stringDecoder.decodeStreamByte(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif bytes == nil {\n\t\tif d.isPtrType {\n\t\t\t*(*unsafe.Pointer)(p) = nil\n\t\t}\n\t\treturn nil\n\t}\n\tb := make([]byte, len(bytes)+1)\n\tcopy(b, bytes)\n\tif _, err := d.dec.Decode(&RuntimeContext{Buf: b}, 0, depth, p); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (d *wrappedStringDecoder) Decode(ctx *RuntimeContext, cursor, depth int64, p unsafe.Pointer) (int64, error) {\n\tbytes, c, err := d.stringDecoder.decodeByte(ctx.Buf, cursor)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif bytes == nil {\n\t\tif d.isPtrType {\n\t\t\t*(*unsafe.Pointer)(p) = nil\n\t\t}\n\t\treturn c, nil\n\t}\n\tbytes = append(bytes, nul)\n\toldBuf := ctx.Buf\n\tctx.Buf = bytes\n\tif _, err := d.dec.Decode(ctx, 0, depth, p); err != nil {\n\t\treturn 0, err\n\t}\n\tctx.Buf = oldBuf\n\treturn c, nil\n}\n\nfunc (d *wrappedStringDecoder) DecodePath(ctx *RuntimeContext, cursor, depth int64) ([][]byte, int64, error) {\n\treturn nil, 0, fmt.Errorf(\"json: wrapped string decoder does not support decode path\")\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/code.go",
    "content": "package encoder\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype Code interface {\n\tKind() CodeKind\n\tToOpcode(*compileContext) Opcodes\n\tFilter(*FieldQuery) Code\n}\n\ntype AnonymousCode interface {\n\tToAnonymousOpcode(*compileContext) Opcodes\n}\n\ntype Opcodes []*Opcode\n\nfunc (o Opcodes) First() *Opcode {\n\tif len(o) == 0 {\n\t\treturn nil\n\t}\n\treturn o[0]\n}\n\nfunc (o Opcodes) Last() *Opcode {\n\tif len(o) == 0 {\n\t\treturn nil\n\t}\n\treturn o[len(o)-1]\n}\n\nfunc (o Opcodes) Add(codes ...*Opcode) Opcodes {\n\treturn append(o, codes...)\n}\n\ntype CodeKind int\n\nconst (\n\tCodeKindInterface CodeKind = iota\n\tCodeKindPtr\n\tCodeKindInt\n\tCodeKindUint\n\tCodeKindFloat\n\tCodeKindString\n\tCodeKindBool\n\tCodeKindStruct\n\tCodeKindMap\n\tCodeKindSlice\n\tCodeKindArray\n\tCodeKindBytes\n\tCodeKindMarshalJSON\n\tCodeKindMarshalText\n\tCodeKindRecursive\n)\n\ntype IntCode struct {\n\ttyp      *runtime.Type\n\tbitSize  uint8\n\tisString bool\n\tisPtr    bool\n}\n\nfunc (c *IntCode) Kind() CodeKind {\n\treturn CodeKindInt\n}\n\nfunc (c *IntCode) ToOpcode(ctx *compileContext) Opcodes {\n\tvar code *Opcode\n\tswitch {\n\tcase c.isPtr:\n\t\tcode = newOpCode(ctx, c.typ, OpIntPtr)\n\tcase c.isString:\n\t\tcode = newOpCode(ctx, c.typ, OpIntString)\n\tdefault:\n\t\tcode = newOpCode(ctx, c.typ, OpInt)\n\t}\n\tcode.NumBitSize = c.bitSize\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *IntCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype UintCode struct {\n\ttyp      *runtime.Type\n\tbitSize  uint8\n\tisString bool\n\tisPtr    bool\n}\n\nfunc (c *UintCode) Kind() CodeKind {\n\treturn CodeKindUint\n}\n\nfunc (c *UintCode) ToOpcode(ctx *compileContext) Opcodes {\n\tvar code *Opcode\n\tswitch {\n\tcase c.isPtr:\n\t\tcode = newOpCode(ctx, c.typ, OpUintPtr)\n\tcase c.isString:\n\t\tcode = newOpCode(ctx, c.typ, OpUintString)\n\tdefault:\n\t\tcode = newOpCode(ctx, c.typ, OpUint)\n\t}\n\tcode.NumBitSize = c.bitSize\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *UintCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype FloatCode struct {\n\ttyp     *runtime.Type\n\tbitSize uint8\n\tisPtr   bool\n}\n\nfunc (c *FloatCode) Kind() CodeKind {\n\treturn CodeKindFloat\n}\n\nfunc (c *FloatCode) ToOpcode(ctx *compileContext) Opcodes {\n\tvar code *Opcode\n\tswitch {\n\tcase c.isPtr:\n\t\tswitch c.bitSize {\n\t\tcase 32:\n\t\t\tcode = newOpCode(ctx, c.typ, OpFloat32Ptr)\n\t\tdefault:\n\t\t\tcode = newOpCode(ctx, c.typ, OpFloat64Ptr)\n\t\t}\n\tdefault:\n\t\tswitch c.bitSize {\n\t\tcase 32:\n\t\t\tcode = newOpCode(ctx, c.typ, OpFloat32)\n\t\tdefault:\n\t\t\tcode = newOpCode(ctx, c.typ, OpFloat64)\n\t\t}\n\t}\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *FloatCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype StringCode struct {\n\ttyp   *runtime.Type\n\tisPtr bool\n}\n\nfunc (c *StringCode) Kind() CodeKind {\n\treturn CodeKindString\n}\n\nfunc (c *StringCode) ToOpcode(ctx *compileContext) Opcodes {\n\tisJSONNumberType := c.typ == runtime.Type2RType(jsonNumberType)\n\tvar code *Opcode\n\tif c.isPtr {\n\t\tif isJSONNumberType {\n\t\t\tcode = newOpCode(ctx, c.typ, OpNumberPtr)\n\t\t} else {\n\t\t\tcode = newOpCode(ctx, c.typ, OpStringPtr)\n\t\t}\n\t} else {\n\t\tif isJSONNumberType {\n\t\t\tcode = newOpCode(ctx, c.typ, OpNumber)\n\t\t} else {\n\t\t\tcode = newOpCode(ctx, c.typ, OpString)\n\t\t}\n\t}\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *StringCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype BoolCode struct {\n\ttyp   *runtime.Type\n\tisPtr bool\n}\n\nfunc (c *BoolCode) Kind() CodeKind {\n\treturn CodeKindBool\n}\n\nfunc (c *BoolCode) ToOpcode(ctx *compileContext) Opcodes {\n\tvar code *Opcode\n\tswitch {\n\tcase c.isPtr:\n\t\tcode = newOpCode(ctx, c.typ, OpBoolPtr)\n\tdefault:\n\t\tcode = newOpCode(ctx, c.typ, OpBool)\n\t}\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *BoolCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype BytesCode struct {\n\ttyp   *runtime.Type\n\tisPtr bool\n}\n\nfunc (c *BytesCode) Kind() CodeKind {\n\treturn CodeKindBytes\n}\n\nfunc (c *BytesCode) ToOpcode(ctx *compileContext) Opcodes {\n\tvar code *Opcode\n\tswitch {\n\tcase c.isPtr:\n\t\tcode = newOpCode(ctx, c.typ, OpBytesPtr)\n\tdefault:\n\t\tcode = newOpCode(ctx, c.typ, OpBytes)\n\t}\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *BytesCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype SliceCode struct {\n\ttyp   *runtime.Type\n\tvalue Code\n}\n\nfunc (c *SliceCode) Kind() CodeKind {\n\treturn CodeKindSlice\n}\n\nfunc (c *SliceCode) ToOpcode(ctx *compileContext) Opcodes {\n\t// header => opcode => elem => end\n\t//             ^        |\n\t//             |________|\n\tsize := c.typ.Elem().Size()\n\theader := newSliceHeaderCode(ctx, c.typ)\n\tctx.incIndex()\n\n\tctx.incIndent()\n\tcodes := c.value.ToOpcode(ctx)\n\tctx.decIndent()\n\n\tcodes.First().Flags |= IndirectFlags\n\telemCode := newSliceElemCode(ctx, c.typ.Elem(), header, size)\n\tctx.incIndex()\n\tend := newOpCode(ctx, c.typ, OpSliceEnd)\n\tctx.incIndex()\n\theader.End = end\n\theader.Next = codes.First()\n\tcodes.Last().Next = elemCode\n\telemCode.Next = codes.First()\n\telemCode.End = end\n\treturn Opcodes{header}.Add(codes...).Add(elemCode).Add(end)\n}\n\nfunc (c *SliceCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype ArrayCode struct {\n\ttyp   *runtime.Type\n\tvalue Code\n}\n\nfunc (c *ArrayCode) Kind() CodeKind {\n\treturn CodeKindArray\n}\n\nfunc (c *ArrayCode) ToOpcode(ctx *compileContext) Opcodes {\n\t// header => opcode => elem => end\n\t//             ^        |\n\t//             |________|\n\telem := c.typ.Elem()\n\talen := c.typ.Len()\n\tsize := elem.Size()\n\n\theader := newArrayHeaderCode(ctx, c.typ, alen)\n\tctx.incIndex()\n\n\tctx.incIndent()\n\tcodes := c.value.ToOpcode(ctx)\n\tctx.decIndent()\n\n\tcodes.First().Flags |= IndirectFlags\n\n\telemCode := newArrayElemCode(ctx, elem, header, alen, size)\n\tctx.incIndex()\n\n\tend := newOpCode(ctx, c.typ, OpArrayEnd)\n\tctx.incIndex()\n\n\theader.End = end\n\theader.Next = codes.First()\n\tcodes.Last().Next = elemCode\n\telemCode.Next = codes.First()\n\telemCode.End = end\n\n\treturn Opcodes{header}.Add(codes...).Add(elemCode).Add(end)\n}\n\nfunc (c *ArrayCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype MapCode struct {\n\ttyp   *runtime.Type\n\tkey   Code\n\tvalue Code\n}\n\nfunc (c *MapCode) Kind() CodeKind {\n\treturn CodeKindMap\n}\n\nfunc (c *MapCode) ToOpcode(ctx *compileContext) Opcodes {\n\t// header => code => value => code => key => code => value => code => end\n\t//                                     ^                       |\n\t//                                     |_______________________|\n\theader := newMapHeaderCode(ctx, c.typ)\n\tctx.incIndex()\n\n\tkeyCodes := c.key.ToOpcode(ctx)\n\n\tvalue := newMapValueCode(ctx, c.typ.Elem(), header)\n\tctx.incIndex()\n\n\tctx.incIndent()\n\tvalueCodes := c.value.ToOpcode(ctx)\n\tctx.decIndent()\n\n\tvalueCodes.First().Flags |= IndirectFlags\n\n\tkey := newMapKeyCode(ctx, c.typ.Key(), header)\n\tctx.incIndex()\n\n\tend := newMapEndCode(ctx, c.typ, header)\n\tctx.incIndex()\n\n\theader.Next = keyCodes.First()\n\tkeyCodes.Last().Next = value\n\tvalue.Next = valueCodes.First()\n\tvalueCodes.Last().Next = key\n\tkey.Next = keyCodes.First()\n\n\theader.End = end\n\tkey.End = end\n\tvalue.End = end\n\treturn Opcodes{header}.Add(keyCodes...).Add(value).Add(valueCodes...).Add(key).Add(end)\n}\n\nfunc (c *MapCode) Filter(_ *FieldQuery) Code {\n\treturn c\n}\n\ntype StructCode struct {\n\ttyp                       *runtime.Type\n\tfields                    []*StructFieldCode\n\tisPtr                     bool\n\tdisableIndirectConversion bool\n\tisIndirect                bool\n\tisRecursive               bool\n}\n\nfunc (c *StructCode) Kind() CodeKind {\n\treturn CodeKindStruct\n}\n\nfunc (c *StructCode) lastFieldCode(field *StructFieldCode, firstField *Opcode) *Opcode {\n\tif isEmbeddedStruct(field) {\n\t\treturn c.lastAnonymousFieldCode(firstField)\n\t}\n\tlastField := firstField\n\tfor lastField.NextField != nil {\n\t\tlastField = lastField.NextField\n\t}\n\treturn lastField\n}\n\nfunc (c *StructCode) lastAnonymousFieldCode(firstField *Opcode) *Opcode {\n\t// firstField is special StructHead operation for anonymous structure.\n\t// So, StructHead's next operation is truly struct head operation.\n\tfor firstField.Op == OpStructHead || firstField.Op == OpStructField {\n\t\tfirstField = firstField.Next\n\t}\n\tlastField := firstField\n\tfor lastField.NextField != nil {\n\t\tlastField = lastField.NextField\n\t}\n\treturn lastField\n}\n\nfunc (c *StructCode) ToOpcode(ctx *compileContext) Opcodes {\n\t// header => code => structField => code => end\n\t//                        ^          |\n\t//                        |__________|\n\tif c.isRecursive {\n\t\trecursive := newRecursiveCode(ctx, c.typ, &CompiledCode{})\n\t\trecursive.Type = c.typ\n\t\tctx.incIndex()\n\t\t*ctx.recursiveCodes = append(*ctx.recursiveCodes, recursive)\n\t\treturn Opcodes{recursive}\n\t}\n\tcodes := Opcodes{}\n\tvar prevField *Opcode\n\tctx.incIndent()\n\tfor idx, field := range c.fields {\n\t\tisFirstField := idx == 0\n\t\tisEndField := idx == len(c.fields)-1\n\t\tfieldCodes := field.ToOpcode(ctx, isFirstField, isEndField)\n\t\tfor _, code := range fieldCodes {\n\t\t\tif c.isIndirect {\n\t\t\t\tcode.Flags |= IndirectFlags\n\t\t\t}\n\t\t}\n\t\tfirstField := fieldCodes.First()\n\t\tif len(codes) > 0 {\n\t\t\tcodes.Last().Next = firstField\n\t\t\tfirstField.Idx = codes.First().Idx\n\t\t}\n\t\tif prevField != nil {\n\t\t\tprevField.NextField = firstField\n\t\t}\n\t\tif isEndField {\n\t\t\tendField := fieldCodes.Last()\n\t\t\tif len(codes) > 0 {\n\t\t\t\tcodes.First().End = endField\n\t\t\t} else {\n\t\t\t\tfirstField.End = endField\n\t\t\t}\n\t\t\tcodes = codes.Add(fieldCodes...)\n\t\t\tbreak\n\t\t}\n\t\tprevField = c.lastFieldCode(field, firstField)\n\t\tcodes = codes.Add(fieldCodes...)\n\t}\n\tif len(codes) == 0 {\n\t\thead := &Opcode{\n\t\t\tOp:         OpStructHead,\n\t\t\tIdx:        opcodeOffset(ctx.ptrIndex),\n\t\t\tType:       c.typ,\n\t\t\tDisplayIdx: ctx.opcodeIndex,\n\t\t\tIndent:     ctx.indent,\n\t\t}\n\t\tctx.incOpcodeIndex()\n\t\tend := &Opcode{\n\t\t\tOp:         OpStructEnd,\n\t\t\tIdx:        opcodeOffset(ctx.ptrIndex),\n\t\t\tDisplayIdx: ctx.opcodeIndex,\n\t\t\tIndent:     ctx.indent,\n\t\t}\n\t\thead.NextField = end\n\t\thead.Next = end\n\t\thead.End = end\n\t\tcodes = codes.Add(head, end)\n\t\tctx.incIndex()\n\t}\n\tctx.decIndent()\n\tctx.structTypeToCodes[uintptr(unsafe.Pointer(c.typ))] = codes\n\treturn codes\n}\n\nfunc (c *StructCode) ToAnonymousOpcode(ctx *compileContext) Opcodes {\n\t// header => code => structField => code => end\n\t//                        ^          |\n\t//                        |__________|\n\tif c.isRecursive {\n\t\trecursive := newRecursiveCode(ctx, c.typ, &CompiledCode{})\n\t\trecursive.Type = c.typ\n\t\tctx.incIndex()\n\t\t*ctx.recursiveCodes = append(*ctx.recursiveCodes, recursive)\n\t\treturn Opcodes{recursive}\n\t}\n\tcodes := Opcodes{}\n\tvar prevField *Opcode\n\tfor idx, field := range c.fields {\n\t\tisFirstField := idx == 0\n\t\tisEndField := idx == len(c.fields)-1\n\t\tfieldCodes := field.ToAnonymousOpcode(ctx, isFirstField, isEndField)\n\t\tfor _, code := range fieldCodes {\n\t\t\tif c.isIndirect {\n\t\t\t\tcode.Flags |= IndirectFlags\n\t\t\t}\n\t\t}\n\t\tfirstField := fieldCodes.First()\n\t\tif len(codes) > 0 {\n\t\t\tcodes.Last().Next = firstField\n\t\t\tfirstField.Idx = codes.First().Idx\n\t\t}\n\t\tif prevField != nil {\n\t\t\tprevField.NextField = firstField\n\t\t}\n\t\tif isEndField {\n\t\t\tlastField := fieldCodes.Last()\n\t\t\tif len(codes) > 0 {\n\t\t\t\tcodes.First().End = lastField\n\t\t\t} else {\n\t\t\t\tfirstField.End = lastField\n\t\t\t}\n\t\t}\n\t\tprevField = firstField\n\t\tcodes = codes.Add(fieldCodes...)\n\t}\n\treturn codes\n}\n\nfunc (c *StructCode) removeFieldsByTags(tags runtime.StructTags) {\n\tfields := make([]*StructFieldCode, 0, len(c.fields))\n\tfor _, field := range c.fields {\n\t\tif field.isAnonymous {\n\t\t\tstructCode := field.getAnonymousStruct()\n\t\t\tif structCode != nil && !structCode.isRecursive {\n\t\t\t\tstructCode.removeFieldsByTags(tags)\n\t\t\t\tif len(structCode.fields) > 0 {\n\t\t\t\t\tfields = append(fields, field)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif tags.ExistsKey(field.key) {\n\t\t\tcontinue\n\t\t}\n\t\tfields = append(fields, field)\n\t}\n\tc.fields = fields\n}\n\nfunc (c *StructCode) enableIndirect() {\n\tif c.isIndirect {\n\t\treturn\n\t}\n\tc.isIndirect = true\n\tif len(c.fields) == 0 {\n\t\treturn\n\t}\n\tstructCode := c.fields[0].getStruct()\n\tif structCode == nil {\n\t\treturn\n\t}\n\tstructCode.enableIndirect()\n}\n\nfunc (c *StructCode) Filter(query *FieldQuery) Code {\n\tfieldMap := map[string]*FieldQuery{}\n\tfor _, field := range query.Fields {\n\t\tfieldMap[field.Name] = field\n\t}\n\tfields := make([]*StructFieldCode, 0, len(c.fields))\n\tfor _, field := range c.fields {\n\t\tquery, exists := fieldMap[field.key]\n\t\tif !exists {\n\t\t\tcontinue\n\t\t}\n\t\tfieldCode := &StructFieldCode{\n\t\t\ttyp:                field.typ,\n\t\t\tkey:                field.key,\n\t\t\ttag:                field.tag,\n\t\t\tvalue:              field.value,\n\t\t\toffset:             field.offset,\n\t\t\tisAnonymous:        field.isAnonymous,\n\t\t\tisTaggedKey:        field.isTaggedKey,\n\t\t\tisNilableType:      field.isNilableType,\n\t\t\tisNilCheck:         field.isNilCheck,\n\t\t\tisAddrForMarshaler: field.isAddrForMarshaler,\n\t\t\tisNextOpPtrType:    field.isNextOpPtrType,\n\t\t}\n\t\tif len(query.Fields) > 0 {\n\t\t\tfieldCode.value = fieldCode.value.Filter(query)\n\t\t}\n\t\tfields = append(fields, fieldCode)\n\t}\n\treturn &StructCode{\n\t\ttyp:                       c.typ,\n\t\tfields:                    fields,\n\t\tisPtr:                     c.isPtr,\n\t\tdisableIndirectConversion: c.disableIndirectConversion,\n\t\tisIndirect:                c.isIndirect,\n\t\tisRecursive:               c.isRecursive,\n\t}\n}\n\ntype StructFieldCode struct {\n\ttyp                *runtime.Type\n\tkey                string\n\ttag                *runtime.StructTag\n\tvalue              Code\n\toffset             uintptr\n\tisAnonymous        bool\n\tisTaggedKey        bool\n\tisNilableType      bool\n\tisNilCheck         bool\n\tisAddrForMarshaler bool\n\tisNextOpPtrType    bool\n\tisMarshalerContext bool\n}\n\nfunc (c *StructFieldCode) getStruct() *StructCode {\n\tvalue := c.value\n\tptr, ok := value.(*PtrCode)\n\tif ok {\n\t\tvalue = ptr.value\n\t}\n\tstructCode, ok := value.(*StructCode)\n\tif ok {\n\t\treturn structCode\n\t}\n\treturn nil\n}\n\nfunc (c *StructFieldCode) getAnonymousStruct() *StructCode {\n\tif !c.isAnonymous {\n\t\treturn nil\n\t}\n\treturn c.getStruct()\n}\n\nfunc optimizeStructHeader(code *Opcode, tag *runtime.StructTag) OpType {\n\theadType := code.ToHeaderType(tag.IsString)\n\tif tag.IsOmitEmpty {\n\t\theadType = headType.HeadToOmitEmptyHead()\n\t}\n\treturn headType\n}\n\nfunc optimizeStructField(code *Opcode, tag *runtime.StructTag) OpType {\n\tfieldType := code.ToFieldType(tag.IsString)\n\tif tag.IsOmitEmpty {\n\t\tfieldType = fieldType.FieldToOmitEmptyField()\n\t}\n\treturn fieldType\n}\n\nfunc (c *StructFieldCode) headerOpcodes(ctx *compileContext, field *Opcode, valueCodes Opcodes) Opcodes {\n\tvalue := valueCodes.First()\n\top := optimizeStructHeader(value, c.tag)\n\tfield.Op = op\n\tif value.Flags&MarshalerContextFlags != 0 {\n\t\tfield.Flags |= MarshalerContextFlags\n\t}\n\tfield.NumBitSize = value.NumBitSize\n\tfield.PtrNum = value.PtrNum\n\tfield.FieldQuery = value.FieldQuery\n\tfieldCodes := Opcodes{field}\n\tif op.IsMultipleOpHead() {\n\t\tfield.Next = value\n\t\tfieldCodes = fieldCodes.Add(valueCodes...)\n\t} else {\n\t\tctx.decIndex()\n\t}\n\treturn fieldCodes\n}\n\nfunc (c *StructFieldCode) fieldOpcodes(ctx *compileContext, field *Opcode, valueCodes Opcodes) Opcodes {\n\tvalue := valueCodes.First()\n\top := optimizeStructField(value, c.tag)\n\tfield.Op = op\n\tif value.Flags&MarshalerContextFlags != 0 {\n\t\tfield.Flags |= MarshalerContextFlags\n\t}\n\tfield.NumBitSize = value.NumBitSize\n\tfield.PtrNum = value.PtrNum\n\tfield.FieldQuery = value.FieldQuery\n\n\tfieldCodes := Opcodes{field}\n\tif op.IsMultipleOpField() {\n\t\tfield.Next = value\n\t\tfieldCodes = fieldCodes.Add(valueCodes...)\n\t} else {\n\t\tctx.decIndex()\n\t}\n\treturn fieldCodes\n}\n\nfunc (c *StructFieldCode) addStructEndCode(ctx *compileContext, codes Opcodes) Opcodes {\n\tend := &Opcode{\n\t\tOp:         OpStructEnd,\n\t\tIdx:        opcodeOffset(ctx.ptrIndex),\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t}\n\tcodes.Last().Next = end\n\tcode := codes.First()\n\tfor code.Op == OpStructField || code.Op == OpStructHead {\n\t\tcode = code.Next\n\t}\n\tfor code.NextField != nil {\n\t\tcode = code.NextField\n\t}\n\tcode.NextField = end\n\n\tcodes = codes.Add(end)\n\tctx.incOpcodeIndex()\n\treturn codes\n}\n\nfunc (c *StructFieldCode) structKey(ctx *compileContext) string {\n\tif ctx.escapeKey {\n\t\trctx := &RuntimeContext{Option: &Option{Flag: HTMLEscapeOption}}\n\t\treturn fmt.Sprintf(`%s:`, string(AppendString(rctx, []byte{}, c.key)))\n\t}\n\treturn fmt.Sprintf(`\"%s\":`, c.key)\n}\n\nfunc (c *StructFieldCode) flags() OpFlags {\n\tvar flags OpFlags\n\tif c.isTaggedKey {\n\t\tflags |= IsTaggedKeyFlags\n\t}\n\tif c.isNilableType {\n\t\tflags |= IsNilableTypeFlags\n\t}\n\tif c.isNilCheck {\n\t\tflags |= NilCheckFlags\n\t}\n\tif c.isAddrForMarshaler {\n\t\tflags |= AddrForMarshalerFlags\n\t}\n\tif c.isNextOpPtrType {\n\t\tflags |= IsNextOpPtrTypeFlags\n\t}\n\tif c.isAnonymous {\n\t\tflags |= AnonymousKeyFlags\n\t}\n\tif c.isMarshalerContext {\n\t\tflags |= MarshalerContextFlags\n\t}\n\treturn flags\n}\n\nfunc (c *StructFieldCode) toValueOpcodes(ctx *compileContext) Opcodes {\n\tif c.isAnonymous {\n\t\tanonymCode, ok := c.value.(AnonymousCode)\n\t\tif ok {\n\t\t\treturn anonymCode.ToAnonymousOpcode(ctx)\n\t\t}\n\t}\n\treturn c.value.ToOpcode(ctx)\n}\n\nfunc (c *StructFieldCode) ToOpcode(ctx *compileContext, isFirstField, isEndField bool) Opcodes {\n\tfield := &Opcode{\n\t\tIdx:        opcodeOffset(ctx.ptrIndex),\n\t\tFlags:      c.flags(),\n\t\tKey:        c.structKey(ctx),\n\t\tOffset:     uint32(c.offset),\n\t\tType:       c.typ,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t\tDisplayKey: c.key,\n\t}\n\tctx.incIndex()\n\tvalueCodes := c.toValueOpcodes(ctx)\n\tif isFirstField {\n\t\tcodes := c.headerOpcodes(ctx, field, valueCodes)\n\t\tif isEndField {\n\t\t\tcodes = c.addStructEndCode(ctx, codes)\n\t\t}\n\t\treturn codes\n\t}\n\tcodes := c.fieldOpcodes(ctx, field, valueCodes)\n\tif isEndField {\n\t\tif isEnableStructEndOptimization(c.value) {\n\t\t\tfield.Op = field.Op.FieldToEnd()\n\t\t} else {\n\t\t\tcodes = c.addStructEndCode(ctx, codes)\n\t\t}\n\t}\n\treturn codes\n}\n\nfunc (c *StructFieldCode) ToAnonymousOpcode(ctx *compileContext, isFirstField, isEndField bool) Opcodes {\n\tfield := &Opcode{\n\t\tIdx:        opcodeOffset(ctx.ptrIndex),\n\t\tFlags:      c.flags() | AnonymousHeadFlags,\n\t\tKey:        c.structKey(ctx),\n\t\tOffset:     uint32(c.offset),\n\t\tType:       c.typ,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t\tDisplayKey: c.key,\n\t}\n\tctx.incIndex()\n\tvalueCodes := c.toValueOpcodes(ctx)\n\tif isFirstField {\n\t\treturn c.headerOpcodes(ctx, field, valueCodes)\n\t}\n\treturn c.fieldOpcodes(ctx, field, valueCodes)\n}\n\nfunc isEnableStructEndOptimization(value Code) bool {\n\tswitch value.Kind() {\n\tcase CodeKindInt,\n\t\tCodeKindUint,\n\t\tCodeKindFloat,\n\t\tCodeKindString,\n\t\tCodeKindBool,\n\t\tCodeKindBytes:\n\t\treturn true\n\tcase CodeKindPtr:\n\t\treturn isEnableStructEndOptimization(value.(*PtrCode).value)\n\tdefault:\n\t\treturn false\n\t}\n}\n\ntype InterfaceCode struct {\n\ttyp        *runtime.Type\n\tfieldQuery *FieldQuery\n\tisPtr      bool\n}\n\nfunc (c *InterfaceCode) Kind() CodeKind {\n\treturn CodeKindInterface\n}\n\nfunc (c *InterfaceCode) ToOpcode(ctx *compileContext) Opcodes {\n\tvar code *Opcode\n\tswitch {\n\tcase c.isPtr:\n\t\tcode = newOpCode(ctx, c.typ, OpInterfacePtr)\n\tdefault:\n\t\tcode = newOpCode(ctx, c.typ, OpInterface)\n\t}\n\tcode.FieldQuery = c.fieldQuery\n\tif c.typ.NumMethod() > 0 {\n\t\tcode.Flags |= NonEmptyInterfaceFlags\n\t}\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *InterfaceCode) Filter(query *FieldQuery) Code {\n\treturn &InterfaceCode{\n\t\ttyp:        c.typ,\n\t\tfieldQuery: query,\n\t\tisPtr:      c.isPtr,\n\t}\n}\n\ntype MarshalJSONCode struct {\n\ttyp                *runtime.Type\n\tfieldQuery         *FieldQuery\n\tisAddrForMarshaler bool\n\tisNilableType      bool\n\tisMarshalerContext bool\n}\n\nfunc (c *MarshalJSONCode) Kind() CodeKind {\n\treturn CodeKindMarshalJSON\n}\n\nfunc (c *MarshalJSONCode) ToOpcode(ctx *compileContext) Opcodes {\n\tcode := newOpCode(ctx, c.typ, OpMarshalJSON)\n\tcode.FieldQuery = c.fieldQuery\n\tif c.isAddrForMarshaler {\n\t\tcode.Flags |= AddrForMarshalerFlags\n\t}\n\tif c.isMarshalerContext {\n\t\tcode.Flags |= MarshalerContextFlags\n\t}\n\tif c.isNilableType {\n\t\tcode.Flags |= IsNilableTypeFlags\n\t} else {\n\t\tcode.Flags &= ^IsNilableTypeFlags\n\t}\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *MarshalJSONCode) Filter(query *FieldQuery) Code {\n\treturn &MarshalJSONCode{\n\t\ttyp:                c.typ,\n\t\tfieldQuery:         query,\n\t\tisAddrForMarshaler: c.isAddrForMarshaler,\n\t\tisNilableType:      c.isNilableType,\n\t\tisMarshalerContext: c.isMarshalerContext,\n\t}\n}\n\ntype MarshalTextCode struct {\n\ttyp                *runtime.Type\n\tfieldQuery         *FieldQuery\n\tisAddrForMarshaler bool\n\tisNilableType      bool\n}\n\nfunc (c *MarshalTextCode) Kind() CodeKind {\n\treturn CodeKindMarshalText\n}\n\nfunc (c *MarshalTextCode) ToOpcode(ctx *compileContext) Opcodes {\n\tcode := newOpCode(ctx, c.typ, OpMarshalText)\n\tcode.FieldQuery = c.fieldQuery\n\tif c.isAddrForMarshaler {\n\t\tcode.Flags |= AddrForMarshalerFlags\n\t}\n\tif c.isNilableType {\n\t\tcode.Flags |= IsNilableTypeFlags\n\t} else {\n\t\tcode.Flags &= ^IsNilableTypeFlags\n\t}\n\tctx.incIndex()\n\treturn Opcodes{code}\n}\n\nfunc (c *MarshalTextCode) Filter(query *FieldQuery) Code {\n\treturn &MarshalTextCode{\n\t\ttyp:                c.typ,\n\t\tfieldQuery:         query,\n\t\tisAddrForMarshaler: c.isAddrForMarshaler,\n\t\tisNilableType:      c.isNilableType,\n\t}\n}\n\ntype PtrCode struct {\n\ttyp    *runtime.Type\n\tvalue  Code\n\tptrNum uint8\n}\n\nfunc (c *PtrCode) Kind() CodeKind {\n\treturn CodeKindPtr\n}\n\nfunc (c *PtrCode) ToOpcode(ctx *compileContext) Opcodes {\n\tcodes := c.value.ToOpcode(ctx)\n\tcodes.First().Op = convertPtrOp(codes.First())\n\tcodes.First().PtrNum = c.ptrNum\n\treturn codes\n}\n\nfunc (c *PtrCode) ToAnonymousOpcode(ctx *compileContext) Opcodes {\n\tvar codes Opcodes\n\tanonymCode, ok := c.value.(AnonymousCode)\n\tif ok {\n\t\tcodes = anonymCode.ToAnonymousOpcode(ctx)\n\t} else {\n\t\tcodes = c.value.ToOpcode(ctx)\n\t}\n\tcodes.First().Op = convertPtrOp(codes.First())\n\tcodes.First().PtrNum = c.ptrNum\n\treturn codes\n}\n\nfunc (c *PtrCode) Filter(query *FieldQuery) Code {\n\treturn &PtrCode{\n\t\ttyp:    c.typ,\n\t\tvalue:  c.value.Filter(query),\n\t\tptrNum: c.ptrNum,\n\t}\n}\n\nfunc convertPtrOp(code *Opcode) OpType {\n\tptrHeadOp := code.Op.HeadToPtrHead()\n\tif code.Op != ptrHeadOp {\n\t\tif code.PtrNum > 0 {\n\t\t\t// ptr field and ptr head\n\t\t\tcode.PtrNum--\n\t\t}\n\t\treturn ptrHeadOp\n\t}\n\tswitch code.Op {\n\tcase OpInt:\n\t\treturn OpIntPtr\n\tcase OpUint:\n\t\treturn OpUintPtr\n\tcase OpFloat32:\n\t\treturn OpFloat32Ptr\n\tcase OpFloat64:\n\t\treturn OpFloat64Ptr\n\tcase OpString:\n\t\treturn OpStringPtr\n\tcase OpBool:\n\t\treturn OpBoolPtr\n\tcase OpBytes:\n\t\treturn OpBytesPtr\n\tcase OpNumber:\n\t\treturn OpNumberPtr\n\tcase OpArray:\n\t\treturn OpArrayPtr\n\tcase OpSlice:\n\t\treturn OpSlicePtr\n\tcase OpMap:\n\t\treturn OpMapPtr\n\tcase OpMarshalJSON:\n\t\treturn OpMarshalJSONPtr\n\tcase OpMarshalText:\n\t\treturn OpMarshalTextPtr\n\tcase OpInterface:\n\t\treturn OpInterfacePtr\n\tcase OpRecursive:\n\t\treturn OpRecursivePtr\n\t}\n\treturn code.Op\n}\n\nfunc isEmbeddedStruct(field *StructFieldCode) bool {\n\tif !field.isAnonymous {\n\t\treturn false\n\t}\n\tt := field.typ\n\tif t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\treturn t.Kind() == reflect.Struct\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/compact.go",
    "content": "package encoder\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\nvar (\n\tisWhiteSpace = [256]bool{\n\t\t' ':  true,\n\t\t'\\n': true,\n\t\t'\\t': true,\n\t\t'\\r': true,\n\t}\n\tisHTMLEscapeChar = [256]bool{\n\t\t'<': true,\n\t\t'>': true,\n\t\t'&': true,\n\t}\n\tnul = byte('\\000')\n)\n\nfunc Compact(buf *bytes.Buffer, src []byte, escape bool) error {\n\tif len(src) == 0 {\n\t\treturn errors.ErrUnexpectedEndOfJSON(\"\", 0)\n\t}\n\tbuf.Grow(len(src))\n\tdst := buf.Bytes()\n\n\tctx := TakeRuntimeContext()\n\tctxBuf := ctx.Buf[:0]\n\tctxBuf = append(append(ctxBuf, src...), nul)\n\tctx.Buf = ctxBuf\n\n\tif err := compactAndWrite(buf, dst, ctxBuf, escape); err != nil {\n\t\tReleaseRuntimeContext(ctx)\n\t\treturn err\n\t}\n\tReleaseRuntimeContext(ctx)\n\treturn nil\n}\n\nfunc compactAndWrite(buf *bytes.Buffer, dst []byte, src []byte, escape bool) error {\n\tdst, err := compact(dst, src, escape)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err := buf.Write(dst); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc compact(dst, src []byte, escape bool) ([]byte, error) {\n\tbuf, cursor, err := compactValue(dst, src, 0, escape)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := validateEndBuf(src, cursor); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf, nil\n}\n\nfunc validateEndBuf(src []byte, cursor int64) error {\n\tfor {\n\t\tswitch src[cursor] {\n\t\tcase ' ', '\\t', '\\n', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase nul:\n\t\t\treturn nil\n\t\t}\n\t\treturn errors.ErrSyntax(\n\t\t\tfmt.Sprintf(\"invalid character '%c' after top-level value\", src[cursor]),\n\t\t\tcursor+1,\n\t\t)\n\t}\n}\n\nfunc skipWhiteSpace(buf []byte, cursor int64) int64 {\nLOOP:\n\tif isWhiteSpace[buf[cursor]] {\n\t\tcursor++\n\t\tgoto LOOP\n\t}\n\treturn cursor\n}\n\nfunc compactValue(dst, src []byte, cursor int64, escape bool) ([]byte, int64, error) {\n\tfor {\n\t\tswitch src[cursor] {\n\t\tcase ' ', '\\t', '\\n', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase '{':\n\t\t\treturn compactObject(dst, src, cursor, escape)\n\t\tcase '}':\n\t\t\treturn nil, 0, errors.ErrSyntax(\"unexpected character '}'\", cursor)\n\t\tcase '[':\n\t\t\treturn compactArray(dst, src, cursor, escape)\n\t\tcase ']':\n\t\t\treturn nil, 0, errors.ErrSyntax(\"unexpected character ']'\", cursor)\n\t\tcase '\"':\n\t\t\treturn compactString(dst, src, cursor, escape)\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn compactNumber(dst, src, cursor)\n\t\tcase 't':\n\t\t\treturn compactTrue(dst, src, cursor)\n\t\tcase 'f':\n\t\t\treturn compactFalse(dst, src, cursor)\n\t\tcase 'n':\n\t\t\treturn compactNull(dst, src, cursor)\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrSyntax(fmt.Sprintf(\"unexpected character '%c'\", src[cursor]), cursor)\n\t\t}\n\t}\n}\n\nfunc compactObject(dst, src []byte, cursor int64, escape bool) ([]byte, int64, error) {\n\tif src[cursor] == '{' {\n\t\tdst = append(dst, '{')\n\t} else {\n\t\treturn nil, 0, errors.ErrExpected(\"expected { character for object value\", cursor)\n\t}\n\tcursor = skipWhiteSpace(src, cursor+1)\n\tif src[cursor] == '}' {\n\t\tdst = append(dst, '}')\n\t\treturn dst, cursor + 1, nil\n\t}\n\tvar err error\n\tfor {\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tdst, cursor, err = compactString(dst, src, cursor, escape)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tif src[cursor] != ':' {\n\t\t\treturn nil, 0, errors.ErrExpected(\"colon after object key\", cursor)\n\t\t}\n\t\tdst = append(dst, ':')\n\t\tdst, cursor, err = compactValue(dst, src, cursor+1, escape)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tswitch src[cursor] {\n\t\tcase '}':\n\t\t\tdst = append(dst, '}')\n\t\t\tcursor++\n\t\t\treturn dst, cursor, nil\n\t\tcase ',':\n\t\t\tdst = append(dst, ',')\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrExpected(\"comma after object value\", cursor)\n\t\t}\n\t\tcursor++\n\t}\n}\n\nfunc compactArray(dst, src []byte, cursor int64, escape bool) ([]byte, int64, error) {\n\tif src[cursor] == '[' {\n\t\tdst = append(dst, '[')\n\t} else {\n\t\treturn nil, 0, errors.ErrExpected(\"expected [ character for array value\", cursor)\n\t}\n\tcursor = skipWhiteSpace(src, cursor+1)\n\tif src[cursor] == ']' {\n\t\tdst = append(dst, ']')\n\t\treturn dst, cursor + 1, nil\n\t}\n\tvar err error\n\tfor {\n\t\tdst, cursor, err = compactValue(dst, src, cursor, escape)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tswitch src[cursor] {\n\t\tcase ']':\n\t\t\tdst = append(dst, ']')\n\t\t\tcursor++\n\t\t\treturn dst, cursor, nil\n\t\tcase ',':\n\t\t\tdst = append(dst, ',')\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrExpected(\"comma after array value\", cursor)\n\t\t}\n\t\tcursor++\n\t}\n}\n\nfunc compactString(dst, src []byte, cursor int64, escape bool) ([]byte, int64, error) {\n\tif src[cursor] != '\"' {\n\t\treturn nil, 0, errors.ErrInvalidCharacter(src[cursor], \"string\", cursor)\n\t}\n\tstart := cursor\n\tfor {\n\t\tcursor++\n\t\tc := src[cursor]\n\t\tif escape {\n\t\t\tif isHTMLEscapeChar[c] {\n\t\t\t\tdst = append(dst, src[start:cursor]...)\n\t\t\t\tdst = append(dst, `\\u00`...)\n\t\t\t\tdst = append(dst, hex[c>>4], hex[c&0xF])\n\t\t\t\tstart = cursor + 1\n\t\t\t} else if c == 0xE2 && cursor+2 < int64(len(src)) && src[cursor+1] == 0x80 && src[cursor+2]&^1 == 0xA8 {\n\t\t\t\tdst = append(dst, src[start:cursor]...)\n\t\t\t\tdst = append(dst, `\\u202`...)\n\t\t\t\tdst = append(dst, hex[src[cursor+2]&0xF])\n\t\t\t\tcursor += 2\n\t\t\t\tstart = cursor + 3\n\t\t\t}\n\t\t}\n\t\tswitch c {\n\t\tcase '\\\\':\n\t\t\tcursor++\n\t\t\tif src[cursor] == nul {\n\t\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"string\", int64(len(src)))\n\t\t\t}\n\t\tcase '\"':\n\t\t\tcursor++\n\t\t\treturn append(dst, src[start:cursor]...), cursor, nil\n\t\tcase nul:\n\t\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"string\", int64(len(src)))\n\t\t}\n\t}\n}\n\nfunc compactNumber(dst, src []byte, cursor int64) ([]byte, int64, error) {\n\tstart := cursor\n\tfor {\n\t\tcursor++\n\t\tif floatTable[src[cursor]] {\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\tnum := src[start:cursor]\n\tif _, err := strconv.ParseFloat(*(*string)(unsafe.Pointer(&num)), 64); err != nil {\n\t\treturn nil, 0, err\n\t}\n\tdst = append(dst, num...)\n\treturn dst, cursor, nil\n}\n\nfunc compactTrue(dst, src []byte, cursor int64) ([]byte, int64, error) {\n\tif cursor+3 >= int64(len(src)) {\n\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"true\", cursor)\n\t}\n\tif !bytes.Equal(src[cursor:cursor+4], []byte(`true`)) {\n\t\treturn nil, 0, errors.ErrInvalidCharacter(src[cursor], \"true\", cursor)\n\t}\n\tdst = append(dst, \"true\"...)\n\tcursor += 4\n\treturn dst, cursor, nil\n}\n\nfunc compactFalse(dst, src []byte, cursor int64) ([]byte, int64, error) {\n\tif cursor+4 >= int64(len(src)) {\n\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"false\", cursor)\n\t}\n\tif !bytes.Equal(src[cursor:cursor+5], []byte(`false`)) {\n\t\treturn nil, 0, errors.ErrInvalidCharacter(src[cursor], \"false\", cursor)\n\t}\n\tdst = append(dst, \"false\"...)\n\tcursor += 5\n\treturn dst, cursor, nil\n}\n\nfunc compactNull(dst, src []byte, cursor int64) ([]byte, int64, error) {\n\tif cursor+3 >= int64(len(src)) {\n\t\treturn nil, 0, errors.ErrUnexpectedEndOfJSON(\"null\", cursor)\n\t}\n\tif !bytes.Equal(src[cursor:cursor+4], []byte(`null`)) {\n\t\treturn nil, 0, errors.ErrInvalidCharacter(src[cursor], \"null\", cursor)\n\t}\n\tdst = append(dst, \"null\"...)\n\tcursor += 4\n\treturn dst, cursor, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/compiler.go",
    "content": "package encoder\n\nimport (\n\t\"context\"\n\t\"encoding\"\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype marshalerContext interface {\n\tMarshalJSON(context.Context) ([]byte, error)\n}\n\nvar (\n\tmarshalJSONType        = reflect.TypeOf((*json.Marshaler)(nil)).Elem()\n\tmarshalJSONContextType = reflect.TypeOf((*marshalerContext)(nil)).Elem()\n\tmarshalTextType        = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()\n\tjsonNumberType         = reflect.TypeOf(json.Number(\"\"))\n\tcachedOpcodeSets       []*OpcodeSet\n\tcachedOpcodeMap        unsafe.Pointer // map[uintptr]*OpcodeSet\n\ttypeAddr               *runtime.TypeAddr\n)\n\nfunc init() {\n\ttypeAddr = runtime.AnalyzeTypeAddr()\n\tif typeAddr == nil {\n\t\ttypeAddr = &runtime.TypeAddr{}\n\t}\n\tcachedOpcodeSets = make([]*OpcodeSet, typeAddr.AddrRange>>typeAddr.AddrShift+1)\n}\n\nfunc loadOpcodeMap() map[uintptr]*OpcodeSet {\n\tp := atomic.LoadPointer(&cachedOpcodeMap)\n\treturn *(*map[uintptr]*OpcodeSet)(unsafe.Pointer(&p))\n}\n\nfunc storeOpcodeSet(typ uintptr, set *OpcodeSet, m map[uintptr]*OpcodeSet) {\n\tnewOpcodeMap := make(map[uintptr]*OpcodeSet, len(m)+1)\n\tnewOpcodeMap[typ] = set\n\n\tfor k, v := range m {\n\t\tnewOpcodeMap[k] = v\n\t}\n\n\tatomic.StorePointer(&cachedOpcodeMap, *(*unsafe.Pointer)(unsafe.Pointer(&newOpcodeMap)))\n}\n\nfunc compileToGetCodeSetSlowPath(typeptr uintptr) (*OpcodeSet, error) {\n\topcodeMap := loadOpcodeMap()\n\tif codeSet, exists := opcodeMap[typeptr]; exists {\n\t\treturn codeSet, nil\n\t}\n\tcodeSet, err := newCompiler().compile(typeptr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstoreOpcodeSet(typeptr, codeSet, opcodeMap)\n\treturn codeSet, nil\n}\n\nfunc getFilteredCodeSetIfNeeded(ctx *RuntimeContext, codeSet *OpcodeSet) (*OpcodeSet, error) {\n\tif (ctx.Option.Flag & ContextOption) == 0 {\n\t\treturn codeSet, nil\n\t}\n\tquery := FieldQueryFromContext(ctx.Option.Context)\n\tif query == nil {\n\t\treturn codeSet, nil\n\t}\n\tctx.Option.Flag |= FieldQueryOption\n\tcacheCodeSet := codeSet.getQueryCache(query.Hash())\n\tif cacheCodeSet != nil {\n\t\treturn cacheCodeSet, nil\n\t}\n\tqueryCodeSet, err := newCompiler().codeToOpcodeSet(codeSet.Type, codeSet.Code.Filter(query))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcodeSet.setQueryCache(query.Hash(), queryCodeSet)\n\treturn queryCodeSet, nil\n}\n\ntype Compiler struct {\n\tstructTypeToCode map[uintptr]*StructCode\n}\n\nfunc newCompiler() *Compiler {\n\treturn &Compiler{\n\t\tstructTypeToCode: map[uintptr]*StructCode{},\n\t}\n}\n\nfunc (c *Compiler) compile(typeptr uintptr) (*OpcodeSet, error) {\n\t// noescape trick for header.typ ( reflect.*rtype )\n\ttyp := *(**runtime.Type)(unsafe.Pointer(&typeptr))\n\tcode, err := c.typeToCode(typ)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn c.codeToOpcodeSet(typ, code)\n}\n\nfunc (c *Compiler) codeToOpcodeSet(typ *runtime.Type, code Code) (*OpcodeSet, error) {\n\tnoescapeKeyCode := c.codeToOpcode(&compileContext{\n\t\tstructTypeToCodes: map[uintptr]Opcodes{},\n\t\trecursiveCodes:    &Opcodes{},\n\t}, typ, code)\n\tif err := noescapeKeyCode.Validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tescapeKeyCode := c.codeToOpcode(&compileContext{\n\t\tstructTypeToCodes: map[uintptr]Opcodes{},\n\t\trecursiveCodes:    &Opcodes{},\n\t\tescapeKey:         true,\n\t}, typ, code)\n\tnoescapeKeyCode = copyOpcode(noescapeKeyCode)\n\tescapeKeyCode = copyOpcode(escapeKeyCode)\n\tsetTotalLengthToInterfaceOp(noescapeKeyCode)\n\tsetTotalLengthToInterfaceOp(escapeKeyCode)\n\tinterfaceNoescapeKeyCode := copyToInterfaceOpcode(noescapeKeyCode)\n\tinterfaceEscapeKeyCode := copyToInterfaceOpcode(escapeKeyCode)\n\tcodeLength := noescapeKeyCode.TotalLength()\n\treturn &OpcodeSet{\n\t\tType:                     typ,\n\t\tNoescapeKeyCode:          noescapeKeyCode,\n\t\tEscapeKeyCode:            escapeKeyCode,\n\t\tInterfaceNoescapeKeyCode: interfaceNoescapeKeyCode,\n\t\tInterfaceEscapeKeyCode:   interfaceEscapeKeyCode,\n\t\tCodeLength:               codeLength,\n\t\tEndCode:                  ToEndCode(interfaceNoescapeKeyCode),\n\t\tCode:                     code,\n\t\tQueryCache:               map[string]*OpcodeSet{},\n\t}, nil\n}\n\nfunc (c *Compiler) typeToCode(typ *runtime.Type) (Code, error) {\n\tswitch {\n\tcase c.implementsMarshalJSON(typ):\n\t\treturn c.marshalJSONCode(typ)\n\tcase c.implementsMarshalText(typ):\n\t\treturn c.marshalTextCode(typ)\n\t}\n\n\tisPtr := false\n\torgType := typ\n\tif typ.Kind() == reflect.Ptr {\n\t\ttyp = typ.Elem()\n\t\tisPtr = true\n\t}\n\tswitch {\n\tcase c.implementsMarshalJSON(typ):\n\t\treturn c.marshalJSONCode(orgType)\n\tcase c.implementsMarshalText(typ):\n\t\treturn c.marshalTextCode(orgType)\n\t}\n\tswitch typ.Kind() {\n\tcase reflect.Slice:\n\t\telem := typ.Elem()\n\t\tif elem.Kind() == reflect.Uint8 {\n\t\t\tp := runtime.PtrTo(elem)\n\t\t\tif !c.implementsMarshalJSONType(p) && !p.Implements(marshalTextType) {\n\t\t\t\treturn c.bytesCode(typ, isPtr)\n\t\t\t}\n\t\t}\n\t\treturn c.sliceCode(typ)\n\tcase reflect.Map:\n\t\tif isPtr {\n\t\t\treturn c.ptrCode(runtime.PtrTo(typ))\n\t\t}\n\t\treturn c.mapCode(typ)\n\tcase reflect.Struct:\n\t\treturn c.structCode(typ, isPtr)\n\tcase reflect.Int:\n\t\treturn c.intCode(typ, isPtr)\n\tcase reflect.Int8:\n\t\treturn c.int8Code(typ, isPtr)\n\tcase reflect.Int16:\n\t\treturn c.int16Code(typ, isPtr)\n\tcase reflect.Int32:\n\t\treturn c.int32Code(typ, isPtr)\n\tcase reflect.Int64:\n\t\treturn c.int64Code(typ, isPtr)\n\tcase reflect.Uint, reflect.Uintptr:\n\t\treturn c.uintCode(typ, isPtr)\n\tcase reflect.Uint8:\n\t\treturn c.uint8Code(typ, isPtr)\n\tcase reflect.Uint16:\n\t\treturn c.uint16Code(typ, isPtr)\n\tcase reflect.Uint32:\n\t\treturn c.uint32Code(typ, isPtr)\n\tcase reflect.Uint64:\n\t\treturn c.uint64Code(typ, isPtr)\n\tcase reflect.Float32:\n\t\treturn c.float32Code(typ, isPtr)\n\tcase reflect.Float64:\n\t\treturn c.float64Code(typ, isPtr)\n\tcase reflect.String:\n\t\treturn c.stringCode(typ, isPtr)\n\tcase reflect.Bool:\n\t\treturn c.boolCode(typ, isPtr)\n\tcase reflect.Interface:\n\t\treturn c.interfaceCode(typ, isPtr)\n\tdefault:\n\t\tif isPtr && typ.Implements(marshalTextType) {\n\t\t\ttyp = orgType\n\t\t}\n\t\treturn c.typeToCodeWithPtr(typ, isPtr)\n\t}\n}\n\nfunc (c *Compiler) typeToCodeWithPtr(typ *runtime.Type, isPtr bool) (Code, error) {\n\tswitch {\n\tcase c.implementsMarshalJSON(typ):\n\t\treturn c.marshalJSONCode(typ)\n\tcase c.implementsMarshalText(typ):\n\t\treturn c.marshalTextCode(typ)\n\t}\n\tswitch typ.Kind() {\n\tcase reflect.Ptr:\n\t\treturn c.ptrCode(typ)\n\tcase reflect.Slice:\n\t\telem := typ.Elem()\n\t\tif elem.Kind() == reflect.Uint8 {\n\t\t\tp := runtime.PtrTo(elem)\n\t\t\tif !c.implementsMarshalJSONType(p) && !p.Implements(marshalTextType) {\n\t\t\t\treturn c.bytesCode(typ, false)\n\t\t\t}\n\t\t}\n\t\treturn c.sliceCode(typ)\n\tcase reflect.Array:\n\t\treturn c.arrayCode(typ)\n\tcase reflect.Map:\n\t\treturn c.mapCode(typ)\n\tcase reflect.Struct:\n\t\treturn c.structCode(typ, isPtr)\n\tcase reflect.Interface:\n\t\treturn c.interfaceCode(typ, false)\n\tcase reflect.Int:\n\t\treturn c.intCode(typ, false)\n\tcase reflect.Int8:\n\t\treturn c.int8Code(typ, false)\n\tcase reflect.Int16:\n\t\treturn c.int16Code(typ, false)\n\tcase reflect.Int32:\n\t\treturn c.int32Code(typ, false)\n\tcase reflect.Int64:\n\t\treturn c.int64Code(typ, false)\n\tcase reflect.Uint:\n\t\treturn c.uintCode(typ, false)\n\tcase reflect.Uint8:\n\t\treturn c.uint8Code(typ, false)\n\tcase reflect.Uint16:\n\t\treturn c.uint16Code(typ, false)\n\tcase reflect.Uint32:\n\t\treturn c.uint32Code(typ, false)\n\tcase reflect.Uint64:\n\t\treturn c.uint64Code(typ, false)\n\tcase reflect.Uintptr:\n\t\treturn c.uintCode(typ, false)\n\tcase reflect.Float32:\n\t\treturn c.float32Code(typ, false)\n\tcase reflect.Float64:\n\t\treturn c.float64Code(typ, false)\n\tcase reflect.String:\n\t\treturn c.stringCode(typ, false)\n\tcase reflect.Bool:\n\t\treturn c.boolCode(typ, false)\n\t}\n\treturn nil, &errors.UnsupportedTypeError{Type: runtime.RType2Type(typ)}\n}\n\nconst intSize = 32 << (^uint(0) >> 63)\n\n//nolint:unparam\nfunc (c *Compiler) intCode(typ *runtime.Type, isPtr bool) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: intSize, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int8Code(typ *runtime.Type, isPtr bool) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 8, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int16Code(typ *runtime.Type, isPtr bool) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 16, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int32Code(typ *runtime.Type, isPtr bool) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 32, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int64Code(typ *runtime.Type, isPtr bool) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 64, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uintCode(typ *runtime.Type, isPtr bool) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: intSize, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint8Code(typ *runtime.Type, isPtr bool) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 8, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint16Code(typ *runtime.Type, isPtr bool) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 16, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint32Code(typ *runtime.Type, isPtr bool) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 32, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint64Code(typ *runtime.Type, isPtr bool) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 64, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) float32Code(typ *runtime.Type, isPtr bool) (*FloatCode, error) {\n\treturn &FloatCode{typ: typ, bitSize: 32, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) float64Code(typ *runtime.Type, isPtr bool) (*FloatCode, error) {\n\treturn &FloatCode{typ: typ, bitSize: 64, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) stringCode(typ *runtime.Type, isPtr bool) (*StringCode, error) {\n\treturn &StringCode{typ: typ, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) boolCode(typ *runtime.Type, isPtr bool) (*BoolCode, error) {\n\treturn &BoolCode{typ: typ, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) intStringCode(typ *runtime.Type) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: intSize, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int8StringCode(typ *runtime.Type) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 8, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int16StringCode(typ *runtime.Type) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 16, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int32StringCode(typ *runtime.Type) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 32, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) int64StringCode(typ *runtime.Type) (*IntCode, error) {\n\treturn &IntCode{typ: typ, bitSize: 64, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uintStringCode(typ *runtime.Type) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: intSize, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint8StringCode(typ *runtime.Type) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 8, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint16StringCode(typ *runtime.Type) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 16, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint32StringCode(typ *runtime.Type) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 32, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) uint64StringCode(typ *runtime.Type) (*UintCode, error) {\n\treturn &UintCode{typ: typ, bitSize: 64, isString: true}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) bytesCode(typ *runtime.Type, isPtr bool) (*BytesCode, error) {\n\treturn &BytesCode{typ: typ, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) interfaceCode(typ *runtime.Type, isPtr bool) (*InterfaceCode, error) {\n\treturn &InterfaceCode{typ: typ, isPtr: isPtr}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) marshalJSONCode(typ *runtime.Type) (*MarshalJSONCode, error) {\n\treturn &MarshalJSONCode{\n\t\ttyp:                typ,\n\t\tisAddrForMarshaler: c.isPtrMarshalJSONType(typ),\n\t\tisNilableType:      c.isNilableType(typ),\n\t\tisMarshalerContext: typ.Implements(marshalJSONContextType) || runtime.PtrTo(typ).Implements(marshalJSONContextType),\n\t}, nil\n}\n\n//nolint:unparam\nfunc (c *Compiler) marshalTextCode(typ *runtime.Type) (*MarshalTextCode, error) {\n\treturn &MarshalTextCode{\n\t\ttyp:                typ,\n\t\tisAddrForMarshaler: c.isPtrMarshalTextType(typ),\n\t\tisNilableType:      c.isNilableType(typ),\n\t}, nil\n}\n\nfunc (c *Compiler) ptrCode(typ *runtime.Type) (*PtrCode, error) {\n\tcode, err := c.typeToCodeWithPtr(typ.Elem(), true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tptr, ok := code.(*PtrCode)\n\tif ok {\n\t\treturn &PtrCode{typ: typ, value: ptr.value, ptrNum: ptr.ptrNum + 1}, nil\n\t}\n\treturn &PtrCode{typ: typ, value: code, ptrNum: 1}, nil\n}\n\nfunc (c *Compiler) sliceCode(typ *runtime.Type) (*SliceCode, error) {\n\telem := typ.Elem()\n\tcode, err := c.listElemCode(elem)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif code.Kind() == CodeKindStruct {\n\t\tstructCode := code.(*StructCode)\n\t\tstructCode.enableIndirect()\n\t}\n\treturn &SliceCode{typ: typ, value: code}, nil\n}\n\nfunc (c *Compiler) arrayCode(typ *runtime.Type) (*ArrayCode, error) {\n\telem := typ.Elem()\n\tcode, err := c.listElemCode(elem)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif code.Kind() == CodeKindStruct {\n\t\tstructCode := code.(*StructCode)\n\t\tstructCode.enableIndirect()\n\t}\n\treturn &ArrayCode{typ: typ, value: code}, nil\n}\n\nfunc (c *Compiler) mapCode(typ *runtime.Type) (*MapCode, error) {\n\tkeyCode, err := c.mapKeyCode(typ.Key())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvalueCode, err := c.mapValueCode(typ.Elem())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif valueCode.Kind() == CodeKindStruct {\n\t\tstructCode := valueCode.(*StructCode)\n\t\tstructCode.enableIndirect()\n\t}\n\treturn &MapCode{typ: typ, key: keyCode, value: valueCode}, nil\n}\n\nfunc (c *Compiler) listElemCode(typ *runtime.Type) (Code, error) {\n\tswitch {\n\tcase c.isPtrMarshalJSONType(typ):\n\t\treturn c.marshalJSONCode(typ)\n\tcase !typ.Implements(marshalTextType) && runtime.PtrTo(typ).Implements(marshalTextType):\n\t\treturn c.marshalTextCode(typ)\n\tcase typ.Kind() == reflect.Map:\n\t\treturn c.ptrCode(runtime.PtrTo(typ))\n\tdefault:\n\t\t// isPtr was originally used to indicate whether the type of top level is pointer.\n\t\t// However, since the slice/array element is a specification that can get the pointer address, explicitly set isPtr to true.\n\t\t// See here for related issues: https://github.com/goccy/go-json/issues/370\n\t\tcode, err := c.typeToCodeWithPtr(typ, true)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tptr, ok := code.(*PtrCode)\n\t\tif ok {\n\t\t\tif ptr.value.Kind() == CodeKindMap {\n\t\t\t\tptr.ptrNum++\n\t\t\t}\n\t\t}\n\t\treturn code, nil\n\t}\n}\n\nfunc (c *Compiler) mapKeyCode(typ *runtime.Type) (Code, error) {\n\tswitch {\n\tcase c.implementsMarshalText(typ):\n\t\treturn c.marshalTextCode(typ)\n\t}\n\tswitch typ.Kind() {\n\tcase reflect.Ptr:\n\t\treturn c.ptrCode(typ)\n\tcase reflect.String:\n\t\treturn c.stringCode(typ, false)\n\tcase reflect.Int:\n\t\treturn c.intStringCode(typ)\n\tcase reflect.Int8:\n\t\treturn c.int8StringCode(typ)\n\tcase reflect.Int16:\n\t\treturn c.int16StringCode(typ)\n\tcase reflect.Int32:\n\t\treturn c.int32StringCode(typ)\n\tcase reflect.Int64:\n\t\treturn c.int64StringCode(typ)\n\tcase reflect.Uint:\n\t\treturn c.uintStringCode(typ)\n\tcase reflect.Uint8:\n\t\treturn c.uint8StringCode(typ)\n\tcase reflect.Uint16:\n\t\treturn c.uint16StringCode(typ)\n\tcase reflect.Uint32:\n\t\treturn c.uint32StringCode(typ)\n\tcase reflect.Uint64:\n\t\treturn c.uint64StringCode(typ)\n\tcase reflect.Uintptr:\n\t\treturn c.uintStringCode(typ)\n\t}\n\treturn nil, &errors.UnsupportedTypeError{Type: runtime.RType2Type(typ)}\n}\n\nfunc (c *Compiler) mapValueCode(typ *runtime.Type) (Code, error) {\n\tswitch typ.Kind() {\n\tcase reflect.Map:\n\t\treturn c.ptrCode(runtime.PtrTo(typ))\n\tdefault:\n\t\tcode, err := c.typeToCodeWithPtr(typ, false)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tptr, ok := code.(*PtrCode)\n\t\tif ok {\n\t\t\tif ptr.value.Kind() == CodeKindMap {\n\t\t\t\tptr.ptrNum++\n\t\t\t}\n\t\t}\n\t\treturn code, nil\n\t}\n}\n\nfunc (c *Compiler) structCode(typ *runtime.Type, isPtr bool) (*StructCode, error) {\n\ttypeptr := uintptr(unsafe.Pointer(typ))\n\tif code, exists := c.structTypeToCode[typeptr]; exists {\n\t\tderefCode := *code\n\t\tderefCode.isRecursive = true\n\t\treturn &derefCode, nil\n\t}\n\tindirect := runtime.IfaceIndir(typ)\n\tcode := &StructCode{typ: typ, isPtr: isPtr, isIndirect: indirect}\n\tc.structTypeToCode[typeptr] = code\n\n\tfieldNum := typ.NumField()\n\ttags := c.typeToStructTags(typ)\n\tfields := []*StructFieldCode{}\n\tfor i, tag := range tags {\n\t\tisOnlyOneFirstField := i == 0 && fieldNum == 1\n\t\tfield, err := c.structFieldCode(code, tag, isPtr, isOnlyOneFirstField)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif field.isAnonymous {\n\t\t\tstructCode := field.getAnonymousStruct()\n\t\t\tif structCode != nil {\n\t\t\t\tstructCode.removeFieldsByTags(tags)\n\t\t\t\tif c.isAssignableIndirect(field, isPtr) {\n\t\t\t\t\tif indirect {\n\t\t\t\t\t\tstructCode.isIndirect = true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstructCode.isIndirect = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tstructCode := field.getStruct()\n\t\t\tif structCode != nil {\n\t\t\t\tif indirect {\n\t\t\t\t\t// if parent is indirect type, set child indirect property to true\n\t\t\t\t\tstructCode.isIndirect = true\n\t\t\t\t} else {\n\t\t\t\t\t// if parent is not indirect type, set child indirect property to false.\n\t\t\t\t\t// but if parent's indirect is false and isPtr is true, then indirect must be true.\n\t\t\t\t\t// Do this only if indirectConversion is enabled at the end of compileStruct.\n\t\t\t\t\tstructCode.isIndirect = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfields = append(fields, field)\n\t}\n\tfieldMap := c.getFieldMap(fields)\n\tduplicatedFieldMap := c.getDuplicatedFieldMap(fieldMap)\n\tcode.fields = c.filteredDuplicatedFields(fields, duplicatedFieldMap)\n\tif !code.disableIndirectConversion && !indirect && isPtr {\n\t\tcode.enableIndirect()\n\t}\n\tdelete(c.structTypeToCode, typeptr)\n\treturn code, nil\n}\n\nfunc toElemType(t *runtime.Type) *runtime.Type {\n\tfor t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\treturn t\n}\n\nfunc (c *Compiler) structFieldCode(structCode *StructCode, tag *runtime.StructTag, isPtr, isOnlyOneFirstField bool) (*StructFieldCode, error) {\n\tfield := tag.Field\n\tfieldType := runtime.Type2RType(field.Type)\n\tisIndirectSpecialCase := isPtr && isOnlyOneFirstField\n\tfieldCode := &StructFieldCode{\n\t\ttyp:           fieldType,\n\t\tkey:           tag.Key,\n\t\ttag:           tag,\n\t\toffset:        field.Offset,\n\t\tisAnonymous:   field.Anonymous && !tag.IsTaggedKey && toElemType(fieldType).Kind() == reflect.Struct,\n\t\tisTaggedKey:   tag.IsTaggedKey,\n\t\tisNilableType: c.isNilableType(fieldType),\n\t\tisNilCheck:    true,\n\t}\n\tswitch {\n\tcase c.isMovePointerPositionFromHeadToFirstMarshalJSONFieldCase(fieldType, isIndirectSpecialCase):\n\t\tcode, err := c.marshalJSONCode(fieldType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfieldCode.value = code\n\t\tfieldCode.isAddrForMarshaler = true\n\t\tfieldCode.isNilCheck = false\n\t\tstructCode.isIndirect = false\n\t\tstructCode.disableIndirectConversion = true\n\tcase c.isMovePointerPositionFromHeadToFirstMarshalTextFieldCase(fieldType, isIndirectSpecialCase):\n\t\tcode, err := c.marshalTextCode(fieldType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfieldCode.value = code\n\t\tfieldCode.isAddrForMarshaler = true\n\t\tfieldCode.isNilCheck = false\n\t\tstructCode.isIndirect = false\n\t\tstructCode.disableIndirectConversion = true\n\tcase isPtr && c.isPtrMarshalJSONType(fieldType):\n\t\t// *struct{ field T }\n\t\t// func (*T) MarshalJSON() ([]byte, error)\n\t\tcode, err := c.marshalJSONCode(fieldType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfieldCode.value = code\n\t\tfieldCode.isAddrForMarshaler = true\n\t\tfieldCode.isNilCheck = false\n\tcase isPtr && c.isPtrMarshalTextType(fieldType):\n\t\t// *struct{ field T }\n\t\t// func (*T) MarshalText() ([]byte, error)\n\t\tcode, err := c.marshalTextCode(fieldType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfieldCode.value = code\n\t\tfieldCode.isAddrForMarshaler = true\n\t\tfieldCode.isNilCheck = false\n\tdefault:\n\t\tcode, err := c.typeToCodeWithPtr(fieldType, isPtr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch code.Kind() {\n\t\tcase CodeKindPtr, CodeKindInterface:\n\t\t\tfieldCode.isNextOpPtrType = true\n\t\t}\n\t\tfieldCode.value = code\n\t}\n\treturn fieldCode, nil\n}\n\nfunc (c *Compiler) isAssignableIndirect(fieldCode *StructFieldCode, isPtr bool) bool {\n\tif isPtr {\n\t\treturn false\n\t}\n\tcodeType := fieldCode.value.Kind()\n\tif codeType == CodeKindMarshalJSON {\n\t\treturn false\n\t}\n\tif codeType == CodeKindMarshalText {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (c *Compiler) getFieldMap(fields []*StructFieldCode) map[string][]*StructFieldCode {\n\tfieldMap := map[string][]*StructFieldCode{}\n\tfor _, field := range fields {\n\t\tif field.isAnonymous {\n\t\t\tfor k, v := range c.getAnonymousFieldMap(field) {\n\t\t\t\tfieldMap[k] = append(fieldMap[k], v...)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tfieldMap[field.key] = append(fieldMap[field.key], field)\n\t}\n\treturn fieldMap\n}\n\nfunc (c *Compiler) getAnonymousFieldMap(field *StructFieldCode) map[string][]*StructFieldCode {\n\tfieldMap := map[string][]*StructFieldCode{}\n\tstructCode := field.getAnonymousStruct()\n\tif structCode == nil || structCode.isRecursive {\n\t\tfieldMap[field.key] = append(fieldMap[field.key], field)\n\t\treturn fieldMap\n\t}\n\tfor k, v := range c.getFieldMapFromAnonymousParent(structCode.fields) {\n\t\tfieldMap[k] = append(fieldMap[k], v...)\n\t}\n\treturn fieldMap\n}\n\nfunc (c *Compiler) getFieldMapFromAnonymousParent(fields []*StructFieldCode) map[string][]*StructFieldCode {\n\tfieldMap := map[string][]*StructFieldCode{}\n\tfor _, field := range fields {\n\t\tif field.isAnonymous {\n\t\t\tfor k, v := range c.getAnonymousFieldMap(field) {\n\t\t\t\t// Do not handle tagged key when embedding more than once\n\t\t\t\tfor _, vv := range v {\n\t\t\t\t\tvv.isTaggedKey = false\n\t\t\t\t}\n\t\t\t\tfieldMap[k] = append(fieldMap[k], v...)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tfieldMap[field.key] = append(fieldMap[field.key], field)\n\t}\n\treturn fieldMap\n}\n\nfunc (c *Compiler) getDuplicatedFieldMap(fieldMap map[string][]*StructFieldCode) map[*StructFieldCode]struct{} {\n\tduplicatedFieldMap := map[*StructFieldCode]struct{}{}\n\tfor _, fields := range fieldMap {\n\t\tif len(fields) == 1 {\n\t\t\tcontinue\n\t\t}\n\t\tif c.isTaggedKeyOnly(fields) {\n\t\t\tfor _, field := range fields {\n\t\t\t\tif field.isTaggedKey {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tduplicatedFieldMap[field] = struct{}{}\n\t\t\t}\n\t\t} else {\n\t\t\tfor _, field := range fields {\n\t\t\t\tduplicatedFieldMap[field] = struct{}{}\n\t\t\t}\n\t\t}\n\t}\n\treturn duplicatedFieldMap\n}\n\nfunc (c *Compiler) filteredDuplicatedFields(fields []*StructFieldCode, duplicatedFieldMap map[*StructFieldCode]struct{}) []*StructFieldCode {\n\tfilteredFields := make([]*StructFieldCode, 0, len(fields))\n\tfor _, field := range fields {\n\t\tif field.isAnonymous {\n\t\t\tstructCode := field.getAnonymousStruct()\n\t\t\tif structCode != nil && !structCode.isRecursive {\n\t\t\t\tstructCode.fields = c.filteredDuplicatedFields(structCode.fields, duplicatedFieldMap)\n\t\t\t\tif len(structCode.fields) > 0 {\n\t\t\t\t\tfilteredFields = append(filteredFields, field)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif _, exists := duplicatedFieldMap[field]; exists {\n\t\t\tcontinue\n\t\t}\n\t\tfilteredFields = append(filteredFields, field)\n\t}\n\treturn filteredFields\n}\n\nfunc (c *Compiler) isTaggedKeyOnly(fields []*StructFieldCode) bool {\n\tvar taggedKeyFieldCount int\n\tfor _, field := range fields {\n\t\tif field.isTaggedKey {\n\t\t\ttaggedKeyFieldCount++\n\t\t}\n\t}\n\treturn taggedKeyFieldCount == 1\n}\n\nfunc (c *Compiler) typeToStructTags(typ *runtime.Type) runtime.StructTags {\n\ttags := runtime.StructTags{}\n\tfieldNum := typ.NumField()\n\tfor i := 0; i < fieldNum; i++ {\n\t\tfield := typ.Field(i)\n\t\tif runtime.IsIgnoredStructField(field) {\n\t\t\tcontinue\n\t\t}\n\t\ttags = append(tags, runtime.StructTagFromField(field))\n\t}\n\treturn tags\n}\n\n// *struct{ field T } => struct { field *T }\n// func (*T) MarshalJSON() ([]byte, error)\nfunc (c *Compiler) isMovePointerPositionFromHeadToFirstMarshalJSONFieldCase(typ *runtime.Type, isIndirectSpecialCase bool) bool {\n\treturn isIndirectSpecialCase && !c.isNilableType(typ) && c.isPtrMarshalJSONType(typ)\n}\n\n// *struct{ field T } => struct { field *T }\n// func (*T) MarshalText() ([]byte, error)\nfunc (c *Compiler) isMovePointerPositionFromHeadToFirstMarshalTextFieldCase(typ *runtime.Type, isIndirectSpecialCase bool) bool {\n\treturn isIndirectSpecialCase && !c.isNilableType(typ) && c.isPtrMarshalTextType(typ)\n}\n\nfunc (c *Compiler) implementsMarshalJSON(typ *runtime.Type) bool {\n\tif !c.implementsMarshalJSONType(typ) {\n\t\treturn false\n\t}\n\tif typ.Kind() != reflect.Ptr {\n\t\treturn true\n\t}\n\t// type kind is reflect.Ptr\n\tif !c.implementsMarshalJSONType(typ.Elem()) {\n\t\treturn true\n\t}\n\t// needs to dereference\n\treturn false\n}\n\nfunc (c *Compiler) implementsMarshalText(typ *runtime.Type) bool {\n\tif !typ.Implements(marshalTextType) {\n\t\treturn false\n\t}\n\tif typ.Kind() != reflect.Ptr {\n\t\treturn true\n\t}\n\t// type kind is reflect.Ptr\n\tif !typ.Elem().Implements(marshalTextType) {\n\t\treturn true\n\t}\n\t// needs to dereference\n\treturn false\n}\n\nfunc (c *Compiler) isNilableType(typ *runtime.Type) bool {\n\tif !runtime.IfaceIndir(typ) {\n\t\treturn true\n\t}\n\tswitch typ.Kind() {\n\tcase reflect.Ptr:\n\t\treturn true\n\tcase reflect.Map:\n\t\treturn true\n\tcase reflect.Func:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (c *Compiler) implementsMarshalJSONType(typ *runtime.Type) bool {\n\treturn typ.Implements(marshalJSONType) || typ.Implements(marshalJSONContextType)\n}\n\nfunc (c *Compiler) isPtrMarshalJSONType(typ *runtime.Type) bool {\n\treturn !c.implementsMarshalJSONType(typ) && c.implementsMarshalJSONType(runtime.PtrTo(typ))\n}\n\nfunc (c *Compiler) isPtrMarshalTextType(typ *runtime.Type) bool {\n\treturn !typ.Implements(marshalTextType) && runtime.PtrTo(typ).Implements(marshalTextType)\n}\n\nfunc (c *Compiler) codeToOpcode(ctx *compileContext, typ *runtime.Type, code Code) *Opcode {\n\tcodes := code.ToOpcode(ctx)\n\tcodes.Last().Next = newEndOp(ctx, typ)\n\tc.linkRecursiveCode(ctx)\n\treturn codes.First()\n}\n\nfunc (c *Compiler) linkRecursiveCode(ctx *compileContext) {\n\trecursiveCodes := map[uintptr]*CompiledCode{}\n\tfor _, recursive := range *ctx.recursiveCodes {\n\t\ttypeptr := uintptr(unsafe.Pointer(recursive.Type))\n\t\tcodes := ctx.structTypeToCodes[typeptr]\n\t\tif recursiveCode, ok := recursiveCodes[typeptr]; ok {\n\t\t\t*recursive.Jmp = *recursiveCode\n\t\t\tcontinue\n\t\t}\n\n\t\tcode := copyOpcode(codes.First())\n\t\tcode.Op = code.Op.PtrHeadToHead()\n\t\tlastCode := newEndOp(&compileContext{}, recursive.Type)\n\t\tlastCode.Op = OpRecursiveEnd\n\n\t\t// OpRecursiveEnd must set before call TotalLength\n\t\tcode.End.Next = lastCode\n\n\t\ttotalLength := code.TotalLength()\n\n\t\t// Idx, ElemIdx, Length must set after call TotalLength\n\t\tlastCode.Idx = uint32((totalLength + 1) * uintptrSize)\n\t\tlastCode.ElemIdx = lastCode.Idx + uintptrSize\n\t\tlastCode.Length = lastCode.Idx + 2*uintptrSize\n\n\t\t// extend length to alloc slot for elemIdx + length\n\t\tcurTotalLength := uintptr(recursive.TotalLength()) + 3\n\t\tnextTotalLength := uintptr(totalLength) + 3\n\n\t\tcompiled := recursive.Jmp\n\t\tcompiled.Code = code\n\t\tcompiled.CurLen = curTotalLength\n\t\tcompiled.NextLen = nextTotalLength\n\t\tcompiled.Linked = true\n\n\t\trecursiveCodes[typeptr] = compiled\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go",
    "content": "//go:build !race\n// +build !race\n\npackage encoder\n\nfunc CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) {\n\tif typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr {\n\t\tcodeSet, err := compileToGetCodeSetSlowPath(typeptr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn getFilteredCodeSetIfNeeded(ctx, codeSet)\n\t}\n\tindex := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift\n\tif codeSet := cachedOpcodeSets[index]; codeSet != nil {\n\t\tfiltered, err := getFilteredCodeSetIfNeeded(ctx, codeSet)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn filtered, nil\n\t}\n\tcodeSet, err := newCompiler().compile(typeptr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfiltered, err := getFilteredCodeSetIfNeeded(ctx, codeSet)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcachedOpcodeSets[index] = codeSet\n\treturn filtered, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go",
    "content": "//go:build race\n// +build race\n\npackage encoder\n\nimport (\n\t\"sync\"\n)\n\nvar setsMu sync.RWMutex\n\nfunc CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) {\n\tif typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr {\n\t\tcodeSet, err := compileToGetCodeSetSlowPath(typeptr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn getFilteredCodeSetIfNeeded(ctx, codeSet)\n\t}\n\tindex := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift\n\tsetsMu.RLock()\n\tif codeSet := cachedOpcodeSets[index]; codeSet != nil {\n\t\tfiltered, err := getFilteredCodeSetIfNeeded(ctx, codeSet)\n\t\tif err != nil {\n\t\t\tsetsMu.RUnlock()\n\t\t\treturn nil, err\n\t\t}\n\t\tsetsMu.RUnlock()\n\t\treturn filtered, nil\n\t}\n\tsetsMu.RUnlock()\n\n\tcodeSet, err := newCompiler().compile(typeptr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfiltered, err := getFilteredCodeSetIfNeeded(ctx, codeSet)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsetsMu.Lock()\n\tcachedOpcodeSets[index] = codeSet\n\tsetsMu.Unlock()\n\treturn filtered, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/context.go",
    "content": "package encoder\n\nimport (\n\t\"context\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\ntype compileContext struct {\n\topcodeIndex       uint32\n\tptrIndex          int\n\tindent            uint32\n\tescapeKey         bool\n\tstructTypeToCodes map[uintptr]Opcodes\n\trecursiveCodes    *Opcodes\n}\n\nfunc (c *compileContext) incIndent() {\n\tc.indent++\n}\n\nfunc (c *compileContext) decIndent() {\n\tc.indent--\n}\n\nfunc (c *compileContext) incIndex() {\n\tc.incOpcodeIndex()\n\tc.incPtrIndex()\n}\n\nfunc (c *compileContext) decIndex() {\n\tc.decOpcodeIndex()\n\tc.decPtrIndex()\n}\n\nfunc (c *compileContext) incOpcodeIndex() {\n\tc.opcodeIndex++\n}\n\nfunc (c *compileContext) decOpcodeIndex() {\n\tc.opcodeIndex--\n}\n\nfunc (c *compileContext) incPtrIndex() {\n\tc.ptrIndex++\n}\n\nfunc (c *compileContext) decPtrIndex() {\n\tc.ptrIndex--\n}\n\nconst (\n\tbufSize = 1024\n)\n\nvar (\n\truntimeContextPool = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn &RuntimeContext{\n\t\t\t\tBuf:      make([]byte, 0, bufSize),\n\t\t\t\tPtrs:     make([]uintptr, 128),\n\t\t\t\tKeepRefs: make([]unsafe.Pointer, 0, 8),\n\t\t\t\tOption:   &Option{},\n\t\t\t}\n\t\t},\n\t}\n)\n\ntype RuntimeContext struct {\n\tContext    context.Context\n\tBuf        []byte\n\tMarshalBuf []byte\n\tPtrs       []uintptr\n\tKeepRefs   []unsafe.Pointer\n\tSeenPtr    []uintptr\n\tBaseIndent uint32\n\tPrefix     []byte\n\tIndentStr  []byte\n\tOption     *Option\n}\n\nfunc (c *RuntimeContext) Init(p uintptr, codelen int) {\n\tif len(c.Ptrs) < codelen {\n\t\tc.Ptrs = make([]uintptr, codelen)\n\t}\n\tc.Ptrs[0] = p\n\tc.KeepRefs = c.KeepRefs[:0]\n\tc.SeenPtr = c.SeenPtr[:0]\n\tc.BaseIndent = 0\n}\n\nfunc (c *RuntimeContext) Ptr() uintptr {\n\theader := (*runtime.SliceHeader)(unsafe.Pointer(&c.Ptrs))\n\treturn uintptr(header.Data)\n}\n\nfunc TakeRuntimeContext() *RuntimeContext {\n\treturn runtimeContextPool.Get().(*RuntimeContext)\n}\n\nfunc ReleaseRuntimeContext(ctx *RuntimeContext) {\n\truntimeContextPool.Put(ctx)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/decode_rune.go",
    "content": "package encoder\n\nimport \"unicode/utf8\"\n\nconst (\n\t// The default lowest and highest continuation byte.\n\tlocb = 128 //0b10000000\n\thicb = 191 //0b10111111\n\n\t// These names of these constants are chosen to give nice alignment in the\n\t// table below. The first nibble is an index into acceptRanges or F for\n\t// special one-byte cases. The second nibble is the Rune length or the\n\t// Status for the special one-byte case.\n\txx = 0xF1 // invalid: size 1\n\tas = 0xF0 // ASCII: size 1\n\ts1 = 0x02 // accept 0, size 2\n\ts2 = 0x13 // accept 1, size 3\n\ts3 = 0x03 // accept 0, size 3\n\ts4 = 0x23 // accept 2, size 3\n\ts5 = 0x34 // accept 3, size 4\n\ts6 = 0x04 // accept 0, size 4\n\ts7 = 0x44 // accept 4, size 4\n)\n\n// first is information about the first byte in a UTF-8 sequence.\nvar first = [256]uint8{\n\t//   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F\n\tas, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F\n\t//   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF\n\txx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF\n\txx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF\n\ts1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF\n\ts2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF\n\ts5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF\n}\n\nconst (\n\tlineSep      = byte(168) //'\\u2028'\n\tparagraphSep = byte(169) //'\\u2029'\n)\n\ntype decodeRuneState int\n\nconst (\n\tvalidUTF8State decodeRuneState = iota\n\truneErrorState\n\tlineSepState\n\tparagraphSepState\n)\n\nfunc decodeRuneInString(s string) (decodeRuneState, int) {\n\tn := len(s)\n\ts0 := s[0]\n\tx := first[s0]\n\tif x >= as {\n\t\t// The following code simulates an additional check for x == xx and\n\t\t// handling the ASCII and invalid cases accordingly. This mask-and-or\n\t\t// approach prevents an additional branch.\n\t\tmask := rune(x) << 31 >> 31 // Create 0x0000 or 0xFFFF.\n\t\tif rune(s[0])&^mask|utf8.RuneError&mask == utf8.RuneError {\n\t\t\treturn runeErrorState, 1\n\t\t}\n\t\treturn validUTF8State, 1\n\t}\n\tsz := int(x & 7)\n\tif n < sz {\n\t\treturn runeErrorState, 1\n\t}\n\ts1 := s[1]\n\tswitch x >> 4 {\n\tcase 0:\n\t\tif s1 < locb || hicb < s1 {\n\t\t\treturn runeErrorState, 1\n\t\t}\n\tcase 1:\n\t\tif s1 < 0xA0 || hicb < s1 {\n\t\t\treturn runeErrorState, 1\n\t\t}\n\tcase 2:\n\t\tif s1 < locb || 0x9F < s1 {\n\t\t\treturn runeErrorState, 1\n\t\t}\n\tcase 3:\n\t\tif s1 < 0x90 || hicb < s1 {\n\t\t\treturn runeErrorState, 1\n\t\t}\n\tcase 4:\n\t\tif s1 < locb || 0x8F < s1 {\n\t\t\treturn runeErrorState, 1\n\t\t}\n\t}\n\tif sz <= 2 {\n\t\treturn validUTF8State, 2\n\t}\n\ts2 := s[2]\n\tif s2 < locb || hicb < s2 {\n\t\treturn runeErrorState, 1\n\t}\n\tif sz <= 3 {\n\t\t// separator character prefixes: [2]byte{226, 128}\n\t\tif s0 == 226 && s1 == 128 {\n\t\t\tswitch s2 {\n\t\t\tcase lineSep:\n\t\t\t\treturn lineSepState, 3\n\t\t\tcase paragraphSep:\n\t\t\t\treturn paragraphSepState, 3\n\t\t\t}\n\t\t}\n\t\treturn validUTF8State, 3\n\t}\n\ts3 := s[3]\n\tif s3 < locb || hicb < s3 {\n\t\treturn runeErrorState, 1\n\t}\n\treturn validUTF8State, 4\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/encoder.go",
    "content": "package encoder\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nfunc (t OpType) IsMultipleOpHead() bool {\n\tswitch t {\n\tcase OpStructHead:\n\t\treturn true\n\tcase OpStructHeadSlice:\n\t\treturn true\n\tcase OpStructHeadArray:\n\t\treturn true\n\tcase OpStructHeadMap:\n\t\treturn true\n\tcase OpStructHeadStruct:\n\t\treturn true\n\tcase OpStructHeadOmitEmpty:\n\t\treturn true\n\tcase OpStructHeadOmitEmptySlice:\n\t\treturn true\n\tcase OpStructHeadOmitEmptyArray:\n\t\treturn true\n\tcase OpStructHeadOmitEmptyMap:\n\t\treturn true\n\tcase OpStructHeadOmitEmptyStruct:\n\t\treturn true\n\tcase OpStructHeadSlicePtr:\n\t\treturn true\n\tcase OpStructHeadOmitEmptySlicePtr:\n\t\treturn true\n\tcase OpStructHeadArrayPtr:\n\t\treturn true\n\tcase OpStructHeadOmitEmptyArrayPtr:\n\t\treturn true\n\tcase OpStructHeadMapPtr:\n\t\treturn true\n\tcase OpStructHeadOmitEmptyMapPtr:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (t OpType) IsMultipleOpField() bool {\n\tswitch t {\n\tcase OpStructField:\n\t\treturn true\n\tcase OpStructFieldSlice:\n\t\treturn true\n\tcase OpStructFieldArray:\n\t\treturn true\n\tcase OpStructFieldMap:\n\t\treturn true\n\tcase OpStructFieldStruct:\n\t\treturn true\n\tcase OpStructFieldOmitEmpty:\n\t\treturn true\n\tcase OpStructFieldOmitEmptySlice:\n\t\treturn true\n\tcase OpStructFieldOmitEmptyArray:\n\t\treturn true\n\tcase OpStructFieldOmitEmptyMap:\n\t\treturn true\n\tcase OpStructFieldOmitEmptyStruct:\n\t\treturn true\n\tcase OpStructFieldSlicePtr:\n\t\treturn true\n\tcase OpStructFieldOmitEmptySlicePtr:\n\t\treturn true\n\tcase OpStructFieldArrayPtr:\n\t\treturn true\n\tcase OpStructFieldOmitEmptyArrayPtr:\n\t\treturn true\n\tcase OpStructFieldMapPtr:\n\t\treturn true\n\tcase OpStructFieldOmitEmptyMapPtr:\n\t\treturn true\n\t}\n\treturn false\n}\n\ntype OpcodeSet struct {\n\tType                     *runtime.Type\n\tNoescapeKeyCode          *Opcode\n\tEscapeKeyCode            *Opcode\n\tInterfaceNoescapeKeyCode *Opcode\n\tInterfaceEscapeKeyCode   *Opcode\n\tCodeLength               int\n\tEndCode                  *Opcode\n\tCode                     Code\n\tQueryCache               map[string]*OpcodeSet\n\tcacheMu                  sync.RWMutex\n}\n\nfunc (s *OpcodeSet) getQueryCache(hash string) *OpcodeSet {\n\ts.cacheMu.RLock()\n\tcodeSet := s.QueryCache[hash]\n\ts.cacheMu.RUnlock()\n\treturn codeSet\n}\n\nfunc (s *OpcodeSet) setQueryCache(hash string, codeSet *OpcodeSet) {\n\ts.cacheMu.Lock()\n\ts.QueryCache[hash] = codeSet\n\ts.cacheMu.Unlock()\n}\n\ntype CompiledCode struct {\n\tCode    *Opcode\n\tLinked  bool // whether recursive code already have linked\n\tCurLen  uintptr\n\tNextLen uintptr\n}\n\nconst StartDetectingCyclesAfter = 1000\n\nfunc Load(base uintptr, idx uintptr) uintptr {\n\taddr := base + idx\n\treturn **(**uintptr)(unsafe.Pointer(&addr))\n}\n\nfunc Store(base uintptr, idx uintptr, p uintptr) {\n\taddr := base + idx\n\t**(**uintptr)(unsafe.Pointer(&addr)) = p\n}\n\nfunc LoadNPtr(base uintptr, idx uintptr, ptrNum int) uintptr {\n\taddr := base + idx\n\tp := **(**uintptr)(unsafe.Pointer(&addr))\n\tif p == 0 {\n\t\treturn 0\n\t}\n\treturn PtrToPtr(p)\n\t/*\n\t\tfor i := 0; i < ptrNum; i++ {\n\t\t\tif p == 0 {\n\t\t\t\treturn p\n\t\t\t}\n\t\t\tp = PtrToPtr(p)\n\t\t}\n\t\treturn p\n\t*/\n}\n\nfunc PtrToUint64(p uintptr) uint64              { return **(**uint64)(unsafe.Pointer(&p)) }\nfunc PtrToFloat32(p uintptr) float32            { return **(**float32)(unsafe.Pointer(&p)) }\nfunc PtrToFloat64(p uintptr) float64            { return **(**float64)(unsafe.Pointer(&p)) }\nfunc PtrToBool(p uintptr) bool                  { return **(**bool)(unsafe.Pointer(&p)) }\nfunc PtrToBytes(p uintptr) []byte               { return **(**[]byte)(unsafe.Pointer(&p)) }\nfunc PtrToNumber(p uintptr) json.Number         { return **(**json.Number)(unsafe.Pointer(&p)) }\nfunc PtrToString(p uintptr) string              { return **(**string)(unsafe.Pointer(&p)) }\nfunc PtrToSlice(p uintptr) *runtime.SliceHeader { return *(**runtime.SliceHeader)(unsafe.Pointer(&p)) }\nfunc PtrToPtr(p uintptr) uintptr {\n\treturn uintptr(**(**unsafe.Pointer)(unsafe.Pointer(&p)))\n}\nfunc PtrToNPtr(p uintptr, ptrNum int) uintptr {\n\tfor i := 0; i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = PtrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc PtrToUnsafePtr(p uintptr) unsafe.Pointer {\n\treturn *(*unsafe.Pointer)(unsafe.Pointer(&p))\n}\nfunc PtrToInterface(code *Opcode, p uintptr) interface{} {\n\treturn *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: code.Type,\n\t\tptr: *(*unsafe.Pointer)(unsafe.Pointer(&p)),\n\t}))\n}\n\nfunc ErrUnsupportedValue(code *Opcode, ptr uintptr) *errors.UnsupportedValueError {\n\tv := *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: code.Type,\n\t\tptr: *(*unsafe.Pointer)(unsafe.Pointer(&ptr)),\n\t}))\n\treturn &errors.UnsupportedValueError{\n\t\tValue: reflect.ValueOf(v),\n\t\tStr:   fmt.Sprintf(\"encountered a cycle via %s\", code.Type),\n\t}\n}\n\nfunc ErrUnsupportedFloat(v float64) *errors.UnsupportedValueError {\n\treturn &errors.UnsupportedValueError{\n\t\tValue: reflect.ValueOf(v),\n\t\tStr:   strconv.FormatFloat(v, 'g', -1, 64),\n\t}\n}\n\nfunc ErrMarshalerWithCode(code *Opcode, err error) *errors.MarshalerError {\n\treturn &errors.MarshalerError{\n\t\tType: runtime.RType2Type(code.Type),\n\t\tErr:  err,\n\t}\n}\n\ntype emptyInterface struct {\n\ttyp *runtime.Type\n\tptr unsafe.Pointer\n}\n\ntype MapItem struct {\n\tKey   []byte\n\tValue []byte\n}\n\ntype Mapslice struct {\n\tItems []MapItem\n}\n\nfunc (m *Mapslice) Len() int {\n\treturn len(m.Items)\n}\n\nfunc (m *Mapslice) Less(i, j int) bool {\n\treturn bytes.Compare(m.Items[i].Key, m.Items[j].Key) < 0\n}\n\nfunc (m *Mapslice) Swap(i, j int) {\n\tm.Items[i], m.Items[j] = m.Items[j], m.Items[i]\n}\n\n//nolint:structcheck,unused\ntype mapIter struct {\n\tkey         unsafe.Pointer\n\telem        unsafe.Pointer\n\tt           unsafe.Pointer\n\th           unsafe.Pointer\n\tbuckets     unsafe.Pointer\n\tbptr        unsafe.Pointer\n\toverflow    unsafe.Pointer\n\toldoverflow unsafe.Pointer\n\tstartBucket uintptr\n\toffset      uint8\n\twrapped     bool\n\tB           uint8\n\ti           uint8\n\tbucket      uintptr\n\tcheckBucket uintptr\n}\n\ntype MapContext struct {\n\tStart int\n\tFirst int\n\tIdx   int\n\tSlice *Mapslice\n\tBuf   []byte\n\tLen   int\n\tIter  mapIter\n}\n\nvar mapContextPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn &MapContext{\n\t\t\tSlice: &Mapslice{},\n\t\t}\n\t},\n}\n\nfunc NewMapContext(mapLen int, unorderedMap bool) *MapContext {\n\tctx := mapContextPool.Get().(*MapContext)\n\tif !unorderedMap {\n\t\tif len(ctx.Slice.Items) < mapLen {\n\t\t\tctx.Slice.Items = make([]MapItem, mapLen)\n\t\t} else {\n\t\t\tctx.Slice.Items = ctx.Slice.Items[:mapLen]\n\t\t}\n\t}\n\tctx.Buf = ctx.Buf[:0]\n\tctx.Iter = mapIter{}\n\tctx.Idx = 0\n\tctx.Len = mapLen\n\treturn ctx\n}\n\nfunc ReleaseMapContext(c *MapContext) {\n\tmapContextPool.Put(c)\n}\n\n//go:linkname MapIterInit runtime.mapiterinit\n//go:noescape\nfunc MapIterInit(mapType *runtime.Type, m unsafe.Pointer, it *mapIter)\n\n//go:linkname MapIterKey reflect.mapiterkey\n//go:noescape\nfunc MapIterKey(it *mapIter) unsafe.Pointer\n\n//go:linkname MapIterNext reflect.mapiternext\n//go:noescape\nfunc MapIterNext(it *mapIter)\n\n//go:linkname MapLen reflect.maplen\n//go:noescape\nfunc MapLen(m unsafe.Pointer) int\n\nfunc AppendByteSlice(_ *RuntimeContext, b []byte, src []byte) []byte {\n\tif src == nil {\n\t\treturn append(b, `null`...)\n\t}\n\tencodedLen := base64.StdEncoding.EncodedLen(len(src))\n\tb = append(b, '\"')\n\tpos := len(b)\n\tremainLen := cap(b[pos:])\n\tvar buf []byte\n\tif remainLen > encodedLen {\n\t\tbuf = b[pos : pos+encodedLen]\n\t} else {\n\t\tbuf = make([]byte, encodedLen)\n\t}\n\tbase64.StdEncoding.Encode(buf, src)\n\treturn append(append(b, buf...), '\"')\n}\n\nfunc AppendFloat32(_ *RuntimeContext, b []byte, v float32) []byte {\n\tf64 := float64(v)\n\tabs := math.Abs(f64)\n\tfmt := byte('f')\n\t// Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right.\n\tif abs != 0 {\n\t\tf32 := float32(abs)\n\t\tif f32 < 1e-6 || f32 >= 1e21 {\n\t\t\tfmt = 'e'\n\t\t}\n\t}\n\treturn strconv.AppendFloat(b, f64, fmt, -1, 32)\n}\n\nfunc AppendFloat64(_ *RuntimeContext, b []byte, v float64) []byte {\n\tabs := math.Abs(v)\n\tfmt := byte('f')\n\t// Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right.\n\tif abs != 0 {\n\t\tif abs < 1e-6 || abs >= 1e21 {\n\t\t\tfmt = 'e'\n\t\t}\n\t}\n\treturn strconv.AppendFloat(b, v, fmt, -1, 64)\n}\n\nfunc AppendBool(_ *RuntimeContext, b []byte, v bool) []byte {\n\tif v {\n\t\treturn append(b, \"true\"...)\n\t}\n\treturn append(b, \"false\"...)\n}\n\nvar (\n\tfloatTable = [256]bool{\n\t\t'0': true,\n\t\t'1': true,\n\t\t'2': true,\n\t\t'3': true,\n\t\t'4': true,\n\t\t'5': true,\n\t\t'6': true,\n\t\t'7': true,\n\t\t'8': true,\n\t\t'9': true,\n\t\t'.': true,\n\t\t'e': true,\n\t\t'E': true,\n\t\t'+': true,\n\t\t'-': true,\n\t}\n)\n\nfunc AppendNumber(_ *RuntimeContext, b []byte, n json.Number) ([]byte, error) {\n\tif len(n) == 0 {\n\t\treturn append(b, '0'), nil\n\t}\n\tfor i := 0; i < len(n); i++ {\n\t\tif !floatTable[n[i]] {\n\t\t\treturn nil, fmt.Errorf(\"json: invalid number literal %q\", n)\n\t\t}\n\t}\n\tb = append(b, n...)\n\treturn b, nil\n}\n\nfunc AppendMarshalJSON(ctx *RuntimeContext, code *Opcode, b []byte, v interface{}) ([]byte, error) {\n\trv := reflect.ValueOf(v) // convert by dynamic interface type\n\tif (code.Flags & AddrForMarshalerFlags) != 0 {\n\t\tif rv.CanAddr() {\n\t\t\trv = rv.Addr()\n\t\t} else {\n\t\t\tnewV := reflect.New(rv.Type())\n\t\t\tnewV.Elem().Set(rv)\n\t\t\trv = newV\n\t\t}\n\t}\n\tv = rv.Interface()\n\tvar bb []byte\n\tif (code.Flags & MarshalerContextFlags) != 0 {\n\t\tmarshaler, ok := v.(marshalerContext)\n\t\tif !ok {\n\t\t\treturn AppendNull(ctx, b), nil\n\t\t}\n\t\tstdctx := ctx.Option.Context\n\t\tif ctx.Option.Flag&FieldQueryOption != 0 {\n\t\t\tstdctx = SetFieldQueryToContext(stdctx, code.FieldQuery)\n\t\t}\n\t\tb, err := marshaler.MarshalJSON(stdctx)\n\t\tif err != nil {\n\t\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t\t}\n\t\tbb = b\n\t} else {\n\t\tmarshaler, ok := v.(json.Marshaler)\n\t\tif !ok {\n\t\t\treturn AppendNull(ctx, b), nil\n\t\t}\n\t\tb, err := marshaler.MarshalJSON()\n\t\tif err != nil {\n\t\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t\t}\n\t\tbb = b\n\t}\n\tmarshalBuf := ctx.MarshalBuf[:0]\n\tmarshalBuf = append(append(marshalBuf, bb...), nul)\n\tcompactedBuf, err := compact(b, marshalBuf, (ctx.Option.Flag&HTMLEscapeOption) != 0)\n\tif err != nil {\n\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t}\n\tctx.MarshalBuf = marshalBuf\n\treturn compactedBuf, nil\n}\n\nfunc AppendMarshalJSONIndent(ctx *RuntimeContext, code *Opcode, b []byte, v interface{}) ([]byte, error) {\n\trv := reflect.ValueOf(v) // convert by dynamic interface type\n\tif (code.Flags & AddrForMarshalerFlags) != 0 {\n\t\tif rv.CanAddr() {\n\t\t\trv = rv.Addr()\n\t\t} else {\n\t\t\tnewV := reflect.New(rv.Type())\n\t\t\tnewV.Elem().Set(rv)\n\t\t\trv = newV\n\t\t}\n\t}\n\tv = rv.Interface()\n\tvar bb []byte\n\tif (code.Flags & MarshalerContextFlags) != 0 {\n\t\tmarshaler, ok := v.(marshalerContext)\n\t\tif !ok {\n\t\t\treturn AppendNull(ctx, b), nil\n\t\t}\n\t\tb, err := marshaler.MarshalJSON(ctx.Option.Context)\n\t\tif err != nil {\n\t\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t\t}\n\t\tbb = b\n\t} else {\n\t\tmarshaler, ok := v.(json.Marshaler)\n\t\tif !ok {\n\t\t\treturn AppendNull(ctx, b), nil\n\t\t}\n\t\tb, err := marshaler.MarshalJSON()\n\t\tif err != nil {\n\t\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t\t}\n\t\tbb = b\n\t}\n\tmarshalBuf := ctx.MarshalBuf[:0]\n\tmarshalBuf = append(append(marshalBuf, bb...), nul)\n\tindentedBuf, err := doIndent(\n\t\tb,\n\t\tmarshalBuf,\n\t\tstring(ctx.Prefix)+strings.Repeat(string(ctx.IndentStr), int(ctx.BaseIndent+code.Indent)),\n\t\tstring(ctx.IndentStr),\n\t\t(ctx.Option.Flag&HTMLEscapeOption) != 0,\n\t)\n\tif err != nil {\n\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t}\n\tctx.MarshalBuf = marshalBuf\n\treturn indentedBuf, nil\n}\n\nfunc AppendMarshalText(ctx *RuntimeContext, code *Opcode, b []byte, v interface{}) ([]byte, error) {\n\trv := reflect.ValueOf(v) // convert by dynamic interface type\n\tif (code.Flags & AddrForMarshalerFlags) != 0 {\n\t\tif rv.CanAddr() {\n\t\t\trv = rv.Addr()\n\t\t} else {\n\t\t\tnewV := reflect.New(rv.Type())\n\t\t\tnewV.Elem().Set(rv)\n\t\t\trv = newV\n\t\t}\n\t}\n\tv = rv.Interface()\n\tmarshaler, ok := v.(encoding.TextMarshaler)\n\tif !ok {\n\t\treturn AppendNull(ctx, b), nil\n\t}\n\tbytes, err := marshaler.MarshalText()\n\tif err != nil {\n\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t}\n\treturn AppendString(ctx, b, *(*string)(unsafe.Pointer(&bytes))), nil\n}\n\nfunc AppendMarshalTextIndent(ctx *RuntimeContext, code *Opcode, b []byte, v interface{}) ([]byte, error) {\n\trv := reflect.ValueOf(v) // convert by dynamic interface type\n\tif (code.Flags & AddrForMarshalerFlags) != 0 {\n\t\tif rv.CanAddr() {\n\t\t\trv = rv.Addr()\n\t\t} else {\n\t\t\tnewV := reflect.New(rv.Type())\n\t\t\tnewV.Elem().Set(rv)\n\t\t\trv = newV\n\t\t}\n\t}\n\tv = rv.Interface()\n\tmarshaler, ok := v.(encoding.TextMarshaler)\n\tif !ok {\n\t\treturn AppendNull(ctx, b), nil\n\t}\n\tbytes, err := marshaler.MarshalText()\n\tif err != nil {\n\t\treturn nil, &errors.MarshalerError{Type: reflect.TypeOf(v), Err: err}\n\t}\n\treturn AppendString(ctx, b, *(*string)(unsafe.Pointer(&bytes))), nil\n}\n\nfunc AppendNull(_ *RuntimeContext, b []byte) []byte {\n\treturn append(b, \"null\"...)\n}\n\nfunc AppendComma(_ *RuntimeContext, b []byte) []byte {\n\treturn append(b, ',')\n}\n\nfunc AppendCommaIndent(_ *RuntimeContext, b []byte) []byte {\n\treturn append(b, ',', '\\n')\n}\n\nfunc AppendStructEnd(_ *RuntimeContext, b []byte) []byte {\n\treturn append(b, '}', ',')\n}\n\nfunc AppendStructEndIndent(ctx *RuntimeContext, code *Opcode, b []byte) []byte {\n\tb = append(b, '\\n')\n\tb = append(b, ctx.Prefix...)\n\tindentNum := ctx.BaseIndent + code.Indent - 1\n\tfor i := uint32(0); i < indentNum; i++ {\n\t\tb = append(b, ctx.IndentStr...)\n\t}\n\treturn append(b, '}', ',', '\\n')\n}\n\nfunc AppendIndent(ctx *RuntimeContext, b []byte, indent uint32) []byte {\n\tb = append(b, ctx.Prefix...)\n\tindentNum := ctx.BaseIndent + indent\n\tfor i := uint32(0); i < indentNum; i++ {\n\t\tb = append(b, ctx.IndentStr...)\n\t}\n\treturn b\n}\n\nfunc IsNilForMarshaler(v interface{}) bool {\n\trv := reflect.ValueOf(v)\n\tswitch rv.Kind() {\n\tcase reflect.Bool:\n\t\treturn !rv.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn rv.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn rv.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn math.Float64bits(rv.Float()) == 0\n\tcase reflect.Interface, reflect.Map, reflect.Ptr, reflect.Func:\n\t\treturn rv.IsNil()\n\tcase reflect.Slice:\n\t\treturn rv.IsNil() || rv.Len() == 0\n\tcase reflect.String:\n\t\treturn rv.Len() == 0\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/indent.go",
    "content": "package encoder\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/goccy/go-json/internal/errors\"\n)\n\nfunc takeIndentSrcRuntimeContext(src []byte) (*RuntimeContext, []byte) {\n\tctx := TakeRuntimeContext()\n\tbuf := ctx.Buf[:0]\n\tbuf = append(append(buf, src...), nul)\n\tctx.Buf = buf\n\treturn ctx, buf\n}\n\nfunc Indent(buf *bytes.Buffer, src []byte, prefix, indentStr string) error {\n\tif len(src) == 0 {\n\t\treturn errors.ErrUnexpectedEndOfJSON(\"\", 0)\n\t}\n\n\tsrcCtx, srcBuf := takeIndentSrcRuntimeContext(src)\n\tdstCtx := TakeRuntimeContext()\n\tdst := dstCtx.Buf[:0]\n\n\tdst, err := indentAndWrite(buf, dst, srcBuf, prefix, indentStr)\n\tif err != nil {\n\t\tReleaseRuntimeContext(srcCtx)\n\t\tReleaseRuntimeContext(dstCtx)\n\t\treturn err\n\t}\n\tdstCtx.Buf = dst\n\tReleaseRuntimeContext(srcCtx)\n\tReleaseRuntimeContext(dstCtx)\n\treturn nil\n}\n\nfunc indentAndWrite(buf *bytes.Buffer, dst []byte, src []byte, prefix, indentStr string) ([]byte, error) {\n\tdst, err := doIndent(dst, src, prefix, indentStr, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif _, err := buf.Write(dst); err != nil {\n\t\treturn nil, err\n\t}\n\treturn dst, nil\n}\n\nfunc doIndent(dst, src []byte, prefix, indentStr string, escape bool) ([]byte, error) {\n\tbuf, cursor, err := indentValue(dst, src, 0, 0, []byte(prefix), []byte(indentStr), escape)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := validateEndBuf(src, cursor); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf, nil\n}\n\nfunc indentValue(\n\tdst []byte,\n\tsrc []byte,\n\tindentNum int,\n\tcursor int64,\n\tprefix []byte,\n\tindentBytes []byte,\n\tescape bool) ([]byte, int64, error) {\n\tfor {\n\t\tswitch src[cursor] {\n\t\tcase ' ', '\\t', '\\n', '\\r':\n\t\t\tcursor++\n\t\t\tcontinue\n\t\tcase '{':\n\t\t\treturn indentObject(dst, src, indentNum, cursor, prefix, indentBytes, escape)\n\t\tcase '}':\n\t\t\treturn nil, 0, errors.ErrSyntax(\"unexpected character '}'\", cursor)\n\t\tcase '[':\n\t\t\treturn indentArray(dst, src, indentNum, cursor, prefix, indentBytes, escape)\n\t\tcase ']':\n\t\t\treturn nil, 0, errors.ErrSyntax(\"unexpected character ']'\", cursor)\n\t\tcase '\"':\n\t\t\treturn compactString(dst, src, cursor, escape)\n\t\tcase '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\treturn compactNumber(dst, src, cursor)\n\t\tcase 't':\n\t\t\treturn compactTrue(dst, src, cursor)\n\t\tcase 'f':\n\t\t\treturn compactFalse(dst, src, cursor)\n\t\tcase 'n':\n\t\t\treturn compactNull(dst, src, cursor)\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrSyntax(fmt.Sprintf(\"unexpected character '%c'\", src[cursor]), cursor)\n\t\t}\n\t}\n}\n\nfunc indentObject(\n\tdst []byte,\n\tsrc []byte,\n\tindentNum int,\n\tcursor int64,\n\tprefix []byte,\n\tindentBytes []byte,\n\tescape bool) ([]byte, int64, error) {\n\tif src[cursor] == '{' {\n\t\tdst = append(dst, '{')\n\t} else {\n\t\treturn nil, 0, errors.ErrExpected(\"expected { character for object value\", cursor)\n\t}\n\tcursor = skipWhiteSpace(src, cursor+1)\n\tif src[cursor] == '}' {\n\t\tdst = append(dst, '}')\n\t\treturn dst, cursor + 1, nil\n\t}\n\tindentNum++\n\tvar err error\n\tfor {\n\t\tdst = append(append(dst, '\\n'), prefix...)\n\t\tfor i := 0; i < indentNum; i++ {\n\t\t\tdst = append(dst, indentBytes...)\n\t\t}\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tdst, cursor, err = compactString(dst, src, cursor, escape)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tif src[cursor] != ':' {\n\t\t\treturn nil, 0, errors.ErrSyntax(\n\t\t\t\tfmt.Sprintf(\"invalid character '%c' after object key\", src[cursor]),\n\t\t\t\tcursor+1,\n\t\t\t)\n\t\t}\n\t\tdst = append(dst, ':', ' ')\n\t\tdst, cursor, err = indentValue(dst, src, indentNum, cursor+1, prefix, indentBytes, escape)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tswitch src[cursor] {\n\t\tcase '}':\n\t\t\tdst = append(append(dst, '\\n'), prefix...)\n\t\t\tfor i := 0; i < indentNum-1; i++ {\n\t\t\t\tdst = append(dst, indentBytes...)\n\t\t\t}\n\t\t\tdst = append(dst, '}')\n\t\t\tcursor++\n\t\t\treturn dst, cursor, nil\n\t\tcase ',':\n\t\t\tdst = append(dst, ',')\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrSyntax(\n\t\t\t\tfmt.Sprintf(\"invalid character '%c' after object key:value pair\", src[cursor]),\n\t\t\t\tcursor+1,\n\t\t\t)\n\t\t}\n\t\tcursor++\n\t}\n}\n\nfunc indentArray(\n\tdst []byte,\n\tsrc []byte,\n\tindentNum int,\n\tcursor int64,\n\tprefix []byte,\n\tindentBytes []byte,\n\tescape bool) ([]byte, int64, error) {\n\tif src[cursor] == '[' {\n\t\tdst = append(dst, '[')\n\t} else {\n\t\treturn nil, 0, errors.ErrExpected(\"expected [ character for array value\", cursor)\n\t}\n\tcursor = skipWhiteSpace(src, cursor+1)\n\tif src[cursor] == ']' {\n\t\tdst = append(dst, ']')\n\t\treturn dst, cursor + 1, nil\n\t}\n\tindentNum++\n\tvar err error\n\tfor {\n\t\tdst = append(append(dst, '\\n'), prefix...)\n\t\tfor i := 0; i < indentNum; i++ {\n\t\t\tdst = append(dst, indentBytes...)\n\t\t}\n\t\tdst, cursor, err = indentValue(dst, src, indentNum, cursor, prefix, indentBytes, escape)\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\t\tcursor = skipWhiteSpace(src, cursor)\n\t\tswitch src[cursor] {\n\t\tcase ']':\n\t\t\tdst = append(append(dst, '\\n'), prefix...)\n\t\t\tfor i := 0; i < indentNum-1; i++ {\n\t\t\t\tdst = append(dst, indentBytes...)\n\t\t\t}\n\t\t\tdst = append(dst, ']')\n\t\t\tcursor++\n\t\t\treturn dst, cursor, nil\n\t\tcase ',':\n\t\t\tdst = append(dst, ',')\n\t\tdefault:\n\t\t\treturn nil, 0, errors.ErrSyntax(\n\t\t\t\tfmt.Sprintf(\"invalid character '%c' after array value\", src[cursor]),\n\t\t\t\tcursor+1,\n\t\t\t)\n\t\t}\n\t\tcursor++\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/int.go",
    "content": "package encoder\n\nimport (\n\t\"unsafe\"\n)\n\nvar endianness int\n\nfunc init() {\n\tvar b [2]byte\n\t*(*uint16)(unsafe.Pointer(&b)) = uint16(0xABCD)\n\n\tswitch b[0] {\n\tcase 0xCD:\n\t\tendianness = 0 // LE\n\tcase 0xAB:\n\t\tendianness = 1 // BE\n\tdefault:\n\t\tpanic(\"could not determine endianness\")\n\t}\n}\n\n// \"00010203...96979899\" cast to []uint16\nvar intLELookup = [100]uint16{\n\t0x3030, 0x3130, 0x3230, 0x3330, 0x3430, 0x3530, 0x3630, 0x3730, 0x3830, 0x3930,\n\t0x3031, 0x3131, 0x3231, 0x3331, 0x3431, 0x3531, 0x3631, 0x3731, 0x3831, 0x3931,\n\t0x3032, 0x3132, 0x3232, 0x3332, 0x3432, 0x3532, 0x3632, 0x3732, 0x3832, 0x3932,\n\t0x3033, 0x3133, 0x3233, 0x3333, 0x3433, 0x3533, 0x3633, 0x3733, 0x3833, 0x3933,\n\t0x3034, 0x3134, 0x3234, 0x3334, 0x3434, 0x3534, 0x3634, 0x3734, 0x3834, 0x3934,\n\t0x3035, 0x3135, 0x3235, 0x3335, 0x3435, 0x3535, 0x3635, 0x3735, 0x3835, 0x3935,\n\t0x3036, 0x3136, 0x3236, 0x3336, 0x3436, 0x3536, 0x3636, 0x3736, 0x3836, 0x3936,\n\t0x3037, 0x3137, 0x3237, 0x3337, 0x3437, 0x3537, 0x3637, 0x3737, 0x3837, 0x3937,\n\t0x3038, 0x3138, 0x3238, 0x3338, 0x3438, 0x3538, 0x3638, 0x3738, 0x3838, 0x3938,\n\t0x3039, 0x3139, 0x3239, 0x3339, 0x3439, 0x3539, 0x3639, 0x3739, 0x3839, 0x3939,\n}\n\nvar intBELookup = [100]uint16{\n\t0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036, 0x3037, 0x3038, 0x3039,\n\t0x3130, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139,\n\t0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239,\n\t0x3330, 0x3331, 0x3332, 0x3333, 0x3334, 0x3335, 0x3336, 0x3337, 0x3338, 0x3339,\n\t0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436, 0x3437, 0x3438, 0x3439,\n\t0x3530, 0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538, 0x3539,\n\t0x3630, 0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639,\n\t0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735, 0x3736, 0x3737, 0x3738, 0x3739,\n\t0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839,\n\t0x3930, 0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938, 0x3939,\n}\n\nvar intLookup = [2]*[100]uint16{&intLELookup, &intBELookup}\n\nfunc numMask(numBitSize uint8) uint64 {\n\treturn 1<<numBitSize - 1\n}\n\nfunc AppendInt(_ *RuntimeContext, out []byte, p uintptr, code *Opcode) []byte {\n\tvar u64 uint64\n\tswitch code.NumBitSize {\n\tcase 8:\n\t\tu64 = (uint64)(**(**uint8)(unsafe.Pointer(&p)))\n\tcase 16:\n\t\tu64 = (uint64)(**(**uint16)(unsafe.Pointer(&p)))\n\tcase 32:\n\t\tu64 = (uint64)(**(**uint32)(unsafe.Pointer(&p)))\n\tcase 64:\n\t\tu64 = **(**uint64)(unsafe.Pointer(&p))\n\t}\n\tmask := numMask(code.NumBitSize)\n\tn := u64 & mask\n\tnegative := (u64>>(code.NumBitSize-1))&1 == 1\n\tif !negative {\n\t\tif n < 10 {\n\t\t\treturn append(out, byte(n+'0'))\n\t\t} else if n < 100 {\n\t\t\tu := intLELookup[n]\n\t\t\treturn append(out, byte(u), byte(u>>8))\n\t\t}\n\t} else {\n\t\tn = -n & mask\n\t}\n\n\tlookup := intLookup[endianness]\n\n\tvar b [22]byte\n\tu := (*[11]uint16)(unsafe.Pointer(&b))\n\ti := 11\n\n\tfor n >= 100 {\n\t\tj := n % 100\n\t\tn /= 100\n\t\ti--\n\t\tu[i] = lookup[j]\n\t}\n\n\ti--\n\tu[i] = lookup[n]\n\n\ti *= 2 // convert to byte index\n\tif n < 10 {\n\t\ti++ // remove leading zero\n\t}\n\tif negative {\n\t\ti--\n\t\tb[i] = '-'\n\t}\n\n\treturn append(out, b[i:]...)\n}\n\nfunc AppendUint(_ *RuntimeContext, out []byte, p uintptr, code *Opcode) []byte {\n\tvar u64 uint64\n\tswitch code.NumBitSize {\n\tcase 8:\n\t\tu64 = (uint64)(**(**uint8)(unsafe.Pointer(&p)))\n\tcase 16:\n\t\tu64 = (uint64)(**(**uint16)(unsafe.Pointer(&p)))\n\tcase 32:\n\t\tu64 = (uint64)(**(**uint32)(unsafe.Pointer(&p)))\n\tcase 64:\n\t\tu64 = **(**uint64)(unsafe.Pointer(&p))\n\t}\n\tmask := numMask(code.NumBitSize)\n\tn := u64 & mask\n\tif n < 10 {\n\t\treturn append(out, byte(n+'0'))\n\t} else if n < 100 {\n\t\tu := intLELookup[n]\n\t\treturn append(out, byte(u), byte(u>>8))\n\t}\n\n\tlookup := intLookup[endianness]\n\n\tvar b [22]byte\n\tu := (*[11]uint16)(unsafe.Pointer(&b))\n\ti := 11\n\n\tfor n >= 100 {\n\t\tj := n % 100\n\t\tn /= 100\n\t\ti--\n\t\tu[i] = lookup[j]\n\t}\n\n\ti--\n\tu[i] = lookup[n]\n\n\ti *= 2 // convert to byte index\n\tif n < 10 {\n\t\ti++ // remove leading zero\n\t}\n\treturn append(out, b[i:]...)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/map112.go",
    "content": "//go:build !go1.13\n// +build !go1.13\n\npackage encoder\n\nimport \"unsafe\"\n\n//go:linkname MapIterValue reflect.mapitervalue\nfunc MapIterValue(it *mapIter) unsafe.Pointer\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/map113.go",
    "content": "//go:build go1.13\n// +build go1.13\n\npackage encoder\n\nimport \"unsafe\"\n\n//go:linkname MapIterValue reflect.mapiterelem\nfunc MapIterValue(it *mapIter) unsafe.Pointer\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/opcode.go",
    "content": "package encoder\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nconst uintptrSize = 4 << (^uintptr(0) >> 63)\n\ntype OpFlags uint16\n\nconst (\n\tAnonymousHeadFlags     OpFlags = 1 << 0\n\tAnonymousKeyFlags      OpFlags = 1 << 1\n\tIndirectFlags          OpFlags = 1 << 2\n\tIsTaggedKeyFlags       OpFlags = 1 << 3\n\tNilCheckFlags          OpFlags = 1 << 4\n\tAddrForMarshalerFlags  OpFlags = 1 << 5\n\tIsNextOpPtrTypeFlags   OpFlags = 1 << 6\n\tIsNilableTypeFlags     OpFlags = 1 << 7\n\tMarshalerContextFlags  OpFlags = 1 << 8\n\tNonEmptyInterfaceFlags OpFlags = 1 << 9\n)\n\ntype Opcode struct {\n\tOp         OpType  // operation type\n\tIdx        uint32  // offset to access ptr\n\tNext       *Opcode // next opcode\n\tEnd        *Opcode // array/slice/struct/map end\n\tNextField  *Opcode // next struct field\n\tKey        string  // struct field key\n\tOffset     uint32  // offset size from struct header\n\tPtrNum     uint8   // pointer number: e.g. double pointer is 2.\n\tNumBitSize uint8\n\tFlags      OpFlags\n\n\tType       *runtime.Type // go type\n\tJmp        *CompiledCode // for recursive call\n\tFieldQuery *FieldQuery   // field query for Interface / MarshalJSON / MarshalText\n\tElemIdx    uint32        // offset to access array/slice elem\n\tLength     uint32        // offset to access slice length or array length\n\tIndent     uint32        // indent number\n\tSize       uint32        // array/slice elem size\n\tDisplayIdx uint32        // opcode index\n\tDisplayKey string        // key text to display\n}\n\nfunc (c *Opcode) Validate() error {\n\tvar prevIdx uint32\n\tfor code := c; !code.IsEnd(); {\n\t\tif prevIdx != 0 {\n\t\t\tif code.DisplayIdx != prevIdx+1 {\n\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\"invalid index. previous display index is %d but next is %d. dump = %s\",\n\t\t\t\t\tprevIdx, code.DisplayIdx, c.Dump(),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tprevIdx = code.DisplayIdx\n\t\tcode = code.IterNext()\n\t}\n\treturn nil\n}\n\nfunc (c *Opcode) IterNext() *Opcode {\n\tif c == nil {\n\t\treturn nil\n\t}\n\tswitch c.Op.CodeType() {\n\tcase CodeArrayElem, CodeSliceElem, CodeMapKey:\n\t\treturn c.End\n\tdefault:\n\t\treturn c.Next\n\t}\n}\n\nfunc (c *Opcode) IsEnd() bool {\n\tif c == nil {\n\t\treturn true\n\t}\n\treturn c.Op == OpEnd || c.Op == OpInterfaceEnd || c.Op == OpRecursiveEnd\n}\n\nfunc (c *Opcode) MaxIdx() uint32 {\n\tmax := uint32(0)\n\tfor _, value := range []uint32{\n\t\tc.Idx,\n\t\tc.ElemIdx,\n\t\tc.Length,\n\t\tc.Size,\n\t} {\n\t\tif max < value {\n\t\t\tmax = value\n\t\t}\n\t}\n\treturn max\n}\n\nfunc (c *Opcode) ToHeaderType(isString bool) OpType {\n\tswitch c.Op {\n\tcase OpInt:\n\t\tif isString {\n\t\t\treturn OpStructHeadIntString\n\t\t}\n\t\treturn OpStructHeadInt\n\tcase OpIntPtr:\n\t\tif isString {\n\t\t\treturn OpStructHeadIntPtrString\n\t\t}\n\t\treturn OpStructHeadIntPtr\n\tcase OpUint:\n\t\tif isString {\n\t\t\treturn OpStructHeadUintString\n\t\t}\n\t\treturn OpStructHeadUint\n\tcase OpUintPtr:\n\t\tif isString {\n\t\t\treturn OpStructHeadUintPtrString\n\t\t}\n\t\treturn OpStructHeadUintPtr\n\tcase OpFloat32:\n\t\tif isString {\n\t\t\treturn OpStructHeadFloat32String\n\t\t}\n\t\treturn OpStructHeadFloat32\n\tcase OpFloat32Ptr:\n\t\tif isString {\n\t\t\treturn OpStructHeadFloat32PtrString\n\t\t}\n\t\treturn OpStructHeadFloat32Ptr\n\tcase OpFloat64:\n\t\tif isString {\n\t\t\treturn OpStructHeadFloat64String\n\t\t}\n\t\treturn OpStructHeadFloat64\n\tcase OpFloat64Ptr:\n\t\tif isString {\n\t\t\treturn OpStructHeadFloat64PtrString\n\t\t}\n\t\treturn OpStructHeadFloat64Ptr\n\tcase OpString:\n\t\tif isString {\n\t\t\treturn OpStructHeadStringString\n\t\t}\n\t\treturn OpStructHeadString\n\tcase OpStringPtr:\n\t\tif isString {\n\t\t\treturn OpStructHeadStringPtrString\n\t\t}\n\t\treturn OpStructHeadStringPtr\n\tcase OpNumber:\n\t\tif isString {\n\t\t\treturn OpStructHeadNumberString\n\t\t}\n\t\treturn OpStructHeadNumber\n\tcase OpNumberPtr:\n\t\tif isString {\n\t\t\treturn OpStructHeadNumberPtrString\n\t\t}\n\t\treturn OpStructHeadNumberPtr\n\tcase OpBool:\n\t\tif isString {\n\t\t\treturn OpStructHeadBoolString\n\t\t}\n\t\treturn OpStructHeadBool\n\tcase OpBoolPtr:\n\t\tif isString {\n\t\t\treturn OpStructHeadBoolPtrString\n\t\t}\n\t\treturn OpStructHeadBoolPtr\n\tcase OpBytes:\n\t\treturn OpStructHeadBytes\n\tcase OpBytesPtr:\n\t\treturn OpStructHeadBytesPtr\n\tcase OpMap:\n\t\treturn OpStructHeadMap\n\tcase OpMapPtr:\n\t\tc.Op = OpMap\n\t\treturn OpStructHeadMapPtr\n\tcase OpArray:\n\t\treturn OpStructHeadArray\n\tcase OpArrayPtr:\n\t\tc.Op = OpArray\n\t\treturn OpStructHeadArrayPtr\n\tcase OpSlice:\n\t\treturn OpStructHeadSlice\n\tcase OpSlicePtr:\n\t\tc.Op = OpSlice\n\t\treturn OpStructHeadSlicePtr\n\tcase OpMarshalJSON:\n\t\treturn OpStructHeadMarshalJSON\n\tcase OpMarshalJSONPtr:\n\t\treturn OpStructHeadMarshalJSONPtr\n\tcase OpMarshalText:\n\t\treturn OpStructHeadMarshalText\n\tcase OpMarshalTextPtr:\n\t\treturn OpStructHeadMarshalTextPtr\n\t}\n\treturn OpStructHead\n}\n\nfunc (c *Opcode) ToFieldType(isString bool) OpType {\n\tswitch c.Op {\n\tcase OpInt:\n\t\tif isString {\n\t\t\treturn OpStructFieldIntString\n\t\t}\n\t\treturn OpStructFieldInt\n\tcase OpIntPtr:\n\t\tif isString {\n\t\t\treturn OpStructFieldIntPtrString\n\t\t}\n\t\treturn OpStructFieldIntPtr\n\tcase OpUint:\n\t\tif isString {\n\t\t\treturn OpStructFieldUintString\n\t\t}\n\t\treturn OpStructFieldUint\n\tcase OpUintPtr:\n\t\tif isString {\n\t\t\treturn OpStructFieldUintPtrString\n\t\t}\n\t\treturn OpStructFieldUintPtr\n\tcase OpFloat32:\n\t\tif isString {\n\t\t\treturn OpStructFieldFloat32String\n\t\t}\n\t\treturn OpStructFieldFloat32\n\tcase OpFloat32Ptr:\n\t\tif isString {\n\t\t\treturn OpStructFieldFloat32PtrString\n\t\t}\n\t\treturn OpStructFieldFloat32Ptr\n\tcase OpFloat64:\n\t\tif isString {\n\t\t\treturn OpStructFieldFloat64String\n\t\t}\n\t\treturn OpStructFieldFloat64\n\tcase OpFloat64Ptr:\n\t\tif isString {\n\t\t\treturn OpStructFieldFloat64PtrString\n\t\t}\n\t\treturn OpStructFieldFloat64Ptr\n\tcase OpString:\n\t\tif isString {\n\t\t\treturn OpStructFieldStringString\n\t\t}\n\t\treturn OpStructFieldString\n\tcase OpStringPtr:\n\t\tif isString {\n\t\t\treturn OpStructFieldStringPtrString\n\t\t}\n\t\treturn OpStructFieldStringPtr\n\tcase OpNumber:\n\t\tif isString {\n\t\t\treturn OpStructFieldNumberString\n\t\t}\n\t\treturn OpStructFieldNumber\n\tcase OpNumberPtr:\n\t\tif isString {\n\t\t\treturn OpStructFieldNumberPtrString\n\t\t}\n\t\treturn OpStructFieldNumberPtr\n\tcase OpBool:\n\t\tif isString {\n\t\t\treturn OpStructFieldBoolString\n\t\t}\n\t\treturn OpStructFieldBool\n\tcase OpBoolPtr:\n\t\tif isString {\n\t\t\treturn OpStructFieldBoolPtrString\n\t\t}\n\t\treturn OpStructFieldBoolPtr\n\tcase OpBytes:\n\t\treturn OpStructFieldBytes\n\tcase OpBytesPtr:\n\t\treturn OpStructFieldBytesPtr\n\tcase OpMap:\n\t\treturn OpStructFieldMap\n\tcase OpMapPtr:\n\t\tc.Op = OpMap\n\t\treturn OpStructFieldMapPtr\n\tcase OpArray:\n\t\treturn OpStructFieldArray\n\tcase OpArrayPtr:\n\t\tc.Op = OpArray\n\t\treturn OpStructFieldArrayPtr\n\tcase OpSlice:\n\t\treturn OpStructFieldSlice\n\tcase OpSlicePtr:\n\t\tc.Op = OpSlice\n\t\treturn OpStructFieldSlicePtr\n\tcase OpMarshalJSON:\n\t\treturn OpStructFieldMarshalJSON\n\tcase OpMarshalJSONPtr:\n\t\treturn OpStructFieldMarshalJSONPtr\n\tcase OpMarshalText:\n\t\treturn OpStructFieldMarshalText\n\tcase OpMarshalTextPtr:\n\t\treturn OpStructFieldMarshalTextPtr\n\t}\n\treturn OpStructField\n}\n\nfunc newOpCode(ctx *compileContext, typ *runtime.Type, op OpType) *Opcode {\n\treturn newOpCodeWithNext(ctx, typ, op, newEndOp(ctx, typ))\n}\n\nfunc opcodeOffset(idx int) uint32 {\n\treturn uint32(idx) * uintptrSize\n}\n\nfunc getCodeAddrByIdx(head *Opcode, idx uint32) *Opcode {\n\taddr := uintptr(unsafe.Pointer(head)) + uintptr(idx)*unsafe.Sizeof(Opcode{})\n\treturn *(**Opcode)(unsafe.Pointer(&addr))\n}\n\nfunc copyOpcode(code *Opcode) *Opcode {\n\tcodeNum := ToEndCode(code).DisplayIdx + 1\n\tcodeSlice := make([]Opcode, codeNum)\n\thead := (*Opcode)((*runtime.SliceHeader)(unsafe.Pointer(&codeSlice)).Data)\n\tptr := head\n\tc := code\n\tfor {\n\t\t*ptr = Opcode{\n\t\t\tOp:         c.Op,\n\t\t\tKey:        c.Key,\n\t\t\tPtrNum:     c.PtrNum,\n\t\t\tNumBitSize: c.NumBitSize,\n\t\t\tFlags:      c.Flags,\n\t\t\tIdx:        c.Idx,\n\t\t\tOffset:     c.Offset,\n\t\t\tType:       c.Type,\n\t\t\tFieldQuery: c.FieldQuery,\n\t\t\tDisplayIdx: c.DisplayIdx,\n\t\t\tDisplayKey: c.DisplayKey,\n\t\t\tElemIdx:    c.ElemIdx,\n\t\t\tLength:     c.Length,\n\t\t\tSize:       c.Size,\n\t\t\tIndent:     c.Indent,\n\t\t\tJmp:        c.Jmp,\n\t\t}\n\t\tif c.End != nil {\n\t\t\tptr.End = getCodeAddrByIdx(head, c.End.DisplayIdx)\n\t\t}\n\t\tif c.NextField != nil {\n\t\t\tptr.NextField = getCodeAddrByIdx(head, c.NextField.DisplayIdx)\n\t\t}\n\t\tif c.Next != nil {\n\t\t\tptr.Next = getCodeAddrByIdx(head, c.Next.DisplayIdx)\n\t\t}\n\t\tif c.IsEnd() {\n\t\t\tbreak\n\t\t}\n\t\tptr = getCodeAddrByIdx(head, c.DisplayIdx+1)\n\t\tc = c.IterNext()\n\t}\n\treturn head\n}\n\nfunc setTotalLengthToInterfaceOp(code *Opcode) {\n\tfor c := code; !c.IsEnd(); {\n\t\tif c.Op == OpInterface || c.Op == OpInterfacePtr {\n\t\t\tc.Length = uint32(code.TotalLength())\n\t\t}\n\t\tc = c.IterNext()\n\t}\n}\n\nfunc ToEndCode(code *Opcode) *Opcode {\n\tc := code\n\tfor !c.IsEnd() {\n\t\tc = c.IterNext()\n\t}\n\treturn c\n}\n\nfunc copyToInterfaceOpcode(code *Opcode) *Opcode {\n\tcopied := copyOpcode(code)\n\tc := copied\n\tc = ToEndCode(c)\n\tc.Idx += uintptrSize\n\tc.ElemIdx = c.Idx + uintptrSize\n\tc.Length = c.Idx + 2*uintptrSize\n\tc.Op = OpInterfaceEnd\n\treturn copied\n}\n\nfunc newOpCodeWithNext(ctx *compileContext, typ *runtime.Type, op OpType, next *Opcode) *Opcode {\n\treturn &Opcode{\n\t\tOp:         op,\n\t\tIdx:        opcodeOffset(ctx.ptrIndex),\n\t\tNext:       next,\n\t\tType:       typ,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t}\n}\n\nfunc newEndOp(ctx *compileContext, typ *runtime.Type) *Opcode {\n\treturn newOpCodeWithNext(ctx, typ, OpEnd, nil)\n}\n\nfunc (c *Opcode) TotalLength() int {\n\tvar idx int\n\tcode := c\n\tfor !code.IsEnd() {\n\t\tmaxIdx := int(code.MaxIdx() / uintptrSize)\n\t\tif idx < maxIdx {\n\t\t\tidx = maxIdx\n\t\t}\n\t\tif code.Op == OpRecursiveEnd {\n\t\t\tbreak\n\t\t}\n\t\tcode = code.IterNext()\n\t}\n\tmaxIdx := int(code.MaxIdx() / uintptrSize)\n\tif idx < maxIdx {\n\t\tidx = maxIdx\n\t}\n\treturn idx + 1\n}\n\nfunc (c *Opcode) dumpHead(code *Opcode) string {\n\tvar length uint32\n\tif code.Op.CodeType() == CodeArrayHead {\n\t\tlength = code.Length\n\t} else {\n\t\tlength = code.Length / uintptrSize\n\t}\n\treturn fmt.Sprintf(\n\t\t`[%03d]%s%s ([idx:%d][elemIdx:%d][length:%d])`,\n\t\tcode.DisplayIdx,\n\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\tcode.Op,\n\t\tcode.Idx/uintptrSize,\n\t\tcode.ElemIdx/uintptrSize,\n\t\tlength,\n\t)\n}\n\nfunc (c *Opcode) dumpMapHead(code *Opcode) string {\n\treturn fmt.Sprintf(\n\t\t`[%03d]%s%s ([idx:%d])`,\n\t\tcode.DisplayIdx,\n\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\tcode.Op,\n\t\tcode.Idx/uintptrSize,\n\t)\n}\n\nfunc (c *Opcode) dumpMapEnd(code *Opcode) string {\n\treturn fmt.Sprintf(\n\t\t`[%03d]%s%s ([idx:%d])`,\n\t\tcode.DisplayIdx,\n\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\tcode.Op,\n\t\tcode.Idx/uintptrSize,\n\t)\n}\n\nfunc (c *Opcode) dumpElem(code *Opcode) string {\n\tvar length uint32\n\tif code.Op.CodeType() == CodeArrayElem {\n\t\tlength = code.Length\n\t} else {\n\t\tlength = code.Length / uintptrSize\n\t}\n\treturn fmt.Sprintf(\n\t\t`[%03d]%s%s ([idx:%d][elemIdx:%d][length:%d][size:%d])`,\n\t\tcode.DisplayIdx,\n\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\tcode.Op,\n\t\tcode.Idx/uintptrSize,\n\t\tcode.ElemIdx/uintptrSize,\n\t\tlength,\n\t\tcode.Size,\n\t)\n}\n\nfunc (c *Opcode) dumpField(code *Opcode) string {\n\treturn fmt.Sprintf(\n\t\t`[%03d]%s%s ([idx:%d][key:%s][offset:%d])`,\n\t\tcode.DisplayIdx,\n\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\tcode.Op,\n\t\tcode.Idx/uintptrSize,\n\t\tcode.DisplayKey,\n\t\tcode.Offset,\n\t)\n}\n\nfunc (c *Opcode) dumpKey(code *Opcode) string {\n\treturn fmt.Sprintf(\n\t\t`[%03d]%s%s ([idx:%d])`,\n\t\tcode.DisplayIdx,\n\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\tcode.Op,\n\t\tcode.Idx/uintptrSize,\n\t)\n}\n\nfunc (c *Opcode) dumpValue(code *Opcode) string {\n\treturn fmt.Sprintf(\n\t\t`[%03d]%s%s ([idx:%d])`,\n\t\tcode.DisplayIdx,\n\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\tcode.Op,\n\t\tcode.Idx/uintptrSize,\n\t)\n}\n\nfunc (c *Opcode) Dump() string {\n\tcodes := []string{}\n\tfor code := c; !code.IsEnd(); {\n\t\tswitch code.Op.CodeType() {\n\t\tcase CodeSliceHead:\n\t\t\tcodes = append(codes, c.dumpHead(code))\n\t\t\tcode = code.Next\n\t\tcase CodeMapHead:\n\t\t\tcodes = append(codes, c.dumpMapHead(code))\n\t\t\tcode = code.Next\n\t\tcase CodeArrayElem, CodeSliceElem:\n\t\t\tcodes = append(codes, c.dumpElem(code))\n\t\t\tcode = code.End\n\t\tcase CodeMapKey:\n\t\t\tcodes = append(codes, c.dumpKey(code))\n\t\t\tcode = code.End\n\t\tcase CodeMapValue:\n\t\t\tcodes = append(codes, c.dumpValue(code))\n\t\t\tcode = code.Next\n\t\tcase CodeMapEnd:\n\t\t\tcodes = append(codes, c.dumpMapEnd(code))\n\t\t\tcode = code.Next\n\t\tcase CodeStructField:\n\t\t\tcodes = append(codes, c.dumpField(code))\n\t\t\tcode = code.Next\n\t\tcase CodeStructEnd:\n\t\t\tcodes = append(codes, c.dumpField(code))\n\t\t\tcode = code.Next\n\t\tdefault:\n\t\t\tcodes = append(codes, fmt.Sprintf(\n\t\t\t\t\"[%03d]%s%s ([idx:%d])\",\n\t\t\t\tcode.DisplayIdx,\n\t\t\t\tstrings.Repeat(\"-\", int(code.Indent)),\n\t\t\t\tcode.Op,\n\t\t\t\tcode.Idx/uintptrSize,\n\t\t\t))\n\t\t\tcode = code.Next\n\t\t}\n\t}\n\treturn strings.Join(codes, \"\\n\")\n}\n\nfunc (c *Opcode) DumpDOT() string {\n\ttype edge struct {\n\t\tfrom, to *Opcode\n\t\tlabel    string\n\t\tweight   int\n\t}\n\tvar edges []edge\n\n\tb := &bytes.Buffer{}\n\tfmt.Fprintf(b, \"digraph \\\"%p\\\" {\\n\", c.Type)\n\tfmt.Fprintln(b, \"mclimit=1.5;\\nrankdir=TD;\\nordering=out;\\nnode[shape=box];\")\n\tfor code := c; !code.IsEnd(); {\n\t\tlabel := code.Op.String()\n\t\tfmt.Fprintf(b, \"\\\"%p\\\" [label=%q];\\n\", code, label)\n\t\tif p := code.Next; p != nil {\n\t\t\tedges = append(edges, edge{\n\t\t\t\tfrom:   code,\n\t\t\t\tto:     p,\n\t\t\t\tlabel:  \"Next\",\n\t\t\t\tweight: 10,\n\t\t\t})\n\t\t}\n\t\tif p := code.NextField; p != nil {\n\t\t\tedges = append(edges, edge{\n\t\t\t\tfrom:   code,\n\t\t\t\tto:     p,\n\t\t\t\tlabel:  \"NextField\",\n\t\t\t\tweight: 2,\n\t\t\t})\n\t\t}\n\t\tif p := code.End; p != nil {\n\t\t\tedges = append(edges, edge{\n\t\t\t\tfrom:   code,\n\t\t\t\tto:     p,\n\t\t\t\tlabel:  \"End\",\n\t\t\t\tweight: 1,\n\t\t\t})\n\t\t}\n\t\tif p := code.Jmp; p != nil {\n\t\t\tedges = append(edges, edge{\n\t\t\t\tfrom:   code,\n\t\t\t\tto:     p.Code,\n\t\t\t\tlabel:  \"Jmp\",\n\t\t\t\tweight: 1,\n\t\t\t})\n\t\t}\n\n\t\tswitch code.Op.CodeType() {\n\t\tcase CodeSliceHead:\n\t\t\tcode = code.Next\n\t\tcase CodeMapHead:\n\t\t\tcode = code.Next\n\t\tcase CodeArrayElem, CodeSliceElem:\n\t\t\tcode = code.End\n\t\tcase CodeMapKey:\n\t\t\tcode = code.End\n\t\tcase CodeMapValue:\n\t\t\tcode = code.Next\n\t\tcase CodeMapEnd:\n\t\t\tcode = code.Next\n\t\tcase CodeStructField:\n\t\t\tcode = code.Next\n\t\tcase CodeStructEnd:\n\t\t\tcode = code.Next\n\t\tdefault:\n\t\t\tcode = code.Next\n\t\t}\n\t\tif code.IsEnd() {\n\t\t\tfmt.Fprintf(b, \"\\\"%p\\\" [label=%q];\\n\", code, code.Op.String())\n\t\t}\n\t}\n\tsort.Slice(edges, func(i, j int) bool {\n\t\treturn edges[i].to.DisplayIdx < edges[j].to.DisplayIdx\n\t})\n\tfor _, e := range edges {\n\t\tfmt.Fprintf(b, \"\\\"%p\\\" -> \\\"%p\\\" [label=%q][weight=%d];\\n\", e.from, e.to, e.label, e.weight)\n\t}\n\tfmt.Fprint(b, \"}\")\n\treturn b.String()\n}\n\nfunc newSliceHeaderCode(ctx *compileContext, typ *runtime.Type) *Opcode {\n\tidx := opcodeOffset(ctx.ptrIndex)\n\tctx.incPtrIndex()\n\telemIdx := opcodeOffset(ctx.ptrIndex)\n\tctx.incPtrIndex()\n\tlength := opcodeOffset(ctx.ptrIndex)\n\treturn &Opcode{\n\t\tOp:         OpSlice,\n\t\tType:       typ,\n\t\tIdx:        idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tElemIdx:    elemIdx,\n\t\tLength:     length,\n\t\tIndent:     ctx.indent,\n\t}\n}\n\nfunc newSliceElemCode(ctx *compileContext, typ *runtime.Type, head *Opcode, size uintptr) *Opcode {\n\treturn &Opcode{\n\t\tOp:         OpSliceElem,\n\t\tType:       typ,\n\t\tIdx:        head.Idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tElemIdx:    head.ElemIdx,\n\t\tLength:     head.Length,\n\t\tIndent:     ctx.indent,\n\t\tSize:       uint32(size),\n\t}\n}\n\nfunc newArrayHeaderCode(ctx *compileContext, typ *runtime.Type, alen int) *Opcode {\n\tidx := opcodeOffset(ctx.ptrIndex)\n\tctx.incPtrIndex()\n\telemIdx := opcodeOffset(ctx.ptrIndex)\n\treturn &Opcode{\n\t\tOp:         OpArray,\n\t\tType:       typ,\n\t\tIdx:        idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tElemIdx:    elemIdx,\n\t\tIndent:     ctx.indent,\n\t\tLength:     uint32(alen),\n\t}\n}\n\nfunc newArrayElemCode(ctx *compileContext, typ *runtime.Type, head *Opcode, length int, size uintptr) *Opcode {\n\treturn &Opcode{\n\t\tOp:         OpArrayElem,\n\t\tType:       typ,\n\t\tIdx:        head.Idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tElemIdx:    head.ElemIdx,\n\t\tLength:     uint32(length),\n\t\tIndent:     ctx.indent,\n\t\tSize:       uint32(size),\n\t}\n}\n\nfunc newMapHeaderCode(ctx *compileContext, typ *runtime.Type) *Opcode {\n\tidx := opcodeOffset(ctx.ptrIndex)\n\tctx.incPtrIndex()\n\treturn &Opcode{\n\t\tOp:         OpMap,\n\t\tType:       typ,\n\t\tIdx:        idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t}\n}\n\nfunc newMapKeyCode(ctx *compileContext, typ *runtime.Type, head *Opcode) *Opcode {\n\treturn &Opcode{\n\t\tOp:         OpMapKey,\n\t\tType:       typ,\n\t\tIdx:        head.Idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t}\n}\n\nfunc newMapValueCode(ctx *compileContext, typ *runtime.Type, head *Opcode) *Opcode {\n\treturn &Opcode{\n\t\tOp:         OpMapValue,\n\t\tType:       typ,\n\t\tIdx:        head.Idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t}\n}\n\nfunc newMapEndCode(ctx *compileContext, typ *runtime.Type, head *Opcode) *Opcode {\n\treturn &Opcode{\n\t\tOp:         OpMapEnd,\n\t\tType:       typ,\n\t\tIdx:        head.Idx,\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t\tNext:       newEndOp(ctx, typ),\n\t}\n}\n\nfunc newRecursiveCode(ctx *compileContext, typ *runtime.Type, jmp *CompiledCode) *Opcode {\n\treturn &Opcode{\n\t\tOp:         OpRecursive,\n\t\tType:       typ,\n\t\tIdx:        opcodeOffset(ctx.ptrIndex),\n\t\tNext:       newEndOp(ctx, typ),\n\t\tDisplayIdx: ctx.opcodeIndex,\n\t\tIndent:     ctx.indent,\n\t\tJmp:        jmp,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/option.go",
    "content": "package encoder\n\nimport (\n\t\"context\"\n\t\"io\"\n)\n\ntype OptionFlag uint8\n\nconst (\n\tHTMLEscapeOption OptionFlag = 1 << iota\n\tIndentOption\n\tUnorderedMapOption\n\tDebugOption\n\tColorizeOption\n\tContextOption\n\tNormalizeUTF8Option\n\tFieldQueryOption\n)\n\ntype Option struct {\n\tFlag        OptionFlag\n\tColorScheme *ColorScheme\n\tContext     context.Context\n\tDebugOut    io.Writer\n\tDebugDOTOut io.WriteCloser\n}\n\ntype EncodeFormat struct {\n\tHeader string\n\tFooter string\n}\n\ntype EncodeFormatScheme struct {\n\tInt       EncodeFormat\n\tUint      EncodeFormat\n\tFloat     EncodeFormat\n\tBool      EncodeFormat\n\tString    EncodeFormat\n\tBinary    EncodeFormat\n\tObjectKey EncodeFormat\n\tNull      EncodeFormat\n}\n\ntype (\n\tColorScheme = EncodeFormatScheme\n\tColorFormat = EncodeFormat\n)\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/optype.go",
    "content": "// Code generated by internal/cmd/generator. DO NOT EDIT!\npackage encoder\n\nimport (\n\t\"strings\"\n)\n\ntype CodeType int\n\nconst (\n\tCodeOp          CodeType = 0\n\tCodeArrayHead   CodeType = 1\n\tCodeArrayElem   CodeType = 2\n\tCodeSliceHead   CodeType = 3\n\tCodeSliceElem   CodeType = 4\n\tCodeMapHead     CodeType = 5\n\tCodeMapKey      CodeType = 6\n\tCodeMapValue    CodeType = 7\n\tCodeMapEnd      CodeType = 8\n\tCodeRecursive   CodeType = 9\n\tCodeStructField CodeType = 10\n\tCodeStructEnd   CodeType = 11\n)\n\nvar opTypeStrings = [400]string{\n\t\"End\",\n\t\"Interface\",\n\t\"Ptr\",\n\t\"SliceElem\",\n\t\"SliceEnd\",\n\t\"ArrayElem\",\n\t\"ArrayEnd\",\n\t\"MapKey\",\n\t\"MapValue\",\n\t\"MapEnd\",\n\t\"Recursive\",\n\t\"RecursivePtr\",\n\t\"RecursiveEnd\",\n\t\"InterfaceEnd\",\n\t\"Int\",\n\t\"Uint\",\n\t\"Float32\",\n\t\"Float64\",\n\t\"Bool\",\n\t\"String\",\n\t\"Bytes\",\n\t\"Number\",\n\t\"Array\",\n\t\"Map\",\n\t\"Slice\",\n\t\"Struct\",\n\t\"MarshalJSON\",\n\t\"MarshalText\",\n\t\"IntString\",\n\t\"UintString\",\n\t\"Float32String\",\n\t\"Float64String\",\n\t\"BoolString\",\n\t\"StringString\",\n\t\"NumberString\",\n\t\"IntPtr\",\n\t\"UintPtr\",\n\t\"Float32Ptr\",\n\t\"Float64Ptr\",\n\t\"BoolPtr\",\n\t\"StringPtr\",\n\t\"BytesPtr\",\n\t\"NumberPtr\",\n\t\"ArrayPtr\",\n\t\"MapPtr\",\n\t\"SlicePtr\",\n\t\"MarshalJSONPtr\",\n\t\"MarshalTextPtr\",\n\t\"InterfacePtr\",\n\t\"IntPtrString\",\n\t\"UintPtrString\",\n\t\"Float32PtrString\",\n\t\"Float64PtrString\",\n\t\"BoolPtrString\",\n\t\"StringPtrString\",\n\t\"NumberPtrString\",\n\t\"StructHeadInt\",\n\t\"StructHeadOmitEmptyInt\",\n\t\"StructPtrHeadInt\",\n\t\"StructPtrHeadOmitEmptyInt\",\n\t\"StructHeadUint\",\n\t\"StructHeadOmitEmptyUint\",\n\t\"StructPtrHeadUint\",\n\t\"StructPtrHeadOmitEmptyUint\",\n\t\"StructHeadFloat32\",\n\t\"StructHeadOmitEmptyFloat32\",\n\t\"StructPtrHeadFloat32\",\n\t\"StructPtrHeadOmitEmptyFloat32\",\n\t\"StructHeadFloat64\",\n\t\"StructHeadOmitEmptyFloat64\",\n\t\"StructPtrHeadFloat64\",\n\t\"StructPtrHeadOmitEmptyFloat64\",\n\t\"StructHeadBool\",\n\t\"StructHeadOmitEmptyBool\",\n\t\"StructPtrHeadBool\",\n\t\"StructPtrHeadOmitEmptyBool\",\n\t\"StructHeadString\",\n\t\"StructHeadOmitEmptyString\",\n\t\"StructPtrHeadString\",\n\t\"StructPtrHeadOmitEmptyString\",\n\t\"StructHeadBytes\",\n\t\"StructHeadOmitEmptyBytes\",\n\t\"StructPtrHeadBytes\",\n\t\"StructPtrHeadOmitEmptyBytes\",\n\t\"StructHeadNumber\",\n\t\"StructHeadOmitEmptyNumber\",\n\t\"StructPtrHeadNumber\",\n\t\"StructPtrHeadOmitEmptyNumber\",\n\t\"StructHeadArray\",\n\t\"StructHeadOmitEmptyArray\",\n\t\"StructPtrHeadArray\",\n\t\"StructPtrHeadOmitEmptyArray\",\n\t\"StructHeadMap\",\n\t\"StructHeadOmitEmptyMap\",\n\t\"StructPtrHeadMap\",\n\t\"StructPtrHeadOmitEmptyMap\",\n\t\"StructHeadSlice\",\n\t\"StructHeadOmitEmptySlice\",\n\t\"StructPtrHeadSlice\",\n\t\"StructPtrHeadOmitEmptySlice\",\n\t\"StructHeadStruct\",\n\t\"StructHeadOmitEmptyStruct\",\n\t\"StructPtrHeadStruct\",\n\t\"StructPtrHeadOmitEmptyStruct\",\n\t\"StructHeadMarshalJSON\",\n\t\"StructHeadOmitEmptyMarshalJSON\",\n\t\"StructPtrHeadMarshalJSON\",\n\t\"StructPtrHeadOmitEmptyMarshalJSON\",\n\t\"StructHeadMarshalText\",\n\t\"StructHeadOmitEmptyMarshalText\",\n\t\"StructPtrHeadMarshalText\",\n\t\"StructPtrHeadOmitEmptyMarshalText\",\n\t\"StructHeadIntString\",\n\t\"StructHeadOmitEmptyIntString\",\n\t\"StructPtrHeadIntString\",\n\t\"StructPtrHeadOmitEmptyIntString\",\n\t\"StructHeadUintString\",\n\t\"StructHeadOmitEmptyUintString\",\n\t\"StructPtrHeadUintString\",\n\t\"StructPtrHeadOmitEmptyUintString\",\n\t\"StructHeadFloat32String\",\n\t\"StructHeadOmitEmptyFloat32String\",\n\t\"StructPtrHeadFloat32String\",\n\t\"StructPtrHeadOmitEmptyFloat32String\",\n\t\"StructHeadFloat64String\",\n\t\"StructHeadOmitEmptyFloat64String\",\n\t\"StructPtrHeadFloat64String\",\n\t\"StructPtrHeadOmitEmptyFloat64String\",\n\t\"StructHeadBoolString\",\n\t\"StructHeadOmitEmptyBoolString\",\n\t\"StructPtrHeadBoolString\",\n\t\"StructPtrHeadOmitEmptyBoolString\",\n\t\"StructHeadStringString\",\n\t\"StructHeadOmitEmptyStringString\",\n\t\"StructPtrHeadStringString\",\n\t\"StructPtrHeadOmitEmptyStringString\",\n\t\"StructHeadNumberString\",\n\t\"StructHeadOmitEmptyNumberString\",\n\t\"StructPtrHeadNumberString\",\n\t\"StructPtrHeadOmitEmptyNumberString\",\n\t\"StructHeadIntPtr\",\n\t\"StructHeadOmitEmptyIntPtr\",\n\t\"StructPtrHeadIntPtr\",\n\t\"StructPtrHeadOmitEmptyIntPtr\",\n\t\"StructHeadUintPtr\",\n\t\"StructHeadOmitEmptyUintPtr\",\n\t\"StructPtrHeadUintPtr\",\n\t\"StructPtrHeadOmitEmptyUintPtr\",\n\t\"StructHeadFloat32Ptr\",\n\t\"StructHeadOmitEmptyFloat32Ptr\",\n\t\"StructPtrHeadFloat32Ptr\",\n\t\"StructPtrHeadOmitEmptyFloat32Ptr\",\n\t\"StructHeadFloat64Ptr\",\n\t\"StructHeadOmitEmptyFloat64Ptr\",\n\t\"StructPtrHeadFloat64Ptr\",\n\t\"StructPtrHeadOmitEmptyFloat64Ptr\",\n\t\"StructHeadBoolPtr\",\n\t\"StructHeadOmitEmptyBoolPtr\",\n\t\"StructPtrHeadBoolPtr\",\n\t\"StructPtrHeadOmitEmptyBoolPtr\",\n\t\"StructHeadStringPtr\",\n\t\"StructHeadOmitEmptyStringPtr\",\n\t\"StructPtrHeadStringPtr\",\n\t\"StructPtrHeadOmitEmptyStringPtr\",\n\t\"StructHeadBytesPtr\",\n\t\"StructHeadOmitEmptyBytesPtr\",\n\t\"StructPtrHeadBytesPtr\",\n\t\"StructPtrHeadOmitEmptyBytesPtr\",\n\t\"StructHeadNumberPtr\",\n\t\"StructHeadOmitEmptyNumberPtr\",\n\t\"StructPtrHeadNumberPtr\",\n\t\"StructPtrHeadOmitEmptyNumberPtr\",\n\t\"StructHeadArrayPtr\",\n\t\"StructHeadOmitEmptyArrayPtr\",\n\t\"StructPtrHeadArrayPtr\",\n\t\"StructPtrHeadOmitEmptyArrayPtr\",\n\t\"StructHeadMapPtr\",\n\t\"StructHeadOmitEmptyMapPtr\",\n\t\"StructPtrHeadMapPtr\",\n\t\"StructPtrHeadOmitEmptyMapPtr\",\n\t\"StructHeadSlicePtr\",\n\t\"StructHeadOmitEmptySlicePtr\",\n\t\"StructPtrHeadSlicePtr\",\n\t\"StructPtrHeadOmitEmptySlicePtr\",\n\t\"StructHeadMarshalJSONPtr\",\n\t\"StructHeadOmitEmptyMarshalJSONPtr\",\n\t\"StructPtrHeadMarshalJSONPtr\",\n\t\"StructPtrHeadOmitEmptyMarshalJSONPtr\",\n\t\"StructHeadMarshalTextPtr\",\n\t\"StructHeadOmitEmptyMarshalTextPtr\",\n\t\"StructPtrHeadMarshalTextPtr\",\n\t\"StructPtrHeadOmitEmptyMarshalTextPtr\",\n\t\"StructHeadInterfacePtr\",\n\t\"StructHeadOmitEmptyInterfacePtr\",\n\t\"StructPtrHeadInterfacePtr\",\n\t\"StructPtrHeadOmitEmptyInterfacePtr\",\n\t\"StructHeadIntPtrString\",\n\t\"StructHeadOmitEmptyIntPtrString\",\n\t\"StructPtrHeadIntPtrString\",\n\t\"StructPtrHeadOmitEmptyIntPtrString\",\n\t\"StructHeadUintPtrString\",\n\t\"StructHeadOmitEmptyUintPtrString\",\n\t\"StructPtrHeadUintPtrString\",\n\t\"StructPtrHeadOmitEmptyUintPtrString\",\n\t\"StructHeadFloat32PtrString\",\n\t\"StructHeadOmitEmptyFloat32PtrString\",\n\t\"StructPtrHeadFloat32PtrString\",\n\t\"StructPtrHeadOmitEmptyFloat32PtrString\",\n\t\"StructHeadFloat64PtrString\",\n\t\"StructHeadOmitEmptyFloat64PtrString\",\n\t\"StructPtrHeadFloat64PtrString\",\n\t\"StructPtrHeadOmitEmptyFloat64PtrString\",\n\t\"StructHeadBoolPtrString\",\n\t\"StructHeadOmitEmptyBoolPtrString\",\n\t\"StructPtrHeadBoolPtrString\",\n\t\"StructPtrHeadOmitEmptyBoolPtrString\",\n\t\"StructHeadStringPtrString\",\n\t\"StructHeadOmitEmptyStringPtrString\",\n\t\"StructPtrHeadStringPtrString\",\n\t\"StructPtrHeadOmitEmptyStringPtrString\",\n\t\"StructHeadNumberPtrString\",\n\t\"StructHeadOmitEmptyNumberPtrString\",\n\t\"StructPtrHeadNumberPtrString\",\n\t\"StructPtrHeadOmitEmptyNumberPtrString\",\n\t\"StructHead\",\n\t\"StructHeadOmitEmpty\",\n\t\"StructPtrHead\",\n\t\"StructPtrHeadOmitEmpty\",\n\t\"StructFieldInt\",\n\t\"StructFieldOmitEmptyInt\",\n\t\"StructEndInt\",\n\t\"StructEndOmitEmptyInt\",\n\t\"StructFieldUint\",\n\t\"StructFieldOmitEmptyUint\",\n\t\"StructEndUint\",\n\t\"StructEndOmitEmptyUint\",\n\t\"StructFieldFloat32\",\n\t\"StructFieldOmitEmptyFloat32\",\n\t\"StructEndFloat32\",\n\t\"StructEndOmitEmptyFloat32\",\n\t\"StructFieldFloat64\",\n\t\"StructFieldOmitEmptyFloat64\",\n\t\"StructEndFloat64\",\n\t\"StructEndOmitEmptyFloat64\",\n\t\"StructFieldBool\",\n\t\"StructFieldOmitEmptyBool\",\n\t\"StructEndBool\",\n\t\"StructEndOmitEmptyBool\",\n\t\"StructFieldString\",\n\t\"StructFieldOmitEmptyString\",\n\t\"StructEndString\",\n\t\"StructEndOmitEmptyString\",\n\t\"StructFieldBytes\",\n\t\"StructFieldOmitEmptyBytes\",\n\t\"StructEndBytes\",\n\t\"StructEndOmitEmptyBytes\",\n\t\"StructFieldNumber\",\n\t\"StructFieldOmitEmptyNumber\",\n\t\"StructEndNumber\",\n\t\"StructEndOmitEmptyNumber\",\n\t\"StructFieldArray\",\n\t\"StructFieldOmitEmptyArray\",\n\t\"StructEndArray\",\n\t\"StructEndOmitEmptyArray\",\n\t\"StructFieldMap\",\n\t\"StructFieldOmitEmptyMap\",\n\t\"StructEndMap\",\n\t\"StructEndOmitEmptyMap\",\n\t\"StructFieldSlice\",\n\t\"StructFieldOmitEmptySlice\",\n\t\"StructEndSlice\",\n\t\"StructEndOmitEmptySlice\",\n\t\"StructFieldStruct\",\n\t\"StructFieldOmitEmptyStruct\",\n\t\"StructEndStruct\",\n\t\"StructEndOmitEmptyStruct\",\n\t\"StructFieldMarshalJSON\",\n\t\"StructFieldOmitEmptyMarshalJSON\",\n\t\"StructEndMarshalJSON\",\n\t\"StructEndOmitEmptyMarshalJSON\",\n\t\"StructFieldMarshalText\",\n\t\"StructFieldOmitEmptyMarshalText\",\n\t\"StructEndMarshalText\",\n\t\"StructEndOmitEmptyMarshalText\",\n\t\"StructFieldIntString\",\n\t\"StructFieldOmitEmptyIntString\",\n\t\"StructEndIntString\",\n\t\"StructEndOmitEmptyIntString\",\n\t\"StructFieldUintString\",\n\t\"StructFieldOmitEmptyUintString\",\n\t\"StructEndUintString\",\n\t\"StructEndOmitEmptyUintString\",\n\t\"StructFieldFloat32String\",\n\t\"StructFieldOmitEmptyFloat32String\",\n\t\"StructEndFloat32String\",\n\t\"StructEndOmitEmptyFloat32String\",\n\t\"StructFieldFloat64String\",\n\t\"StructFieldOmitEmptyFloat64String\",\n\t\"StructEndFloat64String\",\n\t\"StructEndOmitEmptyFloat64String\",\n\t\"StructFieldBoolString\",\n\t\"StructFieldOmitEmptyBoolString\",\n\t\"StructEndBoolString\",\n\t\"StructEndOmitEmptyBoolString\",\n\t\"StructFieldStringString\",\n\t\"StructFieldOmitEmptyStringString\",\n\t\"StructEndStringString\",\n\t\"StructEndOmitEmptyStringString\",\n\t\"StructFieldNumberString\",\n\t\"StructFieldOmitEmptyNumberString\",\n\t\"StructEndNumberString\",\n\t\"StructEndOmitEmptyNumberString\",\n\t\"StructFieldIntPtr\",\n\t\"StructFieldOmitEmptyIntPtr\",\n\t\"StructEndIntPtr\",\n\t\"StructEndOmitEmptyIntPtr\",\n\t\"StructFieldUintPtr\",\n\t\"StructFieldOmitEmptyUintPtr\",\n\t\"StructEndUintPtr\",\n\t\"StructEndOmitEmptyUintPtr\",\n\t\"StructFieldFloat32Ptr\",\n\t\"StructFieldOmitEmptyFloat32Ptr\",\n\t\"StructEndFloat32Ptr\",\n\t\"StructEndOmitEmptyFloat32Ptr\",\n\t\"StructFieldFloat64Ptr\",\n\t\"StructFieldOmitEmptyFloat64Ptr\",\n\t\"StructEndFloat64Ptr\",\n\t\"StructEndOmitEmptyFloat64Ptr\",\n\t\"StructFieldBoolPtr\",\n\t\"StructFieldOmitEmptyBoolPtr\",\n\t\"StructEndBoolPtr\",\n\t\"StructEndOmitEmptyBoolPtr\",\n\t\"StructFieldStringPtr\",\n\t\"StructFieldOmitEmptyStringPtr\",\n\t\"StructEndStringPtr\",\n\t\"StructEndOmitEmptyStringPtr\",\n\t\"StructFieldBytesPtr\",\n\t\"StructFieldOmitEmptyBytesPtr\",\n\t\"StructEndBytesPtr\",\n\t\"StructEndOmitEmptyBytesPtr\",\n\t\"StructFieldNumberPtr\",\n\t\"StructFieldOmitEmptyNumberPtr\",\n\t\"StructEndNumberPtr\",\n\t\"StructEndOmitEmptyNumberPtr\",\n\t\"StructFieldArrayPtr\",\n\t\"StructFieldOmitEmptyArrayPtr\",\n\t\"StructEndArrayPtr\",\n\t\"StructEndOmitEmptyArrayPtr\",\n\t\"StructFieldMapPtr\",\n\t\"StructFieldOmitEmptyMapPtr\",\n\t\"StructEndMapPtr\",\n\t\"StructEndOmitEmptyMapPtr\",\n\t\"StructFieldSlicePtr\",\n\t\"StructFieldOmitEmptySlicePtr\",\n\t\"StructEndSlicePtr\",\n\t\"StructEndOmitEmptySlicePtr\",\n\t\"StructFieldMarshalJSONPtr\",\n\t\"StructFieldOmitEmptyMarshalJSONPtr\",\n\t\"StructEndMarshalJSONPtr\",\n\t\"StructEndOmitEmptyMarshalJSONPtr\",\n\t\"StructFieldMarshalTextPtr\",\n\t\"StructFieldOmitEmptyMarshalTextPtr\",\n\t\"StructEndMarshalTextPtr\",\n\t\"StructEndOmitEmptyMarshalTextPtr\",\n\t\"StructFieldInterfacePtr\",\n\t\"StructFieldOmitEmptyInterfacePtr\",\n\t\"StructEndInterfacePtr\",\n\t\"StructEndOmitEmptyInterfacePtr\",\n\t\"StructFieldIntPtrString\",\n\t\"StructFieldOmitEmptyIntPtrString\",\n\t\"StructEndIntPtrString\",\n\t\"StructEndOmitEmptyIntPtrString\",\n\t\"StructFieldUintPtrString\",\n\t\"StructFieldOmitEmptyUintPtrString\",\n\t\"StructEndUintPtrString\",\n\t\"StructEndOmitEmptyUintPtrString\",\n\t\"StructFieldFloat32PtrString\",\n\t\"StructFieldOmitEmptyFloat32PtrString\",\n\t\"StructEndFloat32PtrString\",\n\t\"StructEndOmitEmptyFloat32PtrString\",\n\t\"StructFieldFloat64PtrString\",\n\t\"StructFieldOmitEmptyFloat64PtrString\",\n\t\"StructEndFloat64PtrString\",\n\t\"StructEndOmitEmptyFloat64PtrString\",\n\t\"StructFieldBoolPtrString\",\n\t\"StructFieldOmitEmptyBoolPtrString\",\n\t\"StructEndBoolPtrString\",\n\t\"StructEndOmitEmptyBoolPtrString\",\n\t\"StructFieldStringPtrString\",\n\t\"StructFieldOmitEmptyStringPtrString\",\n\t\"StructEndStringPtrString\",\n\t\"StructEndOmitEmptyStringPtrString\",\n\t\"StructFieldNumberPtrString\",\n\t\"StructFieldOmitEmptyNumberPtrString\",\n\t\"StructEndNumberPtrString\",\n\t\"StructEndOmitEmptyNumberPtrString\",\n\t\"StructField\",\n\t\"StructFieldOmitEmpty\",\n\t\"StructEnd\",\n\t\"StructEndOmitEmpty\",\n}\n\ntype OpType uint16\n\nconst (\n\tOpEnd                                    OpType = 0\n\tOpInterface                              OpType = 1\n\tOpPtr                                    OpType = 2\n\tOpSliceElem                              OpType = 3\n\tOpSliceEnd                               OpType = 4\n\tOpArrayElem                              OpType = 5\n\tOpArrayEnd                               OpType = 6\n\tOpMapKey                                 OpType = 7\n\tOpMapValue                               OpType = 8\n\tOpMapEnd                                 OpType = 9\n\tOpRecursive                              OpType = 10\n\tOpRecursivePtr                           OpType = 11\n\tOpRecursiveEnd                           OpType = 12\n\tOpInterfaceEnd                           OpType = 13\n\tOpInt                                    OpType = 14\n\tOpUint                                   OpType = 15\n\tOpFloat32                                OpType = 16\n\tOpFloat64                                OpType = 17\n\tOpBool                                   OpType = 18\n\tOpString                                 OpType = 19\n\tOpBytes                                  OpType = 20\n\tOpNumber                                 OpType = 21\n\tOpArray                                  OpType = 22\n\tOpMap                                    OpType = 23\n\tOpSlice                                  OpType = 24\n\tOpStruct                                 OpType = 25\n\tOpMarshalJSON                            OpType = 26\n\tOpMarshalText                            OpType = 27\n\tOpIntString                              OpType = 28\n\tOpUintString                             OpType = 29\n\tOpFloat32String                          OpType = 30\n\tOpFloat64String                          OpType = 31\n\tOpBoolString                             OpType = 32\n\tOpStringString                           OpType = 33\n\tOpNumberString                           OpType = 34\n\tOpIntPtr                                 OpType = 35\n\tOpUintPtr                                OpType = 36\n\tOpFloat32Ptr                             OpType = 37\n\tOpFloat64Ptr                             OpType = 38\n\tOpBoolPtr                                OpType = 39\n\tOpStringPtr                              OpType = 40\n\tOpBytesPtr                               OpType = 41\n\tOpNumberPtr                              OpType = 42\n\tOpArrayPtr                               OpType = 43\n\tOpMapPtr                                 OpType = 44\n\tOpSlicePtr                               OpType = 45\n\tOpMarshalJSONPtr                         OpType = 46\n\tOpMarshalTextPtr                         OpType = 47\n\tOpInterfacePtr                           OpType = 48\n\tOpIntPtrString                           OpType = 49\n\tOpUintPtrString                          OpType = 50\n\tOpFloat32PtrString                       OpType = 51\n\tOpFloat64PtrString                       OpType = 52\n\tOpBoolPtrString                          OpType = 53\n\tOpStringPtrString                        OpType = 54\n\tOpNumberPtrString                        OpType = 55\n\tOpStructHeadInt                          OpType = 56\n\tOpStructHeadOmitEmptyInt                 OpType = 57\n\tOpStructPtrHeadInt                       OpType = 58\n\tOpStructPtrHeadOmitEmptyInt              OpType = 59\n\tOpStructHeadUint                         OpType = 60\n\tOpStructHeadOmitEmptyUint                OpType = 61\n\tOpStructPtrHeadUint                      OpType = 62\n\tOpStructPtrHeadOmitEmptyUint             OpType = 63\n\tOpStructHeadFloat32                      OpType = 64\n\tOpStructHeadOmitEmptyFloat32             OpType = 65\n\tOpStructPtrHeadFloat32                   OpType = 66\n\tOpStructPtrHeadOmitEmptyFloat32          OpType = 67\n\tOpStructHeadFloat64                      OpType = 68\n\tOpStructHeadOmitEmptyFloat64             OpType = 69\n\tOpStructPtrHeadFloat64                   OpType = 70\n\tOpStructPtrHeadOmitEmptyFloat64          OpType = 71\n\tOpStructHeadBool                         OpType = 72\n\tOpStructHeadOmitEmptyBool                OpType = 73\n\tOpStructPtrHeadBool                      OpType = 74\n\tOpStructPtrHeadOmitEmptyBool             OpType = 75\n\tOpStructHeadString                       OpType = 76\n\tOpStructHeadOmitEmptyString              OpType = 77\n\tOpStructPtrHeadString                    OpType = 78\n\tOpStructPtrHeadOmitEmptyString           OpType = 79\n\tOpStructHeadBytes                        OpType = 80\n\tOpStructHeadOmitEmptyBytes               OpType = 81\n\tOpStructPtrHeadBytes                     OpType = 82\n\tOpStructPtrHeadOmitEmptyBytes            OpType = 83\n\tOpStructHeadNumber                       OpType = 84\n\tOpStructHeadOmitEmptyNumber              OpType = 85\n\tOpStructPtrHeadNumber                    OpType = 86\n\tOpStructPtrHeadOmitEmptyNumber           OpType = 87\n\tOpStructHeadArray                        OpType = 88\n\tOpStructHeadOmitEmptyArray               OpType = 89\n\tOpStructPtrHeadArray                     OpType = 90\n\tOpStructPtrHeadOmitEmptyArray            OpType = 91\n\tOpStructHeadMap                          OpType = 92\n\tOpStructHeadOmitEmptyMap                 OpType = 93\n\tOpStructPtrHeadMap                       OpType = 94\n\tOpStructPtrHeadOmitEmptyMap              OpType = 95\n\tOpStructHeadSlice                        OpType = 96\n\tOpStructHeadOmitEmptySlice               OpType = 97\n\tOpStructPtrHeadSlice                     OpType = 98\n\tOpStructPtrHeadOmitEmptySlice            OpType = 99\n\tOpStructHeadStruct                       OpType = 100\n\tOpStructHeadOmitEmptyStruct              OpType = 101\n\tOpStructPtrHeadStruct                    OpType = 102\n\tOpStructPtrHeadOmitEmptyStruct           OpType = 103\n\tOpStructHeadMarshalJSON                  OpType = 104\n\tOpStructHeadOmitEmptyMarshalJSON         OpType = 105\n\tOpStructPtrHeadMarshalJSON               OpType = 106\n\tOpStructPtrHeadOmitEmptyMarshalJSON      OpType = 107\n\tOpStructHeadMarshalText                  OpType = 108\n\tOpStructHeadOmitEmptyMarshalText         OpType = 109\n\tOpStructPtrHeadMarshalText               OpType = 110\n\tOpStructPtrHeadOmitEmptyMarshalText      OpType = 111\n\tOpStructHeadIntString                    OpType = 112\n\tOpStructHeadOmitEmptyIntString           OpType = 113\n\tOpStructPtrHeadIntString                 OpType = 114\n\tOpStructPtrHeadOmitEmptyIntString        OpType = 115\n\tOpStructHeadUintString                   OpType = 116\n\tOpStructHeadOmitEmptyUintString          OpType = 117\n\tOpStructPtrHeadUintString                OpType = 118\n\tOpStructPtrHeadOmitEmptyUintString       OpType = 119\n\tOpStructHeadFloat32String                OpType = 120\n\tOpStructHeadOmitEmptyFloat32String       OpType = 121\n\tOpStructPtrHeadFloat32String             OpType = 122\n\tOpStructPtrHeadOmitEmptyFloat32String    OpType = 123\n\tOpStructHeadFloat64String                OpType = 124\n\tOpStructHeadOmitEmptyFloat64String       OpType = 125\n\tOpStructPtrHeadFloat64String             OpType = 126\n\tOpStructPtrHeadOmitEmptyFloat64String    OpType = 127\n\tOpStructHeadBoolString                   OpType = 128\n\tOpStructHeadOmitEmptyBoolString          OpType = 129\n\tOpStructPtrHeadBoolString                OpType = 130\n\tOpStructPtrHeadOmitEmptyBoolString       OpType = 131\n\tOpStructHeadStringString                 OpType = 132\n\tOpStructHeadOmitEmptyStringString        OpType = 133\n\tOpStructPtrHeadStringString              OpType = 134\n\tOpStructPtrHeadOmitEmptyStringString     OpType = 135\n\tOpStructHeadNumberString                 OpType = 136\n\tOpStructHeadOmitEmptyNumberString        OpType = 137\n\tOpStructPtrHeadNumberString              OpType = 138\n\tOpStructPtrHeadOmitEmptyNumberString     OpType = 139\n\tOpStructHeadIntPtr                       OpType = 140\n\tOpStructHeadOmitEmptyIntPtr              OpType = 141\n\tOpStructPtrHeadIntPtr                    OpType = 142\n\tOpStructPtrHeadOmitEmptyIntPtr           OpType = 143\n\tOpStructHeadUintPtr                      OpType = 144\n\tOpStructHeadOmitEmptyUintPtr             OpType = 145\n\tOpStructPtrHeadUintPtr                   OpType = 146\n\tOpStructPtrHeadOmitEmptyUintPtr          OpType = 147\n\tOpStructHeadFloat32Ptr                   OpType = 148\n\tOpStructHeadOmitEmptyFloat32Ptr          OpType = 149\n\tOpStructPtrHeadFloat32Ptr                OpType = 150\n\tOpStructPtrHeadOmitEmptyFloat32Ptr       OpType = 151\n\tOpStructHeadFloat64Ptr                   OpType = 152\n\tOpStructHeadOmitEmptyFloat64Ptr          OpType = 153\n\tOpStructPtrHeadFloat64Ptr                OpType = 154\n\tOpStructPtrHeadOmitEmptyFloat64Ptr       OpType = 155\n\tOpStructHeadBoolPtr                      OpType = 156\n\tOpStructHeadOmitEmptyBoolPtr             OpType = 157\n\tOpStructPtrHeadBoolPtr                   OpType = 158\n\tOpStructPtrHeadOmitEmptyBoolPtr          OpType = 159\n\tOpStructHeadStringPtr                    OpType = 160\n\tOpStructHeadOmitEmptyStringPtr           OpType = 161\n\tOpStructPtrHeadStringPtr                 OpType = 162\n\tOpStructPtrHeadOmitEmptyStringPtr        OpType = 163\n\tOpStructHeadBytesPtr                     OpType = 164\n\tOpStructHeadOmitEmptyBytesPtr            OpType = 165\n\tOpStructPtrHeadBytesPtr                  OpType = 166\n\tOpStructPtrHeadOmitEmptyBytesPtr         OpType = 167\n\tOpStructHeadNumberPtr                    OpType = 168\n\tOpStructHeadOmitEmptyNumberPtr           OpType = 169\n\tOpStructPtrHeadNumberPtr                 OpType = 170\n\tOpStructPtrHeadOmitEmptyNumberPtr        OpType = 171\n\tOpStructHeadArrayPtr                     OpType = 172\n\tOpStructHeadOmitEmptyArrayPtr            OpType = 173\n\tOpStructPtrHeadArrayPtr                  OpType = 174\n\tOpStructPtrHeadOmitEmptyArrayPtr         OpType = 175\n\tOpStructHeadMapPtr                       OpType = 176\n\tOpStructHeadOmitEmptyMapPtr              OpType = 177\n\tOpStructPtrHeadMapPtr                    OpType = 178\n\tOpStructPtrHeadOmitEmptyMapPtr           OpType = 179\n\tOpStructHeadSlicePtr                     OpType = 180\n\tOpStructHeadOmitEmptySlicePtr            OpType = 181\n\tOpStructPtrHeadSlicePtr                  OpType = 182\n\tOpStructPtrHeadOmitEmptySlicePtr         OpType = 183\n\tOpStructHeadMarshalJSONPtr               OpType = 184\n\tOpStructHeadOmitEmptyMarshalJSONPtr      OpType = 185\n\tOpStructPtrHeadMarshalJSONPtr            OpType = 186\n\tOpStructPtrHeadOmitEmptyMarshalJSONPtr   OpType = 187\n\tOpStructHeadMarshalTextPtr               OpType = 188\n\tOpStructHeadOmitEmptyMarshalTextPtr      OpType = 189\n\tOpStructPtrHeadMarshalTextPtr            OpType = 190\n\tOpStructPtrHeadOmitEmptyMarshalTextPtr   OpType = 191\n\tOpStructHeadInterfacePtr                 OpType = 192\n\tOpStructHeadOmitEmptyInterfacePtr        OpType = 193\n\tOpStructPtrHeadInterfacePtr              OpType = 194\n\tOpStructPtrHeadOmitEmptyInterfacePtr     OpType = 195\n\tOpStructHeadIntPtrString                 OpType = 196\n\tOpStructHeadOmitEmptyIntPtrString        OpType = 197\n\tOpStructPtrHeadIntPtrString              OpType = 198\n\tOpStructPtrHeadOmitEmptyIntPtrString     OpType = 199\n\tOpStructHeadUintPtrString                OpType = 200\n\tOpStructHeadOmitEmptyUintPtrString       OpType = 201\n\tOpStructPtrHeadUintPtrString             OpType = 202\n\tOpStructPtrHeadOmitEmptyUintPtrString    OpType = 203\n\tOpStructHeadFloat32PtrString             OpType = 204\n\tOpStructHeadOmitEmptyFloat32PtrString    OpType = 205\n\tOpStructPtrHeadFloat32PtrString          OpType = 206\n\tOpStructPtrHeadOmitEmptyFloat32PtrString OpType = 207\n\tOpStructHeadFloat64PtrString             OpType = 208\n\tOpStructHeadOmitEmptyFloat64PtrString    OpType = 209\n\tOpStructPtrHeadFloat64PtrString          OpType = 210\n\tOpStructPtrHeadOmitEmptyFloat64PtrString OpType = 211\n\tOpStructHeadBoolPtrString                OpType = 212\n\tOpStructHeadOmitEmptyBoolPtrString       OpType = 213\n\tOpStructPtrHeadBoolPtrString             OpType = 214\n\tOpStructPtrHeadOmitEmptyBoolPtrString    OpType = 215\n\tOpStructHeadStringPtrString              OpType = 216\n\tOpStructHeadOmitEmptyStringPtrString     OpType = 217\n\tOpStructPtrHeadStringPtrString           OpType = 218\n\tOpStructPtrHeadOmitEmptyStringPtrString  OpType = 219\n\tOpStructHeadNumberPtrString              OpType = 220\n\tOpStructHeadOmitEmptyNumberPtrString     OpType = 221\n\tOpStructPtrHeadNumberPtrString           OpType = 222\n\tOpStructPtrHeadOmitEmptyNumberPtrString  OpType = 223\n\tOpStructHead                             OpType = 224\n\tOpStructHeadOmitEmpty                    OpType = 225\n\tOpStructPtrHead                          OpType = 226\n\tOpStructPtrHeadOmitEmpty                 OpType = 227\n\tOpStructFieldInt                         OpType = 228\n\tOpStructFieldOmitEmptyInt                OpType = 229\n\tOpStructEndInt                           OpType = 230\n\tOpStructEndOmitEmptyInt                  OpType = 231\n\tOpStructFieldUint                        OpType = 232\n\tOpStructFieldOmitEmptyUint               OpType = 233\n\tOpStructEndUint                          OpType = 234\n\tOpStructEndOmitEmptyUint                 OpType = 235\n\tOpStructFieldFloat32                     OpType = 236\n\tOpStructFieldOmitEmptyFloat32            OpType = 237\n\tOpStructEndFloat32                       OpType = 238\n\tOpStructEndOmitEmptyFloat32              OpType = 239\n\tOpStructFieldFloat64                     OpType = 240\n\tOpStructFieldOmitEmptyFloat64            OpType = 241\n\tOpStructEndFloat64                       OpType = 242\n\tOpStructEndOmitEmptyFloat64              OpType = 243\n\tOpStructFieldBool                        OpType = 244\n\tOpStructFieldOmitEmptyBool               OpType = 245\n\tOpStructEndBool                          OpType = 246\n\tOpStructEndOmitEmptyBool                 OpType = 247\n\tOpStructFieldString                      OpType = 248\n\tOpStructFieldOmitEmptyString             OpType = 249\n\tOpStructEndString                        OpType = 250\n\tOpStructEndOmitEmptyString               OpType = 251\n\tOpStructFieldBytes                       OpType = 252\n\tOpStructFieldOmitEmptyBytes              OpType = 253\n\tOpStructEndBytes                         OpType = 254\n\tOpStructEndOmitEmptyBytes                OpType = 255\n\tOpStructFieldNumber                      OpType = 256\n\tOpStructFieldOmitEmptyNumber             OpType = 257\n\tOpStructEndNumber                        OpType = 258\n\tOpStructEndOmitEmptyNumber               OpType = 259\n\tOpStructFieldArray                       OpType = 260\n\tOpStructFieldOmitEmptyArray              OpType = 261\n\tOpStructEndArray                         OpType = 262\n\tOpStructEndOmitEmptyArray                OpType = 263\n\tOpStructFieldMap                         OpType = 264\n\tOpStructFieldOmitEmptyMap                OpType = 265\n\tOpStructEndMap                           OpType = 266\n\tOpStructEndOmitEmptyMap                  OpType = 267\n\tOpStructFieldSlice                       OpType = 268\n\tOpStructFieldOmitEmptySlice              OpType = 269\n\tOpStructEndSlice                         OpType = 270\n\tOpStructEndOmitEmptySlice                OpType = 271\n\tOpStructFieldStruct                      OpType = 272\n\tOpStructFieldOmitEmptyStruct             OpType = 273\n\tOpStructEndStruct                        OpType = 274\n\tOpStructEndOmitEmptyStruct               OpType = 275\n\tOpStructFieldMarshalJSON                 OpType = 276\n\tOpStructFieldOmitEmptyMarshalJSON        OpType = 277\n\tOpStructEndMarshalJSON                   OpType = 278\n\tOpStructEndOmitEmptyMarshalJSON          OpType = 279\n\tOpStructFieldMarshalText                 OpType = 280\n\tOpStructFieldOmitEmptyMarshalText        OpType = 281\n\tOpStructEndMarshalText                   OpType = 282\n\tOpStructEndOmitEmptyMarshalText          OpType = 283\n\tOpStructFieldIntString                   OpType = 284\n\tOpStructFieldOmitEmptyIntString          OpType = 285\n\tOpStructEndIntString                     OpType = 286\n\tOpStructEndOmitEmptyIntString            OpType = 287\n\tOpStructFieldUintString                  OpType = 288\n\tOpStructFieldOmitEmptyUintString         OpType = 289\n\tOpStructEndUintString                    OpType = 290\n\tOpStructEndOmitEmptyUintString           OpType = 291\n\tOpStructFieldFloat32String               OpType = 292\n\tOpStructFieldOmitEmptyFloat32String      OpType = 293\n\tOpStructEndFloat32String                 OpType = 294\n\tOpStructEndOmitEmptyFloat32String        OpType = 295\n\tOpStructFieldFloat64String               OpType = 296\n\tOpStructFieldOmitEmptyFloat64String      OpType = 297\n\tOpStructEndFloat64String                 OpType = 298\n\tOpStructEndOmitEmptyFloat64String        OpType = 299\n\tOpStructFieldBoolString                  OpType = 300\n\tOpStructFieldOmitEmptyBoolString         OpType = 301\n\tOpStructEndBoolString                    OpType = 302\n\tOpStructEndOmitEmptyBoolString           OpType = 303\n\tOpStructFieldStringString                OpType = 304\n\tOpStructFieldOmitEmptyStringString       OpType = 305\n\tOpStructEndStringString                  OpType = 306\n\tOpStructEndOmitEmptyStringString         OpType = 307\n\tOpStructFieldNumberString                OpType = 308\n\tOpStructFieldOmitEmptyNumberString       OpType = 309\n\tOpStructEndNumberString                  OpType = 310\n\tOpStructEndOmitEmptyNumberString         OpType = 311\n\tOpStructFieldIntPtr                      OpType = 312\n\tOpStructFieldOmitEmptyIntPtr             OpType = 313\n\tOpStructEndIntPtr                        OpType = 314\n\tOpStructEndOmitEmptyIntPtr               OpType = 315\n\tOpStructFieldUintPtr                     OpType = 316\n\tOpStructFieldOmitEmptyUintPtr            OpType = 317\n\tOpStructEndUintPtr                       OpType = 318\n\tOpStructEndOmitEmptyUintPtr              OpType = 319\n\tOpStructFieldFloat32Ptr                  OpType = 320\n\tOpStructFieldOmitEmptyFloat32Ptr         OpType = 321\n\tOpStructEndFloat32Ptr                    OpType = 322\n\tOpStructEndOmitEmptyFloat32Ptr           OpType = 323\n\tOpStructFieldFloat64Ptr                  OpType = 324\n\tOpStructFieldOmitEmptyFloat64Ptr         OpType = 325\n\tOpStructEndFloat64Ptr                    OpType = 326\n\tOpStructEndOmitEmptyFloat64Ptr           OpType = 327\n\tOpStructFieldBoolPtr                     OpType = 328\n\tOpStructFieldOmitEmptyBoolPtr            OpType = 329\n\tOpStructEndBoolPtr                       OpType = 330\n\tOpStructEndOmitEmptyBoolPtr              OpType = 331\n\tOpStructFieldStringPtr                   OpType = 332\n\tOpStructFieldOmitEmptyStringPtr          OpType = 333\n\tOpStructEndStringPtr                     OpType = 334\n\tOpStructEndOmitEmptyStringPtr            OpType = 335\n\tOpStructFieldBytesPtr                    OpType = 336\n\tOpStructFieldOmitEmptyBytesPtr           OpType = 337\n\tOpStructEndBytesPtr                      OpType = 338\n\tOpStructEndOmitEmptyBytesPtr             OpType = 339\n\tOpStructFieldNumberPtr                   OpType = 340\n\tOpStructFieldOmitEmptyNumberPtr          OpType = 341\n\tOpStructEndNumberPtr                     OpType = 342\n\tOpStructEndOmitEmptyNumberPtr            OpType = 343\n\tOpStructFieldArrayPtr                    OpType = 344\n\tOpStructFieldOmitEmptyArrayPtr           OpType = 345\n\tOpStructEndArrayPtr                      OpType = 346\n\tOpStructEndOmitEmptyArrayPtr             OpType = 347\n\tOpStructFieldMapPtr                      OpType = 348\n\tOpStructFieldOmitEmptyMapPtr             OpType = 349\n\tOpStructEndMapPtr                        OpType = 350\n\tOpStructEndOmitEmptyMapPtr               OpType = 351\n\tOpStructFieldSlicePtr                    OpType = 352\n\tOpStructFieldOmitEmptySlicePtr           OpType = 353\n\tOpStructEndSlicePtr                      OpType = 354\n\tOpStructEndOmitEmptySlicePtr             OpType = 355\n\tOpStructFieldMarshalJSONPtr              OpType = 356\n\tOpStructFieldOmitEmptyMarshalJSONPtr     OpType = 357\n\tOpStructEndMarshalJSONPtr                OpType = 358\n\tOpStructEndOmitEmptyMarshalJSONPtr       OpType = 359\n\tOpStructFieldMarshalTextPtr              OpType = 360\n\tOpStructFieldOmitEmptyMarshalTextPtr     OpType = 361\n\tOpStructEndMarshalTextPtr                OpType = 362\n\tOpStructEndOmitEmptyMarshalTextPtr       OpType = 363\n\tOpStructFieldInterfacePtr                OpType = 364\n\tOpStructFieldOmitEmptyInterfacePtr       OpType = 365\n\tOpStructEndInterfacePtr                  OpType = 366\n\tOpStructEndOmitEmptyInterfacePtr         OpType = 367\n\tOpStructFieldIntPtrString                OpType = 368\n\tOpStructFieldOmitEmptyIntPtrString       OpType = 369\n\tOpStructEndIntPtrString                  OpType = 370\n\tOpStructEndOmitEmptyIntPtrString         OpType = 371\n\tOpStructFieldUintPtrString               OpType = 372\n\tOpStructFieldOmitEmptyUintPtrString      OpType = 373\n\tOpStructEndUintPtrString                 OpType = 374\n\tOpStructEndOmitEmptyUintPtrString        OpType = 375\n\tOpStructFieldFloat32PtrString            OpType = 376\n\tOpStructFieldOmitEmptyFloat32PtrString   OpType = 377\n\tOpStructEndFloat32PtrString              OpType = 378\n\tOpStructEndOmitEmptyFloat32PtrString     OpType = 379\n\tOpStructFieldFloat64PtrString            OpType = 380\n\tOpStructFieldOmitEmptyFloat64PtrString   OpType = 381\n\tOpStructEndFloat64PtrString              OpType = 382\n\tOpStructEndOmitEmptyFloat64PtrString     OpType = 383\n\tOpStructFieldBoolPtrString               OpType = 384\n\tOpStructFieldOmitEmptyBoolPtrString      OpType = 385\n\tOpStructEndBoolPtrString                 OpType = 386\n\tOpStructEndOmitEmptyBoolPtrString        OpType = 387\n\tOpStructFieldStringPtrString             OpType = 388\n\tOpStructFieldOmitEmptyStringPtrString    OpType = 389\n\tOpStructEndStringPtrString               OpType = 390\n\tOpStructEndOmitEmptyStringPtrString      OpType = 391\n\tOpStructFieldNumberPtrString             OpType = 392\n\tOpStructFieldOmitEmptyNumberPtrString    OpType = 393\n\tOpStructEndNumberPtrString               OpType = 394\n\tOpStructEndOmitEmptyNumberPtrString      OpType = 395\n\tOpStructField                            OpType = 396\n\tOpStructFieldOmitEmpty                   OpType = 397\n\tOpStructEnd                              OpType = 398\n\tOpStructEndOmitEmpty                     OpType = 399\n)\n\nfunc (t OpType) String() string {\n\tif int(t) >= 400 {\n\t\treturn \"\"\n\t}\n\treturn opTypeStrings[int(t)]\n}\n\nfunc (t OpType) CodeType() CodeType {\n\tif strings.Contains(t.String(), \"Struct\") {\n\t\tif strings.Contains(t.String(), \"End\") {\n\t\t\treturn CodeStructEnd\n\t\t}\n\t\treturn CodeStructField\n\t}\n\tswitch t {\n\tcase OpArray, OpArrayPtr:\n\t\treturn CodeArrayHead\n\tcase OpArrayElem:\n\t\treturn CodeArrayElem\n\tcase OpSlice, OpSlicePtr:\n\t\treturn CodeSliceHead\n\tcase OpSliceElem:\n\t\treturn CodeSliceElem\n\tcase OpMap, OpMapPtr:\n\t\treturn CodeMapHead\n\tcase OpMapKey:\n\t\treturn CodeMapKey\n\tcase OpMapValue:\n\t\treturn CodeMapValue\n\tcase OpMapEnd:\n\t\treturn CodeMapEnd\n\t}\n\n\treturn CodeOp\n}\n\nfunc (t OpType) HeadToPtrHead() OpType {\n\tif strings.Index(t.String(), \"PtrHead\") > 0 {\n\t\treturn t\n\t}\n\n\tidx := strings.Index(t.String(), \"Head\")\n\tif idx == -1 {\n\t\treturn t\n\t}\n\tsuffix := \"PtrHead\" + t.String()[idx+len(\"Head\"):]\n\n\tconst toPtrOffset = 2\n\tif strings.Contains(OpType(int(t)+toPtrOffset).String(), suffix) {\n\t\treturn OpType(int(t) + toPtrOffset)\n\t}\n\treturn t\n}\n\nfunc (t OpType) HeadToOmitEmptyHead() OpType {\n\tconst toOmitEmptyOffset = 1\n\tif strings.Contains(OpType(int(t)+toOmitEmptyOffset).String(), \"OmitEmpty\") {\n\t\treturn OpType(int(t) + toOmitEmptyOffset)\n\t}\n\n\treturn t\n}\n\nfunc (t OpType) PtrHeadToHead() OpType {\n\tidx := strings.Index(t.String(), \"PtrHead\")\n\tif idx == -1 {\n\t\treturn t\n\t}\n\tsuffix := t.String()[idx+len(\"Ptr\"):]\n\n\tconst toPtrOffset = 2\n\tif strings.Contains(OpType(int(t)-toPtrOffset).String(), suffix) {\n\t\treturn OpType(int(t) - toPtrOffset)\n\t}\n\treturn t\n}\n\nfunc (t OpType) FieldToEnd() OpType {\n\tidx := strings.Index(t.String(), \"Field\")\n\tif idx == -1 {\n\t\treturn t\n\t}\n\tsuffix := t.String()[idx+len(\"Field\"):]\n\tif suffix == \"\" || suffix == \"OmitEmpty\" {\n\t\treturn t\n\t}\n\tconst toEndOffset = 2\n\tif strings.Contains(OpType(int(t)+toEndOffset).String(), \"End\"+suffix) {\n\t\treturn OpType(int(t) + toEndOffset)\n\t}\n\treturn t\n}\n\nfunc (t OpType) FieldToOmitEmptyField() OpType {\n\tconst toOmitEmptyOffset = 1\n\tif strings.Contains(OpType(int(t)+toOmitEmptyOffset).String(), \"OmitEmpty\") {\n\t\treturn OpType(int(t) + toOmitEmptyOffset)\n\t}\n\treturn t\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/query.go",
    "content": "package encoder\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\nvar (\n\tMarshal   func(interface{}) ([]byte, error)\n\tUnmarshal func([]byte, interface{}) error\n)\n\ntype FieldQuery struct {\n\tName   string\n\tFields []*FieldQuery\n\thash   string\n}\n\nfunc (q *FieldQuery) Hash() string {\n\tif q.hash != \"\" {\n\t\treturn q.hash\n\t}\n\tb, _ := Marshal(q)\n\tq.hash = string(b)\n\treturn q.hash\n}\n\nfunc (q *FieldQuery) MarshalJSON() ([]byte, error) {\n\tif q.Name != \"\" {\n\t\tif len(q.Fields) > 0 {\n\t\t\treturn Marshal(map[string][]*FieldQuery{q.Name: q.Fields})\n\t\t}\n\t\treturn Marshal(q.Name)\n\t}\n\treturn Marshal(q.Fields)\n}\n\nfunc (q *FieldQuery) QueryString() (FieldQueryString, error) {\n\tb, err := Marshal(q)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn FieldQueryString(b), nil\n}\n\ntype FieldQueryString string\n\nfunc (s FieldQueryString) Build() (*FieldQuery, error) {\n\tvar query interface{}\n\tif err := Unmarshal([]byte(s), &query); err != nil {\n\t\treturn nil, err\n\t}\n\treturn s.build(reflect.ValueOf(query))\n}\n\nfunc (s FieldQueryString) build(v reflect.Value) (*FieldQuery, error) {\n\tswitch v.Type().Kind() {\n\tcase reflect.String:\n\t\treturn s.buildString(v)\n\tcase reflect.Map:\n\t\treturn s.buildMap(v)\n\tcase reflect.Slice:\n\t\treturn s.buildSlice(v)\n\tcase reflect.Interface:\n\t\treturn s.build(reflect.ValueOf(v.Interface()))\n\t}\n\treturn nil, fmt.Errorf(\"failed to build field query\")\n}\n\nfunc (s FieldQueryString) buildString(v reflect.Value) (*FieldQuery, error) {\n\tb := []byte(v.String())\n\tswitch b[0] {\n\tcase '[', '{':\n\t\tvar query interface{}\n\t\tif err := Unmarshal(b, &query); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif str, ok := query.(string); ok {\n\t\t\treturn &FieldQuery{Name: str}, nil\n\t\t}\n\t\treturn s.build(reflect.ValueOf(query))\n\t}\n\treturn &FieldQuery{Name: string(b)}, nil\n}\n\nfunc (s FieldQueryString) buildSlice(v reflect.Value) (*FieldQuery, error) {\n\tfields := make([]*FieldQuery, 0, v.Len())\n\tfor i := 0; i < v.Len(); i++ {\n\t\tdef, err := s.build(v.Index(i))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfields = append(fields, def)\n\t}\n\treturn &FieldQuery{Fields: fields}, nil\n}\n\nfunc (s FieldQueryString) buildMap(v reflect.Value) (*FieldQuery, error) {\n\tkeys := v.MapKeys()\n\tif len(keys) != 1 {\n\t\treturn nil, fmt.Errorf(\"failed to build field query object\")\n\t}\n\tkey := keys[0]\n\tif key.Type().Kind() != reflect.String {\n\t\treturn nil, fmt.Errorf(\"failed to build field query. invalid object key type\")\n\t}\n\tname := key.String()\n\tdef, err := s.build(v.MapIndex(key))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &FieldQuery{\n\t\tName:   name,\n\t\tFields: def.Fields,\n\t}, nil\n}\n\ntype queryKey struct{}\n\nfunc FieldQueryFromContext(ctx context.Context) *FieldQuery {\n\tquery := ctx.Value(queryKey{})\n\tif query == nil {\n\t\treturn nil\n\t}\n\tq, ok := query.(*FieldQuery)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn q\n}\n\nfunc SetFieldQueryToContext(ctx context.Context, query *FieldQuery) context.Context {\n\treturn context.WithValue(ctx, queryKey{}, query)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/string.go",
    "content": "package encoder\n\nimport (\n\t\"math/bits\"\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nconst (\n\tlsb = 0x0101010101010101\n\tmsb = 0x8080808080808080\n)\n\nvar hex = \"0123456789abcdef\"\n\n//nolint:govet\nfunc stringToUint64Slice(s string) []uint64 {\n\treturn *(*[]uint64)(unsafe.Pointer(&reflect.SliceHeader{\n\t\tData: ((*reflect.StringHeader)(unsafe.Pointer(&s))).Data,\n\t\tLen:  len(s) / 8,\n\t\tCap:  len(s) / 8,\n\t}))\n}\n\nfunc AppendString(ctx *RuntimeContext, buf []byte, s string) []byte {\n\tif ctx.Option.Flag&HTMLEscapeOption != 0 {\n\t\tif ctx.Option.Flag&NormalizeUTF8Option != 0 {\n\t\t\treturn appendNormalizedHTMLString(buf, s)\n\t\t}\n\t\treturn appendHTMLString(buf, s)\n\t}\n\tif ctx.Option.Flag&NormalizeUTF8Option != 0 {\n\t\treturn appendNormalizedString(buf, s)\n\t}\n\treturn appendString(buf, s)\n}\n\nfunc appendNormalizedHTMLString(buf []byte, s string) []byte {\n\tvalLen := len(s)\n\tif valLen == 0 {\n\t\treturn append(buf, `\"\"`...)\n\t}\n\tbuf = append(buf, '\"')\n\tvar (\n\t\ti, j int\n\t)\n\tif valLen >= 8 {\n\t\tchunks := stringToUint64Slice(s)\n\t\tfor _, n := range chunks {\n\t\t\t// combine masks before checking for the MSB of each byte. We include\n\t\t\t// `n` in the mask to check whether any of the *input* byte MSBs were\n\t\t\t// set (i.e. the byte was outside the ASCII range).\n\t\t\tmask := n | (n - (lsb * 0x20)) |\n\t\t\t\t((n ^ (lsb * '\"')) - lsb) |\n\t\t\t\t((n ^ (lsb * '\\\\')) - lsb) |\n\t\t\t\t((n ^ (lsb * '<')) - lsb) |\n\t\t\t\t((n ^ (lsb * '>')) - lsb) |\n\t\t\t\t((n ^ (lsb * '&')) - lsb)\n\t\t\tif (mask & msb) != 0 {\n\t\t\t\tj = bits.TrailingZeros64(mask&msb) / 8\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\tfor i := len(chunks) * 8; i < valLen; i++ {\n\t\t\tif needEscapeHTMLNormalizeUTF8[s[i]] {\n\t\t\t\tj = i\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\t// no found any escape characters.\n\t\treturn append(append(buf, s...), '\"')\n\t}\nESCAPE_END:\n\tfor j < valLen {\n\t\tc := s[j]\n\n\t\tif !needEscapeHTMLNormalizeUTF8[c] {\n\t\t\t// fast path: most of the time, printable ascii characters are used\n\t\t\tj++\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch c {\n\t\tcase '\\\\', '\"':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', c)\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\n':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'n')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\r':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'r')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\t':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 't')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '<', '>', '&':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u00`...)\n\t\t\tbuf = append(buf, hex[c>>4], hex[c&0xF])\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, // 0x00-0x0F\n\t\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F: // 0x10-0x1F\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u00`...)\n\t\t\tbuf = append(buf, hex[c>>4], hex[c&0xF])\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\t\t}\n\t\tstate, size := decodeRuneInString(s[j:])\n\t\tswitch state {\n\t\tcase runeErrorState:\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\ufffd`...)\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\t\t\t// U+2028 is LINE SEPARATOR.\n\t\t\t// U+2029 is PARAGRAPH SEPARATOR.\n\t\t\t// They are both technically valid characters in JSON strings,\n\t\t\t// but don't work in JSONP, which has to be evaluated as JavaScript,\n\t\t\t// and can lead to security holes there. It is valid JSON to\n\t\t\t// escape them, so we do so unconditionally.\n\t\t\t// See http://timelessrepo.com/json-isnt-a-javascript-subset for discussion.\n\t\tcase lineSepState:\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u2028`...)\n\t\t\ti = j + 3\n\t\t\tj = j + 3\n\t\t\tcontinue\n\t\tcase paragraphSepState:\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u2029`...)\n\t\t\ti = j + 3\n\t\t\tj = j + 3\n\t\t\tcontinue\n\t\t}\n\t\tj += size\n\t}\n\n\treturn append(append(buf, s[i:]...), '\"')\n}\n\nfunc appendHTMLString(buf []byte, s string) []byte {\n\tvalLen := len(s)\n\tif valLen == 0 {\n\t\treturn append(buf, `\"\"`...)\n\t}\n\tbuf = append(buf, '\"')\n\tvar (\n\t\ti, j int\n\t)\n\tif valLen >= 8 {\n\t\tchunks := stringToUint64Slice(s)\n\t\tfor _, n := range chunks {\n\t\t\t// combine masks before checking for the MSB of each byte. We include\n\t\t\t// `n` in the mask to check whether any of the *input* byte MSBs were\n\t\t\t// set (i.e. the byte was outside the ASCII range).\n\t\t\tmask := n | (n - (lsb * 0x20)) |\n\t\t\t\t((n ^ (lsb * '\"')) - lsb) |\n\t\t\t\t((n ^ (lsb * '\\\\')) - lsb) |\n\t\t\t\t((n ^ (lsb * '<')) - lsb) |\n\t\t\t\t((n ^ (lsb * '>')) - lsb) |\n\t\t\t\t((n ^ (lsb * '&')) - lsb)\n\t\t\tif (mask & msb) != 0 {\n\t\t\t\tj = bits.TrailingZeros64(mask&msb) / 8\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\tfor i := len(chunks) * 8; i < valLen; i++ {\n\t\t\tif needEscapeHTML[s[i]] {\n\t\t\t\tj = i\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\t// no found any escape characters.\n\t\treturn append(append(buf, s...), '\"')\n\t}\nESCAPE_END:\n\tfor j < valLen {\n\t\tc := s[j]\n\n\t\tif !needEscapeHTML[c] {\n\t\t\t// fast path: most of the time, printable ascii characters are used\n\t\t\tj++\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch c {\n\t\tcase '\\\\', '\"':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', c)\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\n':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'n')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\r':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'r')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\t':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 't')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '<', '>', '&':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u00`...)\n\t\t\tbuf = append(buf, hex[c>>4], hex[c&0xF])\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, // 0x00-0x0F\n\t\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F: // 0x10-0x1F\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u00`...)\n\t\t\tbuf = append(buf, hex[c>>4], hex[c&0xF])\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\t\t}\n\t\tj++\n\t}\n\n\treturn append(append(buf, s[i:]...), '\"')\n}\n\nfunc appendNormalizedString(buf []byte, s string) []byte {\n\tvalLen := len(s)\n\tif valLen == 0 {\n\t\treturn append(buf, `\"\"`...)\n\t}\n\tbuf = append(buf, '\"')\n\tvar (\n\t\ti, j int\n\t)\n\tif valLen >= 8 {\n\t\tchunks := stringToUint64Slice(s)\n\t\tfor _, n := range chunks {\n\t\t\t// combine masks before checking for the MSB of each byte. We include\n\t\t\t// `n` in the mask to check whether any of the *input* byte MSBs were\n\t\t\t// set (i.e. the byte was outside the ASCII range).\n\t\t\tmask := n | (n - (lsb * 0x20)) |\n\t\t\t\t((n ^ (lsb * '\"')) - lsb) |\n\t\t\t\t((n ^ (lsb * '\\\\')) - lsb)\n\t\t\tif (mask & msb) != 0 {\n\t\t\t\tj = bits.TrailingZeros64(mask&msb) / 8\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\tvalLen := len(s)\n\t\tfor i := len(chunks) * 8; i < valLen; i++ {\n\t\t\tif needEscapeNormalizeUTF8[s[i]] {\n\t\t\t\tj = i\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\treturn append(append(buf, s...), '\"')\n\t}\nESCAPE_END:\n\tfor j < valLen {\n\t\tc := s[j]\n\n\t\tif !needEscapeNormalizeUTF8[c] {\n\t\t\t// fast path: most of the time, printable ascii characters are used\n\t\t\tj++\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch c {\n\t\tcase '\\\\', '\"':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', c)\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\n':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'n')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\r':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'r')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\t':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 't')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, // 0x00-0x0F\n\t\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F: // 0x10-0x1F\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u00`...)\n\t\t\tbuf = append(buf, hex[c>>4], hex[c&0xF])\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\t\t}\n\n\t\tstate, size := decodeRuneInString(s[j:])\n\t\tswitch state {\n\t\tcase runeErrorState:\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\ufffd`...)\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\t\t\t// U+2028 is LINE SEPARATOR.\n\t\t\t// U+2029 is PARAGRAPH SEPARATOR.\n\t\t\t// They are both technically valid characters in JSON strings,\n\t\t\t// but don't work in JSONP, which has to be evaluated as JavaScript,\n\t\t\t// and can lead to security holes there. It is valid JSON to\n\t\t\t// escape them, so we do so unconditionally.\n\t\t\t// See http://timelessrepo.com/json-isnt-a-javascript-subset for discussion.\n\t\tcase lineSepState:\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u2028`...)\n\t\t\ti = j + 3\n\t\t\tj = j + 3\n\t\t\tcontinue\n\t\tcase paragraphSepState:\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u2029`...)\n\t\t\ti = j + 3\n\t\t\tj = j + 3\n\t\t\tcontinue\n\t\t}\n\t\tj += size\n\t}\n\n\treturn append(append(buf, s[i:]...), '\"')\n}\n\nfunc appendString(buf []byte, s string) []byte {\n\tvalLen := len(s)\n\tif valLen == 0 {\n\t\treturn append(buf, `\"\"`...)\n\t}\n\tbuf = append(buf, '\"')\n\tvar (\n\t\ti, j int\n\t)\n\tif valLen >= 8 {\n\t\tchunks := stringToUint64Slice(s)\n\t\tfor _, n := range chunks {\n\t\t\t// combine masks before checking for the MSB of each byte. We include\n\t\t\t// `n` in the mask to check whether any of the *input* byte MSBs were\n\t\t\t// set (i.e. the byte was outside the ASCII range).\n\t\t\tmask := n | (n - (lsb * 0x20)) |\n\t\t\t\t((n ^ (lsb * '\"')) - lsb) |\n\t\t\t\t((n ^ (lsb * '\\\\')) - lsb)\n\t\t\tif (mask & msb) != 0 {\n\t\t\t\tj = bits.TrailingZeros64(mask&msb) / 8\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\tvalLen := len(s)\n\t\tfor i := len(chunks) * 8; i < valLen; i++ {\n\t\t\tif needEscape[s[i]] {\n\t\t\t\tj = i\n\t\t\t\tgoto ESCAPE_END\n\t\t\t}\n\t\t}\n\t\treturn append(append(buf, s...), '\"')\n\t}\nESCAPE_END:\n\tfor j < valLen {\n\t\tc := s[j]\n\n\t\tif !needEscape[c] {\n\t\t\t// fast path: most of the time, printable ascii characters are used\n\t\t\tj++\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch c {\n\t\tcase '\\\\', '\"':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', c)\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\n':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'n')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\r':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 'r')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase '\\t':\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, '\\\\', 't')\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\n\t\tcase 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, // 0x00-0x0F\n\t\t\t0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F: // 0x10-0x1F\n\t\t\tbuf = append(buf, s[i:j]...)\n\t\t\tbuf = append(buf, `\\u00`...)\n\t\t\tbuf = append(buf, hex[c>>4], hex[c&0xF])\n\t\t\ti = j + 1\n\t\t\tj = j + 1\n\t\t\tcontinue\n\t\t}\n\t\tj++\n\t}\n\n\treturn append(append(buf, s[i:]...), '\"')\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/string_table.go",
    "content": "package encoder\n\nvar needEscapeHTMLNormalizeUTF8 = [256]bool{\n\t'\"':  true,\n\t'&':  true,\n\t'<':  true,\n\t'>':  true,\n\t'\\\\': true,\n\t0x00: true,\n\t0x01: true,\n\t0x02: true,\n\t0x03: true,\n\t0x04: true,\n\t0x05: true,\n\t0x06: true,\n\t0x07: true,\n\t0x08: true,\n\t0x09: true,\n\t0x0a: true,\n\t0x0b: true,\n\t0x0c: true,\n\t0x0d: true,\n\t0x0e: true,\n\t0x0f: true,\n\t0x10: true,\n\t0x11: true,\n\t0x12: true,\n\t0x13: true,\n\t0x14: true,\n\t0x15: true,\n\t0x16: true,\n\t0x17: true,\n\t0x18: true,\n\t0x19: true,\n\t0x1a: true,\n\t0x1b: true,\n\t0x1c: true,\n\t0x1d: true,\n\t0x1e: true,\n\t0x1f: true,\n\t/* 0x20 - 0x7f */\n\t0x80: true,\n\t0x81: true,\n\t0x82: true,\n\t0x83: true,\n\t0x84: true,\n\t0x85: true,\n\t0x86: true,\n\t0x87: true,\n\t0x88: true,\n\t0x89: true,\n\t0x8a: true,\n\t0x8b: true,\n\t0x8c: true,\n\t0x8d: true,\n\t0x8e: true,\n\t0x8f: true,\n\t0x90: true,\n\t0x91: true,\n\t0x92: true,\n\t0x93: true,\n\t0x94: true,\n\t0x95: true,\n\t0x96: true,\n\t0x97: true,\n\t0x98: true,\n\t0x99: true,\n\t0x9a: true,\n\t0x9b: true,\n\t0x9c: true,\n\t0x9d: true,\n\t0x9e: true,\n\t0x9f: true,\n\t0xa0: true,\n\t0xa1: true,\n\t0xa2: true,\n\t0xa3: true,\n\t0xa4: true,\n\t0xa5: true,\n\t0xa6: true,\n\t0xa7: true,\n\t0xa8: true,\n\t0xa9: true,\n\t0xaa: true,\n\t0xab: true,\n\t0xac: true,\n\t0xad: true,\n\t0xae: true,\n\t0xaf: true,\n\t0xb0: true,\n\t0xb1: true,\n\t0xb2: true,\n\t0xb3: true,\n\t0xb4: true,\n\t0xb5: true,\n\t0xb6: true,\n\t0xb7: true,\n\t0xb8: true,\n\t0xb9: true,\n\t0xba: true,\n\t0xbb: true,\n\t0xbc: true,\n\t0xbd: true,\n\t0xbe: true,\n\t0xbf: true,\n\t0xc0: true,\n\t0xc1: true,\n\t0xc2: true,\n\t0xc3: true,\n\t0xc4: true,\n\t0xc5: true,\n\t0xc6: true,\n\t0xc7: true,\n\t0xc8: true,\n\t0xc9: true,\n\t0xca: true,\n\t0xcb: true,\n\t0xcc: true,\n\t0xcd: true,\n\t0xce: true,\n\t0xcf: true,\n\t0xd0: true,\n\t0xd1: true,\n\t0xd2: true,\n\t0xd3: true,\n\t0xd4: true,\n\t0xd5: true,\n\t0xd6: true,\n\t0xd7: true,\n\t0xd8: true,\n\t0xd9: true,\n\t0xda: true,\n\t0xdb: true,\n\t0xdc: true,\n\t0xdd: true,\n\t0xde: true,\n\t0xdf: true,\n\t0xe0: true,\n\t0xe1: true,\n\t0xe2: true,\n\t0xe3: true,\n\t0xe4: true,\n\t0xe5: true,\n\t0xe6: true,\n\t0xe7: true,\n\t0xe8: true,\n\t0xe9: true,\n\t0xea: true,\n\t0xeb: true,\n\t0xec: true,\n\t0xed: true,\n\t0xee: true,\n\t0xef: true,\n\t0xf0: true,\n\t0xf1: true,\n\t0xf2: true,\n\t0xf3: true,\n\t0xf4: true,\n\t0xf5: true,\n\t0xf6: true,\n\t0xf7: true,\n\t0xf8: true,\n\t0xf9: true,\n\t0xfa: true,\n\t0xfb: true,\n\t0xfc: true,\n\t0xfd: true,\n\t0xfe: true,\n\t0xff: true,\n}\n\nvar needEscapeNormalizeUTF8 = [256]bool{\n\t'\"':  true,\n\t'\\\\': true,\n\t0x00: true,\n\t0x01: true,\n\t0x02: true,\n\t0x03: true,\n\t0x04: true,\n\t0x05: true,\n\t0x06: true,\n\t0x07: true,\n\t0x08: true,\n\t0x09: true,\n\t0x0a: true,\n\t0x0b: true,\n\t0x0c: true,\n\t0x0d: true,\n\t0x0e: true,\n\t0x0f: true,\n\t0x10: true,\n\t0x11: true,\n\t0x12: true,\n\t0x13: true,\n\t0x14: true,\n\t0x15: true,\n\t0x16: true,\n\t0x17: true,\n\t0x18: true,\n\t0x19: true,\n\t0x1a: true,\n\t0x1b: true,\n\t0x1c: true,\n\t0x1d: true,\n\t0x1e: true,\n\t0x1f: true,\n\t/* 0x20 - 0x7f */\n\t0x80: true,\n\t0x81: true,\n\t0x82: true,\n\t0x83: true,\n\t0x84: true,\n\t0x85: true,\n\t0x86: true,\n\t0x87: true,\n\t0x88: true,\n\t0x89: true,\n\t0x8a: true,\n\t0x8b: true,\n\t0x8c: true,\n\t0x8d: true,\n\t0x8e: true,\n\t0x8f: true,\n\t0x90: true,\n\t0x91: true,\n\t0x92: true,\n\t0x93: true,\n\t0x94: true,\n\t0x95: true,\n\t0x96: true,\n\t0x97: true,\n\t0x98: true,\n\t0x99: true,\n\t0x9a: true,\n\t0x9b: true,\n\t0x9c: true,\n\t0x9d: true,\n\t0x9e: true,\n\t0x9f: true,\n\t0xa0: true,\n\t0xa1: true,\n\t0xa2: true,\n\t0xa3: true,\n\t0xa4: true,\n\t0xa5: true,\n\t0xa6: true,\n\t0xa7: true,\n\t0xa8: true,\n\t0xa9: true,\n\t0xaa: true,\n\t0xab: true,\n\t0xac: true,\n\t0xad: true,\n\t0xae: true,\n\t0xaf: true,\n\t0xb0: true,\n\t0xb1: true,\n\t0xb2: true,\n\t0xb3: true,\n\t0xb4: true,\n\t0xb5: true,\n\t0xb6: true,\n\t0xb7: true,\n\t0xb8: true,\n\t0xb9: true,\n\t0xba: true,\n\t0xbb: true,\n\t0xbc: true,\n\t0xbd: true,\n\t0xbe: true,\n\t0xbf: true,\n\t0xc0: true,\n\t0xc1: true,\n\t0xc2: true,\n\t0xc3: true,\n\t0xc4: true,\n\t0xc5: true,\n\t0xc6: true,\n\t0xc7: true,\n\t0xc8: true,\n\t0xc9: true,\n\t0xca: true,\n\t0xcb: true,\n\t0xcc: true,\n\t0xcd: true,\n\t0xce: true,\n\t0xcf: true,\n\t0xd0: true,\n\t0xd1: true,\n\t0xd2: true,\n\t0xd3: true,\n\t0xd4: true,\n\t0xd5: true,\n\t0xd6: true,\n\t0xd7: true,\n\t0xd8: true,\n\t0xd9: true,\n\t0xda: true,\n\t0xdb: true,\n\t0xdc: true,\n\t0xdd: true,\n\t0xde: true,\n\t0xdf: true,\n\t0xe0: true,\n\t0xe1: true,\n\t0xe2: true,\n\t0xe3: true,\n\t0xe4: true,\n\t0xe5: true,\n\t0xe6: true,\n\t0xe7: true,\n\t0xe8: true,\n\t0xe9: true,\n\t0xea: true,\n\t0xeb: true,\n\t0xec: true,\n\t0xed: true,\n\t0xee: true,\n\t0xef: true,\n\t0xf0: true,\n\t0xf1: true,\n\t0xf2: true,\n\t0xf3: true,\n\t0xf4: true,\n\t0xf5: true,\n\t0xf6: true,\n\t0xf7: true,\n\t0xf8: true,\n\t0xf9: true,\n\t0xfa: true,\n\t0xfb: true,\n\t0xfc: true,\n\t0xfd: true,\n\t0xfe: true,\n\t0xff: true,\n}\n\nvar needEscapeHTML = [256]bool{\n\t'\"':  true,\n\t'&':  true,\n\t'<':  true,\n\t'>':  true,\n\t'\\\\': true,\n\t0x00: true,\n\t0x01: true,\n\t0x02: true,\n\t0x03: true,\n\t0x04: true,\n\t0x05: true,\n\t0x06: true,\n\t0x07: true,\n\t0x08: true,\n\t0x09: true,\n\t0x0a: true,\n\t0x0b: true,\n\t0x0c: true,\n\t0x0d: true,\n\t0x0e: true,\n\t0x0f: true,\n\t0x10: true,\n\t0x11: true,\n\t0x12: true,\n\t0x13: true,\n\t0x14: true,\n\t0x15: true,\n\t0x16: true,\n\t0x17: true,\n\t0x18: true,\n\t0x19: true,\n\t0x1a: true,\n\t0x1b: true,\n\t0x1c: true,\n\t0x1d: true,\n\t0x1e: true,\n\t0x1f: true,\n\t/* 0x20 - 0xff */\n}\n\nvar needEscape = [256]bool{\n\t'\"':  true,\n\t'\\\\': true,\n\t0x00: true,\n\t0x01: true,\n\t0x02: true,\n\t0x03: true,\n\t0x04: true,\n\t0x05: true,\n\t0x06: true,\n\t0x07: true,\n\t0x08: true,\n\t0x09: true,\n\t0x0a: true,\n\t0x0b: true,\n\t0x0c: true,\n\t0x0d: true,\n\t0x0e: true,\n\t0x0f: true,\n\t0x10: true,\n\t0x11: true,\n\t0x12: true,\n\t0x13: true,\n\t0x14: true,\n\t0x15: true,\n\t0x16: true,\n\t0x17: true,\n\t0x18: true,\n\t0x19: true,\n\t0x1a: true,\n\t0x1b: true,\n\t0x1c: true,\n\t0x1d: true,\n\t0x1e: true,\n\t0x1f: true,\n\t/* 0x20 - 0xff */\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm/debug_vm.go",
    "content": "package vm\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\nfunc DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\tdefer func() {\n\t\tvar code *encoder.Opcode\n\t\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\t\tcode = codeSet.EscapeKeyCode\n\t\t} else {\n\t\t\tcode = codeSet.NoescapeKeyCode\n\t\t}\n\t\tif wc := ctx.Option.DebugDOTOut; wc != nil {\n\t\t\t_, _ = io.WriteString(wc, code.DumpDOT())\n\t\t\twc.Close()\n\t\t\tctx.Option.DebugDOTOut = nil\n\t\t}\n\n\t\tif err := recover(); err != nil {\n\t\t\tw := ctx.Option.DebugOut\n\t\t\tfmt.Fprintln(w, \"=============[DEBUG]===============\")\n\t\t\tfmt.Fprintln(w, \"* [TYPE]\")\n\t\t\tfmt.Fprintln(w, codeSet.Type)\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [ALL OPCODE]\")\n\t\t\tfmt.Fprintln(w, code.Dump())\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [CONTEXT]\")\n\t\t\tfmt.Fprintf(w, \"%+v\\n\", ctx)\n\t\t\tfmt.Fprintln(w, \"===================================\")\n\t\t\tpanic(err)\n\t\t}\n\t}()\n\n\treturn Run(ctx, b, codeSet)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm/hack.go",
    "content": "package vm\n\nimport (\n\t// HACK: compile order\n\t// `vm`, `vm_indent`, `vm_color`, `vm_color_indent` packages uses a lot of memory to compile,\n\t// so forcibly make dependencies and avoid compiling in concurrent.\n\t// dependency order: vm => vm_indent => vm_color => vm_color_indent\n\t_ \"github.com/goccy/go-json/internal/encoder/vm_indent\"\n)\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm/util.go",
    "content": "package vm\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nconst uintptrSize = 4 << (^uintptr(0) >> 63)\n\nvar (\n\tappendInt           = encoder.AppendInt\n\tappendUint          = encoder.AppendUint\n\tappendFloat32       = encoder.AppendFloat32\n\tappendFloat64       = encoder.AppendFloat64\n\tappendString        = encoder.AppendString\n\tappendByteSlice     = encoder.AppendByteSlice\n\tappendNumber        = encoder.AppendNumber\n\terrUnsupportedValue = encoder.ErrUnsupportedValue\n\terrUnsupportedFloat = encoder.ErrUnsupportedFloat\n\tmapiterinit         = encoder.MapIterInit\n\tmapiterkey          = encoder.MapIterKey\n\tmapitervalue        = encoder.MapIterValue\n\tmapiternext         = encoder.MapIterNext\n\tmaplen              = encoder.MapLen\n)\n\ntype emptyInterface struct {\n\ttyp *runtime.Type\n\tptr unsafe.Pointer\n}\n\ntype nonEmptyInterface struct {\n\titab *struct {\n\t\tityp *runtime.Type // static interface type\n\t\ttyp  *runtime.Type // dynamic concrete type\n\t\t// unused fields...\n\t}\n\tptr unsafe.Pointer\n}\n\nfunc errUnimplementedOp(op encoder.OpType) error {\n\treturn fmt.Errorf(\"encoder: opcode %s has not been implemented\", op)\n}\n\nfunc load(base uintptr, idx uint32) uintptr {\n\taddr := base + uintptr(idx)\n\treturn **(**uintptr)(unsafe.Pointer(&addr))\n}\n\nfunc store(base uintptr, idx uint32, p uintptr) {\n\taddr := base + uintptr(idx)\n\t**(**uintptr)(unsafe.Pointer(&addr)) = p\n}\n\nfunc loadNPtr(base uintptr, idx uint32, ptrNum uint8) uintptr {\n\taddr := base + uintptr(idx)\n\tp := **(**uintptr)(unsafe.Pointer(&addr))\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUint64(p uintptr, bitSize uint8) uint64 {\n\tswitch bitSize {\n\tcase 8:\n\t\treturn (uint64)(**(**uint8)(unsafe.Pointer(&p)))\n\tcase 16:\n\t\treturn (uint64)(**(**uint16)(unsafe.Pointer(&p)))\n\tcase 32:\n\t\treturn (uint64)(**(**uint32)(unsafe.Pointer(&p)))\n\tcase 64:\n\t\treturn **(**uint64)(unsafe.Pointer(&p))\n\t}\n\treturn 0\n}\nfunc ptrToFloat32(p uintptr) float32            { return **(**float32)(unsafe.Pointer(&p)) }\nfunc ptrToFloat64(p uintptr) float64            { return **(**float64)(unsafe.Pointer(&p)) }\nfunc ptrToBool(p uintptr) bool                  { return **(**bool)(unsafe.Pointer(&p)) }\nfunc ptrToBytes(p uintptr) []byte               { return **(**[]byte)(unsafe.Pointer(&p)) }\nfunc ptrToNumber(p uintptr) json.Number         { return **(**json.Number)(unsafe.Pointer(&p)) }\nfunc ptrToString(p uintptr) string              { return **(**string)(unsafe.Pointer(&p)) }\nfunc ptrToSlice(p uintptr) *runtime.SliceHeader { return *(**runtime.SliceHeader)(unsafe.Pointer(&p)) }\nfunc ptrToPtr(p uintptr) uintptr {\n\treturn uintptr(**(**unsafe.Pointer)(unsafe.Pointer(&p)))\n}\nfunc ptrToNPtr(p uintptr, ptrNum uint8) uintptr {\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUnsafePtr(p uintptr) unsafe.Pointer {\n\treturn *(*unsafe.Pointer)(unsafe.Pointer(&p))\n}\nfunc ptrToInterface(code *encoder.Opcode, p uintptr) interface{} {\n\treturn *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: code.Type,\n\t\tptr: *(*unsafe.Pointer)(unsafe.Pointer(&p)),\n\t}))\n}\n\nfunc appendBool(_ *encoder.RuntimeContext, b []byte, v bool) []byte {\n\tif v {\n\t\treturn append(b, \"true\"...)\n\t}\n\treturn append(b, \"false\"...)\n}\n\nfunc appendNull(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, \"null\"...)\n}\n\nfunc appendComma(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, ',')\n}\n\nfunc appendNullComma(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, \"null,\"...)\n}\n\nfunc appendColon(_ *encoder.RuntimeContext, b []byte) []byte {\n\tlast := len(b) - 1\n\tb[last] = ':'\n\treturn b\n}\n\nfunc appendMapKeyValue(_ *encoder.RuntimeContext, _ *encoder.Opcode, b, key, value []byte) []byte {\n\tb = append(b, key...)\n\tb[len(b)-1] = ':'\n\treturn append(b, value...)\n}\n\nfunc appendMapEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\tb[len(b)-1] = '}'\n\tb = append(b, ',')\n\treturn b\n}\n\nfunc appendMarshalJSON(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\treturn encoder.AppendMarshalJSON(ctx, code, b, v)\n}\n\nfunc appendMarshalText(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\treturn encoder.AppendMarshalText(ctx, code, b, v)\n}\n\nfunc appendArrayHead(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\treturn append(b, '[')\n}\n\nfunc appendArrayEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tb[last] = ']'\n\treturn append(b, ',')\n}\n\nfunc appendEmptyArray(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '[', ']', ',')\n}\n\nfunc appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{', '}', ',')\n}\n\nfunc appendObjectEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tb[last] = '}'\n\treturn append(b, ',')\n}\n\nfunc appendStructHead(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{')\n}\n\nfunc appendStructKey(_ *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\treturn append(b, code.Key...)\n}\n\nfunc appendStructEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\treturn append(b, '}', ',')\n}\n\nfunc appendStructEndSkipLast(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tif b[last] == ',' {\n\t\tb[last] = '}'\n\t\treturn appendComma(ctx, b)\n\t}\n\treturn appendStructEnd(ctx, code, b)\n}\n\nfunc restoreIndent(_ *encoder.RuntimeContext, _ *encoder.Opcode, _ uintptr)               {}\nfunc storeIndent(_ uintptr, _ *encoder.Opcode, _ uintptr)                                 {}\nfunc appendMapKeyIndent(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte    { return b }\nfunc appendArrayElemIndent(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte { return b }\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm/vm.go",
    "content": "// Code generated by internal/cmd/generator. DO NOT EDIT!\npackage vm\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nfunc Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\trecursiveLevel := 0\n\tptrOffset := uintptr(0)\n\tctxptr := ctx.Ptr()\n\tvar code *encoder.Opcode\n\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\tcode = codeSet.EscapeKeyCode\n\t} else {\n\t\tcode = codeSet.NoescapeKeyCode\n\t}\n\n\tfor {\n\t\tswitch code.Op {\n\t\tdefault:\n\t\t\treturn nil, errUnimplementedOp(code.Op)\n\t\tcase encoder.OpPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\tcase encoder.OpIntPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInt:\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpUint:\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpIntString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat32Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat32:\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat64Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat64:\n\t\t\tv := ptrToFloat64(load(ctxptr, code.Idx))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStringPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpString:\n\t\t\tb = appendString(ctx, b, ptrToString(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBoolPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBool:\n\t\t\tb = appendBool(ctx, b, ptrToBool(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBytesPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBytes:\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpNumberPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpNumber:\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(load(ctxptr, code.Idx)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpInterfacePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInterface:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\tif p == seen {\n\t\t\t\t\t\treturn nil, errUnsupportedValue(code, p)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.SeenPtr = append(ctx.SeenPtr, p)\n\t\t\tvar (\n\t\t\t\ttyp      *runtime.Type\n\t\t\t\tifacePtr unsafe.Pointer\n\t\t\t)\n\t\t\tup := ptrToUnsafePtr(p)\n\t\t\tif code.Flags&encoder.NonEmptyInterfaceFlags != 0 {\n\t\t\t\tiface := (*nonEmptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\tif iface.itab != nil {\n\t\t\t\t\ttyp = iface.itab.typ\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tiface := (*emptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\ttyp = iface.typ\n\t\t\t}\n\t\t\tif ifacePtr == nil {\n\t\t\t\tisDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)\n\t\t\t\tif !isDirectedNil {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\tcode = code.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, up)\n\t\t\tifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\ttotalLength := uintptr(code.Length) + 3\n\t\t\tnextTotalLength := uintptr(ifaceCodeSet.CodeLength) + 3\n\n\t\t\tvar c *encoder.Opcode\n\t\t\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\t\t\tc = ifaceCodeSet.InterfaceEscapeKeyCode\n\t\t\t} else {\n\t\t\t\tc = ifaceCodeSet.InterfaceNoescapeKeyCode\n\t\t\t}\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += totalLength * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tctx.BaseIndent += code.Indent\n\n\t\t\tnewLen := offsetNum + totalLength + nextTotalLength\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tend := ifaceCodeSet.EndCode\n\t\t\tstore(ctxptr, c.Idx, uintptr(ifacePtr))\n\t\t\tstore(ctxptr, end.Idx, oldOffset)\n\t\t\tstore(ctxptr, end.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, end, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpInterfaceEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = append(b, `\"\"`...)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpSlicePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif p == 0 || slice.Data == nil {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\tstore(ctxptr, code.Length, uintptr(slice.Len))\n\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\tif slice.Len > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpSliceElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tlength := load(ctxptr, code.Length)\n\t\t\tidx++\n\t\t\tif idx < length {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tdata := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, data+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Length > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tidx++\n\t\t\tif idx < uintptr(code.Length) {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpMapPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tuptr := ptrToUnsafePtr(p)\n\t\t\tmlen := maplen(uptr)\n\t\t\tif mlen <= 0 {\n\t\t\t\tb = appendEmptyObject(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructHead(ctx, b)\n\t\t\tunorderedMap := (ctx.Option.Flag & encoder.UnorderedMapOption) != 0\n\t\t\tmapCtx := encoder.NewMapContext(mlen, unorderedMap)\n\t\t\tmapiterinit(code.Type, uptr, &mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Idx, uintptr(unsafe.Pointer(mapCtx)))\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, unsafe.Pointer(mapCtx))\n\t\t\tif unorderedMap {\n\t\t\t\tb = appendMapKeyIndent(ctx, code.Next, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\tmapCtx.First = len(b)\n\t\t\t}\n\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapKey:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tidx := mapCtx.Idx\n\t\t\tidx++\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tb = appendMapKeyIndent(ctx, code, b)\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tb = appendObjectEnd(ctx, code, b)\n\t\t\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Value = b[mapCtx.Start:len(b)]\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tcode = code.End\n\t\t\t\t}\n\t\t\t}\n\t\tcase encoder.OpMapValue:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tb = appendColon(ctx, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Key = b[mapCtx.Start:len(b)]\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t}\n\t\t\tvalue := mapitervalue(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(value))\n\t\t\tmapiternext(&mapCtx.Iter)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapEnd:\n\t\t\t// this operation only used by sorted map.\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tsort.Sort(mapCtx.Slice)\n\t\t\tbuf := mapCtx.Buf\n\t\t\tfor _, item := range mapCtx.Slice.Items {\n\t\t\t\tbuf = appendMapKeyValue(ctx, code, buf, item.Key, item.Value)\n\t\t\t}\n\t\t\tbuf = appendMapEnd(ctx, code, buf)\n\t\t\tb = b[:mapCtx.First]\n\t\t\tb = append(b, buf...)\n\t\t\tmapCtx.Buf = buf\n\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpRecursivePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpRecursive:\n\t\t\tptr := load(ctxptr, code.Idx)\n\t\t\tif ptr != 0 {\n\t\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\t\tif ptr == seen {\n\t\t\t\t\t\t\treturn nil, errUnsupportedValue(code, ptr)\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\tctx.SeenPtr = append(ctx.SeenPtr, ptr)\n\t\t\tc := code.Jmp.Code\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += code.Jmp.CurLen * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tindentDiffFromTop := c.Indent - 1\n\t\t\tctx.BaseIndent += code.Indent - indentDiffFromTop\n\n\t\t\tnewLen := offsetNum + code.Jmp.CurLen + code.Jmp.NextLen\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tstore(ctxptr, c.Idx, ptr)\n\t\t\tstore(ctxptr, c.End.Next.Idx, oldOffset)\n\t\t\tstore(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, c.End.Next, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpRecursiveEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpStructPtrHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif len(code.Key) > 0 {\n\t\t\t\tif (code.Flags&encoder.IsTaggedKeyFlags) != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\t}\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif p == 0 || (ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tu64 := ptrToUint64(p, code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p+uintptr(code.Offset)))))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadArray, encoder.OpStructPtrHeadSlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArray, encoder.OpStructHeadSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArray:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptySlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadArrayPtr, encoder.OpStructPtrHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArrayPtr, encoder.OpStructHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArrayPtr, encoder.OpStructPtrHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArrayPtr, encoder.OpStructHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tif maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructField:\n\t\t\tif code.Flags&encoder.IsTaggedKeyFlags != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t}\n\t\t\tp := load(ctxptr, code.Idx) + uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldArrayPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArrayPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlice:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlicePtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldMap:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 || maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldMapPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldStruct:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyStruct:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructEnd:\n\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytesPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpEnd:\n\t\t\tgoto END\n\t\t}\n\t}\nEND:\n\treturn b, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_color/debug_vm.go",
    "content": "package vm_color\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\nfunc DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\tvar code *encoder.Opcode\n\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\tcode = codeSet.EscapeKeyCode\n\t} else {\n\t\tcode = codeSet.NoescapeKeyCode\n\t}\n\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\tw := ctx.Option.DebugOut\n\t\t\tfmt.Fprintln(w, \"=============[DEBUG]===============\")\n\t\t\tfmt.Fprintln(w, \"* [TYPE]\")\n\t\t\tfmt.Fprintln(w, codeSet.Type)\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [ALL OPCODE]\")\n\t\t\tfmt.Fprintln(w, code.Dump())\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [CONTEXT]\")\n\t\t\tfmt.Fprintf(w, \"%+v\\n\", ctx)\n\t\t\tfmt.Fprintln(w, \"===================================\")\n\t\t\tpanic(err)\n\t\t}\n\t}()\n\n\treturn Run(ctx, b, codeSet)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_color/hack.go",
    "content": "package vm_color\n\nimport (\n\t// HACK: compile order\n\t// `vm`, `vm_indent`, `vm_color`, `vm_color_indent` packages uses a lot of memory to compile,\n\t// so forcibly make dependencies and avoid compiling in concurrent.\n\t// dependency order: vm => vm_indent => vm_color => vm_color_indent\n\t_ \"github.com/goccy/go-json/internal/encoder/vm_color_indent\"\n)\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_color/util.go",
    "content": "package vm_color\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nconst uintptrSize = 4 << (^uintptr(0) >> 63)\n\nvar (\n\terrUnsupportedValue = encoder.ErrUnsupportedValue\n\terrUnsupportedFloat = encoder.ErrUnsupportedFloat\n\tmapiterinit         = encoder.MapIterInit\n\tmapiterkey          = encoder.MapIterKey\n\tmapitervalue        = encoder.MapIterValue\n\tmapiternext         = encoder.MapIterNext\n\tmaplen              = encoder.MapLen\n)\n\ntype emptyInterface struct {\n\ttyp *runtime.Type\n\tptr unsafe.Pointer\n}\n\ntype nonEmptyInterface struct {\n\titab *struct {\n\t\tityp *runtime.Type // static interface type\n\t\ttyp  *runtime.Type // dynamic concrete type\n\t\t// unused fields...\n\t}\n\tptr unsafe.Pointer\n}\n\nfunc errUnimplementedOp(op encoder.OpType) error {\n\treturn fmt.Errorf(\"encoder: opcode %s has not been implemented\", op)\n}\n\nfunc load(base uintptr, idx uint32) uintptr {\n\taddr := base + uintptr(idx)\n\treturn **(**uintptr)(unsafe.Pointer(&addr))\n}\n\nfunc store(base uintptr, idx uint32, p uintptr) {\n\taddr := base + uintptr(idx)\n\t**(**uintptr)(unsafe.Pointer(&addr)) = p\n}\n\nfunc loadNPtr(base uintptr, idx uint32, ptrNum uint8) uintptr {\n\taddr := base + uintptr(idx)\n\tp := **(**uintptr)(unsafe.Pointer(&addr))\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUint64(p uintptr, bitSize uint8) uint64 {\n\tswitch bitSize {\n\tcase 8:\n\t\treturn (uint64)(**(**uint8)(unsafe.Pointer(&p)))\n\tcase 16:\n\t\treturn (uint64)(**(**uint16)(unsafe.Pointer(&p)))\n\tcase 32:\n\t\treturn (uint64)(**(**uint32)(unsafe.Pointer(&p)))\n\tcase 64:\n\t\treturn **(**uint64)(unsafe.Pointer(&p))\n\t}\n\treturn 0\n}\nfunc ptrToFloat32(p uintptr) float32            { return **(**float32)(unsafe.Pointer(&p)) }\nfunc ptrToFloat64(p uintptr) float64            { return **(**float64)(unsafe.Pointer(&p)) }\nfunc ptrToBool(p uintptr) bool                  { return **(**bool)(unsafe.Pointer(&p)) }\nfunc ptrToBytes(p uintptr) []byte               { return **(**[]byte)(unsafe.Pointer(&p)) }\nfunc ptrToNumber(p uintptr) json.Number         { return **(**json.Number)(unsafe.Pointer(&p)) }\nfunc ptrToString(p uintptr) string              { return **(**string)(unsafe.Pointer(&p)) }\nfunc ptrToSlice(p uintptr) *runtime.SliceHeader { return *(**runtime.SliceHeader)(unsafe.Pointer(&p)) }\nfunc ptrToPtr(p uintptr) uintptr {\n\treturn uintptr(**(**unsafe.Pointer)(unsafe.Pointer(&p)))\n}\nfunc ptrToNPtr(p uintptr, ptrNum uint8) uintptr {\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUnsafePtr(p uintptr) unsafe.Pointer {\n\treturn *(*unsafe.Pointer)(unsafe.Pointer(&p))\n}\nfunc ptrToInterface(code *encoder.Opcode, p uintptr) interface{} {\n\treturn *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: code.Type,\n\t\tptr: *(*unsafe.Pointer)(unsafe.Pointer(&p)),\n\t}))\n}\n\nfunc appendInt(ctx *encoder.RuntimeContext, b []byte, p uintptr, code *encoder.Opcode) []byte {\n\tformat := ctx.Option.ColorScheme.Int\n\tb = append(b, format.Header...)\n\tb = encoder.AppendInt(ctx, b, p, code)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendUint(ctx *encoder.RuntimeContext, b []byte, p uintptr, code *encoder.Opcode) []byte {\n\tformat := ctx.Option.ColorScheme.Uint\n\tb = append(b, format.Header...)\n\tb = encoder.AppendUint(ctx, b, p, code)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendFloat32(ctx *encoder.RuntimeContext, b []byte, v float32) []byte {\n\tformat := ctx.Option.ColorScheme.Float\n\tb = append(b, format.Header...)\n\tb = encoder.AppendFloat32(ctx, b, v)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendFloat64(ctx *encoder.RuntimeContext, b []byte, v float64) []byte {\n\tformat := ctx.Option.ColorScheme.Float\n\tb = append(b, format.Header...)\n\tb = encoder.AppendFloat64(ctx, b, v)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendString(ctx *encoder.RuntimeContext, b []byte, v string) []byte {\n\tformat := ctx.Option.ColorScheme.String\n\tb = append(b, format.Header...)\n\tb = encoder.AppendString(ctx, b, v)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendByteSlice(ctx *encoder.RuntimeContext, b []byte, src []byte) []byte {\n\tformat := ctx.Option.ColorScheme.Binary\n\tb = append(b, format.Header...)\n\tb = encoder.AppendByteSlice(ctx, b, src)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendNumber(ctx *encoder.RuntimeContext, b []byte, n json.Number) ([]byte, error) {\n\tformat := ctx.Option.ColorScheme.Int\n\tb = append(b, format.Header...)\n\tbb, err := encoder.AppendNumber(ctx, b, n)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn append(bb, format.Footer...), nil\n}\n\nfunc appendBool(ctx *encoder.RuntimeContext, b []byte, v bool) []byte {\n\tformat := ctx.Option.ColorScheme.Bool\n\tb = append(b, format.Header...)\n\tif v {\n\t\tb = append(b, \"true\"...)\n\t} else {\n\t\tb = append(b, \"false\"...)\n\t}\n\treturn append(b, format.Footer...)\n}\n\nfunc appendNull(ctx *encoder.RuntimeContext, b []byte) []byte {\n\tformat := ctx.Option.ColorScheme.Null\n\tb = append(b, format.Header...)\n\tb = append(b, \"null\"...)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendComma(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, ',')\n}\n\nfunc appendNullComma(ctx *encoder.RuntimeContext, b []byte) []byte {\n\tformat := ctx.Option.ColorScheme.Null\n\tb = append(b, format.Header...)\n\tb = append(b, \"null\"...)\n\treturn append(append(b, format.Footer...), ',')\n}\n\nfunc appendColon(_ *encoder.RuntimeContext, b []byte) []byte {\n\tlast := len(b) - 1\n\tb[last] = ':'\n\treturn b\n}\n\nfunc appendMapKeyValue(_ *encoder.RuntimeContext, _ *encoder.Opcode, b, key, value []byte) []byte {\n\tb = append(b, key[:len(key)-1]...)\n\tb = append(b, ':')\n\treturn append(b, value...)\n}\n\nfunc appendMapEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tb[last] = '}'\n\tb = append(b, ',')\n\treturn b\n}\n\nfunc appendMarshalJSON(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\treturn encoder.AppendMarshalJSON(ctx, code, b, v)\n}\n\nfunc appendMarshalText(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\tformat := ctx.Option.ColorScheme.String\n\tb = append(b, format.Header...)\n\tbb, err := encoder.AppendMarshalText(ctx, code, b, v)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn append(bb, format.Footer...), nil\n}\n\nfunc appendArrayHead(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\treturn append(b, '[')\n}\n\nfunc appendArrayEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tb[last] = ']'\n\treturn append(b, ',')\n}\n\nfunc appendEmptyArray(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '[', ']', ',')\n}\n\nfunc appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{', '}', ',')\n}\n\nfunc appendObjectEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tb[last] = '}'\n\treturn append(b, ',')\n}\n\nfunc appendStructHead(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{')\n}\n\nfunc appendStructKey(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tformat := ctx.Option.ColorScheme.ObjectKey\n\tb = append(b, format.Header...)\n\tb = append(b, code.Key[:len(code.Key)-1]...)\n\tb = append(b, format.Footer...)\n\n\treturn append(b, ':')\n}\n\nfunc appendStructEnd(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte {\n\treturn append(b, '}', ',')\n}\n\nfunc appendStructEndSkipLast(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tif b[last] == ',' {\n\t\tb[last] = '}'\n\t\treturn appendComma(ctx, b)\n\t}\n\treturn appendStructEnd(ctx, code, b)\n}\n\nfunc restoreIndent(_ *encoder.RuntimeContext, _ *encoder.Opcode, _ uintptr)               {}\nfunc storeIndent(_ uintptr, _ *encoder.Opcode, _ uintptr)                                 {}\nfunc appendMapKeyIndent(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte    { return b }\nfunc appendArrayElemIndent(_ *encoder.RuntimeContext, _ *encoder.Opcode, b []byte) []byte { return b }\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_color/vm.go",
    "content": "// Code generated by internal/cmd/generator. DO NOT EDIT!\npackage vm_color\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nfunc Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\trecursiveLevel := 0\n\tptrOffset := uintptr(0)\n\tctxptr := ctx.Ptr()\n\tvar code *encoder.Opcode\n\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\tcode = codeSet.EscapeKeyCode\n\t} else {\n\t\tcode = codeSet.NoescapeKeyCode\n\t}\n\n\tfor {\n\t\tswitch code.Op {\n\t\tdefault:\n\t\t\treturn nil, errUnimplementedOp(code.Op)\n\t\tcase encoder.OpPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\tcase encoder.OpIntPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInt:\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpUint:\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpIntString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat32Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat32:\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat64Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat64:\n\t\t\tv := ptrToFloat64(load(ctxptr, code.Idx))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStringPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpString:\n\t\t\tb = appendString(ctx, b, ptrToString(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBoolPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBool:\n\t\t\tb = appendBool(ctx, b, ptrToBool(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBytesPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBytes:\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpNumberPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpNumber:\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(load(ctxptr, code.Idx)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpInterfacePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInterface:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\tif p == seen {\n\t\t\t\t\t\treturn nil, errUnsupportedValue(code, p)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.SeenPtr = append(ctx.SeenPtr, p)\n\t\t\tvar (\n\t\t\t\ttyp      *runtime.Type\n\t\t\t\tifacePtr unsafe.Pointer\n\t\t\t)\n\t\t\tup := ptrToUnsafePtr(p)\n\t\t\tif code.Flags&encoder.NonEmptyInterfaceFlags != 0 {\n\t\t\t\tiface := (*nonEmptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\tif iface.itab != nil {\n\t\t\t\t\ttyp = iface.itab.typ\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tiface := (*emptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\ttyp = iface.typ\n\t\t\t}\n\t\t\tif ifacePtr == nil {\n\t\t\t\tisDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)\n\t\t\t\tif !isDirectedNil {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\tcode = code.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, up)\n\t\t\tifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\ttotalLength := uintptr(code.Length) + 3\n\t\t\tnextTotalLength := uintptr(ifaceCodeSet.CodeLength) + 3\n\n\t\t\tvar c *encoder.Opcode\n\t\t\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\t\t\tc = ifaceCodeSet.InterfaceEscapeKeyCode\n\t\t\t} else {\n\t\t\t\tc = ifaceCodeSet.InterfaceNoescapeKeyCode\n\t\t\t}\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += totalLength * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tctx.BaseIndent += code.Indent\n\n\t\t\tnewLen := offsetNum + totalLength + nextTotalLength\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tend := ifaceCodeSet.EndCode\n\t\t\tstore(ctxptr, c.Idx, uintptr(ifacePtr))\n\t\t\tstore(ctxptr, end.Idx, oldOffset)\n\t\t\tstore(ctxptr, end.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, end, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpInterfaceEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = append(b, `\"\"`...)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpSlicePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif p == 0 || slice.Data == nil {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\tstore(ctxptr, code.Length, uintptr(slice.Len))\n\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\tif slice.Len > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpSliceElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tlength := load(ctxptr, code.Length)\n\t\t\tidx++\n\t\t\tif idx < length {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tdata := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, data+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Length > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tidx++\n\t\t\tif idx < uintptr(code.Length) {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpMapPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tuptr := ptrToUnsafePtr(p)\n\t\t\tmlen := maplen(uptr)\n\t\t\tif mlen <= 0 {\n\t\t\t\tb = appendEmptyObject(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructHead(ctx, b)\n\t\t\tunorderedMap := (ctx.Option.Flag & encoder.UnorderedMapOption) != 0\n\t\t\tmapCtx := encoder.NewMapContext(mlen, unorderedMap)\n\t\t\tmapiterinit(code.Type, uptr, &mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Idx, uintptr(unsafe.Pointer(mapCtx)))\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, unsafe.Pointer(mapCtx))\n\t\t\tif unorderedMap {\n\t\t\t\tb = appendMapKeyIndent(ctx, code.Next, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\tmapCtx.First = len(b)\n\t\t\t}\n\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapKey:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tidx := mapCtx.Idx\n\t\t\tidx++\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tb = appendMapKeyIndent(ctx, code, b)\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tb = appendObjectEnd(ctx, code, b)\n\t\t\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Value = b[mapCtx.Start:len(b)]\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tcode = code.End\n\t\t\t\t}\n\t\t\t}\n\t\tcase encoder.OpMapValue:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tb = appendColon(ctx, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Key = b[mapCtx.Start:len(b)]\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t}\n\t\t\tvalue := mapitervalue(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(value))\n\t\t\tmapiternext(&mapCtx.Iter)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapEnd:\n\t\t\t// this operation only used by sorted map.\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tsort.Sort(mapCtx.Slice)\n\t\t\tbuf := mapCtx.Buf\n\t\t\tfor _, item := range mapCtx.Slice.Items {\n\t\t\t\tbuf = appendMapKeyValue(ctx, code, buf, item.Key, item.Value)\n\t\t\t}\n\t\t\tbuf = appendMapEnd(ctx, code, buf)\n\t\t\tb = b[:mapCtx.First]\n\t\t\tb = append(b, buf...)\n\t\t\tmapCtx.Buf = buf\n\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpRecursivePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpRecursive:\n\t\t\tptr := load(ctxptr, code.Idx)\n\t\t\tif ptr != 0 {\n\t\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\t\tif ptr == seen {\n\t\t\t\t\t\t\treturn nil, errUnsupportedValue(code, ptr)\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\tctx.SeenPtr = append(ctx.SeenPtr, ptr)\n\t\t\tc := code.Jmp.Code\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += code.Jmp.CurLen * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tindentDiffFromTop := c.Indent - 1\n\t\t\tctx.BaseIndent += code.Indent - indentDiffFromTop\n\n\t\t\tnewLen := offsetNum + code.Jmp.CurLen + code.Jmp.NextLen\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tstore(ctxptr, c.Idx, ptr)\n\t\t\tstore(ctxptr, c.End.Next.Idx, oldOffset)\n\t\t\tstore(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, c.End.Next, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpRecursiveEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpStructPtrHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif len(code.Key) > 0 {\n\t\t\t\tif (code.Flags&encoder.IsTaggedKeyFlags) != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\t}\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif p == 0 || (ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tu64 := ptrToUint64(p, code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p+uintptr(code.Offset)))))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadArray, encoder.OpStructPtrHeadSlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArray, encoder.OpStructHeadSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArray:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptySlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadArrayPtr, encoder.OpStructPtrHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArrayPtr, encoder.OpStructHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArrayPtr, encoder.OpStructPtrHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArrayPtr, encoder.OpStructHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tif maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructField:\n\t\t\tif code.Flags&encoder.IsTaggedKeyFlags != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t}\n\t\t\tp := load(ctxptr, code.Idx) + uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldArrayPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArrayPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlice:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlicePtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldMap:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 || maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldMapPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldStruct:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyStruct:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructEnd:\n\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytesPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpEnd:\n\t\t\tgoto END\n\t\t}\n\t}\nEND:\n\treturn b, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/debug_vm.go",
    "content": "package vm_color_indent\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\nfunc DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\tvar code *encoder.Opcode\n\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\tcode = codeSet.EscapeKeyCode\n\t} else {\n\t\tcode = codeSet.NoescapeKeyCode\n\t}\n\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\tw := ctx.Option.DebugOut\n\t\t\tfmt.Fprintln(w, \"=============[DEBUG]===============\")\n\t\t\tfmt.Fprintln(w, \"* [TYPE]\")\n\t\t\tfmt.Fprintln(w, codeSet.Type)\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [ALL OPCODE]\")\n\t\t\tfmt.Fprintln(w, code.Dump())\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [CONTEXT]\")\n\t\t\tfmt.Fprintf(w, \"%+v\\n\", ctx)\n\t\t\tfmt.Fprintln(w, \"===================================\")\n\t\t\tpanic(err)\n\t\t}\n\t}()\n\n\treturn Run(ctx, b, codeSet)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/util.go",
    "content": "package vm_color_indent\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nconst uintptrSize = 4 << (^uintptr(0) >> 63)\n\nvar (\n\tappendIndent        = encoder.AppendIndent\n\tappendStructEnd     = encoder.AppendStructEndIndent\n\terrUnsupportedValue = encoder.ErrUnsupportedValue\n\terrUnsupportedFloat = encoder.ErrUnsupportedFloat\n\tmapiterinit         = encoder.MapIterInit\n\tmapiterkey          = encoder.MapIterKey\n\tmapitervalue        = encoder.MapIterValue\n\tmapiternext         = encoder.MapIterNext\n\tmaplen              = encoder.MapLen\n)\n\ntype emptyInterface struct {\n\ttyp *runtime.Type\n\tptr unsafe.Pointer\n}\n\ntype nonEmptyInterface struct {\n\titab *struct {\n\t\tityp *runtime.Type // static interface type\n\t\ttyp  *runtime.Type // dynamic concrete type\n\t\t// unused fields...\n\t}\n\tptr unsafe.Pointer\n}\n\nfunc errUnimplementedOp(op encoder.OpType) error {\n\treturn fmt.Errorf(\"encoder (indent): opcode %s has not been implemented\", op)\n}\n\nfunc load(base uintptr, idx uint32) uintptr {\n\taddr := base + uintptr(idx)\n\treturn **(**uintptr)(unsafe.Pointer(&addr))\n}\n\nfunc store(base uintptr, idx uint32, p uintptr) {\n\taddr := base + uintptr(idx)\n\t**(**uintptr)(unsafe.Pointer(&addr)) = p\n}\n\nfunc loadNPtr(base uintptr, idx uint32, ptrNum uint8) uintptr {\n\taddr := base + uintptr(idx)\n\tp := **(**uintptr)(unsafe.Pointer(&addr))\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUint64(p uintptr, bitSize uint8) uint64 {\n\tswitch bitSize {\n\tcase 8:\n\t\treturn (uint64)(**(**uint8)(unsafe.Pointer(&p)))\n\tcase 16:\n\t\treturn (uint64)(**(**uint16)(unsafe.Pointer(&p)))\n\tcase 32:\n\t\treturn (uint64)(**(**uint32)(unsafe.Pointer(&p)))\n\tcase 64:\n\t\treturn **(**uint64)(unsafe.Pointer(&p))\n\t}\n\treturn 0\n}\n\nfunc ptrToFloat32(p uintptr) float32            { return **(**float32)(unsafe.Pointer(&p)) }\nfunc ptrToFloat64(p uintptr) float64            { return **(**float64)(unsafe.Pointer(&p)) }\nfunc ptrToBool(p uintptr) bool                  { return **(**bool)(unsafe.Pointer(&p)) }\nfunc ptrToBytes(p uintptr) []byte               { return **(**[]byte)(unsafe.Pointer(&p)) }\nfunc ptrToNumber(p uintptr) json.Number         { return **(**json.Number)(unsafe.Pointer(&p)) }\nfunc ptrToString(p uintptr) string              { return **(**string)(unsafe.Pointer(&p)) }\nfunc ptrToSlice(p uintptr) *runtime.SliceHeader { return *(**runtime.SliceHeader)(unsafe.Pointer(&p)) }\nfunc ptrToPtr(p uintptr) uintptr {\n\treturn uintptr(**(**unsafe.Pointer)(unsafe.Pointer(&p)))\n}\nfunc ptrToNPtr(p uintptr, ptrNum uint8) uintptr {\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUnsafePtr(p uintptr) unsafe.Pointer {\n\treturn *(*unsafe.Pointer)(unsafe.Pointer(&p))\n}\nfunc ptrToInterface(code *encoder.Opcode, p uintptr) interface{} {\n\treturn *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: code.Type,\n\t\tptr: *(*unsafe.Pointer)(unsafe.Pointer(&p)),\n\t}))\n}\n\nfunc appendInt(ctx *encoder.RuntimeContext, b []byte, p uintptr, code *encoder.Opcode) []byte {\n\tformat := ctx.Option.ColorScheme.Int\n\tb = append(b, format.Header...)\n\tb = encoder.AppendInt(ctx, b, p, code)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendUint(ctx *encoder.RuntimeContext, b []byte, p uintptr, code *encoder.Opcode) []byte {\n\tformat := ctx.Option.ColorScheme.Uint\n\tb = append(b, format.Header...)\n\tb = encoder.AppendUint(ctx, b, p, code)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendFloat32(ctx *encoder.RuntimeContext, b []byte, v float32) []byte {\n\tformat := ctx.Option.ColorScheme.Float\n\tb = append(b, format.Header...)\n\tb = encoder.AppendFloat32(ctx, b, v)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendFloat64(ctx *encoder.RuntimeContext, b []byte, v float64) []byte {\n\tformat := ctx.Option.ColorScheme.Float\n\tb = append(b, format.Header...)\n\tb = encoder.AppendFloat64(ctx, b, v)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendString(ctx *encoder.RuntimeContext, b []byte, v string) []byte {\n\tformat := ctx.Option.ColorScheme.String\n\tb = append(b, format.Header...)\n\tb = encoder.AppendString(ctx, b, v)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendByteSlice(ctx *encoder.RuntimeContext, b []byte, src []byte) []byte {\n\tformat := ctx.Option.ColorScheme.Binary\n\tb = append(b, format.Header...)\n\tb = encoder.AppendByteSlice(ctx, b, src)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendNumber(ctx *encoder.RuntimeContext, b []byte, n json.Number) ([]byte, error) {\n\tformat := ctx.Option.ColorScheme.Int\n\tb = append(b, format.Header...)\n\tbb, err := encoder.AppendNumber(ctx, b, n)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn append(bb, format.Footer...), nil\n}\n\nfunc appendBool(ctx *encoder.RuntimeContext, b []byte, v bool) []byte {\n\tformat := ctx.Option.ColorScheme.Bool\n\tb = append(b, format.Header...)\n\tif v {\n\t\tb = append(b, \"true\"...)\n\t} else {\n\t\tb = append(b, \"false\"...)\n\t}\n\treturn append(b, format.Footer...)\n}\n\nfunc appendNull(ctx *encoder.RuntimeContext, b []byte) []byte {\n\tformat := ctx.Option.ColorScheme.Null\n\tb = append(b, format.Header...)\n\tb = append(b, \"null\"...)\n\treturn append(b, format.Footer...)\n}\n\nfunc appendComma(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, ',', '\\n')\n}\n\nfunc appendNullComma(ctx *encoder.RuntimeContext, b []byte) []byte {\n\tformat := ctx.Option.ColorScheme.Null\n\tb = append(b, format.Header...)\n\tb = append(b, \"null\"...)\n\treturn append(append(b, format.Footer...), ',', '\\n')\n}\n\nfunc appendColon(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b[:len(b)-2], ':', ' ')\n}\n\nfunc appendMapKeyValue(ctx *encoder.RuntimeContext, code *encoder.Opcode, b, key, value []byte) []byte {\n\tb = appendIndent(ctx, b, code.Indent+1)\n\tb = append(b, key...)\n\tb[len(b)-2] = ':'\n\tb[len(b)-1] = ' '\n\treturn append(b, value...)\n}\n\nfunc appendMapEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = b[:len(b)-2]\n\tb = append(b, '\\n')\n\tb = appendIndent(ctx, b, code.Indent)\n\treturn append(b, '}', ',', '\\n')\n}\n\nfunc appendArrayHead(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = append(b, '[', '\\n')\n\treturn appendIndent(ctx, b, code.Indent+1)\n}\n\nfunc appendArrayEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = b[:len(b)-2]\n\tb = append(b, '\\n')\n\tb = appendIndent(ctx, b, code.Indent)\n\treturn append(b, ']', ',', '\\n')\n}\n\nfunc appendEmptyArray(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '[', ']', ',', '\\n')\n}\n\nfunc appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{', '}', ',', '\\n')\n}\n\nfunc appendObjectEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\t// replace comma to newline\n\tb[last-1] = '\\n'\n\tb = appendIndent(ctx, b[:last], code.Indent)\n\treturn append(b, '}', ',', '\\n')\n}\n\nfunc appendMarshalJSON(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\treturn encoder.AppendMarshalJSONIndent(ctx, code, b, v)\n}\n\nfunc appendMarshalText(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\tformat := ctx.Option.ColorScheme.String\n\tb = append(b, format.Header...)\n\tbb, err := encoder.AppendMarshalTextIndent(ctx, code, b, v)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn append(bb, format.Footer...), nil\n}\n\nfunc appendStructHead(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{', '\\n')\n}\n\nfunc appendStructKey(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = appendIndent(ctx, b, code.Indent)\n\n\tformat := ctx.Option.ColorScheme.ObjectKey\n\tb = append(b, format.Header...)\n\tb = append(b, code.Key[:len(code.Key)-1]...)\n\tb = append(b, format.Footer...)\n\n\treturn append(b, ':', ' ')\n}\n\nfunc appendStructEndSkipLast(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tif b[last-1] == '{' {\n\t\tb[last] = '}'\n\t} else {\n\t\tif b[last] == '\\n' {\n\t\t\t// to remove ',' and '\\n' characters\n\t\t\tb = b[:len(b)-2]\n\t\t}\n\t\tb = append(b, '\\n')\n\t\tb = appendIndent(ctx, b, code.Indent-1)\n\t\tb = append(b, '}')\n\t}\n\treturn appendComma(ctx, b)\n}\n\nfunc restoreIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, ctxptr uintptr) {\n\tctx.BaseIndent = uint32(load(ctxptr, code.Length))\n}\n\nfunc storeIndent(ctxptr uintptr, code *encoder.Opcode, indent uintptr) {\n\tstore(ctxptr, code.Length, indent)\n}\n\nfunc appendArrayElemIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\treturn appendIndent(ctx, b, code.Indent+1)\n}\n\nfunc appendMapKeyIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\treturn appendIndent(ctx, b, code.Indent)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/vm.go",
    "content": "// Code generated by internal/cmd/generator. DO NOT EDIT!\npackage vm_color_indent\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nfunc Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\trecursiveLevel := 0\n\tptrOffset := uintptr(0)\n\tctxptr := ctx.Ptr()\n\tvar code *encoder.Opcode\n\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\tcode = codeSet.EscapeKeyCode\n\t} else {\n\t\tcode = codeSet.NoescapeKeyCode\n\t}\n\n\tfor {\n\t\tswitch code.Op {\n\t\tdefault:\n\t\t\treturn nil, errUnimplementedOp(code.Op)\n\t\tcase encoder.OpPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\tcase encoder.OpIntPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInt:\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpUint:\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpIntString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat32Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat32:\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat64Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat64:\n\t\t\tv := ptrToFloat64(load(ctxptr, code.Idx))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStringPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpString:\n\t\t\tb = appendString(ctx, b, ptrToString(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBoolPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBool:\n\t\t\tb = appendBool(ctx, b, ptrToBool(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBytesPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBytes:\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpNumberPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpNumber:\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(load(ctxptr, code.Idx)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpInterfacePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInterface:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\tif p == seen {\n\t\t\t\t\t\treturn nil, errUnsupportedValue(code, p)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.SeenPtr = append(ctx.SeenPtr, p)\n\t\t\tvar (\n\t\t\t\ttyp      *runtime.Type\n\t\t\t\tifacePtr unsafe.Pointer\n\t\t\t)\n\t\t\tup := ptrToUnsafePtr(p)\n\t\t\tif code.Flags&encoder.NonEmptyInterfaceFlags != 0 {\n\t\t\t\tiface := (*nonEmptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\tif iface.itab != nil {\n\t\t\t\t\ttyp = iface.itab.typ\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tiface := (*emptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\ttyp = iface.typ\n\t\t\t}\n\t\t\tif ifacePtr == nil {\n\t\t\t\tisDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)\n\t\t\t\tif !isDirectedNil {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\tcode = code.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, up)\n\t\t\tifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\ttotalLength := uintptr(code.Length) + 3\n\t\t\tnextTotalLength := uintptr(ifaceCodeSet.CodeLength) + 3\n\n\t\t\tvar c *encoder.Opcode\n\t\t\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\t\t\tc = ifaceCodeSet.InterfaceEscapeKeyCode\n\t\t\t} else {\n\t\t\t\tc = ifaceCodeSet.InterfaceNoescapeKeyCode\n\t\t\t}\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += totalLength * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tctx.BaseIndent += code.Indent\n\n\t\t\tnewLen := offsetNum + totalLength + nextTotalLength\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tend := ifaceCodeSet.EndCode\n\t\t\tstore(ctxptr, c.Idx, uintptr(ifacePtr))\n\t\t\tstore(ctxptr, end.Idx, oldOffset)\n\t\t\tstore(ctxptr, end.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, end, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpInterfaceEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = append(b, `\"\"`...)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpSlicePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif p == 0 || slice.Data == nil {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\tstore(ctxptr, code.Length, uintptr(slice.Len))\n\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\tif slice.Len > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpSliceElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tlength := load(ctxptr, code.Length)\n\t\t\tidx++\n\t\t\tif idx < length {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tdata := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, data+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Length > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tidx++\n\t\t\tif idx < uintptr(code.Length) {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpMapPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tuptr := ptrToUnsafePtr(p)\n\t\t\tmlen := maplen(uptr)\n\t\t\tif mlen <= 0 {\n\t\t\t\tb = appendEmptyObject(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructHead(ctx, b)\n\t\t\tunorderedMap := (ctx.Option.Flag & encoder.UnorderedMapOption) != 0\n\t\t\tmapCtx := encoder.NewMapContext(mlen, unorderedMap)\n\t\t\tmapiterinit(code.Type, uptr, &mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Idx, uintptr(unsafe.Pointer(mapCtx)))\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, unsafe.Pointer(mapCtx))\n\t\t\tif unorderedMap {\n\t\t\t\tb = appendMapKeyIndent(ctx, code.Next, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\tmapCtx.First = len(b)\n\t\t\t}\n\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapKey:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tidx := mapCtx.Idx\n\t\t\tidx++\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tb = appendMapKeyIndent(ctx, code, b)\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tb = appendObjectEnd(ctx, code, b)\n\t\t\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Value = b[mapCtx.Start:len(b)]\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tcode = code.End\n\t\t\t\t}\n\t\t\t}\n\t\tcase encoder.OpMapValue:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tb = appendColon(ctx, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Key = b[mapCtx.Start:len(b)]\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t}\n\t\t\tvalue := mapitervalue(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(value))\n\t\t\tmapiternext(&mapCtx.Iter)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapEnd:\n\t\t\t// this operation only used by sorted map.\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tsort.Sort(mapCtx.Slice)\n\t\t\tbuf := mapCtx.Buf\n\t\t\tfor _, item := range mapCtx.Slice.Items {\n\t\t\t\tbuf = appendMapKeyValue(ctx, code, buf, item.Key, item.Value)\n\t\t\t}\n\t\t\tbuf = appendMapEnd(ctx, code, buf)\n\t\t\tb = b[:mapCtx.First]\n\t\t\tb = append(b, buf...)\n\t\t\tmapCtx.Buf = buf\n\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpRecursivePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpRecursive:\n\t\t\tptr := load(ctxptr, code.Idx)\n\t\t\tif ptr != 0 {\n\t\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\t\tif ptr == seen {\n\t\t\t\t\t\t\treturn nil, errUnsupportedValue(code, ptr)\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\tctx.SeenPtr = append(ctx.SeenPtr, ptr)\n\t\t\tc := code.Jmp.Code\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += code.Jmp.CurLen * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tindentDiffFromTop := c.Indent - 1\n\t\t\tctx.BaseIndent += code.Indent - indentDiffFromTop\n\n\t\t\tnewLen := offsetNum + code.Jmp.CurLen + code.Jmp.NextLen\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tstore(ctxptr, c.Idx, ptr)\n\t\t\tstore(ctxptr, c.End.Next.Idx, oldOffset)\n\t\t\tstore(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, c.End.Next, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpRecursiveEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpStructPtrHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif len(code.Key) > 0 {\n\t\t\t\tif (code.Flags&encoder.IsTaggedKeyFlags) != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\t}\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif p == 0 || (ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tu64 := ptrToUint64(p, code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p+uintptr(code.Offset)))))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadArray, encoder.OpStructPtrHeadSlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArray, encoder.OpStructHeadSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArray:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptySlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadArrayPtr, encoder.OpStructPtrHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArrayPtr, encoder.OpStructHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArrayPtr, encoder.OpStructPtrHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArrayPtr, encoder.OpStructHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tif maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructField:\n\t\t\tif code.Flags&encoder.IsTaggedKeyFlags != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t}\n\t\t\tp := load(ctxptr, code.Idx) + uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldArrayPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArrayPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlice:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlicePtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldMap:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 || maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldMapPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldStruct:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyStruct:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructEnd:\n\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytesPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpEnd:\n\t\t\tgoto END\n\t\t}\n\t}\nEND:\n\treturn b, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_indent/debug_vm.go",
    "content": "package vm_indent\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\nfunc DebugRun(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\tvar code *encoder.Opcode\n\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\tcode = codeSet.EscapeKeyCode\n\t} else {\n\t\tcode = codeSet.NoescapeKeyCode\n\t}\n\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\tw := ctx.Option.DebugOut\n\t\t\tfmt.Fprintln(w, \"=============[DEBUG]===============\")\n\t\t\tfmt.Fprintln(w, \"* [TYPE]\")\n\t\t\tfmt.Fprintln(w, codeSet.Type)\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [ALL OPCODE]\")\n\t\t\tfmt.Fprintln(w, code.Dump())\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t\tfmt.Fprintln(w, \"* [CONTEXT]\")\n\t\t\tfmt.Fprintf(w, \"%+v\\n\", ctx)\n\t\t\tfmt.Fprintln(w, \"===================================\")\n\t\t\tpanic(err)\n\t\t}\n\t}()\n\n\treturn Run(ctx, b, codeSet)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_indent/hack.go",
    "content": "package vm_indent\n\nimport (\n\t// HACK: compile order\n\t// `vm`, `vm_indent`, `vm_color`, `vm_color_indent` packages uses a lot of memory to compile,\n\t// so forcibly make dependencies and avoid compiling in concurrent.\n\t// dependency order: vm => vm_indent => vm_color => vm_color_indent\n\t_ \"github.com/goccy/go-json/internal/encoder/vm_color\"\n)\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_indent/util.go",
    "content": "package vm_indent\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nconst uintptrSize = 4 << (^uintptr(0) >> 63)\n\nvar (\n\tappendInt           = encoder.AppendInt\n\tappendUint          = encoder.AppendUint\n\tappendFloat32       = encoder.AppendFloat32\n\tappendFloat64       = encoder.AppendFloat64\n\tappendString        = encoder.AppendString\n\tappendByteSlice     = encoder.AppendByteSlice\n\tappendNumber        = encoder.AppendNumber\n\tappendStructEnd     = encoder.AppendStructEndIndent\n\tappendIndent        = encoder.AppendIndent\n\terrUnsupportedValue = encoder.ErrUnsupportedValue\n\terrUnsupportedFloat = encoder.ErrUnsupportedFloat\n\tmapiterinit         = encoder.MapIterInit\n\tmapiterkey          = encoder.MapIterKey\n\tmapitervalue        = encoder.MapIterValue\n\tmapiternext         = encoder.MapIterNext\n\tmaplen              = encoder.MapLen\n)\n\ntype emptyInterface struct {\n\ttyp *runtime.Type\n\tptr unsafe.Pointer\n}\n\ntype nonEmptyInterface struct {\n\titab *struct {\n\t\tityp *runtime.Type // static interface type\n\t\ttyp  *runtime.Type // dynamic concrete type\n\t\t// unused fields...\n\t}\n\tptr unsafe.Pointer\n}\n\nfunc errUnimplementedOp(op encoder.OpType) error {\n\treturn fmt.Errorf(\"encoder (indent): opcode %s has not been implemented\", op)\n}\n\nfunc load(base uintptr, idx uint32) uintptr {\n\taddr := base + uintptr(idx)\n\treturn **(**uintptr)(unsafe.Pointer(&addr))\n}\n\nfunc store(base uintptr, idx uint32, p uintptr) {\n\taddr := base + uintptr(idx)\n\t**(**uintptr)(unsafe.Pointer(&addr)) = p\n}\n\nfunc loadNPtr(base uintptr, idx uint32, ptrNum uint8) uintptr {\n\taddr := base + uintptr(idx)\n\tp := **(**uintptr)(unsafe.Pointer(&addr))\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUint64(p uintptr, bitSize uint8) uint64 {\n\tswitch bitSize {\n\tcase 8:\n\t\treturn (uint64)(**(**uint8)(unsafe.Pointer(&p)))\n\tcase 16:\n\t\treturn (uint64)(**(**uint16)(unsafe.Pointer(&p)))\n\tcase 32:\n\t\treturn (uint64)(**(**uint32)(unsafe.Pointer(&p)))\n\tcase 64:\n\t\treturn **(**uint64)(unsafe.Pointer(&p))\n\t}\n\treturn 0\n}\nfunc ptrToFloat32(p uintptr) float32            { return **(**float32)(unsafe.Pointer(&p)) }\nfunc ptrToFloat64(p uintptr) float64            { return **(**float64)(unsafe.Pointer(&p)) }\nfunc ptrToBool(p uintptr) bool                  { return **(**bool)(unsafe.Pointer(&p)) }\nfunc ptrToBytes(p uintptr) []byte               { return **(**[]byte)(unsafe.Pointer(&p)) }\nfunc ptrToNumber(p uintptr) json.Number         { return **(**json.Number)(unsafe.Pointer(&p)) }\nfunc ptrToString(p uintptr) string              { return **(**string)(unsafe.Pointer(&p)) }\nfunc ptrToSlice(p uintptr) *runtime.SliceHeader { return *(**runtime.SliceHeader)(unsafe.Pointer(&p)) }\nfunc ptrToPtr(p uintptr) uintptr {\n\treturn uintptr(**(**unsafe.Pointer)(unsafe.Pointer(&p)))\n}\nfunc ptrToNPtr(p uintptr, ptrNum uint8) uintptr {\n\tfor i := uint8(0); i < ptrNum; i++ {\n\t\tif p == 0 {\n\t\t\treturn 0\n\t\t}\n\t\tp = ptrToPtr(p)\n\t}\n\treturn p\n}\n\nfunc ptrToUnsafePtr(p uintptr) unsafe.Pointer {\n\treturn *(*unsafe.Pointer)(unsafe.Pointer(&p))\n}\nfunc ptrToInterface(code *encoder.Opcode, p uintptr) interface{} {\n\treturn *(*interface{})(unsafe.Pointer(&emptyInterface{\n\t\ttyp: code.Type,\n\t\tptr: *(*unsafe.Pointer)(unsafe.Pointer(&p)),\n\t}))\n}\n\nfunc appendBool(_ *encoder.RuntimeContext, b []byte, v bool) []byte {\n\tif v {\n\t\treturn append(b, \"true\"...)\n\t}\n\treturn append(b, \"false\"...)\n}\n\nfunc appendNull(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, \"null\"...)\n}\n\nfunc appendComma(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, ',', '\\n')\n}\n\nfunc appendNullComma(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, \"null,\\n\"...)\n}\n\nfunc appendColon(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b[:len(b)-2], ':', ' ')\n}\n\nfunc appendMapKeyValue(ctx *encoder.RuntimeContext, code *encoder.Opcode, b, key, value []byte) []byte {\n\tb = appendIndent(ctx, b, code.Indent+1)\n\tb = append(b, key...)\n\tb[len(b)-2] = ':'\n\tb[len(b)-1] = ' '\n\treturn append(b, value...)\n}\n\nfunc appendMapEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = b[:len(b)-2]\n\tb = append(b, '\\n')\n\tb = appendIndent(ctx, b, code.Indent)\n\treturn append(b, '}', ',', '\\n')\n}\n\nfunc appendArrayHead(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = append(b, '[', '\\n')\n\treturn appendIndent(ctx, b, code.Indent+1)\n}\n\nfunc appendArrayEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = b[:len(b)-2]\n\tb = append(b, '\\n')\n\tb = appendIndent(ctx, b, code.Indent)\n\treturn append(b, ']', ',', '\\n')\n}\n\nfunc appendEmptyArray(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '[', ']', ',', '\\n')\n}\n\nfunc appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{', '}', ',', '\\n')\n}\n\nfunc appendObjectEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\t// replace comma to newline\n\tb[last-1] = '\\n'\n\tb = appendIndent(ctx, b[:last], code.Indent)\n\treturn append(b, '}', ',', '\\n')\n}\n\nfunc appendMarshalJSON(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\treturn encoder.AppendMarshalJSONIndent(ctx, code, b, v)\n}\n\nfunc appendMarshalText(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte, v interface{}) ([]byte, error) {\n\treturn encoder.AppendMarshalTextIndent(ctx, code, b, v)\n}\n\nfunc appendStructHead(_ *encoder.RuntimeContext, b []byte) []byte {\n\treturn append(b, '{', '\\n')\n}\n\nfunc appendStructKey(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tb = appendIndent(ctx, b, code.Indent)\n\tb = append(b, code.Key...)\n\treturn append(b, ' ')\n}\n\nfunc appendStructEndSkipLast(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\tlast := len(b) - 1\n\tif b[last-1] == '{' {\n\t\tb[last] = '}'\n\t} else {\n\t\tif b[last] == '\\n' {\n\t\t\t// to remove ',' and '\\n' characters\n\t\t\tb = b[:len(b)-2]\n\t\t}\n\t\tb = append(b, '\\n')\n\t\tb = appendIndent(ctx, b, code.Indent-1)\n\t\tb = append(b, '}')\n\t}\n\treturn appendComma(ctx, b)\n}\n\nfunc restoreIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, ctxptr uintptr) {\n\tctx.BaseIndent = uint32(load(ctxptr, code.Length))\n}\n\nfunc storeIndent(ctxptr uintptr, code *encoder.Opcode, indent uintptr) {\n\tstore(ctxptr, code.Length, indent)\n}\n\nfunc appendArrayElemIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\treturn appendIndent(ctx, b, code.Indent+1)\n}\n\nfunc appendMapKeyIndent(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {\n\treturn appendIndent(ctx, b, code.Indent)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/encoder/vm_indent/vm.go",
    "content": "// Code generated by internal/cmd/generator. DO NOT EDIT!\npackage vm_indent\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"unsafe\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n\t\"github.com/goccy/go-json/internal/runtime\"\n)\n\nfunc Run(ctx *encoder.RuntimeContext, b []byte, codeSet *encoder.OpcodeSet) ([]byte, error) {\n\trecursiveLevel := 0\n\tptrOffset := uintptr(0)\n\tctxptr := ctx.Ptr()\n\tvar code *encoder.Opcode\n\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\tcode = codeSet.EscapeKeyCode\n\t} else {\n\t\tcode = codeSet.NoescapeKeyCode\n\t}\n\n\tfor {\n\t\tswitch code.Op {\n\t\tdefault:\n\t\t\treturn nil, errUnimplementedOp(code.Op)\n\t\tcase encoder.OpPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\tcase encoder.OpIntPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInt:\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpUint:\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpIntString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpUintString:\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, load(ctxptr, code.Idx), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat32Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat32:\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpFloat64Ptr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpFloat64:\n\t\t\tv := ptrToFloat64(load(ctxptr, code.Idx))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStringPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpString:\n\t\t\tb = appendString(ctx, b, ptrToString(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBoolPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBool:\n\t\t\tb = appendBool(ctx, b, ptrToBool(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpBytesPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpBytes:\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(load(ctxptr, code.Idx)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpNumberPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpNumber:\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(load(ctxptr, code.Idx)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpInterfacePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpInterface:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\tif p == seen {\n\t\t\t\t\t\treturn nil, errUnsupportedValue(code, p)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.SeenPtr = append(ctx.SeenPtr, p)\n\t\t\tvar (\n\t\t\t\ttyp      *runtime.Type\n\t\t\t\tifacePtr unsafe.Pointer\n\t\t\t)\n\t\t\tup := ptrToUnsafePtr(p)\n\t\t\tif code.Flags&encoder.NonEmptyInterfaceFlags != 0 {\n\t\t\t\tiface := (*nonEmptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\tif iface.itab != nil {\n\t\t\t\t\ttyp = iface.itab.typ\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tiface := (*emptyInterface)(up)\n\t\t\t\tifacePtr = iface.ptr\n\t\t\t\ttyp = iface.typ\n\t\t\t}\n\t\t\tif ifacePtr == nil {\n\t\t\t\tisDirectedNil := typ != nil && typ.Kind() == reflect.Struct && !runtime.IfaceIndir(typ)\n\t\t\t\tif !isDirectedNil {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\tcode = code.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, up)\n\t\t\tifaceCodeSet, err := encoder.CompileToGetCodeSet(ctx, uintptr(unsafe.Pointer(typ)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\ttotalLength := uintptr(code.Length) + 3\n\t\t\tnextTotalLength := uintptr(ifaceCodeSet.CodeLength) + 3\n\n\t\t\tvar c *encoder.Opcode\n\t\t\tif (ctx.Option.Flag & encoder.HTMLEscapeOption) != 0 {\n\t\t\t\tc = ifaceCodeSet.InterfaceEscapeKeyCode\n\t\t\t} else {\n\t\t\t\tc = ifaceCodeSet.InterfaceNoescapeKeyCode\n\t\t\t}\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += totalLength * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tctx.BaseIndent += code.Indent\n\n\t\t\tnewLen := offsetNum + totalLength + nextTotalLength\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tend := ifaceCodeSet.EndCode\n\t\t\tstore(ctxptr, c.Idx, uintptr(ifacePtr))\n\t\t\tstore(ctxptr, end.Idx, oldOffset)\n\t\t\tstore(ctxptr, end.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, end, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpInterfaceEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToPtr(p))\n\t\t\tfallthrough\n\t\tcase encoder.OpMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = append(b, `\"\"`...)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags&encoder.IsNilableTypeFlags) != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpSlicePtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif p == 0 || slice.Data == nil {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\tstore(ctxptr, code.Length, uintptr(slice.Len))\n\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\tif slice.Len > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, uintptr(slice.Data))\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpSliceElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tlength := load(ctxptr, code.Length)\n\t\t\tidx++\n\t\t\tif idx < length {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tdata := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, data+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Length > 0 {\n\t\t\t\tb = appendArrayHead(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, 0)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tb = appendEmptyArray(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpArrayElem:\n\t\t\tidx := load(ctxptr, code.ElemIdx)\n\t\t\tidx++\n\t\t\tif idx < uintptr(code.Length) {\n\t\t\t\tb = appendArrayElemIndent(ctx, code, b)\n\t\t\t\tstore(ctxptr, code.ElemIdx, idx)\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tsize := uintptr(code.Size)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p+idx*size)\n\t\t\t} else {\n\t\t\t\tb = appendArrayEnd(ctx, code, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t}\n\t\tcase encoder.OpMapPtr:\n\t\t\tp := loadNPtr(ctxptr, code.Idx, code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\tfallthrough\n\t\tcase encoder.OpMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tuptr := ptrToUnsafePtr(p)\n\t\t\tmlen := maplen(uptr)\n\t\t\tif mlen <= 0 {\n\t\t\t\tb = appendEmptyObject(ctx, b)\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructHead(ctx, b)\n\t\t\tunorderedMap := (ctx.Option.Flag & encoder.UnorderedMapOption) != 0\n\t\t\tmapCtx := encoder.NewMapContext(mlen, unorderedMap)\n\t\t\tmapiterinit(code.Type, uptr, &mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Idx, uintptr(unsafe.Pointer(mapCtx)))\n\t\t\tctx.KeepRefs = append(ctx.KeepRefs, unsafe.Pointer(mapCtx))\n\t\t\tif unorderedMap {\n\t\t\t\tb = appendMapKeyIndent(ctx, code.Next, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\tmapCtx.First = len(b)\n\t\t\t}\n\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapKey:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tidx := mapCtx.Idx\n\t\t\tidx++\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tb = appendMapKeyIndent(ctx, code, b)\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tb = appendObjectEnd(ctx, code, b)\n\t\t\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Value = b[mapCtx.Start:len(b)]\n\t\t\t\tif idx < mapCtx.Len {\n\t\t\t\t\tmapCtx.Idx = int(idx)\n\t\t\t\t\tmapCtx.Start = len(b)\n\t\t\t\t\tkey := mapiterkey(&mapCtx.Iter)\n\t\t\t\t\tstore(ctxptr, code.Next.Idx, uintptr(key))\n\t\t\t\t\tcode = code.Next\n\t\t\t\t} else {\n\t\t\t\t\tcode = code.End\n\t\t\t\t}\n\t\t\t}\n\t\tcase encoder.OpMapValue:\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tif (ctx.Option.Flag & encoder.UnorderedMapOption) != 0 {\n\t\t\t\tb = appendColon(ctx, b)\n\t\t\t} else {\n\t\t\t\tmapCtx.Slice.Items[mapCtx.Idx].Key = b[mapCtx.Start:len(b)]\n\t\t\t\tmapCtx.Start = len(b)\n\t\t\t}\n\t\t\tvalue := mapitervalue(&mapCtx.Iter)\n\t\t\tstore(ctxptr, code.Next.Idx, uintptr(value))\n\t\t\tmapiternext(&mapCtx.Iter)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpMapEnd:\n\t\t\t// this operation only used by sorted map.\n\t\t\tmapCtx := (*encoder.MapContext)(ptrToUnsafePtr(load(ctxptr, code.Idx)))\n\t\t\tsort.Sort(mapCtx.Slice)\n\t\t\tbuf := mapCtx.Buf\n\t\t\tfor _, item := range mapCtx.Slice.Items {\n\t\t\t\tbuf = appendMapKeyValue(ctx, code, buf, item.Key, item.Value)\n\t\t\t}\n\t\t\tbuf = appendMapEnd(ctx, code, buf)\n\t\t\tb = b[:mapCtx.First]\n\t\t\tb = append(b, buf...)\n\t\t\tmapCtx.Buf = buf\n\t\t\tencoder.ReleaseMapContext(mapCtx)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpRecursivePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpRecursive:\n\t\t\tptr := load(ctxptr, code.Idx)\n\t\t\tif ptr != 0 {\n\t\t\t\tif recursiveLevel > encoder.StartDetectingCyclesAfter {\n\t\t\t\t\tfor _, seen := range ctx.SeenPtr {\n\t\t\t\t\t\tif ptr == seen {\n\t\t\t\t\t\t\treturn nil, errUnsupportedValue(code, ptr)\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\tctx.SeenPtr = append(ctx.SeenPtr, ptr)\n\t\t\tc := code.Jmp.Code\n\t\t\tcurlen := uintptr(len(ctx.Ptrs))\n\t\t\toffsetNum := ptrOffset / uintptrSize\n\t\t\toldOffset := ptrOffset\n\t\t\tptrOffset += code.Jmp.CurLen * uintptrSize\n\t\t\toldBaseIndent := ctx.BaseIndent\n\t\t\tindentDiffFromTop := c.Indent - 1\n\t\t\tctx.BaseIndent += code.Indent - indentDiffFromTop\n\n\t\t\tnewLen := offsetNum + code.Jmp.CurLen + code.Jmp.NextLen\n\t\t\tif curlen < newLen {\n\t\t\t\tctx.Ptrs = append(ctx.Ptrs, make([]uintptr, newLen-curlen)...)\n\t\t\t}\n\t\t\tctxptr = ctx.Ptr() + ptrOffset // assign new ctxptr\n\n\t\t\tstore(ctxptr, c.Idx, ptr)\n\t\t\tstore(ctxptr, c.End.Next.Idx, oldOffset)\n\t\t\tstore(ctxptr, c.End.Next.ElemIdx, uintptr(unsafe.Pointer(code.Next)))\n\t\t\tstoreIndent(ctxptr, c.End.Next, uintptr(oldBaseIndent))\n\t\t\tcode = c\n\t\t\trecursiveLevel++\n\t\tcase encoder.OpRecursiveEnd:\n\t\t\trecursiveLevel--\n\n\t\t\t// restore ctxptr\n\t\t\trestoreIndent(ctx, code, ctxptr)\n\t\t\toffset := load(ctxptr, code.Idx)\n\t\t\tctx.SeenPtr = ctx.SeenPtr[:len(ctx.SeenPtr)-1]\n\n\t\t\tcodePtr := load(ctxptr, code.ElemIdx)\n\t\t\tcode = (*encoder.Opcode)(ptrToUnsafePtr(codePtr))\n\t\t\tctxptr = ctx.Ptr() + offset\n\t\t\tptrOffset = offset\n\t\tcase encoder.OpStructPtrHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHead:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif len(code.Key) > 0 {\n\t\t\t\tif (code.Flags&encoder.IsTaggedKeyFlags) != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\t}\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && ((code.Flags&encoder.IndirectFlags) != 0 || code.Next.Op == encoder.OpStructEnd) {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif p == 0 || (ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyInt:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tu64 := ptrToUint64(p, code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUint:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64String:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p+uintptr(code.Offset)))))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBool:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytes:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumber:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberString:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v == \"\" {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadArray, encoder.OpStructPtrHeadSlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArray, encoder.OpStructHeadSlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArray:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArray:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptySlice:\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp := load(ctxptr, code.Idx)\n\t\t\t\tif p == 0 {\n\t\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t\t}\n\t\t\t\t\tcode = code.End.Next\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadArrayPtr, encoder.OpStructPtrHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadArrayPtr, encoder.OpStructHeadSlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyArrayPtr, encoder.OpStructPtrHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyArrayPtr, encoder.OpStructHeadOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p != 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\t}\n\t\t\tif maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalJSON {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tif (code.Flags&encoder.IndirectFlags) != 0 || code.Op == encoder.OpStructPtrHeadOmitEmptyMarshalText {\n\t\t\t\t\tp = ptrToPtr(p)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructPtrHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructPtrHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tstore(ctxptr, code.Idx, ptrToNPtr(p, code.PtrNum))\n\t\t\tfallthrough\n\t\tcase encoder.OpStructHeadOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tif p == 0 && (code.Flags&encoder.IndirectFlags) != 0 {\n\t\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\t}\n\t\t\t\tcode = code.End.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (code.Flags & encoder.IndirectFlags) != 0 {\n\t\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\t}\n\t\t\tif code.Flags&encoder.AnonymousHeadFlags == 0 {\n\t\t\t\tb = appendStructHead(ctx, b)\n\t\t\t}\n\t\t\tif p == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t}\n\t\tcase encoder.OpStructField:\n\t\t\tif code.Flags&encoder.IsTaggedKeyFlags != 0 || code.Flags&encoder.AnonymousKeyFlags == 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t}\n\t\t\tp := load(ctxptr, code.Idx) + uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmpty:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNullComma(ctx, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendComma(ctx, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSON:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tiface := ptrToInterface(code, p)\n\t\t\tif (code.Flags&encoder.NilCheckFlags) != 0 && encoder.IsNilForMarshaler(iface) {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalJSON(ctx, code, b, iface)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalJSONPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalJSON(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalText:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif (code.Flags & encoder.IsNilableTypeFlags) != 0 {\n\t\t\t\tp = ptrToPtr(p)\n\t\t\t}\n\t\t\tif p == 0 && (code.Flags&encoder.NilCheckFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendComma(ctx, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendComma(ctx, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldOmitEmptyMarshalTextPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendMarshalText(ctx, code, b, ptrToInterface(code, p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendComma(ctx, bb)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructFieldArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArray:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldArrayPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyArrayPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlice:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlice:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tslice := ptrToSlice(p)\n\t\t\tif slice.Len == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldSlicePtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptySlicePtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldMap:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMap:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p == 0 || maplen(ptrToUnsafePtr(p)) == 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructFieldMapPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyMapPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToPtr(p + uintptr(code.Offset))\n\t\t\tif p != 0 {\n\t\t\t\tp = ptrToNPtr(p, code.PtrNum)\n\t\t\t}\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t} else {\n\t\t\t\tcode = code.NextField\n\t\t\t}\n\t\tcase encoder.OpStructFieldStruct:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tcode = code.Next\n\t\t\tstore(ctxptr, code.Idx, p)\n\t\tcase encoder.OpStructFieldOmitEmptyStruct:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp += uintptr(code.Offset)\n\t\t\tif ptrToPtr(p) == 0 && (code.Flags&encoder.IsNextOpPtrTypeFlags) != 0 {\n\t\t\t\tcode = code.NextField\n\t\t\t} else {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tstore(ctxptr, code.Idx, p)\n\t\t\t}\n\t\tcase encoder.OpStructEnd:\n\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyInt:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndIntPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyIntPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendInt(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUint:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tu64 := ptrToUint64(p+uintptr(code.Offset), code.NumBitSize)\n\t\t\tv := u64 & ((1 << code.NumBitSize) - 1)\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p+uintptr(code.Offset), code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndUintPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyUintPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendUint(ctx, b, p, code)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat32(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat32PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat32PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat32(ctx, b, ptrToFloat32(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64String:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToFloat64(p + uintptr(code.Offset))\n\t\t\tif v != 0 {\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64Ptr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t\tcode = code.Next\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tv := ptrToFloat64(p)\n\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t}\n\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64Ptr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndFloat64PtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyFloat64PtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tv := ptrToFloat64(p)\n\t\t\t\tif math.IsInf(v, 0) || math.IsNaN(v) {\n\t\t\t\t\treturn nil, errUnsupportedFloat(v)\n\t\t\t\t}\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendFloat64(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendString(ctx, b, ptrToString(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\ts := ptrToString(p + uintptr(code.Offset))\n\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, s)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToString(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, v)))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, ptrToString(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndStringPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyStringPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendString(ctx, b, string(appendString(ctx, []byte{}, ptrToString(p))))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBool:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendBool(ctx, b, ptrToBool(p+uintptr(code.Offset)))\n\t\t\tb = append(b, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBool(p + uintptr(code.Offset))\n\t\t\tif v {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, v)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBoolPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBoolPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendBool(ctx, b, ptrToBool(p))\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p+uintptr(code.Offset)))\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytes:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToBytes(p + uintptr(code.Offset))\n\t\t\tif len(v) > 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, v)\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndBytesPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyBytesPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = appendByteSlice(ctx, b, ptrToBytes(p))\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumber:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tb = append(b, '\"')\n\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p+uintptr(code.Offset)))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = append(bb, '\"')\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tv := ptrToNumber(p + uintptr(code.Offset))\n\t\t\tif v != \"\" {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtr:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = bb\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtr:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendStructEnd(ctx, code, bb)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndNumberPtrString:\n\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p == 0 {\n\t\t\t\tb = appendNull(ctx, b)\n\t\t\t} else {\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t}\n\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\tcode = code.Next\n\t\tcase encoder.OpStructEndOmitEmptyNumberPtrString:\n\t\t\tp := load(ctxptr, code.Idx)\n\t\t\tp = ptrToNPtr(p+uintptr(code.Offset), code.PtrNum)\n\t\t\tif p != 0 {\n\t\t\t\tb = appendStructKey(ctx, code, b)\n\t\t\t\tb = append(b, '\"')\n\t\t\t\tbb, err := appendNumber(ctx, b, ptrToNumber(p))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = append(bb, '\"')\n\t\t\t\tb = appendStructEnd(ctx, code, b)\n\t\t\t} else {\n\t\t\t\tb = appendStructEndSkipLast(ctx, code, b)\n\t\t\t}\n\t\t\tcode = code.Next\n\t\tcase encoder.OpEnd:\n\t\t\tgoto END\n\t\t}\n\t}\nEND:\n\treturn b, nil\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/errors/error.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n)\n\ntype InvalidUTF8Error struct {\n\tS string // the whole string value that caused the error\n}\n\nfunc (e *InvalidUTF8Error) Error() string {\n\treturn fmt.Sprintf(\"json: invalid UTF-8 in string: %s\", strconv.Quote(e.S))\n}\n\ntype InvalidUnmarshalError struct {\n\tType reflect.Type\n}\n\nfunc (e *InvalidUnmarshalError) Error() string {\n\tif e.Type == nil {\n\t\treturn \"json: Unmarshal(nil)\"\n\t}\n\n\tif e.Type.Kind() != reflect.Ptr {\n\t\treturn fmt.Sprintf(\"json: Unmarshal(non-pointer %s)\", e.Type)\n\t}\n\treturn fmt.Sprintf(\"json: Unmarshal(nil %s)\", e.Type)\n}\n\n// A MarshalerError represents an error from calling a MarshalJSON or MarshalText method.\ntype MarshalerError struct {\n\tType       reflect.Type\n\tErr        error\n\tsourceFunc string\n}\n\nfunc (e *MarshalerError) Error() string {\n\tsrcFunc := e.sourceFunc\n\tif srcFunc == \"\" {\n\t\tsrcFunc = \"MarshalJSON\"\n\t}\n\treturn fmt.Sprintf(\"json: error calling %s for type %s: %s\", srcFunc, e.Type, e.Err.Error())\n}\n\n// Unwrap returns the underlying error.\nfunc (e *MarshalerError) Unwrap() error { return e.Err }\n\n// A SyntaxError is a description of a JSON syntax error.\ntype SyntaxError struct {\n\tmsg    string // description of error\n\tOffset int64  // error occurred after reading Offset bytes\n}\n\nfunc (e *SyntaxError) Error() string { return e.msg }\n\n// An UnmarshalFieldError describes a JSON object key that\n// led to an unexported (and therefore unwritable) struct field.\n//\n// Deprecated: No longer used; kept for compatibility.\ntype UnmarshalFieldError struct {\n\tKey   string\n\tType  reflect.Type\n\tField reflect.StructField\n}\n\nfunc (e *UnmarshalFieldError) Error() string {\n\treturn fmt.Sprintf(\"json: cannot unmarshal object key %s into unexported field %s of type %s\",\n\t\tstrconv.Quote(e.Key), e.Field.Name, e.Type.String(),\n\t)\n}\n\n// An UnmarshalTypeError describes a JSON value that was\n// not appropriate for a value of a specific Go type.\ntype UnmarshalTypeError struct {\n\tValue  string       // description of JSON value - \"bool\", \"array\", \"number -5\"\n\tType   reflect.Type // type of Go value it could not be assigned to\n\tOffset int64        // error occurred after reading Offset bytes\n\tStruct string       // name of the struct type containing the field\n\tField  string       // the full path from root node to the field\n}\n\nfunc (e *UnmarshalTypeError) Error() string {\n\tif e.Struct != \"\" || e.Field != \"\" {\n\t\treturn fmt.Sprintf(\"json: cannot unmarshal %s into Go struct field %s.%s of type %s\",\n\t\t\te.Value, e.Struct, e.Field, e.Type,\n\t\t)\n\t}\n\treturn fmt.Sprintf(\"json: cannot unmarshal %s into Go value of type %s\", e.Value, e.Type)\n}\n\n// An UnsupportedTypeError is returned by Marshal when attempting\n// to encode an unsupported value type.\ntype UnsupportedTypeError struct {\n\tType reflect.Type\n}\n\nfunc (e *UnsupportedTypeError) Error() string {\n\treturn fmt.Sprintf(\"json: unsupported type: %s\", e.Type)\n}\n\ntype UnsupportedValueError struct {\n\tValue reflect.Value\n\tStr   string\n}\n\nfunc (e *UnsupportedValueError) Error() string {\n\treturn fmt.Sprintf(\"json: unsupported value: %s\", e.Str)\n}\n\nfunc ErrSyntax(msg string, offset int64) *SyntaxError {\n\treturn &SyntaxError{msg: msg, Offset: offset}\n}\n\nfunc ErrMarshaler(typ reflect.Type, err error, msg string) *MarshalerError {\n\treturn &MarshalerError{\n\t\tType:       typ,\n\t\tErr:        err,\n\t\tsourceFunc: msg,\n\t}\n}\n\nfunc ErrExceededMaxDepth(c byte, cursor int64) *SyntaxError {\n\treturn &SyntaxError{\n\t\tmsg:    fmt.Sprintf(`invalid character \"%c\" exceeded max depth`, c),\n\t\tOffset: cursor,\n\t}\n}\n\nfunc ErrNotAtBeginningOfValue(cursor int64) *SyntaxError {\n\treturn &SyntaxError{msg: \"not at beginning of value\", Offset: cursor}\n}\n\nfunc ErrUnexpectedEndOfJSON(msg string, cursor int64) *SyntaxError {\n\treturn &SyntaxError{\n\t\tmsg:    fmt.Sprintf(\"json: %s unexpected end of JSON input\", msg),\n\t\tOffset: cursor,\n\t}\n}\n\nfunc ErrExpected(msg string, cursor int64) *SyntaxError {\n\treturn &SyntaxError{msg: fmt.Sprintf(\"expected %s\", msg), Offset: cursor}\n}\n\nfunc ErrInvalidCharacter(c byte, context string, cursor int64) *SyntaxError {\n\tif c == 0 {\n\t\treturn &SyntaxError{\n\t\t\tmsg:    fmt.Sprintf(\"json: invalid character as %s\", context),\n\t\t\tOffset: cursor,\n\t\t}\n\t}\n\treturn &SyntaxError{\n\t\tmsg:    fmt.Sprintf(\"json: invalid character %c as %s\", c, context),\n\t\tOffset: cursor,\n\t}\n}\n\nfunc ErrInvalidBeginningOfValue(c byte, cursor int64) *SyntaxError {\n\treturn &SyntaxError{\n\t\tmsg:    fmt.Sprintf(\"invalid character '%c' looking for beginning of value\", c),\n\t\tOffset: cursor,\n\t}\n}\n\ntype PathError struct {\n\tmsg string\n}\n\nfunc (e *PathError) Error() string {\n\treturn fmt.Sprintf(\"json: invalid path format: %s\", e.msg)\n}\n\nfunc ErrInvalidPath(msg string, args ...interface{}) *PathError {\n\tif len(args) != 0 {\n\t\treturn &PathError{msg: fmt.Sprintf(msg, args...)}\n\t}\n\treturn &PathError{msg: msg}\n}\n\nfunc ErrEmptyPath() *PathError {\n\treturn &PathError{msg: \"path is empty\"}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/runtime/rtype.go",
    "content": "package runtime\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\n// Type representing reflect.rtype for noescape trick\ntype Type struct{}\n\n//go:linkname rtype_Align reflect.(*rtype).Align\n//go:noescape\nfunc rtype_Align(*Type) int\n\nfunc (t *Type) Align() int {\n\treturn rtype_Align(t)\n}\n\n//go:linkname rtype_FieldAlign reflect.(*rtype).FieldAlign\n//go:noescape\nfunc rtype_FieldAlign(*Type) int\n\nfunc (t *Type) FieldAlign() int {\n\treturn rtype_FieldAlign(t)\n}\n\n//go:linkname rtype_Method reflect.(*rtype).Method\n//go:noescape\nfunc rtype_Method(*Type, int) reflect.Method\n\nfunc (t *Type) Method(a0 int) reflect.Method {\n\treturn rtype_Method(t, a0)\n}\n\n//go:linkname rtype_MethodByName reflect.(*rtype).MethodByName\n//go:noescape\nfunc rtype_MethodByName(*Type, string) (reflect.Method, bool)\n\nfunc (t *Type) MethodByName(a0 string) (reflect.Method, bool) {\n\treturn rtype_MethodByName(t, a0)\n}\n\n//go:linkname rtype_NumMethod reflect.(*rtype).NumMethod\n//go:noescape\nfunc rtype_NumMethod(*Type) int\n\nfunc (t *Type) NumMethod() int {\n\treturn rtype_NumMethod(t)\n}\n\n//go:linkname rtype_Name reflect.(*rtype).Name\n//go:noescape\nfunc rtype_Name(*Type) string\n\nfunc (t *Type) Name() string {\n\treturn rtype_Name(t)\n}\n\n//go:linkname rtype_PkgPath reflect.(*rtype).PkgPath\n//go:noescape\nfunc rtype_PkgPath(*Type) string\n\nfunc (t *Type) PkgPath() string {\n\treturn rtype_PkgPath(t)\n}\n\n//go:linkname rtype_Size reflect.(*rtype).Size\n//go:noescape\nfunc rtype_Size(*Type) uintptr\n\nfunc (t *Type) Size() uintptr {\n\treturn rtype_Size(t)\n}\n\n//go:linkname rtype_String reflect.(*rtype).String\n//go:noescape\nfunc rtype_String(*Type) string\n\nfunc (t *Type) String() string {\n\treturn rtype_String(t)\n}\n\n//go:linkname rtype_Kind reflect.(*rtype).Kind\n//go:noescape\nfunc rtype_Kind(*Type) reflect.Kind\n\nfunc (t *Type) Kind() reflect.Kind {\n\treturn rtype_Kind(t)\n}\n\n//go:linkname rtype_Implements reflect.(*rtype).Implements\n//go:noescape\nfunc rtype_Implements(*Type, reflect.Type) bool\n\nfunc (t *Type) Implements(u reflect.Type) bool {\n\treturn rtype_Implements(t, u)\n}\n\n//go:linkname rtype_AssignableTo reflect.(*rtype).AssignableTo\n//go:noescape\nfunc rtype_AssignableTo(*Type, reflect.Type) bool\n\nfunc (t *Type) AssignableTo(u reflect.Type) bool {\n\treturn rtype_AssignableTo(t, u)\n}\n\n//go:linkname rtype_ConvertibleTo reflect.(*rtype).ConvertibleTo\n//go:noescape\nfunc rtype_ConvertibleTo(*Type, reflect.Type) bool\n\nfunc (t *Type) ConvertibleTo(u reflect.Type) bool {\n\treturn rtype_ConvertibleTo(t, u)\n}\n\n//go:linkname rtype_Comparable reflect.(*rtype).Comparable\n//go:noescape\nfunc rtype_Comparable(*Type) bool\n\nfunc (t *Type) Comparable() bool {\n\treturn rtype_Comparable(t)\n}\n\n//go:linkname rtype_Bits reflect.(*rtype).Bits\n//go:noescape\nfunc rtype_Bits(*Type) int\n\nfunc (t *Type) Bits() int {\n\treturn rtype_Bits(t)\n}\n\n//go:linkname rtype_ChanDir reflect.(*rtype).ChanDir\n//go:noescape\nfunc rtype_ChanDir(*Type) reflect.ChanDir\n\nfunc (t *Type) ChanDir() reflect.ChanDir {\n\treturn rtype_ChanDir(t)\n}\n\n//go:linkname rtype_IsVariadic reflect.(*rtype).IsVariadic\n//go:noescape\nfunc rtype_IsVariadic(*Type) bool\n\nfunc (t *Type) IsVariadic() bool {\n\treturn rtype_IsVariadic(t)\n}\n\n//go:linkname rtype_Elem reflect.(*rtype).Elem\n//go:noescape\nfunc rtype_Elem(*Type) reflect.Type\n\nfunc (t *Type) Elem() *Type {\n\treturn Type2RType(rtype_Elem(t))\n}\n\n//go:linkname rtype_Field reflect.(*rtype).Field\n//go:noescape\nfunc rtype_Field(*Type, int) reflect.StructField\n\nfunc (t *Type) Field(i int) reflect.StructField {\n\treturn rtype_Field(t, i)\n}\n\n//go:linkname rtype_FieldByIndex reflect.(*rtype).FieldByIndex\n//go:noescape\nfunc rtype_FieldByIndex(*Type, []int) reflect.StructField\n\nfunc (t *Type) FieldByIndex(index []int) reflect.StructField {\n\treturn rtype_FieldByIndex(t, index)\n}\n\n//go:linkname rtype_FieldByName reflect.(*rtype).FieldByName\n//go:noescape\nfunc rtype_FieldByName(*Type, string) (reflect.StructField, bool)\n\nfunc (t *Type) FieldByName(name string) (reflect.StructField, bool) {\n\treturn rtype_FieldByName(t, name)\n}\n\n//go:linkname rtype_FieldByNameFunc reflect.(*rtype).FieldByNameFunc\n//go:noescape\nfunc rtype_FieldByNameFunc(*Type, func(string) bool) (reflect.StructField, bool)\n\nfunc (t *Type) FieldByNameFunc(match func(string) bool) (reflect.StructField, bool) {\n\treturn rtype_FieldByNameFunc(t, match)\n}\n\n//go:linkname rtype_In reflect.(*rtype).In\n//go:noescape\nfunc rtype_In(*Type, int) reflect.Type\n\nfunc (t *Type) In(i int) reflect.Type {\n\treturn rtype_In(t, i)\n}\n\n//go:linkname rtype_Key reflect.(*rtype).Key\n//go:noescape\nfunc rtype_Key(*Type) reflect.Type\n\nfunc (t *Type) Key() *Type {\n\treturn Type2RType(rtype_Key(t))\n}\n\n//go:linkname rtype_Len reflect.(*rtype).Len\n//go:noescape\nfunc rtype_Len(*Type) int\n\nfunc (t *Type) Len() int {\n\treturn rtype_Len(t)\n}\n\n//go:linkname rtype_NumField reflect.(*rtype).NumField\n//go:noescape\nfunc rtype_NumField(*Type) int\n\nfunc (t *Type) NumField() int {\n\treturn rtype_NumField(t)\n}\n\n//go:linkname rtype_NumIn reflect.(*rtype).NumIn\n//go:noescape\nfunc rtype_NumIn(*Type) int\n\nfunc (t *Type) NumIn() int {\n\treturn rtype_NumIn(t)\n}\n\n//go:linkname rtype_NumOut reflect.(*rtype).NumOut\n//go:noescape\nfunc rtype_NumOut(*Type) int\n\nfunc (t *Type) NumOut() int {\n\treturn rtype_NumOut(t)\n}\n\n//go:linkname rtype_Out reflect.(*rtype).Out\n//go:noescape\nfunc rtype_Out(*Type, int) reflect.Type\n\n//go:linkname PtrTo reflect.(*rtype).ptrTo\n//go:noescape\nfunc PtrTo(*Type) *Type\n\nfunc (t *Type) Out(i int) reflect.Type {\n\treturn rtype_Out(t, i)\n}\n\n//go:linkname IfaceIndir reflect.ifaceIndir\n//go:noescape\nfunc IfaceIndir(*Type) bool\n\n//go:linkname RType2Type reflect.toType\n//go:noescape\nfunc RType2Type(t *Type) reflect.Type\n\n//go:nolint structcheck\ntype emptyInterface struct {\n\t_   *Type\n\tptr unsafe.Pointer\n}\n\nfunc Type2RType(t reflect.Type) *Type {\n\treturn (*Type)(((*emptyInterface)(unsafe.Pointer(&t))).ptr)\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/runtime/struct_field.go",
    "content": "package runtime\n\nimport (\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode\"\n)\n\nfunc getTag(field reflect.StructField) string {\n\treturn field.Tag.Get(\"json\")\n}\n\nfunc IsIgnoredStructField(field reflect.StructField) bool {\n\tif field.PkgPath != \"\" {\n\t\tif field.Anonymous {\n\t\t\tt := field.Type\n\t\t\tif t.Kind() == reflect.Ptr {\n\t\t\t\tt = t.Elem()\n\t\t\t}\n\t\t\tif t.Kind() != reflect.Struct {\n\t\t\t\treturn true\n\t\t\t}\n\t\t} else {\n\t\t\t// private field\n\t\t\treturn true\n\t\t}\n\t}\n\ttag := getTag(field)\n\treturn tag == \"-\"\n}\n\ntype StructTag struct {\n\tKey         string\n\tIsTaggedKey bool\n\tIsOmitEmpty bool\n\tIsString    bool\n\tField       reflect.StructField\n}\n\ntype StructTags []*StructTag\n\nfunc (t StructTags) ExistsKey(key string) bool {\n\tfor _, tt := range t {\n\t\tif tt.Key == key {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isValidTag(s string) bool {\n\tif s == \"\" {\n\t\treturn false\n\t}\n\tfor _, c := range s {\n\t\tswitch {\n\t\tcase strings.ContainsRune(\"!#$%&()*+-./:<=>?@[]^_{|}~ \", c):\n\t\t\t// Backslash and quote chars are reserved, but\n\t\t\t// otherwise any punctuation chars are allowed\n\t\t\t// in a tag name.\n\t\tcase !unicode.IsLetter(c) && !unicode.IsDigit(c):\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc StructTagFromField(field reflect.StructField) *StructTag {\n\tkeyName := field.Name\n\ttag := getTag(field)\n\tst := &StructTag{Field: field}\n\topts := strings.Split(tag, \",\")\n\tif len(opts) > 0 {\n\t\tif opts[0] != \"\" && isValidTag(opts[0]) {\n\t\t\tkeyName = opts[0]\n\t\t\tst.IsTaggedKey = true\n\t\t}\n\t}\n\tst.Key = keyName\n\tif len(opts) > 1 {\n\t\tfor _, opt := range opts[1:] {\n\t\t\tswitch opt {\n\t\t\tcase \"omitempty\":\n\t\t\t\tst.IsOmitEmpty = true\n\t\t\tcase \"string\":\n\t\t\t\tst.IsString = true\n\t\t\t}\n\t\t}\n\t}\n\treturn st\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/internal/runtime/type.go",
    "content": "package runtime\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\ntype SliceHeader struct {\n\tData unsafe.Pointer\n\tLen  int\n\tCap  int\n}\n\nconst (\n\tmaxAcceptableTypeAddrRange = 1024 * 1024 * 2 // 2 Mib\n)\n\ntype TypeAddr struct {\n\tBaseTypeAddr uintptr\n\tMaxTypeAddr  uintptr\n\tAddrRange    uintptr\n\tAddrShift    uintptr\n}\n\nvar (\n\ttypeAddr        *TypeAddr\n\talreadyAnalyzed bool\n)\n\n//go:linkname typelinks reflect.typelinks\nfunc typelinks() ([]unsafe.Pointer, [][]int32)\n\n//go:linkname rtypeOff reflect.rtypeOff\nfunc rtypeOff(unsafe.Pointer, int32) unsafe.Pointer\n\nfunc AnalyzeTypeAddr() *TypeAddr {\n\tdefer func() {\n\t\talreadyAnalyzed = true\n\t}()\n\tif alreadyAnalyzed {\n\t\treturn typeAddr\n\t}\n\tsections, offsets := typelinks()\n\tif len(sections) != 1 {\n\t\treturn nil\n\t}\n\tif len(offsets) != 1 {\n\t\treturn nil\n\t}\n\tsection := sections[0]\n\toffset := offsets[0]\n\tvar (\n\t\tmin         uintptr = uintptr(^uint(0))\n\t\tmax         uintptr = 0\n\t\tisAligned64         = true\n\t\tisAligned32         = true\n\t)\n\tfor i := 0; i < len(offset); i++ {\n\t\ttyp := (*Type)(rtypeOff(section, offset[i]))\n\t\taddr := uintptr(unsafe.Pointer(typ))\n\t\tif min > addr {\n\t\t\tmin = addr\n\t\t}\n\t\tif max < addr {\n\t\t\tmax = addr\n\t\t}\n\t\tif typ.Kind() == reflect.Ptr {\n\t\t\taddr = uintptr(unsafe.Pointer(typ.Elem()))\n\t\t\tif min > addr {\n\t\t\t\tmin = addr\n\t\t\t}\n\t\t\tif max < addr {\n\t\t\t\tmax = addr\n\t\t\t}\n\t\t}\n\t\tisAligned64 = isAligned64 && (addr-min)&63 == 0\n\t\tisAligned32 = isAligned32 && (addr-min)&31 == 0\n\t}\n\taddrRange := max - min\n\tif addrRange == 0 {\n\t\treturn nil\n\t}\n\tvar addrShift uintptr\n\tif isAligned64 {\n\t\taddrShift = 6\n\t} else if isAligned32 {\n\t\taddrShift = 5\n\t}\n\tcacheSize := addrRange >> addrShift\n\tif cacheSize > maxAcceptableTypeAddrRange {\n\t\treturn nil\n\t}\n\ttypeAddr = &TypeAddr{\n\t\tBaseTypeAddr: min,\n\t\tMaxTypeAddr:  max,\n\t\tAddrRange:    addrRange,\n\t\tAddrShift:    addrShift,\n\t}\n\treturn typeAddr\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/json.go",
    "content": "package json\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\n// Marshaler is the interface implemented by types that\n// can marshal themselves into valid JSON.\ntype Marshaler interface {\n\tMarshalJSON() ([]byte, error)\n}\n\n// MarshalerContext is the interface implemented by types that\n// can marshal themselves into valid JSON with context.Context.\ntype MarshalerContext interface {\n\tMarshalJSON(context.Context) ([]byte, error)\n}\n\n// Unmarshaler is the interface implemented by types\n// that can unmarshal a JSON description of themselves.\n// The input can be assumed to be a valid encoding of\n// a JSON value. UnmarshalJSON must copy the JSON data\n// if it wishes to retain the data after returning.\n//\n// By convention, to approximate the behavior of Unmarshal itself,\n// Unmarshalers implement UnmarshalJSON([]byte(\"null\")) as a no-op.\ntype Unmarshaler interface {\n\tUnmarshalJSON([]byte) error\n}\n\n// UnmarshalerContext is the interface implemented by types\n// that can unmarshal with context.Context a JSON description of themselves.\ntype UnmarshalerContext interface {\n\tUnmarshalJSON(context.Context, []byte) error\n}\n\n// Marshal returns the JSON encoding of v.\n//\n// Marshal traverses the value v recursively.\n// If an encountered value implements the Marshaler interface\n// and is not a nil pointer, Marshal calls its MarshalJSON method\n// to produce JSON. If no MarshalJSON method is present but the\n// value implements encoding.TextMarshaler instead, Marshal calls\n// its MarshalText method and encodes the result as a JSON string.\n// The nil pointer exception is not strictly necessary\n// but mimics a similar, necessary exception in the behavior of\n// UnmarshalJSON.\n//\n// Otherwise, Marshal uses the following type-dependent default encodings:\n//\n// Boolean values encode as JSON booleans.\n//\n// Floating point, integer, and Number values encode as JSON numbers.\n//\n// String values encode as JSON strings coerced to valid UTF-8,\n// replacing invalid bytes with the Unicode replacement rune.\n// The angle brackets \"<\" and \">\" are escaped to \"\\u003c\" and \"\\u003e\"\n// to keep some browsers from misinterpreting JSON output as HTML.\n// Ampersand \"&\" is also escaped to \"\\u0026\" for the same reason.\n// This escaping can be disabled using an Encoder that had SetEscapeHTML(false)\n// called on it.\n//\n// Array and slice values encode as JSON arrays, except that\n// []byte encodes as a base64-encoded string, and a nil slice\n// encodes as the null JSON value.\n//\n// Struct values encode as JSON objects.\n// Each exported struct field becomes a member of the object, using the\n// field name as the object key, unless the field is omitted for one of the\n// reasons given below.\n//\n// The encoding of each struct field can be customized by the format string\n// stored under the \"json\" key in the struct field's tag.\n// The format string gives the name of the field, possibly followed by a\n// comma-separated list of options. The name may be empty in order to\n// specify options without overriding the default field name.\n//\n// The \"omitempty\" option specifies that the field should be omitted\n// from the encoding if the field has an empty value, defined as\n// false, 0, a nil pointer, a nil interface value, and any empty array,\n// slice, map, or string.\n//\n// As a special case, if the field tag is \"-\", the field is always omitted.\n// Note that a field with name \"-\" can still be generated using the tag \"-,\".\n//\n// Examples of struct field tags and their meanings:\n//\n//   // Field appears in JSON as key \"myName\".\n//   Field int `json:\"myName\"`\n//\n//   // Field appears in JSON as key \"myName\" and\n//   // the field is omitted from the object if its value is empty,\n//   // as defined above.\n//   Field int `json:\"myName,omitempty\"`\n//\n//   // Field appears in JSON as key \"Field\" (the default), but\n//   // the field is skipped if empty.\n//   // Note the leading comma.\n//   Field int `json:\",omitempty\"`\n//\n//   // Field is ignored by this package.\n//   Field int `json:\"-\"`\n//\n//   // Field appears in JSON as key \"-\".\n//   Field int `json:\"-,\"`\n//\n// The \"string\" option signals that a field is stored as JSON inside a\n// JSON-encoded string. It applies only to fields of string, floating point,\n// integer, or boolean types. This extra level of encoding is sometimes used\n// when communicating with JavaScript programs:\n//\n//    Int64String int64 `json:\",string\"`\n//\n// The key name will be used if it's a non-empty string consisting of\n// only Unicode letters, digits, and ASCII punctuation except quotation\n// marks, backslash, and comma.\n//\n// Anonymous struct fields are usually marshaled as if their inner exported fields\n// were fields in the outer struct, subject to the usual Go visibility rules amended\n// as described in the next paragraph.\n// An anonymous struct field with a name given in its JSON tag is treated as\n// having that name, rather than being anonymous.\n// An anonymous struct field of interface type is treated the same as having\n// that type as its name, rather than being anonymous.\n//\n// The Go visibility rules for struct fields are amended for JSON when\n// deciding which field to marshal or unmarshal. If there are\n// multiple fields at the same level, and that level is the least\n// nested (and would therefore be the nesting level selected by the\n// usual Go rules), the following extra rules apply:\n//\n// 1) Of those fields, if any are JSON-tagged, only tagged fields are considered,\n// even if there are multiple untagged fields that would otherwise conflict.\n//\n// 2) If there is exactly one field (tagged or not according to the first rule), that is selected.\n//\n// 3) Otherwise there are multiple fields, and all are ignored; no error occurs.\n//\n// Handling of anonymous struct fields is new in Go 1.1.\n// Prior to Go 1.1, anonymous struct fields were ignored. To force ignoring of\n// an anonymous struct field in both current and earlier versions, give the field\n// a JSON tag of \"-\".\n//\n// Map values encode as JSON objects. The map's key type must either be a\n// string, an integer type, or implement encoding.TextMarshaler. The map keys\n// are sorted and used as JSON object keys by applying the following rules,\n// subject to the UTF-8 coercion described for string values above:\n//   - string keys are used directly\n//   - encoding.TextMarshalers are marshaled\n//   - integer keys are converted to strings\n//\n// Pointer values encode as the value pointed to.\n// A nil pointer encodes as the null JSON value.\n//\n// Interface values encode as the value contained in the interface.\n// A nil interface value encodes as the null JSON value.\n//\n// Channel, complex, and function values cannot be encoded in JSON.\n// Attempting to encode such a value causes Marshal to return\n// an UnsupportedTypeError.\n//\n// JSON cannot represent cyclic data structures and Marshal does not\n// handle them. Passing cyclic structures to Marshal will result in\n// an infinite recursion.\n//\nfunc Marshal(v interface{}) ([]byte, error) {\n\treturn MarshalWithOption(v)\n}\n\n// MarshalNoEscape returns the JSON encoding of v and doesn't escape v.\nfunc MarshalNoEscape(v interface{}) ([]byte, error) {\n\treturn marshalNoEscape(v)\n}\n\n// MarshalContext returns the JSON encoding of v with context.Context and EncodeOption.\nfunc MarshalContext(ctx context.Context, v interface{}, optFuncs ...EncodeOptionFunc) ([]byte, error) {\n\treturn marshalContext(ctx, v, optFuncs...)\n}\n\n// MarshalWithOption returns the JSON encoding of v with EncodeOption.\nfunc MarshalWithOption(v interface{}, optFuncs ...EncodeOptionFunc) ([]byte, error) {\n\treturn marshal(v, optFuncs...)\n}\n\n// MarshalIndent is like Marshal but applies Indent to format the output.\n// Each JSON element in the output will begin on a new line beginning with prefix\n// followed by one or more copies of indent according to the indentation nesting.\nfunc MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {\n\treturn MarshalIndentWithOption(v, prefix, indent)\n}\n\n// MarshalIndentWithOption is like Marshal but applies Indent to format the output with EncodeOption.\nfunc MarshalIndentWithOption(v interface{}, prefix, indent string, optFuncs ...EncodeOptionFunc) ([]byte, error) {\n\treturn marshalIndent(v, prefix, indent, optFuncs...)\n}\n\n// Unmarshal parses the JSON-encoded data and stores the result\n// in the value pointed to by v. If v is nil or not a pointer,\n// Unmarshal returns an InvalidUnmarshalError.\n//\n// Unmarshal uses the inverse of the encodings that\n// Marshal uses, allocating maps, slices, and pointers as necessary,\n// with the following additional rules:\n//\n// To unmarshal JSON into a pointer, Unmarshal first handles the case of\n// the JSON being the JSON literal null. In that case, Unmarshal sets\n// the pointer to nil. Otherwise, Unmarshal unmarshals the JSON into\n// the value pointed at by the pointer. If the pointer is nil, Unmarshal\n// allocates a new value for it to point to.\n//\n// To unmarshal JSON into a value implementing the Unmarshaler interface,\n// Unmarshal calls that value's UnmarshalJSON method, including\n// when the input is a JSON null.\n// Otherwise, if the value implements encoding.TextUnmarshaler\n// and the input is a JSON quoted string, Unmarshal calls that value's\n// UnmarshalText method with the unquoted form of the string.\n//\n// To unmarshal JSON into a struct, Unmarshal matches incoming object\n// keys to the keys used by Marshal (either the struct field name or its tag),\n// preferring an exact match but also accepting a case-insensitive match. By\n// default, object keys which don't have a corresponding struct field are\n// ignored (see Decoder.DisallowUnknownFields for an alternative).\n//\n// To unmarshal JSON into an interface value,\n// Unmarshal stores one of these in the interface value:\n//\n//\tbool, for JSON booleans\n//\tfloat64, for JSON numbers\n//\tstring, for JSON strings\n//\t[]interface{}, for JSON arrays\n//\tmap[string]interface{}, for JSON objects\n//\tnil for JSON null\n//\n// To unmarshal a JSON array into a slice, Unmarshal resets the slice length\n// to zero and then appends each element to the slice.\n// As a special case, to unmarshal an empty JSON array into a slice,\n// Unmarshal replaces the slice with a new empty slice.\n//\n// To unmarshal a JSON array into a Go array, Unmarshal decodes\n// JSON array elements into corresponding Go array elements.\n// If the Go array is smaller than the JSON array,\n// the additional JSON array elements are discarded.\n// If the JSON array is smaller than the Go array,\n// the additional Go array elements are set to zero values.\n//\n// To unmarshal a JSON object into a map, Unmarshal first establishes a map to\n// use. If the map is nil, Unmarshal allocates a new map. Otherwise Unmarshal\n// reuses the existing map, keeping existing entries. Unmarshal then stores\n// key-value pairs from the JSON object into the map. The map's key type must\n// either be any string type, an integer, implement json.Unmarshaler, or\n// implement encoding.TextUnmarshaler.\n//\n// If a JSON value is not appropriate for a given target type,\n// or if a JSON number overflows the target type, Unmarshal\n// skips that field and completes the unmarshaling as best it can.\n// If no more serious errors are encountered, Unmarshal returns\n// an UnmarshalTypeError describing the earliest such error. In any\n// case, it's not guaranteed that all the remaining fields following\n// the problematic one will be unmarshaled into the target object.\n//\n// The JSON null value unmarshals into an interface, map, pointer, or slice\n// by setting that Go value to nil. Because null is often used in JSON to mean\n// ``not present,'' unmarshaling a JSON null into any other Go type has no effect\n// on the value and produces no error.\n//\n// When unmarshaling quoted strings, invalid UTF-8 or\n// invalid UTF-16 surrogate pairs are not treated as an error.\n// Instead, they are replaced by the Unicode replacement\n// character U+FFFD.\n//\nfunc Unmarshal(data []byte, v interface{}) error {\n\treturn unmarshal(data, v)\n}\n\n// UnmarshalContext parses the JSON-encoded data and stores the result\n// in the value pointed to by v. If you implement the UnmarshalerContext interface,\n// call it with ctx as an argument.\nfunc UnmarshalContext(ctx context.Context, data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {\n\treturn unmarshalContext(ctx, data, v)\n}\n\nfunc UnmarshalWithOption(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {\n\treturn unmarshal(data, v, optFuncs...)\n}\n\nfunc UnmarshalNoEscape(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {\n\treturn unmarshalNoEscape(data, v, optFuncs...)\n}\n\n// A Token holds a value of one of these types:\n//\n//\tDelim, for the four JSON delimiters [ ] { }\n//\tbool, for JSON booleans\n//\tfloat64, for JSON numbers\n//\tNumber, for JSON numbers\n//\tstring, for JSON string literals\n//\tnil, for JSON null\n//\ntype Token = json.Token\n\n// A Number represents a JSON number literal.\ntype Number = json.Number\n\n// RawMessage is a raw encoded JSON value.\n// It implements Marshaler and Unmarshaler and can\n// be used to delay JSON decoding or precompute a JSON encoding.\ntype RawMessage = json.RawMessage\n\n// A Delim is a JSON array or object delimiter, one of [ ] { or }.\ntype Delim = json.Delim\n\n// Compact appends to dst the JSON-encoded src with\n// insignificant space characters elided.\nfunc Compact(dst *bytes.Buffer, src []byte) error {\n\treturn encoder.Compact(dst, src, false)\n}\n\n// Indent appends to dst an indented form of the JSON-encoded src.\n// Each element in a JSON object or array begins on a new,\n// indented line beginning with prefix followed by one or more\n// copies of indent according to the indentation nesting.\n// The data appended to dst does not begin with the prefix nor\n// any indentation, to make it easier to embed inside other formatted JSON data.\n// Although leading space characters (space, tab, carriage return, newline)\n// at the beginning of src are dropped, trailing space characters\n// at the end of src are preserved and copied to dst.\n// For example, if src has no trailing spaces, neither will dst;\n// if src ends in a trailing newline, so will dst.\nfunc Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error {\n\treturn encoder.Indent(dst, src, prefix, indent)\n}\n\n// HTMLEscape appends to dst the JSON-encoded src with <, >, &, U+2028 and U+2029\n// characters inside string literals changed to \\u003c, \\u003e, \\u0026, \\u2028, \\u2029\n// so that the JSON will be safe to embed inside HTML <script> tags.\n// For historical reasons, web browsers don't honor standard HTML\n// escaping within <script> tags, so an alternative JSON encoding must\n// be used.\nfunc HTMLEscape(dst *bytes.Buffer, src []byte) {\n\tvar v interface{}\n\tdec := NewDecoder(bytes.NewBuffer(src))\n\tdec.UseNumber()\n\tif err := dec.Decode(&v); err != nil {\n\t\treturn\n\t}\n\tbuf, _ := marshal(v)\n\tdst.Write(buf)\n}\n\n// Valid reports whether data is a valid JSON encoding.\nfunc Valid(data []byte) bool {\n\tvar v interface{}\n\tdecoder := NewDecoder(bytes.NewReader(data))\n\terr := decoder.Decode(&v)\n\tif err != nil {\n\t\treturn false\n\t}\n\tif !decoder.More() {\n\t\treturn true\n\t}\n\treturn decoder.InputOffset() >= int64(len(data))\n}\n\nfunc init() {\n\tencoder.Marshal = Marshal\n\tencoder.Unmarshal = Unmarshal\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/option.go",
    "content": "package json\n\nimport (\n\t\"io\"\n\n\t\"github.com/goccy/go-json/internal/decoder\"\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\ntype EncodeOption = encoder.Option\ntype EncodeOptionFunc func(*EncodeOption)\n\n// UnorderedMap doesn't sort when encoding map type.\nfunc UnorderedMap() EncodeOptionFunc {\n\treturn func(opt *EncodeOption) {\n\t\topt.Flag |= encoder.UnorderedMapOption\n\t}\n}\n\n// DisableHTMLEscape disables escaping of HTML characters ( '&', '<', '>' ) when encoding string.\nfunc DisableHTMLEscape() EncodeOptionFunc {\n\treturn func(opt *EncodeOption) {\n\t\topt.Flag &= ^encoder.HTMLEscapeOption\n\t}\n}\n\n// DisableNormalizeUTF8\n// By default, when encoding string, UTF8 characters in the range of 0x80 - 0xFF are processed by applying \\ufffd for invalid code and escaping for \\u2028 and \\u2029.\n// This option disables this behaviour. You can expect faster speeds by applying this option, but be careful.\n// encoding/json implements here: https://github.com/golang/go/blob/6178d25fc0b28724b1b5aec2b1b74fc06d9294c7/src/encoding/json/encode.go#L1067-L1093.\nfunc DisableNormalizeUTF8() EncodeOptionFunc {\n\treturn func(opt *EncodeOption) {\n\t\topt.Flag &= ^encoder.NormalizeUTF8Option\n\t}\n}\n\n// Debug outputs debug information when panic occurs during encoding.\nfunc Debug() EncodeOptionFunc {\n\treturn func(opt *EncodeOption) {\n\t\topt.Flag |= encoder.DebugOption\n\t}\n}\n\n// DebugWith sets the destination to write debug messages.\nfunc DebugWith(w io.Writer) EncodeOptionFunc {\n\treturn func(opt *EncodeOption) {\n\t\topt.DebugOut = w\n\t}\n}\n\n// DebugDOT sets the destination to write opcodes graph.\nfunc DebugDOT(w io.WriteCloser) EncodeOptionFunc {\n\treturn func(opt *EncodeOption) {\n\t\topt.DebugDOTOut = w\n\t}\n}\n\n// Colorize add an identifier for coloring to the string of the encoded result.\nfunc Colorize(scheme *ColorScheme) EncodeOptionFunc {\n\treturn func(opt *EncodeOption) {\n\t\topt.Flag |= encoder.ColorizeOption\n\t\topt.ColorScheme = scheme\n\t}\n}\n\ntype DecodeOption = decoder.Option\ntype DecodeOptionFunc func(*DecodeOption)\n\n// DecodeFieldPriorityFirstWin\n// in the default behavior, go-json, like encoding/json,\n// will reflect the result of the last evaluation when a field with the same name exists.\n// This option allow you to change this behavior.\n// this option reflects the result of the first evaluation if a field with the same name exists.\n// This behavior has a performance advantage as it allows the subsequent strings to be skipped if all fields have been evaluated.\nfunc DecodeFieldPriorityFirstWin() DecodeOptionFunc {\n\treturn func(opt *DecodeOption) {\n\t\topt.Flags |= decoder.FirstWinOption\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/path.go",
    "content": "package json\n\nimport (\n\t\"reflect\"\n\n\t\"github.com/goccy/go-json/internal/decoder\"\n)\n\n// CreatePath creates JSON Path.\n//\n// JSON Path rule\n// $   : root object or element. The JSON Path format must start with this operator, which refers to the outermost level of the JSON-formatted string.\n// .   : child operator. You can identify child values using dot-notation.\n// ..  : recursive descent.\n// []  : subscript operator. If the JSON object is an array, you can use brackets to specify the array index.\n// [*] : all objects/elements for array.\n//\n// Reserved words must be properly escaped when included in Path.\n//\n// Escape Rule\n// single quote style escape: e.g.) `$['a.b'].c`\n// double quote style escape: e.g.) `$.\"a.b\".c`\nfunc CreatePath(p string) (*Path, error) {\n\tpath, err := decoder.PathString(p).Build()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Path{path: path}, nil\n}\n\n// Path represents JSON Path.\ntype Path struct {\n\tpath *decoder.Path\n}\n\n// RootSelectorOnly whether only the root selector ($) is used.\nfunc (p *Path) RootSelectorOnly() bool {\n\treturn p.path.RootSelectorOnly\n}\n\n// UsedSingleQuotePathSelector whether single quote-based escaping was done when building the JSON Path.\nfunc (p *Path) UsedSingleQuotePathSelector() bool {\n\treturn p.path.SingleQuotePathSelector\n}\n\n// UsedSingleQuotePathSelector whether double quote-based escaping was done when building the JSON Path.\nfunc (p *Path) UsedDoubleQuotePathSelector() bool {\n\treturn p.path.DoubleQuotePathSelector\n}\n\n// Extract extracts a specific JSON string.\nfunc (p *Path) Extract(data []byte, optFuncs ...DecodeOptionFunc) ([][]byte, error) {\n\treturn extractFromPath(p, data, optFuncs...)\n}\n\n// PathString returns original JSON Path string.\nfunc (p *Path) PathString() string {\n\treturn p.path.String()\n}\n\n// Unmarshal extract and decode the value of the part corresponding to JSON Path from the input data.\nfunc (p *Path) Unmarshal(data []byte, v interface{}, optFuncs ...DecodeOptionFunc) error {\n\tcontents, err := extractFromPath(p, data, optFuncs...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tresults := make([]interface{}, 0, len(contents))\n\tfor _, content := range contents {\n\t\tvar result interface{}\n\t\tif err := Unmarshal(content, &result); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tresults = append(results, result)\n\t}\n\tif err := decoder.AssignValue(reflect.ValueOf(results), reflect.ValueOf(v)); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Get extract and substitute the value of the part corresponding to JSON Path from the input value.\nfunc (p *Path) Get(src, dst interface{}) error {\n\treturn p.path.Get(reflect.ValueOf(src), reflect.ValueOf(dst))\n}\n"
  },
  {
    "path": "vendor/github.com/goccy/go-json/query.go",
    "content": "package json\n\nimport (\n\t\"github.com/goccy/go-json/internal/encoder\"\n)\n\ntype (\n\t// FieldQuery you can dynamically filter the fields in the structure by creating a FieldQuery,\n\t// adding it to context.Context using SetFieldQueryToContext and then passing it to MarshalContext.\n\t// This is a type-safe operation, so it is faster than filtering using map[string]interface{}.\n\tFieldQuery       = encoder.FieldQuery\n\tFieldQueryString = encoder.FieldQueryString\n)\n\nvar (\n\t// FieldQueryFromContext get current FieldQuery from context.Context.\n\tFieldQueryFromContext = encoder.FieldQueryFromContext\n\t// SetFieldQueryToContext set current FieldQuery to context.Context.\n\tSetFieldQueryToContext = encoder.SetFieldQueryToContext\n)\n\n// BuildFieldQuery builds FieldQuery by fieldName or sub field query.\n// First, specify the field name that you want to keep in structure type.\n// If the field you want to keep is a structure type, by creating a sub field query using BuildSubFieldQuery,\n// you can select the fields you want to keep in the structure.\n// This description can be written recursively.\nfunc BuildFieldQuery(fields ...FieldQueryString) (*FieldQuery, error) {\n\tquery, err := Marshal(fields)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn FieldQueryString(query).Build()\n}\n\n// BuildSubFieldQuery builds sub field query.\nfunc BuildSubFieldQuery(name string) *SubFieldQuery {\n\treturn &SubFieldQuery{name: name}\n}\n\ntype SubFieldQuery struct {\n\tname string\n}\n\nfunc (q *SubFieldQuery) Fields(fields ...FieldQueryString) FieldQueryString {\n\tquery, _ := Marshal(map[string][]FieldQueryString{q.name: fields})\n\treturn FieldQueryString(query)\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/AUTHORS",
    "content": "# This is the official list of GoGo authors for copyright purposes.\n# This file is distinct from the CONTRIBUTORS file, which\n# lists people.  For example, employees are listed in CONTRIBUTORS,\n# but not in AUTHORS, because the employer holds the copyright.\n\n# Names should be added to this file as one of\n#     Organization's name\n#     Individual's name <submission email address>\n#     Individual's name <submission email address> <email2> <emailN>\n\n# Please keep the list sorted.\n\nSendgrid, Inc\nVastech SA (PTY) LTD\nWalter Schulze <awalterschulze@gmail.com>\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/CONTRIBUTORS",
    "content": "Anton Povarov <anton.povarov@gmail.com>\nBrian Goff <cpuguy83@gmail.com>\nClayton Coleman <ccoleman@redhat.com>\nDenis Smirnov <denis.smirnov.91@gmail.com>\nDongYun Kang <ceram1000@gmail.com>\nDwayne Schultz <dschultz@pivotal.io>\nGeorg Apitz <gapitz@pivotal.io>\nGustav Paul <gustav.paul@gmail.com>\nJohan Brandhorst <johan.brandhorst@gmail.com>\nJohn Shahid <jvshahid@gmail.com>\nJohn Tuley <john@tuley.org>\nLaurent <laurent@adyoulike.com>\nPatrick Lee <patrick@dropbox.com>\nPeter Edge <peter.edge@gmail.com>\nRoger Johansson <rogeralsing@gmail.com>\nSam Nguyen <sam.nguyen@sendgrid.com>\nSergio Arbeo <serabe@gmail.com>\nStephen J Day <stephen.day@docker.com>\nTamir Duberstein <tamird@gmail.com>\nTodd Eisenberger <teisenberger@dropbox.com>\nTormod Erevik Lea <tormodlea@gmail.com>\nVyacheslav Kim <kane@sendgrid.com>\nWalter Schulze <awalterschulze@gmail.com>\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/LICENSE",
    "content": "Copyright (c) 2013, The GoGo Authors. All rights reserved.\n\nProtocol Buffers for Go with Gadgets\n\nGo support for Protocol Buffers - Google's data interchange format\n\nCopyright 2010 The Go Authors.  All rights reserved.\nhttps://github.com/golang/protobuf\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\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/Makefile",
    "content": "# Go support for Protocol Buffers - Google's data interchange format\n#\n# Copyright 2010 The Go Authors.  All rights reserved.\n# https://github.com/golang/protobuf\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above\n# copyright notice, this list of conditions and the following disclaimer\n# in the documentation and/or other materials provided with the\n# distribution.\n#     * Neither the name of Google Inc. nor the names of its\n# contributors may be used to endorse or promote products derived from\n# this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n# \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\ninstall:\n\tgo install\n\ntest: install generate-test-pbs\n\tgo test\n\n\ngenerate-test-pbs:\n\tmake install\n\tmake -C test_proto\n\tmake -C proto3_proto\n\tmake\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/clone.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2011 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Protocol buffer deep copy and merge.\n// TODO: RawMessage.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// Clone returns a deep copy of a protocol buffer.\nfunc Clone(src Message) Message {\n\tin := reflect.ValueOf(src)\n\tif in.IsNil() {\n\t\treturn src\n\t}\n\tout := reflect.New(in.Type().Elem())\n\tdst := out.Interface().(Message)\n\tMerge(dst, src)\n\treturn dst\n}\n\n// Merger is the interface representing objects that can merge messages of the same type.\ntype Merger interface {\n\t// Merge merges src into this message.\n\t// Required and optional fields that are set in src will be set to that value in dst.\n\t// Elements of repeated fields will be appended.\n\t//\n\t// Merge may panic if called with a different argument type than the receiver.\n\tMerge(src Message)\n}\n\n// generatedMerger is the custom merge method that generated protos will have.\n// We must add this method since a generate Merge method will conflict with\n// many existing protos that have a Merge data field already defined.\ntype generatedMerger interface {\n\tXXX_Merge(src Message)\n}\n\n// Merge merges src into dst.\n// Required and optional fields that are set in src will be set to that value in dst.\n// Elements of repeated fields will be appended.\n// Merge panics if src and dst are not the same type, or if dst is nil.\nfunc Merge(dst, src Message) {\n\tif m, ok := dst.(Merger); ok {\n\t\tm.Merge(src)\n\t\treturn\n\t}\n\n\tin := reflect.ValueOf(src)\n\tout := reflect.ValueOf(dst)\n\tif out.IsNil() {\n\t\tpanic(\"proto: nil destination\")\n\t}\n\tif in.Type() != out.Type() {\n\t\tpanic(fmt.Sprintf(\"proto.Merge(%T, %T) type mismatch\", dst, src))\n\t}\n\tif in.IsNil() {\n\t\treturn // Merge from nil src is a noop\n\t}\n\tif m, ok := dst.(generatedMerger); ok {\n\t\tm.XXX_Merge(src)\n\t\treturn\n\t}\n\tmergeStruct(out.Elem(), in.Elem())\n}\n\nfunc mergeStruct(out, in reflect.Value) {\n\tsprop := GetProperties(in.Type())\n\tfor i := 0; i < in.NumField(); i++ {\n\t\tf := in.Type().Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tmergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i])\n\t}\n\n\tif emIn, ok := in.Addr().Interface().(extensionsBytes); ok {\n\t\temOut := out.Addr().Interface().(extensionsBytes)\n\t\tbIn := emIn.GetExtensions()\n\t\tbOut := emOut.GetExtensions()\n\t\t*bOut = append(*bOut, *bIn...)\n\t} else if emIn, err := extendable(in.Addr().Interface()); err == nil {\n\t\temOut, _ := extendable(out.Addr().Interface())\n\t\tmIn, muIn := emIn.extensionsRead()\n\t\tif mIn != nil {\n\t\t\tmOut := emOut.extensionsWrite()\n\t\t\tmuIn.Lock()\n\t\t\tmergeExtension(mOut, mIn)\n\t\t\tmuIn.Unlock()\n\t\t}\n\t}\n\n\tuf := in.FieldByName(\"XXX_unrecognized\")\n\tif !uf.IsValid() {\n\t\treturn\n\t}\n\tuin := uf.Bytes()\n\tif len(uin) > 0 {\n\t\tout.FieldByName(\"XXX_unrecognized\").SetBytes(append([]byte(nil), uin...))\n\t}\n}\n\n// mergeAny performs a merge between two values of the same type.\n// viaPtr indicates whether the values were indirected through a pointer (implying proto2).\n// prop is set if this is a struct field (it may be nil).\nfunc mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {\n\tif in.Type() == protoMessageType {\n\t\tif !in.IsNil() {\n\t\t\tif out.IsNil() {\n\t\t\t\tout.Set(reflect.ValueOf(Clone(in.Interface().(Message))))\n\t\t\t} else {\n\t\t\t\tMerge(out.Interface().(Message), in.Interface().(Message))\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\tswitch in.Kind() {\n\tcase reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,\n\t\treflect.String, reflect.Uint32, reflect.Uint64:\n\t\tif !viaPtr && isProto3Zero(in) {\n\t\t\treturn\n\t\t}\n\t\tout.Set(in)\n\tcase reflect.Interface:\n\t\t// Probably a oneof field; copy non-nil values.\n\t\tif in.IsNil() {\n\t\t\treturn\n\t\t}\n\t\t// Allocate destination if it is not set, or set to a different type.\n\t\t// Otherwise we will merge as normal.\n\t\tif out.IsNil() || out.Elem().Type() != in.Elem().Type() {\n\t\t\tout.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T)\n\t\t}\n\t\tmergeAny(out.Elem(), in.Elem(), false, nil)\n\tcase reflect.Map:\n\t\tif in.Len() == 0 {\n\t\t\treturn\n\t\t}\n\t\tif out.IsNil() {\n\t\t\tout.Set(reflect.MakeMap(in.Type()))\n\t\t}\n\t\t// For maps with value types of *T or []byte we need to deep copy each value.\n\t\telemKind := in.Type().Elem().Kind()\n\t\tfor _, key := range in.MapKeys() {\n\t\t\tvar val reflect.Value\n\t\t\tswitch elemKind {\n\t\t\tcase reflect.Ptr:\n\t\t\t\tval = reflect.New(in.Type().Elem().Elem())\n\t\t\t\tmergeAny(val, in.MapIndex(key), false, nil)\n\t\t\tcase reflect.Slice:\n\t\t\t\tval = in.MapIndex(key)\n\t\t\t\tval = reflect.ValueOf(append([]byte{}, val.Bytes()...))\n\t\t\tdefault:\n\t\t\t\tval = in.MapIndex(key)\n\t\t\t}\n\t\t\tout.SetMapIndex(key, val)\n\t\t}\n\tcase reflect.Ptr:\n\t\tif in.IsNil() {\n\t\t\treturn\n\t\t}\n\t\tif out.IsNil() {\n\t\t\tout.Set(reflect.New(in.Elem().Type()))\n\t\t}\n\t\tmergeAny(out.Elem(), in.Elem(), true, nil)\n\tcase reflect.Slice:\n\t\tif in.IsNil() {\n\t\t\treturn\n\t\t}\n\t\tif in.Type().Elem().Kind() == reflect.Uint8 {\n\t\t\t// []byte is a scalar bytes field, not a repeated field.\n\n\t\t\t// Edge case: if this is in a proto3 message, a zero length\n\t\t\t// bytes field is considered the zero value, and should not\n\t\t\t// be merged.\n\t\t\tif prop != nil && prop.proto3 && in.Len() == 0 {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Make a deep copy.\n\t\t\t// Append to []byte{} instead of []byte(nil) so that we never end up\n\t\t\t// with a nil result.\n\t\t\tout.SetBytes(append([]byte{}, in.Bytes()...))\n\t\t\treturn\n\t\t}\n\t\tn := in.Len()\n\t\tif out.IsNil() {\n\t\t\tout.Set(reflect.MakeSlice(in.Type(), 0, n))\n\t\t}\n\t\tswitch in.Type().Elem().Kind() {\n\t\tcase reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,\n\t\t\treflect.String, reflect.Uint32, reflect.Uint64:\n\t\t\tout.Set(reflect.AppendSlice(out, in))\n\t\tdefault:\n\t\t\tfor i := 0; i < n; i++ {\n\t\t\t\tx := reflect.Indirect(reflect.New(in.Type().Elem()))\n\t\t\t\tmergeAny(x, in.Index(i), false, nil)\n\t\t\t\tout.Set(reflect.Append(out, x))\n\t\t\t}\n\t\t}\n\tcase reflect.Struct:\n\t\tmergeStruct(out, in)\n\tdefault:\n\t\t// unknown type, so not a protocol buffer\n\t\tlog.Printf(\"proto: don't know how to copy %v\", in)\n\t}\n}\n\nfunc mergeExtension(out, in map[int32]Extension) {\n\tfor extNum, eIn := range in {\n\t\teOut := Extension{desc: eIn.desc}\n\t\tif eIn.value != nil {\n\t\t\tv := reflect.New(reflect.TypeOf(eIn.value)).Elem()\n\t\t\tmergeAny(v, reflect.ValueOf(eIn.value), false, nil)\n\t\t\teOut.value = v.Interface()\n\t\t}\n\t\tif eIn.enc != nil {\n\t\t\teOut.enc = make([]byte, len(eIn.enc))\n\t\t\tcopy(eOut.enc, eIn.enc)\n\t\t}\n\n\t\tout[extNum] = eOut\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/custom_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport \"reflect\"\n\ntype custom interface {\n\tMarshal() ([]byte, error)\n\tUnmarshal(data []byte) error\n\tSize() int\n}\n\nvar customType = reflect.TypeOf((*custom)(nil)).Elem()\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/decode.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Routines for decoding protocol buffer data to construct in-memory representations.\n */\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// errOverflow is returned when an integer is too large to be represented.\nvar errOverflow = errors.New(\"proto: integer overflow\")\n\n// ErrInternalBadWireType is returned by generated code when an incorrect\n// wire type is encountered. It does not get returned to user code.\nvar ErrInternalBadWireType = errors.New(\"proto: internal error: bad wiretype for oneof\")\n\n// DecodeVarint reads a varint-encoded integer from the slice.\n// It returns the integer and the number of bytes consumed, or\n// zero if there is not enough.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\nfunc DecodeVarint(buf []byte) (x uint64, n int) {\n\tfor shift := uint(0); shift < 64; shift += 7 {\n\t\tif n >= len(buf) {\n\t\t\treturn 0, 0\n\t\t}\n\t\tb := uint64(buf[n])\n\t\tn++\n\t\tx |= (b & 0x7F) << shift\n\t\tif (b & 0x80) == 0 {\n\t\t\treturn x, n\n\t\t}\n\t}\n\n\t// The number is too large to represent in a 64-bit value.\n\treturn 0, 0\n}\n\nfunc (p *Buffer) decodeVarintSlow() (x uint64, err error) {\n\ti := p.index\n\tl := len(p.buf)\n\n\tfor shift := uint(0); shift < 64; shift += 7 {\n\t\tif i >= l {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t\treturn\n\t\t}\n\t\tb := p.buf[i]\n\t\ti++\n\t\tx |= (uint64(b) & 0x7F) << shift\n\t\tif b < 0x80 {\n\t\t\tp.index = i\n\t\t\treturn\n\t\t}\n\t}\n\n\t// The number is too large to represent in a 64-bit value.\n\terr = errOverflow\n\treturn\n}\n\n// DecodeVarint reads a varint-encoded integer from the Buffer.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\nfunc (p *Buffer) DecodeVarint() (x uint64, err error) {\n\ti := p.index\n\tbuf := p.buf\n\n\tif i >= len(buf) {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t} else if buf[i] < 0x80 {\n\t\tp.index++\n\t\treturn uint64(buf[i]), nil\n\t} else if len(buf)-i < 10 {\n\t\treturn p.decodeVarintSlow()\n\t}\n\n\tvar b uint64\n\t// we already checked the first byte\n\tx = uint64(buf[i]) - 0x80\n\ti++\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 7\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 7\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 14\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 14\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 21\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 21\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 28\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 28\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 35\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 35\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 42\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 42\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 49\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 49\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 56\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 56\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 63\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\n\treturn 0, errOverflow\n\ndone:\n\tp.index = i\n\treturn x, nil\n}\n\n// DecodeFixed64 reads a 64-bit integer from the Buffer.\n// This is the format for the\n// fixed64, sfixed64, and double protocol buffer types.\nfunc (p *Buffer) DecodeFixed64() (x uint64, err error) {\n\t// x, err already 0\n\ti := p.index + 8\n\tif i < 0 || i > len(p.buf) {\n\t\terr = io.ErrUnexpectedEOF\n\t\treturn\n\t}\n\tp.index = i\n\n\tx = uint64(p.buf[i-8])\n\tx |= uint64(p.buf[i-7]) << 8\n\tx |= uint64(p.buf[i-6]) << 16\n\tx |= uint64(p.buf[i-5]) << 24\n\tx |= uint64(p.buf[i-4]) << 32\n\tx |= uint64(p.buf[i-3]) << 40\n\tx |= uint64(p.buf[i-2]) << 48\n\tx |= uint64(p.buf[i-1]) << 56\n\treturn\n}\n\n// DecodeFixed32 reads a 32-bit integer from the Buffer.\n// This is the format for the\n// fixed32, sfixed32, and float protocol buffer types.\nfunc (p *Buffer) DecodeFixed32() (x uint64, err error) {\n\t// x, err already 0\n\ti := p.index + 4\n\tif i < 0 || i > len(p.buf) {\n\t\terr = io.ErrUnexpectedEOF\n\t\treturn\n\t}\n\tp.index = i\n\n\tx = uint64(p.buf[i-4])\n\tx |= uint64(p.buf[i-3]) << 8\n\tx |= uint64(p.buf[i-2]) << 16\n\tx |= uint64(p.buf[i-1]) << 24\n\treturn\n}\n\n// DecodeZigzag64 reads a zigzag-encoded 64-bit integer\n// from the Buffer.\n// This is the format used for the sint64 protocol buffer type.\nfunc (p *Buffer) DecodeZigzag64() (x uint64, err error) {\n\tx, err = p.DecodeVarint()\n\tif err != nil {\n\t\treturn\n\t}\n\tx = (x >> 1) ^ uint64((int64(x&1)<<63)>>63)\n\treturn\n}\n\n// DecodeZigzag32 reads a zigzag-encoded 32-bit integer\n// from  the Buffer.\n// This is the format used for the sint32 protocol buffer type.\nfunc (p *Buffer) DecodeZigzag32() (x uint64, err error) {\n\tx, err = p.DecodeVarint()\n\tif err != nil {\n\t\treturn\n\t}\n\tx = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31))\n\treturn\n}\n\n// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.\n// This is the format used for the bytes protocol buffer\n// type and for embedded messages.\nfunc (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {\n\tn, err := p.DecodeVarint()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnb := int(n)\n\tif nb < 0 {\n\t\treturn nil, fmt.Errorf(\"proto: bad byte length %d\", nb)\n\t}\n\tend := p.index + nb\n\tif end < p.index || end > len(p.buf) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\n\tif !alloc {\n\t\t// todo: check if can get more uses of alloc=false\n\t\tbuf = p.buf[p.index:end]\n\t\tp.index += nb\n\t\treturn\n\t}\n\n\tbuf = make([]byte, nb)\n\tcopy(buf, p.buf[p.index:])\n\tp.index += nb\n\treturn\n}\n\n// DecodeStringBytes reads an encoded string from the Buffer.\n// This is the format used for the proto2 string type.\nfunc (p *Buffer) DecodeStringBytes() (s string, err error) {\n\tbuf, err := p.DecodeRawBytes(false)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn string(buf), nil\n}\n\n// Unmarshaler is the interface representing objects that can\n// unmarshal themselves.  The argument points to data that may be\n// overwritten, so implementations should not keep references to the\n// buffer.\n// Unmarshal implementations should not clear the receiver.\n// Any unmarshaled data should be merged into the receiver.\n// Callers of Unmarshal that do not want to retain existing data\n// should Reset the receiver before calling Unmarshal.\ntype Unmarshaler interface {\n\tUnmarshal([]byte) error\n}\n\n// newUnmarshaler is the interface representing objects that can\n// unmarshal themselves. The semantics are identical to Unmarshaler.\n//\n// This exists to support protoc-gen-go generated messages.\n// The proto package will stop type-asserting to this interface in the future.\n//\n// DO NOT DEPEND ON THIS.\ntype newUnmarshaler interface {\n\tXXX_Unmarshal([]byte) error\n}\n\n// Unmarshal parses the protocol buffer representation in buf and places the\n// decoded result in pb.  If the struct underlying pb does not match\n// the data in buf, the results can be unpredictable.\n//\n// Unmarshal resets pb before starting to unmarshal, so any\n// existing data in pb is always removed. Use UnmarshalMerge\n// to preserve and append to existing data.\nfunc Unmarshal(buf []byte, pb Message) error {\n\tpb.Reset()\n\tif u, ok := pb.(newUnmarshaler); ok {\n\t\treturn u.XXX_Unmarshal(buf)\n\t}\n\tif u, ok := pb.(Unmarshaler); ok {\n\t\treturn u.Unmarshal(buf)\n\t}\n\treturn NewBuffer(buf).Unmarshal(pb)\n}\n\n// UnmarshalMerge parses the protocol buffer representation in buf and\n// writes the decoded result to pb.  If the struct underlying pb does not match\n// the data in buf, the results can be unpredictable.\n//\n// UnmarshalMerge merges into existing data in pb.\n// Most code should use Unmarshal instead.\nfunc UnmarshalMerge(buf []byte, pb Message) error {\n\tif u, ok := pb.(newUnmarshaler); ok {\n\t\treturn u.XXX_Unmarshal(buf)\n\t}\n\tif u, ok := pb.(Unmarshaler); ok {\n\t\t// NOTE: The history of proto have unfortunately been inconsistent\n\t\t// whether Unmarshaler should or should not implicitly clear itself.\n\t\t// Some implementations do, most do not.\n\t\t// Thus, calling this here may or may not do what people want.\n\t\t//\n\t\t// See https://github.com/golang/protobuf/issues/424\n\t\treturn u.Unmarshal(buf)\n\t}\n\treturn NewBuffer(buf).Unmarshal(pb)\n}\n\n// DecodeMessage reads a count-delimited message from the Buffer.\nfunc (p *Buffer) DecodeMessage(pb Message) error {\n\tenc, err := p.DecodeRawBytes(false)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn NewBuffer(enc).Unmarshal(pb)\n}\n\n// DecodeGroup reads a tag-delimited group from the Buffer.\n// StartGroup tag is already consumed. This function consumes\n// EndGroup tag.\nfunc (p *Buffer) DecodeGroup(pb Message) error {\n\tb := p.buf[p.index:]\n\tx, y := findEndGroup(b)\n\tif x < 0 {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\terr := Unmarshal(b[:x], pb)\n\tp.index += y\n\treturn err\n}\n\n// Unmarshal parses the protocol buffer representation in the\n// Buffer and places the decoded result in pb.  If the struct\n// underlying pb does not match the data in the buffer, the results can be\n// unpredictable.\n//\n// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.\nfunc (p *Buffer) Unmarshal(pb Message) error {\n\t// If the object can unmarshal itself, let it.\n\tif u, ok := pb.(newUnmarshaler); ok {\n\t\terr := u.XXX_Unmarshal(p.buf[p.index:])\n\t\tp.index = len(p.buf)\n\t\treturn err\n\t}\n\tif u, ok := pb.(Unmarshaler); ok {\n\t\t// NOTE: The history of proto have unfortunately been inconsistent\n\t\t// whether Unmarshaler should or should not implicitly clear itself.\n\t\t// Some implementations do, most do not.\n\t\t// Thus, calling this here may or may not do what people want.\n\t\t//\n\t\t// See https://github.com/golang/protobuf/issues/424\n\t\terr := u.Unmarshal(p.buf[p.index:])\n\t\tp.index = len(p.buf)\n\t\treturn err\n\t}\n\n\t// Slow workaround for messages that aren't Unmarshalers.\n\t// This includes some hand-coded .pb.go files and\n\t// bootstrap protos.\n\t// TODO: fix all of those and then add Unmarshal to\n\t// the Message interface. Then:\n\t// The cast above and code below can be deleted.\n\t// The old unmarshaler can be deleted.\n\t// Clients can call Unmarshal directly (can already do that, actually).\n\tvar info InternalMessageInfo\n\terr := info.Unmarshal(pb, p.buf[p.index:])\n\tp.index = len(p.buf)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/deprecated.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2018 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport \"errors\"\n\n// Deprecated: do not use.\ntype Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 }\n\n// Deprecated: do not use.\nfunc GetStats() Stats { return Stats{} }\n\n// Deprecated: do not use.\nfunc MarshalMessageSet(interface{}) ([]byte, error) {\n\treturn nil, errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc UnmarshalMessageSet([]byte, interface{}) error {\n\treturn errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc MarshalMessageSetJSON(interface{}) ([]byte, error) {\n\treturn nil, errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc UnmarshalMessageSetJSON([]byte, interface{}) error {\n\treturn errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc RegisterMessageSetType(Message, int32, string) {}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/discard.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2017 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\ntype generatedDiscarder interface {\n\tXXX_DiscardUnknown()\n}\n\n// DiscardUnknown recursively discards all unknown fields from this message\n// and all embedded messages.\n//\n// When unmarshaling a message with unrecognized fields, the tags and values\n// of such fields are preserved in the Message. This allows a later call to\n// marshal to be able to produce a message that continues to have those\n// unrecognized fields. To avoid this, DiscardUnknown is used to\n// explicitly clear the unknown fields after unmarshaling.\n//\n// For proto2 messages, the unknown fields of message extensions are only\n// discarded from messages that have been accessed via GetExtension.\nfunc DiscardUnknown(m Message) {\n\tif m, ok := m.(generatedDiscarder); ok {\n\t\tm.XXX_DiscardUnknown()\n\t\treturn\n\t}\n\t// TODO: Dynamically populate a InternalMessageInfo for legacy messages,\n\t// but the master branch has no implementation for InternalMessageInfo,\n\t// so it would be more work to replicate that approach.\n\tdiscardLegacy(m)\n}\n\n// DiscardUnknown recursively discards all unknown fields.\nfunc (a *InternalMessageInfo) DiscardUnknown(m Message) {\n\tdi := atomicLoadDiscardInfo(&a.discard)\n\tif di == nil {\n\t\tdi = getDiscardInfo(reflect.TypeOf(m).Elem())\n\t\tatomicStoreDiscardInfo(&a.discard, di)\n\t}\n\tdi.discard(toPointer(&m))\n}\n\ntype discardInfo struct {\n\ttyp reflect.Type\n\n\tinitialized int32 // 0: only typ is valid, 1: everything is valid\n\tlock        sync.Mutex\n\n\tfields       []discardFieldInfo\n\tunrecognized field\n}\n\ntype discardFieldInfo struct {\n\tfield   field // Offset of field, guaranteed to be valid\n\tdiscard func(src pointer)\n}\n\nvar (\n\tdiscardInfoMap  = map[reflect.Type]*discardInfo{}\n\tdiscardInfoLock sync.Mutex\n)\n\nfunc getDiscardInfo(t reflect.Type) *discardInfo {\n\tdiscardInfoLock.Lock()\n\tdefer discardInfoLock.Unlock()\n\tdi := discardInfoMap[t]\n\tif di == nil {\n\t\tdi = &discardInfo{typ: t}\n\t\tdiscardInfoMap[t] = di\n\t}\n\treturn di\n}\n\nfunc (di *discardInfo) discard(src pointer) {\n\tif src.isNil() {\n\t\treturn // Nothing to do.\n\t}\n\n\tif atomic.LoadInt32(&di.initialized) == 0 {\n\t\tdi.computeDiscardInfo()\n\t}\n\n\tfor _, fi := range di.fields {\n\t\tsfp := src.offset(fi.field)\n\t\tfi.discard(sfp)\n\t}\n\n\t// For proto2 messages, only discard unknown fields in message extensions\n\t// that have been accessed via GetExtension.\n\tif em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil {\n\t\t// Ignore lock since DiscardUnknown is not concurrency safe.\n\t\temm, _ := em.extensionsRead()\n\t\tfor _, mx := range emm {\n\t\t\tif m, ok := mx.value.(Message); ok {\n\t\t\t\tDiscardUnknown(m)\n\t\t\t}\n\t\t}\n\t}\n\n\tif di.unrecognized.IsValid() {\n\t\t*src.offset(di.unrecognized).toBytes() = nil\n\t}\n}\n\nfunc (di *discardInfo) computeDiscardInfo() {\n\tdi.lock.Lock()\n\tdefer di.lock.Unlock()\n\tif di.initialized != 0 {\n\t\treturn\n\t}\n\tt := di.typ\n\tn := t.NumField()\n\n\tfor i := 0; i < n; i++ {\n\t\tf := t.Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tdfi := discardFieldInfo{field: toField(&f)}\n\t\ttf := f.Type\n\n\t\t// Unwrap tf to get its most basic type.\n\t\tvar isPointer, isSlice bool\n\t\tif tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {\n\t\t\tisSlice = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif tf.Kind() == reflect.Ptr {\n\t\t\tisPointer = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif isPointer && isSlice && tf.Kind() != reflect.Struct {\n\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a slice of pointers to primitive types\", t, f.Name))\n\t\t}\n\n\t\tswitch tf.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tswitch {\n\t\t\tcase !isPointer:\n\t\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a direct struct value\", t, f.Name))\n\t\t\tcase isSlice: // E.g., []*pb.T\n\t\t\t\tdiscardInfo := getDiscardInfo(tf)\n\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\tsps := src.getPointerSlice()\n\t\t\t\t\tfor _, sp := range sps {\n\t\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\t\tdiscardInfo.discard(sp)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., *pb.T\n\t\t\t\tdiscardInfo := getDiscardInfo(tf)\n\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\tsp := src.getPointer()\n\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\tdiscardInfo.discard(sp)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a pointer to a map or a slice of map values\", t, f.Name))\n\t\t\tdefault: // E.g., map[K]V\n\t\t\t\tif tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)\n\t\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\t\tsm := src.asPointerTo(tf).Elem()\n\t\t\t\t\t\tif sm.Len() == 0 {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tDiscardUnknown(val.Interface().(Message))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdfi.discard = func(pointer) {} // Noop\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Interface:\n\t\t\t// Must be oneof field.\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a pointer to a interface or a slice of interface values\", t, f.Name))\n\t\t\tdefault: // E.g., interface{}\n\t\t\t\t// TODO: Make this faster?\n\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\tsu := src.asPointerTo(tf).Elem()\n\t\t\t\t\tif !su.IsNil() {\n\t\t\t\t\t\tsv := su.Elem().Elem().Field(0)\n\t\t\t\t\t\tif sv.Kind() == reflect.Ptr && sv.IsNil() {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch sv.Type().Kind() {\n\t\t\t\t\t\tcase reflect.Ptr: // Proto struct (e.g., *T)\n\t\t\t\t\t\t\tDiscardUnknown(sv.Interface().(Message))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\tdi.fields = append(di.fields, dfi)\n\t}\n\n\tdi.unrecognized = invalidField\n\tif f, ok := t.FieldByName(\"XXX_unrecognized\"); ok {\n\t\tif f.Type != reflect.TypeOf([]byte{}) {\n\t\t\tpanic(\"expected XXX_unrecognized to be of type []byte\")\n\t\t}\n\t\tdi.unrecognized = toField(&f)\n\t}\n\n\tatomic.StoreInt32(&di.initialized, 1)\n}\n\nfunc discardLegacy(m Message) {\n\tv := reflect.ValueOf(m)\n\tif v.Kind() != reflect.Ptr || v.IsNil() {\n\t\treturn\n\t}\n\tv = v.Elem()\n\tif v.Kind() != reflect.Struct {\n\t\treturn\n\t}\n\tt := v.Type()\n\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tvf := v.Field(i)\n\t\ttf := f.Type\n\n\t\t// Unwrap tf to get its most basic type.\n\t\tvar isPointer, isSlice bool\n\t\tif tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {\n\t\t\tisSlice = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif tf.Kind() == reflect.Ptr {\n\t\t\tisPointer = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif isPointer && isSlice && tf.Kind() != reflect.Struct {\n\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a slice of pointers to primitive types\", m, f.Name))\n\t\t}\n\n\t\tswitch tf.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tswitch {\n\t\t\tcase !isPointer:\n\t\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a direct struct value\", m, f.Name))\n\t\t\tcase isSlice: // E.g., []*pb.T\n\t\t\t\tfor j := 0; j < vf.Len(); j++ {\n\t\t\t\t\tdiscardLegacy(vf.Index(j).Interface().(Message))\n\t\t\t\t}\n\t\t\tdefault: // E.g., *pb.T\n\t\t\t\tdiscardLegacy(vf.Interface().(Message))\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a pointer to a map or a slice of map values\", m, f.Name))\n\t\t\tdefault: // E.g., map[K]V\n\t\t\t\ttv := vf.Type().Elem()\n\t\t\t\tif tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)\n\t\t\t\t\tfor _, key := range vf.MapKeys() {\n\t\t\t\t\t\tval := vf.MapIndex(key)\n\t\t\t\t\t\tdiscardLegacy(val.Interface().(Message))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Interface:\n\t\t\t// Must be oneof field.\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a pointer to a interface or a slice of interface values\", m, f.Name))\n\t\t\tdefault: // E.g., test_proto.isCommunique_Union interface\n\t\t\t\tif !vf.IsNil() && f.Tag.Get(\"protobuf_oneof\") != \"\" {\n\t\t\t\t\tvf = vf.Elem() // E.g., *test_proto.Communique_Msg\n\t\t\t\t\tif !vf.IsNil() {\n\t\t\t\t\t\tvf = vf.Elem()   // E.g., test_proto.Communique_Msg\n\t\t\t\t\t\tvf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value\n\t\t\t\t\t\tif vf.Kind() == reflect.Ptr {\n\t\t\t\t\t\t\tdiscardLegacy(vf.Interface().(Message))\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\tif vf := v.FieldByName(\"XXX_unrecognized\"); vf.IsValid() {\n\t\tif vf.Type() != reflect.TypeOf([]byte{}) {\n\t\t\tpanic(\"expected XXX_unrecognized to be of type []byte\")\n\t\t}\n\t\tvf.Set(reflect.ValueOf([]byte(nil)))\n\t}\n\n\t// For proto2 messages, only discard unknown fields in message extensions\n\t// that have been accessed via GetExtension.\n\tif em, err := extendable(m); err == nil {\n\t\t// Ignore lock since discardLegacy is not concurrency safe.\n\t\temm, _ := em.extensionsRead()\n\t\tfor _, mx := range emm {\n\t\t\tif m, ok := mx.value.(Message); ok {\n\t\t\t\tdiscardLegacy(m)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/duration.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n// This file implements conversions between google.protobuf.Duration\n// and time.Duration.\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n)\n\nconst (\n\t// Range of a Duration in seconds, as specified in\n\t// google/protobuf/duration.proto. This is about 10,000 years in seconds.\n\tmaxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)\n\tminSeconds = -maxSeconds\n)\n\n// validateDuration determines whether the Duration is valid according to the\n// definition in google/protobuf/duration.proto. A valid Duration\n// may still be too large to fit into a time.Duration (the range of Duration\n// is about 10,000 years, and the range of time.Duration is about 290).\nfunc validateDuration(d *duration) error {\n\tif d == nil {\n\t\treturn errors.New(\"duration: nil Duration\")\n\t}\n\tif d.Seconds < minSeconds || d.Seconds > maxSeconds {\n\t\treturn fmt.Errorf(\"duration: %#v: seconds out of range\", d)\n\t}\n\tif d.Nanos <= -1e9 || d.Nanos >= 1e9 {\n\t\treturn fmt.Errorf(\"duration: %#v: nanos out of range\", d)\n\t}\n\t// Seconds and Nanos must have the same sign, unless d.Nanos is zero.\n\tif (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) {\n\t\treturn fmt.Errorf(\"duration: %#v: seconds and nanos have different signs\", d)\n\t}\n\treturn nil\n}\n\n// DurationFromProto converts a Duration to a time.Duration. DurationFromProto\n// returns an error if the Duration is invalid or is too large to be\n// represented in a time.Duration.\nfunc durationFromProto(p *duration) (time.Duration, error) {\n\tif err := validateDuration(p); err != nil {\n\t\treturn 0, err\n\t}\n\td := time.Duration(p.Seconds) * time.Second\n\tif int64(d/time.Second) != p.Seconds {\n\t\treturn 0, fmt.Errorf(\"duration: %#v is out of range for time.Duration\", p)\n\t}\n\tif p.Nanos != 0 {\n\t\td += time.Duration(p.Nanos)\n\t\tif (d < 0) != (p.Nanos < 0) {\n\t\t\treturn 0, fmt.Errorf(\"duration: %#v is out of range for time.Duration\", p)\n\t\t}\n\t}\n\treturn d, nil\n}\n\n// DurationProto converts a time.Duration to a Duration.\nfunc durationProto(d time.Duration) *duration {\n\tnanos := d.Nanoseconds()\n\tsecs := nanos / 1e9\n\tnanos -= secs * 1e9\n\treturn &duration{\n\t\tSeconds: secs,\n\t\tNanos:   int32(nanos),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/duration_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2016, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"time\"\n)\n\nvar durationType = reflect.TypeOf((*time.Duration)(nil)).Elem()\n\ntype duration struct {\n\tSeconds int64 `protobuf:\"varint,1,opt,name=seconds,proto3\" json:\"seconds,omitempty\"`\n\tNanos   int32 `protobuf:\"varint,2,opt,name=nanos,proto3\" json:\"nanos,omitempty\"`\n}\n\nfunc (m *duration) Reset()       { *m = duration{} }\nfunc (*duration) ProtoMessage()  {}\nfunc (*duration) String() string { return \"duration<string>\" }\n\nfunc init() {\n\tRegisterType((*duration)(nil), \"gogo.protobuf.proto.duration\")\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/encode.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Routines for encoding data into the wire format for protocol buffers.\n */\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\nvar (\n\t// errRepeatedHasNil is the error returned if Marshal is called with\n\t// a struct with a repeated field containing a nil element.\n\terrRepeatedHasNil = errors.New(\"proto: repeated field has nil element\")\n\n\t// errOneofHasNil is the error returned if Marshal is called with\n\t// a struct with a oneof field containing a nil element.\n\terrOneofHasNil = errors.New(\"proto: oneof field has nil value\")\n\n\t// ErrNil is the error returned if Marshal is called with nil.\n\tErrNil = errors.New(\"proto: Marshal called with nil\")\n\n\t// ErrTooLarge is the error returned if Marshal is called with a\n\t// message that encodes to >2GB.\n\tErrTooLarge = errors.New(\"proto: message encodes to over 2 GB\")\n)\n\n// The fundamental encoders that put bytes on the wire.\n// Those that take integer types all accept uint64 and are\n// therefore of type valueEncoder.\n\nconst maxVarintBytes = 10 // maximum length of a varint\n\n// EncodeVarint returns the varint encoding of x.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\n// Not used by the package itself, but helpful to clients\n// wishing to use the same encoding.\nfunc EncodeVarint(x uint64) []byte {\n\tvar buf [maxVarintBytes]byte\n\tvar n int\n\tfor n = 0; x > 127; n++ {\n\t\tbuf[n] = 0x80 | uint8(x&0x7F)\n\t\tx >>= 7\n\t}\n\tbuf[n] = uint8(x)\n\tn++\n\treturn buf[0:n]\n}\n\n// EncodeVarint writes a varint-encoded integer to the Buffer.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\nfunc (p *Buffer) EncodeVarint(x uint64) error {\n\tfor x >= 1<<7 {\n\t\tp.buf = append(p.buf, uint8(x&0x7f|0x80))\n\t\tx >>= 7\n\t}\n\tp.buf = append(p.buf, uint8(x))\n\treturn nil\n}\n\n// SizeVarint returns the varint encoding size of an integer.\nfunc SizeVarint(x uint64) int {\n\tswitch {\n\tcase x < 1<<7:\n\t\treturn 1\n\tcase x < 1<<14:\n\t\treturn 2\n\tcase x < 1<<21:\n\t\treturn 3\n\tcase x < 1<<28:\n\t\treturn 4\n\tcase x < 1<<35:\n\t\treturn 5\n\tcase x < 1<<42:\n\t\treturn 6\n\tcase x < 1<<49:\n\t\treturn 7\n\tcase x < 1<<56:\n\t\treturn 8\n\tcase x < 1<<63:\n\t\treturn 9\n\t}\n\treturn 10\n}\n\n// EncodeFixed64 writes a 64-bit integer to the Buffer.\n// This is the format for the\n// fixed64, sfixed64, and double protocol buffer types.\nfunc (p *Buffer) EncodeFixed64(x uint64) error {\n\tp.buf = append(p.buf,\n\t\tuint8(x),\n\t\tuint8(x>>8),\n\t\tuint8(x>>16),\n\t\tuint8(x>>24),\n\t\tuint8(x>>32),\n\t\tuint8(x>>40),\n\t\tuint8(x>>48),\n\t\tuint8(x>>56))\n\treturn nil\n}\n\n// EncodeFixed32 writes a 32-bit integer to the Buffer.\n// This is the format for the\n// fixed32, sfixed32, and float protocol buffer types.\nfunc (p *Buffer) EncodeFixed32(x uint64) error {\n\tp.buf = append(p.buf,\n\t\tuint8(x),\n\t\tuint8(x>>8),\n\t\tuint8(x>>16),\n\t\tuint8(x>>24))\n\treturn nil\n}\n\n// EncodeZigzag64 writes a zigzag-encoded 64-bit integer\n// to the Buffer.\n// This is the format used for the sint64 protocol buffer type.\nfunc (p *Buffer) EncodeZigzag64(x uint64) error {\n\t// use signed number to get arithmetic right shift.\n\treturn p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\n// EncodeZigzag32 writes a zigzag-encoded 32-bit integer\n// to the Buffer.\n// This is the format used for the sint32 protocol buffer type.\nfunc (p *Buffer) EncodeZigzag32(x uint64) error {\n\t// use signed number to get arithmetic right shift.\n\treturn p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))\n}\n\n// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.\n// This is the format used for the bytes protocol buffer\n// type and for embedded messages.\nfunc (p *Buffer) EncodeRawBytes(b []byte) error {\n\tp.EncodeVarint(uint64(len(b)))\n\tp.buf = append(p.buf, b...)\n\treturn nil\n}\n\n// EncodeStringBytes writes an encoded string to the Buffer.\n// This is the format used for the proto2 string type.\nfunc (p *Buffer) EncodeStringBytes(s string) error {\n\tp.EncodeVarint(uint64(len(s)))\n\tp.buf = append(p.buf, s...)\n\treturn nil\n}\n\n// Marshaler is the interface representing objects that can marshal themselves.\ntype Marshaler interface {\n\tMarshal() ([]byte, error)\n}\n\n// EncodeMessage writes the protocol buffer to the Buffer,\n// prefixed by a varint-encoded length.\nfunc (p *Buffer) EncodeMessage(pb Message) error {\n\tsiz := Size(pb)\n\tsizVar := SizeVarint(uint64(siz))\n\tp.grow(siz + sizVar)\n\tp.EncodeVarint(uint64(siz))\n\treturn p.Marshal(pb)\n}\n\n// All protocol buffer fields are nillable, but be careful.\nfunc isNil(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:\n\t\treturn v.IsNil()\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/encode_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nfunc NewRequiredNotSetError(field string) *RequiredNotSetError {\n\treturn &RequiredNotSetError{field}\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/equal.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2011 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Protocol buffer comparison.\n\npackage proto\n\nimport (\n\t\"bytes\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n/*\nEqual returns true iff protocol buffers a and b are equal.\nThe arguments must both be pointers to protocol buffer structs.\n\nEquality is defined in this way:\n  - Two messages are equal iff they are the same type,\n    corresponding fields are equal, unknown field sets\n    are equal, and extensions sets are equal.\n  - Two set scalar fields are equal iff their values are equal.\n    If the fields are of a floating-point type, remember that\n    NaN != x for all x, including NaN. If the message is defined\n    in a proto3 .proto file, fields are not \"set\"; specifically,\n    zero length proto3 \"bytes\" fields are equal (nil == {}).\n  - Two repeated fields are equal iff their lengths are the same,\n    and their corresponding elements are equal. Note a \"bytes\" field,\n    although represented by []byte, is not a repeated field and the\n    rule for the scalar fields described above applies.\n  - Two unset fields are equal.\n  - Two unknown field sets are equal if their current\n    encoded state is equal.\n  - Two extension sets are equal iff they have corresponding\n    elements that are pairwise equal.\n  - Two map fields are equal iff their lengths are the same,\n    and they contain the same set of elements. Zero-length map\n    fields are equal.\n  - Every other combination of things are not equal.\n\nThe return value is undefined if a and b are not protocol buffers.\n*/\nfunc Equal(a, b Message) bool {\n\tif a == nil || b == nil {\n\t\treturn a == b\n\t}\n\tv1, v2 := reflect.ValueOf(a), reflect.ValueOf(b)\n\tif v1.Type() != v2.Type() {\n\t\treturn false\n\t}\n\tif v1.Kind() == reflect.Ptr {\n\t\tif v1.IsNil() {\n\t\t\treturn v2.IsNil()\n\t\t}\n\t\tif v2.IsNil() {\n\t\t\treturn false\n\t\t}\n\t\tv1, v2 = v1.Elem(), v2.Elem()\n\t}\n\tif v1.Kind() != reflect.Struct {\n\t\treturn false\n\t}\n\treturn equalStruct(v1, v2)\n}\n\n// v1 and v2 are known to have the same type.\nfunc equalStruct(v1, v2 reflect.Value) bool {\n\tsprop := GetProperties(v1.Type())\n\tfor i := 0; i < v1.NumField(); i++ {\n\t\tf := v1.Type().Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tf1, f2 := v1.Field(i), v2.Field(i)\n\t\tif f.Type.Kind() == reflect.Ptr {\n\t\t\tif n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 {\n\t\t\t\t// both unset\n\t\t\t\tcontinue\n\t\t\t} else if n1 != n2 {\n\t\t\t\t// set/unset mismatch\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tf1, f2 = f1.Elem(), f2.Elem()\n\t\t}\n\t\tif !equalAny(f1, f2, sprop.Prop[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif em1 := v1.FieldByName(\"XXX_InternalExtensions\"); em1.IsValid() {\n\t\tem2 := v2.FieldByName(\"XXX_InternalExtensions\")\n\t\tif !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif em1 := v1.FieldByName(\"XXX_extensions\"); em1.IsValid() {\n\t\tem2 := v2.FieldByName(\"XXX_extensions\")\n\t\tif !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tuf := v1.FieldByName(\"XXX_unrecognized\")\n\tif !uf.IsValid() {\n\t\treturn true\n\t}\n\n\tu1 := uf.Bytes()\n\tu2 := v2.FieldByName(\"XXX_unrecognized\").Bytes()\n\treturn bytes.Equal(u1, u2)\n}\n\n// v1 and v2 are known to have the same type.\n// prop may be nil.\nfunc equalAny(v1, v2 reflect.Value, prop *Properties) bool {\n\tif v1.Type() == protoMessageType {\n\t\tm1, _ := v1.Interface().(Message)\n\t\tm2, _ := v2.Interface().(Message)\n\t\treturn Equal(m1, m2)\n\t}\n\tswitch v1.Kind() {\n\tcase reflect.Bool:\n\t\treturn v1.Bool() == v2.Bool()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v1.Float() == v2.Float()\n\tcase reflect.Int32, reflect.Int64:\n\t\treturn v1.Int() == v2.Int()\n\tcase reflect.Interface:\n\t\t// Probably a oneof field; compare the inner values.\n\t\tn1, n2 := v1.IsNil(), v2.IsNil()\n\t\tif n1 || n2 {\n\t\t\treturn n1 == n2\n\t\t}\n\t\te1, e2 := v1.Elem(), v2.Elem()\n\t\tif e1.Type() != e2.Type() {\n\t\t\treturn false\n\t\t}\n\t\treturn equalAny(e1, e2, nil)\n\tcase reflect.Map:\n\t\tif v1.Len() != v2.Len() {\n\t\t\treturn false\n\t\t}\n\t\tfor _, key := range v1.MapKeys() {\n\t\t\tval2 := v2.MapIndex(key)\n\t\t\tif !val2.IsValid() {\n\t\t\t\t// This key was not found in the second map.\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !equalAny(v1.MapIndex(key), val2, nil) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase reflect.Ptr:\n\t\t// Maps may have nil values in them, so check for nil.\n\t\tif v1.IsNil() && v2.IsNil() {\n\t\t\treturn true\n\t\t}\n\t\tif v1.IsNil() != v2.IsNil() {\n\t\t\treturn false\n\t\t}\n\t\treturn equalAny(v1.Elem(), v2.Elem(), prop)\n\tcase reflect.Slice:\n\t\tif v1.Type().Elem().Kind() == reflect.Uint8 {\n\t\t\t// short circuit: []byte\n\n\t\t\t// Edge case: if this is in a proto3 message, a zero length\n\t\t\t// bytes field is considered the zero value.\n\t\t\tif prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif v1.IsNil() != v2.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte))\n\t\t}\n\n\t\tif v1.Len() != v2.Len() {\n\t\t\treturn false\n\t\t}\n\t\tfor i := 0; i < v1.Len(); i++ {\n\t\t\tif !equalAny(v1.Index(i), v2.Index(i), prop) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase reflect.String:\n\t\treturn v1.Interface().(string) == v2.Interface().(string)\n\tcase reflect.Struct:\n\t\treturn equalStruct(v1, v2)\n\tcase reflect.Uint32, reflect.Uint64:\n\t\treturn v1.Uint() == v2.Uint()\n\t}\n\n\t// unknown type, so not a protocol buffer\n\tlog.Printf(\"proto: don't know how to compare %v\", v1)\n\treturn false\n}\n\n// base is the struct type that the extensions are based on.\n// x1 and x2 are InternalExtensions.\nfunc equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool {\n\tem1, _ := x1.extensionsRead()\n\tem2, _ := x2.extensionsRead()\n\treturn equalExtMap(base, em1, em2)\n}\n\nfunc equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {\n\tif len(em1) != len(em2) {\n\t\treturn false\n\t}\n\n\tfor extNum, e1 := range em1 {\n\t\te2, ok := em2[extNum]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\n\t\tm1, m2 := e1.value, e2.value\n\n\t\tif m1 == nil && m2 == nil {\n\t\t\t// Both have only encoded form.\n\t\t\tif bytes.Equal(e1.enc, e2.enc) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// The bytes are different, but the extensions might still be\n\t\t\t// equal. We need to decode them to compare.\n\t\t}\n\n\t\tif m1 != nil && m2 != nil {\n\t\t\t// Both are unencoded.\n\t\t\tif !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// At least one is encoded. To do a semantically correct comparison\n\t\t// we need to unmarshal them first.\n\t\tvar desc *ExtensionDesc\n\t\tif m := extensionMaps[base]; m != nil {\n\t\t\tdesc = m[extNum]\n\t\t}\n\t\tif desc == nil {\n\t\t\t// If both have only encoded form and the bytes are the same,\n\t\t\t// it is handled above. We get here when the bytes are different.\n\t\t\t// We don't know how to decode it, so just compare them as byte\n\t\t\t// slices.\n\t\t\tlog.Printf(\"proto: don't know how to compare extension %d of %v\", extNum, base)\n\t\t\treturn false\n\t\t}\n\t\tvar err error\n\t\tif m1 == nil {\n\t\t\tm1, err = decodeExtension(e1.enc, desc)\n\t\t}\n\t\tif m2 == nil && err == nil {\n\t\t\tm2, err = decodeExtension(e2.enc, desc)\n\t\t}\n\t\tif err != nil {\n\t\t\t// The encoded form is invalid.\n\t\t\tlog.Printf(\"proto: badly encoded extension %d of %v: %v\", extNum, base, err)\n\t\t\treturn false\n\t\t}\n\t\tif !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/extensions.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Types and routines for supporting protocol buffer extensions.\n */\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"sync\"\n)\n\n// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message.\nvar ErrMissingExtension = errors.New(\"proto: missing extension\")\n\n// ExtensionRange represents a range of message extensions for a protocol buffer.\n// Used in code generated by the protocol compiler.\ntype ExtensionRange struct {\n\tStart, End int32 // both inclusive\n}\n\n// extendableProto is an interface implemented by any protocol buffer generated by the current\n// proto compiler that may be extended.\ntype extendableProto interface {\n\tMessage\n\tExtensionRangeArray() []ExtensionRange\n\textensionsWrite() map[int32]Extension\n\textensionsRead() (map[int32]Extension, sync.Locker)\n}\n\n// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous\n// version of the proto compiler that may be extended.\ntype extendableProtoV1 interface {\n\tMessage\n\tExtensionRangeArray() []ExtensionRange\n\tExtensionMap() map[int32]Extension\n}\n\n// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto.\ntype extensionAdapter struct {\n\textendableProtoV1\n}\n\nfunc (e extensionAdapter) extensionsWrite() map[int32]Extension {\n\treturn e.ExtensionMap()\n}\n\nfunc (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {\n\treturn e.ExtensionMap(), notLocker{}\n}\n\n// notLocker is a sync.Locker whose Lock and Unlock methods are nops.\ntype notLocker struct{}\n\nfunc (n notLocker) Lock()   {}\nfunc (n notLocker) Unlock() {}\n\n// extendable returns the extendableProto interface for the given generated proto message.\n// If the proto message has the old extension format, it returns a wrapper that implements\n// the extendableProto interface.\nfunc extendable(p interface{}) (extendableProto, error) {\n\tswitch p := p.(type) {\n\tcase extendableProto:\n\t\tif isNilPtr(p) {\n\t\t\treturn nil, fmt.Errorf(\"proto: nil %T is not extendable\", p)\n\t\t}\n\t\treturn p, nil\n\tcase extendableProtoV1:\n\t\tif isNilPtr(p) {\n\t\t\treturn nil, fmt.Errorf(\"proto: nil %T is not extendable\", p)\n\t\t}\n\t\treturn extensionAdapter{p}, nil\n\tcase extensionsBytes:\n\t\treturn slowExtensionAdapter{p}, nil\n\t}\n\t// Don't allocate a specific error containing %T:\n\t// this is the hot path for Clone and MarshalText.\n\treturn nil, errNotExtendable\n}\n\nvar errNotExtendable = errors.New(\"proto: not an extendable proto.Message\")\n\nfunc isNilPtr(x interface{}) bool {\n\tv := reflect.ValueOf(x)\n\treturn v.Kind() == reflect.Ptr && v.IsNil()\n}\n\n// XXX_InternalExtensions is an internal representation of proto extensions.\n//\n// Each generated message struct type embeds an anonymous XXX_InternalExtensions field,\n// thus gaining the unexported 'extensions' method, which can be called only from the proto package.\n//\n// The methods of XXX_InternalExtensions are not concurrency safe in general,\n// but calls to logically read-only methods such as has and get may be executed concurrently.\ntype XXX_InternalExtensions struct {\n\t// The struct must be indirect so that if a user inadvertently copies a\n\t// generated message and its embedded XXX_InternalExtensions, they\n\t// avoid the mayhem of a copied mutex.\n\t//\n\t// The mutex serializes all logically read-only operations to p.extensionMap.\n\t// It is up to the client to ensure that write operations to p.extensionMap are\n\t// mutually exclusive with other accesses.\n\tp *struct {\n\t\tmu           sync.Mutex\n\t\textensionMap map[int32]Extension\n\t}\n}\n\n// extensionsWrite returns the extension map, creating it on first use.\nfunc (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {\n\tif e.p == nil {\n\t\te.p = new(struct {\n\t\t\tmu           sync.Mutex\n\t\t\textensionMap map[int32]Extension\n\t\t})\n\t\te.p.extensionMap = make(map[int32]Extension)\n\t}\n\treturn e.p.extensionMap\n}\n\n// extensionsRead returns the extensions map for read-only use.  It may be nil.\n// The caller must hold the returned mutex's lock when accessing Elements within the map.\nfunc (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) {\n\tif e.p == nil {\n\t\treturn nil, nil\n\t}\n\treturn e.p.extensionMap, &e.p.mu\n}\n\n// ExtensionDesc represents an extension specification.\n// Used in generated code from the protocol compiler.\ntype ExtensionDesc struct {\n\tExtendedType  Message     // nil pointer to the type that is being extended\n\tExtensionType interface{} // nil pointer to the extension type\n\tField         int32       // field number\n\tName          string      // fully-qualified name of extension, for text formatting\n\tTag           string      // protobuf tag style\n\tFilename      string      // name of the file in which the extension is defined\n}\n\nfunc (ed *ExtensionDesc) repeated() bool {\n\tt := reflect.TypeOf(ed.ExtensionType)\n\treturn t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8\n}\n\n// Extension represents an extension in a message.\ntype Extension struct {\n\t// When an extension is stored in a message using SetExtension\n\t// only desc and value are set. When the message is marshaled\n\t// enc will be set to the encoded form of the message.\n\t//\n\t// When a message is unmarshaled and contains extensions, each\n\t// extension will have only enc set. When such an extension is\n\t// accessed using GetExtension (or GetExtensions) desc and value\n\t// will be set.\n\tdesc  *ExtensionDesc\n\tvalue interface{}\n\tenc   []byte\n}\n\n// SetRawExtension is for testing only.\nfunc SetRawExtension(base Message, id int32, b []byte) {\n\tif ebase, ok := base.(extensionsBytes); ok {\n\t\tclearExtension(base, id)\n\t\text := ebase.GetExtensions()\n\t\t*ext = append(*ext, b...)\n\t\treturn\n\t}\n\tepb, err := extendable(base)\n\tif err != nil {\n\t\treturn\n\t}\n\textmap := epb.extensionsWrite()\n\textmap[id] = Extension{enc: b}\n}\n\n// isExtensionField returns true iff the given field number is in an extension range.\nfunc isExtensionField(pb extendableProto, field int32) bool {\n\tfor _, er := range pb.ExtensionRangeArray() {\n\t\tif er.Start <= field && field <= er.End {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// checkExtensionTypes checks that the given extension is valid for pb.\nfunc checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {\n\tvar pbi interface{} = pb\n\t// Check the extended type.\n\tif ea, ok := pbi.(extensionAdapter); ok {\n\t\tpbi = ea.extendableProtoV1\n\t}\n\tif ea, ok := pbi.(slowExtensionAdapter); ok {\n\t\tpbi = ea.extensionsBytes\n\t}\n\tif a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {\n\t\treturn fmt.Errorf(\"proto: bad extended type; %v does not extend %v\", b, a)\n\t}\n\t// Check the range.\n\tif !isExtensionField(pb, extension.Field) {\n\t\treturn errors.New(\"proto: bad extension number; not in declared ranges\")\n\t}\n\treturn nil\n}\n\n// extPropKey is sufficient to uniquely identify an extension.\ntype extPropKey struct {\n\tbase  reflect.Type\n\tfield int32\n}\n\nvar extProp = struct {\n\tsync.RWMutex\n\tm map[extPropKey]*Properties\n}{\n\tm: make(map[extPropKey]*Properties),\n}\n\nfunc extensionProperties(ed *ExtensionDesc) *Properties {\n\tkey := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field}\n\n\textProp.RLock()\n\tif prop, ok := extProp.m[key]; ok {\n\t\textProp.RUnlock()\n\t\treturn prop\n\t}\n\textProp.RUnlock()\n\n\textProp.Lock()\n\tdefer extProp.Unlock()\n\t// Check again.\n\tif prop, ok := extProp.m[key]; ok {\n\t\treturn prop\n\t}\n\n\tprop := new(Properties)\n\tprop.Init(reflect.TypeOf(ed.ExtensionType), \"unknown_name\", ed.Tag, nil)\n\textProp.m[key] = prop\n\treturn prop\n}\n\n// HasExtension returns whether the given extension is present in pb.\nfunc HasExtension(pb Message, extension *ExtensionDesc) bool {\n\tif epb, doki := pb.(extensionsBytes); doki {\n\t\text := epb.GetExtensions()\n\t\tbuf := *ext\n\t\to := 0\n\t\tfor o < len(buf) {\n\t\t\ttag, n := DecodeVarint(buf[o:])\n\t\t\tfieldNum := int32(tag >> 3)\n\t\t\tif int32(fieldNum) == extension.Field {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\twireType := int(tag & 0x7)\n\t\t\to += n\n\t\t\tl, err := size(buf[o:], wireType)\n\t\t\tif err != nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\to += l\n\t\t}\n\t\treturn false\n\t}\n\t// TODO: Check types, field numbers, etc.?\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn false\n\t}\n\textmap, mu := epb.extensionsRead()\n\tif extmap == nil {\n\t\treturn false\n\t}\n\tmu.Lock()\n\t_, ok := extmap[extension.Field]\n\tmu.Unlock()\n\treturn ok\n}\n\n// ClearExtension removes the given extension from pb.\nfunc ClearExtension(pb Message, extension *ExtensionDesc) {\n\tclearExtension(pb, extension.Field)\n}\n\nfunc clearExtension(pb Message, fieldNum int32) {\n\tif epb, ok := pb.(extensionsBytes); ok {\n\t\toffset := 0\n\t\tfor offset != -1 {\n\t\t\toffset = deleteExtension(epb, fieldNum, offset)\n\t\t}\n\t\treturn\n\t}\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn\n\t}\n\t// TODO: Check types, field numbers, etc.?\n\textmap := epb.extensionsWrite()\n\tdelete(extmap, fieldNum)\n}\n\n// GetExtension retrieves a proto2 extended field from pb.\n//\n// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil),\n// then GetExtension parses the encoded field and returns a Go value of the specified type.\n// If the field is not present, then the default value is returned (if one is specified),\n// otherwise ErrMissingExtension is reported.\n//\n// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil),\n// then GetExtension returns the raw encoded bytes of the field extension.\nfunc GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {\n\tif epb, doki := pb.(extensionsBytes); doki {\n\t\text := epb.GetExtensions()\n\t\treturn decodeExtensionFromBytes(extension, *ext)\n\t}\n\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif extension.ExtendedType != nil {\n\t\t// can only check type if this is a complete descriptor\n\t\tif cerr := checkExtensionTypes(epb, extension); cerr != nil {\n\t\t\treturn nil, cerr\n\t\t}\n\t}\n\n\temap, mu := epb.extensionsRead()\n\tif emap == nil {\n\t\treturn defaultExtensionValue(extension)\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\te, ok := emap[extension.Field]\n\tif !ok {\n\t\t// defaultExtensionValue returns the default value or\n\t\t// ErrMissingExtension if there is no default.\n\t\treturn defaultExtensionValue(extension)\n\t}\n\n\tif e.value != nil {\n\t\t// Already decoded. Check the descriptor, though.\n\t\tif e.desc != extension {\n\t\t\t// This shouldn't happen. If it does, it means that\n\t\t\t// GetExtension was called twice with two different\n\t\t\t// descriptors with the same field number.\n\t\t\treturn nil, errors.New(\"proto: descriptor conflict\")\n\t\t}\n\t\treturn e.value, nil\n\t}\n\n\tif extension.ExtensionType == nil {\n\t\t// incomplete descriptor\n\t\treturn e.enc, nil\n\t}\n\n\tv, err := decodeExtension(e.enc, extension)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Remember the decoded version and drop the encoded version.\n\t// That way it is safe to mutate what we return.\n\te.value = v\n\te.desc = extension\n\te.enc = nil\n\temap[extension.Field] = e\n\treturn e.value, nil\n}\n\n// defaultExtensionValue returns the default value for extension.\n// If no default for an extension is defined ErrMissingExtension is returned.\nfunc defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {\n\tif extension.ExtensionType == nil {\n\t\t// incomplete descriptor, so no default\n\t\treturn nil, ErrMissingExtension\n\t}\n\n\tt := reflect.TypeOf(extension.ExtensionType)\n\tprops := extensionProperties(extension)\n\n\tsf, _, err := fieldDefault(t, props)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif sf == nil || sf.value == nil {\n\t\t// There is no default value.\n\t\treturn nil, ErrMissingExtension\n\t}\n\n\tif t.Kind() != reflect.Ptr {\n\t\t// We do not need to return a Ptr, we can directly return sf.value.\n\t\treturn sf.value, nil\n\t}\n\n\t// We need to return an interface{} that is a pointer to sf.value.\n\tvalue := reflect.New(t).Elem()\n\tvalue.Set(reflect.New(value.Type().Elem()))\n\tif sf.kind == reflect.Int32 {\n\t\t// We may have an int32 or an enum, but the underlying data is int32.\n\t\t// Since we can't set an int32 into a non int32 reflect.value directly\n\t\t// set it as a int32.\n\t\tvalue.Elem().SetInt(int64(sf.value.(int32)))\n\t} else {\n\t\tvalue.Elem().Set(reflect.ValueOf(sf.value))\n\t}\n\treturn value.Interface(), nil\n}\n\n// decodeExtension decodes an extension encoded in b.\nfunc decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {\n\tt := reflect.TypeOf(extension.ExtensionType)\n\tunmarshal := typeUnmarshaler(t, extension.Tag)\n\n\t// t is a pointer to a struct, pointer to basic type or a slice.\n\t// Allocate space to store the pointer/slice.\n\tvalue := reflect.New(t).Elem()\n\n\tvar err error\n\tfor {\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\twire := int(x) & 7\n\n\t\tb, err = unmarshal(b, valToPointer(value.Addr()), wire)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif len(b) == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn value.Interface(), nil\n}\n\n// GetExtensions returns a slice of the extensions present in pb that are also listed in es.\n// The returned slice has the same length as es; missing extensions will appear as nil elements.\nfunc GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\textensions = make([]interface{}, len(es))\n\tfor i, e := range es {\n\t\textensions[i], err = GetExtension(epb, e)\n\t\tif err == ErrMissingExtension {\n\t\t\terr = nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order.\n// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing\n// just the Field field, which defines the extension's field number.\nfunc ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tregisteredExtensions := RegisteredExtensions(pb)\n\n\temap, mu := epb.extensionsRead()\n\tif emap == nil {\n\t\treturn nil, nil\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\textensions := make([]*ExtensionDesc, 0, len(emap))\n\tfor extid, e := range emap {\n\t\tdesc := e.desc\n\t\tif desc == nil {\n\t\t\tdesc = registeredExtensions[extid]\n\t\t\tif desc == nil {\n\t\t\t\tdesc = &ExtensionDesc{Field: extid}\n\t\t\t}\n\t\t}\n\n\t\textensions = append(extensions, desc)\n\t}\n\treturn extensions, nil\n}\n\n// SetExtension sets the specified extension of pb to the specified value.\nfunc SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {\n\tif epb, ok := pb.(extensionsBytes); ok {\n\t\tClearExtension(pb, extension)\n\t\tnewb, err := encodeExtension(extension, value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbb := epb.GetExtensions()\n\t\t*bb = append(*bb, newb...)\n\t\treturn nil\n\t}\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := checkExtensionTypes(epb, extension); err != nil {\n\t\treturn err\n\t}\n\ttyp := reflect.TypeOf(extension.ExtensionType)\n\tif typ != reflect.TypeOf(value) {\n\t\treturn fmt.Errorf(\"proto: bad extension value type. got: %T, want: %T\", value, extension.ExtensionType)\n\t}\n\t// nil extension values need to be caught early, because the\n\t// encoder can't distinguish an ErrNil due to a nil extension\n\t// from an ErrNil due to a missing field. Extensions are\n\t// always optional, so the encoder would just swallow the error\n\t// and drop all the extensions from the encoded message.\n\tif reflect.ValueOf(value).IsNil() {\n\t\treturn fmt.Errorf(\"proto: SetExtension called with nil value of type %T\", value)\n\t}\n\n\textmap := epb.extensionsWrite()\n\textmap[extension.Field] = Extension{desc: extension, value: value}\n\treturn nil\n}\n\n// ClearAllExtensions clears all extensions from pb.\nfunc ClearAllExtensions(pb Message) {\n\tif epb, doki := pb.(extensionsBytes); doki {\n\t\text := epb.GetExtensions()\n\t\t*ext = []byte{}\n\t\treturn\n\t}\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn\n\t}\n\tm := epb.extensionsWrite()\n\tfor k := range m {\n\t\tdelete(m, k)\n\t}\n}\n\n// A global registry of extensions.\n// The generated code will register the generated descriptors by calling RegisterExtension.\n\nvar extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc)\n\n// RegisterExtension is called from the generated code.\nfunc RegisterExtension(desc *ExtensionDesc) {\n\tst := reflect.TypeOf(desc.ExtendedType).Elem()\n\tm := extensionMaps[st]\n\tif m == nil {\n\t\tm = make(map[int32]*ExtensionDesc)\n\t\textensionMaps[st] = m\n\t}\n\tif _, ok := m[desc.Field]; ok {\n\t\tpanic(\"proto: duplicate extension registered: \" + st.String() + \" \" + strconv.Itoa(int(desc.Field)))\n\t}\n\tm[desc.Field] = desc\n}\n\n// RegisteredExtensions returns a map of the registered extensions of a\n// protocol buffer struct, indexed by the extension number.\n// The argument pb should be a nil pointer to the struct type.\nfunc RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {\n\treturn extensionMaps[reflect.TypeOf(pb).Elem()]\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/extensions_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n)\n\ntype extensionsBytes interface {\n\tMessage\n\tExtensionRangeArray() []ExtensionRange\n\tGetExtensions() *[]byte\n}\n\ntype slowExtensionAdapter struct {\n\textensionsBytes\n}\n\nfunc (s slowExtensionAdapter) extensionsWrite() map[int32]Extension {\n\tpanic(\"Please report a bug to github.com/gogo/protobuf if you see this message: Writing extensions is not supported for extensions stored in a byte slice field.\")\n}\n\nfunc (s slowExtensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {\n\tb := s.GetExtensions()\n\tm, err := BytesToExtensionsMap(*b)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn m, notLocker{}\n}\n\nfunc GetBoolExtension(pb Message, extension *ExtensionDesc, ifnotset bool) bool {\n\tif reflect.ValueOf(pb).IsNil() {\n\t\treturn ifnotset\n\t}\n\tvalue, err := GetExtension(pb, extension)\n\tif err != nil {\n\t\treturn ifnotset\n\t}\n\tif value == nil {\n\t\treturn ifnotset\n\t}\n\tif value.(*bool) == nil {\n\t\treturn ifnotset\n\t}\n\treturn *(value.(*bool))\n}\n\nfunc (this *Extension) Equal(that *Extension) bool {\n\tif err := this.Encode(); err != nil {\n\t\treturn false\n\t}\n\tif err := that.Encode(); err != nil {\n\t\treturn false\n\t}\n\treturn bytes.Equal(this.enc, that.enc)\n}\n\nfunc (this *Extension) Compare(that *Extension) int {\n\tif err := this.Encode(); err != nil {\n\t\treturn 1\n\t}\n\tif err := that.Encode(); err != nil {\n\t\treturn -1\n\t}\n\treturn bytes.Compare(this.enc, that.enc)\n}\n\nfunc SizeOfInternalExtension(m extendableProto) (n int) {\n\tinfo := getMarshalInfo(reflect.TypeOf(m))\n\treturn info.sizeV1Extensions(m.extensionsWrite())\n}\n\ntype sortableMapElem struct {\n\tfield int32\n\text   Extension\n}\n\nfunc newSortableExtensionsFromMap(m map[int32]Extension) sortableExtensions {\n\ts := make(sortableExtensions, 0, len(m))\n\tfor k, v := range m {\n\t\ts = append(s, &sortableMapElem{field: k, ext: v})\n\t}\n\treturn s\n}\n\ntype sortableExtensions []*sortableMapElem\n\nfunc (this sortableExtensions) Len() int { return len(this) }\n\nfunc (this sortableExtensions) Swap(i, j int) { this[i], this[j] = this[j], this[i] }\n\nfunc (this sortableExtensions) Less(i, j int) bool { return this[i].field < this[j].field }\n\nfunc (this sortableExtensions) String() string {\n\tsort.Sort(this)\n\tss := make([]string, len(this))\n\tfor i := range this {\n\t\tss[i] = fmt.Sprintf(\"%d: %v\", this[i].field, this[i].ext)\n\t}\n\treturn \"map[\" + strings.Join(ss, \",\") + \"]\"\n}\n\nfunc StringFromInternalExtension(m extendableProto) string {\n\treturn StringFromExtensionsMap(m.extensionsWrite())\n}\n\nfunc StringFromExtensionsMap(m map[int32]Extension) string {\n\treturn newSortableExtensionsFromMap(m).String()\n}\n\nfunc StringFromExtensionsBytes(ext []byte) string {\n\tm, err := BytesToExtensionsMap(ext)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn StringFromExtensionsMap(m)\n}\n\nfunc EncodeInternalExtension(m extendableProto, data []byte) (n int, err error) {\n\treturn EncodeExtensionMap(m.extensionsWrite(), data)\n}\n\nfunc EncodeInternalExtensionBackwards(m extendableProto, data []byte) (n int, err error) {\n\treturn EncodeExtensionMapBackwards(m.extensionsWrite(), data)\n}\n\nfunc EncodeExtensionMap(m map[int32]Extension, data []byte) (n int, err error) {\n\to := 0\n\tfor _, e := range m {\n\t\tif err := e.Encode(); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn := copy(data[o:], e.enc)\n\t\tif n != len(e.enc) {\n\t\t\treturn 0, io.ErrShortBuffer\n\t\t}\n\t\to += n\n\t}\n\treturn o, nil\n}\n\nfunc EncodeExtensionMapBackwards(m map[int32]Extension, data []byte) (n int, err error) {\n\to := 0\n\tend := len(data)\n\tfor _, e := range m {\n\t\tif err := e.Encode(); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn := copy(data[end-len(e.enc):], e.enc)\n\t\tif n != len(e.enc) {\n\t\t\treturn 0, io.ErrShortBuffer\n\t\t}\n\t\tend -= n\n\t\to += n\n\t}\n\treturn o, nil\n}\n\nfunc GetRawExtension(m map[int32]Extension, id int32) ([]byte, error) {\n\te := m[id]\n\tif err := e.Encode(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn e.enc, nil\n}\n\nfunc size(buf []byte, wire int) (int, error) {\n\tswitch wire {\n\tcase WireVarint:\n\t\t_, n := DecodeVarint(buf)\n\t\treturn n, nil\n\tcase WireFixed64:\n\t\treturn 8, nil\n\tcase WireBytes:\n\t\tv, n := DecodeVarint(buf)\n\t\treturn int(v) + n, nil\n\tcase WireFixed32:\n\t\treturn 4, nil\n\tcase WireStartGroup:\n\t\toffset := 0\n\t\tfor {\n\t\t\tu, n := DecodeVarint(buf[offset:])\n\t\t\tfwire := int(u & 0x7)\n\t\t\toffset += n\n\t\t\tif fwire == WireEndGroup {\n\t\t\t\treturn offset, nil\n\t\t\t}\n\t\t\ts, err := size(buf[offset:], wire)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\toffset += s\n\t\t}\n\t}\n\treturn 0, fmt.Errorf(\"proto: can't get size for unknown wire type %d\", wire)\n}\n\nfunc BytesToExtensionsMap(buf []byte) (map[int32]Extension, error) {\n\tm := make(map[int32]Extension)\n\ti := 0\n\tfor i < len(buf) {\n\t\ttag, n := DecodeVarint(buf[i:])\n\t\tif n <= 0 {\n\t\t\treturn nil, fmt.Errorf(\"unable to decode varint\")\n\t\t}\n\t\tfieldNum := int32(tag >> 3)\n\t\twireType := int(tag & 0x7)\n\t\tl, err := size(buf[i+n:], wireType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tend := i + int(l) + n\n\t\tm[int32(fieldNum)] = Extension{enc: buf[i:end]}\n\t\ti = end\n\t}\n\treturn m, nil\n}\n\nfunc NewExtension(e []byte) Extension {\n\tee := Extension{enc: make([]byte, len(e))}\n\tcopy(ee.enc, e)\n\treturn ee\n}\n\nfunc AppendExtension(e Message, tag int32, buf []byte) {\n\tif ee, eok := e.(extensionsBytes); eok {\n\t\text := ee.GetExtensions()\n\t\t*ext = append(*ext, buf...)\n\t\treturn\n\t}\n\tif ee, eok := e.(extendableProto); eok {\n\t\tm := ee.extensionsWrite()\n\t\text := m[int32(tag)] // may be missing\n\t\text.enc = append(ext.enc, buf...)\n\t\tm[int32(tag)] = ext\n\t}\n}\n\nfunc encodeExtension(extension *ExtensionDesc, value interface{}) ([]byte, error) {\n\tu := getMarshalInfo(reflect.TypeOf(extension.ExtendedType))\n\tei := u.getExtElemInfo(extension)\n\tv := value\n\tp := toAddrPointer(&v, ei.isptr)\n\tsiz := ei.sizer(p, SizeVarint(ei.wiretag))\n\tbuf := make([]byte, 0, siz)\n\treturn ei.marshaler(buf, p, ei.wiretag, false)\n}\n\nfunc decodeExtensionFromBytes(extension *ExtensionDesc, buf []byte) (interface{}, error) {\n\to := 0\n\tfor o < len(buf) {\n\t\ttag, n := DecodeVarint((buf)[o:])\n\t\tfieldNum := int32(tag >> 3)\n\t\twireType := int(tag & 0x7)\n\t\tif o+n > len(buf) {\n\t\t\treturn nil, fmt.Errorf(\"unable to decode extension\")\n\t\t}\n\t\tl, err := size((buf)[o+n:], wireType)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif int32(fieldNum) == extension.Field {\n\t\t\tif o+n+l > len(buf) {\n\t\t\t\treturn nil, fmt.Errorf(\"unable to decode extension\")\n\t\t\t}\n\t\t\tv, err := decodeExtension((buf)[o:o+n+l], extension)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn v, nil\n\t\t}\n\t\to += n + l\n\t}\n\treturn defaultExtensionValue(extension)\n}\n\nfunc (this *Extension) Encode() error {\n\tif this.enc == nil {\n\t\tvar err error\n\t\tthis.enc, err = encodeExtension(this.desc, this.value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (this Extension) GoString() string {\n\tif err := this.Encode(); err != nil {\n\t\treturn fmt.Sprintf(\"error encoding extension: %v\", err)\n\t}\n\treturn fmt.Sprintf(\"proto.NewExtension(%#v)\", this.enc)\n}\n\nfunc SetUnsafeExtension(pb Message, fieldNum int32, value interface{}) error {\n\ttyp := reflect.TypeOf(pb).Elem()\n\text, ok := extensionMaps[typ]\n\tif !ok {\n\t\treturn fmt.Errorf(\"proto: bad extended type; %s is not extendable\", typ.String())\n\t}\n\tdesc, ok := ext[fieldNum]\n\tif !ok {\n\t\treturn errors.New(\"proto: bad extension number; not in declared ranges\")\n\t}\n\treturn SetExtension(pb, desc, value)\n}\n\nfunc GetUnsafeExtension(pb Message, fieldNum int32) (interface{}, error) {\n\ttyp := reflect.TypeOf(pb).Elem()\n\text, ok := extensionMaps[typ]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"proto: bad extended type; %s is not extendable\", typ.String())\n\t}\n\tdesc, ok := ext[fieldNum]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unregistered field number %d\", fieldNum)\n\t}\n\treturn GetExtension(pb, desc)\n}\n\nfunc NewUnsafeXXX_InternalExtensions(m map[int32]Extension) XXX_InternalExtensions {\n\tx := &XXX_InternalExtensions{\n\t\tp: new(struct {\n\t\t\tmu           sync.Mutex\n\t\t\textensionMap map[int32]Extension\n\t\t}),\n\t}\n\tx.p.extensionMap = m\n\treturn *x\n}\n\nfunc GetUnsafeExtensionsMap(extendable Message) map[int32]Extension {\n\tpb := extendable.(extendableProto)\n\treturn pb.extensionsWrite()\n}\n\nfunc deleteExtension(pb extensionsBytes, theFieldNum int32, offset int) int {\n\text := pb.GetExtensions()\n\tfor offset < len(*ext) {\n\t\ttag, n1 := DecodeVarint((*ext)[offset:])\n\t\tfieldNum := int32(tag >> 3)\n\t\twireType := int(tag & 0x7)\n\t\tn2, err := size((*ext)[offset+n1:], wireType)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tnewOffset := offset + n1 + n2\n\t\tif fieldNum == theFieldNum {\n\t\t\t*ext = append((*ext)[:offset], (*ext)[newOffset:]...)\n\t\t\treturn offset\n\t\t}\n\t\toffset = newOffset\n\t}\n\treturn -1\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/lib.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/*\nPackage proto converts data structures to and from the wire format of\nprotocol buffers.  It works in concert with the Go source code generated\nfor .proto files by the protocol compiler.\n\nA summary of the properties of the protocol buffer interface\nfor a protocol buffer variable v:\n\n  - Names are turned from camel_case to CamelCase for export.\n  - There are no methods on v to set fields; just treat\n\tthem as structure fields.\n  - There are getters that return a field's value if set,\n\tand return the field's default value if unset.\n\tThe getters work even if the receiver is a nil message.\n  - The zero value for a struct is its correct initialization state.\n\tAll desired fields must be set before marshaling.\n  - A Reset() method will restore a protobuf struct to its zero state.\n  - Non-repeated fields are pointers to the values; nil means unset.\n\tThat is, optional or required field int32 f becomes F *int32.\n  - Repeated fields are slices.\n  - Helper functions are available to aid the setting of fields.\n\tmsg.Foo = proto.String(\"hello\") // set field\n  - Constants are defined to hold the default values of all fields that\n\thave them.  They have the form Default_StructName_FieldName.\n\tBecause the getter methods handle defaulted values,\n\tdirect use of these constants should be rare.\n  - Enums are given type names and maps from names to values.\n\tEnum values are prefixed by the enclosing message's name, or by the\n\tenum's type name if it is a top-level enum. Enum types have a String\n\tmethod, and a Enum method to assist in message construction.\n  - Nested messages, groups and enums have type names prefixed with the name of\n\tthe surrounding message type.\n  - Extensions are given descriptor names that start with E_,\n\tfollowed by an underscore-delimited list of the nested messages\n\tthat contain it (if any) followed by the CamelCased name of the\n\textension field itself.  HasExtension, ClearExtension, GetExtension\n\tand SetExtension are functions for manipulating extensions.\n  - Oneof field sets are given a single field in their message,\n\twith distinguished wrapper types for each possible field value.\n  - Marshal and Unmarshal are functions to encode and decode the wire format.\n\nWhen the .proto file specifies `syntax=\"proto3\"`, there are some differences:\n\n  - Non-repeated fields of non-message type are values instead of pointers.\n  - Enum types do not get an Enum method.\n\nThe simplest way to describe this is to see an example.\nGiven file test.proto, containing\n\n\tpackage example;\n\n\tenum FOO { X = 17; }\n\n\tmessage Test {\n\t  required string label = 1;\n\t  optional int32 type = 2 [default=77];\n\t  repeated int64 reps = 3;\n\t  optional group OptionalGroup = 4 {\n\t    required string RequiredField = 5;\n\t  }\n\t  oneof union {\n\t    int32 number = 6;\n\t    string name = 7;\n\t  }\n\t}\n\nThe resulting file, test.pb.go, is:\n\n\tpackage example\n\n\timport proto \"github.com/gogo/protobuf/proto\"\n\timport math \"math\"\n\n\ttype FOO int32\n\tconst (\n\t\tFOO_X FOO = 17\n\t)\n\tvar FOO_name = map[int32]string{\n\t\t17: \"X\",\n\t}\n\tvar FOO_value = map[string]int32{\n\t\t\"X\": 17,\n\t}\n\n\tfunc (x FOO) Enum() *FOO {\n\t\tp := new(FOO)\n\t\t*p = x\n\t\treturn p\n\t}\n\tfunc (x FOO) String() string {\n\t\treturn proto.EnumName(FOO_name, int32(x))\n\t}\n\tfunc (x *FOO) UnmarshalJSON(data []byte) error {\n\t\tvalue, err := proto.UnmarshalJSONEnum(FOO_value, data)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*x = FOO(value)\n\t\treturn nil\n\t}\n\n\ttype Test struct {\n\t\tLabel         *string             `protobuf:\"bytes,1,req,name=label\" json:\"label,omitempty\"`\n\t\tType          *int32              `protobuf:\"varint,2,opt,name=type,def=77\" json:\"type,omitempty\"`\n\t\tReps          []int64             `protobuf:\"varint,3,rep,name=reps\" json:\"reps,omitempty\"`\n\t\tOptionalgroup *Test_OptionalGroup `protobuf:\"group,4,opt,name=OptionalGroup\" json:\"optionalgroup,omitempty\"`\n\t\t// Types that are valid to be assigned to Union:\n\t\t//\t*Test_Number\n\t\t//\t*Test_Name\n\t\tUnion            isTest_Union `protobuf_oneof:\"union\"`\n\t\tXXX_unrecognized []byte       `json:\"-\"`\n\t}\n\tfunc (m *Test) Reset()         { *m = Test{} }\n\tfunc (m *Test) String() string { return proto.CompactTextString(m) }\n\tfunc (*Test) ProtoMessage() {}\n\n\ttype isTest_Union interface {\n\t\tisTest_Union()\n\t}\n\n\ttype Test_Number struct {\n\t\tNumber int32 `protobuf:\"varint,6,opt,name=number\"`\n\t}\n\ttype Test_Name struct {\n\t\tName string `protobuf:\"bytes,7,opt,name=name\"`\n\t}\n\n\tfunc (*Test_Number) isTest_Union() {}\n\tfunc (*Test_Name) isTest_Union()   {}\n\n\tfunc (m *Test) GetUnion() isTest_Union {\n\t\tif m != nil {\n\t\t\treturn m.Union\n\t\t}\n\t\treturn nil\n\t}\n\tconst Default_Test_Type int32 = 77\n\n\tfunc (m *Test) GetLabel() string {\n\t\tif m != nil && m.Label != nil {\n\t\t\treturn *m.Label\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tfunc (m *Test) GetType() int32 {\n\t\tif m != nil && m.Type != nil {\n\t\t\treturn *m.Type\n\t\t}\n\t\treturn Default_Test_Type\n\t}\n\n\tfunc (m *Test) GetOptionalgroup() *Test_OptionalGroup {\n\t\tif m != nil {\n\t\t\treturn m.Optionalgroup\n\t\t}\n\t\treturn nil\n\t}\n\n\ttype Test_OptionalGroup struct {\n\t\tRequiredField *string `protobuf:\"bytes,5,req\" json:\"RequiredField,omitempty\"`\n\t}\n\tfunc (m *Test_OptionalGroup) Reset()         { *m = Test_OptionalGroup{} }\n\tfunc (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) }\n\n\tfunc (m *Test_OptionalGroup) GetRequiredField() string {\n\t\tif m != nil && m.RequiredField != nil {\n\t\t\treturn *m.RequiredField\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tfunc (m *Test) GetNumber() int32 {\n\t\tif x, ok := m.GetUnion().(*Test_Number); ok {\n\t\t\treturn x.Number\n\t\t}\n\t\treturn 0\n\t}\n\n\tfunc (m *Test) GetName() string {\n\t\tif x, ok := m.GetUnion().(*Test_Name); ok {\n\t\t\treturn x.Name\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tfunc init() {\n\t\tproto.RegisterEnum(\"example.FOO\", FOO_name, FOO_value)\n\t}\n\nTo create and play with a Test object:\n\n\tpackage main\n\n\timport (\n\t\t\"log\"\n\n\t\t\"github.com/gogo/protobuf/proto\"\n\t\tpb \"./example.pb\"\n\t)\n\n\tfunc main() {\n\t\ttest := &pb.Test{\n\t\t\tLabel: proto.String(\"hello\"),\n\t\t\tType:  proto.Int32(17),\n\t\t\tReps:  []int64{1, 2, 3},\n\t\t\tOptionalgroup: &pb.Test_OptionalGroup{\n\t\t\t\tRequiredField: proto.String(\"good bye\"),\n\t\t\t},\n\t\t\tUnion: &pb.Test_Name{\"fred\"},\n\t\t}\n\t\tdata, err := proto.Marshal(test)\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"marshaling error: \", err)\n\t\t}\n\t\tnewTest := &pb.Test{}\n\t\terr = proto.Unmarshal(data, newTest)\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"unmarshaling error: \", err)\n\t\t}\n\t\t// Now test and newTest contain the same data.\n\t\tif test.GetLabel() != newTest.GetLabel() {\n\t\t\tlog.Fatalf(\"data mismatch %q != %q\", test.GetLabel(), newTest.GetLabel())\n\t\t}\n\t\t// Use a type switch to determine which oneof was set.\n\t\tswitch u := test.Union.(type) {\n\t\tcase *pb.Test_Number: // u.Number contains the number.\n\t\tcase *pb.Test_Name: // u.Name contains the string.\n\t\t}\n\t\t// etc.\n\t}\n*/\npackage proto\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"sync\"\n)\n\n// RequiredNotSetError is an error type returned by either Marshal or Unmarshal.\n// Marshal reports this when a required field is not initialized.\n// Unmarshal reports this when a required field is missing from the wire data.\ntype RequiredNotSetError struct{ field string }\n\nfunc (e *RequiredNotSetError) Error() string {\n\tif e.field == \"\" {\n\t\treturn fmt.Sprintf(\"proto: required field not set\")\n\t}\n\treturn fmt.Sprintf(\"proto: required field %q not set\", e.field)\n}\nfunc (e *RequiredNotSetError) RequiredNotSet() bool {\n\treturn true\n}\n\ntype invalidUTF8Error struct{ field string }\n\nfunc (e *invalidUTF8Error) Error() string {\n\tif e.field == \"\" {\n\t\treturn \"proto: invalid UTF-8 detected\"\n\t}\n\treturn fmt.Sprintf(\"proto: field %q contains invalid UTF-8\", e.field)\n}\nfunc (e *invalidUTF8Error) InvalidUTF8() bool {\n\treturn true\n}\n\n// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8.\n// This error should not be exposed to the external API as such errors should\n// be recreated with the field information.\nvar errInvalidUTF8 = &invalidUTF8Error{}\n\n// isNonFatal reports whether the error is either a RequiredNotSet error\n// or a InvalidUTF8 error.\nfunc isNonFatal(err error) bool {\n\tif re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() {\n\t\treturn true\n\t}\n\tif re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() {\n\t\treturn true\n\t}\n\treturn false\n}\n\ntype nonFatal struct{ E error }\n\n// Merge merges err into nf and reports whether it was successful.\n// Otherwise it returns false for any fatal non-nil errors.\nfunc (nf *nonFatal) Merge(err error) (ok bool) {\n\tif err == nil {\n\t\treturn true // not an error\n\t}\n\tif !isNonFatal(err) {\n\t\treturn false // fatal error\n\t}\n\tif nf.E == nil {\n\t\tnf.E = err // store first instance of non-fatal error\n\t}\n\treturn true\n}\n\n// Message is implemented by generated protocol buffer messages.\ntype Message interface {\n\tReset()\n\tString() string\n\tProtoMessage()\n}\n\n// A Buffer is a buffer manager for marshaling and unmarshaling\n// protocol buffers.  It may be reused between invocations to\n// reduce memory usage.  It is not necessary to use a Buffer;\n// the global functions Marshal and Unmarshal create a\n// temporary Buffer and are fine for most applications.\ntype Buffer struct {\n\tbuf   []byte // encode/decode byte stream\n\tindex int    // read point\n\n\tdeterministic bool\n}\n\n// NewBuffer allocates a new Buffer and initializes its internal data to\n// the contents of the argument slice.\nfunc NewBuffer(e []byte) *Buffer {\n\treturn &Buffer{buf: e}\n}\n\n// Reset resets the Buffer, ready for marshaling a new protocol buffer.\nfunc (p *Buffer) Reset() {\n\tp.buf = p.buf[0:0] // for reading/writing\n\tp.index = 0        // for reading\n}\n\n// SetBuf replaces the internal buffer with the slice,\n// ready for unmarshaling the contents of the slice.\nfunc (p *Buffer) SetBuf(s []byte) {\n\tp.buf = s\n\tp.index = 0\n}\n\n// Bytes returns the contents of the Buffer.\nfunc (p *Buffer) Bytes() []byte { return p.buf }\n\n// SetDeterministic sets whether to use deterministic serialization.\n//\n// Deterministic serialization guarantees that for a given binary, equal\n// messages will always be serialized to the same bytes. This implies:\n//\n//   - Repeated serialization of a message will return the same bytes.\n//   - Different processes of the same binary (which may be executing on\n//     different machines) will serialize equal messages to the same bytes.\n//\n// Note that the deterministic serialization is NOT canonical across\n// languages. It is not guaranteed to remain stable over time. It is unstable\n// across different builds with schema changes due to unknown fields.\n// Users who need canonical serialization (e.g., persistent storage in a\n// canonical form, fingerprinting, etc.) should define their own\n// canonicalization specification and implement their own serializer rather\n// than relying on this API.\n//\n// If deterministic serialization is requested, map entries will be sorted\n// by keys in lexographical order. This is an implementation detail and\n// subject to change.\nfunc (p *Buffer) SetDeterministic(deterministic bool) {\n\tp.deterministic = deterministic\n}\n\n/*\n * Helper routines for simplifying the creation of optional fields of basic type.\n */\n\n// Bool is a helper routine that allocates a new bool value\n// to store v and returns a pointer to it.\nfunc Bool(v bool) *bool {\n\treturn &v\n}\n\n// Int32 is a helper routine that allocates a new int32 value\n// to store v and returns a pointer to it.\nfunc Int32(v int32) *int32 {\n\treturn &v\n}\n\n// Int is a helper routine that allocates a new int32 value\n// to store v and returns a pointer to it, but unlike Int32\n// its argument value is an int.\nfunc Int(v int) *int32 {\n\tp := new(int32)\n\t*p = int32(v)\n\treturn p\n}\n\n// Int64 is a helper routine that allocates a new int64 value\n// to store v and returns a pointer to it.\nfunc Int64(v int64) *int64 {\n\treturn &v\n}\n\n// Float32 is a helper routine that allocates a new float32 value\n// to store v and returns a pointer to it.\nfunc Float32(v float32) *float32 {\n\treturn &v\n}\n\n// Float64 is a helper routine that allocates a new float64 value\n// to store v and returns a pointer to it.\nfunc Float64(v float64) *float64 {\n\treturn &v\n}\n\n// Uint32 is a helper routine that allocates a new uint32 value\n// to store v and returns a pointer to it.\nfunc Uint32(v uint32) *uint32 {\n\treturn &v\n}\n\n// Uint64 is a helper routine that allocates a new uint64 value\n// to store v and returns a pointer to it.\nfunc Uint64(v uint64) *uint64 {\n\treturn &v\n}\n\n// String is a helper routine that allocates a new string value\n// to store v and returns a pointer to it.\nfunc String(v string) *string {\n\treturn &v\n}\n\n// EnumName is a helper function to simplify printing protocol buffer enums\n// by name.  Given an enum map and a value, it returns a useful string.\nfunc EnumName(m map[int32]string, v int32) string {\n\ts, ok := m[v]\n\tif ok {\n\t\treturn s\n\t}\n\treturn strconv.Itoa(int(v))\n}\n\n// UnmarshalJSONEnum is a helper function to simplify recovering enum int values\n// from their JSON-encoded representation. Given a map from the enum's symbolic\n// names to its int values, and a byte buffer containing the JSON-encoded\n// value, it returns an int32 that can be cast to the enum type by the caller.\n//\n// The function can deal with both JSON representations, numeric and symbolic.\nfunc UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) {\n\tif data[0] == '\"' {\n\t\t// New style: enums are strings.\n\t\tvar repr string\n\t\tif err := json.Unmarshal(data, &repr); err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t\tval, ok := m[repr]\n\t\tif !ok {\n\t\t\treturn 0, fmt.Errorf(\"unrecognized enum %s value %q\", enumName, repr)\n\t\t}\n\t\treturn val, nil\n\t}\n\t// Old style: enums are ints.\n\tvar val int32\n\tif err := json.Unmarshal(data, &val); err != nil {\n\t\treturn 0, fmt.Errorf(\"cannot unmarshal %#q into enum %s\", data, enumName)\n\t}\n\treturn val, nil\n}\n\n// DebugPrint dumps the encoded data in b in a debugging format with a header\n// including the string s. Used in testing but made available for general debugging.\nfunc (p *Buffer) DebugPrint(s string, b []byte) {\n\tvar u uint64\n\n\tobuf := p.buf\n\tsindex := p.index\n\tp.buf = b\n\tp.index = 0\n\tdepth := 0\n\n\tfmt.Printf(\"\\n--- %s ---\\n\", s)\n\nout:\n\tfor {\n\t\tfor i := 0; i < depth; i++ {\n\t\t\tfmt.Print(\"  \")\n\t\t}\n\n\t\tindex := p.index\n\t\tif index == len(p.buf) {\n\t\t\tbreak\n\t\t}\n\n\t\top, err := p.DecodeVarint()\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"%3d: fetching op err %v\\n\", index, err)\n\t\t\tbreak out\n\t\t}\n\t\ttag := op >> 3\n\t\twire := op & 7\n\n\t\tswitch wire {\n\t\tdefault:\n\t\t\tfmt.Printf(\"%3d: t=%3d unknown wire=%d\\n\",\n\t\t\t\tindex, tag, wire)\n\t\t\tbreak out\n\n\t\tcase WireBytes:\n\t\t\tvar r []byte\n\n\t\t\tr, err = p.DecodeRawBytes(false)\n\t\t\tif err != nil {\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d bytes [%d]\", index, tag, len(r))\n\t\t\tif len(r) <= 6 {\n\t\t\t\tfor i := 0; i < len(r); i++ {\n\t\t\t\t\tfmt.Printf(\" %.2x\", r[i])\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor i := 0; i < 3; i++ {\n\t\t\t\t\tfmt.Printf(\" %.2x\", r[i])\n\t\t\t\t}\n\t\t\t\tfmt.Printf(\" ..\")\n\t\t\t\tfor i := len(r) - 3; i < len(r); i++ {\n\t\t\t\t\tfmt.Printf(\" %.2x\", r[i])\n\t\t\t\t}\n\t\t\t}\n\t\t\tfmt.Printf(\"\\n\")\n\n\t\tcase WireFixed32:\n\t\t\tu, err = p.DecodeFixed32()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"%3d: t=%3d fix32 err %v\\n\", index, tag, err)\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d fix32 %d\\n\", index, tag, u)\n\n\t\tcase WireFixed64:\n\t\t\tu, err = p.DecodeFixed64()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"%3d: t=%3d fix64 err %v\\n\", index, tag, err)\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d fix64 %d\\n\", index, tag, u)\n\n\t\tcase WireVarint:\n\t\t\tu, err = p.DecodeVarint()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"%3d: t=%3d varint err %v\\n\", index, tag, err)\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d varint %d\\n\", index, tag, u)\n\n\t\tcase WireStartGroup:\n\t\t\tfmt.Printf(\"%3d: t=%3d start\\n\", index, tag)\n\t\t\tdepth++\n\n\t\tcase WireEndGroup:\n\t\t\tdepth--\n\t\t\tfmt.Printf(\"%3d: t=%3d end\\n\", index, tag)\n\t\t}\n\t}\n\n\tif depth != 0 {\n\t\tfmt.Printf(\"%3d: start-end not balanced %d\\n\", p.index, depth)\n\t}\n\tfmt.Printf(\"\\n\")\n\n\tp.buf = obuf\n\tp.index = sindex\n}\n\n// SetDefaults sets unset protocol buffer fields to their default values.\n// It only modifies fields that are both unset and have defined defaults.\n// It recursively sets default values in any non-nil sub-messages.\nfunc SetDefaults(pb Message) {\n\tsetDefaults(reflect.ValueOf(pb), true, false)\n}\n\n// v is a struct.\nfunc setDefaults(v reflect.Value, recur, zeros bool) {\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tdefaultMu.RLock()\n\tdm, ok := defaults[v.Type()]\n\tdefaultMu.RUnlock()\n\tif !ok {\n\t\tdm = buildDefaultMessage(v.Type())\n\t\tdefaultMu.Lock()\n\t\tdefaults[v.Type()] = dm\n\t\tdefaultMu.Unlock()\n\t}\n\n\tfor _, sf := range dm.scalars {\n\t\tf := v.Field(sf.index)\n\t\tif !f.IsNil() {\n\t\t\t// field already set\n\t\t\tcontinue\n\t\t}\n\t\tdv := sf.value\n\t\tif dv == nil && !zeros {\n\t\t\t// no explicit default, and don't want to set zeros\n\t\t\tcontinue\n\t\t}\n\t\tfptr := f.Addr().Interface() // **T\n\t\t// TODO: Consider batching the allocations we do here.\n\t\tswitch sf.kind {\n\t\tcase reflect.Bool:\n\t\t\tb := new(bool)\n\t\t\tif dv != nil {\n\t\t\t\t*b = dv.(bool)\n\t\t\t}\n\t\t\t*(fptr.(**bool)) = b\n\t\tcase reflect.Float32:\n\t\t\tf := new(float32)\n\t\t\tif dv != nil {\n\t\t\t\t*f = dv.(float32)\n\t\t\t}\n\t\t\t*(fptr.(**float32)) = f\n\t\tcase reflect.Float64:\n\t\t\tf := new(float64)\n\t\t\tif dv != nil {\n\t\t\t\t*f = dv.(float64)\n\t\t\t}\n\t\t\t*(fptr.(**float64)) = f\n\t\tcase reflect.Int32:\n\t\t\t// might be an enum\n\t\t\tif ft := f.Type(); ft != int32PtrType {\n\t\t\t\t// enum\n\t\t\t\tf.Set(reflect.New(ft.Elem()))\n\t\t\t\tif dv != nil {\n\t\t\t\t\tf.Elem().SetInt(int64(dv.(int32)))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// int32 field\n\t\t\t\ti := new(int32)\n\t\t\t\tif dv != nil {\n\t\t\t\t\t*i = dv.(int32)\n\t\t\t\t}\n\t\t\t\t*(fptr.(**int32)) = i\n\t\t\t}\n\t\tcase reflect.Int64:\n\t\t\ti := new(int64)\n\t\t\tif dv != nil {\n\t\t\t\t*i = dv.(int64)\n\t\t\t}\n\t\t\t*(fptr.(**int64)) = i\n\t\tcase reflect.String:\n\t\t\ts := new(string)\n\t\t\tif dv != nil {\n\t\t\t\t*s = dv.(string)\n\t\t\t}\n\t\t\t*(fptr.(**string)) = s\n\t\tcase reflect.Uint8:\n\t\t\t// exceptional case: []byte\n\t\t\tvar b []byte\n\t\t\tif dv != nil {\n\t\t\t\tdb := dv.([]byte)\n\t\t\t\tb = make([]byte, len(db))\n\t\t\t\tcopy(b, db)\n\t\t\t} else {\n\t\t\t\tb = []byte{}\n\t\t\t}\n\t\t\t*(fptr.(*[]byte)) = b\n\t\tcase reflect.Uint32:\n\t\t\tu := new(uint32)\n\t\t\tif dv != nil {\n\t\t\t\t*u = dv.(uint32)\n\t\t\t}\n\t\t\t*(fptr.(**uint32)) = u\n\t\tcase reflect.Uint64:\n\t\t\tu := new(uint64)\n\t\t\tif dv != nil {\n\t\t\t\t*u = dv.(uint64)\n\t\t\t}\n\t\t\t*(fptr.(**uint64)) = u\n\t\tdefault:\n\t\t\tlog.Printf(\"proto: can't set default for field %v (sf.kind=%v)\", f, sf.kind)\n\t\t}\n\t}\n\n\tfor _, ni := range dm.nested {\n\t\tf := v.Field(ni)\n\t\t// f is *T or T or []*T or []T\n\t\tswitch f.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tsetDefaults(f, recur, zeros)\n\n\t\tcase reflect.Ptr:\n\t\t\tif f.IsNil() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsetDefaults(f, recur, zeros)\n\n\t\tcase reflect.Slice:\n\t\t\tfor i := 0; i < f.Len(); i++ {\n\t\t\t\te := f.Index(i)\n\t\t\t\tif e.Kind() == reflect.Ptr && e.IsNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsetDefaults(e, recur, zeros)\n\t\t\t}\n\n\t\tcase reflect.Map:\n\t\t\tfor _, k := range f.MapKeys() {\n\t\t\t\te := f.MapIndex(k)\n\t\t\t\tif e.IsNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsetDefaults(e, recur, zeros)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar (\n\t// defaults maps a protocol buffer struct type to a slice of the fields,\n\t// with its scalar fields set to their proto-declared non-zero default values.\n\tdefaultMu sync.RWMutex\n\tdefaults  = make(map[reflect.Type]defaultMessage)\n\n\tint32PtrType = reflect.TypeOf((*int32)(nil))\n)\n\n// defaultMessage represents information about the default values of a message.\ntype defaultMessage struct {\n\tscalars []scalarField\n\tnested  []int // struct field index of nested messages\n}\n\ntype scalarField struct {\n\tindex int          // struct field index\n\tkind  reflect.Kind // element type (the T in *T or []T)\n\tvalue interface{}  // the proto-declared default value, or nil\n}\n\n// t is a struct type.\nfunc buildDefaultMessage(t reflect.Type) (dm defaultMessage) {\n\tsprop := GetProperties(t)\n\tfor _, prop := range sprop.Prop {\n\t\tfi, ok := sprop.decoderTags.get(prop.Tag)\n\t\tif !ok {\n\t\t\t// XXX_unrecognized\n\t\t\tcontinue\n\t\t}\n\t\tft := t.Field(fi).Type\n\n\t\tsf, nested, err := fieldDefault(ft, prop)\n\t\tswitch {\n\t\tcase err != nil:\n\t\t\tlog.Print(err)\n\t\tcase nested:\n\t\t\tdm.nested = append(dm.nested, fi)\n\t\tcase sf != nil:\n\t\t\tsf.index = fi\n\t\t\tdm.scalars = append(dm.scalars, *sf)\n\t\t}\n\t}\n\n\treturn dm\n}\n\n// fieldDefault returns the scalarField for field type ft.\n// sf will be nil if the field can not have a default.\n// nestedMessage will be true if this is a nested message.\n// Note that sf.index is not set on return.\nfunc fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) {\n\tvar canHaveDefault bool\n\tswitch ft.Kind() {\n\tcase reflect.Struct:\n\t\tnestedMessage = true // non-nullable\n\n\tcase reflect.Ptr:\n\t\tif ft.Elem().Kind() == reflect.Struct {\n\t\t\tnestedMessage = true\n\t\t} else {\n\t\t\tcanHaveDefault = true // proto2 scalar field\n\t\t}\n\n\tcase reflect.Slice:\n\t\tswitch ft.Elem().Kind() {\n\t\tcase reflect.Ptr, reflect.Struct:\n\t\t\tnestedMessage = true // repeated message\n\t\tcase reflect.Uint8:\n\t\t\tcanHaveDefault = true // bytes field\n\t\t}\n\n\tcase reflect.Map:\n\t\tif ft.Elem().Kind() == reflect.Ptr {\n\t\t\tnestedMessage = true // map with message values\n\t\t}\n\t}\n\n\tif !canHaveDefault {\n\t\tif nestedMessage {\n\t\t\treturn nil, true, nil\n\t\t}\n\t\treturn nil, false, nil\n\t}\n\n\t// We now know that ft is a pointer or slice.\n\tsf = &scalarField{kind: ft.Elem().Kind()}\n\n\t// scalar fields without defaults\n\tif !prop.HasDefault {\n\t\treturn sf, false, nil\n\t}\n\n\t// a scalar field: either *T or []byte\n\tswitch ft.Elem().Kind() {\n\tcase reflect.Bool:\n\t\tx, err := strconv.ParseBool(prop.Default)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default bool %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tcase reflect.Float32:\n\t\tx, err := strconv.ParseFloat(prop.Default, 32)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default float32 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = float32(x)\n\tcase reflect.Float64:\n\t\tx, err := strconv.ParseFloat(prop.Default, 64)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default float64 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tcase reflect.Int32:\n\t\tx, err := strconv.ParseInt(prop.Default, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default int32 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = int32(x)\n\tcase reflect.Int64:\n\t\tx, err := strconv.ParseInt(prop.Default, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default int64 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tcase reflect.String:\n\t\tsf.value = prop.Default\n\tcase reflect.Uint8:\n\t\t// []byte (not *uint8)\n\t\tsf.value = []byte(prop.Default)\n\tcase reflect.Uint32:\n\t\tx, err := strconv.ParseUint(prop.Default, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default uint32 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = uint32(x)\n\tcase reflect.Uint64:\n\t\tx, err := strconv.ParseUint(prop.Default, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default uint64 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tdefault:\n\t\treturn nil, false, fmt.Errorf(\"proto: unhandled def kind %v\", ft.Elem().Kind())\n\t}\n\n\treturn sf, false, nil\n}\n\n// mapKeys returns a sort.Interface to be used for sorting the map keys.\n// Map fields may have key types of non-float scalars, strings and enums.\nfunc mapKeys(vs []reflect.Value) sort.Interface {\n\ts := mapKeySorter{vs: vs}\n\n\t// Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps.\n\tif len(vs) == 0 {\n\t\treturn s\n\t}\n\tswitch vs[0].Kind() {\n\tcase reflect.Int32, reflect.Int64:\n\t\ts.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }\n\tcase reflect.Uint32, reflect.Uint64:\n\t\ts.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }\n\tcase reflect.Bool:\n\t\ts.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true\n\tcase reflect.String:\n\t\ts.less = func(a, b reflect.Value) bool { return a.String() < b.String() }\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unsupported map key type: %v\", vs[0].Kind()))\n\t}\n\n\treturn s\n}\n\ntype mapKeySorter struct {\n\tvs   []reflect.Value\n\tless func(a, b reflect.Value) bool\n}\n\nfunc (s mapKeySorter) Len() int      { return len(s.vs) }\nfunc (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] }\nfunc (s mapKeySorter) Less(i, j int) bool {\n\treturn s.less(s.vs[i], s.vs[j])\n}\n\n// isProto3Zero reports whether v is a zero proto3 value.\nfunc isProto3Zero(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint32, reflect.Uint64:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.String:\n\t\treturn v.String() == \"\"\n\t}\n\treturn false\n}\n\nconst (\n\t// ProtoPackageIsVersion3 is referenced from generated protocol buffer files\n\t// to assert that that code is compatible with this version of the proto package.\n\tGoGoProtoPackageIsVersion3 = true\n\n\t// ProtoPackageIsVersion2 is referenced from generated protocol buffer files\n\t// to assert that that code is compatible with this version of the proto package.\n\tGoGoProtoPackageIsVersion2 = true\n\n\t// ProtoPackageIsVersion1 is referenced from generated protocol buffer files\n\t// to assert that that code is compatible with this version of the proto package.\n\tGoGoProtoPackageIsVersion1 = true\n)\n\n// InternalMessageInfo is a type used internally by generated .pb.go files.\n// This type is not intended to be used by non-generated code.\n// This type is not subject to any compatibility guarantee.\ntype InternalMessageInfo struct {\n\tmarshal   *marshalInfo\n\tunmarshal *unmarshalInfo\n\tmerge     *mergeInfo\n\tdiscard   *discardInfo\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/lib_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"encoding/json\"\n\t\"strconv\"\n)\n\ntype Sizer interface {\n\tSize() int\n}\n\ntype ProtoSizer interface {\n\tProtoSize() int\n}\n\nfunc MarshalJSONEnum(m map[int32]string, value int32) ([]byte, error) {\n\ts, ok := m[value]\n\tif !ok {\n\t\ts = strconv.Itoa(int(value))\n\t}\n\treturn json.Marshal(s)\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/message_set.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Support for message sets.\n */\n\nimport (\n\t\"errors\"\n)\n\n// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.\n// A message type ID is required for storing a protocol buffer in a message set.\nvar errNoMessageTypeID = errors.New(\"proto does not have a message type ID\")\n\n// The first two types (_MessageSet_Item and messageSet)\n// model what the protocol compiler produces for the following protocol message:\n//   message MessageSet {\n//     repeated group Item = 1 {\n//       required int32 type_id = 2;\n//       required string message = 3;\n//     };\n//   }\n// That is the MessageSet wire format. We can't use a proto to generate these\n// because that would introduce a circular dependency between it and this package.\n\ntype _MessageSet_Item struct {\n\tTypeId  *int32 `protobuf:\"varint,2,req,name=type_id\"`\n\tMessage []byte `protobuf:\"bytes,3,req,name=message\"`\n}\n\ntype messageSet struct {\n\tItem             []*_MessageSet_Item `protobuf:\"group,1,rep\"`\n\tXXX_unrecognized []byte\n\t// TODO: caching?\n}\n\n// Make sure messageSet is a Message.\nvar _ Message = (*messageSet)(nil)\n\n// messageTypeIder is an interface satisfied by a protocol buffer type\n// that may be stored in a MessageSet.\ntype messageTypeIder interface {\n\tMessageTypeId() int32\n}\n\nfunc (ms *messageSet) find(pb Message) *_MessageSet_Item {\n\tmti, ok := pb.(messageTypeIder)\n\tif !ok {\n\t\treturn nil\n\t}\n\tid := mti.MessageTypeId()\n\tfor _, item := range ms.Item {\n\t\tif *item.TypeId == id {\n\t\t\treturn item\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (ms *messageSet) Has(pb Message) bool {\n\treturn ms.find(pb) != nil\n}\n\nfunc (ms *messageSet) Unmarshal(pb Message) error {\n\tif item := ms.find(pb); item != nil {\n\t\treturn Unmarshal(item.Message, pb)\n\t}\n\tif _, ok := pb.(messageTypeIder); !ok {\n\t\treturn errNoMessageTypeID\n\t}\n\treturn nil // TODO: return error instead?\n}\n\nfunc (ms *messageSet) Marshal(pb Message) error {\n\tmsg, err := Marshal(pb)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif item := ms.find(pb); item != nil {\n\t\t// reuse existing item\n\t\titem.Message = msg\n\t\treturn nil\n\t}\n\n\tmti, ok := pb.(messageTypeIder)\n\tif !ok {\n\t\treturn errNoMessageTypeID\n\t}\n\n\tmtid := mti.MessageTypeId()\n\tms.Item = append(ms.Item, &_MessageSet_Item{\n\t\tTypeId:  &mtid,\n\t\tMessage: msg,\n\t})\n\treturn nil\n}\n\nfunc (ms *messageSet) Reset()         { *ms = messageSet{} }\nfunc (ms *messageSet) String() string { return CompactTextString(ms) }\nfunc (*messageSet) ProtoMessage()     {}\n\n// Support for the message_set_wire_format message option.\n\nfunc skipVarint(buf []byte) []byte {\n\ti := 0\n\tfor ; buf[i]&0x80 != 0; i++ {\n\t}\n\treturn buf[i+1:]\n}\n\n// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.\n// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.\nfunc unmarshalMessageSet(buf []byte, exts interface{}) error {\n\tvar m map[int32]Extension\n\tswitch exts := exts.(type) {\n\tcase *XXX_InternalExtensions:\n\t\tm = exts.extensionsWrite()\n\tcase map[int32]Extension:\n\t\tm = exts\n\tdefault:\n\t\treturn errors.New(\"proto: not an extension map\")\n\t}\n\n\tms := new(messageSet)\n\tif err := Unmarshal(buf, ms); err != nil {\n\t\treturn err\n\t}\n\tfor _, item := range ms.Item {\n\t\tid := *item.TypeId\n\t\tmsg := item.Message\n\n\t\t// Restore wire type and field number varint, plus length varint.\n\t\t// Be careful to preserve duplicate items.\n\t\tb := EncodeVarint(uint64(id)<<3 | WireBytes)\n\t\tif ext, ok := m[id]; ok {\n\t\t\t// Existing data; rip off the tag and length varint\n\t\t\t// so we join the new data correctly.\n\t\t\t// We can assume that ext.enc is set because we are unmarshaling.\n\t\t\to := ext.enc[len(b):]   // skip wire type and field number\n\t\t\t_, n := DecodeVarint(o) // calculate length of length varint\n\t\t\to = o[n:]               // skip length varint\n\t\t\tmsg = append(o, msg...) // join old data and new data\n\t\t}\n\t\tb = append(b, EncodeVarint(uint64(len(msg)))...)\n\t\tb = append(b, msg...)\n\n\t\tm[id] = Extension{enc: b}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/pointer_reflect.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2012 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// +build purego appengine js\n\n// This file contains an implementation of proto field accesses using package reflect.\n// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can\n// be used on App Engine.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n)\n\nconst unsafeAllowed = false\n\n// A field identifies a field in a struct, accessible from a pointer.\n// In this implementation, a field is identified by the sequence of field indices\n// passed to reflect's FieldByIndex.\ntype field []int\n\n// toField returns a field equivalent to the given reflect field.\nfunc toField(f *reflect.StructField) field {\n\treturn f.Index\n}\n\n// invalidField is an invalid field identifier.\nvar invalidField = field(nil)\n\n// zeroField is a noop when calling pointer.offset.\nvar zeroField = field([]int{})\n\n// IsValid reports whether the field identifier is valid.\nfunc (f field) IsValid() bool { return f != nil }\n\n// The pointer type is for the table-driven decoder.\n// The implementation here uses a reflect.Value of pointer type to\n// create a generic pointer. In pointer_unsafe.go we use unsafe\n// instead of reflect to implement the same (but faster) interface.\ntype pointer struct {\n\tv reflect.Value\n}\n\n// toPointer converts an interface of pointer type to a pointer\n// that points to the same target.\nfunc toPointer(i *Message) pointer {\n\treturn pointer{v: reflect.ValueOf(*i)}\n}\n\n// toAddrPointer converts an interface to a pointer that points to\n// the interface data.\nfunc toAddrPointer(i *interface{}, isptr bool) pointer {\n\tv := reflect.ValueOf(*i)\n\tu := reflect.New(v.Type())\n\tu.Elem().Set(v)\n\treturn pointer{v: u}\n}\n\n// valToPointer converts v to a pointer.  v must be of pointer type.\nfunc valToPointer(v reflect.Value) pointer {\n\treturn pointer{v: v}\n}\n\n// offset converts from a pointer to a structure to a pointer to\n// one of its fields.\nfunc (p pointer) offset(f field) pointer {\n\treturn pointer{v: p.v.Elem().FieldByIndex(f).Addr()}\n}\n\nfunc (p pointer) isNil() bool {\n\treturn p.v.IsNil()\n}\n\n// grow updates the slice s in place to make it one element longer.\n// s must be addressable.\n// Returns the (addressable) new element.\nfunc grow(s reflect.Value) reflect.Value {\n\tn, m := s.Len(), s.Cap()\n\tif n < m {\n\t\ts.SetLen(n + 1)\n\t} else {\n\t\ts.Set(reflect.Append(s, reflect.Zero(s.Type().Elem())))\n\t}\n\treturn s.Index(n)\n}\n\nfunc (p pointer) toInt64() *int64 {\n\treturn p.v.Interface().(*int64)\n}\nfunc (p pointer) toInt64Ptr() **int64 {\n\treturn p.v.Interface().(**int64)\n}\nfunc (p pointer) toInt64Slice() *[]int64 {\n\treturn p.v.Interface().(*[]int64)\n}\n\nvar int32ptr = reflect.TypeOf((*int32)(nil))\n\nfunc (p pointer) toInt32() *int32 {\n\treturn p.v.Convert(int32ptr).Interface().(*int32)\n}\n\n// The toInt32Ptr/Slice methods don't work because of enums.\n// Instead, we must use set/get methods for the int32ptr/slice case.\n/*\n\tfunc (p pointer) toInt32Ptr() **int32 {\n\t\treturn p.v.Interface().(**int32)\n}\n\tfunc (p pointer) toInt32Slice() *[]int32 {\n\t\treturn p.v.Interface().(*[]int32)\n}\n*/\nfunc (p pointer) getInt32Ptr() *int32 {\n\tif p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {\n\t\t// raw int32 type\n\t\treturn p.v.Elem().Interface().(*int32)\n\t}\n\t// an enum\n\treturn p.v.Elem().Convert(int32PtrType).Interface().(*int32)\n}\nfunc (p pointer) setInt32Ptr(v int32) {\n\t// Allocate value in a *int32. Possibly convert that to a *enum.\n\t// Then assign it to a **int32 or **enum.\n\t// Note: we can convert *int32 to *enum, but we can't convert\n\t// **int32 to **enum!\n\tp.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem()))\n}\n\n// getInt32Slice copies []int32 from p as a new slice.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) getInt32Slice() []int32 {\n\tif p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {\n\t\t// raw int32 type\n\t\treturn p.v.Elem().Interface().([]int32)\n\t}\n\t// an enum\n\t// Allocate a []int32, then assign []enum's values into it.\n\t// Note: we can't convert []enum to []int32.\n\tslice := p.v.Elem()\n\ts := make([]int32, slice.Len())\n\tfor i := 0; i < slice.Len(); i++ {\n\t\ts[i] = int32(slice.Index(i).Int())\n\t}\n\treturn s\n}\n\n// setInt32Slice copies []int32 into p as a new slice.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) setInt32Slice(v []int32) {\n\tif p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {\n\t\t// raw int32 type\n\t\tp.v.Elem().Set(reflect.ValueOf(v))\n\t\treturn\n\t}\n\t// an enum\n\t// Allocate a []enum, then assign []int32's values into it.\n\t// Note: we can't convert []enum to []int32.\n\tslice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v))\n\tfor i, x := range v {\n\t\tslice.Index(i).SetInt(int64(x))\n\t}\n\tp.v.Elem().Set(slice)\n}\nfunc (p pointer) appendInt32Slice(v int32) {\n\tgrow(p.v.Elem()).SetInt(int64(v))\n}\n\nfunc (p pointer) toUint64() *uint64 {\n\treturn p.v.Interface().(*uint64)\n}\nfunc (p pointer) toUint64Ptr() **uint64 {\n\treturn p.v.Interface().(**uint64)\n}\nfunc (p pointer) toUint64Slice() *[]uint64 {\n\treturn p.v.Interface().(*[]uint64)\n}\nfunc (p pointer) toUint32() *uint32 {\n\treturn p.v.Interface().(*uint32)\n}\nfunc (p pointer) toUint32Ptr() **uint32 {\n\treturn p.v.Interface().(**uint32)\n}\nfunc (p pointer) toUint32Slice() *[]uint32 {\n\treturn p.v.Interface().(*[]uint32)\n}\nfunc (p pointer) toBool() *bool {\n\treturn p.v.Interface().(*bool)\n}\nfunc (p pointer) toBoolPtr() **bool {\n\treturn p.v.Interface().(**bool)\n}\nfunc (p pointer) toBoolSlice() *[]bool {\n\treturn p.v.Interface().(*[]bool)\n}\nfunc (p pointer) toFloat64() *float64 {\n\treturn p.v.Interface().(*float64)\n}\nfunc (p pointer) toFloat64Ptr() **float64 {\n\treturn p.v.Interface().(**float64)\n}\nfunc (p pointer) toFloat64Slice() *[]float64 {\n\treturn p.v.Interface().(*[]float64)\n}\nfunc (p pointer) toFloat32() *float32 {\n\treturn p.v.Interface().(*float32)\n}\nfunc (p pointer) toFloat32Ptr() **float32 {\n\treturn p.v.Interface().(**float32)\n}\nfunc (p pointer) toFloat32Slice() *[]float32 {\n\treturn p.v.Interface().(*[]float32)\n}\nfunc (p pointer) toString() *string {\n\treturn p.v.Interface().(*string)\n}\nfunc (p pointer) toStringPtr() **string {\n\treturn p.v.Interface().(**string)\n}\nfunc (p pointer) toStringSlice() *[]string {\n\treturn p.v.Interface().(*[]string)\n}\nfunc (p pointer) toBytes() *[]byte {\n\treturn p.v.Interface().(*[]byte)\n}\nfunc (p pointer) toBytesSlice() *[][]byte {\n\treturn p.v.Interface().(*[][]byte)\n}\nfunc (p pointer) toExtensions() *XXX_InternalExtensions {\n\treturn p.v.Interface().(*XXX_InternalExtensions)\n}\nfunc (p pointer) toOldExtensions() *map[int32]Extension {\n\treturn p.v.Interface().(*map[int32]Extension)\n}\nfunc (p pointer) getPointer() pointer {\n\treturn pointer{v: p.v.Elem()}\n}\nfunc (p pointer) setPointer(q pointer) {\n\tp.v.Elem().Set(q.v)\n}\nfunc (p pointer) appendPointer(q pointer) {\n\tgrow(p.v.Elem()).Set(q.v)\n}\n\n// getPointerSlice copies []*T from p as a new []pointer.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) getPointerSlice() []pointer {\n\tif p.v.IsNil() {\n\t\treturn nil\n\t}\n\tn := p.v.Elem().Len()\n\ts := make([]pointer, n)\n\tfor i := 0; i < n; i++ {\n\t\ts[i] = pointer{v: p.v.Elem().Index(i)}\n\t}\n\treturn s\n}\n\n// setPointerSlice copies []pointer into p as a new []*T.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) setPointerSlice(v []pointer) {\n\tif v == nil {\n\t\tp.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem())\n\t\treturn\n\t}\n\ts := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v))\n\tfor _, p := range v {\n\t\ts = reflect.Append(s, p.v)\n\t}\n\tp.v.Elem().Set(s)\n}\n\n// getInterfacePointer returns a pointer that points to the\n// interface data of the interface pointed by p.\nfunc (p pointer) getInterfacePointer() pointer {\n\tif p.v.Elem().IsNil() {\n\t\treturn pointer{v: p.v.Elem()}\n\t}\n\treturn pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct\n}\n\nfunc (p pointer) asPointerTo(t reflect.Type) reflect.Value {\n\t// TODO: check that p.v.Type().Elem() == t?\n\treturn p.v\n}\n\nfunc atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\nfunc atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\nfunc atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\nfunc atomicLoadDiscardInfo(p **discardInfo) *discardInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\n\nvar atomicLock sync.Mutex\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// +build purego appengine js\n\n// This file contains an implementation of proto field accesses using package reflect.\n// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can\n// be used on App Engine.\n\npackage proto\n\nimport (\n\t\"reflect\"\n)\n\n// TODO: untested, so probably incorrect.\n\nfunc (p pointer) getRef() pointer {\n\treturn pointer{v: p.v.Addr()}\n}\n\nfunc (p pointer) appendRef(v pointer, typ reflect.Type) {\n\tslice := p.getSlice(typ)\n\telem := v.asPointerTo(typ).Elem()\n\tnewSlice := reflect.Append(slice, elem)\n\tslice.Set(newSlice)\n}\n\nfunc (p pointer) getSlice(typ reflect.Type) reflect.Value {\n\tsliceTyp := reflect.SliceOf(typ)\n\tslice := p.asPointerTo(sliceTyp)\n\tslice = slice.Elem()\n\treturn slice\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2012 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// +build !purego,!appengine,!js\n\n// This file contains the implementation of the proto field accesses using package unsafe.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n)\n\nconst unsafeAllowed = true\n\n// A field identifies a field in a struct, accessible from a pointer.\n// In this implementation, a field is identified by its byte offset from the start of the struct.\ntype field uintptr\n\n// toField returns a field equivalent to the given reflect field.\nfunc toField(f *reflect.StructField) field {\n\treturn field(f.Offset)\n}\n\n// invalidField is an invalid field identifier.\nconst invalidField = ^field(0)\n\n// zeroField is a noop when calling pointer.offset.\nconst zeroField = field(0)\n\n// IsValid reports whether the field identifier is valid.\nfunc (f field) IsValid() bool {\n\treturn f != invalidField\n}\n\n// The pointer type below is for the new table-driven encoder/decoder.\n// The implementation here uses unsafe.Pointer to create a generic pointer.\n// In pointer_reflect.go we use reflect instead of unsafe to implement\n// the same (but slower) interface.\ntype pointer struct {\n\tp unsafe.Pointer\n}\n\n// size of pointer\nvar ptrSize = unsafe.Sizeof(uintptr(0))\n\n// toPointer converts an interface of pointer type to a pointer\n// that points to the same target.\nfunc toPointer(i *Message) pointer {\n\t// Super-tricky - read pointer out of data word of interface value.\n\t// Saves ~25ns over the equivalent:\n\t// return valToPointer(reflect.ValueOf(*i))\n\treturn pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}\n}\n\n// toAddrPointer converts an interface to a pointer that points to\n// the interface data.\nfunc toAddrPointer(i *interface{}, isptr bool) pointer {\n\t// Super-tricky - read or get the address of data word of interface value.\n\tif isptr {\n\t\t// The interface is of pointer type, thus it is a direct interface.\n\t\t// The data word is the pointer data itself. We take its address.\n\t\treturn pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}\n\t}\n\t// The interface is not of pointer type. The data word is the pointer\n\t// to the data.\n\treturn pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}\n}\n\n// valToPointer converts v to a pointer. v must be of pointer type.\nfunc valToPointer(v reflect.Value) pointer {\n\treturn pointer{p: unsafe.Pointer(v.Pointer())}\n}\n\n// offset converts from a pointer to a structure to a pointer to\n// one of its fields.\nfunc (p pointer) offset(f field) pointer {\n\t// For safety, we should panic if !f.IsValid, however calling panic causes\n\t// this to no longer be inlineable, which is a serious performance cost.\n\t/*\n\t\tif !f.IsValid() {\n\t\t\tpanic(\"invalid field\")\n\t\t}\n\t*/\n\treturn pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}\n}\n\nfunc (p pointer) isNil() bool {\n\treturn p.p == nil\n}\n\nfunc (p pointer) toInt64() *int64 {\n\treturn (*int64)(p.p)\n}\nfunc (p pointer) toInt64Ptr() **int64 {\n\treturn (**int64)(p.p)\n}\nfunc (p pointer) toInt64Slice() *[]int64 {\n\treturn (*[]int64)(p.p)\n}\nfunc (p pointer) toInt32() *int32 {\n\treturn (*int32)(p.p)\n}\n\n// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist.\n/*\n\tfunc (p pointer) toInt32Ptr() **int32 {\n\t\treturn (**int32)(p.p)\n\t}\n\tfunc (p pointer) toInt32Slice() *[]int32 {\n\t\treturn (*[]int32)(p.p)\n\t}\n*/\nfunc (p pointer) getInt32Ptr() *int32 {\n\treturn *(**int32)(p.p)\n}\nfunc (p pointer) setInt32Ptr(v int32) {\n\t*(**int32)(p.p) = &v\n}\n\n// getInt32Slice loads a []int32 from p.\n// The value returned is aliased with the original slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) getInt32Slice() []int32 {\n\treturn *(*[]int32)(p.p)\n}\n\n// setInt32Slice stores a []int32 to p.\n// The value set is aliased with the input slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) setInt32Slice(v []int32) {\n\t*(*[]int32)(p.p) = v\n}\n\n// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead?\nfunc (p pointer) appendInt32Slice(v int32) {\n\ts := (*[]int32)(p.p)\n\t*s = append(*s, v)\n}\n\nfunc (p pointer) toUint64() *uint64 {\n\treturn (*uint64)(p.p)\n}\nfunc (p pointer) toUint64Ptr() **uint64 {\n\treturn (**uint64)(p.p)\n}\nfunc (p pointer) toUint64Slice() *[]uint64 {\n\treturn (*[]uint64)(p.p)\n}\nfunc (p pointer) toUint32() *uint32 {\n\treturn (*uint32)(p.p)\n}\nfunc (p pointer) toUint32Ptr() **uint32 {\n\treturn (**uint32)(p.p)\n}\nfunc (p pointer) toUint32Slice() *[]uint32 {\n\treturn (*[]uint32)(p.p)\n}\nfunc (p pointer) toBool() *bool {\n\treturn (*bool)(p.p)\n}\nfunc (p pointer) toBoolPtr() **bool {\n\treturn (**bool)(p.p)\n}\nfunc (p pointer) toBoolSlice() *[]bool {\n\treturn (*[]bool)(p.p)\n}\nfunc (p pointer) toFloat64() *float64 {\n\treturn (*float64)(p.p)\n}\nfunc (p pointer) toFloat64Ptr() **float64 {\n\treturn (**float64)(p.p)\n}\nfunc (p pointer) toFloat64Slice() *[]float64 {\n\treturn (*[]float64)(p.p)\n}\nfunc (p pointer) toFloat32() *float32 {\n\treturn (*float32)(p.p)\n}\nfunc (p pointer) toFloat32Ptr() **float32 {\n\treturn (**float32)(p.p)\n}\nfunc (p pointer) toFloat32Slice() *[]float32 {\n\treturn (*[]float32)(p.p)\n}\nfunc (p pointer) toString() *string {\n\treturn (*string)(p.p)\n}\nfunc (p pointer) toStringPtr() **string {\n\treturn (**string)(p.p)\n}\nfunc (p pointer) toStringSlice() *[]string {\n\treturn (*[]string)(p.p)\n}\nfunc (p pointer) toBytes() *[]byte {\n\treturn (*[]byte)(p.p)\n}\nfunc (p pointer) toBytesSlice() *[][]byte {\n\treturn (*[][]byte)(p.p)\n}\nfunc (p pointer) toExtensions() *XXX_InternalExtensions {\n\treturn (*XXX_InternalExtensions)(p.p)\n}\nfunc (p pointer) toOldExtensions() *map[int32]Extension {\n\treturn (*map[int32]Extension)(p.p)\n}\n\n// getPointerSlice loads []*T from p as a []pointer.\n// The value returned is aliased with the original slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) getPointerSlice() []pointer {\n\t// Super-tricky - p should point to a []*T where T is a\n\t// message type. We load it as []pointer.\n\treturn *(*[]pointer)(p.p)\n}\n\n// setPointerSlice stores []pointer into p as a []*T.\n// The value set is aliased with the input slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) setPointerSlice(v []pointer) {\n\t// Super-tricky - p should point to a []*T where T is a\n\t// message type. We store it as []pointer.\n\t*(*[]pointer)(p.p) = v\n}\n\n// getPointer loads the pointer at p and returns it.\nfunc (p pointer) getPointer() pointer {\n\treturn pointer{p: *(*unsafe.Pointer)(p.p)}\n}\n\n// setPointer stores the pointer q at p.\nfunc (p pointer) setPointer(q pointer) {\n\t*(*unsafe.Pointer)(p.p) = q.p\n}\n\n// append q to the slice pointed to by p.\nfunc (p pointer) appendPointer(q pointer) {\n\ts := (*[]unsafe.Pointer)(p.p)\n\t*s = append(*s, q.p)\n}\n\n// getInterfacePointer returns a pointer that points to the\n// interface data of the interface pointed by p.\nfunc (p pointer) getInterfacePointer() pointer {\n\t// Super-tricky - read pointer out of data word of interface value.\n\treturn pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]}\n}\n\n// asPointerTo returns a reflect.Value that is a pointer to an\n// object of type t stored at p.\nfunc (p pointer) asPointerTo(t reflect.Type) reflect.Value {\n\treturn reflect.NewAt(t, p.p)\n}\n\nfunc atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {\n\treturn (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\nfunc atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {\n\treturn (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\nfunc atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {\n\treturn (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\nfunc atomicLoadDiscardInfo(p **discardInfo) *discardInfo {\n\treturn (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// +build !purego,!appengine,!js\n\n// This file contains the implementation of the proto field accesses using package unsafe.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nfunc (p pointer) getRef() pointer {\n\treturn pointer{p: (unsafe.Pointer)(&p.p)}\n}\n\nfunc (p pointer) appendRef(v pointer, typ reflect.Type) {\n\tslice := p.getSlice(typ)\n\telem := v.asPointerTo(typ).Elem()\n\tnewSlice := reflect.Append(slice, elem)\n\tslice.Set(newSlice)\n}\n\nfunc (p pointer) getSlice(typ reflect.Type) reflect.Value {\n\tsliceTyp := reflect.SliceOf(typ)\n\tslice := p.asPointerTo(sliceTyp)\n\tslice = slice.Elem()\n\treturn slice\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/properties.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Routines for encoding data into the wire format for protocol buffers.\n */\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\nconst debug bool = false\n\n// Constants that identify the encoding of a value on the wire.\nconst (\n\tWireVarint     = 0\n\tWireFixed64    = 1\n\tWireBytes      = 2\n\tWireStartGroup = 3\n\tWireEndGroup   = 4\n\tWireFixed32    = 5\n)\n\n// tagMap is an optimization over map[int]int for typical protocol buffer\n// use-cases. Encoded protocol buffers are often in tag order with small tag\n// numbers.\ntype tagMap struct {\n\tfastTags []int\n\tslowTags map[int]int\n}\n\n// tagMapFastLimit is the upper bound on the tag number that will be stored in\n// the tagMap slice rather than its map.\nconst tagMapFastLimit = 1024\n\nfunc (p *tagMap) get(t int) (int, bool) {\n\tif t > 0 && t < tagMapFastLimit {\n\t\tif t >= len(p.fastTags) {\n\t\t\treturn 0, false\n\t\t}\n\t\tfi := p.fastTags[t]\n\t\treturn fi, fi >= 0\n\t}\n\tfi, ok := p.slowTags[t]\n\treturn fi, ok\n}\n\nfunc (p *tagMap) put(t int, fi int) {\n\tif t > 0 && t < tagMapFastLimit {\n\t\tfor len(p.fastTags) < t+1 {\n\t\t\tp.fastTags = append(p.fastTags, -1)\n\t\t}\n\t\tp.fastTags[t] = fi\n\t\treturn\n\t}\n\tif p.slowTags == nil {\n\t\tp.slowTags = make(map[int]int)\n\t}\n\tp.slowTags[t] = fi\n}\n\n// StructProperties represents properties for all the fields of a struct.\n// decoderTags and decoderOrigNames should only be used by the decoder.\ntype StructProperties struct {\n\tProp             []*Properties  // properties for each field\n\treqCount         int            // required count\n\tdecoderTags      tagMap         // map from proto tag to struct field number\n\tdecoderOrigNames map[string]int // map from original name to struct field number\n\torder            []int          // list of struct field numbers in tag order\n\n\t// OneofTypes contains information about the oneof fields in this message.\n\t// It is keyed by the original name of a field.\n\tOneofTypes map[string]*OneofProperties\n}\n\n// OneofProperties represents information about a specific field in a oneof.\ntype OneofProperties struct {\n\tType  reflect.Type // pointer to generated struct type for this oneof field\n\tField int          // struct field number of the containing oneof in the message\n\tProp  *Properties\n}\n\n// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec.\n// See encode.go, (*Buffer).enc_struct.\n\nfunc (sp *StructProperties) Len() int { return len(sp.order) }\nfunc (sp *StructProperties) Less(i, j int) bool {\n\treturn sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag\n}\nfunc (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] }\n\n// Properties represents the protocol-specific behavior of a single struct field.\ntype Properties struct {\n\tName     string // name of the field, for error messages\n\tOrigName string // original name before protocol compiler (always set)\n\tJSONName string // name to use for JSON; determined by protoc\n\tWire     string\n\tWireType int\n\tTag      int\n\tRequired bool\n\tOptional bool\n\tRepeated bool\n\tPacked   bool   // relevant for repeated primitives only\n\tEnum     string // set for enum types only\n\tproto3   bool   // whether this is known to be a proto3 field\n\toneof    bool   // whether this is a oneof field\n\n\tDefault     string // default value\n\tHasDefault  bool   // whether an explicit default was provided\n\tCustomType  string\n\tCastType    string\n\tStdTime     bool\n\tStdDuration bool\n\tWktPointer  bool\n\n\tstype reflect.Type      // set for struct types only\n\tctype reflect.Type      // set for custom types only\n\tsprop *StructProperties // set for struct types only\n\n\tmtype      reflect.Type // set for map types only\n\tMapKeyProp *Properties  // set for map types only\n\tMapValProp *Properties  // set for map types only\n}\n\n// String formats the properties in the protobuf struct field tag style.\nfunc (p *Properties) String() string {\n\ts := p.Wire\n\ts += \",\"\n\ts += strconv.Itoa(p.Tag)\n\tif p.Required {\n\t\ts += \",req\"\n\t}\n\tif p.Optional {\n\t\ts += \",opt\"\n\t}\n\tif p.Repeated {\n\t\ts += \",rep\"\n\t}\n\tif p.Packed {\n\t\ts += \",packed\"\n\t}\n\ts += \",name=\" + p.OrigName\n\tif p.JSONName != p.OrigName {\n\t\ts += \",json=\" + p.JSONName\n\t}\n\tif p.proto3 {\n\t\ts += \",proto3\"\n\t}\n\tif p.oneof {\n\t\ts += \",oneof\"\n\t}\n\tif len(p.Enum) > 0 {\n\t\ts += \",enum=\" + p.Enum\n\t}\n\tif p.HasDefault {\n\t\ts += \",def=\" + p.Default\n\t}\n\treturn s\n}\n\n// Parse populates p by parsing a string in the protobuf struct field tag style.\nfunc (p *Properties) Parse(s string) {\n\t// \"bytes,49,opt,name=foo,def=hello!\"\n\tfields := strings.Split(s, \",\") // breaks def=, but handled below.\n\tif len(fields) < 2 {\n\t\tlog.Printf(\"proto: tag has too few fields: %q\", s)\n\t\treturn\n\t}\n\n\tp.Wire = fields[0]\n\tswitch p.Wire {\n\tcase \"varint\":\n\t\tp.WireType = WireVarint\n\tcase \"fixed32\":\n\t\tp.WireType = WireFixed32\n\tcase \"fixed64\":\n\t\tp.WireType = WireFixed64\n\tcase \"zigzag32\":\n\t\tp.WireType = WireVarint\n\tcase \"zigzag64\":\n\t\tp.WireType = WireVarint\n\tcase \"bytes\", \"group\":\n\t\tp.WireType = WireBytes\n\t\t// no numeric converter for non-numeric types\n\tdefault:\n\t\tlog.Printf(\"proto: tag has unknown wire type: %q\", s)\n\t\treturn\n\t}\n\n\tvar err error\n\tp.Tag, err = strconv.Atoi(fields[1])\n\tif err != nil {\n\t\treturn\n\t}\n\nouter:\n\tfor i := 2; i < len(fields); i++ {\n\t\tf := fields[i]\n\t\tswitch {\n\t\tcase f == \"req\":\n\t\t\tp.Required = true\n\t\tcase f == \"opt\":\n\t\t\tp.Optional = true\n\t\tcase f == \"rep\":\n\t\t\tp.Repeated = true\n\t\tcase f == \"packed\":\n\t\t\tp.Packed = true\n\t\tcase strings.HasPrefix(f, \"name=\"):\n\t\t\tp.OrigName = f[5:]\n\t\tcase strings.HasPrefix(f, \"json=\"):\n\t\t\tp.JSONName = f[5:]\n\t\tcase strings.HasPrefix(f, \"enum=\"):\n\t\t\tp.Enum = f[5:]\n\t\tcase f == \"proto3\":\n\t\t\tp.proto3 = true\n\t\tcase f == \"oneof\":\n\t\t\tp.oneof = true\n\t\tcase strings.HasPrefix(f, \"def=\"):\n\t\t\tp.HasDefault = true\n\t\t\tp.Default = f[4:] // rest of string\n\t\t\tif i+1 < len(fields) {\n\t\t\t\t// Commas aren't escaped, and def is always last.\n\t\t\t\tp.Default += \",\" + strings.Join(fields[i+1:], \",\")\n\t\t\t\tbreak outer\n\t\t\t}\n\t\tcase strings.HasPrefix(f, \"embedded=\"):\n\t\t\tp.OrigName = strings.Split(f, \"=\")[1]\n\t\tcase strings.HasPrefix(f, \"customtype=\"):\n\t\t\tp.CustomType = strings.Split(f, \"=\")[1]\n\t\tcase strings.HasPrefix(f, \"casttype=\"):\n\t\t\tp.CastType = strings.Split(f, \"=\")[1]\n\t\tcase f == \"stdtime\":\n\t\t\tp.StdTime = true\n\t\tcase f == \"stdduration\":\n\t\t\tp.StdDuration = true\n\t\tcase f == \"wktptr\":\n\t\t\tp.WktPointer = true\n\t\t}\n\t}\n}\n\nvar protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()\n\n// setFieldProps initializes the field properties for submessages and maps.\nfunc (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {\n\tisMap := typ.Kind() == reflect.Map\n\tif len(p.CustomType) > 0 && !isMap {\n\t\tp.ctype = typ\n\t\tp.setTag(lockGetProp)\n\t\treturn\n\t}\n\tif p.StdTime && !isMap {\n\t\tp.setTag(lockGetProp)\n\t\treturn\n\t}\n\tif p.StdDuration && !isMap {\n\t\tp.setTag(lockGetProp)\n\t\treturn\n\t}\n\tif p.WktPointer && !isMap {\n\t\tp.setTag(lockGetProp)\n\t\treturn\n\t}\n\tswitch t1 := typ; t1.Kind() {\n\tcase reflect.Struct:\n\t\tp.stype = typ\n\tcase reflect.Ptr:\n\t\tif t1.Elem().Kind() == reflect.Struct {\n\t\t\tp.stype = t1.Elem()\n\t\t}\n\tcase reflect.Slice:\n\t\tswitch t2 := t1.Elem(); t2.Kind() {\n\t\tcase reflect.Ptr:\n\t\t\tswitch t3 := t2.Elem(); t3.Kind() {\n\t\t\tcase reflect.Struct:\n\t\t\t\tp.stype = t3\n\t\t\t}\n\t\tcase reflect.Struct:\n\t\t\tp.stype = t2\n\t\t}\n\n\tcase reflect.Map:\n\n\t\tp.mtype = t1\n\t\tp.MapKeyProp = &Properties{}\n\t\tp.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), \"Key\", f.Tag.Get(\"protobuf_key\"), nil, lockGetProp)\n\t\tp.MapValProp = &Properties{}\n\t\tvtype := p.mtype.Elem()\n\t\tif vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {\n\t\t\t// The value type is not a message (*T) or bytes ([]byte),\n\t\t\t// so we need encoders for the pointer to this type.\n\t\t\tvtype = reflect.PtrTo(vtype)\n\t\t}\n\n\t\tp.MapValProp.CustomType = p.CustomType\n\t\tp.MapValProp.StdDuration = p.StdDuration\n\t\tp.MapValProp.StdTime = p.StdTime\n\t\tp.MapValProp.WktPointer = p.WktPointer\n\t\tp.MapValProp.init(vtype, \"Value\", f.Tag.Get(\"protobuf_val\"), nil, lockGetProp)\n\t}\n\tp.setTag(lockGetProp)\n}\n\nfunc (p *Properties) setTag(lockGetProp bool) {\n\tif p.stype != nil {\n\t\tif lockGetProp {\n\t\t\tp.sprop = GetProperties(p.stype)\n\t\t} else {\n\t\t\tp.sprop = getPropertiesLocked(p.stype)\n\t\t}\n\t}\n}\n\nvar (\n\tmarshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()\n)\n\n// Init populates the properties from a protocol buffer struct tag.\nfunc (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {\n\tp.init(typ, name, tag, f, true)\n}\n\nfunc (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) {\n\t// \"bytes,49,opt,def=hello!\"\n\tp.Name = name\n\tp.OrigName = name\n\tif tag == \"\" {\n\t\treturn\n\t}\n\tp.Parse(tag)\n\tp.setFieldProps(typ, f, lockGetProp)\n}\n\nvar (\n\tpropertiesMu  sync.RWMutex\n\tpropertiesMap = make(map[reflect.Type]*StructProperties)\n)\n\n// GetProperties returns the list of properties for the type represented by t.\n// t must represent a generated struct type of a protocol message.\nfunc GetProperties(t reflect.Type) *StructProperties {\n\tif t.Kind() != reflect.Struct {\n\t\tpanic(\"proto: type must have kind struct\")\n\t}\n\n\t// Most calls to GetProperties in a long-running program will be\n\t// retrieving details for types we have seen before.\n\tpropertiesMu.RLock()\n\tsprop, ok := propertiesMap[t]\n\tpropertiesMu.RUnlock()\n\tif ok {\n\t\treturn sprop\n\t}\n\n\tpropertiesMu.Lock()\n\tsprop = getPropertiesLocked(t)\n\tpropertiesMu.Unlock()\n\treturn sprop\n}\n\ntype (\n\toneofFuncsIface interface {\n\t\tXXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})\n\t}\n\toneofWrappersIface interface {\n\t\tXXX_OneofWrappers() []interface{}\n\t}\n)\n\n// getPropertiesLocked requires that propertiesMu is held.\nfunc getPropertiesLocked(t reflect.Type) *StructProperties {\n\tif prop, ok := propertiesMap[t]; ok {\n\t\treturn prop\n\t}\n\n\tprop := new(StructProperties)\n\t// in case of recursive protos, fill this in now.\n\tpropertiesMap[t] = prop\n\n\t// build properties\n\tprop.Prop = make([]*Properties, t.NumField())\n\tprop.order = make([]int, t.NumField())\n\n\tisOneofMessage := false\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tp := new(Properties)\n\t\tname := f.Name\n\t\tp.init(f.Type, name, f.Tag.Get(\"protobuf\"), &f, false)\n\n\t\toneof := f.Tag.Get(\"protobuf_oneof\") // special case\n\t\tif oneof != \"\" {\n\t\t\tisOneofMessage = true\n\t\t\t// Oneof fields don't use the traditional protobuf tag.\n\t\t\tp.OrigName = oneof\n\t\t}\n\t\tprop.Prop[i] = p\n\t\tprop.order[i] = i\n\t\tif debug {\n\t\t\tprint(i, \" \", f.Name, \" \", t.String(), \" \")\n\t\t\tif p.Tag > 0 {\n\t\t\t\tprint(p.String())\n\t\t\t}\n\t\t\tprint(\"\\n\")\n\t\t}\n\t}\n\n\t// Re-order prop.order.\n\tsort.Sort(prop)\n\n\tif isOneofMessage {\n\t\tvar oots []interface{}\n\t\tswitch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {\n\t\tcase oneofFuncsIface:\n\t\t\t_, _, _, oots = m.XXX_OneofFuncs()\n\t\tcase oneofWrappersIface:\n\t\t\toots = m.XXX_OneofWrappers()\n\t\t}\n\t\tif len(oots) > 0 {\n\t\t\t// Interpret oneof metadata.\n\t\t\tprop.OneofTypes = make(map[string]*OneofProperties)\n\t\t\tfor _, oot := range oots {\n\t\t\t\toop := &OneofProperties{\n\t\t\t\t\tType: reflect.ValueOf(oot).Type(), // *T\n\t\t\t\t\tProp: new(Properties),\n\t\t\t\t}\n\t\t\t\tsft := oop.Type.Elem().Field(0)\n\t\t\t\toop.Prop.Name = sft.Name\n\t\t\t\toop.Prop.Parse(sft.Tag.Get(\"protobuf\"))\n\t\t\t\t// There will be exactly one interface field that\n\t\t\t\t// this new value is assignable to.\n\t\t\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\t\t\tf := t.Field(i)\n\t\t\t\t\tif f.Type.Kind() != reflect.Interface {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif !oop.Type.AssignableTo(f.Type) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\toop.Field = i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tprop.OneofTypes[oop.Prop.OrigName] = oop\n\t\t\t}\n\t\t}\n\t}\n\n\t// build required counts\n\t// build tags\n\treqCount := 0\n\tprop.decoderOrigNames = make(map[string]int)\n\tfor i, p := range prop.Prop {\n\t\tif strings.HasPrefix(p.Name, \"XXX_\") {\n\t\t\t// Internal fields should not appear in tags/origNames maps.\n\t\t\t// They are handled specially when encoding and decoding.\n\t\t\tcontinue\n\t\t}\n\t\tif p.Required {\n\t\t\treqCount++\n\t\t}\n\t\tprop.decoderTags.put(p.Tag, i)\n\t\tprop.decoderOrigNames[p.OrigName] = i\n\t}\n\tprop.reqCount = reqCount\n\n\treturn prop\n}\n\n// A global registry of enum types.\n// The generated code will register the generated maps by calling RegisterEnum.\n\nvar enumValueMaps = make(map[string]map[string]int32)\nvar enumStringMaps = make(map[string]map[int32]string)\n\n// RegisterEnum is called from the generated code to install the enum descriptor\n// maps into the global table to aid parsing text format protocol buffers.\nfunc RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) {\n\tif _, ok := enumValueMaps[typeName]; ok {\n\t\tpanic(\"proto: duplicate enum registered: \" + typeName)\n\t}\n\tenumValueMaps[typeName] = valueMap\n\tif _, ok := enumStringMaps[typeName]; ok {\n\t\tpanic(\"proto: duplicate enum registered: \" + typeName)\n\t}\n\tenumStringMaps[typeName] = unusedNameMap\n}\n\n// EnumValueMap returns the mapping from names to integers of the\n// enum type enumType, or a nil if not found.\nfunc EnumValueMap(enumType string) map[string]int32 {\n\treturn enumValueMaps[enumType]\n}\n\n// A registry of all linked message types.\n// The string is a fully-qualified proto name (\"pkg.Message\").\nvar (\n\tprotoTypedNils = make(map[string]Message)      // a map from proto names to typed nil pointers\n\tprotoMapTypes  = make(map[string]reflect.Type) // a map from proto names to map types\n\trevProtoTypes  = make(map[reflect.Type]string)\n)\n\n// RegisterType is called from generated code and maps from the fully qualified\n// proto name to the type (pointer to struct) of the protocol buffer.\nfunc RegisterType(x Message, name string) {\n\tif _, ok := protoTypedNils[name]; ok {\n\t\t// TODO: Some day, make this a panic.\n\t\tlog.Printf(\"proto: duplicate proto type registered: %s\", name)\n\t\treturn\n\t}\n\tt := reflect.TypeOf(x)\n\tif v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 {\n\t\t// Generated code always calls RegisterType with nil x.\n\t\t// This check is just for extra safety.\n\t\tprotoTypedNils[name] = x\n\t} else {\n\t\tprotoTypedNils[name] = reflect.Zero(t).Interface().(Message)\n\t}\n\trevProtoTypes[t] = name\n}\n\n// RegisterMapType is called from generated code and maps from the fully qualified\n// proto name to the native map type of the proto map definition.\nfunc RegisterMapType(x interface{}, name string) {\n\tif reflect.TypeOf(x).Kind() != reflect.Map {\n\t\tpanic(fmt.Sprintf(\"RegisterMapType(%T, %q); want map\", x, name))\n\t}\n\tif _, ok := protoMapTypes[name]; ok {\n\t\tlog.Printf(\"proto: duplicate proto type registered: %s\", name)\n\t\treturn\n\t}\n\tt := reflect.TypeOf(x)\n\tprotoMapTypes[name] = t\n\trevProtoTypes[t] = name\n}\n\n// MessageName returns the fully-qualified proto name for the given message type.\nfunc MessageName(x Message) string {\n\ttype xname interface {\n\t\tXXX_MessageName() string\n\t}\n\tif m, ok := x.(xname); ok {\n\t\treturn m.XXX_MessageName()\n\t}\n\treturn revProtoTypes[reflect.TypeOf(x)]\n}\n\n// MessageType returns the message type (pointer to struct) for a named message.\n// The type is not guaranteed to implement proto.Message if the name refers to a\n// map entry.\nfunc MessageType(name string) reflect.Type {\n\tif t, ok := protoTypedNils[name]; ok {\n\t\treturn reflect.TypeOf(t)\n\t}\n\treturn protoMapTypes[name]\n}\n\n// A registry of all linked proto files.\nvar (\n\tprotoFiles = make(map[string][]byte) // file name => fileDescriptor\n)\n\n// RegisterFile is called from generated code and maps from the\n// full file name of a .proto file to its compressed FileDescriptorProto.\nfunc RegisterFile(filename string, fileDescriptor []byte) {\n\tprotoFiles[filename] = fileDescriptor\n}\n\n// FileDescriptor returns the compressed FileDescriptorProto for a .proto file.\nfunc FileDescriptor(filename string) []byte { return protoFiles[filename] }\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/properties_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"reflect\"\n)\n\nvar sizerType = reflect.TypeOf((*Sizer)(nil)).Elem()\nvar protosizerType = reflect.TypeOf((*ProtoSizer)(nil)).Elem()\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/skip_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\nfunc Skip(data []byte) (n int, err error) {\n\tl := len(data)\n\tindex := 0\n\tfor index < l {\n\t\tvar wire uint64\n\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\tif index >= l {\n\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb := data[index]\n\t\t\tindex++\n\t\t\twire |= (uint64(b) & 0x7F) << shift\n\t\t\tif b < 0x80 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\twireType := int(wire & 0x7)\n\t\tswitch wireType {\n\t\tcase 0:\n\t\t\tfor {\n\t\t\t\tif index >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tindex++\n\t\t\t\tif data[index-1] < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn index, nil\n\t\tcase 1:\n\t\t\tindex += 8\n\t\t\treturn index, nil\n\t\tcase 2:\n\t\t\tvar length int\n\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\tif index >= l {\n\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t}\n\t\t\t\tb := data[index]\n\t\t\t\tindex++\n\t\t\t\tlength |= (int(b) & 0x7F) << shift\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tindex += length\n\t\t\treturn index, nil\n\t\tcase 3:\n\t\t\tfor {\n\t\t\t\tvar innerWire uint64\n\t\t\t\tvar start int = index\n\t\t\t\tfor shift := uint(0); ; shift += 7 {\n\t\t\t\t\tif index >= l {\n\t\t\t\t\t\treturn 0, io.ErrUnexpectedEOF\n\t\t\t\t\t}\n\t\t\t\t\tb := data[index]\n\t\t\t\t\tindex++\n\t\t\t\t\tinnerWire |= (uint64(b) & 0x7F) << shift\n\t\t\t\t\tif b < 0x80 {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinnerWireType := int(innerWire & 0x7)\n\t\t\t\tif innerWireType == 4 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tnext, err := Skip(data[start:])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\tindex = start + next\n\t\t\t}\n\t\t\treturn index, nil\n\t\tcase 4:\n\t\t\treturn index, nil\n\t\tcase 5:\n\t\t\tindex += 4\n\t\t\treturn index, nil\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"proto: illegal wireType %d\", wireType)\n\t\t}\n\t}\n\tpanic(\"unreachable\")\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/table_marshal.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"unicode/utf8\"\n)\n\n// a sizer takes a pointer to a field and the size of its tag, computes the size of\n// the encoded data.\ntype sizer func(pointer, int) int\n\n// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format),\n// marshals the field to the end of the slice, returns the slice and error (if any).\ntype marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)\n\n// marshalInfo is the information used for marshaling a message.\ntype marshalInfo struct {\n\ttyp          reflect.Type\n\tfields       []*marshalFieldInfo\n\tunrecognized field                      // offset of XXX_unrecognized\n\textensions   field                      // offset of XXX_InternalExtensions\n\tv1extensions field                      // offset of XXX_extensions\n\tsizecache    field                      // offset of XXX_sizecache\n\tinitialized  int32                      // 0 -- only typ is set, 1 -- fully initialized\n\tmessageset   bool                       // uses message set wire format\n\thasmarshaler bool                       // has custom marshaler\n\tsync.RWMutex                            // protect extElems map, also for initialization\n\textElems     map[int32]*marshalElemInfo // info of extension elements\n\n\thassizer      bool // has custom sizer\n\thasprotosizer bool // has custom protosizer\n\n\tbytesExtensions field // offset of XXX_extensions where the field type is []byte\n}\n\n// marshalFieldInfo is the information used for marshaling a field of a message.\ntype marshalFieldInfo struct {\n\tfield      field\n\twiretag    uint64 // tag in wire format\n\ttagsize    int    // size of tag in wire format\n\tsizer      sizer\n\tmarshaler  marshaler\n\tisPointer  bool\n\trequired   bool                              // field is required\n\tname       string                            // name of the field, for error reporting\n\toneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements\n}\n\n// marshalElemInfo is the information used for marshaling an extension or oneof element.\ntype marshalElemInfo struct {\n\twiretag   uint64 // tag in wire format\n\ttagsize   int    // size of tag in wire format\n\tsizer     sizer\n\tmarshaler marshaler\n\tisptr     bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)\n}\n\nvar (\n\tmarshalInfoMap  = map[reflect.Type]*marshalInfo{}\n\tmarshalInfoLock sync.Mutex\n\n\tuint8SliceType = reflect.TypeOf(([]uint8)(nil)).Kind()\n)\n\n// getMarshalInfo returns the information to marshal a given type of message.\n// The info it returns may not necessarily initialized.\n// t is the type of the message (NOT the pointer to it).\nfunc getMarshalInfo(t reflect.Type) *marshalInfo {\n\tmarshalInfoLock.Lock()\n\tu, ok := marshalInfoMap[t]\n\tif !ok {\n\t\tu = &marshalInfo{typ: t}\n\t\tmarshalInfoMap[t] = u\n\t}\n\tmarshalInfoLock.Unlock()\n\treturn u\n}\n\n// Size is the entry point from generated code,\n// and should be ONLY called by generated code.\n// It computes the size of encoded data of msg.\n// a is a pointer to a place to store cached marshal info.\nfunc (a *InternalMessageInfo) Size(msg Message) int {\n\tu := getMessageMarshalInfo(msg, a)\n\tptr := toPointer(&msg)\n\tif ptr.isNil() {\n\t\t// We get here if msg is a typed nil ((*SomeMessage)(nil)),\n\t\t// so it satisfies the interface, and msg == nil wouldn't\n\t\t// catch it. We don't want crash in this case.\n\t\treturn 0\n\t}\n\treturn u.size(ptr)\n}\n\n// Marshal is the entry point from generated code,\n// and should be ONLY called by generated code.\n// It marshals msg to the end of b.\n// a is a pointer to a place to store cached marshal info.\nfunc (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {\n\tu := getMessageMarshalInfo(msg, a)\n\tptr := toPointer(&msg)\n\tif ptr.isNil() {\n\t\t// We get here if msg is a typed nil ((*SomeMessage)(nil)),\n\t\t// so it satisfies the interface, and msg == nil wouldn't\n\t\t// catch it. We don't want crash in this case.\n\t\treturn b, ErrNil\n\t}\n\treturn u.marshal(b, ptr, deterministic)\n}\n\nfunc getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {\n\t// u := a.marshal, but atomically.\n\t// We use an atomic here to ensure memory consistency.\n\tu := atomicLoadMarshalInfo(&a.marshal)\n\tif u == nil {\n\t\t// Get marshal information from type of message.\n\t\tt := reflect.ValueOf(msg).Type()\n\t\tif t.Kind() != reflect.Ptr {\n\t\t\tpanic(fmt.Sprintf(\"cannot handle non-pointer message type %v\", t))\n\t\t}\n\t\tu = getMarshalInfo(t.Elem())\n\t\t// Store it in the cache for later users.\n\t\t// a.marshal = u, but atomically.\n\t\tatomicStoreMarshalInfo(&a.marshal, u)\n\t}\n\treturn u\n}\n\n// size is the main function to compute the size of the encoded data of a message.\n// ptr is the pointer to the message.\nfunc (u *marshalInfo) size(ptr pointer) int {\n\tif atomic.LoadInt32(&u.initialized) == 0 {\n\t\tu.computeMarshalInfo()\n\t}\n\n\t// If the message can marshal itself, let it do it, for compatibility.\n\t// NOTE: This is not efficient.\n\tif u.hasmarshaler {\n\t\t// Uses the message's Size method if available\n\t\tif u.hassizer {\n\t\t\ts := ptr.asPointerTo(u.typ).Interface().(Sizer)\n\t\t\treturn s.Size()\n\t\t}\n\t\t// Uses the message's ProtoSize method if available\n\t\tif u.hasprotosizer {\n\t\t\ts := ptr.asPointerTo(u.typ).Interface().(ProtoSizer)\n\t\t\treturn s.ProtoSize()\n\t\t}\n\n\t\tm := ptr.asPointerTo(u.typ).Interface().(Marshaler)\n\t\tb, _ := m.Marshal()\n\t\treturn len(b)\n\t}\n\n\tn := 0\n\tfor _, f := range u.fields {\n\t\tif f.isPointer && ptr.offset(f.field).getPointer().isNil() {\n\t\t\t// nil pointer always marshals to nothing\n\t\t\tcontinue\n\t\t}\n\t\tn += f.sizer(ptr.offset(f.field), f.tagsize)\n\t}\n\tif u.extensions.IsValid() {\n\t\te := ptr.offset(u.extensions).toExtensions()\n\t\tif u.messageset {\n\t\t\tn += u.sizeMessageSet(e)\n\t\t} else {\n\t\t\tn += u.sizeExtensions(e)\n\t\t}\n\t}\n\tif u.v1extensions.IsValid() {\n\t\tm := *ptr.offset(u.v1extensions).toOldExtensions()\n\t\tn += u.sizeV1Extensions(m)\n\t}\n\tif u.bytesExtensions.IsValid() {\n\t\ts := *ptr.offset(u.bytesExtensions).toBytes()\n\t\tn += len(s)\n\t}\n\tif u.unrecognized.IsValid() {\n\t\ts := *ptr.offset(u.unrecognized).toBytes()\n\t\tn += len(s)\n\t}\n\n\t// cache the result for use in marshal\n\tif u.sizecache.IsValid() {\n\t\tatomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))\n\t}\n\treturn n\n}\n\n// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated),\n// fall back to compute the size.\nfunc (u *marshalInfo) cachedsize(ptr pointer) int {\n\tif u.sizecache.IsValid() {\n\t\treturn int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))\n\t}\n\treturn u.size(ptr)\n}\n\n// marshal is the main function to marshal a message. It takes a byte slice and appends\n// the encoded data to the end of the slice, returns the slice and error (if any).\n// ptr is the pointer to the message.\n// If deterministic is true, map is marshaled in deterministic order.\nfunc (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {\n\tif atomic.LoadInt32(&u.initialized) == 0 {\n\t\tu.computeMarshalInfo()\n\t}\n\n\t// If the message can marshal itself, let it do it, for compatibility.\n\t// NOTE: This is not efficient.\n\tif u.hasmarshaler {\n\t\tm := ptr.asPointerTo(u.typ).Interface().(Marshaler)\n\t\tb1, err := m.Marshal()\n\t\tb = append(b, b1...)\n\t\treturn b, err\n\t}\n\n\tvar err, errLater error\n\t// The old marshaler encodes extensions at beginning.\n\tif u.extensions.IsValid() {\n\t\te := ptr.offset(u.extensions).toExtensions()\n\t\tif u.messageset {\n\t\t\tb, err = u.appendMessageSet(b, e, deterministic)\n\t\t} else {\n\t\t\tb, err = u.appendExtensions(b, e, deterministic)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\tif u.v1extensions.IsValid() {\n\t\tm := *ptr.offset(u.v1extensions).toOldExtensions()\n\t\tb, err = u.appendV1Extensions(b, m, deterministic)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\tif u.bytesExtensions.IsValid() {\n\t\ts := *ptr.offset(u.bytesExtensions).toBytes()\n\t\tb = append(b, s...)\n\t}\n\tfor _, f := range u.fields {\n\t\tif f.required {\n\t\t\tif f.isPointer && ptr.offset(f.field).getPointer().isNil() {\n\t\t\t\t// Required field is not set.\n\t\t\t\t// We record the error but keep going, to give a complete marshaling.\n\t\t\t\tif errLater == nil {\n\t\t\t\t\terrLater = &RequiredNotSetError{f.name}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif f.isPointer && ptr.offset(f.field).getPointer().isNil() {\n\t\t\t// nil pointer always marshals to nothing\n\t\t\tcontinue\n\t\t}\n\t\tb, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)\n\t\tif err != nil {\n\t\t\tif err1, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\t// Required field in submessage is not set.\n\t\t\t\t// We record the error but keep going, to give a complete marshaling.\n\t\t\t\tif errLater == nil {\n\t\t\t\t\terrLater = &RequiredNotSetError{f.name + \".\" + err1.field}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err == errRepeatedHasNil {\n\t\t\t\terr = errors.New(\"proto: repeated field \" + f.name + \" has nil element\")\n\t\t\t}\n\t\t\tif err == errInvalidUTF8 {\n\t\t\t\tif errLater == nil {\n\t\t\t\t\tfullName := revProtoTypes[reflect.PtrTo(u.typ)] + \".\" + f.name\n\t\t\t\t\terrLater = &invalidUTF8Error{fullName}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn b, err\n\t\t}\n\t}\n\tif u.unrecognized.IsValid() {\n\t\ts := *ptr.offset(u.unrecognized).toBytes()\n\t\tb = append(b, s...)\n\t}\n\treturn b, errLater\n}\n\n// computeMarshalInfo initializes the marshal info.\nfunc (u *marshalInfo) computeMarshalInfo() {\n\tu.Lock()\n\tdefer u.Unlock()\n\tif u.initialized != 0 { // non-atomic read is ok as it is protected by the lock\n\t\treturn\n\t}\n\n\tt := u.typ\n\tu.unrecognized = invalidField\n\tu.extensions = invalidField\n\tu.v1extensions = invalidField\n\tu.bytesExtensions = invalidField\n\tu.sizecache = invalidField\n\tisOneofMessage := false\n\n\tif reflect.PtrTo(t).Implements(sizerType) {\n\t\tu.hassizer = true\n\t}\n\tif reflect.PtrTo(t).Implements(protosizerType) {\n\t\tu.hasprotosizer = true\n\t}\n\t// If the message can marshal itself, let it do it, for compatibility.\n\t// NOTE: This is not efficient.\n\tif reflect.PtrTo(t).Implements(marshalerType) {\n\t\tu.hasmarshaler = true\n\t\tatomic.StoreInt32(&u.initialized, 1)\n\t\treturn\n\t}\n\n\tn := t.NumField()\n\n\t// deal with XXX fields first\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tif f.Tag.Get(\"protobuf_oneof\") != \"\" {\n\t\t\tisOneofMessage = true\n\t\t}\n\t\tif !strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tswitch f.Name {\n\t\tcase \"XXX_sizecache\":\n\t\t\tu.sizecache = toField(&f)\n\t\tcase \"XXX_unrecognized\":\n\t\t\tu.unrecognized = toField(&f)\n\t\tcase \"XXX_InternalExtensions\":\n\t\t\tu.extensions = toField(&f)\n\t\t\tu.messageset = f.Tag.Get(\"protobuf_messageset\") == \"1\"\n\t\tcase \"XXX_extensions\":\n\t\t\tif f.Type.Kind() == reflect.Map {\n\t\t\t\tu.v1extensions = toField(&f)\n\t\t\t} else {\n\t\t\t\tu.bytesExtensions = toField(&f)\n\t\t\t}\n\t\tcase \"XXX_NoUnkeyedLiteral\":\n\t\t\t// nothing to do\n\t\tdefault:\n\t\t\tpanic(\"unknown XXX field: \" + f.Name)\n\t\t}\n\t\tn--\n\t}\n\n\t// get oneof implementers\n\tvar oneofImplementers []interface{}\n\t// gogo: isOneofMessage is needed for embedded oneof messages, without a marshaler and unmarshaler\n\tif isOneofMessage {\n\t\tswitch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {\n\t\tcase oneofFuncsIface:\n\t\t\t_, _, _, oneofImplementers = m.XXX_OneofFuncs()\n\t\tcase oneofWrappersIface:\n\t\t\toneofImplementers = m.XXX_OneofWrappers()\n\t\t}\n\t}\n\n\t// normal fields\n\tfields := make([]marshalFieldInfo, n) // batch allocation\n\tu.fields = make([]*marshalFieldInfo, 0, n)\n\tfor i, j := 0, 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tfield := &fields[j]\n\t\tj++\n\t\tfield.name = f.Name\n\t\tu.fields = append(u.fields, field)\n\t\tif f.Tag.Get(\"protobuf_oneof\") != \"\" {\n\t\t\tfield.computeOneofFieldInfo(&f, oneofImplementers)\n\t\t\tcontinue\n\t\t}\n\t\tif f.Tag.Get(\"protobuf\") == \"\" {\n\t\t\t// field has no tag (not in generated message), ignore it\n\t\t\tu.fields = u.fields[:len(u.fields)-1]\n\t\t\tj--\n\t\t\tcontinue\n\t\t}\n\t\tfield.computeMarshalFieldInfo(&f)\n\t}\n\n\t// fields are marshaled in tag order on the wire.\n\tsort.Sort(byTag(u.fields))\n\n\tatomic.StoreInt32(&u.initialized, 1)\n}\n\n// helper for sorting fields by tag\ntype byTag []*marshalFieldInfo\n\nfunc (a byTag) Len() int           { return len(a) }\nfunc (a byTag) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\nfunc (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }\n\n// getExtElemInfo returns the information to marshal an extension element.\n// The info it returns is initialized.\nfunc (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {\n\t// get from cache first\n\tu.RLock()\n\te, ok := u.extElems[desc.Field]\n\tu.RUnlock()\n\tif ok {\n\t\treturn e\n\t}\n\n\tt := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct\n\ttags := strings.Split(desc.Tag, \",\")\n\ttag, err := strconv.Atoi(tags[1])\n\tif err != nil {\n\t\tpanic(\"tag is not an integer\")\n\t}\n\twt := wiretype(tags[0])\n\tsizr, marshalr := typeMarshaler(t, tags, false, false)\n\te = &marshalElemInfo{\n\t\twiretag:   uint64(tag)<<3 | wt,\n\t\ttagsize:   SizeVarint(uint64(tag) << 3),\n\t\tsizer:     sizr,\n\t\tmarshaler: marshalr,\n\t\tisptr:     t.Kind() == reflect.Ptr,\n\t}\n\n\t// update cache\n\tu.Lock()\n\tif u.extElems == nil {\n\t\tu.extElems = make(map[int32]*marshalElemInfo)\n\t}\n\tu.extElems[desc.Field] = e\n\tu.Unlock()\n\treturn e\n}\n\n// computeMarshalFieldInfo fills up the information to marshal a field.\nfunc (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {\n\t// parse protobuf tag of the field.\n\t// tag has format of \"bytes,49,opt,name=foo,def=hello!\"\n\ttags := strings.Split(f.Tag.Get(\"protobuf\"), \",\")\n\tif tags[0] == \"\" {\n\t\treturn\n\t}\n\ttag, err := strconv.Atoi(tags[1])\n\tif err != nil {\n\t\tpanic(\"tag is not an integer\")\n\t}\n\twt := wiretype(tags[0])\n\tif tags[2] == \"req\" {\n\t\tfi.required = true\n\t}\n\tfi.setTag(f, tag, wt)\n\tfi.setMarshaler(f, tags)\n}\n\nfunc (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {\n\tfi.field = toField(f)\n\tfi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.\n\tfi.isPointer = true\n\tfi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)\n\tfi.oneofElems = make(map[reflect.Type]*marshalElemInfo)\n\n\tityp := f.Type // interface type\n\tfor _, o := range oneofImplementers {\n\t\tt := reflect.TypeOf(o)\n\t\tif !t.Implements(ityp) {\n\t\t\tcontinue\n\t\t}\n\t\tsf := t.Elem().Field(0) // oneof implementer is a struct with a single field\n\t\ttags := strings.Split(sf.Tag.Get(\"protobuf\"), \",\")\n\t\ttag, err := strconv.Atoi(tags[1])\n\t\tif err != nil {\n\t\t\tpanic(\"tag is not an integer\")\n\t\t}\n\t\twt := wiretype(tags[0])\n\t\tsizr, marshalr := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value\n\t\tfi.oneofElems[t.Elem()] = &marshalElemInfo{\n\t\t\twiretag:   uint64(tag)<<3 | wt,\n\t\t\ttagsize:   SizeVarint(uint64(tag) << 3),\n\t\t\tsizer:     sizr,\n\t\t\tmarshaler: marshalr,\n\t\t}\n\t}\n}\n\n// wiretype returns the wire encoding of the type.\nfunc wiretype(encoding string) uint64 {\n\tswitch encoding {\n\tcase \"fixed32\":\n\t\treturn WireFixed32\n\tcase \"fixed64\":\n\t\treturn WireFixed64\n\tcase \"varint\", \"zigzag32\", \"zigzag64\":\n\t\treturn WireVarint\n\tcase \"bytes\":\n\t\treturn WireBytes\n\tcase \"group\":\n\t\treturn WireStartGroup\n\t}\n\tpanic(\"unknown wire type \" + encoding)\n}\n\n// setTag fills up the tag (in wire format) and its size in the info of a field.\nfunc (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {\n\tfi.field = toField(f)\n\tfi.wiretag = uint64(tag)<<3 | wt\n\tfi.tagsize = SizeVarint(uint64(tag) << 3)\n}\n\n// setMarshaler fills up the sizer and marshaler in the info of a field.\nfunc (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {\n\tswitch f.Type.Kind() {\n\tcase reflect.Map:\n\t\t// map field\n\t\tfi.isPointer = true\n\t\tfi.sizer, fi.marshaler = makeMapMarshaler(f)\n\t\treturn\n\tcase reflect.Ptr, reflect.Slice:\n\t\tfi.isPointer = true\n\t}\n\tfi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)\n}\n\n// typeMarshaler returns the sizer and marshaler of a given field.\n// t is the type of the field.\n// tags is the generated \"protobuf\" tag of the field.\n// If nozero is true, zero value is not marshaled to the wire.\n// If oneof is true, it is a oneof field.\nfunc typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {\n\tencoding := tags[0]\n\n\tpointer := false\n\tslice := false\n\tif t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {\n\t\tslice = true\n\t\tt = t.Elem()\n\t}\n\tif t.Kind() == reflect.Ptr {\n\t\tpointer = true\n\t\tt = t.Elem()\n\t}\n\n\tpacked := false\n\tproto3 := false\n\tctype := false\n\tisTime := false\n\tisDuration := false\n\tisWktPointer := false\n\tvalidateUTF8 := true\n\tfor i := 2; i < len(tags); i++ {\n\t\tif tags[i] == \"packed\" {\n\t\t\tpacked = true\n\t\t}\n\t\tif tags[i] == \"proto3\" {\n\t\t\tproto3 = true\n\t\t}\n\t\tif strings.HasPrefix(tags[i], \"customtype=\") {\n\t\t\tctype = true\n\t\t}\n\t\tif tags[i] == \"stdtime\" {\n\t\t\tisTime = true\n\t\t}\n\t\tif tags[i] == \"stdduration\" {\n\t\t\tisDuration = true\n\t\t}\n\t\tif tags[i] == \"wktptr\" {\n\t\t\tisWktPointer = true\n\t\t}\n\t}\n\tvalidateUTF8 = validateUTF8 && proto3\n\tif !proto3 && !pointer && !slice {\n\t\tnozero = false\n\t}\n\n\tif ctype {\n\t\tif reflect.PtrTo(t).Implements(customType) {\n\t\t\tif slice {\n\t\t\t\treturn makeMessageRefSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif pointer {\n\t\t\t\treturn makeCustomPtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeCustomMarshaler(getMarshalInfo(t))\n\t\t} else {\n\t\t\tpanic(fmt.Sprintf(\"custom type: type: %v, does not implement the proto.custom interface\", t))\n\t\t}\n\t}\n\n\tif isTime {\n\t\tif pointer {\n\t\t\tif slice {\n\t\t\t\treturn makeTimePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeTimePtrMarshaler(getMarshalInfo(t))\n\t\t}\n\t\tif slice {\n\t\t\treturn makeTimeSliceMarshaler(getMarshalInfo(t))\n\t\t}\n\t\treturn makeTimeMarshaler(getMarshalInfo(t))\n\t}\n\n\tif isDuration {\n\t\tif pointer {\n\t\t\tif slice {\n\t\t\t\treturn makeDurationPtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeDurationPtrMarshaler(getMarshalInfo(t))\n\t\t}\n\t\tif slice {\n\t\t\treturn makeDurationSliceMarshaler(getMarshalInfo(t))\n\t\t}\n\t\treturn makeDurationMarshaler(getMarshalInfo(t))\n\t}\n\n\tif isWktPointer {\n\t\tswitch t.Kind() {\n\t\tcase reflect.Float64:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdDoubleValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdDoubleValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdDoubleValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdDoubleValueMarshaler(getMarshalInfo(t))\n\t\tcase reflect.Float32:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdFloatValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdFloatValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdFloatValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdFloatValueMarshaler(getMarshalInfo(t))\n\t\tcase reflect.Int64:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdInt64ValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdInt64ValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdInt64ValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdInt64ValueMarshaler(getMarshalInfo(t))\n\t\tcase reflect.Uint64:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdUInt64ValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdUInt64ValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdUInt64ValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdUInt64ValueMarshaler(getMarshalInfo(t))\n\t\tcase reflect.Int32:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdInt32ValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdInt32ValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdInt32ValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdInt32ValueMarshaler(getMarshalInfo(t))\n\t\tcase reflect.Uint32:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdUInt32ValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdUInt32ValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdUInt32ValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdUInt32ValueMarshaler(getMarshalInfo(t))\n\t\tcase reflect.Bool:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdBoolValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdBoolValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdBoolValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdBoolValueMarshaler(getMarshalInfo(t))\n\t\tcase reflect.String:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdStringValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdStringValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdStringValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdStringValueMarshaler(getMarshalInfo(t))\n\t\tcase uint8SliceType:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdBytesValuePtrSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeStdBytesValuePtrMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdBytesValueSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeStdBytesValueMarshaler(getMarshalInfo(t))\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"unknown wktpointer type %#v\", t))\n\t\t}\n\t}\n\n\tswitch t.Kind() {\n\tcase reflect.Bool:\n\t\tif pointer {\n\t\t\treturn sizeBoolPtr, appendBoolPtr\n\t\t}\n\t\tif slice {\n\t\t\tif packed {\n\t\t\t\treturn sizeBoolPackedSlice, appendBoolPackedSlice\n\t\t\t}\n\t\t\treturn sizeBoolSlice, appendBoolSlice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeBoolValueNoZero, appendBoolValueNoZero\n\t\t}\n\t\treturn sizeBoolValue, appendBoolValue\n\tcase reflect.Uint32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixed32Ptr, appendFixed32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixed32PackedSlice, appendFixed32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixed32Slice, appendFixed32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixed32ValueNoZero, appendFixed32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixed32Value, appendFixed32Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarint32Ptr, appendVarint32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarint32PackedSlice, appendVarint32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarint32Slice, appendVarint32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarint32ValueNoZero, appendVarint32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarint32Value, appendVarint32Value\n\t\t}\n\tcase reflect.Int32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixedS32Ptr, appendFixedS32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixedS32PackedSlice, appendFixedS32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixedS32Slice, appendFixedS32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixedS32Value, appendFixedS32Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarintS32Ptr, appendVarintS32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarintS32PackedSlice, appendVarintS32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarintS32Slice, appendVarintS32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarintS32Value, appendVarintS32Value\n\t\tcase \"zigzag32\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeZigzag32Ptr, appendZigzag32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeZigzag32PackedSlice, appendZigzag32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeZigzag32Slice, appendZigzag32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeZigzag32Value, appendZigzag32Value\n\t\t}\n\tcase reflect.Uint64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixed64Ptr, appendFixed64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixed64PackedSlice, appendFixed64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixed64Slice, appendFixed64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixed64ValueNoZero, appendFixed64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixed64Value, appendFixed64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarint64Ptr, appendVarint64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarint64PackedSlice, appendVarint64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarint64Slice, appendVarint64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarint64ValueNoZero, appendVarint64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarint64Value, appendVarint64Value\n\t\t}\n\tcase reflect.Int64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixedS64Ptr, appendFixedS64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixedS64PackedSlice, appendFixedS64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixedS64Slice, appendFixedS64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixedS64Value, appendFixedS64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarintS64Ptr, appendVarintS64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarintS64PackedSlice, appendVarintS64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarintS64Slice, appendVarintS64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarintS64Value, appendVarintS64Value\n\t\tcase \"zigzag64\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeZigzag64Ptr, appendZigzag64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeZigzag64PackedSlice, appendZigzag64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeZigzag64Slice, appendZigzag64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeZigzag64Value, appendZigzag64Value\n\t\t}\n\tcase reflect.Float32:\n\t\tif pointer {\n\t\t\treturn sizeFloat32Ptr, appendFloat32Ptr\n\t\t}\n\t\tif slice {\n\t\t\tif packed {\n\t\t\t\treturn sizeFloat32PackedSlice, appendFloat32PackedSlice\n\t\t\t}\n\t\t\treturn sizeFloat32Slice, appendFloat32Slice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeFloat32ValueNoZero, appendFloat32ValueNoZero\n\t\t}\n\t\treturn sizeFloat32Value, appendFloat32Value\n\tcase reflect.Float64:\n\t\tif pointer {\n\t\t\treturn sizeFloat64Ptr, appendFloat64Ptr\n\t\t}\n\t\tif slice {\n\t\t\tif packed {\n\t\t\t\treturn sizeFloat64PackedSlice, appendFloat64PackedSlice\n\t\t\t}\n\t\t\treturn sizeFloat64Slice, appendFloat64Slice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeFloat64ValueNoZero, appendFloat64ValueNoZero\n\t\t}\n\t\treturn sizeFloat64Value, appendFloat64Value\n\tcase reflect.String:\n\t\tif validateUTF8 {\n\t\t\tif pointer {\n\t\t\t\treturn sizeStringPtr, appendUTF8StringPtr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn sizeStringSlice, appendUTF8StringSlice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeStringValueNoZero, appendUTF8StringValueNoZero\n\t\t\t}\n\t\t\treturn sizeStringValue, appendUTF8StringValue\n\t\t}\n\t\tif pointer {\n\t\t\treturn sizeStringPtr, appendStringPtr\n\t\t}\n\t\tif slice {\n\t\t\treturn sizeStringSlice, appendStringSlice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeStringValueNoZero, appendStringValueNoZero\n\t\t}\n\t\treturn sizeStringValue, appendStringValue\n\tcase reflect.Slice:\n\t\tif slice {\n\t\t\treturn sizeBytesSlice, appendBytesSlice\n\t\t}\n\t\tif oneof {\n\t\t\t// Oneof bytes field may also have \"proto3\" tag.\n\t\t\t// We want to marshal it as a oneof field. Do this\n\t\t\t// check before the proto3 check.\n\t\t\treturn sizeBytesOneof, appendBytesOneof\n\t\t}\n\t\tif proto3 {\n\t\t\treturn sizeBytes3, appendBytes3\n\t\t}\n\t\treturn sizeBytes, appendBytes\n\tcase reflect.Struct:\n\t\tswitch encoding {\n\t\tcase \"group\":\n\t\t\tif slice {\n\t\t\t\treturn makeGroupSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeGroupMarshaler(getMarshalInfo(t))\n\t\tcase \"bytes\":\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeMessageSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeMessageMarshaler(getMarshalInfo(t))\n\t\t\t} else {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeMessageRefSliceMarshaler(getMarshalInfo(t))\n\t\t\t\t}\n\t\t\t\treturn makeMessageRefMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"unknown or mismatched type: type: %v, wire type: %v\", t, encoding))\n}\n\n// Below are functions to size/marshal a specific type of a field.\n// They are stored in the field's info, and called by function pointers.\n// They have type sizer or marshaler.\n\nfunc sizeFixed32Value(_ pointer, tagsize int) int {\n\treturn 4 + tagsize\n}\nfunc sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixed32Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixed32Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\treturn (4 + tagsize) * len(s)\n}\nfunc sizeFixed32PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize\n}\nfunc sizeFixedS32Value(_ pointer, tagsize int) int {\n\treturn 4 + tagsize\n}\nfunc sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixedS32Ptr(ptr pointer, tagsize int) int {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixedS32Slice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\treturn (4 + tagsize) * len(s)\n}\nfunc sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize\n}\nfunc sizeFloat32Value(_ pointer, tagsize int) int {\n\treturn 4 + tagsize\n}\nfunc sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := math.Float32bits(*ptr.toFloat32())\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFloat32Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toFloat32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFloat32Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat32Slice()\n\treturn (4 + tagsize) * len(s)\n}\nfunc sizeFloat32PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize\n}\nfunc sizeFixed64Value(_ pointer, tagsize int) int {\n\treturn 8 + tagsize\n}\nfunc sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixed64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixed64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\treturn (8 + tagsize) * len(s)\n}\nfunc sizeFixed64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize\n}\nfunc sizeFixedS64Value(_ pointer, tagsize int) int {\n\treturn 8 + tagsize\n}\nfunc sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixedS64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixedS64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\treturn (8 + tagsize) * len(s)\n}\nfunc sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize\n}\nfunc sizeFloat64Value(_ pointer, tagsize int) int {\n\treturn 8 + tagsize\n}\nfunc sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := math.Float64bits(*ptr.toFloat64())\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFloat64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toFloat64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFloat64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat64Slice()\n\treturn (8 + tagsize) * len(s)\n}\nfunc sizeFloat64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize\n}\nfunc sizeVarint32Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint32()\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarint32Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(*p)) + tagsize\n}\nfunc sizeVarint32Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v)) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarint32PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeVarintS32Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS32Ptr(ptr pointer, tagsize int) int {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(*p)) + tagsize\n}\nfunc sizeVarintS32Slice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v)) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeVarint64Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint64()\n\treturn SizeVarint(v) + tagsize\n}\nfunc sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(v) + tagsize\n}\nfunc sizeVarint64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(*p) + tagsize\n}\nfunc sizeVarint64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(v) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarint64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(v)\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeVarintS64Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(*p)) + tagsize\n}\nfunc sizeVarintS64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v)) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeZigzag32Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\treturn SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n}\nfunc sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n}\nfunc sizeZigzag32Ptr(ptr pointer, tagsize int) int {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\tv := *p\n\treturn SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n}\nfunc sizeZigzag32Slice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n\t}\n\treturn n\n}\nfunc sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeZigzag64Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\treturn SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n}\nfunc sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n}\nfunc sizeZigzag64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\tv := *p\n\treturn SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n}\nfunc sizeZigzag64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n\t}\n\treturn n\n}\nfunc sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeBoolValue(_ pointer, tagsize int) int {\n\treturn 1 + tagsize\n}\nfunc sizeBoolValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toBool()\n\tif !v {\n\t\treturn 0\n\t}\n\treturn 1 + tagsize\n}\nfunc sizeBoolPtr(ptr pointer, tagsize int) int {\n\tp := *ptr.toBoolPtr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 1 + tagsize\n}\nfunc sizeBoolSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toBoolSlice()\n\treturn (1 + tagsize) * len(s)\n}\nfunc sizeBoolPackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toBoolSlice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn len(s) + SizeVarint(uint64(len(s))) + tagsize\n}\nfunc sizeStringValue(ptr pointer, tagsize int) int {\n\tv := *ptr.toString()\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeStringValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toString()\n\tif v == \"\" {\n\t\treturn 0\n\t}\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeStringPtr(ptr pointer, tagsize int) int {\n\tp := *ptr.toStringPtr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\tv := *p\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeStringSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toStringSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += len(v) + SizeVarint(uint64(len(v))) + tagsize\n\t}\n\treturn n\n}\nfunc sizeBytes(ptr pointer, tagsize int) int {\n\tv := *ptr.toBytes()\n\tif v == nil {\n\t\treturn 0\n\t}\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeBytes3(ptr pointer, tagsize int) int {\n\tv := *ptr.toBytes()\n\tif len(v) == 0 {\n\t\treturn 0\n\t}\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeBytesOneof(ptr pointer, tagsize int) int {\n\tv := *ptr.toBytes()\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeBytesSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toBytesSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += len(v) + SizeVarint(uint64(len(v))) + tagsize\n\t}\n\treturn n\n}\n\n// appendFixed32 appends an encoded fixed32 to b.\nfunc appendFixed32(b []byte, v uint32) []byte {\n\tb = append(b,\n\t\tbyte(v),\n\t\tbyte(v>>8),\n\t\tbyte(v>>16),\n\t\tbyte(v>>24))\n\treturn b\n}\n\n// appendFixed64 appends an encoded fixed64 to b.\nfunc appendFixed64(b []byte, v uint64) []byte {\n\tb = append(b,\n\t\tbyte(v),\n\t\tbyte(v>>8),\n\t\tbyte(v>>16),\n\t\tbyte(v>>24),\n\t\tbyte(v>>32),\n\t\tbyte(v>>40),\n\t\tbyte(v>>48),\n\t\tbyte(v>>56))\n\treturn b\n}\n\n// appendVarint appends an encoded varint to b.\nfunc appendVarint(b []byte, v uint64) []byte {\n\t// TODO: make 1-byte (maybe 2-byte) case inline-able, once we\n\t// have non-leaf inliner.\n\tswitch {\n\tcase v < 1<<7:\n\t\tb = append(b, byte(v))\n\tcase v < 1<<14:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte(v>>7))\n\tcase v < 1<<21:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte(v>>14))\n\tcase v < 1<<28:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte(v>>21))\n\tcase v < 1<<35:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte(v>>28))\n\tcase v < 1<<42:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte(v>>35))\n\tcase v < 1<<49:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte(v>>42))\n\tcase v < 1<<56:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte((v>>42)&0x7f|0x80),\n\t\t\tbyte(v>>49))\n\tcase v < 1<<63:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte((v>>42)&0x7f|0x80),\n\t\t\tbyte((v>>49)&0x7f|0x80),\n\t\t\tbyte(v>>56))\n\tdefault:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte((v>>42)&0x7f|0x80),\n\t\t\tbyte((v>>49)&0x7f|0x80),\n\t\t\tbyte((v>>56)&0x7f|0x80),\n\t\t\t1)\n\t}\n\treturn b\n}\n\nfunc appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, *p)\n\treturn b, nil\n}\nfunc appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed32(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(4*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed32(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, uint32(v))\n\treturn b, nil\n}\nfunc appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, uint32(v))\n\treturn b, nil\n}\nfunc appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, uint32(*p))\n\treturn b, nil\n}\nfunc appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed32(b, uint32(v))\n\t}\n\treturn b, nil\n}\nfunc appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(4*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed32(b, uint32(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float32bits(*ptr.toFloat32())\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float32bits(*ptr.toFloat32())\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toFloat32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, math.Float32bits(*p))\n\treturn b, nil\n}\nfunc appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed32(b, math.Float32bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(4*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed32(b, math.Float32bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, *p)\n\treturn b, nil\n}\nfunc appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed64(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(8*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed64(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, uint64(v))\n\treturn b, nil\n}\nfunc appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, uint64(v))\n\treturn b, nil\n}\nfunc appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed64(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(8*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed64(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float64bits(*ptr.toFloat64())\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float64bits(*ptr.toFloat64())\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toFloat64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, math.Float64bits(*p))\n\treturn b, nil\n}\nfunc appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed64(b, math.Float64bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(8*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed64(b, math.Float64bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, v)\n\treturn b, nil\n}\nfunc appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, v)\n\treturn b, nil\n}\nfunc appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, *p)\n\treturn b, nil\n}\nfunc appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(v)\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\treturn b, nil\n}\nfunc appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\treturn b, nil\n}\nfunc appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tv := *p\n\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\treturn b, nil\n}\nfunc appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\treturn b, nil\n}\nfunc appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\treturn b, nil\n}\nfunc appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tv := *p\n\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\treturn b, nil\n}\nfunc appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\t}\n\treturn b, nil\n}\nfunc appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBool()\n\tb = appendVarint(b, wiretag)\n\tif v {\n\t\tb = append(b, 1)\n\t} else {\n\t\tb = append(b, 0)\n\t}\n\treturn b, nil\n}\nfunc appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBool()\n\tif !v {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = append(b, 1)\n\treturn b, nil\n}\n\nfunc appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toBoolPtr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tif *p {\n\t\tb = append(b, 1)\n\t} else {\n\t\tb = append(b, 0)\n\t}\n\treturn b, nil\n}\nfunc appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toBoolSlice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tif v {\n\t\t\tb = append(b, 1)\n\t\t} else {\n\t\t\tb = append(b, 0)\n\t\t}\n\t}\n\treturn b, nil\n}\nfunc appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toBoolSlice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(len(s)))\n\tfor _, v := range s {\n\t\tif v {\n\t\t\tb = append(b, 1)\n\t\t} else {\n\t\t\tb = append(b, 0)\n\t\t}\n\t}\n\treturn b, nil\n}\nfunc appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toString()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toString()\n\tif v == \"\" {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toStringPtr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tv := *p\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toStringSlice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(len(v)))\n\t\tb = append(b, v...)\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\tv := *ptr.toString()\n\tif !utf8.ValidString(v) {\n\t\tinvalidUTF8 = true\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\tv := *ptr.toString()\n\tif v == \"\" {\n\t\treturn b, nil\n\t}\n\tif !utf8.ValidString(v) {\n\t\tinvalidUTF8 = true\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\tp := *ptr.toStringPtr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tv := *p\n\tif !utf8.ValidString(v) {\n\t\tinvalidUTF8 = true\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\ts := *ptr.toStringSlice()\n\tfor _, v := range s {\n\t\tif !utf8.ValidString(v) {\n\t\t\tinvalidUTF8 = true\n\t\t}\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(len(v)))\n\t\tb = append(b, v...)\n\t}\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBytes()\n\tif v == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBytes()\n\tif len(v) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBytes()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toBytesSlice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(len(v)))\n\t\tb = append(b, v...)\n\t}\n\treturn b, nil\n}\n\n// makeGroupMarshaler returns the sizer and marshaler for a group.\n// u is the marshal info of the underlying message.\nfunc makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn u.size(p) + 2*tagsize\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tvar err error\n\t\t\tb = appendVarint(b, wiretag) // start group\n\t\t\tb, err = u.marshal(b, p, deterministic)\n\t\t\tb = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group\n\t\t\treturn b, err\n\t\t}\n}\n\n// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice.\n// u is the marshal info of the underlying message.\nfunc makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tn := 0\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tn += u.size(v) + 2*tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tvar err error\n\t\t\tvar nerr nonFatal\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\treturn b, errRepeatedHasNil\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag) // start group\n\t\t\t\tb, err = u.marshal(b, v, deterministic)\n\t\t\t\tb = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group\n\t\t\t\tif !nerr.Merge(err) {\n\t\t\t\t\tif err == ErrNil {\n\t\t\t\t\t\terr = errRepeatedHasNil\n\t\t\t\t\t}\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b, nerr.E\n\t\t}\n}\n\n// makeMessageMarshaler returns the sizer and marshaler for a message field.\n// u is the marshal info of the message.\nfunc makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tsiz := u.size(p)\n\t\t\treturn siz + SizeVarint(uint64(siz)) + tagsize\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tsiz := u.cachedsize(p)\n\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\treturn u.marshal(b, p, deterministic)\n\t\t}\n}\n\n// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice.\n// u is the marshal info of the message.\nfunc makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tn := 0\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsiz := u.size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tvar err error\n\t\t\tvar nerr nonFatal\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\treturn b, errRepeatedHasNil\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tsiz := u.cachedsize(v)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb, err = u.marshal(b, v, deterministic)\n\n\t\t\t\tif !nerr.Merge(err) {\n\t\t\t\t\tif err == ErrNil {\n\t\t\t\t\t\terr = errRepeatedHasNil\n\t\t\t\t\t}\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b, nerr.E\n\t\t}\n}\n\n// makeMapMarshaler returns the sizer and marshaler for a map field.\n// f is the pointer to the reflect data structure of the field.\nfunc makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {\n\t// figure out key and value type\n\tt := f.Type\n\tkeyType := t.Key()\n\tvalType := t.Elem()\n\ttags := strings.Split(f.Tag.Get(\"protobuf\"), \",\")\n\tkeyTags := strings.Split(f.Tag.Get(\"protobuf_key\"), \",\")\n\tvalTags := strings.Split(f.Tag.Get(\"protobuf_val\"), \",\")\n\tstdOptions := false\n\tfor _, t := range tags {\n\t\tif strings.HasPrefix(t, \"customtype=\") {\n\t\t\tvalTags = append(valTags, t)\n\t\t}\n\t\tif t == \"stdtime\" {\n\t\t\tvalTags = append(valTags, t)\n\t\t\tstdOptions = true\n\t\t}\n\t\tif t == \"stdduration\" {\n\t\t\tvalTags = append(valTags, t)\n\t\t\tstdOptions = true\n\t\t}\n\t\tif t == \"wktptr\" {\n\t\t\tvalTags = append(valTags, t)\n\t\t}\n\t}\n\tkeySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map\n\tvalSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map\n\tkeyWireTag := 1<<3 | wiretype(keyTags[0])\n\tvalWireTag := 2<<3 | wiretype(valTags[0])\n\n\t// We create an interface to get the addresses of the map key and value.\n\t// If value is pointer-typed, the interface is a direct interface, the\n\t// idata itself is the value. Otherwise, the idata is the pointer to the\n\t// value.\n\t// Key cannot be pointer-typed.\n\tvalIsPtr := valType.Kind() == reflect.Ptr\n\n\t// If value is a message with nested maps, calling\n\t// valSizer in marshal may be quadratic. We should use\n\t// cached version in marshal (but not in size).\n\t// If value is not message type, we don't have size cache,\n\t// but it cannot be nested either. Just use valSizer.\n\tvalCachedSizer := valSizer\n\tif valIsPtr && !stdOptions && valType.Elem().Kind() == reflect.Struct {\n\t\tu := getMarshalInfo(valType.Elem())\n\t\tvalCachedSizer = func(ptr pointer, tagsize int) int {\n\t\t\t// Same as message sizer, but use cache.\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tsiz := u.cachedsize(p)\n\t\t\treturn siz + SizeVarint(uint64(siz)) + tagsize\n\t\t}\n\t}\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tm := ptr.asPointerTo(t).Elem() // the map\n\t\t\tn := 0\n\t\t\tfor _, k := range m.MapKeys() {\n\t\t\t\tki := k.Interface()\n\t\t\t\tvi := m.MapIndex(k).Interface()\n\t\t\t\tkaddr := toAddrPointer(&ki, false)             // pointer to key\n\t\t\t\tvaddr := toAddrPointer(&vi, valIsPtr)          // pointer to value\n\t\t\t\tsiz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {\n\t\t\tm := ptr.asPointerTo(t).Elem() // the map\n\t\t\tvar err error\n\t\t\tkeys := m.MapKeys()\n\t\t\tif len(keys) > 1 && deterministic {\n\t\t\t\tsort.Sort(mapKeys(keys))\n\t\t\t}\n\n\t\t\tvar nerr nonFatal\n\t\t\tfor _, k := range keys {\n\t\t\t\tki := k.Interface()\n\t\t\t\tvi := m.MapIndex(k).Interface()\n\t\t\t\tkaddr := toAddrPointer(&ki, false)    // pointer to key\n\t\t\t\tvaddr := toAddrPointer(&vi, valIsPtr) // pointer to value\n\t\t\t\tb = appendVarint(b, tag)\n\t\t\t\tsiz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)\n\t\t\t\tif !nerr.Merge(err) {\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t\tb, err = valMarshaler(b, vaddr, valWireTag, deterministic)\n\t\t\t\tif err != ErrNil && !nerr.Merge(err) { // allow nil value in map\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b, nerr.E\n\t\t}\n}\n\n// makeOneOfMarshaler returns the sizer and marshaler for a oneof field.\n// fi is the marshal info of the field.\n// f is the pointer to the reflect data structure of the field.\nfunc makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {\n\t// Oneof field is an interface. We need to get the actual data type on the fly.\n\tt := f.Type\n\treturn func(ptr pointer, _ int) int {\n\t\t\tp := ptr.getInterfacePointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tv := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct\n\t\t\ttelem := v.Type()\n\t\t\te := fi.oneofElems[telem]\n\t\t\treturn e.sizer(p, e.tagsize)\n\t\t},\n\t\tfunc(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {\n\t\t\tp := ptr.getInterfacePointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tv := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct\n\t\t\ttelem := v.Type()\n\t\t\tif telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {\n\t\t\t\treturn b, errOneofHasNil\n\t\t\t}\n\t\t\te := fi.oneofElems[telem]\n\t\t\treturn e.marshaler(b, p, e.wiretag, deterministic)\n\t\t}\n}\n\n// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field.\nfunc (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn 0\n\t}\n\tmu.Lock()\n\n\tn := 0\n\tfor _, e := range m {\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tn += len(e.enc)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr)\n\t\tn += ei.sizer(p, ei.tagsize)\n\t}\n\tmu.Unlock()\n\treturn n\n}\n\n// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b.\nfunc (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\n\tvar err error\n\tvar nerr nonFatal\n\n\t// Fast-path for common cases: zero or one extensions.\n\t// Don't bother sorting the keys.\n\tif len(m) <= 1 {\n\t\tfor _, e := range m {\n\t\t\tif e.value == nil || e.desc == nil {\n\t\t\t\t// Extension is only in its encoded form.\n\t\t\t\tb = append(b, e.enc...)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We don't skip extensions that have an encoded form set,\n\t\t\t// because the extension value may have been mutated after\n\t\t\t// the last time this function was called.\n\n\t\t\tei := u.getExtElemInfo(e.desc)\n\t\t\tv := e.value\n\t\t\tp := toAddrPointer(&v, ei.isptr)\n\t\t\tb, err = ei.marshaler(b, p, ei.wiretag, deterministic)\n\t\t\tif !nerr.Merge(err) {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t}\n\t\treturn b, nerr.E\n\t}\n\n\t// Sort the keys to provide a deterministic encoding.\n\t// Not sure this is required, but the old code does it.\n\tkeys := make([]int, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, int(k))\n\t}\n\tsort.Ints(keys)\n\n\tfor _, k := range keys {\n\t\te := m[int32(k)]\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tb = append(b, e.enc...)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr)\n\t\tb, err = ei.marshaler(b, p, ei.wiretag, deterministic)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nerr.E\n}\n\n// message set format is:\n//   message MessageSet {\n//     repeated group Item = 1 {\n//       required int32 type_id = 2;\n//       required string message = 3;\n//     };\n//   }\n\n// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field\n// in message set format (above).\nfunc (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn 0\n\t}\n\tmu.Lock()\n\n\tn := 0\n\tfor id, e := range m {\n\t\tn += 2                          // start group, end group. tag = 1 (size=1)\n\t\tn += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1)\n\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tmsgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint\n\t\t\tsiz := len(msgWithLen)\n\t\t\tn += siz + 1 // message, tag = 3 (size=1)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr)\n\t\tn += ei.sizer(p, 1) // message, tag = 3 (size=1)\n\t}\n\tmu.Unlock()\n\treturn n\n}\n\n// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above)\n// to the end of byte slice b.\nfunc (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\n\tvar err error\n\tvar nerr nonFatal\n\n\t// Fast-path for common cases: zero or one extensions.\n\t// Don't bother sorting the keys.\n\tif len(m) <= 1 {\n\t\tfor id, e := range m {\n\t\t\tb = append(b, 1<<3|WireStartGroup)\n\t\t\tb = append(b, 2<<3|WireVarint)\n\t\t\tb = appendVarint(b, uint64(id))\n\n\t\t\tif e.value == nil || e.desc == nil {\n\t\t\t\t// Extension is only in its encoded form.\n\t\t\t\tmsgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint\n\t\t\t\tb = append(b, 3<<3|WireBytes)\n\t\t\t\tb = append(b, msgWithLen...)\n\t\t\t\tb = append(b, 1<<3|WireEndGroup)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We don't skip extensions that have an encoded form set,\n\t\t\t// because the extension value may have been mutated after\n\t\t\t// the last time this function was called.\n\n\t\t\tei := u.getExtElemInfo(e.desc)\n\t\t\tv := e.value\n\t\t\tp := toAddrPointer(&v, ei.isptr)\n\t\t\tb, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)\n\t\t\tif !nerr.Merge(err) {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t\tb = append(b, 1<<3|WireEndGroup)\n\t\t}\n\t\treturn b, nerr.E\n\t}\n\n\t// Sort the keys to provide a deterministic encoding.\n\tkeys := make([]int, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, int(k))\n\t}\n\tsort.Ints(keys)\n\n\tfor _, id := range keys {\n\t\te := m[int32(id)]\n\t\tb = append(b, 1<<3|WireStartGroup)\n\t\tb = append(b, 2<<3|WireVarint)\n\t\tb = appendVarint(b, uint64(id))\n\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tmsgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint\n\t\t\tb = append(b, 3<<3|WireBytes)\n\t\t\tb = append(b, msgWithLen...)\n\t\t\tb = append(b, 1<<3|WireEndGroup)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr)\n\t\tb, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)\n\t\tb = append(b, 1<<3|WireEndGroup)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nerr.E\n}\n\n// sizeV1Extensions computes the size of encoded data for a V1-API extension field.\nfunc (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {\n\tif m == nil {\n\t\treturn 0\n\t}\n\n\tn := 0\n\tfor _, e := range m {\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tn += len(e.enc)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr)\n\t\tn += ei.sizer(p, ei.tagsize)\n\t}\n\treturn n\n}\n\n// appendV1Extensions marshals a V1-API extension field to the end of byte slice b.\nfunc (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\n\t// Sort the keys to provide a deterministic encoding.\n\tkeys := make([]int, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, int(k))\n\t}\n\tsort.Ints(keys)\n\n\tvar err error\n\tvar nerr nonFatal\n\tfor _, k := range keys {\n\t\te := m[int32(k)]\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tb = append(b, e.enc...)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr)\n\t\tb, err = ei.marshaler(b, p, ei.wiretag, deterministic)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nerr.E\n}\n\n// newMarshaler is the interface representing objects that can marshal themselves.\n//\n// This exists to support protoc-gen-go generated messages.\n// The proto package will stop type-asserting to this interface in the future.\n//\n// DO NOT DEPEND ON THIS.\ntype newMarshaler interface {\n\tXXX_Size() int\n\tXXX_Marshal(b []byte, deterministic bool) ([]byte, error)\n}\n\n// Size returns the encoded size of a protocol buffer message.\n// This is the main entry point.\nfunc Size(pb Message) int {\n\tif m, ok := pb.(newMarshaler); ok {\n\t\treturn m.XXX_Size()\n\t}\n\tif m, ok := pb.(Marshaler); ok {\n\t\t// If the message can marshal itself, let it do it, for compatibility.\n\t\t// NOTE: This is not efficient.\n\t\tb, _ := m.Marshal()\n\t\treturn len(b)\n\t}\n\t// in case somehow we didn't generate the wrapper\n\tif pb == nil {\n\t\treturn 0\n\t}\n\tvar info InternalMessageInfo\n\treturn info.Size(pb)\n}\n\n// Marshal takes a protocol buffer message\n// and encodes it into the wire format, returning the data.\n// This is the main entry point.\nfunc Marshal(pb Message) ([]byte, error) {\n\tif m, ok := pb.(newMarshaler); ok {\n\t\tsiz := m.XXX_Size()\n\t\tb := make([]byte, 0, siz)\n\t\treturn m.XXX_Marshal(b, false)\n\t}\n\tif m, ok := pb.(Marshaler); ok {\n\t\t// If the message can marshal itself, let it do it, for compatibility.\n\t\t// NOTE: This is not efficient.\n\t\treturn m.Marshal()\n\t}\n\t// in case somehow we didn't generate the wrapper\n\tif pb == nil {\n\t\treturn nil, ErrNil\n\t}\n\tvar info InternalMessageInfo\n\tsiz := info.Size(pb)\n\tb := make([]byte, 0, siz)\n\treturn info.Marshal(b, pb, false)\n}\n\n// Marshal takes a protocol buffer message\n// and encodes it into the wire format, writing the result to the\n// Buffer.\n// This is an alternative entry point. It is not necessary to use\n// a Buffer for most applications.\nfunc (p *Buffer) Marshal(pb Message) error {\n\tvar err error\n\tif p.deterministic {\n\t\tif _, ok := pb.(Marshaler); ok {\n\t\t\treturn fmt.Errorf(\"proto: deterministic not supported by the Marshal method of %T\", pb)\n\t\t}\n\t}\n\tif m, ok := pb.(newMarshaler); ok {\n\t\tsiz := m.XXX_Size()\n\t\tp.grow(siz) // make sure buf has enough capacity\n\t\tpp := p.buf[len(p.buf) : len(p.buf) : len(p.buf)+siz]\n\t\tpp, err = m.XXX_Marshal(pp, p.deterministic)\n\t\tp.buf = append(p.buf, pp...)\n\t\treturn err\n\t}\n\tif m, ok := pb.(Marshaler); ok {\n\t\t// If the message can marshal itself, let it do it, for compatibility.\n\t\t// NOTE: This is not efficient.\n\t\tvar b []byte\n\t\tb, err = m.Marshal()\n\t\tp.buf = append(p.buf, b...)\n\t\treturn err\n\t}\n\t// in case somehow we didn't generate the wrapper\n\tif pb == nil {\n\t\treturn ErrNil\n\t}\n\tvar info InternalMessageInfo\n\tsiz := info.Size(pb)\n\tp.grow(siz) // make sure buf has enough capacity\n\tp.buf, err = info.Marshal(p.buf, pb, p.deterministic)\n\treturn err\n}\n\n// grow grows the buffer's capacity, if necessary, to guarantee space for\n// another n bytes. After grow(n), at least n bytes can be written to the\n// buffer without another allocation.\nfunc (p *Buffer) grow(n int) {\n\tneed := len(p.buf) + n\n\tif need <= cap(p.buf) {\n\t\treturn\n\t}\n\tnewCap := len(p.buf) * 2\n\tif newCap < need {\n\t\tnewCap = need\n\t}\n\tp.buf = append(make([]byte, 0, newCap), p.buf...)\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"time\"\n)\n\n// makeMessageRefMarshaler differs a bit from makeMessageMarshaler\n// It marshal a message T instead of a *T\nfunc makeMessageRefMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tsiz := u.size(ptr)\n\t\t\treturn siz + SizeVarint(uint64(siz)) + tagsize\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tsiz := u.cachedsize(ptr)\n\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\treturn u.marshal(b, ptr, deterministic)\n\t\t}\n}\n\n// makeMessageRefSliceMarshaler differs quite a lot from makeMessageSliceMarshaler\n// It marshals a slice of messages []T instead of []*T\nfunc makeMessageRefSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\te := elem.Interface()\n\t\t\t\tv := toAddrPointer(&e, false)\n\t\t\t\tsiz := u.size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tvar err, errreq error\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\te := elem.Interface()\n\t\t\t\tv := toAddrPointer(&e, false)\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tsiz := u.size(v)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb, err = u.marshal(b, v, deterministic)\n\n\t\t\t\tif err != nil {\n\t\t\t\t\tif _, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\t\t\t// Required field in submessage is not set.\n\t\t\t\t\t\t// We record the error but keep going, to give a complete marshaling.\n\t\t\t\t\t\tif errreq == nil {\n\t\t\t\t\t\t\terrreq = err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif err == ErrNil {\n\t\t\t\t\t\terr = errRepeatedHasNil\n\t\t\t\t\t}\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn b, errreq\n\t\t}\n}\n\nfunc makeCustomPtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tm := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)\n\t\t\tsiz := m.Size()\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tm := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(custom)\n\t\t\tsiz := m.Size()\n\t\t\tbuf, err := m.Marshal()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeCustomMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tm := ptr.asPointerTo(u.typ).Interface().(custom)\n\t\t\tsiz := m.Size()\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tm := ptr.asPointerTo(u.typ).Interface().(custom)\n\t\t\tsiz := m.Size()\n\t\t\tbuf, err := m.Marshal()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeTimeMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*time.Time)\n\t\t\tts, err := timestampProto(*t)\n\t\t\tif err != nil {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tsiz := Size(ts)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*time.Time)\n\t\t\tts, err := timestampProto(*t)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tbuf, err := Marshal(ts)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeTimePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)\n\t\t\tts, err := timestampProto(*t)\n\t\t\tif err != nil {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tsiz := Size(ts)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Time)\n\t\t\tts, err := timestampProto(*t)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tbuf, err := Marshal(ts)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeTimeSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(time.Time)\n\t\t\t\tts, err := timestampProto(t)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0\n\t\t\t\t}\n\t\t\t\tsiz := Size(ts)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(time.Time)\n\t\t\t\tts, err := timestampProto(t)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tsiz := Size(ts)\n\t\t\t\tbuf, err := Marshal(ts)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeTimePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*time.Time)\n\t\t\t\tts, err := timestampProto(*t)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0\n\t\t\t\t}\n\t\t\t\tsiz := Size(ts)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*time.Time)\n\t\t\t\tts, err := timestampProto(*t)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tsiz := Size(ts)\n\t\t\t\tbuf, err := Marshal(ts)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeDurationMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\td := ptr.asPointerTo(u.typ).Interface().(*time.Duration)\n\t\t\tdur := durationProto(*d)\n\t\t\tsiz := Size(dur)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\td := ptr.asPointerTo(u.typ).Interface().(*time.Duration)\n\t\t\tdur := durationProto(*d)\n\t\t\tbuf, err := Marshal(dur)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeDurationPtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\td := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)\n\t\t\tdur := durationProto(*d)\n\t\t\tsiz := Size(dur)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\td := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*time.Duration)\n\t\t\tdur := durationProto(*d)\n\t\t\tbuf, err := Marshal(dur)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeDurationSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\td := elem.Interface().(time.Duration)\n\t\t\t\tdur := durationProto(d)\n\t\t\t\tsiz := Size(dur)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\td := elem.Interface().(time.Duration)\n\t\t\t\tdur := durationProto(d)\n\t\t\t\tsiz := Size(dur)\n\t\t\t\tbuf, err := Marshal(dur)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeDurationPtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\td := elem.Interface().(*time.Duration)\n\t\t\t\tdur := durationProto(*d)\n\t\t\t\tsiz := Size(dur)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\td := elem.Interface().(*time.Duration)\n\t\t\t\tdur := durationProto(*d)\n\t\t\t\tsiz := Size(dur)\n\t\t\t\tbuf, err := Marshal(dur)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/table_merge.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// Merge merges the src message into dst.\n// This assumes that dst and src of the same type and are non-nil.\nfunc (a *InternalMessageInfo) Merge(dst, src Message) {\n\tmi := atomicLoadMergeInfo(&a.merge)\n\tif mi == nil {\n\t\tmi = getMergeInfo(reflect.TypeOf(dst).Elem())\n\t\tatomicStoreMergeInfo(&a.merge, mi)\n\t}\n\tmi.merge(toPointer(&dst), toPointer(&src))\n}\n\ntype mergeInfo struct {\n\ttyp reflect.Type\n\n\tinitialized int32 // 0: only typ is valid, 1: everything is valid\n\tlock        sync.Mutex\n\n\tfields       []mergeFieldInfo\n\tunrecognized field // Offset of XXX_unrecognized\n}\n\ntype mergeFieldInfo struct {\n\tfield field // Offset of field, guaranteed to be valid\n\n\t// isPointer reports whether the value in the field is a pointer.\n\t// This is true for the following situations:\n\t//\t* Pointer to struct\n\t//\t* Pointer to basic type (proto2 only)\n\t//\t* Slice (first value in slice header is a pointer)\n\t//\t* String (first value in string header is a pointer)\n\tisPointer bool\n\n\t// basicWidth reports the width of the field assuming that it is directly\n\t// embedded in the struct (as is the case for basic types in proto3).\n\t// The possible values are:\n\t// \t0: invalid\n\t//\t1: bool\n\t//\t4: int32, uint32, float32\n\t//\t8: int64, uint64, float64\n\tbasicWidth int\n\n\t// Where dst and src are pointers to the types being merged.\n\tmerge func(dst, src pointer)\n}\n\nvar (\n\tmergeInfoMap  = map[reflect.Type]*mergeInfo{}\n\tmergeInfoLock sync.Mutex\n)\n\nfunc getMergeInfo(t reflect.Type) *mergeInfo {\n\tmergeInfoLock.Lock()\n\tdefer mergeInfoLock.Unlock()\n\tmi := mergeInfoMap[t]\n\tif mi == nil {\n\t\tmi = &mergeInfo{typ: t}\n\t\tmergeInfoMap[t] = mi\n\t}\n\treturn mi\n}\n\n// merge merges src into dst assuming they are both of type *mi.typ.\nfunc (mi *mergeInfo) merge(dst, src pointer) {\n\tif dst.isNil() {\n\t\tpanic(\"proto: nil destination\")\n\t}\n\tif src.isNil() {\n\t\treturn // Nothing to do.\n\t}\n\n\tif atomic.LoadInt32(&mi.initialized) == 0 {\n\t\tmi.computeMergeInfo()\n\t}\n\n\tfor _, fi := range mi.fields {\n\t\tsfp := src.offset(fi.field)\n\n\t\t// As an optimization, we can avoid the merge function call cost\n\t\t// if we know for sure that the source will have no effect\n\t\t// by checking if it is the zero value.\n\t\tif unsafeAllowed {\n\t\t\tif fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif fi.basicWidth > 0 {\n\t\t\t\tswitch {\n\t\t\t\tcase fi.basicWidth == 1 && !*sfp.toBool():\n\t\t\t\t\tcontinue\n\t\t\t\tcase fi.basicWidth == 4 && *sfp.toUint32() == 0:\n\t\t\t\t\tcontinue\n\t\t\t\tcase fi.basicWidth == 8 && *sfp.toUint64() == 0:\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdfp := dst.offset(fi.field)\n\t\tfi.merge(dfp, sfp)\n\t}\n\n\t// TODO: Make this faster?\n\tout := dst.asPointerTo(mi.typ).Elem()\n\tin := src.asPointerTo(mi.typ).Elem()\n\tif emIn, err := extendable(in.Addr().Interface()); err == nil {\n\t\temOut, _ := extendable(out.Addr().Interface())\n\t\tmIn, muIn := emIn.extensionsRead()\n\t\tif mIn != nil {\n\t\t\tmOut := emOut.extensionsWrite()\n\t\t\tmuIn.Lock()\n\t\t\tmergeExtension(mOut, mIn)\n\t\t\tmuIn.Unlock()\n\t\t}\n\t}\n\n\tif mi.unrecognized.IsValid() {\n\t\tif b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 {\n\t\t\t*dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...)\n\t\t}\n\t}\n}\n\nfunc (mi *mergeInfo) computeMergeInfo() {\n\tmi.lock.Lock()\n\tdefer mi.lock.Unlock()\n\tif mi.initialized != 0 {\n\t\treturn\n\t}\n\tt := mi.typ\n\tn := t.NumField()\n\n\tprops := GetProperties(t)\n\tfor i := 0; i < n; i++ {\n\t\tf := t.Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tmfi := mergeFieldInfo{field: toField(&f)}\n\t\ttf := f.Type\n\n\t\t// As an optimization, we can avoid the merge function call cost\n\t\t// if we know for sure that the source will have no effect\n\t\t// by checking if it is the zero value.\n\t\tif unsafeAllowed {\n\t\t\tswitch tf.Kind() {\n\t\t\tcase reflect.Ptr, reflect.Slice, reflect.String:\n\t\t\t\t// As a special case, we assume slices and strings are pointers\n\t\t\t\t// since we know that the first field in the SliceSlice or\n\t\t\t\t// StringHeader is a data pointer.\n\t\t\t\tmfi.isPointer = true\n\t\t\tcase reflect.Bool:\n\t\t\t\tmfi.basicWidth = 1\n\t\t\tcase reflect.Int32, reflect.Uint32, reflect.Float32:\n\t\t\t\tmfi.basicWidth = 4\n\t\t\tcase reflect.Int64, reflect.Uint64, reflect.Float64:\n\t\t\t\tmfi.basicWidth = 8\n\t\t\t}\n\t\t}\n\n\t\t// Unwrap tf to get at its most basic type.\n\t\tvar isPointer, isSlice bool\n\t\tif tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {\n\t\t\tisSlice = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif tf.Kind() == reflect.Ptr {\n\t\t\tisPointer = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif isPointer && isSlice && tf.Kind() != reflect.Struct {\n\t\t\tpanic(\"both pointer and slice for basic type in \" + tf.Name())\n\t\t}\n\n\t\tswitch tf.Kind() {\n\t\tcase reflect.Int32:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []int32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\t// NOTE: toInt32Slice is not defined (see pointer_reflect.go).\n\t\t\t\t\t/*\n\t\t\t\t\t\tsfsp := src.toInt32Slice()\n\t\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\t\tdfsp := dst.toInt32Slice()\n\t\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t\t*dfsp = []int64{}\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\tsfs := src.getInt32Slice()\n\t\t\t\t\tif sfs != nil {\n\t\t\t\t\t\tdfs := dst.getInt32Slice()\n\t\t\t\t\t\tdfs = append(dfs, sfs...)\n\t\t\t\t\t\tif dfs == nil {\n\t\t\t\t\t\t\tdfs = []int32{}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdst.setInt32Slice(dfs)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *int32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\t// NOTE: toInt32Ptr is not defined (see pointer_reflect.go).\n\t\t\t\t\t/*\n\t\t\t\t\t\tsfpp := src.toInt32Ptr()\n\t\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\t\tdfpp := dst.toInt32Ptr()\n\t\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t\t*dfpp = Int32(**sfpp)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t**dfpp = **sfpp\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\tsfp := src.getInt32Ptr()\n\t\t\t\t\tif sfp != nil {\n\t\t\t\t\t\tdfp := dst.getInt32Ptr()\n\t\t\t\t\t\tif dfp == nil {\n\t\t\t\t\t\t\tdst.setInt32Ptr(*sfp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t*dfp = *sfp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., int32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toInt32(); v != 0 {\n\t\t\t\t\t\t*dst.toInt32() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Int64:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []int64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toInt64Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toInt64Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []int64{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *int64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toInt64Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toInt64Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Int64(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., int64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toInt64(); v != 0 {\n\t\t\t\t\t\t*dst.toInt64() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Uint32:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []uint32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toUint32Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toUint32Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []uint32{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *uint32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toUint32Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toUint32Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Uint32(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., uint32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toUint32(); v != 0 {\n\t\t\t\t\t\t*dst.toUint32() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Uint64:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []uint64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toUint64Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toUint64Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []uint64{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *uint64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toUint64Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toUint64Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Uint64(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., uint64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toUint64(); v != 0 {\n\t\t\t\t\t\t*dst.toUint64() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Float32:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []float32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toFloat32Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toFloat32Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []float32{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *float32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toFloat32Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toFloat32Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Float32(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., float32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toFloat32(); v != 0 {\n\t\t\t\t\t\t*dst.toFloat32() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Float64:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []float64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toFloat64Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toFloat64Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []float64{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *float64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toFloat64Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toFloat64Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Float64(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., float64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toFloat64(); v != 0 {\n\t\t\t\t\t\t*dst.toFloat64() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Bool:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []bool\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toBoolSlice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toBoolSlice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []bool{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *bool\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toBoolPtr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toBoolPtr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Bool(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., bool\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toBool(); v {\n\t\t\t\t\t\t*dst.toBool() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.String:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []string\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toStringSlice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toStringSlice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []string{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *string\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toStringPtr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toStringPtr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = String(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., string\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toString(); v != \"\" {\n\t\t\t\t\t\t*dst.toString() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Slice:\n\t\t\tisProto3 := props.Prop[i].proto3\n\t\t\tswitch {\n\t\t\tcase isPointer:\n\t\t\t\tpanic(\"bad pointer in byte slice case in \" + tf.Name())\n\t\t\tcase tf.Elem().Kind() != reflect.Uint8:\n\t\t\t\tpanic(\"bad element kind in byte slice case in \" + tf.Name())\n\t\t\tcase isSlice: // E.g., [][]byte\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsbsp := src.toBytesSlice()\n\t\t\t\t\tif *sbsp != nil {\n\t\t\t\t\t\tdbsp := dst.toBytesSlice()\n\t\t\t\t\t\tfor _, sb := range *sbsp {\n\t\t\t\t\t\t\tif sb == nil {\n\t\t\t\t\t\t\t\t*dbsp = append(*dbsp, nil)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t*dbsp = append(*dbsp, append([]byte{}, sb...))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif *dbsp == nil {\n\t\t\t\t\t\t\t*dbsp = [][]byte{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., []byte\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsbp := src.toBytes()\n\t\t\t\t\tif *sbp != nil {\n\t\t\t\t\t\tdbp := dst.toBytes()\n\t\t\t\t\t\tif !isProto3 || len(*sbp) > 0 {\n\t\t\t\t\t\t\t*dbp = append([]byte{}, *sbp...)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Struct:\n\t\t\tswitch {\n\t\t\tcase isSlice && !isPointer: // E.g. []pb.T\n\t\t\t\tmergeInfo := getMergeInfo(tf)\n\t\t\t\tzero := reflect.Zero(tf)\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\t// TODO: Make this faster?\n\t\t\t\t\tdstsp := dst.asPointerTo(f.Type)\n\t\t\t\t\tdsts := dstsp.Elem()\n\t\t\t\t\tsrcs := src.asPointerTo(f.Type).Elem()\n\t\t\t\t\tfor i := 0; i < srcs.Len(); i++ {\n\t\t\t\t\t\tdsts = reflect.Append(dsts, zero)\n\t\t\t\t\t\tsrcElement := srcs.Index(i).Addr()\n\t\t\t\t\t\tdstElement := dsts.Index(dsts.Len() - 1).Addr()\n\t\t\t\t\t\tmergeInfo.merge(valToPointer(dstElement), valToPointer(srcElement))\n\t\t\t\t\t}\n\t\t\t\t\tif dsts.IsNil() {\n\t\t\t\t\t\tdsts = reflect.MakeSlice(f.Type, 0, 0)\n\t\t\t\t\t}\n\t\t\t\t\tdstsp.Elem().Set(dsts)\n\t\t\t\t}\n\t\t\tcase !isPointer:\n\t\t\t\tmergeInfo := getMergeInfo(tf)\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tmergeInfo.merge(dst, src)\n\t\t\t\t}\n\t\t\tcase isSlice: // E.g., []*pb.T\n\t\t\t\tmergeInfo := getMergeInfo(tf)\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsps := src.getPointerSlice()\n\t\t\t\t\tif sps != nil {\n\t\t\t\t\t\tdps := dst.getPointerSlice()\n\t\t\t\t\t\tfor _, sp := range sps {\n\t\t\t\t\t\t\tvar dp pointer\n\t\t\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\t\t\tdp = valToPointer(reflect.New(tf))\n\t\t\t\t\t\t\t\tmergeInfo.merge(dp, sp)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdps = append(dps, dp)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif dps == nil {\n\t\t\t\t\t\t\tdps = []pointer{}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdst.setPointerSlice(dps)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., *pb.T\n\t\t\t\tmergeInfo := getMergeInfo(tf)\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsp := src.getPointer()\n\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\tdp := dst.getPointer()\n\t\t\t\t\t\tif dp.isNil() {\n\t\t\t\t\t\t\tdp = valToPointer(reflect.New(tf))\n\t\t\t\t\t\t\tdst.setPointer(dp)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmergeInfo.merge(dp, sp)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(\"bad pointer or slice in map case in \" + tf.Name())\n\t\t\tdefault: // E.g., map[K]V\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsm := src.asPointerTo(tf).Elem()\n\t\t\t\t\tif sm.Len() == 0 {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tdm := dst.asPointerTo(tf).Elem()\n\t\t\t\t\tif dm.IsNil() {\n\t\t\t\t\t\tdm.Set(reflect.MakeMap(tf))\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch tf.Elem().Kind() {\n\t\t\t\t\tcase reflect.Ptr: // Proto struct (e.g., *T)\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tval = reflect.ValueOf(Clone(val.Interface().(Message)))\n\t\t\t\t\t\t\tdm.SetMapIndex(key, val)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase reflect.Slice: // E.g. Bytes type (e.g., []byte)\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tval = reflect.ValueOf(append([]byte{}, val.Bytes()...))\n\t\t\t\t\t\t\tdm.SetMapIndex(key, val)\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault: // Basic type (e.g., string)\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tdm.SetMapIndex(key, val)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Interface:\n\t\t\t// Must be oneof field.\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(\"bad pointer or slice in interface case in \" + tf.Name())\n\t\t\tdefault: // E.g., interface{}\n\t\t\t\t// TODO: Make this faster?\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsu := src.asPointerTo(tf).Elem()\n\t\t\t\t\tif !su.IsNil() {\n\t\t\t\t\t\tdu := dst.asPointerTo(tf).Elem()\n\t\t\t\t\t\ttyp := su.Elem().Type()\n\t\t\t\t\t\tif du.IsNil() || du.Elem().Type() != typ {\n\t\t\t\t\t\t\tdu.Set(reflect.New(typ.Elem())) // Initialize interface if empty\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsv := su.Elem().Elem().Field(0)\n\t\t\t\t\t\tif sv.Kind() == reflect.Ptr && sv.IsNil() {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdv := du.Elem().Elem().Field(0)\n\t\t\t\t\t\tif dv.Kind() == reflect.Ptr && dv.IsNil() {\n\t\t\t\t\t\t\tdv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch sv.Type().Kind() {\n\t\t\t\t\t\tcase reflect.Ptr: // Proto struct (e.g., *T)\n\t\t\t\t\t\t\tMerge(dv.Interface().(Message), sv.Interface().(Message))\n\t\t\t\t\t\tcase reflect.Slice: // E.g. Bytes type (e.g., []byte)\n\t\t\t\t\t\t\tdv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...)))\n\t\t\t\t\t\tdefault: // Basic type (e.g., string)\n\t\t\t\t\t\t\tdv.Set(sv)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"merger not found for type:%s\", tf))\n\t\t}\n\t\tmi.fields = append(mi.fields, mfi)\n\t}\n\n\tmi.unrecognized = invalidField\n\tif f, ok := t.FieldByName(\"XXX_unrecognized\"); ok {\n\t\tif f.Type != reflect.TypeOf([]byte{}) {\n\t\t\tpanic(\"expected XXX_unrecognized to be of type []byte\")\n\t\t}\n\t\tmi.unrecognized = toField(&f)\n\t}\n\n\tatomic.StoreInt32(&mi.initialized, 1)\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/table_unmarshal.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"unicode/utf8\"\n)\n\n// Unmarshal is the entry point from the generated .pb.go files.\n// This function is not intended to be used by non-generated code.\n// This function is not subject to any compatibility guarantee.\n// msg contains a pointer to a protocol buffer struct.\n// b is the data to be unmarshaled into the protocol buffer.\n// a is a pointer to a place to store cached unmarshal information.\nfunc (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {\n\t// Load the unmarshal information for this message type.\n\t// The atomic load ensures memory consistency.\n\tu := atomicLoadUnmarshalInfo(&a.unmarshal)\n\tif u == nil {\n\t\t// Slow path: find unmarshal info for msg, update a with it.\n\t\tu = getUnmarshalInfo(reflect.TypeOf(msg).Elem())\n\t\tatomicStoreUnmarshalInfo(&a.unmarshal, u)\n\t}\n\t// Then do the unmarshaling.\n\terr := u.unmarshal(toPointer(&msg), b)\n\treturn err\n}\n\ntype unmarshalInfo struct {\n\ttyp reflect.Type // type of the protobuf struct\n\n\t// 0 = only typ field is initialized\n\t// 1 = completely initialized\n\tinitialized     int32\n\tlock            sync.Mutex                    // prevents double initialization\n\tdense           []unmarshalFieldInfo          // fields indexed by tag #\n\tsparse          map[uint64]unmarshalFieldInfo // fields indexed by tag #\n\treqFields       []string                      // names of required fields\n\treqMask         uint64                        // 1<<len(reqFields)-1\n\tunrecognized    field                         // offset of []byte to put unrecognized data (or invalidField if we should throw it away)\n\textensions      field                         // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist\n\toldExtensions   field                         // offset of old-form extensions field (of type map[int]Extension)\n\textensionRanges []ExtensionRange              // if non-nil, implies extensions field is valid\n\tisMessageSet    bool                          // if true, implies extensions field is valid\n\n\tbytesExtensions field // offset of XXX_extensions with type []byte\n}\n\n// An unmarshaler takes a stream of bytes and a pointer to a field of a message.\n// It decodes the field, stores it at f, and returns the unused bytes.\n// w is the wire encoding.\n// b is the data after the tag and wire encoding have been read.\ntype unmarshaler func(b []byte, f pointer, w int) ([]byte, error)\n\ntype unmarshalFieldInfo struct {\n\t// location of the field in the proto message structure.\n\tfield field\n\n\t// function to unmarshal the data for the field.\n\tunmarshal unmarshaler\n\n\t// if a required field, contains a single set bit at this field's index in the required field list.\n\treqMask uint64\n\n\tname string // name of the field, for error reporting\n}\n\nvar (\n\tunmarshalInfoMap  = map[reflect.Type]*unmarshalInfo{}\n\tunmarshalInfoLock sync.Mutex\n)\n\n// getUnmarshalInfo returns the data structure which can be\n// subsequently used to unmarshal a message of the given type.\n// t is the type of the message (note: not pointer to message).\nfunc getUnmarshalInfo(t reflect.Type) *unmarshalInfo {\n\t// It would be correct to return a new unmarshalInfo\n\t// unconditionally. We would end up allocating one\n\t// per occurrence of that type as a message or submessage.\n\t// We use a cache here just to reduce memory usage.\n\tunmarshalInfoLock.Lock()\n\tdefer unmarshalInfoLock.Unlock()\n\tu := unmarshalInfoMap[t]\n\tif u == nil {\n\t\tu = &unmarshalInfo{typ: t}\n\t\t// Note: we just set the type here. The rest of the fields\n\t\t// will be initialized on first use.\n\t\tunmarshalInfoMap[t] = u\n\t}\n\treturn u\n}\n\n// unmarshal does the main work of unmarshaling a message.\n// u provides type information used to unmarshal the message.\n// m is a pointer to a protocol buffer message.\n// b is a byte stream to unmarshal into m.\n// This is top routine used when recursively unmarshaling submessages.\nfunc (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {\n\tif atomic.LoadInt32(&u.initialized) == 0 {\n\t\tu.computeUnmarshalInfo()\n\t}\n\tif u.isMessageSet {\n\t\treturn unmarshalMessageSet(b, m.offset(u.extensions).toExtensions())\n\t}\n\tvar reqMask uint64 // bitmask of required fields we've seen.\n\tvar errLater error\n\tfor len(b) > 0 {\n\t\t// Read tag and wire type.\n\t\t// Special case 1 and 2 byte varints.\n\t\tvar x uint64\n\t\tif b[0] < 128 {\n\t\t\tx = uint64(b[0])\n\t\t\tb = b[1:]\n\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\tx = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\tb = b[2:]\n\t\t} else {\n\t\t\tvar n int\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t}\n\t\ttag := x >> 3\n\t\twire := int(x) & 7\n\n\t\t// Dispatch on the tag to one of the unmarshal* functions below.\n\t\tvar f unmarshalFieldInfo\n\t\tif tag < uint64(len(u.dense)) {\n\t\t\tf = u.dense[tag]\n\t\t} else {\n\t\t\tf = u.sparse[tag]\n\t\t}\n\t\tif fn := f.unmarshal; fn != nil {\n\t\t\tvar err error\n\t\t\tb, err = fn(b, m.offset(f.field), wire)\n\t\t\tif err == nil {\n\t\t\t\treqMask |= f.reqMask\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\t// Remember this error, but keep parsing. We need to produce\n\t\t\t\t// a full parse even if a required field is missing.\n\t\t\t\tif errLater == nil {\n\t\t\t\t\terrLater = r\n\t\t\t\t}\n\t\t\t\treqMask |= f.reqMask\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err != errInternalBadWireType {\n\t\t\t\tif err == errInvalidUTF8 {\n\t\t\t\t\tif errLater == nil {\n\t\t\t\t\t\tfullName := revProtoTypes[reflect.PtrTo(u.typ)] + \".\" + f.name\n\t\t\t\t\t\terrLater = &invalidUTF8Error{fullName}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// Fragments with bad wire type are treated as unknown fields.\n\t\t}\n\n\t\t// Unknown tag.\n\t\tif !u.unrecognized.IsValid() {\n\t\t\t// Don't keep unrecognized data; just skip it.\n\t\t\tvar err error\n\t\t\tb, err = skipField(b, wire)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// Keep unrecognized data around.\n\t\t// maybe in extensions, maybe in the unrecognized field.\n\t\tz := m.offset(u.unrecognized).toBytes()\n\t\tvar emap map[int32]Extension\n\t\tvar e Extension\n\t\tfor _, r := range u.extensionRanges {\n\t\t\tif uint64(r.Start) <= tag && tag <= uint64(r.End) {\n\t\t\t\tif u.extensions.IsValid() {\n\t\t\t\t\tmp := m.offset(u.extensions).toExtensions()\n\t\t\t\t\temap = mp.extensionsWrite()\n\t\t\t\t\te = emap[int32(tag)]\n\t\t\t\t\tz = &e.enc\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif u.oldExtensions.IsValid() {\n\t\t\t\t\tp := m.offset(u.oldExtensions).toOldExtensions()\n\t\t\t\t\temap = *p\n\t\t\t\t\tif emap == nil {\n\t\t\t\t\t\temap = map[int32]Extension{}\n\t\t\t\t\t\t*p = emap\n\t\t\t\t\t}\n\t\t\t\t\te = emap[int32(tag)]\n\t\t\t\t\tz = &e.enc\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif u.bytesExtensions.IsValid() {\n\t\t\t\t\tz = m.offset(u.bytesExtensions).toBytes()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tpanic(\"no extensions field available\")\n\t\t\t}\n\t\t}\n\t\t// Use wire type to skip data.\n\t\tvar err error\n\t\tb0 := b\n\t\tb, err = skipField(b, wire)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*z = encodeVarint(*z, tag<<3|uint64(wire))\n\t\t*z = append(*z, b0[:len(b0)-len(b)]...)\n\n\t\tif emap != nil {\n\t\t\temap[int32(tag)] = e\n\t\t}\n\t}\n\tif reqMask != u.reqMask && errLater == nil {\n\t\t// A required field of this message is missing.\n\t\tfor _, n := range u.reqFields {\n\t\t\tif reqMask&1 == 0 {\n\t\t\t\terrLater = &RequiredNotSetError{n}\n\t\t\t}\n\t\t\treqMask >>= 1\n\t\t}\n\t}\n\treturn errLater\n}\n\n// computeUnmarshalInfo fills in u with information for use\n// in unmarshaling protocol buffers of type u.typ.\nfunc (u *unmarshalInfo) computeUnmarshalInfo() {\n\tu.lock.Lock()\n\tdefer u.lock.Unlock()\n\tif u.initialized != 0 {\n\t\treturn\n\t}\n\tt := u.typ\n\tn := t.NumField()\n\n\t// Set up the \"not found\" value for the unrecognized byte buffer.\n\t// This is the default for proto3.\n\tu.unrecognized = invalidField\n\tu.extensions = invalidField\n\tu.oldExtensions = invalidField\n\tu.bytesExtensions = invalidField\n\n\t// List of the generated type and offset for each oneof field.\n\ttype oneofField struct {\n\t\tityp  reflect.Type // interface type of oneof field\n\t\tfield field        // offset in containing message\n\t}\n\tvar oneofFields []oneofField\n\n\tfor i := 0; i < n; i++ {\n\t\tf := t.Field(i)\n\t\tif f.Name == \"XXX_unrecognized\" {\n\t\t\t// The byte slice used to hold unrecognized input is special.\n\t\t\tif f.Type != reflect.TypeOf(([]byte)(nil)) {\n\t\t\t\tpanic(\"bad type for XXX_unrecognized field: \" + f.Type.Name())\n\t\t\t}\n\t\t\tu.unrecognized = toField(&f)\n\t\t\tcontinue\n\t\t}\n\t\tif f.Name == \"XXX_InternalExtensions\" {\n\t\t\t// Ditto here.\n\t\t\tif f.Type != reflect.TypeOf(XXX_InternalExtensions{}) {\n\t\t\t\tpanic(\"bad type for XXX_InternalExtensions field: \" + f.Type.Name())\n\t\t\t}\n\t\t\tu.extensions = toField(&f)\n\t\t\tif f.Tag.Get(\"protobuf_messageset\") == \"1\" {\n\t\t\t\tu.isMessageSet = true\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif f.Name == \"XXX_extensions\" {\n\t\t\t// An older form of the extensions field.\n\t\t\tif f.Type == reflect.TypeOf((map[int32]Extension)(nil)) {\n\t\t\t\tu.oldExtensions = toField(&f)\n\t\t\t\tcontinue\n\t\t\t} else if f.Type == reflect.TypeOf(([]byte)(nil)) {\n\t\t\t\tu.bytesExtensions = toField(&f)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tpanic(\"bad type for XXX_extensions field: \" + f.Type.Name())\n\t\t}\n\t\tif f.Name == \"XXX_NoUnkeyedLiteral\" || f.Name == \"XXX_sizecache\" {\n\t\t\tcontinue\n\t\t}\n\n\t\toneof := f.Tag.Get(\"protobuf_oneof\")\n\t\tif oneof != \"\" {\n\t\t\toneofFields = append(oneofFields, oneofField{f.Type, toField(&f)})\n\t\t\t// The rest of oneof processing happens below.\n\t\t\tcontinue\n\t\t}\n\n\t\ttags := f.Tag.Get(\"protobuf\")\n\t\ttagArray := strings.Split(tags, \",\")\n\t\tif len(tagArray) < 2 {\n\t\t\tpanic(\"protobuf tag not enough fields in \" + t.Name() + \".\" + f.Name + \": \" + tags)\n\t\t}\n\t\ttag, err := strconv.Atoi(tagArray[1])\n\t\tif err != nil {\n\t\t\tpanic(\"protobuf tag field not an integer: \" + tagArray[1])\n\t\t}\n\n\t\tname := \"\"\n\t\tfor _, tag := range tagArray[3:] {\n\t\t\tif strings.HasPrefix(tag, \"name=\") {\n\t\t\t\tname = tag[5:]\n\t\t\t}\n\t\t}\n\n\t\t// Extract unmarshaling function from the field (its type and tags).\n\t\tunmarshal := fieldUnmarshaler(&f)\n\n\t\t// Required field?\n\t\tvar reqMask uint64\n\t\tif tagArray[2] == \"req\" {\n\t\t\tbit := len(u.reqFields)\n\t\t\tu.reqFields = append(u.reqFields, name)\n\t\t\treqMask = uint64(1) << uint(bit)\n\t\t\t// TODO: if we have more than 64 required fields, we end up\n\t\t\t// not verifying that all required fields are present.\n\t\t\t// Fix this, perhaps using a count of required fields?\n\t\t}\n\n\t\t// Store the info in the correct slot in the message.\n\t\tu.setTag(tag, toField(&f), unmarshal, reqMask, name)\n\t}\n\n\t// Find any types associated with oneof fields.\n\t// gogo: len(oneofFields) > 0 is needed for embedded oneof messages, without a marshaler and unmarshaler\n\tif len(oneofFields) > 0 {\n\t\tvar oneofImplementers []interface{}\n\t\tswitch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {\n\t\tcase oneofFuncsIface:\n\t\t\t_, _, _, oneofImplementers = m.XXX_OneofFuncs()\n\t\tcase oneofWrappersIface:\n\t\t\toneofImplementers = m.XXX_OneofWrappers()\n\t\t}\n\t\tfor _, v := range oneofImplementers {\n\t\t\ttptr := reflect.TypeOf(v) // *Msg_X\n\t\t\ttyp := tptr.Elem()        // Msg_X\n\n\t\t\tf := typ.Field(0) // oneof implementers have one field\n\t\t\tbaseUnmarshal := fieldUnmarshaler(&f)\n\t\t\ttags := strings.Split(f.Tag.Get(\"protobuf\"), \",\")\n\t\t\tfieldNum, err := strconv.Atoi(tags[1])\n\t\t\tif err != nil {\n\t\t\t\tpanic(\"protobuf tag field not an integer: \" + tags[1])\n\t\t\t}\n\t\t\tvar name string\n\t\t\tfor _, tag := range tags {\n\t\t\t\tif strings.HasPrefix(tag, \"name=\") {\n\t\t\t\t\tname = strings.TrimPrefix(tag, \"name=\")\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Find the oneof field that this struct implements.\n\t\t\t// Might take O(n^2) to process all of the oneofs, but who cares.\n\t\t\tfor _, of := range oneofFields {\n\t\t\t\tif tptr.Implements(of.ityp) {\n\t\t\t\t\t// We have found the corresponding interface for this struct.\n\t\t\t\t\t// That lets us know where this struct should be stored\n\t\t\t\t\t// when we encounter it during unmarshaling.\n\t\t\t\t\tunmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)\n\t\t\t\t\tu.setTag(fieldNum, of.field, unmarshal, 0, name)\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n\n\t// Get extension ranges, if any.\n\tfn := reflect.Zero(reflect.PtrTo(t)).MethodByName(\"ExtensionRangeArray\")\n\tif fn.IsValid() {\n\t\tif !u.extensions.IsValid() && !u.oldExtensions.IsValid() && !u.bytesExtensions.IsValid() {\n\t\t\tpanic(\"a message with extensions, but no extensions field in \" + t.Name())\n\t\t}\n\t\tu.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange)\n\t}\n\n\t// Explicitly disallow tag 0. This will ensure we flag an error\n\t// when decoding a buffer of all zeros. Without this code, we\n\t// would decode and skip an all-zero buffer of even length.\n\t// [0 0] is [tag=0/wiretype=varint varint-encoded-0].\n\tu.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) {\n\t\treturn nil, fmt.Errorf(\"proto: %s: illegal tag 0 (wire type %d)\", t, w)\n\t}, 0, \"\")\n\n\t// Set mask for required field check.\n\tu.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1\n\n\tatomic.StoreInt32(&u.initialized, 1)\n}\n\n// setTag stores the unmarshal information for the given tag.\n// tag = tag # for field\n// field/unmarshal = unmarshal info for that field.\n// reqMask = if required, bitmask for field position in required field list. 0 otherwise.\n// name = short name of the field.\nfunc (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64, name string) {\n\ti := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask, name: name}\n\tn := u.typ.NumField()\n\tif tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here?\n\t\tfor len(u.dense) <= tag {\n\t\t\tu.dense = append(u.dense, unmarshalFieldInfo{})\n\t\t}\n\t\tu.dense[tag] = i\n\t\treturn\n\t}\n\tif u.sparse == nil {\n\t\tu.sparse = map[uint64]unmarshalFieldInfo{}\n\t}\n\tu.sparse[uint64(tag)] = i\n}\n\n// fieldUnmarshaler returns an unmarshaler for the given field.\nfunc fieldUnmarshaler(f *reflect.StructField) unmarshaler {\n\tif f.Type.Kind() == reflect.Map {\n\t\treturn makeUnmarshalMap(f)\n\t}\n\treturn typeUnmarshaler(f.Type, f.Tag.Get(\"protobuf\"))\n}\n\n// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair.\nfunc typeUnmarshaler(t reflect.Type, tags string) unmarshaler {\n\ttagArray := strings.Split(tags, \",\")\n\tencoding := tagArray[0]\n\tname := \"unknown\"\n\tctype := false\n\tisTime := false\n\tisDuration := false\n\tisWktPointer := false\n\tproto3 := false\n\tvalidateUTF8 := true\n\tfor _, tag := range tagArray[3:] {\n\t\tif strings.HasPrefix(tag, \"name=\") {\n\t\t\tname = tag[5:]\n\t\t}\n\t\tif tag == \"proto3\" {\n\t\t\tproto3 = true\n\t\t}\n\t\tif strings.HasPrefix(tag, \"customtype=\") {\n\t\t\tctype = true\n\t\t}\n\t\tif tag == \"stdtime\" {\n\t\t\tisTime = true\n\t\t}\n\t\tif tag == \"stdduration\" {\n\t\t\tisDuration = true\n\t\t}\n\t\tif tag == \"wktptr\" {\n\t\t\tisWktPointer = true\n\t\t}\n\t}\n\tvalidateUTF8 = validateUTF8 && proto3\n\n\t// Figure out packaging (pointer, slice, or both)\n\tslice := false\n\tpointer := false\n\tif t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {\n\t\tslice = true\n\t\tt = t.Elem()\n\t}\n\tif t.Kind() == reflect.Ptr {\n\t\tpointer = true\n\t\tt = t.Elem()\n\t}\n\n\tif ctype {\n\t\tif reflect.PtrTo(t).Implements(customType) {\n\t\t\tif slice {\n\t\t\t\treturn makeUnmarshalCustomSlice(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif pointer {\n\t\t\t\treturn makeUnmarshalCustomPtr(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeUnmarshalCustom(getUnmarshalInfo(t), name)\n\t\t} else {\n\t\t\tpanic(fmt.Sprintf(\"custom type: type: %v, does not implement the proto.custom interface\", t))\n\t\t}\n\t}\n\n\tif isTime {\n\t\tif pointer {\n\t\t\tif slice {\n\t\t\t\treturn makeUnmarshalTimePtrSlice(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeUnmarshalTimePtr(getUnmarshalInfo(t), name)\n\t\t}\n\t\tif slice {\n\t\t\treturn makeUnmarshalTimeSlice(getUnmarshalInfo(t), name)\n\t\t}\n\t\treturn makeUnmarshalTime(getUnmarshalInfo(t), name)\n\t}\n\n\tif isDuration {\n\t\tif pointer {\n\t\t\tif slice {\n\t\t\t\treturn makeUnmarshalDurationPtrSlice(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeUnmarshalDurationPtr(getUnmarshalInfo(t), name)\n\t\t}\n\t\tif slice {\n\t\t\treturn makeUnmarshalDurationSlice(getUnmarshalInfo(t), name)\n\t\t}\n\t\treturn makeUnmarshalDuration(getUnmarshalInfo(t), name)\n\t}\n\n\tif isWktPointer {\n\t\tswitch t.Kind() {\n\t\tcase reflect.Float64:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdDoubleValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdDoubleValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdDoubleValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdDoubleValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase reflect.Float32:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdFloatValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdFloatValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdFloatValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdFloatValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase reflect.Int64:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdInt64ValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase reflect.Uint64:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdUInt64ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdUInt64ValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdUInt64ValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdUInt64ValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase reflect.Int32:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdInt32ValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase reflect.Uint32:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdUInt32ValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdUInt32ValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdUInt32ValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdUInt32ValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase reflect.Bool:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdBoolValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdBoolValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdBoolValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdBoolValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase reflect.String:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdStringValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdStringValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdStringValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdStringValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tcase uint8SliceType:\n\t\t\tif pointer {\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeStdBytesValuePtrSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeStdBytesValuePtrUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn makeStdBytesValueSliceUnmarshaler(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeStdBytesValueUnmarshaler(getUnmarshalInfo(t), name)\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"unknown wktpointer type %#v\", t))\n\t\t}\n\t}\n\n\t// We'll never have both pointer and slice for basic types.\n\tif pointer && slice && t.Kind() != reflect.Struct {\n\t\tpanic(\"both pointer and slice for basic type in \" + t.Name())\n\t}\n\n\tswitch t.Kind() {\n\tcase reflect.Bool:\n\t\tif pointer {\n\t\t\treturn unmarshalBoolPtr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalBoolSlice\n\t\t}\n\t\treturn unmarshalBoolValue\n\tcase reflect.Int32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixedS32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixedS32Slice\n\t\t\t}\n\t\t\treturn unmarshalFixedS32Value\n\t\tcase \"varint\":\n\t\t\t// this could be int32 or enum\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalInt32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalInt32Slice\n\t\t\t}\n\t\t\treturn unmarshalInt32Value\n\t\tcase \"zigzag32\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalSint32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalSint32Slice\n\t\t\t}\n\t\t\treturn unmarshalSint32Value\n\t\t}\n\tcase reflect.Int64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixedS64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixedS64Slice\n\t\t\t}\n\t\t\treturn unmarshalFixedS64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalInt64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalInt64Slice\n\t\t\t}\n\t\t\treturn unmarshalInt64Value\n\t\tcase \"zigzag64\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalSint64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalSint64Slice\n\t\t\t}\n\t\t\treturn unmarshalSint64Value\n\t\t}\n\tcase reflect.Uint32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixed32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixed32Slice\n\t\t\t}\n\t\t\treturn unmarshalFixed32Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalUint32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalUint32Slice\n\t\t\t}\n\t\t\treturn unmarshalUint32Value\n\t\t}\n\tcase reflect.Uint64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixed64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixed64Slice\n\t\t\t}\n\t\t\treturn unmarshalFixed64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalUint64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalUint64Slice\n\t\t\t}\n\t\t\treturn unmarshalUint64Value\n\t\t}\n\tcase reflect.Float32:\n\t\tif pointer {\n\t\t\treturn unmarshalFloat32Ptr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalFloat32Slice\n\t\t}\n\t\treturn unmarshalFloat32Value\n\tcase reflect.Float64:\n\t\tif pointer {\n\t\t\treturn unmarshalFloat64Ptr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalFloat64Slice\n\t\t}\n\t\treturn unmarshalFloat64Value\n\tcase reflect.Map:\n\t\tpanic(\"map type in typeUnmarshaler in \" + t.Name())\n\tcase reflect.Slice:\n\t\tif pointer {\n\t\t\tpanic(\"bad pointer in slice case in \" + t.Name())\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalBytesSlice\n\t\t}\n\t\treturn unmarshalBytesValue\n\tcase reflect.String:\n\t\tif validateUTF8 {\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalUTF8StringPtr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalUTF8StringSlice\n\t\t\t}\n\t\t\treturn unmarshalUTF8StringValue\n\t\t}\n\t\tif pointer {\n\t\t\treturn unmarshalStringPtr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalStringSlice\n\t\t}\n\t\treturn unmarshalStringValue\n\tcase reflect.Struct:\n\t\t// message or group field\n\t\tif !pointer {\n\t\t\tswitch encoding {\n\t\t\tcase \"bytes\":\n\t\t\t\tif slice {\n\t\t\t\t\treturn makeUnmarshalMessageSlice(getUnmarshalInfo(t), name)\n\t\t\t\t}\n\t\t\t\treturn makeUnmarshalMessage(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t}\n\t\tswitch encoding {\n\t\tcase \"bytes\":\n\t\t\tif slice {\n\t\t\t\treturn makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeUnmarshalMessagePtr(getUnmarshalInfo(t), name)\n\t\tcase \"group\":\n\t\t\tif slice {\n\t\t\t\treturn makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeUnmarshalGroupPtr(getUnmarshalInfo(t), name)\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"unmarshaler not found type:%s encoding:%s\", t, encoding))\n}\n\n// Below are all the unmarshalers for individual fields of various types.\n\nfunc unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x)\n\t*f.toInt64() = v\n\treturn b, nil\n}\n\nfunc unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x)\n\t*f.toInt64Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int64(x)\n\t\t\ts := f.toInt64Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x)\n\ts := f.toInt64Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x>>1) ^ int64(x)<<63>>63\n\t*f.toInt64() = v\n\treturn b, nil\n}\n\nfunc unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x>>1) ^ int64(x)<<63>>63\n\t*f.toInt64Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int64(x>>1) ^ int64(x)<<63>>63\n\t\t\ts := f.toInt64Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x>>1) ^ int64(x)<<63>>63\n\ts := f.toInt64Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint64(x)\n\t*f.toUint64() = v\n\treturn b, nil\n}\n\nfunc unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint64(x)\n\t*f.toUint64Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := uint64(x)\n\t\t\ts := f.toUint64Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint64(x)\n\ts := f.toUint64Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x)\n\t*f.toInt32() = v\n\treturn b, nil\n}\n\nfunc unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x)\n\tf.setInt32Ptr(v)\n\treturn b, nil\n}\n\nfunc unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int32(x)\n\t\t\tf.appendInt32Slice(v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x)\n\tf.appendInt32Slice(v)\n\treturn b, nil\n}\n\nfunc unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x>>1) ^ int32(x)<<31>>31\n\t*f.toInt32() = v\n\treturn b, nil\n}\n\nfunc unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x>>1) ^ int32(x)<<31>>31\n\tf.setInt32Ptr(v)\n\treturn b, nil\n}\n\nfunc unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int32(x>>1) ^ int32(x)<<31>>31\n\t\t\tf.appendInt32Slice(v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x>>1) ^ int32(x)<<31>>31\n\tf.appendInt32Slice(v)\n\treturn b, nil\n}\n\nfunc unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint32(x)\n\t*f.toUint32() = v\n\treturn b, nil\n}\n\nfunc unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint32(x)\n\t*f.toUint32Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := uint32(x)\n\t\t\ts := f.toUint32Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint32(x)\n\ts := f.toUint32Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n\t*f.toUint64() = v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n\t*f.toUint64Ptr() = &v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 8 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n\t\t\ts := f.toUint64Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[8:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n\ts := f.toUint64Slice()\n\t*s = append(*s, v)\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56\n\t*f.toInt64() = v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56\n\t*f.toInt64Ptr() = &v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 8 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56\n\t\t\ts := f.toInt64Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[8:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56\n\ts := f.toInt64Slice()\n\t*s = append(*s, v)\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\t*f.toUint32() = v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\t*f.toUint32Ptr() = &v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 4 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\t\t\ts := f.toUint32Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[4:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\ts := f.toUint32Slice()\n\t*s = append(*s, v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\t*f.toInt32() = v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\tf.setInt32Ptr(v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 4 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\t\t\tf.appendInt32Slice(v)\n\t\t\tb = b[4:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\tf.appendInt32Slice(v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\t// Note: any length varint is allowed, even though any sane\n\t// encoder will use one byte.\n\t// See https://github.com/golang/protobuf/issues/76\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\t// TODO: check if x>1? Tests seem to indicate no.\n\tv := x != 0\n\t*f.toBool() = v\n\treturn b[n:], nil\n}\n\nfunc unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := x != 0\n\t*f.toBoolPtr() = &v\n\treturn b[n:], nil\n}\n\nfunc unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := x != 0\n\t\t\ts := f.toBoolSlice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[n:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := x != 0\n\ts := f.toBoolSlice()\n\t*s = append(*s, v)\n\treturn b[n:], nil\n}\n\nfunc unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)\n\t*f.toFloat64() = v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)\n\t*f.toFloat64Ptr() = &v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 8 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)\n\t\t\ts := f.toFloat64Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[8:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56)\n\ts := f.toFloat64Slice()\n\t*s = append(*s, v)\n\treturn b[8:], nil\n}\n\nfunc unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\t*f.toFloat32() = v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\t*f.toFloat32Ptr() = &v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 4 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\t\t\ts := f.toFloat32Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[4:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\ts := f.toFloat32Slice()\n\t*s = append(*s, v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toString() = v\n\treturn b[x:], nil\n}\n\nfunc unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toStringPtr() = &v\n\treturn b[x:], nil\n}\n\nfunc unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\ts := f.toStringSlice()\n\t*s = append(*s, v)\n\treturn b[x:], nil\n}\n\nfunc unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toString() = v\n\tif !utf8.ValidString(v) {\n\t\treturn b[x:], errInvalidUTF8\n\t}\n\treturn b[x:], nil\n}\n\nfunc unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toStringPtr() = &v\n\tif !utf8.ValidString(v) {\n\t\treturn b[x:], errInvalidUTF8\n\t}\n\treturn b[x:], nil\n}\n\nfunc unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\ts := f.toStringSlice()\n\t*s = append(*s, v)\n\tif !utf8.ValidString(v) {\n\t\treturn b[x:], errInvalidUTF8\n\t}\n\treturn b[x:], nil\n}\n\nvar emptyBuf [0]byte\n\nfunc unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\t// The use of append here is a trick which avoids the zeroing\n\t// that would be required if we used a make/copy pair.\n\t// We append to emptyBuf instead of nil because we want\n\t// a non-nil result even when the length is 0.\n\tv := append(emptyBuf[:], b[:x]...)\n\t*f.toBytes() = v\n\treturn b[x:], nil\n}\n\nfunc unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := append(emptyBuf[:], b[:x]...)\n\ts := f.toBytesSlice()\n\t*s = append(*s, v)\n\treturn b[x:], nil\n}\n\nfunc makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\t// First read the message field to see if something is there.\n\t\t// The semantics of multiple submessages are weird.  Instead of\n\t\t// the last one winning (as it is for all other fields), multiple\n\t\t// submessages are merged.\n\t\tv := f.getPointer()\n\t\tif v.isNil() {\n\t\t\tv = valToPointer(reflect.New(sub.typ))\n\t\t\tf.setPointer(v)\n\t\t}\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn b[x:], err\n\t}\n}\n\nfunc makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tv := valToPointer(reflect.New(sub.typ))\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tf.appendPointer(v)\n\t\treturn b[x:], err\n\t}\n}\n\nfunc makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireStartGroup {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, y := findEndGroup(b)\n\t\tif x < 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tv := f.getPointer()\n\t\tif v.isNil() {\n\t\t\tv = valToPointer(reflect.New(sub.typ))\n\t\t\tf.setPointer(v)\n\t\t}\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn b[y:], err\n\t}\n}\n\nfunc makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireStartGroup {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, y := findEndGroup(b)\n\t\tif x < 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tv := valToPointer(reflect.New(sub.typ))\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tf.appendPointer(v)\n\t\treturn b[y:], err\n\t}\n}\n\nfunc makeUnmarshalMap(f *reflect.StructField) unmarshaler {\n\tt := f.Type\n\tkt := t.Key()\n\tvt := t.Elem()\n\ttagArray := strings.Split(f.Tag.Get(\"protobuf\"), \",\")\n\tvalTags := strings.Split(f.Tag.Get(\"protobuf_val\"), \",\")\n\tfor _, t := range tagArray {\n\t\tif strings.HasPrefix(t, \"customtype=\") {\n\t\t\tvalTags = append(valTags, t)\n\t\t}\n\t\tif t == \"stdtime\" {\n\t\t\tvalTags = append(valTags, t)\n\t\t}\n\t\tif t == \"stdduration\" {\n\t\t\tvalTags = append(valTags, t)\n\t\t}\n\t\tif t == \"wktptr\" {\n\t\t\tvalTags = append(valTags, t)\n\t\t}\n\t}\n\tunmarshalKey := typeUnmarshaler(kt, f.Tag.Get(\"protobuf_key\"))\n\tunmarshalVal := typeUnmarshaler(vt, strings.Join(valTags, \",\"))\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\t// The map entry is a submessage. Figure out how big it is.\n\t\tif w != WireBytes {\n\t\t\treturn nil, fmt.Errorf(\"proto: bad wiretype for map field: got %d want %d\", w, WireBytes)\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tr := b[x:] // unused data to return\n\t\tb = b[:x]  // data for map entry\n\n\t\t// Note: we could use #keys * #values ~= 200 functions\n\t\t// to do map decoding without reflection. Probably not worth it.\n\t\t// Maps will be somewhat slow. Oh well.\n\n\t\t// Read key and value from data.\n\t\tvar nerr nonFatal\n\t\tk := reflect.New(kt)\n\t\tv := reflect.New(vt)\n\t\tfor len(b) > 0 {\n\t\t\tx, n := decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\twire := int(x) & 7\n\t\t\tb = b[n:]\n\n\t\t\tvar err error\n\t\t\tswitch x >> 3 {\n\t\t\tcase 1:\n\t\t\t\tb, err = unmarshalKey(b, valToPointer(k), wire)\n\t\t\tcase 2:\n\t\t\t\tb, err = unmarshalVal(b, valToPointer(v), wire)\n\t\t\tdefault:\n\t\t\t\terr = errInternalBadWireType // skip unknown tag\n\t\t\t}\n\n\t\t\tif nerr.Merge(err) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err != errInternalBadWireType {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// Skip past unknown fields.\n\t\t\tb, err = skipField(b, wire)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\t// Get map, allocate if needed.\n\t\tm := f.asPointerTo(t).Elem() // an addressable map[K]T\n\t\tif m.IsNil() {\n\t\t\tm.Set(reflect.MakeMap(t))\n\t\t}\n\n\t\t// Insert into map.\n\t\tm.SetMapIndex(k.Elem(), v.Elem())\n\n\t\treturn r, nerr.E\n\t}\n}\n\n// makeUnmarshalOneof makes an unmarshaler for oneof fields.\n// for:\n// message Msg {\n//   oneof F {\n//     int64 X = 1;\n//     float64 Y = 2;\n//   }\n// }\n// typ is the type of the concrete entry for a oneof case (e.g. Msg_X).\n// ityp is the interface type of the oneof field (e.g. isMsg_F).\n// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64).\n// Note that this function will be called once for each case in the oneof.\nfunc makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler {\n\tsf := typ.Field(0)\n\tfield0 := toField(&sf)\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\t// Allocate holder for value.\n\t\tv := reflect.New(typ)\n\n\t\t// Unmarshal data into holder.\n\t\t// We unmarshal into the first field of the holder object.\n\t\tvar err error\n\t\tvar nerr nonFatal\n\t\tb, err = unmarshal(b, valToPointer(v).offset(field0), w)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Write pointer to holder into target field.\n\t\tf.asPointerTo(ityp).Elem().Set(v)\n\n\t\treturn b, nerr.E\n\t}\n}\n\n// Error used by decode internally.\nvar errInternalBadWireType = errors.New(\"proto: internal error: bad wiretype\")\n\n// skipField skips past a field of type wire and returns the remaining bytes.\nfunc skipField(b []byte, wire int) ([]byte, error) {\n\tswitch wire {\n\tcase WireVarint:\n\t\t_, k := decodeVarint(b)\n\t\tif k == 0 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[k:]\n\tcase WireFixed32:\n\t\tif len(b) < 4 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[4:]\n\tcase WireFixed64:\n\t\tif len(b) < 8 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[8:]\n\tcase WireBytes:\n\t\tm, k := decodeVarint(b)\n\t\tif k == 0 || uint64(len(b)-k) < m {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[uint64(k)+m:]\n\tcase WireStartGroup:\n\t\t_, i := findEndGroup(b)\n\t\tif i == -1 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[i:]\n\tdefault:\n\t\treturn b, fmt.Errorf(\"proto: can't skip unknown wire type %d\", wire)\n\t}\n\treturn b, nil\n}\n\n// findEndGroup finds the index of the next EndGroup tag.\n// Groups may be nested, so the \"next\" EndGroup tag is the first\n// unpaired EndGroup.\n// findEndGroup returns the indexes of the start and end of the EndGroup tag.\n// Returns (-1,-1) if it can't find one.\nfunc findEndGroup(b []byte) (int, int) {\n\tdepth := 1\n\ti := 0\n\tfor {\n\t\tx, n := decodeVarint(b[i:])\n\t\tif n == 0 {\n\t\t\treturn -1, -1\n\t\t}\n\t\tj := i\n\t\ti += n\n\t\tswitch x & 7 {\n\t\tcase WireVarint:\n\t\t\t_, k := decodeVarint(b[i:])\n\t\t\tif k == 0 {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += k\n\t\tcase WireFixed32:\n\t\t\tif len(b)-4 < i {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += 4\n\t\tcase WireFixed64:\n\t\t\tif len(b)-8 < i {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += 8\n\t\tcase WireBytes:\n\t\t\tm, k := decodeVarint(b[i:])\n\t\t\tif k == 0 {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += k\n\t\t\tif uint64(len(b)-i) < m {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += int(m)\n\t\tcase WireStartGroup:\n\t\t\tdepth++\n\t\tcase WireEndGroup:\n\t\t\tdepth--\n\t\t\tif depth == 0 {\n\t\t\t\treturn j, i\n\t\t\t}\n\t\tdefault:\n\t\t\treturn -1, -1\n\t\t}\n\t}\n}\n\n// encodeVarint appends a varint-encoded integer to b and returns the result.\nfunc encodeVarint(b []byte, x uint64) []byte {\n\tfor x >= 1<<7 {\n\t\tb = append(b, byte(x&0x7f|0x80))\n\t\tx >>= 7\n\t}\n\treturn append(b, byte(x))\n}\n\n// decodeVarint reads a varint-encoded integer from b.\n// Returns the decoded integer and the number of bytes read.\n// If there is an error, it returns 0,0.\nfunc decodeVarint(b []byte) (uint64, int) {\n\tvar x, y uint64\n\tif len(b) == 0 {\n\t\tgoto bad\n\t}\n\tx = uint64(b[0])\n\tif x < 0x80 {\n\t\treturn x, 1\n\t}\n\tx -= 0x80\n\n\tif len(b) <= 1 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[1])\n\tx += y << 7\n\tif y < 0x80 {\n\t\treturn x, 2\n\t}\n\tx -= 0x80 << 7\n\n\tif len(b) <= 2 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[2])\n\tx += y << 14\n\tif y < 0x80 {\n\t\treturn x, 3\n\t}\n\tx -= 0x80 << 14\n\n\tif len(b) <= 3 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[3])\n\tx += y << 21\n\tif y < 0x80 {\n\t\treturn x, 4\n\t}\n\tx -= 0x80 << 21\n\n\tif len(b) <= 4 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[4])\n\tx += y << 28\n\tif y < 0x80 {\n\t\treturn x, 5\n\t}\n\tx -= 0x80 << 28\n\n\tif len(b) <= 5 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[5])\n\tx += y << 35\n\tif y < 0x80 {\n\t\treturn x, 6\n\t}\n\tx -= 0x80 << 35\n\n\tif len(b) <= 6 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[6])\n\tx += y << 42\n\tif y < 0x80 {\n\t\treturn x, 7\n\t}\n\tx -= 0x80 << 42\n\n\tif len(b) <= 7 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[7])\n\tx += y << 49\n\tif y < 0x80 {\n\t\treturn x, 8\n\t}\n\tx -= 0x80 << 49\n\n\tif len(b) <= 8 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[8])\n\tx += y << 56\n\tif y < 0x80 {\n\t\treturn x, 9\n\t}\n\tx -= 0x80 << 56\n\n\tif len(b) <= 9 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[9])\n\tx += y << 63\n\tif y < 2 {\n\t\treturn x, 10\n\t}\n\nbad:\n\treturn 0, 0\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"io\"\n\t\"reflect\"\n)\n\nfunc makeUnmarshalMessage(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\t// First read the message field to see if something is there.\n\t\t// The semantics of multiple submessages are weird.  Instead of\n\t\t// the last one winning (as it is for all other fields), multiple\n\t\t// submessages are merged.\n\t\tv := f // gogo: changed from v := f.getPointer()\n\t\tif v.isNil() {\n\t\t\tv = valToPointer(reflect.New(sub.typ))\n\t\t\tf.setPointer(v)\n\t\t}\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn b[x:], err\n\t}\n}\n\nfunc makeUnmarshalMessageSlice(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tv := valToPointer(reflect.New(sub.typ))\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tf.appendRef(v, sub.typ) // gogo: changed from f.appendPointer(v)\n\t\treturn b[x:], err\n\t}\n}\n\nfunc makeUnmarshalCustomPtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.New(sub.typ))\n\t\tm := s.Interface().(custom)\n\t\tif err := m.Unmarshal(b[:x]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalCustomSlice(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := reflect.New(sub.typ)\n\t\tc := m.Interface().(custom)\n\t\tif err := c.Unmarshal(b[:x]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tv := valToPointer(m)\n\t\tf.appendRef(v, sub.typ)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalCustom(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\n\t\tm := f.asPointerTo(sub.typ).Interface().(custom)\n\t\tif err := m.Unmarshal(b[:x]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalTime(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &timestamp{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tt, err := timestampFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(t))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalTimePtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &timestamp{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tt, err := timestampFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&t))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalTimePtrSlice(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &timestamp{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tt, err := timestampFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&t))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalTimeSlice(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &timestamp{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tt, err := timestampFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(t))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalDurationPtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &duration{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\td, err := durationFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&d))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalDuration(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &duration{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\td, err := durationFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(d))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalDurationPtrSlice(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &duration{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\td, err := durationFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&d))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeUnmarshalDurationSlice(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &duration{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\td, err := durationFromProto(m)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(d))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/text.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n// Functions for writing the text protocol buffer format.\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\nvar (\n\tnewline         = []byte(\"\\n\")\n\tspaces          = []byte(\"                                        \")\n\tendBraceNewline = []byte(\"}\\n\")\n\tbackslashN      = []byte{'\\\\', 'n'}\n\tbackslashR      = []byte{'\\\\', 'r'}\n\tbackslashT      = []byte{'\\\\', 't'}\n\tbackslashDQ     = []byte{'\\\\', '\"'}\n\tbackslashBS     = []byte{'\\\\', '\\\\'}\n\tposInf          = []byte(\"inf\")\n\tnegInf          = []byte(\"-inf\")\n\tnan             = []byte(\"nan\")\n)\n\ntype writer interface {\n\tio.Writer\n\tWriteByte(byte) error\n}\n\n// textWriter is an io.Writer that tracks its indentation level.\ntype textWriter struct {\n\tind      int\n\tcomplete bool // if the current position is a complete line\n\tcompact  bool // whether to write out as a one-liner\n\tw        writer\n}\n\nfunc (w *textWriter) WriteString(s string) (n int, err error) {\n\tif !strings.Contains(s, \"\\n\") {\n\t\tif !w.compact && w.complete {\n\t\t\tw.writeIndent()\n\t\t}\n\t\tw.complete = false\n\t\treturn io.WriteString(w.w, s)\n\t}\n\t// WriteString is typically called without newlines, so this\n\t// codepath and its copy are rare.  We copy to avoid\n\t// duplicating all of Write's logic here.\n\treturn w.Write([]byte(s))\n}\n\nfunc (w *textWriter) Write(p []byte) (n int, err error) {\n\tnewlines := bytes.Count(p, newline)\n\tif newlines == 0 {\n\t\tif !w.compact && w.complete {\n\t\t\tw.writeIndent()\n\t\t}\n\t\tn, err = w.w.Write(p)\n\t\tw.complete = false\n\t\treturn n, err\n\t}\n\n\tfrags := bytes.SplitN(p, newline, newlines+1)\n\tif w.compact {\n\t\tfor i, frag := range frags {\n\t\t\tif i > 0 {\n\t\t\t\tif err := w.w.WriteByte(' '); err != nil {\n\t\t\t\t\treturn n, err\n\t\t\t\t}\n\t\t\t\tn++\n\t\t\t}\n\t\t\tnn, err := w.w.Write(frag)\n\t\t\tn += nn\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\t\treturn n, nil\n\t}\n\n\tfor i, frag := range frags {\n\t\tif w.complete {\n\t\t\tw.writeIndent()\n\t\t}\n\t\tnn, err := w.w.Write(frag)\n\t\tn += nn\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tif i+1 < len(frags) {\n\t\t\tif err := w.w.WriteByte('\\n'); err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t\tn++\n\t\t}\n\t}\n\tw.complete = len(frags[len(frags)-1]) == 0\n\treturn n, nil\n}\n\nfunc (w *textWriter) WriteByte(c byte) error {\n\tif w.compact && c == '\\n' {\n\t\tc = ' '\n\t}\n\tif !w.compact && w.complete {\n\t\tw.writeIndent()\n\t}\n\terr := w.w.WriteByte(c)\n\tw.complete = c == '\\n'\n\treturn err\n}\n\nfunc (w *textWriter) indent() { w.ind++ }\n\nfunc (w *textWriter) unindent() {\n\tif w.ind == 0 {\n\t\tlog.Print(\"proto: textWriter unindented too far\")\n\t\treturn\n\t}\n\tw.ind--\n}\n\nfunc writeName(w *textWriter, props *Properties) error {\n\tif _, err := w.WriteString(props.OrigName); err != nil {\n\t\treturn err\n\t}\n\tif props.Wire != \"group\" {\n\t\treturn w.WriteByte(':')\n\t}\n\treturn nil\n}\n\nfunc requiresQuotes(u string) bool {\n\t// When type URL contains any characters except [0-9A-Za-z./\\-]*, it must be quoted.\n\tfor _, ch := range u {\n\t\tswitch {\n\t\tcase ch == '.' || ch == '/' || ch == '_':\n\t\t\tcontinue\n\t\tcase '0' <= ch && ch <= '9':\n\t\t\tcontinue\n\t\tcase 'A' <= ch && ch <= 'Z':\n\t\t\tcontinue\n\t\tcase 'a' <= ch && ch <= 'z':\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// isAny reports whether sv is a google.protobuf.Any message\nfunc isAny(sv reflect.Value) bool {\n\ttype wkt interface {\n\t\tXXX_WellKnownType() string\n\t}\n\tt, ok := sv.Addr().Interface().(wkt)\n\treturn ok && t.XXX_WellKnownType() == \"Any\"\n}\n\n// writeProto3Any writes an expanded google.protobuf.Any message.\n//\n// It returns (false, nil) if sv value can't be unmarshaled (e.g. because\n// required messages are not linked in).\n//\n// It returns (true, error) when sv was written in expanded format or an error\n// was encountered.\nfunc (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {\n\tturl := sv.FieldByName(\"TypeUrl\")\n\tval := sv.FieldByName(\"Value\")\n\tif !turl.IsValid() || !val.IsValid() {\n\t\treturn true, errors.New(\"proto: invalid google.protobuf.Any message\")\n\t}\n\n\tb, ok := val.Interface().([]byte)\n\tif !ok {\n\t\treturn true, errors.New(\"proto: invalid google.protobuf.Any message\")\n\t}\n\n\tparts := strings.Split(turl.String(), \"/\")\n\tmt := MessageType(parts[len(parts)-1])\n\tif mt == nil {\n\t\treturn false, nil\n\t}\n\tm := reflect.New(mt.Elem())\n\tif err := Unmarshal(b, m.Interface().(Message)); err != nil {\n\t\treturn false, nil\n\t}\n\tw.Write([]byte(\"[\"))\n\tu := turl.String()\n\tif requiresQuotes(u) {\n\t\twriteString(w, u)\n\t} else {\n\t\tw.Write([]byte(u))\n\t}\n\tif w.compact {\n\t\tw.Write([]byte(\"]:<\"))\n\t} else {\n\t\tw.Write([]byte(\"]: <\\n\"))\n\t\tw.ind++\n\t}\n\tif err := tm.writeStruct(w, m.Elem()); err != nil {\n\t\treturn true, err\n\t}\n\tif w.compact {\n\t\tw.Write([]byte(\"> \"))\n\t} else {\n\t\tw.ind--\n\t\tw.Write([]byte(\">\\n\"))\n\t}\n\treturn true, nil\n}\n\nfunc (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {\n\tif tm.ExpandAny && isAny(sv) {\n\t\tif canExpand, err := tm.writeProto3Any(w, sv); canExpand {\n\t\t\treturn err\n\t\t}\n\t}\n\tst := sv.Type()\n\tsprops := GetProperties(st)\n\tfor i := 0; i < sv.NumField(); i++ {\n\t\tfv := sv.Field(i)\n\t\tprops := sprops.Prop[i]\n\t\tname := st.Field(i).Name\n\n\t\tif name == \"XXX_NoUnkeyedLiteral\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif strings.HasPrefix(name, \"XXX_\") {\n\t\t\t// There are two XXX_ fields:\n\t\t\t//   XXX_unrecognized []byte\n\t\t\t//   XXX_extensions   map[int32]proto.Extension\n\t\t\t// The first is handled here;\n\t\t\t// the second is handled at the bottom of this function.\n\t\t\tif name == \"XXX_unrecognized\" && !fv.IsNil() {\n\t\t\t\tif err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() == reflect.Ptr && fv.IsNil() {\n\t\t\t// Field not filled in. This could be an optional field or\n\t\t\t// a required field that wasn't filled in. Either way, there\n\t\t\t// isn't anything we can show for it.\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() == reflect.Slice && fv.IsNil() {\n\t\t\t// Repeated field that is empty, or a bytes field that is unused.\n\t\t\tcontinue\n\t\t}\n\n\t\tif props.Repeated && fv.Kind() == reflect.Slice {\n\t\t\t// Repeated field.\n\t\t\tfor j := 0; j < fv.Len(); j++ {\n\t\t\t\tif err := writeName(w, props); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tv := fv.Index(j)\n\t\t\t\tif v.Kind() == reflect.Ptr && v.IsNil() {\n\t\t\t\t\t// A nil message in a repeated field is not valid,\n\t\t\t\t\t// but we can handle that more gracefully than panicking.\n\t\t\t\t\tif _, err := w.Write([]byte(\"<nil>\\n\")); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif len(props.Enum) > 0 {\n\t\t\t\t\tif err := tm.writeEnum(w, v, props); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t} else if err := tm.writeAny(w, v, props); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() == reflect.Map {\n\t\t\t// Map fields are rendered as a repeated struct with key/value fields.\n\t\t\tkeys := fv.MapKeys()\n\t\t\tsort.Sort(mapKeys(keys))\n\t\t\tfor _, key := range keys {\n\t\t\t\tval := fv.MapIndex(key)\n\t\t\t\tif err := writeName(w, props); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// open struct\n\t\t\t\tif err := w.WriteByte('<'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tw.indent()\n\t\t\t\t// key\n\t\t\t\tif _, err := w.WriteString(\"key:\"); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif err := tm.writeAny(w, key, props.MapKeyProp); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\t// nil values aren't legal, but we can avoid panicking because of them.\n\t\t\t\tif val.Kind() != reflect.Ptr || !val.IsNil() {\n\t\t\t\t\t// value\n\t\t\t\t\tif _, err := w.WriteString(\"value:\"); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif !w.compact {\n\t\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif err := tm.writeAny(w, val, props.MapValProp); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// close struct\n\t\t\t\tw.unindent()\n\t\t\t\tif err := w.WriteByte('>'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 {\n\t\t\t// empty bytes field\n\t\t\tcontinue\n\t\t}\n\t\tif props.proto3 && fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice {\n\t\t\t// proto3 non-repeated scalar field; skip if zero value\n\t\t\tif isProto3Zero(fv) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif fv.Kind() == reflect.Interface {\n\t\t\t// Check if it is a oneof.\n\t\t\tif st.Field(i).Tag.Get(\"protobuf_oneof\") != \"\" {\n\t\t\t\t// fv is nil, or holds a pointer to generated struct.\n\t\t\t\t// That generated struct has exactly one field,\n\t\t\t\t// which has a protobuf struct tag.\n\t\t\t\tif fv.IsNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tinner := fv.Elem().Elem() // interface -> *T -> T\n\t\t\t\ttag := inner.Type().Field(0).Tag.Get(\"protobuf\")\n\t\t\t\tprops = new(Properties) // Overwrite the outer props var, but not its pointee.\n\t\t\t\tprops.Parse(tag)\n\t\t\t\t// Write the value in the oneof, not the oneof itself.\n\t\t\t\tfv = inner.Field(0)\n\n\t\t\t\t// Special case to cope with malformed messages gracefully:\n\t\t\t\t// If the value in the oneof is a nil pointer, don't panic\n\t\t\t\t// in writeAny.\n\t\t\t\tif fv.Kind() == reflect.Ptr && fv.IsNil() {\n\t\t\t\t\t// Use errors.New so writeAny won't render quotes.\n\t\t\t\t\tmsg := errors.New(\"/* nil */\")\n\t\t\t\t\tfv = reflect.ValueOf(&msg).Elem()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err := writeName(w, props); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !w.compact {\n\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tif len(props.Enum) > 0 {\n\t\t\tif err := tm.writeEnum(w, fv, props); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else if err := tm.writeAny(w, fv, props); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Extensions (the XXX_extensions field).\n\tpv := sv\n\tif pv.CanAddr() {\n\t\tpv = sv.Addr()\n\t} else {\n\t\tpv = reflect.New(sv.Type())\n\t\tpv.Elem().Set(sv)\n\t}\n\tif _, err := extendable(pv.Interface()); err == nil {\n\t\tif err := tm.writeExtensions(w, pv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nvar textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()\n\n// writeAny writes an arbitrary field.\nfunc (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {\n\tv = reflect.Indirect(v)\n\n\tif props != nil {\n\t\tif len(props.CustomType) > 0 {\n\t\t\tcustom, ok := v.Interface().(Marshaler)\n\t\t\tif ok {\n\t\t\t\tdata, err := custom.Marshal()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := writeString(w, string(data)); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t} else if len(props.CastType) > 0 {\n\t\t\tif _, ok := v.Interface().(interface {\n\t\t\t\tString() string\n\t\t\t}); ok {\n\t\t\t\tswitch v.Kind() {\n\t\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\t\t\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\t\t_, err := fmt.Fprintf(w, \"%d\", v.Interface())\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t} else if props.StdTime {\n\t\t\tt, ok := v.Interface().(time.Time)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"stdtime is not time.Time, but %T\", v.Interface())\n\t\t\t}\n\t\t\ttproto, err := timestampProto(t)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tpropsCopy := *props // Make a copy so that this is goroutine-safe\n\t\t\tpropsCopy.StdTime = false\n\t\t\terr = tm.writeAny(w, reflect.ValueOf(tproto), &propsCopy)\n\t\t\treturn err\n\t\t} else if props.StdDuration {\n\t\t\td, ok := v.Interface().(time.Duration)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"stdtime is not time.Duration, but %T\", v.Interface())\n\t\t\t}\n\t\t\tdproto := durationProto(d)\n\t\t\tpropsCopy := *props // Make a copy so that this is goroutine-safe\n\t\t\tpropsCopy.StdDuration = false\n\t\t\terr := tm.writeAny(w, reflect.ValueOf(dproto), &propsCopy)\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Floats have special cases.\n\tif v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {\n\t\tx := v.Float()\n\t\tvar b []byte\n\t\tswitch {\n\t\tcase math.IsInf(x, 1):\n\t\t\tb = posInf\n\t\tcase math.IsInf(x, -1):\n\t\t\tb = negInf\n\t\tcase math.IsNaN(x):\n\t\t\tb = nan\n\t\t}\n\t\tif b != nil {\n\t\t\t_, err := w.Write(b)\n\t\t\treturn err\n\t\t}\n\t\t// Other values are handled below.\n\t}\n\n\t// We don't attempt to serialise every possible value type; only those\n\t// that can occur in protocol buffers.\n\tswitch v.Kind() {\n\tcase reflect.Slice:\n\t\t// Should only be a []byte; repeated fields are handled in writeStruct.\n\t\tif err := writeString(w, string(v.Bytes())); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase reflect.String:\n\t\tif err := writeString(w, v.String()); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase reflect.Struct:\n\t\t// Required/optional group/message.\n\t\tvar bra, ket byte = '<', '>'\n\t\tif props != nil && props.Wire == \"group\" {\n\t\t\tbra, ket = '{', '}'\n\t\t}\n\t\tif err := w.WriteByte(bra); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !w.compact {\n\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tw.indent()\n\t\tif v.CanAddr() {\n\t\t\t// Calling v.Interface on a struct causes the reflect package to\n\t\t\t// copy the entire struct. This is racy with the new Marshaler\n\t\t\t// since we atomically update the XXX_sizecache.\n\t\t\t//\n\t\t\t// Thus, we retrieve a pointer to the struct if possible to avoid\n\t\t\t// a race since v.Interface on the pointer doesn't copy the struct.\n\t\t\t//\n\t\t\t// If v is not addressable, then we are not worried about a race\n\t\t\t// since it implies that the binary Marshaler cannot possibly be\n\t\t\t// mutating this value.\n\t\t\tv = v.Addr()\n\t\t}\n\t\tif v.Type().Implements(textMarshalerType) {\n\t\t\ttext, err := v.Interface().(encoding.TextMarshaler).MarshalText()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif _, err = w.Write(text); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tif v.Kind() == reflect.Ptr {\n\t\t\t\tv = v.Elem()\n\t\t\t}\n\t\t\tif err := tm.writeStruct(w, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tw.unindent()\n\t\tif err := w.WriteByte(ket); err != nil {\n\t\t\treturn err\n\t\t}\n\tdefault:\n\t\t_, err := fmt.Fprint(w, v.Interface())\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// equivalent to C's isprint.\nfunc isprint(c byte) bool {\n\treturn c >= 0x20 && c < 0x7f\n}\n\n// writeString writes a string in the protocol buffer text format.\n// It is similar to strconv.Quote except we don't use Go escape sequences,\n// we treat the string as a byte sequence, and we use octal escapes.\n// These differences are to maintain interoperability with the other\n// languages' implementations of the text format.\nfunc writeString(w *textWriter, s string) error {\n\t// use WriteByte here to get any needed indent\n\tif err := w.WriteByte('\"'); err != nil {\n\t\treturn err\n\t}\n\t// Loop over the bytes, not the runes.\n\tfor i := 0; i < len(s); i++ {\n\t\tvar err error\n\t\t// Divergence from C++: we don't escape apostrophes.\n\t\t// There's no need to escape them, and the C++ parser\n\t\t// copes with a naked apostrophe.\n\t\tswitch c := s[i]; c {\n\t\tcase '\\n':\n\t\t\t_, err = w.w.Write(backslashN)\n\t\tcase '\\r':\n\t\t\t_, err = w.w.Write(backslashR)\n\t\tcase '\\t':\n\t\t\t_, err = w.w.Write(backslashT)\n\t\tcase '\"':\n\t\t\t_, err = w.w.Write(backslashDQ)\n\t\tcase '\\\\':\n\t\t\t_, err = w.w.Write(backslashBS)\n\t\tdefault:\n\t\t\tif isprint(c) {\n\t\t\t\terr = w.w.WriteByte(c)\n\t\t\t} else {\n\t\t\t\t_, err = fmt.Fprintf(w.w, \"\\\\%03o\", c)\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn w.WriteByte('\"')\n}\n\nfunc writeUnknownStruct(w *textWriter, data []byte) (err error) {\n\tif !w.compact {\n\t\tif _, err := fmt.Fprintf(w, \"/* %d unknown bytes */\\n\", len(data)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tb := NewBuffer(data)\n\tfor b.index < len(b.buf) {\n\t\tx, err := b.DecodeVarint()\n\t\tif err != nil {\n\t\t\t_, ferr := fmt.Fprintf(w, \"/* %v */\\n\", err)\n\t\t\treturn ferr\n\t\t}\n\t\twire, tag := x&7, x>>3\n\t\tif wire == WireEndGroup {\n\t\t\tw.unindent()\n\t\t\tif _, werr := w.Write(endBraceNewline); werr != nil {\n\t\t\t\treturn werr\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif _, ferr := fmt.Fprint(w, tag); ferr != nil {\n\t\t\treturn ferr\n\t\t}\n\t\tif wire != WireStartGroup {\n\t\t\tif err = w.WriteByte(':'); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif !w.compact || wire == WireStartGroup {\n\t\t\tif err = w.WriteByte(' '); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tswitch wire {\n\t\tcase WireBytes:\n\t\t\tbuf, e := b.DecodeRawBytes(false)\n\t\t\tif e == nil {\n\t\t\t\t_, err = fmt.Fprintf(w, \"%q\", buf)\n\t\t\t} else {\n\t\t\t\t_, err = fmt.Fprintf(w, \"/* %v */\", e)\n\t\t\t}\n\t\tcase WireFixed32:\n\t\t\tx, err = b.DecodeFixed32()\n\t\t\terr = writeUnknownInt(w, x, err)\n\t\tcase WireFixed64:\n\t\t\tx, err = b.DecodeFixed64()\n\t\t\terr = writeUnknownInt(w, x, err)\n\t\tcase WireStartGroup:\n\t\t\terr = w.WriteByte('{')\n\t\t\tw.indent()\n\t\tcase WireVarint:\n\t\t\tx, err = b.DecodeVarint()\n\t\t\terr = writeUnknownInt(w, x, err)\n\t\tdefault:\n\t\t\t_, err = fmt.Fprintf(w, \"/* unknown wire type %d */\", wire)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc writeUnknownInt(w *textWriter, x uint64, err error) error {\n\tif err == nil {\n\t\t_, err = fmt.Fprint(w, x)\n\t} else {\n\t\t_, err = fmt.Fprintf(w, \"/* %v */\", err)\n\t}\n\treturn err\n}\n\ntype int32Slice []int32\n\nfunc (s int32Slice) Len() int           { return len(s) }\nfunc (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }\nfunc (s int32Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\n\n// writeExtensions writes all the extensions in pv.\n// pv is assumed to be a pointer to a protocol message struct that is extendable.\nfunc (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {\n\temap := extensionMaps[pv.Type().Elem()]\n\te := pv.Interface().(Message)\n\n\tvar m map[int32]Extension\n\tvar mu sync.Locker\n\tif em, ok := e.(extensionsBytes); ok {\n\t\teb := em.GetExtensions()\n\t\tvar err error\n\t\tm, err = BytesToExtensionsMap(*eb)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmu = notLocker{}\n\t} else if _, ok := e.(extendableProto); ok {\n\t\tep, _ := extendable(e)\n\t\tm, mu = ep.extensionsRead()\n\t\tif m == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// Order the extensions by ID.\n\t// This isn't strictly necessary, but it will give us\n\t// canonical output, which will also make testing easier.\n\n\tmu.Lock()\n\tids := make([]int32, 0, len(m))\n\tfor id := range m {\n\t\tids = append(ids, id)\n\t}\n\tsort.Sort(int32Slice(ids))\n\tmu.Unlock()\n\n\tfor _, extNum := range ids {\n\t\text := m[extNum]\n\t\tvar desc *ExtensionDesc\n\t\tif emap != nil {\n\t\t\tdesc = emap[extNum]\n\t\t}\n\t\tif desc == nil {\n\t\t\t// Unknown extension.\n\t\t\tif err := writeUnknownStruct(w, ext.enc); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tpb, err := GetExtension(e, desc)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed getting extension: %v\", err)\n\t\t}\n\n\t\t// Repeated extensions will appear as a slice.\n\t\tif !desc.repeated() {\n\t\t\tif err := tm.writeExtension(w, desc.Name, pb); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tv := reflect.ValueOf(pb)\n\t\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\t\tif err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {\n\tif _, err := fmt.Fprintf(w, \"[%s]:\", name); err != nil {\n\t\treturn err\n\t}\n\tif !w.compact {\n\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {\n\t\treturn err\n\t}\n\tif err := w.WriteByte('\\n'); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (w *textWriter) writeIndent() {\n\tif !w.complete {\n\t\treturn\n\t}\n\tremain := w.ind * 2\n\tfor remain > 0 {\n\t\tn := remain\n\t\tif n > len(spaces) {\n\t\t\tn = len(spaces)\n\t\t}\n\t\tw.w.Write(spaces[:n])\n\t\tremain -= n\n\t}\n\tw.complete = false\n}\n\n// TextMarshaler is a configurable text format marshaler.\ntype TextMarshaler struct {\n\tCompact   bool // use compact text format (one line).\n\tExpandAny bool // expand google.protobuf.Any messages of known types\n}\n\n// Marshal writes a given protocol buffer in text format.\n// The only errors returned are from w.\nfunc (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {\n\tval := reflect.ValueOf(pb)\n\tif pb == nil || val.IsNil() {\n\t\tw.Write([]byte(\"<nil>\"))\n\t\treturn nil\n\t}\n\tvar bw *bufio.Writer\n\tww, ok := w.(writer)\n\tif !ok {\n\t\tbw = bufio.NewWriter(w)\n\t\tww = bw\n\t}\n\taw := &textWriter{\n\t\tw:        ww,\n\t\tcomplete: true,\n\t\tcompact:  tm.Compact,\n\t}\n\n\tif etm, ok := pb.(encoding.TextMarshaler); ok {\n\t\ttext, err := etm.MarshalText()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err = aw.Write(text); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif bw != nil {\n\t\t\treturn bw.Flush()\n\t\t}\n\t\treturn nil\n\t}\n\t// Dereference the received pointer so we don't have outer < and >.\n\tv := reflect.Indirect(val)\n\tif err := tm.writeStruct(aw, v); err != nil {\n\t\treturn err\n\t}\n\tif bw != nil {\n\t\treturn bw.Flush()\n\t}\n\treturn nil\n}\n\n// Text is the same as Marshal, but returns the string directly.\nfunc (tm *TextMarshaler) Text(pb Message) string {\n\tvar buf bytes.Buffer\n\ttm.Marshal(&buf, pb)\n\treturn buf.String()\n}\n\nvar (\n\tdefaultTextMarshaler = TextMarshaler{}\n\tcompactTextMarshaler = TextMarshaler{Compact: true}\n)\n\n// TODO: consider removing some of the Marshal functions below.\n\n// MarshalText writes a given protocol buffer in text format.\n// The only errors returned are from w.\nfunc MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) }\n\n// MarshalTextString is the same as MarshalText, but returns the string directly.\nfunc MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) }\n\n// CompactText writes a given protocol buffer in compact text format (one line).\nfunc CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) }\n\n// CompactTextString is the same as CompactText, but returns the string directly.\nfunc CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) }\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/text_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\nfunc (tm *TextMarshaler) writeEnum(w *textWriter, v reflect.Value, props *Properties) error {\n\tm, ok := enumStringMaps[props.Enum]\n\tif !ok {\n\t\tif err := tm.writeAny(w, v, props); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tkey := int32(0)\n\tif v.Kind() == reflect.Ptr {\n\t\tkey = int32(v.Elem().Int())\n\t} else {\n\t\tkey = int32(v.Int())\n\t}\n\ts, ok := m[key]\n\tif !ok {\n\t\tif err := tm.writeAny(w, v, props); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t_, err := fmt.Fprint(w, s)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/text_parser.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2013, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n// Functions for parsing the Text protocol buffer format.\n// TODO: message sets.\n\nimport (\n\t\"encoding\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n)\n\n// Error string emitted when deserializing Any and fields are already set\nconst anyRepeatedlyUnpacked = \"Any message unpacked multiple times, or %q already set\"\n\ntype ParseError struct {\n\tMessage string\n\tLine    int // 1-based line number\n\tOffset  int // 0-based byte offset from start of input\n}\n\nfunc (p *ParseError) Error() string {\n\tif p.Line == 1 {\n\t\t// show offset only for first line\n\t\treturn fmt.Sprintf(\"line 1.%d: %v\", p.Offset, p.Message)\n\t}\n\treturn fmt.Sprintf(\"line %d: %v\", p.Line, p.Message)\n}\n\ntype token struct {\n\tvalue    string\n\terr      *ParseError\n\tline     int    // line number\n\toffset   int    // byte number from start of input, not start of line\n\tunquoted string // the unquoted version of value, if it was a quoted string\n}\n\nfunc (t *token) String() string {\n\tif t.err == nil {\n\t\treturn fmt.Sprintf(\"%q (line=%d, offset=%d)\", t.value, t.line, t.offset)\n\t}\n\treturn fmt.Sprintf(\"parse error: %v\", t.err)\n}\n\ntype textParser struct {\n\ts            string // remaining input\n\tdone         bool   // whether the parsing is finished (success or error)\n\tbacked       bool   // whether back() was called\n\toffset, line int\n\tcur          token\n}\n\nfunc newTextParser(s string) *textParser {\n\tp := new(textParser)\n\tp.s = s\n\tp.line = 1\n\tp.cur.line = 1\n\treturn p\n}\n\nfunc (p *textParser) errorf(format string, a ...interface{}) *ParseError {\n\tpe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset}\n\tp.cur.err = pe\n\tp.done = true\n\treturn pe\n}\n\n// Numbers and identifiers are matched by [-+._A-Za-z0-9]\nfunc isIdentOrNumberChar(c byte) bool {\n\tswitch {\n\tcase 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z':\n\t\treturn true\n\tcase '0' <= c && c <= '9':\n\t\treturn true\n\t}\n\tswitch c {\n\tcase '-', '+', '.', '_':\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isWhitespace(c byte) bool {\n\tswitch c {\n\tcase ' ', '\\t', '\\n', '\\r':\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isQuote(c byte) bool {\n\tswitch c {\n\tcase '\"', '\\'':\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (p *textParser) skipWhitespace() {\n\ti := 0\n\tfor i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') {\n\t\tif p.s[i] == '#' {\n\t\t\t// comment; skip to end of line or input\n\t\t\tfor i < len(p.s) && p.s[i] != '\\n' {\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i == len(p.s) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif p.s[i] == '\\n' {\n\t\t\tp.line++\n\t\t}\n\t\ti++\n\t}\n\tp.offset += i\n\tp.s = p.s[i:len(p.s)]\n\tif len(p.s) == 0 {\n\t\tp.done = true\n\t}\n}\n\nfunc (p *textParser) advance() {\n\t// Skip whitespace\n\tp.skipWhitespace()\n\tif p.done {\n\t\treturn\n\t}\n\n\t// Start of non-whitespace\n\tp.cur.err = nil\n\tp.cur.offset, p.cur.line = p.offset, p.line\n\tp.cur.unquoted = \"\"\n\tswitch p.s[0] {\n\tcase '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':\n\t\t// Single symbol\n\t\tp.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]\n\tcase '\"', '\\'':\n\t\t// Quoted string\n\t\ti := 1\n\t\tfor i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\\n' {\n\t\t\tif p.s[i] == '\\\\' && i+1 < len(p.s) {\n\t\t\t\t// skip escaped char\n\t\t\t\ti++\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t\tif i >= len(p.s) || p.s[i] != p.s[0] {\n\t\t\tp.errorf(\"unmatched quote\")\n\t\t\treturn\n\t\t}\n\t\tunq, err := unquoteC(p.s[1:i], rune(p.s[0]))\n\t\tif err != nil {\n\t\t\tp.errorf(\"invalid quoted string %s: %v\", p.s[0:i+1], err)\n\t\t\treturn\n\t\t}\n\t\tp.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)]\n\t\tp.cur.unquoted = unq\n\tdefault:\n\t\ti := 0\n\t\tfor i < len(p.s) && isIdentOrNumberChar(p.s[i]) {\n\t\t\ti++\n\t\t}\n\t\tif i == 0 {\n\t\t\tp.errorf(\"unexpected byte %#x\", p.s[0])\n\t\t\treturn\n\t\t}\n\t\tp.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)]\n\t}\n\tp.offset += len(p.cur.value)\n}\n\nvar (\n\terrBadUTF8 = errors.New(\"proto: bad UTF-8\")\n)\n\nfunc unquoteC(s string, quote rune) (string, error) {\n\t// This is based on C++'s tokenizer.cc.\n\t// Despite its name, this is *not* parsing C syntax.\n\t// For instance, \"\\0\" is an invalid quoted string.\n\n\t// Avoid allocation in trivial cases.\n\tsimple := true\n\tfor _, r := range s {\n\t\tif r == '\\\\' || r == quote {\n\t\t\tsimple = false\n\t\t\tbreak\n\t\t}\n\t}\n\tif simple {\n\t\treturn s, nil\n\t}\n\n\tbuf := make([]byte, 0, 3*len(s)/2)\n\tfor len(s) > 0 {\n\t\tr, n := utf8.DecodeRuneInString(s)\n\t\tif r == utf8.RuneError && n == 1 {\n\t\t\treturn \"\", errBadUTF8\n\t\t}\n\t\ts = s[n:]\n\t\tif r != '\\\\' {\n\t\t\tif r < utf8.RuneSelf {\n\t\t\t\tbuf = append(buf, byte(r))\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, string(r)...)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tch, tail, err := unescape(s)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tbuf = append(buf, ch...)\n\t\ts = tail\n\t}\n\treturn string(buf), nil\n}\n\nfunc unescape(s string) (ch string, tail string, err error) {\n\tr, n := utf8.DecodeRuneInString(s)\n\tif r == utf8.RuneError && n == 1 {\n\t\treturn \"\", \"\", errBadUTF8\n\t}\n\ts = s[n:]\n\tswitch r {\n\tcase 'a':\n\t\treturn \"\\a\", s, nil\n\tcase 'b':\n\t\treturn \"\\b\", s, nil\n\tcase 'f':\n\t\treturn \"\\f\", s, nil\n\tcase 'n':\n\t\treturn \"\\n\", s, nil\n\tcase 'r':\n\t\treturn \"\\r\", s, nil\n\tcase 't':\n\t\treturn \"\\t\", s, nil\n\tcase 'v':\n\t\treturn \"\\v\", s, nil\n\tcase '?':\n\t\treturn \"?\", s, nil // trigraph workaround\n\tcase '\\'', '\"', '\\\\':\n\t\treturn string(r), s, nil\n\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\tif len(s) < 2 {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c requires 2 following digits`, r)\n\t\t}\n\t\tss := string(r) + s[:2]\n\t\ts = s[2:]\n\t\ti, err := strconv.ParseUint(ss, 8, 8)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%s contains non-octal digits`, ss)\n\t\t}\n\t\treturn string([]byte{byte(i)}), s, nil\n\tcase 'x', 'X', 'u', 'U':\n\t\tvar n int\n\t\tswitch r {\n\t\tcase 'x', 'X':\n\t\t\tn = 2\n\t\tcase 'u':\n\t\t\tn = 4\n\t\tcase 'U':\n\t\t\tn = 8\n\t\t}\n\t\tif len(s) < n {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c requires %d following digits`, r, n)\n\t\t}\n\t\tss := s[:n]\n\t\ts = s[n:]\n\t\ti, err := strconv.ParseUint(ss, 16, 64)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c%s contains non-hexadecimal digits`, r, ss)\n\t\t}\n\t\tif r == 'x' || r == 'X' {\n\t\t\treturn string([]byte{byte(i)}), s, nil\n\t\t}\n\t\tif i > utf8.MaxRune {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c%s is not a valid Unicode code point`, r, ss)\n\t\t}\n\t\treturn string(rune(i)), s, nil\n\t}\n\treturn \"\", \"\", fmt.Errorf(`unknown escape \\%c`, r)\n}\n\n// Back off the parser by one token. Can only be done between calls to next().\n// It makes the next advance() a no-op.\nfunc (p *textParser) back() { p.backed = true }\n\n// Advances the parser and returns the new current token.\nfunc (p *textParser) next() *token {\n\tif p.backed || p.done {\n\t\tp.backed = false\n\t\treturn &p.cur\n\t}\n\tp.advance()\n\tif p.done {\n\t\tp.cur.value = \"\"\n\t} else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) {\n\t\t// Look for multiple quoted strings separated by whitespace,\n\t\t// and concatenate them.\n\t\tcat := p.cur\n\t\tfor {\n\t\t\tp.skipWhitespace()\n\t\t\tif p.done || !isQuote(p.s[0]) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.advance()\n\t\t\tif p.cur.err != nil {\n\t\t\t\treturn &p.cur\n\t\t\t}\n\t\t\tcat.value += \" \" + p.cur.value\n\t\t\tcat.unquoted += p.cur.unquoted\n\t\t}\n\t\tp.done = false // parser may have seen EOF, but we want to return cat\n\t\tp.cur = cat\n\t}\n\treturn &p.cur\n}\n\nfunc (p *textParser) consumeToken(s string) error {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value != s {\n\t\tp.back()\n\t\treturn p.errorf(\"expected %q, found %q\", s, tok.value)\n\t}\n\treturn nil\n}\n\n// Return a RequiredNotSetError indicating which required field was not set.\nfunc (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError {\n\tst := sv.Type()\n\tsprops := GetProperties(st)\n\tfor i := 0; i < st.NumField(); i++ {\n\t\tif !isNil(sv.Field(i)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tprops := sprops.Prop[i]\n\t\tif props.Required {\n\t\t\treturn &RequiredNotSetError{fmt.Sprintf(\"%v.%v\", st, props.OrigName)}\n\t\t}\n\t}\n\treturn &RequiredNotSetError{fmt.Sprintf(\"%v.<unknown field name>\", st)} // should not happen\n}\n\n// Returns the index in the struct for the named field, as well as the parsed tag properties.\nfunc structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) {\n\ti, ok := sprops.decoderOrigNames[name]\n\tif ok {\n\t\treturn i, sprops.Prop[i], true\n\t}\n\treturn -1, nil, false\n}\n\n// Consume a ':' from the input stream (if the next token is a colon),\n// returning an error if a colon is needed but not present.\nfunc (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value != \":\" {\n\t\t// Colon is optional when the field is a group or message.\n\t\tneedColon := true\n\t\tswitch props.Wire {\n\t\tcase \"group\":\n\t\t\tneedColon = false\n\t\tcase \"bytes\":\n\t\t\t// A \"bytes\" field is either a message, a string, or a repeated field;\n\t\t\t// those three become *T, *string and []T respectively, so we can check for\n\t\t\t// this field being a pointer to a non-string.\n\t\t\tif typ.Kind() == reflect.Ptr {\n\t\t\t\t// *T or *string\n\t\t\t\tif typ.Elem().Kind() == reflect.String {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if typ.Kind() == reflect.Slice {\n\t\t\t\t// []T or []*T\n\t\t\t\tif typ.Elem().Kind() != reflect.Ptr {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if typ.Kind() == reflect.String {\n\t\t\t\t// The proto3 exception is for a string field,\n\t\t\t\t// which requires a colon.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tneedColon = false\n\t\t}\n\t\tif needColon {\n\t\t\treturn p.errorf(\"expected ':', found %q\", tok.value)\n\t\t}\n\t\tp.back()\n\t}\n\treturn nil\n}\n\nfunc (p *textParser) readStruct(sv reflect.Value, terminator string) error {\n\tst := sv.Type()\n\tsprops := GetProperties(st)\n\treqCount := sprops.reqCount\n\tvar reqFieldErr error\n\tfieldSet := make(map[string]bool)\n\t// A struct is a sequence of \"name: value\", terminated by one of\n\t// '>' or '}', or the end of the input.  A name may also be\n\t// \"[extension]\" or \"[type/url]\".\n\t//\n\t// The whole struct can also be an expanded Any message, like:\n\t// [type/url] < ... struct contents ... >\n\tfor {\n\t\ttok := p.next()\n\t\tif tok.err != nil {\n\t\t\treturn tok.err\n\t\t}\n\t\tif tok.value == terminator {\n\t\t\tbreak\n\t\t}\n\t\tif tok.value == \"[\" {\n\t\t\t// Looks like an extension or an Any.\n\t\t\t//\n\t\t\t// TODO: Check whether we need to handle\n\t\t\t// namespace rooted names (e.g. \".something.Foo\").\n\t\t\textName, err := p.consumeExtName()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif s := strings.LastIndex(extName, \"/\"); s >= 0 {\n\t\t\t\t// If it contains a slash, it's an Any type URL.\n\t\t\t\tmessageName := extName[s+1:]\n\t\t\t\tmt := MessageType(messageName)\n\t\t\t\tif mt == nil {\n\t\t\t\t\treturn p.errorf(\"unrecognized message %q in google.protobuf.Any\", messageName)\n\t\t\t\t}\n\t\t\t\ttok = p.next()\n\t\t\t\tif tok.err != nil {\n\t\t\t\t\treturn tok.err\n\t\t\t\t}\n\t\t\t\t// consume an optional colon\n\t\t\t\tif tok.value == \":\" {\n\t\t\t\t\ttok = p.next()\n\t\t\t\t\tif tok.err != nil {\n\t\t\t\t\t\treturn tok.err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar terminator string\n\t\t\t\tswitch tok.value {\n\t\t\t\tcase \"<\":\n\t\t\t\t\tterminator = \">\"\n\t\t\t\tcase \"{\":\n\t\t\t\t\tterminator = \"}\"\n\t\t\t\tdefault:\n\t\t\t\t\treturn p.errorf(\"expected '{' or '<', found %q\", tok.value)\n\t\t\t\t}\n\t\t\t\tv := reflect.New(mt.Elem())\n\t\t\t\tif pe := p.readStruct(v.Elem(), terminator); pe != nil {\n\t\t\t\t\treturn pe\n\t\t\t\t}\n\t\t\t\tb, err := Marshal(v.Interface().(Message))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn p.errorf(\"failed to marshal message of type %q: %v\", messageName, err)\n\t\t\t\t}\n\t\t\t\tif fieldSet[\"type_url\"] {\n\t\t\t\t\treturn p.errorf(anyRepeatedlyUnpacked, \"type_url\")\n\t\t\t\t}\n\t\t\t\tif fieldSet[\"value\"] {\n\t\t\t\t\treturn p.errorf(anyRepeatedlyUnpacked, \"value\")\n\t\t\t\t}\n\t\t\t\tsv.FieldByName(\"TypeUrl\").SetString(extName)\n\t\t\t\tsv.FieldByName(\"Value\").SetBytes(b)\n\t\t\t\tfieldSet[\"type_url\"] = true\n\t\t\t\tfieldSet[\"value\"] = true\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar desc *ExtensionDesc\n\t\t\t// This could be faster, but it's functional.\n\t\t\t// TODO: Do something smarter than a linear scan.\n\t\t\tfor _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {\n\t\t\t\tif d.Name == extName {\n\t\t\t\t\tdesc = d\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif desc == nil {\n\t\t\t\treturn p.errorf(\"unrecognized extension %q\", extName)\n\t\t\t}\n\n\t\t\tprops := &Properties{}\n\t\t\tprops.Parse(desc.Tag)\n\n\t\t\ttyp := reflect.TypeOf(desc.ExtensionType)\n\t\t\tif err := p.checkForColon(props, typ); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\trep := desc.repeated()\n\n\t\t\t// Read the extension structure, and set it in\n\t\t\t// the value we're constructing.\n\t\t\tvar ext reflect.Value\n\t\t\tif !rep {\n\t\t\t\text = reflect.New(typ).Elem()\n\t\t\t} else {\n\t\t\t\text = reflect.New(typ.Elem()).Elem()\n\t\t\t}\n\t\t\tif err := p.readAny(ext, props); err != nil {\n\t\t\t\tif _, ok := err.(*RequiredNotSetError); !ok {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\treqFieldErr = err\n\t\t\t}\n\t\t\tep := sv.Addr().Interface().(Message)\n\t\t\tif !rep {\n\t\t\t\tSetExtension(ep, desc, ext.Interface())\n\t\t\t} else {\n\t\t\t\told, err := GetExtension(ep, desc)\n\t\t\t\tvar sl reflect.Value\n\t\t\t\tif err == nil {\n\t\t\t\t\tsl = reflect.ValueOf(old) // existing slice\n\t\t\t\t} else {\n\t\t\t\t\tsl = reflect.MakeSlice(typ, 0, 1)\n\t\t\t\t}\n\t\t\t\tsl = reflect.Append(sl, ext)\n\t\t\t\tSetExtension(ep, desc, sl.Interface())\n\t\t\t}\n\t\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// This is a normal, non-extension field.\n\t\tname := tok.value\n\t\tvar dst reflect.Value\n\t\tfi, props, ok := structFieldByName(sprops, name)\n\t\tif ok {\n\t\t\tdst = sv.Field(fi)\n\t\t} else if oop, ok := sprops.OneofTypes[name]; ok {\n\t\t\t// It is a oneof.\n\t\t\tprops = oop.Prop\n\t\t\tnv := reflect.New(oop.Type.Elem())\n\t\t\tdst = nv.Elem().Field(0)\n\t\t\tfield := sv.Field(oop.Field)\n\t\t\tif !field.IsNil() {\n\t\t\t\treturn p.errorf(\"field '%s' would overwrite already parsed oneof '%s'\", name, sv.Type().Field(oop.Field).Name)\n\t\t\t}\n\t\t\tfield.Set(nv)\n\t\t}\n\t\tif !dst.IsValid() {\n\t\t\treturn p.errorf(\"unknown field name %q in %v\", name, st)\n\t\t}\n\n\t\tif dst.Kind() == reflect.Map {\n\t\t\t// Consume any colon.\n\t\t\tif err := p.checkForColon(props, dst.Type()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Construct the map if it doesn't already exist.\n\t\t\tif dst.IsNil() {\n\t\t\t\tdst.Set(reflect.MakeMap(dst.Type()))\n\t\t\t}\n\t\t\tkey := reflect.New(dst.Type().Key()).Elem()\n\t\t\tval := reflect.New(dst.Type().Elem()).Elem()\n\n\t\t\t// The map entry should be this sequence of tokens:\n\t\t\t//\t< key : KEY value : VALUE >\n\t\t\t// However, implementations may omit key or value, and technically\n\t\t\t// we should support them in any order.  See b/28924776 for a time\n\t\t\t// this went wrong.\n\n\t\t\ttok := p.next()\n\t\t\tvar terminator string\n\t\t\tswitch tok.value {\n\t\t\tcase \"<\":\n\t\t\t\tterminator = \">\"\n\t\t\tcase \"{\":\n\t\t\t\tterminator = \"}\"\n\t\t\tdefault:\n\t\t\t\treturn p.errorf(\"expected '{' or '<', found %q\", tok.value)\n\t\t\t}\n\t\t\tfor {\n\t\t\t\ttok := p.next()\n\t\t\t\tif tok.err != nil {\n\t\t\t\t\treturn tok.err\n\t\t\t\t}\n\t\t\t\tif tok.value == terminator {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tswitch tok.value {\n\t\t\t\tcase \"key\":\n\t\t\t\t\tif err := p.consumeToken(\":\"); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.readAny(key, props.MapKeyProp); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\tcase \"value\":\n\t\t\t\t\tif err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.readAny(val, props.MapValProp); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tp.back()\n\t\t\t\t\treturn p.errorf(`expected \"key\", \"value\", or %q, found %q`, terminator, tok.value)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdst.SetMapIndex(key, val)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check that it's not already set if it's not a repeated field.\n\t\tif !props.Repeated && fieldSet[name] {\n\t\t\treturn p.errorf(\"non-repeated field %q was repeated\", name)\n\t\t}\n\n\t\tif err := p.checkForColon(props, dst.Type()); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Parse into the field.\n\t\tfieldSet[name] = true\n\t\tif err := p.readAny(dst, props); err != nil {\n\t\t\tif _, ok := err.(*RequiredNotSetError); !ok {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treqFieldErr = err\n\t\t}\n\t\tif props.Required {\n\t\t\treqCount--\n\t\t}\n\n\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\n\tif reqCount > 0 {\n\t\treturn p.missingRequiredFieldError(sv)\n\t}\n\treturn reqFieldErr\n}\n\n// consumeExtName consumes extension name or expanded Any type URL and the\n// following ']'. It returns the name or URL consumed.\nfunc (p *textParser) consumeExtName() (string, error) {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn \"\", tok.err\n\t}\n\n\t// If extension name or type url is quoted, it's a single token.\n\tif len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {\n\t\tname, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0]))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn name, p.consumeToken(\"]\")\n\t}\n\n\t// Consume everything up to \"]\"\n\tvar parts []string\n\tfor tok.value != \"]\" {\n\t\tparts = append(parts, tok.value)\n\t\ttok = p.next()\n\t\tif tok.err != nil {\n\t\t\treturn \"\", p.errorf(\"unrecognized type_url or extension name: %s\", tok.err)\n\t\t}\n\t\tif p.done && tok.value != \"]\" {\n\t\t\treturn \"\", p.errorf(\"unclosed type_url or extension name\")\n\t\t}\n\t}\n\treturn strings.Join(parts, \"\"), nil\n}\n\n// consumeOptionalSeparator consumes an optional semicolon or comma.\n// It is used in readStruct to provide backward compatibility.\nfunc (p *textParser) consumeOptionalSeparator() error {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value != \";\" && tok.value != \",\" {\n\t\tp.back()\n\t}\n\treturn nil\n}\n\nfunc (p *textParser) readAny(v reflect.Value, props *Properties) error {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value == \"\" {\n\t\treturn p.errorf(\"unexpected EOF\")\n\t}\n\tif len(props.CustomType) > 0 {\n\t\tif props.Repeated {\n\t\t\tt := reflect.TypeOf(v.Interface())\n\t\t\tif t.Kind() == reflect.Slice {\n\t\t\t\ttc := reflect.TypeOf(new(Marshaler))\n\t\t\t\tok := t.Elem().Implements(tc.Elem())\n\t\t\t\tif ok {\n\t\t\t\t\tfv := v\n\t\t\t\t\tflen := fv.Len()\n\t\t\t\t\tif flen == fv.Cap() {\n\t\t\t\t\t\tnav := reflect.MakeSlice(v.Type(), flen, 2*flen+1)\n\t\t\t\t\t\treflect.Copy(nav, fv)\n\t\t\t\t\t\tfv.Set(nav)\n\t\t\t\t\t}\n\t\t\t\t\tfv.SetLen(flen + 1)\n\n\t\t\t\t\t// Read one.\n\t\t\t\t\tp.back()\n\t\t\t\t\treturn p.readAny(fv.Index(flen), props)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {\n\t\t\tcustom := reflect.New(props.ctype.Elem()).Interface().(Unmarshaler)\n\t\t\terr := custom.Unmarshal([]byte(tok.unquoted))\n\t\t\tif err != nil {\n\t\t\t\treturn p.errorf(\"%v %v: %v\", err, v.Type(), tok.value)\n\t\t\t}\n\t\t\tv.Set(reflect.ValueOf(custom))\n\t\t} else {\n\t\t\tcustom := reflect.New(reflect.TypeOf(v.Interface())).Interface().(Unmarshaler)\n\t\t\terr := custom.Unmarshal([]byte(tok.unquoted))\n\t\t\tif err != nil {\n\t\t\t\treturn p.errorf(\"%v %v: %v\", err, v.Type(), tok.value)\n\t\t\t}\n\t\t\tv.Set(reflect.Indirect(reflect.ValueOf(custom)))\n\t\t}\n\t\treturn nil\n\t}\n\tif props.StdTime {\n\t\tfv := v\n\t\tp.back()\n\t\tprops.StdTime = false\n\t\ttproto := &timestamp{}\n\t\terr := p.readAny(reflect.ValueOf(tproto).Elem(), props)\n\t\tprops.StdTime = true\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttim, err := timestampFromProto(tproto)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif props.Repeated {\n\t\t\tt := reflect.TypeOf(v.Interface())\n\t\t\tif t.Kind() == reflect.Slice {\n\t\t\t\tif t.Elem().Kind() == reflect.Ptr {\n\t\t\t\t\tts := fv.Interface().([]*time.Time)\n\t\t\t\t\tts = append(ts, &tim)\n\t\t\t\t\tfv.Set(reflect.ValueOf(ts))\n\t\t\t\t\treturn nil\n\t\t\t\t} else {\n\t\t\t\t\tts := fv.Interface().([]time.Time)\n\t\t\t\t\tts = append(ts, tim)\n\t\t\t\t\tfv.Set(reflect.ValueOf(ts))\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {\n\t\t\tv.Set(reflect.ValueOf(&tim))\n\t\t} else {\n\t\t\tv.Set(reflect.Indirect(reflect.ValueOf(&tim)))\n\t\t}\n\t\treturn nil\n\t}\n\tif props.StdDuration {\n\t\tfv := v\n\t\tp.back()\n\t\tprops.StdDuration = false\n\t\tdproto := &duration{}\n\t\terr := p.readAny(reflect.ValueOf(dproto).Elem(), props)\n\t\tprops.StdDuration = true\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdur, err := durationFromProto(dproto)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif props.Repeated {\n\t\t\tt := reflect.TypeOf(v.Interface())\n\t\t\tif t.Kind() == reflect.Slice {\n\t\t\t\tif t.Elem().Kind() == reflect.Ptr {\n\t\t\t\t\tds := fv.Interface().([]*time.Duration)\n\t\t\t\t\tds = append(ds, &dur)\n\t\t\t\t\tfv.Set(reflect.ValueOf(ds))\n\t\t\t\t\treturn nil\n\t\t\t\t} else {\n\t\t\t\t\tds := fv.Interface().([]time.Duration)\n\t\t\t\t\tds = append(ds, dur)\n\t\t\t\t\tfv.Set(reflect.ValueOf(ds))\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif reflect.TypeOf(v.Interface()).Kind() == reflect.Ptr {\n\t\t\tv.Set(reflect.ValueOf(&dur))\n\t\t} else {\n\t\t\tv.Set(reflect.Indirect(reflect.ValueOf(&dur)))\n\t\t}\n\t\treturn nil\n\t}\n\tswitch fv := v; fv.Kind() {\n\tcase reflect.Slice:\n\t\tat := v.Type()\n\t\tif at.Elem().Kind() == reflect.Uint8 {\n\t\t\t// Special case for []byte\n\t\t\tif tok.value[0] != '\"' && tok.value[0] != '\\'' {\n\t\t\t\t// Deliberately written out here, as the error after\n\t\t\t\t// this switch statement would write \"invalid []byte: ...\",\n\t\t\t\t// which is not as user-friendly.\n\t\t\t\treturn p.errorf(\"invalid string: %v\", tok.value)\n\t\t\t}\n\t\t\tbytes := []byte(tok.unquoted)\n\t\t\tfv.Set(reflect.ValueOf(bytes))\n\t\t\treturn nil\n\t\t}\n\t\t// Repeated field.\n\t\tif tok.value == \"[\" {\n\t\t\t// Repeated field with list notation, like [1,2,3].\n\t\t\tfor {\n\t\t\t\tfv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))\n\t\t\t\terr := p.readAny(fv.Index(fv.Len()-1), props)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tntok := p.next()\n\t\t\t\tif ntok.err != nil {\n\t\t\t\t\treturn ntok.err\n\t\t\t\t}\n\t\t\t\tif ntok.value == \"]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif ntok.value != \",\" {\n\t\t\t\t\treturn p.errorf(\"Expected ']' or ',' found %q\", ntok.value)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\t// One value of the repeated field.\n\t\tp.back()\n\t\tfv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))\n\t\treturn p.readAny(fv.Index(fv.Len()-1), props)\n\tcase reflect.Bool:\n\t\t// true/1/t/True or false/f/0/False.\n\t\tswitch tok.value {\n\t\tcase \"true\", \"1\", \"t\", \"True\":\n\t\t\tfv.SetBool(true)\n\t\t\treturn nil\n\t\tcase \"false\", \"0\", \"f\", \"False\":\n\t\t\tfv.SetBool(false)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Float32, reflect.Float64:\n\t\tv := tok.value\n\t\t// Ignore 'f' for compatibility with output generated by C++, but don't\n\t\t// remove 'f' when the value is \"-inf\" or \"inf\".\n\t\tif strings.HasSuffix(v, \"f\") && tok.value != \"-inf\" && tok.value != \"inf\" {\n\t\t\tv = v[:len(v)-1]\n\t\t}\n\t\tif f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil {\n\t\t\tfv.SetFloat(f)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Int8:\n\t\tif x, err := strconv.ParseInt(tok.value, 0, 8); err == nil {\n\t\t\tfv.SetInt(x)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Int16:\n\t\tif x, err := strconv.ParseInt(tok.value, 0, 16); err == nil {\n\t\t\tfv.SetInt(x)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Int32:\n\t\tif x, err := strconv.ParseInt(tok.value, 0, 32); err == nil {\n\t\t\tfv.SetInt(x)\n\t\t\treturn nil\n\t\t}\n\n\t\tif len(props.Enum) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tm, ok := enumValueMaps[props.Enum]\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tx, ok := m[tok.value]\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tfv.SetInt(int64(x))\n\t\treturn nil\n\tcase reflect.Int64:\n\t\tif x, err := strconv.ParseInt(tok.value, 0, 64); err == nil {\n\t\t\tfv.SetInt(x)\n\t\t\treturn nil\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// A basic field (indirected through pointer), or a repeated message/group\n\t\tp.back()\n\t\tfv.Set(reflect.New(fv.Type().Elem()))\n\t\treturn p.readAny(fv.Elem(), props)\n\tcase reflect.String:\n\t\tif tok.value[0] == '\"' || tok.value[0] == '\\'' {\n\t\t\tfv.SetString(tok.unquoted)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Struct:\n\t\tvar terminator string\n\t\tswitch tok.value {\n\t\tcase \"{\":\n\t\t\tterminator = \"}\"\n\t\tcase \"<\":\n\t\t\tterminator = \">\"\n\t\tdefault:\n\t\t\treturn p.errorf(\"expected '{' or '<', found %q\", tok.value)\n\t\t}\n\t\t// TODO: Handle nested messages which implement encoding.TextUnmarshaler.\n\t\treturn p.readStruct(fv, terminator)\n\tcase reflect.Uint8:\n\t\tif x, err := strconv.ParseUint(tok.value, 0, 8); err == nil {\n\t\t\tfv.SetUint(x)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Uint16:\n\t\tif x, err := strconv.ParseUint(tok.value, 0, 16); err == nil {\n\t\t\tfv.SetUint(x)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Uint32:\n\t\tif x, err := strconv.ParseUint(tok.value, 0, 32); err == nil {\n\t\t\tfv.SetUint(uint64(x))\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Uint64:\n\t\tif x, err := strconv.ParseUint(tok.value, 0, 64); err == nil {\n\t\t\tfv.SetUint(x)\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn p.errorf(\"invalid %v: %v\", v.Type(), tok.value)\n}\n\n// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb\n// before starting to unmarshal, so any existing data in pb is always removed.\n// If a required field is not set and no other error occurs,\n// UnmarshalText returns *RequiredNotSetError.\nfunc UnmarshalText(s string, pb Message) error {\n\tif um, ok := pb.(encoding.TextUnmarshaler); ok {\n\t\treturn um.UnmarshalText([]byte(s))\n\t}\n\tpb.Reset()\n\tv := reflect.ValueOf(pb)\n\treturn newTextParser(s).readStruct(v.Elem(), \"\")\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/timestamp.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n// This file implements operations on google.protobuf.Timestamp.\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n)\n\nconst (\n\t// Seconds field of the earliest valid Timestamp.\n\t// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().\n\tminValidSeconds = -62135596800\n\t// Seconds field just after the latest valid Timestamp.\n\t// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().\n\tmaxValidSeconds = 253402300800\n)\n\n// validateTimestamp determines whether a Timestamp is valid.\n// A valid timestamp represents a time in the range\n// [0001-01-01, 10000-01-01) and has a Nanos field\n// in the range [0, 1e9).\n//\n// If the Timestamp is valid, validateTimestamp returns nil.\n// Otherwise, it returns an error that describes\n// the problem.\n//\n// Every valid Timestamp can be represented by a time.Time, but the converse is not true.\nfunc validateTimestamp(ts *timestamp) error {\n\tif ts == nil {\n\t\treturn errors.New(\"timestamp: nil Timestamp\")\n\t}\n\tif ts.Seconds < minValidSeconds {\n\t\treturn fmt.Errorf(\"timestamp: %#v before 0001-01-01\", ts)\n\t}\n\tif ts.Seconds >= maxValidSeconds {\n\t\treturn fmt.Errorf(\"timestamp: %#v after 10000-01-01\", ts)\n\t}\n\tif ts.Nanos < 0 || ts.Nanos >= 1e9 {\n\t\treturn fmt.Errorf(\"timestamp: %#v: nanos not in range [0, 1e9)\", ts)\n\t}\n\treturn nil\n}\n\n// TimestampFromProto converts a google.protobuf.Timestamp proto to a time.Time.\n// It returns an error if the argument is invalid.\n//\n// Unlike most Go functions, if Timestamp returns an error, the first return value\n// is not the zero time.Time. Instead, it is the value obtained from the\n// time.Unix function when passed the contents of the Timestamp, in the UTC\n// locale. This may or may not be a meaningful time; many invalid Timestamps\n// do map to valid time.Times.\n//\n// A nil Timestamp returns an error. The first return value in that case is\n// undefined.\nfunc timestampFromProto(ts *timestamp) (time.Time, error) {\n\t// Don't return the zero value on error, because corresponds to a valid\n\t// timestamp. Instead return whatever time.Unix gives us.\n\tvar t time.Time\n\tif ts == nil {\n\t\tt = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp\n\t} else {\n\t\tt = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC()\n\t}\n\treturn t, validateTimestamp(ts)\n}\n\n// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.\n// It returns an error if the resulting Timestamp is invalid.\nfunc timestampProto(t time.Time) (*timestamp, error) {\n\tseconds := t.Unix()\n\tnanos := int32(t.Sub(time.Unix(seconds, 0)))\n\tts := &timestamp{\n\t\tSeconds: seconds,\n\t\tNanos:   nanos,\n\t}\n\tif err := validateTimestamp(ts); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ts, nil\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2016, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"time\"\n)\n\nvar timeType = reflect.TypeOf((*time.Time)(nil)).Elem()\n\ntype timestamp struct {\n\tSeconds int64 `protobuf:\"varint,1,opt,name=seconds,proto3\" json:\"seconds,omitempty\"`\n\tNanos   int32 `protobuf:\"varint,2,opt,name=nanos,proto3\" json:\"nanos,omitempty\"`\n}\n\nfunc (m *timestamp) Reset()       { *m = timestamp{} }\nfunc (*timestamp) ProtoMessage()  {}\nfunc (*timestamp) String() string { return \"timestamp<string>\" }\n\nfunc init() {\n\tRegisterType((*timestamp)(nil), \"gogo.protobuf.proto.timestamp\")\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/wrappers.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"io\"\n\t\"reflect\"\n)\n\nfunc makeStdDoubleValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*float64)\n\t\t\tv := &float64Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*float64)\n\t\t\tv := &float64Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdDoubleValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)\n\t\t\tv := &float64Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float64)\n\t\t\tv := &float64Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdDoubleValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(float64)\n\t\t\t\tv := &float64Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(float64)\n\t\t\t\tv := &float64Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdDoubleValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*float64)\n\t\t\t\tv := &float64Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*float64)\n\t\t\t\tv := &float64Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdDoubleValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdDoubleValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdDoubleValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdDoubleValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdFloatValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*float32)\n\t\t\tv := &float32Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*float32)\n\t\t\tv := &float32Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdFloatValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)\n\t\t\tv := &float32Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*float32)\n\t\t\tv := &float32Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdFloatValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(float32)\n\t\t\t\tv := &float32Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(float32)\n\t\t\t\tv := &float32Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdFloatValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*float32)\n\t\t\t\tv := &float32Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*float32)\n\t\t\t\tv := &float32Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdFloatValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdFloatValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdFloatValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdFloatValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &float32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*int64)\n\t\t\tv := &int64Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*int64)\n\t\t\tv := &int64Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)\n\t\t\tv := &int64Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int64)\n\t\t\tv := &int64Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(int64)\n\t\t\t\tv := &int64Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(int64)\n\t\t\t\tv := &int64Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*int64)\n\t\t\t\tv := &int64Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*int64)\n\t\t\t\tv := &int64Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt64ValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*uint64)\n\t\t\tv := &uint64Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*uint64)\n\t\t\tv := &uint64Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt64ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)\n\t\t\tv := &uint64Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint64)\n\t\t\tv := &uint64Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt64ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(uint64)\n\t\t\t\tv := &uint64Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(uint64)\n\t\t\t\tv := &uint64Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt64ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*uint64)\n\t\t\t\tv := &uint64Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*uint64)\n\t\t\t\tv := &uint64Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt64ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt64ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt64ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt64ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint64Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*int32)\n\t\t\tv := &int32Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*int32)\n\t\t\tv := &int32Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)\n\t\t\tv := &int32Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*int32)\n\t\t\tv := &int32Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(int32)\n\t\t\t\tv := &int32Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(int32)\n\t\t\t\tv := &int32Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*int32)\n\t\t\t\tv := &int32Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*int32)\n\t\t\t\tv := &int32Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &int32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt32ValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*uint32)\n\t\t\tv := &uint32Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*uint32)\n\t\t\tv := &uint32Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt32ValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)\n\t\t\tv := &uint32Value{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*uint32)\n\t\t\tv := &uint32Value{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt32ValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(uint32)\n\t\t\t\tv := &uint32Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(uint32)\n\t\t\t\tv := &uint32Value{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt32ValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*uint32)\n\t\t\t\tv := &uint32Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*uint32)\n\t\t\t\tv := &uint32Value{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdUInt32ValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt32ValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt32ValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdUInt32ValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &uint32Value{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBoolValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*bool)\n\t\t\tv := &boolValue{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*bool)\n\t\t\tv := &boolValue{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBoolValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)\n\t\t\tv := &boolValue{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*bool)\n\t\t\tv := &boolValue{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBoolValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(bool)\n\t\t\t\tv := &boolValue{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(bool)\n\t\t\t\tv := &boolValue{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBoolValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*bool)\n\t\t\t\tv := &boolValue{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*bool)\n\t\t\t\tv := &boolValue{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBoolValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &boolValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBoolValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &boolValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBoolValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &boolValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBoolValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &boolValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdStringValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*string)\n\t\t\tv := &stringValue{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*string)\n\t\t\tv := &stringValue{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdStringValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)\n\t\t\tv := &stringValue{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*string)\n\t\t\tv := &stringValue{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdStringValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(string)\n\t\t\t\tv := &stringValue{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(string)\n\t\t\t\tv := &stringValue{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdStringValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*string)\n\t\t\t\tv := &stringValue{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*string)\n\t\t\t\tv := &stringValue{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdStringValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &stringValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdStringValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &stringValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdStringValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &stringValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdStringValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &stringValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBytesValueMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*[]byte)\n\t\t\tv := &bytesValue{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tt := ptr.asPointerTo(u.typ).Interface().(*[]byte)\n\t\t\tv := &bytesValue{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBytesValuePtrMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)\n\t\t\tv := &bytesValue{*t}\n\t\t\tsiz := Size(v)\n\t\t\treturn tagsize + SizeVarint(uint64(siz)) + siz\n\t\t}, func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tif ptr.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tt := ptr.asPointerTo(reflect.PtrTo(u.typ)).Elem().Interface().(*[]byte)\n\t\t\tv := &bytesValue{*t}\n\t\t\tbuf, err := Marshal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tb = appendVarint(b, uint64(len(buf)))\n\t\t\tb = append(b, buf...)\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBytesValueSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().([]byte)\n\t\t\t\tv := &bytesValue{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(u.typ)\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().([]byte)\n\t\t\t\tv := &bytesValue{t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBytesValuePtrSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tn := 0\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*[]byte)\n\t\t\t\tv := &bytesValue{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getSlice(reflect.PtrTo(u.typ))\n\t\t\tfor i := 0; i < s.Len(); i++ {\n\t\t\t\telem := s.Index(i)\n\t\t\t\tt := elem.Interface().(*[]byte)\n\t\t\t\tv := &bytesValue{*t}\n\t\t\t\tsiz := Size(v)\n\t\t\t\tbuf, err := Marshal(v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb = append(b, buf...)\n\t\t\t}\n\n\t\t\treturn b, nil\n\t\t}\n}\n\nfunc makeStdBytesValueUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &bytesValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(sub.typ).Elem()\n\t\ts.Set(reflect.ValueOf(m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBytesValuePtrUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &bytesValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts := f.asPointerTo(reflect.PtrTo(sub.typ)).Elem()\n\t\ts.Set(reflect.ValueOf(&m.Value))\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBytesValuePtrSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &bytesValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(reflect.PtrTo(sub.typ))\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(&m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n\nfunc makeStdBytesValueSliceUnmarshaler(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn nil, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tm := &bytesValue{}\n\t\tif err := Unmarshal(b[:x], m); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tslice := f.getSlice(sub.typ)\n\t\tnewSlice := reflect.Append(slice, reflect.ValueOf(m.Value))\n\t\tslice.Set(newSlice)\n\t\treturn b[x:], nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go",
    "content": "// Protocol Buffers for Go with Gadgets\n//\n// Copyright (c) 2018, The GoGo Authors. All rights reserved.\n// http://github.com/gogo/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\ntype float64Value struct {\n\tValue float64 `protobuf:\"fixed64,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *float64Value) Reset()       { *m = float64Value{} }\nfunc (*float64Value) ProtoMessage()  {}\nfunc (*float64Value) String() string { return \"float64<string>\" }\n\ntype float32Value struct {\n\tValue float32 `protobuf:\"fixed32,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *float32Value) Reset()       { *m = float32Value{} }\nfunc (*float32Value) ProtoMessage()  {}\nfunc (*float32Value) String() string { return \"float32<string>\" }\n\ntype int64Value struct {\n\tValue int64 `protobuf:\"varint,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *int64Value) Reset()       { *m = int64Value{} }\nfunc (*int64Value) ProtoMessage()  {}\nfunc (*int64Value) String() string { return \"int64<string>\" }\n\ntype uint64Value struct {\n\tValue uint64 `protobuf:\"varint,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *uint64Value) Reset()       { *m = uint64Value{} }\nfunc (*uint64Value) ProtoMessage()  {}\nfunc (*uint64Value) String() string { return \"uint64<string>\" }\n\ntype int32Value struct {\n\tValue int32 `protobuf:\"varint,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *int32Value) Reset()       { *m = int32Value{} }\nfunc (*int32Value) ProtoMessage()  {}\nfunc (*int32Value) String() string { return \"int32<string>\" }\n\ntype uint32Value struct {\n\tValue uint32 `protobuf:\"varint,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *uint32Value) Reset()       { *m = uint32Value{} }\nfunc (*uint32Value) ProtoMessage()  {}\nfunc (*uint32Value) String() string { return \"uint32<string>\" }\n\ntype boolValue struct {\n\tValue bool `protobuf:\"varint,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *boolValue) Reset()       { *m = boolValue{} }\nfunc (*boolValue) ProtoMessage()  {}\nfunc (*boolValue) String() string { return \"bool<string>\" }\n\ntype stringValue struct {\n\tValue string `protobuf:\"bytes,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *stringValue) Reset()       { *m = stringValue{} }\nfunc (*stringValue) ProtoMessage()  {}\nfunc (*stringValue) String() string { return \"string<string>\" }\n\ntype bytesValue struct {\n\tValue []byte `protobuf:\"bytes,1,opt,name=value,proto3\" json:\"value,omitempty\"`\n}\n\nfunc (m *bytesValue) Reset()       { *m = bytesValue{} }\nfunc (*bytesValue) ProtoMessage()  {}\nfunc (*bytesValue) String() string { return \"[]byte<string>\" }\n\nfunc init() {\n\tRegisterType((*float64Value)(nil), \"gogo.protobuf.proto.DoubleValue\")\n\tRegisterType((*float32Value)(nil), \"gogo.protobuf.proto.FloatValue\")\n\tRegisterType((*int64Value)(nil), \"gogo.protobuf.proto.Int64Value\")\n\tRegisterType((*uint64Value)(nil), \"gogo.protobuf.proto.UInt64Value\")\n\tRegisterType((*int32Value)(nil), \"gogo.protobuf.proto.Int32Value\")\n\tRegisterType((*uint32Value)(nil), \"gogo.protobuf.proto.UInt32Value\")\n\tRegisterType((*boolValue)(nil), \"gogo.protobuf.proto.BoolValue\")\n\tRegisterType((*stringValue)(nil), \"gogo.protobuf.proto.StringValue\")\n\tRegisterType((*bytesValue)(nil), \"gogo.protobuf.proto.BytesValue\")\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/CHANGELOG.md",
    "content": "# Changelog\n\n## [1.6.0](https://github.com/google/uuid/compare/v1.5.0...v1.6.0) (2024-01-16)\n\n\n### Features\n\n* add Max UUID constant ([#149](https://github.com/google/uuid/issues/149)) ([c58770e](https://github.com/google/uuid/commit/c58770eb495f55fe2ced6284f93c5158a62e53e3))\n\n\n### Bug Fixes\n\n* fix typo in version 7 uuid documentation ([#153](https://github.com/google/uuid/issues/153)) ([016b199](https://github.com/google/uuid/commit/016b199544692f745ffc8867b914129ecb47ef06))\n* Monotonicity in UUIDv7 ([#150](https://github.com/google/uuid/issues/150)) ([a2b2b32](https://github.com/google/uuid/commit/a2b2b32373ff0b1a312b7fdf6d38a977099698a6))\n\n## [1.5.0](https://github.com/google/uuid/compare/v1.4.0...v1.5.0) (2023-12-12)\n\n\n### Features\n\n* Validate UUID without creating new UUID ([#141](https://github.com/google/uuid/issues/141)) ([9ee7366](https://github.com/google/uuid/commit/9ee7366e66c9ad96bab89139418a713dc584ae29))\n\n## [1.4.0](https://github.com/google/uuid/compare/v1.3.1...v1.4.0) (2023-10-26)\n\n\n### Features\n\n* UUIDs slice type with Strings() convenience method ([#133](https://github.com/google/uuid/issues/133)) ([cd5fbbd](https://github.com/google/uuid/commit/cd5fbbdd02f3e3467ac18940e07e062be1f864b4))\n\n### Fixes\n\n* Clarify that Parse's job is to parse but not necessarily validate strings. (Documents current behavior)\n\n## [1.3.1](https://github.com/google/uuid/compare/v1.3.0...v1.3.1) (2023-08-18)\n\n\n### Bug Fixes\n\n* Use .EqualFold() to parse urn prefixed UUIDs ([#118](https://github.com/google/uuid/issues/118)) ([574e687](https://github.com/google/uuid/commit/574e6874943741fb99d41764c705173ada5293f0))\n\n## Changelog\n"
  },
  {
    "path": "vendor/github.com/google/uuid/CONTRIBUTING.md",
    "content": "# How to contribute\n\nWe definitely welcome patches and contribution to this project!\n\n### Tips\n\nCommits must be formatted according to the [Conventional Commits Specification](https://www.conventionalcommits.org).\n\nAlways try to include a test case! If it is not possible or not necessary,\nplease explain why in the pull request description.\n\n### Releasing\n\nCommits that would precipitate a SemVer change, as described in the Conventional\nCommits Specification, will trigger [`release-please`](https://github.com/google-github-actions/release-please-action)\nto create a release candidate pull request. Once submitted, `release-please`\nwill create a release.\n\nFor tips on how to work with `release-please`, see its documentation.\n\n### Legal requirements\n\nIn order to protect both you and ourselves, you will need to sign the\n[Contributor License Agreement](https://cla.developers.google.com/clas).\n\nYou may have already signed it for other Google projects.\n"
  },
  {
    "path": "vendor/github.com/google/uuid/CONTRIBUTORS",
    "content": "Paul Borman <borman@google.com>\nbmatsuo\nshawnps\ntheory\njboverfelt\ndsymonds\ncd1\nwallclockbuilder\ndansouza\n"
  },
  {
    "path": "vendor/github.com/google/uuid/LICENSE",
    "content": "Copyright (c) 2009,2014 Google Inc. All 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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/github.com/google/uuid/README.md",
    "content": "# uuid\nThe uuid package generates and inspects UUIDs based on\n[RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122)\nand DCE 1.1: Authentication and Security Services. \n\nThis package is based on the github.com/pborman/uuid package (previously named\ncode.google.com/p/go-uuid).  It differs from these earlier packages in that\na UUID is a 16 byte array rather than a byte slice.  One loss due to this\nchange is the ability to represent an invalid UUID (vs a NIL UUID).\n\n###### Install\n```sh\ngo get github.com/google/uuid\n```\n\n###### Documentation \n[![Go Reference](https://pkg.go.dev/badge/github.com/google/uuid.svg)](https://pkg.go.dev/github.com/google/uuid)\n\nFull `go doc` style documentation for the package can be viewed online without\ninstalling this package by using the GoDoc site here: \nhttp://pkg.go.dev/github.com/google/uuid\n"
  },
  {
    "path": "vendor/github.com/google/uuid/dce.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"os\"\n)\n\n// A Domain represents a Version 2 domain\ntype Domain byte\n\n// Domain constants for DCE Security (Version 2) UUIDs.\nconst (\n\tPerson = Domain(0)\n\tGroup  = Domain(1)\n\tOrg    = Domain(2)\n)\n\n// NewDCESecurity returns a DCE Security (Version 2) UUID.\n//\n// The domain should be one of Person, Group or Org.\n// On a POSIX system the id should be the users UID for the Person\n// domain and the users GID for the Group.  The meaning of id for\n// the domain Org or on non-POSIX systems is site defined.\n//\n// For a given domain/id pair the same token may be returned for up to\n// 7 minutes and 10 seconds.\nfunc NewDCESecurity(domain Domain, id uint32) (UUID, error) {\n\tuuid, err := NewUUID()\n\tif err == nil {\n\t\tuuid[6] = (uuid[6] & 0x0f) | 0x20 // Version 2\n\t\tuuid[9] = byte(domain)\n\t\tbinary.BigEndian.PutUint32(uuid[0:], id)\n\t}\n\treturn uuid, err\n}\n\n// NewDCEPerson returns a DCE Security (Version 2) UUID in the person\n// domain with the id returned by os.Getuid.\n//\n//  NewDCESecurity(Person, uint32(os.Getuid()))\nfunc NewDCEPerson() (UUID, error) {\n\treturn NewDCESecurity(Person, uint32(os.Getuid()))\n}\n\n// NewDCEGroup returns a DCE Security (Version 2) UUID in the group\n// domain with the id returned by os.Getgid.\n//\n//  NewDCESecurity(Group, uint32(os.Getgid()))\nfunc NewDCEGroup() (UUID, error) {\n\treturn NewDCESecurity(Group, uint32(os.Getgid()))\n}\n\n// Domain returns the domain for a Version 2 UUID.  Domains are only defined\n// for Version 2 UUIDs.\nfunc (uuid UUID) Domain() Domain {\n\treturn Domain(uuid[9])\n}\n\n// ID returns the id for a Version 2 UUID. IDs are only defined for Version 2\n// UUIDs.\nfunc (uuid UUID) ID() uint32 {\n\treturn binary.BigEndian.Uint32(uuid[0:4])\n}\n\nfunc (d Domain) String() string {\n\tswitch d {\n\tcase Person:\n\t\treturn \"Person\"\n\tcase Group:\n\t\treturn \"Group\"\n\tcase Org:\n\t\treturn \"Org\"\n\t}\n\treturn fmt.Sprintf(\"Domain%d\", int(d))\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/doc.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package uuid generates and inspects UUIDs.\n//\n// UUIDs are based on RFC 4122 and DCE 1.1: Authentication and Security\n// Services.\n//\n// A UUID is a 16 byte (128 bit) array.  UUIDs may be used as keys to\n// maps or compared directly.\npackage uuid\n"
  },
  {
    "path": "vendor/github.com/google/uuid/hash.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"crypto/md5\"\n\t\"crypto/sha1\"\n\t\"hash\"\n)\n\n// Well known namespace IDs and UUIDs\nvar (\n\tNameSpaceDNS  = Must(Parse(\"6ba7b810-9dad-11d1-80b4-00c04fd430c8\"))\n\tNameSpaceURL  = Must(Parse(\"6ba7b811-9dad-11d1-80b4-00c04fd430c8\"))\n\tNameSpaceOID  = Must(Parse(\"6ba7b812-9dad-11d1-80b4-00c04fd430c8\"))\n\tNameSpaceX500 = Must(Parse(\"6ba7b814-9dad-11d1-80b4-00c04fd430c8\"))\n\tNil           UUID // empty UUID, all zeros\n\n\t// The Max UUID is special form of UUID that is specified to have all 128 bits set to 1.\n\tMax = UUID{\n\t\t0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n\t\t0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n\t}\n)\n\n// NewHash returns a new UUID derived from the hash of space concatenated with\n// data generated by h.  The hash should be at least 16 byte in length.  The\n// first 16 bytes of the hash are used to form the UUID.  The version of the\n// UUID will be the lower 4 bits of version.  NewHash is used to implement\n// NewMD5 and NewSHA1.\nfunc NewHash(h hash.Hash, space UUID, data []byte, version int) UUID {\n\th.Reset()\n\th.Write(space[:]) //nolint:errcheck\n\th.Write(data)     //nolint:errcheck\n\ts := h.Sum(nil)\n\tvar uuid UUID\n\tcopy(uuid[:], s)\n\tuuid[6] = (uuid[6] & 0x0f) | uint8((version&0xf)<<4)\n\tuuid[8] = (uuid[8] & 0x3f) | 0x80 // RFC 4122 variant\n\treturn uuid\n}\n\n// NewMD5 returns a new MD5 (Version 3) UUID based on the\n// supplied name space and data.  It is the same as calling:\n//\n//  NewHash(md5.New(), space, data, 3)\nfunc NewMD5(space UUID, data []byte) UUID {\n\treturn NewHash(md5.New(), space, data, 3)\n}\n\n// NewSHA1 returns a new SHA1 (Version 5) UUID based on the\n// supplied name space and data.  It is the same as calling:\n//\n//  NewHash(sha1.New(), space, data, 5)\nfunc NewSHA1(space UUID, data []byte) UUID {\n\treturn NewHash(sha1.New(), space, data, 5)\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/marshal.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport \"fmt\"\n\n// MarshalText implements encoding.TextMarshaler.\nfunc (uuid UUID) MarshalText() ([]byte, error) {\n\tvar js [36]byte\n\tencodeHex(js[:], uuid)\n\treturn js[:], nil\n}\n\n// UnmarshalText implements encoding.TextUnmarshaler.\nfunc (uuid *UUID) UnmarshalText(data []byte) error {\n\tid, err := ParseBytes(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*uuid = id\n\treturn nil\n}\n\n// MarshalBinary implements encoding.BinaryMarshaler.\nfunc (uuid UUID) MarshalBinary() ([]byte, error) {\n\treturn uuid[:], nil\n}\n\n// UnmarshalBinary implements encoding.BinaryUnmarshaler.\nfunc (uuid *UUID) UnmarshalBinary(data []byte) error {\n\tif len(data) != 16 {\n\t\treturn fmt.Errorf(\"invalid UUID (got %d bytes)\", len(data))\n\t}\n\tcopy(uuid[:], data)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/node.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"sync\"\n)\n\nvar (\n\tnodeMu sync.Mutex\n\tifname string  // name of interface being used\n\tnodeID [6]byte // hardware for version 1 UUIDs\n\tzeroID [6]byte // nodeID with only 0's\n)\n\n// NodeInterface returns the name of the interface from which the NodeID was\n// derived.  The interface \"user\" is returned if the NodeID was set by\n// SetNodeID.\nfunc NodeInterface() string {\n\tdefer nodeMu.Unlock()\n\tnodeMu.Lock()\n\treturn ifname\n}\n\n// SetNodeInterface selects the hardware address to be used for Version 1 UUIDs.\n// If name is \"\" then the first usable interface found will be used or a random\n// Node ID will be generated.  If a named interface cannot be found then false\n// is returned.\n//\n// SetNodeInterface never fails when name is \"\".\nfunc SetNodeInterface(name string) bool {\n\tdefer nodeMu.Unlock()\n\tnodeMu.Lock()\n\treturn setNodeInterface(name)\n}\n\nfunc setNodeInterface(name string) bool {\n\tiname, addr := getHardwareInterface(name) // null implementation for js\n\tif iname != \"\" && addr != nil {\n\t\tifname = iname\n\t\tcopy(nodeID[:], addr)\n\t\treturn true\n\t}\n\n\t// We found no interfaces with a valid hardware address.  If name\n\t// does not specify a specific interface generate a random Node ID\n\t// (section 4.1.6)\n\tif name == \"\" {\n\t\tifname = \"random\"\n\t\trandomBits(nodeID[:])\n\t\treturn true\n\t}\n\treturn false\n}\n\n// NodeID returns a slice of a copy of the current Node ID, setting the Node ID\n// if not already set.\nfunc NodeID() []byte {\n\tdefer nodeMu.Unlock()\n\tnodeMu.Lock()\n\tif nodeID == zeroID {\n\t\tsetNodeInterface(\"\")\n\t}\n\tnid := nodeID\n\treturn nid[:]\n}\n\n// SetNodeID sets the Node ID to be used for Version 1 UUIDs.  The first 6 bytes\n// of id are used.  If id is less than 6 bytes then false is returned and the\n// Node ID is not set.\nfunc SetNodeID(id []byte) bool {\n\tif len(id) < 6 {\n\t\treturn false\n\t}\n\tdefer nodeMu.Unlock()\n\tnodeMu.Lock()\n\tcopy(nodeID[:], id)\n\tifname = \"user\"\n\treturn true\n}\n\n// NodeID returns the 6 byte node id encoded in uuid.  It returns nil if uuid is\n// not valid.  The NodeID is only well defined for version 1 and 2 UUIDs.\nfunc (uuid UUID) NodeID() []byte {\n\tvar node [6]byte\n\tcopy(node[:], uuid[10:])\n\treturn node[:]\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/node_js.go",
    "content": "// Copyright 2017 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build js\n\npackage uuid\n\n// getHardwareInterface returns nil values for the JS version of the code.\n// This removes the \"net\" dependency, because it is not used in the browser.\n// Using the \"net\" library inflates the size of the transpiled JS code by 673k bytes.\nfunc getHardwareInterface(name string) (string, []byte) { return \"\", nil }\n"
  },
  {
    "path": "vendor/github.com/google/uuid/node_net.go",
    "content": "// Copyright 2017 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !js\n\npackage uuid\n\nimport \"net\"\n\nvar interfaces []net.Interface // cached list of interfaces\n\n// getHardwareInterface returns the name and hardware address of interface name.\n// If name is \"\" then the name and hardware address of one of the system's\n// interfaces is returned.  If no interfaces are found (name does not exist or\n// there are no interfaces) then \"\", nil is returned.\n//\n// Only addresses of at least 6 bytes are returned.\nfunc getHardwareInterface(name string) (string, []byte) {\n\tif interfaces == nil {\n\t\tvar err error\n\t\tinterfaces, err = net.Interfaces()\n\t\tif err != nil {\n\t\t\treturn \"\", nil\n\t\t}\n\t}\n\tfor _, ifs := range interfaces {\n\t\tif len(ifs.HardwareAddr) >= 6 && (name == \"\" || name == ifs.Name) {\n\t\t\treturn ifs.Name, ifs.HardwareAddr\n\t\t}\n\t}\n\treturn \"\", nil\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/null.go",
    "content": "// Copyright 2021 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"bytes\"\n\t\"database/sql/driver\"\n\t\"encoding/json\"\n\t\"fmt\"\n)\n\nvar jsonNull = []byte(\"null\")\n\n// NullUUID represents a UUID that may be null.\n// NullUUID implements the SQL driver.Scanner interface so\n// it can be used as a scan destination:\n//\n//  var u uuid.NullUUID\n//  err := db.QueryRow(\"SELECT name FROM foo WHERE id=?\", id).Scan(&u)\n//  ...\n//  if u.Valid {\n//     // use u.UUID\n//  } else {\n//     // NULL value\n//  }\n//\ntype NullUUID struct {\n\tUUID  UUID\n\tValid bool // Valid is true if UUID is not NULL\n}\n\n// Scan implements the SQL driver.Scanner interface.\nfunc (nu *NullUUID) Scan(value interface{}) error {\n\tif value == nil {\n\t\tnu.UUID, nu.Valid = Nil, false\n\t\treturn nil\n\t}\n\n\terr := nu.UUID.Scan(value)\n\tif err != nil {\n\t\tnu.Valid = false\n\t\treturn err\n\t}\n\n\tnu.Valid = true\n\treturn nil\n}\n\n// Value implements the driver Valuer interface.\nfunc (nu NullUUID) Value() (driver.Value, error) {\n\tif !nu.Valid {\n\t\treturn nil, nil\n\t}\n\t// Delegate to UUID Value function\n\treturn nu.UUID.Value()\n}\n\n// MarshalBinary implements encoding.BinaryMarshaler.\nfunc (nu NullUUID) MarshalBinary() ([]byte, error) {\n\tif nu.Valid {\n\t\treturn nu.UUID[:], nil\n\t}\n\n\treturn []byte(nil), nil\n}\n\n// UnmarshalBinary implements encoding.BinaryUnmarshaler.\nfunc (nu *NullUUID) UnmarshalBinary(data []byte) error {\n\tif len(data) != 16 {\n\t\treturn fmt.Errorf(\"invalid UUID (got %d bytes)\", len(data))\n\t}\n\tcopy(nu.UUID[:], data)\n\tnu.Valid = true\n\treturn nil\n}\n\n// MarshalText implements encoding.TextMarshaler.\nfunc (nu NullUUID) MarshalText() ([]byte, error) {\n\tif nu.Valid {\n\t\treturn nu.UUID.MarshalText()\n\t}\n\n\treturn jsonNull, nil\n}\n\n// UnmarshalText implements encoding.TextUnmarshaler.\nfunc (nu *NullUUID) UnmarshalText(data []byte) error {\n\tid, err := ParseBytes(data)\n\tif err != nil {\n\t\tnu.Valid = false\n\t\treturn err\n\t}\n\tnu.UUID = id\n\tnu.Valid = true\n\treturn nil\n}\n\n// MarshalJSON implements json.Marshaler.\nfunc (nu NullUUID) MarshalJSON() ([]byte, error) {\n\tif nu.Valid {\n\t\treturn json.Marshal(nu.UUID)\n\t}\n\n\treturn jsonNull, nil\n}\n\n// UnmarshalJSON implements json.Unmarshaler.\nfunc (nu *NullUUID) UnmarshalJSON(data []byte) error {\n\tif bytes.Equal(data, jsonNull) {\n\t\t*nu = NullUUID{}\n\t\treturn nil // valid null UUID\n\t}\n\terr := json.Unmarshal(data, &nu.UUID)\n\tnu.Valid = err == nil\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/sql.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"database/sql/driver\"\n\t\"fmt\"\n)\n\n// Scan implements sql.Scanner so UUIDs can be read from databases transparently.\n// Currently, database types that map to string and []byte are supported. Please\n// consult database-specific driver documentation for matching types.\nfunc (uuid *UUID) Scan(src interface{}) error {\n\tswitch src := src.(type) {\n\tcase nil:\n\t\treturn nil\n\n\tcase string:\n\t\t// if an empty UUID comes from a table, we return a null UUID\n\t\tif src == \"\" {\n\t\t\treturn nil\n\t\t}\n\n\t\t// see Parse for required string format\n\t\tu, err := Parse(src)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Scan: %v\", err)\n\t\t}\n\n\t\t*uuid = u\n\n\tcase []byte:\n\t\t// if an empty UUID comes from a table, we return a null UUID\n\t\tif len(src) == 0 {\n\t\t\treturn nil\n\t\t}\n\n\t\t// assumes a simple slice of bytes if 16 bytes\n\t\t// otherwise attempts to parse\n\t\tif len(src) != 16 {\n\t\t\treturn uuid.Scan(string(src))\n\t\t}\n\t\tcopy((*uuid)[:], src)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"Scan: unable to scan type %T into UUID\", src)\n\t}\n\n\treturn nil\n}\n\n// Value implements sql.Valuer so that UUIDs can be written to databases\n// transparently. Currently, UUIDs map to strings. Please consult\n// database-specific driver documentation for matching types.\nfunc (uuid UUID) Value() (driver.Value, error) {\n\treturn uuid.String(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/time.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"encoding/binary\"\n\t\"sync\"\n\t\"time\"\n)\n\n// A Time represents a time as the number of 100's of nanoseconds since 15 Oct\n// 1582.\ntype Time int64\n\nconst (\n\tlillian    = 2299160          // Julian day of 15 Oct 1582\n\tunix       = 2440587          // Julian day of 1 Jan 1970\n\tepoch      = unix - lillian   // Days between epochs\n\tg1582      = epoch * 86400    // seconds between epochs\n\tg1582ns100 = g1582 * 10000000 // 100s of a nanoseconds between epochs\n)\n\nvar (\n\ttimeMu   sync.Mutex\n\tlasttime uint64 // last time we returned\n\tclockSeq uint16 // clock sequence for this run\n\n\ttimeNow = time.Now // for testing\n)\n\n// UnixTime converts t the number of seconds and nanoseconds using the Unix\n// epoch of 1 Jan 1970.\nfunc (t Time) UnixTime() (sec, nsec int64) {\n\tsec = int64(t - g1582ns100)\n\tnsec = (sec % 10000000) * 100\n\tsec /= 10000000\n\treturn sec, nsec\n}\n\n// GetTime returns the current Time (100s of nanoseconds since 15 Oct 1582) and\n// clock sequence as well as adjusting the clock sequence as needed.  An error\n// is returned if the current time cannot be determined.\nfunc GetTime() (Time, uint16, error) {\n\tdefer timeMu.Unlock()\n\ttimeMu.Lock()\n\treturn getTime()\n}\n\nfunc getTime() (Time, uint16, error) {\n\tt := timeNow()\n\n\t// If we don't have a clock sequence already, set one.\n\tif clockSeq == 0 {\n\t\tsetClockSequence(-1)\n\t}\n\tnow := uint64(t.UnixNano()/100) + g1582ns100\n\n\t// If time has gone backwards with this clock sequence then we\n\t// increment the clock sequence\n\tif now <= lasttime {\n\t\tclockSeq = ((clockSeq + 1) & 0x3fff) | 0x8000\n\t}\n\tlasttime = now\n\treturn Time(now), clockSeq, nil\n}\n\n// ClockSequence returns the current clock sequence, generating one if not\n// already set.  The clock sequence is only used for Version 1 UUIDs.\n//\n// The uuid package does not use global static storage for the clock sequence or\n// the last time a UUID was generated.  Unless SetClockSequence is used, a new\n// random clock sequence is generated the first time a clock sequence is\n// requested by ClockSequence, GetTime, or NewUUID.  (section 4.2.1.1)\nfunc ClockSequence() int {\n\tdefer timeMu.Unlock()\n\ttimeMu.Lock()\n\treturn clockSequence()\n}\n\nfunc clockSequence() int {\n\tif clockSeq == 0 {\n\t\tsetClockSequence(-1)\n\t}\n\treturn int(clockSeq & 0x3fff)\n}\n\n// SetClockSequence sets the clock sequence to the lower 14 bits of seq.  Setting to\n// -1 causes a new sequence to be generated.\nfunc SetClockSequence(seq int) {\n\tdefer timeMu.Unlock()\n\ttimeMu.Lock()\n\tsetClockSequence(seq)\n}\n\nfunc setClockSequence(seq int) {\n\tif seq == -1 {\n\t\tvar b [2]byte\n\t\trandomBits(b[:]) // clock sequence\n\t\tseq = int(b[0])<<8 | int(b[1])\n\t}\n\toldSeq := clockSeq\n\tclockSeq = uint16(seq&0x3fff) | 0x8000 // Set our variant\n\tif oldSeq != clockSeq {\n\t\tlasttime = 0\n\t}\n}\n\n// Time returns the time in 100s of nanoseconds since 15 Oct 1582 encoded in\n// uuid.  The time is only defined for version 1, 2, 6 and 7 UUIDs.\nfunc (uuid UUID) Time() Time {\n\tvar t Time\n\tswitch uuid.Version() {\n\tcase 6:\n\t\ttime := binary.BigEndian.Uint64(uuid[:8]) // Ignore uuid[6] version b0110\n\t\tt = Time(time)\n\tcase 7:\n\t\ttime := binary.BigEndian.Uint64(uuid[:8])\n\t\tt = Time((time>>16)*10000 + g1582ns100)\n\tdefault: // forward compatible\n\t\ttime := int64(binary.BigEndian.Uint32(uuid[0:4]))\n\t\ttime |= int64(binary.BigEndian.Uint16(uuid[4:6])) << 32\n\t\ttime |= int64(binary.BigEndian.Uint16(uuid[6:8])&0xfff) << 48\n\t\tt = Time(time)\n\t}\n\treturn t\n}\n\n// ClockSequence returns the clock sequence encoded in uuid.\n// The clock sequence is only well defined for version 1 and 2 UUIDs.\nfunc (uuid UUID) ClockSequence() int {\n\treturn int(binary.BigEndian.Uint16(uuid[8:10])) & 0x3fff\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/util.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"io\"\n)\n\n// randomBits completely fills slice b with random data.\nfunc randomBits(b []byte) {\n\tif _, err := io.ReadFull(rander, b); err != nil {\n\t\tpanic(err.Error()) // rand should never fail\n\t}\n}\n\n// xvalues returns the value of a byte as a hexadecimal digit or 255.\nvar xvalues = [256]byte{\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255,\n\t255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n\t255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n}\n\n// xtob converts hex characters x1 and x2 into a byte.\nfunc xtob(x1, x2 byte) (byte, bool) {\n\tb1 := xvalues[x1]\n\tb2 := xvalues[x2]\n\treturn (b1 << 4) | b2, b1 != 255 && b2 != 255\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/uuid.go",
    "content": "// Copyright 2018 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// A UUID is a 128 bit (16 byte) Universal Unique IDentifier as defined in RFC\n// 4122.\ntype UUID [16]byte\n\n// A Version represents a UUID's version.\ntype Version byte\n\n// A Variant represents a UUID's variant.\ntype Variant byte\n\n// Constants returned by Variant.\nconst (\n\tInvalid   = Variant(iota) // Invalid UUID\n\tRFC4122                   // The variant specified in RFC4122\n\tReserved                  // Reserved, NCS backward compatibility.\n\tMicrosoft                 // Reserved, Microsoft Corporation backward compatibility.\n\tFuture                    // Reserved for future definition.\n)\n\nconst randPoolSize = 16 * 16\n\nvar (\n\trander      = rand.Reader // random function\n\tpoolEnabled = false\n\tpoolMu      sync.Mutex\n\tpoolPos     = randPoolSize     // protected with poolMu\n\tpool        [randPoolSize]byte // protected with poolMu\n)\n\ntype invalidLengthError struct{ len int }\n\nfunc (err invalidLengthError) Error() string {\n\treturn fmt.Sprintf(\"invalid UUID length: %d\", err.len)\n}\n\n// IsInvalidLengthError is matcher function for custom error invalidLengthError\nfunc IsInvalidLengthError(err error) bool {\n\t_, ok := err.(invalidLengthError)\n\treturn ok\n}\n\n// Parse decodes s into a UUID or returns an error if it cannot be parsed.  Both\n// the standard UUID forms defined in RFC 4122\n// (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx and\n// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) are decoded.  In addition,\n// Parse accepts non-standard strings such as the raw hex encoding\n// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx and 38 byte \"Microsoft style\" encodings,\n// e.g.  {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.  Only the middle 36 bytes are\n// examined in the latter case.  Parse should not be used to validate strings as\n// it parses non-standard encodings as indicated above.\nfunc Parse(s string) (UUID, error) {\n\tvar uuid UUID\n\tswitch len(s) {\n\t// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n\tcase 36:\n\n\t// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n\tcase 36 + 9:\n\t\tif !strings.EqualFold(s[:9], \"urn:uuid:\") {\n\t\t\treturn uuid, fmt.Errorf(\"invalid urn prefix: %q\", s[:9])\n\t\t}\n\t\ts = s[9:]\n\n\t// {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\n\tcase 36 + 2:\n\t\ts = s[1:]\n\n\t// xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\tcase 32:\n\t\tvar ok bool\n\t\tfor i := range uuid {\n\t\t\tuuid[i], ok = xtob(s[i*2], s[i*2+1])\n\t\t\tif !ok {\n\t\t\t\treturn uuid, errors.New(\"invalid UUID format\")\n\t\t\t}\n\t\t}\n\t\treturn uuid, nil\n\tdefault:\n\t\treturn uuid, invalidLengthError{len(s)}\n\t}\n\t// s is now at least 36 bytes long\n\t// it must be of the form  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n\tif s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {\n\t\treturn uuid, errors.New(\"invalid UUID format\")\n\t}\n\tfor i, x := range [16]int{\n\t\t0, 2, 4, 6,\n\t\t9, 11,\n\t\t14, 16,\n\t\t19, 21,\n\t\t24, 26, 28, 30, 32, 34,\n\t} {\n\t\tv, ok := xtob(s[x], s[x+1])\n\t\tif !ok {\n\t\t\treturn uuid, errors.New(\"invalid UUID format\")\n\t\t}\n\t\tuuid[i] = v\n\t}\n\treturn uuid, nil\n}\n\n// ParseBytes is like Parse, except it parses a byte slice instead of a string.\nfunc ParseBytes(b []byte) (UUID, error) {\n\tvar uuid UUID\n\tswitch len(b) {\n\tcase 36: // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n\tcase 36 + 9: // urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n\t\tif !bytes.EqualFold(b[:9], []byte(\"urn:uuid:\")) {\n\t\t\treturn uuid, fmt.Errorf(\"invalid urn prefix: %q\", b[:9])\n\t\t}\n\t\tb = b[9:]\n\tcase 36 + 2: // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\n\t\tb = b[1:]\n\tcase 32: // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\t\tvar ok bool\n\t\tfor i := 0; i < 32; i += 2 {\n\t\t\tuuid[i/2], ok = xtob(b[i], b[i+1])\n\t\t\tif !ok {\n\t\t\t\treturn uuid, errors.New(\"invalid UUID format\")\n\t\t\t}\n\t\t}\n\t\treturn uuid, nil\n\tdefault:\n\t\treturn uuid, invalidLengthError{len(b)}\n\t}\n\t// s is now at least 36 bytes long\n\t// it must be of the form  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n\tif b[8] != '-' || b[13] != '-' || b[18] != '-' || b[23] != '-' {\n\t\treturn uuid, errors.New(\"invalid UUID format\")\n\t}\n\tfor i, x := range [16]int{\n\t\t0, 2, 4, 6,\n\t\t9, 11,\n\t\t14, 16,\n\t\t19, 21,\n\t\t24, 26, 28, 30, 32, 34,\n\t} {\n\t\tv, ok := xtob(b[x], b[x+1])\n\t\tif !ok {\n\t\t\treturn uuid, errors.New(\"invalid UUID format\")\n\t\t}\n\t\tuuid[i] = v\n\t}\n\treturn uuid, nil\n}\n\n// MustParse is like Parse but panics if the string cannot be parsed.\n// It simplifies safe initialization of global variables holding compiled UUIDs.\nfunc MustParse(s string) UUID {\n\tuuid, err := Parse(s)\n\tif err != nil {\n\t\tpanic(`uuid: Parse(` + s + `): ` + err.Error())\n\t}\n\treturn uuid\n}\n\n// FromBytes creates a new UUID from a byte slice. Returns an error if the slice\n// does not have a length of 16. The bytes are copied from the slice.\nfunc FromBytes(b []byte) (uuid UUID, err error) {\n\terr = uuid.UnmarshalBinary(b)\n\treturn uuid, err\n}\n\n// Must returns uuid if err is nil and panics otherwise.\nfunc Must(uuid UUID, err error) UUID {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn uuid\n}\n\n// Validate returns an error if s is not a properly formatted UUID in one of the following formats:\n//   xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n//   urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n//   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n//   {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\n// It returns an error if the format is invalid, otherwise nil.\nfunc Validate(s string) error {\n\tswitch len(s) {\n\t// Standard UUID format\n\tcase 36:\n\n\t// UUID with \"urn:uuid:\" prefix\n\tcase 36 + 9:\n\t\tif !strings.EqualFold(s[:9], \"urn:uuid:\") {\n\t\t\treturn fmt.Errorf(\"invalid urn prefix: %q\", s[:9])\n\t\t}\n\t\ts = s[9:]\n\n\t// UUID enclosed in braces\n\tcase 36 + 2:\n\t\tif s[0] != '{' || s[len(s)-1] != '}' {\n\t\t\treturn fmt.Errorf(\"invalid bracketed UUID format\")\n\t\t}\n\t\ts = s[1 : len(s)-1]\n\n\t// UUID without hyphens\n\tcase 32:\n\t\tfor i := 0; i < len(s); i += 2 {\n\t\t\t_, ok := xtob(s[i], s[i+1])\n\t\t\tif !ok {\n\t\t\t\treturn errors.New(\"invalid UUID format\")\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\treturn invalidLengthError{len(s)}\n\t}\n\n\t// Check for standard UUID format\n\tif len(s) == 36 {\n\t\tif s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' {\n\t\t\treturn errors.New(\"invalid UUID format\")\n\t\t}\n\t\tfor _, x := range []int{0, 2, 4, 6, 9, 11, 14, 16, 19, 21, 24, 26, 28, 30, 32, 34} {\n\t\t\tif _, ok := xtob(s[x], s[x+1]); !ok {\n\t\t\t\treturn errors.New(\"invalid UUID format\")\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// String returns the string form of uuid, xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n// , or \"\" if uuid is invalid.\nfunc (uuid UUID) String() string {\n\tvar buf [36]byte\n\tencodeHex(buf[:], uuid)\n\treturn string(buf[:])\n}\n\n// URN returns the RFC 2141 URN form of uuid,\n// urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,  or \"\" if uuid is invalid.\nfunc (uuid UUID) URN() string {\n\tvar buf [36 + 9]byte\n\tcopy(buf[:], \"urn:uuid:\")\n\tencodeHex(buf[9:], uuid)\n\treturn string(buf[:])\n}\n\nfunc encodeHex(dst []byte, uuid UUID) {\n\thex.Encode(dst, uuid[:4])\n\tdst[8] = '-'\n\thex.Encode(dst[9:13], uuid[4:6])\n\tdst[13] = '-'\n\thex.Encode(dst[14:18], uuid[6:8])\n\tdst[18] = '-'\n\thex.Encode(dst[19:23], uuid[8:10])\n\tdst[23] = '-'\n\thex.Encode(dst[24:], uuid[10:])\n}\n\n// Variant returns the variant encoded in uuid.\nfunc (uuid UUID) Variant() Variant {\n\tswitch {\n\tcase (uuid[8] & 0xc0) == 0x80:\n\t\treturn RFC4122\n\tcase (uuid[8] & 0xe0) == 0xc0:\n\t\treturn Microsoft\n\tcase (uuid[8] & 0xe0) == 0xe0:\n\t\treturn Future\n\tdefault:\n\t\treturn Reserved\n\t}\n}\n\n// Version returns the version of uuid.\nfunc (uuid UUID) Version() Version {\n\treturn Version(uuid[6] >> 4)\n}\n\nfunc (v Version) String() string {\n\tif v > 15 {\n\t\treturn fmt.Sprintf(\"BAD_VERSION_%d\", v)\n\t}\n\treturn fmt.Sprintf(\"VERSION_%d\", v)\n}\n\nfunc (v Variant) String() string {\n\tswitch v {\n\tcase RFC4122:\n\t\treturn \"RFC4122\"\n\tcase Reserved:\n\t\treturn \"Reserved\"\n\tcase Microsoft:\n\t\treturn \"Microsoft\"\n\tcase Future:\n\t\treturn \"Future\"\n\tcase Invalid:\n\t\treturn \"Invalid\"\n\t}\n\treturn fmt.Sprintf(\"BadVariant%d\", int(v))\n}\n\n// SetRand sets the random number generator to r, which implements io.Reader.\n// If r.Read returns an error when the package requests random data then\n// a panic will be issued.\n//\n// Calling SetRand with nil sets the random number generator to the default\n// generator.\nfunc SetRand(r io.Reader) {\n\tif r == nil {\n\t\trander = rand.Reader\n\t\treturn\n\t}\n\trander = r\n}\n\n// EnableRandPool enables internal randomness pool used for Random\n// (Version 4) UUID generation. The pool contains random bytes read from\n// the random number generator on demand in batches. Enabling the pool\n// may improve the UUID generation throughput significantly.\n//\n// Since the pool is stored on the Go heap, this feature may be a bad fit\n// for security sensitive applications.\n//\n// Both EnableRandPool and DisableRandPool are not thread-safe and should\n// only be called when there is no possibility that New or any other\n// UUID Version 4 generation function will be called concurrently.\nfunc EnableRandPool() {\n\tpoolEnabled = true\n}\n\n// DisableRandPool disables the randomness pool if it was previously\n// enabled with EnableRandPool.\n//\n// Both EnableRandPool and DisableRandPool are not thread-safe and should\n// only be called when there is no possibility that New or any other\n// UUID Version 4 generation function will be called concurrently.\nfunc DisableRandPool() {\n\tpoolEnabled = false\n\tdefer poolMu.Unlock()\n\tpoolMu.Lock()\n\tpoolPos = randPoolSize\n}\n\n// UUIDs is a slice of UUID types.\ntype UUIDs []UUID\n\n// Strings returns a string slice containing the string form of each UUID in uuids.\nfunc (uuids UUIDs) Strings() []string {\n\tvar uuidStrs = make([]string, len(uuids))\n\tfor i, uuid := range uuids {\n\t\tuuidStrs[i] = uuid.String()\n\t}\n\treturn uuidStrs\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/version1.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"encoding/binary\"\n)\n\n// NewUUID returns a Version 1 UUID based on the current NodeID and clock\n// sequence, and the current time.  If the NodeID has not been set by SetNodeID\n// or SetNodeInterface then it will be set automatically.  If the NodeID cannot\n// be set NewUUID returns nil.  If clock sequence has not been set by\n// SetClockSequence then it will be set automatically.  If GetTime fails to\n// return the current NewUUID returns nil and an error.\n//\n// In most cases, New should be used.\nfunc NewUUID() (UUID, error) {\n\tvar uuid UUID\n\tnow, seq, err := GetTime()\n\tif err != nil {\n\t\treturn uuid, err\n\t}\n\n\ttimeLow := uint32(now & 0xffffffff)\n\ttimeMid := uint16((now >> 32) & 0xffff)\n\ttimeHi := uint16((now >> 48) & 0x0fff)\n\ttimeHi |= 0x1000 // Version 1\n\n\tbinary.BigEndian.PutUint32(uuid[0:], timeLow)\n\tbinary.BigEndian.PutUint16(uuid[4:], timeMid)\n\tbinary.BigEndian.PutUint16(uuid[6:], timeHi)\n\tbinary.BigEndian.PutUint16(uuid[8:], seq)\n\n\tnodeMu.Lock()\n\tif nodeID == zeroID {\n\t\tsetNodeInterface(\"\")\n\t}\n\tcopy(uuid[10:], nodeID[:])\n\tnodeMu.Unlock()\n\n\treturn uuid, nil\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/version4.go",
    "content": "// Copyright 2016 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport \"io\"\n\n// New creates a new random UUID or panics.  New is equivalent to\n// the expression\n//\n//    uuid.Must(uuid.NewRandom())\nfunc New() UUID {\n\treturn Must(NewRandom())\n}\n\n// NewString creates a new random UUID and returns it as a string or panics.\n// NewString is equivalent to the expression\n//\n//    uuid.New().String()\nfunc NewString() string {\n\treturn Must(NewRandom()).String()\n}\n\n// NewRandom returns a Random (Version 4) UUID.\n//\n// The strength of the UUIDs is based on the strength of the crypto/rand\n// package.\n//\n// Uses the randomness pool if it was enabled with EnableRandPool.\n//\n// A note about uniqueness derived from the UUID Wikipedia entry:\n//\n//  Randomly generated UUIDs have 122 random bits.  One's annual risk of being\n//  hit by a meteorite is estimated to be one chance in 17 billion, that\n//  means the probability is about 0.00000000006 (6 × 10−11),\n//  equivalent to the odds of creating a few tens of trillions of UUIDs in a\n//  year and having one duplicate.\nfunc NewRandom() (UUID, error) {\n\tif !poolEnabled {\n\t\treturn NewRandomFromReader(rander)\n\t}\n\treturn newRandomFromPool()\n}\n\n// NewRandomFromReader returns a UUID based on bytes read from a given io.Reader.\nfunc NewRandomFromReader(r io.Reader) (UUID, error) {\n\tvar uuid UUID\n\t_, err := io.ReadFull(r, uuid[:])\n\tif err != nil {\n\t\treturn Nil, err\n\t}\n\tuuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4\n\tuuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10\n\treturn uuid, nil\n}\n\nfunc newRandomFromPool() (UUID, error) {\n\tvar uuid UUID\n\tpoolMu.Lock()\n\tif poolPos == randPoolSize {\n\t\t_, err := io.ReadFull(rander, pool[:])\n\t\tif err != nil {\n\t\t\tpoolMu.Unlock()\n\t\t\treturn Nil, err\n\t\t}\n\t\tpoolPos = 0\n\t}\n\tcopy(uuid[:], pool[poolPos:(poolPos+16)])\n\tpoolPos += 16\n\tpoolMu.Unlock()\n\n\tuuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4\n\tuuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10\n\treturn uuid, nil\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/version6.go",
    "content": "// Copyright 2023 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport \"encoding/binary\"\n\n// UUID version 6 is a field-compatible version of UUIDv1, reordered for improved DB locality.\n// It is expected that UUIDv6 will primarily be used in contexts where there are existing v1 UUIDs.\n// Systems that do not involve legacy UUIDv1 SHOULD consider using UUIDv7 instead.\n//\n// see https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-03#uuidv6\n//\n// NewV6 returns a Version 6 UUID based on the current NodeID and clock\n// sequence, and the current time. If the NodeID has not been set by SetNodeID\n// or SetNodeInterface then it will be set automatically. If the NodeID cannot\n// be set NewV6 set NodeID is random bits automatically . If clock sequence has not been set by\n// SetClockSequence then it will be set automatically. If GetTime fails to\n// return the current NewV6 returns Nil and an error.\nfunc NewV6() (UUID, error) {\n\tvar uuid UUID\n\tnow, seq, err := GetTime()\n\tif err != nil {\n\t\treturn uuid, err\n\t}\n\n\t/*\n\t    0                   1                   2                   3\n\t    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                           time_high                           |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |           time_mid            |      time_low_and_version     |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t   |                         node (2-5)                            |\n\t   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t*/\n\n\tbinary.BigEndian.PutUint64(uuid[0:], uint64(now))\n\tbinary.BigEndian.PutUint16(uuid[8:], seq)\n\n\tuuid[6] = 0x60 | (uuid[6] & 0x0F)\n\tuuid[8] = 0x80 | (uuid[8] & 0x3F)\n\n\tnodeMu.Lock()\n\tif nodeID == zeroID {\n\t\tsetNodeInterface(\"\")\n\t}\n\tcopy(uuid[10:], nodeID[:])\n\tnodeMu.Unlock()\n\n\treturn uuid, nil\n}\n"
  },
  {
    "path": "vendor/github.com/google/uuid/version7.go",
    "content": "// Copyright 2023 Google Inc.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uuid\n\nimport (\n\t\"io\"\n)\n\n// UUID version 7 features a time-ordered value field derived from the widely\n// implemented and well known Unix Epoch timestamp source,\n// the number of milliseconds seconds since midnight 1 Jan 1970 UTC, leap seconds excluded.\n// As well as improved entropy characteristics over versions 1 or 6.\n//\n// see https://datatracker.ietf.org/doc/html/draft-peabody-dispatch-new-uuid-format-03#name-uuid-version-7\n//\n// Implementations SHOULD utilize UUID version 7 over UUID version 1 and 6 if possible.\n//\n// NewV7 returns a Version 7 UUID based on the current time(Unix Epoch).\n// Uses the randomness pool if it was enabled with EnableRandPool.\n// On error, NewV7 returns Nil and an error\nfunc NewV7() (UUID, error) {\n\tuuid, err := NewRandom()\n\tif err != nil {\n\t\treturn uuid, err\n\t}\n\tmakeV7(uuid[:])\n\treturn uuid, nil\n}\n\n// NewV7FromReader returns a Version 7 UUID based on the current time(Unix Epoch).\n// it use NewRandomFromReader fill random bits.\n// On error, NewV7FromReader returns Nil and an error.\nfunc NewV7FromReader(r io.Reader) (UUID, error) {\n\tuuid, err := NewRandomFromReader(r)\n\tif err != nil {\n\t\treturn uuid, err\n\t}\n\n\tmakeV7(uuid[:])\n\treturn uuid, nil\n}\n\n// makeV7 fill 48 bits time (uuid[0] - uuid[5]), set version b0111 (uuid[6])\n// uuid[8] already has the right version number (Variant is 10)\n// see function NewV7 and NewV7FromReader\nfunc makeV7(uuid []byte) {\n\t/*\n\t\t 0                   1                   2                   3\n\t\t 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n\t\t+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t\t|                           unix_ts_ms                          |\n\t\t+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t\t|          unix_ts_ms           |  ver  |  rand_a (12 bit seq)  |\n\t\t+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t\t|var|                        rand_b                             |\n\t\t+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t\t|                            rand_b                             |\n\t\t+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\t*/\n\t_ = uuid[15] // bounds check\n\n\tt, s := getV7Time()\n\n\tuuid[0] = byte(t >> 40)\n\tuuid[1] = byte(t >> 32)\n\tuuid[2] = byte(t >> 24)\n\tuuid[3] = byte(t >> 16)\n\tuuid[4] = byte(t >> 8)\n\tuuid[5] = byte(t)\n\n\tuuid[6] = 0x70 | (0x0F & byte(s>>8))\n\tuuid[7] = byte(s)\n}\n\n// lastV7time is the last time we returned stored as:\n//\n//\t52 bits of time in milliseconds since epoch\n//\t12 bits of (fractional nanoseconds) >> 8\nvar lastV7time int64\n\nconst nanoPerMilli = 1000000\n\n// getV7Time returns the time in milliseconds and nanoseconds / 256.\n// The returned (milli << 12 + seq) is guarenteed to be greater than\n// (milli << 12 + seq) returned by any previous call to getV7Time.\nfunc getV7Time() (milli, seq int64) {\n\ttimeMu.Lock()\n\tdefer timeMu.Unlock()\n\n\tnano := timeNow().UnixNano()\n\tmilli = nano / nanoPerMilli\n\t// Sequence number is between 0 and 3906 (nanoPerMilli>>8)\n\tseq = (nano - milli*nanoPerMilli) >> 8\n\tnow := milli<<12 + seq\n\tif now <= lastV7time {\n\t\tnow = lastV7time + 1\n\t\tmilli = now >> 12\n\t\tseq = now & 0xfff\n\t}\n\tlastV7time = now\n\treturn milli, seq\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/CHANGELOG.md",
    "content": "# 1.7.0 (May 24, 2024)\n\nENHANCEMENTS:\n\n- Remove `reflect` dependency ([#91](https://github.com/hashicorp/go-version/pull/91))\n- Implement the `database/sql.Scanner` and `database/sql/driver.Value` interfaces for `Version` ([#133](https://github.com/hashicorp/go-version/pull/133))\n\nINTERNAL:\n\n- [COMPLIANCE] Add Copyright and License Headers ([#115](https://github.com/hashicorp/go-version/pull/115))\n- [COMPLIANCE] Update MPL-2.0 LICENSE ([#105](https://github.com/hashicorp/go-version/pull/105))\n- Bump actions/cache from 3.0.11 to 3.2.5 ([#116](https://github.com/hashicorp/go-version/pull/116))\n- Bump actions/checkout from 3.2.0 to 3.3.0 ([#111](https://github.com/hashicorp/go-version/pull/111))\n- Bump actions/upload-artifact from 3.1.1 to 3.1.2 ([#112](https://github.com/hashicorp/go-version/pull/112))\n- GHA Migration ([#103](https://github.com/hashicorp/go-version/pull/103))\n- github: Pin external GitHub Actions to hashes ([#107](https://github.com/hashicorp/go-version/pull/107))\n- SEC-090: Automated trusted workflow pinning (2023-04-05) ([#124](https://github.com/hashicorp/go-version/pull/124))\n- update readme ([#104](https://github.com/hashicorp/go-version/pull/104))\n\n# 1.6.0 (June 28, 2022)\n\nFEATURES:\n\n- Add `Prerelease` function to `Constraint` to return true if the version includes a prerelease field ([#100](https://github.com/hashicorp/go-version/pull/100))\n\n# 1.5.0 (May 18, 2022)\n\nFEATURES:\n\n- Use `encoding` `TextMarshaler` & `TextUnmarshaler` instead of JSON equivalents ([#95](https://github.com/hashicorp/go-version/pull/95))\n- Add JSON handlers to allow parsing from/to JSON ([#93](https://github.com/hashicorp/go-version/pull/93))\n\n# 1.4.0 (January 5, 2022)\n\nFEATURES:\n\n - Introduce `MustConstraints()` ([#87](https://github.com/hashicorp/go-version/pull/87))\n - `Constraints`: Introduce `Equals()` and `sort.Interface` methods ([#88](https://github.com/hashicorp/go-version/pull/88))\n\n# 1.3.0 (March 31, 2021)\n\nPlease note that CHANGELOG.md does not exist in the source code prior to this release.\n\nFEATURES:\n - Add `Core` function to return a version without prerelease or metadata ([#85](https://github.com/hashicorp/go-version/pull/85))\n\n# 1.2.1 (June 17, 2020)\n\nBUG FIXES:\n - Prevent `Version.Equal` method from panicking on `nil` encounter ([#73](https://github.com/hashicorp/go-version/pull/73))\n\n# 1.2.0 (April 23, 2019)\n\nFEATURES:\n - Add `GreaterThanOrEqual` and `LessThanOrEqual` helper methods ([#53](https://github.com/hashicorp/go-version/pull/53))\n\n# 1.1.0 (Jan 07, 2019)\n\nFEATURES:\n - Add `NewSemver` constructor ([#45](https://github.com/hashicorp/go-version/pull/45))\n\n# 1.0.0 (August 24, 2018)\n\nInitial release.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/LICENSE",
    "content": "Copyright (c) 2014 HashiCorp, Inc.\n\nMozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled 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\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. 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, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the 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. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/README.md",
    "content": "# Versioning Library for Go\n![Build Status](https://github.com/hashicorp/go-version/actions/workflows/go-tests.yml/badge.svg)\n[![GoDoc](https://godoc.org/github.com/hashicorp/go-version?status.svg)](https://godoc.org/github.com/hashicorp/go-version)\n\ngo-version is a library for parsing versions and version constraints,\nand verifying versions against a set of constraints. go-version\ncan sort a collection of versions properly, handles prerelease/beta\nversions, can increment versions, etc.\n\nVersions used with go-version must follow [SemVer](http://semver.org/).\n\n## Installation and Usage\n\nPackage documentation can be found on\n[GoDoc](http://godoc.org/github.com/hashicorp/go-version).\n\nInstallation can be done with a normal `go get`:\n\n```\n$ go get github.com/hashicorp/go-version\n```\n\n#### Version Parsing and Comparison\n\n```go\nv1, err := version.NewVersion(\"1.2\")\nv2, err := version.NewVersion(\"1.5+metadata\")\n\n// Comparison example. There is also GreaterThan, Equal, and just\n// a simple Compare that returns an int allowing easy >=, <=, etc.\nif v1.LessThan(v2) {\n    fmt.Printf(\"%s is less than %s\", v1, v2)\n}\n```\n\n#### Version Constraints\n\n```go\nv1, err := version.NewVersion(\"1.2\")\n\n// Constraints example.\nconstraints, err := version.NewConstraint(\">= 1.0, < 1.4\")\nif constraints.Check(v1) {\n\tfmt.Printf(\"%s satisfies constraints %s\", v1, constraints)\n}\n```\n\n#### Version Sorting\n\n```go\nversionsRaw := []string{\"1.1\", \"0.7.1\", \"1.4-beta\", \"1.4\", \"2\"}\nversions := make([]*version.Version, len(versionsRaw))\nfor i, raw := range versionsRaw {\n    v, _ := version.NewVersion(raw)\n    versions[i] = v\n}\n\n// After this, the versions are properly sorted\nsort.Sort(version.Collection(versions))\n```\n\n## Issues and Contributing\n\nIf you find an issue with this library, please report an issue. If you'd\nlike, we welcome any contributions. Fork this library and submit a pull\nrequest.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/constraint.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage version\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// Constraint represents a single constraint for a version, such as\n// \">= 1.0\".\ntype Constraint struct {\n\tf        constraintFunc\n\top       operator\n\tcheck    *Version\n\toriginal string\n}\n\nfunc (c *Constraint) Equals(con *Constraint) bool {\n\treturn c.op == con.op && c.check.Equal(con.check)\n}\n\n// Constraints is a slice of constraints. We make a custom type so that\n// we can add methods to it.\ntype Constraints []*Constraint\n\ntype constraintFunc func(v, c *Version) bool\n\nvar constraintOperators map[string]constraintOperation\n\ntype constraintOperation struct {\n\top operator\n\tf  constraintFunc\n}\n\nvar constraintRegexp *regexp.Regexp\n\nfunc init() {\n\tconstraintOperators = map[string]constraintOperation{\n\t\t\"\":   {op: equal, f: constraintEqual},\n\t\t\"=\":  {op: equal, f: constraintEqual},\n\t\t\"!=\": {op: notEqual, f: constraintNotEqual},\n\t\t\">\":  {op: greaterThan, f: constraintGreaterThan},\n\t\t\"<\":  {op: lessThan, f: constraintLessThan},\n\t\t\">=\": {op: greaterThanEqual, f: constraintGreaterThanEqual},\n\t\t\"<=\": {op: lessThanEqual, f: constraintLessThanEqual},\n\t\t\"~>\": {op: pessimistic, f: constraintPessimistic},\n\t}\n\n\tops := make([]string, 0, len(constraintOperators))\n\tfor k := range constraintOperators {\n\t\tops = append(ops, regexp.QuoteMeta(k))\n\t}\n\n\tconstraintRegexp = regexp.MustCompile(fmt.Sprintf(\n\t\t`^\\s*(%s)\\s*(%s)\\s*$`,\n\t\tstrings.Join(ops, \"|\"),\n\t\tVersionRegexpRaw))\n}\n\n// NewConstraint will parse one or more constraints from the given\n// constraint string. The string must be a comma-separated list of\n// constraints.\nfunc NewConstraint(v string) (Constraints, error) {\n\tvs := strings.Split(v, \",\")\n\tresult := make([]*Constraint, len(vs))\n\tfor i, single := range vs {\n\t\tc, err := parseSingle(single)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresult[i] = c\n\t}\n\n\treturn Constraints(result), nil\n}\n\n// MustConstraints is a helper that wraps a call to a function\n// returning (Constraints, error) and panics if error is non-nil.\nfunc MustConstraints(c Constraints, err error) Constraints {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn c\n}\n\n// Check tests if a version satisfies all the constraints.\nfunc (cs Constraints) Check(v *Version) bool {\n\tfor _, c := range cs {\n\t\tif !c.Check(v) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Equals compares Constraints with other Constraints\n// for equality. This may not represent logical equivalence\n// of compared constraints.\n// e.g. even though '>0.1,>0.2' is logically equivalent\n// to '>0.2' it is *NOT* treated as equal.\n//\n// Missing operator is treated as equal to '=', whitespaces\n// are ignored and constraints are sorted before comaparison.\nfunc (cs Constraints) Equals(c Constraints) bool {\n\tif len(cs) != len(c) {\n\t\treturn false\n\t}\n\n\t// make copies to retain order of the original slices\n\tleft := make(Constraints, len(cs))\n\tcopy(left, cs)\n\tsort.Stable(left)\n\tright := make(Constraints, len(c))\n\tcopy(right, c)\n\tsort.Stable(right)\n\n\t// compare sorted slices\n\tfor i, con := range left {\n\t\tif !con.Equals(right[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (cs Constraints) Len() int {\n\treturn len(cs)\n}\n\nfunc (cs Constraints) Less(i, j int) bool {\n\tif cs[i].op < cs[j].op {\n\t\treturn true\n\t}\n\tif cs[i].op > cs[j].op {\n\t\treturn false\n\t}\n\n\treturn cs[i].check.LessThan(cs[j].check)\n}\n\nfunc (cs Constraints) Swap(i, j int) {\n\tcs[i], cs[j] = cs[j], cs[i]\n}\n\n// Returns the string format of the constraints\nfunc (cs Constraints) String() string {\n\tcsStr := make([]string, len(cs))\n\tfor i, c := range cs {\n\t\tcsStr[i] = c.String()\n\t}\n\n\treturn strings.Join(csStr, \",\")\n}\n\n// Check tests if a constraint is validated by the given version.\nfunc (c *Constraint) Check(v *Version) bool {\n\treturn c.f(v, c.check)\n}\n\n// Prerelease returns true if the version underlying this constraint\n// contains a prerelease field.\nfunc (c *Constraint) Prerelease() bool {\n\treturn len(c.check.Prerelease()) > 0\n}\n\nfunc (c *Constraint) String() string {\n\treturn c.original\n}\n\nfunc parseSingle(v string) (*Constraint, error) {\n\tmatches := constraintRegexp.FindStringSubmatch(v)\n\tif matches == nil {\n\t\treturn nil, fmt.Errorf(\"Malformed constraint: %s\", v)\n\t}\n\n\tcheck, err := NewVersion(matches[2])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcop := constraintOperators[matches[1]]\n\n\treturn &Constraint{\n\t\tf:        cop.f,\n\t\top:       cop.op,\n\t\tcheck:    check,\n\t\toriginal: v,\n\t}, nil\n}\n\nfunc prereleaseCheck(v, c *Version) bool {\n\tswitch vPre, cPre := v.Prerelease() != \"\", c.Prerelease() != \"\"; {\n\tcase cPre && vPre:\n\t\t// A constraint with a pre-release can only match a pre-release version\n\t\t// with the same base segments.\n\t\treturn v.equalSegments(c)\n\n\tcase !cPre && vPre:\n\t\t// A constraint without a pre-release can only match a version without a\n\t\t// pre-release.\n\t\treturn false\n\n\tcase cPre && !vPre:\n\t\t// OK, except with the pessimistic operator\n\tcase !cPre && !vPre:\n\t\t// OK\n\t}\n\treturn true\n}\n\n//-------------------------------------------------------------------\n// Constraint functions\n//-------------------------------------------------------------------\n\ntype operator rune\n\nconst (\n\tequal            operator = '='\n\tnotEqual         operator = '≠'\n\tgreaterThan      operator = '>'\n\tlessThan         operator = '<'\n\tgreaterThanEqual operator = '≥'\n\tlessThanEqual    operator = '≤'\n\tpessimistic      operator = '~'\n)\n\nfunc constraintEqual(v, c *Version) bool {\n\treturn v.Equal(c)\n}\n\nfunc constraintNotEqual(v, c *Version) bool {\n\treturn !v.Equal(c)\n}\n\nfunc constraintGreaterThan(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) == 1\n}\n\nfunc constraintLessThan(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) == -1\n}\n\nfunc constraintGreaterThanEqual(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) >= 0\n}\n\nfunc constraintLessThanEqual(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) <= 0\n}\n\nfunc constraintPessimistic(v, c *Version) bool {\n\t// Using a pessimistic constraint with a pre-release, restricts versions to pre-releases\n\tif !prereleaseCheck(v, c) || (c.Prerelease() != \"\" && v.Prerelease() == \"\") {\n\t\treturn false\n\t}\n\n\t// If the version being checked is naturally less than the constraint, then there\n\t// is no way for the version to be valid against the constraint\n\tif v.LessThan(c) {\n\t\treturn false\n\t}\n\t// We'll use this more than once, so grab the length now so it's a little cleaner\n\t// to write the later checks\n\tcs := len(c.segments)\n\n\t// If the version being checked has less specificity than the constraint, then there\n\t// is no way for the version to be valid against the constraint\n\tif cs > len(v.segments) {\n\t\treturn false\n\t}\n\n\t// Check the segments in the constraint against those in the version. If the version\n\t// being checked, at any point, does not have the same values in each index of the\n\t// constraints segments, then it cannot be valid against the constraint.\n\tfor i := 0; i < c.si-1; i++ {\n\t\tif v.segments[i] != c.segments[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check the last part of the segment in the constraint. If the version segment at\n\t// this index is less than the constraints segment at this index, then it cannot\n\t// be valid against the constraint\n\tif c.segments[cs-1] > v.segments[cs-1] {\n\t\treturn false\n\t}\n\n\t// If nothing has rejected the version by now, it's valid\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/version.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage version\n\nimport (\n\t\"bytes\"\n\t\"database/sql/driver\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// The compiled regular expression used to test the validity of a version.\nvar (\n\tversionRegexp *regexp.Regexp\n\tsemverRegexp  *regexp.Regexp\n)\n\n// The raw regular expression string used for testing the validity\n// of a version.\nconst (\n\tVersionRegexpRaw string = `v?([0-9]+(\\.[0-9]+)*?)` +\n\t\t`(-([0-9]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)|(-?([A-Za-z\\-~]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)))?` +\n\t\t`(\\+([0-9A-Za-z\\-~]+(\\.[0-9A-Za-z\\-~]+)*))?` +\n\t\t`?`\n\n\t// SemverRegexpRaw requires a separator between version and prerelease\n\tSemverRegexpRaw string = `v?([0-9]+(\\.[0-9]+)*?)` +\n\t\t`(-([0-9]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)|(-([A-Za-z\\-~]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)))?` +\n\t\t`(\\+([0-9A-Za-z\\-~]+(\\.[0-9A-Za-z\\-~]+)*))?` +\n\t\t`?`\n)\n\n// Version represents a single version.\ntype Version struct {\n\tmetadata string\n\tpre      string\n\tsegments []int64\n\tsi       int\n\toriginal string\n}\n\nfunc init() {\n\tversionRegexp = regexp.MustCompile(\"^\" + VersionRegexpRaw + \"$\")\n\tsemverRegexp = regexp.MustCompile(\"^\" + SemverRegexpRaw + \"$\")\n}\n\n// NewVersion parses the given version and returns a new\n// Version.\nfunc NewVersion(v string) (*Version, error) {\n\treturn newVersion(v, versionRegexp)\n}\n\n// NewSemver parses the given version and returns a new\n// Version that adheres strictly to SemVer specs\n// https://semver.org/\nfunc NewSemver(v string) (*Version, error) {\n\treturn newVersion(v, semverRegexp)\n}\n\nfunc newVersion(v string, pattern *regexp.Regexp) (*Version, error) {\n\tmatches := pattern.FindStringSubmatch(v)\n\tif matches == nil {\n\t\treturn nil, fmt.Errorf(\"Malformed version: %s\", v)\n\t}\n\tsegmentsStr := strings.Split(matches[1], \".\")\n\tsegments := make([]int64, len(segmentsStr))\n\tfor i, str := range segmentsStr {\n\t\tval, err := strconv.ParseInt(str, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error parsing version: %s\", err)\n\t\t}\n\n\t\tsegments[i] = val\n\t}\n\n\t// Even though we could support more than three segments, if we\n\t// got less than three, pad it with 0s. This is to cover the basic\n\t// default usecase of semver, which is MAJOR.MINOR.PATCH at the minimum\n\tfor i := len(segments); i < 3; i++ {\n\t\tsegments = append(segments, 0)\n\t}\n\n\tpre := matches[7]\n\tif pre == \"\" {\n\t\tpre = matches[4]\n\t}\n\n\treturn &Version{\n\t\tmetadata: matches[10],\n\t\tpre:      pre,\n\t\tsegments: segments,\n\t\tsi:       len(segmentsStr),\n\t\toriginal: v,\n\t}, nil\n}\n\n// Must is a helper that wraps a call to a function returning (*Version, error)\n// and panics if error is non-nil.\nfunc Must(v *Version, err error) *Version {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn v\n}\n\n// Compare compares this version to another version. This\n// returns -1, 0, or 1 if this version is smaller, equal,\n// or larger than the other version, respectively.\n//\n// If you want boolean results, use the LessThan, Equal,\n// GreaterThan, GreaterThanOrEqual or LessThanOrEqual methods.\nfunc (v *Version) Compare(other *Version) int {\n\t// A quick, efficient equality check\n\tif v.String() == other.String() {\n\t\treturn 0\n\t}\n\n\t// If the segments are the same, we must compare on prerelease info\n\tif v.equalSegments(other) {\n\t\tpreSelf := v.Prerelease()\n\t\tpreOther := other.Prerelease()\n\t\tif preSelf == \"\" && preOther == \"\" {\n\t\t\treturn 0\n\t\t}\n\t\tif preSelf == \"\" {\n\t\t\treturn 1\n\t\t}\n\t\tif preOther == \"\" {\n\t\t\treturn -1\n\t\t}\n\n\t\treturn comparePrereleases(preSelf, preOther)\n\t}\n\n\tsegmentsSelf := v.Segments64()\n\tsegmentsOther := other.Segments64()\n\t// Get the highest specificity (hS), or if they're equal, just use segmentSelf length\n\tlenSelf := len(segmentsSelf)\n\tlenOther := len(segmentsOther)\n\thS := lenSelf\n\tif lenSelf < lenOther {\n\t\thS = lenOther\n\t}\n\t// Compare the segments\n\t// Because a constraint could have more/less specificity than the version it's\n\t// checking, we need to account for a lopsided or jagged comparison\n\tfor i := 0; i < hS; i++ {\n\t\tif i > lenSelf-1 {\n\t\t\t// This means Self had the lower specificity\n\t\t\t// Check to see if the remaining segments in Other are all zeros\n\t\t\tif !allZero(segmentsOther[i:]) {\n\t\t\t\t// if not, it means that Other has to be greater than Self\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\tbreak\n\t\t} else if i > lenOther-1 {\n\t\t\t// this means Other had the lower specificity\n\t\t\t// Check to see if the remaining segments in Self are all zeros -\n\t\t\tif !allZero(segmentsSelf[i:]) {\n\t\t\t\t// if not, it means that Self has to be greater than Other\n\t\t\t\treturn 1\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tlhs := segmentsSelf[i]\n\t\trhs := segmentsOther[i]\n\t\tif lhs == rhs {\n\t\t\tcontinue\n\t\t} else if lhs < rhs {\n\t\t\treturn -1\n\t\t}\n\t\t// Otherwis, rhs was > lhs, they're not equal\n\t\treturn 1\n\t}\n\n\t// if we got this far, they're equal\n\treturn 0\n}\n\nfunc (v *Version) equalSegments(other *Version) bool {\n\tsegmentsSelf := v.Segments64()\n\tsegmentsOther := other.Segments64()\n\n\tif len(segmentsSelf) != len(segmentsOther) {\n\t\treturn false\n\t}\n\tfor i, v := range segmentsSelf {\n\t\tif v != segmentsOther[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc allZero(segs []int64) bool {\n\tfor _, s := range segs {\n\t\tif s != 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc comparePart(preSelf string, preOther string) int {\n\tif preSelf == preOther {\n\t\treturn 0\n\t}\n\n\tvar selfInt int64\n\tselfNumeric := true\n\tselfInt, err := strconv.ParseInt(preSelf, 10, 64)\n\tif err != nil {\n\t\tselfNumeric = false\n\t}\n\n\tvar otherInt int64\n\totherNumeric := true\n\totherInt, err = strconv.ParseInt(preOther, 10, 64)\n\tif err != nil {\n\t\totherNumeric = false\n\t}\n\n\t// if a part is empty, we use the other to decide\n\tif preSelf == \"\" {\n\t\tif otherNumeric {\n\t\t\treturn -1\n\t\t}\n\t\treturn 1\n\t}\n\n\tif preOther == \"\" {\n\t\tif selfNumeric {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\n\tif selfNumeric && !otherNumeric {\n\t\treturn -1\n\t} else if !selfNumeric && otherNumeric {\n\t\treturn 1\n\t} else if !selfNumeric && !otherNumeric && preSelf > preOther {\n\t\treturn 1\n\t} else if selfInt > otherInt {\n\t\treturn 1\n\t}\n\n\treturn -1\n}\n\nfunc comparePrereleases(v string, other string) int {\n\t// the same pre release!\n\tif v == other {\n\t\treturn 0\n\t}\n\n\t// split both pre releases for analyse their parts\n\tselfPreReleaseMeta := strings.Split(v, \".\")\n\totherPreReleaseMeta := strings.Split(other, \".\")\n\n\tselfPreReleaseLen := len(selfPreReleaseMeta)\n\totherPreReleaseLen := len(otherPreReleaseMeta)\n\n\tbiggestLen := otherPreReleaseLen\n\tif selfPreReleaseLen > otherPreReleaseLen {\n\t\tbiggestLen = selfPreReleaseLen\n\t}\n\n\t// loop for parts to find the first difference\n\tfor i := 0; i < biggestLen; i = i + 1 {\n\t\tpartSelfPre := \"\"\n\t\tif i < selfPreReleaseLen {\n\t\t\tpartSelfPre = selfPreReleaseMeta[i]\n\t\t}\n\n\t\tpartOtherPre := \"\"\n\t\tif i < otherPreReleaseLen {\n\t\t\tpartOtherPre = otherPreReleaseMeta[i]\n\t\t}\n\n\t\tcompare := comparePart(partSelfPre, partOtherPre)\n\t\t// if parts are equals, continue the loop\n\t\tif compare != 0 {\n\t\t\treturn compare\n\t\t}\n\t}\n\n\treturn 0\n}\n\n// Core returns a new version constructed from only the MAJOR.MINOR.PATCH\n// segments of the version, without prerelease or metadata.\nfunc (v *Version) Core() *Version {\n\tsegments := v.Segments64()\n\tsegmentsOnly := fmt.Sprintf(\"%d.%d.%d\", segments[0], segments[1], segments[2])\n\treturn Must(NewVersion(segmentsOnly))\n}\n\n// Equal tests if two versions are equal.\nfunc (v *Version) Equal(o *Version) bool {\n\tif v == nil || o == nil {\n\t\treturn v == o\n\t}\n\n\treturn v.Compare(o) == 0\n}\n\n// GreaterThan tests if this version is greater than another version.\nfunc (v *Version) GreaterThan(o *Version) bool {\n\treturn v.Compare(o) > 0\n}\n\n// GreaterThanOrEqual tests if this version is greater than or equal to another version.\nfunc (v *Version) GreaterThanOrEqual(o *Version) bool {\n\treturn v.Compare(o) >= 0\n}\n\n// LessThan tests if this version is less than another version.\nfunc (v *Version) LessThan(o *Version) bool {\n\treturn v.Compare(o) < 0\n}\n\n// LessThanOrEqual tests if this version is less than or equal to another version.\nfunc (v *Version) LessThanOrEqual(o *Version) bool {\n\treturn v.Compare(o) <= 0\n}\n\n// Metadata returns any metadata that was part of the version\n// string.\n//\n// Metadata is anything that comes after the \"+\" in the version.\n// For example, with \"1.2.3+beta\", the metadata is \"beta\".\nfunc (v *Version) Metadata() string {\n\treturn v.metadata\n}\n\n// Prerelease returns any prerelease data that is part of the version,\n// or blank if there is no prerelease data.\n//\n// Prerelease information is anything that comes after the \"-\" in the\n// version (but before any metadata). For example, with \"1.2.3-beta\",\n// the prerelease information is \"beta\".\nfunc (v *Version) Prerelease() string {\n\treturn v.pre\n}\n\n// Segments returns the numeric segments of the version as a slice of ints.\n//\n// This excludes any metadata or pre-release information. For example,\n// for a version \"1.2.3-beta\", segments will return a slice of\n// 1, 2, 3.\nfunc (v *Version) Segments() []int {\n\tsegmentSlice := make([]int, len(v.segments))\n\tfor i, v := range v.segments {\n\t\tsegmentSlice[i] = int(v)\n\t}\n\treturn segmentSlice\n}\n\n// Segments64 returns the numeric segments of the version as a slice of int64s.\n//\n// This excludes any metadata or pre-release information. For example,\n// for a version \"1.2.3-beta\", segments will return a slice of\n// 1, 2, 3.\nfunc (v *Version) Segments64() []int64 {\n\tresult := make([]int64, len(v.segments))\n\tcopy(result, v.segments)\n\treturn result\n}\n\n// String returns the full version string included pre-release\n// and metadata information.\n//\n// This value is rebuilt according to the parsed segments and other\n// information. Therefore, ambiguities in the version string such as\n// prefixed zeroes (1.04.0 => 1.4.0), `v` prefix (v1.0.0 => 1.0.0), and\n// missing parts (1.0 => 1.0.0) will be made into a canonicalized form\n// as shown in the parenthesized examples.\nfunc (v *Version) String() string {\n\tvar buf bytes.Buffer\n\tfmtParts := make([]string, len(v.segments))\n\tfor i, s := range v.segments {\n\t\t// We can ignore err here since we've pre-parsed the values in segments\n\t\tstr := strconv.FormatInt(s, 10)\n\t\tfmtParts[i] = str\n\t}\n\tfmt.Fprintf(&buf, strings.Join(fmtParts, \".\"))\n\tif v.pre != \"\" {\n\t\tfmt.Fprintf(&buf, \"-%s\", v.pre)\n\t}\n\tif v.metadata != \"\" {\n\t\tfmt.Fprintf(&buf, \"+%s\", v.metadata)\n\t}\n\n\treturn buf.String()\n}\n\n// Original returns the original parsed version as-is, including any\n// potential whitespace, `v` prefix, etc.\nfunc (v *Version) Original() string {\n\treturn v.original\n}\n\n// UnmarshalText implements encoding.TextUnmarshaler interface.\nfunc (v *Version) UnmarshalText(b []byte) error {\n\ttemp, err := NewVersion(string(b))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = *temp\n\n\treturn nil\n}\n\n// MarshalText implements encoding.TextMarshaler interface.\nfunc (v *Version) MarshalText() ([]byte, error) {\n\treturn []byte(v.String()), nil\n}\n\n// Scan implements the sql.Scanner interface.\nfunc (v *Version) Scan(src interface{}) error {\n\tswitch src := src.(type) {\n\tcase string:\n\t\treturn v.UnmarshalText([]byte(src))\n\tcase nil:\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"cannot scan %T as Version\", src)\n\t}\n}\n\n// Value implements the driver.Valuer interface.\nfunc (v *Version) Value() (driver.Value, error) {\n\treturn v.String(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/version_collection.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage version\n\n// Collection is a type that implements the sort.Interface interface\n// so that versions can be sorted.\ntype Collection []*Version\n\nfunc (v Collection) Len() int {\n\treturn len(v)\n}\n\nfunc (v Collection) Less(i, j int) bool {\n\treturn v[i].LessThan(v[j])\n}\n\nfunc (v Collection) Swap(i, j int) {\n\tv[i], v[j] = v[j], v[i]\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/.gitattributes",
    "content": "* -text\n*.bin -text -diff\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n/s2/cmd/_s2sx/sfx-exe\n\n# Linux perf files\nperf.data\nperf.data.old\n\n# gdb history\n.gdb_history\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/.goreleaser.yml",
    "content": "# This is an example goreleaser.yaml file with some sane defaults.\n# Make sure to check the documentation at http://goreleaser.com\nbefore:\n  hooks:\n    - ./gen.sh\n\nbuilds:\n  -\n    id: \"s2c\"\n    binary: s2c\n    main: ./s2/cmd/s2c/main.go\n    flags:\n      - -trimpath\n    env:\n      - CGO_ENABLED=0\n    goos:\n      - aix\n      - linux\n      - freebsd\n      - netbsd\n      - windows\n      - darwin\n    goarch:\n      - 386\n      - amd64\n      - arm\n      - arm64\n      - ppc64\n      - ppc64le\n      - mips64\n      - mips64le\n    goarm:\n      - 7\n  -\n    id: \"s2d\"\n    binary: s2d\n    main: ./s2/cmd/s2d/main.go\n    flags:\n      - -trimpath\n    env:\n      - CGO_ENABLED=0\n    goos:\n      - aix\n      - linux\n      - freebsd\n      - netbsd\n      - windows\n      - darwin\n    goarch:\n      - 386\n      - amd64\n      - arm\n      - arm64\n      - ppc64\n      - ppc64le\n      - mips64\n      - mips64le\n    goarm:\n      - 7\n  -\n    id: \"s2sx\"\n    binary: s2sx\n    main: ./s2/cmd/_s2sx/main.go\n    flags:\n      - -modfile=s2sx.mod\n      - -trimpath\n    env:\n      - CGO_ENABLED=0\n    goos:\n      - aix\n      - linux\n      - freebsd\n      - netbsd\n      - windows\n      - darwin\n    goarch:\n      - 386\n      - amd64\n      - arm\n      - arm64\n      - ppc64\n      - ppc64le\n      - mips64\n      - mips64le\n    goarm:\n      - 7\n\narchives:\n  -\n    id: s2-binaries\n    name_template: \"s2-{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}\"\n    format_overrides:\n      - goos: windows\n        format: zip\n    files:\n      - unpack/*\n      - s2/LICENSE\n      - s2/README.md\nchecksum:\n  name_template: 'checksums.txt'\nsnapshot:\n  name_template: \"{{ .Tag }}-next\"\nchangelog:\n  sort: asc\n  filters:\n    exclude:\n    - '^doc:'\n    - '^docs:'\n    - '^test:'\n    - '^tests:'\n    - '^Update\\sREADME.md'\n\nnfpms:\n  -\n    file_name_template: \"s2_package__{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}\"\n    vendor: Klaus Post\n    homepage: https://github.com/klauspost/compress\n    maintainer: Klaus Post <klauspost@gmail.com>\n    description: S2 Compression Tool\n    license: BSD 3-Clause\n    formats:\n      - deb\n      - rpm\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/LICENSE",
    "content": "Copyright (c) 2012 The Go Authors. All rights reserved.\nCopyright (c) 2019 Klaus Post. All 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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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\n------------------\n\nFiles: gzhttp/*\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 2016-2017 The New York Times Company\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\nFiles: s2/cmd/internal/readahead/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Klaus Post\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---------------------\nFiles: snappy/*\nFiles: internal/snapref/*\n\nCopyright (c) 2011 The Snappy-Go Authors. All 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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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\n-----------------\n\nFiles: s2/cmd/internal/filepathx/*\n\nCopyright 2016 The filepathx Authors\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": "vendor/github.com/klauspost/compress/README.md",
    "content": "# compress\r\n\r\nThis package provides various compression algorithms.\r\n\r\n* [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression and decompression in pure Go.\r\n* [S2](https://github.com/klauspost/compress/tree/master/s2#s2-compression) is a high performance replacement for Snappy.\r\n* Optimized [deflate](https://godoc.org/github.com/klauspost/compress/flate) packages which can be used as a dropin replacement for [gzip](https://godoc.org/github.com/klauspost/compress/gzip), [zip](https://godoc.org/github.com/klauspost/compress/zip) and [zlib](https://godoc.org/github.com/klauspost/compress/zlib).\r\n* [snappy](https://github.com/klauspost/compress/tree/master/snappy) is a drop-in replacement for `github.com/golang/snappy` offering better compression and concurrent streams.\r\n* [huff0](https://github.com/klauspost/compress/tree/master/huff0) and [FSE](https://github.com/klauspost/compress/tree/master/fse) implementations for raw entropy encoding.\r\n* [gzhttp](https://github.com/klauspost/compress/tree/master/gzhttp) Provides client and server wrappers for handling gzipped requests efficiently.\r\n* [pgzip](https://github.com/klauspost/pgzip) is a separate package that provides a very fast parallel gzip implementation.\r\n\r\n[![Go Reference](https://pkg.go.dev/badge/klauspost/compress.svg)](https://pkg.go.dev/github.com/klauspost/compress?tab=subdirectories)\r\n[![Go](https://github.com/klauspost/compress/actions/workflows/go.yml/badge.svg)](https://github.com/klauspost/compress/actions/workflows/go.yml)\r\n[![Sourcegraph Badge](https://sourcegraph.com/github.com/klauspost/compress/-/badge.svg)](https://sourcegraph.com/github.com/klauspost/compress?badge)\r\n\r\n# changelog\r\n\r\n* Feb 5th, 2024 - [1.17.6](https://github.com/klauspost/compress/releases/tag/v1.17.6)\r\n\t* zstd: Fix incorrect repeat coding in best mode https://github.com/klauspost/compress/pull/923\r\n\t* s2: Fix DecodeConcurrent deadlock on errors https://github.com/klauspost/compress/pull/925\r\n  \r\n* Jan 26th, 2024 - [v1.17.5](https://github.com/klauspost/compress/releases/tag/v1.17.5)\r\n\t* flate: Fix reset with dictionary on custom window encodes https://github.com/klauspost/compress/pull/912\r\n\t* zstd: Add Frame header encoding and stripping https://github.com/klauspost/compress/pull/908\r\n\t* zstd: Limit better/best default window to 8MB https://github.com/klauspost/compress/pull/913\r\n\t* zstd: Speed improvements by @greatroar in https://github.com/klauspost/compress/pull/896 https://github.com/klauspost/compress/pull/910\r\n\t* s2: Fix callbacks for skippable blocks and disallow 0xfe (Padding) by @Jille in https://github.com/klauspost/compress/pull/916 https://github.com/klauspost/compress/pull/917\r\nhttps://github.com/klauspost/compress/pull/919 https://github.com/klauspost/compress/pull/918\r\n\r\n* Dec 1st, 2023 - [v1.17.4](https://github.com/klauspost/compress/releases/tag/v1.17.4)\r\n\t* huff0: Speed up symbol counting by @greatroar in https://github.com/klauspost/compress/pull/887\r\n\t* huff0: Remove byteReader by @greatroar in https://github.com/klauspost/compress/pull/886\r\n\t* gzhttp: Allow overriding decompression on transport https://github.com/klauspost/compress/pull/892\r\n\t* gzhttp: Clamp compression level https://github.com/klauspost/compress/pull/890\r\n\t* gzip: Error out if reserved bits are set https://github.com/klauspost/compress/pull/891\r\n\r\n* Nov 15th, 2023 - [v1.17.3](https://github.com/klauspost/compress/releases/tag/v1.17.3)\r\n\t* fse: Fix max header size https://github.com/klauspost/compress/pull/881\r\n\t* zstd: Improve better/best compression https://github.com/klauspost/compress/pull/877\r\n\t* gzhttp: Fix missing content type on Close https://github.com/klauspost/compress/pull/883\r\n\r\n* Oct 22nd, 2023 - [v1.17.2](https://github.com/klauspost/compress/releases/tag/v1.17.2)\r\n\t* zstd: Fix rare *CORRUPTION* output in \"best\" mode. See https://github.com/klauspost/compress/pull/876\r\n\r\n* Oct 14th, 2023 - [v1.17.1](https://github.com/klauspost/compress/releases/tag/v1.17.1)\r\n\t* s2: Fix S2 \"best\" dictionary wrong encoding by @klauspost in https://github.com/klauspost/compress/pull/871\r\n\t* flate: Reduce allocations in decompressor and minor code improvements by @fakefloordiv in https://github.com/klauspost/compress/pull/869\r\n\t* s2: Fix EstimateBlockSize on 6&7 length input by @klauspost in https://github.com/klauspost/compress/pull/867\r\n\r\n* Sept 19th, 2023 - [v1.17.0](https://github.com/klauspost/compress/releases/tag/v1.17.0)\r\n\t* Add experimental dictionary builder  https://github.com/klauspost/compress/pull/853\r\n\t* Add xerial snappy read/writer https://github.com/klauspost/compress/pull/838\r\n\t* flate: Add limited window compression https://github.com/klauspost/compress/pull/843\r\n\t* s2: Do 2 overlapping match checks https://github.com/klauspost/compress/pull/839\r\n\t* flate: Add amd64 assembly matchlen https://github.com/klauspost/compress/pull/837\r\n\t* gzip: Copy bufio.Reader on Reset by @thatguystone in https://github.com/klauspost/compress/pull/860\r\n\r\n<details>\r\n\t<summary>See changes to v1.16.x</summary>\r\n\r\n   \r\n* July 1st, 2023 - [v1.16.7](https://github.com/klauspost/compress/releases/tag/v1.16.7)\r\n\t* zstd: Fix default level first dictionary encode https://github.com/klauspost/compress/pull/829\r\n\t* s2: add GetBufferCapacity() method by @GiedriusS in https://github.com/klauspost/compress/pull/832\r\n\r\n* June 13, 2023 - [v1.16.6](https://github.com/klauspost/compress/releases/tag/v1.16.6)\r\n\t* zstd: correctly ignore WithEncoderPadding(1) by @ianlancetaylor in https://github.com/klauspost/compress/pull/806\r\n\t* zstd: Add amd64 match length assembly https://github.com/klauspost/compress/pull/824\r\n\t* gzhttp: Handle informational headers by @rtribotte in https://github.com/klauspost/compress/pull/815\r\n\t* s2: Improve Better compression slightly https://github.com/klauspost/compress/pull/663\r\n\r\n* Apr 16, 2023 - [v1.16.5](https://github.com/klauspost/compress/releases/tag/v1.16.5)\r\n\t* zstd: readByte needs to use io.ReadFull by @jnoxon in https://github.com/klauspost/compress/pull/802\r\n\t* gzip: Fix WriterTo after initial read https://github.com/klauspost/compress/pull/804\r\n\r\n* Apr 5, 2023 - [v1.16.4](https://github.com/klauspost/compress/releases/tag/v1.16.4)\r\n\t* zstd: Improve zstd best efficiency by @greatroar and @klauspost in https://github.com/klauspost/compress/pull/784\r\n\t* zstd: Respect WithAllLitEntropyCompression https://github.com/klauspost/compress/pull/792\r\n\t* zstd: Fix amd64 not always detecting corrupt data https://github.com/klauspost/compress/pull/785\r\n\t* zstd: Various minor improvements by @greatroar in https://github.com/klauspost/compress/pull/788 https://github.com/klauspost/compress/pull/794 https://github.com/klauspost/compress/pull/795\r\n\t* s2: Fix huge block overflow https://github.com/klauspost/compress/pull/779\r\n\t* s2: Allow CustomEncoder fallback https://github.com/klauspost/compress/pull/780\r\n\t* gzhttp: Suppport ResponseWriter Unwrap() in gzhttp handler by @jgimenez in https://github.com/klauspost/compress/pull/799\r\n\r\n* Mar 13, 2023 - [v1.16.1](https://github.com/klauspost/compress/releases/tag/v1.16.1)\r\n\t* zstd: Speed up + improve best encoder by @greatroar in https://github.com/klauspost/compress/pull/776\r\n\t* gzhttp: Add optional [BREACH mitigation](https://github.com/klauspost/compress/tree/master/gzhttp#breach-mitigation). https://github.com/klauspost/compress/pull/762 https://github.com/klauspost/compress/pull/768 https://github.com/klauspost/compress/pull/769 https://github.com/klauspost/compress/pull/770 https://github.com/klauspost/compress/pull/767\r\n\t* s2: Add Intel LZ4s converter https://github.com/klauspost/compress/pull/766\r\n\t* zstd: Minor bug fixes https://github.com/klauspost/compress/pull/771 https://github.com/klauspost/compress/pull/772 https://github.com/klauspost/compress/pull/773\r\n\t* huff0: Speed up compress1xDo by @greatroar in https://github.com/klauspost/compress/pull/774\r\n\r\n* Feb 26, 2023 - [v1.16.0](https://github.com/klauspost/compress/releases/tag/v1.16.0)\r\n\t* s2: Add [Dictionary](https://github.com/klauspost/compress/tree/master/s2#dictionaries) support.  https://github.com/klauspost/compress/pull/685\r\n\t* s2: Add Compression Size Estimate.  https://github.com/klauspost/compress/pull/752\r\n\t* s2: Add support for custom stream encoder. https://github.com/klauspost/compress/pull/755\r\n\t* s2: Add LZ4 block converter. https://github.com/klauspost/compress/pull/748\r\n\t* s2: Support io.ReaderAt in ReadSeeker. https://github.com/klauspost/compress/pull/747\r\n\t* s2c/s2sx: Use concurrent decoding. https://github.com/klauspost/compress/pull/746\r\n</details>\r\n\r\n<details>\r\n\t<summary>See changes to v1.15.x</summary>\r\n\t\r\n* Jan 21st, 2023 (v1.15.15)\r\n\t* deflate: Improve level 7-9 by @klauspost in https://github.com/klauspost/compress/pull/739\r\n\t* zstd: Add delta encoding support by @greatroar in https://github.com/klauspost/compress/pull/728\r\n\t* zstd: Various speed improvements by @greatroar https://github.com/klauspost/compress/pull/741 https://github.com/klauspost/compress/pull/734 https://github.com/klauspost/compress/pull/736 https://github.com/klauspost/compress/pull/744 https://github.com/klauspost/compress/pull/743 https://github.com/klauspost/compress/pull/745\r\n\t* gzhttp: Add SuffixETag() and DropETag() options to prevent ETag collisions on compressed responses by @willbicks in https://github.com/klauspost/compress/pull/740\r\n\r\n* Jan 3rd, 2023 (v1.15.14)\r\n\r\n\t* flate: Improve speed in big stateless blocks https://github.com/klauspost/compress/pull/718\r\n\t* zstd: Minor speed tweaks by @greatroar in https://github.com/klauspost/compress/pull/716 https://github.com/klauspost/compress/pull/720\r\n\t* export NoGzipResponseWriter for custom ResponseWriter wrappers by @harshavardhana in https://github.com/klauspost/compress/pull/722\r\n\t* s2: Add example for indexing and existing stream https://github.com/klauspost/compress/pull/723\r\n\r\n* Dec 11, 2022 (v1.15.13)\r\n\t* zstd: Add [MaxEncodedSize](https://pkg.go.dev/github.com/klauspost/compress@v1.15.13/zstd#Encoder.MaxEncodedSize) to encoder  https://github.com/klauspost/compress/pull/691\r\n\t* zstd: Various tweaks and improvements https://github.com/klauspost/compress/pull/693 https://github.com/klauspost/compress/pull/695 https://github.com/klauspost/compress/pull/696 https://github.com/klauspost/compress/pull/701 https://github.com/klauspost/compress/pull/702 https://github.com/klauspost/compress/pull/703 https://github.com/klauspost/compress/pull/704 https://github.com/klauspost/compress/pull/705 https://github.com/klauspost/compress/pull/706 https://github.com/klauspost/compress/pull/707 https://github.com/klauspost/compress/pull/708\r\n\r\n* Oct 26, 2022 (v1.15.12)\r\n\r\n\t* zstd: Tweak decoder allocs. https://github.com/klauspost/compress/pull/680\r\n\t* gzhttp: Always delete `HeaderNoCompression` https://github.com/klauspost/compress/pull/683\r\n\r\n* Sept 26, 2022 (v1.15.11)\r\n\r\n\t* flate: Improve level 1-3 compression  https://github.com/klauspost/compress/pull/678\r\n\t* zstd: Improve \"best\" compression by @nightwolfz in https://github.com/klauspost/compress/pull/677\r\n\t* zstd: Fix+reduce decompression allocations https://github.com/klauspost/compress/pull/668\r\n\t* zstd: Fix non-effective noescape tag https://github.com/klauspost/compress/pull/667\r\n\r\n* Sept 16, 2022 (v1.15.10)\r\n\r\n\t* zstd: Add [WithDecodeAllCapLimit](https://pkg.go.dev/github.com/klauspost/compress@v1.15.10/zstd#WithDecodeAllCapLimit) https://github.com/klauspost/compress/pull/649\r\n\t* Add Go 1.19 - deprecate Go 1.16  https://github.com/klauspost/compress/pull/651\r\n\t* flate: Improve level 5+6 compression https://github.com/klauspost/compress/pull/656\r\n\t* zstd: Improve \"better\" compresssion  https://github.com/klauspost/compress/pull/657\r\n\t* s2: Improve \"best\" compression https://github.com/klauspost/compress/pull/658\r\n\t* s2: Improve \"better\" compression. https://github.com/klauspost/compress/pull/635\r\n\t* s2: Slightly faster non-assembly decompression https://github.com/klauspost/compress/pull/646\r\n\t* Use arrays for constant size copies https://github.com/klauspost/compress/pull/659\r\n\r\n* July 21, 2022 (v1.15.9)\r\n\r\n\t* zstd: Fix decoder crash on amd64 (no BMI) on invalid input https://github.com/klauspost/compress/pull/645\r\n\t* zstd: Disable decoder extended memory copies (amd64) due to possible crashes https://github.com/klauspost/compress/pull/644\r\n\t* zstd: Allow single segments up to \"max decoded size\" by @klauspost in https://github.com/klauspost/compress/pull/643\r\n\r\n* July 13, 2022 (v1.15.8)\r\n\r\n\t* gzip: fix stack exhaustion bug in Reader.Read https://github.com/klauspost/compress/pull/641\r\n\t* s2: Add Index header trim/restore https://github.com/klauspost/compress/pull/638\r\n\t* zstd: Optimize seqdeq amd64 asm by @greatroar in https://github.com/klauspost/compress/pull/636\r\n\t* zstd: Improve decoder memcopy https://github.com/klauspost/compress/pull/637\r\n\t* huff0: Pass a single bitReader pointer to asm by @greatroar in https://github.com/klauspost/compress/pull/634\r\n\t* zstd: Branchless getBits for amd64 w/o BMI2 by @greatroar in https://github.com/klauspost/compress/pull/640\r\n\t* gzhttp: Remove header before writing https://github.com/klauspost/compress/pull/639\r\n\r\n* June 29, 2022 (v1.15.7)\r\n\r\n\t* s2: Fix absolute forward seeks  https://github.com/klauspost/compress/pull/633\r\n\t* zip: Merge upstream  https://github.com/klauspost/compress/pull/631\r\n\t* zip: Re-add zip64 fix https://github.com/klauspost/compress/pull/624\r\n\t* zstd: translate fseDecoder.buildDtable into asm by @WojciechMula in https://github.com/klauspost/compress/pull/598\r\n\t* flate: Faster histograms  https://github.com/klauspost/compress/pull/620\r\n\t* deflate: Use compound hcode  https://github.com/klauspost/compress/pull/622\r\n\r\n* June 3, 2022 (v1.15.6)\r\n\t* s2: Improve coding for long, close matches https://github.com/klauspost/compress/pull/613\r\n\t* s2c: Add Snappy/S2 stream recompression https://github.com/klauspost/compress/pull/611\r\n\t* zstd: Always use configured block size https://github.com/klauspost/compress/pull/605\r\n\t* zstd: Fix incorrect hash table placement for dict encoding in default https://github.com/klauspost/compress/pull/606\r\n\t* zstd: Apply default config to ZipDecompressor without options https://github.com/klauspost/compress/pull/608\r\n\t* gzhttp: Exclude more common archive formats https://github.com/klauspost/compress/pull/612\r\n\t* s2: Add ReaderIgnoreCRC https://github.com/klauspost/compress/pull/609\r\n\t* s2: Remove sanity load on index creation https://github.com/klauspost/compress/pull/607\r\n\t* snappy: Use dedicated function for scoring https://github.com/klauspost/compress/pull/614\r\n\t* s2c+s2d: Use official snappy framed extension https://github.com/klauspost/compress/pull/610\r\n\r\n* May 25, 2022 (v1.15.5)\r\n\t* s2: Add concurrent stream decompression https://github.com/klauspost/compress/pull/602\r\n\t* s2: Fix final emit oob read crash on amd64 https://github.com/klauspost/compress/pull/601\r\n\t* huff0: asm implementation of Decompress1X by @WojciechMula https://github.com/klauspost/compress/pull/596\r\n\t* zstd: Use 1 less goroutine for stream decoding https://github.com/klauspost/compress/pull/588\r\n\t* zstd: Copy literal in 16 byte blocks when possible https://github.com/klauspost/compress/pull/592\r\n\t* zstd: Speed up when WithDecoderLowmem(false) https://github.com/klauspost/compress/pull/599\r\n\t* zstd: faster next state update in BMI2 version of decode by @WojciechMula in https://github.com/klauspost/compress/pull/593\r\n\t* huff0: Do not check max size when reading table. https://github.com/klauspost/compress/pull/586\r\n\t* flate: Inplace hashing for level 7-9 by @klauspost in https://github.com/klauspost/compress/pull/590\r\n\r\n\r\n* May 11, 2022 (v1.15.4)\r\n\t* huff0: decompress directly into output by @WojciechMula in [#577](https://github.com/klauspost/compress/pull/577)\r\n\t* inflate: Keep dict on stack [#581](https://github.com/klauspost/compress/pull/581)\r\n\t* zstd: Faster decoding memcopy in asm [#583](https://github.com/klauspost/compress/pull/583)\r\n\t* zstd: Fix ignored crc [#580](https://github.com/klauspost/compress/pull/580)\r\n\r\n* May 5, 2022 (v1.15.3)\r\n\t* zstd: Allow to ignore checksum checking by @WojciechMula [#572](https://github.com/klauspost/compress/pull/572)\r\n\t* s2: Fix incorrect seek for io.SeekEnd in [#575](https://github.com/klauspost/compress/pull/575)\r\n\r\n* Apr 26, 2022 (v1.15.2)\r\n\t* zstd: Add x86-64 assembly for decompression on streams and blocks. Contributed by [@WojciechMula](https://github.com/WojciechMula). Typically 2x faster.  [#528](https://github.com/klauspost/compress/pull/528) [#531](https://github.com/klauspost/compress/pull/531) [#545](https://github.com/klauspost/compress/pull/545) [#537](https://github.com/klauspost/compress/pull/537)\r\n\t* zstd: Add options to ZipDecompressor and fixes [#539](https://github.com/klauspost/compress/pull/539)\r\n\t* s2: Use sorted search for index [#555](https://github.com/klauspost/compress/pull/555)\r\n\t* Minimum version is Go 1.16, added CI test on 1.18.\r\n\r\n* Mar 11, 2022 (v1.15.1)\r\n\t* huff0: Add x86 assembly of Decode4X by @WojciechMula in [#512](https://github.com/klauspost/compress/pull/512)\r\n\t* zstd: Reuse zip decoders in [#514](https://github.com/klauspost/compress/pull/514)\r\n\t* zstd: Detect extra block data and report as corrupted in [#520](https://github.com/klauspost/compress/pull/520)\r\n\t* zstd: Handle zero sized frame content size stricter in [#521](https://github.com/klauspost/compress/pull/521)\r\n\t* zstd: Add stricter block size checks in [#523](https://github.com/klauspost/compress/pull/523)\r\n\r\n* Mar 3, 2022 (v1.15.0)\r\n\t* zstd: Refactor decoder by @klauspost in [#498](https://github.com/klauspost/compress/pull/498)\r\n\t* zstd: Add stream encoding without goroutines by @klauspost in [#505](https://github.com/klauspost/compress/pull/505)\r\n\t* huff0: Prevent single blocks exceeding 16 bits by @klauspost in[#507](https://github.com/klauspost/compress/pull/507)\r\n\t* flate: Inline literal emission by @klauspost in [#509](https://github.com/klauspost/compress/pull/509)\r\n\t* gzhttp: Add zstd to transport by @klauspost in [#400](https://github.com/klauspost/compress/pull/400)\r\n\t* gzhttp: Make content-type optional by @klauspost in [#510](https://github.com/klauspost/compress/pull/510)\r\n\r\nBoth compression and decompression now supports \"synchronous\" stream operations. This means that whenever \"concurrency\" is set to 1, they will operate without spawning goroutines.\r\n\r\nStream decompression is now faster on asynchronous, since the goroutine allocation much more effectively splits the workload. On typical streams this will typically use 2 cores fully for decompression. When a stream has finished decoding no goroutines will be left over, so decoders can now safely be pooled and still be garbage collected.\r\n\r\nWhile the release has been extensively tested, it is recommended to testing when upgrading.\r\n\r\n</details>\r\n\r\n<details>\r\n\t<summary>See changes to v1.14.x</summary>\r\n\t\r\n* Feb 22, 2022 (v1.14.4)\r\n\t* flate: Fix rare huffman only (-2) corruption. [#503](https://github.com/klauspost/compress/pull/503)\r\n\t* zip: Update deprecated CreateHeaderRaw to correctly call CreateRaw by @saracen in [#502](https://github.com/klauspost/compress/pull/502)\r\n\t* zip: don't read data descriptor early by @saracen in [#501](https://github.com/klauspost/compress/pull/501)  #501\r\n\t* huff0: Use static decompression buffer up to 30% faster by @klauspost in [#499](https://github.com/klauspost/compress/pull/499) [#500](https://github.com/klauspost/compress/pull/500)\r\n\r\n* Feb 17, 2022 (v1.14.3)\r\n\t* flate: Improve fastest levels compression speed ~10% more throughput. [#482](https://github.com/klauspost/compress/pull/482) [#489](https://github.com/klauspost/compress/pull/489) [#490](https://github.com/klauspost/compress/pull/490) [#491](https://github.com/klauspost/compress/pull/491) [#494](https://github.com/klauspost/compress/pull/494)  [#478](https://github.com/klauspost/compress/pull/478)\r\n\t* flate: Faster decompression speed, ~5-10%. [#483](https://github.com/klauspost/compress/pull/483)\r\n\t* s2: Faster compression with Go v1.18 and amd64 microarch level 3+. [#484](https://github.com/klauspost/compress/pull/484) [#486](https://github.com/klauspost/compress/pull/486)\r\n\r\n* Jan 25, 2022 (v1.14.2)\r\n\t* zstd: improve header decoder by @dsnet  [#476](https://github.com/klauspost/compress/pull/476)\r\n\t* zstd: Add bigger default blocks  [#469](https://github.com/klauspost/compress/pull/469)\r\n\t* zstd: Remove unused decompression buffer [#470](https://github.com/klauspost/compress/pull/470)\r\n\t* zstd: Fix logically dead code by @ningmingxiao [#472](https://github.com/klauspost/compress/pull/472)\r\n\t* flate: Improve level 7-9 [#471](https://github.com/klauspost/compress/pull/471) [#473](https://github.com/klauspost/compress/pull/473)\r\n\t* zstd: Add noasm tag for xxhash [#475](https://github.com/klauspost/compress/pull/475)\r\n\r\n* Jan 11, 2022 (v1.14.1)\r\n\t* s2: Add stream index in [#462](https://github.com/klauspost/compress/pull/462)\r\n\t* flate: Speed and efficiency improvements in [#439](https://github.com/klauspost/compress/pull/439) [#461](https://github.com/klauspost/compress/pull/461) [#455](https://github.com/klauspost/compress/pull/455) [#452](https://github.com/klauspost/compress/pull/452) [#458](https://github.com/klauspost/compress/pull/458)\r\n\t* zstd: Performance improvement in [#420]( https://github.com/klauspost/compress/pull/420) [#456](https://github.com/klauspost/compress/pull/456) [#437](https://github.com/klauspost/compress/pull/437) [#467](https://github.com/klauspost/compress/pull/467) [#468](https://github.com/klauspost/compress/pull/468)\r\n\t* zstd: add arm64 xxhash assembly in [#464](https://github.com/klauspost/compress/pull/464)\r\n\t* Add garbled for binaries for s2 in [#445](https://github.com/klauspost/compress/pull/445)\r\n</details>\r\n\r\n<details>\r\n\t<summary>See changes to v1.13.x</summary>\r\n\t\r\n* Aug 30, 2021 (v1.13.5)\r\n\t* gz/zlib/flate: Alias stdlib errors [#425](https://github.com/klauspost/compress/pull/425)\r\n\t* s2: Add block support to commandline tools [#413](https://github.com/klauspost/compress/pull/413)\r\n\t* zstd: pooledZipWriter should return Writers to the same pool [#426](https://github.com/klauspost/compress/pull/426)\r\n\t* Removed golang/snappy as external dependency for tests [#421](https://github.com/klauspost/compress/pull/421)\r\n\r\n* Aug 12, 2021 (v1.13.4)\r\n\t* Add [snappy replacement package](https://github.com/klauspost/compress/tree/master/snappy).\r\n\t* zstd: Fix incorrect encoding in \"best\" mode [#415](https://github.com/klauspost/compress/pull/415)\r\n\r\n* Aug 3, 2021 (v1.13.3) \r\n\t* zstd: Improve Best compression [#404](https://github.com/klauspost/compress/pull/404)\r\n\t* zstd: Fix WriteTo error forwarding [#411](https://github.com/klauspost/compress/pull/411)\r\n\t* gzhttp: Return http.HandlerFunc instead of http.Handler. Unlikely breaking change. [#406](https://github.com/klauspost/compress/pull/406)\r\n\t* s2sx: Fix max size error [#399](https://github.com/klauspost/compress/pull/399)\r\n\t* zstd: Add optional stream content size on reset [#401](https://github.com/klauspost/compress/pull/401)\r\n\t* zstd: use SpeedBestCompression for level >= 10 [#410](https://github.com/klauspost/compress/pull/410)\r\n\r\n* Jun 14, 2021 (v1.13.1)\r\n\t* s2: Add full Snappy output support  [#396](https://github.com/klauspost/compress/pull/396)\r\n\t* zstd: Add configurable [Decoder window](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithDecoderMaxWindow) size [#394](https://github.com/klauspost/compress/pull/394)\r\n\t* gzhttp: Add header to skip compression  [#389](https://github.com/klauspost/compress/pull/389)\r\n\t* s2: Improve speed with bigger output margin  [#395](https://github.com/klauspost/compress/pull/395)\r\n\r\n* Jun 3, 2021 (v1.13.0)\r\n\t* Added [gzhttp](https://github.com/klauspost/compress/tree/master/gzhttp#gzip-handler) which allows wrapping HTTP servers and clients with GZIP compressors.\r\n\t* zstd: Detect short invalid signatures [#382](https://github.com/klauspost/compress/pull/382)\r\n\t* zstd: Spawn decoder goroutine only if needed. [#380](https://github.com/klauspost/compress/pull/380)\r\n</details>\r\n\r\n\r\n<details>\r\n\t<summary>See changes to v1.12.x</summary>\r\n\t\r\n* May 25, 2021 (v1.12.3)\r\n\t* deflate: Better/faster Huffman encoding [#374](https://github.com/klauspost/compress/pull/374)\r\n\t* deflate: Allocate less for history. [#375](https://github.com/klauspost/compress/pull/375)\r\n\t* zstd: Forward read errors [#373](https://github.com/klauspost/compress/pull/373) \r\n\r\n* Apr 27, 2021 (v1.12.2)\r\n\t* zstd: Improve better/best compression [#360](https://github.com/klauspost/compress/pull/360) [#364](https://github.com/klauspost/compress/pull/364) [#365](https://github.com/klauspost/compress/pull/365)\r\n\t* zstd: Add helpers to compress/decompress zstd inside zip files [#363](https://github.com/klauspost/compress/pull/363)\r\n\t* deflate: Improve level 5+6 compression [#367](https://github.com/klauspost/compress/pull/367)\r\n\t* s2: Improve better/best compression [#358](https://github.com/klauspost/compress/pull/358) [#359](https://github.com/klauspost/compress/pull/358)\r\n\t* s2: Load after checking src limit on amd64. [#362](https://github.com/klauspost/compress/pull/362)\r\n\t* s2sx: Limit max executable size [#368](https://github.com/klauspost/compress/pull/368) \r\n\r\n* Apr 14, 2021 (v1.12.1)\r\n\t* snappy package removed. Upstream added as dependency.\r\n\t* s2: Better compression in \"best\" mode [#353](https://github.com/klauspost/compress/pull/353)\r\n\t* s2sx: Add stdin input and detect pre-compressed from signature [#352](https://github.com/klauspost/compress/pull/352)\r\n\t* s2c/s2d: Add http as possible input [#348](https://github.com/klauspost/compress/pull/348)\r\n\t* s2c/s2d/s2sx: Always truncate when writing files [#352](https://github.com/klauspost/compress/pull/352)\r\n\t* zstd: Reduce memory usage further when using [WithLowerEncoderMem](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithLowerEncoderMem) [#346](https://github.com/klauspost/compress/pull/346)\r\n\t* s2: Fix potential problem with amd64 assembly and profilers [#349](https://github.com/klauspost/compress/pull/349)\r\n</details>\r\n\r\n<details>\r\n\t<summary>See changes to v1.11.x</summary>\r\n\t\r\n* Mar 26, 2021 (v1.11.13)\r\n\t* zstd: Big speedup on small dictionary encodes [#344](https://github.com/klauspost/compress/pull/344) [#345](https://github.com/klauspost/compress/pull/345)\r\n\t* zstd: Add [WithLowerEncoderMem](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithLowerEncoderMem) encoder option [#336](https://github.com/klauspost/compress/pull/336)\r\n\t* deflate: Improve entropy compression [#338](https://github.com/klauspost/compress/pull/338)\r\n\t* s2: Clean up and minor performance improvement in best [#341](https://github.com/klauspost/compress/pull/341)\r\n\r\n* Mar 5, 2021 (v1.11.12)\r\n\t* s2: Add `s2sx` binary that creates [self extracting archives](https://github.com/klauspost/compress/tree/master/s2#s2sx-self-extracting-archives).\r\n\t* s2: Speed up decompression on non-assembly platforms [#328](https://github.com/klauspost/compress/pull/328)\r\n\r\n* Mar 1, 2021 (v1.11.9)\r\n\t* s2: Add ARM64 decompression assembly. Around 2x output speed. [#324](https://github.com/klauspost/compress/pull/324)\r\n\t* s2: Improve \"better\" speed and efficiency. [#325](https://github.com/klauspost/compress/pull/325)\r\n\t* s2: Fix binaries.\r\n\r\n* Feb 25, 2021 (v1.11.8)\r\n\t* s2: Fixed occational out-of-bounds write on amd64. Upgrade recommended.\r\n\t* s2: Add AMD64 assembly for better mode. 25-50% faster. [#315](https://github.com/klauspost/compress/pull/315)\r\n\t* s2: Less upfront decoder allocation. [#322](https://github.com/klauspost/compress/pull/322)\r\n\t* zstd: Faster \"compression\" of incompressible data. [#314](https://github.com/klauspost/compress/pull/314)\r\n\t* zip: Fix zip64 headers. [#313](https://github.com/klauspost/compress/pull/313)\r\n  \r\n* Jan 14, 2021 (v1.11.7)\r\n\t* Use Bytes() interface to get bytes across packages. [#309](https://github.com/klauspost/compress/pull/309)\r\n\t* s2: Add 'best' compression option.  [#310](https://github.com/klauspost/compress/pull/310)\r\n\t* s2: Add ReaderMaxBlockSize, changes `s2.NewReader` signature to include varargs. [#311](https://github.com/klauspost/compress/pull/311)\r\n\t* s2: Fix crash on small better buffers. [#308](https://github.com/klauspost/compress/pull/308)\r\n\t* s2: Clean up decoder. [#312](https://github.com/klauspost/compress/pull/312)\r\n\r\n* Jan 7, 2021 (v1.11.6)\r\n\t* zstd: Make decoder allocations smaller [#306](https://github.com/klauspost/compress/pull/306)\r\n\t* zstd: Free Decoder resources when Reset is called with a nil io.Reader  [#305](https://github.com/klauspost/compress/pull/305)\r\n\r\n* Dec 20, 2020 (v1.11.4)\r\n\t* zstd: Add Best compression mode [#304](https://github.com/klauspost/compress/pull/304)\r\n\t* Add header decoder [#299](https://github.com/klauspost/compress/pull/299)\r\n\t* s2: Add uncompressed stream option [#297](https://github.com/klauspost/compress/pull/297)\r\n\t* Simplify/speed up small blocks with known max size. [#300](https://github.com/klauspost/compress/pull/300)\r\n\t* zstd: Always reset literal dict encoder [#303](https://github.com/klauspost/compress/pull/303)\r\n\r\n* Nov 15, 2020 (v1.11.3)\r\n\t* inflate: 10-15% faster decompression  [#293](https://github.com/klauspost/compress/pull/293)\r\n\t* zstd: Tweak DecodeAll default allocation [#295](https://github.com/klauspost/compress/pull/295)\r\n\r\n* Oct 11, 2020 (v1.11.2)\r\n\t* s2: Fix out of bounds read in \"better\" block compression [#291](https://github.com/klauspost/compress/pull/291)\r\n\r\n* Oct 1, 2020 (v1.11.1)\r\n\t* zstd: Set allLitEntropy true in default configuration [#286](https://github.com/klauspost/compress/pull/286)\r\n\r\n* Sept 8, 2020 (v1.11.0)\r\n\t* zstd: Add experimental compression [dictionaries](https://github.com/klauspost/compress/tree/master/zstd#dictionaries) [#281](https://github.com/klauspost/compress/pull/281)\r\n\t* zstd: Fix mixed Write and ReadFrom calls [#282](https://github.com/klauspost/compress/pull/282)\r\n\t* inflate/gz: Limit variable shifts, ~5% faster decompression [#274](https://github.com/klauspost/compress/pull/274)\r\n</details>\r\n\r\n<details>\r\n\t<summary>See changes to v1.10.x</summary>\r\n \r\n* July 8, 2020 (v1.10.11) \r\n\t* zstd: Fix extra block when compressing with ReadFrom. [#278](https://github.com/klauspost/compress/pull/278)\r\n\t* huff0: Also populate compression table when reading decoding table. [#275](https://github.com/klauspost/compress/pull/275)\r\n\t\r\n* June 23, 2020 (v1.10.10) \r\n\t* zstd: Skip entropy compression in fastest mode when no matches. [#270](https://github.com/klauspost/compress/pull/270)\r\n\t\r\n* June 16, 2020 (v1.10.9): \r\n\t* zstd: API change for specifying dictionaries. See [#268](https://github.com/klauspost/compress/pull/268)\r\n\t* zip: update CreateHeaderRaw to handle zip64 fields. [#266](https://github.com/klauspost/compress/pull/266)\r\n\t* Fuzzit tests removed. The service has been purchased and is no longer available.\r\n\t\r\n* June 5, 2020 (v1.10.8): \r\n\t* 1.15x faster zstd block decompression. [#265](https://github.com/klauspost/compress/pull/265)\r\n\t\r\n* June 1, 2020 (v1.10.7): \r\n\t* Added zstd decompression [dictionary support](https://github.com/klauspost/compress/tree/master/zstd#dictionaries)\r\n\t* Increase zstd decompression speed up to 1.19x.  [#259](https://github.com/klauspost/compress/pull/259)\r\n\t* Remove internal reset call in zstd compression and reduce allocations. [#263](https://github.com/klauspost/compress/pull/263)\r\n\t\r\n* May 21, 2020: (v1.10.6) \r\n\t* zstd: Reduce allocations while decoding. [#258](https://github.com/klauspost/compress/pull/258), [#252](https://github.com/klauspost/compress/pull/252)\r\n\t* zstd: Stricter decompression checks.\r\n\t\r\n* April 12, 2020: (v1.10.5)\r\n\t* s2-commands: Flush output when receiving SIGINT. [#239](https://github.com/klauspost/compress/pull/239)\r\n\t\r\n* Apr 8, 2020: (v1.10.4) \r\n\t* zstd: Minor/special case optimizations. [#251](https://github.com/klauspost/compress/pull/251),  [#250](https://github.com/klauspost/compress/pull/250),  [#249](https://github.com/klauspost/compress/pull/249),  [#247](https://github.com/klauspost/compress/pull/247)\r\n* Mar 11, 2020: (v1.10.3) \r\n\t* s2: Use S2 encoder in pure Go mode for Snappy output as well. [#245](https://github.com/klauspost/compress/pull/245)\r\n\t* s2: Fix pure Go block encoder. [#244](https://github.com/klauspost/compress/pull/244)\r\n\t* zstd: Added \"better compression\" mode. [#240](https://github.com/klauspost/compress/pull/240)\r\n\t* zstd: Improve speed of fastest compression mode by 5-10% [#241](https://github.com/klauspost/compress/pull/241)\r\n\t* zstd: Skip creating encoders when not needed. [#238](https://github.com/klauspost/compress/pull/238)\r\n\t\r\n* Feb 27, 2020: (v1.10.2) \r\n\t* Close to 50% speedup in inflate (gzip/zip decompression). [#236](https://github.com/klauspost/compress/pull/236) [#234](https://github.com/klauspost/compress/pull/234) [#232](https://github.com/klauspost/compress/pull/232)\r\n\t* Reduce deflate level 1-6 memory usage up to 59%. [#227](https://github.com/klauspost/compress/pull/227)\r\n\t\r\n* Feb 18, 2020: (v1.10.1)\r\n\t* Fix zstd crash when resetting multiple times without sending data. [#226](https://github.com/klauspost/compress/pull/226)\r\n\t* deflate: Fix dictionary use on level 1-6. [#224](https://github.com/klauspost/compress/pull/224)\r\n\t* Remove deflate writer reference when closing. [#224](https://github.com/klauspost/compress/pull/224)\r\n\t\r\n* Feb 4, 2020: (v1.10.0) \r\n\t* Add optional dictionary to [stateless deflate](https://pkg.go.dev/github.com/klauspost/compress/flate?tab=doc#StatelessDeflate). Breaking change, send `nil` for previous behaviour. [#216](https://github.com/klauspost/compress/pull/216)\r\n\t* Fix buffer overflow on repeated small block deflate.  [#218](https://github.com/klauspost/compress/pull/218)\r\n\t* Allow copying content from an existing ZIP file without decompressing+compressing. [#214](https://github.com/klauspost/compress/pull/214)\r\n\t* Added [S2](https://github.com/klauspost/compress/tree/master/s2#s2-compression) AMD64 assembler and various optimizations. Stream speed >10GB/s.  [#186](https://github.com/klauspost/compress/pull/186)\r\n\r\n</details>\r\n\r\n<details>\r\n\t<summary>See changes prior to v1.10.0</summary>\r\n\r\n* Jan 20,2020 (v1.9.8) Optimize gzip/deflate with better size estimates and faster table generation. [#207](https://github.com/klauspost/compress/pull/207) by [luyu6056](https://github.com/luyu6056),  [#206](https://github.com/klauspost/compress/pull/206).\r\n* Jan 11, 2020: S2 Encode/Decode will use provided buffer if capacity is big enough. [#204](https://github.com/klauspost/compress/pull/204) \r\n* Jan 5, 2020: (v1.9.7) Fix another zstd regression in v1.9.5 - v1.9.6 removed.\r\n* Jan 4, 2020: (v1.9.6) Regression in v1.9.5 fixed causing corrupt zstd encodes in rare cases.\r\n* Jan 4, 2020: Faster IO in [s2c + s2d commandline tools](https://github.com/klauspost/compress/tree/master/s2#commandline-tools) compression/decompression. [#192](https://github.com/klauspost/compress/pull/192)\r\n* Dec 29, 2019: Removed v1.9.5 since fuzz tests showed a compatibility problem with the reference zstandard decoder.\r\n* Dec 29, 2019: (v1.9.5) zstd: 10-20% faster block compression. [#199](https://github.com/klauspost/compress/pull/199)\r\n* Dec 29, 2019: [zip](https://godoc.org/github.com/klauspost/compress/zip) package updated with latest Go features\r\n* Dec 29, 2019: zstd: Single segment flag condintions tweaked. [#197](https://github.com/klauspost/compress/pull/197)\r\n* Dec 18, 2019: s2: Faster compression when ReadFrom is used. [#198](https://github.com/klauspost/compress/pull/198)\r\n* Dec 10, 2019: s2: Fix repeat length output when just above at 16MB limit.\r\n* Dec 10, 2019: zstd: Add function to get decoder as io.ReadCloser. [#191](https://github.com/klauspost/compress/pull/191)\r\n* Dec 3, 2019: (v1.9.4) S2: limit max repeat length. [#188](https://github.com/klauspost/compress/pull/188)\r\n* Dec 3, 2019: Add [WithNoEntropyCompression](https://godoc.org/github.com/klauspost/compress/zstd#WithNoEntropyCompression) to zstd [#187](https://github.com/klauspost/compress/pull/187)\r\n* Dec 3, 2019: Reduce memory use for tests. Check for leaked goroutines.\r\n* Nov 28, 2019 (v1.9.3) Less allocations in stateless deflate.\r\n* Nov 28, 2019: 5-20% Faster huff0 decode. Impacts zstd as well. [#184](https://github.com/klauspost/compress/pull/184)\r\n* Nov 12, 2019 (v1.9.2) Added [Stateless Compression](#stateless-compression) for gzip/deflate.\r\n* Nov 12, 2019: Fixed zstd decompression of large single blocks. [#180](https://github.com/klauspost/compress/pull/180)\r\n* Nov 11, 2019: Set default  [s2c](https://github.com/klauspost/compress/tree/master/s2#commandline-tools) block size to 4MB.\r\n* Nov 11, 2019: Reduce inflate memory use by 1KB.\r\n* Nov 10, 2019: Less allocations in deflate bit writer.\r\n* Nov 10, 2019: Fix inconsistent error returned by zstd decoder.\r\n* Oct 28, 2019 (v1.9.1) ztsd: Fix crash when compressing blocks. [#174](https://github.com/klauspost/compress/pull/174)\r\n* Oct 24, 2019 (v1.9.0) zstd: Fix rare data corruption [#173](https://github.com/klauspost/compress/pull/173)\r\n* Oct 24, 2019 zstd: Fix huff0 out of buffer write [#171](https://github.com/klauspost/compress/pull/171) and always return errors [#172](https://github.com/klauspost/compress/pull/172) \r\n* Oct 10, 2019: Big deflate rewrite, 30-40% faster with better compression [#105](https://github.com/klauspost/compress/pull/105)\r\n\r\n</details>\r\n\r\n<details>\r\n\t<summary>See changes prior to v1.9.0</summary>\r\n\r\n* Oct 10, 2019: (v1.8.6) zstd: Allow partial reads to get flushed data. [#169](https://github.com/klauspost/compress/pull/169)\r\n* Oct 3, 2019: Fix inconsistent results on broken zstd streams.\r\n* Sep 25, 2019: Added `-rm` (remove source files) and `-q` (no output except errors) to `s2c` and `s2d` [commands](https://github.com/klauspost/compress/tree/master/s2#commandline-tools)\r\n* Sep 16, 2019: (v1.8.4) Add `s2c` and `s2d` [commandline tools](https://github.com/klauspost/compress/tree/master/s2#commandline-tools).\r\n* Sep 10, 2019: (v1.8.3) Fix s2 decoder [Skip](https://godoc.org/github.com/klauspost/compress/s2#Reader.Skip).\r\n* Sep 7, 2019: zstd: Added [WithWindowSize](https://godoc.org/github.com/klauspost/compress/zstd#WithWindowSize), contributed by [ianwilkes](https://github.com/ianwilkes).\r\n* Sep 5, 2019: (v1.8.2) Add [WithZeroFrames](https://godoc.org/github.com/klauspost/compress/zstd#WithZeroFrames) which adds full zero payload block encoding option.\r\n* Sep 5, 2019: Lazy initialization of zstandard predefined en/decoder tables.\r\n* Aug 26, 2019: (v1.8.1) S2: 1-2% compression increase in \"better\" compression mode.\r\n* Aug 26, 2019: zstd: Check maximum size of Huffman 1X compressed literals while decoding.\r\n* Aug 24, 2019: (v1.8.0) Added [S2 compression](https://github.com/klauspost/compress/tree/master/s2#s2-compression), a high performance replacement for Snappy. \r\n* Aug 21, 2019: (v1.7.6) Fixed minor issues found by fuzzer. One could lead to zstd not decompressing.\r\n* Aug 18, 2019: Add [fuzzit](https://fuzzit.dev/) continuous fuzzing.\r\n* Aug 14, 2019: zstd: Skip incompressible data 2x faster.  [#147](https://github.com/klauspost/compress/pull/147)\r\n* Aug 4, 2019 (v1.7.5): Better literal compression. [#146](https://github.com/klauspost/compress/pull/146)\r\n* Aug 4, 2019: Faster zstd compression. [#143](https://github.com/klauspost/compress/pull/143) [#144](https://github.com/klauspost/compress/pull/144)\r\n* Aug 4, 2019: Faster zstd decompression. [#145](https://github.com/klauspost/compress/pull/145) [#143](https://github.com/klauspost/compress/pull/143) [#142](https://github.com/klauspost/compress/pull/142)\r\n* July 15, 2019 (v1.7.4): Fix double EOF block in rare cases on zstd encoder.\r\n* July 15, 2019 (v1.7.3): Minor speedup/compression increase in default zstd encoder.\r\n* July 14, 2019: zstd decoder: Fix decompression error on multiple uses with mixed content.\r\n* July 7, 2019 (v1.7.2): Snappy update, zstd decoder potential race fix.\r\n* June 17, 2019: zstd decompression bugfix.\r\n* June 17, 2019: fix 32 bit builds.\r\n* June 17, 2019: Easier use in modules (less dependencies).\r\n* June 9, 2019: New stronger \"default\" [zstd](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression mode. Matches zstd default compression ratio.\r\n* June 5, 2019: 20-40% throughput in [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression and better compression.\r\n* June 5, 2019: deflate/gzip compression: Reduce memory usage of lower compression levels.\r\n* June 2, 2019: Added [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression!\r\n* May 25, 2019: deflate/gzip: 10% faster bit writer, mostly visible in lower levels.\r\n* Apr 22, 2019: [zstd](https://github.com/klauspost/compress/tree/master/zstd#zstd) decompression added.\r\n* Aug 1, 2018: Added [huff0 README](https://github.com/klauspost/compress/tree/master/huff0#huff0-entropy-compression).\r\n* Jul 8, 2018: Added [Performance Update 2018](#performance-update-2018) below.\r\n* Jun 23, 2018: Merged [Go 1.11 inflate optimizations](https://go-review.googlesource.com/c/go/+/102235). Go 1.9 is now required. Backwards compatible version tagged with [v1.3.0](https://github.com/klauspost/compress/releases/tag/v1.3.0).\r\n* Apr 2, 2018: Added [huff0](https://godoc.org/github.com/klauspost/compress/huff0) en/decoder. Experimental for now, API may change.\r\n* Mar 4, 2018: Added [FSE Entropy](https://godoc.org/github.com/klauspost/compress/fse) en/decoder. Experimental for now, API may change.\r\n* Nov 3, 2017: Add compression [Estimate](https://godoc.org/github.com/klauspost/compress#Estimate) function.\r\n* May 28, 2017: Reduce allocations when resetting decoder.\r\n* Apr 02, 2017: Change back to official crc32, since changes were merged in Go 1.7.\r\n* Jan 14, 2017: Reduce stack pressure due to array copies. See [Issue #18625](https://github.com/golang/go/issues/18625).\r\n* Oct 25, 2016: Level 2-4 have been rewritten and now offers significantly better performance than before.\r\n* Oct 20, 2016: Port zlib changes from Go 1.7 to fix zlib writer issue. Please update.\r\n* Oct 16, 2016: Go 1.7 changes merged. Apples to apples this package is a few percent faster, but has a significantly better balance between speed and compression per level. \r\n* Mar 24, 2016: Always attempt Huffman encoding on level 4-7. This improves base 64 encoded data compression.\r\n* Mar 24, 2016: Small speedup for level 1-3.\r\n* Feb 19, 2016: Faster bit writer, level -2 is 15% faster, level 1 is 4% faster.\r\n* Feb 19, 2016: Handle small payloads faster in level 1-3.\r\n* Feb 19, 2016: Added faster level 2 + 3 compression modes.\r\n* Feb 19, 2016: [Rebalanced compression levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/), so there is a more even progresssion in terms of compression. New default level is 5.\r\n* Feb 14, 2016: Snappy: Merge upstream changes. \r\n* Feb 14, 2016: Snappy: Fix aggressive skipping.\r\n* Feb 14, 2016: Snappy: Update benchmark.\r\n* Feb 13, 2016: Deflate: Fixed assembler problem that could lead to sub-optimal compression.\r\n* Feb 12, 2016: Snappy: Added AMD64 SSE 4.2 optimizations to matching, which makes easy to compress material run faster. Typical speedup is around 25%.\r\n* Feb 9, 2016: Added Snappy package fork. This version is 5-7% faster, much more on hard to compress content.\r\n* Jan 30, 2016: Optimize level 1 to 3 by not considering static dictionary or storing uncompressed. ~4-5% speedup.\r\n* Jan 16, 2016: Optimization on deflate level 1,2,3 compression.\r\n* Jan 8 2016: Merge [CL 18317](https://go-review.googlesource.com/#/c/18317): fix reading, writing of zip64 archives.\r\n* Dec 8 2015: Make level 1 and -2 deterministic even if write size differs.\r\n* Dec 8 2015: Split encoding functions, so hashing and matching can potentially be inlined. 1-3% faster on AMD64. 5% faster on other platforms.\r\n* Dec 8 2015: Fixed rare [one byte out-of bounds read](https://github.com/klauspost/compress/issues/20). Please update!\r\n* Nov 23 2015: Optimization on token writer. ~2-4% faster. Contributed by [@dsnet](https://github.com/dsnet).\r\n* Nov 20 2015: Small optimization to bit writer on 64 bit systems.\r\n* Nov 17 2015: Fixed out-of-bound errors if the underlying Writer returned an error. See [#15](https://github.com/klauspost/compress/issues/15).\r\n* Nov 12 2015: Added [io.WriterTo](https://golang.org/pkg/io/#WriterTo) support to gzip/inflate.\r\n* Nov 11 2015: Merged [CL 16669](https://go-review.googlesource.com/#/c/16669/4): archive/zip: enable overriding (de)compressors per file\r\n* Oct 15 2015: Added skipping on uncompressible data. Random data speed up >5x.\r\n\r\n</details>\r\n\r\n# deflate usage\r\n\r\nThe packages are drop-in replacements for standard libraries. Simply replace the import path to use them:\r\n\r\n| old import         | new import                              | Documentation\r\n|--------------------|-----------------------------------------|--------------------|\r\n| `compress/gzip`    | `github.com/klauspost/compress/gzip`    | [gzip](https://pkg.go.dev/github.com/klauspost/compress/gzip?tab=doc)\r\n| `compress/zlib`    | `github.com/klauspost/compress/zlib`    | [zlib](https://pkg.go.dev/github.com/klauspost/compress/zlib?tab=doc)\r\n| `archive/zip`      | `github.com/klauspost/compress/zip`     | [zip](https://pkg.go.dev/github.com/klauspost/compress/zip?tab=doc)\r\n| `compress/flate`   | `github.com/klauspost/compress/flate`   | [flate](https://pkg.go.dev/github.com/klauspost/compress/flate?tab=doc)\r\n\r\n* Optimized [deflate](https://godoc.org/github.com/klauspost/compress/flate) packages which can be used as a dropin replacement for [gzip](https://godoc.org/github.com/klauspost/compress/gzip), [zip](https://godoc.org/github.com/klauspost/compress/zip) and [zlib](https://godoc.org/github.com/klauspost/compress/zlib).\r\n\r\nYou may also be interested in [pgzip](https://github.com/klauspost/pgzip), which is a drop in replacement for gzip, which support multithreaded compression on big files and the optimized [crc32](https://github.com/klauspost/crc32) package used by these packages.\r\n\r\nThe packages contains the same as the standard library, so you can use the godoc for that: [gzip](http://golang.org/pkg/compress/gzip/), [zip](http://golang.org/pkg/archive/zip/),  [zlib](http://golang.org/pkg/compress/zlib/), [flate](http://golang.org/pkg/compress/flate/).\r\n\r\nCurrently there is only minor speedup on decompression (mostly CRC32 calculation).\r\n\r\nMemory usage is typically 1MB for a Writer. stdlib is in the same range. \r\nIf you expect to have a lot of concurrently allocated Writers consider using \r\nthe stateless compress described below.\r\n\r\nFor compression performance, see: [this spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing).\r\n\r\nTo disable all assembly add `-tags=noasm`. This works across all packages.\r\n\r\n# Stateless compression\r\n\r\nThis package offers stateless compression as a special option for gzip/deflate. \r\nIt will do compression but without maintaining any state between Write calls.\r\n\r\nThis means there will be no memory kept between Write calls, but compression and speed will be suboptimal.\r\n\r\nThis is only relevant in cases where you expect to run many thousands of compressors concurrently, \r\nbut with very little activity. This is *not* intended for regular web servers serving individual requests.  \r\n\r\nBecause of this, the size of actual Write calls will affect output size.\r\n\r\nIn gzip, specify level `-3` / `gzip.StatelessCompression` to enable.\r\n\r\nFor direct deflate use, NewStatelessWriter and StatelessDeflate are available. See [documentation](https://godoc.org/github.com/klauspost/compress/flate#NewStatelessWriter)\r\n\r\nA `bufio.Writer` can of course be used to control write sizes. For example, to use a 4KB buffer:\r\n\r\n```go\r\n\t// replace 'ioutil.Discard' with your output.\r\n\tgzw, err := gzip.NewWriterLevel(ioutil.Discard, gzip.StatelessCompression)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\tdefer gzw.Close()\r\n\r\n\tw := bufio.NewWriterSize(gzw, 4096)\r\n\tdefer w.Flush()\r\n\t\r\n\t// Write to 'w' \r\n```\r\n\r\nThis will only use up to 4KB in memory when the writer is idle. \r\n\r\nCompression is almost always worse than the fastest compression level \r\nand each write will allocate (a little) memory. \r\n\r\n# Performance Update 2018\r\n\r\nIt has been a while since we have been looking at the speed of this package compared to the standard library, so I thought I would re-do my tests and give some overall recommendations based on the current state. All benchmarks have been performed with Go 1.10 on my Desktop Intel(R) Core(TM) i7-2600 CPU @3.40GHz. Since I last ran the tests, I have gotten more RAM, which means tests with big files are no longer limited by my SSD.\r\n\r\nThe raw results are in my [updated spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing). Due to cgo changes and upstream updates i could not get the cgo version of gzip to compile. Instead I included the [zstd](https://github.com/datadog/zstd) cgo implementation. If I get cgo gzip to work again, I might replace the results in the sheet.\r\n\r\nThe columns to take note of are: *MB/s* - the throughput. *Reduction* - the data size reduction in percent of the original. *Rel Speed* relative speed compared to the standard library at the same level. *Smaller* - how many percent smaller is the compressed output compared to stdlib. Negative means the output was bigger. *Loss* means the loss (or gain) in compression as a percentage difference of the input.\r\n\r\nThe `gzstd` (standard library gzip) and `gzkp` (this package gzip) only uses one CPU core. [`pgzip`](https://github.com/klauspost/pgzip), [`bgzf`](https://github.com/biogo/hts/tree/master/bgzf) uses all 4 cores. [`zstd`](https://github.com/DataDog/zstd) uses one core, and is a beast (but not Go, yet).\r\n\r\n\r\n## Overall differences.\r\n\r\nThere appears to be a roughly 5-10% speed advantage over the standard library when comparing at similar compression levels.\r\n\r\nThe biggest difference you will see is the result of [re-balancing](https://blog.klauspost.com/rebalancing-deflate-compression-levels/) the compression levels. I wanted by library to give a smoother transition between the compression levels than the standard library.\r\n\r\nThis package attempts to provide a more smooth transition, where \"1\" is taking a lot of shortcuts, \"5\" is the reasonable trade-off and \"9\" is the \"give me the best compression\", and the values in between gives something reasonable in between. The standard library has big differences in levels 1-4, but levels 5-9 having no significant gains - often spending a lot more time than can be justified by the achieved compression.\r\n\r\nThere are links to all the test data in the [spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing) in the top left field on each tab.\r\n\r\n## Web Content\r\n\r\nThis test set aims to emulate typical use in a web server. The test-set is 4GB data in 53k files, and is a mixture of (mostly) HTML, JS, CSS.\r\n\r\nSince level 1 and 9 are close to being the same code, they are quite close. But looking at the levels in-between the differences are quite big.\r\n\r\nLooking at level 6, this package is 88% faster, but will output about 6% more data. For a web server, this means you can serve 88% more data, but have to pay for 6% more bandwidth. You can draw your own conclusions on what would be the most expensive for your case.\r\n\r\n## Object files\r\n\r\nThis test is for typical data files stored on a server. In this case it is a collection of Go precompiled objects. They are very compressible.\r\n\r\nThe picture is similar to the web content, but with small differences since this is very compressible. Levels 2-3 offer good speed, but is sacrificing quite a bit of compression. \r\n\r\nThe standard library seems suboptimal on level 3 and 4 - offering both worse compression and speed than level 6 & 7 of this package respectively.\r\n\r\n## Highly Compressible File\r\n\r\nThis is a JSON file with very high redundancy. The reduction starts at 95% on level 1, so in real life terms we are dealing with something like a highly redundant stream of data, etc.\r\n\r\nIt is definitely visible that we are dealing with specialized content here, so the results are very scattered. This package does not do very well at levels 1-4, but picks up significantly at level 5 and levels 7 and 8 offering great speed for the achieved compression.\r\n\r\nSo if you know you content is extremely compressible you might want to go slightly higher than the defaults. The standard library has a huge gap between levels 3 and 4 in terms of speed (2.75x slowdown), so it offers little \"middle ground\".\r\n\r\n## Medium-High Compressible\r\n\r\nThis is a pretty common test corpus: [enwik9](http://mattmahoney.net/dc/textdata.html). It contains the first 10^9 bytes of the English Wikipedia dump on Mar. 3, 2006. This is a very good test of typical text based compression and more data heavy streams.\r\n\r\nWe see a similar picture here as in \"Web Content\". On equal levels some compression is sacrificed for more speed. Level 5 seems to be the best trade-off between speed and size, beating stdlib level 3 in both.\r\n\r\n## Medium Compressible\r\n\r\nI will combine two test sets, one [10GB file set](http://mattmahoney.net/dc/10gb.html) and a VM disk image (~8GB). Both contain different data types and represent a typical backup scenario.\r\n\r\nThe most notable thing is how quickly the standard library drops to very low compression speeds around level 5-6 without any big gains in compression. Since this type of data is fairly common, this does not seem like good behavior.\r\n\r\n\r\n## Un-compressible Content\r\n\r\nThis is mainly a test of how good the algorithms are at detecting un-compressible input. The standard library only offers this feature with very conservative settings at level 1. Obviously there is no reason for the algorithms to try to compress input that cannot be compressed.  The only downside is that it might skip some compressible data on false detections.\r\n\r\n\r\n## Huffman only compression\r\n\r\nThis compression library adds a special compression level, named `HuffmanOnly`, which allows near linear time compression. This is done by completely disabling matching of previous data, and only reduce the number of bits to represent each character. \r\n\r\nThis means that often used characters, like 'e' and ' ' (space) in text use the fewest bits to represent, and rare characters like '¤' takes more bits to represent. For more information see [wikipedia](https://en.wikipedia.org/wiki/Huffman_coding) or this nice [video](https://youtu.be/ZdooBTdW5bM).\r\n\r\nSince this type of compression has much less variance, the compression speed is mostly unaffected by the input data, and is usually more than *180MB/s* for a single core.\r\n\r\nThe downside is that the compression ratio is usually considerably worse than even the fastest conventional compression. The compression ratio can never be better than 8:1 (12.5%). \r\n\r\nThe linear time compression can be used as a \"better than nothing\" mode, where you cannot risk the encoder to slow down on some content. For comparison, the size of the \"Twain\" text is *233460 bytes* (+29% vs. level 1) and encode speed is 144MB/s (4.5x level 1). So in this case you trade a 30% size increase for a 4 times speedup.\r\n\r\nFor more information see my blog post on [Fast Linear Time Compression](http://blog.klauspost.com/constant-time-gzipzip-compression/).\r\n\r\nThis is implemented on Go 1.7 as \"Huffman Only\" mode, though not exposed for gzip.\r\n\r\n# Other packages\r\n\r\nHere are other packages of good quality and pure Go (no cgo wrappers or autoconverted code):\r\n\r\n* [github.com/pierrec/lz4](https://github.com/pierrec/lz4) - strong multithreaded LZ4 compression.\r\n* [github.com/cosnicolaou/pbzip2](https://github.com/cosnicolaou/pbzip2) - multithreaded bzip2 decompression.\r\n* [github.com/dsnet/compress](https://github.com/dsnet/compress) - brotli decompression, bzip2 writer.\r\n* [github.com/ronanh/intcomp](https://github.com/ronanh/intcomp) - Integer compression.\r\n* [github.com/spenczar/fpc](https://github.com/spenczar/fpc) - Float compression.\r\n* [github.com/minio/zipindex](https://github.com/minio/zipindex) - External ZIP directory index.\r\n* [github.com/ybirader/pzip](https://github.com/ybirader/pzip) - Fast concurrent zip archiver and extractor.\r\n\r\n# license\r\n\r\nThis code is licensed under the same conditions as the original Go code. See LICENSE file.\r\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nSecurity updates are applied only to the latest release.\n\n## Vulnerability Definition\n\nA security vulnerability is a bug that with certain input triggers a crash or an infinite loop. Most calls will have varying execution time and only in rare cases will slow operation be considered a security vulnerability.\n\nCorrupted output generally is not considered a security vulnerability, unless independent operations are able to affect each other. Note that not all functionality is re-entrant and safe to use concurrently.\n\nOut-of-memory crashes only applies if the en/decoder uses an abnormal amount of memory, with appropriate options applied, to limit maximum window size, concurrency, etc. However, if you are in doubt you are welcome to file a security issue.\n\nIt is assumed that all callers are trusted, meaning internal data exposed through reflection or inspection of returned data structures is not considered a vulnerability.\n\nVulnerabilities resulting from compiler/assembler errors should be reported upstream. Depending on the severity this package may or may not implement a workaround.\n\n## Reporting a Vulnerability\n\nIf you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.\n\nPlease disclose it at [security advisory](https://github.com/klauspost/compress/security/advisories/new). If possible please provide a minimal reproducer. If the issue only applies to a single platform, it would be helpful to provide access to that.\n\nThis project is maintained by a team of volunteers on a reasonable-effort basis. As such, vulnerabilities will be disclosed in a best effort base.\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/compressible.go",
    "content": "package compress\n\nimport \"math\"\n\n// Estimate returns a normalized compressibility estimate of block b.\n// Values close to zero are likely uncompressible.\n// Values above 0.1 are likely to be compressible.\n// Values above 0.5 are very compressible.\n// Very small lengths will return 0.\nfunc Estimate(b []byte) float64 {\n\tif len(b) < 16 {\n\t\treturn 0\n\t}\n\n\t// Correctly predicted order 1\n\thits := 0\n\tlastMatch := false\n\tvar o1 [256]byte\n\tvar hist [256]int\n\tc1 := byte(0)\n\tfor _, c := range b {\n\t\tif c == o1[c1] {\n\t\t\t// We only count a hit if there was two correct predictions in a row.\n\t\t\tif lastMatch {\n\t\t\t\thits++\n\t\t\t}\n\t\t\tlastMatch = true\n\t\t} else {\n\t\t\tlastMatch = false\n\t\t}\n\t\to1[c1] = c\n\t\tc1 = c\n\t\thist[c]++\n\t}\n\n\t// Use x^0.6 to give better spread\n\tprediction := math.Pow(float64(hits)/float64(len(b)), 0.6)\n\n\t// Calculate histogram distribution\n\tvariance := float64(0)\n\tavg := float64(len(b)) / 256\n\n\tfor _, v := range hist {\n\t\tΔ := float64(v) - avg\n\t\tvariance += Δ * Δ\n\t}\n\n\tstddev := math.Sqrt(float64(variance)) / float64(len(b))\n\texp := math.Sqrt(1 / float64(len(b)))\n\n\t// Subtract expected stddev\n\tstddev -= exp\n\tif stddev < 0 {\n\t\tstddev = 0\n\t}\n\tstddev *= 1 + exp\n\n\t// Use x^0.4 to give better spread\n\tentropy := math.Pow(stddev, 0.4)\n\n\t// 50/50 weight between prediction and histogram distribution\n\treturn math.Pow((prediction+entropy)/2, 0.9)\n}\n\n// ShannonEntropyBits returns the number of bits minimum required to represent\n// an entropy encoding of the input bytes.\n// https://en.wiktionary.org/wiki/Shannon_entropy\nfunc ShannonEntropyBits(b []byte) int {\n\tif len(b) == 0 {\n\t\treturn 0\n\t}\n\tvar hist [256]int\n\tfor _, c := range b {\n\t\thist[c]++\n\t}\n\tshannon := float64(0)\n\tinvTotal := 1.0 / float64(len(b))\n\tfor _, v := range hist[:] {\n\t\tif v > 0 {\n\t\t\tn := float64(v)\n\t\t\tshannon += math.Ceil(-math.Log2(n*invTotal) * n)\n\t\t}\n\t}\n\treturn int(math.Ceil(shannon))\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/deflate.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Copyright (c) 2015 Klaus Post\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n)\n\nconst (\n\tNoCompression      = 0\n\tBestSpeed          = 1\n\tBestCompression    = 9\n\tDefaultCompression = -1\n\n\t// HuffmanOnly disables Lempel-Ziv match searching and only performs Huffman\n\t// entropy encoding. This mode is useful in compressing data that has\n\t// already been compressed with an LZ style algorithm (e.g. Snappy or LZ4)\n\t// that lacks an entropy encoder. Compression gains are achieved when\n\t// certain bytes in the input stream occur more frequently than others.\n\t//\n\t// Note that HuffmanOnly produces a compressed output that is\n\t// RFC 1951 compliant. That is, any valid DEFLATE decompressor will\n\t// continue to be able to decompress this output.\n\tHuffmanOnly         = -2\n\tConstantCompression = HuffmanOnly // compatibility alias.\n\n\tlogWindowSize    = 15\n\twindowSize       = 1 << logWindowSize\n\twindowMask       = windowSize - 1\n\tlogMaxOffsetSize = 15  // Standard DEFLATE\n\tminMatchLength   = 4   // The smallest match that the compressor looks for\n\tmaxMatchLength   = 258 // The longest match for the compressor\n\tminOffsetSize    = 1   // The shortest offset that makes any sense\n\n\t// The maximum number of tokens we will encode at the time.\n\t// Smaller sizes usually creates less optimal blocks.\n\t// Bigger can make context switching slow.\n\t// We use this for levels 7-9, so we make it big.\n\tmaxFlateBlockTokens = 1 << 15\n\tmaxStoreBlockSize   = 65535\n\thashBits            = 17 // After 17 performance degrades\n\thashSize            = 1 << hashBits\n\thashMask            = (1 << hashBits) - 1\n\thashShift           = (hashBits + minMatchLength - 1) / minMatchLength\n\tmaxHashOffset       = 1 << 28\n\n\tskipNever = math.MaxInt32\n\n\tdebugDeflate = false\n)\n\ntype compressionLevel struct {\n\tgood, lazy, nice, chain, fastSkipHashing, level int\n}\n\n// Compression levels have been rebalanced from zlib deflate defaults\n// to give a bigger spread in speed and compression.\n// See https://blog.klauspost.com/rebalancing-deflate-compression-levels/\nvar levels = []compressionLevel{\n\t{}, // 0\n\t// Level 1-6 uses specialized algorithm - values not used\n\t{0, 0, 0, 0, 0, 1},\n\t{0, 0, 0, 0, 0, 2},\n\t{0, 0, 0, 0, 0, 3},\n\t{0, 0, 0, 0, 0, 4},\n\t{0, 0, 0, 0, 0, 5},\n\t{0, 0, 0, 0, 0, 6},\n\t// Levels 7-9 use increasingly more lazy matching\n\t// and increasingly stringent conditions for \"good enough\".\n\t{8, 12, 16, 24, skipNever, 7},\n\t{16, 30, 40, 64, skipNever, 8},\n\t{32, 258, 258, 1024, skipNever, 9},\n}\n\n// advancedState contains state for the advanced levels, with bigger hash tables, etc.\ntype advancedState struct {\n\t// deflate state\n\tlength         int\n\toffset         int\n\tmaxInsertIndex int\n\tchainHead      int\n\thashOffset     int\n\n\tii uint16 // position of last match, intended to overflow to reset.\n\n\t// input window: unprocessed data is window[index:windowEnd]\n\tindex     int\n\thashMatch [maxMatchLength + minMatchLength]uint32\n\n\t// Input hash chains\n\t// hashHead[hashValue] contains the largest inputIndex with the specified hash value\n\t// If hashHead[hashValue] is within the current window, then\n\t// hashPrev[hashHead[hashValue] & windowMask] contains the previous index\n\t// with the same hash value.\n\thashHead [hashSize]uint32\n\thashPrev [windowSize]uint32\n}\n\ntype compressor struct {\n\tcompressionLevel\n\n\th *huffmanEncoder\n\tw *huffmanBitWriter\n\n\t// compression algorithm\n\tfill func(*compressor, []byte) int // copy data to window\n\tstep func(*compressor)             // process window\n\n\twindow     []byte\n\twindowEnd  int\n\tblockStart int // window index where current tokens start\n\terr        error\n\n\t// queued output tokens\n\ttokens tokens\n\tfast   fastEnc\n\tstate  *advancedState\n\n\tsync          bool // requesting flush\n\tbyteAvailable bool // if true, still need to process window[index-1].\n}\n\nfunc (d *compressor) fillDeflate(b []byte) int {\n\ts := d.state\n\tif s.index >= 2*windowSize-(minMatchLength+maxMatchLength) {\n\t\t// shift the window by windowSize\n\t\t//copy(d.window[:], d.window[windowSize:2*windowSize])\n\t\t*(*[windowSize]byte)(d.window) = *(*[windowSize]byte)(d.window[windowSize:])\n\t\ts.index -= windowSize\n\t\td.windowEnd -= windowSize\n\t\tif d.blockStart >= windowSize {\n\t\t\td.blockStart -= windowSize\n\t\t} else {\n\t\t\td.blockStart = math.MaxInt32\n\t\t}\n\t\ts.hashOffset += windowSize\n\t\tif s.hashOffset > maxHashOffset {\n\t\t\tdelta := s.hashOffset - 1\n\t\t\ts.hashOffset -= delta\n\t\t\ts.chainHead -= delta\n\t\t\t// Iterate over slices instead of arrays to avoid copying\n\t\t\t// the entire table onto the stack (Issue #18625).\n\t\t\tfor i, v := range s.hashPrev[:] {\n\t\t\t\tif int(v) > delta {\n\t\t\t\t\ts.hashPrev[i] = uint32(int(v) - delta)\n\t\t\t\t} else {\n\t\t\t\t\ts.hashPrev[i] = 0\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor i, v := range s.hashHead[:] {\n\t\t\t\tif int(v) > delta {\n\t\t\t\t\ts.hashHead[i] = uint32(int(v) - delta)\n\t\t\t\t} else {\n\t\t\t\t\ts.hashHead[i] = 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tn := copy(d.window[d.windowEnd:], b)\n\td.windowEnd += n\n\treturn n\n}\n\nfunc (d *compressor) writeBlock(tok *tokens, index int, eof bool) error {\n\tif index > 0 || eof {\n\t\tvar window []byte\n\t\tif d.blockStart <= index {\n\t\t\twindow = d.window[d.blockStart:index]\n\t\t}\n\t\td.blockStart = index\n\t\t//d.w.writeBlock(tok, eof, window)\n\t\td.w.writeBlockDynamic(tok, eof, window, d.sync)\n\t\treturn d.w.err\n\t}\n\treturn nil\n}\n\n// writeBlockSkip writes the current block and uses the number of tokens\n// to determine if the block should be stored on no matches, or\n// only huffman encoded.\nfunc (d *compressor) writeBlockSkip(tok *tokens, index int, eof bool) error {\n\tif index > 0 || eof {\n\t\tif d.blockStart <= index {\n\t\t\twindow := d.window[d.blockStart:index]\n\t\t\t// If we removed less than a 64th of all literals\n\t\t\t// we huffman compress the block.\n\t\t\tif int(tok.n) > len(window)-int(tok.n>>6) {\n\t\t\t\td.w.writeBlockHuff(eof, window, d.sync)\n\t\t\t} else {\n\t\t\t\t// Write a dynamic huffman block.\n\t\t\t\td.w.writeBlockDynamic(tok, eof, window, d.sync)\n\t\t\t}\n\t\t} else {\n\t\t\td.w.writeBlock(tok, eof, nil)\n\t\t}\n\t\td.blockStart = index\n\t\treturn d.w.err\n\t}\n\treturn nil\n}\n\n// fillWindow will fill the current window with the supplied\n// dictionary and calculate all hashes.\n// This is much faster than doing a full encode.\n// Should only be used after a start/reset.\nfunc (d *compressor) fillWindow(b []byte) {\n\t// Do not fill window if we are in store-only or huffman mode.\n\tif d.level <= 0 && d.level > -MinCustomWindowSize {\n\t\treturn\n\t}\n\tif d.fast != nil {\n\t\t// encode the last data, but discard the result\n\t\tif len(b) > maxMatchOffset {\n\t\t\tb = b[len(b)-maxMatchOffset:]\n\t\t}\n\t\td.fast.Encode(&d.tokens, b)\n\t\td.tokens.Reset()\n\t\treturn\n\t}\n\ts := d.state\n\t// If we are given too much, cut it.\n\tif len(b) > windowSize {\n\t\tb = b[len(b)-windowSize:]\n\t}\n\t// Add all to window.\n\tn := copy(d.window[d.windowEnd:], b)\n\n\t// Calculate 256 hashes at the time (more L1 cache hits)\n\tloops := (n + 256 - minMatchLength) / 256\n\tfor j := 0; j < loops; j++ {\n\t\tstartindex := j * 256\n\t\tend := startindex + 256 + minMatchLength - 1\n\t\tif end > n {\n\t\t\tend = n\n\t\t}\n\t\ttocheck := d.window[startindex:end]\n\t\tdstSize := len(tocheck) - minMatchLength + 1\n\n\t\tif dstSize <= 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tdst := s.hashMatch[:dstSize]\n\t\tbulkHash4(tocheck, dst)\n\t\tvar newH uint32\n\t\tfor i, val := range dst {\n\t\t\tdi := i + startindex\n\t\t\tnewH = val & hashMask\n\t\t\t// Get previous value with the same hash.\n\t\t\t// Our chain should point to the previous value.\n\t\t\ts.hashPrev[di&windowMask] = s.hashHead[newH]\n\t\t\t// Set the head of the hash chain to us.\n\t\t\ts.hashHead[newH] = uint32(di + s.hashOffset)\n\t\t}\n\t}\n\t// Update window information.\n\td.windowEnd += n\n\ts.index = n\n}\n\n// Try to find a match starting at index whose length is greater than prevSize.\n// We only look at chainCount possibilities before giving up.\n// pos = s.index, prevHead = s.chainHead-s.hashOffset, prevLength=minMatchLength-1, lookahead\nfunc (d *compressor) findMatch(pos int, prevHead int, lookahead int) (length, offset int, ok bool) {\n\tminMatchLook := maxMatchLength\n\tif lookahead < minMatchLook {\n\t\tminMatchLook = lookahead\n\t}\n\n\twin := d.window[0 : pos+minMatchLook]\n\n\t// We quit when we get a match that's at least nice long\n\tnice := len(win) - pos\n\tif d.nice < nice {\n\t\tnice = d.nice\n\t}\n\n\t// If we've got a match that's good enough, only look in 1/4 the chain.\n\ttries := d.chain\n\tlength = minMatchLength - 1\n\n\twEnd := win[pos+length]\n\twPos := win[pos:]\n\tminIndex := pos - windowSize\n\tif minIndex < 0 {\n\t\tminIndex = 0\n\t}\n\toffset = 0\n\n\tif d.chain < 100 {\n\t\tfor i := prevHead; tries > 0; tries-- {\n\t\t\tif wEnd == win[i+length] {\n\t\t\t\tn := matchLen(win[i:i+minMatchLook], wPos)\n\t\t\t\tif n > length {\n\t\t\t\t\tlength = n\n\t\t\t\t\toffset = pos - i\n\t\t\t\t\tok = true\n\t\t\t\t\tif n >= nice {\n\t\t\t\t\t\t// The match is good enough that we don't try to find a better one.\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\twEnd = win[pos+n]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif i <= minIndex {\n\t\t\t\t// hashPrev[i & windowMask] has already been overwritten, so stop now.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\ti = int(d.state.hashPrev[i&windowMask]) - d.state.hashOffset\n\t\t\tif i < minIndex {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\t// Minimum gain to accept a match.\n\tcGain := 4\n\n\t// Some like it higher (CSV), some like it lower (JSON)\n\tconst baseCost = 3\n\t// Base is 4 bytes at with an additional cost.\n\t// Matches must be better than this.\n\n\tfor i := prevHead; tries > 0; tries-- {\n\t\tif wEnd == win[i+length] {\n\t\t\tn := matchLen(win[i:i+minMatchLook], wPos)\n\t\t\tif n > length {\n\t\t\t\t// Calculate gain. Estimate\n\t\t\t\tnewGain := d.h.bitLengthRaw(wPos[:n]) - int(offsetExtraBits[offsetCode(uint32(pos-i))]) - baseCost - int(lengthExtraBits[lengthCodes[(n-3)&255]])\n\n\t\t\t\t//fmt.Println(\"gain:\", newGain, \"prev:\", cGain, \"raw:\", d.h.bitLengthRaw(wPos[:n]), \"this-len:\", n, \"prev-len:\", length)\n\t\t\t\tif newGain > cGain {\n\t\t\t\t\tlength = n\n\t\t\t\t\toffset = pos - i\n\t\t\t\t\tcGain = newGain\n\t\t\t\t\tok = true\n\t\t\t\t\tif n >= nice {\n\t\t\t\t\t\t// The match is good enough that we don't try to find a better one.\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\twEnd = win[pos+n]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif i <= minIndex {\n\t\t\t// hashPrev[i & windowMask] has already been overwritten, so stop now.\n\t\t\tbreak\n\t\t}\n\t\ti = int(d.state.hashPrev[i&windowMask]) - d.state.hashOffset\n\t\tif i < minIndex {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn\n}\n\nfunc (d *compressor) writeStoredBlock(buf []byte) error {\n\tif d.w.writeStoredHeader(len(buf), false); d.w.err != nil {\n\t\treturn d.w.err\n\t}\n\td.w.writeBytes(buf)\n\treturn d.w.err\n}\n\n// hash4 returns a hash representation of the first 4 bytes\n// of the supplied slice.\n// The caller must ensure that len(b) >= 4.\nfunc hash4(b []byte) uint32 {\n\treturn hash4u(binary.LittleEndian.Uint32(b), hashBits)\n}\n\n// hash4 returns the hash of u to fit in a hash table with h bits.\n// Preferably h should be a constant and should always be <32.\nfunc hash4u(u uint32, h uint8) uint32 {\n\treturn (u * prime4bytes) >> (32 - h)\n}\n\n// bulkHash4 will compute hashes using the same\n// algorithm as hash4\nfunc bulkHash4(b []byte, dst []uint32) {\n\tif len(b) < 4 {\n\t\treturn\n\t}\n\thb := binary.LittleEndian.Uint32(b)\n\n\tdst[0] = hash4u(hb, hashBits)\n\tend := len(b) - 4 + 1\n\tfor i := 1; i < end; i++ {\n\t\thb = (hb >> 8) | uint32(b[i+3])<<24\n\t\tdst[i] = hash4u(hb, hashBits)\n\t}\n}\n\nfunc (d *compressor) initDeflate() {\n\td.window = make([]byte, 2*windowSize)\n\td.byteAvailable = false\n\td.err = nil\n\tif d.state == nil {\n\t\treturn\n\t}\n\ts := d.state\n\ts.index = 0\n\ts.hashOffset = 1\n\ts.length = minMatchLength - 1\n\ts.offset = 0\n\ts.chainHead = -1\n}\n\n// deflateLazy is the same as deflate, but with d.fastSkipHashing == skipNever,\n// meaning it always has lazy matching on.\nfunc (d *compressor) deflateLazy() {\n\ts := d.state\n\t// Sanity enables additional runtime tests.\n\t// It's intended to be used during development\n\t// to supplement the currently ad-hoc unit tests.\n\tconst sanity = debugDeflate\n\n\tif d.windowEnd-s.index < minMatchLength+maxMatchLength && !d.sync {\n\t\treturn\n\t}\n\tif d.windowEnd != s.index && d.chain > 100 {\n\t\t// Get literal huffman coder.\n\t\tif d.h == nil {\n\t\t\td.h = newHuffmanEncoder(maxFlateBlockTokens)\n\t\t}\n\t\tvar tmp [256]uint16\n\t\tfor _, v := range d.window[s.index:d.windowEnd] {\n\t\t\ttmp[v]++\n\t\t}\n\t\td.h.generate(tmp[:], 15)\n\t}\n\n\ts.maxInsertIndex = d.windowEnd - (minMatchLength - 1)\n\n\tfor {\n\t\tif sanity && s.index > d.windowEnd {\n\t\t\tpanic(\"index > windowEnd\")\n\t\t}\n\t\tlookahead := d.windowEnd - s.index\n\t\tif lookahead < minMatchLength+maxMatchLength {\n\t\t\tif !d.sync {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif sanity && s.index > d.windowEnd {\n\t\t\t\tpanic(\"index > windowEnd\")\n\t\t\t}\n\t\t\tif lookahead == 0 {\n\t\t\t\t// Flush current output block if any.\n\t\t\t\tif d.byteAvailable {\n\t\t\t\t\t// There is still one pending token that needs to be flushed\n\t\t\t\t\td.tokens.AddLiteral(d.window[s.index-1])\n\t\t\t\t\td.byteAvailable = false\n\t\t\t\t}\n\t\t\t\tif d.tokens.n > 0 {\n\t\t\t\t\tif d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\td.tokens.Reset()\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif s.index < s.maxInsertIndex {\n\t\t\t// Update the hash\n\t\t\thash := hash4(d.window[s.index:])\n\t\t\tch := s.hashHead[hash]\n\t\t\ts.chainHead = int(ch)\n\t\t\ts.hashPrev[s.index&windowMask] = ch\n\t\t\ts.hashHead[hash] = uint32(s.index + s.hashOffset)\n\t\t}\n\t\tprevLength := s.length\n\t\tprevOffset := s.offset\n\t\ts.length = minMatchLength - 1\n\t\ts.offset = 0\n\t\tminIndex := s.index - windowSize\n\t\tif minIndex < 0 {\n\t\t\tminIndex = 0\n\t\t}\n\n\t\tif s.chainHead-s.hashOffset >= minIndex && lookahead > prevLength && prevLength < d.lazy {\n\t\t\tif newLength, newOffset, ok := d.findMatch(s.index, s.chainHead-s.hashOffset, lookahead); ok {\n\t\t\t\ts.length = newLength\n\t\t\t\ts.offset = newOffset\n\t\t\t}\n\t\t}\n\n\t\tif prevLength >= minMatchLength && s.length <= prevLength {\n\t\t\t// No better match, but check for better match at end...\n\t\t\t//\n\t\t\t// Skip forward a number of bytes.\n\t\t\t// Offset of 2 seems to yield best results. 3 is sometimes better.\n\t\t\tconst checkOff = 2\n\n\t\t\t// Check all, except full length\n\t\t\tif prevLength < maxMatchLength-checkOff {\n\t\t\t\tprevIndex := s.index - 1\n\t\t\t\tif prevIndex+prevLength < s.maxInsertIndex {\n\t\t\t\t\tend := lookahead\n\t\t\t\t\tif lookahead > maxMatchLength+checkOff {\n\t\t\t\t\t\tend = maxMatchLength + checkOff\n\t\t\t\t\t}\n\t\t\t\t\tend += prevIndex\n\n\t\t\t\t\t// Hash at match end.\n\t\t\t\t\th := hash4(d.window[prevIndex+prevLength:])\n\t\t\t\t\tch2 := int(s.hashHead[h]) - s.hashOffset - prevLength\n\t\t\t\t\tif prevIndex-ch2 != prevOffset && ch2 > minIndex+checkOff {\n\t\t\t\t\t\tlength := matchLen(d.window[prevIndex+checkOff:end], d.window[ch2+checkOff:])\n\t\t\t\t\t\t// It seems like a pure length metric is best.\n\t\t\t\t\t\tif length > prevLength {\n\t\t\t\t\t\t\tprevLength = length\n\t\t\t\t\t\t\tprevOffset = prevIndex - ch2\n\n\t\t\t\t\t\t\t// Extend back...\n\t\t\t\t\t\t\tfor i := checkOff - 1; i >= 0; i-- {\n\t\t\t\t\t\t\t\tif prevLength >= maxMatchLength || d.window[prevIndex+i] != d.window[ch2+i] {\n\t\t\t\t\t\t\t\t\t// Emit tokens we \"owe\"\n\t\t\t\t\t\t\t\t\tfor j := 0; j <= i; j++ {\n\t\t\t\t\t\t\t\t\t\td.tokens.AddLiteral(d.window[prevIndex+j])\n\t\t\t\t\t\t\t\t\t\tif d.tokens.n == maxFlateBlockTokens {\n\t\t\t\t\t\t\t\t\t\t\t// The block includes the current character\n\t\t\t\t\t\t\t\t\t\t\tif d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil {\n\t\t\t\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\td.tokens.Reset()\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\ts.index++\n\t\t\t\t\t\t\t\t\t\tif s.index < s.maxInsertIndex {\n\t\t\t\t\t\t\t\t\t\t\th := hash4(d.window[s.index:])\n\t\t\t\t\t\t\t\t\t\t\tch := s.hashHead[h]\n\t\t\t\t\t\t\t\t\t\t\ts.chainHead = int(ch)\n\t\t\t\t\t\t\t\t\t\t\ts.hashPrev[s.index&windowMask] = ch\n\t\t\t\t\t\t\t\t\t\t\ts.hashHead[h] = uint32(s.index + s.hashOffset)\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\tbreak\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tprevLength++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if false {\n\t\t\t\t\t\t\t// Check one further ahead.\n\t\t\t\t\t\t\t// Only rarely better, disabled for now.\n\t\t\t\t\t\t\tprevIndex++\n\t\t\t\t\t\t\th := hash4(d.window[prevIndex+prevLength:])\n\t\t\t\t\t\t\tch2 := int(s.hashHead[h]) - s.hashOffset - prevLength\n\t\t\t\t\t\t\tif prevIndex-ch2 != prevOffset && ch2 > minIndex+checkOff {\n\t\t\t\t\t\t\t\tlength := matchLen(d.window[prevIndex+checkOff:end], d.window[ch2+checkOff:])\n\t\t\t\t\t\t\t\t// It seems like a pure length metric is best.\n\t\t\t\t\t\t\t\tif length > prevLength+checkOff {\n\t\t\t\t\t\t\t\t\tprevLength = length\n\t\t\t\t\t\t\t\t\tprevOffset = prevIndex - ch2\n\t\t\t\t\t\t\t\t\tprevIndex--\n\n\t\t\t\t\t\t\t\t\t// Extend back...\n\t\t\t\t\t\t\t\t\tfor i := checkOff; i >= 0; i-- {\n\t\t\t\t\t\t\t\t\t\tif prevLength >= maxMatchLength || d.window[prevIndex+i] != d.window[ch2+i-1] {\n\t\t\t\t\t\t\t\t\t\t\t// Emit tokens we \"owe\"\n\t\t\t\t\t\t\t\t\t\t\tfor j := 0; j <= i; j++ {\n\t\t\t\t\t\t\t\t\t\t\t\td.tokens.AddLiteral(d.window[prevIndex+j])\n\t\t\t\t\t\t\t\t\t\t\t\tif d.tokens.n == maxFlateBlockTokens {\n\t\t\t\t\t\t\t\t\t\t\t\t\t// The block includes the current character\n\t\t\t\t\t\t\t\t\t\t\t\t\tif d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\td.tokens.Reset()\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\ts.index++\n\t\t\t\t\t\t\t\t\t\t\t\tif s.index < s.maxInsertIndex {\n\t\t\t\t\t\t\t\t\t\t\t\t\th := hash4(d.window[s.index:])\n\t\t\t\t\t\t\t\t\t\t\t\t\tch := s.hashHead[h]\n\t\t\t\t\t\t\t\t\t\t\t\t\ts.chainHead = int(ch)\n\t\t\t\t\t\t\t\t\t\t\t\t\ts.hashPrev[s.index&windowMask] = ch\n\t\t\t\t\t\t\t\t\t\t\t\t\ts.hashHead[h] = uint32(s.index + s.hashOffset)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tprevLength++\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\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// There was a match at the previous step, and the current match is\n\t\t\t// not better. Output the previous match.\n\t\t\td.tokens.AddMatch(uint32(prevLength-3), uint32(prevOffset-minOffsetSize))\n\n\t\t\t// Insert in the hash table all strings up to the end of the match.\n\t\t\t// index and index-1 are already inserted. If there is not enough\n\t\t\t// lookahead, the last two strings are not inserted into the hash\n\t\t\t// table.\n\t\t\tnewIndex := s.index + prevLength - 1\n\t\t\t// Calculate missing hashes\n\t\t\tend := newIndex\n\t\t\tif end > s.maxInsertIndex {\n\t\t\t\tend = s.maxInsertIndex\n\t\t\t}\n\t\t\tend += minMatchLength - 1\n\t\t\tstartindex := s.index + 1\n\t\t\tif startindex > s.maxInsertIndex {\n\t\t\t\tstartindex = s.maxInsertIndex\n\t\t\t}\n\t\t\ttocheck := d.window[startindex:end]\n\t\t\tdstSize := len(tocheck) - minMatchLength + 1\n\t\t\tif dstSize > 0 {\n\t\t\t\tdst := s.hashMatch[:dstSize]\n\t\t\t\tbulkHash4(tocheck, dst)\n\t\t\t\tvar newH uint32\n\t\t\t\tfor i, val := range dst {\n\t\t\t\t\tdi := i + startindex\n\t\t\t\t\tnewH = val & hashMask\n\t\t\t\t\t// Get previous value with the same hash.\n\t\t\t\t\t// Our chain should point to the previous value.\n\t\t\t\t\ts.hashPrev[di&windowMask] = s.hashHead[newH]\n\t\t\t\t\t// Set the head of the hash chain to us.\n\t\t\t\t\ts.hashHead[newH] = uint32(di + s.hashOffset)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ts.index = newIndex\n\t\t\td.byteAvailable = false\n\t\t\ts.length = minMatchLength - 1\n\t\t\tif d.tokens.n == maxFlateBlockTokens {\n\t\t\t\t// The block includes the current character\n\t\t\t\tif d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\td.tokens.Reset()\n\t\t\t}\n\t\t\ts.ii = 0\n\t\t} else {\n\t\t\t// Reset, if we got a match this run.\n\t\t\tif s.length >= minMatchLength {\n\t\t\t\ts.ii = 0\n\t\t\t}\n\t\t\t// We have a byte waiting. Emit it.\n\t\t\tif d.byteAvailable {\n\t\t\t\ts.ii++\n\t\t\t\td.tokens.AddLiteral(d.window[s.index-1])\n\t\t\t\tif d.tokens.n == maxFlateBlockTokens {\n\t\t\t\t\tif d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\td.tokens.Reset()\n\t\t\t\t}\n\t\t\t\ts.index++\n\n\t\t\t\t// If we have a long run of no matches, skip additional bytes\n\t\t\t\t// Resets when s.ii overflows after 64KB.\n\t\t\t\tif n := int(s.ii) - d.chain; n > 0 {\n\t\t\t\t\tn = 1 + int(n>>6)\n\t\t\t\t\tfor j := 0; j < n; j++ {\n\t\t\t\t\t\tif s.index >= d.windowEnd-1 {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\td.tokens.AddLiteral(d.window[s.index-1])\n\t\t\t\t\t\tif d.tokens.n == maxFlateBlockTokens {\n\t\t\t\t\t\t\tif d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil {\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td.tokens.Reset()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Index...\n\t\t\t\t\t\tif s.index < s.maxInsertIndex {\n\t\t\t\t\t\t\th := hash4(d.window[s.index:])\n\t\t\t\t\t\t\tch := s.hashHead[h]\n\t\t\t\t\t\t\ts.chainHead = int(ch)\n\t\t\t\t\t\t\ts.hashPrev[s.index&windowMask] = ch\n\t\t\t\t\t\t\ts.hashHead[h] = uint32(s.index + s.hashOffset)\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts.index++\n\t\t\t\t\t}\n\t\t\t\t\t// Flush last byte\n\t\t\t\t\td.tokens.AddLiteral(d.window[s.index-1])\n\t\t\t\t\td.byteAvailable = false\n\t\t\t\t\t// s.length = minMatchLength - 1 // not needed, since s.ii is reset above, so it should never be > minMatchLength\n\t\t\t\t\tif d.tokens.n == maxFlateBlockTokens {\n\t\t\t\t\t\tif d.err = d.writeBlock(&d.tokens, s.index, false); d.err != nil {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\td.tokens.Reset()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ts.index++\n\t\t\t\td.byteAvailable = true\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (d *compressor) store() {\n\tif d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) {\n\t\td.err = d.writeStoredBlock(d.window[:d.windowEnd])\n\t\td.windowEnd = 0\n\t}\n}\n\n// fillWindow will fill the buffer with data for huffman-only compression.\n// The number of bytes copied is returned.\nfunc (d *compressor) fillBlock(b []byte) int {\n\tn := copy(d.window[d.windowEnd:], b)\n\td.windowEnd += n\n\treturn n\n}\n\n// storeHuff will compress and store the currently added data,\n// if enough has been accumulated or we at the end of the stream.\n// Any error that occurred will be in d.err\nfunc (d *compressor) storeHuff() {\n\tif d.windowEnd < len(d.window) && !d.sync || d.windowEnd == 0 {\n\t\treturn\n\t}\n\td.w.writeBlockHuff(false, d.window[:d.windowEnd], d.sync)\n\td.err = d.w.err\n\td.windowEnd = 0\n}\n\n// storeFast will compress and store the currently added data,\n// if enough has been accumulated or we at the end of the stream.\n// Any error that occurred will be in d.err\nfunc (d *compressor) storeFast() {\n\t// We only compress if we have maxStoreBlockSize.\n\tif d.windowEnd < len(d.window) {\n\t\tif !d.sync {\n\t\t\treturn\n\t\t}\n\t\t// Handle extremely small sizes.\n\t\tif d.windowEnd < 128 {\n\t\t\tif d.windowEnd == 0 {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif d.windowEnd <= 32 {\n\t\t\t\td.err = d.writeStoredBlock(d.window[:d.windowEnd])\n\t\t\t} else {\n\t\t\t\td.w.writeBlockHuff(false, d.window[:d.windowEnd], true)\n\t\t\t\td.err = d.w.err\n\t\t\t}\n\t\t\td.tokens.Reset()\n\t\t\td.windowEnd = 0\n\t\t\td.fast.Reset()\n\t\t\treturn\n\t\t}\n\t}\n\n\td.fast.Encode(&d.tokens, d.window[:d.windowEnd])\n\t// If we made zero matches, store the block as is.\n\tif d.tokens.n == 0 {\n\t\td.err = d.writeStoredBlock(d.window[:d.windowEnd])\n\t\t// If we removed less than 1/16th, huffman compress the block.\n\t} else if int(d.tokens.n) > d.windowEnd-(d.windowEnd>>4) {\n\t\td.w.writeBlockHuff(false, d.window[:d.windowEnd], d.sync)\n\t\td.err = d.w.err\n\t} else {\n\t\td.w.writeBlockDynamic(&d.tokens, false, d.window[:d.windowEnd], d.sync)\n\t\td.err = d.w.err\n\t}\n\td.tokens.Reset()\n\td.windowEnd = 0\n}\n\n// write will add input byte to the stream.\n// Unless an error occurs all bytes will be consumed.\nfunc (d *compressor) write(b []byte) (n int, err error) {\n\tif d.err != nil {\n\t\treturn 0, d.err\n\t}\n\tn = len(b)\n\tfor len(b) > 0 {\n\t\tif d.windowEnd == len(d.window) || d.sync {\n\t\t\td.step(d)\n\t\t}\n\t\tb = b[d.fill(d, b):]\n\t\tif d.err != nil {\n\t\t\treturn 0, d.err\n\t\t}\n\t}\n\treturn n, d.err\n}\n\nfunc (d *compressor) syncFlush() error {\n\td.sync = true\n\tif d.err != nil {\n\t\treturn d.err\n\t}\n\td.step(d)\n\tif d.err == nil {\n\t\td.w.writeStoredHeader(0, false)\n\t\td.w.flush()\n\t\td.err = d.w.err\n\t}\n\td.sync = false\n\treturn d.err\n}\n\nfunc (d *compressor) init(w io.Writer, level int) (err error) {\n\td.w = newHuffmanBitWriter(w)\n\n\tswitch {\n\tcase level == NoCompression:\n\t\td.window = make([]byte, maxStoreBlockSize)\n\t\td.fill = (*compressor).fillBlock\n\t\td.step = (*compressor).store\n\tcase level == ConstantCompression:\n\t\td.w.logNewTablePenalty = 10\n\t\td.window = make([]byte, 32<<10)\n\t\td.fill = (*compressor).fillBlock\n\t\td.step = (*compressor).storeHuff\n\tcase level == DefaultCompression:\n\t\tlevel = 5\n\t\tfallthrough\n\tcase level >= 1 && level <= 6:\n\t\td.w.logNewTablePenalty = 7\n\t\td.fast = newFastEnc(level)\n\t\td.window = make([]byte, maxStoreBlockSize)\n\t\td.fill = (*compressor).fillBlock\n\t\td.step = (*compressor).storeFast\n\tcase 7 <= level && level <= 9:\n\t\td.w.logNewTablePenalty = 8\n\t\td.state = &advancedState{}\n\t\td.compressionLevel = levels[level]\n\t\td.initDeflate()\n\t\td.fill = (*compressor).fillDeflate\n\t\td.step = (*compressor).deflateLazy\n\tcase -level >= MinCustomWindowSize && -level <= MaxCustomWindowSize:\n\t\td.w.logNewTablePenalty = 7\n\t\td.fast = &fastEncL5Window{maxOffset: int32(-level), cur: maxStoreBlockSize}\n\t\td.window = make([]byte, maxStoreBlockSize)\n\t\td.fill = (*compressor).fillBlock\n\t\td.step = (*compressor).storeFast\n\tdefault:\n\t\treturn fmt.Errorf(\"flate: invalid compression level %d: want value in range [-2, 9]\", level)\n\t}\n\td.level = level\n\treturn nil\n}\n\n// reset the state of the compressor.\nfunc (d *compressor) reset(w io.Writer) {\n\td.w.reset(w)\n\td.sync = false\n\td.err = nil\n\t// We only need to reset a few things for Snappy.\n\tif d.fast != nil {\n\t\td.fast.Reset()\n\t\td.windowEnd = 0\n\t\td.tokens.Reset()\n\t\treturn\n\t}\n\tswitch d.compressionLevel.chain {\n\tcase 0:\n\t\t// level was NoCompression or ConstantCompresssion.\n\t\td.windowEnd = 0\n\tdefault:\n\t\ts := d.state\n\t\ts.chainHead = -1\n\t\tfor i := range s.hashHead {\n\t\t\ts.hashHead[i] = 0\n\t\t}\n\t\tfor i := range s.hashPrev {\n\t\t\ts.hashPrev[i] = 0\n\t\t}\n\t\ts.hashOffset = 1\n\t\ts.index, d.windowEnd = 0, 0\n\t\td.blockStart, d.byteAvailable = 0, false\n\t\td.tokens.Reset()\n\t\ts.length = minMatchLength - 1\n\t\ts.offset = 0\n\t\ts.ii = 0\n\t\ts.maxInsertIndex = 0\n\t}\n}\n\nfunc (d *compressor) close() error {\n\tif d.err != nil {\n\t\treturn d.err\n\t}\n\td.sync = true\n\td.step(d)\n\tif d.err != nil {\n\t\treturn d.err\n\t}\n\tif d.w.writeStoredHeader(0, true); d.w.err != nil {\n\t\treturn d.w.err\n\t}\n\td.w.flush()\n\td.w.reset(nil)\n\treturn d.w.err\n}\n\n// NewWriter returns a new Writer compressing data at the given level.\n// Following zlib, levels range from 1 (BestSpeed) to 9 (BestCompression);\n// higher levels typically run slower but compress more.\n// Level 0 (NoCompression) does not attempt any compression; it only adds the\n// necessary DEFLATE framing.\n// Level -1 (DefaultCompression) uses the default compression level.\n// Level -2 (ConstantCompression) will use Huffman compression only, giving\n// a very fast compression for all types of input, but sacrificing considerable\n// compression efficiency.\n//\n// If level is in the range [-2, 9] then the error returned will be nil.\n// Otherwise the error returned will be non-nil.\nfunc NewWriter(w io.Writer, level int) (*Writer, error) {\n\tvar dw Writer\n\tif err := dw.d.init(w, level); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &dw, nil\n}\n\n// NewWriterDict is like NewWriter but initializes the new\n// Writer with a preset dictionary.  The returned Writer behaves\n// as if the dictionary had been written to it without producing\n// any compressed output.  The compressed data written to w\n// can only be decompressed by a Reader initialized with the\n// same dictionary.\nfunc NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) {\n\tzw, err := NewWriter(w, level)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tzw.d.fillWindow(dict)\n\tzw.dict = append(zw.dict, dict...) // duplicate dictionary for Reset method.\n\treturn zw, err\n}\n\n// MinCustomWindowSize is the minimum window size that can be sent to NewWriterWindow.\nconst MinCustomWindowSize = 32\n\n// MaxCustomWindowSize is the maximum custom window that can be sent to NewWriterWindow.\nconst MaxCustomWindowSize = windowSize\n\n// NewWriterWindow returns a new Writer compressing data with a custom window size.\n// windowSize must be from MinCustomWindowSize to MaxCustomWindowSize.\nfunc NewWriterWindow(w io.Writer, windowSize int) (*Writer, error) {\n\tif windowSize < MinCustomWindowSize {\n\t\treturn nil, errors.New(\"flate: requested window size less than MinWindowSize\")\n\t}\n\tif windowSize > MaxCustomWindowSize {\n\t\treturn nil, errors.New(\"flate: requested window size bigger than MaxCustomWindowSize\")\n\t}\n\tvar dw Writer\n\tif err := dw.d.init(w, -windowSize); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &dw, nil\n}\n\n// A Writer takes data written to it and writes the compressed\n// form of that data to an underlying writer (see NewWriter).\ntype Writer struct {\n\td    compressor\n\tdict []byte\n}\n\n// Write writes data to w, which will eventually write the\n// compressed form of data to its underlying writer.\nfunc (w *Writer) Write(data []byte) (n int, err error) {\n\treturn w.d.write(data)\n}\n\n// Flush flushes any pending data to the underlying writer.\n// It is useful mainly in compressed network protocols, to ensure that\n// a remote reader has enough data to reconstruct a packet.\n// Flush does not return until the data has been written.\n// Calling Flush when there is no pending data still causes the Writer\n// to emit a sync marker of at least 4 bytes.\n// If the underlying writer returns an error, Flush returns that error.\n//\n// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH.\nfunc (w *Writer) Flush() error {\n\t// For more about flushing:\n\t// http://www.bolet.org/~pornin/deflate-flush.html\n\treturn w.d.syncFlush()\n}\n\n// Close flushes and closes the writer.\nfunc (w *Writer) Close() error {\n\treturn w.d.close()\n}\n\n// Reset discards the writer's state and makes it equivalent to\n// the result of NewWriter or NewWriterDict called with dst\n// and w's level and dictionary.\nfunc (w *Writer) Reset(dst io.Writer) {\n\tif len(w.dict) > 0 {\n\t\t// w was created with NewWriterDict\n\t\tw.d.reset(dst)\n\t\tif dst != nil {\n\t\t\tw.d.fillWindow(w.dict)\n\t\t}\n\t} else {\n\t\t// w was created with NewWriter\n\t\tw.d.reset(dst)\n\t}\n}\n\n// ResetDict discards the writer's state and makes it equivalent to\n// the result of NewWriter or NewWriterDict called with dst\n// and w's level, but sets a specific dictionary.\nfunc (w *Writer) ResetDict(dst io.Writer, dict []byte) {\n\tw.dict = dict\n\tw.d.reset(dst)\n\tw.d.fillWindow(w.dict)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/dict_decoder.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\n// dictDecoder implements the LZ77 sliding dictionary as used in decompression.\n// LZ77 decompresses data through sequences of two forms of commands:\n//\n//   - Literal insertions: Runs of one or more symbols are inserted into the data\n//     stream as is. This is accomplished through the writeByte method for a\n//     single symbol, or combinations of writeSlice/writeMark for multiple symbols.\n//     Any valid stream must start with a literal insertion if no preset dictionary\n//     is used.\n//\n//   - Backward copies: Runs of one or more symbols are copied from previously\n//     emitted data. Backward copies come as the tuple (dist, length) where dist\n//     determines how far back in the stream to copy from and length determines how\n//     many bytes to copy. Note that it is valid for the length to be greater than\n//     the distance. Since LZ77 uses forward copies, that situation is used to\n//     perform a form of run-length encoding on repeated runs of symbols.\n//     The writeCopy and tryWriteCopy are used to implement this command.\n//\n// For performance reasons, this implementation performs little to no sanity\n// checks about the arguments. As such, the invariants documented for each\n// method call must be respected.\ntype dictDecoder struct {\n\thist []byte // Sliding window history\n\n\t// Invariant: 0 <= rdPos <= wrPos <= len(hist)\n\twrPos int  // Current output position in buffer\n\trdPos int  // Have emitted hist[:rdPos] already\n\tfull  bool // Has a full window length been written yet?\n}\n\n// init initializes dictDecoder to have a sliding window dictionary of the given\n// size. If a preset dict is provided, it will initialize the dictionary with\n// the contents of dict.\nfunc (dd *dictDecoder) init(size int, dict []byte) {\n\t*dd = dictDecoder{hist: dd.hist}\n\n\tif cap(dd.hist) < size {\n\t\tdd.hist = make([]byte, size)\n\t}\n\tdd.hist = dd.hist[:size]\n\n\tif len(dict) > len(dd.hist) {\n\t\tdict = dict[len(dict)-len(dd.hist):]\n\t}\n\tdd.wrPos = copy(dd.hist, dict)\n\tif dd.wrPos == len(dd.hist) {\n\t\tdd.wrPos = 0\n\t\tdd.full = true\n\t}\n\tdd.rdPos = dd.wrPos\n}\n\n// histSize reports the total amount of historical data in the dictionary.\nfunc (dd *dictDecoder) histSize() int {\n\tif dd.full {\n\t\treturn len(dd.hist)\n\t}\n\treturn dd.wrPos\n}\n\n// availRead reports the number of bytes that can be flushed by readFlush.\nfunc (dd *dictDecoder) availRead() int {\n\treturn dd.wrPos - dd.rdPos\n}\n\n// availWrite reports the available amount of output buffer space.\nfunc (dd *dictDecoder) availWrite() int {\n\treturn len(dd.hist) - dd.wrPos\n}\n\n// writeSlice returns a slice of the available buffer to write data to.\n//\n// This invariant will be kept: len(s) <= availWrite()\nfunc (dd *dictDecoder) writeSlice() []byte {\n\treturn dd.hist[dd.wrPos:]\n}\n\n// writeMark advances the writer pointer by cnt.\n//\n// This invariant must be kept: 0 <= cnt <= availWrite()\nfunc (dd *dictDecoder) writeMark(cnt int) {\n\tdd.wrPos += cnt\n}\n\n// writeByte writes a single byte to the dictionary.\n//\n// This invariant must be kept: 0 < availWrite()\nfunc (dd *dictDecoder) writeByte(c byte) {\n\tdd.hist[dd.wrPos] = c\n\tdd.wrPos++\n}\n\n// writeCopy copies a string at a given (dist, length) to the output.\n// This returns the number of bytes copied and may be less than the requested\n// length if the available space in the output buffer is too small.\n//\n// This invariant must be kept: 0 < dist <= histSize()\nfunc (dd *dictDecoder) writeCopy(dist, length int) int {\n\tdstBase := dd.wrPos\n\tdstPos := dstBase\n\tsrcPos := dstPos - dist\n\tendPos := dstPos + length\n\tif endPos > len(dd.hist) {\n\t\tendPos = len(dd.hist)\n\t}\n\n\t// Copy non-overlapping section after destination position.\n\t//\n\t// This section is non-overlapping in that the copy length for this section\n\t// is always less than or equal to the backwards distance. This can occur\n\t// if a distance refers to data that wraps-around in the buffer.\n\t// Thus, a backwards copy is performed here; that is, the exact bytes in\n\t// the source prior to the copy is placed in the destination.\n\tif srcPos < 0 {\n\t\tsrcPos += len(dd.hist)\n\t\tdstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:])\n\t\tsrcPos = 0\n\t}\n\n\t// Copy possibly overlapping section before destination position.\n\t//\n\t// This section can overlap if the copy length for this section is larger\n\t// than the backwards distance. This is allowed by LZ77 so that repeated\n\t// strings can be succinctly represented using (dist, length) pairs.\n\t// Thus, a forwards copy is performed here; that is, the bytes copied is\n\t// possibly dependent on the resulting bytes in the destination as the copy\n\t// progresses along. This is functionally equivalent to the following:\n\t//\n\t//\tfor i := 0; i < endPos-dstPos; i++ {\n\t//\t\tdd.hist[dstPos+i] = dd.hist[srcPos+i]\n\t//\t}\n\t//\tdstPos = endPos\n\t//\n\tfor dstPos < endPos {\n\t\tdstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos])\n\t}\n\n\tdd.wrPos = dstPos\n\treturn dstPos - dstBase\n}\n\n// tryWriteCopy tries to copy a string at a given (distance, length) to the\n// output. This specialized version is optimized for short distances.\n//\n// This method is designed to be inlined for performance reasons.\n//\n// This invariant must be kept: 0 < dist <= histSize()\nfunc (dd *dictDecoder) tryWriteCopy(dist, length int) int {\n\tdstPos := dd.wrPos\n\tendPos := dstPos + length\n\tif dstPos < dist || endPos > len(dd.hist) {\n\t\treturn 0\n\t}\n\tdstBase := dstPos\n\tsrcPos := dstPos - dist\n\n\t// Copy possibly overlapping section before destination position.\nloop:\n\tdstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos])\n\tif dstPos < endPos {\n\t\tgoto loop // Avoid for-loop so that this function can be inlined\n\t}\n\n\tdd.wrPos = dstPos\n\treturn dstPos - dstBase\n}\n\n// readFlush returns a slice of the historical buffer that is ready to be\n// emitted to the user. The data returned by readFlush must be fully consumed\n// before calling any other dictDecoder methods.\nfunc (dd *dictDecoder) readFlush() []byte {\n\ttoRead := dd.hist[dd.rdPos:dd.wrPos]\n\tdd.rdPos = dd.wrPos\n\tif dd.wrPos == len(dd.hist) {\n\t\tdd.wrPos, dd.rdPos = 0, 0\n\t\tdd.full = true\n\t}\n\treturn toRead\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/fast_encoder.go",
    "content": "// Copyright 2011 The Snappy-Go Authors. All rights reserved.\n// Modified for deflate by Klaus Post (c) 2015.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\ntype fastEnc interface {\n\tEncode(dst *tokens, src []byte)\n\tReset()\n}\n\nfunc newFastEnc(level int) fastEnc {\n\tswitch level {\n\tcase 1:\n\t\treturn &fastEncL1{fastGen: fastGen{cur: maxStoreBlockSize}}\n\tcase 2:\n\t\treturn &fastEncL2{fastGen: fastGen{cur: maxStoreBlockSize}}\n\tcase 3:\n\t\treturn &fastEncL3{fastGen: fastGen{cur: maxStoreBlockSize}}\n\tcase 4:\n\t\treturn &fastEncL4{fastGen: fastGen{cur: maxStoreBlockSize}}\n\tcase 5:\n\t\treturn &fastEncL5{fastGen: fastGen{cur: maxStoreBlockSize}}\n\tcase 6:\n\t\treturn &fastEncL6{fastGen: fastGen{cur: maxStoreBlockSize}}\n\tdefault:\n\t\tpanic(\"invalid level specified\")\n\t}\n}\n\nconst (\n\ttableBits       = 15             // Bits used in the table\n\ttableSize       = 1 << tableBits // Size of the table\n\ttableShift      = 32 - tableBits // Right-shift to get the tableBits most significant bits of a uint32.\n\tbaseMatchOffset = 1              // The smallest match offset\n\tbaseMatchLength = 3              // The smallest match length per the RFC section 3.2.5\n\tmaxMatchOffset  = 1 << 15        // The largest match offset\n\n\tbTableBits   = 17                                               // Bits used in the big tables\n\tbTableSize   = 1 << bTableBits                                  // Size of the table\n\tallocHistory = maxStoreBlockSize * 5                            // Size to preallocate for history.\n\tbufferReset  = (1 << 31) - allocHistory - maxStoreBlockSize - 1 // Reset the buffer offset when reaching this.\n)\n\nconst (\n\tprime3bytes = 506832829\n\tprime4bytes = 2654435761\n\tprime5bytes = 889523592379\n\tprime6bytes = 227718039650203\n\tprime7bytes = 58295818150454627\n\tprime8bytes = 0xcf1bbcdcb7a56463\n)\n\nfunc load3232(b []byte, i int32) uint32 {\n\treturn binary.LittleEndian.Uint32(b[i:])\n}\n\nfunc load6432(b []byte, i int32) uint64 {\n\treturn binary.LittleEndian.Uint64(b[i:])\n}\n\ntype tableEntry struct {\n\toffset int32\n}\n\n// fastGen maintains the table for matches,\n// and the previous byte block for level 2.\n// This is the generic implementation.\ntype fastGen struct {\n\thist []byte\n\tcur  int32\n}\n\nfunc (e *fastGen) addBlock(src []byte) int32 {\n\t// check if we have space already\n\tif len(e.hist)+len(src) > cap(e.hist) {\n\t\tif cap(e.hist) == 0 {\n\t\t\te.hist = make([]byte, 0, allocHistory)\n\t\t} else {\n\t\t\tif cap(e.hist) < maxMatchOffset*2 {\n\t\t\t\tpanic(\"unexpected buffer size\")\n\t\t\t}\n\t\t\t// Move down\n\t\t\toffset := int32(len(e.hist)) - maxMatchOffset\n\t\t\t// copy(e.hist[0:maxMatchOffset], e.hist[offset:])\n\t\t\t*(*[maxMatchOffset]byte)(e.hist) = *(*[maxMatchOffset]byte)(e.hist[offset:])\n\t\t\te.cur += offset\n\t\t\te.hist = e.hist[:maxMatchOffset]\n\t\t}\n\t}\n\ts := int32(len(e.hist))\n\te.hist = append(e.hist, src...)\n\treturn s\n}\n\ntype tableEntryPrev struct {\n\tCur  tableEntry\n\tPrev tableEntry\n}\n\n// hash7 returns the hash of the lowest 7 bytes of u to fit in a hash table with h bits.\n// Preferably h should be a constant and should always be <64.\nfunc hash7(u uint64, h uint8) uint32 {\n\treturn uint32(((u << (64 - 56)) * prime7bytes) >> ((64 - h) & reg8SizeMask64))\n}\n\n// hashLen returns a hash of the lowest mls bytes of with length output bits.\n// mls must be >=3 and <=8. Any other value will return hash for 4 bytes.\n// length should always be < 32.\n// Preferably length and mls should be a constant for inlining.\nfunc hashLen(u uint64, length, mls uint8) uint32 {\n\tswitch mls {\n\tcase 3:\n\t\treturn (uint32(u<<8) * prime3bytes) >> (32 - length)\n\tcase 5:\n\t\treturn uint32(((u << (64 - 40)) * prime5bytes) >> (64 - length))\n\tcase 6:\n\t\treturn uint32(((u << (64 - 48)) * prime6bytes) >> (64 - length))\n\tcase 7:\n\t\treturn uint32(((u << (64 - 56)) * prime7bytes) >> (64 - length))\n\tcase 8:\n\t\treturn uint32((u * prime8bytes) >> (64 - length))\n\tdefault:\n\t\treturn (uint32(u) * prime4bytes) >> (32 - length)\n\t}\n}\n\n// matchlen will return the match length between offsets and t in src.\n// The maximum length returned is maxMatchLength - 4.\n// It is assumed that s > t, that t >=0 and s < len(src).\nfunc (e *fastGen) matchlen(s, t int32, src []byte) int32 {\n\tif debugDecode {\n\t\tif t >= s {\n\t\t\tpanic(fmt.Sprint(\"t >=s:\", t, s))\n\t\t}\n\t\tif int(s) >= len(src) {\n\t\t\tpanic(fmt.Sprint(\"s >= len(src):\", s, len(src)))\n\t\t}\n\t\tif t < 0 {\n\t\t\tpanic(fmt.Sprint(\"t < 0:\", t))\n\t\t}\n\t\tif s-t > maxMatchOffset {\n\t\t\tpanic(fmt.Sprint(s, \"-\", t, \"(\", s-t, \") > maxMatchLength (\", maxMatchOffset, \")\"))\n\t\t}\n\t}\n\ts1 := int(s) + maxMatchLength - 4\n\tif s1 > len(src) {\n\t\ts1 = len(src)\n\t}\n\n\t// Extend the match to be as long as possible.\n\treturn int32(matchLen(src[s:s1], src[t:]))\n}\n\n// matchlenLong will return the match length between offsets and t in src.\n// It is assumed that s > t, that t >=0 and s < len(src).\nfunc (e *fastGen) matchlenLong(s, t int32, src []byte) int32 {\n\tif debugDeflate {\n\t\tif t >= s {\n\t\t\tpanic(fmt.Sprint(\"t >=s:\", t, s))\n\t\t}\n\t\tif int(s) >= len(src) {\n\t\t\tpanic(fmt.Sprint(\"s >= len(src):\", s, len(src)))\n\t\t}\n\t\tif t < 0 {\n\t\t\tpanic(fmt.Sprint(\"t < 0:\", t))\n\t\t}\n\t\tif s-t > maxMatchOffset {\n\t\t\tpanic(fmt.Sprint(s, \"-\", t, \"(\", s-t, \") > maxMatchLength (\", maxMatchOffset, \")\"))\n\t\t}\n\t}\n\t// Extend the match to be as long as possible.\n\treturn int32(matchLen(src[s:], src[t:]))\n}\n\n// Reset the encoding table.\nfunc (e *fastGen) Reset() {\n\tif cap(e.hist) < allocHistory {\n\t\te.hist = make([]byte, 0, allocHistory)\n\t}\n\t// We offset current position so everything will be out of reach.\n\t// If we are above the buffer reset it will be cleared anyway since len(hist) == 0.\n\tif e.cur <= bufferReset {\n\t\te.cur += maxMatchOffset + int32(len(e.hist))\n\t}\n\te.hist = e.hist[:0]\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n)\n\nconst (\n\t// The largest offset code.\n\toffsetCodeCount = 30\n\n\t// The special code used to mark the end of a block.\n\tendBlockMarker = 256\n\n\t// The first length code.\n\tlengthCodesStart = 257\n\n\t// The number of codegen codes.\n\tcodegenCodeCount = 19\n\tbadCode          = 255\n\n\t// maxPredefinedTokens is the maximum number of tokens\n\t// where we check if fixed size is smaller.\n\tmaxPredefinedTokens = 250\n\n\t// bufferFlushSize indicates the buffer size\n\t// after which bytes are flushed to the writer.\n\t// Should preferably be a multiple of 6, since\n\t// we accumulate 6 bytes between writes to the buffer.\n\tbufferFlushSize = 246\n)\n\n// Minimum length code that emits bits.\nconst lengthExtraBitsMinCode = 8\n\n// The number of extra bits needed by length code X - LENGTH_CODES_START.\nvar lengthExtraBits = [32]uint8{\n\t/* 257 */ 0, 0, 0,\n\t/* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2,\n\t/* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,\n\t/* 280 */ 4, 5, 5, 5, 5, 0,\n}\n\n// The length indicated by length code X - LENGTH_CODES_START.\nvar lengthBase = [32]uint8{\n\t0, 1, 2, 3, 4, 5, 6, 7, 8, 10,\n\t12, 14, 16, 20, 24, 28, 32, 40, 48, 56,\n\t64, 80, 96, 112, 128, 160, 192, 224, 255,\n}\n\n// Minimum offset code that emits bits.\nconst offsetExtraBitsMinCode = 4\n\n// offset code word extra bits.\nvar offsetExtraBits = [32]int8{\n\t0, 0, 0, 0, 1, 1, 2, 2, 3, 3,\n\t4, 4, 5, 5, 6, 6, 7, 7, 8, 8,\n\t9, 9, 10, 10, 11, 11, 12, 12, 13, 13,\n\t/* extended window */\n\t14, 14,\n}\n\nvar offsetCombined = [32]uint32{}\n\nfunc init() {\n\tvar offsetBase = [32]uint32{\n\t\t/* normal deflate */\n\t\t0x000000, 0x000001, 0x000002, 0x000003, 0x000004,\n\t\t0x000006, 0x000008, 0x00000c, 0x000010, 0x000018,\n\t\t0x000020, 0x000030, 0x000040, 0x000060, 0x000080,\n\t\t0x0000c0, 0x000100, 0x000180, 0x000200, 0x000300,\n\t\t0x000400, 0x000600, 0x000800, 0x000c00, 0x001000,\n\t\t0x001800, 0x002000, 0x003000, 0x004000, 0x006000,\n\n\t\t/* extended window */\n\t\t0x008000, 0x00c000,\n\t}\n\n\tfor i := range offsetCombined[:] {\n\t\t// Don't use extended window values...\n\t\tif offsetExtraBits[i] == 0 || offsetBase[i] > 0x006000 {\n\t\t\tcontinue\n\t\t}\n\t\toffsetCombined[i] = uint32(offsetExtraBits[i]) | (offsetBase[i] << 8)\n\t}\n}\n\n// The odd order in which the codegen code sizes are written.\nvar codegenOrder = []uint32{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}\n\ntype huffmanBitWriter struct {\n\t// writer is the underlying writer.\n\t// Do not use it directly; use the write method, which ensures\n\t// that Write errors are sticky.\n\twriter io.Writer\n\n\t// Data waiting to be written is bytes[0:nbytes]\n\t// and then the low nbits of bits.\n\tbits            uint64\n\tnbits           uint8\n\tnbytes          uint8\n\tlastHuffMan     bool\n\tliteralEncoding *huffmanEncoder\n\ttmpLitEncoding  *huffmanEncoder\n\toffsetEncoding  *huffmanEncoder\n\tcodegenEncoding *huffmanEncoder\n\terr             error\n\tlastHeader      int\n\t// Set between 0 (reused block can be up to 2x the size)\n\tlogNewTablePenalty uint\n\tbytes              [256 + 8]byte\n\tliteralFreq        [lengthCodesStart + 32]uint16\n\toffsetFreq         [32]uint16\n\tcodegenFreq        [codegenCodeCount]uint16\n\n\t// codegen must have an extra space for the final symbol.\n\tcodegen [literalCount + offsetCodeCount + 1]uint8\n}\n\n// Huffman reuse.\n//\n// The huffmanBitWriter supports reusing huffman tables and thereby combining block sections.\n//\n// This is controlled by several variables:\n//\n// If lastHeader is non-zero the Huffman table can be reused.\n// This also indicates that a Huffman table has been generated that can output all\n// possible symbols.\n// It also indicates that an EOB has not yet been emitted, so if a new tabel is generated\n// an EOB with the previous table must be written.\n//\n// If lastHuffMan is set, a table for outputting literals has been generated and offsets are invalid.\n//\n// An incoming block estimates the output size of a new table using a 'fresh' by calculating the\n// optimal size and adding a penalty in 'logNewTablePenalty'.\n// A Huffman table is not optimal, which is why we add a penalty, and generating a new table\n// is slower both for compression and decompression.\n\nfunc newHuffmanBitWriter(w io.Writer) *huffmanBitWriter {\n\treturn &huffmanBitWriter{\n\t\twriter:          w,\n\t\tliteralEncoding: newHuffmanEncoder(literalCount),\n\t\ttmpLitEncoding:  newHuffmanEncoder(literalCount),\n\t\tcodegenEncoding: newHuffmanEncoder(codegenCodeCount),\n\t\toffsetEncoding:  newHuffmanEncoder(offsetCodeCount),\n\t}\n}\n\nfunc (w *huffmanBitWriter) reset(writer io.Writer) {\n\tw.writer = writer\n\tw.bits, w.nbits, w.nbytes, w.err = 0, 0, 0, nil\n\tw.lastHeader = 0\n\tw.lastHuffMan = false\n}\n\nfunc (w *huffmanBitWriter) canReuse(t *tokens) (ok bool) {\n\ta := t.offHist[:offsetCodeCount]\n\tb := w.offsetEncoding.codes\n\tb = b[:len(a)]\n\tfor i, v := range a {\n\t\tif v != 0 && b[i].zero() {\n\t\t\treturn false\n\t\t}\n\t}\n\n\ta = t.extraHist[:literalCount-256]\n\tb = w.literalEncoding.codes[256:literalCount]\n\tb = b[:len(a)]\n\tfor i, v := range a {\n\t\tif v != 0 && b[i].zero() {\n\t\t\treturn false\n\t\t}\n\t}\n\n\ta = t.litHist[:256]\n\tb = w.literalEncoding.codes[:len(a)]\n\tfor i, v := range a {\n\t\tif v != 0 && b[i].zero() {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (w *huffmanBitWriter) flush() {\n\tif w.err != nil {\n\t\tw.nbits = 0\n\t\treturn\n\t}\n\tif w.lastHeader > 0 {\n\t\t// We owe an EOB\n\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\tw.lastHeader = 0\n\t}\n\tn := w.nbytes\n\tfor w.nbits != 0 {\n\t\tw.bytes[n] = byte(w.bits)\n\t\tw.bits >>= 8\n\t\tif w.nbits > 8 { // Avoid underflow\n\t\t\tw.nbits -= 8\n\t\t} else {\n\t\t\tw.nbits = 0\n\t\t}\n\t\tn++\n\t}\n\tw.bits = 0\n\tw.write(w.bytes[:n])\n\tw.nbytes = 0\n}\n\nfunc (w *huffmanBitWriter) write(b []byte) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\t_, w.err = w.writer.Write(b)\n}\n\nfunc (w *huffmanBitWriter) writeBits(b int32, nb uint8) {\n\tw.bits |= uint64(b) << (w.nbits & 63)\n\tw.nbits += nb\n\tif w.nbits >= 48 {\n\t\tw.writeOutBits()\n\t}\n}\n\nfunc (w *huffmanBitWriter) writeBytes(bytes []byte) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\tn := w.nbytes\n\tif w.nbits&7 != 0 {\n\t\tw.err = InternalError(\"writeBytes with unfinished bits\")\n\t\treturn\n\t}\n\tfor w.nbits != 0 {\n\t\tw.bytes[n] = byte(w.bits)\n\t\tw.bits >>= 8\n\t\tw.nbits -= 8\n\t\tn++\n\t}\n\tif n != 0 {\n\t\tw.write(w.bytes[:n])\n\t}\n\tw.nbytes = 0\n\tw.write(bytes)\n}\n\n// RFC 1951 3.2.7 specifies a special run-length encoding for specifying\n// the literal and offset lengths arrays (which are concatenated into a single\n// array).  This method generates that run-length encoding.\n//\n// The result is written into the codegen array, and the frequencies\n// of each code is written into the codegenFreq array.\n// Codes 0-15 are single byte codes. Codes 16-18 are followed by additional\n// information. Code badCode is an end marker\n//\n//\tnumLiterals      The number of literals in literalEncoding\n//\tnumOffsets       The number of offsets in offsetEncoding\n//\tlitenc, offenc   The literal and offset encoder to use\nfunc (w *huffmanBitWriter) generateCodegen(numLiterals int, numOffsets int, litEnc, offEnc *huffmanEncoder) {\n\tfor i := range w.codegenFreq {\n\t\tw.codegenFreq[i] = 0\n\t}\n\t// Note that we are using codegen both as a temporary variable for holding\n\t// a copy of the frequencies, and as the place where we put the result.\n\t// This is fine because the output is always shorter than the input used\n\t// so far.\n\tcodegen := w.codegen[:] // cache\n\t// Copy the concatenated code sizes to codegen. Put a marker at the end.\n\tcgnl := codegen[:numLiterals]\n\tfor i := range cgnl {\n\t\tcgnl[i] = litEnc.codes[i].len()\n\t}\n\n\tcgnl = codegen[numLiterals : numLiterals+numOffsets]\n\tfor i := range cgnl {\n\t\tcgnl[i] = offEnc.codes[i].len()\n\t}\n\tcodegen[numLiterals+numOffsets] = badCode\n\n\tsize := codegen[0]\n\tcount := 1\n\toutIndex := 0\n\tfor inIndex := 1; size != badCode; inIndex++ {\n\t\t// INVARIANT: We have seen \"count\" copies of size that have not yet\n\t\t// had output generated for them.\n\t\tnextSize := codegen[inIndex]\n\t\tif nextSize == size {\n\t\t\tcount++\n\t\t\tcontinue\n\t\t}\n\t\t// We need to generate codegen indicating \"count\" of size.\n\t\tif size != 0 {\n\t\t\tcodegen[outIndex] = size\n\t\t\toutIndex++\n\t\t\tw.codegenFreq[size]++\n\t\t\tcount--\n\t\t\tfor count >= 3 {\n\t\t\t\tn := 6\n\t\t\t\tif n > count {\n\t\t\t\t\tn = count\n\t\t\t\t}\n\t\t\t\tcodegen[outIndex] = 16\n\t\t\t\toutIndex++\n\t\t\t\tcodegen[outIndex] = uint8(n - 3)\n\t\t\t\toutIndex++\n\t\t\t\tw.codegenFreq[16]++\n\t\t\t\tcount -= n\n\t\t\t}\n\t\t} else {\n\t\t\tfor count >= 11 {\n\t\t\t\tn := 138\n\t\t\t\tif n > count {\n\t\t\t\t\tn = count\n\t\t\t\t}\n\t\t\t\tcodegen[outIndex] = 18\n\t\t\t\toutIndex++\n\t\t\t\tcodegen[outIndex] = uint8(n - 11)\n\t\t\t\toutIndex++\n\t\t\t\tw.codegenFreq[18]++\n\t\t\t\tcount -= n\n\t\t\t}\n\t\t\tif count >= 3 {\n\t\t\t\t// count >= 3 && count <= 10\n\t\t\t\tcodegen[outIndex] = 17\n\t\t\t\toutIndex++\n\t\t\t\tcodegen[outIndex] = uint8(count - 3)\n\t\t\t\toutIndex++\n\t\t\t\tw.codegenFreq[17]++\n\t\t\t\tcount = 0\n\t\t\t}\n\t\t}\n\t\tcount--\n\t\tfor ; count >= 0; count-- {\n\t\t\tcodegen[outIndex] = size\n\t\t\toutIndex++\n\t\t\tw.codegenFreq[size]++\n\t\t}\n\t\t// Set up invariant for next time through the loop.\n\t\tsize = nextSize\n\t\tcount = 1\n\t}\n\t// Marker indicating the end of the codegen.\n\tcodegen[outIndex] = badCode\n}\n\nfunc (w *huffmanBitWriter) codegens() int {\n\tnumCodegens := len(w.codegenFreq)\n\tfor numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 {\n\t\tnumCodegens--\n\t}\n\treturn numCodegens\n}\n\nfunc (w *huffmanBitWriter) headerSize() (size, numCodegens int) {\n\tnumCodegens = len(w.codegenFreq)\n\tfor numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 {\n\t\tnumCodegens--\n\t}\n\treturn 3 + 5 + 5 + 4 + (3 * numCodegens) +\n\t\tw.codegenEncoding.bitLength(w.codegenFreq[:]) +\n\t\tint(w.codegenFreq[16])*2 +\n\t\tint(w.codegenFreq[17])*3 +\n\t\tint(w.codegenFreq[18])*7, numCodegens\n}\n\n// dynamicSize returns the size of dynamically encoded data in bits.\nfunc (w *huffmanBitWriter) dynamicReuseSize(litEnc, offEnc *huffmanEncoder) (size int) {\n\tsize = litEnc.bitLength(w.literalFreq[:]) +\n\t\toffEnc.bitLength(w.offsetFreq[:])\n\treturn size\n}\n\n// dynamicSize returns the size of dynamically encoded data in bits.\nfunc (w *huffmanBitWriter) dynamicSize(litEnc, offEnc *huffmanEncoder, extraBits int) (size, numCodegens int) {\n\theader, numCodegens := w.headerSize()\n\tsize = header +\n\t\tlitEnc.bitLength(w.literalFreq[:]) +\n\t\toffEnc.bitLength(w.offsetFreq[:]) +\n\t\textraBits\n\treturn size, numCodegens\n}\n\n// extraBitSize will return the number of bits that will be written\n// as \"extra\" bits on matches.\nfunc (w *huffmanBitWriter) extraBitSize() int {\n\ttotal := 0\n\tfor i, n := range w.literalFreq[257:literalCount] {\n\t\ttotal += int(n) * int(lengthExtraBits[i&31])\n\t}\n\tfor i, n := range w.offsetFreq[:offsetCodeCount] {\n\t\ttotal += int(n) * int(offsetExtraBits[i&31])\n\t}\n\treturn total\n}\n\n// fixedSize returns the size of dynamically encoded data in bits.\nfunc (w *huffmanBitWriter) fixedSize(extraBits int) int {\n\treturn 3 +\n\t\tfixedLiteralEncoding.bitLength(w.literalFreq[:]) +\n\t\tfixedOffsetEncoding.bitLength(w.offsetFreq[:]) +\n\t\textraBits\n}\n\n// storedSize calculates the stored size, including header.\n// The function returns the size in bits and whether the block\n// fits inside a single block.\nfunc (w *huffmanBitWriter) storedSize(in []byte) (int, bool) {\n\tif in == nil {\n\t\treturn 0, false\n\t}\n\tif len(in) <= maxStoreBlockSize {\n\t\treturn (len(in) + 5) * 8, true\n\t}\n\treturn 0, false\n}\n\nfunc (w *huffmanBitWriter) writeCode(c hcode) {\n\t// The function does not get inlined if we \"& 63\" the shift.\n\tw.bits |= c.code64() << (w.nbits & 63)\n\tw.nbits += c.len()\n\tif w.nbits >= 48 {\n\t\tw.writeOutBits()\n\t}\n}\n\n// writeOutBits will write bits to the buffer.\nfunc (w *huffmanBitWriter) writeOutBits() {\n\tbits := w.bits\n\tw.bits >>= 48\n\tw.nbits -= 48\n\tn := w.nbytes\n\n\t// We over-write, but faster...\n\tbinary.LittleEndian.PutUint64(w.bytes[n:], bits)\n\tn += 6\n\n\tif n >= bufferFlushSize {\n\t\tif w.err != nil {\n\t\t\tn = 0\n\t\t\treturn\n\t\t}\n\t\tw.write(w.bytes[:n])\n\t\tn = 0\n\t}\n\n\tw.nbytes = n\n}\n\n// Write the header of a dynamic Huffman block to the output stream.\n//\n//\tnumLiterals  The number of literals specified in codegen\n//\tnumOffsets   The number of offsets specified in codegen\n//\tnumCodegens  The number of codegens used in codegen\nfunc (w *huffmanBitWriter) writeDynamicHeader(numLiterals int, numOffsets int, numCodegens int, isEof bool) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\tvar firstBits int32 = 4\n\tif isEof {\n\t\tfirstBits = 5\n\t}\n\tw.writeBits(firstBits, 3)\n\tw.writeBits(int32(numLiterals-257), 5)\n\tw.writeBits(int32(numOffsets-1), 5)\n\tw.writeBits(int32(numCodegens-4), 4)\n\n\tfor i := 0; i < numCodegens; i++ {\n\t\tvalue := uint(w.codegenEncoding.codes[codegenOrder[i]].len())\n\t\tw.writeBits(int32(value), 3)\n\t}\n\n\ti := 0\n\tfor {\n\t\tvar codeWord = uint32(w.codegen[i])\n\t\ti++\n\t\tif codeWord == badCode {\n\t\t\tbreak\n\t\t}\n\t\tw.writeCode(w.codegenEncoding.codes[codeWord])\n\n\t\tswitch codeWord {\n\t\tcase 16:\n\t\t\tw.writeBits(int32(w.codegen[i]), 2)\n\t\t\ti++\n\t\tcase 17:\n\t\t\tw.writeBits(int32(w.codegen[i]), 3)\n\t\t\ti++\n\t\tcase 18:\n\t\t\tw.writeBits(int32(w.codegen[i]), 7)\n\t\t\ti++\n\t\t}\n\t}\n}\n\n// writeStoredHeader will write a stored header.\n// If the stored block is only used for EOF,\n// it is replaced with a fixed huffman block.\nfunc (w *huffmanBitWriter) writeStoredHeader(length int, isEof bool) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\tif w.lastHeader > 0 {\n\t\t// We owe an EOB\n\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\tw.lastHeader = 0\n\t}\n\n\t// To write EOF, use a fixed encoding block. 10 bits instead of 5 bytes.\n\tif length == 0 && isEof {\n\t\tw.writeFixedHeader(isEof)\n\t\t// EOB: 7 bits, value: 0\n\t\tw.writeBits(0, 7)\n\t\tw.flush()\n\t\treturn\n\t}\n\n\tvar flag int32\n\tif isEof {\n\t\tflag = 1\n\t}\n\tw.writeBits(flag, 3)\n\tw.flush()\n\tw.writeBits(int32(length), 16)\n\tw.writeBits(int32(^uint16(length)), 16)\n}\n\nfunc (w *huffmanBitWriter) writeFixedHeader(isEof bool) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\tif w.lastHeader > 0 {\n\t\t// We owe an EOB\n\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\tw.lastHeader = 0\n\t}\n\n\t// Indicate that we are a fixed Huffman block\n\tvar value int32 = 2\n\tif isEof {\n\t\tvalue = 3\n\t}\n\tw.writeBits(value, 3)\n}\n\n// writeBlock will write a block of tokens with the smallest encoding.\n// The original input can be supplied, and if the huffman encoded data\n// is larger than the original bytes, the data will be written as a\n// stored block.\n// If the input is nil, the tokens will always be Huffman encoded.\nfunc (w *huffmanBitWriter) writeBlock(tokens *tokens, eof bool, input []byte) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\n\ttokens.AddEOB()\n\tif w.lastHeader > 0 {\n\t\t// We owe an EOB\n\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\tw.lastHeader = 0\n\t}\n\tnumLiterals, numOffsets := w.indexTokens(tokens, false)\n\tw.generate()\n\tvar extraBits int\n\tstoredSize, storable := w.storedSize(input)\n\tif storable {\n\t\textraBits = w.extraBitSize()\n\t}\n\n\t// Figure out smallest code.\n\t// Fixed Huffman baseline.\n\tvar literalEncoding = fixedLiteralEncoding\n\tvar offsetEncoding = fixedOffsetEncoding\n\tvar size = math.MaxInt32\n\tif tokens.n < maxPredefinedTokens {\n\t\tsize = w.fixedSize(extraBits)\n\t}\n\n\t// Dynamic Huffman?\n\tvar numCodegens int\n\n\t// Generate codegen and codegenFrequencies, which indicates how to encode\n\t// the literalEncoding and the offsetEncoding.\n\tw.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding)\n\tw.codegenEncoding.generate(w.codegenFreq[:], 7)\n\tdynamicSize, numCodegens := w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits)\n\n\tif dynamicSize < size {\n\t\tsize = dynamicSize\n\t\tliteralEncoding = w.literalEncoding\n\t\toffsetEncoding = w.offsetEncoding\n\t}\n\n\t// Stored bytes?\n\tif storable && storedSize <= size {\n\t\tw.writeStoredHeader(len(input), eof)\n\t\tw.writeBytes(input)\n\t\treturn\n\t}\n\n\t// Huffman.\n\tif literalEncoding == fixedLiteralEncoding {\n\t\tw.writeFixedHeader(eof)\n\t} else {\n\t\tw.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof)\n\t}\n\n\t// Write the tokens.\n\tw.writeTokens(tokens.Slice(), literalEncoding.codes, offsetEncoding.codes)\n}\n\n// writeBlockDynamic encodes a block using a dynamic Huffman table.\n// This should be used if the symbols used have a disproportionate\n// histogram distribution.\n// If input is supplied and the compression savings are below 1/16th of the\n// input size the block is stored.\nfunc (w *huffmanBitWriter) writeBlockDynamic(tokens *tokens, eof bool, input []byte, sync bool) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\n\tsync = sync || eof\n\tif sync {\n\t\ttokens.AddEOB()\n\t}\n\n\t// We cannot reuse pure huffman table, and must mark as EOF.\n\tif (w.lastHuffMan || eof) && w.lastHeader > 0 {\n\t\t// We will not try to reuse.\n\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\tw.lastHeader = 0\n\t\tw.lastHuffMan = false\n\t}\n\n\t// fillReuse enables filling of empty values.\n\t// This will make encodings always reusable without testing.\n\t// However, this does not appear to benefit on most cases.\n\tconst fillReuse = false\n\n\t// Check if we can reuse...\n\tif !fillReuse && w.lastHeader > 0 && !w.canReuse(tokens) {\n\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\tw.lastHeader = 0\n\t}\n\n\tnumLiterals, numOffsets := w.indexTokens(tokens, !sync)\n\textraBits := 0\n\tssize, storable := w.storedSize(input)\n\n\tconst usePrefs = true\n\tif storable || w.lastHeader > 0 {\n\t\textraBits = w.extraBitSize()\n\t}\n\n\tvar size int\n\n\t// Check if we should reuse.\n\tif w.lastHeader > 0 {\n\t\t// Estimate size for using a new table.\n\t\t// Use the previous header size as the best estimate.\n\t\tnewSize := w.lastHeader + tokens.EstimatedBits()\n\t\tnewSize += int(w.literalEncoding.codes[endBlockMarker].len()) + newSize>>w.logNewTablePenalty\n\n\t\t// The estimated size is calculated as an optimal table.\n\t\t// We add a penalty to make it more realistic and re-use a bit more.\n\t\treuseSize := w.dynamicReuseSize(w.literalEncoding, w.offsetEncoding) + extraBits\n\n\t\t// Check if a new table is better.\n\t\tif newSize < reuseSize {\n\t\t\t// Write the EOB we owe.\n\t\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\t\tsize = newSize\n\t\t\tw.lastHeader = 0\n\t\t} else {\n\t\t\tsize = reuseSize\n\t\t}\n\n\t\tif tokens.n < maxPredefinedTokens {\n\t\t\tif preSize := w.fixedSize(extraBits) + 7; usePrefs && preSize < size {\n\t\t\t\t// Check if we get a reasonable size decrease.\n\t\t\t\tif storable && ssize <= size {\n\t\t\t\t\tw.writeStoredHeader(len(input), eof)\n\t\t\t\t\tw.writeBytes(input)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tw.writeFixedHeader(eof)\n\t\t\t\tif !sync {\n\t\t\t\t\ttokens.AddEOB()\n\t\t\t\t}\n\t\t\t\tw.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\t// Check if we get a reasonable size decrease.\n\t\tif storable && ssize <= size {\n\t\t\tw.writeStoredHeader(len(input), eof)\n\t\t\tw.writeBytes(input)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// We want a new block/table\n\tif w.lastHeader == 0 {\n\t\tif fillReuse && !sync {\n\t\t\tw.fillTokens()\n\t\t\tnumLiterals, numOffsets = maxNumLit, maxNumDist\n\t\t} else {\n\t\t\tw.literalFreq[endBlockMarker] = 1\n\t\t}\n\n\t\tw.generate()\n\t\t// Generate codegen and codegenFrequencies, which indicates how to encode\n\t\t// the literalEncoding and the offsetEncoding.\n\t\tw.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding)\n\t\tw.codegenEncoding.generate(w.codegenFreq[:], 7)\n\n\t\tvar numCodegens int\n\t\tif fillReuse && !sync {\n\t\t\t// Reindex for accurate size...\n\t\t\tw.indexTokens(tokens, true)\n\t\t}\n\t\tsize, numCodegens = w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits)\n\n\t\t// Store predefined, if we don't get a reasonable improvement.\n\t\tif tokens.n < maxPredefinedTokens {\n\t\t\tif preSize := w.fixedSize(extraBits); usePrefs && preSize <= size {\n\t\t\t\t// Store bytes, if we don't get an improvement.\n\t\t\t\tif storable && ssize <= preSize {\n\t\t\t\t\tw.writeStoredHeader(len(input), eof)\n\t\t\t\t\tw.writeBytes(input)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tw.writeFixedHeader(eof)\n\t\t\t\tif !sync {\n\t\t\t\t\ttokens.AddEOB()\n\t\t\t\t}\n\t\t\t\tw.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tif storable && ssize <= size {\n\t\t\t// Store bytes, if we don't get an improvement.\n\t\t\tw.writeStoredHeader(len(input), eof)\n\t\t\tw.writeBytes(input)\n\t\t\treturn\n\t\t}\n\n\t\t// Write Huffman table.\n\t\tw.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof)\n\t\tif !sync {\n\t\t\tw.lastHeader, _ = w.headerSize()\n\t\t}\n\t\tw.lastHuffMan = false\n\t}\n\n\tif sync {\n\t\tw.lastHeader = 0\n\t}\n\t// Write the tokens.\n\tw.writeTokens(tokens.Slice(), w.literalEncoding.codes, w.offsetEncoding.codes)\n}\n\nfunc (w *huffmanBitWriter) fillTokens() {\n\tfor i, v := range w.literalFreq[:literalCount] {\n\t\tif v == 0 {\n\t\t\tw.literalFreq[i] = 1\n\t\t}\n\t}\n\tfor i, v := range w.offsetFreq[:offsetCodeCount] {\n\t\tif v == 0 {\n\t\t\tw.offsetFreq[i] = 1\n\t\t}\n\t}\n}\n\n// indexTokens indexes a slice of tokens, and updates\n// literalFreq and offsetFreq, and generates literalEncoding\n// and offsetEncoding.\n// The number of literal and offset tokens is returned.\nfunc (w *huffmanBitWriter) indexTokens(t *tokens, filled bool) (numLiterals, numOffsets int) {\n\t//copy(w.literalFreq[:], t.litHist[:])\n\t*(*[256]uint16)(w.literalFreq[:]) = t.litHist\n\t//copy(w.literalFreq[256:], t.extraHist[:])\n\t*(*[32]uint16)(w.literalFreq[256:]) = t.extraHist\n\tw.offsetFreq = t.offHist\n\n\tif t.n == 0 {\n\t\treturn\n\t}\n\tif filled {\n\t\treturn maxNumLit, maxNumDist\n\t}\n\t// get the number of literals\n\tnumLiterals = len(w.literalFreq)\n\tfor w.literalFreq[numLiterals-1] == 0 {\n\t\tnumLiterals--\n\t}\n\t// get the number of offsets\n\tnumOffsets = len(w.offsetFreq)\n\tfor numOffsets > 0 && w.offsetFreq[numOffsets-1] == 0 {\n\t\tnumOffsets--\n\t}\n\tif numOffsets == 0 {\n\t\t// We haven't found a single match. If we want to go with the dynamic encoding,\n\t\t// we should count at least one offset to be sure that the offset huffman tree could be encoded.\n\t\tw.offsetFreq[0] = 1\n\t\tnumOffsets = 1\n\t}\n\treturn\n}\n\nfunc (w *huffmanBitWriter) generate() {\n\tw.literalEncoding.generate(w.literalFreq[:literalCount], 15)\n\tw.offsetEncoding.generate(w.offsetFreq[:offsetCodeCount], 15)\n}\n\n// writeTokens writes a slice of tokens to the output.\n// codes for literal and offset encoding must be supplied.\nfunc (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\tif len(tokens) == 0 {\n\t\treturn\n\t}\n\n\t// Only last token should be endBlockMarker.\n\tvar deferEOB bool\n\tif tokens[len(tokens)-1] == endBlockMarker {\n\t\ttokens = tokens[:len(tokens)-1]\n\t\tdeferEOB = true\n\t}\n\n\t// Create slices up to the next power of two to avoid bounds checks.\n\tlits := leCodes[:256]\n\toffs := oeCodes[:32]\n\tlengths := leCodes[lengthCodesStart:]\n\tlengths = lengths[:32]\n\n\t// Go 1.16 LOVES having these on stack.\n\tbits, nbits, nbytes := w.bits, w.nbits, w.nbytes\n\n\tfor _, t := range tokens {\n\t\tif t < 256 {\n\t\t\t//w.writeCode(lits[t.literal()])\n\t\t\tc := lits[t]\n\t\t\tbits |= c.code64() << (nbits & 63)\n\t\t\tnbits += c.len()\n\t\t\tif nbits >= 48 {\n\t\t\t\tbinary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)\n\t\t\t\t//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits\n\t\t\t\tbits >>= 48\n\t\t\t\tnbits -= 48\n\t\t\t\tnbytes += 6\n\t\t\t\tif nbytes >= bufferFlushSize {\n\t\t\t\t\tif w.err != nil {\n\t\t\t\t\t\tnbytes = 0\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t_, w.err = w.writer.Write(w.bytes[:nbytes])\n\t\t\t\t\tnbytes = 0\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Write the length\n\t\tlength := t.length()\n\t\tlengthCode := lengthCode(length) & 31\n\t\tif false {\n\t\t\tw.writeCode(lengths[lengthCode])\n\t\t} else {\n\t\t\t// inlined\n\t\t\tc := lengths[lengthCode]\n\t\t\tbits |= c.code64() << (nbits & 63)\n\t\t\tnbits += c.len()\n\t\t\tif nbits >= 48 {\n\t\t\t\tbinary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)\n\t\t\t\t//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits\n\t\t\t\tbits >>= 48\n\t\t\t\tnbits -= 48\n\t\t\t\tnbytes += 6\n\t\t\t\tif nbytes >= bufferFlushSize {\n\t\t\t\t\tif w.err != nil {\n\t\t\t\t\t\tnbytes = 0\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t_, w.err = w.writer.Write(w.bytes[:nbytes])\n\t\t\t\t\tnbytes = 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif lengthCode >= lengthExtraBitsMinCode {\n\t\t\textraLengthBits := lengthExtraBits[lengthCode]\n\t\t\t//w.writeBits(extraLength, extraLengthBits)\n\t\t\textraLength := int32(length - lengthBase[lengthCode])\n\t\t\tbits |= uint64(extraLength) << (nbits & 63)\n\t\t\tnbits += extraLengthBits\n\t\t\tif nbits >= 48 {\n\t\t\t\tbinary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)\n\t\t\t\t//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits\n\t\t\t\tbits >>= 48\n\t\t\t\tnbits -= 48\n\t\t\t\tnbytes += 6\n\t\t\t\tif nbytes >= bufferFlushSize {\n\t\t\t\t\tif w.err != nil {\n\t\t\t\t\t\tnbytes = 0\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t_, w.err = w.writer.Write(w.bytes[:nbytes])\n\t\t\t\t\tnbytes = 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Write the offset\n\t\toffset := t.offset()\n\t\toffsetCode := (offset >> 16) & 31\n\t\tif false {\n\t\t\tw.writeCode(offs[offsetCode])\n\t\t} else {\n\t\t\t// inlined\n\t\t\tc := offs[offsetCode]\n\t\t\tbits |= c.code64() << (nbits & 63)\n\t\t\tnbits += c.len()\n\t\t\tif nbits >= 48 {\n\t\t\t\tbinary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)\n\t\t\t\t//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits\n\t\t\t\tbits >>= 48\n\t\t\t\tnbits -= 48\n\t\t\t\tnbytes += 6\n\t\t\t\tif nbytes >= bufferFlushSize {\n\t\t\t\t\tif w.err != nil {\n\t\t\t\t\t\tnbytes = 0\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t_, w.err = w.writer.Write(w.bytes[:nbytes])\n\t\t\t\t\tnbytes = 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif offsetCode >= offsetExtraBitsMinCode {\n\t\t\toffsetComb := offsetCombined[offsetCode]\n\t\t\t//w.writeBits(extraOffset, extraOffsetBits)\n\t\t\tbits |= uint64((offset-(offsetComb>>8))&matchOffsetOnlyMask) << (nbits & 63)\n\t\t\tnbits += uint8(offsetComb)\n\t\t\tif nbits >= 48 {\n\t\t\t\tbinary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)\n\t\t\t\t//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits\n\t\t\t\tbits >>= 48\n\t\t\t\tnbits -= 48\n\t\t\t\tnbytes += 6\n\t\t\t\tif nbytes >= bufferFlushSize {\n\t\t\t\t\tif w.err != nil {\n\t\t\t\t\t\tnbytes = 0\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t_, w.err = w.writer.Write(w.bytes[:nbytes])\n\t\t\t\t\tnbytes = 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Restore...\n\tw.bits, w.nbits, w.nbytes = bits, nbits, nbytes\n\n\tif deferEOB {\n\t\tw.writeCode(leCodes[endBlockMarker])\n\t}\n}\n\n// huffOffset is a static offset encoder used for huffman only encoding.\n// It can be reused since we will not be encoding offset values.\nvar huffOffset *huffmanEncoder\n\nfunc init() {\n\tw := newHuffmanBitWriter(nil)\n\tw.offsetFreq[0] = 1\n\thuffOffset = newHuffmanEncoder(offsetCodeCount)\n\thuffOffset.generate(w.offsetFreq[:offsetCodeCount], 15)\n}\n\n// writeBlockHuff encodes a block of bytes as either\n// Huffman encoded literals or uncompressed bytes if the\n// results only gains very little from compression.\nfunc (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) {\n\tif w.err != nil {\n\t\treturn\n\t}\n\n\t// Clear histogram\n\tfor i := range w.literalFreq[:] {\n\t\tw.literalFreq[i] = 0\n\t}\n\tif !w.lastHuffMan {\n\t\tfor i := range w.offsetFreq[:] {\n\t\t\tw.offsetFreq[i] = 0\n\t\t}\n\t}\n\n\tconst numLiterals = endBlockMarker + 1\n\tconst numOffsets = 1\n\n\t// Add everything as literals\n\t// We have to estimate the header size.\n\t// Assume header is around 70 bytes:\n\t// https://stackoverflow.com/a/25454430\n\tconst guessHeaderSizeBits = 70 * 8\n\thistogram(input, w.literalFreq[:numLiterals])\n\tssize, storable := w.storedSize(input)\n\tif storable && len(input) > 1024 {\n\t\t// Quick check for incompressible content.\n\t\tabs := float64(0)\n\t\tavg := float64(len(input)) / 256\n\t\tmax := float64(len(input) * 2)\n\t\tfor _, v := range w.literalFreq[:256] {\n\t\t\tdiff := float64(v) - avg\n\t\t\tabs += diff * diff\n\t\t\tif abs > max {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif abs < max {\n\t\t\tif debugDeflate {\n\t\t\t\tfmt.Println(\"stored\", abs, \"<\", max)\n\t\t\t}\n\t\t\t// No chance we can compress this...\n\t\t\tw.writeStoredHeader(len(input), eof)\n\t\t\tw.writeBytes(input)\n\t\t\treturn\n\t\t}\n\t}\n\tw.literalFreq[endBlockMarker] = 1\n\tw.tmpLitEncoding.generate(w.literalFreq[:numLiterals], 15)\n\testBits := w.tmpLitEncoding.canReuseBits(w.literalFreq[:numLiterals])\n\tif estBits < math.MaxInt32 {\n\t\testBits += w.lastHeader\n\t\tif w.lastHeader == 0 {\n\t\t\testBits += guessHeaderSizeBits\n\t\t}\n\t\testBits += estBits >> w.logNewTablePenalty\n\t}\n\n\t// Store bytes, if we don't get a reasonable improvement.\n\tif storable && ssize <= estBits {\n\t\tif debugDeflate {\n\t\t\tfmt.Println(\"stored,\", ssize, \"<=\", estBits)\n\t\t}\n\t\tw.writeStoredHeader(len(input), eof)\n\t\tw.writeBytes(input)\n\t\treturn\n\t}\n\n\tif w.lastHeader > 0 {\n\t\treuseSize := w.literalEncoding.canReuseBits(w.literalFreq[:256])\n\n\t\tif estBits < reuseSize {\n\t\t\tif debugDeflate {\n\t\t\t\tfmt.Println(\"NOT reusing, reuse:\", reuseSize/8, \"> new:\", estBits/8, \"header est:\", w.lastHeader/8, \"bytes\")\n\t\t\t}\n\t\t\t// We owe an EOB\n\t\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\t\tw.lastHeader = 0\n\t\t} else if debugDeflate {\n\t\t\tfmt.Println(\"reusing, reuse:\", reuseSize/8, \"> new:\", estBits/8, \"- header est:\", w.lastHeader/8)\n\t\t}\n\t}\n\n\tcount := 0\n\tif w.lastHeader == 0 {\n\t\t// Use the temp encoding, so swap.\n\t\tw.literalEncoding, w.tmpLitEncoding = w.tmpLitEncoding, w.literalEncoding\n\t\t// Generate codegen and codegenFrequencies, which indicates how to encode\n\t\t// the literalEncoding and the offsetEncoding.\n\t\tw.generateCodegen(numLiterals, numOffsets, w.literalEncoding, huffOffset)\n\t\tw.codegenEncoding.generate(w.codegenFreq[:], 7)\n\t\tnumCodegens := w.codegens()\n\n\t\t// Huffman.\n\t\tw.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof)\n\t\tw.lastHuffMan = true\n\t\tw.lastHeader, _ = w.headerSize()\n\t\tif debugDeflate {\n\t\t\tcount += w.lastHeader\n\t\t\tfmt.Println(\"header:\", count/8)\n\t\t}\n\t}\n\n\tencoding := w.literalEncoding.codes[:256]\n\t// Go 1.16 LOVES having these on stack. At least 1.5x the speed.\n\tbits, nbits, nbytes := w.bits, w.nbits, w.nbytes\n\n\tif debugDeflate {\n\t\tcount -= int(nbytes)*8 + int(nbits)\n\t}\n\t// Unroll, write 3 codes/loop.\n\t// Fastest number of unrolls.\n\tfor len(input) > 3 {\n\t\t// We must have at least 48 bits free.\n\t\tif nbits >= 8 {\n\t\t\tn := nbits >> 3\n\t\t\tbinary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)\n\t\t\tbits >>= (n * 8) & 63\n\t\t\tnbits -= n * 8\n\t\t\tnbytes += n\n\t\t}\n\t\tif nbytes >= bufferFlushSize {\n\t\t\tif w.err != nil {\n\t\t\t\tnbytes = 0\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif debugDeflate {\n\t\t\t\tcount += int(nbytes) * 8\n\t\t\t}\n\t\t\t_, w.err = w.writer.Write(w.bytes[:nbytes])\n\t\t\tnbytes = 0\n\t\t}\n\t\ta, b := encoding[input[0]], encoding[input[1]]\n\t\tbits |= a.code64() << (nbits & 63)\n\t\tbits |= b.code64() << ((nbits + a.len()) & 63)\n\t\tc := encoding[input[2]]\n\t\tnbits += b.len() + a.len()\n\t\tbits |= c.code64() << (nbits & 63)\n\t\tnbits += c.len()\n\t\tinput = input[3:]\n\t}\n\n\t// Remaining...\n\tfor _, t := range input {\n\t\tif nbits >= 48 {\n\t\t\tbinary.LittleEndian.PutUint64(w.bytes[nbytes:], bits)\n\t\t\t//*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits\n\t\t\tbits >>= 48\n\t\t\tnbits -= 48\n\t\t\tnbytes += 6\n\t\t\tif nbytes >= bufferFlushSize {\n\t\t\t\tif w.err != nil {\n\t\t\t\t\tnbytes = 0\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif debugDeflate {\n\t\t\t\t\tcount += int(nbytes) * 8\n\t\t\t\t}\n\t\t\t\t_, w.err = w.writer.Write(w.bytes[:nbytes])\n\t\t\t\tnbytes = 0\n\t\t\t}\n\t\t}\n\t\t// Bitwriting inlined, ~30% speedup\n\t\tc := encoding[t]\n\t\tbits |= c.code64() << (nbits & 63)\n\n\t\tnbits += c.len()\n\t\tif debugDeflate {\n\t\t\tcount += int(c.len())\n\t\t}\n\t}\n\t// Restore...\n\tw.bits, w.nbits, w.nbytes = bits, nbits, nbytes\n\n\tif debugDeflate {\n\t\tnb := count + int(nbytes)*8 + int(nbits)\n\t\tfmt.Println(\"wrote\", nb, \"bits,\", nb/8, \"bytes.\")\n\t}\n\t// Flush if needed to have space.\n\tif w.nbits >= 48 {\n\t\tw.writeOutBits()\n\t}\n\n\tif eof || sync {\n\t\tw.writeCode(w.literalEncoding.codes[endBlockMarker])\n\t\tw.lastHeader = 0\n\t\tw.lastHuffMan = false\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/huffman_code.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\nimport (\n\t\"math\"\n\t\"math/bits\"\n)\n\nconst (\n\tmaxBitsLimit = 16\n\t// number of valid literals\n\tliteralCount = 286\n)\n\n// hcode is a huffman code with a bit code and bit length.\ntype hcode uint32\n\nfunc (h hcode) len() uint8 {\n\treturn uint8(h)\n}\n\nfunc (h hcode) code64() uint64 {\n\treturn uint64(h >> 8)\n}\n\nfunc (h hcode) zero() bool {\n\treturn h == 0\n}\n\ntype huffmanEncoder struct {\n\tcodes    []hcode\n\tbitCount [17]int32\n\n\t// Allocate a reusable buffer with the longest possible frequency table.\n\t// Possible lengths are codegenCodeCount, offsetCodeCount and literalCount.\n\t// The largest of these is literalCount, so we allocate for that case.\n\tfreqcache [literalCount + 1]literalNode\n}\n\ntype literalNode struct {\n\tliteral uint16\n\tfreq    uint16\n}\n\n// A levelInfo describes the state of the constructed tree for a given depth.\ntype levelInfo struct {\n\t// Our level.  for better printing\n\tlevel int32\n\n\t// The frequency of the last node at this level\n\tlastFreq int32\n\n\t// The frequency of the next character to add to this level\n\tnextCharFreq int32\n\n\t// The frequency of the next pair (from level below) to add to this level.\n\t// Only valid if the \"needed\" value of the next lower level is 0.\n\tnextPairFreq int32\n\n\t// The number of chains remaining to generate for this level before moving\n\t// up to the next level\n\tneeded int32\n}\n\n// set sets the code and length of an hcode.\nfunc (h *hcode) set(code uint16, length uint8) {\n\t*h = hcode(length) | (hcode(code) << 8)\n}\n\nfunc newhcode(code uint16, length uint8) hcode {\n\treturn hcode(length) | (hcode(code) << 8)\n}\n\nfunc reverseBits(number uint16, bitLength byte) uint16 {\n\treturn bits.Reverse16(number << ((16 - bitLength) & 15))\n}\n\nfunc maxNode() literalNode { return literalNode{math.MaxUint16, math.MaxUint16} }\n\nfunc newHuffmanEncoder(size int) *huffmanEncoder {\n\t// Make capacity to next power of two.\n\tc := uint(bits.Len32(uint32(size - 1)))\n\treturn &huffmanEncoder{codes: make([]hcode, size, 1<<c)}\n}\n\n// Generates a HuffmanCode corresponding to the fixed literal table\nfunc generateFixedLiteralEncoding() *huffmanEncoder {\n\th := newHuffmanEncoder(literalCount)\n\tcodes := h.codes\n\tvar ch uint16\n\tfor ch = 0; ch < literalCount; ch++ {\n\t\tvar bits uint16\n\t\tvar size uint8\n\t\tswitch {\n\t\tcase ch < 144:\n\t\t\t// size 8, 000110000  .. 10111111\n\t\t\tbits = ch + 48\n\t\t\tsize = 8\n\t\tcase ch < 256:\n\t\t\t// size 9, 110010000 .. 111111111\n\t\t\tbits = ch + 400 - 144\n\t\t\tsize = 9\n\t\tcase ch < 280:\n\t\t\t// size 7, 0000000 .. 0010111\n\t\t\tbits = ch - 256\n\t\t\tsize = 7\n\t\tdefault:\n\t\t\t// size 8, 11000000 .. 11000111\n\t\t\tbits = ch + 192 - 280\n\t\t\tsize = 8\n\t\t}\n\t\tcodes[ch] = newhcode(reverseBits(bits, size), size)\n\t}\n\treturn h\n}\n\nfunc generateFixedOffsetEncoding() *huffmanEncoder {\n\th := newHuffmanEncoder(30)\n\tcodes := h.codes\n\tfor ch := range codes {\n\t\tcodes[ch] = newhcode(reverseBits(uint16(ch), 5), 5)\n\t}\n\treturn h\n}\n\nvar fixedLiteralEncoding = generateFixedLiteralEncoding()\nvar fixedOffsetEncoding = generateFixedOffsetEncoding()\n\nfunc (h *huffmanEncoder) bitLength(freq []uint16) int {\n\tvar total int\n\tfor i, f := range freq {\n\t\tif f != 0 {\n\t\t\ttotal += int(f) * int(h.codes[i].len())\n\t\t}\n\t}\n\treturn total\n}\n\nfunc (h *huffmanEncoder) bitLengthRaw(b []byte) int {\n\tvar total int\n\tfor _, f := range b {\n\t\ttotal += int(h.codes[f].len())\n\t}\n\treturn total\n}\n\n// canReuseBits returns the number of bits or math.MaxInt32 if the encoder cannot be reused.\nfunc (h *huffmanEncoder) canReuseBits(freq []uint16) int {\n\tvar total int\n\tfor i, f := range freq {\n\t\tif f != 0 {\n\t\t\tcode := h.codes[i]\n\t\t\tif code.zero() {\n\t\t\t\treturn math.MaxInt32\n\t\t\t}\n\t\t\ttotal += int(f) * int(code.len())\n\t\t}\n\t}\n\treturn total\n}\n\n// Return the number of literals assigned to each bit size in the Huffman encoding\n//\n// This method is only called when list.length >= 3\n// The cases of 0, 1, and 2 literals are handled by special case code.\n//\n// list  An array of the literals with non-zero frequencies\n//\n//\tand their associated frequencies. The array is in order of increasing\n//\tfrequency, and has as its last element a special element with frequency\n//\tMaxInt32\n//\n// maxBits     The maximum number of bits that should be used to encode any literal.\n//\n//\tMust be less than 16.\n//\n// return      An integer array in which array[i] indicates the number of literals\n//\n//\tthat should be encoded in i bits.\nfunc (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 {\n\tif maxBits >= maxBitsLimit {\n\t\tpanic(\"flate: maxBits too large\")\n\t}\n\tn := int32(len(list))\n\tlist = list[0 : n+1]\n\tlist[n] = maxNode()\n\n\t// The tree can't have greater depth than n - 1, no matter what. This\n\t// saves a little bit of work in some small cases\n\tif maxBits > n-1 {\n\t\tmaxBits = n - 1\n\t}\n\n\t// Create information about each of the levels.\n\t// A bogus \"Level 0\" whose sole purpose is so that\n\t// level1.prev.needed==0.  This makes level1.nextPairFreq\n\t// be a legitimate value that never gets chosen.\n\tvar levels [maxBitsLimit]levelInfo\n\t// leafCounts[i] counts the number of literals at the left\n\t// of ancestors of the rightmost node at level i.\n\t// leafCounts[i][j] is the number of literals at the left\n\t// of the level j ancestor.\n\tvar leafCounts [maxBitsLimit][maxBitsLimit]int32\n\n\t// Descending to only have 1 bounds check.\n\tl2f := int32(list[2].freq)\n\tl1f := int32(list[1].freq)\n\tl0f := int32(list[0].freq) + int32(list[1].freq)\n\n\tfor level := int32(1); level <= maxBits; level++ {\n\t\t// For every level, the first two items are the first two characters.\n\t\t// We initialize the levels as if we had already figured this out.\n\t\tlevels[level] = levelInfo{\n\t\t\tlevel:        level,\n\t\t\tlastFreq:     l1f,\n\t\t\tnextCharFreq: l2f,\n\t\t\tnextPairFreq: l0f,\n\t\t}\n\t\tleafCounts[level][level] = 2\n\t\tif level == 1 {\n\t\t\tlevels[level].nextPairFreq = math.MaxInt32\n\t\t}\n\t}\n\n\t// We need a total of 2*n - 2 items at top level and have already generated 2.\n\tlevels[maxBits].needed = 2*n - 4\n\n\tlevel := uint32(maxBits)\n\tfor level < 16 {\n\t\tl := &levels[level]\n\t\tif l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 {\n\t\t\t// We've run out of both leafs and pairs.\n\t\t\t// End all calculations for this level.\n\t\t\t// To make sure we never come back to this level or any lower level,\n\t\t\t// set nextPairFreq impossibly large.\n\t\t\tl.needed = 0\n\t\t\tlevels[level+1].nextPairFreq = math.MaxInt32\n\t\t\tlevel++\n\t\t\tcontinue\n\t\t}\n\n\t\tprevFreq := l.lastFreq\n\t\tif l.nextCharFreq < l.nextPairFreq {\n\t\t\t// The next item on this row is a leaf node.\n\t\t\tn := leafCounts[level][level] + 1\n\t\t\tl.lastFreq = l.nextCharFreq\n\t\t\t// Lower leafCounts are the same of the previous node.\n\t\t\tleafCounts[level][level] = n\n\t\t\te := list[n]\n\t\t\tif e.literal < math.MaxUint16 {\n\t\t\t\tl.nextCharFreq = int32(e.freq)\n\t\t\t} else {\n\t\t\t\tl.nextCharFreq = math.MaxInt32\n\t\t\t}\n\t\t} else {\n\t\t\t// The next item on this row is a pair from the previous row.\n\t\t\t// nextPairFreq isn't valid until we generate two\n\t\t\t// more values in the level below\n\t\t\tl.lastFreq = l.nextPairFreq\n\t\t\t// Take leaf counts from the lower level, except counts[level] remains the same.\n\t\t\tif true {\n\t\t\t\tsave := leafCounts[level][level]\n\t\t\t\tleafCounts[level] = leafCounts[level-1]\n\t\t\t\tleafCounts[level][level] = save\n\t\t\t} else {\n\t\t\t\tcopy(leafCounts[level][:level], leafCounts[level-1][:level])\n\t\t\t}\n\t\t\tlevels[l.level-1].needed = 2\n\t\t}\n\n\t\tif l.needed--; l.needed == 0 {\n\t\t\t// We've done everything we need to do for this level.\n\t\t\t// Continue calculating one level up. Fill in nextPairFreq\n\t\t\t// of that level with the sum of the two nodes we've just calculated on\n\t\t\t// this level.\n\t\t\tif l.level == maxBits {\n\t\t\t\t// All done!\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tlevels[l.level+1].nextPairFreq = prevFreq + l.lastFreq\n\t\t\tlevel++\n\t\t} else {\n\t\t\t// If we stole from below, move down temporarily to replenish it.\n\t\t\tfor levels[level-1].needed > 0 {\n\t\t\t\tlevel--\n\t\t\t}\n\t\t}\n\t}\n\n\t// Somethings is wrong if at the end, the top level is null or hasn't used\n\t// all of the leaves.\n\tif leafCounts[maxBits][maxBits] != n {\n\t\tpanic(\"leafCounts[maxBits][maxBits] != n\")\n\t}\n\n\tbitCount := h.bitCount[:maxBits+1]\n\tbits := 1\n\tcounts := &leafCounts[maxBits]\n\tfor level := maxBits; level > 0; level-- {\n\t\t// chain.leafCount gives the number of literals requiring at least \"bits\"\n\t\t// bits to encode.\n\t\tbitCount[bits] = counts[level] - counts[level-1]\n\t\tbits++\n\t}\n\treturn bitCount\n}\n\n// Look at the leaves and assign them a bit count and an encoding as specified\n// in RFC 1951 3.2.2\nfunc (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalNode) {\n\tcode := uint16(0)\n\tfor n, bits := range bitCount {\n\t\tcode <<= 1\n\t\tif n == 0 || bits == 0 {\n\t\t\tcontinue\n\t\t}\n\t\t// The literals list[len(list)-bits] .. list[len(list)-bits]\n\t\t// are encoded using \"bits\" bits, and get the values\n\t\t// code, code + 1, ....  The code values are\n\t\t// assigned in literal order (not frequency order).\n\t\tchunk := list[len(list)-int(bits):]\n\n\t\tsortByLiteral(chunk)\n\t\tfor _, node := range chunk {\n\t\t\th.codes[node.literal] = newhcode(reverseBits(code, uint8(n)), uint8(n))\n\t\t\tcode++\n\t\t}\n\t\tlist = list[0 : len(list)-int(bits)]\n\t}\n}\n\n// Update this Huffman Code object to be the minimum code for the specified frequency count.\n//\n// freq  An array of frequencies, in which frequency[i] gives the frequency of literal i.\n// maxBits  The maximum number of bits to use for any literal.\nfunc (h *huffmanEncoder) generate(freq []uint16, maxBits int32) {\n\tlist := h.freqcache[:len(freq)+1]\n\tcodes := h.codes[:len(freq)]\n\t// Number of non-zero literals\n\tcount := 0\n\t// Set list to be the set of all non-zero literals and their frequencies\n\tfor i, f := range freq {\n\t\tif f != 0 {\n\t\t\tlist[count] = literalNode{uint16(i), f}\n\t\t\tcount++\n\t\t} else {\n\t\t\tcodes[i] = 0\n\t\t}\n\t}\n\tlist[count] = literalNode{}\n\n\tlist = list[:count]\n\tif count <= 2 {\n\t\t// Handle the small cases here, because they are awkward for the general case code. With\n\t\t// two or fewer literals, everything has bit length 1.\n\t\tfor i, node := range list {\n\t\t\t// \"list\" is in order of increasing literal value.\n\t\t\th.codes[node.literal].set(uint16(i), 1)\n\t\t}\n\t\treturn\n\t}\n\tsortByFreq(list)\n\n\t// Get the number of literals for each bit count\n\tbitCount := h.bitCounts(list, maxBits)\n\t// And do the assignment\n\th.assignEncodingAndSize(bitCount, list)\n}\n\n// atLeastOne clamps the result between 1 and 15.\nfunc atLeastOne(v float32) float32 {\n\tif v < 1 {\n\t\treturn 1\n\t}\n\tif v > 15 {\n\t\treturn 15\n\t}\n\treturn v\n}\n\nfunc histogram(b []byte, h []uint16) {\n\tif true && len(b) >= 8<<10 {\n\t\t// Split for bigger inputs\n\t\thistogramSplit(b, h)\n\t} else {\n\t\th = h[:256]\n\t\tfor _, t := range b {\n\t\t\th[t]++\n\t\t}\n\t}\n}\n\nfunc histogramSplit(b []byte, h []uint16) {\n\t// Tested, and slightly faster than 2-way.\n\t// Writing to separate arrays and combining is also slightly slower.\n\th = h[:256]\n\tfor len(b)&3 != 0 {\n\t\th[b[0]]++\n\t\tb = b[1:]\n\t}\n\tn := len(b) / 4\n\tx, y, z, w := b[:n], b[n:], b[n+n:], b[n+n+n:]\n\ty, z, w = y[:len(x)], z[:len(x)], w[:len(x)]\n\tfor i, t := range x {\n\t\tv0 := &h[t]\n\t\tv1 := &h[y[i]]\n\t\tv3 := &h[w[i]]\n\t\tv2 := &h[z[i]]\n\t\t*v0++\n\t\t*v1++\n\t\t*v2++\n\t\t*v3++\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/huffman_sortByFreq.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\n// Sort sorts data.\n// It makes one call to data.Len to determine n, and O(n*log(n)) calls to\n// data.Less and data.Swap. The sort is not guaranteed to be stable.\nfunc sortByFreq(data []literalNode) {\n\tn := len(data)\n\tquickSortByFreq(data, 0, n, maxDepth(n))\n}\n\nfunc quickSortByFreq(data []literalNode, a, b, maxDepth int) {\n\tfor b-a > 12 { // Use ShellSort for slices <= 12 elements\n\t\tif maxDepth == 0 {\n\t\t\theapSort(data, a, b)\n\t\t\treturn\n\t\t}\n\t\tmaxDepth--\n\t\tmlo, mhi := doPivotByFreq(data, a, b)\n\t\t// Avoiding recursion on the larger subproblem guarantees\n\t\t// a stack depth of at most lg(b-a).\n\t\tif mlo-a < b-mhi {\n\t\t\tquickSortByFreq(data, a, mlo, maxDepth)\n\t\t\ta = mhi // i.e., quickSortByFreq(data, mhi, b)\n\t\t} else {\n\t\t\tquickSortByFreq(data, mhi, b, maxDepth)\n\t\t\tb = mlo // i.e., quickSortByFreq(data, a, mlo)\n\t\t}\n\t}\n\tif b-a > 1 {\n\t\t// Do ShellSort pass with gap 6\n\t\t// It could be written in this simplified form cause b-a <= 12\n\t\tfor i := a + 6; i < b; i++ {\n\t\t\tif data[i].freq == data[i-6].freq && data[i].literal < data[i-6].literal || data[i].freq < data[i-6].freq {\n\t\t\t\tdata[i], data[i-6] = data[i-6], data[i]\n\t\t\t}\n\t\t}\n\t\tinsertionSortByFreq(data, a, b)\n\t}\n}\n\nfunc doPivotByFreq(data []literalNode, lo, hi int) (midlo, midhi int) {\n\tm := int(uint(lo+hi) >> 1) // Written like this to avoid integer overflow.\n\tif hi-lo > 40 {\n\t\t// Tukey's ``Ninther,'' median of three medians of three.\n\t\ts := (hi - lo) / 8\n\t\tmedianOfThreeSortByFreq(data, lo, lo+s, lo+2*s)\n\t\tmedianOfThreeSortByFreq(data, m, m-s, m+s)\n\t\tmedianOfThreeSortByFreq(data, hi-1, hi-1-s, hi-1-2*s)\n\t}\n\tmedianOfThreeSortByFreq(data, lo, m, hi-1)\n\n\t// Invariants are:\n\t//\tdata[lo] = pivot (set up by ChoosePivot)\n\t//\tdata[lo < i < a] < pivot\n\t//\tdata[a <= i < b] <= pivot\n\t//\tdata[b <= i < c] unexamined\n\t//\tdata[c <= i < hi-1] > pivot\n\t//\tdata[hi-1] >= pivot\n\tpivot := lo\n\ta, c := lo+1, hi-1\n\n\tfor ; a < c && (data[a].freq == data[pivot].freq && data[a].literal < data[pivot].literal || data[a].freq < data[pivot].freq); a++ {\n\t}\n\tb := a\n\tfor {\n\t\tfor ; b < c && (data[pivot].freq == data[b].freq && data[pivot].literal > data[b].literal || data[pivot].freq > data[b].freq); b++ { // data[b] <= pivot\n\t\t}\n\t\tfor ; b < c && (data[pivot].freq == data[c-1].freq && data[pivot].literal < data[c-1].literal || data[pivot].freq < data[c-1].freq); c-- { // data[c-1] > pivot\n\t\t}\n\t\tif b >= c {\n\t\t\tbreak\n\t\t}\n\t\t// data[b] > pivot; data[c-1] <= pivot\n\t\tdata[b], data[c-1] = data[c-1], data[b]\n\t\tb++\n\t\tc--\n\t}\n\t// If hi-c<3 then there are duplicates (by property of median of nine).\n\t// Let's be a bit more conservative, and set border to 5.\n\tprotect := hi-c < 5\n\tif !protect && hi-c < (hi-lo)/4 {\n\t\t// Lets test some points for equality to pivot\n\t\tdups := 0\n\t\tif data[pivot].freq == data[hi-1].freq && data[pivot].literal > data[hi-1].literal || data[pivot].freq > data[hi-1].freq { // data[hi-1] = pivot\n\t\t\tdata[c], data[hi-1] = data[hi-1], data[c]\n\t\t\tc++\n\t\t\tdups++\n\t\t}\n\t\tif data[b-1].freq == data[pivot].freq && data[b-1].literal > data[pivot].literal || data[b-1].freq > data[pivot].freq { // data[b-1] = pivot\n\t\t\tb--\n\t\t\tdups++\n\t\t}\n\t\t// m-lo = (hi-lo)/2 > 6\n\t\t// b-lo > (hi-lo)*3/4-1 > 8\n\t\t// ==> m < b ==> data[m] <= pivot\n\t\tif data[m].freq == data[pivot].freq && data[m].literal > data[pivot].literal || data[m].freq > data[pivot].freq { // data[m] = pivot\n\t\t\tdata[m], data[b-1] = data[b-1], data[m]\n\t\t\tb--\n\t\t\tdups++\n\t\t}\n\t\t// if at least 2 points are equal to pivot, assume skewed distribution\n\t\tprotect = dups > 1\n\t}\n\tif protect {\n\t\t// Protect against a lot of duplicates\n\t\t// Add invariant:\n\t\t//\tdata[a <= i < b] unexamined\n\t\t//\tdata[b <= i < c] = pivot\n\t\tfor {\n\t\t\tfor ; a < b && (data[b-1].freq == data[pivot].freq && data[b-1].literal > data[pivot].literal || data[b-1].freq > data[pivot].freq); b-- { // data[b] == pivot\n\t\t\t}\n\t\t\tfor ; a < b && (data[a].freq == data[pivot].freq && data[a].literal < data[pivot].literal || data[a].freq < data[pivot].freq); a++ { // data[a] < pivot\n\t\t\t}\n\t\t\tif a >= b {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// data[a] == pivot; data[b-1] < pivot\n\t\t\tdata[a], data[b-1] = data[b-1], data[a]\n\t\t\ta++\n\t\t\tb--\n\t\t}\n\t}\n\t// Swap pivot into middle\n\tdata[pivot], data[b-1] = data[b-1], data[pivot]\n\treturn b - 1, c\n}\n\n// Insertion sort\nfunc insertionSortByFreq(data []literalNode, a, b int) {\n\tfor i := a + 1; i < b; i++ {\n\t\tfor j := i; j > a && (data[j].freq == data[j-1].freq && data[j].literal < data[j-1].literal || data[j].freq < data[j-1].freq); j-- {\n\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t}\n\t}\n}\n\n// quickSortByFreq, loosely following Bentley and McIlroy,\n// ``Engineering a Sort Function,'' SP&E November 1993.\n\n// medianOfThreeSortByFreq moves the median of the three values data[m0], data[m1], data[m2] into data[m1].\nfunc medianOfThreeSortByFreq(data []literalNode, m1, m0, m2 int) {\n\t// sort 3 elements\n\tif data[m1].freq == data[m0].freq && data[m1].literal < data[m0].literal || data[m1].freq < data[m0].freq {\n\t\tdata[m1], data[m0] = data[m0], data[m1]\n\t}\n\t// data[m0] <= data[m1]\n\tif data[m2].freq == data[m1].freq && data[m2].literal < data[m1].literal || data[m2].freq < data[m1].freq {\n\t\tdata[m2], data[m1] = data[m1], data[m2]\n\t\t// data[m0] <= data[m2] && data[m1] < data[m2]\n\t\tif data[m1].freq == data[m0].freq && data[m1].literal < data[m0].literal || data[m1].freq < data[m0].freq {\n\t\t\tdata[m1], data[m0] = data[m0], data[m1]\n\t\t}\n\t}\n\t// now data[m0] <= data[m1] <= data[m2]\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/huffman_sortByLiteral.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\n// Sort sorts data.\n// It makes one call to data.Len to determine n, and O(n*log(n)) calls to\n// data.Less and data.Swap. The sort is not guaranteed to be stable.\nfunc sortByLiteral(data []literalNode) {\n\tn := len(data)\n\tquickSort(data, 0, n, maxDepth(n))\n}\n\nfunc quickSort(data []literalNode, a, b, maxDepth int) {\n\tfor b-a > 12 { // Use ShellSort for slices <= 12 elements\n\t\tif maxDepth == 0 {\n\t\t\theapSort(data, a, b)\n\t\t\treturn\n\t\t}\n\t\tmaxDepth--\n\t\tmlo, mhi := doPivot(data, a, b)\n\t\t// Avoiding recursion on the larger subproblem guarantees\n\t\t// a stack depth of at most lg(b-a).\n\t\tif mlo-a < b-mhi {\n\t\t\tquickSort(data, a, mlo, maxDepth)\n\t\t\ta = mhi // i.e., quickSort(data, mhi, b)\n\t\t} else {\n\t\t\tquickSort(data, mhi, b, maxDepth)\n\t\t\tb = mlo // i.e., quickSort(data, a, mlo)\n\t\t}\n\t}\n\tif b-a > 1 {\n\t\t// Do ShellSort pass with gap 6\n\t\t// It could be written in this simplified form cause b-a <= 12\n\t\tfor i := a + 6; i < b; i++ {\n\t\t\tif data[i].literal < data[i-6].literal {\n\t\t\t\tdata[i], data[i-6] = data[i-6], data[i]\n\t\t\t}\n\t\t}\n\t\tinsertionSort(data, a, b)\n\t}\n}\nfunc heapSort(data []literalNode, a, b int) {\n\tfirst := a\n\tlo := 0\n\thi := b - a\n\n\t// Build heap with greatest element at top.\n\tfor i := (hi - 1) / 2; i >= 0; i-- {\n\t\tsiftDown(data, i, hi, first)\n\t}\n\n\t// Pop elements, largest first, into end of data.\n\tfor i := hi - 1; i >= 0; i-- {\n\t\tdata[first], data[first+i] = data[first+i], data[first]\n\t\tsiftDown(data, lo, i, first)\n\t}\n}\n\n// siftDown implements the heap property on data[lo, hi).\n// first is an offset into the array where the root of the heap lies.\nfunc siftDown(data []literalNode, lo, hi, first int) {\n\troot := lo\n\tfor {\n\t\tchild := 2*root + 1\n\t\tif child >= hi {\n\t\t\tbreak\n\t\t}\n\t\tif child+1 < hi && data[first+child].literal < data[first+child+1].literal {\n\t\t\tchild++\n\t\t}\n\t\tif data[first+root].literal > data[first+child].literal {\n\t\t\treturn\n\t\t}\n\t\tdata[first+root], data[first+child] = data[first+child], data[first+root]\n\t\troot = child\n\t}\n}\nfunc doPivot(data []literalNode, lo, hi int) (midlo, midhi int) {\n\tm := int(uint(lo+hi) >> 1) // Written like this to avoid integer overflow.\n\tif hi-lo > 40 {\n\t\t// Tukey's ``Ninther,'' median of three medians of three.\n\t\ts := (hi - lo) / 8\n\t\tmedianOfThree(data, lo, lo+s, lo+2*s)\n\t\tmedianOfThree(data, m, m-s, m+s)\n\t\tmedianOfThree(data, hi-1, hi-1-s, hi-1-2*s)\n\t}\n\tmedianOfThree(data, lo, m, hi-1)\n\n\t// Invariants are:\n\t//\tdata[lo] = pivot (set up by ChoosePivot)\n\t//\tdata[lo < i < a] < pivot\n\t//\tdata[a <= i < b] <= pivot\n\t//\tdata[b <= i < c] unexamined\n\t//\tdata[c <= i < hi-1] > pivot\n\t//\tdata[hi-1] >= pivot\n\tpivot := lo\n\ta, c := lo+1, hi-1\n\n\tfor ; a < c && data[a].literal < data[pivot].literal; a++ {\n\t}\n\tb := a\n\tfor {\n\t\tfor ; b < c && data[pivot].literal > data[b].literal; b++ { // data[b] <= pivot\n\t\t}\n\t\tfor ; b < c && data[pivot].literal < data[c-1].literal; c-- { // data[c-1] > pivot\n\t\t}\n\t\tif b >= c {\n\t\t\tbreak\n\t\t}\n\t\t// data[b] > pivot; data[c-1] <= pivot\n\t\tdata[b], data[c-1] = data[c-1], data[b]\n\t\tb++\n\t\tc--\n\t}\n\t// If hi-c<3 then there are duplicates (by property of median of nine).\n\t// Let's be a bit more conservative, and set border to 5.\n\tprotect := hi-c < 5\n\tif !protect && hi-c < (hi-lo)/4 {\n\t\t// Lets test some points for equality to pivot\n\t\tdups := 0\n\t\tif data[pivot].literal > data[hi-1].literal { // data[hi-1] = pivot\n\t\t\tdata[c], data[hi-1] = data[hi-1], data[c]\n\t\t\tc++\n\t\t\tdups++\n\t\t}\n\t\tif data[b-1].literal > data[pivot].literal { // data[b-1] = pivot\n\t\t\tb--\n\t\t\tdups++\n\t\t}\n\t\t// m-lo = (hi-lo)/2 > 6\n\t\t// b-lo > (hi-lo)*3/4-1 > 8\n\t\t// ==> m < b ==> data[m] <= pivot\n\t\tif data[m].literal > data[pivot].literal { // data[m] = pivot\n\t\t\tdata[m], data[b-1] = data[b-1], data[m]\n\t\t\tb--\n\t\t\tdups++\n\t\t}\n\t\t// if at least 2 points are equal to pivot, assume skewed distribution\n\t\tprotect = dups > 1\n\t}\n\tif protect {\n\t\t// Protect against a lot of duplicates\n\t\t// Add invariant:\n\t\t//\tdata[a <= i < b] unexamined\n\t\t//\tdata[b <= i < c] = pivot\n\t\tfor {\n\t\t\tfor ; a < b && data[b-1].literal > data[pivot].literal; b-- { // data[b] == pivot\n\t\t\t}\n\t\t\tfor ; a < b && data[a].literal < data[pivot].literal; a++ { // data[a] < pivot\n\t\t\t}\n\t\t\tif a >= b {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// data[a] == pivot; data[b-1] < pivot\n\t\t\tdata[a], data[b-1] = data[b-1], data[a]\n\t\t\ta++\n\t\t\tb--\n\t\t}\n\t}\n\t// Swap pivot into middle\n\tdata[pivot], data[b-1] = data[b-1], data[pivot]\n\treturn b - 1, c\n}\n\n// Insertion sort\nfunc insertionSort(data []literalNode, a, b int) {\n\tfor i := a + 1; i < b; i++ {\n\t\tfor j := i; j > a && data[j].literal < data[j-1].literal; j-- {\n\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t}\n\t}\n}\n\n// maxDepth returns a threshold at which quicksort should switch\n// to heapsort. It returns 2*ceil(lg(n+1)).\nfunc maxDepth(n int) int {\n\tvar depth int\n\tfor i := n; i > 0; i >>= 1 {\n\t\tdepth++\n\t}\n\treturn depth * 2\n}\n\n// medianOfThree moves the median of the three values data[m0], data[m1], data[m2] into data[m1].\nfunc medianOfThree(data []literalNode, m1, m0, m2 int) {\n\t// sort 3 elements\n\tif data[m1].literal < data[m0].literal {\n\t\tdata[m1], data[m0] = data[m0], data[m1]\n\t}\n\t// data[m0] <= data[m1]\n\tif data[m2].literal < data[m1].literal {\n\t\tdata[m2], data[m1] = data[m1], data[m2]\n\t\t// data[m0] <= data[m2] && data[m1] < data[m2]\n\t\tif data[m1].literal < data[m0].literal {\n\t\t\tdata[m1], data[m0] = data[m0], data[m1]\n\t\t}\n\t}\n\t// now data[m0] <= data[m1] <= data[m2]\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/inflate.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package flate implements the DEFLATE compressed data format, described in\n// RFC 1951.  The gzip and zlib packages implement access to DEFLATE-based file\n// formats.\npackage flate\n\nimport (\n\t\"bufio\"\n\t\"compress/flate\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/bits\"\n\t\"sync\"\n)\n\nconst (\n\tmaxCodeLen     = 16 // max length of Huffman code\n\tmaxCodeLenMask = 15 // mask for max length of Huffman code\n\t// The next three numbers come from the RFC section 3.2.7, with the\n\t// additional proviso in section 3.2.5 which implies that distance codes\n\t// 30 and 31 should never occur in compressed data.\n\tmaxNumLit  = 286\n\tmaxNumDist = 30\n\tnumCodes   = 19 // number of codes in Huffman meta-code\n\n\tdebugDecode = false\n)\n\n// Value of length - 3 and extra bits.\ntype lengthExtra struct {\n\tlength, extra uint8\n}\n\nvar decCodeToLen = [32]lengthExtra{{length: 0x0, extra: 0x0}, {length: 0x1, extra: 0x0}, {length: 0x2, extra: 0x0}, {length: 0x3, extra: 0x0}, {length: 0x4, extra: 0x0}, {length: 0x5, extra: 0x0}, {length: 0x6, extra: 0x0}, {length: 0x7, extra: 0x0}, {length: 0x8, extra: 0x1}, {length: 0xa, extra: 0x1}, {length: 0xc, extra: 0x1}, {length: 0xe, extra: 0x1}, {length: 0x10, extra: 0x2}, {length: 0x14, extra: 0x2}, {length: 0x18, extra: 0x2}, {length: 0x1c, extra: 0x2}, {length: 0x20, extra: 0x3}, {length: 0x28, extra: 0x3}, {length: 0x30, extra: 0x3}, {length: 0x38, extra: 0x3}, {length: 0x40, extra: 0x4}, {length: 0x50, extra: 0x4}, {length: 0x60, extra: 0x4}, {length: 0x70, extra: 0x4}, {length: 0x80, extra: 0x5}, {length: 0xa0, extra: 0x5}, {length: 0xc0, extra: 0x5}, {length: 0xe0, extra: 0x5}, {length: 0xff, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}}\n\nvar bitMask32 = [32]uint32{\n\t0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF,\n\t0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,\n\t0x1ffff, 0x3ffff, 0x7FFFF, 0xfFFFF, 0x1fFFFF, 0x3fFFFF, 0x7fFFFF, 0xffFFFF,\n\t0x1ffFFFF, 0x3ffFFFF, 0x7ffFFFF, 0xfffFFFF, 0x1fffFFFF, 0x3fffFFFF, 0x7fffFFFF,\n} // up to 32 bits\n\n// Initialize the fixedHuffmanDecoder only once upon first use.\nvar fixedOnce sync.Once\nvar fixedHuffmanDecoder huffmanDecoder\n\n// A CorruptInputError reports the presence of corrupt input at a given offset.\ntype CorruptInputError = flate.CorruptInputError\n\n// An InternalError reports an error in the flate code itself.\ntype InternalError string\n\nfunc (e InternalError) Error() string { return \"flate: internal error: \" + string(e) }\n\n// A ReadError reports an error encountered while reading input.\n//\n// Deprecated: No longer returned.\ntype ReadError = flate.ReadError\n\n// A WriteError reports an error encountered while writing output.\n//\n// Deprecated: No longer returned.\ntype WriteError = flate.WriteError\n\n// Resetter resets a ReadCloser returned by NewReader or NewReaderDict to\n// to switch to a new underlying Reader. This permits reusing a ReadCloser\n// instead of allocating a new one.\ntype Resetter interface {\n\t// Reset discards any buffered data and resets the Resetter as if it was\n\t// newly initialized with the given reader.\n\tReset(r io.Reader, dict []byte) error\n}\n\n// The data structure for decoding Huffman tables is based on that of\n// zlib. There is a lookup table of a fixed bit width (huffmanChunkBits),\n// For codes smaller than the table width, there are multiple entries\n// (each combination of trailing bits has the same value). For codes\n// larger than the table width, the table contains a link to an overflow\n// table. The width of each entry in the link table is the maximum code\n// size minus the chunk width.\n//\n// Note that you can do a lookup in the table even without all bits\n// filled. Since the extra bits are zero, and the DEFLATE Huffman codes\n// have the property that shorter codes come before longer ones, the\n// bit length estimate in the result is a lower bound on the actual\n// number of bits.\n//\n// See the following:\n//\thttp://www.gzip.org/algorithm.txt\n\n// chunk & 15 is number of bits\n// chunk >> 4 is value, including table link\n\nconst (\n\thuffmanChunkBits  = 9\n\thuffmanNumChunks  = 1 << huffmanChunkBits\n\thuffmanCountMask  = 15\n\thuffmanValueShift = 4\n)\n\ntype huffmanDecoder struct {\n\tmaxRead  int                       // the maximum number of bits we can read and not overread\n\tchunks   *[huffmanNumChunks]uint16 // chunks as described above\n\tlinks    [][]uint16                // overflow links\n\tlinkMask uint32                    // mask the width of the link table\n}\n\n// Initialize Huffman decoding tables from array of code lengths.\n// Following this function, h is guaranteed to be initialized into a complete\n// tree (i.e., neither over-subscribed nor under-subscribed). The exception is a\n// degenerate case where the tree has only a single symbol with length 1. Empty\n// trees are permitted.\nfunc (h *huffmanDecoder) init(lengths []int) bool {\n\t// Sanity enables additional runtime tests during Huffman\n\t// table construction. It's intended to be used during\n\t// development to supplement the currently ad-hoc unit tests.\n\tconst sanity = false\n\n\tif h.chunks == nil {\n\t\th.chunks = new([huffmanNumChunks]uint16)\n\t}\n\n\tif h.maxRead != 0 {\n\t\t*h = huffmanDecoder{chunks: h.chunks, links: h.links}\n\t}\n\n\t// Count number of codes of each length,\n\t// compute maxRead and max length.\n\tvar count [maxCodeLen]int\n\tvar min, max int\n\tfor _, n := range lengths {\n\t\tif n == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif min == 0 || n < min {\n\t\t\tmin = n\n\t\t}\n\t\tif n > max {\n\t\t\tmax = n\n\t\t}\n\t\tcount[n&maxCodeLenMask]++\n\t}\n\n\t// Empty tree. The decompressor.huffSym function will fail later if the tree\n\t// is used. Technically, an empty tree is only valid for the HDIST tree and\n\t// not the HCLEN and HLIT tree. However, a stream with an empty HCLEN tree\n\t// is guaranteed to fail since it will attempt to use the tree to decode the\n\t// codes for the HLIT and HDIST trees. Similarly, an empty HLIT tree is\n\t// guaranteed to fail later since the compressed data section must be\n\t// composed of at least one symbol (the end-of-block marker).\n\tif max == 0 {\n\t\treturn true\n\t}\n\n\tcode := 0\n\tvar nextcode [maxCodeLen]int\n\tfor i := min; i <= max; i++ {\n\t\tcode <<= 1\n\t\tnextcode[i&maxCodeLenMask] = code\n\t\tcode += count[i&maxCodeLenMask]\n\t}\n\n\t// Check that the coding is complete (i.e., that we've\n\t// assigned all 2-to-the-max possible bit sequences).\n\t// Exception: To be compatible with zlib, we also need to\n\t// accept degenerate single-code codings. See also\n\t// TestDegenerateHuffmanCoding.\n\tif code != 1<<uint(max) && !(code == 1 && max == 1) {\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"coding failed, code, max:\", code, max, code == 1<<uint(max), code == 1 && max == 1, \"(one should be true)\")\n\t\t}\n\t\treturn false\n\t}\n\n\th.maxRead = min\n\n\tchunks := h.chunks[:]\n\tfor i := range chunks {\n\t\tchunks[i] = 0\n\t}\n\n\tif max > huffmanChunkBits {\n\t\tnumLinks := 1 << (uint(max) - huffmanChunkBits)\n\t\th.linkMask = uint32(numLinks - 1)\n\n\t\t// create link tables\n\t\tlink := nextcode[huffmanChunkBits+1] >> 1\n\t\tif cap(h.links) < huffmanNumChunks-link {\n\t\t\th.links = make([][]uint16, huffmanNumChunks-link)\n\t\t} else {\n\t\t\th.links = h.links[:huffmanNumChunks-link]\n\t\t}\n\t\tfor j := uint(link); j < huffmanNumChunks; j++ {\n\t\t\treverse := int(bits.Reverse16(uint16(j)))\n\t\t\treverse >>= uint(16 - huffmanChunkBits)\n\t\t\toff := j - uint(link)\n\t\t\tif sanity && h.chunks[reverse] != 0 {\n\t\t\t\tpanic(\"impossible: overwriting existing chunk\")\n\t\t\t}\n\t\t\th.chunks[reverse] = uint16(off<<huffmanValueShift | (huffmanChunkBits + 1))\n\t\t\tif cap(h.links[off]) < numLinks {\n\t\t\t\th.links[off] = make([]uint16, numLinks)\n\t\t\t} else {\n\t\t\t\th.links[off] = h.links[off][:numLinks]\n\t\t\t}\n\t\t}\n\t} else {\n\t\th.links = h.links[:0]\n\t}\n\n\tfor i, n := range lengths {\n\t\tif n == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tcode := nextcode[n]\n\t\tnextcode[n]++\n\t\tchunk := uint16(i<<huffmanValueShift | n)\n\t\treverse := int(bits.Reverse16(uint16(code)))\n\t\treverse >>= uint(16 - n)\n\t\tif n <= huffmanChunkBits {\n\t\t\tfor off := reverse; off < len(h.chunks); off += 1 << uint(n) {\n\t\t\t\t// We should never need to overwrite\n\t\t\t\t// an existing chunk. Also, 0 is\n\t\t\t\t// never a valid chunk, because the\n\t\t\t\t// lower 4 \"count\" bits should be\n\t\t\t\t// between 1 and 15.\n\t\t\t\tif sanity && h.chunks[off] != 0 {\n\t\t\t\t\tpanic(\"impossible: overwriting existing chunk\")\n\t\t\t\t}\n\t\t\t\th.chunks[off] = chunk\n\t\t\t}\n\t\t} else {\n\t\t\tj := reverse & (huffmanNumChunks - 1)\n\t\t\tif sanity && h.chunks[j]&huffmanCountMask != huffmanChunkBits+1 {\n\t\t\t\t// Longer codes should have been\n\t\t\t\t// associated with a link table above.\n\t\t\t\tpanic(\"impossible: not an indirect chunk\")\n\t\t\t}\n\t\t\tvalue := h.chunks[j] >> huffmanValueShift\n\t\t\tlinktab := h.links[value]\n\t\t\treverse >>= huffmanChunkBits\n\t\t\tfor off := reverse; off < len(linktab); off += 1 << uint(n-huffmanChunkBits) {\n\t\t\t\tif sanity && linktab[off] != 0 {\n\t\t\t\t\tpanic(\"impossible: overwriting existing chunk\")\n\t\t\t\t}\n\t\t\t\tlinktab[off] = chunk\n\t\t\t}\n\t\t}\n\t}\n\n\tif sanity {\n\t\t// Above we've sanity checked that we never overwrote\n\t\t// an existing entry. Here we additionally check that\n\t\t// we filled the tables completely.\n\t\tfor i, chunk := range h.chunks {\n\t\t\tif chunk == 0 {\n\t\t\t\t// As an exception, in the degenerate\n\t\t\t\t// single-code case, we allow odd\n\t\t\t\t// chunks to be missing.\n\t\t\t\tif code == 1 && i%2 == 1 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tpanic(\"impossible: missing chunk\")\n\t\t\t}\n\t\t}\n\t\tfor _, linktab := range h.links {\n\t\t\tfor _, chunk := range linktab {\n\t\t\t\tif chunk == 0 {\n\t\t\t\t\tpanic(\"impossible: missing chunk\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Reader is the actual read interface needed by NewReader.\n// If the passed in io.Reader does not also have ReadByte,\n// the NewReader will introduce its own buffering.\ntype Reader interface {\n\tio.Reader\n\tio.ByteReader\n}\n\ntype step uint8\n\nconst (\n\tcopyData step = iota + 1\n\tnextBlock\n\thuffmanBytesBuffer\n\thuffmanBytesReader\n\thuffmanBufioReader\n\thuffmanStringsReader\n\thuffmanGenericReader\n)\n\n// Decompress state.\ntype decompressor struct {\n\t// Input source.\n\tr       Reader\n\troffset int64\n\n\t// Huffman decoders for literal/length, distance.\n\th1, h2 huffmanDecoder\n\n\t// Length arrays used to define Huffman codes.\n\tbits     *[maxNumLit + maxNumDist]int\n\tcodebits *[numCodes]int\n\n\t// Output history, buffer.\n\tdict dictDecoder\n\n\t// Next step in the decompression,\n\t// and decompression state.\n\tstep      step\n\tstepState int\n\terr       error\n\ttoRead    []byte\n\thl, hd    *huffmanDecoder\n\tcopyLen   int\n\tcopyDist  int\n\n\t// Temporary buffer (avoids repeated allocation).\n\tbuf [4]byte\n\n\t// Input bits, in top of b.\n\tb uint32\n\n\tnb    uint\n\tfinal bool\n}\n\nfunc (f *decompressor) nextBlock() {\n\tfor f.nb < 1+2 {\n\t\tif f.err = f.moreBits(); f.err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tf.final = f.b&1 == 1\n\tf.b >>= 1\n\ttyp := f.b & 3\n\tf.b >>= 2\n\tf.nb -= 1 + 2\n\tswitch typ {\n\tcase 0:\n\t\tf.dataBlock()\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"stored block\")\n\t\t}\n\tcase 1:\n\t\t// compressed, fixed Huffman tables\n\t\tf.hl = &fixedHuffmanDecoder\n\t\tf.hd = nil\n\t\tf.huffmanBlockDecoder()\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"predefinied huffman block\")\n\t\t}\n\tcase 2:\n\t\t// compressed, dynamic Huffman tables\n\t\tif f.err = f.readHuffman(); f.err != nil {\n\t\t\tbreak\n\t\t}\n\t\tf.hl = &f.h1\n\t\tf.hd = &f.h2\n\t\tf.huffmanBlockDecoder()\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"dynamic huffman block\")\n\t\t}\n\tdefault:\n\t\t// 3 is reserved.\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"reserved data block encountered\")\n\t\t}\n\t\tf.err = CorruptInputError(f.roffset)\n\t}\n}\n\nfunc (f *decompressor) Read(b []byte) (int, error) {\n\tfor {\n\t\tif len(f.toRead) > 0 {\n\t\t\tn := copy(b, f.toRead)\n\t\t\tf.toRead = f.toRead[n:]\n\t\t\tif len(f.toRead) == 0 {\n\t\t\t\treturn n, f.err\n\t\t\t}\n\t\t\treturn n, nil\n\t\t}\n\t\tif f.err != nil {\n\t\t\treturn 0, f.err\n\t\t}\n\n\t\tf.doStep()\n\n\t\tif f.err != nil && len(f.toRead) == 0 {\n\t\t\tf.toRead = f.dict.readFlush() // Flush what's left in case of error\n\t\t}\n\t}\n}\n\n// WriteTo implements the io.WriteTo interface for io.Copy and friends.\nfunc (f *decompressor) WriteTo(w io.Writer) (int64, error) {\n\ttotal := int64(0)\n\tflushed := false\n\tfor {\n\t\tif len(f.toRead) > 0 {\n\t\t\tn, err := w.Write(f.toRead)\n\t\t\ttotal += int64(n)\n\t\t\tif err != nil {\n\t\t\t\tf.err = err\n\t\t\t\treturn total, err\n\t\t\t}\n\t\t\tif n != len(f.toRead) {\n\t\t\t\treturn total, io.ErrShortWrite\n\t\t\t}\n\t\t\tf.toRead = f.toRead[:0]\n\t\t}\n\t\tif f.err != nil && flushed {\n\t\t\tif f.err == io.EOF {\n\t\t\t\treturn total, nil\n\t\t\t}\n\t\t\treturn total, f.err\n\t\t}\n\t\tif f.err == nil {\n\t\t\tf.doStep()\n\t\t}\n\t\tif len(f.toRead) == 0 && f.err != nil && !flushed {\n\t\t\tf.toRead = f.dict.readFlush() // Flush what's left in case of error\n\t\t\tflushed = true\n\t\t}\n\t}\n}\n\nfunc (f *decompressor) Close() error {\n\tif f.err == io.EOF {\n\t\treturn nil\n\t}\n\treturn f.err\n}\n\n// RFC 1951 section 3.2.7.\n// Compression with dynamic Huffman codes\n\nvar codeOrder = [...]int{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}\n\nfunc (f *decompressor) readHuffman() error {\n\t// HLIT[5], HDIST[5], HCLEN[4].\n\tfor f.nb < 5+5+4 {\n\t\tif err := f.moreBits(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tnlit := int(f.b&0x1F) + 257\n\tif nlit > maxNumLit {\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"nlit > maxNumLit\", nlit)\n\t\t}\n\t\treturn CorruptInputError(f.roffset)\n\t}\n\tf.b >>= 5\n\tndist := int(f.b&0x1F) + 1\n\tif ndist > maxNumDist {\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"ndist > maxNumDist\", ndist)\n\t\t}\n\t\treturn CorruptInputError(f.roffset)\n\t}\n\tf.b >>= 5\n\tnclen := int(f.b&0xF) + 4\n\t// numCodes is 19, so nclen is always valid.\n\tf.b >>= 4\n\tf.nb -= 5 + 5 + 4\n\n\t// (HCLEN+4)*3 bits: code lengths in the magic codeOrder order.\n\tfor i := 0; i < nclen; i++ {\n\t\tfor f.nb < 3 {\n\t\t\tif err := f.moreBits(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tf.codebits[codeOrder[i]] = int(f.b & 0x7)\n\t\tf.b >>= 3\n\t\tf.nb -= 3\n\t}\n\tfor i := nclen; i < len(codeOrder); i++ {\n\t\tf.codebits[codeOrder[i]] = 0\n\t}\n\tif !f.h1.init(f.codebits[0:]) {\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"init codebits failed\")\n\t\t}\n\t\treturn CorruptInputError(f.roffset)\n\t}\n\n\t// HLIT + 257 code lengths, HDIST + 1 code lengths,\n\t// using the code length Huffman code.\n\tfor i, n := 0, nlit+ndist; i < n; {\n\t\tx, err := f.huffSym(&f.h1)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif x < 16 {\n\t\t\t// Actual length.\n\t\t\tf.bits[i] = x\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\t\t// Repeat previous length or zero.\n\t\tvar rep int\n\t\tvar nb uint\n\t\tvar b int\n\t\tswitch x {\n\t\tdefault:\n\t\t\treturn InternalError(\"unexpected length code\")\n\t\tcase 16:\n\t\t\trep = 3\n\t\t\tnb = 2\n\t\t\tif i == 0 {\n\t\t\t\tif debugDecode {\n\t\t\t\t\tfmt.Println(\"i==0\")\n\t\t\t\t}\n\t\t\t\treturn CorruptInputError(f.roffset)\n\t\t\t}\n\t\t\tb = f.bits[i-1]\n\t\tcase 17:\n\t\t\trep = 3\n\t\t\tnb = 3\n\t\t\tb = 0\n\t\tcase 18:\n\t\t\trep = 11\n\t\t\tnb = 7\n\t\t\tb = 0\n\t\t}\n\t\tfor f.nb < nb {\n\t\t\tif err := f.moreBits(); err != nil {\n\t\t\t\tif debugDecode {\n\t\t\t\t\tfmt.Println(\"morebits:\", err)\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\trep += int(f.b & uint32(1<<(nb&regSizeMaskUint32)-1))\n\t\tf.b >>= nb & regSizeMaskUint32\n\t\tf.nb -= nb\n\t\tif i+rep > n {\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"i+rep > n\", i, rep, n)\n\t\t\t}\n\t\t\treturn CorruptInputError(f.roffset)\n\t\t}\n\t\tfor j := 0; j < rep; j++ {\n\t\t\tf.bits[i] = b\n\t\t\ti++\n\t\t}\n\t}\n\n\tif !f.h1.init(f.bits[0:nlit]) || !f.h2.init(f.bits[nlit:nlit+ndist]) {\n\t\tif debugDecode {\n\t\t\tfmt.Println(\"init2 failed\")\n\t\t}\n\t\treturn CorruptInputError(f.roffset)\n\t}\n\n\t// As an optimization, we can initialize the maxRead bits to read at a time\n\t// for the HLIT tree to the length of the EOB marker since we know that\n\t// every block must terminate with one. This preserves the property that\n\t// we never read any extra bytes after the end of the DEFLATE stream.\n\tif f.h1.maxRead < f.bits[endBlockMarker] {\n\t\tf.h1.maxRead = f.bits[endBlockMarker]\n\t}\n\tif !f.final {\n\t\t// If not the final block, the smallest block possible is\n\t\t// a predefined table, BTYPE=01, with a single EOB marker.\n\t\t// This will take up 3 + 7 bits.\n\t\tf.h1.maxRead += 10\n\t}\n\n\treturn nil\n}\n\n// Copy a single uncompressed data block from input to output.\nfunc (f *decompressor) dataBlock() {\n\t// Uncompressed.\n\t// Discard current half-byte.\n\tleft := (f.nb) & 7\n\tf.nb -= left\n\tf.b >>= left\n\n\toffBytes := f.nb >> 3\n\t// Unfilled values will be overwritten.\n\tf.buf[0] = uint8(f.b)\n\tf.buf[1] = uint8(f.b >> 8)\n\tf.buf[2] = uint8(f.b >> 16)\n\tf.buf[3] = uint8(f.b >> 24)\n\n\tf.roffset += int64(offBytes)\n\tf.nb, f.b = 0, 0\n\n\t// Length then ones-complement of length.\n\tnr, err := io.ReadFull(f.r, f.buf[offBytes:4])\n\tf.roffset += int64(nr)\n\tif err != nil {\n\t\tf.err = noEOF(err)\n\t\treturn\n\t}\n\tn := uint16(f.buf[0]) | uint16(f.buf[1])<<8\n\tnn := uint16(f.buf[2]) | uint16(f.buf[3])<<8\n\tif nn != ^n {\n\t\tif debugDecode {\n\t\t\tncomp := ^n\n\t\t\tfmt.Println(\"uint16(nn) != uint16(^n)\", nn, ncomp)\n\t\t}\n\t\tf.err = CorruptInputError(f.roffset)\n\t\treturn\n\t}\n\n\tif n == 0 {\n\t\tf.toRead = f.dict.readFlush()\n\t\tf.finishBlock()\n\t\treturn\n\t}\n\n\tf.copyLen = int(n)\n\tf.copyData()\n}\n\n// copyData copies f.copyLen bytes from the underlying reader into f.hist.\n// It pauses for reads when f.hist is full.\nfunc (f *decompressor) copyData() {\n\tbuf := f.dict.writeSlice()\n\tif len(buf) > f.copyLen {\n\t\tbuf = buf[:f.copyLen]\n\t}\n\n\tcnt, err := io.ReadFull(f.r, buf)\n\tf.roffset += int64(cnt)\n\tf.copyLen -= cnt\n\tf.dict.writeMark(cnt)\n\tif err != nil {\n\t\tf.err = noEOF(err)\n\t\treturn\n\t}\n\n\tif f.dict.availWrite() == 0 || f.copyLen > 0 {\n\t\tf.toRead = f.dict.readFlush()\n\t\tf.step = copyData\n\t\treturn\n\t}\n\tf.finishBlock()\n}\n\nfunc (f *decompressor) finishBlock() {\n\tif f.final {\n\t\tif f.dict.availRead() > 0 {\n\t\t\tf.toRead = f.dict.readFlush()\n\t\t}\n\t\tf.err = io.EOF\n\t}\n\tf.step = nextBlock\n}\n\nfunc (f *decompressor) doStep() {\n\tswitch f.step {\n\tcase copyData:\n\t\tf.copyData()\n\tcase nextBlock:\n\t\tf.nextBlock()\n\tcase huffmanBytesBuffer:\n\t\tf.huffmanBytesBuffer()\n\tcase huffmanBytesReader:\n\t\tf.huffmanBytesReader()\n\tcase huffmanBufioReader:\n\t\tf.huffmanBufioReader()\n\tcase huffmanStringsReader:\n\t\tf.huffmanStringsReader()\n\tcase huffmanGenericReader:\n\t\tf.huffmanGenericReader()\n\tdefault:\n\t\tpanic(\"BUG: unexpected step state\")\n\t}\n}\n\n// noEOF returns err, unless err == io.EOF, in which case it returns io.ErrUnexpectedEOF.\nfunc noEOF(e error) error {\n\tif e == io.EOF {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn e\n}\n\nfunc (f *decompressor) moreBits() error {\n\tc, err := f.r.ReadByte()\n\tif err != nil {\n\t\treturn noEOF(err)\n\t}\n\tf.roffset++\n\tf.b |= uint32(c) << (f.nb & regSizeMaskUint32)\n\tf.nb += 8\n\treturn nil\n}\n\n// Read the next Huffman-encoded symbol from f according to h.\nfunc (f *decompressor) huffSym(h *huffmanDecoder) (int, error) {\n\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t// with single element, huffSym must error on these two edge cases. In both\n\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t// satisfy the n == 0 check below.\n\tn := uint(h.maxRead)\n\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t// inline call to moreBits and reassign b,nb back to f on return.\n\tnb, b := f.nb, f.b\n\tfor {\n\t\tfor nb < n {\n\t\t\tc, err := f.r.ReadByte()\n\t\t\tif err != nil {\n\t\t\t\tf.b = b\n\t\t\t\tf.nb = nb\n\t\t\t\treturn 0, noEOF(err)\n\t\t\t}\n\t\t\tf.roffset++\n\t\t\tb |= uint32(c) << (nb & regSizeMaskUint32)\n\t\t\tnb += 8\n\t\t}\n\t\tchunk := h.chunks[b&(huffmanNumChunks-1)]\n\t\tn = uint(chunk & huffmanCountMask)\n\t\tif n > huffmanChunkBits {\n\t\t\tchunk = h.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&h.linkMask]\n\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t}\n\t\tif n <= nb {\n\t\t\tif n == 0 {\n\t\t\t\tf.b = b\n\t\t\t\tf.nb = nb\n\t\t\t\tif debugDecode {\n\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t}\n\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\treturn 0, f.err\n\t\t\t}\n\t\t\tf.b = b >> (n & regSizeMaskUint32)\n\t\t\tf.nb = nb - n\n\t\t\treturn int(chunk >> huffmanValueShift), nil\n\t\t}\n\t}\n}\n\nfunc makeReader(r io.Reader) Reader {\n\tif rr, ok := r.(Reader); ok {\n\t\treturn rr\n\t}\n\treturn bufio.NewReader(r)\n}\n\nfunc fixedHuffmanDecoderInit() {\n\tfixedOnce.Do(func() {\n\t\t// These come from the RFC section 3.2.6.\n\t\tvar bits [288]int\n\t\tfor i := 0; i < 144; i++ {\n\t\t\tbits[i] = 8\n\t\t}\n\t\tfor i := 144; i < 256; i++ {\n\t\t\tbits[i] = 9\n\t\t}\n\t\tfor i := 256; i < 280; i++ {\n\t\t\tbits[i] = 7\n\t\t}\n\t\tfor i := 280; i < 288; i++ {\n\t\t\tbits[i] = 8\n\t\t}\n\t\tfixedHuffmanDecoder.init(bits[:])\n\t})\n}\n\nfunc (f *decompressor) Reset(r io.Reader, dict []byte) error {\n\t*f = decompressor{\n\t\tr:        makeReader(r),\n\t\tbits:     f.bits,\n\t\tcodebits: f.codebits,\n\t\th1:       f.h1,\n\t\th2:       f.h2,\n\t\tdict:     f.dict,\n\t\tstep:     nextBlock,\n\t}\n\tf.dict.init(maxMatchOffset, dict)\n\treturn nil\n}\n\n// NewReader returns a new ReadCloser that can be used\n// to read the uncompressed version of r.\n// If r does not also implement io.ByteReader,\n// the decompressor may read more data than necessary from r.\n// It is the caller's responsibility to call Close on the ReadCloser\n// when finished reading.\n//\n// The ReadCloser returned by NewReader also implements Resetter.\nfunc NewReader(r io.Reader) io.ReadCloser {\n\tfixedHuffmanDecoderInit()\n\n\tvar f decompressor\n\tf.r = makeReader(r)\n\tf.bits = new([maxNumLit + maxNumDist]int)\n\tf.codebits = new([numCodes]int)\n\tf.step = nextBlock\n\tf.dict.init(maxMatchOffset, nil)\n\treturn &f\n}\n\n// NewReaderDict is like NewReader but initializes the reader\n// with a preset dictionary. The returned Reader behaves as if\n// the uncompressed data stream started with the given dictionary,\n// which has already been read. NewReaderDict is typically used\n// to read data compressed by NewWriterDict.\n//\n// The ReadCloser returned by NewReader also implements Resetter.\nfunc NewReaderDict(r io.Reader, dict []byte) io.ReadCloser {\n\tfixedHuffmanDecoderInit()\n\n\tvar f decompressor\n\tf.r = makeReader(r)\n\tf.bits = new([maxNumLit + maxNumDist]int)\n\tf.codebits = new([numCodes]int)\n\tf.step = nextBlock\n\tf.dict.init(maxMatchOffset, dict)\n\treturn &f\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/inflate_gen.go",
    "content": "// Code generated by go generate gen_inflate.go. DO NOT EDIT.\n\npackage flate\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"math/bits\"\n\t\"strings\"\n)\n\n// Decode a single Huffman block from f.\n// hl and hd are the Huffman states for the lit/length values\n// and the distance values, respectively. If hd == nil, using the\n// fixed distance encoding associated with fixed Huffman blocks.\nfunc (f *decompressor) huffmanBytesBuffer() {\n\tconst (\n\t\tstateInit = iota // Zero value must be stateInit\n\t\tstateDict\n\t)\n\tfr := f.r.(*bytes.Buffer)\n\n\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t// inline call to moreBits and reassign b,nb back to f on return.\n\tfnb, fb, dict := f.nb, f.b, &f.dict\n\n\tswitch f.stepState {\n\tcase stateInit:\n\t\tgoto readLiteral\n\tcase stateDict:\n\t\tgoto copyHistory\n\t}\n\nreadLiteral:\n\t// Read literal and/or (length, distance) according to RFC section 3.2.3.\n\t{\n\t\tvar v int\n\t\t{\n\t\t\t// Inlined v, err := f.huffSym(f.hl)\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hl.maxRead)\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hl.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tv = int(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar length int\n\t\tswitch {\n\t\tcase v < 256:\n\t\t\tdict.writeByte(byte(v))\n\t\t\tif dict.availWrite() == 0 {\n\t\t\t\tf.toRead = dict.readFlush()\n\t\t\t\tf.step = huffmanBytesBuffer\n\t\t\t\tf.stepState = stateInit\n\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgoto readLiteral\n\t\tcase v == 256:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tf.finishBlock()\n\t\t\treturn\n\t\t// otherwise, reference to older data\n\t\tcase v < 265:\n\t\t\tlength = v - (257 - 3)\n\t\tcase v < maxNumLit:\n\t\t\tval := decCodeToLen[(v - 257)]\n\t\t\tlength = int(val.length) + 3\n\t\t\tn := uint(val.extra)\n\t\t\tfor fnb < n {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits n>0:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tlength += int(fb & bitMask32[n])\n\t\t\tfb >>= n & regSizeMaskUint32\n\t\t\tfnb -= n\n\t\tdefault:\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(v, \">= maxNumLit\")\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\n\t\tvar dist uint32\n\t\tif f.hd == nil {\n\t\t\tfor fnb < 5 {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<5:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tdist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3)))\n\t\t\tfb >>= 5\n\t\t\tfnb -= 5\n\t\t} else {\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hd.maxRead)\n\t\t\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t\t\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t\t\t// inline call to moreBits and reassign b,nb back to f on return.\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hd.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tdist = uint32(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch {\n\t\tcase dist < 4:\n\t\t\tdist++\n\t\tcase dist < maxNumDist:\n\t\t\tnb := uint(dist-2) >> 1\n\t\t\t// have 1 bit in bottom of dist, need nb more.\n\t\t\textra := (dist & 1) << (nb & regSizeMaskUint32)\n\t\t\tfor fnb < nb {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<nb:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\textra |= fb & bitMask32[nb]\n\t\t\tfb >>= nb & regSizeMaskUint32\n\t\t\tfnb -= nb\n\t\t\tdist = 1<<((nb+1)&regSizeMaskUint32) + 1 + extra\n\t\t\t// slower: dist = bitMask32[nb+1] + 2 + extra\n\t\tdefault:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist too big:\", dist, maxNumDist)\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\t// No check on length; encoding can be prescient.\n\t\tif dist > uint32(dict.histSize()) {\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist > dict.histSize():\", dist, dict.histSize())\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\tf.copyLen, f.copyDist = length, int(dist)\n\t\tgoto copyHistory\n\t}\n\ncopyHistory:\n\t// Perform a backwards copy according to RFC section 3.2.3.\n\t{\n\t\tcnt := dict.tryWriteCopy(f.copyDist, f.copyLen)\n\t\tif cnt == 0 {\n\t\t\tcnt = dict.writeCopy(f.copyDist, f.copyLen)\n\t\t}\n\t\tf.copyLen -= cnt\n\n\t\tif dict.availWrite() == 0 || f.copyLen > 0 {\n\t\t\tf.toRead = dict.readFlush()\n\t\t\tf.step = huffmanBytesBuffer // We need to continue this work\n\t\t\tf.stepState = stateDict\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\t\tgoto readLiteral\n\t}\n\t// Not reached\n}\n\n// Decode a single Huffman block from f.\n// hl and hd are the Huffman states for the lit/length values\n// and the distance values, respectively. If hd == nil, using the\n// fixed distance encoding associated with fixed Huffman blocks.\nfunc (f *decompressor) huffmanBytesReader() {\n\tconst (\n\t\tstateInit = iota // Zero value must be stateInit\n\t\tstateDict\n\t)\n\tfr := f.r.(*bytes.Reader)\n\n\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t// inline call to moreBits and reassign b,nb back to f on return.\n\tfnb, fb, dict := f.nb, f.b, &f.dict\n\n\tswitch f.stepState {\n\tcase stateInit:\n\t\tgoto readLiteral\n\tcase stateDict:\n\t\tgoto copyHistory\n\t}\n\nreadLiteral:\n\t// Read literal and/or (length, distance) according to RFC section 3.2.3.\n\t{\n\t\tvar v int\n\t\t{\n\t\t\t// Inlined v, err := f.huffSym(f.hl)\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hl.maxRead)\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hl.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tv = int(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar length int\n\t\tswitch {\n\t\tcase v < 256:\n\t\t\tdict.writeByte(byte(v))\n\t\t\tif dict.availWrite() == 0 {\n\t\t\t\tf.toRead = dict.readFlush()\n\t\t\t\tf.step = huffmanBytesReader\n\t\t\t\tf.stepState = stateInit\n\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgoto readLiteral\n\t\tcase v == 256:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tf.finishBlock()\n\t\t\treturn\n\t\t// otherwise, reference to older data\n\t\tcase v < 265:\n\t\t\tlength = v - (257 - 3)\n\t\tcase v < maxNumLit:\n\t\t\tval := decCodeToLen[(v - 257)]\n\t\t\tlength = int(val.length) + 3\n\t\t\tn := uint(val.extra)\n\t\t\tfor fnb < n {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits n>0:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tlength += int(fb & bitMask32[n])\n\t\t\tfb >>= n & regSizeMaskUint32\n\t\t\tfnb -= n\n\t\tdefault:\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(v, \">= maxNumLit\")\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\n\t\tvar dist uint32\n\t\tif f.hd == nil {\n\t\t\tfor fnb < 5 {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<5:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tdist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3)))\n\t\t\tfb >>= 5\n\t\t\tfnb -= 5\n\t\t} else {\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hd.maxRead)\n\t\t\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t\t\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t\t\t// inline call to moreBits and reassign b,nb back to f on return.\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hd.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tdist = uint32(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch {\n\t\tcase dist < 4:\n\t\t\tdist++\n\t\tcase dist < maxNumDist:\n\t\t\tnb := uint(dist-2) >> 1\n\t\t\t// have 1 bit in bottom of dist, need nb more.\n\t\t\textra := (dist & 1) << (nb & regSizeMaskUint32)\n\t\t\tfor fnb < nb {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<nb:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\textra |= fb & bitMask32[nb]\n\t\t\tfb >>= nb & regSizeMaskUint32\n\t\t\tfnb -= nb\n\t\t\tdist = 1<<((nb+1)&regSizeMaskUint32) + 1 + extra\n\t\t\t// slower: dist = bitMask32[nb+1] + 2 + extra\n\t\tdefault:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist too big:\", dist, maxNumDist)\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\t// No check on length; encoding can be prescient.\n\t\tif dist > uint32(dict.histSize()) {\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist > dict.histSize():\", dist, dict.histSize())\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\tf.copyLen, f.copyDist = length, int(dist)\n\t\tgoto copyHistory\n\t}\n\ncopyHistory:\n\t// Perform a backwards copy according to RFC section 3.2.3.\n\t{\n\t\tcnt := dict.tryWriteCopy(f.copyDist, f.copyLen)\n\t\tif cnt == 0 {\n\t\t\tcnt = dict.writeCopy(f.copyDist, f.copyLen)\n\t\t}\n\t\tf.copyLen -= cnt\n\n\t\tif dict.availWrite() == 0 || f.copyLen > 0 {\n\t\t\tf.toRead = dict.readFlush()\n\t\t\tf.step = huffmanBytesReader // We need to continue this work\n\t\t\tf.stepState = stateDict\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\t\tgoto readLiteral\n\t}\n\t// Not reached\n}\n\n// Decode a single Huffman block from f.\n// hl and hd are the Huffman states for the lit/length values\n// and the distance values, respectively. If hd == nil, using the\n// fixed distance encoding associated with fixed Huffman blocks.\nfunc (f *decompressor) huffmanBufioReader() {\n\tconst (\n\t\tstateInit = iota // Zero value must be stateInit\n\t\tstateDict\n\t)\n\tfr := f.r.(*bufio.Reader)\n\n\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t// inline call to moreBits and reassign b,nb back to f on return.\n\tfnb, fb, dict := f.nb, f.b, &f.dict\n\n\tswitch f.stepState {\n\tcase stateInit:\n\t\tgoto readLiteral\n\tcase stateDict:\n\t\tgoto copyHistory\n\t}\n\nreadLiteral:\n\t// Read literal and/or (length, distance) according to RFC section 3.2.3.\n\t{\n\t\tvar v int\n\t\t{\n\t\t\t// Inlined v, err := f.huffSym(f.hl)\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hl.maxRead)\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hl.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tv = int(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar length int\n\t\tswitch {\n\t\tcase v < 256:\n\t\t\tdict.writeByte(byte(v))\n\t\t\tif dict.availWrite() == 0 {\n\t\t\t\tf.toRead = dict.readFlush()\n\t\t\t\tf.step = huffmanBufioReader\n\t\t\t\tf.stepState = stateInit\n\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgoto readLiteral\n\t\tcase v == 256:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tf.finishBlock()\n\t\t\treturn\n\t\t// otherwise, reference to older data\n\t\tcase v < 265:\n\t\t\tlength = v - (257 - 3)\n\t\tcase v < maxNumLit:\n\t\t\tval := decCodeToLen[(v - 257)]\n\t\t\tlength = int(val.length) + 3\n\t\t\tn := uint(val.extra)\n\t\t\tfor fnb < n {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits n>0:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tlength += int(fb & bitMask32[n])\n\t\t\tfb >>= n & regSizeMaskUint32\n\t\t\tfnb -= n\n\t\tdefault:\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(v, \">= maxNumLit\")\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\n\t\tvar dist uint32\n\t\tif f.hd == nil {\n\t\t\tfor fnb < 5 {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<5:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tdist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3)))\n\t\t\tfb >>= 5\n\t\t\tfnb -= 5\n\t\t} else {\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hd.maxRead)\n\t\t\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t\t\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t\t\t// inline call to moreBits and reassign b,nb back to f on return.\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hd.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tdist = uint32(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch {\n\t\tcase dist < 4:\n\t\t\tdist++\n\t\tcase dist < maxNumDist:\n\t\t\tnb := uint(dist-2) >> 1\n\t\t\t// have 1 bit in bottom of dist, need nb more.\n\t\t\textra := (dist & 1) << (nb & regSizeMaskUint32)\n\t\t\tfor fnb < nb {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<nb:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\textra |= fb & bitMask32[nb]\n\t\t\tfb >>= nb & regSizeMaskUint32\n\t\t\tfnb -= nb\n\t\t\tdist = 1<<((nb+1)&regSizeMaskUint32) + 1 + extra\n\t\t\t// slower: dist = bitMask32[nb+1] + 2 + extra\n\t\tdefault:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist too big:\", dist, maxNumDist)\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\t// No check on length; encoding can be prescient.\n\t\tif dist > uint32(dict.histSize()) {\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist > dict.histSize():\", dist, dict.histSize())\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\tf.copyLen, f.copyDist = length, int(dist)\n\t\tgoto copyHistory\n\t}\n\ncopyHistory:\n\t// Perform a backwards copy according to RFC section 3.2.3.\n\t{\n\t\tcnt := dict.tryWriteCopy(f.copyDist, f.copyLen)\n\t\tif cnt == 0 {\n\t\t\tcnt = dict.writeCopy(f.copyDist, f.copyLen)\n\t\t}\n\t\tf.copyLen -= cnt\n\n\t\tif dict.availWrite() == 0 || f.copyLen > 0 {\n\t\t\tf.toRead = dict.readFlush()\n\t\t\tf.step = huffmanBufioReader // We need to continue this work\n\t\t\tf.stepState = stateDict\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\t\tgoto readLiteral\n\t}\n\t// Not reached\n}\n\n// Decode a single Huffman block from f.\n// hl and hd are the Huffman states for the lit/length values\n// and the distance values, respectively. If hd == nil, using the\n// fixed distance encoding associated with fixed Huffman blocks.\nfunc (f *decompressor) huffmanStringsReader() {\n\tconst (\n\t\tstateInit = iota // Zero value must be stateInit\n\t\tstateDict\n\t)\n\tfr := f.r.(*strings.Reader)\n\n\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t// inline call to moreBits and reassign b,nb back to f on return.\n\tfnb, fb, dict := f.nb, f.b, &f.dict\n\n\tswitch f.stepState {\n\tcase stateInit:\n\t\tgoto readLiteral\n\tcase stateDict:\n\t\tgoto copyHistory\n\t}\n\nreadLiteral:\n\t// Read literal and/or (length, distance) according to RFC section 3.2.3.\n\t{\n\t\tvar v int\n\t\t{\n\t\t\t// Inlined v, err := f.huffSym(f.hl)\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hl.maxRead)\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hl.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tv = int(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar length int\n\t\tswitch {\n\t\tcase v < 256:\n\t\t\tdict.writeByte(byte(v))\n\t\t\tif dict.availWrite() == 0 {\n\t\t\t\tf.toRead = dict.readFlush()\n\t\t\t\tf.step = huffmanStringsReader\n\t\t\t\tf.stepState = stateInit\n\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgoto readLiteral\n\t\tcase v == 256:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tf.finishBlock()\n\t\t\treturn\n\t\t// otherwise, reference to older data\n\t\tcase v < 265:\n\t\t\tlength = v - (257 - 3)\n\t\tcase v < maxNumLit:\n\t\t\tval := decCodeToLen[(v - 257)]\n\t\t\tlength = int(val.length) + 3\n\t\t\tn := uint(val.extra)\n\t\t\tfor fnb < n {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits n>0:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tlength += int(fb & bitMask32[n])\n\t\t\tfb >>= n & regSizeMaskUint32\n\t\t\tfnb -= n\n\t\tdefault:\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(v, \">= maxNumLit\")\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\n\t\tvar dist uint32\n\t\tif f.hd == nil {\n\t\t\tfor fnb < 5 {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<5:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tdist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3)))\n\t\t\tfb >>= 5\n\t\t\tfnb -= 5\n\t\t} else {\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hd.maxRead)\n\t\t\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t\t\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t\t\t// inline call to moreBits and reassign b,nb back to f on return.\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hd.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tdist = uint32(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch {\n\t\tcase dist < 4:\n\t\t\tdist++\n\t\tcase dist < maxNumDist:\n\t\t\tnb := uint(dist-2) >> 1\n\t\t\t// have 1 bit in bottom of dist, need nb more.\n\t\t\textra := (dist & 1) << (nb & regSizeMaskUint32)\n\t\t\tfor fnb < nb {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<nb:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\textra |= fb & bitMask32[nb]\n\t\t\tfb >>= nb & regSizeMaskUint32\n\t\t\tfnb -= nb\n\t\t\tdist = 1<<((nb+1)&regSizeMaskUint32) + 1 + extra\n\t\t\t// slower: dist = bitMask32[nb+1] + 2 + extra\n\t\tdefault:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist too big:\", dist, maxNumDist)\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\t// No check on length; encoding can be prescient.\n\t\tif dist > uint32(dict.histSize()) {\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist > dict.histSize():\", dist, dict.histSize())\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\tf.copyLen, f.copyDist = length, int(dist)\n\t\tgoto copyHistory\n\t}\n\ncopyHistory:\n\t// Perform a backwards copy according to RFC section 3.2.3.\n\t{\n\t\tcnt := dict.tryWriteCopy(f.copyDist, f.copyLen)\n\t\tif cnt == 0 {\n\t\t\tcnt = dict.writeCopy(f.copyDist, f.copyLen)\n\t\t}\n\t\tf.copyLen -= cnt\n\n\t\tif dict.availWrite() == 0 || f.copyLen > 0 {\n\t\t\tf.toRead = dict.readFlush()\n\t\t\tf.step = huffmanStringsReader // We need to continue this work\n\t\t\tf.stepState = stateDict\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\t\tgoto readLiteral\n\t}\n\t// Not reached\n}\n\n// Decode a single Huffman block from f.\n// hl and hd are the Huffman states for the lit/length values\n// and the distance values, respectively. If hd == nil, using the\n// fixed distance encoding associated with fixed Huffman blocks.\nfunc (f *decompressor) huffmanGenericReader() {\n\tconst (\n\t\tstateInit = iota // Zero value must be stateInit\n\t\tstateDict\n\t)\n\tfr := f.r.(Reader)\n\n\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t// inline call to moreBits and reassign b,nb back to f on return.\n\tfnb, fb, dict := f.nb, f.b, &f.dict\n\n\tswitch f.stepState {\n\tcase stateInit:\n\t\tgoto readLiteral\n\tcase stateDict:\n\t\tgoto copyHistory\n\t}\n\nreadLiteral:\n\t// Read literal and/or (length, distance) according to RFC section 3.2.3.\n\t{\n\t\tvar v int\n\t\t{\n\t\t\t// Inlined v, err := f.huffSym(f.hl)\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hl.maxRead)\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hl.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tv = int(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar length int\n\t\tswitch {\n\t\tcase v < 256:\n\t\t\tdict.writeByte(byte(v))\n\t\t\tif dict.availWrite() == 0 {\n\t\t\t\tf.toRead = dict.readFlush()\n\t\t\t\tf.step = huffmanGenericReader\n\t\t\t\tf.stepState = stateInit\n\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgoto readLiteral\n\t\tcase v == 256:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tf.finishBlock()\n\t\t\treturn\n\t\t// otherwise, reference to older data\n\t\tcase v < 265:\n\t\t\tlength = v - (257 - 3)\n\t\tcase v < maxNumLit:\n\t\t\tval := decCodeToLen[(v - 257)]\n\t\t\tlength = int(val.length) + 3\n\t\t\tn := uint(val.extra)\n\t\t\tfor fnb < n {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits n>0:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tlength += int(fb & bitMask32[n])\n\t\t\tfb >>= n & regSizeMaskUint32\n\t\t\tfnb -= n\n\t\tdefault:\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(v, \">= maxNumLit\")\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\n\t\tvar dist uint32\n\t\tif f.hd == nil {\n\t\t\tfor fnb < 5 {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<5:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\tdist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3)))\n\t\t\tfb >>= 5\n\t\t\tfnb -= 5\n\t\t} else {\n\t\t\t// Since a huffmanDecoder can be empty or be composed of a degenerate tree\n\t\t\t// with single element, huffSym must error on these two edge cases. In both\n\t\t\t// cases, the chunks slice will be 0 for the invalid sequence, leading it\n\t\t\t// satisfy the n == 0 check below.\n\t\t\tn := uint(f.hd.maxRead)\n\t\t\t// Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers,\n\t\t\t// but is smart enough to keep local variables in registers, so use nb and b,\n\t\t\t// inline call to moreBits and reassign b,nb back to f on return.\n\t\t\tfor {\n\t\t\t\tfor fnb < n {\n\t\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tf.err = noEOF(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tf.roffset++\n\t\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\t\tfnb += 8\n\t\t\t\t}\n\t\t\t\tchunk := f.hd.chunks[fb&(huffmanNumChunks-1)]\n\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\tif n > huffmanChunkBits {\n\t\t\t\t\tchunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask]\n\t\t\t\t\tn = uint(chunk & huffmanCountMask)\n\t\t\t\t}\n\t\t\t\tif n <= fnb {\n\t\t\t\t\tif n == 0 {\n\t\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\t\tfmt.Println(\"huffsym: n==0\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tfb = fb >> (n & regSizeMaskUint32)\n\t\t\t\t\tfnb = fnb - n\n\t\t\t\t\tdist = uint32(chunk >> huffmanValueShift)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch {\n\t\tcase dist < 4:\n\t\t\tdist++\n\t\tcase dist < maxNumDist:\n\t\t\tnb := uint(dist-2) >> 1\n\t\t\t// have 1 bit in bottom of dist, need nb more.\n\t\t\textra := (dist & 1) << (nb & regSizeMaskUint32)\n\t\t\tfor fnb < nb {\n\t\t\t\tc, err := fr.ReadByte()\n\t\t\t\tif err != nil {\n\t\t\t\t\tf.b, f.nb = fb, fnb\n\t\t\t\t\tif debugDecode {\n\t\t\t\t\t\tfmt.Println(\"morebits f.nb<nb:\", err)\n\t\t\t\t\t}\n\t\t\t\t\tf.err = err\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tf.roffset++\n\t\t\t\tfb |= uint32(c) << (fnb & regSizeMaskUint32)\n\t\t\t\tfnb += 8\n\t\t\t}\n\t\t\textra |= fb & bitMask32[nb]\n\t\t\tfb >>= nb & regSizeMaskUint32\n\t\t\tfnb -= nb\n\t\t\tdist = 1<<((nb+1)&regSizeMaskUint32) + 1 + extra\n\t\t\t// slower: dist = bitMask32[nb+1] + 2 + extra\n\t\tdefault:\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist too big:\", dist, maxNumDist)\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\t// No check on length; encoding can be prescient.\n\t\tif dist > uint32(dict.histSize()) {\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\tif debugDecode {\n\t\t\t\tfmt.Println(\"dist > dict.histSize():\", dist, dict.histSize())\n\t\t\t}\n\t\t\tf.err = CorruptInputError(f.roffset)\n\t\t\treturn\n\t\t}\n\n\t\tf.copyLen, f.copyDist = length, int(dist)\n\t\tgoto copyHistory\n\t}\n\ncopyHistory:\n\t// Perform a backwards copy according to RFC section 3.2.3.\n\t{\n\t\tcnt := dict.tryWriteCopy(f.copyDist, f.copyLen)\n\t\tif cnt == 0 {\n\t\t\tcnt = dict.writeCopy(f.copyDist, f.copyLen)\n\t\t}\n\t\tf.copyLen -= cnt\n\n\t\tif dict.availWrite() == 0 || f.copyLen > 0 {\n\t\t\tf.toRead = dict.readFlush()\n\t\t\tf.step = huffmanGenericReader // We need to continue this work\n\t\t\tf.stepState = stateDict\n\t\t\tf.b, f.nb = fb, fnb\n\t\t\treturn\n\t\t}\n\t\tgoto readLiteral\n\t}\n\t// Not reached\n}\n\nfunc (f *decompressor) huffmanBlockDecoder() {\n\tswitch f.r.(type) {\n\tcase *bytes.Buffer:\n\t\tf.huffmanBytesBuffer()\n\tcase *bytes.Reader:\n\t\tf.huffmanBytesReader()\n\tcase *bufio.Reader:\n\t\tf.huffmanBufioReader()\n\tcase *strings.Reader:\n\t\tf.huffmanStringsReader()\n\tcase Reader:\n\t\tf.huffmanGenericReader()\n\tdefault:\n\t\tf.huffmanGenericReader()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/level1.go",
    "content": "package flate\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"math/bits\"\n)\n\n// fastGen maintains the table for matches,\n// and the previous byte block for level 2.\n// This is the generic implementation.\ntype fastEncL1 struct {\n\tfastGen\n\ttable [tableSize]tableEntry\n}\n\n// EncodeL1 uses a similar algorithm to level 1\nfunc (e *fastEncL1) Encode(dst *tokens, src []byte) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t\thashBytes              = 5\n\t)\n\tif debugDeflate && e.cur < 0 {\n\t\tpanic(fmt.Sprint(\"e.cur < 0: \", e.cur))\n\t}\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= bufferReset {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\te.cur = maxMatchOffset\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - maxMatchOffset\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v <= minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\te.cur = maxMatchOffset\n\t}\n\n\ts := e.addBlock(src)\n\n\t// This check isn't in the Snappy implementation, but there, the caller\n\t// instead of the callee handles this case.\n\tif len(src) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = uint16(len(src))\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tnextEmit := s\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int32(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load6432(src, s)\n\n\tfor {\n\t\tconst skipLog = 5\n\t\tconst doEvery = 2\n\n\t\tnextS := s\n\t\tvar candidate tableEntry\n\t\tfor {\n\t\t\tnextHash := hashLen(cv, tableBits, hashBytes)\n\t\t\tcandidate = e.table[nextHash]\n\t\t\tnextS = s + doEvery + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\n\t\t\tnow := load6432(src, nextS)\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur}\n\t\t\tnextHash = hashLen(now, tableBits, hashBytes)\n\n\t\t\toffset := s - (candidate.offset - e.cur)\n\t\t\tif offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\te.table[nextHash] = tableEntry{offset: nextS + e.cur}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Do one right away...\n\t\t\tcv = now\n\t\t\ts = nextS\n\t\t\tnextS++\n\t\t\tcandidate = e.table[nextHash]\n\t\t\tnow >>= 8\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur}\n\n\t\t\toffset = s - (candidate.offset - e.cur)\n\t\t\tif offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\te.table[nextHash] = tableEntry{offset: nextS + e.cur}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcv = now\n\t\t\ts = nextS\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\t\tfor {\n\t\t\t// Invariant: we have a 4-byte match at s, and no need to emit any\n\t\t\t// literal bytes prior to s.\n\n\t\t\t// Extend the 4-byte match as long as possible.\n\t\t\tt := candidate.offset - e.cur\n\t\t\tvar l = int32(4)\n\t\t\tif false {\n\t\t\t\tl = e.matchlenLong(s+4, t+4, src) + 4\n\t\t\t} else {\n\t\t\t\t// inlined:\n\t\t\t\ta := src[s+4:]\n\t\t\t\tb := src[t+4:]\n\t\t\t\tfor len(a) >= 8 {\n\t\t\t\t\tif diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b); diff != 0 {\n\t\t\t\t\t\tl += int32(bits.TrailingZeros64(diff) >> 3)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tl += 8\n\t\t\t\t\ta = a[8:]\n\t\t\t\t\tb = b[8:]\n\t\t\t\t}\n\t\t\t\tif len(a) < 8 {\n\t\t\t\t\tb = b[:len(a)]\n\t\t\t\t\tfor i := range a {\n\t\t\t\t\t\tif a[i] != b[i] {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tl++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Extend backwards\n\t\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\t\ts--\n\t\t\t\tt--\n\t\t\t\tl++\n\t\t\t}\n\t\t\tif nextEmit < s {\n\t\t\t\tif false {\n\t\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t\t} else {\n\t\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\t\tdst.n++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Save the match found\n\t\t\tif false {\n\t\t\t\tdst.AddMatchLong(l, uint32(s-t-baseMatchOffset))\n\t\t\t} else {\n\t\t\t\t// Inlined...\n\t\t\t\txoffset := uint32(s - t - baseMatchOffset)\n\t\t\t\txlength := l\n\t\t\t\toc := offsetCode(xoffset)\n\t\t\t\txoffset |= oc << 16\n\t\t\t\tfor xlength > 0 {\n\t\t\t\t\txl := xlength\n\t\t\t\t\tif xl > 258 {\n\t\t\t\t\t\tif xl > 258+baseMatchLength {\n\t\t\t\t\t\t\txl = 258\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\txl = 258 - baseMatchLength\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\txlength -= xl\n\t\t\t\t\txl -= baseMatchLength\n\t\t\t\t\tdst.extraHist[lengthCodes1[uint8(xl)]]++\n\t\t\t\t\tdst.offHist[oc]++\n\t\t\t\t\tdst.tokens[dst.n] = token(matchType | uint32(xl)<<lengthShift | xoffset)\n\t\t\t\t\tdst.n++\n\t\t\t\t}\n\t\t\t}\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif nextS >= s {\n\t\t\t\ts = nextS + 1\n\t\t\t}\n\t\t\tif s >= sLimit {\n\t\t\t\t// Index first pair after match end.\n\t\t\t\tif int(s+l+8) < len(src) {\n\t\t\t\t\tcv := load6432(src, s)\n\t\t\t\t\te.table[hashLen(cv, tableBits, hashBytes)] = tableEntry{offset: s + e.cur}\n\t\t\t\t}\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\n\t\t\t// We could immediately start working at s now, but to improve\n\t\t\t// compression we first update the hash table at s-2 and at s. If\n\t\t\t// another emitCopy is not our next move, also calculate nextHash\n\t\t\t// at s+1. At least on GOARCH=amd64, these three hash calculations\n\t\t\t// are faster as one load64 call (with some shifts) instead of\n\t\t\t// three load32 calls.\n\t\t\tx := load6432(src, s-2)\n\t\t\to := e.cur + s - 2\n\t\t\tprevHash := hashLen(x, tableBits, hashBytes)\n\t\t\te.table[prevHash] = tableEntry{offset: o}\n\t\t\tx >>= 16\n\t\t\tcurrHash := hashLen(x, tableBits, hashBytes)\n\t\t\tcandidate = e.table[currHash]\n\t\t\te.table[currHash] = tableEntry{offset: o + 2}\n\n\t\t\toffset := s - (candidate.offset - e.cur)\n\t\t\tif offset > maxMatchOffset || uint32(x) != load3232(src, candidate.offset-e.cur) {\n\t\t\t\tcv = x >> 8\n\t\t\t\ts++\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/level2.go",
    "content": "package flate\n\nimport \"fmt\"\n\n// fastGen maintains the table for matches,\n// and the previous byte block for level 2.\n// This is the generic implementation.\ntype fastEncL2 struct {\n\tfastGen\n\ttable [bTableSize]tableEntry\n}\n\n// EncodeL2 uses a similar algorithm to level 1, but is capable\n// of matching across blocks giving better compression at a small slowdown.\nfunc (e *fastEncL2) Encode(dst *tokens, src []byte) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t\thashBytes              = 5\n\t)\n\n\tif debugDeflate && e.cur < 0 {\n\t\tpanic(fmt.Sprint(\"e.cur < 0: \", e.cur))\n\t}\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= bufferReset {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\te.cur = maxMatchOffset\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - maxMatchOffset\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v <= minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\te.cur = maxMatchOffset\n\t}\n\n\ts := e.addBlock(src)\n\n\t// This check isn't in the Snappy implementation, but there, the caller\n\t// instead of the callee handles this case.\n\tif len(src) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = uint16(len(src))\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tnextEmit := s\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int32(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load6432(src, s)\n\tfor {\n\t\t// When should we start skipping if we haven't found matches in a long while.\n\t\tconst skipLog = 5\n\t\tconst doEvery = 2\n\n\t\tnextS := s\n\t\tvar candidate tableEntry\n\t\tfor {\n\t\t\tnextHash := hashLen(cv, bTableBits, hashBytes)\n\t\t\ts = nextS\n\t\t\tnextS = s + doEvery + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\t\t\tcandidate = e.table[nextHash]\n\t\t\tnow := load6432(src, nextS)\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur}\n\t\t\tnextHash = hashLen(now, bTableBits, hashBytes)\n\n\t\t\toffset := s - (candidate.offset - e.cur)\n\t\t\tif offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\te.table[nextHash] = tableEntry{offset: nextS + e.cur}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Do one right away...\n\t\t\tcv = now\n\t\t\ts = nextS\n\t\t\tnextS++\n\t\t\tcandidate = e.table[nextHash]\n\t\t\tnow >>= 8\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur}\n\n\t\t\toffset = s - (candidate.offset - e.cur)\n\t\t\tif offset < maxMatchOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcv = now\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\n\t\t// Call emitCopy, and then see if another emitCopy could be our next\n\t\t// move. Repeat until we find no match for the input immediately after\n\t\t// what was consumed by the last emitCopy call.\n\t\t//\n\t\t// If we exit this loop normally then we need to call emitLiteral next,\n\t\t// though we don't yet know how big the literal will be. We handle that\n\t\t// by proceeding to the next iteration of the main loop. We also can\n\t\t// exit this loop via goto if we get close to exhausting the input.\n\t\tfor {\n\t\t\t// Invariant: we have a 4-byte match at s, and no need to emit any\n\t\t\t// literal bytes prior to s.\n\n\t\t\t// Extend the 4-byte match as long as possible.\n\t\t\tt := candidate.offset - e.cur\n\t\t\tl := e.matchlenLong(s+4, t+4, src) + 4\n\n\t\t\t// Extend backwards\n\t\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\t\ts--\n\t\t\t\tt--\n\t\t\t\tl++\n\t\t\t}\n\t\t\tif nextEmit < s {\n\t\t\t\tif false {\n\t\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t\t} else {\n\t\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\t\tdst.n++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdst.AddMatchLong(l, uint32(s-t-baseMatchOffset))\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif nextS >= s {\n\t\t\t\ts = nextS + 1\n\t\t\t}\n\n\t\t\tif s >= sLimit {\n\t\t\t\t// Index first pair after match end.\n\t\t\t\tif int(s+l+8) < len(src) {\n\t\t\t\t\tcv := load6432(src, s)\n\t\t\t\t\te.table[hashLen(cv, bTableBits, hashBytes)] = tableEntry{offset: s + e.cur}\n\t\t\t\t}\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\n\t\t\t// Store every second hash in-between, but offset by 1.\n\t\t\tfor i := s - l + 2; i < s-5; i += 7 {\n\t\t\t\tx := load6432(src, i)\n\t\t\t\tnextHash := hashLen(x, bTableBits, hashBytes)\n\t\t\t\te.table[nextHash] = tableEntry{offset: e.cur + i}\n\t\t\t\t// Skip one\n\t\t\t\tx >>= 16\n\t\t\t\tnextHash = hashLen(x, bTableBits, hashBytes)\n\t\t\t\te.table[nextHash] = tableEntry{offset: e.cur + i + 2}\n\t\t\t\t// Skip one\n\t\t\t\tx >>= 16\n\t\t\t\tnextHash = hashLen(x, bTableBits, hashBytes)\n\t\t\t\te.table[nextHash] = tableEntry{offset: e.cur + i + 4}\n\t\t\t}\n\n\t\t\t// We could immediately start working at s now, but to improve\n\t\t\t// compression we first update the hash table at s-2 to s. If\n\t\t\t// another emitCopy is not our next move, also calculate nextHash\n\t\t\t// at s+1. At least on GOARCH=amd64, these three hash calculations\n\t\t\t// are faster as one load64 call (with some shifts) instead of\n\t\t\t// three load32 calls.\n\t\t\tx := load6432(src, s-2)\n\t\t\to := e.cur + s - 2\n\t\t\tprevHash := hashLen(x, bTableBits, hashBytes)\n\t\t\tprevHash2 := hashLen(x>>8, bTableBits, hashBytes)\n\t\t\te.table[prevHash] = tableEntry{offset: o}\n\t\t\te.table[prevHash2] = tableEntry{offset: o + 1}\n\t\t\tcurrHash := hashLen(x>>16, bTableBits, hashBytes)\n\t\t\tcandidate = e.table[currHash]\n\t\t\te.table[currHash] = tableEntry{offset: o + 2}\n\n\t\t\toffset := s - (candidate.offset - e.cur)\n\t\t\tif offset > maxMatchOffset || uint32(x>>16) != load3232(src, candidate.offset-e.cur) {\n\t\t\t\tcv = x >> 24\n\t\t\t\ts++\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/level3.go",
    "content": "package flate\n\nimport \"fmt\"\n\n// fastEncL3\ntype fastEncL3 struct {\n\tfastGen\n\ttable [1 << 16]tableEntryPrev\n}\n\n// Encode uses a similar algorithm to level 2, will check up to two candidates.\nfunc (e *fastEncL3) Encode(dst *tokens, src []byte) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t\ttableBits              = 16\n\t\ttableSize              = 1 << tableBits\n\t\thashBytes              = 5\n\t)\n\n\tif debugDeflate && e.cur < 0 {\n\t\tpanic(fmt.Sprint(\"e.cur < 0: \", e.cur))\n\t}\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= bufferReset {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntryPrev{}\n\t\t\t}\n\t\t\te.cur = maxMatchOffset\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - maxMatchOffset\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i]\n\t\t\tif v.Cur.offset <= minOff {\n\t\t\t\tv.Cur.offset = 0\n\t\t\t} else {\n\t\t\t\tv.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\tif v.Prev.offset <= minOff {\n\t\t\t\tv.Prev.offset = 0\n\t\t\t} else {\n\t\t\t\tv.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.table[i] = v\n\t\t}\n\t\te.cur = maxMatchOffset\n\t}\n\n\ts := e.addBlock(src)\n\n\t// Skip if too small.\n\tif len(src) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = uint16(len(src))\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tnextEmit := s\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int32(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load6432(src, s)\n\tfor {\n\t\tconst skipLog = 7\n\t\tnextS := s\n\t\tvar candidate tableEntry\n\t\tfor {\n\t\t\tnextHash := hashLen(cv, tableBits, hashBytes)\n\t\t\ts = nextS\n\t\t\tnextS = s + 1 + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\t\t\tcandidates := e.table[nextHash]\n\t\t\tnow := load6432(src, nextS)\n\n\t\t\t// Safe offset distance until s + 4...\n\t\t\tminOffset := e.cur + s - (maxMatchOffset - 4)\n\t\t\te.table[nextHash] = tableEntryPrev{Prev: candidates.Cur, Cur: tableEntry{offset: s + e.cur}}\n\n\t\t\t// Check both candidates\n\t\t\tcandidate = candidates.Cur\n\t\t\tif candidate.offset < minOffset {\n\t\t\t\tcv = now\n\t\t\t\t// Previous will also be invalid, we have nothing.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\tif candidates.Prev.offset < minOffset || uint32(cv) != load3232(src, candidates.Prev.offset-e.cur) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// Both match and are valid, pick longest.\n\t\t\t\toffset := s - (candidate.offset - e.cur)\n\t\t\t\to2 := s - (candidates.Prev.offset - e.cur)\n\t\t\t\tl1, l2 := matchLen(src[s+4:], src[s-offset+4:]), matchLen(src[s+4:], src[s-o2+4:])\n\t\t\t\tif l2 > l1 {\n\t\t\t\t\tcandidate = candidates.Prev\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\t// We only check if value mismatches.\n\t\t\t\t// Offset will always be invalid in other cases.\n\t\t\t\tcandidate = candidates.Prev\n\t\t\t\tif candidate.offset > minOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tcv = now\n\t\t}\n\n\t\t// Call emitCopy, and then see if another emitCopy could be our next\n\t\t// move. Repeat until we find no match for the input immediately after\n\t\t// what was consumed by the last emitCopy call.\n\t\t//\n\t\t// If we exit this loop normally then we need to call emitLiteral next,\n\t\t// though we don't yet know how big the literal will be. We handle that\n\t\t// by proceeding to the next iteration of the main loop. We also can\n\t\t// exit this loop via goto if we get close to exhausting the input.\n\t\tfor {\n\t\t\t// Invariant: we have a 4-byte match at s, and no need to emit any\n\t\t\t// literal bytes prior to s.\n\n\t\t\t// Extend the 4-byte match as long as possible.\n\t\t\t//\n\t\t\tt := candidate.offset - e.cur\n\t\t\tl := e.matchlenLong(s+4, t+4, src) + 4\n\n\t\t\t// Extend backwards\n\t\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\t\ts--\n\t\t\t\tt--\n\t\t\t\tl++\n\t\t\t}\n\t\t\tif nextEmit < s {\n\t\t\t\tif false {\n\t\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t\t} else {\n\t\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\t\tdst.n++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdst.AddMatchLong(l, uint32(s-t-baseMatchOffset))\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif nextS >= s {\n\t\t\t\ts = nextS + 1\n\t\t\t}\n\n\t\t\tif s >= sLimit {\n\t\t\t\tt += l\n\t\t\t\t// Index first pair after match end.\n\t\t\t\tif int(t+8) < len(src) && t > 0 {\n\t\t\t\t\tcv = load6432(src, t)\n\t\t\t\t\tnextHash := hashLen(cv, tableBits, hashBytes)\n\t\t\t\t\te.table[nextHash] = tableEntryPrev{\n\t\t\t\t\t\tPrev: e.table[nextHash].Cur,\n\t\t\t\t\t\tCur:  tableEntry{offset: e.cur + t},\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\n\t\t\t// Store every 5th hash in-between.\n\t\t\tfor i := s - l + 2; i < s-5; i += 6 {\n\t\t\t\tnextHash := hashLen(load6432(src, i), tableBits, hashBytes)\n\t\t\t\te.table[nextHash] = tableEntryPrev{\n\t\t\t\t\tPrev: e.table[nextHash].Cur,\n\t\t\t\t\tCur:  tableEntry{offset: e.cur + i}}\n\t\t\t}\n\t\t\t// We could immediately start working at s now, but to improve\n\t\t\t// compression we first update the hash table at s-2 to s.\n\t\t\tx := load6432(src, s-2)\n\t\t\tprevHash := hashLen(x, tableBits, hashBytes)\n\n\t\t\te.table[prevHash] = tableEntryPrev{\n\t\t\t\tPrev: e.table[prevHash].Cur,\n\t\t\t\tCur:  tableEntry{offset: e.cur + s - 2},\n\t\t\t}\n\t\t\tx >>= 8\n\t\t\tprevHash = hashLen(x, tableBits, hashBytes)\n\n\t\t\te.table[prevHash] = tableEntryPrev{\n\t\t\t\tPrev: e.table[prevHash].Cur,\n\t\t\t\tCur:  tableEntry{offset: e.cur + s - 1},\n\t\t\t}\n\t\t\tx >>= 8\n\t\t\tcurrHash := hashLen(x, tableBits, hashBytes)\n\t\t\tcandidates := e.table[currHash]\n\t\t\tcv = x\n\t\t\te.table[currHash] = tableEntryPrev{\n\t\t\t\tPrev: candidates.Cur,\n\t\t\t\tCur:  tableEntry{offset: s + e.cur},\n\t\t\t}\n\n\t\t\t// Check both candidates\n\t\t\tcandidate = candidates.Cur\n\t\t\tminOffset := e.cur + s - (maxMatchOffset - 4)\n\n\t\t\tif candidate.offset > minOffset {\n\t\t\t\tif uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\t\t// Found a match...\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcandidate = candidates.Prev\n\t\t\t\tif candidate.offset > minOffset && uint32(cv) == load3232(src, candidate.offset-e.cur) {\n\t\t\t\t\t// Match at prev...\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tcv = x >> 8\n\t\t\ts++\n\t\t\tbreak\n\t\t}\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/level4.go",
    "content": "package flate\n\nimport \"fmt\"\n\ntype fastEncL4 struct {\n\tfastGen\n\ttable  [tableSize]tableEntry\n\tbTable [tableSize]tableEntry\n}\n\nfunc (e *fastEncL4) Encode(dst *tokens, src []byte) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t\thashShortBytes         = 4\n\t)\n\tif debugDeflate && e.cur < 0 {\n\t\tpanic(fmt.Sprint(\"e.cur < 0: \", e.cur))\n\t}\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= bufferReset {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\tfor i := range e.bTable[:] {\n\t\t\t\te.bTable[i] = tableEntry{}\n\t\t\t}\n\t\t\te.cur = maxMatchOffset\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - maxMatchOffset\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v <= minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.bTable[:] {\n\t\t\tv := e.bTable[i].offset\n\t\t\tif v <= minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.bTable[i].offset = v\n\t\t}\n\t\te.cur = maxMatchOffset\n\t}\n\n\ts := e.addBlock(src)\n\n\t// This check isn't in the Snappy implementation, but there, the caller\n\t// instead of the callee handles this case.\n\tif len(src) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = uint16(len(src))\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tnextEmit := s\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int32(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load6432(src, s)\n\tfor {\n\t\tconst skipLog = 6\n\t\tconst doEvery = 1\n\n\t\tnextS := s\n\t\tvar t int32\n\t\tfor {\n\t\t\tnextHashS := hashLen(cv, tableBits, hashShortBytes)\n\t\t\tnextHashL := hash7(cv, tableBits)\n\n\t\t\ts = nextS\n\t\t\tnextS = s + doEvery + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\t\t\t// Fetch a short+long candidate\n\t\t\tsCandidate := e.table[nextHashS]\n\t\t\tlCandidate := e.bTable[nextHashL]\n\t\t\tnext := load6432(src, nextS)\n\t\t\tentry := tableEntry{offset: s + e.cur}\n\t\t\te.table[nextHashS] = entry\n\t\t\te.bTable[nextHashL] = entry\n\n\t\t\tt = lCandidate.offset - e.cur\n\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.offset-e.cur) {\n\t\t\t\t// We got a long match. Use that.\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tt = sCandidate.offset - e.cur\n\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) {\n\t\t\t\t// Found a 4 match...\n\t\t\t\tlCandidate = e.bTable[hash7(next, tableBits)]\n\n\t\t\t\t// If the next long is a candidate, check if we should use that instead...\n\t\t\t\tlOff := nextS - (lCandidate.offset - e.cur)\n\t\t\t\tif lOff < maxMatchOffset && load3232(src, lCandidate.offset-e.cur) == uint32(next) {\n\t\t\t\t\tl1, l2 := matchLen(src[s+4:], src[t+4:]), matchLen(src[nextS+4:], src[nextS-lOff+4:])\n\t\t\t\t\tif l2 > l1 {\n\t\t\t\t\t\ts = nextS\n\t\t\t\t\t\tt = lCandidate.offset - e.cur\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcv = next\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\n\t\t// Extend the 4-byte match as long as possible.\n\t\tl := e.matchlenLong(s+4, t+4, src) + 4\n\n\t\t// Extend backwards\n\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\t\tif nextEmit < s {\n\t\t\tif false {\n\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t} else {\n\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\tdst.n++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif debugDeflate {\n\t\t\tif t >= s {\n\t\t\t\tpanic(\"s-t\")\n\t\t\t}\n\t\t\tif (s - t) > maxMatchOffset {\n\t\t\t\tpanic(fmt.Sprintln(\"mmo\", t))\n\t\t\t}\n\t\t\tif l < baseMatchLength {\n\t\t\t\tpanic(\"bml\")\n\t\t\t}\n\t\t}\n\n\t\tdst.AddMatchLong(l, uint32(s-t-baseMatchOffset))\n\t\ts += l\n\t\tnextEmit = s\n\t\tif nextS >= s {\n\t\t\ts = nextS + 1\n\t\t}\n\n\t\tif s >= sLimit {\n\t\t\t// Index first pair after match end.\n\t\t\tif int(s+8) < len(src) {\n\t\t\t\tcv := load6432(src, s)\n\t\t\t\te.table[hashLen(cv, tableBits, hashShortBytes)] = tableEntry{offset: s + e.cur}\n\t\t\t\te.bTable[hash7(cv, tableBits)] = tableEntry{offset: s + e.cur}\n\t\t\t}\n\t\t\tgoto emitRemainder\n\t\t}\n\n\t\t// Store every 3rd hash in-between\n\t\tif true {\n\t\t\ti := nextS\n\t\t\tif i < s-1 {\n\t\t\t\tcv := load6432(src, i)\n\t\t\t\tt := tableEntry{offset: i + e.cur}\n\t\t\t\tt2 := tableEntry{offset: t.offset + 1}\n\t\t\t\te.bTable[hash7(cv, tableBits)] = t\n\t\t\t\te.bTable[hash7(cv>>8, tableBits)] = t2\n\t\t\t\te.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2\n\n\t\t\t\ti += 3\n\t\t\t\tfor ; i < s-1; i += 3 {\n\t\t\t\t\tcv := load6432(src, i)\n\t\t\t\t\tt := tableEntry{offset: i + e.cur}\n\t\t\t\t\tt2 := tableEntry{offset: t.offset + 1}\n\t\t\t\t\te.bTable[hash7(cv, tableBits)] = t\n\t\t\t\t\te.bTable[hash7(cv>>8, tableBits)] = t2\n\t\t\t\t\te.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We could immediately start working at s now, but to improve\n\t\t// compression we first update the hash table at s-1 and at s.\n\t\tx := load6432(src, s-1)\n\t\to := e.cur + s - 1\n\t\tprevHashS := hashLen(x, tableBits, hashShortBytes)\n\t\tprevHashL := hash7(x, tableBits)\n\t\te.table[prevHashS] = tableEntry{offset: o}\n\t\te.bTable[prevHashL] = tableEntry{offset: o}\n\t\tcv = x >> 8\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/level5.go",
    "content": "package flate\n\nimport \"fmt\"\n\ntype fastEncL5 struct {\n\tfastGen\n\ttable  [tableSize]tableEntry\n\tbTable [tableSize]tableEntryPrev\n}\n\nfunc (e *fastEncL5) Encode(dst *tokens, src []byte) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t\thashShortBytes         = 4\n\t)\n\tif debugDeflate && e.cur < 0 {\n\t\tpanic(fmt.Sprint(\"e.cur < 0: \", e.cur))\n\t}\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= bufferReset {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\tfor i := range e.bTable[:] {\n\t\t\t\te.bTable[i] = tableEntryPrev{}\n\t\t\t}\n\t\t\te.cur = maxMatchOffset\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - maxMatchOffset\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v <= minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.bTable[:] {\n\t\t\tv := e.bTable[i]\n\t\t\tif v.Cur.offset <= minOff {\n\t\t\t\tv.Cur.offset = 0\n\t\t\t\tv.Prev.offset = 0\n\t\t\t} else {\n\t\t\t\tv.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset\n\t\t\t\tif v.Prev.offset <= minOff {\n\t\t\t\t\tv.Prev.offset = 0\n\t\t\t\t} else {\n\t\t\t\t\tv.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset\n\t\t\t\t}\n\t\t\t}\n\t\t\te.bTable[i] = v\n\t\t}\n\t\te.cur = maxMatchOffset\n\t}\n\n\ts := e.addBlock(src)\n\n\t// This check isn't in the Snappy implementation, but there, the caller\n\t// instead of the callee handles this case.\n\tif len(src) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = uint16(len(src))\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tnextEmit := s\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int32(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load6432(src, s)\n\tfor {\n\t\tconst skipLog = 6\n\t\tconst doEvery = 1\n\n\t\tnextS := s\n\t\tvar l int32\n\t\tvar t int32\n\t\tfor {\n\t\t\tnextHashS := hashLen(cv, tableBits, hashShortBytes)\n\t\t\tnextHashL := hash7(cv, tableBits)\n\n\t\t\ts = nextS\n\t\t\tnextS = s + doEvery + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\t\t\t// Fetch a short+long candidate\n\t\t\tsCandidate := e.table[nextHashS]\n\t\t\tlCandidate := e.bTable[nextHashL]\n\t\t\tnext := load6432(src, nextS)\n\t\t\tentry := tableEntry{offset: s + e.cur}\n\t\t\te.table[nextHashS] = entry\n\t\t\teLong := &e.bTable[nextHashL]\n\t\t\teLong.Cur, eLong.Prev = entry, eLong.Cur\n\n\t\t\tnextHashS = hashLen(next, tableBits, hashShortBytes)\n\t\t\tnextHashL = hash7(next, tableBits)\n\n\t\t\tt = lCandidate.Cur.offset - e.cur\n\t\t\tif s-t < maxMatchOffset {\n\t\t\t\tif uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) {\n\t\t\t\t\t// Store the next match\n\t\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\n\t\t\t\t\tt2 := lCandidate.Prev.offset - e.cur\n\t\t\t\t\tif s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) {\n\t\t\t\t\t\tl = e.matchlen(s+4, t+4, src) + 4\n\t\t\t\t\t\tml1 := e.matchlen(s+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml1 > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\tl = ml1\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\tbreak\n\t\t\t\t}\n\t\t\t\tt = lCandidate.Prev.offset - e.cur\n\t\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) {\n\t\t\t\t\t// Store the next match\n\t\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tt = sCandidate.offset - e.cur\n\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) {\n\t\t\t\t// Found a 4 match...\n\t\t\t\tl = e.matchlen(s+4, t+4, src) + 4\n\t\t\t\tlCandidate = e.bTable[nextHashL]\n\t\t\t\t// Store the next match\n\n\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\n\t\t\t\t// If the next long is a candidate, use that...\n\t\t\t\tt2 := lCandidate.Cur.offset - e.cur\n\t\t\t\tif nextS-t2 < maxMatchOffset {\n\t\t\t\t\tif load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) {\n\t\t\t\t\t\tml := e.matchlen(nextS+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\ts = nextS\n\t\t\t\t\t\t\tl = ml\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\t// If the previous long is a candidate, use that...\n\t\t\t\t\tt2 = lCandidate.Prev.offset - e.cur\n\t\t\t\t\tif nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) {\n\t\t\t\t\t\tml := e.matchlen(nextS+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\ts = nextS\n\t\t\t\t\t\t\tl = ml\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}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcv = next\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\n\t\tif l == 0 {\n\t\t\t// Extend the 4-byte match as long as possible.\n\t\t\tl = e.matchlenLong(s+4, t+4, src) + 4\n\t\t} else if l == maxMatchLength {\n\t\t\tl += e.matchlenLong(s+l, t+l, src)\n\t\t}\n\n\t\t// Try to locate a better match by checking the end of best match...\n\t\tif sAt := s + l; l < 30 && sAt < sLimit {\n\t\t\t// Allow some bytes at the beginning to mismatch.\n\t\t\t// Sweet spot is 2/3 bytes depending on input.\n\t\t\t// 3 is only a little better when it is but sometimes a lot worse.\n\t\t\t// The skipped bytes are tested in Extend backwards,\n\t\t\t// and still picked up as part of the match if they do.\n\t\t\tconst skipBeginning = 2\n\t\t\teLong := e.bTable[hash7(load6432(src, sAt), tableBits)].Cur.offset\n\t\t\tt2 := eLong - e.cur - l + skipBeginning\n\t\t\ts2 := s + skipBeginning\n\t\t\toff := s2 - t2\n\t\t\tif t2 >= 0 && off < maxMatchOffset && off > 0 {\n\t\t\t\tif l2 := e.matchlenLong(s2, t2, src); l2 > l {\n\t\t\t\t\tt = t2\n\t\t\t\t\tl = l2\n\t\t\t\t\ts = s2\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Extend backwards\n\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\t\tif nextEmit < s {\n\t\t\tif false {\n\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t} else {\n\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\tdst.n++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif debugDeflate {\n\t\t\tif t >= s {\n\t\t\t\tpanic(fmt.Sprintln(\"s-t\", s, t))\n\t\t\t}\n\t\t\tif (s - t) > maxMatchOffset {\n\t\t\t\tpanic(fmt.Sprintln(\"mmo\", s-t))\n\t\t\t}\n\t\t\tif l < baseMatchLength {\n\t\t\t\tpanic(\"bml\")\n\t\t\t}\n\t\t}\n\n\t\tdst.AddMatchLong(l, uint32(s-t-baseMatchOffset))\n\t\ts += l\n\t\tnextEmit = s\n\t\tif nextS >= s {\n\t\t\ts = nextS + 1\n\t\t}\n\n\t\tif s >= sLimit {\n\t\t\tgoto emitRemainder\n\t\t}\n\n\t\t// Store every 3rd hash in-between.\n\t\tif true {\n\t\t\tconst hashEvery = 3\n\t\t\ti := s - l + 1\n\t\t\tif i < s-1 {\n\t\t\t\tcv := load6432(src, i)\n\t\t\t\tt := tableEntry{offset: i + e.cur}\n\t\t\t\te.table[hashLen(cv, tableBits, hashShortBytes)] = t\n\t\t\t\teLong := &e.bTable[hash7(cv, tableBits)]\n\t\t\t\teLong.Cur, eLong.Prev = t, eLong.Cur\n\n\t\t\t\t// Do an long at i+1\n\t\t\t\tcv >>= 8\n\t\t\t\tt = tableEntry{offset: t.offset + 1}\n\t\t\t\teLong = &e.bTable[hash7(cv, tableBits)]\n\t\t\t\teLong.Cur, eLong.Prev = t, eLong.Cur\n\n\t\t\t\t// We only have enough bits for a short entry at i+2\n\t\t\t\tcv >>= 8\n\t\t\t\tt = tableEntry{offset: t.offset + 1}\n\t\t\t\te.table[hashLen(cv, tableBits, hashShortBytes)] = t\n\n\t\t\t\t// Skip one - otherwise we risk hitting 's'\n\t\t\t\ti += 4\n\t\t\t\tfor ; i < s-1; i += hashEvery {\n\t\t\t\t\tcv := load6432(src, i)\n\t\t\t\t\tt := tableEntry{offset: i + e.cur}\n\t\t\t\t\tt2 := tableEntry{offset: t.offset + 1}\n\t\t\t\t\teLong := &e.bTable[hash7(cv, tableBits)]\n\t\t\t\t\teLong.Cur, eLong.Prev = t, eLong.Cur\n\t\t\t\t\te.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We could immediately start working at s now, but to improve\n\t\t// compression we first update the hash table at s-1 and at s.\n\t\tx := load6432(src, s-1)\n\t\to := e.cur + s - 1\n\t\tprevHashS := hashLen(x, tableBits, hashShortBytes)\n\t\tprevHashL := hash7(x, tableBits)\n\t\te.table[prevHashS] = tableEntry{offset: o}\n\t\teLong := &e.bTable[prevHashL]\n\t\teLong.Cur, eLong.Prev = tableEntry{offset: o}, eLong.Cur\n\t\tcv = x >> 8\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n\n// fastEncL5Window is a level 5 encoder,\n// but with a custom window size.\ntype fastEncL5Window struct {\n\thist      []byte\n\tcur       int32\n\tmaxOffset int32\n\ttable     [tableSize]tableEntry\n\tbTable    [tableSize]tableEntryPrev\n}\n\nfunc (e *fastEncL5Window) Encode(dst *tokens, src []byte) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t\thashShortBytes         = 4\n\t)\n\tmaxMatchOffset := e.maxOffset\n\tif debugDeflate && e.cur < 0 {\n\t\tpanic(fmt.Sprint(\"e.cur < 0: \", e.cur))\n\t}\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= bufferReset {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\tfor i := range e.bTable[:] {\n\t\t\t\te.bTable[i] = tableEntryPrev{}\n\t\t\t}\n\t\t\te.cur = maxMatchOffset\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - maxMatchOffset\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v <= minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.bTable[:] {\n\t\t\tv := e.bTable[i]\n\t\t\tif v.Cur.offset <= minOff {\n\t\t\t\tv.Cur.offset = 0\n\t\t\t\tv.Prev.offset = 0\n\t\t\t} else {\n\t\t\t\tv.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset\n\t\t\t\tif v.Prev.offset <= minOff {\n\t\t\t\t\tv.Prev.offset = 0\n\t\t\t\t} else {\n\t\t\t\t\tv.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset\n\t\t\t\t}\n\t\t\t}\n\t\t\te.bTable[i] = v\n\t\t}\n\t\te.cur = maxMatchOffset\n\t}\n\n\ts := e.addBlock(src)\n\n\t// This check isn't in the Snappy implementation, but there, the caller\n\t// instead of the callee handles this case.\n\tif len(src) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = uint16(len(src))\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tnextEmit := s\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int32(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load6432(src, s)\n\tfor {\n\t\tconst skipLog = 6\n\t\tconst doEvery = 1\n\n\t\tnextS := s\n\t\tvar l int32\n\t\tvar t int32\n\t\tfor {\n\t\t\tnextHashS := hashLen(cv, tableBits, hashShortBytes)\n\t\t\tnextHashL := hash7(cv, tableBits)\n\n\t\t\ts = nextS\n\t\t\tnextS = s + doEvery + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\t\t\t// Fetch a short+long candidate\n\t\t\tsCandidate := e.table[nextHashS]\n\t\t\tlCandidate := e.bTable[nextHashL]\n\t\t\tnext := load6432(src, nextS)\n\t\t\tentry := tableEntry{offset: s + e.cur}\n\t\t\te.table[nextHashS] = entry\n\t\t\teLong := &e.bTable[nextHashL]\n\t\t\teLong.Cur, eLong.Prev = entry, eLong.Cur\n\n\t\t\tnextHashS = hashLen(next, tableBits, hashShortBytes)\n\t\t\tnextHashL = hash7(next, tableBits)\n\n\t\t\tt = lCandidate.Cur.offset - e.cur\n\t\t\tif s-t < maxMatchOffset {\n\t\t\t\tif uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) {\n\t\t\t\t\t// Store the next match\n\t\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\n\t\t\t\t\tt2 := lCandidate.Prev.offset - e.cur\n\t\t\t\t\tif s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) {\n\t\t\t\t\t\tl = e.matchlen(s+4, t+4, src) + 4\n\t\t\t\t\t\tml1 := e.matchlen(s+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml1 > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\tl = ml1\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\tbreak\n\t\t\t\t}\n\t\t\t\tt = lCandidate.Prev.offset - e.cur\n\t\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) {\n\t\t\t\t\t// Store the next match\n\t\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tt = sCandidate.offset - e.cur\n\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) {\n\t\t\t\t// Found a 4 match...\n\t\t\t\tl = e.matchlen(s+4, t+4, src) + 4\n\t\t\t\tlCandidate = e.bTable[nextHashL]\n\t\t\t\t// Store the next match\n\n\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\n\t\t\t\t// If the next long is a candidate, use that...\n\t\t\t\tt2 := lCandidate.Cur.offset - e.cur\n\t\t\t\tif nextS-t2 < maxMatchOffset {\n\t\t\t\t\tif load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) {\n\t\t\t\t\t\tml := e.matchlen(nextS+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\ts = nextS\n\t\t\t\t\t\t\tl = ml\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\t// If the previous long is a candidate, use that...\n\t\t\t\t\tt2 = lCandidate.Prev.offset - e.cur\n\t\t\t\t\tif nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) {\n\t\t\t\t\t\tml := e.matchlen(nextS+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\ts = nextS\n\t\t\t\t\t\t\tl = ml\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}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcv = next\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\n\t\tif l == 0 {\n\t\t\t// Extend the 4-byte match as long as possible.\n\t\t\tl = e.matchlenLong(s+4, t+4, src) + 4\n\t\t} else if l == maxMatchLength {\n\t\t\tl += e.matchlenLong(s+l, t+l, src)\n\t\t}\n\n\t\t// Try to locate a better match by checking the end of best match...\n\t\tif sAt := s + l; l < 30 && sAt < sLimit {\n\t\t\t// Allow some bytes at the beginning to mismatch.\n\t\t\t// Sweet spot is 2/3 bytes depending on input.\n\t\t\t// 3 is only a little better when it is but sometimes a lot worse.\n\t\t\t// The skipped bytes are tested in Extend backwards,\n\t\t\t// and still picked up as part of the match if they do.\n\t\t\tconst skipBeginning = 2\n\t\t\teLong := e.bTable[hash7(load6432(src, sAt), tableBits)].Cur.offset\n\t\t\tt2 := eLong - e.cur - l + skipBeginning\n\t\t\ts2 := s + skipBeginning\n\t\t\toff := s2 - t2\n\t\t\tif t2 >= 0 && off < maxMatchOffset && off > 0 {\n\t\t\t\tif l2 := e.matchlenLong(s2, t2, src); l2 > l {\n\t\t\t\t\tt = t2\n\t\t\t\t\tl = l2\n\t\t\t\t\ts = s2\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Extend backwards\n\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\t\tif nextEmit < s {\n\t\t\tif false {\n\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t} else {\n\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\tdst.n++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif debugDeflate {\n\t\t\tif t >= s {\n\t\t\t\tpanic(fmt.Sprintln(\"s-t\", s, t))\n\t\t\t}\n\t\t\tif (s - t) > maxMatchOffset {\n\t\t\t\tpanic(fmt.Sprintln(\"mmo\", s-t))\n\t\t\t}\n\t\t\tif l < baseMatchLength {\n\t\t\t\tpanic(\"bml\")\n\t\t\t}\n\t\t}\n\n\t\tdst.AddMatchLong(l, uint32(s-t-baseMatchOffset))\n\t\ts += l\n\t\tnextEmit = s\n\t\tif nextS >= s {\n\t\t\ts = nextS + 1\n\t\t}\n\n\t\tif s >= sLimit {\n\t\t\tgoto emitRemainder\n\t\t}\n\n\t\t// Store every 3rd hash in-between.\n\t\tif true {\n\t\t\tconst hashEvery = 3\n\t\t\ti := s - l + 1\n\t\t\tif i < s-1 {\n\t\t\t\tcv := load6432(src, i)\n\t\t\t\tt := tableEntry{offset: i + e.cur}\n\t\t\t\te.table[hashLen(cv, tableBits, hashShortBytes)] = t\n\t\t\t\teLong := &e.bTable[hash7(cv, tableBits)]\n\t\t\t\teLong.Cur, eLong.Prev = t, eLong.Cur\n\n\t\t\t\t// Do an long at i+1\n\t\t\t\tcv >>= 8\n\t\t\t\tt = tableEntry{offset: t.offset + 1}\n\t\t\t\teLong = &e.bTable[hash7(cv, tableBits)]\n\t\t\t\teLong.Cur, eLong.Prev = t, eLong.Cur\n\n\t\t\t\t// We only have enough bits for a short entry at i+2\n\t\t\t\tcv >>= 8\n\t\t\t\tt = tableEntry{offset: t.offset + 1}\n\t\t\t\te.table[hashLen(cv, tableBits, hashShortBytes)] = t\n\n\t\t\t\t// Skip one - otherwise we risk hitting 's'\n\t\t\t\ti += 4\n\t\t\t\tfor ; i < s-1; i += hashEvery {\n\t\t\t\t\tcv := load6432(src, i)\n\t\t\t\t\tt := tableEntry{offset: i + e.cur}\n\t\t\t\t\tt2 := tableEntry{offset: t.offset + 1}\n\t\t\t\t\teLong := &e.bTable[hash7(cv, tableBits)]\n\t\t\t\t\teLong.Cur, eLong.Prev = t, eLong.Cur\n\t\t\t\t\te.table[hashLen(cv>>8, tableBits, hashShortBytes)] = t2\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We could immediately start working at s now, but to improve\n\t\t// compression we first update the hash table at s-1 and at s.\n\t\tx := load6432(src, s-1)\n\t\to := e.cur + s - 1\n\t\tprevHashS := hashLen(x, tableBits, hashShortBytes)\n\t\tprevHashL := hash7(x, tableBits)\n\t\te.table[prevHashS] = tableEntry{offset: o}\n\t\teLong := &e.bTable[prevHashL]\n\t\teLong.Cur, eLong.Prev = tableEntry{offset: o}, eLong.Cur\n\t\tcv = x >> 8\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n\n// Reset the encoding table.\nfunc (e *fastEncL5Window) Reset() {\n\t// We keep the same allocs, since we are compressing the same block sizes.\n\tif cap(e.hist) < allocHistory {\n\t\te.hist = make([]byte, 0, allocHistory)\n\t}\n\n\t// We offset current position so everything will be out of reach.\n\t// If we are above the buffer reset it will be cleared anyway since len(hist) == 0.\n\tif e.cur <= int32(bufferReset) {\n\t\te.cur += e.maxOffset + int32(len(e.hist))\n\t}\n\te.hist = e.hist[:0]\n}\n\nfunc (e *fastEncL5Window) addBlock(src []byte) int32 {\n\t// check if we have space already\n\tmaxMatchOffset := e.maxOffset\n\n\tif len(e.hist)+len(src) > cap(e.hist) {\n\t\tif cap(e.hist) == 0 {\n\t\t\te.hist = make([]byte, 0, allocHistory)\n\t\t} else {\n\t\t\tif cap(e.hist) < int(maxMatchOffset*2) {\n\t\t\t\tpanic(\"unexpected buffer size\")\n\t\t\t}\n\t\t\t// Move down\n\t\t\toffset := int32(len(e.hist)) - maxMatchOffset\n\t\t\tcopy(e.hist[0:maxMatchOffset], e.hist[offset:])\n\t\t\te.cur += offset\n\t\t\te.hist = e.hist[:maxMatchOffset]\n\t\t}\n\t}\n\ts := int32(len(e.hist))\n\te.hist = append(e.hist, src...)\n\treturn s\n}\n\n// matchlen will return the match length between offsets and t in src.\n// The maximum length returned is maxMatchLength - 4.\n// It is assumed that s > t, that t >=0 and s < len(src).\nfunc (e *fastEncL5Window) matchlen(s, t int32, src []byte) int32 {\n\tif debugDecode {\n\t\tif t >= s {\n\t\t\tpanic(fmt.Sprint(\"t >=s:\", t, s))\n\t\t}\n\t\tif int(s) >= len(src) {\n\t\t\tpanic(fmt.Sprint(\"s >= len(src):\", s, len(src)))\n\t\t}\n\t\tif t < 0 {\n\t\t\tpanic(fmt.Sprint(\"t < 0:\", t))\n\t\t}\n\t\tif s-t > e.maxOffset {\n\t\t\tpanic(fmt.Sprint(s, \"-\", t, \"(\", s-t, \") > maxMatchLength (\", maxMatchOffset, \")\"))\n\t\t}\n\t}\n\ts1 := int(s) + maxMatchLength - 4\n\tif s1 > len(src) {\n\t\ts1 = len(src)\n\t}\n\n\t// Extend the match to be as long as possible.\n\treturn int32(matchLen(src[s:s1], src[t:]))\n}\n\n// matchlenLong will return the match length between offsets and t in src.\n// It is assumed that s > t, that t >=0 and s < len(src).\nfunc (e *fastEncL5Window) matchlenLong(s, t int32, src []byte) int32 {\n\tif debugDeflate {\n\t\tif t >= s {\n\t\t\tpanic(fmt.Sprint(\"t >=s:\", t, s))\n\t\t}\n\t\tif int(s) >= len(src) {\n\t\t\tpanic(fmt.Sprint(\"s >= len(src):\", s, len(src)))\n\t\t}\n\t\tif t < 0 {\n\t\t\tpanic(fmt.Sprint(\"t < 0:\", t))\n\t\t}\n\t\tif s-t > e.maxOffset {\n\t\t\tpanic(fmt.Sprint(s, \"-\", t, \"(\", s-t, \") > maxMatchLength (\", maxMatchOffset, \")\"))\n\t\t}\n\t}\n\t// Extend the match to be as long as possible.\n\treturn int32(matchLen(src[s:], src[t:]))\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/level6.go",
    "content": "package flate\n\nimport \"fmt\"\n\ntype fastEncL6 struct {\n\tfastGen\n\ttable  [tableSize]tableEntry\n\tbTable [tableSize]tableEntryPrev\n}\n\nfunc (e *fastEncL6) Encode(dst *tokens, src []byte) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t\thashShortBytes         = 4\n\t)\n\tif debugDeflate && e.cur < 0 {\n\t\tpanic(fmt.Sprint(\"e.cur < 0: \", e.cur))\n\t}\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= bufferReset {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\tfor i := range e.bTable[:] {\n\t\t\t\te.bTable[i] = tableEntryPrev{}\n\t\t\t}\n\t\t\te.cur = maxMatchOffset\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - maxMatchOffset\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v <= minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + maxMatchOffset\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.bTable[:] {\n\t\t\tv := e.bTable[i]\n\t\t\tif v.Cur.offset <= minOff {\n\t\t\t\tv.Cur.offset = 0\n\t\t\t\tv.Prev.offset = 0\n\t\t\t} else {\n\t\t\t\tv.Cur.offset = v.Cur.offset - e.cur + maxMatchOffset\n\t\t\t\tif v.Prev.offset <= minOff {\n\t\t\t\t\tv.Prev.offset = 0\n\t\t\t\t} else {\n\t\t\t\t\tv.Prev.offset = v.Prev.offset - e.cur + maxMatchOffset\n\t\t\t\t}\n\t\t\t}\n\t\t\te.bTable[i] = v\n\t\t}\n\t\te.cur = maxMatchOffset\n\t}\n\n\ts := e.addBlock(src)\n\n\t// This check isn't in the Snappy implementation, but there, the caller\n\t// instead of the callee handles this case.\n\tif len(src) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = uint16(len(src))\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tnextEmit := s\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int32(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load6432(src, s)\n\t// Repeat MUST be > 1 and within range\n\trepeat := int32(1)\n\tfor {\n\t\tconst skipLog = 7\n\t\tconst doEvery = 1\n\n\t\tnextS := s\n\t\tvar l int32\n\t\tvar t int32\n\t\tfor {\n\t\t\tnextHashS := hashLen(cv, tableBits, hashShortBytes)\n\t\t\tnextHashL := hash7(cv, tableBits)\n\t\t\ts = nextS\n\t\t\tnextS = s + doEvery + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\t\t\t// Fetch a short+long candidate\n\t\t\tsCandidate := e.table[nextHashS]\n\t\t\tlCandidate := e.bTable[nextHashL]\n\t\t\tnext := load6432(src, nextS)\n\t\t\tentry := tableEntry{offset: s + e.cur}\n\t\t\te.table[nextHashS] = entry\n\t\t\teLong := &e.bTable[nextHashL]\n\t\t\teLong.Cur, eLong.Prev = entry, eLong.Cur\n\n\t\t\t// Calculate hashes of 'next'\n\t\t\tnextHashS = hashLen(next, tableBits, hashShortBytes)\n\t\t\tnextHashL = hash7(next, tableBits)\n\n\t\t\tt = lCandidate.Cur.offset - e.cur\n\t\t\tif s-t < maxMatchOffset {\n\t\t\t\tif uint32(cv) == load3232(src, lCandidate.Cur.offset-e.cur) {\n\t\t\t\t\t// Long candidate matches at least 4 bytes.\n\n\t\t\t\t\t// Store the next match\n\t\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\n\t\t\t\t\t// Check the previous long candidate as well.\n\t\t\t\t\tt2 := lCandidate.Prev.offset - e.cur\n\t\t\t\t\tif s-t2 < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) {\n\t\t\t\t\t\tl = e.matchlen(s+4, t+4, src) + 4\n\t\t\t\t\t\tml1 := e.matchlen(s+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml1 > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\tl = ml1\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\tbreak\n\t\t\t\t}\n\t\t\t\t// Current value did not match, but check if previous long value does.\n\t\t\t\tt = lCandidate.Prev.offset - e.cur\n\t\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, lCandidate.Prev.offset-e.cur) {\n\t\t\t\t\t// Store the next match\n\t\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tt = sCandidate.offset - e.cur\n\t\t\tif s-t < maxMatchOffset && uint32(cv) == load3232(src, sCandidate.offset-e.cur) {\n\t\t\t\t// Found a 4 match...\n\t\t\t\tl = e.matchlen(s+4, t+4, src) + 4\n\n\t\t\t\t// Look up next long candidate (at nextS)\n\t\t\t\tlCandidate = e.bTable[nextHashL]\n\n\t\t\t\t// Store the next match\n\t\t\t\te.table[nextHashS] = tableEntry{offset: nextS + e.cur}\n\t\t\t\teLong := &e.bTable[nextHashL]\n\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: nextS + e.cur}, eLong.Cur\n\n\t\t\t\t// Check repeat at s + repOff\n\t\t\t\tconst repOff = 1\n\t\t\t\tt2 := s - repeat + repOff\n\t\t\t\tif load3232(src, t2) == uint32(cv>>(8*repOff)) {\n\t\t\t\t\tml := e.matchlen(s+4+repOff, t2+4, src) + 4\n\t\t\t\t\tif ml > l {\n\t\t\t\t\t\tt = t2\n\t\t\t\t\t\tl = ml\n\t\t\t\t\t\ts += repOff\n\t\t\t\t\t\t// Not worth checking more.\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the next long is a candidate, use that...\n\t\t\t\tt2 = lCandidate.Cur.offset - e.cur\n\t\t\t\tif nextS-t2 < maxMatchOffset {\n\t\t\t\t\tif load3232(src, lCandidate.Cur.offset-e.cur) == uint32(next) {\n\t\t\t\t\t\tml := e.matchlen(nextS+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\ts = nextS\n\t\t\t\t\t\t\tl = ml\n\t\t\t\t\t\t\t// This is ok, but check previous as well.\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If the previous long is a candidate, use that...\n\t\t\t\t\tt2 = lCandidate.Prev.offset - e.cur\n\t\t\t\t\tif nextS-t2 < maxMatchOffset && load3232(src, lCandidate.Prev.offset-e.cur) == uint32(next) {\n\t\t\t\t\t\tml := e.matchlen(nextS+4, t2+4, src) + 4\n\t\t\t\t\t\tif ml > l {\n\t\t\t\t\t\t\tt = t2\n\t\t\t\t\t\t\ts = nextS\n\t\t\t\t\t\t\tl = ml\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}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcv = next\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\n\t\t// Extend the 4-byte match as long as possible.\n\t\tif l == 0 {\n\t\t\tl = e.matchlenLong(s+4, t+4, src) + 4\n\t\t} else if l == maxMatchLength {\n\t\t\tl += e.matchlenLong(s+l, t+l, src)\n\t\t}\n\n\t\t// Try to locate a better match by checking the end-of-match...\n\t\tif sAt := s + l; sAt < sLimit {\n\t\t\t// Allow some bytes at the beginning to mismatch.\n\t\t\t// Sweet spot is 2/3 bytes depending on input.\n\t\t\t// 3 is only a little better when it is but sometimes a lot worse.\n\t\t\t// The skipped bytes are tested in Extend backwards,\n\t\t\t// and still picked up as part of the match if they do.\n\t\t\tconst skipBeginning = 2\n\t\t\teLong := &e.bTable[hash7(load6432(src, sAt), tableBits)]\n\t\t\t// Test current\n\t\t\tt2 := eLong.Cur.offset - e.cur - l + skipBeginning\n\t\t\ts2 := s + skipBeginning\n\t\t\toff := s2 - t2\n\t\t\tif off < maxMatchOffset {\n\t\t\t\tif off > 0 && t2 >= 0 {\n\t\t\t\t\tif l2 := e.matchlenLong(s2, t2, src); l2 > l {\n\t\t\t\t\t\tt = t2\n\t\t\t\t\t\tl = l2\n\t\t\t\t\t\ts = s2\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Test next:\n\t\t\t\tt2 = eLong.Prev.offset - e.cur - l + skipBeginning\n\t\t\t\toff := s2 - t2\n\t\t\t\tif off > 0 && off < maxMatchOffset && t2 >= 0 {\n\t\t\t\t\tif l2 := e.matchlenLong(s2, t2, src); l2 > l {\n\t\t\t\t\t\tt = t2\n\t\t\t\t\t\tl = l2\n\t\t\t\t\t\ts = s2\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Extend backwards\n\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\t\tif nextEmit < s {\n\t\t\tif false {\n\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t} else {\n\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\tdst.n++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif false {\n\t\t\tif t >= s {\n\t\t\t\tpanic(fmt.Sprintln(\"s-t\", s, t))\n\t\t\t}\n\t\t\tif (s - t) > maxMatchOffset {\n\t\t\t\tpanic(fmt.Sprintln(\"mmo\", s-t))\n\t\t\t}\n\t\t\tif l < baseMatchLength {\n\t\t\t\tpanic(\"bml\")\n\t\t\t}\n\t\t}\n\n\t\tdst.AddMatchLong(l, uint32(s-t-baseMatchOffset))\n\t\trepeat = s - t\n\t\ts += l\n\t\tnextEmit = s\n\t\tif nextS >= s {\n\t\t\ts = nextS + 1\n\t\t}\n\n\t\tif s >= sLimit {\n\t\t\t// Index after match end.\n\t\t\tfor i := nextS + 1; i < int32(len(src))-8; i += 2 {\n\t\t\t\tcv := load6432(src, i)\n\t\t\t\te.table[hashLen(cv, tableBits, hashShortBytes)] = tableEntry{offset: i + e.cur}\n\t\t\t\teLong := &e.bTable[hash7(cv, tableBits)]\n\t\t\t\teLong.Cur, eLong.Prev = tableEntry{offset: i + e.cur}, eLong.Cur\n\t\t\t}\n\t\t\tgoto emitRemainder\n\t\t}\n\n\t\t// Store every long hash in-between and every second short.\n\t\tif true {\n\t\t\tfor i := nextS + 1; i < s-1; i += 2 {\n\t\t\t\tcv := load6432(src, i)\n\t\t\t\tt := tableEntry{offset: i + e.cur}\n\t\t\t\tt2 := tableEntry{offset: t.offset + 1}\n\t\t\t\teLong := &e.bTable[hash7(cv, tableBits)]\n\t\t\t\teLong2 := &e.bTable[hash7(cv>>8, tableBits)]\n\t\t\t\te.table[hashLen(cv, tableBits, hashShortBytes)] = t\n\t\t\t\teLong.Cur, eLong.Prev = t, eLong.Cur\n\t\t\t\teLong2.Cur, eLong2.Prev = t2, eLong2.Cur\n\t\t\t}\n\t\t}\n\n\t\t// We could immediately start working at s now, but to improve\n\t\t// compression we first update the hash table at s-1 and at s.\n\t\tcv = load6432(src, s)\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/matchlen_amd64.go",
    "content": "//go:build amd64 && !appengine && !noasm && gc\n// +build amd64,!appengine,!noasm,gc\n\n// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n\npackage flate\n\n// matchLen returns how many bytes match in a and b\n//\n// It assumes that:\n//\n//\tlen(a) <= len(b) and len(a) > 0\n//\n//go:noescape\nfunc matchLen(a []byte, b []byte) int\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/matchlen_amd64.s",
    "content": "// Copied from S2 implementation.\n\n//go:build !appengine && !noasm && gc && !noasm\n\n#include \"textflag.h\"\n\n// func matchLen(a []byte, b []byte) int\n// Requires: BMI\nTEXT ·matchLen(SB), NOSPLIT, $0-56\n\tMOVQ a_base+0(FP), AX\n\tMOVQ b_base+24(FP), CX\n\tMOVQ a_len+8(FP), DX\n\n\t// matchLen\n\tXORL SI, SI\n\tCMPL DX, $0x08\n\tJB   matchlen_match4_standalone\n\nmatchlen_loopback_standalone:\n\tMOVQ  (AX)(SI*1), BX\n\tXORQ  (CX)(SI*1), BX\n\tTESTQ BX, BX\n\tJZ    matchlen_loop_standalone\n\n#ifdef GOAMD64_v3\n\tTZCNTQ BX, BX\n#else\n\tBSFQ BX, BX\n#endif\n\tSARQ $0x03, BX\n\tLEAL (SI)(BX*1), SI\n\tJMP  gen_match_len_end\n\nmatchlen_loop_standalone:\n\tLEAL -8(DX), DX\n\tLEAL 8(SI), SI\n\tCMPL DX, $0x08\n\tJAE  matchlen_loopback_standalone\n\nmatchlen_match4_standalone:\n\tCMPL DX, $0x04\n\tJB   matchlen_match2_standalone\n\tMOVL (AX)(SI*1), BX\n\tCMPL (CX)(SI*1), BX\n\tJNE  matchlen_match2_standalone\n\tLEAL -4(DX), DX\n\tLEAL 4(SI), SI\n\nmatchlen_match2_standalone:\n\tCMPL DX, $0x02\n\tJB   matchlen_match1_standalone\n\tMOVW (AX)(SI*1), BX\n\tCMPW (CX)(SI*1), BX\n\tJNE  matchlen_match1_standalone\n\tLEAL -2(DX), DX\n\tLEAL 2(SI), SI\n\nmatchlen_match1_standalone:\n\tCMPL DX, $0x01\n\tJB   gen_match_len_end\n\tMOVB (AX)(SI*1), BL\n\tCMPB (CX)(SI*1), BL\n\tJNE  gen_match_len_end\n\tINCL SI\n\ngen_match_len_end:\n\tMOVQ SI, ret+48(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/matchlen_generic.go",
    "content": "//go:build !amd64 || appengine || !gc || noasm\n// +build !amd64 appengine !gc noasm\n\n// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n\npackage flate\n\nimport (\n\t\"encoding/binary\"\n\t\"math/bits\"\n)\n\n// matchLen returns the maximum common prefix length of a and b.\n// a must be the shortest of the two.\nfunc matchLen(a, b []byte) (n int) {\n\tfor ; len(a) >= 8 && len(b) >= 8; a, b = a[8:], b[8:] {\n\t\tdiff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b)\n\t\tif diff != 0 {\n\t\t\treturn n + bits.TrailingZeros64(diff)>>3\n\t\t}\n\t\tn += 8\n\t}\n\n\tfor i := range a {\n\t\tif a[i] != b[i] {\n\t\t\tbreak\n\t\t}\n\t\tn++\n\t}\n\treturn n\n\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/regmask_amd64.go",
    "content": "package flate\n\nconst (\n\t// Masks for shifts with register sizes of the shift value.\n\t// This can be used to work around the x86 design of shifting by mod register size.\n\t// It can be used when a variable shift is always smaller than the register size.\n\n\t// reg8SizeMaskX - shift value is 8 bits, shifted is X\n\treg8SizeMask8  = 7\n\treg8SizeMask16 = 15\n\treg8SizeMask32 = 31\n\treg8SizeMask64 = 63\n\n\t// reg16SizeMaskX - shift value is 16 bits, shifted is X\n\treg16SizeMask8  = reg8SizeMask8\n\treg16SizeMask16 = reg8SizeMask16\n\treg16SizeMask32 = reg8SizeMask32\n\treg16SizeMask64 = reg8SizeMask64\n\n\t// reg32SizeMaskX - shift value is 32 bits, shifted is X\n\treg32SizeMask8  = reg8SizeMask8\n\treg32SizeMask16 = reg8SizeMask16\n\treg32SizeMask32 = reg8SizeMask32\n\treg32SizeMask64 = reg8SizeMask64\n\n\t// reg64SizeMaskX - shift value is 64 bits, shifted is X\n\treg64SizeMask8  = reg8SizeMask8\n\treg64SizeMask16 = reg8SizeMask16\n\treg64SizeMask32 = reg8SizeMask32\n\treg64SizeMask64 = reg8SizeMask64\n\n\t// regSizeMaskUintX - shift value is uint, shifted is X\n\tregSizeMaskUint8  = reg8SizeMask8\n\tregSizeMaskUint16 = reg8SizeMask16\n\tregSizeMaskUint32 = reg8SizeMask32\n\tregSizeMaskUint64 = reg8SizeMask64\n)\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/regmask_other.go",
    "content": "//go:build !amd64\n// +build !amd64\n\npackage flate\n\nconst (\n\t// Masks for shifts with register sizes of the shift value.\n\t// This can be used to work around the x86 design of shifting by mod register size.\n\t// It can be used when a variable shift is always smaller than the register size.\n\n\t// reg8SizeMaskX - shift value is 8 bits, shifted is X\n\treg8SizeMask8  = 0xff\n\treg8SizeMask16 = 0xff\n\treg8SizeMask32 = 0xff\n\treg8SizeMask64 = 0xff\n\n\t// reg16SizeMaskX - shift value is 16 bits, shifted is X\n\treg16SizeMask8  = 0xffff\n\treg16SizeMask16 = 0xffff\n\treg16SizeMask32 = 0xffff\n\treg16SizeMask64 = 0xffff\n\n\t// reg32SizeMaskX - shift value is 32 bits, shifted is X\n\treg32SizeMask8  = 0xffffffff\n\treg32SizeMask16 = 0xffffffff\n\treg32SizeMask32 = 0xffffffff\n\treg32SizeMask64 = 0xffffffff\n\n\t// reg64SizeMaskX - shift value is 64 bits, shifted is X\n\treg64SizeMask8  = 0xffffffffffffffff\n\treg64SizeMask16 = 0xffffffffffffffff\n\treg64SizeMask32 = 0xffffffffffffffff\n\treg64SizeMask64 = 0xffffffffffffffff\n\n\t// regSizeMaskUintX - shift value is uint, shifted is X\n\tregSizeMaskUint8  = ^uint(0)\n\tregSizeMaskUint16 = ^uint(0)\n\tregSizeMaskUint32 = ^uint(0)\n\tregSizeMaskUint64 = ^uint(0)\n)\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/stateless.go",
    "content": "package flate\n\nimport (\n\t\"io\"\n\t\"math\"\n\t\"sync\"\n)\n\nconst (\n\tmaxStatelessBlock = math.MaxInt16\n\t// dictionary will be taken from maxStatelessBlock, so limit it.\n\tmaxStatelessDict = 8 << 10\n\n\tslTableBits  = 13\n\tslTableSize  = 1 << slTableBits\n\tslTableShift = 32 - slTableBits\n)\n\ntype statelessWriter struct {\n\tdst    io.Writer\n\tclosed bool\n}\n\nfunc (s *statelessWriter) Close() error {\n\tif s.closed {\n\t\treturn nil\n\t}\n\ts.closed = true\n\t// Emit EOF block\n\treturn StatelessDeflate(s.dst, nil, true, nil)\n}\n\nfunc (s *statelessWriter) Write(p []byte) (n int, err error) {\n\terr = StatelessDeflate(s.dst, p, false, nil)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn len(p), nil\n}\n\nfunc (s *statelessWriter) Reset(w io.Writer) {\n\ts.dst = w\n\ts.closed = false\n}\n\n// NewStatelessWriter will do compression but without maintaining any state\n// between Write calls.\n// There will be no memory kept between Write calls,\n// but compression and speed will be suboptimal.\n// Because of this, the size of actual Write calls will affect output size.\nfunc NewStatelessWriter(dst io.Writer) io.WriteCloser {\n\treturn &statelessWriter{dst: dst}\n}\n\n// bitWriterPool contains bit writers that can be reused.\nvar bitWriterPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn newHuffmanBitWriter(nil)\n\t},\n}\n\n// StatelessDeflate allows compressing directly to a Writer without retaining state.\n// When returning everything will be flushed.\n// Up to 8KB of an optional dictionary can be given which is presumed to precede the block.\n// Longer dictionaries will be truncated and will still produce valid output.\n// Sending nil dictionary is perfectly fine.\nfunc StatelessDeflate(out io.Writer, in []byte, eof bool, dict []byte) error {\n\tvar dst tokens\n\tbw := bitWriterPool.Get().(*huffmanBitWriter)\n\tbw.reset(out)\n\tdefer func() {\n\t\t// don't keep a reference to our output\n\t\tbw.reset(nil)\n\t\tbitWriterPool.Put(bw)\n\t}()\n\tif eof && len(in) == 0 {\n\t\t// Just write an EOF block.\n\t\t// Could be faster...\n\t\tbw.writeStoredHeader(0, true)\n\t\tbw.flush()\n\t\treturn bw.err\n\t}\n\n\t// Truncate dict\n\tif len(dict) > maxStatelessDict {\n\t\tdict = dict[len(dict)-maxStatelessDict:]\n\t}\n\n\t// For subsequent loops, keep shallow dict reference to avoid alloc+copy.\n\tvar inDict []byte\n\n\tfor len(in) > 0 {\n\t\ttodo := in\n\t\tif len(inDict) > 0 {\n\t\t\tif len(todo) > maxStatelessBlock-maxStatelessDict {\n\t\t\t\ttodo = todo[:maxStatelessBlock-maxStatelessDict]\n\t\t\t}\n\t\t} else if len(todo) > maxStatelessBlock-len(dict) {\n\t\t\ttodo = todo[:maxStatelessBlock-len(dict)]\n\t\t}\n\t\tinOrg := in\n\t\tin = in[len(todo):]\n\t\tuncompressed := todo\n\t\tif len(dict) > 0 {\n\t\t\t// combine dict and source\n\t\t\tbufLen := len(todo) + len(dict)\n\t\t\tcombined := make([]byte, bufLen)\n\t\t\tcopy(combined, dict)\n\t\t\tcopy(combined[len(dict):], todo)\n\t\t\ttodo = combined\n\t\t}\n\t\t// Compress\n\t\tif len(inDict) == 0 {\n\t\t\tstatelessEnc(&dst, todo, int16(len(dict)))\n\t\t} else {\n\t\t\tstatelessEnc(&dst, inDict[:maxStatelessDict+len(todo)], maxStatelessDict)\n\t\t}\n\t\tisEof := eof && len(in) == 0\n\n\t\tif dst.n == 0 {\n\t\t\tbw.writeStoredHeader(len(uncompressed), isEof)\n\t\t\tif bw.err != nil {\n\t\t\t\treturn bw.err\n\t\t\t}\n\t\t\tbw.writeBytes(uncompressed)\n\t\t} else if int(dst.n) > len(uncompressed)-len(uncompressed)>>4 {\n\t\t\t// If we removed less than 1/16th, huffman compress the block.\n\t\t\tbw.writeBlockHuff(isEof, uncompressed, len(in) == 0)\n\t\t} else {\n\t\t\tbw.writeBlockDynamic(&dst, isEof, uncompressed, len(in) == 0)\n\t\t}\n\t\tif len(in) > 0 {\n\t\t\t// Retain a dict if we have more\n\t\t\tinDict = inOrg[len(uncompressed)-maxStatelessDict:]\n\t\t\tdict = nil\n\t\t\tdst.Reset()\n\t\t}\n\t\tif bw.err != nil {\n\t\t\treturn bw.err\n\t\t}\n\t}\n\tif !eof {\n\t\t// Align, only a stored block can do that.\n\t\tbw.writeStoredHeader(0, false)\n\t}\n\tbw.flush()\n\treturn bw.err\n}\n\nfunc hashSL(u uint32) uint32 {\n\treturn (u * 0x1e35a7bd) >> slTableShift\n}\n\nfunc load3216(b []byte, i int16) uint32 {\n\t// Help the compiler eliminate bounds checks on the read so it can be done in a single read.\n\tb = b[i:]\n\tb = b[:4]\n\treturn uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n}\n\nfunc load6416(b []byte, i int16) uint64 {\n\t// Help the compiler eliminate bounds checks on the read so it can be done in a single read.\n\tb = b[i:]\n\tb = b[:8]\n\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n}\n\nfunc statelessEnc(dst *tokens, src []byte, startAt int16) {\n\tconst (\n\t\tinputMargin            = 12 - 1\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t)\n\n\ttype tableEntry struct {\n\t\toffset int16\n\t}\n\n\tvar table [slTableSize]tableEntry\n\n\t// This check isn't in the Snappy implementation, but there, the caller\n\t// instead of the callee handles this case.\n\tif len(src)-int(startAt) < minNonLiteralBlockSize {\n\t\t// We do not fill the token table.\n\t\t// This will be picked up by caller.\n\t\tdst.n = 0\n\t\treturn\n\t}\n\t// Index until startAt\n\tif startAt > 0 {\n\t\tcv := load3232(src, 0)\n\t\tfor i := int16(0); i < startAt; i++ {\n\t\t\ttable[hashSL(cv)] = tableEntry{offset: i}\n\t\t\tcv = (cv >> 8) | (uint32(src[i+4]) << 24)\n\t\t}\n\t}\n\n\ts := startAt + 1\n\tnextEmit := startAt\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := int16(len(src) - inputMargin)\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tcv := load3216(src, s)\n\n\tfor {\n\t\tconst skipLog = 5\n\t\tconst doEvery = 2\n\n\t\tnextS := s\n\t\tvar candidate tableEntry\n\t\tfor {\n\t\t\tnextHash := hashSL(cv)\n\t\t\tcandidate = table[nextHash]\n\t\t\tnextS = s + doEvery + (s-nextEmit)>>skipLog\n\t\t\tif nextS > sLimit || nextS <= 0 {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\n\t\t\tnow := load6416(src, nextS)\n\t\t\ttable[nextHash] = tableEntry{offset: s}\n\t\t\tnextHash = hashSL(uint32(now))\n\n\t\t\tif cv == load3216(src, candidate.offset) {\n\t\t\t\ttable[nextHash] = tableEntry{offset: nextS}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Do one right away...\n\t\t\tcv = uint32(now)\n\t\t\ts = nextS\n\t\t\tnextS++\n\t\t\tcandidate = table[nextHash]\n\t\t\tnow >>= 8\n\t\t\ttable[nextHash] = tableEntry{offset: s}\n\n\t\t\tif cv == load3216(src, candidate.offset) {\n\t\t\t\ttable[nextHash] = tableEntry{offset: nextS}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcv = uint32(now)\n\t\t\ts = nextS\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\t\tfor {\n\t\t\t// Invariant: we have a 4-byte match at s, and no need to emit any\n\t\t\t// literal bytes prior to s.\n\n\t\t\t// Extend the 4-byte match as long as possible.\n\t\t\tt := candidate.offset\n\t\t\tl := int16(matchLen(src[s+4:], src[t+4:]) + 4)\n\n\t\t\t// Extend backwards\n\t\t\tfor t > 0 && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\t\ts--\n\t\t\t\tt--\n\t\t\t\tl++\n\t\t\t}\n\t\t\tif nextEmit < s {\n\t\t\t\tif false {\n\t\t\t\t\temitLiteral(dst, src[nextEmit:s])\n\t\t\t\t} else {\n\t\t\t\t\tfor _, v := range src[nextEmit:s] {\n\t\t\t\t\t\tdst.tokens[dst.n] = token(v)\n\t\t\t\t\t\tdst.litHist[v]++\n\t\t\t\t\t\tdst.n++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Save the match found\n\t\t\tdst.AddMatchLong(int32(l), uint32(s-t-baseMatchOffset))\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif nextS >= s {\n\t\t\t\ts = nextS + 1\n\t\t\t}\n\t\t\tif s >= sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\n\t\t\t// We could immediately start working at s now, but to improve\n\t\t\t// compression we first update the hash table at s-2 and at s. If\n\t\t\t// another emitCopy is not our next move, also calculate nextHash\n\t\t\t// at s+1. At least on GOARCH=amd64, these three hash calculations\n\t\t\t// are faster as one load64 call (with some shifts) instead of\n\t\t\t// three load32 calls.\n\t\t\tx := load6416(src, s-2)\n\t\t\to := s - 2\n\t\t\tprevHash := hashSL(uint32(x))\n\t\t\ttable[prevHash] = tableEntry{offset: o}\n\t\t\tx >>= 16\n\t\t\tcurrHash := hashSL(uint32(x))\n\t\t\tcandidate = table[currHash]\n\t\t\ttable[currHash] = tableEntry{offset: o + 2}\n\n\t\t\tif uint32(x) != load3216(src, candidate.offset) {\n\t\t\t\tcv = uint32(x >> 8)\n\t\t\t\ts++\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\nemitRemainder:\n\tif int(nextEmit) < len(src) {\n\t\t// If nothing was added, don't encode literals.\n\t\tif dst.n == 0 {\n\t\t\treturn\n\t\t}\n\t\temitLiteral(dst, src[nextEmit:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/flate/token.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage flate\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n)\n\nconst (\n\t// bits 0-16  \txoffset = offset - MIN_OFFSET_SIZE, or literal - 16 bits\n\t// bits 16-22\toffsetcode - 5 bits\n\t// bits 22-30   xlength = length - MIN_MATCH_LENGTH - 8 bits\n\t// bits 30-32   type   0 = literal  1=EOF  2=Match   3=Unused - 2 bits\n\tlengthShift         = 22\n\toffsetMask          = 1<<lengthShift - 1\n\ttypeMask            = 3 << 30\n\tliteralType         = 0 << 30\n\tmatchType           = 1 << 30\n\tmatchOffsetOnlyMask = 0xffff\n)\n\n// The length code for length X (MIN_MATCH_LENGTH <= X <= MAX_MATCH_LENGTH)\n// is lengthCodes[length - MIN_MATCH_LENGTH]\nvar lengthCodes = [256]uint8{\n\t0, 1, 2, 3, 4, 5, 6, 7, 8, 8,\n\t9, 9, 10, 10, 11, 11, 12, 12, 12, 12,\n\t13, 13, 13, 13, 14, 14, 14, 14, 15, 15,\n\t15, 15, 16, 16, 16, 16, 16, 16, 16, 16,\n\t17, 17, 17, 17, 17, 17, 17, 17, 18, 18,\n\t18, 18, 18, 18, 18, 18, 19, 19, 19, 19,\n\t19, 19, 19, 19, 20, 20, 20, 20, 20, 20,\n\t20, 20, 20, 20, 20, 20, 20, 20, 20, 20,\n\t21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n\t21, 21, 21, 21, 21, 21, 22, 22, 22, 22,\n\t22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n\t22, 22, 23, 23, 23, 23, 23, 23, 23, 23,\n\t23, 23, 23, 23, 23, 23, 23, 23, 24, 24,\n\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n\t25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n\t25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n\t25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n\t25, 25, 26, 26, 26, 26, 26, 26, 26, 26,\n\t26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n\t26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n\t26, 26, 26, 26, 27, 27, 27, 27, 27, 27,\n\t27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n\t27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n\t27, 27, 27, 27, 27, 28,\n}\n\n// lengthCodes1 is length codes, but starting at 1.\nvar lengthCodes1 = [256]uint8{\n\t1, 2, 3, 4, 5, 6, 7, 8, 9, 9,\n\t10, 10, 11, 11, 12, 12, 13, 13, 13, 13,\n\t14, 14, 14, 14, 15, 15, 15, 15, 16, 16,\n\t16, 16, 17, 17, 17, 17, 17, 17, 17, 17,\n\t18, 18, 18, 18, 18, 18, 18, 18, 19, 19,\n\t19, 19, 19, 19, 19, 19, 20, 20, 20, 20,\n\t20, 20, 20, 20, 21, 21, 21, 21, 21, 21,\n\t21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n\t22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n\t22, 22, 22, 22, 22, 22, 23, 23, 23, 23,\n\t23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n\t23, 23, 24, 24, 24, 24, 24, 24, 24, 24,\n\t24, 24, 24, 24, 24, 24, 24, 24, 25, 25,\n\t25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n\t25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n\t25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n\t26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n\t26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n\t26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n\t26, 26, 27, 27, 27, 27, 27, 27, 27, 27,\n\t27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n\t27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n\t27, 27, 27, 27, 28, 28, 28, 28, 28, 28,\n\t28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n\t28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n\t28, 28, 28, 28, 28, 29,\n}\n\nvar offsetCodes = [256]uint32{\n\t0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,\n\t8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,\n\t10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n\t11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n\t12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,\n\t12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,\n\t13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n\t13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,\n\t14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n\t14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n\t14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n\t14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n\t15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n\t15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n\t15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n\t15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,\n}\n\n// offsetCodes14 are offsetCodes, but with 14 added.\nvar offsetCodes14 = [256]uint32{\n\t14, 15, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21,\n\t22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,\n\t24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n\t25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,\n\t26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n\t26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n\t27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n\t27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,\n\t28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n\t28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n\t28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n\t28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n\t29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,\n\t29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,\n\t29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,\n\t29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,\n}\n\ntype token uint32\n\ntype tokens struct {\n\textraHist [32]uint16  // codes 256->maxnumlit\n\toffHist   [32]uint16  // offset codes\n\tlitHist   [256]uint16 // codes 0->255\n\tnFilled   int\n\tn         uint16 // Must be able to contain maxStoreBlockSize\n\ttokens    [maxStoreBlockSize + 1]token\n}\n\nfunc (t *tokens) Reset() {\n\tif t.n == 0 {\n\t\treturn\n\t}\n\tt.n = 0\n\tt.nFilled = 0\n\tfor i := range t.litHist[:] {\n\t\tt.litHist[i] = 0\n\t}\n\tfor i := range t.extraHist[:] {\n\t\tt.extraHist[i] = 0\n\t}\n\tfor i := range t.offHist[:] {\n\t\tt.offHist[i] = 0\n\t}\n}\n\nfunc (t *tokens) Fill() {\n\tif t.n == 0 {\n\t\treturn\n\t}\n\tfor i, v := range t.litHist[:] {\n\t\tif v == 0 {\n\t\t\tt.litHist[i] = 1\n\t\t\tt.nFilled++\n\t\t}\n\t}\n\tfor i, v := range t.extraHist[:literalCount-256] {\n\t\tif v == 0 {\n\t\t\tt.nFilled++\n\t\t\tt.extraHist[i] = 1\n\t\t}\n\t}\n\tfor i, v := range t.offHist[:offsetCodeCount] {\n\t\tif v == 0 {\n\t\t\tt.offHist[i] = 1\n\t\t}\n\t}\n}\n\nfunc indexTokens(in []token) tokens {\n\tvar t tokens\n\tt.indexTokens(in)\n\treturn t\n}\n\nfunc (t *tokens) indexTokens(in []token) {\n\tt.Reset()\n\tfor _, tok := range in {\n\t\tif tok < matchType {\n\t\t\tt.AddLiteral(tok.literal())\n\t\t\tcontinue\n\t\t}\n\t\tt.AddMatch(uint32(tok.length()), tok.offset()&matchOffsetOnlyMask)\n\t}\n}\n\n// emitLiteral writes a literal chunk and returns the number of bytes written.\nfunc emitLiteral(dst *tokens, lit []byte) {\n\tfor _, v := range lit {\n\t\tdst.tokens[dst.n] = token(v)\n\t\tdst.litHist[v]++\n\t\tdst.n++\n\t}\n}\n\nfunc (t *tokens) AddLiteral(lit byte) {\n\tt.tokens[t.n] = token(lit)\n\tt.litHist[lit]++\n\tt.n++\n}\n\n// from https://stackoverflow.com/a/28730362\nfunc mFastLog2(val float32) float32 {\n\tux := int32(math.Float32bits(val))\n\tlog2 := (float32)(((ux >> 23) & 255) - 128)\n\tux &= -0x7f800001\n\tux += 127 << 23\n\tuval := math.Float32frombits(uint32(ux))\n\tlog2 += ((-0.34484843)*uval+2.02466578)*uval - 0.67487759\n\treturn log2\n}\n\n// EstimatedBits will return an minimum size estimated by an *optimal*\n// compression of the block.\n// The size of the block\nfunc (t *tokens) EstimatedBits() int {\n\tshannon := float32(0)\n\tbits := int(0)\n\tnMatches := 0\n\ttotal := int(t.n) + t.nFilled\n\tif total > 0 {\n\t\tinvTotal := 1.0 / float32(total)\n\t\tfor _, v := range t.litHist[:] {\n\t\t\tif v > 0 {\n\t\t\t\tn := float32(v)\n\t\t\t\tshannon += atLeastOne(-mFastLog2(n*invTotal)) * n\n\t\t\t}\n\t\t}\n\t\t// Just add 15 for EOB\n\t\tshannon += 15\n\t\tfor i, v := range t.extraHist[1 : literalCount-256] {\n\t\t\tif v > 0 {\n\t\t\t\tn := float32(v)\n\t\t\t\tshannon += atLeastOne(-mFastLog2(n*invTotal)) * n\n\t\t\t\tbits += int(lengthExtraBits[i&31]) * int(v)\n\t\t\t\tnMatches += int(v)\n\t\t\t}\n\t\t}\n\t}\n\tif nMatches > 0 {\n\t\tinvTotal := 1.0 / float32(nMatches)\n\t\tfor i, v := range t.offHist[:offsetCodeCount] {\n\t\t\tif v > 0 {\n\t\t\t\tn := float32(v)\n\t\t\t\tshannon += atLeastOne(-mFastLog2(n*invTotal)) * n\n\t\t\t\tbits += int(offsetExtraBits[i&31]) * int(v)\n\t\t\t}\n\t\t}\n\t}\n\treturn int(shannon) + bits\n}\n\n// AddMatch adds a match to the tokens.\n// This function is very sensitive to inlining and right on the border.\nfunc (t *tokens) AddMatch(xlength uint32, xoffset uint32) {\n\tif debugDeflate {\n\t\tif xlength >= maxMatchLength+baseMatchLength {\n\t\t\tpanic(fmt.Errorf(\"invalid length: %v\", xlength))\n\t\t}\n\t\tif xoffset >= maxMatchOffset+baseMatchOffset {\n\t\t\tpanic(fmt.Errorf(\"invalid offset: %v\", xoffset))\n\t\t}\n\t}\n\toCode := offsetCode(xoffset)\n\txoffset |= oCode << 16\n\n\tt.extraHist[lengthCodes1[uint8(xlength)]]++\n\tt.offHist[oCode&31]++\n\tt.tokens[t.n] = token(matchType | xlength<<lengthShift | xoffset)\n\tt.n++\n}\n\n// AddMatchLong adds a match to the tokens, potentially longer than max match length.\n// Length should NOT have the base subtracted, only offset should.\nfunc (t *tokens) AddMatchLong(xlength int32, xoffset uint32) {\n\tif debugDeflate {\n\t\tif xoffset >= maxMatchOffset+baseMatchOffset {\n\t\t\tpanic(fmt.Errorf(\"invalid offset: %v\", xoffset))\n\t\t}\n\t}\n\toc := offsetCode(xoffset)\n\txoffset |= oc << 16\n\tfor xlength > 0 {\n\t\txl := xlength\n\t\tif xl > 258 {\n\t\t\t// We need to have at least baseMatchLength left over for next loop.\n\t\t\tif xl > 258+baseMatchLength {\n\t\t\t\txl = 258\n\t\t\t} else {\n\t\t\t\txl = 258 - baseMatchLength\n\t\t\t}\n\t\t}\n\t\txlength -= xl\n\t\txl -= baseMatchLength\n\t\tt.extraHist[lengthCodes1[uint8(xl)]]++\n\t\tt.offHist[oc&31]++\n\t\tt.tokens[t.n] = token(matchType | uint32(xl)<<lengthShift | xoffset)\n\t\tt.n++\n\t}\n}\n\nfunc (t *tokens) AddEOB() {\n\tt.tokens[t.n] = token(endBlockMarker)\n\tt.extraHist[0]++\n\tt.n++\n}\n\nfunc (t *tokens) Slice() []token {\n\treturn t.tokens[:t.n]\n}\n\n// VarInt returns the tokens as varint encoded bytes.\nfunc (t *tokens) VarInt() []byte {\n\tvar b = make([]byte, binary.MaxVarintLen32*int(t.n))\n\tvar off int\n\tfor _, v := range t.tokens[:t.n] {\n\t\toff += binary.PutUvarint(b[off:], uint64(v))\n\t}\n\treturn b[:off]\n}\n\n// FromVarInt restores t to the varint encoded tokens provided.\n// Any data in t is removed.\nfunc (t *tokens) FromVarInt(b []byte) error {\n\tvar buf = bytes.NewReader(b)\n\tvar toks []token\n\tfor {\n\t\tr, err := binary.ReadUvarint(buf)\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttoks = append(toks, token(r))\n\t}\n\tt.indexTokens(toks)\n\treturn nil\n}\n\n// Returns the type of a token\nfunc (t token) typ() uint32 { return uint32(t) & typeMask }\n\n// Returns the literal of a literal token\nfunc (t token) literal() uint8 { return uint8(t) }\n\n// Returns the extra offset of a match token\nfunc (t token) offset() uint32 { return uint32(t) & offsetMask }\n\nfunc (t token) length() uint8 { return uint8(t >> lengthShift) }\n\n// Convert length to code.\nfunc lengthCode(len uint8) uint8 { return lengthCodes[len] }\n\n// Returns the offset code corresponding to a specific offset\nfunc offsetCode(off uint32) uint32 {\n\tif false {\n\t\tif off < uint32(len(offsetCodes)) {\n\t\t\treturn offsetCodes[off&255]\n\t\t} else if off>>7 < uint32(len(offsetCodes)) {\n\t\t\treturn offsetCodes[(off>>7)&255] + 14\n\t\t} else {\n\t\t\treturn offsetCodes[(off>>14)&255] + 28\n\t\t}\n\t}\n\tif off < uint32(len(offsetCodes)) {\n\t\treturn offsetCodes[uint8(off)]\n\t}\n\treturn offsetCodes14[uint8(off>>7)]\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/fse/README.md",
    "content": "# Finite State Entropy\r\n\r\nThis package provides Finite State Entropy encoding and decoding.\r\n            \r\nFinite State Entropy (also referenced as [tANS](https://en.wikipedia.org/wiki/Asymmetric_numeral_systems#tANS)) \r\nencoding provides a fast near-optimal symbol encoding/decoding\r\nfor byte blocks as implemented in [zstandard](https://github.com/facebook/zstd).\r\n\r\nThis can be used for compressing input with a lot of similar input values to the smallest number of bytes.\r\nThis does not perform any multi-byte [dictionary coding](https://en.wikipedia.org/wiki/Dictionary_coder) as LZ coders,\r\nbut it can be used as a secondary step to compressors (like Snappy) that does not do entropy encoding. \r\n\r\n* [Godoc documentation](https://godoc.org/github.com/klauspost/compress/fse)\r\n\r\n## News\r\n\r\n * Feb 2018: First implementation released. Consider this beta software for now.\r\n\r\n# Usage\r\n\r\nThis package provides a low level interface that allows to compress single independent blocks. \r\n\r\nEach block is separate, and there is no built in integrity checks. \r\nThis means that the caller should keep track of block sizes and also do checksums if needed.  \r\n\r\nCompressing a block is done via the [`Compress`](https://godoc.org/github.com/klauspost/compress/fse#Compress) function.\r\nYou must provide input and will receive the output and maybe an error.\r\n\r\nThese error values can be returned:\r\n\r\n| Error               | Description                                                                 |\r\n|---------------------|-----------------------------------------------------------------------------|\r\n| `<nil>`             | Everything ok, output is returned                                           |\r\n| `ErrIncompressible` | Returned when input is judged to be too hard to compress                    |\r\n| `ErrUseRLE`         | Returned from the compressor when the input is a single byte value repeated |\r\n| `(error)`           | An internal error occurred.                                                 |\r\n\r\nAs can be seen above there are errors that will be returned even under normal operation so it is important to handle these.\r\n\r\nTo reduce allocations you can provide a [`Scratch`](https://godoc.org/github.com/klauspost/compress/fse#Scratch) object \r\nthat can be re-used for successive calls. Both compression and decompression accepts a `Scratch` object, and the same \r\nobject can be used for both.   \r\n\r\nBe aware, that when re-using a `Scratch` object that the *output* buffer is also re-used, so if you are still using this\r\nyou must set the `Out` field in the scratch to nil. The same buffer is used for compression and decompression output.\r\n\r\nDecompressing is done by calling the [`Decompress`](https://godoc.org/github.com/klauspost/compress/fse#Decompress) function.\r\nYou must provide the output from the compression stage, at exactly the size you got back. If you receive an error back\r\nyour input was likely corrupted. \r\n\r\nIt is important to note that a successful decoding does *not* mean your output matches your original input. \r\nThere are no integrity checks, so relying on errors from the decompressor does not assure your data is valid.\r\n\r\nFor more detailed usage, see examples in the [godoc documentation](https://godoc.org/github.com/klauspost/compress/fse#pkg-examples).\r\n\r\n# Performance\r\n\r\nA lot of factors are affecting speed. Block sizes and compressibility of the material are primary factors.  \r\nAll compression functions are currently only running on the calling goroutine so only one core will be used per block.  \r\n\r\nThe compressor is significantly faster if symbols are kept as small as possible. The highest byte value of the input\r\nis used to reduce some of the processing, so if all your input is above byte value 64 for instance, it may be \r\nbeneficial to transpose all your input values down by 64.   \r\n\r\nWith moderate block sizes around 64k speed are typically 200MB/s per core for compression and \r\naround 300MB/s decompression speed. \r\n\r\nThe same hardware typically does Huffman (deflate) encoding at 125MB/s and decompression at 100MB/s. \r\n\r\n# Plans\r\n\r\nAt one point, more internals will be exposed to facilitate more \"expert\" usage of the components. \r\n\r\nA streaming interface is also likely to be implemented. Likely compatible with [FSE stream format](https://github.com/Cyan4973/FiniteStateEntropy/blob/dev/programs/fileio.c#L261).  \r\n\r\n# Contributing\r\n\r\nContributions are always welcome. Be aware that adding public functions will require good justification and breaking \r\nchanges will likely not be accepted. If in doubt open an issue before writing the PR.  "
  },
  {
    "path": "vendor/github.com/klauspost/compress/fse/bitreader.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\npackage fse\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n)\n\n// bitReader reads a bitstream in reverse.\n// The last set bit indicates the start of the stream and is used\n// for aligning the input.\ntype bitReader struct {\n\tin       []byte\n\toff      uint // next byte to read is at in[off - 1]\n\tvalue    uint64\n\tbitsRead uint8\n}\n\n// init initializes and resets the bit reader.\nfunc (b *bitReader) init(in []byte) error {\n\tif len(in) < 1 {\n\t\treturn errors.New(\"corrupt stream: too short\")\n\t}\n\tb.in = in\n\tb.off = uint(len(in))\n\t// The highest bit of the last byte indicates where to start\n\tv := in[len(in)-1]\n\tif v == 0 {\n\t\treturn errors.New(\"corrupt stream, did not find end of stream\")\n\t}\n\tb.bitsRead = 64\n\tb.value = 0\n\tif len(in) >= 8 {\n\t\tb.fillFastStart()\n\t} else {\n\t\tb.fill()\n\t\tb.fill()\n\t}\n\tb.bitsRead += 8 - uint8(highBits(uint32(v)))\n\treturn nil\n}\n\n// getBits will return n bits. n can be 0.\nfunc (b *bitReader) getBits(n uint8) uint16 {\n\tif n == 0 || b.bitsRead >= 64 {\n\t\treturn 0\n\t}\n\treturn b.getBitsFast(n)\n}\n\n// getBitsFast requires that at least one bit is requested every time.\n// There are no checks if the buffer is filled.\nfunc (b *bitReader) getBitsFast(n uint8) uint16 {\n\tconst regMask = 64 - 1\n\tv := uint16((b.value << (b.bitsRead & regMask)) >> ((regMask + 1 - n) & regMask))\n\tb.bitsRead += n\n\treturn v\n}\n\n// fillFast() will make sure at least 32 bits are available.\n// There must be at least 4 bytes available.\nfunc (b *bitReader) fillFast() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\t// 2 bounds checks.\n\tv := b.in[b.off-4:]\n\tv = v[:4]\n\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\tb.value = (b.value << 32) | uint64(low)\n\tb.bitsRead -= 32\n\tb.off -= 4\n}\n\n// fill() will make sure at least 32 bits are available.\nfunc (b *bitReader) fill() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\tif b.off > 4 {\n\t\tv := b.in[b.off-4:]\n\t\tv = v[:4]\n\t\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\t\tb.value = (b.value << 32) | uint64(low)\n\t\tb.bitsRead -= 32\n\t\tb.off -= 4\n\t\treturn\n\t}\n\tfor b.off > 0 {\n\t\tb.value = (b.value << 8) | uint64(b.in[b.off-1])\n\t\tb.bitsRead -= 8\n\t\tb.off--\n\t}\n}\n\n// fillFastStart() assumes the bitreader is empty and there is at least 8 bytes to read.\nfunc (b *bitReader) fillFastStart() {\n\t// Do single re-slice to avoid bounds checks.\n\tb.value = binary.LittleEndian.Uint64(b.in[b.off-8:])\n\tb.bitsRead = 0\n\tb.off -= 8\n}\n\n// finished returns true if all bits have been read from the bit stream.\nfunc (b *bitReader) finished() bool {\n\treturn b.bitsRead >= 64 && b.off == 0\n}\n\n// close the bitstream and returns an error if out-of-buffer reads occurred.\nfunc (b *bitReader) close() error {\n\t// Release reference.\n\tb.in = nil\n\tif b.bitsRead > 64 {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/fse/bitwriter.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\npackage fse\n\nimport \"fmt\"\n\n// bitWriter will write bits.\n// First bit will be LSB of the first byte of output.\ntype bitWriter struct {\n\tbitContainer uint64\n\tnBits        uint8\n\tout          []byte\n}\n\n// bitMask16 is bitmasks. Has extra to avoid bounds check.\nvar bitMask16 = [32]uint16{\n\t0, 1, 3, 7, 0xF, 0x1F,\n\t0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,\n\t0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0xFFFF,\n\t0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,\n\t0xFFFF, 0xFFFF} /* up to 16 bits */\n\n// addBits16NC will add up to 16 bits.\n// It will not check if there is space for them,\n// so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) addBits16NC(value uint16, bits uint8) {\n\tb.bitContainer |= uint64(value&bitMask16[bits&31]) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// addBits16Clean will add up to 16 bits. value may not contain more set bits than indicated.\n// It will not check if there is space for them, so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) addBits16Clean(value uint16, bits uint8) {\n\tb.bitContainer |= uint64(value) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// addBits16ZeroNC will add up to 16 bits.\n// It will not check if there is space for them,\n// so the caller must ensure that it has flushed recently.\n// This is fastest if bits can be zero.\nfunc (b *bitWriter) addBits16ZeroNC(value uint16, bits uint8) {\n\tif bits == 0 {\n\t\treturn\n\t}\n\tvalue <<= (16 - bits) & 15\n\tvalue >>= (16 - bits) & 15\n\tb.bitContainer |= uint64(value) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// flush will flush all pending full bytes.\n// There will be at least 56 bits available for writing when this has been called.\n// Using flush32 is faster, but leaves less space for writing.\nfunc (b *bitWriter) flush() {\n\tv := b.nBits >> 3\n\tswitch v {\n\tcase 0:\n\tcase 1:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t)\n\tcase 2:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t\tbyte(b.bitContainer>>8),\n\t\t)\n\tcase 3:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t\tbyte(b.bitContainer>>8),\n\t\t\tbyte(b.bitContainer>>16),\n\t\t)\n\tcase 4:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t\tbyte(b.bitContainer>>8),\n\t\t\tbyte(b.bitContainer>>16),\n\t\t\tbyte(b.bitContainer>>24),\n\t\t)\n\tcase 5:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t\tbyte(b.bitContainer>>8),\n\t\t\tbyte(b.bitContainer>>16),\n\t\t\tbyte(b.bitContainer>>24),\n\t\t\tbyte(b.bitContainer>>32),\n\t\t)\n\tcase 6:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t\tbyte(b.bitContainer>>8),\n\t\t\tbyte(b.bitContainer>>16),\n\t\t\tbyte(b.bitContainer>>24),\n\t\t\tbyte(b.bitContainer>>32),\n\t\t\tbyte(b.bitContainer>>40),\n\t\t)\n\tcase 7:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t\tbyte(b.bitContainer>>8),\n\t\t\tbyte(b.bitContainer>>16),\n\t\t\tbyte(b.bitContainer>>24),\n\t\t\tbyte(b.bitContainer>>32),\n\t\t\tbyte(b.bitContainer>>40),\n\t\t\tbyte(b.bitContainer>>48),\n\t\t)\n\tcase 8:\n\t\tb.out = append(b.out,\n\t\t\tbyte(b.bitContainer),\n\t\t\tbyte(b.bitContainer>>8),\n\t\t\tbyte(b.bitContainer>>16),\n\t\t\tbyte(b.bitContainer>>24),\n\t\t\tbyte(b.bitContainer>>32),\n\t\t\tbyte(b.bitContainer>>40),\n\t\t\tbyte(b.bitContainer>>48),\n\t\t\tbyte(b.bitContainer>>56),\n\t\t)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"bits (%d) > 64\", b.nBits))\n\t}\n\tb.bitContainer >>= v << 3\n\tb.nBits &= 7\n}\n\n// flush32 will flush out, so there are at least 32 bits available for writing.\nfunc (b *bitWriter) flush32() {\n\tif b.nBits < 32 {\n\t\treturn\n\t}\n\tb.out = append(b.out,\n\t\tbyte(b.bitContainer),\n\t\tbyte(b.bitContainer>>8),\n\t\tbyte(b.bitContainer>>16),\n\t\tbyte(b.bitContainer>>24))\n\tb.nBits -= 32\n\tb.bitContainer >>= 32\n}\n\n// flushAlign will flush remaining full bytes and align to next byte boundary.\nfunc (b *bitWriter) flushAlign() {\n\tnbBytes := (b.nBits + 7) >> 3\n\tfor i := uint8(0); i < nbBytes; i++ {\n\t\tb.out = append(b.out, byte(b.bitContainer>>(i*8)))\n\t}\n\tb.nBits = 0\n\tb.bitContainer = 0\n}\n\n// close will write the alignment bit and write the final byte(s)\n// to the output.\nfunc (b *bitWriter) close() {\n\t// End mark\n\tb.addBits16Clean(1, 1)\n\t// flush until next byte.\n\tb.flushAlign()\n}\n\n// reset and continue writing by appending to out.\nfunc (b *bitWriter) reset(out []byte) {\n\tb.bitContainer = 0\n\tb.nBits = 0\n\tb.out = out\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/fse/bytereader.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\npackage fse\n\n// byteReader provides a byte reader that reads\n// little endian values from a byte stream.\n// The input stream is manually advanced.\n// The reader performs no bounds checks.\ntype byteReader struct {\n\tb   []byte\n\toff int\n}\n\n// init will initialize the reader and set the input.\nfunc (b *byteReader) init(in []byte) {\n\tb.b = in\n\tb.off = 0\n}\n\n// advance the stream b n bytes.\nfunc (b *byteReader) advance(n uint) {\n\tb.off += int(n)\n}\n\n// Uint32 returns a little endian uint32 starting at current offset.\nfunc (b byteReader) Uint32() uint32 {\n\tb2 := b.b[b.off:]\n\tb2 = b2[:4]\n\tv3 := uint32(b2[3])\n\tv2 := uint32(b2[2])\n\tv1 := uint32(b2[1])\n\tv0 := uint32(b2[0])\n\treturn v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)\n}\n\n// unread returns the unread portion of the input.\nfunc (b byteReader) unread() []byte {\n\treturn b.b[b.off:]\n}\n\n// remain will return the number of bytes remaining.\nfunc (b byteReader) remain() int {\n\treturn len(b.b) - b.off\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/fse/compress.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\npackage fse\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// Compress the input bytes. Input must be < 2GB.\n// Provide a Scratch buffer to avoid memory allocations.\n// Note that the output is also kept in the scratch buffer.\n// If input is too hard to compress, ErrIncompressible is returned.\n// If input is a single byte value repeated ErrUseRLE is returned.\nfunc Compress(in []byte, s *Scratch) ([]byte, error) {\n\tif len(in) <= 1 {\n\t\treturn nil, ErrIncompressible\n\t}\n\tif len(in) > (2<<30)-1 {\n\t\treturn nil, errors.New(\"input too big, must be < 2GB\")\n\t}\n\ts, err := s.prepare(in)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Create histogram, if none was provided.\n\tmaxCount := s.maxCount\n\tif maxCount == 0 {\n\t\tmaxCount = s.countSimple(in)\n\t}\n\t// Reset for next run.\n\ts.clearCount = true\n\ts.maxCount = 0\n\tif maxCount == len(in) {\n\t\t// One symbol, use RLE\n\t\treturn nil, ErrUseRLE\n\t}\n\tif maxCount == 1 || maxCount < (len(in)>>7) {\n\t\t// Each symbol present maximum once or too well distributed.\n\t\treturn nil, ErrIncompressible\n\t}\n\ts.optimalTableLog()\n\terr = s.normalizeCount()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = s.writeCount()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif false {\n\t\terr = s.validateNorm()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\terr = s.buildCTable()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = s.compress(in)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts.Out = s.bw.out\n\t// Check if we compressed.\n\tif len(s.Out) >= len(in) {\n\t\treturn nil, ErrIncompressible\n\t}\n\treturn s.Out, nil\n}\n\n// cState contains the compression state of a stream.\ntype cState struct {\n\tbw         *bitWriter\n\tstateTable []uint16\n\tstate      uint16\n}\n\n// init will initialize the compression state to the first symbol of the stream.\nfunc (c *cState) init(bw *bitWriter, ct *cTable, tableLog uint8, first symbolTransform) {\n\tc.bw = bw\n\tc.stateTable = ct.stateTable\n\n\tnbBitsOut := (first.deltaNbBits + (1 << 15)) >> 16\n\tim := int32((nbBitsOut << 16) - first.deltaNbBits)\n\tlu := (im >> nbBitsOut) + first.deltaFindState\n\tc.state = c.stateTable[lu]\n}\n\n// encode the output symbol provided and write it to the bitstream.\nfunc (c *cState) encode(symbolTT symbolTransform) {\n\tnbBitsOut := (uint32(c.state) + symbolTT.deltaNbBits) >> 16\n\tdstState := int32(c.state>>(nbBitsOut&15)) + symbolTT.deltaFindState\n\tc.bw.addBits16NC(c.state, uint8(nbBitsOut))\n\tc.state = c.stateTable[dstState]\n}\n\n// encode the output symbol provided and write it to the bitstream.\nfunc (c *cState) encodeZero(symbolTT symbolTransform) {\n\tnbBitsOut := (uint32(c.state) + symbolTT.deltaNbBits) >> 16\n\tdstState := int32(c.state>>(nbBitsOut&15)) + symbolTT.deltaFindState\n\tc.bw.addBits16ZeroNC(c.state, uint8(nbBitsOut))\n\tc.state = c.stateTable[dstState]\n}\n\n// flush will write the tablelog to the output and flush the remaining full bytes.\nfunc (c *cState) flush(tableLog uint8) {\n\tc.bw.flush32()\n\tc.bw.addBits16NC(c.state, tableLog)\n\tc.bw.flush()\n}\n\n// compress is the main compression loop that will encode the input from the last byte to the first.\nfunc (s *Scratch) compress(src []byte) error {\n\tif len(src) <= 2 {\n\t\treturn errors.New(\"compress: src too small\")\n\t}\n\ttt := s.ct.symbolTT[:256]\n\ts.bw.reset(s.Out)\n\n\t// Our two states each encodes every second byte.\n\t// Last byte encoded (first byte decoded) will always be encoded by c1.\n\tvar c1, c2 cState\n\n\t// Encode so remaining size is divisible by 4.\n\tip := len(src)\n\tif ip&1 == 1 {\n\t\tc1.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-1]])\n\t\tc2.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-2]])\n\t\tc1.encodeZero(tt[src[ip-3]])\n\t\tip -= 3\n\t} else {\n\t\tc2.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-1]])\n\t\tc1.init(&s.bw, &s.ct, s.actualTableLog, tt[src[ip-2]])\n\t\tip -= 2\n\t}\n\tif ip&2 != 0 {\n\t\tc2.encodeZero(tt[src[ip-1]])\n\t\tc1.encodeZero(tt[src[ip-2]])\n\t\tip -= 2\n\t}\n\tsrc = src[:ip]\n\n\t// Main compression loop.\n\tswitch {\n\tcase !s.zeroBits && s.actualTableLog <= 8:\n\t\t// We can encode 4 symbols without requiring a flush.\n\t\t// We do not need to check if any output is 0 bits.\n\t\tfor ; len(src) >= 4; src = src[:len(src)-4] {\n\t\t\ts.bw.flush32()\n\t\t\tv3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]\n\t\t\tc2.encode(tt[v0])\n\t\t\tc1.encode(tt[v1])\n\t\t\tc2.encode(tt[v2])\n\t\t\tc1.encode(tt[v3])\n\t\t}\n\tcase !s.zeroBits:\n\t\t// We do not need to check if any output is 0 bits.\n\t\tfor ; len(src) >= 4; src = src[:len(src)-4] {\n\t\t\ts.bw.flush32()\n\t\t\tv3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]\n\t\t\tc2.encode(tt[v0])\n\t\t\tc1.encode(tt[v1])\n\t\t\ts.bw.flush32()\n\t\t\tc2.encode(tt[v2])\n\t\t\tc1.encode(tt[v3])\n\t\t}\n\tcase s.actualTableLog <= 8:\n\t\t// We can encode 4 symbols without requiring a flush\n\t\tfor ; len(src) >= 4; src = src[:len(src)-4] {\n\t\t\ts.bw.flush32()\n\t\t\tv3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]\n\t\t\tc2.encodeZero(tt[v0])\n\t\t\tc1.encodeZero(tt[v1])\n\t\t\tc2.encodeZero(tt[v2])\n\t\t\tc1.encodeZero(tt[v3])\n\t\t}\n\tdefault:\n\t\tfor ; len(src) >= 4; src = src[:len(src)-4] {\n\t\t\ts.bw.flush32()\n\t\t\tv3, v2, v1, v0 := src[len(src)-4], src[len(src)-3], src[len(src)-2], src[len(src)-1]\n\t\t\tc2.encodeZero(tt[v0])\n\t\t\tc1.encodeZero(tt[v1])\n\t\t\ts.bw.flush32()\n\t\t\tc2.encodeZero(tt[v2])\n\t\t\tc1.encodeZero(tt[v3])\n\t\t}\n\t}\n\n\t// Flush final state.\n\t// Used to initialize state when decoding.\n\tc2.flush(s.actualTableLog)\n\tc1.flush(s.actualTableLog)\n\n\ts.bw.close()\n\treturn nil\n}\n\n// writeCount will write the normalized histogram count to header.\n// This is read back by readNCount.\nfunc (s *Scratch) writeCount() error {\n\tvar (\n\t\ttableLog  = s.actualTableLog\n\t\ttableSize = 1 << tableLog\n\t\tprevious0 bool\n\t\tcharnum   uint16\n\n\t\tmaxHeaderSize = ((int(s.symbolLen)*int(tableLog) + 4 + 2) >> 3) + 3\n\n\t\t// Write Table Size\n\t\tbitStream = uint32(tableLog - minTablelog)\n\t\tbitCount  = uint(4)\n\t\tremaining = int16(tableSize + 1) /* +1 for extra accuracy */\n\t\tthreshold = int16(tableSize)\n\t\tnbBits    = uint(tableLog + 1)\n\t)\n\tif cap(s.Out) < maxHeaderSize {\n\t\ts.Out = make([]byte, 0, s.br.remain()+maxHeaderSize)\n\t}\n\toutP := uint(0)\n\tout := s.Out[:maxHeaderSize]\n\n\t// stops at 1\n\tfor remaining > 1 {\n\t\tif previous0 {\n\t\t\tstart := charnum\n\t\t\tfor s.norm[charnum] == 0 {\n\t\t\t\tcharnum++\n\t\t\t}\n\t\t\tfor charnum >= start+24 {\n\t\t\t\tstart += 24\n\t\t\t\tbitStream += uint32(0xFFFF) << bitCount\n\t\t\t\tout[outP] = byte(bitStream)\n\t\t\t\tout[outP+1] = byte(bitStream >> 8)\n\t\t\t\toutP += 2\n\t\t\t\tbitStream >>= 16\n\t\t\t}\n\t\t\tfor charnum >= start+3 {\n\t\t\t\tstart += 3\n\t\t\t\tbitStream += 3 << bitCount\n\t\t\t\tbitCount += 2\n\t\t\t}\n\t\t\tbitStream += uint32(charnum-start) << bitCount\n\t\t\tbitCount += 2\n\t\t\tif bitCount > 16 {\n\t\t\t\tout[outP] = byte(bitStream)\n\t\t\t\tout[outP+1] = byte(bitStream >> 8)\n\t\t\t\toutP += 2\n\t\t\t\tbitStream >>= 16\n\t\t\t\tbitCount -= 16\n\t\t\t}\n\t\t}\n\n\t\tcount := s.norm[charnum]\n\t\tcharnum++\n\t\tmax := (2*threshold - 1) - remaining\n\t\tif count < 0 {\n\t\t\tremaining += count\n\t\t} else {\n\t\t\tremaining -= count\n\t\t}\n\t\tcount++ // +1 for extra accuracy\n\t\tif count >= threshold {\n\t\t\tcount += max // [0..max[ [max..threshold[ (...) [threshold+max 2*threshold[\n\t\t}\n\t\tbitStream += uint32(count) << bitCount\n\t\tbitCount += nbBits\n\t\tif count < max {\n\t\t\tbitCount--\n\t\t}\n\n\t\tprevious0 = count == 1\n\t\tif remaining < 1 {\n\t\t\treturn errors.New(\"internal error: remaining<1\")\n\t\t}\n\t\tfor remaining < threshold {\n\t\t\tnbBits--\n\t\t\tthreshold >>= 1\n\t\t}\n\n\t\tif bitCount > 16 {\n\t\t\tout[outP] = byte(bitStream)\n\t\t\tout[outP+1] = byte(bitStream >> 8)\n\t\t\toutP += 2\n\t\t\tbitStream >>= 16\n\t\t\tbitCount -= 16\n\t\t}\n\t}\n\n\tout[outP] = byte(bitStream)\n\tout[outP+1] = byte(bitStream >> 8)\n\toutP += (bitCount + 7) / 8\n\n\tif charnum > s.symbolLen {\n\t\treturn errors.New(\"internal error: charnum > s.symbolLen\")\n\t}\n\ts.Out = out[:outP]\n\treturn nil\n}\n\n// symbolTransform contains the state transform for a symbol.\ntype symbolTransform struct {\n\tdeltaFindState int32\n\tdeltaNbBits    uint32\n}\n\n// String prints values as a human readable string.\nfunc (s symbolTransform) String() string {\n\treturn fmt.Sprintf(\"dnbits: %08x, fs:%d\", s.deltaNbBits, s.deltaFindState)\n}\n\n// cTable contains tables used for compression.\ntype cTable struct {\n\ttableSymbol []byte\n\tstateTable  []uint16\n\tsymbolTT    []symbolTransform\n}\n\n// allocCtable will allocate tables needed for compression.\n// If existing tables a re big enough, they are simply re-used.\nfunc (s *Scratch) allocCtable() {\n\ttableSize := 1 << s.actualTableLog\n\t// get tableSymbol that is big enough.\n\tif cap(s.ct.tableSymbol) < tableSize {\n\t\ts.ct.tableSymbol = make([]byte, tableSize)\n\t}\n\ts.ct.tableSymbol = s.ct.tableSymbol[:tableSize]\n\n\tctSize := tableSize\n\tif cap(s.ct.stateTable) < ctSize {\n\t\ts.ct.stateTable = make([]uint16, ctSize)\n\t}\n\ts.ct.stateTable = s.ct.stateTable[:ctSize]\n\n\tif cap(s.ct.symbolTT) < 256 {\n\t\ts.ct.symbolTT = make([]symbolTransform, 256)\n\t}\n\ts.ct.symbolTT = s.ct.symbolTT[:256]\n}\n\n// buildCTable will populate the compression table so it is ready to be used.\nfunc (s *Scratch) buildCTable() error {\n\ttableSize := uint32(1 << s.actualTableLog)\n\thighThreshold := tableSize - 1\n\tvar cumul [maxSymbolValue + 2]int16\n\n\ts.allocCtable()\n\ttableSymbol := s.ct.tableSymbol[:tableSize]\n\t// symbol start positions\n\t{\n\t\tcumul[0] = 0\n\t\tfor ui, v := range s.norm[:s.symbolLen-1] {\n\t\t\tu := byte(ui) // one less than reference\n\t\t\tif v == -1 {\n\t\t\t\t// Low proba symbol\n\t\t\t\tcumul[u+1] = cumul[u] + 1\n\t\t\t\ttableSymbol[highThreshold] = u\n\t\t\t\thighThreshold--\n\t\t\t} else {\n\t\t\t\tcumul[u+1] = cumul[u] + v\n\t\t\t}\n\t\t}\n\t\t// Encode last symbol separately to avoid overflowing u\n\t\tu := int(s.symbolLen - 1)\n\t\tv := s.norm[s.symbolLen-1]\n\t\tif v == -1 {\n\t\t\t// Low proba symbol\n\t\t\tcumul[u+1] = cumul[u] + 1\n\t\t\ttableSymbol[highThreshold] = byte(u)\n\t\t\thighThreshold--\n\t\t} else {\n\t\t\tcumul[u+1] = cumul[u] + v\n\t\t}\n\t\tif uint32(cumul[s.symbolLen]) != tableSize {\n\t\t\treturn fmt.Errorf(\"internal error: expected cumul[s.symbolLen] (%d) == tableSize (%d)\", cumul[s.symbolLen], tableSize)\n\t\t}\n\t\tcumul[s.symbolLen] = int16(tableSize) + 1\n\t}\n\t// Spread symbols\n\ts.zeroBits = false\n\t{\n\t\tstep := tableStep(tableSize)\n\t\ttableMask := tableSize - 1\n\t\tvar position uint32\n\t\t// if any symbol > largeLimit, we may have 0 bits output.\n\t\tlargeLimit := int16(1 << (s.actualTableLog - 1))\n\t\tfor ui, v := range s.norm[:s.symbolLen] {\n\t\t\tsymbol := byte(ui)\n\t\t\tif v > largeLimit {\n\t\t\t\ts.zeroBits = true\n\t\t\t}\n\t\t\tfor nbOccurrences := int16(0); nbOccurrences < v; nbOccurrences++ {\n\t\t\t\ttableSymbol[position] = symbol\n\t\t\t\tposition = (position + step) & tableMask\n\t\t\t\tfor position > highThreshold {\n\t\t\t\t\tposition = (position + step) & tableMask\n\t\t\t\t} /* Low proba area */\n\t\t\t}\n\t\t}\n\n\t\t// Check if we have gone through all positions\n\t\tif position != 0 {\n\t\t\treturn errors.New(\"position!=0\")\n\t\t}\n\t}\n\n\t// Build table\n\ttable := s.ct.stateTable\n\t{\n\t\ttsi := int(tableSize)\n\t\tfor u, v := range tableSymbol {\n\t\t\t// TableU16 : sorted by symbol order; gives next state value\n\t\t\ttable[cumul[v]] = uint16(tsi + u)\n\t\t\tcumul[v]++\n\t\t}\n\t}\n\n\t// Build Symbol Transformation Table\n\t{\n\t\ttotal := int16(0)\n\t\tsymbolTT := s.ct.symbolTT[:s.symbolLen]\n\t\ttableLog := s.actualTableLog\n\t\ttl := (uint32(tableLog) << 16) - (1 << tableLog)\n\t\tfor i, v := range s.norm[:s.symbolLen] {\n\t\t\tswitch v {\n\t\t\tcase 0:\n\t\t\tcase -1, 1:\n\t\t\t\tsymbolTT[i].deltaNbBits = tl\n\t\t\t\tsymbolTT[i].deltaFindState = int32(total - 1)\n\t\t\t\ttotal++\n\t\t\tdefault:\n\t\t\t\tmaxBitsOut := uint32(tableLog) - highBits(uint32(v-1))\n\t\t\t\tminStatePlus := uint32(v) << maxBitsOut\n\t\t\t\tsymbolTT[i].deltaNbBits = (maxBitsOut << 16) - minStatePlus\n\t\t\t\tsymbolTT[i].deltaFindState = int32(total - v)\n\t\t\t\ttotal += v\n\t\t\t}\n\t\t}\n\t\tif total != int16(tableSize) {\n\t\t\treturn fmt.Errorf(\"total mismatch %d (got) != %d (want)\", total, tableSize)\n\t\t}\n\t}\n\treturn nil\n}\n\n// countSimple will create a simple histogram in s.count.\n// Returns the biggest count.\n// Does not update s.clearCount.\nfunc (s *Scratch) countSimple(in []byte) (max int) {\n\tfor _, v := range in {\n\t\ts.count[v]++\n\t}\n\tm, symlen := uint32(0), s.symbolLen\n\tfor i, v := range s.count[:] {\n\t\tif v == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif v > m {\n\t\t\tm = v\n\t\t}\n\t\tsymlen = uint16(i) + 1\n\t}\n\ts.symbolLen = symlen\n\treturn int(m)\n}\n\n// minTableLog provides the minimum logSize to safely represent a distribution.\nfunc (s *Scratch) minTableLog() uint8 {\n\tminBitsSrc := highBits(uint32(s.br.remain()-1)) + 1\n\tminBitsSymbols := highBits(uint32(s.symbolLen-1)) + 2\n\tif minBitsSrc < minBitsSymbols {\n\t\treturn uint8(minBitsSrc)\n\t}\n\treturn uint8(minBitsSymbols)\n}\n\n// optimalTableLog calculates and sets the optimal tableLog in s.actualTableLog\nfunc (s *Scratch) optimalTableLog() {\n\ttableLog := s.TableLog\n\tminBits := s.minTableLog()\n\tmaxBitsSrc := uint8(highBits(uint32(s.br.remain()-1))) - 2\n\tif maxBitsSrc < tableLog {\n\t\t// Accuracy can be reduced\n\t\ttableLog = maxBitsSrc\n\t}\n\tif minBits > tableLog {\n\t\ttableLog = minBits\n\t}\n\t// Need a minimum to safely represent all symbol values\n\tif tableLog < minTablelog {\n\t\ttableLog = minTablelog\n\t}\n\tif tableLog > maxTableLog {\n\t\ttableLog = maxTableLog\n\t}\n\ts.actualTableLog = tableLog\n}\n\nvar rtbTable = [...]uint32{0, 473195, 504333, 520860, 550000, 700000, 750000, 830000}\n\n// normalizeCount will normalize the count of the symbols so\n// the total is equal to the table size.\nfunc (s *Scratch) normalizeCount() error {\n\tvar (\n\t\ttableLog          = s.actualTableLog\n\t\tscale             = 62 - uint64(tableLog)\n\t\tstep              = (1 << 62) / uint64(s.br.remain())\n\t\tvStep             = uint64(1) << (scale - 20)\n\t\tstillToDistribute = int16(1 << tableLog)\n\t\tlargest           int\n\t\tlargestP          int16\n\t\tlowThreshold      = (uint32)(s.br.remain() >> tableLog)\n\t)\n\n\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\t// already handled\n\t\t// if (count[s] == s.length) return 0;   /* rle special case */\n\n\t\tif cnt == 0 {\n\t\t\ts.norm[i] = 0\n\t\t\tcontinue\n\t\t}\n\t\tif cnt <= lowThreshold {\n\t\t\ts.norm[i] = -1\n\t\t\tstillToDistribute--\n\t\t} else {\n\t\t\tproba := (int16)((uint64(cnt) * step) >> scale)\n\t\t\tif proba < 8 {\n\t\t\t\trestToBeat := vStep * uint64(rtbTable[proba])\n\t\t\t\tv := uint64(cnt)*step - (uint64(proba) << scale)\n\t\t\t\tif v > restToBeat {\n\t\t\t\t\tproba++\n\t\t\t\t}\n\t\t\t}\n\t\t\tif proba > largestP {\n\t\t\t\tlargestP = proba\n\t\t\t\tlargest = i\n\t\t\t}\n\t\t\ts.norm[i] = proba\n\t\t\tstillToDistribute -= proba\n\t\t}\n\t}\n\n\tif -stillToDistribute >= (s.norm[largest] >> 1) {\n\t\t// corner case, need another normalization method\n\t\treturn s.normalizeCount2()\n\t}\n\ts.norm[largest] += stillToDistribute\n\treturn nil\n}\n\n// Secondary normalization method.\n// To be used when primary method fails.\nfunc (s *Scratch) normalizeCount2() error {\n\tconst notYetAssigned = -2\n\tvar (\n\t\tdistributed  uint32\n\t\ttotal        = uint32(s.br.remain())\n\t\ttableLog     = s.actualTableLog\n\t\tlowThreshold = total >> tableLog\n\t\tlowOne       = (total * 3) >> (tableLog + 1)\n\t)\n\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\tif cnt == 0 {\n\t\t\ts.norm[i] = 0\n\t\t\tcontinue\n\t\t}\n\t\tif cnt <= lowThreshold {\n\t\t\ts.norm[i] = -1\n\t\t\tdistributed++\n\t\t\ttotal -= cnt\n\t\t\tcontinue\n\t\t}\n\t\tif cnt <= lowOne {\n\t\t\ts.norm[i] = 1\n\t\t\tdistributed++\n\t\t\ttotal -= cnt\n\t\t\tcontinue\n\t\t}\n\t\ts.norm[i] = notYetAssigned\n\t}\n\ttoDistribute := (1 << tableLog) - distributed\n\n\tif (total / toDistribute) > lowOne {\n\t\t// risk of rounding to zero\n\t\tlowOne = (total * 3) / (toDistribute * 2)\n\t\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\t\tif (s.norm[i] == notYetAssigned) && (cnt <= lowOne) {\n\t\t\t\ts.norm[i] = 1\n\t\t\t\tdistributed++\n\t\t\t\ttotal -= cnt\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\ttoDistribute = (1 << tableLog) - distributed\n\t}\n\tif distributed == uint32(s.symbolLen)+1 {\n\t\t// all values are pretty poor;\n\t\t//   probably incompressible data (should have already been detected);\n\t\t//   find max, then give all remaining points to max\n\t\tvar maxV int\n\t\tvar maxC uint32\n\t\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\t\tif cnt > maxC {\n\t\t\t\tmaxV = i\n\t\t\t\tmaxC = cnt\n\t\t\t}\n\t\t}\n\t\ts.norm[maxV] += int16(toDistribute)\n\t\treturn nil\n\t}\n\n\tif total == 0 {\n\t\t// all of the symbols were low enough for the lowOne or lowThreshold\n\t\tfor i := uint32(0); toDistribute > 0; i = (i + 1) % (uint32(s.symbolLen)) {\n\t\t\tif s.norm[i] > 0 {\n\t\t\t\ttoDistribute--\n\t\t\t\ts.norm[i]++\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tvar (\n\t\tvStepLog = 62 - uint64(tableLog)\n\t\tmid      = uint64((1 << (vStepLog - 1)) - 1)\n\t\trStep    = (((1 << vStepLog) * uint64(toDistribute)) + mid) / uint64(total) // scale on remaining\n\t\ttmpTotal = mid\n\t)\n\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\tif s.norm[i] == notYetAssigned {\n\t\t\tvar (\n\t\t\t\tend    = tmpTotal + uint64(cnt)*rStep\n\t\t\t\tsStart = uint32(tmpTotal >> vStepLog)\n\t\t\t\tsEnd   = uint32(end >> vStepLog)\n\t\t\t\tweight = sEnd - sStart\n\t\t\t)\n\t\t\tif weight < 1 {\n\t\t\t\treturn errors.New(\"weight < 1\")\n\t\t\t}\n\t\t\ts.norm[i] = int16(weight)\n\t\t\ttmpTotal = end\n\t\t}\n\t}\n\treturn nil\n}\n\n// validateNorm validates the normalized histogram table.\nfunc (s *Scratch) validateNorm() (err error) {\n\tvar total int\n\tfor _, v := range s.norm[:s.symbolLen] {\n\t\tif v >= 0 {\n\t\t\ttotal += int(v)\n\t\t} else {\n\t\t\ttotal -= int(v)\n\t\t}\n\t}\n\tdefer func() {\n\t\tif err == nil {\n\t\t\treturn\n\t\t}\n\t\tfmt.Printf(\"selected TableLog: %d, Symbol length: %d\\n\", s.actualTableLog, s.symbolLen)\n\t\tfor i, v := range s.norm[:s.symbolLen] {\n\t\t\tfmt.Printf(\"%3d: %5d -> %4d \\n\", i, s.count[i], v)\n\t\t}\n\t}()\n\tif total != (1 << s.actualTableLog) {\n\t\treturn fmt.Errorf(\"warning: Total == %d != %d\", total, 1<<s.actualTableLog)\n\t}\n\tfor i, v := range s.count[s.symbolLen:] {\n\t\tif v != 0 {\n\t\t\treturn fmt.Errorf(\"warning: Found symbol out of range, %d after cut\", i)\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/fse/decompress.go",
    "content": "package fse\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\nconst (\n\ttablelogAbsoluteMax = 15\n)\n\n// Decompress a block of data.\n// You can provide a scratch buffer to avoid allocations.\n// If nil is provided a temporary one will be allocated.\n// It is possible, but by no way guaranteed that corrupt data will\n// return an error.\n// It is up to the caller to verify integrity of the returned data.\n// Use a predefined Scrach to set maximum acceptable output size.\nfunc Decompress(b []byte, s *Scratch) ([]byte, error) {\n\ts, err := s.prepare(b)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts.Out = s.Out[:0]\n\terr = s.readNCount()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = s.buildDtable()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = s.decompress()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn s.Out, nil\n}\n\n// readNCount will read the symbol distribution so decoding tables can be constructed.\nfunc (s *Scratch) readNCount() error {\n\tvar (\n\t\tcharnum   uint16\n\t\tprevious0 bool\n\t\tb         = &s.br\n\t)\n\tiend := b.remain()\n\tif iend < 4 {\n\t\treturn errors.New(\"input too small\")\n\t}\n\tbitStream := b.Uint32()\n\tnbBits := uint((bitStream & 0xF) + minTablelog) // extract tableLog\n\tif nbBits > tablelogAbsoluteMax {\n\t\treturn errors.New(\"tableLog too large\")\n\t}\n\tbitStream >>= 4\n\tbitCount := uint(4)\n\n\ts.actualTableLog = uint8(nbBits)\n\tremaining := int32((1 << nbBits) + 1)\n\tthreshold := int32(1 << nbBits)\n\tgotTotal := int32(0)\n\tnbBits++\n\n\tfor remaining > 1 {\n\t\tif previous0 {\n\t\t\tn0 := charnum\n\t\t\tfor (bitStream & 0xFFFF) == 0xFFFF {\n\t\t\t\tn0 += 24\n\t\t\t\tif b.off < iend-5 {\n\t\t\t\t\tb.advance(2)\n\t\t\t\t\tbitStream = b.Uint32() >> bitCount\n\t\t\t\t} else {\n\t\t\t\t\tbitStream >>= 16\n\t\t\t\t\tbitCount += 16\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (bitStream & 3) == 3 {\n\t\t\t\tn0 += 3\n\t\t\t\tbitStream >>= 2\n\t\t\t\tbitCount += 2\n\t\t\t}\n\t\t\tn0 += uint16(bitStream & 3)\n\t\t\tbitCount += 2\n\t\t\tif n0 > maxSymbolValue {\n\t\t\t\treturn errors.New(\"maxSymbolValue too small\")\n\t\t\t}\n\t\t\tfor charnum < n0 {\n\t\t\t\ts.norm[charnum&0xff] = 0\n\t\t\t\tcharnum++\n\t\t\t}\n\n\t\t\tif b.off <= iend-7 || b.off+int(bitCount>>3) <= iend-4 {\n\t\t\t\tb.advance(bitCount >> 3)\n\t\t\t\tbitCount &= 7\n\t\t\t\tbitStream = b.Uint32() >> bitCount\n\t\t\t} else {\n\t\t\t\tbitStream >>= 2\n\t\t\t}\n\t\t}\n\n\t\tmax := (2*(threshold) - 1) - (remaining)\n\t\tvar count int32\n\n\t\tif (int32(bitStream) & (threshold - 1)) < max {\n\t\t\tcount = int32(bitStream) & (threshold - 1)\n\t\t\tbitCount += nbBits - 1\n\t\t} else {\n\t\t\tcount = int32(bitStream) & (2*threshold - 1)\n\t\t\tif count >= threshold {\n\t\t\t\tcount -= max\n\t\t\t}\n\t\t\tbitCount += nbBits\n\t\t}\n\n\t\tcount-- // extra accuracy\n\t\tif count < 0 {\n\t\t\t// -1 means +1\n\t\t\tremaining += count\n\t\t\tgotTotal -= count\n\t\t} else {\n\t\t\tremaining -= count\n\t\t\tgotTotal += count\n\t\t}\n\t\ts.norm[charnum&0xff] = int16(count)\n\t\tcharnum++\n\t\tprevious0 = count == 0\n\t\tfor remaining < threshold {\n\t\t\tnbBits--\n\t\t\tthreshold >>= 1\n\t\t}\n\t\tif b.off <= iend-7 || b.off+int(bitCount>>3) <= iend-4 {\n\t\t\tb.advance(bitCount >> 3)\n\t\t\tbitCount &= 7\n\t\t} else {\n\t\t\tbitCount -= (uint)(8 * (len(b.b) - 4 - b.off))\n\t\t\tb.off = len(b.b) - 4\n\t\t}\n\t\tbitStream = b.Uint32() >> (bitCount & 31)\n\t}\n\ts.symbolLen = charnum\n\n\tif s.symbolLen <= 1 {\n\t\treturn fmt.Errorf(\"symbolLen (%d) too small\", s.symbolLen)\n\t}\n\tif s.symbolLen > maxSymbolValue+1 {\n\t\treturn fmt.Errorf(\"symbolLen (%d) too big\", s.symbolLen)\n\t}\n\tif remaining != 1 {\n\t\treturn fmt.Errorf(\"corruption detected (remaining %d != 1)\", remaining)\n\t}\n\tif bitCount > 32 {\n\t\treturn fmt.Errorf(\"corruption detected (bitCount %d > 32)\", bitCount)\n\t}\n\tif gotTotal != 1<<s.actualTableLog {\n\t\treturn fmt.Errorf(\"corruption detected (total %d != %d)\", gotTotal, 1<<s.actualTableLog)\n\t}\n\tb.advance((bitCount + 7) >> 3)\n\treturn nil\n}\n\n// decSymbol contains information about a state entry,\n// Including the state offset base, the output symbol and\n// the number of bits to read for the low part of the destination state.\ntype decSymbol struct {\n\tnewState uint16\n\tsymbol   uint8\n\tnbBits   uint8\n}\n\n// allocDtable will allocate decoding tables if they are not big enough.\nfunc (s *Scratch) allocDtable() {\n\ttableSize := 1 << s.actualTableLog\n\tif cap(s.decTable) < tableSize {\n\t\ts.decTable = make([]decSymbol, tableSize)\n\t}\n\ts.decTable = s.decTable[:tableSize]\n\n\tif cap(s.ct.tableSymbol) < 256 {\n\t\ts.ct.tableSymbol = make([]byte, 256)\n\t}\n\ts.ct.tableSymbol = s.ct.tableSymbol[:256]\n\n\tif cap(s.ct.stateTable) < 256 {\n\t\ts.ct.stateTable = make([]uint16, 256)\n\t}\n\ts.ct.stateTable = s.ct.stateTable[:256]\n}\n\n// buildDtable will build the decoding table.\nfunc (s *Scratch) buildDtable() error {\n\ttableSize := uint32(1 << s.actualTableLog)\n\thighThreshold := tableSize - 1\n\ts.allocDtable()\n\tsymbolNext := s.ct.stateTable[:256]\n\n\t// Init, lay down lowprob symbols\n\ts.zeroBits = false\n\t{\n\t\tlargeLimit := int16(1 << (s.actualTableLog - 1))\n\t\tfor i, v := range s.norm[:s.symbolLen] {\n\t\t\tif v == -1 {\n\t\t\t\ts.decTable[highThreshold].symbol = uint8(i)\n\t\t\t\thighThreshold--\n\t\t\t\tsymbolNext[i] = 1\n\t\t\t} else {\n\t\t\t\tif v >= largeLimit {\n\t\t\t\t\ts.zeroBits = true\n\t\t\t\t}\n\t\t\t\tsymbolNext[i] = uint16(v)\n\t\t\t}\n\t\t}\n\t}\n\t// Spread symbols\n\t{\n\t\ttableMask := tableSize - 1\n\t\tstep := tableStep(tableSize)\n\t\tposition := uint32(0)\n\t\tfor ss, v := range s.norm[:s.symbolLen] {\n\t\t\tfor i := 0; i < int(v); i++ {\n\t\t\t\ts.decTable[position].symbol = uint8(ss)\n\t\t\t\tposition = (position + step) & tableMask\n\t\t\t\tfor position > highThreshold {\n\t\t\t\t\t// lowprob area\n\t\t\t\t\tposition = (position + step) & tableMask\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif position != 0 {\n\t\t\t// position must reach all cells once, otherwise normalizedCounter is incorrect\n\t\t\treturn errors.New(\"corrupted input (position != 0)\")\n\t\t}\n\t}\n\n\t// Build Decoding table\n\t{\n\t\ttableSize := uint16(1 << s.actualTableLog)\n\t\tfor u, v := range s.decTable {\n\t\t\tsymbol := v.symbol\n\t\t\tnextState := symbolNext[symbol]\n\t\t\tsymbolNext[symbol] = nextState + 1\n\t\t\tnBits := s.actualTableLog - byte(highBits(uint32(nextState)))\n\t\t\ts.decTable[u].nbBits = nBits\n\t\t\tnewState := (nextState << nBits) - tableSize\n\t\t\tif newState >= tableSize {\n\t\t\t\treturn fmt.Errorf(\"newState (%d) outside table size (%d)\", newState, tableSize)\n\t\t\t}\n\t\t\tif newState == uint16(u) && nBits == 0 {\n\t\t\t\t// Seems weird that this is possible with nbits > 0.\n\t\t\t\treturn fmt.Errorf(\"newState (%d) == oldState (%d) and no bits\", newState, u)\n\t\t\t}\n\t\t\ts.decTable[u].newState = newState\n\t\t}\n\t}\n\treturn nil\n}\n\n// decompress will decompress the bitstream.\n// If the buffer is over-read an error is returned.\nfunc (s *Scratch) decompress() error {\n\tbr := &s.bits\n\tif err := br.init(s.br.unread()); err != nil {\n\t\treturn err\n\t}\n\n\tvar s1, s2 decoder\n\t// Initialize and decode first state and symbol.\n\ts1.init(br, s.decTable, s.actualTableLog)\n\ts2.init(br, s.decTable, s.actualTableLog)\n\n\t// Use temp table to avoid bound checks/append penalty.\n\tvar tmp = s.ct.tableSymbol[:256]\n\tvar off uint8\n\n\t// Main part\n\tif !s.zeroBits {\n\t\tfor br.off >= 8 {\n\t\t\tbr.fillFast()\n\t\t\ttmp[off+0] = s1.nextFast()\n\t\t\ttmp[off+1] = s2.nextFast()\n\t\t\tbr.fillFast()\n\t\t\ttmp[off+2] = s1.nextFast()\n\t\t\ttmp[off+3] = s2.nextFast()\n\t\t\toff += 4\n\t\t\t// When off is 0, we have overflowed and should write.\n\t\t\tif off == 0 {\n\t\t\t\ts.Out = append(s.Out, tmp...)\n\t\t\t\tif len(s.Out) >= s.DecompressLimit {\n\t\t\t\t\treturn fmt.Errorf(\"output size (%d) > DecompressLimit (%d)\", len(s.Out), s.DecompressLimit)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor br.off >= 8 {\n\t\t\tbr.fillFast()\n\t\t\ttmp[off+0] = s1.next()\n\t\t\ttmp[off+1] = s2.next()\n\t\t\tbr.fillFast()\n\t\t\ttmp[off+2] = s1.next()\n\t\t\ttmp[off+3] = s2.next()\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\ts.Out = append(s.Out, tmp...)\n\t\t\t\t// When off is 0, we have overflowed and should write.\n\t\t\t\tif len(s.Out) >= s.DecompressLimit {\n\t\t\t\t\treturn fmt.Errorf(\"output size (%d) > DecompressLimit (%d)\", len(s.Out), s.DecompressLimit)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\ts.Out = append(s.Out, tmp[:off]...)\n\n\t// Final bits, a bit more expensive check\n\tfor {\n\t\tif s1.finished() {\n\t\t\ts.Out = append(s.Out, s1.final(), s2.final())\n\t\t\tbreak\n\t\t}\n\t\tbr.fill()\n\t\ts.Out = append(s.Out, s1.next())\n\t\tif s2.finished() {\n\t\t\ts.Out = append(s.Out, s2.final(), s1.final())\n\t\t\tbreak\n\t\t}\n\t\ts.Out = append(s.Out, s2.next())\n\t\tif len(s.Out) >= s.DecompressLimit {\n\t\t\treturn fmt.Errorf(\"output size (%d) > DecompressLimit (%d)\", len(s.Out), s.DecompressLimit)\n\t\t}\n\t}\n\treturn br.close()\n}\n\n// decoder keeps track of the current state and updates it from the bitstream.\ntype decoder struct {\n\tstate uint16\n\tbr    *bitReader\n\tdt    []decSymbol\n}\n\n// init will initialize the decoder and read the first state from the stream.\nfunc (d *decoder) init(in *bitReader, dt []decSymbol, tableLog uint8) {\n\td.dt = dt\n\td.br = in\n\td.state = in.getBits(tableLog)\n}\n\n// next returns the next symbol and sets the next state.\n// At least tablelog bits must be available in the bit reader.\nfunc (d *decoder) next() uint8 {\n\tn := &d.dt[d.state]\n\tlowBits := d.br.getBits(n.nbBits)\n\td.state = n.newState + lowBits\n\treturn n.symbol\n}\n\n// finished returns true if all bits have been read from the bitstream\n// and the next state would require reading bits from the input.\nfunc (d *decoder) finished() bool {\n\treturn d.br.finished() && d.dt[d.state].nbBits > 0\n}\n\n// final returns the current state symbol without decoding the next.\nfunc (d *decoder) final() uint8 {\n\treturn d.dt[d.state].symbol\n}\n\n// nextFast returns the next symbol and sets the next state.\n// This can only be used if no symbols are 0 bits.\n// At least tablelog bits must be available in the bit reader.\nfunc (d *decoder) nextFast() uint8 {\n\tn := d.dt[d.state]\n\tlowBits := d.br.getBitsFast(n.nbBits)\n\td.state = n.newState + lowBits\n\treturn n.symbol\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/fse/fse.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\n// Package fse provides Finite State Entropy encoding and decoding.\n//\n// Finite State Entropy encoding provides a fast near-optimal symbol encoding/decoding\n// for byte blocks as implemented in zstd.\n//\n// See https://github.com/klauspost/compress/tree/master/fse for more information.\npackage fse\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math/bits\"\n)\n\nconst (\n\t/*!MEMORY_USAGE :\n\t *  Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)\n\t *  Increasing memory usage improves compression ratio\n\t *  Reduced memory usage can improve speed, due to cache effect\n\t *  Recommended max value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */\n\tmaxMemoryUsage     = 14\n\tdefaultMemoryUsage = 13\n\n\tmaxTableLog     = maxMemoryUsage - 2\n\tmaxTablesize    = 1 << maxTableLog\n\tdefaultTablelog = defaultMemoryUsage - 2\n\tminTablelog     = 5\n\tmaxSymbolValue  = 255\n)\n\nvar (\n\t// ErrIncompressible is returned when input is judged to be too hard to compress.\n\tErrIncompressible = errors.New(\"input is not compressible\")\n\n\t// ErrUseRLE is returned from the compressor when the input is a single byte value repeated.\n\tErrUseRLE = errors.New(\"input is single value repeated\")\n)\n\n// Scratch provides temporary storage for compression and decompression.\ntype Scratch struct {\n\t// Private\n\tcount    [maxSymbolValue + 1]uint32\n\tnorm     [maxSymbolValue + 1]int16\n\tbr       byteReader\n\tbits     bitReader\n\tbw       bitWriter\n\tct       cTable      // Compression tables.\n\tdecTable []decSymbol // Decompression table.\n\tmaxCount int         // count of the most probable symbol\n\n\t// Per block parameters.\n\t// These can be used to override compression parameters of the block.\n\t// Do not touch, unless you know what you are doing.\n\n\t// Out is output buffer.\n\t// If the scratch is re-used before the caller is done processing the output,\n\t// set this field to nil.\n\t// Otherwise the output buffer will be re-used for next Compression/Decompression step\n\t// and allocation will be avoided.\n\tOut []byte\n\n\t// DecompressLimit limits the maximum decoded size acceptable.\n\t// If > 0 decompression will stop when approximately this many bytes\n\t// has been decoded.\n\t// If 0, maximum size will be 2GB.\n\tDecompressLimit int\n\n\tsymbolLen      uint16 // Length of active part of the symbol table.\n\tactualTableLog uint8  // Selected tablelog.\n\tzeroBits       bool   // no bits has prob > 50%.\n\tclearCount     bool   // clear count\n\n\t// MaxSymbolValue will override the maximum symbol value of the next block.\n\tMaxSymbolValue uint8\n\n\t// TableLog will attempt to override the tablelog for the next block.\n\tTableLog uint8\n}\n\n// Histogram allows to populate the histogram and skip that step in the compression,\n// It otherwise allows to inspect the histogram when compression is done.\n// To indicate that you have populated the histogram call HistogramFinished\n// with the value of the highest populated symbol, as well as the number of entries\n// in the most populated entry. These are accepted at face value.\n// The returned slice will always be length 256.\nfunc (s *Scratch) Histogram() []uint32 {\n\treturn s.count[:]\n}\n\n// HistogramFinished can be called to indicate that the histogram has been populated.\n// maxSymbol is the index of the highest set symbol of the next data segment.\n// maxCount is the number of entries in the most populated entry.\n// These are accepted at face value.\nfunc (s *Scratch) HistogramFinished(maxSymbol uint8, maxCount int) {\n\ts.maxCount = maxCount\n\ts.symbolLen = uint16(maxSymbol) + 1\n\ts.clearCount = maxCount != 0\n}\n\n// prepare will prepare and allocate scratch tables used for both compression and decompression.\nfunc (s *Scratch) prepare(in []byte) (*Scratch, error) {\n\tif s == nil {\n\t\ts = &Scratch{}\n\t}\n\tif s.MaxSymbolValue == 0 {\n\t\ts.MaxSymbolValue = 255\n\t}\n\tif s.TableLog == 0 {\n\t\ts.TableLog = defaultTablelog\n\t}\n\tif s.TableLog > maxTableLog {\n\t\treturn nil, fmt.Errorf(\"tableLog (%d) > maxTableLog (%d)\", s.TableLog, maxTableLog)\n\t}\n\tif cap(s.Out) == 0 {\n\t\ts.Out = make([]byte, 0, len(in))\n\t}\n\tif s.clearCount && s.maxCount == 0 {\n\t\tfor i := range s.count {\n\t\t\ts.count[i] = 0\n\t\t}\n\t\ts.clearCount = false\n\t}\n\ts.br.init(in)\n\tif s.DecompressLimit == 0 {\n\t\t// Max size 2GB.\n\t\ts.DecompressLimit = (2 << 30) - 1\n\t}\n\n\treturn s, nil\n}\n\n// tableStep returns the next table index.\nfunc tableStep(tableSize uint32) uint32 {\n\treturn (tableSize >> 1) + (tableSize >> 3) + 3\n}\n\nfunc highBits(val uint32) (n uint32) {\n\treturn uint32(bits.Len32(val) - 1)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/gen.sh",
    "content": "#!/bin/sh\n\ncd s2/cmd/_s2sx/ || exit 1\ngo generate .\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/.gitignore",
    "content": "/huff0-fuzz.zip\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/README.md",
    "content": "# Huff0 entropy compression\r\n\r\nThis package provides Huff0 encoding and decoding as used in zstd.\r\n            \r\n[Huff0](https://github.com/Cyan4973/FiniteStateEntropy#new-generation-entropy-coders), \r\na Huffman codec designed for modern CPU, featuring OoO (Out of Order) operations on multiple ALU \r\n(Arithmetic Logic Unit), achieving extremely fast compression and decompression speeds.\r\n\r\nThis can be used for compressing input with a lot of similar input values to the smallest number of bytes.\r\nThis does not perform any multi-byte [dictionary coding](https://en.wikipedia.org/wiki/Dictionary_coder) as LZ coders,\r\nbut it can be used as a secondary step to compressors (like Snappy) that does not do entropy encoding. \r\n\r\n* [Godoc documentation](https://godoc.org/github.com/klauspost/compress/huff0)\r\n\r\n## News\r\n\r\nThis is used as part of the [zstandard](https://github.com/klauspost/compress/tree/master/zstd#zstd) compression and decompression package.\r\n\r\nThis ensures that most functionality is well tested.\r\n\r\n# Usage\r\n\r\nThis package provides a low level interface that allows to compress single independent blocks. \r\n\r\nEach block is separate, and there is no built in integrity checks. \r\nThis means that the caller should keep track of block sizes and also do checksums if needed.  \r\n\r\nCompressing a block is done via the [`Compress1X`](https://godoc.org/github.com/klauspost/compress/huff0#Compress1X) and \r\n[`Compress4X`](https://godoc.org/github.com/klauspost/compress/huff0#Compress4X) functions.\r\nYou must provide input and will receive the output and maybe an error.\r\n\r\nThese error values can be returned:\r\n\r\n| Error               | Description                                                                 |\r\n|---------------------|-----------------------------------------------------------------------------|\r\n| `<nil>`             | Everything ok, output is returned                                           |\r\n| `ErrIncompressible` | Returned when input is judged to be too hard to compress                    |\r\n| `ErrUseRLE`         | Returned from the compressor when the input is a single byte value repeated |\r\n| `ErrTooBig`         | Returned if the input block exceeds the maximum allowed size (128 Kib)      |\r\n| `(error)`           | An internal error occurred.                                                 |\r\n\r\n\r\nAs can be seen above some of there are errors that will be returned even under normal operation so it is important to handle these.\r\n\r\nTo reduce allocations you can provide a [`Scratch`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch) object \r\nthat can be re-used for successive calls. Both compression and decompression accepts a `Scratch` object, and the same \r\nobject can be used for both.   \r\n\r\nBe aware, that when re-using a `Scratch` object that the *output* buffer is also re-used, so if you are still using this\r\nyou must set the `Out` field in the scratch to nil. The same buffer is used for compression and decompression output.\r\n\r\nThe `Scratch` object will retain state that allows to re-use previous tables for encoding and decoding.  \r\n\r\n## Tables and re-use\r\n\r\nHuff0 allows for reusing tables from the previous block to save space if that is expected to give better/faster results. \r\n\r\nThe Scratch object allows you to set a [`ReusePolicy`](https://godoc.org/github.com/klauspost/compress/huff0#ReusePolicy) \r\nthat controls this behaviour. See the documentation for details. This can be altered between each block.\r\n\r\nDo however note that this information is *not* stored in the output block and it is up to the users of the package to\r\nrecord whether [`ReadTable`](https://godoc.org/github.com/klauspost/compress/huff0#ReadTable) should be called,\r\nbased on the boolean reported back from the CompressXX call. \r\n\r\nIf you want to store the table separate from the data, you can access them as `OutData` and `OutTable` on the \r\n[`Scratch`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch) object.\r\n\r\n## Decompressing\r\n\r\nThe first part of decoding is to initialize the decoding table through [`ReadTable`](https://godoc.org/github.com/klauspost/compress/huff0#ReadTable).\r\nThis will initialize the decoding tables. \r\nYou can supply the complete block to `ReadTable` and it will return the data part of the block \r\nwhich can be given to the decompressor. \r\n\r\nDecompressing is done by calling the [`Decompress1X`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch.Decompress1X) \r\nor [`Decompress4X`](https://godoc.org/github.com/klauspost/compress/huff0#Scratch.Decompress4X) function.\r\n\r\nFor concurrently decompressing content with a fixed table a stateless [`Decoder`](https://godoc.org/github.com/klauspost/compress/huff0#Decoder) can be requested which will remain correct as long as the scratch is unchanged. The capacity of the provided slice indicates the expected output size.\r\n\r\nYou must provide the output from the compression stage, at exactly the size you got back. If you receive an error back\r\nyour input was likely corrupted. \r\n\r\nIt is important to note that a successful decoding does *not* mean your output matches your original input. \r\nThere are no integrity checks, so relying on errors from the decompressor does not assure your data is valid.\r\n\r\n# Contributing\r\n\r\nContributions are always welcome. Be aware that adding public functions will require good justification and breaking \r\nchanges will likely not be accepted. If in doubt open an issue before writing the PR.\r\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/bitreader.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\npackage huff0\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// bitReader reads a bitstream in reverse.\n// The last set bit indicates the start of the stream and is used\n// for aligning the input.\ntype bitReaderBytes struct {\n\tin       []byte\n\toff      uint // next byte to read is at in[off - 1]\n\tvalue    uint64\n\tbitsRead uint8\n}\n\n// init initializes and resets the bit reader.\nfunc (b *bitReaderBytes) init(in []byte) error {\n\tif len(in) < 1 {\n\t\treturn errors.New(\"corrupt stream: too short\")\n\t}\n\tb.in = in\n\tb.off = uint(len(in))\n\t// The highest bit of the last byte indicates where to start\n\tv := in[len(in)-1]\n\tif v == 0 {\n\t\treturn errors.New(\"corrupt stream, did not find end of stream\")\n\t}\n\tb.bitsRead = 64\n\tb.value = 0\n\tif len(in) >= 8 {\n\t\tb.fillFastStart()\n\t} else {\n\t\tb.fill()\n\t\tb.fill()\n\t}\n\tb.advance(8 - uint8(highBit32(uint32(v))))\n\treturn nil\n}\n\n// peekBitsFast requires that at least one bit is requested every time.\n// There are no checks if the buffer is filled.\nfunc (b *bitReaderBytes) peekByteFast() uint8 {\n\tgot := uint8(b.value >> 56)\n\treturn got\n}\n\nfunc (b *bitReaderBytes) advance(n uint8) {\n\tb.bitsRead += n\n\tb.value <<= n & 63\n}\n\n// fillFast() will make sure at least 32 bits are available.\n// There must be at least 4 bytes available.\nfunc (b *bitReaderBytes) fillFast() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\n\t// 2 bounds checks.\n\tv := b.in[b.off-4 : b.off]\n\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\tb.value |= uint64(low) << (b.bitsRead - 32)\n\tb.bitsRead -= 32\n\tb.off -= 4\n}\n\n// fillFastStart() assumes the bitReaderBytes is empty and there is at least 8 bytes to read.\nfunc (b *bitReaderBytes) fillFastStart() {\n\t// Do single re-slice to avoid bounds checks.\n\tb.value = binary.LittleEndian.Uint64(b.in[b.off-8:])\n\tb.bitsRead = 0\n\tb.off -= 8\n}\n\n// fill() will make sure at least 32 bits are available.\nfunc (b *bitReaderBytes) fill() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\tif b.off > 4 {\n\t\tv := b.in[b.off-4 : b.off]\n\t\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\t\tb.value |= uint64(low) << (b.bitsRead - 32)\n\t\tb.bitsRead -= 32\n\t\tb.off -= 4\n\t\treturn\n\t}\n\tfor b.off > 0 {\n\t\tb.value |= uint64(b.in[b.off-1]) << (b.bitsRead - 8)\n\t\tb.bitsRead -= 8\n\t\tb.off--\n\t}\n}\n\n// finished returns true if all bits have been read from the bit stream.\nfunc (b *bitReaderBytes) finished() bool {\n\treturn b.off == 0 && b.bitsRead >= 64\n}\n\nfunc (b *bitReaderBytes) remaining() uint {\n\treturn b.off*8 + uint(64-b.bitsRead)\n}\n\n// close the bitstream and returns an error if out-of-buffer reads occurred.\nfunc (b *bitReaderBytes) close() error {\n\t// Release reference.\n\tb.in = nil\n\tif b.remaining() > 0 {\n\t\treturn fmt.Errorf(\"corrupt input: %d bits remain on stream\", b.remaining())\n\t}\n\tif b.bitsRead > 64 {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\n// bitReaderShifted reads a bitstream in reverse.\n// The last set bit indicates the start of the stream and is used\n// for aligning the input.\ntype bitReaderShifted struct {\n\tin       []byte\n\toff      uint // next byte to read is at in[off - 1]\n\tvalue    uint64\n\tbitsRead uint8\n}\n\n// init initializes and resets the bit reader.\nfunc (b *bitReaderShifted) init(in []byte) error {\n\tif len(in) < 1 {\n\t\treturn errors.New(\"corrupt stream: too short\")\n\t}\n\tb.in = in\n\tb.off = uint(len(in))\n\t// The highest bit of the last byte indicates where to start\n\tv := in[len(in)-1]\n\tif v == 0 {\n\t\treturn errors.New(\"corrupt stream, did not find end of stream\")\n\t}\n\tb.bitsRead = 64\n\tb.value = 0\n\tif len(in) >= 8 {\n\t\tb.fillFastStart()\n\t} else {\n\t\tb.fill()\n\t\tb.fill()\n\t}\n\tb.advance(8 - uint8(highBit32(uint32(v))))\n\treturn nil\n}\n\n// peekBitsFast requires that at least one bit is requested every time.\n// There are no checks if the buffer is filled.\nfunc (b *bitReaderShifted) peekBitsFast(n uint8) uint16 {\n\treturn uint16(b.value >> ((64 - n) & 63))\n}\n\nfunc (b *bitReaderShifted) advance(n uint8) {\n\tb.bitsRead += n\n\tb.value <<= n & 63\n}\n\n// fillFast() will make sure at least 32 bits are available.\n// There must be at least 4 bytes available.\nfunc (b *bitReaderShifted) fillFast() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\n\t// 2 bounds checks.\n\tv := b.in[b.off-4 : b.off]\n\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\tb.value |= uint64(low) << ((b.bitsRead - 32) & 63)\n\tb.bitsRead -= 32\n\tb.off -= 4\n}\n\n// fillFastStart() assumes the bitReaderShifted is empty and there is at least 8 bytes to read.\nfunc (b *bitReaderShifted) fillFastStart() {\n\t// Do single re-slice to avoid bounds checks.\n\tb.value = binary.LittleEndian.Uint64(b.in[b.off-8:])\n\tb.bitsRead = 0\n\tb.off -= 8\n}\n\n// fill() will make sure at least 32 bits are available.\nfunc (b *bitReaderShifted) fill() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\tif b.off > 4 {\n\t\tv := b.in[b.off-4 : b.off]\n\t\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\t\tb.value |= uint64(low) << ((b.bitsRead - 32) & 63)\n\t\tb.bitsRead -= 32\n\t\tb.off -= 4\n\t\treturn\n\t}\n\tfor b.off > 0 {\n\t\tb.value |= uint64(b.in[b.off-1]) << ((b.bitsRead - 8) & 63)\n\t\tb.bitsRead -= 8\n\t\tb.off--\n\t}\n}\n\nfunc (b *bitReaderShifted) remaining() uint {\n\treturn b.off*8 + uint(64-b.bitsRead)\n}\n\n// close the bitstream and returns an error if out-of-buffer reads occurred.\nfunc (b *bitReaderShifted) close() error {\n\t// Release reference.\n\tb.in = nil\n\tif b.remaining() > 0 {\n\t\treturn fmt.Errorf(\"corrupt input: %d bits remain on stream\", b.remaining())\n\t}\n\tif b.bitsRead > 64 {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/bitwriter.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\npackage huff0\n\n// bitWriter will write bits.\n// First bit will be LSB of the first byte of output.\ntype bitWriter struct {\n\tbitContainer uint64\n\tnBits        uint8\n\tout          []byte\n}\n\n// addBits16Clean will add up to 16 bits. value may not contain more set bits than indicated.\n// It will not check if there is space for them, so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) addBits16Clean(value uint16, bits uint8) {\n\tb.bitContainer |= uint64(value) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// encSymbol will add up to 16 bits. value may not contain more set bits than indicated.\n// It will not check if there is space for them, so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) encSymbol(ct cTable, symbol byte) {\n\tenc := ct[symbol]\n\tb.bitContainer |= uint64(enc.val) << (b.nBits & 63)\n\tif false {\n\t\tif enc.nBits == 0 {\n\t\t\tpanic(\"nbits 0\")\n\t\t}\n\t}\n\tb.nBits += enc.nBits\n}\n\n// encTwoSymbols will add up to 32 bits. value may not contain more set bits than indicated.\n// It will not check if there is space for them, so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) encTwoSymbols(ct cTable, av, bv byte) {\n\tencA := ct[av]\n\tencB := ct[bv]\n\tsh := b.nBits & 63\n\tcombined := uint64(encA.val) | (uint64(encB.val) << (encA.nBits & 63))\n\tb.bitContainer |= combined << sh\n\tif false {\n\t\tif encA.nBits == 0 {\n\t\t\tpanic(\"nbitsA 0\")\n\t\t}\n\t\tif encB.nBits == 0 {\n\t\t\tpanic(\"nbitsB 0\")\n\t\t}\n\t}\n\tb.nBits += encA.nBits + encB.nBits\n}\n\n// encFourSymbols adds up to 32 bits from four symbols.\n// It will not check if there is space for them,\n// so the caller must ensure that b has been flushed recently.\nfunc (b *bitWriter) encFourSymbols(encA, encB, encC, encD cTableEntry) {\n\tbitsA := encA.nBits\n\tbitsB := bitsA + encB.nBits\n\tbitsC := bitsB + encC.nBits\n\tbitsD := bitsC + encD.nBits\n\tcombined := uint64(encA.val) |\n\t\t(uint64(encB.val) << (bitsA & 63)) |\n\t\t(uint64(encC.val) << (bitsB & 63)) |\n\t\t(uint64(encD.val) << (bitsC & 63))\n\tb.bitContainer |= combined << (b.nBits & 63)\n\tb.nBits += bitsD\n}\n\n// flush32 will flush out, so there are at least 32 bits available for writing.\nfunc (b *bitWriter) flush32() {\n\tif b.nBits < 32 {\n\t\treturn\n\t}\n\tb.out = append(b.out,\n\t\tbyte(b.bitContainer),\n\t\tbyte(b.bitContainer>>8),\n\t\tbyte(b.bitContainer>>16),\n\t\tbyte(b.bitContainer>>24))\n\tb.nBits -= 32\n\tb.bitContainer >>= 32\n}\n\n// flushAlign will flush remaining full bytes and align to next byte boundary.\nfunc (b *bitWriter) flushAlign() {\n\tnbBytes := (b.nBits + 7) >> 3\n\tfor i := uint8(0); i < nbBytes; i++ {\n\t\tb.out = append(b.out, byte(b.bitContainer>>(i*8)))\n\t}\n\tb.nBits = 0\n\tb.bitContainer = 0\n}\n\n// close will write the alignment bit and write the final byte(s)\n// to the output.\nfunc (b *bitWriter) close() {\n\t// End mark\n\tb.addBits16Clean(1, 1)\n\t// flush until next byte.\n\tb.flushAlign()\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/compress.go",
    "content": "package huff0\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"runtime\"\n\t\"sync\"\n)\n\n// Compress1X will compress the input.\n// The output can be decoded using Decompress1X.\n// Supply a Scratch object. The scratch object contains state about re-use,\n// So when sharing across independent encodes, be sure to set the re-use policy.\nfunc Compress1X(in []byte, s *Scratch) (out []byte, reUsed bool, err error) {\n\ts, err = s.prepare(in)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\treturn compress(in, s, s.compress1X)\n}\n\n// Compress4X will compress the input. The input is split into 4 independent blocks\n// and compressed similar to Compress1X.\n// The output can be decoded using Decompress4X.\n// Supply a Scratch object. The scratch object contains state about re-use,\n// So when sharing across independent encodes, be sure to set the re-use policy.\nfunc Compress4X(in []byte, s *Scratch) (out []byte, reUsed bool, err error) {\n\ts, err = s.prepare(in)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\tif false {\n\t\t// TODO: compress4Xp only slightly faster.\n\t\tconst parallelThreshold = 8 << 10\n\t\tif len(in) < parallelThreshold || runtime.GOMAXPROCS(0) == 1 {\n\t\t\treturn compress(in, s, s.compress4X)\n\t\t}\n\t\treturn compress(in, s, s.compress4Xp)\n\t}\n\treturn compress(in, s, s.compress4X)\n}\n\nfunc compress(in []byte, s *Scratch, compressor func(src []byte) ([]byte, error)) (out []byte, reUsed bool, err error) {\n\t// Nuke previous table if we cannot reuse anyway.\n\tif s.Reuse == ReusePolicyNone {\n\t\ts.prevTable = s.prevTable[:0]\n\t}\n\n\t// Create histogram, if none was provided.\n\tmaxCount := s.maxCount\n\tvar canReuse = false\n\tif maxCount == 0 {\n\t\tmaxCount, canReuse = s.countSimple(in)\n\t} else {\n\t\tcanReuse = s.canUseTable(s.prevTable)\n\t}\n\n\t// We want the output size to be less than this:\n\twantSize := len(in)\n\tif s.WantLogLess > 0 {\n\t\twantSize -= wantSize >> s.WantLogLess\n\t}\n\n\t// Reset for next run.\n\ts.clearCount = true\n\ts.maxCount = 0\n\tif maxCount >= len(in) {\n\t\tif maxCount > len(in) {\n\t\t\treturn nil, false, fmt.Errorf(\"maxCount (%d) > length (%d)\", maxCount, len(in))\n\t\t}\n\t\tif len(in) == 1 {\n\t\t\treturn nil, false, ErrIncompressible\n\t\t}\n\t\t// One symbol, use RLE\n\t\treturn nil, false, ErrUseRLE\n\t}\n\tif maxCount == 1 || maxCount < (len(in)>>7) {\n\t\t// Each symbol present maximum once or too well distributed.\n\t\treturn nil, false, ErrIncompressible\n\t}\n\tif s.Reuse == ReusePolicyMust && !canReuse {\n\t\t// We must reuse, but we can't.\n\t\treturn nil, false, ErrIncompressible\n\t}\n\tif (s.Reuse == ReusePolicyPrefer || s.Reuse == ReusePolicyMust) && canReuse {\n\t\tkeepTable := s.cTable\n\t\tkeepTL := s.actualTableLog\n\t\ts.cTable = s.prevTable\n\t\ts.actualTableLog = s.prevTableLog\n\t\ts.Out, err = compressor(in)\n\t\ts.cTable = keepTable\n\t\ts.actualTableLog = keepTL\n\t\tif err == nil && len(s.Out) < wantSize {\n\t\t\ts.OutData = s.Out\n\t\t\treturn s.Out, true, nil\n\t\t}\n\t\tif s.Reuse == ReusePolicyMust {\n\t\t\treturn nil, false, ErrIncompressible\n\t\t}\n\t\t// Do not attempt to re-use later.\n\t\ts.prevTable = s.prevTable[:0]\n\t}\n\n\t// Calculate new table.\n\terr = s.buildCTable()\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\n\tif false && !s.canUseTable(s.cTable) {\n\t\tpanic(\"invalid table generated\")\n\t}\n\n\tif s.Reuse == ReusePolicyAllow && canReuse {\n\t\thSize := len(s.Out)\n\t\toldSize := s.prevTable.estimateSize(s.count[:s.symbolLen])\n\t\tnewSize := s.cTable.estimateSize(s.count[:s.symbolLen])\n\t\tif oldSize <= hSize+newSize || hSize+12 >= wantSize {\n\t\t\t// Retain cTable even if we re-use.\n\t\t\tkeepTable := s.cTable\n\t\t\tkeepTL := s.actualTableLog\n\n\t\t\ts.cTable = s.prevTable\n\t\t\ts.actualTableLog = s.prevTableLog\n\t\t\ts.Out, err = compressor(in)\n\n\t\t\t// Restore ctable.\n\t\t\ts.cTable = keepTable\n\t\t\ts.actualTableLog = keepTL\n\t\t\tif err != nil {\n\t\t\t\treturn nil, false, err\n\t\t\t}\n\t\t\tif len(s.Out) >= wantSize {\n\t\t\t\treturn nil, false, ErrIncompressible\n\t\t\t}\n\t\t\ts.OutData = s.Out\n\t\t\treturn s.Out, true, nil\n\t\t}\n\t}\n\n\t// Use new table\n\terr = s.cTable.write(s)\n\tif err != nil {\n\t\ts.OutTable = nil\n\t\treturn nil, false, err\n\t}\n\ts.OutTable = s.Out\n\n\t// Compress using new table\n\ts.Out, err = compressor(in)\n\tif err != nil {\n\t\ts.OutTable = nil\n\t\treturn nil, false, err\n\t}\n\tif len(s.Out) >= wantSize {\n\t\ts.OutTable = nil\n\t\treturn nil, false, ErrIncompressible\n\t}\n\t// Move current table into previous.\n\ts.prevTable, s.prevTableLog, s.cTable = s.cTable, s.actualTableLog, s.prevTable[:0]\n\ts.OutData = s.Out[len(s.OutTable):]\n\treturn s.Out, false, nil\n}\n\n// EstimateSizes will estimate the data sizes\nfunc EstimateSizes(in []byte, s *Scratch) (tableSz, dataSz, reuseSz int, err error) {\n\ts, err = s.prepare(in)\n\tif err != nil {\n\t\treturn 0, 0, 0, err\n\t}\n\n\t// Create histogram, if none was provided.\n\ttableSz, dataSz, reuseSz = -1, -1, -1\n\tmaxCount := s.maxCount\n\tvar canReuse = false\n\tif maxCount == 0 {\n\t\tmaxCount, canReuse = s.countSimple(in)\n\t} else {\n\t\tcanReuse = s.canUseTable(s.prevTable)\n\t}\n\n\t// We want the output size to be less than this:\n\twantSize := len(in)\n\tif s.WantLogLess > 0 {\n\t\twantSize -= wantSize >> s.WantLogLess\n\t}\n\n\t// Reset for next run.\n\ts.clearCount = true\n\ts.maxCount = 0\n\tif maxCount >= len(in) {\n\t\tif maxCount > len(in) {\n\t\t\treturn 0, 0, 0, fmt.Errorf(\"maxCount (%d) > length (%d)\", maxCount, len(in))\n\t\t}\n\t\tif len(in) == 1 {\n\t\t\treturn 0, 0, 0, ErrIncompressible\n\t\t}\n\t\t// One symbol, use RLE\n\t\treturn 0, 0, 0, ErrUseRLE\n\t}\n\tif maxCount == 1 || maxCount < (len(in)>>7) {\n\t\t// Each symbol present maximum once or too well distributed.\n\t\treturn 0, 0, 0, ErrIncompressible\n\t}\n\n\t// Calculate new table.\n\terr = s.buildCTable()\n\tif err != nil {\n\t\treturn 0, 0, 0, err\n\t}\n\n\tif false && !s.canUseTable(s.cTable) {\n\t\tpanic(\"invalid table generated\")\n\t}\n\n\ttableSz, err = s.cTable.estTableSize(s)\n\tif err != nil {\n\t\treturn 0, 0, 0, err\n\t}\n\tif canReuse {\n\t\treuseSz = s.prevTable.estimateSize(s.count[:s.symbolLen])\n\t}\n\tdataSz = s.cTable.estimateSize(s.count[:s.symbolLen])\n\n\t// Restore\n\treturn tableSz, dataSz, reuseSz, nil\n}\n\nfunc (s *Scratch) compress1X(src []byte) ([]byte, error) {\n\treturn s.compress1xDo(s.Out, src), nil\n}\n\nfunc (s *Scratch) compress1xDo(dst, src []byte) []byte {\n\tvar bw = bitWriter{out: dst}\n\n\t// N is length divisible by 4.\n\tn := len(src)\n\tn -= n & 3\n\tcTable := s.cTable[:256]\n\n\t// Encode last bytes.\n\tfor i := len(src) & 3; i > 0; i-- {\n\t\tbw.encSymbol(cTable, src[n+i-1])\n\t}\n\tn -= 4\n\tif s.actualTableLog <= 8 {\n\t\tfor ; n >= 0; n -= 4 {\n\t\t\ttmp := src[n : n+4]\n\t\t\t// tmp should be len 4\n\t\t\tbw.flush32()\n\t\t\tbw.encFourSymbols(cTable[tmp[3]], cTable[tmp[2]], cTable[tmp[1]], cTable[tmp[0]])\n\t\t}\n\t} else {\n\t\tfor ; n >= 0; n -= 4 {\n\t\t\ttmp := src[n : n+4]\n\t\t\t// tmp should be len 4\n\t\t\tbw.flush32()\n\t\t\tbw.encTwoSymbols(cTable, tmp[3], tmp[2])\n\t\t\tbw.flush32()\n\t\t\tbw.encTwoSymbols(cTable, tmp[1], tmp[0])\n\t\t}\n\t}\n\tbw.close()\n\treturn bw.out\n}\n\nvar sixZeros [6]byte\n\nfunc (s *Scratch) compress4X(src []byte) ([]byte, error) {\n\tif len(src) < 12 {\n\t\treturn nil, ErrIncompressible\n\t}\n\tsegmentSize := (len(src) + 3) / 4\n\n\t// Add placeholder for output length\n\toffsetIdx := len(s.Out)\n\ts.Out = append(s.Out, sixZeros[:]...)\n\n\tfor i := 0; i < 4; i++ {\n\t\ttoDo := src\n\t\tif len(toDo) > segmentSize {\n\t\t\ttoDo = toDo[:segmentSize]\n\t\t}\n\t\tsrc = src[len(toDo):]\n\n\t\tidx := len(s.Out)\n\t\ts.Out = s.compress1xDo(s.Out, toDo)\n\t\tif len(s.Out)-idx > math.MaxUint16 {\n\t\t\t// We cannot store the size in the jump table\n\t\t\treturn nil, ErrIncompressible\n\t\t}\n\t\t// Write compressed length as little endian before block.\n\t\tif i < 3 {\n\t\t\t// Last length is not written.\n\t\t\tlength := len(s.Out) - idx\n\t\t\ts.Out[i*2+offsetIdx] = byte(length)\n\t\t\ts.Out[i*2+offsetIdx+1] = byte(length >> 8)\n\t\t}\n\t}\n\n\treturn s.Out, nil\n}\n\n// compress4Xp will compress 4 streams using separate goroutines.\nfunc (s *Scratch) compress4Xp(src []byte) ([]byte, error) {\n\tif len(src) < 12 {\n\t\treturn nil, ErrIncompressible\n\t}\n\t// Add placeholder for output length\n\ts.Out = s.Out[:6]\n\n\tsegmentSize := (len(src) + 3) / 4\n\tvar wg sync.WaitGroup\n\twg.Add(4)\n\tfor i := 0; i < 4; i++ {\n\t\ttoDo := src\n\t\tif len(toDo) > segmentSize {\n\t\t\ttoDo = toDo[:segmentSize]\n\t\t}\n\t\tsrc = src[len(toDo):]\n\n\t\t// Separate goroutine for each block.\n\t\tgo func(i int) {\n\t\t\ts.tmpOut[i] = s.compress1xDo(s.tmpOut[i][:0], toDo)\n\t\t\twg.Done()\n\t\t}(i)\n\t}\n\twg.Wait()\n\tfor i := 0; i < 4; i++ {\n\t\to := s.tmpOut[i]\n\t\tif len(o) > math.MaxUint16 {\n\t\t\t// We cannot store the size in the jump table\n\t\t\treturn nil, ErrIncompressible\n\t\t}\n\t\t// Write compressed length as little endian before block.\n\t\tif i < 3 {\n\t\t\t// Last length is not written.\n\t\t\ts.Out[i*2] = byte(len(o))\n\t\t\ts.Out[i*2+1] = byte(len(o) >> 8)\n\t\t}\n\n\t\t// Write output.\n\t\ts.Out = append(s.Out, o...)\n\t}\n\treturn s.Out, nil\n}\n\n// countSimple will create a simple histogram in s.count.\n// Returns the biggest count.\n// Does not update s.clearCount.\nfunc (s *Scratch) countSimple(in []byte) (max int, reuse bool) {\n\treuse = true\n\t_ = s.count // Assert that s != nil to speed up the following loop.\n\tfor _, v := range in {\n\t\ts.count[v]++\n\t}\n\tm := uint32(0)\n\tif len(s.prevTable) > 0 {\n\t\tfor i, v := range s.count[:] {\n\t\t\tif v == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif v > m {\n\t\t\t\tm = v\n\t\t\t}\n\t\t\ts.symbolLen = uint16(i) + 1\n\t\t\tif i >= len(s.prevTable) {\n\t\t\t\treuse = false\n\t\t\t} else if s.prevTable[i].nBits == 0 {\n\t\t\t\treuse = false\n\t\t\t}\n\t\t}\n\t\treturn int(m), reuse\n\t}\n\tfor i, v := range s.count[:] {\n\t\tif v == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif v > m {\n\t\t\tm = v\n\t\t}\n\t\ts.symbolLen = uint16(i) + 1\n\t}\n\treturn int(m), false\n}\n\nfunc (s *Scratch) canUseTable(c cTable) bool {\n\tif len(c) < int(s.symbolLen) {\n\t\treturn false\n\t}\n\tfor i, v := range s.count[:s.symbolLen] {\n\t\tif v != 0 && c[i].nBits == 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n//lint:ignore U1000 used for debugging\nfunc (s *Scratch) validateTable(c cTable) bool {\n\tif len(c) < int(s.symbolLen) {\n\t\treturn false\n\t}\n\tfor i, v := range s.count[:s.symbolLen] {\n\t\tif v != 0 {\n\t\t\tif c[i].nBits == 0 {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif c[i].nBits > s.actualTableLog {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// minTableLog provides the minimum logSize to safely represent a distribution.\nfunc (s *Scratch) minTableLog() uint8 {\n\tminBitsSrc := highBit32(uint32(s.srcLen)) + 1\n\tminBitsSymbols := highBit32(uint32(s.symbolLen-1)) + 2\n\tif minBitsSrc < minBitsSymbols {\n\t\treturn uint8(minBitsSrc)\n\t}\n\treturn uint8(minBitsSymbols)\n}\n\n// optimalTableLog calculates and sets the optimal tableLog in s.actualTableLog\nfunc (s *Scratch) optimalTableLog() {\n\ttableLog := s.TableLog\n\tminBits := s.minTableLog()\n\tmaxBitsSrc := uint8(highBit32(uint32(s.srcLen-1))) - 1\n\tif maxBitsSrc < tableLog {\n\t\t// Accuracy can be reduced\n\t\ttableLog = maxBitsSrc\n\t}\n\tif minBits > tableLog {\n\t\ttableLog = minBits\n\t}\n\t// Need a minimum to safely represent all symbol values\n\tif tableLog < minTablelog {\n\t\ttableLog = minTablelog\n\t}\n\tif tableLog > tableLogMax {\n\t\ttableLog = tableLogMax\n\t}\n\ts.actualTableLog = tableLog\n}\n\ntype cTableEntry struct {\n\tval   uint16\n\tnBits uint8\n\t// We have 8 bits extra\n}\n\nconst huffNodesMask = huffNodesLen - 1\n\nfunc (s *Scratch) buildCTable() error {\n\ts.optimalTableLog()\n\ts.huffSort()\n\tif cap(s.cTable) < maxSymbolValue+1 {\n\t\ts.cTable = make([]cTableEntry, s.symbolLen, maxSymbolValue+1)\n\t} else {\n\t\ts.cTable = s.cTable[:s.symbolLen]\n\t\tfor i := range s.cTable {\n\t\t\ts.cTable[i] = cTableEntry{}\n\t\t}\n\t}\n\n\tvar startNode = int16(s.symbolLen)\n\tnonNullRank := s.symbolLen - 1\n\n\tnodeNb := startNode\n\thuffNode := s.nodes[1 : huffNodesLen+1]\n\n\t// This overlays the slice above, but allows \"-1\" index lookups.\n\t// Different from reference implementation.\n\thuffNode0 := s.nodes[0 : huffNodesLen+1]\n\n\tfor huffNode[nonNullRank].count() == 0 {\n\t\tnonNullRank--\n\t}\n\n\tlowS := int16(nonNullRank)\n\tnodeRoot := nodeNb + lowS - 1\n\tlowN := nodeNb\n\thuffNode[nodeNb].setCount(huffNode[lowS].count() + huffNode[lowS-1].count())\n\thuffNode[lowS].setParent(nodeNb)\n\thuffNode[lowS-1].setParent(nodeNb)\n\tnodeNb++\n\tlowS -= 2\n\tfor n := nodeNb; n <= nodeRoot; n++ {\n\t\thuffNode[n].setCount(1 << 30)\n\t}\n\t// fake entry, strong barrier\n\thuffNode0[0].setCount(1 << 31)\n\n\t// create parents\n\tfor nodeNb <= nodeRoot {\n\t\tvar n1, n2 int16\n\t\tif huffNode0[lowS+1].count() < huffNode0[lowN+1].count() {\n\t\t\tn1 = lowS\n\t\t\tlowS--\n\t\t} else {\n\t\t\tn1 = lowN\n\t\t\tlowN++\n\t\t}\n\t\tif huffNode0[lowS+1].count() < huffNode0[lowN+1].count() {\n\t\t\tn2 = lowS\n\t\t\tlowS--\n\t\t} else {\n\t\t\tn2 = lowN\n\t\t\tlowN++\n\t\t}\n\n\t\thuffNode[nodeNb].setCount(huffNode0[n1+1].count() + huffNode0[n2+1].count())\n\t\thuffNode0[n1+1].setParent(nodeNb)\n\t\thuffNode0[n2+1].setParent(nodeNb)\n\t\tnodeNb++\n\t}\n\n\t// distribute weights (unlimited tree height)\n\thuffNode[nodeRoot].setNbBits(0)\n\tfor n := nodeRoot - 1; n >= startNode; n-- {\n\t\thuffNode[n].setNbBits(huffNode[huffNode[n].parent()].nbBits() + 1)\n\t}\n\tfor n := uint16(0); n <= nonNullRank; n++ {\n\t\thuffNode[n].setNbBits(huffNode[huffNode[n].parent()].nbBits() + 1)\n\t}\n\ts.actualTableLog = s.setMaxHeight(int(nonNullRank))\n\tmaxNbBits := s.actualTableLog\n\n\t// fill result into tree (val, nbBits)\n\tif maxNbBits > tableLogMax {\n\t\treturn fmt.Errorf(\"internal error: maxNbBits (%d) > tableLogMax (%d)\", maxNbBits, tableLogMax)\n\t}\n\tvar nbPerRank [tableLogMax + 1]uint16\n\tvar valPerRank [16]uint16\n\tfor _, v := range huffNode[:nonNullRank+1] {\n\t\tnbPerRank[v.nbBits()]++\n\t}\n\t// determine stating value per rank\n\t{\n\t\tmin := uint16(0)\n\t\tfor n := maxNbBits; n > 0; n-- {\n\t\t\t// get starting value within each rank\n\t\t\tvalPerRank[n] = min\n\t\t\tmin += nbPerRank[n]\n\t\t\tmin >>= 1\n\t\t}\n\t}\n\n\t// push nbBits per symbol, symbol order\n\tfor _, v := range huffNode[:nonNullRank+1] {\n\t\ts.cTable[v.symbol()].nBits = v.nbBits()\n\t}\n\n\t// assign value within rank, symbol order\n\tt := s.cTable[:s.symbolLen]\n\tfor n, val := range t {\n\t\tnbits := val.nBits & 15\n\t\tv := valPerRank[nbits]\n\t\tt[n].val = v\n\t\tvalPerRank[nbits] = v + 1\n\t}\n\n\treturn nil\n}\n\n// huffSort will sort symbols, decreasing order.\nfunc (s *Scratch) huffSort() {\n\ttype rankPos struct {\n\t\tbase    uint32\n\t\tcurrent uint32\n\t}\n\n\t// Clear nodes\n\tnodes := s.nodes[:huffNodesLen+1]\n\ts.nodes = nodes\n\tnodes = nodes[1 : huffNodesLen+1]\n\n\t// Sort into buckets based on length of symbol count.\n\tvar rank [32]rankPos\n\tfor _, v := range s.count[:s.symbolLen] {\n\t\tr := highBit32(v+1) & 31\n\t\trank[r].base++\n\t}\n\t// maxBitLength is log2(BlockSizeMax) + 1\n\tconst maxBitLength = 18 + 1\n\tfor n := maxBitLength; n > 0; n-- {\n\t\trank[n-1].base += rank[n].base\n\t}\n\tfor n := range rank[:maxBitLength] {\n\t\trank[n].current = rank[n].base\n\t}\n\tfor n, c := range s.count[:s.symbolLen] {\n\t\tr := (highBit32(c+1) + 1) & 31\n\t\tpos := rank[r].current\n\t\trank[r].current++\n\t\tprev := nodes[(pos-1)&huffNodesMask]\n\t\tfor pos > rank[r].base && c > prev.count() {\n\t\t\tnodes[pos&huffNodesMask] = prev\n\t\t\tpos--\n\t\t\tprev = nodes[(pos-1)&huffNodesMask]\n\t\t}\n\t\tnodes[pos&huffNodesMask] = makeNodeElt(c, byte(n))\n\t}\n}\n\nfunc (s *Scratch) setMaxHeight(lastNonNull int) uint8 {\n\tmaxNbBits := s.actualTableLog\n\thuffNode := s.nodes[1 : huffNodesLen+1]\n\t//huffNode = huffNode[: huffNodesLen]\n\n\tlargestBits := huffNode[lastNonNull].nbBits()\n\n\t// early exit : no elt > maxNbBits\n\tif largestBits <= maxNbBits {\n\t\treturn largestBits\n\t}\n\ttotalCost := int(0)\n\tbaseCost := int(1) << (largestBits - maxNbBits)\n\tn := uint32(lastNonNull)\n\n\tfor huffNode[n].nbBits() > maxNbBits {\n\t\ttotalCost += baseCost - (1 << (largestBits - huffNode[n].nbBits()))\n\t\thuffNode[n].setNbBits(maxNbBits)\n\t\tn--\n\t}\n\t// n stops at huffNode[n].nbBits <= maxNbBits\n\n\tfor huffNode[n].nbBits() == maxNbBits {\n\t\tn--\n\t}\n\t// n end at index of smallest symbol using < maxNbBits\n\n\t// renorm totalCost\n\ttotalCost >>= largestBits - maxNbBits /* note : totalCost is necessarily a multiple of baseCost */\n\n\t// repay normalized cost\n\t{\n\t\tconst noSymbol = 0xF0F0F0F0\n\t\tvar rankLast [tableLogMax + 2]uint32\n\n\t\tfor i := range rankLast[:] {\n\t\t\trankLast[i] = noSymbol\n\t\t}\n\n\t\t// Get pos of last (smallest) symbol per rank\n\t\t{\n\t\t\tcurrentNbBits := maxNbBits\n\t\t\tfor pos := int(n); pos >= 0; pos-- {\n\t\t\t\tif huffNode[pos].nbBits() >= currentNbBits {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcurrentNbBits = huffNode[pos].nbBits() // < maxNbBits\n\t\t\t\trankLast[maxNbBits-currentNbBits] = uint32(pos)\n\t\t\t}\n\t\t}\n\n\t\tfor totalCost > 0 {\n\t\t\tnBitsToDecrease := uint8(highBit32(uint32(totalCost))) + 1\n\n\t\t\tfor ; nBitsToDecrease > 1; nBitsToDecrease-- {\n\t\t\t\thighPos := rankLast[nBitsToDecrease]\n\t\t\t\tlowPos := rankLast[nBitsToDecrease-1]\n\t\t\t\tif highPos == noSymbol {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif lowPos == noSymbol {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\thighTotal := huffNode[highPos].count()\n\t\t\t\tlowTotal := 2 * huffNode[lowPos].count()\n\t\t\t\tif highTotal <= lowTotal {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// only triggered when no more rank 1 symbol left => find closest one (note : there is necessarily at least one !)\n\t\t\t// HUF_MAX_TABLELOG test just to please gcc 5+; but it should not be necessary\n\t\t\t// FIXME: try to remove\n\t\t\tfor (nBitsToDecrease <= tableLogMax) && (rankLast[nBitsToDecrease] == noSymbol) {\n\t\t\t\tnBitsToDecrease++\n\t\t\t}\n\t\t\ttotalCost -= 1 << (nBitsToDecrease - 1)\n\t\t\tif rankLast[nBitsToDecrease-1] == noSymbol {\n\t\t\t\t// this rank is no longer empty\n\t\t\t\trankLast[nBitsToDecrease-1] = rankLast[nBitsToDecrease]\n\t\t\t}\n\t\t\thuffNode[rankLast[nBitsToDecrease]].setNbBits(1 +\n\t\t\t\thuffNode[rankLast[nBitsToDecrease]].nbBits())\n\t\t\tif rankLast[nBitsToDecrease] == 0 {\n\t\t\t\t/* special case, reached largest symbol */\n\t\t\t\trankLast[nBitsToDecrease] = noSymbol\n\t\t\t} else {\n\t\t\t\trankLast[nBitsToDecrease]--\n\t\t\t\tif huffNode[rankLast[nBitsToDecrease]].nbBits() != maxNbBits-nBitsToDecrease {\n\t\t\t\t\trankLast[nBitsToDecrease] = noSymbol /* this rank is now empty */\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor totalCost < 0 { /* Sometimes, cost correction overshoot */\n\t\t\tif rankLast[1] == noSymbol { /* special case : no rank 1 symbol (using maxNbBits-1); let's create one from largest rank 0 (using maxNbBits) */\n\t\t\t\tfor huffNode[n].nbBits() == maxNbBits {\n\t\t\t\t\tn--\n\t\t\t\t}\n\t\t\t\thuffNode[n+1].setNbBits(huffNode[n+1].nbBits() - 1)\n\t\t\t\trankLast[1] = n + 1\n\t\t\t\ttotalCost++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\thuffNode[rankLast[1]+1].setNbBits(huffNode[rankLast[1]+1].nbBits() - 1)\n\t\t\trankLast[1]++\n\t\t\ttotalCost++\n\t\t}\n\t}\n\treturn maxNbBits\n}\n\n// A nodeElt is the fields\n//\n//\tcount  uint32\n//\tparent uint16\n//\tsymbol byte\n//\tnbBits uint8\n//\n// in some order, all squashed into an integer so that the compiler\n// always loads and stores entire nodeElts instead of separate fields.\ntype nodeElt uint64\n\nfunc makeNodeElt(count uint32, symbol byte) nodeElt {\n\treturn nodeElt(count) | nodeElt(symbol)<<48\n}\n\nfunc (e *nodeElt) count() uint32  { return uint32(*e) }\nfunc (e *nodeElt) parent() uint16 { return uint16(*e >> 32) }\nfunc (e *nodeElt) symbol() byte   { return byte(*e >> 48) }\nfunc (e *nodeElt) nbBits() uint8  { return uint8(*e >> 56) }\n\nfunc (e *nodeElt) setCount(c uint32) { *e = (*e)&0xffffffff00000000 | nodeElt(c) }\nfunc (e *nodeElt) setParent(p int16) { *e = (*e)&0xffff0000ffffffff | nodeElt(uint16(p))<<32 }\nfunc (e *nodeElt) setNbBits(n uint8) { *e = (*e)&0x00ffffffffffffff | nodeElt(n)<<56 }\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/decompress.go",
    "content": "package huff0\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/fse\"\n)\n\ntype dTable struct {\n\tsingle []dEntrySingle\n}\n\n// single-symbols decoding\ntype dEntrySingle struct {\n\tentry uint16\n}\n\n// Uses special code for all tables that are < 8 bits.\nconst use8BitTables = true\n\n// ReadTable will read a table from the input.\n// The size of the input may be larger than the table definition.\n// Any content remaining after the table definition will be returned.\n// If no Scratch is provided a new one is allocated.\n// The returned Scratch can be used for encoding or decoding input using this table.\nfunc ReadTable(in []byte, s *Scratch) (s2 *Scratch, remain []byte, err error) {\n\ts, err = s.prepare(nil)\n\tif err != nil {\n\t\treturn s, nil, err\n\t}\n\tif len(in) <= 1 {\n\t\treturn s, nil, errors.New(\"input too small for table\")\n\t}\n\tiSize := in[0]\n\tin = in[1:]\n\tif iSize >= 128 {\n\t\t// Uncompressed\n\t\toSize := iSize - 127\n\t\tiSize = (oSize + 1) / 2\n\t\tif int(iSize) > len(in) {\n\t\t\treturn s, nil, errors.New(\"input too small for table\")\n\t\t}\n\t\tfor n := uint8(0); n < oSize; n += 2 {\n\t\t\tv := in[n/2]\n\t\t\ts.huffWeight[n] = v >> 4\n\t\t\ts.huffWeight[n+1] = v & 15\n\t\t}\n\t\ts.symbolLen = uint16(oSize)\n\t\tin = in[iSize:]\n\t} else {\n\t\tif len(in) < int(iSize) {\n\t\t\treturn s, nil, fmt.Errorf(\"input too small for table, want %d bytes, have %d\", iSize, len(in))\n\t\t}\n\t\t// FSE compressed weights\n\t\ts.fse.DecompressLimit = 255\n\t\thw := s.huffWeight[:]\n\t\ts.fse.Out = hw\n\t\tb, err := fse.Decompress(in[:iSize], s.fse)\n\t\ts.fse.Out = nil\n\t\tif err != nil {\n\t\t\treturn s, nil, fmt.Errorf(\"fse decompress returned: %w\", err)\n\t\t}\n\t\tif len(b) > 255 {\n\t\t\treturn s, nil, errors.New(\"corrupt input: output table too large\")\n\t\t}\n\t\ts.symbolLen = uint16(len(b))\n\t\tin = in[iSize:]\n\t}\n\n\t// collect weight stats\n\tvar rankStats [16]uint32\n\tweightTotal := uint32(0)\n\tfor _, v := range s.huffWeight[:s.symbolLen] {\n\t\tif v > tableLogMax {\n\t\t\treturn s, nil, errors.New(\"corrupt input: weight too large\")\n\t\t}\n\t\tv2 := v & 15\n\t\trankStats[v2]++\n\t\t// (1 << (v2-1)) is slower since the compiler cannot prove that v2 isn't 0.\n\t\tweightTotal += (1 << v2) >> 1\n\t}\n\tif weightTotal == 0 {\n\t\treturn s, nil, errors.New(\"corrupt input: weights zero\")\n\t}\n\n\t// get last non-null symbol weight (implied, total must be 2^n)\n\t{\n\t\ttableLog := highBit32(weightTotal) + 1\n\t\tif tableLog > tableLogMax {\n\t\t\treturn s, nil, errors.New(\"corrupt input: tableLog too big\")\n\t\t}\n\t\ts.actualTableLog = uint8(tableLog)\n\t\t// determine last weight\n\t\t{\n\t\t\ttotal := uint32(1) << tableLog\n\t\t\trest := total - weightTotal\n\t\t\tverif := uint32(1) << highBit32(rest)\n\t\t\tlastWeight := highBit32(rest) + 1\n\t\t\tif verif != rest {\n\t\t\t\t// last value must be a clean power of 2\n\t\t\t\treturn s, nil, errors.New(\"corrupt input: last value not power of two\")\n\t\t\t}\n\t\t\ts.huffWeight[s.symbolLen] = uint8(lastWeight)\n\t\t\ts.symbolLen++\n\t\t\trankStats[lastWeight]++\n\t\t}\n\t}\n\n\tif (rankStats[1] < 2) || (rankStats[1]&1 != 0) {\n\t\t// by construction : at least 2 elts of rank 1, must be even\n\t\treturn s, nil, errors.New(\"corrupt input: min elt size, even check failed \")\n\t}\n\n\t// TODO: Choose between single/double symbol decoding\n\n\t// Calculate starting value for each rank\n\t{\n\t\tvar nextRankStart uint32\n\t\tfor n := uint8(1); n < s.actualTableLog+1; n++ {\n\t\t\tcurrent := nextRankStart\n\t\t\tnextRankStart += rankStats[n] << (n - 1)\n\t\t\trankStats[n] = current\n\t\t}\n\t}\n\n\t// fill DTable (always full size)\n\ttSize := 1 << tableLogMax\n\tif len(s.dt.single) != tSize {\n\t\ts.dt.single = make([]dEntrySingle, tSize)\n\t}\n\tcTable := s.prevTable\n\tif cap(cTable) < maxSymbolValue+1 {\n\t\tcTable = make([]cTableEntry, 0, maxSymbolValue+1)\n\t}\n\tcTable = cTable[:maxSymbolValue+1]\n\ts.prevTable = cTable[:s.symbolLen]\n\ts.prevTableLog = s.actualTableLog\n\n\tfor n, w := range s.huffWeight[:s.symbolLen] {\n\t\tif w == 0 {\n\t\t\tcTable[n] = cTableEntry{\n\t\t\t\tval:   0,\n\t\t\t\tnBits: 0,\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tlength := (uint32(1) << w) >> 1\n\t\td := dEntrySingle{\n\t\t\tentry: uint16(s.actualTableLog+1-w) | (uint16(n) << 8),\n\t\t}\n\n\t\trank := &rankStats[w]\n\t\tcTable[n] = cTableEntry{\n\t\t\tval:   uint16(*rank >> (w - 1)),\n\t\t\tnBits: uint8(d.entry),\n\t\t}\n\n\t\tsingle := s.dt.single[*rank : *rank+length]\n\t\tfor i := range single {\n\t\t\tsingle[i] = d\n\t\t}\n\t\t*rank += length\n\t}\n\n\treturn s, in, nil\n}\n\n// Decompress1X will decompress a 1X encoded stream.\n// The length of the supplied input must match the end of a block exactly.\n// Before this is called, the table must be initialized with ReadTable unless\n// the encoder re-used the table.\n// deprecated: Use the stateless Decoder() to get a concurrent version.\nfunc (s *Scratch) Decompress1X(in []byte) (out []byte, err error) {\n\tif cap(s.Out) < s.MaxDecodedSize {\n\t\ts.Out = make([]byte, s.MaxDecodedSize)\n\t}\n\ts.Out = s.Out[:0:s.MaxDecodedSize]\n\ts.Out, err = s.Decoder().Decompress1X(s.Out, in)\n\treturn s.Out, err\n}\n\n// Decompress4X will decompress a 4X encoded stream.\n// Before this is called, the table must be initialized with ReadTable unless\n// the encoder re-used the table.\n// The length of the supplied input must match the end of a block exactly.\n// The destination size of the uncompressed data must be known and provided.\n// deprecated: Use the stateless Decoder() to get a concurrent version.\nfunc (s *Scratch) Decompress4X(in []byte, dstSize int) (out []byte, err error) {\n\tif dstSize > s.MaxDecodedSize {\n\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t}\n\tif cap(s.Out) < dstSize {\n\t\ts.Out = make([]byte, s.MaxDecodedSize)\n\t}\n\ts.Out = s.Out[:0:dstSize]\n\ts.Out, err = s.Decoder().Decompress4X(s.Out, in)\n\treturn s.Out, err\n}\n\n// Decoder will return a stateless decoder that can be used by multiple\n// decompressors concurrently.\n// Before this is called, the table must be initialized with ReadTable.\n// The Decoder is still linked to the scratch buffer so that cannot be reused.\n// However, it is safe to discard the scratch.\nfunc (s *Scratch) Decoder() *Decoder {\n\treturn &Decoder{\n\t\tdt:             s.dt,\n\t\tactualTableLog: s.actualTableLog,\n\t\tbufs:           &s.decPool,\n\t}\n}\n\n// Decoder provides stateless decoding.\ntype Decoder struct {\n\tdt             dTable\n\tactualTableLog uint8\n\tbufs           *sync.Pool\n}\n\nfunc (d *Decoder) buffer() *[4][256]byte {\n\tbuf, ok := d.bufs.Get().(*[4][256]byte)\n\tif ok {\n\t\treturn buf\n\t}\n\treturn &[4][256]byte{}\n}\n\n// decompress1X8Bit will decompress a 1X encoded stream with tablelog <= 8.\n// The cap of the output buffer will be the maximum decompressed size.\n// The length of the supplied input must match the end of a block exactly.\nfunc (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) {\n\tif d.actualTableLog == 8 {\n\t\treturn d.decompress1X8BitExactly(dst, src)\n\t}\n\tvar br bitReaderBytes\n\terr := br.init(src)\n\tif err != nil {\n\t\treturn dst, err\n\t}\n\tmaxDecodedSize := cap(dst)\n\tdst = dst[:0]\n\n\t// Avoid bounds check by always having full sized table.\n\tdt := d.dt.single[:256]\n\n\t// Use temp table to avoid bound checks/append penalty.\n\tbufs := d.buffer()\n\tbuf := &bufs[0]\n\tvar off uint8\n\n\tswitch d.actualTableLog {\n\tcase 8:\n\t\tconst shift = 0\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\tbr.close()\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tcase 7:\n\t\tconst shift = 8 - 7\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\tbr.close()\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tcase 6:\n\t\tconst shift = 8 - 6\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\tbr.close()\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tcase 5:\n\t\tconst shift = 8 - 5\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\tbr.close()\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tcase 4:\n\t\tconst shift = 8 - 4\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\tbr.close()\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tcase 3:\n\t\tconst shift = 8 - 3\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\tbr.close()\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tcase 2:\n\t\tconst shift = 8 - 2\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\tbr.close()\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tcase 1:\n\t\tconst shift = 8 - 1\n\t\tfor br.off >= 4 {\n\t\t\tbr.fillFast()\n\t\t\tv := dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\t\tv = dt[uint8(br.value>>(56+shift))]\n\t\t\tbr.advance(uint8(v.entry))\n\t\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\t\toff += 4\n\t\t\tif off == 0 {\n\t\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\t\td.bufs.Put(bufs)\n\t\t\t\t\tbr.close()\n\t\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t\t}\n\t\t\t\tdst = append(dst, buf[:]...)\n\t\t\t}\n\t\t}\n\tdefault:\n\t\td.bufs.Put(bufs)\n\t\treturn nil, fmt.Errorf(\"invalid tablelog: %d\", d.actualTableLog)\n\t}\n\n\tif len(dst)+int(off) > maxDecodedSize {\n\t\td.bufs.Put(bufs)\n\t\tbr.close()\n\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t}\n\tdst = append(dst, buf[:off]...)\n\n\t// br < 4, so uint8 is fine\n\tbitsLeft := int8(uint8(br.off)*8 + (64 - br.bitsRead))\n\tshift := (8 - d.actualTableLog) & 7\n\n\tfor bitsLeft > 0 {\n\t\tif br.bitsRead >= 64-8 {\n\t\t\tfor br.off > 0 {\n\t\t\t\tbr.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)\n\t\t\t\tbr.bitsRead -= 8\n\t\t\t\tbr.off--\n\t\t\t}\n\t\t}\n\t\tif len(dst) >= maxDecodedSize {\n\t\t\tbr.close()\n\t\t\td.bufs.Put(bufs)\n\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t}\n\t\tv := dt[br.peekByteFast()>>shift]\n\t\tnBits := uint8(v.entry)\n\t\tbr.advance(nBits)\n\t\tbitsLeft -= int8(nBits)\n\t\tdst = append(dst, uint8(v.entry>>8))\n\t}\n\td.bufs.Put(bufs)\n\treturn dst, br.close()\n}\n\n// decompress1X8Bit will decompress a 1X encoded stream with tablelog <= 8.\n// The cap of the output buffer will be the maximum decompressed size.\n// The length of the supplied input must match the end of a block exactly.\nfunc (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) {\n\tvar br bitReaderBytes\n\terr := br.init(src)\n\tif err != nil {\n\t\treturn dst, err\n\t}\n\tmaxDecodedSize := cap(dst)\n\tdst = dst[:0]\n\n\t// Avoid bounds check by always having full sized table.\n\tdt := d.dt.single[:256]\n\n\t// Use temp table to avoid bound checks/append penalty.\n\tbufs := d.buffer()\n\tbuf := &bufs[0]\n\tvar off uint8\n\n\tconst shift = 56\n\n\t//fmt.Printf(\"mask: %b, tl:%d\\n\", mask, d.actualTableLog)\n\tfor br.off >= 4 {\n\t\tbr.fillFast()\n\t\tv := dt[uint8(br.value>>shift)]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\tv = dt[uint8(br.value>>shift)]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\tv = dt[uint8(br.value>>shift)]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\tv = dt[uint8(br.value>>shift)]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\toff += 4\n\t\tif off == 0 {\n\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\td.bufs.Put(bufs)\n\t\t\t\tbr.close()\n\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t}\n\t\t\tdst = append(dst, buf[:]...)\n\t\t}\n\t}\n\n\tif len(dst)+int(off) > maxDecodedSize {\n\t\td.bufs.Put(bufs)\n\t\tbr.close()\n\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t}\n\tdst = append(dst, buf[:off]...)\n\n\t// br < 4, so uint8 is fine\n\tbitsLeft := int8(uint8(br.off)*8 + (64 - br.bitsRead))\n\tfor bitsLeft > 0 {\n\t\tif br.bitsRead >= 64-8 {\n\t\t\tfor br.off > 0 {\n\t\t\t\tbr.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)\n\t\t\t\tbr.bitsRead -= 8\n\t\t\t\tbr.off--\n\t\t\t}\n\t\t}\n\t\tif len(dst) >= maxDecodedSize {\n\t\t\td.bufs.Put(bufs)\n\t\t\tbr.close()\n\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t}\n\t\tv := dt[br.peekByteFast()]\n\t\tnBits := uint8(v.entry)\n\t\tbr.advance(nBits)\n\t\tbitsLeft -= int8(nBits)\n\t\tdst = append(dst, uint8(v.entry>>8))\n\t}\n\td.bufs.Put(bufs)\n\treturn dst, br.close()\n}\n\n// Decompress4X will decompress a 4X encoded stream.\n// The length of the supplied input must match the end of a block exactly.\n// The *capacity* of the dst slice must match the destination size of\n// the uncompressed data exactly.\nfunc (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) {\n\tif d.actualTableLog == 8 {\n\t\treturn d.decompress4X8bitExactly(dst, src)\n\t}\n\n\tvar br [4]bitReaderBytes\n\tstart := 6\n\tfor i := 0; i < 3; i++ {\n\t\tlength := int(src[i*2]) | (int(src[i*2+1]) << 8)\n\t\tif start+length >= len(src) {\n\t\t\treturn nil, errors.New(\"truncated input (or invalid offset)\")\n\t\t}\n\t\terr := br[i].init(src[start : start+length])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstart += length\n\t}\n\terr := br[3].init(src[start:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// destination, offset to match first output\n\tdstSize := cap(dst)\n\tdst = dst[:dstSize]\n\tout := dst\n\tdstEvery := (dstSize + 3) / 4\n\n\tshift := (56 + (8 - d.actualTableLog)) & 63\n\n\tconst tlSize = 1 << 8\n\tsingle := d.dt.single[:tlSize]\n\n\t// Use temp table to avoid bound checks/append penalty.\n\tbuf := d.buffer()\n\tvar off uint8\n\tvar decoded int\n\n\t// Decode 4 values from each decoder/loop.\n\tconst bufoff = 256\n\tfor {\n\t\tif br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {\n\t\t\tbreak\n\t\t}\n\n\t\t{\n\t\t\t// Interleave 2 decodes.\n\t\t\tconst stream = 0\n\t\t\tconst stream2 = 1\n\t\t\tbr1 := &br[stream]\n\t\t\tbr2 := &br[stream2]\n\t\t\tbr1.fillFast()\n\t\t\tbr2.fillFast()\n\n\t\t\tv := single[uint8(br1.value>>shift)].entry\n\t\t\tv2 := single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off] = uint8(v >> 8)\n\t\t\tbuf[stream2][off] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+1] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+1] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+2] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+2] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+3] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+3] = uint8(v2 >> 8)\n\t\t}\n\n\t\t{\n\t\t\tconst stream = 2\n\t\t\tconst stream2 = 3\n\t\t\tbr1 := &br[stream]\n\t\t\tbr2 := &br[stream2]\n\t\t\tbr1.fillFast()\n\t\t\tbr2.fillFast()\n\n\t\t\tv := single[uint8(br1.value>>shift)].entry\n\t\t\tv2 := single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off] = uint8(v >> 8)\n\t\t\tbuf[stream2][off] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+1] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+1] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+2] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+2] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+3] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+3] = uint8(v2 >> 8)\n\t\t}\n\n\t\toff += 4\n\n\t\tif off == 0 {\n\t\t\tif bufoff > dstEvery {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 1\")\n\t\t\t}\n\t\t\t// There must at least be 3 buffers left.\n\t\t\tif len(out)-bufoff < dstEvery*3 {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 2\")\n\t\t\t}\n\t\t\t//copy(out, buf[0][:])\n\t\t\t//copy(out[dstEvery:], buf[1][:])\n\t\t\t//copy(out[dstEvery*2:], buf[2][:])\n\t\t\t*(*[bufoff]byte)(out) = buf[0]\n\t\t\t*(*[bufoff]byte)(out[dstEvery:]) = buf[1]\n\t\t\t*(*[bufoff]byte)(out[dstEvery*2:]) = buf[2]\n\t\t\t*(*[bufoff]byte)(out[dstEvery*3:]) = buf[3]\n\t\t\tout = out[bufoff:]\n\t\t\tdecoded += bufoff * 4\n\t\t}\n\t}\n\tif off > 0 {\n\t\tioff := int(off)\n\t\tif len(out) < dstEvery*3+ioff {\n\t\t\td.bufs.Put(buf)\n\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 3\")\n\t\t}\n\t\tcopy(out, buf[0][:off])\n\t\tcopy(out[dstEvery:], buf[1][:off])\n\t\tcopy(out[dstEvery*2:], buf[2][:off])\n\t\tcopy(out[dstEvery*3:], buf[3][:off])\n\t\tdecoded += int(off) * 4\n\t\tout = out[off:]\n\t}\n\n\t// Decode remaining.\n\t// Decode remaining.\n\tremainBytes := dstEvery - (decoded / 4)\n\tfor i := range br {\n\t\toffset := dstEvery * i\n\t\tendsAt := offset + remainBytes\n\t\tif endsAt > len(out) {\n\t\t\tendsAt = len(out)\n\t\t}\n\t\tbr := &br[i]\n\t\tbitsLeft := br.remaining()\n\t\tfor bitsLeft > 0 {\n\t\t\tif br.finished() {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif br.bitsRead >= 56 {\n\t\t\t\tif br.off >= 4 {\n\t\t\t\t\tv := br.in[br.off-4:]\n\t\t\t\t\tv = v[:4]\n\t\t\t\t\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\t\t\t\t\tbr.value |= uint64(low) << (br.bitsRead - 32)\n\t\t\t\t\tbr.bitsRead -= 32\n\t\t\t\t\tbr.off -= 4\n\t\t\t\t} else {\n\t\t\t\t\tfor br.off > 0 {\n\t\t\t\t\t\tbr.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)\n\t\t\t\t\t\tbr.bitsRead -= 8\n\t\t\t\t\t\tbr.off--\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// end inline...\n\t\t\tif offset >= endsAt {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 4\")\n\t\t\t}\n\n\t\t\t// Read value and increment offset.\n\t\t\tv := single[uint8(br.value>>shift)].entry\n\t\t\tnBits := uint8(v)\n\t\t\tbr.advance(nBits)\n\t\t\tbitsLeft -= uint(nBits)\n\t\t\tout[offset] = uint8(v >> 8)\n\t\t\toffset++\n\t\t}\n\t\tif offset != endsAt {\n\t\t\td.bufs.Put(buf)\n\t\t\treturn nil, fmt.Errorf(\"corruption detected: short output block %d, end %d != %d\", i, offset, endsAt)\n\t\t}\n\t\tdecoded += offset - dstEvery*i\n\t\terr = br.close()\n\t\tif err != nil {\n\t\t\td.bufs.Put(buf)\n\t\t\treturn nil, err\n\t\t}\n\t}\n\td.bufs.Put(buf)\n\tif dstSize != decoded {\n\t\treturn nil, errors.New(\"corruption detected: short output block\")\n\t}\n\treturn dst, nil\n}\n\n// Decompress4X will decompress a 4X encoded stream.\n// The length of the supplied input must match the end of a block exactly.\n// The *capacity* of the dst slice must match the destination size of\n// the uncompressed data exactly.\nfunc (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) {\n\tvar br [4]bitReaderBytes\n\tstart := 6\n\tfor i := 0; i < 3; i++ {\n\t\tlength := int(src[i*2]) | (int(src[i*2+1]) << 8)\n\t\tif start+length >= len(src) {\n\t\t\treturn nil, errors.New(\"truncated input (or invalid offset)\")\n\t\t}\n\t\terr := br[i].init(src[start : start+length])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstart += length\n\t}\n\terr := br[3].init(src[start:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// destination, offset to match first output\n\tdstSize := cap(dst)\n\tdst = dst[:dstSize]\n\tout := dst\n\tdstEvery := (dstSize + 3) / 4\n\n\tconst shift = 56\n\tconst tlSize = 1 << 8\n\tsingle := d.dt.single[:tlSize]\n\n\t// Use temp table to avoid bound checks/append penalty.\n\tbuf := d.buffer()\n\tvar off uint8\n\tvar decoded int\n\n\t// Decode 4 values from each decoder/loop.\n\tconst bufoff = 256\n\tfor {\n\t\tif br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {\n\t\t\tbreak\n\t\t}\n\n\t\t{\n\t\t\t// Interleave 2 decodes.\n\t\t\tconst stream = 0\n\t\t\tconst stream2 = 1\n\t\t\tbr1 := &br[stream]\n\t\t\tbr2 := &br[stream2]\n\t\t\tbr1.fillFast()\n\t\t\tbr2.fillFast()\n\n\t\t\tv := single[uint8(br1.value>>shift)].entry\n\t\t\tv2 := single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off] = uint8(v >> 8)\n\t\t\tbuf[stream2][off] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+1] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+1] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+2] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+2] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+3] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+3] = uint8(v2 >> 8)\n\t\t}\n\n\t\t{\n\t\t\tconst stream = 2\n\t\t\tconst stream2 = 3\n\t\t\tbr1 := &br[stream]\n\t\t\tbr2 := &br[stream2]\n\t\t\tbr1.fillFast()\n\t\t\tbr2.fillFast()\n\n\t\t\tv := single[uint8(br1.value>>shift)].entry\n\t\t\tv2 := single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off] = uint8(v >> 8)\n\t\t\tbuf[stream2][off] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+1] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+1] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+2] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+2] = uint8(v2 >> 8)\n\n\t\t\tv = single[uint8(br1.value>>shift)].entry\n\t\t\tv2 = single[uint8(br2.value>>shift)].entry\n\t\t\tbr1.bitsRead += uint8(v)\n\t\t\tbr1.value <<= v & 63\n\t\t\tbr2.bitsRead += uint8(v2)\n\t\t\tbr2.value <<= v2 & 63\n\t\t\tbuf[stream][off+3] = uint8(v >> 8)\n\t\t\tbuf[stream2][off+3] = uint8(v2 >> 8)\n\t\t}\n\n\t\toff += 4\n\n\t\tif off == 0 {\n\t\t\tif bufoff > dstEvery {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 1\")\n\t\t\t}\n\t\t\t// There must at least be 3 buffers left.\n\t\t\tif len(out)-bufoff < dstEvery*3 {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 2\")\n\t\t\t}\n\n\t\t\t//copy(out, buf[0][:])\n\t\t\t//copy(out[dstEvery:], buf[1][:])\n\t\t\t//copy(out[dstEvery*2:], buf[2][:])\n\t\t\t// copy(out[dstEvery*3:], buf[3][:])\n\t\t\t*(*[bufoff]byte)(out) = buf[0]\n\t\t\t*(*[bufoff]byte)(out[dstEvery:]) = buf[1]\n\t\t\t*(*[bufoff]byte)(out[dstEvery*2:]) = buf[2]\n\t\t\t*(*[bufoff]byte)(out[dstEvery*3:]) = buf[3]\n\t\t\tout = out[bufoff:]\n\t\t\tdecoded += bufoff * 4\n\t\t}\n\t}\n\tif off > 0 {\n\t\tioff := int(off)\n\t\tif len(out) < dstEvery*3+ioff {\n\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 3\")\n\t\t}\n\t\tcopy(out, buf[0][:off])\n\t\tcopy(out[dstEvery:], buf[1][:off])\n\t\tcopy(out[dstEvery*2:], buf[2][:off])\n\t\tcopy(out[dstEvery*3:], buf[3][:off])\n\t\tdecoded += int(off) * 4\n\t\tout = out[off:]\n\t}\n\n\t// Decode remaining.\n\tremainBytes := dstEvery - (decoded / 4)\n\tfor i := range br {\n\t\toffset := dstEvery * i\n\t\tendsAt := offset + remainBytes\n\t\tif endsAt > len(out) {\n\t\t\tendsAt = len(out)\n\t\t}\n\t\tbr := &br[i]\n\t\tbitsLeft := br.remaining()\n\t\tfor bitsLeft > 0 {\n\t\t\tif br.finished() {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tif br.bitsRead >= 56 {\n\t\t\t\tif br.off >= 4 {\n\t\t\t\t\tv := br.in[br.off-4:]\n\t\t\t\t\tv = v[:4]\n\t\t\t\t\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\t\t\t\t\tbr.value |= uint64(low) << (br.bitsRead - 32)\n\t\t\t\t\tbr.bitsRead -= 32\n\t\t\t\t\tbr.off -= 4\n\t\t\t\t} else {\n\t\t\t\t\tfor br.off > 0 {\n\t\t\t\t\t\tbr.value |= uint64(br.in[br.off-1]) << (br.bitsRead - 8)\n\t\t\t\t\t\tbr.bitsRead -= 8\n\t\t\t\t\t\tbr.off--\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// end inline...\n\t\t\tif offset >= endsAt {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 4\")\n\t\t\t}\n\n\t\t\t// Read value and increment offset.\n\t\t\tv := single[br.peekByteFast()].entry\n\t\t\tnBits := uint8(v)\n\t\t\tbr.advance(nBits)\n\t\t\tbitsLeft -= uint(nBits)\n\t\t\tout[offset] = uint8(v >> 8)\n\t\t\toffset++\n\t\t}\n\t\tif offset != endsAt {\n\t\t\td.bufs.Put(buf)\n\t\t\treturn nil, fmt.Errorf(\"corruption detected: short output block %d, end %d != %d\", i, offset, endsAt)\n\t\t}\n\n\t\tdecoded += offset - dstEvery*i\n\t\terr = br.close()\n\t\tif err != nil {\n\t\t\td.bufs.Put(buf)\n\t\t\treturn nil, err\n\t\t}\n\t}\n\td.bufs.Put(buf)\n\tif dstSize != decoded {\n\t\treturn nil, errors.New(\"corruption detected: short output block\")\n\t}\n\treturn dst, nil\n}\n\n// matches will compare a decoding table to a coding table.\n// Errors are written to the writer.\n// Nothing will be written if table is ok.\nfunc (s *Scratch) matches(ct cTable, w io.Writer) {\n\tif s == nil || len(s.dt.single) == 0 {\n\t\treturn\n\t}\n\tdt := s.dt.single[:1<<s.actualTableLog]\n\ttablelog := s.actualTableLog\n\tok := 0\n\tbroken := 0\n\tfor sym, enc := range ct {\n\t\terrs := 0\n\t\tbroken++\n\t\tif enc.nBits == 0 {\n\t\t\tfor _, dec := range dt {\n\t\t\t\tif uint8(dec.entry>>8) == byte(sym) {\n\t\t\t\t\tfmt.Fprintf(w, \"symbol %x has decoder, but no encoder\\n\", sym)\n\t\t\t\t\terrs++\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif errs == 0 {\n\t\t\t\tbroken--\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// Unused bits in input\n\t\tub := tablelog - enc.nBits\n\t\ttop := enc.val << ub\n\t\t// decoder looks at top bits.\n\t\tdec := dt[top]\n\t\tif uint8(dec.entry) != enc.nBits {\n\t\t\tfmt.Fprintf(w, \"symbol 0x%x bit size mismatch (enc: %d, dec:%d).\\n\", sym, enc.nBits, uint8(dec.entry))\n\t\t\terrs++\n\t\t}\n\t\tif uint8(dec.entry>>8) != uint8(sym) {\n\t\t\tfmt.Fprintf(w, \"symbol 0x%x decoder output mismatch (enc: %d, dec:%d).\\n\", sym, sym, uint8(dec.entry>>8))\n\t\t\terrs++\n\t\t}\n\t\tif errs > 0 {\n\t\t\tfmt.Fprintf(w, \"%d errros in base, stopping\\n\", errs)\n\t\t\tcontinue\n\t\t}\n\t\t// Ensure that all combinations are covered.\n\t\tfor i := uint16(0); i < (1 << ub); i++ {\n\t\t\tvval := top | i\n\t\t\tdec := dt[vval]\n\t\t\tif uint8(dec.entry) != enc.nBits {\n\t\t\t\tfmt.Fprintf(w, \"symbol 0x%x bit size mismatch (enc: %d, dec:%d).\\n\", vval, enc.nBits, uint8(dec.entry))\n\t\t\t\terrs++\n\t\t\t}\n\t\t\tif uint8(dec.entry>>8) != uint8(sym) {\n\t\t\t\tfmt.Fprintf(w, \"symbol 0x%x decoder output mismatch (enc: %d, dec:%d).\\n\", vval, sym, uint8(dec.entry>>8))\n\t\t\t\terrs++\n\t\t\t}\n\t\t\tif errs > 20 {\n\t\t\t\tfmt.Fprintf(w, \"%d errros, stopping\\n\", errs)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif errs == 0 {\n\t\t\tok++\n\t\t\tbroken--\n\t\t}\n\t}\n\tif broken > 0 {\n\t\tfmt.Fprintf(w, \"%d broken, %d ok\\n\", broken, ok)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/decompress_amd64.go",
    "content": "//go:build amd64 && !appengine && !noasm && gc\n// +build amd64,!appengine,!noasm,gc\n\n// This file contains the specialisation of Decoder.Decompress4X\n// and Decoder.Decompress1X that use an asm implementation of thir main loops.\npackage huff0\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/klauspost/compress/internal/cpuinfo\"\n)\n\n// decompress4x_main_loop_x86 is an x86 assembler implementation\n// of Decompress4X when tablelog > 8.\n//\n//go:noescape\nfunc decompress4x_main_loop_amd64(ctx *decompress4xContext)\n\n// decompress4x_8b_loop_x86 is an x86 assembler implementation\n// of Decompress4X when tablelog <= 8 which decodes 4 entries\n// per loop.\n//\n//go:noescape\nfunc decompress4x_8b_main_loop_amd64(ctx *decompress4xContext)\n\n// fallback8BitSize is the size where using Go version is faster.\nconst fallback8BitSize = 800\n\ntype decompress4xContext struct {\n\tpbr      *[4]bitReaderShifted\n\tpeekBits uint8\n\tout      *byte\n\tdstEvery int\n\ttbl      *dEntrySingle\n\tdecoded  int\n\tlimit    *byte\n}\n\n// Decompress4X will decompress a 4X encoded stream.\n// The length of the supplied input must match the end of a block exactly.\n// The *capacity* of the dst slice must match the destination size of\n// the uncompressed data exactly.\nfunc (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {\n\tif len(d.dt.single) == 0 {\n\t\treturn nil, errors.New(\"no table loaded\")\n\t}\n\tif len(src) < 6+(4*1) {\n\t\treturn nil, errors.New(\"input too small\")\n\t}\n\n\tuse8BitTables := d.actualTableLog <= 8\n\tif cap(dst) < fallback8BitSize && use8BitTables {\n\t\treturn d.decompress4X8bit(dst, src)\n\t}\n\n\tvar br [4]bitReaderShifted\n\t// Decode \"jump table\"\n\tstart := 6\n\tfor i := 0; i < 3; i++ {\n\t\tlength := int(src[i*2]) | (int(src[i*2+1]) << 8)\n\t\tif start+length >= len(src) {\n\t\t\treturn nil, errors.New(\"truncated input (or invalid offset)\")\n\t\t}\n\t\terr := br[i].init(src[start : start+length])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstart += length\n\t}\n\terr := br[3].init(src[start:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// destination, offset to match first output\n\tdstSize := cap(dst)\n\tdst = dst[:dstSize]\n\tout := dst\n\tdstEvery := (dstSize + 3) / 4\n\n\tconst tlSize = 1 << tableLogMax\n\tconst tlMask = tlSize - 1\n\tsingle := d.dt.single[:tlSize]\n\n\tvar decoded int\n\n\tif len(out) > 4*4 && !(br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4) {\n\t\tctx := decompress4xContext{\n\t\t\tpbr:      &br,\n\t\t\tpeekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast()\n\t\t\tout:      &out[0],\n\t\t\tdstEvery: dstEvery,\n\t\t\ttbl:      &single[0],\n\t\t\tlimit:    &out[dstEvery-4], // Always stop decoding when first buffer gets here to avoid writing OOB on last.\n\t\t}\n\t\tif use8BitTables {\n\t\t\tdecompress4x_8b_main_loop_amd64(&ctx)\n\t\t} else {\n\t\t\tdecompress4x_main_loop_amd64(&ctx)\n\t\t}\n\n\t\tdecoded = ctx.decoded\n\t\tout = out[decoded/4:]\n\t}\n\n\t// Decode remaining.\n\tremainBytes := dstEvery - (decoded / 4)\n\tfor i := range br {\n\t\toffset := dstEvery * i\n\t\tendsAt := offset + remainBytes\n\t\tif endsAt > len(out) {\n\t\t\tendsAt = len(out)\n\t\t}\n\t\tbr := &br[i]\n\t\tbitsLeft := br.remaining()\n\t\tfor bitsLeft > 0 {\n\t\t\tbr.fill()\n\t\t\tif offset >= endsAt {\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 4\")\n\t\t\t}\n\n\t\t\t// Read value and increment offset.\n\t\t\tval := br.peekBitsFast(d.actualTableLog)\n\t\t\tv := single[val&tlMask].entry\n\t\t\tnBits := uint8(v)\n\t\t\tbr.advance(nBits)\n\t\t\tbitsLeft -= uint(nBits)\n\t\t\tout[offset] = uint8(v >> 8)\n\t\t\toffset++\n\t\t}\n\t\tif offset != endsAt {\n\t\t\treturn nil, fmt.Errorf(\"corruption detected: short output block %d, end %d != %d\", i, offset, endsAt)\n\t\t}\n\t\tdecoded += offset - dstEvery*i\n\t\terr = br.close()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif dstSize != decoded {\n\t\treturn nil, errors.New(\"corruption detected: short output block\")\n\t}\n\treturn dst, nil\n}\n\n// decompress4x_main_loop_x86 is an x86 assembler implementation\n// of Decompress1X when tablelog > 8.\n//\n//go:noescape\nfunc decompress1x_main_loop_amd64(ctx *decompress1xContext)\n\n// decompress4x_main_loop_x86 is an x86 with BMI2 assembler implementation\n// of Decompress1X when tablelog > 8.\n//\n//go:noescape\nfunc decompress1x_main_loop_bmi2(ctx *decompress1xContext)\n\ntype decompress1xContext struct {\n\tpbr      *bitReaderShifted\n\tpeekBits uint8\n\tout      *byte\n\toutCap   int\n\ttbl      *dEntrySingle\n\tdecoded  int\n}\n\n// Error reported by asm implementations\nconst error_max_decoded_size_exeeded = -1\n\n// Decompress1X will decompress a 1X encoded stream.\n// The cap of the output buffer will be the maximum decompressed size.\n// The length of the supplied input must match the end of a block exactly.\nfunc (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {\n\tif len(d.dt.single) == 0 {\n\t\treturn nil, errors.New(\"no table loaded\")\n\t}\n\tvar br bitReaderShifted\n\terr := br.init(src)\n\tif err != nil {\n\t\treturn dst, err\n\t}\n\tmaxDecodedSize := cap(dst)\n\tdst = dst[:maxDecodedSize]\n\n\tconst tlSize = 1 << tableLogMax\n\tconst tlMask = tlSize - 1\n\n\tif maxDecodedSize >= 4 {\n\t\tctx := decompress1xContext{\n\t\t\tpbr:      &br,\n\t\t\tout:      &dst[0],\n\t\t\toutCap:   maxDecodedSize,\n\t\t\tpeekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast()\n\t\t\ttbl:      &d.dt.single[0],\n\t\t}\n\n\t\tif cpuinfo.HasBMI2() {\n\t\t\tdecompress1x_main_loop_bmi2(&ctx)\n\t\t} else {\n\t\t\tdecompress1x_main_loop_amd64(&ctx)\n\t\t}\n\t\tif ctx.decoded == error_max_decoded_size_exeeded {\n\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t}\n\n\t\tdst = dst[:ctx.decoded]\n\t}\n\n\t// br < 8, so uint8 is fine\n\tbitsLeft := uint8(br.off)*8 + 64 - br.bitsRead\n\tfor bitsLeft > 0 {\n\t\tbr.fill()\n\t\tif len(dst) >= maxDecodedSize {\n\t\t\tbr.close()\n\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t}\n\t\tv := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask]\n\t\tnBits := uint8(v.entry)\n\t\tbr.advance(nBits)\n\t\tbitsLeft -= nBits\n\t\tdst = append(dst, uint8(v.entry>>8))\n\t}\n\treturn dst, br.close()\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/decompress_amd64.s",
    "content": "// Code generated by command: go run gen.go -out ../decompress_amd64.s -pkg=huff0. DO NOT EDIT.\n\n//go:build amd64 && !appengine && !noasm && gc\n\n// func decompress4x_main_loop_amd64(ctx *decompress4xContext)\nTEXT ·decompress4x_main_loop_amd64(SB), $0-8\n\t// Preload values\n\tMOVQ    ctx+0(FP), AX\n\tMOVBQZX 8(AX), DI\n\tMOVQ    16(AX), BX\n\tMOVQ    48(AX), SI\n\tMOVQ    24(AX), R8\n\tMOVQ    32(AX), R9\n\tMOVQ    (AX), R10\n\n\t// Main loop\nmain_loop:\n\tXORL  DX, DX\n\tCMPQ  BX, SI\n\tSETGE DL\n\n\t// br0.fillFast32()\n\tMOVQ    32(R10), R11\n\tMOVBQZX 40(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill0\n\tMOVQ    24(R10), AX\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, AX\n\tMOVQ    (R10), R13\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (AX)(R13*1), R13\n\tMOVQ R12, CX\n\tSHLQ CL, R13\n\tMOVQ AX, 24(R10)\n\tORQ  R13, R11\n\n\t// exhausted += (br0.off < 4)\n\tCMPQ AX, $0x04\n\tADCB $+0, DL\n\nskip_fill0:\n\t// val0 := br0.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br0.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br0.peekTopBits(peekBits)\n\tMOVQ DI, CX\n\tMOVQ R11, R13\n\tSHRQ CL, R13\n\n\t// v1 := table[val1&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br0.advance(uint8(v1.entry))\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// these two writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\tMOVW AX, (BX)\n\n\t// update the bitreader structure\n\tMOVQ R11, 32(R10)\n\tMOVB R12, 40(R10)\n\n\t// br1.fillFast32()\n\tMOVQ    80(R10), R11\n\tMOVBQZX 88(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill1\n\tMOVQ    72(R10), AX\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, AX\n\tMOVQ    48(R10), R13\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (AX)(R13*1), R13\n\tMOVQ R12, CX\n\tSHLQ CL, R13\n\tMOVQ AX, 72(R10)\n\tORQ  R13, R11\n\n\t// exhausted += (br1.off < 4)\n\tCMPQ AX, $0x04\n\tADCB $+0, DL\n\nskip_fill1:\n\t// val0 := br1.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br1.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br1.peekTopBits(peekBits)\n\tMOVQ DI, CX\n\tMOVQ R11, R13\n\tSHRQ CL, R13\n\n\t// v1 := table[val1&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br1.advance(uint8(v1.entry))\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// these two writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\tMOVW AX, (BX)(R8*1)\n\n\t// update the bitreader structure\n\tMOVQ R11, 80(R10)\n\tMOVB R12, 88(R10)\n\n\t// br2.fillFast32()\n\tMOVQ    128(R10), R11\n\tMOVBQZX 136(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill2\n\tMOVQ    120(R10), AX\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, AX\n\tMOVQ    96(R10), R13\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (AX)(R13*1), R13\n\tMOVQ R12, CX\n\tSHLQ CL, R13\n\tMOVQ AX, 120(R10)\n\tORQ  R13, R11\n\n\t// exhausted += (br2.off < 4)\n\tCMPQ AX, $0x04\n\tADCB $+0, DL\n\nskip_fill2:\n\t// val0 := br2.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br2.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br2.peekTopBits(peekBits)\n\tMOVQ DI, CX\n\tMOVQ R11, R13\n\tSHRQ CL, R13\n\n\t// v1 := table[val1&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br2.advance(uint8(v1.entry))\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// these two writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\tMOVW AX, (BX)(R8*2)\n\n\t// update the bitreader structure\n\tMOVQ R11, 128(R10)\n\tMOVB R12, 136(R10)\n\n\t// br3.fillFast32()\n\tMOVQ    176(R10), R11\n\tMOVBQZX 184(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill3\n\tMOVQ    168(R10), AX\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, AX\n\tMOVQ    144(R10), R13\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (AX)(R13*1), R13\n\tMOVQ R12, CX\n\tSHLQ CL, R13\n\tMOVQ AX, 168(R10)\n\tORQ  R13, R11\n\n\t// exhausted += (br3.off < 4)\n\tCMPQ AX, $0x04\n\tADCB $+0, DL\n\nskip_fill3:\n\t// val0 := br3.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br3.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br3.peekTopBits(peekBits)\n\tMOVQ DI, CX\n\tMOVQ R11, R13\n\tSHRQ CL, R13\n\n\t// v1 := table[val1&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br3.advance(uint8(v1.entry))\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// these two writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\tLEAQ (R8)(R8*2), CX\n\tMOVW AX, (BX)(CX*1)\n\n\t// update the bitreader structure\n\tMOVQ  R11, 176(R10)\n\tMOVB  R12, 184(R10)\n\tADDQ  $0x02, BX\n\tTESTB DL, DL\n\tJZ    main_loop\n\tMOVQ  ctx+0(FP), AX\n\tSUBQ  16(AX), BX\n\tSHLQ  $0x02, BX\n\tMOVQ  BX, 40(AX)\n\tRET\n\n// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext)\nTEXT ·decompress4x_8b_main_loop_amd64(SB), $0-8\n\t// Preload values\n\tMOVQ    ctx+0(FP), CX\n\tMOVBQZX 8(CX), DI\n\tMOVQ    16(CX), BX\n\tMOVQ    48(CX), SI\n\tMOVQ    24(CX), R8\n\tMOVQ    32(CX), R9\n\tMOVQ    (CX), R10\n\n\t// Main loop\nmain_loop:\n\tXORL  DX, DX\n\tCMPQ  BX, SI\n\tSETGE DL\n\n\t// br0.fillFast32()\n\tMOVQ    32(R10), R11\n\tMOVBQZX 40(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill0\n\tMOVQ    24(R10), R13\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, R13\n\tMOVQ    (R10), R14\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (R13)(R14*1), R14\n\tMOVQ R12, CX\n\tSHLQ CL, R14\n\tMOVQ R13, 24(R10)\n\tORQ  R14, R11\n\n\t// exhausted += (br0.off < 4)\n\tCMPQ R13, $0x04\n\tADCB $+0, DL\n\nskip_fill0:\n\t// val0 := br0.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br0.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br0.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v1 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br0.advance(uint8(v1.entry)\n\tMOVB   CH, AH\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// val2 := br0.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v2 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br0.advance(uint8(v2.entry)\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val3 := br0.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v3 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br0.advance(uint8(v3.entry)\n\tMOVB   CH, AL\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// these four writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\t// out[id * dstEvery + 3] = uint8(v2.entry >> 8)\n\t// out[id * dstEvery + 4] = uint8(v3.entry >> 8)\n\tMOVL AX, (BX)\n\n\t// update the bitreader structure\n\tMOVQ R11, 32(R10)\n\tMOVB R12, 40(R10)\n\n\t// br1.fillFast32()\n\tMOVQ    80(R10), R11\n\tMOVBQZX 88(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill1\n\tMOVQ    72(R10), R13\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, R13\n\tMOVQ    48(R10), R14\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (R13)(R14*1), R14\n\tMOVQ R12, CX\n\tSHLQ CL, R14\n\tMOVQ R13, 72(R10)\n\tORQ  R14, R11\n\n\t// exhausted += (br1.off < 4)\n\tCMPQ R13, $0x04\n\tADCB $+0, DL\n\nskip_fill1:\n\t// val0 := br1.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br1.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br1.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v1 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br1.advance(uint8(v1.entry)\n\tMOVB   CH, AH\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// val2 := br1.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v2 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br1.advance(uint8(v2.entry)\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val3 := br1.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v3 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br1.advance(uint8(v3.entry)\n\tMOVB   CH, AL\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// these four writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\t// out[id * dstEvery + 3] = uint8(v2.entry >> 8)\n\t// out[id * dstEvery + 4] = uint8(v3.entry >> 8)\n\tMOVL AX, (BX)(R8*1)\n\n\t// update the bitreader structure\n\tMOVQ R11, 80(R10)\n\tMOVB R12, 88(R10)\n\n\t// br2.fillFast32()\n\tMOVQ    128(R10), R11\n\tMOVBQZX 136(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill2\n\tMOVQ    120(R10), R13\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, R13\n\tMOVQ    96(R10), R14\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (R13)(R14*1), R14\n\tMOVQ R12, CX\n\tSHLQ CL, R14\n\tMOVQ R13, 120(R10)\n\tORQ  R14, R11\n\n\t// exhausted += (br2.off < 4)\n\tCMPQ R13, $0x04\n\tADCB $+0, DL\n\nskip_fill2:\n\t// val0 := br2.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br2.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br2.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v1 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br2.advance(uint8(v1.entry)\n\tMOVB   CH, AH\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// val2 := br2.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v2 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br2.advance(uint8(v2.entry)\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val3 := br2.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v3 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br2.advance(uint8(v3.entry)\n\tMOVB   CH, AL\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// these four writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\t// out[id * dstEvery + 3] = uint8(v2.entry >> 8)\n\t// out[id * dstEvery + 4] = uint8(v3.entry >> 8)\n\tMOVL AX, (BX)(R8*2)\n\n\t// update the bitreader structure\n\tMOVQ R11, 128(R10)\n\tMOVB R12, 136(R10)\n\n\t// br3.fillFast32()\n\tMOVQ    176(R10), R11\n\tMOVBQZX 184(R10), R12\n\tCMPQ    R12, $0x20\n\tJBE     skip_fill3\n\tMOVQ    168(R10), R13\n\tSUBQ    $0x20, R12\n\tSUBQ    $0x04, R13\n\tMOVQ    144(R10), R14\n\n\t// b.value |= uint64(low) << (b.bitsRead & 63)\n\tMOVL (R13)(R14*1), R14\n\tMOVQ R12, CX\n\tSHLQ CL, R14\n\tMOVQ R13, 168(R10)\n\tORQ  R14, R11\n\n\t// exhausted += (br3.off < 4)\n\tCMPQ R13, $0x04\n\tADCB $+0, DL\n\nskip_fill3:\n\t// val0 := br3.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v0 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br3.advance(uint8(v0.entry)\n\tMOVB CH, AL\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val1 := br3.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v1 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br3.advance(uint8(v1.entry)\n\tMOVB   CH, AH\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// val2 := br3.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v2 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br3.advance(uint8(v2.entry)\n\tMOVB CH, AH\n\tSHLQ CL, R11\n\tADDB CL, R12\n\n\t// val3 := br3.peekTopBits(peekBits)\n\tMOVQ R11, R13\n\tMOVQ DI, CX\n\tSHRQ CL, R13\n\n\t// v3 := table[val0&mask]\n\tMOVW (R9)(R13*2), CX\n\n\t// br3.advance(uint8(v3.entry)\n\tMOVB   CH, AL\n\tSHLQ   CL, R11\n\tADDB   CL, R12\n\tBSWAPL AX\n\n\t// these four writes get coalesced\n\t// out[id * dstEvery + 0] = uint8(v0.entry >> 8)\n\t// out[id * dstEvery + 1] = uint8(v1.entry >> 8)\n\t// out[id * dstEvery + 3] = uint8(v2.entry >> 8)\n\t// out[id * dstEvery + 4] = uint8(v3.entry >> 8)\n\tLEAQ (R8)(R8*2), CX\n\tMOVL AX, (BX)(CX*1)\n\n\t// update the bitreader structure\n\tMOVQ  R11, 176(R10)\n\tMOVB  R12, 184(R10)\n\tADDQ  $0x04, BX\n\tTESTB DL, DL\n\tJZ    main_loop\n\tMOVQ  ctx+0(FP), AX\n\tSUBQ  16(AX), BX\n\tSHLQ  $0x02, BX\n\tMOVQ  BX, 40(AX)\n\tRET\n\n// func decompress1x_main_loop_amd64(ctx *decompress1xContext)\nTEXT ·decompress1x_main_loop_amd64(SB), $0-8\n\tMOVQ    ctx+0(FP), CX\n\tMOVQ    16(CX), DX\n\tMOVQ    24(CX), BX\n\tCMPQ    BX, $0x04\n\tJB      error_max_decoded_size_exceeded\n\tLEAQ    (DX)(BX*1), BX\n\tMOVQ    (CX), SI\n\tMOVQ    (SI), R8\n\tMOVQ    24(SI), R9\n\tMOVQ    32(SI), R10\n\tMOVBQZX 40(SI), R11\n\tMOVQ    32(CX), SI\n\tMOVBQZX 8(CX), DI\n\tJMP     loop_condition\n\nmain_loop:\n\t// Check if we have room for 4 bytes in the output buffer\n\tLEAQ 4(DX), CX\n\tCMPQ CX, BX\n\tJGE  error_max_decoded_size_exceeded\n\n\t// Decode 4 values\n\tCMPQ R11, $0x20\n\tJL   bitReader_fillFast_1_end\n\tSUBQ $0x20, R11\n\tSUBQ $0x04, R9\n\tMOVL (R8)(R9*1), R12\n\tMOVQ R11, CX\n\tSHLQ CL, R12\n\tORQ  R12, R10\n\nbitReader_fillFast_1_end:\n\tMOVQ    DI, CX\n\tMOVQ    R10, R12\n\tSHRQ    CL, R12\n\tMOVW    (SI)(R12*2), CX\n\tMOVB    CH, AL\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLQ    CL, R10\n\tMOVQ    DI, CX\n\tMOVQ    R10, R12\n\tSHRQ    CL, R12\n\tMOVW    (SI)(R12*2), CX\n\tMOVB    CH, AH\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLQ    CL, R10\n\tBSWAPL  AX\n\tCMPQ    R11, $0x20\n\tJL      bitReader_fillFast_2_end\n\tSUBQ    $0x20, R11\n\tSUBQ    $0x04, R9\n\tMOVL    (R8)(R9*1), R12\n\tMOVQ    R11, CX\n\tSHLQ    CL, R12\n\tORQ     R12, R10\n\nbitReader_fillFast_2_end:\n\tMOVQ    DI, CX\n\tMOVQ    R10, R12\n\tSHRQ    CL, R12\n\tMOVW    (SI)(R12*2), CX\n\tMOVB    CH, AH\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLQ    CL, R10\n\tMOVQ    DI, CX\n\tMOVQ    R10, R12\n\tSHRQ    CL, R12\n\tMOVW    (SI)(R12*2), CX\n\tMOVB    CH, AL\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLQ    CL, R10\n\tBSWAPL  AX\n\n\t// Store the decoded values\n\tMOVL AX, (DX)\n\tADDQ $0x04, DX\n\nloop_condition:\n\tCMPQ R9, $0x08\n\tJGE  main_loop\n\n\t// Update ctx structure\n\tMOVQ ctx+0(FP), AX\n\tSUBQ 16(AX), DX\n\tMOVQ DX, 40(AX)\n\tMOVQ (AX), AX\n\tMOVQ R9, 24(AX)\n\tMOVQ R10, 32(AX)\n\tMOVB R11, 40(AX)\n\tRET\n\n\t// Report error\nerror_max_decoded_size_exceeded:\n\tMOVQ ctx+0(FP), AX\n\tMOVQ $-1, CX\n\tMOVQ CX, 40(AX)\n\tRET\n\n// func decompress1x_main_loop_bmi2(ctx *decompress1xContext)\n// Requires: BMI2\nTEXT ·decompress1x_main_loop_bmi2(SB), $0-8\n\tMOVQ    ctx+0(FP), CX\n\tMOVQ    16(CX), DX\n\tMOVQ    24(CX), BX\n\tCMPQ    BX, $0x04\n\tJB      error_max_decoded_size_exceeded\n\tLEAQ    (DX)(BX*1), BX\n\tMOVQ    (CX), SI\n\tMOVQ    (SI), R8\n\tMOVQ    24(SI), R9\n\tMOVQ    32(SI), R10\n\tMOVBQZX 40(SI), R11\n\tMOVQ    32(CX), SI\n\tMOVBQZX 8(CX), DI\n\tJMP     loop_condition\n\nmain_loop:\n\t// Check if we have room for 4 bytes in the output buffer\n\tLEAQ 4(DX), CX\n\tCMPQ CX, BX\n\tJGE  error_max_decoded_size_exceeded\n\n\t// Decode 4 values\n\tCMPQ  R11, $0x20\n\tJL    bitReader_fillFast_1_end\n\tSUBQ  $0x20, R11\n\tSUBQ  $0x04, R9\n\tMOVL  (R8)(R9*1), CX\n\tSHLXQ R11, CX, CX\n\tORQ   CX, R10\n\nbitReader_fillFast_1_end:\n\tSHRXQ   DI, R10, CX\n\tMOVW    (SI)(CX*2), CX\n\tMOVB    CH, AL\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLXQ   CX, R10, R10\n\tSHRXQ   DI, R10, CX\n\tMOVW    (SI)(CX*2), CX\n\tMOVB    CH, AH\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLXQ   CX, R10, R10\n\tBSWAPL  AX\n\tCMPQ    R11, $0x20\n\tJL      bitReader_fillFast_2_end\n\tSUBQ    $0x20, R11\n\tSUBQ    $0x04, R9\n\tMOVL    (R8)(R9*1), CX\n\tSHLXQ   R11, CX, CX\n\tORQ     CX, R10\n\nbitReader_fillFast_2_end:\n\tSHRXQ   DI, R10, CX\n\tMOVW    (SI)(CX*2), CX\n\tMOVB    CH, AH\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLXQ   CX, R10, R10\n\tSHRXQ   DI, R10, CX\n\tMOVW    (SI)(CX*2), CX\n\tMOVB    CH, AL\n\tMOVBQZX CL, CX\n\tADDQ    CX, R11\n\tSHLXQ   CX, R10, R10\n\tBSWAPL  AX\n\n\t// Store the decoded values\n\tMOVL AX, (DX)\n\tADDQ $0x04, DX\n\nloop_condition:\n\tCMPQ R9, $0x08\n\tJGE  main_loop\n\n\t// Update ctx structure\n\tMOVQ ctx+0(FP), AX\n\tSUBQ 16(AX), DX\n\tMOVQ DX, 40(AX)\n\tMOVQ (AX), AX\n\tMOVQ R9, 24(AX)\n\tMOVQ R10, 32(AX)\n\tMOVB R11, 40(AX)\n\tRET\n\n\t// Report error\nerror_max_decoded_size_exceeded:\n\tMOVQ ctx+0(FP), AX\n\tMOVQ $-1, CX\n\tMOVQ CX, 40(AX)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/decompress_generic.go",
    "content": "//go:build !amd64 || appengine || !gc || noasm\n// +build !amd64 appengine !gc noasm\n\n// This file contains a generic implementation of Decoder.Decompress4X.\npackage huff0\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// Decompress4X will decompress a 4X encoded stream.\n// The length of the supplied input must match the end of a block exactly.\n// The *capacity* of the dst slice must match the destination size of\n// the uncompressed data exactly.\nfunc (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) {\n\tif len(d.dt.single) == 0 {\n\t\treturn nil, errors.New(\"no table loaded\")\n\t}\n\tif len(src) < 6+(4*1) {\n\t\treturn nil, errors.New(\"input too small\")\n\t}\n\tif use8BitTables && d.actualTableLog <= 8 {\n\t\treturn d.decompress4X8bit(dst, src)\n\t}\n\n\tvar br [4]bitReaderShifted\n\t// Decode \"jump table\"\n\tstart := 6\n\tfor i := 0; i < 3; i++ {\n\t\tlength := int(src[i*2]) | (int(src[i*2+1]) << 8)\n\t\tif start+length >= len(src) {\n\t\t\treturn nil, errors.New(\"truncated input (or invalid offset)\")\n\t\t}\n\t\terr := br[i].init(src[start : start+length])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstart += length\n\t}\n\terr := br[3].init(src[start:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// destination, offset to match first output\n\tdstSize := cap(dst)\n\tdst = dst[:dstSize]\n\tout := dst\n\tdstEvery := (dstSize + 3) / 4\n\n\tconst tlSize = 1 << tableLogMax\n\tconst tlMask = tlSize - 1\n\tsingle := d.dt.single[:tlSize]\n\n\t// Use temp table to avoid bound checks/append penalty.\n\tbuf := d.buffer()\n\tvar off uint8\n\tvar decoded int\n\n\t// Decode 2 values from each decoder/loop.\n\tconst bufoff = 256\n\tfor {\n\t\tif br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 {\n\t\t\tbreak\n\t\t}\n\n\t\t{\n\t\t\tconst stream = 0\n\t\t\tconst stream2 = 1\n\t\t\tbr[stream].fillFast()\n\t\t\tbr[stream2].fillFast()\n\n\t\t\tval := br[stream].peekBitsFast(d.actualTableLog)\n\t\t\tval2 := br[stream2].peekBitsFast(d.actualTableLog)\n\t\t\tv := single[val&tlMask]\n\t\t\tv2 := single[val2&tlMask]\n\t\t\tbr[stream].advance(uint8(v.entry))\n\t\t\tbr[stream2].advance(uint8(v2.entry))\n\t\t\tbuf[stream][off] = uint8(v.entry >> 8)\n\t\t\tbuf[stream2][off] = uint8(v2.entry >> 8)\n\n\t\t\tval = br[stream].peekBitsFast(d.actualTableLog)\n\t\t\tval2 = br[stream2].peekBitsFast(d.actualTableLog)\n\t\t\tv = single[val&tlMask]\n\t\t\tv2 = single[val2&tlMask]\n\t\t\tbr[stream].advance(uint8(v.entry))\n\t\t\tbr[stream2].advance(uint8(v2.entry))\n\t\t\tbuf[stream][off+1] = uint8(v.entry >> 8)\n\t\t\tbuf[stream2][off+1] = uint8(v2.entry >> 8)\n\t\t}\n\n\t\t{\n\t\t\tconst stream = 2\n\t\t\tconst stream2 = 3\n\t\t\tbr[stream].fillFast()\n\t\t\tbr[stream2].fillFast()\n\n\t\t\tval := br[stream].peekBitsFast(d.actualTableLog)\n\t\t\tval2 := br[stream2].peekBitsFast(d.actualTableLog)\n\t\t\tv := single[val&tlMask]\n\t\t\tv2 := single[val2&tlMask]\n\t\t\tbr[stream].advance(uint8(v.entry))\n\t\t\tbr[stream2].advance(uint8(v2.entry))\n\t\t\tbuf[stream][off] = uint8(v.entry >> 8)\n\t\t\tbuf[stream2][off] = uint8(v2.entry >> 8)\n\n\t\t\tval = br[stream].peekBitsFast(d.actualTableLog)\n\t\t\tval2 = br[stream2].peekBitsFast(d.actualTableLog)\n\t\t\tv = single[val&tlMask]\n\t\t\tv2 = single[val2&tlMask]\n\t\t\tbr[stream].advance(uint8(v.entry))\n\t\t\tbr[stream2].advance(uint8(v2.entry))\n\t\t\tbuf[stream][off+1] = uint8(v.entry >> 8)\n\t\t\tbuf[stream2][off+1] = uint8(v2.entry >> 8)\n\t\t}\n\n\t\toff += 2\n\n\t\tif off == 0 {\n\t\t\tif bufoff > dstEvery {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 1\")\n\t\t\t}\n\t\t\t// There must at least be 3 buffers left.\n\t\t\tif len(out)-bufoff < dstEvery*3 {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 2\")\n\t\t\t}\n\t\t\t//copy(out, buf[0][:])\n\t\t\t//copy(out[dstEvery:], buf[1][:])\n\t\t\t//copy(out[dstEvery*2:], buf[2][:])\n\t\t\t//copy(out[dstEvery*3:], buf[3][:])\n\t\t\t*(*[bufoff]byte)(out) = buf[0]\n\t\t\t*(*[bufoff]byte)(out[dstEvery:]) = buf[1]\n\t\t\t*(*[bufoff]byte)(out[dstEvery*2:]) = buf[2]\n\t\t\t*(*[bufoff]byte)(out[dstEvery*3:]) = buf[3]\n\t\t\tout = out[bufoff:]\n\t\t\tdecoded += bufoff * 4\n\t\t}\n\t}\n\tif off > 0 {\n\t\tioff := int(off)\n\t\tif len(out) < dstEvery*3+ioff {\n\t\t\td.bufs.Put(buf)\n\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 3\")\n\t\t}\n\t\tcopy(out, buf[0][:off])\n\t\tcopy(out[dstEvery:], buf[1][:off])\n\t\tcopy(out[dstEvery*2:], buf[2][:off])\n\t\tcopy(out[dstEvery*3:], buf[3][:off])\n\t\tdecoded += int(off) * 4\n\t\tout = out[off:]\n\t}\n\n\t// Decode remaining.\n\tremainBytes := dstEvery - (decoded / 4)\n\tfor i := range br {\n\t\toffset := dstEvery * i\n\t\tendsAt := offset + remainBytes\n\t\tif endsAt > len(out) {\n\t\t\tendsAt = len(out)\n\t\t}\n\t\tbr := &br[i]\n\t\tbitsLeft := br.remaining()\n\t\tfor bitsLeft > 0 {\n\t\t\tbr.fill()\n\t\t\tif offset >= endsAt {\n\t\t\t\td.bufs.Put(buf)\n\t\t\t\treturn nil, errors.New(\"corruption detected: stream overrun 4\")\n\t\t\t}\n\n\t\t\t// Read value and increment offset.\n\t\t\tval := br.peekBitsFast(d.actualTableLog)\n\t\t\tv := single[val&tlMask].entry\n\t\t\tnBits := uint8(v)\n\t\t\tbr.advance(nBits)\n\t\t\tbitsLeft -= uint(nBits)\n\t\t\tout[offset] = uint8(v >> 8)\n\t\t\toffset++\n\t\t}\n\t\tif offset != endsAt {\n\t\t\td.bufs.Put(buf)\n\t\t\treturn nil, fmt.Errorf(\"corruption detected: short output block %d, end %d != %d\", i, offset, endsAt)\n\t\t}\n\t\tdecoded += offset - dstEvery*i\n\t\terr = br.close()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\td.bufs.Put(buf)\n\tif dstSize != decoded {\n\t\treturn nil, errors.New(\"corruption detected: short output block\")\n\t}\n\treturn dst, nil\n}\n\n// Decompress1X will decompress a 1X encoded stream.\n// The cap of the output buffer will be the maximum decompressed size.\n// The length of the supplied input must match the end of a block exactly.\nfunc (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) {\n\tif len(d.dt.single) == 0 {\n\t\treturn nil, errors.New(\"no table loaded\")\n\t}\n\tif use8BitTables && d.actualTableLog <= 8 {\n\t\treturn d.decompress1X8Bit(dst, src)\n\t}\n\tvar br bitReaderShifted\n\terr := br.init(src)\n\tif err != nil {\n\t\treturn dst, err\n\t}\n\tmaxDecodedSize := cap(dst)\n\tdst = dst[:0]\n\n\t// Avoid bounds check by always having full sized table.\n\tconst tlSize = 1 << tableLogMax\n\tconst tlMask = tlSize - 1\n\tdt := d.dt.single[:tlSize]\n\n\t// Use temp table to avoid bound checks/append penalty.\n\tbufs := d.buffer()\n\tbuf := &bufs[0]\n\tvar off uint8\n\n\tfor br.off >= 8 {\n\t\tbr.fillFast()\n\t\tv := dt[br.peekBitsFast(d.actualTableLog)&tlMask]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+0] = uint8(v.entry >> 8)\n\n\t\tv = dt[br.peekBitsFast(d.actualTableLog)&tlMask]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+1] = uint8(v.entry >> 8)\n\n\t\t// Refill\n\t\tbr.fillFast()\n\n\t\tv = dt[br.peekBitsFast(d.actualTableLog)&tlMask]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+2] = uint8(v.entry >> 8)\n\n\t\tv = dt[br.peekBitsFast(d.actualTableLog)&tlMask]\n\t\tbr.advance(uint8(v.entry))\n\t\tbuf[off+3] = uint8(v.entry >> 8)\n\n\t\toff += 4\n\t\tif off == 0 {\n\t\t\tif len(dst)+256 > maxDecodedSize {\n\t\t\t\tbr.close()\n\t\t\t\td.bufs.Put(bufs)\n\t\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t\t}\n\t\t\tdst = append(dst, buf[:]...)\n\t\t}\n\t}\n\n\tif len(dst)+int(off) > maxDecodedSize {\n\t\td.bufs.Put(bufs)\n\t\tbr.close()\n\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t}\n\tdst = append(dst, buf[:off]...)\n\n\t// br < 8, so uint8 is fine\n\tbitsLeft := uint8(br.off)*8 + 64 - br.bitsRead\n\tfor bitsLeft > 0 {\n\t\tbr.fill()\n\t\tif false && br.bitsRead >= 32 {\n\t\t\tif br.off >= 4 {\n\t\t\t\tv := br.in[br.off-4:]\n\t\t\t\tv = v[:4]\n\t\t\t\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\t\t\t\tbr.value = (br.value << 32) | uint64(low)\n\t\t\t\tbr.bitsRead -= 32\n\t\t\t\tbr.off -= 4\n\t\t\t} else {\n\t\t\t\tfor br.off > 0 {\n\t\t\t\t\tbr.value = (br.value << 8) | uint64(br.in[br.off-1])\n\t\t\t\t\tbr.bitsRead -= 8\n\t\t\t\t\tbr.off--\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(dst) >= maxDecodedSize {\n\t\t\td.bufs.Put(bufs)\n\t\t\tbr.close()\n\t\t\treturn nil, ErrMaxDecodedSizeExceeded\n\t\t}\n\t\tv := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask]\n\t\tnBits := uint8(v.entry)\n\t\tbr.advance(nBits)\n\t\tbitsLeft -= nBits\n\t\tdst = append(dst, uint8(v.entry>>8))\n\t}\n\td.bufs.Put(bufs)\n\treturn dst, br.close()\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/huff0/huff0.go",
    "content": "// Package huff0 provides fast huffman encoding as used in zstd.\n//\n// See README.md at https://github.com/klauspost/compress/tree/master/huff0 for details.\npackage huff0\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/bits\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/fse\"\n)\n\nconst (\n\tmaxSymbolValue = 255\n\n\t// zstandard limits tablelog to 11, see:\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#huffman-tree-description\n\ttableLogMax     = 11\n\ttableLogDefault = 11\n\tminTablelog     = 5\n\thuffNodesLen    = 512\n\n\t// BlockSizeMax is maximum input size for a single block uncompressed.\n\tBlockSizeMax = 1<<18 - 1\n)\n\nvar (\n\t// ErrIncompressible is returned when input is judged to be too hard to compress.\n\tErrIncompressible = errors.New(\"input is not compressible\")\n\n\t// ErrUseRLE is returned from the compressor when the input is a single byte value repeated.\n\tErrUseRLE = errors.New(\"input is single value repeated\")\n\n\t// ErrTooBig is return if input is too large for a single block.\n\tErrTooBig = errors.New(\"input too big\")\n\n\t// ErrMaxDecodedSizeExceeded is return if input is too large for a single block.\n\tErrMaxDecodedSizeExceeded = errors.New(\"maximum output size exceeded\")\n)\n\ntype ReusePolicy uint8\n\nconst (\n\t// ReusePolicyAllow will allow reuse if it produces smaller output.\n\tReusePolicyAllow ReusePolicy = iota\n\n\t// ReusePolicyPrefer will re-use aggressively if possible.\n\t// This will not check if a new table will produce smaller output,\n\t// except if the current table is impossible to use or\n\t// compressed output is bigger than input.\n\tReusePolicyPrefer\n\n\t// ReusePolicyNone will disable re-use of tables.\n\t// This is slightly faster than ReusePolicyAllow but may produce larger output.\n\tReusePolicyNone\n\n\t// ReusePolicyMust must allow reuse and produce smaller output.\n\tReusePolicyMust\n)\n\ntype Scratch struct {\n\tcount [maxSymbolValue + 1]uint32\n\n\t// Per block parameters.\n\t// These can be used to override compression parameters of the block.\n\t// Do not touch, unless you know what you are doing.\n\n\t// Out is output buffer.\n\t// If the scratch is re-used before the caller is done processing the output,\n\t// set this field to nil.\n\t// Otherwise the output buffer will be re-used for next Compression/Decompression step\n\t// and allocation will be avoided.\n\tOut []byte\n\n\t// OutTable will contain the table data only, if a new table has been generated.\n\t// Slice of the returned data.\n\tOutTable []byte\n\n\t// OutData will contain the compressed data.\n\t// Slice of the returned data.\n\tOutData []byte\n\n\t// MaxDecodedSize will set the maximum allowed output size.\n\t// This value will automatically be set to BlockSizeMax if not set.\n\t// Decoders will return ErrMaxDecodedSizeExceeded is this limit is exceeded.\n\tMaxDecodedSize int\n\n\tsrcLen int\n\n\t// MaxSymbolValue will override the maximum symbol value of the next block.\n\tMaxSymbolValue uint8\n\n\t// TableLog will attempt to override the tablelog for the next block.\n\t// Must be <= 11 and >= 5.\n\tTableLog uint8\n\n\t// Reuse will specify the reuse policy\n\tReuse ReusePolicy\n\n\t// WantLogLess allows to specify a log 2 reduction that should at least be achieved,\n\t// otherwise the block will be returned as incompressible.\n\t// The reduction should then at least be (input size >> WantLogLess)\n\t// If WantLogLess == 0 any improvement will do.\n\tWantLogLess uint8\n\n\tsymbolLen      uint16 // Length of active part of the symbol table.\n\tmaxCount       int    // count of the most probable symbol\n\tclearCount     bool   // clear count\n\tactualTableLog uint8  // Selected tablelog.\n\tprevTableLog   uint8  // Tablelog for previous table\n\tprevTable      cTable // Table used for previous compression.\n\tcTable         cTable // compression table\n\tdt             dTable // decompression table\n\tnodes          []nodeElt\n\ttmpOut         [4][]byte\n\tfse            *fse.Scratch\n\tdecPool        sync.Pool // *[4][256]byte buffers.\n\thuffWeight     [maxSymbolValue + 1]byte\n}\n\n// TransferCTable will transfer the previously used compression table.\nfunc (s *Scratch) TransferCTable(src *Scratch) {\n\tif cap(s.prevTable) < len(src.prevTable) {\n\t\ts.prevTable = make(cTable, 0, maxSymbolValue+1)\n\t}\n\ts.prevTable = s.prevTable[:len(src.prevTable)]\n\tcopy(s.prevTable, src.prevTable)\n\ts.prevTableLog = src.prevTableLog\n}\n\nfunc (s *Scratch) prepare(in []byte) (*Scratch, error) {\n\tif len(in) > BlockSizeMax {\n\t\treturn nil, ErrTooBig\n\t}\n\tif s == nil {\n\t\ts = &Scratch{}\n\t}\n\tif s.MaxSymbolValue == 0 {\n\t\ts.MaxSymbolValue = maxSymbolValue\n\t}\n\tif s.TableLog == 0 {\n\t\ts.TableLog = tableLogDefault\n\t}\n\tif s.TableLog > tableLogMax || s.TableLog < minTablelog {\n\t\treturn nil, fmt.Errorf(\" invalid tableLog %d (%d -> %d)\", s.TableLog, minTablelog, tableLogMax)\n\t}\n\tif s.MaxDecodedSize <= 0 || s.MaxDecodedSize > BlockSizeMax {\n\t\ts.MaxDecodedSize = BlockSizeMax\n\t}\n\tif s.clearCount && s.maxCount == 0 {\n\t\tfor i := range s.count {\n\t\t\ts.count[i] = 0\n\t\t}\n\t\ts.clearCount = false\n\t}\n\tif cap(s.Out) == 0 {\n\t\ts.Out = make([]byte, 0, len(in))\n\t}\n\ts.Out = s.Out[:0]\n\n\ts.OutTable = nil\n\ts.OutData = nil\n\tif cap(s.nodes) < huffNodesLen+1 {\n\t\ts.nodes = make([]nodeElt, 0, huffNodesLen+1)\n\t}\n\ts.nodes = s.nodes[:0]\n\tif s.fse == nil {\n\t\ts.fse = &fse.Scratch{}\n\t}\n\ts.srcLen = len(in)\n\n\treturn s, nil\n}\n\ntype cTable []cTableEntry\n\nfunc (c cTable) write(s *Scratch) error {\n\tvar (\n\t\t// precomputed conversion table\n\t\tbitsToWeight [tableLogMax + 1]byte\n\t\thuffLog      = s.actualTableLog\n\t\t// last weight is not saved.\n\t\tmaxSymbolValue = uint8(s.symbolLen - 1)\n\t\thuffWeight     = s.huffWeight[:256]\n\t)\n\tconst (\n\t\tmaxFSETableLog = 6\n\t)\n\t// convert to weight\n\tbitsToWeight[0] = 0\n\tfor n := uint8(1); n < huffLog+1; n++ {\n\t\tbitsToWeight[n] = huffLog + 1 - n\n\t}\n\n\t// Acquire histogram for FSE.\n\thist := s.fse.Histogram()\n\thist = hist[:256]\n\tfor i := range hist[:16] {\n\t\thist[i] = 0\n\t}\n\tfor n := uint8(0); n < maxSymbolValue; n++ {\n\t\tv := bitsToWeight[c[n].nBits] & 15\n\t\thuffWeight[n] = v\n\t\thist[v]++\n\t}\n\n\t// FSE compress if feasible.\n\tif maxSymbolValue >= 2 {\n\t\thuffMaxCnt := uint32(0)\n\t\thuffMax := uint8(0)\n\t\tfor i, v := range hist[:16] {\n\t\t\tif v == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\thuffMax = byte(i)\n\t\t\tif v > huffMaxCnt {\n\t\t\t\thuffMaxCnt = v\n\t\t\t}\n\t\t}\n\t\ts.fse.HistogramFinished(huffMax, int(huffMaxCnt))\n\t\ts.fse.TableLog = maxFSETableLog\n\t\tb, err := fse.Compress(huffWeight[:maxSymbolValue], s.fse)\n\t\tif err == nil && len(b) < int(s.symbolLen>>1) {\n\t\t\ts.Out = append(s.Out, uint8(len(b)))\n\t\t\ts.Out = append(s.Out, b...)\n\t\t\treturn nil\n\t\t}\n\t\t// Unable to compress (RLE/uncompressible)\n\t}\n\t// write raw values as 4-bits (max : 15)\n\tif maxSymbolValue > (256 - 128) {\n\t\t// should not happen : likely means source cannot be compressed\n\t\treturn ErrIncompressible\n\t}\n\top := s.Out\n\t// special case, pack weights 4 bits/weight.\n\top = append(op, 128|(maxSymbolValue-1))\n\t// be sure it doesn't cause msan issue in final combination\n\thuffWeight[maxSymbolValue] = 0\n\tfor n := uint16(0); n < uint16(maxSymbolValue); n += 2 {\n\t\top = append(op, (huffWeight[n]<<4)|huffWeight[n+1])\n\t}\n\ts.Out = op\n\treturn nil\n}\n\nfunc (c cTable) estTableSize(s *Scratch) (sz int, err error) {\n\tvar (\n\t\t// precomputed conversion table\n\t\tbitsToWeight [tableLogMax + 1]byte\n\t\thuffLog      = s.actualTableLog\n\t\t// last weight is not saved.\n\t\tmaxSymbolValue = uint8(s.symbolLen - 1)\n\t\thuffWeight     = s.huffWeight[:256]\n\t)\n\tconst (\n\t\tmaxFSETableLog = 6\n\t)\n\t// convert to weight\n\tbitsToWeight[0] = 0\n\tfor n := uint8(1); n < huffLog+1; n++ {\n\t\tbitsToWeight[n] = huffLog + 1 - n\n\t}\n\n\t// Acquire histogram for FSE.\n\thist := s.fse.Histogram()\n\thist = hist[:256]\n\tfor i := range hist[:16] {\n\t\thist[i] = 0\n\t}\n\tfor n := uint8(0); n < maxSymbolValue; n++ {\n\t\tv := bitsToWeight[c[n].nBits] & 15\n\t\thuffWeight[n] = v\n\t\thist[v]++\n\t}\n\n\t// FSE compress if feasible.\n\tif maxSymbolValue >= 2 {\n\t\thuffMaxCnt := uint32(0)\n\t\thuffMax := uint8(0)\n\t\tfor i, v := range hist[:16] {\n\t\t\tif v == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\thuffMax = byte(i)\n\t\t\tif v > huffMaxCnt {\n\t\t\t\thuffMaxCnt = v\n\t\t\t}\n\t\t}\n\t\ts.fse.HistogramFinished(huffMax, int(huffMaxCnt))\n\t\ts.fse.TableLog = maxFSETableLog\n\t\tb, err := fse.Compress(huffWeight[:maxSymbolValue], s.fse)\n\t\tif err == nil && len(b) < int(s.symbolLen>>1) {\n\t\t\tsz += 1 + len(b)\n\t\t\treturn sz, nil\n\t\t}\n\t\t// Unable to compress (RLE/uncompressible)\n\t}\n\t// write raw values as 4-bits (max : 15)\n\tif maxSymbolValue > (256 - 128) {\n\t\t// should not happen : likely means source cannot be compressed\n\t\treturn 0, ErrIncompressible\n\t}\n\t// special case, pack weights 4 bits/weight.\n\tsz += 1 + int(maxSymbolValue/2)\n\treturn sz, nil\n}\n\n// estimateSize returns the estimated size in bytes of the input represented in the\n// histogram supplied.\nfunc (c cTable) estimateSize(hist []uint32) int {\n\tnbBits := uint32(7)\n\tfor i, v := range c[:len(hist)] {\n\t\tnbBits += uint32(v.nBits) * hist[i]\n\t}\n\treturn int(nbBits >> 3)\n}\n\n// minSize returns the minimum possible size considering the shannon limit.\nfunc (s *Scratch) minSize(total int) int {\n\tnbBits := float64(7)\n\tfTotal := float64(total)\n\tfor _, v := range s.count[:s.symbolLen] {\n\t\tn := float64(v)\n\t\tif n > 0 {\n\t\t\tnbBits += math.Log2(fTotal/n) * n\n\t\t}\n\t}\n\treturn int(nbBits) >> 3\n}\n\nfunc highBit32(val uint32) (n uint32) {\n\treturn uint32(bits.Len32(val) - 1)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go",
    "content": "// Package cpuinfo gives runtime info about the current CPU.\n//\n// This is a very limited module meant for use internally\n// in this project. For more versatile solution check\n// https://github.com/klauspost/cpuid.\npackage cpuinfo\n\n// HasBMI1 checks whether an x86 CPU supports the BMI1 extension.\nfunc HasBMI1() bool {\n\treturn hasBMI1\n}\n\n// HasBMI2 checks whether an x86 CPU supports the BMI2 extension.\nfunc HasBMI2() bool {\n\treturn hasBMI2\n}\n\n// DisableBMI2 will disable BMI2, for testing purposes.\n// Call returned function to restore previous state.\nfunc DisableBMI2() func() {\n\told := hasBMI2\n\thasBMI2 = false\n\treturn func() {\n\t\thasBMI2 = old\n\t}\n}\n\n// HasBMI checks whether an x86 CPU supports both BMI1 and BMI2 extensions.\nfunc HasBMI() bool {\n\treturn HasBMI1() && HasBMI2()\n}\n\nvar hasBMI1 bool\nvar hasBMI2 bool\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go",
    "content": "//go:build amd64 && !appengine && !noasm && gc\n// +build amd64,!appengine,!noasm,gc\n\npackage cpuinfo\n\n// go:noescape\nfunc x86extensions() (bmi1, bmi2 bool)\n\nfunc init() {\n\thasBMI1, hasBMI2 = x86extensions()\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s",
    "content": "// +build !appengine\n// +build gc\n// +build !noasm\n\n#include \"textflag.h\"\n#include \"funcdata.h\"\n#include \"go_asm.h\"\n\nTEXT ·x86extensions(SB), NOSPLIT, $0\n\t// 1. determine max EAX value\n\tXORQ AX, AX\n\tCPUID\n\n\tCMPQ AX, $7\n\tJB   unsupported\n\n\t// 2. EAX = 7, ECX = 0 --- see Table 3-8 \"Information Returned by CPUID Instruction\"\n\tMOVQ $7, AX\n\tMOVQ $0, CX\n\tCPUID\n\n\tBTQ   $3, BX // bit 3 = BMI1\n\tSETCS AL\n\n\tBTQ   $8, BX // bit 8 = BMI2\n\tSETCS AH\n\n\tMOVB AL, bmi1+0(FP)\n\tMOVB AH, bmi2+1(FP)\n\tRET\n\nunsupported:\n\tXORQ AX, AX\n\tMOVB AL, bmi1+0(FP)\n\tMOVB AL, bmi2+1(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/snapref/LICENSE",
    "content": "Copyright (c) 2011 The Snappy-Go Authors. All 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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/github.com/klauspost/compress/internal/snapref/decode.go",
    "content": "// Copyright 2011 The Snappy-Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage snapref\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n)\n\nvar (\n\t// ErrCorrupt reports that the input is invalid.\n\tErrCorrupt = errors.New(\"snappy: corrupt input\")\n\t// ErrTooLarge reports that the uncompressed length is too large.\n\tErrTooLarge = errors.New(\"snappy: decoded block is too large\")\n\t// ErrUnsupported reports that the input isn't supported.\n\tErrUnsupported = errors.New(\"snappy: unsupported input\")\n\n\terrUnsupportedLiteralLength = errors.New(\"snappy: unsupported literal length\")\n)\n\n// DecodedLen returns the length of the decoded block.\nfunc DecodedLen(src []byte) (int, error) {\n\tv, _, err := decodedLen(src)\n\treturn v, err\n}\n\n// decodedLen returns the length of the decoded block and the number of bytes\n// that the length header occupied.\nfunc decodedLen(src []byte) (blockLen, headerLen int, err error) {\n\tv, n := binary.Uvarint(src)\n\tif n <= 0 || v > 0xffffffff {\n\t\treturn 0, 0, ErrCorrupt\n\t}\n\n\tconst wordSize = 32 << (^uint(0) >> 32 & 1)\n\tif wordSize == 32 && v > 0x7fffffff {\n\t\treturn 0, 0, ErrTooLarge\n\t}\n\treturn int(v), n, nil\n}\n\nconst (\n\tdecodeErrCodeCorrupt                  = 1\n\tdecodeErrCodeUnsupportedLiteralLength = 2\n)\n\n// Decode returns the decoded form of src. The returned slice may be a sub-\n// slice of dst if dst was large enough to hold the entire decoded block.\n// Otherwise, a newly allocated slice will be returned.\n//\n// The dst and src must not overlap. It is valid to pass a nil dst.\n//\n// Decode handles the Snappy block format, not the Snappy stream format.\nfunc Decode(dst, src []byte) ([]byte, error) {\n\tdLen, s, err := decodedLen(src)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif dLen <= len(dst) {\n\t\tdst = dst[:dLen]\n\t} else {\n\t\tdst = make([]byte, dLen)\n\t}\n\tswitch decode(dst, src[s:]) {\n\tcase 0:\n\t\treturn dst, nil\n\tcase decodeErrCodeUnsupportedLiteralLength:\n\t\treturn nil, errUnsupportedLiteralLength\n\t}\n\treturn nil, ErrCorrupt\n}\n\n// NewReader returns a new Reader that decompresses from r, using the framing\n// format described at\n// https://github.com/google/snappy/blob/master/framing_format.txt\nfunc NewReader(r io.Reader) *Reader {\n\treturn &Reader{\n\t\tr:       r,\n\t\tdecoded: make([]byte, maxBlockSize),\n\t\tbuf:     make([]byte, maxEncodedLenOfMaxBlockSize+checksumSize),\n\t}\n}\n\n// Reader is an io.Reader that can read Snappy-compressed bytes.\n//\n// Reader handles the Snappy stream format, not the Snappy block format.\ntype Reader struct {\n\tr       io.Reader\n\terr     error\n\tdecoded []byte\n\tbuf     []byte\n\t// decoded[i:j] contains decoded bytes that have not yet been passed on.\n\ti, j       int\n\treadHeader bool\n}\n\n// Reset discards any buffered data, resets all state, and switches the Snappy\n// reader to read from r. This permits reusing a Reader rather than allocating\n// a new one.\nfunc (r *Reader) Reset(reader io.Reader) {\n\tr.r = reader\n\tr.err = nil\n\tr.i = 0\n\tr.j = 0\n\tr.readHeader = false\n}\n\nfunc (r *Reader) readFull(p []byte, allowEOF bool) (ok bool) {\n\tif _, r.err = io.ReadFull(r.r, p); r.err != nil {\n\t\tif r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) {\n\t\t\tr.err = ErrCorrupt\n\t\t}\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (r *Reader) fill() error {\n\tfor r.i >= r.j {\n\t\tif !r.readFull(r.buf[:4], true) {\n\t\t\treturn r.err\n\t\t}\n\t\tchunkType := r.buf[0]\n\t\tif !r.readHeader {\n\t\t\tif chunkType != chunkTypeStreamIdentifier {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tr.readHeader = true\n\t\t}\n\t\tchunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16\n\t\tif chunkLen > len(r.buf) {\n\t\t\tr.err = ErrUnsupported\n\t\t\treturn r.err\n\t\t}\n\n\t\t// The chunk types are specified at\n\t\t// https://github.com/google/snappy/blob/master/framing_format.txt\n\t\tswitch chunkType {\n\t\tcase chunkTypeCompressedData:\n\t\t\t// Section 4.2. Compressed data (chunk type 0x00).\n\t\t\tif chunkLen < checksumSize {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tbuf := r.buf[:chunkLen]\n\t\t\tif !r.readFull(buf, false) {\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tchecksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24\n\t\t\tbuf = buf[checksumSize:]\n\n\t\t\tn, err := DecodedLen(buf)\n\t\t\tif err != nil {\n\t\t\t\tr.err = err\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tif n > len(r.decoded) {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tif _, err := Decode(r.decoded, buf); err != nil {\n\t\t\t\tr.err = err\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tif crc(r.decoded[:n]) != checksum {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tr.i, r.j = 0, n\n\t\t\tcontinue\n\n\t\tcase chunkTypeUncompressedData:\n\t\t\t// Section 4.3. Uncompressed data (chunk type 0x01).\n\t\t\tif chunkLen < checksumSize {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tbuf := r.buf[:checksumSize]\n\t\t\tif !r.readFull(buf, false) {\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tchecksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24\n\t\t\t// Read directly into r.decoded instead of via r.buf.\n\t\t\tn := chunkLen - checksumSize\n\t\t\tif n > len(r.decoded) {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tif !r.readFull(r.decoded[:n], false) {\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tif crc(r.decoded[:n]) != checksum {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tr.i, r.j = 0, n\n\t\t\tcontinue\n\n\t\tcase chunkTypeStreamIdentifier:\n\t\t\t// Section 4.1. Stream identifier (chunk type 0xff).\n\t\t\tif chunkLen != len(magicBody) {\n\t\t\t\tr.err = ErrCorrupt\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tif !r.readFull(r.buf[:len(magicBody)], false) {\n\t\t\t\treturn r.err\n\t\t\t}\n\t\t\tfor i := 0; i < len(magicBody); i++ {\n\t\t\t\tif r.buf[i] != magicBody[i] {\n\t\t\t\t\tr.err = ErrCorrupt\n\t\t\t\t\treturn r.err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif chunkType <= 0x7f {\n\t\t\t// Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f).\n\t\t\tr.err = ErrUnsupported\n\t\t\treturn r.err\n\t\t}\n\t\t// Section 4.4 Padding (chunk type 0xfe).\n\t\t// Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd).\n\t\tif !r.readFull(r.buf[:chunkLen], false) {\n\t\t\treturn r.err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Read satisfies the io.Reader interface.\nfunc (r *Reader) Read(p []byte) (int, error) {\n\tif r.err != nil {\n\t\treturn 0, r.err\n\t}\n\n\tif err := r.fill(); err != nil {\n\t\treturn 0, err\n\t}\n\n\tn := copy(p, r.decoded[r.i:r.j])\n\tr.i += n\n\treturn n, nil\n}\n\n// ReadByte satisfies the io.ByteReader interface.\nfunc (r *Reader) ReadByte() (byte, error) {\n\tif r.err != nil {\n\t\treturn 0, r.err\n\t}\n\n\tif err := r.fill(); err != nil {\n\t\treturn 0, err\n\t}\n\n\tc := r.decoded[r.i]\n\tr.i++\n\treturn c, nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/snapref/decode_other.go",
    "content": "// Copyright 2016 The Snappy-Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage snapref\n\n// decode writes the decoding of src to dst. It assumes that the varint-encoded\n// length of the decompressed bytes has already been read, and that len(dst)\n// equals that length.\n//\n// It returns 0 on success or a decodeErrCodeXxx error code on failure.\nfunc decode(dst, src []byte) int {\n\tvar d, s, offset, length int\n\tfor s < len(src) {\n\t\tswitch src[s] & 0x03 {\n\t\tcase tagLiteral:\n\t\t\tx := uint32(src[s] >> 2)\n\t\t\tswitch {\n\t\t\tcase x < 60:\n\t\t\t\ts++\n\t\t\tcase x == 60:\n\t\t\t\ts += 2\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-1])\n\t\t\tcase x == 61:\n\t\t\t\ts += 3\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-2]) | uint32(src[s-1])<<8\n\t\t\tcase x == 62:\n\t\t\t\ts += 4\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16\n\t\t\tcase x == 63:\n\t\t\t\ts += 5\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24\n\t\t\t}\n\t\t\tlength = int(x) + 1\n\t\t\tif length <= 0 {\n\t\t\t\treturn decodeErrCodeUnsupportedLiteralLength\n\t\t\t}\n\t\t\tif length > len(dst)-d || length > len(src)-s {\n\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t}\n\t\t\tcopy(dst[d:], src[s:s+length])\n\t\t\td += length\n\t\t\ts += length\n\t\t\tcontinue\n\n\t\tcase tagCopy1:\n\t\t\ts += 2\n\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t}\n\t\t\tlength = 4 + int(src[s-2])>>2&0x7\n\t\t\toffset = int(uint32(src[s-2])&0xe0<<3 | uint32(src[s-1]))\n\n\t\tcase tagCopy2:\n\t\t\ts += 3\n\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t}\n\t\t\tlength = 1 + int(src[s-3])>>2\n\t\t\toffset = int(uint32(src[s-2]) | uint32(src[s-1])<<8)\n\n\t\tcase tagCopy4:\n\t\t\ts += 5\n\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\treturn decodeErrCodeCorrupt\n\t\t\t}\n\t\t\tlength = 1 + int(src[s-5])>>2\n\t\t\toffset = int(uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24)\n\t\t}\n\n\t\tif offset <= 0 || d < offset || length > len(dst)-d {\n\t\t\treturn decodeErrCodeCorrupt\n\t\t}\n\t\t// Copy from an earlier sub-slice of dst to a later sub-slice.\n\t\t// If no overlap, use the built-in copy:\n\t\tif offset >= length {\n\t\t\tcopy(dst[d:d+length], dst[d-offset:])\n\t\t\td += length\n\t\t\tcontinue\n\t\t}\n\n\t\t// Unlike the built-in copy function, this byte-by-byte copy always runs\n\t\t// forwards, even if the slices overlap. Conceptually, this is:\n\t\t//\n\t\t// d += forwardCopy(dst[d:d+length], dst[d-offset:])\n\t\t//\n\t\t// We align the slices into a and b and show the compiler they are the same size.\n\t\t// This allows the loop to run without bounds checks.\n\t\ta := dst[d : d+length]\n\t\tb := dst[d-offset:]\n\t\tb = b[:len(a)]\n\t\tfor i := range a {\n\t\t\ta[i] = b[i]\n\t\t}\n\t\td += length\n\t}\n\tif d != len(dst) {\n\t\treturn decodeErrCodeCorrupt\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/snapref/encode.go",
    "content": "// Copyright 2011 The Snappy-Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage snapref\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n)\n\n// Encode returns the encoded form of src. The returned slice may be a sub-\n// slice of dst if dst was large enough to hold the entire encoded block.\n// Otherwise, a newly allocated slice will be returned.\n//\n// The dst and src must not overlap. It is valid to pass a nil dst.\n//\n// Encode handles the Snappy block format, not the Snappy stream format.\nfunc Encode(dst, src []byte) []byte {\n\tif n := MaxEncodedLen(len(src)); n < 0 {\n\t\tpanic(ErrTooLarge)\n\t} else if len(dst) < n {\n\t\tdst = make([]byte, n)\n\t}\n\n\t// The block starts with the varint-encoded length of the decompressed bytes.\n\td := binary.PutUvarint(dst, uint64(len(src)))\n\n\tfor len(src) > 0 {\n\t\tp := src\n\t\tsrc = nil\n\t\tif len(p) > maxBlockSize {\n\t\t\tp, src = p[:maxBlockSize], p[maxBlockSize:]\n\t\t}\n\t\tif len(p) < minNonLiteralBlockSize {\n\t\t\td += emitLiteral(dst[d:], p)\n\t\t} else {\n\t\t\td += encodeBlock(dst[d:], p)\n\t\t}\n\t}\n\treturn dst[:d]\n}\n\n// inputMargin is the minimum number of extra input bytes to keep, inside\n// encodeBlock's inner loop. On some architectures, this margin lets us\n// implement a fast path for emitLiteral, where the copy of short (<= 16 byte)\n// literals can be implemented as a single load to and store from a 16-byte\n// register. That literal's actual length can be as short as 1 byte, so this\n// can copy up to 15 bytes too much, but that's OK as subsequent iterations of\n// the encoding loop will fix up the copy overrun, and this inputMargin ensures\n// that we don't overrun the dst and src buffers.\nconst inputMargin = 16 - 1\n\n// minNonLiteralBlockSize is the minimum size of the input to encodeBlock that\n// could be encoded with a copy tag. This is the minimum with respect to the\n// algorithm used by encodeBlock, not a minimum enforced by the file format.\n//\n// The encoded output must start with at least a 1 byte literal, as there are\n// no previous bytes to copy. A minimal (1 byte) copy after that, generated\n// from an emitCopy call in encodeBlock's main loop, would require at least\n// another inputMargin bytes, for the reason above: we want any emitLiteral\n// calls inside encodeBlock's main loop to use the fast path if possible, which\n// requires being able to overrun by inputMargin bytes. Thus,\n// minNonLiteralBlockSize equals 1 + 1 + inputMargin.\n//\n// The C++ code doesn't use this exact threshold, but it could, as discussed at\n// https://groups.google.com/d/topic/snappy-compression/oGbhsdIJSJ8/discussion\n// The difference between Go (2+inputMargin) and C++ (inputMargin) is purely an\n// optimization. It should not affect the encoded form. This is tested by\n// TestSameEncodingAsCppShortCopies.\nconst minNonLiteralBlockSize = 1 + 1 + inputMargin\n\n// MaxEncodedLen returns the maximum length of a snappy block, given its\n// uncompressed length.\n//\n// It will return a negative value if srcLen is too large to encode.\nfunc MaxEncodedLen(srcLen int) int {\n\tn := uint64(srcLen)\n\tif n > 0xffffffff {\n\t\treturn -1\n\t}\n\t// Compressed data can be defined as:\n\t//    compressed := item* literal*\n\t//    item       := literal* copy\n\t//\n\t// The trailing literal sequence has a space blowup of at most 62/60\n\t// since a literal of length 60 needs one tag byte + one extra byte\n\t// for length information.\n\t//\n\t// Item blowup is trickier to measure. Suppose the \"copy\" op copies\n\t// 4 bytes of data. Because of a special check in the encoding code,\n\t// we produce a 4-byte copy only if the offset is < 65536. Therefore\n\t// the copy op takes 3 bytes to encode, and this type of item leads\n\t// to at most the 62/60 blowup for representing literals.\n\t//\n\t// Suppose the \"copy\" op copies 5 bytes of data. If the offset is big\n\t// enough, it will take 5 bytes to encode the copy op. Therefore the\n\t// worst case here is a one-byte literal followed by a five-byte copy.\n\t// That is, 6 bytes of input turn into 7 bytes of \"compressed\" data.\n\t//\n\t// This last factor dominates the blowup, so the final estimate is:\n\tn = 32 + n + n/6\n\tif n > 0xffffffff {\n\t\treturn -1\n\t}\n\treturn int(n)\n}\n\nvar errClosed = errors.New(\"snappy: Writer is closed\")\n\n// NewWriter returns a new Writer that compresses to w.\n//\n// The Writer returned does not buffer writes. There is no need to Flush or\n// Close such a Writer.\n//\n// Deprecated: the Writer returned is not suitable for many small writes, only\n// for few large writes. Use NewBufferedWriter instead, which is efficient\n// regardless of the frequency and shape of the writes, and remember to Close\n// that Writer when done.\nfunc NewWriter(w io.Writer) *Writer {\n\treturn &Writer{\n\t\tw:    w,\n\t\tobuf: make([]byte, obufLen),\n\t}\n}\n\n// NewBufferedWriter returns a new Writer that compresses to w, using the\n// framing format described at\n// https://github.com/google/snappy/blob/master/framing_format.txt\n//\n// The Writer returned buffers writes. Users must call Close to guarantee all\n// data has been forwarded to the underlying io.Writer. They may also call\n// Flush zero or more times before calling Close.\nfunc NewBufferedWriter(w io.Writer) *Writer {\n\treturn &Writer{\n\t\tw:    w,\n\t\tibuf: make([]byte, 0, maxBlockSize),\n\t\tobuf: make([]byte, obufLen),\n\t}\n}\n\n// Writer is an io.Writer that can write Snappy-compressed bytes.\n//\n// Writer handles the Snappy stream format, not the Snappy block format.\ntype Writer struct {\n\tw   io.Writer\n\terr error\n\n\t// ibuf is a buffer for the incoming (uncompressed) bytes.\n\t//\n\t// Its use is optional. For backwards compatibility, Writers created by the\n\t// NewWriter function have ibuf == nil, do not buffer incoming bytes, and\n\t// therefore do not need to be Flush'ed or Close'd.\n\tibuf []byte\n\n\t// obuf is a buffer for the outgoing (compressed) bytes.\n\tobuf []byte\n\n\t// wroteStreamHeader is whether we have written the stream header.\n\twroteStreamHeader bool\n}\n\n// Reset discards the writer's state and switches the Snappy writer to write to\n// w. This permits reusing a Writer rather than allocating a new one.\nfunc (w *Writer) Reset(writer io.Writer) {\n\tw.w = writer\n\tw.err = nil\n\tif w.ibuf != nil {\n\t\tw.ibuf = w.ibuf[:0]\n\t}\n\tw.wroteStreamHeader = false\n}\n\n// Write satisfies the io.Writer interface.\nfunc (w *Writer) Write(p []byte) (nRet int, errRet error) {\n\tif w.ibuf == nil {\n\t\t// Do not buffer incoming bytes. This does not perform or compress well\n\t\t// if the caller of Writer.Write writes many small slices. This\n\t\t// behavior is therefore deprecated, but still supported for backwards\n\t\t// compatibility with code that doesn't explicitly Flush or Close.\n\t\treturn w.write(p)\n\t}\n\n\t// The remainder of this method is based on bufio.Writer.Write from the\n\t// standard library.\n\n\tfor len(p) > (cap(w.ibuf)-len(w.ibuf)) && w.err == nil {\n\t\tvar n int\n\t\tif len(w.ibuf) == 0 {\n\t\t\t// Large write, empty buffer.\n\t\t\t// Write directly from p to avoid copy.\n\t\t\tn, _ = w.write(p)\n\t\t} else {\n\t\t\tn = copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p)\n\t\t\tw.ibuf = w.ibuf[:len(w.ibuf)+n]\n\t\t\tw.Flush()\n\t\t}\n\t\tnRet += n\n\t\tp = p[n:]\n\t}\n\tif w.err != nil {\n\t\treturn nRet, w.err\n\t}\n\tn := copy(w.ibuf[len(w.ibuf):cap(w.ibuf)], p)\n\tw.ibuf = w.ibuf[:len(w.ibuf)+n]\n\tnRet += n\n\treturn nRet, nil\n}\n\nfunc (w *Writer) write(p []byte) (nRet int, errRet error) {\n\tif w.err != nil {\n\t\treturn 0, w.err\n\t}\n\tfor len(p) > 0 {\n\t\tobufStart := len(magicChunk)\n\t\tif !w.wroteStreamHeader {\n\t\t\tw.wroteStreamHeader = true\n\t\t\tcopy(w.obuf, magicChunk)\n\t\t\tobufStart = 0\n\t\t}\n\n\t\tvar uncompressed []byte\n\t\tif len(p) > maxBlockSize {\n\t\t\tuncompressed, p = p[:maxBlockSize], p[maxBlockSize:]\n\t\t} else {\n\t\t\tuncompressed, p = p, nil\n\t\t}\n\t\tchecksum := crc(uncompressed)\n\n\t\t// Compress the buffer, discarding the result if the improvement\n\t\t// isn't at least 12.5%.\n\t\tcompressed := Encode(w.obuf[obufHeaderLen:], uncompressed)\n\t\tchunkType := uint8(chunkTypeCompressedData)\n\t\tchunkLen := 4 + len(compressed)\n\t\tobufEnd := obufHeaderLen + len(compressed)\n\t\tif len(compressed) >= len(uncompressed)-len(uncompressed)/8 {\n\t\t\tchunkType = chunkTypeUncompressedData\n\t\t\tchunkLen = 4 + len(uncompressed)\n\t\t\tobufEnd = obufHeaderLen\n\t\t}\n\n\t\t// Fill in the per-chunk header that comes before the body.\n\t\tw.obuf[len(magicChunk)+0] = chunkType\n\t\tw.obuf[len(magicChunk)+1] = uint8(chunkLen >> 0)\n\t\tw.obuf[len(magicChunk)+2] = uint8(chunkLen >> 8)\n\t\tw.obuf[len(magicChunk)+3] = uint8(chunkLen >> 16)\n\t\tw.obuf[len(magicChunk)+4] = uint8(checksum >> 0)\n\t\tw.obuf[len(magicChunk)+5] = uint8(checksum >> 8)\n\t\tw.obuf[len(magicChunk)+6] = uint8(checksum >> 16)\n\t\tw.obuf[len(magicChunk)+7] = uint8(checksum >> 24)\n\n\t\tif _, err := w.w.Write(w.obuf[obufStart:obufEnd]); err != nil {\n\t\t\tw.err = err\n\t\t\treturn nRet, err\n\t\t}\n\t\tif chunkType == chunkTypeUncompressedData {\n\t\t\tif _, err := w.w.Write(uncompressed); err != nil {\n\t\t\t\tw.err = err\n\t\t\t\treturn nRet, err\n\t\t\t}\n\t\t}\n\t\tnRet += len(uncompressed)\n\t}\n\treturn nRet, nil\n}\n\n// Flush flushes the Writer to its underlying io.Writer.\nfunc (w *Writer) Flush() error {\n\tif w.err != nil {\n\t\treturn w.err\n\t}\n\tif len(w.ibuf) == 0 {\n\t\treturn nil\n\t}\n\tw.write(w.ibuf)\n\tw.ibuf = w.ibuf[:0]\n\treturn w.err\n}\n\n// Close calls Flush and then closes the Writer.\nfunc (w *Writer) Close() error {\n\tw.Flush()\n\tret := w.err\n\tif w.err == nil {\n\t\tw.err = errClosed\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/snapref/encode_other.go",
    "content": "// Copyright 2016 The Snappy-Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage snapref\n\nfunc load32(b []byte, i int) uint32 {\n\tb = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line.\n\treturn uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n}\n\nfunc load64(b []byte, i int) uint64 {\n\tb = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line.\n\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n}\n\n// emitLiteral writes a literal chunk and returns the number of bytes written.\n//\n// It assumes that:\n//\n//\tdst is long enough to hold the encoded bytes\n//\t1 <= len(lit) && len(lit) <= 65536\nfunc emitLiteral(dst, lit []byte) int {\n\ti, n := 0, uint(len(lit)-1)\n\tswitch {\n\tcase n < 60:\n\t\tdst[0] = uint8(n)<<2 | tagLiteral\n\t\ti = 1\n\tcase n < 1<<8:\n\t\tdst[0] = 60<<2 | tagLiteral\n\t\tdst[1] = uint8(n)\n\t\ti = 2\n\tdefault:\n\t\tdst[0] = 61<<2 | tagLiteral\n\t\tdst[1] = uint8(n)\n\t\tdst[2] = uint8(n >> 8)\n\t\ti = 3\n\t}\n\treturn i + copy(dst[i:], lit)\n}\n\n// emitCopy writes a copy chunk and returns the number of bytes written.\n//\n// It assumes that:\n//\n//\tdst is long enough to hold the encoded bytes\n//\t1 <= offset && offset <= 65535\n//\t4 <= length && length <= 65535\nfunc emitCopy(dst []byte, offset, length int) int {\n\ti := 0\n\t// The maximum length for a single tagCopy1 or tagCopy2 op is 64 bytes. The\n\t// threshold for this loop is a little higher (at 68 = 64 + 4), and the\n\t// length emitted down below is a little lower (at 60 = 64 - 4), because\n\t// it's shorter to encode a length 67 copy as a length 60 tagCopy2 followed\n\t// by a length 7 tagCopy1 (which encodes as 3+2 bytes) than to encode it as\n\t// a length 64 tagCopy2 followed by a length 3 tagCopy2 (which encodes as\n\t// 3+3 bytes). The magic 4 in the 64±4 is because the minimum length for a\n\t// tagCopy1 op is 4 bytes, which is why a length 3 copy has to be an\n\t// encodes-as-3-bytes tagCopy2 instead of an encodes-as-2-bytes tagCopy1.\n\tfor length >= 68 {\n\t\t// Emit a length 64 copy, encoded as 3 bytes.\n\t\tdst[i+0] = 63<<2 | tagCopy2\n\t\tdst[i+1] = uint8(offset)\n\t\tdst[i+2] = uint8(offset >> 8)\n\t\ti += 3\n\t\tlength -= 64\n\t}\n\tif length > 64 {\n\t\t// Emit a length 60 copy, encoded as 3 bytes.\n\t\tdst[i+0] = 59<<2 | tagCopy2\n\t\tdst[i+1] = uint8(offset)\n\t\tdst[i+2] = uint8(offset >> 8)\n\t\ti += 3\n\t\tlength -= 60\n\t}\n\tif length >= 12 || offset >= 2048 {\n\t\t// Emit the remaining copy, encoded as 3 bytes.\n\t\tdst[i+0] = uint8(length-1)<<2 | tagCopy2\n\t\tdst[i+1] = uint8(offset)\n\t\tdst[i+2] = uint8(offset >> 8)\n\t\treturn i + 3\n\t}\n\t// Emit the remaining copy, encoded as 2 bytes.\n\tdst[i+0] = uint8(offset>>8)<<5 | uint8(length-4)<<2 | tagCopy1\n\tdst[i+1] = uint8(offset)\n\treturn i + 2\n}\n\nfunc hash(u, shift uint32) uint32 {\n\treturn (u * 0x1e35a7bd) >> shift\n}\n\n// EncodeBlockInto exposes encodeBlock but checks dst size.\nfunc EncodeBlockInto(dst, src []byte) (d int) {\n\tif MaxEncodedLen(len(src)) > len(dst) {\n\t\treturn 0\n\t}\n\n\t// encodeBlock breaks on too big blocks, so split.\n\tfor len(src) > 0 {\n\t\tp := src\n\t\tsrc = nil\n\t\tif len(p) > maxBlockSize {\n\t\t\tp, src = p[:maxBlockSize], p[maxBlockSize:]\n\t\t}\n\t\tif len(p) < minNonLiteralBlockSize {\n\t\t\td += emitLiteral(dst[d:], p)\n\t\t} else {\n\t\t\td += encodeBlock(dst[d:], p)\n\t\t}\n\t}\n\treturn d\n}\n\n// encodeBlock encodes a non-empty src to a guaranteed-large-enough dst. It\n// assumes that the varint-encoded length of the decompressed bytes has already\n// been written.\n//\n// It also assumes that:\n//\n//\tlen(dst) >= MaxEncodedLen(len(src)) &&\n//\tminNonLiteralBlockSize <= len(src) && len(src) <= maxBlockSize\nfunc encodeBlock(dst, src []byte) (d int) {\n\t// Initialize the hash table. Its size ranges from 1<<8 to 1<<14 inclusive.\n\t// The table element type is uint16, as s < sLimit and sLimit < len(src)\n\t// and len(src) <= maxBlockSize and maxBlockSize == 65536.\n\tconst (\n\t\tmaxTableSize = 1 << 14\n\t\t// tableMask is redundant, but helps the compiler eliminate bounds\n\t\t// checks.\n\t\ttableMask = maxTableSize - 1\n\t)\n\tshift := uint32(32 - 8)\n\tfor tableSize := 1 << 8; tableSize < maxTableSize && tableSize < len(src); tableSize *= 2 {\n\t\tshift--\n\t}\n\t// In Go, all array elements are zero-initialized, so there is no advantage\n\t// to a smaller tableSize per se. However, it matches the C++ algorithm,\n\t// and in the asm versions of this code, we can get away with zeroing only\n\t// the first tableSize elements.\n\tvar table [maxTableSize]uint16\n\n\t// sLimit is when to stop looking for offset/length copies. The inputMargin\n\t// lets us use a fast path for emitLiteral in the main loop, while we are\n\t// looking for copies.\n\tsLimit := len(src) - inputMargin\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := 0\n\n\t// The encoded form must start with a literal, as there are no previous\n\t// bytes to copy, so we start looking for hash matches at s == 1.\n\ts := 1\n\tnextHash := hash(load32(src, s), shift)\n\n\tfor {\n\t\t// Copied from the C++ snappy implementation:\n\t\t//\n\t\t// Heuristic match skipping: If 32 bytes are scanned with no matches\n\t\t// found, start looking only at every other byte. If 32 more bytes are\n\t\t// scanned (or skipped), look at every third byte, etc.. When a match\n\t\t// is found, immediately go back to looking at every byte. This is a\n\t\t// small loss (~5% performance, ~0.1% density) for compressible data\n\t\t// due to more bookkeeping, but for non-compressible data (such as\n\t\t// JPEG) it's a huge win since the compressor quickly \"realizes\" the\n\t\t// data is incompressible and doesn't bother looking for matches\n\t\t// everywhere.\n\t\t//\n\t\t// The \"skip\" variable keeps track of how many bytes there are since\n\t\t// the last match; dividing it by 32 (ie. right-shifting by five) gives\n\t\t// the number of bytes to move ahead for each iteration.\n\t\tskip := 32\n\n\t\tnextS := s\n\t\tcandidate := 0\n\t\tfor {\n\t\t\ts = nextS\n\t\t\tbytesBetweenHashLookups := skip >> 5\n\t\t\tnextS = s + bytesBetweenHashLookups\n\t\t\tskip += bytesBetweenHashLookups\n\t\t\tif nextS > sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\t\t\tcandidate = int(table[nextHash&tableMask])\n\t\t\ttable[nextHash&tableMask] = uint16(s)\n\t\t\tnextHash = hash(load32(src, nextS), shift)\n\t\t\tif load32(src, s) == load32(src, candidate) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes\n\t\t// match. But, prior to the match, src[nextEmit:s] are unmatched. Emit\n\t\t// them as literal bytes.\n\t\td += emitLiteral(dst[d:], src[nextEmit:s])\n\n\t\t// Call emitCopy, and then see if another emitCopy could be our next\n\t\t// move. Repeat until we find no match for the input immediately after\n\t\t// what was consumed by the last emitCopy call.\n\t\t//\n\t\t// If we exit this loop normally then we need to call emitLiteral next,\n\t\t// though we don't yet know how big the literal will be. We handle that\n\t\t// by proceeding to the next iteration of the main loop. We also can\n\t\t// exit this loop via goto if we get close to exhausting the input.\n\t\tfor {\n\t\t\t// Invariant: we have a 4-byte match at s, and no need to emit any\n\t\t\t// literal bytes prior to s.\n\t\t\tbase := s\n\n\t\t\t// Extend the 4-byte match as long as possible.\n\t\t\t//\n\t\t\t// This is an inlined version of:\n\t\t\t//\ts = extendMatch(src, candidate+4, s+4)\n\t\t\ts += 4\n\t\t\tfor i := candidate + 4; s < len(src) && src[i] == src[s]; i, s = i+1, s+1 {\n\t\t\t}\n\n\t\t\td += emitCopy(dst[d:], base-candidate, s-base)\n\t\t\tnextEmit = s\n\t\t\tif s >= sLimit {\n\t\t\t\tgoto emitRemainder\n\t\t\t}\n\n\t\t\t// We could immediately start working at s now, but to improve\n\t\t\t// compression we first update the hash table at s-1 and at s. If\n\t\t\t// another emitCopy is not our next move, also calculate nextHash\n\t\t\t// at s+1. At least on GOARCH=amd64, these three hash calculations\n\t\t\t// are faster as one load64 call (with some shifts) instead of\n\t\t\t// three load32 calls.\n\t\t\tx := load64(src, s-1)\n\t\t\tprevHash := hash(uint32(x>>0), shift)\n\t\t\ttable[prevHash&tableMask] = uint16(s - 1)\n\t\t\tcurrHash := hash(uint32(x>>8), shift)\n\t\t\tcandidate = int(table[currHash&tableMask])\n\t\t\ttable[currHash&tableMask] = uint16(s)\n\t\t\tif uint32(x>>8) != load32(src, candidate) {\n\t\t\t\tnextHash = hash(uint32(x>>16), shift)\n\t\t\t\ts++\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\nemitRemainder:\n\tif nextEmit < len(src) {\n\t\td += emitLiteral(dst[d:], src[nextEmit:])\n\t}\n\treturn d\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/internal/snapref/snappy.go",
    "content": "// Copyright 2011 The Snappy-Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package snapref implements the Snappy compression format. It aims for very\n// high speeds and reasonable compression.\n//\n// There are actually two Snappy formats: block and stream. They are related,\n// but different: trying to decompress block-compressed data as a Snappy stream\n// will fail, and vice versa. The block format is the Decode and Encode\n// functions and the stream format is the Reader and Writer types.\n//\n// The block format, the more common case, is used when the complete size (the\n// number of bytes) of the original data is known upfront, at the time\n// compression starts. The stream format, also known as the framing format, is\n// for when that isn't always true.\n//\n// The canonical, C++ implementation is at https://github.com/google/snappy and\n// it only implements the block format.\npackage snapref\n\nimport (\n\t\"hash/crc32\"\n)\n\n/*\nEach encoded block begins with the varint-encoded length of the decoded data,\nfollowed by a sequence of chunks. Chunks begin and end on byte boundaries. The\nfirst byte of each chunk is broken into its 2 least and 6 most significant bits\ncalled l and m: l ranges in [0, 4) and m ranges in [0, 64). l is the chunk tag.\nZero means a literal tag. All other values mean a copy tag.\n\nFor literal tags:\n  - If m < 60, the next 1 + m bytes are literal bytes.\n  - Otherwise, let n be the little-endian unsigned integer denoted by the next\n    m - 59 bytes. The next 1 + n bytes after that are literal bytes.\n\nFor copy tags, length bytes are copied from offset bytes ago, in the style of\nLempel-Ziv compression algorithms. In particular:\n  - For l == 1, the offset ranges in [0, 1<<11) and the length in [4, 12).\n    The length is 4 + the low 3 bits of m. The high 3 bits of m form bits 8-10\n    of the offset. The next byte is bits 0-7 of the offset.\n  - For l == 2, the offset ranges in [0, 1<<16) and the length in [1, 65).\n    The length is 1 + m. The offset is the little-endian unsigned integer\n    denoted by the next 2 bytes.\n  - For l == 3, this tag is a legacy format that is no longer issued by most\n    encoders. Nonetheless, the offset ranges in [0, 1<<32) and the length in\n    [1, 65). The length is 1 + m. The offset is the little-endian unsigned\n    integer denoted by the next 4 bytes.\n*/\nconst (\n\ttagLiteral = 0x00\n\ttagCopy1   = 0x01\n\ttagCopy2   = 0x02\n\ttagCopy4   = 0x03\n)\n\nconst (\n\tchecksumSize    = 4\n\tchunkHeaderSize = 4\n\tmagicChunk      = \"\\xff\\x06\\x00\\x00\" + magicBody\n\tmagicBody       = \"sNaPpY\"\n\n\t// maxBlockSize is the maximum size of the input to encodeBlock. It is not\n\t// part of the wire format per se, but some parts of the encoder assume\n\t// that an offset fits into a uint16.\n\t//\n\t// Also, for the framing format (Writer type instead of Encode function),\n\t// https://github.com/google/snappy/blob/master/framing_format.txt says\n\t// that \"the uncompressed data in a chunk must be no longer than 65536\n\t// bytes\".\n\tmaxBlockSize = 65536\n\n\t// maxEncodedLenOfMaxBlockSize equals MaxEncodedLen(maxBlockSize), but is\n\t// hard coded to be a const instead of a variable, so that obufLen can also\n\t// be a const. Their equivalence is confirmed by\n\t// TestMaxEncodedLenOfMaxBlockSize.\n\tmaxEncodedLenOfMaxBlockSize = 76490\n\n\tobufHeaderLen = len(magicChunk) + checksumSize + chunkHeaderSize\n\tobufLen       = obufHeaderLen + maxEncodedLenOfMaxBlockSize\n)\n\nconst (\n\tchunkTypeCompressedData   = 0x00\n\tchunkTypeUncompressedData = 0x01\n\tchunkTypePadding          = 0xfe\n\tchunkTypeStreamIdentifier = 0xff\n)\n\nvar crcTable = crc32.MakeTable(crc32.Castagnoli)\n\n// crc implements the checksum specified in section 3 of\n// https://github.com/google/snappy/blob/master/framing_format.txt\nfunc crc(b []byte) uint32 {\n\tc := crc32.Update(0, crcTable, b)\n\treturn uint32(c>>15|c<<17) + 0xa282ead8\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/s2sx.mod",
    "content": "module github.com/klauspost/compress\n\ngo 1.19\n\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/s2sx.sum",
    "content": ""
  },
  {
    "path": "vendor/github.com/klauspost/compress/zlib/reader.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage zlib implements reading and writing of zlib format compressed data,\nas specified in RFC 1950.\n\nThe implementation provides filters that uncompress during reading\nand compress during writing.  For example, to write compressed data\nto a buffer:\n\n\tvar b bytes.Buffer\n\tw := zlib.NewWriter(&b)\n\tw.Write([]byte(\"hello, world\\n\"))\n\tw.Close()\n\nand to read that data back:\n\n\tr, err := zlib.NewReader(&b)\n\tio.Copy(os.Stdout, r)\n\tr.Close()\n*/\npackage zlib\n\nimport (\n\t\"bufio\"\n\t\"compress/zlib\"\n\t\"hash\"\n\t\"hash/adler32\"\n\t\"io\"\n\n\t\"github.com/klauspost/compress/flate\"\n)\n\nconst zlibDeflate = 8\n\nvar (\n\t// ErrChecksum is returned when reading ZLIB data that has an invalid checksum.\n\tErrChecksum = zlib.ErrChecksum\n\t// ErrDictionary is returned when reading ZLIB data that has an invalid dictionary.\n\tErrDictionary = zlib.ErrDictionary\n\t// ErrHeader is returned when reading ZLIB data that has an invalid header.\n\tErrHeader = zlib.ErrHeader\n)\n\ntype reader struct {\n\tr            flate.Reader\n\tdecompressor io.ReadCloser\n\tdigest       hash.Hash32\n\terr          error\n\tscratch      [4]byte\n}\n\n// Resetter resets a ReadCloser returned by NewReader or NewReaderDict to\n// to switch to a new underlying Reader. This permits reusing a ReadCloser\n// instead of allocating a new one.\ntype Resetter interface {\n\t// Reset discards any buffered data and resets the Resetter as if it was\n\t// newly initialized with the given reader.\n\tReset(r io.Reader, dict []byte) error\n}\n\n// NewReader creates a new ReadCloser.\n// Reads from the returned ReadCloser read and decompress data from r.\n// If r does not implement io.ByteReader, the decompressor may read more\n// data than necessary from r.\n// It is the caller's responsibility to call Close on the ReadCloser when done.\n//\n// The ReadCloser returned by NewReader also implements Resetter.\nfunc NewReader(r io.Reader) (io.ReadCloser, error) {\n\treturn NewReaderDict(r, nil)\n}\n\n// NewReaderDict is like NewReader but uses a preset dictionary.\n// NewReaderDict ignores the dictionary if the compressed data does not refer to it.\n// If the compressed data refers to a different dictionary, NewReaderDict returns ErrDictionary.\n//\n// The ReadCloser returned by NewReaderDict also implements Resetter.\nfunc NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error) {\n\tz := new(reader)\n\terr := z.Reset(r, dict)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn z, nil\n}\n\nfunc (z *reader) Read(p []byte) (int, error) {\n\tif z.err != nil {\n\t\treturn 0, z.err\n\t}\n\n\tvar n int\n\tn, z.err = z.decompressor.Read(p)\n\tz.digest.Write(p[0:n])\n\tif z.err != io.EOF {\n\t\t// In the normal case we return here.\n\t\treturn n, z.err\n\t}\n\n\t// Finished file; check checksum.\n\tif _, err := io.ReadFull(z.r, z.scratch[0:4]); err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\tz.err = err\n\t\treturn n, z.err\n\t}\n\t// ZLIB (RFC 1950) is big-endian, unlike GZIP (RFC 1952).\n\tchecksum := uint32(z.scratch[0])<<24 | uint32(z.scratch[1])<<16 | uint32(z.scratch[2])<<8 | uint32(z.scratch[3])\n\tif checksum != z.digest.Sum32() {\n\t\tz.err = ErrChecksum\n\t\treturn n, z.err\n\t}\n\treturn n, io.EOF\n}\n\n// Calling Close does not close the wrapped io.Reader originally passed to NewReader.\n// In order for the ZLIB checksum to be verified, the reader must be\n// fully consumed until the io.EOF.\nfunc (z *reader) Close() error {\n\tif z.err != nil && z.err != io.EOF {\n\t\treturn z.err\n\t}\n\tz.err = z.decompressor.Close()\n\treturn z.err\n}\n\nfunc (z *reader) Reset(r io.Reader, dict []byte) error {\n\t*z = reader{decompressor: z.decompressor, digest: z.digest}\n\tif fr, ok := r.(flate.Reader); ok {\n\t\tz.r = fr\n\t} else {\n\t\tz.r = bufio.NewReader(r)\n\t}\n\n\t// Read the header (RFC 1950 section 2.2.).\n\t_, z.err = io.ReadFull(z.r, z.scratch[0:2])\n\tif z.err != nil {\n\t\tif z.err == io.EOF {\n\t\t\tz.err = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn z.err\n\t}\n\th := uint(z.scratch[0])<<8 | uint(z.scratch[1])\n\tif (z.scratch[0]&0x0f != zlibDeflate) || (h%31 != 0) {\n\t\tz.err = ErrHeader\n\t\treturn z.err\n\t}\n\thaveDict := z.scratch[1]&0x20 != 0\n\tif haveDict {\n\t\t_, z.err = io.ReadFull(z.r, z.scratch[0:4])\n\t\tif z.err != nil {\n\t\t\tif z.err == io.EOF {\n\t\t\t\tz.err = io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\treturn z.err\n\t\t}\n\t\tchecksum := uint32(z.scratch[0])<<24 | uint32(z.scratch[1])<<16 | uint32(z.scratch[2])<<8 | uint32(z.scratch[3])\n\t\tif checksum != adler32.Checksum(dict) {\n\t\t\tz.err = ErrDictionary\n\t\t\treturn z.err\n\t\t}\n\t}\n\n\tif z.decompressor == nil {\n\t\tif haveDict {\n\t\t\tz.decompressor = flate.NewReaderDict(z.r, dict)\n\t\t} else {\n\t\t\tz.decompressor = flate.NewReader(z.r)\n\t\t}\n\t} else {\n\t\tz.decompressor.(flate.Resetter).Reset(z.r, dict)\n\t}\n\n\tif z.digest != nil {\n\t\tz.digest.Reset()\n\t} else {\n\t\tz.digest = adler32.New()\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zlib/writer.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage zlib\n\nimport (\n\t\"fmt\"\n\t\"hash\"\n\t\"hash/adler32\"\n\t\"io\"\n\n\t\"github.com/klauspost/compress/flate\"\n)\n\n// These constants are copied from the flate package, so that code that imports\n// \"compress/zlib\" does not also have to import \"compress/flate\".\nconst (\n\tNoCompression       = flate.NoCompression\n\tBestSpeed           = flate.BestSpeed\n\tBestCompression     = flate.BestCompression\n\tDefaultCompression  = flate.DefaultCompression\n\tConstantCompression = flate.ConstantCompression\n\tHuffmanOnly         = flate.HuffmanOnly\n)\n\n// A Writer takes data written to it and writes the compressed\n// form of that data to an underlying writer (see NewWriter).\ntype Writer struct {\n\tw           io.Writer\n\tlevel       int\n\tdict        []byte\n\tcompressor  *flate.Writer\n\tdigest      hash.Hash32\n\terr         error\n\tscratch     [4]byte\n\twroteHeader bool\n}\n\n// NewWriter creates a new Writer.\n// Writes to the returned Writer are compressed and written to w.\n//\n// It is the caller's responsibility to call Close on the WriteCloser when done.\n// Writes may be buffered and not flushed until Close.\nfunc NewWriter(w io.Writer) *Writer {\n\tz, _ := NewWriterLevelDict(w, DefaultCompression, nil)\n\treturn z\n}\n\n// NewWriterLevel is like NewWriter but specifies the compression level instead\n// of assuming DefaultCompression.\n//\n// The compression level can be DefaultCompression, NoCompression, HuffmanOnly\n// or any integer value between BestSpeed and BestCompression inclusive.\n// The error returned will be nil if the level is valid.\nfunc NewWriterLevel(w io.Writer, level int) (*Writer, error) {\n\treturn NewWriterLevelDict(w, level, nil)\n}\n\n// NewWriterLevelDict is like NewWriterLevel but specifies a dictionary to\n// compress with.\n//\n// The dictionary may be nil. If not, its contents should not be modified until\n// the Writer is closed.\nfunc NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error) {\n\tif level < HuffmanOnly || level > BestCompression {\n\t\treturn nil, fmt.Errorf(\"zlib: invalid compression level: %d\", level)\n\t}\n\treturn &Writer{\n\t\tw:     w,\n\t\tlevel: level,\n\t\tdict:  dict,\n\t}, nil\n}\n\n// Reset clears the state of the Writer z such that it is equivalent to its\n// initial state from NewWriterLevel or NewWriterLevelDict, but instead writing\n// to w.\nfunc (z *Writer) Reset(w io.Writer) {\n\tz.w = w\n\t// z.level and z.dict left unchanged.\n\tif z.compressor != nil {\n\t\tz.compressor.Reset(w)\n\t}\n\tif z.digest != nil {\n\t\tz.digest.Reset()\n\t}\n\tz.err = nil\n\tz.scratch = [4]byte{}\n\tz.wroteHeader = false\n}\n\n// writeHeader writes the ZLIB header.\nfunc (z *Writer) writeHeader() (err error) {\n\tz.wroteHeader = true\n\t// ZLIB has a two-byte header (as documented in RFC 1950).\n\t// The first four bits is the CINFO (compression info), which is 7 for the default deflate window size.\n\t// The next four bits is the CM (compression method), which is 8 for deflate.\n\tz.scratch[0] = 0x78\n\t// The next two bits is the FLEVEL (compression level). The four values are:\n\t// 0=fastest, 1=fast, 2=default, 3=best.\n\t// The next bit, FDICT, is set if a dictionary is given.\n\t// The final five FCHECK bits form a mod-31 checksum.\n\tswitch z.level {\n\tcase -2, 0, 1:\n\t\tz.scratch[1] = 0 << 6\n\tcase 2, 3, 4, 5:\n\t\tz.scratch[1] = 1 << 6\n\tcase 6, -1:\n\t\tz.scratch[1] = 2 << 6\n\tcase 7, 8, 9:\n\t\tz.scratch[1] = 3 << 6\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n\tif z.dict != nil {\n\t\tz.scratch[1] |= 1 << 5\n\t}\n\tz.scratch[1] += uint8(31 - (uint16(z.scratch[0])<<8+uint16(z.scratch[1]))%31)\n\tif _, err = z.w.Write(z.scratch[0:2]); err != nil {\n\t\treturn err\n\t}\n\tif z.dict != nil {\n\t\t// The next four bytes are the Adler-32 checksum of the dictionary.\n\t\tchecksum := adler32.Checksum(z.dict)\n\t\tz.scratch[0] = uint8(checksum >> 24)\n\t\tz.scratch[1] = uint8(checksum >> 16)\n\t\tz.scratch[2] = uint8(checksum >> 8)\n\t\tz.scratch[3] = uint8(checksum >> 0)\n\t\tif _, err = z.w.Write(z.scratch[0:4]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif z.compressor == nil {\n\t\t// Initialize deflater unless the Writer is being reused\n\t\t// after a Reset call.\n\t\tz.compressor, err = flate.NewWriterDict(z.w, z.level, z.dict)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tz.digest = adler32.New()\n\t}\n\treturn nil\n}\n\n// Write writes a compressed form of p to the underlying io.Writer. The\n// compressed bytes are not necessarily flushed until the Writer is closed or\n// explicitly flushed.\nfunc (z *Writer) Write(p []byte) (n int, err error) {\n\tif !z.wroteHeader {\n\t\tz.err = z.writeHeader()\n\t}\n\tif z.err != nil {\n\t\treturn 0, z.err\n\t}\n\tif len(p) == 0 {\n\t\treturn 0, nil\n\t}\n\tn, err = z.compressor.Write(p)\n\tif err != nil {\n\t\tz.err = err\n\t\treturn\n\t}\n\tz.digest.Write(p)\n\treturn\n}\n\n// Flush flushes the Writer to its underlying io.Writer.\nfunc (z *Writer) Flush() error {\n\tif !z.wroteHeader {\n\t\tz.err = z.writeHeader()\n\t}\n\tif z.err != nil {\n\t\treturn z.err\n\t}\n\tz.err = z.compressor.Flush()\n\treturn z.err\n}\n\n// Close closes the Writer, flushing any unwritten data to the underlying\n// io.Writer, but does not close the underlying io.Writer.\nfunc (z *Writer) Close() error {\n\tif !z.wroteHeader {\n\t\tz.err = z.writeHeader()\n\t}\n\tif z.err != nil {\n\t\treturn z.err\n\t}\n\tz.err = z.compressor.Close()\n\tif z.err != nil {\n\t\treturn z.err\n\t}\n\tchecksum := z.digest.Sum32()\n\t// ZLIB (RFC 1950) is big-endian, unlike GZIP (RFC 1952).\n\tz.scratch[0] = uint8(checksum >> 24)\n\tz.scratch[1] = uint8(checksum >> 16)\n\tz.scratch[2] = uint8(checksum >> 8)\n\tz.scratch[3] = uint8(checksum >> 0)\n\t_, z.err = z.w.Write(z.scratch[0:4])\n\treturn z.err\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/README.md",
    "content": "# zstd \n\n[Zstandard](https://facebook.github.io/zstd/) is a real-time compression algorithm, providing high compression ratios. \nIt offers a very wide range of compression / speed trade-off, while being backed by a very fast decoder.\nA high performance compression algorithm is implemented. For now focused on speed. \n\nThis package provides [compression](#Compressor) to and [decompression](#Decompressor) of Zstandard content. \n\nThis package is pure Go and without use of \"unsafe\". \n\nThe `zstd` package is provided as open source software using a Go standard license.\n\nCurrently the package is heavily optimized for 64 bit processors and will be significantly slower on 32 bit processors.\n\nFor seekable zstd streams, see [this excellent package](https://github.com/SaveTheRbtz/zstd-seekable-format-go).\n\n## Installation\n\nInstall using `go get -u github.com/klauspost/compress`. The package is located in `github.com/klauspost/compress/zstd`.\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/klauspost/compress/zstd.svg)](https://pkg.go.dev/github.com/klauspost/compress/zstd)\n\n## Compressor\n\n### Status: \n\nSTABLE - there may always be subtle bugs, a wide variety of content has been tested and the library is actively \nused by several projects. This library is being [fuzz-tested](https://github.com/klauspost/compress-fuzz) for all updates.\n\nThere may still be specific combinations of data types/size/settings that could lead to edge cases, \nso as always, testing is recommended.  \n\nFor now, a high speed (fastest) and medium-fast (default) compressor has been implemented. \n\n* The \"Fastest\" compression ratio is roughly equivalent to zstd level 1. \n* The \"Default\" compression ratio is roughly equivalent to zstd level 3 (default).\n* The \"Better\" compression ratio is roughly equivalent to zstd level 7.\n* The \"Best\" compression ratio is roughly equivalent to zstd level 11.\n\nIn terms of speed, it is typically 2x as fast as the stdlib deflate/gzip in its fastest mode. \nThe compression ratio compared to stdlib is around level 3, but usually 3x as fast.\n\n \n### Usage\n\nAn Encoder can be used for either compressing a stream via the\n`io.WriteCloser` interface supported by the Encoder or as multiple independent\ntasks via the `EncodeAll` function.\nSmaller encodes are encouraged to use the EncodeAll function.\nUse `NewWriter` to create a new instance that can be used for both.\n\nTo create a writer with default options, do like this:\n\n```Go\n// Compress input to output.\nfunc Compress(in io.Reader, out io.Writer) error {\n    enc, err := zstd.NewWriter(out)\n    if err != nil {\n        return err\n    }\n    _, err = io.Copy(enc, in)\n    if err != nil {\n        enc.Close()\n        return err\n    }\n    return enc.Close()\n}\n```\n\nNow you can encode by writing data to `enc`. The output will be finished writing when `Close()` is called.\nEven if your encode fails, you should still call `Close()` to release any resources that may be held up.  \n\nThe above is fine for big encodes. However, whenever possible try to *reuse* the writer.\n\nTo reuse the encoder, you can use the `Reset(io.Writer)` function to change to another output. \nThis will allow the encoder to reuse all resources and avoid wasteful allocations. \n\nCurrently stream encoding has 'light' concurrency, meaning up to 2 goroutines can be working on part \nof a stream. This is independent of the `WithEncoderConcurrency(n)`, but that is likely to change \nin the future. So if you want to limit concurrency for future updates, specify the concurrency\nyou would like.\n\nIf you would like stream encoding to be done without spawning async goroutines, use `WithEncoderConcurrency(1)`\nwhich will compress input as each block is completed, blocking on writes until each has completed.\n\nYou can specify your desired compression level using `WithEncoderLevel()` option. Currently only pre-defined \ncompression settings can be specified.\n\n#### Future Compatibility Guarantees\n\nThis will be an evolving project. When using this package it is important to note that both the compression efficiency and speed may change.\n\nThe goal will be to keep the default efficiency at the default zstd (level 3). \nHowever the encoding should never be assumed to remain the same, \nand you should not use hashes of compressed output for similarity checks.\n\nThe Encoder can be assumed to produce the same output from the exact same code version.\nHowever, the may be modes in the future that break this, \nalthough they will not be enabled without an explicit option.   \n\nThis encoder is not designed to (and will probably never) output the exact same bitstream as the reference encoder.\n\nAlso note, that the cgo decompressor currently does not [report all errors on invalid input](https://github.com/DataDog/zstd/issues/59),\n[omits error checks](https://github.com/DataDog/zstd/issues/61), [ignores checksums](https://github.com/DataDog/zstd/issues/43) \nand seems to ignore concatenated streams, even though [it is part of the spec](https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#frames).\n\n#### Blocks\n\nFor compressing small blocks, the returned encoder has a function called `EncodeAll(src, dst []byte) []byte`.\n\n`EncodeAll` will encode all input in src and append it to dst.\nThis function can be called concurrently. \nEach call will only run on a same goroutine as the caller.\n\nEncoded blocks can be concatenated and the result will be the combined input stream.\nData compressed with EncodeAll can be decoded with the Decoder, using either a stream or `DecodeAll`.\n\nEspecially when encoding blocks you should take special care to reuse the encoder. \nThis will effectively make it run without allocations after a warmup period. \nTo make it run completely without allocations, supply a destination buffer with space for all content.   \n\n```Go\nimport \"github.com/klauspost/compress/zstd\"\n\n// Create a writer that caches compressors.\n// For this operation type we supply a nil Reader.\nvar encoder, _ = zstd.NewWriter(nil)\n\n// Compress a buffer. \n// If you have a destination buffer, the allocation in the call can also be eliminated.\nfunc Compress(src []byte) []byte {\n    return encoder.EncodeAll(src, make([]byte, 0, len(src)))\n} \n```\n\nYou can control the maximum number of concurrent encodes using the `WithEncoderConcurrency(n)` \noption when creating the writer.\n\nUsing the Encoder for both a stream and individual blocks concurrently is safe. \n\n### Performance\n\nI have collected some speed examples to compare speed and compression against other compressors.\n\n* `file` is the input file.\n* `out` is the compressor used. `zskp` is this package. `zstd` is the Datadog cgo library. `gzstd/gzkp` is gzip standard and this library.\n* `level` is the compression level used. For `zskp` level 1 is \"fastest\", level 2 is \"default\"; 3 is \"better\", 4 is \"best\".\n* `insize`/`outsize` is the input/output size.\n* `millis` is the number of milliseconds used for compression.\n* `mb/s` is megabytes (2^20 bytes) per second.\n\n```\nSilesia Corpus:\nhttp://sun.aei.polsl.pl/~sdeor/corpus/silesia.zip\n\nThis package:\nfile    out     level   insize      outsize     millis  mb/s\nsilesia.tar zskp    1   211947520   73821326    634     318.47\nsilesia.tar zskp    2   211947520   67655404    1508    133.96\nsilesia.tar zskp    3   211947520   64746933    3000    67.37\nsilesia.tar zskp    4   211947520   60073508    16926   11.94\n\ncgo zstd:\nsilesia.tar zstd    1   211947520   73605392    543     371.56\nsilesia.tar zstd    3   211947520   66793289    864     233.68\nsilesia.tar zstd    6   211947520   62916450    1913    105.66\nsilesia.tar zstd    9   211947520   60212393    5063    39.92\n\ngzip, stdlib/this package:\nsilesia.tar gzstd   1   211947520   80007735    1498    134.87\nsilesia.tar gzkp    1   211947520   80088272    1009    200.31\n\nGOB stream of binary data. Highly compressible.\nhttps://files.klauspost.com/compress/gob-stream.7z\n\nfile        out     level   insize  outsize     millis  mb/s\ngob-stream  zskp    1   1911399616  233948096   3230    564.34\ngob-stream  zskp    2   1911399616  203997694   4997    364.73\ngob-stream  zskp    3   1911399616  173526523   13435   135.68\ngob-stream  zskp    4   1911399616  162195235   47559   38.33\n\ngob-stream  zstd    1   1911399616  249810424   2637    691.26\ngob-stream  zstd    3   1911399616  208192146   3490    522.31\ngob-stream  zstd    6   1911399616  193632038   6687    272.56\ngob-stream  zstd    9   1911399616  177620386   16175   112.70\n\ngob-stream  gzstd   1   1911399616  357382013   9046    201.49\ngob-stream  gzkp    1   1911399616  359136669   4885    373.08\n\nThe test data for the Large Text Compression Benchmark is the first\n10^9 bytes of the English Wikipedia dump on Mar. 3, 2006.\nhttp://mattmahoney.net/dc/textdata.html\n\nfile    out level   insize      outsize     millis  mb/s\nenwik9  zskp    1   1000000000  343833605   3687    258.64\nenwik9  zskp    2   1000000000  317001237   7672    124.29\nenwik9  zskp    3   1000000000  291915823   15923   59.89\nenwik9  zskp    4   1000000000  261710291   77697   12.27\n\nenwik9  zstd    1   1000000000  358072021   3110    306.65\nenwik9  zstd    3   1000000000  313734672   4784    199.35\nenwik9  zstd    6   1000000000  295138875   10290   92.68\nenwik9  zstd    9   1000000000  278348700   28549   33.40\n\nenwik9  gzstd   1   1000000000  382578136   8608    110.78\nenwik9  gzkp    1   1000000000  382781160   5628    169.45\n\nHighly compressible JSON file.\nhttps://files.klauspost.com/compress/github-june-2days-2019.json.zst\n\nfile                        out level   insize      outsize     millis  mb/s\ngithub-june-2days-2019.json zskp    1   6273951764  697439532   9789    611.17\ngithub-june-2days-2019.json zskp    2   6273951764  610876538   18553   322.49\ngithub-june-2days-2019.json zskp    3   6273951764  517662858   44186   135.41\ngithub-june-2days-2019.json zskp    4   6273951764  464617114   165373  36.18\n\ngithub-june-2days-2019.json zstd    1   6273951764  766284037   8450    708.00\ngithub-june-2days-2019.json zstd    3   6273951764  661889476   10927   547.57\ngithub-june-2days-2019.json zstd    6   6273951764  642756859   22996   260.18\ngithub-june-2days-2019.json zstd    9   6273951764  601974523   52413   114.16\n\ngithub-june-2days-2019.json gzstd   1   6273951764  1164397768  26793   223.32\ngithub-june-2days-2019.json gzkp    1   6273951764  1120631856  17693   338.16\n\nVM Image, Linux mint with a few installed applications:\nhttps://files.klauspost.com/compress/rawstudio-mint14.7z\n\nfile                    out level   insize      outsize     millis  mb/s\nrawstudio-mint14.tar    zskp    1   8558382592  3718400221  18206   448.29\nrawstudio-mint14.tar    zskp    2   8558382592  3326118337  37074   220.15\nrawstudio-mint14.tar    zskp    3   8558382592  3163842361  87306   93.49\nrawstudio-mint14.tar    zskp    4   8558382592  2970480650  783862  10.41\n\nrawstudio-mint14.tar    zstd    1   8558382592  3609250104  17136   476.27\nrawstudio-mint14.tar    zstd    3   8558382592  3341679997  29262   278.92\nrawstudio-mint14.tar    zstd    6   8558382592  3235846406  77904   104.77\nrawstudio-mint14.tar    zstd    9   8558382592  3160778861  140946  57.91\n\nrawstudio-mint14.tar    gzstd   1   8558382592  3926234992  51345   158.96\nrawstudio-mint14.tar    gzkp    1   8558382592  3960117298  36722   222.26\n\nCSV data:\nhttps://files.klauspost.com/compress/nyc-taxi-data-10M.csv.zst\n\nfile                    out level   insize      outsize     millis  mb/s\nnyc-taxi-data-10M.csv   zskp    1   3325605752  641319332   9462    335.17\nnyc-taxi-data-10M.csv   zskp    2   3325605752  588976126   17570   180.50\nnyc-taxi-data-10M.csv   zskp    3   3325605752  529329260   32432   97.79\nnyc-taxi-data-10M.csv   zskp    4   3325605752  474949772   138025  22.98\n\nnyc-taxi-data-10M.csv   zstd    1   3325605752  687399637   8233    385.18\nnyc-taxi-data-10M.csv   zstd    3   3325605752  598514411   10065   315.07\nnyc-taxi-data-10M.csv   zstd    6   3325605752  570522953   20038   158.27\nnyc-taxi-data-10M.csv   zstd    9   3325605752  517554797   64565   49.12\n\nnyc-taxi-data-10M.csv   gzstd   1   3325605752  928654908   21270   149.11\nnyc-taxi-data-10M.csv   gzkp    1   3325605752  922273214   13929   227.68\n```\n\n## Decompressor\n\nStatus: STABLE - there may still be subtle bugs, but a wide variety of content has been tested.\n\nThis library is being continuously [fuzz-tested](https://github.com/klauspost/compress-fuzz),\nkindly supplied by [fuzzit.dev](https://fuzzit.dev/). \nThe main purpose of the fuzz testing is to ensure that it is not possible to crash the decoder, \nor run it past its limits with ANY input provided.  \n \n### Usage\n\nThe package has been designed for two main usages, big streams of data and smaller in-memory buffers. \nThere are two main usages of the package for these. Both of them are accessed by creating a `Decoder`.\n\nFor streaming use a simple setup could look like this:\n\n```Go\nimport \"github.com/klauspost/compress/zstd\"\n\nfunc Decompress(in io.Reader, out io.Writer) error {\n    d, err := zstd.NewReader(in)\n    if err != nil {\n        return err\n    }\n    defer d.Close()\n    \n    // Copy content...\n    _, err = io.Copy(out, d)\n    return err\n}\n```\n\nIt is important to use the \"Close\" function when you no longer need the Reader to stop running goroutines, \nwhen running with default settings.\nGoroutines will exit once an error has been returned, including `io.EOF` at the end of a stream.\n\nStreams are decoded concurrently in 4 asynchronous stages to give the best possible throughput.\nHowever, if you prefer synchronous decompression, use `WithDecoderConcurrency(1)` which will decompress data \nas it is being requested only.\n\nFor decoding buffers, it could look something like this:\n\n```Go\nimport \"github.com/klauspost/compress/zstd\"\n\n// Create a reader that caches decompressors.\n// For this operation type we supply a nil Reader.\nvar decoder, _ = zstd.NewReader(nil, zstd.WithDecoderConcurrency(0))\n\n// Decompress a buffer. We don't supply a destination buffer,\n// so it will be allocated by the decoder.\nfunc Decompress(src []byte) ([]byte, error) {\n    return decoder.DecodeAll(src, nil)\n} \n```\n\nBoth of these cases should provide the functionality needed. \nThe decoder can be used for *concurrent* decompression of multiple buffers.\nBy default 4 decompressors will be created. \n\nIt will only allow a certain number of concurrent operations to run. \nTo tweak that yourself use the `WithDecoderConcurrency(n)` option when creating the decoder.\nIt is possible to use `WithDecoderConcurrency(0)` to create GOMAXPROCS decoders.\n\n### Dictionaries\n\nData compressed with [dictionaries](https://github.com/facebook/zstd#the-case-for-small-data-compression) can be decompressed.\n\nDictionaries are added individually to Decoders.\nDictionaries are generated by the `zstd --train` command and contains an initial state for the decoder.\nTo add a dictionary use the `WithDecoderDicts(dicts ...[]byte)` option with the dictionary data.\nSeveral dictionaries can be added at once.\n\nThe dictionary will be used automatically for the data that specifies them.\nA re-used Decoder will still contain the dictionaries registered.\n\nWhen registering multiple dictionaries with the same ID, the last one will be used.\n\nIt is possible to use dictionaries when compressing data.\n\nTo enable a dictionary use `WithEncoderDict(dict []byte)`. Here only one dictionary will be used \nand it will likely be used even if it doesn't improve compression. \n\nThe used dictionary must be used to decompress the content.\n\nFor any real gains, the dictionary should be built with similar data. \nIf an unsuitable dictionary is used the output may be slightly larger than using no dictionary.\nUse the [zstd commandline tool](https://github.com/facebook/zstd/releases) to build a dictionary from sample data.\nFor information see [zstd dictionary information](https://github.com/facebook/zstd#the-case-for-small-data-compression). \n\nFor now there is a fixed startup performance penalty for compressing content with dictionaries. \nThis will likely be improved over time. Just be aware to test performance when implementing.  \n\n### Allocation-less operation\n\nThe decoder has been designed to operate without allocations after a warmup. \n\nThis means that you should *store* the decoder for best performance. \nTo re-use a stream decoder, use the `Reset(r io.Reader) error` to switch to another stream.\nA decoder can safely be re-used even if the previous stream failed.\n\nTo release the resources, you must call the `Close()` function on a decoder.\nAfter this it can *no longer be reused*, but all running goroutines will be stopped.\nSo you *must* use this if you will no longer need the Reader.\n\nFor decompressing smaller buffers a single decoder can be used.\nWhen decoding buffers, you can supply a destination slice with length 0 and your expected capacity.\nIn this case no unneeded allocations should be made. \n\n### Concurrency\n\nThe buffer decoder does everything on the same goroutine and does nothing concurrently.\nIt can however decode several buffers concurrently. Use `WithDecoderConcurrency(n)` to limit that.\n\nThe stream decoder will create goroutines that:\n\n1) Reads input and splits the input into blocks.\n2) Decompression of literals.\n3) Decompression of sequences.\n4) Reconstruction of output stream.\n\nSo effectively this also means the decoder will \"read ahead\" and prepare data to always be available for output.\n\nThe concurrency level will, for streams, determine how many blocks ahead the compression will start.\n\nSince \"blocks\" are quite dependent on the output of the previous block stream decoding will only have limited concurrency.\n\nIn practice this means that concurrency is often limited to utilizing about 3 cores effectively.\n  \n### Benchmarks\n\nThe first two are streaming decodes and the last are smaller inputs. \n\nRunning on AMD Ryzen 9 3950X 16-Core Processor. AMD64 assembly used.\n\n```\nBenchmarkDecoderSilesia-32    \t                   5\t 206878840 ns/op\t1024.50 MB/s\t   49808 B/op\t      43 allocs/op\nBenchmarkDecoderEnwik9-32                          1\t1271809000 ns/op\t 786.28 MB/s\t   72048 B/op\t      52 allocs/op\n\nConcurrent blocks, performance:\n\nBenchmarkDecoder_DecodeAllParallel/kppkn.gtb.zst-32         \t   67356\t     17857 ns/op\t10321.96 MB/s\t        22.48 pct\t     102 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/geo.protodata.zst-32     \t  266656\t      4421 ns/op\t26823.21 MB/s\t        11.89 pct\t      19 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/plrabn12.txt.zst-32      \t   20992\t     56842 ns/op\t8477.17 MB/s\t        39.90 pct\t     754 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/lcet10.txt.zst-32        \t   27456\t     43932 ns/op\t9714.01 MB/s\t        33.27 pct\t     524 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/asyoulik.txt.zst-32      \t   78432\t     15047 ns/op\t8319.15 MB/s\t        40.34 pct\t      66 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/alice29.txt.zst-32       \t   65800\t     18436 ns/op\t8249.63 MB/s\t        37.75 pct\t      88 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/html_x_4.zst-32          \t  102993\t     11523 ns/op\t35546.09 MB/s\t         3.637 pct\t     143 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/paper-100k.pdf.zst-32    \t 1000000\t      1070 ns/op\t95720.98 MB/s\t        80.53 pct\t       3 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/fireworks.jpeg.zst-32    \t  749802\t      1752 ns/op\t70272.35 MB/s\t       100.0 pct\t       5 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/urls.10K.zst-32          \t   22640\t     52934 ns/op\t13263.37 MB/s\t        26.25 pct\t    1014 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/html.zst-32              \t  226412\t      5232 ns/op\t19572.27 MB/s\t        14.49 pct\t      20 B/op\t       0 allocs/op\nBenchmarkDecoder_DecodeAllParallel/comp-data.bin.zst-32     \t  923041\t      1276 ns/op\t3194.71 MB/s\t        31.26 pct\t       0 B/op\t       0 allocs/op\n```\n\nThis reflects the performance around May 2022, but this may be out of date.\n\n## Zstd inside ZIP files\n\nIt is possible to use zstandard to compress individual files inside zip archives.\nWhile this isn't widely supported it can be useful for internal files.\n\nTo support the compression and decompression of these files you must register a compressor and decompressor.\n\nIt is highly recommended registering the (de)compressors on individual zip Reader/Writer and NOT\nuse the global registration functions. The main reason for this is that 2 registrations from \ndifferent packages will result in a panic.\n\nIt is a good idea to only have a single compressor and decompressor, since they can be used for multiple zip\nfiles concurrently, and using a single instance will allow reusing some resources.\n\nSee [this example](https://pkg.go.dev/github.com/klauspost/compress/zstd#example-ZipCompressor) for \nhow to compress and decompress files inside zip archives.\n\n# Contributions\n\nContributions are always welcome. \nFor new features/fixes, remember to add tests and for performance enhancements include benchmarks.\n\nFor general feedback and experience reports, feel free to open an issue or write me on [Twitter](https://twitter.com/sh0dan).\n\nThis package includes the excellent [`github.com/cespare/xxhash`](https://github.com/cespare/xxhash) package Copyright (c) 2016 Caleb Spare.\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/bitreader.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/bits\"\n)\n\n// bitReader reads a bitstream in reverse.\n// The last set bit indicates the start of the stream and is used\n// for aligning the input.\ntype bitReader struct {\n\tin       []byte\n\tvalue    uint64 // Maybe use [16]byte, but shifting is awkward.\n\tbitsRead uint8\n}\n\n// init initializes and resets the bit reader.\nfunc (b *bitReader) init(in []byte) error {\n\tif len(in) < 1 {\n\t\treturn errors.New(\"corrupt stream: too short\")\n\t}\n\tb.in = in\n\t// The highest bit of the last byte indicates where to start\n\tv := in[len(in)-1]\n\tif v == 0 {\n\t\treturn errors.New(\"corrupt stream, did not find end of stream\")\n\t}\n\tb.bitsRead = 64\n\tb.value = 0\n\tif len(in) >= 8 {\n\t\tb.fillFastStart()\n\t} else {\n\t\tb.fill()\n\t\tb.fill()\n\t}\n\tb.bitsRead += 8 - uint8(highBits(uint32(v)))\n\treturn nil\n}\n\n// getBits will return n bits. n can be 0.\nfunc (b *bitReader) getBits(n uint8) int {\n\tif n == 0 /*|| b.bitsRead >= 64 */ {\n\t\treturn 0\n\t}\n\treturn int(b.get32BitsFast(n))\n}\n\n// get32BitsFast requires that at least one bit is requested every time.\n// There are no checks if the buffer is filled.\nfunc (b *bitReader) get32BitsFast(n uint8) uint32 {\n\tconst regMask = 64 - 1\n\tv := uint32((b.value << (b.bitsRead & regMask)) >> ((regMask + 1 - n) & regMask))\n\tb.bitsRead += n\n\treturn v\n}\n\n// fillFast() will make sure at least 32 bits are available.\n// There must be at least 4 bytes available.\nfunc (b *bitReader) fillFast() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\tv := b.in[len(b.in)-4:]\n\tb.in = b.in[:len(b.in)-4]\n\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\tb.value = (b.value << 32) | uint64(low)\n\tb.bitsRead -= 32\n}\n\n// fillFastStart() assumes the bitreader is empty and there is at least 8 bytes to read.\nfunc (b *bitReader) fillFastStart() {\n\tv := b.in[len(b.in)-8:]\n\tb.in = b.in[:len(b.in)-8]\n\tb.value = binary.LittleEndian.Uint64(v)\n\tb.bitsRead = 0\n}\n\n// fill() will make sure at least 32 bits are available.\nfunc (b *bitReader) fill() {\n\tif b.bitsRead < 32 {\n\t\treturn\n\t}\n\tif len(b.in) >= 4 {\n\t\tv := b.in[len(b.in)-4:]\n\t\tb.in = b.in[:len(b.in)-4]\n\t\tlow := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24)\n\t\tb.value = (b.value << 32) | uint64(low)\n\t\tb.bitsRead -= 32\n\t\treturn\n\t}\n\n\tb.bitsRead -= uint8(8 * len(b.in))\n\tfor len(b.in) > 0 {\n\t\tb.value = (b.value << 8) | uint64(b.in[len(b.in)-1])\n\t\tb.in = b.in[:len(b.in)-1]\n\t}\n}\n\n// finished returns true if all bits have been read from the bit stream.\nfunc (b *bitReader) finished() bool {\n\treturn len(b.in) == 0 && b.bitsRead >= 64\n}\n\n// overread returns true if more bits have been requested than is on the stream.\nfunc (b *bitReader) overread() bool {\n\treturn b.bitsRead > 64\n}\n\n// remain returns the number of bits remaining.\nfunc (b *bitReader) remain() uint {\n\treturn 8*uint(len(b.in)) + 64 - uint(b.bitsRead)\n}\n\n// close the bitstream and returns an error if out-of-buffer reads occurred.\nfunc (b *bitReader) close() error {\n\t// Release reference.\n\tb.in = nil\n\tif !b.finished() {\n\t\treturn fmt.Errorf(\"%d extra bits on block, should be 0\", b.remain())\n\t}\n\tif b.bitsRead > 64 {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn nil\n}\n\nfunc highBits(val uint32) (n uint32) {\n\treturn uint32(bits.Len32(val) - 1)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/bitwriter.go",
    "content": "// Copyright 2018 Klaus Post. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Based on work Copyright (c) 2013, Yann Collet, released under BSD License.\n\npackage zstd\n\n// bitWriter will write bits.\n// First bit will be LSB of the first byte of output.\ntype bitWriter struct {\n\tbitContainer uint64\n\tnBits        uint8\n\tout          []byte\n}\n\n// bitMask16 is bitmasks. Has extra to avoid bounds check.\nvar bitMask16 = [32]uint16{\n\t0, 1, 3, 7, 0xF, 0x1F,\n\t0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,\n\t0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0xFFFF,\n\t0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,\n\t0xFFFF, 0xFFFF} /* up to 16 bits */\n\nvar bitMask32 = [32]uint32{\n\t0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF,\n\t0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,\n\t0x1ffff, 0x3ffff, 0x7FFFF, 0xfFFFF, 0x1fFFFF, 0x3fFFFF, 0x7fFFFF, 0xffFFFF,\n\t0x1ffFFFF, 0x3ffFFFF, 0x7ffFFFF, 0xfffFFFF, 0x1fffFFFF, 0x3fffFFFF, 0x7fffFFFF,\n} // up to 32 bits\n\n// addBits16NC will add up to 16 bits.\n// It will not check if there is space for them,\n// so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) addBits16NC(value uint16, bits uint8) {\n\tb.bitContainer |= uint64(value&bitMask16[bits&31]) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// addBits32NC will add up to 31 bits.\n// It will not check if there is space for them,\n// so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) addBits32NC(value uint32, bits uint8) {\n\tb.bitContainer |= uint64(value&bitMask32[bits&31]) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// addBits64NC will add up to 64 bits.\n// There must be space for 32 bits.\nfunc (b *bitWriter) addBits64NC(value uint64, bits uint8) {\n\tif bits <= 31 {\n\t\tb.addBits32Clean(uint32(value), bits)\n\t\treturn\n\t}\n\tb.addBits32Clean(uint32(value), 32)\n\tb.flush32()\n\tb.addBits32Clean(uint32(value>>32), bits-32)\n}\n\n// addBits32Clean will add up to 32 bits.\n// It will not check if there is space for them.\n// The input must not contain more bits than specified.\nfunc (b *bitWriter) addBits32Clean(value uint32, bits uint8) {\n\tb.bitContainer |= uint64(value) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// addBits16Clean will add up to 16 bits. value may not contain more set bits than indicated.\n// It will not check if there is space for them, so the caller must ensure that it has flushed recently.\nfunc (b *bitWriter) addBits16Clean(value uint16, bits uint8) {\n\tb.bitContainer |= uint64(value) << (b.nBits & 63)\n\tb.nBits += bits\n}\n\n// flush32 will flush out, so there are at least 32 bits available for writing.\nfunc (b *bitWriter) flush32() {\n\tif b.nBits < 32 {\n\t\treturn\n\t}\n\tb.out = append(b.out,\n\t\tbyte(b.bitContainer),\n\t\tbyte(b.bitContainer>>8),\n\t\tbyte(b.bitContainer>>16),\n\t\tbyte(b.bitContainer>>24))\n\tb.nBits -= 32\n\tb.bitContainer >>= 32\n}\n\n// flushAlign will flush remaining full bytes and align to next byte boundary.\nfunc (b *bitWriter) flushAlign() {\n\tnbBytes := (b.nBits + 7) >> 3\n\tfor i := uint8(0); i < nbBytes; i++ {\n\t\tb.out = append(b.out, byte(b.bitContainer>>(i*8)))\n\t}\n\tb.nBits = 0\n\tb.bitContainer = 0\n}\n\n// close will write the alignment bit and write the final byte(s)\n// to the output.\nfunc (b *bitWriter) close() {\n\t// End mark\n\tb.addBits16Clean(1, 1)\n\t// flush until next byte.\n\tb.flushAlign()\n}\n\n// reset and continue writing by appending to out.\nfunc (b *bitWriter) reset(out []byte) {\n\tb.bitContainer = 0\n\tb.nBits = 0\n\tb.out = out\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/blockdec.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/huff0\"\n\t\"github.com/klauspost/compress/zstd/internal/xxhash\"\n)\n\ntype blockType uint8\n\n//go:generate stringer -type=blockType,literalsBlockType,seqCompMode,tableIndex\n\nconst (\n\tblockTypeRaw blockType = iota\n\tblockTypeRLE\n\tblockTypeCompressed\n\tblockTypeReserved\n)\n\ntype literalsBlockType uint8\n\nconst (\n\tliteralsBlockRaw literalsBlockType = iota\n\tliteralsBlockRLE\n\tliteralsBlockCompressed\n\tliteralsBlockTreeless\n)\n\nconst (\n\t// maxCompressedBlockSize is the biggest allowed compressed block size (128KB)\n\tmaxCompressedBlockSize = 128 << 10\n\n\tcompressedBlockOverAlloc    = 16\n\tmaxCompressedBlockSizeAlloc = 128<<10 + compressedBlockOverAlloc\n\n\t// Maximum possible block size (all Raw+Uncompressed).\n\tmaxBlockSize = (1 << 21) - 1\n\n\tmaxMatchLen  = 131074\n\tmaxSequences = 0x7f00 + 0xffff\n\n\t// We support slightly less than the reference decoder to be able to\n\t// use ints on 32 bit archs.\n\tmaxOffsetBits = 30\n)\n\nvar (\n\thuffDecoderPool = sync.Pool{New: func() interface{} {\n\t\treturn &huff0.Scratch{}\n\t}}\n\n\tfseDecoderPool = sync.Pool{New: func() interface{} {\n\t\treturn &fseDecoder{}\n\t}}\n)\n\ntype blockDec struct {\n\t// Raw source data of the block.\n\tdata        []byte\n\tdataStorage []byte\n\n\t// Destination of the decoded data.\n\tdst []byte\n\n\t// Buffer for literals data.\n\tliteralBuf []byte\n\n\t// Window size of the block.\n\tWindowSize uint64\n\n\terr error\n\n\t// Check against this crc, if hasCRC is true.\n\tcheckCRC uint32\n\thasCRC   bool\n\n\t// Frame to use for singlethreaded decoding.\n\t// Should not be used by the decoder itself since parent may be another frame.\n\tlocalFrame *frameDec\n\n\tsequence []seqVals\n\n\tasync struct {\n\t\tnewHist  *history\n\t\tliterals []byte\n\t\tseqData  []byte\n\t\tseqSize  int // Size of uncompressed sequences\n\t\tfcs      uint64\n\t}\n\n\t// Block is RLE, this is the size.\n\tRLESize uint32\n\n\tType blockType\n\n\t// Is this the last block of a frame?\n\tLast bool\n\n\t// Use less memory\n\tlowMem bool\n}\n\nfunc (b *blockDec) String() string {\n\tif b == nil {\n\t\treturn \"<nil>\"\n\t}\n\treturn fmt.Sprintf(\"Steam Size: %d, Type: %v, Last: %t, Window: %d\", len(b.data), b.Type, b.Last, b.WindowSize)\n}\n\nfunc newBlockDec(lowMem bool) *blockDec {\n\tb := blockDec{\n\t\tlowMem: lowMem,\n\t}\n\treturn &b\n}\n\n// reset will reset the block.\n// Input must be a start of a block and will be at the end of the block when returned.\nfunc (b *blockDec) reset(br byteBuffer, windowSize uint64) error {\n\tb.WindowSize = windowSize\n\ttmp, err := br.readSmall(3)\n\tif err != nil {\n\t\tprintln(\"Reading block header:\", err)\n\t\treturn err\n\t}\n\tbh := uint32(tmp[0]) | (uint32(tmp[1]) << 8) | (uint32(tmp[2]) << 16)\n\tb.Last = bh&1 != 0\n\tb.Type = blockType((bh >> 1) & 3)\n\t// find size.\n\tcSize := int(bh >> 3)\n\tmaxSize := maxCompressedBlockSizeAlloc\n\tswitch b.Type {\n\tcase blockTypeReserved:\n\t\treturn ErrReservedBlockType\n\tcase blockTypeRLE:\n\t\tif cSize > maxCompressedBlockSize || cSize > int(b.WindowSize) {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"rle block too big: csize:%d block: %+v\\n\", uint64(cSize), b)\n\t\t\t}\n\t\t\treturn ErrWindowSizeExceeded\n\t\t}\n\t\tb.RLESize = uint32(cSize)\n\t\tif b.lowMem {\n\t\t\tmaxSize = cSize\n\t\t}\n\t\tcSize = 1\n\tcase blockTypeCompressed:\n\t\tif debugDecoder {\n\t\t\tprintln(\"Data size on stream:\", cSize)\n\t\t}\n\t\tb.RLESize = 0\n\t\tmaxSize = maxCompressedBlockSizeAlloc\n\t\tif windowSize < maxCompressedBlockSize && b.lowMem {\n\t\t\tmaxSize = int(windowSize) + compressedBlockOverAlloc\n\t\t}\n\t\tif cSize > maxCompressedBlockSize || uint64(cSize) > b.WindowSize {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"compressed block too big: csize:%d block: %+v\\n\", uint64(cSize), b)\n\t\t\t}\n\t\t\treturn ErrCompressedSizeTooBig\n\t\t}\n\t\t// Empty compressed blocks must at least be 2 bytes\n\t\t// for Literals_Block_Type and one for Sequences_Section_Header.\n\t\tif cSize < 2 {\n\t\t\treturn ErrBlockTooSmall\n\t\t}\n\tcase blockTypeRaw:\n\t\tif cSize > maxCompressedBlockSize || cSize > int(b.WindowSize) {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"rle block too big: csize:%d block: %+v\\n\", uint64(cSize), b)\n\t\t\t}\n\t\t\treturn ErrWindowSizeExceeded\n\t\t}\n\n\t\tb.RLESize = 0\n\t\t// We do not need a destination for raw blocks.\n\t\tmaxSize = -1\n\tdefault:\n\t\tpanic(\"Invalid block type\")\n\t}\n\n\t// Read block data.\n\tif _, ok := br.(*byteBuf); !ok && cap(b.dataStorage) < cSize {\n\t\t// byteBuf doesn't need a destination buffer.\n\t\tif b.lowMem || cSize > maxCompressedBlockSize {\n\t\t\tb.dataStorage = make([]byte, 0, cSize+compressedBlockOverAlloc)\n\t\t} else {\n\t\t\tb.dataStorage = make([]byte, 0, maxCompressedBlockSizeAlloc)\n\t\t}\n\t}\n\tb.data, err = br.readBig(cSize, b.dataStorage)\n\tif err != nil {\n\t\tif debugDecoder {\n\t\t\tprintln(\"Reading block:\", err, \"(\", cSize, \")\", len(b.data))\n\t\t\tprintf(\"%T\", br)\n\t\t}\n\t\treturn err\n\t}\n\tif cap(b.dst) <= maxSize {\n\t\tb.dst = make([]byte, 0, maxSize+1)\n\t}\n\treturn nil\n}\n\n// sendEOF will make the decoder send EOF on this frame.\nfunc (b *blockDec) sendErr(err error) {\n\tb.Last = true\n\tb.Type = blockTypeReserved\n\tb.err = err\n}\n\n// Close will release resources.\n// Closed blockDec cannot be reset.\nfunc (b *blockDec) Close() {\n}\n\n// decodeBuf\nfunc (b *blockDec) decodeBuf(hist *history) error {\n\tswitch b.Type {\n\tcase blockTypeRLE:\n\t\tif cap(b.dst) < int(b.RLESize) {\n\t\t\tif b.lowMem {\n\t\t\t\tb.dst = make([]byte, b.RLESize)\n\t\t\t} else {\n\t\t\t\tb.dst = make([]byte, maxCompressedBlockSize)\n\t\t\t}\n\t\t}\n\t\tb.dst = b.dst[:b.RLESize]\n\t\tv := b.data[0]\n\t\tfor i := range b.dst {\n\t\t\tb.dst[i] = v\n\t\t}\n\t\thist.appendKeep(b.dst)\n\t\treturn nil\n\tcase blockTypeRaw:\n\t\thist.appendKeep(b.data)\n\t\treturn nil\n\tcase blockTypeCompressed:\n\t\tsaved := b.dst\n\t\t// Append directly to history\n\t\tif hist.ignoreBuffer == 0 {\n\t\t\tb.dst = hist.b\n\t\t\thist.b = nil\n\t\t} else {\n\t\t\tb.dst = b.dst[:0]\n\t\t}\n\t\terr := b.decodeCompressed(hist)\n\t\tif debugDecoder {\n\t\t\tprintln(\"Decompressed to total\", len(b.dst), \"bytes, hash:\", xxhash.Sum64(b.dst), \"error:\", err)\n\t\t}\n\t\tif hist.ignoreBuffer == 0 {\n\t\t\thist.b = b.dst\n\t\t\tb.dst = saved\n\t\t} else {\n\t\t\thist.appendKeep(b.dst)\n\t\t}\n\t\treturn err\n\tcase blockTypeReserved:\n\t\t// Used for returning errors.\n\t\treturn b.err\n\tdefault:\n\t\tpanic(\"Invalid block type\")\n\t}\n}\n\nfunc (b *blockDec) decodeLiterals(in []byte, hist *history) (remain []byte, err error) {\n\t// There must be at least one byte for Literals_Block_Type and one for Sequences_Section_Header\n\tif len(in) < 2 {\n\t\treturn in, ErrBlockTooSmall\n\t}\n\n\tlitType := literalsBlockType(in[0] & 3)\n\tvar litRegenSize int\n\tvar litCompSize int\n\tsizeFormat := (in[0] >> 2) & 3\n\tvar fourStreams bool\n\tvar literals []byte\n\tswitch litType {\n\tcase literalsBlockRaw, literalsBlockRLE:\n\t\tswitch sizeFormat {\n\t\tcase 0, 2:\n\t\t\t// Regenerated_Size uses 5 bits (0-31). Literals_Section_Header uses 1 byte.\n\t\t\tlitRegenSize = int(in[0] >> 3)\n\t\t\tin = in[1:]\n\t\tcase 1:\n\t\t\t// Regenerated_Size uses 12 bits (0-4095). Literals_Section_Header uses 2 bytes.\n\t\t\tlitRegenSize = int(in[0]>>4) + (int(in[1]) << 4)\n\t\t\tin = in[2:]\n\t\tcase 3:\n\t\t\t//  Regenerated_Size uses 20 bits (0-1048575). Literals_Section_Header uses 3 bytes.\n\t\t\tif len(in) < 3 {\n\t\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, len(in))\n\t\t\t\treturn in, ErrBlockTooSmall\n\t\t\t}\n\t\t\tlitRegenSize = int(in[0]>>4) + (int(in[1]) << 4) + (int(in[2]) << 12)\n\t\t\tin = in[3:]\n\t\t}\n\tcase literalsBlockCompressed, literalsBlockTreeless:\n\t\tswitch sizeFormat {\n\t\tcase 0, 1:\n\t\t\t// Both Regenerated_Size and Compressed_Size use 10 bits (0-1023).\n\t\t\tif len(in) < 3 {\n\t\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, len(in))\n\t\t\t\treturn in, ErrBlockTooSmall\n\t\t\t}\n\t\t\tn := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12)\n\t\t\tlitRegenSize = int(n & 1023)\n\t\t\tlitCompSize = int(n >> 10)\n\t\t\tfourStreams = sizeFormat == 1\n\t\t\tin = in[3:]\n\t\tcase 2:\n\t\t\tfourStreams = true\n\t\t\tif len(in) < 4 {\n\t\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, len(in))\n\t\t\t\treturn in, ErrBlockTooSmall\n\t\t\t}\n\t\t\tn := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12) + (uint64(in[3]) << 20)\n\t\t\tlitRegenSize = int(n & 16383)\n\t\t\tlitCompSize = int(n >> 14)\n\t\t\tin = in[4:]\n\t\tcase 3:\n\t\t\tfourStreams = true\n\t\t\tif len(in) < 5 {\n\t\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, len(in))\n\t\t\t\treturn in, ErrBlockTooSmall\n\t\t\t}\n\t\t\tn := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12) + (uint64(in[3]) << 20) + (uint64(in[4]) << 28)\n\t\t\tlitRegenSize = int(n & 262143)\n\t\t\tlitCompSize = int(n >> 18)\n\t\t\tin = in[5:]\n\t\t}\n\t}\n\tif debugDecoder {\n\t\tprintln(\"literals type:\", litType, \"litRegenSize:\", litRegenSize, \"litCompSize:\", litCompSize, \"sizeFormat:\", sizeFormat, \"4X:\", fourStreams)\n\t}\n\tif litRegenSize > int(b.WindowSize) || litRegenSize > maxCompressedBlockSize {\n\t\treturn in, ErrWindowSizeExceeded\n\t}\n\n\tswitch litType {\n\tcase literalsBlockRaw:\n\t\tif len(in) < litRegenSize {\n\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, \"remain:\", len(in), \"want:\", litRegenSize)\n\t\t\treturn in, ErrBlockTooSmall\n\t\t}\n\t\tliterals = in[:litRegenSize]\n\t\tin = in[litRegenSize:]\n\t\t//printf(\"Found %d uncompressed literals\\n\", litRegenSize)\n\tcase literalsBlockRLE:\n\t\tif len(in) < 1 {\n\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, \"remain:\", len(in), \"want:\", 1)\n\t\t\treturn in, ErrBlockTooSmall\n\t\t}\n\t\tif cap(b.literalBuf) < litRegenSize {\n\t\t\tif b.lowMem {\n\t\t\t\tb.literalBuf = make([]byte, litRegenSize, litRegenSize+compressedBlockOverAlloc)\n\t\t\t} else {\n\t\t\t\tb.literalBuf = make([]byte, litRegenSize, maxCompressedBlockSize+compressedBlockOverAlloc)\n\t\t\t}\n\t\t}\n\t\tliterals = b.literalBuf[:litRegenSize]\n\t\tv := in[0]\n\t\tfor i := range literals {\n\t\t\tliterals[i] = v\n\t\t}\n\t\tin = in[1:]\n\t\tif debugDecoder {\n\t\t\tprintf(\"Found %d RLE compressed literals\\n\", litRegenSize)\n\t\t}\n\tcase literalsBlockTreeless:\n\t\tif len(in) < litCompSize {\n\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, \"remain:\", len(in), \"want:\", litCompSize)\n\t\t\treturn in, ErrBlockTooSmall\n\t\t}\n\t\t// Store compressed literals, so we defer decoding until we get history.\n\t\tliterals = in[:litCompSize]\n\t\tin = in[litCompSize:]\n\t\tif debugDecoder {\n\t\t\tprintf(\"Found %d compressed literals\\n\", litCompSize)\n\t\t}\n\t\thuff := hist.huffTree\n\t\tif huff == nil {\n\t\t\treturn in, errors.New(\"literal block was treeless, but no history was defined\")\n\t\t}\n\t\t// Ensure we have space to store it.\n\t\tif cap(b.literalBuf) < litRegenSize {\n\t\t\tif b.lowMem {\n\t\t\t\tb.literalBuf = make([]byte, 0, litRegenSize+compressedBlockOverAlloc)\n\t\t\t} else {\n\t\t\t\tb.literalBuf = make([]byte, 0, maxCompressedBlockSize+compressedBlockOverAlloc)\n\t\t\t}\n\t\t}\n\t\tvar err error\n\t\t// Use our out buffer.\n\t\thuff.MaxDecodedSize = litRegenSize\n\t\tif fourStreams {\n\t\t\tliterals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals)\n\t\t} else {\n\t\t\tliterals, err = huff.Decoder().Decompress1X(b.literalBuf[:0:litRegenSize], literals)\n\t\t}\n\t\t// Make sure we don't leak our literals buffer\n\t\tif err != nil {\n\t\t\tprintln(\"decompressing literals:\", err)\n\t\t\treturn in, err\n\t\t}\n\t\tif len(literals) != litRegenSize {\n\t\t\treturn in, fmt.Errorf(\"literal output size mismatch want %d, got %d\", litRegenSize, len(literals))\n\t\t}\n\n\tcase literalsBlockCompressed:\n\t\tif len(in) < litCompSize {\n\t\t\tprintln(\"too small: litType:\", litType, \" sizeFormat\", sizeFormat, \"remain:\", len(in), \"want:\", litCompSize)\n\t\t\treturn in, ErrBlockTooSmall\n\t\t}\n\t\tliterals = in[:litCompSize]\n\t\tin = in[litCompSize:]\n\t\t// Ensure we have space to store it.\n\t\tif cap(b.literalBuf) < litRegenSize {\n\t\t\tif b.lowMem {\n\t\t\t\tb.literalBuf = make([]byte, 0, litRegenSize+compressedBlockOverAlloc)\n\t\t\t} else {\n\t\t\t\tb.literalBuf = make([]byte, 0, maxCompressedBlockSize+compressedBlockOverAlloc)\n\t\t\t}\n\t\t}\n\t\thuff := hist.huffTree\n\t\tif huff == nil || (hist.dict != nil && huff == hist.dict.litEnc) {\n\t\t\thuff = huffDecoderPool.Get().(*huff0.Scratch)\n\t\t\tif huff == nil {\n\t\t\t\thuff = &huff0.Scratch{}\n\t\t\t}\n\t\t}\n\t\tvar err error\n\t\tif debugDecoder {\n\t\t\tprintln(\"huff table input:\", len(literals), \"CRC:\", crc32.ChecksumIEEE(literals))\n\t\t}\n\t\thuff, literals, err = huff0.ReadTable(literals, huff)\n\t\tif err != nil {\n\t\t\tprintln(\"reading huffman table:\", err)\n\t\t\treturn in, err\n\t\t}\n\t\thist.huffTree = huff\n\t\thuff.MaxDecodedSize = litRegenSize\n\t\t// Use our out buffer.\n\t\tif fourStreams {\n\t\t\tliterals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals)\n\t\t} else {\n\t\t\tliterals, err = huff.Decoder().Decompress1X(b.literalBuf[:0:litRegenSize], literals)\n\t\t}\n\t\tif err != nil {\n\t\t\tprintln(\"decoding compressed literals:\", err)\n\t\t\treturn in, err\n\t\t}\n\t\t// Make sure we don't leak our literals buffer\n\t\tif len(literals) != litRegenSize {\n\t\t\treturn in, fmt.Errorf(\"literal output size mismatch want %d, got %d\", litRegenSize, len(literals))\n\t\t}\n\t\t// Re-cap to get extra size.\n\t\tliterals = b.literalBuf[:len(literals)]\n\t\tif debugDecoder {\n\t\t\tprintf(\"Decompressed %d literals into %d bytes\\n\", litCompSize, litRegenSize)\n\t\t}\n\t}\n\thist.decoders.literals = literals\n\treturn in, nil\n}\n\n// decodeCompressed will start decompressing a block.\nfunc (b *blockDec) decodeCompressed(hist *history) error {\n\tin := b.data\n\tin, err := b.decodeLiterals(in, hist)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = b.prepareSequences(in, hist)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif hist.decoders.nSeqs == 0 {\n\t\tb.dst = append(b.dst, hist.decoders.literals...)\n\t\treturn nil\n\t}\n\tbefore := len(hist.decoders.out)\n\terr = hist.decoders.decodeSync(hist.b[hist.ignoreBuffer:])\n\tif err != nil {\n\t\treturn err\n\t}\n\tif hist.decoders.maxSyncLen > 0 {\n\t\thist.decoders.maxSyncLen += uint64(before)\n\t\thist.decoders.maxSyncLen -= uint64(len(hist.decoders.out))\n\t}\n\tb.dst = hist.decoders.out\n\thist.recentOffsets = hist.decoders.prevOffset\n\treturn nil\n}\n\nfunc (b *blockDec) prepareSequences(in []byte, hist *history) (err error) {\n\tif debugDecoder {\n\t\tprintf(\"prepareSequences: %d byte(s) input\\n\", len(in))\n\t}\n\t// Decode Sequences\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#sequences-section\n\tif len(in) < 1 {\n\t\treturn ErrBlockTooSmall\n\t}\n\tvar nSeqs int\n\tseqHeader := in[0]\n\tswitch {\n\tcase seqHeader < 128:\n\t\tnSeqs = int(seqHeader)\n\t\tin = in[1:]\n\tcase seqHeader < 255:\n\t\tif len(in) < 2 {\n\t\t\treturn ErrBlockTooSmall\n\t\t}\n\t\tnSeqs = int(seqHeader-128)<<8 | int(in[1])\n\t\tin = in[2:]\n\tcase seqHeader == 255:\n\t\tif len(in) < 3 {\n\t\t\treturn ErrBlockTooSmall\n\t\t}\n\t\tnSeqs = 0x7f00 + int(in[1]) + (int(in[2]) << 8)\n\t\tin = in[3:]\n\t}\n\tif nSeqs == 0 && len(in) != 0 {\n\t\t// When no sequences, there should not be any more data...\n\t\tif debugDecoder {\n\t\t\tprintf(\"prepareSequences: 0 sequences, but %d byte(s) left on stream\\n\", len(in))\n\t\t}\n\t\treturn ErrUnexpectedBlockSize\n\t}\n\n\tvar seqs = &hist.decoders\n\tseqs.nSeqs = nSeqs\n\tif nSeqs > 0 {\n\t\tif len(in) < 1 {\n\t\t\treturn ErrBlockTooSmall\n\t\t}\n\t\tbr := byteReader{b: in, off: 0}\n\t\tcompMode := br.Uint8()\n\t\tbr.advance(1)\n\t\tif debugDecoder {\n\t\t\tprintf(\"Compression modes: 0b%b\", compMode)\n\t\t}\n\t\tif compMode&3 != 0 {\n\t\t\treturn errors.New(\"corrupt block: reserved bits not zero\")\n\t\t}\n\t\tfor i := uint(0); i < 3; i++ {\n\t\t\tmode := seqCompMode((compMode >> (6 - i*2)) & 3)\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"Table\", tableIndex(i), \"is\", mode)\n\t\t\t}\n\t\t\tvar seq *sequenceDec\n\t\t\tswitch tableIndex(i) {\n\t\t\tcase tableLiteralLengths:\n\t\t\t\tseq = &seqs.litLengths\n\t\t\tcase tableOffsets:\n\t\t\t\tseq = &seqs.offsets\n\t\t\tcase tableMatchLengths:\n\t\t\t\tseq = &seqs.matchLengths\n\t\t\tdefault:\n\t\t\t\tpanic(\"unknown table\")\n\t\t\t}\n\t\t\tswitch mode {\n\t\t\tcase compModePredefined:\n\t\t\t\tif seq.fse != nil && !seq.fse.preDefined {\n\t\t\t\t\tfseDecoderPool.Put(seq.fse)\n\t\t\t\t}\n\t\t\t\tseq.fse = &fsePredef[i]\n\t\t\tcase compModeRLE:\n\t\t\t\tif br.remain() < 1 {\n\t\t\t\t\treturn ErrBlockTooSmall\n\t\t\t\t}\n\t\t\t\tv := br.Uint8()\n\t\t\t\tbr.advance(1)\n\t\t\t\tif seq.fse == nil || seq.fse.preDefined {\n\t\t\t\t\tseq.fse = fseDecoderPool.Get().(*fseDecoder)\n\t\t\t\t}\n\t\t\t\tsymb, err := decSymbolValue(v, symbolTableX[i])\n\t\t\t\tif err != nil {\n\t\t\t\t\tprintf(\"RLE Transform table (%v) error: %v\", tableIndex(i), err)\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tseq.fse.setRLE(symb)\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintf(\"RLE set to 0x%x, code: %v\", symb, v)\n\t\t\t\t}\n\t\t\tcase compModeFSE:\n\t\t\t\tprintln(\"Reading table for\", tableIndex(i))\n\t\t\t\tif seq.fse == nil || seq.fse.preDefined {\n\t\t\t\t\tseq.fse = fseDecoderPool.Get().(*fseDecoder)\n\t\t\t\t}\n\t\t\t\terr := seq.fse.readNCount(&br, uint16(maxTableSymbol[i]))\n\t\t\t\tif err != nil {\n\t\t\t\t\tprintln(\"Read table error:\", err)\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\terr = seq.fse.transform(symbolTableX[i])\n\t\t\t\tif err != nil {\n\t\t\t\t\tprintln(\"Transform table error:\", err)\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"Read table ok\", \"symbolLen:\", seq.fse.symbolLen)\n\t\t\t\t}\n\t\t\tcase compModeRepeat:\n\t\t\t\tseq.repeat = true\n\t\t\t}\n\t\t\tif br.overread() {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t}\n\t\tin = br.unread()\n\t}\n\tif debugDecoder {\n\t\tprintln(\"Literals:\", len(seqs.literals), \"hash:\", xxhash.Sum64(seqs.literals), \"and\", seqs.nSeqs, \"sequences.\")\n\t}\n\n\tif nSeqs == 0 {\n\t\tif len(b.sequence) > 0 {\n\t\t\tb.sequence = b.sequence[:0]\n\t\t}\n\t\treturn nil\n\t}\n\tbr := seqs.br\n\tif br == nil {\n\t\tbr = &bitReader{}\n\t}\n\tif err := br.init(in); err != nil {\n\t\treturn err\n\t}\n\n\tif err := seqs.initialize(br, hist, b.dst); err != nil {\n\t\tprintln(\"initializing sequences:\", err)\n\t\treturn err\n\t}\n\t// Extract blocks...\n\tif false && hist.dict == nil {\n\t\tfatalErr := func(err error) {\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t}\n\t\tfn := fmt.Sprintf(\"n-%d-lits-%d-prev-%d-%d-%d-win-%d.blk\", hist.decoders.nSeqs, len(hist.decoders.literals), hist.recentOffsets[0], hist.recentOffsets[1], hist.recentOffsets[2], hist.windowSize)\n\t\tvar buf bytes.Buffer\n\t\tfatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.litLengths.fse))\n\t\tfatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.matchLengths.fse))\n\t\tfatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.offsets.fse))\n\t\tbuf.Write(in)\n\t\tos.WriteFile(filepath.Join(\"testdata\", \"seqs\", fn), buf.Bytes(), os.ModePerm)\n\t}\n\n\treturn nil\n}\n\nfunc (b *blockDec) decodeSequences(hist *history) error {\n\tif cap(b.sequence) < hist.decoders.nSeqs {\n\t\tif b.lowMem {\n\t\t\tb.sequence = make([]seqVals, 0, hist.decoders.nSeqs)\n\t\t} else {\n\t\t\tb.sequence = make([]seqVals, 0, 0x7F00+0xffff)\n\t\t}\n\t}\n\tb.sequence = b.sequence[:hist.decoders.nSeqs]\n\tif hist.decoders.nSeqs == 0 {\n\t\thist.decoders.seqSize = len(hist.decoders.literals)\n\t\treturn nil\n\t}\n\thist.decoders.windowSize = hist.windowSize\n\thist.decoders.prevOffset = hist.recentOffsets\n\n\terr := hist.decoders.decode(b.sequence)\n\thist.recentOffsets = hist.decoders.prevOffset\n\treturn err\n}\n\nfunc (b *blockDec) executeSequences(hist *history) error {\n\thbytes := hist.b\n\tif len(hbytes) > hist.windowSize {\n\t\thbytes = hbytes[len(hbytes)-hist.windowSize:]\n\t\t// We do not need history anymore.\n\t\tif hist.dict != nil {\n\t\t\thist.dict.content = nil\n\t\t}\n\t}\n\thist.decoders.windowSize = hist.windowSize\n\thist.decoders.out = b.dst[:0]\n\terr := hist.decoders.execute(b.sequence, hbytes)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn b.updateHistory(hist)\n}\n\nfunc (b *blockDec) updateHistory(hist *history) error {\n\tif len(b.data) > maxCompressedBlockSize {\n\t\treturn fmt.Errorf(\"compressed block size too large (%d)\", len(b.data))\n\t}\n\t// Set output and release references.\n\tb.dst = hist.decoders.out\n\thist.recentOffsets = hist.decoders.prevOffset\n\n\tif b.Last {\n\t\t// if last block we don't care about history.\n\t\tprintln(\"Last block, no history returned\")\n\t\thist.b = hist.b[:0]\n\t\treturn nil\n\t} else {\n\t\thist.append(b.dst)\n\t\tif debugDecoder {\n\t\t\tprintln(\"Finished block with \", len(b.sequence), \"sequences. Added\", len(b.dst), \"to history, now length\", len(hist.b))\n\t\t}\n\t}\n\thist.decoders.out, hist.decoders.literals = nil, nil\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/blockenc.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/bits\"\n\n\t\"github.com/klauspost/compress/huff0\"\n)\n\ntype blockEnc struct {\n\tsize       int\n\tliterals   []byte\n\tsequences  []seq\n\tcoders     seqCoders\n\tlitEnc     *huff0.Scratch\n\tdictLitEnc *huff0.Scratch\n\twr         bitWriter\n\n\textraLits         int\n\toutput            []byte\n\trecentOffsets     [3]uint32\n\tprevRecentOffsets [3]uint32\n\n\tlast   bool\n\tlowMem bool\n}\n\n// init should be used once the block has been created.\n// If called more than once, the effect is the same as calling reset.\nfunc (b *blockEnc) init() {\n\tif b.lowMem {\n\t\t// 1K literals\n\t\tif cap(b.literals) < 1<<10 {\n\t\t\tb.literals = make([]byte, 0, 1<<10)\n\t\t}\n\t\tconst defSeqs = 20\n\t\tif cap(b.sequences) < defSeqs {\n\t\t\tb.sequences = make([]seq, 0, defSeqs)\n\t\t}\n\t\t// 1K\n\t\tif cap(b.output) < 1<<10 {\n\t\t\tb.output = make([]byte, 0, 1<<10)\n\t\t}\n\t} else {\n\t\tif cap(b.literals) < maxCompressedBlockSize {\n\t\t\tb.literals = make([]byte, 0, maxCompressedBlockSize)\n\t\t}\n\t\tconst defSeqs = 2000\n\t\tif cap(b.sequences) < defSeqs {\n\t\t\tb.sequences = make([]seq, 0, defSeqs)\n\t\t}\n\t\tif cap(b.output) < maxCompressedBlockSize {\n\t\t\tb.output = make([]byte, 0, maxCompressedBlockSize)\n\t\t}\n\t}\n\n\tif b.coders.mlEnc == nil {\n\t\tb.coders.mlEnc = &fseEncoder{}\n\t\tb.coders.mlPrev = &fseEncoder{}\n\t\tb.coders.ofEnc = &fseEncoder{}\n\t\tb.coders.ofPrev = &fseEncoder{}\n\t\tb.coders.llEnc = &fseEncoder{}\n\t\tb.coders.llPrev = &fseEncoder{}\n\t}\n\tb.litEnc = &huff0.Scratch{WantLogLess: 4}\n\tb.reset(nil)\n}\n\n// initNewEncode can be used to reset offsets and encoders to the initial state.\nfunc (b *blockEnc) initNewEncode() {\n\tb.recentOffsets = [3]uint32{1, 4, 8}\n\tb.litEnc.Reuse = huff0.ReusePolicyNone\n\tb.coders.setPrev(nil, nil, nil)\n}\n\n// reset will reset the block for a new encode, but in the same stream,\n// meaning that state will be carried over, but the block content is reset.\n// If a previous block is provided, the recent offsets are carried over.\nfunc (b *blockEnc) reset(prev *blockEnc) {\n\tb.extraLits = 0\n\tb.literals = b.literals[:0]\n\tb.size = 0\n\tb.sequences = b.sequences[:0]\n\tb.output = b.output[:0]\n\tb.last = false\n\tif prev != nil {\n\t\tb.recentOffsets = prev.prevRecentOffsets\n\t}\n\tb.dictLitEnc = nil\n}\n\n// reset will reset the block for a new encode, but in the same stream,\n// meaning that state will be carried over, but the block content is reset.\n// If a previous block is provided, the recent offsets are carried over.\nfunc (b *blockEnc) swapEncoders(prev *blockEnc) {\n\tb.coders.swap(&prev.coders)\n\tb.litEnc, prev.litEnc = prev.litEnc, b.litEnc\n}\n\n// blockHeader contains the information for a block header.\ntype blockHeader uint32\n\n// setLast sets the 'last' indicator on a block.\nfunc (h *blockHeader) setLast(b bool) {\n\tif b {\n\t\t*h = *h | 1\n\t} else {\n\t\tconst mask = (1 << 24) - 2\n\t\t*h = *h & mask\n\t}\n}\n\n// setSize will store the compressed size of a block.\nfunc (h *blockHeader) setSize(v uint32) {\n\tconst mask = 7\n\t*h = (*h)&mask | blockHeader(v<<3)\n}\n\n// setType sets the block type.\nfunc (h *blockHeader) setType(t blockType) {\n\tconst mask = 1 | (((1 << 24) - 1) ^ 7)\n\t*h = (*h & mask) | blockHeader(t<<1)\n}\n\n// appendTo will append the block header to a slice.\nfunc (h blockHeader) appendTo(b []byte) []byte {\n\treturn append(b, uint8(h), uint8(h>>8), uint8(h>>16))\n}\n\n// String returns a string representation of the block.\nfunc (h blockHeader) String() string {\n\treturn fmt.Sprintf(\"Type: %d, Size: %d, Last:%t\", (h>>1)&3, h>>3, h&1 == 1)\n}\n\n// literalsHeader contains literals header information.\ntype literalsHeader uint64\n\n// setType can be used to set the type of literal block.\nfunc (h *literalsHeader) setType(t literalsBlockType) {\n\tconst mask = math.MaxUint64 - 3\n\t*h = (*h & mask) | literalsHeader(t)\n}\n\n// setSize can be used to set a single size, for uncompressed and RLE content.\nfunc (h *literalsHeader) setSize(regenLen int) {\n\tinBits := bits.Len32(uint32(regenLen))\n\t// Only retain 2 bits\n\tconst mask = 3\n\tlh := uint64(*h & mask)\n\tswitch {\n\tcase inBits < 5:\n\t\tlh |= (uint64(regenLen) << 3) | (1 << 60)\n\t\tif debugEncoder {\n\t\t\tgot := int(lh>>3) & 0xff\n\t\t\tif got != regenLen {\n\t\t\t\tpanic(fmt.Sprint(\"litRegenSize = \", regenLen, \"(want) != \", got, \"(got)\"))\n\t\t\t}\n\t\t}\n\tcase inBits < 12:\n\t\tlh |= (1 << 2) | (uint64(regenLen) << 4) | (2 << 60)\n\tcase inBits < 20:\n\t\tlh |= (3 << 2) | (uint64(regenLen) << 4) | (3 << 60)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"internal error: block too big (%d)\", regenLen))\n\t}\n\t*h = literalsHeader(lh)\n}\n\n// setSizes will set the size of a compressed literals section and the input length.\nfunc (h *literalsHeader) setSizes(compLen, inLen int, single bool) {\n\tcompBits, inBits := bits.Len32(uint32(compLen)), bits.Len32(uint32(inLen))\n\t// Only retain 2 bits\n\tconst mask = 3\n\tlh := uint64(*h & mask)\n\tswitch {\n\tcase compBits <= 10 && inBits <= 10:\n\t\tif !single {\n\t\t\tlh |= 1 << 2\n\t\t}\n\t\tlh |= (uint64(inLen) << 4) | (uint64(compLen) << (10 + 4)) | (3 << 60)\n\t\tif debugEncoder {\n\t\t\tconst mmask = (1 << 24) - 1\n\t\t\tn := (lh >> 4) & mmask\n\t\t\tif int(n&1023) != inLen {\n\t\t\t\tpanic(fmt.Sprint(\"regensize:\", int(n&1023), \"!=\", inLen, inBits))\n\t\t\t}\n\t\t\tif int(n>>10) != compLen {\n\t\t\t\tpanic(fmt.Sprint(\"compsize:\", int(n>>10), \"!=\", compLen, compBits))\n\t\t\t}\n\t\t}\n\tcase compBits <= 14 && inBits <= 14:\n\t\tlh |= (2 << 2) | (uint64(inLen) << 4) | (uint64(compLen) << (14 + 4)) | (4 << 60)\n\t\tif single {\n\t\t\tpanic(\"single stream used with more than 10 bits length.\")\n\t\t}\n\tcase compBits <= 18 && inBits <= 18:\n\t\tlh |= (3 << 2) | (uint64(inLen) << 4) | (uint64(compLen) << (18 + 4)) | (5 << 60)\n\t\tif single {\n\t\t\tpanic(\"single stream used with more than 10 bits length.\")\n\t\t}\n\tdefault:\n\t\tpanic(\"internal error: block too big\")\n\t}\n\t*h = literalsHeader(lh)\n}\n\n// appendTo will append the literals header to a byte slice.\nfunc (h literalsHeader) appendTo(b []byte) []byte {\n\tsize := uint8(h >> 60)\n\tswitch size {\n\tcase 1:\n\t\tb = append(b, uint8(h))\n\tcase 2:\n\t\tb = append(b, uint8(h), uint8(h>>8))\n\tcase 3:\n\t\tb = append(b, uint8(h), uint8(h>>8), uint8(h>>16))\n\tcase 4:\n\t\tb = append(b, uint8(h), uint8(h>>8), uint8(h>>16), uint8(h>>24))\n\tcase 5:\n\t\tb = append(b, uint8(h), uint8(h>>8), uint8(h>>16), uint8(h>>24), uint8(h>>32))\n\tdefault:\n\t\tpanic(fmt.Errorf(\"internal error: literalsHeader has invalid size (%d)\", size))\n\t}\n\treturn b\n}\n\n// size returns the output size with currently set values.\nfunc (h literalsHeader) size() int {\n\treturn int(h >> 60)\n}\n\nfunc (h literalsHeader) String() string {\n\treturn fmt.Sprintf(\"Type: %d, SizeFormat: %d, Size: 0x%d, Bytes:%d\", literalsBlockType(h&3), (h>>2)&3, h&((1<<60)-1)>>4, h>>60)\n}\n\n// pushOffsets will push the recent offsets to the backup store.\nfunc (b *blockEnc) pushOffsets() {\n\tb.prevRecentOffsets = b.recentOffsets\n}\n\n// pushOffsets will push the recent offsets to the backup store.\nfunc (b *blockEnc) popOffsets() {\n\tb.recentOffsets = b.prevRecentOffsets\n}\n\n// matchOffset will adjust recent offsets and return the adjusted one,\n// if it matches a previous offset.\nfunc (b *blockEnc) matchOffset(offset, lits uint32) uint32 {\n\t// Check if offset is one of the recent offsets.\n\t// Adjusts the output offset accordingly.\n\t// Gives a tiny bit of compression, typically around 1%.\n\tif true {\n\t\tif lits > 0 {\n\t\t\tswitch offset {\n\t\t\tcase b.recentOffsets[0]:\n\t\t\t\toffset = 1\n\t\t\tcase b.recentOffsets[1]:\n\t\t\t\tb.recentOffsets[1] = b.recentOffsets[0]\n\t\t\t\tb.recentOffsets[0] = offset\n\t\t\t\toffset = 2\n\t\t\tcase b.recentOffsets[2]:\n\t\t\t\tb.recentOffsets[2] = b.recentOffsets[1]\n\t\t\t\tb.recentOffsets[1] = b.recentOffsets[0]\n\t\t\t\tb.recentOffsets[0] = offset\n\t\t\t\toffset = 3\n\t\t\tdefault:\n\t\t\t\tb.recentOffsets[2] = b.recentOffsets[1]\n\t\t\t\tb.recentOffsets[1] = b.recentOffsets[0]\n\t\t\t\tb.recentOffsets[0] = offset\n\t\t\t\toffset += 3\n\t\t\t}\n\t\t} else {\n\t\t\tswitch offset {\n\t\t\tcase b.recentOffsets[1]:\n\t\t\t\tb.recentOffsets[1] = b.recentOffsets[0]\n\t\t\t\tb.recentOffsets[0] = offset\n\t\t\t\toffset = 1\n\t\t\tcase b.recentOffsets[2]:\n\t\t\t\tb.recentOffsets[2] = b.recentOffsets[1]\n\t\t\t\tb.recentOffsets[1] = b.recentOffsets[0]\n\t\t\t\tb.recentOffsets[0] = offset\n\t\t\t\toffset = 2\n\t\t\tcase b.recentOffsets[0] - 1:\n\t\t\t\tb.recentOffsets[2] = b.recentOffsets[1]\n\t\t\t\tb.recentOffsets[1] = b.recentOffsets[0]\n\t\t\t\tb.recentOffsets[0] = offset\n\t\t\t\toffset = 3\n\t\t\tdefault:\n\t\t\t\tb.recentOffsets[2] = b.recentOffsets[1]\n\t\t\t\tb.recentOffsets[1] = b.recentOffsets[0]\n\t\t\t\tb.recentOffsets[0] = offset\n\t\t\t\toffset += 3\n\t\t\t}\n\t\t}\n\t} else {\n\t\toffset += 3\n\t}\n\treturn offset\n}\n\n// encodeRaw can be used to set the output to a raw representation of supplied bytes.\nfunc (b *blockEnc) encodeRaw(a []byte) {\n\tvar bh blockHeader\n\tbh.setLast(b.last)\n\tbh.setSize(uint32(len(a)))\n\tbh.setType(blockTypeRaw)\n\tb.output = bh.appendTo(b.output[:0])\n\tb.output = append(b.output, a...)\n\tif debugEncoder {\n\t\tprintln(\"Adding RAW block, length\", len(a), \"last:\", b.last)\n\t}\n}\n\n// encodeRaw can be used to set the output to a raw representation of supplied bytes.\nfunc (b *blockEnc) encodeRawTo(dst, src []byte) []byte {\n\tvar bh blockHeader\n\tbh.setLast(b.last)\n\tbh.setSize(uint32(len(src)))\n\tbh.setType(blockTypeRaw)\n\tdst = bh.appendTo(dst)\n\tdst = append(dst, src...)\n\tif debugEncoder {\n\t\tprintln(\"Adding RAW block, length\", len(src), \"last:\", b.last)\n\t}\n\treturn dst\n}\n\n// encodeLits can be used if the block is only litLen.\nfunc (b *blockEnc) encodeLits(lits []byte, raw bool) error {\n\tvar bh blockHeader\n\tbh.setLast(b.last)\n\tbh.setSize(uint32(len(lits)))\n\n\t// Don't compress extremely small blocks\n\tif len(lits) < 8 || (len(lits) < 32 && b.dictLitEnc == nil) || raw {\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding RAW block, length\", len(lits), \"last:\", b.last)\n\t\t}\n\t\tbh.setType(blockTypeRaw)\n\t\tb.output = bh.appendTo(b.output)\n\t\tb.output = append(b.output, lits...)\n\t\treturn nil\n\t}\n\n\tvar (\n\t\tout            []byte\n\t\treUsed, single bool\n\t\terr            error\n\t)\n\tif b.dictLitEnc != nil {\n\t\tb.litEnc.TransferCTable(b.dictLitEnc)\n\t\tb.litEnc.Reuse = huff0.ReusePolicyAllow\n\t\tb.dictLitEnc = nil\n\t}\n\tif len(lits) >= 1024 {\n\t\t// Use 4 Streams.\n\t\tout, reUsed, err = huff0.Compress4X(lits, b.litEnc)\n\t} else if len(lits) > 16 {\n\t\t// Use 1 stream\n\t\tsingle = true\n\t\tout, reUsed, err = huff0.Compress1X(lits, b.litEnc)\n\t} else {\n\t\terr = huff0.ErrIncompressible\n\t}\n\tif err == nil && len(out)+5 > len(lits) {\n\t\t// If we are close, we may still be worse or equal to raw.\n\t\tvar lh literalsHeader\n\t\tlh.setSizes(len(out), len(lits), single)\n\t\tif len(out)+lh.size() >= len(lits) {\n\t\t\terr = huff0.ErrIncompressible\n\t\t}\n\t}\n\tswitch err {\n\tcase huff0.ErrIncompressible:\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding RAW block, length\", len(lits), \"last:\", b.last)\n\t\t}\n\t\tbh.setType(blockTypeRaw)\n\t\tb.output = bh.appendTo(b.output)\n\t\tb.output = append(b.output, lits...)\n\t\treturn nil\n\tcase huff0.ErrUseRLE:\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding RLE block, length\", len(lits))\n\t\t}\n\t\tbh.setType(blockTypeRLE)\n\t\tb.output = bh.appendTo(b.output)\n\t\tb.output = append(b.output, lits[0])\n\t\treturn nil\n\tcase nil:\n\tdefault:\n\t\treturn err\n\t}\n\t// Compressed...\n\t// Now, allow reuse\n\tb.litEnc.Reuse = huff0.ReusePolicyAllow\n\tbh.setType(blockTypeCompressed)\n\tvar lh literalsHeader\n\tif reUsed {\n\t\tif debugEncoder {\n\t\t\tprintln(\"Reused tree, compressed to\", len(out))\n\t\t}\n\t\tlh.setType(literalsBlockTreeless)\n\t} else {\n\t\tif debugEncoder {\n\t\t\tprintln(\"New tree, compressed to\", len(out), \"tree size:\", len(b.litEnc.OutTable))\n\t\t}\n\t\tlh.setType(literalsBlockCompressed)\n\t}\n\t// Set sizes\n\tlh.setSizes(len(out), len(lits), single)\n\tbh.setSize(uint32(len(out) + lh.size() + 1))\n\n\t// Write block headers.\n\tb.output = bh.appendTo(b.output)\n\tb.output = lh.appendTo(b.output)\n\t// Add compressed data.\n\tb.output = append(b.output, out...)\n\t// No sequences.\n\tb.output = append(b.output, 0)\n\treturn nil\n}\n\n// encodeRLE will encode an RLE block.\nfunc (b *blockEnc) encodeRLE(val byte, length uint32) {\n\tvar bh blockHeader\n\tbh.setLast(b.last)\n\tbh.setSize(length)\n\tbh.setType(blockTypeRLE)\n\tb.output = bh.appendTo(b.output)\n\tb.output = append(b.output, val)\n}\n\n// fuzzFseEncoder can be used to fuzz the FSE encoder.\nfunc fuzzFseEncoder(data []byte) int {\n\tif len(data) > maxSequences || len(data) < 2 {\n\t\treturn 0\n\t}\n\tenc := fseEncoder{}\n\thist := enc.Histogram()\n\tmaxSym := uint8(0)\n\tfor i, v := range data {\n\t\tv = v & 63\n\t\tdata[i] = v\n\t\thist[v]++\n\t\tif v > maxSym {\n\t\t\tmaxSym = v\n\t\t}\n\t}\n\tif maxSym == 0 {\n\t\t// All 0\n\t\treturn 0\n\t}\n\tmaxCount := func(a []uint32) int {\n\t\tvar max uint32\n\t\tfor _, v := range a {\n\t\t\tif v > max {\n\t\t\t\tmax = v\n\t\t\t}\n\t\t}\n\t\treturn int(max)\n\t}\n\tcnt := maxCount(hist[:maxSym])\n\tif cnt == len(data) {\n\t\t// RLE\n\t\treturn 0\n\t}\n\tenc.HistogramFinished(maxSym, cnt)\n\terr := enc.normalizeCount(len(data))\n\tif err != nil {\n\t\treturn 0\n\t}\n\t_, err = enc.writeCount(nil)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn 1\n}\n\n// encode will encode the block and append the output in b.output.\n// Previous offset codes must be pushed if more blocks are expected.\nfunc (b *blockEnc) encode(org []byte, raw, rawAllLits bool) error {\n\tif len(b.sequences) == 0 {\n\t\treturn b.encodeLits(b.literals, rawAllLits)\n\t}\n\tif len(b.sequences) == 1 && len(org) > 0 && len(b.literals) <= 1 {\n\t\t// Check common RLE cases.\n\t\tseq := b.sequences[0]\n\t\tif seq.litLen == uint32(len(b.literals)) && seq.offset-3 == 1 {\n\t\t\t// Offset == 1 and 0 or 1 literals.\n\t\t\tb.encodeRLE(org[0], b.sequences[0].matchLen+zstdMinMatch+seq.litLen)\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// We want some difference to at least account for the headers.\n\tsaved := b.size - len(b.literals) - (b.size >> 6)\n\tif saved < 16 {\n\t\tif org == nil {\n\t\t\treturn errIncompressible\n\t\t}\n\t\tb.popOffsets()\n\t\treturn b.encodeLits(org, rawAllLits)\n\t}\n\n\tvar bh blockHeader\n\tvar lh literalsHeader\n\tbh.setLast(b.last)\n\tbh.setType(blockTypeCompressed)\n\t// Store offset of the block header. Needed when we know the size.\n\tbhOffset := len(b.output)\n\tb.output = bh.appendTo(b.output)\n\n\tvar (\n\t\tout            []byte\n\t\treUsed, single bool\n\t\terr            error\n\t)\n\tif b.dictLitEnc != nil {\n\t\tb.litEnc.TransferCTable(b.dictLitEnc)\n\t\tb.litEnc.Reuse = huff0.ReusePolicyAllow\n\t\tb.dictLitEnc = nil\n\t}\n\tif len(b.literals) >= 1024 && !raw {\n\t\t// Use 4 Streams.\n\t\tout, reUsed, err = huff0.Compress4X(b.literals, b.litEnc)\n\t} else if len(b.literals) > 16 && !raw {\n\t\t// Use 1 stream\n\t\tsingle = true\n\t\tout, reUsed, err = huff0.Compress1X(b.literals, b.litEnc)\n\t} else {\n\t\terr = huff0.ErrIncompressible\n\t}\n\n\tif err == nil && len(out)+5 > len(b.literals) {\n\t\t// If we are close, we may still be worse or equal to raw.\n\t\tvar lh literalsHeader\n\t\tlh.setSize(len(b.literals))\n\t\tszRaw := lh.size()\n\t\tlh.setSizes(len(out), len(b.literals), single)\n\t\tszComp := lh.size()\n\t\tif len(out)+szComp >= len(b.literals)+szRaw {\n\t\t\terr = huff0.ErrIncompressible\n\t\t}\n\t}\n\tswitch err {\n\tcase huff0.ErrIncompressible:\n\t\tlh.setType(literalsBlockRaw)\n\t\tlh.setSize(len(b.literals))\n\t\tb.output = lh.appendTo(b.output)\n\t\tb.output = append(b.output, b.literals...)\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding literals RAW, length\", len(b.literals))\n\t\t}\n\tcase huff0.ErrUseRLE:\n\t\tlh.setType(literalsBlockRLE)\n\t\tlh.setSize(len(b.literals))\n\t\tb.output = lh.appendTo(b.output)\n\t\tb.output = append(b.output, b.literals[0])\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding literals RLE\")\n\t\t}\n\tcase nil:\n\t\t// Compressed litLen...\n\t\tif reUsed {\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"reused tree\")\n\t\t\t}\n\t\t\tlh.setType(literalsBlockTreeless)\n\t\t} else {\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"new tree, size:\", len(b.litEnc.OutTable))\n\t\t\t}\n\t\t\tlh.setType(literalsBlockCompressed)\n\t\t\tif debugEncoder {\n\t\t\t\t_, _, err := huff0.ReadTable(out, nil)\n\t\t\t\tif err != nil {\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlh.setSizes(len(out), len(b.literals), single)\n\t\tif debugEncoder {\n\t\t\tprintf(\"Compressed %d literals to %d bytes\", len(b.literals), len(out))\n\t\t\tprintln(\"Adding literal header:\", lh)\n\t\t}\n\t\tb.output = lh.appendTo(b.output)\n\t\tb.output = append(b.output, out...)\n\t\tb.litEnc.Reuse = huff0.ReusePolicyAllow\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding literals compressed\")\n\t\t}\n\tdefault:\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding literals ERROR:\", err)\n\t\t}\n\t\treturn err\n\t}\n\t// Sequence compression\n\n\t// Write the number of sequences\n\tswitch {\n\tcase len(b.sequences) < 128:\n\t\tb.output = append(b.output, uint8(len(b.sequences)))\n\tcase len(b.sequences) < 0x7f00: // TODO: this could be wrong\n\t\tn := len(b.sequences)\n\t\tb.output = append(b.output, 128+uint8(n>>8), uint8(n))\n\tdefault:\n\t\tn := len(b.sequences) - 0x7f00\n\t\tb.output = append(b.output, 255, uint8(n), uint8(n>>8))\n\t}\n\tif debugEncoder {\n\t\tprintln(\"Encoding\", len(b.sequences), \"sequences\")\n\t}\n\tb.genCodes()\n\tllEnc := b.coders.llEnc\n\tofEnc := b.coders.ofEnc\n\tmlEnc := b.coders.mlEnc\n\terr = llEnc.normalizeCount(len(b.sequences))\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = ofEnc.normalizeCount(len(b.sequences))\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = mlEnc.normalizeCount(len(b.sequences))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Choose the best compression mode for each type.\n\t// Will evaluate the new vs predefined and previous.\n\tchooseComp := func(cur, prev, preDef *fseEncoder) (*fseEncoder, seqCompMode) {\n\t\t// See if predefined/previous is better\n\t\thist := cur.count[:cur.symbolLen]\n\t\tnSize := cur.approxSize(hist) + cur.maxHeaderSize()\n\t\tpredefSize := preDef.approxSize(hist)\n\t\tprevSize := prev.approxSize(hist)\n\n\t\t// Add a small penalty for new encoders.\n\t\t// Don't bother with extremely small (<2 byte gains).\n\t\tnSize = nSize + (nSize+2*8*16)>>4\n\t\tswitch {\n\t\tcase predefSize <= prevSize && predefSize <= nSize || forcePreDef:\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"Using predefined\", predefSize>>3, \"<=\", nSize>>3)\n\t\t\t}\n\t\t\treturn preDef, compModePredefined\n\t\tcase prevSize <= nSize:\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"Using previous\", prevSize>>3, \"<=\", nSize>>3)\n\t\t\t}\n\t\t\treturn prev, compModeRepeat\n\t\tdefault:\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"Using new, predef\", predefSize>>3, \". previous:\", prevSize>>3, \">\", nSize>>3, \"header max:\", cur.maxHeaderSize()>>3, \"bytes\")\n\t\t\t\tprintln(\"tl:\", cur.actualTableLog, \"symbolLen:\", cur.symbolLen, \"norm:\", cur.norm[:cur.symbolLen], \"hist\", cur.count[:cur.symbolLen])\n\t\t\t}\n\t\t\treturn cur, compModeFSE\n\t\t}\n\t}\n\n\t// Write compression mode\n\tvar mode uint8\n\tif llEnc.useRLE {\n\t\tmode |= uint8(compModeRLE) << 6\n\t\tllEnc.setRLE(b.sequences[0].llCode)\n\t\tif debugEncoder {\n\t\t\tprintln(\"llEnc.useRLE\")\n\t\t}\n\t} else {\n\t\tvar m seqCompMode\n\t\tllEnc, m = chooseComp(llEnc, b.coders.llPrev, &fsePredefEnc[tableLiteralLengths])\n\t\tmode |= uint8(m) << 6\n\t}\n\tif ofEnc.useRLE {\n\t\tmode |= uint8(compModeRLE) << 4\n\t\tofEnc.setRLE(b.sequences[0].ofCode)\n\t\tif debugEncoder {\n\t\t\tprintln(\"ofEnc.useRLE\")\n\t\t}\n\t} else {\n\t\tvar m seqCompMode\n\t\tofEnc, m = chooseComp(ofEnc, b.coders.ofPrev, &fsePredefEnc[tableOffsets])\n\t\tmode |= uint8(m) << 4\n\t}\n\n\tif mlEnc.useRLE {\n\t\tmode |= uint8(compModeRLE) << 2\n\t\tmlEnc.setRLE(b.sequences[0].mlCode)\n\t\tif debugEncoder {\n\t\t\tprintln(\"mlEnc.useRLE, code: \", b.sequences[0].mlCode, \"value\", b.sequences[0].matchLen)\n\t\t}\n\t} else {\n\t\tvar m seqCompMode\n\t\tmlEnc, m = chooseComp(mlEnc, b.coders.mlPrev, &fsePredefEnc[tableMatchLengths])\n\t\tmode |= uint8(m) << 2\n\t}\n\tb.output = append(b.output, mode)\n\tif debugEncoder {\n\t\tprintf(\"Compression modes: 0b%b\", mode)\n\t}\n\tb.output, err = llEnc.writeCount(b.output)\n\tif err != nil {\n\t\treturn err\n\t}\n\tstart := len(b.output)\n\tb.output, err = ofEnc.writeCount(b.output)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif false {\n\t\tprintln(\"block:\", b.output[start:], \"tablelog\", ofEnc.actualTableLog, \"maxcount:\", ofEnc.maxCount)\n\t\tfmt.Printf(\"selected TableLog: %d, Symbol length: %d\\n\", ofEnc.actualTableLog, ofEnc.symbolLen)\n\t\tfor i, v := range ofEnc.norm[:ofEnc.symbolLen] {\n\t\t\tfmt.Printf(\"%3d: %5d -> %4d \\n\", i, ofEnc.count[i], v)\n\t\t}\n\t}\n\tb.output, err = mlEnc.writeCount(b.output)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Maybe in block?\n\twr := &b.wr\n\twr.reset(b.output)\n\n\tvar ll, of, ml cState\n\n\t// Current sequence\n\tseq := len(b.sequences) - 1\n\ts := b.sequences[seq]\n\tllEnc.setBits(llBitsTable[:])\n\tmlEnc.setBits(mlBitsTable[:])\n\tofEnc.setBits(nil)\n\n\tllTT, ofTT, mlTT := llEnc.ct.symbolTT[:256], ofEnc.ct.symbolTT[:256], mlEnc.ct.symbolTT[:256]\n\n\t// We have 3 bounds checks here (and in the loop).\n\t// Since we are iterating backwards it is kinda hard to avoid.\n\tllB, ofB, mlB := llTT[s.llCode], ofTT[s.ofCode], mlTT[s.mlCode]\n\tll.init(wr, &llEnc.ct, llB)\n\tof.init(wr, &ofEnc.ct, ofB)\n\twr.flush32()\n\tml.init(wr, &mlEnc.ct, mlB)\n\n\t// Each of these lookups also generates a bounds check.\n\twr.addBits32NC(s.litLen, llB.outBits)\n\twr.addBits32NC(s.matchLen, mlB.outBits)\n\twr.flush32()\n\twr.addBits32NC(s.offset, ofB.outBits)\n\tif debugSequences {\n\t\tprintln(\"Encoded seq\", seq, s, \"codes:\", s.llCode, s.mlCode, s.ofCode, \"states:\", ll.state, ml.state, of.state, \"bits:\", llB, mlB, ofB)\n\t}\n\tseq--\n\t// Store sequences in reverse...\n\tfor seq >= 0 {\n\t\ts = b.sequences[seq]\n\n\t\tofB := ofTT[s.ofCode]\n\t\twr.flush32() // tablelog max is below 8 for each, so it will fill max 24 bits.\n\t\t//of.encode(ofB)\n\t\tnbBitsOut := (uint32(of.state) + ofB.deltaNbBits) >> 16\n\t\tdstState := int32(of.state>>(nbBitsOut&15)) + int32(ofB.deltaFindState)\n\t\twr.addBits16NC(of.state, uint8(nbBitsOut))\n\t\tof.state = of.stateTable[dstState]\n\n\t\t// Accumulate extra bits.\n\t\toutBits := ofB.outBits & 31\n\t\textraBits := uint64(s.offset & bitMask32[outBits])\n\t\textraBitsN := outBits\n\n\t\tmlB := mlTT[s.mlCode]\n\t\t//ml.encode(mlB)\n\t\tnbBitsOut = (uint32(ml.state) + mlB.deltaNbBits) >> 16\n\t\tdstState = int32(ml.state>>(nbBitsOut&15)) + int32(mlB.deltaFindState)\n\t\twr.addBits16NC(ml.state, uint8(nbBitsOut))\n\t\tml.state = ml.stateTable[dstState]\n\n\t\toutBits = mlB.outBits & 31\n\t\textraBits = extraBits<<outBits | uint64(s.matchLen&bitMask32[outBits])\n\t\textraBitsN += outBits\n\n\t\tllB := llTT[s.llCode]\n\t\t//ll.encode(llB)\n\t\tnbBitsOut = (uint32(ll.state) + llB.deltaNbBits) >> 16\n\t\tdstState = int32(ll.state>>(nbBitsOut&15)) + int32(llB.deltaFindState)\n\t\twr.addBits16NC(ll.state, uint8(nbBitsOut))\n\t\tll.state = ll.stateTable[dstState]\n\n\t\toutBits = llB.outBits & 31\n\t\textraBits = extraBits<<outBits | uint64(s.litLen&bitMask32[outBits])\n\t\textraBitsN += outBits\n\n\t\twr.flush32()\n\t\twr.addBits64NC(extraBits, extraBitsN)\n\n\t\tif debugSequences {\n\t\t\tprintln(\"Encoded seq\", seq, s)\n\t\t}\n\n\t\tseq--\n\t}\n\tml.flush(mlEnc.actualTableLog)\n\tof.flush(ofEnc.actualTableLog)\n\tll.flush(llEnc.actualTableLog)\n\twr.close()\n\tb.output = wr.out\n\n\t// Maybe even add a bigger margin.\n\tif len(b.output)-3-bhOffset >= b.size {\n\t\t// Discard and encode as raw block.\n\t\tb.output = b.encodeRawTo(b.output[:bhOffset], org)\n\t\tb.popOffsets()\n\t\tb.litEnc.Reuse = huff0.ReusePolicyNone\n\t\treturn nil\n\t}\n\n\t// Size is output minus block header.\n\tbh.setSize(uint32(len(b.output)-bhOffset) - 3)\n\tif debugEncoder {\n\t\tprintln(\"Rewriting block header\", bh)\n\t}\n\t_ = bh.appendTo(b.output[bhOffset:bhOffset])\n\tb.coders.setPrev(llEnc, mlEnc, ofEnc)\n\treturn nil\n}\n\nvar errIncompressible = errors.New(\"incompressible\")\n\nfunc (b *blockEnc) genCodes() {\n\tif len(b.sequences) == 0 {\n\t\t// nothing to do\n\t\treturn\n\t}\n\tif len(b.sequences) > math.MaxUint16 {\n\t\tpanic(\"can only encode up to 64K sequences\")\n\t}\n\t// No bounds checks after here:\n\tllH := b.coders.llEnc.Histogram()\n\tofH := b.coders.ofEnc.Histogram()\n\tmlH := b.coders.mlEnc.Histogram()\n\tfor i := range llH {\n\t\tllH[i] = 0\n\t}\n\tfor i := range ofH {\n\t\tofH[i] = 0\n\t}\n\tfor i := range mlH {\n\t\tmlH[i] = 0\n\t}\n\n\tvar llMax, ofMax, mlMax uint8\n\tfor i := range b.sequences {\n\t\tseq := &b.sequences[i]\n\t\tv := llCode(seq.litLen)\n\t\tseq.llCode = v\n\t\tllH[v]++\n\t\tif v > llMax {\n\t\t\tllMax = v\n\t\t}\n\n\t\tv = ofCode(seq.offset)\n\t\tseq.ofCode = v\n\t\tofH[v]++\n\t\tif v > ofMax {\n\t\t\tofMax = v\n\t\t}\n\n\t\tv = mlCode(seq.matchLen)\n\t\tseq.mlCode = v\n\t\tmlH[v]++\n\t\tif v > mlMax {\n\t\t\tmlMax = v\n\t\t\tif debugAsserts && mlMax > maxMatchLengthSymbol {\n\t\t\t\tpanic(fmt.Errorf(\"mlMax > maxMatchLengthSymbol (%d), matchlen: %d\", mlMax, seq.matchLen))\n\t\t\t}\n\t\t}\n\t}\n\tmaxCount := func(a []uint32) int {\n\t\tvar max uint32\n\t\tfor _, v := range a {\n\t\t\tif v > max {\n\t\t\t\tmax = v\n\t\t\t}\n\t\t}\n\t\treturn int(max)\n\t}\n\tif debugAsserts && mlMax > maxMatchLengthSymbol {\n\t\tpanic(fmt.Errorf(\"mlMax > maxMatchLengthSymbol (%d)\", mlMax))\n\t}\n\tif debugAsserts && ofMax > maxOffsetBits {\n\t\tpanic(fmt.Errorf(\"ofMax > maxOffsetBits (%d)\", ofMax))\n\t}\n\tif debugAsserts && llMax > maxLiteralLengthSymbol {\n\t\tpanic(fmt.Errorf(\"llMax > maxLiteralLengthSymbol (%d)\", llMax))\n\t}\n\n\tb.coders.mlEnc.HistogramFinished(mlMax, maxCount(mlH[:mlMax+1]))\n\tb.coders.ofEnc.HistogramFinished(ofMax, maxCount(ofH[:ofMax+1]))\n\tb.coders.llEnc.HistogramFinished(llMax, maxCount(llH[:llMax+1]))\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/blocktype_string.go",
    "content": "// Code generated by \"stringer -type=blockType,literalsBlockType,seqCompMode,tableIndex\"; DO NOT EDIT.\n\npackage zstd\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[blockTypeRaw-0]\n\t_ = x[blockTypeRLE-1]\n\t_ = x[blockTypeCompressed-2]\n\t_ = x[blockTypeReserved-3]\n}\n\nconst _blockType_name = \"blockTypeRawblockTypeRLEblockTypeCompressedblockTypeReserved\"\n\nvar _blockType_index = [...]uint8{0, 12, 24, 43, 60}\n\nfunc (i blockType) String() string {\n\tif i >= blockType(len(_blockType_index)-1) {\n\t\treturn \"blockType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _blockType_name[_blockType_index[i]:_blockType_index[i+1]]\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[literalsBlockRaw-0]\n\t_ = x[literalsBlockRLE-1]\n\t_ = x[literalsBlockCompressed-2]\n\t_ = x[literalsBlockTreeless-3]\n}\n\nconst _literalsBlockType_name = \"literalsBlockRawliteralsBlockRLEliteralsBlockCompressedliteralsBlockTreeless\"\n\nvar _literalsBlockType_index = [...]uint8{0, 16, 32, 55, 76}\n\nfunc (i literalsBlockType) String() string {\n\tif i >= literalsBlockType(len(_literalsBlockType_index)-1) {\n\t\treturn \"literalsBlockType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _literalsBlockType_name[_literalsBlockType_index[i]:_literalsBlockType_index[i+1]]\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[compModePredefined-0]\n\t_ = x[compModeRLE-1]\n\t_ = x[compModeFSE-2]\n\t_ = x[compModeRepeat-3]\n}\n\nconst _seqCompMode_name = \"compModePredefinedcompModeRLEcompModeFSEcompModeRepeat\"\n\nvar _seqCompMode_index = [...]uint8{0, 18, 29, 40, 54}\n\nfunc (i seqCompMode) String() string {\n\tif i >= seqCompMode(len(_seqCompMode_index)-1) {\n\t\treturn \"seqCompMode(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _seqCompMode_name[_seqCompMode_index[i]:_seqCompMode_index[i+1]]\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[tableLiteralLengths-0]\n\t_ = x[tableOffsets-1]\n\t_ = x[tableMatchLengths-2]\n}\n\nconst _tableIndex_name = \"tableLiteralLengthstableOffsetstableMatchLengths\"\n\nvar _tableIndex_index = [...]uint8{0, 19, 31, 48}\n\nfunc (i tableIndex) String() string {\n\tif i >= tableIndex(len(_tableIndex_index)-1) {\n\t\treturn \"tableIndex(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _tableIndex_name[_tableIndex_index[i]:_tableIndex_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/bytebuf.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\ntype byteBuffer interface {\n\t// Read up to 8 bytes.\n\t// Returns io.ErrUnexpectedEOF if this cannot be satisfied.\n\treadSmall(n int) ([]byte, error)\n\n\t// Read >8 bytes.\n\t// MAY use the destination slice.\n\treadBig(n int, dst []byte) ([]byte, error)\n\n\t// Read a single byte.\n\treadByte() (byte, error)\n\n\t// Skip n bytes.\n\tskipN(n int64) error\n}\n\n// in-memory buffer\ntype byteBuf []byte\n\nfunc (b *byteBuf) readSmall(n int) ([]byte, error) {\n\tif debugAsserts && n > 8 {\n\t\tpanic(fmt.Errorf(\"small read > 8 (%d). use readBig\", n))\n\t}\n\tbb := *b\n\tif len(bb) < n {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tr := bb[:n]\n\t*b = bb[n:]\n\treturn r, nil\n}\n\nfunc (b *byteBuf) readBig(n int, dst []byte) ([]byte, error) {\n\tbb := *b\n\tif len(bb) < n {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tr := bb[:n]\n\t*b = bb[n:]\n\treturn r, nil\n}\n\nfunc (b *byteBuf) readByte() (byte, error) {\n\tbb := *b\n\tif len(bb) < 1 {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t}\n\tr := bb[0]\n\t*b = bb[1:]\n\treturn r, nil\n}\n\nfunc (b *byteBuf) skipN(n int64) error {\n\tbb := *b\n\tif n < 0 {\n\t\treturn fmt.Errorf(\"negative skip (%d) requested\", n)\n\t}\n\tif int64(len(bb)) < n {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\t*b = bb[n:]\n\treturn nil\n}\n\n// wrapper around a reader.\ntype readerWrapper struct {\n\tr   io.Reader\n\ttmp [8]byte\n}\n\nfunc (r *readerWrapper) readSmall(n int) ([]byte, error) {\n\tif debugAsserts && n > 8 {\n\t\tpanic(fmt.Errorf(\"small read > 8 (%d). use readBig\", n))\n\t}\n\tn2, err := io.ReadFull(r.r, r.tmp[:n])\n\t// We only really care about the actual bytes read.\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tif debugDecoder {\n\t\t\tprintln(\"readSmall: got\", n2, \"want\", n, \"err\", err)\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn r.tmp[:n], nil\n}\n\nfunc (r *readerWrapper) readBig(n int, dst []byte) ([]byte, error) {\n\tif cap(dst) < n {\n\t\tdst = make([]byte, n)\n\t}\n\tn2, err := io.ReadFull(r.r, dst[:n])\n\tif err == io.EOF && n > 0 {\n\t\terr = io.ErrUnexpectedEOF\n\t}\n\treturn dst[:n2], err\n}\n\nfunc (r *readerWrapper) readByte() (byte, error) {\n\tn2, err := io.ReadFull(r.r, r.tmp[:1])\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn 0, err\n\t}\n\tif n2 != 1 {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t}\n\treturn r.tmp[0], nil\n}\n\nfunc (r *readerWrapper) skipN(n int64) error {\n\tn2, err := io.CopyN(io.Discard, r.r, n)\n\tif n2 != n {\n\t\terr = io.ErrUnexpectedEOF\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/bytereader.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\n// byteReader provides a byte reader that reads\n// little endian values from a byte stream.\n// The input stream is manually advanced.\n// The reader performs no bounds checks.\ntype byteReader struct {\n\tb   []byte\n\toff int\n}\n\n// advance the stream b n bytes.\nfunc (b *byteReader) advance(n uint) {\n\tb.off += int(n)\n}\n\n// overread returns whether we have advanced too far.\nfunc (b *byteReader) overread() bool {\n\treturn b.off > len(b.b)\n}\n\n// Int32 returns a little endian int32 starting at current offset.\nfunc (b byteReader) Int32() int32 {\n\tb2 := b.b[b.off:]\n\tb2 = b2[:4]\n\tv3 := int32(b2[3])\n\tv2 := int32(b2[2])\n\tv1 := int32(b2[1])\n\tv0 := int32(b2[0])\n\treturn v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)\n}\n\n// Uint8 returns the next byte\nfunc (b *byteReader) Uint8() uint8 {\n\tv := b.b[b.off]\n\treturn v\n}\n\n// Uint32 returns a little endian uint32 starting at current offset.\nfunc (b byteReader) Uint32() uint32 {\n\tif r := b.remain(); r < 4 {\n\t\t// Very rare\n\t\tv := uint32(0)\n\t\tfor i := 1; i <= r; i++ {\n\t\t\tv = (v << 8) | uint32(b.b[len(b.b)-i])\n\t\t}\n\t\treturn v\n\t}\n\tb2 := b.b[b.off:]\n\tb2 = b2[:4]\n\tv3 := uint32(b2[3])\n\tv2 := uint32(b2[2])\n\tv1 := uint32(b2[1])\n\tv0 := uint32(b2[0])\n\treturn v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)\n}\n\n// Uint32NC returns a little endian uint32 starting at current offset.\n// The caller must be sure if there are at least 4 bytes left.\nfunc (b byteReader) Uint32NC() uint32 {\n\tb2 := b.b[b.off:]\n\tb2 = b2[:4]\n\tv3 := uint32(b2[3])\n\tv2 := uint32(b2[2])\n\tv1 := uint32(b2[1])\n\tv0 := uint32(b2[0])\n\treturn v0 | (v1 << 8) | (v2 << 16) | (v3 << 24)\n}\n\n// unread returns the unread portion of the input.\nfunc (b byteReader) unread() []byte {\n\treturn b.b[b.off:]\n}\n\n// remain will return the number of bytes remaining.\nfunc (b byteReader) remain() int {\n\treturn len(b.b) - b.off\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/decodeheader.go",
    "content": "// Copyright 2020+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n\npackage zstd\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"io\"\n)\n\n// HeaderMaxSize is the maximum size of a Frame and Block Header.\n// If less is sent to Header.Decode it *may* still contain enough information.\nconst HeaderMaxSize = 14 + 3\n\n// Header contains information about the first frame and block within that.\ntype Header struct {\n\t// SingleSegment specifies whether the data is to be decompressed into a\n\t// single contiguous memory segment.\n\t// It implies that WindowSize is invalid and that FrameContentSize is valid.\n\tSingleSegment bool\n\n\t// WindowSize is the window of data to keep while decoding.\n\t// Will only be set if SingleSegment is false.\n\tWindowSize uint64\n\n\t// Dictionary ID.\n\t// If 0, no dictionary.\n\tDictionaryID uint32\n\n\t// HasFCS specifies whether FrameContentSize has a valid value.\n\tHasFCS bool\n\n\t// FrameContentSize is the expected uncompressed size of the entire frame.\n\tFrameContentSize uint64\n\n\t// Skippable will be true if the frame is meant to be skipped.\n\t// This implies that FirstBlock.OK is false.\n\tSkippable bool\n\n\t// SkippableID is the user-specific ID for the skippable frame.\n\t// Valid values are between 0 to 15, inclusive.\n\tSkippableID int\n\n\t// SkippableSize is the length of the user data to skip following\n\t// the header.\n\tSkippableSize uint32\n\n\t// HeaderSize is the raw size of the frame header.\n\t//\n\t// For normal frames, it includes the size of the magic number and\n\t// the size of the header (per section 3.1.1.1).\n\t// It does not include the size for any data blocks (section 3.1.1.2) nor\n\t// the size for the trailing content checksum.\n\t//\n\t// For skippable frames, this counts the size of the magic number\n\t// along with the size of the size field of the payload.\n\t// It does not include the size of the skippable payload itself.\n\t// The total frame size is the HeaderSize plus the SkippableSize.\n\tHeaderSize int\n\n\t// First block information.\n\tFirstBlock struct {\n\t\t// OK will be set if first block could be decoded.\n\t\tOK bool\n\n\t\t// Is this the last block of a frame?\n\t\tLast bool\n\n\t\t// Is the data compressed?\n\t\t// If true CompressedSize will be populated.\n\t\t// Unfortunately DecompressedSize cannot be determined\n\t\t// without decoding the blocks.\n\t\tCompressed bool\n\n\t\t// DecompressedSize is the expected decompressed size of the block.\n\t\t// Will be 0 if it cannot be determined.\n\t\tDecompressedSize int\n\n\t\t// CompressedSize of the data in the block.\n\t\t// Does not include the block header.\n\t\t// Will be equal to DecompressedSize if not Compressed.\n\t\tCompressedSize int\n\t}\n\n\t// If set there is a checksum present for the block content.\n\t// The checksum field at the end is always 4 bytes long.\n\tHasCheckSum bool\n}\n\n// Decode the header from the beginning of the stream.\n// This will decode the frame header and the first block header if enough bytes are provided.\n// It is recommended to provide at least HeaderMaxSize bytes.\n// If the frame header cannot be read an error will be returned.\n// If there isn't enough input, io.ErrUnexpectedEOF is returned.\n// The FirstBlock.OK will indicate if enough information was available to decode the first block header.\nfunc (h *Header) Decode(in []byte) error {\n\t_, err := h.DecodeAndStrip(in)\n\treturn err\n}\n\n// DecodeAndStrip will decode the header from the beginning of the stream\n// and on success return the remaining bytes.\n// This will decode the frame header and the first block header if enough bytes are provided.\n// It is recommended to provide at least HeaderMaxSize bytes.\n// If the frame header cannot be read an error will be returned.\n// If there isn't enough input, io.ErrUnexpectedEOF is returned.\n// The FirstBlock.OK will indicate if enough information was available to decode the first block header.\nfunc (h *Header) DecodeAndStrip(in []byte) (remain []byte, err error) {\n\t*h = Header{}\n\tif len(in) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\th.HeaderSize += 4\n\tb, in := in[:4], in[4:]\n\tif string(b) != frameMagic {\n\t\tif string(b[1:4]) != skippableFrameMagic || b[0]&0xf0 != 0x50 {\n\t\t\treturn nil, ErrMagicMismatch\n\t\t}\n\t\tif len(in) < 4 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\th.HeaderSize += 4\n\t\th.Skippable = true\n\t\th.SkippableID = int(b[0] & 0xf)\n\t\th.SkippableSize = binary.LittleEndian.Uint32(in)\n\t\treturn in[4:], nil\n\t}\n\n\t// Read Window_Descriptor\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#window_descriptor\n\tif len(in) < 1 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tfhd, in := in[0], in[1:]\n\th.HeaderSize++\n\th.SingleSegment = fhd&(1<<5) != 0\n\th.HasCheckSum = fhd&(1<<2) != 0\n\tif fhd&(1<<3) != 0 {\n\t\treturn nil, errors.New(\"reserved bit set on frame header\")\n\t}\n\n\tif !h.SingleSegment {\n\t\tif len(in) < 1 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tvar wd byte\n\t\twd, in = in[0], in[1:]\n\t\th.HeaderSize++\n\t\twindowLog := 10 + (wd >> 3)\n\t\twindowBase := uint64(1) << windowLog\n\t\twindowAdd := (windowBase / 8) * uint64(wd&0x7)\n\t\th.WindowSize = windowBase + windowAdd\n\t}\n\n\t// Read Dictionary_ID\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary_id\n\tif size := fhd & 3; size != 0 {\n\t\tif size == 3 {\n\t\t\tsize = 4\n\t\t}\n\t\tif len(in) < int(size) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb, in = in[:size], in[size:]\n\t\th.HeaderSize += int(size)\n\t\tswitch len(b) {\n\t\tcase 1:\n\t\t\th.DictionaryID = uint32(b[0])\n\t\tcase 2:\n\t\t\th.DictionaryID = uint32(b[0]) | (uint32(b[1]) << 8)\n\t\tcase 4:\n\t\t\th.DictionaryID = uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)\n\t\t}\n\t}\n\n\t// Read Frame_Content_Size\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#frame_content_size\n\tvar fcsSize int\n\tv := fhd >> 6\n\tswitch v {\n\tcase 0:\n\t\tif h.SingleSegment {\n\t\t\tfcsSize = 1\n\t\t}\n\tdefault:\n\t\tfcsSize = 1 << v\n\t}\n\n\tif fcsSize > 0 {\n\t\th.HasFCS = true\n\t\tif len(in) < fcsSize {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb, in = in[:fcsSize], in[fcsSize:]\n\t\th.HeaderSize += int(fcsSize)\n\t\tswitch len(b) {\n\t\tcase 1:\n\t\t\th.FrameContentSize = uint64(b[0])\n\t\tcase 2:\n\t\t\t// When FCS_Field_Size is 2, the offset of 256 is added.\n\t\t\th.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) + 256\n\t\tcase 4:\n\t\t\th.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) | (uint64(b[2]) << 16) | (uint64(b[3]) << 24)\n\t\tcase 8:\n\t\t\td1 := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)\n\t\t\td2 := uint32(b[4]) | (uint32(b[5]) << 8) | (uint32(b[6]) << 16) | (uint32(b[7]) << 24)\n\t\t\th.FrameContentSize = uint64(d1) | (uint64(d2) << 32)\n\t\t}\n\t}\n\n\t// Frame Header done, we will not fail from now on.\n\tif len(in) < 3 {\n\t\treturn in, nil\n\t}\n\ttmp := in[:3]\n\tbh := uint32(tmp[0]) | (uint32(tmp[1]) << 8) | (uint32(tmp[2]) << 16)\n\th.FirstBlock.Last = bh&1 != 0\n\tblockType := blockType((bh >> 1) & 3)\n\t// find size.\n\tcSize := int(bh >> 3)\n\tswitch blockType {\n\tcase blockTypeReserved:\n\t\treturn in, nil\n\tcase blockTypeRLE:\n\t\th.FirstBlock.Compressed = true\n\t\th.FirstBlock.DecompressedSize = cSize\n\t\th.FirstBlock.CompressedSize = 1\n\tcase blockTypeCompressed:\n\t\th.FirstBlock.Compressed = true\n\t\th.FirstBlock.CompressedSize = cSize\n\tcase blockTypeRaw:\n\t\th.FirstBlock.DecompressedSize = cSize\n\t\th.FirstBlock.CompressedSize = cSize\n\tdefault:\n\t\tpanic(\"Invalid block type\")\n\t}\n\n\th.FirstBlock.OK = true\n\treturn in, nil\n}\n\n// AppendTo will append the encoded header to the dst slice.\n// There is no error checking performed on the header values.\nfunc (h *Header) AppendTo(dst []byte) ([]byte, error) {\n\tif h.Skippable {\n\t\tmagic := [4]byte{0x50, 0x2a, 0x4d, 0x18}\n\t\tmagic[0] |= byte(h.SkippableID & 0xf)\n\t\tdst = append(dst, magic[:]...)\n\t\tf := h.SkippableSize\n\t\treturn append(dst, uint8(f), uint8(f>>8), uint8(f>>16), uint8(f>>24)), nil\n\t}\n\tf := frameHeader{\n\t\tContentSize:   h.FrameContentSize,\n\t\tWindowSize:    uint32(h.WindowSize),\n\t\tSingleSegment: h.SingleSegment,\n\t\tChecksum:      h.HasCheckSum,\n\t\tDictID:        h.DictionaryID,\n\t}\n\treturn f.appendTo(dst), nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/decoder.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"context\"\n\t\"encoding/binary\"\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/zstd/internal/xxhash\"\n)\n\n// Decoder provides decoding of zstandard streams.\n// The decoder has been designed to operate without allocations after a warmup.\n// This means that you should store the decoder for best performance.\n// To re-use a stream decoder, use the Reset(r io.Reader) error to switch to another stream.\n// A decoder can safely be re-used even if the previous stream failed.\n// To release the resources, you must call the Close() function on a decoder.\ntype Decoder struct {\n\to decoderOptions\n\n\t// Unreferenced decoders, ready for use.\n\tdecoders chan *blockDec\n\n\t// Current read position used for Reader functionality.\n\tcurrent decoderState\n\n\t// sync stream decoding\n\tsyncStream struct {\n\t\tdecodedFrame uint64\n\t\tbr           readerWrapper\n\t\tenabled      bool\n\t\tinFrame      bool\n\t\tdstBuf       []byte\n\t}\n\n\tframe *frameDec\n\n\t// Custom dictionaries.\n\tdicts map[uint32]*dict\n\n\t// streamWg is the waitgroup for all streams\n\tstreamWg sync.WaitGroup\n}\n\n// decoderState is used for maintaining state when the decoder\n// is used for streaming.\ntype decoderState struct {\n\t// current block being written to stream.\n\tdecodeOutput\n\n\t// output in order to be written to stream.\n\toutput chan decodeOutput\n\n\t// cancel remaining output.\n\tcancel context.CancelFunc\n\n\t// crc of current frame\n\tcrc *xxhash.Digest\n\n\tflushed bool\n}\n\nvar (\n\t// Check the interfaces we want to support.\n\t_ = io.WriterTo(&Decoder{})\n\t_ = io.Reader(&Decoder{})\n)\n\n// NewReader creates a new decoder.\n// A nil Reader can be provided in which case Reset can be used to start a decode.\n//\n// A Decoder can be used in two modes:\n//\n// 1) As a stream, or\n// 2) For stateless decoding using DecodeAll.\n//\n// Only a single stream can be decoded concurrently, but the same decoder\n// can run multiple concurrent stateless decodes. It is even possible to\n// use stateless decodes while a stream is being decoded.\n//\n// The Reset function can be used to initiate a new stream, which will considerably\n// reduce the allocations normally caused by NewReader.\nfunc NewReader(r io.Reader, opts ...DOption) (*Decoder, error) {\n\tinitPredefined()\n\tvar d Decoder\n\td.o.setDefault()\n\tfor _, o := range opts {\n\t\terr := o(&d.o)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\td.current.crc = xxhash.New()\n\td.current.flushed = true\n\n\tif r == nil {\n\t\td.current.err = ErrDecoderNilInput\n\t}\n\n\t// Transfer option dicts.\n\td.dicts = make(map[uint32]*dict, len(d.o.dicts))\n\tfor _, dc := range d.o.dicts {\n\t\td.dicts[dc.id] = dc\n\t}\n\td.o.dicts = nil\n\n\t// Create decoders\n\td.decoders = make(chan *blockDec, d.o.concurrent)\n\tfor i := 0; i < d.o.concurrent; i++ {\n\t\tdec := newBlockDec(d.o.lowMem)\n\t\tdec.localFrame = newFrameDec(d.o)\n\t\td.decoders <- dec\n\t}\n\n\tif r == nil {\n\t\treturn &d, nil\n\t}\n\treturn &d, d.Reset(r)\n}\n\n// Read bytes from the decompressed stream into p.\n// Returns the number of bytes written and any error that occurred.\n// When the stream is done, io.EOF will be returned.\nfunc (d *Decoder) Read(p []byte) (int, error) {\n\tvar n int\n\tfor {\n\t\tif len(d.current.b) > 0 {\n\t\t\tfilled := copy(p, d.current.b)\n\t\t\tp = p[filled:]\n\t\t\td.current.b = d.current.b[filled:]\n\t\t\tn += filled\n\t\t}\n\t\tif len(p) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tif len(d.current.b) == 0 {\n\t\t\t// We have an error and no more data\n\t\t\tif d.current.err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif !d.nextBlock(n == 0) {\n\t\t\t\treturn n, d.current.err\n\t\t\t}\n\t\t}\n\t}\n\tif len(d.current.b) > 0 {\n\t\tif debugDecoder {\n\t\t\tprintln(\"returning\", n, \"still bytes left:\", len(d.current.b))\n\t\t}\n\t\t// Only return error at end of block\n\t\treturn n, nil\n\t}\n\tif d.current.err != nil {\n\t\td.drainOutput()\n\t}\n\tif debugDecoder {\n\t\tprintln(\"returning\", n, d.current.err, len(d.decoders))\n\t}\n\treturn n, d.current.err\n}\n\n// Reset will reset the decoder the supplied stream after the current has finished processing.\n// Note that this functionality cannot be used after Close has been called.\n// Reset can be called with a nil reader to release references to the previous reader.\n// After being called with a nil reader, no other operations than Reset or DecodeAll or Close\n// should be used.\nfunc (d *Decoder) Reset(r io.Reader) error {\n\tif d.current.err == ErrDecoderClosed {\n\t\treturn d.current.err\n\t}\n\n\td.drainOutput()\n\n\td.syncStream.br.r = nil\n\tif r == nil {\n\t\td.current.err = ErrDecoderNilInput\n\t\tif len(d.current.b) > 0 {\n\t\t\td.current.b = d.current.b[:0]\n\t\t}\n\t\td.current.flushed = true\n\t\treturn nil\n\t}\n\n\t// If bytes buffer and < 5MB, do sync decoding anyway.\n\tif bb, ok := r.(byter); ok && bb.Len() < d.o.decodeBufsBelow && !d.o.limitToCap {\n\t\tbb2 := bb\n\t\tif debugDecoder {\n\t\t\tprintln(\"*bytes.Buffer detected, doing sync decode, len:\", bb.Len())\n\t\t}\n\t\tb := bb2.Bytes()\n\t\tvar dst []byte\n\t\tif cap(d.syncStream.dstBuf) > 0 {\n\t\t\tdst = d.syncStream.dstBuf[:0]\n\t\t}\n\n\t\tdst, err := d.DecodeAll(b, dst)\n\t\tif err == nil {\n\t\t\terr = io.EOF\n\t\t}\n\t\t// Save output buffer\n\t\td.syncStream.dstBuf = dst\n\t\td.current.b = dst\n\t\td.current.err = err\n\t\td.current.flushed = true\n\t\tif debugDecoder {\n\t\t\tprintln(\"sync decode to\", len(dst), \"bytes, err:\", err)\n\t\t}\n\t\treturn nil\n\t}\n\t// Remove current block.\n\td.stashDecoder()\n\td.current.decodeOutput = decodeOutput{}\n\td.current.err = nil\n\td.current.flushed = false\n\td.current.d = nil\n\td.syncStream.dstBuf = nil\n\n\t// Ensure no-one else is still running...\n\td.streamWg.Wait()\n\tif d.frame == nil {\n\t\td.frame = newFrameDec(d.o)\n\t}\n\n\tif d.o.concurrent == 1 {\n\t\treturn d.startSyncDecoder(r)\n\t}\n\n\td.current.output = make(chan decodeOutput, d.o.concurrent)\n\tctx, cancel := context.WithCancel(context.Background())\n\td.current.cancel = cancel\n\td.streamWg.Add(1)\n\tgo d.startStreamDecoder(ctx, r, d.current.output)\n\n\treturn nil\n}\n\n// drainOutput will drain the output until errEndOfStream is sent.\nfunc (d *Decoder) drainOutput() {\n\tif d.current.cancel != nil {\n\t\tif debugDecoder {\n\t\t\tprintln(\"cancelling current\")\n\t\t}\n\t\td.current.cancel()\n\t\td.current.cancel = nil\n\t}\n\tif d.current.d != nil {\n\t\tif debugDecoder {\n\t\t\tprintf(\"re-adding current decoder %p, decoders: %d\", d.current.d, len(d.decoders))\n\t\t}\n\t\td.decoders <- d.current.d\n\t\td.current.d = nil\n\t\td.current.b = nil\n\t}\n\tif d.current.output == nil || d.current.flushed {\n\t\tprintln(\"current already flushed\")\n\t\treturn\n\t}\n\tfor v := range d.current.output {\n\t\tif v.d != nil {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"re-adding decoder %p\", v.d)\n\t\t\t}\n\t\t\td.decoders <- v.d\n\t\t}\n\t}\n\td.current.output = nil\n\td.current.flushed = true\n}\n\n// WriteTo writes data to w until there's no more data to write or when an error occurs.\n// The return value n is the number of bytes written.\n// Any error encountered during the write is also returned.\nfunc (d *Decoder) WriteTo(w io.Writer) (int64, error) {\n\tvar n int64\n\tfor {\n\t\tif len(d.current.b) > 0 {\n\t\t\tn2, err2 := w.Write(d.current.b)\n\t\t\tn += int64(n2)\n\t\t\tif err2 != nil && (d.current.err == nil || d.current.err == io.EOF) {\n\t\t\t\td.current.err = err2\n\t\t\t} else if n2 != len(d.current.b) {\n\t\t\t\td.current.err = io.ErrShortWrite\n\t\t\t}\n\t\t}\n\t\tif d.current.err != nil {\n\t\t\tbreak\n\t\t}\n\t\td.nextBlock(true)\n\t}\n\terr := d.current.err\n\tif err != nil {\n\t\td.drainOutput()\n\t}\n\tif err == io.EOF {\n\t\terr = nil\n\t}\n\treturn n, err\n}\n\n// DecodeAll allows stateless decoding of a blob of bytes.\n// Output will be appended to dst, so if the destination size is known\n// you can pre-allocate the destination slice to avoid allocations.\n// DecodeAll can be used concurrently.\n// The Decoder concurrency limits will be respected.\nfunc (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) {\n\tif d.decoders == nil {\n\t\treturn dst, ErrDecoderClosed\n\t}\n\n\t// Grab a block decoder and frame decoder.\n\tblock := <-d.decoders\n\tframe := block.localFrame\n\tinitialSize := len(dst)\n\tdefer func() {\n\t\tif debugDecoder {\n\t\t\tprintf(\"re-adding decoder: %p\", block)\n\t\t}\n\t\tframe.rawInput = nil\n\t\tframe.bBuf = nil\n\t\tif frame.history.decoders.br != nil {\n\t\t\tframe.history.decoders.br.in = nil\n\t\t}\n\t\td.decoders <- block\n\t}()\n\tframe.bBuf = input\n\n\tfor {\n\t\tframe.history.reset()\n\t\terr := frame.reset(&frame.bBuf)\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"frame reset return EOF\")\n\t\t\t\t}\n\t\t\t\treturn dst, nil\n\t\t\t}\n\t\t\treturn dst, err\n\t\t}\n\t\tif err = d.setDict(frame); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif frame.WindowSize > d.o.maxWindowSize {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"window size exceeded:\", frame.WindowSize, \">\", d.o.maxWindowSize)\n\t\t\t}\n\t\t\treturn dst, ErrWindowSizeExceeded\n\t\t}\n\t\tif frame.FrameContentSize != fcsUnknown {\n\t\t\tif frame.FrameContentSize > d.o.maxDecodedSize-uint64(len(dst)-initialSize) {\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"decoder size exceeded; fcs:\", frame.FrameContentSize, \"> mcs:\", d.o.maxDecodedSize-uint64(len(dst)-initialSize), \"len:\", len(dst))\n\t\t\t\t}\n\t\t\t\treturn dst, ErrDecoderSizeExceeded\n\t\t\t}\n\t\t\tif d.o.limitToCap && frame.FrameContentSize > uint64(cap(dst)-len(dst)) {\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"decoder size exceeded; fcs:\", frame.FrameContentSize, \"> (cap-len)\", cap(dst)-len(dst))\n\t\t\t\t}\n\t\t\t\treturn dst, ErrDecoderSizeExceeded\n\t\t\t}\n\t\t\tif cap(dst)-len(dst) < int(frame.FrameContentSize) {\n\t\t\t\tdst2 := make([]byte, len(dst), len(dst)+int(frame.FrameContentSize)+compressedBlockOverAlloc)\n\t\t\t\tcopy(dst2, dst)\n\t\t\t\tdst = dst2\n\t\t\t}\n\t\t}\n\n\t\tif cap(dst) == 0 && !d.o.limitToCap {\n\t\t\t// Allocate len(input) * 2 by default if nothing is provided\n\t\t\t// and we didn't get frame content size.\n\t\t\tsize := len(input) * 2\n\t\t\t// Cap to 1 MB.\n\t\t\tif size > 1<<20 {\n\t\t\t\tsize = 1 << 20\n\t\t\t}\n\t\t\tif uint64(size) > d.o.maxDecodedSize {\n\t\t\t\tsize = int(d.o.maxDecodedSize)\n\t\t\t}\n\t\t\tdst = make([]byte, 0, size)\n\t\t}\n\n\t\tdst, err = frame.runDecoder(dst, block)\n\t\tif err != nil {\n\t\t\treturn dst, err\n\t\t}\n\t\tif uint64(len(dst)-initialSize) > d.o.maxDecodedSize {\n\t\t\treturn dst, ErrDecoderSizeExceeded\n\t\t}\n\t\tif len(frame.bBuf) == 0 {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"frame dbuf empty\")\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\treturn dst, nil\n}\n\n// nextBlock returns the next block.\n// If an error occurs d.err will be set.\n// Optionally the function can block for new output.\n// If non-blocking mode is used the returned boolean will be false\n// if no data was available without blocking.\nfunc (d *Decoder) nextBlock(blocking bool) (ok bool) {\n\tif d.current.err != nil {\n\t\t// Keep error state.\n\t\treturn false\n\t}\n\td.current.b = d.current.b[:0]\n\n\t// SYNC:\n\tif d.syncStream.enabled {\n\t\tif !blocking {\n\t\t\treturn false\n\t\t}\n\t\tok = d.nextBlockSync()\n\t\tif !ok {\n\t\t\td.stashDecoder()\n\t\t}\n\t\treturn ok\n\t}\n\n\t//ASYNC:\n\td.stashDecoder()\n\tif blocking {\n\t\td.current.decodeOutput, ok = <-d.current.output\n\t} else {\n\t\tselect {\n\t\tcase d.current.decodeOutput, ok = <-d.current.output:\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\tif !ok {\n\t\t// This should not happen, so signal error state...\n\t\td.current.err = io.ErrUnexpectedEOF\n\t\treturn false\n\t}\n\tnext := d.current.decodeOutput\n\tif next.d != nil && next.d.async.newHist != nil {\n\t\td.current.crc.Reset()\n\t}\n\tif debugDecoder {\n\t\tvar tmp [4]byte\n\t\tbinary.LittleEndian.PutUint32(tmp[:], uint32(xxhash.Sum64(next.b)))\n\t\tprintln(\"got\", len(d.current.b), \"bytes, error:\", d.current.err, \"data crc:\", tmp)\n\t}\n\n\tif d.o.ignoreChecksum {\n\t\treturn true\n\t}\n\n\tif len(next.b) > 0 {\n\t\td.current.crc.Write(next.b)\n\t}\n\tif next.err == nil && next.d != nil && next.d.hasCRC {\n\t\tgot := uint32(d.current.crc.Sum64())\n\t\tif got != next.d.checkCRC {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"CRC Check Failed: %08x (got) != %08x (on stream)\\n\", got, next.d.checkCRC)\n\t\t\t}\n\t\t\td.current.err = ErrCRCMismatch\n\t\t} else {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"CRC ok %08x\\n\", got)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (d *Decoder) nextBlockSync() (ok bool) {\n\tif d.current.d == nil {\n\t\td.current.d = <-d.decoders\n\t}\n\tfor len(d.current.b) == 0 {\n\t\tif !d.syncStream.inFrame {\n\t\t\td.frame.history.reset()\n\t\t\td.current.err = d.frame.reset(&d.syncStream.br)\n\t\t\tif d.current.err == nil {\n\t\t\t\td.current.err = d.setDict(d.frame)\n\t\t\t}\n\t\t\tif d.current.err != nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif d.frame.WindowSize > d.o.maxDecodedSize || d.frame.WindowSize > d.o.maxWindowSize {\n\t\t\t\td.current.err = ErrDecoderSizeExceeded\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\td.syncStream.decodedFrame = 0\n\t\t\td.syncStream.inFrame = true\n\t\t}\n\t\td.current.err = d.frame.next(d.current.d)\n\t\tif d.current.err != nil {\n\t\t\treturn false\n\t\t}\n\t\td.frame.history.ensureBlock()\n\t\tif debugDecoder {\n\t\t\tprintln(\"History trimmed:\", len(d.frame.history.b), \"decoded already:\", d.syncStream.decodedFrame)\n\t\t}\n\t\thistBefore := len(d.frame.history.b)\n\t\td.current.err = d.current.d.decodeBuf(&d.frame.history)\n\n\t\tif d.current.err != nil {\n\t\t\tprintln(\"error after:\", d.current.err)\n\t\t\treturn false\n\t\t}\n\t\td.current.b = d.frame.history.b[histBefore:]\n\t\tif debugDecoder {\n\t\t\tprintln(\"history after:\", len(d.frame.history.b))\n\t\t}\n\n\t\t// Check frame size (before CRC)\n\t\td.syncStream.decodedFrame += uint64(len(d.current.b))\n\t\tif d.syncStream.decodedFrame > d.frame.FrameContentSize {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"DecodedFrame (%d) > FrameContentSize (%d)\\n\", d.syncStream.decodedFrame, d.frame.FrameContentSize)\n\t\t\t}\n\t\t\td.current.err = ErrFrameSizeExceeded\n\t\t\treturn false\n\t\t}\n\n\t\t// Check FCS\n\t\tif d.current.d.Last && d.frame.FrameContentSize != fcsUnknown && d.syncStream.decodedFrame != d.frame.FrameContentSize {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"DecodedFrame (%d) != FrameContentSize (%d)\\n\", d.syncStream.decodedFrame, d.frame.FrameContentSize)\n\t\t\t}\n\t\t\td.current.err = ErrFrameSizeMismatch\n\t\t\treturn false\n\t\t}\n\n\t\t// Update/Check CRC\n\t\tif d.frame.HasCheckSum {\n\t\t\tif !d.o.ignoreChecksum {\n\t\t\t\td.frame.crc.Write(d.current.b)\n\t\t\t}\n\t\t\tif d.current.d.Last {\n\t\t\t\tif !d.o.ignoreChecksum {\n\t\t\t\t\td.current.err = d.frame.checkCRC()\n\t\t\t\t} else {\n\t\t\t\t\td.current.err = d.frame.consumeCRC()\n\t\t\t\t}\n\t\t\t\tif d.current.err != nil {\n\t\t\t\t\tprintln(\"CRC error:\", d.current.err)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td.syncStream.inFrame = !d.current.d.Last\n\t}\n\treturn true\n}\n\nfunc (d *Decoder) stashDecoder() {\n\tif d.current.d != nil {\n\t\tif debugDecoder {\n\t\t\tprintf(\"re-adding current decoder %p\", d.current.d)\n\t\t}\n\t\td.decoders <- d.current.d\n\t\td.current.d = nil\n\t}\n}\n\n// Close will release all resources.\n// It is NOT possible to reuse the decoder after this.\nfunc (d *Decoder) Close() {\n\tif d.current.err == ErrDecoderClosed {\n\t\treturn\n\t}\n\td.drainOutput()\n\tif d.current.cancel != nil {\n\t\td.current.cancel()\n\t\td.streamWg.Wait()\n\t\td.current.cancel = nil\n\t}\n\tif d.decoders != nil {\n\t\tclose(d.decoders)\n\t\tfor dec := range d.decoders {\n\t\t\tdec.Close()\n\t\t}\n\t\td.decoders = nil\n\t}\n\tif d.current.d != nil {\n\t\td.current.d.Close()\n\t\td.current.d = nil\n\t}\n\td.current.err = ErrDecoderClosed\n}\n\n// IOReadCloser returns the decoder as an io.ReadCloser for convenience.\n// Any changes to the decoder will be reflected, so the returned ReadCloser\n// can be reused along with the decoder.\n// io.WriterTo is also supported by the returned ReadCloser.\nfunc (d *Decoder) IOReadCloser() io.ReadCloser {\n\treturn closeWrapper{d: d}\n}\n\n// closeWrapper wraps a function call as a closer.\ntype closeWrapper struct {\n\td *Decoder\n}\n\n// WriteTo forwards WriteTo calls to the decoder.\nfunc (c closeWrapper) WriteTo(w io.Writer) (n int64, err error) {\n\treturn c.d.WriteTo(w)\n}\n\n// Read forwards read calls to the decoder.\nfunc (c closeWrapper) Read(p []byte) (n int, err error) {\n\treturn c.d.Read(p)\n}\n\n// Close closes the decoder.\nfunc (c closeWrapper) Close() error {\n\tc.d.Close()\n\treturn nil\n}\n\ntype decodeOutput struct {\n\td   *blockDec\n\tb   []byte\n\terr error\n}\n\nfunc (d *Decoder) startSyncDecoder(r io.Reader) error {\n\td.frame.history.reset()\n\td.syncStream.br = readerWrapper{r: r}\n\td.syncStream.inFrame = false\n\td.syncStream.enabled = true\n\td.syncStream.decodedFrame = 0\n\treturn nil\n}\n\n// Create Decoder:\n// ASYNC:\n// Spawn 3 go routines.\n// 0: Read frames and decode block literals.\n// 1: Decode sequences.\n// 2: Execute sequences, send to output.\nfunc (d *Decoder) startStreamDecoder(ctx context.Context, r io.Reader, output chan decodeOutput) {\n\tdefer d.streamWg.Done()\n\tbr := readerWrapper{r: r}\n\n\tvar seqDecode = make(chan *blockDec, d.o.concurrent)\n\tvar seqExecute = make(chan *blockDec, d.o.concurrent)\n\n\t// Async 1: Decode sequences...\n\tgo func() {\n\t\tvar hist history\n\t\tvar hasErr bool\n\n\t\tfor block := range seqDecode {\n\t\t\tif hasErr {\n\t\t\t\tif block != nil {\n\t\t\t\t\tseqExecute <- block\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif block.async.newHist != nil {\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"Async 1: new history, recent:\", block.async.newHist.recentOffsets)\n\t\t\t\t}\n\t\t\t\thist.reset()\n\t\t\t\thist.decoders = block.async.newHist.decoders\n\t\t\t\thist.recentOffsets = block.async.newHist.recentOffsets\n\t\t\t\thist.windowSize = block.async.newHist.windowSize\n\t\t\t\tif block.async.newHist.dict != nil {\n\t\t\t\t\thist.setDict(block.async.newHist.dict)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif block.err != nil || block.Type != blockTypeCompressed {\n\t\t\t\thasErr = block.err != nil\n\t\t\t\tseqExecute <- block\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\thist.decoders.literals = block.async.literals\n\t\t\tblock.err = block.prepareSequences(block.async.seqData, &hist)\n\t\t\tif debugDecoder && block.err != nil {\n\t\t\t\tprintln(\"prepareSequences returned:\", block.err)\n\t\t\t}\n\t\t\thasErr = block.err != nil\n\t\t\tif block.err == nil {\n\t\t\t\tblock.err = block.decodeSequences(&hist)\n\t\t\t\tif debugDecoder && block.err != nil {\n\t\t\t\t\tprintln(\"decodeSequences returned:\", block.err)\n\t\t\t\t}\n\t\t\t\thasErr = block.err != nil\n\t\t\t\t//\t\t\t\tblock.async.sequence = hist.decoders.seq[:hist.decoders.nSeqs]\n\t\t\t\tblock.async.seqSize = hist.decoders.seqSize\n\t\t\t}\n\t\t\tseqExecute <- block\n\t\t}\n\t\tclose(seqExecute)\n\t\thist.reset()\n\t}()\n\n\tvar wg sync.WaitGroup\n\twg.Add(1)\n\n\t// Async 3: Execute sequences...\n\tframeHistCache := d.frame.history.b\n\tgo func() {\n\t\tvar hist history\n\t\tvar decodedFrame uint64\n\t\tvar fcs uint64\n\t\tvar hasErr bool\n\t\tfor block := range seqExecute {\n\t\t\tout := decodeOutput{err: block.err, d: block}\n\t\t\tif block.err != nil || hasErr {\n\t\t\t\thasErr = true\n\t\t\t\toutput <- out\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif block.async.newHist != nil {\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"Async 2: new history\")\n\t\t\t\t}\n\t\t\t\thist.reset()\n\t\t\t\thist.windowSize = block.async.newHist.windowSize\n\t\t\t\thist.allocFrameBuffer = block.async.newHist.allocFrameBuffer\n\t\t\t\tif block.async.newHist.dict != nil {\n\t\t\t\t\thist.setDict(block.async.newHist.dict)\n\t\t\t\t}\n\n\t\t\t\tif cap(hist.b) < hist.allocFrameBuffer {\n\t\t\t\t\tif cap(frameHistCache) >= hist.allocFrameBuffer {\n\t\t\t\t\t\thist.b = frameHistCache\n\t\t\t\t\t} else {\n\t\t\t\t\t\thist.b = make([]byte, 0, hist.allocFrameBuffer)\n\t\t\t\t\t\tprintln(\"Alloc history sized\", hist.allocFrameBuffer)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\thist.b = hist.b[:0]\n\t\t\t\tfcs = block.async.fcs\n\t\t\t\tdecodedFrame = 0\n\t\t\t}\n\t\t\tdo := decodeOutput{err: block.err, d: block}\n\t\t\tswitch block.Type {\n\t\t\tcase blockTypeRLE:\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"add rle block length:\", block.RLESize)\n\t\t\t\t}\n\n\t\t\t\tif cap(block.dst) < int(block.RLESize) {\n\t\t\t\t\tif block.lowMem {\n\t\t\t\t\t\tblock.dst = make([]byte, block.RLESize)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblock.dst = make([]byte, maxCompressedBlockSize)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tblock.dst = block.dst[:block.RLESize]\n\t\t\t\tv := block.data[0]\n\t\t\t\tfor i := range block.dst {\n\t\t\t\t\tblock.dst[i] = v\n\t\t\t\t}\n\t\t\t\thist.append(block.dst)\n\t\t\t\tdo.b = block.dst\n\t\t\tcase blockTypeRaw:\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"add raw block length:\", len(block.data))\n\t\t\t\t}\n\t\t\t\thist.append(block.data)\n\t\t\t\tdo.b = block.data\n\t\t\tcase blockTypeCompressed:\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"execute with history length:\", len(hist.b), \"window:\", hist.windowSize)\n\t\t\t\t}\n\t\t\t\thist.decoders.seqSize = block.async.seqSize\n\t\t\t\thist.decoders.literals = block.async.literals\n\t\t\t\tdo.err = block.executeSequences(&hist)\n\t\t\t\thasErr = do.err != nil\n\t\t\t\tif debugDecoder && hasErr {\n\t\t\t\t\tprintln(\"executeSequences returned:\", do.err)\n\t\t\t\t}\n\t\t\t\tdo.b = block.dst\n\t\t\t}\n\t\t\tif !hasErr {\n\t\t\t\tdecodedFrame += uint64(len(do.b))\n\t\t\t\tif decodedFrame > fcs {\n\t\t\t\t\tprintln(\"fcs exceeded\", block.Last, fcs, decodedFrame)\n\t\t\t\t\tdo.err = ErrFrameSizeExceeded\n\t\t\t\t\thasErr = true\n\t\t\t\t} else if block.Last && fcs != fcsUnknown && decodedFrame != fcs {\n\t\t\t\t\tdo.err = ErrFrameSizeMismatch\n\t\t\t\t\thasErr = true\n\t\t\t\t} else {\n\t\t\t\t\tif debugDecoder {\n\t\t\t\t\t\tprintln(\"fcs ok\", block.Last, fcs, decodedFrame)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\toutput <- do\n\t\t}\n\t\tclose(output)\n\t\tframeHistCache = hist.b\n\t\twg.Done()\n\t\tif debugDecoder {\n\t\t\tprintln(\"decoder goroutines finished\")\n\t\t}\n\t\thist.reset()\n\t}()\n\n\tvar hist history\ndecodeStream:\n\tfor {\n\t\tvar hasErr bool\n\t\thist.reset()\n\t\tdecodeBlock := func(block *blockDec) {\n\t\t\tif hasErr {\n\t\t\t\tif block != nil {\n\t\t\t\t\tseqDecode <- block\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif block.err != nil || block.Type != blockTypeCompressed {\n\t\t\t\thasErr = block.err != nil\n\t\t\t\tseqDecode <- block\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tremain, err := block.decodeLiterals(block.data, &hist)\n\t\t\tblock.err = err\n\t\t\thasErr = block.err != nil\n\t\t\tif err == nil {\n\t\t\t\tblock.async.literals = hist.decoders.literals\n\t\t\t\tblock.async.seqData = remain\n\t\t\t} else if debugDecoder {\n\t\t\t\tprintln(\"decodeLiterals error:\", err)\n\t\t\t}\n\t\t\tseqDecode <- block\n\t\t}\n\t\tframe := d.frame\n\t\tif debugDecoder {\n\t\t\tprintln(\"New frame...\")\n\t\t}\n\t\tvar historySent bool\n\t\tframe.history.reset()\n\t\terr := frame.reset(&br)\n\t\tif debugDecoder && err != nil {\n\t\t\tprintln(\"Frame decoder returned\", err)\n\t\t}\n\t\tif err == nil {\n\t\t\terr = d.setDict(frame)\n\t\t}\n\t\tif err == nil && d.frame.WindowSize > d.o.maxWindowSize {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"decoder size exceeded, fws:\", d.frame.WindowSize, \"> mws:\", d.o.maxWindowSize)\n\t\t\t}\n\n\t\t\terr = ErrDecoderSizeExceeded\n\t\t}\n\t\tif err != nil {\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\tcase dec := <-d.decoders:\n\t\t\t\tdec.sendErr(err)\n\t\t\t\tdecodeBlock(dec)\n\t\t\t}\n\t\t\tbreak decodeStream\n\t\t}\n\n\t\t// Go through all blocks of the frame.\n\t\tfor {\n\t\t\tvar dec *blockDec\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\tbreak decodeStream\n\t\t\tcase dec = <-d.decoders:\n\t\t\t\t// Once we have a decoder, we MUST return it.\n\t\t\t}\n\t\t\terr := frame.next(dec)\n\t\t\tif !historySent {\n\t\t\t\th := frame.history\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintln(\"Alloc History:\", h.allocFrameBuffer)\n\t\t\t\t}\n\t\t\t\thist.reset()\n\t\t\t\tif h.dict != nil {\n\t\t\t\t\thist.setDict(h.dict)\n\t\t\t\t}\n\t\t\t\tdec.async.newHist = &h\n\t\t\t\tdec.async.fcs = frame.FrameContentSize\n\t\t\t\thistorySent = true\n\t\t\t} else {\n\t\t\t\tdec.async.newHist = nil\n\t\t\t}\n\t\t\tif debugDecoder && err != nil {\n\t\t\t\tprintln(\"next block returned error:\", err)\n\t\t\t}\n\t\t\tdec.err = err\n\t\t\tdec.hasCRC = false\n\t\t\tif dec.Last && frame.HasCheckSum && err == nil {\n\t\t\t\tcrc, err := frame.rawInput.readSmall(4)\n\t\t\t\tif len(crc) < 4 {\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\terr = io.ErrUnexpectedEOF\n\n\t\t\t\t\t}\n\t\t\t\t\tprintln(\"CRC missing?\", err)\n\t\t\t\t\tdec.err = err\n\t\t\t\t} else {\n\t\t\t\t\tdec.checkCRC = binary.LittleEndian.Uint32(crc)\n\t\t\t\t\tdec.hasCRC = true\n\t\t\t\t\tif debugDecoder {\n\t\t\t\t\t\tprintf(\"found crc to check: %08x\\n\", dec.checkCRC)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\terr = dec.err\n\t\t\tlast := dec.Last\n\t\t\tdecodeBlock(dec)\n\t\t\tif err != nil {\n\t\t\t\tbreak decodeStream\n\t\t\t}\n\t\t\tif last {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tclose(seqDecode)\n\twg.Wait()\n\thist.reset()\n\td.frame.history.b = frameHistCache\n}\n\nfunc (d *Decoder) setDict(frame *frameDec) (err error) {\n\tdict, ok := d.dicts[frame.DictionaryID]\n\tif ok {\n\t\tif debugDecoder {\n\t\t\tprintln(\"setting dict\", frame.DictionaryID)\n\t\t}\n\t\tframe.history.setDict(dict)\n\t} else if frame.DictionaryID != 0 {\n\t\t// A zero or missing dictionary id is ambiguous:\n\t\t// either dictionary zero, or no dictionary. In particular,\n\t\t// zstd --patch-from uses this id for the source file,\n\t\t// so only return an error if the dictionary id is not zero.\n\t\terr = ErrUnknownDictionary\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/decoder_options.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math/bits\"\n\t\"runtime\"\n)\n\n// DOption is an option for creating a decoder.\ntype DOption func(*decoderOptions) error\n\n// options retains accumulated state of multiple options.\ntype decoderOptions struct {\n\tlowMem          bool\n\tconcurrent      int\n\tmaxDecodedSize  uint64\n\tmaxWindowSize   uint64\n\tdicts           []*dict\n\tignoreChecksum  bool\n\tlimitToCap      bool\n\tdecodeBufsBelow int\n}\n\nfunc (o *decoderOptions) setDefault() {\n\t*o = decoderOptions{\n\t\t// use less ram: true for now, but may change.\n\t\tlowMem:          true,\n\t\tconcurrent:      runtime.GOMAXPROCS(0),\n\t\tmaxWindowSize:   MaxWindowSize,\n\t\tdecodeBufsBelow: 128 << 10,\n\t}\n\tif o.concurrent > 4 {\n\t\to.concurrent = 4\n\t}\n\to.maxDecodedSize = 64 << 30\n}\n\n// WithDecoderLowmem will set whether to use a lower amount of memory,\n// but possibly have to allocate more while running.\nfunc WithDecoderLowmem(b bool) DOption {\n\treturn func(o *decoderOptions) error { o.lowMem = b; return nil }\n}\n\n// WithDecoderConcurrency sets the number of created decoders.\n// When decoding block with DecodeAll, this will limit the number\n// of possible concurrently running decodes.\n// When decoding streams, this will limit the number of\n// inflight blocks.\n// When decoding streams and setting maximum to 1,\n// no async decoding will be done.\n// When a value of 0 is provided GOMAXPROCS will be used.\n// By default this will be set to 4 or GOMAXPROCS, whatever is lower.\nfunc WithDecoderConcurrency(n int) DOption {\n\treturn func(o *decoderOptions) error {\n\t\tif n < 0 {\n\t\t\treturn errors.New(\"concurrency must be at least 1\")\n\t\t}\n\t\tif n == 0 {\n\t\t\to.concurrent = runtime.GOMAXPROCS(0)\n\t\t} else {\n\t\t\to.concurrent = n\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithDecoderMaxMemory allows to set a maximum decoded size for in-memory\n// non-streaming operations or maximum window size for streaming operations.\n// This can be used to control memory usage of potentially hostile content.\n// Maximum is 1 << 63 bytes. Default is 64GiB.\nfunc WithDecoderMaxMemory(n uint64) DOption {\n\treturn func(o *decoderOptions) error {\n\t\tif n == 0 {\n\t\t\treturn errors.New(\"WithDecoderMaxMemory must be at least 1\")\n\t\t}\n\t\tif n > 1<<63 {\n\t\t\treturn errors.New(\"WithDecoderMaxmemory must be less than 1 << 63\")\n\t\t}\n\t\to.maxDecodedSize = n\n\t\treturn nil\n\t}\n}\n\n// WithDecoderDicts allows to register one or more dictionaries for the decoder.\n//\n// Each slice in dict must be in the [dictionary format] produced by\n// \"zstd --train\" from the Zstandard reference implementation.\n//\n// If several dictionaries with the same ID are provided, the last one will be used.\n//\n// [dictionary format]: https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary-format\nfunc WithDecoderDicts(dicts ...[]byte) DOption {\n\treturn func(o *decoderOptions) error {\n\t\tfor _, b := range dicts {\n\t\t\td, err := loadDict(b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\to.dicts = append(o.dicts, d)\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithDecoderDictRaw registers a dictionary that may be used by the decoder.\n// The slice content can be arbitrary data.\nfunc WithDecoderDictRaw(id uint32, content []byte) DOption {\n\treturn func(o *decoderOptions) error {\n\t\tif bits.UintSize > 32 && uint(len(content)) > dictMaxLength {\n\t\t\treturn fmt.Errorf(\"dictionary of size %d > 2GiB too large\", len(content))\n\t\t}\n\t\to.dicts = append(o.dicts, &dict{id: id, content: content, offsets: [3]int{1, 4, 8}})\n\t\treturn nil\n\t}\n}\n\n// WithDecoderMaxWindow allows to set a maximum window size for decodes.\n// This allows rejecting packets that will cause big memory usage.\n// The Decoder will likely allocate more memory based on the WithDecoderLowmem setting.\n// If WithDecoderMaxMemory is set to a lower value, that will be used.\n// Default is 512MB, Maximum is ~3.75 TB as per zstandard spec.\nfunc WithDecoderMaxWindow(size uint64) DOption {\n\treturn func(o *decoderOptions) error {\n\t\tif size < MinWindowSize {\n\t\t\treturn errors.New(\"WithMaxWindowSize must be at least 1KB, 1024 bytes\")\n\t\t}\n\t\tif size > (1<<41)+7*(1<<38) {\n\t\t\treturn errors.New(\"WithMaxWindowSize must be less than (1<<41) + 7*(1<<38) ~ 3.75TB\")\n\t\t}\n\t\to.maxWindowSize = size\n\t\treturn nil\n\t}\n}\n\n// WithDecodeAllCapLimit will limit DecodeAll to decoding cap(dst)-len(dst) bytes,\n// or any size set in WithDecoderMaxMemory.\n// This can be used to limit decoding to a specific maximum output size.\n// Disabled by default.\nfunc WithDecodeAllCapLimit(b bool) DOption {\n\treturn func(o *decoderOptions) error {\n\t\to.limitToCap = b\n\t\treturn nil\n\t}\n}\n\n// WithDecodeBuffersBelow will fully decode readers that have a\n// `Bytes() []byte` and `Len() int` interface similar to bytes.Buffer.\n// This typically uses less allocations but will have the full decompressed object in memory.\n// Note that DecodeAllCapLimit will disable this, as well as giving a size of 0 or less.\n// Default is 128KiB.\nfunc WithDecodeBuffersBelow(size int) DOption {\n\treturn func(o *decoderOptions) error {\n\t\to.decodeBufsBelow = size\n\t\treturn nil\n\t}\n}\n\n// IgnoreChecksum allows to forcibly ignore checksum checking.\nfunc IgnoreChecksum(b bool) DOption {\n\treturn func(o *decoderOptions) error {\n\t\to.ignoreChecksum = b\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/dict.go",
    "content": "package zstd\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"sort\"\n\n\t\"github.com/klauspost/compress/huff0\"\n)\n\ntype dict struct {\n\tid uint32\n\n\tlitEnc              *huff0.Scratch\n\tllDec, ofDec, mlDec sequenceDec\n\toffsets             [3]int\n\tcontent             []byte\n}\n\nconst dictMagic = \"\\x37\\xa4\\x30\\xec\"\n\n// Maximum dictionary size for the reference implementation (1.5.3) is 2 GiB.\nconst dictMaxLength = 1 << 31\n\n// ID returns the dictionary id or 0 if d is nil.\nfunc (d *dict) ID() uint32 {\n\tif d == nil {\n\t\treturn 0\n\t}\n\treturn d.id\n}\n\n// ContentSize returns the dictionary content size or 0 if d is nil.\nfunc (d *dict) ContentSize() int {\n\tif d == nil {\n\t\treturn 0\n\t}\n\treturn len(d.content)\n}\n\n// Content returns the dictionary content.\nfunc (d *dict) Content() []byte {\n\tif d == nil {\n\t\treturn nil\n\t}\n\treturn d.content\n}\n\n// Offsets returns the initial offsets.\nfunc (d *dict) Offsets() [3]int {\n\tif d == nil {\n\t\treturn [3]int{}\n\t}\n\treturn d.offsets\n}\n\n// LitEncoder returns the literal encoder.\nfunc (d *dict) LitEncoder() *huff0.Scratch {\n\tif d == nil {\n\t\treturn nil\n\t}\n\treturn d.litEnc\n}\n\n// Load a dictionary as described in\n// https://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md#dictionary-format\nfunc loadDict(b []byte) (*dict, error) {\n\t// Check static field size.\n\tif len(b) <= 8+(3*4) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\td := dict{\n\t\tllDec: sequenceDec{fse: &fseDecoder{}},\n\t\tofDec: sequenceDec{fse: &fseDecoder{}},\n\t\tmlDec: sequenceDec{fse: &fseDecoder{}},\n\t}\n\tif string(b[:4]) != dictMagic {\n\t\treturn nil, ErrMagicMismatch\n\t}\n\td.id = binary.LittleEndian.Uint32(b[4:8])\n\tif d.id == 0 {\n\t\treturn nil, errors.New(\"dictionaries cannot have ID 0\")\n\t}\n\n\t// Read literal table\n\tvar err error\n\td.litEnc, b, err = huff0.ReadTable(b[8:], nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"loading literal table: %w\", err)\n\t}\n\td.litEnc.Reuse = huff0.ReusePolicyMust\n\n\tbr := byteReader{\n\t\tb:   b,\n\t\toff: 0,\n\t}\n\treadDec := func(i tableIndex, dec *fseDecoder) error {\n\t\tif err := dec.readNCount(&br, uint16(maxTableSymbol[i])); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif br.overread() {\n\t\t\treturn io.ErrUnexpectedEOF\n\t\t}\n\t\terr = dec.transform(symbolTableX[i])\n\t\tif err != nil {\n\t\t\tprintln(\"Transform table error:\", err)\n\t\t\treturn err\n\t\t}\n\t\tif debugDecoder || debugEncoder {\n\t\t\tprintln(\"Read table ok\", \"symbolLen:\", dec.symbolLen)\n\t\t}\n\t\t// Set decoders as predefined so they aren't reused.\n\t\tdec.preDefined = true\n\t\treturn nil\n\t}\n\n\tif err := readDec(tableOffsets, d.ofDec.fse); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := readDec(tableMatchLengths, d.mlDec.fse); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := readDec(tableLiteralLengths, d.llDec.fse); err != nil {\n\t\treturn nil, err\n\t}\n\tif br.remain() < 12 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\n\td.offsets[0] = int(br.Uint32())\n\tbr.advance(4)\n\td.offsets[1] = int(br.Uint32())\n\tbr.advance(4)\n\td.offsets[2] = int(br.Uint32())\n\tbr.advance(4)\n\tif d.offsets[0] <= 0 || d.offsets[1] <= 0 || d.offsets[2] <= 0 {\n\t\treturn nil, errors.New(\"invalid offset in dictionary\")\n\t}\n\td.content = make([]byte, br.remain())\n\tcopy(d.content, br.unread())\n\tif d.offsets[0] > len(d.content) || d.offsets[1] > len(d.content) || d.offsets[2] > len(d.content) {\n\t\treturn nil, fmt.Errorf(\"initial offset bigger than dictionary content size %d, offsets: %v\", len(d.content), d.offsets)\n\t}\n\n\treturn &d, nil\n}\n\n// InspectDictionary loads a zstd dictionary and provides functions to inspect the content.\nfunc InspectDictionary(b []byte) (interface {\n\tID() uint32\n\tContentSize() int\n\tContent() []byte\n\tOffsets() [3]int\n\tLitEncoder() *huff0.Scratch\n}, error) {\n\tinitPredefined()\n\td, err := loadDict(b)\n\treturn d, err\n}\n\ntype BuildDictOptions struct {\n\t// Dictionary ID.\n\tID uint32\n\n\t// Content to use to create dictionary tables.\n\tContents [][]byte\n\n\t// History to use for all blocks.\n\tHistory []byte\n\n\t// Offsets to use.\n\tOffsets [3]int\n\n\t// CompatV155 will make the dictionary compatible with Zstd v1.5.5 and earlier.\n\t// See https://github.com/facebook/zstd/issues/3724\n\tCompatV155 bool\n\n\t// Use the specified encoder level.\n\t// The dictionary will be built using the specified encoder level,\n\t// which will reflect speed and make the dictionary tailored for that level.\n\t// If not set SpeedBestCompression will be used.\n\tLevel EncoderLevel\n\n\t// DebugOut will write stats and other details here if set.\n\tDebugOut io.Writer\n}\n\nfunc BuildDict(o BuildDictOptions) ([]byte, error) {\n\tinitPredefined()\n\thist := o.History\n\tcontents := o.Contents\n\tdebug := o.DebugOut != nil\n\tprintln := func(args ...interface{}) {\n\t\tif o.DebugOut != nil {\n\t\t\tfmt.Fprintln(o.DebugOut, args...)\n\t\t}\n\t}\n\tprintf := func(s string, args ...interface{}) {\n\t\tif o.DebugOut != nil {\n\t\t\tfmt.Fprintf(o.DebugOut, s, args...)\n\t\t}\n\t}\n\tprint := func(args ...interface{}) {\n\t\tif o.DebugOut != nil {\n\t\t\tfmt.Fprint(o.DebugOut, args...)\n\t\t}\n\t}\n\n\tif int64(len(hist)) > dictMaxLength {\n\t\treturn nil, fmt.Errorf(\"dictionary of size %d > %d\", len(hist), int64(dictMaxLength))\n\t}\n\tif len(hist) < 8 {\n\t\treturn nil, fmt.Errorf(\"dictionary of size %d < %d\", len(hist), 8)\n\t}\n\tif len(contents) == 0 {\n\t\treturn nil, errors.New(\"no content provided\")\n\t}\n\td := dict{\n\t\tid:      o.ID,\n\t\tlitEnc:  nil,\n\t\tllDec:   sequenceDec{},\n\t\tofDec:   sequenceDec{},\n\t\tmlDec:   sequenceDec{},\n\t\toffsets: o.Offsets,\n\t\tcontent: hist,\n\t}\n\tblock := blockEnc{lowMem: false}\n\tblock.init()\n\tenc := encoder(&bestFastEncoder{fastBase: fastBase{maxMatchOff: int32(maxMatchLen), bufferReset: math.MaxInt32 - int32(maxMatchLen*2), lowMem: false}})\n\tif o.Level != 0 {\n\t\teOpts := encoderOptions{\n\t\t\tlevel:      o.Level,\n\t\t\tblockSize:  maxMatchLen,\n\t\t\twindowSize: maxMatchLen,\n\t\t\tdict:       &d,\n\t\t\tlowMem:     false,\n\t\t}\n\t\tenc = eOpts.encoder()\n\t} else {\n\t\to.Level = SpeedBestCompression\n\t}\n\tvar (\n\t\tremain [256]int\n\t\tll     [256]int\n\t\tml     [256]int\n\t\tof     [256]int\n\t)\n\taddValues := func(dst *[256]int, src []byte) {\n\t\tfor _, v := range src {\n\t\t\tdst[v]++\n\t\t}\n\t}\n\taddHist := func(dst *[256]int, src *[256]uint32) {\n\t\tfor i, v := range src {\n\t\t\tdst[i] += int(v)\n\t\t}\n\t}\n\tseqs := 0\n\tnUsed := 0\n\tlitTotal := 0\n\tnewOffsets := make(map[uint32]int, 1000)\n\tfor _, b := range contents {\n\t\tblock.reset(nil)\n\t\tif len(b) < 8 {\n\t\t\tcontinue\n\t\t}\n\t\tnUsed++\n\t\tenc.Reset(&d, true)\n\t\tenc.Encode(&block, b)\n\t\taddValues(&remain, block.literals)\n\t\tlitTotal += len(block.literals)\n\t\tseqs += len(block.sequences)\n\t\tblock.genCodes()\n\t\taddHist(&ll, block.coders.llEnc.Histogram())\n\t\taddHist(&ml, block.coders.mlEnc.Histogram())\n\t\taddHist(&of, block.coders.ofEnc.Histogram())\n\t\tfor i, seq := range block.sequences {\n\t\t\tif i > 3 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\toffset := seq.offset\n\t\t\tif offset == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif offset > 3 {\n\t\t\t\tnewOffsets[offset-3]++\n\t\t\t} else {\n\t\t\t\tnewOffsets[uint32(o.Offsets[offset-1])]++\n\t\t\t}\n\t\t}\n\t}\n\t// Find most used offsets.\n\tvar sortedOffsets []uint32\n\tfor k := range newOffsets {\n\t\tsortedOffsets = append(sortedOffsets, k)\n\t}\n\tsort.Slice(sortedOffsets, func(i, j int) bool {\n\t\ta, b := sortedOffsets[i], sortedOffsets[j]\n\t\tif a == b {\n\t\t\t// Prefer the longer offset\n\t\t\treturn sortedOffsets[i] > sortedOffsets[j]\n\t\t}\n\t\treturn newOffsets[sortedOffsets[i]] > newOffsets[sortedOffsets[j]]\n\t})\n\tif len(sortedOffsets) > 3 {\n\t\tif debug {\n\t\t\tprint(\"Offsets:\")\n\t\t\tfor i, v := range sortedOffsets {\n\t\t\t\tif i > 20 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tprintf(\"[%d: %d],\", v, newOffsets[v])\n\t\t\t}\n\t\t\tprintln(\"\")\n\t\t}\n\n\t\tsortedOffsets = sortedOffsets[:3]\n\t}\n\tfor i, v := range sortedOffsets {\n\t\to.Offsets[i] = int(v)\n\t}\n\tif debug {\n\t\tprintln(\"New repeat offsets\", o.Offsets)\n\t}\n\n\tif nUsed == 0 || seqs == 0 {\n\t\treturn nil, fmt.Errorf(\"%d blocks, %d sequences found\", nUsed, seqs)\n\t}\n\tif debug {\n\t\tprintln(\"Sequences:\", seqs, \"Blocks:\", nUsed, \"Literals:\", litTotal)\n\t}\n\tif seqs/nUsed < 512 {\n\t\t// Use 512 as minimum.\n\t\tnUsed = seqs / 512\n\t}\n\tcopyHist := func(dst *fseEncoder, src *[256]int) ([]byte, error) {\n\t\thist := dst.Histogram()\n\t\tvar maxSym uint8\n\t\tvar maxCount int\n\t\tvar fakeLength int\n\t\tfor i, v := range src {\n\t\t\tif v > 0 {\n\t\t\t\tv = v / nUsed\n\t\t\t\tif v == 0 {\n\t\t\t\t\tv = 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif v > maxCount {\n\t\t\t\tmaxCount = v\n\t\t\t}\n\t\t\tif v != 0 {\n\t\t\t\tmaxSym = uint8(i)\n\t\t\t}\n\t\t\tfakeLength += v\n\t\t\thist[i] = uint32(v)\n\t\t}\n\t\tdst.HistogramFinished(maxSym, maxCount)\n\t\tdst.reUsed = false\n\t\tdst.useRLE = false\n\t\terr := dst.normalizeCount(fakeLength)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif debug {\n\t\t\tprintln(\"RAW:\", dst.count[:maxSym+1], \"NORM:\", dst.norm[:maxSym+1], \"LEN:\", fakeLength)\n\t\t}\n\t\treturn dst.writeCount(nil)\n\t}\n\tif debug {\n\t\tprint(\"Literal lengths: \")\n\t}\n\tllTable, err := copyHist(block.coders.llEnc, &ll)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif debug {\n\t\tprint(\"Match lengths: \")\n\t}\n\tmlTable, err := copyHist(block.coders.mlEnc, &ml)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif debug {\n\t\tprint(\"Offsets: \")\n\t}\n\tofTable, err := copyHist(block.coders.ofEnc, &of)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Literal table\n\tavgSize := litTotal\n\tif avgSize > huff0.BlockSizeMax/2 {\n\t\tavgSize = huff0.BlockSizeMax / 2\n\t}\n\thuffBuff := make([]byte, 0, avgSize)\n\t// Target size\n\tdiv := litTotal / avgSize\n\tif div < 1 {\n\t\tdiv = 1\n\t}\n\tif debug {\n\t\tprintln(\"Huffman weights:\")\n\t}\n\tfor i, n := range remain[:] {\n\t\tif n > 0 {\n\t\t\tn = n / div\n\t\t\t// Allow all entries to be represented.\n\t\t\tif n == 0 {\n\t\t\t\tn = 1\n\t\t\t}\n\t\t\thuffBuff = append(huffBuff, bytes.Repeat([]byte{byte(i)}, n)...)\n\t\t\tif debug {\n\t\t\t\tprintf(\"[%d: %d], \", i, n)\n\t\t\t}\n\t\t}\n\t}\n\tif o.CompatV155 && remain[255]/div == 0 {\n\t\thuffBuff = append(huffBuff, 255)\n\t}\n\tscratch := &huff0.Scratch{TableLog: 11}\n\tfor tries := 0; tries < 255; tries++ {\n\t\tscratch = &huff0.Scratch{TableLog: 11}\n\t\t_, _, err = huff0.Compress1X(huffBuff, scratch)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif debug {\n\t\t\tprintf(\"Try %d: Huffman error: %v\\n\", tries+1, err)\n\t\t}\n\t\thuffBuff = huffBuff[:0]\n\t\tif tries == 250 {\n\t\t\tif debug {\n\t\t\t\tprintln(\"Huffman: Bailing out with predefined table\")\n\t\t\t}\n\n\t\t\t// Bail out.... Just generate something\n\t\t\thuffBuff = append(huffBuff, bytes.Repeat([]byte{255}, 10000)...)\n\t\t\tfor i := 0; i < 128; i++ {\n\t\t\t\thuffBuff = append(huffBuff, byte(i))\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif errors.Is(err, huff0.ErrIncompressible) {\n\t\t\t// Try truncating least common.\n\t\t\tfor i, n := range remain[:] {\n\t\t\t\tif n > 0 {\n\t\t\t\t\tn = n / (div * (i + 1))\n\t\t\t\t\tif n > 0 {\n\t\t\t\t\t\thuffBuff = append(huffBuff, bytes.Repeat([]byte{byte(i)}, n)...)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif o.CompatV155 && len(huffBuff) > 0 && huffBuff[len(huffBuff)-1] != 255 {\n\t\t\t\thuffBuff = append(huffBuff, 255)\n\t\t\t}\n\t\t\tif len(huffBuff) == 0 {\n\t\t\t\thuffBuff = append(huffBuff, 0, 255)\n\t\t\t}\n\t\t}\n\t\tif errors.Is(err, huff0.ErrUseRLE) {\n\t\t\tfor i, n := range remain[:] {\n\t\t\t\tn = n / (div * (i + 1))\n\t\t\t\t// Allow all entries to be represented.\n\t\t\t\tif n == 0 {\n\t\t\t\t\tn = 1\n\t\t\t\t}\n\t\t\t\thuffBuff = append(huffBuff, bytes.Repeat([]byte{byte(i)}, n)...)\n\t\t\t}\n\t\t}\n\t}\n\n\tvar out bytes.Buffer\n\tout.Write([]byte(dictMagic))\n\tout.Write(binary.LittleEndian.AppendUint32(nil, o.ID))\n\tout.Write(scratch.OutTable)\n\tif debug {\n\t\tprintln(\"huff table:\", len(scratch.OutTable), \"bytes\")\n\t\tprintln(\"of table:\", len(ofTable), \"bytes\")\n\t\tprintln(\"ml table:\", len(mlTable), \"bytes\")\n\t\tprintln(\"ll table:\", len(llTable), \"bytes\")\n\t}\n\tout.Write(ofTable)\n\tout.Write(mlTable)\n\tout.Write(llTable)\n\tout.Write(binary.LittleEndian.AppendUint32(nil, uint32(o.Offsets[0])))\n\tout.Write(binary.LittleEndian.AppendUint32(nil, uint32(o.Offsets[1])))\n\tout.Write(binary.LittleEndian.AppendUint32(nil, uint32(o.Offsets[2])))\n\tout.Write(hist)\n\tif debug {\n\t\t_, err := loadDict(out.Bytes())\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\ti, err := InspectDictionary(out.Bytes())\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tprintln(\"ID:\", i.ID())\n\t\tprintln(\"Content size:\", i.ContentSize())\n\t\tprintln(\"Encoder:\", i.LitEncoder() != nil)\n\t\tprintln(\"Offsets:\", i.Offsets())\n\t\tvar totalSize int\n\t\tfor _, b := range contents {\n\t\t\ttotalSize += len(b)\n\t\t}\n\n\t\tencWith := func(opts ...EOption) int {\n\t\t\tenc, err := NewWriter(nil, opts...)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\tdefer enc.Close()\n\t\t\tvar dst []byte\n\t\t\tvar totalSize int\n\t\t\tfor _, b := range contents {\n\t\t\t\tdst = enc.EncodeAll(b, dst[:0])\n\t\t\t\ttotalSize += len(dst)\n\t\t\t}\n\t\t\treturn totalSize\n\t\t}\n\t\tplain := encWith(WithEncoderLevel(o.Level))\n\t\twithDict := encWith(WithEncoderLevel(o.Level), WithEncoderDict(out.Bytes()))\n\t\tprintln(\"Input size:\", totalSize)\n\t\tprintln(\"Plain Compressed:\", plain)\n\t\tprintln(\"Dict Compressed:\", withDict)\n\t\tprintln(\"Saved:\", plain-withDict, (plain-withDict)/len(contents), \"bytes per input (rounded down)\")\n\t}\n\treturn out.Bytes(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/enc_base.go",
    "content": "package zstd\n\nimport (\n\t\"fmt\"\n\t\"math/bits\"\n\n\t\"github.com/klauspost/compress/zstd/internal/xxhash\"\n)\n\nconst (\n\tdictShardBits = 6\n)\n\ntype fastBase struct {\n\t// cur is the offset at the start of hist\n\tcur int32\n\t// maximum offset. Should be at least 2x block size.\n\tmaxMatchOff int32\n\tbufferReset int32\n\thist        []byte\n\tcrc         *xxhash.Digest\n\ttmp         [8]byte\n\tblk         *blockEnc\n\tlastDictID  uint32\n\tlowMem      bool\n}\n\n// CRC returns the underlying CRC writer.\nfunc (e *fastBase) CRC() *xxhash.Digest {\n\treturn e.crc\n}\n\n// AppendCRC will append the CRC to the destination slice and return it.\nfunc (e *fastBase) AppendCRC(dst []byte) []byte {\n\tcrc := e.crc.Sum(e.tmp[:0])\n\tdst = append(dst, crc[7], crc[6], crc[5], crc[4])\n\treturn dst\n}\n\n// WindowSize returns the window size of the encoder,\n// or a window size small enough to contain the input size, if > 0.\nfunc (e *fastBase) WindowSize(size int64) int32 {\n\tif size > 0 && size < int64(e.maxMatchOff) {\n\t\tb := int32(1) << uint(bits.Len(uint(size)))\n\t\t// Keep minimum window.\n\t\tif b < 1024 {\n\t\t\tb = 1024\n\t\t}\n\t\treturn b\n\t}\n\treturn e.maxMatchOff\n}\n\n// Block returns the current block.\nfunc (e *fastBase) Block() *blockEnc {\n\treturn e.blk\n}\n\nfunc (e *fastBase) addBlock(src []byte) int32 {\n\tif debugAsserts && e.cur > e.bufferReset {\n\t\tpanic(fmt.Sprintf(\"ecur (%d) > buffer reset (%d)\", e.cur, e.bufferReset))\n\t}\n\t// check if we have space already\n\tif len(e.hist)+len(src) > cap(e.hist) {\n\t\tif cap(e.hist) == 0 {\n\t\t\te.ensureHist(len(src))\n\t\t} else {\n\t\t\tif cap(e.hist) < int(e.maxMatchOff+maxCompressedBlockSize) {\n\t\t\t\tpanic(fmt.Errorf(\"unexpected buffer cap %d, want at least %d with window %d\", cap(e.hist), e.maxMatchOff+maxCompressedBlockSize, e.maxMatchOff))\n\t\t\t}\n\t\t\t// Move down\n\t\t\toffset := int32(len(e.hist)) - e.maxMatchOff\n\t\t\tcopy(e.hist[0:e.maxMatchOff], e.hist[offset:])\n\t\t\te.cur += offset\n\t\t\te.hist = e.hist[:e.maxMatchOff]\n\t\t}\n\t}\n\ts := int32(len(e.hist))\n\te.hist = append(e.hist, src...)\n\treturn s\n}\n\n// ensureHist will ensure that history can keep at least this many bytes.\nfunc (e *fastBase) ensureHist(n int) {\n\tif cap(e.hist) >= n {\n\t\treturn\n\t}\n\tl := e.maxMatchOff\n\tif (e.lowMem && e.maxMatchOff > maxCompressedBlockSize) || e.maxMatchOff <= maxCompressedBlockSize {\n\t\tl += maxCompressedBlockSize\n\t} else {\n\t\tl += e.maxMatchOff\n\t}\n\t// Make it at least 1MB.\n\tif l < 1<<20 && !e.lowMem {\n\t\tl = 1 << 20\n\t}\n\t// Make it at least the requested size.\n\tif l < int32(n) {\n\t\tl = int32(n)\n\t}\n\te.hist = make([]byte, 0, l)\n}\n\n// useBlock will replace the block with the provided one,\n// but transfer recent offsets from the previous.\nfunc (e *fastBase) UseBlock(enc *blockEnc) {\n\tenc.reset(e.blk)\n\te.blk = enc\n}\n\nfunc (e *fastBase) matchlen(s, t int32, src []byte) int32 {\n\tif debugAsserts {\n\t\tif s < 0 {\n\t\t\terr := fmt.Sprintf(\"s (%d) < 0\", s)\n\t\t\tpanic(err)\n\t\t}\n\t\tif t < 0 {\n\t\t\terr := fmt.Sprintf(\"s (%d) < 0\", s)\n\t\t\tpanic(err)\n\t\t}\n\t\tif s-t > e.maxMatchOff {\n\t\t\terr := fmt.Sprintf(\"s (%d) - t (%d) > maxMatchOff (%d)\", s, t, e.maxMatchOff)\n\t\t\tpanic(err)\n\t\t}\n\t\tif len(src)-int(s) > maxCompressedBlockSize {\n\t\t\tpanic(fmt.Sprintf(\"len(src)-s (%d) > maxCompressedBlockSize (%d)\", len(src)-int(s), maxCompressedBlockSize))\n\t\t}\n\t}\n\treturn int32(matchLen(src[s:], src[t:]))\n}\n\n// Reset the encoding table.\nfunc (e *fastBase) resetBase(d *dict, singleBlock bool) {\n\tif e.blk == nil {\n\t\te.blk = &blockEnc{lowMem: e.lowMem}\n\t\te.blk.init()\n\t} else {\n\t\te.blk.reset(nil)\n\t}\n\te.blk.initNewEncode()\n\tif e.crc == nil {\n\t\te.crc = xxhash.New()\n\t} else {\n\t\te.crc.Reset()\n\t}\n\te.blk.dictLitEnc = nil\n\tif d != nil {\n\t\tlow := e.lowMem\n\t\tif singleBlock {\n\t\t\te.lowMem = true\n\t\t}\n\t\te.ensureHist(d.ContentSize() + maxCompressedBlockSize)\n\t\te.lowMem = low\n\t}\n\n\t// We offset current position so everything will be out of reach.\n\t// If above reset line, history will be purged.\n\tif e.cur < e.bufferReset {\n\t\te.cur += e.maxMatchOff + int32(len(e.hist))\n\t}\n\te.hist = e.hist[:0]\n\tif d != nil {\n\t\t// Set offsets (currently not used)\n\t\tfor i, off := range d.offsets {\n\t\t\te.blk.recentOffsets[i] = uint32(off)\n\t\t\te.blk.prevRecentOffsets[i] = e.blk.recentOffsets[i]\n\t\t}\n\t\t// Transfer litenc.\n\t\te.blk.dictLitEnc = d.litEnc\n\t\te.hist = append(e.hist, d.content...)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/enc_best.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/klauspost/compress\"\n)\n\nconst (\n\tbestLongTableBits = 22                     // Bits used in the long match table\n\tbestLongTableSize = 1 << bestLongTableBits // Size of the table\n\tbestLongLen       = 8                      // Bytes used for table hash\n\n\t// Note: Increasing the short table bits or making the hash shorter\n\t// can actually lead to compression degradation since it will 'steal' more from the\n\t// long match table and match offsets are quite big.\n\t// This greatly depends on the type of input.\n\tbestShortTableBits = 18                      // Bits used in the short match table\n\tbestShortTableSize = 1 << bestShortTableBits // Size of the table\n\tbestShortLen       = 4                       // Bytes used for table hash\n\n)\n\ntype match struct {\n\toffset int32\n\ts      int32\n\tlength int32\n\trep    int32\n\test    int32\n}\n\nconst highScore = maxMatchLen * 8\n\n// estBits will estimate output bits from predefined tables.\nfunc (m *match) estBits(bitsPerByte int32) {\n\tmlc := mlCode(uint32(m.length - zstdMinMatch))\n\tvar ofc uint8\n\tif m.rep < 0 {\n\t\tofc = ofCode(uint32(m.s-m.offset) + 3)\n\t} else {\n\t\tofc = ofCode(uint32(m.rep) & 3)\n\t}\n\t// Cost, excluding\n\tofTT, mlTT := fsePredefEnc[tableOffsets].ct.symbolTT[ofc], fsePredefEnc[tableMatchLengths].ct.symbolTT[mlc]\n\n\t// Add cost of match encoding...\n\tm.est = int32(ofTT.outBits + mlTT.outBits)\n\tm.est += int32(ofTT.deltaNbBits>>16 + mlTT.deltaNbBits>>16)\n\t// Subtract savings compared to literal encoding...\n\tm.est -= (m.length * bitsPerByte) >> 10\n\tif m.est > 0 {\n\t\t// Unlikely gain..\n\t\tm.length = 0\n\t\tm.est = highScore\n\t}\n}\n\n// bestFastEncoder uses 2 tables, one for short matches (5 bytes) and one for long matches.\n// The long match table contains the previous entry with the same hash,\n// effectively making it a \"chain\" of length 2.\n// When we find a long match we choose between the two values and select the longest.\n// When we find a short match, after checking the long, we check if we can find a long at n+1\n// and that it is longer (lazy matching).\ntype bestFastEncoder struct {\n\tfastBase\n\ttable         [bestShortTableSize]prevEntry\n\tlongTable     [bestLongTableSize]prevEntry\n\tdictTable     []prevEntry\n\tdictLongTable []prevEntry\n}\n\n// Encode improves compression...\nfunc (e *bestFastEncoder) Encode(blk *blockEnc, src []byte) {\n\tconst (\n\t\t// Input margin is the number of bytes we read (8)\n\t\t// and the maximum we will read ahead (2)\n\t\tinputMargin            = 8 + 4\n\t\tminNonLiteralBlockSize = 16\n\t)\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= e.bufferReset-int32(len(e.hist)) {\n\t\tif len(e.hist) == 0 {\n\t\t\te.table = [bestShortTableSize]prevEntry{}\n\t\t\te.longTable = [bestLongTableSize]prevEntry{}\n\t\t\te.cur = e.maxMatchOff\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - e.maxMatchOff\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tv2 := e.table[i].prev\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t\tv2 = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t\tif v2 < minOff {\n\t\t\t\t\tv2 = 0\n\t\t\t\t} else {\n\t\t\t\t\tv2 = v2 - e.cur + e.maxMatchOff\n\t\t\t\t}\n\t\t\t}\n\t\t\te.table[i] = prevEntry{\n\t\t\t\toffset: v,\n\t\t\t\tprev:   v2,\n\t\t\t}\n\t\t}\n\t\tfor i := range e.longTable[:] {\n\t\t\tv := e.longTable[i].offset\n\t\t\tv2 := e.longTable[i].prev\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t\tv2 = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t\tif v2 < minOff {\n\t\t\t\t\tv2 = 0\n\t\t\t\t} else {\n\t\t\t\t\tv2 = v2 - e.cur + e.maxMatchOff\n\t\t\t\t}\n\t\t\t}\n\t\t\te.longTable[i] = prevEntry{\n\t\t\t\toffset: v,\n\t\t\t\tprev:   v2,\n\t\t\t}\n\t\t}\n\t\te.cur = e.maxMatchOff\n\t\tbreak\n\t}\n\n\t// Add block to history\n\ts := e.addBlock(src)\n\tblk.size = len(src)\n\n\t// Check RLE first\n\tif len(src) > zstdMinMatch {\n\t\tml := matchLen(src[1:], src)\n\t\tif ml == len(src)-1 {\n\t\t\tblk.literals = append(blk.literals, src[0])\n\t\t\tblk.sequences = append(blk.sequences, seq{litLen: 1, matchLen: uint32(len(src)-1) - zstdMinMatch, offset: 1 + 3})\n\t\t\treturn\n\t\t}\n\t}\n\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Use this to estimate literal cost.\n\t// Scaled by 10 bits.\n\tbitsPerByte := int32((compress.ShannonEntropyBits(src) * 1024) / len(src))\n\t// Huffman can never go < 1 bit/byte\n\tif bitsPerByte < 1024 {\n\t\tbitsPerByte = 1024\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tsLimit := int32(len(src)) - inputMargin\n\tconst kSearchStrength = 10\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\toffset3 := int32(blk.recentOffsets[2])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\t// We allow the encoder to optionally turn off repeat offsets across blocks\n\t\tcanRepeat := len(blk.sequences) > 2\n\n\t\tif debugAsserts && canRepeat && offset1 == 0 {\n\t\t\tpanic(\"offset0 was 0\")\n\t\t}\n\n\t\tconst goodEnough = 250\n\n\t\tcv := load6432(src, s)\n\n\t\tnextHashL := hashLen(cv, bestLongTableBits, bestLongLen)\n\t\tnextHashS := hashLen(cv, bestShortTableBits, bestShortLen)\n\t\tcandidateL := e.longTable[nextHashL]\n\t\tcandidateS := e.table[nextHashS]\n\n\t\t// Set m to a match at offset if it looks like that will improve compression.\n\t\timprove := func(m *match, offset int32, s int32, first uint32, rep int32) {\n\t\t\tdelta := s - offset\n\t\t\tif delta >= e.maxMatchOff || delta <= 0 || load3232(src, offset) != first {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Try to quick reject if we already have a long match.\n\t\t\tif m.length > 16 {\n\t\t\t\tleft := len(src) - int(m.s+m.length)\n\t\t\t\t// If we are too close to the end, keep as is.\n\t\t\t\tif left <= 0 {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcheckLen := m.length - (s - m.s) - 8\n\t\t\t\tif left > 2 && checkLen > 4 {\n\t\t\t\t\t// Check 4 bytes, 4 bytes from the end of the current match.\n\t\t\t\t\ta := load3232(src, offset+checkLen)\n\t\t\t\t\tb := load3232(src, s+checkLen)\n\t\t\t\t\tif a != b {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tl := 4 + e.matchlen(s+4, offset+4, src)\n\t\t\tif m.rep <= 0 {\n\t\t\t\t// Extend candidate match backwards as far as possible.\n\t\t\t\t// Do not extend repeats as we can assume they are optimal\n\t\t\t\t// and offsets change if s == nextEmit.\n\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\tif tMin < 0 {\n\t\t\t\t\ttMin = 0\n\t\t\t\t}\n\t\t\t\tfor offset > tMin && s > nextEmit && src[offset-1] == src[s-1] && l < maxMatchLength {\n\t\t\t\t\ts--\n\t\t\t\t\toffset--\n\t\t\t\t\tl++\n\t\t\t\t}\n\t\t\t}\n\t\t\tif debugAsserts {\n\t\t\t\tif offset >= s {\n\t\t\t\t\tpanic(fmt.Sprintf(\"offset: %d - s:%d - rep: %d - cur :%d - max: %d\", offset, s, rep, e.cur, e.maxMatchOff))\n\t\t\t\t}\n\t\t\t\tif !bytes.Equal(src[s:s+l], src[offset:offset+l]) {\n\t\t\t\t\tpanic(fmt.Sprintf(\"second match mismatch: %v != %v, first: %08x\", src[s:s+4], src[offset:offset+4], first))\n\t\t\t\t}\n\t\t\t}\n\t\t\tcand := match{offset: offset, s: s, length: l, rep: rep}\n\t\t\tcand.estBits(bitsPerByte)\n\t\t\tif m.est >= highScore || cand.est-m.est+(cand.s-m.s)*bitsPerByte>>10 < 0 {\n\t\t\t\t*m = cand\n\t\t\t}\n\t\t}\n\n\t\tbest := match{s: s, est: highScore}\n\t\timprove(&best, candidateL.offset-e.cur, s, uint32(cv), -1)\n\t\timprove(&best, candidateL.prev-e.cur, s, uint32(cv), -1)\n\t\timprove(&best, candidateS.offset-e.cur, s, uint32(cv), -1)\n\t\timprove(&best, candidateS.prev-e.cur, s, uint32(cv), -1)\n\n\t\tif canRepeat && best.length < goodEnough {\n\t\t\tif s == nextEmit {\n\t\t\t\t// Check repeats straight after a match.\n\t\t\t\timprove(&best, s-offset2, s, uint32(cv), 1|4)\n\t\t\t\timprove(&best, s-offset3, s, uint32(cv), 2|4)\n\t\t\t\tif offset1 > 1 {\n\t\t\t\t\timprove(&best, s-(offset1-1), s, uint32(cv), 3|4)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If either no match or a non-repeat match, check at + 1\n\t\t\tif best.rep <= 0 {\n\t\t\t\tcv32 := uint32(cv >> 8)\n\t\t\t\tspp := s + 1\n\t\t\t\timprove(&best, spp-offset1, spp, cv32, 1)\n\t\t\t\timprove(&best, spp-offset2, spp, cv32, 2)\n\t\t\t\timprove(&best, spp-offset3, spp, cv32, 3)\n\t\t\t\tif best.rep < 0 {\n\t\t\t\t\tcv32 = uint32(cv >> 24)\n\t\t\t\t\tspp += 2\n\t\t\t\t\timprove(&best, spp-offset1, spp, cv32, 1)\n\t\t\t\t\timprove(&best, spp-offset2, spp, cv32, 2)\n\t\t\t\t\timprove(&best, spp-offset3, spp, cv32, 3)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Load next and check...\n\t\te.longTable[nextHashL] = prevEntry{offset: s + e.cur, prev: candidateL.offset}\n\t\te.table[nextHashS] = prevEntry{offset: s + e.cur, prev: candidateS.offset}\n\t\tindex0 := s + 1\n\n\t\t// Look far ahead, unless we have a really long match already...\n\t\tif best.length < goodEnough {\n\t\t\t// No match found, move forward on input, no need to check forward...\n\t\t\tif best.length < 4 {\n\t\t\t\ts += 1 + (s-nextEmit)>>(kSearchStrength-1)\n\t\t\t\tif s >= sLimit {\n\t\t\t\t\tbreak encodeLoop\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tcandidateS = e.table[hashLen(cv>>8, bestShortTableBits, bestShortLen)]\n\t\t\tcv = load6432(src, s+1)\n\t\t\tcv2 := load6432(src, s+2)\n\t\t\tcandidateL = e.longTable[hashLen(cv, bestLongTableBits, bestLongLen)]\n\t\t\tcandidateL2 := e.longTable[hashLen(cv2, bestLongTableBits, bestLongLen)]\n\n\t\t\t// Short at s+1\n\t\t\timprove(&best, candidateS.offset-e.cur, s+1, uint32(cv), -1)\n\t\t\t// Long at s+1, s+2\n\t\t\timprove(&best, candidateL.offset-e.cur, s+1, uint32(cv), -1)\n\t\t\timprove(&best, candidateL.prev-e.cur, s+1, uint32(cv), -1)\n\t\t\timprove(&best, candidateL2.offset-e.cur, s+2, uint32(cv2), -1)\n\t\t\timprove(&best, candidateL2.prev-e.cur, s+2, uint32(cv2), -1)\n\t\t\tif false {\n\t\t\t\t// Short at s+3.\n\t\t\t\t// Too often worse...\n\t\t\t\timprove(&best, e.table[hashLen(cv2>>8, bestShortTableBits, bestShortLen)].offset-e.cur, s+3, uint32(cv2>>8), -1)\n\t\t\t}\n\n\t\t\t// Start check at a fixed offset to allow for a few mismatches.\n\t\t\t// For this compression level 2 yields the best results.\n\t\t\t// We cannot do this if we have already indexed this position.\n\t\t\tconst skipBeginning = 2\n\t\t\tif best.s > s-skipBeginning {\n\t\t\t\t// See if we can find a better match by checking where the current best ends.\n\t\t\t\t// Use that offset to see if we can find a better full match.\n\t\t\t\tif sAt := best.s + best.length; sAt < sLimit {\n\t\t\t\t\tnextHashL := hashLen(load6432(src, sAt), bestLongTableBits, bestLongLen)\n\t\t\t\t\tcandidateEnd := e.longTable[nextHashL]\n\n\t\t\t\t\tif off := candidateEnd.offset - e.cur - best.length + skipBeginning; off >= 0 {\n\t\t\t\t\t\timprove(&best, off, best.s+skipBeginning, load3232(src, best.s+skipBeginning), -1)\n\t\t\t\t\t\tif off := candidateEnd.prev - e.cur - best.length + skipBeginning; off >= 0 {\n\t\t\t\t\t\t\timprove(&best, off, best.s+skipBeginning, load3232(src, best.s+skipBeginning), -1)\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\tif debugAsserts {\n\t\t\tif best.offset >= best.s {\n\t\t\t\tpanic(fmt.Sprintf(\"best.offset > s: %d >= %d\", best.offset, best.s))\n\t\t\t}\n\t\t\tif best.s < nextEmit {\n\t\t\t\tpanic(fmt.Sprintf(\"s %d < nextEmit %d\", best.s, nextEmit))\n\t\t\t}\n\t\t\tif best.offset < s-e.maxMatchOff {\n\t\t\t\tpanic(fmt.Sprintf(\"best.offset < s-e.maxMatchOff: %d < %d\", best.offset, s-e.maxMatchOff))\n\t\t\t}\n\t\t\tif !bytes.Equal(src[best.s:best.s+best.length], src[best.offset:best.offset+best.length]) {\n\t\t\t\tpanic(fmt.Sprintf(\"match mismatch: %v != %v\", src[best.s:best.s+best.length], src[best.offset:best.offset+best.length]))\n\t\t\t}\n\t\t}\n\n\t\t// We have a match, we can store the forward value\n\t\ts = best.s\n\t\tif best.rep > 0 {\n\t\t\tvar seq seq\n\t\t\tseq.matchLen = uint32(best.length - zstdMinMatch)\n\t\t\taddLiterals(&seq, best.s)\n\n\t\t\t// Repeat. If bit 4 is set, this is a non-lit repeat.\n\t\t\tseq.offset = uint32(best.rep & 3)\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", best.s, \"off:\", best.s-best.offset)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Index old s + 1 -> s - 1\n\t\t\ts = best.s + best.length\n\t\t\tnextEmit = s\n\n\t\t\t// Index skipped...\n\t\t\tend := s\n\t\t\tif s > sLimit+4 {\n\t\t\t\tend = sLimit + 4\n\t\t\t}\n\t\t\toff := index0 + e.cur\n\t\t\tfor index0 < end {\n\t\t\t\tcv0 := load6432(src, index0)\n\t\t\t\th0 := hashLen(cv0, bestLongTableBits, bestLongLen)\n\t\t\t\th1 := hashLen(cv0, bestShortTableBits, bestShortLen)\n\t\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\t\te.table[h1] = prevEntry{offset: off, prev: e.table[h1].offset}\n\t\t\t\toff++\n\t\t\t\tindex0++\n\t\t\t}\n\n\t\t\tswitch best.rep {\n\t\t\tcase 2, 4 | 1:\n\t\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tcase 3, 4 | 2:\n\t\t\t\toffset1, offset2, offset3 = offset3, offset1, offset2\n\t\t\tcase 4 | 3:\n\t\t\t\toffset1, offset2, offset3 = offset1-1, offset1, offset2\n\t\t\t}\n\t\t\tif s >= sLimit {\n\t\t\t\tif debugEncoder {\n\t\t\t\t\tprintln(\"repeat ended\", s, best.length)\n\t\t\t\t}\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// A 4-byte match has been found. Update recent offsets.\n\t\t// We'll later see if more than 4 bytes.\n\t\tt := best.offset\n\t\toffset1, offset2, offset3 = s-t, offset1, offset2\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && int(offset1) > len(src) {\n\t\t\tpanic(\"invalid offset\")\n\t\t}\n\n\t\t// Write our sequence\n\t\tvar seq seq\n\t\tl := best.length\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\n\t\t// Index old s + 1 -> s - 1 or sLimit\n\t\tend := s\n\t\tif s > sLimit-4 {\n\t\t\tend = sLimit - 4\n\t\t}\n\n\t\toff := index0 + e.cur\n\t\tfor index0 < end {\n\t\t\tcv0 := load6432(src, index0)\n\t\t\th0 := hashLen(cv0, bestLongTableBits, bestLongLen)\n\t\t\th1 := hashLen(cv0, bestShortTableBits, bestShortLen)\n\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\te.table[h1] = prevEntry{offset: off, prev: e.table[h1].offset}\n\t\t\tindex0++\n\t\t\toff++\n\t\t}\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tblk.recentOffsets[0] = uint32(offset1)\n\tblk.recentOffsets[1] = uint32(offset2)\n\tblk.recentOffsets[2] = uint32(offset3)\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n}\n\n// EncodeNoHist will encode a block with no history and no following blocks.\n// Most notable difference is that src will not be copied for history and\n// we do not need to check for max match length.\nfunc (e *bestFastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {\n\te.ensureHist(len(src))\n\te.Encode(blk, src)\n}\n\n// Reset will reset and set a dictionary if not nil\nfunc (e *bestFastEncoder) Reset(d *dict, singleBlock bool) {\n\te.resetBase(d, singleBlock)\n\tif d == nil {\n\t\treturn\n\t}\n\t// Init or copy dict table\n\tif len(e.dictTable) != len(e.table) || d.id != e.lastDictID {\n\t\tif len(e.dictTable) != len(e.table) {\n\t\t\te.dictTable = make([]prevEntry, len(e.table))\n\t\t}\n\t\tend := int32(len(d.content)) - 8 + e.maxMatchOff\n\t\tfor i := e.maxMatchOff; i < end; i += 4 {\n\t\t\tconst hashLog = bestShortTableBits\n\n\t\t\tcv := load6432(d.content, i-e.maxMatchOff)\n\t\t\tnextHash := hashLen(cv, hashLog, bestShortLen)      // 0 -> 4\n\t\t\tnextHash1 := hashLen(cv>>8, hashLog, bestShortLen)  // 1 -> 5\n\t\t\tnextHash2 := hashLen(cv>>16, hashLog, bestShortLen) // 2 -> 6\n\t\t\tnextHash3 := hashLen(cv>>24, hashLog, bestShortLen) // 3 -> 7\n\t\t\te.dictTable[nextHash] = prevEntry{\n\t\t\t\tprev:   e.dictTable[nextHash].offset,\n\t\t\t\toffset: i,\n\t\t\t}\n\t\t\te.dictTable[nextHash1] = prevEntry{\n\t\t\t\tprev:   e.dictTable[nextHash1].offset,\n\t\t\t\toffset: i + 1,\n\t\t\t}\n\t\t\te.dictTable[nextHash2] = prevEntry{\n\t\t\t\tprev:   e.dictTable[nextHash2].offset,\n\t\t\t\toffset: i + 2,\n\t\t\t}\n\t\t\te.dictTable[nextHash3] = prevEntry{\n\t\t\t\tprev:   e.dictTable[nextHash3].offset,\n\t\t\t\toffset: i + 3,\n\t\t\t}\n\t\t}\n\t\te.lastDictID = d.id\n\t}\n\n\t// Init or copy dict table\n\tif len(e.dictLongTable) != len(e.longTable) || d.id != e.lastDictID {\n\t\tif len(e.dictLongTable) != len(e.longTable) {\n\t\t\te.dictLongTable = make([]prevEntry, len(e.longTable))\n\t\t}\n\t\tif len(d.content) >= 8 {\n\t\t\tcv := load6432(d.content, 0)\n\t\t\th := hashLen(cv, bestLongTableBits, bestLongLen)\n\t\t\te.dictLongTable[h] = prevEntry{\n\t\t\t\toffset: e.maxMatchOff,\n\t\t\t\tprev:   e.dictLongTable[h].offset,\n\t\t\t}\n\n\t\t\tend := int32(len(d.content)) - 8 + e.maxMatchOff\n\t\t\toff := 8 // First to read\n\t\t\tfor i := e.maxMatchOff + 1; i < end; i++ {\n\t\t\t\tcv = cv>>8 | (uint64(d.content[off]) << 56)\n\t\t\t\th := hashLen(cv, bestLongTableBits, bestLongLen)\n\t\t\t\te.dictLongTable[h] = prevEntry{\n\t\t\t\t\toffset: i,\n\t\t\t\t\tprev:   e.dictLongTable[h].offset,\n\t\t\t\t}\n\t\t\t\toff++\n\t\t\t}\n\t\t}\n\t\te.lastDictID = d.id\n\t}\n\t// Reset table to initial state\n\tcopy(e.longTable[:], e.dictLongTable)\n\n\te.cur = e.maxMatchOff\n\t// Reset table to initial state\n\tcopy(e.table[:], e.dictTable)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/enc_better.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport \"fmt\"\n\nconst (\n\tbetterLongTableBits = 19                       // Bits used in the long match table\n\tbetterLongTableSize = 1 << betterLongTableBits // Size of the table\n\tbetterLongLen       = 8                        // Bytes used for table hash\n\n\t// Note: Increasing the short table bits or making the hash shorter\n\t// can actually lead to compression degradation since it will 'steal' more from the\n\t// long match table and match offsets are quite big.\n\t// This greatly depends on the type of input.\n\tbetterShortTableBits = 13                        // Bits used in the short match table\n\tbetterShortTableSize = 1 << betterShortTableBits // Size of the table\n\tbetterShortLen       = 5                         // Bytes used for table hash\n\n\tbetterLongTableShardCnt  = 1 << (betterLongTableBits - dictShardBits)    // Number of shards in the table\n\tbetterLongTableShardSize = betterLongTableSize / betterLongTableShardCnt // Size of an individual shard\n\n\tbetterShortTableShardCnt  = 1 << (betterShortTableBits - dictShardBits)     // Number of shards in the table\n\tbetterShortTableShardSize = betterShortTableSize / betterShortTableShardCnt // Size of an individual shard\n)\n\ntype prevEntry struct {\n\toffset int32\n\tprev   int32\n}\n\n// betterFastEncoder uses 2 tables, one for short matches (5 bytes) and one for long matches.\n// The long match table contains the previous entry with the same hash,\n// effectively making it a \"chain\" of length 2.\n// When we find a long match we choose between the two values and select the longest.\n// When we find a short match, after checking the long, we check if we can find a long at n+1\n// and that it is longer (lazy matching).\ntype betterFastEncoder struct {\n\tfastBase\n\ttable     [betterShortTableSize]tableEntry\n\tlongTable [betterLongTableSize]prevEntry\n}\n\ntype betterFastEncoderDict struct {\n\tbetterFastEncoder\n\tdictTable            []tableEntry\n\tdictLongTable        []prevEntry\n\tshortTableShardDirty [betterShortTableShardCnt]bool\n\tlongTableShardDirty  [betterLongTableShardCnt]bool\n\tallDirty             bool\n}\n\n// Encode improves compression...\nfunc (e *betterFastEncoder) Encode(blk *blockEnc, src []byte) {\n\tconst (\n\t\t// Input margin is the number of bytes we read (8)\n\t\t// and the maximum we will read ahead (2)\n\t\tinputMargin            = 8 + 2\n\t\tminNonLiteralBlockSize = 16\n\t)\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= e.bufferReset-int32(len(e.hist)) {\n\t\tif len(e.hist) == 0 {\n\t\t\te.table = [betterShortTableSize]tableEntry{}\n\t\t\te.longTable = [betterLongTableSize]prevEntry{}\n\t\t\te.cur = e.maxMatchOff\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - e.maxMatchOff\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.longTable[:] {\n\t\t\tv := e.longTable[i].offset\n\t\t\tv2 := e.longTable[i].prev\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t\tv2 = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t\tif v2 < minOff {\n\t\t\t\t\tv2 = 0\n\t\t\t\t} else {\n\t\t\t\t\tv2 = v2 - e.cur + e.maxMatchOff\n\t\t\t\t}\n\t\t\t}\n\t\t\te.longTable[i] = prevEntry{\n\t\t\t\toffset: v,\n\t\t\t\tprev:   v2,\n\t\t\t}\n\t\t}\n\t\te.cur = e.maxMatchOff\n\t\tbreak\n\t}\n\t// Add block to history\n\ts := e.addBlock(src)\n\tblk.size = len(src)\n\n\t// Check RLE first\n\tif len(src) > zstdMinMatch {\n\t\tml := matchLen(src[1:], src)\n\t\tif ml == len(src)-1 {\n\t\t\tblk.literals = append(blk.literals, src[0])\n\t\t\tblk.sequences = append(blk.sequences, seq{litLen: 1, matchLen: uint32(len(src)-1) - zstdMinMatch, offset: 1 + 3})\n\t\t\treturn\n\t\t}\n\t}\n\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 1.\n\tconst stepSize = 1\n\n\tconst kSearchStrength = 9\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\tvar t int32\n\t\t// We allow the encoder to optionally turn off repeat offsets across blocks\n\t\tcanRepeat := len(blk.sequences) > 2\n\t\tvar matched, index0 int32\n\n\t\tfor {\n\t\t\tif debugAsserts && canRepeat && offset1 == 0 {\n\t\t\t\tpanic(\"offset0 was 0\")\n\t\t\t}\n\n\t\t\tnextHashL := hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\tnextHashS := hashLen(cv, betterShortTableBits, betterShortLen)\n\t\t\tcandidateL := e.longTable[nextHashL]\n\t\t\tcandidateS := e.table[nextHashS]\n\n\t\t\tconst repOff = 1\n\t\t\trepIndex := s - offset1 + repOff\n\t\t\toff := s + e.cur\n\t\t\te.longTable[nextHashL] = prevEntry{offset: off, prev: candidateL.offset}\n\t\t\te.table[nextHashS] = tableEntry{offset: off, val: uint32(cv)}\n\t\t\tindex0 = s + 1\n\n\t\t\tif canRepeat {\n\t\t\t\tif repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {\n\t\t\t\t\t// Consider history as well.\n\t\t\t\t\tvar seq seq\n\t\t\t\t\tlenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)\n\n\t\t\t\t\tseq.matchLen = uint32(lenght - zstdMinMatch)\n\n\t\t\t\t\t// We might be able to match backwards.\n\t\t\t\t\t// Extend as long as we can.\n\t\t\t\t\tstart := s + repOff\n\t\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t\t// and have to do special offset treatment.\n\t\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\t\tif tMin < 0 {\n\t\t\t\t\t\ttMin = 0\n\t\t\t\t\t}\n\t\t\t\t\tfor repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {\n\t\t\t\t\t\trepIndex--\n\t\t\t\t\t\tstart--\n\t\t\t\t\t\tseq.matchLen++\n\t\t\t\t\t}\n\t\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t\t// rep 0\n\t\t\t\t\tseq.offset = 1\n\t\t\t\t\tif debugSequences {\n\t\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t\t}\n\t\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t\t\t// Index match start+1 (long) -> s - 1\n\t\t\t\t\tindex0 := s + repOff\n\t\t\t\t\ts += lenght + repOff\n\n\t\t\t\t\tnextEmit = s\n\t\t\t\t\tif s >= sLimit {\n\t\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\t\tprintln(\"repeat ended\", s, lenght)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak encodeLoop\n\t\t\t\t\t}\n\t\t\t\t\t// Index skipped...\n\t\t\t\t\tfor index0 < s-1 {\n\t\t\t\t\t\tcv0 := load6432(src, index0)\n\t\t\t\t\t\tcv1 := cv0 >> 8\n\t\t\t\t\t\th0 := hashLen(cv0, betterLongTableBits, betterLongLen)\n\t\t\t\t\t\toff := index0 + e.cur\n\t\t\t\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\t\t\t\te.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)}\n\t\t\t\t\t\tindex0 += 2\n\t\t\t\t\t}\n\t\t\t\t\tcv = load6432(src, s)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst repOff2 = 1\n\n\t\t\t\t// We deviate from the reference encoder and also check offset 2.\n\t\t\t\t// Still slower and not much better, so disabled.\n\t\t\t\t// repIndex = s - offset2 + repOff2\n\t\t\t\tif false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) {\n\t\t\t\t\t// Consider history as well.\n\t\t\t\t\tvar seq seq\n\t\t\t\t\tlenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src)\n\n\t\t\t\t\tseq.matchLen = uint32(lenght - zstdMinMatch)\n\n\t\t\t\t\t// We might be able to match backwards.\n\t\t\t\t\t// Extend as long as we can.\n\t\t\t\t\tstart := s + repOff2\n\t\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t\t// and have to do special offset treatment.\n\t\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\t\tif tMin < 0 {\n\t\t\t\t\t\ttMin = 0\n\t\t\t\t\t}\n\t\t\t\t\tfor repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {\n\t\t\t\t\t\trepIndex--\n\t\t\t\t\t\tstart--\n\t\t\t\t\t\tseq.matchLen++\n\t\t\t\t\t}\n\t\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t\t// rep 2\n\t\t\t\t\tseq.offset = 2\n\t\t\t\t\tif debugSequences {\n\t\t\t\t\t\tprintln(\"repeat sequence 2\", seq, \"next s:\", s)\n\t\t\t\t\t}\n\t\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t\t\ts += lenght + repOff2\n\t\t\t\t\tnextEmit = s\n\t\t\t\t\tif s >= sLimit {\n\t\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\t\tprintln(\"repeat ended\", s, lenght)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak encodeLoop\n\t\t\t\t\t}\n\n\t\t\t\t\t// Index skipped...\n\t\t\t\t\tfor index0 < s-1 {\n\t\t\t\t\t\tcv0 := load6432(src, index0)\n\t\t\t\t\t\tcv1 := cv0 >> 8\n\t\t\t\t\t\th0 := hashLen(cv0, betterLongTableBits, betterLongLen)\n\t\t\t\t\t\toff := index0 + e.cur\n\t\t\t\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\t\t\t\te.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)}\n\t\t\t\t\t\tindex0 += 2\n\t\t\t\t\t}\n\t\t\t\t\tcv = load6432(src, s)\n\t\t\t\t\t// Swap offsets\n\t\t\t\t\toffset1, offset2 = offset2, offset1\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Find the offsets of our two matches.\n\t\t\tcoffsetL := candidateL.offset - e.cur\n\t\t\tcoffsetLP := candidateL.prev - e.cur\n\n\t\t\t// Check if we have a long match.\n\t\t\tif s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {\n\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\tmatched = e.matchlen(s+8, coffsetL+8, src) + 8\n\t\t\t\tt = coffsetL\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t}\n\n\t\t\t\tif s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {\n\t\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\t\tprevMatch := e.matchlen(s+8, coffsetLP+8, src) + 8\n\t\t\t\t\tif prevMatch > matched {\n\t\t\t\t\t\tmatched = prevMatch\n\t\t\t\t\t\tt = coffsetLP\n\t\t\t\t\t}\n\t\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t\t}\n\t\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t\t}\n\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we have a long match on prev.\n\t\t\tif s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {\n\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\tmatched = e.matchlen(s+8, coffsetLP+8, src) + 8\n\t\t\t\tt = coffsetLP\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcoffsetS := candidateS.offset - e.cur\n\n\t\t\t// Check if we have a short match.\n\t\t\tif s-coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {\n\t\t\t\t// found a regular match\n\t\t\t\tmatched = e.matchlen(s+4, coffsetS+4, src) + 4\n\n\t\t\t\t// See if we can find a long match at s+1\n\t\t\t\tconst checkAt = 1\n\t\t\t\tcv := load6432(src, s+checkAt)\n\t\t\t\tnextHashL = hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\t\tcandidateL = e.longTable[nextHashL]\n\t\t\t\tcoffsetL = candidateL.offset - e.cur\n\n\t\t\t\t// We can store it, since we have at least a 4 byte match.\n\t\t\t\te.longTable[nextHashL] = prevEntry{offset: s + checkAt + e.cur, prev: candidateL.offset}\n\t\t\t\tif s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {\n\t\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\t\tmatchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8\n\t\t\t\t\tif matchedNext > matched {\n\t\t\t\t\t\tt = coffsetL\n\t\t\t\t\t\ts += checkAt\n\t\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\t\tprintln(\"long match (after short)\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check prev long...\n\t\t\t\tcoffsetL = candidateL.prev - e.cur\n\t\t\t\tif s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {\n\t\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\t\tmatchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8\n\t\t\t\t\tif matchedNext > matched {\n\t\t\t\t\t\tt = coffsetL\n\t\t\t\t\t\ts += checkAt\n\t\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\t\tprintln(\"prev long match (after short)\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tt = coffsetS\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"short match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// No match found, move forward in input.\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\n\t\t// Try to find a better match by searching for a long match at the end of the current best match\n\t\tif s+matched < sLimit {\n\t\t\t// Allow some bytes at the beginning to mismatch.\n\t\t\t// Sweet spot is around 3 bytes, but depends on input.\n\t\t\t// The skipped bytes are tested in Extend backwards,\n\t\t\t// and still picked up as part of the match if they do.\n\t\t\tconst skipBeginning = 3\n\n\t\t\tnextHashL := hashLen(load6432(src, s+matched), betterLongTableBits, betterLongLen)\n\t\t\ts2 := s + skipBeginning\n\t\t\tcv := load3232(src, s2)\n\t\t\tcandidateL := e.longTable[nextHashL]\n\t\t\tcoffsetL := candidateL.offset - e.cur - matched + skipBeginning\n\t\t\tif coffsetL >= 0 && coffsetL < s2 && s2-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {\n\t\t\t\t// Found a long match, at least 4 bytes.\n\t\t\t\tmatchedNext := e.matchlen(s2+4, coffsetL+4, src) + 4\n\t\t\t\tif matchedNext > matched {\n\t\t\t\t\tt = coffsetL\n\t\t\t\t\ts = s2\n\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\tprintln(\"long match at end-of-match\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check prev long...\n\t\t\tif true {\n\t\t\t\tcoffsetL = candidateL.prev - e.cur - matched + skipBeginning\n\t\t\t\tif coffsetL >= 0 && coffsetL < s2 && s2-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {\n\t\t\t\t\t// Found a long match, at least 4 bytes.\n\t\t\t\t\tmatchedNext := e.matchlen(s2+4, coffsetL+4, src) + 4\n\t\t\t\t\tif matchedNext > matched {\n\t\t\t\t\t\tt = coffsetL\n\t\t\t\t\t\ts = s2\n\t\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\t\tprintln(\"prev long match at end-of-match\")\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\t// A match has been found. Update recent offsets.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && canRepeat && int(offset1) > len(src) {\n\t\t\tpanic(\"invalid offset\")\n\t\t}\n\n\t\t// Extend the n-byte match as long as possible.\n\t\tl := matched\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\n\t\t// Index match start+1 (long) -> s - 1\n\t\toff := index0 + e.cur\n\t\tfor index0 < s-1 {\n\t\t\tcv0 := load6432(src, index0)\n\t\t\tcv1 := cv0 >> 8\n\t\t\th0 := hashLen(cv0, betterLongTableBits, betterLongLen)\n\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\te.table[hashLen(cv1, betterShortTableBits, betterShortLen)] = tableEntry{offset: off + 1, val: uint32(cv1)}\n\t\t\tindex0 += 2\n\t\t\toff += 2\n\t\t}\n\n\t\tcv = load6432(src, s)\n\t\tif !canRepeat {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check offset 2\n\t\tfor {\n\t\t\to2 := s - offset2\n\t\t\tif load3232(src, o2) != uint32(cv) {\n\t\t\t\t// Do regular search\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHashL := hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\tnextHashS := hashLen(cv, betterShortTableBits, betterShortLen)\n\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\tl := 4 + e.matchlen(s+4, o2+4, src)\n\n\t\t\te.longTable[nextHashL] = prevEntry{offset: s + e.cur, prev: e.longTable[nextHashL].offset}\n\t\t\te.table[nextHashS] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\t// Finished\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tblk.recentOffsets[0] = uint32(offset1)\n\tblk.recentOffsets[1] = uint32(offset2)\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n}\n\n// EncodeNoHist will encode a block with no history and no following blocks.\n// Most notable difference is that src will not be copied for history and\n// we do not need to check for max match length.\nfunc (e *betterFastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {\n\te.ensureHist(len(src))\n\te.Encode(blk, src)\n}\n\n// Encode improves compression...\nfunc (e *betterFastEncoderDict) Encode(blk *blockEnc, src []byte) {\n\tconst (\n\t\t// Input margin is the number of bytes we read (8)\n\t\t// and the maximum we will read ahead (2)\n\t\tinputMargin            = 8 + 2\n\t\tminNonLiteralBlockSize = 16\n\t)\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= e.bufferReset-int32(len(e.hist)) {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\tfor i := range e.longTable[:] {\n\t\t\t\te.longTable[i] = prevEntry{}\n\t\t\t}\n\t\t\te.cur = e.maxMatchOff\n\t\t\te.allDirty = true\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - e.maxMatchOff\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.longTable[:] {\n\t\t\tv := e.longTable[i].offset\n\t\t\tv2 := e.longTable[i].prev\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t\tv2 = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t\tif v2 < minOff {\n\t\t\t\t\tv2 = 0\n\t\t\t\t} else {\n\t\t\t\t\tv2 = v2 - e.cur + e.maxMatchOff\n\t\t\t\t}\n\t\t\t}\n\t\t\te.longTable[i] = prevEntry{\n\t\t\t\toffset: v,\n\t\t\t\tprev:   v2,\n\t\t\t}\n\t\t}\n\t\te.allDirty = true\n\t\te.cur = e.maxMatchOff\n\t\tbreak\n\t}\n\n\ts := e.addBlock(src)\n\tblk.size = len(src)\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 1.\n\tconst stepSize = 1\n\n\tconst kSearchStrength = 9\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\tvar t int32\n\t\t// We allow the encoder to optionally turn off repeat offsets across blocks\n\t\tcanRepeat := len(blk.sequences) > 2\n\t\tvar matched, index0 int32\n\n\t\tfor {\n\t\t\tif debugAsserts && canRepeat && offset1 == 0 {\n\t\t\t\tpanic(\"offset0 was 0\")\n\t\t\t}\n\n\t\t\tnextHashL := hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\tnextHashS := hashLen(cv, betterShortTableBits, betterShortLen)\n\t\t\tcandidateL := e.longTable[nextHashL]\n\t\t\tcandidateS := e.table[nextHashS]\n\n\t\t\tconst repOff = 1\n\t\t\trepIndex := s - offset1 + repOff\n\t\t\toff := s + e.cur\n\t\t\te.longTable[nextHashL] = prevEntry{offset: off, prev: candidateL.offset}\n\t\t\te.markLongShardDirty(nextHashL)\n\t\t\te.table[nextHashS] = tableEntry{offset: off, val: uint32(cv)}\n\t\t\te.markShortShardDirty(nextHashS)\n\t\t\tindex0 = s + 1\n\n\t\t\tif canRepeat {\n\t\t\t\tif repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {\n\t\t\t\t\t// Consider history as well.\n\t\t\t\t\tvar seq seq\n\t\t\t\t\tlenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)\n\n\t\t\t\t\tseq.matchLen = uint32(lenght - zstdMinMatch)\n\n\t\t\t\t\t// We might be able to match backwards.\n\t\t\t\t\t// Extend as long as we can.\n\t\t\t\t\tstart := s + repOff\n\t\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t\t// and have to do special offset treatment.\n\t\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\t\tif tMin < 0 {\n\t\t\t\t\t\ttMin = 0\n\t\t\t\t\t}\n\t\t\t\t\tfor repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {\n\t\t\t\t\t\trepIndex--\n\t\t\t\t\t\tstart--\n\t\t\t\t\t\tseq.matchLen++\n\t\t\t\t\t}\n\t\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t\t// rep 0\n\t\t\t\t\tseq.offset = 1\n\t\t\t\t\tif debugSequences {\n\t\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t\t}\n\t\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t\t\t// Index match start+1 (long) -> s - 1\n\t\t\t\t\ts += lenght + repOff\n\n\t\t\t\t\tnextEmit = s\n\t\t\t\t\tif s >= sLimit {\n\t\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\t\tprintln(\"repeat ended\", s, lenght)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak encodeLoop\n\t\t\t\t\t}\n\t\t\t\t\t// Index skipped...\n\t\t\t\t\tfor index0 < s-1 {\n\t\t\t\t\t\tcv0 := load6432(src, index0)\n\t\t\t\t\t\tcv1 := cv0 >> 8\n\t\t\t\t\t\th0 := hashLen(cv0, betterLongTableBits, betterLongLen)\n\t\t\t\t\t\toff := index0 + e.cur\n\t\t\t\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\t\t\t\te.markLongShardDirty(h0)\n\t\t\t\t\t\th1 := hashLen(cv1, betterShortTableBits, betterShortLen)\n\t\t\t\t\t\te.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)}\n\t\t\t\t\t\te.markShortShardDirty(h1)\n\t\t\t\t\t\tindex0 += 2\n\t\t\t\t\t}\n\t\t\t\t\tcv = load6432(src, s)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst repOff2 = 1\n\n\t\t\t\t// We deviate from the reference encoder and also check offset 2.\n\t\t\t\t// Still slower and not much better, so disabled.\n\t\t\t\t// repIndex = s - offset2 + repOff2\n\t\t\t\tif false && repIndex >= 0 && load6432(src, repIndex) == load6432(src, s+repOff) {\n\t\t\t\t\t// Consider history as well.\n\t\t\t\t\tvar seq seq\n\t\t\t\t\tlenght := 8 + e.matchlen(s+8+repOff2, repIndex+8, src)\n\n\t\t\t\t\tseq.matchLen = uint32(lenght - zstdMinMatch)\n\n\t\t\t\t\t// We might be able to match backwards.\n\t\t\t\t\t// Extend as long as we can.\n\t\t\t\t\tstart := s + repOff2\n\t\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t\t// and have to do special offset treatment.\n\t\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\t\tif tMin < 0 {\n\t\t\t\t\t\ttMin = 0\n\t\t\t\t\t}\n\t\t\t\t\tfor repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {\n\t\t\t\t\t\trepIndex--\n\t\t\t\t\t\tstart--\n\t\t\t\t\t\tseq.matchLen++\n\t\t\t\t\t}\n\t\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t\t// rep 2\n\t\t\t\t\tseq.offset = 2\n\t\t\t\t\tif debugSequences {\n\t\t\t\t\t\tprintln(\"repeat sequence 2\", seq, \"next s:\", s)\n\t\t\t\t\t}\n\t\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t\t\ts += lenght + repOff2\n\t\t\t\t\tnextEmit = s\n\t\t\t\t\tif s >= sLimit {\n\t\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\t\tprintln(\"repeat ended\", s, lenght)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak encodeLoop\n\t\t\t\t\t}\n\n\t\t\t\t\t// Index skipped...\n\t\t\t\t\tfor index0 < s-1 {\n\t\t\t\t\t\tcv0 := load6432(src, index0)\n\t\t\t\t\t\tcv1 := cv0 >> 8\n\t\t\t\t\t\th0 := hashLen(cv0, betterLongTableBits, betterLongLen)\n\t\t\t\t\t\toff := index0 + e.cur\n\t\t\t\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\t\t\t\te.markLongShardDirty(h0)\n\t\t\t\t\t\th1 := hashLen(cv1, betterShortTableBits, betterShortLen)\n\t\t\t\t\t\te.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)}\n\t\t\t\t\t\te.markShortShardDirty(h1)\n\t\t\t\t\t\tindex0 += 2\n\t\t\t\t\t}\n\t\t\t\t\tcv = load6432(src, s)\n\t\t\t\t\t// Swap offsets\n\t\t\t\t\toffset1, offset2 = offset2, offset1\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Find the offsets of our two matches.\n\t\t\tcoffsetL := candidateL.offset - e.cur\n\t\t\tcoffsetLP := candidateL.prev - e.cur\n\n\t\t\t// Check if we have a long match.\n\t\t\tif s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {\n\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\tmatched = e.matchlen(s+8, coffsetL+8, src) + 8\n\t\t\t\tt = coffsetL\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t}\n\n\t\t\t\tif s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {\n\t\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\t\tprevMatch := e.matchlen(s+8, coffsetLP+8, src) + 8\n\t\t\t\t\tif prevMatch > matched {\n\t\t\t\t\t\tmatched = prevMatch\n\t\t\t\t\t\tt = coffsetLP\n\t\t\t\t\t}\n\t\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t\t}\n\t\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t\t}\n\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we have a long match on prev.\n\t\t\tif s-coffsetLP < e.maxMatchOff && cv == load6432(src, coffsetLP) {\n\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\tmatched = e.matchlen(s+8, coffsetLP+8, src) + 8\n\t\t\t\tt = coffsetLP\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcoffsetS := candidateS.offset - e.cur\n\n\t\t\t// Check if we have a short match.\n\t\t\tif s-coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {\n\t\t\t\t// found a regular match\n\t\t\t\tmatched = e.matchlen(s+4, coffsetS+4, src) + 4\n\n\t\t\t\t// See if we can find a long match at s+1\n\t\t\t\tconst checkAt = 1\n\t\t\t\tcv := load6432(src, s+checkAt)\n\t\t\t\tnextHashL = hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\t\tcandidateL = e.longTable[nextHashL]\n\t\t\t\tcoffsetL = candidateL.offset - e.cur\n\n\t\t\t\t// We can store it, since we have at least a 4 byte match.\n\t\t\t\te.longTable[nextHashL] = prevEntry{offset: s + checkAt + e.cur, prev: candidateL.offset}\n\t\t\t\te.markLongShardDirty(nextHashL)\n\t\t\t\tif s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {\n\t\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\t\tmatchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8\n\t\t\t\t\tif matchedNext > matched {\n\t\t\t\t\t\tt = coffsetL\n\t\t\t\t\t\ts += checkAt\n\t\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\t\tprintln(\"long match (after short)\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check prev long...\n\t\t\t\tcoffsetL = candidateL.prev - e.cur\n\t\t\t\tif s-coffsetL < e.maxMatchOff && cv == load6432(src, coffsetL) {\n\t\t\t\t\t// Found a long match, at least 8 bytes.\n\t\t\t\t\tmatchedNext := e.matchlen(s+8+checkAt, coffsetL+8, src) + 8\n\t\t\t\t\tif matchedNext > matched {\n\t\t\t\t\t\tt = coffsetL\n\t\t\t\t\t\ts += checkAt\n\t\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\t\tprintln(\"prev long match (after short)\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tt = coffsetS\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"short match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// No match found, move forward in input.\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t\t// Try to find a better match by searching for a long match at the end of the current best match\n\t\tif s+matched < sLimit {\n\t\t\tnextHashL := hashLen(load6432(src, s+matched), betterLongTableBits, betterLongLen)\n\t\t\tcv := load3232(src, s)\n\t\t\tcandidateL := e.longTable[nextHashL]\n\t\t\tcoffsetL := candidateL.offset - e.cur - matched\n\t\t\tif coffsetL >= 0 && coffsetL < s && s-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {\n\t\t\t\t// Found a long match, at least 4 bytes.\n\t\t\t\tmatchedNext := e.matchlen(s+4, coffsetL+4, src) + 4\n\t\t\t\tif matchedNext > matched {\n\t\t\t\t\tt = coffsetL\n\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\tprintln(\"long match at end-of-match\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check prev long...\n\t\t\tif true {\n\t\t\t\tcoffsetL = candidateL.prev - e.cur - matched\n\t\t\t\tif coffsetL >= 0 && coffsetL < s && s-coffsetL < e.maxMatchOff && cv == load3232(src, coffsetL) {\n\t\t\t\t\t// Found a long match, at least 4 bytes.\n\t\t\t\t\tmatchedNext := e.matchlen(s+4, coffsetL+4, src) + 4\n\t\t\t\t\tif matchedNext > matched {\n\t\t\t\t\t\tt = coffsetL\n\t\t\t\t\t\tmatched = matchedNext\n\t\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\t\tprintln(\"prev long match at end-of-match\")\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\t// A match has been found. Update recent offsets.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && canRepeat && int(offset1) > len(src) {\n\t\t\tpanic(\"invalid offset\")\n\t\t}\n\n\t\t// Extend the n-byte match as long as possible.\n\t\tl := matched\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\n\t\t// Index match start+1 (long) -> s - 1\n\t\toff := index0 + e.cur\n\t\tfor index0 < s-1 {\n\t\t\tcv0 := load6432(src, index0)\n\t\t\tcv1 := cv0 >> 8\n\t\t\th0 := hashLen(cv0, betterLongTableBits, betterLongLen)\n\t\t\te.longTable[h0] = prevEntry{offset: off, prev: e.longTable[h0].offset}\n\t\t\te.markLongShardDirty(h0)\n\t\t\th1 := hashLen(cv1, betterShortTableBits, betterShortLen)\n\t\t\te.table[h1] = tableEntry{offset: off + 1, val: uint32(cv1)}\n\t\t\te.markShortShardDirty(h1)\n\t\t\tindex0 += 2\n\t\t\toff += 2\n\t\t}\n\n\t\tcv = load6432(src, s)\n\t\tif !canRepeat {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check offset 2\n\t\tfor {\n\t\t\to2 := s - offset2\n\t\t\tif load3232(src, o2) != uint32(cv) {\n\t\t\t\t// Do regular search\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHashL := hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\tnextHashS := hashLen(cv, betterShortTableBits, betterShortLen)\n\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\tl := 4 + e.matchlen(s+4, o2+4, src)\n\n\t\t\te.longTable[nextHashL] = prevEntry{offset: s + e.cur, prev: e.longTable[nextHashL].offset}\n\t\t\te.markLongShardDirty(nextHashL)\n\t\t\te.table[nextHashS] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.markShortShardDirty(nextHashS)\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\t// Finished\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tblk.recentOffsets[0] = uint32(offset1)\n\tblk.recentOffsets[1] = uint32(offset2)\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n}\n\n// ResetDict will reset and set a dictionary if not nil\nfunc (e *betterFastEncoder) Reset(d *dict, singleBlock bool) {\n\te.resetBase(d, singleBlock)\n\tif d != nil {\n\t\tpanic(\"betterFastEncoder: Reset with dict\")\n\t}\n}\n\n// ResetDict will reset and set a dictionary if not nil\nfunc (e *betterFastEncoderDict) Reset(d *dict, singleBlock bool) {\n\te.resetBase(d, singleBlock)\n\tif d == nil {\n\t\treturn\n\t}\n\t// Init or copy dict table\n\tif len(e.dictTable) != len(e.table) || d.id != e.lastDictID {\n\t\tif len(e.dictTable) != len(e.table) {\n\t\t\te.dictTable = make([]tableEntry, len(e.table))\n\t\t}\n\t\tend := int32(len(d.content)) - 8 + e.maxMatchOff\n\t\tfor i := e.maxMatchOff; i < end; i += 4 {\n\t\t\tconst hashLog = betterShortTableBits\n\n\t\t\tcv := load6432(d.content, i-e.maxMatchOff)\n\t\t\tnextHash := hashLen(cv, hashLog, betterShortLen)      // 0 -> 4\n\t\t\tnextHash1 := hashLen(cv>>8, hashLog, betterShortLen)  // 1 -> 5\n\t\t\tnextHash2 := hashLen(cv>>16, hashLog, betterShortLen) // 2 -> 6\n\t\t\tnextHash3 := hashLen(cv>>24, hashLog, betterShortLen) // 3 -> 7\n\t\t\te.dictTable[nextHash] = tableEntry{\n\t\t\t\tval:    uint32(cv),\n\t\t\t\toffset: i,\n\t\t\t}\n\t\t\te.dictTable[nextHash1] = tableEntry{\n\t\t\t\tval:    uint32(cv >> 8),\n\t\t\t\toffset: i + 1,\n\t\t\t}\n\t\t\te.dictTable[nextHash2] = tableEntry{\n\t\t\t\tval:    uint32(cv >> 16),\n\t\t\t\toffset: i + 2,\n\t\t\t}\n\t\t\te.dictTable[nextHash3] = tableEntry{\n\t\t\t\tval:    uint32(cv >> 24),\n\t\t\t\toffset: i + 3,\n\t\t\t}\n\t\t}\n\t\te.lastDictID = d.id\n\t\te.allDirty = true\n\t}\n\n\t// Init or copy dict table\n\tif len(e.dictLongTable) != len(e.longTable) || d.id != e.lastDictID {\n\t\tif len(e.dictLongTable) != len(e.longTable) {\n\t\t\te.dictLongTable = make([]prevEntry, len(e.longTable))\n\t\t}\n\t\tif len(d.content) >= 8 {\n\t\t\tcv := load6432(d.content, 0)\n\t\t\th := hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\te.dictLongTable[h] = prevEntry{\n\t\t\t\toffset: e.maxMatchOff,\n\t\t\t\tprev:   e.dictLongTable[h].offset,\n\t\t\t}\n\n\t\t\tend := int32(len(d.content)) - 8 + e.maxMatchOff\n\t\t\toff := 8 // First to read\n\t\t\tfor i := e.maxMatchOff + 1; i < end; i++ {\n\t\t\t\tcv = cv>>8 | (uint64(d.content[off]) << 56)\n\t\t\t\th := hashLen(cv, betterLongTableBits, betterLongLen)\n\t\t\t\te.dictLongTable[h] = prevEntry{\n\t\t\t\t\toffset: i,\n\t\t\t\t\tprev:   e.dictLongTable[h].offset,\n\t\t\t\t}\n\t\t\t\toff++\n\t\t\t}\n\t\t}\n\t\te.lastDictID = d.id\n\t\te.allDirty = true\n\t}\n\n\t// Reset table to initial state\n\t{\n\t\tdirtyShardCnt := 0\n\t\tif !e.allDirty {\n\t\t\tfor i := range e.shortTableShardDirty {\n\t\t\t\tif e.shortTableShardDirty[i] {\n\t\t\t\t\tdirtyShardCnt++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst shardCnt = betterShortTableShardCnt\n\t\tconst shardSize = betterShortTableShardSize\n\t\tif e.allDirty || dirtyShardCnt > shardCnt*4/6 {\n\t\t\tcopy(e.table[:], e.dictTable)\n\t\t\tfor i := range e.shortTableShardDirty {\n\t\t\t\te.shortTableShardDirty[i] = false\n\t\t\t}\n\t\t} else {\n\t\t\tfor i := range e.shortTableShardDirty {\n\t\t\t\tif !e.shortTableShardDirty[i] {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tcopy(e.table[i*shardSize:(i+1)*shardSize], e.dictTable[i*shardSize:(i+1)*shardSize])\n\t\t\t\te.shortTableShardDirty[i] = false\n\t\t\t}\n\t\t}\n\t}\n\t{\n\t\tdirtyShardCnt := 0\n\t\tif !e.allDirty {\n\t\t\tfor i := range e.shortTableShardDirty {\n\t\t\t\tif e.shortTableShardDirty[i] {\n\t\t\t\t\tdirtyShardCnt++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst shardCnt = betterLongTableShardCnt\n\t\tconst shardSize = betterLongTableShardSize\n\t\tif e.allDirty || dirtyShardCnt > shardCnt*4/6 {\n\t\t\tcopy(e.longTable[:], e.dictLongTable)\n\t\t\tfor i := range e.longTableShardDirty {\n\t\t\t\te.longTableShardDirty[i] = false\n\t\t\t}\n\t\t} else {\n\t\t\tfor i := range e.longTableShardDirty {\n\t\t\t\tif !e.longTableShardDirty[i] {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tcopy(e.longTable[i*shardSize:(i+1)*shardSize], e.dictLongTable[i*shardSize:(i+1)*shardSize])\n\t\t\t\te.longTableShardDirty[i] = false\n\t\t\t}\n\t\t}\n\t}\n\te.cur = e.maxMatchOff\n\te.allDirty = false\n}\n\nfunc (e *betterFastEncoderDict) markLongShardDirty(entryNum uint32) {\n\te.longTableShardDirty[entryNum/betterLongTableShardSize] = true\n}\n\nfunc (e *betterFastEncoderDict) markShortShardDirty(entryNum uint32) {\n\te.shortTableShardDirty[entryNum/betterShortTableShardSize] = true\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/enc_dfast.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport \"fmt\"\n\nconst (\n\tdFastLongTableBits = 17                      // Bits used in the long match table\n\tdFastLongTableSize = 1 << dFastLongTableBits // Size of the table\n\tdFastLongTableMask = dFastLongTableSize - 1  // Mask for table indices. Redundant, but can eliminate bounds checks.\n\tdFastLongLen       = 8                       // Bytes used for table hash\n\n\tdLongTableShardCnt  = 1 << (dFastLongTableBits - dictShardBits) // Number of shards in the table\n\tdLongTableShardSize = dFastLongTableSize / tableShardCnt        // Size of an individual shard\n\n\tdFastShortTableBits = tableBits                // Bits used in the short match table\n\tdFastShortTableSize = 1 << dFastShortTableBits // Size of the table\n\tdFastShortTableMask = dFastShortTableSize - 1  // Mask for table indices. Redundant, but can eliminate bounds checks.\n\tdFastShortLen       = 5                        // Bytes used for table hash\n\n)\n\ntype doubleFastEncoder struct {\n\tfastEncoder\n\tlongTable [dFastLongTableSize]tableEntry\n}\n\ntype doubleFastEncoderDict struct {\n\tfastEncoderDict\n\tlongTable           [dFastLongTableSize]tableEntry\n\tdictLongTable       []tableEntry\n\tlongTableShardDirty [dLongTableShardCnt]bool\n}\n\n// Encode mimmics functionality in zstd_dfast.c\nfunc (e *doubleFastEncoder) Encode(blk *blockEnc, src []byte) {\n\tconst (\n\t\t// Input margin is the number of bytes we read (8)\n\t\t// and the maximum we will read ahead (2)\n\t\tinputMargin            = 8 + 2\n\t\tminNonLiteralBlockSize = 16\n\t)\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= e.bufferReset-int32(len(e.hist)) {\n\t\tif len(e.hist) == 0 {\n\t\t\te.table = [dFastShortTableSize]tableEntry{}\n\t\t\te.longTable = [dFastLongTableSize]tableEntry{}\n\t\t\te.cur = e.maxMatchOff\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - e.maxMatchOff\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.longTable[:] {\n\t\t\tv := e.longTable[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.longTable[i].offset = v\n\t\t}\n\t\te.cur = e.maxMatchOff\n\t\tbreak\n\t}\n\n\ts := e.addBlock(src)\n\tblk.size = len(src)\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 1.\n\tconst stepSize = 1\n\n\tconst kSearchStrength = 8\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\tvar t int32\n\t\t// We allow the encoder to optionally turn off repeat offsets across blocks\n\t\tcanRepeat := len(blk.sequences) > 2\n\n\t\tfor {\n\t\t\tif debugAsserts && canRepeat && offset1 == 0 {\n\t\t\t\tpanic(\"offset0 was 0\")\n\t\t\t}\n\n\t\t\tnextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)\n\t\t\tnextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)\n\t\t\tcandidateL := e.longTable[nextHashL]\n\t\t\tcandidateS := e.table[nextHashS]\n\n\t\t\tconst repOff = 1\n\t\t\trepIndex := s - offset1 + repOff\n\t\t\tentry := tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.longTable[nextHashL] = entry\n\t\t\te.table[nextHashS] = entry\n\n\t\t\tif canRepeat {\n\t\t\t\tif repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {\n\t\t\t\t\t// Consider history as well.\n\t\t\t\t\tvar seq seq\n\t\t\t\t\tlenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)\n\n\t\t\t\t\tseq.matchLen = uint32(lenght - zstdMinMatch)\n\n\t\t\t\t\t// We might be able to match backwards.\n\t\t\t\t\t// Extend as long as we can.\n\t\t\t\t\tstart := s + repOff\n\t\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t\t// and have to do special offset treatment.\n\t\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\t\tif tMin < 0 {\n\t\t\t\t\t\ttMin = 0\n\t\t\t\t\t}\n\t\t\t\t\tfor repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {\n\t\t\t\t\t\trepIndex--\n\t\t\t\t\t\tstart--\n\t\t\t\t\t\tseq.matchLen++\n\t\t\t\t\t}\n\t\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t\t// rep 0\n\t\t\t\t\tseq.offset = 1\n\t\t\t\t\tif debugSequences {\n\t\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t\t}\n\t\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\t\t\t\t\ts += lenght + repOff\n\t\t\t\t\tnextEmit = s\n\t\t\t\t\tif s >= sLimit {\n\t\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\t\tprintln(\"repeat ended\", s, lenght)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak encodeLoop\n\t\t\t\t\t}\n\t\t\t\t\tcv = load6432(src, s)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Find the offsets of our two matches.\n\t\t\tcoffsetL := s - (candidateL.offset - e.cur)\n\t\t\tcoffsetS := s - (candidateS.offset - e.cur)\n\n\t\t\t// Check if we have a long match.\n\t\t\tif coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {\n\t\t\t\t// Found a long match, likely at least 8 bytes.\n\t\t\t\t// Reference encoder checks all 8 bytes, we only check 4,\n\t\t\t\t// but the likelihood of both the first 4 bytes and the hash matching should be enough.\n\t\t\t\tt = candidateL.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we have a short match.\n\t\t\tif coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {\n\t\t\t\t// found a regular match\n\t\t\t\t// See if we can find a long match at s+1\n\t\t\t\tconst checkAt = 1\n\t\t\t\tcv := load6432(src, s+checkAt)\n\t\t\t\tnextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen)\n\t\t\t\tcandidateL = e.longTable[nextHashL]\n\t\t\t\tcoffsetL = s - (candidateL.offset - e.cur) + checkAt\n\n\t\t\t\t// We can store it, since we have at least a 4 byte match.\n\t\t\t\te.longTable[nextHashL] = tableEntry{offset: s + checkAt + e.cur, val: uint32(cv)}\n\t\t\t\tif coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {\n\t\t\t\t\t// Found a long match, likely at least 8 bytes.\n\t\t\t\t\t// Reference encoder checks all 8 bytes, we only check 4,\n\t\t\t\t\t// but the likelihood of both the first 4 bytes and the hash matching should be enough.\n\t\t\t\t\tt = candidateL.offset - e.cur\n\t\t\t\t\ts += checkAt\n\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\tprintln(\"long match (after short)\")\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tt = candidateS.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"short match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// No match found, move forward in input.\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\n\t\t// A 4-byte match has been found. Update recent offsets.\n\t\t// We'll later see if more than 4 bytes.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && canRepeat && int(offset1) > len(src) {\n\t\t\tpanic(\"invalid offset\")\n\t\t}\n\n\t\t// Extend the 4-byte match as long as possible.\n\t\tl := e.matchlen(s+4, t+4, src) + 4\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\n\t\t// Index match start+1 (long) and start+2 (short)\n\t\tindex0 := s - l + 1\n\t\t// Index match end-2 (long) and end-1 (short)\n\t\tindex1 := s - 2\n\n\t\tcv0 := load6432(src, index0)\n\t\tcv1 := load6432(src, index1)\n\t\tte0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)}\n\t\tte1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)}\n\t\te.longTable[hashLen(cv0, dFastLongTableBits, dFastLongLen)] = te0\n\t\te.longTable[hashLen(cv1, dFastLongTableBits, dFastLongLen)] = te1\n\t\tcv0 >>= 8\n\t\tcv1 >>= 8\n\t\tte0.offset++\n\t\tte1.offset++\n\t\tte0.val = uint32(cv0)\n\t\tte1.val = uint32(cv1)\n\t\te.table[hashLen(cv0, dFastShortTableBits, dFastShortLen)] = te0\n\t\te.table[hashLen(cv1, dFastShortTableBits, dFastShortLen)] = te1\n\n\t\tcv = load6432(src, s)\n\n\t\tif !canRepeat {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check offset 2\n\t\tfor {\n\t\t\to2 := s - offset2\n\t\t\tif load3232(src, o2) != uint32(cv) {\n\t\t\t\t// Do regular search\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)\n\t\t\tnextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)\n\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\tl := 4 + e.matchlen(s+4, o2+4, src)\n\n\t\t\tentry := tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.longTable[nextHashL] = entry\n\t\t\te.table[nextHashS] = entry\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\t// Finished\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tblk.recentOffsets[0] = uint32(offset1)\n\tblk.recentOffsets[1] = uint32(offset2)\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n}\n\n// EncodeNoHist will encode a block with no history and no following blocks.\n// Most notable difference is that src will not be copied for history and\n// we do not need to check for max match length.\nfunc (e *doubleFastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {\n\tconst (\n\t\t// Input margin is the number of bytes we read (8)\n\t\t// and the maximum we will read ahead (2)\n\t\tinputMargin            = 8 + 2\n\t\tminNonLiteralBlockSize = 16\n\t)\n\n\t// Protect against e.cur wraparound.\n\tif e.cur >= e.bufferReset {\n\t\tfor i := range e.table[:] {\n\t\t\te.table[i] = tableEntry{}\n\t\t}\n\t\tfor i := range e.longTable[:] {\n\t\t\te.longTable[i] = tableEntry{}\n\t\t}\n\t\te.cur = e.maxMatchOff\n\t}\n\n\ts := int32(0)\n\tblk.size = len(src)\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Override src\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 1.\n\tconst stepSize = 1\n\n\tconst kSearchStrength = 8\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\tvar t int32\n\t\tfor {\n\n\t\t\tnextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)\n\t\t\tnextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)\n\t\t\tcandidateL := e.longTable[nextHashL]\n\t\t\tcandidateS := e.table[nextHashS]\n\n\t\t\tconst repOff = 1\n\t\t\trepIndex := s - offset1 + repOff\n\t\t\tentry := tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.longTable[nextHashL] = entry\n\t\t\te.table[nextHashS] = entry\n\n\t\t\tif len(blk.sequences) > 2 {\n\t\t\t\tif load3232(src, repIndex) == uint32(cv>>(repOff*8)) {\n\t\t\t\t\t// Consider history as well.\n\t\t\t\t\tvar seq seq\n\t\t\t\t\t//length := 4 + e.matchlen(s+4+repOff, repIndex+4, src)\n\t\t\t\t\tlength := 4 + int32(matchLen(src[s+4+repOff:], src[repIndex+4:]))\n\n\t\t\t\t\tseq.matchLen = uint32(length - zstdMinMatch)\n\n\t\t\t\t\t// We might be able to match backwards.\n\t\t\t\t\t// Extend as long as we can.\n\t\t\t\t\tstart := s + repOff\n\t\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t\t// and have to do special offset treatment.\n\t\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\t\tif tMin < 0 {\n\t\t\t\t\t\ttMin = 0\n\t\t\t\t\t}\n\t\t\t\t\tfor repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] {\n\t\t\t\t\t\trepIndex--\n\t\t\t\t\t\tstart--\n\t\t\t\t\t\tseq.matchLen++\n\t\t\t\t\t}\n\t\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t\t// rep 0\n\t\t\t\t\tseq.offset = 1\n\t\t\t\t\tif debugSequences {\n\t\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t\t}\n\t\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\t\t\t\t\ts += length + repOff\n\t\t\t\t\tnextEmit = s\n\t\t\t\t\tif s >= sLimit {\n\t\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\t\tprintln(\"repeat ended\", s, length)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak encodeLoop\n\t\t\t\t\t}\n\t\t\t\t\tcv = load6432(src, s)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Find the offsets of our two matches.\n\t\t\tcoffsetL := s - (candidateL.offset - e.cur)\n\t\t\tcoffsetS := s - (candidateS.offset - e.cur)\n\n\t\t\t// Check if we have a long match.\n\t\t\tif coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {\n\t\t\t\t// Found a long match, likely at least 8 bytes.\n\t\t\t\t// Reference encoder checks all 8 bytes, we only check 4,\n\t\t\t\t// but the likelihood of both the first 4 bytes and the hash matching should be enough.\n\t\t\t\tt = candidateL.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d). cur: %d\", s, t, e.cur))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we have a short match.\n\t\t\tif coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {\n\t\t\t\t// found a regular match\n\t\t\t\t// See if we can find a long match at s+1\n\t\t\t\tconst checkAt = 1\n\t\t\t\tcv := load6432(src, s+checkAt)\n\t\t\t\tnextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen)\n\t\t\t\tcandidateL = e.longTable[nextHashL]\n\t\t\t\tcoffsetL = s - (candidateL.offset - e.cur) + checkAt\n\n\t\t\t\t// We can store it, since we have at least a 4 byte match.\n\t\t\t\te.longTable[nextHashL] = tableEntry{offset: s + checkAt + e.cur, val: uint32(cv)}\n\t\t\t\tif coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {\n\t\t\t\t\t// Found a long match, likely at least 8 bytes.\n\t\t\t\t\t// Reference encoder checks all 8 bytes, we only check 4,\n\t\t\t\t\t// but the likelihood of both the first 4 bytes and the hash matching should be enough.\n\t\t\t\t\tt = candidateL.offset - e.cur\n\t\t\t\t\ts += checkAt\n\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\tprintln(\"long match (after short)\")\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tt = candidateS.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"short match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// No match found, move forward in input.\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\n\t\t// A 4-byte match has been found. Update recent offsets.\n\t\t// We'll later see if more than 4 bytes.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\t// Extend the 4-byte match as long as possible.\n\t\t//l := e.matchlen(s+4, t+4, src) + 4\n\t\tl := int32(matchLen(src[s+4:], src[t+4:])) + 4\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\n\t\t// Index match start+1 (long) and start+2 (short)\n\t\tindex0 := s - l + 1\n\t\t// Index match end-2 (long) and end-1 (short)\n\t\tindex1 := s - 2\n\n\t\tcv0 := load6432(src, index0)\n\t\tcv1 := load6432(src, index1)\n\t\tte0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)}\n\t\tte1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)}\n\t\te.longTable[hashLen(cv0, dFastLongTableBits, dFastLongLen)] = te0\n\t\te.longTable[hashLen(cv1, dFastLongTableBits, dFastLongLen)] = te1\n\t\tcv0 >>= 8\n\t\tcv1 >>= 8\n\t\tte0.offset++\n\t\tte1.offset++\n\t\tte0.val = uint32(cv0)\n\t\tte1.val = uint32(cv1)\n\t\te.table[hashLen(cv0, dFastShortTableBits, dFastShortLen)] = te0\n\t\te.table[hashLen(cv1, dFastShortTableBits, dFastShortLen)] = te1\n\n\t\tcv = load6432(src, s)\n\n\t\tif len(blk.sequences) <= 2 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check offset 2\n\t\tfor {\n\t\t\to2 := s - offset2\n\t\t\tif load3232(src, o2) != uint32(cv) {\n\t\t\t\t// Do regular search\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHashS := hashLen(cv1>>8, dFastShortTableBits, dFastShortLen)\n\t\t\tnextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)\n\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\t//l := 4 + e.matchlen(s+4, o2+4, src)\n\t\t\tl := 4 + int32(matchLen(src[s+4:], src[o2+4:]))\n\n\t\t\tentry := tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.longTable[nextHashL] = entry\n\t\t\te.table[nextHashS] = entry\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\t// Finished\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n\n\t// We do not store history, so we must offset e.cur to avoid false matches for next user.\n\tif e.cur < e.bufferReset {\n\t\te.cur += int32(len(src))\n\t}\n}\n\n// Encode will encode the content, with a dictionary if initialized for it.\nfunc (e *doubleFastEncoderDict) Encode(blk *blockEnc, src []byte) {\n\tconst (\n\t\t// Input margin is the number of bytes we read (8)\n\t\t// and the maximum we will read ahead (2)\n\t\tinputMargin            = 8 + 2\n\t\tminNonLiteralBlockSize = 16\n\t)\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= e.bufferReset-int32(len(e.hist)) {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\tfor i := range e.longTable[:] {\n\t\t\t\te.longTable[i] = tableEntry{}\n\t\t\t}\n\t\t\te.markAllShardsDirty()\n\t\t\te.cur = e.maxMatchOff\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - e.maxMatchOff\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\tfor i := range e.longTable[:] {\n\t\t\tv := e.longTable[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.longTable[i].offset = v\n\t\t}\n\t\te.markAllShardsDirty()\n\t\te.cur = e.maxMatchOff\n\t\tbreak\n\t}\n\n\ts := e.addBlock(src)\n\tblk.size = len(src)\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 1.\n\tconst stepSize = 1\n\n\tconst kSearchStrength = 8\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\tvar t int32\n\t\t// We allow the encoder to optionally turn off repeat offsets across blocks\n\t\tcanRepeat := len(blk.sequences) > 2\n\n\t\tfor {\n\t\t\tif debugAsserts && canRepeat && offset1 == 0 {\n\t\t\t\tpanic(\"offset0 was 0\")\n\t\t\t}\n\n\t\t\tnextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)\n\t\t\tnextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)\n\t\t\tcandidateL := e.longTable[nextHashL]\n\t\t\tcandidateS := e.table[nextHashS]\n\n\t\t\tconst repOff = 1\n\t\t\trepIndex := s - offset1 + repOff\n\t\t\tentry := tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.longTable[nextHashL] = entry\n\t\t\te.markLongShardDirty(nextHashL)\n\t\t\te.table[nextHashS] = entry\n\t\t\te.markShardDirty(nextHashS)\n\n\t\t\tif canRepeat {\n\t\t\t\tif repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>(repOff*8)) {\n\t\t\t\t\t// Consider history as well.\n\t\t\t\t\tvar seq seq\n\t\t\t\t\tlenght := 4 + e.matchlen(s+4+repOff, repIndex+4, src)\n\n\t\t\t\t\tseq.matchLen = uint32(lenght - zstdMinMatch)\n\n\t\t\t\t\t// We might be able to match backwards.\n\t\t\t\t\t// Extend as long as we can.\n\t\t\t\t\tstart := s + repOff\n\t\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t\t// and have to do special offset treatment.\n\t\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\t\ttMin := s - e.maxMatchOff\n\t\t\t\t\tif tMin < 0 {\n\t\t\t\t\t\ttMin = 0\n\t\t\t\t\t}\n\t\t\t\t\tfor repIndex > tMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch-1 {\n\t\t\t\t\t\trepIndex--\n\t\t\t\t\t\tstart--\n\t\t\t\t\t\tseq.matchLen++\n\t\t\t\t\t}\n\t\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t\t// rep 0\n\t\t\t\t\tseq.offset = 1\n\t\t\t\t\tif debugSequences {\n\t\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t\t}\n\t\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\t\t\t\t\ts += lenght + repOff\n\t\t\t\t\tnextEmit = s\n\t\t\t\t\tif s >= sLimit {\n\t\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\t\tprintln(\"repeat ended\", s, lenght)\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak encodeLoop\n\t\t\t\t\t}\n\t\t\t\t\tcv = load6432(src, s)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Find the offsets of our two matches.\n\t\t\tcoffsetL := s - (candidateL.offset - e.cur)\n\t\t\tcoffsetS := s - (candidateS.offset - e.cur)\n\n\t\t\t// Check if we have a long match.\n\t\t\tif coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {\n\t\t\t\t// Found a long match, likely at least 8 bytes.\n\t\t\t\t// Reference encoder checks all 8 bytes, we only check 4,\n\t\t\t\t// but the likelihood of both the first 4 bytes and the hash matching should be enough.\n\t\t\t\tt = candidateL.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"long match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we have a short match.\n\t\t\tif coffsetS < e.maxMatchOff && uint32(cv) == candidateS.val {\n\t\t\t\t// found a regular match\n\t\t\t\t// See if we can find a long match at s+1\n\t\t\t\tconst checkAt = 1\n\t\t\t\tcv := load6432(src, s+checkAt)\n\t\t\t\tnextHashL = hashLen(cv, dFastLongTableBits, dFastLongLen)\n\t\t\t\tcandidateL = e.longTable[nextHashL]\n\t\t\t\tcoffsetL = s - (candidateL.offset - e.cur) + checkAt\n\n\t\t\t\t// We can store it, since we have at least a 4 byte match.\n\t\t\t\te.longTable[nextHashL] = tableEntry{offset: s + checkAt + e.cur, val: uint32(cv)}\n\t\t\t\te.markLongShardDirty(nextHashL)\n\t\t\t\tif coffsetL < e.maxMatchOff && uint32(cv) == candidateL.val {\n\t\t\t\t\t// Found a long match, likely at least 8 bytes.\n\t\t\t\t\t// Reference encoder checks all 8 bytes, we only check 4,\n\t\t\t\t\t// but the likelihood of both the first 4 bytes and the hash matching should be enough.\n\t\t\t\t\tt = candidateL.offset - e.cur\n\t\t\t\t\ts += checkAt\n\t\t\t\t\tif debugMatches {\n\t\t\t\t\t\tprintln(\"long match (after short)\")\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tt = candidateS.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tif debugMatches {\n\t\t\t\t\tprintln(\"short match\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// No match found, move forward in input.\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\n\t\t// A 4-byte match has been found. Update recent offsets.\n\t\t// We'll later see if more than 4 bytes.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && canRepeat && int(offset1) > len(src) {\n\t\t\tpanic(\"invalid offset\")\n\t\t}\n\n\t\t// Extend the 4-byte match as long as possible.\n\t\tl := e.matchlen(s+4, t+4, src) + 4\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\n\t\t// Index match start+1 (long) and start+2 (short)\n\t\tindex0 := s - l + 1\n\t\t// Index match end-2 (long) and end-1 (short)\n\t\tindex1 := s - 2\n\n\t\tcv0 := load6432(src, index0)\n\t\tcv1 := load6432(src, index1)\n\t\tte0 := tableEntry{offset: index0 + e.cur, val: uint32(cv0)}\n\t\tte1 := tableEntry{offset: index1 + e.cur, val: uint32(cv1)}\n\t\tlongHash1 := hashLen(cv0, dFastLongTableBits, dFastLongLen)\n\t\tlongHash2 := hashLen(cv1, dFastLongTableBits, dFastLongLen)\n\t\te.longTable[longHash1] = te0\n\t\te.longTable[longHash2] = te1\n\t\te.markLongShardDirty(longHash1)\n\t\te.markLongShardDirty(longHash2)\n\t\tcv0 >>= 8\n\t\tcv1 >>= 8\n\t\tte0.offset++\n\t\tte1.offset++\n\t\tte0.val = uint32(cv0)\n\t\tte1.val = uint32(cv1)\n\t\thashVal1 := hashLen(cv0, dFastShortTableBits, dFastShortLen)\n\t\thashVal2 := hashLen(cv1, dFastShortTableBits, dFastShortLen)\n\t\te.table[hashVal1] = te0\n\t\te.markShardDirty(hashVal1)\n\t\te.table[hashVal2] = te1\n\t\te.markShardDirty(hashVal2)\n\n\t\tcv = load6432(src, s)\n\n\t\tif !canRepeat {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check offset 2\n\t\tfor {\n\t\t\to2 := s - offset2\n\t\t\tif load3232(src, o2) != uint32(cv) {\n\t\t\t\t// Do regular search\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHashL := hashLen(cv, dFastLongTableBits, dFastLongLen)\n\t\t\tnextHashS := hashLen(cv, dFastShortTableBits, dFastShortLen)\n\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\tl := 4 + e.matchlen(s+4, o2+4, src)\n\n\t\t\tentry := tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.longTable[nextHashL] = entry\n\t\t\te.markLongShardDirty(nextHashL)\n\t\t\te.table[nextHashS] = entry\n\t\t\te.markShardDirty(nextHashS)\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\t// Finished\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tblk.recentOffsets[0] = uint32(offset1)\n\tblk.recentOffsets[1] = uint32(offset2)\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n\t// If we encoded more than 64K mark all dirty.\n\tif len(src) > 64<<10 {\n\t\te.markAllShardsDirty()\n\t}\n}\n\n// ResetDict will reset and set a dictionary if not nil\nfunc (e *doubleFastEncoder) Reset(d *dict, singleBlock bool) {\n\te.fastEncoder.Reset(d, singleBlock)\n\tif d != nil {\n\t\tpanic(\"doubleFastEncoder: Reset with dict not supported\")\n\t}\n}\n\n// ResetDict will reset and set a dictionary if not nil\nfunc (e *doubleFastEncoderDict) Reset(d *dict, singleBlock bool) {\n\tallDirty := e.allDirty\n\te.fastEncoderDict.Reset(d, singleBlock)\n\tif d == nil {\n\t\treturn\n\t}\n\n\t// Init or copy dict table\n\tif len(e.dictLongTable) != len(e.longTable) || d.id != e.lastDictID {\n\t\tif len(e.dictLongTable) != len(e.longTable) {\n\t\t\te.dictLongTable = make([]tableEntry, len(e.longTable))\n\t\t}\n\t\tif len(d.content) >= 8 {\n\t\t\tcv := load6432(d.content, 0)\n\t\t\te.dictLongTable[hashLen(cv, dFastLongTableBits, dFastLongLen)] = tableEntry{\n\t\t\t\tval:    uint32(cv),\n\t\t\t\toffset: e.maxMatchOff,\n\t\t\t}\n\t\t\tend := int32(len(d.content)) - 8 + e.maxMatchOff\n\t\t\tfor i := e.maxMatchOff + 1; i < end; i++ {\n\t\t\t\tcv = cv>>8 | (uint64(d.content[i-e.maxMatchOff+7]) << 56)\n\t\t\t\te.dictLongTable[hashLen(cv, dFastLongTableBits, dFastLongLen)] = tableEntry{\n\t\t\t\t\tval:    uint32(cv),\n\t\t\t\t\toffset: i,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\te.lastDictID = d.id\n\t\tallDirty = true\n\t}\n\t// Reset table to initial state\n\te.cur = e.maxMatchOff\n\n\tdirtyShardCnt := 0\n\tif !allDirty {\n\t\tfor i := range e.longTableShardDirty {\n\t\t\tif e.longTableShardDirty[i] {\n\t\t\t\tdirtyShardCnt++\n\t\t\t}\n\t\t}\n\t}\n\n\tif allDirty || dirtyShardCnt > dLongTableShardCnt/2 {\n\t\t//copy(e.longTable[:], e.dictLongTable)\n\t\te.longTable = *(*[dFastLongTableSize]tableEntry)(e.dictLongTable)\n\t\tfor i := range e.longTableShardDirty {\n\t\t\te.longTableShardDirty[i] = false\n\t\t}\n\t\treturn\n\t}\n\tfor i := range e.longTableShardDirty {\n\t\tif !e.longTableShardDirty[i] {\n\t\t\tcontinue\n\t\t}\n\n\t\t// copy(e.longTable[i*dLongTableShardSize:(i+1)*dLongTableShardSize], e.dictLongTable[i*dLongTableShardSize:(i+1)*dLongTableShardSize])\n\t\t*(*[dLongTableShardSize]tableEntry)(e.longTable[i*dLongTableShardSize:]) = *(*[dLongTableShardSize]tableEntry)(e.dictLongTable[i*dLongTableShardSize:])\n\n\t\te.longTableShardDirty[i] = false\n\t}\n}\n\nfunc (e *doubleFastEncoderDict) markLongShardDirty(entryNum uint32) {\n\te.longTableShardDirty[entryNum/dLongTableShardSize] = true\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/enc_fast.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"fmt\"\n)\n\nconst (\n\ttableBits        = 15                               // Bits used in the table\n\ttableSize        = 1 << tableBits                   // Size of the table\n\ttableShardCnt    = 1 << (tableBits - dictShardBits) // Number of shards in the table\n\ttableShardSize   = tableSize / tableShardCnt        // Size of an individual shard\n\ttableFastHashLen = 6\n\ttableMask        = tableSize - 1 // Mask for table indices. Redundant, but can eliminate bounds checks.\n\tmaxMatchLength   = 131074\n)\n\ntype tableEntry struct {\n\tval    uint32\n\toffset int32\n}\n\ntype fastEncoder struct {\n\tfastBase\n\ttable [tableSize]tableEntry\n}\n\ntype fastEncoderDict struct {\n\tfastEncoder\n\tdictTable       []tableEntry\n\ttableShardDirty [tableShardCnt]bool\n\tallDirty        bool\n}\n\n// Encode mimmics functionality in zstd_fast.c\nfunc (e *fastEncoder) Encode(blk *blockEnc, src []byte) {\n\tconst (\n\t\tinputMargin            = 8\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t)\n\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= e.bufferReset-int32(len(e.hist)) {\n\t\tif len(e.hist) == 0 {\n\t\t\tfor i := range e.table[:] {\n\t\t\t\te.table[i] = tableEntry{}\n\t\t\t}\n\t\t\te.cur = e.maxMatchOff\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - e.maxMatchOff\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\te.cur = e.maxMatchOff\n\t\tbreak\n\t}\n\n\ts := e.addBlock(src)\n\tblk.size = len(src)\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 2.\n\tconst stepSize = 2\n\n\t// TEMPLATE\n\tconst hashLog = tableBits\n\t// seems global, but would be nice to tweak.\n\tconst kSearchStrength = 6\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\t// t will contain the match offset when we find one.\n\t\t// When existing the search loop, we have already checked 4 bytes.\n\t\tvar t int32\n\n\t\t// We will not use repeat offsets across blocks.\n\t\t// By not using them for the first 3 matches\n\t\tcanRepeat := len(blk.sequences) > 2\n\n\t\tfor {\n\t\t\tif debugAsserts && canRepeat && offset1 == 0 {\n\t\t\t\tpanic(\"offset0 was 0\")\n\t\t\t}\n\n\t\t\tnextHash := hashLen(cv, hashLog, tableFastHashLen)\n\t\t\tnextHash2 := hashLen(cv>>8, hashLog, tableFastHashLen)\n\t\t\tcandidate := e.table[nextHash]\n\t\t\tcandidate2 := e.table[nextHash2]\n\t\t\trepIndex := s - offset1 + 2\n\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.table[nextHash2] = tableEntry{offset: s + e.cur + 1, val: uint32(cv >> 8)}\n\n\t\t\tif canRepeat && repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>16) {\n\t\t\t\t// Consider history as well.\n\t\t\t\tvar seq seq\n\t\t\t\tlength := 4 + e.matchlen(s+6, repIndex+4, src)\n\t\t\t\tseq.matchLen = uint32(length - zstdMinMatch)\n\n\t\t\t\t// We might be able to match backwards.\n\t\t\t\t// Extend as long as we can.\n\t\t\t\tstart := s + 2\n\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t// and have to do special offset treatment.\n\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\tsMin := s - e.maxMatchOff\n\t\t\t\tif sMin < 0 {\n\t\t\t\t\tsMin = 0\n\t\t\t\t}\n\t\t\t\tfor repIndex > sMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch {\n\t\t\t\t\trepIndex--\n\t\t\t\t\tstart--\n\t\t\t\t\tseq.matchLen++\n\t\t\t\t}\n\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t// rep 0\n\t\t\t\tseq.offset = 1\n\t\t\t\tif debugSequences {\n\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t}\n\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\t\t\t\ts += length + 2\n\t\t\t\tnextEmit = s\n\t\t\t\tif s >= sLimit {\n\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\tprintln(\"repeat ended\", s, length)\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak encodeLoop\n\t\t\t\t}\n\t\t\t\tcv = load6432(src, s)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcoffset0 := s - (candidate.offset - e.cur)\n\t\t\tcoffset1 := s - (candidate2.offset - e.cur) + 1\n\t\t\tif coffset0 < e.maxMatchOff && uint32(cv) == candidate.val {\n\t\t\t\t// found a regular match\n\t\t\t\tt = candidate.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif coffset1 < e.maxMatchOff && uint32(cv>>8) == candidate2.val {\n\t\t\t\t// found a regular match\n\t\t\t\tt = candidate2.offset - e.cur\n\t\t\t\ts++\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && canRepeat && int(offset1) > len(src) {\n\t\t\tpanic(\"invalid offset\")\n\t\t}\n\n\t\t// Extend the 4-byte match as long as possible.\n\t\tl := e.matchlen(s+4, t+4, src) + 4\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence.\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\t// Don't use repeat offsets\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\t\tcv = load6432(src, s)\n\n\t\t// Check offset 2\n\t\tif o2 := s - offset2; canRepeat && load3232(src, o2) == uint32(cv) {\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\tl := 4 + e.matchlen(s+4, o2+4, src)\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHash := hashLen(cv, hashLog, tableFastHashLen)\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\t// Prepare next loop.\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tblk.recentOffsets[0] = uint32(offset1)\n\tblk.recentOffsets[1] = uint32(offset2)\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n}\n\n// EncodeNoHist will encode a block with no history and no following blocks.\n// Most notable difference is that src will not be copied for history and\n// we do not need to check for max match length.\nfunc (e *fastEncoder) EncodeNoHist(blk *blockEnc, src []byte) {\n\tconst (\n\t\tinputMargin            = 8\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t)\n\tif debugEncoder {\n\t\tif len(src) > maxCompressedBlockSize {\n\t\t\tpanic(\"src too big\")\n\t\t}\n\t}\n\n\t// Protect against e.cur wraparound.\n\tif e.cur >= e.bufferReset {\n\t\tfor i := range e.table[:] {\n\t\t\te.table[i] = tableEntry{}\n\t\t}\n\t\te.cur = e.maxMatchOff\n\t}\n\n\ts := int32(0)\n\tblk.size = len(src)\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 2.\n\tconst stepSize = 2\n\n\t// TEMPLATE\n\tconst hashLog = tableBits\n\t// seems global, but would be nice to tweak.\n\tconst kSearchStrength = 6\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\t// t will contain the match offset when we find one.\n\t\t// When existing the search loop, we have already checked 4 bytes.\n\t\tvar t int32\n\n\t\t// We will not use repeat offsets across blocks.\n\t\t// By not using them for the first 3 matches\n\n\t\tfor {\n\t\t\tnextHash := hashLen(cv, hashLog, tableFastHashLen)\n\t\t\tnextHash2 := hashLen(cv>>8, hashLog, tableFastHashLen)\n\t\t\tcandidate := e.table[nextHash]\n\t\t\tcandidate2 := e.table[nextHash2]\n\t\t\trepIndex := s - offset1 + 2\n\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.table[nextHash2] = tableEntry{offset: s + e.cur + 1, val: uint32(cv >> 8)}\n\n\t\t\tif len(blk.sequences) > 2 && load3232(src, repIndex) == uint32(cv>>16) {\n\t\t\t\t// Consider history as well.\n\t\t\t\tvar seq seq\n\t\t\t\tlength := 4 + e.matchlen(s+6, repIndex+4, src)\n\n\t\t\t\tseq.matchLen = uint32(length - zstdMinMatch)\n\n\t\t\t\t// We might be able to match backwards.\n\t\t\t\t// Extend as long as we can.\n\t\t\t\tstart := s + 2\n\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t// and have to do special offset treatment.\n\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\tsMin := s - e.maxMatchOff\n\t\t\t\tif sMin < 0 {\n\t\t\t\t\tsMin = 0\n\t\t\t\t}\n\t\t\t\tfor repIndex > sMin && start > startLimit && src[repIndex-1] == src[start-1] {\n\t\t\t\t\trepIndex--\n\t\t\t\t\tstart--\n\t\t\t\t\tseq.matchLen++\n\t\t\t\t}\n\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t// rep 0\n\t\t\t\tseq.offset = 1\n\t\t\t\tif debugSequences {\n\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t}\n\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\t\t\t\ts += length + 2\n\t\t\t\tnextEmit = s\n\t\t\t\tif s >= sLimit {\n\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\tprintln(\"repeat ended\", s, length)\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak encodeLoop\n\t\t\t\t}\n\t\t\t\tcv = load6432(src, s)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcoffset0 := s - (candidate.offset - e.cur)\n\t\t\tcoffset1 := s - (candidate2.offset - e.cur) + 1\n\t\t\tif coffset0 < e.maxMatchOff && uint32(cv) == candidate.val {\n\t\t\t\t// found a regular match\n\t\t\t\tt = candidate.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(fmt.Sprintf(\"t (%d) < 0, candidate.offset: %d, e.cur: %d, coffset0: %d, e.maxMatchOff: %d\", t, candidate.offset, e.cur, coffset0, e.maxMatchOff))\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif coffset1 < e.maxMatchOff && uint32(cv>>8) == candidate2.val {\n\t\t\t\t// found a regular match\n\t\t\t\tt = candidate2.offset - e.cur\n\t\t\t\ts++\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && t < 0 {\n\t\t\tpanic(fmt.Sprintf(\"t (%d) < 0 \", t))\n\t\t}\n\t\t// Extend the 4-byte match as long as possible.\n\t\tl := e.matchlen(s+4, t+4, src) + 4\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence.\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\t// Don't use repeat offsets\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\t\tcv = load6432(src, s)\n\n\t\t// Check offset 2\n\t\tif o2 := s - offset2; len(blk.sequences) > 2 && load3232(src, o2) == uint32(cv) {\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\tl := 4 + e.matchlen(s+4, o2+4, src)\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHash := hashLen(cv, hashLog, tableFastHashLen)\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\t// Prepare next loop.\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n\t// We do not store history, so we must offset e.cur to avoid false matches for next user.\n\tif e.cur < e.bufferReset {\n\t\te.cur += int32(len(src))\n\t}\n}\n\n// Encode will encode the content, with a dictionary if initialized for it.\nfunc (e *fastEncoderDict) Encode(blk *blockEnc, src []byte) {\n\tconst (\n\t\tinputMargin            = 8\n\t\tminNonLiteralBlockSize = 1 + 1 + inputMargin\n\t)\n\tif e.allDirty || len(src) > 32<<10 {\n\t\te.fastEncoder.Encode(blk, src)\n\t\te.allDirty = true\n\t\treturn\n\t}\n\t// Protect against e.cur wraparound.\n\tfor e.cur >= e.bufferReset-int32(len(e.hist)) {\n\t\tif len(e.hist) == 0 {\n\t\t\te.table = [tableSize]tableEntry{}\n\t\t\te.cur = e.maxMatchOff\n\t\t\tbreak\n\t\t}\n\t\t// Shift down everything in the table that isn't already too far away.\n\t\tminOff := e.cur + int32(len(e.hist)) - e.maxMatchOff\n\t\tfor i := range e.table[:] {\n\t\t\tv := e.table[i].offset\n\t\t\tif v < minOff {\n\t\t\t\tv = 0\n\t\t\t} else {\n\t\t\t\tv = v - e.cur + e.maxMatchOff\n\t\t\t}\n\t\t\te.table[i].offset = v\n\t\t}\n\t\te.cur = e.maxMatchOff\n\t\tbreak\n\t}\n\n\ts := e.addBlock(src)\n\tblk.size = len(src)\n\tif len(src) < minNonLiteralBlockSize {\n\t\tblk.extraLits = len(src)\n\t\tblk.literals = blk.literals[:len(src)]\n\t\tcopy(blk.literals, src)\n\t\treturn\n\t}\n\n\t// Override src\n\tsrc = e.hist\n\tsLimit := int32(len(src)) - inputMargin\n\t// stepSize is the number of bytes to skip on every main loop iteration.\n\t// It should be >= 2.\n\tconst stepSize = 2\n\n\t// TEMPLATE\n\tconst hashLog = tableBits\n\t// seems global, but would be nice to tweak.\n\tconst kSearchStrength = 7\n\n\t// nextEmit is where in src the next emitLiteral should start from.\n\tnextEmit := s\n\tcv := load6432(src, s)\n\n\t// Relative offsets\n\toffset1 := int32(blk.recentOffsets[0])\n\toffset2 := int32(blk.recentOffsets[1])\n\n\taddLiterals := func(s *seq, until int32) {\n\t\tif until == nextEmit {\n\t\t\treturn\n\t\t}\n\t\tblk.literals = append(blk.literals, src[nextEmit:until]...)\n\t\ts.litLen = uint32(until - nextEmit)\n\t}\n\tif debugEncoder {\n\t\tprintln(\"recent offsets:\", blk.recentOffsets)\n\t}\n\nencodeLoop:\n\tfor {\n\t\t// t will contain the match offset when we find one.\n\t\t// When existing the search loop, we have already checked 4 bytes.\n\t\tvar t int32\n\n\t\t// We will not use repeat offsets across blocks.\n\t\t// By not using them for the first 3 matches\n\t\tcanRepeat := len(blk.sequences) > 2\n\n\t\tfor {\n\t\t\tif debugAsserts && canRepeat && offset1 == 0 {\n\t\t\t\tpanic(\"offset0 was 0\")\n\t\t\t}\n\n\t\t\tnextHash := hashLen(cv, hashLog, tableFastHashLen)\n\t\t\tnextHash2 := hashLen(cv>>8, hashLog, tableFastHashLen)\n\t\t\tcandidate := e.table[nextHash]\n\t\t\tcandidate2 := e.table[nextHash2]\n\t\t\trepIndex := s - offset1 + 2\n\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.markShardDirty(nextHash)\n\t\t\te.table[nextHash2] = tableEntry{offset: s + e.cur + 1, val: uint32(cv >> 8)}\n\t\t\te.markShardDirty(nextHash2)\n\n\t\t\tif canRepeat && repIndex >= 0 && load3232(src, repIndex) == uint32(cv>>16) {\n\t\t\t\t// Consider history as well.\n\t\t\t\tvar seq seq\n\t\t\t\tlength := 4 + e.matchlen(s+6, repIndex+4, src)\n\n\t\t\t\tseq.matchLen = uint32(length - zstdMinMatch)\n\n\t\t\t\t// We might be able to match backwards.\n\t\t\t\t// Extend as long as we can.\n\t\t\t\tstart := s + 2\n\t\t\t\t// We end the search early, so we don't risk 0 literals\n\t\t\t\t// and have to do special offset treatment.\n\t\t\t\tstartLimit := nextEmit + 1\n\n\t\t\t\tsMin := s - e.maxMatchOff\n\t\t\t\tif sMin < 0 {\n\t\t\t\t\tsMin = 0\n\t\t\t\t}\n\t\t\t\tfor repIndex > sMin && start > startLimit && src[repIndex-1] == src[start-1] && seq.matchLen < maxMatchLength-zstdMinMatch {\n\t\t\t\t\trepIndex--\n\t\t\t\t\tstart--\n\t\t\t\t\tseq.matchLen++\n\t\t\t\t}\n\t\t\t\taddLiterals(&seq, start)\n\n\t\t\t\t// rep 0\n\t\t\t\tseq.offset = 1\n\t\t\t\tif debugSequences {\n\t\t\t\t\tprintln(\"repeat sequence\", seq, \"next s:\", s)\n\t\t\t\t}\n\t\t\t\tblk.sequences = append(blk.sequences, seq)\n\t\t\t\ts += length + 2\n\t\t\t\tnextEmit = s\n\t\t\t\tif s >= sLimit {\n\t\t\t\t\tif debugEncoder {\n\t\t\t\t\t\tprintln(\"repeat ended\", s, length)\n\n\t\t\t\t\t}\n\t\t\t\t\tbreak encodeLoop\n\t\t\t\t}\n\t\t\t\tcv = load6432(src, s)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcoffset0 := s - (candidate.offset - e.cur)\n\t\t\tcoffset1 := s - (candidate2.offset - e.cur) + 1\n\t\t\tif coffset0 < e.maxMatchOff && uint32(cv) == candidate.val {\n\t\t\t\t// found a regular match\n\t\t\t\tt = candidate.offset - e.cur\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif coffset1 < e.maxMatchOff && uint32(cv>>8) == candidate2.val {\n\t\t\t\t// found a regular match\n\t\t\t\tt = candidate2.offset - e.cur\n\t\t\t\ts++\n\t\t\t\tif debugAsserts && s <= t {\n\t\t\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t\t\t}\n\t\t\t\tif debugAsserts && s-t > e.maxMatchOff {\n\t\t\t\t\tpanic(\"s - t >e.maxMatchOff\")\n\t\t\t\t}\n\t\t\t\tif debugAsserts && t < 0 {\n\t\t\t\t\tpanic(\"t<0\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\ts += stepSize + ((s - nextEmit) >> (kSearchStrength - 1))\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t\t// A 4-byte match has been found. We'll later see if more than 4 bytes.\n\t\toffset2 = offset1\n\t\toffset1 = s - t\n\n\t\tif debugAsserts && s <= t {\n\t\t\tpanic(fmt.Sprintf(\"s (%d) <= t (%d)\", s, t))\n\t\t}\n\n\t\tif debugAsserts && canRepeat && int(offset1) > len(src) {\n\t\t\tpanic(\"invalid offset\")\n\t\t}\n\n\t\t// Extend the 4-byte match as long as possible.\n\t\tl := e.matchlen(s+4, t+4, src) + 4\n\n\t\t// Extend backwards\n\t\ttMin := s - e.maxMatchOff\n\t\tif tMin < 0 {\n\t\t\ttMin = 0\n\t\t}\n\t\tfor t > tMin && s > nextEmit && src[t-1] == src[s-1] && l < maxMatchLength {\n\t\t\ts--\n\t\t\tt--\n\t\t\tl++\n\t\t}\n\n\t\t// Write our sequence.\n\t\tvar seq seq\n\t\tseq.litLen = uint32(s - nextEmit)\n\t\tseq.matchLen = uint32(l - zstdMinMatch)\n\t\tif seq.litLen > 0 {\n\t\t\tblk.literals = append(blk.literals, src[nextEmit:s]...)\n\t\t}\n\t\t// Don't use repeat offsets\n\t\tseq.offset = uint32(s-t) + 3\n\t\ts += l\n\t\tif debugSequences {\n\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t}\n\t\tblk.sequences = append(blk.sequences, seq)\n\t\tnextEmit = s\n\t\tif s >= sLimit {\n\t\t\tbreak encodeLoop\n\t\t}\n\t\tcv = load6432(src, s)\n\n\t\t// Check offset 2\n\t\tif o2 := s - offset2; canRepeat && load3232(src, o2) == uint32(cv) {\n\t\t\t// We have at least 4 byte match.\n\t\t\t// No need to check backwards. We come straight from a match\n\t\t\tl := 4 + e.matchlen(s+4, o2+4, src)\n\n\t\t\t// Store this, since we have it.\n\t\t\tnextHash := hashLen(cv, hashLog, tableFastHashLen)\n\t\t\te.table[nextHash] = tableEntry{offset: s + e.cur, val: uint32(cv)}\n\t\t\te.markShardDirty(nextHash)\n\t\t\tseq.matchLen = uint32(l) - zstdMinMatch\n\t\t\tseq.litLen = 0\n\t\t\t// Since litlen is always 0, this is offset 1.\n\t\t\tseq.offset = 1\n\t\t\ts += l\n\t\t\tnextEmit = s\n\t\t\tif debugSequences {\n\t\t\t\tprintln(\"sequence\", seq, \"next s:\", s)\n\t\t\t}\n\t\t\tblk.sequences = append(blk.sequences, seq)\n\n\t\t\t// Swap offset 1 and 2.\n\t\t\toffset1, offset2 = offset2, offset1\n\t\t\tif s >= sLimit {\n\t\t\t\tbreak encodeLoop\n\t\t\t}\n\t\t\t// Prepare next loop.\n\t\t\tcv = load6432(src, s)\n\t\t}\n\t}\n\n\tif int(nextEmit) < len(src) {\n\t\tblk.literals = append(blk.literals, src[nextEmit:]...)\n\t\tblk.extraLits = len(src) - int(nextEmit)\n\t}\n\tblk.recentOffsets[0] = uint32(offset1)\n\tblk.recentOffsets[1] = uint32(offset2)\n\tif debugEncoder {\n\t\tprintln(\"returning, recent offsets:\", blk.recentOffsets, \"extra literals:\", blk.extraLits)\n\t}\n}\n\n// ResetDict will reset and set a dictionary if not nil\nfunc (e *fastEncoder) Reset(d *dict, singleBlock bool) {\n\te.resetBase(d, singleBlock)\n\tif d != nil {\n\t\tpanic(\"fastEncoder: Reset with dict\")\n\t}\n}\n\n// ResetDict will reset and set a dictionary if not nil\nfunc (e *fastEncoderDict) Reset(d *dict, singleBlock bool) {\n\te.resetBase(d, singleBlock)\n\tif d == nil {\n\t\treturn\n\t}\n\n\t// Init or copy dict table\n\tif len(e.dictTable) != len(e.table) || d.id != e.lastDictID {\n\t\tif len(e.dictTable) != len(e.table) {\n\t\t\te.dictTable = make([]tableEntry, len(e.table))\n\t\t}\n\t\tif true {\n\t\t\tend := e.maxMatchOff + int32(len(d.content)) - 8\n\t\t\tfor i := e.maxMatchOff; i < end; i += 2 {\n\t\t\t\tconst hashLog = tableBits\n\n\t\t\t\tcv := load6432(d.content, i-e.maxMatchOff)\n\t\t\t\tnextHash := hashLen(cv, hashLog, tableFastHashLen)     // 0 -> 6\n\t\t\t\tnextHash1 := hashLen(cv>>8, hashLog, tableFastHashLen) // 1 -> 7\n\t\t\t\te.dictTable[nextHash] = tableEntry{\n\t\t\t\t\tval:    uint32(cv),\n\t\t\t\t\toffset: i,\n\t\t\t\t}\n\t\t\t\te.dictTable[nextHash1] = tableEntry{\n\t\t\t\t\tval:    uint32(cv >> 8),\n\t\t\t\t\toffset: i + 1,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\te.lastDictID = d.id\n\t\te.allDirty = true\n\t}\n\n\te.cur = e.maxMatchOff\n\tdirtyShardCnt := 0\n\tif !e.allDirty {\n\t\tfor i := range e.tableShardDirty {\n\t\t\tif e.tableShardDirty[i] {\n\t\t\t\tdirtyShardCnt++\n\t\t\t}\n\t\t}\n\t}\n\n\tconst shardCnt = tableShardCnt\n\tconst shardSize = tableShardSize\n\tif e.allDirty || dirtyShardCnt > shardCnt*4/6 {\n\t\t//copy(e.table[:], e.dictTable)\n\t\te.table = *(*[tableSize]tableEntry)(e.dictTable)\n\t\tfor i := range e.tableShardDirty {\n\t\t\te.tableShardDirty[i] = false\n\t\t}\n\t\te.allDirty = false\n\t\treturn\n\t}\n\tfor i := range e.tableShardDirty {\n\t\tif !e.tableShardDirty[i] {\n\t\t\tcontinue\n\t\t}\n\n\t\t//copy(e.table[i*shardSize:(i+1)*shardSize], e.dictTable[i*shardSize:(i+1)*shardSize])\n\t\t*(*[shardSize]tableEntry)(e.table[i*shardSize:]) = *(*[shardSize]tableEntry)(e.dictTable[i*shardSize:])\n\t\te.tableShardDirty[i] = false\n\t}\n\te.allDirty = false\n}\n\nfunc (e *fastEncoderDict) markAllShardsDirty() {\n\te.allDirty = true\n}\n\nfunc (e *fastEncoderDict) markShardDirty(entryNum uint32) {\n\te.tableShardDirty[entryNum/tableShardSize] = true\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/encoder.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\trdebug \"runtime/debug\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/zstd/internal/xxhash\"\n)\n\n// Encoder provides encoding to Zstandard.\n// An Encoder can be used for either compressing a stream via the\n// io.WriteCloser interface supported by the Encoder or as multiple independent\n// tasks via the EncodeAll function.\n// Smaller encodes are encouraged to use the EncodeAll function.\n// Use NewWriter to create a new instance.\ntype Encoder struct {\n\to        encoderOptions\n\tencoders chan encoder\n\tstate    encoderState\n\tinit     sync.Once\n}\n\ntype encoder interface {\n\tEncode(blk *blockEnc, src []byte)\n\tEncodeNoHist(blk *blockEnc, src []byte)\n\tBlock() *blockEnc\n\tCRC() *xxhash.Digest\n\tAppendCRC([]byte) []byte\n\tWindowSize(size int64) int32\n\tUseBlock(*blockEnc)\n\tReset(d *dict, singleBlock bool)\n}\n\ntype encoderState struct {\n\tw                io.Writer\n\tfilling          []byte\n\tcurrent          []byte\n\tprevious         []byte\n\tencoder          encoder\n\twriting          *blockEnc\n\terr              error\n\twriteErr         error\n\tnWritten         int64\n\tnInput           int64\n\tframeContentSize int64\n\theaderWritten    bool\n\teofWritten       bool\n\tfullFrameWritten bool\n\n\t// This waitgroup indicates an encode is running.\n\twg sync.WaitGroup\n\t// This waitgroup indicates we have a block encoding/writing.\n\twWg sync.WaitGroup\n}\n\n// NewWriter will create a new Zstandard encoder.\n// If the encoder will be used for encoding blocks a nil writer can be used.\nfunc NewWriter(w io.Writer, opts ...EOption) (*Encoder, error) {\n\tinitPredefined()\n\tvar e Encoder\n\te.o.setDefault()\n\tfor _, o := range opts {\n\t\terr := o(&e.o)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif w != nil {\n\t\te.Reset(w)\n\t}\n\treturn &e, nil\n}\n\nfunc (e *Encoder) initialize() {\n\tif e.o.concurrent == 0 {\n\t\te.o.setDefault()\n\t}\n\te.encoders = make(chan encoder, e.o.concurrent)\n\tfor i := 0; i < e.o.concurrent; i++ {\n\t\tenc := e.o.encoder()\n\t\te.encoders <- enc\n\t}\n}\n\n// Reset will re-initialize the writer and new writes will encode to the supplied writer\n// as a new, independent stream.\nfunc (e *Encoder) Reset(w io.Writer) {\n\ts := &e.state\n\ts.wg.Wait()\n\ts.wWg.Wait()\n\tif cap(s.filling) == 0 {\n\t\ts.filling = make([]byte, 0, e.o.blockSize)\n\t}\n\tif e.o.concurrent > 1 {\n\t\tif cap(s.current) == 0 {\n\t\t\ts.current = make([]byte, 0, e.o.blockSize)\n\t\t}\n\t\tif cap(s.previous) == 0 {\n\t\t\ts.previous = make([]byte, 0, e.o.blockSize)\n\t\t}\n\t\ts.current = s.current[:0]\n\t\ts.previous = s.previous[:0]\n\t\tif s.writing == nil {\n\t\t\ts.writing = &blockEnc{lowMem: e.o.lowMem}\n\t\t\ts.writing.init()\n\t\t}\n\t\ts.writing.initNewEncode()\n\t}\n\tif s.encoder == nil {\n\t\ts.encoder = e.o.encoder()\n\t}\n\ts.filling = s.filling[:0]\n\ts.encoder.Reset(e.o.dict, false)\n\ts.headerWritten = false\n\ts.eofWritten = false\n\ts.fullFrameWritten = false\n\ts.w = w\n\ts.err = nil\n\ts.nWritten = 0\n\ts.nInput = 0\n\ts.writeErr = nil\n\ts.frameContentSize = 0\n}\n\n// ResetContentSize will reset and set a content size for the next stream.\n// If the bytes written does not match the size given an error will be returned\n// when calling Close().\n// This is removed when Reset is called.\n// Sizes <= 0 results in no content size set.\nfunc (e *Encoder) ResetContentSize(w io.Writer, size int64) {\n\te.Reset(w)\n\tif size >= 0 {\n\t\te.state.frameContentSize = size\n\t}\n}\n\n// Write data to the encoder.\n// Input data will be buffered and as the buffer fills up\n// content will be compressed and written to the output.\n// When done writing, use Close to flush the remaining output\n// and write CRC if requested.\nfunc (e *Encoder) Write(p []byte) (n int, err error) {\n\ts := &e.state\n\tfor len(p) > 0 {\n\t\tif len(p)+len(s.filling) < e.o.blockSize {\n\t\t\tif e.o.crc {\n\t\t\t\t_, _ = s.encoder.CRC().Write(p)\n\t\t\t}\n\t\t\ts.filling = append(s.filling, p...)\n\t\t\treturn n + len(p), nil\n\t\t}\n\t\tadd := p\n\t\tif len(p)+len(s.filling) > e.o.blockSize {\n\t\t\tadd = add[:e.o.blockSize-len(s.filling)]\n\t\t}\n\t\tif e.o.crc {\n\t\t\t_, _ = s.encoder.CRC().Write(add)\n\t\t}\n\t\ts.filling = append(s.filling, add...)\n\t\tp = p[len(add):]\n\t\tn += len(add)\n\t\tif len(s.filling) < e.o.blockSize {\n\t\t\treturn n, nil\n\t\t}\n\t\terr := e.nextBlock(false)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tif debugAsserts && len(s.filling) > 0 {\n\t\t\tpanic(len(s.filling))\n\t\t}\n\t}\n\treturn n, nil\n}\n\n// nextBlock will synchronize and start compressing input in e.state.filling.\n// If an error has occurred during encoding it will be returned.\nfunc (e *Encoder) nextBlock(final bool) error {\n\ts := &e.state\n\t// Wait for current block.\n\ts.wg.Wait()\n\tif s.err != nil {\n\t\treturn s.err\n\t}\n\tif len(s.filling) > e.o.blockSize {\n\t\treturn fmt.Errorf(\"block > maxStoreBlockSize\")\n\t}\n\tif !s.headerWritten {\n\t\t// If we have a single block encode, do a sync compression.\n\t\tif final && len(s.filling) == 0 && !e.o.fullZero {\n\t\t\ts.headerWritten = true\n\t\t\ts.fullFrameWritten = true\n\t\t\ts.eofWritten = true\n\t\t\treturn nil\n\t\t}\n\t\tif final && len(s.filling) > 0 {\n\t\t\ts.current = e.EncodeAll(s.filling, s.current[:0])\n\t\t\tvar n2 int\n\t\t\tn2, s.err = s.w.Write(s.current)\n\t\t\tif s.err != nil {\n\t\t\t\treturn s.err\n\t\t\t}\n\t\t\ts.nWritten += int64(n2)\n\t\t\ts.nInput += int64(len(s.filling))\n\t\t\ts.current = s.current[:0]\n\t\t\ts.filling = s.filling[:0]\n\t\t\ts.headerWritten = true\n\t\t\ts.fullFrameWritten = true\n\t\t\ts.eofWritten = true\n\t\t\treturn nil\n\t\t}\n\n\t\tvar tmp [maxHeaderSize]byte\n\t\tfh := frameHeader{\n\t\t\tContentSize:   uint64(s.frameContentSize),\n\t\t\tWindowSize:    uint32(s.encoder.WindowSize(s.frameContentSize)),\n\t\t\tSingleSegment: false,\n\t\t\tChecksum:      e.o.crc,\n\t\t\tDictID:        e.o.dict.ID(),\n\t\t}\n\n\t\tdst := fh.appendTo(tmp[:0])\n\t\ts.headerWritten = true\n\t\ts.wWg.Wait()\n\t\tvar n2 int\n\t\tn2, s.err = s.w.Write(dst)\n\t\tif s.err != nil {\n\t\t\treturn s.err\n\t\t}\n\t\ts.nWritten += int64(n2)\n\t}\n\tif s.eofWritten {\n\t\t// Ensure we only write it once.\n\t\tfinal = false\n\t}\n\n\tif len(s.filling) == 0 {\n\t\t// Final block, but no data.\n\t\tif final {\n\t\t\tenc := s.encoder\n\t\t\tblk := enc.Block()\n\t\t\tblk.reset(nil)\n\t\t\tblk.last = true\n\t\t\tblk.encodeRaw(nil)\n\t\t\ts.wWg.Wait()\n\t\t\t_, s.err = s.w.Write(blk.output)\n\t\t\ts.nWritten += int64(len(blk.output))\n\t\t\ts.eofWritten = true\n\t\t}\n\t\treturn s.err\n\t}\n\n\t// SYNC:\n\tif e.o.concurrent == 1 {\n\t\tsrc := s.filling\n\t\ts.nInput += int64(len(s.filling))\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding sync block,\", len(src), \"bytes, final:\", final)\n\t\t}\n\t\tenc := s.encoder\n\t\tblk := enc.Block()\n\t\tblk.reset(nil)\n\t\tenc.Encode(blk, src)\n\t\tblk.last = final\n\t\tif final {\n\t\t\ts.eofWritten = true\n\t\t}\n\n\t\ts.err = blk.encode(src, e.o.noEntropy, !e.o.allLitEntropy)\n\t\tif s.err != nil {\n\t\t\treturn s.err\n\t\t}\n\t\t_, s.err = s.w.Write(blk.output)\n\t\ts.nWritten += int64(len(blk.output))\n\t\ts.filling = s.filling[:0]\n\t\treturn s.err\n\t}\n\n\t// Move blocks forward.\n\ts.filling, s.current, s.previous = s.previous[:0], s.filling, s.current\n\ts.nInput += int64(len(s.current))\n\ts.wg.Add(1)\n\tgo func(src []byte) {\n\t\tif debugEncoder {\n\t\t\tprintln(\"Adding block,\", len(src), \"bytes, final:\", final)\n\t\t}\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\ts.err = fmt.Errorf(\"panic while encoding: %v\", r)\n\t\t\t\trdebug.PrintStack()\n\t\t\t}\n\t\t\ts.wg.Done()\n\t\t}()\n\t\tenc := s.encoder\n\t\tblk := enc.Block()\n\t\tenc.Encode(blk, src)\n\t\tblk.last = final\n\t\tif final {\n\t\t\ts.eofWritten = true\n\t\t}\n\t\t// Wait for pending writes.\n\t\ts.wWg.Wait()\n\t\tif s.writeErr != nil {\n\t\t\ts.err = s.writeErr\n\t\t\treturn\n\t\t}\n\t\t// Transfer encoders from previous write block.\n\t\tblk.swapEncoders(s.writing)\n\t\t// Transfer recent offsets to next.\n\t\tenc.UseBlock(s.writing)\n\t\ts.writing = blk\n\t\ts.wWg.Add(1)\n\t\tgo func() {\n\t\t\tdefer func() {\n\t\t\t\tif r := recover(); r != nil {\n\t\t\t\t\ts.writeErr = fmt.Errorf(\"panic while encoding/writing: %v\", r)\n\t\t\t\t\trdebug.PrintStack()\n\t\t\t\t}\n\t\t\t\ts.wWg.Done()\n\t\t\t}()\n\t\t\ts.writeErr = blk.encode(src, e.o.noEntropy, !e.o.allLitEntropy)\n\t\t\tif s.writeErr != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t_, s.writeErr = s.w.Write(blk.output)\n\t\t\ts.nWritten += int64(len(blk.output))\n\t\t}()\n\t}(s.current)\n\treturn nil\n}\n\n// ReadFrom reads data from r until EOF or error.\n// The return value n is the number of bytes read.\n// Any error except io.EOF encountered during the read is also returned.\n//\n// The Copy function uses ReaderFrom if available.\nfunc (e *Encoder) ReadFrom(r io.Reader) (n int64, err error) {\n\tif debugEncoder {\n\t\tprintln(\"Using ReadFrom\")\n\t}\n\n\t// Flush any current writes.\n\tif len(e.state.filling) > 0 {\n\t\tif err := e.nextBlock(false); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\te.state.filling = e.state.filling[:e.o.blockSize]\n\tsrc := e.state.filling\n\tfor {\n\t\tn2, err := r.Read(src)\n\t\tif e.o.crc {\n\t\t\t_, _ = e.state.encoder.CRC().Write(src[:n2])\n\t\t}\n\t\t// src is now the unfilled part...\n\t\tsrc = src[n2:]\n\t\tn += int64(n2)\n\t\tswitch err {\n\t\tcase io.EOF:\n\t\t\te.state.filling = e.state.filling[:len(e.state.filling)-len(src)]\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"ReadFrom: got EOF final block:\", len(e.state.filling))\n\t\t\t}\n\t\t\treturn n, nil\n\t\tcase nil:\n\t\tdefault:\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"ReadFrom: got error:\", err)\n\t\t\t}\n\t\t\te.state.err = err\n\t\t\treturn n, err\n\t\t}\n\t\tif len(src) > 0 {\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"ReadFrom: got space left in source:\", len(src))\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\terr = e.nextBlock(false)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\te.state.filling = e.state.filling[:e.o.blockSize]\n\t\tsrc = e.state.filling\n\t}\n}\n\n// Flush will send the currently written data to output\n// and block until everything has been written.\n// This should only be used on rare occasions where pushing the currently queued data is critical.\nfunc (e *Encoder) Flush() error {\n\ts := &e.state\n\tif len(s.filling) > 0 {\n\t\terr := e.nextBlock(false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\ts.wg.Wait()\n\ts.wWg.Wait()\n\tif s.err != nil {\n\t\treturn s.err\n\t}\n\treturn s.writeErr\n}\n\n// Close will flush the final output and close the stream.\n// The function will block until everything has been written.\n// The Encoder can still be re-used after calling this.\nfunc (e *Encoder) Close() error {\n\ts := &e.state\n\tif s.encoder == nil {\n\t\treturn nil\n\t}\n\terr := e.nextBlock(true)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif s.frameContentSize > 0 {\n\t\tif s.nInput != s.frameContentSize {\n\t\t\treturn fmt.Errorf(\"frame content size %d given, but %d bytes was written\", s.frameContentSize, s.nInput)\n\t\t}\n\t}\n\tif e.state.fullFrameWritten {\n\t\treturn s.err\n\t}\n\ts.wg.Wait()\n\ts.wWg.Wait()\n\n\tif s.err != nil {\n\t\treturn s.err\n\t}\n\tif s.writeErr != nil {\n\t\treturn s.writeErr\n\t}\n\n\t// Write CRC\n\tif e.o.crc && s.err == nil {\n\t\t// heap alloc.\n\t\tvar tmp [4]byte\n\t\t_, s.err = s.w.Write(s.encoder.AppendCRC(tmp[:0]))\n\t\ts.nWritten += 4\n\t}\n\n\t// Add padding with content from crypto/rand.Reader\n\tif s.err == nil && e.o.pad > 0 {\n\t\tadd := calcSkippableFrame(s.nWritten, int64(e.o.pad))\n\t\tframe, err := skippableFrame(s.filling[:0], add, rand.Reader)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, s.err = s.w.Write(frame)\n\t}\n\treturn s.err\n}\n\n// EncodeAll will encode all input in src and append it to dst.\n// This function can be called concurrently, but each call will only run on a single goroutine.\n// If empty input is given, nothing is returned, unless WithZeroFrames is specified.\n// Encoded blocks can be concatenated and the result will be the combined input stream.\n// Data compressed with EncodeAll can be decoded with the Decoder,\n// using either a stream or DecodeAll.\nfunc (e *Encoder) EncodeAll(src, dst []byte) []byte {\n\tif len(src) == 0 {\n\t\tif e.o.fullZero {\n\t\t\t// Add frame header.\n\t\t\tfh := frameHeader{\n\t\t\t\tContentSize:   0,\n\t\t\t\tWindowSize:    MinWindowSize,\n\t\t\t\tSingleSegment: true,\n\t\t\t\t// Adding a checksum would be a waste of space.\n\t\t\t\tChecksum: false,\n\t\t\t\tDictID:   0,\n\t\t\t}\n\t\t\tdst = fh.appendTo(dst)\n\n\t\t\t// Write raw block as last one only.\n\t\t\tvar blk blockHeader\n\t\t\tblk.setSize(0)\n\t\t\tblk.setType(blockTypeRaw)\n\t\t\tblk.setLast(true)\n\t\t\tdst = blk.appendTo(dst)\n\t\t}\n\t\treturn dst\n\t}\n\te.init.Do(e.initialize)\n\tenc := <-e.encoders\n\tdefer func() {\n\t\t// Release encoder reference to last block.\n\t\t// If a non-single block is needed the encoder will reset again.\n\t\te.encoders <- enc\n\t}()\n\t// Use single segments when above minimum window and below window size.\n\tsingle := len(src) <= e.o.windowSize && len(src) > MinWindowSize\n\tif e.o.single != nil {\n\t\tsingle = *e.o.single\n\t}\n\tfh := frameHeader{\n\t\tContentSize:   uint64(len(src)),\n\t\tWindowSize:    uint32(enc.WindowSize(int64(len(src)))),\n\t\tSingleSegment: single,\n\t\tChecksum:      e.o.crc,\n\t\tDictID:        e.o.dict.ID(),\n\t}\n\n\t// If less than 1MB, allocate a buffer up front.\n\tif len(dst) == 0 && cap(dst) == 0 && len(src) < 1<<20 && !e.o.lowMem {\n\t\tdst = make([]byte, 0, len(src))\n\t}\n\tdst = fh.appendTo(dst)\n\n\t// If we can do everything in one block, prefer that.\n\tif len(src) <= e.o.blockSize {\n\t\tenc.Reset(e.o.dict, true)\n\t\t// Slightly faster with no history and everything in one block.\n\t\tif e.o.crc {\n\t\t\t_, _ = enc.CRC().Write(src)\n\t\t}\n\t\tblk := enc.Block()\n\t\tblk.last = true\n\t\tif e.o.dict == nil {\n\t\t\tenc.EncodeNoHist(blk, src)\n\t\t} else {\n\t\t\tenc.Encode(blk, src)\n\t\t}\n\n\t\t// If we got the exact same number of literals as input,\n\t\t// assume the literals cannot be compressed.\n\t\toldout := blk.output\n\t\t// Output directly to dst\n\t\tblk.output = dst\n\n\t\terr := blk.encode(src, e.o.noEntropy, !e.o.allLitEntropy)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tdst = blk.output\n\t\tblk.output = oldout\n\t} else {\n\t\tenc.Reset(e.o.dict, false)\n\t\tblk := enc.Block()\n\t\tfor len(src) > 0 {\n\t\t\ttodo := src\n\t\t\tif len(todo) > e.o.blockSize {\n\t\t\t\ttodo = todo[:e.o.blockSize]\n\t\t\t}\n\t\t\tsrc = src[len(todo):]\n\t\t\tif e.o.crc {\n\t\t\t\t_, _ = enc.CRC().Write(todo)\n\t\t\t}\n\t\t\tblk.pushOffsets()\n\t\t\tenc.Encode(blk, todo)\n\t\t\tif len(src) == 0 {\n\t\t\t\tblk.last = true\n\t\t\t}\n\t\t\terr := blk.encode(todo, e.o.noEntropy, !e.o.allLitEntropy)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\tdst = append(dst, blk.output...)\n\t\t\tblk.reset(nil)\n\t\t}\n\t}\n\tif e.o.crc {\n\t\tdst = enc.AppendCRC(dst)\n\t}\n\t// Add padding with content from crypto/rand.Reader\n\tif e.o.pad > 0 {\n\t\tadd := calcSkippableFrame(int64(len(dst)), int64(e.o.pad))\n\t\tvar err error\n\t\tdst, err = skippableFrame(dst, add, rand.Reader)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treturn dst\n}\n\n// MaxEncodedSize returns the expected maximum\n// size of an encoded block or stream.\nfunc (e *Encoder) MaxEncodedSize(size int) int {\n\tframeHeader := 4 + 2 // magic + frame header & window descriptor\n\tif e.o.dict != nil {\n\t\tframeHeader += 4\n\t}\n\t// Frame content size:\n\tif size < 256 {\n\t\tframeHeader++\n\t} else if size < 65536+256 {\n\t\tframeHeader += 2\n\t} else if size < math.MaxInt32 {\n\t\tframeHeader += 4\n\t} else {\n\t\tframeHeader += 8\n\t}\n\t// Final crc\n\tif e.o.crc {\n\t\tframeHeader += 4\n\t}\n\n\t// Max overhead is 3 bytes/block.\n\t// There cannot be 0 blocks.\n\tblocks := (size + e.o.blockSize) / e.o.blockSize\n\n\t// Combine, add padding.\n\tmaxSz := frameHeader + 3*blocks + size\n\tif e.o.pad > 1 {\n\t\tmaxSz += calcSkippableFrame(int64(maxSz), int64(e.o.pad))\n\t}\n\treturn maxSz\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/encoder_options.go",
    "content": "package zstd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/bits\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// EOption is an option for creating a encoder.\ntype EOption func(*encoderOptions) error\n\n// options retains accumulated state of multiple options.\ntype encoderOptions struct {\n\tconcurrent      int\n\tlevel           EncoderLevel\n\tsingle          *bool\n\tpad             int\n\tblockSize       int\n\twindowSize      int\n\tcrc             bool\n\tfullZero        bool\n\tnoEntropy       bool\n\tallLitEntropy   bool\n\tcustomWindow    bool\n\tcustomALEntropy bool\n\tcustomBlockSize bool\n\tlowMem          bool\n\tdict            *dict\n}\n\nfunc (o *encoderOptions) setDefault() {\n\t*o = encoderOptions{\n\t\tconcurrent:    runtime.GOMAXPROCS(0),\n\t\tcrc:           true,\n\t\tsingle:        nil,\n\t\tblockSize:     maxCompressedBlockSize,\n\t\twindowSize:    8 << 20,\n\t\tlevel:         SpeedDefault,\n\t\tallLitEntropy: false,\n\t\tlowMem:        false,\n\t}\n}\n\n// encoder returns an encoder with the selected options.\nfunc (o encoderOptions) encoder() encoder {\n\tswitch o.level {\n\tcase SpeedFastest:\n\t\tif o.dict != nil {\n\t\t\treturn &fastEncoderDict{fastEncoder: fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}\n\t\t}\n\t\treturn &fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}\n\n\tcase SpeedDefault:\n\t\tif o.dict != nil {\n\t\t\treturn &doubleFastEncoderDict{fastEncoderDict: fastEncoderDict{fastEncoder: fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}}\n\t\t}\n\t\treturn &doubleFastEncoder{fastEncoder: fastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}\n\tcase SpeedBetterCompression:\n\t\tif o.dict != nil {\n\t\t\treturn &betterFastEncoderDict{betterFastEncoder: betterFastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}}\n\t\t}\n\t\treturn &betterFastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}\n\tcase SpeedBestCompression:\n\t\treturn &bestFastEncoder{fastBase: fastBase{maxMatchOff: int32(o.windowSize), bufferReset: math.MaxInt32 - int32(o.windowSize*2), lowMem: o.lowMem}}\n\t}\n\tpanic(\"unknown compression level\")\n}\n\n// WithEncoderCRC will add CRC value to output.\n// Output will be 4 bytes larger.\nfunc WithEncoderCRC(b bool) EOption {\n\treturn func(o *encoderOptions) error { o.crc = b; return nil }\n}\n\n// WithEncoderConcurrency will set the concurrency,\n// meaning the maximum number of encoders to run concurrently.\n// The value supplied must be at least 1.\n// For streams, setting a value of 1 will disable async compression.\n// By default this will be set to GOMAXPROCS.\nfunc WithEncoderConcurrency(n int) EOption {\n\treturn func(o *encoderOptions) error {\n\t\tif n <= 0 {\n\t\t\treturn fmt.Errorf(\"concurrency must be at least 1\")\n\t\t}\n\t\to.concurrent = n\n\t\treturn nil\n\t}\n}\n\n// WithWindowSize will set the maximum allowed back-reference distance.\n// The value must be a power of two between MinWindowSize and MaxWindowSize.\n// A larger value will enable better compression but allocate more memory and,\n// for above-default values, take considerably longer.\n// The default value is determined by the compression level and max 8MB.\nfunc WithWindowSize(n int) EOption {\n\treturn func(o *encoderOptions) error {\n\t\tswitch {\n\t\tcase n < MinWindowSize:\n\t\t\treturn fmt.Errorf(\"window size must be at least %d\", MinWindowSize)\n\t\tcase n > MaxWindowSize:\n\t\t\treturn fmt.Errorf(\"window size must be at most %d\", MaxWindowSize)\n\t\tcase (n & (n - 1)) != 0:\n\t\t\treturn errors.New(\"window size must be a power of 2\")\n\t\t}\n\n\t\to.windowSize = n\n\t\to.customWindow = true\n\t\tif o.blockSize > o.windowSize {\n\t\t\to.blockSize = o.windowSize\n\t\t\to.customBlockSize = true\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// WithEncoderPadding will add padding to all output so the size will be a multiple of n.\n// This can be used to obfuscate the exact output size or make blocks of a certain size.\n// The contents will be a skippable frame, so it will be invisible by the decoder.\n// n must be > 0 and <= 1GB, 1<<30 bytes.\n// The padded area will be filled with data from crypto/rand.Reader.\n// If `EncodeAll` is used with data already in the destination, the total size will be multiple of this.\nfunc WithEncoderPadding(n int) EOption {\n\treturn func(o *encoderOptions) error {\n\t\tif n <= 0 {\n\t\t\treturn fmt.Errorf(\"padding must be at least 1\")\n\t\t}\n\t\t// No need to waste our time.\n\t\tif n == 1 {\n\t\t\tn = 0\n\t\t}\n\t\tif n > 1<<30 {\n\t\t\treturn fmt.Errorf(\"padding must less than 1GB (1<<30 bytes) \")\n\t\t}\n\t\to.pad = n\n\t\treturn nil\n\t}\n}\n\n// EncoderLevel predefines encoder compression levels.\n// Only use the constants made available, since the actual mapping\n// of these values are very likely to change and your compression could change\n// unpredictably when upgrading the library.\ntype EncoderLevel int\n\nconst (\n\tspeedNotSet EncoderLevel = iota\n\n\t// SpeedFastest will choose the fastest reasonable compression.\n\t// This is roughly equivalent to the fastest Zstandard mode.\n\tSpeedFastest\n\n\t// SpeedDefault is the default \"pretty fast\" compression option.\n\t// This is roughly equivalent to the default Zstandard mode (level 3).\n\tSpeedDefault\n\n\t// SpeedBetterCompression will yield better compression than the default.\n\t// Currently it is about zstd level 7-8 with ~ 2x-3x the default CPU usage.\n\t// By using this, notice that CPU usage may go up in the future.\n\tSpeedBetterCompression\n\n\t// SpeedBestCompression will choose the best available compression option.\n\t// This will offer the best compression no matter the CPU cost.\n\tSpeedBestCompression\n\n\t// speedLast should be kept as the last actual compression option.\n\t// The is not for external usage, but is used to keep track of the valid options.\n\tspeedLast\n)\n\n// EncoderLevelFromString will convert a string representation of an encoding level back\n// to a compression level. The compare is not case sensitive.\n// If the string wasn't recognized, (false, SpeedDefault) will be returned.\nfunc EncoderLevelFromString(s string) (bool, EncoderLevel) {\n\tfor l := speedNotSet + 1; l < speedLast; l++ {\n\t\tif strings.EqualFold(s, l.String()) {\n\t\t\treturn true, l\n\t\t}\n\t}\n\treturn false, SpeedDefault\n}\n\n// EncoderLevelFromZstd will return an encoder level that closest matches the compression\n// ratio of a specific zstd compression level.\n// Many input values will provide the same compression level.\nfunc EncoderLevelFromZstd(level int) EncoderLevel {\n\tswitch {\n\tcase level < 3:\n\t\treturn SpeedFastest\n\tcase level >= 3 && level < 6:\n\t\treturn SpeedDefault\n\tcase level >= 6 && level < 10:\n\t\treturn SpeedBetterCompression\n\tdefault:\n\t\treturn SpeedBestCompression\n\t}\n}\n\n// String provides a string representation of the compression level.\nfunc (e EncoderLevel) String() string {\n\tswitch e {\n\tcase SpeedFastest:\n\t\treturn \"fastest\"\n\tcase SpeedDefault:\n\t\treturn \"default\"\n\tcase SpeedBetterCompression:\n\t\treturn \"better\"\n\tcase SpeedBestCompression:\n\t\treturn \"best\"\n\tdefault:\n\t\treturn \"invalid\"\n\t}\n}\n\n// WithEncoderLevel specifies a predefined compression level.\nfunc WithEncoderLevel(l EncoderLevel) EOption {\n\treturn func(o *encoderOptions) error {\n\t\tswitch {\n\t\tcase l <= speedNotSet || l >= speedLast:\n\t\t\treturn fmt.Errorf(\"unknown encoder level\")\n\t\t}\n\t\to.level = l\n\t\tif !o.customWindow {\n\t\t\tswitch o.level {\n\t\t\tcase SpeedFastest:\n\t\t\t\to.windowSize = 4 << 20\n\t\t\t\tif !o.customBlockSize {\n\t\t\t\t\to.blockSize = 1 << 16\n\t\t\t\t}\n\t\t\tcase SpeedDefault:\n\t\t\t\to.windowSize = 8 << 20\n\t\t\tcase SpeedBetterCompression:\n\t\t\t\to.windowSize = 8 << 20\n\t\t\tcase SpeedBestCompression:\n\t\t\t\to.windowSize = 8 << 20\n\t\t\t}\n\t\t}\n\t\tif !o.customALEntropy {\n\t\t\to.allLitEntropy = l > SpeedDefault\n\t\t}\n\n\t\treturn nil\n\t}\n}\n\n// WithZeroFrames will encode 0 length input as full frames.\n// This can be needed for compatibility with zstandard usage,\n// but is not needed for this package.\nfunc WithZeroFrames(b bool) EOption {\n\treturn func(o *encoderOptions) error {\n\t\to.fullZero = b\n\t\treturn nil\n\t}\n}\n\n// WithAllLitEntropyCompression will apply entropy compression if no matches are found.\n// Disabling this will skip incompressible data faster, but in cases with no matches but\n// skewed character distribution compression is lost.\n// Default value depends on the compression level selected.\nfunc WithAllLitEntropyCompression(b bool) EOption {\n\treturn func(o *encoderOptions) error {\n\t\to.customALEntropy = true\n\t\to.allLitEntropy = b\n\t\treturn nil\n\t}\n}\n\n// WithNoEntropyCompression will always skip entropy compression of literals.\n// This can be useful if content has matches, but unlikely to benefit from entropy\n// compression. Usually the slight speed improvement is not worth enabling this.\nfunc WithNoEntropyCompression(b bool) EOption {\n\treturn func(o *encoderOptions) error {\n\t\to.noEntropy = b\n\t\treturn nil\n\t}\n}\n\n// WithSingleSegment will set the \"single segment\" flag when EncodeAll is used.\n// If this flag is set, data must be regenerated within a single continuous memory segment.\n// In this case, Window_Descriptor byte is skipped, but Frame_Content_Size is necessarily present.\n// As a consequence, the decoder must allocate a memory segment of size equal or larger than size of your content.\n// In order to preserve the decoder from unreasonable memory requirements,\n// a decoder is allowed to reject a compressed frame which requests a memory size beyond decoder's authorized range.\n// For broader compatibility, decoders are recommended to support memory sizes of at least 8 MB.\n// This is only a recommendation, each decoder is free to support higher or lower limits, depending on local limitations.\n// If this is not specified, block encodes will automatically choose this based on the input size and the window size.\n// This setting has no effect on streamed encodes.\nfunc WithSingleSegment(b bool) EOption {\n\treturn func(o *encoderOptions) error {\n\t\to.single = &b\n\t\treturn nil\n\t}\n}\n\n// WithLowerEncoderMem will trade in some memory cases trade less memory usage for\n// slower encoding speed.\n// This will not change the window size which is the primary function for reducing\n// memory usage. See WithWindowSize.\nfunc WithLowerEncoderMem(b bool) EOption {\n\treturn func(o *encoderOptions) error {\n\t\to.lowMem = b\n\t\treturn nil\n\t}\n}\n\n// WithEncoderDict allows to register a dictionary that will be used for the encode.\n//\n// The slice dict must be in the [dictionary format] produced by\n// \"zstd --train\" from the Zstandard reference implementation.\n//\n// The encoder *may* choose to use no dictionary instead for certain payloads.\n//\n// [dictionary format]: https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary-format\nfunc WithEncoderDict(dict []byte) EOption {\n\treturn func(o *encoderOptions) error {\n\t\td, err := loadDict(dict)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\to.dict = d\n\t\treturn nil\n\t}\n}\n\n// WithEncoderDictRaw registers a dictionary that may be used by the encoder.\n//\n// The slice content may contain arbitrary data. It will be used as an initial\n// history.\nfunc WithEncoderDictRaw(id uint32, content []byte) EOption {\n\treturn func(o *encoderOptions) error {\n\t\tif bits.UintSize > 32 && uint(len(content)) > dictMaxLength {\n\t\t\treturn fmt.Errorf(\"dictionary of size %d > 2GiB too large\", len(content))\n\t\t}\n\t\to.dict = &dict{id: id, content: content, offsets: [3]int{1, 4, 8}}\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/framedec.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"io\"\n\n\t\"github.com/klauspost/compress/zstd/internal/xxhash\"\n)\n\ntype frameDec struct {\n\to   decoderOptions\n\tcrc *xxhash.Digest\n\n\tWindowSize uint64\n\n\t// Frame history passed between blocks\n\thistory history\n\n\trawInput byteBuffer\n\n\t// Byte buffer that can be reused for small input blocks.\n\tbBuf byteBuf\n\n\tFrameContentSize uint64\n\n\tDictionaryID  uint32\n\tHasCheckSum   bool\n\tSingleSegment bool\n}\n\nconst (\n\t// MinWindowSize is the minimum Window Size, which is 1 KB.\n\tMinWindowSize = 1 << 10\n\n\t// MaxWindowSize is the maximum encoder window size\n\t// and the default decoder maximum window size.\n\tMaxWindowSize = 1 << 29\n)\n\nconst (\n\tframeMagic          = \"\\x28\\xb5\\x2f\\xfd\"\n\tskippableFrameMagic = \"\\x2a\\x4d\\x18\"\n)\n\nfunc newFrameDec(o decoderOptions) *frameDec {\n\tif o.maxWindowSize > o.maxDecodedSize {\n\t\to.maxWindowSize = o.maxDecodedSize\n\t}\n\td := frameDec{\n\t\to: o,\n\t}\n\treturn &d\n}\n\n// reset will read the frame header and prepare for block decoding.\n// If nothing can be read from the input, io.EOF will be returned.\n// Any other error indicated that the stream contained data, but\n// there was a problem.\nfunc (d *frameDec) reset(br byteBuffer) error {\n\td.HasCheckSum = false\n\td.WindowSize = 0\n\tvar signature [4]byte\n\tfor {\n\t\tvar err error\n\t\t// Check if we can read more...\n\t\tb, err := br.readSmall(1)\n\t\tswitch err {\n\t\tcase io.EOF, io.ErrUnexpectedEOF:\n\t\t\treturn io.EOF\n\t\tcase nil:\n\t\t\tsignature[0] = b[0]\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\t\t// Read the rest, don't allow io.ErrUnexpectedEOF\n\t\tb, err = br.readSmall(3)\n\t\tswitch err {\n\t\tcase io.EOF:\n\t\t\treturn io.EOF\n\t\tcase nil:\n\t\t\tcopy(signature[1:], b)\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\n\t\tif string(signature[1:4]) != skippableFrameMagic || signature[0]&0xf0 != 0x50 {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"Not skippable\", hex.EncodeToString(signature[:]), hex.EncodeToString([]byte(skippableFrameMagic)))\n\t\t\t}\n\t\t\t// Break if not skippable frame.\n\t\t\tbreak\n\t\t}\n\t\t// Read size to skip\n\t\tb, err = br.readSmall(4)\n\t\tif err != nil {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"Reading Frame Size\", err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tn := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)\n\t\tprintln(\"Skipping frame with\", n, \"bytes.\")\n\t\terr = br.skipN(int64(n))\n\t\tif err != nil {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"Reading discarded frame\", err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\tif string(signature[:]) != frameMagic {\n\t\tif debugDecoder {\n\t\t\tprintln(\"Got magic numbers: \", signature, \"want:\", []byte(frameMagic))\n\t\t}\n\t\treturn ErrMagicMismatch\n\t}\n\n\t// Read Frame_Header_Descriptor\n\tfhd, err := br.readByte()\n\tif err != nil {\n\t\tif debugDecoder {\n\t\t\tprintln(\"Reading Frame_Header_Descriptor\", err)\n\t\t}\n\t\treturn err\n\t}\n\td.SingleSegment = fhd&(1<<5) != 0\n\n\tif fhd&(1<<3) != 0 {\n\t\treturn errors.New(\"reserved bit set on frame header\")\n\t}\n\n\t// Read Window_Descriptor\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#window_descriptor\n\td.WindowSize = 0\n\tif !d.SingleSegment {\n\t\twd, err := br.readByte()\n\t\tif err != nil {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"Reading Window_Descriptor\", err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tprintf(\"raw: %x, mantissa: %d, exponent: %d\\n\", wd, wd&7, wd>>3)\n\t\twindowLog := 10 + (wd >> 3)\n\t\twindowBase := uint64(1) << windowLog\n\t\twindowAdd := (windowBase / 8) * uint64(wd&0x7)\n\t\td.WindowSize = windowBase + windowAdd\n\t}\n\n\t// Read Dictionary_ID\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#dictionary_id\n\td.DictionaryID = 0\n\tif size := fhd & 3; size != 0 {\n\t\tif size == 3 {\n\t\t\tsize = 4\n\t\t}\n\n\t\tb, err := br.readSmall(int(size))\n\t\tif err != nil {\n\t\t\tprintln(\"Reading Dictionary_ID\", err)\n\t\t\treturn err\n\t\t}\n\t\tvar id uint32\n\t\tswitch len(b) {\n\t\tcase 1:\n\t\t\tid = uint32(b[0])\n\t\tcase 2:\n\t\t\tid = uint32(b[0]) | (uint32(b[1]) << 8)\n\t\tcase 4:\n\t\t\tid = uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)\n\t\t}\n\t\tif debugDecoder {\n\t\t\tprintln(\"Dict size\", size, \"ID:\", id)\n\t\t}\n\t\td.DictionaryID = id\n\t}\n\n\t// Read Frame_Content_Size\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#frame_content_size\n\tvar fcsSize int\n\tv := fhd >> 6\n\tswitch v {\n\tcase 0:\n\t\tif d.SingleSegment {\n\t\t\tfcsSize = 1\n\t\t}\n\tdefault:\n\t\tfcsSize = 1 << v\n\t}\n\td.FrameContentSize = fcsUnknown\n\tif fcsSize > 0 {\n\t\tb, err := br.readSmall(fcsSize)\n\t\tif err != nil {\n\t\t\tprintln(\"Reading Frame content\", err)\n\t\t\treturn err\n\t\t}\n\t\tswitch len(b) {\n\t\tcase 1:\n\t\t\td.FrameContentSize = uint64(b[0])\n\t\tcase 2:\n\t\t\t// When FCS_Field_Size is 2, the offset of 256 is added.\n\t\t\td.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) + 256\n\t\tcase 4:\n\t\t\td.FrameContentSize = uint64(b[0]) | (uint64(b[1]) << 8) | (uint64(b[2]) << 16) | (uint64(b[3]) << 24)\n\t\tcase 8:\n\t\t\td1 := uint32(b[0]) | (uint32(b[1]) << 8) | (uint32(b[2]) << 16) | (uint32(b[3]) << 24)\n\t\t\td2 := uint32(b[4]) | (uint32(b[5]) << 8) | (uint32(b[6]) << 16) | (uint32(b[7]) << 24)\n\t\t\td.FrameContentSize = uint64(d1) | (uint64(d2) << 32)\n\t\t}\n\t\tif debugDecoder {\n\t\t\tprintln(\"Read FCS:\", d.FrameContentSize)\n\t\t}\n\t}\n\n\t// Move this to shared.\n\td.HasCheckSum = fhd&(1<<2) != 0\n\tif d.HasCheckSum {\n\t\tif d.crc == nil {\n\t\t\td.crc = xxhash.New()\n\t\t}\n\t\td.crc.Reset()\n\t}\n\n\tif d.WindowSize > d.o.maxWindowSize {\n\t\tif debugDecoder {\n\t\t\tprintf(\"window size %d > max %d\\n\", d.WindowSize, d.o.maxWindowSize)\n\t\t}\n\t\treturn ErrWindowSizeExceeded\n\t}\n\n\tif d.WindowSize == 0 && d.SingleSegment {\n\t\t// We may not need window in this case.\n\t\td.WindowSize = d.FrameContentSize\n\t\tif d.WindowSize < MinWindowSize {\n\t\t\td.WindowSize = MinWindowSize\n\t\t}\n\t\tif d.WindowSize > d.o.maxDecodedSize {\n\t\t\tif debugDecoder {\n\t\t\t\tprintf(\"window size %d > max %d\\n\", d.WindowSize, d.o.maxWindowSize)\n\t\t\t}\n\t\t\treturn ErrDecoderSizeExceeded\n\t\t}\n\t}\n\n\t// The minimum Window_Size is 1 KB.\n\tif d.WindowSize < MinWindowSize {\n\t\tif debugDecoder {\n\t\t\tprintln(\"got window size: \", d.WindowSize)\n\t\t}\n\t\treturn ErrWindowSizeTooSmall\n\t}\n\td.history.windowSize = int(d.WindowSize)\n\tif !d.o.lowMem || d.history.windowSize < maxBlockSize {\n\t\t// Alloc 2x window size if not low-mem, or window size below 2MB.\n\t\td.history.allocFrameBuffer = d.history.windowSize * 2\n\t} else {\n\t\tif d.o.lowMem {\n\t\t\t// Alloc with 1MB extra.\n\t\t\td.history.allocFrameBuffer = d.history.windowSize + maxBlockSize/2\n\t\t} else {\n\t\t\t// Alloc with 2MB extra.\n\t\t\td.history.allocFrameBuffer = d.history.windowSize + maxBlockSize\n\t\t}\n\t}\n\n\tif debugDecoder {\n\t\tprintln(\"Frame: Dict:\", d.DictionaryID, \"FrameContentSize:\", d.FrameContentSize, \"singleseg:\", d.SingleSegment, \"window:\", d.WindowSize, \"crc:\", d.HasCheckSum)\n\t}\n\n\t// history contains input - maybe we do something\n\td.rawInput = br\n\treturn nil\n}\n\n// next will start decoding the next block from stream.\nfunc (d *frameDec) next(block *blockDec) error {\n\tif debugDecoder {\n\t\tprintln(\"decoding new block\")\n\t}\n\terr := block.reset(d.rawInput, d.WindowSize)\n\tif err != nil {\n\t\tprintln(\"block error:\", err)\n\t\t// Signal the frame decoder we have a problem.\n\t\tblock.sendErr(err)\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// checkCRC will check the checksum, assuming the frame has one.\n// Will return ErrCRCMismatch if crc check failed, otherwise nil.\nfunc (d *frameDec) checkCRC() error {\n\t// We can overwrite upper tmp now\n\tbuf, err := d.rawInput.readSmall(4)\n\tif err != nil {\n\t\tprintln(\"CRC missing?\", err)\n\t\treturn err\n\t}\n\n\twant := binary.LittleEndian.Uint32(buf[:4])\n\tgot := uint32(d.crc.Sum64())\n\n\tif got != want {\n\t\tif debugDecoder {\n\t\t\tprintf(\"CRC check failed: got %08x, want %08x\\n\", got, want)\n\t\t}\n\t\treturn ErrCRCMismatch\n\t}\n\tif debugDecoder {\n\t\tprintf(\"CRC ok %08x\\n\", got)\n\t}\n\treturn nil\n}\n\n// consumeCRC skips over the checksum, assuming the frame has one.\nfunc (d *frameDec) consumeCRC() error {\n\t_, err := d.rawInput.readSmall(4)\n\tif err != nil {\n\t\tprintln(\"CRC missing?\", err)\n\t}\n\treturn err\n}\n\n// runDecoder will run the decoder for the remainder of the frame.\nfunc (d *frameDec) runDecoder(dst []byte, dec *blockDec) ([]byte, error) {\n\tsaved := d.history.b\n\n\t// We use the history for output to avoid copying it.\n\td.history.b = dst\n\td.history.ignoreBuffer = len(dst)\n\t// Store input length, so we only check new data.\n\tcrcStart := len(dst)\n\td.history.decoders.maxSyncLen = 0\n\tif d.o.limitToCap {\n\t\td.history.decoders.maxSyncLen = uint64(cap(dst) - len(dst))\n\t}\n\tif d.FrameContentSize != fcsUnknown {\n\t\tif !d.o.limitToCap || d.FrameContentSize+uint64(len(dst)) < d.history.decoders.maxSyncLen {\n\t\t\td.history.decoders.maxSyncLen = d.FrameContentSize + uint64(len(dst))\n\t\t}\n\t\tif d.history.decoders.maxSyncLen > d.o.maxDecodedSize {\n\t\t\tif debugDecoder {\n\t\t\t\tprintln(\"maxSyncLen:\", d.history.decoders.maxSyncLen, \"> maxDecodedSize:\", d.o.maxDecodedSize)\n\t\t\t}\n\t\t\treturn dst, ErrDecoderSizeExceeded\n\t\t}\n\t\tif debugDecoder {\n\t\t\tprintln(\"maxSyncLen:\", d.history.decoders.maxSyncLen)\n\t\t}\n\t\tif !d.o.limitToCap && uint64(cap(dst)) < d.history.decoders.maxSyncLen {\n\t\t\t// Alloc for output\n\t\t\tdst2 := make([]byte, len(dst), d.history.decoders.maxSyncLen+compressedBlockOverAlloc)\n\t\t\tcopy(dst2, dst)\n\t\t\tdst = dst2\n\t\t}\n\t}\n\tvar err error\n\tfor {\n\t\terr = dec.reset(d.rawInput, d.WindowSize)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tif debugDecoder {\n\t\t\tprintln(\"next block:\", dec)\n\t\t}\n\t\terr = dec.decodeBuf(&d.history)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tif uint64(len(d.history.b)-crcStart) > d.o.maxDecodedSize {\n\t\t\tprintln(\"runDecoder: maxDecodedSize exceeded\", uint64(len(d.history.b)-crcStart), \">\", d.o.maxDecodedSize)\n\t\t\terr = ErrDecoderSizeExceeded\n\t\t\tbreak\n\t\t}\n\t\tif d.o.limitToCap && len(d.history.b) > cap(dst) {\n\t\t\tprintln(\"runDecoder: cap exceeded\", uint64(len(d.history.b)), \">\", cap(dst))\n\t\t\terr = ErrDecoderSizeExceeded\n\t\t\tbreak\n\t\t}\n\t\tif uint64(len(d.history.b)-crcStart) > d.FrameContentSize {\n\t\t\tprintln(\"runDecoder: FrameContentSize exceeded\", uint64(len(d.history.b)-crcStart), \">\", d.FrameContentSize)\n\t\t\terr = ErrFrameSizeExceeded\n\t\t\tbreak\n\t\t}\n\t\tif dec.Last {\n\t\t\tbreak\n\t\t}\n\t\tif debugDecoder {\n\t\t\tprintln(\"runDecoder: FrameContentSize\", uint64(len(d.history.b)-crcStart), \"<=\", d.FrameContentSize)\n\t\t}\n\t}\n\tdst = d.history.b\n\tif err == nil {\n\t\tif d.FrameContentSize != fcsUnknown && uint64(len(d.history.b)-crcStart) != d.FrameContentSize {\n\t\t\terr = ErrFrameSizeMismatch\n\t\t} else if d.HasCheckSum {\n\t\t\tif d.o.ignoreChecksum {\n\t\t\t\terr = d.consumeCRC()\n\t\t\t} else {\n\t\t\t\td.crc.Write(dst[crcStart:])\n\t\t\t\terr = d.checkCRC()\n\t\t\t}\n\t\t}\n\t}\n\td.history.b = saved\n\treturn dst, err\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/frameenc.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"math/bits\"\n)\n\ntype frameHeader struct {\n\tContentSize   uint64\n\tWindowSize    uint32\n\tSingleSegment bool\n\tChecksum      bool\n\tDictID        uint32\n}\n\nconst maxHeaderSize = 14\n\nfunc (f frameHeader) appendTo(dst []byte) []byte {\n\tdst = append(dst, frameMagic...)\n\tvar fhd uint8\n\tif f.Checksum {\n\t\tfhd |= 1 << 2\n\t}\n\tif f.SingleSegment {\n\t\tfhd |= 1 << 5\n\t}\n\n\tvar dictIDContent []byte\n\tif f.DictID > 0 {\n\t\tvar tmp [4]byte\n\t\tif f.DictID < 256 {\n\t\t\tfhd |= 1\n\t\t\ttmp[0] = uint8(f.DictID)\n\t\t\tdictIDContent = tmp[:1]\n\t\t} else if f.DictID < 1<<16 {\n\t\t\tfhd |= 2\n\t\t\tbinary.LittleEndian.PutUint16(tmp[:2], uint16(f.DictID))\n\t\t\tdictIDContent = tmp[:2]\n\t\t} else {\n\t\t\tfhd |= 3\n\t\t\tbinary.LittleEndian.PutUint32(tmp[:4], f.DictID)\n\t\t\tdictIDContent = tmp[:4]\n\t\t}\n\t}\n\tvar fcs uint8\n\tif f.ContentSize >= 256 {\n\t\tfcs++\n\t}\n\tif f.ContentSize >= 65536+256 {\n\t\tfcs++\n\t}\n\tif f.ContentSize >= 0xffffffff {\n\t\tfcs++\n\t}\n\n\tfhd |= fcs << 6\n\n\tdst = append(dst, fhd)\n\tif !f.SingleSegment {\n\t\tconst winLogMin = 10\n\t\twindowLog := (bits.Len32(f.WindowSize-1) - winLogMin) << 3\n\t\tdst = append(dst, uint8(windowLog))\n\t}\n\tif f.DictID > 0 {\n\t\tdst = append(dst, dictIDContent...)\n\t}\n\tswitch fcs {\n\tcase 0:\n\t\tif f.SingleSegment {\n\t\t\tdst = append(dst, uint8(f.ContentSize))\n\t\t}\n\t\t// Unless SingleSegment is set, framessizes < 256 are not stored.\n\tcase 1:\n\t\tf.ContentSize -= 256\n\t\tdst = append(dst, uint8(f.ContentSize), uint8(f.ContentSize>>8))\n\tcase 2:\n\t\tdst = append(dst, uint8(f.ContentSize), uint8(f.ContentSize>>8), uint8(f.ContentSize>>16), uint8(f.ContentSize>>24))\n\tcase 3:\n\t\tdst = append(dst, uint8(f.ContentSize), uint8(f.ContentSize>>8), uint8(f.ContentSize>>16), uint8(f.ContentSize>>24),\n\t\t\tuint8(f.ContentSize>>32), uint8(f.ContentSize>>40), uint8(f.ContentSize>>48), uint8(f.ContentSize>>56))\n\tdefault:\n\t\tpanic(\"invalid fcs\")\n\t}\n\treturn dst\n}\n\nconst skippableFrameHeader = 4 + 4\n\n// calcSkippableFrame will return a total size to be added for written\n// to be divisible by multiple.\n// The value will always be > skippableFrameHeader.\n// The function will panic if written < 0 or wantMultiple <= 0.\nfunc calcSkippableFrame(written, wantMultiple int64) int {\n\tif wantMultiple <= 0 {\n\t\tpanic(\"wantMultiple <= 0\")\n\t}\n\tif written < 0 {\n\t\tpanic(\"written < 0\")\n\t}\n\tleftOver := written % wantMultiple\n\tif leftOver == 0 {\n\t\treturn 0\n\t}\n\ttoAdd := wantMultiple - leftOver\n\tfor toAdd < skippableFrameHeader {\n\t\ttoAdd += wantMultiple\n\t}\n\treturn int(toAdd)\n}\n\n// skippableFrame will add a skippable frame with a total size of bytes.\n// total should be >= skippableFrameHeader and < math.MaxUint32.\nfunc skippableFrame(dst []byte, total int, r io.Reader) ([]byte, error) {\n\tif total == 0 {\n\t\treturn dst, nil\n\t}\n\tif total < skippableFrameHeader {\n\t\treturn dst, fmt.Errorf(\"requested skippable frame (%d) < 8\", total)\n\t}\n\tif int64(total) > math.MaxUint32 {\n\t\treturn dst, fmt.Errorf(\"requested skippable frame (%d) > max uint32\", total)\n\t}\n\tdst = append(dst, 0x50, 0x2a, 0x4d, 0x18)\n\tf := uint32(total - skippableFrameHeader)\n\tdst = append(dst, uint8(f), uint8(f>>8), uint8(f>>16), uint8(f>>24))\n\tstart := len(dst)\n\tdst = append(dst, make([]byte, f)...)\n\t_, err := io.ReadFull(r, dst[start:])\n\treturn dst, err\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/fse_decoder.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\nconst (\n\ttablelogAbsoluteMax = 9\n)\n\nconst (\n\t/*!MEMORY_USAGE :\n\t *  Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)\n\t *  Increasing memory usage improves compression ratio\n\t *  Reduced memory usage can improve speed, due to cache effect\n\t *  Recommended max value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */\n\tmaxMemoryUsage = tablelogAbsoluteMax + 2\n\n\tmaxTableLog    = maxMemoryUsage - 2\n\tmaxTablesize   = 1 << maxTableLog\n\tmaxTableMask   = (1 << maxTableLog) - 1\n\tminTablelog    = 5\n\tmaxSymbolValue = 255\n)\n\n// fseDecoder provides temporary storage for compression and decompression.\ntype fseDecoder struct {\n\tdt             [maxTablesize]decSymbol // Decompression table.\n\tsymbolLen      uint16                  // Length of active part of the symbol table.\n\tactualTableLog uint8                   // Selected tablelog.\n\tmaxBits        uint8                   // Maximum number of additional bits\n\n\t// used for table creation to avoid allocations.\n\tstateTable [256]uint16\n\tnorm       [maxSymbolValue + 1]int16\n\tpreDefined bool\n}\n\n// tableStep returns the next table index.\nfunc tableStep(tableSize uint32) uint32 {\n\treturn (tableSize >> 1) + (tableSize >> 3) + 3\n}\n\n// readNCount will read the symbol distribution so decoding tables can be constructed.\nfunc (s *fseDecoder) readNCount(b *byteReader, maxSymbol uint16) error {\n\tvar (\n\t\tcharnum   uint16\n\t\tprevious0 bool\n\t)\n\tif b.remain() < 4 {\n\t\treturn errors.New(\"input too small\")\n\t}\n\tbitStream := b.Uint32NC()\n\tnbBits := uint((bitStream & 0xF) + minTablelog) // extract tableLog\n\tif nbBits > tablelogAbsoluteMax {\n\t\tprintln(\"Invalid tablelog:\", nbBits)\n\t\treturn errors.New(\"tableLog too large\")\n\t}\n\tbitStream >>= 4\n\tbitCount := uint(4)\n\n\ts.actualTableLog = uint8(nbBits)\n\tremaining := int32((1 << nbBits) + 1)\n\tthreshold := int32(1 << nbBits)\n\tgotTotal := int32(0)\n\tnbBits++\n\n\tfor remaining > 1 && charnum <= maxSymbol {\n\t\tif previous0 {\n\t\t\t//println(\"prev0\")\n\t\t\tn0 := charnum\n\t\t\tfor (bitStream & 0xFFFF) == 0xFFFF {\n\t\t\t\t//println(\"24 x 0\")\n\t\t\t\tn0 += 24\n\t\t\t\tif r := b.remain(); r > 5 {\n\t\t\t\t\tb.advance(2)\n\t\t\t\t\t// The check above should make sure we can read 32 bits\n\t\t\t\t\tbitStream = b.Uint32NC() >> bitCount\n\t\t\t\t} else {\n\t\t\t\t\t// end of bit stream\n\t\t\t\t\tbitStream >>= 16\n\t\t\t\t\tbitCount += 16\n\t\t\t\t}\n\t\t\t}\n\t\t\t//printf(\"bitstream: %d, 0b%b\", bitStream&3, bitStream)\n\t\t\tfor (bitStream & 3) == 3 {\n\t\t\t\tn0 += 3\n\t\t\t\tbitStream >>= 2\n\t\t\t\tbitCount += 2\n\t\t\t}\n\t\t\tn0 += uint16(bitStream & 3)\n\t\t\tbitCount += 2\n\n\t\t\tif n0 > maxSymbolValue {\n\t\t\t\treturn errors.New(\"maxSymbolValue too small\")\n\t\t\t}\n\t\t\t//println(\"inserting \", n0-charnum, \"zeroes from idx\", charnum, \"ending before\", n0)\n\t\t\tfor charnum < n0 {\n\t\t\t\ts.norm[uint8(charnum)] = 0\n\t\t\t\tcharnum++\n\t\t\t}\n\n\t\t\tif r := b.remain(); r >= 7 || r-int(bitCount>>3) >= 4 {\n\t\t\t\tb.advance(bitCount >> 3)\n\t\t\t\tbitCount &= 7\n\t\t\t\t// The check above should make sure we can read 32 bits\n\t\t\t\tbitStream = b.Uint32NC() >> bitCount\n\t\t\t} else {\n\t\t\t\tbitStream >>= 2\n\t\t\t}\n\t\t}\n\n\t\tmax := (2*threshold - 1) - remaining\n\t\tvar count int32\n\n\t\tif int32(bitStream)&(threshold-1) < max {\n\t\t\tcount = int32(bitStream) & (threshold - 1)\n\t\t\tif debugAsserts && nbBits < 1 {\n\t\t\t\tpanic(\"nbBits underflow\")\n\t\t\t}\n\t\t\tbitCount += nbBits - 1\n\t\t} else {\n\t\t\tcount = int32(bitStream) & (2*threshold - 1)\n\t\t\tif count >= threshold {\n\t\t\t\tcount -= max\n\t\t\t}\n\t\t\tbitCount += nbBits\n\t\t}\n\n\t\t// extra accuracy\n\t\tcount--\n\t\tif count < 0 {\n\t\t\t// -1 means +1\n\t\t\tremaining += count\n\t\t\tgotTotal -= count\n\t\t} else {\n\t\t\tremaining -= count\n\t\t\tgotTotal += count\n\t\t}\n\t\ts.norm[charnum&0xff] = int16(count)\n\t\tcharnum++\n\t\tprevious0 = count == 0\n\t\tfor remaining < threshold {\n\t\t\tnbBits--\n\t\t\tthreshold >>= 1\n\t\t}\n\n\t\tif r := b.remain(); r >= 7 || r-int(bitCount>>3) >= 4 {\n\t\t\tb.advance(bitCount >> 3)\n\t\t\tbitCount &= 7\n\t\t\t// The check above should make sure we can read 32 bits\n\t\t\tbitStream = b.Uint32NC() >> (bitCount & 31)\n\t\t} else {\n\t\t\tbitCount -= (uint)(8 * (len(b.b) - 4 - b.off))\n\t\t\tb.off = len(b.b) - 4\n\t\t\tbitStream = b.Uint32() >> (bitCount & 31)\n\t\t}\n\t}\n\ts.symbolLen = charnum\n\tif s.symbolLen <= 1 {\n\t\treturn fmt.Errorf(\"symbolLen (%d) too small\", s.symbolLen)\n\t}\n\tif s.symbolLen > maxSymbolValue+1 {\n\t\treturn fmt.Errorf(\"symbolLen (%d) too big\", s.symbolLen)\n\t}\n\tif remaining != 1 {\n\t\treturn fmt.Errorf(\"corruption detected (remaining %d != 1)\", remaining)\n\t}\n\tif bitCount > 32 {\n\t\treturn fmt.Errorf(\"corruption detected (bitCount %d > 32)\", bitCount)\n\t}\n\tif gotTotal != 1<<s.actualTableLog {\n\t\treturn fmt.Errorf(\"corruption detected (total %d != %d)\", gotTotal, 1<<s.actualTableLog)\n\t}\n\tb.advance((bitCount + 7) >> 3)\n\treturn s.buildDtable()\n}\n\nfunc (s *fseDecoder) mustReadFrom(r io.Reader) {\n\tfatalErr := func(err error) {\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n\t// \tdt             [maxTablesize]decSymbol // Decompression table.\n\t//\tsymbolLen      uint16                  // Length of active part of the symbol table.\n\t//\tactualTableLog uint8                   // Selected tablelog.\n\t//\tmaxBits        uint8                   // Maximum number of additional bits\n\t//\t// used for table creation to avoid allocations.\n\t//\tstateTable [256]uint16\n\t//\tnorm       [maxSymbolValue + 1]int16\n\t//\tpreDefined bool\n\tfatalErr(binary.Read(r, binary.LittleEndian, &s.dt))\n\tfatalErr(binary.Read(r, binary.LittleEndian, &s.symbolLen))\n\tfatalErr(binary.Read(r, binary.LittleEndian, &s.actualTableLog))\n\tfatalErr(binary.Read(r, binary.LittleEndian, &s.maxBits))\n\tfatalErr(binary.Read(r, binary.LittleEndian, &s.stateTable))\n\tfatalErr(binary.Read(r, binary.LittleEndian, &s.norm))\n\tfatalErr(binary.Read(r, binary.LittleEndian, &s.preDefined))\n}\n\n// decSymbol contains information about a state entry,\n// Including the state offset base, the output symbol and\n// the number of bits to read for the low part of the destination state.\n// Using a composite uint64 is faster than a struct with separate members.\ntype decSymbol uint64\n\nfunc newDecSymbol(nbits, addBits uint8, newState uint16, baseline uint32) decSymbol {\n\treturn decSymbol(nbits) | (decSymbol(addBits) << 8) | (decSymbol(newState) << 16) | (decSymbol(baseline) << 32)\n}\n\nfunc (d decSymbol) nbBits() uint8 {\n\treturn uint8(d)\n}\n\nfunc (d decSymbol) addBits() uint8 {\n\treturn uint8(d >> 8)\n}\n\nfunc (d decSymbol) newState() uint16 {\n\treturn uint16(d >> 16)\n}\n\nfunc (d decSymbol) baselineInt() int {\n\treturn int(d >> 32)\n}\n\nfunc (d *decSymbol) setNBits(nBits uint8) {\n\tconst mask = 0xffffffffffffff00\n\t*d = (*d & mask) | decSymbol(nBits)\n}\n\nfunc (d *decSymbol) setAddBits(addBits uint8) {\n\tconst mask = 0xffffffffffff00ff\n\t*d = (*d & mask) | (decSymbol(addBits) << 8)\n}\n\nfunc (d *decSymbol) setNewState(state uint16) {\n\tconst mask = 0xffffffff0000ffff\n\t*d = (*d & mask) | decSymbol(state)<<16\n}\n\nfunc (d *decSymbol) setExt(addBits uint8, baseline uint32) {\n\tconst mask = 0xffff00ff\n\t*d = (*d & mask) | (decSymbol(addBits) << 8) | (decSymbol(baseline) << 32)\n}\n\n// decSymbolValue returns the transformed decSymbol for the given symbol.\nfunc decSymbolValue(symb uint8, t []baseOffset) (decSymbol, error) {\n\tif int(symb) >= len(t) {\n\t\treturn 0, fmt.Errorf(\"rle symbol %d >= max %d\", symb, len(t))\n\t}\n\tlu := t[symb]\n\treturn newDecSymbol(0, lu.addBits, 0, lu.baseLine), nil\n}\n\n// setRLE will set the decoder til RLE mode.\nfunc (s *fseDecoder) setRLE(symbol decSymbol) {\n\ts.actualTableLog = 0\n\ts.maxBits = symbol.addBits()\n\ts.dt[0] = symbol\n}\n\n// transform will transform the decoder table into a table usable for\n// decoding without having to apply the transformation while decoding.\n// The state will contain the base value and the number of bits to read.\nfunc (s *fseDecoder) transform(t []baseOffset) error {\n\ttableSize := uint16(1 << s.actualTableLog)\n\ts.maxBits = 0\n\tfor i, v := range s.dt[:tableSize] {\n\t\tadd := v.addBits()\n\t\tif int(add) >= len(t) {\n\t\t\treturn fmt.Errorf(\"invalid decoding table entry %d, symbol %d >= max (%d)\", i, v.addBits(), len(t))\n\t\t}\n\t\tlu := t[add]\n\t\tif lu.addBits > s.maxBits {\n\t\t\ts.maxBits = lu.addBits\n\t\t}\n\t\tv.setExt(lu.addBits, lu.baseLine)\n\t\ts.dt[i] = v\n\t}\n\treturn nil\n}\n\ntype fseState struct {\n\tdt    []decSymbol\n\tstate decSymbol\n}\n\n// Initialize and decodeAsync first state and symbol.\nfunc (s *fseState) init(br *bitReader, tableLog uint8, dt []decSymbol) {\n\ts.dt = dt\n\tbr.fill()\n\ts.state = dt[br.getBits(tableLog)]\n}\n\n// final returns the current state symbol without decoding the next.\nfunc (s decSymbol) final() (int, uint8) {\n\treturn s.baselineInt(), s.addBits()\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.go",
    "content": "//go:build amd64 && !appengine && !noasm && gc\n// +build amd64,!appengine,!noasm,gc\n\npackage zstd\n\nimport (\n\t\"fmt\"\n)\n\ntype buildDtableAsmContext struct {\n\t// inputs\n\tstateTable *uint16\n\tnorm       *int16\n\tdt         *uint64\n\n\t// outputs --- set by the procedure in the case of error;\n\t// for interpretation please see the error handling part below\n\terrParam1 uint64\n\terrParam2 uint64\n}\n\n// buildDtable_asm is an x86 assembly implementation of fseDecoder.buildDtable.\n// Function returns non-zero exit code on error.\n//\n//go:noescape\nfunc buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int\n\n// please keep in sync with _generate/gen_fse.go\nconst (\n\terrorCorruptedNormalizedCounter = 1\n\terrorNewStateTooBig             = 2\n\terrorNewStateNoBits             = 3\n)\n\n// buildDtable will build the decoding table.\nfunc (s *fseDecoder) buildDtable() error {\n\tctx := buildDtableAsmContext{\n\t\tstateTable: &s.stateTable[0],\n\t\tnorm:       &s.norm[0],\n\t\tdt:         (*uint64)(&s.dt[0]),\n\t}\n\tcode := buildDtable_asm(s, &ctx)\n\n\tif code != 0 {\n\t\tswitch code {\n\t\tcase errorCorruptedNormalizedCounter:\n\t\t\tposition := ctx.errParam1\n\t\t\treturn fmt.Errorf(\"corrupted input (position=%d, expected 0)\", position)\n\n\t\tcase errorNewStateTooBig:\n\t\t\tnewState := decSymbol(ctx.errParam1)\n\t\t\tsize := ctx.errParam2\n\t\t\treturn fmt.Errorf(\"newState (%d) outside table size (%d)\", newState, size)\n\n\t\tcase errorNewStateNoBits:\n\t\t\tnewState := decSymbol(ctx.errParam1)\n\t\t\toldState := decSymbol(ctx.errParam2)\n\t\t\treturn fmt.Errorf(\"newState (%d) == oldState (%d) and no bits\", newState, oldState)\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"buildDtable_asm returned unhandled nonzero code = %d\", code)\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/fse_decoder_amd64.s",
    "content": "// Code generated by command: go run gen_fse.go -out ../fse_decoder_amd64.s -pkg=zstd. DO NOT EDIT.\n\n//go:build !appengine && !noasm && gc && !noasm\n\n// func buildDtable_asm(s *fseDecoder, ctx *buildDtableAsmContext) int\nTEXT ·buildDtable_asm(SB), $0-24\n\tMOVQ ctx+8(FP), CX\n\tMOVQ s+0(FP), DI\n\n\t// Load values\n\tMOVBQZX 4098(DI), DX\n\tXORQ    AX, AX\n\tBTSQ    DX, AX\n\tMOVQ    (CX), BX\n\tMOVQ    16(CX), SI\n\tLEAQ    -1(AX), R8\n\tMOVQ    8(CX), CX\n\tMOVWQZX 4096(DI), DI\n\n\t// End load values\n\t// Init, lay down lowprob symbols\n\tXORQ R9, R9\n\tJMP  init_main_loop_condition\n\ninit_main_loop:\n\tMOVWQSX (CX)(R9*2), R10\n\tCMPW    R10, $-1\n\tJNE     do_not_update_high_threshold\n\tMOVB    R9, 1(SI)(R8*8)\n\tDECQ    R8\n\tMOVQ    $0x0000000000000001, R10\n\ndo_not_update_high_threshold:\n\tMOVW R10, (BX)(R9*2)\n\tINCQ R9\n\ninit_main_loop_condition:\n\tCMPQ R9, DI\n\tJL   init_main_loop\n\n\t// Spread symbols\n\t// Calculate table step\n\tMOVQ AX, R9\n\tSHRQ $0x01, R9\n\tMOVQ AX, R10\n\tSHRQ $0x03, R10\n\tLEAQ 3(R9)(R10*1), R9\n\n\t// Fill add bits values\n\tLEAQ -1(AX), R10\n\tXORQ R11, R11\n\tXORQ R12, R12\n\tJMP  spread_main_loop_condition\n\nspread_main_loop:\n\tXORQ    R13, R13\n\tMOVWQSX (CX)(R12*2), R14\n\tJMP     spread_inner_loop_condition\n\nspread_inner_loop:\n\tMOVB R12, 1(SI)(R11*8)\n\nadjust_position:\n\tADDQ R9, R11\n\tANDQ R10, R11\n\tCMPQ R11, R8\n\tJG   adjust_position\n\tINCQ R13\n\nspread_inner_loop_condition:\n\tCMPQ R13, R14\n\tJL   spread_inner_loop\n\tINCQ R12\n\nspread_main_loop_condition:\n\tCMPQ  R12, DI\n\tJL    spread_main_loop\n\tTESTQ R11, R11\n\tJZ    spread_check_ok\n\tMOVQ  ctx+8(FP), AX\n\tMOVQ  R11, 24(AX)\n\tMOVQ  $+1, ret+16(FP)\n\tRET\n\nspread_check_ok:\n\t// Build Decoding table\n\tXORQ DI, DI\n\nbuild_table_main_table:\n\tMOVBQZX 1(SI)(DI*8), CX\n\tMOVWQZX (BX)(CX*2), R8\n\tLEAQ    1(R8), R9\n\tMOVW    R9, (BX)(CX*2)\n\tMOVQ    R8, R9\n\tBSRQ    R9, R9\n\tMOVQ    DX, CX\n\tSUBQ    R9, CX\n\tSHLQ    CL, R8\n\tSUBQ    AX, R8\n\tMOVB    CL, (SI)(DI*8)\n\tMOVW    R8, 2(SI)(DI*8)\n\tCMPQ    R8, AX\n\tJLE     build_table_check1_ok\n\tMOVQ    ctx+8(FP), CX\n\tMOVQ    R8, 24(CX)\n\tMOVQ    AX, 32(CX)\n\tMOVQ    $+2, ret+16(FP)\n\tRET\n\nbuild_table_check1_ok:\n\tTESTB CL, CL\n\tJNZ   build_table_check2_ok\n\tCMPW  R8, DI\n\tJNE   build_table_check2_ok\n\tMOVQ  ctx+8(FP), AX\n\tMOVQ  R8, 24(AX)\n\tMOVQ  DI, 32(AX)\n\tMOVQ  $+3, ret+16(FP)\n\tRET\n\nbuild_table_check2_ok:\n\tINCQ DI\n\tCMPQ DI, AX\n\tJL   build_table_main_table\n\tMOVQ $+0, ret+16(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/fse_decoder_generic.go",
    "content": "//go:build !amd64 || appengine || !gc || noasm\n// +build !amd64 appengine !gc noasm\n\npackage zstd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// buildDtable will build the decoding table.\nfunc (s *fseDecoder) buildDtable() error {\n\ttableSize := uint32(1 << s.actualTableLog)\n\thighThreshold := tableSize - 1\n\tsymbolNext := s.stateTable[:256]\n\n\t// Init, lay down lowprob symbols\n\t{\n\t\tfor i, v := range s.norm[:s.symbolLen] {\n\t\t\tif v == -1 {\n\t\t\t\ts.dt[highThreshold].setAddBits(uint8(i))\n\t\t\t\thighThreshold--\n\t\t\t\tv = 1\n\t\t\t}\n\t\t\tsymbolNext[i] = uint16(v)\n\t\t}\n\t}\n\n\t// Spread symbols\n\t{\n\t\ttableMask := tableSize - 1\n\t\tstep := tableStep(tableSize)\n\t\tposition := uint32(0)\n\t\tfor ss, v := range s.norm[:s.symbolLen] {\n\t\t\tfor i := 0; i < int(v); i++ {\n\t\t\t\ts.dt[position].setAddBits(uint8(ss))\n\t\t\t\tfor {\n\t\t\t\t\t// lowprob area\n\t\t\t\t\tposition = (position + step) & tableMask\n\t\t\t\t\tif position <= highThreshold {\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\t\tif position != 0 {\n\t\t\t// position must reach all cells once, otherwise normalizedCounter is incorrect\n\t\t\treturn errors.New(\"corrupted input (position != 0)\")\n\t\t}\n\t}\n\n\t// Build Decoding table\n\t{\n\t\ttableSize := uint16(1 << s.actualTableLog)\n\t\tfor u, v := range s.dt[:tableSize] {\n\t\t\tsymbol := v.addBits()\n\t\t\tnextState := symbolNext[symbol]\n\t\t\tsymbolNext[symbol] = nextState + 1\n\t\t\tnBits := s.actualTableLog - byte(highBits(uint32(nextState)))\n\t\t\ts.dt[u&maxTableMask].setNBits(nBits)\n\t\t\tnewState := (nextState << nBits) - tableSize\n\t\t\tif newState > tableSize {\n\t\t\t\treturn fmt.Errorf(\"newState (%d) outside table size (%d)\", newState, tableSize)\n\t\t\t}\n\t\t\tif newState == uint16(u) && nBits == 0 {\n\t\t\t\t// Seems weird that this is possible with nbits > 0.\n\t\t\t\treturn fmt.Errorf(\"newState (%d) == oldState (%d) and no bits\", newState, u)\n\t\t\t}\n\t\t\ts.dt[u&maxTableMask].setNewState(newState)\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/fse_encoder.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n)\n\nconst (\n\t// For encoding we only support up to\n\tmaxEncTableLog    = 8\n\tmaxEncTablesize   = 1 << maxTableLog\n\tmaxEncTableMask   = (1 << maxTableLog) - 1\n\tminEncTablelog    = 5\n\tmaxEncSymbolValue = maxMatchLengthSymbol\n)\n\n// Scratch provides temporary storage for compression and decompression.\ntype fseEncoder struct {\n\tsymbolLen      uint16 // Length of active part of the symbol table.\n\tactualTableLog uint8  // Selected tablelog.\n\tct             cTable // Compression tables.\n\tmaxCount       int    // count of the most probable symbol\n\tzeroBits       bool   // no bits has prob > 50%.\n\tclearCount     bool   // clear count\n\tuseRLE         bool   // This encoder is for RLE\n\tpreDefined     bool   // This encoder is predefined.\n\treUsed         bool   // Set to know when the encoder has been reused.\n\trleVal         uint8  // RLE Symbol\n\tmaxBits        uint8  // Maximum output bits after transform.\n\n\t// TODO: Technically zstd should be fine with 64 bytes.\n\tcount [256]uint32\n\tnorm  [256]int16\n}\n\n// cTable contains tables used for compression.\ntype cTable struct {\n\ttableSymbol []byte\n\tstateTable  []uint16\n\tsymbolTT    []symbolTransform\n}\n\n// symbolTransform contains the state transform for a symbol.\ntype symbolTransform struct {\n\tdeltaNbBits    uint32\n\tdeltaFindState int16\n\toutBits        uint8\n}\n\n// String prints values as a human readable string.\nfunc (s symbolTransform) String() string {\n\treturn fmt.Sprintf(\"{deltabits: %08x, findstate:%d outbits:%d}\", s.deltaNbBits, s.deltaFindState, s.outBits)\n}\n\n// Histogram allows to populate the histogram and skip that step in the compression,\n// It otherwise allows to inspect the histogram when compression is done.\n// To indicate that you have populated the histogram call HistogramFinished\n// with the value of the highest populated symbol, as well as the number of entries\n// in the most populated entry. These are accepted at face value.\nfunc (s *fseEncoder) Histogram() *[256]uint32 {\n\treturn &s.count\n}\n\n// HistogramFinished can be called to indicate that the histogram has been populated.\n// maxSymbol is the index of the highest set symbol of the next data segment.\n// maxCount is the number of entries in the most populated entry.\n// These are accepted at face value.\nfunc (s *fseEncoder) HistogramFinished(maxSymbol uint8, maxCount int) {\n\ts.maxCount = maxCount\n\ts.symbolLen = uint16(maxSymbol) + 1\n\ts.clearCount = maxCount != 0\n}\n\n// allocCtable will allocate tables needed for compression.\n// If existing tables a re big enough, they are simply re-used.\nfunc (s *fseEncoder) allocCtable() {\n\ttableSize := 1 << s.actualTableLog\n\t// get tableSymbol that is big enough.\n\tif cap(s.ct.tableSymbol) < tableSize {\n\t\ts.ct.tableSymbol = make([]byte, tableSize)\n\t}\n\ts.ct.tableSymbol = s.ct.tableSymbol[:tableSize]\n\n\tctSize := tableSize\n\tif cap(s.ct.stateTable) < ctSize {\n\t\ts.ct.stateTable = make([]uint16, ctSize)\n\t}\n\ts.ct.stateTable = s.ct.stateTable[:ctSize]\n\n\tif cap(s.ct.symbolTT) < 256 {\n\t\ts.ct.symbolTT = make([]symbolTransform, 256)\n\t}\n\ts.ct.symbolTT = s.ct.symbolTT[:256]\n}\n\n// buildCTable will populate the compression table so it is ready to be used.\nfunc (s *fseEncoder) buildCTable() error {\n\ttableSize := uint32(1 << s.actualTableLog)\n\thighThreshold := tableSize - 1\n\tvar cumul [256]int16\n\n\ts.allocCtable()\n\ttableSymbol := s.ct.tableSymbol[:tableSize]\n\t// symbol start positions\n\t{\n\t\tcumul[0] = 0\n\t\tfor ui, v := range s.norm[:s.symbolLen-1] {\n\t\t\tu := byte(ui) // one less than reference\n\t\t\tif v == -1 {\n\t\t\t\t// Low proba symbol\n\t\t\t\tcumul[u+1] = cumul[u] + 1\n\t\t\t\ttableSymbol[highThreshold] = u\n\t\t\t\thighThreshold--\n\t\t\t} else {\n\t\t\t\tcumul[u+1] = cumul[u] + v\n\t\t\t}\n\t\t}\n\t\t// Encode last symbol separately to avoid overflowing u\n\t\tu := int(s.symbolLen - 1)\n\t\tv := s.norm[s.symbolLen-1]\n\t\tif v == -1 {\n\t\t\t// Low proba symbol\n\t\t\tcumul[u+1] = cumul[u] + 1\n\t\t\ttableSymbol[highThreshold] = byte(u)\n\t\t\thighThreshold--\n\t\t} else {\n\t\t\tcumul[u+1] = cumul[u] + v\n\t\t}\n\t\tif uint32(cumul[s.symbolLen]) != tableSize {\n\t\t\treturn fmt.Errorf(\"internal error: expected cumul[s.symbolLen] (%d) == tableSize (%d)\", cumul[s.symbolLen], tableSize)\n\t\t}\n\t\tcumul[s.symbolLen] = int16(tableSize) + 1\n\t}\n\t// Spread symbols\n\ts.zeroBits = false\n\t{\n\t\tstep := tableStep(tableSize)\n\t\ttableMask := tableSize - 1\n\t\tvar position uint32\n\t\t// if any symbol > largeLimit, we may have 0 bits output.\n\t\tlargeLimit := int16(1 << (s.actualTableLog - 1))\n\t\tfor ui, v := range s.norm[:s.symbolLen] {\n\t\t\tsymbol := byte(ui)\n\t\t\tif v > largeLimit {\n\t\t\t\ts.zeroBits = true\n\t\t\t}\n\t\t\tfor nbOccurrences := int16(0); nbOccurrences < v; nbOccurrences++ {\n\t\t\t\ttableSymbol[position] = symbol\n\t\t\t\tposition = (position + step) & tableMask\n\t\t\t\tfor position > highThreshold {\n\t\t\t\t\tposition = (position + step) & tableMask\n\t\t\t\t} /* Low proba area */\n\t\t\t}\n\t\t}\n\n\t\t// Check if we have gone through all positions\n\t\tif position != 0 {\n\t\t\treturn errors.New(\"position!=0\")\n\t\t}\n\t}\n\n\t// Build table\n\ttable := s.ct.stateTable\n\t{\n\t\ttsi := int(tableSize)\n\t\tfor u, v := range tableSymbol {\n\t\t\t// TableU16 : sorted by symbol order; gives next state value\n\t\t\ttable[cumul[v]] = uint16(tsi + u)\n\t\t\tcumul[v]++\n\t\t}\n\t}\n\n\t// Build Symbol Transformation Table\n\t{\n\t\ttotal := int16(0)\n\t\tsymbolTT := s.ct.symbolTT[:s.symbolLen]\n\t\ttableLog := s.actualTableLog\n\t\ttl := (uint32(tableLog) << 16) - (1 << tableLog)\n\t\tfor i, v := range s.norm[:s.symbolLen] {\n\t\t\tswitch v {\n\t\t\tcase 0:\n\t\t\tcase -1, 1:\n\t\t\t\tsymbolTT[i].deltaNbBits = tl\n\t\t\t\tsymbolTT[i].deltaFindState = total - 1\n\t\t\t\ttotal++\n\t\t\tdefault:\n\t\t\t\tmaxBitsOut := uint32(tableLog) - highBit(uint32(v-1))\n\t\t\t\tminStatePlus := uint32(v) << maxBitsOut\n\t\t\t\tsymbolTT[i].deltaNbBits = (maxBitsOut << 16) - minStatePlus\n\t\t\t\tsymbolTT[i].deltaFindState = total - v\n\t\t\t\ttotal += v\n\t\t\t}\n\t\t}\n\t\tif total != int16(tableSize) {\n\t\t\treturn fmt.Errorf(\"total mismatch %d (got) != %d (want)\", total, tableSize)\n\t\t}\n\t}\n\treturn nil\n}\n\nvar rtbTable = [...]uint32{0, 473195, 504333, 520860, 550000, 700000, 750000, 830000}\n\nfunc (s *fseEncoder) setRLE(val byte) {\n\ts.allocCtable()\n\ts.actualTableLog = 0\n\ts.ct.stateTable = s.ct.stateTable[:1]\n\ts.ct.symbolTT[val] = symbolTransform{\n\t\tdeltaFindState: 0,\n\t\tdeltaNbBits:    0,\n\t}\n\tif debugEncoder {\n\t\tprintln(\"setRLE: val\", val, \"symbolTT\", s.ct.symbolTT[val])\n\t}\n\ts.rleVal = val\n\ts.useRLE = true\n}\n\n// setBits will set output bits for the transform.\n// if nil is provided, the number of bits is equal to the index.\nfunc (s *fseEncoder) setBits(transform []byte) {\n\tif s.reUsed || s.preDefined {\n\t\treturn\n\t}\n\tif s.useRLE {\n\t\tif transform == nil {\n\t\t\ts.ct.symbolTT[s.rleVal].outBits = s.rleVal\n\t\t\ts.maxBits = s.rleVal\n\t\t\treturn\n\t\t}\n\t\ts.maxBits = transform[s.rleVal]\n\t\ts.ct.symbolTT[s.rleVal].outBits = s.maxBits\n\t\treturn\n\t}\n\tif transform == nil {\n\t\tfor i := range s.ct.symbolTT[:s.symbolLen] {\n\t\t\ts.ct.symbolTT[i].outBits = uint8(i)\n\t\t}\n\t\ts.maxBits = uint8(s.symbolLen - 1)\n\t\treturn\n\t}\n\ts.maxBits = 0\n\tfor i, v := range transform[:s.symbolLen] {\n\t\ts.ct.symbolTT[i].outBits = v\n\t\tif v > s.maxBits {\n\t\t\t// We could assume bits always going up, but we play safe.\n\t\t\ts.maxBits = v\n\t\t}\n\t}\n}\n\n// normalizeCount will normalize the count of the symbols so\n// the total is equal to the table size.\n// If successful, compression tables will also be made ready.\nfunc (s *fseEncoder) normalizeCount(length int) error {\n\tif s.reUsed {\n\t\treturn nil\n\t}\n\ts.optimalTableLog(length)\n\tvar (\n\t\ttableLog          = s.actualTableLog\n\t\tscale             = 62 - uint64(tableLog)\n\t\tstep              = (1 << 62) / uint64(length)\n\t\tvStep             = uint64(1) << (scale - 20)\n\t\tstillToDistribute = int16(1 << tableLog)\n\t\tlargest           int\n\t\tlargestP          int16\n\t\tlowThreshold      = (uint32)(length >> tableLog)\n\t)\n\tif s.maxCount == length {\n\t\ts.useRLE = true\n\t\treturn nil\n\t}\n\ts.useRLE = false\n\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\t// already handled\n\t\t// if (count[s] == s.length) return 0;   /* rle special case */\n\n\t\tif cnt == 0 {\n\t\t\ts.norm[i] = 0\n\t\t\tcontinue\n\t\t}\n\t\tif cnt <= lowThreshold {\n\t\t\ts.norm[i] = -1\n\t\t\tstillToDistribute--\n\t\t} else {\n\t\t\tproba := (int16)((uint64(cnt) * step) >> scale)\n\t\t\tif proba < 8 {\n\t\t\t\trestToBeat := vStep * uint64(rtbTable[proba])\n\t\t\t\tv := uint64(cnt)*step - (uint64(proba) << scale)\n\t\t\t\tif v > restToBeat {\n\t\t\t\t\tproba++\n\t\t\t\t}\n\t\t\t}\n\t\t\tif proba > largestP {\n\t\t\t\tlargestP = proba\n\t\t\t\tlargest = i\n\t\t\t}\n\t\t\ts.norm[i] = proba\n\t\t\tstillToDistribute -= proba\n\t\t}\n\t}\n\n\tif -stillToDistribute >= (s.norm[largest] >> 1) {\n\t\t// corner case, need another normalization method\n\t\terr := s.normalizeCount2(length)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif debugAsserts {\n\t\t\terr = s.validateNorm()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn s.buildCTable()\n\t}\n\ts.norm[largest] += stillToDistribute\n\tif debugAsserts {\n\t\terr := s.validateNorm()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn s.buildCTable()\n}\n\n// Secondary normalization method.\n// To be used when primary method fails.\nfunc (s *fseEncoder) normalizeCount2(length int) error {\n\tconst notYetAssigned = -2\n\tvar (\n\t\tdistributed  uint32\n\t\ttotal        = uint32(length)\n\t\ttableLog     = s.actualTableLog\n\t\tlowThreshold = total >> tableLog\n\t\tlowOne       = (total * 3) >> (tableLog + 1)\n\t)\n\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\tif cnt == 0 {\n\t\t\ts.norm[i] = 0\n\t\t\tcontinue\n\t\t}\n\t\tif cnt <= lowThreshold {\n\t\t\ts.norm[i] = -1\n\t\t\tdistributed++\n\t\t\ttotal -= cnt\n\t\t\tcontinue\n\t\t}\n\t\tif cnt <= lowOne {\n\t\t\ts.norm[i] = 1\n\t\t\tdistributed++\n\t\t\ttotal -= cnt\n\t\t\tcontinue\n\t\t}\n\t\ts.norm[i] = notYetAssigned\n\t}\n\ttoDistribute := (1 << tableLog) - distributed\n\n\tif (total / toDistribute) > lowOne {\n\t\t// risk of rounding to zero\n\t\tlowOne = (total * 3) / (toDistribute * 2)\n\t\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\t\tif (s.norm[i] == notYetAssigned) && (cnt <= lowOne) {\n\t\t\t\ts.norm[i] = 1\n\t\t\t\tdistributed++\n\t\t\t\ttotal -= cnt\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\ttoDistribute = (1 << tableLog) - distributed\n\t}\n\tif distributed == uint32(s.symbolLen)+1 {\n\t\t// all values are pretty poor;\n\t\t//   probably incompressible data (should have already been detected);\n\t\t//   find max, then give all remaining points to max\n\t\tvar maxV int\n\t\tvar maxC uint32\n\t\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\t\tif cnt > maxC {\n\t\t\t\tmaxV = i\n\t\t\t\tmaxC = cnt\n\t\t\t}\n\t\t}\n\t\ts.norm[maxV] += int16(toDistribute)\n\t\treturn nil\n\t}\n\n\tif total == 0 {\n\t\t// all of the symbols were low enough for the lowOne or lowThreshold\n\t\tfor i := uint32(0); toDistribute > 0; i = (i + 1) % (uint32(s.symbolLen)) {\n\t\t\tif s.norm[i] > 0 {\n\t\t\t\ttoDistribute--\n\t\t\t\ts.norm[i]++\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tvar (\n\t\tvStepLog = 62 - uint64(tableLog)\n\t\tmid      = uint64((1 << (vStepLog - 1)) - 1)\n\t\trStep    = (((1 << vStepLog) * uint64(toDistribute)) + mid) / uint64(total) // scale on remaining\n\t\ttmpTotal = mid\n\t)\n\tfor i, cnt := range s.count[:s.symbolLen] {\n\t\tif s.norm[i] == notYetAssigned {\n\t\t\tvar (\n\t\t\t\tend    = tmpTotal + uint64(cnt)*rStep\n\t\t\t\tsStart = uint32(tmpTotal >> vStepLog)\n\t\t\t\tsEnd   = uint32(end >> vStepLog)\n\t\t\t\tweight = sEnd - sStart\n\t\t\t)\n\t\t\tif weight < 1 {\n\t\t\t\treturn errors.New(\"weight < 1\")\n\t\t\t}\n\t\t\ts.norm[i] = int16(weight)\n\t\t\ttmpTotal = end\n\t\t}\n\t}\n\treturn nil\n}\n\n// optimalTableLog calculates and sets the optimal tableLog in s.actualTableLog\nfunc (s *fseEncoder) optimalTableLog(length int) {\n\ttableLog := uint8(maxEncTableLog)\n\tminBitsSrc := highBit(uint32(length)) + 1\n\tminBitsSymbols := highBit(uint32(s.symbolLen-1)) + 2\n\tminBits := uint8(minBitsSymbols)\n\tif minBitsSrc < minBitsSymbols {\n\t\tminBits = uint8(minBitsSrc)\n\t}\n\n\tmaxBitsSrc := uint8(highBit(uint32(length-1))) - 2\n\tif maxBitsSrc < tableLog {\n\t\t// Accuracy can be reduced\n\t\ttableLog = maxBitsSrc\n\t}\n\tif minBits > tableLog {\n\t\ttableLog = minBits\n\t}\n\t// Need a minimum to safely represent all symbol values\n\tif tableLog < minEncTablelog {\n\t\ttableLog = minEncTablelog\n\t}\n\tif tableLog > maxEncTableLog {\n\t\ttableLog = maxEncTableLog\n\t}\n\ts.actualTableLog = tableLog\n}\n\n// validateNorm validates the normalized histogram table.\nfunc (s *fseEncoder) validateNorm() (err error) {\n\tvar total int\n\tfor _, v := range s.norm[:s.symbolLen] {\n\t\tif v >= 0 {\n\t\t\ttotal += int(v)\n\t\t} else {\n\t\t\ttotal -= int(v)\n\t\t}\n\t}\n\tdefer func() {\n\t\tif err == nil {\n\t\t\treturn\n\t\t}\n\t\tfmt.Printf(\"selected TableLog: %d, Symbol length: %d\\n\", s.actualTableLog, s.symbolLen)\n\t\tfor i, v := range s.norm[:s.symbolLen] {\n\t\t\tfmt.Printf(\"%3d: %5d -> %4d \\n\", i, s.count[i], v)\n\t\t}\n\t}()\n\tif total != (1 << s.actualTableLog) {\n\t\treturn fmt.Errorf(\"warning: Total == %d != %d\", total, 1<<s.actualTableLog)\n\t}\n\tfor i, v := range s.count[s.symbolLen:] {\n\t\tif v != 0 {\n\t\t\treturn fmt.Errorf(\"warning: Found symbol out of range, %d after cut\", i)\n\t\t}\n\t}\n\treturn nil\n}\n\n// writeCount will write the normalized histogram count to header.\n// This is read back by readNCount.\nfunc (s *fseEncoder) writeCount(out []byte) ([]byte, error) {\n\tif s.useRLE {\n\t\treturn append(out, s.rleVal), nil\n\t}\n\tif s.preDefined || s.reUsed {\n\t\t// Never write predefined.\n\t\treturn out, nil\n\t}\n\n\tvar (\n\t\ttableLog  = s.actualTableLog\n\t\ttableSize = 1 << tableLog\n\t\tprevious0 bool\n\t\tcharnum   uint16\n\n\t\t// maximum header size plus 2 extra bytes for final output if bitCount == 0.\n\t\tmaxHeaderSize = ((int(s.symbolLen) * int(tableLog)) >> 3) + 3 + 2\n\n\t\t// Write Table Size\n\t\tbitStream = uint32(tableLog - minEncTablelog)\n\t\tbitCount  = uint(4)\n\t\tremaining = int16(tableSize + 1) /* +1 for extra accuracy */\n\t\tthreshold = int16(tableSize)\n\t\tnbBits    = uint(tableLog + 1)\n\t\toutP      = len(out)\n\t)\n\tif cap(out) < outP+maxHeaderSize {\n\t\tout = append(out, make([]byte, maxHeaderSize*3)...)\n\t\tout = out[:len(out)-maxHeaderSize*3]\n\t}\n\tout = out[:outP+maxHeaderSize]\n\n\t// stops at 1\n\tfor remaining > 1 {\n\t\tif previous0 {\n\t\t\tstart := charnum\n\t\t\tfor s.norm[charnum] == 0 {\n\t\t\t\tcharnum++\n\t\t\t}\n\t\t\tfor charnum >= start+24 {\n\t\t\t\tstart += 24\n\t\t\t\tbitStream += uint32(0xFFFF) << bitCount\n\t\t\t\tout[outP] = byte(bitStream)\n\t\t\t\tout[outP+1] = byte(bitStream >> 8)\n\t\t\t\toutP += 2\n\t\t\t\tbitStream >>= 16\n\t\t\t}\n\t\t\tfor charnum >= start+3 {\n\t\t\t\tstart += 3\n\t\t\t\tbitStream += 3 << bitCount\n\t\t\t\tbitCount += 2\n\t\t\t}\n\t\t\tbitStream += uint32(charnum-start) << bitCount\n\t\t\tbitCount += 2\n\t\t\tif bitCount > 16 {\n\t\t\t\tout[outP] = byte(bitStream)\n\t\t\t\tout[outP+1] = byte(bitStream >> 8)\n\t\t\t\toutP += 2\n\t\t\t\tbitStream >>= 16\n\t\t\t\tbitCount -= 16\n\t\t\t}\n\t\t}\n\n\t\tcount := s.norm[charnum]\n\t\tcharnum++\n\t\tmax := (2*threshold - 1) - remaining\n\t\tif count < 0 {\n\t\t\tremaining += count\n\t\t} else {\n\t\t\tremaining -= count\n\t\t}\n\t\tcount++ // +1 for extra accuracy\n\t\tif count >= threshold {\n\t\t\tcount += max // [0..max[ [max..threshold[ (...) [threshold+max 2*threshold[\n\t\t}\n\t\tbitStream += uint32(count) << bitCount\n\t\tbitCount += nbBits\n\t\tif count < max {\n\t\t\tbitCount--\n\t\t}\n\n\t\tprevious0 = count == 1\n\t\tif remaining < 1 {\n\t\t\treturn nil, errors.New(\"internal error: remaining < 1\")\n\t\t}\n\t\tfor remaining < threshold {\n\t\t\tnbBits--\n\t\t\tthreshold >>= 1\n\t\t}\n\n\t\tif bitCount > 16 {\n\t\t\tout[outP] = byte(bitStream)\n\t\t\tout[outP+1] = byte(bitStream >> 8)\n\t\t\toutP += 2\n\t\t\tbitStream >>= 16\n\t\t\tbitCount -= 16\n\t\t}\n\t}\n\n\tif outP+2 > len(out) {\n\t\treturn nil, fmt.Errorf(\"internal error: %d > %d, maxheader: %d, sl: %d, tl: %d, normcount: %v\", outP+2, len(out), maxHeaderSize, s.symbolLen, int(tableLog), s.norm[:s.symbolLen])\n\t}\n\tout[outP] = byte(bitStream)\n\tout[outP+1] = byte(bitStream >> 8)\n\toutP += int((bitCount + 7) / 8)\n\n\tif charnum > s.symbolLen {\n\t\treturn nil, errors.New(\"internal error: charnum > s.symbolLen\")\n\t}\n\treturn out[:outP], nil\n}\n\n// Approximate symbol cost, as fractional value, using fixed-point format (accuracyLog fractional bits)\n// note 1 : assume symbolValue is valid (<= maxSymbolValue)\n// note 2 : if freq[symbolValue]==0, @return a fake cost of tableLog+1 bits *\nfunc (s *fseEncoder) bitCost(symbolValue uint8, accuracyLog uint32) uint32 {\n\tminNbBits := s.ct.symbolTT[symbolValue].deltaNbBits >> 16\n\tthreshold := (minNbBits + 1) << 16\n\tif debugAsserts {\n\t\tif !(s.actualTableLog < 16) {\n\t\t\tpanic(\"!s.actualTableLog < 16\")\n\t\t}\n\t\t// ensure enough room for renormalization double shift\n\t\tif !(uint8(accuracyLog) < 31-s.actualTableLog) {\n\t\t\tpanic(\"!uint8(accuracyLog) < 31-s.actualTableLog\")\n\t\t}\n\t}\n\ttableSize := uint32(1) << s.actualTableLog\n\tdeltaFromThreshold := threshold - (s.ct.symbolTT[symbolValue].deltaNbBits + tableSize)\n\t// linear interpolation (very approximate)\n\tnormalizedDeltaFromThreshold := (deltaFromThreshold << accuracyLog) >> s.actualTableLog\n\tbitMultiplier := uint32(1) << accuracyLog\n\tif debugAsserts {\n\t\tif s.ct.symbolTT[symbolValue].deltaNbBits+tableSize > threshold {\n\t\t\tpanic(\"s.ct.symbolTT[symbolValue].deltaNbBits+tableSize > threshold\")\n\t\t}\n\t\tif normalizedDeltaFromThreshold > bitMultiplier {\n\t\t\tpanic(\"normalizedDeltaFromThreshold > bitMultiplier\")\n\t\t}\n\t}\n\treturn (minNbBits+1)*bitMultiplier - normalizedDeltaFromThreshold\n}\n\n// Returns the cost in bits of encoding the distribution in count using ctable.\n// Histogram should only be up to the last non-zero symbol.\n// Returns an -1 if ctable cannot represent all the symbols in count.\nfunc (s *fseEncoder) approxSize(hist []uint32) uint32 {\n\tif int(s.symbolLen) < len(hist) {\n\t\t// More symbols than we have.\n\t\treturn math.MaxUint32\n\t}\n\tif s.useRLE {\n\t\t// We will never reuse RLE encoders.\n\t\treturn math.MaxUint32\n\t}\n\tconst kAccuracyLog = 8\n\tbadCost := (uint32(s.actualTableLog) + 1) << kAccuracyLog\n\tvar cost uint32\n\tfor i, v := range hist {\n\t\tif v == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif s.norm[i] == 0 {\n\t\t\treturn math.MaxUint32\n\t\t}\n\t\tbitCost := s.bitCost(uint8(i), kAccuracyLog)\n\t\tif bitCost > badCost {\n\t\t\treturn math.MaxUint32\n\t\t}\n\t\tcost += v * bitCost\n\t}\n\treturn cost >> kAccuracyLog\n}\n\n// maxHeaderSize returns the maximum header size in bits.\n// This is not exact size, but we want a penalty for new tables anyway.\nfunc (s *fseEncoder) maxHeaderSize() uint32 {\n\tif s.preDefined {\n\t\treturn 0\n\t}\n\tif s.useRLE {\n\t\treturn 8\n\t}\n\treturn (((uint32(s.symbolLen) * uint32(s.actualTableLog)) >> 3) + 3) * 8\n}\n\n// cState contains the compression state of a stream.\ntype cState struct {\n\tbw         *bitWriter\n\tstateTable []uint16\n\tstate      uint16\n}\n\n// init will initialize the compression state to the first symbol of the stream.\nfunc (c *cState) init(bw *bitWriter, ct *cTable, first symbolTransform) {\n\tc.bw = bw\n\tc.stateTable = ct.stateTable\n\tif len(c.stateTable) == 1 {\n\t\t// RLE\n\t\tc.stateTable[0] = uint16(0)\n\t\tc.state = 0\n\t\treturn\n\t}\n\tnbBitsOut := (first.deltaNbBits + (1 << 15)) >> 16\n\tim := int32((nbBitsOut << 16) - first.deltaNbBits)\n\tlu := (im >> nbBitsOut) + int32(first.deltaFindState)\n\tc.state = c.stateTable[lu]\n}\n\n// flush will write the tablelog to the output and flush the remaining full bytes.\nfunc (c *cState) flush(tableLog uint8) {\n\tc.bw.flush32()\n\tc.bw.addBits16NC(c.state, tableLog)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/fse_predefined.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"sync\"\n)\n\nvar (\n\t// fsePredef are the predefined fse tables as defined here:\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions\n\t// These values are already transformed.\n\tfsePredef [3]fseDecoder\n\n\t// fsePredefEnc are the predefined encoder based on fse tables as defined here:\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions\n\t// These values are already transformed.\n\tfsePredefEnc [3]fseEncoder\n\n\t// symbolTableX contain the transformations needed for each type as defined in\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#the-codes-for-literals-lengths-match-lengths-and-offsets\n\tsymbolTableX [3][]baseOffset\n\n\t// maxTableSymbol is the biggest supported symbol for each table type\n\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#the-codes-for-literals-lengths-match-lengths-and-offsets\n\tmaxTableSymbol = [3]uint8{tableLiteralLengths: maxLiteralLengthSymbol, tableOffsets: maxOffsetLengthSymbol, tableMatchLengths: maxMatchLengthSymbol}\n\n\t// bitTables is the bits table for each table.\n\tbitTables = [3][]byte{tableLiteralLengths: llBitsTable[:], tableOffsets: nil, tableMatchLengths: mlBitsTable[:]}\n)\n\ntype tableIndex uint8\n\nconst (\n\t// indexes for fsePredef and symbolTableX\n\ttableLiteralLengths tableIndex = 0\n\ttableOffsets        tableIndex = 1\n\ttableMatchLengths   tableIndex = 2\n\n\tmaxLiteralLengthSymbol = 35\n\tmaxOffsetLengthSymbol  = 30\n\tmaxMatchLengthSymbol   = 52\n)\n\n// baseOffset is used for calculating transformations.\ntype baseOffset struct {\n\tbaseLine uint32\n\taddBits  uint8\n}\n\n// fillBase will precalculate base offsets with the given bit distributions.\nfunc fillBase(dst []baseOffset, base uint32, bits ...uint8) {\n\tif len(bits) != len(dst) {\n\t\tpanic(fmt.Sprintf(\"len(dst) (%d) != len(bits) (%d)\", len(dst), len(bits)))\n\t}\n\tfor i, bit := range bits {\n\t\tif base > math.MaxInt32 {\n\t\t\tpanic(\"invalid decoding table, base overflows int32\")\n\t\t}\n\n\t\tdst[i] = baseOffset{\n\t\t\tbaseLine: base,\n\t\t\taddBits:  bit,\n\t\t}\n\t\tbase += 1 << bit\n\t}\n}\n\nvar predef sync.Once\n\nfunc initPredefined() {\n\tpredef.Do(func() {\n\t\t// Literals length codes\n\t\ttmp := make([]baseOffset, 36)\n\t\tfor i := range tmp[:16] {\n\t\t\ttmp[i] = baseOffset{\n\t\t\t\tbaseLine: uint32(i),\n\t\t\t\taddBits:  0,\n\t\t\t}\n\t\t}\n\t\tfillBase(tmp[16:], 16, 1, 1, 1, 1, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)\n\t\tsymbolTableX[tableLiteralLengths] = tmp\n\n\t\t// Match length codes\n\t\ttmp = make([]baseOffset, 53)\n\t\tfor i := range tmp[:32] {\n\t\t\ttmp[i] = baseOffset{\n\t\t\t\t// The transformation adds the 3 length.\n\t\t\t\tbaseLine: uint32(i) + 3,\n\t\t\t\taddBits:  0,\n\t\t\t}\n\t\t}\n\t\tfillBase(tmp[32:], 35, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)\n\t\tsymbolTableX[tableMatchLengths] = tmp\n\n\t\t// Offset codes\n\t\ttmp = make([]baseOffset, maxOffsetBits+1)\n\t\ttmp[1] = baseOffset{\n\t\t\tbaseLine: 1,\n\t\t\taddBits:  1,\n\t\t}\n\t\tfillBase(tmp[2:], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)\n\t\tsymbolTableX[tableOffsets] = tmp\n\n\t\t// Fill predefined tables and transform them.\n\t\t// https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#default-distributions\n\t\tfor i := range fsePredef[:] {\n\t\t\tf := &fsePredef[i]\n\t\t\tswitch tableIndex(i) {\n\t\t\tcase tableLiteralLengths:\n\t\t\t\t// https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L243\n\t\t\t\tf.actualTableLog = 6\n\t\t\t\tcopy(f.norm[:], []int16{4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1,\n\t\t\t\t\t2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 1, 1, 1, 1, 1,\n\t\t\t\t\t-1, -1, -1, -1})\n\t\t\t\tf.symbolLen = 36\n\t\t\tcase tableOffsets:\n\t\t\t\t// https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L281\n\t\t\t\tf.actualTableLog = 5\n\t\t\t\tcopy(f.norm[:], []int16{\n\t\t\t\t\t1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,\n\t\t\t\t\t1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1})\n\t\t\t\tf.symbolLen = 29\n\t\t\tcase tableMatchLengths:\n\t\t\t\t//https://github.com/facebook/zstd/blob/ededcfca57366461021c922720878c81a5854a0a/lib/decompress/zstd_decompress_block.c#L304\n\t\t\t\tf.actualTableLog = 6\n\t\t\t\tcopy(f.norm[:], []int16{\n\t\t\t\t\t1, 4, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,\n\t\t\t\t\t1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n\t\t\t\t\t1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1,\n\t\t\t\t\t-1, -1, -1, -1, -1})\n\t\t\t\tf.symbolLen = 53\n\t\t\t}\n\t\t\tif err := f.buildDtable(); err != nil {\n\t\t\t\tpanic(fmt.Errorf(\"building table %v: %v\", tableIndex(i), err))\n\t\t\t}\n\t\t\tif err := f.transform(symbolTableX[i]); err != nil {\n\t\t\t\tpanic(fmt.Errorf(\"building table %v: %v\", tableIndex(i), err))\n\t\t\t}\n\t\t\tf.preDefined = true\n\n\t\t\t// Create encoder as well\n\t\t\tenc := &fsePredefEnc[i]\n\t\t\tcopy(enc.norm[:], f.norm[:])\n\t\t\tenc.symbolLen = f.symbolLen\n\t\t\tenc.actualTableLog = f.actualTableLog\n\t\t\tif err := enc.buildCTable(); err != nil {\n\t\t\t\tpanic(fmt.Errorf(\"building encoding table %v: %v\", tableIndex(i), err))\n\t\t\t}\n\t\t\tenc.setBits(bitTables[i])\n\t\t\tenc.preDefined = true\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/hash.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nconst (\n\tprime3bytes = 506832829\n\tprime4bytes = 2654435761\n\tprime5bytes = 889523592379\n\tprime6bytes = 227718039650203\n\tprime7bytes = 58295818150454627\n\tprime8bytes = 0xcf1bbcdcb7a56463\n)\n\n// hashLen returns a hash of the lowest mls bytes of with length output bits.\n// mls must be >=3 and <=8. Any other value will return hash for 4 bytes.\n// length should always be < 32.\n// Preferably length and mls should be a constant for inlining.\nfunc hashLen(u uint64, length, mls uint8) uint32 {\n\tswitch mls {\n\tcase 3:\n\t\treturn (uint32(u<<8) * prime3bytes) >> (32 - length)\n\tcase 5:\n\t\treturn uint32(((u << (64 - 40)) * prime5bytes) >> (64 - length))\n\tcase 6:\n\t\treturn uint32(((u << (64 - 48)) * prime6bytes) >> (64 - length))\n\tcase 7:\n\t\treturn uint32(((u << (64 - 56)) * prime7bytes) >> (64 - length))\n\tcase 8:\n\t\treturn uint32((u * prime8bytes) >> (64 - length))\n\tdefault:\n\t\treturn (uint32(u) * prime4bytes) >> (32 - length)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/history.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"github.com/klauspost/compress/huff0\"\n)\n\n// history contains the information transferred between blocks.\ntype history struct {\n\t// Literal decompression\n\thuffTree *huff0.Scratch\n\n\t// Sequence decompression\n\tdecoders      sequenceDecs\n\trecentOffsets [3]int\n\n\t// History buffer...\n\tb []byte\n\n\t// ignoreBuffer is meant to ignore a number of bytes\n\t// when checking for matches in history\n\tignoreBuffer int\n\n\twindowSize       int\n\tallocFrameBuffer int // needed?\n\terror            bool\n\tdict             *dict\n}\n\n// reset will reset the history to initial state of a frame.\n// The history must already have been initialized to the desired size.\nfunc (h *history) reset() {\n\th.b = h.b[:0]\n\th.ignoreBuffer = 0\n\th.error = false\n\th.recentOffsets = [3]int{1, 4, 8}\n\th.decoders.freeDecoders()\n\th.decoders = sequenceDecs{br: h.decoders.br}\n\th.freeHuffDecoder()\n\th.huffTree = nil\n\th.dict = nil\n\t//printf(\"history created: %+v (l: %d, c: %d)\", *h, len(h.b), cap(h.b))\n}\n\nfunc (h *history) freeHuffDecoder() {\n\tif h.huffTree != nil {\n\t\tif h.dict == nil || h.dict.litEnc != h.huffTree {\n\t\t\thuffDecoderPool.Put(h.huffTree)\n\t\t\th.huffTree = nil\n\t\t}\n\t}\n}\n\nfunc (h *history) setDict(dict *dict) {\n\tif dict == nil {\n\t\treturn\n\t}\n\th.dict = dict\n\th.decoders.litLengths = dict.llDec\n\th.decoders.offsets = dict.ofDec\n\th.decoders.matchLengths = dict.mlDec\n\th.decoders.dict = dict.content\n\th.recentOffsets = dict.offsets\n\th.huffTree = dict.litEnc\n}\n\n// append bytes to history.\n// This function will make sure there is space for it,\n// if the buffer has been allocated with enough extra space.\nfunc (h *history) append(b []byte) {\n\tif len(b) >= h.windowSize {\n\t\t// Discard all history by simply overwriting\n\t\th.b = h.b[:h.windowSize]\n\t\tcopy(h.b, b[len(b)-h.windowSize:])\n\t\treturn\n\t}\n\n\t// If there is space, append it.\n\tif len(b) < cap(h.b)-len(h.b) {\n\t\th.b = append(h.b, b...)\n\t\treturn\n\t}\n\n\t// Move data down so we only have window size left.\n\t// We know we have less than window size in b at this point.\n\tdiscard := len(b) + len(h.b) - h.windowSize\n\tcopy(h.b, h.b[discard:])\n\th.b = h.b[:h.windowSize]\n\tcopy(h.b[h.windowSize-len(b):], b)\n}\n\n// ensureBlock will ensure there is space for at least one block...\nfunc (h *history) ensureBlock() {\n\tif cap(h.b) < h.allocFrameBuffer {\n\t\th.b = make([]byte, 0, h.allocFrameBuffer)\n\t\treturn\n\t}\n\n\tavail := cap(h.b) - len(h.b)\n\tif avail >= h.windowSize || avail > maxCompressedBlockSize {\n\t\treturn\n\t}\n\t// Move data down so we only have window size left.\n\t// We know we have less than window size in b at this point.\n\tdiscard := len(h.b) - h.windowSize\n\tcopy(h.b, h.b[discard:])\n\th.b = h.b[:h.windowSize]\n}\n\n// append bytes to history without ever discarding anything.\nfunc (h *history) appendKeep(b []byte) {\n\th.b = append(h.b, b...)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/LICENSE.txt",
    "content": "Copyright (c) 2016 Caleb Spare\n\nMIT License\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\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 HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/README.md",
    "content": "# xxhash\n\nVENDORED: Go to [github.com/cespare/xxhash](https://github.com/cespare/xxhash) for original package.\n\nxxhash is a Go implementation of the 64-bit [xxHash] algorithm, XXH64. This is a\nhigh-quality hashing algorithm that is much faster than anything in the Go\nstandard library.\n\nThis package provides a straightforward API:\n\n```\nfunc Sum64(b []byte) uint64\nfunc Sum64String(s string) uint64\ntype Digest struct{ ... }\n    func New() *Digest\n```\n\nThe `Digest` type implements hash.Hash64. Its key methods are:\n\n```\nfunc (*Digest) Write([]byte) (int, error)\nfunc (*Digest) WriteString(string) (int, error)\nfunc (*Digest) Sum64() uint64\n```\n\nThe package is written with optimized pure Go and also contains even faster\nassembly implementations for amd64 and arm64. If desired, the `purego` build tag\nopts into using the Go code even on those architectures.\n\n[xxHash]: http://cyan4973.github.io/xxHash/\n\n## Compatibility\n\nThis package is in a module and the latest code is in version 2 of the module.\nYou need a version of Go with at least \"minimal module compatibility\" to use\ngithub.com/cespare/xxhash/v2:\n\n* 1.9.7+ for Go 1.9\n* 1.10.3+ for Go 1.10\n* Go 1.11 or later\n\nI recommend using the latest release of Go.\n\n## Benchmarks\n\nHere are some quick benchmarks comparing the pure-Go and assembly\nimplementations of Sum64.\n\n| input size | purego    | asm       |\n| ---------- | --------- | --------- |\n| 4 B        |  1.3 GB/s |  1.2 GB/s |\n| 16 B       |  2.9 GB/s |  3.5 GB/s |\n| 100 B      |  6.9 GB/s |  8.1 GB/s |\n| 4 KB       | 11.7 GB/s | 16.7 GB/s |\n| 10 MB      | 12.0 GB/s | 17.3 GB/s |\n\nThese numbers were generated on Ubuntu 20.04 with an Intel Xeon Platinum 8252C\nCPU using the following commands under Go 1.19.2:\n\n```\nbenchstat <(go test -tags purego -benchtime 500ms -count 15 -bench 'Sum64$')\nbenchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$')\n```\n\n## Projects using this package\n\n- [InfluxDB](https://github.com/influxdata/influxdb)\n- [Prometheus](https://github.com/prometheus/prometheus)\n- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics)\n- [FreeCache](https://github.com/coocood/freecache)\n- [FastCache](https://github.com/VictoriaMetrics/fastcache)\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash.go",
    "content": "// Package xxhash implements the 64-bit variant of xxHash (XXH64) as described\n// at http://cyan4973.github.io/xxHash/.\n// THIS IS VENDORED: Go to github.com/cespare/xxhash for original package.\n\npackage xxhash\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"math/bits\"\n)\n\nconst (\n\tprime1 uint64 = 11400714785074694791\n\tprime2 uint64 = 14029467366897019727\n\tprime3 uint64 = 1609587929392839161\n\tprime4 uint64 = 9650029242287828579\n\tprime5 uint64 = 2870177450012600261\n)\n\n// Store the primes in an array as well.\n//\n// The consts are used when possible in Go code to avoid MOVs but we need a\n// contiguous array of the assembly code.\nvar primes = [...]uint64{prime1, prime2, prime3, prime4, prime5}\n\n// Digest implements hash.Hash64.\ntype Digest struct {\n\tv1    uint64\n\tv2    uint64\n\tv3    uint64\n\tv4    uint64\n\ttotal uint64\n\tmem   [32]byte\n\tn     int // how much of mem is used\n}\n\n// New creates a new Digest that computes the 64-bit xxHash algorithm.\nfunc New() *Digest {\n\tvar d Digest\n\td.Reset()\n\treturn &d\n}\n\n// Reset clears the Digest's state so that it can be reused.\nfunc (d *Digest) Reset() {\n\td.v1 = primes[0] + prime2\n\td.v2 = prime2\n\td.v3 = 0\n\td.v4 = -primes[0]\n\td.total = 0\n\td.n = 0\n}\n\n// Size always returns 8 bytes.\nfunc (d *Digest) Size() int { return 8 }\n\n// BlockSize always returns 32 bytes.\nfunc (d *Digest) BlockSize() int { return 32 }\n\n// Write adds more data to d. It always returns len(b), nil.\nfunc (d *Digest) Write(b []byte) (n int, err error) {\n\tn = len(b)\n\td.total += uint64(n)\n\n\tmemleft := d.mem[d.n&(len(d.mem)-1):]\n\n\tif d.n+n < 32 {\n\t\t// This new data doesn't even fill the current block.\n\t\tcopy(memleft, b)\n\t\td.n += n\n\t\treturn\n\t}\n\n\tif d.n > 0 {\n\t\t// Finish off the partial block.\n\t\tc := copy(memleft, b)\n\t\td.v1 = round(d.v1, u64(d.mem[0:8]))\n\t\td.v2 = round(d.v2, u64(d.mem[8:16]))\n\t\td.v3 = round(d.v3, u64(d.mem[16:24]))\n\t\td.v4 = round(d.v4, u64(d.mem[24:32]))\n\t\tb = b[c:]\n\t\td.n = 0\n\t}\n\n\tif len(b) >= 32 {\n\t\t// One or more full blocks left.\n\t\tnw := writeBlocks(d, b)\n\t\tb = b[nw:]\n\t}\n\n\t// Store any remaining partial block.\n\tcopy(d.mem[:], b)\n\td.n = len(b)\n\n\treturn\n}\n\n// Sum appends the current hash to b and returns the resulting slice.\nfunc (d *Digest) Sum(b []byte) []byte {\n\ts := d.Sum64()\n\treturn append(\n\t\tb,\n\t\tbyte(s>>56),\n\t\tbyte(s>>48),\n\t\tbyte(s>>40),\n\t\tbyte(s>>32),\n\t\tbyte(s>>24),\n\t\tbyte(s>>16),\n\t\tbyte(s>>8),\n\t\tbyte(s),\n\t)\n}\n\n// Sum64 returns the current hash.\nfunc (d *Digest) Sum64() uint64 {\n\tvar h uint64\n\n\tif d.total >= 32 {\n\t\tv1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4\n\t\th = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)\n\t\th = mergeRound(h, v1)\n\t\th = mergeRound(h, v2)\n\t\th = mergeRound(h, v3)\n\t\th = mergeRound(h, v4)\n\t} else {\n\t\th = d.v3 + prime5\n\t}\n\n\th += d.total\n\n\tb := d.mem[:d.n&(len(d.mem)-1)]\n\tfor ; len(b) >= 8; b = b[8:] {\n\t\tk1 := round(0, u64(b[:8]))\n\t\th ^= k1\n\t\th = rol27(h)*prime1 + prime4\n\t}\n\tif len(b) >= 4 {\n\t\th ^= uint64(u32(b[:4])) * prime1\n\t\th = rol23(h)*prime2 + prime3\n\t\tb = b[4:]\n\t}\n\tfor ; len(b) > 0; b = b[1:] {\n\t\th ^= uint64(b[0]) * prime5\n\t\th = rol11(h) * prime1\n\t}\n\n\th ^= h >> 33\n\th *= prime2\n\th ^= h >> 29\n\th *= prime3\n\th ^= h >> 32\n\n\treturn h\n}\n\nconst (\n\tmagic         = \"xxh\\x06\"\n\tmarshaledSize = len(magic) + 8*5 + 32\n)\n\n// MarshalBinary implements the encoding.BinaryMarshaler interface.\nfunc (d *Digest) MarshalBinary() ([]byte, error) {\n\tb := make([]byte, 0, marshaledSize)\n\tb = append(b, magic...)\n\tb = appendUint64(b, d.v1)\n\tb = appendUint64(b, d.v2)\n\tb = appendUint64(b, d.v3)\n\tb = appendUint64(b, d.v4)\n\tb = appendUint64(b, d.total)\n\tb = append(b, d.mem[:d.n]...)\n\tb = b[:len(b)+len(d.mem)-d.n]\n\treturn b, nil\n}\n\n// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface.\nfunc (d *Digest) UnmarshalBinary(b []byte) error {\n\tif len(b) < len(magic) || string(b[:len(magic)]) != magic {\n\t\treturn errors.New(\"xxhash: invalid hash state identifier\")\n\t}\n\tif len(b) != marshaledSize {\n\t\treturn errors.New(\"xxhash: invalid hash state size\")\n\t}\n\tb = b[len(magic):]\n\tb, d.v1 = consumeUint64(b)\n\tb, d.v2 = consumeUint64(b)\n\tb, d.v3 = consumeUint64(b)\n\tb, d.v4 = consumeUint64(b)\n\tb, d.total = consumeUint64(b)\n\tcopy(d.mem[:], b)\n\td.n = int(d.total % uint64(len(d.mem)))\n\treturn nil\n}\n\nfunc appendUint64(b []byte, x uint64) []byte {\n\tvar a [8]byte\n\tbinary.LittleEndian.PutUint64(a[:], x)\n\treturn append(b, a[:]...)\n}\n\nfunc consumeUint64(b []byte) ([]byte, uint64) {\n\tx := u64(b)\n\treturn b[8:], x\n}\n\nfunc u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) }\nfunc u32(b []byte) uint32 { return binary.LittleEndian.Uint32(b) }\n\nfunc round(acc, input uint64) uint64 {\n\tacc += input * prime2\n\tacc = rol31(acc)\n\tacc *= prime1\n\treturn acc\n}\n\nfunc mergeRound(acc, val uint64) uint64 {\n\tval = round(0, val)\n\tacc ^= val\n\tacc = acc*prime1 + prime4\n\treturn acc\n}\n\nfunc rol1(x uint64) uint64  { return bits.RotateLeft64(x, 1) }\nfunc rol7(x uint64) uint64  { return bits.RotateLeft64(x, 7) }\nfunc rol11(x uint64) uint64 { return bits.RotateLeft64(x, 11) }\nfunc rol12(x uint64) uint64 { return bits.RotateLeft64(x, 12) }\nfunc rol18(x uint64) uint64 { return bits.RotateLeft64(x, 18) }\nfunc rol23(x uint64) uint64 { return bits.RotateLeft64(x, 23) }\nfunc rol27(x uint64) uint64 { return bits.RotateLeft64(x, 27) }\nfunc rol31(x uint64) uint64 { return bits.RotateLeft64(x, 31) }\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_amd64.s",
    "content": "//go:build !appengine && gc && !purego && !noasm\n// +build !appengine\n// +build gc\n// +build !purego\n// +build !noasm\n\n#include \"textflag.h\"\n\n// Registers:\n#define h      AX\n#define d      AX\n#define p      SI // pointer to advance through b\n#define n      DX\n#define end    BX // loop end\n#define v1     R8\n#define v2     R9\n#define v3     R10\n#define v4     R11\n#define x      R12\n#define prime1 R13\n#define prime2 R14\n#define prime4 DI\n\n#define round(acc, x) \\\n\tIMULQ prime2, x   \\\n\tADDQ  x, acc      \\\n\tROLQ  $31, acc    \\\n\tIMULQ prime1, acc\n\n// round0 performs the operation x = round(0, x).\n#define round0(x) \\\n\tIMULQ prime2, x \\\n\tROLQ  $31, x    \\\n\tIMULQ prime1, x\n\n// mergeRound applies a merge round on the two registers acc and x.\n// It assumes that prime1, prime2, and prime4 have been loaded.\n#define mergeRound(acc, x) \\\n\tround0(x)         \\\n\tXORQ  x, acc      \\\n\tIMULQ prime1, acc \\\n\tADDQ  prime4, acc\n\n// blockLoop processes as many 32-byte blocks as possible,\n// updating v1, v2, v3, and v4. It assumes that there is at least one block\n// to process.\n#define blockLoop() \\\nloop:  \\\n\tMOVQ +0(p), x  \\\n\tround(v1, x)   \\\n\tMOVQ +8(p), x  \\\n\tround(v2, x)   \\\n\tMOVQ +16(p), x \\\n\tround(v3, x)   \\\n\tMOVQ +24(p), x \\\n\tround(v4, x)   \\\n\tADDQ $32, p    \\\n\tCMPQ p, end    \\\n\tJLE  loop\n\n// func Sum64(b []byte) uint64\nTEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32\n\t// Load fixed primes.\n\tMOVQ ·primes+0(SB), prime1\n\tMOVQ ·primes+8(SB), prime2\n\tMOVQ ·primes+24(SB), prime4\n\n\t// Load slice.\n\tMOVQ b_base+0(FP), p\n\tMOVQ b_len+8(FP), n\n\tLEAQ (p)(n*1), end\n\n\t// The first loop limit will be len(b)-32.\n\tSUBQ $32, end\n\n\t// Check whether we have at least one block.\n\tCMPQ n, $32\n\tJLT  noBlocks\n\n\t// Set up initial state (v1, v2, v3, v4).\n\tMOVQ prime1, v1\n\tADDQ prime2, v1\n\tMOVQ prime2, v2\n\tXORQ v3, v3\n\tXORQ v4, v4\n\tSUBQ prime1, v4\n\n\tblockLoop()\n\n\tMOVQ v1, h\n\tROLQ $1, h\n\tMOVQ v2, x\n\tROLQ $7, x\n\tADDQ x, h\n\tMOVQ v3, x\n\tROLQ $12, x\n\tADDQ x, h\n\tMOVQ v4, x\n\tROLQ $18, x\n\tADDQ x, h\n\n\tmergeRound(h, v1)\n\tmergeRound(h, v2)\n\tmergeRound(h, v3)\n\tmergeRound(h, v4)\n\n\tJMP afterBlocks\n\nnoBlocks:\n\tMOVQ ·primes+32(SB), h\n\nafterBlocks:\n\tADDQ n, h\n\n\tADDQ $24, end\n\tCMPQ p, end\n\tJG   try4\n\nloop8:\n\tMOVQ  (p), x\n\tADDQ  $8, p\n\tround0(x)\n\tXORQ  x, h\n\tROLQ  $27, h\n\tIMULQ prime1, h\n\tADDQ  prime4, h\n\n\tCMPQ p, end\n\tJLE  loop8\n\ntry4:\n\tADDQ $4, end\n\tCMPQ p, end\n\tJG   try1\n\n\tMOVL  (p), x\n\tADDQ  $4, p\n\tIMULQ prime1, x\n\tXORQ  x, h\n\n\tROLQ  $23, h\n\tIMULQ prime2, h\n\tADDQ  ·primes+16(SB), h\n\ntry1:\n\tADDQ $4, end\n\tCMPQ p, end\n\tJGE  finalize\n\nloop1:\n\tMOVBQZX (p), x\n\tADDQ    $1, p\n\tIMULQ   ·primes+32(SB), x\n\tXORQ    x, h\n\tROLQ    $11, h\n\tIMULQ   prime1, h\n\n\tCMPQ p, end\n\tJL   loop1\n\nfinalize:\n\tMOVQ  h, x\n\tSHRQ  $33, x\n\tXORQ  x, h\n\tIMULQ prime2, h\n\tMOVQ  h, x\n\tSHRQ  $29, x\n\tXORQ  x, h\n\tIMULQ ·primes+16(SB), h\n\tMOVQ  h, x\n\tSHRQ  $32, x\n\tXORQ  x, h\n\n\tMOVQ h, ret+24(FP)\n\tRET\n\n// func writeBlocks(d *Digest, b []byte) int\nTEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40\n\t// Load fixed primes needed for round.\n\tMOVQ ·primes+0(SB), prime1\n\tMOVQ ·primes+8(SB), prime2\n\n\t// Load slice.\n\tMOVQ b_base+8(FP), p\n\tMOVQ b_len+16(FP), n\n\tLEAQ (p)(n*1), end\n\tSUBQ $32, end\n\n\t// Load vN from d.\n\tMOVQ s+0(FP), d\n\tMOVQ 0(d), v1\n\tMOVQ 8(d), v2\n\tMOVQ 16(d), v3\n\tMOVQ 24(d), v4\n\n\t// We don't need to check the loop condition here; this function is\n\t// always called with at least one block of data to process.\n\tblockLoop()\n\n\t// Copy vN back to d.\n\tMOVQ v1, 0(d)\n\tMOVQ v2, 8(d)\n\tMOVQ v3, 16(d)\n\tMOVQ v4, 24(d)\n\n\t// The number of bytes written is p minus the old base pointer.\n\tSUBQ b_base+8(FP), p\n\tMOVQ p, ret+32(FP)\n\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_arm64.s",
    "content": "//go:build !appengine && gc && !purego && !noasm\n// +build !appengine\n// +build gc\n// +build !purego\n// +build !noasm\n\n#include \"textflag.h\"\n\n// Registers:\n#define digest\tR1\n#define h\tR2 // return value\n#define p\tR3 // input pointer\n#define n\tR4 // input length\n#define nblocks\tR5 // n / 32\n#define prime1\tR7\n#define prime2\tR8\n#define prime3\tR9\n#define prime4\tR10\n#define prime5\tR11\n#define v1\tR12\n#define v2\tR13\n#define v3\tR14\n#define v4\tR15\n#define x1\tR20\n#define x2\tR21\n#define x3\tR22\n#define x4\tR23\n\n#define round(acc, x) \\\n\tMADD prime2, acc, x, acc \\\n\tROR  $64-31, acc         \\\n\tMUL  prime1, acc\n\n// round0 performs the operation x = round(0, x).\n#define round0(x) \\\n\tMUL prime2, x \\\n\tROR $64-31, x \\\n\tMUL prime1, x\n\n#define mergeRound(acc, x) \\\n\tround0(x)                     \\\n\tEOR  x, acc                   \\\n\tMADD acc, prime4, prime1, acc\n\n// blockLoop processes as many 32-byte blocks as possible,\n// updating v1, v2, v3, and v4. It assumes that n >= 32.\n#define blockLoop() \\\n\tLSR     $5, n, nblocks  \\\n\tPCALIGN $16             \\\n\tloop:                   \\\n\tLDP.P   16(p), (x1, x2) \\\n\tLDP.P   16(p), (x3, x4) \\\n\tround(v1, x1)           \\\n\tround(v2, x2)           \\\n\tround(v3, x3)           \\\n\tround(v4, x4)           \\\n\tSUB     $1, nblocks     \\\n\tCBNZ    nblocks, loop\n\n// func Sum64(b []byte) uint64\nTEXT ·Sum64(SB), NOSPLIT|NOFRAME, $0-32\n\tLDP b_base+0(FP), (p, n)\n\n\tLDP  ·primes+0(SB), (prime1, prime2)\n\tLDP  ·primes+16(SB), (prime3, prime4)\n\tMOVD ·primes+32(SB), prime5\n\n\tCMP  $32, n\n\tCSEL LT, prime5, ZR, h // if n < 32 { h = prime5 } else { h = 0 }\n\tBLT  afterLoop\n\n\tADD  prime1, prime2, v1\n\tMOVD prime2, v2\n\tMOVD $0, v3\n\tNEG  prime1, v4\n\n\tblockLoop()\n\n\tROR $64-1, v1, x1\n\tROR $64-7, v2, x2\n\tADD x1, x2\n\tROR $64-12, v3, x3\n\tROR $64-18, v4, x4\n\tADD x3, x4\n\tADD x2, x4, h\n\n\tmergeRound(h, v1)\n\tmergeRound(h, v2)\n\tmergeRound(h, v3)\n\tmergeRound(h, v4)\n\nafterLoop:\n\tADD n, h\n\n\tTBZ   $4, n, try8\n\tLDP.P 16(p), (x1, x2)\n\n\tround0(x1)\n\n\t// NOTE: here and below, sequencing the EOR after the ROR (using a\n\t// rotated register) is worth a small but measurable speedup for small\n\t// inputs.\n\tROR  $64-27, h\n\tEOR  x1 @> 64-27, h, h\n\tMADD h, prime4, prime1, h\n\n\tround0(x2)\n\tROR  $64-27, h\n\tEOR  x2 @> 64-27, h, h\n\tMADD h, prime4, prime1, h\n\ntry8:\n\tTBZ    $3, n, try4\n\tMOVD.P 8(p), x1\n\n\tround0(x1)\n\tROR  $64-27, h\n\tEOR  x1 @> 64-27, h, h\n\tMADD h, prime4, prime1, h\n\ntry4:\n\tTBZ     $2, n, try2\n\tMOVWU.P 4(p), x2\n\n\tMUL  prime1, x2\n\tROR  $64-23, h\n\tEOR  x2 @> 64-23, h, h\n\tMADD h, prime3, prime2, h\n\ntry2:\n\tTBZ     $1, n, try1\n\tMOVHU.P 2(p), x3\n\tAND     $255, x3, x1\n\tLSR     $8, x3, x2\n\n\tMUL prime5, x1\n\tROR $64-11, h\n\tEOR x1 @> 64-11, h, h\n\tMUL prime1, h\n\n\tMUL prime5, x2\n\tROR $64-11, h\n\tEOR x2 @> 64-11, h, h\n\tMUL prime1, h\n\ntry1:\n\tTBZ   $0, n, finalize\n\tMOVBU (p), x4\n\n\tMUL prime5, x4\n\tROR $64-11, h\n\tEOR x4 @> 64-11, h, h\n\tMUL prime1, h\n\nfinalize:\n\tEOR h >> 33, h\n\tMUL prime2, h\n\tEOR h >> 29, h\n\tMUL prime3, h\n\tEOR h >> 32, h\n\n\tMOVD h, ret+24(FP)\n\tRET\n\n// func writeBlocks(d *Digest, b []byte) int\nTEXT ·writeBlocks(SB), NOSPLIT|NOFRAME, $0-40\n\tLDP ·primes+0(SB), (prime1, prime2)\n\n\t// Load state. Assume v[1-4] are stored contiguously.\n\tMOVD d+0(FP), digest\n\tLDP  0(digest), (v1, v2)\n\tLDP  16(digest), (v3, v4)\n\n\tLDP b_base+8(FP), (p, n)\n\n\tblockLoop()\n\n\t// Store updated state.\n\tSTP (v1, v2), 0(digest)\n\tSTP (v3, v4), 16(digest)\n\n\tBIC  $31, n\n\tMOVD n, ret+32(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_asm.go",
    "content": "//go:build (amd64 || arm64) && !appengine && gc && !purego && !noasm\n// +build amd64 arm64\n// +build !appengine\n// +build gc\n// +build !purego\n// +build !noasm\n\npackage xxhash\n\n// Sum64 computes the 64-bit xxHash digest of b.\n//\n//go:noescape\nfunc Sum64(b []byte) uint64\n\n//go:noescape\nfunc writeBlocks(s *Digest, b []byte) int\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_other.go",
    "content": "//go:build (!amd64 && !arm64) || appengine || !gc || purego || noasm\n// +build !amd64,!arm64 appengine !gc purego noasm\n\npackage xxhash\n\n// Sum64 computes the 64-bit xxHash digest of b.\nfunc Sum64(b []byte) uint64 {\n\t// A simpler version would be\n\t//   d := New()\n\t//   d.Write(b)\n\t//   return d.Sum64()\n\t// but this is faster, particularly for small inputs.\n\n\tn := len(b)\n\tvar h uint64\n\n\tif n >= 32 {\n\t\tv1 := primes[0] + prime2\n\t\tv2 := prime2\n\t\tv3 := uint64(0)\n\t\tv4 := -primes[0]\n\t\tfor len(b) >= 32 {\n\t\t\tv1 = round(v1, u64(b[0:8:len(b)]))\n\t\t\tv2 = round(v2, u64(b[8:16:len(b)]))\n\t\t\tv3 = round(v3, u64(b[16:24:len(b)]))\n\t\t\tv4 = round(v4, u64(b[24:32:len(b)]))\n\t\t\tb = b[32:len(b):len(b)]\n\t\t}\n\t\th = rol1(v1) + rol7(v2) + rol12(v3) + rol18(v4)\n\t\th = mergeRound(h, v1)\n\t\th = mergeRound(h, v2)\n\t\th = mergeRound(h, v3)\n\t\th = mergeRound(h, v4)\n\t} else {\n\t\th = prime5\n\t}\n\n\th += uint64(n)\n\n\tfor ; len(b) >= 8; b = b[8:] {\n\t\tk1 := round(0, u64(b[:8]))\n\t\th ^= k1\n\t\th = rol27(h)*prime1 + prime4\n\t}\n\tif len(b) >= 4 {\n\t\th ^= uint64(u32(b[:4])) * prime1\n\t\th = rol23(h)*prime2 + prime3\n\t\tb = b[4:]\n\t}\n\tfor ; len(b) > 0; b = b[1:] {\n\t\th ^= uint64(b[0]) * prime5\n\t\th = rol11(h) * prime1\n\t}\n\n\th ^= h >> 33\n\th *= prime2\n\th ^= h >> 29\n\th *= prime3\n\th ^= h >> 32\n\n\treturn h\n}\n\nfunc writeBlocks(d *Digest, b []byte) int {\n\tv1, v2, v3, v4 := d.v1, d.v2, d.v3, d.v4\n\tn := len(b)\n\tfor len(b) >= 32 {\n\t\tv1 = round(v1, u64(b[0:8:len(b)]))\n\t\tv2 = round(v2, u64(b[8:16:len(b)]))\n\t\tv3 = round(v3, u64(b[16:24:len(b)]))\n\t\tv4 = round(v4, u64(b[24:32:len(b)]))\n\t\tb = b[32:len(b):len(b)]\n\t}\n\td.v1, d.v2, d.v3, d.v4 = v1, v2, v3, v4\n\treturn n - len(b)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/internal/xxhash/xxhash_safe.go",
    "content": "package xxhash\n\n// Sum64String computes the 64-bit xxHash digest of s.\nfunc Sum64String(s string) uint64 {\n\treturn Sum64([]byte(s))\n}\n\n// WriteString adds more data to d. It always returns len(s), nil.\nfunc (d *Digest) WriteString(s string) (n int, err error) {\n\treturn d.Write([]byte(s))\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/matchlen_amd64.go",
    "content": "//go:build amd64 && !appengine && !noasm && gc\n// +build amd64,!appengine,!noasm,gc\n\n// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n\npackage zstd\n\n// matchLen returns how many bytes match in a and b\n//\n// It assumes that:\n//\n//\tlen(a) <= len(b) and len(a) > 0\n//\n//go:noescape\nfunc matchLen(a []byte, b []byte) int\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/matchlen_amd64.s",
    "content": "// Copied from S2 implementation.\n\n//go:build !appengine && !noasm && gc && !noasm\n\n#include \"textflag.h\"\n\n// func matchLen(a []byte, b []byte) int\n// Requires: BMI\nTEXT ·matchLen(SB), NOSPLIT, $0-56\n\tMOVQ a_base+0(FP), AX\n\tMOVQ b_base+24(FP), CX\n\tMOVQ a_len+8(FP), DX\n\n\t// matchLen\n\tXORL SI, SI\n\tCMPL DX, $0x08\n\tJB   matchlen_match4_standalone\n\nmatchlen_loopback_standalone:\n\tMOVQ  (AX)(SI*1), BX\n\tXORQ  (CX)(SI*1), BX\n\tTESTQ BX, BX\n\tJZ    matchlen_loop_standalone\n\n#ifdef GOAMD64_v3\n\tTZCNTQ BX, BX\n#else\n\tBSFQ BX, BX\n#endif\n\tSARQ $0x03, BX\n\tLEAL (SI)(BX*1), SI\n\tJMP  gen_match_len_end\n\nmatchlen_loop_standalone:\n\tLEAL -8(DX), DX\n\tLEAL 8(SI), SI\n\tCMPL DX, $0x08\n\tJAE  matchlen_loopback_standalone\n\nmatchlen_match4_standalone:\n\tCMPL DX, $0x04\n\tJB   matchlen_match2_standalone\n\tMOVL (AX)(SI*1), BX\n\tCMPL (CX)(SI*1), BX\n\tJNE  matchlen_match2_standalone\n\tLEAL -4(DX), DX\n\tLEAL 4(SI), SI\n\nmatchlen_match2_standalone:\n\tCMPL DX, $0x02\n\tJB   matchlen_match1_standalone\n\tMOVW (AX)(SI*1), BX\n\tCMPW (CX)(SI*1), BX\n\tJNE  matchlen_match1_standalone\n\tLEAL -2(DX), DX\n\tLEAL 2(SI), SI\n\nmatchlen_match1_standalone:\n\tCMPL DX, $0x01\n\tJB   gen_match_len_end\n\tMOVB (AX)(SI*1), BL\n\tCMPB (CX)(SI*1), BL\n\tJNE  gen_match_len_end\n\tINCL SI\n\ngen_match_len_end:\n\tMOVQ SI, ret+48(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/matchlen_generic.go",
    "content": "//go:build !amd64 || appengine || !gc || noasm\n// +build !amd64 appengine !gc noasm\n\n// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n\npackage zstd\n\nimport (\n\t\"encoding/binary\"\n\t\"math/bits\"\n)\n\n// matchLen returns the maximum common prefix length of a and b.\n// a must be the shortest of the two.\nfunc matchLen(a, b []byte) (n int) {\n\tfor ; len(a) >= 8 && len(b) >= 8; a, b = a[8:], b[8:] {\n\t\tdiff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b)\n\t\tif diff != 0 {\n\t\t\treturn n + bits.TrailingZeros64(diff)>>3\n\t\t}\n\t\tn += 8\n\t}\n\n\tfor i := range a {\n\t\tif a[i] != b[i] {\n\t\t\tbreak\n\t\t}\n\t\tn++\n\t}\n\treturn n\n\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/seqdec.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\ntype seq struct {\n\tlitLen   uint32\n\tmatchLen uint32\n\toffset   uint32\n\n\t// Codes are stored here for the encoder\n\t// so they only have to be looked up once.\n\tllCode, mlCode, ofCode uint8\n}\n\ntype seqVals struct {\n\tll, ml, mo int\n}\n\nfunc (s seq) String() string {\n\tif s.offset <= 3 {\n\t\tif s.offset == 0 {\n\t\t\treturn fmt.Sprint(\"litLen:\", s.litLen, \", matchLen:\", s.matchLen+zstdMinMatch, \", offset: INVALID (0)\")\n\t\t}\n\t\treturn fmt.Sprint(\"litLen:\", s.litLen, \", matchLen:\", s.matchLen+zstdMinMatch, \", offset:\", s.offset, \" (repeat)\")\n\t}\n\treturn fmt.Sprint(\"litLen:\", s.litLen, \", matchLen:\", s.matchLen+zstdMinMatch, \", offset:\", s.offset-3, \" (new)\")\n}\n\ntype seqCompMode uint8\n\nconst (\n\tcompModePredefined seqCompMode = iota\n\tcompModeRLE\n\tcompModeFSE\n\tcompModeRepeat\n)\n\ntype sequenceDec struct {\n\t// decoder keeps track of the current state and updates it from the bitstream.\n\tfse    *fseDecoder\n\tstate  fseState\n\trepeat bool\n}\n\n// init the state of the decoder with input from stream.\nfunc (s *sequenceDec) init(br *bitReader) error {\n\tif s.fse == nil {\n\t\treturn errors.New(\"sequence decoder not defined\")\n\t}\n\ts.state.init(br, s.fse.actualTableLog, s.fse.dt[:1<<s.fse.actualTableLog])\n\treturn nil\n}\n\n// sequenceDecs contains all 3 sequence decoders and their state.\ntype sequenceDecs struct {\n\tlitLengths   sequenceDec\n\toffsets      sequenceDec\n\tmatchLengths sequenceDec\n\tprevOffset   [3]int\n\tdict         []byte\n\tliterals     []byte\n\tout          []byte\n\tnSeqs        int\n\tbr           *bitReader\n\tseqSize      int\n\twindowSize   int\n\tmaxBits      uint8\n\tmaxSyncLen   uint64\n}\n\n// initialize all 3 decoders from the stream input.\nfunc (s *sequenceDecs) initialize(br *bitReader, hist *history, out []byte) error {\n\tif err := s.litLengths.init(br); err != nil {\n\t\treturn errors.New(\"litLengths:\" + err.Error())\n\t}\n\tif err := s.offsets.init(br); err != nil {\n\t\treturn errors.New(\"offsets:\" + err.Error())\n\t}\n\tif err := s.matchLengths.init(br); err != nil {\n\t\treturn errors.New(\"matchLengths:\" + err.Error())\n\t}\n\ts.br = br\n\ts.prevOffset = hist.recentOffsets\n\ts.maxBits = s.litLengths.fse.maxBits + s.offsets.fse.maxBits + s.matchLengths.fse.maxBits\n\ts.windowSize = hist.windowSize\n\ts.out = out\n\ts.dict = nil\n\tif hist.dict != nil {\n\t\ts.dict = hist.dict.content\n\t}\n\treturn nil\n}\n\nfunc (s *sequenceDecs) freeDecoders() {\n\tif f := s.litLengths.fse; f != nil && !f.preDefined {\n\t\tfseDecoderPool.Put(f)\n\t\ts.litLengths.fse = nil\n\t}\n\tif f := s.offsets.fse; f != nil && !f.preDefined {\n\t\tfseDecoderPool.Put(f)\n\t\ts.offsets.fse = nil\n\t}\n\tif f := s.matchLengths.fse; f != nil && !f.preDefined {\n\t\tfseDecoderPool.Put(f)\n\t\ts.matchLengths.fse = nil\n\t}\n}\n\n// execute will execute the decoded sequence with the provided history.\n// The sequence must be evaluated before being sent.\nfunc (s *sequenceDecs) execute(seqs []seqVals, hist []byte) error {\n\tif len(s.dict) == 0 {\n\t\treturn s.executeSimple(seqs, hist)\n\t}\n\n\t// Ensure we have enough output size...\n\tif len(s.out)+s.seqSize > cap(s.out) {\n\t\taddBytes := s.seqSize + len(s.out)\n\t\ts.out = append(s.out, make([]byte, addBytes)...)\n\t\ts.out = s.out[:len(s.out)-addBytes]\n\t}\n\n\tif debugDecoder {\n\t\tprintf(\"Execute %d seqs with hist %d, dict %d, literals: %d into %d bytes\\n\", len(seqs), len(hist), len(s.dict), len(s.literals), s.seqSize)\n\t}\n\n\tvar t = len(s.out)\n\tout := s.out[:t+s.seqSize]\n\n\tfor _, seq := range seqs {\n\t\t// Add literals\n\t\tcopy(out[t:], s.literals[:seq.ll])\n\t\tt += seq.ll\n\t\ts.literals = s.literals[seq.ll:]\n\n\t\t// Copy from dictionary...\n\t\tif seq.mo > t+len(hist) || seq.mo > s.windowSize {\n\t\t\tif len(s.dict) == 0 {\n\t\t\t\treturn fmt.Errorf(\"match offset (%d) bigger than current history (%d)\", seq.mo, t+len(hist))\n\t\t\t}\n\n\t\t\t// we may be in dictionary.\n\t\t\tdictO := len(s.dict) - (seq.mo - (t + len(hist)))\n\t\t\tif dictO < 0 || dictO >= len(s.dict) {\n\t\t\t\treturn fmt.Errorf(\"match offset (%d) bigger than current history+dict (%d)\", seq.mo, t+len(hist)+len(s.dict))\n\t\t\t}\n\t\t\tend := dictO + seq.ml\n\t\t\tif end > len(s.dict) {\n\t\t\t\tn := len(s.dict) - dictO\n\t\t\t\tcopy(out[t:], s.dict[dictO:])\n\t\t\t\tt += n\n\t\t\t\tseq.ml -= n\n\t\t\t} else {\n\t\t\t\tcopy(out[t:], s.dict[dictO:end])\n\t\t\t\tt += end - dictO\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// Copy from history.\n\t\tif v := seq.mo - t; v > 0 {\n\t\t\t// v is the start position in history from end.\n\t\t\tstart := len(hist) - v\n\t\t\tif seq.ml > v {\n\t\t\t\t// Some goes into current block.\n\t\t\t\t// Copy remainder of history\n\t\t\t\tcopy(out[t:], hist[start:])\n\t\t\t\tt += v\n\t\t\t\tseq.ml -= v\n\t\t\t} else {\n\t\t\t\tcopy(out[t:], hist[start:start+seq.ml])\n\t\t\t\tt += seq.ml\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\t// We must be in current buffer now\n\t\tif seq.ml > 0 {\n\t\t\tstart := t - seq.mo\n\t\t\tif seq.ml <= t-start {\n\t\t\t\t// No overlap\n\t\t\t\tcopy(out[t:], out[start:start+seq.ml])\n\t\t\t\tt += seq.ml\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\t// Overlapping copy\n\t\t\t\t// Extend destination slice and copy one byte at the time.\n\t\t\t\tsrc := out[start : start+seq.ml]\n\t\t\t\tdst := out[t:]\n\t\t\t\tdst = dst[:len(src)]\n\t\t\t\tt += len(src)\n\t\t\t\t// Destination is the space we just added.\n\t\t\t\tfor i := range src {\n\t\t\t\t\tdst[i] = src[i]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add final literals\n\tcopy(out[t:], s.literals)\n\tif debugDecoder {\n\t\tt += len(s.literals)\n\t\tif t != len(out) {\n\t\t\tpanic(fmt.Errorf(\"length mismatch, want %d, got %d, ss: %d\", len(out), t, s.seqSize))\n\t\t}\n\t}\n\ts.out = out\n\n\treturn nil\n}\n\n// decode sequences from the stream with the provided history.\nfunc (s *sequenceDecs) decodeSync(hist []byte) error {\n\tsupported, err := s.decodeSyncSimple(hist)\n\tif supported {\n\t\treturn err\n\t}\n\n\tbr := s.br\n\tseqs := s.nSeqs\n\tstartSize := len(s.out)\n\t// Grab full sizes tables, to avoid bounds checks.\n\tllTable, mlTable, ofTable := s.litLengths.fse.dt[:maxTablesize], s.matchLengths.fse.dt[:maxTablesize], s.offsets.fse.dt[:maxTablesize]\n\tllState, mlState, ofState := s.litLengths.state.state, s.matchLengths.state.state, s.offsets.state.state\n\tout := s.out\n\tmaxBlockSize := maxCompressedBlockSize\n\tif s.windowSize < maxBlockSize {\n\t\tmaxBlockSize = s.windowSize\n\t}\n\n\tif debugDecoder {\n\t\tprintln(\"decodeSync: decoding\", seqs, \"sequences\", br.remain(), \"bits remain on stream\")\n\t}\n\tfor i := seqs - 1; i >= 0; i-- {\n\t\tif br.overread() {\n\t\t\tprintf(\"reading sequence %d, exceeded available data. Overread by %d\\n\", seqs-i, -br.remain())\n\t\t\treturn io.ErrUnexpectedEOF\n\t\t}\n\t\tvar ll, mo, ml int\n\t\tif len(br.in) > 4+((maxOffsetBits+16+16)>>3) {\n\t\t\t// inlined function:\n\t\t\t// ll, mo, ml = s.nextFast(br, llState, mlState, ofState)\n\n\t\t\t// Final will not read from stream.\n\t\t\tvar llB, mlB, moB uint8\n\t\t\tll, llB = llState.final()\n\t\t\tml, mlB = mlState.final()\n\t\t\tmo, moB = ofState.final()\n\n\t\t\t// extra bits are stored in reverse order.\n\t\t\tbr.fillFast()\n\t\t\tmo += br.getBits(moB)\n\t\t\tif s.maxBits > 32 {\n\t\t\t\tbr.fillFast()\n\t\t\t}\n\t\t\tml += br.getBits(mlB)\n\t\t\tll += br.getBits(llB)\n\n\t\t\tif moB > 1 {\n\t\t\t\ts.prevOffset[2] = s.prevOffset[1]\n\t\t\t\ts.prevOffset[1] = s.prevOffset[0]\n\t\t\t\ts.prevOffset[0] = mo\n\t\t\t} else {\n\t\t\t\t// mo = s.adjustOffset(mo, ll, moB)\n\t\t\t\t// Inlined for rather big speedup\n\t\t\t\tif ll == 0 {\n\t\t\t\t\t// There is an exception though, when current sequence's literals_length = 0.\n\t\t\t\t\t// In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2,\n\t\t\t\t\t// an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte.\n\t\t\t\t\tmo++\n\t\t\t\t}\n\n\t\t\t\tif mo == 0 {\n\t\t\t\t\tmo = s.prevOffset[0]\n\t\t\t\t} else {\n\t\t\t\t\tvar temp int\n\t\t\t\t\tif mo == 3 {\n\t\t\t\t\t\ttemp = s.prevOffset[0] - 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttemp = s.prevOffset[mo]\n\t\t\t\t\t}\n\n\t\t\t\t\tif temp == 0 {\n\t\t\t\t\t\t// 0 is not valid; input is corrupted; force offset to 1\n\t\t\t\t\t\tprintln(\"WARNING: temp was 0\")\n\t\t\t\t\t\ttemp = 1\n\t\t\t\t\t}\n\n\t\t\t\t\tif mo != 1 {\n\t\t\t\t\t\ts.prevOffset[2] = s.prevOffset[1]\n\t\t\t\t\t}\n\t\t\t\t\ts.prevOffset[1] = s.prevOffset[0]\n\t\t\t\t\ts.prevOffset[0] = temp\n\t\t\t\t\tmo = temp\n\t\t\t\t}\n\t\t\t}\n\t\t\tbr.fillFast()\n\t\t} else {\n\t\t\tll, mo, ml = s.next(br, llState, mlState, ofState)\n\t\t\tbr.fill()\n\t\t}\n\n\t\tif debugSequences {\n\t\t\tprintln(\"Seq\", seqs-i-1, \"Litlen:\", ll, \"mo:\", mo, \"(abs) ml:\", ml)\n\t\t}\n\n\t\tif ll > len(s.literals) {\n\t\t\treturn fmt.Errorf(\"unexpected literal count, want %d bytes, but only %d is available\", ll, len(s.literals))\n\t\t}\n\t\tsize := ll + ml + len(out)\n\t\tif size-startSize > maxBlockSize {\n\t\t\treturn fmt.Errorf(\"output bigger than max block size (%d)\", maxBlockSize)\n\t\t}\n\t\tif size > cap(out) {\n\t\t\t// Not enough size, which can happen under high volume block streaming conditions\n\t\t\t// but could be if destination slice is too small for sync operations.\n\t\t\t// over-allocating here can create a large amount of GC pressure so we try to keep\n\t\t\t// it as contained as possible\n\t\t\tused := len(out) - startSize\n\t\t\taddBytes := 256 + ll + ml + used>>2\n\t\t\t// Clamp to max block size.\n\t\t\tif used+addBytes > maxBlockSize {\n\t\t\t\taddBytes = maxBlockSize - used\n\t\t\t}\n\t\t\tout = append(out, make([]byte, addBytes)...)\n\t\t\tout = out[:len(out)-addBytes]\n\t\t}\n\t\tif ml > maxMatchLen {\n\t\t\treturn fmt.Errorf(\"match len (%d) bigger than max allowed length\", ml)\n\t\t}\n\n\t\t// Add literals\n\t\tout = append(out, s.literals[:ll]...)\n\t\ts.literals = s.literals[ll:]\n\n\t\tif mo == 0 && ml > 0 {\n\t\t\treturn fmt.Errorf(\"zero matchoff and matchlen (%d) > 0\", ml)\n\t\t}\n\n\t\tif mo > len(out)+len(hist) || mo > s.windowSize {\n\t\t\tif len(s.dict) == 0 {\n\t\t\t\treturn fmt.Errorf(\"match offset (%d) bigger than current history (%d)\", mo, len(out)+len(hist)-startSize)\n\t\t\t}\n\n\t\t\t// we may be in dictionary.\n\t\t\tdictO := len(s.dict) - (mo - (len(out) + len(hist)))\n\t\t\tif dictO < 0 || dictO >= len(s.dict) {\n\t\t\t\treturn fmt.Errorf(\"match offset (%d) bigger than current history (%d)\", mo, len(out)+len(hist)-startSize)\n\t\t\t}\n\t\t\tend := dictO + ml\n\t\t\tif end > len(s.dict) {\n\t\t\t\tout = append(out, s.dict[dictO:]...)\n\t\t\t\tml -= len(s.dict) - dictO\n\t\t\t} else {\n\t\t\t\tout = append(out, s.dict[dictO:end]...)\n\t\t\t\tmo = 0\n\t\t\t\tml = 0\n\t\t\t}\n\t\t}\n\n\t\t// Copy from history.\n\t\t// TODO: Blocks without history could be made to ignore this completely.\n\t\tif v := mo - len(out); v > 0 {\n\t\t\t// v is the start position in history from end.\n\t\t\tstart := len(hist) - v\n\t\t\tif ml > v {\n\t\t\t\t// Some goes into current block.\n\t\t\t\t// Copy remainder of history\n\t\t\t\tout = append(out, hist[start:]...)\n\t\t\t\tml -= v\n\t\t\t} else {\n\t\t\t\tout = append(out, hist[start:start+ml]...)\n\t\t\t\tml = 0\n\t\t\t}\n\t\t}\n\t\t// We must be in current buffer now\n\t\tif ml > 0 {\n\t\t\tstart := len(out) - mo\n\t\t\tif ml <= len(out)-start {\n\t\t\t\t// No overlap\n\t\t\t\tout = append(out, out[start:start+ml]...)\n\t\t\t} else {\n\t\t\t\t// Overlapping copy\n\t\t\t\t// Extend destination slice and copy one byte at the time.\n\t\t\t\tout = out[:len(out)+ml]\n\t\t\t\tsrc := out[start : start+ml]\n\t\t\t\t// Destination is the space we just added.\n\t\t\t\tdst := out[len(out)-ml:]\n\t\t\t\tdst = dst[:len(src)]\n\t\t\t\tfor i := range src {\n\t\t\t\t\tdst[i] = src[i]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif i == 0 {\n\t\t\t// This is the last sequence, so we shouldn't update state.\n\t\t\tbreak\n\t\t}\n\n\t\t// Manually inlined, ~ 5-20% faster\n\t\t// Update all 3 states at once. Approx 20% faster.\n\t\tnBits := llState.nbBits() + mlState.nbBits() + ofState.nbBits()\n\t\tif nBits == 0 {\n\t\t\tllState = llTable[llState.newState()&maxTableMask]\n\t\t\tmlState = mlTable[mlState.newState()&maxTableMask]\n\t\t\tofState = ofTable[ofState.newState()&maxTableMask]\n\t\t} else {\n\t\t\tbits := br.get32BitsFast(nBits)\n\n\t\t\tlowBits := uint16(bits >> ((ofState.nbBits() + mlState.nbBits()) & 31))\n\t\t\tllState = llTable[(llState.newState()+lowBits)&maxTableMask]\n\n\t\t\tlowBits = uint16(bits >> (ofState.nbBits() & 31))\n\t\t\tlowBits &= bitMask[mlState.nbBits()&15]\n\t\t\tmlState = mlTable[(mlState.newState()+lowBits)&maxTableMask]\n\n\t\t\tlowBits = uint16(bits) & bitMask[ofState.nbBits()&15]\n\t\t\tofState = ofTable[(ofState.newState()+lowBits)&maxTableMask]\n\t\t}\n\t}\n\n\tif size := len(s.literals) + len(out) - startSize; size > maxBlockSize {\n\t\treturn fmt.Errorf(\"output bigger than max block size (%d)\", maxBlockSize)\n\t}\n\n\t// Add final literals\n\ts.out = append(out, s.literals...)\n\treturn br.close()\n}\n\nvar bitMask [16]uint16\n\nfunc init() {\n\tfor i := range bitMask[:] {\n\t\tbitMask[i] = uint16((1 << uint(i)) - 1)\n\t}\n}\n\nfunc (s *sequenceDecs) next(br *bitReader, llState, mlState, ofState decSymbol) (ll, mo, ml int) {\n\t// Final will not read from stream.\n\tll, llB := llState.final()\n\tml, mlB := mlState.final()\n\tmo, moB := ofState.final()\n\n\t// extra bits are stored in reverse order.\n\tbr.fill()\n\tmo += br.getBits(moB)\n\tif s.maxBits > 32 {\n\t\tbr.fill()\n\t}\n\t// matchlength+literal length, max 32 bits\n\tml += br.getBits(mlB)\n\tll += br.getBits(llB)\n\tmo = s.adjustOffset(mo, ll, moB)\n\treturn\n}\n\nfunc (s *sequenceDecs) adjustOffset(offset, litLen int, offsetB uint8) int {\n\tif offsetB > 1 {\n\t\ts.prevOffset[2] = s.prevOffset[1]\n\t\ts.prevOffset[1] = s.prevOffset[0]\n\t\ts.prevOffset[0] = offset\n\t\treturn offset\n\t}\n\n\tif litLen == 0 {\n\t\t// There is an exception though, when current sequence's literals_length = 0.\n\t\t// In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2,\n\t\t// an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte.\n\t\toffset++\n\t}\n\n\tif offset == 0 {\n\t\treturn s.prevOffset[0]\n\t}\n\tvar temp int\n\tif offset == 3 {\n\t\ttemp = s.prevOffset[0] - 1\n\t} else {\n\t\ttemp = s.prevOffset[offset]\n\t}\n\n\tif temp == 0 {\n\t\t// 0 is not valid; input is corrupted; force offset to 1\n\t\tprintln(\"temp was 0\")\n\t\ttemp = 1\n\t}\n\n\tif offset != 1 {\n\t\ts.prevOffset[2] = s.prevOffset[1]\n\t}\n\ts.prevOffset[1] = s.prevOffset[0]\n\ts.prevOffset[0] = temp\n\treturn temp\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go",
    "content": "//go:build amd64 && !appengine && !noasm && gc\n// +build amd64,!appengine,!noasm,gc\n\npackage zstd\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/klauspost/compress/internal/cpuinfo\"\n)\n\ntype decodeSyncAsmContext struct {\n\tllTable     []decSymbol\n\tmlTable     []decSymbol\n\tofTable     []decSymbol\n\tllState     uint64\n\tmlState     uint64\n\tofState     uint64\n\titeration   int\n\tlitRemain   int\n\tout         []byte\n\toutPosition int\n\tliterals    []byte\n\tlitPosition int\n\thistory     []byte\n\twindowSize  int\n\tll          int // set on error (not for all errors, please refer to _generate/gen.go)\n\tml          int // set on error (not for all errors, please refer to _generate/gen.go)\n\tmo          int // set on error (not for all errors, please refer to _generate/gen.go)\n}\n\n// sequenceDecs_decodeSync_amd64 implements the main loop of sequenceDecs.decodeSync in x86 asm.\n//\n// Please refer to seqdec_generic.go for the reference implementation.\n//\n//go:noescape\nfunc sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n\n// sequenceDecs_decodeSync_bmi2 implements the main loop of sequenceDecs.decodeSync in x86 asm with BMI2 extensions.\n//\n//go:noescape\nfunc sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n\n// sequenceDecs_decodeSync_safe_amd64 does the same as above, but does not write more than output buffer.\n//\n//go:noescape\nfunc sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n\n// sequenceDecs_decodeSync_safe_bmi2 does the same as above, but does not write more than output buffer.\n//\n//go:noescape\nfunc sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n\n// decode sequences from the stream with the provided history but without a dictionary.\nfunc (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) {\n\tif len(s.dict) > 0 {\n\t\treturn false, nil\n\t}\n\tif s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize {\n\t\treturn false, nil\n\t}\n\n\t// FIXME: Using unsafe memory copies leads to rare, random crashes\n\t// with fuzz testing. It is therefore disabled for now.\n\tconst useSafe = true\n\t/*\n\t\tuseSafe := false\n\t\tif s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc {\n\t\t\tuseSafe = true\n\t\t}\n\t\tif s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) {\n\t\t\tuseSafe = true\n\t\t}\n\t\tif cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {\n\t\t\tuseSafe = true\n\t\t}\n\t*/\n\n\tbr := s.br\n\n\tmaxBlockSize := maxCompressedBlockSize\n\tif s.windowSize < maxBlockSize {\n\t\tmaxBlockSize = s.windowSize\n\t}\n\n\tctx := decodeSyncAsmContext{\n\t\tllTable:     s.litLengths.fse.dt[:maxTablesize],\n\t\tmlTable:     s.matchLengths.fse.dt[:maxTablesize],\n\t\tofTable:     s.offsets.fse.dt[:maxTablesize],\n\t\tllState:     uint64(s.litLengths.state.state),\n\t\tmlState:     uint64(s.matchLengths.state.state),\n\t\tofState:     uint64(s.offsets.state.state),\n\t\titeration:   s.nSeqs - 1,\n\t\tlitRemain:   len(s.literals),\n\t\tout:         s.out,\n\t\toutPosition: len(s.out),\n\t\tliterals:    s.literals,\n\t\twindowSize:  s.windowSize,\n\t\thistory:     hist,\n\t}\n\n\ts.seqSize = 0\n\tstartSize := len(s.out)\n\n\tvar errCode int\n\tif cpuinfo.HasBMI2() {\n\t\tif useSafe {\n\t\t\terrCode = sequenceDecs_decodeSync_safe_bmi2(s, br, &ctx)\n\t\t} else {\n\t\t\terrCode = sequenceDecs_decodeSync_bmi2(s, br, &ctx)\n\t\t}\n\t} else {\n\t\tif useSafe {\n\t\t\terrCode = sequenceDecs_decodeSync_safe_amd64(s, br, &ctx)\n\t\t} else {\n\t\t\terrCode = sequenceDecs_decodeSync_amd64(s, br, &ctx)\n\t\t}\n\t}\n\tswitch errCode {\n\tcase noError:\n\t\tbreak\n\n\tcase errorMatchLenOfsMismatch:\n\t\treturn true, fmt.Errorf(\"zero matchoff and matchlen (%d) > 0\", ctx.ml)\n\n\tcase errorMatchLenTooBig:\n\t\treturn true, fmt.Errorf(\"match len (%d) bigger than max allowed length\", ctx.ml)\n\n\tcase errorMatchOffTooBig:\n\t\treturn true, fmt.Errorf(\"match offset (%d) bigger than current history (%d)\",\n\t\t\tctx.mo, ctx.outPosition+len(hist)-startSize)\n\n\tcase errorNotEnoughLiterals:\n\t\treturn true, fmt.Errorf(\"unexpected literal count, want %d bytes, but only %d is available\",\n\t\t\tctx.ll, ctx.litRemain+ctx.ll)\n\n\tcase errorOverread:\n\t\treturn true, io.ErrUnexpectedEOF\n\n\tcase errorNotEnoughSpace:\n\t\tsize := ctx.outPosition + ctx.ll + ctx.ml\n\t\tif debugDecoder {\n\t\t\tprintln(\"msl:\", s.maxSyncLen, \"cap\", cap(s.out), \"bef:\", startSize, \"sz:\", size-startSize, \"mbs:\", maxBlockSize, \"outsz:\", cap(s.out)-startSize)\n\t\t}\n\t\treturn true, fmt.Errorf(\"output bigger than max block size (%d)\", maxBlockSize)\n\n\tdefault:\n\t\treturn true, fmt.Errorf(\"sequenceDecs_decode returned erronous code %d\", errCode)\n\t}\n\n\ts.seqSize += ctx.litRemain\n\tif s.seqSize > maxBlockSize {\n\t\treturn true, fmt.Errorf(\"output bigger than max block size (%d)\", maxBlockSize)\n\t}\n\terr := br.close()\n\tif err != nil {\n\t\tprintf(\"Closing sequences: %v, %+v\\n\", err, *br)\n\t\treturn true, err\n\t}\n\n\ts.literals = s.literals[ctx.litPosition:]\n\tt := ctx.outPosition\n\ts.out = s.out[:t]\n\n\t// Add final literals\n\ts.out = append(s.out, s.literals...)\n\tif debugDecoder {\n\t\tt += len(s.literals)\n\t\tif t != len(s.out) {\n\t\t\tpanic(fmt.Errorf(\"length mismatch, want %d, got %d\", len(s.out), t))\n\t\t}\n\t}\n\n\treturn true, nil\n}\n\n// --------------------------------------------------------------------------------\n\ntype decodeAsmContext struct {\n\tllTable   []decSymbol\n\tmlTable   []decSymbol\n\tofTable   []decSymbol\n\tllState   uint64\n\tmlState   uint64\n\tofState   uint64\n\titeration int\n\tseqs      []seqVals\n\tlitRemain int\n}\n\nconst noError = 0\n\n// error reported when mo == 0 && ml > 0\nconst errorMatchLenOfsMismatch = 1\n\n// error reported when ml > maxMatchLen\nconst errorMatchLenTooBig = 2\n\n// error reported when mo > available history or mo > s.windowSize\nconst errorMatchOffTooBig = 3\n\n// error reported when the sum of literal lengths exeeceds the literal buffer size\nconst errorNotEnoughLiterals = 4\n\n// error reported when capacity of `out` is too small\nconst errorNotEnoughSpace = 5\n\n// error reported when bits are overread.\nconst errorOverread = 6\n\n// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm.\n//\n// Please refer to seqdec_generic.go for the reference implementation.\n//\n//go:noescape\nfunc sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n\n// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm.\n//\n// Please refer to seqdec_generic.go for the reference implementation.\n//\n//go:noescape\nfunc sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n\n// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions.\n//\n//go:noescape\nfunc sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n\n// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions.\n//\n//go:noescape\nfunc sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n\n// decode sequences from the stream without the provided history.\nfunc (s *sequenceDecs) decode(seqs []seqVals) error {\n\tbr := s.br\n\n\tmaxBlockSize := maxCompressedBlockSize\n\tif s.windowSize < maxBlockSize {\n\t\tmaxBlockSize = s.windowSize\n\t}\n\n\tctx := decodeAsmContext{\n\t\tllTable:   s.litLengths.fse.dt[:maxTablesize],\n\t\tmlTable:   s.matchLengths.fse.dt[:maxTablesize],\n\t\tofTable:   s.offsets.fse.dt[:maxTablesize],\n\t\tllState:   uint64(s.litLengths.state.state),\n\t\tmlState:   uint64(s.matchLengths.state.state),\n\t\tofState:   uint64(s.offsets.state.state),\n\t\tseqs:      seqs,\n\t\titeration: len(seqs) - 1,\n\t\tlitRemain: len(s.literals),\n\t}\n\n\tif debugDecoder {\n\t\tprintln(\"decode: decoding\", len(seqs), \"sequences\", br.remain(), \"bits remain on stream\")\n\t}\n\n\ts.seqSize = 0\n\tlte56bits := s.maxBits+s.offsets.fse.actualTableLog+s.matchLengths.fse.actualTableLog+s.litLengths.fse.actualTableLog <= 56\n\tvar errCode int\n\tif cpuinfo.HasBMI2() {\n\t\tif lte56bits {\n\t\t\terrCode = sequenceDecs_decode_56_bmi2(s, br, &ctx)\n\t\t} else {\n\t\t\terrCode = sequenceDecs_decode_bmi2(s, br, &ctx)\n\t\t}\n\t} else {\n\t\tif lte56bits {\n\t\t\terrCode = sequenceDecs_decode_56_amd64(s, br, &ctx)\n\t\t} else {\n\t\t\terrCode = sequenceDecs_decode_amd64(s, br, &ctx)\n\t\t}\n\t}\n\tif errCode != 0 {\n\t\ti := len(seqs) - ctx.iteration - 1\n\t\tswitch errCode {\n\t\tcase errorMatchLenOfsMismatch:\n\t\t\tml := ctx.seqs[i].ml\n\t\t\treturn fmt.Errorf(\"zero matchoff and matchlen (%d) > 0\", ml)\n\n\t\tcase errorMatchLenTooBig:\n\t\t\tml := ctx.seqs[i].ml\n\t\t\treturn fmt.Errorf(\"match len (%d) bigger than max allowed length\", ml)\n\n\t\tcase errorNotEnoughLiterals:\n\t\t\tll := ctx.seqs[i].ll\n\t\t\treturn fmt.Errorf(\"unexpected literal count, want %d bytes, but only %d is available\", ll, ctx.litRemain+ll)\n\t\tcase errorOverread:\n\t\t\treturn io.ErrUnexpectedEOF\n\t\t}\n\n\t\treturn fmt.Errorf(\"sequenceDecs_decode_amd64 returned erronous code %d\", errCode)\n\t}\n\n\tif ctx.litRemain < 0 {\n\t\treturn fmt.Errorf(\"literal count is too big: total available %d, total requested %d\",\n\t\t\tlen(s.literals), len(s.literals)-ctx.litRemain)\n\t}\n\n\ts.seqSize += ctx.litRemain\n\tif s.seqSize > maxBlockSize {\n\t\treturn fmt.Errorf(\"output bigger than max block size (%d)\", maxBlockSize)\n\t}\n\tif debugDecoder {\n\t\tprintln(\"decode: \", br.remain(), \"bits remain on stream. code:\", errCode)\n\t}\n\terr := br.close()\n\tif err != nil {\n\t\tprintf(\"Closing sequences: %v, %+v\\n\", err, *br)\n\t}\n\treturn err\n}\n\n// --------------------------------------------------------------------------------\n\ntype executeAsmContext struct {\n\tseqs        []seqVals\n\tseqIndex    int\n\tout         []byte\n\thistory     []byte\n\tliterals    []byte\n\toutPosition int\n\tlitPosition int\n\twindowSize  int\n}\n\n// sequenceDecs_executeSimple_amd64 implements the main loop of sequenceDecs.executeSimple in x86 asm.\n//\n// Returns false if a match offset is too big.\n//\n// Please refer to seqdec_generic.go for the reference implementation.\n//\n//go:noescape\nfunc sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool\n\n// Same as above, but with safe memcopies\n//\n//go:noescape\nfunc sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool\n\n// executeSimple handles cases when dictionary is not used.\nfunc (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error {\n\t// Ensure we have enough output size...\n\tif len(s.out)+s.seqSize+compressedBlockOverAlloc > cap(s.out) {\n\t\taddBytes := s.seqSize + len(s.out) + compressedBlockOverAlloc\n\t\ts.out = append(s.out, make([]byte, addBytes)...)\n\t\ts.out = s.out[:len(s.out)-addBytes]\n\t}\n\n\tif debugDecoder {\n\t\tprintf(\"Execute %d seqs with literals: %d into %d bytes\\n\", len(seqs), len(s.literals), s.seqSize)\n\t}\n\n\tvar t = len(s.out)\n\tout := s.out[:t+s.seqSize]\n\n\tctx := executeAsmContext{\n\t\tseqs:        seqs,\n\t\tseqIndex:    0,\n\t\tout:         out,\n\t\thistory:     hist,\n\t\toutPosition: t,\n\t\tlitPosition: 0,\n\t\tliterals:    s.literals,\n\t\twindowSize:  s.windowSize,\n\t}\n\tvar ok bool\n\tif cap(s.literals) < len(s.literals)+compressedBlockOverAlloc {\n\t\tok = sequenceDecs_executeSimple_safe_amd64(&ctx)\n\t} else {\n\t\tok = sequenceDecs_executeSimple_amd64(&ctx)\n\t}\n\tif !ok {\n\t\treturn fmt.Errorf(\"match offset (%d) bigger than current history (%d)\",\n\t\t\tseqs[ctx.seqIndex].mo, ctx.outPosition+len(hist))\n\t}\n\ts.literals = s.literals[ctx.litPosition:]\n\tt = ctx.outPosition\n\n\t// Add final literals\n\tcopy(out[t:], s.literals)\n\tif debugDecoder {\n\t\tt += len(s.literals)\n\t\tif t != len(out) {\n\t\t\tpanic(fmt.Errorf(\"length mismatch, want %d, got %d, ss: %d\", len(out), t, s.seqSize))\n\t\t}\n\t}\n\ts.out = out\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s",
    "content": "// Code generated by command: go run gen.go -out ../seqdec_amd64.s -pkg=zstd. DO NOT EDIT.\n\n//go:build !appengine && !noasm && gc && !noasm\n\n// func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n// Requires: CMOV\nTEXT ·sequenceDecs_decode_amd64(SB), $8-32\n\tMOVQ    br+8(FP), CX\n\tMOVQ    24(CX), DX\n\tMOVBQZX 32(CX), BX\n\tMOVQ    (CX), AX\n\tMOVQ    8(CX), SI\n\tADDQ    SI, AX\n\tMOVQ    AX, (SP)\n\tMOVQ    ctx+16(FP), AX\n\tMOVQ    72(AX), DI\n\tMOVQ    80(AX), R8\n\tMOVQ    88(AX), R9\n\tMOVQ    104(AX), R10\n\tMOVQ    s+0(FP), AX\n\tMOVQ    144(AX), R11\n\tMOVQ    152(AX), R12\n\tMOVQ    160(AX), R13\n\nsequenceDecs_decode_amd64_main_loop:\n\tMOVQ (SP), R14\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ SI, $0x08\n\tJL   sequenceDecs_decode_amd64_fill_byte_by_byte\n\tMOVQ BX, AX\n\tSHRQ $0x03, AX\n\tSUBQ AX, R14\n\tMOVQ (R14), DX\n\tSUBQ AX, SI\n\tANDQ $0x07, BX\n\tJMP  sequenceDecs_decode_amd64_fill_end\n\nsequenceDecs_decode_amd64_fill_byte_by_byte:\n\tCMPQ    SI, $0x00\n\tJLE     sequenceDecs_decode_amd64_fill_check_overread\n\tCMPQ    BX, $0x07\n\tJLE     sequenceDecs_decode_amd64_fill_end\n\tSHLQ    $0x08, DX\n\tSUBQ    $0x01, R14\n\tSUBQ    $0x01, SI\n\tSUBQ    $0x08, BX\n\tMOVBQZX (R14), AX\n\tORQ     AX, DX\n\tJMP     sequenceDecs_decode_amd64_fill_byte_by_byte\n\nsequenceDecs_decode_amd64_fill_check_overread:\n\tCMPQ BX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decode_amd64_fill_end:\n\t// Update offset\n\tMOVQ  R9, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R15\n\tSHLQ  CL, R15\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decode_amd64_of_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decode_amd64_of_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decode_amd64_of_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R15\n\tADDQ  R15, AX\n\nsequenceDecs_decode_amd64_of_update_zero:\n\tMOVQ AX, 16(R10)\n\n\t// Update match length\n\tMOVQ  R8, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R15\n\tSHLQ  CL, R15\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decode_amd64_ml_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decode_amd64_ml_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decode_amd64_ml_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R15\n\tADDQ  R15, AX\n\nsequenceDecs_decode_amd64_ml_update_zero:\n\tMOVQ AX, 8(R10)\n\n\t// Fill bitreader to have enough for the remaining\n\tCMPQ SI, $0x08\n\tJL   sequenceDecs_decode_amd64_fill_2_byte_by_byte\n\tMOVQ BX, AX\n\tSHRQ $0x03, AX\n\tSUBQ AX, R14\n\tMOVQ (R14), DX\n\tSUBQ AX, SI\n\tANDQ $0x07, BX\n\tJMP  sequenceDecs_decode_amd64_fill_2_end\n\nsequenceDecs_decode_amd64_fill_2_byte_by_byte:\n\tCMPQ    SI, $0x00\n\tJLE     sequenceDecs_decode_amd64_fill_2_check_overread\n\tCMPQ    BX, $0x07\n\tJLE     sequenceDecs_decode_amd64_fill_2_end\n\tSHLQ    $0x08, DX\n\tSUBQ    $0x01, R14\n\tSUBQ    $0x01, SI\n\tSUBQ    $0x08, BX\n\tMOVBQZX (R14), AX\n\tORQ     AX, DX\n\tJMP     sequenceDecs_decode_amd64_fill_2_byte_by_byte\n\nsequenceDecs_decode_amd64_fill_2_check_overread:\n\tCMPQ BX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decode_amd64_fill_2_end:\n\t// Update literal length\n\tMOVQ  DI, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R15\n\tSHLQ  CL, R15\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decode_amd64_ll_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decode_amd64_ll_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decode_amd64_ll_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R15\n\tADDQ  R15, AX\n\nsequenceDecs_decode_amd64_ll_update_zero:\n\tMOVQ AX, (R10)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R14, (SP)\n\tMOVQ    R9, AX\n\tSHRQ    $0x08, AX\n\tMOVBQZX AL, AX\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decode_amd64_skip_update\n\n\t// Update Literal Length State\n\tMOVBQZX DI, R14\n\tSHRL    $0x10, DI\n\tLEAQ    (BX)(R14*1), CX\n\tMOVQ    DX, R15\n\tMOVQ    CX, BX\n\tROLQ    CL, R15\n\tMOVL    $0x00000001, BP\n\tMOVB    R14, CL\n\tSHLL    CL, BP\n\tDECL    BP\n\tANDQ    BP, R15\n\tADDQ    R15, DI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Match Length State\n\tMOVBQZX R8, R14\n\tSHRL    $0x10, R8\n\tLEAQ    (BX)(R14*1), CX\n\tMOVQ    DX, R15\n\tMOVQ    CX, BX\n\tROLQ    CL, R15\n\tMOVL    $0x00000001, BP\n\tMOVB    R14, CL\n\tSHLL    CL, BP\n\tDECL    BP\n\tANDQ    BP, R15\n\tADDQ    R15, R8\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Offset State\n\tMOVBQZX R9, R14\n\tSHRL    $0x10, R9\n\tLEAQ    (BX)(R14*1), CX\n\tMOVQ    DX, R15\n\tMOVQ    CX, BX\n\tROLQ    CL, R15\n\tMOVL    $0x00000001, BP\n\tMOVB    R14, CL\n\tSHLL    CL, BP\n\tDECL    BP\n\tANDQ    BP, R15\n\tADDQ    R15, R9\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R9*8), R9\n\nsequenceDecs_decode_amd64_skip_update:\n\t// Adjust offset\n\tMOVQ 16(R10), CX\n\tCMPQ AX, $0x01\n\tJBE  sequenceDecs_decode_amd64_adjust_offsetB_1_or_0\n\tMOVQ R12, R13\n\tMOVQ R11, R12\n\tMOVQ CX, R11\n\tJMP  sequenceDecs_decode_amd64_after_adjust\n\nsequenceDecs_decode_amd64_adjust_offsetB_1_or_0:\n\tCMPQ (R10), $0x00000000\n\tJNE  sequenceDecs_decode_amd64_adjust_offset_maybezero\n\tINCQ CX\n\tJMP  sequenceDecs_decode_amd64_adjust_offset_nonzero\n\nsequenceDecs_decode_amd64_adjust_offset_maybezero:\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_amd64_adjust_offset_nonzero\n\tMOVQ  R11, CX\n\tJMP   sequenceDecs_decode_amd64_after_adjust\n\nsequenceDecs_decode_amd64_adjust_offset_nonzero:\n\tCMPQ CX, $0x01\n\tJB   sequenceDecs_decode_amd64_adjust_zero\n\tJEQ  sequenceDecs_decode_amd64_adjust_one\n\tCMPQ CX, $0x02\n\tJA   sequenceDecs_decode_amd64_adjust_three\n\tJMP  sequenceDecs_decode_amd64_adjust_two\n\nsequenceDecs_decode_amd64_adjust_zero:\n\tMOVQ R11, AX\n\tJMP  sequenceDecs_decode_amd64_adjust_test_temp_valid\n\nsequenceDecs_decode_amd64_adjust_one:\n\tMOVQ R12, AX\n\tJMP  sequenceDecs_decode_amd64_adjust_test_temp_valid\n\nsequenceDecs_decode_amd64_adjust_two:\n\tMOVQ R13, AX\n\tJMP  sequenceDecs_decode_amd64_adjust_test_temp_valid\n\nsequenceDecs_decode_amd64_adjust_three:\n\tLEAQ -1(R11), AX\n\nsequenceDecs_decode_amd64_adjust_test_temp_valid:\n\tTESTQ AX, AX\n\tJNZ   sequenceDecs_decode_amd64_adjust_temp_valid\n\tMOVQ  $0x00000001, AX\n\nsequenceDecs_decode_amd64_adjust_temp_valid:\n\tCMPQ    CX, $0x01\n\tCMOVQNE R12, R13\n\tMOVQ    R11, R12\n\tMOVQ    AX, R11\n\tMOVQ    AX, CX\n\nsequenceDecs_decode_amd64_after_adjust:\n\tMOVQ CX, 16(R10)\n\n\t// Check values\n\tMOVQ  8(R10), AX\n\tMOVQ  (R10), R14\n\tLEAQ  (AX)(R14*1), R15\n\tMOVQ  s+0(FP), BP\n\tADDQ  R15, 256(BP)\n\tMOVQ  ctx+16(FP), R15\n\tSUBQ  R14, 128(R15)\n\tJS    error_not_enough_literals\n\tCMPQ  AX, $0x00020002\n\tJA    sequenceDecs_decode_amd64_error_match_len_too_big\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_amd64_match_len_ofs_ok\n\tTESTQ AX, AX\n\tJNZ   sequenceDecs_decode_amd64_error_match_len_ofs_mismatch\n\nsequenceDecs_decode_amd64_match_len_ofs_ok:\n\tADDQ $0x18, R10\n\tMOVQ ctx+16(FP), AX\n\tDECQ 96(AX)\n\tJNS  sequenceDecs_decode_amd64_main_loop\n\tMOVQ s+0(FP), AX\n\tMOVQ R11, 144(AX)\n\tMOVQ R12, 152(AX)\n\tMOVQ R13, 160(AX)\n\tMOVQ br+8(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVB BL, 32(AX)\n\tMOVQ SI, 8(AX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decode_amd64_error_match_len_ofs_mismatch:\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decode_amd64_error_match_len_too_big:\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n// func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n// Requires: CMOV\nTEXT ·sequenceDecs_decode_56_amd64(SB), $8-32\n\tMOVQ    br+8(FP), CX\n\tMOVQ    24(CX), DX\n\tMOVBQZX 32(CX), BX\n\tMOVQ    (CX), AX\n\tMOVQ    8(CX), SI\n\tADDQ    SI, AX\n\tMOVQ    AX, (SP)\n\tMOVQ    ctx+16(FP), AX\n\tMOVQ    72(AX), DI\n\tMOVQ    80(AX), R8\n\tMOVQ    88(AX), R9\n\tMOVQ    104(AX), R10\n\tMOVQ    s+0(FP), AX\n\tMOVQ    144(AX), R11\n\tMOVQ    152(AX), R12\n\tMOVQ    160(AX), R13\n\nsequenceDecs_decode_56_amd64_main_loop:\n\tMOVQ (SP), R14\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ SI, $0x08\n\tJL   sequenceDecs_decode_56_amd64_fill_byte_by_byte\n\tMOVQ BX, AX\n\tSHRQ $0x03, AX\n\tSUBQ AX, R14\n\tMOVQ (R14), DX\n\tSUBQ AX, SI\n\tANDQ $0x07, BX\n\tJMP  sequenceDecs_decode_56_amd64_fill_end\n\nsequenceDecs_decode_56_amd64_fill_byte_by_byte:\n\tCMPQ    SI, $0x00\n\tJLE     sequenceDecs_decode_56_amd64_fill_check_overread\n\tCMPQ    BX, $0x07\n\tJLE     sequenceDecs_decode_56_amd64_fill_end\n\tSHLQ    $0x08, DX\n\tSUBQ    $0x01, R14\n\tSUBQ    $0x01, SI\n\tSUBQ    $0x08, BX\n\tMOVBQZX (R14), AX\n\tORQ     AX, DX\n\tJMP     sequenceDecs_decode_56_amd64_fill_byte_by_byte\n\nsequenceDecs_decode_56_amd64_fill_check_overread:\n\tCMPQ BX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decode_56_amd64_fill_end:\n\t// Update offset\n\tMOVQ  R9, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R15\n\tSHLQ  CL, R15\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decode_56_amd64_of_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decode_56_amd64_of_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decode_56_amd64_of_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R15\n\tADDQ  R15, AX\n\nsequenceDecs_decode_56_amd64_of_update_zero:\n\tMOVQ AX, 16(R10)\n\n\t// Update match length\n\tMOVQ  R8, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R15\n\tSHLQ  CL, R15\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decode_56_amd64_ml_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decode_56_amd64_ml_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decode_56_amd64_ml_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R15\n\tADDQ  R15, AX\n\nsequenceDecs_decode_56_amd64_ml_update_zero:\n\tMOVQ AX, 8(R10)\n\n\t// Update literal length\n\tMOVQ  DI, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R15\n\tSHLQ  CL, R15\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decode_56_amd64_ll_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decode_56_amd64_ll_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decode_56_amd64_ll_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R15\n\tADDQ  R15, AX\n\nsequenceDecs_decode_56_amd64_ll_update_zero:\n\tMOVQ AX, (R10)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R14, (SP)\n\tMOVQ    R9, AX\n\tSHRQ    $0x08, AX\n\tMOVBQZX AL, AX\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decode_56_amd64_skip_update\n\n\t// Update Literal Length State\n\tMOVBQZX DI, R14\n\tSHRL    $0x10, DI\n\tLEAQ    (BX)(R14*1), CX\n\tMOVQ    DX, R15\n\tMOVQ    CX, BX\n\tROLQ    CL, R15\n\tMOVL    $0x00000001, BP\n\tMOVB    R14, CL\n\tSHLL    CL, BP\n\tDECL    BP\n\tANDQ    BP, R15\n\tADDQ    R15, DI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Match Length State\n\tMOVBQZX R8, R14\n\tSHRL    $0x10, R8\n\tLEAQ    (BX)(R14*1), CX\n\tMOVQ    DX, R15\n\tMOVQ    CX, BX\n\tROLQ    CL, R15\n\tMOVL    $0x00000001, BP\n\tMOVB    R14, CL\n\tSHLL    CL, BP\n\tDECL    BP\n\tANDQ    BP, R15\n\tADDQ    R15, R8\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Offset State\n\tMOVBQZX R9, R14\n\tSHRL    $0x10, R9\n\tLEAQ    (BX)(R14*1), CX\n\tMOVQ    DX, R15\n\tMOVQ    CX, BX\n\tROLQ    CL, R15\n\tMOVL    $0x00000001, BP\n\tMOVB    R14, CL\n\tSHLL    CL, BP\n\tDECL    BP\n\tANDQ    BP, R15\n\tADDQ    R15, R9\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R9*8), R9\n\nsequenceDecs_decode_56_amd64_skip_update:\n\t// Adjust offset\n\tMOVQ 16(R10), CX\n\tCMPQ AX, $0x01\n\tJBE  sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0\n\tMOVQ R12, R13\n\tMOVQ R11, R12\n\tMOVQ CX, R11\n\tJMP  sequenceDecs_decode_56_amd64_after_adjust\n\nsequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0:\n\tCMPQ (R10), $0x00000000\n\tJNE  sequenceDecs_decode_56_amd64_adjust_offset_maybezero\n\tINCQ CX\n\tJMP  sequenceDecs_decode_56_amd64_adjust_offset_nonzero\n\nsequenceDecs_decode_56_amd64_adjust_offset_maybezero:\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_56_amd64_adjust_offset_nonzero\n\tMOVQ  R11, CX\n\tJMP   sequenceDecs_decode_56_amd64_after_adjust\n\nsequenceDecs_decode_56_amd64_adjust_offset_nonzero:\n\tCMPQ CX, $0x01\n\tJB   sequenceDecs_decode_56_amd64_adjust_zero\n\tJEQ  sequenceDecs_decode_56_amd64_adjust_one\n\tCMPQ CX, $0x02\n\tJA   sequenceDecs_decode_56_amd64_adjust_three\n\tJMP  sequenceDecs_decode_56_amd64_adjust_two\n\nsequenceDecs_decode_56_amd64_adjust_zero:\n\tMOVQ R11, AX\n\tJMP  sequenceDecs_decode_56_amd64_adjust_test_temp_valid\n\nsequenceDecs_decode_56_amd64_adjust_one:\n\tMOVQ R12, AX\n\tJMP  sequenceDecs_decode_56_amd64_adjust_test_temp_valid\n\nsequenceDecs_decode_56_amd64_adjust_two:\n\tMOVQ R13, AX\n\tJMP  sequenceDecs_decode_56_amd64_adjust_test_temp_valid\n\nsequenceDecs_decode_56_amd64_adjust_three:\n\tLEAQ -1(R11), AX\n\nsequenceDecs_decode_56_amd64_adjust_test_temp_valid:\n\tTESTQ AX, AX\n\tJNZ   sequenceDecs_decode_56_amd64_adjust_temp_valid\n\tMOVQ  $0x00000001, AX\n\nsequenceDecs_decode_56_amd64_adjust_temp_valid:\n\tCMPQ    CX, $0x01\n\tCMOVQNE R12, R13\n\tMOVQ    R11, R12\n\tMOVQ    AX, R11\n\tMOVQ    AX, CX\n\nsequenceDecs_decode_56_amd64_after_adjust:\n\tMOVQ CX, 16(R10)\n\n\t// Check values\n\tMOVQ  8(R10), AX\n\tMOVQ  (R10), R14\n\tLEAQ  (AX)(R14*1), R15\n\tMOVQ  s+0(FP), BP\n\tADDQ  R15, 256(BP)\n\tMOVQ  ctx+16(FP), R15\n\tSUBQ  R14, 128(R15)\n\tJS    error_not_enough_literals\n\tCMPQ  AX, $0x00020002\n\tJA    sequenceDecs_decode_56_amd64_error_match_len_too_big\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_56_amd64_match_len_ofs_ok\n\tTESTQ AX, AX\n\tJNZ   sequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch\n\nsequenceDecs_decode_56_amd64_match_len_ofs_ok:\n\tADDQ $0x18, R10\n\tMOVQ ctx+16(FP), AX\n\tDECQ 96(AX)\n\tJNS  sequenceDecs_decode_56_amd64_main_loop\n\tMOVQ s+0(FP), AX\n\tMOVQ R11, 144(AX)\n\tMOVQ R12, 152(AX)\n\tMOVQ R13, 160(AX)\n\tMOVQ br+8(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVB BL, 32(AX)\n\tMOVQ SI, 8(AX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch:\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decode_56_amd64_error_match_len_too_big:\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n// func sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n// Requires: BMI, BMI2, CMOV\nTEXT ·sequenceDecs_decode_bmi2(SB), $8-32\n\tMOVQ    br+8(FP), BX\n\tMOVQ    24(BX), AX\n\tMOVBQZX 32(BX), DX\n\tMOVQ    (BX), CX\n\tMOVQ    8(BX), BX\n\tADDQ    BX, CX\n\tMOVQ    CX, (SP)\n\tMOVQ    ctx+16(FP), CX\n\tMOVQ    72(CX), SI\n\tMOVQ    80(CX), DI\n\tMOVQ    88(CX), R8\n\tMOVQ    104(CX), R9\n\tMOVQ    s+0(FP), CX\n\tMOVQ    144(CX), R10\n\tMOVQ    152(CX), R11\n\tMOVQ    160(CX), R12\n\nsequenceDecs_decode_bmi2_main_loop:\n\tMOVQ (SP), R13\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ BX, $0x08\n\tJL   sequenceDecs_decode_bmi2_fill_byte_by_byte\n\tMOVQ DX, CX\n\tSHRQ $0x03, CX\n\tSUBQ CX, R13\n\tMOVQ (R13), AX\n\tSUBQ CX, BX\n\tANDQ $0x07, DX\n\tJMP  sequenceDecs_decode_bmi2_fill_end\n\nsequenceDecs_decode_bmi2_fill_byte_by_byte:\n\tCMPQ    BX, $0x00\n\tJLE     sequenceDecs_decode_bmi2_fill_check_overread\n\tCMPQ    DX, $0x07\n\tJLE     sequenceDecs_decode_bmi2_fill_end\n\tSHLQ    $0x08, AX\n\tSUBQ    $0x01, R13\n\tSUBQ    $0x01, BX\n\tSUBQ    $0x08, DX\n\tMOVBQZX (R13), CX\n\tORQ     CX, AX\n\tJMP     sequenceDecs_decode_bmi2_fill_byte_by_byte\n\nsequenceDecs_decode_bmi2_fill_check_overread:\n\tCMPQ DX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decode_bmi2_fill_end:\n\t// Update offset\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, R8, R14\n\tMOVQ   AX, R15\n\tLEAQ   (DX)(R14*1), CX\n\tROLQ   CL, R15\n\tBZHIQ  R14, R15, R15\n\tMOVQ   CX, DX\n\tMOVQ   R8, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R15, CX\n\tMOVQ   CX, 16(R9)\n\n\t// Update match length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, DI, R14\n\tMOVQ   AX, R15\n\tLEAQ   (DX)(R14*1), CX\n\tROLQ   CL, R15\n\tBZHIQ  R14, R15, R15\n\tMOVQ   CX, DX\n\tMOVQ   DI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R15, CX\n\tMOVQ   CX, 8(R9)\n\n\t// Fill bitreader to have enough for the remaining\n\tCMPQ BX, $0x08\n\tJL   sequenceDecs_decode_bmi2_fill_2_byte_by_byte\n\tMOVQ DX, CX\n\tSHRQ $0x03, CX\n\tSUBQ CX, R13\n\tMOVQ (R13), AX\n\tSUBQ CX, BX\n\tANDQ $0x07, DX\n\tJMP  sequenceDecs_decode_bmi2_fill_2_end\n\nsequenceDecs_decode_bmi2_fill_2_byte_by_byte:\n\tCMPQ    BX, $0x00\n\tJLE     sequenceDecs_decode_bmi2_fill_2_check_overread\n\tCMPQ    DX, $0x07\n\tJLE     sequenceDecs_decode_bmi2_fill_2_end\n\tSHLQ    $0x08, AX\n\tSUBQ    $0x01, R13\n\tSUBQ    $0x01, BX\n\tSUBQ    $0x08, DX\n\tMOVBQZX (R13), CX\n\tORQ     CX, AX\n\tJMP     sequenceDecs_decode_bmi2_fill_2_byte_by_byte\n\nsequenceDecs_decode_bmi2_fill_2_check_overread:\n\tCMPQ DX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decode_bmi2_fill_2_end:\n\t// Update literal length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, SI, R14\n\tMOVQ   AX, R15\n\tLEAQ   (DX)(R14*1), CX\n\tROLQ   CL, R15\n\tBZHIQ  R14, R15, R15\n\tMOVQ   CX, DX\n\tMOVQ   SI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R15, CX\n\tMOVQ   CX, (R9)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R13, (SP)\n\tMOVQ    $0x00000808, CX\n\tBEXTRQ  CX, R8, R13\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decode_bmi2_skip_update\n\tLEAQ    (SI)(DI*1), R14\n\tADDQ    R8, R14\n\tMOVBQZX R14, R14\n\tLEAQ    (DX)(R14*1), CX\n\tMOVQ    AX, R15\n\tMOVQ    CX, DX\n\tROLQ    CL, R15\n\tBZHIQ   R14, R15, R15\n\n\t// Update Offset State\n\tBZHIQ R8, R15, CX\n\tSHRXQ R8, R15, R15\n\tSHRL  $0x10, R8\n\tADDQ  CX, R8\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Match Length State\n\tBZHIQ DI, R15, CX\n\tSHRXQ DI, R15, R15\n\tSHRL  $0x10, DI\n\tADDQ  CX, DI\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Literal Length State\n\tBZHIQ SI, R15, CX\n\tSHRL  $0x10, SI\n\tADDQ  CX, SI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(SI*8), SI\n\nsequenceDecs_decode_bmi2_skip_update:\n\t// Adjust offset\n\tMOVQ 16(R9), CX\n\tCMPQ R13, $0x01\n\tJBE  sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0\n\tMOVQ R11, R12\n\tMOVQ R10, R11\n\tMOVQ CX, R10\n\tJMP  sequenceDecs_decode_bmi2_after_adjust\n\nsequenceDecs_decode_bmi2_adjust_offsetB_1_or_0:\n\tCMPQ (R9), $0x00000000\n\tJNE  sequenceDecs_decode_bmi2_adjust_offset_maybezero\n\tINCQ CX\n\tJMP  sequenceDecs_decode_bmi2_adjust_offset_nonzero\n\nsequenceDecs_decode_bmi2_adjust_offset_maybezero:\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_bmi2_adjust_offset_nonzero\n\tMOVQ  R10, CX\n\tJMP   sequenceDecs_decode_bmi2_after_adjust\n\nsequenceDecs_decode_bmi2_adjust_offset_nonzero:\n\tCMPQ CX, $0x01\n\tJB   sequenceDecs_decode_bmi2_adjust_zero\n\tJEQ  sequenceDecs_decode_bmi2_adjust_one\n\tCMPQ CX, $0x02\n\tJA   sequenceDecs_decode_bmi2_adjust_three\n\tJMP  sequenceDecs_decode_bmi2_adjust_two\n\nsequenceDecs_decode_bmi2_adjust_zero:\n\tMOVQ R10, R13\n\tJMP  sequenceDecs_decode_bmi2_adjust_test_temp_valid\n\nsequenceDecs_decode_bmi2_adjust_one:\n\tMOVQ R11, R13\n\tJMP  sequenceDecs_decode_bmi2_adjust_test_temp_valid\n\nsequenceDecs_decode_bmi2_adjust_two:\n\tMOVQ R12, R13\n\tJMP  sequenceDecs_decode_bmi2_adjust_test_temp_valid\n\nsequenceDecs_decode_bmi2_adjust_three:\n\tLEAQ -1(R10), R13\n\nsequenceDecs_decode_bmi2_adjust_test_temp_valid:\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decode_bmi2_adjust_temp_valid\n\tMOVQ  $0x00000001, R13\n\nsequenceDecs_decode_bmi2_adjust_temp_valid:\n\tCMPQ    CX, $0x01\n\tCMOVQNE R11, R12\n\tMOVQ    R10, R11\n\tMOVQ    R13, R10\n\tMOVQ    R13, CX\n\nsequenceDecs_decode_bmi2_after_adjust:\n\tMOVQ CX, 16(R9)\n\n\t// Check values\n\tMOVQ  8(R9), R13\n\tMOVQ  (R9), R14\n\tLEAQ  (R13)(R14*1), R15\n\tMOVQ  s+0(FP), BP\n\tADDQ  R15, 256(BP)\n\tMOVQ  ctx+16(FP), R15\n\tSUBQ  R14, 128(R15)\n\tJS    error_not_enough_literals\n\tCMPQ  R13, $0x00020002\n\tJA    sequenceDecs_decode_bmi2_error_match_len_too_big\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_bmi2_match_len_ofs_ok\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decode_bmi2_error_match_len_ofs_mismatch\n\nsequenceDecs_decode_bmi2_match_len_ofs_ok:\n\tADDQ $0x18, R9\n\tMOVQ ctx+16(FP), CX\n\tDECQ 96(CX)\n\tJNS  sequenceDecs_decode_bmi2_main_loop\n\tMOVQ s+0(FP), CX\n\tMOVQ R10, 144(CX)\n\tMOVQ R11, 152(CX)\n\tMOVQ R12, 160(CX)\n\tMOVQ br+8(FP), CX\n\tMOVQ AX, 24(CX)\n\tMOVB DL, 32(CX)\n\tMOVQ BX, 8(CX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decode_bmi2_error_match_len_ofs_mismatch:\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decode_bmi2_error_match_len_too_big:\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n// func sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int\n// Requires: BMI, BMI2, CMOV\nTEXT ·sequenceDecs_decode_56_bmi2(SB), $8-32\n\tMOVQ    br+8(FP), BX\n\tMOVQ    24(BX), AX\n\tMOVBQZX 32(BX), DX\n\tMOVQ    (BX), CX\n\tMOVQ    8(BX), BX\n\tADDQ    BX, CX\n\tMOVQ    CX, (SP)\n\tMOVQ    ctx+16(FP), CX\n\tMOVQ    72(CX), SI\n\tMOVQ    80(CX), DI\n\tMOVQ    88(CX), R8\n\tMOVQ    104(CX), R9\n\tMOVQ    s+0(FP), CX\n\tMOVQ    144(CX), R10\n\tMOVQ    152(CX), R11\n\tMOVQ    160(CX), R12\n\nsequenceDecs_decode_56_bmi2_main_loop:\n\tMOVQ (SP), R13\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ BX, $0x08\n\tJL   sequenceDecs_decode_56_bmi2_fill_byte_by_byte\n\tMOVQ DX, CX\n\tSHRQ $0x03, CX\n\tSUBQ CX, R13\n\tMOVQ (R13), AX\n\tSUBQ CX, BX\n\tANDQ $0x07, DX\n\tJMP  sequenceDecs_decode_56_bmi2_fill_end\n\nsequenceDecs_decode_56_bmi2_fill_byte_by_byte:\n\tCMPQ    BX, $0x00\n\tJLE     sequenceDecs_decode_56_bmi2_fill_check_overread\n\tCMPQ    DX, $0x07\n\tJLE     sequenceDecs_decode_56_bmi2_fill_end\n\tSHLQ    $0x08, AX\n\tSUBQ    $0x01, R13\n\tSUBQ    $0x01, BX\n\tSUBQ    $0x08, DX\n\tMOVBQZX (R13), CX\n\tORQ     CX, AX\n\tJMP     sequenceDecs_decode_56_bmi2_fill_byte_by_byte\n\nsequenceDecs_decode_56_bmi2_fill_check_overread:\n\tCMPQ DX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decode_56_bmi2_fill_end:\n\t// Update offset\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, R8, R14\n\tMOVQ   AX, R15\n\tLEAQ   (DX)(R14*1), CX\n\tROLQ   CL, R15\n\tBZHIQ  R14, R15, R15\n\tMOVQ   CX, DX\n\tMOVQ   R8, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R15, CX\n\tMOVQ   CX, 16(R9)\n\n\t// Update match length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, DI, R14\n\tMOVQ   AX, R15\n\tLEAQ   (DX)(R14*1), CX\n\tROLQ   CL, R15\n\tBZHIQ  R14, R15, R15\n\tMOVQ   CX, DX\n\tMOVQ   DI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R15, CX\n\tMOVQ   CX, 8(R9)\n\n\t// Update literal length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, SI, R14\n\tMOVQ   AX, R15\n\tLEAQ   (DX)(R14*1), CX\n\tROLQ   CL, R15\n\tBZHIQ  R14, R15, R15\n\tMOVQ   CX, DX\n\tMOVQ   SI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R15, CX\n\tMOVQ   CX, (R9)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R13, (SP)\n\tMOVQ    $0x00000808, CX\n\tBEXTRQ  CX, R8, R13\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decode_56_bmi2_skip_update\n\tLEAQ    (SI)(DI*1), R14\n\tADDQ    R8, R14\n\tMOVBQZX R14, R14\n\tLEAQ    (DX)(R14*1), CX\n\tMOVQ    AX, R15\n\tMOVQ    CX, DX\n\tROLQ    CL, R15\n\tBZHIQ   R14, R15, R15\n\n\t// Update Offset State\n\tBZHIQ R8, R15, CX\n\tSHRXQ R8, R15, R15\n\tSHRL  $0x10, R8\n\tADDQ  CX, R8\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Match Length State\n\tBZHIQ DI, R15, CX\n\tSHRXQ DI, R15, R15\n\tSHRL  $0x10, DI\n\tADDQ  CX, DI\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Literal Length State\n\tBZHIQ SI, R15, CX\n\tSHRL  $0x10, SI\n\tADDQ  CX, SI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(SI*8), SI\n\nsequenceDecs_decode_56_bmi2_skip_update:\n\t// Adjust offset\n\tMOVQ 16(R9), CX\n\tCMPQ R13, $0x01\n\tJBE  sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0\n\tMOVQ R11, R12\n\tMOVQ R10, R11\n\tMOVQ CX, R10\n\tJMP  sequenceDecs_decode_56_bmi2_after_adjust\n\nsequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0:\n\tCMPQ (R9), $0x00000000\n\tJNE  sequenceDecs_decode_56_bmi2_adjust_offset_maybezero\n\tINCQ CX\n\tJMP  sequenceDecs_decode_56_bmi2_adjust_offset_nonzero\n\nsequenceDecs_decode_56_bmi2_adjust_offset_maybezero:\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_56_bmi2_adjust_offset_nonzero\n\tMOVQ  R10, CX\n\tJMP   sequenceDecs_decode_56_bmi2_after_adjust\n\nsequenceDecs_decode_56_bmi2_adjust_offset_nonzero:\n\tCMPQ CX, $0x01\n\tJB   sequenceDecs_decode_56_bmi2_adjust_zero\n\tJEQ  sequenceDecs_decode_56_bmi2_adjust_one\n\tCMPQ CX, $0x02\n\tJA   sequenceDecs_decode_56_bmi2_adjust_three\n\tJMP  sequenceDecs_decode_56_bmi2_adjust_two\n\nsequenceDecs_decode_56_bmi2_adjust_zero:\n\tMOVQ R10, R13\n\tJMP  sequenceDecs_decode_56_bmi2_adjust_test_temp_valid\n\nsequenceDecs_decode_56_bmi2_adjust_one:\n\tMOVQ R11, R13\n\tJMP  sequenceDecs_decode_56_bmi2_adjust_test_temp_valid\n\nsequenceDecs_decode_56_bmi2_adjust_two:\n\tMOVQ R12, R13\n\tJMP  sequenceDecs_decode_56_bmi2_adjust_test_temp_valid\n\nsequenceDecs_decode_56_bmi2_adjust_three:\n\tLEAQ -1(R10), R13\n\nsequenceDecs_decode_56_bmi2_adjust_test_temp_valid:\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decode_56_bmi2_adjust_temp_valid\n\tMOVQ  $0x00000001, R13\n\nsequenceDecs_decode_56_bmi2_adjust_temp_valid:\n\tCMPQ    CX, $0x01\n\tCMOVQNE R11, R12\n\tMOVQ    R10, R11\n\tMOVQ    R13, R10\n\tMOVQ    R13, CX\n\nsequenceDecs_decode_56_bmi2_after_adjust:\n\tMOVQ CX, 16(R9)\n\n\t// Check values\n\tMOVQ  8(R9), R13\n\tMOVQ  (R9), R14\n\tLEAQ  (R13)(R14*1), R15\n\tMOVQ  s+0(FP), BP\n\tADDQ  R15, 256(BP)\n\tMOVQ  ctx+16(FP), R15\n\tSUBQ  R14, 128(R15)\n\tJS    error_not_enough_literals\n\tCMPQ  R13, $0x00020002\n\tJA    sequenceDecs_decode_56_bmi2_error_match_len_too_big\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decode_56_bmi2_match_len_ofs_ok\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decode_56_bmi2_error_match_len_ofs_mismatch\n\nsequenceDecs_decode_56_bmi2_match_len_ofs_ok:\n\tADDQ $0x18, R9\n\tMOVQ ctx+16(FP), CX\n\tDECQ 96(CX)\n\tJNS  sequenceDecs_decode_56_bmi2_main_loop\n\tMOVQ s+0(FP), CX\n\tMOVQ R10, 144(CX)\n\tMOVQ R11, 152(CX)\n\tMOVQ R12, 160(CX)\n\tMOVQ br+8(FP), CX\n\tMOVQ AX, 24(CX)\n\tMOVB DL, 32(CX)\n\tMOVQ BX, 8(CX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decode_56_bmi2_error_match_len_ofs_mismatch:\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decode_56_bmi2_error_match_len_too_big:\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n// func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool\n// Requires: SSE\nTEXT ·sequenceDecs_executeSimple_amd64(SB), $8-9\n\tMOVQ  ctx+0(FP), R10\n\tMOVQ  8(R10), CX\n\tTESTQ CX, CX\n\tJZ    empty_seqs\n\tMOVQ  (R10), AX\n\tMOVQ  24(R10), DX\n\tMOVQ  32(R10), BX\n\tMOVQ  80(R10), SI\n\tMOVQ  104(R10), DI\n\tMOVQ  120(R10), R8\n\tMOVQ  56(R10), R9\n\tMOVQ  64(R10), R10\n\tADDQ  R10, R9\n\n\t// seqsBase += 24 * seqIndex\n\tLEAQ (DX)(DX*2), R11\n\tSHLQ $0x03, R11\n\tADDQ R11, AX\n\n\t// outBase += outPosition\n\tADDQ DI, BX\n\nmain_loop:\n\tMOVQ (AX), R11\n\tMOVQ 16(AX), R12\n\tMOVQ 8(AX), R13\n\n\t// Copy literals\n\tTESTQ R11, R11\n\tJZ    check_offset\n\tXORQ  R14, R14\n\ncopy_1:\n\tMOVUPS (SI)(R14*1), X0\n\tMOVUPS X0, (BX)(R14*1)\n\tADDQ   $0x10, R14\n\tCMPQ   R14, R11\n\tJB     copy_1\n\tADDQ   R11, SI\n\tADDQ   R11, BX\n\tADDQ   R11, DI\n\n\t// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)\ncheck_offset:\n\tLEAQ (DI)(R10*1), R11\n\tCMPQ R12, R11\n\tJG   error_match_off_too_big\n\tCMPQ R12, R8\n\tJG   error_match_off_too_big\n\n\t// Copy match from history\n\tMOVQ R12, R11\n\tSUBQ DI, R11\n\tJLS  copy_match\n\tMOVQ R9, R14\n\tSUBQ R11, R14\n\tCMPQ R13, R11\n\tJG   copy_all_from_history\n\tMOVQ R13, R11\n\tSUBQ $0x10, R11\n\tJB   copy_4_small\n\ncopy_4_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (BX)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, BX\n\tSUBQ   $0x10, R11\n\tJAE    copy_4_loop\n\tLEAQ   16(R14)(R11*1), R14\n\tLEAQ   16(BX)(R11*1), BX\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(BX)\n\tJMP    copy_4_end\n\ncopy_4_small:\n\tCMPQ R13, $0x03\n\tJE   copy_4_move_3\n\tCMPQ R13, $0x08\n\tJB   copy_4_move_4through7\n\tJMP  copy_4_move_8through16\n\ncopy_4_move_3:\n\tMOVW (R14), R11\n\tMOVB 2(R14), R12\n\tMOVW R11, (BX)\n\tMOVB R12, 2(BX)\n\tADDQ R13, R14\n\tADDQ R13, BX\n\tJMP  copy_4_end\n\ncopy_4_move_4through7:\n\tMOVL (R14), R11\n\tMOVL -4(R14)(R13*1), R12\n\tMOVL R11, (BX)\n\tMOVL R12, -4(BX)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, BX\n\tJMP  copy_4_end\n\ncopy_4_move_8through16:\n\tMOVQ (R14), R11\n\tMOVQ -8(R14)(R13*1), R12\n\tMOVQ R11, (BX)\n\tMOVQ R12, -8(BX)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, BX\n\ncopy_4_end:\n\tADDQ R13, DI\n\tADDQ $0x18, AX\n\tINCQ DX\n\tCMPQ DX, CX\n\tJB   main_loop\n\tJMP  loop_finished\n\ncopy_all_from_history:\n\tMOVQ R11, R15\n\tSUBQ $0x10, R15\n\tJB   copy_5_small\n\ncopy_5_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (BX)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, BX\n\tSUBQ   $0x10, R15\n\tJAE    copy_5_loop\n\tLEAQ   16(R14)(R15*1), R14\n\tLEAQ   16(BX)(R15*1), BX\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(BX)\n\tJMP    copy_5_end\n\ncopy_5_small:\n\tCMPQ R11, $0x03\n\tJE   copy_5_move_3\n\tJB   copy_5_move_1or2\n\tCMPQ R11, $0x08\n\tJB   copy_5_move_4through7\n\tJMP  copy_5_move_8through16\n\ncopy_5_move_1or2:\n\tMOVB (R14), R15\n\tMOVB -1(R14)(R11*1), BP\n\tMOVB R15, (BX)\n\tMOVB BP, -1(BX)(R11*1)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\tJMP  copy_5_end\n\ncopy_5_move_3:\n\tMOVW (R14), R15\n\tMOVB 2(R14), BP\n\tMOVW R15, (BX)\n\tMOVB BP, 2(BX)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\tJMP  copy_5_end\n\ncopy_5_move_4through7:\n\tMOVL (R14), R15\n\tMOVL -4(R14)(R11*1), BP\n\tMOVL R15, (BX)\n\tMOVL BP, -4(BX)(R11*1)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\tJMP  copy_5_end\n\ncopy_5_move_8through16:\n\tMOVQ (R14), R15\n\tMOVQ -8(R14)(R11*1), BP\n\tMOVQ R15, (BX)\n\tMOVQ BP, -8(BX)(R11*1)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\ncopy_5_end:\n\tADDQ R11, DI\n\tSUBQ R11, R13\n\n\t// Copy match from the current buffer\ncopy_match:\n\tMOVQ BX, R11\n\tSUBQ R12, R11\n\n\t// ml <= mo\n\tCMPQ R13, R12\n\tJA   copy_overlapping_match\n\n\t// Copy non-overlapping match\n\tADDQ R13, DI\n\tMOVQ BX, R12\n\tADDQ R13, BX\n\ncopy_2:\n\tMOVUPS (R11), X0\n\tMOVUPS X0, (R12)\n\tADDQ   $0x10, R11\n\tADDQ   $0x10, R12\n\tSUBQ   $0x10, R13\n\tJHI    copy_2\n\tJMP    handle_loop\n\n\t// Copy overlapping match\ncopy_overlapping_match:\n\tADDQ R13, DI\n\ncopy_slow_3:\n\tMOVB (R11), R12\n\tMOVB R12, (BX)\n\tINCQ R11\n\tINCQ BX\n\tDECQ R13\n\tJNZ  copy_slow_3\n\nhandle_loop:\n\tADDQ $0x18, AX\n\tINCQ DX\n\tCMPQ DX, CX\n\tJB   main_loop\n\nloop_finished:\n\t// Return value\n\tMOVB $0x01, ret+8(FP)\n\n\t// Update the context\n\tMOVQ ctx+0(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVQ DI, 104(AX)\n\tSUBQ 80(AX), SI\n\tMOVQ SI, 112(AX)\n\tRET\n\nerror_match_off_too_big:\n\t// Return value\n\tMOVB $0x00, ret+8(FP)\n\n\t// Update the context\n\tMOVQ ctx+0(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVQ DI, 104(AX)\n\tSUBQ 80(AX), SI\n\tMOVQ SI, 112(AX)\n\tRET\n\nempty_seqs:\n\t// Return value\n\tMOVB $0x01, ret+8(FP)\n\tRET\n\n// func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool\n// Requires: SSE\nTEXT ·sequenceDecs_executeSimple_safe_amd64(SB), $8-9\n\tMOVQ  ctx+0(FP), R10\n\tMOVQ  8(R10), CX\n\tTESTQ CX, CX\n\tJZ    empty_seqs\n\tMOVQ  (R10), AX\n\tMOVQ  24(R10), DX\n\tMOVQ  32(R10), BX\n\tMOVQ  80(R10), SI\n\tMOVQ  104(R10), DI\n\tMOVQ  120(R10), R8\n\tMOVQ  56(R10), R9\n\tMOVQ  64(R10), R10\n\tADDQ  R10, R9\n\n\t// seqsBase += 24 * seqIndex\n\tLEAQ (DX)(DX*2), R11\n\tSHLQ $0x03, R11\n\tADDQ R11, AX\n\n\t// outBase += outPosition\n\tADDQ DI, BX\n\nmain_loop:\n\tMOVQ (AX), R11\n\tMOVQ 16(AX), R12\n\tMOVQ 8(AX), R13\n\n\t// Copy literals\n\tTESTQ R11, R11\n\tJZ    check_offset\n\tMOVQ  R11, R14\n\tSUBQ  $0x10, R14\n\tJB    copy_1_small\n\ncopy_1_loop:\n\tMOVUPS (SI), X0\n\tMOVUPS X0, (BX)\n\tADDQ   $0x10, SI\n\tADDQ   $0x10, BX\n\tSUBQ   $0x10, R14\n\tJAE    copy_1_loop\n\tLEAQ   16(SI)(R14*1), SI\n\tLEAQ   16(BX)(R14*1), BX\n\tMOVUPS -16(SI), X0\n\tMOVUPS X0, -16(BX)\n\tJMP    copy_1_end\n\ncopy_1_small:\n\tCMPQ R11, $0x03\n\tJE   copy_1_move_3\n\tJB   copy_1_move_1or2\n\tCMPQ R11, $0x08\n\tJB   copy_1_move_4through7\n\tJMP  copy_1_move_8through16\n\ncopy_1_move_1or2:\n\tMOVB (SI), R14\n\tMOVB -1(SI)(R11*1), R15\n\tMOVB R14, (BX)\n\tMOVB R15, -1(BX)(R11*1)\n\tADDQ R11, SI\n\tADDQ R11, BX\n\tJMP  copy_1_end\n\ncopy_1_move_3:\n\tMOVW (SI), R14\n\tMOVB 2(SI), R15\n\tMOVW R14, (BX)\n\tMOVB R15, 2(BX)\n\tADDQ R11, SI\n\tADDQ R11, BX\n\tJMP  copy_1_end\n\ncopy_1_move_4through7:\n\tMOVL (SI), R14\n\tMOVL -4(SI)(R11*1), R15\n\tMOVL R14, (BX)\n\tMOVL R15, -4(BX)(R11*1)\n\tADDQ R11, SI\n\tADDQ R11, BX\n\tJMP  copy_1_end\n\ncopy_1_move_8through16:\n\tMOVQ (SI), R14\n\tMOVQ -8(SI)(R11*1), R15\n\tMOVQ R14, (BX)\n\tMOVQ R15, -8(BX)(R11*1)\n\tADDQ R11, SI\n\tADDQ R11, BX\n\ncopy_1_end:\n\tADDQ R11, DI\n\n\t// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)\ncheck_offset:\n\tLEAQ (DI)(R10*1), R11\n\tCMPQ R12, R11\n\tJG   error_match_off_too_big\n\tCMPQ R12, R8\n\tJG   error_match_off_too_big\n\n\t// Copy match from history\n\tMOVQ R12, R11\n\tSUBQ DI, R11\n\tJLS  copy_match\n\tMOVQ R9, R14\n\tSUBQ R11, R14\n\tCMPQ R13, R11\n\tJG   copy_all_from_history\n\tMOVQ R13, R11\n\tSUBQ $0x10, R11\n\tJB   copy_4_small\n\ncopy_4_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (BX)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, BX\n\tSUBQ   $0x10, R11\n\tJAE    copy_4_loop\n\tLEAQ   16(R14)(R11*1), R14\n\tLEAQ   16(BX)(R11*1), BX\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(BX)\n\tJMP    copy_4_end\n\ncopy_4_small:\n\tCMPQ R13, $0x03\n\tJE   copy_4_move_3\n\tCMPQ R13, $0x08\n\tJB   copy_4_move_4through7\n\tJMP  copy_4_move_8through16\n\ncopy_4_move_3:\n\tMOVW (R14), R11\n\tMOVB 2(R14), R12\n\tMOVW R11, (BX)\n\tMOVB R12, 2(BX)\n\tADDQ R13, R14\n\tADDQ R13, BX\n\tJMP  copy_4_end\n\ncopy_4_move_4through7:\n\tMOVL (R14), R11\n\tMOVL -4(R14)(R13*1), R12\n\tMOVL R11, (BX)\n\tMOVL R12, -4(BX)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, BX\n\tJMP  copy_4_end\n\ncopy_4_move_8through16:\n\tMOVQ (R14), R11\n\tMOVQ -8(R14)(R13*1), R12\n\tMOVQ R11, (BX)\n\tMOVQ R12, -8(BX)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, BX\n\ncopy_4_end:\n\tADDQ R13, DI\n\tADDQ $0x18, AX\n\tINCQ DX\n\tCMPQ DX, CX\n\tJB   main_loop\n\tJMP  loop_finished\n\ncopy_all_from_history:\n\tMOVQ R11, R15\n\tSUBQ $0x10, R15\n\tJB   copy_5_small\n\ncopy_5_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (BX)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, BX\n\tSUBQ   $0x10, R15\n\tJAE    copy_5_loop\n\tLEAQ   16(R14)(R15*1), R14\n\tLEAQ   16(BX)(R15*1), BX\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(BX)\n\tJMP    copy_5_end\n\ncopy_5_small:\n\tCMPQ R11, $0x03\n\tJE   copy_5_move_3\n\tJB   copy_5_move_1or2\n\tCMPQ R11, $0x08\n\tJB   copy_5_move_4through7\n\tJMP  copy_5_move_8through16\n\ncopy_5_move_1or2:\n\tMOVB (R14), R15\n\tMOVB -1(R14)(R11*1), BP\n\tMOVB R15, (BX)\n\tMOVB BP, -1(BX)(R11*1)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\tJMP  copy_5_end\n\ncopy_5_move_3:\n\tMOVW (R14), R15\n\tMOVB 2(R14), BP\n\tMOVW R15, (BX)\n\tMOVB BP, 2(BX)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\tJMP  copy_5_end\n\ncopy_5_move_4through7:\n\tMOVL (R14), R15\n\tMOVL -4(R14)(R11*1), BP\n\tMOVL R15, (BX)\n\tMOVL BP, -4(BX)(R11*1)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\tJMP  copy_5_end\n\ncopy_5_move_8through16:\n\tMOVQ (R14), R15\n\tMOVQ -8(R14)(R11*1), BP\n\tMOVQ R15, (BX)\n\tMOVQ BP, -8(BX)(R11*1)\n\tADDQ R11, R14\n\tADDQ R11, BX\n\ncopy_5_end:\n\tADDQ R11, DI\n\tSUBQ R11, R13\n\n\t// Copy match from the current buffer\ncopy_match:\n\tMOVQ BX, R11\n\tSUBQ R12, R11\n\n\t// ml <= mo\n\tCMPQ R13, R12\n\tJA   copy_overlapping_match\n\n\t// Copy non-overlapping match\n\tADDQ R13, DI\n\tMOVQ R13, R12\n\tSUBQ $0x10, R12\n\tJB   copy_2_small\n\ncopy_2_loop:\n\tMOVUPS (R11), X0\n\tMOVUPS X0, (BX)\n\tADDQ   $0x10, R11\n\tADDQ   $0x10, BX\n\tSUBQ   $0x10, R12\n\tJAE    copy_2_loop\n\tLEAQ   16(R11)(R12*1), R11\n\tLEAQ   16(BX)(R12*1), BX\n\tMOVUPS -16(R11), X0\n\tMOVUPS X0, -16(BX)\n\tJMP    copy_2_end\n\ncopy_2_small:\n\tCMPQ R13, $0x03\n\tJE   copy_2_move_3\n\tJB   copy_2_move_1or2\n\tCMPQ R13, $0x08\n\tJB   copy_2_move_4through7\n\tJMP  copy_2_move_8through16\n\ncopy_2_move_1or2:\n\tMOVB (R11), R12\n\tMOVB -1(R11)(R13*1), R14\n\tMOVB R12, (BX)\n\tMOVB R14, -1(BX)(R13*1)\n\tADDQ R13, R11\n\tADDQ R13, BX\n\tJMP  copy_2_end\n\ncopy_2_move_3:\n\tMOVW (R11), R12\n\tMOVB 2(R11), R14\n\tMOVW R12, (BX)\n\tMOVB R14, 2(BX)\n\tADDQ R13, R11\n\tADDQ R13, BX\n\tJMP  copy_2_end\n\ncopy_2_move_4through7:\n\tMOVL (R11), R12\n\tMOVL -4(R11)(R13*1), R14\n\tMOVL R12, (BX)\n\tMOVL R14, -4(BX)(R13*1)\n\tADDQ R13, R11\n\tADDQ R13, BX\n\tJMP  copy_2_end\n\ncopy_2_move_8through16:\n\tMOVQ (R11), R12\n\tMOVQ -8(R11)(R13*1), R14\n\tMOVQ R12, (BX)\n\tMOVQ R14, -8(BX)(R13*1)\n\tADDQ R13, R11\n\tADDQ R13, BX\n\ncopy_2_end:\n\tJMP handle_loop\n\n\t// Copy overlapping match\ncopy_overlapping_match:\n\tADDQ R13, DI\n\ncopy_slow_3:\n\tMOVB (R11), R12\n\tMOVB R12, (BX)\n\tINCQ R11\n\tINCQ BX\n\tDECQ R13\n\tJNZ  copy_slow_3\n\nhandle_loop:\n\tADDQ $0x18, AX\n\tINCQ DX\n\tCMPQ DX, CX\n\tJB   main_loop\n\nloop_finished:\n\t// Return value\n\tMOVB $0x01, ret+8(FP)\n\n\t// Update the context\n\tMOVQ ctx+0(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVQ DI, 104(AX)\n\tSUBQ 80(AX), SI\n\tMOVQ SI, 112(AX)\n\tRET\n\nerror_match_off_too_big:\n\t// Return value\n\tMOVB $0x00, ret+8(FP)\n\n\t// Update the context\n\tMOVQ ctx+0(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVQ DI, 104(AX)\n\tSUBQ 80(AX), SI\n\tMOVQ SI, 112(AX)\n\tRET\n\nempty_seqs:\n\t// Return value\n\tMOVB $0x01, ret+8(FP)\n\tRET\n\n// func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n// Requires: CMOV, SSE\nTEXT ·sequenceDecs_decodeSync_amd64(SB), $64-32\n\tMOVQ    br+8(FP), CX\n\tMOVQ    24(CX), DX\n\tMOVBQZX 32(CX), BX\n\tMOVQ    (CX), AX\n\tMOVQ    8(CX), SI\n\tADDQ    SI, AX\n\tMOVQ    AX, (SP)\n\tMOVQ    ctx+16(FP), AX\n\tMOVQ    72(AX), DI\n\tMOVQ    80(AX), R8\n\tMOVQ    88(AX), R9\n\tXORQ    CX, CX\n\tMOVQ    CX, 8(SP)\n\tMOVQ    CX, 16(SP)\n\tMOVQ    CX, 24(SP)\n\tMOVQ    112(AX), R10\n\tMOVQ    128(AX), CX\n\tMOVQ    CX, 32(SP)\n\tMOVQ    144(AX), R11\n\tMOVQ    136(AX), R12\n\tMOVQ    200(AX), CX\n\tMOVQ    CX, 56(SP)\n\tMOVQ    176(AX), CX\n\tMOVQ    CX, 48(SP)\n\tMOVQ    184(AX), AX\n\tMOVQ    AX, 40(SP)\n\tMOVQ    40(SP), AX\n\tADDQ    AX, 48(SP)\n\n\t// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)\n\tADDQ R10, 32(SP)\n\n\t// outBase += outPosition\n\tADDQ R12, R10\n\nsequenceDecs_decodeSync_amd64_main_loop:\n\tMOVQ (SP), R13\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ SI, $0x08\n\tJL   sequenceDecs_decodeSync_amd64_fill_byte_by_byte\n\tMOVQ BX, AX\n\tSHRQ $0x03, AX\n\tSUBQ AX, R13\n\tMOVQ (R13), DX\n\tSUBQ AX, SI\n\tANDQ $0x07, BX\n\tJMP  sequenceDecs_decodeSync_amd64_fill_end\n\nsequenceDecs_decodeSync_amd64_fill_byte_by_byte:\n\tCMPQ    SI, $0x00\n\tJLE     sequenceDecs_decodeSync_amd64_fill_check_overread\n\tCMPQ    BX, $0x07\n\tJLE     sequenceDecs_decodeSync_amd64_fill_end\n\tSHLQ    $0x08, DX\n\tSUBQ    $0x01, R13\n\tSUBQ    $0x01, SI\n\tSUBQ    $0x08, BX\n\tMOVBQZX (R13), AX\n\tORQ     AX, DX\n\tJMP     sequenceDecs_decodeSync_amd64_fill_byte_by_byte\n\nsequenceDecs_decodeSync_amd64_fill_check_overread:\n\tCMPQ BX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_amd64_fill_end:\n\t// Update offset\n\tMOVQ  R9, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R14\n\tSHLQ  CL, R14\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decodeSync_amd64_of_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decodeSync_amd64_of_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decodeSync_amd64_of_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R14\n\tADDQ  R14, AX\n\nsequenceDecs_decodeSync_amd64_of_update_zero:\n\tMOVQ AX, 8(SP)\n\n\t// Update match length\n\tMOVQ  R8, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R14\n\tSHLQ  CL, R14\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decodeSync_amd64_ml_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decodeSync_amd64_ml_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decodeSync_amd64_ml_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R14\n\tADDQ  R14, AX\n\nsequenceDecs_decodeSync_amd64_ml_update_zero:\n\tMOVQ AX, 16(SP)\n\n\t// Fill bitreader to have enough for the remaining\n\tCMPQ SI, $0x08\n\tJL   sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte\n\tMOVQ BX, AX\n\tSHRQ $0x03, AX\n\tSUBQ AX, R13\n\tMOVQ (R13), DX\n\tSUBQ AX, SI\n\tANDQ $0x07, BX\n\tJMP  sequenceDecs_decodeSync_amd64_fill_2_end\n\nsequenceDecs_decodeSync_amd64_fill_2_byte_by_byte:\n\tCMPQ    SI, $0x00\n\tJLE     sequenceDecs_decodeSync_amd64_fill_2_check_overread\n\tCMPQ    BX, $0x07\n\tJLE     sequenceDecs_decodeSync_amd64_fill_2_end\n\tSHLQ    $0x08, DX\n\tSUBQ    $0x01, R13\n\tSUBQ    $0x01, SI\n\tSUBQ    $0x08, BX\n\tMOVBQZX (R13), AX\n\tORQ     AX, DX\n\tJMP     sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte\n\nsequenceDecs_decodeSync_amd64_fill_2_check_overread:\n\tCMPQ BX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_amd64_fill_2_end:\n\t// Update literal length\n\tMOVQ  DI, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R14\n\tSHLQ  CL, R14\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decodeSync_amd64_ll_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decodeSync_amd64_ll_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decodeSync_amd64_ll_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R14\n\tADDQ  R14, AX\n\nsequenceDecs_decodeSync_amd64_ll_update_zero:\n\tMOVQ AX, 24(SP)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R13, (SP)\n\tMOVQ    R9, AX\n\tSHRQ    $0x08, AX\n\tMOVBQZX AL, AX\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decodeSync_amd64_skip_update\n\n\t// Update Literal Length State\n\tMOVBQZX DI, R13\n\tSHRL    $0x10, DI\n\tLEAQ    (BX)(R13*1), CX\n\tMOVQ    DX, R14\n\tMOVQ    CX, BX\n\tROLQ    CL, R14\n\tMOVL    $0x00000001, R15\n\tMOVB    R13, CL\n\tSHLL    CL, R15\n\tDECL    R15\n\tANDQ    R15, R14\n\tADDQ    R14, DI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Match Length State\n\tMOVBQZX R8, R13\n\tSHRL    $0x10, R8\n\tLEAQ    (BX)(R13*1), CX\n\tMOVQ    DX, R14\n\tMOVQ    CX, BX\n\tROLQ    CL, R14\n\tMOVL    $0x00000001, R15\n\tMOVB    R13, CL\n\tSHLL    CL, R15\n\tDECL    R15\n\tANDQ    R15, R14\n\tADDQ    R14, R8\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Offset State\n\tMOVBQZX R9, R13\n\tSHRL    $0x10, R9\n\tLEAQ    (BX)(R13*1), CX\n\tMOVQ    DX, R14\n\tMOVQ    CX, BX\n\tROLQ    CL, R14\n\tMOVL    $0x00000001, R15\n\tMOVB    R13, CL\n\tSHLL    CL, R15\n\tDECL    R15\n\tANDQ    R15, R14\n\tADDQ    R14, R9\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R9*8), R9\n\nsequenceDecs_decodeSync_amd64_skip_update:\n\t// Adjust offset\n\tMOVQ   s+0(FP), CX\n\tMOVQ   8(SP), R13\n\tCMPQ   AX, $0x01\n\tJBE    sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0\n\tMOVUPS 144(CX), X0\n\tMOVQ   R13, 144(CX)\n\tMOVUPS X0, 152(CX)\n\tJMP    sequenceDecs_decodeSync_amd64_after_adjust\n\nsequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0:\n\tCMPQ 24(SP), $0x00000000\n\tJNE  sequenceDecs_decodeSync_amd64_adjust_offset_maybezero\n\tINCQ R13\n\tJMP  sequenceDecs_decodeSync_amd64_adjust_offset_nonzero\n\nsequenceDecs_decodeSync_amd64_adjust_offset_maybezero:\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_amd64_adjust_offset_nonzero\n\tMOVQ  144(CX), R13\n\tJMP   sequenceDecs_decodeSync_amd64_after_adjust\n\nsequenceDecs_decodeSync_amd64_adjust_offset_nonzero:\n\tMOVQ    R13, AX\n\tXORQ    R14, R14\n\tMOVQ    $-1, R15\n\tCMPQ    R13, $0x03\n\tCMOVQEQ R14, AX\n\tCMOVQEQ R15, R14\n\tADDQ    144(CX)(AX*8), R14\n\tJNZ     sequenceDecs_decodeSync_amd64_adjust_temp_valid\n\tMOVQ    $0x00000001, R14\n\nsequenceDecs_decodeSync_amd64_adjust_temp_valid:\n\tCMPQ R13, $0x01\n\tJZ   sequenceDecs_decodeSync_amd64_adjust_skip\n\tMOVQ 152(CX), AX\n\tMOVQ AX, 160(CX)\n\nsequenceDecs_decodeSync_amd64_adjust_skip:\n\tMOVQ 144(CX), AX\n\tMOVQ AX, 152(CX)\n\tMOVQ R14, 144(CX)\n\tMOVQ R14, R13\n\nsequenceDecs_decodeSync_amd64_after_adjust:\n\tMOVQ R13, 8(SP)\n\n\t// Check values\n\tMOVQ  16(SP), AX\n\tMOVQ  24(SP), CX\n\tLEAQ  (AX)(CX*1), R14\n\tMOVQ  s+0(FP), R15\n\tADDQ  R14, 256(R15)\n\tMOVQ  ctx+16(FP), R14\n\tSUBQ  CX, 104(R14)\n\tJS    error_not_enough_literals\n\tCMPQ  AX, $0x00020002\n\tJA    sequenceDecs_decodeSync_amd64_error_match_len_too_big\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_amd64_match_len_ofs_ok\n\tTESTQ AX, AX\n\tJNZ   sequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch\n\nsequenceDecs_decodeSync_amd64_match_len_ofs_ok:\n\tMOVQ 24(SP), AX\n\tMOVQ 8(SP), CX\n\tMOVQ 16(SP), R13\n\n\t// Check if we have enough space in s.out\n\tLEAQ (AX)(R13*1), R14\n\tADDQ R10, R14\n\tCMPQ R14, 32(SP)\n\tJA   error_not_enough_space\n\n\t// Copy literals\n\tTESTQ AX, AX\n\tJZ    check_offset\n\tXORQ  R14, R14\n\ncopy_1:\n\tMOVUPS (R11)(R14*1), X0\n\tMOVUPS X0, (R10)(R14*1)\n\tADDQ   $0x10, R14\n\tCMPQ   R14, AX\n\tJB     copy_1\n\tADDQ   AX, R11\n\tADDQ   AX, R10\n\tADDQ   AX, R12\n\n\t// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)\ncheck_offset:\n\tMOVQ R12, AX\n\tADDQ 40(SP), AX\n\tCMPQ CX, AX\n\tJG   error_match_off_too_big\n\tCMPQ CX, 56(SP)\n\tJG   error_match_off_too_big\n\n\t// Copy match from history\n\tMOVQ CX, AX\n\tSUBQ R12, AX\n\tJLS  copy_match\n\tMOVQ 48(SP), R14\n\tSUBQ AX, R14\n\tCMPQ R13, AX\n\tJG   copy_all_from_history\n\tMOVQ R13, AX\n\tSUBQ $0x10, AX\n\tJB   copy_4_small\n\ncopy_4_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R10)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R10\n\tSUBQ   $0x10, AX\n\tJAE    copy_4_loop\n\tLEAQ   16(R14)(AX*1), R14\n\tLEAQ   16(R10)(AX*1), R10\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R10)\n\tJMP    copy_4_end\n\ncopy_4_small:\n\tCMPQ R13, $0x03\n\tJE   copy_4_move_3\n\tCMPQ R13, $0x08\n\tJB   copy_4_move_4through7\n\tJMP  copy_4_move_8through16\n\ncopy_4_move_3:\n\tMOVW (R14), AX\n\tMOVB 2(R14), CL\n\tMOVW AX, (R10)\n\tMOVB CL, 2(R10)\n\tADDQ R13, R14\n\tADDQ R13, R10\n\tJMP  copy_4_end\n\ncopy_4_move_4through7:\n\tMOVL (R14), AX\n\tMOVL -4(R14)(R13*1), CX\n\tMOVL AX, (R10)\n\tMOVL CX, -4(R10)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R10\n\tJMP  copy_4_end\n\ncopy_4_move_8through16:\n\tMOVQ (R14), AX\n\tMOVQ -8(R14)(R13*1), CX\n\tMOVQ AX, (R10)\n\tMOVQ CX, -8(R10)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R10\n\ncopy_4_end:\n\tADDQ R13, R12\n\tJMP  handle_loop\n\tJMP loop_finished\n\ncopy_all_from_history:\n\tMOVQ AX, R15\n\tSUBQ $0x10, R15\n\tJB   copy_5_small\n\ncopy_5_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R10)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R10\n\tSUBQ   $0x10, R15\n\tJAE    copy_5_loop\n\tLEAQ   16(R14)(R15*1), R14\n\tLEAQ   16(R10)(R15*1), R10\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R10)\n\tJMP    copy_5_end\n\ncopy_5_small:\n\tCMPQ AX, $0x03\n\tJE   copy_5_move_3\n\tJB   copy_5_move_1or2\n\tCMPQ AX, $0x08\n\tJB   copy_5_move_4through7\n\tJMP  copy_5_move_8through16\n\ncopy_5_move_1or2:\n\tMOVB (R14), R15\n\tMOVB -1(R14)(AX*1), BP\n\tMOVB R15, (R10)\n\tMOVB BP, -1(R10)(AX*1)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\tJMP  copy_5_end\n\ncopy_5_move_3:\n\tMOVW (R14), R15\n\tMOVB 2(R14), BP\n\tMOVW R15, (R10)\n\tMOVB BP, 2(R10)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\tJMP  copy_5_end\n\ncopy_5_move_4through7:\n\tMOVL (R14), R15\n\tMOVL -4(R14)(AX*1), BP\n\tMOVL R15, (R10)\n\tMOVL BP, -4(R10)(AX*1)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\tJMP  copy_5_end\n\ncopy_5_move_8through16:\n\tMOVQ (R14), R15\n\tMOVQ -8(R14)(AX*1), BP\n\tMOVQ R15, (R10)\n\tMOVQ BP, -8(R10)(AX*1)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\ncopy_5_end:\n\tADDQ AX, R12\n\tSUBQ AX, R13\n\n\t// Copy match from the current buffer\ncopy_match:\n\tMOVQ R10, AX\n\tSUBQ CX, AX\n\n\t// ml <= mo\n\tCMPQ R13, CX\n\tJA   copy_overlapping_match\n\n\t// Copy non-overlapping match\n\tADDQ R13, R12\n\tMOVQ R10, CX\n\tADDQ R13, R10\n\ncopy_2:\n\tMOVUPS (AX), X0\n\tMOVUPS X0, (CX)\n\tADDQ   $0x10, AX\n\tADDQ   $0x10, CX\n\tSUBQ   $0x10, R13\n\tJHI    copy_2\n\tJMP    handle_loop\n\n\t// Copy overlapping match\ncopy_overlapping_match:\n\tADDQ R13, R12\n\ncopy_slow_3:\n\tMOVB (AX), CL\n\tMOVB CL, (R10)\n\tINCQ AX\n\tINCQ R10\n\tDECQ R13\n\tJNZ  copy_slow_3\n\nhandle_loop:\n\tMOVQ ctx+16(FP), AX\n\tDECQ 96(AX)\n\tJNS  sequenceDecs_decodeSync_amd64_main_loop\n\nloop_finished:\n\tMOVQ br+8(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVB BL, 32(AX)\n\tMOVQ SI, 8(AX)\n\n\t// Update the context\n\tMOVQ ctx+16(FP), AX\n\tMOVQ R12, 136(AX)\n\tMOVQ 144(AX), CX\n\tSUBQ CX, R11\n\tMOVQ R11, 168(AX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch:\n\tMOVQ 16(SP), AX\n\tMOVQ ctx+16(FP), CX\n\tMOVQ AX, 216(CX)\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decodeSync_amd64_error_match_len_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\nerror_match_off_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 8(SP), CX\n\tMOVQ CX, 224(AX)\n\tMOVQ R12, 136(AX)\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n\t// Return with not enough output space error\nerror_not_enough_space:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ R12, 136(AX)\n\tMOVQ $0x00000005, ret+24(FP)\n\tRET\n\n// func sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n// Requires: BMI, BMI2, CMOV, SSE\nTEXT ·sequenceDecs_decodeSync_bmi2(SB), $64-32\n\tMOVQ    br+8(FP), BX\n\tMOVQ    24(BX), AX\n\tMOVBQZX 32(BX), DX\n\tMOVQ    (BX), CX\n\tMOVQ    8(BX), BX\n\tADDQ    BX, CX\n\tMOVQ    CX, (SP)\n\tMOVQ    ctx+16(FP), CX\n\tMOVQ    72(CX), SI\n\tMOVQ    80(CX), DI\n\tMOVQ    88(CX), R8\n\tXORQ    R9, R9\n\tMOVQ    R9, 8(SP)\n\tMOVQ    R9, 16(SP)\n\tMOVQ    R9, 24(SP)\n\tMOVQ    112(CX), R9\n\tMOVQ    128(CX), R10\n\tMOVQ    R10, 32(SP)\n\tMOVQ    144(CX), R10\n\tMOVQ    136(CX), R11\n\tMOVQ    200(CX), R12\n\tMOVQ    R12, 56(SP)\n\tMOVQ    176(CX), R12\n\tMOVQ    R12, 48(SP)\n\tMOVQ    184(CX), CX\n\tMOVQ    CX, 40(SP)\n\tMOVQ    40(SP), CX\n\tADDQ    CX, 48(SP)\n\n\t// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)\n\tADDQ R9, 32(SP)\n\n\t// outBase += outPosition\n\tADDQ R11, R9\n\nsequenceDecs_decodeSync_bmi2_main_loop:\n\tMOVQ (SP), R12\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ BX, $0x08\n\tJL   sequenceDecs_decodeSync_bmi2_fill_byte_by_byte\n\tMOVQ DX, CX\n\tSHRQ $0x03, CX\n\tSUBQ CX, R12\n\tMOVQ (R12), AX\n\tSUBQ CX, BX\n\tANDQ $0x07, DX\n\tJMP  sequenceDecs_decodeSync_bmi2_fill_end\n\nsequenceDecs_decodeSync_bmi2_fill_byte_by_byte:\n\tCMPQ    BX, $0x00\n\tJLE     sequenceDecs_decodeSync_bmi2_fill_check_overread\n\tCMPQ    DX, $0x07\n\tJLE     sequenceDecs_decodeSync_bmi2_fill_end\n\tSHLQ    $0x08, AX\n\tSUBQ    $0x01, R12\n\tSUBQ    $0x01, BX\n\tSUBQ    $0x08, DX\n\tMOVBQZX (R12), CX\n\tORQ     CX, AX\n\tJMP     sequenceDecs_decodeSync_bmi2_fill_byte_by_byte\n\nsequenceDecs_decodeSync_bmi2_fill_check_overread:\n\tCMPQ DX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_bmi2_fill_end:\n\t// Update offset\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, R8, R13\n\tMOVQ   AX, R14\n\tLEAQ   (DX)(R13*1), CX\n\tROLQ   CL, R14\n\tBZHIQ  R13, R14, R14\n\tMOVQ   CX, DX\n\tMOVQ   R8, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R14, CX\n\tMOVQ   CX, 8(SP)\n\n\t// Update match length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, DI, R13\n\tMOVQ   AX, R14\n\tLEAQ   (DX)(R13*1), CX\n\tROLQ   CL, R14\n\tBZHIQ  R13, R14, R14\n\tMOVQ   CX, DX\n\tMOVQ   DI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R14, CX\n\tMOVQ   CX, 16(SP)\n\n\t// Fill bitreader to have enough for the remaining\n\tCMPQ BX, $0x08\n\tJL   sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte\n\tMOVQ DX, CX\n\tSHRQ $0x03, CX\n\tSUBQ CX, R12\n\tMOVQ (R12), AX\n\tSUBQ CX, BX\n\tANDQ $0x07, DX\n\tJMP  sequenceDecs_decodeSync_bmi2_fill_2_end\n\nsequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte:\n\tCMPQ    BX, $0x00\n\tJLE     sequenceDecs_decodeSync_bmi2_fill_2_check_overread\n\tCMPQ    DX, $0x07\n\tJLE     sequenceDecs_decodeSync_bmi2_fill_2_end\n\tSHLQ    $0x08, AX\n\tSUBQ    $0x01, R12\n\tSUBQ    $0x01, BX\n\tSUBQ    $0x08, DX\n\tMOVBQZX (R12), CX\n\tORQ     CX, AX\n\tJMP     sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte\n\nsequenceDecs_decodeSync_bmi2_fill_2_check_overread:\n\tCMPQ DX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_bmi2_fill_2_end:\n\t// Update literal length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, SI, R13\n\tMOVQ   AX, R14\n\tLEAQ   (DX)(R13*1), CX\n\tROLQ   CL, R14\n\tBZHIQ  R13, R14, R14\n\tMOVQ   CX, DX\n\tMOVQ   SI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R14, CX\n\tMOVQ   CX, 24(SP)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R12, (SP)\n\tMOVQ    $0x00000808, CX\n\tBEXTRQ  CX, R8, R12\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decodeSync_bmi2_skip_update\n\tLEAQ    (SI)(DI*1), R13\n\tADDQ    R8, R13\n\tMOVBQZX R13, R13\n\tLEAQ    (DX)(R13*1), CX\n\tMOVQ    AX, R14\n\tMOVQ    CX, DX\n\tROLQ    CL, R14\n\tBZHIQ   R13, R14, R14\n\n\t// Update Offset State\n\tBZHIQ R8, R14, CX\n\tSHRXQ R8, R14, R14\n\tSHRL  $0x10, R8\n\tADDQ  CX, R8\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Match Length State\n\tBZHIQ DI, R14, CX\n\tSHRXQ DI, R14, R14\n\tSHRL  $0x10, DI\n\tADDQ  CX, DI\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Literal Length State\n\tBZHIQ SI, R14, CX\n\tSHRL  $0x10, SI\n\tADDQ  CX, SI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(SI*8), SI\n\nsequenceDecs_decodeSync_bmi2_skip_update:\n\t// Adjust offset\n\tMOVQ   s+0(FP), CX\n\tMOVQ   8(SP), R13\n\tCMPQ   R12, $0x01\n\tJBE    sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0\n\tMOVUPS 144(CX), X0\n\tMOVQ   R13, 144(CX)\n\tMOVUPS X0, 152(CX)\n\tJMP    sequenceDecs_decodeSync_bmi2_after_adjust\n\nsequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0:\n\tCMPQ 24(SP), $0x00000000\n\tJNE  sequenceDecs_decodeSync_bmi2_adjust_offset_maybezero\n\tINCQ R13\n\tJMP  sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero\n\nsequenceDecs_decodeSync_bmi2_adjust_offset_maybezero:\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero\n\tMOVQ  144(CX), R13\n\tJMP   sequenceDecs_decodeSync_bmi2_after_adjust\n\nsequenceDecs_decodeSync_bmi2_adjust_offset_nonzero:\n\tMOVQ    R13, R12\n\tXORQ    R14, R14\n\tMOVQ    $-1, R15\n\tCMPQ    R13, $0x03\n\tCMOVQEQ R14, R12\n\tCMOVQEQ R15, R14\n\tADDQ    144(CX)(R12*8), R14\n\tJNZ     sequenceDecs_decodeSync_bmi2_adjust_temp_valid\n\tMOVQ    $0x00000001, R14\n\nsequenceDecs_decodeSync_bmi2_adjust_temp_valid:\n\tCMPQ R13, $0x01\n\tJZ   sequenceDecs_decodeSync_bmi2_adjust_skip\n\tMOVQ 152(CX), R12\n\tMOVQ R12, 160(CX)\n\nsequenceDecs_decodeSync_bmi2_adjust_skip:\n\tMOVQ 144(CX), R12\n\tMOVQ R12, 152(CX)\n\tMOVQ R14, 144(CX)\n\tMOVQ R14, R13\n\nsequenceDecs_decodeSync_bmi2_after_adjust:\n\tMOVQ R13, 8(SP)\n\n\t// Check values\n\tMOVQ  16(SP), CX\n\tMOVQ  24(SP), R12\n\tLEAQ  (CX)(R12*1), R14\n\tMOVQ  s+0(FP), R15\n\tADDQ  R14, 256(R15)\n\tMOVQ  ctx+16(FP), R14\n\tSUBQ  R12, 104(R14)\n\tJS    error_not_enough_literals\n\tCMPQ  CX, $0x00020002\n\tJA    sequenceDecs_decodeSync_bmi2_error_match_len_too_big\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_bmi2_match_len_ofs_ok\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decodeSync_bmi2_error_match_len_ofs_mismatch\n\nsequenceDecs_decodeSync_bmi2_match_len_ofs_ok:\n\tMOVQ 24(SP), CX\n\tMOVQ 8(SP), R12\n\tMOVQ 16(SP), R13\n\n\t// Check if we have enough space in s.out\n\tLEAQ (CX)(R13*1), R14\n\tADDQ R9, R14\n\tCMPQ R14, 32(SP)\n\tJA   error_not_enough_space\n\n\t// Copy literals\n\tTESTQ CX, CX\n\tJZ    check_offset\n\tXORQ  R14, R14\n\ncopy_1:\n\tMOVUPS (R10)(R14*1), X0\n\tMOVUPS X0, (R9)(R14*1)\n\tADDQ   $0x10, R14\n\tCMPQ   R14, CX\n\tJB     copy_1\n\tADDQ   CX, R10\n\tADDQ   CX, R9\n\tADDQ   CX, R11\n\n\t// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)\ncheck_offset:\n\tMOVQ R11, CX\n\tADDQ 40(SP), CX\n\tCMPQ R12, CX\n\tJG   error_match_off_too_big\n\tCMPQ R12, 56(SP)\n\tJG   error_match_off_too_big\n\n\t// Copy match from history\n\tMOVQ R12, CX\n\tSUBQ R11, CX\n\tJLS  copy_match\n\tMOVQ 48(SP), R14\n\tSUBQ CX, R14\n\tCMPQ R13, CX\n\tJG   copy_all_from_history\n\tMOVQ R13, CX\n\tSUBQ $0x10, CX\n\tJB   copy_4_small\n\ncopy_4_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R9)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R9\n\tSUBQ   $0x10, CX\n\tJAE    copy_4_loop\n\tLEAQ   16(R14)(CX*1), R14\n\tLEAQ   16(R9)(CX*1), R9\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R9)\n\tJMP    copy_4_end\n\ncopy_4_small:\n\tCMPQ R13, $0x03\n\tJE   copy_4_move_3\n\tCMPQ R13, $0x08\n\tJB   copy_4_move_4through7\n\tJMP  copy_4_move_8through16\n\ncopy_4_move_3:\n\tMOVW (R14), CX\n\tMOVB 2(R14), R12\n\tMOVW CX, (R9)\n\tMOVB R12, 2(R9)\n\tADDQ R13, R14\n\tADDQ R13, R9\n\tJMP  copy_4_end\n\ncopy_4_move_4through7:\n\tMOVL (R14), CX\n\tMOVL -4(R14)(R13*1), R12\n\tMOVL CX, (R9)\n\tMOVL R12, -4(R9)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R9\n\tJMP  copy_4_end\n\ncopy_4_move_8through16:\n\tMOVQ (R14), CX\n\tMOVQ -8(R14)(R13*1), R12\n\tMOVQ CX, (R9)\n\tMOVQ R12, -8(R9)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R9\n\ncopy_4_end:\n\tADDQ R13, R11\n\tJMP  handle_loop\n\tJMP loop_finished\n\ncopy_all_from_history:\n\tMOVQ CX, R15\n\tSUBQ $0x10, R15\n\tJB   copy_5_small\n\ncopy_5_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R9)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R9\n\tSUBQ   $0x10, R15\n\tJAE    copy_5_loop\n\tLEAQ   16(R14)(R15*1), R14\n\tLEAQ   16(R9)(R15*1), R9\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R9)\n\tJMP    copy_5_end\n\ncopy_5_small:\n\tCMPQ CX, $0x03\n\tJE   copy_5_move_3\n\tJB   copy_5_move_1or2\n\tCMPQ CX, $0x08\n\tJB   copy_5_move_4through7\n\tJMP  copy_5_move_8through16\n\ncopy_5_move_1or2:\n\tMOVB (R14), R15\n\tMOVB -1(R14)(CX*1), BP\n\tMOVB R15, (R9)\n\tMOVB BP, -1(R9)(CX*1)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\tJMP  copy_5_end\n\ncopy_5_move_3:\n\tMOVW (R14), R15\n\tMOVB 2(R14), BP\n\tMOVW R15, (R9)\n\tMOVB BP, 2(R9)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\tJMP  copy_5_end\n\ncopy_5_move_4through7:\n\tMOVL (R14), R15\n\tMOVL -4(R14)(CX*1), BP\n\tMOVL R15, (R9)\n\tMOVL BP, -4(R9)(CX*1)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\tJMP  copy_5_end\n\ncopy_5_move_8through16:\n\tMOVQ (R14), R15\n\tMOVQ -8(R14)(CX*1), BP\n\tMOVQ R15, (R9)\n\tMOVQ BP, -8(R9)(CX*1)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\ncopy_5_end:\n\tADDQ CX, R11\n\tSUBQ CX, R13\n\n\t// Copy match from the current buffer\ncopy_match:\n\tMOVQ R9, CX\n\tSUBQ R12, CX\n\n\t// ml <= mo\n\tCMPQ R13, R12\n\tJA   copy_overlapping_match\n\n\t// Copy non-overlapping match\n\tADDQ R13, R11\n\tMOVQ R9, R12\n\tADDQ R13, R9\n\ncopy_2:\n\tMOVUPS (CX), X0\n\tMOVUPS X0, (R12)\n\tADDQ   $0x10, CX\n\tADDQ   $0x10, R12\n\tSUBQ   $0x10, R13\n\tJHI    copy_2\n\tJMP    handle_loop\n\n\t// Copy overlapping match\ncopy_overlapping_match:\n\tADDQ R13, R11\n\ncopy_slow_3:\n\tMOVB (CX), R12\n\tMOVB R12, (R9)\n\tINCQ CX\n\tINCQ R9\n\tDECQ R13\n\tJNZ  copy_slow_3\n\nhandle_loop:\n\tMOVQ ctx+16(FP), CX\n\tDECQ 96(CX)\n\tJNS  sequenceDecs_decodeSync_bmi2_main_loop\n\nloop_finished:\n\tMOVQ br+8(FP), CX\n\tMOVQ AX, 24(CX)\n\tMOVB DL, 32(CX)\n\tMOVQ BX, 8(CX)\n\n\t// Update the context\n\tMOVQ ctx+16(FP), AX\n\tMOVQ R11, 136(AX)\n\tMOVQ 144(AX), CX\n\tSUBQ CX, R10\n\tMOVQ R10, 168(AX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decodeSync_bmi2_error_match_len_ofs_mismatch:\n\tMOVQ 16(SP), AX\n\tMOVQ ctx+16(FP), CX\n\tMOVQ AX, 216(CX)\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decodeSync_bmi2_error_match_len_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\nerror_match_off_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 8(SP), CX\n\tMOVQ CX, 224(AX)\n\tMOVQ R11, 136(AX)\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n\t// Return with not enough output space error\nerror_not_enough_space:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ R11, 136(AX)\n\tMOVQ $0x00000005, ret+24(FP)\n\tRET\n\n// func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n// Requires: CMOV, SSE\nTEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $64-32\n\tMOVQ    br+8(FP), CX\n\tMOVQ    24(CX), DX\n\tMOVBQZX 32(CX), BX\n\tMOVQ    (CX), AX\n\tMOVQ    8(CX), SI\n\tADDQ    SI, AX\n\tMOVQ    AX, (SP)\n\tMOVQ    ctx+16(FP), AX\n\tMOVQ    72(AX), DI\n\tMOVQ    80(AX), R8\n\tMOVQ    88(AX), R9\n\tXORQ    CX, CX\n\tMOVQ    CX, 8(SP)\n\tMOVQ    CX, 16(SP)\n\tMOVQ    CX, 24(SP)\n\tMOVQ    112(AX), R10\n\tMOVQ    128(AX), CX\n\tMOVQ    CX, 32(SP)\n\tMOVQ    144(AX), R11\n\tMOVQ    136(AX), R12\n\tMOVQ    200(AX), CX\n\tMOVQ    CX, 56(SP)\n\tMOVQ    176(AX), CX\n\tMOVQ    CX, 48(SP)\n\tMOVQ    184(AX), AX\n\tMOVQ    AX, 40(SP)\n\tMOVQ    40(SP), AX\n\tADDQ    AX, 48(SP)\n\n\t// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)\n\tADDQ R10, 32(SP)\n\n\t// outBase += outPosition\n\tADDQ R12, R10\n\nsequenceDecs_decodeSync_safe_amd64_main_loop:\n\tMOVQ (SP), R13\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ SI, $0x08\n\tJL   sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte\n\tMOVQ BX, AX\n\tSHRQ $0x03, AX\n\tSUBQ AX, R13\n\tMOVQ (R13), DX\n\tSUBQ AX, SI\n\tANDQ $0x07, BX\n\tJMP  sequenceDecs_decodeSync_safe_amd64_fill_end\n\nsequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte:\n\tCMPQ    SI, $0x00\n\tJLE     sequenceDecs_decodeSync_safe_amd64_fill_check_overread\n\tCMPQ    BX, $0x07\n\tJLE     sequenceDecs_decodeSync_safe_amd64_fill_end\n\tSHLQ    $0x08, DX\n\tSUBQ    $0x01, R13\n\tSUBQ    $0x01, SI\n\tSUBQ    $0x08, BX\n\tMOVBQZX (R13), AX\n\tORQ     AX, DX\n\tJMP     sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte\n\nsequenceDecs_decodeSync_safe_amd64_fill_check_overread:\n\tCMPQ BX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_safe_amd64_fill_end:\n\t// Update offset\n\tMOVQ  R9, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R14\n\tSHLQ  CL, R14\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decodeSync_safe_amd64_of_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decodeSync_safe_amd64_of_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decodeSync_safe_amd64_of_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R14\n\tADDQ  R14, AX\n\nsequenceDecs_decodeSync_safe_amd64_of_update_zero:\n\tMOVQ AX, 8(SP)\n\n\t// Update match length\n\tMOVQ  R8, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R14\n\tSHLQ  CL, R14\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decodeSync_safe_amd64_ml_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decodeSync_safe_amd64_ml_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decodeSync_safe_amd64_ml_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R14\n\tADDQ  R14, AX\n\nsequenceDecs_decodeSync_safe_amd64_ml_update_zero:\n\tMOVQ AX, 16(SP)\n\n\t// Fill bitreader to have enough for the remaining\n\tCMPQ SI, $0x08\n\tJL   sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte\n\tMOVQ BX, AX\n\tSHRQ $0x03, AX\n\tSUBQ AX, R13\n\tMOVQ (R13), DX\n\tSUBQ AX, SI\n\tANDQ $0x07, BX\n\tJMP  sequenceDecs_decodeSync_safe_amd64_fill_2_end\n\nsequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte:\n\tCMPQ    SI, $0x00\n\tJLE     sequenceDecs_decodeSync_safe_amd64_fill_2_check_overread\n\tCMPQ    BX, $0x07\n\tJLE     sequenceDecs_decodeSync_safe_amd64_fill_2_end\n\tSHLQ    $0x08, DX\n\tSUBQ    $0x01, R13\n\tSUBQ    $0x01, SI\n\tSUBQ    $0x08, BX\n\tMOVBQZX (R13), AX\n\tORQ     AX, DX\n\tJMP     sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte\n\nsequenceDecs_decodeSync_safe_amd64_fill_2_check_overread:\n\tCMPQ BX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_safe_amd64_fill_2_end:\n\t// Update literal length\n\tMOVQ  DI, AX\n\tMOVQ  BX, CX\n\tMOVQ  DX, R14\n\tSHLQ  CL, R14\n\tMOVB  AH, CL\n\tSHRQ  $0x20, AX\n\tTESTQ CX, CX\n\tJZ    sequenceDecs_decodeSync_safe_amd64_ll_update_zero\n\tADDQ  CX, BX\n\tCMPQ  BX, $0x40\n\tJA    sequenceDecs_decodeSync_safe_amd64_ll_update_zero\n\tCMPQ  CX, $0x40\n\tJAE   sequenceDecs_decodeSync_safe_amd64_ll_update_zero\n\tNEGQ  CX\n\tSHRQ  CL, R14\n\tADDQ  R14, AX\n\nsequenceDecs_decodeSync_safe_amd64_ll_update_zero:\n\tMOVQ AX, 24(SP)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R13, (SP)\n\tMOVQ    R9, AX\n\tSHRQ    $0x08, AX\n\tMOVBQZX AL, AX\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decodeSync_safe_amd64_skip_update\n\n\t// Update Literal Length State\n\tMOVBQZX DI, R13\n\tSHRL    $0x10, DI\n\tLEAQ    (BX)(R13*1), CX\n\tMOVQ    DX, R14\n\tMOVQ    CX, BX\n\tROLQ    CL, R14\n\tMOVL    $0x00000001, R15\n\tMOVB    R13, CL\n\tSHLL    CL, R15\n\tDECL    R15\n\tANDQ    R15, R14\n\tADDQ    R14, DI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Match Length State\n\tMOVBQZX R8, R13\n\tSHRL    $0x10, R8\n\tLEAQ    (BX)(R13*1), CX\n\tMOVQ    DX, R14\n\tMOVQ    CX, BX\n\tROLQ    CL, R14\n\tMOVL    $0x00000001, R15\n\tMOVB    R13, CL\n\tSHLL    CL, R15\n\tDECL    R15\n\tANDQ    R15, R14\n\tADDQ    R14, R8\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Offset State\n\tMOVBQZX R9, R13\n\tSHRL    $0x10, R9\n\tLEAQ    (BX)(R13*1), CX\n\tMOVQ    DX, R14\n\tMOVQ    CX, BX\n\tROLQ    CL, R14\n\tMOVL    $0x00000001, R15\n\tMOVB    R13, CL\n\tSHLL    CL, R15\n\tDECL    R15\n\tANDQ    R15, R14\n\tADDQ    R14, R9\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R9*8), R9\n\nsequenceDecs_decodeSync_safe_amd64_skip_update:\n\t// Adjust offset\n\tMOVQ   s+0(FP), CX\n\tMOVQ   8(SP), R13\n\tCMPQ   AX, $0x01\n\tJBE    sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0\n\tMOVUPS 144(CX), X0\n\tMOVQ   R13, 144(CX)\n\tMOVUPS X0, 152(CX)\n\tJMP    sequenceDecs_decodeSync_safe_amd64_after_adjust\n\nsequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0:\n\tCMPQ 24(SP), $0x00000000\n\tJNE  sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero\n\tINCQ R13\n\tJMP  sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero\n\nsequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero:\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero\n\tMOVQ  144(CX), R13\n\tJMP   sequenceDecs_decodeSync_safe_amd64_after_adjust\n\nsequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero:\n\tMOVQ    R13, AX\n\tXORQ    R14, R14\n\tMOVQ    $-1, R15\n\tCMPQ    R13, $0x03\n\tCMOVQEQ R14, AX\n\tCMOVQEQ R15, R14\n\tADDQ    144(CX)(AX*8), R14\n\tJNZ     sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid\n\tMOVQ    $0x00000001, R14\n\nsequenceDecs_decodeSync_safe_amd64_adjust_temp_valid:\n\tCMPQ R13, $0x01\n\tJZ   sequenceDecs_decodeSync_safe_amd64_adjust_skip\n\tMOVQ 152(CX), AX\n\tMOVQ AX, 160(CX)\n\nsequenceDecs_decodeSync_safe_amd64_adjust_skip:\n\tMOVQ 144(CX), AX\n\tMOVQ AX, 152(CX)\n\tMOVQ R14, 144(CX)\n\tMOVQ R14, R13\n\nsequenceDecs_decodeSync_safe_amd64_after_adjust:\n\tMOVQ R13, 8(SP)\n\n\t// Check values\n\tMOVQ  16(SP), AX\n\tMOVQ  24(SP), CX\n\tLEAQ  (AX)(CX*1), R14\n\tMOVQ  s+0(FP), R15\n\tADDQ  R14, 256(R15)\n\tMOVQ  ctx+16(FP), R14\n\tSUBQ  CX, 104(R14)\n\tJS    error_not_enough_literals\n\tCMPQ  AX, $0x00020002\n\tJA    sequenceDecs_decodeSync_safe_amd64_error_match_len_too_big\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok\n\tTESTQ AX, AX\n\tJNZ   sequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch\n\nsequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok:\n\tMOVQ 24(SP), AX\n\tMOVQ 8(SP), CX\n\tMOVQ 16(SP), R13\n\n\t// Check if we have enough space in s.out\n\tLEAQ (AX)(R13*1), R14\n\tADDQ R10, R14\n\tCMPQ R14, 32(SP)\n\tJA   error_not_enough_space\n\n\t// Copy literals\n\tTESTQ AX, AX\n\tJZ    check_offset\n\tMOVQ  AX, R14\n\tSUBQ  $0x10, R14\n\tJB    copy_1_small\n\ncopy_1_loop:\n\tMOVUPS (R11), X0\n\tMOVUPS X0, (R10)\n\tADDQ   $0x10, R11\n\tADDQ   $0x10, R10\n\tSUBQ   $0x10, R14\n\tJAE    copy_1_loop\n\tLEAQ   16(R11)(R14*1), R11\n\tLEAQ   16(R10)(R14*1), R10\n\tMOVUPS -16(R11), X0\n\tMOVUPS X0, -16(R10)\n\tJMP    copy_1_end\n\ncopy_1_small:\n\tCMPQ AX, $0x03\n\tJE   copy_1_move_3\n\tJB   copy_1_move_1or2\n\tCMPQ AX, $0x08\n\tJB   copy_1_move_4through7\n\tJMP  copy_1_move_8through16\n\ncopy_1_move_1or2:\n\tMOVB (R11), R14\n\tMOVB -1(R11)(AX*1), R15\n\tMOVB R14, (R10)\n\tMOVB R15, -1(R10)(AX*1)\n\tADDQ AX, R11\n\tADDQ AX, R10\n\tJMP  copy_1_end\n\ncopy_1_move_3:\n\tMOVW (R11), R14\n\tMOVB 2(R11), R15\n\tMOVW R14, (R10)\n\tMOVB R15, 2(R10)\n\tADDQ AX, R11\n\tADDQ AX, R10\n\tJMP  copy_1_end\n\ncopy_1_move_4through7:\n\tMOVL (R11), R14\n\tMOVL -4(R11)(AX*1), R15\n\tMOVL R14, (R10)\n\tMOVL R15, -4(R10)(AX*1)\n\tADDQ AX, R11\n\tADDQ AX, R10\n\tJMP  copy_1_end\n\ncopy_1_move_8through16:\n\tMOVQ (R11), R14\n\tMOVQ -8(R11)(AX*1), R15\n\tMOVQ R14, (R10)\n\tMOVQ R15, -8(R10)(AX*1)\n\tADDQ AX, R11\n\tADDQ AX, R10\n\ncopy_1_end:\n\tADDQ AX, R12\n\n\t// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)\ncheck_offset:\n\tMOVQ R12, AX\n\tADDQ 40(SP), AX\n\tCMPQ CX, AX\n\tJG   error_match_off_too_big\n\tCMPQ CX, 56(SP)\n\tJG   error_match_off_too_big\n\n\t// Copy match from history\n\tMOVQ CX, AX\n\tSUBQ R12, AX\n\tJLS  copy_match\n\tMOVQ 48(SP), R14\n\tSUBQ AX, R14\n\tCMPQ R13, AX\n\tJG   copy_all_from_history\n\tMOVQ R13, AX\n\tSUBQ $0x10, AX\n\tJB   copy_4_small\n\ncopy_4_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R10)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R10\n\tSUBQ   $0x10, AX\n\tJAE    copy_4_loop\n\tLEAQ   16(R14)(AX*1), R14\n\tLEAQ   16(R10)(AX*1), R10\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R10)\n\tJMP    copy_4_end\n\ncopy_4_small:\n\tCMPQ R13, $0x03\n\tJE   copy_4_move_3\n\tCMPQ R13, $0x08\n\tJB   copy_4_move_4through7\n\tJMP  copy_4_move_8through16\n\ncopy_4_move_3:\n\tMOVW (R14), AX\n\tMOVB 2(R14), CL\n\tMOVW AX, (R10)\n\tMOVB CL, 2(R10)\n\tADDQ R13, R14\n\tADDQ R13, R10\n\tJMP  copy_4_end\n\ncopy_4_move_4through7:\n\tMOVL (R14), AX\n\tMOVL -4(R14)(R13*1), CX\n\tMOVL AX, (R10)\n\tMOVL CX, -4(R10)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R10\n\tJMP  copy_4_end\n\ncopy_4_move_8through16:\n\tMOVQ (R14), AX\n\tMOVQ -8(R14)(R13*1), CX\n\tMOVQ AX, (R10)\n\tMOVQ CX, -8(R10)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R10\n\ncopy_4_end:\n\tADDQ R13, R12\n\tJMP  handle_loop\n\tJMP loop_finished\n\ncopy_all_from_history:\n\tMOVQ AX, R15\n\tSUBQ $0x10, R15\n\tJB   copy_5_small\n\ncopy_5_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R10)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R10\n\tSUBQ   $0x10, R15\n\tJAE    copy_5_loop\n\tLEAQ   16(R14)(R15*1), R14\n\tLEAQ   16(R10)(R15*1), R10\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R10)\n\tJMP    copy_5_end\n\ncopy_5_small:\n\tCMPQ AX, $0x03\n\tJE   copy_5_move_3\n\tJB   copy_5_move_1or2\n\tCMPQ AX, $0x08\n\tJB   copy_5_move_4through7\n\tJMP  copy_5_move_8through16\n\ncopy_5_move_1or2:\n\tMOVB (R14), R15\n\tMOVB -1(R14)(AX*1), BP\n\tMOVB R15, (R10)\n\tMOVB BP, -1(R10)(AX*1)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\tJMP  copy_5_end\n\ncopy_5_move_3:\n\tMOVW (R14), R15\n\tMOVB 2(R14), BP\n\tMOVW R15, (R10)\n\tMOVB BP, 2(R10)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\tJMP  copy_5_end\n\ncopy_5_move_4through7:\n\tMOVL (R14), R15\n\tMOVL -4(R14)(AX*1), BP\n\tMOVL R15, (R10)\n\tMOVL BP, -4(R10)(AX*1)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\tJMP  copy_5_end\n\ncopy_5_move_8through16:\n\tMOVQ (R14), R15\n\tMOVQ -8(R14)(AX*1), BP\n\tMOVQ R15, (R10)\n\tMOVQ BP, -8(R10)(AX*1)\n\tADDQ AX, R14\n\tADDQ AX, R10\n\ncopy_5_end:\n\tADDQ AX, R12\n\tSUBQ AX, R13\n\n\t// Copy match from the current buffer\ncopy_match:\n\tMOVQ R10, AX\n\tSUBQ CX, AX\n\n\t// ml <= mo\n\tCMPQ R13, CX\n\tJA   copy_overlapping_match\n\n\t// Copy non-overlapping match\n\tADDQ R13, R12\n\tMOVQ R13, CX\n\tSUBQ $0x10, CX\n\tJB   copy_2_small\n\ncopy_2_loop:\n\tMOVUPS (AX), X0\n\tMOVUPS X0, (R10)\n\tADDQ   $0x10, AX\n\tADDQ   $0x10, R10\n\tSUBQ   $0x10, CX\n\tJAE    copy_2_loop\n\tLEAQ   16(AX)(CX*1), AX\n\tLEAQ   16(R10)(CX*1), R10\n\tMOVUPS -16(AX), X0\n\tMOVUPS X0, -16(R10)\n\tJMP    copy_2_end\n\ncopy_2_small:\n\tCMPQ R13, $0x03\n\tJE   copy_2_move_3\n\tJB   copy_2_move_1or2\n\tCMPQ R13, $0x08\n\tJB   copy_2_move_4through7\n\tJMP  copy_2_move_8through16\n\ncopy_2_move_1or2:\n\tMOVB (AX), CL\n\tMOVB -1(AX)(R13*1), R14\n\tMOVB CL, (R10)\n\tMOVB R14, -1(R10)(R13*1)\n\tADDQ R13, AX\n\tADDQ R13, R10\n\tJMP  copy_2_end\n\ncopy_2_move_3:\n\tMOVW (AX), CX\n\tMOVB 2(AX), R14\n\tMOVW CX, (R10)\n\tMOVB R14, 2(R10)\n\tADDQ R13, AX\n\tADDQ R13, R10\n\tJMP  copy_2_end\n\ncopy_2_move_4through7:\n\tMOVL (AX), CX\n\tMOVL -4(AX)(R13*1), R14\n\tMOVL CX, (R10)\n\tMOVL R14, -4(R10)(R13*1)\n\tADDQ R13, AX\n\tADDQ R13, R10\n\tJMP  copy_2_end\n\ncopy_2_move_8through16:\n\tMOVQ (AX), CX\n\tMOVQ -8(AX)(R13*1), R14\n\tMOVQ CX, (R10)\n\tMOVQ R14, -8(R10)(R13*1)\n\tADDQ R13, AX\n\tADDQ R13, R10\n\ncopy_2_end:\n\tJMP handle_loop\n\n\t// Copy overlapping match\ncopy_overlapping_match:\n\tADDQ R13, R12\n\ncopy_slow_3:\n\tMOVB (AX), CL\n\tMOVB CL, (R10)\n\tINCQ AX\n\tINCQ R10\n\tDECQ R13\n\tJNZ  copy_slow_3\n\nhandle_loop:\n\tMOVQ ctx+16(FP), AX\n\tDECQ 96(AX)\n\tJNS  sequenceDecs_decodeSync_safe_amd64_main_loop\n\nloop_finished:\n\tMOVQ br+8(FP), AX\n\tMOVQ DX, 24(AX)\n\tMOVB BL, 32(AX)\n\tMOVQ SI, 8(AX)\n\n\t// Update the context\n\tMOVQ ctx+16(FP), AX\n\tMOVQ R12, 136(AX)\n\tMOVQ 144(AX), CX\n\tSUBQ CX, R11\n\tMOVQ R11, 168(AX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch:\n\tMOVQ 16(SP), AX\n\tMOVQ ctx+16(FP), CX\n\tMOVQ AX, 216(CX)\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decodeSync_safe_amd64_error_match_len_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\nerror_match_off_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 8(SP), CX\n\tMOVQ CX, 224(AX)\n\tMOVQ R12, 136(AX)\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n\t// Return with not enough output space error\nerror_not_enough_space:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ R12, 136(AX)\n\tMOVQ $0x00000005, ret+24(FP)\n\tRET\n\n// func sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int\n// Requires: BMI, BMI2, CMOV, SSE\nTEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $64-32\n\tMOVQ    br+8(FP), BX\n\tMOVQ    24(BX), AX\n\tMOVBQZX 32(BX), DX\n\tMOVQ    (BX), CX\n\tMOVQ    8(BX), BX\n\tADDQ    BX, CX\n\tMOVQ    CX, (SP)\n\tMOVQ    ctx+16(FP), CX\n\tMOVQ    72(CX), SI\n\tMOVQ    80(CX), DI\n\tMOVQ    88(CX), R8\n\tXORQ    R9, R9\n\tMOVQ    R9, 8(SP)\n\tMOVQ    R9, 16(SP)\n\tMOVQ    R9, 24(SP)\n\tMOVQ    112(CX), R9\n\tMOVQ    128(CX), R10\n\tMOVQ    R10, 32(SP)\n\tMOVQ    144(CX), R10\n\tMOVQ    136(CX), R11\n\tMOVQ    200(CX), R12\n\tMOVQ    R12, 56(SP)\n\tMOVQ    176(CX), R12\n\tMOVQ    R12, 48(SP)\n\tMOVQ    184(CX), CX\n\tMOVQ    CX, 40(SP)\n\tMOVQ    40(SP), CX\n\tADDQ    CX, 48(SP)\n\n\t// Calculate poiter to s.out[cap(s.out)] (a past-end pointer)\n\tADDQ R9, 32(SP)\n\n\t// outBase += outPosition\n\tADDQ R11, R9\n\nsequenceDecs_decodeSync_safe_bmi2_main_loop:\n\tMOVQ (SP), R12\n\n\t// Fill bitreader to have enough for the offset and match length.\n\tCMPQ BX, $0x08\n\tJL   sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte\n\tMOVQ DX, CX\n\tSHRQ $0x03, CX\n\tSUBQ CX, R12\n\tMOVQ (R12), AX\n\tSUBQ CX, BX\n\tANDQ $0x07, DX\n\tJMP  sequenceDecs_decodeSync_safe_bmi2_fill_end\n\nsequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte:\n\tCMPQ    BX, $0x00\n\tJLE     sequenceDecs_decodeSync_safe_bmi2_fill_check_overread\n\tCMPQ    DX, $0x07\n\tJLE     sequenceDecs_decodeSync_safe_bmi2_fill_end\n\tSHLQ    $0x08, AX\n\tSUBQ    $0x01, R12\n\tSUBQ    $0x01, BX\n\tSUBQ    $0x08, DX\n\tMOVBQZX (R12), CX\n\tORQ     CX, AX\n\tJMP     sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte\n\nsequenceDecs_decodeSync_safe_bmi2_fill_check_overread:\n\tCMPQ DX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_safe_bmi2_fill_end:\n\t// Update offset\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, R8, R13\n\tMOVQ   AX, R14\n\tLEAQ   (DX)(R13*1), CX\n\tROLQ   CL, R14\n\tBZHIQ  R13, R14, R14\n\tMOVQ   CX, DX\n\tMOVQ   R8, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R14, CX\n\tMOVQ   CX, 8(SP)\n\n\t// Update match length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, DI, R13\n\tMOVQ   AX, R14\n\tLEAQ   (DX)(R13*1), CX\n\tROLQ   CL, R14\n\tBZHIQ  R13, R14, R14\n\tMOVQ   CX, DX\n\tMOVQ   DI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R14, CX\n\tMOVQ   CX, 16(SP)\n\n\t// Fill bitreader to have enough for the remaining\n\tCMPQ BX, $0x08\n\tJL   sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte\n\tMOVQ DX, CX\n\tSHRQ $0x03, CX\n\tSUBQ CX, R12\n\tMOVQ (R12), AX\n\tSUBQ CX, BX\n\tANDQ $0x07, DX\n\tJMP  sequenceDecs_decodeSync_safe_bmi2_fill_2_end\n\nsequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte:\n\tCMPQ    BX, $0x00\n\tJLE     sequenceDecs_decodeSync_safe_bmi2_fill_2_check_overread\n\tCMPQ    DX, $0x07\n\tJLE     sequenceDecs_decodeSync_safe_bmi2_fill_2_end\n\tSHLQ    $0x08, AX\n\tSUBQ    $0x01, R12\n\tSUBQ    $0x01, BX\n\tSUBQ    $0x08, DX\n\tMOVBQZX (R12), CX\n\tORQ     CX, AX\n\tJMP     sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte\n\nsequenceDecs_decodeSync_safe_bmi2_fill_2_check_overread:\n\tCMPQ DX, $0x40\n\tJA   error_overread\n\nsequenceDecs_decodeSync_safe_bmi2_fill_2_end:\n\t// Update literal length\n\tMOVQ   $0x00000808, CX\n\tBEXTRQ CX, SI, R13\n\tMOVQ   AX, R14\n\tLEAQ   (DX)(R13*1), CX\n\tROLQ   CL, R14\n\tBZHIQ  R13, R14, R14\n\tMOVQ   CX, DX\n\tMOVQ   SI, CX\n\tSHRQ   $0x20, CX\n\tADDQ   R14, CX\n\tMOVQ   CX, 24(SP)\n\n\t// Fill bitreader for state updates\n\tMOVQ    R12, (SP)\n\tMOVQ    $0x00000808, CX\n\tBEXTRQ  CX, R8, R12\n\tMOVQ    ctx+16(FP), CX\n\tCMPQ    96(CX), $0x00\n\tJZ      sequenceDecs_decodeSync_safe_bmi2_skip_update\n\tLEAQ    (SI)(DI*1), R13\n\tADDQ    R8, R13\n\tMOVBQZX R13, R13\n\tLEAQ    (DX)(R13*1), CX\n\tMOVQ    AX, R14\n\tMOVQ    CX, DX\n\tROLQ    CL, R14\n\tBZHIQ   R13, R14, R14\n\n\t// Update Offset State\n\tBZHIQ R8, R14, CX\n\tSHRXQ R8, R14, R14\n\tSHRL  $0x10, R8\n\tADDQ  CX, R8\n\n\t// Load ctx.ofTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 48(CX), CX\n\tMOVQ (CX)(R8*8), R8\n\n\t// Update Match Length State\n\tBZHIQ DI, R14, CX\n\tSHRXQ DI, R14, R14\n\tSHRL  $0x10, DI\n\tADDQ  CX, DI\n\n\t// Load ctx.mlTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ 24(CX), CX\n\tMOVQ (CX)(DI*8), DI\n\n\t// Update Literal Length State\n\tBZHIQ SI, R14, CX\n\tSHRL  $0x10, SI\n\tADDQ  CX, SI\n\n\t// Load ctx.llTable\n\tMOVQ ctx+16(FP), CX\n\tMOVQ (CX), CX\n\tMOVQ (CX)(SI*8), SI\n\nsequenceDecs_decodeSync_safe_bmi2_skip_update:\n\t// Adjust offset\n\tMOVQ   s+0(FP), CX\n\tMOVQ   8(SP), R13\n\tCMPQ   R12, $0x01\n\tJBE    sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0\n\tMOVUPS 144(CX), X0\n\tMOVQ   R13, 144(CX)\n\tMOVUPS X0, 152(CX)\n\tJMP    sequenceDecs_decodeSync_safe_bmi2_after_adjust\n\nsequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0:\n\tCMPQ 24(SP), $0x00000000\n\tJNE  sequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero\n\tINCQ R13\n\tJMP  sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero\n\nsequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero:\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero\n\tMOVQ  144(CX), R13\n\tJMP   sequenceDecs_decodeSync_safe_bmi2_after_adjust\n\nsequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero:\n\tMOVQ    R13, R12\n\tXORQ    R14, R14\n\tMOVQ    $-1, R15\n\tCMPQ    R13, $0x03\n\tCMOVQEQ R14, R12\n\tCMOVQEQ R15, R14\n\tADDQ    144(CX)(R12*8), R14\n\tJNZ     sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid\n\tMOVQ    $0x00000001, R14\n\nsequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid:\n\tCMPQ R13, $0x01\n\tJZ   sequenceDecs_decodeSync_safe_bmi2_adjust_skip\n\tMOVQ 152(CX), R12\n\tMOVQ R12, 160(CX)\n\nsequenceDecs_decodeSync_safe_bmi2_adjust_skip:\n\tMOVQ 144(CX), R12\n\tMOVQ R12, 152(CX)\n\tMOVQ R14, 144(CX)\n\tMOVQ R14, R13\n\nsequenceDecs_decodeSync_safe_bmi2_after_adjust:\n\tMOVQ R13, 8(SP)\n\n\t// Check values\n\tMOVQ  16(SP), CX\n\tMOVQ  24(SP), R12\n\tLEAQ  (CX)(R12*1), R14\n\tMOVQ  s+0(FP), R15\n\tADDQ  R14, 256(R15)\n\tMOVQ  ctx+16(FP), R14\n\tSUBQ  R12, 104(R14)\n\tJS    error_not_enough_literals\n\tCMPQ  CX, $0x00020002\n\tJA    sequenceDecs_decodeSync_safe_bmi2_error_match_len_too_big\n\tTESTQ R13, R13\n\tJNZ   sequenceDecs_decodeSync_safe_bmi2_match_len_ofs_ok\n\tTESTQ CX, CX\n\tJNZ   sequenceDecs_decodeSync_safe_bmi2_error_match_len_ofs_mismatch\n\nsequenceDecs_decodeSync_safe_bmi2_match_len_ofs_ok:\n\tMOVQ 24(SP), CX\n\tMOVQ 8(SP), R12\n\tMOVQ 16(SP), R13\n\n\t// Check if we have enough space in s.out\n\tLEAQ (CX)(R13*1), R14\n\tADDQ R9, R14\n\tCMPQ R14, 32(SP)\n\tJA   error_not_enough_space\n\n\t// Copy literals\n\tTESTQ CX, CX\n\tJZ    check_offset\n\tMOVQ  CX, R14\n\tSUBQ  $0x10, R14\n\tJB    copy_1_small\n\ncopy_1_loop:\n\tMOVUPS (R10), X0\n\tMOVUPS X0, (R9)\n\tADDQ   $0x10, R10\n\tADDQ   $0x10, R9\n\tSUBQ   $0x10, R14\n\tJAE    copy_1_loop\n\tLEAQ   16(R10)(R14*1), R10\n\tLEAQ   16(R9)(R14*1), R9\n\tMOVUPS -16(R10), X0\n\tMOVUPS X0, -16(R9)\n\tJMP    copy_1_end\n\ncopy_1_small:\n\tCMPQ CX, $0x03\n\tJE   copy_1_move_3\n\tJB   copy_1_move_1or2\n\tCMPQ CX, $0x08\n\tJB   copy_1_move_4through7\n\tJMP  copy_1_move_8through16\n\ncopy_1_move_1or2:\n\tMOVB (R10), R14\n\tMOVB -1(R10)(CX*1), R15\n\tMOVB R14, (R9)\n\tMOVB R15, -1(R9)(CX*1)\n\tADDQ CX, R10\n\tADDQ CX, R9\n\tJMP  copy_1_end\n\ncopy_1_move_3:\n\tMOVW (R10), R14\n\tMOVB 2(R10), R15\n\tMOVW R14, (R9)\n\tMOVB R15, 2(R9)\n\tADDQ CX, R10\n\tADDQ CX, R9\n\tJMP  copy_1_end\n\ncopy_1_move_4through7:\n\tMOVL (R10), R14\n\tMOVL -4(R10)(CX*1), R15\n\tMOVL R14, (R9)\n\tMOVL R15, -4(R9)(CX*1)\n\tADDQ CX, R10\n\tADDQ CX, R9\n\tJMP  copy_1_end\n\ncopy_1_move_8through16:\n\tMOVQ (R10), R14\n\tMOVQ -8(R10)(CX*1), R15\n\tMOVQ R14, (R9)\n\tMOVQ R15, -8(R9)(CX*1)\n\tADDQ CX, R10\n\tADDQ CX, R9\n\ncopy_1_end:\n\tADDQ CX, R11\n\n\t// Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize)\ncheck_offset:\n\tMOVQ R11, CX\n\tADDQ 40(SP), CX\n\tCMPQ R12, CX\n\tJG   error_match_off_too_big\n\tCMPQ R12, 56(SP)\n\tJG   error_match_off_too_big\n\n\t// Copy match from history\n\tMOVQ R12, CX\n\tSUBQ R11, CX\n\tJLS  copy_match\n\tMOVQ 48(SP), R14\n\tSUBQ CX, R14\n\tCMPQ R13, CX\n\tJG   copy_all_from_history\n\tMOVQ R13, CX\n\tSUBQ $0x10, CX\n\tJB   copy_4_small\n\ncopy_4_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R9)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R9\n\tSUBQ   $0x10, CX\n\tJAE    copy_4_loop\n\tLEAQ   16(R14)(CX*1), R14\n\tLEAQ   16(R9)(CX*1), R9\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R9)\n\tJMP    copy_4_end\n\ncopy_4_small:\n\tCMPQ R13, $0x03\n\tJE   copy_4_move_3\n\tCMPQ R13, $0x08\n\tJB   copy_4_move_4through7\n\tJMP  copy_4_move_8through16\n\ncopy_4_move_3:\n\tMOVW (R14), CX\n\tMOVB 2(R14), R12\n\tMOVW CX, (R9)\n\tMOVB R12, 2(R9)\n\tADDQ R13, R14\n\tADDQ R13, R9\n\tJMP  copy_4_end\n\ncopy_4_move_4through7:\n\tMOVL (R14), CX\n\tMOVL -4(R14)(R13*1), R12\n\tMOVL CX, (R9)\n\tMOVL R12, -4(R9)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R9\n\tJMP  copy_4_end\n\ncopy_4_move_8through16:\n\tMOVQ (R14), CX\n\tMOVQ -8(R14)(R13*1), R12\n\tMOVQ CX, (R9)\n\tMOVQ R12, -8(R9)(R13*1)\n\tADDQ R13, R14\n\tADDQ R13, R9\n\ncopy_4_end:\n\tADDQ R13, R11\n\tJMP  handle_loop\n\tJMP loop_finished\n\ncopy_all_from_history:\n\tMOVQ CX, R15\n\tSUBQ $0x10, R15\n\tJB   copy_5_small\n\ncopy_5_loop:\n\tMOVUPS (R14), X0\n\tMOVUPS X0, (R9)\n\tADDQ   $0x10, R14\n\tADDQ   $0x10, R9\n\tSUBQ   $0x10, R15\n\tJAE    copy_5_loop\n\tLEAQ   16(R14)(R15*1), R14\n\tLEAQ   16(R9)(R15*1), R9\n\tMOVUPS -16(R14), X0\n\tMOVUPS X0, -16(R9)\n\tJMP    copy_5_end\n\ncopy_5_small:\n\tCMPQ CX, $0x03\n\tJE   copy_5_move_3\n\tJB   copy_5_move_1or2\n\tCMPQ CX, $0x08\n\tJB   copy_5_move_4through7\n\tJMP  copy_5_move_8through16\n\ncopy_5_move_1or2:\n\tMOVB (R14), R15\n\tMOVB -1(R14)(CX*1), BP\n\tMOVB R15, (R9)\n\tMOVB BP, -1(R9)(CX*1)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\tJMP  copy_5_end\n\ncopy_5_move_3:\n\tMOVW (R14), R15\n\tMOVB 2(R14), BP\n\tMOVW R15, (R9)\n\tMOVB BP, 2(R9)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\tJMP  copy_5_end\n\ncopy_5_move_4through7:\n\tMOVL (R14), R15\n\tMOVL -4(R14)(CX*1), BP\n\tMOVL R15, (R9)\n\tMOVL BP, -4(R9)(CX*1)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\tJMP  copy_5_end\n\ncopy_5_move_8through16:\n\tMOVQ (R14), R15\n\tMOVQ -8(R14)(CX*1), BP\n\tMOVQ R15, (R9)\n\tMOVQ BP, -8(R9)(CX*1)\n\tADDQ CX, R14\n\tADDQ CX, R9\n\ncopy_5_end:\n\tADDQ CX, R11\n\tSUBQ CX, R13\n\n\t// Copy match from the current buffer\ncopy_match:\n\tMOVQ R9, CX\n\tSUBQ R12, CX\n\n\t// ml <= mo\n\tCMPQ R13, R12\n\tJA   copy_overlapping_match\n\n\t// Copy non-overlapping match\n\tADDQ R13, R11\n\tMOVQ R13, R12\n\tSUBQ $0x10, R12\n\tJB   copy_2_small\n\ncopy_2_loop:\n\tMOVUPS (CX), X0\n\tMOVUPS X0, (R9)\n\tADDQ   $0x10, CX\n\tADDQ   $0x10, R9\n\tSUBQ   $0x10, R12\n\tJAE    copy_2_loop\n\tLEAQ   16(CX)(R12*1), CX\n\tLEAQ   16(R9)(R12*1), R9\n\tMOVUPS -16(CX), X0\n\tMOVUPS X0, -16(R9)\n\tJMP    copy_2_end\n\ncopy_2_small:\n\tCMPQ R13, $0x03\n\tJE   copy_2_move_3\n\tJB   copy_2_move_1or2\n\tCMPQ R13, $0x08\n\tJB   copy_2_move_4through7\n\tJMP  copy_2_move_8through16\n\ncopy_2_move_1or2:\n\tMOVB (CX), R12\n\tMOVB -1(CX)(R13*1), R14\n\tMOVB R12, (R9)\n\tMOVB R14, -1(R9)(R13*1)\n\tADDQ R13, CX\n\tADDQ R13, R9\n\tJMP  copy_2_end\n\ncopy_2_move_3:\n\tMOVW (CX), R12\n\tMOVB 2(CX), R14\n\tMOVW R12, (R9)\n\tMOVB R14, 2(R9)\n\tADDQ R13, CX\n\tADDQ R13, R9\n\tJMP  copy_2_end\n\ncopy_2_move_4through7:\n\tMOVL (CX), R12\n\tMOVL -4(CX)(R13*1), R14\n\tMOVL R12, (R9)\n\tMOVL R14, -4(R9)(R13*1)\n\tADDQ R13, CX\n\tADDQ R13, R9\n\tJMP  copy_2_end\n\ncopy_2_move_8through16:\n\tMOVQ (CX), R12\n\tMOVQ -8(CX)(R13*1), R14\n\tMOVQ R12, (R9)\n\tMOVQ R14, -8(R9)(R13*1)\n\tADDQ R13, CX\n\tADDQ R13, R9\n\ncopy_2_end:\n\tJMP handle_loop\n\n\t// Copy overlapping match\ncopy_overlapping_match:\n\tADDQ R13, R11\n\ncopy_slow_3:\n\tMOVB (CX), R12\n\tMOVB R12, (R9)\n\tINCQ CX\n\tINCQ R9\n\tDECQ R13\n\tJNZ  copy_slow_3\n\nhandle_loop:\n\tMOVQ ctx+16(FP), CX\n\tDECQ 96(CX)\n\tJNS  sequenceDecs_decodeSync_safe_bmi2_main_loop\n\nloop_finished:\n\tMOVQ br+8(FP), CX\n\tMOVQ AX, 24(CX)\n\tMOVB DL, 32(CX)\n\tMOVQ BX, 8(CX)\n\n\t// Update the context\n\tMOVQ ctx+16(FP), AX\n\tMOVQ R11, 136(AX)\n\tMOVQ 144(AX), CX\n\tSUBQ CX, R10\n\tMOVQ R10, 168(AX)\n\n\t// Return success\n\tMOVQ $0x00000000, ret+24(FP)\n\tRET\n\n\t// Return with match length error\nsequenceDecs_decodeSync_safe_bmi2_error_match_len_ofs_mismatch:\n\tMOVQ 16(SP), AX\n\tMOVQ ctx+16(FP), CX\n\tMOVQ AX, 216(CX)\n\tMOVQ $0x00000001, ret+24(FP)\n\tRET\n\n\t// Return with match too long error\nsequenceDecs_decodeSync_safe_bmi2_error_match_len_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ $0x00000002, ret+24(FP)\n\tRET\n\n\t// Return with match offset too long error\nerror_match_off_too_big:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 8(SP), CX\n\tMOVQ CX, 224(AX)\n\tMOVQ R11, 136(AX)\n\tMOVQ $0x00000003, ret+24(FP)\n\tRET\n\n\t// Return with not enough literals error\nerror_not_enough_literals:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ $0x00000004, ret+24(FP)\n\tRET\n\n\t// Return with overread error\nerror_overread:\n\tMOVQ $0x00000006, ret+24(FP)\n\tRET\n\n\t// Return with not enough output space error\nerror_not_enough_space:\n\tMOVQ ctx+16(FP), AX\n\tMOVQ 24(SP), CX\n\tMOVQ CX, 208(AX)\n\tMOVQ 16(SP), CX\n\tMOVQ CX, 216(AX)\n\tMOVQ R11, 136(AX)\n\tMOVQ $0x00000005, ret+24(FP)\n\tRET\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/seqdec_generic.go",
    "content": "//go:build !amd64 || appengine || !gc || noasm\n// +build !amd64 appengine !gc noasm\n\npackage zstd\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// decode sequences from the stream with the provided history but without dictionary.\nfunc (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) {\n\treturn false, nil\n}\n\n// decode sequences from the stream without the provided history.\nfunc (s *sequenceDecs) decode(seqs []seqVals) error {\n\tbr := s.br\n\n\t// Grab full sizes tables, to avoid bounds checks.\n\tllTable, mlTable, ofTable := s.litLengths.fse.dt[:maxTablesize], s.matchLengths.fse.dt[:maxTablesize], s.offsets.fse.dt[:maxTablesize]\n\tllState, mlState, ofState := s.litLengths.state.state, s.matchLengths.state.state, s.offsets.state.state\n\ts.seqSize = 0\n\tlitRemain := len(s.literals)\n\n\tmaxBlockSize := maxCompressedBlockSize\n\tif s.windowSize < maxBlockSize {\n\t\tmaxBlockSize = s.windowSize\n\t}\n\tfor i := range seqs {\n\t\tvar ll, mo, ml int\n\t\tif len(br.in) > 4+((maxOffsetBits+16+16)>>3) {\n\t\t\t// inlined function:\n\t\t\t// ll, mo, ml = s.nextFast(br, llState, mlState, ofState)\n\n\t\t\t// Final will not read from stream.\n\t\t\tvar llB, mlB, moB uint8\n\t\t\tll, llB = llState.final()\n\t\t\tml, mlB = mlState.final()\n\t\t\tmo, moB = ofState.final()\n\n\t\t\t// extra bits are stored in reverse order.\n\t\t\tbr.fillFast()\n\t\t\tmo += br.getBits(moB)\n\t\t\tif s.maxBits > 32 {\n\t\t\t\tbr.fillFast()\n\t\t\t}\n\t\t\tml += br.getBits(mlB)\n\t\t\tll += br.getBits(llB)\n\n\t\t\tif moB > 1 {\n\t\t\t\ts.prevOffset[2] = s.prevOffset[1]\n\t\t\t\ts.prevOffset[1] = s.prevOffset[0]\n\t\t\t\ts.prevOffset[0] = mo\n\t\t\t} else {\n\t\t\t\t// mo = s.adjustOffset(mo, ll, moB)\n\t\t\t\t// Inlined for rather big speedup\n\t\t\t\tif ll == 0 {\n\t\t\t\t\t// There is an exception though, when current sequence's literals_length = 0.\n\t\t\t\t\t// In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2,\n\t\t\t\t\t// an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte.\n\t\t\t\t\tmo++\n\t\t\t\t}\n\n\t\t\t\tif mo == 0 {\n\t\t\t\t\tmo = s.prevOffset[0]\n\t\t\t\t} else {\n\t\t\t\t\tvar temp int\n\t\t\t\t\tif mo == 3 {\n\t\t\t\t\t\ttemp = s.prevOffset[0] - 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttemp = s.prevOffset[mo]\n\t\t\t\t\t}\n\n\t\t\t\t\tif temp == 0 {\n\t\t\t\t\t\t// 0 is not valid; input is corrupted; force offset to 1\n\t\t\t\t\t\tprintln(\"WARNING: temp was 0\")\n\t\t\t\t\t\ttemp = 1\n\t\t\t\t\t}\n\n\t\t\t\t\tif mo != 1 {\n\t\t\t\t\t\ts.prevOffset[2] = s.prevOffset[1]\n\t\t\t\t\t}\n\t\t\t\t\ts.prevOffset[1] = s.prevOffset[0]\n\t\t\t\t\ts.prevOffset[0] = temp\n\t\t\t\t\tmo = temp\n\t\t\t\t}\n\t\t\t}\n\t\t\tbr.fillFast()\n\t\t} else {\n\t\t\tif br.overread() {\n\t\t\t\tif debugDecoder {\n\t\t\t\t\tprintf(\"reading sequence %d, exceeded available data\\n\", i)\n\t\t\t\t}\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tll, mo, ml = s.next(br, llState, mlState, ofState)\n\t\t\tbr.fill()\n\t\t}\n\n\t\tif debugSequences {\n\t\t\tprintln(\"Seq\", i, \"Litlen:\", ll, \"mo:\", mo, \"(abs) ml:\", ml)\n\t\t}\n\t\t// Evaluate.\n\t\t// We might be doing this async, so do it early.\n\t\tif mo == 0 && ml > 0 {\n\t\t\treturn fmt.Errorf(\"zero matchoff and matchlen (%d) > 0\", ml)\n\t\t}\n\t\tif ml > maxMatchLen {\n\t\t\treturn fmt.Errorf(\"match len (%d) bigger than max allowed length\", ml)\n\t\t}\n\t\ts.seqSize += ll + ml\n\t\tif s.seqSize > maxBlockSize {\n\t\t\treturn fmt.Errorf(\"output bigger than max block size (%d)\", maxBlockSize)\n\t\t}\n\t\tlitRemain -= ll\n\t\tif litRemain < 0 {\n\t\t\treturn fmt.Errorf(\"unexpected literal count, want %d bytes, but only %d is available\", ll, litRemain+ll)\n\t\t}\n\t\tseqs[i] = seqVals{\n\t\t\tll: ll,\n\t\t\tml: ml,\n\t\t\tmo: mo,\n\t\t}\n\t\tif i == len(seqs)-1 {\n\t\t\t// This is the last sequence, so we shouldn't update state.\n\t\t\tbreak\n\t\t}\n\n\t\t// Manually inlined, ~ 5-20% faster\n\t\t// Update all 3 states at once. Approx 20% faster.\n\t\tnBits := llState.nbBits() + mlState.nbBits() + ofState.nbBits()\n\t\tif nBits == 0 {\n\t\t\tllState = llTable[llState.newState()&maxTableMask]\n\t\t\tmlState = mlTable[mlState.newState()&maxTableMask]\n\t\t\tofState = ofTable[ofState.newState()&maxTableMask]\n\t\t} else {\n\t\t\tbits := br.get32BitsFast(nBits)\n\t\t\tlowBits := uint16(bits >> ((ofState.nbBits() + mlState.nbBits()) & 31))\n\t\t\tllState = llTable[(llState.newState()+lowBits)&maxTableMask]\n\n\t\t\tlowBits = uint16(bits >> (ofState.nbBits() & 31))\n\t\t\tlowBits &= bitMask[mlState.nbBits()&15]\n\t\t\tmlState = mlTable[(mlState.newState()+lowBits)&maxTableMask]\n\n\t\t\tlowBits = uint16(bits) & bitMask[ofState.nbBits()&15]\n\t\t\tofState = ofTable[(ofState.newState()+lowBits)&maxTableMask]\n\t\t}\n\t}\n\ts.seqSize += litRemain\n\tif s.seqSize > maxBlockSize {\n\t\treturn fmt.Errorf(\"output bigger than max block size (%d)\", maxBlockSize)\n\t}\n\terr := br.close()\n\tif err != nil {\n\t\tprintf(\"Closing sequences: %v, %+v\\n\", err, *br)\n\t}\n\treturn err\n}\n\n// executeSimple handles cases when a dictionary is not used.\nfunc (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error {\n\t// Ensure we have enough output size...\n\tif len(s.out)+s.seqSize > cap(s.out) {\n\t\taddBytes := s.seqSize + len(s.out)\n\t\ts.out = append(s.out, make([]byte, addBytes)...)\n\t\ts.out = s.out[:len(s.out)-addBytes]\n\t}\n\n\tif debugDecoder {\n\t\tprintf(\"Execute %d seqs with literals: %d into %d bytes\\n\", len(seqs), len(s.literals), s.seqSize)\n\t}\n\n\tvar t = len(s.out)\n\tout := s.out[:t+s.seqSize]\n\n\tfor _, seq := range seqs {\n\t\t// Add literals\n\t\tcopy(out[t:], s.literals[:seq.ll])\n\t\tt += seq.ll\n\t\ts.literals = s.literals[seq.ll:]\n\n\t\t// Malformed input\n\t\tif seq.mo > t+len(hist) || seq.mo > s.windowSize {\n\t\t\treturn fmt.Errorf(\"match offset (%d) bigger than current history (%d)\", seq.mo, t+len(hist))\n\t\t}\n\n\t\t// Copy from history.\n\t\tif v := seq.mo - t; v > 0 {\n\t\t\t// v is the start position in history from end.\n\t\t\tstart := len(hist) - v\n\t\t\tif seq.ml > v {\n\t\t\t\t// Some goes into the current block.\n\t\t\t\t// Copy remainder of history\n\t\t\t\tcopy(out[t:], hist[start:])\n\t\t\t\tt += v\n\t\t\t\tseq.ml -= v\n\t\t\t} else {\n\t\t\t\tcopy(out[t:], hist[start:start+seq.ml])\n\t\t\t\tt += seq.ml\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// We must be in the current buffer now\n\t\tif seq.ml > 0 {\n\t\t\tstart := t - seq.mo\n\t\t\tif seq.ml <= t-start {\n\t\t\t\t// No overlap\n\t\t\t\tcopy(out[t:], out[start:start+seq.ml])\n\t\t\t\tt += seq.ml\n\t\t\t} else {\n\t\t\t\t// Overlapping copy\n\t\t\t\t// Extend destination slice and copy one byte at the time.\n\t\t\t\tsrc := out[start : start+seq.ml]\n\t\t\t\tdst := out[t:]\n\t\t\t\tdst = dst[:len(src)]\n\t\t\t\tt += len(src)\n\t\t\t\t// Destination is the space we just added.\n\t\t\t\tfor i := range src {\n\t\t\t\t\tdst[i] = src[i]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Add final literals\n\tcopy(out[t:], s.literals)\n\tif debugDecoder {\n\t\tt += len(s.literals)\n\t\tif t != len(out) {\n\t\t\tpanic(fmt.Errorf(\"length mismatch, want %d, got %d, ss: %d\", len(out), t, s.seqSize))\n\t\t}\n\t}\n\ts.out = out\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/seqenc.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport \"math/bits\"\n\ntype seqCoders struct {\n\tllEnc, ofEnc, mlEnc    *fseEncoder\n\tllPrev, ofPrev, mlPrev *fseEncoder\n}\n\n// swap coders with another (block).\nfunc (s *seqCoders) swap(other *seqCoders) {\n\t*s, *other = *other, *s\n}\n\n// setPrev will update the previous encoders to the actually used ones\n// and make sure a fresh one is in the main slot.\nfunc (s *seqCoders) setPrev(ll, ml, of *fseEncoder) {\n\tcompareSwap := func(used *fseEncoder, current, prev **fseEncoder) {\n\t\t// We used the new one, more current to history and reuse the previous history\n\t\tif *current == used {\n\t\t\t*prev, *current = *current, *prev\n\t\t\tc := *current\n\t\t\tp := *prev\n\t\t\tc.reUsed = false\n\t\t\tp.reUsed = true\n\t\t\treturn\n\t\t}\n\t\tif used == *prev {\n\t\t\treturn\n\t\t}\n\t\t// Ensure we cannot reuse by accident\n\t\tprevEnc := *prev\n\t\tprevEnc.symbolLen = 0\n\t}\n\tcompareSwap(ll, &s.llEnc, &s.llPrev)\n\tcompareSwap(ml, &s.mlEnc, &s.mlPrev)\n\tcompareSwap(of, &s.ofEnc, &s.ofPrev)\n}\n\nfunc highBit(val uint32) (n uint32) {\n\treturn uint32(bits.Len32(val) - 1)\n}\n\nvar llCodeTable = [64]byte{0, 1, 2, 3, 4, 5, 6, 7,\n\t8, 9, 10, 11, 12, 13, 14, 15,\n\t16, 16, 17, 17, 18, 18, 19, 19,\n\t20, 20, 20, 20, 21, 21, 21, 21,\n\t22, 22, 22, 22, 22, 22, 22, 22,\n\t23, 23, 23, 23, 23, 23, 23, 23,\n\t24, 24, 24, 24, 24, 24, 24, 24,\n\t24, 24, 24, 24, 24, 24, 24, 24}\n\n// Up to 6 bits\nconst maxLLCode = 35\n\n// llBitsTable translates from ll code to number of bits.\nvar llBitsTable = [maxLLCode + 1]byte{\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t1, 1, 1, 1, 2, 2, 3, 3,\n\t4, 6, 7, 8, 9, 10, 11, 12,\n\t13, 14, 15, 16}\n\n// llCode returns the code that represents the literal length requested.\nfunc llCode(litLength uint32) uint8 {\n\tconst llDeltaCode = 19\n\tif litLength <= 63 {\n\t\t// Compiler insists on bounds check (Go 1.12)\n\t\treturn llCodeTable[litLength&63]\n\t}\n\treturn uint8(highBit(litLength)) + llDeltaCode\n}\n\nvar mlCodeTable = [128]byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n\t32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37,\n\t38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,\n\t40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n\t41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,\n\t42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,\n\t42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42}\n\n// Up to 6 bits\nconst maxMLCode = 52\n\n// mlBitsTable translates from ml code to number of bits.\nvar mlBitsTable = [maxMLCode + 1]byte{\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t1, 1, 1, 1, 2, 2, 3, 3,\n\t4, 4, 5, 7, 8, 9, 10, 11,\n\t12, 13, 14, 15, 16}\n\n// note : mlBase = matchLength - MINMATCH;\n// because it's the format it's stored in seqStore->sequences\nfunc mlCode(mlBase uint32) uint8 {\n\tconst mlDeltaCode = 36\n\tif mlBase <= 127 {\n\t\t// Compiler insists on bounds check (Go 1.12)\n\t\treturn mlCodeTable[mlBase&127]\n\t}\n\treturn uint8(highBit(mlBase)) + mlDeltaCode\n}\n\nfunc ofCode(offset uint32) uint8 {\n\t// A valid offset will always be > 0.\n\treturn uint8(bits.Len32(offset) - 1)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/snappy.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n// Based on work by Yann Collet, released under BSD License.\n\npackage zstd\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"hash/crc32\"\n\t\"io\"\n\n\t\"github.com/klauspost/compress/huff0\"\n\tsnappy \"github.com/klauspost/compress/internal/snapref\"\n)\n\nconst (\n\tsnappyTagLiteral = 0x00\n\tsnappyTagCopy1   = 0x01\n\tsnappyTagCopy2   = 0x02\n\tsnappyTagCopy4   = 0x03\n)\n\nconst (\n\tsnappyChecksumSize = 4\n\tsnappyMagicBody    = \"sNaPpY\"\n\n\t// snappyMaxBlockSize is the maximum size of the input to encodeBlock. It is not\n\t// part of the wire format per se, but some parts of the encoder assume\n\t// that an offset fits into a uint16.\n\t//\n\t// Also, for the framing format (Writer type instead of Encode function),\n\t// https://github.com/google/snappy/blob/master/framing_format.txt says\n\t// that \"the uncompressed data in a chunk must be no longer than 65536\n\t// bytes\".\n\tsnappyMaxBlockSize = 65536\n\n\t// snappyMaxEncodedLenOfMaxBlockSize equals MaxEncodedLen(snappyMaxBlockSize), but is\n\t// hard coded to be a const instead of a variable, so that obufLen can also\n\t// be a const. Their equivalence is confirmed by\n\t// TestMaxEncodedLenOfMaxBlockSize.\n\tsnappyMaxEncodedLenOfMaxBlockSize = 76490\n)\n\nconst (\n\tchunkTypeCompressedData   = 0x00\n\tchunkTypeUncompressedData = 0x01\n\tchunkTypePadding          = 0xfe\n\tchunkTypeStreamIdentifier = 0xff\n)\n\nvar (\n\t// ErrSnappyCorrupt reports that the input is invalid.\n\tErrSnappyCorrupt = errors.New(\"snappy: corrupt input\")\n\t// ErrSnappyTooLarge reports that the uncompressed length is too large.\n\tErrSnappyTooLarge = errors.New(\"snappy: decoded block is too large\")\n\t// ErrSnappyUnsupported reports that the input isn't supported.\n\tErrSnappyUnsupported = errors.New(\"snappy: unsupported input\")\n\n\terrUnsupportedLiteralLength = errors.New(\"snappy: unsupported literal length\")\n)\n\n// SnappyConverter can read SnappyConverter-compressed streams and convert them to zstd.\n// Conversion is done by converting the stream directly from Snappy without intermediate\n// full decoding.\n// Therefore the compression ratio is much less than what can be done by a full decompression\n// and compression, and a faulty Snappy stream may lead to a faulty Zstandard stream without\n// any errors being generated.\n// No CRC value is being generated and not all CRC values of the Snappy stream are checked.\n// However, it provides really fast recompression of Snappy streams.\n// The converter can be reused to avoid allocations, even after errors.\ntype SnappyConverter struct {\n\tr     io.Reader\n\terr   error\n\tbuf   []byte\n\tblock *blockEnc\n}\n\n// Convert the Snappy stream supplied in 'in' and write the zStandard stream to 'w'.\n// If any error is detected on the Snappy stream it is returned.\n// The number of bytes written is returned.\nfunc (r *SnappyConverter) Convert(in io.Reader, w io.Writer) (int64, error) {\n\tinitPredefined()\n\tr.err = nil\n\tr.r = in\n\tif r.block == nil {\n\t\tr.block = &blockEnc{}\n\t\tr.block.init()\n\t}\n\tr.block.initNewEncode()\n\tif len(r.buf) != snappyMaxEncodedLenOfMaxBlockSize+snappyChecksumSize {\n\t\tr.buf = make([]byte, snappyMaxEncodedLenOfMaxBlockSize+snappyChecksumSize)\n\t}\n\tr.block.litEnc.Reuse = huff0.ReusePolicyNone\n\tvar written int64\n\tvar readHeader bool\n\t{\n\t\theader := frameHeader{WindowSize: snappyMaxBlockSize}.appendTo(r.buf[:0])\n\n\t\tvar n int\n\t\tn, r.err = w.Write(header)\n\t\tif r.err != nil {\n\t\t\treturn written, r.err\n\t\t}\n\t\twritten += int64(n)\n\t}\n\n\tfor {\n\t\tif !r.readFull(r.buf[:4], true) {\n\t\t\t// Add empty last block\n\t\t\tr.block.reset(nil)\n\t\t\tr.block.last = true\n\t\t\terr := r.block.encodeLits(r.block.literals, false)\n\t\t\tif err != nil {\n\t\t\t\treturn written, err\n\t\t\t}\n\t\t\tn, err := w.Write(r.block.output)\n\t\t\tif err != nil {\n\t\t\t\treturn written, err\n\t\t\t}\n\t\t\twritten += int64(n)\n\n\t\t\treturn written, r.err\n\t\t}\n\t\tchunkType := r.buf[0]\n\t\tif !readHeader {\n\t\t\tif chunkType != chunkTypeStreamIdentifier {\n\t\t\t\tprintln(\"chunkType != chunkTypeStreamIdentifier\", chunkType)\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\treadHeader = true\n\t\t}\n\t\tchunkLen := int(r.buf[1]) | int(r.buf[2])<<8 | int(r.buf[3])<<16\n\t\tif chunkLen > len(r.buf) {\n\t\t\tprintln(\"chunkLen > len(r.buf)\", chunkType)\n\t\t\tr.err = ErrSnappyUnsupported\n\t\t\treturn written, r.err\n\t\t}\n\n\t\t// The chunk types are specified at\n\t\t// https://github.com/google/snappy/blob/master/framing_format.txt\n\t\tswitch chunkType {\n\t\tcase chunkTypeCompressedData:\n\t\t\t// Section 4.2. Compressed data (chunk type 0x00).\n\t\t\tif chunkLen < snappyChecksumSize {\n\t\t\t\tprintln(\"chunkLen < snappyChecksumSize\", chunkLen, snappyChecksumSize)\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tbuf := r.buf[:chunkLen]\n\t\t\tif !r.readFull(buf, false) {\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\t//checksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24\n\t\t\tbuf = buf[snappyChecksumSize:]\n\n\t\t\tn, hdr, err := snappyDecodedLen(buf)\n\t\t\tif err != nil {\n\t\t\t\tr.err = err\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tbuf = buf[hdr:]\n\t\t\tif n > snappyMaxBlockSize {\n\t\t\t\tprintln(\"n > snappyMaxBlockSize\", n, snappyMaxBlockSize)\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tr.block.reset(nil)\n\t\t\tr.block.pushOffsets()\n\t\t\tif err := decodeSnappy(r.block, buf); err != nil {\n\t\t\t\tr.err = err\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tif r.block.size+r.block.extraLits != n {\n\t\t\t\tprintf(\"invalid size, want %d, got %d\\n\", n, r.block.size+r.block.extraLits)\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\terr = r.block.encode(nil, false, false)\n\t\t\tswitch err {\n\t\t\tcase errIncompressible:\n\t\t\t\tr.block.popOffsets()\n\t\t\t\tr.block.reset(nil)\n\t\t\t\tr.block.literals, err = snappy.Decode(r.block.literals[:n], r.buf[snappyChecksumSize:chunkLen])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn written, err\n\t\t\t\t}\n\t\t\t\terr = r.block.encodeLits(r.block.literals, false)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn written, err\n\t\t\t\t}\n\t\t\tcase nil:\n\t\t\tdefault:\n\t\t\t\treturn written, err\n\t\t\t}\n\n\t\t\tn, r.err = w.Write(r.block.output)\n\t\t\tif r.err != nil {\n\t\t\t\treturn written, err\n\t\t\t}\n\t\t\twritten += int64(n)\n\t\t\tcontinue\n\t\tcase chunkTypeUncompressedData:\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"Uncompressed, chunklen\", chunkLen)\n\t\t\t}\n\t\t\t// Section 4.3. Uncompressed data (chunk type 0x01).\n\t\t\tif chunkLen < snappyChecksumSize {\n\t\t\t\tprintln(\"chunkLen < snappyChecksumSize\", chunkLen, snappyChecksumSize)\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tr.block.reset(nil)\n\t\t\tbuf := r.buf[:snappyChecksumSize]\n\t\t\tif !r.readFull(buf, false) {\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tchecksum := uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24\n\t\t\t// Read directly into r.decoded instead of via r.buf.\n\t\t\tn := chunkLen - snappyChecksumSize\n\t\t\tif n > snappyMaxBlockSize {\n\t\t\t\tprintln(\"n > snappyMaxBlockSize\", n, snappyMaxBlockSize)\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tr.block.literals = r.block.literals[:n]\n\t\t\tif !r.readFull(r.block.literals, false) {\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tif snappyCRC(r.block.literals) != checksum {\n\t\t\t\tprintln(\"literals crc mismatch\")\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\terr := r.block.encodeLits(r.block.literals, false)\n\t\t\tif err != nil {\n\t\t\t\treturn written, err\n\t\t\t}\n\t\t\tn, r.err = w.Write(r.block.output)\n\t\t\tif r.err != nil {\n\t\t\t\treturn written, err\n\t\t\t}\n\t\t\twritten += int64(n)\n\t\t\tcontinue\n\n\t\tcase chunkTypeStreamIdentifier:\n\t\t\tif debugEncoder {\n\t\t\t\tprintln(\"stream id\", chunkLen, len(snappyMagicBody))\n\t\t\t}\n\t\t\t// Section 4.1. Stream identifier (chunk type 0xff).\n\t\t\tif chunkLen != len(snappyMagicBody) {\n\t\t\t\tprintln(\"chunkLen != len(snappyMagicBody)\", chunkLen, len(snappyMagicBody))\n\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tif !r.readFull(r.buf[:len(snappyMagicBody)], false) {\n\t\t\t\treturn written, r.err\n\t\t\t}\n\t\t\tfor i := 0; i < len(snappyMagicBody); i++ {\n\t\t\t\tif r.buf[i] != snappyMagicBody[i] {\n\t\t\t\t\tprintln(\"r.buf[i] != snappyMagicBody[i]\", r.buf[i], snappyMagicBody[i], i)\n\t\t\t\t\tr.err = ErrSnappyCorrupt\n\t\t\t\t\treturn written, r.err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif chunkType <= 0x7f {\n\t\t\t// Section 4.5. Reserved unskippable chunks (chunk types 0x02-0x7f).\n\t\t\tprintln(\"chunkType <= 0x7f\")\n\t\t\tr.err = ErrSnappyUnsupported\n\t\t\treturn written, r.err\n\t\t}\n\t\t// Section 4.4 Padding (chunk type 0xfe).\n\t\t// Section 4.6. Reserved skippable chunks (chunk types 0x80-0xfd).\n\t\tif !r.readFull(r.buf[:chunkLen], false) {\n\t\t\treturn written, r.err\n\t\t}\n\t}\n}\n\n// decodeSnappy writes the decoding of src to dst. It assumes that the varint-encoded\n// length of the decompressed bytes has already been read.\nfunc decodeSnappy(blk *blockEnc, src []byte) error {\n\t//decodeRef(make([]byte, snappyMaxBlockSize), src)\n\tvar s, length int\n\tlits := blk.extraLits\n\tvar offset uint32\n\tfor s < len(src) {\n\t\tswitch src[s] & 0x03 {\n\t\tcase snappyTagLiteral:\n\t\t\tx := uint32(src[s] >> 2)\n\t\t\tswitch {\n\t\t\tcase x < 60:\n\t\t\t\ts++\n\t\t\tcase x == 60:\n\t\t\t\ts += 2\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\tprintln(\"uint(s) > uint(len(src)\", s, src)\n\t\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-1])\n\t\t\tcase x == 61:\n\t\t\t\ts += 3\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\tprintln(\"uint(s) > uint(len(src)\", s, src)\n\t\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-2]) | uint32(src[s-1])<<8\n\t\t\tcase x == 62:\n\t\t\t\ts += 4\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\tprintln(\"uint(s) > uint(len(src)\", s, src)\n\t\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-3]) | uint32(src[s-2])<<8 | uint32(src[s-1])<<16\n\t\t\tcase x == 63:\n\t\t\t\ts += 5\n\t\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\t\tprintln(\"uint(s) > uint(len(src)\", s, src)\n\t\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t\t}\n\t\t\t\tx = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24\n\t\t\t}\n\t\t\tif x > snappyMaxBlockSize {\n\t\t\t\tprintln(\"x > snappyMaxBlockSize\", x, snappyMaxBlockSize)\n\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t}\n\t\t\tlength = int(x) + 1\n\t\t\tif length <= 0 {\n\t\t\t\tprintln(\"length <= 0 \", length)\n\n\t\t\t\treturn errUnsupportedLiteralLength\n\t\t\t}\n\t\t\t//if length > snappyMaxBlockSize-d || uint32(length) > len(src)-s {\n\t\t\t//\treturn ErrSnappyCorrupt\n\t\t\t//}\n\n\t\t\tblk.literals = append(blk.literals, src[s:s+length]...)\n\t\t\t//println(length, \"litLen\")\n\t\t\tlits += length\n\t\t\ts += length\n\t\t\tcontinue\n\n\t\tcase snappyTagCopy1:\n\t\t\ts += 2\n\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\tprintln(\"uint(s) > uint(len(src)\", s, len(src))\n\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t}\n\t\t\tlength = 4 + int(src[s-2])>>2&0x7\n\t\t\toffset = uint32(src[s-2])&0xe0<<3 | uint32(src[s-1])\n\n\t\tcase snappyTagCopy2:\n\t\t\ts += 3\n\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\tprintln(\"uint(s) > uint(len(src)\", s, len(src))\n\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t}\n\t\t\tlength = 1 + int(src[s-3])>>2\n\t\t\toffset = uint32(src[s-2]) | uint32(src[s-1])<<8\n\n\t\tcase snappyTagCopy4:\n\t\t\ts += 5\n\t\t\tif uint(s) > uint(len(src)) { // The uint conversions catch overflow from the previous line.\n\t\t\t\tprintln(\"uint(s) > uint(len(src)\", s, len(src))\n\t\t\t\treturn ErrSnappyCorrupt\n\t\t\t}\n\t\t\tlength = 1 + int(src[s-5])>>2\n\t\t\toffset = uint32(src[s-4]) | uint32(src[s-3])<<8 | uint32(src[s-2])<<16 | uint32(src[s-1])<<24\n\t\t}\n\n\t\tif offset <= 0 || blk.size+lits < int(offset) /*|| length > len(blk)-d */ {\n\t\t\tprintln(\"offset <= 0 || blk.size+lits < int(offset)\", offset, blk.size+lits, int(offset), blk.size, lits)\n\n\t\t\treturn ErrSnappyCorrupt\n\t\t}\n\n\t\t// Check if offset is one of the recent offsets.\n\t\t// Adjusts the output offset accordingly.\n\t\t// Gives a tiny bit of compression, typically around 1%.\n\t\tif false {\n\t\t\toffset = blk.matchOffset(offset, uint32(lits))\n\t\t} else {\n\t\t\toffset += 3\n\t\t}\n\n\t\tblk.sequences = append(blk.sequences, seq{\n\t\t\tlitLen:   uint32(lits),\n\t\t\toffset:   offset,\n\t\t\tmatchLen: uint32(length) - zstdMinMatch,\n\t\t})\n\t\tblk.size += length + lits\n\t\tlits = 0\n\t}\n\tblk.extraLits = lits\n\treturn nil\n}\n\nfunc (r *SnappyConverter) readFull(p []byte, allowEOF bool) (ok bool) {\n\tif _, r.err = io.ReadFull(r.r, p); r.err != nil {\n\t\tif r.err == io.ErrUnexpectedEOF || (r.err == io.EOF && !allowEOF) {\n\t\t\tr.err = ErrSnappyCorrupt\n\t\t}\n\t\treturn false\n\t}\n\treturn true\n}\n\nvar crcTable = crc32.MakeTable(crc32.Castagnoli)\n\n// crc implements the checksum specified in section 3 of\n// https://github.com/google/snappy/blob/master/framing_format.txt\nfunc snappyCRC(b []byte) uint32 {\n\tc := crc32.Update(0, crcTable, b)\n\treturn c>>15 | c<<17 + 0xa282ead8\n}\n\n// snappyDecodedLen returns the length of the decoded block and the number of bytes\n// that the length header occupied.\nfunc snappyDecodedLen(src []byte) (blockLen, headerLen int, err error) {\n\tv, n := binary.Uvarint(src)\n\tif n <= 0 || v > 0xffffffff {\n\t\treturn 0, 0, ErrSnappyCorrupt\n\t}\n\n\tconst wordSize = 32 << (^uint(0) >> 32 & 1)\n\tif wordSize == 32 && v > 0x7fffffff {\n\t\treturn 0, 0, ErrSnappyTooLarge\n\t}\n\treturn int(v), n, nil\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/zip.go",
    "content": "// Copyright 2019+ Klaus Post. All rights reserved.\n// License information can be found in the LICENSE file.\n\npackage zstd\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"sync\"\n)\n\n// ZipMethodWinZip is the method for Zstandard compressed data inside Zip files for WinZip.\n// See https://www.winzip.com/win/en/comp_info.html\nconst ZipMethodWinZip = 93\n\n// ZipMethodPKWare is the original method number used by PKWARE to indicate Zstandard compression.\n// Deprecated: This has been deprecated by PKWARE, use ZipMethodWinZip instead for compression.\n// See https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.9.TXT\nconst ZipMethodPKWare = 20\n\n// zipReaderPool is the default reader pool.\nvar zipReaderPool = sync.Pool{New: func() interface{} {\n\tz, err := NewReader(nil, WithDecoderLowmem(true), WithDecoderMaxWindow(128<<20), WithDecoderConcurrency(1))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn z\n}}\n\n// newZipReader creates a pooled zip decompressor.\nfunc newZipReader(opts ...DOption) func(r io.Reader) io.ReadCloser {\n\tpool := &zipReaderPool\n\tif len(opts) > 0 {\n\t\topts = append([]DOption{WithDecoderLowmem(true), WithDecoderMaxWindow(128 << 20)}, opts...)\n\t\t// Force concurrency 1\n\t\topts = append(opts, WithDecoderConcurrency(1))\n\t\t// Create our own pool\n\t\tpool = &sync.Pool{}\n\t}\n\treturn func(r io.Reader) io.ReadCloser {\n\t\tdec, ok := pool.Get().(*Decoder)\n\t\tif ok {\n\t\t\tdec.Reset(r)\n\t\t} else {\n\t\t\td, err := NewReader(r, opts...)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\tdec = d\n\t\t}\n\t\treturn &pooledZipReader{dec: dec, pool: pool}\n\t}\n}\n\ntype pooledZipReader struct {\n\tmu   sync.Mutex // guards Close and Read\n\tpool *sync.Pool\n\tdec  *Decoder\n}\n\nfunc (r *pooledZipReader) Read(p []byte) (n int, err error) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tif r.dec == nil {\n\t\treturn 0, errors.New(\"read after close or EOF\")\n\t}\n\tdec, err := r.dec.Read(p)\n\tif err == io.EOF {\n\t\tr.dec.Reset(nil)\n\t\tr.pool.Put(r.dec)\n\t\tr.dec = nil\n\t}\n\treturn dec, err\n}\n\nfunc (r *pooledZipReader) Close() error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\tvar err error\n\tif r.dec != nil {\n\t\terr = r.dec.Reset(nil)\n\t\tr.pool.Put(r.dec)\n\t\tr.dec = nil\n\t}\n\treturn err\n}\n\ntype pooledZipWriter struct {\n\tmu   sync.Mutex // guards Close and Read\n\tenc  *Encoder\n\tpool *sync.Pool\n}\n\nfunc (w *pooledZipWriter) Write(p []byte) (n int, err error) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tif w.enc == nil {\n\t\treturn 0, errors.New(\"Write after Close\")\n\t}\n\treturn w.enc.Write(p)\n}\n\nfunc (w *pooledZipWriter) Close() error {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tvar err error\n\tif w.enc != nil {\n\t\terr = w.enc.Close()\n\t\tw.pool.Put(w.enc)\n\t\tw.enc = nil\n\t}\n\treturn err\n}\n\n// ZipCompressor returns a compressor that can be registered with zip libraries.\n// The provided encoder options will be used on all encodes.\nfunc ZipCompressor(opts ...EOption) func(w io.Writer) (io.WriteCloser, error) {\n\tvar pool sync.Pool\n\treturn func(w io.Writer) (io.WriteCloser, error) {\n\t\tenc, ok := pool.Get().(*Encoder)\n\t\tif ok {\n\t\t\tenc.Reset(w)\n\t\t} else {\n\t\t\tvar err error\n\t\t\tenc, err = NewWriter(w, opts...)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn &pooledZipWriter{enc: enc, pool: &pool}, nil\n\t}\n}\n\n// ZipDecompressor returns a decompressor that can be registered with zip libraries.\n// See ZipCompressor for example.\n// Options can be specified. WithDecoderConcurrency(1) is forced,\n// and by default a 128MB maximum decompression window is specified.\n// The window size can be overridden if required.\nfunc ZipDecompressor(opts ...DOption) func(r io.Reader) io.ReadCloser {\n\treturn newZipReader(opts...)\n}\n"
  },
  {
    "path": "vendor/github.com/klauspost/compress/zstd/zstd.go",
    "content": "// Package zstd provides decompression of zstandard files.\n//\n// For advanced usage and examples, go to the README: https://github.com/klauspost/compress/tree/master/zstd#zstd\npackage zstd\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"log\"\n\t\"math\"\n)\n\n// enable debug printing\nconst debug = false\n\n// enable encoding debug printing\nconst debugEncoder = debug\n\n// enable decoding debug printing\nconst debugDecoder = debug\n\n// Enable extra assertions.\nconst debugAsserts = debug || false\n\n// print sequence details\nconst debugSequences = false\n\n// print detailed matching information\nconst debugMatches = false\n\n// force encoder to use predefined tables.\nconst forcePreDef = false\n\n// zstdMinMatch is the minimum zstd match length.\nconst zstdMinMatch = 3\n\n// fcsUnknown is used for unknown frame content size.\nconst fcsUnknown = math.MaxUint64\n\nvar (\n\t// ErrReservedBlockType is returned when a reserved block type is found.\n\t// Typically this indicates wrong or corrupted input.\n\tErrReservedBlockType = errors.New(\"invalid input: reserved block type encountered\")\n\n\t// ErrCompressedSizeTooBig is returned when a block is bigger than allowed.\n\t// Typically this indicates wrong or corrupted input.\n\tErrCompressedSizeTooBig = errors.New(\"invalid input: compressed size too big\")\n\n\t// ErrBlockTooSmall is returned when a block is too small to be decoded.\n\t// Typically returned on invalid input.\n\tErrBlockTooSmall = errors.New(\"block too small\")\n\n\t// ErrUnexpectedBlockSize is returned when a block has unexpected size.\n\t// Typically returned on invalid input.\n\tErrUnexpectedBlockSize = errors.New(\"unexpected block size\")\n\n\t// ErrMagicMismatch is returned when a \"magic\" number isn't what is expected.\n\t// Typically this indicates wrong or corrupted input.\n\tErrMagicMismatch = errors.New(\"invalid input: magic number mismatch\")\n\n\t// ErrWindowSizeExceeded is returned when a reference exceeds the valid window size.\n\t// Typically this indicates wrong or corrupted input.\n\tErrWindowSizeExceeded = errors.New(\"window size exceeded\")\n\n\t// ErrWindowSizeTooSmall is returned when no window size is specified.\n\t// Typically this indicates wrong or corrupted input.\n\tErrWindowSizeTooSmall = errors.New(\"invalid input: window size was too small\")\n\n\t// ErrDecoderSizeExceeded is returned if decompressed size exceeds the configured limit.\n\tErrDecoderSizeExceeded = errors.New(\"decompressed size exceeds configured limit\")\n\n\t// ErrUnknownDictionary is returned if the dictionary ID is unknown.\n\tErrUnknownDictionary = errors.New(\"unknown dictionary\")\n\n\t// ErrFrameSizeExceeded is returned if the stated frame size is exceeded.\n\t// This is only returned if SingleSegment is specified on the frame.\n\tErrFrameSizeExceeded = errors.New(\"frame size exceeded\")\n\n\t// ErrFrameSizeMismatch is returned if the stated frame size does not match the expected size.\n\t// This is only returned if SingleSegment is specified on the frame.\n\tErrFrameSizeMismatch = errors.New(\"frame size does not match size on stream\")\n\n\t// ErrCRCMismatch is returned if CRC mismatches.\n\tErrCRCMismatch = errors.New(\"CRC check failed\")\n\n\t// ErrDecoderClosed will be returned if the Decoder was used after\n\t// Close has been called.\n\tErrDecoderClosed = errors.New(\"decoder used after Close\")\n\n\t// ErrDecoderNilInput is returned when a nil Reader was provided\n\t// and an operation other than Reset/DecodeAll/Close was attempted.\n\tErrDecoderNilInput = errors.New(\"nil input provided as reader\")\n)\n\nfunc println(a ...interface{}) {\n\tif debug || debugDecoder || debugEncoder {\n\t\tlog.Println(a...)\n\t}\n}\n\nfunc printf(format string, a ...interface{}) {\n\tif debug || debugDecoder || debugEncoder {\n\t\tlog.Printf(format, a...)\n\t}\n}\n\nfunc load3232(b []byte, i int32) uint32 {\n\treturn binary.LittleEndian.Uint32(b[:len(b):len(b)][i:])\n}\n\nfunc load6432(b []byte, i int32) uint64 {\n\treturn binary.LittleEndian.Uint64(b[:len(b):len(b)][i:])\n}\n\ntype byter interface {\n\tBytes() []byte\n\tLen() int\n}\n\nvar _ byter = &bytes.Buffer{}\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/.gitignore",
    "content": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n\n# Test binary, build with `go test -c`\n*.test\n\n# Output of the go coverage tool, specifically when used with LiteIDE\n*.out\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2019, KADOTA, Kyohei\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\n3. Neither the name of the copyright holder nor the names of its\n   contributors may be used to endorse or promote products derived from\n   this software without specific prior written permission.\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": "vendor/github.com/lufia/plan9stats/README.md",
    "content": "# plan9stats\nA module for retrieving statistics of Plan 9\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/cpu.go",
    "content": "package stats\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// CPUType represents /dev/cputype.\ntype CPUType struct {\n\tName  string\n\tClock int // clock rate in MHz\n}\n\nfunc ReadCPUType(ctx context.Context, opts ...Option) (*CPUType, error) {\n\tcfg := newConfig(opts...)\n\tvar c CPUType\n\tif err := readCPUType(cfg.rootdir, &c); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &c, nil\n}\n\ntype SysStats struct {\n\tID           int\n\tNumCtxSwitch int64\n\tNumInterrupt int64\n\tNumSyscall   int64\n\tNumFault     int64\n\tNumTLBFault  int64\n\tNumTLBPurge  int64\n\tLoadAvg      int64 // in units of milli-CPUs and is decayed over time\n\tIdle         int   // percentage\n\tInterrupt    int   // percentage\n}\n\n// ReadSysStats reads system statistics from /dev/sysstat.\nfunc ReadSysStats(ctx context.Context, opts ...Option) ([]*SysStats, error) {\n\tcfg := newConfig(opts...)\n\tfile := filepath.Join(cfg.rootdir, \"/dev/sysstat\")\n\tf, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tscanner := bufio.NewScanner(f)\n\tvar stats []*SysStats\n\tfor scanner.Scan() {\n\t\ta := strings.Fields(scanner.Text())\n\t\tif len(a) != 10 {\n\t\t\tcontinue\n\t\t}\n\t\tvar (\n\t\t\tp    intParser\n\t\t\tstat SysStats\n\t\t)\n\t\tstat.ID = p.ParseInt(a[0], 10)\n\t\tstat.NumCtxSwitch = p.ParseInt64(a[1], 10)\n\t\tstat.NumInterrupt = p.ParseInt64(a[2], 10)\n\t\tstat.NumSyscall = p.ParseInt64(a[3], 10)\n\t\tstat.NumFault = p.ParseInt64(a[4], 10)\n\t\tstat.NumTLBFault = p.ParseInt64(a[5], 10)\n\t\tstat.NumTLBPurge = p.ParseInt64(a[6], 10)\n\t\tstat.LoadAvg = p.ParseInt64(a[7], 10)\n\t\tstat.Idle = p.ParseInt(a[8], 10)\n\t\tstat.Interrupt = p.ParseInt(a[9], 10)\n\t\tif err := p.Err(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstats = append(stats, &stat)\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn stats, nil\n}\n\nfunc readCPUType(rootdir string, c *CPUType) error {\n\tfile := filepath.Join(rootdir, \"/dev/cputype\")\n\tb, err := ioutil.ReadFile(file)\n\tif err != nil {\n\t\treturn err\n\t}\n\tb = bytes.TrimSpace(b)\n\ti := bytes.LastIndexByte(b, ' ')\n\tif i < 0 {\n\t\treturn fmt.Errorf(\"%s: invalid format\", file)\n\t}\n\tclock, err := strconv.Atoi(string(b[i+1:]))\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.Name = string(b[:i])\n\tc.Clock = clock\n\treturn nil\n}\n\n// Time represents /dev/time.\ntype Time struct {\n\tUnix     time.Duration\n\tUnixNano time.Duration\n\tTicks    int64 // clock ticks\n\tFreq     int64 //cloc frequency\n}\n\n// Uptime returns uptime.\nfunc (t *Time) Uptime() time.Duration {\n\tv := float64(t.Ticks) / float64(t.Freq)\n\treturn time.Duration(v*1000_000_000) * time.Nanosecond\n}\n\nfunc ReadTime(ctx context.Context, opts ...Option) (*Time, error) {\n\tcfg := newConfig(opts...)\n\tfile := filepath.Join(cfg.rootdir, \"/dev/time\")\n\tvar t Time\n\tif err := readTime(file, &t); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &t, nil\n}\n\n// ProcStatus represents a /proc/n/status.\ntype ProcStatus struct {\n\tName         string\n\tUser         string\n\tState        string\n\tTimes        CPUTime\n\tMemUsed      int64  // in units of 1024 bytes\n\tBasePriority uint32 // 0(low) to 19(high)\n\tPriority     uint32 // 0(low) to 19(high)\n}\n\n// CPUTime represents /dev/cputime or a part of /proc/n/status.\ntype CPUTime struct {\n\tUser      time.Duration // the time in user mode (millisecconds)\n\tSys       time.Duration\n\tReal      time.Duration\n\tChildUser time.Duration // exited children and descendants time in user mode\n\tChildSys  time.Duration\n\tChildReal time.Duration\n}\n\n// CPUStats emulates Linux's /proc/stat.\ntype CPUStats struct {\n\tUser time.Duration\n\tSys  time.Duration\n\tIdle time.Duration\n}\n\nfunc ReadCPUStats(ctx context.Context, opts ...Option) (*CPUStats, error) {\n\tcfg := newConfig(opts...)\n\ta, err := ReadSysStats(ctx, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdir := filepath.Join(cfg.rootdir, \"/proc\")\n\td, err := os.Open(dir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tnames, err := d.Readdirnames(0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar up uint32parser\n\tpids := make([]uint32, len(names))\n\tfor i, s := range names {\n\t\tpids[i] = up.Parse(s)\n\t}\n\tif up.err != nil {\n\t\treturn nil, err\n\t}\n\tsort.Slice(pids, func(i, j int) bool {\n\t\treturn pids[i] < pids[j]\n\t})\n\n\tvar stat CPUStats\n\tfor _, pid := range pids {\n\t\ts := strconv.FormatUint(uint64(pid), 10)\n\t\tfile := filepath.Join(dir, s, \"status\")\n\t\tvar p ProcStatus\n\t\tif err := readProcStatus(file, &p); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstat.User += p.Times.User\n\t\tstat.Sys += p.Times.Sys\n\t}\n\n\tvar t Time\n\tfile := filepath.Join(cfg.rootdir, \"/dev/time\")\n\tif err := readTime(file, &t); err != nil {\n\t\treturn nil, err\n\t}\n\t// In multi-processor host, Idle should multiple by number of cores.\n\tu := t.Uptime() * time.Duration(len(a))\n\tstat.Idle = u - stat.User - stat.Sys\n\treturn &stat, nil\n}\n\nfunc readProcStatus(file string, p *ProcStatus) error {\n\tb, err := ioutil.ReadFile(file)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\tfields := strings.Fields(string(b))\n\tif len(fields) != 12 {\n\t\treturn errors.New(\"invalid format\")\n\t}\n\tp.Name = string(fields[0])\n\tp.User = string(fields[1])\n\tp.State = string(fields[2])\n\tvar up uint32parser\n\tp.Times.User = time.Duration(up.Parse(fields[3])) * time.Millisecond\n\tp.Times.Sys = time.Duration(up.Parse(fields[4])) * time.Millisecond\n\tp.Times.Real = time.Duration(up.Parse(fields[5])) * time.Millisecond\n\tp.Times.ChildUser = time.Duration(up.Parse(fields[6])) * time.Millisecond\n\tp.Times.ChildSys = time.Duration(up.Parse(fields[7])) * time.Millisecond\n\tp.Times.ChildReal = time.Duration(up.Parse(fields[8])) * time.Millisecond\n\tp.MemUsed, err = strconv.ParseInt(fields[9], 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.BasePriority = up.Parse(fields[10])\n\tp.Priority = up.Parse(fields[11])\n\treturn up.err\n}\n\nfunc readTime(file string, t *Time) error {\n\tb, err := ioutil.ReadFile(file)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfields := strings.Fields(string(b))\n\tif len(fields) != 4 {\n\t\treturn errors.New(\"invalid format\")\n\t}\n\tn, err := strconv.ParseInt(fields[0], 10, 32)\n\tif err != nil {\n\t\treturn err\n\t}\n\tt.Unix = time.Duration(n) * time.Second\n\tv, err := strconv.ParseInt(fields[1], 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tt.UnixNano = time.Duration(v) * time.Nanosecond\n\tt.Ticks, err = strconv.ParseInt(fields[2], 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tt.Freq, err = strconv.ParseInt(fields[3], 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\ntype uint32parser struct {\n\terr error\n}\n\nfunc (p *uint32parser) Parse(s string) uint32 {\n\tif p.err != nil {\n\t\treturn 0\n\t}\n\tn, err := strconv.ParseUint(s, 10, 32)\n\tif err != nil {\n\t\tp.err = err\n\t\treturn 0\n\t}\n\treturn uint32(n)\n}\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/doc.go",
    "content": "// Package stats provides statistic utilities for Plan 9.\npackage stats\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/host.go",
    "content": "package stats\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar (\n\tdelim = []byte{' '}\n)\n\n// Host represents host status.\ntype Host struct {\n\tSysname    string\n\tStorages   []*Storage\n\tInterfaces []*Interface\n}\n\n// MemStats represents the memory statistics.\ntype MemStats struct {\n\tTotal       int64 // total memory in byte\n\tPageSize    int64 // a page size in byte\n\tKernelPages int64\n\tUserPages   Gauge\n\tSwapPages   Gauge\n\n\tMalloced Gauge // kernel malloced data in byte\n\tGraphics Gauge // kernel graphics data in byte\n}\n\n// Gauge is used/available gauge.\ntype Gauge struct {\n\tUsed  int64\n\tAvail int64\n}\n\nfunc (g Gauge) Free() int64 {\n\treturn g.Avail - g.Used\n}\n\n// ReadMemStats reads memory statistics from /dev/swap.\nfunc ReadMemStats(ctx context.Context, opts ...Option) (*MemStats, error) {\n\tcfg := newConfig(opts...)\n\tswap := filepath.Join(cfg.rootdir, \"/dev/swap\")\n\tf, err := os.Open(swap)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tvar stat MemStats\n\tm := map[string]interface{}{\n\t\t\"memory\":        &stat.Total,\n\t\t\"pagesize\":      &stat.PageSize,\n\t\t\"kernel\":        &stat.KernelPages,\n\t\t\"user\":          &stat.UserPages,\n\t\t\"swap\":          &stat.SwapPages,\n\t\t\"kernel malloc\": &stat.Malloced,\n\t\t\"kernel draw\":   &stat.Graphics,\n\t}\n\tscanner := bufio.NewScanner(f)\n\tfor scanner.Scan() {\n\t\tfields := bytes.SplitN(scanner.Bytes(), delim, 2)\n\t\tif len(fields) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch key := string(fields[1]); key {\n\t\tcase \"memory\", \"pagesize\", \"kernel\":\n\t\t\tv := m[key].(*int64)\n\t\t\tn, err := strconv.ParseInt(string(fields[0]), 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t*v = n\n\t\tcase \"user\", \"swap\", \"kernel malloc\", \"kernel draw\":\n\t\t\tv := m[key].(*Gauge)\n\t\t\tif err := parseGauge(string(fields[0]), v); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &stat, nil\n}\n\nfunc parseGauge(s string, r *Gauge) error {\n\ta := strings.SplitN(s, \"/\", 2)\n\tif len(a) != 2 {\n\t\treturn fmt.Errorf(\"can't parse ratio: %s\", s)\n\t}\n\tvar p intParser\n\tu := p.ParseInt64(a[0], 10)\n\tn := p.ParseInt64(a[1], 10)\n\tif err := p.Err(); err != nil {\n\t\treturn err\n\t}\n\tr.Used = u\n\tr.Avail = n\n\treturn nil\n}\n\ntype Storage struct {\n\tName     string\n\tModel    string\n\tCapacity int64\n}\n\ntype Interface struct {\n\tName string\n\tAddr string\n}\n\nconst (\n\tnumEther = 8  // see ether(3)\n\tnumIpifc = 16 // see ip(3)\n)\n\n// ReadInterfaces reads network interfaces from etherN.\nfunc ReadInterfaces(ctx context.Context, opts ...Option) ([]*Interface, error) {\n\tcfg := newConfig(opts...)\n\tvar a []*Interface\n\tfor i := 0; i < numEther; i++ {\n\t\tp, err := readInterface(cfg.rootdir, i)\n\t\tif os.IsNotExist(err) {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ta = append(a, p)\n\t}\n\treturn a, nil\n}\n\nfunc readInterface(netroot string, i int) (*Interface, error) {\n\tether := fmt.Sprintf(\"ether%d\", i)\n\tdir := filepath.Join(netroot, ether)\n\tinfo, err := os.Stat(dir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !info.IsDir() {\n\t\treturn nil, fmt.Errorf(\"%s: is not directory\", dir)\n\t}\n\n\taddr, err := ioutil.ReadFile(filepath.Join(dir, \"addr\"))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Interface{\n\t\tName: ether,\n\t\tAddr: string(addr),\n\t}, nil\n}\n\nvar (\n\tnetdirs = []string{\"/net\", \"/net.alt\"}\n)\n\n// ReadHost reads host status.\nfunc ReadHost(ctx context.Context, opts ...Option) (*Host, error) {\n\tcfg := newConfig(opts...)\n\tvar h Host\n\tname, err := readSysname(cfg.rootdir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\th.Sysname = name\n\n\ta, err := readStorages(cfg.rootdir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\th.Storages = a\n\n\tfor _, s := range netdirs {\n\t\tnetroot := filepath.Join(cfg.rootdir, s)\n\t\tifaces, err := ReadInterfaces(ctx, WithRootDir(netroot))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\th.Interfaces = append(h.Interfaces, ifaces...)\n\t}\n\treturn &h, nil\n}\n\nfunc readSysname(rootdir string) (string, error) {\n\tfile := filepath.Join(rootdir, \"/dev/sysname\")\n\tb, err := ioutil.ReadFile(file)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(bytes.TrimSpace(b)), nil\n}\n\nfunc readStorages(rootdir string) ([]*Storage, error) {\n\tsdctl := filepath.Join(rootdir, \"/dev/sdctl\")\n\tf, err := os.Open(sdctl)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tvar a []*Storage\n\tscanner := bufio.NewScanner(f)\n\tfor scanner.Scan() {\n\t\tfields := bytes.Split(scanner.Bytes(), delim)\n\t\tif len(fields) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\texp := string(fields[0]) + \"*\"\n\t\tif !strings.HasPrefix(exp, \"sd\") {\n\t\t\tcontinue\n\t\t}\n\t\tdir := filepath.Join(rootdir, \"/dev\", exp)\n\t\tm, err := filepath.Glob(dir)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, dir := range m {\n\t\t\ts, err := readStorage(dir)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ta = append(a, s)\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn a, nil\n}\n\nfunc readStorage(dir string) (*Storage, error) {\n\tctl := filepath.Join(dir, \"ctl\")\n\tf, err := os.Open(ctl)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tvar s Storage\n\ts.Name = filepath.Base(dir)\n\tscanner := bufio.NewScanner(f)\n\tfor scanner.Scan() {\n\t\tline := scanner.Bytes()\n\t\tswitch {\n\t\tcase bytes.HasPrefix(line, []byte(\"inquiry\")):\n\t\t\ts.Model = string(bytes.TrimSpace(line[7:]))\n\t\tcase bytes.HasPrefix(line, []byte(\"geometry\")):\n\t\t\tfields := bytes.Split(line, delim)\n\t\t\tif len(fields) < 3 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvar p intParser\n\t\t\tsec := p.ParseInt64(string(fields[1]), 10)\n\t\t\tsize := p.ParseInt64(string(fields[2]), 10)\n\t\t\tif err := p.Err(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ts.Capacity = sec * size\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &s, nil\n}\n\ntype IPStats struct {\n\tID      int    // number of interface in ipifc dir\n\tDevice  string // associated physical device\n\tMTU     int    // max transfer unit\n\tSendra6 uint8  // on == send router adv\n\tRecvra6 uint8  // on == recv router adv\n\n\tPktin  int64 // packets read\n\tPktout int64 // packets written\n\tErrin  int64 // read errors\n\tErrout int64 // write errors\n}\n\ntype Iplifc struct {\n\tIP            net.IP\n\tMask          net.IPMask\n\tNet           net.IP // ip & mask\n\tPerfLifetime  int64  // preferred lifetime\n\tValidLifetime int64  // valid lifetime\n}\n\ntype Ipv6rp struct {\n\t// TODO(lufia): see ip(2)\n}\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/int.go",
    "content": "package stats\n\nimport (\n\t\"strconv\"\n)\n\ntype intParser struct {\n\terr error\n}\n\nfunc (p *intParser) ParseInt(s string, base int) int {\n\tif p.err != nil {\n\t\treturn 0\n\t}\n\tvar n int64\n\tn, p.err = strconv.ParseInt(s, base, 0)\n\treturn int(n)\n}\n\nfunc (p *intParser) ParseInt64(s string, base int) int64 {\n\tif p.err != nil {\n\t\treturn 0\n\t}\n\tvar n int64\n\tn, p.err = strconv.ParseInt(s, base, 64)\n\treturn n\n}\n\nfunc (p *intParser) Err() error {\n\treturn p.err\n}\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/opts.go",
    "content": "package stats\n\ntype Config struct {\n\trootdir string\n}\n\ntype Option func(*Config)\n\nfunc newConfig(opts ...Option) *Config {\n\tvar cfg Config\n\tfor _, opt := range opts {\n\t\topt(&cfg)\n\t}\n\treturn &cfg\n}\n\nfunc WithRootDir(dir string) Option {\n\treturn func(cfg *Config) {\n\t\tcfg.rootdir = dir\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/lufia/plan9stats/stats.go",
    "content": "package stats\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\ntype InterfaceStats struct {\n\tPacketsReceived  int64 // in packets\n\tLink             int   // link status\n\tPacketsSent      int64 // out packets\n\tNumCRCErr        int   // input CRC errors\n\tNumOverflows     int   // packet overflows\n\tNumSoftOverflows int   // software overflow\n\tNumFramingErr    int   // framing errors\n\tNumBufferingErr  int   // buffering errors\n\tNumOutputErr     int   // output errors\n\tPromiscuous      int   // number of promiscuous opens\n\tMbps             int   // megabits per sec\n\tAddr             string\n}\n\nfunc ReadInterfaceStats(ctx context.Context, opts ...Option) (*InterfaceStats, error) {\n\tcfg := newConfig(opts...)\n\tfile := filepath.Join(cfg.rootdir, \"stats\")\n\tf, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tvar stats InterfaceStats\n\tscanner := bufio.NewScanner(f)\n\tfor scanner.Scan() {\n\t\ts := strings.TrimSpace(scanner.Text())\n\t\ta := strings.SplitN(s, \":\", 2)\n\t\tif len(a) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tvar p intParser\n\t\tv := strings.TrimSpace(a[1])\n\t\tswitch a[0] {\n\t\tcase \"in\":\n\t\t\tstats.PacketsReceived = p.ParseInt64(v, 10)\n\t\tcase \"link\":\n\t\t\tstats.Link = p.ParseInt(v, 10)\n\t\tcase \"out\":\n\t\t\tstats.PacketsSent = p.ParseInt64(v, 10)\n\t\tcase \"crc\":\n\t\t\tstats.NumCRCErr = p.ParseInt(v, 10)\n\t\tcase \"overflows\":\n\t\t\tstats.NumOverflows = p.ParseInt(v, 10)\n\t\tcase \"soft overflows\":\n\t\t\tstats.NumSoftOverflows = p.ParseInt(v, 10)\n\t\tcase \"framing errs\":\n\t\t\tstats.NumFramingErr = p.ParseInt(v, 10)\n\t\tcase \"buffer errs\":\n\t\t\tstats.NumBufferingErr = p.ParseInt(v, 10)\n\t\tcase \"output errs\":\n\t\t\tstats.NumOutputErr = p.ParseInt(v, 10)\n\t\tcase \"prom\":\n\t\t\tstats.Promiscuous = p.ParseInt(v, 10)\n\t\tcase \"mbps\":\n\t\t\tstats.Mbps = p.ParseInt(v, 10)\n\t\tcase \"addr\":\n\t\t\tstats.Addr = v\n\t\t}\n\t\tif err := p.Err(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &stats, nil\n}\n\ntype TCPStats struct {\n\tMaxConn            int\n\tMaxSegment         int\n\tActiveOpens        int\n\tPassiveOpens       int\n\tEstablishedResets  int\n\tCurrentEstablished int\n}\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/.gitignore",
    "content": "*.sublime-project\n*.sublime-workspace\n*.un~\n*.swp\n.idea/\n*.iml\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/LICENSE.md",
    "content": "Copyright (c) 2013-2020, Frank Schroeder\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 notice, this\n   list of conditions and the following disclaimer.\n\n * 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\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/README.md",
    "content": "[![](https://img.shields.io/github/tag/magiconair/properties.svg?style=flat-square&label=release)](https://github.com/magiconair/properties/releases)\n[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg?style=flat-square)](https://raw.githubusercontent.com/magiconair/properties/master/LICENSE)\n[![GoDoc](http://img.shields.io/badge/godoc-reference-5272B4.svg?style=flat-square)](http://godoc.org/github.com/magiconair/properties)\n\n# Overview\n\nproperties is a Go library for reading and writing properties files.\n\nIt supports reading from multiple files or URLs and Spring style recursive\nproperty expansion of expressions like `${key}` to their corresponding value.\nValue expressions can refer to other keys like in `${key}` or to environment\nvariables like in `${USER}`.  Filenames can also contain environment variables\nlike in `/home/${USER}/myapp.properties`.\n\nProperties can be decoded into structs, maps, arrays and values through\nstruct tags.\n\nComments and the order of keys are preserved. Comments can be modified\nand can be written to the output.\n\nThe properties library supports both ISO-8859-1 and UTF-8 encoded data.\n\nStarting from version 1.3.0 the behavior of the MustXXX() functions is\nconfigurable by providing a custom `ErrorHandler` function. The default has\nchanged from `panic` to `log.Fatal` but this is configurable and custom\nerror handling functions can be provided. See the package documentation for\ndetails.\n\nRead the full documentation on [![GoDoc](http://img.shields.io/badge/godoc-reference-5272B4.svg?style=flat-square)](http://godoc.org/github.com/magiconair/properties)\n\n## Getting Started\n\n```go\nimport (\n\t\"flag\"\n\t\"github.com/magiconair/properties\"\n)\n\nfunc main() {\n\t// init from a file\n\tp := properties.MustLoadFile(\"${HOME}/config.properties\", properties.UTF8)\n\n\t// or multiple files\n\tp = properties.MustLoadFiles([]string{\n\t\t\t\"${HOME}/config.properties\",\n\t\t\t\"${HOME}/config-${USER}.properties\",\n\t\t}, properties.UTF8, true)\n\n\t// or from a map\n\tp = properties.LoadMap(map[string]string{\"key\": \"value\", \"abc\": \"def\"})\n\n\t// or from a string\n\tp = properties.MustLoadString(\"key=value\\nabc=def\")\n\n\t// or from a URL\n\tp = properties.MustLoadURL(\"http://host/path\")\n\n\t// or from multiple URLs\n\tp = properties.MustLoadURL([]string{\n\t\t\t\"http://host/config\",\n\t\t\t\"http://host/config-${USER}\",\n\t\t}, true)\n\n\t// or from flags\n\tp.MustFlag(flag.CommandLine)\n\n\t// get values through getters\n\thost := p.MustGetString(\"host\")\n\tport := p.GetInt(\"port\", 8080)\n\n\t// or through Decode\n\ttype Config struct {\n\t\tHost    string        `properties:\"host\"`\n\t\tPort    int           `properties:\"port,default=9000\"`\n\t\tAccept  []string      `properties:\"accept,default=image/png;image;gif\"`\n\t\tTimeout time.Duration `properties:\"timeout,default=5s\"`\n\t}\n\tvar cfg Config\n\tif err := p.Decode(&cfg); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\n```\n\n## Installation and Upgrade\n\n```\n$ go get -u github.com/magiconair/properties\n```\n\n## License\n\n2 clause BSD license. See [LICENSE](https://github.com/magiconair/properties/blob/master/LICENSE) file for details.\n\n## ToDo\n\n* Dump contents with passwords and secrets obscured\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/decode.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// Decode assigns property values to exported fields of a struct.\n//\n// Decode traverses v recursively and returns an error if a value cannot be\n// converted to the field type or a required value is missing for a field.\n//\n// The following type dependent decodings are used:\n//\n// String, boolean, numeric fields have the value of the property key assigned.\n// The property key name is the name of the field. A different key and a default\n// value can be set in the field's tag. Fields without default value are\n// required. If the value cannot be converted to the field type an error is\n// returned.\n//\n// time.Duration fields have the result of time.ParseDuration() assigned.\n//\n// time.Time fields have the vaule of time.Parse() assigned. The default layout\n// is time.RFC3339 but can be set in the field's tag.\n//\n// Arrays and slices of string, boolean, numeric, time.Duration and time.Time\n// fields have the value interpreted as a comma separated list of values. The\n// individual values are trimmed of whitespace and empty values are ignored. A\n// default value can be provided as a semicolon separated list in the field's\n// tag.\n//\n// Struct fields are decoded recursively using the field name plus \".\" as\n// prefix. The prefix (without dot) can be overridden in the field's tag.\n// Default values are not supported in the field's tag. Specify them on the\n// fields of the inner struct instead.\n//\n// Map fields must have a key of type string and are decoded recursively by\n// using the field's name plus \".' as prefix and the next element of the key\n// name as map key. The prefix (without dot) can be overridden in the field's\n// tag. Default values are not supported.\n//\n// Examples:\n//\n//\t// Field is ignored.\n//\tField int `properties:\"-\"`\n//\n//\t// Field is assigned value of 'Field'.\n//\tField int\n//\n//\t// Field is assigned value of 'myName'.\n//\tField int `properties:\"myName\"`\n//\n//\t// Field is assigned value of key 'myName' and has a default\n//\t// value 15 if the key does not exist.\n//\tField int `properties:\"myName,default=15\"`\n//\n//\t// Field is assigned value of key 'Field' and has a default\n//\t// value 15 if the key does not exist.\n//\tField int `properties:\",default=15\"`\n//\n//\t// Field is assigned value of key 'date' and the date\n//\t// is in format 2006-01-02\n//\tField time.Time `properties:\"date,layout=2006-01-02\"`\n//\n//\t// Field is assigned the non-empty and whitespace trimmed\n//\t// values of key 'Field' split by commas.\n//\tField []string\n//\n//\t// Field is assigned the non-empty and whitespace trimmed\n//\t// values of key 'Field' split by commas and has a default\n//\t// value [\"a\", \"b\", \"c\"] if the key does not exist.\n//\tField []string `properties:\",default=a;b;c\"`\n//\n//\t// Field is decoded recursively with \"Field.\" as key prefix.\n//\tField SomeStruct\n//\n//\t// Field is decoded recursively with \"myName.\" as key prefix.\n//\tField SomeStruct `properties:\"myName\"`\n//\n//\t// Field is decoded recursively with \"Field.\" as key prefix\n//\t// and the next dotted element of the key as map key.\n//\tField map[string]string\n//\n//\t// Field is decoded recursively with \"myName.\" as key prefix\n//\t// and the next dotted element of the key as map key.\n//\tField map[string]string `properties:\"myName\"`\nfunc (p *Properties) Decode(x interface{}) error {\n\tt, v := reflect.TypeOf(x), reflect.ValueOf(x)\n\tif t.Kind() != reflect.Ptr || v.Elem().Type().Kind() != reflect.Struct {\n\t\treturn fmt.Errorf(\"not a pointer to struct: %s\", t)\n\t}\n\tif err := dec(p, \"\", nil, nil, v); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc dec(p *Properties, key string, def *string, opts map[string]string, v reflect.Value) error {\n\tt := v.Type()\n\n\t// value returns the property value for key or the default if provided.\n\tvalue := func() (string, error) {\n\t\tif val, ok := p.Get(key); ok {\n\t\t\treturn val, nil\n\t\t}\n\t\tif def != nil {\n\t\t\treturn *def, nil\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"missing required key %s\", key)\n\t}\n\n\t// conv converts a string to a value of the given type.\n\tconv := func(s string, t reflect.Type) (val reflect.Value, err error) {\n\t\tvar v interface{}\n\n\t\tswitch {\n\t\tcase isDuration(t):\n\t\t\tv, err = time.ParseDuration(s)\n\n\t\tcase isTime(t):\n\t\t\tlayout := opts[\"layout\"]\n\t\t\tif layout == \"\" {\n\t\t\t\tlayout = time.RFC3339\n\t\t\t}\n\t\t\tv, err = time.Parse(layout, s)\n\n\t\tcase isBool(t):\n\t\t\tv, err = boolVal(s), nil\n\n\t\tcase isString(t):\n\t\t\tv, err = s, nil\n\n\t\tcase isFloat(t):\n\t\t\tv, err = strconv.ParseFloat(s, 64)\n\n\t\tcase isInt(t):\n\t\t\tv, err = strconv.ParseInt(s, 10, 64)\n\n\t\tcase isUint(t):\n\t\t\tv, err = strconv.ParseUint(s, 10, 64)\n\n\t\tdefault:\n\t\t\treturn reflect.Zero(t), fmt.Errorf(\"unsupported type %s\", t)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn reflect.Zero(t), err\n\t\t}\n\t\treturn reflect.ValueOf(v).Convert(t), nil\n\t}\n\n\t// keydef returns the property key and the default value based on the\n\t// name of the struct field and the options in the tag.\n\tkeydef := func(f reflect.StructField) (string, *string, map[string]string) {\n\t\t_key, _opts := parseTag(f.Tag.Get(\"properties\"))\n\n\t\tvar _def *string\n\t\tif d, ok := _opts[\"default\"]; ok {\n\t\t\t_def = &d\n\t\t}\n\t\tif _key != \"\" {\n\t\t\treturn _key, _def, _opts\n\t\t}\n\t\treturn f.Name, _def, _opts\n\t}\n\n\tswitch {\n\tcase isDuration(t) || isTime(t) || isBool(t) || isString(t) || isFloat(t) || isInt(t) || isUint(t):\n\t\ts, err := value()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tval, err := conv(s, t)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(val)\n\n\tcase isPtr(t):\n\t\treturn dec(p, key, def, opts, v.Elem())\n\n\tcase isStruct(t):\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tfv := v.Field(i)\n\t\t\tfk, def, opts := keydef(t.Field(i))\n\t\t\tif fk == \"-\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !fv.CanSet() {\n\t\t\t\treturn fmt.Errorf(\"cannot set %s\", t.Field(i).Name)\n\t\t\t}\n\t\t\tif key != \"\" {\n\t\t\t\tfk = key + \".\" + fk\n\t\t\t}\n\t\t\tif err := dec(p, fk, def, opts, fv); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase isArray(t):\n\t\tval, err := value()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvals := split(val, \";\")\n\t\ta := reflect.MakeSlice(t, 0, len(vals))\n\t\tfor _, s := range vals {\n\t\t\tval, err := conv(s, t.Elem())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ta = reflect.Append(a, val)\n\t\t}\n\t\tv.Set(a)\n\n\tcase isMap(t):\n\t\tvalT := t.Elem()\n\t\tm := reflect.MakeMap(t)\n\t\tfor postfix := range p.FilterStripPrefix(key + \".\").m {\n\t\t\tpp := strings.SplitN(postfix, \".\", 2)\n\t\t\tmk, mv := pp[0], reflect.New(valT)\n\t\t\tif err := dec(p, key+\".\"+mk, nil, nil, mv); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tm.SetMapIndex(reflect.ValueOf(mk), mv.Elem())\n\t\t}\n\t\tv.Set(m)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported type %s\", t)\n\t}\n\treturn nil\n}\n\n// split splits a string on sep, trims whitespace of elements\n// and omits empty elements\nfunc split(s string, sep string) []string {\n\tvar a []string\n\tfor _, v := range strings.Split(s, sep) {\n\t\tif v = strings.TrimSpace(v); v != \"\" {\n\t\t\ta = append(a, v)\n\t\t}\n\t}\n\treturn a\n}\n\n// parseTag parses a \"key,k=v,k=v,...\"\nfunc parseTag(tag string) (key string, opts map[string]string) {\n\topts = map[string]string{}\n\tfor i, s := range strings.Split(tag, \",\") {\n\t\tif i == 0 {\n\t\t\tkey = s\n\t\t\tcontinue\n\t\t}\n\n\t\tpp := strings.SplitN(s, \"=\", 2)\n\t\tif len(pp) == 1 {\n\t\t\topts[pp[0]] = \"\"\n\t\t} else {\n\t\t\topts[pp[0]] = pp[1]\n\t\t}\n\t}\n\treturn key, opts\n}\n\nfunc isArray(t reflect.Type) bool    { return t.Kind() == reflect.Array || t.Kind() == reflect.Slice }\nfunc isBool(t reflect.Type) bool     { return t.Kind() == reflect.Bool }\nfunc isDuration(t reflect.Type) bool { return t == reflect.TypeOf(time.Second) }\nfunc isMap(t reflect.Type) bool      { return t.Kind() == reflect.Map }\nfunc isPtr(t reflect.Type) bool      { return t.Kind() == reflect.Ptr }\nfunc isString(t reflect.Type) bool   { return t.Kind() == reflect.String }\nfunc isStruct(t reflect.Type) bool   { return t.Kind() == reflect.Struct }\nfunc isTime(t reflect.Type) bool     { return t == reflect.TypeOf(time.Time{}) }\nfunc isFloat(t reflect.Type) bool {\n\treturn t.Kind() == reflect.Float32 || t.Kind() == reflect.Float64\n}\nfunc isInt(t reflect.Type) bool {\n\treturn t.Kind() == reflect.Int || t.Kind() == reflect.Int8 || t.Kind() == reflect.Int16 || t.Kind() == reflect.Int32 || t.Kind() == reflect.Int64\n}\nfunc isUint(t reflect.Type) bool {\n\treturn t.Kind() == reflect.Uint || t.Kind() == reflect.Uint8 || t.Kind() == reflect.Uint16 || t.Kind() == reflect.Uint32 || t.Kind() == reflect.Uint64\n}\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/doc.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package properties provides functions for reading and writing\n// ISO-8859-1 and UTF-8 encoded .properties files and has\n// support for recursive property expansion.\n//\n// Java properties files are ISO-8859-1 encoded and use Unicode\n// literals for characters outside the ISO character set. Unicode\n// literals can be used in UTF-8 encoded properties files but\n// aren't necessary.\n//\n// To load a single properties file use MustLoadFile():\n//\n//\tp := properties.MustLoadFile(filename, properties.UTF8)\n//\n// To load multiple properties files use MustLoadFiles()\n// which loads the files in the given order and merges the\n// result. Missing properties files can be ignored if the\n// 'ignoreMissing' flag is set to true.\n//\n// Filenames can contain environment variables which are expanded\n// before loading.\n//\n//\tf1 := \"/etc/myapp/myapp.conf\"\n//\tf2 := \"/home/${USER}/myapp.conf\"\n//\tp := MustLoadFiles([]string{f1, f2}, properties.UTF8, true)\n//\n// All of the different key/value delimiters ' ', ':' and '=' are\n// supported as well as the comment characters '!' and '#' and\n// multi-line values.\n//\n//\t! this is a comment\n//\t# and so is this\n//\n//\t# the following expressions are equal\n//\tkey value\n//\tkey=value\n//\tkey:value\n//\tkey = value\n//\tkey : value\n//\tkey = val\\\n//\t      ue\n//\n// Properties stores all comments preceding a key and provides\n// GetComments() and SetComments() methods to retrieve and\n// update them. The convenience functions GetComment() and\n// SetComment() allow access to the last comment. The\n// WriteComment() method writes properties files including\n// the comments and with the keys in the original order.\n// This can be used for sanitizing properties files.\n//\n// Property expansion is recursive and circular references\n// and malformed expressions are not allowed and cause an\n// error. Expansion of environment variables is supported.\n//\n//\t# standard property\n//\tkey = value\n//\n//\t# property expansion: key2 = value\n//\tkey2 = ${key}\n//\n//\t# recursive expansion: key3 = value\n//\tkey3 = ${key2}\n//\n//\t# circular reference (error)\n//\tkey = ${key}\n//\n//\t# malformed expression (error)\n//\tkey = ${ke\n//\n//\t# refers to the users' home dir\n//\thome = ${HOME}\n//\n//\t# local key takes precedence over env var: u = foo\n//\tUSER = foo\n//\tu = ${USER}\n//\n// The default property expansion format is ${key} but can be\n// changed by setting different pre- and postfix values on the\n// Properties object.\n//\n//\tp := properties.NewProperties()\n//\tp.Prefix = \"#[\"\n//\tp.Postfix = \"]#\"\n//\n// Properties provides convenience functions for getting typed\n// values with default values if the key does not exist or the\n// type conversion failed.\n//\n//\t# Returns true if the value is either \"1\", \"on\", \"yes\" or \"true\"\n//\t# Returns false for every other value and the default value if\n//\t# the key does not exist.\n//\tv = p.GetBool(\"key\", false)\n//\n//\t# Returns the value if the key exists and the format conversion\n//\t# was successful. Otherwise, the default value is returned.\n//\tv = p.GetInt64(\"key\", 999)\n//\tv = p.GetUint64(\"key\", 999)\n//\tv = p.GetFloat64(\"key\", 123.0)\n//\tv = p.GetString(\"key\", \"def\")\n//\tv = p.GetDuration(\"key\", 999)\n//\n// As an alternative properties may be applied with the standard\n// library's flag implementation at any time.\n//\n//\t# Standard configuration\n//\tv = flag.Int(\"key\", 999, \"help message\")\n//\tflag.Parse()\n//\n//\t# Merge p into the flag set\n//\tp.MustFlag(flag.CommandLine)\n//\n// Properties provides several MustXXX() convenience functions\n// which will terminate the app if an error occurs. The behavior\n// of the failure is configurable and the default is to call\n// log.Fatal(err). To have the MustXXX() functions panic instead\n// of logging the error set a different ErrorHandler before\n// you use the Properties package.\n//\n//\tproperties.ErrorHandler = properties.PanicHandler\n//\n//\t# Will panic instead of logging an error\n//\tp := properties.MustLoadFile(\"config.properties\")\n//\n// You can also provide your own ErrorHandler function. The only requirement\n// is that the error handler function must exit after handling the error.\n//\n//\t  properties.ErrorHandler = func(err error) {\n//\t\t     fmt.Println(err)\n//\t      os.Exit(1)\n//\t  }\n//\n//\t  # Will write to stdout and then exit\n//\t  p := properties.MustLoadFile(\"config.properties\")\n//\n// Properties can also be loaded into a struct via the `Decode`\n// method, e.g.\n//\n//\ttype S struct {\n//\t    A string        `properties:\"a,default=foo\"`\n//\t    D time.Duration `properties:\"timeout,default=5s\"`\n//\t    E time.Time     `properties:\"expires,layout=2006-01-02,default=2015-01-01\"`\n//\t}\n//\n// See `Decode()` method for the full documentation.\n//\n// The following documents provide a description of the properties\n// file format.\n//\n// http://en.wikipedia.org/wiki/.properties\n//\n// http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html#load%28java.io.Reader%29\npackage properties\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/integrate.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage properties\n\nimport \"flag\"\n\n// MustFlag sets flags that are skipped by dst.Parse when p contains\n// the respective key for flag.Flag.Name.\n//\n// It's use is recommended with command line arguments as in:\n//\n//\tflag.Parse()\n//\tp.MustFlag(flag.CommandLine)\nfunc (p *Properties) MustFlag(dst *flag.FlagSet) {\n\tm := make(map[string]*flag.Flag)\n\tdst.VisitAll(func(f *flag.Flag) {\n\t\tm[f.Name] = f\n\t})\n\tdst.Visit(func(f *flag.Flag) {\n\t\tdelete(m, f.Name) // overridden\n\t})\n\n\tfor name, f := range m {\n\t\tv, ok := p.Get(name)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := f.Value.Set(v); err != nil {\n\t\t\tErrorHandler(err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/lex.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n//\n// Parts of the lexer are from the template/text/parser package\n// For these parts the following applies:\n//\n// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file of the go 1.2\n// distribution.\n\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// item represents a token or text string returned from the scanner.\ntype item struct {\n\ttyp itemType // The type of this item.\n\tpos int      // The starting position, in bytes, of this item in the input string.\n\tval string   // The value of this item.\n}\n\nfunc (i item) String() string {\n\tswitch {\n\tcase i.typ == itemEOF:\n\t\treturn \"EOF\"\n\tcase i.typ == itemError:\n\t\treturn i.val\n\tcase len(i.val) > 10:\n\t\treturn fmt.Sprintf(\"%.10q...\", i.val)\n\t}\n\treturn fmt.Sprintf(\"%q\", i.val)\n}\n\n// itemType identifies the type of lex items.\ntype itemType int\n\nconst (\n\titemError itemType = iota // error occurred; value is text of error\n\titemEOF\n\titemKey     // a key\n\titemValue   // a value\n\titemComment // a comment\n)\n\n// defines a constant for EOF\nconst eof = -1\n\n// permitted whitespace characters space, FF and TAB\nconst whitespace = \" \\f\\t\"\n\n// stateFn represents the state of the scanner as a function that returns the next state.\ntype stateFn func(*lexer) stateFn\n\n// lexer holds the state of the scanner.\ntype lexer struct {\n\tinput   string    // the string being scanned\n\tstate   stateFn   // the next lexing function to enter\n\tpos     int       // current position in the input\n\tstart   int       // start position of this item\n\twidth   int       // width of last rune read from input\n\tlastPos int       // position of most recent item returned by nextItem\n\trunes   []rune    // scanned runes for this item\n\titems   chan item // channel of scanned items\n}\n\n// next returns the next rune in the input.\nfunc (l *lexer) next() rune {\n\tif l.pos >= len(l.input) {\n\t\tl.width = 0\n\t\treturn eof\n\t}\n\tr, w := utf8.DecodeRuneInString(l.input[l.pos:])\n\tl.width = w\n\tl.pos += l.width\n\treturn r\n}\n\n// peek returns but does not consume the next rune in the input.\nfunc (l *lexer) peek() rune {\n\tr := l.next()\n\tl.backup()\n\treturn r\n}\n\n// backup steps back one rune. Can only be called once per call of next.\nfunc (l *lexer) backup() {\n\tl.pos -= l.width\n}\n\n// emit passes an item back to the client.\nfunc (l *lexer) emit(t itemType) {\n\ti := item{t, l.start, string(l.runes)}\n\tl.items <- i\n\tl.start = l.pos\n\tl.runes = l.runes[:0]\n}\n\n// ignore skips over the pending input before this point.\nfunc (l *lexer) ignore() {\n\tl.start = l.pos\n}\n\n// appends the rune to the current value\nfunc (l *lexer) appendRune(r rune) {\n\tl.runes = append(l.runes, r)\n}\n\n// accept consumes the next rune if it's from the valid set.\nfunc (l *lexer) accept(valid string) bool {\n\tif strings.ContainsRune(valid, l.next()) {\n\t\treturn true\n\t}\n\tl.backup()\n\treturn false\n}\n\n// acceptRun consumes a run of runes from the valid set.\nfunc (l *lexer) acceptRun(valid string) {\n\tfor strings.ContainsRune(valid, l.next()) {\n\t}\n\tl.backup()\n}\n\n// lineNumber reports which line we're on, based on the position of\n// the previous item returned by nextItem. Doing it this way\n// means we don't have to worry about peek double counting.\nfunc (l *lexer) lineNumber() int {\n\treturn 1 + strings.Count(l.input[:l.lastPos], \"\\n\")\n}\n\n// errorf returns an error token and terminates the scan by passing\n// back a nil pointer that will be the next state, terminating l.nextItem.\nfunc (l *lexer) errorf(format string, args ...interface{}) stateFn {\n\tl.items <- item{itemError, l.start, fmt.Sprintf(format, args...)}\n\treturn nil\n}\n\n// nextItem returns the next item from the input.\nfunc (l *lexer) nextItem() item {\n\ti := <-l.items\n\tl.lastPos = i.pos\n\treturn i\n}\n\n// lex creates a new scanner for the input string.\nfunc lex(input string) *lexer {\n\tl := &lexer{\n\t\tinput: input,\n\t\titems: make(chan item),\n\t\trunes: make([]rune, 0, 32),\n\t}\n\tgo l.run()\n\treturn l\n}\n\n// run runs the state machine for the lexer.\nfunc (l *lexer) run() {\n\tfor l.state = lexBeforeKey(l); l.state != nil; {\n\t\tl.state = l.state(l)\n\t}\n}\n\n// state functions\n\n// lexBeforeKey scans until a key begins.\nfunc lexBeforeKey(l *lexer) stateFn {\n\tswitch r := l.next(); {\n\tcase isEOF(r):\n\t\tl.emit(itemEOF)\n\t\treturn nil\n\n\tcase isEOL(r):\n\t\tl.ignore()\n\t\treturn lexBeforeKey\n\n\tcase isComment(r):\n\t\treturn lexComment\n\n\tcase isWhitespace(r):\n\t\tl.ignore()\n\t\treturn lexBeforeKey\n\n\tdefault:\n\t\tl.backup()\n\t\treturn lexKey\n\t}\n}\n\n// lexComment scans a comment line. The comment character has already been scanned.\nfunc lexComment(l *lexer) stateFn {\n\tl.acceptRun(whitespace)\n\tl.ignore()\n\tfor {\n\t\tswitch r := l.next(); {\n\t\tcase isEOF(r):\n\t\t\tl.ignore()\n\t\t\tl.emit(itemEOF)\n\t\t\treturn nil\n\t\tcase isEOL(r):\n\t\t\tl.emit(itemComment)\n\t\t\treturn lexBeforeKey\n\t\tdefault:\n\t\t\tl.appendRune(r)\n\t\t}\n\t}\n}\n\n// lexKey scans the key up to a delimiter\nfunc lexKey(l *lexer) stateFn {\n\tvar r rune\n\nLoop:\n\tfor {\n\t\tswitch r = l.next(); {\n\n\t\tcase isEscape(r):\n\t\t\terr := l.scanEscapeSequence()\n\t\t\tif err != nil {\n\t\t\t\treturn l.errorf(err.Error())\n\t\t\t}\n\n\t\tcase isEndOfKey(r):\n\t\t\tl.backup()\n\t\t\tbreak Loop\n\n\t\tcase isEOF(r):\n\t\t\tbreak Loop\n\n\t\tdefault:\n\t\t\tl.appendRune(r)\n\t\t}\n\t}\n\n\tif len(l.runes) > 0 {\n\t\tl.emit(itemKey)\n\t}\n\n\tif isEOF(r) {\n\t\tl.emit(itemEOF)\n\t\treturn nil\n\t}\n\n\treturn lexBeforeValue\n}\n\n// lexBeforeValue scans the delimiter between key and value.\n// Leading and trailing whitespace is ignored.\n// We expect to be just after the key.\nfunc lexBeforeValue(l *lexer) stateFn {\n\tl.acceptRun(whitespace)\n\tl.accept(\":=\")\n\tl.acceptRun(whitespace)\n\tl.ignore()\n\treturn lexValue\n}\n\n// lexValue scans text until the end of the line. We expect to be just after the delimiter.\nfunc lexValue(l *lexer) stateFn {\n\tfor {\n\t\tswitch r := l.next(); {\n\t\tcase isEscape(r):\n\t\t\tif isEOL(l.peek()) {\n\t\t\t\tl.next()\n\t\t\t\tl.acceptRun(whitespace)\n\t\t\t} else {\n\t\t\t\terr := l.scanEscapeSequence()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn l.errorf(err.Error())\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase isEOL(r):\n\t\t\tl.emit(itemValue)\n\t\t\tl.ignore()\n\t\t\treturn lexBeforeKey\n\n\t\tcase isEOF(r):\n\t\t\tl.emit(itemValue)\n\t\t\tl.emit(itemEOF)\n\t\t\treturn nil\n\n\t\tdefault:\n\t\t\tl.appendRune(r)\n\t\t}\n\t}\n}\n\n// scanEscapeSequence scans either one of the escaped characters\n// or a unicode literal. We expect to be after the escape character.\nfunc (l *lexer) scanEscapeSequence() error {\n\tswitch r := l.next(); {\n\n\tcase isEscapedCharacter(r):\n\t\tl.appendRune(decodeEscapedCharacter(r))\n\t\treturn nil\n\n\tcase atUnicodeLiteral(r):\n\t\treturn l.scanUnicodeLiteral()\n\n\tcase isEOF(r):\n\t\treturn fmt.Errorf(\"premature EOF\")\n\n\t// silently drop the escape character and append the rune as is\n\tdefault:\n\t\tl.appendRune(r)\n\t\treturn nil\n\t}\n}\n\n// scans a unicode literal in the form \\uXXXX. We expect to be after the \\u.\nfunc (l *lexer) scanUnicodeLiteral() error {\n\t// scan the digits\n\td := make([]rune, 4)\n\tfor i := 0; i < 4; i++ {\n\t\td[i] = l.next()\n\t\tif d[i] == eof || !strings.ContainsRune(\"0123456789abcdefABCDEF\", d[i]) {\n\t\t\treturn fmt.Errorf(\"invalid unicode literal\")\n\t\t}\n\t}\n\n\t// decode the digits into a rune\n\tr, err := strconv.ParseInt(string(d), 16, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tl.appendRune(rune(r))\n\treturn nil\n}\n\n// decodeEscapedCharacter returns the unescaped rune. We expect to be after the escape character.\nfunc decodeEscapedCharacter(r rune) rune {\n\tswitch r {\n\tcase 'f':\n\t\treturn '\\f'\n\tcase 'n':\n\t\treturn '\\n'\n\tcase 'r':\n\t\treturn '\\r'\n\tcase 't':\n\t\treturn '\\t'\n\tdefault:\n\t\treturn r\n\t}\n}\n\n// atUnicodeLiteral reports whether we are at a unicode literal.\n// The escape character has already been consumed.\nfunc atUnicodeLiteral(r rune) bool {\n\treturn r == 'u'\n}\n\n// isComment reports whether we are at the start of a comment.\nfunc isComment(r rune) bool {\n\treturn r == '#' || r == '!'\n}\n\n// isEndOfKey reports whether the rune terminates the current key.\nfunc isEndOfKey(r rune) bool {\n\treturn strings.ContainsRune(\" \\f\\t\\r\\n:=\", r)\n}\n\n// isEOF reports whether we are at EOF.\nfunc isEOF(r rune) bool {\n\treturn r == eof\n}\n\n// isEOL reports whether we are at a new line character.\nfunc isEOL(r rune) bool {\n\treturn r == '\\n' || r == '\\r'\n}\n\n// isEscape reports whether the rune is the escape character which\n// prefixes unicode literals and other escaped characters.\nfunc isEscape(r rune) bool {\n\treturn r == '\\\\'\n}\n\n// isEscapedCharacter reports whether we are at one of the characters that need escaping.\n// The escape character has already been consumed.\nfunc isEscapedCharacter(r rune) bool {\n\treturn strings.ContainsRune(\" :=fnrt\", r)\n}\n\n// isWhitespace reports whether the rune is a whitespace character.\nfunc isWhitespace(r rune) bool {\n\treturn strings.ContainsRune(whitespace, r)\n}\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/load.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n)\n\n// Encoding specifies encoding of the input data.\ntype Encoding uint\n\nconst (\n\t// utf8Default is a private placeholder for the zero value of Encoding to\n\t// ensure that it has the correct meaning. UTF8 is the default encoding but\n\t// was assigned a non-zero value which cannot be changed without breaking\n\t// existing code. Clients should continue to use the public constants.\n\tutf8Default Encoding = iota\n\n\t// UTF8 interprets the input data as UTF-8.\n\tUTF8\n\n\t// ISO_8859_1 interprets the input data as ISO-8859-1.\n\tISO_8859_1\n)\n\ntype Loader struct {\n\t// Encoding determines how the data from files and byte buffers\n\t// is interpreted. For URLs the Content-Type header is used\n\t// to determine the encoding of the data.\n\tEncoding Encoding\n\n\t// DisableExpansion configures the property expansion of the\n\t// returned property object. When set to true, the property values\n\t// will not be expanded and the Property object will not be checked\n\t// for invalid expansion expressions.\n\tDisableExpansion bool\n\n\t// IgnoreMissing configures whether missing files or URLs which return\n\t// 404 are reported as errors. When set to true, missing files and 404\n\t// status codes are not reported as errors.\n\tIgnoreMissing bool\n}\n\n// Load reads a buffer into a Properties struct.\nfunc (l *Loader) LoadBytes(buf []byte) (*Properties, error) {\n\treturn l.loadBytes(buf, l.Encoding)\n}\n\n// LoadReader reads an io.Reader into a Properties struct.\nfunc (l *Loader) LoadReader(r io.Reader) (*Properties, error) {\n\tif buf, err := io.ReadAll(r); err != nil {\n\t\treturn nil, err\n\t} else {\n\t\treturn l.loadBytes(buf, l.Encoding)\n\t}\n}\n\n// LoadAll reads the content of multiple URLs or files in the given order into\n// a Properties struct. If IgnoreMissing is true then a 404 status code or\n// missing file will not be reported as error. Encoding sets the encoding for\n// files. For the URLs see LoadURL for the Content-Type header and the\n// encoding.\nfunc (l *Loader) LoadAll(names []string) (*Properties, error) {\n\tall := NewProperties()\n\tfor _, name := range names {\n\t\tn, err := expandName(name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar p *Properties\n\t\tswitch {\n\t\tcase strings.HasPrefix(n, \"http://\"):\n\t\t\tp, err = l.LoadURL(n)\n\t\tcase strings.HasPrefix(n, \"https://\"):\n\t\t\tp, err = l.LoadURL(n)\n\t\tdefault:\n\t\t\tp, err = l.LoadFile(n)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tall.Merge(p)\n\t}\n\n\tall.DisableExpansion = l.DisableExpansion\n\tif all.DisableExpansion {\n\t\treturn all, nil\n\t}\n\treturn all, all.check()\n}\n\n// LoadFile reads a file into a Properties struct.\n// If IgnoreMissing is true then a missing file will not be\n// reported as error.\nfunc (l *Loader) LoadFile(filename string) (*Properties, error) {\n\tdata, err := os.ReadFile(filename)\n\tif err != nil {\n\t\tif l.IgnoreMissing && os.IsNotExist(err) {\n\t\t\tLogPrintf(\"properties: %s not found. skipping\", filename)\n\t\t\treturn NewProperties(), nil\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn l.loadBytes(data, l.Encoding)\n}\n\n// LoadURL reads the content of the URL into a Properties struct.\n//\n// The encoding is determined via the Content-Type header which\n// should be set to 'text/plain'. If the 'charset' parameter is\n// missing, 'iso-8859-1' or 'latin1' the encoding is set to\n// ISO-8859-1. If the 'charset' parameter is set to 'utf-8' the\n// encoding is set to UTF-8. A missing content type header is\n// interpreted as 'text/plain; charset=utf-8'.\nfunc (l *Loader) LoadURL(url string) (*Properties, error) {\n\tresp, err := http.Get(url)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"properties: error fetching %q. %s\", url, err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode == 404 && l.IgnoreMissing {\n\t\tLogPrintf(\"properties: %s returned %d. skipping\", url, resp.StatusCode)\n\t\treturn NewProperties(), nil\n\t}\n\n\tif resp.StatusCode != 200 {\n\t\treturn nil, fmt.Errorf(\"properties: %s returned %d\", url, resp.StatusCode)\n\t}\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"properties: %s error reading response. %s\", url, err)\n\t}\n\n\tct := resp.Header.Get(\"Content-Type\")\n\tct = strings.Join(strings.Fields(ct), \"\")\n\tvar enc Encoding\n\tswitch strings.ToLower(ct) {\n\tcase \"text/plain\", \"text/plain;charset=iso-8859-1\", \"text/plain;charset=latin1\":\n\t\tenc = ISO_8859_1\n\tcase \"\", \"text/plain;charset=utf-8\":\n\t\tenc = UTF8\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"properties: invalid content type %s\", ct)\n\t}\n\n\treturn l.loadBytes(body, enc)\n}\n\nfunc (l *Loader) loadBytes(buf []byte, enc Encoding) (*Properties, error) {\n\tp, err := parse(convert(buf, enc))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp.DisableExpansion = l.DisableExpansion\n\tif p.DisableExpansion {\n\t\treturn p, nil\n\t}\n\treturn p, p.check()\n}\n\n// Load reads a buffer into a Properties struct.\nfunc Load(buf []byte, enc Encoding) (*Properties, error) {\n\tl := &Loader{Encoding: enc}\n\treturn l.LoadBytes(buf)\n}\n\n// LoadString reads an UTF8 string into a properties struct.\nfunc LoadString(s string) (*Properties, error) {\n\tl := &Loader{Encoding: UTF8}\n\treturn l.LoadBytes([]byte(s))\n}\n\n// LoadMap creates a new Properties struct from a string map.\nfunc LoadMap(m map[string]string) *Properties {\n\tp := NewProperties()\n\tfor k, v := range m {\n\t\tp.Set(k, v)\n\t}\n\treturn p\n}\n\n// LoadFile reads a file into a Properties struct.\nfunc LoadFile(filename string, enc Encoding) (*Properties, error) {\n\tl := &Loader{Encoding: enc}\n\treturn l.LoadAll([]string{filename})\n}\n\n// LoadReader reads an io.Reader into a Properties struct.\nfunc LoadReader(r io.Reader, enc Encoding) (*Properties, error) {\n\tl := &Loader{Encoding: enc}\n\treturn l.LoadReader(r)\n}\n\n// LoadFiles reads multiple files in the given order into\n// a Properties struct. If 'ignoreMissing' is true then\n// non-existent files will not be reported as error.\nfunc LoadFiles(filenames []string, enc Encoding, ignoreMissing bool) (*Properties, error) {\n\tl := &Loader{Encoding: enc, IgnoreMissing: ignoreMissing}\n\treturn l.LoadAll(filenames)\n}\n\n// LoadURL reads the content of the URL into a Properties struct.\n// See Loader#LoadURL for details.\nfunc LoadURL(url string) (*Properties, error) {\n\tl := &Loader{Encoding: UTF8}\n\treturn l.LoadAll([]string{url})\n}\n\n// LoadURLs reads the content of multiple URLs in the given order into a\n// Properties struct. If IgnoreMissing is true then a 404 status code will\n// not be reported as error. See Loader#LoadURL for the Content-Type header\n// and the encoding.\nfunc LoadURLs(urls []string, ignoreMissing bool) (*Properties, error) {\n\tl := &Loader{Encoding: UTF8, IgnoreMissing: ignoreMissing}\n\treturn l.LoadAll(urls)\n}\n\n// LoadAll reads the content of multiple URLs or files in the given order into a\n// Properties struct. If 'ignoreMissing' is true then a 404 status code or missing file will\n// not be reported as error. Encoding sets the encoding for files. For the URLs please see\n// LoadURL for the Content-Type header and the encoding.\nfunc LoadAll(names []string, enc Encoding, ignoreMissing bool) (*Properties, error) {\n\tl := &Loader{Encoding: enc, IgnoreMissing: ignoreMissing}\n\treturn l.LoadAll(names)\n}\n\n// MustLoadString reads an UTF8 string into a Properties struct and\n// panics on error.\nfunc MustLoadString(s string) *Properties {\n\treturn must(LoadString(s))\n}\n\n// MustLoadSReader reads an io.Reader into a Properties struct and\n// panics on error.\nfunc MustLoadReader(r io.Reader, enc Encoding) *Properties {\n\treturn must(LoadReader(r, enc))\n}\n\n// MustLoadFile reads a file into a Properties struct and\n// panics on error.\nfunc MustLoadFile(filename string, enc Encoding) *Properties {\n\treturn must(LoadFile(filename, enc))\n}\n\n// MustLoadFiles reads multiple files in the given order into\n// a Properties struct and panics on error. If 'ignoreMissing'\n// is true then non-existent files will not be reported as error.\nfunc MustLoadFiles(filenames []string, enc Encoding, ignoreMissing bool) *Properties {\n\treturn must(LoadFiles(filenames, enc, ignoreMissing))\n}\n\n// MustLoadURL reads the content of a URL into a Properties struct and\n// panics on error.\nfunc MustLoadURL(url string) *Properties {\n\treturn must(LoadURL(url))\n}\n\n// MustLoadURLs reads the content of multiple URLs in the given order into a\n// Properties struct and panics on error. If 'ignoreMissing' is true then a 404\n// status code will not be reported as error.\nfunc MustLoadURLs(urls []string, ignoreMissing bool) *Properties {\n\treturn must(LoadURLs(urls, ignoreMissing))\n}\n\n// MustLoadAll reads the content of multiple URLs or files in the given order into a\n// Properties struct. If 'ignoreMissing' is true then a 404 status code or missing file will\n// not be reported as error. Encoding sets the encoding for files. For the URLs please see\n// LoadURL for the Content-Type header and the encoding. It panics on error.\nfunc MustLoadAll(names []string, enc Encoding, ignoreMissing bool) *Properties {\n\treturn must(LoadAll(names, enc, ignoreMissing))\n}\n\nfunc must(p *Properties, err error) *Properties {\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn p\n}\n\n// expandName expands ${ENV_VAR} expressions in a name.\n// If the environment variable does not exist then it will be replaced\n// with an empty string. Malformed expressions like \"${ENV_VAR\" will\n// be reported as error.\nfunc expandName(name string) (string, error) {\n\treturn expand(name, []string{}, \"${\", \"}\", make(map[string]string))\n}\n\n// Interprets a byte buffer either as an ISO-8859-1 or UTF-8 encoded string.\n// For ISO-8859-1 we can convert each byte straight into a rune since the\n// first 256 unicode code points cover ISO-8859-1.\nfunc convert(buf []byte, enc Encoding) string {\n\tswitch enc {\n\tcase utf8Default, UTF8:\n\t\treturn string(buf)\n\tcase ISO_8859_1:\n\t\trunes := make([]rune, len(buf))\n\t\tfor i, b := range buf {\n\t\t\trunes[i] = rune(b)\n\t\t}\n\t\treturn string(runes)\n\tdefault:\n\t\tErrorHandler(fmt.Errorf(\"unsupported encoding %v\", enc))\n\t}\n\tpanic(\"ErrorHandler should exit\")\n}\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/parser.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype parser struct {\n\tlex *lexer\n}\n\nfunc parse(input string) (properties *Properties, err error) {\n\tp := &parser{lex: lex(input)}\n\tdefer p.recover(&err)\n\n\tproperties = NewProperties()\n\tkey := \"\"\n\tcomments := []string{}\n\n\tfor {\n\t\ttoken := p.expectOneOf(itemComment, itemKey, itemEOF)\n\t\tswitch token.typ {\n\t\tcase itemEOF:\n\t\t\tgoto done\n\t\tcase itemComment:\n\t\t\tcomments = append(comments, token.val)\n\t\t\tcontinue\n\t\tcase itemKey:\n\t\t\tkey = token.val\n\t\t\tif _, ok := properties.m[key]; !ok {\n\t\t\t\tproperties.k = append(properties.k, key)\n\t\t\t}\n\t\t}\n\n\t\ttoken = p.expectOneOf(itemValue, itemEOF)\n\t\tif len(comments) > 0 {\n\t\t\tproperties.c[key] = comments\n\t\t\tcomments = []string{}\n\t\t}\n\t\tswitch token.typ {\n\t\tcase itemEOF:\n\t\t\tproperties.m[key] = \"\"\n\t\t\tgoto done\n\t\tcase itemValue:\n\t\t\tproperties.m[key] = token.val\n\t\t}\n\t}\n\ndone:\n\treturn properties, nil\n}\n\nfunc (p *parser) errorf(format string, args ...interface{}) {\n\tformat = fmt.Sprintf(\"properties: Line %d: %s\", p.lex.lineNumber(), format)\n\tpanic(fmt.Errorf(format, args...))\n}\n\nfunc (p *parser) expectOneOf(expected ...itemType) (token item) {\n\ttoken = p.lex.nextItem()\n\tfor _, v := range expected {\n\t\tif token.typ == v {\n\t\t\treturn token\n\t\t}\n\t}\n\tp.unexpected(token)\n\tpanic(\"unexpected token\")\n}\n\nfunc (p *parser) unexpected(token item) {\n\tp.errorf(token.String())\n}\n\n// recover is the handler that turns panics into returns from the top level of Parse.\nfunc (p *parser) recover(errp *error) {\n\te := recover()\n\tif e != nil {\n\t\tif _, ok := e.(runtime.Error); ok {\n\t\t\tpanic(e)\n\t\t}\n\t\t*errp = e.(error)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/properties.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage properties\n\n// BUG(frank): Set() does not check for invalid unicode literals since this is currently handled by the lexer.\n// BUG(frank): Write() does not allow to configure the newline character. Therefore, on Windows LF is used.\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\nconst maxExpansionDepth = 64\n\n// ErrorHandlerFunc defines the type of function which handles failures\n// of the MustXXX() functions. An error handler function must exit\n// the application after handling the error.\ntype ErrorHandlerFunc func(error)\n\n// ErrorHandler is the function which handles failures of the MustXXX()\n// functions. The default is LogFatalHandler.\nvar ErrorHandler ErrorHandlerFunc = LogFatalHandler\n\n// LogHandlerFunc defines the function prototype for logging errors.\ntype LogHandlerFunc func(fmt string, args ...interface{})\n\n// LogPrintf defines a log handler which uses log.Printf.\nvar LogPrintf LogHandlerFunc = log.Printf\n\n// LogFatalHandler handles the error by logging a fatal error and exiting.\nfunc LogFatalHandler(err error) {\n\tlog.Fatal(err)\n}\n\n// PanicHandler handles the error by panicking.\nfunc PanicHandler(err error) {\n\tpanic(err)\n}\n\n// -----------------------------------------------------------------------------\n\n// A Properties contains the key/value pairs from the properties input.\n// All values are stored in unexpanded form and are expanded at runtime\ntype Properties struct {\n\t// Pre-/Postfix for property expansion.\n\tPrefix  string\n\tPostfix string\n\n\t// DisableExpansion controls the expansion of properties on Get()\n\t// and the check for circular references on Set(). When set to\n\t// true Properties behaves like a simple key/value store and does\n\t// not check for circular references on Get() or on Set().\n\tDisableExpansion bool\n\n\t// Stores the key/value pairs\n\tm map[string]string\n\n\t// Stores the comments per key.\n\tc map[string][]string\n\n\t// Stores the keys in order of appearance.\n\tk []string\n\n\t// WriteSeparator specifies the separator of key and value while writing the properties.\n\tWriteSeparator string\n}\n\n// NewProperties creates a new Properties struct with the default\n// configuration for \"${key}\" expressions.\nfunc NewProperties() *Properties {\n\treturn &Properties{\n\t\tPrefix:  \"${\",\n\t\tPostfix: \"}\",\n\t\tm:       map[string]string{},\n\t\tc:       map[string][]string{},\n\t\tk:       []string{},\n\t}\n}\n\n// Load reads a buffer into the given Properties struct.\nfunc (p *Properties) Load(buf []byte, enc Encoding) error {\n\tl := &Loader{Encoding: enc, DisableExpansion: p.DisableExpansion}\n\tnewProperties, err := l.LoadBytes(buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.Merge(newProperties)\n\treturn nil\n}\n\n// Get returns the expanded value for the given key if exists.\n// Otherwise, ok is false.\nfunc (p *Properties) Get(key string) (value string, ok bool) {\n\tv, ok := p.m[key]\n\tif p.DisableExpansion {\n\t\treturn v, ok\n\t}\n\tif !ok {\n\t\treturn \"\", false\n\t}\n\n\texpanded, err := p.expand(key, v)\n\n\t// we guarantee that the expanded value is free of\n\t// circular references and malformed expressions\n\t// so we panic if we still get an error here.\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\n\treturn expanded, true\n}\n\n// MustGet returns the expanded value for the given key if exists.\n// Otherwise, it panics.\nfunc (p *Properties) MustGet(key string) string {\n\tif v, ok := p.Get(key); ok {\n\t\treturn v\n\t}\n\tErrorHandler(invalidKeyError(key))\n\tpanic(\"ErrorHandler should exit\")\n}\n\n// ----------------------------------------------------------------------------\n\n// ClearComments removes the comments for all keys.\nfunc (p *Properties) ClearComments() {\n\tp.c = map[string][]string{}\n}\n\n// ----------------------------------------------------------------------------\n\n// GetComment returns the last comment before the given key or an empty string.\nfunc (p *Properties) GetComment(key string) string {\n\tcomments, ok := p.c[key]\n\tif !ok || len(comments) == 0 {\n\t\treturn \"\"\n\t}\n\treturn comments[len(comments)-1]\n}\n\n// ----------------------------------------------------------------------------\n\n// GetComments returns all comments that appeared before the given key or nil.\nfunc (p *Properties) GetComments(key string) []string {\n\tif comments, ok := p.c[key]; ok {\n\t\treturn comments\n\t}\n\treturn nil\n}\n\n// ----------------------------------------------------------------------------\n\n// SetComment sets the comment for the key.\nfunc (p *Properties) SetComment(key, comment string) {\n\tp.c[key] = []string{comment}\n}\n\n// ----------------------------------------------------------------------------\n\n// SetComments sets the comments for the key. If the comments are nil then\n// all comments for this key are deleted.\nfunc (p *Properties) SetComments(key string, comments []string) {\n\tif comments == nil {\n\t\tdelete(p.c, key)\n\t\treturn\n\t}\n\tp.c[key] = comments\n}\n\n// ----------------------------------------------------------------------------\n\n// GetBool checks if the expanded value is one of '1', 'yes',\n// 'true' or 'on' if the key exists. The comparison is case-insensitive.\n// If the key does not exist the default value is returned.\nfunc (p *Properties) GetBool(key string, def bool) bool {\n\tv, err := p.getBool(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetBool checks if the expanded value is one of '1', 'yes',\n// 'true' or 'on' if the key exists. The comparison is case-insensitive.\n// If the key does not exist the function panics.\nfunc (p *Properties) MustGetBool(key string) bool {\n\tv, err := p.getBool(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getBool(key string) (value bool, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\treturn boolVal(v), nil\n\t}\n\treturn false, invalidKeyError(key)\n}\n\nfunc boolVal(v string) bool {\n\tv = strings.ToLower(v)\n\treturn v == \"1\" || v == \"true\" || v == \"yes\" || v == \"on\"\n}\n\n// ----------------------------------------------------------------------------\n\n// GetDuration parses the expanded value as an time.Duration (in ns) if the\n// key exists. If key does not exist or the value cannot be parsed the default\n// value is returned. In almost all cases you want to use GetParsedDuration().\nfunc (p *Properties) GetDuration(key string, def time.Duration) time.Duration {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn time.Duration(v)\n}\n\n// MustGetDuration parses the expanded value as an time.Duration (in ns) if\n// the key exists. If key does not exist or the value cannot be parsed the\n// function panics. In almost all cases you want to use MustGetParsedDuration().\nfunc (p *Properties) MustGetDuration(key string) time.Duration {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn time.Duration(v)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetParsedDuration(key string, def time.Duration) time.Duration {\n\ts, ok := p.Get(key)\n\tif !ok {\n\t\treturn def\n\t}\n\tv, err := time.ParseDuration(s)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetParsedDuration parses the expanded value with time.ParseDuration() if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetParsedDuration(key string) time.Duration {\n\ts, ok := p.Get(key)\n\tif !ok {\n\t\tErrorHandler(invalidKeyError(key))\n\t}\n\tv, err := time.ParseDuration(s)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\n// ----------------------------------------------------------------------------\n\n// GetFloat64 parses the expanded value as a float64 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetFloat64(key string, def float64) float64 {\n\tv, err := p.getFloat64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetFloat64 parses the expanded value as a float64 if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetFloat64(key string) float64 {\n\tv, err := p.getFloat64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getFloat64(key string) (value float64, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tvalue, err = strconv.ParseFloat(v, 64)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn value, nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetFloat32 parses the expanded value as a float32 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetFloat32(key string, def float32) float32 {\n\tv, err := p.getFloat32(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetFloat32 parses the expanded value as a float32 if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetFloat32(key string) float32 {\n\tv, err := p.getFloat32(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getFloat32(key string) (value float32, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tn, err := strconv.ParseFloat(v, 32)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn float32(n), nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetInt parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned. If the value does not fit into an int the\n// function panics with an out of range error.\nfunc (p *Properties) GetInt(key string, def int) int {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn intRangeCheck(key, v)\n}\n\n// MustGetInt parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\n// If the value does not fit into an int the function panics with\n// an out of range error.\nfunc (p *Properties) MustGetInt(key string) int {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn intRangeCheck(key, v)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetInt64 parses the expanded value as an int64 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetInt64(key string, def int64) int64 {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetInt64 parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetInt64(key string) int64 {\n\tv, err := p.getInt64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getInt64(key string) (value int64, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tvalue, err = strconv.ParseInt(v, 10, 64)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn value, nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetInt32 parses the expanded value as an int32 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetInt32(key string, def int32) int32 {\n\tv, err := p.getInt32(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetInt32 parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetInt32(key string) int32 {\n\tv, err := p.getInt32(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getInt32(key string) (value int32, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tn, err := strconv.ParseInt(v, 10, 32)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn int32(n), nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetUint parses the expanded value as an uint if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned. If the value does not fit into an int the\n// function panics with an out of range error.\nfunc (p *Properties) GetUint(key string, def uint) uint {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn uintRangeCheck(key, v)\n}\n\n// MustGetUint parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\n// If the value does not fit into an int the function panics with\n// an out of range error.\nfunc (p *Properties) MustGetUint(key string) uint {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn uintRangeCheck(key, v)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetUint64 parses the expanded value as an uint64 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetUint64(key string, def uint64) uint64 {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetUint64 parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetUint64(key string) uint64 {\n\tv, err := p.getUint64(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getUint64(key string) (value uint64, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tvalue, err = strconv.ParseUint(v, 10, 64)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn value, nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetUint32 parses the expanded value as an uint32 if the key exists.\n// If key does not exist or the value cannot be parsed the default\n// value is returned.\nfunc (p *Properties) GetUint32(key string, def uint32) uint32 {\n\tv, err := p.getUint32(key)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn v\n}\n\n// MustGetUint32 parses the expanded value as an int if the key exists.\n// If key does not exist or the value cannot be parsed the function panics.\nfunc (p *Properties) MustGetUint32(key string) uint32 {\n\tv, err := p.getUint32(key)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn v\n}\n\nfunc (p *Properties) getUint32(key string) (value uint32, err error) {\n\tif v, ok := p.Get(key); ok {\n\t\tn, err := strconv.ParseUint(v, 10, 32)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn uint32(n), nil\n\t}\n\treturn 0, invalidKeyError(key)\n}\n\n// ----------------------------------------------------------------------------\n\n// GetString returns the expanded value for the given key if exists or\n// the default value otherwise.\nfunc (p *Properties) GetString(key, def string) string {\n\tif v, ok := p.Get(key); ok {\n\t\treturn v\n\t}\n\treturn def\n}\n\n// MustGetString returns the expanded value for the given key if exists or\n// panics otherwise.\nfunc (p *Properties) MustGetString(key string) string {\n\tif v, ok := p.Get(key); ok {\n\t\treturn v\n\t}\n\tErrorHandler(invalidKeyError(key))\n\tpanic(\"ErrorHandler should exit\")\n}\n\n// ----------------------------------------------------------------------------\n\n// Filter returns a new properties object which contains all properties\n// for which the key matches the pattern.\nfunc (p *Properties) Filter(pattern string) (*Properties, error) {\n\tre, err := regexp.Compile(pattern)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn p.FilterRegexp(re), nil\n}\n\n// FilterRegexp returns a new properties object which contains all properties\n// for which the key matches the regular expression.\nfunc (p *Properties) FilterRegexp(re *regexp.Regexp) *Properties {\n\tpp := NewProperties()\n\tfor _, k := range p.k {\n\t\tif re.MatchString(k) {\n\t\t\t// TODO(fs): we are ignoring the error which flags a circular reference.\n\t\t\t// TODO(fs): since we are just copying a subset of keys this cannot happen (fingers crossed)\n\t\t\tpp.Set(k, p.m[k])\n\t\t}\n\t}\n\treturn pp\n}\n\n// FilterPrefix returns a new properties object with a subset of all keys\n// with the given prefix.\nfunc (p *Properties) FilterPrefix(prefix string) *Properties {\n\tpp := NewProperties()\n\tfor _, k := range p.k {\n\t\tif strings.HasPrefix(k, prefix) {\n\t\t\t// TODO(fs): we are ignoring the error which flags a circular reference.\n\t\t\t// TODO(fs): since we are just copying a subset of keys this cannot happen (fingers crossed)\n\t\t\tpp.Set(k, p.m[k])\n\t\t}\n\t}\n\treturn pp\n}\n\n// FilterStripPrefix returns a new properties object with a subset of all keys\n// with the given prefix and the prefix removed from the keys.\nfunc (p *Properties) FilterStripPrefix(prefix string) *Properties {\n\tpp := NewProperties()\n\tn := len(prefix)\n\tfor _, k := range p.k {\n\t\tif len(k) > len(prefix) && strings.HasPrefix(k, prefix) {\n\t\t\t// TODO(fs): we are ignoring the error which flags a circular reference.\n\t\t\t// TODO(fs): since we are modifying keys I am not entirely sure whether we can create a circular reference\n\t\t\t// TODO(fs): this function should probably return an error but the signature is fixed\n\t\t\tpp.Set(k[n:], p.m[k])\n\t\t}\n\t}\n\treturn pp\n}\n\n// Len returns the number of keys.\nfunc (p *Properties) Len() int {\n\treturn len(p.m)\n}\n\n// Keys returns all keys in the same order as in the input.\nfunc (p *Properties) Keys() []string {\n\tkeys := make([]string, len(p.k))\n\tcopy(keys, p.k)\n\treturn keys\n}\n\n// Set sets the property key to the corresponding value.\n// If a value for key existed before then ok is true and prev\n// contains the previous value. If the value contains a\n// circular reference or a malformed expression then\n// an error is returned.\n// An empty key is silently ignored.\nfunc (p *Properties) Set(key, value string) (prev string, ok bool, err error) {\n\tif key == \"\" {\n\t\treturn \"\", false, nil\n\t}\n\n\t// if expansion is disabled we allow circular references\n\tif p.DisableExpansion {\n\t\tprev, ok = p.Get(key)\n\t\tp.m[key] = value\n\t\tif !ok {\n\t\t\tp.k = append(p.k, key)\n\t\t}\n\t\treturn prev, ok, nil\n\t}\n\n\t// to check for a circular reference we temporarily need\n\t// to set the new value. If there is an error then revert\n\t// to the previous state. Only if all tests are successful\n\t// then we add the key to the p.k list.\n\tprev, ok = p.Get(key)\n\tp.m[key] = value\n\n\t// now check for a circular reference\n\t_, err = p.expand(key, value)\n\tif err != nil {\n\n\t\t// revert to the previous state\n\t\tif ok {\n\t\t\tp.m[key] = prev\n\t\t} else {\n\t\t\tdelete(p.m, key)\n\t\t}\n\n\t\treturn \"\", false, err\n\t}\n\n\tif !ok {\n\t\tp.k = append(p.k, key)\n\t}\n\n\treturn prev, ok, nil\n}\n\n// SetValue sets property key to the default string value\n// as defined by fmt.Sprintf(\"%v\").\nfunc (p *Properties) SetValue(key string, value interface{}) error {\n\t_, _, err := p.Set(key, fmt.Sprintf(\"%v\", value))\n\treturn err\n}\n\n// MustSet sets the property key to the corresponding value.\n// If a value for key existed before then ok is true and prev\n// contains the previous value. An empty key is silently ignored.\nfunc (p *Properties) MustSet(key, value string) (prev string, ok bool) {\n\tprev, ok, err := p.Set(key, value)\n\tif err != nil {\n\t\tErrorHandler(err)\n\t}\n\treturn prev, ok\n}\n\n// String returns a string of all expanded 'key = value' pairs.\nfunc (p *Properties) String() string {\n\tvar s string\n\tfor _, key := range p.k {\n\t\tvalue, _ := p.Get(key)\n\t\ts = fmt.Sprintf(\"%s%s = %s\\n\", s, key, value)\n\t}\n\treturn s\n}\n\n// Sort sorts the properties keys in alphabetical order.\n// This is helpfully before writing the properties.\nfunc (p *Properties) Sort() {\n\tsort.Strings(p.k)\n}\n\n// Write writes all unexpanded 'key = value' pairs to the given writer.\n// Write returns the number of bytes written and any write error encountered.\nfunc (p *Properties) Write(w io.Writer, enc Encoding) (n int, err error) {\n\treturn p.WriteComment(w, \"\", enc)\n}\n\n// WriteComment writes all unexpanced 'key = value' pairs to the given writer.\n// If prefix is not empty then comments are written with a blank line and the\n// given prefix. The prefix should be either \"# \" or \"! \" to be compatible with\n// the properties file format. Otherwise, the properties parser will not be\n// able to read the file back in. It returns the number of bytes written and\n// any write error encountered.\nfunc (p *Properties) WriteComment(w io.Writer, prefix string, enc Encoding) (n int, err error) {\n\tvar x int\n\n\tfor _, key := range p.k {\n\t\tvalue := p.m[key]\n\n\t\tif prefix != \"\" {\n\t\t\tif comments, ok := p.c[key]; ok {\n\t\t\t\t// don't print comments if they are all empty\n\t\t\t\tallEmpty := true\n\t\t\t\tfor _, c := range comments {\n\t\t\t\t\tif c != \"\" {\n\t\t\t\t\t\tallEmpty = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif !allEmpty {\n\t\t\t\t\t// add a blank line between entries but not at the top\n\t\t\t\t\tif len(comments) > 0 && n > 0 {\n\t\t\t\t\t\tx, err = fmt.Fprintln(w)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += x\n\t\t\t\t\t}\n\n\t\t\t\t\tfor _, c := range comments {\n\t\t\t\t\t\tx, err = fmt.Fprintf(w, \"%s%s\\n\", prefix, c)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += x\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsep := \" = \"\n\t\tif p.WriteSeparator != \"\" {\n\t\t\tsep = p.WriteSeparator\n\t\t}\n\t\tx, err = fmt.Fprintf(w, \"%s%s%s\\n\", encode(key, \" :\", enc), sep, encode(value, \"\", enc))\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tn += x\n\t}\n\treturn\n}\n\n// Map returns a copy of the properties as a map.\nfunc (p *Properties) Map() map[string]string {\n\tm := make(map[string]string)\n\tfor k, v := range p.m {\n\t\tm[k] = v\n\t}\n\treturn m\n}\n\n// FilterFunc returns a copy of the properties which includes the values which passed all filters.\nfunc (p *Properties) FilterFunc(filters ...func(k, v string) bool) *Properties {\n\tpp := NewProperties()\nouter:\n\tfor k, v := range p.m {\n\t\tfor _, f := range filters {\n\t\t\tif !f(k, v) {\n\t\t\t\tcontinue outer\n\t\t\t}\n\t\t\tpp.Set(k, v)\n\t\t}\n\t}\n\treturn pp\n}\n\n// ----------------------------------------------------------------------------\n\n// Delete removes the key and its comments.\nfunc (p *Properties) Delete(key string) {\n\tdelete(p.m, key)\n\tdelete(p.c, key)\n\tnewKeys := []string{}\n\tfor _, k := range p.k {\n\t\tif k != key {\n\t\t\tnewKeys = append(newKeys, k)\n\t\t}\n\t}\n\tp.k = newKeys\n}\n\n// Merge merges properties, comments and keys from other *Properties into p\nfunc (p *Properties) Merge(other *Properties) {\n\tfor _, k := range other.k {\n\t\tif _, ok := p.m[k]; !ok {\n\t\t\tp.k = append(p.k, k)\n\t\t}\n\t}\n\tfor k, v := range other.m {\n\t\tp.m[k] = v\n\t}\n\tfor k, v := range other.c {\n\t\tp.c[k] = v\n\t}\n}\n\n// ----------------------------------------------------------------------------\n\n// check expands all values and returns an error if a circular reference or\n// a malformed expression was found.\nfunc (p *Properties) check() error {\n\tfor key, value := range p.m {\n\t\tif _, err := p.expand(key, value); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (p *Properties) expand(key, input string) (string, error) {\n\t// no pre/postfix -> nothing to expand\n\tif p.Prefix == \"\" && p.Postfix == \"\" {\n\t\treturn input, nil\n\t}\n\n\treturn expand(input, []string{key}, p.Prefix, p.Postfix, p.m)\n}\n\n// expand recursively expands expressions of '(prefix)key(postfix)' to their corresponding values.\n// The function keeps track of the keys that were already expanded and stops if it\n// detects a circular reference or a malformed expression of the form '(prefix)key'.\nfunc expand(s string, keys []string, prefix, postfix string, values map[string]string) (string, error) {\n\tif len(keys) > maxExpansionDepth {\n\t\treturn \"\", fmt.Errorf(\"expansion too deep\")\n\t}\n\n\tfor {\n\t\tstart := strings.Index(s, prefix)\n\t\tif start == -1 {\n\t\t\treturn s, nil\n\t\t}\n\n\t\tkeyStart := start + len(prefix)\n\t\tkeyLen := strings.Index(s[keyStart:], postfix)\n\t\tif keyLen == -1 {\n\t\t\treturn \"\", fmt.Errorf(\"malformed expression\")\n\t\t}\n\n\t\tend := keyStart + keyLen + len(postfix) - 1\n\t\tkey := s[keyStart : keyStart+keyLen]\n\n\t\t// fmt.Printf(\"s:%q pp:%q start:%d end:%d keyStart:%d keyLen:%d key:%q\\n\", s, prefix + \"...\" + postfix, start, end, keyStart, keyLen, key)\n\n\t\tfor _, k := range keys {\n\t\t\tif key == k {\n\t\t\t\tvar b bytes.Buffer\n\t\t\t\tb.WriteString(\"circular reference in:\\n\")\n\t\t\t\tfor _, k1 := range keys {\n\t\t\t\t\tfmt.Fprintf(&b, \"%s=%s\\n\", k1, values[k1])\n\t\t\t\t}\n\t\t\t\treturn \"\", fmt.Errorf(b.String())\n\t\t\t}\n\t\t}\n\n\t\tval, ok := values[key]\n\t\tif !ok {\n\t\t\tval = os.Getenv(key)\n\t\t}\n\t\tnew_val, err := expand(val, append(keys, key), prefix, postfix, values)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\ts = s[:start] + new_val + s[end+1:]\n\t}\n}\n\n// encode encodes a UTF-8 string to ISO-8859-1 and escapes some characters.\nfunc encode(s string, special string, enc Encoding) string {\n\tswitch enc {\n\tcase UTF8:\n\t\treturn encodeUtf8(s, special)\n\tcase ISO_8859_1:\n\t\treturn encodeIso(s, special)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unsupported encoding %v\", enc))\n\t}\n}\n\nfunc encodeUtf8(s string, special string) string {\n\tv := \"\"\n\tfor pos := 0; pos < len(s); {\n\t\tr, w := utf8.DecodeRuneInString(s[pos:])\n\t\tswitch {\n\t\tcase pos == 0 && unicode.IsSpace(r): // escape leading whitespace\n\t\t\tv += escape(r, \" \")\n\t\tdefault:\n\t\t\tv += escape(r, special) // escape special chars only\n\t\t}\n\t\tpos += w\n\t}\n\treturn v\n}\n\nfunc encodeIso(s string, special string) string {\n\tvar r rune\n\tvar w int\n\tvar v string\n\tfor pos := 0; pos < len(s); {\n\t\tswitch r, w = utf8.DecodeRuneInString(s[pos:]); {\n\t\tcase pos == 0 && unicode.IsSpace(r): // escape leading whitespace\n\t\t\tv += escape(r, \" \")\n\t\tcase r < 1<<8: // single byte rune -> escape special chars only\n\t\t\tv += escape(r, special)\n\t\tcase r < 1<<16: // two byte rune -> unicode literal\n\t\t\tv += fmt.Sprintf(\"\\\\u%04x\", r)\n\t\tdefault: // more than two bytes per rune -> can't encode\n\t\t\tv += \"?\"\n\t\t}\n\t\tpos += w\n\t}\n\treturn v\n}\n\nfunc escape(r rune, special string) string {\n\tswitch r {\n\tcase '\\f':\n\t\treturn \"\\\\f\"\n\tcase '\\n':\n\t\treturn \"\\\\n\"\n\tcase '\\r':\n\t\treturn \"\\\\r\"\n\tcase '\\t':\n\t\treturn \"\\\\t\"\n\tcase '\\\\':\n\t\treturn \"\\\\\\\\\"\n\tdefault:\n\t\tif strings.ContainsRune(special, r) {\n\t\t\treturn \"\\\\\" + string(r)\n\t\t}\n\t\treturn string(r)\n\t}\n}\n\nfunc invalidKeyError(key string) error {\n\treturn fmt.Errorf(\"unknown property: %s\", key)\n}\n"
  },
  {
    "path": "vendor/github.com/magiconair/properties/rangecheck.go",
    "content": "// Copyright 2013-2022 Frank Schroeder. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"math\"\n)\n\n// make this a var to overwrite it in a test\nvar is32Bit = ^uint(0) == math.MaxUint32\n\n// intRangeCheck checks if the value fits into the int type and\n// panics if it does not.\nfunc intRangeCheck(key string, v int64) int {\n\tif is32Bit && (v < math.MinInt32 || v > math.MaxInt32) {\n\t\tpanic(fmt.Sprintf(\"Value %d for key %s out of range\", v, key))\n\t}\n\treturn int(v)\n}\n\n// uintRangeCheck checks if the value fits into the uint type and\n// panics if it does not.\nfunc uintRangeCheck(key string, v uint64) uint {\n\tif is32Bit && v > math.MaxUint32 {\n\t\tpanic(fmt.Sprintf(\"Value %d for key %s out of range\", v, key))\n\t}\n\treturn uint(v)\n}\n"
  },
  {
    "path": "vendor/github.com/moby/docker-image-spec/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/moby/docker-image-spec/specs-go/v1/image.go",
    "content": "package v1\n\nimport (\n\t\"time\"\n\n\tocispec \"github.com/opencontainers/image-spec/specs-go/v1\"\n)\n\nconst DockerOCIImageMediaType = \"application/vnd.docker.container.image.v1+json\"\n\n// DockerOCIImage is a ocispec.Image extended with Docker specific Config.\ntype DockerOCIImage struct {\n\tocispec.Image\n\n\t// Shadow ocispec.Image.Config\n\tConfig DockerOCIImageConfig `json:\"config,omitempty\"`\n}\n\n// DockerOCIImageConfig is a ocispec.ImageConfig extended with Docker specific fields.\ntype DockerOCIImageConfig struct {\n\tocispec.ImageConfig\n\n\tDockerOCIImageConfigExt\n}\n\n// DockerOCIImageConfigExt contains Docker-specific fields in DockerImageConfig.\ntype DockerOCIImageConfigExt struct {\n\tHealthcheck *HealthcheckConfig `json:\",omitempty\"` // Healthcheck describes how to check the container is healthy\n\n\tOnBuild []string `json:\",omitempty\"` // ONBUILD metadata that were defined on the image Dockerfile\n\tShell   []string `json:\",omitempty\"` // Shell for shell-form of RUN, CMD, ENTRYPOINT\n}\n\n// HealthcheckConfig holds configuration settings for the HEALTHCHECK feature.\ntype HealthcheckConfig struct {\n\t// Test is the test to perform to check that the container is healthy.\n\t// An empty slice means to inherit the default.\n\t// The options are:\n\t// {} : inherit healthcheck\n\t// {\"NONE\"} : disable healthcheck\n\t// {\"CMD\", args...} : exec arguments directly\n\t// {\"CMD-SHELL\", command} : run command with system's default shell\n\tTest []string `json:\",omitempty\"`\n\n\t// Zero means to inherit. Durations are expressed as integer nanoseconds.\n\tInterval      time.Duration `json:\",omitempty\"` // Interval is the time to wait between checks.\n\tTimeout       time.Duration `json:\",omitempty\"` // Timeout is the time to wait before considering the check to have hung.\n\tStartPeriod   time.Duration `json:\",omitempty\"` // The start period for the container to initialize before the retries starts to count down.\n\tStartInterval time.Duration `json:\",omitempty\"` // The interval to attempt healthchecks at during the start period\n\n\t// Retries is the number of consecutive failures needed to consider a container as unhealthy.\n\t// Zero means inherit.\n\tRetries int `json:\",omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/moby/patternmatcher/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        https://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   Copyright 2013-2018 Docker, 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       https://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": "vendor/github.com/moby/patternmatcher/NOTICE",
    "content": "Docker\nCopyright 2012-2017 Docker, Inc.\n\nThis product includes software developed at Docker, Inc. (https://www.docker.com).\n\nThe following is courtesy of our legal counsel:\n\n\nUse and transfer of Docker may be subject to certain restrictions by the\nUnited States and other governments.\nIt is your responsibility to ensure that your use and/or transfer does not\nviolate applicable laws.\n\nFor more information, please see https://www.bis.doc.gov\n\nSee also https://www.apache.org/dev/crypto.html and/or seek legal counsel.\n"
  },
  {
    "path": "vendor/github.com/moby/patternmatcher/ignorefile/ignorefile.go",
    "content": "package ignorefile\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"io\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// ReadAll reads an ignore file from a reader and returns the list of file\n// patterns to ignore, applying the following rules:\n//\n//   - An UTF8 BOM header (if present) is stripped.\n//   - Lines starting with \"#\" are considered comments and are skipped.\n//\n// For remaining lines:\n//\n//   - Leading and trailing whitespace is removed from each ignore pattern.\n//   - It uses [filepath.Clean] to get the shortest/cleanest path for\n//     ignore patterns.\n//   - Leading forward-slashes (\"/\") are removed from ignore patterns,\n//     so \"/some/path\" and \"some/path\" are considered equivalent.\nfunc ReadAll(reader io.Reader) ([]string, error) {\n\tif reader == nil {\n\t\treturn nil, nil\n\t}\n\n\tvar excludes []string\n\tcurrentLine := 0\n\tutf8bom := []byte{0xEF, 0xBB, 0xBF}\n\n\tscanner := bufio.NewScanner(reader)\n\tfor scanner.Scan() {\n\t\tscannedBytes := scanner.Bytes()\n\t\t// We trim UTF8 BOM\n\t\tif currentLine == 0 {\n\t\t\tscannedBytes = bytes.TrimPrefix(scannedBytes, utf8bom)\n\t\t}\n\t\tpattern := string(scannedBytes)\n\t\tcurrentLine++\n\t\t// Lines starting with # (comments) are ignored before processing\n\t\tif strings.HasPrefix(pattern, \"#\") {\n\t\t\tcontinue\n\t\t}\n\t\tpattern = strings.TrimSpace(pattern)\n\t\tif pattern == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\t// normalize absolute paths to paths relative to the context\n\t\t// (taking care of '!' prefix)\n\t\tinvert := pattern[0] == '!'\n\t\tif invert {\n\t\t\tpattern = strings.TrimSpace(pattern[1:])\n\t\t}\n\t\tif len(pattern) > 0 {\n\t\t\tpattern = filepath.Clean(pattern)\n\t\t\tpattern = filepath.ToSlash(pattern)\n\t\t\tif len(pattern) > 1 && pattern[0] == '/' {\n\t\t\t\tpattern = pattern[1:]\n\t\t\t}\n\t\t}\n\t\tif invert {\n\t\t\tpattern = \"!\" + pattern\n\t\t}\n\n\t\texcludes = append(excludes, pattern)\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn excludes, nil\n}\n"
  },
  {
    "path": "vendor/github.com/moby/patternmatcher/patternmatcher.go",
    "content": "package patternmatcher\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\t\"text/scanner\"\n\t\"unicode/utf8\"\n)\n\n// escapeBytes is a bitmap used to check whether a character should be escaped when creating the regex.\nvar escapeBytes [8]byte\n\n// shouldEscape reports whether a rune should be escaped as part of the regex.\n//\n// This only includes characters that require escaping in regex but are also NOT valid filepath pattern characters.\n// Additionally, '\\' is not excluded because there is specific logic to properly handle this, as it's a path separator\n// on Windows.\n//\n// Adapted from regexp::QuoteMeta in go stdlib.\n// See https://cs.opensource.google/go/go/+/refs/tags/go1.17.2:src/regexp/regexp.go;l=703-715;drc=refs%2Ftags%2Fgo1.17.2\nfunc shouldEscape(b rune) bool {\n\treturn b < utf8.RuneSelf && escapeBytes[b%8]&(1<<(b/8)) != 0\n}\n\nfunc init() {\n\tfor _, b := range []byte(`.+()|{}$`) {\n\t\tescapeBytes[b%8] |= 1 << (b / 8)\n\t}\n}\n\n// PatternMatcher allows checking paths against a list of patterns\ntype PatternMatcher struct {\n\tpatterns   []*Pattern\n\texclusions bool\n}\n\n// New creates a new matcher object for specific patterns that can\n// be used later to match against patterns against paths\nfunc New(patterns []string) (*PatternMatcher, error) {\n\tpm := &PatternMatcher{\n\t\tpatterns: make([]*Pattern, 0, len(patterns)),\n\t}\n\tfor _, p := range patterns {\n\t\t// Eliminate leading and trailing whitespace.\n\t\tp = strings.TrimSpace(p)\n\t\tif p == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tp = filepath.Clean(p)\n\t\tnewp := &Pattern{}\n\t\tif p[0] == '!' {\n\t\t\tif len(p) == 1 {\n\t\t\t\treturn nil, errors.New(\"illegal exclusion pattern: \\\"!\\\"\")\n\t\t\t}\n\t\t\tnewp.exclusion = true\n\t\t\tp = p[1:]\n\t\t\tpm.exclusions = true\n\t\t}\n\t\t// Do some syntax checking on the pattern.\n\t\t// filepath's Match() has some really weird rules that are inconsistent\n\t\t// so instead of trying to dup their logic, just call Match() for its\n\t\t// error state and if there is an error in the pattern return it.\n\t\t// If this becomes an issue we can remove this since its really only\n\t\t// needed in the error (syntax) case - which isn't really critical.\n\t\tif _, err := filepath.Match(p, \".\"); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tnewp.cleanedPattern = p\n\t\tnewp.dirs = strings.Split(p, string(os.PathSeparator))\n\t\tpm.patterns = append(pm.patterns, newp)\n\t}\n\treturn pm, nil\n}\n\n// Matches returns true if \"file\" matches any of the patterns\n// and isn't excluded by any of the subsequent patterns.\n//\n// The \"file\" argument should be a slash-delimited path.\n//\n// Matches is not safe to call concurrently.\n//\n// Deprecated: This implementation is buggy (it only checks a single parent dir\n// against the pattern) and will be removed soon. Use either\n// MatchesOrParentMatches or MatchesUsingParentResults instead.\nfunc (pm *PatternMatcher) Matches(file string) (bool, error) {\n\tmatched := false\n\tfile = filepath.FromSlash(file)\n\tparentPath := filepath.Dir(file)\n\tparentPathDirs := strings.Split(parentPath, string(os.PathSeparator))\n\n\tfor _, pattern := range pm.patterns {\n\t\t// Skip evaluation if this is an inclusion and the filename\n\t\t// already matched the pattern, or it's an exclusion and it has\n\t\t// not matched the pattern yet.\n\t\tif pattern.exclusion != matched {\n\t\t\tcontinue\n\t\t}\n\n\t\tmatch, err := pattern.match(file)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\n\t\tif !match && parentPath != \".\" {\n\t\t\t// Check to see if the pattern matches one of our parent dirs.\n\t\t\tif len(pattern.dirs) <= len(parentPathDirs) {\n\t\t\t\tmatch, _ = pattern.match(strings.Join(parentPathDirs[:len(pattern.dirs)], string(os.PathSeparator)))\n\t\t\t}\n\t\t}\n\n\t\tif match {\n\t\t\tmatched = !pattern.exclusion\n\t\t}\n\t}\n\n\treturn matched, nil\n}\n\n// MatchesOrParentMatches returns true if \"file\" matches any of the patterns\n// and isn't excluded by any of the subsequent patterns.\n//\n// The \"file\" argument should be a slash-delimited path.\n//\n// Matches is not safe to call concurrently.\nfunc (pm *PatternMatcher) MatchesOrParentMatches(file string) (bool, error) {\n\tmatched := false\n\tfile = filepath.FromSlash(file)\n\tparentPath := filepath.Dir(file)\n\tparentPathDirs := strings.Split(parentPath, string(os.PathSeparator))\n\n\tfor _, pattern := range pm.patterns {\n\t\t// Skip evaluation if this is an inclusion and the filename\n\t\t// already matched the pattern, or it's an exclusion and it has\n\t\t// not matched the pattern yet.\n\t\tif pattern.exclusion != matched {\n\t\t\tcontinue\n\t\t}\n\n\t\tmatch, err := pattern.match(file)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\n\t\tif !match && parentPath != \".\" {\n\t\t\t// Check to see if the pattern matches one of our parent dirs.\n\t\t\tfor i := range parentPathDirs {\n\t\t\t\tmatch, _ = pattern.match(strings.Join(parentPathDirs[:i+1], string(os.PathSeparator)))\n\t\t\t\tif match {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif match {\n\t\t\tmatched = !pattern.exclusion\n\t\t}\n\t}\n\n\treturn matched, nil\n}\n\n// MatchesUsingParentResult returns true if \"file\" matches any of the patterns\n// and isn't excluded by any of the subsequent patterns. The functionality is\n// the same as Matches, but as an optimization, the caller keeps track of\n// whether the parent directory matched.\n//\n// The \"file\" argument should be a slash-delimited path.\n//\n// MatchesUsingParentResult is not safe to call concurrently.\n//\n// Deprecated: this function does behave correctly in some cases (see\n// https://github.com/docker/buildx/issues/850).\n//\n// Use MatchesUsingParentResults instead.\nfunc (pm *PatternMatcher) MatchesUsingParentResult(file string, parentMatched bool) (bool, error) {\n\tmatched := parentMatched\n\tfile = filepath.FromSlash(file)\n\n\tfor _, pattern := range pm.patterns {\n\t\t// Skip evaluation if this is an inclusion and the filename\n\t\t// already matched the pattern, or it's an exclusion and it has\n\t\t// not matched the pattern yet.\n\t\tif pattern.exclusion != matched {\n\t\t\tcontinue\n\t\t}\n\n\t\tmatch, err := pattern.match(file)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\n\t\tif match {\n\t\t\tmatched = !pattern.exclusion\n\t\t}\n\t}\n\treturn matched, nil\n}\n\n// MatchInfo tracks information about parent dir matches while traversing a\n// filesystem.\ntype MatchInfo struct {\n\tparentMatched []bool\n}\n\n// MatchesUsingParentResults returns true if \"file\" matches any of the patterns\n// and isn't excluded by any of the subsequent patterns. The functionality is\n// the same as Matches, but as an optimization, the caller passes in\n// intermediate results from matching the parent directory.\n//\n// The \"file\" argument should be a slash-delimited path.\n//\n// MatchesUsingParentResults is not safe to call concurrently.\nfunc (pm *PatternMatcher) MatchesUsingParentResults(file string, parentMatchInfo MatchInfo) (bool, MatchInfo, error) {\n\tparentMatched := parentMatchInfo.parentMatched\n\tif len(parentMatched) != 0 && len(parentMatched) != len(pm.patterns) {\n\t\treturn false, MatchInfo{}, errors.New(\"wrong number of values in parentMatched\")\n\t}\n\n\tfile = filepath.FromSlash(file)\n\tmatched := false\n\n\tmatchInfo := MatchInfo{\n\t\tparentMatched: make([]bool, len(pm.patterns)),\n\t}\n\tfor i, pattern := range pm.patterns {\n\t\tmatch := false\n\t\t// If the parent matched this pattern, we don't need to recheck.\n\t\tif len(parentMatched) != 0 {\n\t\t\tmatch = parentMatched[i]\n\t\t}\n\n\t\tif !match {\n\t\t\t// Skip evaluation if this is an inclusion and the filename\n\t\t\t// already matched the pattern, or it's an exclusion and it has\n\t\t\t// not matched the pattern yet.\n\t\t\tif pattern.exclusion != matched {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar err error\n\t\t\tmatch, err = pattern.match(file)\n\t\t\tif err != nil {\n\t\t\t\treturn false, matchInfo, err\n\t\t\t}\n\n\t\t\t// If the zero value of MatchInfo was passed in, we don't have\n\t\t\t// any information about the parent dir's match results, and we\n\t\t\t// apply the same logic as MatchesOrParentMatches.\n\t\t\tif !match && len(parentMatched) == 0 {\n\t\t\t\tif parentPath := filepath.Dir(file); parentPath != \".\" {\n\t\t\t\t\tparentPathDirs := strings.Split(parentPath, string(os.PathSeparator))\n\t\t\t\t\t// Check to see if the pattern matches one of our parent dirs.\n\t\t\t\t\tfor i := range parentPathDirs {\n\t\t\t\t\t\tmatch, _ = pattern.match(strings.Join(parentPathDirs[:i+1], string(os.PathSeparator)))\n\t\t\t\t\t\tif match {\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}\n\t\t\t}\n\t\t}\n\t\tmatchInfo.parentMatched[i] = match\n\n\t\tif match {\n\t\t\tmatched = !pattern.exclusion\n\t\t}\n\t}\n\treturn matched, matchInfo, nil\n}\n\n// Exclusions returns true if any of the patterns define exclusions\nfunc (pm *PatternMatcher) Exclusions() bool {\n\treturn pm.exclusions\n}\n\n// Patterns returns array of active patterns\nfunc (pm *PatternMatcher) Patterns() []*Pattern {\n\treturn pm.patterns\n}\n\n// Pattern defines a single regexp used to filter file paths.\ntype Pattern struct {\n\tmatchType      matchType\n\tcleanedPattern string\n\tdirs           []string\n\tregexp         *regexp.Regexp\n\texclusion      bool\n}\n\ntype matchType int\n\nconst (\n\tunknownMatch matchType = iota\n\texactMatch\n\tprefixMatch\n\tsuffixMatch\n\tregexpMatch\n)\n\nfunc (p *Pattern) String() string {\n\treturn p.cleanedPattern\n}\n\n// Exclusion returns true if this pattern defines exclusion\nfunc (p *Pattern) Exclusion() bool {\n\treturn p.exclusion\n}\n\nfunc (p *Pattern) match(path string) (bool, error) {\n\tif p.matchType == unknownMatch {\n\t\tif err := p.compile(string(os.PathSeparator)); err != nil {\n\t\t\treturn false, filepath.ErrBadPattern\n\t\t}\n\t}\n\n\tswitch p.matchType {\n\tcase exactMatch:\n\t\treturn path == p.cleanedPattern, nil\n\tcase prefixMatch:\n\t\t// strip trailing **\n\t\treturn strings.HasPrefix(path, p.cleanedPattern[:len(p.cleanedPattern)-2]), nil\n\tcase suffixMatch:\n\t\t// strip leading **\n\t\tsuffix := p.cleanedPattern[2:]\n\t\tif strings.HasSuffix(path, suffix) {\n\t\t\treturn true, nil\n\t\t}\n\t\t// **/foo matches \"foo\"\n\t\treturn suffix[0] == os.PathSeparator && path == suffix[1:], nil\n\tcase regexpMatch:\n\t\treturn p.regexp.MatchString(path), nil\n\t}\n\n\treturn false, nil\n}\n\nfunc (p *Pattern) compile(sl string) error {\n\tregStr := \"^\"\n\tpattern := p.cleanedPattern\n\t// Go through the pattern and convert it to a regexp.\n\t// We use a scanner so we can support utf-8 chars.\n\tvar scan scanner.Scanner\n\tscan.Init(strings.NewReader(pattern))\n\n\tescSL := sl\n\tif sl == `\\` {\n\t\tescSL += `\\`\n\t}\n\n\tp.matchType = exactMatch\n\tfor i := 0; scan.Peek() != scanner.EOF; i++ {\n\t\tch := scan.Next()\n\n\t\tif ch == '*' {\n\t\t\tif scan.Peek() == '*' {\n\t\t\t\t// is some flavor of \"**\"\n\t\t\t\tscan.Next()\n\n\t\t\t\t// Treat **/ as ** so eat the \"/\"\n\t\t\t\tif string(scan.Peek()) == sl {\n\t\t\t\t\tscan.Next()\n\t\t\t\t}\n\n\t\t\t\tif scan.Peek() == scanner.EOF {\n\t\t\t\t\t// is \"**EOF\" - to align with .gitignore just accept all\n\t\t\t\t\tif p.matchType == exactMatch {\n\t\t\t\t\t\tp.matchType = prefixMatch\n\t\t\t\t\t} else {\n\t\t\t\t\t\tregStr += \".*\"\n\t\t\t\t\t\tp.matchType = regexpMatch\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// is \"**\"\n\t\t\t\t\t// Note that this allows for any # of /'s (even 0) because\n\t\t\t\t\t// the .* will eat everything, even /'s\n\t\t\t\t\tregStr += \"(.*\" + escSL + \")?\"\n\t\t\t\t\tp.matchType = regexpMatch\n\t\t\t\t}\n\n\t\t\t\tif i == 0 {\n\t\t\t\t\tp.matchType = suffixMatch\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// is \"*\" so map it to anything but \"/\"\n\t\t\t\tregStr += \"[^\" + escSL + \"]*\"\n\t\t\t\tp.matchType = regexpMatch\n\t\t\t}\n\t\t} else if ch == '?' {\n\t\t\t// \"?\" is any char except \"/\"\n\t\t\tregStr += \"[^\" + escSL + \"]\"\n\t\t\tp.matchType = regexpMatch\n\t\t} else if shouldEscape(ch) {\n\t\t\t// Escape some regexp special chars that have no meaning\n\t\t\t// in golang's filepath.Match\n\t\t\tregStr += `\\` + string(ch)\n\t\t} else if ch == '\\\\' {\n\t\t\t// escape next char. Note that a trailing \\ in the pattern\n\t\t\t// will be left alone (but need to escape it)\n\t\t\tif sl == `\\` {\n\t\t\t\t// On windows map \"\\\" to \"\\\\\", meaning an escaped backslash,\n\t\t\t\t// and then just continue because filepath.Match on\n\t\t\t\t// Windows doesn't allow escaping at all\n\t\t\t\tregStr += escSL\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif scan.Peek() != scanner.EOF {\n\t\t\t\tregStr += `\\` + string(scan.Next())\n\t\t\t\tp.matchType = regexpMatch\n\t\t\t} else {\n\t\t\t\tregStr += `\\`\n\t\t\t}\n\t\t} else if ch == '[' || ch == ']' {\n\t\t\tregStr += string(ch)\n\t\t\tp.matchType = regexpMatch\n\t\t} else {\n\t\t\tregStr += string(ch)\n\t\t}\n\t}\n\n\tif p.matchType != regexpMatch {\n\t\treturn nil\n\t}\n\n\tregStr += \"$\"\n\n\tre, err := regexp.Compile(regStr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp.regexp = re\n\tp.matchType = regexpMatch\n\treturn nil\n}\n\n// Matches returns true if file matches any of the patterns\n// and isn't excluded by any of the subsequent patterns.\n//\n// This implementation is buggy (it only checks a single parent dir against the\n// pattern) and will be removed soon. Use MatchesOrParentMatches instead.\nfunc Matches(file string, patterns []string) (bool, error) {\n\tpm, err := New(patterns)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tfile = filepath.Clean(file)\n\n\tif file == \".\" {\n\t\t// Don't let them exclude everything, kind of silly.\n\t\treturn false, nil\n\t}\n\n\treturn pm.Matches(file)\n}\n\n// MatchesOrParentMatches returns true if file matches any of the patterns\n// and isn't excluded by any of the subsequent patterns.\nfunc MatchesOrParentMatches(file string, patterns []string) (bool, error) {\n\tpm, err := New(patterns)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tfile = filepath.Clean(file)\n\n\tif file == \".\" {\n\t\t// Don't let them exclude everything, kind of silly.\n\t\treturn false, nil\n\t}\n\n\treturn pm.MatchesOrParentMatches(file)\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/sequential/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/moby/sys/sequential/doc.go",
    "content": "// Package sequential provides a set of functions for managing sequential\n// files on Windows.\n//\n// The origin of these functions are the golang OS and windows packages,\n// slightly modified to only cope with files, not directories due to the\n// specific use case.\n//\n// The alteration is to allow a file on Windows to be opened with\n// FILE_FLAG_SEQUENTIAL_SCAN (particular for docker load), to avoid eating\n// the standby list, particularly when accessing large files such as layer.tar.\n//\n// For non-Windows platforms, the package provides wrappers for the equivalents\n// in the os packages. They are passthrough on Unix platforms, and only relevant\n// on Windows.\npackage sequential\n"
  },
  {
    "path": "vendor/github.com/moby/sys/sequential/sequential_unix.go",
    "content": "//go:build !windows\n// +build !windows\n\npackage sequential\n\nimport \"os\"\n\n// Create creates the named file with mode 0666 (before umask), truncating\n// it if it already exists. If successful, methods on the returned\n// File can be used for I/O; the associated file descriptor has mode\n// O_RDWR.\n// If there is an error, it will be of type *PathError.\nfunc Create(name string) (*os.File, error) {\n\treturn os.Create(name)\n}\n\n// Open opens the named file for reading. If successful, methods on\n// the returned file can be used for reading; the associated file\n// descriptor has mode O_RDONLY.\n// If there is an error, it will be of type *PathError.\nfunc Open(name string) (*os.File, error) {\n\treturn os.Open(name)\n}\n\n// OpenFile is the generalized open call; most users will use Open\n// or Create instead. It opens the named file with specified flag\n// (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful,\n// methods on the returned File can be used for I/O.\n// If there is an error, it will be of type *PathError.\nfunc OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {\n\treturn os.OpenFile(name, flag, perm)\n}\n\n// CreateTemp creates a new temporary file in the directory dir\n// with a name beginning with prefix, opens the file for reading\n// and writing, and returns the resulting *os.File.\n// If dir is the empty string, TempFile uses the default directory\n// for temporary files (see os.TempDir).\n// Multiple programs calling TempFile simultaneously\n// will not choose the same file. The caller can use f.Name()\n// to find the pathname of the file. It is the caller's responsibility\n// to remove the file when no longer needed.\nfunc CreateTemp(dir, prefix string) (f *os.File, err error) {\n\treturn os.CreateTemp(dir, prefix)\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/sequential/sequential_windows.go",
    "content": "package sequential\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\n// Create creates the named file with mode 0666 (before umask), truncating\n// it if it already exists. If successful, methods on the returned\n// File can be used for I/O; the associated file descriptor has mode\n// O_RDWR.\n// If there is an error, it will be of type *PathError.\nfunc Create(name string) (*os.File, error) {\n\treturn OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0)\n}\n\n// Open opens the named file for reading. If successful, methods on\n// the returned file can be used for reading; the associated file\n// descriptor has mode O_RDONLY.\n// If there is an error, it will be of type *PathError.\nfunc Open(name string) (*os.File, error) {\n\treturn OpenFile(name, os.O_RDONLY, 0)\n}\n\n// OpenFile is the generalized open call; most users will use Open\n// or Create instead.\n// If there is an error, it will be of type *PathError.\nfunc OpenFile(name string, flag int, _ os.FileMode) (*os.File, error) {\n\tif name == \"\" {\n\t\treturn nil, &os.PathError{Op: \"open\", Path: name, Err: syscall.ENOENT}\n\t}\n\tr, err := openFileSequential(name, flag, 0)\n\tif err == nil {\n\t\treturn r, nil\n\t}\n\treturn nil, &os.PathError{Op: \"open\", Path: name, Err: err}\n}\n\nfunc openFileSequential(name string, flag int, _ os.FileMode) (file *os.File, err error) {\n\tr, e := openSequential(name, flag|windows.O_CLOEXEC, 0)\n\tif e != nil {\n\t\treturn nil, e\n\t}\n\treturn os.NewFile(uintptr(r), name), nil\n}\n\nfunc makeInheritSa() *windows.SecurityAttributes {\n\tvar sa windows.SecurityAttributes\n\tsa.Length = uint32(unsafe.Sizeof(sa))\n\tsa.InheritHandle = 1\n\treturn &sa\n}\n\nfunc openSequential(path string, mode int, _ uint32) (fd windows.Handle, err error) {\n\tif len(path) == 0 {\n\t\treturn windows.InvalidHandle, windows.ERROR_FILE_NOT_FOUND\n\t}\n\tpathp, err := windows.UTF16PtrFromString(path)\n\tif err != nil {\n\t\treturn windows.InvalidHandle, err\n\t}\n\tvar access uint32\n\tswitch mode & (windows.O_RDONLY | windows.O_WRONLY | windows.O_RDWR) {\n\tcase windows.O_RDONLY:\n\t\taccess = windows.GENERIC_READ\n\tcase windows.O_WRONLY:\n\t\taccess = windows.GENERIC_WRITE\n\tcase windows.O_RDWR:\n\t\taccess = windows.GENERIC_READ | windows.GENERIC_WRITE\n\t}\n\tif mode&windows.O_CREAT != 0 {\n\t\taccess |= windows.GENERIC_WRITE\n\t}\n\tif mode&windows.O_APPEND != 0 {\n\t\taccess &^= windows.GENERIC_WRITE\n\t\taccess |= windows.FILE_APPEND_DATA\n\t}\n\tsharemode := uint32(windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE)\n\tvar sa *windows.SecurityAttributes\n\tif mode&windows.O_CLOEXEC == 0 {\n\t\tsa = makeInheritSa()\n\t}\n\tvar createmode uint32\n\tswitch {\n\tcase mode&(windows.O_CREAT|windows.O_EXCL) == (windows.O_CREAT | windows.O_EXCL):\n\t\tcreatemode = windows.CREATE_NEW\n\tcase mode&(windows.O_CREAT|windows.O_TRUNC) == (windows.O_CREAT | windows.O_TRUNC):\n\t\tcreatemode = windows.CREATE_ALWAYS\n\tcase mode&windows.O_CREAT == windows.O_CREAT:\n\t\tcreatemode = windows.OPEN_ALWAYS\n\tcase mode&windows.O_TRUNC == windows.O_TRUNC:\n\t\tcreatemode = windows.TRUNCATE_EXISTING\n\tdefault:\n\t\tcreatemode = windows.OPEN_EXISTING\n\t}\n\t// Use FILE_FLAG_SEQUENTIAL_SCAN rather than FILE_ATTRIBUTE_NORMAL as implemented in golang.\n\t// https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx\n\tconst fileFlagSequentialScan = 0x08000000 // FILE_FLAG_SEQUENTIAL_SCAN\n\th, e := windows.CreateFile(pathp, access, sharemode, sa, createmode, fileFlagSequentialScan, 0)\n\treturn h, e\n}\n\n// Helpers for CreateTemp\nvar rand uint32\nvar randmu sync.Mutex\n\nfunc reseed() uint32 {\n\treturn uint32(time.Now().UnixNano() + int64(os.Getpid()))\n}\n\nfunc nextSuffix() string {\n\trandmu.Lock()\n\tr := rand\n\tif r == 0 {\n\t\tr = reseed()\n\t}\n\tr = r*1664525 + 1013904223 // constants from Numerical Recipes\n\trand = r\n\trandmu.Unlock()\n\treturn strconv.Itoa(int(1e9 + r%1e9))[1:]\n}\n\n// CreateTemp is a copy of os.CreateTemp, modified to use sequential\n// file access. Below is the original comment from golang:\n// TempFile creates a new temporary file in the directory dir\n// with a name beginning with prefix, opens the file for reading\n// and writing, and returns the resulting *os.File.\n// If dir is the empty string, TempFile uses the default directory\n// for temporary files (see os.TempDir).\n// Multiple programs calling TempFile simultaneously\n// will not choose the same file. The caller can use f.Name()\n// to find the pathname of the file. It is the caller's responsibility\n// to remove the file when no longer needed.\nfunc CreateTemp(dir, prefix string) (f *os.File, err error) {\n\tif dir == \"\" {\n\t\tdir = os.TempDir()\n\t}\n\n\tnconflict := 0\n\tfor i := 0; i < 10000; i++ {\n\t\tname := filepath.Join(dir, prefix+nextSuffix())\n\t\tf, err = OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0o600)\n\t\tif os.IsExist(err) {\n\t\t\tif nconflict++; nconflict > 10 {\n\t\t\t\trandmu.Lock()\n\t\t\t\trand = reseed()\n\t\t\t\trandmu.Unlock()\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/user/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/moby/sys/user/lookup_unix.go",
    "content": "//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris\n// +build darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage user\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// Unix-specific path to the passwd and group formatted files.\nconst (\n\tunixPasswdPath = \"/etc/passwd\"\n\tunixGroupPath  = \"/etc/group\"\n)\n\n// LookupUser looks up a user by their username in /etc/passwd. If the user\n// cannot be found (or there is no /etc/passwd file on the filesystem), then\n// LookupUser returns an error.\nfunc LookupUser(username string) (User, error) {\n\treturn lookupUserFunc(func(u User) bool {\n\t\treturn u.Name == username\n\t})\n}\n\n// LookupUid looks up a user by their user id in /etc/passwd. If the user cannot\n// be found (or there is no /etc/passwd file on the filesystem), then LookupId\n// returns an error.\nfunc LookupUid(uid int) (User, error) {\n\treturn lookupUserFunc(func(u User) bool {\n\t\treturn u.Uid == uid\n\t})\n}\n\nfunc lookupUserFunc(filter func(u User) bool) (User, error) {\n\t// Get operating system-specific passwd reader-closer.\n\tpasswd, err := GetPasswd()\n\tif err != nil {\n\t\treturn User{}, err\n\t}\n\tdefer passwd.Close()\n\n\t// Get the users.\n\tusers, err := ParsePasswdFilter(passwd, filter)\n\tif err != nil {\n\t\treturn User{}, err\n\t}\n\n\t// No user entries found.\n\tif len(users) == 0 {\n\t\treturn User{}, ErrNoPasswdEntries\n\t}\n\n\t// Assume the first entry is the \"correct\" one.\n\treturn users[0], nil\n}\n\n// LookupGroup looks up a group by its name in /etc/group. If the group cannot\n// be found (or there is no /etc/group file on the filesystem), then LookupGroup\n// returns an error.\nfunc LookupGroup(groupname string) (Group, error) {\n\treturn lookupGroupFunc(func(g Group) bool {\n\t\treturn g.Name == groupname\n\t})\n}\n\n// LookupGid looks up a group by its group id in /etc/group. If the group cannot\n// be found (or there is no /etc/group file on the filesystem), then LookupGid\n// returns an error.\nfunc LookupGid(gid int) (Group, error) {\n\treturn lookupGroupFunc(func(g Group) bool {\n\t\treturn g.Gid == gid\n\t})\n}\n\nfunc lookupGroupFunc(filter func(g Group) bool) (Group, error) {\n\t// Get operating system-specific group reader-closer.\n\tgroup, err := GetGroup()\n\tif err != nil {\n\t\treturn Group{}, err\n\t}\n\tdefer group.Close()\n\n\t// Get the users.\n\tgroups, err := ParseGroupFilter(group, filter)\n\tif err != nil {\n\t\treturn Group{}, err\n\t}\n\n\t// No user entries found.\n\tif len(groups) == 0 {\n\t\treturn Group{}, ErrNoGroupEntries\n\t}\n\n\t// Assume the first entry is the \"correct\" one.\n\treturn groups[0], nil\n}\n\nfunc GetPasswdPath() (string, error) {\n\treturn unixPasswdPath, nil\n}\n\nfunc GetPasswd() (io.ReadCloser, error) {\n\treturn os.Open(unixPasswdPath)\n}\n\nfunc GetGroupPath() (string, error) {\n\treturn unixGroupPath, nil\n}\n\nfunc GetGroup() (io.ReadCloser, error) {\n\treturn os.Open(unixGroupPath)\n}\n\n// CurrentUser looks up the current user by their user id in /etc/passwd. If the\n// user cannot be found (or there is no /etc/passwd file on the filesystem),\n// then CurrentUser returns an error.\nfunc CurrentUser() (User, error) {\n\treturn LookupUid(unix.Getuid())\n}\n\n// CurrentGroup looks up the current user's group by their primary group id's\n// entry in /etc/passwd. If the group cannot be found (or there is no\n// /etc/group file on the filesystem), then CurrentGroup returns an error.\nfunc CurrentGroup() (Group, error) {\n\treturn LookupGid(unix.Getgid())\n}\n\nfunc currentUserSubIDs(fileName string) ([]SubID, error) {\n\tu, err := CurrentUser()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfilter := func(entry SubID) bool {\n\t\treturn entry.Name == u.Name || entry.Name == strconv.Itoa(u.Uid)\n\t}\n\treturn ParseSubIDFileFilter(fileName, filter)\n}\n\nfunc CurrentUserSubUIDs() ([]SubID, error) {\n\treturn currentUserSubIDs(\"/etc/subuid\")\n}\n\nfunc CurrentUserSubGIDs() ([]SubID, error) {\n\treturn currentUserSubIDs(\"/etc/subgid\")\n}\n\nfunc CurrentProcessUIDMap() ([]IDMap, error) {\n\treturn ParseIDMapFile(\"/proc/self/uid_map\")\n}\n\nfunc CurrentProcessGIDMap() ([]IDMap, error) {\n\treturn ParseIDMapFile(\"/proc/self/gid_map\")\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/user/user.go",
    "content": "package user\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nconst (\n\tminID = 0\n\tmaxID = 1<<31 - 1 // for 32-bit systems compatibility\n)\n\nvar (\n\t// ErrNoPasswdEntries is returned if no matching entries were found in /etc/group.\n\tErrNoPasswdEntries = errors.New(\"no matching entries in passwd file\")\n\t// ErrNoGroupEntries is returned if no matching entries were found in /etc/passwd.\n\tErrNoGroupEntries = errors.New(\"no matching entries in group file\")\n\t// ErrRange is returned if a UID or GID is outside of the valid range.\n\tErrRange = fmt.Errorf(\"uids and gids must be in range %d-%d\", minID, maxID)\n)\n\ntype User struct {\n\tName  string\n\tPass  string\n\tUid   int\n\tGid   int\n\tGecos string\n\tHome  string\n\tShell string\n}\n\ntype Group struct {\n\tName string\n\tPass string\n\tGid  int\n\tList []string\n}\n\n// SubID represents an entry in /etc/sub{u,g}id\ntype SubID struct {\n\tName  string\n\tSubID int64\n\tCount int64\n}\n\n// IDMap represents an entry in /proc/PID/{u,g}id_map\ntype IDMap struct {\n\tID       int64\n\tParentID int64\n\tCount    int64\n}\n\nfunc parseLine(line []byte, v ...interface{}) {\n\tparseParts(bytes.Split(line, []byte(\":\")), v...)\n}\n\nfunc parseParts(parts [][]byte, v ...interface{}) {\n\tif len(parts) == 0 {\n\t\treturn\n\t}\n\n\tfor i, p := range parts {\n\t\t// Ignore cases where we don't have enough fields to populate the arguments.\n\t\t// Some configuration files like to misbehave.\n\t\tif len(v) <= i {\n\t\t\tbreak\n\t\t}\n\n\t\t// Use the type of the argument to figure out how to parse it, scanf() style.\n\t\t// This is legit.\n\t\tswitch e := v[i].(type) {\n\t\tcase *string:\n\t\t\t*e = string(p)\n\t\tcase *int:\n\t\t\t// \"numbers\", with conversion errors ignored because of some misbehaving configuration files.\n\t\t\t*e, _ = strconv.Atoi(string(p))\n\t\tcase *int64:\n\t\t\t*e, _ = strconv.ParseInt(string(p), 10, 64)\n\t\tcase *[]string:\n\t\t\t// Comma-separated lists.\n\t\t\tif len(p) != 0 {\n\t\t\t\t*e = strings.Split(string(p), \",\")\n\t\t\t} else {\n\t\t\t\t*e = []string{}\n\t\t\t}\n\t\tdefault:\n\t\t\t// Someone goof'd when writing code using this function. Scream so they can hear us.\n\t\t\tpanic(fmt.Sprintf(\"parseLine only accepts {*string, *int, *int64, *[]string} as arguments! %#v is not a pointer!\", e))\n\t\t}\n\t}\n}\n\nfunc ParsePasswdFile(path string) ([]User, error) {\n\tpasswd, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer passwd.Close()\n\treturn ParsePasswd(passwd)\n}\n\nfunc ParsePasswd(passwd io.Reader) ([]User, error) {\n\treturn ParsePasswdFilter(passwd, nil)\n}\n\nfunc ParsePasswdFileFilter(path string, filter func(User) bool) ([]User, error) {\n\tpasswd, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer passwd.Close()\n\treturn ParsePasswdFilter(passwd, filter)\n}\n\nfunc ParsePasswdFilter(r io.Reader, filter func(User) bool) ([]User, error) {\n\tif r == nil {\n\t\treturn nil, errors.New(\"nil source for passwd-formatted data\")\n\t}\n\n\tvar (\n\t\ts   = bufio.NewScanner(r)\n\t\tout = []User{}\n\t)\n\n\tfor s.Scan() {\n\t\tline := bytes.TrimSpace(s.Bytes())\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// see: man 5 passwd\n\t\t//  name:password:UID:GID:GECOS:directory:shell\n\t\t// Name:Pass:Uid:Gid:Gecos:Home:Shell\n\t\t//  root:x:0:0:root:/root:/bin/bash\n\t\t//  adm:x:3:4:adm:/var/adm:/bin/false\n\t\tp := User{}\n\t\tparseLine(line, &p.Name, &p.Pass, &p.Uid, &p.Gid, &p.Gecos, &p.Home, &p.Shell)\n\n\t\tif filter == nil || filter(p) {\n\t\t\tout = append(out, p)\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn out, nil\n}\n\nfunc ParseGroupFile(path string) ([]Group, error) {\n\tgroup, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdefer group.Close()\n\treturn ParseGroup(group)\n}\n\nfunc ParseGroup(group io.Reader) ([]Group, error) {\n\treturn ParseGroupFilter(group, nil)\n}\n\nfunc ParseGroupFileFilter(path string, filter func(Group) bool) ([]Group, error) {\n\tgroup, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer group.Close()\n\treturn ParseGroupFilter(group, filter)\n}\n\nfunc ParseGroupFilter(r io.Reader, filter func(Group) bool) ([]Group, error) {\n\tif r == nil {\n\t\treturn nil, errors.New(\"nil source for group-formatted data\")\n\t}\n\trd := bufio.NewReader(r)\n\tout := []Group{}\n\n\t// Read the file line-by-line.\n\tfor {\n\t\tvar (\n\t\t\tisPrefix  bool\n\t\t\twholeLine []byte\n\t\t\terr       error\n\t\t)\n\n\t\t// Read the next line. We do so in chunks (as much as reader's\n\t\t// buffer is able to keep), check if we read enough columns\n\t\t// already on each step and store final result in wholeLine.\n\t\tfor {\n\t\t\tvar line []byte\n\t\t\tline, isPrefix, err = rd.ReadLine()\n\t\t\tif err != nil {\n\t\t\t\t// We should return no error if EOF is reached\n\t\t\t\t// without a match.\n\t\t\t\tif err == io.EOF {\n\t\t\t\t\terr = nil\n\t\t\t\t}\n\t\t\t\treturn out, err\n\t\t\t}\n\n\t\t\t// Simple common case: line is short enough to fit in a\n\t\t\t// single reader's buffer.\n\t\t\tif !isPrefix && len(wholeLine) == 0 {\n\t\t\t\twholeLine = line\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\twholeLine = append(wholeLine, line...)\n\n\t\t\t// Check if we read the whole line already.\n\t\t\tif !isPrefix {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// There's no spec for /etc/passwd or /etc/group, but we try to follow\n\t\t// the same rules as the glibc parser, which allows comments and blank\n\t\t// space at the beginning of a line.\n\t\twholeLine = bytes.TrimSpace(wholeLine)\n\t\tif len(wholeLine) == 0 || wholeLine[0] == '#' {\n\t\t\tcontinue\n\t\t}\n\n\t\t// see: man 5 group\n\t\t//  group_name:password:GID:user_list\n\t\t// Name:Pass:Gid:List\n\t\t//  root:x:0:root\n\t\t//  adm:x:4:root,adm,daemon\n\t\tp := Group{}\n\t\tparseLine(wholeLine, &p.Name, &p.Pass, &p.Gid, &p.List)\n\n\t\tif filter == nil || filter(p) {\n\t\t\tout = append(out, p)\n\t\t}\n\t}\n}\n\ntype ExecUser struct {\n\tUid   int\n\tGid   int\n\tSgids []int\n\tHome  string\n}\n\n// GetExecUserPath is a wrapper for GetExecUser. It reads data from each of the\n// given file paths and uses that data as the arguments to GetExecUser. If the\n// files cannot be opened for any reason, the error is ignored and a nil\n// io.Reader is passed instead.\nfunc GetExecUserPath(userSpec string, defaults *ExecUser, passwdPath, groupPath string) (*ExecUser, error) {\n\tvar passwd, group io.Reader\n\n\tif passwdFile, err := os.Open(passwdPath); err == nil {\n\t\tpasswd = passwdFile\n\t\tdefer passwdFile.Close()\n\t}\n\n\tif groupFile, err := os.Open(groupPath); err == nil {\n\t\tgroup = groupFile\n\t\tdefer groupFile.Close()\n\t}\n\n\treturn GetExecUser(userSpec, defaults, passwd, group)\n}\n\n// GetExecUser parses a user specification string (using the passwd and group\n// readers as sources for /etc/passwd and /etc/group data, respectively). In\n// the case of blank fields or missing data from the sources, the values in\n// defaults is used.\n//\n// GetExecUser will return an error if a user or group literal could not be\n// found in any entry in passwd and group respectively.\n//\n// Examples of valid user specifications are:\n//   - \"\"\n//   - \"user\"\n//   - \"uid\"\n//   - \"user:group\"\n//   - \"uid:gid\n//   - \"user:gid\"\n//   - \"uid:group\"\n//\n// It should be noted that if you specify a numeric user or group id, they will\n// not be evaluated as usernames (only the metadata will be filled). So attempting\n// to parse a user with user.Name = \"1337\" will produce the user with a UID of\n// 1337.\nfunc GetExecUser(userSpec string, defaults *ExecUser, passwd, group io.Reader) (*ExecUser, error) {\n\tif defaults == nil {\n\t\tdefaults = new(ExecUser)\n\t}\n\n\t// Copy over defaults.\n\tuser := &ExecUser{\n\t\tUid:   defaults.Uid,\n\t\tGid:   defaults.Gid,\n\t\tSgids: defaults.Sgids,\n\t\tHome:  defaults.Home,\n\t}\n\n\t// Sgids slice *cannot* be nil.\n\tif user.Sgids == nil {\n\t\tuser.Sgids = []int{}\n\t}\n\n\t// Allow for userArg to have either \"user\" syntax, or optionally \"user:group\" syntax\n\tvar userArg, groupArg string\n\tparseLine([]byte(userSpec), &userArg, &groupArg)\n\n\t// Convert userArg and groupArg to be numeric, so we don't have to execute\n\t// Atoi *twice* for each iteration over lines.\n\tuidArg, uidErr := strconv.Atoi(userArg)\n\tgidArg, gidErr := strconv.Atoi(groupArg)\n\n\t// Find the matching user.\n\tusers, err := ParsePasswdFilter(passwd, func(u User) bool {\n\t\tif userArg == \"\" {\n\t\t\t// Default to current state of the user.\n\t\t\treturn u.Uid == user.Uid\n\t\t}\n\n\t\tif uidErr == nil {\n\t\t\t// If the userArg is numeric, always treat it as a UID.\n\t\t\treturn uidArg == u.Uid\n\t\t}\n\n\t\treturn u.Name == userArg\n\t})\n\n\t// If we can't find the user, we have to bail.\n\tif err != nil && passwd != nil {\n\t\tif userArg == \"\" {\n\t\t\tuserArg = strconv.Itoa(user.Uid)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"unable to find user %s: %w\", userArg, err)\n\t}\n\n\tvar matchedUserName string\n\tif len(users) > 0 {\n\t\t// First match wins, even if there's more than one matching entry.\n\t\tmatchedUserName = users[0].Name\n\t\tuser.Uid = users[0].Uid\n\t\tuser.Gid = users[0].Gid\n\t\tuser.Home = users[0].Home\n\t} else if userArg != \"\" {\n\t\t// If we can't find a user with the given username, the only other valid\n\t\t// option is if it's a numeric username with no associated entry in passwd.\n\n\t\tif uidErr != nil {\n\t\t\t// Not numeric.\n\t\t\treturn nil, fmt.Errorf(\"unable to find user %s: %w\", userArg, ErrNoPasswdEntries)\n\t\t}\n\t\tuser.Uid = uidArg\n\n\t\t// Must be inside valid uid range.\n\t\tif user.Uid < minID || user.Uid > maxID {\n\t\t\treturn nil, ErrRange\n\t\t}\n\n\t\t// Okay, so it's numeric. We can just roll with this.\n\t}\n\n\t// On to the groups. If we matched a username, we need to do this because of\n\t// the supplementary group IDs.\n\tif groupArg != \"\" || matchedUserName != \"\" {\n\t\tgroups, err := ParseGroupFilter(group, func(g Group) bool {\n\t\t\t// If the group argument isn't explicit, we'll just search for it.\n\t\t\tif groupArg == \"\" {\n\t\t\t\t// Check if user is a member of this group.\n\t\t\t\tfor _, u := range g.List {\n\t\t\t\t\tif u == matchedUserName {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif gidErr == nil {\n\t\t\t\t// If the groupArg is numeric, always treat it as a GID.\n\t\t\t\treturn gidArg == g.Gid\n\t\t\t}\n\n\t\t\treturn g.Name == groupArg\n\t\t})\n\t\tif err != nil && group != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to find groups for spec %v: %w\", matchedUserName, err)\n\t\t}\n\n\t\t// Only start modifying user.Gid if it is in explicit form.\n\t\tif groupArg != \"\" {\n\t\t\tif len(groups) > 0 {\n\t\t\t\t// First match wins, even if there's more than one matching entry.\n\t\t\t\tuser.Gid = groups[0].Gid\n\t\t\t} else {\n\t\t\t\t// If we can't find a group with the given name, the only other valid\n\t\t\t\t// option is if it's a numeric group name with no associated entry in group.\n\n\t\t\t\tif gidErr != nil {\n\t\t\t\t\t// Not numeric.\n\t\t\t\t\treturn nil, fmt.Errorf(\"unable to find group %s: %w\", groupArg, ErrNoGroupEntries)\n\t\t\t\t}\n\t\t\t\tuser.Gid = gidArg\n\n\t\t\t\t// Must be inside valid gid range.\n\t\t\t\tif user.Gid < minID || user.Gid > maxID {\n\t\t\t\t\treturn nil, ErrRange\n\t\t\t\t}\n\n\t\t\t\t// Okay, so it's numeric. We can just roll with this.\n\t\t\t}\n\t\t} else if len(groups) > 0 {\n\t\t\t// Supplementary group ids only make sense if in the implicit form.\n\t\t\tuser.Sgids = make([]int, len(groups))\n\t\t\tfor i, group := range groups {\n\t\t\t\tuser.Sgids[i] = group.Gid\n\t\t\t}\n\t\t}\n\t}\n\n\treturn user, nil\n}\n\n// GetAdditionalGroups looks up a list of groups by name or group id\n// against the given /etc/group formatted data. If a group name cannot\n// be found, an error will be returned. If a group id cannot be found,\n// or the given group data is nil, the id will be returned as-is\n// provided it is in the legal range.\nfunc GetAdditionalGroups(additionalGroups []string, group io.Reader) ([]int, error) {\n\tgroups := []Group{}\n\tif group != nil {\n\t\tvar err error\n\t\tgroups, err = ParseGroupFilter(group, func(g Group) bool {\n\t\t\tfor _, ag := range additionalGroups {\n\t\t\t\tif g.Name == ag || strconv.Itoa(g.Gid) == ag {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Unable to find additional groups %v: %w\", additionalGroups, err)\n\t\t}\n\t}\n\n\tgidMap := make(map[int]struct{})\n\tfor _, ag := range additionalGroups {\n\t\tvar found bool\n\t\tfor _, g := range groups {\n\t\t\t// if we found a matched group either by name or gid, take the\n\t\t\t// first matched as correct\n\t\t\tif g.Name == ag || strconv.Itoa(g.Gid) == ag {\n\t\t\t\tif _, ok := gidMap[g.Gid]; !ok {\n\t\t\t\t\tgidMap[g.Gid] = struct{}{}\n\t\t\t\t\tfound = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// we asked for a group but didn't find it. let's check to see\n\t\t// if we wanted a numeric group\n\t\tif !found {\n\t\t\tgid, err := strconv.ParseInt(ag, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\t// Not a numeric ID either.\n\t\t\t\treturn nil, fmt.Errorf(\"Unable to find group %s: %w\", ag, ErrNoGroupEntries)\n\t\t\t}\n\t\t\t// Ensure gid is inside gid range.\n\t\t\tif gid < minID || gid > maxID {\n\t\t\t\treturn nil, ErrRange\n\t\t\t}\n\t\t\tgidMap[int(gid)] = struct{}{}\n\t\t}\n\t}\n\tgids := []int{}\n\tfor gid := range gidMap {\n\t\tgids = append(gids, gid)\n\t}\n\treturn gids, nil\n}\n\n// GetAdditionalGroupsPath is a wrapper around GetAdditionalGroups\n// that opens the groupPath given and gives it as an argument to\n// GetAdditionalGroups.\nfunc GetAdditionalGroupsPath(additionalGroups []string, groupPath string) ([]int, error) {\n\tvar group io.Reader\n\n\tif groupFile, err := os.Open(groupPath); err == nil {\n\t\tgroup = groupFile\n\t\tdefer groupFile.Close()\n\t}\n\treturn GetAdditionalGroups(additionalGroups, group)\n}\n\nfunc ParseSubIDFile(path string) ([]SubID, error) {\n\tsubid, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer subid.Close()\n\treturn ParseSubID(subid)\n}\n\nfunc ParseSubID(subid io.Reader) ([]SubID, error) {\n\treturn ParseSubIDFilter(subid, nil)\n}\n\nfunc ParseSubIDFileFilter(path string, filter func(SubID) bool) ([]SubID, error) {\n\tsubid, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer subid.Close()\n\treturn ParseSubIDFilter(subid, filter)\n}\n\nfunc ParseSubIDFilter(r io.Reader, filter func(SubID) bool) ([]SubID, error) {\n\tif r == nil {\n\t\treturn nil, errors.New(\"nil source for subid-formatted data\")\n\t}\n\n\tvar (\n\t\ts   = bufio.NewScanner(r)\n\t\tout = []SubID{}\n\t)\n\n\tfor s.Scan() {\n\t\tline := bytes.TrimSpace(s.Bytes())\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// see: man 5 subuid\n\t\tp := SubID{}\n\t\tparseLine(line, &p.Name, &p.SubID, &p.Count)\n\n\t\tif filter == nil || filter(p) {\n\t\t\tout = append(out, p)\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn out, nil\n}\n\nfunc ParseIDMapFile(path string) ([]IDMap, error) {\n\tr, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer r.Close()\n\treturn ParseIDMap(r)\n}\n\nfunc ParseIDMap(r io.Reader) ([]IDMap, error) {\n\treturn ParseIDMapFilter(r, nil)\n}\n\nfunc ParseIDMapFileFilter(path string, filter func(IDMap) bool) ([]IDMap, error) {\n\tr, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer r.Close()\n\treturn ParseIDMapFilter(r, filter)\n}\n\nfunc ParseIDMapFilter(r io.Reader, filter func(IDMap) bool) ([]IDMap, error) {\n\tif r == nil {\n\t\treturn nil, errors.New(\"nil source for idmap-formatted data\")\n\t}\n\n\tvar (\n\t\ts   = bufio.NewScanner(r)\n\t\tout = []IDMap{}\n\t)\n\n\tfor s.Scan() {\n\t\tline := bytes.TrimSpace(s.Bytes())\n\t\tif len(line) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// see: man 7 user_namespaces\n\t\tp := IDMap{}\n\t\tparseParts(bytes.Fields(line), &p.ID, &p.ParentID, &p.Count)\n\n\t\tif filter == nil || filter(p) {\n\t\t\tout = append(out, p)\n\t\t}\n\t}\n\tif err := s.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn out, nil\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/user/user_fuzzer.go",
    "content": "//go:build gofuzz\n// +build gofuzz\n\npackage user\n\nimport (\n\t\"io\"\n\t\"strings\"\n)\n\nfunc IsDivisbleBy(n int, divisibleby int) bool {\n\treturn (n % divisibleby) == 0\n}\n\nfunc FuzzUser(data []byte) int {\n\tif len(data) == 0 {\n\t\treturn -1\n\t}\n\tif !IsDivisbleBy(len(data), 5) {\n\t\treturn -1\n\t}\n\n\tvar divided [][]byte\n\n\tchunkSize := len(data) / 5\n\n\tfor i := 0; i < len(data); i += chunkSize {\n\t\tend := i + chunkSize\n\n\t\tdivided = append(divided, data[i:end])\n\t}\n\n\t_, _ = ParsePasswdFilter(strings.NewReader(string(divided[0])), nil)\n\n\tvar passwd, group io.Reader\n\n\tgroup = strings.NewReader(string(divided[1]))\n\t_, _ = GetAdditionalGroups([]string{string(divided[2])}, group)\n\n\tpasswd = strings.NewReader(string(divided[3]))\n\t_, _ = GetExecUser(string(divided[4]), nil, passwd, group)\n\treturn 1\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/userns/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/moby/sys/userns/userns.go",
    "content": "// Package userns provides utilities to detect whether we are currently running\n// in a Linux user namespace.\n//\n// This code was migrated from [libcontainer/runc], which based its implementation\n// on code from [lcx/incus].\n//\n// [libcontainer/runc]: https://github.com/opencontainers/runc/blob/3778ae603c706494fd1e2c2faf83b406e38d687d/libcontainer/userns/userns_linux.go#L12-L49\n// [lcx/incus]: https://github.com/lxc/incus/blob/e45085dd42f826b3c8c3228e9733c0b6f998eafe/shared/util.go#L678-L700\npackage userns\n\n// RunningInUserNS detects whether we are currently running in a Linux\n// user namespace and memoizes the result. It returns false on non-Linux\n// platforms.\nfunc RunningInUserNS() bool {\n\treturn inUserNS()\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/userns/userns_linux.go",
    "content": "package userns\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"sync\"\n)\n\nvar inUserNS = sync.OnceValue(runningInUserNS)\n\n// runningInUserNS detects whether we are currently running in a user namespace.\n//\n// This code was migrated from [libcontainer/runc] and based on an implementation\n// from [lcx/incus].\n//\n// [libcontainer/runc]: https://github.com/opencontainers/runc/blob/3778ae603c706494fd1e2c2faf83b406e38d687d/libcontainer/userns/userns_linux.go#L12-L49\n// [lcx/incus]: https://github.com/lxc/incus/blob/e45085dd42f826b3c8c3228e9733c0b6f998eafe/shared/util.go#L678-L700\nfunc runningInUserNS() bool {\n\tfile, err := os.Open(\"/proc/self/uid_map\")\n\tif err != nil {\n\t\t// This kernel-provided file only exists if user namespaces are supported.\n\t\treturn false\n\t}\n\tdefer file.Close()\n\n\tbuf := bufio.NewReader(file)\n\tl, _, err := buf.ReadLine()\n\tif err != nil {\n\t\treturn false\n\t}\n\n\treturn uidMapInUserNS(string(l))\n}\n\nfunc uidMapInUserNS(uidMap string) bool {\n\tif uidMap == \"\" {\n\t\t// File exist but empty (the initial state when userns is created,\n\t\t// see user_namespaces(7)).\n\t\treturn true\n\t}\n\n\tvar a, b, c int64\n\tif _, err := fmt.Sscanf(uidMap, \"%d %d %d\", &a, &b, &c); err != nil {\n\t\t// Assume we are in a regular, non user namespace.\n\t\treturn false\n\t}\n\n\t// As per user_namespaces(7), /proc/self/uid_map of\n\t// the initial user namespace shows 0 0 4294967295.\n\tinitNS := a == 0 && b == 0 && c == 4294967295\n\treturn !initNS\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/userns/userns_linux_fuzzer.go",
    "content": "//go:build linux && gofuzz\n\npackage userns\n\nfunc FuzzUIDMap(uidmap []byte) int {\n\t_ = uidMapInUserNS(string(uidmap))\n\treturn 1\n}\n"
  },
  {
    "path": "vendor/github.com/moby/sys/userns/userns_unsupported.go",
    "content": "//go:build !linux\n\npackage userns\n\n// inUserNS is a stub for non-Linux systems. Always returns false.\nfunc inUserNS() bool { return false }\n"
  },
  {
    "path": "vendor/github.com/morikuni/aec/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Taihei Morikuni\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": "vendor/github.com/morikuni/aec/README.md",
    "content": "# aec\n\n[![GoDoc](https://godoc.org/github.com/morikuni/aec?status.svg)](https://godoc.org/github.com/morikuni/aec)\n\nGo wrapper for ANSI escape code.\n\n## Install\n\n```bash\ngo get github.com/morikuni/aec\n```\n\n## Features\n\nANSI escape codes depend on terminal environment.  \nSome of these features may not work.  \nCheck supported Font-Style/Font-Color features with [checkansi](./checkansi).\n\n[Wikipedia](https://en.wikipedia.org/wiki/ANSI_escape_code) for more detail.\n\n### Cursor\n\n- `Up(n)`\n- `Down(n)`\n- `Right(n)`\n- `Left(n)`\n- `NextLine(n)`\n- `PreviousLine(n)`\n- `Column(col)`\n- `Position(row, col)`\n- `Save`\n- `Restore`\n- `Hide`\n- `Show`\n- `Report`\n\n### Erase\n\n- `EraseDisplay(mode)`\n- `EraseLine(mode)`\n\n### Scroll\n\n- `ScrollUp(n)`\n- `ScrollDown(n)`\n\n### Font Style\n\n- `Bold`\n- `Faint`\n- `Italic`\n- `Underline`\n- `BlinkSlow`\n- `BlinkRapid`\n- `Inverse`\n- `Conceal`\n- `CrossOut`\n- `Frame`\n- `Encircle`\n- `Overline`\n\n### Font Color\n\nForeground color.\n\n- `DefaultF`\n- `BlackF`\n- `RedF`\n- `GreenF`\n- `YellowF`\n- `BlueF`\n- `MagentaF`\n- `CyanF`\n- `WhiteF`\n- `LightBlackF`\n- `LightRedF`\n- `LightGreenF`\n- `LightYellowF`\n- `LightBlueF`\n- `LightMagentaF`\n- `LightCyanF`\n- `LightWhiteF`\n- `Color3BitF(color)`\n- `Color8BitF(color)`\n- `FullColorF(r, g, b)`\n\nBackground color.\n\n- `DefaultB`\n- `BlackB`\n- `RedB`\n- `GreenB`\n- `YellowB`\n- `BlueB`\n- `MagentaB`\n- `CyanB`\n- `WhiteB`\n- `LightBlackB`\n- `LightRedB`\n- `LightGreenB`\n- `LightYellowB`\n- `LightBlueB`\n- `LightMagentaB`\n- `LightCyanB`\n- `LightWhiteB`\n- `Color3BitB(color)`\n- `Color8BitB(color)`\n- `FullColorB(r, g, b)`\n\n### Color Converter\n\n24bit RGB color to ANSI color.\n\n- `NewRGB3Bit(r, g, b)`\n- `NewRGB8Bit(r, g, b)`\n\n### Builder\n\nTo mix these features.\n\n```go\ncustom := aec.EmptyBuilder.Right(2).RGB8BitF(128, 255, 64).RedB().ANSI\ncustom.Apply(\"Hello World\")\n```\n\n## Usage\n\n1. Create ANSI by `aec.XXX().With(aec.YYY())` or `aec.EmptyBuilder.XXX().YYY().ANSI`\n2. Print ANSI by `fmt.Print(ansi, \"some string\", aec.Reset)` or `fmt.Print(ansi.Apply(\"some string\"))`\n\n`aec.Reset` should be added when using font style or font color features.\n\n## Example\n\nSimple progressbar.\n\n![sample](./sample.gif)\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/morikuni/aec\"\n)\n\nfunc main() {\n\tconst n = 20\n\tbuilder := aec.EmptyBuilder\n\n\tup2 := aec.Up(2)\n\tcol := aec.Column(n + 2)\n\tbar := aec.Color8BitF(aec.NewRGB8Bit(64, 255, 64))\n\tlabel := builder.LightRedF().Underline().With(col).Right(1).ANSI\n\n\t// for up2\n\tfmt.Println()\n\tfmt.Println()\n\n\tfor i := 0; i <= n; i++ {\n\t\tfmt.Print(up2)\n\t\tfmt.Println(label.Apply(fmt.Sprint(i, \"/\", n)))\n\t\tfmt.Print(\"[\")\n\t\tfmt.Print(bar.Apply(strings.Repeat(\"=\", i)))\n\t\tfmt.Println(col.Apply(\"]\"))\n\t\ttime.Sleep(100 * time.Millisecond)\n\t}\n}\n```\n\n## License\n\n[MIT](./LICENSE)\n\n\n"
  },
  {
    "path": "vendor/github.com/morikuni/aec/aec.go",
    "content": "package aec\n\nimport \"fmt\"\n\n// EraseMode is listed in a variable EraseModes.\ntype EraseMode uint\n\nvar (\n\t// EraseModes is a list of EraseMode.\n\tEraseModes struct {\n\t\t// All erase all.\n\t\tAll EraseMode\n\n\t\t// Head erase to head.\n\t\tHead EraseMode\n\n\t\t// Tail erase to tail.\n\t\tTail EraseMode\n\t}\n\n\t// Save saves the cursor position.\n\tSave ANSI\n\n\t// Restore restores the cursor position.\n\tRestore ANSI\n\n\t// Hide hides the cursor.\n\tHide ANSI\n\n\t// Show shows the cursor.\n\tShow ANSI\n\n\t// Report reports the cursor position.\n\tReport ANSI\n)\n\n// Up moves up the cursor.\nfunc Up(n uint) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dA\", n))\n}\n\n// Down moves down the cursor.\nfunc Down(n uint) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dB\", n))\n}\n\n// Right moves right the cursor.\nfunc Right(n uint) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dC\", n))\n}\n\n// Left moves left the cursor.\nfunc Left(n uint) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dD\", n))\n}\n\n// NextLine moves down the cursor to head of a line.\nfunc NextLine(n uint) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dE\", n))\n}\n\n// PreviousLine moves up the cursor to head of a line.\nfunc PreviousLine(n uint) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dF\", n))\n}\n\n// Column set the cursor position to a given column.\nfunc Column(col uint) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"%dG\", col))\n}\n\n// Position set the cursor position to a given absolute position.\nfunc Position(row, col uint) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"%d;%dH\", row, col))\n}\n\n// EraseDisplay erases display by given EraseMode.\nfunc EraseDisplay(m EraseMode) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"%dJ\", m))\n}\n\n// EraseLine erases lines by given EraseMode.\nfunc EraseLine(m EraseMode) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"%dK\", m))\n}\n\n// ScrollUp scrolls up the page.\nfunc ScrollUp(n int) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dS\", n))\n}\n\n// ScrollDown scrolls down the page.\nfunc ScrollDown(n int) ANSI {\n\tif n == 0 {\n\t\treturn empty\n\t}\n\treturn newAnsi(fmt.Sprintf(esc+\"%dT\", n))\n}\n\nfunc init() {\n\tEraseModes = struct {\n\t\tAll  EraseMode\n\t\tHead EraseMode\n\t\tTail EraseMode\n\t}{\n\t\tTail: 0,\n\t\tHead: 1,\n\t\tAll:  2,\n\t}\n\n\tSave = newAnsi(esc + \"s\")\n\tRestore = newAnsi(esc + \"u\")\n\tHide = newAnsi(esc + \"?25l\")\n\tShow = newAnsi(esc + \"?25h\")\n\tReport = newAnsi(esc + \"6n\")\n}\n"
  },
  {
    "path": "vendor/github.com/morikuni/aec/ansi.go",
    "content": "package aec\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\nconst esc = \"\\x1b[\"\n\n// Reset resets SGR effect.\nconst Reset string = \"\\x1b[0m\"\n\nvar empty = newAnsi(\"\")\n\n// ANSI represents ANSI escape code.\ntype ANSI interface {\n\tfmt.Stringer\n\n\t// With adapts given ANSIs.\n\tWith(...ANSI) ANSI\n\n\t// Apply wraps given string in ANSI.\n\tApply(string) string\n}\n\ntype ansiImpl string\n\nfunc newAnsi(s string) *ansiImpl {\n\tr := ansiImpl(s)\n\treturn &r\n}\n\nfunc (a *ansiImpl) With(ansi ...ANSI) ANSI {\n\treturn concat(append([]ANSI{a}, ansi...))\n}\n\nfunc (a *ansiImpl) Apply(s string) string {\n\treturn a.String() + s + Reset\n}\n\nfunc (a *ansiImpl) String() string {\n\treturn string(*a)\n}\n\n// Apply wraps given string in ANSIs.\nfunc Apply(s string, ansi ...ANSI) string {\n\tif len(ansi) == 0 {\n\t\treturn s\n\t}\n\treturn concat(ansi).Apply(s)\n}\n\nfunc concat(ansi []ANSI) ANSI {\n\tstrs := make([]string, 0, len(ansi))\n\tfor _, p := range ansi {\n\t\tstrs = append(strs, p.String())\n\t}\n\treturn newAnsi(strings.Join(strs, \"\"))\n}\n"
  },
  {
    "path": "vendor/github.com/morikuni/aec/builder.go",
    "content": "package aec\n\n// Builder is a lightweight syntax to construct customized ANSI.\ntype Builder struct {\n\tANSI ANSI\n}\n\n// EmptyBuilder is an initialized Builder.\nvar EmptyBuilder *Builder\n\n// NewBuilder creates a Builder from existing ANSI.\nfunc NewBuilder(a ...ANSI) *Builder {\n\treturn &Builder{concat(a)}\n}\n\n// With is a syntax for With.\nfunc (builder *Builder) With(a ...ANSI) *Builder {\n\treturn NewBuilder(builder.ANSI.With(a...))\n}\n\n// Up is a syntax for Up.\nfunc (builder *Builder) Up(n uint) *Builder {\n\treturn builder.With(Up(n))\n}\n\n// Down is a syntax for Down.\nfunc (builder *Builder) Down(n uint) *Builder {\n\treturn builder.With(Down(n))\n}\n\n// Right is a syntax for Right.\nfunc (builder *Builder) Right(n uint) *Builder {\n\treturn builder.With(Right(n))\n}\n\n// Left is a syntax for Left.\nfunc (builder *Builder) Left(n uint) *Builder {\n\treturn builder.With(Left(n))\n}\n\n// NextLine is a syntax for NextLine.\nfunc (builder *Builder) NextLine(n uint) *Builder {\n\treturn builder.With(NextLine(n))\n}\n\n// PreviousLine is a syntax for PreviousLine.\nfunc (builder *Builder) PreviousLine(n uint) *Builder {\n\treturn builder.With(PreviousLine(n))\n}\n\n// Column is a syntax for Column.\nfunc (builder *Builder) Column(col uint) *Builder {\n\treturn builder.With(Column(col))\n}\n\n// Position is a syntax for Position.\nfunc (builder *Builder) Position(row, col uint) *Builder {\n\treturn builder.With(Position(row, col))\n}\n\n// EraseDisplay is a syntax for EraseDisplay.\nfunc (builder *Builder) EraseDisplay(m EraseMode) *Builder {\n\treturn builder.With(EraseDisplay(m))\n}\n\n// EraseLine is a syntax for EraseLine.\nfunc (builder *Builder) EraseLine(m EraseMode) *Builder {\n\treturn builder.With(EraseLine(m))\n}\n\n// ScrollUp is a syntax for ScrollUp.\nfunc (builder *Builder) ScrollUp(n int) *Builder {\n\treturn builder.With(ScrollUp(n))\n}\n\n// ScrollDown is a syntax for ScrollDown.\nfunc (builder *Builder) ScrollDown(n int) *Builder {\n\treturn builder.With(ScrollDown(n))\n}\n\n// Save is a syntax for Save.\nfunc (builder *Builder) Save() *Builder {\n\treturn builder.With(Save)\n}\n\n// Restore is a syntax for Restore.\nfunc (builder *Builder) Restore() *Builder {\n\treturn builder.With(Restore)\n}\n\n// Hide is a syntax for Hide.\nfunc (builder *Builder) Hide() *Builder {\n\treturn builder.With(Hide)\n}\n\n// Show is a syntax for Show.\nfunc (builder *Builder) Show() *Builder {\n\treturn builder.With(Show)\n}\n\n// Report is a syntax for Report.\nfunc (builder *Builder) Report() *Builder {\n\treturn builder.With(Report)\n}\n\n// Bold is a syntax for Bold.\nfunc (builder *Builder) Bold() *Builder {\n\treturn builder.With(Bold)\n}\n\n// Faint is a syntax for Faint.\nfunc (builder *Builder) Faint() *Builder {\n\treturn builder.With(Faint)\n}\n\n// Italic is a syntax for Italic.\nfunc (builder *Builder) Italic() *Builder {\n\treturn builder.With(Italic)\n}\n\n// Underline is a syntax for Underline.\nfunc (builder *Builder) Underline() *Builder {\n\treturn builder.With(Underline)\n}\n\n// BlinkSlow is a syntax for BlinkSlow.\nfunc (builder *Builder) BlinkSlow() *Builder {\n\treturn builder.With(BlinkSlow)\n}\n\n// BlinkRapid is a syntax for BlinkRapid.\nfunc (builder *Builder) BlinkRapid() *Builder {\n\treturn builder.With(BlinkRapid)\n}\n\n// Inverse is a syntax for Inverse.\nfunc (builder *Builder) Inverse() *Builder {\n\treturn builder.With(Inverse)\n}\n\n// Conceal is a syntax for Conceal.\nfunc (builder *Builder) Conceal() *Builder {\n\treturn builder.With(Conceal)\n}\n\n// CrossOut is a syntax for CrossOut.\nfunc (builder *Builder) CrossOut() *Builder {\n\treturn builder.With(CrossOut)\n}\n\n// BlackF is a syntax for BlackF.\nfunc (builder *Builder) BlackF() *Builder {\n\treturn builder.With(BlackF)\n}\n\n// RedF is a syntax for RedF.\nfunc (builder *Builder) RedF() *Builder {\n\treturn builder.With(RedF)\n}\n\n// GreenF is a syntax for GreenF.\nfunc (builder *Builder) GreenF() *Builder {\n\treturn builder.With(GreenF)\n}\n\n// YellowF is a syntax for YellowF.\nfunc (builder *Builder) YellowF() *Builder {\n\treturn builder.With(YellowF)\n}\n\n// BlueF is a syntax for BlueF.\nfunc (builder *Builder) BlueF() *Builder {\n\treturn builder.With(BlueF)\n}\n\n// MagentaF is a syntax for MagentaF.\nfunc (builder *Builder) MagentaF() *Builder {\n\treturn builder.With(MagentaF)\n}\n\n// CyanF is a syntax for CyanF.\nfunc (builder *Builder) CyanF() *Builder {\n\treturn builder.With(CyanF)\n}\n\n// WhiteF is a syntax for WhiteF.\nfunc (builder *Builder) WhiteF() *Builder {\n\treturn builder.With(WhiteF)\n}\n\n// DefaultF is a syntax for DefaultF.\nfunc (builder *Builder) DefaultF() *Builder {\n\treturn builder.With(DefaultF)\n}\n\n// BlackB is a syntax for BlackB.\nfunc (builder *Builder) BlackB() *Builder {\n\treturn builder.With(BlackB)\n}\n\n// RedB is a syntax for RedB.\nfunc (builder *Builder) RedB() *Builder {\n\treturn builder.With(RedB)\n}\n\n// GreenB is a syntax for GreenB.\nfunc (builder *Builder) GreenB() *Builder {\n\treturn builder.With(GreenB)\n}\n\n// YellowB is a syntax for YellowB.\nfunc (builder *Builder) YellowB() *Builder {\n\treturn builder.With(YellowB)\n}\n\n// BlueB is a syntax for BlueB.\nfunc (builder *Builder) BlueB() *Builder {\n\treturn builder.With(BlueB)\n}\n\n// MagentaB is a syntax for MagentaB.\nfunc (builder *Builder) MagentaB() *Builder {\n\treturn builder.With(MagentaB)\n}\n\n// CyanB is a syntax for CyanB.\nfunc (builder *Builder) CyanB() *Builder {\n\treturn builder.With(CyanB)\n}\n\n// WhiteB is a syntax for WhiteB.\nfunc (builder *Builder) WhiteB() *Builder {\n\treturn builder.With(WhiteB)\n}\n\n// DefaultB is a syntax for DefaultB.\nfunc (builder *Builder) DefaultB() *Builder {\n\treturn builder.With(DefaultB)\n}\n\n// Frame is a syntax for Frame.\nfunc (builder *Builder) Frame() *Builder {\n\treturn builder.With(Frame)\n}\n\n// Encircle is a syntax for Encircle.\nfunc (builder *Builder) Encircle() *Builder {\n\treturn builder.With(Encircle)\n}\n\n// Overline is a syntax for Overline.\nfunc (builder *Builder) Overline() *Builder {\n\treturn builder.With(Overline)\n}\n\n// LightBlackF is a syntax for LightBlueF.\nfunc (builder *Builder) LightBlackF() *Builder {\n\treturn builder.With(LightBlackF)\n}\n\n// LightRedF is a syntax for LightRedF.\nfunc (builder *Builder) LightRedF() *Builder {\n\treturn builder.With(LightRedF)\n}\n\n// LightGreenF is a syntax for LightGreenF.\nfunc (builder *Builder) LightGreenF() *Builder {\n\treturn builder.With(LightGreenF)\n}\n\n// LightYellowF is a syntax for LightYellowF.\nfunc (builder *Builder) LightYellowF() *Builder {\n\treturn builder.With(LightYellowF)\n}\n\n// LightBlueF is a syntax for LightBlueF.\nfunc (builder *Builder) LightBlueF() *Builder {\n\treturn builder.With(LightBlueF)\n}\n\n// LightMagentaF is a syntax for LightMagentaF.\nfunc (builder *Builder) LightMagentaF() *Builder {\n\treturn builder.With(LightMagentaF)\n}\n\n// LightCyanF is a syntax for LightCyanF.\nfunc (builder *Builder) LightCyanF() *Builder {\n\treturn builder.With(LightCyanF)\n}\n\n// LightWhiteF is a syntax for LightWhiteF.\nfunc (builder *Builder) LightWhiteF() *Builder {\n\treturn builder.With(LightWhiteF)\n}\n\n// LightBlackB is a syntax for LightBlackB.\nfunc (builder *Builder) LightBlackB() *Builder {\n\treturn builder.With(LightBlackB)\n}\n\n// LightRedB is a syntax for LightRedB.\nfunc (builder *Builder) LightRedB() *Builder {\n\treturn builder.With(LightRedB)\n}\n\n// LightGreenB is a syntax for LightGreenB.\nfunc (builder *Builder) LightGreenB() *Builder {\n\treturn builder.With(LightGreenB)\n}\n\n// LightYellowB is a syntax for LightYellowB.\nfunc (builder *Builder) LightYellowB() *Builder {\n\treturn builder.With(LightYellowB)\n}\n\n// LightBlueB is a syntax for LightBlueB.\nfunc (builder *Builder) LightBlueB() *Builder {\n\treturn builder.With(LightBlueB)\n}\n\n// LightMagentaB is a syntax for LightMagentaB.\nfunc (builder *Builder) LightMagentaB() *Builder {\n\treturn builder.With(LightMagentaB)\n}\n\n// LightCyanB is a syntax for LightCyanB.\nfunc (builder *Builder) LightCyanB() *Builder {\n\treturn builder.With(LightCyanB)\n}\n\n// LightWhiteB is a syntax for LightWhiteB.\nfunc (builder *Builder) LightWhiteB() *Builder {\n\treturn builder.With(LightWhiteB)\n}\n\n// Color3BitF is a syntax for Color3BitF.\nfunc (builder *Builder) Color3BitF(c RGB3Bit) *Builder {\n\treturn builder.With(Color3BitF(c))\n}\n\n// Color3BitB is a syntax for Color3BitB.\nfunc (builder *Builder) Color3BitB(c RGB3Bit) *Builder {\n\treturn builder.With(Color3BitB(c))\n}\n\n// Color8BitF is a syntax for Color8BitF.\nfunc (builder *Builder) Color8BitF(c RGB8Bit) *Builder {\n\treturn builder.With(Color8BitF(c))\n}\n\n// Color8BitB is a syntax for Color8BitB.\nfunc (builder *Builder) Color8BitB(c RGB8Bit) *Builder {\n\treturn builder.With(Color8BitB(c))\n}\n\n// FullColorF is a syntax for FullColorF.\nfunc (builder *Builder) FullColorF(r, g, b uint8) *Builder {\n\treturn builder.With(FullColorF(r, g, b))\n}\n\n// FullColorB is a syntax for FullColorB.\nfunc (builder *Builder) FullColorB(r, g, b uint8) *Builder {\n\treturn builder.With(FullColorB(r, g, b))\n}\n\n// RGB3BitF is a syntax for Color3BitF with NewRGB3Bit.\nfunc (builder *Builder) RGB3BitF(r, g, b uint8) *Builder {\n\treturn builder.Color3BitF(NewRGB3Bit(r, g, b))\n}\n\n// RGB3BitB is a syntax for Color3BitB with NewRGB3Bit.\nfunc (builder *Builder) RGB3BitB(r, g, b uint8) *Builder {\n\treturn builder.Color3BitB(NewRGB3Bit(r, g, b))\n}\n\n// RGB8BitF is a syntax for Color8BitF with NewRGB8Bit.\nfunc (builder *Builder) RGB8BitF(r, g, b uint8) *Builder {\n\treturn builder.Color8BitF(NewRGB8Bit(r, g, b))\n}\n\n// RGB8BitB is a syntax for Color8BitB with NewRGB8Bit.\nfunc (builder *Builder) RGB8BitB(r, g, b uint8) *Builder {\n\treturn builder.Color8BitB(NewRGB8Bit(r, g, b))\n}\n\nfunc init() {\n\tEmptyBuilder = &Builder{empty}\n}\n"
  },
  {
    "path": "vendor/github.com/morikuni/aec/sgr.go",
    "content": "package aec\n\nimport (\n\t\"fmt\"\n)\n\n// RGB3Bit is a 3bit RGB color.\ntype RGB3Bit uint8\n\n// RGB8Bit is a 8bit RGB color.\ntype RGB8Bit uint8\n\nfunc newSGR(n uint) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"%dm\", n))\n}\n\n// NewRGB3Bit create a RGB3Bit from given RGB.\nfunc NewRGB3Bit(r, g, b uint8) RGB3Bit {\n\treturn RGB3Bit((r >> 7) | ((g >> 6) & 0x2) | ((b >> 5) & 0x4))\n}\n\n// NewRGB8Bit create a RGB8Bit from given RGB.\nfunc NewRGB8Bit(r, g, b uint8) RGB8Bit {\n\treturn RGB8Bit(16 + 36*(r/43) + 6*(g/43) + b/43)\n}\n\n// Color3BitF set the foreground color of text.\nfunc Color3BitF(c RGB3Bit) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"%dm\", c+30))\n}\n\n// Color3BitB set the background color of text.\nfunc Color3BitB(c RGB3Bit) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"%dm\", c+40))\n}\n\n// Color8BitF set the foreground color of text.\nfunc Color8BitF(c RGB8Bit) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"38;5;%dm\", c))\n}\n\n// Color8BitB set the background color of text.\nfunc Color8BitB(c RGB8Bit) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"48;5;%dm\", c))\n}\n\n// FullColorF set the foreground color of text.\nfunc FullColorF(r, g, b uint8) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"38;2;%d;%d;%dm\", r, g, b))\n}\n\n// FullColorB set the foreground color of text.\nfunc FullColorB(r, g, b uint8) ANSI {\n\treturn newAnsi(fmt.Sprintf(esc+\"48;2;%d;%d;%dm\", r, g, b))\n}\n\n// Style\nvar (\n\t// Bold set the text style to bold or increased intensity.\n\tBold ANSI\n\n\t// Faint set the text style to faint.\n\tFaint ANSI\n\n\t// Italic set the text style to italic.\n\tItalic ANSI\n\n\t// Underline set the text style to underline.\n\tUnderline ANSI\n\n\t// BlinkSlow set the text style to slow blink.\n\tBlinkSlow ANSI\n\n\t// BlinkRapid set the text style to rapid blink.\n\tBlinkRapid ANSI\n\n\t// Inverse swap the foreground color and background color.\n\tInverse ANSI\n\n\t// Conceal set the text style to conceal.\n\tConceal ANSI\n\n\t// CrossOut set the text style to crossed out.\n\tCrossOut ANSI\n\n\t// Frame set the text style to framed.\n\tFrame ANSI\n\n\t// Encircle set the text style to encircled.\n\tEncircle ANSI\n\n\t// Overline set the text style to overlined.\n\tOverline ANSI\n)\n\n// Foreground color of text.\nvar (\n\t// DefaultF is the default color of foreground.\n\tDefaultF ANSI\n\n\t// Normal color\n\tBlackF   ANSI\n\tRedF     ANSI\n\tGreenF   ANSI\n\tYellowF  ANSI\n\tBlueF    ANSI\n\tMagentaF ANSI\n\tCyanF    ANSI\n\tWhiteF   ANSI\n\n\t// Light color\n\tLightBlackF   ANSI\n\tLightRedF     ANSI\n\tLightGreenF   ANSI\n\tLightYellowF  ANSI\n\tLightBlueF    ANSI\n\tLightMagentaF ANSI\n\tLightCyanF    ANSI\n\tLightWhiteF   ANSI\n)\n\n// Background color of text.\nvar (\n\t// DefaultB is the default color of background.\n\tDefaultB ANSI\n\n\t// Normal color\n\tBlackB   ANSI\n\tRedB     ANSI\n\tGreenB   ANSI\n\tYellowB  ANSI\n\tBlueB    ANSI\n\tMagentaB ANSI\n\tCyanB    ANSI\n\tWhiteB   ANSI\n\n\t// Light color\n\tLightBlackB   ANSI\n\tLightRedB     ANSI\n\tLightGreenB   ANSI\n\tLightYellowB  ANSI\n\tLightBlueB    ANSI\n\tLightMagentaB ANSI\n\tLightCyanB    ANSI\n\tLightWhiteB   ANSI\n)\n\nfunc init() {\n\tBold = newSGR(1)\n\tFaint = newSGR(2)\n\tItalic = newSGR(3)\n\tUnderline = newSGR(4)\n\tBlinkSlow = newSGR(5)\n\tBlinkRapid = newSGR(6)\n\tInverse = newSGR(7)\n\tConceal = newSGR(8)\n\tCrossOut = newSGR(9)\n\n\tBlackF = newSGR(30)\n\tRedF = newSGR(31)\n\tGreenF = newSGR(32)\n\tYellowF = newSGR(33)\n\tBlueF = newSGR(34)\n\tMagentaF = newSGR(35)\n\tCyanF = newSGR(36)\n\tWhiteF = newSGR(37)\n\n\tDefaultF = newSGR(39)\n\n\tBlackB = newSGR(40)\n\tRedB = newSGR(41)\n\tGreenB = newSGR(42)\n\tYellowB = newSGR(43)\n\tBlueB = newSGR(44)\n\tMagentaB = newSGR(45)\n\tCyanB = newSGR(46)\n\tWhiteB = newSGR(47)\n\n\tDefaultB = newSGR(49)\n\n\tFrame = newSGR(51)\n\tEncircle = newSGR(52)\n\tOverline = newSGR(53)\n\n\tLightBlackF = newSGR(90)\n\tLightRedF = newSGR(91)\n\tLightGreenF = newSGR(92)\n\tLightYellowF = newSGR(93)\n\tLightBlueF = newSGR(94)\n\tLightMagentaF = newSGR(95)\n\tLightCyanF = newSGR(96)\n\tLightWhiteF = newSGR(97)\n\n\tLightBlackB = newSGR(100)\n\tLightRedB = newSGR(101)\n\tLightGreenB = newSGR(102)\n\tLightYellowB = newSGR(103)\n\tLightBlueB = newSGR(104)\n\tLightMagentaB = newSGR(105)\n\tLightCyanB = newSGR(106)\n\tLightWhiteB = newSGR(107)\n}\n"
  },
  {
    "path": "vendor/github.com/openark/golib/LICENSE",
    "content": "Apache License\nVersion 2.0, January 2004\nhttp://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,\nand distribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by\nthe copyright owner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all\nother entities that control, are controlled by, or are under common\ncontrol with that entity. For the purposes of this definition,\n\"control\" means (i) the power, direct or indirect, to cause the\ndirection or management of such entity, whether by contract or\notherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity\nexercising permissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications,\nincluding but not limited to software source code, documentation\nsource, and configuration files.\n\n\"Object\" form shall mean any form resulting from mechanical\ntransformation or translation of a Source form, including but\nnot limited to compiled object code, generated documentation,\nand conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or\nObject form, made available under the License, as indicated by a\ncopyright 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\nform, that is based on (or derived from) the Work and for which the\neditorial revisions, annotations, elaborations, or other modifications\nrepresent, as a whole, an original work of authorship. For the purposes\nof this License, Derivative Works shall not include works that remain\nseparable from, or merely link (or bind by name) to the interfaces of,\nthe Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including\nthe original version of the Work and any modifications or additions\nto that Work or Derivative Works thereof, that is intentionally\nsubmitted to Licensor for inclusion in the Work by the copyright owner\nor by an individual or Legal Entity authorized to submit on behalf of\nthe copyright owner. For the purposes of this definition, \"submitted\"\nmeans any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems,\nand issue tracking systems that are managed by, or on behalf of, the\nLicensor for the purpose of discussing and improving the Work, but\nexcluding communication that is conspicuously marked or otherwise\ndesignated in writing by the copyright owner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity\non behalf of whom a Contribution has been received by Licensor and\nsubsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\ncopyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the\nWork and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\nthis License, each Contributor hereby grants to You a perpetual,\nworldwide, non-exclusive, no-charge, royalty-free, irrevocable\n(except as stated in this section) patent license to make, have made,\nuse, offer to sell, sell, import, and otherwise transfer the Work,\nwhere such license applies only to those patent claims licensable\nby such Contributor that are necessarily infringed by their\nContribution(s) alone or by combination of their Contribution(s)\nwith the Work to which such Contribution(s) was submitted. If You\ninstitute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work\nor a Contribution incorporated within the Work constitutes direct\nor contributory patent infringement, then any patent licenses\ngranted to You under this License for that Work shall terminate\nas of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\nWork or Derivative Works thereof in any medium, with or without\nmodifications, and in Source or Object form, provided that You\nmeet the following conditions:\n\n(a) You must give any other recipients of the Work or\nDerivative Works a copy of this License; and\n\n(b) You must cause any modified files to carry prominent notices\nstating that You changed the files; and\n\n(c) You must retain, in the Source form of any Derivative Works\nthat You distribute, all copyright, patent, trademark, and\nattribution notices from the Source form of the Work,\nexcluding those notices that do not pertain to any part of\nthe Derivative Works; and\n\n(d) If the Work includes a \"NOTICE\" text file as part of its\ndistribution, then any Derivative Works that You distribute must\ninclude a readable copy of the attribution notices contained\nwithin such NOTICE file, excluding those notices that do not\npertain to any part of the Derivative Works, in at least one\nof the following places: within a NOTICE text file distributed\nas part of the Derivative Works; within the Source form or\ndocumentation, if provided along with the Derivative Works; or,\nwithin a display generated by the Derivative Works, if and\nwherever such third-party notices normally appear. The contents\nof the NOTICE file are for informational purposes only and\ndo not modify the License. You may add Your own attribution\nnotices within Derivative Works that You distribute, alongside\nor as an addendum to the NOTICE text from the Work, provided\nthat such additional attribution notices cannot be construed\nas modifying the License.\n\nYou may add Your own copyright statement to Your modifications and\nmay provide additional or different license terms and conditions\nfor use, reproduction, or distribution of Your modifications, or\nfor any such Derivative Works as a whole, provided Your use,\nreproduction, and distribution of the Work otherwise complies with\nthe conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\nany Contribution intentionally submitted for inclusion in the Work\nby You to the Licensor shall be under the terms and conditions of\nthis License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify\nthe terms of any separate license agreement you may have executed\nwith Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\nnames, trademarks, service marks, or product names of the Licensor,\nexcept as required for reasonable and customary use in describing the\norigin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\nagreed to in writing, Licensor provides the Work (and each\nContributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied, including, without limitation, any warranties or conditions\nof TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\nPARTICULAR PURPOSE. You are solely responsible for determining the\nappropriateness of using or redistributing the Work and assume any\nrisks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\nwhether in tort (including negligence), contract, or otherwise,\nunless required by applicable law (such as deliberate and grossly\nnegligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special,\nincidental, or consequential damages of any character arising as a\nresult of this License or out of the use or inability to use the\nWork (including but not limited to damages for loss of goodwill,\nwork stoppage, computer failure or malfunction, or any and all\nother commercial damages or losses), even if such Contributor\nhas been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\nthe Work or Derivative Works thereof, You may choose to offer,\nand charge a fee for, acceptance of support, warranty, indemnity,\nor other liability obligations and/or rights consistent with this\nLicense. However, in accepting such obligations, You may act only\non Your own behalf and on Your sole responsibility, not on behalf\nof any other Contributor, and only if You agree to indemnify,\ndefend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason\nof 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\nTo apply the Apache License to your work, attach the following\nboilerplate notice, with the fields enclosed by brackets \"{}\"\nreplaced with your own identifying information. (Don't include\nthe brackets!)  The text should be enclosed in the appropriate\ncomment syntax for the file format. We also recommend that a\nfile or class name and description of purpose be included on the\nsame \"printed page\" as the copyright notice for easier\nidentification within third-party archives.\n\nCopyright 2014  Outbrain Inc\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\nhttp://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"
  },
  {
    "path": "vendor/github.com/openark/golib/log/log.go",
    "content": "/*\n   Copyright 2014 Outbrain 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\npackage log\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"log/syslog\"\n\t\"os\"\n\t\"runtime/debug\"\n\t\"time\"\n)\n\n// LogLevel indicates the severity of a log entry\ntype LogLevel int\n\nfunc (this LogLevel) String() string {\n\tswitch this {\n\tcase FATAL:\n\t\treturn \"FATAL\"\n\tcase CRITICAL:\n\t\treturn \"CRITICAL\"\n\tcase ERROR:\n\t\treturn \"ERROR\"\n\tcase WARNING:\n\t\treturn \"WARNING\"\n\tcase NOTICE:\n\t\treturn \"NOTICE\"\n\tcase INFO:\n\t\treturn \"INFO\"\n\tcase DEBUG:\n\t\treturn \"DEBUG\"\n\t}\n\treturn \"unknown\"\n}\n\nfunc LogLevelFromString(logLevelName string) (LogLevel, error) {\n\tswitch logLevelName {\n\tcase \"FATAL\":\n\t\treturn FATAL, nil\n\tcase \"CRITICAL\":\n\t\treturn CRITICAL, nil\n\tcase \"ERROR\":\n\t\treturn ERROR, nil\n\tcase \"WARNING\":\n\t\treturn WARNING, nil\n\tcase \"NOTICE\":\n\t\treturn NOTICE, nil\n\tcase \"INFO\":\n\t\treturn INFO, nil\n\tcase \"DEBUG\":\n\t\treturn DEBUG, nil\n\t}\n\treturn 0, fmt.Errorf(\"Unknown LogLevel name: %+v\", logLevelName)\n}\n\nconst (\n\tFATAL LogLevel = iota\n\tCRITICAL\n\tERROR\n\tWARNING\n\tNOTICE\n\tINFO\n\tDEBUG\n)\n\nconst TimeFormat = \"2006-01-02 15:04:05\"\n\n// globalLogLevel indicates the global level filter for all logs (only entries with level equals or higher\n// than this value will be logged)\nvar globalLogLevel LogLevel = DEBUG\nvar printStackTrace bool = false\n\n// syslogWriter is optional, and defaults to nil (disabled)\nvar syslogLevel LogLevel = ERROR\nvar syslogWriter *syslog.Writer\n\n// SetPrintStackTrace enables/disables dumping the stack upon error logging\nfunc SetPrintStackTrace(shouldPrintStackTrace bool) {\n\tprintStackTrace = shouldPrintStackTrace\n}\n\n// SetLevel sets the global log level. Only entries with level equals or higher than\n// this value will be logged\nfunc SetLevel(logLevel LogLevel) {\n\tglobalLogLevel = logLevel\n}\n\n// GetLevel returns current global log level\nfunc GetLevel() LogLevel {\n\treturn globalLogLevel\n}\n\n// EnableSyslogWriter enables, if possible, writes to syslog. These will execute _in addition_ to normal logging\nfunc EnableSyslogWriter(tag string) (err error) {\n\tsyslogWriter, err = syslog.New(syslog.LOG_ERR, tag)\n\tif err != nil {\n\t\tsyslogWriter = nil\n\t}\n\treturn err\n}\n\n// SetSyslogLevel sets the minimal syslog level. Only entries with level equals or higher than\n// this value will be logged. However, this is also capped by the global log level. That is,\n// messages with lower level than global-log-level will be discarded at any case.\nfunc SetSyslogLevel(logLevel LogLevel) {\n\tsyslogLevel = logLevel\n}\n\n// logFormattedEntry nicely formats and emits a log entry\nfunc logFormattedEntry(logLevel LogLevel, message string, args ...interface{}) string {\n\tif logLevel > globalLogLevel {\n\t\treturn \"\"\n\t}\n\t// if TZ env variable is set, update the timestamp timezone\n\tlocalizedTime := time.Now()\n\ttzLocation := os.Getenv(\"TZ\")\n\tif tzLocation != \"\" {\n\t\tlocation, err := time.LoadLocation(tzLocation)\n\t\tif err == nil { // if invalid tz location was provided, just leave it as the default\n\t\t\tlocalizedTime = time.Now().In(location)\n\t\t}\n\t}\n\n\tmsgArgs := fmt.Sprintf(message, args...)\n\tentryString := fmt.Sprintf(\"%s %s %s\", localizedTime.Format(TimeFormat), logLevel, msgArgs)\n\tfmt.Fprintln(os.Stderr, entryString)\n\n\tif syslogWriter != nil {\n\t\tgo func() error {\n\t\t\tif logLevel > syslogLevel {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tswitch logLevel {\n\t\t\tcase FATAL:\n\t\t\t\treturn syslogWriter.Emerg(msgArgs)\n\t\t\tcase CRITICAL:\n\t\t\t\treturn syslogWriter.Crit(msgArgs)\n\t\t\tcase ERROR:\n\t\t\t\treturn syslogWriter.Err(msgArgs)\n\t\t\tcase WARNING:\n\t\t\t\treturn syslogWriter.Warning(msgArgs)\n\t\t\tcase NOTICE:\n\t\t\t\treturn syslogWriter.Notice(msgArgs)\n\t\t\tcase INFO:\n\t\t\t\treturn syslogWriter.Info(msgArgs)\n\t\t\tcase DEBUG:\n\t\t\t\treturn syslogWriter.Debug(msgArgs)\n\t\t\t}\n\t\t\treturn nil\n\t\t}()\n\t}\n\treturn entryString\n}\n\n// logEntry emits a formatted log entry\nfunc logEntry(logLevel LogLevel, message string, args ...interface{}) string {\n\tentryString := message\n\tfor _, s := range args {\n\t\tentryString += fmt.Sprintf(\" %s\", s)\n\t}\n\treturn logFormattedEntry(logLevel, entryString)\n}\n\n// logErrorEntry emits a log entry based on given error object\nfunc logErrorEntry(logLevel LogLevel, err error) error {\n\tif err == nil {\n\t\t// No error\n\t\treturn nil\n\t}\n\tentryString := fmt.Sprintf(\"%+v\", err)\n\tlogEntry(logLevel, entryString)\n\tif printStackTrace {\n\t\tdebug.PrintStack()\n\t}\n\treturn err\n}\n\nfunc Debug(message string, args ...interface{}) string {\n\treturn logEntry(DEBUG, message, args...)\n}\n\nfunc Debugf(message string, args ...interface{}) string {\n\treturn logFormattedEntry(DEBUG, message, args...)\n}\n\nfunc Info(message string, args ...interface{}) string {\n\treturn logEntry(INFO, message, args...)\n}\n\nfunc Infof(message string, args ...interface{}) string {\n\treturn logFormattedEntry(INFO, message, args...)\n}\n\nfunc Notice(message string, args ...interface{}) string {\n\treturn logEntry(NOTICE, message, args...)\n}\n\nfunc Noticef(message string, args ...interface{}) string {\n\treturn logFormattedEntry(NOTICE, message, args...)\n}\n\nfunc Warning(message string, args ...interface{}) error {\n\treturn errors.New(logEntry(WARNING, message, args...))\n}\n\nfunc Warningf(message string, args ...interface{}) error {\n\treturn errors.New(logFormattedEntry(WARNING, message, args...))\n}\n\nfunc Error(message string, args ...interface{}) error {\n\treturn errors.New(logEntry(ERROR, message, args...))\n}\n\nfunc Errorf(message string, args ...interface{}) error {\n\treturn errors.New(logFormattedEntry(ERROR, message, args...))\n}\n\nfunc Errore(err error) error {\n\treturn logErrorEntry(ERROR, err)\n}\n\nfunc Critical(message string, args ...interface{}) error {\n\treturn errors.New(logEntry(CRITICAL, message, args...))\n}\n\nfunc Criticalf(message string, args ...interface{}) error {\n\treturn errors.New(logFormattedEntry(CRITICAL, message, args...))\n}\n\nfunc Criticale(err error) error {\n\treturn logErrorEntry(CRITICAL, err)\n}\n\n// Fatal emits a FATAL level entry and exists the program\nfunc Fatal(message string, args ...interface{}) error {\n\tlogEntry(FATAL, message, args...)\n\tos.Exit(1)\n\treturn errors.New(logEntry(CRITICAL, message, args...))\n}\n\n// Fatalf emits a FATAL level entry and exists the program\nfunc Fatalf(message string, args ...interface{}) error {\n\tlogFormattedEntry(FATAL, message, args...)\n\tos.Exit(1)\n\treturn errors.New(logFormattedEntry(CRITICAL, message, args...))\n}\n\n// Fatale emits a FATAL level entry and exists the program\nfunc Fatale(err error) error {\n\tlogErrorEntry(FATAL, err)\n\tos.Exit(1)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/openark/golib/sqlutils/dialect.go",
    "content": "/*\n   Copyright 2017 GitHub 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\npackage sqlutils\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n)\n\ntype regexpMap struct {\n\tr           *regexp.Regexp\n\treplacement string\n}\n\nfunc (this *regexpMap) process(text string) (result string) {\n\treturn this.r.ReplaceAllString(text, this.replacement)\n}\n\nfunc rmap(regexpExpression string, replacement string) regexpMap {\n\treturn regexpMap{\n\t\tr:           regexp.MustCompile(regexpSpaces(regexpExpression)),\n\t\treplacement: replacement,\n\t}\n}\n\nfunc regexpSpaces(statement string) string {\n\treturn strings.Replace(statement, \" \", `[\\s]+`, -1)\n}\n\nfunc applyConversions(statement string, conversions []regexpMap) string {\n\tfor _, rmap := range conversions {\n\t\tstatement = rmap.process(statement)\n\t}\n\treturn statement\n}\n"
  },
  {
    "path": "vendor/github.com/openark/golib/sqlutils/sqlite_dialect.go",
    "content": "/*\n   Copyright 2017 GitHub 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// What's this about?\n// This is a brute-force regular-expression based conversion from MySQL syntax to sqlite3 syntax.\n// It is NOT meant to be a general purpose solution and is only expected & confirmed to run on\n// queries issued by orchestrator. There are known limitations to this design.\n// It's not even pretty.\n// In fact...\n// Well, it gets the job done at this time. Call it debt.\n\npackage sqlutils\n\nimport (\n\t\"regexp\"\n)\n\nvar sqlite3CreateTableConversions = []regexpMap{\n\trmap(`(?i) (character set|charset) [\\S]+`, ``),\n\trmap(`(?i)int unsigned`, `int`),\n\trmap(`(?i)int[\\s]*[(][\\s]*([0-9]+)[\\s]*[)] unsigned`, `int`),\n\trmap(`(?i)engine[\\s]*=[\\s]*(innodb|myisam|ndb|memory|tokudb)`, ``),\n\trmap(`(?i)DEFAULT CHARSET[\\s]*=[\\s]*[\\S]+`, ``),\n\trmap(`(?i)[\\S]*int( not null|) auto_increment`, `integer`),\n\trmap(`(?i)comment '[^']*'`, ``),\n\trmap(`(?i)after [\\S]+`, ``),\n\trmap(`(?i)alter table ([\\S]+) add (index|key) ([\\S]+) (.+)`, `create index ${3}_${1} on $1 $4`),\n\trmap(`(?i)alter table ([\\S]+) add unique (index|key) ([\\S]+) (.+)`, `create unique index ${3}_${1} on $1 $4`),\n\trmap(`(?i)([\\S]+) enum[\\s]*([(].*?[)])`, `$1 text check($1 in $2)`),\n\trmap(`(?i)([\\s\\S]+[/][*] sqlite3-skip [*][/][\\s\\S]+)`, ``),\n\trmap(`(?i)timestamp default current_timestamp`, `timestamp default ('')`),\n\trmap(`(?i)timestamp not null default current_timestamp`, `timestamp not null default ('')`),\n\n\trmap(`(?i)add column (.*int) not null[\\s]*$`, `add column $1 not null default 0`),\n\trmap(`(?i)add column (.* text) not null[\\s]*$`, `add column $1 not null default ''`),\n\trmap(`(?i)add column (.* varchar.*) not null[\\s]*$`, `add column $1 not null default ''`),\n}\n\nvar sqlite3InsertConversions = []regexpMap{\n\trmap(`(?i)insert ignore ([\\s\\S]+) on duplicate key update [\\s\\S]+`, `insert or ignore $1`),\n\trmap(`(?i)insert ignore`, `insert or ignore`),\n\trmap(`(?i)now[(][)]`, `datetime('now')`),\n\trmap(`(?i)insert into ([\\s\\S]+) on duplicate key update [\\s\\S]+`, `replace into $1`),\n}\n\nvar sqlite3GeneralConversions = []regexpMap{\n\trmap(`(?i)now[(][)][\\s]*[-][\\s]*interval [?] ([\\w]+)`, `datetime('now', printf('-%d $1', ?))`),\n\trmap(`(?i)now[(][)][\\s]*[+][\\s]*interval [?] ([\\w]+)`, `datetime('now', printf('+%d $1', ?))`),\n\trmap(`(?i)now[(][)][\\s]*[-][\\s]*interval ([0-9.]+) ([\\w]+)`, `datetime('now', '-${1} $2')`),\n\trmap(`(?i)now[(][)][\\s]*[+][\\s]*interval ([0-9.]+) ([\\w]+)`, `datetime('now', '+${1} $2')`),\n\n\trmap(`(?i)[=<>\\s]([\\S]+[.][\\S]+)[\\s]*[-][\\s]*interval [?] ([\\w]+)`, ` datetime($1, printf('-%d $2', ?))`),\n\trmap(`(?i)[=<>\\s]([\\S]+[.][\\S]+)[\\s]*[+][\\s]*interval [?] ([\\w]+)`, ` datetime($1, printf('+%d $2', ?))`),\n\n\trmap(`(?i)unix_timestamp[(][)]`, `strftime('%s', 'now')`),\n\trmap(`(?i)unix_timestamp[(]([^)]+)[)]`, `strftime('%s', $1)`),\n\trmap(`(?i)now[(][)]`, `datetime('now')`),\n\trmap(`(?i)cast[(][\\s]*([\\S]+) as signed[\\s]*[)]`, `cast($1 as integer)`),\n\n\trmap(`(?i)\\bconcat[(][\\s]*([^,)]+)[\\s]*,[\\s]*([^,)]+)[\\s]*[)]`, `($1 || $2)`),\n\trmap(`(?i)\\bconcat[(][\\s]*([^,)]+)[\\s]*,[\\s]*([^,)]+)[\\s]*,[\\s]*([^,)]+)[\\s]*[)]`, `($1 || $2 || $3)`),\n\n\trmap(`(?i) rlike `, ` like `),\n\n\trmap(`(?i)create index([\\s\\S]+)[(][\\s]*[0-9]+[\\s]*[)]([\\s\\S]+)`, `create index ${1}${2}`),\n\trmap(`(?i)drop index ([\\S]+) on ([\\S]+)`, `drop index if exists $1`),\n}\n\nvar (\n\tsqlite3IdentifyCreateTableStatement = regexp.MustCompile(regexpSpaces(`(?i)^[\\s]*create table`))\n\tsqlite3IdentifyCreateIndexStatement = regexp.MustCompile(regexpSpaces(`(?i)^[\\s]*create( unique|) index`))\n\tsqlite3IdentifyDropIndexStatement   = regexp.MustCompile(regexpSpaces(`(?i)^[\\s]*drop index`))\n\tsqlite3IdentifyAlterTableStatement  = regexp.MustCompile(regexpSpaces(`(?i)^[\\s]*alter table`))\n\tsqlite3IdentifyInsertStatement      = regexp.MustCompile(regexpSpaces(`(?i)^[\\s]*(insert|replace)`))\n)\n\nfunc IsInsert(statement string) bool {\n\treturn sqlite3IdentifyInsertStatement.MatchString(statement)\n}\n\nfunc IsCreateTable(statement string) bool {\n\treturn sqlite3IdentifyCreateTableStatement.MatchString(statement)\n}\n\nfunc IsCreateIndex(statement string) bool {\n\treturn sqlite3IdentifyCreateIndexStatement.MatchString(statement)\n}\n\nfunc IsDropIndex(statement string) bool {\n\treturn sqlite3IdentifyDropIndexStatement.MatchString(statement)\n}\n\nfunc IsAlterTable(statement string) bool {\n\treturn sqlite3IdentifyAlterTableStatement.MatchString(statement)\n}\n\nfunc ToSqlite3CreateTable(statement string) string {\n\treturn applyConversions(statement, sqlite3CreateTableConversions)\n}\n\nfunc ToSqlite3Insert(statement string) string {\n\treturn applyConversions(statement, sqlite3InsertConversions)\n}\n\nfunc ToSqlite3Dialect(statement string) (translated string) {\n\tif IsCreateTable(statement) {\n\t\treturn ToSqlite3CreateTable(statement)\n\t}\n\tif IsAlterTable(statement) {\n\t\treturn ToSqlite3CreateTable(statement)\n\t}\n\tstatement = applyConversions(statement, sqlite3GeneralConversions)\n\tif IsInsert(statement) {\n\t\treturn ToSqlite3Insert(statement)\n\t}\n\treturn statement\n}\n"
  },
  {
    "path": "vendor/github.com/openark/golib/sqlutils/sqlutils.go",
    "content": "/*\n   Copyright 2014 Outbrain 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\npackage sqlutils\n\nimport (\n\t\"database/sql\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/openark/golib/log\"\n)\n\nconst DateTimeFormat = \"2006-01-02 15:04:05.999999\"\n\n// RowMap represents one row in a result set. Its objective is to allow\n// for easy, typed getters by column name.\ntype RowMap map[string]CellData\n\n// Cell data is the result of a single (atomic) column in a single row\ntype CellData sql.NullString\n\nfunc (this *CellData) MarshalJSON() ([]byte, error) {\n\tif this.Valid {\n\t\treturn json.Marshal(this.String)\n\t} else {\n\t\treturn json.Marshal(nil)\n\t}\n}\n\n// UnmarshalJSON reds this object from JSON\nfunc (this *CellData) UnmarshalJSON(b []byte) error {\n\tvar s string\n\tif err := json.Unmarshal(b, &s); err != nil {\n\t\treturn err\n\t}\n\t(*this).String = s\n\t(*this).Valid = true\n\n\treturn nil\n}\n\nfunc (this *CellData) NullString() *sql.NullString {\n\treturn (*sql.NullString)(this)\n}\n\n// RowData is the result of a single row, in positioned array format\ntype RowData []CellData\n\n// MarshalJSON will marshal this map as JSON\nfunc (this *RowData) MarshalJSON() ([]byte, error) {\n\tcells := make([](*CellData), len(*this), len(*this))\n\tfor i, val := range *this {\n\t\td := CellData(val)\n\t\tcells[i] = &d\n\t}\n\treturn json.Marshal(cells)\n}\n\nfunc (this *RowData) Args() []interface{} {\n\tresult := make([]interface{}, len(*this))\n\tfor i := range *this {\n\t\tresult[i] = (*(*this)[i].NullString())\n\t}\n\treturn result\n}\n\n// ResultData is an ordered row set of RowData\ntype ResultData []RowData\ntype NamedResultData struct {\n\tColumns []string\n\tData    ResultData\n}\n\nvar EmptyResultData = ResultData{}\n\nfunc (this *RowMap) GetString(key string) string {\n\treturn (*this)[key].String\n}\n\n// GetStringD returns a string from the map, or a default value if the key does not exist\nfunc (this *RowMap) GetStringD(key string, def string) string {\n\tif cell, ok := (*this)[key]; ok {\n\t\treturn cell.String\n\t}\n\treturn def\n}\n\nfunc (this *RowMap) GetInt64(key string) int64 {\n\tres, _ := strconv.ParseInt(this.GetString(key), 10, 0)\n\treturn res\n}\n\nfunc (this *RowMap) GetNullInt64(key string) sql.NullInt64 {\n\ti, err := strconv.ParseInt(this.GetString(key), 10, 0)\n\tif err == nil {\n\t\treturn sql.NullInt64{Int64: i, Valid: true}\n\t} else {\n\t\treturn sql.NullInt64{Valid: false}\n\t}\n}\n\nfunc (this *RowMap) GetInt(key string) int {\n\tres, _ := strconv.Atoi(this.GetString(key))\n\treturn res\n}\n\nfunc (this *RowMap) GetIntD(key string, def int) int {\n\tres, err := strconv.Atoi(this.GetString(key))\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn res\n}\n\nfunc (this *RowMap) GetUint(key string) uint {\n\tres, _ := strconv.ParseUint(this.GetString(key), 10, 0)\n\treturn uint(res)\n}\n\nfunc (this *RowMap) GetUintD(key string, def uint) uint {\n\tres, err := strconv.Atoi(this.GetString(key))\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn uint(res)\n}\n\nfunc (this *RowMap) GetUint64(key string) uint64 {\n\tres, _ := strconv.ParseUint(this.GetString(key), 10, 0)\n\treturn res\n}\n\nfunc (this *RowMap) GetUint64D(key string, def uint64) uint64 {\n\tres, err := strconv.ParseUint(this.GetString(key), 10, 0)\n\tif err != nil {\n\t\treturn def\n\t}\n\treturn uint64(res)\n}\n\nfunc (this *RowMap) GetBool(key string) bool {\n\treturn this.GetInt(key) != 0\n}\n\nfunc (this *RowMap) GetTime(key string) time.Time {\n\tif t, err := time.Parse(DateTimeFormat, this.GetString(key)); err == nil {\n\t\treturn t\n\t}\n\treturn time.Time{}\n}\n\n// knownDBs is a DB cache by uri\nvar knownDBs map[string]*sql.DB = make(map[string]*sql.DB)\nvar knownDBsMutex = &sync.Mutex{}\n\n// GetDB returns a DB instance based on uri.\n// bool result indicates whether the DB was returned from cache; err\nfunc GetGenericDB(driverName, dataSourceName string) (*sql.DB, bool, error) {\n\tknownDBsMutex.Lock()\n\tdefer func() {\n\t\tknownDBsMutex.Unlock()\n\t}()\n\n\tvar exists bool\n\tif _, exists = knownDBs[dataSourceName]; !exists {\n\t\tif db, err := sql.Open(driverName, dataSourceName); err == nil {\n\t\t\tknownDBs[dataSourceName] = db\n\t\t} else {\n\t\t\treturn db, exists, err\n\t\t}\n\t}\n\treturn knownDBs[dataSourceName], exists, nil\n}\n\n// GetDB returns a MySQL DB instance based on uri.\n// bool result indicates whether the DB was returned from cache; err\nfunc GetDB(mysql_uri string) (*sql.DB, bool, error) {\n\treturn GetGenericDB(\"mysql\", mysql_uri)\n}\n\n// GetDB returns a SQLite DB instance based on DB file name.\n// bool result indicates whether the DB was returned from cache; err\nfunc GetSQLiteDB(dbFile string) (*sql.DB, bool, error) {\n\treturn GetGenericDB(\"sqlite3\", dbFile)\n}\n\n// RowToArray is a convenience function, typically not called directly, which maps a\n// single read database row into a NullString\nfunc RowToArray(rows *sql.Rows, columns []string) []CellData {\n\tbuff := make([]interface{}, len(columns))\n\tdata := make([]CellData, len(columns))\n\tfor i, _ := range buff {\n\t\tbuff[i] = data[i].NullString()\n\t}\n\trows.Scan(buff...)\n\treturn data\n}\n\n// ScanRowsToArrays is a convenience function, typically not called directly, which maps rows\n// already read from the databse into arrays of NullString\nfunc ScanRowsToArrays(rows *sql.Rows, on_row func([]CellData) error) error {\n\tcolumns, _ := rows.Columns()\n\tfor rows.Next() {\n\t\tarr := RowToArray(rows, columns)\n\t\terr := on_row(arr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc rowToMap(row []CellData, columns []string) map[string]CellData {\n\tm := make(map[string]CellData)\n\tfor k, data_col := range row {\n\t\tm[columns[k]] = data_col\n\t}\n\treturn m\n}\n\n// ScanRowsToMaps is a convenience function, typically not called directly, which maps rows\n// already read from the databse into RowMap entries.\nfunc ScanRowsToMaps(rows *sql.Rows, on_row func(RowMap) error) error {\n\tcolumns, _ := rows.Columns()\n\terr := ScanRowsToArrays(rows, func(arr []CellData) error {\n\t\tm := rowToMap(arr, columns)\n\t\terr := on_row(m)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n\treturn err\n}\n\n// QueryRowsMap is a convenience function allowing querying a result set while poviding a callback\n// function activated per read row.\nfunc QueryRowsMap(db *sql.DB, query string, on_row func(RowMap) error, args ...interface{}) (err error) {\n\tdefer func() {\n\t\tif derr := recover(); derr != nil {\n\t\t\terr = fmt.Errorf(\"QueryRowsMap unexpected error: %+v\", derr)\n\t\t}\n\t}()\n\n\tvar rows *sql.Rows\n\trows, err = db.Query(query, args...)\n\tif rows != nil {\n\t\tdefer rows.Close()\n\t}\n\tif err != nil && err != sql.ErrNoRows {\n\t\treturn log.Errore(err)\n\t}\n\terr = ScanRowsToMaps(rows, on_row)\n\treturn\n}\n\n// queryResultData returns a raw array of rows for a given query, optionally reading and returning column names\nfunc queryResultData(db *sql.DB, query string, retrieveColumns bool, args ...interface{}) (resultData ResultData, columns []string, err error) {\n\tdefer func() {\n\t\tif derr := recover(); derr != nil {\n\t\t\terr = errors.New(fmt.Sprintf(\"QueryRowsMap unexpected error: %+v\", derr))\n\t\t}\n\t}()\n\n\tvar rows *sql.Rows\n\trows, err = db.Query(query, args...)\n\tdefer rows.Close()\n\tif err != nil && err != sql.ErrNoRows {\n\t\treturn EmptyResultData, columns, err\n\t}\n\tif retrieveColumns {\n\t\t// Don't pay if you don't want to\n\t\tcolumns, _ = rows.Columns()\n\t}\n\tresultData = ResultData{}\n\terr = ScanRowsToArrays(rows, func(rowData []CellData) error {\n\t\tresultData = append(resultData, rowData)\n\t\treturn nil\n\t})\n\treturn resultData, columns, err\n}\n\n// QueryResultData returns a raw array of rows\nfunc QueryResultData(db *sql.DB, query string, args ...interface{}) (ResultData, error) {\n\tresultData, _, err := queryResultData(db, query, false, args...)\n\treturn resultData, err\n}\n\n// QueryResultDataNamed returns a raw array of rows, with column names\nfunc QueryNamedResultData(db *sql.DB, query string, args ...interface{}) (NamedResultData, error) {\n\tresultData, columns, err := queryResultData(db, query, true, args...)\n\treturn NamedResultData{Columns: columns, Data: resultData}, err\n}\n\n// QueryRowsMapBuffered reads data from the database into a buffer, and only then applies the given function per row.\n// This allows the application to take its time with processing the data, albeit consuming as much memory as required by\n// the result set.\nfunc QueryRowsMapBuffered(db *sql.DB, query string, on_row func(RowMap) error, args ...interface{}) error {\n\tresultData, columns, err := queryResultData(db, query, true, args...)\n\tif err != nil {\n\t\t// Already logged\n\t\treturn err\n\t}\n\tfor _, row := range resultData {\n\t\terr = on_row(rowToMap(row, columns))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// ExecNoPrepare executes given query using given args on given DB, without using prepared statements.\nfunc ExecNoPrepare(db *sql.DB, query string, args ...interface{}) (res sql.Result, err error) {\n\tdefer func() {\n\t\tif derr := recover(); derr != nil {\n\t\t\terr = errors.New(fmt.Sprintf(\"ExecNoPrepare unexpected error: %+v\", derr))\n\t\t}\n\t}()\n\n\tres, err = db.Exec(query, args...)\n\tif err != nil {\n\t\tlog.Errore(err)\n\t}\n\treturn res, err\n}\n\n// ExecQuery executes given query using given args on given DB. It will safele prepare, execute and close\n// the statement.\nfunc execInternal(silent bool, db *sql.DB, query string, args ...interface{}) (res sql.Result, err error) {\n\tdefer func() {\n\t\tif derr := recover(); derr != nil {\n\t\t\terr = errors.New(fmt.Sprintf(\"execInternal unexpected error: %+v\", derr))\n\t\t}\n\t}()\n\tvar stmt *sql.Stmt\n\tstmt, err = db.Prepare(query)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer stmt.Close()\n\tres, err = stmt.Exec(args...)\n\tif err != nil && !silent {\n\t\tlog.Errore(err)\n\t}\n\treturn res, err\n}\n\n// Exec executes given query using given args on given DB. It will safele prepare, execute and close\n// the statement.\nfunc Exec(db *sql.DB, query string, args ...interface{}) (sql.Result, error) {\n\treturn execInternal(false, db, query, args...)\n}\n\n// ExecSilently acts like Exec but does not report any error\nfunc ExecSilently(db *sql.DB, query string, args ...interface{}) (sql.Result, error) {\n\treturn execInternal(true, db, query, args...)\n}\n\nfunc InClauseStringValues(terms []string) string {\n\tquoted := []string{}\n\tfor _, s := range terms {\n\t\tquoted = append(quoted, fmt.Sprintf(\"'%s'\", strings.Replace(s, \",\", \"''\", -1)))\n\t}\n\treturn strings.Join(quoted, \", \")\n}\n\n// Convert variable length arguments into arguments array\nfunc Args(args ...interface{}) []interface{} {\n\treturn args\n}\n\nfunc NilIfZero(i int64) interface{} {\n\tif i == 0 {\n\t\treturn nil\n\t}\n\treturn i\n}\n\nfunc ScanTable(db *sql.DB, tableName string) (NamedResultData, error) {\n\tquery := fmt.Sprintf(\"select * from %s\", tableName)\n\treturn QueryNamedResultData(db, query)\n}\n\nfunc WriteTable(db *sql.DB, tableName string, data NamedResultData) (err error) {\n\tif len(data.Data) == 0 {\n\t\treturn nil\n\t}\n\tif len(data.Columns) == 0 {\n\t\treturn nil\n\t}\n\tplaceholders := make([]string, len(data.Columns))\n\tfor i := range placeholders {\n\t\tplaceholders[i] = \"?\"\n\t}\n\tquery := fmt.Sprintf(\n\t\t`replace into %s (%s) values (%s)`,\n\t\ttableName,\n\t\tstrings.Join(data.Columns, \",\"),\n\t\tstrings.Join(placeholders, \",\"),\n\t)\n\tfor _, rowData := range data.Data {\n\t\tif _, execErr := db.Exec(query, rowData.Args()...); execErr != nil {\n\t\t\terr = execErr\n\t\t}\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/.mailmap",
    "content": "Aaron Lehmann <aaronl@vitelus.com> <aaron.lehmann@docker.com>\nDerek McGowan <derek@mcg.dev> <derek@mcgstyle.net>\nStephen J Day <stephen.day@docker.com> <stevvooe@users.noreply.github.com>\nHaibing Zhou <zhouhaibing089@gmail.com>\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/.pullapprove.yml",
    "content": "version: 2\n\nrequirements:\n  signed_off_by:\n    required: true\n\nalways_pending:\n  title_regex: '^WIP'\n  explanation: 'Work in progress...'\n\ngroup_defaults:\n  required: 2\n  approve_by_comment:\n    enabled: true\n    approve_regex: '^LGTM'\n    reject_regex: '^Rejected'\n  reset_on_push:\n    enabled: true\n  author_approval:\n    ignored: true\n  conditions:\n    branches:\n      - master\n\ngroups:\n  go-digest:\n    teams:\n      - go-digest-maintainers\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/.travis.yml",
    "content": "language: go\ngo:\n  - 1.12.x\n  - 1.13.x\n  - master\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/CONTRIBUTING.md",
    "content": "# Contributing to Docker open source projects\n\nWant to hack on this project? Awesome! Here are instructions to get you started.\n\nThis project is a part of the [Docker](https://www.docker.com) project, and follows\nthe same rules and principles. If you're already familiar with the way\nDocker does things, you'll feel right at home.\n\nOtherwise, go read Docker's\n[contributions guidelines](https://github.com/docker/docker/blob/master/CONTRIBUTING.md),\n[issue triaging](https://github.com/docker/docker/blob/master/project/ISSUE-TRIAGE.md),\n[review process](https://github.com/docker/docker/blob/master/project/REVIEWING.md) and\n[branches and tags](https://github.com/docker/docker/blob/master/project/BRANCHES-AND-TAGS.md).\n\nFor an in-depth description of our contribution process, visit the\ncontributors guide: [Understand how to contribute](https://docs.docker.com/opensource/workflow/make-a-contribution/)\n\n### Sign your work\n\nThe sign-off is a simple line at the end of the explanation for the patch. Your\nsignature certifies that you wrote the patch or otherwise have the right to pass\nit on as an open-source patch. The rules are pretty simple: if you can certify\nthe below (from [developercertificate.org](http://developercertificate.org/)):\n\n```\nDeveloper Certificate of Origin\nVersion 1.1\n\nCopyright (C) 2004, 2006 The Linux Foundation and its contributors.\n1 Letterman Drive\nSuite D4700\nSan Francisco, CA, 94129\n\nEveryone is permitted to copy and distribute verbatim copies of this\nlicense document, but changing it is not allowed.\n\n\nDeveloper's Certificate of Origin 1.1\n\nBy making a contribution to this project, I certify that:\n\n(a) The contribution was created in whole or in part by me and I\n    have the right to submit it under the open source license\n    indicated in the file; or\n\n(b) The contribution is based upon previous work that, to the best\n    of my knowledge, is covered under an appropriate open source\n    license and I have the right under that license to submit that\n    work with modifications, whether created in whole or in part\n    by me, under the same open source license (unless I am\n    permitted to submit under a different license), as indicated\n    in the file; or\n\n(c) The contribution was provided directly to me by some other\n    person who certified (a), (b) or (c) and I have not modified\n    it.\n\n(d) I understand and agree that this project and the contribution\n    are public and that a record of the contribution (including all\n    personal information I submit with it, including my sign-off) is\n    maintained indefinitely and may be redistributed consistent with\n    this project or the open source license(s) involved.\n```\n\nThen you just add a line to every git commit message:\n\n    Signed-off-by: Joe Smith <joe.smith@email.com>\n\nUse your real name (sorry, no pseudonyms or anonymous contributions.)\n\nIf you set your `user.name` and `user.email` git configs, you can sign your\ncommit automatically with `git commit -s`.\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        https://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   Copyright 2019, 2020 OCI Contributors\n   Copyright 2016 Docker, 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       https://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": "vendor/github.com/opencontainers/go-digest/LICENSE.docs",
    "content": "Attribution-ShareAlike 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n\twiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More_considerations\n     for the public:\n\twiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-ShareAlike 4.0 International Public\nLicense\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-ShareAlike 4.0 International Public License (\"Public\nLicense\"). To the extent this Public License may be interpreted as a\ncontract, You are granted the Licensed Rights in consideration of Your\nacceptance of these terms and conditions, and the Licensor grants You\nsuch rights in consideration of benefits the Licensor receives from\nmaking the Licensed Material available under these terms and\nconditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. BY-SA Compatible License means a license listed at\n     creativecommons.org/compatiblelicenses, approved by Creative\n     Commons as essentially the equivalent of this Public License.\n\n  d. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  e. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  f. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  g. License Elements means the license attributes listed in the name\n     of a Creative Commons Public License. The License Elements of this\n     Public License are Attribution and ShareAlike.\n\n  h. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  i. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  j. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  k. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  l. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  m. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. Additional offer from the Licensor -- Adapted Material.\n               Every recipient of Adapted Material from You\n               automatically receives an offer from the Licensor to\n               exercise the Licensed Rights in the Adapted Material\n               under the conditions of the Adapter's License You apply.\n\n            c. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n  b. ShareAlike.\n\n     In addition to the conditions in Section 3(a), if You Share\n     Adapted Material You produce, the following conditions also apply.\n\n       1. The Adapter's License You apply must be a Creative Commons\n          license with the same License Elements, this version or\n          later, or a BY-SA Compatible License.\n\n       2. You must include the text of, or the URI or hyperlink to, the\n          Adapter's License You apply. You may satisfy this condition\n          in any reasonable manner based on the medium, means, and\n          context in which You Share Adapted Material.\n\n       3. You may not offer or impose any additional or different terms\n          or conditions on, or apply any Effective Technological\n          Measures to, Adapted Material that restrict exercise of the\n          rights granted under the Adapter's License You apply.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material,\n\n     including for purposes of Section 3(b); and\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public licenses.\nNotwithstanding, Creative Commons may elect to apply one of its public\nlicenses to material it publishes and in those instances will be\nconsidered the \"Licensor.\" Except for the limited purpose of indicating\nthat material is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the public\nlicenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/MAINTAINERS",
    "content": "Derek McGowan <derek@mcgstyle.net> (@dmcgowan)\nStephen Day <stevvooe@gmail.com> (@stevvooe)\nVincent Batts <vbatts@hashbangbash.com> (@vbatts)\nAkihiro Suda <akihiro.suda.cz@hco.ntt.co.jp> (@AkihiroSuda)\nSebastiaan van Stijn <github@gone.nl> (@thaJeztah)\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/README.md",
    "content": "# go-digest\n\n[![GoDoc](https://godoc.org/github.com/opencontainers/go-digest?status.svg)](https://godoc.org/github.com/opencontainers/go-digest) [![Go Report Card](https://goreportcard.com/badge/github.com/opencontainers/go-digest)](https://goreportcard.com/report/github.com/opencontainers/go-digest) [![Build Status](https://travis-ci.org/opencontainers/go-digest.svg?branch=master)](https://travis-ci.org/opencontainers/go-digest)\n\nCommon digest package used across the container ecosystem.\n\nPlease see the [godoc](https://godoc.org/github.com/opencontainers/go-digest) for more information.\n\n# What is a digest?\n\nA digest is just a [hash](https://en.wikipedia.org/wiki/Hash_function).\n\nThe most common use case for a digest is to create a content identifier for use in [Content Addressable Storage](https://en.wikipedia.org/wiki/Content-addressable_storage) systems:\n\n```go\nid := digest.FromBytes([]byte(\"my content\"))\n```\n\nIn the example above, the id can be used to uniquely identify the byte slice \"my content\".\nThis allows two disparate applications to agree on a verifiable identifier without having to trust one another.\n\nAn identifying digest can be verified, as follows:\n\n```go\nif id != digest.FromBytes([]byte(\"my content\")) {\n  return errors.New(\"the content has changed!\")\n}\n```\n\nA `Verifier` type can be used to handle cases where an `io.Reader` makes more sense:\n\n```go\nrd := getContent()\nverifier := id.Verifier()\nio.Copy(verifier, rd)\n\nif !verifier.Verified() {\n  return errors.New(\"the content has changed!\")\n}\n```\n\nUsing [Merkle DAGs](https://en.wikipedia.org/wiki/Merkle_tree), this can power a rich, safe, content distribution system.\n\n# Usage\n\nWhile the [godoc](https://godoc.org/github.com/opencontainers/go-digest) is considered the best resource, a few important items need to be called out when using this package.\n\n1. Make sure to import the hash implementations into your application or the package will panic.\n    You should have something like the following in the main (or other entrypoint) of your application:\n   \n    ```go\n    import (\n        _ \"crypto/sha256\"\n        _ \"crypto/sha512\"\n    )\n    ```\n    This may seem inconvenient but it allows you replace the hash \n    implementations with others, such as https://github.com/stevvooe/resumable.\n \n2. Even though `digest.Digest` may be assemblable as a string, _always_ verify your input with `digest.Parse` or use `Digest.Validate` when accepting untrusted input.\n    While there are measures to avoid common problems, this will ensure you have valid digests in the rest of your application.\n\n3. While alternative encodings of hash values (digests) are possible (for example, base64), this package deals exclusively with hex-encoded digests.\n\n# Stability\n\nThe Go API, at this stage, is considered stable, unless otherwise noted.\n\nAs always, before using a package export, read the [godoc](https://godoc.org/github.com/opencontainers/go-digest).\n\n# Contributing\n\nThis package is considered fairly complete.\nIt has been in production in thousands (millions?) of deployments and is fairly battle-hardened.\nNew additions will be met with skepticism.\nIf you think there is a missing feature, please file a bug clearly describing the problem and the alternatives you tried before submitting a PR.\n\n## Code of Conduct\n\nParticipation in the OpenContainers community is governed by [OpenContainer's Code of Conduct][code-of-conduct].\n\n## Security\n\nIf you find an issue, please follow the [security][security] protocol to report it.\n\n# Copyright and license\n\nCopyright © 2019, 2020 OCI Contributors\nCopyright © 2016 Docker, Inc.\nAll rights reserved, except as follows.\nCode is released under the [Apache 2.0 license](LICENSE).\nThis `README.md` file and the [`CONTRIBUTING.md`](CONTRIBUTING.md) file are licensed under the Creative Commons Attribution 4.0 International License under the terms and conditions set forth in the file [`LICENSE.docs`](LICENSE.docs).\nYou may obtain a duplicate copy of the same license, titled CC BY-SA 4.0, at http://creativecommons.org/licenses/by-sa/4.0/.\n\n[security]: https://github.com/opencontainers/org/blob/master/security\n[code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/algorithm.go",
    "content": "// Copyright 2019, 2020 OCI Contributors\n// Copyright 2017 Docker, 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//     https://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\npackage digest\n\nimport (\n\t\"crypto\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\t\"regexp\"\n)\n\n// Algorithm identifies and implementation of a digester by an identifier.\n// Note the that this defines both the hash algorithm used and the string\n// encoding.\ntype Algorithm string\n\n// supported digest types\nconst (\n\tSHA256 Algorithm = \"sha256\" // sha256 with hex encoding (lower case only)\n\tSHA384 Algorithm = \"sha384\" // sha384 with hex encoding (lower case only)\n\tSHA512 Algorithm = \"sha512\" // sha512 with hex encoding (lower case only)\n\n\t// Canonical is the primary digest algorithm used with the distribution\n\t// project. Other digests may be used but this one is the primary storage\n\t// digest.\n\tCanonical = SHA256\n)\n\nvar (\n\t// TODO(stevvooe): Follow the pattern of the standard crypto package for\n\t// registration of digests. Effectively, we are a registerable set and\n\t// common symbol access.\n\n\t// algorithms maps values to hash.Hash implementations. Other algorithms\n\t// may be available but they cannot be calculated by the digest package.\n\talgorithms = map[Algorithm]crypto.Hash{\n\t\tSHA256: crypto.SHA256,\n\t\tSHA384: crypto.SHA384,\n\t\tSHA512: crypto.SHA512,\n\t}\n\n\t// anchoredEncodedRegexps contains anchored regular expressions for hex-encoded digests.\n\t// Note that /A-F/ disallowed.\n\tanchoredEncodedRegexps = map[Algorithm]*regexp.Regexp{\n\t\tSHA256: regexp.MustCompile(`^[a-f0-9]{64}$`),\n\t\tSHA384: regexp.MustCompile(`^[a-f0-9]{96}$`),\n\t\tSHA512: regexp.MustCompile(`^[a-f0-9]{128}$`),\n\t}\n)\n\n// Available returns true if the digest type is available for use. If this\n// returns false, Digester and Hash will return nil.\nfunc (a Algorithm) Available() bool {\n\th, ok := algorithms[a]\n\tif !ok {\n\t\treturn false\n\t}\n\n\t// check availability of the hash, as well\n\treturn h.Available()\n}\n\nfunc (a Algorithm) String() string {\n\treturn string(a)\n}\n\n// Size returns number of bytes returned by the hash.\nfunc (a Algorithm) Size() int {\n\th, ok := algorithms[a]\n\tif !ok {\n\t\treturn 0\n\t}\n\treturn h.Size()\n}\n\n// Set implemented to allow use of Algorithm as a command line flag.\nfunc (a *Algorithm) Set(value string) error {\n\tif value == \"\" {\n\t\t*a = Canonical\n\t} else {\n\t\t// just do a type conversion, support is queried with Available.\n\t\t*a = Algorithm(value)\n\t}\n\n\tif !a.Available() {\n\t\treturn ErrDigestUnsupported\n\t}\n\n\treturn nil\n}\n\n// Digester returns a new digester for the specified algorithm. If the algorithm\n// does not have a digester implementation, nil will be returned. This can be\n// checked by calling Available before calling Digester.\nfunc (a Algorithm) Digester() Digester {\n\treturn &digester{\n\t\talg:  a,\n\t\thash: a.Hash(),\n\t}\n}\n\n// Hash returns a new hash as used by the algorithm. If not available, the\n// method will panic. Check Algorithm.Available() before calling.\nfunc (a Algorithm) Hash() hash.Hash {\n\tif !a.Available() {\n\t\t// Empty algorithm string is invalid\n\t\tif a == \"\" {\n\t\t\tpanic(fmt.Sprintf(\"empty digest algorithm, validate before calling Algorithm.Hash()\"))\n\t\t}\n\n\t\t// NOTE(stevvooe): A missing hash is usually a programming error that\n\t\t// must be resolved at compile time. We don't import in the digest\n\t\t// package to allow users to choose their hash implementation (such as\n\t\t// when using stevvooe/resumable or a hardware accelerated package).\n\t\t//\n\t\t// Applications that may want to resolve the hash at runtime should\n\t\t// call Algorithm.Available before call Algorithm.Hash().\n\t\tpanic(fmt.Sprintf(\"%v not available (make sure it is imported)\", a))\n\t}\n\n\treturn algorithms[a].New()\n}\n\n// Encode encodes the raw bytes of a digest, typically from a hash.Hash, into\n// the encoded portion of the digest.\nfunc (a Algorithm) Encode(d []byte) string {\n\t// TODO(stevvooe): Currently, all algorithms use a hex encoding. When we\n\t// add support for back registration, we can modify this accordingly.\n\treturn fmt.Sprintf(\"%x\", d)\n}\n\n// FromReader returns the digest of the reader using the algorithm.\nfunc (a Algorithm) FromReader(rd io.Reader) (Digest, error) {\n\tdigester := a.Digester()\n\n\tif _, err := io.Copy(digester.Hash(), rd); err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn digester.Digest(), nil\n}\n\n// FromBytes digests the input and returns a Digest.\nfunc (a Algorithm) FromBytes(p []byte) Digest {\n\tdigester := a.Digester()\n\n\tif _, err := digester.Hash().Write(p); err != nil {\n\t\t// Writes to a Hash should never fail. None of the existing\n\t\t// hash implementations in the stdlib or hashes vendored\n\t\t// here can return errors from Write. Having a panic in this\n\t\t// condition instead of having FromBytes return an error value\n\t\t// avoids unnecessary error handling paths in all callers.\n\t\tpanic(\"write to hash function returned error: \" + err.Error())\n\t}\n\n\treturn digester.Digest()\n}\n\n// FromString digests the string input and returns a Digest.\nfunc (a Algorithm) FromString(s string) Digest {\n\treturn a.FromBytes([]byte(s))\n}\n\n// Validate validates the encoded portion string\nfunc (a Algorithm) Validate(encoded string) error {\n\tr, ok := anchoredEncodedRegexps[a]\n\tif !ok {\n\t\treturn ErrDigestUnsupported\n\t}\n\t// Digests much always be hex-encoded, ensuring that their hex portion will\n\t// always be size*2\n\tif a.Size()*2 != len(encoded) {\n\t\treturn ErrDigestInvalidLength\n\t}\n\tif r.MatchString(encoded) {\n\t\treturn nil\n\t}\n\treturn ErrDigestInvalidFormat\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/digest.go",
    "content": "// Copyright 2019, 2020 OCI Contributors\n// Copyright 2017 Docker, 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//     https://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\npackage digest\n\nimport (\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// Digest allows simple protection of hex formatted digest strings, prefixed\n// by their algorithm. Strings of type Digest have some guarantee of being in\n// the correct format and it provides quick access to the components of a\n// digest string.\n//\n// The following is an example of the contents of Digest types:\n//\n// \tsha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc\n//\n// This allows to abstract the digest behind this type and work only in those\n// terms.\ntype Digest string\n\n// NewDigest returns a Digest from alg and a hash.Hash object.\nfunc NewDigest(alg Algorithm, h hash.Hash) Digest {\n\treturn NewDigestFromBytes(alg, h.Sum(nil))\n}\n\n// NewDigestFromBytes returns a new digest from the byte contents of p.\n// Typically, this can come from hash.Hash.Sum(...) or xxx.SumXXX(...)\n// functions. This is also useful for rebuilding digests from binary\n// serializations.\nfunc NewDigestFromBytes(alg Algorithm, p []byte) Digest {\n\treturn NewDigestFromEncoded(alg, alg.Encode(p))\n}\n\n// NewDigestFromHex is deprecated. Please use NewDigestFromEncoded.\nfunc NewDigestFromHex(alg, hex string) Digest {\n\treturn NewDigestFromEncoded(Algorithm(alg), hex)\n}\n\n// NewDigestFromEncoded returns a Digest from alg and the encoded digest.\nfunc NewDigestFromEncoded(alg Algorithm, encoded string) Digest {\n\treturn Digest(fmt.Sprintf(\"%s:%s\", alg, encoded))\n}\n\n// DigestRegexp matches valid digest types.\nvar DigestRegexp = regexp.MustCompile(`[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+`)\n\n// DigestRegexpAnchored matches valid digest types, anchored to the start and end of the match.\nvar DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`)\n\nvar (\n\t// ErrDigestInvalidFormat returned when digest format invalid.\n\tErrDigestInvalidFormat = fmt.Errorf(\"invalid checksum digest format\")\n\n\t// ErrDigestInvalidLength returned when digest has invalid length.\n\tErrDigestInvalidLength = fmt.Errorf(\"invalid checksum digest length\")\n\n\t// ErrDigestUnsupported returned when the digest algorithm is unsupported.\n\tErrDigestUnsupported = fmt.Errorf(\"unsupported digest algorithm\")\n)\n\n// Parse parses s and returns the validated digest object. An error will\n// be returned if the format is invalid.\nfunc Parse(s string) (Digest, error) {\n\td := Digest(s)\n\treturn d, d.Validate()\n}\n\n// FromReader consumes the content of rd until io.EOF, returning canonical digest.\nfunc FromReader(rd io.Reader) (Digest, error) {\n\treturn Canonical.FromReader(rd)\n}\n\n// FromBytes digests the input and returns a Digest.\nfunc FromBytes(p []byte) Digest {\n\treturn Canonical.FromBytes(p)\n}\n\n// FromString digests the input and returns a Digest.\nfunc FromString(s string) Digest {\n\treturn Canonical.FromString(s)\n}\n\n// Validate checks that the contents of d is a valid digest, returning an\n// error if not.\nfunc (d Digest) Validate() error {\n\ts := string(d)\n\ti := strings.Index(s, \":\")\n\tif i <= 0 || i+1 == len(s) {\n\t\treturn ErrDigestInvalidFormat\n\t}\n\talgorithm, encoded := Algorithm(s[:i]), s[i+1:]\n\tif !algorithm.Available() {\n\t\tif !DigestRegexpAnchored.MatchString(s) {\n\t\t\treturn ErrDigestInvalidFormat\n\t\t}\n\t\treturn ErrDigestUnsupported\n\t}\n\treturn algorithm.Validate(encoded)\n}\n\n// Algorithm returns the algorithm portion of the digest. This will panic if\n// the underlying digest is not in a valid format.\nfunc (d Digest) Algorithm() Algorithm {\n\treturn Algorithm(d[:d.sepIndex()])\n}\n\n// Verifier returns a writer object that can be used to verify a stream of\n// content against the digest. If the digest is invalid, the method will panic.\nfunc (d Digest) Verifier() Verifier {\n\treturn hashVerifier{\n\t\thash:   d.Algorithm().Hash(),\n\t\tdigest: d,\n\t}\n}\n\n// Encoded returns the encoded portion of the digest. This will panic if the\n// underlying digest is not in a valid format.\nfunc (d Digest) Encoded() string {\n\treturn string(d[d.sepIndex()+1:])\n}\n\n// Hex is deprecated. Please use Digest.Encoded.\nfunc (d Digest) Hex() string {\n\treturn d.Encoded()\n}\n\nfunc (d Digest) String() string {\n\treturn string(d)\n}\n\nfunc (d Digest) sepIndex() int {\n\ti := strings.Index(string(d), \":\")\n\n\tif i < 0 {\n\t\tpanic(fmt.Sprintf(\"no ':' separator in digest %q\", d))\n\t}\n\n\treturn i\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/digester.go",
    "content": "// Copyright 2019, 2020 OCI Contributors\n// Copyright 2017 Docker, 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//     https://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\npackage digest\n\nimport \"hash\"\n\n// Digester calculates the digest of written data. Writes should go directly\n// to the return value of Hash, while calling Digest will return the current\n// value of the digest.\ntype Digester interface {\n\tHash() hash.Hash // provides direct access to underlying hash instance.\n\tDigest() Digest\n}\n\n// digester provides a simple digester definition that embeds a hasher.\ntype digester struct {\n\talg  Algorithm\n\thash hash.Hash\n}\n\nfunc (d *digester) Hash() hash.Hash {\n\treturn d.hash\n}\n\nfunc (d *digester) Digest() Digest {\n\treturn NewDigest(d.alg, d.hash)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/doc.go",
    "content": "// Copyright 2019, 2020 OCI Contributors\n// Copyright 2017 Docker, 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//     https://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// Package digest provides a generalized type to opaquely represent message\n// digests and their operations within the registry. The Digest type is\n// designed to serve as a flexible identifier in a content-addressable system.\n// More importantly, it provides tools and wrappers to work with\n// hash.Hash-based digests with little effort.\n//\n// Basics\n//\n// The format of a digest is simply a string with two parts, dubbed the\n// \"algorithm\" and the \"digest\", separated by a colon:\n//\n// \t<algorithm>:<digest>\n//\n// An example of a sha256 digest representation follows:\n//\n// \tsha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc\n//\n// The \"algorithm\" portion defines both the hashing algorithm used to calculate\n// the digest and the encoding of the resulting digest, which defaults to \"hex\"\n// if not otherwise specified. Currently, all supported algorithms have their\n// digests encoded in hex strings.\n//\n// In the example above, the string \"sha256\" is the algorithm and the hex bytes\n// are the \"digest\".\n//\n// Because the Digest type is simply a string, once a valid Digest is\n// obtained, comparisons are cheap, quick and simple to express with the\n// standard equality operator.\n//\n// Verification\n//\n// The main benefit of using the Digest type is simple verification against a\n// given digest. The Verifier interface, modeled after the stdlib hash.Hash\n// interface, provides a common write sink for digest verification. After\n// writing is complete, calling the Verifier.Verified method will indicate\n// whether or not the stream of bytes matches the target digest.\n//\n// Missing Features\n//\n// In addition to the above, we intend to add the following features to this\n// package:\n//\n// 1. A Digester type that supports write sink digest calculation.\n//\n// 2. Suspend and resume of ongoing digest calculations to support efficient digest verification in the registry.\n//\npackage digest\n"
  },
  {
    "path": "vendor/github.com/opencontainers/go-digest/verifiers.go",
    "content": "// Copyright 2019, 2020 OCI Contributors\n// Copyright 2017 Docker, 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//     https://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\npackage digest\n\nimport (\n\t\"hash\"\n\t\"io\"\n)\n\n// Verifier presents a general verification interface to be used with message\n// digests and other byte stream verifications. Users instantiate a Verifier\n// from one of the various methods, write the data under test to it then check\n// the result with the Verified method.\ntype Verifier interface {\n\tio.Writer\n\n\t// Verified will return true if the content written to Verifier matches\n\t// the digest.\n\tVerified() bool\n}\n\ntype hashVerifier struct {\n\tdigest Digest\n\thash   hash.Hash\n}\n\nfunc (hv hashVerifier) Write(p []byte) (n int, err error) {\n\treturn hv.hash.Write(p)\n}\n\nfunc (hv hashVerifier) Verified() bool {\n\treturn hv.digest == NewDigest(hv.digest.Algorithm(), hv.hash)\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   Copyright 2016 The Linux Foundation.\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": "vendor/github.com/opencontainers/image-spec/specs-go/v1/annotations.go",
    "content": "// Copyright 2016 The Linux Foundation\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\npackage v1\n\nconst (\n\t// AnnotationCreated is the annotation key for the date and time on which the image was built (date-time string as defined by RFC 3339).\n\tAnnotationCreated = \"org.opencontainers.image.created\"\n\n\t// AnnotationAuthors is the annotation key for the contact details of the people or organization responsible for the image (freeform string).\n\tAnnotationAuthors = \"org.opencontainers.image.authors\"\n\n\t// AnnotationURL is the annotation key for the URL to find more information on the image.\n\tAnnotationURL = \"org.opencontainers.image.url\"\n\n\t// AnnotationDocumentation is the annotation key for the URL to get documentation on the image.\n\tAnnotationDocumentation = \"org.opencontainers.image.documentation\"\n\n\t// AnnotationSource is the annotation key for the URL to get source code for building the image.\n\tAnnotationSource = \"org.opencontainers.image.source\"\n\n\t// AnnotationVersion is the annotation key for the version of the packaged software.\n\t// The version MAY match a label or tag in the source code repository.\n\t// The version MAY be Semantic versioning-compatible.\n\tAnnotationVersion = \"org.opencontainers.image.version\"\n\n\t// AnnotationRevision is the annotation key for the source control revision identifier for the packaged software.\n\tAnnotationRevision = \"org.opencontainers.image.revision\"\n\n\t// AnnotationVendor is the annotation key for the name of the distributing entity, organization or individual.\n\tAnnotationVendor = \"org.opencontainers.image.vendor\"\n\n\t// AnnotationLicenses is the annotation key for the license(s) under which contained software is distributed as an SPDX License Expression.\n\tAnnotationLicenses = \"org.opencontainers.image.licenses\"\n\n\t// AnnotationRefName is the annotation key for the name of the reference for a target.\n\t// SHOULD only be considered valid when on descriptors on `index.json` within image layout.\n\tAnnotationRefName = \"org.opencontainers.image.ref.name\"\n\n\t// AnnotationTitle is the annotation key for the human-readable title of the image.\n\tAnnotationTitle = \"org.opencontainers.image.title\"\n\n\t// AnnotationDescription is the annotation key for the human-readable description of the software packaged in the image.\n\tAnnotationDescription = \"org.opencontainers.image.description\"\n\n\t// AnnotationBaseImageDigest is the annotation key for the digest of the image's base image.\n\tAnnotationBaseImageDigest = \"org.opencontainers.image.base.digest\"\n\n\t// AnnotationBaseImageName is the annotation key for the image reference of the image's base image.\n\tAnnotationBaseImageName = \"org.opencontainers.image.base.name\"\n)\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go",
    "content": "// Copyright 2016 The Linux Foundation\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\npackage v1\n\nimport (\n\t\"time\"\n\n\tdigest \"github.com/opencontainers/go-digest\"\n)\n\n// ImageConfig defines the execution parameters which should be used as a base when running a container using an image.\ntype ImageConfig struct {\n\t// User defines the username or UID which the process in the container should run as.\n\tUser string `json:\"User,omitempty\"`\n\n\t// ExposedPorts a set of ports to expose from a container running this image.\n\tExposedPorts map[string]struct{} `json:\"ExposedPorts,omitempty\"`\n\n\t// Env is a list of environment variables to be used in a container.\n\tEnv []string `json:\"Env,omitempty\"`\n\n\t// Entrypoint defines a list of arguments to use as the command to execute when the container starts.\n\tEntrypoint []string `json:\"Entrypoint,omitempty\"`\n\n\t// Cmd defines the default arguments to the entrypoint of the container.\n\tCmd []string `json:\"Cmd,omitempty\"`\n\n\t// Volumes is a set of directories describing where the process is likely write data specific to a container instance.\n\tVolumes map[string]struct{} `json:\"Volumes,omitempty\"`\n\n\t// WorkingDir sets the current working directory of the entrypoint process in the container.\n\tWorkingDir string `json:\"WorkingDir,omitempty\"`\n\n\t// Labels contains arbitrary metadata for the container.\n\tLabels map[string]string `json:\"Labels,omitempty\"`\n\n\t// StopSignal contains the system call signal that will be sent to the container to exit.\n\tStopSignal string `json:\"StopSignal,omitempty\"`\n\n\t// ArgsEscaped\n\t//\n\t// Deprecated: This field is present only for legacy compatibility with\n\t// Docker and should not be used by new image builders.  It is used by Docker\n\t// for Windows images to indicate that the `Entrypoint` or `Cmd` or both,\n\t// contains only a single element array, that is a pre-escaped, and combined\n\t// into a single string `CommandLine`. If `true` the value in `Entrypoint` or\n\t// `Cmd` should be used as-is to avoid double escaping.\n\t// https://github.com/opencontainers/image-spec/pull/892\n\tArgsEscaped bool `json:\"ArgsEscaped,omitempty\"`\n}\n\n// RootFS describes a layer content addresses\ntype RootFS struct {\n\t// Type is the type of the rootfs.\n\tType string `json:\"type\"`\n\n\t// DiffIDs is an array of layer content hashes (DiffIDs), in order from bottom-most to top-most.\n\tDiffIDs []digest.Digest `json:\"diff_ids\"`\n}\n\n// History describes the history of a layer.\ntype History struct {\n\t// Created is the combined date and time at which the layer was created, formatted as defined by RFC 3339, section 5.6.\n\tCreated *time.Time `json:\"created,omitempty\"`\n\n\t// CreatedBy is the command which created the layer.\n\tCreatedBy string `json:\"created_by,omitempty\"`\n\n\t// Author is the author of the build point.\n\tAuthor string `json:\"author,omitempty\"`\n\n\t// Comment is a custom message set when creating the layer.\n\tComment string `json:\"comment,omitempty\"`\n\n\t// EmptyLayer is used to mark if the history item created a filesystem diff.\n\tEmptyLayer bool `json:\"empty_layer,omitempty\"`\n}\n\n// Image is the JSON structure which describes some basic information about the image.\n// This provides the `application/vnd.oci.image.config.v1+json` mediatype when marshalled to JSON.\ntype Image struct {\n\t// Created is the combined date and time at which the image was created, formatted as defined by RFC 3339, section 5.6.\n\tCreated *time.Time `json:\"created,omitempty\"`\n\n\t// Author defines the name and/or email address of the person or entity which created and is responsible for maintaining the image.\n\tAuthor string `json:\"author,omitempty\"`\n\n\t// Platform describes the platform which the image in the manifest runs on.\n\tPlatform\n\n\t// Config defines the execution parameters which should be used as a base when running a container using the image.\n\tConfig ImageConfig `json:\"config,omitempty\"`\n\n\t// RootFS references the layer content addresses used by the image.\n\tRootFS RootFS `json:\"rootfs\"`\n\n\t// History describes the history of each layer.\n\tHistory []History `json:\"history,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go",
    "content": "// Copyright 2016-2022 The Linux Foundation\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\npackage v1\n\nimport digest \"github.com/opencontainers/go-digest\"\n\n// Descriptor describes the disposition of targeted content.\n// This structure provides `application/vnd.oci.descriptor.v1+json` mediatype\n// when marshalled to JSON.\ntype Descriptor struct {\n\t// MediaType is the media type of the object this schema refers to.\n\tMediaType string `json:\"mediaType\"`\n\n\t// Digest is the digest of the targeted content.\n\tDigest digest.Digest `json:\"digest\"`\n\n\t// Size specifies the size in bytes of the blob.\n\tSize int64 `json:\"size\"`\n\n\t// URLs specifies a list of URLs from which this object MAY be downloaded\n\tURLs []string `json:\"urls,omitempty\"`\n\n\t// Annotations contains arbitrary metadata relating to the targeted content.\n\tAnnotations map[string]string `json:\"annotations,omitempty\"`\n\n\t// Data is an embedding of the targeted content. This is encoded as a base64\n\t// string when marshalled to JSON (automatically, by encoding/json). If\n\t// present, Data can be used directly to avoid fetching the targeted content.\n\tData []byte `json:\"data,omitempty\"`\n\n\t// Platform describes the platform which the image in the manifest runs on.\n\t//\n\t// This should only be used when referring to a manifest.\n\tPlatform *Platform `json:\"platform,omitempty\"`\n\n\t// ArtifactType is the IANA media type of this artifact.\n\tArtifactType string `json:\"artifactType,omitempty\"`\n}\n\n// Platform describes the platform which the image in the manifest runs on.\ntype Platform struct {\n\t// Architecture field specifies the CPU architecture, for example\n\t// `amd64` or `ppc64le`.\n\tArchitecture string `json:\"architecture\"`\n\n\t// OS specifies the operating system, for example `linux` or `windows`.\n\tOS string `json:\"os\"`\n\n\t// OSVersion is an optional field specifying the operating system\n\t// version, for example on Windows `10.0.14393.1066`.\n\tOSVersion string `json:\"os.version,omitempty\"`\n\n\t// OSFeatures is an optional field specifying an array of strings,\n\t// each listing a required OS feature (for example on Windows `win32k`).\n\tOSFeatures []string `json:\"os.features,omitempty\"`\n\n\t// Variant is an optional field specifying a variant of the CPU, for\n\t// example `v7` to specify ARMv7 when architecture is `arm`.\n\tVariant string `json:\"variant,omitempty\"`\n}\n\n// DescriptorEmptyJSON is the descriptor of a blob with content of `{}`.\nvar DescriptorEmptyJSON = Descriptor{\n\tMediaType: MediaTypeEmptyJSON,\n\tDigest:    `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a`,\n\tSize:      2,\n\tData:      []byte(`{}`),\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/v1/index.go",
    "content": "// Copyright 2016 The Linux Foundation\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\npackage v1\n\nimport \"github.com/opencontainers/image-spec/specs-go\"\n\n// Index references manifests for various platforms.\n// This structure provides `application/vnd.oci.image.index.v1+json` mediatype when marshalled to JSON.\ntype Index struct {\n\tspecs.Versioned\n\n\t// MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.index.v1+json`\n\tMediaType string `json:\"mediaType,omitempty\"`\n\n\t// ArtifactType specifies the IANA media type of artifact when the manifest is used for an artifact.\n\tArtifactType string `json:\"artifactType,omitempty\"`\n\n\t// Manifests references platform specific manifests.\n\tManifests []Descriptor `json:\"manifests\"`\n\n\t// Subject is an optional link from the image manifest to another manifest forming an association between the image manifest and the other manifest.\n\tSubject *Descriptor `json:\"subject,omitempty\"`\n\n\t// Annotations contains arbitrary metadata for the image index.\n\tAnnotations map[string]string `json:\"annotations,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go",
    "content": "// Copyright 2016 The Linux Foundation\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\npackage v1\n\nconst (\n\t// ImageLayoutFile is the file name containing ImageLayout in an OCI Image Layout\n\tImageLayoutFile = \"oci-layout\"\n\t// ImageLayoutVersion is the version of ImageLayout\n\tImageLayoutVersion = \"1.0.0\"\n\t// ImageIndexFile is the file name of the entry point for references and descriptors in an OCI Image Layout\n\tImageIndexFile = \"index.json\"\n\t// ImageBlobsDir is the directory name containing content addressable blobs in an OCI Image Layout\n\tImageBlobsDir = \"blobs\"\n)\n\n// ImageLayout is the structure in the \"oci-layout\" file, found in the root\n// of an OCI Image-layout directory.\ntype ImageLayout struct {\n\tVersion string `json:\"imageLayoutVersion\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go",
    "content": "// Copyright 2016-2022 The Linux Foundation\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\npackage v1\n\nimport \"github.com/opencontainers/image-spec/specs-go\"\n\n// Manifest provides `application/vnd.oci.image.manifest.v1+json` mediatype structure when marshalled to JSON.\ntype Manifest struct {\n\tspecs.Versioned\n\n\t// MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.manifest.v1+json`\n\tMediaType string `json:\"mediaType,omitempty\"`\n\n\t// ArtifactType specifies the IANA media type of artifact when the manifest is used for an artifact.\n\tArtifactType string `json:\"artifactType,omitempty\"`\n\n\t// Config references a configuration object for a container, by digest.\n\t// The referenced configuration object is a JSON blob that the runtime uses to set up the container.\n\tConfig Descriptor `json:\"config\"`\n\n\t// Layers is an indexed list of layers referenced by the manifest.\n\tLayers []Descriptor `json:\"layers\"`\n\n\t// Subject is an optional link from the image manifest to another manifest forming an association between the image manifest and the other manifest.\n\tSubject *Descriptor `json:\"subject,omitempty\"`\n\n\t// Annotations contains arbitrary metadata for the image manifest.\n\tAnnotations map[string]string `json:\"annotations,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go",
    "content": "// Copyright 2016 The Linux Foundation\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\npackage v1\n\nconst (\n\t// MediaTypeDescriptor specifies the media type for a content descriptor.\n\tMediaTypeDescriptor = \"application/vnd.oci.descriptor.v1+json\"\n\n\t// MediaTypeLayoutHeader specifies the media type for the oci-layout.\n\tMediaTypeLayoutHeader = \"application/vnd.oci.layout.header.v1+json\"\n\n\t// MediaTypeImageIndex specifies the media type for an image index.\n\tMediaTypeImageIndex = \"application/vnd.oci.image.index.v1+json\"\n\n\t// MediaTypeImageManifest specifies the media type for an image manifest.\n\tMediaTypeImageManifest = \"application/vnd.oci.image.manifest.v1+json\"\n\n\t// MediaTypeImageConfig specifies the media type for the image configuration.\n\tMediaTypeImageConfig = \"application/vnd.oci.image.config.v1+json\"\n\n\t// MediaTypeEmptyJSON specifies the media type for an unused blob containing the value \"{}\".\n\tMediaTypeEmptyJSON = \"application/vnd.oci.empty.v1+json\"\n)\n\nconst (\n\t// MediaTypeImageLayer is the media type used for layers referenced by the manifest.\n\tMediaTypeImageLayer = \"application/vnd.oci.image.layer.v1.tar\"\n\n\t// MediaTypeImageLayerGzip is the media type used for gzipped layers\n\t// referenced by the manifest.\n\tMediaTypeImageLayerGzip = \"application/vnd.oci.image.layer.v1.tar+gzip\"\n\n\t// MediaTypeImageLayerZstd is the media type used for zstd compressed\n\t// layers referenced by the manifest.\n\tMediaTypeImageLayerZstd = \"application/vnd.oci.image.layer.v1.tar+zstd\"\n)\n\n// Non-distributable layer media-types.\n//\n// Deprecated: Non-distributable layers are deprecated, and not recommended\n// for future use. Implementations SHOULD NOT produce new non-distributable\n// layers.\n// https://github.com/opencontainers/image-spec/pull/965\nconst (\n\t// MediaTypeImageLayerNonDistributable is the media type for layers referenced by\n\t// the manifest but with distribution restrictions.\n\t//\n\t// Deprecated: Non-distributable layers are deprecated, and not recommended\n\t// for future use. Implementations SHOULD NOT produce new non-distributable\n\t// layers.\n\t// https://github.com/opencontainers/image-spec/pull/965\n\tMediaTypeImageLayerNonDistributable = \"application/vnd.oci.image.layer.nondistributable.v1.tar\"\n\n\t// MediaTypeImageLayerNonDistributableGzip is the media type for\n\t// gzipped layers referenced by the manifest but with distribution\n\t// restrictions.\n\t//\n\t// Deprecated: Non-distributable layers are deprecated, and not recommended\n\t// for future use. Implementations SHOULD NOT produce new non-distributable\n\t// layers.\n\t// https://github.com/opencontainers/image-spec/pull/965\n\tMediaTypeImageLayerNonDistributableGzip = \"application/vnd.oci.image.layer.nondistributable.v1.tar+gzip\"\n\n\t// MediaTypeImageLayerNonDistributableZstd is the media type for zstd\n\t// compressed layers referenced by the manifest but with distribution\n\t// restrictions.\n\t//\n\t// Deprecated: Non-distributable layers are deprecated, and not recommended\n\t// for future use. Implementations SHOULD NOT produce new non-distributable\n\t// layers.\n\t// https://github.com/opencontainers/image-spec/pull/965\n\tMediaTypeImageLayerNonDistributableZstd = \"application/vnd.oci.image.layer.nondistributable.v1.tar+zstd\"\n)\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/version.go",
    "content": "// Copyright 2016 The Linux Foundation\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\npackage specs\n\nimport \"fmt\"\n\nconst (\n\t// VersionMajor is for an API incompatible changes\n\tVersionMajor = 1\n\t// VersionMinor is for functionality in a backwards-compatible manner\n\tVersionMinor = 1\n\t// VersionPatch is for backwards-compatible bug fixes\n\tVersionPatch = 1\n\n\t// VersionDev indicates development branch. Releases will be empty string.\n\tVersionDev = \"\"\n)\n\n// Version is the specification version that the package types support.\nvar Version = fmt.Sprintf(\"%d.%d.%d%s\", VersionMajor, VersionMinor, VersionPatch, VersionDev)\n"
  },
  {
    "path": "vendor/github.com/opencontainers/image-spec/specs-go/versioned.go",
    "content": "// Copyright 2016 The Linux Foundation\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\npackage specs\n\n// Versioned provides a struct with the manifest schemaVersion and mediaType.\n// Incoming content with unknown schema version can be decoded against this\n// struct to check the version.\ntype Versioned struct {\n\t// SchemaVersion is the image manifest schema that this image follows\n\tSchemaVersion int `json:\"schemaVersion\"`\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n.idea\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/.travis.yml",
    "content": "arch:\n  - amd64\n\nlanguage: go\ngo_import_path: github.com/pingcap/errors\ngo:\n  - 1.13.x\n  - stable\n\nscript:\n  - go test -v ./...\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/LICENSE",
    "content": "Copyright (c) 2015, Dave Cheney <dave@cheney.net>\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 notice, this\n  list of conditions and the following disclaimer.\n\n* 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": "vendor/github.com/pingcap/errors/README.md",
    "content": "# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge)\n\nPackage errors provides simple error handling primitives.\n\n`go get github.com/pingcap/errors`\n\nThe traditional error handling idiom in Go is roughly akin to\n```go\nif err != nil {\n        return err\n}\n```\nwhich applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.\n\n## Adding context to an error\n\nThe errors.Wrap function returns a new error that adds context to the original error. For example\n```go\n_, err := ioutil.ReadAll(r)\nif err != nil {\n        return errors.Wrap(err, \"read failed\")\n}\n```\n## Retrieving the cause of an error\n\nUsing `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.\n```go\ntype causer interface {\n        Cause() error\n}\n```\n`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:\n```go\nswitch err := errors.Cause(err).(type) {\ncase *MyError:\n        // handle specifically\ndefault:\n        // unknown error\n}\n```\n\n[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).\n\n## Contributing\n\nWe welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high.\n\nBefore proposing a change, please discuss your change by raising an issue.\n\n## License\n\nBSD-2-Clause\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/compatible_shim.go",
    "content": "// Copyright 2020 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage errors\n\nimport (\n\t\"encoding/json\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// class2RFCCode is used for compatible with old version of TiDB. When\n// marshal Error to json, old version of TiDB contain a 'class' field\n// which is represented for error class. In order to parse and convert\n// json to errors.Error, using this map to convert error class to RFC\n// error code text. here is reference:\n// https://github.com/pingcap/parser/blob/release-3.0/terror/terror.go#L58\nvar class2RFCCode = map[int]string{\n\t1:  \"autoid\",\n\t2:  \"ddl\",\n\t3:  \"domain\",\n\t4:  \"evaluator\",\n\t5:  \"executor\",\n\t6:  \"expression\",\n\t7:  \"admin\",\n\t8:  \"kv\",\n\t9:  \"meta\",\n\t10: \"planner\",\n\t11: \"parser\",\n\t12: \"perfschema\",\n\t13: \"privilege\",\n\t14: \"schema\",\n\t15: \"server\",\n\t16: \"struct\",\n\t17: \"variable\",\n\t18: \"xeval\",\n\t19: \"table\",\n\t20: \"types\",\n\t21: \"global\",\n\t22: \"mocktikv\",\n\t23: \"json\",\n\t24: \"tikv\",\n\t25: \"session\",\n\t26: \"plugin\",\n\t27: \"util\",\n}\nvar rfcCode2class map[string]int\n\nfunc init() {\n\trfcCode2class = make(map[string]int)\n\tfor k, v := range class2RFCCode {\n\t\trfcCode2class[v] = k\n\t}\n}\n\n// MarshalJSON implements json.Marshaler interface.\n// aware that this function cannot save a 'registered' status,\n// since we cannot access the registry when unmarshaling,\n// and the original global registry would be removed here.\n// This function is reserved for compatibility.\nfunc (e *Error) MarshalJSON() ([]byte, error) {\n\tec := strings.Split(string(e.codeText), \":\")[0]\n\treturn json.Marshal(&jsonError{\n\t\tClass:   rfcCode2class[ec],\n\t\tCode:    int(e.code),\n\t\tMsg:     e.GetMsg(),\n\t\tRFCCode: string(e.codeText),\n\t})\n}\n\n// UnmarshalJSON implements json.Unmarshaler interface.\n// aware that this function cannot create a 'registered' error,\n// since we cannot access the registry in this context,\n// and the original global registry is removed.\n// This function is reserved for compatibility.\nfunc (e *Error) UnmarshalJSON(data []byte) error {\n\ttErr := &jsonError{}\n\tif err := json.Unmarshal(data, &tErr); err != nil {\n\t\treturn Trace(err)\n\t}\n\te.codeText = ErrCodeText(tErr.RFCCode)\n\tif tErr.RFCCode == \"\" && tErr.Class > 0 {\n\t\te.codeText = ErrCodeText(class2RFCCode[tErr.Class] + \":\" + strconv.Itoa(tErr.Code))\n\t}\n\te.code = ErrCode(tErr.Code)\n\te.message = tErr.Msg\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/errors.go",
    "content": "// Package errors provides simple error handling primitives.\n//\n// The traditional error handling idiom in Go is roughly akin to\n//\n//     if err != nil {\n//             return err\n//     }\n//\n// which applied recursively up the call stack results in error reports\n// without context or debugging information. The errors package allows\n// programmers to add context to the failure path in their code in a way\n// that does not destroy the original value of the error.\n//\n// Adding context to an error\n//\n// The errors.Annotate function returns a new error that adds context to the\n// original error by recording a stack trace at the point Annotate is called,\n// and the supplied message. For example\n//\n//     _, err := ioutil.ReadAll(r)\n//     if err != nil {\n//             return errors.Annotate(err, \"read failed\")\n//     }\n//\n// If additional control is required the errors.AddStack and errors.WithMessage\n// functions destructure errors.Annotate into its component operations of annotating\n// an error with a stack trace and an a message, respectively.\n//\n// Retrieving the cause of an error\n//\n// Using errors.Annotate constructs a stack of errors, adding context to the\n// preceding error. Depending on the nature of the error it may be necessary\n// to reverse the operation of errors.Annotate to retrieve the original error\n// for inspection. Any error value which implements this interface\n//\n//     type causer interface {\n//             Cause() error\n//     }\n//\n// can be inspected by errors.Cause. errors.Cause will recursively retrieve\n// the topmost error which does not implement causer, which is assumed to be\n// the original cause. For example:\n//\n//     switch err := errors.Cause(err).(type) {\n//     case *MyError:\n//             // handle specifically\n//     default:\n//             // unknown error\n//     }\n//\n// causer interface is not exported by this package, but is considered a part\n// of stable public API.\n// errors.Unwrap is also available: this will retrieve the next error in the chain.\n//\n// Formatted printing of errors\n//\n// All error values returned from this package implement fmt.Formatter and can\n// be formatted by the fmt package. The following verbs are supported\n//\n//     %s    print the error. If the error has a Cause it will be\n//           printed recursively\n//     %v    see %s\n//     %+v   extended format. Each Frame of the error's StackTrace will\n//           be printed in detail.\n//\n// Retrieving the stack trace of an error or wrapper\n//\n// New, Errorf, Annotate, and Annotatef record a stack trace at the point they are invoked.\n// This information can be retrieved with the StackTracer interface that returns\n// a StackTrace. Where errors.StackTrace is defined as\n//\n//     type StackTrace []Frame\n//\n// The Frame type represents a call site in the stack trace. Frame supports\n// the fmt.Formatter interface that can be used for printing information about\n// the stack trace of this error. For example:\n//\n//     if stacked := errors.GetStackTracer(err); stacked != nil {\n//             for _, f := range stacked.StackTrace() {\n//                     fmt.Printf(\"%+s:%d\\n\", f, f)\n//             }\n//     }\n//\n// See the documentation for Frame.Format for more details.\n//\n// errors.Find can be used to search for an error in the error chain.\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// New returns an error with the supplied message.\n// New also records the stack trace at the point it was called.\nfunc New(message string) error {\n\treturn &fundamental{\n\t\tmsg:   message,\n\t\tstack: callers(),\n\t}\n}\n\n// Errorf formats according to a format specifier and returns the string\n// as a value that satisfies error.\n// Errorf also records the stack trace at the point it was called.\nfunc Errorf(format string, args ...interface{}) error {\n\treturn &fundamental{\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t\tstack: callers(),\n\t}\n}\n\n// StackTraceAware is an optimization to avoid repetitive traversals of an error chain.\n// HasStack checks for this marker first.\n// Annotate/Wrap and Annotatef/Wrapf will produce this marker.\ntype StackTraceAware interface {\n\tHasStack() bool\n}\n\n// HasStack tells whether a StackTracer exists in the error chain\nfunc HasStack(err error) bool {\n\tif errWithStack, ok := err.(StackTraceAware); ok {\n\t\treturn errWithStack.HasStack()\n\t}\n\treturn GetStackTracer(err) != nil\n}\n\n// fundamental is an error that has a message and a stack, but no caller.\ntype fundamental struct {\n\tmsg string\n\t*stack\n}\n\nfunc (f *fundamental) Error() string { return f.msg }\n\nfunc (f *fundamental) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tio.WriteString(s, f.msg)\n\t\t\tf.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, f.msg)\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", f.msg)\n\t}\n}\n\n// WithStack annotates err with a stack trace at the point WithStack was called.\n// If err is nil, WithStack returns nil.\n//\n// For most use cases this is deprecated and AddStack should be used (which will ensure just one stack trace).\n// However, one may want to use this in some situations, for example to create a 2nd trace across a goroutine.\nfunc WithStack(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// AddStack is similar to WithStack.\n// However, it will first check with HasStack to see if a stack trace already exists in the causer chain before creating another one.\nfunc AddStack(err error) error {\n\tif HasStack(err) {\n\t\treturn err\n\t}\n\treturn WithStack(err)\n}\n\ntype withStack struct {\n\terror\n\t*stack\n}\n\nfunc (w *withStack) Cause() error { return w.error }\n\n// Unwrap provides compatibility for Go 1.13 error chains.\nfunc (w *withStack) Unwrap() error { return w.error }\n\nfunc (w *withStack) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\", w.Cause())\n\t\t\tw.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, w.Error())\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", w.Error())\n\t}\n}\n\n// Wrap returns an error annotating err with a stack trace\n// at the point Wrap is called, and the supplied message.\n// If err is nil, Wrap returns nil.\n//\n// For most use cases this is deprecated in favor of Annotate.\n// Annotate avoids creating duplicate stack traces.\nfunc Wrap(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\thasStack := HasStack(err)\n\terr = &withMessage{\n\t\tcause:         err,\n\t\tmsg:           message,\n\t\tcauseHasStack: hasStack,\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// Wrapf returns an error annotating err with a stack trace\n// at the point Wrapf is call, and the format specifier.\n// If err is nil, Wrapf returns nil.\n//\n// For most use cases this is deprecated in favor of Annotatef.\n// Annotatef avoids creating duplicate stack traces.\nfunc Wrapf(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\thasStack := HasStack(err)\n\terr = &withMessage{\n\t\tcause:         err,\n\t\tmsg:           fmt.Sprintf(format, args...),\n\t\tcauseHasStack: hasStack,\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// WithMessage annotates err with a new message.\n// If err is nil, WithMessage returns nil.\nfunc WithMessage(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withMessage{\n\t\tcause:         err,\n\t\tmsg:           message,\n\t\tcauseHasStack: HasStack(err),\n\t}\n}\n\ntype withMessage struct {\n\tcause         error\n\tmsg           string\n\tcauseHasStack bool\n}\n\nfunc (w *withMessage) Error() string { return w.msg + \": \" + w.cause.Error() }\nfunc (w *withMessage) Cause() error  { return w.cause }\n\n// Unwrap provides compatibility for Go 1.13 error chains.\nfunc (w *withMessage) Unwrap() error  { return w.cause }\nfunc (w *withMessage) HasStack() bool { return w.causeHasStack }\n\nfunc (w *withMessage) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\\n\", w.Cause())\n\t\t\tio.WriteString(s, w.msg)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, w.Error())\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", w.Error())\n\t}\n}\n\n// Cause returns the underlying cause of the error, if possible.\n// An error value has a cause if it implements the following\n// interface:\n//\n//     type causer interface {\n//            Cause() error\n//     }\n//\n// If the error does not implement Cause, the original error will\n// be returned. If the error is nil, nil will be returned without further\n// investigation.\nfunc Cause(err error) error {\n\tcause := Unwrap(err)\n\tif cause == nil {\n\t\treturn err\n\t}\n\treturn Cause(cause)\n}\n\n// Unwrap uses causer to return the next error in the chain or nil.\n// This goes one-level deeper, whereas Cause goes as far as possible\nfunc Unwrap(err error) error {\n\ttype causer interface {\n\t\tCause() error\n\t}\n\tif unErr, ok := err.(causer); ok {\n\t\treturn unErr.Cause()\n\t}\n\treturn nil\n}\n\n// Find an error in the chain that matches a test function.\n// returns nil if no error is found.\nfunc Find(origErr error, test func(error) bool) error {\n\tvar foundErr error\n\tWalkDeep(origErr, func(err error) bool {\n\t\tif test(err) {\n\t\t\tfoundErr = err\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t})\n\treturn foundErr\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/group.go",
    "content": "package errors\n\n// ErrorGroup is an interface for multiple errors that are not a chain.\n// This happens for example when executing multiple operations in parallel.\ntype ErrorGroup interface {\n\tErrors() []error\n}\n\n// Errors uses the ErrorGroup interface to return a slice of errors.\n// If the ErrorGroup interface is not implemented it returns an array containing just the given error.\nfunc Errors(err error) []error {\n\tif eg, ok := err.(ErrorGroup); ok {\n\t\treturn eg.Errors()\n\t}\n\treturn []error{err}\n}\n\n// WalkDeep does a depth-first traversal of all errors.\n// Any ErrorGroup is traversed (after going deep).\n// The visitor function can return true to end the traversal early\n// In that case, WalkDeep will return true, otherwise false.\nfunc WalkDeep(err error, visitor func(err error) bool) bool {\n\t// Go deep\n\tunErr := err\n\tfor unErr != nil {\n\t\tif done := visitor(unErr); done {\n\t\t\treturn true\n\t\t}\n\t\tunErr = Unwrap(unErr)\n\t}\n\n\t// Go wide\n\tif group, ok := err.(ErrorGroup); ok {\n\t\tfor _, err := range group.Errors() {\n\t\t\tif early := WalkDeep(err, visitor); early {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/juju_adaptor.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// ==================== juju adaptor start ========================\n\n// Trace just calls AddStack.\nfunc Trace(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn AddStack(err)\n}\n\n// Annotate adds a message and ensures there is a stack trace.\nfunc Annotate(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\thasStack := HasStack(err)\n\terr = &withMessage{\n\t\tcause:         err,\n\t\tmsg:           message,\n\t\tcauseHasStack: hasStack,\n\t}\n\tif hasStack {\n\t\treturn err\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// Annotatef adds a message and ensures there is a stack trace.\nfunc Annotatef(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\thasStack := HasStack(err)\n\terr = &withMessage{\n\t\tcause:         err,\n\t\tmsg:           fmt.Sprintf(format, args...),\n\t\tcauseHasStack: hasStack,\n\t}\n\tif hasStack {\n\t\treturn err\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\nvar emptyStack stack\n\n// NewNoStackError creates error without error stack\n// later duplicate trace will no longer generate Stack too.\nfunc NewNoStackError(msg string) error {\n\treturn &fundamental{\n\t\tmsg:   msg,\n\t\tstack: &emptyStack,\n\t}\n}\n\n// NewNoStackErrorf creates error with error stack and formats according\n// to a format specifier and returns the string as a value that satisfies error.\nfunc NewNoStackErrorf(format string, args ...interface{}) error {\n\treturn &fundamental{\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t\tstack: &emptyStack,\n\t}\n}\n\n// SuspendStack suspends stack generate for error.\nfunc SuspendStack(err error) error {\n\tif err == nil {\n\t\treturn err\n\t}\n\tcleared := clearStack(err)\n\tif cleared {\n\t\treturn err\n\t}\n\treturn &withStack{\n\t\terr,\n\t\t&emptyStack,\n\t}\n}\n\nfunc clearStack(err error) (cleared bool) {\n\tswitch typedErr := err.(type) {\n\tcase *withMessage:\n\t\treturn clearStack(typedErr.Cause())\n\tcase *fundamental:\n\t\ttypedErr.stack = &emptyStack\n\t\treturn true\n\tcase *withStack:\n\t\ttypedErr.stack = &emptyStack\n\t\tclearStack(typedErr.Cause())\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// ErrorStack will format a stack trace if it is available, otherwise it will be Error()\n// If the error is nil, the empty string is returned\n// Note that this just calls fmt.Sprintf(\"%+v\", err)\nfunc ErrorStack(err error) string {\n\tif err == nil {\n\t\treturn \"\"\n\t}\n\treturn fmt.Sprintf(\"%+v\", err)\n}\n\n// IsNotFound reports whether err was not found error.\nfunc IsNotFound(err error) bool {\n\treturn strings.Contains(err.Error(), \"not found\")\n}\n\n// NotFoundf represents an error with not found message.\nfunc NotFoundf(format string, args ...interface{}) error {\n\treturn Errorf(format+\" not found\", args...)\n}\n\n// BadRequestf represents an error with bad request message.\nfunc BadRequestf(format string, args ...interface{}) error {\n\treturn Errorf(format+\" bad request\", args...)\n}\n\n// NotSupportedf represents an error with not supported message.\nfunc NotSupportedf(format string, args ...interface{}) error {\n\treturn Errorf(format+\" not supported\", args...)\n}\n\n// NotValidf represents an error with not valid message.\nfunc NotValidf(format string, args ...interface{}) error {\n\treturn Errorf(format+\" not valid\", args...)\n}\n\n// IsAlreadyExists reports whether err was already exists error.\nfunc IsAlreadyExists(err error) bool {\n\treturn strings.Contains(err.Error(), \"already exists\")\n}\n\n// AlreadyExistsf represents an error with already exists message.\nfunc AlreadyExistsf(format string, args ...interface{}) error {\n\treturn Errorf(format+\" already exists\", args...)\n}\n\n// ==================== juju adaptor end ========================\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/normalize.go",
    "content": "// Copyright 2020 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"strconv\"\n\n\t\"go.uber.org/atomic\"\n)\n\nvar _ fmt.Formatter = (*redactFormatter)(nil)\n\n// RedactLogEnabled defines whether the arguments of Error need to be redacted.\nvar RedactLogEnabled atomic.String\n\nconst (\n\tRedactLogEnable  string = \"ON\"\n\tRedactLogDisable        = \"OFF\"\n\tRedactLogMarker         = \"MARKER\"\n)\n\n// ErrCode represents a specific error type in a error class.\n// Same error code can be used in different error classes.\ntype ErrCode int\n\n// ErrCodeText is a textual error code that represents a specific error type in a error class.\ntype ErrCodeText string\n\ntype ErrorID string\ntype RFCErrorCode string\n\n// Error is the 'prototype' of a type of errors.\n// Use DefineError to make a *Error:\n// var ErrUnavailable = errors.Normalize(\"Region %d is unavailable\", errors.RFCCodeText(\"Unavailable\"))\n//\n// \"throw\" it at runtime:\n//\n//\tfunc Somewhat() error {\n//\t    ...\n//\t    if err != nil {\n//\t        // generate a stackful error use the message template at defining,\n//\t        // also see FastGen(it's stackless), GenWithStack(it uses custom message template).\n//\t        return ErrUnavailable.GenWithStackByArgs(region.ID)\n//\t    }\n//\t}\n//\n// testing whether an error belongs to a prototype:\n//\n//\tif ErrUnavailable.Equal(err) {\n//\t    // handle this error.\n//\t}\ntype Error struct {\n\tcode ErrCode\n\t// codeText is the textual describe of the error code\n\tcodeText ErrCodeText\n\t// message is a template of the description of this error.\n\t// printf-style formatting is enabled.\n\tmessage string\n\t// redactArgsPos defines the positions of arguments in message that need to be redacted.\n\t// And it is controlled by the global var RedactLogEnabled.\n\t// For example, an original error is `Duplicate entry 'PRIMARY' for key 'key'`,\n\t// when RedactLogEnabled is ON and redactArgsPos is [0, 1], the error is `Duplicate entry '?' for key '?'`.\n\t// when RedactLogEnabled is MARKER and redactArgsPos is [0, 1], the error is `Duplicate entry '‹..›' for key '‹..›'`.\n\tredactArgsPos []int\n\t// Cause is used to warp some third party error.\n\tcause error\n\targs  []interface{}\n\tfile  string\n\tline  int\n}\n\n// Code returns the numeric code of this error.\n// ID() will return textual error if there it is,\n// when you just want to get the purely numeric error\n// (e.g., for mysql protocol transmission.), this would be useful.\nfunc (e *Error) Code() ErrCode {\n\treturn e.code\n}\n\n// Code returns ErrorCode, by the RFC:\n//\n// The error code is a 3-tuple of abbreviated component name, error class and error code,\n// joined by a colon like {Component}:{ErrorClass}:{InnerErrorCode}.\nfunc (e *Error) RFCCode() RFCErrorCode {\n\treturn RFCErrorCode(e.ID())\n}\n\n// ID returns the ID of this error.\nfunc (e *Error) ID() ErrorID {\n\tif e.codeText != \"\" {\n\t\treturn ErrorID(e.codeText)\n\t}\n\treturn ErrorID(strconv.Itoa(int(e.code)))\n}\n\n// Location returns the location where the error is created,\n// implements juju/errors locationer interface.\nfunc (e *Error) Location() (file string, line int) {\n\treturn e.file, e.line\n}\n\n// MessageTemplate returns the error message template of this error.\nfunc (e *Error) MessageTemplate() string {\n\treturn e.message\n}\n\n// Args returns the message arguments of this error.\nfunc (e *Error) Args() []interface{} {\n\treturn e.args\n}\n\n// Error implements error interface.\nfunc (e *Error) Error() string {\n\tif e == nil {\n\t\treturn \"<nil>\"\n\t}\n\tdescribe := e.codeText\n\tif len(describe) == 0 {\n\t\tdescribe = ErrCodeText(strconv.Itoa(int(e.code)))\n\t}\n\tif e.cause != nil {\n\t\treturn fmt.Sprintf(\"[%s]%s: %s\", e.RFCCode(), e.GetMsg(), e.cause.Error())\n\t}\n\treturn fmt.Sprintf(\"[%s]%s\", e.RFCCode(), e.GetMsg())\n}\n\nfunc (e *Error) GetMsg() string {\n\tif len(e.args) > 0 {\n\t\treturn fmt.Sprintf(e.message, e.args...)\n\t}\n\treturn e.message\n}\n\nfunc (e *Error) fillLineAndFile(skip int) {\n\t// skip this\n\t_, file, line, ok := runtime.Caller(skip + 1)\n\tif !ok {\n\t\te.file = \"<unknown>\"\n\t\te.line = -1\n\t\treturn\n\t}\n\te.file = file\n\te.line = line\n}\n\n// GenWithStack generates a new *Error with the same class and code, and a new formatted message.\nfunc (e *Error) GenWithStack(format string, args ...interface{}) error {\n\t// TODO: RedactErrorArg\n\terr := *e\n\terr.message = format\n\terr.args = args\n\terr.fillLineAndFile(1)\n\treturn AddStack(&err)\n}\n\n// GenWithStackByArgs generates a new *Error with the same class and code, and new arguments.\nfunc (e *Error) GenWithStackByArgs(args ...interface{}) error {\n\tRedactErrorArg(args, e.redactArgsPos)\n\terr := *e\n\terr.args = args\n\terr.fillLineAndFile(1)\n\treturn AddStack(&err)\n}\n\n// FastGen generates a new *Error with the same class and code, and a new formatted message.\n// This will not call runtime.Caller to get file and line.\nfunc (e *Error) FastGen(format string, args ...interface{}) error {\n\t// TODO: RedactErrorArg\n\terr := *e\n\terr.message = format\n\terr.args = args\n\treturn SuspendStack(&err)\n}\n\n// FastGen generates a new *Error with the same class and code, and a new arguments.\n// This will not call runtime.Caller to get file and line.\nfunc (e *Error) FastGenByArgs(args ...interface{}) error {\n\tRedactErrorArg(args, e.redactArgsPos)\n\terr := *e\n\terr.args = args\n\treturn SuspendStack(&err)\n}\n\n// Equal checks if err is equal to e.\nfunc (e *Error) Equal(err error) bool {\n\toriginErr := Cause(err)\n\tif originErr == nil {\n\t\treturn false\n\t}\n\tif error(e) == originErr {\n\t\treturn true\n\t}\n\tinErr, ok := originErr.(*Error)\n\tif !ok {\n\t\treturn false\n\t}\n\tidEquals := e.ID() == inErr.ID()\n\treturn idEquals\n}\n\n// NotEqual checks if err is not equal to e.\nfunc (e *Error) NotEqual(err error) bool {\n\treturn !e.Equal(err)\n}\n\n// RedactErrorArg redacts the args by position if RedactLogEnabled is enabled.\nfunc RedactErrorArg(args []interface{}, position []int) {\n\tswitch RedactLogEnabled.Load() {\n\tcase RedactLogEnable:\n\t\tfor _, pos := range position {\n\t\t\tif len(args) > pos {\n\t\t\t\targs[pos] = \"?\"\n\t\t\t}\n\t\t}\n\tcase RedactLogMarker:\n\t\tfor _, pos := range position {\n\t\t\tif len(args) > pos {\n\t\t\t\targs[pos] = &redactFormatter{args[pos]}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// ErrorEqual returns a boolean indicating whether err1 is equal to err2.\nfunc ErrorEqual(err1, err2 error) bool {\n\te1 := Cause(err1)\n\te2 := Cause(err2)\n\n\tif e1 == e2 {\n\t\treturn true\n\t}\n\n\tif e1 == nil || e2 == nil {\n\t\treturn e1 == e2\n\t}\n\n\tte1, ok1 := e1.(*Error)\n\tte2, ok2 := e2.(*Error)\n\tif ok1 && ok2 {\n\t\treturn te1.Equal(te2)\n\t}\n\n\treturn e1.Error() == e2.Error()\n}\n\n// ErrorNotEqual returns a boolean indicating whether err1 isn't equal to err2.\nfunc ErrorNotEqual(err1, err2 error) bool {\n\treturn !ErrorEqual(err1, err2)\n}\n\ntype jsonError struct {\n\t// Deprecated field, please use `RFCCode` instead.\n\tClass   int    `json:\"class\"`\n\tCode    int    `json:\"code\"`\n\tMsg     string `json:\"message\"`\n\tRFCCode string `json:\"rfccode\"`\n}\n\nfunc (e *Error) Wrap(err error) *Error {\n\tif err != nil {\n\t\tnewErr := *e\n\t\tnewErr.cause = err\n\t\treturn &newErr\n\t}\n\treturn nil\n}\n\n// Unwrap returns cause of the error.\n// It allows Error to work with errors.Is() and errors.As() from the Go\n// standard package.\nfunc (e *Error) Unwrap() error {\n\tif e == nil {\n\t\treturn nil\n\t}\n\treturn e.cause\n}\n\n// Is checks if e has the same error ID with other.\n// It allows Error to work with errors.Is() from the Go standard package.\nfunc (e *Error) Is(other error) bool {\n\terr, ok := other.(*Error)\n\tif !ok {\n\t\treturn false\n\t}\n\treturn (e == nil && err == nil) || (e != nil && err != nil && e.ID() == err.ID())\n}\n\nfunc (e *Error) Cause() error {\n\troot := Unwrap(e.cause)\n\tif root == nil {\n\t\treturn e.cause\n\t}\n\treturn root\n}\n\nfunc (e *Error) FastGenWithCause(args ...interface{}) error {\n\terr := *e\n\tif e.cause != nil {\n\t\terr.message = e.cause.Error()\n\t}\n\terr.args = args\n\treturn SuspendStack(&err)\n}\n\nfunc (e *Error) GenWithStackByCause(args ...interface{}) error {\n\terr := *e\n\tif e.cause != nil {\n\t\terr.message = e.cause.Error()\n\t}\n\terr.args = args\n\terr.fillLineAndFile(1)\n\treturn AddStack(&err)\n}\n\ntype NormalizeOption func(*Error)\n\nfunc RedactArgs(pos []int) NormalizeOption {\n\treturn func(e *Error) {\n\t\te.redactArgsPos = pos\n\t}\n}\n\n// RFCCodeText returns a NormalizeOption to set RFC error code.\nfunc RFCCodeText(codeText string) NormalizeOption {\n\treturn func(e *Error) {\n\t\te.codeText = ErrCodeText(codeText)\n\t}\n}\n\n// MySQLErrorCode returns a NormalizeOption to set error code.\nfunc MySQLErrorCode(code int) NormalizeOption {\n\treturn func(e *Error) {\n\t\te.code = ErrCode(code)\n\t}\n}\n\n// Normalize creates a new Error object.\nfunc Normalize(message string, opts ...NormalizeOption) *Error {\n\te := &Error{\n\t\tmessage: message,\n\t}\n\tfor _, opt := range opts {\n\t\topt(e)\n\t}\n\treturn e\n}\n\ntype redactFormatter struct {\n\targ interface{}\n}\n\nfunc (e *redactFormatter) Format(f fmt.State, verb rune) {\n\torigin := fmt.Sprintf(fmt.FormatString(f, verb), e.arg)\n\tfmt.Fprintf(f, \"‹\")\n\tfor _, c := range origin {\n\t\tif c == '‹' || c == '›' {\n\t\t\tfmt.Fprintf(f, \"%c\", c)\n\t\t\tfmt.Fprintf(f, \"%c\", c)\n\t\t} else {\n\t\t\tfmt.Fprintf(f, \"%c\", c)\n\t\t}\n\t}\n\tfmt.Fprintf(f, \"›\")\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/errors/stack.go",
    "content": "package errors\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"path\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// StackTracer retrieves the StackTrace\n// Generally you would want to use the GetStackTracer function to do that.\ntype StackTracer interface {\n\tStackTrace() StackTrace\n}\n\n// GetStackTracer will return the first StackTracer in the causer chain.\n// This function is used by AddStack to avoid creating redundant stack traces.\n//\n// You can also use the StackTracer interface on the returned error to get the stack trace.\nfunc GetStackTracer(origErr error) StackTracer {\n\tvar stacked StackTracer\n\tWalkDeep(origErr, func(err error) bool {\n\t\tif stackTracer, ok := err.(StackTracer); ok {\n\t\t\tstacked = stackTracer\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t})\n\treturn stacked\n}\n\n// Frame represents a program counter inside a stack frame.\ntype Frame uintptr\n\n// pc returns the program counter for this frame;\n// multiple frames may have the same PC value.\nfunc (f Frame) pc() uintptr { return uintptr(f) - 1 }\n\n// file returns the full path to the file that contains the\n// function for this Frame's pc.\nfunc (f Frame) file() string {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn \"unknown\"\n\t}\n\tfile, _ := fn.FileLine(f.pc())\n\treturn file\n}\n\n// line returns the line number of source code of the\n// function for this Frame's pc.\nfunc (f Frame) line() int {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn 0\n\t}\n\t_, line := fn.FileLine(f.pc())\n\treturn line\n}\n\n// Format formats the frame according to the fmt.Formatter interface.\n//\n//    %s    source file\n//    %d    source line\n//    %n    function name\n//    %v    equivalent to %s:%d\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+s   function name and path of source file relative to the compile time\n//          GOPATH separated by \\n\\t (<funcname>\\n\\t<path>)\n//    %+v   equivalent to %+s:%d\nfunc (f Frame) Format(s fmt.State, verb rune) {\n\tf.format(s, s, verb)\n}\n\n// format allows stack trace printing calls to be made with a bytes.Buffer.\nfunc (f Frame) format(w io.Writer, s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tpc := f.pc()\n\t\t\tfn := runtime.FuncForPC(pc)\n\t\t\tif fn == nil {\n\t\t\t\tio.WriteString(w, \"unknown\")\n\t\t\t} else {\n\t\t\t\tfile, _ := fn.FileLine(pc)\n\t\t\t\tio.WriteString(w, fn.Name())\n\t\t\t\tio.WriteString(w, \"\\n\\t\")\n\t\t\t\tio.WriteString(w, file)\n\t\t\t}\n\t\tdefault:\n\t\t\tio.WriteString(w, path.Base(f.file()))\n\t\t}\n\tcase 'd':\n\t\tio.WriteString(w, strconv.Itoa(f.line()))\n\tcase 'n':\n\t\tname := runtime.FuncForPC(f.pc()).Name()\n\t\tio.WriteString(w, funcname(name))\n\tcase 'v':\n\t\tf.format(w, s, 's')\n\t\tio.WriteString(w, \":\")\n\t\tf.format(w, s, 'd')\n\t}\n}\n\n// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).\ntype StackTrace []Frame\n\n// Format formats the stack of Frames according to the fmt.Formatter interface.\n//\n//    %s\tlists source files for each Frame in the stack\n//    %v\tlists the source file and line number for each Frame in the stack\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+v   Prints filename, function, and line number for each Frame in the stack.\nfunc (st StackTrace) Format(s fmt.State, verb rune) {\n\tvar b bytes.Buffer\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tb.Grow(len(st) * stackMinLen)\n\t\t\tfor _, fr := range st {\n\t\t\t\tb.WriteByte('\\n')\n\t\t\t\tfr.format(&b, s, verb)\n\t\t\t}\n\t\tcase s.Flag('#'):\n\t\t\tfmt.Fprintf(&b, \"%#v\", []Frame(st))\n\t\tdefault:\n\t\t\tst.formatSlice(&b, s, verb)\n\t\t}\n\tcase 's':\n\t\tst.formatSlice(&b, s, verb)\n\t}\n\tio.Copy(s, &b)\n}\n\n// formatSlice will format this StackTrace into the given buffer as a slice of\n// Frame, only valid when called with '%s' or '%v'.\nfunc (st StackTrace) formatSlice(b *bytes.Buffer, s fmt.State, verb rune) {\n\tb.WriteByte('[')\n\tif len(st) == 0 {\n\t\tb.WriteByte(']')\n\t\treturn\n\t}\n\n\tb.Grow(len(st) * (stackMinLen / 4))\n\tst[0].format(b, s, verb)\n\tfor _, fr := range st[1:] {\n\t\tb.WriteByte(' ')\n\t\tfr.format(b, s, verb)\n\t}\n\tb.WriteByte(']')\n}\n\n// stackMinLen is a best-guess at the minimum length of a stack trace. It\n// doesn't need to be exact, just give a good enough head start for the buffer\n// to avoid the expensive early growth.\nconst stackMinLen = 96\n\n// stack represents a stack of program counters.\ntype stack []uintptr\n\nfunc (s *stack) Format(st fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase st.Flag('+'):\n\t\t\tvar b bytes.Buffer\n\t\t\tb.Grow(len(*s) * stackMinLen)\n\t\t\tfor _, pc := range *s {\n\t\t\t\tf := Frame(pc)\n\t\t\t\tb.WriteByte('\\n')\n\t\t\t\tf.format(&b, st, 'v')\n\t\t\t}\n\t\t\tio.Copy(st, &b)\n\t\t}\n\t}\n}\n\nfunc (s *stack) StackTrace() StackTrace {\n\tf := make([]Frame, len(*s))\n\tfor i := 0; i < len(f); i++ {\n\t\tf[i] = Frame((*s)[i])\n\t}\n\treturn f\n}\n\nfunc callers() *stack {\n\treturn callersSkip(4)\n}\n\nfunc callersSkip(skip int) *stack {\n\tconst depth = 32\n\tvar pcs [depth]uintptr\n\tn := runtime.Callers(skip, pcs[:])\n\tvar st stack = pcs[0:n]\n\treturn &st\n}\n\n// funcname removes the path prefix component of a function's name reported by func.Name().\nfunc funcname(name string) string {\n\ti := strings.LastIndex(name, \"/\")\n\tname = name[i+1:]\n\ti = strings.Index(name, \".\")\n\treturn name[i+1:]\n}\n\n// NewStack is for library implementers that want to generate a stack trace.\n// Normally you should insted use AddStack to get an error with a stack trace.\n//\n// The result of this function can be turned into a stack trace by calling .StackTrace()\n//\n// This function takes an argument for the number of stack frames to skip.\n// This avoids putting stack generation function calls like this one in the stack trace.\n// A value of 0 will give you the line that called NewStack(0)\n// A library author wrapping this in their own function will want to use a value of at least 1.\nfunc NewStack(skip int) StackTracer {\n\treturn callersSkip(skip + 3)\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\ngo_library(\n    name = \"charset\",\n    srcs = [\n        \"charset.go\",\n        \"encoding.go\",\n        \"encoding_ascii.go\",\n        \"encoding_base.go\",\n        \"encoding_bin.go\",\n        \"encoding_gbk.go\",\n        \"encoding_latin1.go\",\n        \"encoding_table.go\",\n        \"encoding_utf8.go\",\n    ],\n    importpath = \"github.com/pingcap/tidb/pkg/parser/charset\",\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"//pkg/parser/mysql\",\n        \"//pkg/parser/terror\",\n        \"@com_github_pingcap_errors//:errors\",\n        \"@com_github_pingcap_log//:log\",\n        \"@org_golang_x_text//encoding\",\n        \"@org_golang_x_text//encoding/charmap\",\n        \"@org_golang_x_text//encoding/japanese\",\n        \"@org_golang_x_text//encoding/korean\",\n        \"@org_golang_x_text//encoding/simplifiedchinese\",\n        \"@org_golang_x_text//encoding/traditionalchinese\",\n        \"@org_golang_x_text//encoding/unicode\",\n        \"@org_golang_x_text//transform\",\n        \"@org_uber_go_zap//:zap\",\n    ],\n)\n\ngo_test(\n    name = \"charset_test\",\n    timeout = \"short\",\n    srcs = [\n        \"charset_test.go\",\n        \"encoding_test.go\",\n    ],\n    embed = [\":charset\"],\n    flaky = True,\n    shard_count = 8,\n    deps = [\n        \"@com_github_stretchr_testify//require\",\n        \"@org_golang_x_text//transform\",\n    ],\n)\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/charset.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"slices\"\n\t\"strings\"\n\n\t\"github.com/pingcap/errors\"\n\t\"github.com/pingcap/log\"\n\t\"github.com/pingcap/tidb/pkg/parser/mysql\"\n\t\"github.com/pingcap/tidb/pkg/parser/terror\"\n\t\"go.uber.org/zap\"\n)\n\nvar (\n\t// ErrUnknownCollation is unknown collation.\n\tErrUnknownCollation = terror.ClassDDL.NewStd(mysql.ErrUnknownCollation)\n\t// ErrCollationCharsetMismatch is collation charset mismatch.\n\tErrCollationCharsetMismatch = terror.ClassDDL.NewStd(mysql.ErrCollationCharsetMismatch)\n)\n\nvar (\n\t// PadSpace is to mark that trailing spaces are insignificant in comparisons\n\tPadSpace = \"PAD SPACE\"\n\t// PadNone is to mark that trailing spaces are significant in comparisons\n\tPadNone = \"NO PAD\"\n)\n\n// Charset is a charset.\n// Now we only support MySQL.\ntype Charset struct {\n\tName             string\n\tDefaultCollation string\n\tCollations       map[string]*Collation\n\tDesc             string\n\tMaxlen           int\n}\n\n// Collation is a collation.\n// Now we only support MySQL.\ntype Collation struct {\n\tID           int\n\tCharsetName  string\n\tName         string\n\tIsDefault    bool\n\tSortlen      int\n\tPadAttribute string\n}\n\nvar collationsIDMap = make(map[int]*Collation)\nvar collationsNameMap = make(map[string]*Collation)\nvar supportedCollations = make([]*Collation, 0, len(supportedCollationNames))\n\n// CharacterSetInfos contains all the supported charsets.\nvar CharacterSetInfos = map[string]*Charset{\n\tCharsetUTF8:    {CharsetUTF8, CollationUTF8, make(map[string]*Collation), \"UTF-8 Unicode\", 3},\n\tCharsetUTF8MB4: {CharsetUTF8MB4, CollationUTF8MB4, make(map[string]*Collation), \"UTF-8 Unicode\", 4},\n\tCharsetASCII:   {CharsetASCII, CollationASCII, make(map[string]*Collation), \"US ASCII\", 1},\n\tCharsetLatin1:  {CharsetLatin1, CollationLatin1, make(map[string]*Collation), \"Latin1\", 1},\n\tCharsetBin:     {CharsetBin, CollationBin, make(map[string]*Collation), \"binary\", 1},\n\tCharsetGBK:     {CharsetGBK, CollationGBKBin, make(map[string]*Collation), \"Chinese Internal Code Specification\", 2},\n}\n\n// All the names supported collations should be in the following table.\nvar supportedCollationNames = map[string]struct{}{\n\tCollationUTF8:    {},\n\tCollationUTF8MB4: {},\n\tCollationASCII:   {},\n\tCollationLatin1:  {},\n\tCollationBin:     {},\n\tCollationGBKBin:  {},\n}\n\n// TiFlashSupportedCharsets is a map which contains TiFlash supports charsets.\nvar TiFlashSupportedCharsets = map[string]struct{}{\n\tCharsetUTF8:    {},\n\tCharsetUTF8MB4: {},\n\tCharsetASCII:   {},\n\tCharsetLatin1:  {},\n\tCharsetBin:     {},\n}\n\n// GetSupportedCharsets gets descriptions for all charsets supported so far.\nfunc GetSupportedCharsets() []*Charset {\n\tcharsets := make([]*Charset, 0, len(CharacterSetInfos))\n\tfor _, ch := range CharacterSetInfos {\n\t\tcharsets = append(charsets, ch)\n\t}\n\n\t// sort charset by name.\n\tslices.SortFunc(charsets, func(i, j *Charset) int {\n\t\treturn strings.Compare(i.Name, j.Name)\n\t})\n\treturn charsets\n}\n\n// GetSupportedCollations gets information for all collations supported so far.\nfunc GetSupportedCollations() []*Collation {\n\treturn supportedCollations\n}\n\n// ValidCharsetAndCollation checks the charset and the collation validity\n// and returns a boolean.\nfunc ValidCharsetAndCollation(cs string, co string) bool {\n\t// We will use utf8 as a default charset.\n\tif cs == \"\" || cs == CharsetUTF8MB3 {\n\t\tcs = CharsetUTF8\n\t}\n\tchs, err := GetCharsetInfo(cs)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\tif co == \"\" {\n\t\treturn true\n\t}\n\tco = utf8Alias(strings.ToLower(co))\n\t_, ok := chs.Collations[co]\n\treturn ok\n}\n\n// GetDefaultCollationLegacy is compatible with the charset support in old version parser.\nfunc GetDefaultCollationLegacy(charset string) (string, error) {\n\tswitch strings.ToLower(charset) {\n\tcase CharsetUTF8MB3:\n\t\treturn GetDefaultCollation(CharsetUTF8)\n\tcase CharsetUTF8, CharsetUTF8MB4, CharsetASCII, CharsetLatin1, CharsetBin:\n\t\treturn GetDefaultCollation(charset)\n\tdefault:\n\t\treturn \"\", errors.Errorf(\"Unknown charset %s\", charset)\n\t}\n}\n\n// GetDefaultCollation returns the default collation for charset.\nfunc GetDefaultCollation(charset string) (string, error) {\n\tcs, err := GetCharsetInfo(charset)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn cs.DefaultCollation, nil\n}\n\n// GetDefaultCharsetAndCollate returns the default charset and collation.\nfunc GetDefaultCharsetAndCollate() (defaultCharset string, defaultCollationName string) {\n\treturn mysql.DefaultCharset, mysql.DefaultCollationName\n}\n\n// GetCharsetInfo returns charset and collation for cs as name.\nfunc GetCharsetInfo(cs string) (*Charset, error) {\n\tif strings.ToLower(cs) == CharsetUTF8MB3 {\n\t\tcs = CharsetUTF8\n\t}\n\n\tif c, ok := CharacterSetInfos[strings.ToLower(cs)]; ok {\n\t\treturn c, nil\n\t}\n\n\tif c, ok := charsets[strings.ToLower(cs)]; ok {\n\t\treturn c, errors.Errorf(\"Unsupported charset %s\", cs)\n\t}\n\n\treturn nil, errors.Errorf(\"Unknown charset %s\", cs)\n}\n\n// GetCharsetInfoByID returns charset and collation for id as cs_number.\nfunc GetCharsetInfoByID(coID int) (charsetStr string, collateStr string, err error) {\n\tif coID == mysql.DefaultCollationID {\n\t\treturn mysql.DefaultCharset, mysql.DefaultCollationName, nil\n\t}\n\tif collation, ok := collationsIDMap[coID]; ok {\n\t\treturn collation.CharsetName, collation.Name, nil\n\t}\n\n\tlog.Warn(\n\t\t\"unable to get collation name from collation ID, return default charset and collation instead\",\n\t\tzap.Int(\"ID\", coID),\n\t\tzap.Stack(\"stack\"))\n\treturn mysql.DefaultCharset, mysql.DefaultCollationName, errors.Errorf(\"Unknown collation id %d\", coID)\n}\n\nfunc utf8Alias(csname string) string {\n\tswitch csname {\n\tcase \"utf8mb3_bin\":\n\t\tcsname = \"utf8_bin\"\n\tcase \"utf8mb3_unicode_ci\":\n\t\tcsname = \"utf8_unicode_ci\"\n\tcase \"utf8mb3_general_ci\":\n\t\tcsname = \"utf8_general_ci\"\n\tdefault:\n\t}\n\treturn csname\n}\n\n// GetCollationByName returns the collation by name.\nfunc GetCollationByName(name string) (*Collation, error) {\n\tcsname := utf8Alias(strings.ToLower(name))\n\tcollation, ok := collationsNameMap[csname]\n\tif !ok {\n\t\treturn nil, ErrUnknownCollation.GenWithStackByArgs(name)\n\t}\n\treturn collation, nil\n}\n\n// GetCollationByID returns collations by given id.\nfunc GetCollationByID(id int) (*Collation, error) {\n\tcollation, ok := collationsIDMap[id]\n\tif !ok {\n\t\treturn nil, errors.Errorf(\"Unknown collation id %d\", id)\n\t}\n\n\treturn collation, nil\n}\n\nconst (\n\t// CollationBin is the default collation for CharsetBin.\n\tCollationBin = \"binary\"\n\t// CollationUTF8 is the default collation for CharsetUTF8.\n\tCollationUTF8 = \"utf8_bin\"\n\t// CollationUTF8MB4 is the default collation for CharsetUTF8MB4.\n\tCollationUTF8MB4 = \"utf8mb4_bin\"\n\t// CollationASCII is the default collation for CharsetACSII.\n\tCollationASCII = \"ascii_bin\"\n\t// CollationLatin1 is the default collation for CharsetLatin1.\n\tCollationLatin1 = \"latin1_bin\"\n\t// CollationGBKBin is the default collation for CharsetGBK when new collation is disabled.\n\tCollationGBKBin = \"gbk_bin\"\n\t// CollationGBKChineseCI is the default collation for CharsetGBK when new collation is enabled.\n\tCollationGBKChineseCI = \"gbk_chinese_ci\"\n)\n\nconst (\n\t// CharsetASCII is a subset of UTF8.\n\tCharsetASCII = \"ascii\"\n\t// CharsetBin is used for marking binary charset.\n\tCharsetBin = \"binary\"\n\t// CharsetLatin1 is a single byte charset.\n\tCharsetLatin1 = \"latin1\"\n\t// CharsetUTF8 is the default charset for string types.\n\tCharsetUTF8 = \"utf8\"\n\t// CharsetUTF8MB3 is 3 bytes utf8, a MySQL legacy encoding. \"utf8\" and \"utf8mb3\" are aliases.\n\tCharsetUTF8MB3 = \"utf8mb3\"\n\t// CharsetUTF8MB4 represents 4 bytes utf8, which works the same way as utf8 in Go.\n\tCharsetUTF8MB4 = \"utf8mb4\"\n\t//revive:disable:exported\n\tCharsetARMSCII8 = \"armscii8\"\n\tCharsetBig5     = \"big5\"\n\tCharsetCP1250   = \"cp1250\"\n\tCharsetCP1251   = \"cp1251\"\n\tCharsetCP1256   = \"cp1256\"\n\tCharsetCP1257   = \"cp1257\"\n\tCharsetCP850    = \"cp850\"\n\tCharsetCP852    = \"cp852\"\n\tCharsetCP866    = \"cp866\"\n\tCharsetCP932    = \"cp932\"\n\tCharsetDEC8     = \"dec8\"\n\tCharsetEUCJPMS  = \"eucjpms\"\n\tCharsetEUCKR    = \"euckr\"\n\tCharsetGB18030  = \"gb18030\"\n\tCharsetGB2312   = \"gb2312\"\n\tCharsetGBK      = \"gbk\"\n\tCharsetGEOSTD8  = \"geostd8\"\n\tCharsetGreek    = \"greek\"\n\tCharsetHebrew   = \"hebrew\"\n\tCharsetHP8      = \"hp8\"\n\tCharsetKEYBCS2  = \"keybcs2\"\n\tCharsetKOI8R    = \"koi8r\"\n\tCharsetKOI8U    = \"koi8u\"\n\tCharsetLatin2   = \"latin2\"\n\tCharsetLatin5   = \"latin5\"\n\tCharsetLatin7   = \"latin7\"\n\tCharsetMacCE    = \"macce\"\n\tCharsetMacRoman = \"macroman\"\n\tCharsetSJIS     = \"sjis\"\n\tCharsetSWE7     = \"swe7\"\n\tCharsetTIS620   = \"tis620\"\n\tCharsetUCS2     = \"ucs2\"\n\tCharsetUJIS     = \"ujis\"\n\tCharsetUTF16    = \"utf16\"\n\tCharsetUTF16LE  = \"utf16le\"\n\tCharsetUTF32    = \"utf32\"\n\t//revive:enable:exported\n)\n\nvar charsets = map[string]*Charset{\n\tCharsetARMSCII8: {Name: CharsetARMSCII8, Maxlen: 1, DefaultCollation: \"armscii8_general_ci\", Desc: \"ARMSCII-8 Armenian\", Collations: make(map[string]*Collation)},\n\tCharsetASCII:    {Name: CharsetASCII, Maxlen: 1, DefaultCollation: \"ascii_general_ci\", Desc: \"US ASCII\", Collations: make(map[string]*Collation)},\n\tCharsetBig5:     {Name: CharsetBig5, Maxlen: 2, DefaultCollation: \"big5_chinese_ci\", Desc: \"Big5 Traditional Chinese\", Collations: make(map[string]*Collation)},\n\tCharsetBin:      {Name: CharsetBin, Maxlen: 1, DefaultCollation: \"binary\", Desc: \"Binary pseudo charset\", Collations: make(map[string]*Collation)},\n\tCharsetLatin1:   {Name: CharsetLatin1, Maxlen: 1, DefaultCollation: \"cp1250_general_ci\", Desc: \"Windows Central European\", Collations: make(map[string]*Collation)},\n\tCharsetCP1250:   {Name: CharsetCP1250, Maxlen: 1, DefaultCollation: \"cp1251_general_ci\", Desc: \"Windows Cyrillic\", Collations: make(map[string]*Collation)},\n\tCharsetCP1251:   {Name: CharsetCP1251, Maxlen: 1, DefaultCollation: \"cp1256_general_ci\", Desc: \"Windows Arabic\", Collations: make(map[string]*Collation)},\n\tCharsetCP1256:   {Name: CharsetCP1256, Maxlen: 1, DefaultCollation: \"cp1257_general_ci\", Desc: \"Windows Baltic\", Collations: make(map[string]*Collation)},\n\tCharsetCP1257:   {Name: CharsetCP1257, Maxlen: 1, DefaultCollation: \"cp850_general_ci\", Desc: \"DOS West European\", Collations: make(map[string]*Collation)},\n\tCharsetCP850:    {Name: CharsetCP850, Maxlen: 1, DefaultCollation: \"cp852_general_ci\", Desc: \"DOS Central European\", Collations: make(map[string]*Collation)},\n\tCharsetCP852:    {Name: CharsetCP852, Maxlen: 1, DefaultCollation: \"cp866_general_ci\", Desc: \"DOS Russian\", Collations: make(map[string]*Collation)},\n\tCharsetCP866:    {Name: CharsetCP866, Maxlen: 1, DefaultCollation: \"cp932_japanese_ci\", Desc: \"SJIS for Windows Japanese\", Collations: make(map[string]*Collation)},\n\tCharsetCP932:    {Name: CharsetCP932, Maxlen: 2, DefaultCollation: \"dec8_swedish_ci\", Desc: \"DEC West European\", Collations: make(map[string]*Collation)},\n\tCharsetDEC8:     {Name: CharsetDEC8, Maxlen: 1, DefaultCollation: \"eucjpms_japanese_ci\", Desc: \"UJIS for Windows Japanese\", Collations: make(map[string]*Collation)},\n\tCharsetEUCJPMS:  {Name: CharsetEUCJPMS, Maxlen: 3, DefaultCollation: \"euckr_korean_ci\", Desc: \"EUC-KR Korean\", Collations: make(map[string]*Collation)},\n\tCharsetEUCKR:    {Name: CharsetEUCKR, Maxlen: 2, DefaultCollation: \"gb18030_chinese_ci\", Desc: \"China National Standard GB18030\", Collations: make(map[string]*Collation)},\n\tCharsetGB18030:  {Name: CharsetGB18030, Maxlen: 4, DefaultCollation: \"gb2312_chinese_ci\", Desc: \"GB2312 Simplified Chinese\", Collations: make(map[string]*Collation)},\n\tCharsetGB2312:   {Name: CharsetGB2312, Maxlen: 2, DefaultCollation: \"gbk_chinese_ci\", Desc: \"GBK Simplified Chinese\", Collations: make(map[string]*Collation)},\n\tCharsetGBK:      {Name: CharsetGBK, Maxlen: 2, DefaultCollation: \"geostd8_general_ci\", Desc: \"GEOSTD8 Georgian\", Collations: make(map[string]*Collation)},\n\tCharsetGEOSTD8:  {Name: CharsetGEOSTD8, Maxlen: 1, DefaultCollation: \"greek_general_ci\", Desc: \"ISO 8859-7 Greek\", Collations: make(map[string]*Collation)},\n\tCharsetGreek:    {Name: CharsetGreek, Maxlen: 1, DefaultCollation: \"hebrew_general_ci\", Desc: \"ISO 8859-8 Hebrew\", Collations: make(map[string]*Collation)},\n\tCharsetHebrew:   {Name: CharsetHebrew, Maxlen: 1, DefaultCollation: \"hp8_english_ci\", Desc: \"HP West European\", Collations: make(map[string]*Collation)},\n\tCharsetHP8:      {Name: CharsetHP8, Maxlen: 1, DefaultCollation: \"keybcs2_general_ci\", Desc: \"DOS Kamenicky Czech-Slovak\", Collations: make(map[string]*Collation)},\n\tCharsetKEYBCS2:  {Name: CharsetKEYBCS2, Maxlen: 1, DefaultCollation: \"koi8r_general_ci\", Desc: \"KOI8-R Relcom Russian\", Collations: make(map[string]*Collation)},\n\tCharsetKOI8R:    {Name: CharsetKOI8R, Maxlen: 1, DefaultCollation: \"koi8u_general_ci\", Desc: \"KOI8-U Ukrainian\", Collations: make(map[string]*Collation)},\n\tCharsetKOI8U:    {Name: CharsetKOI8U, Maxlen: 1, DefaultCollation: \"latin1_swedish_ci\", Desc: \"cp1252 West European\", Collations: make(map[string]*Collation)},\n\tCharsetLatin2:   {Name: CharsetLatin2, Maxlen: 1, DefaultCollation: \"latin2_general_ci\", Desc: \"ISO 8859-2 Central European\", Collations: make(map[string]*Collation)},\n\tCharsetLatin5:   {Name: CharsetLatin5, Maxlen: 1, DefaultCollation: \"latin5_turkish_ci\", Desc: \"ISO 8859-9 Turkish\", Collations: make(map[string]*Collation)},\n\tCharsetLatin7:   {Name: CharsetLatin7, Maxlen: 1, DefaultCollation: \"latin7_general_ci\", Desc: \"ISO 8859-13 Baltic\", Collations: make(map[string]*Collation)},\n\tCharsetMacCE:    {Name: CharsetMacCE, Maxlen: 1, DefaultCollation: \"macce_general_ci\", Desc: \"Mac Central European\", Collations: make(map[string]*Collation)},\n\tCharsetMacRoman: {Name: CharsetMacRoman, Maxlen: 1, DefaultCollation: \"macroman_general_ci\", Desc: \"Mac West European\", Collations: make(map[string]*Collation)},\n\tCharsetSJIS:     {Name: CharsetSJIS, Maxlen: 2, DefaultCollation: \"sjis_japanese_ci\", Desc: \"Shift-JIS Japanese\", Collations: make(map[string]*Collation)},\n\tCharsetSWE7:     {Name: CharsetSWE7, Maxlen: 1, DefaultCollation: \"swe7_swedish_ci\", Desc: \"7bit Swedish\", Collations: make(map[string]*Collation)},\n\tCharsetTIS620:   {Name: CharsetTIS620, Maxlen: 1, DefaultCollation: \"tis620_thai_ci\", Desc: \"TIS620 Thai\", Collations: make(map[string]*Collation)},\n\tCharsetUCS2:     {Name: CharsetUCS2, Maxlen: 2, DefaultCollation: \"ucs2_general_ci\", Desc: \"UCS-2 Unicode\", Collations: make(map[string]*Collation)},\n\tCharsetUJIS:     {Name: CharsetUJIS, Maxlen: 3, DefaultCollation: \"ujis_japanese_ci\", Desc: \"EUC-JP Japanese\", Collations: make(map[string]*Collation)},\n\tCharsetUTF16:    {Name: CharsetUTF16, Maxlen: 4, DefaultCollation: \"utf16_general_ci\", Desc: \"UTF-16 Unicode\", Collations: make(map[string]*Collation)},\n\tCharsetUTF16LE:  {Name: CharsetUTF16LE, Maxlen: 4, DefaultCollation: \"utf16le_general_ci\", Desc: \"UTF-16LE Unicode\", Collations: make(map[string]*Collation)},\n\tCharsetUTF32:    {Name: CharsetUTF32, Maxlen: 4, DefaultCollation: \"utf32_general_ci\", Desc: \"UTF-32 Unicode\", Collations: make(map[string]*Collation)},\n\tCharsetUTF8:     {Name: CharsetUTF8, Maxlen: 3, DefaultCollation: \"utf8_general_ci\", Desc: \"UTF-8 Unicode\", Collations: make(map[string]*Collation)},\n\tCharsetUTF8MB4:  {Name: CharsetUTF8MB4, Maxlen: 4, DefaultCollation: \"utf8mb4_0900_ai_ci\", Desc: \"UTF-8 Unicode\", Collations: make(map[string]*Collation)},\n}\n\nvar collations = []*Collation{\n\t{1, \"big5\", \"big5_chinese_ci\", true, 1, PadSpace},\n\t{2, \"latin2\", \"latin2_czech_cs\", false, 1, PadSpace},\n\t{3, \"dec8\", \"dec8_swedish_ci\", true, 1, PadSpace},\n\t{4, \"cp850\", \"cp850_general_ci\", true, 1, PadSpace},\n\t{5, \"latin1\", \"latin1_german1_ci\", false, 1, PadSpace},\n\t{6, \"hp8\", \"hp8_english_ci\", true, 1, PadSpace},\n\t{7, \"koi8r\", \"koi8r_general_ci\", true, 1, PadSpace},\n\t{8, \"latin1\", \"latin1_swedish_ci\", false, 1, PadSpace},\n\t{9, \"latin2\", \"latin2_general_ci\", true, 1, PadSpace},\n\t{10, \"swe7\", \"swe7_swedish_ci\", true, 1, PadSpace},\n\t{11, \"ascii\", \"ascii_general_ci\", false, 1, PadSpace},\n\t{12, \"ujis\", \"ujis_japanese_ci\", true, 1, PadSpace},\n\t{13, \"sjis\", \"sjis_japanese_ci\", true, 1, PadSpace},\n\t{14, \"cp1251\", \"cp1251_bulgarian_ci\", false, 1, PadSpace},\n\t{15, \"latin1\", \"latin1_danish_ci\", false, 1, PadSpace},\n\t{16, \"hebrew\", \"hebrew_general_ci\", true, 1, PadSpace},\n\t{18, \"tis620\", \"tis620_thai_ci\", true, 1, PadSpace},\n\t{19, \"euckr\", \"euckr_korean_ci\", true, 1, PadSpace},\n\t{20, \"latin7\", \"latin7_estonian_cs\", false, 1, PadSpace},\n\t{21, \"latin2\", \"latin2_hungarian_ci\", false, 1, PadSpace},\n\t{22, \"koi8u\", \"koi8u_general_ci\", true, 1, PadSpace},\n\t{23, \"cp1251\", \"cp1251_ukrainian_ci\", false, 1, PadSpace},\n\t{24, \"gb2312\", \"gb2312_chinese_ci\", true, 1, PadSpace},\n\t{25, \"greek\", \"greek_general_ci\", true, 1, PadSpace},\n\t{26, \"cp1250\", \"cp1250_general_ci\", true, 1, PadSpace},\n\t{27, \"latin2\", \"latin2_croatian_ci\", false, 1, PadSpace},\n\t{28, \"gbk\", \"gbk_chinese_ci\", false, 1, PadSpace},\n\t{29, \"cp1257\", \"cp1257_lithuanian_ci\", false, 1, PadSpace},\n\t{30, \"latin5\", \"latin5_turkish_ci\", true, 1, PadSpace},\n\t{31, \"latin1\", \"latin1_german2_ci\", false, 1, PadSpace},\n\t{32, \"armscii8\", \"armscii8_general_ci\", true, 1, PadSpace},\n\t{33, \"utf8\", \"utf8_general_ci\", false, 1, PadSpace},\n\t{34, \"cp1250\", \"cp1250_czech_cs\", false, 1, PadSpace},\n\t{35, \"ucs2\", \"ucs2_general_ci\", true, 1, PadSpace},\n\t{36, \"cp866\", \"cp866_general_ci\", true, 1, PadSpace},\n\t{37, \"keybcs2\", \"keybcs2_general_ci\", true, 1, PadSpace},\n\t{38, \"macce\", \"macce_general_ci\", true, 1, PadSpace},\n\t{39, \"macroman\", \"macroman_general_ci\", true, 1, PadSpace},\n\t{40, \"cp852\", \"cp852_general_ci\", true, 1, PadSpace},\n\t{41, \"latin7\", \"latin7_general_ci\", true, 1, PadSpace},\n\t{42, \"latin7\", \"latin7_general_cs\", false, 1, PadSpace},\n\t{43, \"macce\", \"macce_bin\", false, 1, PadSpace},\n\t{44, \"cp1250\", \"cp1250_croatian_ci\", false, 1, PadSpace},\n\t{45, \"utf8mb4\", \"utf8mb4_general_ci\", false, 1, PadSpace},\n\t{46, \"utf8mb4\", \"utf8mb4_bin\", true, 1, PadSpace},\n\t{47, \"latin1\", \"latin1_bin\", true, 1, PadSpace},\n\t{48, \"latin1\", \"latin1_general_ci\", false, 1, PadSpace},\n\t{49, \"latin1\", \"latin1_general_cs\", false, 1, PadSpace},\n\t{50, \"cp1251\", \"cp1251_bin\", false, 1, PadSpace},\n\t{51, \"cp1251\", \"cp1251_general_ci\", true, 1, PadSpace},\n\t{52, \"cp1251\", \"cp1251_general_cs\", false, 1, PadSpace},\n\t{53, \"macroman\", \"macroman_bin\", false, 1, PadSpace},\n\t{54, \"utf16\", \"utf16_general_ci\", true, 1, PadSpace},\n\t{55, \"utf16\", \"utf16_bin\", false, 1, PadSpace},\n\t{56, \"utf16le\", \"utf16le_general_ci\", true, 1, PadSpace},\n\t{57, \"cp1256\", \"cp1256_general_ci\", true, 1, PadSpace},\n\t{58, \"cp1257\", \"cp1257_bin\", false, 1, PadSpace},\n\t{59, \"cp1257\", \"cp1257_general_ci\", true, 1, PadSpace},\n\t{60, \"utf32\", \"utf32_general_ci\", true, 1, PadSpace},\n\t{61, \"utf32\", \"utf32_bin\", false, 1, PadSpace},\n\t{62, \"utf16le\", \"utf16le_bin\", false, 1, PadSpace},\n\t{63, \"binary\", \"binary\", true, 1, PadNone},\n\t{64, \"armscii8\", \"armscii8_bin\", false, 1, PadSpace},\n\t{65, \"ascii\", \"ascii_bin\", true, 1, PadSpace},\n\t{66, \"cp1250\", \"cp1250_bin\", false, 1, PadSpace},\n\t{67, \"cp1256\", \"cp1256_bin\", false, 1, PadSpace},\n\t{68, \"cp866\", \"cp866_bin\", false, 1, PadSpace},\n\t{69, \"dec8\", \"dec8_bin\", false, 1, PadSpace},\n\t{70, \"greek\", \"greek_bin\", false, 1, PadSpace},\n\t{71, \"hebrew\", \"hebrew_bin\", false, 1, PadSpace},\n\t{72, \"hp8\", \"hp8_bin\", false, 1, PadSpace},\n\t{73, \"keybcs2\", \"keybcs2_bin\", false, 1, PadSpace},\n\t{74, \"koi8r\", \"koi8r_bin\", false, 1, PadSpace},\n\t{75, \"koi8u\", \"koi8u_bin\", false, 1, PadSpace},\n\t{76, \"utf8\", \"utf8_tolower_ci\", false, 1, PadNone},\n\t{77, \"latin2\", \"latin2_bin\", false, 1, PadSpace},\n\t{78, \"latin5\", \"latin5_bin\", false, 1, PadSpace},\n\t{79, \"latin7\", \"latin7_bin\", false, 1, PadSpace},\n\t{80, \"cp850\", \"cp850_bin\", false, 1, PadSpace},\n\t{81, \"cp852\", \"cp852_bin\", false, 1, PadSpace},\n\t{82, \"swe7\", \"swe7_bin\", false, 1, PadSpace},\n\t{83, \"utf8\", \"utf8_bin\", true, 1, PadSpace},\n\t{84, \"big5\", \"big5_bin\", false, 1, PadSpace},\n\t{85, \"euckr\", \"euckr_bin\", false, 1, PadSpace},\n\t{86, \"gb2312\", \"gb2312_bin\", false, 1, PadSpace},\n\t{87, \"gbk\", \"gbk_bin\", true, 1, PadSpace},\n\t{88, \"sjis\", \"sjis_bin\", false, 1, PadSpace},\n\t{89, \"tis620\", \"tis620_bin\", false, 1, PadSpace},\n\t{90, \"ucs2\", \"ucs2_bin\", false, 1, PadSpace},\n\t{91, \"ujis\", \"ujis_bin\", false, 1, PadSpace},\n\t{92, \"geostd8\", \"geostd8_general_ci\", true, 1, PadSpace},\n\t{93, \"geostd8\", \"geostd8_bin\", false, 1, PadSpace},\n\t{94, \"latin1\", \"latin1_spanish_ci\", false, 1, PadSpace},\n\t{95, \"cp932\", \"cp932_japanese_ci\", true, 1, PadSpace},\n\t{96, \"cp932\", \"cp932_bin\", false, 1, PadSpace},\n\t{97, \"eucjpms\", \"eucjpms_japanese_ci\", true, 1, PadSpace},\n\t{98, \"eucjpms\", \"eucjpms_bin\", false, 1, PadSpace},\n\t{99, \"cp1250\", \"cp1250_polish_ci\", false, 1, PadSpace},\n\t{101, \"utf16\", \"utf16_unicode_ci\", false, 1, PadSpace},\n\t{102, \"utf16\", \"utf16_icelandic_ci\", false, 1, PadSpace},\n\t{103, \"utf16\", \"utf16_latvian_ci\", false, 1, PadSpace},\n\t{104, \"utf16\", \"utf16_romanian_ci\", false, 1, PadSpace},\n\t{105, \"utf16\", \"utf16_slovenian_ci\", false, 1, PadSpace},\n\t{106, \"utf16\", \"utf16_polish_ci\", false, 1, PadSpace},\n\t{107, \"utf16\", \"utf16_estonian_ci\", false, 1, PadSpace},\n\t{108, \"utf16\", \"utf16_spanish_ci\", false, 1, PadSpace},\n\t{109, \"utf16\", \"utf16_swedish_ci\", false, 1, PadSpace},\n\t{110, \"utf16\", \"utf16_turkish_ci\", false, 1, PadSpace},\n\t{111, \"utf16\", \"utf16_czech_ci\", false, 1, PadSpace},\n\t{112, \"utf16\", \"utf16_danish_ci\", false, 1, PadSpace},\n\t{113, \"utf16\", \"utf16_lithuanian_ci\", false, 1, PadSpace},\n\t{114, \"utf16\", \"utf16_slovak_ci\", false, 1, PadSpace},\n\t{115, \"utf16\", \"utf16_spanish2_ci\", false, 1, PadSpace},\n\t{116, \"utf16\", \"utf16_roman_ci\", false, 1, PadSpace},\n\t{117, \"utf16\", \"utf16_persian_ci\", false, 1, PadSpace},\n\t{118, \"utf16\", \"utf16_esperanto_ci\", false, 1, PadSpace},\n\t{119, \"utf16\", \"utf16_hungarian_ci\", false, 1, PadSpace},\n\t{120, \"utf16\", \"utf16_sinhala_ci\", false, 1, PadSpace},\n\t{121, \"utf16\", \"utf16_german2_ci\", false, 1, PadSpace},\n\t{122, \"utf16\", \"utf16_croatian_ci\", false, 1, PadSpace},\n\t{123, \"utf16\", \"utf16_unicode_520_ci\", false, 1, PadSpace},\n\t{124, \"utf16\", \"utf16_vietnamese_ci\", false, 1, PadSpace},\n\t{128, \"ucs2\", \"ucs2_unicode_ci\", false, 1, PadSpace},\n\t{129, \"ucs2\", \"ucs2_icelandic_ci\", false, 1, PadSpace},\n\t{130, \"ucs2\", \"ucs2_latvian_ci\", false, 1, PadSpace},\n\t{131, \"ucs2\", \"ucs2_romanian_ci\", false, 1, PadSpace},\n\t{132, \"ucs2\", \"ucs2_slovenian_ci\", false, 1, PadSpace},\n\t{133, \"ucs2\", \"ucs2_polish_ci\", false, 1, PadSpace},\n\t{134, \"ucs2\", \"ucs2_estonian_ci\", false, 1, PadSpace},\n\t{135, \"ucs2\", \"ucs2_spanish_ci\", false, 1, PadSpace},\n\t{136, \"ucs2\", \"ucs2_swedish_ci\", false, 1, PadSpace},\n\t{137, \"ucs2\", \"ucs2_turkish_ci\", false, 1, PadSpace},\n\t{138, \"ucs2\", \"ucs2_czech_ci\", false, 1, PadSpace},\n\t{139, \"ucs2\", \"ucs2_danish_ci\", false, 1, PadSpace},\n\t{140, \"ucs2\", \"ucs2_lithuanian_ci\", false, 1, PadSpace},\n\t{141, \"ucs2\", \"ucs2_slovak_ci\", false, 1, PadSpace},\n\t{142, \"ucs2\", \"ucs2_spanish2_ci\", false, 1, PadSpace},\n\t{143, \"ucs2\", \"ucs2_roman_ci\", false, 1, PadSpace},\n\t{144, \"ucs2\", \"ucs2_persian_ci\", false, 1, PadSpace},\n\t{145, \"ucs2\", \"ucs2_esperanto_ci\", false, 1, PadSpace},\n\t{146, \"ucs2\", \"ucs2_hungarian_ci\", false, 1, PadSpace},\n\t{147, \"ucs2\", \"ucs2_sinhala_ci\", false, 1, PadSpace},\n\t{148, \"ucs2\", \"ucs2_german2_ci\", false, 1, PadSpace},\n\t{149, \"ucs2\", \"ucs2_croatian_ci\", false, 1, PadSpace},\n\t{150, \"ucs2\", \"ucs2_unicode_520_ci\", false, 1, PadSpace},\n\t{151, \"ucs2\", \"ucs2_vietnamese_ci\", false, 1, PadSpace},\n\t{159, \"ucs2\", \"ucs2_general_mysql500_ci\", false, 1, PadSpace},\n\t{160, \"utf32\", \"utf32_unicode_ci\", false, 1, PadSpace},\n\t{161, \"utf32\", \"utf32_icelandic_ci\", false, 1, PadSpace},\n\t{162, \"utf32\", \"utf32_latvian_ci\", false, 1, PadSpace},\n\t{163, \"utf32\", \"utf32_romanian_ci\", false, 1, PadSpace},\n\t{164, \"utf32\", \"utf32_slovenian_ci\", false, 1, PadSpace},\n\t{165, \"utf32\", \"utf32_polish_ci\", false, 1, PadSpace},\n\t{166, \"utf32\", \"utf32_estonian_ci\", false, 1, PadSpace},\n\t{167, \"utf32\", \"utf32_spanish_ci\", false, 1, PadSpace},\n\t{168, \"utf32\", \"utf32_swedish_ci\", false, 1, PadSpace},\n\t{169, \"utf32\", \"utf32_turkish_ci\", false, 1, PadSpace},\n\t{170, \"utf32\", \"utf32_czech_ci\", false, 1, PadSpace},\n\t{171, \"utf32\", \"utf32_danish_ci\", false, 1, PadSpace},\n\t{172, \"utf32\", \"utf32_lithuanian_ci\", false, 1, PadSpace},\n\t{173, \"utf32\", \"utf32_slovak_ci\", false, 1, PadSpace},\n\t{174, \"utf32\", \"utf32_spanish2_ci\", false, 1, PadSpace},\n\t{175, \"utf32\", \"utf32_roman_ci\", false, 1, PadSpace},\n\t{176, \"utf32\", \"utf32_persian_ci\", false, 1, PadSpace},\n\t{177, \"utf32\", \"utf32_esperanto_ci\", false, 1, PadSpace},\n\t{178, \"utf32\", \"utf32_hungarian_ci\", false, 1, PadSpace},\n\t{179, \"utf32\", \"utf32_sinhala_ci\", false, 1, PadSpace},\n\t{180, \"utf32\", \"utf32_german2_ci\", false, 1, PadSpace},\n\t{181, \"utf32\", \"utf32_croatian_ci\", false, 1, PadSpace},\n\t{182, \"utf32\", \"utf32_unicode_520_ci\", false, 1, PadSpace},\n\t{183, \"utf32\", \"utf32_vietnamese_ci\", false, 1, PadSpace},\n\t{192, \"utf8\", \"utf8_unicode_ci\", false, 8, PadSpace},\n\t{193, \"utf8\", \"utf8_icelandic_ci\", false, 1, PadNone},\n\t{194, \"utf8\", \"utf8_latvian_ci\", false, 1, PadNone},\n\t{195, \"utf8\", \"utf8_romanian_ci\", false, 1, PadNone},\n\t{196, \"utf8\", \"utf8_slovenian_ci\", false, 1, PadNone},\n\t{197, \"utf8\", \"utf8_polish_ci\", false, 1, PadNone},\n\t{198, \"utf8\", \"utf8_estonian_ci\", false, 1, PadNone},\n\t{199, \"utf8\", \"utf8_spanish_ci\", false, 1, PadNone},\n\t{200, \"utf8\", \"utf8_swedish_ci\", false, 1, PadNone},\n\t{201, \"utf8\", \"utf8_turkish_ci\", false, 1, PadNone},\n\t{202, \"utf8\", \"utf8_czech_ci\", false, 1, PadNone},\n\t{203, \"utf8\", \"utf8_danish_ci\", false, 1, PadNone},\n\t{204, \"utf8\", \"utf8_lithuanian_ci\", false, 1, PadNone},\n\t{205, \"utf8\", \"utf8_slovak_ci\", false, 1, PadNone},\n\t{206, \"utf8\", \"utf8_spanish2_ci\", false, 1, PadNone},\n\t{207, \"utf8\", \"utf8_roman_ci\", false, 1, PadNone},\n\t{208, \"utf8\", \"utf8_persian_ci\", false, 1, PadNone},\n\t{209, \"utf8\", \"utf8_esperanto_ci\", false, 1, PadNone},\n\t{210, \"utf8\", \"utf8_hungarian_ci\", false, 1, PadNone},\n\t{211, \"utf8\", \"utf8_sinhala_ci\", false, 1, PadNone},\n\t{212, \"utf8\", \"utf8_german2_ci\", false, 1, PadNone},\n\t{213, \"utf8\", \"utf8_croatian_ci\", false, 1, PadNone},\n\t{214, \"utf8\", \"utf8_unicode_520_ci\", false, 1, PadNone},\n\t{215, \"utf8\", \"utf8_vietnamese_ci\", false, 1, PadNone},\n\t{223, \"utf8\", \"utf8_general_mysql500_ci\", false, 1, PadNone},\n\t{224, \"utf8mb4\", \"utf8mb4_unicode_ci\", false, 8, PadSpace},\n\t{225, \"utf8mb4\", \"utf8mb4_icelandic_ci\", false, 1, PadSpace},\n\t{226, \"utf8mb4\", \"utf8mb4_latvian_ci\", false, 1, PadSpace},\n\t{227, \"utf8mb4\", \"utf8mb4_romanian_ci\", false, 1, PadSpace},\n\t{228, \"utf8mb4\", \"utf8mb4_slovenian_ci\", false, 1, PadSpace},\n\t{229, \"utf8mb4\", \"utf8mb4_polish_ci\", false, 1, PadSpace},\n\t{230, \"utf8mb4\", \"utf8mb4_estonian_ci\", false, 1, PadSpace},\n\t{231, \"utf8mb4\", \"utf8mb4_spanish_ci\", false, 1, PadSpace},\n\t{232, \"utf8mb4\", \"utf8mb4_swedish_ci\", false, 1, PadSpace},\n\t{233, \"utf8mb4\", \"utf8mb4_turkish_ci\", false, 1, PadSpace},\n\t{234, \"utf8mb4\", \"utf8mb4_czech_ci\", false, 1, PadSpace},\n\t{235, \"utf8mb4\", \"utf8mb4_danish_ci\", false, 1, PadSpace},\n\t{236, \"utf8mb4\", \"utf8mb4_lithuanian_ci\", false, 1, PadSpace},\n\t{237, \"utf8mb4\", \"utf8mb4_slovak_ci\", false, 1, PadSpace},\n\t{238, \"utf8mb4\", \"utf8mb4_spanish2_ci\", false, 1, PadSpace},\n\t{239, \"utf8mb4\", \"utf8mb4_roman_ci\", false, 1, PadSpace},\n\t{240, \"utf8mb4\", \"utf8mb4_persian_ci\", false, 1, PadSpace},\n\t{241, \"utf8mb4\", \"utf8mb4_esperanto_ci\", false, 1, PadSpace},\n\t{242, \"utf8mb4\", \"utf8mb4_hungarian_ci\", false, 1, PadSpace},\n\t{243, \"utf8mb4\", \"utf8mb4_sinhala_ci\", false, 1, PadSpace},\n\t{244, \"utf8mb4\", \"utf8mb4_german2_ci\", false, 1, PadSpace},\n\t{245, \"utf8mb4\", \"utf8mb4_croatian_ci\", false, 1, PadSpace},\n\t{246, \"utf8mb4\", \"utf8mb4_unicode_520_ci\", false, 1, PadSpace},\n\t{247, \"utf8mb4\", \"utf8mb4_vietnamese_ci\", false, 1, PadSpace},\n\t{248, \"gb18030\", \"gb18030_chinese_ci\", false, 1, PadSpace},\n\t{249, \"gb18030\", \"gb18030_bin\", true, 1, PadSpace},\n\t{250, \"gb18030\", \"gb18030_unicode_520_ci\", false, 1, PadSpace},\n\t{255, \"utf8mb4\", \"utf8mb4_0900_ai_ci\", false, 0, PadNone},\n\t{256, \"utf8mb4\", \"utf8mb4_de_pb_0900_ai_ci\", false, 1, PadNone},\n\t{257, \"utf8mb4\", \"utf8mb4_is_0900_ai_ci\", false, 1, PadNone},\n\t{258, \"utf8mb4\", \"utf8mb4_lv_0900_ai_ci\", false, 1, PadNone},\n\t{259, \"utf8mb4\", \"utf8mb4_ro_0900_ai_ci\", false, 1, PadNone},\n\t{260, \"utf8mb4\", \"utf8mb4_sl_0900_ai_ci\", false, 1, PadNone},\n\t{261, \"utf8mb4\", \"utf8mb4_pl_0900_ai_ci\", false, 1, PadNone},\n\t{262, \"utf8mb4\", \"utf8mb4_et_0900_ai_ci\", false, 1, PadNone},\n\t{263, \"utf8mb4\", \"utf8mb4_es_0900_ai_ci\", false, 1, PadNone},\n\t{264, \"utf8mb4\", \"utf8mb4_sv_0900_ai_ci\", false, 1, PadNone},\n\t{265, \"utf8mb4\", \"utf8mb4_tr_0900_ai_ci\", false, 1, PadNone},\n\t{266, \"utf8mb4\", \"utf8mb4_cs_0900_ai_ci\", false, 1, PadNone},\n\t{267, \"utf8mb4\", \"utf8mb4_da_0900_ai_ci\", false, 1, PadNone},\n\t{268, \"utf8mb4\", \"utf8mb4_lt_0900_ai_ci\", false, 1, PadNone},\n\t{269, \"utf8mb4\", \"utf8mb4_sk_0900_ai_ci\", false, 1, PadNone},\n\t{270, \"utf8mb4\", \"utf8mb4_es_trad_0900_ai_ci\", false, 1, PadNone},\n\t{271, \"utf8mb4\", \"utf8mb4_la_0900_ai_ci\", false, 1, PadNone},\n\t{273, \"utf8mb4\", \"utf8mb4_eo_0900_ai_ci\", false, 1, PadNone},\n\t{274, \"utf8mb4\", \"utf8mb4_hu_0900_ai_ci\", false, 1, PadNone},\n\t{275, \"utf8mb4\", \"utf8mb4_hr_0900_ai_ci\", false, 1, PadNone},\n\t{277, \"utf8mb4\", \"utf8mb4_vi_0900_ai_ci\", false, 1, PadNone},\n\t{278, \"utf8mb4\", \"utf8mb4_0900_as_cs\", false, 1, PadNone},\n\t{279, \"utf8mb4\", \"utf8mb4_de_pb_0900_as_cs\", false, 1, PadNone},\n\t{280, \"utf8mb4\", \"utf8mb4_is_0900_as_cs\", false, 1, PadNone},\n\t{281, \"utf8mb4\", \"utf8mb4_lv_0900_as_cs\", false, 1, PadNone},\n\t{282, \"utf8mb4\", \"utf8mb4_ro_0900_as_cs\", false, 1, PadNone},\n\t{283, \"utf8mb4\", \"utf8mb4_sl_0900_as_cs\", false, 1, PadNone},\n\t{284, \"utf8mb4\", \"utf8mb4_pl_0900_as_cs\", false, 1, PadNone},\n\t{285, \"utf8mb4\", \"utf8mb4_et_0900_as_cs\", false, 1, PadNone},\n\t{286, \"utf8mb4\", \"utf8mb4_es_0900_as_cs\", false, 1, PadNone},\n\t{287, \"utf8mb4\", \"utf8mb4_sv_0900_as_cs\", false, 1, PadNone},\n\t{288, \"utf8mb4\", \"utf8mb4_tr_0900_as_cs\", false, 1, PadNone},\n\t{289, \"utf8mb4\", \"utf8mb4_cs_0900_as_cs\", false, 1, PadNone},\n\t{290, \"utf8mb4\", \"utf8mb4_da_0900_as_cs\", false, 1, PadNone},\n\t{291, \"utf8mb4\", \"utf8mb4_lt_0900_as_cs\", false, 1, PadNone},\n\t{292, \"utf8mb4\", \"utf8mb4_sk_0900_as_cs\", false, 1, PadNone},\n\t{293, \"utf8mb4\", \"utf8mb4_es_trad_0900_as_cs\", false, 1, PadNone},\n\t{294, \"utf8mb4\", \"utf8mb4_la_0900_as_cs\", false, 1, PadNone},\n\t{296, \"utf8mb4\", \"utf8mb4_eo_0900_as_cs\", false, 1, PadNone},\n\t{297, \"utf8mb4\", \"utf8mb4_hu_0900_as_cs\", false, 1, PadNone},\n\t{298, \"utf8mb4\", \"utf8mb4_hr_0900_as_cs\", false, 1, PadNone},\n\t{300, \"utf8mb4\", \"utf8mb4_vi_0900_as_cs\", false, 1, PadNone},\n\t{303, \"utf8mb4\", \"utf8mb4_ja_0900_as_cs\", false, 1, PadNone},\n\t{304, \"utf8mb4\", \"utf8mb4_ja_0900_as_cs_ks\", false, 1, PadNone},\n\t{305, \"utf8mb4\", \"utf8mb4_0900_as_ci\", false, 1, PadNone},\n\t{306, \"utf8mb4\", \"utf8mb4_ru_0900_ai_ci\", false, 1, PadNone},\n\t{307, \"utf8mb4\", \"utf8mb4_ru_0900_as_cs\", false, 1, PadNone},\n\t{308, \"utf8mb4\", \"utf8mb4_zh_0900_as_cs\", false, 1, PadNone},\n\t{309, \"utf8mb4\", \"utf8mb4_0900_bin\", false, 1, PadNone},\n\t{2048, \"utf8mb4\", \"utf8mb4_zh_pinyin_tidb_as_cs\", false, 1, PadNone},\n}\n\n// AddCharset adds a new charset.\n// Use only when adding a custom charset to the parser.\nfunc AddCharset(c *Charset) {\n\tCharacterSetInfos[c.Name] = c\n}\n\n// RemoveCharset remove a charset.\n// Use only when remove a custom charset to the parser.\nfunc RemoveCharset(c string) {\n\tdelete(CharacterSetInfos, c)\n\tfor i := range supportedCollations {\n\t\tif supportedCollations[i].Name == c {\n\t\t\tsupportedCollations = append(supportedCollations[:i], supportedCollations[i+1:]...)\n\t\t}\n\t}\n}\n\n// AddCollation adds a new collation.\n// Use only when adding a custom collation to the parser.\nfunc AddCollation(c *Collation) {\n\tcollationsIDMap[c.ID] = c\n\tcollationsNameMap[c.Name] = c\n\n\tif _, ok := supportedCollationNames[c.Name]; ok {\n\t\tAddSupportedCollation(c)\n\t}\n\n\tif charset, ok := CharacterSetInfos[c.CharsetName]; ok {\n\t\tcharset.Collations[c.Name] = c\n\t}\n\n\tif charset, ok := charsets[c.CharsetName]; ok {\n\t\tcharset.Collations[c.Name] = c\n\t}\n}\n\n// AddSupportedCollation adds a new collation into supportedCollations.\n// Use only when adding a custom collation to the parser.\nfunc AddSupportedCollation(c *Collation) {\n\tsupportedCollations = append(supportedCollations, c)\n}\n\n// init method always puts to the end of file.\nfunc init() {\n\tfor _, c := range collations {\n\t\tAddCollation(c)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport \"bytes\"\n\n// Make sure all of them implement Encoding interface.\nvar (\n\t_ Encoding = &encodingUTF8{}\n\t_ Encoding = &encodingUTF8MB3Strict{}\n\t_ Encoding = &encodingASCII{}\n\t_ Encoding = &encodingLatin1{}\n\t_ Encoding = &encodingBin{}\n\t_ Encoding = &encodingGBK{}\n)\n\n// IsSupportedEncoding checks if the charset is fully supported.\nfunc IsSupportedEncoding(charset string) bool {\n\t_, ok := encodingMap[charset]\n\treturn ok\n}\n\n// FindEncodingTakeUTF8AsNoop finds the encoding according to the charset\n// except that utf-8 is treated as no-operation encoding. This is used to\n// reduce the overhead of utf-8 validation in some cases.\nfunc FindEncodingTakeUTF8AsNoop(charset string) Encoding {\n\tenc := FindEncoding(charset)\n\tif enc.Tp() == EncodingTpUTF8 {\n\t\treturn EncodingBinImpl\n\t}\n\treturn enc\n}\n\n// FindEncoding finds the encoding according to charset.\nfunc FindEncoding(charset string) Encoding {\n\tif len(charset) == 0 {\n\t\treturn EncodingBinImpl\n\t}\n\tif e, exist := encodingMap[charset]; exist {\n\t\treturn e\n\t}\n\treturn EncodingBinImpl\n}\n\nvar encodingMap = map[string]Encoding{\n\tCharsetUTF8MB4: EncodingUTF8Impl,\n\tCharsetUTF8:    EncodingUTF8Impl,\n\tCharsetGBK:     EncodingGBKImpl,\n\tCharsetLatin1:  EncodingLatin1Impl,\n\tCharsetBin:     EncodingBinImpl,\n\tCharsetASCII:   EncodingASCIIImpl,\n}\n\n// Encoding provide encode/decode functions for a string with a specific charset.\ntype Encoding interface {\n\t// Name is the name of the encoding.\n\tName() string\n\t// Tp is the type of the encoding.\n\tTp() EncodingTp\n\t// Peek returns the next char.\n\tPeek(src []byte) []byte\n\t// MbLen returns multiple byte length, if the next character is single byte, return 0.\n\tMbLen(string) int\n\t// IsValid checks whether the utf-8 bytes can be convert to valid string in current encoding.\n\tIsValid(src []byte) bool\n\t// Foreach iterates the characters in current encoding.\n\tForeach(src []byte, op Op, fn func(from, to []byte, ok bool) bool)\n\t// Transform map the bytes in src to dest according to Op.\n\t// **the caller should initialize the dest if it wants to avoid memory alloc every time,\n\t//   or else it will always make a new one**\n\t//\n\t// **the returned array may be the alias of `src`, edit the returned array on your own risk**\n\tTransform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error)\n\t// ToUpper change a string to uppercase.\n\tToUpper(src string) string\n\t// ToLower change a string to lowercase.\n\tToLower(src string) string\n}\n\n// EncodingTp is the type of the encoding.\ntype EncodingTp int8\n\n//revive:disable\nconst (\n\tEncodingTpNone EncodingTp = iota\n\tEncodingTpUTF8\n\tEncodingTpUTF8MB3Strict\n\tEncodingTpASCII\n\tEncodingTpLatin1\n\tEncodingTpBin\n\tEncodingTpGBK\n)\n\n//revive:enable\n\n// Op is used by Encoding.Transform.\ntype Op int16\n\nconst (\n\topFromUTF8 Op = 1 << iota\n\topToUTF8\n\topTruncateTrim\n\topTruncateReplace\n\topCollectFrom\n\topCollectTo\n\topSkipError\n)\n\n//revive:disable\nconst (\n\t// OpReplaceNoErr is used to replace invalid bytes with '?'.\n\tOpReplaceNoErr  = opFromUTF8 | opTruncateReplace | opCollectFrom | opSkipError\n\tOpReplace       = opFromUTF8 | opTruncateReplace | opCollectFrom\n\tOpEncode        = opFromUTF8 | opTruncateTrim | opCollectTo\n\tOpEncodeNoErr   = OpEncode | opSkipError\n\tOpEncodeReplace = opFromUTF8 | opTruncateReplace | opCollectTo\n\tOpDecode        = opToUTF8 | opTruncateTrim | opCollectTo\n\tOpDecodeNoErr   = OpDecode | opSkipError\n\tOpDecodeReplace = opToUTF8 | opTruncateReplace | opCollectTo\n)\n\n//revive:enable\n\n// CountValidBytes counts the first valid bytes in src that\n// can be encoded to the current encoding.\nfunc CountValidBytes(e Encoding, src []byte) int {\n\tnSrc := 0\n\te.Foreach(src, opFromUTF8, func(from, _ []byte, ok bool) bool {\n\t\tif ok {\n\t\t\tnSrc += len(from)\n\t\t}\n\t\treturn ok\n\t})\n\treturn nSrc\n}\n\n// CountValidBytesDecode counts the first valid bytes in src that\n// can be decoded to utf-8.\nfunc CountValidBytesDecode(e Encoding, src []byte) int {\n\tnSrc := 0\n\te.Foreach(src, opToUTF8, func(from, _ []byte, ok bool) bool {\n\t\tif ok {\n\t\t\tnSrc += len(from)\n\t\t}\n\t\treturn ok\n\t})\n\treturn nSrc\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding_ascii.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"bytes\"\n\tgo_unicode \"unicode\"\n\n\t\"golang.org/x/text/encoding\"\n)\n\n// EncodingASCIIImpl is the instance of encodingASCII\nvar EncodingASCIIImpl = &encodingASCII{encodingBase{enc: encoding.Nop}}\n\nfunc init() {\n\tEncodingASCIIImpl.self = EncodingASCIIImpl\n}\n\n// encodingASCII is the ASCII encoding.\ntype encodingASCII struct {\n\tencodingBase\n}\n\n// Name implements Encoding interface.\nfunc (*encodingASCII) Name() string {\n\treturn CharsetASCII\n}\n\n// Tp implements Encoding interface.\nfunc (*encodingASCII) Tp() EncodingTp {\n\treturn EncodingTpASCII\n}\n\n// Peek implements Encoding interface.\nfunc (*encodingASCII) Peek(src []byte) []byte {\n\tif len(src) == 0 {\n\t\treturn src\n\t}\n\treturn src[:1]\n}\n\n// IsValid implements Encoding interface.\nfunc (*encodingASCII) IsValid(src []byte) bool {\n\tsrcLen := len(src)\n\tfor i := 0; i < srcLen; i++ {\n\t\tif src[i] > go_unicode.MaxASCII {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Transform implements Encoding interface.\nfunc (e *encodingASCII) Transform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error) {\n\tif e.IsValid(src) {\n\t\treturn src, nil\n\t}\n\treturn e.encodingBase.Transform(dest, src, op)\n}\n\n// Foreach implements Encoding interface.\nfunc (*encodingASCII) Foreach(src []byte, _ Op, fn func(from, to []byte, ok bool) bool) {\n\tfor i, w := 0, 0; i < len(src); i += w {\n\t\tw = 1\n\t\tok := true\n\t\tif src[i] > go_unicode.MaxASCII {\n\t\t\tw = len(EncodingUTF8Impl.Peek(src[i:]))\n\t\t\tok = false\n\t\t}\n\t\tif !fn(src[i:i+w], src[i:i+w], ok) {\n\t\t\treturn\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding_base.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/pingcap/tidb/pkg/parser/mysql\"\n\t\"github.com/pingcap/tidb/pkg/parser/terror\"\n\t\"golang.org/x/text/encoding\"\n\t\"golang.org/x/text/transform\"\n)\n\n// ErrInvalidCharacterString returns when the string is invalid in the specific charset.\nvar ErrInvalidCharacterString = terror.ClassParser.NewStd(mysql.ErrInvalidCharacterString)\n\n// encodingBase defines some generic functions.\ntype encodingBase struct {\n\tenc  encoding.Encoding\n\tself Encoding\n}\n\nfunc (encodingBase) MbLen(_ string) int {\n\treturn 0\n}\n\nfunc (encodingBase) ToUpper(src string) string {\n\treturn strings.ToUpper(src)\n}\n\nfunc (encodingBase) ToLower(src string) string {\n\treturn strings.ToLower(src)\n}\n\nfunc (b encodingBase) IsValid(src []byte) bool {\n\tisValid := true\n\tb.self.Foreach(src, opFromUTF8, func(_, _ []byte, ok bool) bool {\n\t\tisValid = ok\n\t\treturn ok\n\t})\n\treturn isValid\n}\n\nfunc (b encodingBase) Transform(dest *bytes.Buffer, src []byte, op Op) (result []byte, err error) {\n\tif dest == nil {\n\t\tdest = &bytes.Buffer{}\n\t\tdest.Grow(len(src))\n\t}\n\tdest.Reset()\n\tb.self.Foreach(src, op, func(from, to []byte, ok bool) bool {\n\t\tif !ok {\n\t\t\tif err == nil && (op&opSkipError == 0) {\n\t\t\t\terr = generateEncodingErr(b.self.Name(), from)\n\t\t\t}\n\t\t\tif op&opTruncateTrim != 0 {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif op&opTruncateReplace != 0 {\n\t\t\t\tdest.WriteByte('?')\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\tif op&opCollectFrom != 0 {\n\t\t\tdest.Write(from)\n\t\t} else if op&opCollectTo != 0 {\n\t\t\tdest.Write(to)\n\t\t}\n\t\treturn true\n\t})\n\treturn dest.Bytes(), err\n}\n\nfunc (b encodingBase) Foreach(src []byte, op Op, fn func(from, to []byte, ok bool) bool) {\n\tvar tfm transform.Transformer\n\tvar peek func([]byte) []byte\n\tif op&opFromUTF8 != 0 {\n\t\ttfm = b.enc.NewEncoder()\n\t\tpeek = EncodingUTF8Impl.Peek\n\t} else {\n\t\ttfm = b.enc.NewDecoder()\n\t\tpeek = b.self.Peek\n\t}\n\tvar buf [4]byte\n\tfor i, w := 0, 0; i < len(src); i += w {\n\t\tw = len(peek(src[i:]))\n\t\tnDst, _, err := tfm.Transform(buf[:], src[i:i+w], false)\n\t\tmeetErr := err != nil || (op&opToUTF8 != 0 && beginWithReplacementChar(buf[:nDst]))\n\t\tif !fn(src[i:i+w], buf[:nDst], !meetErr) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// replacementBytes are bytes for the replacement rune 0xfffd.\nvar replacementBytes = []byte{0xEF, 0xBF, 0xBD}\n\n// beginWithReplacementChar check if dst has the prefix '0xEFBFBD'.\nfunc beginWithReplacementChar(dst []byte) bool {\n\treturn bytes.HasPrefix(dst, replacementBytes)\n}\n\n// generateEncodingErr generates an invalid string in charset error.\nfunc generateEncodingErr(name string, invalidBytes []byte) error {\n\targ := fmt.Sprintf(\"%X\", invalidBytes)\n\treturn ErrInvalidCharacterString.FastGenByArgs(name, arg)\n}\n\n// HackSlice converts string to slice without copy.\n// Use at your own risk.\nfunc HackSlice(s string) (b []byte) {\n\tpBytes := (*reflect.SliceHeader)(unsafe.Pointer(&b))\n\tpString := (*reflect.StringHeader)(unsafe.Pointer(&s))\n\tpBytes.Data = pString.Data\n\tpBytes.Len = pString.Len\n\tpBytes.Cap = pString.Len\n\treturn\n}\n\n// HackString converts slice to string without copy.\n// Use it at your own risk.\nfunc HackString(b []byte) (s string) {\n\tif len(b) == 0 {\n\t\treturn \"\"\n\t}\n\tpbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b))\n\tpstring := (*reflect.StringHeader)(unsafe.Pointer(&s))\n\tpstring.Data = pbytes.Data\n\tpstring.Len = pbytes.Len\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding_bin.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"bytes\"\n\n\t\"golang.org/x/text/encoding\"\n)\n\n// EncodingBinImpl is the instance of encodingBin.\nvar EncodingBinImpl = &encodingBin{encodingBase{enc: encoding.Nop}}\n\nfunc init() {\n\tEncodingBinImpl.self = EncodingBinImpl\n}\n\n// encodingBin is the binary encoding.\ntype encodingBin struct {\n\tencodingBase\n}\n\n// Name implements Encoding interface.\nfunc (*encodingBin) Name() string {\n\treturn CharsetBin\n}\n\n// Tp implements Encoding interface.\nfunc (*encodingBin) Tp() EncodingTp {\n\treturn EncodingTpBin\n}\n\n// Peek implements Encoding interface.\nfunc (*encodingBin) Peek(src []byte) []byte {\n\tif len(src) == 0 {\n\t\treturn src\n\t}\n\treturn src[:1]\n}\n\n// IsValid implements Encoding interface.\nfunc (*encodingBin) IsValid(_ []byte) bool {\n\treturn true\n}\n\n// Foreach implements Encoding interface.\nfunc (*encodingBin) Foreach(src []byte, _ Op, fn func(from, to []byte, ok bool) bool) {\n\tfor i := 0; i < len(src); i++ {\n\t\tif !fn(src[i:i+1], src[i:i+1], true) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (*encodingBin) Transform(_ *bytes.Buffer, src []byte, _ Op) ([]byte, error) {\n\treturn src, nil\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding_gbk.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/encoding\"\n\t\"golang.org/x/text/encoding/simplifiedchinese\"\n)\n\n// EncodingGBKImpl is the instance of encodingGBK\nvar EncodingGBKImpl = &encodingGBK{encodingBase{enc: customGBK{}}}\n\nfunc init() {\n\tEncodingGBKImpl.self = EncodingGBKImpl\n}\n\n// encodingGBK is GBK encoding.\ntype encodingGBK struct {\n\tencodingBase\n}\n\n// Name implements Encoding interface.\nfunc (*encodingGBK) Name() string {\n\treturn CharsetGBK\n}\n\n// Tp implements Encoding interface.\nfunc (*encodingGBK) Tp() EncodingTp {\n\treturn EncodingTpGBK\n}\n\n// Peek implements Encoding interface.\nfunc (*encodingGBK) Peek(src []byte) []byte {\n\tcharLen := 2\n\tif len(src) == 0 || src[0] < 0x80 {\n\t\t// A byte in the range 00–7F is a single byte that means the same thing as it does in ASCII.\n\t\tcharLen = 1\n\t}\n\tif charLen < len(src) {\n\t\treturn src[:charLen]\n\t}\n\treturn src\n}\n\nfunc (*encodingGBK) MbLen(bs string) int {\n\tif len(bs) < 2 {\n\t\treturn 0\n\t}\n\n\tif 0x81 <= bs[0] && bs[0] <= 0xfe {\n\t\tif (0x40 <= bs[1] && bs[1] <= 0x7e) || (0x80 <= bs[1] && bs[1] <= 0xfe) {\n\t\t\treturn 2\n\t\t}\n\t}\n\n\treturn 0\n}\n\n// ToUpper implements Encoding interface.\nfunc (*encodingGBK) ToUpper(d string) string {\n\treturn strings.ToUpperSpecial(GBKCase, d)\n}\n\n// ToLower implements Encoding interface.\nfunc (*encodingGBK) ToLower(d string) string {\n\treturn strings.ToLowerSpecial(GBKCase, d)\n}\n\n// GBKCase follows https://dev.mysql.com/worklog/task/?id=4583.\nvar GBKCase = unicode.SpecialCase{\n\tunicode.CaseRange{Lo: 0x00E0, Hi: 0x00E1, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x00E8, Hi: 0x00EA, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x00EC, Hi: 0x00ED, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x00F2, Hi: 0x00F3, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x00F9, Hi: 0x00FA, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x00FC, Hi: 0x00FC, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x0101, Hi: 0x0101, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x0113, Hi: 0x0113, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x011B, Hi: 0x011B, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x012B, Hi: 0x012B, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x0144, Hi: 0x0144, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x0148, Hi: 0x0148, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x014D, Hi: 0x014D, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x016B, Hi: 0x016B, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01CE, Hi: 0x01CE, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01D0, Hi: 0x01D0, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01D2, Hi: 0x01D2, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01D4, Hi: 0x01D4, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01D6, Hi: 0x01D6, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01D8, Hi: 0x01D8, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01DA, Hi: 0x01DA, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x01DC, Hi: 0x01DC, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n\tunicode.CaseRange{Lo: 0x216A, Hi: 0x216B, Delta: [unicode.MaxCase]rune{0, 0, 0}},\n}\n\n// customGBK is a simplifiedchinese.GBK wrapper.\ntype customGBK struct{}\n\n// NewCustomGBKEncoder return a custom GBK encoding.\nfunc NewCustomGBKEncoder() *encoding.Encoder {\n\treturn customGBK{}.NewEncoder()\n}\n\n// NewDecoder returns simplifiedchinese.GBK.NewDecoder().\nfunc (customGBK) NewDecoder() *encoding.Decoder {\n\treturn &encoding.Decoder{\n\t\tTransformer: customGBKDecoder{\n\t\t\tgbkDecoder: simplifiedchinese.GBK.NewDecoder(),\n\t\t},\n\t}\n}\n\ntype customGBKDecoder struct {\n\tgbkDecoder *encoding.Decoder\n}\n\n// Transform special treatment for 0x80,\n// see https://github.com/pingcap/tidb/issues/30581 get details.\nfunc (c customGBKDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\tif len(src) == 0 {\n\t\treturn 0, 0, nil\n\t}\n\tif src[0] == 0x80 {\n\t\treturn utf8.EncodeRune(dst[:], utf8.RuneError), 1, nil\n\t}\n\treturn c.gbkDecoder.Transform(dst, src, atEOF)\n}\n\n// Reset is same as simplifiedchinese.GBK.Reset().\nfunc (c customGBKDecoder) Reset() {\n\tc.gbkDecoder.Reset()\n}\n\ntype customGBKEncoder struct {\n\tgbkEncoder *encoding.Encoder\n}\n\n// NewEncoder returns simplifiedchinese.gbk.\nfunc (customGBK) NewEncoder() *encoding.Encoder {\n\treturn &encoding.Encoder{\n\t\tTransformer: customGBKEncoder{\n\t\t\tgbkEncoder: simplifiedchinese.GBK.NewEncoder(),\n\t\t},\n\t}\n}\n\n// Transform special treatment for `€`,\n// see https://github.com/pingcap/tidb/issues/30581 get details.\nfunc (c customGBKEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\tif bytes.HasPrefix(src, []byte{0xe2, 0x82, 0xac} /* '€' */) {\n\t\treturn 0, 0, ErrInvalidCharacterString\n\t}\n\treturn c.gbkEncoder.Transform(dst, src, atEOF)\n}\n\n// Reset is same as simplifiedchinese.gbk.\nfunc (c customGBKEncoder) Reset() {\n\tc.gbkEncoder.Reset()\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding_latin1.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"bytes\"\n\n\t\"golang.org/x/text/encoding\"\n)\n\n// EncodingLatin1Impl is the instance of encodingLatin1.\n// TiDB uses utf8 implementation for latin1 charset because of the backward compatibility.\nvar EncodingLatin1Impl = &encodingLatin1{encodingUTF8{encodingBase{enc: encoding.Nop}}}\n\nfunc init() {\n\tEncodingLatin1Impl.self = EncodingLatin1Impl\n}\n\n// encodingLatin1 compatibles with latin1 in old version TiDB.\ntype encodingLatin1 struct {\n\tencodingUTF8\n}\n\n// Name implements Encoding interface.\nfunc (*encodingLatin1) Name() string {\n\treturn CharsetLatin1\n}\n\n// Peek implements Encoding interface.\nfunc (*encodingLatin1) Peek(src []byte) []byte {\n\tif len(src) == 0 {\n\t\treturn src\n\t}\n\treturn src[:1]\n}\n\n// IsValid implements Encoding interface.\nfunc (*encodingLatin1) IsValid(_ []byte) bool {\n\treturn true\n}\n\n// Tp implements Encoding interface.\nfunc (*encodingLatin1) Tp() EncodingTp {\n\treturn EncodingTpLatin1\n}\n\nfunc (*encodingLatin1) Transform(_ *bytes.Buffer, src []byte, _ Op) ([]byte, error) {\n\treturn src, nil\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding_table.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"strings\"\n\n\t\"golang.org/x/text/encoding\"\n\t\"golang.org/x/text/encoding/charmap\"\n\t\"golang.org/x/text/encoding/japanese\"\n\t\"golang.org/x/text/encoding/korean\"\n\t\"golang.org/x/text/encoding/simplifiedchinese\"\n\t\"golang.org/x/text/encoding/traditionalchinese\"\n\t\"golang.org/x/text/encoding/unicode\"\n)\n\n// Lookup returns the encoding with the specified label, and its canonical\n// name. It returns nil and the empty string if label is not one of the\n// standard encodings for HTML. Matching is case-insensitive and ignores\n// leading and trailing whitespace.\nfunc Lookup(label string) (e encoding.Encoding, name string) {\n\tlabel = strings.ToLower(strings.Trim(label, \"\\t\\n\\r\\f \"))\n\treturn lookup(label)\n}\n\nfunc lookup(label string) (e encoding.Encoding, name string) {\n\tenc := encodings[label]\n\treturn enc.e, enc.name\n}\n\nvar encodings = map[string]struct {\n\te    encoding.Encoding\n\tname string\n}{\n\t\"unicode-1-1-utf-8\":   {encoding.Nop, \"utf-8\"},\n\t\"utf-8\":               {encoding.Nop, \"utf-8\"},\n\t\"utf8\":                {encoding.Nop, \"utf-8\"},\n\t\"utf8mb4\":             {encoding.Nop, \"utf-8\"},\n\t\"binary\":              {encoding.Nop, \"binary\"},\n\t\"866\":                 {charmap.CodePage866, \"ibm866\"},\n\t\"cp866\":               {charmap.CodePage866, \"ibm866\"},\n\t\"csibm866\":            {charmap.CodePage866, \"ibm866\"},\n\t\"ibm866\":              {charmap.CodePage866, \"ibm866\"},\n\t\"csisolatin2\":         {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"iso-8859-2\":          {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"iso-ir-101\":          {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"iso8859-2\":           {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"iso88592\":            {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"iso_8859-2\":          {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"iso_8859-2:1987\":     {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"l2\":                  {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"latin2\":              {charmap.ISO8859_2, \"iso-8859-2\"},\n\t\"csisolatin3\":         {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"iso-8859-3\":          {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"iso-ir-109\":          {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"iso8859-3\":           {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"iso88593\":            {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"iso_8859-3\":          {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"iso_8859-3:1988\":     {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"l3\":                  {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"latin3\":              {charmap.ISO8859_3, \"iso-8859-3\"},\n\t\"csisolatin4\":         {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"iso-8859-4\":          {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"iso-ir-110\":          {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"iso8859-4\":           {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"iso88594\":            {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"iso_8859-4\":          {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"iso_8859-4:1988\":     {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"l4\":                  {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"latin4\":              {charmap.ISO8859_4, \"iso-8859-4\"},\n\t\"csisolatincyrillic\":  {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"cyrillic\":            {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"iso-8859-5\":          {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"iso-ir-144\":          {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"iso8859-5\":           {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"iso88595\":            {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"iso_8859-5\":          {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"iso_8859-5:1988\":     {charmap.ISO8859_5, \"iso-8859-5\"},\n\t\"arabic\":              {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"asmo-708\":            {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"csiso88596e\":         {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"csiso88596i\":         {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"csisolatinarabic\":    {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"ecma-114\":            {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso-8859-6\":          {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso-8859-6-e\":        {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso-8859-6-i\":        {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso-ir-127\":          {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso8859-6\":           {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso88596\":            {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso_8859-6\":          {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"iso_8859-6:1987\":     {charmap.ISO8859_6, \"iso-8859-6\"},\n\t\"csisolatingreek\":     {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"ecma-118\":            {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"elot_928\":            {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"greek\":               {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"greek8\":              {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"iso-8859-7\":          {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"iso-ir-126\":          {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"iso8859-7\":           {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"iso88597\":            {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"iso_8859-7\":          {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"iso_8859-7:1987\":     {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"sun_eu_greek\":        {charmap.ISO8859_7, \"iso-8859-7\"},\n\t\"csiso88598e\":         {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"csisolatinhebrew\":    {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"hebrew\":              {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"iso-8859-8\":          {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"iso-8859-8-e\":        {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"iso-ir-138\":          {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"iso8859-8\":           {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"iso88598\":            {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"iso_8859-8\":          {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"iso_8859-8:1988\":     {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"visual\":              {charmap.ISO8859_8, \"iso-8859-8\"},\n\t\"csiso88598i\":         {charmap.ISO8859_8, \"iso-8859-8-i\"},\n\t\"iso-8859-8-i\":        {charmap.ISO8859_8, \"iso-8859-8-i\"},\n\t\"logical\":             {charmap.ISO8859_8, \"iso-8859-8-i\"},\n\t\"csisolatin6\":         {charmap.ISO8859_10, \"iso-8859-10\"},\n\t\"iso-8859-10\":         {charmap.ISO8859_10, \"iso-8859-10\"},\n\t\"iso-ir-157\":          {charmap.ISO8859_10, \"iso-8859-10\"},\n\t\"iso8859-10\":          {charmap.ISO8859_10, \"iso-8859-10\"},\n\t\"iso885910\":           {charmap.ISO8859_10, \"iso-8859-10\"},\n\t\"l6\":                  {charmap.ISO8859_10, \"iso-8859-10\"},\n\t\"latin6\":              {charmap.ISO8859_10, \"iso-8859-10\"},\n\t\"iso-8859-13\":         {charmap.ISO8859_13, \"iso-8859-13\"},\n\t\"iso8859-13\":          {charmap.ISO8859_13, \"iso-8859-13\"},\n\t\"iso885913\":           {charmap.ISO8859_13, \"iso-8859-13\"},\n\t\"iso-8859-14\":         {charmap.ISO8859_14, \"iso-8859-14\"},\n\t\"iso8859-14\":          {charmap.ISO8859_14, \"iso-8859-14\"},\n\t\"iso885914\":           {charmap.ISO8859_14, \"iso-8859-14\"},\n\t\"csisolatin9\":         {charmap.ISO8859_15, \"iso-8859-15\"},\n\t\"iso-8859-15\":         {charmap.ISO8859_15, \"iso-8859-15\"},\n\t\"iso8859-15\":          {charmap.ISO8859_15, \"iso-8859-15\"},\n\t\"iso885915\":           {charmap.ISO8859_15, \"iso-8859-15\"},\n\t\"iso_8859-15\":         {charmap.ISO8859_15, \"iso-8859-15\"},\n\t\"l9\":                  {charmap.ISO8859_15, \"iso-8859-15\"},\n\t\"iso-8859-16\":         {charmap.ISO8859_16, \"iso-8859-16\"},\n\t\"cskoi8r\":             {charmap.KOI8R, \"koi8-r\"},\n\t\"koi\":                 {charmap.KOI8R, \"koi8-r\"},\n\t\"koi8\":                {charmap.KOI8R, \"koi8-r\"},\n\t\"koi8-r\":              {charmap.KOI8R, \"koi8-r\"},\n\t\"koi8_r\":              {charmap.KOI8R, \"koi8-r\"},\n\t\"koi8-u\":              {charmap.KOI8U, \"koi8-u\"},\n\t\"csmacintosh\":         {charmap.Macintosh, \"macintosh\"},\n\t\"mac\":                 {charmap.Macintosh, \"macintosh\"},\n\t\"macintosh\":           {charmap.Macintosh, \"macintosh\"},\n\t\"x-mac-roman\":         {charmap.Macintosh, \"macintosh\"},\n\t\"dos-874\":             {charmap.Windows874, \"windows-874\"},\n\t\"iso-8859-11\":         {charmap.Windows874, \"windows-874\"},\n\t\"iso8859-11\":          {charmap.Windows874, \"windows-874\"},\n\t\"iso885911\":           {charmap.Windows874, \"windows-874\"},\n\t\"tis-620\":             {charmap.Windows874, \"windows-874\"},\n\t\"windows-874\":         {charmap.Windows874, \"windows-874\"},\n\t\"cp1250\":              {charmap.Windows1250, \"windows-1250\"},\n\t\"windows-1250\":        {charmap.Windows1250, \"windows-1250\"},\n\t\"x-cp1250\":            {charmap.Windows1250, \"windows-1250\"},\n\t\"cp1251\":              {charmap.Windows1251, \"windows-1251\"},\n\t\"windows-1251\":        {charmap.Windows1251, \"windows-1251\"},\n\t\"x-cp1251\":            {charmap.Windows1251, \"windows-1251\"},\n\t\"ansi_x3.4-1968\":      {charmap.Windows1252, \"windows-1252\"},\n\t\"ascii\":               {charmap.Windows1252, \"windows-1252\"},\n\t\"cp1252\":              {charmap.Windows1252, \"windows-1252\"},\n\t\"cp819\":               {charmap.Windows1252, \"windows-1252\"},\n\t\"csisolatin1\":         {charmap.Windows1252, \"windows-1252\"},\n\t\"ibm819\":              {charmap.Windows1252, \"windows-1252\"},\n\t\"iso-8859-1\":          {charmap.Windows1252, \"windows-1252\"},\n\t\"iso-ir-100\":          {charmap.Windows1252, \"windows-1252\"},\n\t\"iso8859-1\":           {charmap.Windows1252, \"windows-1252\"},\n\t\"iso88591\":            {charmap.Windows1252, \"windows-1252\"},\n\t\"iso_8859-1\":          {charmap.Windows1252, \"windows-1252\"},\n\t\"iso_8859-1:1987\":     {charmap.Windows1252, \"windows-1252\"},\n\t\"l1\":                  {charmap.Windows1252, \"windows-1252\"},\n\t\"latin1\":              {charmap.Windows1252, \"windows-1252\"},\n\t\"us-ascii\":            {charmap.Windows1252, \"windows-1252\"},\n\t\"windows-1252\":        {charmap.Windows1252, \"windows-1252\"},\n\t\"x-cp1252\":            {charmap.Windows1252, \"windows-1252\"},\n\t\"cp1253\":              {charmap.Windows1253, \"windows-1253\"},\n\t\"windows-1253\":        {charmap.Windows1253, \"windows-1253\"},\n\t\"x-cp1253\":            {charmap.Windows1253, \"windows-1253\"},\n\t\"cp1254\":              {charmap.Windows1254, \"windows-1254\"},\n\t\"csisolatin5\":         {charmap.Windows1254, \"windows-1254\"},\n\t\"iso-8859-9\":          {charmap.Windows1254, \"windows-1254\"},\n\t\"iso-ir-148\":          {charmap.Windows1254, \"windows-1254\"},\n\t\"iso8859-9\":           {charmap.Windows1254, \"windows-1254\"},\n\t\"iso88599\":            {charmap.Windows1254, \"windows-1254\"},\n\t\"iso_8859-9\":          {charmap.Windows1254, \"windows-1254\"},\n\t\"iso_8859-9:1989\":     {charmap.Windows1254, \"windows-1254\"},\n\t\"l5\":                  {charmap.Windows1254, \"windows-1254\"},\n\t\"latin5\":              {charmap.Windows1254, \"windows-1254\"},\n\t\"windows-1254\":        {charmap.Windows1254, \"windows-1254\"},\n\t\"x-cp1254\":            {charmap.Windows1254, \"windows-1254\"},\n\t\"cp1255\":              {charmap.Windows1255, \"windows-1255\"},\n\t\"windows-1255\":        {charmap.Windows1255, \"windows-1255\"},\n\t\"x-cp1255\":            {charmap.Windows1255, \"windows-1255\"},\n\t\"cp1256\":              {charmap.Windows1256, \"windows-1256\"},\n\t\"windows-1256\":        {charmap.Windows1256, \"windows-1256\"},\n\t\"x-cp1256\":            {charmap.Windows1256, \"windows-1256\"},\n\t\"cp1257\":              {charmap.Windows1257, \"windows-1257\"},\n\t\"windows-1257\":        {charmap.Windows1257, \"windows-1257\"},\n\t\"x-cp1257\":            {charmap.Windows1257, \"windows-1257\"},\n\t\"cp1258\":              {charmap.Windows1258, \"windows-1258\"},\n\t\"windows-1258\":        {charmap.Windows1258, \"windows-1258\"},\n\t\"x-cp1258\":            {charmap.Windows1258, \"windows-1258\"},\n\t\"x-mac-cyrillic\":      {charmap.MacintoshCyrillic, \"x-mac-cyrillic\"},\n\t\"x-mac-ukrainian\":     {charmap.MacintoshCyrillic, \"x-mac-cyrillic\"},\n\t\"chinese\":             {simplifiedchinese.GBK, \"gbk\"},\n\t\"csgb2312\":            {simplifiedchinese.GBK, \"gbk\"},\n\t\"csiso58gb231280\":     {simplifiedchinese.GBK, \"gbk\"},\n\t\"gb2312\":              {simplifiedchinese.GBK, \"gbk\"},\n\t\"gb_2312\":             {simplifiedchinese.GBK, \"gbk\"},\n\t\"gb_2312-80\":          {simplifiedchinese.GBK, \"gbk\"},\n\t\"gbk\":                 {simplifiedchinese.GBK, \"gbk\"},\n\t\"iso-ir-58\":           {simplifiedchinese.GBK, \"gbk\"},\n\t\"x-gbk\":               {simplifiedchinese.GBK, \"gbk\"},\n\t\"gb18030\":             {simplifiedchinese.GB18030, \"gb18030\"},\n\t\"hz-gb-2312\":          {simplifiedchinese.HZGB2312, \"hz-gb-2312\"},\n\t\"big5\":                {traditionalchinese.Big5, \"big5\"},\n\t\"big5-hkscs\":          {traditionalchinese.Big5, \"big5\"},\n\t\"cn-big5\":             {traditionalchinese.Big5, \"big5\"},\n\t\"csbig5\":              {traditionalchinese.Big5, \"big5\"},\n\t\"x-x-big5\":            {traditionalchinese.Big5, \"big5\"},\n\t\"cseucpkdfmtjapanese\": {japanese.EUCJP, \"euc-jp\"},\n\t\"euc-jp\":              {japanese.EUCJP, \"euc-jp\"},\n\t\"x-euc-jp\":            {japanese.EUCJP, \"euc-jp\"},\n\t\"csiso2022jp\":         {japanese.ISO2022JP, \"iso-2022-jp\"},\n\t\"iso-2022-jp\":         {japanese.ISO2022JP, \"iso-2022-jp\"},\n\t\"csshiftjis\":          {japanese.ShiftJIS, \"shift_jis\"},\n\t\"ms_kanji\":            {japanese.ShiftJIS, \"shift_jis\"},\n\t\"shift-jis\":           {japanese.ShiftJIS, \"shift_jis\"},\n\t\"shift_jis\":           {japanese.ShiftJIS, \"shift_jis\"},\n\t\"sjis\":                {japanese.ShiftJIS, \"shift_jis\"},\n\t\"windows-31j\":         {japanese.ShiftJIS, \"shift_jis\"},\n\t\"x-sjis\":              {japanese.ShiftJIS, \"shift_jis\"},\n\t\"cseuckr\":             {korean.EUCKR, \"euc-kr\"},\n\t\"csksc56011987\":       {korean.EUCKR, \"euc-kr\"},\n\t\"euc-kr\":              {korean.EUCKR, \"euc-kr\"},\n\t\"iso-ir-149\":          {korean.EUCKR, \"euc-kr\"},\n\t\"korean\":              {korean.EUCKR, \"euc-kr\"},\n\t\"ks_c_5601-1987\":      {korean.EUCKR, \"euc-kr\"},\n\t\"ks_c_5601-1989\":      {korean.EUCKR, \"euc-kr\"},\n\t\"ksc5601\":             {korean.EUCKR, \"euc-kr\"},\n\t\"ksc_5601\":            {korean.EUCKR, \"euc-kr\"},\n\t\"windows-949\":         {korean.EUCKR, \"euc-kr\"},\n\t\"csiso2022kr\":         {encoding.Replacement, \"replacement\"},\n\t\"iso-2022-kr\":         {encoding.Replacement, \"replacement\"},\n\t\"iso-2022-cn\":         {encoding.Replacement, \"replacement\"},\n\t\"iso-2022-cn-ext\":     {encoding.Replacement, \"replacement\"},\n\t\"utf-16be\":            {unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), \"utf-16be\"},\n\t\"utf-16\":              {unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), \"utf-16le\"},\n\t\"utf-16le\":            {unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), \"utf-16le\"},\n\t\"x-user-defined\":      {charmap.XUserDefined, \"x-user-defined\"},\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/charset/encoding_utf8.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage charset\n\nimport (\n\t\"bytes\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/encoding\"\n)\n\n// EncodingUTF8Impl is the instance of encodingUTF8.\nvar EncodingUTF8Impl = &encodingUTF8{encodingBase{enc: encoding.Nop}}\n\n// EncodingUTF8MB3StrictImpl is the instance of encodingUTF8MB3Strict.\nvar EncodingUTF8MB3StrictImpl = &encodingUTF8MB3Strict{\n\tencodingUTF8{\n\t\tencodingBase{\n\t\t\tenc: encoding.Nop,\n\t\t},\n\t},\n}\n\nfunc init() {\n\tEncodingUTF8Impl.self = EncodingUTF8Impl\n\tEncodingUTF8MB3StrictImpl.self = EncodingUTF8MB3StrictImpl\n}\n\n// encodingUTF8 is TiDB's default encoding.\ntype encodingUTF8 struct {\n\tencodingBase\n}\n\n// Name implements Encoding interface.\nfunc (*encodingUTF8) Name() string {\n\treturn CharsetUTF8MB4\n}\n\n// Tp implements Encoding interface.\nfunc (*encodingUTF8) Tp() EncodingTp {\n\treturn EncodingTpUTF8\n}\n\n// Peek implements Encoding interface.\nfunc (*encodingUTF8) Peek(src []byte) []byte {\n\tnextLen := 4\n\tif len(src) == 0 || src[0] < 0x80 {\n\t\tnextLen = 1\n\t} else if src[0] < 0xe0 {\n\t\tnextLen = 2\n\t} else if src[0] < 0xf0 {\n\t\tnextLen = 3\n\t}\n\tif len(src) < nextLen {\n\t\treturn src\n\t}\n\treturn src[:nextLen]\n}\n\nfunc (*encodingUTF8) MbLen(bs string) int {\n\t_, size := utf8.DecodeRuneInString(bs)\n\tif size <= 1 {\n\t\treturn 0\n\t}\n\treturn size\n}\n\n// IsValid implements Encoding interface.\nfunc (e *encodingUTF8) IsValid(src []byte) bool {\n\tif utf8.Valid(src) {\n\t\treturn true\n\t}\n\treturn e.encodingBase.IsValid(src)\n}\n\n// Transform implements Encoding interface.\nfunc (e *encodingUTF8) Transform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error) {\n\tif e.IsValid(src) {\n\t\treturn src, nil\n\t}\n\treturn e.encodingBase.Transform(dest, src, op)\n}\n\n// Foreach implements Encoding interface.\nfunc (*encodingUTF8) Foreach(src []byte, _ Op, fn func(from, to []byte, ok bool) bool) {\n\tvar rv rune\n\tfor i, w := 0, 0; i < len(src); i += w {\n\t\trv, w = utf8.DecodeRune(src[i:])\n\t\tmeetErr := rv == utf8.RuneError && w == 1\n\t\tif !fn(src[i:i+w], src[i:i+w], !meetErr) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// encodingUTF8MB3Strict is the strict mode of EncodingUTF8MB3.\n// MB4 characters are considered invalid.\ntype encodingUTF8MB3Strict struct {\n\tencodingUTF8\n}\n\n// IsValid implements Encoding interface.\nfunc (e *encodingUTF8MB3Strict) IsValid(src []byte) bool {\n\treturn e.encodingBase.IsValid(src)\n}\n\n// Foreach implements Encoding interface.\nfunc (*encodingUTF8MB3Strict) Foreach(src []byte, _ Op, fn func(srcCh, dstCh []byte, ok bool) bool) {\n\tfor i, w := 0, 0; i < len(src); i += w {\n\t\tvar rv rune\n\t\trv, w = utf8.DecodeRune(src[i:])\n\t\tmeetErr := (rv == utf8.RuneError && w == 1) || w > 3\n\t\tif !fn(src[i:i+w], src[i:i+w], !meetErr) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// Transform implements Encoding interface.\nfunc (e *encodingUTF8MB3Strict) Transform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error) {\n\tif e.IsValid(src) {\n\t\treturn src, nil\n\t}\n\treturn e.encodingBase.Transform(dest, src, op)\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/format/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\ngo_library(\n    name = \"format\",\n    srcs = [\"format.go\"],\n    importpath = \"github.com/pingcap/tidb/pkg/parser/format\",\n    visibility = [\"//visibility:public\"],\n)\n\ngo_test(\n    name = \"format_test\",\n    timeout = \"short\",\n    srcs = [\"format_test.go\"],\n    embed = [\":format\"],\n    flaky = True,\n    shard_count = 3,\n    deps = [\n        \"@com_github_pingcap_errors//:errors\",\n        \"@com_github_stretchr_testify//require\",\n    ],\n)\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/format/format.go",
    "content": "// Copyright (c) 2014 The sortutil Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSES/STRUTIL-LICENSE file.\n\n// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage format\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\nconst (\n\tst0 = iota\n\tstBOL\n\tstPERC\n\tstBOLPERC\n)\n\n// Formatter is an io.Writer extended formatter by a fmt.Printf like function Format.\ntype Formatter interface {\n\tio.Writer\n\tFormat(format string, args ...interface{}) (n int, errno error)\n}\n\ntype indentFormatter struct {\n\tio.Writer\n\tindent      []byte\n\tindentLevel int\n\tstate       int\n}\n\nvar replace = map[rune]string{\n\t'\\000': \"\\\\0\",\n\t'\\'':   \"''\",\n\t'\\n':   \"\\\\n\",\n\t'\\r':   \"\\\\r\",\n}\n\n// IndentFormatter returns a new Formatter which interprets %i and %u in the\n// Format() formats string as indent and unindent commands. The commands can\n// nest. The Formatter writes to io.Writer 'w' and inserts one 'indent'\n// string per current indent level value.\n// Behaviour of commands reaching negative indent levels is undefined.\n//\n//\tIndentFormatter(os.Stdout, \"\\t\").Format(\"abc%d%%e%i\\nx\\ny\\n%uz\\n\", 3)\n//\n// output:\n//\n//\tabc3%e\n//\t    x\n//\t    y\n//\tz\n//\n// The Go quoted string literal form of the above is:\n//\n//\t\"abc%%e\\n\\tx\\n\\tx\\nz\\n\"\n//\n// The commands can be scattered between separate invocations of Format(),\n// i.e. the formatter keeps track of the indent level and knows if it is\n// positioned on start of a line and should emit indentation(s).\n// The same output as above can be produced by e.g.:\n//\n//\tf := IndentFormatter(os.Stdout, \" \")\n//\tf.Format(\"abc%d%%e%i\\nx\\n\", 3)\n//\tf.Format(\"y\\n%uz\\n\")\nfunc IndentFormatter(w io.Writer, indent string) Formatter {\n\treturn &indentFormatter{w, []byte(indent), 0, stBOL}\n}\n\nfunc (f *indentFormatter) format(flat bool, format string, args ...interface{}) (n int, errno error) {\n\tvar buf = make([]byte, 0)\n\tfor i := 0; i < len(format); i++ {\n\t\tc := format[i]\n\t\tswitch f.state {\n\t\tcase st0:\n\t\t\tswitch c {\n\t\t\tcase '\\n':\n\t\t\t\tcc := c\n\t\t\t\tif flat && f.indentLevel != 0 {\n\t\t\t\t\tcc = ' '\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, cc)\n\t\t\t\tf.state = stBOL\n\t\t\tcase '%':\n\t\t\t\tf.state = stPERC\n\t\t\tdefault:\n\t\t\t\tbuf = append(buf, c)\n\t\t\t}\n\t\tcase stBOL:\n\t\t\tswitch c {\n\t\t\tcase '\\n':\n\t\t\t\tcc := c\n\t\t\t\tif flat && f.indentLevel != 0 {\n\t\t\t\t\tcc = ' '\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, cc)\n\t\t\tcase '%':\n\t\t\t\tf.state = stBOLPERC\n\t\t\tdefault:\n\t\t\t\tif !flat {\n\t\t\t\t\tfor i := 0; i < f.indentLevel; i++ {\n\t\t\t\t\t\tbuf = append(buf, f.indent...)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, c)\n\t\t\t\tf.state = st0\n\t\t\t}\n\t\tcase stBOLPERC:\n\t\t\tswitch c {\n\t\t\tcase 'i':\n\t\t\t\tf.indentLevel++\n\t\t\t\tf.state = stBOL\n\t\t\tcase 'u':\n\t\t\t\tf.indentLevel--\n\t\t\t\tf.state = stBOL\n\t\t\tdefault:\n\t\t\t\tif !flat {\n\t\t\t\t\tfor i := 0; i < f.indentLevel; i++ {\n\t\t\t\t\t\tbuf = append(buf, f.indent...)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, '%', c)\n\t\t\t\tf.state = st0\n\t\t\t}\n\t\tcase stPERC:\n\t\t\tswitch c {\n\t\t\tcase 'i':\n\t\t\t\tf.indentLevel++\n\t\t\t\tf.state = st0\n\t\t\tcase 'u':\n\t\t\t\tf.indentLevel--\n\t\t\t\tf.state = st0\n\t\t\tdefault:\n\t\t\t\tbuf = append(buf, '%', c)\n\t\t\t\tf.state = st0\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(\"unexpected state\")\n\t\t}\n\t}\n\tswitch f.state {\n\tcase stPERC, stBOLPERC:\n\t\tbuf = append(buf, '%')\n\t}\n\treturn fmt.Fprintf(f, string(buf), args...)\n}\n\n// Format implements Format interface.\nfunc (f *indentFormatter) Format(format string, args ...interface{}) (n int, errno error) {\n\treturn f.format(false, format, args...)\n}\n\ntype flatFormatter indentFormatter\n\n// FlatFormatter returns a newly created Formatter with the same functionality as the one returned\n// by IndentFormatter except it allows a newline in the 'format' string argument of Format\n// to pass through if the indent level is current zero.\n//\n// If the indent level is non-zero then such new lines are changed to a space character.\n// There is no indent string, the %i and %u format verbs are used solely to determine the indent level.\n//\n// The FlatFormatter is intended for flattening of normally nested structure textual representation to\n// a one top level structure per line form.\n//\n//\tFlatFormatter(os.Stdout, \" \").Format(\"abc%d%%e%i\\nx\\ny\\n%uz\\n\", 3)\n//\n// output in the form of a Go quoted string literal:\n//\n//\t\"abc3%%e x y z\\n\"\nfunc FlatFormatter(w io.Writer) Formatter {\n\treturn (*flatFormatter)(IndentFormatter(w, \"\").(*indentFormatter))\n}\n\n// Format implements Format interface.\nfunc (f *flatFormatter) Format(format string, args ...interface{}) (n int, errno error) {\n\treturn (*indentFormatter)(f).format(true, format, args...)\n}\n\n// OutputFormat output escape character with backslash.\nfunc OutputFormat(s string) string {\n\tvar buf bytes.Buffer\n\tfor _, old := range s {\n\t\tif newVal, ok := replace[old]; ok {\n\t\t\tbuf.WriteString(newVal)\n\t\t\tcontinue\n\t\t}\n\t\tbuf.WriteRune(old)\n\t}\n\n\treturn buf.String()\n}\n\n// RestoreFlags mark the Restore format\ntype RestoreFlags uint64\n\n// Mutually exclusive group of `RestoreFlags`:\n// [RestoreStringSingleQuotes, RestoreStringDoubleQuotes]\n// [RestoreKeyWordUppercase, RestoreKeyWordLowercase]\n// [RestoreNameUppercase, RestoreNameLowercase]\n// [RestoreNameDoubleQuotes, RestoreNameBackQuotes]\n// The flag with the left position in each group has a higher priority.\nconst (\n\tRestoreStringSingleQuotes RestoreFlags = 1 << iota\n\tRestoreStringDoubleQuotes\n\tRestoreStringEscapeBackslash\n\n\tRestoreKeyWordUppercase\n\tRestoreKeyWordLowercase\n\n\tRestoreNameUppercase\n\tRestoreNameLowercase\n\tRestoreNameDoubleQuotes\n\tRestoreNameBackQuotes\n\n\tRestoreSpacesAroundBinaryOperation\n\tRestoreBracketAroundBinaryOperation\n\n\tRestoreStringWithoutCharset\n\tRestoreStringWithoutDefaultCharset\n\n\tRestoreTiDBSpecialComment\n\tSkipPlacementRuleForRestore\n\tRestoreWithTTLEnableOff\n\tRestoreWithoutSchemaName\n\tRestoreWithoutTableName\n\tRestoreForNonPrepPlanCache\n)\n\nconst (\n\t// DefaultRestoreFlags is the default value of RestoreFlags.\n\tDefaultRestoreFlags = RestoreStringSingleQuotes | RestoreKeyWordUppercase | RestoreNameBackQuotes\n)\n\nfunc (rf RestoreFlags) has(flag RestoreFlags) bool {\n\treturn rf&flag != 0\n}\n\n// HasWithoutSchemaNameFlag returns a boolean indicating when `rf` has `RestoreWithoutSchemaName` flag.\nfunc (rf RestoreFlags) HasWithoutSchemaNameFlag() bool {\n\treturn rf.has(RestoreWithoutSchemaName)\n}\n\n// HasWithoutTableNameFlag returns a boolean indicating when `rf` has `RestoreWithoutTableName` flag.\nfunc (rf RestoreFlags) HasWithoutTableNameFlag() bool {\n\treturn rf.has(RestoreWithoutTableName)\n}\n\n// HasStringSingleQuotesFlag returns a boolean indicating when `rf` has `RestoreStringSingleQuotes` flag.\nfunc (rf RestoreFlags) HasStringSingleQuotesFlag() bool {\n\treturn rf.has(RestoreStringSingleQuotes)\n}\n\n// HasStringDoubleQuotesFlag returns a boolean indicating whether `rf` has `RestoreStringDoubleQuotes` flag.\nfunc (rf RestoreFlags) HasStringDoubleQuotesFlag() bool {\n\treturn rf.has(RestoreStringDoubleQuotes)\n}\n\n// HasStringEscapeBackslashFlag returns a boolean indicating whether `rf` has `RestoreStringEscapeBackslash` flag.\nfunc (rf RestoreFlags) HasStringEscapeBackslashFlag() bool {\n\treturn rf.has(RestoreStringEscapeBackslash)\n}\n\n// HasKeyWordUppercaseFlag returns a boolean indicating whether `rf` has `RestoreKeyWordUppercase` flag.\nfunc (rf RestoreFlags) HasKeyWordUppercaseFlag() bool {\n\treturn rf.has(RestoreKeyWordUppercase)\n}\n\n// HasKeyWordLowercaseFlag returns a boolean indicating whether `rf` has `RestoreKeyWordLowercase` flag.\nfunc (rf RestoreFlags) HasKeyWordLowercaseFlag() bool {\n\treturn rf.has(RestoreKeyWordLowercase)\n}\n\n// HasNameUppercaseFlag returns a boolean indicating whether `rf` has `RestoreNameUppercase` flag.\nfunc (rf RestoreFlags) HasNameUppercaseFlag() bool {\n\treturn rf.has(RestoreNameUppercase)\n}\n\n// HasNameLowercaseFlag returns a boolean indicating whether `rf` has `RestoreNameLowercase` flag.\nfunc (rf RestoreFlags) HasNameLowercaseFlag() bool {\n\treturn rf.has(RestoreNameLowercase)\n}\n\n// HasNameDoubleQuotesFlag returns a boolean indicating whether `rf` has `RestoreNameDoubleQuotes` flag.\nfunc (rf RestoreFlags) HasNameDoubleQuotesFlag() bool {\n\treturn rf.has(RestoreNameDoubleQuotes)\n}\n\n// HasNameBackQuotesFlag returns a boolean indicating whether `rf` has `RestoreNameBackQuotes` flag.\nfunc (rf RestoreFlags) HasNameBackQuotesFlag() bool {\n\treturn rf.has(RestoreNameBackQuotes)\n}\n\n// HasSpacesAroundBinaryOperationFlag returns a boolean indicating\n// whether `rf` has `RestoreSpacesAroundBinaryOperation` flag.\nfunc (rf RestoreFlags) HasSpacesAroundBinaryOperationFlag() bool {\n\treturn rf.has(RestoreSpacesAroundBinaryOperation)\n}\n\n// HasRestoreBracketAroundBinaryOperation returns a boolean indicating\n// whether `rf` has `RestoreBracketAroundBinaryOperation` flag.\nfunc (rf RestoreFlags) HasRestoreBracketAroundBinaryOperation() bool {\n\treturn rf.has(RestoreBracketAroundBinaryOperation)\n}\n\n// HasStringWithoutDefaultCharset returns a boolean indicating\n// whether `rf` has `RestoreStringWithoutDefaultCharset` flag.\nfunc (rf RestoreFlags) HasStringWithoutDefaultCharset() bool {\n\treturn rf.has(RestoreStringWithoutDefaultCharset)\n}\n\n// HasStringWithoutCharset returns a boolean indicating whether `rf` has `RestoreStringWithoutCharset` flag.\nfunc (rf RestoreFlags) HasStringWithoutCharset() bool {\n\treturn rf.has(RestoreStringWithoutCharset)\n}\n\n// HasTiDBSpecialCommentFlag returns a boolean indicating whether `rf` has `RestoreTiDBSpecialComment` flag.\nfunc (rf RestoreFlags) HasTiDBSpecialCommentFlag() bool {\n\treturn rf.has(RestoreTiDBSpecialComment)\n}\n\n// HasSkipPlacementRuleForRestoreFlag returns a boolean indicating whether `rf` has `SkipPlacementRuleForRestore` flag.\nfunc (rf RestoreFlags) HasSkipPlacementRuleForRestoreFlag() bool {\n\treturn rf.has(SkipPlacementRuleForRestore)\n}\n\n// HasRestoreWithTTLEnableOff returns a boolean indicating\n// whether to force set TTL_ENABLE='OFF' when restoring a TTL table\nfunc (rf RestoreFlags) HasRestoreWithTTLEnableOff() bool {\n\treturn rf.has(RestoreWithTTLEnableOff)\n}\n\n// HasRestoreForNonPrepPlanCache returns a boolean indicating whether `rf` has `RestoreForNonPrepPlanCache` flag.\nfunc (rf RestoreFlags) HasRestoreForNonPrepPlanCache() bool {\n\treturn rf.has(RestoreForNonPrepPlanCache)\n}\n\n// RestoreWriter is the interface for `Restore` to write.\ntype RestoreWriter interface {\n\tio.Writer\n\tio.StringWriter\n}\n\n// RestoreCtx is `Restore` context to hold flags and writer.\ntype RestoreCtx struct {\n\tFlags     RestoreFlags\n\tIn        RestoreWriter\n\tDefaultDB string\n\tCTERestorer\n}\n\n// NewRestoreCtx returns a new `RestoreCtx`.\nfunc NewRestoreCtx(flags RestoreFlags, in RestoreWriter) *RestoreCtx {\n\treturn &RestoreCtx{Flags: flags, In: in, DefaultDB: \"\"}\n}\n\n// WriteKeyWord writes the `keyWord` into writer.\n// `keyWord` will be converted format(uppercase and lowercase for now) according to `RestoreFlags`.\nfunc (ctx *RestoreCtx) WriteKeyWord(keyWord string) {\n\tswitch {\n\tcase ctx.Flags.HasKeyWordUppercaseFlag():\n\t\tkeyWord = strings.ToUpper(keyWord)\n\tcase ctx.Flags.HasKeyWordLowercaseFlag():\n\t\tkeyWord = strings.ToLower(keyWord)\n\t}\n\tctx.In.WriteString(keyWord)\n}\n\n// WriteWithSpecialComments writes a string with a special comment wrapped.\nfunc (ctx *RestoreCtx) WriteWithSpecialComments(featureID string, fn func() error) error {\n\tif !ctx.Flags.HasTiDBSpecialCommentFlag() {\n\t\treturn fn()\n\t}\n\tctx.WritePlain(\"/*T!\")\n\tif len(featureID) != 0 {\n\t\tctx.WritePlainf(\"[%s]\", featureID)\n\t}\n\tctx.WritePlain(\" \")\n\tif err := fn(); err != nil {\n\t\treturn err\n\t}\n\tctx.WritePlain(\" */\")\n\treturn nil\n}\n\n// WriteString writes the string into writer\n// `str` may be wrapped in quotes and escaped according to RestoreFlags.\nfunc (ctx *RestoreCtx) WriteString(str string) {\n\tif ctx.Flags.HasStringEscapeBackslashFlag() {\n\t\tstr = strings.ReplaceAll(str, `\\`, `\\\\`)\n\t}\n\tquotes := \"\"\n\tswitch {\n\tcase ctx.Flags.HasStringSingleQuotesFlag():\n\t\tstr = strings.ReplaceAll(str, `'`, `''`)\n\t\tquotes = `'`\n\tcase ctx.Flags.HasStringDoubleQuotesFlag():\n\t\tstr = strings.ReplaceAll(str, `\"`, `\"\"`)\n\t\tquotes = `\"`\n\t}\n\tctx.In.WriteString(quotes)\n\tctx.In.WriteString(str)\n\tctx.In.WriteString(quotes)\n}\n\n// WriteName writes the name into writer\n// `name` maybe wrapped in quotes and escaped according to RestoreFlags.\nfunc (ctx *RestoreCtx) WriteName(name string) {\n\tswitch {\n\tcase ctx.Flags.HasNameUppercaseFlag():\n\t\tname = strings.ToUpper(name)\n\tcase ctx.Flags.HasNameLowercaseFlag():\n\t\tname = strings.ToLower(name)\n\t}\n\tquotes := \"\"\n\tswitch {\n\tcase ctx.Flags.HasNameDoubleQuotesFlag():\n\t\tname = strings.ReplaceAll(name, `\"`, `\"\"`)\n\t\tquotes = `\"`\n\tcase ctx.Flags.HasNameBackQuotesFlag():\n\t\tname = strings.ReplaceAll(name, \"`\", \"``\")\n\t\tquotes = \"`\"\n\t}\n\n\t// use `WriteString` directly instead of `fmt.Fprint` to get a better performance.\n\tctx.In.WriteString(quotes)\n\tctx.In.WriteString(name)\n\tctx.In.WriteString(quotes)\n}\n\n// WritePlain writes the plain text into writer without any handling.\nfunc (ctx *RestoreCtx) WritePlain(plainText string) {\n\tctx.In.WriteString(plainText)\n}\n\n// WritePlainf write the plain text into writer without any handling.\nfunc (ctx *RestoreCtx) WritePlainf(format string, a ...interface{}) {\n\tfmt.Fprintf(ctx.In, format, a...)\n}\n\n// CTERestorer is used by WithClause related nodes restore.\ntype CTERestorer struct {\n\tCTENames []string\n}\n\n// IsCTETableName returns true if the given tableName comes from CTE.\nfunc (c *CTERestorer) IsCTETableName(nameL string) bool {\n\tfor _, n := range c.CTENames {\n\t\tif n == nameL {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// RecordCTEName records the CTE name.\nfunc (c *CTERestorer) RecordCTEName(nameL string) {\n\tc.CTENames = append(c.CTENames, nameL)\n}\n\n// RestoreCTEFunc is used to restore CTE.\nfunc (c *CTERestorer) RestoreCTEFunc() func() {\n\tl := len(c.CTENames)\n\treturn func() {\n\t\tif l == 0 {\n\t\t\tc.CTENames = nil\n\t\t} else {\n\t\t\tc.CTENames = c.CTENames[:l]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\ngo_library(\n    name = \"mysql\",\n    srcs = [\n        \"charset.go\",\n        \"const.go\",\n        \"errcode.go\",\n        \"errname.go\",\n        \"error.go\",\n        \"locale_format.go\",\n        \"privs.go\",\n        \"state.go\",\n        \"type.go\",\n        \"util.go\",\n    ],\n    importpath = \"github.com/pingcap/tidb/pkg/parser/mysql\",\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"//pkg/parser/format\",\n        \"@com_github_pingcap_errors//:errors\",\n    ],\n)\n\ngo_test(\n    name = \"mysql_test\",\n    timeout = \"short\",\n    srcs = [\n        \"const_test.go\",\n        \"error_test.go\",\n        \"privs_test.go\",\n        \"type_test.go\",\n    ],\n    embed = [\":mysql\"],\n    flaky = True,\n    shard_count = 9,\n    deps = [\"@com_github_stretchr_testify//require\"],\n)\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/charset.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\nimport \"unicode\"\n\n// CharsetNameToID maps charset name to its default collation ID.\nfunc CharsetNameToID(charset string) uint8 {\n\t// Use quick path for TiDB to avoid access CharsetIDs map\n\t// \"SHOW CHARACTER SET;\" to see all the supported character sets.\n\tif charset == \"utf8mb4\" {\n\t\treturn UTF8MB4DefaultCollationID\n\t} else if charset == \"binary\" {\n\t\treturn BinaryDefaultCollationID\n\t} else if charset == \"utf8\" {\n\t\treturn UTF8DefaultCollationID\n\t} else if charset == \"ascii\" {\n\t\treturn ASCIIDefaultCollationID\n\t} else if charset == \"latin1\" {\n\t\treturn Latin1DefaultCollationID\n\t}\n\treturn CharsetIDs[charset]\n}\n\n// CharsetIDs maps charset name to its default collation ID.\nvar CharsetIDs = map[string]uint8{\n\t\"big5\":     1,\n\t\"dec8\":     3,\n\t\"cp850\":    4,\n\t\"hp8\":      6,\n\t\"koi8r\":    7,\n\t\"latin1\":   Latin1DefaultCollationID,\n\t\"latin2\":   9,\n\t\"swe7\":     10,\n\t\"ascii\":    ASCIIDefaultCollationID,\n\t\"ujis\":     12,\n\t\"sjis\":     13,\n\t\"hebrew\":   16,\n\t\"tis620\":   18,\n\t\"euckr\":    19,\n\t\"koi8u\":    22,\n\t\"gb2312\":   24,\n\t\"greek\":    25,\n\t\"cp1250\":   26,\n\t\"gbk\":      28,\n\t\"latin5\":   30,\n\t\"armscii8\": 32,\n\t\"utf8\":     UTF8DefaultCollationID,\n\t\"ucs2\":     35,\n\t\"cp866\":    36,\n\t\"keybcs2\":  37,\n\t\"macce\":    38,\n\t\"macroman\": 39,\n\t\"cp852\":    40,\n\t\"latin7\":   41,\n\t\"utf8mb4\":  UTF8MB4DefaultCollationID,\n\t\"cp1251\":   51,\n\t\"utf16\":    54,\n\t\"utf16le\":  56,\n\t\"cp1256\":   57,\n\t\"cp1257\":   59,\n\t\"utf32\":    60,\n\t\"binary\":   BinaryDefaultCollationID,\n\t\"geostd8\":  92,\n\t\"cp932\":    95,\n\t\"eucjpms\":  97,\n}\n\n// Collations maps MySQL collation ID to its name.\nvar Collations = map[uint16]string{\n\t1:   \"big5_chinese_ci\",\n\t2:   \"latin2_czech_cs\",\n\t3:   \"dec8_swedish_ci\",\n\t4:   \"cp850_general_ci\",\n\t5:   \"latin1_german1_ci\",\n\t6:   \"hp8_english_ci\",\n\t7:   \"koi8r_general_ci\",\n\t8:   \"latin1_swedish_ci\",\n\t9:   \"latin2_general_ci\",\n\t10:  \"swe7_swedish_ci\",\n\t11:  \"ascii_general_ci\",\n\t12:  \"ujis_japanese_ci\",\n\t13:  \"sjis_japanese_ci\",\n\t14:  \"cp1251_bulgarian_ci\",\n\t15:  \"latin1_danish_ci\",\n\t16:  \"hebrew_general_ci\",\n\t18:  \"tis620_thai_ci\",\n\t19:  \"euckr_korean_ci\",\n\t20:  \"latin7_estonian_cs\",\n\t21:  \"latin2_hungarian_ci\",\n\t22:  \"koi8u_general_ci\",\n\t23:  \"cp1251_ukrainian_ci\",\n\t24:  \"gb2312_chinese_ci\",\n\t25:  \"greek_general_ci\",\n\t26:  \"cp1250_general_ci\",\n\t27:  \"latin2_croatian_ci\",\n\t28:  \"gbk_chinese_ci\",\n\t29:  \"cp1257_lithuanian_ci\",\n\t30:  \"latin5_turkish_ci\",\n\t31:  \"latin1_german2_ci\",\n\t32:  \"armscii8_general_ci\",\n\t33:  \"utf8_general_ci\",\n\t34:  \"cp1250_czech_cs\",\n\t35:  \"ucs2_general_ci\",\n\t36:  \"cp866_general_ci\",\n\t37:  \"keybcs2_general_ci\",\n\t38:  \"macce_general_ci\",\n\t39:  \"macroman_general_ci\",\n\t40:  \"cp852_general_ci\",\n\t41:  \"latin7_general_ci\",\n\t42:  \"latin7_general_cs\",\n\t43:  \"macce_bin\",\n\t44:  \"cp1250_croatian_ci\",\n\t45:  \"utf8mb4_general_ci\",\n\t46:  \"utf8mb4_bin\",\n\t47:  \"latin1_bin\",\n\t48:  \"latin1_general_ci\",\n\t49:  \"latin1_general_cs\",\n\t50:  \"cp1251_bin\",\n\t51:  \"cp1251_general_ci\",\n\t52:  \"cp1251_general_cs\",\n\t53:  \"macroman_bin\",\n\t54:  \"utf16_general_ci\",\n\t55:  \"utf16_bin\",\n\t56:  \"utf16le_general_ci\",\n\t57:  \"cp1256_general_ci\",\n\t58:  \"cp1257_bin\",\n\t59:  \"cp1257_general_ci\",\n\t60:  \"utf32_general_ci\",\n\t61:  \"utf32_bin\",\n\t62:  \"utf16le_bin\",\n\t63:  \"binary\",\n\t64:  \"armscii8_bin\",\n\t65:  \"ascii_bin\",\n\t66:  \"cp1250_bin\",\n\t67:  \"cp1256_bin\",\n\t68:  \"cp866_bin\",\n\t69:  \"dec8_bin\",\n\t70:  \"greek_bin\",\n\t71:  \"hebrew_bin\",\n\t72:  \"hp8_bin\",\n\t73:  \"keybcs2_bin\",\n\t74:  \"koi8r_bin\",\n\t75:  \"koi8u_bin\",\n\t77:  \"latin2_bin\",\n\t78:  \"latin5_bin\",\n\t79:  \"latin7_bin\",\n\t80:  \"cp850_bin\",\n\t81:  \"cp852_bin\",\n\t82:  \"swe7_bin\",\n\t83:  \"utf8_bin\",\n\t84:  \"big5_bin\",\n\t85:  \"euckr_bin\",\n\t86:  \"gb2312_bin\",\n\t87:  \"gbk_bin\",\n\t88:  \"sjis_bin\",\n\t89:  \"tis620_bin\",\n\t90:  \"ucs2_bin\",\n\t91:  \"ujis_bin\",\n\t92:  \"geostd8_general_ci\",\n\t93:  \"geostd8_bin\",\n\t94:  \"latin1_spanish_ci\",\n\t95:  \"cp932_japanese_ci\",\n\t96:  \"cp932_bin\",\n\t97:  \"eucjpms_japanese_ci\",\n\t98:  \"eucjpms_bin\",\n\t99:  \"cp1250_polish_ci\",\n\t101: \"utf16_unicode_ci\",\n\t102: \"utf16_icelandic_ci\",\n\t103: \"utf16_latvian_ci\",\n\t104: \"utf16_romanian_ci\",\n\t105: \"utf16_slovenian_ci\",\n\t106: \"utf16_polish_ci\",\n\t107: \"utf16_estonian_ci\",\n\t108: \"utf16_spanish_ci\",\n\t109: \"utf16_swedish_ci\",\n\t110: \"utf16_turkish_ci\",\n\t111: \"utf16_czech_ci\",\n\t112: \"utf16_danish_ci\",\n\t113: \"utf16_lithuanian_ci\",\n\t114: \"utf16_slovak_ci\",\n\t115: \"utf16_spanish2_ci\",\n\t116: \"utf16_roman_ci\",\n\t117: \"utf16_persian_ci\",\n\t118: \"utf16_esperanto_ci\",\n\t119: \"utf16_hungarian_ci\",\n\t120: \"utf16_sinhala_ci\",\n\t121: \"utf16_german2_ci\",\n\t122: \"utf16_croatian_ci\",\n\t123: \"utf16_unicode_520_ci\",\n\t124: \"utf16_vietnamese_ci\",\n\t128: \"ucs2_unicode_ci\",\n\t129: \"ucs2_icelandic_ci\",\n\t130: \"ucs2_latvian_ci\",\n\t131: \"ucs2_romanian_ci\",\n\t132: \"ucs2_slovenian_ci\",\n\t133: \"ucs2_polish_ci\",\n\t134: \"ucs2_estonian_ci\",\n\t135: \"ucs2_spanish_ci\",\n\t136: \"ucs2_swedish_ci\",\n\t137: \"ucs2_turkish_ci\",\n\t138: \"ucs2_czech_ci\",\n\t139: \"ucs2_danish_ci\",\n\t140: \"ucs2_lithuanian_ci\",\n\t141: \"ucs2_slovak_ci\",\n\t142: \"ucs2_spanish2_ci\",\n\t143: \"ucs2_roman_ci\",\n\t144: \"ucs2_persian_ci\",\n\t145: \"ucs2_esperanto_ci\",\n\t146: \"ucs2_hungarian_ci\",\n\t147: \"ucs2_sinhala_ci\",\n\t148: \"ucs2_german2_ci\",\n\t149: \"ucs2_croatian_ci\",\n\t150: \"ucs2_unicode_520_ci\",\n\t151: \"ucs2_vietnamese_ci\",\n\t159: \"ucs2_general_mysql500_ci\",\n\t160: \"utf32_unicode_ci\",\n\t161: \"utf32_icelandic_ci\",\n\t162: \"utf32_latvian_ci\",\n\t163: \"utf32_romanian_ci\",\n\t164: \"utf32_slovenian_ci\",\n\t165: \"utf32_polish_ci\",\n\t166: \"utf32_estonian_ci\",\n\t167: \"utf32_spanish_ci\",\n\t168: \"utf32_swedish_ci\",\n\t169: \"utf32_turkish_ci\",\n\t170: \"utf32_czech_ci\",\n\t171: \"utf32_danish_ci\",\n\t172: \"utf32_lithuanian_ci\",\n\t173: \"utf32_slovak_ci\",\n\t174: \"utf32_spanish2_ci\",\n\t175: \"utf32_roman_ci\",\n\t176: \"utf32_persian_ci\",\n\t177: \"utf32_esperanto_ci\",\n\t178: \"utf32_hungarian_ci\",\n\t179: \"utf32_sinhala_ci\",\n\t180: \"utf32_german2_ci\",\n\t181: \"utf32_croatian_ci\",\n\t182: \"utf32_unicode_520_ci\",\n\t183: \"utf32_vietnamese_ci\",\n\t192: \"utf8_unicode_ci\",\n\t193: \"utf8_icelandic_ci\",\n\t194: \"utf8_latvian_ci\",\n\t195: \"utf8_romanian_ci\",\n\t196: \"utf8_slovenian_ci\",\n\t197: \"utf8_polish_ci\",\n\t198: \"utf8_estonian_ci\",\n\t199: \"utf8_spanish_ci\",\n\t200: \"utf8_swedish_ci\",\n\t201: \"utf8_turkish_ci\",\n\t202: \"utf8_czech_ci\",\n\t203: \"utf8_danish_ci\",\n\t204: \"utf8_lithuanian_ci\",\n\t205: \"utf8_slovak_ci\",\n\t206: \"utf8_spanish2_ci\",\n\t207: \"utf8_roman_ci\",\n\t208: \"utf8_persian_ci\",\n\t209: \"utf8_esperanto_ci\",\n\t210: \"utf8_hungarian_ci\",\n\t211: \"utf8_sinhala_ci\",\n\t212: \"utf8_german2_ci\",\n\t213: \"utf8_croatian_ci\",\n\t214: \"utf8_unicode_520_ci\",\n\t215: \"utf8_vietnamese_ci\",\n\t223: \"utf8_general_mysql500_ci\",\n\t224: \"utf8mb4_unicode_ci\",\n\t225: \"utf8mb4_icelandic_ci\",\n\t226: \"utf8mb4_latvian_ci\",\n\t227: \"utf8mb4_romanian_ci\",\n\t228: \"utf8mb4_slovenian_ci\",\n\t229: \"utf8mb4_polish_ci\",\n\t230: \"utf8mb4_estonian_ci\",\n\t231: \"utf8mb4_spanish_ci\",\n\t232: \"utf8mb4_swedish_ci\",\n\t233: \"utf8mb4_turkish_ci\",\n\t234: \"utf8mb4_czech_ci\",\n\t235: \"utf8mb4_danish_ci\",\n\t236: \"utf8mb4_lithuanian_ci\",\n\t237: \"utf8mb4_slovak_ci\",\n\t238: \"utf8mb4_spanish2_ci\",\n\t239: \"utf8mb4_roman_ci\",\n\t240: \"utf8mb4_persian_ci\",\n\t241: \"utf8mb4_esperanto_ci\",\n\t242: \"utf8mb4_hungarian_ci\",\n\t243: \"utf8mb4_sinhala_ci\",\n\t244: \"utf8mb4_german2_ci\",\n\t245: \"utf8mb4_croatian_ci\",\n\t246: \"utf8mb4_unicode_520_ci\",\n\t247: \"utf8mb4_vietnamese_ci\",\n\t255: \"utf8mb4_0900_ai_ci\",\n\t309: \"utf8mb4_0900_bin\",\n}\n\n// CollationNames maps MySQL collation name to its ID\nvar CollationNames = map[string]uint16{\n\t\"big5_chinese_ci\":          1,\n\t\"latin2_czech_cs\":          2,\n\t\"dec8_swedish_ci\":          3,\n\t\"cp850_general_ci\":         4,\n\t\"latin1_german1_ci\":        5,\n\t\"hp8_english_ci\":           6,\n\t\"koi8r_general_ci\":         7,\n\t\"latin1_swedish_ci\":        8,\n\t\"latin2_general_ci\":        9,\n\t\"swe7_swedish_ci\":          10,\n\t\"ascii_general_ci\":         11,\n\t\"ujis_japanese_ci\":         12,\n\t\"sjis_japanese_ci\":         13,\n\t\"cp1251_bulgarian_ci\":      14,\n\t\"latin1_danish_ci\":         15,\n\t\"hebrew_general_ci\":        16,\n\t\"tis620_thai_ci\":           18,\n\t\"euckr_korean_ci\":          19,\n\t\"latin7_estonian_cs\":       20,\n\t\"latin2_hungarian_ci\":      21,\n\t\"koi8u_general_ci\":         22,\n\t\"cp1251_ukrainian_ci\":      23,\n\t\"gb2312_chinese_ci\":        24,\n\t\"greek_general_ci\":         25,\n\t\"cp1250_general_ci\":        26,\n\t\"latin2_croatian_ci\":       27,\n\t\"gbk_chinese_ci\":           28,\n\t\"cp1257_lithuanian_ci\":     29,\n\t\"latin5_turkish_ci\":        30,\n\t\"latin1_german2_ci\":        31,\n\t\"armscii8_general_ci\":      32,\n\t\"utf8_general_ci\":          33,\n\t\"cp1250_czech_cs\":          34,\n\t\"ucs2_general_ci\":          35,\n\t\"cp866_general_ci\":         36,\n\t\"keybcs2_general_ci\":       37,\n\t\"macce_general_ci\":         38,\n\t\"macroman_general_ci\":      39,\n\t\"cp852_general_ci\":         40,\n\t\"latin7_general_ci\":        41,\n\t\"latin7_general_cs\":        42,\n\t\"macce_bin\":                43,\n\t\"cp1250_croatian_ci\":       44,\n\t\"utf8mb4_general_ci\":       45,\n\t\"utf8mb4_bin\":              46,\n\t\"latin1_bin\":               47,\n\t\"latin1_general_ci\":        48,\n\t\"latin1_general_cs\":        49,\n\t\"cp1251_bin\":               50,\n\t\"cp1251_general_ci\":        51,\n\t\"cp1251_general_cs\":        52,\n\t\"macroman_bin\":             53,\n\t\"utf16_general_ci\":         54,\n\t\"utf16_bin\":                55,\n\t\"utf16le_general_ci\":       56,\n\t\"cp1256_general_ci\":        57,\n\t\"cp1257_bin\":               58,\n\t\"cp1257_general_ci\":        59,\n\t\"utf32_general_ci\":         60,\n\t\"utf32_bin\":                61,\n\t\"utf16le_bin\":              62,\n\t\"binary\":                   63,\n\t\"armscii8_bin\":             64,\n\t\"ascii_bin\":                65,\n\t\"cp1250_bin\":               66,\n\t\"cp1256_bin\":               67,\n\t\"cp866_bin\":                68,\n\t\"dec8_bin\":                 69,\n\t\"greek_bin\":                70,\n\t\"hebrew_bin\":               71,\n\t\"hp8_bin\":                  72,\n\t\"keybcs2_bin\":              73,\n\t\"koi8r_bin\":                74,\n\t\"koi8u_bin\":                75,\n\t\"latin2_bin\":               77,\n\t\"latin5_bin\":               78,\n\t\"latin7_bin\":               79,\n\t\"cp850_bin\":                80,\n\t\"cp852_bin\":                81,\n\t\"swe7_bin\":                 82,\n\t\"utf8_bin\":                 83,\n\t\"big5_bin\":                 84,\n\t\"euckr_bin\":                85,\n\t\"gb2312_bin\":               86,\n\t\"gbk_bin\":                  87,\n\t\"sjis_bin\":                 88,\n\t\"tis620_bin\":               89,\n\t\"ucs2_bin\":                 90,\n\t\"ujis_bin\":                 91,\n\t\"geostd8_general_ci\":       92,\n\t\"geostd8_bin\":              93,\n\t\"latin1_spanish_ci\":        94,\n\t\"cp932_japanese_ci\":        95,\n\t\"cp932_bin\":                96,\n\t\"eucjpms_japanese_ci\":      97,\n\t\"eucjpms_bin\":              98,\n\t\"cp1250_polish_ci\":         99,\n\t\"utf16_unicode_ci\":         101,\n\t\"utf16_icelandic_ci\":       102,\n\t\"utf16_latvian_ci\":         103,\n\t\"utf16_romanian_ci\":        104,\n\t\"utf16_slovenian_ci\":       105,\n\t\"utf16_polish_ci\":          106,\n\t\"utf16_estonian_ci\":        107,\n\t\"utf16_spanish_ci\":         108,\n\t\"utf16_swedish_ci\":         109,\n\t\"utf16_turkish_ci\":         110,\n\t\"utf16_czech_ci\":           111,\n\t\"utf16_danish_ci\":          112,\n\t\"utf16_lithuanian_ci\":      113,\n\t\"utf16_slovak_ci\":          114,\n\t\"utf16_spanish2_ci\":        115,\n\t\"utf16_roman_ci\":           116,\n\t\"utf16_persian_ci\":         117,\n\t\"utf16_esperanto_ci\":       118,\n\t\"utf16_hungarian_ci\":       119,\n\t\"utf16_sinhala_ci\":         120,\n\t\"utf16_german2_ci\":         121,\n\t\"utf16_croatian_ci\":        122,\n\t\"utf16_unicode_520_ci\":     123,\n\t\"utf16_vietnamese_ci\":      124,\n\t\"ucs2_unicode_ci\":          128,\n\t\"ucs2_icelandic_ci\":        129,\n\t\"ucs2_latvian_ci\":          130,\n\t\"ucs2_romanian_ci\":         131,\n\t\"ucs2_slovenian_ci\":        132,\n\t\"ucs2_polish_ci\":           133,\n\t\"ucs2_estonian_ci\":         134,\n\t\"ucs2_spanish_ci\":          135,\n\t\"ucs2_swedish_ci\":          136,\n\t\"ucs2_turkish_ci\":          137,\n\t\"ucs2_czech_ci\":            138,\n\t\"ucs2_danish_ci\":           139,\n\t\"ucs2_lithuanian_ci\":       140,\n\t\"ucs2_slovak_ci\":           141,\n\t\"ucs2_spanish2_ci\":         142,\n\t\"ucs2_roman_ci\":            143,\n\t\"ucs2_persian_ci\":          144,\n\t\"ucs2_esperanto_ci\":        145,\n\t\"ucs2_hungarian_ci\":        146,\n\t\"ucs2_sinhala_ci\":          147,\n\t\"ucs2_german2_ci\":          148,\n\t\"ucs2_croatian_ci\":         149,\n\t\"ucs2_unicode_520_ci\":      150,\n\t\"ucs2_vietnamese_ci\":       151,\n\t\"ucs2_general_mysql500_ci\": 159,\n\t\"utf32_unicode_ci\":         160,\n\t\"utf32_icelandic_ci\":       161,\n\t\"utf32_latvian_ci\":         162,\n\t\"utf32_romanian_ci\":        163,\n\t\"utf32_slovenian_ci\":       164,\n\t\"utf32_polish_ci\":          165,\n\t\"utf32_estonian_ci\":        166,\n\t\"utf32_spanish_ci\":         167,\n\t\"utf32_swedish_ci\":         168,\n\t\"utf32_turkish_ci\":         169,\n\t\"utf32_czech_ci\":           170,\n\t\"utf32_danish_ci\":          171,\n\t\"utf32_lithuanian_ci\":      172,\n\t\"utf32_slovak_ci\":          173,\n\t\"utf32_spanish2_ci\":        174,\n\t\"utf32_roman_ci\":           175,\n\t\"utf32_persian_ci\":         176,\n\t\"utf32_esperanto_ci\":       177,\n\t\"utf32_hungarian_ci\":       178,\n\t\"utf32_sinhala_ci\":         179,\n\t\"utf32_german2_ci\":         180,\n\t\"utf32_croatian_ci\":        181,\n\t\"utf32_unicode_520_ci\":     182,\n\t\"utf32_vietnamese_ci\":      183,\n\t\"utf8_unicode_ci\":          192,\n\t\"utf8_icelandic_ci\":        193,\n\t\"utf8_latvian_ci\":          194,\n\t\"utf8_romanian_ci\":         195,\n\t\"utf8_slovenian_ci\":        196,\n\t\"utf8_polish_ci\":           197,\n\t\"utf8_estonian_ci\":         198,\n\t\"utf8_spanish_ci\":          199,\n\t\"utf8_swedish_ci\":          200,\n\t\"utf8_turkish_ci\":          201,\n\t\"utf8_czech_ci\":            202,\n\t\"utf8_danish_ci\":           203,\n\t\"utf8_lithuanian_ci\":       204,\n\t\"utf8_slovak_ci\":           205,\n\t\"utf8_spanish2_ci\":         206,\n\t\"utf8_roman_ci\":            207,\n\t\"utf8_persian_ci\":          208,\n\t\"utf8_esperanto_ci\":        209,\n\t\"utf8_hungarian_ci\":        210,\n\t\"utf8_sinhala_ci\":          211,\n\t\"utf8_german2_ci\":          212,\n\t\"utf8_croatian_ci\":         213,\n\t\"utf8_unicode_520_ci\":      214,\n\t\"utf8_vietnamese_ci\":       215,\n\t\"utf8_general_mysql500_ci\": 223,\n\t\"utf8mb4_unicode_ci\":       224,\n\t\"utf8mb4_icelandic_ci\":     225,\n\t\"utf8mb4_latvian_ci\":       226,\n\t\"utf8mb4_romanian_ci\":      227,\n\t\"utf8mb4_slovenian_ci\":     228,\n\t\"utf8mb4_polish_ci\":        229,\n\t\"utf8mb4_estonian_ci\":      230,\n\t\"utf8mb4_spanish_ci\":       231,\n\t\"utf8mb4_swedish_ci\":       232,\n\t\"utf8mb4_turkish_ci\":       233,\n\t\"utf8mb4_czech_ci\":         234,\n\t\"utf8mb4_danish_ci\":        235,\n\t\"utf8mb4_lithuanian_ci\":    236,\n\t\"utf8mb4_slovak_ci\":        237,\n\t\"utf8mb4_spanish2_ci\":      238,\n\t\"utf8mb4_roman_ci\":         239,\n\t\"utf8mb4_persian_ci\":       240,\n\t\"utf8mb4_esperanto_ci\":     241,\n\t\"utf8mb4_hungarian_ci\":     242,\n\t\"utf8mb4_sinhala_ci\":       243,\n\t\"utf8mb4_german2_ci\":       244,\n\t\"utf8mb4_croatian_ci\":      245,\n\t\"utf8mb4_unicode_520_ci\":   246,\n\t\"utf8mb4_vietnamese_ci\":    247,\n\t\"utf8mb4_0900_ai_ci\":       255,\n\t\"utf8mb4_0900_bin\":         309,\n}\n\n// MySQL collation information.\nconst (\n\tUTF8Charset    = \"utf8\"\n\tUTF8MB4Charset = \"utf8mb4\"\n\tDefaultCharset = UTF8MB4Charset\n\t// DefaultCollationID is utf8mb4_bin(46)\n\tDefaultCollationID        = 46\n\tLatin1DefaultCollationID  = 47\n\tASCIIDefaultCollationID   = 65\n\tUTF8DefaultCollationID    = 83\n\tUTF8MB4DefaultCollationID = 46\n\tBinaryDefaultCollationID  = 63\n\tUTF8MB4DefaultCollation   = \"utf8mb4_bin\"\n\tDefaultCollationName      = UTF8MB4DefaultCollation\n\tUTF8MB4GeneralCICollation = \"utf8mb4_general_ci\"\n\n\t// MaxBytesOfCharacter, is the max bytes length of a character,\n\t// refer to RFC3629, in UTF-8, characters from the U+0000..U+10FFFF range\n\t// (the UTF-16 accessible range) are encoded using sequences of 1 to 4 octets.\n\tMaxBytesOfCharacter = 4\n)\n\n// IsUTF8Charset checks if charset is utf8, utf8mb4.\nfunc IsUTF8Charset(charset string) bool {\n\treturn charset == UTF8Charset || charset == UTF8MB4Charset\n}\n\n// RangeGraph defines valid unicode characters to use in column names. It strictly follows MySQL's definition.\n// See #3994.\nvar RangeGraph = []*unicode.RangeTable{\n\t// _MY_PNT\n\tunicode.No,\n\tunicode.Mn,\n\tunicode.Me,\n\tunicode.Pc,\n\tunicode.Pd,\n\tunicode.Pd,\n\tunicode.Ps,\n\tunicode.Pe,\n\tunicode.Pi,\n\tunicode.Pf,\n\tunicode.Po,\n\tunicode.Sm,\n\tunicode.Sc,\n\tunicode.Sk,\n\tunicode.So,\n\t// _MY_U\n\tunicode.Lu,\n\tunicode.Lt,\n\tunicode.Nl,\n\t// _MY_L\n\tunicode.Ll,\n\tunicode.Lm,\n\tunicode.Lo,\n\tunicode.Nl,\n\tunicode.Mn,\n\tunicode.Mc,\n\tunicode.Me,\n\t// _MY_NMR\n\tunicode.Nd,\n\tunicode.Nl,\n\tunicode.No,\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/const.go",
    "content": "// Copyright 2017 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/pingcap/errors\"\n\t\"github.com/pingcap/tidb/pkg/parser/format\"\n)\n\nfunc newInvalidModeErr(s string) error {\n\treturn NewErr(ErrWrongValueForVar, \"sql_mode\", s)\n}\n\nconst (\n\tmysqlCompatibilityVersion = \"8.0.11\"\n\t// VersionSeparator NOTE: DON'T MODIFY THIS VALUE.\n\t// We don't store TiDB server version directly inside PD, but stores a concatenated\n\t// one with MySQL compatibility version, with this fixed then we can parse TiDB\n\t// version from ServerVersion.\n\tVersionSeparator = \"-TiDB-\"\n)\n\n// Version information.\nvar (\n\t// TiDBReleaseVersion is initialized by (git describe --tags) in Makefile.\n\tTiDBReleaseVersion = \"v8.4.0-this-is-a-placeholder\"\n\n\t// ServerVersion is the version information of this tidb-server in MySQL's format.\n\tServerVersion = fmt.Sprintf(\"%s%s%s\", mysqlCompatibilityVersion, VersionSeparator, TiDBReleaseVersion)\n)\n\n// Header information.\nconst (\n\tOKHeader          byte = 0x00\n\tErrHeader         byte = 0xff\n\tEOFHeader         byte = 0xfe\n\tLocalInFileHeader byte = 0xfb\n)\n\n// AuthSwitchRequest is a protocol feature.\nconst AuthSwitchRequest byte = 0xfe\n\n// Server information.\nconst (\n\tServerStatusInTrans            uint16 = 0x0001\n\tServerStatusAutocommit         uint16 = 0x0002\n\tServerMoreResultsExists        uint16 = 0x0008\n\tServerStatusNoGoodIndexUsed    uint16 = 0x0010\n\tServerStatusNoIndexUsed        uint16 = 0x0020\n\tServerStatusCursorExists       uint16 = 0x0040\n\tServerStatusLastRowSend        uint16 = 0x0080\n\tServerStatusDBDropped          uint16 = 0x0100\n\tServerStatusNoBackslashEscaped uint16 = 0x0200\n\tServerStatusMetadataChanged    uint16 = 0x0400\n\tServerStatusWasSlow            uint16 = 0x0800\n\tServerPSOutParams              uint16 = 0x1000\n)\n\n// HasCursorExistsFlag return true if cursor exists indicated by server status.\nfunc HasCursorExistsFlag(serverStatus uint16) bool {\n\treturn serverStatus&ServerStatusCursorExists > 0\n}\n\n// Identifier length limitations.\n// See https://dev.mysql.com/doc/refman/5.7/en/identifiers.html\nconst (\n\t// MaxPayloadLen is the max packet payload length.\n\tMaxPayloadLen = 1<<24 - 1\n\t// MaxTableNameLength is max length of table name identifier.\n\tMaxTableNameLength = 64\n\t// MaxDatabaseNameLength is max length of database name identifier.\n\tMaxDatabaseNameLength = 64\n\t// MaxColumnNameLength is max length of column name identifier.\n\tMaxColumnNameLength = 64\n\t// MaxKeyParts is max length of key parts.\n\tMaxKeyParts = 16\n\t// MaxIndexIdentifierLen is max length of index identifier.\n\tMaxIndexIdentifierLen = 64\n\t// MaxForeignKeyIdentifierLen is max length of foreign key identifier.\n\tMaxForeignKeyIdentifierLen = 64\n\t// MaxConstraintIdentifierLen is max length of constrain identifier.\n\tMaxConstraintIdentifierLen = 64\n\t// MaxViewIdentifierLen is max length of view identifier.\n\tMaxViewIdentifierLen = 64\n\t// MaxAliasIdentifierLen is max length of alias identifier.\n\tMaxAliasIdentifierLen = 256\n\t// MaxUserDefinedVariableLen is max length of user-defined variable.\n\tMaxUserDefinedVariableLen = 64\n)\n\n// ErrTextLength error text length limit.\nconst ErrTextLength = 80\n\n// Command information.\nconst (\n\tComSleep byte = iota\n\tComQuit\n\tComInitDB\n\tComQuery\n\tComFieldList\n\tComCreateDB\n\tComDropDB\n\tComRefresh\n\tComShutdown\n\tComStatistics\n\tComProcessInfo\n\tComConnect\n\tComProcessKill\n\tComDebug\n\tComPing\n\tComTime\n\tComDelayedInsert\n\tComChangeUser\n\tComBinlogDump\n\tComTableDump\n\tComConnectOut\n\tComRegisterSlave\n\tComStmtPrepare\n\tComStmtExecute\n\tComStmtSendLongData\n\tComStmtClose\n\tComStmtReset\n\tComSetOption\n\tComStmtFetch\n\tComDaemon\n\tComBinlogDumpGtid\n\tComResetConnection\n\tComEnd\n)\n\n// Client information. https://dev.mysql.com/doc/dev/mysql-server/latest/group__group__cs__capabilities__flags.html\nconst (\n\tClientLongPassword               uint32 = 1 << iota // CLIENT_LONG_PASSWORD\n\tClientFoundRows                                     // CLIENT_FOUND_ROWS\n\tClientLongFlag                                      // CLIENT_LONG_FLAG\n\tClientConnectWithDB                                 // CLIENT_CONNECT_WITH_DB\n\tClientNoSchema                                      // CLIENT_NO_SCHEMA\n\tClientCompress                                      // CLIENT_COMPRESS\n\tClientODBC                                          // CLIENT_ODBC\n\tClientLocalFiles                                    // CLIENT_LOCAL_FILES\n\tClientIgnoreSpace                                   // CLIENT_IGNORE_SPACE\n\tClientProtocol41                                    // CLIENT_PROTOCOL_41\n\tClientInteractive                                   // CLIENT_INTERACTIVE\n\tClientSSL                                           // CLIENT_SSL\n\tClientIgnoreSigpipe                                 // CLIENT_IGNORE_SIGPIPE\n\tClientTransactions                                  // CLIENT_TRANSACTIONS\n\tClientReserved                                      // Deprecated: CLIENT_RESERVED\n\tClientSecureConnection                              // Deprecated: CLIENT_SECURE_CONNECTION\n\tClientMultiStatements                               // CLIENT_MULTI_STATEMENTS\n\tClientMultiResults                                  // CLIENT_MULTI_RESULTS\n\tClientPSMultiResults                                // CLIENT_PS_MULTI_RESULTS\n\tClientPluginAuth                                    // CLIENT_PLUGIN_AUTH\n\tClientConnectAtts                                   // CLIENT_CONNECT_ATTRS\n\tClientPluginAuthLenencClientData                    // CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA\n\tClientHandleExpiredPasswords                        // CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS, Not supported: https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_expired_passwords.html\n\tClientSessionTrack                                  // CLIENT_SESSION_TRACK, Not supported: https://github.com/pingcap/tidb/issues/35309\n\tClientDeprecateEOF                                  // CLIENT_DEPRECATE_EOF\n\tClientOptionalResultsetMetadata                     // CLIENT_OPTIONAL_RESULTSET_METADATA, Not supported: https://dev.mysql.com/doc/c-api/8.0/en/c-api-optional-metadata.html\n\tClientZstdCompressionAlgorithm                      // CLIENT_ZSTD_COMPRESSION_ALGORITHM\n\t// 1 << 27 == CLIENT_QUERY_ATTRIBUTES\n\t// 1 << 28 == MULTI_FACTOR_AUTHENTICATION\n\t// 1 << 29 == CLIENT_CAPABILITY_EXTENSION\n\t// 1 << 30 == CLIENT_SSL_VERIFY_SERVER_CERT\n\t// 1 << 31 == CLIENT_REMEMBER_OPTIONS\n)\n\n// Cache type information.\nconst (\n\tTypeNoCache byte = 0xff\n)\n\n// Auth name information.\nconst (\n\tAuthNativePassword      = \"mysql_native_password\" // #nosec G101\n\tAuthCachingSha2Password = \"caching_sha2_password\" // #nosec G101\n\tAuthTiDBSM3Password     = \"tidb_sm3_password\"     // #nosec G101\n\tAuthMySQLClearPassword  = \"mysql_clear_password\"\n\tAuthSocket              = \"auth_socket\"\n\tAuthTiDBSessionToken    = \"tidb_session_token\"\n\tAuthTiDBAuthToken       = \"tidb_auth_token\"\n\tAuthLDAPSimple          = \"authentication_ldap_simple\"\n\tAuthLDAPSASL            = \"authentication_ldap_sasl\"\n)\n\n// MySQL database and tables.\nconst (\n\t// SystemDB is the name of system database.\n\tSystemDB = \"mysql\"\n\t// SysDB is the name of `sys` schema, which is a set of objects to help users to interpret data collected\n\t// in `information_schema`.\n\tSysDB = \"sys\"\n\t// GlobalPrivTable is the table in system db contains global scope privilege info.\n\tGlobalPrivTable = \"global_priv\"\n\t// UserTable is the table in system db contains user info.\n\tUserTable = \"User\"\n\t// DBTable is the table in system db contains db scope privilege info.\n\tDBTable = \"DB\"\n\t// TablePrivTable is the table in system db contains table scope privilege info.\n\tTablePrivTable = \"Tables_priv\"\n\t// ColumnPrivTable is the table in system db contains column scope privilege info.\n\tColumnPrivTable = \"Columns_priv\"\n\t// GlobalVariablesTable is the table contains global system variables.\n\tGlobalVariablesTable = \"GLOBAL_VARIABLES\"\n\t// GlobalStatusTable is the table contains global status variables.\n\tGlobalStatusTable = \"GLOBAL_STATUS\"\n\t// TiDBTable is the table contains tidb info.\n\tTiDBTable = \"tidb\"\n\t// RoleEdgeTable is the table contains role relation info\n\tRoleEdgeTable = \"role_edges\"\n\t// DefaultRoleTable is the table contain default active role info\n\tDefaultRoleTable = \"default_roles\"\n\t// PasswordHistoryTable is the table in system db contains password history.\n\tPasswordHistoryTable = \"password_history\"\n)\n\n// MySQL type maximum length.\nconst (\n\t// NotFixedDec For arguments that have no fixed number of decimals, the decimals value is set to 31,\n\t// which is 1 more than the maximum number of decimals permitted for the DECIMAL, FLOAT, and DOUBLE data types.\n\tNotFixedDec = 31\n\n\tMaxIntWidth              = 20\n\tMaxRealWidth             = 23\n\tMaxFloatingTypeScale     = 30\n\tMaxFloatingTypeWidth     = 255\n\tMaxDecimalScale          = 30\n\tMaxDecimalWidth          = 65\n\tMaxDateWidth             = 10 // YYYY-MM-DD.\n\tMaxDatetimeWidthNoFsp    = 19 // YYYY-MM-DD HH:MM:SS\n\tMaxDatetimeWidthWithFsp  = 26 // YYYY-MM-DD HH:MM:SS[.fraction]\n\tMaxDatetimeFullWidth     = 29 // YYYY-MM-DD HH:MM:SS.###### AM\n\tMaxDurationWidthNoFsp    = 10 // HH:MM:SS\n\tMaxDurationWidthWithFsp  = 17 // HH:MM:SS[.fraction] -838:59:59.000000 to 838:59:59.000000\n\tMaxBlobWidth             = 16777216\n\tMaxLongBlobWidth         = 4294967295\n\tMaxBitDisplayWidth       = 64\n\tMaxFloatPrecisionLength  = 24\n\tMaxDoublePrecisionLength = 53\n)\n\n// MySQL max type field length.\nconst (\n\tMaxFieldCharLength    = 255\n\tMaxFieldVarCharLength = 65535\n)\n\n// MaxTypeSetMembers is the number of set members.\nconst MaxTypeSetMembers = 64\n\n// PWDHashLen is the length of mysql_native_password's hash.\nconst PWDHashLen = 40 // excluding the '*'\n\n// SHAPWDHashLen is the length of sha256_password's hash.\nconst SHAPWDHashLen = 70\n\n// SM3PWDHashLen is the length of tidb_sm3_password's hash.\nconst SM3PWDHashLen = 70\n\n// Command2Str is the command information to command name.\nvar Command2Str = map[byte]string{\n\tComSleep:            \"Sleep\",\n\tComQuit:             \"Quit\",\n\tComInitDB:           \"Init DB\",\n\tComQuery:            \"Query\",\n\tComFieldList:        \"Field List\",\n\tComCreateDB:         \"Create DB\",\n\tComDropDB:           \"Drop DB\",\n\tComRefresh:          \"Refresh\",\n\tComShutdown:         \"Shutdown\",\n\tComStatistics:       \"Statistics\",\n\tComProcessInfo:      \"Processlist\",\n\tComConnect:          \"Connect\",\n\tComProcessKill:      \"Kill\",\n\tComDebug:            \"Debug\",\n\tComPing:             \"Ping\",\n\tComTime:             \"Time\",\n\tComDelayedInsert:    \"Delayed Insert\",\n\tComChangeUser:       \"Change User\",\n\tComBinlogDump:       \"Binlog Dump\",\n\tComTableDump:        \"Table Dump\",\n\tComConnectOut:       \"Connect out\",\n\tComRegisterSlave:    \"Register Slave\",\n\tComStmtPrepare:      \"Prepare\",\n\tComStmtExecute:      \"Execute\",\n\tComStmtSendLongData: \"Long Data\",\n\tComStmtClose:        \"Close stmt\",\n\tComStmtReset:        \"Reset stmt\",\n\tComSetOption:        \"Set option\",\n\tComStmtFetch:        \"Fetch\",\n\tComDaemon:           \"Daemon\",\n\tComBinlogDumpGtid:   \"Binlog Dump\",\n\tComResetConnection:  \"Reset connect\",\n}\n\n// DefaultSQLMode for GLOBAL_VARIABLES\nconst DefaultSQLMode = \"ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"\n\n// DefaultLengthOfMysqlTypes is the map for default physical length of MySQL data types.\n// See http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html\nvar DefaultLengthOfMysqlTypes = map[byte]int{\n\tTypeYear:      1,\n\tTypeDate:      3,\n\tTypeDuration:  3,\n\tTypeDatetime:  8,\n\tTypeTimestamp: 4,\n\n\tTypeTiny:     1,\n\tTypeShort:    2,\n\tTypeInt24:    3,\n\tTypeLong:     4,\n\tTypeLonglong: 8,\n\tTypeFloat:    4,\n\tTypeDouble:   8,\n\n\tTypeEnum:   2,\n\tTypeString: 1,\n\tTypeSet:    8,\n}\n\n// DefaultLengthOfTimeFraction is the map for default physical length of time fractions.\nvar DefaultLengthOfTimeFraction = map[int]int{\n\t0: 0,\n\n\t1: 1,\n\t2: 1,\n\n\t3: 2,\n\t4: 2,\n\n\t5: 3,\n\t6: 3,\n}\n\n// DefaultAuthPlugins are the supported default authentication plugins.\nvar DefaultAuthPlugins = []string{\n\tAuthNativePassword,\n\tAuthCachingSha2Password,\n\tAuthTiDBSM3Password,\n\tAuthLDAPSASL,\n\tAuthLDAPSimple,\n\tAuthSocket,\n\tAuthTiDBSessionToken,\n\tAuthTiDBAuthToken,\n\tAuthMySQLClearPassword,\n}\n\n// SQLMode is the type for MySQL sql_mode.\n// See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html\ntype SQLMode int64\n\n// HasNoZeroDateMode detects if 'NO_ZERO_DATE' mode is set in SQLMode\nfunc (m SQLMode) HasNoZeroDateMode() bool {\n\treturn m&ModeNoZeroDate == ModeNoZeroDate\n}\n\n// HasNoZeroInDateMode detects if 'NO_ZERO_IN_DATE' mode is set in SQLMode\nfunc (m SQLMode) HasNoZeroInDateMode() bool {\n\treturn m&ModeNoZeroInDate == ModeNoZeroInDate\n}\n\n// HasErrorForDivisionByZeroMode detects if 'ERROR_FOR_DIVISION_BY_ZERO' mode is set in SQLMode\nfunc (m SQLMode) HasErrorForDivisionByZeroMode() bool {\n\treturn m&ModeErrorForDivisionByZero == ModeErrorForDivisionByZero\n}\n\n// HasOnlyFullGroupBy detects if 'ONLY_FULL_GROUP_BY' mode is set in SQLMode\nfunc (m SQLMode) HasOnlyFullGroupBy() bool {\n\treturn m&ModeOnlyFullGroupBy == ModeOnlyFullGroupBy\n}\n\n// HasStrictMode detects if 'STRICT_TRANS_TABLES' or 'STRICT_ALL_TABLES' mode is set in SQLMode\nfunc (m SQLMode) HasStrictMode() bool {\n\treturn m&ModeStrictTransTables == ModeStrictTransTables || m&ModeStrictAllTables == ModeStrictAllTables\n}\n\n// HasPipesAsConcatMode detects if 'PIPES_AS_CONCAT' mode is set in SQLMode\nfunc (m SQLMode) HasPipesAsConcatMode() bool {\n\treturn m&ModePipesAsConcat == ModePipesAsConcat\n}\n\n// HasNoUnsignedSubtractionMode detects if 'NO_UNSIGNED_SUBTRACTION' mode is set in SQLMode\nfunc (m SQLMode) HasNoUnsignedSubtractionMode() bool {\n\treturn m&ModeNoUnsignedSubtraction == ModeNoUnsignedSubtraction\n}\n\n// HasHighNotPrecedenceMode detects if 'HIGH_NOT_PRECEDENCE' mode is set in SQLMode\nfunc (m SQLMode) HasHighNotPrecedenceMode() bool {\n\treturn m&ModeHighNotPrecedence == ModeHighNotPrecedence\n}\n\n// HasANSIQuotesMode detects if 'ANSI_QUOTES' mode is set in SQLMode\nfunc (m SQLMode) HasANSIQuotesMode() bool {\n\treturn m&ModeANSIQuotes == ModeANSIQuotes\n}\n\n// HasRealAsFloatMode detects if 'REAL_AS_FLOAT' mode is set in SQLMode\nfunc (m SQLMode) HasRealAsFloatMode() bool {\n\treturn m&ModeRealAsFloat == ModeRealAsFloat\n}\n\n// HasPadCharToFullLengthMode detects if 'PAD_CHAR_TO_FULL_LENGTH' mode is set in SQLMode\nfunc (m SQLMode) HasPadCharToFullLengthMode() bool {\n\treturn m&ModePadCharToFullLength == ModePadCharToFullLength\n}\n\n// HasNoBackslashEscapesMode detects if 'NO_BACKSLASH_ESCAPES' mode is set in SQLMode\nfunc (m SQLMode) HasNoBackslashEscapesMode() bool {\n\treturn m&ModeNoBackslashEscapes == ModeNoBackslashEscapes\n}\n\n// HasIgnoreSpaceMode detects if 'IGNORE_SPACE' mode is set in SQLMode\nfunc (m SQLMode) HasIgnoreSpaceMode() bool {\n\treturn m&ModeIgnoreSpace == ModeIgnoreSpace\n}\n\n// HasNoAutoCreateUserMode detects if 'NO_AUTO_CREATE_USER' mode is set in SQLMode\nfunc (m SQLMode) HasNoAutoCreateUserMode() bool {\n\treturn m&ModeNoAutoCreateUser == ModeNoAutoCreateUser\n}\n\n// HasAllowInvalidDatesMode detects if 'ALLOW_INVALID_DATES' mode is set in SQLMode\nfunc (m SQLMode) HasAllowInvalidDatesMode() bool {\n\treturn m&ModeAllowInvalidDates == ModeAllowInvalidDates\n}\n\n// DelSQLMode delete sql mode from ori\nfunc DelSQLMode(ori SQLMode, del SQLMode) SQLMode {\n\treturn ori & (^del)\n}\n\n// SetSQLMode add sql mode to ori\nfunc SetSQLMode(ori SQLMode, add SQLMode) SQLMode {\n\treturn ori | add\n}\n\n// consts for sql modes.\n// see https://dev.mysql.com/doc/internals/en/query-event.html#q-sql-mode-code\nconst (\n\tModeRealAsFloat SQLMode = 1 << iota\n\tModePipesAsConcat\n\tModeANSIQuotes\n\tModeIgnoreSpace\n\tModeNotUsed\n\tModeOnlyFullGroupBy\n\tModeNoUnsignedSubtraction\n\tModeNoDirInCreate\n\tModePostgreSQL\n\tModeOracle\n\tModeMsSQL\n\tModeDb2\n\tModeMaxdb\n\tModeNoKeyOptions\n\tModeNoTableOptions\n\tModeNoFieldOptions\n\tModeMySQL323\n\tModeMySQL40\n\tModeANSI\n\tModeNoAutoValueOnZero\n\tModeNoBackslashEscapes\n\tModeStrictTransTables\n\tModeStrictAllTables\n\tModeNoZeroInDate\n\tModeNoZeroDate\n\tModeInvalidDates\n\tModeErrorForDivisionByZero\n\tModeTraditional\n\tModeNoAutoCreateUser\n\tModeHighNotPrecedence\n\tModeNoEngineSubstitution\n\tModePadCharToFullLength\n\tModeAllowInvalidDates\n\tModeNone = 0\n)\n\n// FormatSQLModeStr re-format 'SQL_MODE' variable.\nfunc FormatSQLModeStr(s string) string {\n\ts = strings.ToUpper(strings.TrimRight(s, \" \"))\n\tparts := strings.Split(s, \",\")\n\tvar nonEmptyParts []string\n\texistParts := make(map[string]string)\n\tfor _, part := range parts {\n\t\tif len(part) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif modeParts, ok := CombinationSQLMode[part]; ok {\n\t\t\tfor _, modePart := range modeParts {\n\t\t\t\tif _, exist := existParts[modePart]; !exist {\n\t\t\t\t\tnonEmptyParts = append(nonEmptyParts, modePart)\n\t\t\t\t\texistParts[modePart] = modePart\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif _, exist := existParts[part]; !exist {\n\t\t\tnonEmptyParts = append(nonEmptyParts, part)\n\t\t\texistParts[part] = part\n\t\t}\n\t}\n\treturn strings.Join(nonEmptyParts, \",\")\n}\n\n// GetSQLMode gets the sql mode for string literal. SQL_mode is a list of different modes separated by commas.\n// The input string must be formatted by 'FormatSQLModeStr'\nfunc GetSQLMode(s string) (SQLMode, error) {\n\tstrs := strings.Split(s, \",\")\n\tvar sqlMode SQLMode\n\tfor i, length := 0, len(strs); i < length; i++ {\n\t\tmode, ok := Str2SQLMode[strs[i]]\n\t\tif !ok && strs[i] != \"\" {\n\t\t\treturn sqlMode, newInvalidModeErr(strs[i])\n\t\t}\n\t\tsqlMode = sqlMode | mode\n\t}\n\treturn sqlMode, nil\n}\n\n// Str2SQLMode is the string represent of sql_mode to sql_mode map.\nvar Str2SQLMode = map[string]SQLMode{\n\t\"REAL_AS_FLOAT\":              ModeRealAsFloat,\n\t\"PIPES_AS_CONCAT\":            ModePipesAsConcat,\n\t\"ANSI_QUOTES\":                ModeANSIQuotes,\n\t\"IGNORE_SPACE\":               ModeIgnoreSpace,\n\t\"NOT_USED\":                   ModeNotUsed,\n\t\"ONLY_FULL_GROUP_BY\":         ModeOnlyFullGroupBy,\n\t\"NO_UNSIGNED_SUBTRACTION\":    ModeNoUnsignedSubtraction,\n\t\"NO_DIR_IN_CREATE\":           ModeNoDirInCreate,\n\t\"POSTGRESQL\":                 ModePostgreSQL,\n\t\"ORACLE\":                     ModeOracle,\n\t\"MSSQL\":                      ModeMsSQL,\n\t\"DB2\":                        ModeDb2,\n\t\"MAXDB\":                      ModeMaxdb,\n\t\"NO_KEY_OPTIONS\":             ModeNoKeyOptions,\n\t\"NO_TABLE_OPTIONS\":           ModeNoTableOptions,\n\t\"NO_FIELD_OPTIONS\":           ModeNoFieldOptions,\n\t\"MYSQL323\":                   ModeMySQL323,\n\t\"MYSQL40\":                    ModeMySQL40,\n\t\"ANSI\":                       ModeANSI,\n\t\"NO_AUTO_VALUE_ON_ZERO\":      ModeNoAutoValueOnZero,\n\t\"NO_BACKSLASH_ESCAPES\":       ModeNoBackslashEscapes,\n\t\"STRICT_TRANS_TABLES\":        ModeStrictTransTables,\n\t\"STRICT_ALL_TABLES\":          ModeStrictAllTables,\n\t\"NO_ZERO_IN_DATE\":            ModeNoZeroInDate,\n\t\"NO_ZERO_DATE\":               ModeNoZeroDate,\n\t\"INVALID_DATES\":              ModeInvalidDates,\n\t\"ERROR_FOR_DIVISION_BY_ZERO\": ModeErrorForDivisionByZero,\n\t\"TRADITIONAL\":                ModeTraditional,\n\t\"NO_AUTO_CREATE_USER\":        ModeNoAutoCreateUser,\n\t\"HIGH_NOT_PRECEDENCE\":        ModeHighNotPrecedence,\n\t\"NO_ENGINE_SUBSTITUTION\":     ModeNoEngineSubstitution,\n\t\"PAD_CHAR_TO_FULL_LENGTH\":    ModePadCharToFullLength,\n\t\"ALLOW_INVALID_DATES\":        ModeAllowInvalidDates,\n}\n\n// CombinationSQLMode is the special modes that provided as shorthand for combinations of mode values.\n// See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-combo.\nvar CombinationSQLMode = map[string][]string{\n\t\"ANSI\":        {\"REAL_AS_FLOAT\", \"PIPES_AS_CONCAT\", \"ANSI_QUOTES\", \"IGNORE_SPACE\", \"ONLY_FULL_GROUP_BY\"},\n\t\"DB2\":         {\"PIPES_AS_CONCAT\", \"ANSI_QUOTES\", \"IGNORE_SPACE\", \"NO_KEY_OPTIONS\", \"NO_TABLE_OPTIONS\", \"NO_FIELD_OPTIONS\"},\n\t\"MAXDB\":       {\"PIPES_AS_CONCAT\", \"ANSI_QUOTES\", \"IGNORE_SPACE\", \"NO_KEY_OPTIONS\", \"NO_TABLE_OPTIONS\", \"NO_FIELD_OPTIONS\", \"NO_AUTO_CREATE_USER\"},\n\t\"MSSQL\":       {\"PIPES_AS_CONCAT\", \"ANSI_QUOTES\", \"IGNORE_SPACE\", \"NO_KEY_OPTIONS\", \"NO_TABLE_OPTIONS\", \"NO_FIELD_OPTIONS\"},\n\t\"MYSQL323\":    {\"MYSQL323\", \"HIGH_NOT_PRECEDENCE\"},\n\t\"MYSQL40\":     {\"MYSQL40\", \"HIGH_NOT_PRECEDENCE\"},\n\t\"ORACLE\":      {\"PIPES_AS_CONCAT\", \"ANSI_QUOTES\", \"IGNORE_SPACE\", \"NO_KEY_OPTIONS\", \"NO_TABLE_OPTIONS\", \"NO_FIELD_OPTIONS\", \"NO_AUTO_CREATE_USER\"},\n\t\"POSTGRESQL\":  {\"PIPES_AS_CONCAT\", \"ANSI_QUOTES\", \"IGNORE_SPACE\", \"NO_KEY_OPTIONS\", \"NO_TABLE_OPTIONS\", \"NO_FIELD_OPTIONS\"},\n\t\"TRADITIONAL\": {\"STRICT_TRANS_TABLES\", \"STRICT_ALL_TABLES\", \"NO_ZERO_IN_DATE\", \"NO_ZERO_DATE\", \"ERROR_FOR_DIVISION_BY_ZERO\", \"NO_AUTO_CREATE_USER\", \"NO_ENGINE_SUBSTITUTION\"},\n}\n\n// FormatFunc is the locale format function signature.\ntype FormatFunc func(string, string) (string, error)\n\n// GetLocaleFormatFunction get the format function for sepcific locale.\nfunc GetLocaleFormatFunction(loc string) FormatFunc {\n\tlocale, exist := locale2FormatFunction[loc]\n\tif !exist {\n\t\treturn formatNotSupport\n\t}\n\treturn locale\n}\n\n// locale2FormatFunction is the string represent of locale format function.\nvar locale2FormatFunction = map[string]FormatFunc{\n\t\"en_US\": formatENUS,\n\t\"zh_CN\": formatZHCN,\n}\n\n// PriorityEnum is defined for Priority const values.\ntype PriorityEnum int\n\n// Priority const values.\n// See https://dev.mysql.com/doc/refman/5.7/en/insert.html\nconst (\n\tNoPriority PriorityEnum = iota\n\tLowPriority\n\tHighPriority\n\tDelayedPriority\n)\n\n// Priority2Str is used to convert the statement priority to string.\nvar Priority2Str = map[PriorityEnum]string{\n\tNoPriority:      \"NO_PRIORITY\",\n\tLowPriority:     \"LOW_PRIORITY\",\n\tHighPriority:    \"HIGH_PRIORITY\",\n\tDelayedPriority: \"DELAYED\",\n}\n\n// Str2Priority is used to convert a string to a priority.\nfunc Str2Priority(val string) PriorityEnum {\n\tval = strings.ToUpper(val)\n\tswitch val {\n\tcase \"NO_PRIORITY\":\n\t\treturn NoPriority\n\tcase \"HIGH_PRIORITY\":\n\t\treturn HighPriority\n\tcase \"LOW_PRIORITY\":\n\t\treturn LowPriority\n\tcase \"DELAYED\":\n\t\treturn DelayedPriority\n\tdefault:\n\t\treturn NoPriority\n\t}\n}\n\n// Restore implements Node interface.\nfunc (n *PriorityEnum) Restore(ctx *format.RestoreCtx) error {\n\tswitch *n {\n\tcase NoPriority:\n\t\treturn nil\n\tcase LowPriority:\n\t\tctx.WriteKeyWord(\"LOW_PRIORITY\")\n\tcase HighPriority:\n\t\tctx.WriteKeyWord(\"HIGH_PRIORITY\")\n\tcase DelayedPriority:\n\t\tctx.WriteKeyWord(\"DELAYED\")\n\tdefault:\n\t\treturn errors.Errorf(\"undefined PriorityEnum Type[%d]\", *n)\n\t}\n\treturn nil\n}\n\nconst (\n\t// PrimaryKeyName defines primary key name.\n\tPrimaryKeyName = \"PRIMARY\"\n\t// DefaultDecimal defines the default decimal value when the value out of range.\n\tDefaultDecimal = \"99999999999999999999999999999999999999999999999999999999999999999\"\n\t// PartitionCountLimit is limit of the number of partitions in a table.\n\t// Reference linking https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations.html.\n\tPartitionCountLimit = 8192\n)\n\n// This is enum_cursor_type in MySQL\nconst (\n\tCursorTypeReadOnly = 1 << iota\n\tCursorTypeForUpdate\n\tCursorTypeScrollable\n)\n\n// ZlibCompressDefaultLevel is the zlib compression level for the compressed protocol\nconst ZlibCompressDefaultLevel = 6\n\nconst (\n\t// CompressionNone is no compression in use\n\tCompressionNone = iota\n\t// CompressionZlib is zlib/deflate\n\tCompressionZlib\n\t// CompressionZstd is Facebook's Zstandard\n\tCompressionZstd\n)\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/errcode.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\n// MySQL error code.\n// This value is numeric. It is not portable to other database systems.\nconst (\n\tErrErrorFirst                                            = 1000\n\tErrHashchk                                               = 1000\n\tErrNisamchk                                              = 1001\n\tErrNo                                                    = 1002\n\tErrYes                                                   = 1003\n\tErrCantCreateFile                                        = 1004\n\tErrCantCreateTable                                       = 1005\n\tErrCantCreateDB                                          = 1006\n\tErrDBCreateExists                                        = 1007\n\tErrDBDropExists                                          = 1008\n\tErrDBDropDelete                                          = 1009\n\tErrDBDropRmdir                                           = 1010\n\tErrCantDeleteFile                                        = 1011\n\tErrCantFindSystemRec                                     = 1012\n\tErrCantGetStat                                           = 1013\n\tErrCantGetWd                                             = 1014\n\tErrCantLock                                              = 1015\n\tErrCantOpenFile                                          = 1016\n\tErrFileNotFound                                          = 1017\n\tErrCantReadDir                                           = 1018\n\tErrCantSetWd                                             = 1019\n\tErrCheckread                                             = 1020\n\tErrDiskFull                                              = 1021\n\tErrDupKey                                                = 1022\n\tErrErrorOnClose                                          = 1023\n\tErrErrorOnRead                                           = 1024\n\tErrErrorOnRename                                         = 1025\n\tErrErrorOnWrite                                          = 1026\n\tErrFileUsed                                              = 1027\n\tErrFilsortAbort                                          = 1028\n\tErrFormNotFound                                          = 1029\n\tErrGetErrno                                              = 1030\n\tErrIllegalHa                                             = 1031\n\tErrKeyNotFound                                           = 1032\n\tErrNotFormFile                                           = 1033\n\tErrNotKeyFile                                            = 1034\n\tErrOldKeyFile                                            = 1035\n\tErrOpenAsReadonly                                        = 1036\n\tErrOutofMemory                                           = 1037\n\tErrOutOfSortMemory                                       = 1038\n\tErrUnexpectedEOF                                         = 1039\n\tErrConCount                                              = 1040\n\tErrOutOfResources                                        = 1041\n\tErrBadHost                                               = 1042\n\tErrHandshake                                             = 1043\n\tErrDBaccessDenied                                        = 1044\n\tErrAccessDenied                                          = 1045\n\tErrNoDB                                                  = 1046\n\tErrUnknownCom                                            = 1047\n\tErrBadNull                                               = 1048\n\tErrBadDB                                                 = 1049\n\tErrTableExists                                           = 1050\n\tErrBadTable                                              = 1051\n\tErrNonUniq                                               = 1052\n\tErrServerShutdown                                        = 1053\n\tErrBadField                                              = 1054\n\tErrFieldNotInGroupBy                                     = 1055\n\tErrWrongGroupField                                       = 1056\n\tErrWrongSumSelect                                        = 1057\n\tErrWrongValueCount                                       = 1058\n\tErrTooLongIdent                                          = 1059\n\tErrDupFieldName                                          = 1060\n\tErrDupKeyName                                            = 1061\n\tErrDupEntry                                              = 1062\n\tErrWrongFieldSpec                                        = 1063\n\tErrParse                                                 = 1064\n\tErrEmptyQuery                                            = 1065\n\tErrNonuniqTable                                          = 1066\n\tErrInvalidDefault                                        = 1067\n\tErrMultiplePriKey                                        = 1068\n\tErrTooManyKeys                                           = 1069\n\tErrTooManyKeyParts                                       = 1070\n\tErrTooLongKey                                            = 1071\n\tErrKeyColumnDoesNotExits                                 = 1072\n\tErrBlobUsedAsKey                                         = 1073\n\tErrTooBigFieldlength                                     = 1074\n\tErrWrongAutoKey                                          = 1075\n\tErrReady                                                 = 1076\n\tErrNormalShutdown                                        = 1077\n\tErrGotSignal                                             = 1078\n\tErrShutdownComplete                                      = 1079\n\tErrForcingClose                                          = 1080\n\tErrIpsock                                                = 1081\n\tErrNoSuchIndex                                           = 1082\n\tErrWrongFieldTerminators                                 = 1083\n\tErrBlobsAndNoTerminated                                  = 1084\n\tErrTextFileNotReadable                                   = 1085\n\tErrFileExists                                            = 1086\n\tErrLoadInfo                                              = 1087\n\tErrAlterInfo                                             = 1088\n\tErrWrongSubKey                                           = 1089\n\tErrCantRemoveAllFields                                   = 1090\n\tErrCantDropFieldOrKey                                    = 1091\n\tErrInsertInfo                                            = 1092\n\tErrUpdateTableUsed                                       = 1093\n\tErrNoSuchThread                                          = 1094\n\tErrKillDenied                                            = 1095\n\tErrNoTablesUsed                                          = 1096\n\tErrTooBigSet                                             = 1097\n\tErrNoUniqueLogFile                                       = 1098\n\tErrTableNotLockedForWrite                                = 1099\n\tErrTableNotLocked                                        = 1100\n\tErrBlobCantHaveDefault                                   = 1101\n\tErrWrongDBName                                           = 1102\n\tErrWrongTableName                                        = 1103\n\tErrTooBigSelect                                          = 1104\n\tErrUnknown                                               = 1105\n\tErrUnknownProcedure                                      = 1106\n\tErrWrongParamcountToProcedure                            = 1107\n\tErrWrongParametersToProcedure                            = 1108\n\tErrUnknownTable                                          = 1109\n\tErrFieldSpecifiedTwice                                   = 1110\n\tErrInvalidGroupFuncUse                                   = 1111\n\tErrUnsupportedExtension                                  = 1112\n\tErrTableMustHaveColumns                                  = 1113\n\tErrRecordFileFull                                        = 1114\n\tErrUnknownCharacterSet                                   = 1115\n\tErrTooManyTables                                         = 1116\n\tErrTooManyFields                                         = 1117\n\tErrTooBigRowsize                                         = 1118\n\tErrStackOverrun                                          = 1119\n\tErrWrongOuterJoin                                        = 1120\n\tErrNullColumnInIndex                                     = 1121\n\tErrCantFindUdf                                           = 1122\n\tErrCantInitializeUdf                                     = 1123\n\tErrUdfNoPaths                                            = 1124\n\tErrUdfExists                                             = 1125\n\tErrCantOpenLibrary                                       = 1126\n\tErrCantFindDlEntry                                       = 1127\n\tErrFunctionNotDefined                                    = 1128\n\tErrHostIsBlocked                                         = 1129\n\tErrHostNotPrivileged                                     = 1130\n\tErrPasswordAnonymousUser                                 = 1131\n\tErrPasswordNotAllowed                                    = 1132\n\tErrPasswordNoMatch                                       = 1133\n\tErrUpdateInfo                                            = 1134\n\tErrCantCreateThread                                      = 1135\n\tErrWrongValueCountOnRow                                  = 1136\n\tErrCantReopenTable                                       = 1137\n\tErrInvalidUseOfNull                                      = 1138\n\tErrRegexp                                                = 1139\n\tErrMixOfGroupFuncAndFields                               = 1140\n\tErrNonexistingGrant                                      = 1141\n\tErrTableaccessDenied                                     = 1142\n\tErrColumnaccessDenied                                    = 1143\n\tErrIllegalGrantForTable                                  = 1144\n\tErrGrantWrongHostOrUser                                  = 1145\n\tErrNoSuchTable                                           = 1146\n\tErrNonexistingTableGrant                                 = 1147\n\tErrNotAllowedCommand                                     = 1148\n\tErrSyntax                                                = 1149\n\tErrDelayedCantChangeLock                                 = 1150\n\tErrTooManyDelayedThreads                                 = 1151\n\tErrAbortingConnection                                    = 1152\n\tErrNetPacketTooLarge                                     = 1153\n\tErrNetReadErrorFromPipe                                  = 1154\n\tErrNetFcntl                                              = 1155\n\tErrNetPacketsOutOfOrder                                  = 1156\n\tErrNetUncompress                                         = 1157\n\tErrNetRead                                               = 1158\n\tErrNetReadInterrupted                                    = 1159\n\tErrNetErrorOnWrite                                       = 1160\n\tErrNetWriteInterrupted                                   = 1161\n\tErrTooLongString                                         = 1162\n\tErrTableCantHandleBlob                                   = 1163\n\tErrTableCantHandleAutoIncrement                          = 1164\n\tErrDelayedInsertTableLocked                              = 1165\n\tErrWrongColumnName                                       = 1166\n\tErrWrongKeyColumn                                        = 1167\n\tErrWrongMrgTable                                         = 1168\n\tErrDupUnique                                             = 1169\n\tErrBlobKeyWithoutLength                                  = 1170\n\tErrPrimaryCantHaveNull                                   = 1171\n\tErrTooManyRows                                           = 1172\n\tErrRequiresPrimaryKey                                    = 1173\n\tErrNoRaidCompiled                                        = 1174\n\tErrUpdateWithoutKeyInSafeMode                            = 1175\n\tErrKeyDoesNotExist                                       = 1176\n\tErrCheckNoSuchTable                                      = 1177\n\tErrCheckNotImplemented                                   = 1178\n\tErrCantDoThisDuringAnTransaction                         = 1179\n\tErrErrorDuringCommit                                     = 1180\n\tErrErrorDuringRollback                                   = 1181\n\tErrErrorDuringFlushLogs                                  = 1182\n\tErrErrorDuringCheckpoint                                 = 1183\n\tErrNewAbortingConnection                                 = 1184\n\tErrDumpNotImplemented                                    = 1185\n\tErrFlushMasterBinlogClosed                               = 1186\n\tErrIndexRebuild                                          = 1187\n\tErrMaster                                                = 1188\n\tErrMasterNetRead                                         = 1189\n\tErrMasterNetWrite                                        = 1190\n\tErrFtMatchingKeyNotFound                                 = 1191\n\tErrLockOrActiveTransaction                               = 1192\n\tErrUnknownSystemVariable                                 = 1193\n\tErrCrashedOnUsage                                        = 1194\n\tErrCrashedOnRepair                                       = 1195\n\tErrWarningNotCompleteRollback                            = 1196\n\tErrTransCacheFull                                        = 1197\n\tErrSlaveMustStop                                         = 1198\n\tErrSlaveNotRunning                                       = 1199\n\tErrBadSlave                                              = 1200\n\tErrMasterInfo                                            = 1201\n\tErrSlaveThread                                           = 1202\n\tErrTooManyUserConnections                                = 1203\n\tErrSetConstantsOnly                                      = 1204\n\tErrLockWaitTimeout                                       = 1205\n\tErrLockTableFull                                         = 1206\n\tErrReadOnlyTransaction                                   = 1207\n\tErrDropDBWithReadLock                                    = 1208\n\tErrCreateDBWithReadLock                                  = 1209\n\tErrWrongArguments                                        = 1210\n\tErrNoPermissionToCreateUser                              = 1211\n\tErrUnionTablesInDifferentDir                             = 1212\n\tErrLockDeadlock                                          = 1213\n\tErrTableCantHandleFt                                     = 1214\n\tErrCannotAddForeign                                      = 1215\n\tErrNoReferencedRow                                       = 1216\n\tErrRowIsReferenced                                       = 1217\n\tErrConnectToMaster                                       = 1218\n\tErrQueryOnMaster                                         = 1219\n\tErrErrorWhenExecutingCommand                             = 1220\n\tErrWrongUsage                                            = 1221\n\tErrWrongNumberOfColumnsInSelect                          = 1222\n\tErrCantUpdateWithReadlock                                = 1223\n\tErrMixingNotAllowed                                      = 1224\n\tErrDupArgument                                           = 1225\n\tErrUserLimitReached                                      = 1226\n\tErrSpecificAccessDenied                                  = 1227\n\tErrLocalVariable                                         = 1228\n\tErrGlobalVariable                                        = 1229\n\tErrNoDefault                                             = 1230\n\tErrWrongValueForVar                                      = 1231\n\tErrWrongTypeForVar                                       = 1232\n\tErrVarCantBeRead                                         = 1233\n\tErrCantUseOptionHere                                     = 1234\n\tErrNotSupportedYet                                       = 1235\n\tErrMasterFatalErrorReadingBinlog                         = 1236\n\tErrSlaveIgnoredTable                                     = 1237\n\tErrIncorrectGlobalLocalVar                               = 1238\n\tErrWrongFkDef                                            = 1239\n\tErrKeyRefDoNotMatchTableRef                              = 1240\n\tErrOperandColumns                                        = 1241\n\tErrSubqueryNo1Row                                        = 1242\n\tErrUnknownStmtHandler                                    = 1243\n\tErrCorruptHelpDB                                         = 1244\n\tErrCyclicReference                                       = 1245\n\tErrAutoConvert                                           = 1246\n\tErrIllegalReference                                      = 1247\n\tErrDerivedMustHaveAlias                                  = 1248\n\tErrSelectReduced                                         = 1249\n\tErrTablenameNotAllowedHere                               = 1250\n\tErrNotSupportedAuthMode                                  = 1251\n\tErrSpatialCantHaveNull                                   = 1252\n\tErrCollationCharsetMismatch                              = 1253\n\tErrSlaveWasRunning                                       = 1254\n\tErrSlaveWasNotRunning                                    = 1255\n\tErrTooBigForUncompress                                   = 1256\n\tErrZlibZMem                                              = 1257\n\tErrZlibZBuf                                              = 1258\n\tErrZlibZData                                             = 1259\n\tErrCutValueGroupConcat                                   = 1260\n\tErrWarnTooFewRecords                                     = 1261\n\tErrWarnTooManyRecords                                    = 1262\n\tErrWarnNullToNotnull                                     = 1263\n\tErrWarnDataOutOfRange                                    = 1264\n\tWarnDataTruncated                                        = 1265\n\tErrWarnUsingOtherHandler                                 = 1266\n\tErrCantAggregate2collations                              = 1267\n\tErrDropUser                                              = 1268\n\tErrRevokeGrants                                          = 1269\n\tErrCantAggregate3collations                              = 1270\n\tErrCantAggregateNcollations                              = 1271\n\tErrVariableIsNotStruct                                   = 1272\n\tErrUnknownCollation                                      = 1273\n\tErrSlaveIgnoredSslParams                                 = 1274\n\tErrServerIsInSecureAuthMode                              = 1275\n\tErrWarnFieldResolved                                     = 1276\n\tErrBadSlaveUntilCond                                     = 1277\n\tErrMissingSkipSlave                                      = 1278\n\tErrUntilCondIgnored                                      = 1279\n\tErrWrongNameForIndex                                     = 1280\n\tErrWrongNameForCatalog                                   = 1281\n\tErrWarnQcResize                                          = 1282\n\tErrBadFtColumn                                           = 1283\n\tErrUnknownKeyCache                                       = 1284\n\tErrWarnHostnameWontWork                                  = 1285\n\tErrUnknownStorageEngine                                  = 1286\n\tErrWarnDeprecatedSyntax                                  = 1287\n\tErrNonUpdatableTable                                     = 1288\n\tErrFeatureDisabled                                       = 1289\n\tErrOptionPreventsStatement                               = 1290\n\tErrDuplicatedValueInType                                 = 1291\n\tErrTruncatedWrongValue                                   = 1292\n\tErrTooMuchAutoTimestampCols                              = 1293\n\tErrInvalidOnUpdate                                       = 1294\n\tErrUnsupportedPs                                         = 1295\n\tErrGetErrmsg                                             = 1296\n\tErrGetTemporaryErrmsg                                    = 1297\n\tErrUnknownTimeZone                                       = 1298\n\tErrWarnInvalidTimestamp                                  = 1299\n\tErrInvalidCharacterString                                = 1300\n\tErrWarnAllowedPacketOverflowed                           = 1301\n\tErrConflictingDeclarations                               = 1302\n\tErrSpNoRecursiveCreate                                   = 1303\n\tErrSpAlreadyExists                                       = 1304\n\tErrSpDoesNotExist                                        = 1305\n\tErrSpDropFailed                                          = 1306\n\tErrSpStoreFailed                                         = 1307\n\tErrSpLilabelMismatch                                     = 1308\n\tErrSpLabelRedefine                                       = 1309\n\tErrSpLabelMismatch                                       = 1310\n\tErrSpUninitVar                                           = 1311\n\tErrSpBadselect                                           = 1312\n\tErrSpBadreturn                                           = 1313\n\tErrSpBadstatement                                        = 1314\n\tErrUpdateLogDeprecatedIgnored                            = 1315\n\tErrUpdateLogDeprecatedTranslated                         = 1316\n\tErrQueryInterrupted                                      = 1317\n\tErrSpWrongNoOfArgs                                       = 1318\n\tErrSpCondMismatch                                        = 1319\n\tErrSpNoreturn                                            = 1320\n\tErrSpNoreturnend                                         = 1321\n\tErrSpBadCursorQuery                                      = 1322\n\tErrSpBadCursorSelect                                     = 1323\n\tErrSpCursorMismatch                                      = 1324\n\tErrSpCursorAlreadyOpen                                   = 1325\n\tErrSpCursorNotOpen                                       = 1326\n\tErrSpUndeclaredVar                                       = 1327\n\tErrSpWrongNoOfFetchArgs                                  = 1328\n\tErrSpFetchNoData                                         = 1329\n\tErrSpDupParam                                            = 1330\n\tErrSpDupVar                                              = 1331\n\tErrSpDupCond                                             = 1332\n\tErrSpDupCurs                                             = 1333\n\tErrSpCantAlter                                           = 1334\n\tErrSpSubselectNyi                                        = 1335\n\tErrStmtNotAllowedInSfOrTrg                               = 1336\n\tErrSpVarcondAfterCurshndlr                               = 1337\n\tErrSpCursorAfterHandler                                  = 1338\n\tErrSpCaseNotFound                                        = 1339\n\tErrFparserTooBigFile                                     = 1340\n\tErrFparserBadHeader                                      = 1341\n\tErrFparserEOFInComment                                   = 1342\n\tErrFparserErrorInParameter                               = 1343\n\tErrFparserEOFInUnknownParameter                          = 1344\n\tErrViewNoExplain                                         = 1345\n\tErrFrmUnknownType                                        = 1346\n\tErrWrongObject                                           = 1347\n\tErrNonupdateableColumn                                   = 1348\n\tErrViewSelectDerived                                     = 1349\n\tErrViewSelectClause                                      = 1350\n\tErrViewSelectVariable                                    = 1351\n\tErrViewSelectTmptable                                    = 1352\n\tErrViewWrongList                                         = 1353\n\tErrWarnViewMerge                                         = 1354\n\tErrWarnViewWithoutKey                                    = 1355\n\tErrViewInvalid                                           = 1356\n\tErrSpNoDropSp                                            = 1357\n\tErrSpGotoInHndlr                                         = 1358\n\tErrTrgAlreadyExists                                      = 1359\n\tErrTrgDoesNotExist                                       = 1360\n\tErrTrgOnViewOrTempTable                                  = 1361\n\tErrTrgCantChangeRow                                      = 1362\n\tErrTrgNoSuchRowInTrg                                     = 1363\n\tErrNoDefaultForField                                     = 1364\n\tErrDivisionByZero                                        = 1365\n\tErrTruncatedWrongValueForField                           = 1366\n\tErrIllegalValueForType                                   = 1367\n\tErrViewNonupdCheck                                       = 1368\n\tErrViewCheckFailed                                       = 1369\n\tErrProcaccessDenied                                      = 1370\n\tErrRelayLogFail                                          = 1371\n\tErrPasswdLength                                          = 1372\n\tErrUnknownTargetBinlog                                   = 1373\n\tErrIoErrLogIndexRead                                     = 1374\n\tErrBinlogPurgeProhibited                                 = 1375\n\tErrFseekFail                                             = 1376\n\tErrBinlogPurgeFatalErr                                   = 1377\n\tErrLogInUse                                              = 1378\n\tErrLogPurgeUnknownErr                                    = 1379\n\tErrRelayLogInit                                          = 1380\n\tErrNoBinaryLogging                                       = 1381\n\tErrReservedSyntax                                        = 1382\n\tErrWsasFailed                                            = 1383\n\tErrDiffGroupsProc                                        = 1384\n\tErrNoGroupForProc                                        = 1385\n\tErrOrderWithProc                                         = 1386\n\tErrLoggingProhibitChangingOf                             = 1387\n\tErrNoFileMapping                                         = 1388\n\tErrWrongMagic                                            = 1389\n\tErrPsManyParam                                           = 1390\n\tErrKeyPart0                                              = 1391\n\tErrViewChecksum                                          = 1392\n\tErrViewMultiupdate                                       = 1393\n\tErrViewNoInsertFieldList                                 = 1394\n\tErrViewDeleteMergeView                                   = 1395\n\tErrCannotUser                                            = 1396\n\tErrXaerNota                                              = 1397\n\tErrXaerInval                                             = 1398\n\tErrXaerRmfail                                            = 1399\n\tErrXaerOutside                                           = 1400\n\tErrXaerRmerr                                             = 1401\n\tErrXaRbrollback                                          = 1402\n\tErrNonexistingProcGrant                                  = 1403\n\tErrProcAutoGrantFail                                     = 1404\n\tErrProcAutoRevokeFail                                    = 1405\n\tErrDataTooLong                                           = 1406\n\tErrSpBadSQLstate                                         = 1407\n\tErrStartup                                               = 1408\n\tErrLoadFromFixedSizeRowsToVar                            = 1409\n\tErrCantCreateUserWithGrant                               = 1410\n\tErrWrongValueForType                                     = 1411\n\tErrTableDefChanged                                       = 1412\n\tErrSpDupHandler                                          = 1413\n\tErrSpNotVarArg                                           = 1414\n\tErrSpNoRetset                                            = 1415\n\tErrCantCreateGeometryObject                              = 1416\n\tErrFailedRoutineBreakBinlog                              = 1417\n\tErrBinlogUnsafeRoutine                                   = 1418\n\tErrBinlogCreateRoutineNeedSuper                          = 1419\n\tErrExecStmtWithOpenCursor                                = 1420\n\tErrStmtHasNoOpenCursor                                   = 1421\n\tErrCommitNotAllowedInSfOrTrg                             = 1422\n\tErrNoDefaultForViewField                                 = 1423\n\tErrSpNoRecursion                                         = 1424\n\tErrTooBigScale                                           = 1425\n\tErrTooBigPrecision                                       = 1426\n\tErrMBiggerThanD                                          = 1427\n\tErrWrongLockOfSystemTable                                = 1428\n\tErrConnectToForeignDataSource                            = 1429\n\tErrQueryOnForeignDataSource                              = 1430\n\tErrForeignDataSourceDoesntExist                          = 1431\n\tErrForeignDataStringInvalidCantCreate                    = 1432\n\tErrForeignDataStringInvalid                              = 1433\n\tErrCantCreateFederatedTable                              = 1434\n\tErrTrgInWrongSchema                                      = 1435\n\tErrStackOverrunNeedMore                                  = 1436\n\tErrTooLongBody                                           = 1437\n\tErrWarnCantDropDefaultKeycache                           = 1438\n\tErrTooBigDisplaywidth                                    = 1439\n\tErrXaerDupid                                             = 1440\n\tErrDatetimeFunctionOverflow                              = 1441\n\tErrCantUpdateUsedTableInSfOrTrg                          = 1442\n\tErrViewPreventUpdate                                     = 1443\n\tErrPsNoRecursion                                         = 1444\n\tErrSpCantSetAutocommit                                   = 1445\n\tErrMalformedDefiner                                      = 1446\n\tErrViewFrmNoUser                                         = 1447\n\tErrViewOtherUser                                         = 1448\n\tErrNoSuchUser                                            = 1449\n\tErrForbidSchemaChange                                    = 1450\n\tErrRowIsReferenced2                                      = 1451\n\tErrNoReferencedRow2                                      = 1452\n\tErrSpBadVarShadow                                        = 1453\n\tErrTrgNoDefiner                                          = 1454\n\tErrOldFileFormat                                         = 1455\n\tErrSpRecursionLimit                                      = 1456\n\tErrSpProcTableCorrupt                                    = 1457\n\tErrSpWrongName                                           = 1458\n\tErrTableNeedsUpgrade                                     = 1459\n\tErrSpNoAggregate                                         = 1460\n\tErrMaxPreparedStmtCountReached                           = 1461\n\tErrViewRecursive                                         = 1462\n\tErrNonGroupingFieldUsed                                  = 1463\n\tErrTableCantHandleSpkeys                                 = 1464\n\tErrNoTriggersOnSystemSchema                              = 1465\n\tErrRemovedSpaces                                         = 1466\n\tErrAutoincReadFailed                                     = 1467\n\tErrUsername                                              = 1468\n\tErrHostname                                              = 1469\n\tErrWrongStringLength                                     = 1470\n\tErrNonInsertableTable                                    = 1471\n\tErrAdminWrongMrgTable                                    = 1472\n\tErrTooHighLevelOfNestingForSelect                        = 1473\n\tErrNameBecomesEmpty                                      = 1474\n\tErrAmbiguousFieldTerm                                    = 1475\n\tErrForeignServerExists                                   = 1476\n\tErrForeignServerDoesntExist                              = 1477\n\tErrIllegalHaCreateOption                                 = 1478\n\tErrPartitionRequiresValues                               = 1479\n\tErrPartitionWrongValues                                  = 1480\n\tErrPartitionMaxvalue                                     = 1481\n\tErrPartitionSubpartition                                 = 1482\n\tErrPartitionSubpartMix                                   = 1483\n\tErrPartitionWrongNoPart                                  = 1484\n\tErrPartitionWrongNoSubpart                               = 1485\n\tErrWrongExprInPartitionFunc                              = 1486\n\tErrNoConstExprInRangeOrList                              = 1487\n\tErrFieldNotFoundPart                                     = 1488\n\tErrListOfFieldsOnlyInHash                                = 1489\n\tErrInconsistentPartitionInfo                             = 1490\n\tErrPartitionFuncNotAllowed                               = 1491\n\tErrPartitionsMustBeDefined                               = 1492\n\tErrRangeNotIncreasing                                    = 1493\n\tErrInconsistentTypeOfFunctions                           = 1494\n\tErrMultipleDefConstInListPart                            = 1495\n\tErrPartitionEntry                                        = 1496\n\tErrMixHandler                                            = 1497\n\tErrPartitionNotDefined                                   = 1498\n\tErrTooManyPartitions                                     = 1499\n\tErrSubpartition                                          = 1500\n\tErrCantCreateHandlerFile                                 = 1501\n\tErrBlobFieldInPartFunc                                   = 1502\n\tErrUniqueKeyNeedAllFieldsInPf                            = 1503\n\tErrNoParts                                               = 1504\n\tErrPartitionMgmtOnNonpartitioned                         = 1505\n\tErrForeignKeyOnPartitioned                               = 1506\n\tErrDropPartitionNonExistent                              = 1507\n\tErrDropLastPartition                                     = 1508\n\tErrCoalesceOnlyOnHashPartition                           = 1509\n\tErrReorgHashOnlyOnSameNo                                 = 1510\n\tErrReorgNoParam                                          = 1511\n\tErrOnlyOnRangeListPartition                              = 1512\n\tErrAddPartitionSubpart                                   = 1513\n\tErrAddPartitionNoNewPartition                            = 1514\n\tErrCoalescePartitionNoPartition                          = 1515\n\tErrReorgPartitionNotExist                                = 1516\n\tErrSameNamePartition                                     = 1517\n\tErrNoBinlog                                              = 1518\n\tErrConsecutiveReorgPartitions                            = 1519\n\tErrReorgOutsideRange                                     = 1520\n\tErrPartitionFunctionFailure                              = 1521\n\tErrPartState                                             = 1522\n\tErrLimitedPartRange                                      = 1523\n\tErrPluginIsNotLoaded                                     = 1524\n\tErrWrongValue                                            = 1525\n\tErrNoPartitionForGivenValue                              = 1526\n\tErrFilegroupOptionOnlyOnce                               = 1527\n\tErrCreateFilegroupFailed                                 = 1528\n\tErrDropFilegroupFailed                                   = 1529\n\tErrTablespaceAutoExtend                                  = 1530\n\tErrWrongSizeNumber                                       = 1531\n\tErrSizeOverflow                                          = 1532\n\tErrAlterFilegroupFailed                                  = 1533\n\tErrBinlogRowLoggingFailed                                = 1534\n\tErrBinlogRowWrongTableDef                                = 1535\n\tErrBinlogRowRbrToSbr                                     = 1536\n\tErrEventAlreadyExists                                    = 1537\n\tErrEventStoreFailed                                      = 1538\n\tErrEventDoesNotExist                                     = 1539\n\tErrEventCantAlter                                        = 1540\n\tErrEventDropFailed                                       = 1541\n\tErrEventIntervalNotPositiveOrTooBig                      = 1542\n\tErrEventEndsBeforeStarts                                 = 1543\n\tErrEventExecTimeInThePast                                = 1544\n\tErrEventOpenTableFailed                                  = 1545\n\tErrEventNeitherMExprNorMAt                               = 1546\n\tErrObsoleteColCountDoesntMatchCorrupted                  = 1547\n\tErrObsoleteCannotLoadFromTable                           = 1548\n\tErrEventCannotDelete                                     = 1549\n\tErrEventCompile                                          = 1550\n\tErrEventSameName                                         = 1551\n\tErrEventDataTooLong                                      = 1552\n\tErrDropIndexNeededInForeignKey                           = 1553\n\tErrWarnDeprecatedSyntaxWithVer                           = 1554\n\tErrCantWriteLockLogTable                                 = 1555\n\tErrCantLockLogTable                                      = 1556\n\tErrForeignDuplicateKeyOldUnused                          = 1557\n\tErrColCountDoesntMatchPleaseUpdate                       = 1558\n\tErrTempTablePreventsSwitchOutOfRbr                       = 1559\n\tErrStoredFunctionPreventsSwitchBinlogFormat              = 1560\n\tErrNdbCantSwitchBinlogFormat                             = 1561\n\tErrPartitionNoTemporary                                  = 1562\n\tErrPartitionConstDomain                                  = 1563\n\tErrPartitionFunctionIsNotAllowed                         = 1564\n\tErrDdlLog                                                = 1565\n\tErrNullInValuesLessThan                                  = 1566\n\tErrWrongPartitionName                                    = 1567\n\tErrCantChangeTxCharacteristics                           = 1568\n\tErrDupEntryAutoincrementCase                             = 1569\n\tErrEventModifyQueue                                      = 1570\n\tErrEventSetVar                                           = 1571\n\tErrPartitionMerge                                        = 1572\n\tErrCantActivateLog                                       = 1573\n\tErrRbrNotAvailable                                       = 1574\n\tErrBase64Decode                                          = 1575\n\tErrEventRecursionForbidden                               = 1576\n\tErrEventsDB                                              = 1577\n\tErrOnlyIntegersAllowed                                   = 1578\n\tErrUnsuportedLogEngine                                   = 1579\n\tErrBadLogStatement                                       = 1580\n\tErrCantRenameLogTable                                    = 1581\n\tErrWrongParamcountToNativeFct                            = 1582\n\tErrWrongParametersToNativeFct                            = 1583\n\tErrWrongParametersToStoredFct                            = 1584\n\tErrNativeFctNameCollision                                = 1585\n\tErrDupEntryWithKeyName                                   = 1586\n\tErrBinlogPurgeEmFile                                     = 1587\n\tErrEventCannotCreateInThePast                            = 1588\n\tErrEventCannotAlterInThePast                             = 1589\n\tErrSlaveIncident                                         = 1590\n\tErrNoPartitionForGivenValueSilent                        = 1591\n\tErrBinlogUnsafeStatement                                 = 1592\n\tErrSlaveFatal                                            = 1593\n\tErrSlaveRelayLogReadFailure                              = 1594\n\tErrSlaveRelayLogWriteFailure                             = 1595\n\tErrSlaveCreateEventFailure                               = 1596\n\tErrSlaveMasterComFailure                                 = 1597\n\tErrBinlogLoggingImpossible                               = 1598\n\tErrViewNoCreationCtx                                     = 1599\n\tErrViewInvalidCreationCtx                                = 1600\n\tErrSrInvalidCreationCtx                                  = 1601\n\tErrTrgCorruptedFile                                      = 1602\n\tErrTrgNoCreationCtx                                      = 1603\n\tErrTrgInvalidCreationCtx                                 = 1604\n\tErrEventInvalidCreationCtx                               = 1605\n\tErrTrgCantOpenTable                                      = 1606\n\tErrCantCreateSroutine                                    = 1607\n\tErrNeverUsed                                             = 1608\n\tErrNoFormatDescriptionEventBeforeBinlogStatement         = 1609\n\tErrSlaveCorruptEvent                                     = 1610\n\tErrLoadDataInvalidColumn                                 = 1611\n\tErrLogPurgeNoFile                                        = 1612\n\tErrXaRbtimeout                                           = 1613\n\tErrXaRbdeadlock                                          = 1614\n\tErrNeedReprepare                                         = 1615\n\tErrDelayedNotSupported                                   = 1616\n\tWarnNoMasterInfo                                         = 1617\n\tWarnOptionIgnored                                        = 1618\n\tWarnPluginDeleteBuiltin                                  = 1619\n\tWarnPluginBusy                                           = 1620\n\tErrVariableIsReadonly                                    = 1621\n\tErrWarnEngineTransactionRollback                         = 1622\n\tErrSlaveHeartbeatFailure                                 = 1623\n\tErrSlaveHeartbeatValueOutOfRange                         = 1624\n\tErrNdbReplicationSchema                                  = 1625\n\tErrConflictFnParse                                       = 1626\n\tErrExceptionsWrite                                       = 1627\n\tErrTooLongTableComment                                   = 1628\n\tErrTooLongFieldComment                                   = 1629\n\tErrFuncInexistentNameCollision                           = 1630\n\tErrDatabaseName                                          = 1631\n\tErrTableName                                             = 1632\n\tErrPartitionName                                         = 1633\n\tErrSubpartitionName                                      = 1634\n\tErrTemporaryName                                         = 1635\n\tErrRenamedName                                           = 1636\n\tErrTooManyConcurrentTrxs                                 = 1637\n\tWarnNonASCIISeparatorNotImplemented                      = 1638\n\tErrDebugSyncTimeout                                      = 1639\n\tErrDebugSyncHitLimit                                     = 1640\n\tErrDupSignalSet                                          = 1641\n\tErrSignalWarn                                            = 1642\n\tErrSignalNotFound                                        = 1643\n\tErrSignalException                                       = 1644\n\tErrResignalWithoutActiveHandler                          = 1645\n\tErrSignalBadConditionType                                = 1646\n\tWarnCondItemTruncated                                    = 1647\n\tErrCondItemTooLong                                       = 1648\n\tErrUnknownLocale                                         = 1649\n\tErrSlaveIgnoreServerIDs                                  = 1650\n\tErrQueryCacheDisabled                                    = 1651\n\tErrSameNamePartitionField                                = 1652\n\tErrPartitionColumnList                                   = 1653\n\tErrWrongTypeColumnValue                                  = 1654\n\tErrTooManyPartitionFuncFields                            = 1655\n\tErrMaxvalueInValuesIn                                    = 1656\n\tErrTooManyValues                                         = 1657\n\tErrRowSinglePartitionField                               = 1658\n\tErrFieldTypeNotAllowedAsPartitionField                   = 1659\n\tErrPartitionFieldsTooLong                                = 1660\n\tErrBinlogRowEngineAndStmtEngine                          = 1661\n\tErrBinlogRowModeAndStmtEngine                            = 1662\n\tErrBinlogUnsafeAndStmtEngine                             = 1663\n\tErrBinlogRowInjectionAndStmtEngine                       = 1664\n\tErrBinlogStmtModeAndRowEngine                            = 1665\n\tErrBinlogRowInjectionAndStmtMode                         = 1666\n\tErrBinlogMultipleEnginesAndSelfLoggingEngine             = 1667\n\tErrBinlogUnsafeLimit                                     = 1668\n\tErrBinlogUnsafeInsertDelayed                             = 1669\n\tErrBinlogUnsafeSystemTable                               = 1670\n\tErrBinlogUnsafeAutoincColumns                            = 1671\n\tErrBinlogUnsafeUdf                                       = 1672\n\tErrBinlogUnsafeSystemVariable                            = 1673\n\tErrBinlogUnsafeSystemFunction                            = 1674\n\tErrBinlogUnsafeNontransAfterTrans                        = 1675\n\tErrMessageAndStatement                                   = 1676\n\tErrSlaveConversionFailed                                 = 1677\n\tErrSlaveCantCreateConversion                             = 1678\n\tErrInsideTransactionPreventsSwitchBinlogFormat           = 1679\n\tErrPathLength                                            = 1680\n\tErrWarnDeprecatedSyntaxNoReplacement                     = 1681\n\tErrWrongNativeTableStructure                             = 1682\n\tErrWrongPerfSchemaUsage                                  = 1683\n\tErrWarnISSkippedTable                                    = 1684\n\tErrInsideTransactionPreventsSwitchBinlogDirect           = 1685\n\tErrStoredFunctionPreventsSwitchBinlogDirect              = 1686\n\tErrSpatialMustHaveGeomCol                                = 1687\n\tErrTooLongIndexComment                                   = 1688\n\tErrLockAborted                                           = 1689\n\tErrDataOutOfRange                                        = 1690\n\tErrWrongSpvarTypeInLimit                                 = 1691\n\tErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine       = 1692\n\tErrBinlogUnsafeMixedStatement                            = 1693\n\tErrInsideTransactionPreventsSwitchSQLLogBin              = 1694\n\tErrStoredFunctionPreventsSwitchSQLLogBin                 = 1695\n\tErrFailedReadFromParFile                                 = 1696\n\tErrValuesIsNotIntType                                    = 1697\n\tErrAccessDeniedNoPassword                                = 1698\n\tErrSetPasswordAuthPlugin                                 = 1699\n\tErrGrantPluginUserExists                                 = 1700\n\tErrTruncateIllegalForeignKey                             = 1701\n\tErrPluginIsPermanent                                     = 1702\n\tErrSlaveHeartbeatValueOutOfRangeMin                      = 1703\n\tErrSlaveHeartbeatValueOutOfRangeMax                      = 1704\n\tErrStmtCacheFull                                         = 1705\n\tErrMultiUpdateKeyConflict                                = 1706\n\tErrTableNeedsRebuild                                     = 1707\n\tWarnOptionBelowLimit                                     = 1708\n\tErrIndexColumnTooLong                                    = 1709\n\tErrErrorInTriggerBody                                    = 1710\n\tErrErrorInUnknownTriggerBody                             = 1711\n\tErrIndexCorrupt                                          = 1712\n\tErrUndoRecordTooBig                                      = 1713\n\tErrBinlogUnsafeInsertIgnoreSelect                        = 1714\n\tErrBinlogUnsafeInsertSelectUpdate                        = 1715\n\tErrBinlogUnsafeReplaceSelect                             = 1716\n\tErrBinlogUnsafeCreateIgnoreSelect                        = 1717\n\tErrBinlogUnsafeCreateReplaceSelect                       = 1718\n\tErrBinlogUnsafeUpdateIgnore                              = 1719\n\tErrPluginNoUninstall                                     = 1720\n\tErrPluginNoInstall                                       = 1721\n\tErrBinlogUnsafeWriteAutoincSelect                        = 1722\n\tErrBinlogUnsafeCreateSelectAutoinc                       = 1723\n\tErrBinlogUnsafeInsertTwoKeys                             = 1724\n\tErrTableInFkCheck                                        = 1725\n\tErrUnsupportedEngine                                     = 1726\n\tErrBinlogUnsafeAutoincNotFirst                           = 1727\n\tErrCannotLoadFromTableV2                                 = 1728\n\tErrMasterDelayValueOutOfRange                            = 1729\n\tErrOnlyFdAndRbrEventsAllowedInBinlogStatement            = 1730\n\tErrPartitionExchangeDifferentOption                      = 1731\n\tErrPartitionExchangePartTable                            = 1732\n\tErrPartitionExchangeTempTable                            = 1733\n\tErrPartitionInsteadOfSubpartition                        = 1734\n\tErrUnknownPartition                                      = 1735\n\tErrTablesDifferentMetadata                               = 1736\n\tErrRowDoesNotMatchPartition                              = 1737\n\tErrBinlogCacheSizeGreaterThanMax                         = 1738\n\tErrWarnIndexNotApplicable                                = 1739\n\tErrPartitionExchangeForeignKey                           = 1740\n\tErrNoSuchKeyValue                                        = 1741\n\tErrRplInfoDataTooLong                                    = 1742\n\tErrNetworkReadEventChecksumFailure                       = 1743\n\tErrBinlogReadEventChecksumFailure                        = 1744\n\tErrBinlogStmtCacheSizeGreaterThanMax                     = 1745\n\tErrCantUpdateTableInCreateTableSelect                    = 1746\n\tErrPartitionClauseOnNonpartitioned                       = 1747\n\tErrRowDoesNotMatchGivenPartitionSet                      = 1748\n\tErrNoSuchPartitionunused                                 = 1749\n\tErrChangeRplInfoRepositoryFailure                        = 1750\n\tErrWarningNotCompleteRollbackWithCreatedTempTable        = 1751\n\tErrWarningNotCompleteRollbackWithDroppedTempTable        = 1752\n\tErrMtsFeatureIsNotSupported                              = 1753\n\tErrMtsUpdatedDBsGreaterMax                               = 1754\n\tErrMtsCantParallel                                       = 1755\n\tErrMtsInconsistentData                                   = 1756\n\tErrFulltextNotSupportedWithPartitioning                  = 1757\n\tErrDaInvalidConditionNumber                              = 1758\n\tErrInsecurePlainText                                     = 1759\n\tErrInsecureChangeMaster                                  = 1760\n\tErrForeignDuplicateKeyWithChildInfo                      = 1761\n\tErrForeignDuplicateKeyWithoutChildInfo                   = 1762\n\tErrSQLthreadWithSecureSlave                              = 1763\n\tErrTableHasNoFt                                          = 1764\n\tErrVariableNotSettableInSfOrTrigger                      = 1765\n\tErrVariableNotSettableInTransaction                      = 1766\n\tErrGtidNextIsNotInGtidNextList                           = 1767\n\tErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull = 1768\n\tErrSetStatementCannotInvokeFunction                      = 1769\n\tErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull        = 1770\n\tErrSkippingLoggedTransaction                             = 1771\n\tErrMalformedGtidSetSpecification                         = 1772\n\tErrMalformedGtidSetEncoding                              = 1773\n\tErrMalformedGtidSpecification                            = 1774\n\tErrGnoExhausted                                          = 1775\n\tErrBadSlaveAutoPosition                                  = 1776\n\tErrAutoPositionRequiresGtidModeOn                        = 1777\n\tErrCantDoImplicitCommitInTrxWhenGtidNextIsSet            = 1778\n\tErrGtidMode2Or3RequiresEnforceGtidConsistencyOn          = 1779\n\tErrGtidModeRequiresBinlog                                = 1780\n\tErrCantSetGtidNextToGtidWhenGtidModeIsOff                = 1781\n\tErrCantSetGtidNextToAnonymousWhenGtidModeIsOn            = 1782\n\tErrCantSetGtidNextListToNonNullWhenGtidModeIsOff         = 1783\n\tErrFoundGtidEventWhenGtidModeIsOff                       = 1784\n\tErrGtidUnsafeNonTransactionalTable                       = 1785\n\tErrGtidUnsafeCreateSelect                                = 1786\n\tErrGtidUnsafeCreateDropTemporaryTableInTransaction       = 1787\n\tErrGtidModeCanOnlyChangeOneStepAtATime                   = 1788\n\tErrMasterHasPurgedRequiredGtids                          = 1789\n\tErrCantSetGtidNextWhenOwningGtid                         = 1790\n\tErrUnknownExplainFormat                                  = 1791\n\tErrCantExecuteInReadOnlyTransaction                      = 1792\n\tErrTooLongTablePartitionComment                          = 1793\n\tErrSlaveConfiguration                                    = 1794\n\tErrInnodbFtLimit                                         = 1795\n\tErrInnodbNoFtTempTable                                   = 1796\n\tErrInnodbFtWrongDocidColumn                              = 1797\n\tErrInnodbFtWrongDocidIndex                               = 1798\n\tErrInnodbOnlineLogTooBig                                 = 1799\n\tErrUnknownAlterAlgorithm                                 = 1800\n\tErrUnknownAlterLock                                      = 1801\n\tErrMtsChangeMasterCantRunWithGaps                        = 1802\n\tErrMtsRecoveryFailure                                    = 1803\n\tErrMtsResetWorkers                                       = 1804\n\tErrColCountDoesntMatchCorruptedV2                        = 1805\n\tErrSlaveSilentRetryTransaction                           = 1806\n\tErrDiscardFkChecksRunning                                = 1807\n\tErrTableSchemaMismatch                                   = 1808\n\tErrTableInSystemTablespace                               = 1809\n\tErrIoRead                                                = 1810\n\tErrIoWrite                                               = 1811\n\tErrTablespaceMissing                                     = 1812\n\tErrTablespaceExists                                      = 1813\n\tErrTablespaceDiscarded                                   = 1814\n\tErrInternal                                              = 1815\n\tErrInnodbImport                                          = 1816\n\tErrInnodbIndexCorrupt                                    = 1817\n\tErrInvalidYearColumnLength                               = 1818\n\tErrNotValidPassword                                      = 1819\n\tErrMustChangePassword                                    = 1820\n\tErrFkNoIndexChild                                        = 1821\n\tErrForeignKeyNoIndexInParent                             = 1822\n\tErrFkFailAddSystem                                       = 1823\n\tErrForeignKeyCannotOpenParent                            = 1824\n\tErrFkIncorrectOption                                     = 1825\n\tErrFkDupName                                             = 1826\n\tErrPasswordFormat                                        = 1827\n\tErrFkColumnCannotDrop                                    = 1828\n\tErrFkColumnCannotDropChild                               = 1829\n\tErrForeignKeyColumnNotNull                               = 1830\n\tErrDupIndex                                              = 1831\n\tErrForeignKeyColumnCannotChange                          = 1832\n\tErrForeignKeyColumnCannotChangeChild                     = 1833\n\tErrFkCannotDeleteParent                                  = 1834\n\tErrMalformedPacket                                       = 1835\n\tErrReadOnlyMode                                          = 1836\n\tErrGtidNextTypeUndefinedGroup                            = 1837\n\tErrVariableNotSettableInSp                               = 1838\n\tErrCantSetGtidPurgedWhenGtidModeIsOff                    = 1839\n\tErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty           = 1840\n\tErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty             = 1841\n\tErrGtidPurgedWasChanged                                  = 1842\n\tErrGtidExecutedWasChanged                                = 1843\n\tErrBinlogStmtModeAndNoReplTables                         = 1844\n\tErrAlterOperationNotSupported                            = 1845\n\tErrAlterOperationNotSupportedReason                      = 1846\n\tErrAlterOperationNotSupportedReasonCopy                  = 1847\n\tErrAlterOperationNotSupportedReasonPartition             = 1848\n\tErrAlterOperationNotSupportedReasonFkRename              = 1849\n\tErrAlterOperationNotSupportedReasonColumnType            = 1850\n\tErrAlterOperationNotSupportedReasonFkCheck               = 1851\n\tErrAlterOperationNotSupportedReasonIgnore                = 1852\n\tErrAlterOperationNotSupportedReasonNopk                  = 1853\n\tErrAlterOperationNotSupportedReasonAutoinc               = 1854\n\tErrAlterOperationNotSupportedReasonHiddenFts             = 1855\n\tErrAlterOperationNotSupportedReasonChangeFts             = 1856\n\tErrAlterOperationNotSupportedReasonFts                   = 1857\n\tErrSQLSlaveSkipCounterNotSettableInGtidMode              = 1858\n\tErrDupUnknownInIndex                                     = 1859\n\tErrIdentCausesTooLongPath                                = 1860\n\tErrAlterOperationNotSupportedReasonNotNull               = 1861\n\tErrMustChangePasswordLogin                               = 1862\n\tErrRowInWrongPartition                                   = 1863\n\tErrErrorLast                                             = 1863\n\tErrInvalidFieldSize                                      = 3013\n\tErrPasswordExpireAnonymousUser                           = 3016\n\tErrMaxExecTimeExceeded                                   = 3024\n\tErrIncorrectType                                         = 3064\n\tErrInvalidJSONData                                       = 3069\n\tErrGeneratedColumnFunctionIsNotAllowed                   = 3102\n\tErrUnsupportedAlterInplaceOnVirtualColumn                = 3103\n\tErrWrongFKOptionForGeneratedColumn                       = 3104\n\tErrBadGeneratedColumn                                    = 3105\n\tErrUnsupportedOnGeneratedColumn                          = 3106\n\tErrGeneratedColumnNonPrior                               = 3107\n\tErrDependentByGeneratedColumn                            = 3108\n\tErrGeneratedColumnRefAutoInc                             = 3109\n\tErrInvalidJSONText                                       = 3140\n\tErrInvalidJSONTextInParam                                = 3141\n\tErrInvalidJSONPath                                       = 3143\n\tErrInvalidTypeForJSON                                    = 3146\n\tErrInvalidJSONPathWildcard                               = 3149\n\tErrInvalidJSONContainsPathType                           = 3150\n\tErrJSONUsedAsKey                                         = 3152\n\tErrJSONVacuousPath                                       = 3153\n\tErrJSONBadOneOrAllArg                                    = 3154\n\tErrJSONDocumentTooDeep                                   = 3157\n\tErrJSONDocumentNULLKey                                   = 3158\n\tErrBadUser                                               = 3162\n\tErrUserAlreadyExists                                     = 3163\n\tErrInvalidJSONPathArrayCell                              = 3165\n\tErrInvalidEncryptionOption                               = 3184\n\tErrRoleNotGranted                                        = 3530\n\tErrLockAcquireFailAndNoWaitSet                           = 3572\n\tErrWindowNoSuchWindow                                    = 3579\n\tErrWindowCircularityInWindowGraph                        = 3580\n\tErrWindowNoChildPartitioning                             = 3581\n\tErrWindowNoInherentFrame                                 = 3582\n\tErrWindowNoRedefineOrderBy                               = 3583\n\tErrWindowFrameStartIllegal                               = 3584\n\tErrWindowFrameEndIllegal                                 = 3585\n\tErrWindowFrameIllegal                                    = 3586\n\tErrWindowRangeFrameOrderType                             = 3587\n\tErrWindowRangeFrameTemporalType                          = 3588\n\tErrWindowRangeFrameNumericType                           = 3589\n\tErrWindowRangeBoundNotConstant                           = 3590\n\tErrWindowDuplicateName                                   = 3591\n\tErrWindowIllegalOrderBy                                  = 3592\n\tErrWindowInvalidWindowFuncUse                            = 3593\n\tErrWindowInvalidWindowFuncAliasUse                       = 3594\n\tErrWindowNestedWindowFuncUseInWindowSpec                 = 3595\n\tErrWindowRowsIntervalUse                                 = 3596\n\tErrWindowNoGroupOrderUnused                              = 3597\n\tErrWindowExplainJson                                     = 3598 //nolint: revive\n\tErrWindowFunctionIgnoresFrame                            = 3599\n\tErrDataTruncatedFunctionalIndex                          = 3751\n\tErrDataOutOfRangeFunctionalIndex                         = 3752\n\tErrFunctionalIndexOnJsonOrGeometryFunction               = 3753 //nolint: revive\n\tErrFunctionalIndexRefAutoIncrement                       = 3754\n\tErrCannotDropColumnFunctionalIndex                       = 3755\n\tErrFunctionalIndexPrimaryKey                             = 3756\n\tErrFunctionalIndexOnLob                                  = 3757\n\tErrFunctionalIndexFunctionIsNotAllowed                   = 3758\n\tErrFulltextFunctionalIndex                               = 3759\n\tErrSpatialFunctionalIndex                                = 3760\n\tErrWrongKeyColumnFunctionalIndex                         = 3761\n\tErrFunctionalIndexOnField                                = 3762\n\tErrFKIncompatibleColumns                                 = 3780\n\tErrFunctionalIndexRowValueIsNotAllowed                   = 3800\n\tErrDependentByFunctionalIndex                            = 3837\n\tErrInvalidJSONType                                       = 3853\n\tErrInvalidJsonValueForFuncIndex                          = 3903 //nolint: revive\n\tErrJsonValueOutOfRangeForFuncIndex                       = 3904 //nolint: revive\n\tErrFunctionalIndexDataIsTooLong                          = 3907\n\tErrFunctionalIndexNotApplicable                          = 3909\n\n\t// MariaDB errors.\n\tErrOnlyOneDefaultPartionAllowed         = 4030\n\tErrWrongPartitionTypeExpectedSystemTime = 4113\n\tErrSystemVersioningWrongPartitions      = 4128\n\tErrSequenceRunOut                       = 4135\n\tErrSequenceInvalidData                  = 4136\n\tErrSequenceAccessFail                   = 4137\n\tErrNotSequence                          = 4138\n\tErrUnknownSequence                      = 4139\n\tErrWrongInsertIntoSequence              = 4140\n\tErrSequenceInvalidTableStructure        = 4141\n\n\t// TiDB self-defined errors.\n\tErrWarnOptimizerHintUnsupportedHint = 8061\n\tErrWarnOptimizerHintInvalidToken    = 8062\n\tErrWarnMemoryQuotaOverflow          = 8063\n\tErrWarnOptimizerHintParseError      = 8064\n\tErrWarnOptimizerHintInvalidInteger  = 8065\n\tErrWarnOptimizerHintWrongPos        = 8066\n\n\t// Stop adding error code here!\n\t// They are moved to github.com/pingcap/tidb/pkg/errno\n)\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/errname.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\n// ErrMessage is a error message with the format specifier.\ntype ErrMessage struct {\n\tRaw          string\n\tRedactArgPos []int\n}\n\n// Message creates a error message with the format specifier.\nfunc Message(message string, redactArgs []int) *ErrMessage {\n\treturn &ErrMessage{Raw: message, RedactArgPos: redactArgs}\n}\n\n// MySQLErrName maps error code to MySQL error messages.\nvar MySQLErrName = map[uint16]*ErrMessage{\n\tErrHashchk:                                  Message(\"hashchk\", nil),\n\tErrNisamchk:                                 Message(\"isamchk\", nil),\n\tErrNo:                                       Message(\"NO\", nil),\n\tErrYes:                                      Message(\"YES\", nil),\n\tErrCantCreateFile:                           Message(\"Can't create file '%-.200s' (errno: %d - %s)\", nil),\n\tErrCantCreateTable:                          Message(\"Can't create table '%-.200s' (errno: %d)\", nil),\n\tErrCantCreateDB:                             Message(\"Can't create database '%-.192s' (errno: %d)\", nil),\n\tErrDBCreateExists:                           Message(\"Can't create database '%-.192s'; database exists\", nil),\n\tErrDBDropExists:                             Message(\"Can't drop database '%-.192s'; database doesn't exist\", nil),\n\tErrDBDropDelete:                             Message(\"Error dropping database (can't delete '%-.192s', errno: %d)\", nil),\n\tErrDBDropRmdir:                              Message(\"Error dropping database (can't rmdir '%-.192s', errno: %d)\", nil),\n\tErrCantDeleteFile:                           Message(\"Error on delete of '%-.192s' (errno: %d - %s)\", nil),\n\tErrCantFindSystemRec:                        Message(\"Can't read record in system table\", nil),\n\tErrCantGetStat:                              Message(\"Can't get status of '%-.200s' (errno: %d - %s)\", nil),\n\tErrCantGetWd:                                Message(\"Can't get working directory (errno: %d - %s)\", nil),\n\tErrCantLock:                                 Message(\"Can't lock file (errno: %d - %s)\", nil),\n\tErrCantOpenFile:                             Message(\"Can't open file: '%-.200s' (errno: %d - %s)\", nil),\n\tErrFileNotFound:                             Message(\"Can't find file: '%-.200s' (errno: %d - %s)\", nil),\n\tErrCantReadDir:                              Message(\"Can't read dir of '%-.192s' (errno: %d - %s)\", nil),\n\tErrCantSetWd:                                Message(\"Can't change dir to '%-.192s' (errno: %d - %s)\", nil),\n\tErrCheckread:                                Message(\"Record has changed since last read in table '%-.192s'\", nil),\n\tErrDiskFull:                                 Message(\"Disk full (%s); waiting for someone to free some space... (errno: %d - %s)\", nil),\n\tErrDupKey:                                   Message(\"Can't write; duplicate key in table '%-.192s'\", nil),\n\tErrErrorOnClose:                             Message(\"Error on close of '%-.192s' (errno: %d - %s)\", nil),\n\tErrErrorOnRead:                              Message(\"Error reading file '%-.200s' (errno: %d - %s)\", nil),\n\tErrErrorOnRename:                            Message(\"Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s)\", nil),\n\tErrErrorOnWrite:                             Message(\"Error writing file '%-.200s' (errno: %d - %s)\", nil),\n\tErrFileUsed:                                 Message(\"'%-.192s' is locked against change\", nil),\n\tErrFilsortAbort:                             Message(\"Sort aborted\", nil),\n\tErrFormNotFound:                             Message(\"View '%-.192s' doesn't exist for '%-.192s'\", nil),\n\tErrGetErrno:                                 Message(\"Got error %d from storage engine\", nil),\n\tErrIllegalHa:                                Message(\"Table storage engine for '%-.192s' doesn't have this option\", nil),\n\tErrKeyNotFound:                              Message(\"Can't find record in '%-.192s'\", nil),\n\tErrNotFormFile:                              Message(\"Incorrect information in file: '%-.200s'\", nil),\n\tErrNotKeyFile:                               Message(\"Incorrect key file for table '%-.200s'; try to repair it\", nil),\n\tErrOldKeyFile:                               Message(\"Old key file for table '%-.192s'; repair it!\", nil),\n\tErrOpenAsReadonly:                           Message(\"Table '%-.192s' is read only\", nil),\n\tErrOutofMemory:                              Message(\"Out of memory; restart server and try again (needed %d bytes)\", nil),\n\tErrOutOfSortMemory:                          Message(\"Out of sort memory, consider increasing server sort buffer size\", nil),\n\tErrUnexpectedEOF:                            Message(\"Unexpected EOF found when reading file '%-.192s' (errno: %d - %s)\", nil),\n\tErrConCount:                                 Message(\"Too many connections\", nil),\n\tErrOutOfResources:                           Message(\"Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space\", nil),\n\tErrBadHost:                                  Message(\"Can't get hostname for your address\", nil),\n\tErrHandshake:                                Message(\"Bad handshake\", nil),\n\tErrDBaccessDenied:                           Message(\"Access denied for user '%-.48s'@'%-.64s' to database '%-.192s'\", nil),\n\tErrAccessDenied:                             Message(\"Access denied for user '%-.48s'@'%-.64s' (using password: %s)\", nil),\n\tErrNoDB:                                     Message(\"No database selected\", nil),\n\tErrUnknownCom:                               Message(\"Unknown command\", nil),\n\tErrBadNull:                                  Message(\"Column '%-.192s' cannot be null\", nil),\n\tErrBadDB:                                    Message(\"Unknown database '%-.192s'\", nil),\n\tErrTableExists:                              Message(\"Table '%-.192s' already exists\", nil),\n\tErrBadTable:                                 Message(\"Unknown table '%-.100s'\", nil),\n\tErrNonUniq:                                  Message(\"Column '%-.192s' in %-.192s is ambiguous\", nil),\n\tErrServerShutdown:                           Message(\"Server shutdown in progress\", nil),\n\tErrBadField:                                 Message(\"Unknown column '%-.192s' in '%-.192s'\", nil),\n\tErrFieldNotInGroupBy:                        Message(\"Expression #%d of %s is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by\", nil),\n\tErrWrongGroupField:                          Message(\"Can't group on '%-.192s'\", nil),\n\tErrWrongSumSelect:                           Message(\"Statement has sum functions and columns in same statement\", nil),\n\tErrWrongValueCount:                          Message(\"Column count doesn't match value count\", nil),\n\tErrTooLongIdent:                             Message(\"Identifier name '%-.100s' is too long\", nil),\n\tErrDupFieldName:                             Message(\"Duplicate column name '%-.192s'\", nil),\n\tErrDupKeyName:                               Message(\"Duplicate key name '%-.192s'\", nil),\n\tErrDupEntry:                                 Message(\"Duplicate entry '%-.64s' for key '%-.192s'\", nil),\n\tErrWrongFieldSpec:                           Message(\"Incorrect column specifier for column '%-.192s'\", nil),\n\tErrParse:                                    Message(\"%s %s\", nil),\n\tErrEmptyQuery:                               Message(\"Query was empty\", nil),\n\tErrNonuniqTable:                             Message(\"Not unique table/alias: '%-.192s'\", nil),\n\tErrInvalidDefault:                           Message(\"Invalid default value for '%-.192s'\", nil),\n\tErrMultiplePriKey:                           Message(\"Multiple primary key defined\", nil),\n\tErrTooManyKeys:                              Message(\"Too many keys specified; max %d keys allowed\", nil),\n\tErrTooManyKeyParts:                          Message(\"Too many key parts specified; max %d parts allowed\", nil),\n\tErrTooLongKey:                               Message(\"Specified key was too long (%d bytes); max key length is %d bytes\", nil),\n\tErrKeyColumnDoesNotExits:                    Message(\"Key column '%-.192s' doesn't exist in table\", nil),\n\tErrBlobUsedAsKey:                            Message(\"BLOB column '%-.192s' can't be used in key specification with the used table type\", nil),\n\tErrJSONVacuousPath:                          Message(\"The path expression '$' is not allowed in this context.\", nil),\n\tErrJSONBadOneOrAllArg:                       Message(\"The oneOrAll argument to %s may take these values: 'one' or 'all'.\", nil),\n\tErrTooBigFieldlength:                        Message(\"Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead\", nil),\n\tErrWrongAutoKey:                             Message(\"Incorrect table definition; there can be only one auto column and it must be defined as a key\", nil),\n\tErrReady:                                    Message(\"%s: ready for connections.\\nVersion: '%s'  socket: '%s'  port: %d\", nil),\n\tErrNormalShutdown:                           Message(\"%s: Normal shutdown\\n\", nil),\n\tErrGotSignal:                                Message(\"%s: Got signal %d. Aborting!\\n\", nil),\n\tErrShutdownComplete:                         Message(\"%s: Shutdown complete\\n\", nil),\n\tErrForcingClose:                             Message(\"%s: Forcing close of thread %d  user: '%-.48s'\\n\", nil),\n\tErrIpsock:                                   Message(\"Can't create IP socket\", nil),\n\tErrNoSuchIndex:                              Message(\"Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table\", nil),\n\tErrWrongFieldTerminators:                    Message(\"Field separator argument is not what is expected; check the manual\", nil),\n\tErrBlobsAndNoTerminated:                     Message(\"You can't use fixed rowlength with BLOBs; please use 'fields terminated by'\", nil),\n\tErrTextFileNotReadable:                      Message(\"The file '%-.128s' must be in the database directory or be readable by all\", nil),\n\tErrFileExists:                               Message(\"File '%-.200s' already exists\", nil),\n\tErrLoadInfo:                                 Message(\"Records: %d  Deleted: %d  Skipped: %d  Warnings: %d\", nil),\n\tErrAlterInfo:                                Message(\"Records: %d  Duplicates: %d\", nil),\n\tErrWrongSubKey:                              Message(\"Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys\", nil),\n\tErrCantRemoveAllFields:                      Message(\"You can't delete all columns with ALTER TABLE; use DROP TABLE instead\", nil),\n\tErrCantDropFieldOrKey:                       Message(\"Can't DROP '%-.192s'; check that column/key exists\", nil),\n\tErrInsertInfo:                               Message(\"Records: %d  Duplicates: %d  Warnings: %d\", nil),\n\tErrUpdateTableUsed:                          Message(\"You can't specify target table '%-.192s' for update in FROM clause\", nil),\n\tErrNoSuchThread:                             Message(\"Unknown thread id: %d\", nil),\n\tErrKillDenied:                               Message(\"You are not owner of thread %d\", nil),\n\tErrNoTablesUsed:                             Message(\"No tables used\", nil),\n\tErrTooBigSet:                                Message(\"Too many strings for column %-.192s and SET\", nil),\n\tErrNoUniqueLogFile:                          Message(\"Can't generate a unique log-filename %-.200s.(1-999)\\n\", nil),\n\tErrTableNotLockedForWrite:                   Message(\"Table '%-.192s' was locked with a READ lock and can't be updated\", nil),\n\tErrTableNotLocked:                           Message(\"Table '%-.192s' was not locked with LOCK TABLES\", nil),\n\tErrBlobCantHaveDefault:                      Message(\"BLOB/TEXT/JSON column '%-.192s' can't have a default value\", nil),\n\tErrWrongDBName:                              Message(\"Incorrect database name '%-.100s'\", nil),\n\tErrWrongTableName:                           Message(\"Incorrect table name '%-.100s'\", nil),\n\tErrTooBigSelect:                             Message(\"The SELECT would examine more than MAXJOINSIZE rows; check your WHERE and use SET SQLBIGSELECTS=1 or SET MAXJOINSIZE=# if the SELECT is okay\", nil),\n\tErrUnknown:                                  Message(\"Unknown error\", nil),\n\tErrUnknownProcedure:                         Message(\"Unknown procedure '%-.192s'\", nil),\n\tErrWrongParamcountToProcedure:               Message(\"Incorrect parameter count to procedure '%-.192s'\", nil),\n\tErrWrongParametersToProcedure:               Message(\"Incorrect parameters to procedure '%-.192s'\", nil),\n\tErrUnknownTable:                             Message(\"Unknown table '%-.192s' in %-.32s\", nil),\n\tErrFieldSpecifiedTwice:                      Message(\"Column '%-.192s' specified twice\", nil),\n\tErrInvalidGroupFuncUse:                      Message(\"Invalid use of group function\", nil),\n\tErrUnsupportedExtension:                     Message(\"Table '%-.192s' uses an extension that doesn't exist in this MySQL version\", nil),\n\tErrTableMustHaveColumns:                     Message(\"A table must have at least 1 column\", nil),\n\tErrRecordFileFull:                           Message(\"The table '%-.192s' is full\", nil),\n\tErrUnknownCharacterSet:                      Message(\"Unknown character set: '%-.64s'\", nil),\n\tErrTooManyTables:                            Message(\"Too many tables; MySQL can only use %d tables in a join\", nil),\n\tErrTooManyFields:                            Message(\"Too many columns\", nil),\n\tErrTooBigRowsize:                            Message(\"Row size too large. The maximum row size for the used table type, not counting BLOBs, is %d. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs\", nil),\n\tErrStackOverrun:                             Message(\"Thread stack overrun:  Used: %d of a %d stack.  Use 'mysqld --threadStack=#' to specify a bigger stack if needed\", nil),\n\tErrWrongOuterJoin:                           Message(\"Cross dependency found in OUTER JOIN; examine your ON conditions\", nil),\n\tErrNullColumnInIndex:                        Message(\"Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler\", nil),\n\tErrCantFindUdf:                              Message(\"Can't load function '%-.192s'\", nil),\n\tErrCantInitializeUdf:                        Message(\"Can't initialize function '%-.192s'; %-.80s\", nil),\n\tErrUdfNoPaths:                               Message(\"No paths allowed for shared library\", nil),\n\tErrUdfExists:                                Message(\"Function '%-.192s' already exists\", nil),\n\tErrCantOpenLibrary:                          Message(\"Can't open shared library '%-.192s' (errno: %d %-.128s)\", nil),\n\tErrCantFindDlEntry:                          Message(\"Can't find symbol '%-.128s' in library\", nil),\n\tErrFunctionNotDefined:                       Message(\"Function '%-.192s' is not defined\", nil),\n\tErrHostIsBlocked:                            Message(\"Host '%-.64s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'\", nil),\n\tErrHostNotPrivileged:                        Message(\"Host '%-.64s' is not allowed to connect to this MySQL server\", nil),\n\tErrPasswordAnonymousUser:                    Message(\"You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords\", nil),\n\tErrPasswordNotAllowed:                       Message(\"You must have privileges to update tables in the mysql database to be able to change passwords for others\", nil),\n\tErrPasswordNoMatch:                          Message(\"Can't find any matching row in the user table\", nil),\n\tErrUpdateInfo:                               Message(\"Rows matched: %d  Changed: %d  Warnings: %d\", nil),\n\tErrCantCreateThread:                         Message(\"Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug\", nil),\n\tErrWrongValueCountOnRow:                     Message(\"Column count doesn't match value count at row %d\", nil),\n\tErrCantReopenTable:                          Message(\"Can't reopen table: '%-.192s'\", nil),\n\tErrInvalidUseOfNull:                         Message(\"Invalid use of NULL value\", nil),\n\tErrRegexp:                                   Message(\"Got error '%-.64s' from regexp\", nil),\n\tErrMixOfGroupFuncAndFields:                  Message(\"Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause\", nil),\n\tErrNonexistingGrant:                         Message(\"There is no such grant defined for user '%-.48s' on host '%-.64s'\", nil),\n\tErrTableaccessDenied:                        Message(\"%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s'\", nil),\n\tErrColumnaccessDenied:                       Message(\"%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'\", nil),\n\tErrIllegalGrantForTable:                     Message(\"Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used\", nil),\n\tErrGrantWrongHostOrUser:                     Message(\"The host or user argument to GRANT is too long\", nil),\n\tErrNoSuchTable:                              Message(\"Table '%-.192s.%-.192s' doesn't exist\", nil),\n\tErrNonexistingTableGrant:                    Message(\"There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'\", nil),\n\tErrNotAllowedCommand:                        Message(\"The used command is not allowed with this MySQL version\", nil),\n\tErrSyntax:                                   Message(\"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use\", nil),\n\tErrDelayedCantChangeLock:                    Message(\"Delayed insert thread couldn't get requested lock for table %-.192s\", nil),\n\tErrTooManyDelayedThreads:                    Message(\"Too many delayed threads in use\", nil),\n\tErrAbortingConnection:                       Message(\"Aborted connection %d to db: '%-.192s' user: '%-.48s' (%-.64s)\", nil),\n\tErrNetPacketTooLarge:                        Message(\"Got a packet bigger than 'max_allowed_packet' bytes\", nil),\n\tErrNetReadErrorFromPipe:                     Message(\"Got a read error from the connection pipe\", nil),\n\tErrNetFcntl:                                 Message(\"Got an error from fcntl()\", nil),\n\tErrNetPacketsOutOfOrder:                     Message(\"Got packets out of order\", nil),\n\tErrNetUncompress:                            Message(\"Couldn't uncompress communication packet\", nil),\n\tErrNetRead:                                  Message(\"Got an error reading communication packets\", nil),\n\tErrNetReadInterrupted:                       Message(\"Got timeout reading communication packets\", nil),\n\tErrNetErrorOnWrite:                          Message(\"Got an error writing communication packets\", nil),\n\tErrNetWriteInterrupted:                      Message(\"Got timeout writing communication packets\", nil),\n\tErrTooLongString:                            Message(\"Result string is longer than 'maxAllowedPacket' bytes\", nil),\n\tErrTableCantHandleBlob:                      Message(\"The used table type doesn't support BLOB/TEXT columns\", nil),\n\tErrTableCantHandleAutoIncrement:             Message(\"The used table type doesn't support AUTOINCREMENT columns\", nil),\n\tErrDelayedInsertTableLocked:                 Message(\"INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES\", nil),\n\tErrWrongColumnName:                          Message(\"Incorrect column name '%-.100s'\", nil),\n\tErrWrongKeyColumn:                           Message(\"The used storage engine can't index column '%-.192s'\", nil),\n\tErrWrongMrgTable:                            Message(\"Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist\", nil),\n\tErrDupUnique:                                Message(\"Can't write, because of unique constraint, to table '%-.192s'\", nil),\n\tErrBlobKeyWithoutLength:                     Message(\"BLOB/TEXT column '%-.192s' used in key specification without a key length\", nil),\n\tErrPrimaryCantHaveNull:                      Message(\"All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead\", nil),\n\tErrTooManyRows:                              Message(\"Result consisted of more than one row\", nil),\n\tErrRequiresPrimaryKey:                       Message(\"This table type requires a primary key\", nil),\n\tErrNoRaidCompiled:                           Message(\"This version of MySQL is not compiled with RAID support\", nil),\n\tErrUpdateWithoutKeyInSafeMode:               Message(\"You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column\", nil),\n\tErrKeyDoesNotExist:                          Message(\"Key '%-.192s' doesn't exist in table '%-.192s'\", nil),\n\tErrCheckNoSuchTable:                         Message(\"Can't open table\", nil),\n\tErrCheckNotImplemented:                      Message(\"The storage engine for the table doesn't support %s\", nil),\n\tErrCantDoThisDuringAnTransaction:            Message(\"You are not allowed to execute this command in a transaction\", nil),\n\tErrErrorDuringCommit:                        Message(\"Got error %d during COMMIT\", nil),\n\tErrErrorDuringRollback:                      Message(\"Got error %d during ROLLBACK\", nil),\n\tErrErrorDuringFlushLogs:                     Message(\"Got error %d during FLUSHLOGS\", nil),\n\tErrErrorDuringCheckpoint:                    Message(\"Got error %d during CHECKPOINT\", nil),\n\tErrNewAbortingConnection:                    Message(\"Aborted connection %d to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)\", nil),\n\tErrDumpNotImplemented:                       Message(\"The storage engine for the table does not support binary table dump\", nil),\n\tErrFlushMasterBinlogClosed:                  Message(\"Binlog closed, cannot RESET MASTER\", nil),\n\tErrIndexRebuild:                             Message(\"Failed rebuilding the index of  dumped table '%-.192s'\", nil),\n\tErrMaster:                                   Message(\"Error from master: '%-.64s'\", nil),\n\tErrMasterNetRead:                            Message(\"Net error reading from master\", nil),\n\tErrMasterNetWrite:                           Message(\"Net error writing to master\", nil),\n\tErrFtMatchingKeyNotFound:                    Message(\"Can't find FULLTEXT index matching the column list\", nil),\n\tErrLockOrActiveTransaction:                  Message(\"Can't execute the given command because you have active locked tables or an active transaction\", nil),\n\tErrUnknownSystemVariable:                    Message(\"Unknown system variable '%-.64s'\", nil),\n\tErrCrashedOnUsage:                           Message(\"Table '%-.192s' is marked as crashed and should be repaired\", nil),\n\tErrCrashedOnRepair:                          Message(\"Table '%-.192s' is marked as crashed and last (automatic?) repair failed\", nil),\n\tErrWarningNotCompleteRollback:               Message(\"Some non-transactional changed tables couldn't be rolled back\", nil),\n\tErrTransCacheFull:                           Message(\"Multi-statement transaction required more than 'maxBinlogCacheSize' bytes of storage; increase this mysqld variable and try again\", nil),\n\tErrSlaveMustStop:                            Message(\"This operation cannot be performed with a running slave; run STOP SLAVE first\", nil),\n\tErrSlaveNotRunning:                          Message(\"This operation requires a running slave; configure slave and do START SLAVE\", nil),\n\tErrBadSlave:                                 Message(\"The server is not configured as slave; fix in config file or with CHANGE MASTER TO\", nil),\n\tErrMasterInfo:                               Message(\"Could not initialize master info structure; more error messages can be found in the MySQL error log\", nil),\n\tErrSlaveThread:                              Message(\"Could not create slave thread; check system resources\", nil),\n\tErrTooManyUserConnections:                   Message(\"User %-.64s already has more than 'maxUserConnections' active connections\", nil),\n\tErrSetConstantsOnly:                         Message(\"You may only use constant expressions with SET\", nil),\n\tErrLockWaitTimeout:                          Message(\"Lock wait timeout exceeded; try restarting transaction\", nil),\n\tErrLockTableFull:                            Message(\"The total number of locks exceeds the lock table size\", nil),\n\tErrReadOnlyTransaction:                      Message(\"Update locks cannot be acquired during a READ UNCOMMITTED transaction\", nil),\n\tErrDropDBWithReadLock:                       Message(\"DROP DATABASE not allowed while thread is holding global read lock\", nil),\n\tErrCreateDBWithReadLock:                     Message(\"CREATE DATABASE not allowed while thread is holding global read lock\", nil),\n\tErrWrongArguments:                           Message(\"Incorrect arguments to %s\", nil),\n\tErrNoPermissionToCreateUser:                 Message(\"'%-.48s'@'%-.64s' is not allowed to create new users\", nil),\n\tErrUnionTablesInDifferentDir:                Message(\"Incorrect table definition; all MERGE tables must be in the same database\", nil),\n\tErrLockDeadlock:                             Message(\"Deadlock found when trying to get lock; try restarting transaction\", nil),\n\tErrTableCantHandleFt:                        Message(\"The used table type doesn't support FULLTEXT indexes\", nil),\n\tErrCannotAddForeign:                         Message(\"Cannot add foreign key constraint\", nil),\n\tErrNoReferencedRow:                          Message(\"Cannot add or update a child row: a foreign key constraint fails\", nil),\n\tErrRowIsReferenced:                          Message(\"Cannot delete or update a parent row: a foreign key constraint fails\", nil),\n\tErrConnectToMaster:                          Message(\"Error connecting to master: %-.128s\", nil),\n\tErrQueryOnMaster:                            Message(\"Error running query on master: %-.128s\", nil),\n\tErrErrorWhenExecutingCommand:                Message(\"Error when executing command %s: %-.128s\", nil),\n\tErrWrongUsage:                               Message(\"Incorrect usage of %s and %s\", nil),\n\tErrWrongNumberOfColumnsInSelect:             Message(\"The used SELECT statements have a different number of columns\", nil),\n\tErrCantUpdateWithReadlock:                   Message(\"Can't execute the query because you have a conflicting read lock\", nil),\n\tErrMixingNotAllowed:                         Message(\"Mixing of transactional and non-transactional tables is disabled\", nil),\n\tErrDupArgument:                              Message(\"Option '%s' used twice in statement\", nil),\n\tErrUserLimitReached:                         Message(\"User '%-.64s' has exceeded the '%s' resource (current value: %d)\", nil),\n\tErrSpecificAccessDenied:                     Message(\"Access denied; you need (at least one of) the %-.128s privilege(s) for this operation\", nil),\n\tErrLocalVariable:                            Message(\"Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL\", nil),\n\tErrGlobalVariable:                           Message(\"Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL\", nil),\n\tErrNoDefault:                                Message(\"Variable '%-.64s' doesn't have a default value\", nil),\n\tErrWrongValueForVar:                         Message(\"Variable '%-.64s' can't be set to the value of '%-.200s'\", nil),\n\tErrWrongTypeForVar:                          Message(\"Incorrect argument type to variable '%-.64s'\", nil),\n\tErrVarCantBeRead:                            Message(\"Variable '%-.64s' can only be set, not read\", nil),\n\tErrCantUseOptionHere:                        Message(\"Incorrect usage/placement of '%s'\", nil),\n\tErrNotSupportedYet:                          Message(\"This version of TiDB doesn't yet support '%s'\", nil),\n\tErrMasterFatalErrorReadingBinlog:            Message(\"Got fatal error %d from master when reading data from binary log: '%-.320s'\", nil),\n\tErrSlaveIgnoredTable:                        Message(\"Slave SQL thread ignored the query because of replicate-*-table rules\", nil),\n\tErrIncorrectGlobalLocalVar:                  Message(\"Variable '%-.192s' is a %s variable\", nil),\n\tErrWrongFkDef:                               Message(\"Incorrect foreign key definition for '%-.192s': %s\", nil),\n\tErrKeyRefDoNotMatchTableRef:                 Message(\"Key reference and table reference don't match\", nil),\n\tErrOperandColumns:                           Message(\"Operand should contain %d column(s)\", nil),\n\tErrSubqueryNo1Row:                           Message(\"Subquery returns more than 1 row\", nil),\n\tErrUnknownStmtHandler:                       Message(\"Unknown prepared statement handler %s given to %s\", nil),\n\tErrCorruptHelpDB:                            Message(\"Help database is corrupt or does not exist\", nil),\n\tErrCyclicReference:                          Message(\"Cyclic reference on subqueries\", nil),\n\tErrAutoConvert:                              Message(\"Converting column '%s' from %s to %s\", nil),\n\tErrIllegalReference:                         Message(\"Reference '%-.64s' not supported (%s)\", nil),\n\tErrDerivedMustHaveAlias:                     Message(\"Every derived table must have its own alias\", nil),\n\tErrSelectReduced:                            Message(\"Select %d was reduced during optimization\", nil),\n\tErrTablenameNotAllowedHere:                  Message(\"Table '%s' from one of the %ss cannot be used in %s\", nil),\n\tErrNotSupportedAuthMode:                     Message(\"Client does not support authentication protocol requested by server; consider upgrading MySQL client\", nil),\n\tErrSpatialCantHaveNull:                      Message(\"All parts of a SPATIAL index must be NOT NULL\", nil),\n\tErrCollationCharsetMismatch:                 Message(\"COLLATION '%s' is not valid for CHARACTER SET '%s'\", nil),\n\tErrSlaveWasRunning:                          Message(\"Slave is already running\", nil),\n\tErrSlaveWasNotRunning:                       Message(\"Slave already has been stopped\", nil),\n\tErrTooBigForUncompress:                      Message(\"Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)\", nil),\n\tErrZlibZMem:                                 Message(\"ZLIB: Not enough memory\", nil),\n\tErrZlibZBuf:                                 Message(\"ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)\", nil),\n\tErrZlibZData:                                Message(\"ZLIB: Input data corrupted\", nil),\n\tErrCutValueGroupConcat:                      Message(\"Some rows were cut by GROUPCONCAT(%s)\", nil),\n\tErrWarnTooFewRecords:                        Message(\"Row %d doesn't contain data for all columns\", nil),\n\tErrWarnTooManyRecords:                       Message(\"Row %d was truncated; it contained more data than there were input columns\", nil),\n\tErrWarnNullToNotnull:                        Message(\"Column set to default value; NULL supplied to NOT NULL column '%s' at row %d\", nil),\n\tErrWarnDataOutOfRange:                       Message(\"Out of range value for column '%s' at row %d\", nil),\n\tWarnDataTruncated:                           Message(\"Data truncated for column '%s' at row %d\", nil),\n\tErrWarnUsingOtherHandler:                    Message(\"Using storage engine %s for table '%s'\", nil),\n\tErrCantAggregate2collations:                 Message(\"Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'\", nil),\n\tErrDropUser:                                 Message(\"Cannot drop one or more of the requested users\", nil),\n\tErrRevokeGrants:                             Message(\"Can't revoke all privileges for one or more of the requested users\", nil),\n\tErrCantAggregate3collations:                 Message(\"Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'\", nil),\n\tErrCantAggregateNcollations:                 Message(\"Illegal mix of collations for operation '%s'\", nil),\n\tErrVariableIsNotStruct:                      Message(\"Variable '%-.64s' is not a variable component (can't be used as XXXX.variableName)\", nil),\n\tErrUnknownCollation:                         Message(\"Unknown collation: '%-.64s'\", nil),\n\tErrSlaveIgnoredSslParams:                    Message(\"SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started\", nil),\n\tErrServerIsInSecureAuthMode:                 Message(\"Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format\", nil),\n\tErrWarnFieldResolved:                        Message(\"Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d\", nil),\n\tErrBadSlaveUntilCond:                        Message(\"Incorrect parameter or combination of parameters for START SLAVE UNTIL\", nil),\n\tErrMissingSkipSlave:                         Message(\"It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart\", nil),\n\tErrUntilCondIgnored:                         Message(\"SQL thread is not to be started so UNTIL options are ignored\", nil),\n\tErrWrongNameForIndex:                        Message(\"Incorrect index name '%-.100s'\", nil),\n\tErrWrongNameForCatalog:                      Message(\"Incorrect catalog name '%-.100s'\", nil),\n\tErrWarnQcResize:                             Message(\"Query cache failed to set size %d; new query cache size is %d\", nil),\n\tErrBadFtColumn:                              Message(\"Column '%-.192s' cannot be part of FULLTEXT index\", nil),\n\tErrUnknownKeyCache:                          Message(\"Unknown key cache '%-.100s'\", nil),\n\tErrWarnHostnameWontWork:                     Message(\"MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work\", nil),\n\tErrUnknownStorageEngine:                     Message(\"Unknown storage engine '%s'\", nil),\n\tErrWarnDeprecatedSyntax:                     Message(\"'%s' is deprecated and will be removed in a future release. Please use %s instead\", nil),\n\tErrNonUpdatableTable:                        Message(\"The target table %-.100s of the %s is not updatable\", nil),\n\tErrFeatureDisabled:                          Message(\"The '%s' feature is disabled; you need MySQL built with '%s' to have it working\", nil),\n\tErrOptionPreventsStatement:                  Message(\"The MySQL server is running with the %s option so it cannot execute this statement\", nil),\n\tErrDuplicatedValueInType:                    Message(\"Column '%-.100s' has duplicated value '%-.64s' in %s\", nil),\n\tErrTruncatedWrongValue:                      Message(\"Truncated incorrect %-.64s value: '%-.128s'\", nil),\n\tErrTooMuchAutoTimestampCols:                 Message(\"Incorrect table definition; there can be only one TIMESTAMP column with CURRENTTIMESTAMP in DEFAULT or ON UPDATE clause\", nil),\n\tErrInvalidOnUpdate:                          Message(\"Invalid ON UPDATE clause for '%-.192s' column\", nil),\n\tErrUnsupportedPs:                            Message(\"This command is not supported in the prepared statement protocol yet\", nil),\n\tErrGetErrmsg:                                Message(\"Got error %d '%-.100s' from %s\", nil),\n\tErrGetTemporaryErrmsg:                       Message(\"Got temporary error %d '%-.100s' from %s\", nil),\n\tErrUnknownTimeZone:                          Message(\"Unknown or incorrect time zone: '%-.64s'\", nil),\n\tErrWarnInvalidTimestamp:                     Message(\"Invalid TIMESTAMP value in column '%s' at row %d\", nil),\n\tErrInvalidCharacterString:                   Message(\"Invalid %s character string: '%.64s'\", nil),\n\tErrWarnAllowedPacketOverflowed:              Message(\"Result of %s() was larger than max_allowed_packet (%d) - truncated\", nil),\n\tErrConflictingDeclarations:                  Message(\"Conflicting declarations: '%s%s' and '%s%s'\", nil),\n\tErrSpNoRecursiveCreate:                      Message(\"Can't create a %s from within another stored routine\", nil),\n\tErrSpAlreadyExists:                          Message(\"%s %s already exists\", nil),\n\tErrSpDoesNotExist:                           Message(\"%s %s does not exist\", nil),\n\tErrSpDropFailed:                             Message(\"Failed to DROP %s %s\", nil),\n\tErrSpStoreFailed:                            Message(\"Failed to CREATE %s %s\", nil),\n\tErrSpLilabelMismatch:                        Message(\"%s with no matching label: %s\", nil),\n\tErrSpLabelRedefine:                          Message(\"Redefining label %s\", nil),\n\tErrSpLabelMismatch:                          Message(\"End-label %s without match\", nil),\n\tErrSpUninitVar:                              Message(\"Referring to uninitialized variable %s\", nil),\n\tErrSpBadselect:                              Message(\"PROCEDURE %s can't return a result set in the given context\", nil),\n\tErrSpBadreturn:                              Message(\"RETURN is only allowed in a FUNCTION\", nil),\n\tErrSpBadstatement:                           Message(\"%s is not allowed in stored procedures\", nil),\n\tErrUpdateLogDeprecatedIgnored:               Message(\"The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been ignored.\", nil),\n\tErrUpdateLogDeprecatedTranslated:            Message(\"The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been translated to SET SQLLOGBIN.\", nil),\n\tErrQueryInterrupted:                         Message(\"Query execution was interrupted\", nil),\n\tErrSpWrongNoOfArgs:                          Message(\"Incorrect number of arguments for %s %s; expected %d, got %d\", nil),\n\tErrSpCondMismatch:                           Message(\"Undefined CONDITION: %s\", nil),\n\tErrSpNoreturn:                               Message(\"No RETURN found in FUNCTION %s\", nil),\n\tErrSpNoreturnend:                            Message(\"FUNCTION %s ended without RETURN\", nil),\n\tErrSpBadCursorQuery:                         Message(\"Cursor statement must be a SELECT\", nil),\n\tErrSpBadCursorSelect:                        Message(\"Cursor SELECT must not have INTO\", nil),\n\tErrSpCursorMismatch:                         Message(\"Undefined CURSOR: %s\", nil),\n\tErrSpCursorAlreadyOpen:                      Message(\"Cursor is already open\", nil),\n\tErrSpCursorNotOpen:                          Message(\"Cursor is not open\", nil),\n\tErrSpUndeclaredVar:                          Message(\"Undeclared variable: %s\", nil),\n\tErrSpWrongNoOfFetchArgs:                     Message(\"Incorrect number of FETCH variables\", nil),\n\tErrSpFetchNoData:                            Message(\"No data - zero rows fetched, selected, or processed\", nil),\n\tErrSpDupParam:                               Message(\"Duplicate parameter: %s\", nil),\n\tErrSpDupVar:                                 Message(\"Duplicate variable: %s\", nil),\n\tErrSpDupCond:                                Message(\"Duplicate condition: %s\", nil),\n\tErrSpDupCurs:                                Message(\"Duplicate cursor: %s\", nil),\n\tErrSpCantAlter:                              Message(\"Failed to ALTER %s %s\", nil),\n\tErrSpSubselectNyi:                           Message(\"Subquery value not supported\", nil),\n\tErrStmtNotAllowedInSfOrTrg:                  Message(\"%s is not allowed in stored function or trigger\", nil),\n\tErrSpVarcondAfterCurshndlr:                  Message(\"Variable or condition declaration after cursor or handler declaration\", nil),\n\tErrSpCursorAfterHandler:                     Message(\"Cursor declaration after handler declaration\", nil),\n\tErrSpCaseNotFound:                           Message(\"Case not found for CASE statement\", nil),\n\tErrFparserTooBigFile:                        Message(\"Configuration file '%-.192s' is too big\", nil),\n\tErrFparserBadHeader:                         Message(\"Malformed file type header in file '%-.192s'\", nil),\n\tErrFparserEOFInComment:                      Message(\"Unexpected end of file while parsing comment '%-.200s'\", nil),\n\tErrFparserErrorInParameter:                  Message(\"Error while parsing parameter '%-.192s' (line: '%-.192s')\", nil),\n\tErrFparserEOFInUnknownParameter:             Message(\"Unexpected end of file while skipping unknown parameter '%-.192s'\", nil),\n\tErrViewNoExplain:                            Message(\"EXPLAIN/SHOW can not be issued; lacking privileges for underlying table\", nil),\n\tErrFrmUnknownType:                           Message(\"File '%-.192s' has unknown type '%-.64s' in its header\", nil),\n\tErrWrongObject:                              Message(\"'%-.192s.%-.192s' is not %s\", nil),\n\tErrNonupdateableColumn:                      Message(\"Column '%-.192s' is not updatable\", nil),\n\tErrViewSelectDerived:                        Message(\"View's SELECT contains a subquery in the FROM clause\", nil),\n\tErrViewSelectClause:                         Message(\"View's SELECT contains a '%s' clause\", nil),\n\tErrViewSelectVariable:                       Message(\"View's SELECT contains a variable or parameter\", nil),\n\tErrViewSelectTmptable:                       Message(\"View's SELECT refers to a temporary table '%-.192s'\", nil),\n\tErrViewWrongList:                            Message(\"View's SELECT and view's field list have different column counts\", nil),\n\tErrWarnViewMerge:                            Message(\"View merge algorithm can't be used here for now (assumed undefined algorithm)\", nil),\n\tErrWarnViewWithoutKey:                       Message(\"View being updated does not have complete key of underlying table in it\", nil),\n\tErrViewInvalid:                              Message(\"View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them\", nil),\n\tErrSpNoDropSp:                               Message(\"Can't drop or alter a %s from within another stored routine\", nil),\n\tErrSpGotoInHndlr:                            Message(\"GOTO is not allowed in a stored procedure handler\", nil),\n\tErrTrgAlreadyExists:                         Message(\"Trigger already exists\", nil),\n\tErrTrgDoesNotExist:                          Message(\"Trigger does not exist\", nil),\n\tErrTrgOnViewOrTempTable:                     Message(\"Trigger's '%-.192s' is view or temporary table\", nil),\n\tErrTrgCantChangeRow:                         Message(\"Updating of %s row is not allowed in %strigger\", nil),\n\tErrTrgNoSuchRowInTrg:                        Message(\"There is no %s row in %s trigger\", nil),\n\tErrNoDefaultForField:                        Message(\"Field '%-.192s' doesn't have a default value\", nil),\n\tErrDivisionByZero:                           Message(\"Division by 0\", nil),\n\tErrTruncatedWrongValueForField:              Message(\"Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d\", nil),\n\tErrIllegalValueForType:                      Message(\"Illegal %s '%-.192s' value found during parsing\", nil),\n\tErrViewNonupdCheck:                          Message(\"CHECK OPTION on non-updatable view '%-.192s.%-.192s'\", nil),\n\tErrViewCheckFailed:                          Message(\"CHECK OPTION failed '%-.192s.%-.192s'\", nil),\n\tErrProcaccessDenied:                         Message(\"%-.16s command denied to user '%-.48s'@'%-.64s' for routine '%-.192s'\", nil),\n\tErrRelayLogFail:                             Message(\"Failed purging old relay logs: %s\", nil),\n\tErrPasswdLength:                             Message(\"Password hash should be a %d-digit hexadecimal number\", nil),\n\tErrUnknownTargetBinlog:                      Message(\"Target log not found in binlog index\", nil),\n\tErrIoErrLogIndexRead:                        Message(\"I/O error reading log index file\", nil),\n\tErrBinlogPurgeProhibited:                    Message(\"Server configuration does not permit binlog purge\", nil),\n\tErrFseekFail:                                Message(\"Failed on fseek()\", nil),\n\tErrBinlogPurgeFatalErr:                      Message(\"Fatal error during log purge\", nil),\n\tErrLogInUse:                                 Message(\"A purgeable log is in use, will not purge\", nil),\n\tErrLogPurgeUnknownErr:                       Message(\"Unknown error during log purge\", nil),\n\tErrRelayLogInit:                             Message(\"Failed initializing relay log position: %s\", nil),\n\tErrNoBinaryLogging:                          Message(\"You are not using binary logging\", nil),\n\tErrReservedSyntax:                           Message(\"The '%-.64s' syntax is reserved for purposes internal to the MySQL server\", nil),\n\tErrWsasFailed:                               Message(\"WSAStartup Failed\", nil),\n\tErrDiffGroupsProc:                           Message(\"Can't handle procedures with different groups yet\", nil),\n\tErrNoGroupForProc:                           Message(\"Select must have a group with this procedure\", nil),\n\tErrOrderWithProc:                            Message(\"Can't use ORDER clause with this procedure\", nil),\n\tErrLoggingProhibitChangingOf:                Message(\"Binary logging and replication forbid changing the global server %s\", nil),\n\tErrNoFileMapping:                            Message(\"Can't map file: %-.200s, errno: %d\", nil),\n\tErrWrongMagic:                               Message(\"Wrong magic in %-.64s\", nil),\n\tErrPsManyParam:                              Message(\"Prepared statement contains too many placeholders\", nil),\n\tErrKeyPart0:                                 Message(\"Key part '%-.192s' length cannot be 0\", nil),\n\tErrViewChecksum:                             Message(\"View text checksum failed\", nil),\n\tErrViewMultiupdate:                          Message(\"Can not modify more than one base table through a join view '%-.192s.%-.192s'\", nil),\n\tErrViewNoInsertFieldList:                    Message(\"Can not insert into join view '%-.192s.%-.192s' without fields list\", nil),\n\tErrViewDeleteMergeView:                      Message(\"Can not delete from join view '%-.192s.%-.192s'\", nil),\n\tErrCannotUser:                               Message(\"Operation %s failed for %.256s\", nil),\n\tErrXaerNota:                                 Message(\"XAERNOTA: Unknown XID\", nil),\n\tErrXaerInval:                                Message(\"XAERINVAL: Invalid arguments (or unsupported command)\", nil),\n\tErrXaerRmfail:                               Message(\"XAERRMFAIL: The command cannot be executed when global transaction is in the  %.64s state\", nil),\n\tErrXaerOutside:                              Message(\"XAEROUTSIDE: Some work is done outside global transaction\", nil),\n\tErrXaerRmerr:                                Message(\"XAERRMERR: Fatal error occurred in the transaction branch - check your data for consistency\", nil),\n\tErrXaRbrollback:                             Message(\"XARBROLLBACK: Transaction branch was rolled back\", nil),\n\tErrNonexistingProcGrant:                     Message(\"There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'\", nil),\n\tErrProcAutoGrantFail:                        Message(\"Failed to grant EXECUTE and ALTER ROUTINE privileges\", nil),\n\tErrProcAutoRevokeFail:                       Message(\"Failed to revoke all privileges to dropped routine\", nil),\n\tErrDataTooLong:                              Message(\"Data too long for column '%s' at row %d\", nil),\n\tErrSpBadSQLstate:                            Message(\"Bad SQLSTATE: '%s'\", nil),\n\tErrStartup:                                  Message(\"%s: ready for connections.\\nVersion: '%s'  socket: '%s'  port: %d  %s\", nil),\n\tErrLoadFromFixedSizeRowsToVar:               Message(\"Can't load value from file with fixed size rows to variable\", nil),\n\tErrCantCreateUserWithGrant:                  Message(\"You are not allowed to create a user with GRANT\", nil),\n\tErrWrongValueForType:                        Message(\"Incorrect %-.32s value: '%-.128s' for function %-.32s\", nil),\n\tErrTableDefChanged:                          Message(\"Table definition has changed, please retry transaction\", nil),\n\tErrSpDupHandler:                             Message(\"Duplicate handler declared in the same block\", nil),\n\tErrSpNotVarArg:                              Message(\"OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger\", nil),\n\tErrSpNoRetset:                               Message(\"Not allowed to return a result set from a %s\", nil),\n\tErrCantCreateGeometryObject:                 Message(\"Cannot get geometry object from data you send to the GEOMETRY field\", nil),\n\tErrFailedRoutineBreakBinlog:                 Message(\"A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes\", nil),\n\tErrBinlogUnsafeRoutine:                      Message(\"This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)\", nil),\n\tErrBinlogCreateRoutineNeedSuper:             Message(\"You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)\", nil),\n\tErrExecStmtWithOpenCursor:                   Message(\"You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.\", nil),\n\tErrStmtHasNoOpenCursor:                      Message(\"The statement (%d) has no open cursor.\", nil),\n\tErrCommitNotAllowedInSfOrTrg:                Message(\"Explicit or implicit commit is not allowed in stored function or trigger.\", nil),\n\tErrNoDefaultForViewField:                    Message(\"Field of view '%-.192s.%-.192s' underlying table doesn't have a default value\", nil),\n\tErrSpNoRecursion:                            Message(\"Recursive stored functions and triggers are not allowed.\", nil),\n\tErrTooBigScale:                              Message(\"Too big scale %d specified for column '%-.192s'. Maximum is %d.\", nil),\n\tErrTooBigPrecision:                          Message(\"Too-big precision %d specified for '%-.192s'. Maximum is %d.\", nil),\n\tErrMBiggerThanD:                             Message(\"For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s').\", nil),\n\tErrWrongLockOfSystemTable:                   Message(\"You can't combine write-locking of system tables with other tables or lock types\", nil),\n\tErrConnectToForeignDataSource:               Message(\"Unable to connect to foreign data source: %.64s\", nil),\n\tErrQueryOnForeignDataSource:                 Message(\"There was a problem processing the query on the foreign data source. Data source : %-.64s\", nil),\n\tErrForeignDataSourceDoesntExist:             Message(\"The foreign data source you are trying to reference does not exist. Data source :  %-.64s\", nil),\n\tErrForeignDataStringInvalidCantCreate:       Message(\"Can't create federated table. The data source connection string '%-.64s' is not in the correct format\", nil),\n\tErrForeignDataStringInvalid:                 Message(\"The data source connection string '%-.64s' is not in the correct format\", nil),\n\tErrCantCreateFederatedTable:                 Message(\"Can't create federated table. Foreign data src :  %-.64s\", nil),\n\tErrTrgInWrongSchema:                         Message(\"Trigger in wrong schema\", nil),\n\tErrStackOverrunNeedMore:                     Message(\"Thread stack overrun:  %d bytes used of a %d byte stack, and %d bytes needed.  Use 'mysqld --threadStack=#' to specify a bigger stack.\", nil),\n\tErrTooLongBody:                              Message(\"Routine body for '%-.100s' is too long\", nil),\n\tErrWarnCantDropDefaultKeycache:              Message(\"Cannot drop default keycache\", nil),\n\tErrTooBigDisplaywidth:                       Message(\"Display width out of range for column '%-.192s' (max = %d)\", nil),\n\tErrXaerDupid:                                Message(\"XAERDUPID: The XID already exists\", nil),\n\tErrDatetimeFunctionOverflow:                 Message(\"Datetime function: %-.32s field overflow\", nil),\n\tErrCantUpdateUsedTableInSfOrTrg:             Message(\"Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.\", nil),\n\tErrViewPreventUpdate:                        Message(\"The definition of table '%-.192s' prevents operation %.192s on table '%-.192s'.\", nil),\n\tErrPsNoRecursion:                            Message(\"The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner\", nil),\n\tErrSpCantSetAutocommit:                      Message(\"Not allowed to set autocommit from a stored function or trigger\", nil),\n\tErrMalformedDefiner:                         Message(\"Definer is not fully qualified\", nil),\n\tErrViewFrmNoUser:                            Message(\"View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!\", nil),\n\tErrViewOtherUser:                            Message(\"You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer\", nil),\n\tErrNoSuchUser:                               Message(\"The user specified as a definer ('%-.64s'@'%-.64s') does not exist\", nil),\n\tErrForbidSchemaChange:                       Message(\"Changing schema from '%-.192s' to '%-.192s' is not allowed.\", nil),\n\tErrRowIsReferenced2:                         Message(\"Cannot delete or update a parent row: a foreign key constraint fails (%.192s)\", nil),\n\tErrNoReferencedRow2:                         Message(\"Cannot add or update a child row: a foreign key constraint fails (%.192s)\", nil),\n\tErrSpBadVarShadow:                           Message(\"Variable '%-.64s' must be quoted with `...`, or renamed\", nil),\n\tErrTrgNoDefiner:                             Message(\"No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.\", nil),\n\tErrOldFileFormat:                            Message(\"'%-.192s' has an old format, you should re-create the '%s' object(s)\", nil),\n\tErrSpRecursionLimit:                         Message(\"Recursive limit %d (as set by the maxSpRecursionDepth variable) was exceeded for routine %.192s\", nil),\n\tErrSpProcTableCorrupt:                       Message(\"Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)\", nil),\n\tErrSpWrongName:                              Message(\"Incorrect routine name '%-.192s'\", nil),\n\tErrTableNeedsUpgrade:                        Message(\"Table upgrade required. Please do \\\"REPAIR TABLE `%-.32s`\\\"\", nil),\n\tErrSpNoAggregate:                            Message(\"AGGREGATE is not supported for stored functions\", nil),\n\tErrMaxPreparedStmtCountReached:              Message(\"Can't create more than maxPreparedStmtCount statements (current value: %d)\", nil),\n\tErrViewRecursive:                            Message(\"`%-.192s`.`%-.192s` contains view recursion\", nil),\n\tErrNonGroupingFieldUsed:                     Message(\"Non-grouping field '%-.192s' is used in %-.64s clause\", nil),\n\tErrTableCantHandleSpkeys:                    Message(\"The used table type doesn't support SPATIAL indexes\", nil),\n\tErrNoTriggersOnSystemSchema:                 Message(\"Triggers can not be created on system tables\", nil),\n\tErrRemovedSpaces:                            Message(\"Leading spaces are removed from name '%s'\", nil),\n\tErrAutoincReadFailed:                        Message(\"Failed to read auto-increment value from storage engine\", nil),\n\tErrUsername:                                 Message(\"user name\", nil),\n\tErrHostname:                                 Message(\"host name\", nil),\n\tErrWrongStringLength:                        Message(\"String '%-.70s' is too long for %s (should be no longer than %d)\", nil),\n\tErrNonInsertableTable:                       Message(\"The target table %-.100s of the %s is not insertable-into\", nil),\n\tErrAdminWrongMrgTable:                       Message(\"Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist\", nil),\n\tErrTooHighLevelOfNestingForSelect:           Message(\"Too high level of nesting for select\", nil),\n\tErrNameBecomesEmpty:                         Message(\"Name '%-.64s' has become ''\", nil),\n\tErrAmbiguousFieldTerm:                       Message(\"First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY\", nil),\n\tErrForeignServerExists:                      Message(\"The foreign server, %s, you are trying to create already exists.\", nil),\n\tErrForeignServerDoesntExist:                 Message(\"The foreign server name you are trying to reference does not exist. Data source :  %-.64s\", nil),\n\tErrIllegalHaCreateOption:                    Message(\"Table storage engine '%-.64s' does not support the create option '%.64s'\", nil),\n\tErrPartitionRequiresValues:                  Message(\"Syntax : %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition\", nil),\n\tErrPartitionWrongValues:                     Message(\"Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition\", nil),\n\tErrPartitionMaxvalue:                        Message(\"MAXVALUE can only be used in last partition definition\", nil),\n\tErrPartitionSubpartition:                    Message(\"Subpartitions can only be hash partitions and by key\", nil),\n\tErrPartitionSubpartMix:                      Message(\"Must define subpartitions on all partitions if on one partition\", nil),\n\tErrPartitionWrongNoPart:                     Message(\"Wrong number of partitions defined, mismatch with previous setting\", nil),\n\tErrPartitionWrongNoSubpart:                  Message(\"Wrong number of subpartitions defined, mismatch with previous setting\", nil),\n\tErrWrongExprInPartitionFunc:                 Message(\"Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed\", nil),\n\tErrNoConstExprInRangeOrList:                 Message(\"Expression in RANGE/LIST VALUES must be constant\", nil),\n\tErrFieldNotFoundPart:                        Message(\"Field in list of fields for partition function not found in table\", nil),\n\tErrListOfFieldsOnlyInHash:                   Message(\"List of fields is only allowed in KEY partitions\", nil),\n\tErrInconsistentPartitionInfo:                Message(\"The partition info in the frm file is not consistent with what can be written into the frm file\", nil),\n\tErrPartitionFuncNotAllowed:                  Message(\"The %-.192s function returns the wrong type\", nil),\n\tErrPartitionsMustBeDefined:                  Message(\"For %-.64s partitions each partition must be defined\", nil),\n\tErrRangeNotIncreasing:                       Message(\"VALUES LESS THAN value must be strictly increasing for each partition\", nil),\n\tErrInconsistentTypeOfFunctions:              Message(\"VALUES value must be of same type as partition function\", nil),\n\tErrMultipleDefConstInListPart:               Message(\"Multiple definition of same constant in list partitioning\", nil),\n\tErrPartitionEntry:                           Message(\"Partitioning can not be used stand-alone in query\", nil),\n\tErrMixHandler:                               Message(\"The mix of handlers in the partitions is not allowed in this version of MySQL\", nil),\n\tErrPartitionNotDefined:                      Message(\"For the partitioned engine it is necessary to define all %-.64s\", nil),\n\tErrTooManyPartitions:                        Message(\"Too many partitions (including subpartitions) were defined\", nil),\n\tErrSubpartition:                             Message(\"It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning\", nil),\n\tErrCantCreateHandlerFile:                    Message(\"Failed to create specific handler file\", nil),\n\tErrBlobFieldInPartFunc:                      Message(\"A BLOB field is not allowed in partition function\", nil),\n\tErrUniqueKeyNeedAllFieldsInPf:               Message(\"A %-.192s must include all columns in the table's partitioning function\", nil),\n\tErrNoParts:                                  Message(\"Number of %-.64s = 0 is not an allowed value\", nil),\n\tErrPartitionMgmtOnNonpartitioned:            Message(\"Partition management on a not partitioned table is not possible\", nil),\n\tErrForeignKeyOnPartitioned:                  Message(\"Foreign key clause is not yet supported in conjunction with partitioning\", nil),\n\tErrDropPartitionNonExistent:                 Message(\"Error in list of partitions to %-.64s\", nil),\n\tErrDropLastPartition:                        Message(\"Cannot remove all partitions, use DROP TABLE instead\", nil),\n\tErrCoalesceOnlyOnHashPartition:              Message(\"COALESCE PARTITION can only be used on HASH/KEY partitions\", nil),\n\tErrReorgHashOnlyOnSameNo:                    Message(\"REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers\", nil),\n\tErrReorgNoParam:                             Message(\"REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs\", nil),\n\tErrOnlyOnRangeListPartition:                 Message(\"%-.64s PARTITION can only be used on RANGE/LIST partitions\", nil),\n\tErrAddPartitionSubpart:                      Message(\"Trying to Add partition(s) with wrong number of subpartitions\", nil),\n\tErrAddPartitionNoNewPartition:               Message(\"At least one partition must be added\", nil),\n\tErrCoalescePartitionNoPartition:             Message(\"At least one partition must be coalesced\", nil),\n\tErrReorgPartitionNotExist:                   Message(\"More partitions to reorganize than there are partitions\", nil),\n\tErrSameNamePartition:                        Message(\"Duplicate partition name %-.192s\", nil),\n\tErrNoBinlog:                                 Message(\"It is not allowed to shut off binlog on this command\", nil),\n\tErrConsecutiveReorgPartitions:               Message(\"When reorganizing a set of partitions they must be in consecutive order\", nil),\n\tErrReorgOutsideRange:                        Message(\"Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range\", nil),\n\tErrPartitionFunctionFailure:                 Message(\"Partition function not supported in this version for this handler\", nil),\n\tErrPartState:                                Message(\"Partition state cannot be defined from CREATE/ALTER TABLE\", nil),\n\tErrLimitedPartRange:                         Message(\"The %-.64s handler only supports 32 bit integers in VALUES\", nil),\n\tErrPluginIsNotLoaded:                        Message(\"Plugin '%-.192s' is not loaded\", nil),\n\tErrWrongValue:                               Message(\"Incorrect %-.32s value: '%-.128s'\", nil),\n\tErrNoPartitionForGivenValue:                 Message(\"Table has no partition for value %-.64s\", nil),\n\tErrFilegroupOptionOnlyOnce:                  Message(\"It is not allowed to specify %s more than once\", nil),\n\tErrCreateFilegroupFailed:                    Message(\"Failed to create %s\", nil),\n\tErrDropFilegroupFailed:                      Message(\"Failed to drop %s\", nil),\n\tErrTablespaceAutoExtend:                     Message(\"The handler doesn't support autoextend of tablespaces\", nil),\n\tErrWrongSizeNumber:                          Message(\"A size parameter was incorrectly specified, either number or on the form 10M\", nil),\n\tErrSizeOverflow:                             Message(\"The size number was correct but we don't allow the digit part to be more than 2 billion\", nil),\n\tErrAlterFilegroupFailed:                     Message(\"Failed to alter: %s\", nil),\n\tErrBinlogRowLoggingFailed:                   Message(\"Writing one row to the row-based binary log failed\", nil),\n\tErrBinlogRowWrongTableDef:                   Message(\"Table definition on master and slave does not match: %s\", nil),\n\tErrBinlogRowRbrToSbr:                        Message(\"Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events\", nil),\n\tErrEventAlreadyExists:                       Message(\"Event '%-.192s' already exists\", nil),\n\tErrEventStoreFailed:                         Message(\"Failed to store event %s. Error code %d from storage engine.\", nil),\n\tErrEventDoesNotExist:                        Message(\"Unknown event '%-.192s'\", nil),\n\tErrEventCantAlter:                           Message(\"Failed to alter event '%-.192s'\", nil),\n\tErrEventDropFailed:                          Message(\"Failed to drop %s\", nil),\n\tErrEventIntervalNotPositiveOrTooBig:         Message(\"INTERVAL is either not positive or too big\", nil),\n\tErrEventEndsBeforeStarts:                    Message(\"ENDS is either invalid or before STARTS\", nil),\n\tErrEventExecTimeInThePast:                   Message(\"Event execution time is in the past. Event has been disabled\", nil),\n\tErrEventOpenTableFailed:                     Message(\"Failed to open mysql.event\", nil),\n\tErrEventNeitherMExprNorMAt:                  Message(\"No datetime expression provided\", nil),\n\tErrObsoleteColCountDoesntMatchCorrupted:     Message(\"Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted\", nil),\n\tErrObsoleteCannotLoadFromTable:              Message(\"Cannot load from mysql.%s. The table is probably corrupted\", nil),\n\tErrEventCannotDelete:                        Message(\"Failed to delete the event from mysql.event\", nil),\n\tErrEventCompile:                             Message(\"Error during compilation of event's body\", nil),\n\tErrEventSameName:                            Message(\"Same old and new event name\", nil),\n\tErrEventDataTooLong:                         Message(\"Data for column '%s' too long\", nil),\n\tErrDropIndexNeededInForeignKey:              Message(\"Cannot drop index '%-.192s': needed in a foreign key constraint\", nil),\n\tErrWarnDeprecatedSyntaxWithVer:              Message(\"The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead\", nil),\n\tErrCantWriteLockLogTable:                    Message(\"You can't write-lock a log table. Only read access is possible\", nil),\n\tErrCantLockLogTable:                         Message(\"You can't use locks with log tables.\", nil),\n\tErrForeignDuplicateKeyOldUnused:             Message(\"Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry\", nil),\n\tErrColCountDoesntMatchPleaseUpdate:          Message(\"Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysqlUpgrade to fix this error.\", nil),\n\tErrTempTablePreventsSwitchOutOfRbr:          Message(\"Cannot switch out of the row-based binary log format when the session has open temporary tables\", nil),\n\tErrStoredFunctionPreventsSwitchBinlogFormat: Message(\"Cannot change the binary logging format inside a stored function or trigger\", nil),\n\tErrNdbCantSwitchBinlogFormat:                Message(\"The NDB cluster engine does not support changing the binlog format on the fly yet\", nil),\n\tErrPartitionNoTemporary:                     Message(\"Cannot create temporary table with partitions\", nil),\n\tErrPartitionConstDomain:                     Message(\"Partition constant is out of partition function domain\", nil),\n\tErrPartitionFunctionIsNotAllowed:            Message(\"This partition function is not allowed\", nil),\n\tErrDdlLog:                                   Message(\"Error in DDL log\", nil),\n\tErrNullInValuesLessThan:                     Message(\"Not allowed to use NULL value in VALUES LESS THAN\", nil),\n\tErrWrongPartitionName:                       Message(\"Incorrect partition name\", nil),\n\tErrCantChangeTxCharacteristics:              Message(\"Transaction characteristics can't be changed while a transaction is in progress\", nil),\n\tErrDupEntryAutoincrementCase:                Message(\"ALTER TABLE causes autoIncrement resequencing, resulting in duplicate entry '%-.192s' for key '%-.192s'\", nil),\n\tErrEventModifyQueue:                         Message(\"Internal scheduler error %d\", nil),\n\tErrEventSetVar:                              Message(\"Error during starting/stopping of the scheduler. Error code %d\", nil),\n\tErrPartitionMerge:                           Message(\"Engine cannot be used in partitioned tables\", nil),\n\tErrCantActivateLog:                          Message(\"Cannot activate '%-.64s' log\", nil),\n\tErrRbrNotAvailable:                          Message(\"The server was not built with row-based replication\", nil),\n\tErrBase64Decode:                             Message(\"Decoding of base64 string failed\", nil),\n\tErrEventRecursionForbidden:                  Message(\"Recursion of EVENT DDL statements is forbidden when body is present\", nil),\n\tErrEventsDB:                                 Message(\"Cannot proceed because system tables used by Event Scheduler were found damaged at server start\", nil),\n\tErrOnlyIntegersAllowed:                      Message(\"Only integers allowed as number here\", nil),\n\tErrUnsuportedLogEngine:                      Message(\"This storage engine cannot be used for log tables\\\"\", nil),\n\tErrBadLogStatement:                          Message(\"You cannot '%s' a log table if logging is enabled\", nil),\n\tErrCantRenameLogTable:                       Message(\"Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'\", nil),\n\tErrWrongParamcountToNativeFct:               Message(\"Incorrect parameter count in the call to native function '%-.192s'\", nil),\n\tErrWrongParametersToNativeFct:               Message(\"Incorrect parameters in the call to native function '%-.192s'\", nil),\n\tErrWrongParametersToStoredFct:               Message(\"Incorrect parameters in the call to stored function '%-.192s'\", nil),\n\tErrNativeFctNameCollision:                   Message(\"This function '%-.192s' has the same name as a native function\", nil),\n\tErrDupEntryWithKeyName:                      Message(\"Duplicate entry '%-.64s' for key '%-.192s'\", nil),\n\tErrBinlogPurgeEmFile:                        Message(\"Too many files opened, please execute the command again\", nil),\n\tErrEventCannotCreateInThePast:               Message(\"Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.\", nil),\n\tErrEventCannotAlterInThePast:                Message(\"Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future.\", nil),\n\tErrSlaveIncident:                            Message(\"The incident %s occurred on the master. Message: %-.64s\", nil),\n\tErrNoPartitionForGivenValueSilent:           Message(\"Table has no partition for some existing values\", nil),\n\tErrBinlogUnsafeStatement:                    Message(\"Unsafe statement written to the binary log using statement format since BINLOGFORMAT = STATEMENT. %s\", nil),\n\tErrSlaveFatal:                               Message(\"Fatal : %s\", nil),\n\tErrSlaveRelayLogReadFailure:                 Message(\"Relay log read failure: %s\", nil),\n\tErrSlaveRelayLogWriteFailure:                Message(\"Relay log write failure: %s\", nil),\n\tErrSlaveCreateEventFailure:                  Message(\"Failed to create %s\", nil),\n\tErrSlaveMasterComFailure:                    Message(\"Master command %s failed: %s\", nil),\n\tErrBinlogLoggingImpossible:                  Message(\"Binary logging not possible. Message: %s\", nil),\n\tErrViewNoCreationCtx:                        Message(\"View `%-.64s`.`%-.64s` has no creation context\", nil),\n\tErrViewInvalidCreationCtx:                   Message(\"Creation context of view `%-.64s`.`%-.64s' is invalid\", nil),\n\tErrSrInvalidCreationCtx:                     Message(\"Creation context of stored routine `%-.64s`.`%-.64s` is invalid\", nil),\n\tErrTrgCorruptedFile:                         Message(\"Corrupted TRG file for table `%-.64s`.`%-.64s`\", nil),\n\tErrTrgNoCreationCtx:                         Message(\"Triggers for table `%-.64s`.`%-.64s` have no creation context\", nil),\n\tErrTrgInvalidCreationCtx:                    Message(\"Trigger creation context of table `%-.64s`.`%-.64s` is invalid\", nil),\n\tErrEventInvalidCreationCtx:                  Message(\"Creation context of event `%-.64s`.`%-.64s` is invalid\", nil),\n\tErrTrgCantOpenTable:                         Message(\"Cannot open table for trigger `%-.64s`.`%-.64s`\", nil),\n\tErrCantCreateSroutine:                       Message(\"Cannot create stored routine `%-.64s`. Check warnings\", nil),\n\tErrNeverUsed:                                Message(\"Ambiguous slave modes combination. %s\", nil),\n\tErrNoFormatDescriptionEventBeforeBinlogStatement:         Message(\"The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.\", nil),\n\tErrSlaveCorruptEvent:                                     Message(\"Corrupted replication event was detected\", nil),\n\tErrLoadDataInvalidColumn:                                 Message(\"Invalid column reference (%-.64s) in LOAD DATA\", nil),\n\tErrLogPurgeNoFile:                                        Message(\"Being purged log %s was not found\", nil),\n\tErrXaRbtimeout:                                           Message(\"XARBTIMEOUT: Transaction branch was rolled back: took too long\", nil),\n\tErrXaRbdeadlock:                                          Message(\"XARBDEADLOCK: Transaction branch was rolled back: deadlock was detected\", nil),\n\tErrNeedReprepare:                                         Message(\"Prepared statement needs to be re-prepared\", nil),\n\tErrDelayedNotSupported:                                   Message(\"DELAYED option not supported for table '%-.192s'\", nil),\n\tWarnNoMasterInfo:                                         Message(\"The master info structure does not exist\", nil),\n\tWarnOptionIgnored:                                        Message(\"<%-.64s> option ignored\", nil),\n\tWarnPluginDeleteBuiltin:                                  Message(\"Built-in plugins cannot be deleted\", nil),\n\tWarnPluginBusy:                                           Message(\"Plugin is busy and will be uninstalled on shutdown\", nil),\n\tErrVariableIsReadonly:                                    Message(\"%s variable '%s' is read-only. Use SET %s to assign the value\", nil),\n\tErrWarnEngineTransactionRollback:                         Message(\"Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted\", nil),\n\tErrSlaveHeartbeatFailure:                                 Message(\"Unexpected master's heartbeat data: %s\", nil),\n\tErrSlaveHeartbeatValueOutOfRange:                         Message(\"The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).\", nil),\n\tErrNdbReplicationSchema:                                  Message(\"Bad schema for mysql.ndbReplication table. Message: %-.64s\", nil),\n\tErrConflictFnParse:                                       Message(\"Error in parsing conflict function. Message: %-.64s\", nil),\n\tErrExceptionsWrite:                                       Message(\"Write to exceptions table failed. Message: %-.128s\\\"\", nil),\n\tErrTooLongTableComment:                                   Message(\"Comment for table '%-.64s' is too long (max = %d)\", nil),\n\tErrTooLongFieldComment:                                   Message(\"Comment for field '%-.64s' is too long (max = %d)\", nil),\n\tErrFuncInexistentNameCollision:                           Message(\"FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual\", nil),\n\tErrDatabaseName:                                          Message(\"Database\", nil),\n\tErrTableName:                                             Message(\"Table\", nil),\n\tErrPartitionName:                                         Message(\"Partition\", nil),\n\tErrSubpartitionName:                                      Message(\"Subpartition\", nil),\n\tErrTemporaryName:                                         Message(\"Temporary\", nil),\n\tErrRenamedName:                                           Message(\"Renamed\", nil),\n\tErrTooManyConcurrentTrxs:                                 Message(\"Too many active concurrent transactions\", nil),\n\tWarnNonASCIISeparatorNotImplemented:                      Message(\"Non-ASCII separator arguments are not fully supported\", nil),\n\tErrDebugSyncTimeout:                                      Message(\"debug sync point wait timed out\", nil),\n\tErrDebugSyncHitLimit:                                     Message(\"debug sync point hit limit reached\", nil),\n\tErrDupSignalSet:                                          Message(\"Duplicate condition information item '%s'\", nil),\n\tErrSignalWarn:                                            Message(\"Unhandled user-defined warning condition\", nil),\n\tErrSignalNotFound:                                        Message(\"Unhandled user-defined not found condition\", nil),\n\tErrSignalException:                                       Message(\"Unhandled user-defined exception condition\", nil),\n\tErrResignalWithoutActiveHandler:                          Message(\"RESIGNAL when handler not active\", nil),\n\tErrSignalBadConditionType:                                Message(\"SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE\", nil),\n\tWarnCondItemTruncated:                                    Message(\"Data truncated for condition item '%s'\", nil),\n\tErrCondItemTooLong:                                       Message(\"Data too long for condition item '%s'\", nil),\n\tErrUnknownLocale:                                         Message(\"Unknown locale: '%-.64s'\", nil),\n\tErrSlaveIgnoreServerIDs:                                  Message(\"The requested server id %d clashes with the slave startup option --replicate-same-server-id\", nil),\n\tErrQueryCacheDisabled:                                    Message(\"Query cache is disabled; restart the server with queryCacheType=1 to enable it\", nil),\n\tErrSameNamePartitionField:                                Message(\"Duplicate partition field name '%-.192s'\", nil),\n\tErrPartitionColumnList:                                   Message(\"Inconsistency in usage of column lists for partitioning\", nil),\n\tErrWrongTypeColumnValue:                                  Message(\"Partition column values of incorrect type\", nil),\n\tErrTooManyPartitionFuncFields:                            Message(\"Too many fields in '%-.192s'\", nil),\n\tErrMaxvalueInValuesIn:                                    Message(\"Cannot use MAXVALUE as value in VALUES IN\", nil),\n\tErrTooManyValues:                                         Message(\"Cannot have more than one value for this type of %-.64s partitioning\", nil),\n\tErrRowSinglePartitionField:                               Message(\"Row expressions in VALUES IN only allowed for multi-field column partitioning\", nil),\n\tErrFieldTypeNotAllowedAsPartitionField:                   Message(\"Field '%-.192s' is of a not allowed type for this type of partitioning\", nil),\n\tErrPartitionFieldsTooLong:                                Message(\"The total length of the partitioning fields is too large\", nil),\n\tErrBinlogRowEngineAndStmtEngine:                          Message(\"Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved.\", nil),\n\tErrBinlogRowModeAndStmtEngine:                            Message(\"Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = ROW and at least one table uses a storage engine limited to statement-based logging.\", nil),\n\tErrBinlogUnsafeAndStmtEngine:                             Message(\"Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOGFORMAT = MIXED. %s\", nil),\n\tErrBinlogRowInjectionAndStmtEngine:                       Message(\"Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging.\", nil),\n\tErrBinlogStmtModeAndRowEngine:                            Message(\"Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s\", nil),\n\tErrBinlogRowInjectionAndStmtMode:                         Message(\"Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOGFORMAT = STATEMENT.\", nil),\n\tErrBinlogMultipleEnginesAndSelfLoggingEngine:             Message(\"Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.\", nil),\n\tErrBinlogUnsafeLimit:                                     Message(\"The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.\", nil),\n\tErrBinlogUnsafeInsertDelayed:                             Message(\"The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.\", nil),\n\tErrBinlogUnsafeSystemTable:                               Message(\"The statement is unsafe because it uses the general log, slow query log, or performanceSchema table(s). This is unsafe because system tables may differ on slaves.\", nil),\n\tErrBinlogUnsafeAutoincColumns:                            Message(\"Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTOINCREMENT column. Inserted values cannot be logged correctly.\", nil),\n\tErrBinlogUnsafeUdf:                                       Message(\"Statement is unsafe because it uses a UDF which may not return the same value on the slave.\", nil),\n\tErrBinlogUnsafeSystemVariable:                            Message(\"Statement is unsafe because it uses a system variable that may have a different value on the slave.\", nil),\n\tErrBinlogUnsafeSystemFunction:                            Message(\"Statement is unsafe because it uses a system function that may return a different value on the slave.\", nil),\n\tErrBinlogUnsafeNontransAfterTrans:                        Message(\"Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.\", nil),\n\tErrMessageAndStatement:                                   Message(\"%s Statement: %s\", nil),\n\tErrSlaveConversionFailed:                                 Message(\"Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'\", nil),\n\tErrSlaveCantCreateConversion:                             Message(\"Can't create conversion table for table '%-.192s.%-.192s'\", nil),\n\tErrInsideTransactionPreventsSwitchBinlogFormat:           Message(\"Cannot modify @@session.binlogFormat inside a transaction\", nil),\n\tErrPathLength:                                            Message(\"The path specified for %.64s is too long.\", nil),\n\tErrWarnDeprecatedSyntaxNoReplacement:                     Message(\"%s is deprecated and will be removed in a future release.%s\", nil),\n\tErrWrongNativeTableStructure:                             Message(\"Native table '%-.64s'.'%-.64s' has the wrong structure\", nil),\n\tErrWrongPerfSchemaUsage:                                  Message(\"Invalid performanceSchema usage.\", nil),\n\tErrWarnISSkippedTable:                                    Message(\"Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement\", nil),\n\tErrInsideTransactionPreventsSwitchBinlogDirect:           Message(\"Cannot modify @@session.binlogDirectNonTransactionalUpdates inside a transaction\", nil),\n\tErrStoredFunctionPreventsSwitchBinlogDirect:              Message(\"Cannot change the binlog direct flag inside a stored function or trigger\", nil),\n\tErrSpatialMustHaveGeomCol:                                Message(\"A SPATIAL index may only contain a geometrical type column\", nil),\n\tErrTooLongIndexComment:                                   Message(\"Comment for index '%-.64s' is too long (max = %d)\", nil),\n\tErrLockAborted:                                           Message(\"Wait on a lock was aborted due to a pending exclusive lock\", nil),\n\tErrDataOutOfRange:                                        Message(\"%s value is out of range in '%s'\", nil),\n\tErrWrongSpvarTypeInLimit:                                 Message(\"A variable of a non-integer based type in LIMIT clause\", nil),\n\tErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine:       Message(\"Mixing self-logging and non-self-logging engines in a statement is unsafe.\", nil),\n\tErrBinlogUnsafeMixedStatement:                            Message(\"Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.\", nil),\n\tErrInsideTransactionPreventsSwitchSQLLogBin:              Message(\"Cannot modify @@session.sqlLogBin inside a transaction\", nil),\n\tErrStoredFunctionPreventsSwitchSQLLogBin:                 Message(\"Cannot change the sqlLogBin inside a stored function or trigger\", nil),\n\tErrFailedReadFromParFile:                                 Message(\"Failed to read from the .par file\", nil),\n\tErrValuesIsNotIntType:                                    Message(\"VALUES value for partition '%-.64s' must have type INT\", nil),\n\tErrAccessDeniedNoPassword:                                Message(\"Access denied for user '%-.48s'@'%-.64s'\", nil),\n\tErrSetPasswordAuthPlugin:                                 Message(\"SET PASSWORD has no significance for user '%-.48s'@'%-.255s' as authentication plugin does not support it.\", nil),\n\tErrGrantPluginUserExists:                                 Message(\"GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists\", nil),\n\tErrTruncateIllegalForeignKey:                             Message(\"Cannot truncate a table referenced in a foreign key constraint (%.192s)\", nil),\n\tErrPluginIsPermanent:                                     Message(\"Plugin '%s' is forcePlusPermanent and can not be unloaded\", nil),\n\tErrSlaveHeartbeatValueOutOfRangeMin:                      Message(\"The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.\", nil),\n\tErrSlaveHeartbeatValueOutOfRangeMax:                      Message(\"The requested value for the heartbeat period exceeds the value of `slaveNetTimeout' seconds. A sensible value for the period should be less than the timeout.\", nil),\n\tErrStmtCacheFull:                                         Message(\"Multi-row statements required more than 'maxBinlogStmtCacheSize' bytes of storage; increase this mysqld variable and try again\", nil),\n\tErrMultiUpdateKeyConflict:                                Message(\"Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'.\", nil),\n\tErrTableNeedsRebuild:                                     Message(\"Table rebuild required. Please do \\\"ALTER TABLE `%-.32s` FORCE\\\" or dump/reload to fix it!\", nil),\n\tWarnOptionBelowLimit:                                     Message(\"The value of '%s' should be no less than the value of '%s'\", nil),\n\tErrIndexColumnTooLong:                                    Message(\"Index column size too large. The maximum column size is %d bytes.\", nil),\n\tErrErrorInTriggerBody:                                    Message(\"Trigger '%-.64s' has an error in its body: '%-.256s'\", nil),\n\tErrErrorInUnknownTriggerBody:                             Message(\"Unknown trigger has an error in its body: '%-.256s'\", nil),\n\tErrIndexCorrupt:                                          Message(\"Index %s is corrupted\", nil),\n\tErrUndoRecordTooBig:                                      Message(\"Undo log record is too big.\", nil),\n\tErrBinlogUnsafeInsertIgnoreSelect:                        Message(\"INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrBinlogUnsafeInsertSelectUpdate:                        Message(\"INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrBinlogUnsafeReplaceSelect:                             Message(\"REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrBinlogUnsafeCreateIgnoreSelect:                        Message(\"CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrBinlogUnsafeCreateReplaceSelect:                       Message(\"CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrBinlogUnsafeUpdateIgnore:                              Message(\"UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrPluginNoUninstall:                                     Message(\"Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it.\", nil),\n\tErrPluginNoInstall:                                       Message(\"Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it.\", nil),\n\tErrBinlogUnsafeWriteAutoincSelect:                        Message(\"Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrBinlogUnsafeCreateSelectAutoinc:                       Message(\"CREATE TABLE... SELECT...  on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave.\", nil),\n\tErrBinlogUnsafeInsertTwoKeys:                             Message(\"INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe\", nil),\n\tErrTableInFkCheck:                                        Message(\"Table is being used in foreign key check.\", nil),\n\tErrUnsupportedEngine:                                     Message(\"Storage engine '%s' does not support system tables. [%s.%s]\", nil),\n\tErrBinlogUnsafeAutoincNotFirst:                           Message(\"INSERT into autoincrement field which is not the first part in the composed primary key is unsafe.\", nil),\n\tErrCannotLoadFromTableV2:                                 Message(\"Cannot load from %s.%s. The table is probably corrupted\", nil),\n\tErrMasterDelayValueOutOfRange:                            Message(\"The requested value %d for the master delay exceeds the maximum %d\", nil),\n\tErrOnlyFdAndRbrEventsAllowedInBinlogStatement:            Message(\"Only FormatDescriptionLogEvent and row events are allowed in BINLOG statements (but %s was provided)\", nil),\n\tErrPartitionExchangeDifferentOption:                      Message(\"Non matching attribute '%-.64s' between partition and table\", nil),\n\tErrPartitionExchangePartTable:                            Message(\"Table to exchange with partition is partitioned: '%-.64s'\", nil),\n\tErrPartitionExchangeTempTable:                            Message(\"Table to exchange with partition is temporary: '%-.64s'\", nil),\n\tErrPartitionInsteadOfSubpartition:                        Message(\"Subpartitioned table, use subpartition instead of partition\", nil),\n\tErrUnknownPartition:                                      Message(\"Unknown partition '%-.64s' in table '%-.64s'\", nil),\n\tErrTablesDifferentMetadata:                               Message(\"Tables have different definitions\", nil),\n\tErrRowDoesNotMatchPartition:                              Message(\"Found a row that does not match the partition\", nil),\n\tErrBinlogCacheSizeGreaterThanMax:                         Message(\"Option binlogCacheSize (%d) is greater than maxBinlogCacheSize (%d); setting binlogCacheSize equal to maxBinlogCacheSize.\", nil),\n\tErrWarnIndexNotApplicable:                                Message(\"Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'\", nil),\n\tErrPartitionExchangeForeignKey:                           Message(\"Table to exchange with partition has foreign key references: '%-.64s'\", nil),\n\tErrNoSuchKeyValue:                                        Message(\"Key value '%-.192s' was not found in table '%-.192s.%-.192s'\", nil),\n\tErrRplInfoDataTooLong:                                    Message(\"Data for column '%s' too long\", nil),\n\tErrNetworkReadEventChecksumFailure:                       Message(\"Replication event checksum verification failed while reading from network.\", nil),\n\tErrBinlogReadEventChecksumFailure:                        Message(\"Replication event checksum verification failed while reading from a log file.\", nil),\n\tErrBinlogStmtCacheSizeGreaterThanMax:                     Message(\"Option binlogStmtCacheSize (%d) is greater than maxBinlogStmtCacheSize (%d); setting binlogStmtCacheSize equal to maxBinlogStmtCacheSize.\", nil),\n\tErrCantUpdateTableInCreateTableSelect:                    Message(\"Can't update table '%-.192s' while '%-.192s' is being created.\", nil),\n\tErrPartitionClauseOnNonpartitioned:                       Message(\"PARTITION () clause on non partitioned table\", nil),\n\tErrRowDoesNotMatchGivenPartitionSet:                      Message(\"Found a row not matching the given partition set\", nil),\n\tErrNoSuchPartitionunused:                                 Message(\"partition '%-.64s' doesn't exist\", nil),\n\tErrChangeRplInfoRepositoryFailure:                        Message(\"Failure while changing the type of replication repository: %s.\", nil),\n\tErrWarningNotCompleteRollbackWithCreatedTempTable:        Message(\"The creation of some temporary tables could not be rolled back.\", nil),\n\tErrWarningNotCompleteRollbackWithDroppedTempTable:        Message(\"Some temporary tables were dropped, but these operations could not be rolled back.\", nil),\n\tErrMtsFeatureIsNotSupported:                              Message(\"%s is not supported in multi-threaded slave mode. %s\", nil),\n\tErrMtsUpdatedDBsGreaterMax:                               Message(\"The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata.\", nil),\n\tErrMtsCantParallel:                                       Message(\"Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s.\", nil),\n\tErrMtsInconsistentData:                                   Message(\"%s\", nil),\n\tErrFulltextNotSupportedWithPartitioning:                  Message(\"FULLTEXT index is not supported for partitioned tables.\", nil),\n\tErrDaInvalidConditionNumber:                              Message(\"Invalid condition number\", nil),\n\tErrInsecurePlainText:                                     Message(\"Sending passwords in plain text without SSL/TLS is extremely insecure.\", nil),\n\tErrInsecureChangeMaster:                                  Message(\"Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.\", nil),\n\tErrForeignDuplicateKeyWithChildInfo:                      Message(\"Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'\", nil),\n\tErrForeignDuplicateKeyWithoutChildInfo:                   Message(\"Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table\", nil),\n\tErrSQLthreadWithSecureSlave:                              Message(\"Setting authentication options is not possible when only the Slave SQL Thread is being started.\", nil),\n\tErrTableHasNoFt:                                          Message(\"The table does not have FULLTEXT index to support this query\", nil),\n\tErrVariableNotSettableInSfOrTrigger:                      Message(\"The system variable %.200s cannot be set in stored functions or triggers.\", nil),\n\tErrVariableNotSettableInTransaction:                      Message(\"The system variable %.200s cannot be set when there is an ongoing transaction.\", nil),\n\tErrGtidNextIsNotInGtidNextList:                           Message(\"The system variable @@SESSION.GTIDNEXT has the value %.200s, which is not listed in @@SESSION.GTIDNEXTLIST.\", nil),\n\tErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull: Message(\"When @@SESSION.GTIDNEXTLIST == NULL, the system variable @@SESSION.GTIDNEXT cannot change inside a transaction.\", nil),\n\tErrSetStatementCannotInvokeFunction:                      Message(\"The statement 'SET %.200s' cannot invoke a stored function.\", nil),\n\tErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull:        Message(\"The system variable @@SESSION.GTIDNEXT cannot be 'AUTOMATIC' when @@SESSION.GTIDNEXTLIST is non-NULL.\", nil),\n\tErrSkippingLoggedTransaction:                             Message(\"Skipping transaction %.200s because it has already been executed and logged.\", nil),\n\tErrMalformedGtidSetSpecification:                         Message(\"Malformed GTID set specification '%.200s'.\", nil),\n\tErrMalformedGtidSetEncoding:                              Message(\"Malformed GTID set encoding.\", nil),\n\tErrMalformedGtidSpecification:                            Message(\"Malformed GTID specification '%.200s'.\", nil),\n\tErrGnoExhausted:                                          Message(\"Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new serverUuid.\", nil),\n\tErrBadSlaveAutoPosition:                                  Message(\"Parameters MASTERLOGFILE, MASTERLOGPOS, RELAYLOGFILE and RELAYLOGPOS cannot be set when MASTERAUTOPOSITION is active.\", nil),\n\tErrAutoPositionRequiresGtidModeOn:                        Message(\"CHANGE MASTER TO MASTERAUTOPOSITION = 1 can only be executed when @@GLOBAL.GTIDMODE = ON.\", nil),\n\tErrCantDoImplicitCommitInTrxWhenGtidNextIsSet:            Message(\"Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTIDNEXT != AUTOMATIC or @@SESSION.GTIDNEXTLIST != NULL.\", nil),\n\tErrGtidMode2Or3RequiresEnforceGtidConsistencyOn:          Message(\"@@GLOBAL.GTIDMODE = ON or UPGRADESTEP2 requires @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.\", nil),\n\tErrGtidModeRequiresBinlog:                                Message(\"@@GLOBAL.GTIDMODE = ON or UPGRADESTEP1 or UPGRADESTEP2 requires --log-bin and --log-slave-updates.\", nil),\n\tErrCantSetGtidNextToGtidWhenGtidModeIsOff:                Message(\"@@SESSION.GTIDNEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTIDMODE = OFF.\", nil),\n\tErrCantSetGtidNextToAnonymousWhenGtidModeIsOn:            Message(\"@@SESSION.GTIDNEXT cannot be set to ANONYMOUS when @@GLOBAL.GTIDMODE = ON.\", nil),\n\tErrCantSetGtidNextListToNonNullWhenGtidModeIsOff:         Message(\"@@SESSION.GTIDNEXTLIST cannot be set to a non-NULL value when @@GLOBAL.GTIDMODE = OFF.\", nil),\n\tErrFoundGtidEventWhenGtidModeIsOff:                       Message(\"Found a GtidLogEvent or PreviousGtidsLogEvent when @@GLOBAL.GTIDMODE = OFF.\", nil),\n\tErrGtidUnsafeNonTransactionalTable:                       Message(\"When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.\", nil),\n\tErrGtidUnsafeCreateSelect:                                Message(\"CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.\", nil),\n\tErrGtidUnsafeCreateDropTemporaryTableInTransaction:       Message(\"When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.\", nil),\n\tErrGtidModeCanOnlyChangeOneStepAtATime:                   Message(\"The value of @@GLOBAL.GTIDMODE can only change one step at a time: OFF <-> UPGRADESTEP1 <-> UPGRADESTEP2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.\", nil),\n\tErrMasterHasPurgedRequiredGtids:                          Message(\"The slave is connecting using CHANGE MASTER TO MASTERAUTOPOSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.\", nil),\n\tErrCantSetGtidNextWhenOwningGtid:                         Message(\"@@SESSION.GTIDNEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK.\", nil),\n\tErrUnknownExplainFormat:                                  Message(\"Unknown EXPLAIN format name: '%s'\", nil),\n\tErrCantExecuteInReadOnlyTransaction:                      Message(\"Cannot execute statement in a READ ONLY transaction.\", nil),\n\tErrTooLongTablePartitionComment:                          Message(\"Comment for table partition '%-.64s' is too long (max = %d)\", nil),\n\tErrSlaveConfiguration:                                    Message(\"Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.\", nil),\n\tErrInnodbFtLimit:                                         Message(\"InnoDB presently supports one FULLTEXT index creation at a time\", nil),\n\tErrInnodbNoFtTempTable:                                   Message(\"Cannot create FULLTEXT index on temporary InnoDB table\", nil),\n\tErrInnodbFtWrongDocidColumn:                              Message(\"Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index\", nil),\n\tErrInnodbFtWrongDocidIndex:                               Message(\"Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index\", nil),\n\tErrInnodbOnlineLogTooBig:                                 Message(\"Creating index '%-.192s' required more than 'innodbOnlineAlterLogMaxSize' bytes of modification log. Please try again.\", nil),\n\tErrUnknownAlterAlgorithm:                                 Message(\"Unknown ALGORITHM '%s'\", nil),\n\tErrUnknownAlterLock:                                      Message(\"Unknown LOCK type '%s'\", nil),\n\tErrMtsChangeMasterCantRunWithGaps:                        Message(\"CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL.\", nil),\n\tErrMtsRecoveryFailure:                                    Message(\"Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log.\", nil),\n\tErrMtsResetWorkers:                                       Message(\"Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log.\", nil),\n\tErrColCountDoesntMatchCorruptedV2:                        Message(\"Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted\", nil),\n\tErrSlaveSilentRetryTransaction:                           Message(\"Slave must silently retry current transaction\", nil),\n\tErrDiscardFkChecksRunning:                                Message(\"There is a foreign key check running on table '%-.192s'. Cannot discard the table.\", nil),\n\tErrTableSchemaMismatch:                                   Message(\"Schema mismatch (%s)\", nil),\n\tErrTableInSystemTablespace:                               Message(\"Table '%-.192s' in system tablespace\", nil),\n\tErrIoRead:                                                Message(\"IO Read : (%d, %s) %s\", nil),\n\tErrIoWrite:                                               Message(\"IO Write : (%d, %s) %s\", nil),\n\tErrTablespaceMissing:                                     Message(\"Tablespace is missing for table '%-.192s'\", nil),\n\tErrTablespaceExists:                                      Message(\"Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT.\", nil),\n\tErrTablespaceDiscarded:                                   Message(\"Tablespace has been discarded for table '%-.192s'\", nil),\n\tErrInternal:                                              Message(\"Internal : %s\", nil),\n\tErrInnodbImport:                                          Message(\"ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %d : '%s'\", nil),\n\tErrInnodbIndexCorrupt:                                    Message(\"Index corrupt: %s\", nil),\n\tErrInvalidYearColumnLength:                               Message(\"Supports only YEAR or YEAR(4) column\", nil),\n\tErrNotValidPassword:                                      Message(\"Your password does not satisfy the current policy requirements (%s)\", nil),\n\tErrMustChangePassword:                                    Message(\"You must SET PASSWORD before executing this statement\", nil),\n\tErrFkNoIndexChild:                                        Message(\"Failed to add the foreign key constraint. Missing index for constraint '%s' in the foreign table '%s'\", nil),\n\tErrForeignKeyNoIndexInParent:                             Message(\"Failed to add the foreign key constraint. Missing index for constraint '%s' in the referenced table '%s'\", nil),\n\tErrFkFailAddSystem:                                       Message(\"Failed to add the foreign key constraint '%s' to system tables\", nil),\n\tErrForeignKeyCannotOpenParent:                            Message(\"Failed to open the referenced table '%s'\", nil),\n\tErrFkIncorrectOption:                                     Message(\"Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'\", nil),\n\tErrFkDupName:                                             Message(\"Duplicate foreign key constraint name '%s'\", nil),\n\tErrPasswordFormat:                                        Message(\"The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.\", nil),\n\tErrFkColumnCannotDrop:                                    Message(\"Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'\", nil),\n\tErrFkColumnCannotDropChild:                               Message(\"Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table '%-.192s'\", nil),\n\tErrForeignKeyColumnNotNull:                               Message(\"Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL\", nil),\n\tErrDupIndex:                                              Message(\"Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release.\", nil),\n\tErrForeignKeyColumnCannotChange:                          Message(\"Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'\", nil),\n\tErrForeignKeyColumnCannotChangeChild:                     Message(\"Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'\", nil),\n\tErrFkCannotDeleteParent:                                  Message(\"Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'\", nil),\n\tErrMalformedPacket:                                       Message(\"Malformed communication packet.\", nil),\n\tErrReadOnlyMode:                                          Message(\"Running in read-only mode\", nil),\n\tErrGtidNextTypeUndefinedGroup:                            Message(\"When @@SESSION.GTIDNEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET @@SESSION.GTIDNEXT before a transaction and forgot to set @@SESSION.GTIDNEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current @@SESSION.GTIDNEXT is '%s'.\", nil),\n\tErrVariableNotSettableInSp:                               Message(\"The system variable %.200s cannot be set in stored procedures.\", nil),\n\tErrCantSetGtidPurgedWhenGtidModeIsOff:                    Message(\"@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDMODE = ON.\", nil),\n\tErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty:           Message(\"@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDEXECUTED is empty.\", nil),\n\tErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty:             Message(\"@@GLOBAL.GTIDPURGED can only be set when there are no ongoing transactions (not even in other clients).\", nil),\n\tErrGtidPurgedWasChanged:                                  Message(\"@@GLOBAL.GTIDPURGED was changed from '%s' to '%s'.\", nil),\n\tErrGtidExecutedWasChanged:                                Message(\"@@GLOBAL.GTIDEXECUTED was changed from '%s' to '%s'.\", nil),\n\tErrBinlogStmtModeAndNoReplTables:                         Message(\"Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT, and both replicated and non replicated tables are written to.\", nil),\n\tErrAlterOperationNotSupported:                            Message(\"%s is not supported for this operation. Try %s.\", nil),\n\tErrAlterOperationNotSupportedReason:                      Message(\"%s is not supported. Reason: %s. Try %s.\", nil),\n\tErrAlterOperationNotSupportedReasonCopy:                  Message(\"COPY algorithm requires a lock\", nil),\n\tErrAlterOperationNotSupportedReasonPartition:             Message(\"Partition specific operations do not yet support LOCK/ALGORITHM\", nil),\n\tErrAlterOperationNotSupportedReasonFkRename:              Message(\"Columns participating in a foreign key are renamed\", nil),\n\tErrAlterOperationNotSupportedReasonColumnType:            Message(\"Cannot change column type INPLACE\", nil),\n\tErrAlterOperationNotSupportedReasonFkCheck:               Message(\"Adding foreign keys needs foreignKeyChecks=OFF\", nil),\n\tErrAlterOperationNotSupportedReasonIgnore:                Message(\"Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows\", nil),\n\tErrAlterOperationNotSupportedReasonNopk:                  Message(\"Dropping a primary key is not allowed without also adding a new primary key\", nil),\n\tErrAlterOperationNotSupportedReasonAutoinc:               Message(\"Adding an auto-increment column requires a lock\", nil),\n\tErrAlterOperationNotSupportedReasonHiddenFts:             Message(\"Cannot replace hidden FTSDOCID with a user-visible one\", nil),\n\tErrAlterOperationNotSupportedReasonChangeFts:             Message(\"Cannot drop or rename FTSDOCID\", nil),\n\tErrAlterOperationNotSupportedReasonFts:                   Message(\"Fulltext index creation requires a lock\", nil),\n\tErrSQLSlaveSkipCounterNotSettableInGtidMode:              Message(\"sqlSlaveSkipCounter can not be set when the server is running with @@GLOBAL.GTIDMODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction\", nil),\n\tErrDupUnknownInIndex:                                     Message(\"Duplicate entry for key '%-.192s'\", nil),\n\tErrIdentCausesTooLongPath:                                Message(\"Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'.\", nil),\n\tErrAlterOperationNotSupportedReasonNotNull:               Message(\"cannot silently convert NULL values, as required in this SQLMODE\", nil),\n\tErrMustChangePasswordLogin:                               Message(\"Your password has expired. To log in you must change it using a client that supports expired passwords.\", nil),\n\tErrRowInWrongPartition:                                   Message(\"Found a row in wrong partition %s\", nil),\n\tErrGeneratedColumnFunctionIsNotAllowed:                   Message(\"Expression of generated column '%s' contains a disallowed function.\", nil),\n\tErrUnsupportedAlterInplaceOnVirtualColumn:                Message(\"INPLACE ADD or DROP of virtual columns cannot be combined with other ALTER TABLE actions.\", nil),\n\tErrWrongFKOptionForGeneratedColumn:                       Message(\"Cannot define foreign key with %s clause on a generated column.\", nil),\n\tErrBadGeneratedColumn:                                    Message(\"The value specified for generated column '%s' in table '%s' is not allowed.\", nil),\n\tErrUnsupportedOnGeneratedColumn:                          Message(\"'%s' is not supported for generated columns.\", nil),\n\tErrGeneratedColumnNonPrior:                               Message(\"Generated column can refer only to generated columns defined prior to it.\", nil),\n\tErrDependentByGeneratedColumn:                            Message(\"Column '%s' has a generated column dependency.\", nil),\n\tErrGeneratedColumnRefAutoInc:                             Message(\"Generated column '%s' cannot refer to auto-increment column.\", nil),\n\tErrInvalidFieldSize:                                      Message(\"Invalid size for column '%s'.\", nil),\n\tErrPasswordExpireAnonymousUser:                           Message(\"The password for anonymous user cannot be expired.\", nil),\n\tErrIncorrectType:                                         Message(\"Incorrect type for argument %s in function %s.\", nil),\n\tErrInvalidJSONData:                                       Message(\"Invalid JSON data provided to function %s: %s\", nil),\n\tErrInvalidJSONText:                                       Message(\"Invalid JSON text: %-.192s\", nil),\n\tErrInvalidJSONTextInParam:                                Message(\"Invalid JSON text in argument %d to function %s: \\\"%s\\\" at position %d.\", nil),\n\tErrInvalidJSONPath:                                       Message(\"Invalid JSON path expression %s.\", nil),\n\tErrInvalidTypeForJSON:                                    Message(\"Invalid data type for JSON data in argument %d to function %s; a JSON string or JSON type is required.\", nil),\n\tErrInvalidJSONPathWildcard:                               Message(\"In this situation, path expressions may not contain the * and ** tokens or an array range.\", nil),\n\tErrInvalidJSONContainsPathType:                           Message(\"The second argument can only be either 'one' or 'all'.\", nil),\n\tErrJSONUsedAsKey:                                         Message(\"JSON column '%-.192s' cannot be used in key specification.\", nil),\n\tErrJSONDocumentTooDeep:                                   Message(\"The JSON document exceeds the maximum depth.\", nil),\n\tErrJSONDocumentNULLKey:                                   Message(\"JSON documents may not contain NULL member names.\", nil),\n\tErrBadUser:                                               Message(\"User %s does not exist.\", nil),\n\tErrUserAlreadyExists:                                     Message(\"User %s already exists.\", nil),\n\tErrInvalidJSONPathArrayCell:                              Message(\"A path expression is not a path to a cell in an array.\", nil),\n\tErrInvalidEncryptionOption:                               Message(\"Invalid encryption option.\", nil),\n\tErrWindowNoSuchWindow:                                    Message(\"Window name '%s' is not defined.\", nil),\n\tErrWindowCircularityInWindowGraph:                        Message(\"There is a circularity in the window dependency graph.\", nil),\n\tErrWindowNoChildPartitioning:                             Message(\"A window which depends on another cannot define partitioning.\", nil),\n\tErrWindowNoInherentFrame:                                 Message(\"Window '%s' has a frame definition, so cannot be referenced by another window.\", nil),\n\tErrWindowNoRedefineOrderBy:                               Message(\"Window '%s' cannot inherit '%s' since both contain an ORDER BY clause.\", nil),\n\tErrWindowFrameStartIllegal:                               Message(\"Window '%s': frame start cannot be UNBOUNDED FOLLOWING.\", nil),\n\tErrWindowFrameEndIllegal:                                 Message(\"Window '%s': frame end cannot be UNBOUNDED PRECEDING.\", nil),\n\tErrWindowFrameIllegal:                                    Message(\"Window '%s': frame start or end is negative, NULL or of non-integral type\", nil),\n\tErrWindowRangeFrameOrderType:                             Message(\"Window '%s' with RANGE N PRECEDING/FOLLOWING frame requires exactly one ORDER BY expression, of numeric or temporal type\", nil),\n\tErrWindowRangeFrameTemporalType:                          Message(\"Window '%s' with RANGE frame has ORDER BY expression of datetime type. Only INTERVAL bound value allowed.\", nil),\n\tErrWindowRangeFrameNumericType:                           Message(\"Window '%s' with RANGE frame has ORDER BY expression of numeric type, INTERVAL bound value not allowed.\", nil),\n\tErrWindowRangeBoundNotConstant:                           Message(\"Window '%s' has a non-constant frame bound.\", nil),\n\tErrWindowDuplicateName:                                   Message(\"Window '%s' is defined twice.\", nil),\n\tErrWindowIllegalOrderBy:                                  Message(\"Window '%s': ORDER BY or PARTITION BY uses legacy position indication which is not supported, use expression.\", nil),\n\tErrWindowInvalidWindowFuncUse:                            Message(\"You cannot use the window function '%s' in this context.'\", nil),\n\tErrWindowInvalidWindowFuncAliasUse:                       Message(\"You cannot use the alias '%s' of an expression containing a window function in this context.'\", nil),\n\tErrWindowNestedWindowFuncUseInWindowSpec:                 Message(\"You cannot nest a window function in the specification of window '%s'.\", nil),\n\tErrWindowRowsIntervalUse:                                 Message(\"Window '%s': INTERVAL can only be used with RANGE frames.\", nil),\n\tErrWindowNoGroupOrderUnused:                              Message(\"ASC or DESC with GROUP BY isn't allowed with window functions; put ASC or DESC in ORDER BY\", nil),\n\tErrWindowExplainJson:                                     Message(\"To get information about window functions use EXPLAIN FORMAT=JSON\", nil),\n\tErrWindowFunctionIgnoresFrame:                            Message(\"Window function '%s' ignores the frame clause of window '%s' and aggregates over the whole partition\", nil),\n\tErrRoleNotGranted:                                        Message(\"%s is not granted to %s\", nil),\n\tErrMaxExecTimeExceeded:                                   Message(\"Query execution was interrupted, maximum statement execution time exceeded\", nil),\n\tErrLockAcquireFailAndNoWaitSet:                           Message(\"Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.\", nil),\n\tErrDataTruncatedFunctionalIndex:                          Message(\"Data truncated for functional index '%s' at row %d\", nil),\n\tErrDataOutOfRangeFunctionalIndex:                         Message(\"Value is out of range for functional index '%s' at row %d\", nil),\n\tErrFunctionalIndexOnJsonOrGeometryFunction:               Message(\"Cannot create a functional index on a function that returns a JSON or GEOMETRY value\", nil),\n\tErrFunctionalIndexRefAutoIncrement:                       Message(\"Functional index '%s' cannot refer to an auto-increment column\", nil),\n\tErrCannotDropColumnFunctionalIndex:                       Message(\"Cannot drop column '%s' because it is used by a functional index. In order to drop the column, you must remove the functional index\", nil),\n\tErrFunctionalIndexPrimaryKey:                             Message(\"The primary key cannot be a functional index\", nil),\n\tErrFunctionalIndexOnLob:                                  Message(\"Cannot create a functional index on an expression that returns a BLOB or TEXT. Please consider using CAST\", nil),\n\tErrFunctionalIndexFunctionIsNotAllowed:                   Message(\"Expression of functional index '%s' contains a disallowed function\", nil),\n\tErrFulltextFunctionalIndex:                               Message(\"Fulltext functional index is not supported\", nil),\n\tErrSpatialFunctionalIndex:                                Message(\"Spatial functional index is not supported\", nil),\n\tErrWrongKeyColumnFunctionalIndex:                         Message(\"The used storage engine cannot index the expression '%s'\", nil),\n\tErrFunctionalIndexOnField:                                Message(\"Functional index on a column is not supported. Consider using a regular index instead\", nil),\n\tErrFKIncompatibleColumns:                                 Message(\"Referencing column '%s' and referenced column '%s' in foreign key constraint '%s' are incompatible.\", nil),\n\tErrFunctionalIndexRowValueIsNotAllowed:                   Message(\"Expression of functional index '%s' cannot refer to a row value\", nil),\n\tErrDependentByFunctionalIndex:                            Message(\"Column '%s' has a functional index dependency and cannot be dropped or renamed\", nil),\n\tErrInvalidJSONType:                                       Message(\"Invalid JSON type in argument %d to function %s; an %s is required.\", nil),\n\tErrInvalidJsonValueForFuncIndex:                          Message(\"Invalid JSON value for CAST for functional index '%s'\", nil),\n\tErrJsonValueOutOfRangeForFuncIndex:                       Message(\"Out of range JSON value for CAST for functional index '%s'\", nil),\n\tErrFunctionalIndexDataIsTooLong:                          Message(\"Data too long for functional index '%s'\", nil),\n\tErrFunctionalIndexNotApplicable:                          Message(\"Cannot use functional index '%s' due to type or collation conversion\", nil),\n\n\t// MariaDB errors.\n\tErrOnlyOneDefaultPartionAllowed:         Message(\"Only one DEFAULT partition allowed\", nil),\n\tErrWrongPartitionTypeExpectedSystemTime: Message(\"Wrong partitioning type, expected type: `SYSTEM_TIME`\", nil),\n\tErrSystemVersioningWrongPartitions:      Message(\"Wrong Partitions: must have at least one HISTORY and exactly one last CURRENT\", nil),\n\tErrSequenceRunOut:                       Message(\"Sequence '%-.64s.%-.64s' has run out\", nil),\n\tErrSequenceInvalidData:                  Message(\"Sequence '%-.64s.%-.64s' values are conflicting\", nil),\n\tErrSequenceAccessFail:                   Message(\"Sequence '%-.64s.%-.64s' access error\", nil),\n\tErrNotSequence:                          Message(\"'%-.64s.%-.64s' is not a SEQUENCE\", nil),\n\tErrUnknownSequence:                      Message(\"Unknown SEQUENCE: '%-.300s'\", nil),\n\tErrWrongInsertIntoSequence:              Message(\"Wrong INSERT into a SEQUENCE. One can only do single table INSERT into a sequence object (like with mysqldump).  If you want to change the SEQUENCE, use ALTER SEQUENCE instead.\", nil),\n\tErrSequenceInvalidTableStructure:        Message(\"Sequence '%-.64s.%-.64s' table structure is invalid (%s)\", nil),\n\n\t// TiDB errors.\n\tErrWarnOptimizerHintInvalidInteger:  Message(\"integer value is out of range in '%s'\", nil),\n\tErrWarnOptimizerHintUnsupportedHint: Message(\"Optimizer hint %s is not supported by TiDB and is ignored\", nil),\n\tErrWarnOptimizerHintInvalidToken:    Message(\"Cannot use %s '%s' (tok = %d) in an optimizer hint\", nil),\n\tErrWarnMemoryQuotaOverflow:          Message(\"Max value of MEMORY_QUOTA is %d bytes, ignore this invalid limit\", nil),\n\tErrWarnOptimizerHintParseError:      Message(\"Optimizer hint syntax error at %v\", nil),\n\tErrWarnOptimizerHintWrongPos:        Message(\"Optimizer hint can only be followed by certain keywords like SELECT, INSERT, etc.\", nil),\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/error.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pingcap/errors\"\n)\n\n// Portable analogs of some common call errors.\nvar (\n\tErrBadConn       = errors.New(\"connection was bad\")\n\tErrMalformPacket = errors.New(\"malform packet error\")\n)\n\n// SQLError records an error information, from executing SQL.\ntype SQLError struct {\n\tCode    uint16\n\tMessage string\n\tState   string\n}\n\n// Error prints errors, with a formatted string.\nfunc (e *SQLError) Error() string {\n\treturn fmt.Sprintf(\"ERROR %d (%s): %s\", e.Code, e.State, e.Message)\n}\n\n// NewErr generates a SQL error, with an error code and default format specifier defined in MySQLErrName.\nfunc NewErr(errCode uint16, args ...interface{}) *SQLError {\n\te := &SQLError{Code: errCode}\n\n\tif s, ok := MySQLState[errCode]; ok {\n\t\te.State = s\n\t} else {\n\t\te.State = DefaultMySQLState\n\t}\n\n\tif sqlErr, ok := MySQLErrName[errCode]; ok {\n\t\terrors.RedactErrorArg(args, sqlErr.RedactArgPos)\n\t\te.Message = fmt.Sprintf(sqlErr.Raw, args...)\n\t} else {\n\t\te.Message = fmt.Sprint(args...)\n\t}\n\n\treturn e\n}\n\n// NewErrf creates a SQL error, with an error code and a format specifier.\nfunc NewErrf(errCode uint16, format string, redactArgPos []int, args ...interface{}) *SQLError {\n\te := &SQLError{Code: errCode}\n\n\tif s, ok := MySQLState[errCode]; ok {\n\t\te.State = s\n\t} else {\n\t\te.State = DefaultMySQLState\n\t}\n\n\terrors.RedactErrorArg(args, redactArgPos)\n\te.Message = fmt.Sprintf(format, args...)\n\n\treturn e\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/locale_format.go",
    "content": "package mysql\n\nimport (\n\t\"bytes\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n\n\t\"github.com/pingcap/errors\"\n)\n\nfunc formatENUS(number string, precision string) (string, error) {\n\tvar buffer bytes.Buffer\n\tif unicode.IsDigit(rune(precision[0])) {\n\t\tfor i, v := range precision {\n\t\t\tif unicode.IsDigit(v) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprecision = precision[:i]\n\t\t\tbreak\n\t\t}\n\t} else {\n\t\tprecision = \"0\"\n\t}\n\tif number[0] == '-' && number[1] == '.' {\n\t\tnumber = strings.Replace(number, \"-\", \"-0\", 1)\n\t} else if number[0] == '.' {\n\t\tnumber = strings.Replace(number, \".\", \"0.\", 1)\n\t}\n\n\tif (number[:1] == \"-\" && !unicode.IsDigit(rune(number[1]))) ||\n\t\t(!unicode.IsDigit(rune(number[0])) && number[:1] != \"-\") {\n\t\tbuffer.Write([]byte{'0'})\n\t\tposition, err := strconv.ParseUint(precision, 10, 64)\n\t\tif err == nil && position > 0 {\n\t\t\tbuffer.Write([]byte{'.'})\n\t\t\tbuffer.WriteString(strings.Repeat(\"0\", int(position)))\n\t\t}\n\t\treturn buffer.String(), nil\n\t} else if number[:1] == \"-\" {\n\t\tbuffer.Write([]byte{'-'})\n\t\tnumber = number[1:]\n\t}\n\n\tfor i, v := range number {\n\t\tif unicode.IsDigit(v) {\n\t\t\tcontinue\n\t\t} else if i == 1 && number[1] == '.' {\n\t\t\tcontinue\n\t\t} else if v == '.' && number[1] != '.' {\n\t\t\tcontinue\n\t\t}\n\t\tnumber = number[:i]\n\t\tbreak\n\t}\n\n\tcomma := []byte{','}\n\tparts := strings.Split(number, \".\")\n\tpos := 0\n\tif len(parts[0])%3 != 0 {\n\t\tpos += len(parts[0]) % 3\n\t\tbuffer.WriteString(parts[0][:pos])\n\t\tbuffer.Write(comma)\n\t}\n\tfor ; pos < len(parts[0]); pos += 3 {\n\t\tbuffer.WriteString(parts[0][pos : pos+3])\n\t\tbuffer.Write(comma)\n\t}\n\tbuffer.Truncate(buffer.Len() - 1)\n\n\tposition, err := strconv.ParseUint(precision, 10, 64)\n\tif err == nil {\n\t\tif position > 0 {\n\t\t\tbuffer.Write([]byte{'.'})\n\t\t\tif len(parts) == 2 {\n\t\t\t\tif uint64(len(parts[1])) >= position {\n\t\t\t\t\tbuffer.WriteString(parts[1][:position])\n\t\t\t\t} else {\n\t\t\t\t\tbuffer.WriteString(parts[1])\n\t\t\t\t\tbuffer.WriteString(strings.Repeat(\"0\", int(position)-len(parts[1])))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbuffer.WriteString(strings.Repeat(\"0\", int(position)))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn buffer.String(), nil\n}\n\nfunc formatZHCN(_ string, _ string) (string, error) {\n\treturn \"\", errors.New(\"not implemented\")\n}\n\nfunc formatNotSupport(_ string, _ string) (string, error) {\n\treturn \"\", errors.New(\"not support for the specific locale\")\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/privs.go",
    "content": "// Copyright 2021 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\n// AllPrivilegeLiteral is the string literal for All Privilege.\nconst AllPrivilegeLiteral = \"ALL PRIVILEGES\"\n\n// Priv2Str is the map for privilege to string.\nvar Priv2Str = map[PrivilegeType]string{\n\tCreatePriv:            \"Create\",\n\tSelectPriv:            \"Select\",\n\tInsertPriv:            \"Insert\",\n\tUpdatePriv:            \"Update\",\n\tDeletePriv:            \"Delete\",\n\tShowDBPriv:            \"Show Databases\",\n\tSuperPriv:             \"Super\",\n\tCreateUserPriv:        \"Create User\",\n\tCreateTablespacePriv:  \"Create Tablespace\",\n\tTriggerPriv:           \"Trigger\",\n\tDropPriv:              \"Drop\",\n\tProcessPriv:           \"Process\",\n\tGrantPriv:             \"Grant Option\",\n\tReferencesPriv:        \"References\",\n\tAlterPriv:             \"Alter\",\n\tExecutePriv:           \"Execute\",\n\tIndexPriv:             \"Index\",\n\tCreateViewPriv:        \"Create View\",\n\tShowViewPriv:          \"Show View\",\n\tCreateRolePriv:        \"Create Role\",\n\tDropRolePriv:          \"Drop Role\",\n\tCreateTMPTablePriv:    \"CREATE TEMPORARY TABLES\",\n\tLockTablesPriv:        \"LOCK TABLES\",\n\tCreateRoutinePriv:     \"CREATE ROUTINE\",\n\tAlterRoutinePriv:      \"ALTER ROUTINE\",\n\tEventPriv:             \"EVENT\",\n\tShutdownPriv:          \"SHUTDOWN\",\n\tReloadPriv:            \"RELOAD\",\n\tFilePriv:              \"FILE\",\n\tConfigPriv:            \"CONFIG\",\n\tUsagePriv:             \"USAGE\",\n\tReplicationClientPriv: \"REPLICATION CLIENT\",\n\tReplicationSlavePriv:  \"REPLICATION SLAVE\",\n\tAllPriv:               AllPrivilegeLiteral,\n}\n\n// Priv2SetStr is the map for privilege to string.\nvar Priv2SetStr = map[PrivilegeType]string{\n\tCreatePriv:         \"Create\",\n\tSelectPriv:         \"Select\",\n\tInsertPriv:         \"Insert\",\n\tUpdatePriv:         \"Update\",\n\tDeletePriv:         \"Delete\",\n\tDropPriv:           \"Drop\",\n\tGrantPriv:          \"Grant\",\n\tReferencesPriv:     \"References\",\n\tLockTablesPriv:     \"Lock Tables\",\n\tCreateTMPTablePriv: \"Create Temporary Tables\",\n\tEventPriv:          \"Event\",\n\tCreateRoutinePriv:  \"Create Routine\",\n\tAlterRoutinePriv:   \"Alter Routine\",\n\tAlterPriv:          \"Alter\",\n\tExecutePriv:        \"Execute\",\n\tIndexPriv:          \"Index\",\n\tCreateViewPriv:     \"Create View\",\n\tShowViewPriv:       \"Show View\",\n\tCreateRolePriv:     \"Create Role\",\n\tDropRolePriv:       \"Drop Role\",\n\tShutdownPriv:       \"Shutdown Role\",\n\tTriggerPriv:        \"Trigger\",\n}\n\n// SetStr2Priv is the map for privilege set string to privilege type.\nvar SetStr2Priv = map[string]PrivilegeType{\n\t\"Create\":                  CreatePriv,\n\t\"Select\":                  SelectPriv,\n\t\"Insert\":                  InsertPriv,\n\t\"Update\":                  UpdatePriv,\n\t\"Delete\":                  DeletePriv,\n\t\"Drop\":                    DropPriv,\n\t\"Grant\":                   GrantPriv,\n\t\"References\":              ReferencesPriv,\n\t\"Lock Tables\":             LockTablesPriv,\n\t\"Create Temporary Tables\": CreateTMPTablePriv,\n\t\"Event\":                   EventPriv,\n\t\"Create Routine\":          CreateRoutinePriv,\n\t\"Alter Routine\":           AlterRoutinePriv,\n\t\"Alter\":                   AlterPriv,\n\t\"Execute\":                 ExecutePriv,\n\t\"Index\":                   IndexPriv,\n\t\"Create View\":             CreateViewPriv,\n\t\"Show View\":               ShowViewPriv,\n\t\"Trigger\":                 TriggerPriv,\n}\n\n// Priv2UserCol is the privilege to mysql.user table column name.\nvar Priv2UserCol = map[PrivilegeType]string{\n\tCreatePriv:            \"Create_priv\",\n\tSelectPriv:            \"Select_priv\",\n\tInsertPriv:            \"Insert_priv\",\n\tUpdatePriv:            \"Update_priv\",\n\tDeletePriv:            \"Delete_priv\",\n\tShowDBPriv:            \"Show_db_priv\",\n\tSuperPriv:             \"Super_priv\",\n\tCreateUserPriv:        \"Create_user_priv\",\n\tCreateTablespacePriv:  \"Create_tablespace_priv\",\n\tTriggerPriv:           \"Trigger_priv\",\n\tDropPriv:              \"Drop_priv\",\n\tProcessPriv:           \"Process_priv\",\n\tGrantPriv:             \"Grant_priv\",\n\tReferencesPriv:        \"References_priv\",\n\tAlterPriv:             \"Alter_priv\",\n\tExecutePriv:           \"Execute_priv\",\n\tIndexPriv:             \"Index_priv\",\n\tCreateViewPriv:        \"Create_view_priv\",\n\tShowViewPriv:          \"Show_view_priv\",\n\tCreateRolePriv:        \"Create_role_priv\",\n\tDropRolePriv:          \"Drop_role_priv\",\n\tCreateTMPTablePriv:    \"Create_tmp_table_priv\",\n\tLockTablesPriv:        \"Lock_tables_priv\",\n\tCreateRoutinePriv:     \"Create_routine_priv\",\n\tAlterRoutinePriv:      \"Alter_routine_priv\",\n\tEventPriv:             \"Event_priv\",\n\tShutdownPriv:          \"Shutdown_priv\",\n\tReloadPriv:            \"Reload_priv\",\n\tFilePriv:              \"File_priv\",\n\tConfigPriv:            \"Config_priv\",\n\tReplicationClientPriv: \"Repl_client_priv\",\n\tReplicationSlavePriv:  \"Repl_slave_priv\",\n}\n\n// Col2PrivType is the privilege tables column name to privilege type.\nvar Col2PrivType = map[string]PrivilegeType{\n\t\"Create_priv\":            CreatePriv,\n\t\"Select_priv\":            SelectPriv,\n\t\"Insert_priv\":            InsertPriv,\n\t\"Update_priv\":            UpdatePriv,\n\t\"Delete_priv\":            DeletePriv,\n\t\"Show_db_priv\":           ShowDBPriv,\n\t\"Super_priv\":             SuperPriv,\n\t\"Create_user_priv\":       CreateUserPriv,\n\t\"Create_tablespace_priv\": CreateTablespacePriv,\n\t\"Trigger_priv\":           TriggerPriv,\n\t\"Drop_priv\":              DropPriv,\n\t\"Process_priv\":           ProcessPriv,\n\t\"Grant_priv\":             GrantPriv,\n\t\"References_priv\":        ReferencesPriv,\n\t\"Alter_priv\":             AlterPriv,\n\t\"Execute_priv\":           ExecutePriv,\n\t\"Index_priv\":             IndexPriv,\n\t\"Create_view_priv\":       CreateViewPriv,\n\t\"Show_view_priv\":         ShowViewPriv,\n\t\"Create_role_priv\":       CreateRolePriv,\n\t\"Drop_role_priv\":         DropRolePriv,\n\t\"Create_tmp_table_priv\":  CreateTMPTablePriv,\n\t\"Lock_tables_priv\":       LockTablesPriv,\n\t\"Create_routine_priv\":    CreateRoutinePriv,\n\t\"Alter_routine_priv\":     AlterRoutinePriv,\n\t\"Event_priv\":             EventPriv,\n\t\"Shutdown_priv\":          ShutdownPriv,\n\t\"Reload_priv\":            ReloadPriv,\n\t\"File_priv\":              FilePriv,\n\t\"Config_priv\":            ConfigPriv,\n\t\"Repl_client_priv\":       ReplicationClientPriv,\n\t\"Repl_slave_priv\":        ReplicationSlavePriv,\n}\n\n// PrivilegeType privilege\ntype PrivilegeType uint64\n\n// NewPrivFromColumn constructs priv from a column name. False means invalid priv column name.\nfunc NewPrivFromColumn(col string) (PrivilegeType, bool) {\n\tp, o := Col2PrivType[col]\n\treturn p, o\n}\n\n// NewPrivFromSetEnum constructs priv from a set enum. False means invalid priv enum.\nfunc NewPrivFromSetEnum(e string) (PrivilegeType, bool) {\n\tp, o := SetStr2Priv[e]\n\treturn p, o\n}\n\n// String returns the corresponding identifier in SQLs.\nfunc (p PrivilegeType) String() string {\n\tif s, ok := Priv2Str[p]; ok {\n\t\treturn s\n\t}\n\treturn \"\"\n}\n\n// ColumnString returns the corresponding name of columns in mysql.user/mysql.db.\nfunc (p PrivilegeType) ColumnString() string {\n\tif s, ok := Priv2UserCol[p]; ok {\n\t\treturn s\n\t}\n\treturn \"\"\n}\n\n// SetString returns the corresponding set enum string in Table_priv/Column_priv of mysql.tables_priv/mysql.columns_priv.\nfunc (p PrivilegeType) SetString() string {\n\tif s, ok := Priv2SetStr[p]; ok {\n\t\treturn s\n\t}\n\treturn \"\"\n}\n\nconst (\n\t// UsagePriv is a synonym for “no privileges”\n\tUsagePriv PrivilegeType = 1 << iota\n\t// CreatePriv is the privilege to create schema/table.\n\tCreatePriv\n\t// SelectPriv is the privilege to read from table.\n\tSelectPriv\n\t// InsertPriv is the privilege to insert data into table.\n\tInsertPriv\n\t// UpdatePriv is the privilege to update data in table.\n\tUpdatePriv\n\t// DeletePriv is the privilege to delete data from table.\n\tDeletePriv\n\t// ShowDBPriv is the privilege to run show databases statement.\n\tShowDBPriv\n\t// SuperPriv enables many operations and server behaviors.\n\tSuperPriv\n\t// CreateUserPriv is the privilege to create user.\n\tCreateUserPriv\n\t// TriggerPriv is not checked yet.\n\tTriggerPriv\n\t// DropPriv is the privilege to drop schema/table.\n\tDropPriv\n\t// ProcessPriv pertains to display of information about the threads executing within the server.\n\tProcessPriv\n\t// GrantPriv is the privilege to grant privilege to user.\n\tGrantPriv\n\t// ReferencesPriv is not checked yet.\n\tReferencesPriv\n\t// AlterPriv is the privilege to run alter statement.\n\tAlterPriv\n\t// ExecutePriv is the privilege to run execute statement.\n\tExecutePriv\n\t// IndexPriv is the privilege to create/drop index.\n\tIndexPriv\n\t// CreateViewPriv is the privilege to create view.\n\tCreateViewPriv\n\t// ShowViewPriv is the privilege to show create view.\n\tShowViewPriv\n\t// CreateRolePriv the privilege to create a role.\n\tCreateRolePriv\n\t// DropRolePriv is the privilege to drop a role.\n\tDropRolePriv\n\t// CreateTMPTablePriv is the privilege to create a temporary table.\n\tCreateTMPTablePriv\n\t// LockTablesPriv is the privilege to lock tables.\n\tLockTablesPriv\n\t// CreateRoutinePriv is the privilege to create a stored routine.\n\tCreateRoutinePriv\n\t// AlterRoutinePriv is the privilege to alter a stored routine.\n\tAlterRoutinePriv\n\t// EventPriv is the privilege to event.\n\tEventPriv\n\n\t// ShutdownPriv the privilege to shutdown a server.\n\tShutdownPriv\n\t// ReloadPriv is the privilege to enable the use of the FLUSH statement.\n\tReloadPriv\n\t// FilePriv is the privilege to enable the use of LOAD DATA and SELECT ... INTO OUTFILE.\n\tFilePriv\n\t// ConfigPriv is the privilege to enable the use SET CONFIG statements.\n\tConfigPriv\n\n\t// CreateTablespacePriv is the privilege to create tablespace.\n\tCreateTablespacePriv\n\n\t// ReplicationClientPriv is used in MySQL replication\n\tReplicationClientPriv\n\t// ReplicationSlavePriv is used in MySQL replication\n\tReplicationSlavePriv\n\n\t// AllPriv is the privilege for all actions.\n\tAllPriv\n\t/*\n\t *  Please add the new priv before AllPriv to keep the values consistent across versions.\n\t */\n\n\t// ExtendedPriv is used to successful parse privileges not included above.\n\t// these are dynamic privileges in MySQL 8.0 and other extended privileges like LOAD FROM S3 in Aurora.\n\tExtendedPriv\n)\n\n// AllPrivMask is the mask for PrivilegeType with all bits set to 1.\n// If it's passed to RequestVerification, it means any privilege would be OK.\nconst AllPrivMask = AllPriv - 1\n\n// Privileges is the list of all privileges.\ntype Privileges []PrivilegeType\n\n// Has checks whether PrivilegeType has the privilege.\nfunc (privs Privileges) Has(p PrivilegeType) bool {\n\tfor _, cp := range privs {\n\t\tif cp == p {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// AllGlobalPrivs is all the privileges in global scope.\nvar AllGlobalPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ProcessPriv, ReferencesPriv, AlterPriv, ShowDBPriv, SuperPriv, ExecutePriv, IndexPriv, CreateUserPriv, CreateTablespacePriv, TriggerPriv, CreateViewPriv, ShowViewPriv, CreateRolePriv, DropRolePriv, CreateTMPTablePriv, LockTablesPriv, CreateRoutinePriv, AlterRoutinePriv, EventPriv, ShutdownPriv, ReloadPriv, FilePriv, ConfigPriv, ReplicationClientPriv, ReplicationSlavePriv}\n\n// AllDBPrivs is all the privileges in database scope.\nvar AllDBPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ReferencesPriv, LockTablesPriv, CreateTMPTablePriv, EventPriv, CreateRoutinePriv, AlterRoutinePriv, AlterPriv, ExecutePriv, IndexPriv, CreateViewPriv, ShowViewPriv, TriggerPriv}\n\n// AllTablePrivs is all the privileges in table scope.\nvar AllTablePrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, IndexPriv, ReferencesPriv, AlterPriv, CreateViewPriv, ShowViewPriv, TriggerPriv}\n\n// AllColumnPrivs is all the privileges in column scope.\nvar AllColumnPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, ReferencesPriv}\n\n// StaticGlobalOnlyPrivs is all the privileges only in global scope and different from dynamic privileges.\nvar StaticGlobalOnlyPrivs = Privileges{ProcessPriv, ShowDBPriv, SuperPriv, CreateUserPriv, CreateTablespacePriv, ShutdownPriv, ReloadPriv, FilePriv, ReplicationClientPriv, ReplicationSlavePriv, ConfigPriv}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/state.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\nconst (\n\t// DefaultMySQLState is default state of the mySQL\n\tDefaultMySQLState = \"HY000\"\n)\n\n// MySQLState maps error code to MySQL SQLSTATE value.\n// The values are taken from ANSI SQL and ODBC and are more standardized.\nvar MySQLState = map[uint16]string{\n\tErrDupKey:                              \"23000\",\n\tErrOutofMemory:                         \"HY001\",\n\tErrOutOfSortMemory:                     \"HY001\",\n\tErrConCount:                            \"08004\",\n\tErrBadHost:                             \"08S01\",\n\tErrHandshake:                           \"08S01\",\n\tErrDBaccessDenied:                      \"42000\",\n\tErrAccessDenied:                        \"28000\",\n\tErrNoDB:                                \"3D000\",\n\tErrUnknownCom:                          \"08S01\",\n\tErrBadNull:                             \"23000\",\n\tErrBadDB:                               \"42000\",\n\tErrTableExists:                         \"42S01\",\n\tErrBadTable:                            \"42S02\",\n\tErrNonUniq:                             \"23000\",\n\tErrServerShutdown:                      \"08S01\",\n\tErrBadField:                            \"42S22\",\n\tErrFieldNotInGroupBy:                   \"42000\",\n\tErrWrongSumSelect:                      \"42000\",\n\tErrWrongGroupField:                     \"42000\",\n\tErrWrongValueCount:                     \"21S01\",\n\tErrTooLongIdent:                        \"42000\",\n\tErrDupFieldName:                        \"42S21\",\n\tErrDupKeyName:                          \"42000\",\n\tErrDupEntry:                            \"23000\",\n\tErrWrongFieldSpec:                      \"42000\",\n\tErrParse:                               \"42000\",\n\tErrEmptyQuery:                          \"42000\",\n\tErrNonuniqTable:                        \"42000\",\n\tErrInvalidDefault:                      \"42000\",\n\tErrMultiplePriKey:                      \"42000\",\n\tErrTooManyKeys:                         \"42000\",\n\tErrTooManyKeyParts:                     \"42000\",\n\tErrTooLongKey:                          \"42000\",\n\tErrKeyColumnDoesNotExits:               \"42000\",\n\tErrBlobUsedAsKey:                       \"42000\",\n\tErrJSONDocumentTooDeep:                 \"22032\",\n\tErrTooBigFieldlength:                   \"42000\",\n\tErrWrongAutoKey:                        \"42000\",\n\tErrForcingClose:                        \"08S01\",\n\tErrIpsock:                              \"08S01\",\n\tErrNoSuchIndex:                         \"42S12\",\n\tErrWrongFieldTerminators:               \"42000\",\n\tErrBlobsAndNoTerminated:                \"42000\",\n\tErrCantRemoveAllFields:                 \"42000\",\n\tErrCantDropFieldOrKey:                  \"42000\",\n\tErrBlobCantHaveDefault:                 \"42000\",\n\tErrWrongDBName:                         \"42000\",\n\tErrWrongTableName:                      \"42000\",\n\tErrTooBigSelect:                        \"42000\",\n\tErrUnknownProcedure:                    \"42000\",\n\tErrWrongParamcountToProcedure:          \"42000\",\n\tErrUnknownTable:                        \"42S02\",\n\tErrFieldSpecifiedTwice:                 \"42000\",\n\tErrUnsupportedExtension:                \"42000\",\n\tErrTableMustHaveColumns:                \"42000\",\n\tErrUnknownCharacterSet:                 \"42000\",\n\tErrTooBigRowsize:                       \"42000\",\n\tErrWrongOuterJoin:                      \"42000\",\n\tErrNullColumnInIndex:                   \"42000\",\n\tErrPasswordAnonymousUser:               \"42000\",\n\tErrPasswordNotAllowed:                  \"42000\",\n\tErrPasswordNoMatch:                     \"42000\",\n\tErrWrongValueCountOnRow:                \"21S01\",\n\tErrInvalidUseOfNull:                    \"22004\",\n\tErrRegexp:                              \"42000\",\n\tErrMixOfGroupFuncAndFields:             \"42000\",\n\tErrNonexistingGrant:                    \"42000\",\n\tErrTableaccessDenied:                   \"42000\",\n\tErrColumnaccessDenied:                  \"42000\",\n\tErrIllegalGrantForTable:                \"42000\",\n\tErrGrantWrongHostOrUser:                \"42000\",\n\tErrNoSuchTable:                         \"42S02\",\n\tErrNonexistingTableGrant:               \"42000\",\n\tErrNotAllowedCommand:                   \"42000\",\n\tErrSyntax:                              \"42000\",\n\tErrAbortingConnection:                  \"08S01\",\n\tErrNetPacketTooLarge:                   \"08S01\",\n\tErrNetReadErrorFromPipe:                \"08S01\",\n\tErrNetFcntl:                            \"08S01\",\n\tErrNetPacketsOutOfOrder:                \"08S01\",\n\tErrNetUncompress:                       \"08S01\",\n\tErrNetRead:                             \"08S01\",\n\tErrNetReadInterrupted:                  \"08S01\",\n\tErrNetErrorOnWrite:                     \"08S01\",\n\tErrNetWriteInterrupted:                 \"08S01\",\n\tErrTooLongString:                       \"42000\",\n\tErrTableCantHandleBlob:                 \"42000\",\n\tErrTableCantHandleAutoIncrement:        \"42000\",\n\tErrWrongColumnName:                     \"42000\",\n\tErrWrongKeyColumn:                      \"42000\",\n\tErrDupUnique:                           \"23000\",\n\tErrBlobKeyWithoutLength:                \"42000\",\n\tErrPrimaryCantHaveNull:                 \"42000\",\n\tErrTooManyRows:                         \"42000\",\n\tErrRequiresPrimaryKey:                  \"42000\",\n\tErrKeyDoesNotExist:                     \"42000\",\n\tErrCheckNoSuchTable:                    \"42000\",\n\tErrCheckNotImplemented:                 \"42000\",\n\tErrCantDoThisDuringAnTransaction:       \"25000\",\n\tErrNewAbortingConnection:               \"08S01\",\n\tErrMasterNetRead:                       \"08S01\",\n\tErrMasterNetWrite:                      \"08S01\",\n\tErrTooManyUserConnections:              \"42000\",\n\tErrReadOnlyTransaction:                 \"25000\",\n\tErrNoPermissionToCreateUser:            \"42000\",\n\tErrLockDeadlock:                        \"40001\",\n\tErrNoReferencedRow:                     \"23000\",\n\tErrRowIsReferenced:                     \"23000\",\n\tErrConnectToMaster:                     \"08S01\",\n\tErrWrongNumberOfColumnsInSelect:        \"21000\",\n\tErrUserLimitReached:                    \"42000\",\n\tErrSpecificAccessDenied:                \"42000\",\n\tErrNoDefault:                           \"42000\",\n\tErrWrongValueForVar:                    \"42000\",\n\tErrWrongTypeForVar:                     \"42000\",\n\tErrCantUseOptionHere:                   \"42000\",\n\tErrNotSupportedYet:                     \"42000\",\n\tErrWrongFkDef:                          \"42000\",\n\tErrOperandColumns:                      \"21000\",\n\tErrSubqueryNo1Row:                      \"21000\",\n\tErrIllegalReference:                    \"42S22\",\n\tErrDerivedMustHaveAlias:                \"42000\",\n\tErrSelectReduced:                       \"01000\",\n\tErrTablenameNotAllowedHere:             \"42000\",\n\tErrNotSupportedAuthMode:                \"08004\",\n\tErrSpatialCantHaveNull:                 \"42000\",\n\tErrCollationCharsetMismatch:            \"42000\",\n\tErrWarnTooFewRecords:                   \"01000\",\n\tErrWarnTooManyRecords:                  \"01000\",\n\tErrWarnNullToNotnull:                   \"22004\",\n\tErrWarnDataOutOfRange:                  \"22003\",\n\tWarnDataTruncated:                      \"01000\",\n\tErrWrongNameForIndex:                   \"42000\",\n\tErrWrongNameForCatalog:                 \"42000\",\n\tErrUnknownStorageEngine:                \"42000\",\n\tErrTruncatedWrongValue:                 \"22007\",\n\tErrSpNoRecursiveCreate:                 \"2F003\",\n\tErrSpAlreadyExists:                     \"42000\",\n\tErrSpDoesNotExist:                      \"42000\",\n\tErrSpLilabelMismatch:                   \"42000\",\n\tErrSpLabelRedefine:                     \"42000\",\n\tErrSpLabelMismatch:                     \"42000\",\n\tErrSpUninitVar:                         \"01000\",\n\tErrSpBadselect:                         \"0A000\",\n\tErrSpBadreturn:                         \"42000\",\n\tErrSpBadstatement:                      \"0A000\",\n\tErrUpdateLogDeprecatedIgnored:          \"42000\",\n\tErrUpdateLogDeprecatedTranslated:       \"42000\",\n\tErrQueryInterrupted:                    \"70100\",\n\tErrSpWrongNoOfArgs:                     \"42000\",\n\tErrSpCondMismatch:                      \"42000\",\n\tErrSpNoreturn:                          \"42000\",\n\tErrSpNoreturnend:                       \"2F005\",\n\tErrSpBadCursorQuery:                    \"42000\",\n\tErrSpBadCursorSelect:                   \"42000\",\n\tErrSpCursorMismatch:                    \"42000\",\n\tErrSpCursorAlreadyOpen:                 \"24000\",\n\tErrSpCursorNotOpen:                     \"24000\",\n\tErrSpUndeclaredVar:                     \"42000\",\n\tErrSpFetchNoData:                       \"02000\",\n\tErrSpDupParam:                          \"42000\",\n\tErrSpDupVar:                            \"42000\",\n\tErrSpDupCond:                           \"42000\",\n\tErrSpDupCurs:                           \"42000\",\n\tErrSpSubselectNyi:                      \"0A000\",\n\tErrStmtNotAllowedInSfOrTrg:             \"0A000\",\n\tErrSpVarcondAfterCurshndlr:             \"42000\",\n\tErrSpCursorAfterHandler:                \"42000\",\n\tErrSpCaseNotFound:                      \"20000\",\n\tErrDivisionByZero:                      \"22012\",\n\tErrIllegalValueForType:                 \"22007\",\n\tErrProcaccessDenied:                    \"42000\",\n\tErrXaerNota:                            \"XAE04\",\n\tErrXaerInval:                           \"XAE05\",\n\tErrXaerRmfail:                          \"XAE07\",\n\tErrXaerOutside:                         \"XAE09\",\n\tErrXaerRmerr:                           \"XAE03\",\n\tErrXaRbrollback:                        \"XA100\",\n\tErrNonexistingProcGrant:                \"42000\",\n\tErrDataTooLong:                         \"22001\",\n\tErrSpBadSQLstate:                       \"42000\",\n\tErrCantCreateUserWithGrant:             \"42000\",\n\tErrSpDupHandler:                        \"42000\",\n\tErrSpNotVarArg:                         \"42000\",\n\tErrSpNoRetset:                          \"0A000\",\n\tErrCantCreateGeometryObject:            \"22003\",\n\tErrTooBigScale:                         \"42000\",\n\tErrTooBigPrecision:                     \"42000\",\n\tErrMBiggerThanD:                        \"42000\",\n\tErrTooLongBody:                         \"42000\",\n\tErrTooBigDisplaywidth:                  \"42000\",\n\tErrXaerDupid:                           \"XAE08\",\n\tErrDatetimeFunctionOverflow:            \"22008\",\n\tErrRowIsReferenced2:                    \"23000\",\n\tErrNoReferencedRow2:                    \"23000\",\n\tErrSpBadVarShadow:                      \"42000\",\n\tErrSpWrongName:                         \"42000\",\n\tErrSpNoAggregate:                       \"42000\",\n\tErrMaxPreparedStmtCountReached:         \"42000\",\n\tErrNonGroupingFieldUsed:                \"42000\",\n\tErrForeignDuplicateKeyOldUnused:        \"23000\",\n\tErrCantChangeTxCharacteristics:         \"25001\",\n\tErrWrongParamcountToNativeFct:          \"42000\",\n\tErrWrongParametersToNativeFct:          \"42000\",\n\tErrWrongParametersToStoredFct:          \"42000\",\n\tErrDupEntryWithKeyName:                 \"23000\",\n\tErrXaRbtimeout:                         \"XA106\",\n\tErrXaRbdeadlock:                        \"XA102\",\n\tErrFuncInexistentNameCollision:         \"42000\",\n\tErrDupSignalSet:                        \"42000\",\n\tErrSignalWarn:                          \"01000\",\n\tErrSignalNotFound:                      \"02000\",\n\tErrSignalException:                     \"HY000\",\n\tErrResignalWithoutActiveHandler:        \"0K000\",\n\tErrSpatialMustHaveGeomCol:              \"42000\",\n\tErrDataOutOfRange:                      \"22003\",\n\tErrAccessDeniedNoPassword:              \"28000\",\n\tErrTruncateIllegalForeignKey:           \"42000\",\n\tErrDaInvalidConditionNumber:            \"35000\",\n\tErrForeignDuplicateKeyWithChildInfo:    \"23000\",\n\tErrForeignDuplicateKeyWithoutChildInfo: \"23000\",\n\tErrCantExecuteInReadOnlyTransaction:    \"25006\",\n\tErrAlterOperationNotSupported:          \"0A000\",\n\tErrAlterOperationNotSupportedReason:    \"0A000\",\n\tErrDupUnknownInIndex:                   \"23000\",\n\tErrBadGeneratedColumn:                  \"HY000\",\n\tErrUnsupportedOnGeneratedColumn:        \"HY000\",\n\tErrGeneratedColumnNonPrior:             \"HY000\",\n\tErrDependentByGeneratedColumn:          \"HY000\",\n\tErrInvalidJSONText:                     \"22032\",\n\tErrInvalidJSONTextInParam:              \"22032\",\n\tErrInvalidJSONPath:                     \"42000\",\n\tErrInvalidJSONData:                     \"22032\",\n\tErrInvalidJSONPathWildcard:             \"42000\",\n\tErrJSONUsedAsKey:                       \"42000\",\n\tErrJSONVacuousPath:                     \"42000\",\n\tErrJSONBadOneOrAllArg:                  \"42000\",\n\tErrJSONDocumentNULLKey:                 \"22032\",\n\tErrInvalidJSONPathArrayCell:            \"42000\",\n\tErrInvalidTypeForJSON:                  \"22032\",\n\tErrInvalidJsonValueForFuncIndex:        \"22018\",\n\tErrInvalidJSONType:                     \"22032\",\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/type.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\n// MySQL type information.\nconst (\n\tTypeUnspecified byte = 0\n\tTypeTiny        byte = 1 // TINYINT\n\tTypeShort       byte = 2 // SMALLINT\n\tTypeLong        byte = 3 // INT\n\tTypeFloat       byte = 4\n\tTypeDouble      byte = 5\n\tTypeNull        byte = 6\n\tTypeTimestamp   byte = 7\n\tTypeLonglong    byte = 8 // BIGINT\n\tTypeInt24       byte = 9 // MEDIUMINT\n\tTypeDate        byte = 10\n\t/* TypeDuration original name was TypeTime, renamed to TypeDuration to resolve the conflict with Go type Time.*/\n\tTypeDuration byte = 11\n\tTypeDatetime byte = 12\n\tTypeYear     byte = 13\n\tTypeNewDate  byte = 14\n\tTypeVarchar  byte = 15\n\tTypeBit      byte = 16\n\n\tTypeJSON       byte = 0xf5\n\tTypeNewDecimal byte = 0xf6\n\tTypeEnum       byte = 0xf7\n\tTypeSet        byte = 0xf8\n\tTypeTinyBlob   byte = 0xf9\n\tTypeMediumBlob byte = 0xfa\n\tTypeLongBlob   byte = 0xfb\n\tTypeBlob       byte = 0xfc\n\tTypeVarString  byte = 0xfd\n\tTypeString     byte = 0xfe /* TypeString is char type */\n\tTypeGeometry   byte = 0xff\n\n\tTypeTiDBVectorFloat32 byte = 0xe1\n)\n\n// Flag information.\nconst (\n\tNotNullFlag        uint = 1 << 0  /* Field can't be NULL */\n\tPriKeyFlag         uint = 1 << 1  /* Field is part of a primary key */\n\tUniqueKeyFlag      uint = 1 << 2  /* Field is part of a unique key */\n\tMultipleKeyFlag    uint = 1 << 3  /* Field is part of a key */\n\tBlobFlag           uint = 1 << 4  /* Field is a blob */\n\tUnsignedFlag       uint = 1 << 5  /* Field is unsigned */\n\tZerofillFlag       uint = 1 << 6  /* Field is zerofill */\n\tBinaryFlag         uint = 1 << 7  /* Field is binary   */\n\tEnumFlag           uint = 1 << 8  /* Field is an enum */\n\tAutoIncrementFlag  uint = 1 << 9  /* Field is an auto increment field */\n\tTimestampFlag      uint = 1 << 10 /* Field is a timestamp */\n\tSetFlag            uint = 1 << 11 /* Field is a set */\n\tNoDefaultValueFlag uint = 1 << 12 /* Field doesn't have a default value */\n\tOnUpdateNowFlag    uint = 1 << 13 /* Field is set to NOW on UPDATE */\n\tPartKeyFlag        uint = 1 << 14 /* Intern: Part of some keys */\n\tNumFlag            uint = 1 << 15 /* Field is a num (for clients) */\n\n\tGroupFlag             uint = 1 << 15 /* Internal: Group field */\n\tUniqueFlag            uint = 1 << 16 /* Internal: Used by sql_yacc */\n\tBinCmpFlag            uint = 1 << 17 /* Internal: Used by sql_yacc */\n\tParseToJSONFlag       uint = 1 << 18 /* Internal: Used when we want to parse string to JSON in CAST */\n\tIsBooleanFlag         uint = 1 << 19 /* Internal: Used for telling boolean literal from integer */\n\tPreventNullInsertFlag uint = 1 << 20 /* Prevent this Field from inserting NULL values */\n\tEnumSetAsIntFlag      uint = 1 << 21 /* Internal: Used for inferring enum eval type. */\n\tDropColumnIndexFlag   uint = 1 << 22 /* Internal: Used for indicate the column is being dropped with index */\n\tGeneratedColumnFlag   uint = 1 << 23 /* Internal: TiFlash will check this flag and add a placeholder for this column */\n\tUnderScoreCharsetFlag uint = 1 << 24 /* Internal: Indicate whether charset is specified by underscore like _latin1'abc' */\n)\n\n// TypeInt24 bounds.\nconst (\n\tMaxUint24 = 1<<24 - 1\n\tMaxInt24  = 1<<23 - 1\n\tMinInt24  = -1 << 23\n)\n\n// HasDropColumnWithIndexFlag checks if DropColumnIndexFlag is set.\nfunc HasDropColumnWithIndexFlag(flag uint) bool {\n\treturn (flag & DropColumnIndexFlag) > 0\n}\n\n// HasNotNullFlag checks if NotNullFlag is set.\nfunc HasNotNullFlag(flag uint) bool {\n\treturn (flag & NotNullFlag) > 0\n}\n\n// HasNoDefaultValueFlag checks if NoDefaultValueFlag is set.\nfunc HasNoDefaultValueFlag(flag uint) bool {\n\treturn (flag & NoDefaultValueFlag) > 0\n}\n\n// HasAutoIncrementFlag checks if AutoIncrementFlag is set.\nfunc HasAutoIncrementFlag(flag uint) bool {\n\treturn (flag & AutoIncrementFlag) > 0\n}\n\n// HasUnsignedFlag checks if UnsignedFlag is set.\nfunc HasUnsignedFlag(flag uint) bool {\n\treturn (flag & UnsignedFlag) > 0\n}\n\n// HasZerofillFlag checks if ZerofillFlag is set.\nfunc HasZerofillFlag(flag uint) bool {\n\treturn (flag & ZerofillFlag) > 0\n}\n\n// HasBinaryFlag checks if BinaryFlag is set.\nfunc HasBinaryFlag(flag uint) bool {\n\treturn (flag & BinaryFlag) > 0\n}\n\n// HasPriKeyFlag checks if PriKeyFlag is set.\nfunc HasPriKeyFlag(flag uint) bool {\n\treturn (flag & PriKeyFlag) > 0\n}\n\n// HasUniKeyFlag checks if UniqueKeyFlag is set.\nfunc HasUniKeyFlag(flag uint) bool {\n\treturn (flag & UniqueKeyFlag) > 0\n}\n\n// HasMultipleKeyFlag checks if MultipleKeyFlag is set.\nfunc HasMultipleKeyFlag(flag uint) bool {\n\treturn (flag & MultipleKeyFlag) > 0\n}\n\n// HasTimestampFlag checks if HasTimestampFlag is set.\nfunc HasTimestampFlag(flag uint) bool {\n\treturn (flag & TimestampFlag) > 0\n}\n\n// HasOnUpdateNowFlag checks if OnUpdateNowFlag is set.\nfunc HasOnUpdateNowFlag(flag uint) bool {\n\treturn (flag & OnUpdateNowFlag) > 0\n}\n\n// HasParseToJSONFlag checks if ParseToJSONFlag is set.\nfunc HasParseToJSONFlag(flag uint) bool {\n\treturn (flag & ParseToJSONFlag) > 0\n}\n\n// HasIsBooleanFlag checks if IsBooleanFlag is set.\nfunc HasIsBooleanFlag(flag uint) bool {\n\treturn (flag & IsBooleanFlag) > 0\n}\n\n// HasPreventNullInsertFlag checks if PreventNullInsertFlag is set.\nfunc HasPreventNullInsertFlag(flag uint) bool {\n\treturn (flag & PreventNullInsertFlag) > 0\n}\n\n// HasEnumSetAsIntFlag checks if EnumSetAsIntFlag is set.\nfunc HasEnumSetAsIntFlag(flag uint) bool {\n\treturn (flag & EnumSetAsIntFlag) > 0\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/mysql/util.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mysql\n\ntype lengthAndDecimal struct {\n\tlength  int64\n\tdecimal int\n}\n\n// defaultLengthAndDecimal provides default flen and decimal for fields\n// from CREATE TABLE when they are unspecified.\nvar defaultLengthAndDecimal = map[byte]lengthAndDecimal{\n\tTypeBit:        {1, 0},\n\tTypeTiny:       {4, 0},\n\tTypeShort:      {6, 0},\n\tTypeInt24:      {9, 0},\n\tTypeLong:       {11, 0},\n\tTypeLonglong:   {20, 0},\n\tTypeDouble:     {22, -1},\n\tTypeFloat:      {12, -1},\n\tTypeNewDecimal: {10, 0},\n\tTypeDuration:   {10, 0},\n\tTypeDate:       {10, 0},\n\tTypeTimestamp:  {19, 0},\n\tTypeDatetime:   {19, 0},\n\tTypeYear:       {4, 0},\n\tTypeString:     {1, 0},\n\tTypeVarchar:    {5, 0},\n\tTypeVarString:  {5, 0},\n\tTypeTinyBlob:   {255, 0},\n\tTypeBlob:       {65535, 0},\n\tTypeMediumBlob: {16777215, 0},\n\tTypeLongBlob:   {4294967295, 0},\n\tTypeJSON:       {4294967295, 0},\n\tTypeNull:       {0, 0},\n\tTypeSet:        {-1, 0},\n\tTypeEnum:       {-1, 0},\n}\n\n// IsIntegerType indicate whether tp is an integer type.\nfunc IsIntegerType(tp byte) bool {\n\tswitch tp {\n\tcase TypeTiny, TypeShort, TypeInt24, TypeLong, TypeLonglong:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// GetDefaultFieldLengthAndDecimal returns the default display length (flen) and decimal length for column.\n// Call this when no flen assigned in ddl.\n// or column value is calculated from an expression.\n// For example: \"select count(*) from t;\", the column type is int64 and flen in ResultField will be 21.\n// See https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html\nfunc GetDefaultFieldLengthAndDecimal(tp byte) (flen, decimal int) {\n\tval, ok := defaultLengthAndDecimal[tp]\n\tif ok {\n\t\treturn int(val.length), val.decimal\n\t}\n\treturn -1, -1\n}\n\n// defaultLengthAndDecimal provides default flen and decimal for fields\n// from CAST when they are unspecified.\nvar defaultLengthAndDecimalForCast = map[byte]lengthAndDecimal{\n\tTypeString:     {0, -1}, // flen & decimal differs.\n\tTypeDate:       {10, 0},\n\tTypeDatetime:   {19, 0},\n\tTypeNewDecimal: {10, 0},\n\tTypeDuration:   {10, 0},\n\tTypeLonglong:   {22, 0},\n\tTypeDouble:     {22, -1},\n\tTypeFloat:      {12, -1},\n\tTypeJSON:       {4194304, 0}, // flen differs.\n}\n\n// GetDefaultFieldLengthAndDecimalForCast returns the default display length (flen) and decimal length for casted column\n// when flen or decimal is not specified.\nfunc GetDefaultFieldLengthAndDecimalForCast(tp byte) (flen, decimal int) {\n\tval, ok := defaultLengthAndDecimalForCast[tp]\n\tif ok {\n\t\treturn int(val.length), val.decimal\n\t}\n\treturn -1, -1\n}\n\n// IsAuthPluginClearText is used to indicated that the plugin need clear-text password.\nfunc IsAuthPluginClearText(authPlugin string) bool {\n\treturn authPlugin == AuthNativePassword ||\n\t\tauthPlugin == AuthTiDBSM3Password ||\n\t\tauthPlugin == AuthCachingSha2Password\n}\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/terror/BUILD.bazel",
    "content": "load(\"@io_bazel_rules_go//go:def.bzl\", \"go_library\", \"go_test\")\n\ngo_library(\n    name = \"terror\",\n    srcs = [\"terror.go\"],\n    importpath = \"github.com/pingcap/tidb/pkg/parser/terror\",\n    visibility = [\"//visibility:public\"],\n    deps = [\n        \"//pkg/parser/mysql\",\n        \"@com_github_pingcap_errors//:errors\",\n        \"@com_github_pingcap_log//:log\",\n        \"@org_uber_go_zap//:zap\",\n    ],\n)\n\ngo_test(\n    name = \"terror_test\",\n    timeout = \"short\",\n    srcs = [\"terror_test.go\"],\n    embed = [\":terror\"],\n    flaky = True,\n    shard_count = 6,\n    deps = [\n        \"@com_github_pingcap_errors//:errors\",\n        \"@com_github_stretchr_testify//require\",\n    ],\n)\n"
  },
  {
    "path": "vendor/github.com/pingcap/tidb/pkg/parser/terror/terror.go",
    "content": "// Copyright 2015 PingCAP, 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// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage terror\n\nimport (\n\t\"fmt\"\n\t\"runtime/debug\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"github.com/pingcap/errors\"\n\t\"github.com/pingcap/log\"\n\t\"github.com/pingcap/tidb/pkg/parser/mysql\"\n\t\"go.uber.org/zap\"\n)\n\n// ErrCode represents a specific error type in a error class.\n// Same error code can be used in different error classes.\ntype ErrCode int\n\nconst (\n\t// Executor error codes.\n\n\t// CodeUnknown is for errors of unknown reason.\n\tCodeUnknown ErrCode = -1\n\t// CodeExecResultIsEmpty indicates execution result is empty.\n\tCodeExecResultIsEmpty ErrCode = 3\n\n\t// Expression error codes.\n\n\t// CodeMissConnectionID indicates connection id is missing.\n\tCodeMissConnectionID ErrCode = 1\n\n\t// Special error codes.\n\n\t// CodeResultUndetermined indicates the sql execution result is undetermined.\n\tCodeResultUndetermined ErrCode = 2\n)\n\n// ErrClass represents a class of errors.\ntype ErrClass int\n\n// Error implements error interface.\ntype Error = errors.Error\n\n// Error classes.\nvar (\n\tClassAutoid     = RegisterErrorClass(1, \"autoid\")\n\tClassDDL        = RegisterErrorClass(2, \"ddl\")\n\tClassDomain     = RegisterErrorClass(3, \"domain\")\n\tClassEvaluator  = RegisterErrorClass(4, \"evaluator\")\n\tClassExecutor   = RegisterErrorClass(5, \"executor\")\n\tClassExpression = RegisterErrorClass(6, \"expression\")\n\tClassAdmin      = RegisterErrorClass(7, \"admin\")\n\tClassKV         = RegisterErrorClass(8, \"kv\")\n\tClassMeta       = RegisterErrorClass(9, \"meta\")\n\tClassOptimizer  = RegisterErrorClass(10, \"planner\")\n\tClassParser     = RegisterErrorClass(11, \"parser\")\n\tClassPerfSchema = RegisterErrorClass(12, \"perfschema\")\n\tClassPrivilege  = RegisterErrorClass(13, \"privilege\")\n\tClassSchema     = RegisterErrorClass(14, \"schema\")\n\tClassServer     = RegisterErrorClass(15, \"server\")\n\tClassStructure  = RegisterErrorClass(16, \"structure\")\n\tClassVariable   = RegisterErrorClass(17, \"variable\")\n\tClassXEval      = RegisterErrorClass(18, \"xeval\")\n\tClassTable      = RegisterErrorClass(19, \"table\")\n\tClassTypes      = RegisterErrorClass(20, \"types\")\n\tClassGlobal     = RegisterErrorClass(21, \"global\")\n\tClassMockTikv   = RegisterErrorClass(22, \"mocktikv\")\n\tClassJSON       = RegisterErrorClass(23, \"json\")\n\tClassTiKV       = RegisterErrorClass(24, \"tikv\")\n\tClassSession    = RegisterErrorClass(25, \"session\")\n\tClassPlugin     = RegisterErrorClass(26, \"plugin\")\n\tClassUtil       = RegisterErrorClass(27, \"util\")\n\t// Add more as needed.\n)\n\nvar errClass2Desc = make(map[ErrClass]string)\nvar rfcCode2errClass = newCode2ErrClassMap()\n\ntype code2ErrClassMap struct {\n\tdata sync.Map\n}\n\nfunc newCode2ErrClassMap() *code2ErrClassMap {\n\treturn &code2ErrClassMap{\n\t\tdata: sync.Map{},\n\t}\n}\n\nfunc (m *code2ErrClassMap) Get(key string) (ErrClass, bool) {\n\tret, have := m.data.Load(key)\n\tif !have {\n\t\treturn ErrClass(-1), false\n\t}\n\treturn ret.(ErrClass), true\n}\n\nfunc (m *code2ErrClassMap) Put(key string, err ErrClass) {\n\tm.data.Store(key, err)\n}\n\nvar registerFinish uint32\n\n// RegisterFinish makes the register of new error panic.\n// The use pattern should be register all the errors during initialization, and then call RegisterFinish.\nfunc RegisterFinish() {\n\tatomic.StoreUint32(&registerFinish, 1)\n}\n\nfunc frozen() bool {\n\treturn atomic.LoadUint32(&registerFinish) != 0\n}\n\n// RegisterErrorClass registers new error class for terror.\nfunc RegisterErrorClass(classCode int, desc string) ErrClass {\n\terrClass := ErrClass(classCode)\n\tif _, exists := errClass2Desc[errClass]; exists {\n\t\tpanic(fmt.Sprintf(\"duplicate register ClassCode %d - %s\", classCode, desc))\n\t}\n\terrClass2Desc[errClass] = desc\n\treturn errClass\n}\n\n// String implements fmt.Stringer interface.\nfunc (ec ErrClass) String() string {\n\tif s, exists := errClass2Desc[ec]; exists {\n\t\treturn s\n\t}\n\treturn strconv.Itoa(int(ec))\n}\n\n// EqualClass returns true if err is *Error with the same class.\nfunc (ec ErrClass) EqualClass(err error) bool {\n\te := errors.Cause(err)\n\tif e == nil {\n\t\treturn false\n\t}\n\tif te, ok := e.(*Error); ok {\n\t\trfcCode := te.RFCCode()\n\t\tif index := strings.Index(string(rfcCode), \":\"); index > 0 {\n\t\t\tif class, has := rfcCode2errClass.Get(string(rfcCode)[:index]); has {\n\t\t\t\treturn class == ec\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\n// NotEqualClass returns true if err is not *Error with the same class.\nfunc (ec ErrClass) NotEqualClass(err error) bool {\n\treturn !ec.EqualClass(err)\n}\n\nfunc (ec ErrClass) initError(code ErrCode) string {\n\tif frozen() {\n\t\tdebug.PrintStack()\n\t\tpanic(\"register error after initialized is prohibited\")\n\t}\n\tclsMap, ok := ErrClassToMySQLCodes[ec]\n\tif !ok {\n\t\tclsMap = make(map[ErrCode]struct{})\n\t\tErrClassToMySQLCodes[ec] = clsMap\n\t}\n\tclsMap[code] = struct{}{}\n\tclass := errClass2Desc[ec]\n\trfcCode := fmt.Sprintf(\"%s:%d\", class, code)\n\trfcCode2errClass.Put(class, ec)\n\treturn rfcCode\n}\n\n// New defines an *Error with an error code and an error message.\n// Usually used to create base *Error.\n// Attention:\n// this method is not goroutine-safe and\n// usually be used in global variable initializer\n//\n// Deprecated: use NewStd or NewStdErr instead.\nfunc (ec ErrClass) New(code ErrCode, message string) *Error {\n\trfcCode := ec.initError(code)\n\terr := errors.Normalize(message, errors.MySQLErrorCode(int(code)), errors.RFCCodeText(rfcCode))\n\treturn err\n}\n\n// NewStdErr defines an *Error with an error code, an error\n// message and workaround to create standard error.\nfunc (ec ErrClass) NewStdErr(code ErrCode, message *mysql.ErrMessage) *Error {\n\trfcCode := ec.initError(code)\n\terr := errors.Normalize(\n\t\tmessage.Raw, errors.RedactArgs(message.RedactArgPos),\n\t\terrors.MySQLErrorCode(int(code)), errors.RFCCodeText(rfcCode),\n\t)\n\treturn err\n}\n\n// NewStd calls New using the standard message for the error code\n// Attention:\n// this method is not goroutine-safe and\n// usually be used in global variable initializer\nfunc (ec ErrClass) NewStd(code ErrCode) *Error {\n\treturn ec.NewStdErr(code, mysql.MySQLErrName[uint16(code)])\n}\n\n// Synthesize synthesizes an *Error in the air\n// it didn't register error into ErrClassToMySQLCodes\n// so it's goroutine-safe\n// and often be used to create Error came from other systems like TiKV.\nfunc (ec ErrClass) Synthesize(code ErrCode, message string) *Error {\n\treturn errors.Normalize(\n\t\tmessage, errors.MySQLErrorCode(int(code)),\n\t\terrors.RFCCodeText(fmt.Sprintf(\"%s:%d\", errClass2Desc[ec], code)),\n\t)\n}\n\n// ToSQLError convert Error to mysql.SQLError.\nfunc ToSQLError(e *Error) *mysql.SQLError {\n\tcode := getMySQLErrorCode(e)\n\treturn mysql.NewErrf(code, \"%s\", nil, e.GetMsg())\n}\n\nvar defaultMySQLErrorCode uint16\n\nfunc getMySQLErrorCode(e *Error) uint16 {\n\trfcCode := e.RFCCode()\n\tvar class ErrClass\n\tif index := strings.Index(string(rfcCode), \":\"); index > 0 {\n\t\tec, has := rfcCode2errClass.Get(string(rfcCode)[:index])\n\t\tif !has {\n\t\t\tlog.Warn(\"Unknown error class\", zap.String(\"class\", string(rfcCode)[:index]))\n\t\t\treturn defaultMySQLErrorCode\n\t\t}\n\t\tclass = ec\n\t}\n\tcodeMap, ok := ErrClassToMySQLCodes[class]\n\tif !ok {\n\t\tlog.Warn(\"Unknown error class\", zap.Int(\"class\", int(class)))\n\t\treturn defaultMySQLErrorCode\n\t}\n\t_, ok = codeMap[ErrCode(e.Code())]\n\tif !ok {\n\t\tlog.Debug(\"Unknown error code\", zap.Int(\"class\", int(class)), zap.Int(\"code\", int(e.Code())))\n\t\treturn defaultMySQLErrorCode\n\t}\n\treturn uint16(e.Code())\n}\n\nvar (\n\t// ErrClassToMySQLCodes is the map of ErrClass to code-set.\n\tErrClassToMySQLCodes = make(map[ErrClass]map[ErrCode]struct{})\n\t// ErrCritical is the critical error class.\n\tErrCritical = ClassGlobal.NewStdErr(CodeExecResultIsEmpty, mysql.Message(\"critical error %v\", nil))\n\t// ErrResultUndetermined is the error when execution result is unknown.\n\tErrResultUndetermined = ClassGlobal.NewStdErr(\n\t\tCodeResultUndetermined,\n\t\tmysql.Message(\"execution result undetermined\", nil),\n\t)\n)\n\nfunc init() {\n\tdefaultMySQLErrorCode = mysql.ErrUnknown\n}\n\n// ErrorEqual returns a boolean indicating whether err1 is equal to err2.\nfunc ErrorEqual(err1, err2 error) bool {\n\te1 := errors.Cause(err1)\n\te2 := errors.Cause(err2)\n\n\tif e1 == e2 {\n\t\treturn true\n\t}\n\n\tif e1 == nil || e2 == nil {\n\t\treturn e1 == e2\n\t}\n\n\tte1, ok1 := e1.(*Error)\n\tte2, ok2 := e2.(*Error)\n\tif ok1 && ok2 {\n\t\treturn te1.RFCCode() == te2.RFCCode()\n\t}\n\n\treturn e1.Error() == e2.Error()\n}\n\n// ErrorNotEqual returns a boolean indicating whether err1 isn't equal to err2.\nfunc ErrorNotEqual(err1, err2 error) bool {\n\treturn !ErrorEqual(err1, err2)\n}\n\n// MustNil cleans up and fatals if err is not nil.\nfunc MustNil(err error, closeFuns ...func()) {\n\tif err != nil {\n\t\tfor _, f := range closeFuns {\n\t\t\tf()\n\t\t}\n\t\tlog.Fatal(\"unexpected error\", zap.Error(err), zap.Stack(\"stack\"))\n\t}\n}\n\n// Call executes a function and checks the returned err.\nfunc Call(fn func() error) {\n\terr := fn()\n\tif err != nil {\n\t\tlog.Error(\"function call errored\", zap.Error(err), zap.Stack(\"stack\"))\n\t}\n}\n\n// Log logs the error if it is not nil.\nfunc Log(err error) {\n\tif err != nil {\n\t\tlog.Error(\"encountered error\", zap.Error(err), zap.Stack(\"stack\"))\n\t}\n}\n\n// GetErrClass returns the error class of the error.\nfunc GetErrClass(e *Error) ErrClass {\n\trfcCode := e.RFCCode()\n\tif index := strings.Index(string(rfcCode), \":\"); index > 0 {\n\t\tif class, has := rfcCode2errClass.Get(string(rfcCode)[:index]); has {\n\t\t\treturn class\n\t\t}\n\t}\n\treturn ErrClass(-1)\n}\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/.travis.yml",
    "content": "language: go\ngo_import_path: github.com/pkg/errors\ngo:\n  - 1.11.x\n  - 1.12.x\n  - 1.13.x\n  - tip\n\nscript:\n  - make check\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/LICENSE",
    "content": "Copyright (c) 2015, Dave Cheney <dave@cheney.net>\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 notice, this\n  list of conditions and the following disclaimer.\n\n* 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": "vendor/github.com/pkg/errors/Makefile",
    "content": "PKGS := github.com/pkg/errors\nSRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS))\nGO := go\n\ncheck: test vet gofmt misspell unconvert staticcheck ineffassign unparam\n\ntest: \n\t$(GO) test $(PKGS)\n\nvet: | test\n\t$(GO) vet $(PKGS)\n\nstaticcheck:\n\t$(GO) get honnef.co/go/tools/cmd/staticcheck\n\tstaticcheck -checks all $(PKGS)\n\nmisspell:\n\t$(GO) get github.com/client9/misspell/cmd/misspell\n\tmisspell \\\n\t\t-locale GB \\\n\t\t-error \\\n\t\t*.md *.go\n\nunconvert:\n\t$(GO) get github.com/mdempsky/unconvert\n\tunconvert -v $(PKGS)\n\nineffassign:\n\t$(GO) get github.com/gordonklaus/ineffassign\n\tfind $(SRCDIRS) -name '*.go' | xargs ineffassign\n\npedantic: check errcheck\n\nunparam:\n\t$(GO) get mvdan.cc/unparam\n\tunparam ./...\n\nerrcheck:\n\t$(GO) get github.com/kisielk/errcheck\n\terrcheck $(PKGS)\n\ngofmt:  \n\t@echo Checking code is gofmted\n\t@test -z \"$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)\"\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/README.md",
    "content": "# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge)\n\nPackage errors provides simple error handling primitives.\n\n`go get github.com/pkg/errors`\n\nThe traditional error handling idiom in Go is roughly akin to\n```go\nif err != nil {\n        return err\n}\n```\nwhich applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.\n\n## Adding context to an error\n\nThe errors.Wrap function returns a new error that adds context to the original error. For example\n```go\n_, err := ioutil.ReadAll(r)\nif err != nil {\n        return errors.Wrap(err, \"read failed\")\n}\n```\n## Retrieving the cause of an error\n\nUsing `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.\n```go\ntype causer interface {\n        Cause() error\n}\n```\n`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:\n```go\nswitch err := errors.Cause(err).(type) {\ncase *MyError:\n        // handle specifically\ndefault:\n        // unknown error\n}\n```\n\n[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).\n\n## Roadmap\n\nWith the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows:\n\n- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible)\n- 1.0. Final release.\n\n## Contributing\n\nBecause of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports. \n\nBefore sending a PR, please discuss your change by raising an issue.\n\n## License\n\nBSD-2-Clause\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/appveyor.yml",
    "content": "version: build-{build}.{branch}\n\nclone_folder: C:\\gopath\\src\\github.com\\pkg\\errors\nshallow_clone: true # for startup speed\n\nenvironment:\n  GOPATH: C:\\gopath\n\nplatform:\n  - x64\n\n# http://www.appveyor.com/docs/installed-software\ninstall:\n  # some helpful output for debugging builds\n  - go version\n  - go env\n  # pre-installed MinGW at C:\\MinGW is 32bit only\n  # but MSYS2 at C:\\msys64 has mingw64\n  - set PATH=C:\\msys64\\mingw64\\bin;%PATH%\n  - gcc --version\n  - g++ --version\n\nbuild_script:\n  - go install -v ./...\n\ntest_script:\n  - set PATH=C:\\gopath\\bin;%PATH%\n  - go test -v ./...\n\n#artifacts:\n#  - path: '%GOPATH%\\bin\\*.exe'\ndeploy: off\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/errors.go",
    "content": "// Package errors provides simple error handling primitives.\n//\n// The traditional error handling idiom in Go is roughly akin to\n//\n//     if err != nil {\n//             return err\n//     }\n//\n// which when applied recursively up the call stack results in error reports\n// without context or debugging information. The errors package allows\n// programmers to add context to the failure path in their code in a way\n// that does not destroy the original value of the error.\n//\n// Adding context to an error\n//\n// The errors.Wrap function returns a new error that adds context to the\n// original error by recording a stack trace at the point Wrap is called,\n// together with the supplied message. For example\n//\n//     _, err := ioutil.ReadAll(r)\n//     if err != nil {\n//             return errors.Wrap(err, \"read failed\")\n//     }\n//\n// If additional control is required, the errors.WithStack and\n// errors.WithMessage functions destructure errors.Wrap into its component\n// operations: annotating an error with a stack trace and with a message,\n// respectively.\n//\n// Retrieving the cause of an error\n//\n// Using errors.Wrap constructs a stack of errors, adding context to the\n// preceding error. Depending on the nature of the error it may be necessary\n// to reverse the operation of errors.Wrap to retrieve the original error\n// for inspection. Any error value which implements this interface\n//\n//     type causer interface {\n//             Cause() error\n//     }\n//\n// can be inspected by errors.Cause. errors.Cause will recursively retrieve\n// the topmost error that does not implement causer, which is assumed to be\n// the original cause. For example:\n//\n//     switch err := errors.Cause(err).(type) {\n//     case *MyError:\n//             // handle specifically\n//     default:\n//             // unknown error\n//     }\n//\n// Although the causer interface is not exported by this package, it is\n// considered a part of its stable public interface.\n//\n// Formatted printing of errors\n//\n// All error values returned from this package implement fmt.Formatter and can\n// be formatted by the fmt package. The following verbs are supported:\n//\n//     %s    print the error. If the error has a Cause it will be\n//           printed recursively.\n//     %v    see %s\n//     %+v   extended format. Each Frame of the error's StackTrace will\n//           be printed in detail.\n//\n// Retrieving the stack trace of an error or wrapper\n//\n// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are\n// invoked. This information can be retrieved with the following interface:\n//\n//     type stackTracer interface {\n//             StackTrace() errors.StackTrace\n//     }\n//\n// The returned errors.StackTrace type is defined as\n//\n//     type StackTrace []Frame\n//\n// The Frame type represents a call site in the stack trace. Frame supports\n// the fmt.Formatter interface that can be used for printing information about\n// the stack trace of this error. For example:\n//\n//     if err, ok := err.(stackTracer); ok {\n//             for _, f := range err.StackTrace() {\n//                     fmt.Printf(\"%+s:%d\\n\", f, f)\n//             }\n//     }\n//\n// Although the stackTracer interface is not exported by this package, it is\n// considered a part of its stable public interface.\n//\n// See the documentation for Frame.Format for more details.\npackage errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// New returns an error with the supplied message.\n// New also records the stack trace at the point it was called.\nfunc New(message string) error {\n\treturn &fundamental{\n\t\tmsg:   message,\n\t\tstack: callers(),\n\t}\n}\n\n// Errorf formats according to a format specifier and returns the string\n// as a value that satisfies error.\n// Errorf also records the stack trace at the point it was called.\nfunc Errorf(format string, args ...interface{}) error {\n\treturn &fundamental{\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t\tstack: callers(),\n\t}\n}\n\n// fundamental is an error that has a message and a stack, but no caller.\ntype fundamental struct {\n\tmsg string\n\t*stack\n}\n\nfunc (f *fundamental) Error() string { return f.msg }\n\nfunc (f *fundamental) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tio.WriteString(s, f.msg)\n\t\t\tf.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, f.msg)\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", f.msg)\n\t}\n}\n\n// WithStack annotates err with a stack trace at the point WithStack was called.\n// If err is nil, WithStack returns nil.\nfunc WithStack(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\ntype withStack struct {\n\terror\n\t*stack\n}\n\nfunc (w *withStack) Cause() error { return w.error }\n\n// Unwrap provides compatibility for Go 1.13 error chains.\nfunc (w *withStack) Unwrap() error { return w.error }\n\nfunc (w *withStack) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\", w.Cause())\n\t\t\tw.stack.Format(s, verb)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's':\n\t\tio.WriteString(s, w.Error())\n\tcase 'q':\n\t\tfmt.Fprintf(s, \"%q\", w.Error())\n\t}\n}\n\n// Wrap returns an error annotating err with a stack trace\n// at the point Wrap is called, and the supplied message.\n// If err is nil, Wrap returns nil.\nfunc Wrap(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// Wrapf returns an error annotating err with a stack trace\n// at the point Wrapf is called, and the format specifier.\n// If err is nil, Wrapf returns nil.\nfunc Wrapf(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\terr = &withMessage{\n\t\tcause: err,\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t}\n\treturn &withStack{\n\t\terr,\n\t\tcallers(),\n\t}\n}\n\n// WithMessage annotates err with a new message.\n// If err is nil, WithMessage returns nil.\nfunc WithMessage(err error, message string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withMessage{\n\t\tcause: err,\n\t\tmsg:   message,\n\t}\n}\n\n// WithMessagef annotates err with the format specifier.\n// If err is nil, WithMessagef returns nil.\nfunc WithMessagef(err error, format string, args ...interface{}) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &withMessage{\n\t\tcause: err,\n\t\tmsg:   fmt.Sprintf(format, args...),\n\t}\n}\n\ntype withMessage struct {\n\tcause error\n\tmsg   string\n}\n\nfunc (w *withMessage) Error() string { return w.msg + \": \" + w.cause.Error() }\nfunc (w *withMessage) Cause() error  { return w.cause }\n\n// Unwrap provides compatibility for Go 1.13 error chains.\nfunc (w *withMessage) Unwrap() error { return w.cause }\n\nfunc (w *withMessage) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tif s.Flag('+') {\n\t\t\tfmt.Fprintf(s, \"%+v\\n\", w.Cause())\n\t\t\tio.WriteString(s, w.msg)\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tcase 's', 'q':\n\t\tio.WriteString(s, w.Error())\n\t}\n}\n\n// Cause returns the underlying cause of the error, if possible.\n// An error value has a cause if it implements the following\n// interface:\n//\n//     type causer interface {\n//            Cause() error\n//     }\n//\n// If the error does not implement Cause, the original error will\n// be returned. If the error is nil, nil will be returned without further\n// investigation.\nfunc Cause(err error) error {\n\ttype causer interface {\n\t\tCause() error\n\t}\n\n\tfor err != nil {\n\t\tcause, ok := err.(causer)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\terr = cause.Cause()\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/go113.go",
    "content": "// +build go1.13\n\npackage errors\n\nimport (\n\tstderrors \"errors\"\n)\n\n// Is reports whether any error in err's chain matches target.\n//\n// The chain consists of err itself followed by the sequence of errors obtained by\n// repeatedly calling Unwrap.\n//\n// An error is considered to match a target if it is equal to that target or if\n// it implements a method Is(error) bool such that Is(target) returns true.\nfunc Is(err, target error) bool { return stderrors.Is(err, target) }\n\n// As finds the first error in err's chain that matches target, and if so, sets\n// target to that error value and returns true.\n//\n// The chain consists of err itself followed by the sequence of errors obtained by\n// repeatedly calling Unwrap.\n//\n// An error matches target if the error's concrete value is assignable to the value\n// pointed to by target, or if the error has a method As(interface{}) bool such that\n// As(target) returns true. In the latter case, the As method is responsible for\n// setting target.\n//\n// As will panic if target is not a non-nil pointer to either a type that implements\n// error, or to any interface type. As returns false if err is nil.\nfunc As(err error, target interface{}) bool { return stderrors.As(err, target) }\n\n// Unwrap returns the result of calling the Unwrap method on err, if err's\n// type contains an Unwrap method returning error.\n// Otherwise, Unwrap returns nil.\nfunc Unwrap(err error) error {\n\treturn stderrors.Unwrap(err)\n}\n"
  },
  {
    "path": "vendor/github.com/pkg/errors/stack.go",
    "content": "package errors\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"path\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Frame represents a program counter inside a stack frame.\n// For historical reasons if Frame is interpreted as a uintptr\n// its value represents the program counter + 1.\ntype Frame uintptr\n\n// pc returns the program counter for this frame;\n// multiple frames may have the same PC value.\nfunc (f Frame) pc() uintptr { return uintptr(f) - 1 }\n\n// file returns the full path to the file that contains the\n// function for this Frame's pc.\nfunc (f Frame) file() string {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn \"unknown\"\n\t}\n\tfile, _ := fn.FileLine(f.pc())\n\treturn file\n}\n\n// line returns the line number of source code of the\n// function for this Frame's pc.\nfunc (f Frame) line() int {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn 0\n\t}\n\t_, line := fn.FileLine(f.pc())\n\treturn line\n}\n\n// name returns the name of this function, if known.\nfunc (f Frame) name() string {\n\tfn := runtime.FuncForPC(f.pc())\n\tif fn == nil {\n\t\treturn \"unknown\"\n\t}\n\treturn fn.Name()\n}\n\n// Format formats the frame according to the fmt.Formatter interface.\n//\n//    %s    source file\n//    %d    source line\n//    %n    function name\n//    %v    equivalent to %s:%d\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+s   function name and path of source file relative to the compile time\n//          GOPATH separated by \\n\\t (<funcname>\\n\\t<path>)\n//    %+v   equivalent to %+s:%d\nfunc (f Frame) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tio.WriteString(s, f.name())\n\t\t\tio.WriteString(s, \"\\n\\t\")\n\t\t\tio.WriteString(s, f.file())\n\t\tdefault:\n\t\t\tio.WriteString(s, path.Base(f.file()))\n\t\t}\n\tcase 'd':\n\t\tio.WriteString(s, strconv.Itoa(f.line()))\n\tcase 'n':\n\t\tio.WriteString(s, funcname(f.name()))\n\tcase 'v':\n\t\tf.Format(s, 's')\n\t\tio.WriteString(s, \":\")\n\t\tf.Format(s, 'd')\n\t}\n}\n\n// MarshalText formats a stacktrace Frame as a text string. The output is the\n// same as that of fmt.Sprintf(\"%+v\", f), but without newlines or tabs.\nfunc (f Frame) MarshalText() ([]byte, error) {\n\tname := f.name()\n\tif name == \"unknown\" {\n\t\treturn []byte(name), nil\n\t}\n\treturn []byte(fmt.Sprintf(\"%s %s:%d\", name, f.file(), f.line())), nil\n}\n\n// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).\ntype StackTrace []Frame\n\n// Format formats the stack of Frames according to the fmt.Formatter interface.\n//\n//    %s\tlists source files for each Frame in the stack\n//    %v\tlists the source file and line number for each Frame in the stack\n//\n// Format accepts flags that alter the printing of some verbs, as follows:\n//\n//    %+v   Prints filename, function, and line number for each Frame in the stack.\nfunc (st StackTrace) Format(s fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase s.Flag('+'):\n\t\t\tfor _, f := range st {\n\t\t\t\tio.WriteString(s, \"\\n\")\n\t\t\t\tf.Format(s, verb)\n\t\t\t}\n\t\tcase s.Flag('#'):\n\t\t\tfmt.Fprintf(s, \"%#v\", []Frame(st))\n\t\tdefault:\n\t\t\tst.formatSlice(s, verb)\n\t\t}\n\tcase 's':\n\t\tst.formatSlice(s, verb)\n\t}\n}\n\n// formatSlice will format this StackTrace into the given buffer as a slice of\n// Frame, only valid when called with '%s' or '%v'.\nfunc (st StackTrace) formatSlice(s fmt.State, verb rune) {\n\tio.WriteString(s, \"[\")\n\tfor i, f := range st {\n\t\tif i > 0 {\n\t\t\tio.WriteString(s, \" \")\n\t\t}\n\t\tf.Format(s, verb)\n\t}\n\tio.WriteString(s, \"]\")\n}\n\n// stack represents a stack of program counters.\ntype stack []uintptr\n\nfunc (s *stack) Format(st fmt.State, verb rune) {\n\tswitch verb {\n\tcase 'v':\n\t\tswitch {\n\t\tcase st.Flag('+'):\n\t\t\tfor _, pc := range *s {\n\t\t\t\tf := Frame(pc)\n\t\t\t\tfmt.Fprintf(st, \"\\n%+v\", f)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (s *stack) StackTrace() StackTrace {\n\tf := make([]Frame, len(*s))\n\tfor i := 0; i < len(f); i++ {\n\t\tf[i] = Frame((*s)[i])\n\t}\n\treturn f\n}\n\nfunc callers() *stack {\n\tconst depth = 32\n\tvar pcs [depth]uintptr\n\tn := runtime.Callers(3, pcs[:])\n\tvar st stack = pcs[0:n]\n\treturn &st\n}\n\n// funcname removes the path prefix component of a function's name reported by func.Name().\nfunc funcname(name string) string {\n\ti := strings.LastIndex(name, \"/\")\n\tname = name[i+1:]\n\ti = strings.Index(name, \".\")\n\treturn name[i+1:]\n}\n"
  },
  {
    "path": "vendor/github.com/pmezard/go-difflib/LICENSE",
    "content": "Copyright (c) 2013, Patrick Mezard\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\nnotice, this list of conditions and the following disclaimer.\n    Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n    The names of its contributors may not be used to endorse or promote\nproducts derived from this software without specific prior written\npermission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/pmezard/go-difflib/difflib/difflib.go",
    "content": "// Package difflib is a partial port of Python difflib module.\n//\n// It provides tools to compare sequences of strings and generate textual diffs.\n//\n// The following class and functions have been ported:\n//\n// - SequenceMatcher\n//\n// - unified_diff\n//\n// - context_diff\n//\n// Getting unified diffs was the main goal of the port. Keep in mind this code\n// is mostly suitable to output text differences in a human friendly way, there\n// are no guarantees generated diffs are consumable by patch(1).\npackage difflib\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\nfunc min(a, b int) int {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc max(a, b int) int {\n\tif a > b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc calculateRatio(matches, length int) float64 {\n\tif length > 0 {\n\t\treturn 2.0 * float64(matches) / float64(length)\n\t}\n\treturn 1.0\n}\n\ntype Match struct {\n\tA    int\n\tB    int\n\tSize int\n}\n\ntype OpCode struct {\n\tTag byte\n\tI1  int\n\tI2  int\n\tJ1  int\n\tJ2  int\n}\n\n// SequenceMatcher compares sequence of strings. The basic\n// algorithm predates, and is a little fancier than, an algorithm\n// published in the late 1980's by Ratcliff and Obershelp under the\n// hyperbolic name \"gestalt pattern matching\".  The basic idea is to find\n// the longest contiguous matching subsequence that contains no \"junk\"\n// elements (R-O doesn't address junk).  The same idea is then applied\n// recursively to the pieces of the sequences to the left and to the right\n// of the matching subsequence.  This does not yield minimal edit\n// sequences, but does tend to yield matches that \"look right\" to people.\n//\n// SequenceMatcher tries to compute a \"human-friendly diff\" between two\n// sequences.  Unlike e.g. UNIX(tm) diff, the fundamental notion is the\n// longest *contiguous* & junk-free matching subsequence.  That's what\n// catches peoples' eyes.  The Windows(tm) windiff has another interesting\n// notion, pairing up elements that appear uniquely in each sequence.\n// That, and the method here, appear to yield more intuitive difference\n// reports than does diff.  This method appears to be the least vulnerable\n// to synching up on blocks of \"junk lines\", though (like blank lines in\n// ordinary text files, or maybe \"<P>\" lines in HTML files).  That may be\n// because this is the only method of the 3 that has a *concept* of\n// \"junk\" <wink>.\n//\n// Timing:  Basic R-O is cubic time worst case and quadratic time expected\n// case.  SequenceMatcher is quadratic time for the worst case and has\n// expected-case behavior dependent in a complicated way on how many\n// elements the sequences have in common; best case time is linear.\ntype SequenceMatcher struct {\n\ta              []string\n\tb              []string\n\tb2j            map[string][]int\n\tIsJunk         func(string) bool\n\tautoJunk       bool\n\tbJunk          map[string]struct{}\n\tmatchingBlocks []Match\n\tfullBCount     map[string]int\n\tbPopular       map[string]struct{}\n\topCodes        []OpCode\n}\n\nfunc NewMatcher(a, b []string) *SequenceMatcher {\n\tm := SequenceMatcher{autoJunk: true}\n\tm.SetSeqs(a, b)\n\treturn &m\n}\n\nfunc NewMatcherWithJunk(a, b []string, autoJunk bool,\n\tisJunk func(string) bool) *SequenceMatcher {\n\n\tm := SequenceMatcher{IsJunk: isJunk, autoJunk: autoJunk}\n\tm.SetSeqs(a, b)\n\treturn &m\n}\n\n// Set two sequences to be compared.\nfunc (m *SequenceMatcher) SetSeqs(a, b []string) {\n\tm.SetSeq1(a)\n\tm.SetSeq2(b)\n}\n\n// Set the first sequence to be compared. The second sequence to be compared is\n// not changed.\n//\n// SequenceMatcher computes and caches detailed information about the second\n// sequence, so if you want to compare one sequence S against many sequences,\n// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other\n// sequences.\n//\n// See also SetSeqs() and SetSeq2().\nfunc (m *SequenceMatcher) SetSeq1(a []string) {\n\tif &a == &m.a {\n\t\treturn\n\t}\n\tm.a = a\n\tm.matchingBlocks = nil\n\tm.opCodes = nil\n}\n\n// Set the second sequence to be compared. The first sequence to be compared is\n// not changed.\nfunc (m *SequenceMatcher) SetSeq2(b []string) {\n\tif &b == &m.b {\n\t\treturn\n\t}\n\tm.b = b\n\tm.matchingBlocks = nil\n\tm.opCodes = nil\n\tm.fullBCount = nil\n\tm.chainB()\n}\n\nfunc (m *SequenceMatcher) chainB() {\n\t// Populate line -> index mapping\n\tb2j := map[string][]int{}\n\tfor i, s := range m.b {\n\t\tindices := b2j[s]\n\t\tindices = append(indices, i)\n\t\tb2j[s] = indices\n\t}\n\n\t// Purge junk elements\n\tm.bJunk = map[string]struct{}{}\n\tif m.IsJunk != nil {\n\t\tjunk := m.bJunk\n\t\tfor s, _ := range b2j {\n\t\t\tif m.IsJunk(s) {\n\t\t\t\tjunk[s] = struct{}{}\n\t\t\t}\n\t\t}\n\t\tfor s, _ := range junk {\n\t\t\tdelete(b2j, s)\n\t\t}\n\t}\n\n\t// Purge remaining popular elements\n\tpopular := map[string]struct{}{}\n\tn := len(m.b)\n\tif m.autoJunk && n >= 200 {\n\t\tntest := n/100 + 1\n\t\tfor s, indices := range b2j {\n\t\t\tif len(indices) > ntest {\n\t\t\t\tpopular[s] = struct{}{}\n\t\t\t}\n\t\t}\n\t\tfor s, _ := range popular {\n\t\t\tdelete(b2j, s)\n\t\t}\n\t}\n\tm.bPopular = popular\n\tm.b2j = b2j\n}\n\nfunc (m *SequenceMatcher) isBJunk(s string) bool {\n\t_, ok := m.bJunk[s]\n\treturn ok\n}\n\n// Find longest matching block in a[alo:ahi] and b[blo:bhi].\n//\n// If IsJunk is not defined:\n//\n// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where\n//     alo <= i <= i+k <= ahi\n//     blo <= j <= j+k <= bhi\n// and for all (i',j',k') meeting those conditions,\n//     k >= k'\n//     i <= i'\n//     and if i == i', j <= j'\n//\n// In other words, of all maximal matching blocks, return one that\n// starts earliest in a, and of all those maximal matching blocks that\n// start earliest in a, return the one that starts earliest in b.\n//\n// If IsJunk is defined, first the longest matching block is\n// determined as above, but with the additional restriction that no\n// junk element appears in the block.  Then that block is extended as\n// far as possible by matching (only) junk elements on both sides.  So\n// the resulting block never matches on junk except as identical junk\n// happens to be adjacent to an \"interesting\" match.\n//\n// If no blocks match, return (alo, blo, 0).\nfunc (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match {\n\t// CAUTION:  stripping common prefix or suffix would be incorrect.\n\t// E.g.,\n\t//    ab\n\t//    acab\n\t// Longest matching block is \"ab\", but if common prefix is\n\t// stripped, it's \"a\" (tied with \"b\").  UNIX(tm) diff does so\n\t// strip, so ends up claiming that ab is changed to acab by\n\t// inserting \"ca\" in the middle.  That's minimal but unintuitive:\n\t// \"it's obvious\" that someone inserted \"ac\" at the front.\n\t// Windiff ends up at the same place as diff, but by pairing up\n\t// the unique 'b's and then matching the first two 'a's.\n\tbesti, bestj, bestsize := alo, blo, 0\n\n\t// find longest junk-free match\n\t// during an iteration of the loop, j2len[j] = length of longest\n\t// junk-free match ending with a[i-1] and b[j]\n\tj2len := map[int]int{}\n\tfor i := alo; i != ahi; i++ {\n\t\t// look at all instances of a[i] in b; note that because\n\t\t// b2j has no junk keys, the loop is skipped if a[i] is junk\n\t\tnewj2len := map[int]int{}\n\t\tfor _, j := range m.b2j[m.a[i]] {\n\t\t\t// a[i] matches b[j]\n\t\t\tif j < blo {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif j >= bhi {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tk := j2len[j-1] + 1\n\t\t\tnewj2len[j] = k\n\t\t\tif k > bestsize {\n\t\t\t\tbesti, bestj, bestsize = i-k+1, j-k+1, k\n\t\t\t}\n\t\t}\n\t\tj2len = newj2len\n\t}\n\n\t// Extend the best by non-junk elements on each end.  In particular,\n\t// \"popular\" non-junk elements aren't in b2j, which greatly speeds\n\t// the inner loop above, but also means \"the best\" match so far\n\t// doesn't contain any junk *or* popular non-junk elements.\n\tfor besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) &&\n\t\tm.a[besti-1] == m.b[bestj-1] {\n\t\tbesti, bestj, bestsize = besti-1, bestj-1, bestsize+1\n\t}\n\tfor besti+bestsize < ahi && bestj+bestsize < bhi &&\n\t\t!m.isBJunk(m.b[bestj+bestsize]) &&\n\t\tm.a[besti+bestsize] == m.b[bestj+bestsize] {\n\t\tbestsize += 1\n\t}\n\n\t// Now that we have a wholly interesting match (albeit possibly\n\t// empty!), we may as well suck up the matching junk on each\n\t// side of it too.  Can't think of a good reason not to, and it\n\t// saves post-processing the (possibly considerable) expense of\n\t// figuring out what to do with it.  In the case of an empty\n\t// interesting match, this is clearly the right thing to do,\n\t// because no other kind of match is possible in the regions.\n\tfor besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) &&\n\t\tm.a[besti-1] == m.b[bestj-1] {\n\t\tbesti, bestj, bestsize = besti-1, bestj-1, bestsize+1\n\t}\n\tfor besti+bestsize < ahi && bestj+bestsize < bhi &&\n\t\tm.isBJunk(m.b[bestj+bestsize]) &&\n\t\tm.a[besti+bestsize] == m.b[bestj+bestsize] {\n\t\tbestsize += 1\n\t}\n\n\treturn Match{A: besti, B: bestj, Size: bestsize}\n}\n\n// Return list of triples describing matching subsequences.\n//\n// Each triple is of the form (i, j, n), and means that\n// a[i:i+n] == b[j:j+n].  The triples are monotonically increasing in\n// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are\n// adjacent triples in the list, and the second is not the last triple in the\n// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe\n// adjacent equal blocks.\n//\n// The last triple is a dummy, (len(a), len(b), 0), and is the only\n// triple with n==0.\nfunc (m *SequenceMatcher) GetMatchingBlocks() []Match {\n\tif m.matchingBlocks != nil {\n\t\treturn m.matchingBlocks\n\t}\n\n\tvar matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match\n\tmatchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match {\n\t\tmatch := m.findLongestMatch(alo, ahi, blo, bhi)\n\t\ti, j, k := match.A, match.B, match.Size\n\t\tif match.Size > 0 {\n\t\t\tif alo < i && blo < j {\n\t\t\t\tmatched = matchBlocks(alo, i, blo, j, matched)\n\t\t\t}\n\t\t\tmatched = append(matched, match)\n\t\t\tif i+k < ahi && j+k < bhi {\n\t\t\t\tmatched = matchBlocks(i+k, ahi, j+k, bhi, matched)\n\t\t\t}\n\t\t}\n\t\treturn matched\n\t}\n\tmatched := matchBlocks(0, len(m.a), 0, len(m.b), nil)\n\n\t// It's possible that we have adjacent equal blocks in the\n\t// matching_blocks list now.\n\tnonAdjacent := []Match{}\n\ti1, j1, k1 := 0, 0, 0\n\tfor _, b := range matched {\n\t\t// Is this block adjacent to i1, j1, k1?\n\t\ti2, j2, k2 := b.A, b.B, b.Size\n\t\tif i1+k1 == i2 && j1+k1 == j2 {\n\t\t\t// Yes, so collapse them -- this just increases the length of\n\t\t\t// the first block by the length of the second, and the first\n\t\t\t// block so lengthened remains the block to compare against.\n\t\t\tk1 += k2\n\t\t} else {\n\t\t\t// Not adjacent.  Remember the first block (k1==0 means it's\n\t\t\t// the dummy we started with), and make the second block the\n\t\t\t// new block to compare against.\n\t\t\tif k1 > 0 {\n\t\t\t\tnonAdjacent = append(nonAdjacent, Match{i1, j1, k1})\n\t\t\t}\n\t\t\ti1, j1, k1 = i2, j2, k2\n\t\t}\n\t}\n\tif k1 > 0 {\n\t\tnonAdjacent = append(nonAdjacent, Match{i1, j1, k1})\n\t}\n\n\tnonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0})\n\tm.matchingBlocks = nonAdjacent\n\treturn m.matchingBlocks\n}\n\n// Return list of 5-tuples describing how to turn a into b.\n//\n// Each tuple is of the form (tag, i1, i2, j1, j2).  The first tuple\n// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the\n// tuple preceding it, and likewise for j1 == the previous j2.\n//\n// The tags are characters, with these meanings:\n//\n// 'r' (replace):  a[i1:i2] should be replaced by b[j1:j2]\n//\n// 'd' (delete):   a[i1:i2] should be deleted, j1==j2 in this case.\n//\n// 'i' (insert):   b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case.\n//\n// 'e' (equal):    a[i1:i2] == b[j1:j2]\nfunc (m *SequenceMatcher) GetOpCodes() []OpCode {\n\tif m.opCodes != nil {\n\t\treturn m.opCodes\n\t}\n\ti, j := 0, 0\n\tmatching := m.GetMatchingBlocks()\n\topCodes := make([]OpCode, 0, len(matching))\n\tfor _, m := range matching {\n\t\t//  invariant:  we've pumped out correct diffs to change\n\t\t//  a[:i] into b[:j], and the next matching block is\n\t\t//  a[ai:ai+size] == b[bj:bj+size]. So we need to pump\n\t\t//  out a diff to change a[i:ai] into b[j:bj], pump out\n\t\t//  the matching block, and move (i,j) beyond the match\n\t\tai, bj, size := m.A, m.B, m.Size\n\t\ttag := byte(0)\n\t\tif i < ai && j < bj {\n\t\t\ttag = 'r'\n\t\t} else if i < ai {\n\t\t\ttag = 'd'\n\t\t} else if j < bj {\n\t\t\ttag = 'i'\n\t\t}\n\t\tif tag > 0 {\n\t\t\topCodes = append(opCodes, OpCode{tag, i, ai, j, bj})\n\t\t}\n\t\ti, j = ai+size, bj+size\n\t\t// the list of matching blocks is terminated by a\n\t\t// sentinel with size 0\n\t\tif size > 0 {\n\t\t\topCodes = append(opCodes, OpCode{'e', ai, i, bj, j})\n\t\t}\n\t}\n\tm.opCodes = opCodes\n\treturn m.opCodes\n}\n\n// Isolate change clusters by eliminating ranges with no changes.\n//\n// Return a generator of groups with up to n lines of context.\n// Each group is in the same format as returned by GetOpCodes().\nfunc (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode {\n\tif n < 0 {\n\t\tn = 3\n\t}\n\tcodes := m.GetOpCodes()\n\tif len(codes) == 0 {\n\t\tcodes = []OpCode{OpCode{'e', 0, 1, 0, 1}}\n\t}\n\t// Fixup leading and trailing groups if they show no changes.\n\tif codes[0].Tag == 'e' {\n\t\tc := codes[0]\n\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\tcodes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2}\n\t}\n\tif codes[len(codes)-1].Tag == 'e' {\n\t\tc := codes[len(codes)-1]\n\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\tcodes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)}\n\t}\n\tnn := n + n\n\tgroups := [][]OpCode{}\n\tgroup := []OpCode{}\n\tfor _, c := range codes {\n\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\t// End the current group and start a new one whenever\n\t\t// there is a large range with no changes.\n\t\tif c.Tag == 'e' && i2-i1 > nn {\n\t\t\tgroup = append(group, OpCode{c.Tag, i1, min(i2, i1+n),\n\t\t\t\tj1, min(j2, j1+n)})\n\t\t\tgroups = append(groups, group)\n\t\t\tgroup = []OpCode{}\n\t\t\ti1, j1 = max(i1, i2-n), max(j1, j2-n)\n\t\t}\n\t\tgroup = append(group, OpCode{c.Tag, i1, i2, j1, j2})\n\t}\n\tif len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') {\n\t\tgroups = append(groups, group)\n\t}\n\treturn groups\n}\n\n// Return a measure of the sequences' similarity (float in [0,1]).\n//\n// Where T is the total number of elements in both sequences, and\n// M is the number of matches, this is 2.0*M / T.\n// Note that this is 1 if the sequences are identical, and 0 if\n// they have nothing in common.\n//\n// .Ratio() is expensive to compute if you haven't already computed\n// .GetMatchingBlocks() or .GetOpCodes(), in which case you may\n// want to try .QuickRatio() or .RealQuickRation() first to get an\n// upper bound.\nfunc (m *SequenceMatcher) Ratio() float64 {\n\tmatches := 0\n\tfor _, m := range m.GetMatchingBlocks() {\n\t\tmatches += m.Size\n\t}\n\treturn calculateRatio(matches, len(m.a)+len(m.b))\n}\n\n// Return an upper bound on ratio() relatively quickly.\n//\n// This isn't defined beyond that it is an upper bound on .Ratio(), and\n// is faster to compute.\nfunc (m *SequenceMatcher) QuickRatio() float64 {\n\t// viewing a and b as multisets, set matches to the cardinality\n\t// of their intersection; this counts the number of matches\n\t// without regard to order, so is clearly an upper bound\n\tif m.fullBCount == nil {\n\t\tm.fullBCount = map[string]int{}\n\t\tfor _, s := range m.b {\n\t\t\tm.fullBCount[s] = m.fullBCount[s] + 1\n\t\t}\n\t}\n\n\t// avail[x] is the number of times x appears in 'b' less the\n\t// number of times we've seen it in 'a' so far ... kinda\n\tavail := map[string]int{}\n\tmatches := 0\n\tfor _, s := range m.a {\n\t\tn, ok := avail[s]\n\t\tif !ok {\n\t\t\tn = m.fullBCount[s]\n\t\t}\n\t\tavail[s] = n - 1\n\t\tif n > 0 {\n\t\t\tmatches += 1\n\t\t}\n\t}\n\treturn calculateRatio(matches, len(m.a)+len(m.b))\n}\n\n// Return an upper bound on ratio() very quickly.\n//\n// This isn't defined beyond that it is an upper bound on .Ratio(), and\n// is faster to compute than either .Ratio() or .QuickRatio().\nfunc (m *SequenceMatcher) RealQuickRatio() float64 {\n\tla, lb := len(m.a), len(m.b)\n\treturn calculateRatio(min(la, lb), la+lb)\n}\n\n// Convert range to the \"ed\" format\nfunc formatRangeUnified(start, stop int) string {\n\t// Per the diff spec at http://www.unix.org/single_unix_specification/\n\tbeginning := start + 1 // lines start numbering with one\n\tlength := stop - start\n\tif length == 1 {\n\t\treturn fmt.Sprintf(\"%d\", beginning)\n\t}\n\tif length == 0 {\n\t\tbeginning -= 1 // empty ranges begin at line just before the range\n\t}\n\treturn fmt.Sprintf(\"%d,%d\", beginning, length)\n}\n\n// Unified diff parameters\ntype UnifiedDiff struct {\n\tA        []string // First sequence lines\n\tFromFile string   // First file name\n\tFromDate string   // First file time\n\tB        []string // Second sequence lines\n\tToFile   string   // Second file name\n\tToDate   string   // Second file time\n\tEol      string   // Headers end of line, defaults to LF\n\tContext  int      // Number of context lines\n}\n\n// Compare two sequences of lines; generate the delta as a unified diff.\n//\n// Unified diffs are a compact way of showing line changes and a few\n// lines of context.  The number of context lines is set by 'n' which\n// defaults to three.\n//\n// By default, the diff control lines (those with ---, +++, or @@) are\n// created with a trailing newline.  This is helpful so that inputs\n// created from file.readlines() result in diffs that are suitable for\n// file.writelines() since both the inputs and outputs have trailing\n// newlines.\n//\n// For inputs that do not have trailing newlines, set the lineterm\n// argument to \"\" so that the output will be uniformly newline free.\n//\n// The unidiff format normally has a header for filenames and modification\n// times.  Any or all of these may be specified using strings for\n// 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.\n// The modification times are normally expressed in the ISO 8601 format.\nfunc WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error {\n\tbuf := bufio.NewWriter(writer)\n\tdefer buf.Flush()\n\twf := func(format string, args ...interface{}) error {\n\t\t_, err := buf.WriteString(fmt.Sprintf(format, args...))\n\t\treturn err\n\t}\n\tws := func(s string) error {\n\t\t_, err := buf.WriteString(s)\n\t\treturn err\n\t}\n\n\tif len(diff.Eol) == 0 {\n\t\tdiff.Eol = \"\\n\"\n\t}\n\n\tstarted := false\n\tm := NewMatcher(diff.A, diff.B)\n\tfor _, g := range m.GetGroupedOpCodes(diff.Context) {\n\t\tif !started {\n\t\t\tstarted = true\n\t\t\tfromDate := \"\"\n\t\t\tif len(diff.FromDate) > 0 {\n\t\t\t\tfromDate = \"\\t\" + diff.FromDate\n\t\t\t}\n\t\t\ttoDate := \"\"\n\t\t\tif len(diff.ToDate) > 0 {\n\t\t\t\ttoDate = \"\\t\" + diff.ToDate\n\t\t\t}\n\t\t\tif diff.FromFile != \"\" || diff.ToFile != \"\" {\n\t\t\t\terr := wf(\"--- %s%s%s\", diff.FromFile, fromDate, diff.Eol)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\terr = wf(\"+++ %s%s%s\", diff.ToFile, toDate, diff.Eol)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfirst, last := g[0], g[len(g)-1]\n\t\trange1 := formatRangeUnified(first.I1, last.I2)\n\t\trange2 := formatRangeUnified(first.J1, last.J2)\n\t\tif err := wf(\"@@ -%s +%s @@%s\", range1, range2, diff.Eol); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor _, c := range g {\n\t\t\ti1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2\n\t\t\tif c.Tag == 'e' {\n\t\t\t\tfor _, line := range diff.A[i1:i2] {\n\t\t\t\t\tif err := ws(\" \" + line); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif c.Tag == 'r' || c.Tag == 'd' {\n\t\t\t\tfor _, line := range diff.A[i1:i2] {\n\t\t\t\t\tif err := ws(\"-\" + line); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif c.Tag == 'r' || c.Tag == 'i' {\n\t\t\t\tfor _, line := range diff.B[j1:j2] {\n\t\t\t\t\tif err := ws(\"+\" + line); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Like WriteUnifiedDiff but returns the diff a string.\nfunc GetUnifiedDiffString(diff UnifiedDiff) (string, error) {\n\tw := &bytes.Buffer{}\n\terr := WriteUnifiedDiff(w, diff)\n\treturn string(w.Bytes()), err\n}\n\n// Convert range to the \"ed\" format.\nfunc formatRangeContext(start, stop int) string {\n\t// Per the diff spec at http://www.unix.org/single_unix_specification/\n\tbeginning := start + 1 // lines start numbering with one\n\tlength := stop - start\n\tif length == 0 {\n\t\tbeginning -= 1 // empty ranges begin at line just before the range\n\t}\n\tif length <= 1 {\n\t\treturn fmt.Sprintf(\"%d\", beginning)\n\t}\n\treturn fmt.Sprintf(\"%d,%d\", beginning, beginning+length-1)\n}\n\ntype ContextDiff UnifiedDiff\n\n// Compare two sequences of lines; generate the delta as a context diff.\n//\n// Context diffs are a compact way of showing line changes and a few\n// lines of context. The number of context lines is set by diff.Context\n// which defaults to three.\n//\n// By default, the diff control lines (those with *** or ---) are\n// created with a trailing newline.\n//\n// For inputs that do not have trailing newlines, set the diff.Eol\n// argument to \"\" so that the output will be uniformly newline free.\n//\n// The context diff format normally has a header for filenames and\n// modification times.  Any or all of these may be specified using\n// strings for diff.FromFile, diff.ToFile, diff.FromDate, diff.ToDate.\n// The modification times are normally expressed in the ISO 8601 format.\n// If not specified, the strings default to blanks.\nfunc WriteContextDiff(writer io.Writer, diff ContextDiff) error {\n\tbuf := bufio.NewWriter(writer)\n\tdefer buf.Flush()\n\tvar diffErr error\n\twf := func(format string, args ...interface{}) {\n\t\t_, err := buf.WriteString(fmt.Sprintf(format, args...))\n\t\tif diffErr == nil && err != nil {\n\t\t\tdiffErr = err\n\t\t}\n\t}\n\tws := func(s string) {\n\t\t_, err := buf.WriteString(s)\n\t\tif diffErr == nil && err != nil {\n\t\t\tdiffErr = err\n\t\t}\n\t}\n\n\tif len(diff.Eol) == 0 {\n\t\tdiff.Eol = \"\\n\"\n\t}\n\n\tprefix := map[byte]string{\n\t\t'i': \"+ \",\n\t\t'd': \"- \",\n\t\t'r': \"! \",\n\t\t'e': \"  \",\n\t}\n\n\tstarted := false\n\tm := NewMatcher(diff.A, diff.B)\n\tfor _, g := range m.GetGroupedOpCodes(diff.Context) {\n\t\tif !started {\n\t\t\tstarted = true\n\t\t\tfromDate := \"\"\n\t\t\tif len(diff.FromDate) > 0 {\n\t\t\t\tfromDate = \"\\t\" + diff.FromDate\n\t\t\t}\n\t\t\ttoDate := \"\"\n\t\t\tif len(diff.ToDate) > 0 {\n\t\t\t\ttoDate = \"\\t\" + diff.ToDate\n\t\t\t}\n\t\t\tif diff.FromFile != \"\" || diff.ToFile != \"\" {\n\t\t\t\twf(\"*** %s%s%s\", diff.FromFile, fromDate, diff.Eol)\n\t\t\t\twf(\"--- %s%s%s\", diff.ToFile, toDate, diff.Eol)\n\t\t\t}\n\t\t}\n\n\t\tfirst, last := g[0], g[len(g)-1]\n\t\tws(\"***************\" + diff.Eol)\n\n\t\trange1 := formatRangeContext(first.I1, last.I2)\n\t\twf(\"*** %s ****%s\", range1, diff.Eol)\n\t\tfor _, c := range g {\n\t\t\tif c.Tag == 'r' || c.Tag == 'd' {\n\t\t\t\tfor _, cc := range g {\n\t\t\t\t\tif cc.Tag == 'i' {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfor _, line := range diff.A[cc.I1:cc.I2] {\n\t\t\t\t\t\tws(prefix[cc.Tag] + line)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\trange2 := formatRangeContext(first.J1, last.J2)\n\t\twf(\"--- %s ----%s\", range2, diff.Eol)\n\t\tfor _, c := range g {\n\t\t\tif c.Tag == 'r' || c.Tag == 'i' {\n\t\t\t\tfor _, cc := range g {\n\t\t\t\t\tif cc.Tag == 'd' {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfor _, line := range diff.B[cc.J1:cc.J2] {\n\t\t\t\t\t\tws(prefix[cc.Tag] + line)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn diffErr\n}\n\n// Like WriteContextDiff but returns the diff a string.\nfunc GetContextDiffString(diff ContextDiff) (string, error) {\n\tw := &bytes.Buffer{}\n\terr := WriteContextDiff(w, diff)\n\treturn string(w.Bytes()), err\n}\n\n// Split a string on \"\\n\" while preserving them. The output can be used\n// as input for UnifiedDiff and ContextDiff structures.\nfunc SplitLines(s string) []string {\n\tlines := strings.SplitAfter(s, \"\\n\")\n\tlines[len(lines)-1] += \"\\n\"\n\treturn lines\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Power DevOps\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": "vendor/github.com/power-devops/perfstat/c_helpers.c",
    "content": "#include \"c_helpers.h\"\n\nGETFUNC(cpu)\nGETFUNC(disk)\nGETFUNC(diskadapter)\nGETFUNC(diskpath)\nGETFUNC(fcstat)\nGETFUNC(logicalvolume)\nGETFUNC(memory_page)\nGETFUNC(netadapter)\nGETFUNC(netbuffer)\nGETFUNC(netinterface)\nGETFUNC(pagingspace)\nGETFUNC(process)\nGETFUNC(thread)\nGETFUNC(volumegroup)\n\ndouble get_partition_mhz(perfstat_partition_config_t pinfo) {\n\treturn pinfo.processorMHz;\n}\n\nchar *get_ps_hostname(perfstat_pagingspace_t *ps) {\n\treturn ps->u.nfs_paging.hostname;\n}\n\nchar *get_ps_filename(perfstat_pagingspace_t *ps) {\n\treturn ps->u.nfs_paging.filename;\n}\n\nchar *get_ps_vgname(perfstat_pagingspace_t *ps) {\n\treturn ps->u.lv_paging.vgname;\n}\n\ntime_t boottime()\n{\n        register struct utmpx *utmp;\n\n\tsetutxent();\n        while ( (utmp = getutxent()) != NULL ) {\n                if (utmp->ut_type == BOOT_TIME) {\n                        return utmp->ut_tv.tv_sec;\n                }\n        }\n\tendutxent();\n        return -1;\n}\n\nstruct fsinfo *get_filesystem_stat(struct fsinfo *fs_all, int n) {\n\tif (!fs_all) return NULL;\n\treturn &(fs_all[n]);\n}\n\nint get_mounts(struct vmount **vmountpp) {\n        int size;\n        struct vmount *vm;\n        int nmounts;\n\n        size = BUFSIZ;\n\n        while (1) {\n                if ((vm = (struct vmount *)malloc((size_t)size)) == NULL) {\n                        perror(\"malloc failed\");\n                        exit(-1);\n                }\n                if ((nmounts = mntctl(MCTL_QUERY, size, (caddr_t)vm)) > 0) {\n                        *vmountpp = vm;\n                        return nmounts;\n                } else if (nmounts == 0) {\n                        size = *(int *)vm;\n                        free((void *)vm);\n                } else {\n                        free((void *)vm);\n                        return -1;\n                }\n        }\n}\n\nvoid fill_fsinfo(struct statfs statbuf, struct fsinfo *fs) {\n        fsblkcnt_t freeblks, totblks, usedblks;\n        fsblkcnt_t tinodes, ninodes, ifree;\n        uint    cfactor;\n\n        if (statbuf.f_blocks == -1) {\n                fs->totalblks = 0;\n                fs->freeblks = 0;\n                fs->totalinodes = 0;\n                fs->freeinodes = 0;\n                return;\n        }\n\n        cfactor = statbuf.f_bsize / 512;\n        fs->freeblks = statbuf.f_bavail * cfactor;\n        fs->totalblks = statbuf.f_blocks * cfactor;\n\n        fs->freeinodes = statbuf.f_ffree;\n        fs->totalinodes = statbuf.f_files;\n\n        if (fs->freeblks < 0)\n                fs->freeblks = 0;\n}\n\nint getfsinfo(char *fsname, char *devname, char *host, char *options, int flags, int fstype, struct fsinfo *fs) {\n        struct statfs statbuf;\n\tint devname_size = strlen(devname);\n\tint fsname_size = strlen(fsname);\n        char buf[BUFSIZ];\n        char *p;\n\n        if (fs == NULL) {\n                return 1;\n        }\n\n        for (p = strtok(options, \",\"); p != NULL; p = strtok(NULL, \",\"))\n                if (strcmp(p, \"ignore\") == 0)\n                        return 0;\n\n        if (*host != 0 && strcmp(host, \"-\") != 0) {\n                sprintf(buf, \"%s:%s\", host, devname);\n                devname = buf;\n        }\n        fs->devname = (char *)calloc(devname_size+1, 1);\n        fs->fsname = (char *)calloc(fsname_size+1, 1);\n        strncpy(fs->devname, devname, devname_size);\n        strncpy(fs->fsname, fsname, fsname_size);\n\tfs->flags = flags;\n\tfs->fstype = fstype;\n\n        if (statfs(fsname,&statbuf) < 0) {\n                return 1;\n        }\n\n        fill_fsinfo(statbuf, fs);\n        return 0;\n}\n\nstruct fsinfo *get_all_fs(int *rc) {\n        struct vmount *mnt;\n        struct fsinfo *fs_all;\n        int nmounts;\n\n        *rc = -1;\n        if ((nmounts = get_mounts(&mnt)) <= 0) {\n                perror(\"Can't get mount table info\");\n                return NULL;\n        }\n\n        fs_all = (struct fsinfo *)calloc(sizeof(struct fsinfo), nmounts);\n        while ((*rc)++, nmounts--) {\n                getfsinfo(vmt2dataptr(mnt, VMT_STUB),\n                          vmt2dataptr(mnt, VMT_OBJECT),\n                          vmt2dataptr(mnt, VMT_HOST),\n                          vmt2dataptr(mnt, VMT_ARGS),\n\t\t\t  mnt->vmt_flags,\n\t\t\t  mnt->vmt_gfstype,\n                          &fs_all[*rc]);\n                mnt = (struct vmount *)((char *)mnt + mnt->vmt_length);\n        }\n        return fs_all;\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/c_helpers.h",
    "content": "#ifndef C_HELPERS_H\n#define C_HELPERS_H\n\n#include <sys/types.h>\n#include <sys/mntctl.h>\n#include <sys/vmount.h>\n#include <sys/statfs.h>\n#include <libperfstat.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <utmpx.h>\n\n#define GETFUNC(TYPE) perfstat_##TYPE##_t *get_##TYPE##_stat(perfstat_##TYPE##_t *b, int n) { \\\n        if (!b) return NULL; \\\n        return &(b[n]); \\\n}\n\n#define GETFUNC_EXT(TYPE) extern perfstat_##TYPE##_t *get_##TYPE##_stat(perfstat_##TYPE##_t *, int);\n\nGETFUNC_EXT(cpu)\nGETFUNC_EXT(disk)\nGETFUNC_EXT(diskadapter)\nGETFUNC_EXT(diskpath)\nGETFUNC_EXT(fcstat)\nGETFUNC_EXT(logicalvolume)\nGETFUNC_EXT(memory_page)\nGETFUNC_EXT(netadapter)\nGETFUNC_EXT(netbuffer)\nGETFUNC_EXT(netinterface)\nGETFUNC_EXT(pagingspace)\nGETFUNC_EXT(process)\nGETFUNC_EXT(thread)\nGETFUNC_EXT(volumegroup)\n\nstruct fsinfo {\n        char *devname;\n        char *fsname;\n\tint flags;\n\tint fstype;\n        unsigned long totalblks;\n        unsigned long freeblks;\n        unsigned long totalinodes;\n        unsigned long freeinodes;\n};\n\nextern double get_partition_mhz(perfstat_partition_config_t);\nextern char *get_ps_hostname(perfstat_pagingspace_t *);\nextern char *get_ps_filename(perfstat_pagingspace_t *);\nextern char *get_ps_vgname(perfstat_pagingspace_t *);\nextern time_t boottime();\nstruct fsinfo *get_filesystem_stat(struct fsinfo *, int);\nint get_mounts(struct vmount **);\nvoid fill_statfs(struct statfs, struct fsinfo *);\nint getfsinfo(char *, char *, char *, char *, int, int, struct fsinfo *);\nstruct fsinfo *get_all_fs(int *);\n\n#endif\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/config.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n*/\nimport \"C\"\n\nfunc EnableLVMStat() {\n\tC.perfstat_config(C.PERFSTAT_ENABLE|C.PERFSTAT_LV|C.PERFSTAT_VG, nil)\n}\n\nfunc DisableLVMStat() {\n\tC.perfstat_config(C.PERFSTAT_DISABLE|C.PERFSTAT_LV|C.PERFSTAT_VG, nil)\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/cpustat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"time\"\n\t\"unsafe\"\n)\n\nfunc CpuStat() ([]CPU, error) {\n\tvar cpustat *C.perfstat_cpu_t\n\tvar cpu C.perfstat_id_t\n\n\tncpu := runtime.NumCPU()\n\n\tcpustat_len := C.sizeof_perfstat_cpu_t * C.ulong(ncpu)\n\tcpustat = (*C.perfstat_cpu_t)(C.malloc(cpustat_len))\n\tdefer C.free(unsafe.Pointer(cpustat))\n\tC.strcpy(&cpu.name[0], C.CString(C.FIRST_CPU))\n\tr := C.perfstat_cpu(&cpu, cpustat, C.sizeof_perfstat_cpu_t, C.int(ncpu))\n\tif r <= 0 {\n\t\treturn nil, fmt.Errorf(\"error perfstat_cpu()\")\n\t}\n\tc := make([]CPU, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tn := C.get_cpu_stat(cpustat, C.int(i))\n\t\tif n != nil {\n\t\t\tc[i] = perfstatcpu2cpu(n)\n\t\t}\n\t}\n\treturn c, nil\n}\n\nfunc CpuTotalStat() (*CPUTotal, error) {\n\tvar cpustat *C.perfstat_cpu_total_t\n\n\tcpustat = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t))\n\tdefer C.free(unsafe.Pointer(cpustat))\n\tr := C.perfstat_cpu_total(nil, cpustat, C.sizeof_perfstat_cpu_total_t, 1)\n\tif r <= 0 {\n\t\treturn nil, fmt.Errorf(\"error perfstat_cpu_total()\")\n\t}\n\tc := perfstatcputotal2cputotal(cpustat)\n\treturn &c, nil\n}\n\nfunc CpuUtilStat(intvl time.Duration) (*CPUUtil, error) {\n\tvar cpuutil *C.perfstat_cpu_util_t\n\tvar newt *C.perfstat_cpu_total_t\n\tvar oldt *C.perfstat_cpu_total_t\n\tvar data C.perfstat_rawdata_t\n\n\toldt = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t))\n\tnewt = (*C.perfstat_cpu_total_t)(C.malloc(C.sizeof_perfstat_cpu_total_t))\n\tcpuutil = (*C.perfstat_cpu_util_t)(C.malloc(C.sizeof_perfstat_cpu_util_t))\n\tdefer C.free(unsafe.Pointer(oldt))\n\tdefer C.free(unsafe.Pointer(newt))\n\tdefer C.free(unsafe.Pointer(cpuutil))\n\n\tr := C.perfstat_cpu_total(nil, oldt, C.sizeof_perfstat_cpu_total_t, 1)\n\tif r <= 0 {\n\t\treturn nil, fmt.Errorf(\"error perfstat_cpu_total()\")\n\t}\n\n\ttime.Sleep(intvl)\n\n\tr = C.perfstat_cpu_total(nil, newt, C.sizeof_perfstat_cpu_total_t, 1)\n\tif r <= 0 {\n\t\treturn nil, fmt.Errorf(\"error perfstat_cpu_total()\")\n\t}\n\n\tdata._type = C.UTIL_CPU_TOTAL\n\tdata.curstat = unsafe.Pointer(newt)\n\tdata.prevstat = unsafe.Pointer(oldt)\n\tdata.sizeof_data = C.sizeof_perfstat_cpu_total_t\n\tdata.cur_elems = 1\n\tdata.prev_elems = 1\n\n\tr = C.perfstat_cpu_util(&data, cpuutil, C.sizeof_perfstat_cpu_util_t, 1)\n\tif r <= 0 {\n\t\treturn nil, fmt.Errorf(\"error perfstat_cpu_util()\")\n\t}\n\tu := perfstatcpuutil2cpuutil(cpuutil)\n\treturn &u, nil\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/diskstat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n#include <string.h>\n#include <stdlib.h>\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nfunc DiskTotalStat() (*DiskTotal, error) {\n\tvar disk C.perfstat_disk_total_t\n\n\trc := C.perfstat_disk_total(nil, &disk, C.sizeof_perfstat_disk_total_t, 1)\n\tif rc != 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_disk_total() error\")\n\t}\n\td := perfstatdisktotal2disktotal(disk)\n\treturn &d, nil\n}\n\nfunc DiskAdapterStat() ([]DiskAdapter, error) {\n\tvar adapter *C.perfstat_diskadapter_t\n\tvar adptname C.perfstat_id_t\n\n\tnumadpt := C.perfstat_diskadapter(nil, nil, C.sizeof_perfstat_diskadapter_t, 0)\n\tif numadpt <= 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_diskadapter() error\")\n\t}\n\n\tadapter_len := C.sizeof_perfstat_diskadapter_t * C.ulong(numadpt)\n\tadapter = (*C.perfstat_diskadapter_t)(C.malloc(adapter_len))\n\tdefer C.free(unsafe.Pointer(adapter))\n\tC.strcpy(&adptname.name[0], C.CString(C.FIRST_DISKADAPTER))\n\tr := C.perfstat_diskadapter(&adptname, adapter, C.sizeof_perfstat_diskadapter_t, numadpt)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_diskadapter() error\")\n\t}\n\tda := make([]DiskAdapter, r)\n\tfor i := 0; i < int(r); i++ {\n\t\td := C.get_diskadapter_stat(adapter, C.int(i))\n\t\tif d != nil {\n\t\t\tda[i] = perfstatdiskadapter2diskadapter(d)\n\t\t}\n\t}\n\treturn da, nil\n}\n\nfunc DiskStat() ([]Disk, error) {\n\tvar disk *C.perfstat_disk_t\n\tvar diskname C.perfstat_id_t\n\n\tnumdisk := C.perfstat_disk(nil, nil, C.sizeof_perfstat_disk_t, 0)\n\tif numdisk <= 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_disk() error\")\n\t}\n\n\tdisk_len := C.sizeof_perfstat_disk_t * C.ulong(numdisk)\n\tdisk = (*C.perfstat_disk_t)(C.malloc(disk_len))\n\tdefer C.free(unsafe.Pointer(disk))\n\tC.strcpy(&diskname.name[0], C.CString(C.FIRST_DISK))\n\tr := C.perfstat_disk(&diskname, disk, C.sizeof_perfstat_disk_t, numdisk)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_disk() error\")\n\t}\n\td := make([]Disk, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tds := C.get_disk_stat(disk, C.int(i))\n\t\tif ds != nil {\n\t\t\td[i] = perfstatdisk2disk(ds)\n\t\t}\n\t}\n\treturn d, nil\n}\n\nfunc DiskPathStat() ([]DiskPath, error) {\n\tvar diskpath *C.perfstat_diskpath_t\n\tvar pathname C.perfstat_id_t\n\n\tnumpaths := C.perfstat_diskpath(nil, nil, C.sizeof_perfstat_diskpath_t, 0)\n\tif numpaths <= 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_diskpath() error\")\n\t}\n\n\tpath_len := C.sizeof_perfstat_diskpath_t * C.ulong(numpaths)\n\tdiskpath = (*C.perfstat_diskpath_t)(C.malloc(path_len))\n\tdefer C.free(unsafe.Pointer(diskpath))\n\tC.strcpy(&pathname.name[0], C.CString(C.FIRST_DISKPATH))\n\tr := C.perfstat_diskpath(&pathname, diskpath, C.sizeof_perfstat_diskpath_t, numpaths)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_diskpath() error\")\n\t}\n\td := make([]DiskPath, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tp := C.get_diskpath_stat(diskpath, C.int(i))\n\t\tif p != nil {\n\t\t\td[i] = perfstatdiskpath2diskpath(p)\n\t\t}\n\t}\n\treturn d, nil\n}\n\nfunc FCAdapterStat() ([]FCAdapter, error) {\n\tvar fcstat *C.perfstat_fcstat_t\n\tvar fcname C.perfstat_id_t\n\n\tnumadpt := C.perfstat_fcstat(nil, nil, C.sizeof_perfstat_fcstat_t, 0)\n\tif numadpt <= 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_fcstat() error\")\n\t}\n\n\tfcstat_len := C.sizeof_perfstat_fcstat_t * C.ulong(numadpt)\n\tfcstat = (*C.perfstat_fcstat_t)(C.malloc(fcstat_len))\n\tdefer C.free(unsafe.Pointer(fcstat))\n\tC.strcpy(&fcname.name[0], C.CString(C.FIRST_NETINTERFACE))\n\tr := C.perfstat_fcstat(&fcname, fcstat, C.sizeof_perfstat_fcstat_t, numadpt)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_fcstat() error\")\n\t}\n\tfca := make([]FCAdapter, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tf := C.get_fcstat_stat(fcstat, C.int(i))\n\t\tif f != nil {\n\t\t\tfca[i] = perfstatfcstat2fcadapter(f)\n\t\t}\n\t}\n\treturn fca, nil\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/doc.go",
    "content": "// +build !aix\n\n// Copyright 2020 Power-Devops.com. All rights reserved.\n// Use of this source code is governed by the license\n// that can be found in the LICENSE file.\n/*\nPackage perfstat is Go interface to IBM AIX libperfstat.\nTo use it you need AIX with installed bos.perf.libperfstat. You can check, if is installed using the following command:\n\n\t$ lslpp -L bos.perf.perfstat\n\nThe package is written using Go 1.14.7 and AIX 7.2 TL5. It should work with earlier TLs of AIX 7.2, but I\ncan't guarantee that perfstat structures in the TLs have all the same fields as the structures in AIX 7.2 TL5.\n\nFor documentation of perfstat on AIX and using it in programs refer to the official IBM documentation:\nhttps://www.ibm.com/support/knowledgecenter/ssw_aix_72/performancetools/idprftools_perfstat.html\n*/\npackage perfstat\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n// EnableLVMStat() switches on LVM (logical volumes and volume groups) performance statistics.\n// With this enabled you can use fields KBReads, KBWrites, and IOCnt\n// in LogicalVolume and VolumeGroup data types.\nfunc EnableLVMStat() {}\n\n// DisableLVMStat() switchess of LVM (logical volumes and volume groups) performance statistics.\n// This is the default state. In this case LogicalVolume and VolumeGroup data types are\n// populated with informations about LVM structures, but performance statistics fields\n// (KBReads, KBWrites, IOCnt) are empty.\nfunc DisableLVMStat() {}\n\n// CpuStat() returns array of CPU structures with information about\n// logical CPUs on the system.\n// IBM documentation:\n//   * https://www.ibm.com/support/knowledgecenter/ssw_aix_72/performancetools/idprftools_perfstat_int_cpu.html\n//   * https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/p_bostechref/perfstat_cpu.html\nfunc CpuStat() ([]CPU, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\n// CpuTotalStat() returns general information about CPUs on the system.\n// IBM documentation:\n//   * https://www.ibm.com/support/knowledgecenter/ssw_aix_72/performancetools/idprftools_perfstat_glob_cpu.html\n//   * https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/p_bostechref/perfstat_cputot.html\nfunc CpuTotalStat() (*CPUTotal, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\n// CpuUtilStat() calculates CPU utilization.\n// IBM documentation:\n//   * https://www.ibm.com/support/knowledgecenter/ssw_aix_72/performancetools/idprftools_perfstat_cpu_util.html\n//   * https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/p_bostechref/perfstat_cpu_util.html\nfunc CpuUtilStat(intvl time.Duration) (*CPUUtil, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc DiskTotalStat() (*DiskTotal, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc DiskAdapterStat() ([]DiskAdapter, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc DiskStat() ([]Disk, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc DiskPathStat() ([]DiskPath, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc FCAdapterStat() ([]FCAdapter, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc PartitionStat() (*PartitionConfig, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc LogicalVolumeStat() ([]LogicalVolume, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc VolumeGroupStat() ([]VolumeGroup, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc MemoryTotalStat() (*MemoryTotal, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc MemoryPageStat() ([]MemoryPage, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc PagingSpaceStat() ([]PagingSpace, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc NetIfaceTotalStat() (*NetIfaceTotal, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc NetBufferStat() ([]NetBuffer, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc NetIfaceStat() ([]NetIface, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc NetAdapterStat() ([]NetAdapter, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc ProcessStat() ([]Process, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc ThreadStat() ([]Thread, error) {\n\treturn nil, fmt.Errorf(\"not implemented\")\n}\n\nfunc Sysconf(name int32) (int64, error) {\n\treturn 0, fmt.Errorf(\"not implemented\")\n}\n\nfunc GetCPUImplementation() string {\n\treturn \"\"\n}\n\nfunc POWER9OrNewer() bool {\n\treturn false\n}\n\nfunc POWER9() bool {\n\treturn false\n}\n\nfunc POWER8OrNewer() bool {\n\treturn false\n}\n\nfunc POWER8() bool {\n\treturn false\n}\n\nfunc POWER7OrNewer() bool {\n\treturn false\n}\n\nfunc POWER7() bool {\n\treturn false\n}\n\nfunc HasTransactionalMemory() bool {\n\treturn false\n}\n\nfunc Is64Bit() bool {\n\treturn false\n}\n\nfunc IsSMP() bool {\n\treturn false\n}\n\nfunc HasVMX() bool {\n\treturn false\n}\n\nfunc HasVSX() bool {\n\treturn false\n}\n\nfunc HasDFP() bool {\n\treturn false\n}\n\nfunc HasNxGzip() bool {\n\treturn false\n}\n\nfunc PksCapable() bool {\n\treturn false\n}\n\nfunc PksEnabled() bool {\n\treturn false\n}\n\nfunc CPUMode() string {\n\treturn \"\"\n}\n\nfunc KernelBits() int {\n\treturn 0\n}\n\nfunc IsLPAR() bool {\n\treturn false\n}\n\nfunc CpuAddCapable() bool {\n\treturn false\n}\n\nfunc CpuRemoveCapable() bool {\n\treturn false\n}\n\nfunc MemoryAddCapable() bool {\n\treturn false\n}\n\nfunc MemoryRemoveCapable() bool {\n\treturn false\n}\n\nfunc DLparCapable() bool {\n\treturn false\n}\n\nfunc IsNUMA() bool {\n\treturn false\n}\n\nfunc KernelKeys() bool {\n\treturn false\n}\n\nfunc RecoveryMode() bool {\n\treturn false\n}\n\nfunc EnhancedAffinity() bool {\n\treturn false\n}\n\nfunc VTpmEnabled() bool {\n\treturn false\n}\n\nfunc IsVIOS() bool {\n\treturn false\n}\n\nfunc MLSEnabled() bool {\n\treturn false\n}\n\nfunc SPLparCapable() bool {\n\treturn false\n}\n\nfunc SPLparEnabled() bool {\n\treturn false\n}\n\nfunc DedicatedLpar() bool {\n\treturn false\n}\n\nfunc SPLparCapped() bool {\n\treturn false\n}\n\nfunc SPLparDonating() bool {\n\treturn false\n}\n\nfunc SmtCapable() bool {\n\treturn false\n}\n\nfunc SmtEnabled() bool {\n\treturn false\n}\n\nfunc VrmCapable() bool {\n\treturn false\n}\n\nfunc VrmEnabled() bool {\n\treturn false\n}\n\nfunc AmeEnabled() bool {\n\treturn false\n}\n\nfunc EcoCapable() bool {\n\treturn false\n}\n\nfunc EcoEnabled() bool {\n\treturn false\n}\n\nfunc BootTime() (uint64, error) {\n\treturn 0, fmt.Errorf(\"Not implemented\")\n}\n\nfunc UptimeSeconds() (uint64, error) {\n\treturn 0, fmt.Errorf(\"Not implemented\")\n}\n\nfunc FileSystemStat() ([]FileSystem, error) {\n\treturn nil, fmt.Errorf(\"Not implemented\")\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/fsstat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n)\n\nfunc FileSystemStat() ([]FileSystem, error) {\n\tvar fsinfo *C.struct_fsinfo\n\tvar nmounts C.int\n\n\tfsinfo = C.get_all_fs(&nmounts)\n\tif nmounts <= 0 {\n\t\treturn nil, fmt.Errorf(\"No mounts found\")\n\t}\n\n\tfs := make([]FileSystem, nmounts)\n\tfor i := 0; i < int(nmounts); i++ {\n\t\tf := C.get_filesystem_stat(fsinfo, C.int(i))\n\t\tif f != nil {\n\t\t\tfs[i] = fsinfo2filesystem(f)\n\t\t}\n\t}\n\treturn fs, nil\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/helpers.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n#include <sys/proc.h>\n\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nfunc perfstatcpu2cpu(n *C.perfstat_cpu_t) CPU {\n\tvar c CPU\n\tc.Name = C.GoString(&n.name[0])\n\tc.User = int64(n.user)\n\tc.Sys = int64(n.sys)\n\tc.Idle = int64(n.idle)\n\tc.Wait = int64(n.wait)\n\tc.PSwitch = int64(n.pswitch)\n\tc.Syscall = int64(n.syscall)\n\tc.Sysread = int64(n.sysread)\n\tc.Syswrite = int64(n.syswrite)\n\tc.Sysfork = int64(n.sysfork)\n\tc.Sysexec = int64(n.sysexec)\n\tc.Readch = int64(n.readch)\n\tc.Writech = int64(n.writech)\n\tc.Bread = int64(n.bread)\n\tc.Bwrite = int64(n.bwrite)\n\tc.Lread = int64(n.lread)\n\tc.Lwrite = int64(n.lwrite)\n\tc.Phread = int64(n.phread)\n\tc.Phwrite = int64(n.phwrite)\n\tc.Iget = int64(n.iget)\n\tc.Namei = int64(n.namei)\n\tc.Dirblk = int64(n.dirblk)\n\tc.Msg = int64(n.msg)\n\tc.Sema = int64(n.sema)\n\tc.MinFaults = int64(n.minfaults)\n\tc.MajFaults = int64(n.majfaults)\n\tc.PUser = int64(n.puser)\n\tc.PSys = int64(n.psys)\n\tc.PIdle = int64(n.pidle)\n\tc.PWait = int64(n.pwait)\n\tc.RedispSD0 = int64(n.redisp_sd0)\n\tc.RedispSD1 = int64(n.redisp_sd1)\n\tc.RedispSD2 = int64(n.redisp_sd2)\n\tc.RedispSD3 = int64(n.redisp_sd3)\n\tc.RedispSD4 = int64(n.redisp_sd4)\n\tc.RedispSD5 = int64(n.redisp_sd5)\n\tc.MigrationPush = int64(n.migration_push)\n\tc.MigrationS3grq = int64(n.migration_S3grq)\n\tc.MigrationS3pul = int64(n.migration_S3pul)\n\tc.InvolCSwitch = int64(n.invol_cswitch)\n\tc.VolCSwitch = int64(n.vol_cswitch)\n\tc.RunQueue = int64(n.runque)\n\tc.Bound = int64(n.bound)\n\tc.DecrIntrs = int64(n.decrintrs)\n\tc.MpcRIntrs = int64(n.mpcrintrs)\n\tc.MpcSIntrs = int64(n.mpcsintrs)\n\tc.SoftIntrs = int64(n.softintrs)\n\tc.DevIntrs = int64(n.devintrs)\n\tc.PhantIntrs = int64(n.phantintrs)\n\tc.IdleDonatedPurr = int64(n.idle_donated_purr)\n\tc.IdleDonatedSpurr = int64(n.idle_donated_spurr)\n\tc.BusyDonatedPurr = int64(n.busy_donated_purr)\n\tc.BusyDonatedSpurr = int64(n.busy_donated_spurr)\n\tc.IdleStolenPurr = int64(n.idle_stolen_purr)\n\tc.IdleStolenSpurr = int64(n.idle_stolen_spurr)\n\tc.BusyStolenPurr = int64(n.busy_stolen_purr)\n\tc.BusyStolenSpurr = int64(n.busy_stolen_spurr)\n\tc.Hpi = int64(n.hpi)\n\tc.Hpit = int64(n.hpit)\n\tc.PUserSpurr = int64(n.puser_spurr)\n\tc.PSysSpurr = int64(n.psys_spurr)\n\tc.PIdleSpurr = int64(n.pidle_spurr)\n\tc.PWaitSpurr = int64(n.pwait_spurr)\n\tc.SpurrFlag = int32(n.spurrflag)\n\tc.LocalDispatch = int64(n.localdispatch)\n\tc.NearDispatch = int64(n.neardispatch)\n\tc.FarDispatch = int64(n.fardispatch)\n\tc.CSwitches = int64(n.cswitches)\n\tc.Version = int64(n.version)\n\tc.TbLast = int64(n.tb_last)\n\tc.State = int(n.state)\n\tc.VtbLast = int64(n.vtb_last)\n\tc.ICountLast = int64(n.icount_last)\n\treturn c\n}\n\nfunc perfstatcputotal2cputotal(n *C.perfstat_cpu_total_t) CPUTotal {\n\tvar c CPUTotal\n\tc.NCpus = int(n.ncpus)\n\tc.NCpusCfg = int(n.ncpus_cfg)\n\tc.Description = C.GoString(&n.description[0])\n\tc.ProcessorHz = int64(n.processorHZ)\n\tc.User = int64(n.user)\n\tc.Sys = int64(n.sys)\n\tc.Idle = int64(n.idle)\n\tc.Wait = int64(n.wait)\n\tc.PSwitch = int64(n.pswitch)\n\tc.Syscall = int64(n.syscall)\n\tc.Sysread = int64(n.sysread)\n\tc.Syswrite = int64(n.syswrite)\n\tc.Sysfork = int64(n.sysfork)\n\tc.Sysexec = int64(n.sysexec)\n\tc.Readch = int64(n.readch)\n\tc.Writech = int64(n.writech)\n\tc.DevIntrs = int64(n.devintrs)\n\tc.SoftIntrs = int64(n.softintrs)\n\tc.Lbolt = int64(n.lbolt)\n\tc.LoadAvg1 = (float32(n.loadavg[0]) / (1 << C.SBITS))\n\tc.LoadAvg5 = (float32(n.loadavg[1]) / (1 << C.SBITS))\n\tc.LoadAvg15 = (float32(n.loadavg[2]) / (1 << C.SBITS))\n\tc.RunQueue = int64(n.runque)\n\tc.SwpQueue = int64(n.swpque)\n\tc.Bread = int64(n.bread)\n\tc.Bwrite = int64(n.bwrite)\n\tc.Lread = int64(n.lread)\n\tc.Lwrite = int64(n.lwrite)\n\tc.Phread = int64(n.phread)\n\tc.Phwrite = int64(n.phwrite)\n\tc.RunOcc = int64(n.runocc)\n\tc.SwpOcc = int64(n.swpocc)\n\tc.Iget = int64(n.iget)\n\tc.Namei = int64(n.namei)\n\tc.Dirblk = int64(n.dirblk)\n\tc.Msg = int64(n.msg)\n\tc.Sema = int64(n.sema)\n\tc.RcvInt = int64(n.rcvint)\n\tc.XmtInt = int64(n.xmtint)\n\tc.MdmInt = int64(n.mdmint)\n\tc.TtyRawInch = int64(n.tty_rawinch)\n\tc.TtyCanInch = int64(n.tty_caninch)\n\tc.TtyRawOutch = int64(n.tty_rawoutch)\n\tc.Ksched = int64(n.ksched)\n\tc.Koverf = int64(n.koverf)\n\tc.Kexit = int64(n.kexit)\n\tc.Rbread = int64(n.rbread)\n\tc.Rcread = int64(n.rcread)\n\tc.Rbwrt = int64(n.rbwrt)\n\tc.Rcwrt = int64(n.rcwrt)\n\tc.Traps = int64(n.traps)\n\tc.NCpusHigh = int64(n.ncpus_high)\n\tc.PUser = int64(n.puser)\n\tc.PSys = int64(n.psys)\n\tc.PIdle = int64(n.pidle)\n\tc.PWait = int64(n.pwait)\n\tc.DecrIntrs = int64(n.decrintrs)\n\tc.MpcRIntrs = int64(n.mpcrintrs)\n\tc.MpcSIntrs = int64(n.mpcsintrs)\n\tc.PhantIntrs = int64(n.phantintrs)\n\tc.IdleDonatedPurr = int64(n.idle_donated_purr)\n\tc.IdleDonatedSpurr = int64(n.idle_donated_spurr)\n\tc.BusyDonatedPurr = int64(n.busy_donated_purr)\n\tc.BusyDonatedSpurr = int64(n.busy_donated_spurr)\n\tc.IdleStolenPurr = int64(n.idle_stolen_purr)\n\tc.IdleStolenSpurr = int64(n.idle_stolen_spurr)\n\tc.BusyStolenPurr = int64(n.busy_stolen_purr)\n\tc.BusyStolenSpurr = int64(n.busy_stolen_spurr)\n\tc.IOWait = int32(n.iowait)\n\tc.PhysIO = int32(n.physio)\n\tc.TWait = int64(n.twait)\n\tc.Hpi = int64(n.hpi)\n\tc.Hpit = int64(n.hpit)\n\tc.PUserSpurr = int64(n.puser_spurr)\n\tc.PSysSpurr = int64(n.psys_spurr)\n\tc.PIdleSpurr = int64(n.pidle_spurr)\n\tc.PWaitSpurr = int64(n.pwait_spurr)\n\tc.SpurrFlag = int(n.spurrflag)\n\tc.Version = int64(n.version)\n\tc.TbLast = int64(n.tb_last)\n\tc.PurrCoalescing = int64(n.purr_coalescing)\n\tc.SpurrCoalescing = int64(n.spurr_coalescing)\n\treturn c\n}\n\nfunc perfstatcpuutil2cpuutil(n *C.perfstat_cpu_util_t) CPUUtil {\n\tvar c CPUUtil\n\n\tc.Version = int64(n.version)\n\tc.CpuID = C.GoString(&n.cpu_id[0])\n\tc.Entitlement = float32(n.entitlement)\n\tc.UserPct = float32(n.user_pct)\n\tc.KernPct = float32(n.kern_pct)\n\tc.IdlePct = float32(n.idle_pct)\n\tc.WaitPct = float32(n.wait_pct)\n\tc.PhysicalBusy = float32(n.physical_busy)\n\tc.PhysicalConsumed = float32(n.physical_consumed)\n\tc.FreqPct = float32(n.freq_pct)\n\tc.EntitlementPct = float32(n.entitlement_pct)\n\tc.BusyPct = float32(n.busy_pct)\n\tc.IdleDonatedPct = float32(n.idle_donated_pct)\n\tc.BusyDonatedPct = float32(n.busy_donated_pct)\n\tc.IdleStolenPct = float32(n.idle_stolen_pct)\n\tc.BusyStolenPct = float32(n.busy_stolen_pct)\n\tc.LUserPct = float32(n.l_user_pct)\n\tc.LKernPct = float32(n.l_kern_pct)\n\tc.LIdlePct = float32(n.l_idle_pct)\n\tc.LWaitPct = float32(n.l_wait_pct)\n\tc.DeltaTime = int64(n.delta_time)\n\n\treturn c\n}\n\nfunc perfstatdisktotal2disktotal(n C.perfstat_disk_total_t) DiskTotal {\n\tvar d DiskTotal\n\n\td.Number = int32(n.number)\n\td.Size = int64(n.size)\n\td.Free = int64(n.free)\n\td.XRate = int64(n.xrate)\n\td.Xfers = int64(n.xfers)\n\td.Wblks = int64(n.wblks)\n\td.Rblks = int64(n.rblks)\n\td.Time = int64(n.time)\n\td.Version = int64(n.version)\n\td.Rserv = int64(n.rserv)\n\td.MinRserv = int64(n.min_rserv)\n\td.MaxRserv = int64(n.max_rserv)\n\td.RTimeOut = int64(n.rtimeout)\n\td.RFailed = int64(n.rfailed)\n\td.Wserv = int64(n.wserv)\n\td.MinWserv = int64(n.min_wserv)\n\td.MaxWserv = int64(n.max_wserv)\n\td.WTimeOut = int64(n.wtimeout)\n\td.WFailed = int64(n.wfailed)\n\td.WqDepth = int64(n.wq_depth)\n\td.WqTime = int64(n.wq_time)\n\td.WqMinTime = int64(n.wq_min_time)\n\td.WqMaxTime = int64(n.wq_max_time)\n\n\treturn d\n}\n\nfunc perfstatdiskadapter2diskadapter(n *C.perfstat_diskadapter_t) DiskAdapter {\n\tvar d DiskAdapter\n\n\td.Name = C.GoString(&n.name[0])\n\td.Description = C.GoString(&n.description[0])\n\td.Number = int32(n.number)\n\td.Size = int64(n.size)\n\td.Free = int64(n.free)\n\td.XRate = int64(n.xrate)\n\td.Xfers = int64(n.xfers)\n\td.Rblks = int64(n.rblks)\n\td.Wblks = int64(n.wblks)\n\td.Time = int64(n.time)\n\td.Version = int64(n.version)\n\td.AdapterType = int64(n.adapter_type)\n\td.DkBSize = int64(n.dk_bsize)\n\td.DkRserv = int64(n.dk_rserv)\n\td.DkWserv = int64(n.dk_wserv)\n\td.MinRserv = int64(n.min_rserv)\n\td.MaxRserv = int64(n.max_rserv)\n\td.MinWserv = int64(n.min_wserv)\n\td.MaxWserv = int64(n.max_wserv)\n\td.WqDepth = int64(n.wq_depth)\n\td.WqSampled = int64(n.wq_sampled)\n\td.WqTime = int64(n.wq_time)\n\td.WqMinTime = int64(n.wq_min_time)\n\td.WqMaxTime = int64(n.wq_max_time)\n\td.QFull = int64(n.q_full)\n\td.QSampled = int64(n.q_sampled)\n\n\treturn d\n}\n\nfunc perfstatpartitionconfig2partitionconfig(n C.perfstat_partition_config_t) PartitionConfig {\n\tvar p PartitionConfig\n\tp.Version = int64(n.version)\n\tp.Name = C.GoString(&n.partitionname[0])\n\tp.Node = C.GoString(&n.nodename[0])\n\tp.Conf.SmtCapable = (n.conf[0] & (1 << 7)) > 0\n\tp.Conf.SmtEnabled = (n.conf[0] & (1 << 6)) > 0\n\tp.Conf.LparCapable = (n.conf[0] & (1 << 5)) > 0\n\tp.Conf.LparEnabled = (n.conf[0] & (1 << 4)) > 0\n\tp.Conf.SharedCapable = (n.conf[0] & (1 << 3)) > 0\n\tp.Conf.SharedEnabled = (n.conf[0] & (1 << 2)) > 0\n\tp.Conf.DLparCapable = (n.conf[0] & (1 << 1)) > 0\n\tp.Conf.Capped = (n.conf[0] & (1 << 0)) > 0\n\tp.Conf.Kernel64bit = (n.conf[1] & (1 << 7)) > 0\n\tp.Conf.PoolUtilAuthority = (n.conf[1] & (1 << 6)) > 0\n\tp.Conf.DonateCapable = (n.conf[1] & (1 << 5)) > 0\n\tp.Conf.DonateEnabled = (n.conf[1] & (1 << 4)) > 0\n\tp.Conf.AmsCapable = (n.conf[1] & (1 << 3)) > 0\n\tp.Conf.AmsEnabled = (n.conf[1] & (1 << 2)) > 0\n\tp.Conf.PowerSave = (n.conf[1] & (1 << 1)) > 0\n\tp.Conf.AmeEnabled = (n.conf[1] & (1 << 0)) > 0\n\tp.Conf.SharedExtended = (n.conf[2] & (1 << 7)) > 0\n\tp.Number = int32(n.partitionnum)\n\tp.GroupID = int32(n.groupid)\n\tp.ProcessorFamily = C.GoString(&n.processorFamily[0])\n\tp.ProcessorModel = C.GoString(&n.processorModel[0])\n\tp.MachineID = C.GoString(&n.machineID[0])\n\tp.ProcessorMhz = float64(C.get_partition_mhz(n))\n\tp.NumProcessors.Online = int64(n.numProcessors.online)\n\tp.NumProcessors.Max = int64(n.numProcessors.max)\n\tp.NumProcessors.Min = int64(n.numProcessors.min)\n\tp.NumProcessors.Desired = int64(n.numProcessors.desired)\n\tp.OSName = C.GoString(&n.OSName[0])\n\tp.OSVersion = C.GoString(&n.OSVersion[0])\n\tp.OSBuild = C.GoString(&n.OSBuild[0])\n\tp.LCpus = int32(n.lcpus)\n\tp.SmtThreads = int32(n.smtthreads)\n\tp.Drives = int32(n.drives)\n\tp.NetworkAdapters = int32(n.nw_adapters)\n\tp.CpuCap.Online = int64(n.cpucap.online)\n\tp.CpuCap.Max = int64(n.cpucap.max)\n\tp.CpuCap.Min = int64(n.cpucap.min)\n\tp.CpuCap.Desired = int64(n.cpucap.desired)\n\tp.Weightage = int32(n.cpucap_weightage)\n\tp.EntCapacity = int32(n.entitled_proc_capacity)\n\tp.VCpus.Online = int64(n.vcpus.online)\n\tp.VCpus.Max = int64(n.vcpus.max)\n\tp.VCpus.Min = int64(n.vcpus.min)\n\tp.VCpus.Desired = int64(n.vcpus.desired)\n\tp.PoolID = int32(n.processor_poolid)\n\tp.ActiveCpusInPool = int32(n.activecpusinpool)\n\tp.PoolWeightage = int32(n.cpupool_weightage)\n\tp.SharedPCpu = int32(n.sharedpcpu)\n\tp.MaxPoolCap = int32(n.maxpoolcap)\n\tp.EntPoolCap = int32(n.entpoolcap)\n\tp.Mem.Online = int64(n.mem.online)\n\tp.Mem.Max = int64(n.mem.max)\n\tp.Mem.Min = int64(n.mem.min)\n\tp.Mem.Desired = int64(n.mem.desired)\n\tp.MemWeightage = int32(n.mem_weightage)\n\tp.TotalIOMemoryEntitlement = int64(n.totiomement)\n\tp.MemPoolID = int32(n.mempoolid)\n\tp.HyperPgSize = int64(n.hyperpgsize)\n\tp.ExpMem.Online = int64(n.exp_mem.online)\n\tp.ExpMem.Max = int64(n.exp_mem.max)\n\tp.ExpMem.Min = int64(n.exp_mem.min)\n\tp.ExpMem.Desired = int64(n.exp_mem.desired)\n\tp.TargetMemExpFactor = int64(n.targetmemexpfactor)\n\tp.TargetMemExpSize = int64(n.targetmemexpsize)\n\tp.SubProcessorMode = int32(n.subprocessor_mode)\n\treturn p\n}\n\nfunc perfstatmemorytotal2memorytotal(n C.perfstat_memory_total_t) MemoryTotal {\n\tvar m MemoryTotal\n\tm.VirtualTotal = int64(n.virt_total)\n\tm.RealTotal = int64(n.real_total)\n\tm.RealFree = int64(n.real_free)\n\tm.RealPinned = int64(n.real_pinned)\n\tm.RealInUse = int64(n.real_inuse)\n\tm.BadPages = int64(n.pgbad)\n\tm.PageFaults = int64(n.pgexct)\n\tm.PageIn = int64(n.pgins)\n\tm.PageOut = int64(n.pgouts)\n\tm.PgSpIn = int64(n.pgspins)\n\tm.PgSpOut = int64(n.pgspouts)\n\tm.Scans = int64(n.scans)\n\tm.Cycles = int64(n.cycles)\n\tm.PgSteals = int64(n.pgsteals)\n\tm.NumPerm = int64(n.numperm)\n\tm.PgSpTotal = int64(n.pgsp_total)\n\tm.PgSpFree = int64(n.pgsp_free)\n\tm.PgSpRsvd = int64(n.pgsp_rsvd)\n\tm.RealSystem = int64(n.real_system)\n\tm.RealUser = int64(n.real_user)\n\tm.RealProcess = int64(n.real_process)\n\tm.VirtualActive = int64(n.virt_active)\n\tm.IOME = int64(n.iome)\n\tm.IOMU = int64(n.iomu)\n\tm.IOHWM = int64(n.iohwm)\n\tm.PMem = int64(n.pmem)\n\tm.CompressedTotal = int64(n.comprsd_total)\n\tm.CompressedWSegPg = int64(n.comprsd_wseg_pgs)\n\tm.CPgIn = int64(n.cpgins)\n\tm.CPgOut = int64(n.cpgouts)\n\tm.TrueSize = int64(n.true_size)\n\tm.ExpandedMemory = int64(n.expanded_memory)\n\tm.CompressedWSegSize = int64(n.comprsd_wseg_size)\n\tm.TargetCPoolSize = int64(n.target_cpool_size)\n\tm.MaxCPoolSize = int64(n.max_cpool_size)\n\tm.MinUCPoolSize = int64(n.min_ucpool_size)\n\tm.CPoolSize = int64(n.cpool_size)\n\tm.UCPoolSize = int64(n.ucpool_size)\n\tm.CPoolInUse = int64(n.cpool_inuse)\n\tm.UCPoolInUse = int64(n.ucpool_inuse)\n\tm.Version = int64(n.version)\n\tm.RealAvailable = int64(n.real_avail)\n\tm.BytesCoalesced = int64(n.bytes_coalesced)\n\tm.BytesCoalescedMemPool = int64(n.bytes_coalesced_mempool)\n\n\treturn m\n}\n\nfunc perfstatnetinterfacetotal2netifacetotal(n C.perfstat_netinterface_total_t) NetIfaceTotal {\n\tvar i NetIfaceTotal\n\n\ti.Number = int32(n.number)\n\ti.IPackets = int64(n.ipackets)\n\ti.IBytes = int64(n.ibytes)\n\ti.IErrors = int64(n.ierrors)\n\ti.OPackets = int64(n.opackets)\n\ti.OBytes = int64(n.obytes)\n\ti.OErrors = int64(n.oerrors)\n\ti.Collisions = int64(n.collisions)\n\ti.XmitDrops = int64(n.xmitdrops)\n\ti.Version = int64(n.version)\n\n\treturn i\n}\n\nfunc perfstatdisk2disk(n *C.perfstat_disk_t) Disk {\n\tvar d Disk\n\n\td.Name = C.GoString(&n.name[0])\n\td.Description = C.GoString(&n.description[0])\n\td.VGName = C.GoString(&n.vgname[0])\n\td.Size = int64(n.size)\n\td.Free = int64(n.free)\n\td.BSize = int64(n.bsize)\n\td.XRate = int64(n.xrate)\n\td.Xfers = int64(n.xfers)\n\td.Wblks = int64(n.wblks)\n\td.Rblks = int64(n.rblks)\n\td.QDepth = int64(n.qdepth)\n\td.Time = int64(n.time)\n\td.Adapter = C.GoString(&n.adapter[0])\n\td.PathsCount = int32(n.paths_count)\n\td.QFull = int64(n.q_full)\n\td.Rserv = int64(n.rserv)\n\td.RTimeOut = int64(n.rtimeout)\n\td.Rfailed = int64(n.rfailed)\n\td.MinRserv = int64(n.min_rserv)\n\td.MaxRserv = int64(n.max_rserv)\n\td.Wserv = int64(n.wserv)\n\td.WTimeOut = int64(n.wtimeout)\n\td.Wfailed = int64(n.wfailed)\n\td.MinWserv = int64(n.min_wserv)\n\td.MaxWserv = int64(n.max_wserv)\n\td.WqDepth = int64(n.wq_depth)\n\td.WqSampled = int64(n.wq_sampled)\n\td.WqTime = int64(n.wq_time)\n\td.WqMinTime = int64(n.wq_min_time)\n\td.WqMaxTime = int64(n.wq_max_time)\n\td.QSampled = int64(n.q_sampled)\n\td.Version = int64(n.version)\n\td.PseudoDisk = (n.dk_type[0] & (1 << 7)) > 0\n\td.VTDisk = (n.dk_type[0] & (1 << 6)) > 0\n\n\treturn d\n}\n\nfunc perfstatdiskpath2diskpath(n *C.perfstat_diskpath_t) DiskPath {\n\tvar d DiskPath\n\n\td.Name = C.GoString(&n.name[0])\n\td.XRate = int64(n.xrate)\n\td.Xfers = int64(n.xfers)\n\td.Rblks = int64(n.rblks)\n\td.Wblks = int64(n.wblks)\n\td.Time = int64(n.time)\n\td.Adapter = C.GoString(&n.adapter[0])\n\td.QFull = int64(n.q_full)\n\td.Rserv = int64(n.rserv)\n\td.RTimeOut = int64(n.rtimeout)\n\td.Rfailed = int64(n.rfailed)\n\td.MinRserv = int64(n.min_rserv)\n\td.MaxRserv = int64(n.max_rserv)\n\td.Wserv = int64(n.wserv)\n\td.WTimeOut = int64(n.wtimeout)\n\td.Wfailed = int64(n.wfailed)\n\td.MinWserv = int64(n.min_wserv)\n\td.MaxWserv = int64(n.max_wserv)\n\td.WqDepth = int64(n.wq_depth)\n\td.WqSampled = int64(n.wq_sampled)\n\td.WqTime = int64(n.wq_time)\n\td.WqMinTime = int64(n.wq_min_time)\n\td.WqMaxTime = int64(n.wq_max_time)\n\td.QSampled = int64(n.q_sampled)\n\td.Version = int64(n.version)\n\n\treturn d\n}\n\nfunc perfstatfcstat2fcadapter(n *C.perfstat_fcstat_t) FCAdapter {\n\tvar f FCAdapter\n\n\tf.Version = int64(n.version)\n\tf.Name = C.GoString(&n.name[0])\n\tf.State = int32(n.state)\n\tf.InputRequests = int64(n.InputRequests)\n\tf.OutputRequests = int64(n.OutputRequests)\n\tf.InputBytes = int64(n.InputBytes)\n\tf.OutputBytes = int64(n.OutputBytes)\n\tf.EffMaxTransfer = int64(n.EffMaxTransfer)\n\tf.NoDMAResourceCnt = int64(n.NoDMAResourceCnt)\n\tf.NoCmdResourceCnt = int64(n.NoCmdResourceCnt)\n\tf.AttentionType = int32(n.AttentionType)\n\tf.SecondsSinceLastReset = int64(n.SecondsSinceLastReset)\n\tf.TxFrames = int64(n.TxFrames)\n\tf.TxWords = int64(n.TxWords)\n\tf.RxFrames = int64(n.RxFrames)\n\tf.RxWords = int64(n.RxWords)\n\tf.LIPCount = int64(n.LIPCount)\n\tf.NOSCount = int64(n.NOSCount)\n\tf.ErrorFrames = int64(n.ErrorFrames)\n\tf.DumpedFrames = int64(n.DumpedFrames)\n\tf.LinkFailureCount = int64(n.LinkFailureCount)\n\tf.LossofSyncCount = int64(n.LossofSyncCount)\n\tf.LossofSignal = int64(n.LossofSignal)\n\tf.PrimitiveSeqProtocolErrCount = int64(n.PrimitiveSeqProtocolErrCount)\n\tf.InvalidTxWordCount = int64(n.InvalidTxWordCount)\n\tf.InvalidCRCCount = int64(n.InvalidCRCCount)\n\tf.PortFcId = int64(n.PortFcId)\n\tf.PortSpeed = int64(n.PortSpeed)\n\tf.PortType = C.GoString(&n.PortType[0])\n\tf.PortWWN = int64(n.PortWWN)\n\tf.PortSupportedSpeed = int64(n.PortSupportedSpeed)\n\tf.AdapterType = int(n.adapter_type)\n\tf.VfcName = C.GoString(&n.vfc_name[0])\n\tf.ClientPartName = C.GoString(&n.client_part_name[0])\n\n\treturn f\n}\n\nfunc perfstatlogicalvolume2logicalvolume(n *C.perfstat_logicalvolume_t) LogicalVolume {\n\tvar l LogicalVolume\n\n\tl.Name = C.GoString(&n.name[0])\n\tl.VGName = C.GoString(&n.vgname[0])\n\tl.OpenClose = int64(n.open_close)\n\tl.State = int64(n.state)\n\tl.MirrorPolicy = int64(n.mirror_policy)\n\tl.MirrorWriteConsistency = int64(n.mirror_write_consistency)\n\tl.WriteVerify = int64(n.write_verify)\n\tl.PPsize = int64(n.ppsize)\n\tl.LogicalPartitions = int64(n.logical_partitions)\n\tl.Mirrors = int32(n.mirrors)\n\tl.IOCnt = int64(n.iocnt)\n\tl.KBReads = int64(n.kbreads)\n\tl.KBWrites = int64(n.kbwrites)\n\tl.Version = int64(n.version)\n\n\treturn l\n}\n\nfunc perfstatvolumegroup2volumegroup(n *C.perfstat_volumegroup_t) VolumeGroup {\n\tvar v VolumeGroup\n\n\tv.Name = C.GoString(&n.name[0])\n\tv.TotalDisks = int64(n.total_disks)\n\tv.ActiveDisks = int64(n.active_disks)\n\tv.TotalLogicalVolumes = int64(n.total_logical_volumes)\n\tv.OpenedLogicalVolumes = int64(n.opened_logical_volumes)\n\tv.IOCnt = int64(n.iocnt)\n\tv.KBReads = int64(n.kbreads)\n\tv.KBWrites = int64(n.kbwrites)\n\tv.Version = int64(n.version)\n\tv.VariedState = int(n.variedState)\n\n\treturn v\n}\n\nfunc perfstatmemorypage2memorypage(n *C.perfstat_memory_page_t) MemoryPage {\n\tvar m MemoryPage\n\n\tm.PSize = int64(n.psize)\n\tm.RealTotal = int64(n.real_total)\n\tm.RealFree = int64(n.real_free)\n\tm.RealPinned = int64(n.real_pinned)\n\tm.RealInUse = int64(n.real_inuse)\n\tm.PgExct = int64(n.pgexct)\n\tm.PgIns = int64(n.pgins)\n\tm.PgOuts = int64(n.pgouts)\n\tm.PgSpIns = int64(n.pgspins)\n\tm.PgSpOuts = int64(n.pgspouts)\n\tm.Scans = int64(n.scans)\n\tm.Cycles = int64(n.cycles)\n\tm.PgSteals = int64(n.pgsteals)\n\tm.NumPerm = int64(n.numperm)\n\tm.NumPgSp = int64(n.numpgsp)\n\tm.RealSystem = int64(n.real_system)\n\tm.RealUser = int64(n.real_user)\n\tm.RealProcess = int64(n.real_process)\n\tm.VirtActive = int64(n.virt_active)\n\tm.ComprsdTotal = int64(n.comprsd_total)\n\tm.ComprsdWsegPgs = int64(n.comprsd_wseg_pgs)\n\tm.CPgIns = int64(n.cpgins)\n\tm.CPgOuts = int64(n.cpgouts)\n\tm.CPoolInUse = int64(n.cpool_inuse)\n\tm.UCPoolSize = int64(n.ucpool_size)\n\tm.ComprsdWsegSize = int64(n.comprsd_wseg_size)\n\tm.Version = int64(n.version)\n\tm.RealAvail = int64(n.real_avail)\n\n\treturn m\n}\n\nfunc perfstatnetbuffer2netbuffer(n *C.perfstat_netbuffer_t) NetBuffer {\n\tvar b NetBuffer\n\n\tb.Name = C.GoString(&n.name[0])\n\tb.InUse = int64(n.inuse)\n\tb.Calls = int64(n.calls)\n\tb.Delayed = int64(n.delayed)\n\tb.Free = int64(n.free)\n\tb.Failed = int64(n.failed)\n\tb.HighWatermark = int64(n.highwatermark)\n\tb.Freed = int64(n.freed)\n\tb.Version = int64(n.version)\n\n\treturn b\n}\n\nfunc perfstatnetinterface2netiface(n *C.perfstat_netinterface_t) NetIface {\n\tvar i NetIface\n\n\ti.Name = C.GoString(&n.name[0])\n\ti.Description = C.GoString(&n.description[0])\n\ti.Type = uint8(n._type)\n\ti.MTU = int64(n.mtu)\n\ti.IPackets = int64(n.ipackets)\n\ti.IBytes = int64(n.ibytes)\n\ti.IErrors = int64(n.ierrors)\n\ti.OPackets = int64(n.opackets)\n\ti.OBytes = int64(n.obytes)\n\ti.OErrors = int64(n.oerrors)\n\ti.Collisions = int64(n.collisions)\n\ti.Bitrate = int64(n.bitrate)\n\ti.XmitDrops = int64(n.xmitdrops)\n\ti.Version = int64(n.version)\n\ti.IfIqDrops = int64(n.if_iqdrops)\n\ti.IfArpDrops = int64(n.if_arpdrops)\n\n\treturn i\n}\n\nfunc perfstatnetadapter2netadapter(n *C.perfstat_netadapter_t) NetAdapter {\n\tvar i NetAdapter\n\n\ti.Version = int64(n.version)\n\ti.Name = C.GoString(&n.name[0])\n\ti.TxPackets = int64(n.tx_packets)\n\ti.TxBytes = int64(n.tx_bytes)\n\ti.TxInterrupts = int64(n.tx_interrupts)\n\ti.TxErrors = int64(n.tx_errors)\n\ti.TxPacketsDropped = int64(n.tx_packets_dropped)\n\ti.TxQueueSize = int64(n.tx_queue_size)\n\ti.TxQueueLen = int64(n.tx_queue_len)\n\ti.TxQueueOverflow = int64(n.tx_queue_overflow)\n\ti.TxBroadcastPackets = int64(n.tx_broadcast_packets)\n\ti.TxMulticastPackets = int64(n.tx_multicast_packets)\n\ti.TxCarrierSense = int64(n.tx_carrier_sense)\n\ti.TxDMAUnderrun = int64(n.tx_DMA_underrun)\n\ti.TxLostCTSErrors = int64(n.tx_lost_CTS_errors)\n\ti.TxMaxCollisionErrors = int64(n.tx_max_collision_errors)\n\ti.TxLateCollisionErrors = int64(n.tx_late_collision_errors)\n\ti.TxDeferred = int64(n.tx_deferred)\n\ti.TxTimeoutErrors = int64(n.tx_timeout_errors)\n\ti.TxSingleCollisionCount = int64(n.tx_single_collision_count)\n\ti.TxMultipleCollisionCount = int64(n.tx_multiple_collision_count)\n\ti.RxPackets = int64(n.rx_packets)\n\ti.RxBytes = int64(n.rx_bytes)\n\ti.RxInterrupts = int64(n.rx_interrupts)\n\ti.RxErrors = int64(n.rx_errors)\n\ti.RxPacketsDropped = int64(n.rx_packets_dropped)\n\ti.RxBadPackets = int64(n.rx_bad_packets)\n\ti.RxMulticastPackets = int64(n.rx_multicast_packets)\n\ti.RxBroadcastPackets = int64(n.rx_broadcast_packets)\n\ti.RxCRCErrors = int64(n.rx_CRC_errors)\n\ti.RxDMAOverrun = int64(n.rx_DMA_overrun)\n\ti.RxAlignmentErrors = int64(n.rx_alignment_errors)\n\ti.RxNoResourceErrors = int64(n.rx_noresource_errors)\n\ti.RxCollisionErrors = int64(n.rx_collision_errors)\n\ti.RxPacketTooShortErrors = int64(n.rx_packet_tooshort_errors)\n\ti.RxPacketTooLongErrors = int64(n.rx_packet_toolong_errors)\n\ti.RxPacketDiscardedByAdapter = int64(n.rx_packets_discardedbyadapter)\n\ti.AdapterType = int32(n.adapter_type)\n\n\treturn i\n}\n\nfunc perfstatpagingspace2pagingspace(n *C.perfstat_pagingspace_t) PagingSpace {\n\tvar i PagingSpace\n\n\ti.Name = C.GoString(&n.name[0])\n\ti.Type = uint8(n._type)\n\ti.VGName = C.GoString(C.get_ps_vgname(n))\n\ti.Hostname = C.GoString(C.get_ps_hostname(n))\n\ti.Filename = C.GoString(C.get_ps_filename(n))\n\ti.LPSize = int64(n.lp_size)\n\ti.MBSize = int64(n.mb_size)\n\ti.MBUsed = int64(n.mb_used)\n\ti.IOPending = int64(n.io_pending)\n\ti.Active = uint8(n.active)\n\ti.Automatic = uint8(n.automatic)\n\ti.Version = int64(n.version)\n\n\treturn i\n}\n\nfunc perfstatprocess2process(n *C.perfstat_process_t) Process {\n\tvar i Process\n\n\ti.Version = int64(n.version)\n\ti.PID = int64(n.pid)\n\ti.ProcessName = C.GoString(&n.proc_name[0])\n\ti.Priority = int32(n.proc_priority)\n\ti.NumThreads = int64(n.num_threads)\n\ti.UID = int64(n.proc_uid)\n\ti.ClassID = int64(n.proc_classid)\n\ti.Size = int64(n.proc_size)\n\ti.RealMemData = int64(n.proc_real_mem_data)\n\ti.RealMemText = int64(n.proc_real_mem_text)\n\ti.VirtMemData = int64(n.proc_virt_mem_data)\n\ti.VirtMemText = int64(n.proc_virt_mem_text)\n\ti.SharedLibDataSize = int64(n.shared_lib_data_size)\n\ti.HeapSize = int64(n.heap_size)\n\ti.RealInUse = int64(n.real_inuse)\n\ti.VirtInUse = int64(n.virt_inuse)\n\ti.Pinned = int64(n.pinned)\n\ti.PgSpInUse = int64(n.pgsp_inuse)\n\ti.FilePages = int64(n.filepages)\n\ti.RealInUseMap = int64(n.real_inuse_map)\n\ti.VirtInUseMap = int64(n.virt_inuse_map)\n\ti.PinnedInUseMap = int64(n.pinned_inuse_map)\n\ti.UCpuTime = float64(n.ucpu_time)\n\ti.SCpuTime = float64(n.scpu_time)\n\ti.LastTimeBase = int64(n.last_timebase)\n\ti.InBytes = int64(n.inBytes)\n\ti.OutBytes = int64(n.outBytes)\n\ti.InOps = int64(n.inOps)\n\ti.OutOps = int64(n.outOps)\n\n\treturn i\n}\n\nfunc perfstatthread2thread(n *C.perfstat_thread_t) Thread {\n\tvar i Thread\n\n\ti.TID = int64(n.tid)\n\ti.PID = int64(n.pid)\n\ti.CpuID = int64(n.cpuid)\n\ti.UCpuTime = float64(n.ucpu_time)\n\ti.SCpuTime = float64(n.scpu_time)\n\ti.LastTimeBase = int64(n.last_timebase)\n\ti.Version = int64(n.version)\n\n\treturn i\n}\n\nfunc fsinfo2filesystem(n *C.struct_fsinfo) FileSystem {\n\tvar i FileSystem\n\n\ti.Device = C.GoString(n.devname)\n\ti.MountPoint = C.GoString(n.fsname)\n\ti.FSType = int(n.fstype)\n\ti.Flags = int(n.flags)\n\ti.TotalBlocks = int64(n.totalblks)\n\ti.FreeBlocks = int64(n.freeblks)\n\ti.TotalInodes = int64(n.totalinodes)\n\ti.FreeInodes = int64(n.freeinodes)\n\n\treturn i\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/lparstat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n)\n\nfunc PartitionStat() (*PartitionConfig, error) {\n\tvar part C.perfstat_partition_config_t\n\n\trc := C.perfstat_partition_config(nil, &part, C.sizeof_perfstat_partition_config_t, 1)\n\tif rc != 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_partition_config() error\")\n\t}\n\tp := perfstatpartitionconfig2partitionconfig(part)\n\treturn &p, nil\n\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/lvmstat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n#include <string.h>\n#include <stdlib.h>\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nfunc LogicalVolumeStat() ([]LogicalVolume, error) {\n\tvar lv *C.perfstat_logicalvolume_t\n\tvar lvname C.perfstat_id_t\n\n\tnumlvs := C.perfstat_logicalvolume(nil, nil, C.sizeof_perfstat_logicalvolume_t, 0)\n\tif numlvs <= 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_logicalvolume() error\")\n\t}\n\n\tlv_len := C.sizeof_perfstat_logicalvolume_t * C.ulong(numlvs)\n\tlv = (*C.perfstat_logicalvolume_t)(C.malloc(lv_len))\n\tdefer C.free(unsafe.Pointer(lv))\n\tC.strcpy(&lvname.name[0], C.CString(\"\"))\n\tr := C.perfstat_logicalvolume(&lvname, lv, C.sizeof_perfstat_logicalvolume_t, numlvs)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_logicalvolume() error\")\n\t}\n\tlvs := make([]LogicalVolume, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tl := C.get_logicalvolume_stat(lv, C.int(i))\n\t\tif l != nil {\n\t\t\tlvs[i] = perfstatlogicalvolume2logicalvolume(l)\n\t\t}\n\t}\n\treturn lvs, nil\n}\n\nfunc VolumeGroupStat() ([]VolumeGroup, error) {\n\tvar vg *C.perfstat_volumegroup_t\n\tvar vgname C.perfstat_id_t\n\n\tnumvgs := C.perfstat_volumegroup(nil, nil, C.sizeof_perfstat_volumegroup_t, 0)\n\tif numvgs <= 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_volumegroup() error\")\n\t}\n\n\tvg_len := C.sizeof_perfstat_volumegroup_t * C.ulong(numvgs)\n\tvg = (*C.perfstat_volumegroup_t)(C.malloc(vg_len))\n\tdefer C.free(unsafe.Pointer(vg))\n\tC.strcpy(&vgname.name[0], C.CString(\"\"))\n\tr := C.perfstat_volumegroup(&vgname, vg, C.sizeof_perfstat_volumegroup_t, numvgs)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_volumegroup() error\")\n\t}\n\tvgs := make([]VolumeGroup, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tv := C.get_volumegroup_stat(vg, C.int(i))\n\t\tif v != nil {\n\t\t\tvgs[i] = perfstatvolumegroup2volumegroup(v)\n\t\t}\n\t}\n\treturn vgs, nil\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/memstat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n#include <string.h>\n#include <stdlib.h>\n\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nfunc MemoryTotalStat() (*MemoryTotal, error) {\n\tvar memory C.perfstat_memory_total_t\n\n\trc := C.perfstat_memory_total(nil, &memory, C.sizeof_perfstat_memory_total_t, 1)\n\tif rc != 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_memory_total() error\")\n\t}\n\tm := perfstatmemorytotal2memorytotal(memory)\n\treturn &m, nil\n}\n\nfunc MemoryPageStat() ([]MemoryPage, error) {\n\tvar mempage *C.perfstat_memory_page_t\n\tvar fps C.perfstat_psize_t\n\n\tnumps := C.perfstat_memory_page(nil, nil, C.sizeof_perfstat_memory_page_t, 0)\n\tif numps < 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_memory_page() error\")\n\t}\n\n\tmp_len := C.sizeof_perfstat_memory_page_t * C.ulong(numps)\n\tmempage = (*C.perfstat_memory_page_t)(C.malloc(mp_len))\n\tdefer C.free(unsafe.Pointer(mempage))\n\tfps.psize = C.FIRST_PSIZE\n\tr := C.perfstat_memory_page(&fps, mempage, C.sizeof_perfstat_memory_page_t, numps)\n\tif r < 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_memory_page() error\")\n\t}\n\tps := make([]MemoryPage, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tp := C.get_memory_page_stat(mempage, C.int(i))\n\t\tif p != nil {\n\t\t\tps[i] = perfstatmemorypage2memorypage(p)\n\t\t}\n\t}\n\treturn ps, nil\n}\n\nfunc PagingSpaceStat() ([]PagingSpace, error) {\n\tvar pspace *C.perfstat_pagingspace_t\n\tvar fps C.perfstat_id_t\n\n\tnumps := C.perfstat_pagingspace(nil, nil, C.sizeof_perfstat_pagingspace_t, 0)\n\tif numps <= 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_pagingspace() error\")\n\t}\n\n\tps_len := C.sizeof_perfstat_pagingspace_t * C.ulong(numps)\n\tpspace = (*C.perfstat_pagingspace_t)(C.malloc(ps_len))\n\tdefer C.free(unsafe.Pointer(pspace))\n\tC.strcpy(&fps.name[0], C.CString(C.FIRST_PAGINGSPACE))\n\tr := C.perfstat_pagingspace(&fps, pspace, C.sizeof_perfstat_pagingspace_t, numps)\n\tif r < 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_pagingspace() error\")\n\t}\n\tps := make([]PagingSpace, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tp := C.get_pagingspace_stat(pspace, C.int(i))\n\t\tif p != nil {\n\t\t\tps[i] = perfstatpagingspace2pagingspace(p)\n\t\t}\n\t}\n\treturn ps, nil\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/netstat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n#include <string.h>\n#include <stdlib.h>\n\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nfunc NetIfaceTotalStat() (*NetIfaceTotal, error) {\n\tvar nif C.perfstat_netinterface_total_t\n\n\trc := C.perfstat_netinterface_total(nil, &nif, C.sizeof_perfstat_netinterface_total_t, 1)\n\tif rc != 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_netinterface_total() error\")\n\t}\n\tn := perfstatnetinterfacetotal2netifacetotal(nif)\n\treturn &n, nil\n}\n\nfunc NetBufferStat() ([]NetBuffer, error) {\n\tvar nbuf *C.perfstat_netbuffer_t\n\tvar first C.perfstat_id_t\n\n\tnumbuf := C.perfstat_netbuffer(nil, nil, C.sizeof_perfstat_netbuffer_t, 0)\n\tif numbuf < 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_netbuffer() error\")\n\t}\n\n\tnblen := C.sizeof_perfstat_netbuffer_t * C.ulong(numbuf)\n\tnbuf = (*C.perfstat_netbuffer_t)(C.malloc(nblen))\n\tdefer C.free(unsafe.Pointer(nbuf))\n\tC.strcpy(&first.name[0], C.CString(C.FIRST_NETBUFFER))\n\tr := C.perfstat_netbuffer(&first, nbuf, C.sizeof_perfstat_netbuffer_t, numbuf)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_netbuffer() error\")\n\t}\n\tnb := make([]NetBuffer, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tb := C.get_netbuffer_stat(nbuf, C.int(i))\n\t\tif b != nil {\n\t\t\tnb[i] = perfstatnetbuffer2netbuffer(b)\n\t\t}\n\t}\n\treturn nb, nil\n}\n\nfunc NetIfaceStat() ([]NetIface, error) {\n\tvar nif *C.perfstat_netinterface_t\n\tvar first C.perfstat_id_t\n\n\tnumif := C.perfstat_netinterface(nil, nil, C.sizeof_perfstat_netinterface_t, 0)\n\tif numif < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_netinterface() error\")\n\t}\n\tif numif == 0 {\n\t\treturn []NetIface{}, fmt.Errorf(\"no network interfaces found\")\n\t}\n\n\tiflen := C.sizeof_perfstat_netinterface_t * C.ulong(numif)\n\tnif = (*C.perfstat_netinterface_t)(C.malloc(iflen))\n\tdefer C.free(unsafe.Pointer(nif))\n\tC.strcpy(&first.name[0], C.CString(C.FIRST_NETINTERFACE))\n\tr := C.perfstat_netinterface(&first, nif, C.sizeof_perfstat_netinterface_t, numif)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_netinterface() error\")\n\t}\n\tifs := make([]NetIface, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tb := C.get_netinterface_stat(nif, C.int(i))\n\t\tif b != nil {\n\t\t\tifs[i] = perfstatnetinterface2netiface(b)\n\t\t}\n\t}\n\treturn ifs, nil\n}\n\nfunc NetAdapterStat() ([]NetAdapter, error) {\n\tvar adapters *C.perfstat_netadapter_t\n\tvar first C.perfstat_id_t\n\n\tnumad := C.perfstat_netadapter(nil, nil, C.sizeof_perfstat_netadapter_t, 0)\n\tif numad < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_netadater() error\")\n\t}\n\tif numad == 0 {\n\t\treturn []NetAdapter{}, fmt.Errorf(\"no network adapters found\")\n\t}\n\n\tadplen := C.sizeof_perfstat_netadapter_t * C.ulong(numad)\n\tadapters = (*C.perfstat_netadapter_t)(C.malloc(adplen))\n\tdefer C.free(unsafe.Pointer(adapters))\n\tC.strcpy(&first.name[0], C.CString(C.FIRST_NETINTERFACE))\n\tr := C.perfstat_netadapter(&first, adapters, C.sizeof_perfstat_netadapter_t, numad)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_netadapter() error\")\n\t}\n\tads := make([]NetAdapter, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tb := C.get_netadapter_stat(adapters, C.int(i))\n\t\tif b != nil {\n\t\t\tads[i] = perfstatnetadapter2netadapter(b)\n\t\t}\n\t}\n\treturn ads, nil\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/procstat.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#cgo LDFLAGS: -lperfstat\n\n#include <libperfstat.h>\n#include <string.h>\n#include <stdlib.h>\n\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nfunc ProcessStat() ([]Process, error) {\n\tvar proc *C.perfstat_process_t\n\tvar first C.perfstat_id_t\n\n\tnumproc := C.perfstat_process(nil, nil, C.sizeof_perfstat_process_t, 0)\n\tif numproc < 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_process() error\")\n\t}\n\n\tplen := C.sizeof_perfstat_process_t * C.ulong(numproc)\n\tproc = (*C.perfstat_process_t)(C.malloc(plen))\n\tdefer C.free(unsafe.Pointer(proc))\n\tC.strcpy(&first.name[0], C.CString(\"\"))\n\tr := C.perfstat_process(&first, proc, C.sizeof_perfstat_process_t, numproc)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_process() error\")\n\t}\n\n\tps := make([]Process, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tp := C.get_process_stat(proc, C.int(i))\n\t\tif p != nil {\n\t\t\tps[i] = perfstatprocess2process(p)\n\t\t}\n\t}\n\treturn ps, nil\n}\n\nfunc ThreadStat() ([]Thread, error) {\n\tvar thread *C.perfstat_thread_t\n\tvar first C.perfstat_id_t\n\n\tnumthr := C.perfstat_thread(nil, nil, C.sizeof_perfstat_thread_t, 0)\n\tif numthr < 1 {\n\t\treturn nil, fmt.Errorf(\"perfstat_thread() error\")\n\t}\n\n\tthlen := C.sizeof_perfstat_thread_t * C.ulong(numthr)\n\tthread = (*C.perfstat_thread_t)(C.malloc(thlen))\n\tdefer C.free(unsafe.Pointer(thread))\n\tC.strcpy(&first.name[0], C.CString(\"\"))\n\tr := C.perfstat_thread(&first, thread, C.sizeof_perfstat_thread_t, numthr)\n\tif r < 0 {\n\t\treturn nil, fmt.Errorf(\"perfstat_thread() error\")\n\t}\n\n\tth := make([]Thread, r)\n\tfor i := 0; i < int(r); i++ {\n\t\tt := C.get_thread_stat(thread, C.int(i))\n\t\tif t != nil {\n\t\t\tth[i] = perfstatthread2thread(t)\n\t\t}\n\t}\n\treturn th, nil\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/sysconf.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#include <unistd.h>\n*/\nimport \"C\"\n\nimport \"fmt\"\n\nconst (\n\tSC_ARG_MAX                      = 0\n\tSC_CHILD_MAX                    = 1\n\tSC_CLK_TCK                      = 2\n\tSC_NGROUPS_MAX                  = 3\n\tSC_OPEN_MAX                     = 4\n\tSC_STREAM_MAX                   = 5\n\tSC_TZNAME_MAX                   = 6\n\tSC_JOB_CONTROL                  = 7\n\tSC_SAVED_IDS                    = 8\n\tSC_VERSION                      = 9\n\tSC_POSIX_ARG_MAX                = 10\n\tSC_POSIX_CHILD_MAX              = 11\n\tSC_POSIX_LINK_MAX               = 12\n\tSC_POSIX_MAX_CANON              = 13\n\tSC_POSIX_MAX_INPUT              = 14\n\tSC_POSIX_NAME_MAX               = 15\n\tSC_POSIX_NGROUPS_MAX            = 16\n\tSC_POSIX_OPEN_MAX               = 17\n\tSC_POSIX_PATH_MAX               = 18\n\tSC_POSIX_PIPE_BUF               = 19\n\tSC_POSIX_SSIZE_MAX              = 20\n\tSC_POSIX_STREAM_MAX             = 21\n\tSC_POSIX_TZNAME_MAX             = 22\n\tSC_BC_BASE_MAX                  = 23\n\tSC_BC_DIM_MAX                   = 24\n\tSC_BC_SCALE_MAX                 = 25\n\tSC_BC_STRING_MAX                = 26\n\tSC_EQUIV_CLASS_MAX              = 27\n\tSC_EXPR_NEST_MAX                = 28\n\tSC_LINE_MAX                     = 29\n\tSC_RE_DUP_MAX                   = 30\n\tSC_2_VERSION                    = 31\n\tSC_2_C_DEV                      = 32\n\tSC_2_FORT_DEV                   = 33\n\tSC_2_FORT_RUN                   = 34\n\tSC_2_LOCALEDEF                  = 35\n\tSC_2_SW_DEV                     = 36\n\tSC_POSIX2_BC_BASE_MAX           = 37\n\tSC_POSIX2_BC_DIM_MAX            = 38\n\tSC_POSIX2_BC_SCALE_MAX          = 39\n\tSC_POSIX2_BC_STRING_MAX         = 40\n\tSC_POSIX2_BC_EQUIV_CLASS_MAX    = 41\n\tSC_POSIX2_BC_EXPR_NEST_MAX      = 42\n\tSC_POSIX2_BC_LINE_MAX           = 43\n\tSC_POSIX2_BC_RE_DUP_MAX         = 44\n\tSC_PASS_MAX                     = 45\n\tSC_XOPEN_VERSION                = 46\n\tSC_ATEXIT_MAX                   = 47\n\tSC_PAGE_SIZE                    = 48\n\tSC_PAGESIZE                     = SC_PAGE_SIZE\n\tSC_AES_OS_VERSION               = 49\n\tSC_COLL_WEIGHTS_MAX             = 50\n\tSC_2_C_WIND                     = 51\n\tSC_2_C_VERSION                  = 52\n\tSC_2_UPE                        = 53\n\tSC_2_CHAR_TERM                  = 54\n\tSC_XOPEN_SHM                    = 55\n\tSC_XOPEN_CRYPT                  = 56\n\tSC_XOPEN_ENH_I18N               = 57\n\tSC_IOV_MAX                      = 58\n\tSC_THREAD_SAFE_FUNCTIONS        = 59\n\tSC_THREADS                      = 60\n\tSC_THREAD_ATTR_STACKADDR        = 61\n\tSC_THREAD_ATTR_STACKSIZE        = 62\n\tSC_THREAD_FORKALL               = 63\n\tSC_THREAD_PRIORITY_SCHEDULING   = 64\n\tSC_THREAD_PRIO_INHERIT          = 65\n\tSC_THREAD_PRIO_PROTECT          = 66\n\tSC_THREAD_PROCESS_SHARED        = 67\n\tSC_THREAD_KEYS_MAX              = 68\n\tSC_THREAD_DATAKEYS_MAX          = SC_THREAD_KEYS_MAX\n\tSC_THREAD_STACK_MIN             = 69\n\tSC_THREAD_THREADS_MAX           = 70\n\tSC_NPROCESSORS_CONF             = 71\n\tSC_NPROCESSORS_ONLN             = 72\n\tSC_XOPEN_UNIX                   = 73\n\tSC_AIO_LISTIO_MAX               = 75\n\tSC_AIO_MAX                      = 76\n\tSC_AIO_PRIO_DELTA_MAX           = 77\n\tSC_ASYNCHRONOUS_IO              = 78\n\tSC_DELAYTIMER_MAX               = 79\n\tSC_FSYNC                        = 80\n\tSC_GETGR_R_SIZE_MAX             = 81\n\tSC_GETPW_R_SIZE_MAX             = 82\n\tSC_LOGIN_NAME_MAX               = 83\n\tSC_MAPPED_FILES                 = 84\n\tSC_MEMLOCK                      = 85\n\tSC_MEMLOCK_RANGE                = 86\n\tSC_MEMORY_PROTECTION            = 87\n\tSC_MESSAGE_PASSING              = 88\n\tSC_MQ_OPEN_MAX                  = 89\n\tSC_MQ_PRIO_MAX                  = 90\n\tSC_PRIORITIZED_IO               = 91\n\tSC_PRIORITY_SCHEDULING          = 92\n\tSC_REALTIME_SIGNALS             = 93\n\tSC_RTSIG_MAX                    = 94\n\tSC_SEMAPHORES                   = 95\n\tSC_SEM_NSEMS_MAX                = 96\n\tSC_SEM_VALUE_MAX                = 97\n\tSC_SHARED_MEMORY_OBJECTS        = 98\n\tSC_SIGQUEUE_MAX                 = 99\n\tSC_SYNCHRONIZED_IO              = 100\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 101\n\tSC_TIMERS                       = 102\n\tSC_TIMER_MAX                    = 103\n\tSC_TTY_NAME_MAX                 = 104\n\tSC_XBS5_ILP32_OFF32             = 105\n\tSC_XBS5_ILP32_OFFBIG            = 106\n\tSC_XBS5_LP64_OFF64              = 107\n\tSC_XBS5_LPBIG_OFFBIG            = 108\n\tSC_XOPEN_XCU_VERSION            = 109\n\tSC_XOPEN_REALTIME               = 110\n\tSC_XOPEN_REALTIME_THREADS       = 111\n\tSC_XOPEN_LEGACY                 = 112\n\tSC_REENTRANT_FUNCTIONS          = SC_THREAD_SAFE_FUNCTIONS\n\tSC_PHYS_PAGES                   = 113\n\tSC_AVPHYS_PAGES                 = 114\n\tSC_LPAR_ENABLED                 = 115\n\tSC_LARGE_PAGESIZE               = 116\n\tSC_AIX_KERNEL_BITMODE           = 117\n\tSC_AIX_REALMEM                  = 118\n\tSC_AIX_HARDWARE_BITMODE         = 119\n\tSC_AIX_MP_CAPABLE               = 120\n\tSC_V6_ILP32_OFF32               = 121\n\tSC_V6_ILP32_OFFBIG              = 122\n\tSC_V6_LP64_OFF64                = 123\n\tSC_V6_LPBIG_OFFBIG              = 124\n\tSC_XOPEN_STREAMS                = 125\n\tSC_HOST_NAME_MAX                = 126\n\tSC_REGEXP                       = 127\n\tSC_SHELL                        = 128\n\tSC_SYMLOOP_MAX                  = 129\n\tSC_ADVISORY_INFO                = 130\n\tSC_FILE_LOCKING                 = 131\n\tSC_2_PBS                        = 132\n\tSC_2_PBS_ACCOUNTING             = 133\n\tSC_2_PBS_CHECKPOINT             = 134\n\tSC_2_PBS_LOCATE                 = 135\n\tSC_2_PBS_MESSAGE                = 136\n\tSC_2_PBS_TRACK                  = 137\n\tSC_BARRIERS                     = 138\n\tSC_CLOCK_SELECTION              = 139\n\tSC_CPUTIME                      = 140\n\tSC_MONOTONIC_CLOCK              = 141\n\tSC_READER_WRITER_LOCKS          = 142\n\tSC_SPAWN                        = 143\n\tSC_SPIN_LOCKS                   = 144\n\tSC_SPORADIC_SERVER              = 145\n\tSC_THREAD_CPUTIME               = 146\n\tSC_THREAD_SPORADIC_SERVER       = 147\n\tSC_TIMEOUTS                     = 148\n\tSC_TRACE                        = 149\n\tSC_TRACE_EVENT_FILTER           = 150\n\tSC_TRACE_INHERIT                = 151\n\tSC_TRACE_LOG                    = 152\n\tSC_TYPED_MEMORY_OBJECTS         = 153\n\tSC_IPV6                         = 154\n\tSC_RAW_SOCKETS                  = 155\n\tSC_SS_REPL_MAX                  = 156\n\tSC_TRACE_EVENT_NAME_MAX         = 157\n\tSC_TRACE_NAME_MAX               = 158\n\tSC_TRACE_SYS_MAX                = 159\n\tSC_TRACE_USER_EVENT_MAX         = 160\n\tSC_AIX_UKEYS                    = 161\n\tSC_AIX_ENHANCED_AFFINITY        = 162\n\tSC_V7_ILP32_OFF32               = 163\n\tSC_V7_ILP32_OFFBIG              = 164\n\tSC_V7_LP64_OFF64                = 165\n\tSC_V7_LPBIG_OFFBIG              = 166\n\tSC_THREAD_ROBUST_PRIO_INHERIT   = 167\n\tSC_THREAD_ROBUST_PRIO_PROTECT   = 168\n\tSC_XOPEN_UUCP                   = 169\n\tSC_XOPEN_ARMOR                  = 170\n)\n\nfunc Sysconf(name int32) (int64, error) {\n\tr := C.sysconf(C.int(name))\n\tif r == -1 {\n\t\treturn 0, fmt.Errorf(\"sysconf error\")\n\t} else {\n\t\treturn int64(r), nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/systemcfg.go",
    "content": "// +build aix\n\npackage perfstat\n\nimport \"golang.org/x/sys/unix\"\n\n// function Getsystemcfg() is defined in golang.org/x/sys/unix\n// we define here just missing constants for the function and some helpers\n\n// Calls to getsystemcfg()\nconst (\n\tSC_ARCH         = 1  /* processor architecture */\n\tSC_IMPL         = 2  /* processor implementation */\n\tSC_VERS         = 3  /* processor version */\n\tSC_WIDTH        = 4  /* width (32 || 64) */\n\tSC_NCPUS        = 5  /* 1 = UP, n = n-way MP */\n\tSC_L1C_ATTR     = 6  /* L1 cache attributes (bit flags) */\n\tSC_L1C_ISZ      = 7  /* size of L1 instruction cache */\n\tSC_L1C_DSZ      = 8  /* size of L1 data cache */\n\tSC_L1C_ICA      = 9  /* L1 instruction cache associativity */\n\tSC_L1C_DCA      = 10 /* L1 data cache associativity */\n\tSC_L1C_IBS      = 11 /* L1 instruction cache block size */\n\tSC_L1C_DBS      = 12 /* L1 data cache block size */\n\tSC_L1C_ILS      = 13 /* L1 instruction cache line size */\n\tSC_L1C_DLS      = 14 /* L1 data cache line size */\n\tSC_L2C_SZ       = 15 /* size of L2 cache, 0 = No L2 cache */\n\tSC_L2C_AS       = 16 /* L2 cache associativity */\n\tSC_TLB_ATTR     = 17 /* TLB attributes (bit flags) */\n\tSC_ITLB_SZ      = 18 /* entries in instruction TLB */\n\tSC_DTLB_SZ      = 19 /* entries in data TLB */\n\tSC_ITLB_ATT     = 20 /* instruction tlb associativity */\n\tSC_DTLB_ATT     = 21 /* data tlb associativity */\n\tSC_RESRV_SZ     = 22 /* size of reservation */\n\tSC_PRI_LC       = 23 /* spin lock count in supevisor mode */\n\tSC_PRO_LC       = 24 /* spin lock count in problem state */\n\tSC_RTC_TYPE     = 25 /* RTC type */\n\tSC_VIRT_AL      = 26 /* 1 if hardware aliasing is supported */\n\tSC_CAC_CONG     = 27 /* number of page bits for cache synonym */\n\tSC_MOD_ARCH     = 28 /* used by system for model determination */\n\tSC_MOD_IMPL     = 29 /* used by system for model determination */\n\tSC_XINT         = 30 /* used by system for time base conversion */\n\tSC_XFRAC        = 31 /* used by system for time base conversion */\n\tSC_KRN_ATTR     = 32 /* kernel attributes, see below */\n\tSC_PHYSMEM      = 33 /* bytes of OS available memory */\n\tSC_SLB_ATTR     = 34 /* SLB attributes */\n\tSC_SLB_SZ       = 35 /* size of slb (0 = no slb) */\n\tSC_ORIG_NCPUS   = 36 /* original number of CPUs */\n\tSC_MAX_NCPUS    = 37 /* max cpus supported by this AIX image */\n\tSC_MAX_REALADDR = 38 /* max supported real memory address +1 */\n\tSC_ORIG_ENT_CAP = 39 /* configured entitled processor capacity at boot required by cross-partition LPAR tools. */\n\tSC_ENT_CAP      = 40 /* entitled processor capacity */\n\tSC_DISP_WHE     = 41 /* Dispatch wheel time period (TB units) */\n\tSC_CAPINC       = 42 /* delta by which capacity can change */\n\tSC_VCAPW        = 43 /* priority weight for idle capacity distribution */\n\tSC_SPLP_STAT    = 44 /* State of SPLPAR enablement: 0x1 => 1=SPLPAR capable; 0=not, 0x2 => SPLPAR enabled 0=dedicated, 1=shared */\n\tSC_SMT_STAT     = 45 /* State of SMT enablement: 0x1 = SMT Capable  0=no/1=yes, 0x2 = SMT Enabled  0=no/1=yes, 0x4 = SMT threads bound true 0=no/1=yes */\n\tSC_SMT_TC       = 46 /* Number of SMT Threads per Physical CPU */\n\tSC_VMX_VER      = 47 /* RPA defined VMX version: 0 = VMX not available or disabled, 1 = VMX capable, 2 = VMX and VSX capable */\n\tSC_LMB_SZ       = 48 /* Size of an LMB on this system. */\n\tSC_MAX_XCPU     = 49 /* Number of exclusive cpus on line */\n\tSC_EC_LVL       = 50 /* Kernel error checking level */\n\tSC_AME_STAT     = 51 /* AME status */\n\tSC_ECO_STAT     = 52 /* extended cache options */\n\tSC_DFP_STAT     = 53 /* RPA defined DFP version, 0=none/disabled */\n\tSC_VRM_STAT     = 54 /* VRM Capable/enabled */\n\tSC_PHYS_IMP     = 55 /* physical processor implementation */\n\tSC_PHYS_VER     = 56 /* physical processor version */\n\tSC_SPCM_STATUS  = 57\n\tSC_SPCM_MAX     = 58\n\tSC_TM_VER       = 59 /* Transaction Memory version, 0 - not capable */\n\tSC_NX_CAP       = 60 /* NX GZIP capable */\n\tSC_PKS_STATE    = 61 /* Platform KeyStore */\n)\n\n/* kernel attributes                        */\n/* bit          0/1 meaning                 */\n/* -----------------------------------------*/\n/* 31   32-bit kernel / 64-bit kernel       */\n/* 30   non-LPAR      / LPAR                */\n/* 29   old 64bit ABI / 64bit Large ABI     */\n/* 28   non-NUMA      / NUMA                */\n/* 27   UP            / MP                  */\n/* 26   no DR CPU add / DR CPU add support  */\n/* 25   no DR CPU rm  / DR CPU rm  support  */\n/* 24   no DR MEM add / DR MEM add support  */\n/* 23   no DR MEM rm  / DR MEM rm  support  */\n/* 22   kernel keys disabled / enabled      */\n/* 21   no recovery   / recovery enabled    */\n/* 20   non-MLS    / MLS enabled            */\n/* 19   enhanced affinity indicator         */\n/* 18   non-vTPM    / vTPM enabled          */\n/* 17   non-VIOS    / VIOS                  */\n\n// Values for architecture field\nconst (\n\tARCH_POWER_RS = 0x0001 /* Power Classic architecture */\n\tARCH_POWER_PC = 0x0002 /* Power PC architecture */\n\tARCH_IA64     = 0x0003 /* Intel IA64 architecture */\n)\n\n// Values for implementation field for POWER_PC Architectures\nconst (\n\tIMPL_POWER_RS1     = 0x00001     /* RS1 class CPU */\n\tIMPL_POWER_RSC     = 0x00002     /* RSC class CPU */\n\tIMPL_POWER_RS2     = 0x00004     /* RS2 class CPU */\n\tIMPL_POWER_601     = 0x00008     /* 601 class CPU */\n\tIMPL_POWER_603     = 0x00020     /* 603 class CPU */\n\tIMPL_POWER_604     = 0x00010     /* 604 class CPU */\n\tIMPL_POWER_620     = 0x00040     /* 620 class CPU */\n\tIMPL_POWER_630     = 0x00080     /* 630 class CPU */\n\tIMPL_POWER_A35     = 0x00100     /* A35 class CPU */\n\tIMPL_POWER_RS64II  = 0x0200      /* RS64-II class CPU */\n\tIMPL_POWER_RS64III = 0x0400      /* RS64-III class CPU */\n\tIMPL_POWER4        = 0x0800      /* 4 class CPU */\n\tIMPL_POWER_RS64IV  = IMPL_POWER4 /* 4 class CPU */\n\tIMPL_POWER_MPC7450 = 0x1000      /* MPC7450 class CPU */\n\tIMPL_POWER5        = 0x2000      /* 5 class CPU */\n\tIMPL_POWER6        = 0x4000      /* 6 class CPU */\n\tIMPL_POWER7        = 0x8000      /* 7 class CPU */\n\tIMPL_POWER8        = 0x10000     /* 8 class CPU */\n\tIMPL_POWER9        = 0x20000     /* 9 class CPU */\n)\n\n// Values for implementation field for IA64 Architectures\nconst (\n\tIMPL_IA64_M1 = 0x0001 /* IA64 M1 class CPU (Itanium) */\n\tIMPL_IA64_M2 = 0x0002 /* IA64 M2 class CPU */\n)\n\n// Values for the version field\nconst (\n\tPV_601        = 0x010001 /* Power PC 601 */\n\tPV_601A       = 0x010002 /* Power PC 601 */\n\tPV_603        = 0x060000 /* Power PC 603 */\n\tPV_604        = 0x050000 /* Power PC 604 */\n\tPV_620        = 0x070000 /* Power PC 620 */\n\tPV_630        = 0x080000 /* Power PC 630 */\n\tPV_A35        = 0x090000 /* Power PC A35 */\n\tPV_RS64II     = 0x0A0000 /* Power PC RS64II */\n\tPV_RS64III    = 0x0B0000 /* Power PC RS64III */\n\tPV_4          = 0x0C0000 /* Power PC 4 */\n\tPV_RS64IV     = PV_4     /* Power PC 4 */\n\tPV_MPC7450    = 0x0D0000 /* Power PC MPC7450 */\n\tPV_4_2        = 0x0E0000 /* Power PC 4 */\n\tPV_4_3        = 0x0E0001 /* Power PC 4 */\n\tPV_5          = 0x0F0000 /* Power PC 5 */\n\tPV_5_2        = 0x0F0001 /* Power PC 5 */\n\tPV_5_3        = 0x0F0002 /* Power PC 5 */\n\tPV_6          = 0x100000 /* Power PC 6 */\n\tPV_6_1        = 0x100001 /* Power PC 6 DD1.x */\n\tPV_7          = 0x200000 /* Power PC 7 */\n\tPV_8          = 0x300000 /* Power PC 8 */\n\tPV_9          = 0x400000 /* Power PC 9 */\n\tPV_5_Compat   = 0x0F8000 /* Power PC 5 */\n\tPV_6_Compat   = 0x108000 /* Power PC 6 */\n\tPV_7_Compat   = 0x208000 /* Power PC 7 */\n\tPV_8_Compat   = 0x308000 /* Power PC 8 */\n\tPV_9_Compat   = 0x408000 /* Power PC 9 */\n\tPV_RESERVED_2 = 0x0A0000 /* source compatability */\n\tPV_RESERVED_3 = 0x0B0000 /* source compatability */\n\tPV_RS2        = 0x040000 /* Power RS2 */\n\tPV_RS1        = 0x020000 /* Power RS1 */\n\tPV_RSC        = 0x030000 /* Power RSC */\n\tPV_M1         = 0x008000 /* Intel IA64 M1 */\n\tPV_M2         = 0x008001 /* Intel IA64 M2 */\n)\n\n// Values for rtc_type\nconst (\n\tRTC_POWER    = 1 /* rtc as defined by Power Arch. */\n\tRTC_POWER_PC = 2 /* rtc as defined by Power PC Arch. */\n\tRTC_IA64     = 3 /* rtc as defined by IA64 Arch. */\n)\n\nconst NX_GZIP_PRESENT = 0x00000001\n\nconst (\n\tPKS_STATE_CAPABLE = 1\n\tPKS_STATE_ENABLED = 2\n)\n\n// Macros for identifying physical processor\nconst (\n\tPPI4_1 = 0x35\n\tPPI4_2 = 0x38\n\tPPI4_3 = 0x39\n\tPPI4_4 = 0x3C\n\tPPI4_5 = 0x44\n\tPPI5_1 = 0x3A\n\tPPI5_2 = 0x3B\n\tPPI6_1 = 0x3E\n\tPPI7_1 = 0x3F\n\tPPI7_2 = 0x4A\n\tPPI8_1 = 0x4B\n\tPPI8_2 = 0x4D\n\tPPI9   = 0x4E\n)\n\n// Macros for kernel attributes\nconst (\n\tKERN_TYPE            = 0x1\n\tKERN_LPAR            = 0x2\n\tKERN_64BIT_LARGE_ABI = 0x4\n\tKERN_NUMA            = 0x8\n\tKERN_UPMP            = 0x10\n\tKERN_DR_CPU_ADD      = 0x20\n\tKERN_DR_CPU_RM       = 0x40\n\tKERN_DR_MEM_ADD      = 0x80\n\tKERN_DR_MEM_RM       = 0x100\n\tKERN_KKEY_ENABLED    = 0x200\n\tKERN_RECOVERY        = 0x400\n\tKERN_MLS             = 0x800\n\tKERN_ENH_AFFINITY    = 0x1000\n\tKERN_VTPM            = 0x2000\n\tKERN_VIOS            = 0x4000\n)\n\n// macros for SPLPAR environment.\nconst (\n\tSPLPAR_CAPABLE        = 0x1\n\tSPLPAR_ENABLED        = 0x2\n\tSPLPAR_DONATE_CAPABLE = 0x4\n)\n\n// Macros for SMT status determination\nconst (\n\tSMT_CAPABLE = 0x1\n\tSMT_ENABLE  = 0x2\n\tSMT_BOUND   = 0x4\n\tSMT_ORDER   = 0x8\n)\n\n// Macros for VRM status determination\nconst (\n\tVRM_CAPABLE  = 0x1\n\tVRM_ENABLE   = 0x2\n\tCMOX_CAPABLE = 0x4\n)\n\n// Macros for AME status determination\nconst AME_ENABLE = 0x1\n\n// Macros for extended cache options\nconst (\n\tECO_CAPABLE = 0x1\n\tECO_ENABLE  = 0x2\n)\n\n// These define blocks of values for model_arch and model_impl that are reserved for OEM use.\nconst (\n\tMODEL_ARCH_RSPC         = 2\n\tMODEL_ARCH_CHRP         = 3\n\tMODEL_ARCH_IA64         = 4\n\tMODEL_ARCH_OEM_START    = 1024\n\tMODEL_ARCH_OEM_END      = 2047\n\tMODEL_IMPL_RS6K_UP_MCA  = 1\n\tMODEL_IMPL_RS6K_SMP_MCA = 2\n\tMODEL_IMPL_RSPC_UP_PCI  = 3\n\tMODEL_IMPL_RSPC_SMP_PCI = 4\n\tMODEL_IMPL_CHRP_UP_PCI  = 5\n\tMODEL_IMPL_CHRP_SMP_PCI = 6\n\tMODEL_IMPL_IA64_COM     = 7\n\tMODEL_IMPL_IA64_SOFTSDV = 8\n\tMODEL_IMPL_MAMBO_SIM    = 9\n\tMODEL_IMPL_POWER_KVM    = 10\n\tMODEL_IMPL_OEM_START    = 1024\n\tMODEL_IMPL_OEM_END      = 2047\n)\n\n// example determining processor compatibilty mode on AIX:\n// impl := unix.Getsystemcfg(SC_IMPL)\n// if impl&IMPL_POWER8 != 0 {\n//     // we are running on POWER8\n// }\n// if impl&IMPL_POWER9 != 0 {\n//     // we are running on POWER9\n// }\n\nfunc GetCPUImplementation() string {\n\timpl := unix.Getsystemcfg(SC_IMPL)\n\tswitch {\n\tcase impl&IMPL_POWER4 != 0:\n\t\treturn \"POWER4\"\n\tcase impl&IMPL_POWER5 != 0:\n\t\treturn \"POWER5\"\n\tcase impl&IMPL_POWER6 != 0:\n\t\treturn \"POWER6\"\n\tcase impl&IMPL_POWER7 != 0:\n\t\treturn \"POWER7\"\n\tcase impl&IMPL_POWER8 != 0:\n\t\treturn \"POWER8\"\n\tcase impl&IMPL_POWER9 != 0:\n\t\treturn \"POWER9\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\nfunc POWER9OrNewer() bool {\n\timpl := unix.Getsystemcfg(SC_IMPL)\n\tif impl&IMPL_POWER9 != 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc POWER9() bool {\n\timpl := unix.Getsystemcfg(SC_IMPL)\n\tif impl&IMPL_POWER9 != 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc POWER8OrNewer() bool {\n\timpl := unix.Getsystemcfg(SC_IMPL)\n\tif impl&IMPL_POWER9 != 0 || impl&IMPL_POWER8 != 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc POWER8() bool {\n\timpl := unix.Getsystemcfg(SC_IMPL)\n\tif impl&IMPL_POWER8 != 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc POWER7OrNewer() bool {\n\timpl := unix.Getsystemcfg(SC_IMPL)\n\tif impl&IMPL_POWER9 != 0 || impl&IMPL_POWER8 != 0 || impl&IMPL_POWER7 != 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc POWER7() bool {\n\timpl := unix.Getsystemcfg(SC_IMPL)\n\tif impl&IMPL_POWER7 != 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc HasTransactionalMemory() bool {\n\timpl := unix.Getsystemcfg(SC_TM_VER)\n\tif impl > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc Is64Bit() bool {\n\timpl := unix.Getsystemcfg(SC_WIDTH)\n\tif impl == 64 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc IsSMP() bool {\n\timpl := unix.Getsystemcfg(SC_NCPUS)\n\tif impl > 1 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc HasVMX() bool {\n\timpl := unix.Getsystemcfg(SC_VMX_VER)\n\tif impl > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc HasVSX() bool {\n\timpl := unix.Getsystemcfg(SC_VMX_VER)\n\tif impl > 1 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc HasDFP() bool {\n\timpl := unix.Getsystemcfg(SC_DFP_STAT)\n\tif impl > 1 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc HasNxGzip() bool {\n\timpl := unix.Getsystemcfg(SC_NX_CAP)\n\tif impl&NX_GZIP_PRESENT > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc PksCapable() bool {\n\timpl := unix.Getsystemcfg(SC_PKS_STATE)\n\tif impl&PKS_STATE_CAPABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc PksEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_PKS_STATE)\n\tif impl&PKS_STATE_ENABLED > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc CPUMode() string {\n\timpl := unix.Getsystemcfg(SC_VERS)\n\tswitch impl {\n\tcase PV_9, PV_9_Compat:\n\t\treturn \"POWER9\"\n\tcase PV_8, PV_8_Compat:\n\t\treturn \"POWER8\"\n\tcase PV_7, PV_7_Compat:\n\t\treturn \"POWER7\"\n\tdefault:\n\t\treturn \"Unknown\"\n\t}\n}\n\nfunc KernelBits() int {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_TYPE == KERN_TYPE {\n\t\treturn 64\n\t}\n\treturn 32\n}\n\nfunc IsLPAR() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_LPAR == KERN_LPAR {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc CpuAddCapable() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_DR_CPU_ADD == KERN_DR_CPU_ADD {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc CpuRemoveCapable() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_DR_CPU_RM == KERN_DR_CPU_RM {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc MemoryAddCapable() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_DR_MEM_ADD == KERN_DR_MEM_ADD {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc MemoryRemoveCapable() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_DR_MEM_RM == KERN_DR_MEM_RM {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc DLparCapable() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&(KERN_DR_CPU_ADD|KERN_DR_CPU_RM|KERN_DR_MEM_ADD|KERN_DR_MEM_RM) > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc IsNUMA() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_NUMA > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc KernelKeys() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_KKEY_ENABLED > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc RecoveryMode() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_RECOVERY > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc EnhancedAffinity() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_ENH_AFFINITY > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc VTpmEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_VTPM > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc IsVIOS() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_VIOS > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc MLSEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_KRN_ATTR)\n\tif impl&KERN_MLS > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc SPLparCapable() bool {\n\timpl := unix.Getsystemcfg(SC_SPLP_STAT)\n\tif impl&SPLPAR_CAPABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc SPLparEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_SPLP_STAT)\n\tif impl&SPLPAR_ENABLED > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc DedicatedLpar() bool {\n\treturn !SPLparEnabled()\n}\n\nfunc SPLparCapped() bool {\n\timpl := unix.Getsystemcfg(SC_VCAPW)\n\tif impl == 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc SPLparDonating() bool {\n\timpl := unix.Getsystemcfg(SC_SPLP_STAT)\n\tif impl&SPLPAR_DONATE_CAPABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc SmtCapable() bool {\n\timpl := unix.Getsystemcfg(SC_SMT_STAT)\n\tif impl&SMT_CAPABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc SmtEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_SMT_STAT)\n\tif impl&SMT_ENABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc VrmCapable() bool {\n\timpl := unix.Getsystemcfg(SC_VRM_STAT)\n\tif impl&VRM_CAPABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc VrmEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_VRM_STAT)\n\tif impl&VRM_ENABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc AmeEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_AME_STAT)\n\tif impl&AME_ENABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc EcoCapable() bool {\n\timpl := unix.Getsystemcfg(SC_ECO_STAT)\n\tif impl&ECO_CAPABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc EcoEnabled() bool {\n\timpl := unix.Getsystemcfg(SC_ECO_STAT)\n\tif impl&ECO_ENABLE > 0 {\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_cpu.go",
    "content": "package perfstat\n\ntype CPU struct {\n\tName             string /* logical processor name (cpu0, cpu1, ..) */\n\tUser             int64  /* raw number of clock ticks spent in user mode */\n\tSys              int64  /* raw number of clock ticks spent in system mode */\n\tIdle             int64  /* raw number of clock ticks spent idle */\n\tWait             int64  /* raw number of clock ticks spent waiting for I/O */\n\tPSwitch          int64  /* number of context switches (changes of currently running process) */\n\tSyscall          int64  /* number of system calls executed */\n\tSysread          int64  /* number of read system calls executed */\n\tSyswrite         int64  /* number of write system calls executed */\n\tSysfork          int64  /* number of fork system call executed */\n\tSysexec          int64  /* number of exec system call executed */\n\tReadch           int64  /* number of characters tranferred with read system call */\n\tWritech          int64  /* number of characters tranferred with write system call */\n\tBread            int64  /* number of block reads */\n\tBwrite           int64  /* number of block writes */\n\tLread            int64  /* number of logical read requests */\n\tLwrite           int64  /* number of logical write requests */\n\tPhread           int64  /* number of physical reads (reads on raw device) */\n\tPhwrite          int64  /* number of physical writes (writes on raw device) */\n\tIget             int64  /* number of inode lookups */\n\tNamei            int64  /* number of vnode lookup from a path name */\n\tDirblk           int64  /* number of 512-byte block reads by the directory search routine to locate an entry for a file */\n\tMsg              int64  /* number of IPC message operations */\n\tSema             int64  /* number of IPC semaphore operations  */\n\tMinFaults        int64  /* number of page faults with no I/O */\n\tMajFaults        int64  /* number of page faults with disk I/O */\n\tPUser            int64  /* raw number of physical processor tics in user mode */\n\tPSys             int64  /* raw number of physical processor tics in system mode */\n\tPIdle            int64  /* raw number of physical processor tics idle */\n\tPWait            int64  /* raw number of physical processor tics waiting for I/O */\n\tRedispSD0        int64  /* number of thread redispatches within the scheduler affinity domain 0 */\n\tRedispSD1        int64  /* number of thread redispatches within the scheduler affinity domain 1 */\n\tRedispSD2        int64  /* number of thread redispatches within the scheduler affinity domain 2 */\n\tRedispSD3        int64  /* number of thread redispatches within the scheduler affinity domain 3 */\n\tRedispSD4        int64  /* number of thread redispatches within the scheduler affinity domain 4 */\n\tRedispSD5        int64  /* number of thread redispatches within the scheduler affinity domain 5 */\n\tMigrationPush    int64  /* number of thread migrations from the local runque to another queue due to starvation load balancing */\n\tMigrationS3grq   int64  /* number of  thread migrations from the global runque to the local runque resulting in a move accross scheduling domain 3 */\n\tMigrationS3pul   int64  /* number of  thread migrations from another processor's runque resulting in a move accross scheduling domain 3 */\n\tInvolCSwitch     int64  /* number of  involuntary thread context switches */\n\tVolCSwitch       int64  /* number of  voluntary thread context switches */\n\tRunQueue         int64  /* number of  threads on the runque */\n\tBound            int64  /* number of  bound threads */\n\tDecrIntrs        int64  /* number of decrementer tics interrupts */\n\tMpcRIntrs        int64  /* number of mpc's received interrupts */\n\tMpcSIntrs        int64  /* number of mpc's sent interrupts */\n\tDevIntrs         int64  /* number of device interrupts */\n\tSoftIntrs        int64  /* number of offlevel handlers called */\n\tPhantIntrs       int64  /* number of phantom interrupts */\n\tIdleDonatedPurr  int64  /* number of idle cycles donated by a dedicated partition enabled for donation */\n\tIdleDonatedSpurr int64  /* number of idle spurr cycles donated by a dedicated partition enabled for donation */\n\tBusyDonatedPurr  int64  /* number of busy cycles donated by a dedicated partition enabled for donation */\n\tBusyDonatedSpurr int64  /* number of busy spurr cycles donated by a dedicated partition enabled for donation */\n\tIdleStolenPurr   int64  /* number of idle cycles stolen by the hypervisor from a dedicated partition */\n\tIdleStolenSpurr  int64  /* number of idle spurr cycles stolen by the hypervisor from a dedicated partition */\n\tBusyStolenPurr   int64  /* number of busy cycles stolen by the hypervisor from a dedicated partition */\n\tBusyStolenSpurr  int64  /* number of busy spurr cycles stolen by the hypervisor from a dedicated partition */\n\tHpi              int64  /* number of hypervisor page-ins */\n\tHpit             int64  /* Time spent in hypervisor page-ins (in nanoseconds)*/\n\tPUserSpurr       int64  /* number of spurr cycles spent in user mode */\n\tPSysSpurr        int64  /* number of spurr cycles spent in kernel mode */\n\tPIdleSpurr       int64  /* number of spurr cycles spent in idle mode */\n\tPWaitSpurr       int64  /* number of spurr cycles spent in wait mode */\n\tSpurrFlag        int32  /* set if running in spurr mode */\n\tLocalDispatch    int64  /* number of local thread dispatches on this logical CPU */\n\tNearDispatch     int64  /* number of near thread dispatches on this logical CPU */\n\tFarDispatch      int64  /* number of far thread dispatches on this logical CPU */\n\tCSwitches        int64  /* Context switches */\n\tVersion          int64  /* version number (1, 2, etc.,) */\n\tTbLast           int64  /* timebase counter */\n\tState            int    /* Show whether the CPU is offline or online */\n\tVtbLast          int64  /* Last virtual timebase read */\n\tICountLast       int64  /* Last instruction count read */\n}\n\ntype CPUTotal struct {\n\tNCpus            int     /* number of active logical processors */\n\tNCpusCfg         int     /* number of configured processors */\n\tDescription      string  /* processor description (type/official name) */\n\tProcessorHz      int64   /* processor speed in Hz */\n\tUser             int64   /*  raw total number of clock ticks spent in user mode */\n\tSys              int64   /* raw total number of clock ticks spent in system mode */\n\tIdle             int64   /* raw total number of clock ticks spent idle */\n\tWait             int64   /* raw total number of clock ticks spent waiting for I/O */\n\tPSwitch          int64   /* number of process switches (change in currently running process) */\n\tSyscall          int64   /* number of system calls executed */\n\tSysread          int64   /* number of read system calls executed */\n\tSyswrite         int64   /* number of write system calls executed */\n\tSysfork          int64   /* number of forks system calls executed */\n\tSysexec          int64   /* number of execs system calls executed */\n\tReadch           int64   /* number of characters tranferred with read system call */\n\tWritech          int64   /* number of characters tranferred with write system call */\n\tDevIntrs         int64   /* number of device interrupts */\n\tSoftIntrs        int64   /* number of software interrupts */\n\tLbolt            int64   /* number of ticks since last reboot */\n\tLoadAvg1         float32 /* times the average number of runnables processes during the last 1, 5 and 15 minutes.    */\n\tLoadAvg5         float32 /* times the average number of runnables processes during the last 1, 5 and 15 minutes.    */\n\tLoadAvg15        float32 /* times the average number of runnables processes during the last 1, 5 and 15 minutes.    */\n\tRunQueue         int64   /* length of the run queue (processes ready) */\n\tSwpQueue         int64   /* length of the swap queue (processes waiting to be paged in) */\n\tBread            int64   /* number of blocks read */\n\tBwrite           int64   /* number of blocks written */\n\tLread            int64   /* number of logical read requests */\n\tLwrite           int64   /* number of logical write requests */\n\tPhread           int64   /* number of physical reads (reads on raw devices) */\n\tPhwrite          int64   /* number of physical writes (writes on raw devices) */\n\tRunOcc           int64   /* updated whenever runque is updated, i.e. the runqueue is occupied. This can be used to compute the simple average of ready processes  */\n\tSwpOcc           int64   /* updated whenever swpque is updated. i.e. the swpqueue is occupied. This can be used to compute the simple average processes waiting to be paged in */\n\tIget             int64   /* number of inode lookups */\n\tNamei            int64   /* number of vnode lookup from a path name */\n\tDirblk           int64   /* number of 512-byte block reads by the directory search routine to locate an entry for a file */\n\tMsg              int64   /* number of IPC message operations */\n\tSema             int64   /* number of IPC semaphore operations */\n\tRcvInt           int64   /* number of tty receive interrupts */\n\tXmtInt           int64   /* number of tyy transmit interrupts */\n\tMdmInt           int64   /* number of modem interrupts */\n\tTtyRawInch       int64   /* number of raw input characters  */\n\tTtyCanInch       int64   /* number of canonical input characters (always zero) */\n\tTtyRawOutch      int64   /* number of raw output characters */\n\tKsched           int64   /* number of kernel processes created */\n\tKoverf           int64   /* kernel process creation attempts where: -the user has forked to their maximum limit -the configuration limit of processes has been reached */\n\tKexit            int64   /* number of kernel processes that became zombies */\n\tRbread           int64   /* number of remote read requests */\n\tRcread           int64   /* number of cached remote reads */\n\tRbwrt            int64   /* number of remote writes */\n\tRcwrt            int64   /* number of cached remote writes */\n\tTraps            int64   /* number of traps */\n\tNCpusHigh        int64   /* index of highest processor online */\n\tPUser            int64   /* raw number of physical processor tics in user mode */\n\tPSys             int64   /* raw number of physical processor tics in system mode */\n\tPIdle            int64   /* raw number of physical processor tics idle */\n\tPWait            int64   /* raw number of physical processor tics waiting for I/O */\n\tDecrIntrs        int64   /* number of decrementer tics interrupts */\n\tMpcRIntrs        int64   /* number of mpc's received interrupts */\n\tMpcSIntrs        int64   /* number of mpc's sent interrupts */\n\tPhantIntrs       int64   /* number of phantom interrupts */\n\tIdleDonatedPurr  int64   /* number of idle cycles donated by a dedicated partition enabled for donation */\n\tIdleDonatedSpurr int64   /* number of idle spurr cycles donated by a dedicated partition enabled for donation */\n\tBusyDonatedPurr  int64   /* number of busy cycles donated by a dedicated partition enabled for donation */\n\tBusyDonatedSpurr int64   /* number of busy spurr cycles donated by a dedicated partition enabled for donation */\n\tIdleStolenPurr   int64   /* number of idle cycles stolen by the hypervisor from a dedicated partition */\n\tIdleStolenSpurr  int64   /* number of idle spurr cycles stolen by the hypervisor from a dedicated partition */\n\tBusyStolenPurr   int64   /* number of busy cycles stolen by the hypervisor from a dedicated partition */\n\tBusyStolenSpurr  int64   /* number of busy spurr cycles stolen by the hypervisor from a dedicated partition */\n\tIOWait           int32   /* number of processes that are asleep waiting for buffered I/O */\n\tPhysIO           int32   /* number of processes waiting for raw I/O */\n\tTWait            int64   /* number of threads that are waiting for filesystem direct(cio) */\n\tHpi              int64   /* number of hypervisor page-ins */\n\tHpit             int64   /* Time spent in hypervisor page-ins (in nanoseconds) */\n\tPUserSpurr       int64   /* number of spurr cycles spent in user mode */\n\tPSysSpurr        int64   /* number of spurr cycles spent in kernel mode */\n\tPIdleSpurr       int64   /* number of spurr cycles spent in idle mode */\n\tPWaitSpurr       int64   /* number of spurr cycles spent in wait mode */\n\tSpurrFlag        int     /* set if running in spurr mode */\n\tVersion          int64   /* version number (1, 2, etc.,) */\n\tTbLast           int64   /*time base counter */\n\tPurrCoalescing   int64   /* If the calling partition is authorized to see pool wide statistics then PURR cycles consumed to coalesce data else set to zero.*/\n\tSpurrCoalescing  int64   /* If the calling partition is authorized to see pool wide statistics then SPURR cycles consumed to coalesce data else set to zero.  */\n}\n\ntype CPUUtil struct {\n\tVersion          int64\n\tCpuID            string  /* holds the id of the cpu */\n\tEntitlement      float32 /* Partition's entitlement */\n\tUserPct          float32 /* % of utilization in user mode */\n\tKernPct          float32 /* % of utilization in kernel mode */\n\tIdlePct          float32 /* % of utilization in idle mode */\n\tWaitPct          float32 /* % of utilization in wait mode */\n\tPhysicalBusy     float32 /* physical cpus busy */\n\tPhysicalConsumed float32 /* total cpus consumed by the partition */\n\tFreqPct          float32 /* Average freq% over the last interval */\n\tEntitlementPct   float32 /* % of entitlement used */\n\tBusyPct          float32 /* % of entitlement busy */\n\tIdleDonatedPct   float32 /* % idle cycles donated */\n\tBusyDonatedPct   float32 /* % of busy cycles donated */\n\tIdleStolenPct    float32 /* % idle cycles stolen */\n\tBusyStolenPct    float32 /* % busy cycles stolen */\n\tLUserPct         float32 /* % of utilization in user mode, in terms of logical processor ticks */\n\tLKernPct         float32 /* % of utilization in kernel mode, in terms of logical processor ticks*/\n\tLIdlePct         float32 /* % of utilization in idle mode, in terms of logical processor ticks */\n\tLWaitPct         float32 /* % of utilization in wait mode, in terms of logical processor ticks */\n\tDeltaTime        int64   /*   delta time in milliseconds, for which utilization is evaluated */\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_disk.go",
    "content": "package perfstat\n\ntype DiskTotal struct {\n\tNumber    int32 /* total number of disks */\n\tSize      int64 /* total size of all disks (in MB) */\n\tFree      int64 /* free portion of all disks (in MB) */\n\tXRate     int64 /* __rxfers: total number of transfers from disk */\n\tXfers     int64 /* total number of transfers to/from disk */\n\tWblks     int64 /* 512 bytes blocks written to all disks */\n\tRblks     int64 /* 512 bytes blocks read from all disks */\n\tTime      int64 /* amount of time disks are active */\n\tVersion   int64 /* version number (1, 2, etc.,) */\n\tRserv     int64 /* Average read or receive service time */\n\tMinRserv  int64 /* min read or receive service time */\n\tMaxRserv  int64 /* max read or receive service time */\n\tRTimeOut  int64 /* number of read request timeouts */\n\tRFailed   int64 /* number of failed read requests */\n\tWserv     int64 /* Average write or send service time */\n\tMinWserv  int64 /* min write or send service time */\n\tMaxWserv  int64 /* max write or send service time */\n\tWTimeOut  int64 /* number of write request timeouts */\n\tWFailed   int64 /* number of failed write requests */\n\tWqDepth   int64 /* instantaneous wait queue depth (number of requests waiting to be sent to disk) */\n\tWqTime    int64 /* accumulated wait queueing time */\n\tWqMinTime int64 /* min wait queueing time */\n\tWqMaxTime int64 /* max wait queueing time */\n}\n\n// Disk Adapter Types\nconst (\n\tDA_SCSI  = 0 /* 0 ==> SCSI, SAS, other legacy adapter types */\n\tDA_VSCSI     /* 1 ==> Virtual SCSI/SAS Adapter */\n\tDA_FCA       /* 2 ==> Fiber Channel Adapter */\n)\n\ntype DiskAdapter struct {\n\tName        string /* name of the adapter (from ODM) */\n\tDescription string /* adapter description (from ODM) */\n\tNumber      int32  /* number of disks connected to adapter */\n\tSize        int64  /* total size of all disks (in MB)  */\n\tFree        int64  /* free portion of all disks (in MB)  */\n\tXRate       int64  /* __rxfers: total number of reads via adapter */\n\tXfers       int64  /* total number of transfers via adapter */\n\tRblks       int64  /* 512 bytes blocks written via adapter */\n\tWblks       int64  /* 512 bytes blocks read via adapter  */\n\tTime        int64  /* amount of time disks are active */\n\tVersion     int64  /* version number (1, 2, etc.,) */\n\tAdapterType int64  /* 0 ==> SCSI, SAS, other legacy adapter types, 1 ==> Virtual SCSI/SAS Adapter, 2 ==> Fiber Channel Adapter */\n\tDkBSize     int64  /* Number of Bytes in a block for this disk*/\n\tDkRxfers    int64  /* Number of transfers from disk */\n\tDkRserv     int64  /* read or receive service time */\n\tDkWserv     int64  /* write or send service time */\n\tMinRserv    int64  /* Minimum read service time */\n\tMaxRserv    int64  /* Maximum read service time */\n\tMinWserv    int64  /* Minimum Write service time */\n\tMaxWserv    int64  /* Maximum write service time */\n\tWqDepth     int64  /* driver wait queue depth */\n\tWqSampled   int64  /* accumulated sampled dk_wq_depth */\n\tWqTime      int64  /* accumulated wait queueing time */\n\tWqMinTime   int64  /* minimum wait queueing time */\n\tWqMaxTime   int64  /* maximum wait queueing time */\n\tQFull       int64  /* \"Service\" queue full occurrence count (number of times the adapter/devices connected to the adapter is not accepting any more request) */\n\tQSampled    int64  /* accumulated sampled */\n}\n\ntype Disk struct {\n\tName        string /* name of the disk */\n\tDescription string /* disk description (from ODM) */\n\tVGName      string /* volume group name (from ODM) */\n\tSize        int64  /* size of the disk (in MB) */\n\tFree        int64  /* free portion of the disk (in MB) */\n\tBSize       int64  /* disk block size (in bytes) */\n\tXRate       int64  /* number of transfers from disk */\n\tXfers       int64  /* number of transfers to/from disk */\n\tWblks       int64  /* number of blocks written to disk */\n\tRblks       int64  /* number of blocks read from disk */\n\tQDepth      int64  /* instantaneous \"service\" queue depth (number of requests sent to disk and not completed yet) */\n\tTime        int64  /* amount of time disk is active */\n\tAdapter     string /* disk adapter name */\n\tPathsCount  int32  /* number of paths to this disk */\n\tQFull       int64  /* \"service\" queue full occurrence count (number of times the disk is not accepting any more request) */\n\tRserv       int64  /* read or receive service time */\n\tRTimeOut    int64  /* number of read request timeouts */\n\tRfailed     int64  /* number of failed read requests */\n\tMinRserv    int64  /* min read or receive service time */\n\tMaxRserv    int64  /* max read or receive service time */\n\tWserv       int64  /* write or send service time */\n\tWTimeOut    int64  /* number of write request timeouts */\n\tWfailed     int64  /* number of failed write requests */\n\tMinWserv    int64  /* min write or send service time */\n\tMaxWserv    int64  /* max write or send service time */\n\tWqDepth     int64  /* instantaneous wait queue depth (number of requests waiting to be sent to disk) */\n\tWqSampled   int64  /* accumulated sampled dk_wq_depth */\n\tWqTime      int64  /* accumulated wait queueing time */\n\tWqMinTime   int64  /* min wait queueing time */\n\tWqMaxTime   int64  /* max wait queueing time */\n\tQSampled    int64  /* accumulated sampled dk_q_depth */\n\tVersion     int64  /* version number (1, 2, etc.,) */\n\tPseudoDisk  bool   /*Indicates whether pseudo or physical disk */\n\tVTDisk      bool   /* 1- Virtual Target Disk, 0 - Others */\n}\n\ntype DiskPath struct {\n\tName      string /* name of the path */\n\tXRate     int64  /* __rxfers: number of reads via the path */\n\tXfers     int64  /* number of transfers via the path */\n\tRblks     int64  /* 512 bytes blocks written via the path */\n\tWblks     int64  /* 512 bytes blocks read via the path  */\n\tTime      int64  /* amount of time disks are active */\n\tAdapter   string /* disk adapter name (from ODM) */\n\tQFull     int64  /* \"service\" queue full occurrence count (number of times the disk is not accepting any more request) */\n\tRserv     int64  /* read or receive service time */\n\tRTimeOut  int64  /* number of read request timeouts */\n\tRfailed   int64  /* number of failed read requests */\n\tMinRserv  int64  /* min read or receive service time */\n\tMaxRserv  int64  /* max read or receive service time */\n\tWserv     int64  /* write or send service time */\n\tWTimeOut  int64  /* number of write request timeouts */\n\tWfailed   int64  /* number of failed write requests */\n\tMinWserv  int64  /* min write or send service time */\n\tMaxWserv  int64  /* max write or send service time */\n\tWqDepth   int64  /* instantaneous wait queue depth (number of requests waiting to be sent to disk) */\n\tWqSampled int64  /* accumulated sampled dk_wq_depth */\n\tWqTime    int64  /* accumulated wait queueing time */\n\tWqMinTime int64  /* min wait queueing time */\n\tWqMaxTime int64  /* max wait queueing time */\n\tQSampled  int64  /* accumulated sampled dk_q_depth */\n\tVersion   int64  /* version number (1, 2, etc.,)   */\n}\n\nconst (\n\tFC_DOWN = 0 // FC Adapter state is DOWN\n\tFC_UP   = 1 // FC Adapter state is UP\n)\n\nconst (\n\tFCT_FCHBA = 0 // FC type - real Fiber Channel Adapter\n\tFCT_VFC   = 1 // FC type - virtual Fiber Channel\n)\n\ntype FCAdapter struct {\n\tVersion                      int64  /* version number (1, 2, etc.,) */\n\tName                         string /* name of the adapter */\n\tState                        int32  /* FC Adapter state  UP or DOWN */\n\tInputRequests                int64  /* Number of Input Requests*/\n\tOutputRequests               int64  /* Number of Output Requests */\n\tInputBytes                   int64  /* Number of Input Bytes */\n\tOutputBytes                  int64  /* Number of Output Bytes */\n\tEffMaxTransfer               int64  /* Adapter's Effective Maximum  Transfer Value */\n\tNoDMAResourceCnt             int64  /* Count of DMA failures due to no DMA Resource available */\n\tNoCmdResourceCnt             int64  /* Count of failures to allocate a command due to no command resource available */\n\tAttentionType                int32  /* Link up or down Indicator */\n\tSecondsSinceLastReset        int64  /* Displays the seconds since last reset of the statistics on the adapter */\n\tTxFrames                     int64  /* Number of frames transmitted */\n\tTxWords                      int64  /* Fiber Channel Kbytes transmitted */\n\tRxFrames                     int64  /* Number of Frames Received */\n\tRxWords                      int64  /* Fiber Channel Kbytes Received */\n\tLIPCount                     int64  /* Count of LIP (Loop Initialization Protocol) Events received in case we have FC-AL */\n\tNOSCount                     int64  /* Count of NOS (Not_Operational) Events. This indicates a link failure state. */\n\tErrorFrames                  int64  /* Number of frames received with the CRC Error */\n\tDumpedFrames                 int64  /* Number of lost frames */\n\tLinkFailureCount             int64  /* Count of Link failures */\n\tLossofSyncCount              int64  /* Count of loss of sync */\n\tLossofSignal                 int64  /* Count of loss of Signal */\n\tPrimitiveSeqProtocolErrCount int64  /* number of times a primitive sequence was in error */\n\tInvalidTxWordCount           int64  /* Count of Invalid Transmission words received */\n\tInvalidCRCCount              int64  /* Count of CRC Errors in a Received Frame */\n\tPortFcId                     int64  /* SCSI Id of the adapter */\n\tPortSpeed                    int64  /* Speed of Adapter in GBIT */\n\tPortType                     string /* Type of connection. The Possible Values are Fabric, Private Loop, Point-to-Point, unknown */\n\tPortWWN                      int64  /* World Wide Port name */\n\tPortSupportedSpeed           int64  /* Supported Port Speed in GBIT */\n\tAdapterType                  int    /* 0 - Fiber Chanel, 1 - Virtual Fiber Chanel Adapter */\n\tVfcName                      string /* name of the Virtual Fiber Chanel(VFC) adapter */\n\tClientPartName               string /* name of the client partition */\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_fs.go",
    "content": "package perfstat\n\nimport (\n\t\"strings\"\n)\n\ntype FileSystem struct {\n\tDevice      string /* name of the mounted device */\n\tMountPoint  string /* where the device is mounted */\n\tFSType      int    /* File system type, see the constants below */\n\tFlags       int    /* Flags of the file system */\n\tTotalBlocks int64  /* number of 512 bytes blocks in the filesystem */\n\tFreeBlocks  int64  /* number of free 512 bytes block in the filesystem */\n\tTotalInodes int64  /* total number of inodes in the filesystem */\n\tFreeInodes  int64  /* number of free inodes in the filesystem */\n}\n\nfunc (f *FileSystem) TypeString() string {\n\tswitch f.FSType {\n\tcase FS_JFS2:\n\t\treturn \"jfs2\"\n\tcase FS_NAMEFS:\n\t\treturn \"namefs\"\n\tcase FS_NFS:\n\t\treturn \"nfs\"\n\tcase FS_JFS:\n\t\treturn \"jfs\"\n\tcase FS_CDROM:\n\t\treturn \"cdrfs\"\n\tcase FS_PROCFS:\n\t\treturn \"procfs\"\n\tcase FS_SFS:\n\t\treturn \"sfs\"\n\tcase FS_CACHEFS:\n\t\treturn \"cachefs\"\n\tcase FS_NFS3:\n\t\treturn \"nfs3\"\n\tcase FS_AUTOFS:\n\t\treturn \"autofs\"\n\tcase FS_POOLFS:\n\t\treturn \"poolfs\"\n\tcase FS_VXFS:\n\t\treturn \"vxfs\"\n\tcase FS_VXODM:\n\t\treturn \"vxodm\"\n\tcase FS_UDF:\n\t\treturn \"udfs\"\n\tcase FS_NFS4:\n\t\treturn \"nfs4\"\n\tcase FS_RFS4:\n\t\treturn \"rfs4\"\n\tcase FS_CIFS:\n\t\treturn \"cifs\"\n\tcase FS_PMEMFS:\n\t\treturn \"pmemfs\"\n\tcase FS_AHAFS:\n\t\treturn \"ahafs\"\n\tcase FS_STNFS:\n\t\treturn \"stnfs\"\n\tcase FS_ASMFS:\n\t\treturn \"asmfs\"\n\t}\n\treturn \"unknown\"\n}\n\nfunc (f *FileSystem) FlagsString() string {\n\tvar flags []string\n\n\tswitch {\n\tcase f.Flags&VFS_READONLY != 0:\n\t\tflags = append(flags, \"ro\")\n\tcase f.Flags&VFS_REMOVABLE != 0:\n\t\tflags = append(flags, \"removable\")\n\tcase f.Flags&VFS_DEVMOUNT != 0:\n\t\tflags = append(flags, \"local\")\n\tcase f.Flags&VFS_REMOTE != 0:\n\t\tflags = append(flags, \"remote\")\n\tcase f.Flags&VFS_SYSV_MOUNT != 0:\n\t\tflags = append(flags, \"sysv\")\n\tcase f.Flags&VFS_UNMOUNTING != 0:\n\t\tflags = append(flags, \"unmounting\")\n\tcase f.Flags&VFS_NOSUID != 0:\n\t\tflags = append(flags, \"nosuid\")\n\tcase f.Flags&VFS_NODEV != 0:\n\t\tflags = append(flags, \"nodev\")\n\tcase f.Flags&VFS_NOINTEG != 0:\n\t\tflags = append(flags, \"nointeg\")\n\tcase f.Flags&VFS_NOMANAGER != 0:\n\t\tflags = append(flags, \"nomanager\")\n\tcase f.Flags&VFS_NOCASE != 0:\n\t\tflags = append(flags, \"nocase\")\n\tcase f.Flags&VFS_UPCASE != 0:\n\t\tflags = append(flags, \"upcase\")\n\tcase f.Flags&VFS_NBC != 0:\n\t\tflags = append(flags, \"nbc\")\n\tcase f.Flags&VFS_MIND != 0:\n\t\tflags = append(flags, \"mind\")\n\tcase f.Flags&VFS_RBR != 0:\n\t\tflags = append(flags, \"rbr\")\n\tcase f.Flags&VFS_RBW != 0:\n\t\tflags = append(flags, \"rbw\")\n\tcase f.Flags&VFS_DISCONNECTED != 0:\n\t\tflags = append(flags, \"disconnected\")\n\tcase f.Flags&VFS_SHUTDOWN != 0:\n\t\tflags = append(flags, \"shutdown\")\n\tcase f.Flags&VFS_VMOUNTOK != 0:\n\t\tflags = append(flags, \"vmountok\")\n\tcase f.Flags&VFS_SUSER != 0:\n\t\tflags = append(flags, \"suser\")\n\tcase f.Flags&VFS_SOFT_MOUNT != 0:\n\t\tflags = append(flags, \"soft\")\n\tcase f.Flags&VFS_UNMOUNTED != 0:\n\t\tflags = append(flags, \"unmounted\")\n\tcase f.Flags&VFS_DEADMOUNT != 0:\n\t\tflags = append(flags, \"deadmount\")\n\tcase f.Flags&VFS_SNAPSHOT != 0:\n\t\tflags = append(flags, \"snapshot\")\n\tcase f.Flags&VFS_VCM_ON != 0:\n\t\tflags = append(flags, \"vcm_on\")\n\tcase f.Flags&VFS_VCM_MONITOR != 0:\n\t\tflags = append(flags, \"vcm_monitor\")\n\tcase f.Flags&VFS_ATIMEOFF != 0:\n\t\tflags = append(flags, \"noatime\")\n\tcase f.Flags&VFS_READMOSTLY != 0:\n\t\tflags = append(flags, \"readmostly\")\n\tcase f.Flags&VFS_CIOR != 0:\n\t\tflags = append(flags, \"cior\")\n\tcase f.Flags&VFS_CIO != 0:\n\t\tflags = append(flags, \"cio\")\n\tcase f.Flags&VFS_DIO != 0:\n\t\tflags = append(flags, \"dio\")\n\t}\n\n\treturn strings.Join(flags, \",\")\n}\n\n// Filesystem types\nconst (\n\tFS_JFS2    = 0  /* AIX physical fs \"jfs2\" */\n\tFS_NAMEFS  = 1  /* AIX pseudo fs \"namefs\" */\n\tFS_NFS     = 2  /* SUN Network File System \"nfs\" */\n\tFS_JFS     = 3  /* AIX R3 physical fs \"jfs\" */\n\tFS_CDROM   = 5  /* CDROM File System \"cdrom\" */\n\tFS_PROCFS  = 6  /* PROCFS File System \"proc\" */\n\tFS_SFS     = 16 /* AIX Special FS (STREAM mounts) */\n\tFS_CACHEFS = 17 /* Cachefs file system */\n\tFS_NFS3    = 18 /* NFSv3 file system */\n\tFS_AUTOFS  = 19 /* Automount file system */\n\tFS_POOLFS  = 20 /* Pool file system */\n\tFS_VXFS    = 32 /* THRPGIO File System \"vxfs\" */\n\tFS_VXODM   = 33 /* For Veritas File System */\n\tFS_UDF     = 34 /* UDFS file system */\n\tFS_NFS4    = 35 /* NFSv4 file system */\n\tFS_RFS4    = 36 /* NFSv4 Pseudo file system */\n\tFS_CIFS    = 37 /* AIX SMBFS (CIFS client) */\n\tFS_PMEMFS  = 38 /* MCR Async Mobility pseudo file system */\n\tFS_AHAFS   = 39 /* AHAFS File System \"aha\" */\n\tFS_STNFS   = 40 /* Short-Term NFS */\n\tFS_ASMFS   = 41 /* Oracle ASM FS */\n)\n\n// Filesystem flags\nconst (\n\tVFS_READONLY     = 0x00000001 /* rdonly access to vfs */\n\tVFS_REMOVABLE    = 0x00000002 /* removable (diskette) media */\n\tVFS_DEVMOUNT     = 0x00000004 /* physical device mount */\n\tVFS_REMOTE       = 0x00000008 /* file system is on network */\n\tVFS_SYSV_MOUNT   = 0x00000010 /* System V style mount */\n\tVFS_UNMOUNTING   = 0x00000020 /* originated by unmount() */\n\tVFS_NOSUID       = 0x00000040 /* don't maintain suid-ness across this mount */\n\tVFS_NODEV        = 0x00000080 /* don't allow device access across this mount */\n\tVFS_NOINTEG      = 0x00000100 /* no integrity mount option */\n\tVFS_NOMANAGER    = 0x00000200 /* mount managed fs w/o manager */\n\tVFS_NOCASE       = 0x00000400 /* do not map dir names */\n\tVFS_UPCASE       = 0x00000800 /* map dir names to uppercase */\n\tVFS_NBC          = 0x00001000 /* NBC cached file in this vfs */\n\tVFS_MIND         = 0x00002000 /* multi-segment .indirect */\n\tVFS_RBR          = 0x00004000 /* Release-behind when reading */\n\tVFS_RBW          = 0x00008000 /* Release-behind when writing */\n\tVFS_DISCONNECTED = 0x00010000 /* file mount not in use */\n\tVFS_SHUTDOWN     = 0x00020000 /* forced unmount for shutdown */\n\tVFS_VMOUNTOK     = 0x00040000 /* dir/file mnt permission flag */\n\tVFS_SUSER        = 0x00080000 /* client-side suser perm. flag */\n\tVFS_SOFT_MOUNT   = 0x00100000 /* file-over-file or directory over directory \"soft\" mount */\n\tVFS_UNMOUNTED    = 0x00200000 /* unmount completed, stale vnodes are left in the vfs */\n\tVFS_DEADMOUNT    = 0x00400000 /* softmount vfs should be disconnected at last vnode free */\n\tVFS_SNAPSHOT     = 0x00800000 /* snapshot mount */\n\tVFS_VCM_ON       = 0x01000000 /* VCM is currently active */\n\tVFS_VCM_MONITOR  = 0x02000000 /* VCM monitoring is active */\n\tVFS_ATIMEOFF     = 0x04000000 /* no atime updates during i/o */\n\tVFS_READMOSTLY   = 0x10000000 /* ROFS allows open for write */\n\tVFS_CIOR         = 0x20000000 /* O_CIOR mount */\n\tVFS_CIO          = 0x40000000 /* O_CIO mount */\n\tVFS_DIO          = 0x80000000 /* O_DIRECT mount */\n)\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_lpar.go",
    "content": "package perfstat\n\ntype PartitionType struct {\n\tSmtCapable        bool /* OS supports SMT mode */\n\tSmtEnabled        bool /* SMT mode is on */\n\tLparCapable       bool /* OS supports logical partitioning */\n\tLparEnabled       bool /* logical partitioning is on */\n\tSharedCapable     bool /* OS supports shared processor LPAR */\n\tSharedEnabled     bool /* partition runs in shared mode */\n\tDLparCapable      bool /* OS supports dynamic LPAR */\n\tCapped            bool /* partition is capped */\n\tKernel64bit       bool /* kernel is 64 bit */\n\tPoolUtilAuthority bool /* pool utilization available */\n\tDonateCapable     bool /* capable of donating cycles */\n\tDonateEnabled     bool /* enabled for donating cycles */\n\tAmsCapable        bool /* 1 = AMS(Active Memory Sharing) capable, 0 = Not AMS capable */\n\tAmsEnabled        bool /* 1 = AMS(Active Memory Sharing) enabled, 0 = Not AMS enabled */\n\tPowerSave         bool /*1= Power saving mode is enabled*/\n\tAmeEnabled        bool /* Active Memory Expansion is enabled */\n\tSharedExtended    bool\n}\n\ntype PartitionValue struct {\n\tOnline  int64\n\tMax     int64\n\tMin     int64\n\tDesired int64\n}\n\ntype PartitionConfig struct {\n\tVersion                  int64          /* Version number */\n\tName                     string         /* Partition Name */\n\tNode                     string         /* Node Name */\n\tConf                     PartitionType  /* Partition Properties */\n\tNumber                   int32          /* Partition Number */\n\tGroupID                  int32          /* Group ID */\n\tProcessorFamily          string         /* Processor Type */\n\tProcessorModel           string         /* Processor Model */\n\tMachineID                string         /* Machine ID */\n\tProcessorMhz             float64        /* Processor Clock Speed in MHz */\n\tNumProcessors            PartitionValue /* Number of Configured Physical Processors in frame*/\n\tOSName                   string         /* Name of Operating System */\n\tOSVersion                string         /* Version of operating System */\n\tOSBuild                  string         /* Build of Operating System */\n\tLCpus                    int32          /* Number of Logical CPUs */\n\tSmtThreads               int32          /* Number of SMT Threads */\n\tDrives                   int32          /* Total Number of Drives */\n\tNetworkAdapters          int32          /* Total Number of Network Adapters */\n\tCpuCap                   PartitionValue /* Min, Max and Online CPU Capacity */\n\tWeightage                int32          /* Variable Processor Capacity Weightage */\n\tEntCapacity              int32          /* number of processor units this partition is entitled to receive */\n\tVCpus                    PartitionValue /* Min, Max and Online Virtual CPUs */\n\tPoolID                   int32          /* Shared Pool ID of physical processors, to which this partition belongs*/\n\tActiveCpusInPool         int32          /* Count of physical CPUs in the shared processor pool, to which this partition belongs */\n\tPoolWeightage            int32          /* Pool Weightage */\n\tSharedPCpu               int32          /* Number of physical processors allocated for shared processor use */\n\tMaxPoolCap               int32          /* Maximum processor capacity of partition's pool */\n\tEntPoolCap               int32          /* Entitled processor capacity of partition's pool */\n\tMem                      PartitionValue /* Min, Max and Online Memory */\n\tMemWeightage             int32          /* Variable Memory Capacity Weightage */\n\tTotalIOMemoryEntitlement int64          /* I/O Memory Entitlement of the partition in bytes */\n\tMemPoolID                int32          /* AMS pool id of the pool the LPAR belongs to */\n\tHyperPgSize              int64          /* Hypervisor page size in KB*/\n\tExpMem                   PartitionValue /* Min, Max and Online Expanded Memory */\n\tTargetMemExpFactor       int64          /* Target Memory Expansion Factor scaled by 100 */\n\tTargetMemExpSize         int64          /* Expanded Memory Size in MB */\n\tSubProcessorMode         int32          /* Split core mode, its value can be 0,1,2 or 4. 0 for unsupported, 1 for capable but not enabled, 2 or 4 for enabled*/\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_lvm.go",
    "content": "package perfstat\n\ntype LogicalVolume struct {\n\tName                   string /* logical volume name */\n\tVGName                 string /* volume group name  */\n\tOpenClose              int64  /* LVM_QLVOPEN, etc. (see lvm.h) */\n\tState                  int64  /* LVM_UNDEF, etc. (see lvm.h) */\n\tMirrorPolicy           int64  /* LVM_PARALLEL, etc. (see lvm.h) */\n\tMirrorWriteConsistency int64  /* LVM_CONSIST, etc. (see lvm.h) */\n\tWriteVerify            int64  /* LVM_VERIFY, etc. (see lvm.h) */\n\tPPsize                 int64  /* physical partition size in MB */\n\tLogicalPartitions      int64  /* total number of logical paritions configured for this logical volume */\n\tMirrors                int32  /* number of physical mirrors for each logical partition */\n\tIOCnt                  int64  /* Number of read and write requests */\n\tKBReads                int64  /* Number of Kilobytes read */\n\tKBWrites               int64  /* Number of Kilobytes written */\n\tVersion                int64  /* version number (1, 2, etc.,) */\n}\n\ntype VolumeGroup struct {\n\tName                 string /* volume group name */\n\tTotalDisks           int64  /* number of physical volumes in the volume group */\n\tActiveDisks          int64  /* number of active physical volumes in the volume group */\n\tTotalLogicalVolumes  int64  /* number of logical volumes in the volume group */\n\tOpenedLogicalVolumes int64  /* number of logical volumes opened in the volume group */\n\tIOCnt                int64  /* Number of read and write requests */\n\tKBReads              int64  /* Number of Kilobytes read */\n\tKBWrites             int64  /* Number of Kilobytes written */\n\tVersion              int64  /* version number (1, 2, etc.,) */\n\tVariedState          int    /* Indicates volume group available or not */\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_memory.go",
    "content": "package perfstat\n\ntype MemoryTotal struct {\n\tVirtualTotal          int64 /* total virtual memory (in 4KB pages) */\n\tRealTotal             int64 /* total real memory (in 4KB pages) */\n\tRealFree              int64 /* free real memory (in 4KB pages) */\n\tRealPinned            int64 /* real memory which is pinned (in 4KB pages) */\n\tRealInUse             int64 /* real memory which is in use (in 4KB pages) */\n\tBadPages              int64 /* number of bad pages */\n\tPageFaults            int64 /* number of page faults */\n\tPageIn                int64 /* number of pages paged in */\n\tPageOut               int64 /* number of pages paged out */\n\tPgSpIn                int64 /* number of page ins from paging space */\n\tPgSpOut               int64 /* number of page outs from paging space */\n\tScans                 int64 /* number of page scans by clock */\n\tCycles                int64 /* number of page replacement cycles */\n\tPgSteals              int64 /* number of page steals */\n\tNumPerm               int64 /* number of frames used for files (in 4KB pages) */\n\tPgSpTotal             int64 /* total paging space (in 4KB pages) */\n\tPgSpFree              int64 /* free paging space (in 4KB pages) */\n\tPgSpRsvd              int64 /* reserved paging space (in 4KB pages) */\n\tRealSystem            int64 /* real memory used by system segments (in 4KB pages). */\n\tRealUser              int64 /* real memory used by non-system segments (in 4KB pages). */\n\tRealProcess           int64 /* real memory used by process segments (in 4KB pages). */\n\tVirtualActive         int64 /* Active virtual pages. Virtual pages are considered active if they have been accessed */\n\tIOME                  int64 /* I/O memory entitlement of the partition in bytes*/\n\tIOMU                  int64 /* I/O memory entitlement of the partition in use in bytes*/\n\tIOHWM                 int64 /* High water mark of I/O memory entitlement used in bytes*/\n\tPMem                  int64 /* Amount of physical mmeory currently backing partition's logical memory in bytes*/\n\tCompressedTotal       int64 /* Total numbers of pages in compressed pool (in 4KB pages) */\n\tCompressedWSegPg      int64 /* Number of compressed working storage pages */\n\tCPgIn                 int64 /* number of page ins to compressed pool */\n\tCPgOut                int64 /* number of page outs from compressed pool */\n\tTrueSize              int64 /* True Memory Size in 4KB pages */\n\tExpandedMemory        int64 /* Expanded Memory Size in 4KB pages */\n\tCompressedWSegSize    int64 /* Total size of the compressed working storage pages in the pool */\n\tTargetCPoolSize       int64 /* Target Compressed Pool Size in bytes */\n\tMaxCPoolSize          int64 /* Max Size of Compressed Pool in bytes */\n\tMinUCPoolSize         int64 /* Min Size of Uncompressed Pool in bytes */\n\tCPoolSize             int64 /* Compressed Pool size in bytes */\n\tUCPoolSize            int64 /* Uncompressed Pool size in bytes */\n\tCPoolInUse            int64 /* Compressed Pool Used in bytes */\n\tUCPoolInUse           int64 /* Uncompressed Pool Used in bytes */\n\tVersion               int64 /* version number (1, 2, etc.,) */\n\tRealAvailable         int64 /* number of pages (in 4KB pages) of memory available without paging out working segments */\n\tBytesCoalesced        int64 /* The number of bytes of the calling partition.s logical real memory  coalesced because they contained duplicated data */\n\tBytesCoalescedMemPool int64 /* number of bytes of logical real memory coalesced because they contained duplicated data in the calling partition.s memory */\n}\n\ntype MemoryPage struct {\n\tPSize           int64 /* page size in bytes */\n\tRealTotal       int64 /* number of real memory frames of this page size */\n\tRealFree        int64 /* number of pages on free list */\n\tRealPinned      int64 /* number of pages pinned */\n\tRealInUse       int64 /* number of pages in use */\n\tPgExct          int64 /* number of page faults  */\n\tPgIns           int64 /* number of pages paged in */\n\tPgOuts          int64 /* number of pages paged out */\n\tPgSpIns         int64 /* number of page ins from paging space */\n\tPgSpOuts        int64 /* number of page outs from paging space */\n\tScans           int64 /* number of page scans by clock */\n\tCycles          int64 /* number of page replacement cycles */\n\tPgSteals        int64 /* number of page steals */\n\tNumPerm         int64 /* number of frames used for files */\n\tNumPgSp         int64 /* number of pages with allocated paging space */\n\tRealSystem      int64 /* number of pages used by system segments. */\n\tRealUser        int64 /* number of pages used by non-system segments. */\n\tRealProcess     int64 /* number of pages used by process segments. */\n\tVirtActive      int64 /* Active virtual pages. */\n\tComprsdTotal    int64 /* Number of pages of this size compressed */\n\tComprsdWsegPgs  int64 /* Number of compressed working storage pages */\n\tCPgIns          int64 /* number of page ins of this page size to compressed pool */\n\tCPgOuts         int64 /* number of page outs of this page size from compressed pool */\n\tCPoolInUse      int64 /* Compressed Size of this page size in Compressed Pool */\n\tUCPoolSize      int64 /* Uncompressed Pool size in bytes of this page size */\n\tComprsdWsegSize int64 /* Total size of the compressed working storage pages in the pool */\n\tVersion         int64 /* version number (1, 2, etc.,) */\n\tRealAvail       int64 /* number of pages (in 4KB pages) of memory available without paging out working segments */\n}\n\n// paging space types\nconst (\n\tLV_PAGING      = 1\n\tNFS_PAGING     = 2\n\tUNKNOWN_PAGING = 3\n)\n\ntype PagingSpace struct {\n\tName      string /* Paging space name */\n\tType      uint8  /* type of paging device (LV_PAGING or NFS_PAGING) */\n\tVGName    string /* volume group name */\n\tHostname  string /* host name of paging server */\n\tFilename  string /* swap file name on server */\n\tLPSize    int64  /* size in number of logical partitions  */\n\tMBSize    int64  /* size in megabytes  */\n\tMBUsed    int64  /* portion used in megabytes  */\n\tIOPending int64  /* number of pending I/O */\n\tActive    uint8  /* indicates if active (1 if so, 0 if not) */\n\tAutomatic uint8  /* indicates if automatic (1 if so, 0 if not) */\n\tVersion   int64  /* version number (1, 2, etc.,) */\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_network.go",
    "content": "package perfstat\n\n// Network Interface types\nconst (\n\tIFT_OTHER       = 0x1\n\tIFT_1822        = 0x2 /* old-style arpanet imp */\n\tIFT_HDH1822     = 0x3 /* HDH arpanet imp */\n\tIFT_X25DDN      = 0x4 /* x25 to imp */\n\tIFT_X25         = 0x5 /* PDN X25 interface (RFC877) */\n\tIFT_ETHER       = 0x6 /* Ethernet CSMACD */\n\tIFT_ISO88023    = 0x7 /* CMSA CD */\n\tIFT_ISO88024    = 0x8 /* Token Bus */\n\tIFT_ISO88025    = 0x9 /* Token Ring */\n\tIFT_ISO88026    = 0xa /* MAN */\n\tIFT_STARLAN     = 0xb\n\tIFT_P10         = 0xc /* Proteon 10MBit ring */\n\tIFT_P80         = 0xd /* Proteon 10MBit ring */\n\tIFT_HY          = 0xe /* Hyperchannel */\n\tIFT_FDDI        = 0xf\n\tIFT_LAPB        = 0x10\n\tIFT_SDLC        = 0x11\n\tIFT_T1          = 0x12\n\tIFT_CEPT        = 0x13 /* E1 - european T1 */\n\tIFT_ISDNBASIC   = 0x14\n\tIFT_ISDNPRIMARY = 0x15\n\tIFT_PTPSERIAL   = 0x16 /* Proprietary PTP serial */\n\tIFT_PPP         = 0x17 /* RFC 1331 */\n\tIFT_LOOP        = 0x18 /* loopback */\n\tIFT_EON         = 0x19 /* ISO over IP */\n\tIFT_XETHER      = 0x1a /* obsolete 3MB experimental ethernet */\n\tIFT_NSIP        = 0x1b /* XNS over IP */\n\tIFT_SLIP        = 0x1c /* IP over generic TTY */\n\tIFT_ULTRA       = 0x1d /* Ultra Technologies */\n\tIFT_DS3         = 0x1e /* Generic T3 */\n\tIFT_SIP         = 0x1f /* SMDS */\n\tIFT_FRELAY      = 0x20 /* Frame Relay DTE only */\n\tIFT_RS232       = 0x21\n\tIFT_PARA        = 0x22 /* parallel-port */\n\tIFT_ARCNET      = 0x23\n\tIFT_ARCNETPLUS  = 0x24\n\tIFT_ATM         = 0x25 /* ATM cells */\n\tIFT_MIOX25      = 0x26\n\tIFT_SONET       = 0x27 /* SONET or SDH */\n\tIFT_X25PLE      = 0x28\n\tIFT_ISO88022LLC = 0x29\n\tIFT_LOCALTALK   = 0x2a\n\tIFT_SMDSDXI     = 0x2b\n\tIFT_FRELAYDCE   = 0x2c /* Frame Relay DCE */\n\tIFT_V35         = 0x2d\n\tIFT_HSSI        = 0x2e\n\tIFT_HIPPI       = 0x2f\n\tIFT_MODEM       = 0x30 /* Generic Modem */\n\tIFT_AAL5        = 0x31 /* AAL5 over ATM */\n\tIFT_SONETPATH   = 0x32\n\tIFT_SONETVT     = 0x33\n\tIFT_SMDSICIP    = 0x34 /* SMDS InterCarrier Interface */\n\tIFT_PROPVIRTUAL = 0x35 /* Proprietary Virtual/internal */\n\tIFT_PROPMUX     = 0x36 /* Proprietary Multiplexing */\n\tIFT_VIPA        = 0x37 /* Virtual Interface */\n\tIFT_SN          = 0x38 /* Federation Switch */\n\tIFT_SP          = 0x39 /* SP switch */\n\tIFT_FCS         = 0x3a /* IP over Fiber Channel */\n\tIFT_TUNNEL      = 0x3b\n\tIFT_GIFTUNNEL   = 0x3c /* IPv4 over IPv6 tunnel */\n\tIFT_HF          = 0x3d /* Support for PERCS HFI*/\n\tIFT_CLUSTER     = 0x3e /* cluster pseudo network interface */\n\tIFT_FB          = 0xc7 /* IP over Infiniband. Number by IANA */\n)\n\ntype NetIfaceTotal struct {\n\tNumber     int32 /* number of network interfaces  */\n\tIPackets   int64 /* number of packets received on interface */\n\tIBytes     int64 /* number of bytes received on interface */\n\tIErrors    int64 /* number of input errors on interface */\n\tOPackets   int64 /* number of packets sent on interface */\n\tOBytes     int64 /* number of bytes sent on interface */\n\tOErrors    int64 /* number of output errors on interface */\n\tCollisions int64 /* number of collisions on csma interface */\n\tXmitDrops  int64 /* number of packets not transmitted */\n\tVersion    int64 /* version number (1, 2, etc.,) */\n}\n\ntype NetIface struct {\n\tName        string /* name of the interface */\n\tDescription string /* interface description (from ODM, similar to lscfg output) */\n\tType        uint8  /* ethernet, tokenring, etc. interpretation can be done using /usr/include/net/if_types.h */\n\tMTU         int64  /* network frame size */\n\tIPackets    int64  /* number of packets received on interface */\n\tIBytes      int64  /* number of bytes received on interface */\n\tIErrors     int64  /* number of input errors on interface */\n\tOPackets    int64  /* number of packets sent on interface */\n\tOBytes      int64  /* number of bytes sent on interface */\n\tOErrors     int64  /* number of output errors on interface */\n\tCollisions  int64  /* number of collisions on csma interface */\n\tBitrate     int64  /* adapter rating in bit per second */\n\tXmitDrops   int64  /* number of packets not transmitted */\n\tVersion     int64  /* version number (1, 2, etc.,) */\n\tIfIqDrops   int64  /* Dropped on input, this interface */\n\tIfArpDrops  int64  /* Dropped because no arp response */\n}\n\ntype NetBuffer struct {\n\tName          string /* size in ascii, always power of 2 (ex: \"32\", \"64\", \"128\") */\n\tInUse         int64  /* number of buffer currently allocated */\n\tCalls         int64  /* number of buffer allocations since last reset */\n\tDelayed       int64  /* number of delayed allocations */\n\tFree          int64  /* number of free calls */\n\tFailed        int64  /* number of failed allocations */\n\tHighWatermark int64  /* high threshold for number of buffer allocated */\n\tFreed         int64  /* number of buffers freed */\n\tVersion       int64  /* version number (1, 2, etc.,) */\n}\n\n// Network adapter types\nconst (\n\tNET_PHY  = 0 /* physical device */\n\tNET_SEA  = 1 /* shared ethernet adapter */\n\tNET_VIR  = 2 /* virtual device */\n\tNET_HEA  = 3 /* host ethernet adapter */\n\tNET_EC   = 4 /* etherchannel */\n\tNET_VLAN = 5 /* vlan pseudo device */\n)\n\ntype NetAdapter struct {\n\tVersion                    int64  /* version number (1,2, etc) */\n\tName                       string /* name of the adapter */\n\tTxPackets                  int64  /* Transmit Packets on interface */\n\tTxBytes                    int64  /* Transmit Bytes on interface */\n\tTxInterrupts               int64  /* Transfer Interrupts */\n\tTxErrors                   int64  /* Transmit Errors */\n\tTxPacketsDropped           int64  /* Packets Dropped at the time of Data Transmission */\n\tTxQueueSize                int64  /* Maximum Packets on Software Transmit Queue */\n\tTxQueueLen                 int64  /* Transmission Queue Length */\n\tTxQueueOverflow            int64  /* Transmission Queue Overflow */\n\tTxBroadcastPackets         int64  /* Number of Broadcast Packets Transmitted */\n\tTxMulticastPackets         int64  /* Number of Multicast packets Transmitted */\n\tTxCarrierSense             int64  /* Lost Carrier Sense signal count */\n\tTxDMAUnderrun              int64  /* Count of DMA Under-runs for Transmission */\n\tTxLostCTSErrors            int64  /* The number of unsuccessful transmissions due to the loss of the Clear-to-Send signal error */\n\tTxMaxCollisionErrors       int64  /* Maximum Collision Errors at Transmission */\n\tTxLateCollisionErrors      int64  /* Late Collision Errors at Transmission */\n\tTxDeferred                 int64  /* The number of packets deferred for Transmission. */\n\tTxTimeoutErrors            int64  /* Time Out Errors for Transmission */\n\tTxSingleCollisionCount     int64  /* Count of Single Collision error at Transmission */\n\tTxMultipleCollisionCount   int64  /* Count of Multiple Collision error at Transmission */\n\tRxPackets                  int64  /* Receive Packets on interface */\n\tRxBytes                    int64  /* Receive Bytes on interface */\n\tRxInterrupts               int64  /* Receive Interrupts */\n\tRxErrors                   int64  /* Input errors on interface */\n\tRxPacketsDropped           int64  /* The number of packets accepted by the device driver for transmission which were not (for any reason) given to the device. */\n\tRxBadPackets               int64  /* Count of Bad Packets Received. */\n\tRxMulticastPackets         int64  /* Number of MultiCast Packets Received */\n\tRxBroadcastPackets         int64  /* Number of Broadcast Packets Received */\n\tRxCRCErrors                int64  /* Count of Packets Received with CRC errors  */\n\tRxDMAOverrun               int64  /* Count of DMA over-runs for Data Receival. */\n\tRxAlignmentErrors          int64  /* Packets Received with Alignment Error  */\n\tRxNoResourceErrors         int64  /* Packets Received with No Resource Errors */\n\tRxCollisionErrors          int64  /* Packets Received with Collision errors */\n\tRxPacketTooShortErrors     int64  /* Count of Short Packets Received. */\n\tRxPacketTooLongErrors      int64  /* Count of Too Long Packets Received. */\n\tRxPacketDiscardedByAdapter int64  /* Count of Received Packets discarded by Adapter. */\n\tAdapterType                int32  /* 0 - Physical, 1 - SEA, 2 - Virtual, 3 -HEA */\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/types_process.go",
    "content": "package perfstat\n\ntype Process struct {\n\tVersion           int64   /* version number (1, 2, etc.,) */\n\tPID               int64   /* Process ID */\n\tProcessName       string  /* Name of The Process */\n\tPriority          int32   /* Process Priority */\n\tNumThreads        int64   /* Thread Count */\n\tUID               int64   /* Owner Info */\n\tClassID           int64   /* WLM Class Name */\n\tSize              int64   /* Virtual Size of the Process in KB(Exclusive Usage, Leaving all Shared Library Text & Shared File Pages, Shared Memory, Memory Mapped) */\n\tRealMemData       int64   /* Real Memory used for Data in KB */\n\tRealMemText       int64   /* Real Memory used for Text in KB */\n\tVirtMemData       int64   /* Virtual Memory used to Data in KB */\n\tVirtMemText       int64   /* Virtual Memory used for Text in KB */\n\tSharedLibDataSize int64   /* Data Size from Shared Library in KB */\n\tHeapSize          int64   /* Heap Size in KB */\n\tRealInUse         int64   /* The Real memory in use(in KB) by the process including all kind of segments (excluding system segments). This includes Text, Data, Shared Library Text, Shared Library Data, File Pages, Shared Memory & Memory Mapped */\n\tVirtInUse         int64   /* The Virtual memory in use(in KB) by the process including all kind of segments (excluding system segments). This includes Text, Data, Shared Library Text, Shared Library Data, File Pages, Shared Memory & Memory Mapped */\n\tPinned            int64   /* Pinned Memory(in KB) for this process inclusive of all segments */\n\tPgSpInUse         int64   /* Paging Space used(in KB) inclusive of all segments */\n\tFilePages         int64   /* File Pages used(in KB) including shared pages */\n\tRealInUseMap      int64   /* Real memory used(in KB) for Shared Memory and Memory Mapped regions */\n\tVirtInUseMap      int64   /* Virtual Memory used(in KB) for Shared Memory and Memory Mapped regions */\n\tPinnedInUseMap    int64   /* Pinned memory(in KB) for Shared Memory and Memory Mapped regions */\n\tUCpuTime          float64 /* User Mode CPU time will be in percentage or milliseconds based on, whether it is filled by perfstat_process_util or perfstat_process respectively. */\n\tSCpuTime          float64 /* System Mode CPU time will be in percentage or milliseconds based on, whether it is filled by perfstat_process_util or perfstat_process respectively. */\n\tLastTimeBase      int64   /* Timebase Counter */\n\tInBytes           int64   /* Bytes Read from Disk */\n\tOutBytes          int64   /* Bytes Written to Disk */\n\tInOps             int64   /* In Operations from Disk */\n\tOutOps            int64   /* Out Operations from Disk */\n}\n\ntype Thread struct {\n\tTID          int64   /* thread identifier */\n\tPID          int64   /* process identifier */\n\tCpuID        int64   /* processor on which I'm bound */\n\tUCpuTime     float64 /* User Mode CPU time will be in percentage or milliseconds based on, whether it is filled by perfstat_thread_util or perfstat_thread respectively. */\n\tSCpuTime     float64 /* System Mode CPU time will be in percentage or milliseconds based on, whether it is filled by perfstat_thread_util or perfstat_thread respectively. */\n\tLastTimeBase int64   /* Timebase Counter */\n\tVersion      int64\n}\n"
  },
  {
    "path": "vendor/github.com/power-devops/perfstat/uptime.go",
    "content": "// +build aix\n\npackage perfstat\n\n/*\n#include \"c_helpers.h\"\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc timeSince(ts uint64) uint64 {\n\treturn uint64(time.Now().Unix()) - ts\n}\n\n// BootTime() returns the time of the last boot in UNIX seconds\nfunc BootTime() (uint64, error) {\n\tsec := C.boottime()\n\tif sec == -1 {\n\t\treturn 0, fmt.Errorf(\"Can't determine boot time\")\n\t}\n\treturn uint64(sec), nil\n}\n\n// UptimeSeconds() calculates uptime in seconds\nfunc UptimeSeconds() (uint64, error) {\n\tboot, err := BootTime()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn timeSince(boot), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/LICENSE",
    "content": "gopsutil is distributed under BSD license reproduced below.\n\nCopyright (c) 2014, WAKAYAMA Shirou\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n * 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 * Neither the name of the gopsutil authors nor the names of its contributors\n   may be used to endorse or promote products derived from this software without\n   specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n-------\ninternal/common/binary.go in the gopsutil is copied and modified from golang/encoding/binary.go.\n\n\n\nCopyright (c) 2009 The Go Authors. All 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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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."
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/common/env.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage common\n\ntype EnvKeyType string\n\n// EnvKey is a context key that can be used to set programmatically the environment\n// gopsutil relies on to perform calls against the OS.\n// Example of use:\n//\n//\tctx := context.WithValue(context.Background(), common.EnvKey, EnvMap{common.HostProcEnvKey: \"/myproc\"})\n//\tavg, err := load.AvgWithContext(ctx)\nvar EnvKey = EnvKeyType(\"env\")\n\nconst (\n\tHostProcEnvKey    EnvKeyType = \"HOST_PROC\"\n\tHostSysEnvKey     EnvKeyType = \"HOST_SYS\"\n\tHostEtcEnvKey     EnvKeyType = \"HOST_ETC\"\n\tHostVarEnvKey     EnvKeyType = \"HOST_VAR\"\n\tHostRunEnvKey     EnvKeyType = \"HOST_RUN\"\n\tHostDevEnvKey     EnvKeyType = \"HOST_DEV\"\n\tHostRootEnvKey    EnvKeyType = \"HOST_ROOT\"\n\tHostProcMountinfo EnvKeyType = \"HOST_PROC_MOUNTINFO\"\n)\n\ntype EnvMap map[EnvKeyType]string\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\n// TimesStat contains the amounts of time the CPU has spent performing different\n// kinds of work. Time units are in seconds. It is based on linux /proc/stat file.\ntype TimesStat struct {\n\tCPU       string  `json:\"cpu\"`\n\tUser      float64 `json:\"user\"`\n\tSystem    float64 `json:\"system\"`\n\tIdle      float64 `json:\"idle\"`\n\tNice      float64 `json:\"nice\"`\n\tIowait    float64 `json:\"iowait\"`\n\tIrq       float64 `json:\"irq\"`\n\tSoftirq   float64 `json:\"softirq\"`\n\tSteal     float64 `json:\"steal\"`\n\tGuest     float64 `json:\"guest\"`\n\tGuestNice float64 `json:\"guestNice\"`\n}\n\ntype InfoStat struct {\n\tCPU        int32    `json:\"cpu\"`\n\tVendorID   string   `json:\"vendorId\"`\n\tFamily     string   `json:\"family\"`\n\tModel      string   `json:\"model\"`\n\tStepping   int32    `json:\"stepping\"`\n\tPhysicalID string   `json:\"physicalId\"`\n\tCoreID     string   `json:\"coreId\"`\n\tCores      int32    `json:\"cores\"`\n\tModelName  string   `json:\"modelName\"`\n\tMhz        float64  `json:\"mhz\"`\n\tCacheSize  int32    `json:\"cacheSize\"`\n\tFlags      []string `json:\"flags\"`\n\tMicrocode  string   `json:\"microcode\"`\n}\n\ntype lastPercent struct {\n\tsync.Mutex\n\tlastCPUTimes    []TimesStat\n\tlastPerCPUTimes []TimesStat\n}\n\nvar (\n\tlastCPUPercent lastPercent\n\tinvoke         common.Invoker = common.Invoke{}\n)\n\nfunc init() {\n\tlastCPUPercent.Lock()\n\tlastCPUPercent.lastCPUTimes, _ = Times(false)\n\tlastCPUPercent.lastPerCPUTimes, _ = Times(true)\n\tlastCPUPercent.Unlock()\n}\n\n// Counts returns the number of physical or logical cores in the system\nfunc Counts(logical bool) (int, error) {\n\treturn CountsWithContext(context.Background(), logical)\n}\n\nfunc (c TimesStat) String() string {\n\tv := []string{\n\t\t`\"cpu\":\"` + c.CPU + `\"`,\n\t\t`\"user\":` + strconv.FormatFloat(c.User, 'f', 1, 64),\n\t\t`\"system\":` + strconv.FormatFloat(c.System, 'f', 1, 64),\n\t\t`\"idle\":` + strconv.FormatFloat(c.Idle, 'f', 1, 64),\n\t\t`\"nice\":` + strconv.FormatFloat(c.Nice, 'f', 1, 64),\n\t\t`\"iowait\":` + strconv.FormatFloat(c.Iowait, 'f', 1, 64),\n\t\t`\"irq\":` + strconv.FormatFloat(c.Irq, 'f', 1, 64),\n\t\t`\"softirq\":` + strconv.FormatFloat(c.Softirq, 'f', 1, 64),\n\t\t`\"steal\":` + strconv.FormatFloat(c.Steal, 'f', 1, 64),\n\t\t`\"guest\":` + strconv.FormatFloat(c.Guest, 'f', 1, 64),\n\t\t`\"guestNice\":` + strconv.FormatFloat(c.GuestNice, 'f', 1, 64),\n\t}\n\n\treturn `{` + strings.Join(v, \",\") + `}`\n}\n\n// Deprecated: Total returns the total number of seconds in a CPUTimesStat\n// Please do not use this internal function.\nfunc (c TimesStat) Total() float64 {\n\ttotal := c.User + c.System + c.Idle + c.Nice + c.Iowait + c.Irq +\n\t\tc.Softirq + c.Steal + c.Guest + c.GuestNice\n\n\treturn total\n}\n\nfunc (c InfoStat) String() string {\n\ts, _ := json.Marshal(c)\n\treturn string(s)\n}\n\nfunc getAllBusy(t TimesStat) (float64, float64) {\n\ttot := t.Total()\n\tif runtime.GOOS == \"linux\" {\n\t\ttot -= t.Guest     // Linux 2.6.24+\n\t\ttot -= t.GuestNice // Linux 3.2.0+\n\t}\n\n\tbusy := tot - t.Idle - t.Iowait\n\n\treturn tot, busy\n}\n\nfunc calculateBusy(t1, t2 TimesStat) float64 {\n\tt1All, t1Busy := getAllBusy(t1)\n\tt2All, t2Busy := getAllBusy(t2)\n\n\tif t2Busy <= t1Busy {\n\t\treturn 0\n\t}\n\tif t2All <= t1All {\n\t\treturn 100\n\t}\n\treturn math.Min(100, math.Max(0, (t2Busy-t1Busy)/(t2All-t1All)*100))\n}\n\nfunc calculateAllBusy(t1, t2 []TimesStat) ([]float64, error) {\n\t// Make sure the CPU measurements have the same length.\n\tif len(t1) != len(t2) {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"received two CPU counts: %d != %d\",\n\t\t\tlen(t1), len(t2),\n\t\t)\n\t}\n\n\tret := make([]float64, len(t1))\n\tfor i, t := range t2 {\n\t\tret[i] = calculateBusy(t1[i], t)\n\t}\n\treturn ret, nil\n}\n\n// Percent calculates the percentage of cpu used either per CPU or combined.\n// If an interval of 0 is given it will compare the current cpu times against the last call.\n// Returns one value per cpu, or a single value if percpu is set to false.\nfunc Percent(interval time.Duration, percpu bool) ([]float64, error) {\n\treturn PercentWithContext(context.Background(), interval, percpu)\n}\n\nfunc PercentWithContext(ctx context.Context, interval time.Duration, percpu bool) ([]float64, error) {\n\tif interval <= 0 {\n\t\treturn percentUsedFromLastCallWithContext(ctx, percpu)\n\t}\n\n\t// Get CPU usage at the start of the interval.\n\tcpuTimes1, err := TimesWithContext(ctx, percpu)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := common.Sleep(ctx, interval); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// And at the end of the interval.\n\tcpuTimes2, err := TimesWithContext(ctx, percpu)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn calculateAllBusy(cpuTimes1, cpuTimes2)\n}\n\nfunc percentUsedFromLastCall(percpu bool) ([]float64, error) {\n\treturn percentUsedFromLastCallWithContext(context.Background(), percpu)\n}\n\nfunc percentUsedFromLastCallWithContext(ctx context.Context, percpu bool) ([]float64, error) {\n\tcpuTimes, err := TimesWithContext(ctx, percpu)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlastCPUPercent.Lock()\n\tdefer lastCPUPercent.Unlock()\n\tvar lastTimes []TimesStat\n\tif percpu {\n\t\tlastTimes = lastCPUPercent.lastPerCPUTimes\n\t\tlastCPUPercent.lastPerCPUTimes = cpuTimes\n\t} else {\n\t\tlastTimes = lastCPUPercent.lastCPUTimes\n\t\tlastCPUPercent.lastCPUTimes = cpuTimes\n\t}\n\n\tif lastTimes == nil {\n\t\treturn nil, errors.New(\"error getting times for cpu percent. lastTimes was nil\")\n\t}\n\treturn calculateAllBusy(lastTimes, cpuTimes)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_aix.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix\n\npackage cpu\n\nimport (\n\t\"context\"\n)\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_aix_cgo.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix && cgo\n\npackage cpu\n\nimport (\n\t\"context\"\n\n\t\"github.com/power-devops/perfstat\"\n)\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tvar ret []TimesStat\n\tif percpu {\n\t\tcpus, err := perfstat.CpuStat()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, c := range cpus {\n\t\t\tct := &TimesStat{\n\t\t\t\tCPU:    c.Name,\n\t\t\t\tIdle:   float64(c.Idle),\n\t\t\t\tUser:   float64(c.User),\n\t\t\t\tSystem: float64(c.Sys),\n\t\t\t\tIowait: float64(c.Wait),\n\t\t\t}\n\t\t\tret = append(ret, *ct)\n\t\t}\n\t} else {\n\t\tc, err := perfstat.CpuUtilTotalStat()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tct := &TimesStat{\n\t\t\tCPU:    \"cpu-total\",\n\t\t\tIdle:   float64(c.IdlePct),\n\t\t\tUser:   float64(c.UserPct),\n\t\t\tSystem: float64(c.KernPct),\n\t\t\tIowait: float64(c.WaitPct),\n\t\t}\n\t\tret = append(ret, *ct)\n\t}\n\treturn ret, nil\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tc, err := perfstat.CpuTotalStat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tinfo := InfoStat{\n\t\tCPU:   0,\n\t\tMhz:   float64(c.ProcessorHz / 1000000),\n\t\tCores: int32(c.NCpusCfg),\n\t}\n\tresult := []InfoStat{info}\n\treturn result, nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\tc, err := perfstat.CpuTotalStat()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn c.NCpusCfg, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_aix_nocgo.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix && !cgo\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tvar ret []TimesStat\n\tif percpu {\n\t\tper_out, err := invoke.CommandWithContext(ctx, \"sar\", \"-u\", \"-P\", \"ALL\", \"10\", \"1\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlines := strings.Split(string(per_out), \"\\n\")\n\t\tif len(lines) < 6 {\n\t\t\treturn []TimesStat{}, common.ErrNotImplementedError\n\t\t}\n\n\t\thp := strings.Fields(lines[5]) // headers\n\t\tfor l := 6; l < len(lines)-1; l++ {\n\t\t\tct := &TimesStat{}\n\t\t\tv := strings.Fields(lines[l]) // values\n\t\t\tfor i, header := range hp {\n\t\t\t\t// We're done in any of these use cases\n\t\t\t\tif i >= len(v) || v[0] == \"-\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t// Position variable for v\n\t\t\t\tpos := i\n\t\t\t\t// There is a missing field at the beginning of all but the first line\n\t\t\t\t// so adjust the position\n\t\t\t\tif l > 6 {\n\t\t\t\t\tpos = i - 1\n\t\t\t\t}\n\t\t\t\t// We don't want invalid positions\n\t\t\t\tif pos < 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif t, err := strconv.ParseFloat(v[pos], 64); err == nil {\n\t\t\t\t\tswitch header {\n\t\t\t\t\tcase `cpu`:\n\t\t\t\t\t\tct.CPU = strconv.FormatFloat(t, 'f', -1, 64)\n\t\t\t\t\tcase `%usr`:\n\t\t\t\t\t\tct.User = t\n\t\t\t\t\tcase `%sys`:\n\t\t\t\t\t\tct.System = t\n\t\t\t\t\tcase `%wio`:\n\t\t\t\t\t\tct.Iowait = t\n\t\t\t\t\tcase `%idle`:\n\t\t\t\t\t\tct.Idle = t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Valid CPU data, so append it\n\t\t\tret = append(ret, *ct)\n\t\t}\n\t} else {\n\t\tout, err := invoke.CommandWithContext(ctx, \"sar\", \"-u\", \"10\", \"1\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlines := strings.Split(string(out), \"\\n\")\n\t\tif len(lines) < 5 {\n\t\t\treturn []TimesStat{}, common.ErrNotImplementedError\n\t\t}\n\n\t\tct := &TimesStat{CPU: \"cpu-total\"}\n\t\th := strings.Fields(lines[len(lines)-3]) // headers\n\t\tv := strings.Fields(lines[len(lines)-2]) // values\n\t\tfor i, header := range h {\n\t\t\tif t, err := strconv.ParseFloat(v[i], 64); err == nil {\n\t\t\t\tswitch header {\n\t\t\t\tcase `%usr`:\n\t\t\t\t\tct.User = t\n\t\t\t\tcase `%sys`:\n\t\t\t\t\tct.System = t\n\t\t\t\tcase `%wio`:\n\t\t\t\t\tct.Iowait = t\n\t\t\t\tcase `%idle`:\n\t\t\t\t\tct.Idle = t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tret = append(ret, *ct)\n\t}\n\n\treturn ret, nil\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tout, err := invoke.CommandWithContext(ctx, \"prtconf\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tret := InfoStat{}\n\tfor _, line := range strings.Split(string(out), \"\\n\") {\n\t\tif strings.HasPrefix(line, \"Number Of Processors:\") {\n\t\t\tp := strings.Fields(line)\n\t\t\tif len(p) > 3 {\n\t\t\t\tif t, err := strconv.ParseUint(p[3], 10, 64); err == nil {\n\t\t\t\t\tret.Cores = int32(t)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if strings.HasPrefix(line, \"Processor Clock Speed:\") {\n\t\t\tp := strings.Fields(line)\n\t\t\tif len(p) > 4 {\n\t\t\t\tif t, err := strconv.ParseFloat(p[3], 64); err == nil {\n\t\t\t\t\tswitch strings.ToUpper(p[4]) {\n\t\t\t\t\tcase \"MHZ\":\n\t\t\t\t\t\tret.Mhz = t\n\t\t\t\t\tcase \"GHZ\":\n\t\t\t\t\t\tret.Mhz = t * 1000.0\n\t\t\t\t\tcase \"KHZ\":\n\t\t\t\t\t\tret.Mhz = t / 1000.0\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tret.Mhz = t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t} else if strings.HasPrefix(line, \"System Model:\") {\n\t\t\tp := strings.Split(string(line), \":\")\n\t\t\tif p != nil {\n\t\t\t\tret.VendorID = strings.TrimSpace(p[1])\n\t\t\t}\n\t\t} else if strings.HasPrefix(line, \"Processor Type:\") {\n\t\t\tp := strings.Split(string(line), \":\")\n\t\t\tif p != nil {\n\t\t\t\tc := strings.Split(string(p[1]), \"_\")\n\t\t\t\tif c != nil {\n\t\t\t\t\tret.Family = strings.TrimSpace(c[0])\n\t\t\t\t\tret.Model = strings.TrimSpace(c[1])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn []InfoStat{ret}, nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\tinfo, err := InfoWithContext(ctx)\n\tif err == nil {\n\t\treturn int(info[0].Cores), nil\n\t}\n\treturn 0, err\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_darwin.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/tklauser/go-sysconf\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\n// sys/resource.h\nconst (\n\tCPUser    = 0\n\tcpNice    = 1\n\tcpSys     = 2\n\tcpIntr    = 3\n\tcpIdle    = 4\n\tcpUStates = 5\n)\n\n// mach/machine.h\nconst (\n\tcpuStateUser   = 0\n\tcpuStateSystem = 1\n\tcpuStateIdle   = 2\n\tcpuStateNice   = 3\n\tcpuStateMax    = 4\n)\n\n// mach/processor_info.h\nconst (\n\tprocessorCpuLoadInfo = 2\n)\n\ntype hostCpuLoadInfoData struct {\n\tcpuTicks [cpuStateMax]uint32\n}\n\n// default value. from time.h\nvar ClocksPerSec = float64(128)\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tClocksPerSec = float64(clkTck)\n\t}\n}\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tlib, err := common.NewLibrary(common.System)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer lib.Close()\n\n\tif percpu {\n\t\treturn perCPUTimes(lib)\n\t}\n\n\treturn allCPUTimes(lib)\n}\n\n// Returns only one CPUInfoStat on FreeBSD\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tvar ret []InfoStat\n\n\tc := InfoStat{}\n\tc.ModelName, _ = unix.Sysctl(\"machdep.cpu.brand_string\")\n\tfamily, _ := unix.SysctlUint32(\"machdep.cpu.family\")\n\tc.Family = strconv.FormatUint(uint64(family), 10)\n\tmodel, _ := unix.SysctlUint32(\"machdep.cpu.model\")\n\tc.Model = strconv.FormatUint(uint64(model), 10)\n\tstepping, _ := unix.SysctlUint32(\"machdep.cpu.stepping\")\n\tc.Stepping = int32(stepping)\n\tfeatures, err := unix.Sysctl(\"machdep.cpu.features\")\n\tif err == nil {\n\t\tfor _, v := range strings.Fields(features) {\n\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t}\n\t}\n\tleaf7Features, err := unix.Sysctl(\"machdep.cpu.leaf7_features\")\n\tif err == nil {\n\t\tfor _, v := range strings.Fields(leaf7Features) {\n\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t}\n\t}\n\textfeatures, err := unix.Sysctl(\"machdep.cpu.extfeatures\")\n\tif err == nil {\n\t\tfor _, v := range strings.Fields(extfeatures) {\n\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t}\n\t}\n\tcores, _ := unix.SysctlUint32(\"machdep.cpu.core_count\")\n\tc.Cores = int32(cores)\n\tcacheSize, _ := unix.SysctlUint32(\"machdep.cpu.cache.size\")\n\tc.CacheSize = int32(cacheSize)\n\tc.VendorID, _ = unix.Sysctl(\"machdep.cpu.vendor\")\n\n\tv, err := getFrequency()\n\tif err == nil {\n\t\tc.Mhz = v\n\t}\n\n\treturn append(ret, c), nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\tvar cpuArgument string\n\tif logical {\n\t\tcpuArgument = \"hw.logicalcpu\"\n\t} else {\n\t\tcpuArgument = \"hw.physicalcpu\"\n\t}\n\n\tcount, err := unix.SysctlUint32(cpuArgument)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn int(count), nil\n}\n\nfunc perCPUTimes(machLib *common.Library) ([]TimesStat, error) {\n\tmachHostSelf := common.GetFunc[common.MachHostSelfFunc](machLib, common.MachHostSelfSym)\n\tmachTaskSelf := common.GetFunc[common.MachTaskSelfFunc](machLib, common.MachTaskSelfSym)\n\thostProcessorInfo := common.GetFunc[common.HostProcessorInfoFunc](machLib, common.HostProcessorInfoSym)\n\tvmDeallocate := common.GetFunc[common.VMDeallocateFunc](machLib, common.VMDeallocateSym)\n\n\tvar count, ncpu uint32\n\tvar cpuload *hostCpuLoadInfoData\n\n\tstatus := hostProcessorInfo(machHostSelf(), processorCpuLoadInfo, &ncpu, uintptr(unsafe.Pointer(&cpuload)), &count)\n\n\tif status != common.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"host_processor_info error=%d\", status)\n\t}\n\n\tdefer vmDeallocate(machTaskSelf(), uintptr(unsafe.Pointer(cpuload)), uintptr(ncpu))\n\n\tret := []TimesStat{}\n\tloads := unsafe.Slice(cpuload, ncpu)\n\n\tfor i := 0; i < int(ncpu); i++ {\n\t\tc := TimesStat{\n\t\t\tCPU:    fmt.Sprintf(\"cpu%d\", i),\n\t\t\tUser:   float64(loads[i].cpuTicks[cpuStateUser]) / ClocksPerSec,\n\t\t\tSystem: float64(loads[i].cpuTicks[cpuStateSystem]) / ClocksPerSec,\n\t\t\tNice:   float64(loads[i].cpuTicks[cpuStateNice]) / ClocksPerSec,\n\t\t\tIdle:   float64(loads[i].cpuTicks[cpuStateIdle]) / ClocksPerSec,\n\t\t}\n\n\t\tret = append(ret, c)\n\t}\n\n\treturn ret, nil\n}\n\nfunc allCPUTimes(machLib *common.Library) ([]TimesStat, error) {\n\tmachHostSelf := common.GetFunc[common.MachHostSelfFunc](machLib, common.MachHostSelfSym)\n\thostStatistics := common.GetFunc[common.HostStatisticsFunc](machLib, common.HostStatisticsSym)\n\n\tvar cpuload hostCpuLoadInfoData\n\tcount := uint32(cpuStateMax)\n\n\tstatus := hostStatistics(machHostSelf(), common.HOST_CPU_LOAD_INFO,\n\t\tuintptr(unsafe.Pointer(&cpuload)), &count)\n\n\tif status != common.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"host_statistics error=%d\", status)\n\t}\n\n\tc := TimesStat{\n\t\tCPU:    \"cpu-total\",\n\t\tUser:   float64(cpuload.cpuTicks[cpuStateUser]) / ClocksPerSec,\n\t\tSystem: float64(cpuload.cpuTicks[cpuStateSystem]) / ClocksPerSec,\n\t\tNice:   float64(cpuload.cpuTicks[cpuStateNice]) / ClocksPerSec,\n\t\tIdle:   float64(cpuload.cpuTicks[cpuStateIdle]) / ClocksPerSec,\n\t}\n\n\treturn []TimesStat{c}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_darwin_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin && arm64\n\npackage cpu\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\n// https://github.com/shoenig/go-m1cpu/blob/v0.1.6/cpu.go\nfunc getFrequency() (float64, error) {\n\tioKit, err := common.NewLibrary(common.IOKit)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer ioKit.Close()\n\n\tcoreFoundation, err := common.NewLibrary(common.CoreFoundation)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer coreFoundation.Close()\n\n\tioServiceMatching := common.GetFunc[common.IOServiceMatchingFunc](ioKit, common.IOServiceMatchingSym)\n\tioServiceGetMatchingServices := common.GetFunc[common.IOServiceGetMatchingServicesFunc](ioKit, common.IOServiceGetMatchingServicesSym)\n\tioIteratorNext := common.GetFunc[common.IOIteratorNextFunc](ioKit, common.IOIteratorNextSym)\n\tioRegistryEntryGetName := common.GetFunc[common.IORegistryEntryGetNameFunc](ioKit, common.IORegistryEntryGetNameSym)\n\tioRegistryEntryCreateCFProperty := common.GetFunc[common.IORegistryEntryCreateCFPropertyFunc](ioKit, common.IORegistryEntryCreateCFPropertySym)\n\tioObjectRelease := common.GetFunc[common.IOObjectReleaseFunc](ioKit, common.IOObjectReleaseSym)\n\n\tcfStringCreateWithCString := common.GetFunc[common.CFStringCreateWithCStringFunc](coreFoundation, common.CFStringCreateWithCStringSym)\n\tcfDataGetLength := common.GetFunc[common.CFDataGetLengthFunc](coreFoundation, common.CFDataGetLengthSym)\n\tcfDataGetBytePtr := common.GetFunc[common.CFDataGetBytePtrFunc](coreFoundation, common.CFDataGetBytePtrSym)\n\tcfRelease := common.GetFunc[common.CFReleaseFunc](coreFoundation, common.CFReleaseSym)\n\n\tmatching := ioServiceMatching(\"AppleARMIODevice\")\n\n\tvar iterator uint32\n\tif status := ioServiceGetMatchingServices(common.KIOMainPortDefault, uintptr(matching), &iterator); status != common.KERN_SUCCESS {\n\t\treturn 0.0, fmt.Errorf(\"IOServiceGetMatchingServices error=%d\", status)\n\t}\n\tdefer ioObjectRelease(iterator)\n\n\tpCorekey := cfStringCreateWithCString(common.KCFAllocatorDefault, \"voltage-states5-sram\", common.KCFStringEncodingUTF8)\n\tdefer cfRelease(uintptr(pCorekey))\n\n\tvar pCoreHz uint32\n\tfor {\n\t\tservice := ioIteratorNext(iterator)\n\t\tif !(service > 0) {\n\t\t\tbreak\n\t\t}\n\n\t\tbuf := common.NewCStr(512)\n\t\tioRegistryEntryGetName(service, buf)\n\n\t\tif buf.GoString() == \"pmgr\" {\n\t\t\tpCoreRef := ioRegistryEntryCreateCFProperty(service, uintptr(pCorekey), common.KCFAllocatorDefault, common.KNilOptions)\n\t\t\tlength := cfDataGetLength(uintptr(pCoreRef))\n\t\t\tdata := cfDataGetBytePtr(uintptr(pCoreRef))\n\n\t\t\t// composite uint32 from the byte array\n\t\t\tbuf := unsafe.Slice((*byte)(data), length)\n\n\t\t\t// combine the bytes into a uint32 value\n\t\t\tb := buf[length-8 : length-4]\n\t\t\tpCoreHz = binary.LittleEndian.Uint32(b)\n\t\t\tioObjectRelease(service)\n\t\t\tbreak\n\t\t}\n\n\t\tioObjectRelease(service)\n\t}\n\n\treturn float64(pCoreHz / 1_000_000), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_darwin_fallback.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin && !arm64\n\npackage cpu\n\nimport \"golang.org/x/sys/unix\"\n\nfunc getFrequency() (float64, error) {\n\t// Use the rated frequency of the CPU. This is a static value and does not\n\t// account for low power or Turbo Boost modes.\n\tcpuFrequency, err := unix.SysctlUint64(\"hw.cpufrequency\")\n\treturn float64(cpuFrequency) / 1000000.0, err\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_dragonfly.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/tklauser/go-sysconf\"\n\t\"golang.org/x/sys/unix\"\n)\n\nvar (\n\tClocksPerSec   = float64(128)\n\tcpuMatch       = regexp.MustCompile(`^CPU:`)\n\toriginMatch    = regexp.MustCompile(`Origin\\s*=\\s*\"(.+)\"\\s+Id\\s*=\\s*(.+)\\s+Stepping\\s*=\\s*(.+)`)\n\tfeaturesMatch  = regexp.MustCompile(`Features=.+<(.+)>`)\n\tfeaturesMatch2 = regexp.MustCompile(`Features2=[a-f\\dx]+<(.+)>`)\n\tcpuEnd         = regexp.MustCompile(`^Trying to mount root`)\n\tcpuTimesSize   int\n\temptyTimes     cpuTimes\n)\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tClocksPerSec = float64(clkTck)\n\t}\n}\n\nfunc timeStat(name string, t *cpuTimes) *TimesStat {\n\treturn &TimesStat{\n\t\tUser:   float64(t.User) / ClocksPerSec,\n\t\tNice:   float64(t.Nice) / ClocksPerSec,\n\t\tSystem: float64(t.Sys) / ClocksPerSec,\n\t\tIdle:   float64(t.Idle) / ClocksPerSec,\n\t\tIrq:    float64(t.Intr) / ClocksPerSec,\n\t\tCPU:    name,\n\t}\n}\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tif percpu {\n\t\tbuf, err := unix.SysctlRaw(\"kern.cp_times\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// We can't do this in init due to the conflict with cpu.init()\n\t\tif cpuTimesSize == 0 {\n\t\t\tcpuTimesSize = int(reflect.TypeOf(cpuTimes{}).Size())\n\t\t}\n\n\t\tncpus := len(buf) / cpuTimesSize\n\t\tret := make([]TimesStat, 0, ncpus)\n\t\tfor i := 0; i < ncpus; i++ {\n\t\t\ttimes := (*cpuTimes)(unsafe.Pointer(&buf[i*cpuTimesSize]))\n\t\t\tif *times == emptyTimes {\n\t\t\t\t// CPU not present\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret = append(ret, *timeStat(fmt.Sprintf(\"cpu%d\", len(ret)), times))\n\t\t}\n\t\treturn ret, nil\n\t}\n\n\tbuf, err := unix.SysctlRaw(\"kern.cp_time\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttimes := (*cpuTimes)(unsafe.Pointer(&buf[0]))\n\treturn []TimesStat{*timeStat(\"cpu-total\", times)}, nil\n}\n\n// Returns only one InfoStat on DragonflyBSD.  The information regarding core\n// count, however is accurate and it is assumed that all InfoStat attributes\n// are the same across CPUs.\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tconst dmesgBoot = \"/var/run/dmesg.boot\"\n\n\tc, err := parseDmesgBoot(dmesgBoot)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar u32 uint32\n\tif u32, err = unix.SysctlUint32(\"hw.clockrate\"); err != nil {\n\t\treturn nil, err\n\t}\n\tc.Mhz = float64(u32)\n\n\tvar num int\n\tvar buf string\n\tif buf, err = unix.Sysctl(\"hw.cpu_topology.tree\"); err != nil {\n\t\treturn nil, err\n\t}\n\tnum = strings.Count(buf, \"CHIP\")\n\tc.Cores = int32(strings.Count(string(buf), \"CORE\") / num)\n\n\tif c.ModelName, err = unix.Sysctl(\"hw.model\"); err != nil {\n\t\treturn nil, err\n\t}\n\n\tret := make([]InfoStat, num)\n\tfor i := 0; i < num; i++ {\n\t\tret[i] = c\n\t}\n\n\treturn ret, nil\n}\n\nfunc parseDmesgBoot(fileName string) (InfoStat, error) {\n\tc := InfoStat{}\n\tlines, _ := common.ReadLines(fileName)\n\tfor _, line := range lines {\n\t\tif matches := cpuEnd.FindStringSubmatch(line); matches != nil {\n\t\t\tbreak\n\t\t} else if matches := originMatch.FindStringSubmatch(line); matches != nil {\n\t\t\tc.VendorID = matches[1]\n\t\t\tt, err := strconv.ParseInt(matches[2], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn c, fmt.Errorf(\"unable to parse DragonflyBSD CPU stepping information from %q: %v\", line, err)\n\t\t\t}\n\t\t\tc.Stepping = int32(t)\n\t\t} else if matches := featuresMatch.FindStringSubmatch(line); matches != nil {\n\t\t\tfor _, v := range strings.Split(matches[1], \",\") {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if matches := featuresMatch2.FindStringSubmatch(line); matches != nil {\n\t\t\tfor _, v := range strings.Split(matches[1], \",\") {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn c, nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_dragonfly_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_fallback.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build !darwin && !linux && !freebsd && !openbsd && !netbsd && !solaris && !windows && !dragonfly && !plan9 && !aix\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"runtime\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\treturn []TimesStat{}, common.ErrNotImplementedError\n}\n\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\treturn []InfoStat{}, common.ErrNotImplementedError\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_freebsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/tklauser/go-sysconf\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nvar (\n\tClocksPerSec   = float64(128)\n\tcpuMatch       = regexp.MustCompile(`^CPU:`)\n\toriginMatch    = regexp.MustCompile(`Origin\\s*=\\s*\"(.+)\"\\s+Id\\s*=\\s*(.+)\\s+Family\\s*=\\s*(.+)\\s+Model\\s*=\\s*(.+)\\s+Stepping\\s*=\\s*(.+)`)\n\tfeaturesMatch  = regexp.MustCompile(`Features=.+<(.+)>`)\n\tfeaturesMatch2 = regexp.MustCompile(`Features2=[a-f\\dx]+<(.+)>`)\n\tcpuEnd         = regexp.MustCompile(`^Trying to mount root`)\n\tcpuCores       = regexp.MustCompile(`FreeBSD/SMP: (\\d*) package\\(s\\) x (\\d*) core\\(s\\)`)\n\tcpuTimesSize   int\n\temptyTimes     cpuTimes\n)\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tClocksPerSec = float64(clkTck)\n\t}\n}\n\nfunc timeStat(name string, t *cpuTimes) *TimesStat {\n\treturn &TimesStat{\n\t\tUser:   float64(t.User) / ClocksPerSec,\n\t\tNice:   float64(t.Nice) / ClocksPerSec,\n\t\tSystem: float64(t.Sys) / ClocksPerSec,\n\t\tIdle:   float64(t.Idle) / ClocksPerSec,\n\t\tIrq:    float64(t.Intr) / ClocksPerSec,\n\t\tCPU:    name,\n\t}\n}\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tif percpu {\n\t\tbuf, err := unix.SysctlRaw(\"kern.cp_times\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// We can't do this in init due to the conflict with cpu.init()\n\t\tif cpuTimesSize == 0 {\n\t\t\tcpuTimesSize = int(reflect.TypeOf(cpuTimes{}).Size())\n\t\t}\n\n\t\tncpus := len(buf) / cpuTimesSize\n\t\tret := make([]TimesStat, 0, ncpus)\n\t\tfor i := 0; i < ncpus; i++ {\n\t\t\ttimes := (*cpuTimes)(unsafe.Pointer(&buf[i*cpuTimesSize]))\n\t\t\tif *times == emptyTimes {\n\t\t\t\t// CPU not present\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret = append(ret, *timeStat(fmt.Sprintf(\"cpu%d\", len(ret)), times))\n\t\t}\n\t\treturn ret, nil\n\t}\n\n\tbuf, err := unix.SysctlRaw(\"kern.cp_time\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttimes := (*cpuTimes)(unsafe.Pointer(&buf[0]))\n\treturn []TimesStat{*timeStat(\"cpu-total\", times)}, nil\n}\n\n// Returns only one InfoStat on FreeBSD.  The information regarding core\n// count, however is accurate and it is assumed that all InfoStat attributes\n// are the same across CPUs.\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tconst dmesgBoot = \"/var/run/dmesg.boot\"\n\n\tc, num, err := parseDmesgBoot(dmesgBoot)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar u32 uint32\n\tif u32, err = unix.SysctlUint32(\"hw.clockrate\"); err != nil {\n\t\treturn nil, err\n\t}\n\tc.Mhz = float64(u32)\n\n\tif u32, err = unix.SysctlUint32(\"hw.ncpu\"); err != nil {\n\t\treturn nil, err\n\t}\n\tc.Cores = int32(u32)\n\n\tif c.ModelName, err = unix.Sysctl(\"hw.model\"); err != nil {\n\t\treturn nil, err\n\t}\n\n\tret := make([]InfoStat, num)\n\tfor i := 0; i < num; i++ {\n\t\tret[i] = c\n\t}\n\n\treturn ret, nil\n}\n\nfunc parseDmesgBoot(fileName string) (InfoStat, int, error) {\n\tc := InfoStat{}\n\tlines, _ := common.ReadLines(fileName)\n\tcpuNum := 1 // default cpu num is 1\n\tfor _, line := range lines {\n\t\tif matches := cpuEnd.FindStringSubmatch(line); matches != nil {\n\t\t\tbreak\n\t\t} else if matches := originMatch.FindStringSubmatch(line); matches != nil {\n\t\t\tc.VendorID = matches[1]\n\t\t\tc.Family = matches[3]\n\t\t\tc.Model = matches[4]\n\t\t\tt, err := strconv.ParseInt(matches[5], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn c, 0, fmt.Errorf(\"unable to parse FreeBSD CPU stepping information from %q: %w\", line, err)\n\t\t\t}\n\t\t\tc.Stepping = int32(t)\n\t\t} else if matches := featuresMatch.FindStringSubmatch(line); matches != nil {\n\t\t\tfor _, v := range strings.Split(matches[1], \",\") {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if matches := featuresMatch2.FindStringSubmatch(line); matches != nil {\n\t\t\tfor _, v := range strings.Split(matches[1], \",\") {\n\t\t\t\tc.Flags = append(c.Flags, strings.ToLower(v))\n\t\t\t}\n\t\t} else if matches := cpuCores.FindStringSubmatch(line); matches != nil {\n\t\t\tt, err := strconv.ParseInt(matches[1], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn c, 0, fmt.Errorf(\"unable to parse FreeBSD CPU Nums from %q: %w\", line, err)\n\t\t\t}\n\t\t\tcpuNum = int(t)\n\t\t\tt2, err := strconv.ParseInt(matches[2], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn c, 0, fmt.Errorf(\"unable to parse FreeBSD CPU cores from %q: %w\", line, err)\n\t\t\t}\n\t\t\tc.Cores = int32(t2)\n\t\t}\n\t}\n\n\treturn c, cpuNum, nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_freebsd_386.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint32\n\tNice uint32\n\tSys  uint32\n\tIntr uint32\n\tIdle uint32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_freebsd_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_freebsd_arm.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint32\n\tNice uint32\n\tSys  uint32\n\tIntr uint32\n\tIdle uint32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_freebsd_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_linux.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/tklauser/go-sysconf\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nvar ClocksPerSec = float64(100)\n\nvar armModelToModelName = map[uint64]string{\n\t0x810: \"ARM810\",\n\t0x920: \"ARM920\",\n\t0x922: \"ARM922\",\n\t0x926: \"ARM926\",\n\t0x940: \"ARM940\",\n\t0x946: \"ARM946\",\n\t0x966: \"ARM966\",\n\t0xa20: \"ARM1020\",\n\t0xa22: \"ARM1022\",\n\t0xa26: \"ARM1026\",\n\t0xb02: \"ARM11 MPCore\",\n\t0xb36: \"ARM1136\",\n\t0xb56: \"ARM1156\",\n\t0xb76: \"ARM1176\",\n\t0xc05: \"Cortex-A5\",\n\t0xc07: \"Cortex-A7\",\n\t0xc08: \"Cortex-A8\",\n\t0xc09: \"Cortex-A9\",\n\t0xc0d: \"Cortex-A17\",\n\t0xc0f: \"Cortex-A15\",\n\t0xc0e: \"Cortex-A17\",\n\t0xc14: \"Cortex-R4\",\n\t0xc15: \"Cortex-R5\",\n\t0xc17: \"Cortex-R7\",\n\t0xc18: \"Cortex-R8\",\n\t0xc20: \"Cortex-M0\",\n\t0xc21: \"Cortex-M1\",\n\t0xc23: \"Cortex-M3\",\n\t0xc24: \"Cortex-M4\",\n\t0xc27: \"Cortex-M7\",\n\t0xc60: \"Cortex-M0+\",\n\t0xd01: \"Cortex-A32\",\n\t0xd02: \"Cortex-A34\",\n\t0xd03: \"Cortex-A53\",\n\t0xd04: \"Cortex-A35\",\n\t0xd05: \"Cortex-A55\",\n\t0xd06: \"Cortex-A65\",\n\t0xd07: \"Cortex-A57\",\n\t0xd08: \"Cortex-A72\",\n\t0xd09: \"Cortex-A73\",\n\t0xd0a: \"Cortex-A75\",\n\t0xd0b: \"Cortex-A76\",\n\t0xd0c: \"Neoverse-N1\",\n\t0xd0d: \"Cortex-A77\",\n\t0xd0e: \"Cortex-A76AE\",\n\t0xd13: \"Cortex-R52\",\n\t0xd20: \"Cortex-M23\",\n\t0xd21: \"Cortex-M33\",\n\t0xd40: \"Neoverse-V1\",\n\t0xd41: \"Cortex-A78\",\n\t0xd42: \"Cortex-A78AE\",\n\t0xd43: \"Cortex-A65AE\",\n\t0xd44: \"Cortex-X1\",\n\t0xd46: \"Cortex-A510\",\n\t0xd47: \"Cortex-A710\",\n\t0xd48: \"Cortex-X2\",\n\t0xd49: \"Neoverse-N2\",\n\t0xd4a: \"Neoverse-E1\",\n\t0xd4b: \"Cortex-A78C\",\n\t0xd4c: \"Cortex-X1C\",\n\t0xd4d: \"Cortex-A715\",\n\t0xd4e: \"Cortex-X3\",\n}\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tClocksPerSec = float64(clkTck)\n\t}\n}\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tfilename := common.HostProcWithContext(ctx, \"stat\")\n\tlines := []string{}\n\tif percpu {\n\t\tstatlines, err := common.ReadLines(filename)\n\t\tif err != nil || len(statlines) < 2 {\n\t\t\treturn []TimesStat{}, nil\n\t\t}\n\t\tfor _, line := range statlines[1:] {\n\t\t\tif !strings.HasPrefix(line, \"cpu\") {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tlines = append(lines, line)\n\t\t}\n\t} else {\n\t\tlines, _ = common.ReadLinesOffsetN(filename, 0, 1)\n\t}\n\n\tret := make([]TimesStat, 0, len(lines))\n\n\tfor _, line := range lines {\n\t\tct, err := parseStatLine(line)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, *ct)\n\n\t}\n\treturn ret, nil\n}\n\nfunc sysCPUPath(ctx context.Context, cpu int32, relPath string) string {\n\treturn common.HostSysWithContext(ctx, fmt.Sprintf(\"devices/system/cpu/cpu%d\", cpu), relPath)\n}\n\nfunc finishCPUInfo(ctx context.Context, c *InfoStat) {\n\tvar lines []string\n\tvar err error\n\tvar value float64\n\n\tif len(c.CoreID) == 0 {\n\t\tlines, err = common.ReadLines(sysCPUPath(ctx, c.CPU, \"topology/core_id\"))\n\t\tif err == nil {\n\t\t\tc.CoreID = lines[0]\n\t\t}\n\t}\n\n\t// override the value of c.Mhz with cpufreq/cpuinfo_max_freq regardless\n\t// of the value from /proc/cpuinfo because we want to report the maximum\n\t// clock-speed of the CPU for c.Mhz, matching the behaviour of Windows\n\tlines, err = common.ReadLines(sysCPUPath(ctx, c.CPU, \"cpufreq/cpuinfo_max_freq\"))\n\t// if we encounter errors below such as there are no cpuinfo_max_freq file,\n\t// we just ignore. so let Mhz is 0.\n\tif err != nil || len(lines) == 0 {\n\t\treturn\n\t}\n\tvalue, err = strconv.ParseFloat(lines[0], 64)\n\tif err != nil {\n\t\treturn\n\t}\n\tc.Mhz = value / 1000.0 // value is in kHz\n\tif c.Mhz > 9999 {\n\t\tc.Mhz = c.Mhz / 1000.0 // value in Hz\n\t}\n}\n\n// CPUInfo on linux will return 1 item per physical thread.\n//\n// CPUs have three levels of counting: sockets, cores, threads.\n// Cores with HyperThreading count as having 2 threads per core.\n// Sockets often come with many physical CPU cores.\n// For example a single socket board with two cores each with HT will\n// return 4 CPUInfoStat structs on Linux and the \"Cores\" field set to 1.\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tfilename := common.HostProcWithContext(ctx, \"cpuinfo\")\n\tlines, _ := common.ReadLines(filename)\n\n\tvar ret []InfoStat\n\tvar processorName string\n\n\tc := InfoStat{CPU: -1, Cores: 1}\n\tfor _, line := range lines {\n\t\tfields := strings.Split(line, \":\")\n\t\tif len(fields) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tkey := strings.TrimSpace(fields[0])\n\t\tvalue := strings.TrimSpace(fields[1])\n\n\t\tswitch key {\n\t\tcase \"Processor\":\n\t\t\tprocessorName = value\n\t\tcase \"processor\", \"cpu number\":\n\t\t\tif c.CPU >= 0 {\n\t\t\t\tfinishCPUInfo(ctx, &c)\n\t\t\t\tret = append(ret, c)\n\t\t\t}\n\t\t\tc = InfoStat{Cores: 1, ModelName: processorName}\n\t\t\tt, err := strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.CPU = int32(t)\n\t\tcase \"vendorId\", \"vendor_id\":\n\t\t\tc.VendorID = value\n\t\t\tif strings.Contains(value, \"S390\") {\n\t\t\t\tprocessorName = \"S390\"\n\t\t\t}\n\t\tcase \"CPU implementer\":\n\t\t\tif v, err := strconv.ParseUint(value, 0, 8); err == nil {\n\t\t\t\tswitch v {\n\t\t\t\tcase 0x41:\n\t\t\t\t\tc.VendorID = \"ARM\"\n\t\t\t\tcase 0x42:\n\t\t\t\t\tc.VendorID = \"Broadcom\"\n\t\t\t\tcase 0x43:\n\t\t\t\t\tc.VendorID = \"Cavium\"\n\t\t\t\tcase 0x44:\n\t\t\t\t\tc.VendorID = \"DEC\"\n\t\t\t\tcase 0x46:\n\t\t\t\t\tc.VendorID = \"Fujitsu\"\n\t\t\t\tcase 0x48:\n\t\t\t\t\tc.VendorID = \"HiSilicon\"\n\t\t\t\tcase 0x49:\n\t\t\t\t\tc.VendorID = \"Infineon\"\n\t\t\t\tcase 0x4d:\n\t\t\t\t\tc.VendorID = \"Motorola/Freescale\"\n\t\t\t\tcase 0x4e:\n\t\t\t\t\tc.VendorID = \"NVIDIA\"\n\t\t\t\tcase 0x50:\n\t\t\t\t\tc.VendorID = \"APM\"\n\t\t\t\tcase 0x51:\n\t\t\t\t\tc.VendorID = \"Qualcomm\"\n\t\t\t\tcase 0x56:\n\t\t\t\t\tc.VendorID = \"Marvell\"\n\t\t\t\tcase 0x61:\n\t\t\t\t\tc.VendorID = \"Apple\"\n\t\t\t\tcase 0x69:\n\t\t\t\t\tc.VendorID = \"Intel\"\n\t\t\t\tcase 0xc0:\n\t\t\t\t\tc.VendorID = \"Ampere\"\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"cpu family\":\n\t\t\tc.Family = value\n\t\tcase \"model\", \"CPU part\":\n\t\t\tc.Model = value\n\t\t\t// if CPU is arm based, model name is found via model number. refer to: arch/arm64/kernel/cpuinfo.c\n\t\t\tif c.VendorID == \"ARM\" {\n\t\t\t\tif v, err := strconv.ParseUint(c.Model, 0, 16); err == nil {\n\t\t\t\t\tmodelName, exist := armModelToModelName[v]\n\t\t\t\t\tif exist {\n\t\t\t\t\t\tc.ModelName = modelName\n\t\t\t\t\t} else {\n\t\t\t\t\t\tc.ModelName = \"Undefined\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"Model Name\", \"model name\", \"cpu\":\n\t\t\tc.ModelName = value\n\t\t\tif strings.Contains(value, \"POWER\") {\n\t\t\t\tc.Model = strings.Split(value, \" \")[0]\n\t\t\t\tc.Family = \"POWER\"\n\t\t\t\tc.VendorID = \"IBM\"\n\t\t\t}\n\t\tcase \"stepping\", \"revision\", \"CPU revision\":\n\t\t\tval := value\n\n\t\t\tif key == \"revision\" {\n\t\t\t\tval = strings.Split(value, \".\")[0]\n\t\t\t}\n\n\t\t\tt, err := strconv.ParseInt(val, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.Stepping = int32(t)\n\t\tcase \"cpu MHz\", \"clock\", \"cpu MHz dynamic\":\n\t\t\t// treat this as the fallback value, thus we ignore error\n\t\t\tif t, err := strconv.ParseFloat(strings.Replace(value, \"MHz\", \"\", 1), 64); err == nil {\n\t\t\t\tc.Mhz = t\n\t\t\t}\n\t\tcase \"cache size\":\n\t\t\tt, err := strconv.ParseInt(strings.Replace(value, \" KB\", \"\", 1), 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, err\n\t\t\t}\n\t\t\tc.CacheSize = int32(t)\n\t\tcase \"physical id\":\n\t\t\tc.PhysicalID = value\n\t\tcase \"core id\":\n\t\t\tc.CoreID = value\n\t\tcase \"flags\", \"Features\":\n\t\t\tc.Flags = strings.FieldsFunc(value, func(r rune) bool {\n\t\t\t\treturn r == ',' || r == ' '\n\t\t\t})\n\t\tcase \"microcode\":\n\t\t\tc.Microcode = value\n\t\t}\n\t}\n\tif c.CPU >= 0 {\n\t\tfinishCPUInfo(ctx, &c)\n\t\tret = append(ret, c)\n\t}\n\treturn ret, nil\n}\n\nfunc parseStatLine(line string) (*TimesStat, error) {\n\tfields := strings.Fields(line)\n\n\tif len(fields) < 8 {\n\t\treturn nil, errors.New(\"stat does not contain cpu info\")\n\t}\n\n\tif !strings.HasPrefix(fields[0], \"cpu\") {\n\t\treturn nil, errors.New(\"not contain cpu\")\n\t}\n\n\tcpu := fields[0]\n\tif cpu == \"cpu\" {\n\t\tcpu = \"cpu-total\"\n\t}\n\tuser, err := strconv.ParseFloat(fields[1], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tnice, err := strconv.ParseFloat(fields[2], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsystem, err := strconv.ParseFloat(fields[3], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tidle, err := strconv.ParseFloat(fields[4], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tiowait, err := strconv.ParseFloat(fields[5], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tirq, err := strconv.ParseFloat(fields[6], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsoftirq, err := strconv.ParseFloat(fields[7], 64)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tct := &TimesStat{\n\t\tCPU:     cpu,\n\t\tUser:    user / ClocksPerSec,\n\t\tNice:    nice / ClocksPerSec,\n\t\tSystem:  system / ClocksPerSec,\n\t\tIdle:    idle / ClocksPerSec,\n\t\tIowait:  iowait / ClocksPerSec,\n\t\tIrq:     irq / ClocksPerSec,\n\t\tSoftirq: softirq / ClocksPerSec,\n\t}\n\tif len(fields) > 8 { // Linux >= 2.6.11\n\t\tsteal, err := strconv.ParseFloat(fields[8], 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tct.Steal = steal / ClocksPerSec\n\t}\n\tif len(fields) > 9 { // Linux >= 2.6.24\n\t\tguest, err := strconv.ParseFloat(fields[9], 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tct.Guest = guest / ClocksPerSec\n\t}\n\tif len(fields) > 10 { // Linux >= 3.2.0\n\t\tguestNice, err := strconv.ParseFloat(fields[10], 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tct.GuestNice = guestNice / ClocksPerSec\n\t}\n\n\treturn ct, nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\tif logical {\n\t\tret := 0\n\t\t// https://github.com/giampaolo/psutil/blob/d01a9eaa35a8aadf6c519839e987a49d8be2d891/psutil/_pslinux.py#L599\n\t\tprocCpuinfo := common.HostProcWithContext(ctx, \"cpuinfo\")\n\t\tlines, err := common.ReadLines(procCpuinfo)\n\t\tif err == nil {\n\t\t\tfor _, line := range lines {\n\t\t\t\tline = strings.ToLower(line)\n\t\t\t\tif strings.HasPrefix(line, \"processor\") {\n\t\t\t\t\t_, err = strconv.ParseInt(strings.TrimSpace(line[strings.IndexByte(line, ':')+1:]), 10, 32)\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tret++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ret == 0 {\n\t\t\tprocStat := common.HostProcWithContext(ctx, \"stat\")\n\t\t\tlines, err = common.ReadLines(procStat)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tfor _, line := range lines {\n\t\t\t\tif len(line) >= 4 && strings.HasPrefix(line, \"cpu\") && '0' <= line[3] && line[3] <= '9' { // `^cpu\\d` regexp matching\n\t\t\t\t\tret++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ret, nil\n\t}\n\t// physical cores\n\t// https://github.com/giampaolo/psutil/blob/8415355c8badc9c94418b19bdf26e622f06f0cce/psutil/_pslinux.py#L615-L628\n\tthreadSiblingsLists := make(map[string]bool)\n\t// These 2 files are the same but */core_cpus_list is newer while */thread_siblings_list is deprecated and may disappear in the future.\n\t// https://www.kernel.org/doc/Documentation/admin-guide/cputopology.rst\n\t// https://github.com/giampaolo/psutil/pull/1727#issuecomment-707624964\n\t// https://lkml.org/lkml/2019/2/26/41\n\tfor _, glob := range []string{\"devices/system/cpu/cpu[0-9]*/topology/core_cpus_list\", \"devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list\"} {\n\t\tif files, err := filepath.Glob(common.HostSysWithContext(ctx, glob)); err == nil {\n\t\t\tfor _, file := range files {\n\t\t\t\tlines, err := common.ReadLines(file)\n\t\t\t\tif err != nil || len(lines) != 1 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tthreadSiblingsLists[lines[0]] = true\n\t\t\t}\n\t\t\tret := len(threadSiblingsLists)\n\t\t\tif ret != 0 {\n\t\t\t\treturn ret, nil\n\t\t\t}\n\t\t}\n\t}\n\t// https://github.com/giampaolo/psutil/blob/122174a10b75c9beebe15f6c07dcf3afbe3b120d/psutil/_pslinux.py#L631-L652\n\tfilename := common.HostProcWithContext(ctx, \"cpuinfo\")\n\tlines, err := common.ReadLines(filename)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tmapping := make(map[int]int)\n\tcurrentInfo := make(map[string]int)\n\tfor _, line := range lines {\n\t\tline = strings.ToLower(strings.TrimSpace(line))\n\t\tif line == \"\" {\n\t\t\t// new section\n\t\t\tid, okID := currentInfo[\"physical id\"]\n\t\t\tcores, okCores := currentInfo[\"cpu cores\"]\n\t\t\tif okID && okCores {\n\t\t\t\tmapping[id] = cores\n\t\t\t}\n\t\t\tcurrentInfo = make(map[string]int)\n\t\t\tcontinue\n\t\t}\n\t\tfields := strings.Split(line, \":\")\n\t\tif len(fields) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tfields[0] = strings.TrimSpace(fields[0])\n\t\tif fields[0] == \"physical id\" || fields[0] == \"cpu cores\" {\n\t\t\tval, err := strconv.ParseInt(strings.TrimSpace(fields[1]), 10, 32)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcurrentInfo[fields[0]] = int(val)\n\t\t}\n\t}\n\tret := 0\n\tfor _, v := range mapping {\n\t\tret += v\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_netbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build netbsd\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/tklauser/go-sysconf\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nconst (\n\t// sys/sysctl.h\n\tctlKern    = 1  // \"high kernel\": proc, limits\n\tctlHw      = 6  // CTL_HW\n\tkernCpTime = 51 // KERN_CPTIME\n)\n\nvar ClocksPerSec = float64(100)\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tClocksPerSec = float64(clkTck)\n\t}\n}\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) (ret []TimesStat, err error) {\n\tif !percpu {\n\t\tmib := []int32{ctlKern, kernCpTime}\n\t\tbuf, _, err := common.CallSyscall(mib)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\ttimes := (*cpuTimes)(unsafe.Pointer(&buf[0]))\n\t\tstat := TimesStat{\n\t\t\tCPU:    \"cpu-total\",\n\t\t\tUser:   float64(times.User),\n\t\t\tNice:   float64(times.Nice),\n\t\t\tSystem: float64(times.Sys),\n\t\t\tIdle:   float64(times.Idle),\n\t\t\tIrq:    float64(times.Intr),\n\t\t}\n\t\treturn []TimesStat{stat}, nil\n\t}\n\n\tncpu, err := unix.SysctlUint32(\"hw.ncpu\")\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar i uint32\n\tfor i = 0; i < ncpu; i++ {\n\t\tmib := []int32{ctlKern, kernCpTime, int32(i)}\n\t\tbuf, _, err := common.CallSyscall(mib)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\n\t\tstats := (*cpuTimes)(unsafe.Pointer(&buf[0]))\n\t\tret = append(ret, TimesStat{\n\t\t\tCPU:    fmt.Sprintf(\"cpu%d\", i),\n\t\t\tUser:   float64(stats.User),\n\t\t\tNice:   float64(stats.Nice),\n\t\t\tSystem: float64(stats.Sys),\n\t\t\tIdle:   float64(stats.Idle),\n\t\t\tIrq:    float64(stats.Intr),\n\t\t})\n\t}\n\n\treturn ret, nil\n}\n\n// Returns only one (minimal) CPUInfoStat on NetBSD\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tvar ret []InfoStat\n\tvar err error\n\n\tc := InfoStat{}\n\n\tmhz, err := unix.Sysctl(\"machdep.dmi.processor-frequency\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t_, err = fmt.Sscanf(mhz, \"%f\", &c.Mhz)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tncpu, err := unix.SysctlUint32(\"hw.ncpuonline\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Cores = int32(ncpu)\n\n\tif c.ModelName, err = unix.Sysctl(\"machdep.dmi.processor-version\"); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn append(ret, c), nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_netbsd_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_netbsd_arm.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint32\n\tNice uint32\n\tSys  uint32\n\tIntr uint32\n\tIdle uint32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_netbsd_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_openbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/tklauser/go-sysconf\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t// sys/sched.h\n\tcpuOnline = 0x0001 // CPUSTATS_ONLINE\n\n\t// sys/sysctl.h\n\tctlKern      = 1  // \"high kernel\": proc, limits\n\tctlHw        = 6  // CTL_HW\n\tsmt          = 24 // HW_SMT\n\tkernCpTime   = 40 // KERN_CPTIME\n\tkernCPUStats = 85 // KERN_CPUSTATS\n)\n\nvar ClocksPerSec = float64(128)\n\ntype cpuStats struct {\n\t// cs_time[CPUSTATES]\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tSpin uint64\n\tIntr uint64\n\tIdle uint64\n\n\t// cs_flags\n\tFlags uint64\n}\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tClocksPerSec = float64(clkTck)\n\t}\n}\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) (ret []TimesStat, err error) {\n\tif !percpu {\n\t\tmib := []int32{ctlKern, kernCpTime}\n\t\tbuf, _, err := common.CallSyscall(mib)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\ttimes := (*cpuTimes)(unsafe.Pointer(&buf[0]))\n\t\tstat := TimesStat{\n\t\t\tCPU:    \"cpu-total\",\n\t\t\tUser:   float64(times.User) / ClocksPerSec,\n\t\t\tNice:   float64(times.Nice) / ClocksPerSec,\n\t\t\tSystem: float64(times.Sys) / ClocksPerSec,\n\t\t\tIdle:   float64(times.Idle) / ClocksPerSec,\n\t\t\tIrq:    float64(times.Intr) / ClocksPerSec,\n\t\t}\n\t\treturn []TimesStat{stat}, nil\n\t}\n\n\tncpu, err := unix.SysctlUint32(\"hw.ncpu\")\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar i uint32\n\tfor i = 0; i < ncpu; i++ {\n\t\tmib := []int32{ctlKern, kernCPUStats, int32(i)}\n\t\tbuf, _, err := common.CallSyscall(mib)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\n\t\tstats := (*cpuStats)(unsafe.Pointer(&buf[0]))\n\t\tif (stats.Flags & cpuOnline) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, TimesStat{\n\t\t\tCPU:    fmt.Sprintf(\"cpu%d\", i),\n\t\t\tUser:   float64(stats.User) / ClocksPerSec,\n\t\t\tNice:   float64(stats.Nice) / ClocksPerSec,\n\t\t\tSystem: float64(stats.Sys) / ClocksPerSec,\n\t\t\tIdle:   float64(stats.Idle) / ClocksPerSec,\n\t\t\tIrq:    float64(stats.Intr) / ClocksPerSec,\n\t\t})\n\t}\n\n\treturn ret, nil\n}\n\n// Returns only one (minimal) CPUInfoStat on OpenBSD\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tvar ret []InfoStat\n\tvar err error\n\n\tc := InfoStat{}\n\n\tmhz, err := unix.SysctlUint32(\"hw.cpuspeed\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Mhz = float64(mhz)\n\n\tncpu, err := unix.SysctlUint32(\"hw.ncpuonline\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Cores = int32(ncpu)\n\n\tif c.ModelName, err = unix.Sysctl(\"hw.model\"); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn append(ret, c), nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_openbsd_386.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint32\n\tNice uint32\n\tSys  uint32\n\tSpin uint32\n\tIntr uint32\n\tIdle uint32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_openbsd_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tSpin uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_openbsd_arm.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint32\n\tNice uint32\n\tSys  uint32\n\tSpin uint32\n\tIntr uint32\n\tIdle uint32\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_openbsd_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tSpin uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_openbsd_riscv64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\ntype cpuTimes struct {\n\tUser uint64\n\tNice uint64\n\tSys  uint64\n\tSpin uint64\n\tIntr uint64\n\tIdle uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_plan9.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build plan9\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"runtime\"\n\n\tstats \"github.com/lufia/plan9stats\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\t// BUG: percpu flag is not supported yet.\n\troot := os.Getenv(\"HOST_ROOT\")\n\tc, err := stats.ReadCPUType(ctx, stats.WithRootDir(root))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts, err := stats.ReadCPUStats(ctx, stats.WithRootDir(root))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn []TimesStat{\n\t\t{\n\t\t\tCPU:    c.Name,\n\t\t\tUser:   s.User.Seconds(),\n\t\t\tSystem: s.Sys.Seconds(),\n\t\t\tIdle:   s.Idle.Seconds(),\n\t\t},\n\t}, nil\n}\n\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\treturn []InfoStat{}, common.ErrNotImplementedError\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_solaris.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage cpu\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/tklauser/go-sysconf\"\n)\n\nvar ClocksPerSec = float64(128)\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tClocksPerSec = float64(clkTck)\n\t}\n}\n\n// sum all values in a float64 map with float64 keys\nfunc msum(x map[float64]float64) float64 {\n\ttotal := 0.0\n\tfor _, y := range x {\n\t\ttotal += y\n\t}\n\treturn total\n}\n\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nvar kstatSplit = regexp.MustCompile(`[:\\s]+`)\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tkstatSysOut, err := invoke.CommandWithContext(ctx, \"kstat\", \"-p\", \"cpu_stat:*:*:/^idle$|^user$|^kernel$|^iowait$|^swap$/\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot execute kstat: %s\", err)\n\t}\n\tcpu := make(map[float64]float64)\n\tidle := make(map[float64]float64)\n\tuser := make(map[float64]float64)\n\tkern := make(map[float64]float64)\n\tiowt := make(map[float64]float64)\n\t// swap := make(map[float64]float64)\n\tfor _, line := range strings.Split(string(kstatSysOut), \"\\n\") {\n\t\tfields := kstatSplit.Split(line, -1)\n\t\tif fields[0] != \"cpu_stat\" {\n\t\t\tcontinue\n\t\t}\n\t\tcpuNumber, err := strconv.ParseFloat(fields[1], 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"cannot parse cpu number: %s\", err)\n\t\t}\n\t\tcpu[cpuNumber] = cpuNumber\n\t\tswitch fields[3] {\n\t\tcase \"idle\":\n\t\t\tidle[cpuNumber], err = strconv.ParseFloat(fields[4], 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse idle: %s\", err)\n\t\t\t}\n\t\tcase \"user\":\n\t\t\tuser[cpuNumber], err = strconv.ParseFloat(fields[4], 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse user: %s\", err)\n\t\t\t}\n\t\tcase \"kernel\":\n\t\t\tkern[cpuNumber], err = strconv.ParseFloat(fields[4], 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse kernel: %s\", err)\n\t\t\t}\n\t\tcase \"iowait\":\n\t\t\tiowt[cpuNumber], err = strconv.ParseFloat(fields[4], 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse iowait: %s\", err)\n\t\t\t}\n\t\t\t//not sure how this translates, don't report, add to kernel, something else?\n\t\t\t/*case \"swap\":\n\t\t\tswap[cpuNumber], err = strconv.ParseFloat(fields[4], 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse swap: %s\", err)\n\t\t\t} */\n\t\t}\n\t}\n\tret := make([]TimesStat, 0, len(cpu))\n\tif percpu {\n\t\tfor _, c := range cpu {\n\t\t\tct := &TimesStat{\n\t\t\t\tCPU:    fmt.Sprintf(\"cpu%d\", int(cpu[c])),\n\t\t\t\tIdle:   idle[c] / ClocksPerSec,\n\t\t\t\tUser:   user[c] / ClocksPerSec,\n\t\t\t\tSystem: kern[c] / ClocksPerSec,\n\t\t\t\tIowait: iowt[c] / ClocksPerSec,\n\t\t\t}\n\t\t\tret = append(ret, *ct)\n\t\t}\n\t} else {\n\t\tct := &TimesStat{\n\t\t\tCPU:    \"cpu-total\",\n\t\t\tIdle:   msum(idle) / ClocksPerSec,\n\t\t\tUser:   msum(user) / ClocksPerSec,\n\t\t\tSystem: msum(kern) / ClocksPerSec,\n\t\t\tIowait: msum(iowt) / ClocksPerSec,\n\t\t}\n\t\tret = append(ret, *ct)\n\t}\n\treturn ret, nil\n}\n\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tpsrInfoOut, err := invoke.CommandWithContext(ctx, \"psrinfo\", \"-p\", \"-v\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot execute psrinfo: %s\", err)\n\t}\n\n\tprocs, err := parseProcessorInfo(string(psrInfoOut))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing psrinfo output: %s\", err)\n\t}\n\n\tisaInfoOut, err := invoke.CommandWithContext(ctx, \"isainfo\", \"-b\", \"-v\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot execute isainfo: %s\", err)\n\t}\n\n\tflags, err := parseISAInfo(string(isaInfoOut))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing isainfo output: %s\", err)\n\t}\n\n\tresult := make([]InfoStat, 0, len(flags))\n\tfor _, proc := range procs {\n\t\tprocWithFlags := proc\n\t\tprocWithFlags.Flags = flags\n\t\tresult = append(result, procWithFlags)\n\t}\n\n\treturn result, nil\n}\n\nvar flagsMatch = regexp.MustCompile(`[\\w\\.]+`)\n\nfunc parseISAInfo(cmdOutput string) ([]string, error) {\n\twords := flagsMatch.FindAllString(cmdOutput, -1)\n\n\t// Sanity check the output\n\tif len(words) < 4 || words[1] != \"bit\" || words[3] != \"applications\" {\n\t\treturn nil, errors.New(\"attempted to parse invalid isainfo output\")\n\t}\n\n\tflags := make([]string, len(words)-4)\n\tfor i, val := range words[4:] {\n\t\tflags[i] = val\n\t}\n\tsort.Strings(flags)\n\n\treturn flags, nil\n}\n\nvar psrInfoMatch = regexp.MustCompile(`The physical processor has (?:([\\d]+) virtual processors? \\(([\\d-]+)\\)|([\\d]+) cores and ([\\d]+) virtual processors[^\\n]+)\\n(?:\\s+ The core has.+\\n)*\\s+.+ \\((\\w+) ([\\S]+) family (.+) model (.+) step (.+) clock (.+) MHz\\)\\n[\\s]*(.*)`)\n\nconst (\n\tpsrNumCoresOffset   = 1\n\tpsrNumCoresHTOffset = 3\n\tpsrNumHTOffset      = 4\n\tpsrVendorIDOffset   = 5\n\tpsrFamilyOffset     = 7\n\tpsrModelOffset      = 8\n\tpsrStepOffset       = 9\n\tpsrClockOffset      = 10\n\tpsrModelNameOffset  = 11\n)\n\nfunc parseProcessorInfo(cmdOutput string) ([]InfoStat, error) {\n\tmatches := psrInfoMatch.FindAllStringSubmatch(cmdOutput, -1)\n\n\tvar infoStatCount int32\n\tresult := make([]InfoStat, 0, len(matches))\n\tfor physicalIndex, physicalCPU := range matches {\n\t\tvar step int32\n\t\tvar clock float64\n\n\t\tif physicalCPU[psrStepOffset] != \"\" {\n\t\t\tstepParsed, err := strconv.ParseInt(physicalCPU[psrStepOffset], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse value %q for step as 32-bit integer: %s\", physicalCPU[9], err)\n\t\t\t}\n\t\t\tstep = int32(stepParsed)\n\t\t}\n\n\t\tif physicalCPU[psrClockOffset] != \"\" {\n\t\t\tclockParsed, err := strconv.ParseInt(physicalCPU[psrClockOffset], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse value %q for clock as 32-bit integer: %s\", physicalCPU[10], err)\n\t\t\t}\n\t\t\tclock = float64(clockParsed)\n\t\t}\n\n\t\tvar err error\n\t\tvar numCores int64\n\t\tvar numHT int64\n\t\tswitch {\n\t\tcase physicalCPU[psrNumCoresOffset] != \"\":\n\t\t\tnumCores, err = strconv.ParseInt(physicalCPU[psrNumCoresOffset], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse value %q for core count as 32-bit integer: %s\", physicalCPU[1], err)\n\t\t\t}\n\n\t\t\tfor i := 0; i < int(numCores); i++ {\n\t\t\t\tresult = append(result, InfoStat{\n\t\t\t\t\tCPU:        infoStatCount,\n\t\t\t\t\tPhysicalID: strconv.Itoa(physicalIndex),\n\t\t\t\t\tCoreID:     strconv.Itoa(i),\n\t\t\t\t\tCores:      1,\n\t\t\t\t\tVendorID:   physicalCPU[psrVendorIDOffset],\n\t\t\t\t\tModelName:  physicalCPU[psrModelNameOffset],\n\t\t\t\t\tFamily:     physicalCPU[psrFamilyOffset],\n\t\t\t\t\tModel:      physicalCPU[psrModelOffset],\n\t\t\t\t\tStepping:   step,\n\t\t\t\t\tMhz:        clock,\n\t\t\t\t})\n\t\t\t\tinfoStatCount++\n\t\t\t}\n\t\tcase physicalCPU[psrNumCoresHTOffset] != \"\":\n\t\t\tnumCores, err = strconv.ParseInt(physicalCPU[psrNumCoresHTOffset], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse value %q for core count as 32-bit integer: %s\", physicalCPU[3], err)\n\t\t\t}\n\n\t\t\tnumHT, err = strconv.ParseInt(physicalCPU[psrNumHTOffset], 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse value %q for hyperthread count as 32-bit integer: %s\", physicalCPU[4], err)\n\t\t\t}\n\n\t\t\tfor i := 0; i < int(numCores); i++ {\n\t\t\t\tresult = append(result, InfoStat{\n\t\t\t\t\tCPU:        infoStatCount,\n\t\t\t\t\tPhysicalID: strconv.Itoa(physicalIndex),\n\t\t\t\t\tCoreID:     strconv.Itoa(i),\n\t\t\t\t\tCores:      int32(numHT) / int32(numCores),\n\t\t\t\t\tVendorID:   physicalCPU[psrVendorIDOffset],\n\t\t\t\t\tModelName:  physicalCPU[psrModelNameOffset],\n\t\t\t\t\tFamily:     physicalCPU[psrFamilyOffset],\n\t\t\t\t\tModel:      physicalCPU[psrModelOffset],\n\t\t\t\t\tStepping:   step,\n\t\t\t\t\tMhz:        clock,\n\t\t\t\t})\n\t\t\t\tinfoStatCount++\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"values for cores with and without hyperthreading are both set\")\n\t\t}\n\t}\n\treturn result, nil\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\treturn runtime.NumCPU(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/cpu/cpu_windows.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build windows\n\npackage cpu\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/yusufpapurcu/wmi\"\n\t\"golang.org/x/sys/windows\"\n)\n\nvar procGetNativeSystemInfo = common.Modkernel32.NewProc(\"GetNativeSystemInfo\")\n\ntype win32_Processor struct {\n\tFamily                    uint16\n\tManufacturer              string\n\tName                      string\n\tNumberOfLogicalProcessors uint32\n\tNumberOfCores             uint32\n\tProcessorID               *string\n\tStepping                  *string\n\tMaxClockSpeed             uint32\n}\n\n// SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION\n// defined in windows api doc with the following\n// https://docs.microsoft.com/en-us/windows/desktop/api/winternl/nf-winternl-ntquerysysteminformation#system_processor_performance_information\n// additional fields documented here\n// https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/processor_performance.htm\ntype win32_SystemProcessorPerformanceInformation struct {\n\tIdleTime       int64 // idle time in 100ns (this is not a filetime).\n\tKernelTime     int64 // kernel time in 100ns.  kernel time includes idle time. (this is not a filetime).\n\tUserTime       int64 // usertime in 100ns (this is not a filetime).\n\tDpcTime        int64 // dpc time in 100ns (this is not a filetime).\n\tInterruptTime  int64 // interrupt time in 100ns\n\tInterruptCount uint32\n}\n\nconst (\n\tClocksPerSec = 10000000.0\n\n\t// systemProcessorPerformanceInformationClass information class to query with NTQuerySystemInformation\n\t// https://processhacker.sourceforge.io/doc/ntexapi_8h.html#ad5d815b48e8f4da1ef2eb7a2f18a54e0\n\twin32_SystemProcessorPerformanceInformationClass = 8\n\n\t// size of systemProcessorPerformanceInfoSize in memory\n\twin32_SystemProcessorPerformanceInfoSize = uint32(unsafe.Sizeof(win32_SystemProcessorPerformanceInformation{}))\n)\n\n// Times returns times stat per cpu and combined for all CPUs\nfunc Times(percpu bool) ([]TimesStat, error) {\n\treturn TimesWithContext(context.Background(), percpu)\n}\n\nfunc TimesWithContext(ctx context.Context, percpu bool) ([]TimesStat, error) {\n\tif percpu {\n\t\treturn perCPUTimes()\n\t}\n\n\tvar ret []TimesStat\n\tvar lpIdleTime common.FILETIME\n\tvar lpKernelTime common.FILETIME\n\tvar lpUserTime common.FILETIME\n\tr, _, _ := common.ProcGetSystemTimes.Call(\n\t\tuintptr(unsafe.Pointer(&lpIdleTime)),\n\t\tuintptr(unsafe.Pointer(&lpKernelTime)),\n\t\tuintptr(unsafe.Pointer(&lpUserTime)))\n\tif r == 0 {\n\t\treturn ret, windows.GetLastError()\n\t}\n\n\tLOT := float64(0.0000001)\n\tHIT := (LOT * 4294967296.0)\n\tidle := ((HIT * float64(lpIdleTime.DwHighDateTime)) + (LOT * float64(lpIdleTime.DwLowDateTime)))\n\tuser := ((HIT * float64(lpUserTime.DwHighDateTime)) + (LOT * float64(lpUserTime.DwLowDateTime)))\n\tkernel := ((HIT * float64(lpKernelTime.DwHighDateTime)) + (LOT * float64(lpKernelTime.DwLowDateTime)))\n\tsystem := (kernel - idle)\n\n\tret = append(ret, TimesStat{\n\t\tCPU:    \"cpu-total\",\n\t\tIdle:   float64(idle),\n\t\tUser:   float64(user),\n\t\tSystem: float64(system),\n\t})\n\treturn ret, nil\n}\n\nfunc Info() ([]InfoStat, error) {\n\treturn InfoWithContext(context.Background())\n}\n\nfunc InfoWithContext(ctx context.Context) ([]InfoStat, error) {\n\tvar ret []InfoStat\n\tvar dst []win32_Processor\n\tq := wmi.CreateQuery(&dst, \"\")\n\tif err := common.WMIQueryWithContext(ctx, q, &dst); err != nil {\n\t\treturn ret, err\n\t}\n\n\tvar procID string\n\tfor i, l := range dst {\n\t\tprocID = \"\"\n\t\tif l.ProcessorID != nil {\n\t\t\tprocID = *l.ProcessorID\n\t\t}\n\n\t\tcpu := InfoStat{\n\t\t\tCPU:        int32(i),\n\t\t\tFamily:     fmt.Sprintf(\"%d\", l.Family),\n\t\t\tVendorID:   l.Manufacturer,\n\t\t\tModelName:  l.Name,\n\t\t\tCores:      int32(l.NumberOfLogicalProcessors),\n\t\t\tPhysicalID: procID,\n\t\t\tMhz:        float64(l.MaxClockSpeed),\n\t\t\tFlags:      []string{},\n\t\t}\n\t\tret = append(ret, cpu)\n\t}\n\n\treturn ret, nil\n}\n\n// perCPUTimes returns times stat per cpu, per core and overall for all CPUs\nfunc perCPUTimes() ([]TimesStat, error) {\n\tvar ret []TimesStat\n\tstats, err := perfInfo()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor core, v := range stats {\n\t\tc := TimesStat{\n\t\t\tCPU:    fmt.Sprintf(\"cpu%d\", core),\n\t\t\tUser:   float64(v.UserTime) / ClocksPerSec,\n\t\t\tSystem: float64(v.KernelTime-v.IdleTime) / ClocksPerSec,\n\t\t\tIdle:   float64(v.IdleTime) / ClocksPerSec,\n\t\t\tIrq:    float64(v.InterruptTime) / ClocksPerSec,\n\t\t}\n\t\tret = append(ret, c)\n\t}\n\treturn ret, nil\n}\n\n// makes call to Windows API function to retrieve performance information for each core\nfunc perfInfo() ([]win32_SystemProcessorPerformanceInformation, error) {\n\t// Make maxResults large for safety.\n\t// We can't invoke the api call with a results array that's too small.\n\t// If we have more than 2056 cores on a single host, then it's probably the future.\n\tmaxBuffer := 2056\n\t// buffer for results from the windows proc\n\tresultBuffer := make([]win32_SystemProcessorPerformanceInformation, maxBuffer)\n\t// size of the buffer in memory\n\tbufferSize := uintptr(win32_SystemProcessorPerformanceInfoSize) * uintptr(maxBuffer)\n\t// size of the returned response\n\tvar retSize uint32\n\n\t// Invoke windows api proc.\n\t// The returned err from the windows dll proc will always be non-nil even when successful.\n\t// See https://godoc.org/golang.org/x/sys/windows#LazyProc.Call for more information\n\tretCode, _, err := common.ProcNtQuerySystemInformation.Call(\n\t\twin32_SystemProcessorPerformanceInformationClass, // System Information Class -> SystemProcessorPerformanceInformation\n\t\tuintptr(unsafe.Pointer(&resultBuffer[0])),        // pointer to first element in result buffer\n\t\tbufferSize,                        // size of the buffer in memory\n\t\tuintptr(unsafe.Pointer(&retSize)), // pointer to the size of the returned results the windows proc will set this\n\t)\n\n\t// check return code for errors\n\tif retCode != 0 {\n\t\treturn nil, fmt.Errorf(\"call to NtQuerySystemInformation returned %d. err: %s\", retCode, err.Error())\n\t}\n\n\t// calculate the number of returned elements based on the returned size\n\tnumReturnedElements := retSize / win32_SystemProcessorPerformanceInfoSize\n\n\t// trim results to the number of returned elements\n\tresultBuffer = resultBuffer[:numReturnedElements]\n\n\treturn resultBuffer, nil\n}\n\n// SystemInfo is an equivalent representation of SYSTEM_INFO in the Windows API.\n// https://msdn.microsoft.com/en-us/library/ms724958%28VS.85%29.aspx?f=255&MSPPError=-2147217396\n// https://github.com/elastic/go-windows/blob/bb1581babc04d5cb29a2bfa7a9ac6781c730c8dd/kernel32.go#L43\ntype systemInfo struct {\n\twProcessorArchitecture      uint16\n\twReserved                   uint16\n\tdwPageSize                  uint32\n\tlpMinimumApplicationAddress uintptr\n\tlpMaximumApplicationAddress uintptr\n\tdwActiveProcessorMask       uintptr\n\tdwNumberOfProcessors        uint32\n\tdwProcessorType             uint32\n\tdwAllocationGranularity     uint32\n\twProcessorLevel             uint16\n\twProcessorRevision          uint16\n}\n\nfunc CountsWithContext(ctx context.Context, logical bool) (int, error) {\n\tif logical {\n\t\t// https://github.com/giampaolo/psutil/blob/d01a9eaa35a8aadf6c519839e987a49d8be2d891/psutil/_psutil_windows.c#L97\n\t\tret := windows.GetActiveProcessorCount(windows.ALL_PROCESSOR_GROUPS)\n\t\tif ret != 0 {\n\t\t\treturn int(ret), nil\n\t\t}\n\t\tvar systemInfo systemInfo\n\t\t_, _, err := procGetNativeSystemInfo.Call(uintptr(unsafe.Pointer(&systemInfo)))\n\t\tif systemInfo.dwNumberOfProcessors == 0 {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn int(systemInfo.dwNumberOfProcessors), nil\n\t}\n\t// physical cores https://github.com/giampaolo/psutil/blob/d01a9eaa35a8aadf6c519839e987a49d8be2d891/psutil/_psutil_windows.c#L499\n\t// for the time being, try with unreliable and slow WMI call…\n\tvar dst []win32_Processor\n\tq := wmi.CreateQuery(&dst, \"\")\n\tif err := common.WMIQueryWithContext(ctx, q, &dst); err != nil {\n\t\treturn 0, err\n\t}\n\tvar count uint32\n\tfor _, d := range dst {\n\t\tcount += d.NumberOfCores\n\t}\n\treturn int(count), nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/binary.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage common\n\n// Copyright 2009 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package binary implements simple translation between numbers and byte\n// sequences and encoding and decoding of varints.\n//\n// Numbers are translated by reading and writing fixed-size values.\n// A fixed-size value is either a fixed-size arithmetic\n// type (int8, uint8, int16, float32, complex64, ...)\n// or an array or struct containing only fixed-size values.\n//\n// The varint functions encode and decode single integer values using\n// a variable-length encoding; smaller values require fewer bytes.\n// For a specification, see\n// http://code.google.com/apis/protocolbuffers/docs/encoding.html.\n//\n// This package favors simplicity over efficiency. Clients that require\n// high-performance serialization, especially for large data structures,\n// should look at more advanced solutions such as the encoding/gob\n// package or protocol buffers.\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n)\n\n// A ByteOrder specifies how to convert byte sequences into\n// 16-, 32-, or 64-bit unsigned integers.\ntype ByteOrder interface {\n\tUint16([]byte) uint16\n\tUint32([]byte) uint32\n\tUint64([]byte) uint64\n\tPutUint16([]byte, uint16)\n\tPutUint32([]byte, uint32)\n\tPutUint64([]byte, uint64)\n\tString() string\n}\n\n// LittleEndian is the little-endian implementation of ByteOrder.\nvar LittleEndian littleEndian\n\n// BigEndian is the big-endian implementation of ByteOrder.\nvar BigEndian bigEndian\n\ntype littleEndian struct{}\n\nfunc (littleEndian) Uint16(b []byte) uint16 { return uint16(b[0]) | uint16(b[1])<<8 }\n\nfunc (littleEndian) PutUint16(b []byte, v uint16) {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n}\n\nfunc (littleEndian) Uint32(b []byte) uint32 {\n\treturn uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n}\n\nfunc (littleEndian) PutUint32(b []byte, v uint32) {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n\tb[2] = byte(v >> 16)\n\tb[3] = byte(v >> 24)\n}\n\nfunc (littleEndian) Uint64(b []byte) uint64 {\n\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n}\n\nfunc (littleEndian) PutUint64(b []byte, v uint64) {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n\tb[2] = byte(v >> 16)\n\tb[3] = byte(v >> 24)\n\tb[4] = byte(v >> 32)\n\tb[5] = byte(v >> 40)\n\tb[6] = byte(v >> 48)\n\tb[7] = byte(v >> 56)\n}\n\nfunc (littleEndian) String() string { return \"LittleEndian\" }\n\nfunc (littleEndian) GoString() string { return \"binary.LittleEndian\" }\n\ntype bigEndian struct{}\n\nfunc (bigEndian) Uint16(b []byte) uint16 { return uint16(b[1]) | uint16(b[0])<<8 }\n\nfunc (bigEndian) PutUint16(b []byte, v uint16) {\n\tb[0] = byte(v >> 8)\n\tb[1] = byte(v)\n}\n\nfunc (bigEndian) Uint32(b []byte) uint32 {\n\treturn uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24\n}\n\nfunc (bigEndian) PutUint32(b []byte, v uint32) {\n\tb[0] = byte(v >> 24)\n\tb[1] = byte(v >> 16)\n\tb[2] = byte(v >> 8)\n\tb[3] = byte(v)\n}\n\nfunc (bigEndian) Uint64(b []byte) uint64 {\n\treturn uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |\n\t\tuint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56\n}\n\nfunc (bigEndian) PutUint64(b []byte, v uint64) {\n\tb[0] = byte(v >> 56)\n\tb[1] = byte(v >> 48)\n\tb[2] = byte(v >> 40)\n\tb[3] = byte(v >> 32)\n\tb[4] = byte(v >> 24)\n\tb[5] = byte(v >> 16)\n\tb[6] = byte(v >> 8)\n\tb[7] = byte(v)\n}\n\nfunc (bigEndian) String() string { return \"BigEndian\" }\n\nfunc (bigEndian) GoString() string { return \"binary.BigEndian\" }\n\n// Read reads structured binary data from r into data.\n// Data must be a pointer to a fixed-size value or a slice\n// of fixed-size values.\n// Bytes read from r are decoded using the specified byte order\n// and written to successive fields of the data.\n// When reading into structs, the field data for fields with\n// blank (_) field names is skipped; i.e., blank field names\n// may be used for padding.\n// When reading into a struct, all non-blank fields must be exported.\nfunc Read(r io.Reader, order ByteOrder, data interface{}) error {\n\t// Fast path for basic types and slices.\n\tif n := intDataSize(data); n != 0 {\n\t\tvar b [8]byte\n\t\tvar bs []byte\n\t\tif n > len(b) {\n\t\t\tbs = make([]byte, n)\n\t\t} else {\n\t\t\tbs = b[:n]\n\t\t}\n\t\tif _, err := io.ReadFull(r, bs); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch data := data.(type) {\n\t\tcase *int8:\n\t\t\t*data = int8(b[0])\n\t\tcase *uint8:\n\t\t\t*data = b[0]\n\t\tcase *int16:\n\t\t\t*data = int16(order.Uint16(bs))\n\t\tcase *uint16:\n\t\t\t*data = order.Uint16(bs)\n\t\tcase *int32:\n\t\t\t*data = int32(order.Uint32(bs))\n\t\tcase *uint32:\n\t\t\t*data = order.Uint32(bs)\n\t\tcase *int64:\n\t\t\t*data = int64(order.Uint64(bs))\n\t\tcase *uint64:\n\t\t\t*data = order.Uint64(bs)\n\t\tcase []int8:\n\t\t\tfor i, x := range bs { // Easier to loop over the input for 8-bit values.\n\t\t\t\tdata[i] = int8(x)\n\t\t\t}\n\t\tcase []uint8:\n\t\t\tcopy(data, bs)\n\t\tcase []int16:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = int16(order.Uint16(bs[2*i:]))\n\t\t\t}\n\t\tcase []uint16:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = order.Uint16(bs[2*i:])\n\t\t\t}\n\t\tcase []int32:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = int32(order.Uint32(bs[4*i:]))\n\t\t\t}\n\t\tcase []uint32:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = order.Uint32(bs[4*i:])\n\t\t\t}\n\t\tcase []int64:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = int64(order.Uint64(bs[8*i:]))\n\t\t\t}\n\t\tcase []uint64:\n\t\t\tfor i := range data {\n\t\t\t\tdata[i] = order.Uint64(bs[8*i:])\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Fallback to reflect-based decoding.\n\tv := reflect.ValueOf(data)\n\tsize := -1\n\tswitch v.Kind() {\n\tcase reflect.Ptr:\n\t\tv = v.Elem()\n\t\tsize = dataSize(v)\n\tcase reflect.Slice:\n\t\tsize = dataSize(v)\n\t}\n\tif size < 0 {\n\t\treturn errors.New(\"binary.Read: invalid type \" + reflect.TypeOf(data).String())\n\t}\n\td := &decoder{order: order, buf: make([]byte, size)}\n\tif _, err := io.ReadFull(r, d.buf); err != nil {\n\t\treturn err\n\t}\n\td.value(v)\n\treturn nil\n}\n\n// Write writes the binary representation of data into w.\n// Data must be a fixed-size value or a slice of fixed-size\n// values, or a pointer to such data.\n// Bytes written to w are encoded using the specified byte order\n// and read from successive fields of the data.\n// When writing structs, zero values are written for fields\n// with blank (_) field names.\nfunc Write(w io.Writer, order ByteOrder, data interface{}) error {\n\t// Fast path for basic types and slices.\n\tif n := intDataSize(data); n != 0 {\n\t\tvar b [8]byte\n\t\tvar bs []byte\n\t\tif n > len(b) {\n\t\t\tbs = make([]byte, n)\n\t\t} else {\n\t\t\tbs = b[:n]\n\t\t}\n\t\tswitch v := data.(type) {\n\t\tcase *int8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = byte(*v)\n\t\tcase int8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = byte(v)\n\t\tcase []int8:\n\t\t\tfor i, x := range v {\n\t\t\t\tbs[i] = byte(x)\n\t\t\t}\n\t\tcase *uint8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = *v\n\t\tcase uint8:\n\t\t\tbs = b[:1]\n\t\t\tb[0] = byte(v)\n\t\tcase []uint8:\n\t\t\tbs = v\n\t\tcase *int16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, uint16(*v))\n\t\tcase int16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, uint16(v))\n\t\tcase []int16:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint16(bs[2*i:], uint16(x))\n\t\t\t}\n\t\tcase *uint16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, *v)\n\t\tcase uint16:\n\t\t\tbs = b[:2]\n\t\t\torder.PutUint16(bs, v)\n\t\tcase []uint16:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint16(bs[2*i:], x)\n\t\t\t}\n\t\tcase *int32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, uint32(*v))\n\t\tcase int32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, uint32(v))\n\t\tcase []int32:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint32(bs[4*i:], uint32(x))\n\t\t\t}\n\t\tcase *uint32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, *v)\n\t\tcase uint32:\n\t\t\tbs = b[:4]\n\t\t\torder.PutUint32(bs, v)\n\t\tcase []uint32:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint32(bs[4*i:], x)\n\t\t\t}\n\t\tcase *int64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, uint64(*v))\n\t\tcase int64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, uint64(v))\n\t\tcase []int64:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint64(bs[8*i:], uint64(x))\n\t\t\t}\n\t\tcase *uint64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, *v)\n\t\tcase uint64:\n\t\t\tbs = b[:8]\n\t\t\torder.PutUint64(bs, v)\n\t\tcase []uint64:\n\t\t\tfor i, x := range v {\n\t\t\t\torder.PutUint64(bs[8*i:], x)\n\t\t\t}\n\t\t}\n\t\t_, err := w.Write(bs)\n\t\treturn err\n\t}\n\n\t// Fallback to reflect-based encoding.\n\tv := reflect.Indirect(reflect.ValueOf(data))\n\tsize := dataSize(v)\n\tif size < 0 {\n\t\treturn errors.New(\"binary.Write: invalid type \" + reflect.TypeOf(data).String())\n\t}\n\tbuf := make([]byte, size)\n\te := &encoder{order: order, buf: buf}\n\te.value(v)\n\t_, err := w.Write(buf)\n\treturn err\n}\n\n// Size returns how many bytes Write would generate to encode the value v, which\n// must be a fixed-size value or a slice of fixed-size values, or a pointer to such data.\n// If v is neither of these, Size returns -1.\nfunc Size(v interface{}) int {\n\treturn dataSize(reflect.Indirect(reflect.ValueOf(v)))\n}\n\n// dataSize returns the number of bytes the actual data represented by v occupies in memory.\n// For compound structures, it sums the sizes of the elements. Thus, for instance, for a slice\n// it returns the length of the slice times the element size and does not count the memory\n// occupied by the header. If the type of v is not acceptable, dataSize returns -1.\nfunc dataSize(v reflect.Value) int {\n\tif v.Kind() == reflect.Slice {\n\t\tif s := sizeof(v.Type().Elem()); s >= 0 {\n\t\t\treturn s * v.Len()\n\t\t}\n\t\treturn -1\n\t}\n\treturn sizeof(v.Type())\n}\n\n// sizeof returns the size >= 0 of variables for the given type or -1 if the type is not acceptable.\nfunc sizeof(t reflect.Type) int {\n\tswitch t.Kind() {\n\tcase reflect.Array:\n\t\tif s := sizeof(t.Elem()); s >= 0 {\n\t\t\treturn s * t.Len()\n\t\t}\n\n\tcase reflect.Struct:\n\t\tsum := 0\n\t\tfor i, n := 0, t.NumField(); i < n; i++ {\n\t\t\ts := sizeof(t.Field(i).Type)\n\t\t\tif s < 0 {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\tsum += s\n\t\t}\n\t\treturn sum\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,\n\t\treflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\treflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128, reflect.Ptr:\n\t\treturn int(t.Size())\n\t}\n\n\treturn -1\n}\n\ntype coder struct {\n\torder ByteOrder\n\tbuf   []byte\n}\n\ntype (\n\tdecoder coder\n\tencoder coder\n)\n\nfunc (d *decoder) uint8() uint8 {\n\tx := d.buf[0]\n\td.buf = d.buf[1:]\n\treturn x\n}\n\nfunc (e *encoder) uint8(x uint8) {\n\te.buf[0] = x\n\te.buf = e.buf[1:]\n}\n\nfunc (d *decoder) uint16() uint16 {\n\tx := d.order.Uint16(d.buf[0:2])\n\td.buf = d.buf[2:]\n\treturn x\n}\n\nfunc (e *encoder) uint16(x uint16) {\n\te.order.PutUint16(e.buf[0:2], x)\n\te.buf = e.buf[2:]\n}\n\nfunc (d *decoder) uint32() uint32 {\n\tx := d.order.Uint32(d.buf[0:4])\n\td.buf = d.buf[4:]\n\treturn x\n}\n\nfunc (e *encoder) uint32(x uint32) {\n\te.order.PutUint32(e.buf[0:4], x)\n\te.buf = e.buf[4:]\n}\n\nfunc (d *decoder) uint64() uint64 {\n\tx := d.order.Uint64(d.buf[0:8])\n\td.buf = d.buf[8:]\n\treturn x\n}\n\nfunc (e *encoder) uint64(x uint64) {\n\te.order.PutUint64(e.buf[0:8], x)\n\te.buf = e.buf[8:]\n}\n\nfunc (d *decoder) int8() int8 { return int8(d.uint8()) }\n\nfunc (e *encoder) int8(x int8) { e.uint8(uint8(x)) }\n\nfunc (d *decoder) int16() int16 { return int16(d.uint16()) }\n\nfunc (e *encoder) int16(x int16) { e.uint16(uint16(x)) }\n\nfunc (d *decoder) int32() int32 { return int32(d.uint32()) }\n\nfunc (e *encoder) int32(x int32) { e.uint32(uint32(x)) }\n\nfunc (d *decoder) int64() int64 { return int64(d.uint64()) }\n\nfunc (e *encoder) int64(x int64) { e.uint64(uint64(x)) }\n\nfunc (d *decoder) value(v reflect.Value) {\n\tswitch v.Kind() {\n\tcase reflect.Array:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\td.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Struct:\n\t\tt := v.Type()\n\t\tl := v.NumField()\n\t\tfor i := 0; i < l; i++ {\n\t\t\t// Note: Calling v.CanSet() below is an optimization.\n\t\t\t// It would be sufficient to check the field name,\n\t\t\t// but creating the StructField info for each field is\n\t\t\t// costly (run \"go test -bench=ReadStruct\" and compare\n\t\t\t// results when making changes to this code).\n\t\t\tif v := v.Field(i); v.CanSet() || t.Field(i).Name != \"_\" {\n\t\t\t\td.value(v)\n\t\t\t} else {\n\t\t\t\td.skip(v)\n\t\t\t}\n\t\t}\n\n\tcase reflect.Slice:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\td.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Int8:\n\t\tv.SetInt(int64(d.int8()))\n\tcase reflect.Int16:\n\t\tv.SetInt(int64(d.int16()))\n\tcase reflect.Int32:\n\t\tv.SetInt(int64(d.int32()))\n\tcase reflect.Int64:\n\t\tv.SetInt(d.int64())\n\n\tcase reflect.Uint8:\n\t\tv.SetUint(uint64(d.uint8()))\n\tcase reflect.Uint16:\n\t\tv.SetUint(uint64(d.uint16()))\n\tcase reflect.Uint32:\n\t\tv.SetUint(uint64(d.uint32()))\n\tcase reflect.Uint64:\n\t\tv.SetUint(d.uint64())\n\n\tcase reflect.Float32:\n\t\tv.SetFloat(float64(math.Float32frombits(d.uint32())))\n\tcase reflect.Float64:\n\t\tv.SetFloat(math.Float64frombits(d.uint64()))\n\n\tcase reflect.Complex64:\n\t\tv.SetComplex(complex(\n\t\t\tfloat64(math.Float32frombits(d.uint32())),\n\t\t\tfloat64(math.Float32frombits(d.uint32())),\n\t\t))\n\tcase reflect.Complex128:\n\t\tv.SetComplex(complex(\n\t\t\tmath.Float64frombits(d.uint64()),\n\t\t\tmath.Float64frombits(d.uint64()),\n\t\t))\n\t}\n}\n\nfunc (e *encoder) value(v reflect.Value) {\n\tswitch v.Kind() {\n\tcase reflect.Array:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\te.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Struct:\n\t\tt := v.Type()\n\t\tl := v.NumField()\n\t\tfor i := 0; i < l; i++ {\n\t\t\t// see comment for corresponding code in decoder.value()\n\t\t\tif v := v.Field(i); v.CanSet() || t.Field(i).Name != \"_\" {\n\t\t\t\te.value(v)\n\t\t\t} else {\n\t\t\t\te.skip(v)\n\t\t\t}\n\t\t}\n\n\tcase reflect.Slice:\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\te.value(v.Index(i))\n\t\t}\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Int8:\n\t\t\te.int8(int8(v.Int()))\n\t\tcase reflect.Int16:\n\t\t\te.int16(int16(v.Int()))\n\t\tcase reflect.Int32:\n\t\t\te.int32(int32(v.Int()))\n\t\tcase reflect.Int64:\n\t\t\te.int64(v.Int())\n\t\t}\n\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Uint8:\n\t\t\te.uint8(uint8(v.Uint()))\n\t\tcase reflect.Uint16:\n\t\t\te.uint16(uint16(v.Uint()))\n\t\tcase reflect.Uint32:\n\t\t\te.uint32(uint32(v.Uint()))\n\t\tcase reflect.Uint64:\n\t\t\te.uint64(v.Uint())\n\t\t}\n\n\tcase reflect.Float32, reflect.Float64:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Float32:\n\t\t\te.uint32(math.Float32bits(float32(v.Float())))\n\t\tcase reflect.Float64:\n\t\t\te.uint64(math.Float64bits(v.Float()))\n\t\t}\n\n\tcase reflect.Complex64, reflect.Complex128:\n\t\tswitch v.Type().Kind() {\n\t\tcase reflect.Complex64:\n\t\t\tx := v.Complex()\n\t\t\te.uint32(math.Float32bits(float32(real(x))))\n\t\t\te.uint32(math.Float32bits(float32(imag(x))))\n\t\tcase reflect.Complex128:\n\t\t\tx := v.Complex()\n\t\t\te.uint64(math.Float64bits(real(x)))\n\t\t\te.uint64(math.Float64bits(imag(x)))\n\t\t}\n\t}\n}\n\nfunc (d *decoder) skip(v reflect.Value) {\n\td.buf = d.buf[dataSize(v):]\n}\n\nfunc (e *encoder) skip(v reflect.Value) {\n\tn := dataSize(v)\n\tfor i := range e.buf[0:n] {\n\t\te.buf[i] = 0\n\t}\n\te.buf = e.buf[n:]\n}\n\n// intDataSize returns the size of the data required to represent the data when encoded.\n// It returns zero if the type cannot be implemented by the fast path in Read or Write.\nfunc intDataSize(data interface{}) int {\n\tswitch data := data.(type) {\n\tcase int8, *int8, *uint8:\n\t\treturn 1\n\tcase []int8:\n\t\treturn len(data)\n\tcase []uint8:\n\t\treturn len(data)\n\tcase int16, *int16, *uint16:\n\t\treturn 2\n\tcase []int16:\n\t\treturn 2 * len(data)\n\tcase []uint16:\n\t\treturn 2 * len(data)\n\tcase int32, *int32, *uint32:\n\t\treturn 4\n\tcase []int32:\n\t\treturn 4 * len(data)\n\tcase []uint32:\n\t\treturn 4 * len(data)\n\tcase int64, *int64, *uint64:\n\t\treturn 8\n\tcase []int64:\n\t\treturn 8 * len(data)\n\tcase []uint64:\n\t\treturn 8 * len(data)\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage common\n\n//\n// gopsutil is a port of psutil(http://pythonhosted.org/psutil/).\n// This covers these architectures.\n//  - linux (amd64, arm)\n//  - freebsd (amd64)\n//  - windows (amd64)\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/shirou/gopsutil/v4/common\"\n)\n\nvar (\n\tTimeout    = 3 * time.Second\n\tErrTimeout = errors.New(\"command timed out\")\n)\n\ntype Invoker interface {\n\tCommand(string, ...string) ([]byte, error)\n\tCommandWithContext(context.Context, string, ...string) ([]byte, error)\n}\n\ntype Invoke struct{}\n\nfunc (i Invoke) Command(name string, arg ...string) ([]byte, error) {\n\tctx, cancel := context.WithTimeout(context.Background(), Timeout)\n\tdefer cancel()\n\treturn i.CommandWithContext(ctx, name, arg...)\n}\n\nfunc (i Invoke) CommandWithContext(ctx context.Context, name string, arg ...string) ([]byte, error) {\n\tcmd := exec.CommandContext(ctx, name, arg...)\n\n\tvar buf bytes.Buffer\n\tcmd.Stdout = &buf\n\tcmd.Stderr = &buf\n\n\tif err := cmd.Start(); err != nil {\n\t\treturn buf.Bytes(), err\n\t}\n\n\tif err := cmd.Wait(); err != nil {\n\t\treturn buf.Bytes(), err\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\ntype FakeInvoke struct {\n\tSuffix string // Suffix species expected file name suffix such as \"fail\"\n\tError  error  // If Error specified, return the error.\n}\n\n// Command in FakeInvoke returns from expected file if exists.\nfunc (i FakeInvoke) Command(name string, arg ...string) ([]byte, error) {\n\tif i.Error != nil {\n\t\treturn []byte{}, i.Error\n\t}\n\n\tarch := runtime.GOOS\n\n\tcommandName := filepath.Base(name)\n\n\tfname := strings.Join(append([]string{commandName}, arg...), \"\")\n\tfname = url.QueryEscape(fname)\n\tfpath := path.Join(\"testdata\", arch, fname)\n\tif i.Suffix != \"\" {\n\t\tfpath += \"_\" + i.Suffix\n\t}\n\tif PathExists(fpath) {\n\t\treturn os.ReadFile(fpath)\n\t}\n\treturn []byte{}, fmt.Errorf(\"could not find testdata: %s\", fpath)\n}\n\nfunc (i FakeInvoke) CommandWithContext(ctx context.Context, name string, arg ...string) ([]byte, error) {\n\treturn i.Command(name, arg...)\n}\n\nvar ErrNotImplementedError = errors.New(\"not implemented yet\")\n\n// ReadFile reads contents from a file\nfunc ReadFile(filename string) (string, error) {\n\tcontent, err := os.ReadFile(filename)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(content), nil\n}\n\n// ReadLines reads contents from a file and splits them by new lines.\n// A convenience wrapper to ReadLinesOffsetN(filename, 0, -1).\nfunc ReadLines(filename string) ([]string, error) {\n\treturn ReadLinesOffsetN(filename, 0, -1)\n}\n\n// ReadLine reads a file and returns the first occurrence of a line that is prefixed with prefix.\nfunc ReadLine(filename string, prefix string) (string, error) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer f.Close()\n\tr := bufio.NewReader(f)\n\tfor {\n\t\tline, err := r.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t\tif strings.HasPrefix(line, prefix) {\n\t\t\treturn line, nil\n\t\t}\n\t}\n\n\treturn \"\", nil\n}\n\n// ReadLinesOffsetN reads contents from file and splits them by new line.\n// The offset tells at which line number to start.\n// The count determines the number of lines to read (starting from offset):\n// n >= 0: at most n lines\n// n < 0: whole file\nfunc ReadLinesOffsetN(filename string, offset uint, n int) ([]string, error) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn []string{\"\"}, err\n\t}\n\tdefer f.Close()\n\n\tvar ret []string\n\n\tr := bufio.NewReader(f)\n\tfor i := uint(0); i < uint(n)+offset || n < 0; i++ {\n\t\tline, err := r.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tif err == io.EOF && len(line) > 0 {\n\t\t\t\tret = append(ret, strings.Trim(line, \"\\n\"))\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif i < offset {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, strings.Trim(line, \"\\n\"))\n\t}\n\n\treturn ret, nil\n}\n\nfunc IntToString(orig []int8) string {\n\tret := make([]byte, len(orig))\n\tsize := -1\n\tfor i, o := range orig {\n\t\tif o == 0 {\n\t\t\tsize = i\n\t\t\tbreak\n\t\t}\n\t\tret[i] = byte(o)\n\t}\n\tif size == -1 {\n\t\tsize = len(orig)\n\t}\n\n\treturn string(ret[0:size])\n}\n\nfunc UintToString(orig []uint8) string {\n\tret := make([]byte, len(orig))\n\tsize := -1\n\tfor i, o := range orig {\n\t\tif o == 0 {\n\t\t\tsize = i\n\t\t\tbreak\n\t\t}\n\t\tret[i] = byte(o)\n\t}\n\tif size == -1 {\n\t\tsize = len(orig)\n\t}\n\n\treturn string(ret[0:size])\n}\n\nfunc ByteToString(orig []byte) string {\n\tn := -1\n\tl := -1\n\tfor i, b := range orig {\n\t\t// skip left side null\n\t\tif l == -1 && b == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif l == -1 {\n\t\t\tl = i\n\t\t}\n\n\t\tif b == 0 {\n\t\t\tbreak\n\t\t}\n\t\tn = i + 1\n\t}\n\tif n == -1 {\n\t\treturn string(orig)\n\t}\n\treturn string(orig[l:n])\n}\n\n// ReadInts reads contents from single line file and returns them as []int32.\nfunc ReadInts(filename string) ([]int64, error) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn []int64{}, err\n\t}\n\tdefer f.Close()\n\n\tvar ret []int64\n\n\tr := bufio.NewReader(f)\n\n\t// The int files that this is concerned with should only be one liners.\n\tline, err := r.ReadString('\\n')\n\tif err != nil {\n\t\treturn []int64{}, err\n\t}\n\n\ti, err := strconv.ParseInt(strings.Trim(line, \"\\n\"), 10, 32)\n\tif err != nil {\n\t\treturn []int64{}, err\n\t}\n\tret = append(ret, i)\n\n\treturn ret, nil\n}\n\n// Parse Hex to uint32 without error\nfunc HexToUint32(hex string) uint32 {\n\tvv, _ := strconv.ParseUint(hex, 16, 32)\n\treturn uint32(vv)\n}\n\n// Parse to int32 without error\nfunc mustParseInt32(val string) int32 {\n\tvv, _ := strconv.ParseInt(val, 10, 32)\n\treturn int32(vv)\n}\n\n// Parse to uint64 without error\nfunc mustParseUint64(val string) uint64 {\n\tvv, _ := strconv.ParseInt(val, 10, 64)\n\treturn uint64(vv)\n}\n\n// Parse to Float64 without error\nfunc mustParseFloat64(val string) float64 {\n\tvv, _ := strconv.ParseFloat(val, 64)\n\treturn vv\n}\n\n// StringsHas checks the target string slice contains src or not\nfunc StringsHas(target []string, src string) bool {\n\tfor _, t := range target {\n\t\tif strings.TrimSpace(t) == src {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// StringsContains checks the src in any string of the target string slice\nfunc StringsContains(target []string, src string) bool {\n\tfor _, t := range target {\n\t\tif strings.Contains(t, src) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// IntContains checks the src in any int of the target int slice.\nfunc IntContains(target []int, src int) bool {\n\tfor _, t := range target {\n\t\tif src == t {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// get struct attributes.\n// This method is used only for debugging platform dependent code.\nfunc attributes(m interface{}) map[string]reflect.Type {\n\ttyp := reflect.TypeOf(m)\n\tif typ.Kind() == reflect.Ptr {\n\t\ttyp = typ.Elem()\n\t}\n\n\tattrs := make(map[string]reflect.Type)\n\tif typ.Kind() != reflect.Struct {\n\t\treturn nil\n\t}\n\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\tp := typ.Field(i)\n\t\tif !p.Anonymous {\n\t\t\tattrs[p.Name] = p.Type\n\t\t}\n\t}\n\n\treturn attrs\n}\n\nfunc PathExists(filename string) bool {\n\tif _, err := os.Stat(filename); err == nil {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// PathExistsWithContents returns the filename exists and it is not empty\nfunc PathExistsWithContents(filename string) bool {\n\tinfo, err := os.Stat(filename)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn info.Size() > 4 && !info.IsDir() // at least 4 bytes\n}\n\n// GetEnvWithContext retrieves the environment variable key. If it does not exist it returns the default.\n// The context may optionally contain a map superseding os.EnvKey.\nfunc GetEnvWithContext(ctx context.Context, key string, dfault string, combineWith ...string) string {\n\tvar value string\n\tif env, ok := ctx.Value(common.EnvKey).(common.EnvMap); ok {\n\t\tvalue = env[common.EnvKeyType(key)]\n\t}\n\tif value == \"\" {\n\t\tvalue = os.Getenv(key)\n\t}\n\tif value == \"\" {\n\t\tvalue = dfault\n\t}\n\n\treturn combine(value, combineWith)\n}\n\n// GetEnv retrieves the environment variable key. If it does not exist it returns the default.\nfunc GetEnv(key string, dfault string, combineWith ...string) string {\n\tvalue := os.Getenv(key)\n\tif value == \"\" {\n\t\tvalue = dfault\n\t}\n\n\treturn combine(value, combineWith)\n}\n\nfunc combine(value string, combineWith []string) string {\n\tswitch len(combineWith) {\n\tcase 0:\n\t\treturn value\n\tcase 1:\n\t\treturn filepath.Join(value, combineWith[0])\n\tdefault:\n\t\tall := make([]string, len(combineWith)+1)\n\t\tall[0] = value\n\t\tcopy(all[1:], combineWith)\n\t\treturn filepath.Join(all...)\n\t}\n}\n\nfunc HostProc(combineWith ...string) string {\n\treturn GetEnv(\"HOST_PROC\", \"/proc\", combineWith...)\n}\n\nfunc HostSys(combineWith ...string) string {\n\treturn GetEnv(\"HOST_SYS\", \"/sys\", combineWith...)\n}\n\nfunc HostEtc(combineWith ...string) string {\n\treturn GetEnv(\"HOST_ETC\", \"/etc\", combineWith...)\n}\n\nfunc HostVar(combineWith ...string) string {\n\treturn GetEnv(\"HOST_VAR\", \"/var\", combineWith...)\n}\n\nfunc HostRun(combineWith ...string) string {\n\treturn GetEnv(\"HOST_RUN\", \"/run\", combineWith...)\n}\n\nfunc HostDev(combineWith ...string) string {\n\treturn GetEnv(\"HOST_DEV\", \"/dev\", combineWith...)\n}\n\nfunc HostRoot(combineWith ...string) string {\n\treturn GetEnv(\"HOST_ROOT\", \"/\", combineWith...)\n}\n\nfunc HostProcWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_PROC\", \"/proc\", combineWith...)\n}\n\nfunc HostProcMountInfoWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_PROC_MOUNTINFO\", \"\", combineWith...)\n}\n\nfunc HostSysWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_SYS\", \"/sys\", combineWith...)\n}\n\nfunc HostEtcWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_ETC\", \"/etc\", combineWith...)\n}\n\nfunc HostVarWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_VAR\", \"/var\", combineWith...)\n}\n\nfunc HostRunWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_RUN\", \"/run\", combineWith...)\n}\n\nfunc HostDevWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_DEV\", \"/dev\", combineWith...)\n}\n\nfunc HostRootWithContext(ctx context.Context, combineWith ...string) string {\n\treturn GetEnvWithContext(ctx, \"HOST_ROOT\", \"/\", combineWith...)\n}\n\n// getSysctrlEnv sets LC_ALL=C in a list of env vars for use when running\n// sysctl commands (see DoSysctrl).\nfunc getSysctrlEnv(env []string) []string {\n\tfoundLC := false\n\tfor i, line := range env {\n\t\tif strings.HasPrefix(line, \"LC_ALL\") {\n\t\t\tenv[i] = \"LC_ALL=C\"\n\t\t\tfoundLC = true\n\t\t}\n\t}\n\tif !foundLC {\n\t\tenv = append(env, \"LC_ALL=C\")\n\t}\n\treturn env\n}\n\n// Round places rounds the number 'val' to 'n' decimal places\nfunc Round(val float64, n int) float64 {\n\t// Calculate the power of 10 to the n\n\tpow10 := math.Pow(10, float64(n))\n\t// Multiply the value by pow10, round it, then divide it by pow10\n\treturn math.Round(val*pow10) / pow10\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common_darwin.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin\n\npackage common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/ebitengine/purego\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc DoSysctrlWithContext(ctx context.Context, mib string) ([]string, error) {\n\tcmd := exec.CommandContext(ctx, \"sysctl\", \"-n\", mib)\n\tcmd.Env = getSysctrlEnv(os.Environ())\n\tout, err := cmd.Output()\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tv := strings.Replace(string(out), \"{ \", \"\", 1)\n\tv = strings.Replace(string(v), \" }\", \"\", 1)\n\tvalues := strings.Fields(string(v))\n\n\treturn values, nil\n}\n\nfunc CallSyscall(mib []int32) ([]byte, uint64, error) {\n\tmiblen := uint64(len(mib))\n\n\t// get required buffer size\n\tlength := uint64(0)\n\t_, _, err := unix.Syscall6(\n\t\t202, // unix.SYS___SYSCTL https://github.com/golang/sys/blob/76b94024e4b621e672466e8db3d7f084e7ddcad2/unix/zsysnum_darwin_amd64.go#L146\n\t\tuintptr(unsafe.Pointer(&mib[0])),\n\t\tuintptr(miblen),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\tif length == 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\t// get proc info itself\n\tbuf := make([]byte, length)\n\t_, _, err = unix.Syscall6(\n\t\t202, // unix.SYS___SYSCTL https://github.com/golang/sys/blob/76b94024e4b621e672466e8db3d7f084e7ddcad2/unix/zsysnum_darwin_amd64.go#L146\n\t\tuintptr(unsafe.Pointer(&mib[0])),\n\t\tuintptr(miblen),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn buf, length, err\n\t}\n\n\treturn buf, length, nil\n}\n\n// Library represents a dynamic library loaded by purego.\ntype Library struct {\n\taddr  uintptr\n\tpath  string\n\tclose func()\n}\n\n// library paths\nconst (\n\tIOKit          = \"/System/Library/Frameworks/IOKit.framework/IOKit\"\n\tCoreFoundation = \"/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation\"\n\tSystem         = \"/usr/lib/libSystem.B.dylib\"\n)\n\nfunc NewLibrary(path string) (*Library, error) {\n\tlib, err := purego.Dlopen(path, purego.RTLD_LAZY|purego.RTLD_GLOBAL)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcloseFunc := func() {\n\t\tpurego.Dlclose(lib)\n\t}\n\n\treturn &Library{\n\t\taddr:  lib,\n\t\tpath:  path,\n\t\tclose: closeFunc,\n\t}, nil\n}\n\nfunc (lib *Library) Dlsym(symbol string) (uintptr, error) {\n\treturn purego.Dlsym(lib.addr, symbol)\n}\n\nfunc GetFunc[T any](lib *Library, symbol string) T {\n\tvar fptr T\n\tpurego.RegisterLibFunc(&fptr, lib.addr, symbol)\n\treturn fptr\n}\n\nfunc (lib *Library) Close() {\n\tlib.close()\n}\n\n// status codes\nconst (\n\tKERN_SUCCESS = 0\n)\n\n// IOKit functions and symbols.\ntype (\n\tIOServiceGetMatchingServiceFunc       func(mainPort uint32, matching uintptr) uint32\n\tIOServiceGetMatchingServicesFunc      func(mainPort uint32, matching uintptr, existing *uint32) int\n\tIOServiceMatchingFunc                 func(name string) unsafe.Pointer\n\tIOServiceOpenFunc                     func(service, owningTask, connType uint32, connect *uint32) int\n\tIOServiceCloseFunc                    func(connect uint32) int\n\tIOIteratorNextFunc                    func(iterator uint32) uint32\n\tIORegistryEntryGetNameFunc            func(entry uint32, name CStr) int\n\tIORegistryEntryGetParentEntryFunc     func(entry uint32, plane string, parent *uint32) int\n\tIORegistryEntryCreateCFPropertyFunc   func(entry uint32, key, allocator uintptr, options uint32) unsafe.Pointer\n\tIORegistryEntryCreateCFPropertiesFunc func(entry uint32, properties unsafe.Pointer, allocator uintptr, options uint32) int\n\tIOObjectConformsToFunc                func(object uint32, className string) bool\n\tIOObjectReleaseFunc                   func(object uint32) int\n\tIOConnectCallStructMethodFunc         func(connection, selector uint32, inputStruct, inputStructCnt, outputStruct uintptr, outputStructCnt *uintptr) int\n\n\tIOHIDEventSystemClientCreateFunc      func(allocator uintptr) unsafe.Pointer\n\tIOHIDEventSystemClientSetMatchingFunc func(client, match uintptr) int\n\tIOHIDServiceClientCopyEventFunc       func(service uintptr, eventType int64,\n\t\toptions int32, timeout int64) unsafe.Pointer\n\tIOHIDServiceClientCopyPropertyFunc     func(service, property uintptr) unsafe.Pointer\n\tIOHIDEventGetFloatValueFunc            func(event uintptr, field int32) float64\n\tIOHIDEventSystemClientCopyServicesFunc func(client uintptr) unsafe.Pointer\n)\n\nconst (\n\tIOServiceGetMatchingServiceSym       = \"IOServiceGetMatchingService\"\n\tIOServiceGetMatchingServicesSym      = \"IOServiceGetMatchingServices\"\n\tIOServiceMatchingSym                 = \"IOServiceMatching\"\n\tIOServiceOpenSym                     = \"IOServiceOpen\"\n\tIOServiceCloseSym                    = \"IOServiceClose\"\n\tIOIteratorNextSym                    = \"IOIteratorNext\"\n\tIORegistryEntryGetNameSym            = \"IORegistryEntryGetName\"\n\tIORegistryEntryGetParentEntrySym     = \"IORegistryEntryGetParentEntry\"\n\tIORegistryEntryCreateCFPropertySym   = \"IORegistryEntryCreateCFProperty\"\n\tIORegistryEntryCreateCFPropertiesSym = \"IORegistryEntryCreateCFProperties\"\n\tIOObjectConformsToSym                = \"IOObjectConformsTo\"\n\tIOObjectReleaseSym                   = \"IOObjectRelease\"\n\tIOConnectCallStructMethodSym         = \"IOConnectCallStructMethod\"\n\n\tIOHIDEventSystemClientCreateSym       = \"IOHIDEventSystemClientCreate\"\n\tIOHIDEventSystemClientSetMatchingSym  = \"IOHIDEventSystemClientSetMatching\"\n\tIOHIDServiceClientCopyEventSym        = \"IOHIDServiceClientCopyEvent\"\n\tIOHIDServiceClientCopyPropertySym     = \"IOHIDServiceClientCopyProperty\"\n\tIOHIDEventGetFloatValueSym            = \"IOHIDEventGetFloatValue\"\n\tIOHIDEventSystemClientCopyServicesSym = \"IOHIDEventSystemClientCopyServices\"\n)\n\nconst (\n\tKIOMainPortDefault = 0\n\n\tKIOHIDEventTypeTemperature = 15\n\n\tKNilOptions = 0\n)\n\nconst (\n\tKIOMediaWholeKey = \"Media\"\n\tKIOServicePlane  = \"IOService\"\n)\n\n// CoreFoundation functions and symbols.\ntype (\n\tCFGetTypeIDFunc        func(cf uintptr) int32\n\tCFNumberCreateFunc     func(allocator uintptr, theType int32, valuePtr uintptr) unsafe.Pointer\n\tCFNumberGetValueFunc   func(num uintptr, theType int32, valuePtr uintptr) bool\n\tCFDictionaryCreateFunc func(allocator uintptr, keys, values *unsafe.Pointer, numValues int32,\n\t\tkeyCallBacks, valueCallBacks uintptr) unsafe.Pointer\n\tCFDictionaryAddValueFunc      func(theDict, key, value uintptr)\n\tCFDictionaryGetValueFunc      func(theDict, key uintptr) unsafe.Pointer\n\tCFArrayGetCountFunc           func(theArray uintptr) int32\n\tCFArrayGetValueAtIndexFunc    func(theArray uintptr, index int32) unsafe.Pointer\n\tCFStringCreateMutableFunc     func(alloc uintptr, maxLength int32) unsafe.Pointer\n\tCFStringGetLengthFunc         func(theString uintptr) int32\n\tCFStringGetCStringFunc        func(theString uintptr, buffer CStr, bufferSize int32, encoding uint32)\n\tCFStringCreateWithCStringFunc func(alloc uintptr, cStr string, encoding uint32) unsafe.Pointer\n\tCFDataGetLengthFunc           func(theData uintptr) int32\n\tCFDataGetBytePtrFunc          func(theData uintptr) unsafe.Pointer\n\tCFReleaseFunc                 func(cf uintptr)\n)\n\nconst (\n\tCFGetTypeIDSym               = \"CFGetTypeID\"\n\tCFNumberCreateSym            = \"CFNumberCreate\"\n\tCFNumberGetValueSym          = \"CFNumberGetValue\"\n\tCFDictionaryCreateSym        = \"CFDictionaryCreate\"\n\tCFDictionaryAddValueSym      = \"CFDictionaryAddValue\"\n\tCFDictionaryGetValueSym      = \"CFDictionaryGetValue\"\n\tCFArrayGetCountSym           = \"CFArrayGetCount\"\n\tCFArrayGetValueAtIndexSym    = \"CFArrayGetValueAtIndex\"\n\tCFStringCreateMutableSym     = \"CFStringCreateMutable\"\n\tCFStringGetLengthSym         = \"CFStringGetLength\"\n\tCFStringGetCStringSym        = \"CFStringGetCString\"\n\tCFStringCreateWithCStringSym = \"CFStringCreateWithCString\"\n\tCFDataGetLengthSym           = \"CFDataGetLength\"\n\tCFDataGetBytePtrSym          = \"CFDataGetBytePtr\"\n\tCFReleaseSym                 = \"CFRelease\"\n)\n\nconst (\n\tKCFStringEncodingUTF8 = 0x08000100\n\tKCFNumberSInt64Type   = 4\n\tKCFNumberIntType      = 9\n\tKCFAllocatorDefault   = 0\n)\n\n// Kernel functions and symbols.\ntype MachTimeBaseInfo struct {\n\tNumer uint32\n\tDenom uint32\n}\n\ntype (\n\tHostProcessorInfoFunc func(host uint32, flavor int32, outProcessorCount *uint32, outProcessorInfo uintptr,\n\t\toutProcessorInfoCnt *uint32) int\n\tHostStatisticsFunc   func(host uint32, flavor int32, hostInfoOut uintptr, hostInfoOutCnt *uint32) int\n\tMachHostSelfFunc     func() uint32\n\tMachTaskSelfFunc     func() uint32\n\tMachTimeBaseInfoFunc func(info uintptr) int\n\tVMDeallocateFunc     func(targetTask uint32, vmAddress, vmSize uintptr) int\n)\n\nconst (\n\tHostProcessorInfoSym = \"host_processor_info\"\n\tHostStatisticsSym    = \"host_statistics\"\n\tMachHostSelfSym      = \"mach_host_self\"\n\tMachTaskSelfSym      = \"mach_task_self\"\n\tMachTimeBaseInfoSym  = \"mach_timebase_info\"\n\tVMDeallocateSym      = \"vm_deallocate\"\n)\n\nconst (\n\tCTL_KERN       = 1\n\tKERN_ARGMAX    = 8\n\tKERN_PROCARGS2 = 49\n\n\tHOST_VM_INFO       = 2\n\tHOST_CPU_LOAD_INFO = 3\n\n\tHOST_VM_INFO_COUNT = 0xf\n)\n\n// System functions and symbols.\ntype (\n\tProcPidPathFunc func(pid int32, buffer uintptr, bufferSize uint32) int32\n\tProcPidInfoFunc func(pid, flavor int32, arg uint64, buffer uintptr, bufferSize int32) int32\n)\n\nconst (\n\tSysctlSym      = \"sysctl\"\n\tProcPidPathSym = \"proc_pidpath\"\n\tProcPidInfoSym = \"proc_pidinfo\"\n)\n\nconst (\n\tMAXPATHLEN               = 1024\n\tPROC_PIDPATHINFO_MAXSIZE = 4 * MAXPATHLEN\n\tPROC_PIDTASKINFO         = 4\n\tPROC_PIDVNODEPATHINFO    = 9\n)\n\n// SMC represents a SMC instance.\ntype SMC struct {\n\tlib        *Library\n\tconn       uint32\n\tcallStruct IOConnectCallStructMethodFunc\n}\n\nconst ioServiceSMC = \"AppleSMC\"\n\nconst (\n\tKSMCUserClientOpen  = 0\n\tKSMCUserClientClose = 1\n\tKSMCHandleYPCEvent  = 2\n\tKSMCReadKey         = 5\n\tKSMCWriteKey        = 6\n\tKSMCGetKeyCount     = 7\n\tKSMCGetKeyFromIndex = 8\n\tKSMCGetKeyInfo      = 9\n)\n\nconst (\n\tKSMCSuccess     = 0\n\tKSMCError       = 1\n\tKSMCKeyNotFound = 132\n)\n\nfunc NewSMC(ioKit *Library) (*SMC, error) {\n\tif ioKit.path != IOKit {\n\t\treturn nil, fmt.Errorf(\"library is not IOKit\")\n\t}\n\n\tioServiceGetMatchingService := GetFunc[IOServiceGetMatchingServiceFunc](ioKit, IOServiceGetMatchingServiceSym)\n\tioServiceMatching := GetFunc[IOServiceMatchingFunc](ioKit, IOServiceMatchingSym)\n\tioServiceOpen := GetFunc[IOServiceOpenFunc](ioKit, IOServiceOpenSym)\n\tioObjectRelease := GetFunc[IOObjectReleaseFunc](ioKit, IOObjectReleaseSym)\n\tmachTaskSelf := GetFunc[MachTaskSelfFunc](ioKit, MachTaskSelfSym)\n\n\tioConnectCallStructMethod := GetFunc[IOConnectCallStructMethodFunc](ioKit, IOConnectCallStructMethodSym)\n\n\tservice := ioServiceGetMatchingService(0, uintptr(ioServiceMatching(ioServiceSMC)))\n\tif service == 0 {\n\t\treturn nil, fmt.Errorf(\"ERROR: %s NOT FOUND\", ioServiceSMC)\n\t}\n\n\tvar conn uint32\n\tif result := ioServiceOpen(service, machTaskSelf(), 0, &conn); result != 0 {\n\t\treturn nil, fmt.Errorf(\"ERROR: IOServiceOpen failed\")\n\t}\n\n\tioObjectRelease(service)\n\treturn &SMC{\n\t\tlib:        ioKit,\n\t\tconn:       conn,\n\t\tcallStruct: ioConnectCallStructMethod,\n\t}, nil\n}\n\nfunc (s *SMC) CallStruct(selector uint32, inputStruct, inputStructCnt, outputStruct uintptr, outputStructCnt *uintptr) int {\n\treturn s.callStruct(s.conn, selector, inputStruct, inputStructCnt, outputStruct, outputStructCnt)\n}\n\nfunc (s *SMC) Close() error {\n\tioServiceClose := GetFunc[IOServiceCloseFunc](s.lib, IOServiceCloseSym)\n\n\tif result := ioServiceClose(s.conn); result != 0 {\n\t\treturn fmt.Errorf(\"ERROR: IOServiceClose failed\")\n\t}\n\treturn nil\n}\n\ntype CStr []byte\n\nfunc NewCStr(length int32) CStr {\n\treturn make(CStr, length)\n}\n\nfunc (s CStr) Length() int32 {\n\t// Include null terminator to make CFStringGetCString properly functions\n\treturn int32(len(s)) + 1\n}\n\nfunc (s CStr) Ptr() *byte {\n\tif len(s) < 1 {\n\t\treturn nil\n\t}\n\n\treturn &s[0]\n}\n\nfunc (c CStr) Addr() uintptr {\n\treturn uintptr(unsafe.Pointer(c.Ptr()))\n}\n\nfunc (s CStr) GoString() string {\n\tif s == nil {\n\t\treturn \"\"\n\t}\n\n\tvar length int\n\tfor _, char := range s {\n\t\tif char == '\\x00' {\n\t\t\tbreak\n\t\t}\n\t\tlength++\n\t}\n\treturn string(s[:length])\n}\n\n// https://github.com/ebitengine/purego/blob/main/internal/strings/strings.go#L26\nfunc GoString(cStr *byte) string {\n\tif cStr == nil {\n\t\treturn \"\"\n\t}\n\tvar length int\n\tfor {\n\t\tif *(*byte)(unsafe.Add(unsafe.Pointer(cStr), uintptr(length))) == '\\x00' {\n\t\t\tbreak\n\t\t}\n\t\tlength++\n\t}\n\treturn string(unsafe.Slice(cStr, length))\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common_freebsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build freebsd || openbsd\n\npackage common\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc SysctlUint(mib string) (uint64, error) {\n\tbuf, err := unix.SysctlRaw(mib)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif len(buf) == 8 { // 64 bit\n\t\treturn *(*uint64)(unsafe.Pointer(&buf[0])), nil\n\t}\n\tif len(buf) == 4 { // 32bit\n\t\tt := *(*uint32)(unsafe.Pointer(&buf[0]))\n\t\treturn uint64(t), nil\n\t}\n\treturn 0, fmt.Errorf(\"unexpected size: %s, %d\", mib, len(buf))\n}\n\nfunc DoSysctrl(mib string) ([]string, error) {\n\tcmd := exec.Command(\"sysctl\", \"-n\", mib)\n\tcmd.Env = getSysctrlEnv(os.Environ())\n\tout, err := cmd.Output()\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tv := strings.Replace(string(out), \"{ \", \"\", 1)\n\tv = strings.Replace(string(v), \" }\", \"\", 1)\n\tvalues := strings.Fields(string(v))\n\n\treturn values, nil\n}\n\nfunc CallSyscall(mib []int32) ([]byte, uint64, error) {\n\tmibptr := unsafe.Pointer(&mib[0])\n\tmiblen := uint64(len(mib))\n\n\t// get required buffer size\n\tlength := uint64(0)\n\t_, _, err := unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\tif length == 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\t// get proc info itself\n\tbuf := make([]byte, length)\n\t_, _, err = unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn buf, length, err\n\t}\n\n\treturn buf, length, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common_linux.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux\n\npackage common\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"time\"\n)\n\n// cachedBootTime must be accessed via atomic.Load/StoreUint64\nvar cachedBootTime uint64\n\nfunc DoSysctrl(mib string) ([]string, error) {\n\tcmd := exec.Command(\"sysctl\", \"-n\", mib)\n\tcmd.Env = getSysctrlEnv(os.Environ())\n\tout, err := cmd.Output()\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tv := strings.Replace(string(out), \"{ \", \"\", 1)\n\tv = strings.Replace(string(v), \" }\", \"\", 1)\n\tvalues := strings.Fields(string(v))\n\n\treturn values, nil\n}\n\nfunc NumProcs() (uint64, error) {\n\treturn NumProcsWithContext(context.Background())\n}\n\nfunc NumProcsWithContext(ctx context.Context) (uint64, error) {\n\tf, err := os.Open(HostProcWithContext(ctx))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer f.Close()\n\n\tlist, err := f.Readdirnames(-1)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tvar cnt uint64\n\n\tfor _, v := range list {\n\t\tif _, err = strconv.ParseUint(v, 10, 64); err == nil {\n\t\t\tcnt++\n\t\t}\n\t}\n\n\treturn cnt, nil\n}\n\nfunc BootTimeWithContext(ctx context.Context, enableCache bool) (uint64, error) {\n\tif enableCache {\n\t\tt := atomic.LoadUint64(&cachedBootTime)\n\t\tif t != 0 {\n\t\t\treturn t, nil\n\t\t}\n\t}\n\n\tsystem, role, err := VirtualizationWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tuseStatFile := true\n\tif system == \"lxc\" && role == \"guest\" {\n\t\t// if lxc, /proc/uptime is used.\n\t\tuseStatFile = false\n\t} else if system == \"docker\" && role == \"guest\" {\n\t\t// also docker, guest\n\t\tuseStatFile = false\n\t}\n\n\tif useStatFile {\n\t\tt, err := readBootTimeStat(ctx)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif enableCache {\n\t\t\tatomic.StoreUint64(&cachedBootTime, t)\n\t\t}\n\n\t\treturn t, nil\n\t}\n\n\tfilename := HostProcWithContext(ctx, \"uptime\")\n\tlines, err := ReadLines(filename)\n\tif err != nil {\n\t\treturn handleBootTimeFileReadErr(err)\n\t}\n\tcurrentTime := float64(time.Now().UnixNano()) / float64(time.Second)\n\n\tif len(lines) != 1 {\n\t\treturn 0, errors.New(\"wrong uptime format\")\n\t}\n\tf := strings.Fields(lines[0])\n\tb, err := strconv.ParseFloat(f[0], 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tt := currentTime - b\n\n\tif enableCache {\n\t\tatomic.StoreUint64(&cachedBootTime, uint64(t))\n\t}\n\n\treturn uint64(t), nil\n}\n\nfunc handleBootTimeFileReadErr(err error) (uint64, error) {\n\tif os.IsPermission(err) {\n\t\tvar info syscall.Sysinfo_t\n\t\terr := syscall.Sysinfo(&info)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tcurrentTime := time.Now().UnixNano() / int64(time.Second)\n\t\tt := currentTime - int64(info.Uptime)\n\t\treturn uint64(t), nil\n\t}\n\treturn 0, err\n}\n\nfunc readBootTimeStat(ctx context.Context) (uint64, error) {\n\tfilename := HostProcWithContext(ctx, \"stat\")\n\tline, err := ReadLine(filename, \"btime\")\n\tif err != nil {\n\t\treturn handleBootTimeFileReadErr(err)\n\t}\n\tif strings.HasPrefix(line, \"btime\") {\n\t\tf := strings.Fields(line)\n\t\tif len(f) != 2 {\n\t\t\treturn 0, errors.New(\"wrong btime format\")\n\t\t}\n\t\tb, err := strconv.ParseInt(f[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tt := uint64(b)\n\t\treturn t, nil\n\t}\n\treturn 0, errors.New(\"could not find btime\")\n}\n\nfunc Virtualization() (string, string, error) {\n\treturn VirtualizationWithContext(context.Background())\n}\n\n// required variables for concurrency safe virtualization caching\nvar (\n\tcachedVirtMap   map[string]string\n\tcachedVirtMutex sync.RWMutex\n\tcachedVirtOnce  sync.Once\n)\n\nfunc VirtualizationWithContext(ctx context.Context) (string, string, error) {\n\tvar system, role string\n\n\t// if cached already, return from cache\n\tcachedVirtMutex.RLock() // unlock won't be deferred so concurrent reads don't wait for long\n\tif cachedVirtMap != nil {\n\t\tcachedSystem, cachedRole := cachedVirtMap[\"system\"], cachedVirtMap[\"role\"]\n\t\tcachedVirtMutex.RUnlock()\n\t\treturn cachedSystem, cachedRole, nil\n\t}\n\tcachedVirtMutex.RUnlock()\n\n\tfilename := HostProcWithContext(ctx, \"xen\")\n\tif PathExists(filename) {\n\t\tsystem = \"xen\"\n\t\trole = \"guest\" // assume guest\n\n\t\tif PathExists(filepath.Join(filename, \"capabilities\")) {\n\t\t\tcontents, err := ReadLines(filepath.Join(filename, \"capabilities\"))\n\t\t\tif err == nil {\n\t\t\t\tif StringsContains(contents, \"control_d\") {\n\t\t\t\t\trole = \"host\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfilename = HostProcWithContext(ctx, \"modules\")\n\tif PathExists(filename) {\n\t\tcontents, err := ReadLines(filename)\n\t\tif err == nil {\n\t\t\tif StringsContains(contents, \"kvm\") {\n\t\t\t\tsystem = \"kvm\"\n\t\t\t\trole = \"host\"\n\t\t\t} else if StringsContains(contents, \"hv_util\") {\n\t\t\t\tsystem = \"hyperv\"\n\t\t\t\trole = \"guest\"\n\t\t\t} else if StringsContains(contents, \"vboxdrv\") {\n\t\t\t\tsystem = \"vbox\"\n\t\t\t\trole = \"host\"\n\t\t\t} else if StringsContains(contents, \"vboxguest\") {\n\t\t\t\tsystem = \"vbox\"\n\t\t\t\trole = \"guest\"\n\t\t\t} else if StringsContains(contents, \"vmware\") {\n\t\t\t\tsystem = \"vmware\"\n\t\t\t\trole = \"guest\"\n\t\t\t}\n\t\t}\n\t}\n\n\tfilename = HostProcWithContext(ctx, \"cpuinfo\")\n\tif PathExists(filename) {\n\t\tcontents, err := ReadLines(filename)\n\t\tif err == nil {\n\t\t\tif StringsContains(contents, \"QEMU Virtual CPU\") ||\n\t\t\t\tStringsContains(contents, \"Common KVM processor\") ||\n\t\t\t\tStringsContains(contents, \"Common 32-bit KVM processor\") {\n\t\t\t\tsystem = \"kvm\"\n\t\t\t\trole = \"guest\"\n\t\t\t}\n\t\t}\n\t}\n\n\tfilename = HostProcWithContext(ctx, \"bus/pci/devices\")\n\tif PathExists(filename) {\n\t\tcontents, err := ReadLines(filename)\n\t\tif err == nil {\n\t\t\tif StringsContains(contents, \"virtio-pci\") {\n\t\t\t\trole = \"guest\"\n\t\t\t}\n\t\t}\n\t}\n\n\tfilename = HostProcWithContext(ctx)\n\tif PathExists(filepath.Join(filename, \"bc\", \"0\")) {\n\t\tsystem = \"openvz\"\n\t\trole = \"host\"\n\t} else if PathExists(filepath.Join(filename, \"vz\")) {\n\t\tsystem = \"openvz\"\n\t\trole = \"guest\"\n\t}\n\n\t// not use dmidecode because it requires root\n\tif PathExists(filepath.Join(filename, \"self\", \"status\")) {\n\t\tcontents, err := ReadLines(filepath.Join(filename, \"self\", \"status\"))\n\t\tif err == nil {\n\t\t\tif StringsContains(contents, \"s_context:\") ||\n\t\t\t\tStringsContains(contents, \"VxID:\") {\n\t\t\t\tsystem = \"linux-vserver\"\n\t\t\t}\n\t\t\t// TODO: guest or host\n\t\t}\n\t}\n\n\tif PathExists(filepath.Join(filename, \"1\", \"environ\")) {\n\t\tcontents, err := ReadFile(filepath.Join(filename, \"1\", \"environ\"))\n\n\t\tif err == nil {\n\t\t\tif strings.Contains(contents, \"container=lxc\") {\n\t\t\t\tsystem = \"lxc\"\n\t\t\t\trole = \"guest\"\n\t\t\t}\n\t\t}\n\t}\n\n\tif PathExists(filepath.Join(filename, \"self\", \"cgroup\")) {\n\t\tcontents, err := ReadLines(filepath.Join(filename, \"self\", \"cgroup\"))\n\t\tif err == nil {\n\t\t\tif StringsContains(contents, \"lxc\") {\n\t\t\t\tsystem = \"lxc\"\n\t\t\t\trole = \"guest\"\n\t\t\t} else if StringsContains(contents, \"docker\") {\n\t\t\t\tsystem = \"docker\"\n\t\t\t\trole = \"guest\"\n\t\t\t} else if StringsContains(contents, \"machine-rkt\") {\n\t\t\t\tsystem = \"rkt\"\n\t\t\t\trole = \"guest\"\n\t\t\t} else if PathExists(\"/usr/bin/lxc-version\") {\n\t\t\t\tsystem = \"lxc\"\n\t\t\t\trole = \"host\"\n\t\t\t}\n\t\t}\n\t}\n\n\tif PathExists(HostEtcWithContext(ctx, \"os-release\")) {\n\t\tp, _, err := GetOSReleaseWithContext(ctx)\n\t\tif err == nil && p == \"coreos\" {\n\t\t\tsystem = \"rkt\" // Is it true?\n\t\t\trole = \"host\"\n\t\t}\n\t}\n\n\tif PathExists(HostRootWithContext(ctx, \".dockerenv\")) {\n\t\tsystem = \"docker\"\n\t\trole = \"guest\"\n\t}\n\n\t// before returning for the first time, cache the system and role\n\tcachedVirtOnce.Do(func() {\n\t\tcachedVirtMutex.Lock()\n\t\tdefer cachedVirtMutex.Unlock()\n\t\tcachedVirtMap = map[string]string{\n\t\t\t\"system\": system,\n\t\t\t\"role\":   role,\n\t\t}\n\t})\n\n\treturn system, role, nil\n}\n\nfunc GetOSRelease() (platform string, version string, err error) {\n\treturn GetOSReleaseWithContext(context.Background())\n}\n\nfunc GetOSReleaseWithContext(ctx context.Context) (platform string, version string, err error) {\n\tcontents, err := ReadLines(HostEtcWithContext(ctx, \"os-release\"))\n\tif err != nil {\n\t\treturn \"\", \"\", nil // return empty\n\t}\n\tfor _, line := range contents {\n\t\tfield := strings.Split(line, \"=\")\n\t\tif len(field) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch field[0] {\n\t\tcase \"ID\": // use ID for lowercase\n\t\t\tplatform = trimQuotes(field[1])\n\t\tcase \"VERSION_ID\":\n\t\t\tversion = trimQuotes(field[1])\n\t\t}\n\t}\n\n\t// cleanup amazon ID\n\tif platform == \"amzn\" {\n\t\tplatform = \"amazon\"\n\t}\n\n\treturn platform, version, nil\n}\n\n// Remove quotes of the source string\nfunc trimQuotes(s string) string {\n\tif len(s) >= 2 {\n\t\tif s[0] == '\"' && s[len(s)-1] == '\"' {\n\t\t\treturn s[1 : len(s)-1]\n\t\t}\n\t}\n\treturn s\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common_netbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build netbsd\n\npackage common\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc DoSysctrl(mib string) ([]string, error) {\n\tcmd := exec.Command(\"sysctl\", \"-n\", mib)\n\tcmd.Env = getSysctrlEnv(os.Environ())\n\tout, err := cmd.Output()\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tv := strings.Replace(string(out), \"{ \", \"\", 1)\n\tv = strings.Replace(string(v), \" }\", \"\", 1)\n\tvalues := strings.Fields(string(v))\n\n\treturn values, nil\n}\n\nfunc CallSyscall(mib []int32) ([]byte, uint64, error) {\n\tmibptr := unsafe.Pointer(&mib[0])\n\tmiblen := uint64(len(mib))\n\n\t// get required buffer size\n\tlength := uint64(0)\n\t_, _, err := unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\tif length == 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\t// get proc info itself\n\tbuf := make([]byte, length)\n\t_, _, err = unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn buf, length, err\n\t}\n\n\treturn buf, length, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common_openbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd\n\npackage common\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc DoSysctrl(mib string) ([]string, error) {\n\tcmd := exec.Command(\"sysctl\", \"-n\", mib)\n\tcmd.Env = getSysctrlEnv(os.Environ())\n\tout, err := cmd.Output()\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\tv := strings.Replace(string(out), \"{ \", \"\", 1)\n\tv = strings.Replace(string(v), \" }\", \"\", 1)\n\tvalues := strings.Fields(string(v))\n\n\treturn values, nil\n}\n\nfunc CallSyscall(mib []int32) ([]byte, uint64, error) {\n\tmibptr := unsafe.Pointer(&mib[0])\n\tmiblen := uint64(len(mib))\n\n\t// get required buffer size\n\tlength := uint64(0)\n\t_, _, err := unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\tif length == 0 {\n\t\tvar b []byte\n\t\treturn b, length, err\n\t}\n\t// get proc info itself\n\tbuf := make([]byte, length)\n\t_, _, err = unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn buf, length, err\n\t}\n\n\treturn buf, length, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common_unix.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux || freebsd || darwin || openbsd\n\npackage common\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nfunc CallLsofWithContext(ctx context.Context, invoke Invoker, pid int32, args ...string) ([]string, error) {\n\tvar cmd []string\n\tif pid == 0 { // will get from all processes.\n\t\tcmd = []string{\"-a\", \"-n\", \"-P\"}\n\t} else {\n\t\tcmd = []string{\"-a\", \"-n\", \"-P\", \"-p\", strconv.Itoa(int(pid))}\n\t}\n\tcmd = append(cmd, args...)\n\tout, err := invoke.CommandWithContext(ctx, \"lsof\", cmd...)\n\tif err != nil {\n\t\tif errors.Is(err, exec.ErrNotFound) {\n\t\t\treturn []string{}, err\n\t\t}\n\t\t// if no pid found, lsof returns code 1.\n\t\tif err.Error() == \"exit status 1\" && len(out) == 0 {\n\t\t\treturn []string{}, nil\n\t\t}\n\t}\n\tlines := strings.Split(string(out), \"\\n\")\n\n\tvar ret []string\n\tfor _, l := range lines[1:] {\n\t\tif len(l) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, l)\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/common_windows.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build windows\n\npackage common\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/yusufpapurcu/wmi\"\n\t\"golang.org/x/sys/windows\"\n)\n\n// for double values\ntype PDH_FMT_COUNTERVALUE_DOUBLE struct {\n\tCStatus     uint32\n\tDoubleValue float64\n}\n\n// for 64 bit integer values\ntype PDH_FMT_COUNTERVALUE_LARGE struct {\n\tCStatus    uint32\n\tLargeValue int64\n}\n\n// for long values\ntype PDH_FMT_COUNTERVALUE_LONG struct {\n\tCStatus   uint32\n\tLongValue int32\n\tpadding   [4]byte\n}\n\n// windows system const\nconst (\n\tERROR_SUCCESS        = 0\n\tERROR_FILE_NOT_FOUND = 2\n\tDRIVE_REMOVABLE      = 2\n\tDRIVE_FIXED          = 3\n\tHKEY_LOCAL_MACHINE   = 0x80000002\n\tRRF_RT_REG_SZ        = 0x00000002\n\tRRF_RT_REG_DWORD     = 0x00000010\n\tPDH_FMT_LONG         = 0x00000100\n\tPDH_FMT_DOUBLE       = 0x00000200\n\tPDH_FMT_LARGE        = 0x00000400\n\tPDH_INVALID_DATA     = 0xc0000bc6\n\tPDH_INVALID_HANDLE   = 0xC0000bbc\n\tPDH_NO_DATA          = 0x800007d5\n\n\tSTATUS_BUFFER_OVERFLOW      = 0x80000005\n\tSTATUS_BUFFER_TOO_SMALL     = 0xC0000023\n\tSTATUS_INFO_LENGTH_MISMATCH = 0xC0000004\n)\n\nconst (\n\tProcessBasicInformation = 0\n\tProcessWow64Information = 26\n\tProcessQueryInformation = windows.PROCESS_DUP_HANDLE | windows.PROCESS_QUERY_INFORMATION\n\n\tSystemExtendedHandleInformationClass = 64\n)\n\nvar (\n\tModkernel32 = windows.NewLazySystemDLL(\"kernel32.dll\")\n\tModNt       = windows.NewLazySystemDLL(\"ntdll.dll\")\n\tModPdh      = windows.NewLazySystemDLL(\"pdh.dll\")\n\tModPsapi    = windows.NewLazySystemDLL(\"psapi.dll\")\n\n\tProcGetSystemTimes                   = Modkernel32.NewProc(\"GetSystemTimes\")\n\tProcNtQuerySystemInformation         = ModNt.NewProc(\"NtQuerySystemInformation\")\n\tProcRtlGetNativeSystemInformation    = ModNt.NewProc(\"RtlGetNativeSystemInformation\")\n\tProcRtlNtStatusToDosError            = ModNt.NewProc(\"RtlNtStatusToDosError\")\n\tProcNtQueryInformationProcess        = ModNt.NewProc(\"NtQueryInformationProcess\")\n\tProcNtReadVirtualMemory              = ModNt.NewProc(\"NtReadVirtualMemory\")\n\tProcNtWow64QueryInformationProcess64 = ModNt.NewProc(\"NtWow64QueryInformationProcess64\")\n\tProcNtWow64ReadVirtualMemory64       = ModNt.NewProc(\"NtWow64ReadVirtualMemory64\")\n\n\tPdhOpenQuery                = ModPdh.NewProc(\"PdhOpenQuery\")\n\tPdhAddEnglishCounterW       = ModPdh.NewProc(\"PdhAddEnglishCounterW\")\n\tPdhCollectQueryData         = ModPdh.NewProc(\"PdhCollectQueryData\")\n\tPdhGetFormattedCounterValue = ModPdh.NewProc(\"PdhGetFormattedCounterValue\")\n\tPdhCloseQuery               = ModPdh.NewProc(\"PdhCloseQuery\")\n\n\tprocQueryDosDeviceW = Modkernel32.NewProc(\"QueryDosDeviceW\")\n)\n\ntype FILETIME struct {\n\tDwLowDateTime  uint32\n\tDwHighDateTime uint32\n}\n\n// borrowed from net/interface_windows.go\nfunc BytePtrToString(p *uint8) string {\n\ta := (*[10000]uint8)(unsafe.Pointer(p))\n\ti := 0\n\tfor a[i] != 0 {\n\t\ti++\n\t}\n\treturn string(a[:i])\n}\n\n// CounterInfo struct is used to track a windows performance counter\n// copied from https://github.com/mackerelio/mackerel-agent/\ntype CounterInfo struct {\n\tPostName    string\n\tCounterName string\n\tCounter     windows.Handle\n}\n\n// CreateQuery with a PdhOpenQuery call\n// copied from https://github.com/mackerelio/mackerel-agent/\nfunc CreateQuery() (windows.Handle, error) {\n\tvar query windows.Handle\n\tr, _, err := PdhOpenQuery.Call(0, 0, uintptr(unsafe.Pointer(&query)))\n\tif r != 0 {\n\t\treturn 0, err\n\t}\n\treturn query, nil\n}\n\n// CreateCounter with a PdhAddEnglishCounterW call\nfunc CreateCounter(query windows.Handle, pname, cname string) (*CounterInfo, error) {\n\tvar counter windows.Handle\n\tr, _, err := PdhAddEnglishCounterW.Call(\n\t\tuintptr(query),\n\t\tuintptr(unsafe.Pointer(windows.StringToUTF16Ptr(cname))),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&counter)))\n\tif r != 0 {\n\t\treturn nil, err\n\t}\n\treturn &CounterInfo{\n\t\tPostName:    pname,\n\t\tCounterName: cname,\n\t\tCounter:     counter,\n\t}, nil\n}\n\n// GetCounterValue get counter value from handle\n// adapted from https://github.com/mackerelio/mackerel-agent/\nfunc GetCounterValue(counter windows.Handle) (float64, error) {\n\tvar value PDH_FMT_COUNTERVALUE_DOUBLE\n\tr, _, err := PdhGetFormattedCounterValue.Call(uintptr(counter), PDH_FMT_DOUBLE, uintptr(0), uintptr(unsafe.Pointer(&value)))\n\tif r != 0 && r != PDH_INVALID_DATA {\n\t\treturn 0.0, err\n\t}\n\treturn value.DoubleValue, nil\n}\n\ntype Win32PerformanceCounter struct {\n\tPostName    string\n\tCounterName string\n\tQuery       windows.Handle\n\tCounter     windows.Handle\n}\n\nfunc NewWin32PerformanceCounter(postName, counterName string) (*Win32PerformanceCounter, error) {\n\tquery, err := CreateQuery()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcounter := Win32PerformanceCounter{\n\t\tQuery:       query,\n\t\tPostName:    postName,\n\t\tCounterName: counterName,\n\t}\n\tr, _, err := PdhAddEnglishCounterW.Call(\n\t\tuintptr(counter.Query),\n\t\tuintptr(unsafe.Pointer(windows.StringToUTF16Ptr(counter.CounterName))),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&counter.Counter)),\n\t)\n\tif r != 0 {\n\t\treturn nil, err\n\t}\n\treturn &counter, nil\n}\n\nfunc (w *Win32PerformanceCounter) GetValue() (float64, error) {\n\tr, _, err := PdhCollectQueryData.Call(uintptr(w.Query))\n\tif r != 0 && err != nil {\n\t\tif r == PDH_NO_DATA {\n\t\t\treturn 0.0, fmt.Errorf(\"%w: this counter has not data\", err)\n\t\t}\n\t\treturn 0.0, err\n\t}\n\n\treturn GetCounterValue(w.Counter)\n}\n\nfunc ProcessorQueueLengthCounter() (*Win32PerformanceCounter, error) {\n\treturn NewWin32PerformanceCounter(\"processor_queue_length\", `\\System\\Processor Queue Length`)\n}\n\n// WMIQueryWithContext - wraps wmi.Query with a timed-out context to avoid hanging\nfunc WMIQueryWithContext(ctx context.Context, query string, dst interface{}, connectServerArgs ...interface{}) error {\n\tif _, ok := ctx.Deadline(); !ok {\n\t\tctxTimeout, cancel := context.WithTimeout(ctx, Timeout)\n\t\tdefer cancel()\n\t\tctx = ctxTimeout\n\t}\n\n\terrChan := make(chan error, 1)\n\tgo func() {\n\t\terrChan <- wmi.Query(query, dst, connectServerArgs...)\n\t}()\n\n\tselect {\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\tcase err := <-errChan:\n\t\treturn err\n\t}\n}\n\n// Convert paths using native DOS format like:\n//\n//\t\"\\Device\\HarddiskVolume1\\Windows\\systemew\\file.txt\"\n//\n// into:\n//\n//\t\"C:\\Windows\\systemew\\file.txt\"\nfunc ConvertDOSPath(p string) string {\n\trawDrive := strings.Join(strings.Split(p, `\\`)[:3], `\\`)\n\n\tfor d := 'A'; d <= 'Z'; d++ {\n\t\tszDeviceName := string(d) + \":\"\n\t\tszTarget := make([]uint16, 512)\n\t\tret, _, _ := procQueryDosDeviceW.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(szDeviceName))),\n\t\t\tuintptr(unsafe.Pointer(&szTarget[0])),\n\t\t\tuintptr(len(szTarget)))\n\t\tif ret != 0 && windows.UTF16ToString(szTarget[:]) == rawDrive {\n\t\t\treturn filepath.Join(szDeviceName, p[len(rawDrive):])\n\t\t}\n\t}\n\treturn p\n}\n\ntype NtStatus uint32\n\nfunc (s NtStatus) Error() error {\n\tif s == 0 {\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"NtStatus 0x%08x\", uint32(s))\n}\n\nfunc (s NtStatus) IsError() bool {\n\treturn s>>30 == 3\n}\n\ntype SystemExtendedHandleTableEntryInformation struct {\n\tObject                uintptr\n\tUniqueProcessId       uintptr\n\tHandleValue           uintptr\n\tGrantedAccess         uint32\n\tCreatorBackTraceIndex uint16\n\tObjectTypeIndex       uint16\n\tHandleAttributes      uint32\n\tReserved              uint32\n}\n\ntype SystemExtendedHandleInformation struct {\n\tNumberOfHandles uintptr\n\tReserved        uintptr\n\tHandles         [1]SystemExtendedHandleTableEntryInformation\n}\n\n// CallWithExpandingBuffer https://github.com/hillu/go-ntdll\nfunc CallWithExpandingBuffer(fn func() NtStatus, buf *[]byte, resultLength *uint32) NtStatus {\n\tfor {\n\t\tif st := fn(); st == STATUS_BUFFER_OVERFLOW || st == STATUS_BUFFER_TOO_SMALL || st == STATUS_INFO_LENGTH_MISMATCH {\n\t\t\tif int(*resultLength) <= cap(*buf) {\n\t\t\t\t(*reflect.SliceHeader)(unsafe.Pointer(buf)).Len = int(*resultLength)\n\t\t\t} else {\n\t\t\t\t*buf = make([]byte, int(*resultLength))\n\t\t\t}\n\t\t\tcontinue\n\t\t} else {\n\t\t\tif !st.IsError() {\n\t\t\t\t*buf = (*buf)[:int(*resultLength)]\n\t\t\t}\n\t\t\treturn st\n\t\t}\n\t}\n}\n\nfunc NtQuerySystemInformation(\n\tSystemInformationClass uint32,\n\tSystemInformation *byte,\n\tSystemInformationLength uint32,\n\tReturnLength *uint32,\n) NtStatus {\n\tr0, _, _ := ProcNtQuerySystemInformation.Call(\n\t\tuintptr(SystemInformationClass),\n\t\tuintptr(unsafe.Pointer(SystemInformation)),\n\t\tuintptr(SystemInformationLength),\n\t\tuintptr(unsafe.Pointer(ReturnLength)))\n\treturn NtStatus(r0)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/endian.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage common\n\nimport \"unsafe\"\n\n// IsLittleEndian checks if the current platform uses little-endian.\n// copied from https://github.com/ntrrg/ntgo/blob/v0.8.0/runtime/infrastructure.go#L16 (MIT License)\nfunc IsLittleEndian() bool {\n\tvar x int16 = 0x0011\n\treturn *(*byte)(unsafe.Pointer(&x)) == 0x11\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/sleep.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage common\n\nimport (\n\t\"context\"\n\t\"time\"\n)\n\n// Sleep awaits for provided interval.\n// Can be interrupted by context cancellation.\nfunc Sleep(ctx context.Context, interval time.Duration) error {\n\ttimer := time.NewTimer(interval)\n\tselect {\n\tcase <-ctx.Done():\n\t\tif !timer.Stop() {\n\t\t\t<-timer.C\n\t\t}\n\t\treturn ctx.Err()\n\tcase <-timer.C:\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/internal/common/warnings.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage common\n\nimport \"fmt\"\n\ntype Warnings struct {\n\tList    []error\n\tVerbose bool\n}\n\nfunc (w *Warnings) Add(err error) {\n\tw.List = append(w.List, err)\n}\n\nfunc (w *Warnings) Reference() error {\n\tif len(w.List) > 0 {\n\t\treturn w\n\t}\n\treturn nil\n}\n\nfunc (w *Warnings) Error() string {\n\tif w.Verbose {\n\t\tstr := \"\"\n\t\tfor i, e := range w.List {\n\t\t\tstr += fmt.Sprintf(\"\\tError %d: %s\\n\", i, e.Error())\n\t\t}\n\t\treturn str\n\t}\n\treturn fmt.Sprintf(\"Number of warnings: %v\", len(w.List))\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/ex_linux.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n)\n\ntype ExVirtualMemory struct {\n\tActiveFile   uint64 `json:\"activefile\"`\n\tInactiveFile uint64 `json:\"inactivefile\"`\n\tActiveAnon   uint64 `json:\"activeanon\"`\n\tInactiveAnon uint64 `json:\"inactiveanon\"`\n\tUnevictable  uint64 `json:\"unevictable\"`\n}\n\nfunc (v ExVirtualMemory) String() string {\n\ts, _ := json.Marshal(v)\n\treturn string(s)\n}\n\ntype ExLinux struct{}\n\nfunc NewExLinux() *ExLinux {\n\treturn &ExLinux{}\n}\n\nfunc (ex *ExLinux) VirtualMemory() (*ExVirtualMemory, error) {\n\treturn ex.VirtualMemoryWithContext(context.Background())\n}\n\nfunc (ex *ExLinux) VirtualMemoryWithContext(ctx context.Context) (*ExVirtualMemory, error) {\n\t_, vmEx, err := fillFromMeminfoWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn vmEx, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/ex_windows.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build windows\n\npackage mem\n\nimport (\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\n// ExVirtualMemory represents Windows specific information\n// https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-memorystatusex\n// https://learn.microsoft.com/en-us/windows/win32/api/psapi/ns-psapi-performance_information\ntype ExVirtualMemory struct {\n\tCommitLimit  uint64 `json:\"commitLimit\"`\n\tCommitTotal  uint64 `json:\"commitTotal\"`\n\tVirtualTotal uint64 `json:\"virtualTotal\"`\n\tVirtualAvail uint64 `json:\"virtualAvail\"`\n}\n\ntype ExWindows struct{}\n\nfunc NewExWindows() *ExWindows {\n\treturn &ExWindows{}\n}\n\nfunc (e *ExWindows) VirtualMemory() (*ExVirtualMemory, error) {\n\tvar memInfo memoryStatusEx\n\tmemInfo.cbSize = uint32(unsafe.Sizeof(memInfo))\n\tmem, _, _ := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&memInfo)))\n\tif mem == 0 {\n\t\treturn nil, windows.GetLastError()\n\t}\n\n\tvar perfInfo performanceInformation\n\tperfInfo.cb = uint32(unsafe.Sizeof(perfInfo))\n\tperf, _, _ := procGetPerformanceInfo.Call(uintptr(unsafe.Pointer(&perfInfo)), uintptr(perfInfo.cb))\n\tif perf == 0 {\n\t\treturn nil, windows.GetLastError()\n\t}\n\n\tret := &ExVirtualMemory{\n\t\tCommitLimit:  perfInfo.commitLimit * perfInfo.pageSize,\n\t\tCommitTotal:  perfInfo.commitTotal * perfInfo.pageSize,\n\t\tVirtualTotal: memInfo.ullTotalVirtual,\n\t\tVirtualAvail: memInfo.ullAvailVirtual,\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage mem\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nvar invoke common.Invoker = common.Invoke{}\n\n// Memory usage statistics. Total, Available and Used contain numbers of bytes\n// for human consumption.\n//\n// The other fields in this struct contain kernel specific values.\ntype VirtualMemoryStat struct {\n\t// Total amount of RAM on this system\n\tTotal uint64 `json:\"total\"`\n\n\t// RAM available for programs to allocate\n\t//\n\t// This value is computed from the kernel specific values.\n\tAvailable uint64 `json:\"available\"`\n\n\t// RAM used by programs\n\t//\n\t// This value is computed from the kernel specific values.\n\tUsed uint64 `json:\"used\"`\n\n\t// Percentage of RAM used by programs\n\t//\n\t// This value is computed from the kernel specific values.\n\tUsedPercent float64 `json:\"usedPercent\"`\n\n\t// This is the kernel's notion of free memory; RAM chips whose bits nobody\n\t// cares about the value of right now. For a human consumable number,\n\t// Available is what you really want.\n\tFree uint64 `json:\"free\"`\n\n\t// OS X / BSD specific numbers:\n\t// http://www.macyourself.com/2010/02/17/what-is-free-wired-active-and-inactive-system-memory-ram/\n\tActive   uint64 `json:\"active\"`\n\tInactive uint64 `json:\"inactive\"`\n\tWired    uint64 `json:\"wired\"`\n\n\t// FreeBSD specific numbers:\n\t// https://reviews.freebsd.org/D8467\n\tLaundry uint64 `json:\"laundry\"`\n\n\t// Linux specific numbers\n\t// https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-meminfo.html\n\t// https://www.kernel.org/doc/Documentation/filesystems/proc.txt\n\t// https://www.kernel.org/doc/Documentation/vm/overcommit-accounting\n\t// https://www.kernel.org/doc/Documentation/vm/transhuge.txt\n\tBuffers        uint64 `json:\"buffers\"`\n\tCached         uint64 `json:\"cached\"`\n\tWriteBack      uint64 `json:\"writeBack\"`\n\tDirty          uint64 `json:\"dirty\"`\n\tWriteBackTmp   uint64 `json:\"writeBackTmp\"`\n\tShared         uint64 `json:\"shared\"`\n\tSlab           uint64 `json:\"slab\"`\n\tSreclaimable   uint64 `json:\"sreclaimable\"`\n\tSunreclaim     uint64 `json:\"sunreclaim\"`\n\tPageTables     uint64 `json:\"pageTables\"`\n\tSwapCached     uint64 `json:\"swapCached\"`\n\tCommitLimit    uint64 `json:\"commitLimit\"`\n\tCommittedAS    uint64 `json:\"committedAS\"`\n\tHighTotal      uint64 `json:\"highTotal\"`\n\tHighFree       uint64 `json:\"highFree\"`\n\tLowTotal       uint64 `json:\"lowTotal\"`\n\tLowFree        uint64 `json:\"lowFree\"`\n\tSwapTotal      uint64 `json:\"swapTotal\"`\n\tSwapFree       uint64 `json:\"swapFree\"`\n\tMapped         uint64 `json:\"mapped\"`\n\tVmallocTotal   uint64 `json:\"vmallocTotal\"`\n\tVmallocUsed    uint64 `json:\"vmallocUsed\"`\n\tVmallocChunk   uint64 `json:\"vmallocChunk\"`\n\tHugePagesTotal uint64 `json:\"hugePagesTotal\"`\n\tHugePagesFree  uint64 `json:\"hugePagesFree\"`\n\tHugePagesRsvd  uint64 `json:\"hugePagesRsvd\"`\n\tHugePagesSurp  uint64 `json:\"hugePagesSurp\"`\n\tHugePageSize   uint64 `json:\"hugePageSize\"`\n\tAnonHugePages  uint64 `json:\"anonHugePages\"`\n}\n\ntype SwapMemoryStat struct {\n\tTotal       uint64  `json:\"total\"`\n\tUsed        uint64  `json:\"used\"`\n\tFree        uint64  `json:\"free\"`\n\tUsedPercent float64 `json:\"usedPercent\"`\n\tSin         uint64  `json:\"sin\"`\n\tSout        uint64  `json:\"sout\"`\n\tPgIn        uint64  `json:\"pgIn\"`\n\tPgOut       uint64  `json:\"pgOut\"`\n\tPgFault     uint64  `json:\"pgFault\"`\n\n\t// Linux specific numbers\n\t// https://www.kernel.org/doc/Documentation/cgroup-v2.txt\n\tPgMajFault uint64 `json:\"pgMajFault\"`\n}\n\nfunc (m VirtualMemoryStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\nfunc (m SwapMemoryStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\ntype SwapDevice struct {\n\tName      string `json:\"name\"`\n\tUsedBytes uint64 `json:\"usedBytes\"`\n\tFreeBytes uint64 `json:\"freeBytes\"`\n}\n\nfunc (m SwapDevice) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_aix.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix\n\npackage mem\n\nimport (\n\t\"context\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_aix_cgo.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix && cgo\n\npackage mem\n\nimport (\n\t\"context\"\n\n\t\"github.com/power-devops/perfstat\"\n)\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tm, err := perfstat.MemoryTotalStat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpagesize := uint64(4096)\n\tret := VirtualMemoryStat{\n\t\tTotal:       uint64(m.RealTotal) * pagesize,\n\t\tAvailable:   uint64(m.RealAvailable) * pagesize,\n\t\tFree:        uint64(m.RealFree) * pagesize,\n\t\tUsed:        uint64(m.RealInUse) * pagesize,\n\t\tUsedPercent: 100 * float64(m.RealInUse) / float64(m.RealTotal),\n\t\tActive:      uint64(m.VirtualActive) * pagesize,\n\t\tSwapTotal:   uint64(m.PgSpTotal) * pagesize,\n\t\tSwapFree:    uint64(m.PgSpFree) * pagesize,\n\t}\n\treturn &ret, nil\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\tm, err := perfstat.MemoryTotalStat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpagesize := uint64(4096)\n\tswapUsed := uint64(m.PgSpTotal-m.PgSpFree-m.PgSpRsvd) * pagesize\n\tswapTotal := uint64(m.PgSpTotal) * pagesize\n\tret := SwapMemoryStat{\n\t\tTotal:       swapTotal,\n\t\tFree:        uint64(m.PgSpFree) * pagesize,\n\t\tUsed:        swapUsed,\n\t\tUsedPercent: float64(100*swapUsed) / float64(swapTotal),\n\t\tSin:         uint64(m.PgSpIn),\n\t\tSout:        uint64(m.PgSpOut),\n\t\tPgIn:        uint64(m.PageIn),\n\t\tPgOut:       uint64(m.PageOut),\n\t\tPgFault:     uint64(m.PageFaults),\n\t}\n\treturn &ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_aix_nocgo.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix && !cgo\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tvmem, swap, err := callSVMon(ctx, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif vmem.Total == 0 {\n\t\treturn nil, common.ErrNotImplementedError\n\t}\n\tvmem.SwapTotal = swap.Total\n\tvmem.SwapFree = swap.Free\n\treturn vmem, nil\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\t_, swap, err := callSVMon(ctx, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif swap.Total == 0 {\n\t\treturn nil, common.ErrNotImplementedError\n\t}\n\treturn swap, nil\n}\n\nfunc callSVMon(ctx context.Context, virt bool) (*VirtualMemoryStat, *SwapMemoryStat, error) {\n\tout, err := invoke.CommandWithContext(ctx, \"svmon\", \"-G\")\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tpagesize := uint64(4096)\n\tvmem := &VirtualMemoryStat{}\n\tswap := &SwapMemoryStat{}\n\tfor _, line := range strings.Split(string(out), \"\\n\") {\n\t\tif virt && strings.HasPrefix(line, \"memory\") {\n\t\t\tp := strings.Fields(line)\n\t\t\tif len(p) > 2 {\n\t\t\t\tif t, err := strconv.ParseUint(p[1], 10, 64); err == nil {\n\t\t\t\t\tvmem.Total = t * pagesize\n\t\t\t\t}\n\t\t\t\tif t, err := strconv.ParseUint(p[2], 10, 64); err == nil {\n\t\t\t\t\tvmem.Used = t * pagesize\n\t\t\t\t\tif vmem.Total > 0 {\n\t\t\t\t\t\tvmem.UsedPercent = 100 * float64(vmem.Used) / float64(vmem.Total)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif t, err := strconv.ParseUint(p[3], 10, 64); err == nil {\n\t\t\t\t\tvmem.Free = t * pagesize\n\t\t\t\t}\n\t\t\t}\n\t\t} else if strings.HasPrefix(line, \"pg space\") {\n\t\t\tp := strings.Fields(line)\n\t\t\tif len(p) > 3 {\n\t\t\t\tif t, err := strconv.ParseUint(p[2], 10, 64); err == nil {\n\t\t\t\t\tswap.Total = t * pagesize\n\t\t\t\t}\n\t\t\t\tif t, err := strconv.ParseUint(p[3], 10, 64); err == nil {\n\t\t\t\t\tswap.Free = swap.Total - t*pagesize\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\treturn vmem, swap, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_bsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build freebsd || openbsd || netbsd\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nconst swapCommand = \"swapctl\"\n\n// swapctl column indexes\nconst (\n\tnameCol     = 0\n\ttotalKiBCol = 1\n\tusedKiBCol  = 2\n)\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn SwapDevicesWithContext(context.Background())\n}\n\nfunc SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {\n\toutput, err := invoke.CommandWithContext(ctx, swapCommand, \"-lk\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not execute %q: %w\", swapCommand, err)\n\t}\n\n\treturn parseSwapctlOutput(string(output))\n}\n\nfunc parseSwapctlOutput(output string) ([]*SwapDevice, error) {\n\tlines := strings.Split(output, \"\\n\")\n\tif len(lines) == 0 {\n\t\treturn nil, fmt.Errorf(\"could not parse output of %q: no lines in %q\", swapCommand, output)\n\t}\n\n\t// Check header headerFields are as expected.\n\theader := lines[0]\n\theader = strings.ToLower(header)\n\theader = strings.ReplaceAll(header, \":\", \"\")\n\theaderFields := strings.Fields(header)\n\tif len(headerFields) < usedKiBCol {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: too few fields in header %q\", swapCommand, header)\n\t}\n\tif headerFields[nameCol] != \"device\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapCommand, headerFields[nameCol], \"device\")\n\t}\n\tif headerFields[totalKiBCol] != \"1kb-blocks\" && headerFields[totalKiBCol] != \"1k-blocks\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapCommand, headerFields[totalKiBCol], \"1kb-blocks\")\n\t}\n\tif headerFields[usedKiBCol] != \"used\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapCommand, headerFields[usedKiBCol], \"used\")\n\t}\n\n\tvar swapDevices []*SwapDevice\n\tfor _, line := range lines[1:] {\n\t\tif line == \"\" {\n\t\t\tcontinue // the terminal line is typically empty\n\t\t}\n\t\tfields := strings.Fields(line)\n\t\tif len(fields) < usedKiBCol {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse %q: too few fields\", swapCommand)\n\t\t}\n\n\t\ttotalKiB, err := strconv.ParseUint(fields[totalKiBCol], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse 'Size' column in %q: %w\", swapCommand, err)\n\t\t}\n\n\t\tusedKiB, err := strconv.ParseUint(fields[usedKiBCol], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse 'Used' column in %q: %w\", swapCommand, err)\n\t\t}\n\n\t\tswapDevices = append(swapDevices, &SwapDevice{\n\t\t\tName:      fields[nameCol],\n\t\t\tUsedBytes: usedKiB * 1024,\n\t\t\tFreeBytes: (totalKiB - usedKiB) * 1024,\n\t\t})\n\t}\n\n\treturn swapDevices, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_darwin.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc getHwMemsize() (uint64, error) {\n\ttotal, err := unix.SysctlUint64(\"hw.memsize\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn total, nil\n}\n\n// xsw_usage in sys/sysctl.h\ntype swapUsage struct {\n\tTotal     uint64\n\tAvail     uint64\n\tUsed      uint64\n\tPagesize  int32\n\tEncrypted bool\n}\n\n// SwapMemory returns swapinfo.\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\t// https://github.com/yanllearnn/go-osstat/blob/ae8a279d26f52ec946a03698c7f50a26cfb427e3/memory/memory_darwin.go\n\tvar ret *SwapMemoryStat\n\n\tvalue, err := unix.SysctlRaw(\"vm.swapusage\")\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\tif len(value) != 32 {\n\t\treturn ret, fmt.Errorf(\"unexpected output of sysctl vm.swapusage: %v (len: %d)\", value, len(value))\n\t}\n\tswap := (*swapUsage)(unsafe.Pointer(&value[0]))\n\n\tu := float64(0)\n\tif swap.Total != 0 {\n\t\tu = ((float64(swap.Total) - float64(swap.Avail)) / float64(swap.Total)) * 100.0\n\t}\n\n\tret = &SwapMemoryStat{\n\t\tTotal:       swap.Total,\n\t\tUsed:        swap.Used,\n\t\tFree:        swap.Avail,\n\t\tUsedPercent: u,\n\t}\n\n\treturn ret, nil\n}\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn SwapDevicesWithContext(context.Background())\n}\n\nfunc SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\ntype vmStatisticsData struct {\n\tfreeCount     uint32\n\tactiveCount   uint32\n\tinactiveCount uint32\n\twireCount     uint32\n\t_             [44]byte // Not used here\n}\n\n// VirtualMemory returns VirtualmemoryStat.\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tmachLib, err := common.NewLibrary(common.System)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer machLib.Close()\n\n\thostStatistics := common.GetFunc[common.HostStatisticsFunc](machLib, common.HostStatisticsSym)\n\tmachHostSelf := common.GetFunc[common.MachHostSelfFunc](machLib, common.MachHostSelfSym)\n\n\tcount := uint32(common.HOST_VM_INFO_COUNT)\n\tvar vmstat vmStatisticsData\n\n\tstatus := hostStatistics(machHostSelf(), common.HOST_VM_INFO,\n\t\tuintptr(unsafe.Pointer(&vmstat)), &count)\n\n\tif status != common.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"host_statistics error=%d\", status)\n\t}\n\n\tpageSizeAddr, _ := machLib.Dlsym(\"vm_kernel_page_size\")\n\tpageSize := **(**uint64)(unsafe.Pointer(&pageSizeAddr))\n\ttotal, err := getHwMemsize()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ttotalCount := uint32(total / pageSize)\n\n\tavailableCount := vmstat.inactiveCount + vmstat.freeCount\n\tusedPercent := 100 * float64(totalCount-availableCount) / float64(totalCount)\n\n\tusedCount := totalCount - availableCount\n\n\treturn &VirtualMemoryStat{\n\t\tTotal:       total,\n\t\tAvailable:   pageSize * uint64(availableCount),\n\t\tUsed:        pageSize * uint64(usedCount),\n\t\tUsedPercent: usedPercent,\n\t\tFree:        pageSize * uint64(vmstat.freeCount),\n\t\tActive:      pageSize * uint64(vmstat.activeCount),\n\t\tInactive:    pageSize * uint64(vmstat.inactiveCount),\n\t\tWired:       pageSize * uint64(vmstat.wireCount),\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_fallback.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build !darwin && !linux && !freebsd && !openbsd && !solaris && !windows && !plan9 && !aix && !netbsd\n\npackage mem\n\nimport (\n\t\"context\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn SwapDevicesWithContext(context.Background())\n}\n\nfunc SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_freebsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build freebsd\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tpageSize, err := common.SysctlUint(\"vm.stats.vm.v_page_size\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tphysmem, err := common.SysctlUint(\"hw.physmem\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfree, err := common.SysctlUint(\"vm.stats.vm.v_free_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tactive, err := common.SysctlUint(\"vm.stats.vm.v_active_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tinactive, err := common.SysctlUint(\"vm.stats.vm.v_inactive_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbuffers, err := common.SysctlUint(\"vfs.bufspace\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\twired, err := common.SysctlUint(\"vm.stats.vm.v_wire_count\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar cached, laundry uint64\n\tosreldate, _ := common.SysctlUint(\"kern.osreldate\")\n\tif osreldate < 1102000 {\n\t\tcached, err = common.SysctlUint(\"vm.stats.vm.v_cache_count\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else {\n\t\tlaundry, err = common.SysctlUint(\"vm.stats.vm.v_laundry_count\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tp := pageSize\n\tret := &VirtualMemoryStat{\n\t\tTotal:    physmem,\n\t\tFree:     free * p,\n\t\tActive:   active * p,\n\t\tInactive: inactive * p,\n\t\tCached:   cached * p,\n\t\tBuffers:  buffers,\n\t\tWired:    wired * p,\n\t\tLaundry:  laundry * p,\n\t}\n\n\tret.Available = ret.Inactive + ret.Cached + ret.Free + ret.Laundry\n\tret.Used = ret.Total - ret.Available\n\tret.UsedPercent = float64(ret.Used) / float64(ret.Total) * 100.0\n\n\treturn ret, nil\n}\n\n// Return swapinfo\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\n// Constants from vm/vm_param.h\nconst (\n\tXSWDEV_VERSION11 = 1\n\tXSWDEV_VERSION   = 2\n)\n\n// Types from vm/vm_param.h\ntype xswdev struct {\n\tVersion uint32 // Version is the version\n\tDev     uint64 // Dev is the device identifier\n\tFlags   int32  // Flags is the swap flags applied to the device\n\tNBlks   int32  // NBlks is the total number of blocks\n\tUsed    int32  // Used is the number of blocks used\n}\n\n// xswdev11 is a compatibility for under FreeBSD 11\n// sys/vm/swap_pager.c\ntype xswdev11 struct {\n\tVersion uint32 // Version is the version\n\tDev     uint32 // Dev is the device identifier\n\tFlags   int32  // Flags is the swap flags applied to the device\n\tNBlks   int32  // NBlks is the total number of blocks\n\tUsed    int32  // Used is the number of blocks used\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\t// FreeBSD can have multiple swap devices so we total them up\n\ti, err := common.SysctlUint(\"vm.nswapdev\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif i == 0 {\n\t\treturn nil, errors.New(\"no swap devices found\")\n\t}\n\n\tc := int(i)\n\n\ti, err = common.SysctlUint(\"vm.stats.vm.v_page_size\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpageSize := i\n\n\tvar buf []byte\n\ts := &SwapMemoryStat{}\n\tfor n := 0; n < c; n++ {\n\t\tbuf, err = unix.SysctlRaw(\"vm.swap_info\", n)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// first, try to parse with version 2\n\t\txsw := (*xswdev)(unsafe.Pointer(&buf[0]))\n\t\tif xsw.Version == XSWDEV_VERSION11 {\n\t\t\t// this is version 1, so try to parse again\n\t\t\txsw := (*xswdev11)(unsafe.Pointer(&buf[0]))\n\t\t\tif xsw.Version != XSWDEV_VERSION11 {\n\t\t\t\treturn nil, errors.New(\"xswdev version mismatch(11)\")\n\t\t\t}\n\t\t\ts.Total += uint64(xsw.NBlks)\n\t\t\ts.Used += uint64(xsw.Used)\n\t\t} else if xsw.Version != XSWDEV_VERSION {\n\t\t\treturn nil, errors.New(\"xswdev version mismatch\")\n\t\t} else {\n\t\t\ts.Total += uint64(xsw.NBlks)\n\t\t\ts.Used += uint64(xsw.Used)\n\t\t}\n\n\t}\n\n\tif s.Total != 0 {\n\t\ts.UsedPercent = float64(s.Used) / float64(s.Total) * 100\n\t}\n\ts.Total *= pageSize\n\ts.Used *= pageSize\n\ts.Free = s.Total - s.Used\n\n\treturn s, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_linux.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux\n\npackage mem\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tvm, _, err := fillFromMeminfoWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn vm, nil\n}\n\nfunc fillFromMeminfoWithContext(ctx context.Context) (*VirtualMemoryStat, *ExVirtualMemory, error) {\n\tfilename := common.HostProcWithContext(ctx, \"meminfo\")\n\tlines, _ := common.ReadLines(filename)\n\n\t// flag if MemAvailable is in /proc/meminfo (kernel 3.14+)\n\tmemavail := false\n\tactiveFile := false   // \"Active(file)\" not available: 2.6.28 / Dec 2008\n\tinactiveFile := false // \"Inactive(file)\" not available: 2.6.28 / Dec 2008\n\tsReclaimable := false // \"Sreclaimable:\" not available: 2.6.19 / Nov 2006\n\n\tret := &VirtualMemoryStat{}\n\tretEx := &ExVirtualMemory{}\n\n\tfor _, line := range lines {\n\t\tfields := strings.Split(line, \":\")\n\t\tif len(fields) != 2 {\n\t\t\tcontinue\n\t\t}\n\t\tkey := strings.TrimSpace(fields[0])\n\t\tvalue := strings.TrimSpace(fields[1])\n\t\tvalue = strings.Replace(value, \" kB\", \"\", -1)\n\n\t\tswitch key {\n\t\tcase \"MemTotal\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Total = t * 1024\n\t\tcase \"MemFree\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Free = t * 1024\n\t\tcase \"MemAvailable\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tmemavail = true\n\t\t\tret.Available = t * 1024\n\t\tcase \"Buffers\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Buffers = t * 1024\n\t\tcase \"Cached\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Cached = t * 1024\n\t\tcase \"Active\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Active = t * 1024\n\t\tcase \"Inactive\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Inactive = t * 1024\n\t\tcase \"Active(anon)\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tretEx.ActiveAnon = t * 1024\n\t\tcase \"Inactive(anon)\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tretEx.InactiveAnon = t * 1024\n\t\tcase \"Active(file)\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tactiveFile = true\n\t\t\tretEx.ActiveFile = t * 1024\n\t\tcase \"Inactive(file)\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tinactiveFile = true\n\t\t\tretEx.InactiveFile = t * 1024\n\t\tcase \"Unevictable\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tretEx.Unevictable = t * 1024\n\t\tcase \"Writeback\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.WriteBack = t * 1024\n\t\tcase \"WritebackTmp\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.WriteBackTmp = t * 1024\n\t\tcase \"Dirty\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Dirty = t * 1024\n\t\tcase \"Shmem\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Shared = t * 1024\n\t\tcase \"Slab\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Slab = t * 1024\n\t\tcase \"SReclaimable\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tsReclaimable = true\n\t\t\tret.Sreclaimable = t * 1024\n\t\tcase \"SUnreclaim\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Sunreclaim = t * 1024\n\t\tcase \"PageTables\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.PageTables = t * 1024\n\t\tcase \"SwapCached\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.SwapCached = t * 1024\n\t\tcase \"CommitLimit\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.CommitLimit = t * 1024\n\t\tcase \"Committed_AS\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.CommittedAS = t * 1024\n\t\tcase \"HighTotal\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.HighTotal = t * 1024\n\t\tcase \"HighFree\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.HighFree = t * 1024\n\t\tcase \"LowTotal\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.LowTotal = t * 1024\n\t\tcase \"LowFree\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.LowFree = t * 1024\n\t\tcase \"SwapTotal\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.SwapTotal = t * 1024\n\t\tcase \"SwapFree\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.SwapFree = t * 1024\n\t\tcase \"Mapped\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.Mapped = t * 1024\n\t\tcase \"VmallocTotal\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.VmallocTotal = t * 1024\n\t\tcase \"VmallocUsed\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.VmallocUsed = t * 1024\n\t\tcase \"VmallocChunk\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.VmallocChunk = t * 1024\n\t\tcase \"HugePages_Total\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.HugePagesTotal = t\n\t\tcase \"HugePages_Free\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.HugePagesFree = t\n\t\tcase \"HugePages_Rsvd\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.HugePagesRsvd = t\n\t\tcase \"HugePages_Surp\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.HugePagesSurp = t\n\t\tcase \"Hugepagesize\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.HugePageSize = t * 1024\n\t\tcase \"AnonHugePages\":\n\t\t\tt, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn ret, retEx, err\n\t\t\t}\n\t\t\tret.AnonHugePages = t * 1024\n\t\t}\n\t}\n\n\tret.Cached += ret.Sreclaimable\n\n\tif !memavail {\n\t\tif activeFile && inactiveFile && sReclaimable {\n\t\t\tret.Available = calculateAvailVmem(ctx, ret, retEx)\n\t\t} else {\n\t\t\tret.Available = ret.Cached + ret.Free\n\t\t}\n\t}\n\n\tret.Used = ret.Total - ret.Free - ret.Buffers - ret.Cached\n\tret.UsedPercent = float64(ret.Used) / float64(ret.Total) * 100.0\n\n\treturn ret, retEx, nil\n}\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\tsysinfo := &unix.Sysinfo_t{}\n\n\tif err := unix.Sysinfo(sysinfo); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &SwapMemoryStat{\n\t\tTotal: uint64(sysinfo.Totalswap) * uint64(sysinfo.Unit),\n\t\tFree:  uint64(sysinfo.Freeswap) * uint64(sysinfo.Unit),\n\t}\n\tret.Used = ret.Total - ret.Free\n\t// check Infinity\n\tif ret.Total != 0 {\n\t\tret.UsedPercent = float64(ret.Total-ret.Free) / float64(ret.Total) * 100.0\n\t} else {\n\t\tret.UsedPercent = 0\n\t}\n\tfilename := common.HostProcWithContext(ctx, \"vmstat\")\n\tlines, _ := common.ReadLines(filename)\n\tfor _, l := range lines {\n\t\tfields := strings.Fields(l)\n\t\tif len(fields) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch fields[0] {\n\t\tcase \"pswpin\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.Sin = value * 4 * 1024\n\t\tcase \"pswpout\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.Sout = value * 4 * 1024\n\t\tcase \"pgpgin\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.PgIn = value * 4 * 1024\n\t\tcase \"pgpgout\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.PgOut = value * 4 * 1024\n\t\tcase \"pgfault\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.PgFault = value * 4 * 1024\n\t\tcase \"pgmajfault\":\n\t\t\tvalue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret.PgMajFault = value * 4 * 1024\n\t\t}\n\t}\n\treturn ret, nil\n}\n\n// calculateAvailVmem is a fallback under kernel 3.14 where /proc/meminfo does not provide\n// \"MemAvailable:\" column. It reimplements an algorithm from the link below\n// https://github.com/giampaolo/psutil/pull/890\nfunc calculateAvailVmem(ctx context.Context, ret *VirtualMemoryStat, retEx *ExVirtualMemory) uint64 {\n\tvar watermarkLow uint64\n\n\tfn := common.HostProcWithContext(ctx, \"zoneinfo\")\n\tlines, err := common.ReadLines(fn)\n\tif err != nil {\n\t\treturn ret.Free + ret.Cached // fallback under kernel 2.6.13\n\t}\n\n\tpagesize := uint64(os.Getpagesize())\n\twatermarkLow = 0\n\n\tfor _, line := range lines {\n\t\tfields := strings.Fields(line)\n\n\t\tif strings.HasPrefix(fields[0], \"low\") {\n\t\t\tlowValue, err := strconv.ParseUint(fields[1], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tlowValue = 0\n\t\t\t}\n\t\t\twatermarkLow += lowValue\n\t\t}\n\t}\n\n\twatermarkLow *= pagesize\n\n\tavailMemory := ret.Free - watermarkLow\n\tpageCache := retEx.ActiveFile + retEx.InactiveFile\n\tpageCache -= uint64(math.Min(float64(pageCache/2), float64(watermarkLow)))\n\tavailMemory += pageCache\n\tavailMemory += ret.Sreclaimable - uint64(math.Min(float64(ret.Sreclaimable/2.0), float64(watermarkLow)))\n\n\tif availMemory < 0 {\n\t\tavailMemory = 0\n\t}\n\n\treturn availMemory\n}\n\nconst swapsFilename = \"swaps\"\n\n// swaps file column indexes\nconst (\n\tnameCol = 0\n\t// typeCol     = 1\n\ttotalCol = 2\n\tusedCol  = 3\n\t// priorityCol = 4\n)\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn SwapDevicesWithContext(context.Background())\n}\n\nfunc SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {\n\tswapsFilePath := common.HostProcWithContext(ctx, swapsFilename)\n\tf, err := os.Open(swapsFilePath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\treturn parseSwapsFile(ctx, f)\n}\n\nfunc parseSwapsFile(ctx context.Context, r io.Reader) ([]*SwapDevice, error) {\n\tswapsFilePath := common.HostProcWithContext(ctx, swapsFilename)\n\tscanner := bufio.NewScanner(r)\n\tif !scanner.Scan() {\n\t\tif err := scanner.Err(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"couldn't read file %q: %w\", swapsFilePath, err)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"unexpected end-of-file in %q\", swapsFilePath)\n\n\t}\n\n\t// Check header headerFields are as expected\n\theaderFields := strings.Fields(scanner.Text())\n\tif len(headerFields) < usedCol {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: too few fields in header\", swapsFilePath)\n\t}\n\tif headerFields[nameCol] != \"Filename\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapsFilePath, headerFields[nameCol], \"Filename\")\n\t}\n\tif headerFields[totalCol] != \"Size\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapsFilePath, headerFields[totalCol], \"Size\")\n\t}\n\tif headerFields[usedCol] != \"Used\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapsFilePath, headerFields[usedCol], \"Used\")\n\t}\n\n\tvar swapDevices []*SwapDevice\n\tfor scanner.Scan() {\n\t\tfields := strings.Fields(scanner.Text())\n\t\tif len(fields) < usedCol {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse %q: too few fields\", swapsFilePath)\n\t\t}\n\n\t\ttotalKiB, err := strconv.ParseUint(fields[totalCol], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse 'Size' column in %q: %w\", swapsFilePath, err)\n\t\t}\n\n\t\tusedKiB, err := strconv.ParseUint(fields[usedCol], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse 'Used' column in %q: %w\", swapsFilePath, err)\n\t\t}\n\n\t\tswapDevices = append(swapDevices, &SwapDevice{\n\t\t\tName:      fields[nameCol],\n\t\t\tUsedBytes: usedKiB * 1024,\n\t\t\tFreeBytes: (totalKiB - usedKiB) * 1024,\n\t\t})\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"couldn't read file %q: %w\", swapsFilePath, err)\n\t}\n\n\treturn swapDevices, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_netbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build netbsd\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc GetPageSize() (uint64, error) {\n\treturn GetPageSizeWithContext(context.Background())\n}\n\nfunc GetPageSizeWithContext(ctx context.Context) (uint64, error) {\n\tuvmexp, err := unix.SysctlUvmexp(\"vm.uvmexp2\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint64(uvmexp.Pagesize), nil\n}\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tuvmexp, err := unix.SysctlUvmexp(\"vm.uvmexp2\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := uint64(uvmexp.Pagesize)\n\n\tret := &VirtualMemoryStat{\n\t\tTotal:    uint64(uvmexp.Npages) * p,\n\t\tFree:     uint64(uvmexp.Free) * p,\n\t\tActive:   uint64(uvmexp.Active) * p,\n\t\tInactive: uint64(uvmexp.Inactive) * p,\n\t\tCached:   0, // not available\n\t\tWired:    uint64(uvmexp.Wired) * p,\n\t}\n\n\tret.Available = ret.Inactive + ret.Cached + ret.Free\n\tret.Used = ret.Total - ret.Available\n\tret.UsedPercent = float64(ret.Used) / float64(ret.Total) * 100.0\n\n\t// Get buffers from vm.bufmem sysctl\n\tret.Buffers, err = unix.SysctlUint64(\"vm.bufmem\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn ret, nil\n}\n\n// Return swapctl summary info\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\tout, err := invoke.CommandWithContext(ctx, \"swapctl\", \"-sk\")\n\tif err != nil {\n\t\treturn &SwapMemoryStat{}, nil\n\t}\n\n\tline := string(out)\n\tvar total, used, free uint64\n\n\t_, err = fmt.Sscanf(line,\n\t\t\"total: %d 1K-blocks allocated, %d used, %d available\",\n\t\t&total, &used, &free)\n\tif err != nil {\n\t\treturn nil, errors.New(\"failed to parse swapctl output\")\n\t}\n\n\tpercent := float64(used) / float64(total) * 100\n\treturn &SwapMemoryStat{\n\t\tTotal:       total * 1024,\n\t\tUsed:        used * 1024,\n\t\tFree:        free * 1024,\n\t\tUsedPercent: percent,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_openbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd\n\npackage mem\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc GetPageSize() (uint64, error) {\n\treturn GetPageSizeWithContext(context.Background())\n}\n\nfunc GetPageSizeWithContext(ctx context.Context) (uint64, error) {\n\tuvmexp, err := unix.SysctlUvmexp(\"vm.uvmexp\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint64(uvmexp.Pagesize), nil\n}\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tuvmexp, err := unix.SysctlUvmexp(\"vm.uvmexp\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := uint64(uvmexp.Pagesize)\n\n\tret := &VirtualMemoryStat{\n\t\tTotal:    uint64(uvmexp.Npages) * p,\n\t\tFree:     uint64(uvmexp.Free) * p,\n\t\tActive:   uint64(uvmexp.Active) * p,\n\t\tInactive: uint64(uvmexp.Inactive) * p,\n\t\tCached:   0, // not available\n\t\tWired:    uint64(uvmexp.Wired) * p,\n\t}\n\n\tret.Available = ret.Inactive + ret.Cached + ret.Free\n\tret.Used = ret.Total - ret.Available\n\tret.UsedPercent = float64(ret.Used) / float64(ret.Total) * 100.0\n\n\tmib := []int32{CTLVfs, VfsGeneric, VfsBcacheStat}\n\tbuf, length, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif length < sizeOfBcachestats {\n\t\treturn nil, fmt.Errorf(\"short syscall ret %d bytes\", length)\n\t}\n\tvar bcs Bcachestats\n\tbr := bytes.NewReader(buf)\n\terr = common.Read(br, binary.LittleEndian, &bcs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret.Buffers = uint64(bcs.Numbufpages) * p\n\n\treturn ret, nil\n}\n\n// Return swapctl summary info\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\tout, err := invoke.CommandWithContext(ctx, \"swapctl\", \"-sk\")\n\tif err != nil {\n\t\treturn &SwapMemoryStat{}, nil\n\t}\n\n\tline := string(out)\n\tvar total, used, free uint64\n\n\t_, err = fmt.Sscanf(line,\n\t\t\"total: %d 1K-blocks allocated, %d used, %d available\",\n\t\t&total, &used, &free)\n\tif err != nil {\n\t\treturn nil, errors.New(\"failed to parse swapctl output\")\n\t}\n\n\tpercent := float64(used) / float64(total) * 100\n\treturn &SwapMemoryStat{\n\t\tTotal:       total * 1024,\n\t\tUsed:        used * 1024,\n\t\tFree:        free * 1024,\n\t\tUsedPercent: percent,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_openbsd_386.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && 386\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs mem/types_openbsd.go\n\npackage mem\n\nconst (\n\tCTLVfs        = 10\n\tVfsGeneric    = 0\n\tVfsBcacheStat = 3\n)\n\nconst (\n\tsizeOfBcachestats = 0x90\n)\n\ntype Bcachestats struct {\n\tNumbufs       int64\n\tNumbufpages   int64\n\tNumdirtypages int64\n\tNumcleanpages int64\n\tPendingwrites int64\n\tPendingreads  int64\n\tNumwrites     int64\n\tNumreads      int64\n\tCachehits     int64\n\tBusymapped    int64\n\tDmapages      int64\n\tHighpages     int64\n\tDelwribufs    int64\n\tKvaslots      int64\n\tAvail         int64\n\tHighflips     int64\n\tHighflops     int64\n\tDmaflips      int64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_openbsd_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_openbsd.go\n\npackage mem\n\nconst (\n\tCTLVfs        = 10\n\tVfsGeneric    = 0\n\tVfsBcacheStat = 3\n)\n\nconst (\n\tsizeOfBcachestats = 0x78\n)\n\ntype Bcachestats struct {\n\tNumbufs       int64\n\tNumbufpages   int64\n\tNumdirtypages int64\n\tNumcleanpages int64\n\tPendingwrites int64\n\tPendingreads  int64\n\tNumwrites     int64\n\tNumreads      int64\n\tCachehits     int64\n\tBusymapped    int64\n\tDmapages      int64\n\tHighpages     int64\n\tDelwribufs    int64\n\tKvaslots      int64\n\tAvail         int64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_openbsd_arm.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && arm\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs mem/types_openbsd.go\n\npackage mem\n\nconst (\n\tCTLVfs        = 10\n\tVfsGeneric    = 0\n\tVfsBcacheStat = 3\n)\n\nconst (\n\tsizeOfBcachestats = 0x90\n)\n\ntype Bcachestats struct {\n\tNumbufs       int64\n\tNumbufpages   int64\n\tNumdirtypages int64\n\tNumcleanpages int64\n\tPendingwrites int64\n\tPendingreads  int64\n\tNumwrites     int64\n\tNumreads      int64\n\tCachehits     int64\n\tBusymapped    int64\n\tDmapages      int64\n\tHighpages     int64\n\tDelwribufs    int64\n\tKvaslots      int64\n\tAvail         int64\n\tHighflips     int64\n\tHighflops     int64\n\tDmaflips      int64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_openbsd_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && arm64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs mem/types_openbsd.go\n\npackage mem\n\nconst (\n\tCTLVfs        = 10\n\tVfsGeneric    = 0\n\tVfsBcacheStat = 3\n)\n\nconst (\n\tsizeOfBcachestats = 0x90\n)\n\ntype Bcachestats struct {\n\tNumbufs       int64\n\tNumbufpages   int64\n\tNumdirtypages int64\n\tNumcleanpages int64\n\tPendingwrites int64\n\tPendingreads  int64\n\tNumwrites     int64\n\tNumreads      int64\n\tCachehits     int64\n\tBusymapped    int64\n\tDmapages      int64\n\tHighpages     int64\n\tDelwribufs    int64\n\tKvaslots      int64\n\tAvail         int64\n\tHighflips     int64\n\tHighflops     int64\n\tDmaflips      int64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_openbsd_riscv64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && riscv64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs mem/types_openbsd.go\n\npackage mem\n\nconst (\n\tCTLVfs        = 10\n\tVfsGeneric    = 0\n\tVfsBcacheStat = 3\n)\n\nconst (\n\tsizeOfBcachestats = 0x90\n)\n\ntype Bcachestats struct {\n\tNumbufs       int64\n\tNumbufpages   int64\n\tNumdirtypages int64\n\tNumcleanpages int64\n\tPendingwrites int64\n\tPendingreads  int64\n\tNumwrites     int64\n\tNumreads      int64\n\tCachehits     int64\n\tBusymapped    int64\n\tDmapages      int64\n\tHighpages     int64\n\tDelwribufs    int64\n\tKvaslots      int64\n\tAvail         int64\n\tHighflips     int64\n\tHighflops     int64\n\tDmaflips      int64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_plan9.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build plan9\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"os\"\n\n\tstats \"github.com/lufia/plan9stats\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\troot := os.Getenv(\"HOST_ROOT\")\n\tm, err := stats.ReadMemStats(ctx, stats.WithRootDir(root))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tu := 0.0\n\tif m.SwapPages.Avail != 0 {\n\t\tu = float64(m.SwapPages.Used) / float64(m.SwapPages.Avail) * 100.0\n\t}\n\treturn &SwapMemoryStat{\n\t\tTotal:       uint64(m.SwapPages.Avail * m.PageSize),\n\t\tUsed:        uint64(m.SwapPages.Used * m.PageSize),\n\t\tFree:        uint64(m.SwapPages.Free() * m.PageSize),\n\t\tUsedPercent: u,\n\t}, nil\n}\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\troot := os.Getenv(\"HOST_ROOT\")\n\tm, err := stats.ReadMemStats(ctx, stats.WithRootDir(root))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tu := 0.0\n\tif m.UserPages.Avail != 0 {\n\t\tu = float64(m.UserPages.Used) / float64(m.UserPages.Avail) * 100.0\n\t}\n\treturn &VirtualMemoryStat{\n\t\tTotal:       uint64(m.Total),\n\t\tAvailable:   uint64(m.UserPages.Free() * m.PageSize),\n\t\tUsed:        uint64(m.UserPages.Used * m.PageSize),\n\t\tUsedPercent: u,\n\t\tFree:        uint64(m.UserPages.Free() * m.PageSize),\n\n\t\tSwapTotal: uint64(m.SwapPages.Avail * m.PageSize),\n\t\tSwapFree:  uint64(m.SwapPages.Free() * m.PageSize),\n\t}, nil\n}\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn SwapDevicesWithContext(context.Background())\n}\n\nfunc SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_solaris.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build solaris\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/tklauser/go-sysconf\"\n)\n\n// VirtualMemory for Solaris is a minimal implementation which only returns\n// what Nomad needs. It does take into account global vs zone, however.\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tresult := &VirtualMemoryStat{}\n\n\tzoneName, err := zoneName()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif zoneName == \"global\" {\n\t\tcap, err := globalZoneMemoryCapacity()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresult.Total = cap\n\t\tfreemem, err := globalZoneFreeMemory(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresult.Available = freemem\n\t\tresult.Free = freemem\n\t\tresult.Used = result.Total - result.Free\n\t} else {\n\t\tcap, err := nonGlobalZoneMemoryCapacity()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresult.Total = cap\n\t}\n\n\treturn result, nil\n}\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc zoneName() (string, error) {\n\tctx := context.Background()\n\tout, err := invoke.CommandWithContext(ctx, \"zonename\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn strings.TrimSpace(string(out)), nil\n}\n\nvar globalZoneMemoryCapacityMatch = regexp.MustCompile(`[Mm]emory size: (\\d+) Megabytes`)\n\nfunc globalZoneMemoryCapacity() (uint64, error) {\n\tctx := context.Background()\n\tout, err := invoke.CommandWithContext(ctx, \"prtconf\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tmatch := globalZoneMemoryCapacityMatch.FindAllStringSubmatch(string(out), -1)\n\tif len(match) != 1 {\n\t\treturn 0, errors.New(\"memory size not contained in output of prtconf\")\n\t}\n\n\ttotalMB, err := strconv.ParseUint(match[0][1], 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn totalMB * 1024 * 1024, nil\n}\n\nfunc globalZoneFreeMemory(ctx context.Context) (uint64, error) {\n\toutput, err := invoke.CommandWithContext(ctx, \"pagesize\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tpagesize, err := strconv.ParseUint(strings.TrimSpace(string(output)), 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tfree, err := sysconf.Sysconf(sysconf.SC_AVPHYS_PAGES)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn uint64(free) * pagesize, nil\n}\n\nvar kstatMatch = regexp.MustCompile(`(\\S+)\\s+(\\S*)`)\n\nfunc nonGlobalZoneMemoryCapacity() (uint64, error) {\n\tctx := context.Background()\n\tout, err := invoke.CommandWithContext(ctx, \"kstat\", \"-p\", \"-c\", \"zone_memory_cap\", \"memory_cap:*:*:physcap\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tkstats := kstatMatch.FindAllStringSubmatch(string(out), -1)\n\tif len(kstats) != 1 {\n\t\treturn 0, fmt.Errorf(\"expected 1 kstat, found %d\", len(kstats))\n\t}\n\n\tmemSizeBytes, err := strconv.ParseUint(kstats[0][2], 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn memSizeBytes, nil\n}\n\nconst swapCommand = \"swap\"\n\n// The blockSize as reported by `swap -l`. See https://docs.oracle.com/cd/E23824_01/html/821-1459/fsswap-52195.html\nconst blockSize = 512\n\n// swapctl column indexes\nconst (\n\tnameCol = 0\n\t// devCol = 1\n\t// swaploCol = 2\n\ttotalBlocksCol = 3\n\tfreeBlocksCol  = 4\n)\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn SwapDevicesWithContext(context.Background())\n}\n\nfunc SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {\n\toutput, err := invoke.CommandWithContext(ctx, swapCommand, \"-l\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not execute %q: %w\", swapCommand, err)\n\t}\n\n\treturn parseSwapsCommandOutput(string(output))\n}\n\nfunc parseSwapsCommandOutput(output string) ([]*SwapDevice, error) {\n\tlines := strings.Split(output, \"\\n\")\n\tif len(lines) == 0 {\n\t\treturn nil, fmt.Errorf(\"could not parse output of %q: no lines in %q\", swapCommand, output)\n\t}\n\n\t// Check header headerFields are as expected.\n\theaderFields := strings.Fields(lines[0])\n\tif len(headerFields) < freeBlocksCol {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: too few fields in header %q\", swapCommand, lines[0])\n\t}\n\tif headerFields[nameCol] != \"swapfile\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapCommand, headerFields[nameCol], \"swapfile\")\n\t}\n\tif headerFields[totalBlocksCol] != \"blocks\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapCommand, headerFields[totalBlocksCol], \"blocks\")\n\t}\n\tif headerFields[freeBlocksCol] != \"free\" {\n\t\treturn nil, fmt.Errorf(\"couldn't parse %q: expected %q to be %q\", swapCommand, headerFields[freeBlocksCol], \"free\")\n\t}\n\n\tvar swapDevices []*SwapDevice\n\tfor _, line := range lines[1:] {\n\t\tif line == \"\" {\n\t\t\tcontinue // the terminal line is typically empty\n\t\t}\n\t\tfields := strings.Fields(line)\n\t\tif len(fields) < freeBlocksCol {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse %q: too few fields\", swapCommand)\n\t\t}\n\n\t\ttotalBlocks, err := strconv.ParseUint(fields[totalBlocksCol], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse 'Size' column in %q: %w\", swapCommand, err)\n\t\t}\n\n\t\tfreeBlocks, err := strconv.ParseUint(fields[freeBlocksCol], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"couldn't parse 'Used' column in %q: %w\", swapCommand, err)\n\t\t}\n\n\t\tswapDevices = append(swapDevices, &SwapDevice{\n\t\t\tName:      fields[nameCol],\n\t\t\tUsedBytes: (totalBlocks - freeBlocks) * blockSize,\n\t\t\tFreeBytes: freeBlocks * blockSize,\n\t\t})\n\t}\n\n\treturn swapDevices, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/mem/mem_windows.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build windows\n\npackage mem\n\nimport (\n\t\"context\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"golang.org/x/sys/windows\"\n)\n\nvar (\n\tprocEnumPageFilesW       = common.ModPsapi.NewProc(\"EnumPageFilesW\")\n\tprocGetNativeSystemInfo  = common.Modkernel32.NewProc(\"GetNativeSystemInfo\")\n\tprocGetPerformanceInfo   = common.ModPsapi.NewProc(\"GetPerformanceInfo\")\n\tprocGlobalMemoryStatusEx = common.Modkernel32.NewProc(\"GlobalMemoryStatusEx\")\n)\n\ntype memoryStatusEx struct {\n\tcbSize                  uint32\n\tdwMemoryLoad            uint32\n\tullTotalPhys            uint64 // in bytes\n\tullAvailPhys            uint64\n\tullTotalPageFile        uint64\n\tullAvailPageFile        uint64\n\tullTotalVirtual         uint64\n\tullAvailVirtual         uint64\n\tullAvailExtendedVirtual uint64\n}\n\nfunc VirtualMemory() (*VirtualMemoryStat, error) {\n\treturn VirtualMemoryWithContext(context.Background())\n}\n\nfunc VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {\n\tvar memInfo memoryStatusEx\n\tmemInfo.cbSize = uint32(unsafe.Sizeof(memInfo))\n\tmem, _, _ := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&memInfo)))\n\tif mem == 0 {\n\t\treturn nil, windows.GetLastError()\n\t}\n\n\tret := &VirtualMemoryStat{\n\t\tTotal:       memInfo.ullTotalPhys,\n\t\tAvailable:   memInfo.ullAvailPhys,\n\t\tFree:        memInfo.ullAvailPhys,\n\t\tUsedPercent: float64(memInfo.dwMemoryLoad),\n\t}\n\n\tret.Used = ret.Total - ret.Available\n\treturn ret, nil\n}\n\ntype performanceInformation struct {\n\tcb                uint32\n\tcommitTotal       uint64\n\tcommitLimit       uint64\n\tcommitPeak        uint64\n\tphysicalTotal     uint64\n\tphysicalAvailable uint64\n\tsystemCache       uint64\n\tkernelTotal       uint64\n\tkernelPaged       uint64\n\tkernelNonpaged    uint64\n\tpageSize          uint64\n\thandleCount       uint32\n\tprocessCount      uint32\n\tthreadCount       uint32\n}\n\nfunc SwapMemory() (*SwapMemoryStat, error) {\n\treturn SwapMemoryWithContext(context.Background())\n}\n\nfunc SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {\n\t// Use the performance counter to get the swap usage percentage\n\tcounter, err := common.NewWin32PerformanceCounter(\"swap_percentage\", `\\Paging File(_Total)\\% Usage`)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer common.PdhCloseQuery.Call(uintptr(counter.Query))\n\n\tusedPercent, err := counter.GetValue()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Get total memory from performance information\n\tvar perfInfo performanceInformation\n\tperfInfo.cb = uint32(unsafe.Sizeof(perfInfo))\n\tmem, _, _ := procGetPerformanceInfo.Call(uintptr(unsafe.Pointer(&perfInfo)), uintptr(perfInfo.cb))\n\tif mem == 0 {\n\t\treturn nil, windows.GetLastError()\n\t}\n\ttotalPhys := perfInfo.physicalTotal * perfInfo.pageSize\n\ttotalSys := perfInfo.commitLimit * perfInfo.pageSize\n\ttotal := totalSys - totalPhys\n\n\tvar used uint64\n\tif total > 0 {\n\t\tused = uint64(0.01 * usedPercent * float64(total))\n\t} else {\n\t\tusedPercent = 0.0\n\t\tused = 0\n\t}\n\n\tret := &SwapMemoryStat{\n\t\tTotal:       total,\n\t\tUsed:        used,\n\t\tFree:        total - used,\n\t\tUsedPercent: common.Round(usedPercent, 1),\n\t}\n\n\treturn ret, nil\n}\n\nvar (\n\tpageSize     uint64\n\tpageSizeOnce sync.Once\n)\n\ntype systemInfo struct {\n\twProcessorArchitecture      uint16\n\twReserved                   uint16\n\tdwPageSize                  uint32\n\tlpMinimumApplicationAddress uintptr\n\tlpMaximumApplicationAddress uintptr\n\tdwActiveProcessorMask       uintptr\n\tdwNumberOfProcessors        uint32\n\tdwProcessorType             uint32\n\tdwAllocationGranularity     uint32\n\twProcessorLevel             uint16\n\twProcessorRevision          uint16\n}\n\n// system type as defined in https://docs.microsoft.com/en-us/windows/win32/api/psapi/ns-psapi-enum_page_file_information\ntype enumPageFileInformation struct {\n\tcb         uint32\n\treserved   uint32\n\ttotalSize  uint64\n\ttotalInUse uint64\n\tpeakUsage  uint64\n}\n\nfunc SwapDevices() ([]*SwapDevice, error) {\n\treturn SwapDevicesWithContext(context.Background())\n}\n\nfunc SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {\n\tpageSizeOnce.Do(func() {\n\t\tvar sysInfo systemInfo\n\t\tprocGetNativeSystemInfo.Call(uintptr(unsafe.Pointer(&sysInfo)))\n\t\tpageSize = uint64(sysInfo.dwPageSize)\n\t})\n\n\t// the following system call invokes the supplied callback function once for each page file before returning\n\t// see https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-enumpagefilesw\n\tvar swapDevices []*SwapDevice\n\tresult, _, _ := procEnumPageFilesW.Call(windows.NewCallback(pEnumPageFileCallbackW), uintptr(unsafe.Pointer(&swapDevices)))\n\tif result == 0 {\n\t\treturn nil, windows.GetLastError()\n\t}\n\n\treturn swapDevices, nil\n}\n\n// system callback as defined in https://docs.microsoft.com/en-us/windows/win32/api/psapi/nc-psapi-penum_page_file_callbackw\nfunc pEnumPageFileCallbackW(swapDevices *[]*SwapDevice, enumPageFileInfo *enumPageFileInformation, lpFilenamePtr *[syscall.MAX_LONG_PATH]uint16) *bool {\n\t*swapDevices = append(*swapDevices, &SwapDevice{\n\t\tName:      syscall.UTF16ToString((*lpFilenamePtr)[:]),\n\t\tUsedBytes: enumPageFileInfo.totalInUse * pageSize,\n\t\tFreeBytes: (enumPageFileInfo.totalSize - enumPageFileInfo.totalInUse) * pageSize,\n\t})\n\n\t// return true to continue enumerating page files\n\tret := true\n\treturn &ret\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage net\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"net\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nvar invoke common.Invoker = common.Invoke{}\n\ntype IOCountersStat struct {\n\tName        string `json:\"name\"`        // interface name\n\tBytesSent   uint64 `json:\"bytesSent\"`   // number of bytes sent\n\tBytesRecv   uint64 `json:\"bytesRecv\"`   // number of bytes received\n\tPacketsSent uint64 `json:\"packetsSent\"` // number of packets sent\n\tPacketsRecv uint64 `json:\"packetsRecv\"` // number of packets received\n\tErrin       uint64 `json:\"errin\"`       // total number of errors while receiving\n\tErrout      uint64 `json:\"errout\"`      // total number of errors while sending\n\tDropin      uint64 `json:\"dropin\"`      // total number of incoming packets which were dropped\n\tDropout     uint64 `json:\"dropout\"`     // total number of outgoing packets which were dropped (always 0 on OSX and BSD)\n\tFifoin      uint64 `json:\"fifoin\"`      // total number of FIFO buffers errors while receiving\n\tFifoout     uint64 `json:\"fifoout\"`     // total number of FIFO buffers errors while sending\n}\n\n// Addr is implemented compatibility to psutil\ntype Addr struct {\n\tIP   string `json:\"ip\"`\n\tPort uint32 `json:\"port\"`\n}\n\ntype ConnectionStat struct {\n\tFd     uint32  `json:\"fd\"`\n\tFamily uint32  `json:\"family\"`\n\tType   uint32  `json:\"type\"`\n\tLaddr  Addr    `json:\"localaddr\"`\n\tRaddr  Addr    `json:\"remoteaddr\"`\n\tStatus string  `json:\"status\"`\n\tUids   []int32 `json:\"uids\"`\n\tPid    int32   `json:\"pid\"`\n}\n\n// System wide stats about different network protocols\ntype ProtoCountersStat struct {\n\tProtocol string           `json:\"protocol\"`\n\tStats    map[string]int64 `json:\"stats\"`\n}\n\n// NetInterfaceAddr is designed for represent interface addresses\ntype InterfaceAddr struct {\n\tAddr string `json:\"addr\"`\n}\n\n// InterfaceAddrList is a list of InterfaceAddr\ntype InterfaceAddrList []InterfaceAddr\n\ntype InterfaceStat struct {\n\tIndex        int               `json:\"index\"`\n\tMTU          int               `json:\"mtu\"`          // maximum transmission unit\n\tName         string            `json:\"name\"`         // e.g., \"en0\", \"lo0\", \"eth0.100\"\n\tHardwareAddr string            `json:\"hardwareAddr\"` // IEEE MAC-48, EUI-48 and EUI-64 form\n\tFlags        []string          `json:\"flags\"`        // e.g., FlagUp, FlagLoopback, FlagMulticast\n\tAddrs        InterfaceAddrList `json:\"addrs\"`\n}\n\n// InterfaceStatList is a list of InterfaceStat\ntype InterfaceStatList []InterfaceStat\n\ntype FilterStat struct {\n\tConnTrackCount int64 `json:\"connTrackCount\"`\n\tConnTrackMax   int64 `json:\"connTrackMax\"`\n}\n\n// ConntrackStat has conntrack summary info\ntype ConntrackStat struct {\n\tEntries       uint32 `json:\"entries\"`       // Number of entries in the conntrack table\n\tSearched      uint32 `json:\"searched\"`      // Number of conntrack table lookups performed\n\tFound         uint32 `json:\"found\"`         // Number of searched entries which were successful\n\tNew           uint32 `json:\"new\"`           // Number of entries added which were not expected before\n\tInvalid       uint32 `json:\"invalid\"`       // Number of packets seen which can not be tracked\n\tIgnore        uint32 `json:\"ignore\"`        // Packets seen which are already connected to an entry\n\tDelete        uint32 `json:\"delete\"`        // Number of entries which were removed\n\tDeleteList    uint32 `json:\"deleteList\"`    // Number of entries which were put to dying list\n\tInsert        uint32 `json:\"insert\"`        // Number of entries inserted into the list\n\tInsertFailed  uint32 `json:\"insertFailed\"`  // # insertion attempted but failed (same entry exists)\n\tDrop          uint32 `json:\"drop\"`          // Number of packets dropped due to conntrack failure.\n\tEarlyDrop     uint32 `json:\"earlyDrop\"`     // Dropped entries to make room for new ones, if maxsize reached\n\tIcmpError     uint32 `json:\"icmpError\"`     // Subset of invalid. Packets that can't be tracked d/t error\n\tExpectNew     uint32 `json:\"expectNew\"`     // Entries added after an expectation was already present\n\tExpectCreate  uint32 `json:\"expectCreate\"`  // Expectations added\n\tExpectDelete  uint32 `json:\"expectDelete\"`  // Expectations deleted\n\tSearchRestart uint32 `json:\"searchRestart\"` // Conntrack table lookups restarted due to hashtable resizes\n}\n\nfunc NewConntrackStat(e uint32, s uint32, f uint32, n uint32, inv uint32, ign uint32, del uint32, dlst uint32, ins uint32, insfail uint32, drop uint32, edrop uint32, ie uint32, en uint32, ec uint32, ed uint32, sr uint32) *ConntrackStat {\n\treturn &ConntrackStat{\n\t\tEntries:       e,\n\t\tSearched:      s,\n\t\tFound:         f,\n\t\tNew:           n,\n\t\tInvalid:       inv,\n\t\tIgnore:        ign,\n\t\tDelete:        del,\n\t\tDeleteList:    dlst,\n\t\tInsert:        ins,\n\t\tInsertFailed:  insfail,\n\t\tDrop:          drop,\n\t\tEarlyDrop:     edrop,\n\t\tIcmpError:     ie,\n\t\tExpectNew:     en,\n\t\tExpectCreate:  ec,\n\t\tExpectDelete:  ed,\n\t\tSearchRestart: sr,\n\t}\n}\n\ntype ConntrackStatList struct {\n\titems []*ConntrackStat\n}\n\nfunc NewConntrackStatList() *ConntrackStatList {\n\treturn &ConntrackStatList{\n\t\titems: []*ConntrackStat{},\n\t}\n}\n\nfunc (l *ConntrackStatList) Append(c *ConntrackStat) {\n\tl.items = append(l.items, c)\n}\n\nfunc (l *ConntrackStatList) Items() []ConntrackStat {\n\titems := make([]ConntrackStat, len(l.items))\n\tfor i, el := range l.items {\n\t\titems[i] = *el\n\t}\n\treturn items\n}\n\n// Summary returns a single-element list with totals from all list items.\nfunc (l *ConntrackStatList) Summary() []ConntrackStat {\n\tsummary := NewConntrackStat(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\n\tfor _, cs := range l.items {\n\t\tsummary.Entries += cs.Entries\n\t\tsummary.Searched += cs.Searched\n\t\tsummary.Found += cs.Found\n\t\tsummary.New += cs.New\n\t\tsummary.Invalid += cs.Invalid\n\t\tsummary.Ignore += cs.Ignore\n\t\tsummary.Delete += cs.Delete\n\t\tsummary.DeleteList += cs.DeleteList\n\t\tsummary.Insert += cs.Insert\n\t\tsummary.InsertFailed += cs.InsertFailed\n\t\tsummary.Drop += cs.Drop\n\t\tsummary.EarlyDrop += cs.EarlyDrop\n\t\tsummary.IcmpError += cs.IcmpError\n\t\tsummary.ExpectNew += cs.ExpectNew\n\t\tsummary.ExpectCreate += cs.ExpectCreate\n\t\tsummary.ExpectDelete += cs.ExpectDelete\n\t\tsummary.SearchRestart += cs.SearchRestart\n\t}\n\treturn []ConntrackStat{*summary}\n}\n\nfunc (n IOCountersStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (n ConnectionStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (n ProtoCountersStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (a Addr) String() string {\n\ts, _ := json.Marshal(a)\n\treturn string(s)\n}\n\nfunc (n InterfaceStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (l InterfaceStatList) String() string {\n\ts, _ := json.Marshal(l)\n\treturn string(s)\n}\n\nfunc (n InterfaceAddr) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc (n ConntrackStat) String() string {\n\ts, _ := json.Marshal(n)\n\treturn string(s)\n}\n\nfunc Interfaces() (InterfaceStatList, error) {\n\treturn InterfacesWithContext(context.Background())\n}\n\nfunc InterfacesWithContext(ctx context.Context) (InterfaceStatList, error) {\n\tis, err := net.Interfaces()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make(InterfaceStatList, 0, len(is))\n\tfor _, ifi := range is {\n\n\t\tvar flags []string\n\t\tif ifi.Flags&net.FlagUp != 0 {\n\t\t\tflags = append(flags, \"up\")\n\t\t}\n\t\tif ifi.Flags&net.FlagBroadcast != 0 {\n\t\t\tflags = append(flags, \"broadcast\")\n\t\t}\n\t\tif ifi.Flags&net.FlagLoopback != 0 {\n\t\t\tflags = append(flags, \"loopback\")\n\t\t}\n\t\tif ifi.Flags&net.FlagPointToPoint != 0 {\n\t\t\tflags = append(flags, \"pointtopoint\")\n\t\t}\n\t\tif ifi.Flags&net.FlagMulticast != 0 {\n\t\t\tflags = append(flags, \"multicast\")\n\t\t}\n\n\t\tr := InterfaceStat{\n\t\t\tIndex:        ifi.Index,\n\t\t\tName:         ifi.Name,\n\t\t\tMTU:          ifi.MTU,\n\t\t\tHardwareAddr: ifi.HardwareAddr.String(),\n\t\t\tFlags:        flags,\n\t\t}\n\t\taddrs, err := ifi.Addrs()\n\t\tif err == nil {\n\t\t\tr.Addrs = make(InterfaceAddrList, 0, len(addrs))\n\t\t\tfor _, addr := range addrs {\n\t\t\t\tr.Addrs = append(r.Addrs, InterfaceAddr{\n\t\t\t\t\tAddr: addr.String(),\n\t\t\t\t})\n\t\t\t}\n\n\t\t}\n\t\tret = append(ret, r)\n\t}\n\n\treturn ret, nil\n}\n\nfunc getIOCountersAll(n []IOCountersStat) ([]IOCountersStat, error) {\n\tr := IOCountersStat{\n\t\tName: \"all\",\n\t}\n\tfor _, nic := range n {\n\t\tr.BytesRecv += nic.BytesRecv\n\t\tr.PacketsRecv += nic.PacketsRecv\n\t\tr.Errin += nic.Errin\n\t\tr.Dropin += nic.Dropin\n\t\tr.BytesSent += nic.BytesSent\n\t\tr.PacketsSent += nic.PacketsSent\n\t\tr.Errout += nic.Errout\n\t\tr.Dropout += nic.Dropout\n\t}\n\n\treturn []IOCountersStat{r}, nil\n}\n\n// NetIOCounters returns network I/O statistics for every network\n// interface installed on the system.  If pernic argument is false,\n// return only sum of all information (which name is 'all'). If true,\n// every network interface installed on the system is returned\n// separately.\nfunc IOCounters(pernic bool) ([]IOCountersStat, error) {\n\treturn IOCountersWithContext(context.Background(), pernic)\n}\n\nfunc IOCountersByFile(pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCountersByFileWithContext(context.Background(), pernic, filename)\n}\n\n// ProtoCounters returns network statistics for the entire system\n// If protocols is empty then all protocols are returned, otherwise\n// just the protocols in the list are returned.\n// Available protocols:\n// [ip,icmp,icmpmsg,tcp,udp,udplite]\n// Not Implemented for FreeBSD, Windows, OpenBSD, Darwin\nfunc ProtoCounters(protocols []string) ([]ProtoCountersStat, error) {\n\treturn ProtoCountersWithContext(context.Background(), protocols)\n}\n\n// NetFilterCounters returns iptables conntrack statistics\n// the currently in use conntrack count and the max.\n// If the file does not exist or is invalid it will return nil.\nfunc FilterCounters() ([]FilterStat, error) {\n\treturn FilterCountersWithContext(context.Background())\n}\n\n// ConntrackStats returns more detailed info about the conntrack table\nfunc ConntrackStats(percpu bool) ([]ConntrackStat, error) {\n\treturn ConntrackStatsWithContext(context.Background(), percpu)\n}\n\n// Return a list of network connections opened.\nfunc Connections(kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsWithContext(context.Background(), kind)\n}\n\n// Return a list of network connections opened returning at most `max`\n// connections for each running process.\nfunc ConnectionsMax(kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithContext(context.Background(), kind, maxConn)\n}\n\n// Return a list of network connections opened, omitting `Uids`.\n// WithoutUids functions are reliant on implementation details. They may be altered to be an alias for Connections or be\n// removed from the API in the future.\nfunc ConnectionsWithoutUids(kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsWithoutUidsWithContext(context.Background(), kind)\n}\n\n// Return a list of network connections opened by a process.\nfunc ConnectionsPid(kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidWithContext(context.Background(), kind, pid)\n}\n\n// Return a list of network connections opened, omitting `Uids`.\n// WithoutUids functions are reliant on implementation details. They may be altered to be an alias for Connections or be\n// removed from the API in the future.\nfunc ConnectionsPidWithoutUids(kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidWithoutUidsWithContext(context.Background(), kind, pid)\n}\n\nfunc ConnectionsPidMaxWithoutUids(kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(context.Background(), kind, pid, maxConn)\n}\n\n// Return up to `max` network connections opened by a process.\nfunc ConnectionsPidMax(kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(context.Background(), kind, pid, maxConn)\n}\n\n// Pids retunres all pids.\n// Note: this is a copy of process_linux.Pids()\n// FIXME: Import process occures import cycle.\n// move to common made other platform breaking. Need consider.\nfunc Pids() ([]int32, error) {\n\treturn PidsWithContext(context.Background())\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_aix.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix\n\npackage net\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\n// Deprecated: use process.PidsWithContext instead\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCounters(pernic)\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc parseNetstatNetLine(line string) (ConnectionStat, error) {\n\tf := strings.Fields(line)\n\tif len(f) < 5 {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"wrong line,%s\", line)\n\t}\n\n\tvar netType, netFamily uint32\n\tswitch f[0] {\n\tcase \"tcp\", \"tcp4\":\n\t\tnetType = syscall.SOCK_STREAM\n\t\tnetFamily = syscall.AF_INET\n\tcase \"udp\", \"udp4\":\n\t\tnetType = syscall.SOCK_DGRAM\n\t\tnetFamily = syscall.AF_INET\n\tcase \"tcp6\":\n\t\tnetType = syscall.SOCK_STREAM\n\t\tnetFamily = syscall.AF_INET6\n\tcase \"udp6\":\n\t\tnetType = syscall.SOCK_DGRAM\n\t\tnetFamily = syscall.AF_INET6\n\tdefault:\n\t\treturn ConnectionStat{}, fmt.Errorf(\"unknown type, %s\", f[0])\n\t}\n\n\tladdr, raddr, err := parseNetstatAddr(f[3], f[4], netFamily)\n\tif err != nil {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"failed to parse netaddr, %s %s\", f[3], f[4])\n\t}\n\n\tn := ConnectionStat{\n\t\tFd:     uint32(0), // not supported\n\t\tFamily: uint32(netFamily),\n\t\tType:   uint32(netType),\n\t\tLaddr:  laddr,\n\t\tRaddr:  raddr,\n\t\tPid:    int32(0), // not supported\n\t}\n\tif len(f) == 6 {\n\t\tn.Status = f[5]\n\t}\n\n\treturn n, nil\n}\n\nvar portMatch = regexp.MustCompile(`(.*)\\.(\\d+)$`)\n\n// This function only works for netstat returning addresses with a \".\"\n// before the port (0.0.0.0.22 instead of 0.0.0.0:22).\nfunc parseNetstatAddr(local string, remote string, family uint32) (laddr Addr, raddr Addr, err error) {\n\tparse := func(l string) (Addr, error) {\n\t\tmatches := portMatch.FindStringSubmatch(l)\n\t\tif matches == nil {\n\t\t\treturn Addr{}, fmt.Errorf(\"wrong addr, %s\", l)\n\t\t}\n\t\thost := matches[1]\n\t\tport := matches[2]\n\t\tif host == \"*\" {\n\t\t\tswitch family {\n\t\t\tcase syscall.AF_INET:\n\t\t\t\thost = \"0.0.0.0\"\n\t\t\tcase syscall.AF_INET6:\n\t\t\t\thost = \"::\"\n\t\t\tdefault:\n\t\t\t\treturn Addr{}, fmt.Errorf(\"unknown family, %d\", family)\n\t\t\t}\n\t\t}\n\t\tlport, err := strconv.ParseInt(port, 10, 32)\n\t\tif err != nil {\n\t\t\treturn Addr{}, err\n\t\t}\n\t\treturn Addr{IP: host, Port: uint32(lport)}, nil\n\t}\n\n\tladdr, err = parse(local)\n\tif remote != \"*.*\" { // remote addr exists\n\t\traddr, err = parse(remote)\n\t\tif err != nil {\n\t\t\treturn laddr, raddr, err\n\t\t}\n\t}\n\n\treturn laddr, raddr, err\n}\n\nfunc parseNetstatUnixLine(f []string) (ConnectionStat, error) {\n\tif len(f) < 8 {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"wrong number of fields: expected >=8 got %d\", len(f))\n\t}\n\n\tvar netType uint32\n\n\tswitch f[1] {\n\tcase \"dgram\":\n\t\tnetType = syscall.SOCK_DGRAM\n\tcase \"stream\":\n\t\tnetType = syscall.SOCK_STREAM\n\tdefault:\n\t\treturn ConnectionStat{}, fmt.Errorf(\"unknown type: %s\", f[1])\n\t}\n\n\t// Some Unix Socket don't have any address associated\n\taddr := \"\"\n\tif len(f) == 9 {\n\t\taddr = f[8]\n\t}\n\n\tc := ConnectionStat{\n\t\tFd:     uint32(0), // not supported\n\t\tFamily: uint32(syscall.AF_UNIX),\n\t\tType:   uint32(netType),\n\t\tLaddr: Addr{\n\t\t\tIP: addr,\n\t\t},\n\t\tStatus: \"NONE\",\n\t\tPid:    int32(0), // not supported\n\t}\n\n\treturn c, nil\n}\n\n// Return true if proto is the corresponding to the kind parameter\n// Only for Inet lines\nfunc hasCorrectInetProto(kind, proto string) bool {\n\tswitch kind {\n\tcase \"all\", \"inet\":\n\t\treturn true\n\tcase \"unix\":\n\t\treturn false\n\tcase \"inet4\":\n\t\treturn !strings.HasSuffix(proto, \"6\")\n\tcase \"inet6\":\n\t\treturn strings.HasSuffix(proto, \"6\")\n\tcase \"tcp\":\n\t\treturn proto == \"tcp\" || proto == \"tcp4\" || proto == \"tcp6\"\n\tcase \"tcp4\":\n\t\treturn proto == \"tcp\" || proto == \"tcp4\"\n\tcase \"tcp6\":\n\t\treturn proto == \"tcp6\"\n\tcase \"udp\":\n\t\treturn proto == \"udp\" || proto == \"udp4\" || proto == \"udp6\"\n\tcase \"udp4\":\n\t\treturn proto == \"udp\" || proto == \"udp4\"\n\tcase \"udp6\":\n\t\treturn proto == \"udp6\"\n\t}\n\treturn false\n}\n\nfunc parseNetstatA(output string, kind string) ([]ConnectionStat, error) {\n\tvar ret []ConnectionStat\n\tlines := strings.Split(string(output), \"\\n\")\n\n\tfor _, line := range lines {\n\t\tfields := strings.Fields(line)\n\t\tif len(fields) < 1 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif strings.HasPrefix(fields[0], \"f1\") {\n\t\t\t// Unix lines\n\t\t\tif len(fields) < 2 {\n\t\t\t\t// every unix connections have two lines\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tc, err := parseNetstatUnixLine(fields)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"failed to parse Unix Address (%s): %s\", line, err)\n\t\t\t}\n\n\t\t\tret = append(ret, c)\n\n\t\t} else if strings.HasPrefix(fields[0], \"tcp\") || strings.HasPrefix(fields[0], \"udp\") {\n\t\t\t// Inet lines\n\t\t\tif !hasCorrectInetProto(kind, fields[0]) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// On AIX, netstat display some connections with \"*.*\" as local addresses\n\t\t\t// Skip them as they aren't real connections.\n\t\t\tif fields[3] == \"*.*\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tc, err := parseNetstatNetLine(line)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"failed to parse Inet Address (%s): %s\", line, err)\n\t\t\t}\n\n\t\t\tret = append(ret, c)\n\t\t} else {\n\t\t\t// Header lines\n\t\t\tcontinue\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n\nfunc ConnectionsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\targs := []string{\"-na\"}\n\tswitch strings.ToLower(kind) {\n\tdefault:\n\t\tfallthrough\n\tcase \"\":\n\t\tkind = \"all\"\n\tcase \"all\":\n\t\t// nothing to add\n\tcase \"inet\", \"inet4\", \"inet6\":\n\t\targs = append(args, \"-finet\")\n\tcase \"tcp\", \"tcp4\", \"tcp6\":\n\t\targs = append(args, \"-finet\")\n\tcase \"udp\", \"udp4\", \"udp6\":\n\t\targs = append(args, \"-finet\")\n\tcase \"unix\":\n\t\targs = append(args, \"-funix\")\n\t}\n\n\tout, err := invoke.CommandWithContext(ctx, \"netstat\", args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tret, err := parseNetstatA(string(out), kind)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn ret, nil\n}\n\nfunc ConnectionsMaxWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsWithoutUidsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithoutUidsWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithoutUidsWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsPidWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidWithoutUidsWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidMaxWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, false)\n}\n\nfunc ConnectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, true)\n}\n\nfunc connectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int, skipUids bool) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_aix_cgo.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix && cgo\n\npackage net\n\nimport (\n\t\"context\"\n\n\t\"github.com/power-devops/perfstat\"\n)\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\tifs, err := perfstat.NetIfaceStat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tiocounters := make([]IOCountersStat, 0, len(ifs))\n\tfor _, netif := range ifs {\n\t\tn := IOCountersStat{\n\t\t\tName:        netif.Name,\n\t\t\tBytesSent:   uint64(netif.OBytes),\n\t\t\tBytesRecv:   uint64(netif.IBytes),\n\t\t\tPacketsSent: uint64(netif.OPackets),\n\t\t\tPacketsRecv: uint64(netif.IPackets),\n\t\t\tErrin:       uint64(netif.OErrors),\n\t\t\tErrout:      uint64(netif.IErrors),\n\t\t\tDropout:     uint64(netif.XmitDrops),\n\t\t}\n\t\tiocounters = append(iocounters, n)\n\t}\n\tif pernic == false {\n\t\treturn getIOCountersAll(iocounters)\n\t}\n\treturn iocounters, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_aix_nocgo.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build aix && !cgo\n\npackage net\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc parseNetstatI(output string) ([]IOCountersStat, error) {\n\tlines := strings.Split(string(output), \"\\n\")\n\tret := make([]IOCountersStat, 0, len(lines)-1)\n\texists := make([]string, 0, len(ret))\n\n\t// Check first line is header\n\tif len(lines) > 0 && strings.Fields(lines[0])[0] != \"Name\" {\n\t\treturn nil, fmt.Errorf(\"not a 'netstat -i' output\")\n\t}\n\n\tfor _, line := range lines[1:] {\n\t\tvalues := strings.Fields(line)\n\t\tif len(values) < 1 || values[0] == \"Name\" {\n\t\t\tcontinue\n\t\t}\n\t\tif common.StringsHas(exists, values[0]) {\n\t\t\t// skip if already get\n\t\t\tcontinue\n\t\t}\n\t\texists = append(exists, values[0])\n\n\t\tif len(values) < 9 {\n\t\t\tcontinue\n\t\t}\n\n\t\tbase := 1\n\t\t// sometimes Address is omitted\n\t\tif len(values) < 10 {\n\t\t\tbase = 0\n\t\t}\n\n\t\tparsed := make([]uint64, 0, 5)\n\t\tvv := []string{\n\t\t\tvalues[base+3], // Ipkts == PacketsRecv\n\t\t\tvalues[base+4], // Ierrs == Errin\n\t\t\tvalues[base+5], // Opkts == PacketsSent\n\t\t\tvalues[base+6], // Oerrs == Errout\n\t\t\tvalues[base+8], // Drops == Dropout\n\t\t}\n\n\t\tfor _, target := range vv {\n\t\t\tif target == \"-\" {\n\t\t\t\tparsed = append(parsed, 0)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tt, err := strconv.ParseUint(target, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tparsed = append(parsed, t)\n\t\t}\n\n\t\tn := IOCountersStat{\n\t\t\tName:        values[0],\n\t\t\tPacketsRecv: parsed[0],\n\t\t\tErrin:       parsed[1],\n\t\t\tPacketsSent: parsed[2],\n\t\t\tErrout:      parsed[3],\n\t\t\tDropout:     parsed[4],\n\t\t}\n\t\tret = append(ret, n)\n\t}\n\treturn ret, nil\n}\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\tout, err := invoke.CommandWithContext(ctx, \"netstat\", \"-idn\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tiocounters, err := parseNetstatI(string(out))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif pernic == false {\n\t\treturn getIOCountersAll(iocounters)\n\t}\n\treturn iocounters, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_darwin.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin\n\npackage net\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nvar (\n\terrNetstatHeader  = errors.New(\"Can't parse header of netstat output\")\n\tnetstatLinkRegexp = regexp.MustCompile(`^<Link#(\\d+)>$`)\n)\n\nconst endOfLine = \"\\n\"\n\nfunc parseNetstatLine(line string) (stat *IOCountersStat, linkID *uint, err error) {\n\tvar (\n\t\tnumericValue uint64\n\t\tcolumns      = strings.Fields(line)\n\t)\n\n\tif columns[0] == \"Name\" {\n\t\terr = errNetstatHeader\n\t\treturn\n\t}\n\n\t// try to extract the numeric value from <Link#123>\n\tif subMatch := netstatLinkRegexp.FindStringSubmatch(columns[2]); len(subMatch) == 2 {\n\t\tnumericValue, err = strconv.ParseUint(subMatch[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tlinkIDUint := uint(numericValue)\n\t\tlinkID = &linkIDUint\n\t}\n\n\tbase := 1\n\tnumberColumns := len(columns)\n\t// sometimes Address is omitted\n\tif numberColumns < 12 {\n\t\tbase = 0\n\t}\n\tif numberColumns < 11 || numberColumns > 13 {\n\t\terr = fmt.Errorf(\"Line %q do have an invalid number of columns %d\", line, numberColumns)\n\t\treturn\n\t}\n\n\tparsed := make([]uint64, 0, 7)\n\tvv := []string{\n\t\tcolumns[base+3], // Ipkts == PacketsRecv\n\t\tcolumns[base+4], // Ierrs == Errin\n\t\tcolumns[base+5], // Ibytes == BytesRecv\n\t\tcolumns[base+6], // Opkts == PacketsSent\n\t\tcolumns[base+7], // Oerrs == Errout\n\t\tcolumns[base+8], // Obytes == BytesSent\n\t}\n\tif len(columns) == 12 {\n\t\tvv = append(vv, columns[base+10])\n\t}\n\n\tfor _, target := range vv {\n\t\tif target == \"-\" {\n\t\t\tparsed = append(parsed, 0)\n\t\t\tcontinue\n\t\t}\n\n\t\tif numericValue, err = strconv.ParseUint(target, 10, 64); err != nil {\n\t\t\treturn\n\t\t}\n\t\tparsed = append(parsed, numericValue)\n\t}\n\n\tstat = &IOCountersStat{\n\t\tName:        strings.Trim(columns[0], \"*\"), // remove the * that sometimes is on right on interface\n\t\tPacketsRecv: parsed[0],\n\t\tErrin:       parsed[1],\n\t\tBytesRecv:   parsed[2],\n\t\tPacketsSent: parsed[3],\n\t\tErrout:      parsed[4],\n\t\tBytesSent:   parsed[5],\n\t}\n\tif len(parsed) == 7 {\n\t\tstat.Dropout = parsed[6]\n\t}\n\treturn\n}\n\ntype netstatInterface struct {\n\tlinkID *uint\n\tstat   *IOCountersStat\n}\n\nfunc parseNetstatOutput(output string) ([]netstatInterface, error) {\n\tvar (\n\t\terr   error\n\t\tlines = strings.Split(strings.Trim(output, endOfLine), endOfLine)\n\t)\n\n\t// number of interfaces is number of lines less one for the header\n\tnumberInterfaces := len(lines) - 1\n\n\tinterfaces := make([]netstatInterface, numberInterfaces)\n\t// no output beside header\n\tif numberInterfaces == 0 {\n\t\treturn interfaces, nil\n\t}\n\n\tfor index := 0; index < numberInterfaces; index++ {\n\t\tnsIface := netstatInterface{}\n\t\tif nsIface.stat, nsIface.linkID, err = parseNetstatLine(lines[index+1]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tinterfaces[index] = nsIface\n\t}\n\treturn interfaces, nil\n}\n\n// map that hold the name of a network interface and the number of usage\ntype mapInterfaceNameUsage map[string]uint\n\nfunc newMapInterfaceNameUsage(ifaces []netstatInterface) mapInterfaceNameUsage {\n\toutput := make(mapInterfaceNameUsage)\n\tfor index := range ifaces {\n\t\tif ifaces[index].linkID != nil {\n\t\t\tifaceName := ifaces[index].stat.Name\n\t\t\tusage, ok := output[ifaceName]\n\t\t\tif ok {\n\t\t\t\toutput[ifaceName] = usage + 1\n\t\t\t} else {\n\t\t\t\toutput[ifaceName] = 1\n\t\t\t}\n\t\t}\n\t}\n\treturn output\n}\n\nfunc (mapi mapInterfaceNameUsage) isTruncated() bool {\n\tfor _, usage := range mapi {\n\t\tif usage > 1 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (mapi mapInterfaceNameUsage) notTruncated() []string {\n\toutput := make([]string, 0)\n\tfor ifaceName, usage := range mapi {\n\t\tif usage == 1 {\n\t\t\toutput = append(output, ifaceName)\n\t\t}\n\t}\n\treturn output\n}\n\n// Deprecated: use process.PidsWithContext instead\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\n// example of `netstat -ibdnW` output on yosemite\n// Name  Mtu   Network       Address            Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll Drop\n// lo0   16384 <Link#1>                        869107     0  169411755   869107     0  169411755     0   0\n// lo0   16384 ::1/128     ::1                 869107     -  169411755   869107     -  169411755     -   -\n// lo0   16384 127           127.0.0.1         869107     -  169411755   869107     -  169411755     -   -\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\tvar (\n\t\tret      []IOCountersStat\n\t\tretIndex int\n\t)\n\n\tnetstat, err := exec.LookPath(\"netstat\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// try to get all interface metrics, and hope there won't be any truncated\n\tout, err := invoke.CommandWithContext(ctx, netstat, \"-ibdnW\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnsInterfaces, err := parseNetstatOutput(string(out))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tifaceUsage := newMapInterfaceNameUsage(nsInterfaces)\n\tnotTruncated := ifaceUsage.notTruncated()\n\tret = make([]IOCountersStat, len(notTruncated))\n\n\tif !ifaceUsage.isTruncated() {\n\t\t// no truncated interface name, return stats of all interface with <Link#...>\n\t\tfor index := range nsInterfaces {\n\t\t\tif nsInterfaces[index].linkID != nil {\n\t\t\t\tret[retIndex] = *nsInterfaces[index].stat\n\t\t\t\tretIndex++\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// duplicated interface, list all interfaces\n\t\tif out, err = invoke.CommandWithContext(ctx, \"ifconfig\", \"-l\"); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tinterfaceNames := strings.Fields(strings.TrimRight(string(out), endOfLine))\n\n\t\t// for each of the interface name, run netstat if we don't have any stats yet\n\t\tfor _, interfaceName := range interfaceNames {\n\t\t\ttruncated := true\n\t\t\tfor index := range nsInterfaces {\n\t\t\t\tif nsInterfaces[index].linkID != nil && nsInterfaces[index].stat.Name == interfaceName {\n\t\t\t\t\t// handle the non truncated name to avoid execute netstat for them again\n\t\t\t\t\tret[retIndex] = *nsInterfaces[index].stat\n\t\t\t\t\tretIndex++\n\t\t\t\t\ttruncated = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif truncated {\n\t\t\t\t// run netstat with -I$ifacename\n\t\t\t\tif out, err = invoke.CommandWithContext(ctx, netstat, \"-ibdnWI\"+interfaceName); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tparsedIfaces, err := parseNetstatOutput(string(out))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif len(parsedIfaces) == 0 {\n\t\t\t\t\t// interface had been removed since `ifconfig -l` had been executed\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor index := range parsedIfaces {\n\t\t\t\t\tif parsedIfaces[index].linkID != nil {\n\t\t\t\t\t\tret = append(ret, *parsedIfaces[index].stat)\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\t}\n\n\tif !pernic {\n\t\treturn getIOCountersAll(ret)\n\t}\n\treturn ret, nil\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCountersWithContext(ctx, pernic)\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_fallback.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build !aix && !darwin && !linux && !freebsd && !openbsd && !windows && !solaris\n\npackage net\n\nimport (\n\t\"context\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\treturn []IOCountersStat{}, common.ErrNotImplementedError\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCountersWithContext(ctx, pernic)\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\n// Deprecated: use process.PidsWithContext instead\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConnectionsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n\nfunc ConnectionsMaxWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsWithoutUidsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithoutUidsWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithoutUidsWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsPidWithoutUidsWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidMaxWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, false)\n}\n\nfunc ConnectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, true)\n}\n\nfunc connectionsPidMaxWithoutUidsWithContext(_ context.Context, _ string, _ int32, _ int, _ bool) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_freebsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build freebsd\n\npackage net\n\nimport (\n\t\"context\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\n// Deprecated: use process.PidsWithContext instead\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\tout, err := invoke.CommandWithContext(ctx, \"netstat\", \"-ibdnW\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlines := strings.Split(string(out), \"\\n\")\n\tret := make([]IOCountersStat, 0, len(lines)-1)\n\texists := make([]string, 0, len(ret))\n\n\tfor _, line := range lines {\n\t\tvalues := strings.Fields(line)\n\t\tif len(values) < 1 || values[0] == \"Name\" {\n\t\t\tcontinue\n\t\t}\n\t\tif common.StringsHas(exists, values[0]) {\n\t\t\t// skip if already get\n\t\t\tcontinue\n\t\t}\n\t\texists = append(exists, values[0])\n\n\t\tif len(values) < 12 {\n\t\t\tcontinue\n\t\t}\n\t\tbase := 1\n\t\t// sometimes Address is omitted\n\t\tif len(values) < 13 {\n\t\t\tbase = 0\n\t\t}\n\n\t\tparsed := make([]uint64, 0, 8)\n\t\tvv := []string{\n\t\t\tvalues[base+3],  // PacketsRecv\n\t\t\tvalues[base+4],  // Errin\n\t\t\tvalues[base+5],  // Dropin\n\t\t\tvalues[base+6],  // BytesRecvn\n\t\t\tvalues[base+7],  // PacketSent\n\t\t\tvalues[base+8],  // Errout\n\t\t\tvalues[base+9],  // BytesSent\n\t\t\tvalues[base+11], // Dropout\n\t\t}\n\t\tfor _, target := range vv {\n\t\t\tif target == \"-\" {\n\t\t\t\tparsed = append(parsed, 0)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tt, err := strconv.ParseUint(target, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tparsed = append(parsed, t)\n\t\t}\n\n\t\tn := IOCountersStat{\n\t\t\tName:        values[0],\n\t\t\tPacketsRecv: parsed[0],\n\t\t\tErrin:       parsed[1],\n\t\t\tDropin:      parsed[2],\n\t\t\tBytesRecv:   parsed[3],\n\t\t\tPacketsSent: parsed[4],\n\t\t\tErrout:      parsed[5],\n\t\t\tBytesSent:   parsed[6],\n\t\t\tDropout:     parsed[7],\n\t\t}\n\t\tret = append(ret, n)\n\t}\n\n\tif !pernic {\n\t\treturn getIOCountersAll(ret)\n\t}\n\n\treturn ret, nil\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCountersWithContext(ctx, pernic)\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_linux.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux\n\npackage net\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nconst ( // Conntrack Column numbers\n\tctENTRIES = iota\n\tctSEARCHED\n\tctFOUND\n\tctNEW\n\tctINVALID\n\tctIGNORE\n\tctDELETE\n\tctDELETE_LIST\n\tctINSERT\n\tctINSERT_FAILED\n\tctDROP\n\tctEARLY_DROP\n\tctICMP_ERROR\n\tCT_EXPEctNEW\n\tctEXPECT_CREATE\n\tCT_EXPEctDELETE\n\tctSEARCH_RESTART\n)\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\tfilename := common.HostProcWithContext(ctx, \"net/dev\")\n\treturn IOCountersByFileWithContext(ctx, pernic, filename)\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\tlines, err := common.ReadLines(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tparts := make([]string, 2)\n\n\tstatlen := len(lines) - 1\n\n\tret := make([]IOCountersStat, 0, statlen)\n\n\tfor _, line := range lines[2:] {\n\t\tseparatorPos := strings.LastIndex(line, \":\")\n\t\tif separatorPos == -1 {\n\t\t\tcontinue\n\t\t}\n\t\tparts[0] = line[0:separatorPos]\n\t\tparts[1] = line[separatorPos+1:]\n\n\t\tinterfaceName := strings.TrimSpace(parts[0])\n\t\tif interfaceName == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tfields := strings.Fields(strings.TrimSpace(parts[1]))\n\t\tbytesRecv, err := strconv.ParseUint(fields[0], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tpacketsRecv, err := strconv.ParseUint(fields[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\terrIn, err := strconv.ParseUint(fields[2], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tdropIn, err := strconv.ParseUint(fields[3], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tfifoIn, err := strconv.ParseUint(fields[4], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tbytesSent, err := strconv.ParseUint(fields[8], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tpacketsSent, err := strconv.ParseUint(fields[9], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\terrOut, err := strconv.ParseUint(fields[10], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tdropOut, err := strconv.ParseUint(fields[11], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\t\tfifoOut, err := strconv.ParseUint(fields[12], 10, 64)\n\t\tif err != nil {\n\t\t\treturn ret, err\n\t\t}\n\n\t\tnic := IOCountersStat{\n\t\t\tName:        interfaceName,\n\t\t\tBytesRecv:   bytesRecv,\n\t\t\tPacketsRecv: packetsRecv,\n\t\t\tErrin:       errIn,\n\t\t\tDropin:      dropIn,\n\t\t\tFifoin:      fifoIn,\n\t\t\tBytesSent:   bytesSent,\n\t\t\tPacketsSent: packetsSent,\n\t\t\tErrout:      errOut,\n\t\t\tDropout:     dropOut,\n\t\t\tFifoout:     fifoOut,\n\t\t}\n\t\tret = append(ret, nic)\n\t}\n\n\tif !pernic {\n\t\treturn getIOCountersAll(ret)\n\t}\n\n\treturn ret, nil\n}\n\nvar netProtocols = []string{\n\t\"ip\",\n\t\"icmp\",\n\t\"icmpmsg\",\n\t\"tcp\",\n\t\"udp\",\n\t\"udplite\",\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\tif len(protocols) == 0 {\n\t\tprotocols = netProtocols\n\t}\n\n\tstats := make([]ProtoCountersStat, 0, len(protocols))\n\tprotos := make(map[string]bool, len(protocols))\n\tfor _, p := range protocols {\n\t\tprotos[p] = true\n\t}\n\n\tfilename := common.HostProcWithContext(ctx, \"net/snmp\")\n\tlines, err := common.ReadLines(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlinecount := len(lines)\n\tfor i := 0; i < linecount; i++ {\n\t\tline := lines[i]\n\t\tr := strings.IndexRune(line, ':')\n\t\tif r == -1 {\n\t\t\treturn nil, errors.New(filename + \" is not formatted correctly, expected ':'.\")\n\t\t}\n\t\tproto := strings.ToLower(line[:r])\n\t\tif !protos[proto] {\n\t\t\t// skip protocol and data line\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\n\t\t// Read header line\n\t\tstatNames := strings.Split(line[r+2:], \" \")\n\n\t\t// Read data line\n\t\ti++\n\t\tstatValues := strings.Split(lines[i][r+2:], \" \")\n\t\tif len(statNames) != len(statValues) {\n\t\t\treturn nil, errors.New(filename + \" is not formatted correctly, expected same number of columns.\")\n\t\t}\n\t\tstat := ProtoCountersStat{\n\t\t\tProtocol: proto,\n\t\t\tStats:    make(map[string]int64, len(statNames)),\n\t\t}\n\t\tfor j := range statNames {\n\t\t\tvalue, err := strconv.ParseInt(statValues[j], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tstat.Stats[statNames[j]] = value\n\t\t}\n\t\tstats = append(stats, stat)\n\t}\n\treturn stats, nil\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\tcountfile := common.HostProcWithContext(ctx, \"sys/net/netfilter/nf_conntrack_count\")\n\tmaxfile := common.HostProcWithContext(ctx, \"sys/net/netfilter/nf_conntrack_max\")\n\n\tcount, err := common.ReadInts(countfile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstats := make([]FilterStat, 0, 1)\n\n\tmaxConn, err := common.ReadInts(maxfile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpayload := FilterStat{\n\t\tConnTrackCount: count[0],\n\t\tConnTrackMax:   maxConn[0],\n\t}\n\n\tstats = append(stats, payload)\n\treturn stats, nil\n}\n\n// ConntrackStatsWithContext returns more detailed info about the conntrack table\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn conntrackStatsFromFile(common.HostProcWithContext(ctx, \"net/stat/nf_conntrack\"), percpu)\n}\n\n// conntrackStatsFromFile returns more detailed info about the conntrack table\n// from `filename`\n// If 'percpu' is false, the result will contain exactly one item with totals/summary\nfunc conntrackStatsFromFile(filename string, percpu bool) ([]ConntrackStat, error) {\n\tlines, err := common.ReadLines(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tstatlist := NewConntrackStatList()\n\n\tfor _, line := range lines {\n\t\tfields := strings.Fields(line)\n\t\tif len(fields) == 17 && fields[0] != \"entries\" {\n\t\t\tstatlist.Append(NewConntrackStat(\n\t\t\t\tcommon.HexToUint32(fields[ctENTRIES]),\n\t\t\t\tcommon.HexToUint32(fields[ctSEARCHED]),\n\t\t\t\tcommon.HexToUint32(fields[ctFOUND]),\n\t\t\t\tcommon.HexToUint32(fields[ctNEW]),\n\t\t\t\tcommon.HexToUint32(fields[ctINVALID]),\n\t\t\t\tcommon.HexToUint32(fields[ctIGNORE]),\n\t\t\t\tcommon.HexToUint32(fields[ctDELETE]),\n\t\t\t\tcommon.HexToUint32(fields[ctDELETE_LIST]),\n\t\t\t\tcommon.HexToUint32(fields[ctINSERT]),\n\t\t\t\tcommon.HexToUint32(fields[ctINSERT_FAILED]),\n\t\t\t\tcommon.HexToUint32(fields[ctDROP]),\n\t\t\t\tcommon.HexToUint32(fields[ctEARLY_DROP]),\n\t\t\t\tcommon.HexToUint32(fields[ctICMP_ERROR]),\n\t\t\t\tcommon.HexToUint32(fields[CT_EXPEctNEW]),\n\t\t\t\tcommon.HexToUint32(fields[ctEXPECT_CREATE]),\n\t\t\t\tcommon.HexToUint32(fields[CT_EXPEctDELETE]),\n\t\t\t\tcommon.HexToUint32(fields[ctSEARCH_RESTART]),\n\t\t\t))\n\t\t}\n\t}\n\n\tif percpu {\n\t\treturn statlist.Items(), nil\n\t}\n\treturn statlist.Summary(), nil\n}\n\n// http://students.mimuw.edu.pl/lxr/source/include/net/tcp_states.h\nvar tcpStatuses = map[string]string{\n\t\"01\": \"ESTABLISHED\",\n\t\"02\": \"SYN_SENT\",\n\t\"03\": \"SYN_RECV\",\n\t\"04\": \"FIN_WAIT1\",\n\t\"05\": \"FIN_WAIT2\",\n\t\"06\": \"TIME_WAIT\",\n\t\"07\": \"CLOSE\",\n\t\"08\": \"CLOSE_WAIT\",\n\t\"09\": \"LAST_ACK\",\n\t\"0A\": \"LISTEN\",\n\t\"0B\": \"CLOSING\",\n}\n\ntype netConnectionKindType struct {\n\tfamily   uint32\n\tsockType uint32\n\tfilename string\n}\n\nvar kindTCP4 = netConnectionKindType{\n\tfamily:   syscall.AF_INET,\n\tsockType: syscall.SOCK_STREAM,\n\tfilename: \"tcp\",\n}\n\nvar kindTCP6 = netConnectionKindType{\n\tfamily:   syscall.AF_INET6,\n\tsockType: syscall.SOCK_STREAM,\n\tfilename: \"tcp6\",\n}\n\nvar kindUDP4 = netConnectionKindType{\n\tfamily:   syscall.AF_INET,\n\tsockType: syscall.SOCK_DGRAM,\n\tfilename: \"udp\",\n}\n\nvar kindUDP6 = netConnectionKindType{\n\tfamily:   syscall.AF_INET6,\n\tsockType: syscall.SOCK_DGRAM,\n\tfilename: \"udp6\",\n}\n\nvar kindUNIX = netConnectionKindType{\n\tfamily:   syscall.AF_UNIX,\n\tfilename: \"unix\",\n}\n\nvar netConnectionKindMap = map[string][]netConnectionKindType{\n\t\"all\":   {kindTCP4, kindTCP6, kindUDP4, kindUDP6, kindUNIX},\n\t\"tcp\":   {kindTCP4, kindTCP6},\n\t\"tcp4\":  {kindTCP4},\n\t\"tcp6\":  {kindTCP6},\n\t\"udp\":   {kindUDP4, kindUDP6},\n\t\"udp4\":  {kindUDP4},\n\t\"udp6\":  {kindUDP6},\n\t\"unix\":  {kindUNIX},\n\t\"inet\":  {kindTCP4, kindTCP6, kindUDP4, kindUDP6},\n\t\"inet4\": {kindTCP4, kindUDP4},\n\t\"inet6\": {kindTCP6, kindUDP6},\n}\n\ntype inodeMap struct {\n\tpid int32\n\tfd  uint32\n}\n\ntype connTmp struct {\n\tfd       uint32\n\tfamily   uint32\n\tsockType uint32\n\tladdr    Addr\n\traddr    Addr\n\tstatus   string\n\tpid      int32\n\tboundPid int32\n\tpath     string\n}\n\nfunc ConnectionsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsPidWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsWithoutUidsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithoutUidsWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithoutUidsWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsPidWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidWithoutUidsWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidMaxWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, false)\n}\n\nfunc ConnectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, true)\n}\n\nfunc connectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int, skipUids bool) ([]ConnectionStat, error) {\n\ttmap, ok := netConnectionKindMap[kind]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"invalid kind, %s\", kind)\n\t}\n\troot := common.HostProcWithContext(ctx)\n\tvar err error\n\tvar inodes map[string][]inodeMap\n\tif pid == 0 {\n\t\tinodes, err = getProcInodesAllWithContext(ctx, root, maxConn)\n\t} else {\n\t\tinodes, err = getProcInodes(root, pid, maxConn)\n\t\tif len(inodes) == 0 {\n\t\t\t// no connection for the pid\n\t\t\treturn []ConnectionStat{}, nil\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not get pid(s), %d: %w\", pid, err)\n\t}\n\treturn statsFromInodesWithContext(ctx, root, pid, tmap, inodes, skipUids)\n}\n\nfunc statsFromInodesWithContext(ctx context.Context, root string, pid int32, tmap []netConnectionKindType, inodes map[string][]inodeMap, skipUids bool) ([]ConnectionStat, error) {\n\tdupCheckMap := make(map[string]struct{})\n\tvar ret []ConnectionStat\n\n\tvar err error\n\tfor _, t := range tmap {\n\t\tvar path string\n\t\tvar connKey string\n\t\tvar ls []connTmp\n\t\tif pid == 0 {\n\t\t\tpath = fmt.Sprintf(\"%s/net/%s\", root, t.filename)\n\t\t} else {\n\t\t\tpath = fmt.Sprintf(\"%s/%d/net/%s\", root, pid, t.filename)\n\t\t}\n\t\tswitch t.family {\n\t\tcase syscall.AF_INET, syscall.AF_INET6:\n\t\t\tls, err = processInet(path, t, inodes, pid)\n\t\tcase syscall.AF_UNIX:\n\t\t\tls, err = processUnix(path, t, inodes, pid)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, c := range ls {\n\t\t\t// Build TCP key to id the connection uniquely\n\t\t\t// socket type, src ip, src port, dst ip, dst port and state should be enough\n\t\t\t// to prevent duplications.\n\t\t\tconnKey = fmt.Sprintf(\"%d-%s:%d-%s:%d-%s\", c.sockType, c.laddr.IP, c.laddr.Port, c.raddr.IP, c.raddr.Port, c.status)\n\t\t\tif _, ok := dupCheckMap[connKey]; ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconn := ConnectionStat{\n\t\t\t\tFd:     c.fd,\n\t\t\t\tFamily: c.family,\n\t\t\t\tType:   c.sockType,\n\t\t\t\tLaddr:  c.laddr,\n\t\t\t\tRaddr:  c.raddr,\n\t\t\t\tStatus: c.status,\n\t\t\t\tPid:    c.pid,\n\t\t\t}\n\t\t\tif c.pid == 0 {\n\t\t\t\tconn.Pid = c.boundPid\n\t\t\t} else {\n\t\t\t\tconn.Pid = c.pid\n\t\t\t}\n\n\t\t\tif !skipUids {\n\t\t\t\t// fetch process owner Real, effective, saved set, and filesystem UIDs\n\t\t\t\tproc := process{Pid: conn.Pid}\n\t\t\t\tconn.Uids, _ = proc.getUids(ctx)\n\t\t\t}\n\n\t\t\tret = append(ret, conn)\n\t\t\tdupCheckMap[connKey] = struct{}{}\n\t\t}\n\n\t}\n\n\treturn ret, nil\n}\n\n// getProcInodes returns fd of the pid.\nfunc getProcInodes(root string, pid int32, maxConn int) (map[string][]inodeMap, error) {\n\tret := make(map[string][]inodeMap)\n\n\tdir := fmt.Sprintf(\"%s/%d/fd\", root, pid)\n\tf, err := os.Open(dir)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\tdefer f.Close()\n\tdirEntries, err := f.ReadDir(maxConn)\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\tfor _, dirEntry := range dirEntries {\n\t\tinodePath := fmt.Sprintf(\"%s/%d/fd/%s\", root, pid, dirEntry.Name())\n\n\t\tinode, err := os.Readlink(inodePath)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.HasPrefix(inode, \"socket:[\") {\n\t\t\tcontinue\n\t\t}\n\t\t// the process is using a socket\n\t\tl := len(inode)\n\t\tinode = inode[8 : l-1]\n\t\t_, ok := ret[inode]\n\t\tif !ok {\n\t\t\tret[inode] = make([]inodeMap, 0)\n\t\t}\n\t\tfd, err := strconv.ParseInt(dirEntry.Name(), 10, 32)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\ti := inodeMap{\n\t\t\tpid: pid,\n\t\t\tfd:  uint32(fd),\n\t\t}\n\t\tret[inode] = append(ret[inode], i)\n\t}\n\treturn ret, nil\n}\n\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\tvar ret []int32\n\n\td, err := os.Open(common.HostProcWithContext(ctx))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tfnames, err := d.Readdirnames(-1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, fname := range fnames {\n\t\tpid, err := strconv.ParseInt(fname, 10, 32)\n\t\tif err != nil {\n\t\t\t// if not numeric name, just skip\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, int32(pid))\n\t}\n\n\treturn ret, nil\n}\n\n// Note: the following is based off process_linux structs and methods\n// we need these to fetch the owner of a process ID\n// FIXME: Import process occures import cycle.\n// see remarks on pids()\ntype process struct {\n\tPid  int32 `json:\"pid\"`\n\tuids []int32\n}\n\n// Uids returns user ids of the process as a slice of the int\nfunc (p *process) getUids(ctx context.Context) ([]int32, error) {\n\terr := p.fillFromStatus(ctx)\n\tif err != nil {\n\t\treturn []int32{}, err\n\t}\n\treturn p.uids, nil\n}\n\n// Get status from /proc/(pid)/status\nfunc (p *process) fillFromStatus(ctx context.Context) error {\n\tpid := p.Pid\n\tstatPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"status\")\n\tcontents, err := os.ReadFile(statPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tlines := strings.Split(string(contents), \"\\n\")\n\tfor _, line := range lines {\n\t\ttabParts := strings.SplitN(line, \"\\t\", 2)\n\t\tif len(tabParts) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tvalue := tabParts[1]\n\t\tswitch strings.TrimRight(tabParts[0], \":\") {\n\t\tcase \"Uid\":\n\t\t\tp.uids = make([]int32, 0, 4)\n\t\t\tfor _, i := range strings.Split(value, \"\\t\") {\n\t\t\t\tv, err := strconv.ParseInt(i, 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tp.uids = append(p.uids, int32(v))\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc getProcInodesAllWithContext(ctx context.Context, root string, maxConn int) (map[string][]inodeMap, error) {\n\tpids, err := PidsWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make(map[string][]inodeMap)\n\n\tfor _, pid := range pids {\n\t\tt, err := getProcInodes(root, pid, maxConn)\n\t\tif err != nil {\n\t\t\t// skip if permission error or no longer exists\n\t\t\tif os.IsPermission(err) || os.IsNotExist(err) || errors.Is(err, io.EOF) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn ret, err\n\t\t}\n\t\tif len(t) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\t// TODO: update ret.\n\t\tret = updateMap(ret, t)\n\t}\n\treturn ret, nil\n}\n\n// decodeAddress decode addresse represents addr in proc/net/*\n// ex:\n// \"0500000A:0016\" -> \"10.0.0.5\", 22\n// \"0085002452100113070057A13F025401:0035\" -> \"2400:8500:1301:1052:a157:7:154:23f\", 53\nfunc decodeAddress(family uint32, src string) (Addr, error) {\n\tt := strings.Split(src, \":\")\n\tif len(t) != 2 {\n\t\treturn Addr{}, fmt.Errorf(\"does not contain port, %s\", src)\n\t}\n\taddr := t[0]\n\tport, err := strconv.ParseUint(t[1], 16, 16)\n\tif err != nil {\n\t\treturn Addr{}, fmt.Errorf(\"invalid port, %s\", src)\n\t}\n\tdecoded, err := hex.DecodeString(addr)\n\tif err != nil {\n\t\treturn Addr{}, fmt.Errorf(\"decode error, %w\", err)\n\t}\n\tvar ip net.IP\n\n\tif family == syscall.AF_INET {\n\t\tif common.IsLittleEndian() {\n\t\t\tip = net.IP(Reverse(decoded))\n\t\t} else {\n\t\t\tip = net.IP(decoded)\n\t\t}\n\t} else { // IPv6\n\t\tip, err = parseIPv6HexString(decoded)\n\t\tif err != nil {\n\t\t\treturn Addr{}, err\n\t\t}\n\t}\n\treturn Addr{\n\t\tIP:   ip.String(),\n\t\tPort: uint32(port),\n\t}, nil\n}\n\nfunc Reverse(s []byte) []byte {\n\tfor i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {\n\t\ts[i], s[j] = s[j], s[i]\n\t}\n\treturn s\n}\n\n// parseIPv6HexString parse array of bytes to IPv6 string\nfunc parseIPv6HexString(src []byte) (net.IP, error) {\n\tif len(src) != 16 {\n\t\treturn nil, errors.New(\"invalid IPv6 string\")\n\t}\n\n\tbuf := make([]byte, 0, 16)\n\tfor i := 0; i < len(src); i += 4 {\n\t\tr := Reverse(src[i : i+4])\n\t\tbuf = append(buf, r...)\n\t}\n\treturn net.IP(buf), nil\n}\n\nfunc processInet(file string, kind netConnectionKindType, inodes map[string][]inodeMap, filterPid int32) ([]connTmp, error) {\n\tif strings.HasSuffix(file, \"6\") && !common.PathExists(file) {\n\t\t// IPv6 not supported, return empty.\n\t\treturn []connTmp{}, nil\n\t}\n\n\t// Read the contents of the /proc file with a single read sys call.\n\t// This minimizes duplicates in the returned connections\n\t// For more info:\n\t// https://github.com/shirou/gopsutil/pull/361\n\tcontents, err := os.ReadFile(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlines := bytes.Split(contents, []byte(\"\\n\"))\n\n\tvar ret []connTmp\n\t// skip first line\n\tfor _, line := range lines[1:] {\n\t\tl := strings.Fields(string(line))\n\t\tif len(l) < 10 {\n\t\t\tcontinue\n\t\t}\n\t\tladdr := l[1]\n\t\traddr := l[2]\n\t\tstatus := l[3]\n\t\tinode := l[9]\n\t\tpid := int32(0)\n\t\tfd := uint32(0)\n\t\ti, exists := inodes[inode]\n\t\tif exists {\n\t\t\tpid = i[0].pid\n\t\t\tfd = i[0].fd\n\t\t}\n\t\tif filterPid > 0 && filterPid != pid {\n\t\t\tcontinue\n\t\t}\n\t\tif kind.sockType == syscall.SOCK_STREAM {\n\t\t\tstatus = tcpStatuses[status]\n\t\t} else {\n\t\t\tstatus = \"NONE\"\n\t\t}\n\t\tla, err := decodeAddress(kind.family, laddr)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tra, err := decodeAddress(kind.family, raddr)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, connTmp{\n\t\t\tfd:       fd,\n\t\t\tfamily:   kind.family,\n\t\t\tsockType: kind.sockType,\n\t\t\tladdr:    la,\n\t\t\traddr:    ra,\n\t\t\tstatus:   status,\n\t\t\tpid:      pid,\n\t\t})\n\t}\n\n\treturn ret, nil\n}\n\nfunc processUnix(file string, kind netConnectionKindType, inodes map[string][]inodeMap, filterPid int32) ([]connTmp, error) {\n\t// Read the contents of the /proc file with a single read sys call.\n\t// This minimizes duplicates in the returned connections\n\t// For more info:\n\t// https://github.com/shirou/gopsutil/pull/361\n\tcontents, err := os.ReadFile(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlines := bytes.Split(contents, []byte(\"\\n\"))\n\n\tvar ret []connTmp\n\t// skip first line\n\tfor _, line := range lines[1:] {\n\t\ttokens := strings.Fields(string(line))\n\t\tif len(tokens) < 6 {\n\t\t\tcontinue\n\t\t}\n\t\tst, err := strconv.ParseInt(tokens[4], 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tinode := tokens[6]\n\n\t\tvar pairs []inodeMap\n\t\tpairs, exists := inodes[inode]\n\t\tif !exists {\n\t\t\tpairs = []inodeMap{\n\t\t\t\t{},\n\t\t\t}\n\t\t}\n\t\tfor _, pair := range pairs {\n\t\t\tif filterPid > 0 && filterPid != pair.pid {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvar path string\n\t\t\tif len(tokens) == 8 {\n\t\t\t\tpath = tokens[len(tokens)-1]\n\t\t\t}\n\t\t\tret = append(ret, connTmp{\n\t\t\t\tfd:       pair.fd,\n\t\t\t\tfamily:   kind.family,\n\t\t\t\tsockType: uint32(st),\n\t\t\t\tladdr: Addr{\n\t\t\t\t\tIP: path,\n\t\t\t\t},\n\t\t\t\tpid:    pair.pid,\n\t\t\t\tstatus: \"NONE\",\n\t\t\t\tpath:   path,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n\nfunc updateMap(src map[string][]inodeMap, add map[string][]inodeMap) map[string][]inodeMap {\n\tfor key, value := range add {\n\t\ta, exists := src[key]\n\t\tif !exists {\n\t\t\tsrc[key] = value\n\t\t\tcontinue\n\t\t}\n\t\tsrc[key] = append(a, value...)\n\t}\n\treturn src\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_openbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd\n\npackage net\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nvar portMatch = regexp.MustCompile(`(.*)\\.(\\d+)$`)\n\nfunc ParseNetstat(output string, mode string,\n\tiocs map[string]IOCountersStat,\n) error {\n\tlines := strings.Split(output, \"\\n\")\n\n\texists := make([]string, 0, len(lines)-1)\n\n\tcolumns := 9\n\tif mode == \"inb\" {\n\t\tcolumns = 6\n\t}\n\tfor _, line := range lines {\n\t\tvalues := strings.Fields(line)\n\t\tif len(values) < 1 || values[0] == \"Name\" {\n\t\t\tcontinue\n\t\t}\n\t\tif common.StringsHas(exists, values[0]) {\n\t\t\t// skip if already get\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(values) < columns {\n\t\t\tcontinue\n\t\t}\n\t\tbase := 1\n\t\t// sometimes Address is omitted\n\t\tif len(values) < columns {\n\t\t\tbase = 0\n\t\t}\n\n\t\tparsed := make([]uint64, 0, 8)\n\t\tvar vv []string\n\t\tswitch mode {\n\t\tcase \"inb\":\n\t\t\tvv = []string{\n\t\t\t\tvalues[base+3], // BytesRecv\n\t\t\t\tvalues[base+4], // BytesSent\n\t\t\t}\n\t\tcase \"ind\":\n\t\t\tvv = []string{\n\t\t\t\tvalues[base+3], // Ipkts\n\t\t\t\tvalues[base+4], // Idrop\n\t\t\t\tvalues[base+5], // Opkts\n\t\t\t\tvalues[base+6], // Odrops\n\t\t\t}\n\t\tcase \"ine\":\n\t\t\tvv = []string{\n\t\t\t\tvalues[base+4], // Ierrs\n\t\t\t\tvalues[base+6], // Oerrs\n\t\t\t}\n\t\t}\n\t\tfor _, target := range vv {\n\t\t\tif target == \"-\" {\n\t\t\t\tparsed = append(parsed, 0)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tt, err := strconv.ParseUint(target, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tparsed = append(parsed, t)\n\t\t}\n\t\texists = append(exists, values[0])\n\n\t\tn, present := iocs[values[0]]\n\t\tif !present {\n\t\t\tn = IOCountersStat{Name: values[0]}\n\t\t}\n\n\t\tswitch mode {\n\t\tcase \"inb\":\n\t\t\tn.BytesRecv = parsed[0]\n\t\t\tn.BytesSent = parsed[1]\n\t\tcase \"ind\":\n\t\t\tn.PacketsRecv = parsed[0]\n\t\t\tn.Dropin = parsed[1]\n\t\t\tn.PacketsSent = parsed[2]\n\t\t\tn.Dropout = parsed[3]\n\t\tcase \"ine\":\n\t\t\tn.Errin = parsed[0]\n\t\t\tn.Errout = parsed[1]\n\t\t}\n\n\t\tiocs[n.Name] = n\n\t}\n\treturn nil\n}\n\n// Deprecated: use process.PidsWithContext instead\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\tnetstat, err := exec.LookPath(\"netstat\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout, err := invoke.CommandWithContext(ctx, netstat, \"-inb\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout2, err := invoke.CommandWithContext(ctx, netstat, \"-ind\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout3, err := invoke.CommandWithContext(ctx, netstat, \"-ine\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tiocs := make(map[string]IOCountersStat)\n\n\tlines := strings.Split(string(out), \"\\n\")\n\tret := make([]IOCountersStat, 0, len(lines)-1)\n\n\terr = ParseNetstat(string(out), \"inb\", iocs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = ParseNetstat(string(out2), \"ind\", iocs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = ParseNetstat(string(out3), \"ine\", iocs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, ioc := range iocs {\n\t\tret = append(ret, ioc)\n\t}\n\n\tif pernic == false {\n\t\treturn getIOCountersAll(ret)\n\t}\n\n\treturn ret, nil\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCounters(pernic)\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc parseNetstatLine(line string) (ConnectionStat, error) {\n\tf := strings.Fields(line)\n\tif len(f) < 5 {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"wrong line,%s\", line)\n\t}\n\n\tvar netType, netFamily uint32\n\tswitch f[0] {\n\tcase \"tcp\":\n\t\tnetType = syscall.SOCK_STREAM\n\t\tnetFamily = syscall.AF_INET\n\tcase \"udp\":\n\t\tnetType = syscall.SOCK_DGRAM\n\t\tnetFamily = syscall.AF_INET\n\tcase \"tcp6\":\n\t\tnetType = syscall.SOCK_STREAM\n\t\tnetFamily = syscall.AF_INET6\n\tcase \"udp6\":\n\t\tnetType = syscall.SOCK_DGRAM\n\t\tnetFamily = syscall.AF_INET6\n\tdefault:\n\t\treturn ConnectionStat{}, fmt.Errorf(\"unknown type, %s\", f[0])\n\t}\n\n\tladdr, raddr, err := parseNetstatAddr(f[3], f[4], netFamily)\n\tif err != nil {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"failed to parse netaddr, %s %s\", f[3], f[4])\n\t}\n\n\tn := ConnectionStat{\n\t\tFd:     uint32(0), // not supported\n\t\tFamily: uint32(netFamily),\n\t\tType:   uint32(netType),\n\t\tLaddr:  laddr,\n\t\tRaddr:  raddr,\n\t\tPid:    int32(0), // not supported\n\t}\n\tif len(f) == 6 {\n\t\tn.Status = f[5]\n\t}\n\n\treturn n, nil\n}\n\nfunc parseNetstatAddr(local string, remote string, family uint32) (laddr Addr, raddr Addr, err error) {\n\tparse := func(l string) (Addr, error) {\n\t\tmatches := portMatch.FindStringSubmatch(l)\n\t\tif matches == nil {\n\t\t\treturn Addr{}, fmt.Errorf(\"wrong addr, %s\", l)\n\t\t}\n\t\thost := matches[1]\n\t\tport := matches[2]\n\t\tif host == \"*\" {\n\t\t\tswitch family {\n\t\t\tcase syscall.AF_INET:\n\t\t\t\thost = \"0.0.0.0\"\n\t\t\tcase syscall.AF_INET6:\n\t\t\t\thost = \"::\"\n\t\t\tdefault:\n\t\t\t\treturn Addr{}, fmt.Errorf(\"unknown family, %d\", family)\n\t\t\t}\n\t\t}\n\t\tlport, err := strconv.ParseInt(port, 10, 32)\n\t\tif err != nil {\n\t\t\treturn Addr{}, err\n\t\t}\n\t\treturn Addr{IP: host, Port: uint32(lport)}, nil\n\t}\n\n\tladdr, err = parse(local)\n\tif remote != \"*.*\" { // remote addr exists\n\t\traddr, err = parse(remote)\n\t\tif err != nil {\n\t\t\treturn laddr, raddr, err\n\t\t}\n\t}\n\n\treturn laddr, raddr, err\n}\n\nfunc ConnectionsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\tvar ret []ConnectionStat\n\n\targs := []string{\"-na\"}\n\tswitch strings.ToLower(kind) {\n\tdefault:\n\t\tfallthrough\n\tcase \"\":\n\t\tfallthrough\n\tcase \"all\":\n\t\tfallthrough\n\tcase \"inet\":\n\t\t// nothing to add\n\tcase \"inet4\":\n\t\targs = append(args, \"-finet\")\n\tcase \"inet6\":\n\t\targs = append(args, \"-finet6\")\n\tcase \"tcp\":\n\t\targs = append(args, \"-ptcp\")\n\tcase \"tcp4\":\n\t\targs = append(args, \"-ptcp\", \"-finet\")\n\tcase \"tcp6\":\n\t\targs = append(args, \"-ptcp\", \"-finet6\")\n\tcase \"udp\":\n\t\targs = append(args, \"-pudp\")\n\tcase \"udp4\":\n\t\targs = append(args, \"-pudp\", \"-finet\")\n\tcase \"udp6\":\n\t\targs = append(args, \"-pudp\", \"-finet6\")\n\tcase \"unix\":\n\t\treturn ret, common.ErrNotImplementedError\n\t}\n\n\tnetstat, err := exec.LookPath(\"netstat\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout, err := invoke.CommandWithContext(ctx, netstat, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlines := strings.Split(string(out), \"\\n\")\n\tfor _, line := range lines {\n\t\tif !(strings.HasPrefix(line, \"tcp\") || strings.HasPrefix(line, \"udp\")) {\n\t\t\tcontinue\n\t\t}\n\t\tn, err := parseNetstatLine(line)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, n)\n\t}\n\n\treturn ret, nil\n}\n\nfunc ConnectionsPidWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConnectionsMaxWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConnectionsPidMaxWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConnectionsWithoutUidsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithoutUidsWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithoutUidsWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsPidWithoutUidsWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn)\n}\n\nfunc connectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_solaris.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build solaris\n\npackage net\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nvar kstatSplit = regexp.MustCompile(`[:\\s]+`)\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\t// collect all the net class's links with below statistics\n\tfilterstr := \"/^(?!vnic)/::phys:/^rbytes64$|^ipackets64$|^idrops64$|^ierrors$|^obytes64$|^opackets64$|^odrops64$|^oerrors$/\"\n\tif runtime.GOOS == \"illumos\" {\n\t\tfilterstr = \"/[^vnic]/::mac:/^rbytes64$|^ipackets64$|^idrops64$|^ierrors$|^obytes64$|^opackets64$|^odrops64$|^oerrors$/\"\n\t}\n\tkstatSysOut, err := invoke.CommandWithContext(ctx, \"kstat\", \"-c\", \"net\", \"-p\", filterstr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot execute kstat: %w\", err)\n\t}\n\n\tlines := strings.Split(strings.TrimSpace(string(kstatSysOut)), \"\\n\")\n\tif len(lines) == 0 {\n\t\treturn nil, fmt.Errorf(\"no interface found\")\n\t}\n\trbytes64arr := make(map[string]uint64)\n\tipackets64arr := make(map[string]uint64)\n\tidrops64arr := make(map[string]uint64)\n\tierrorsarr := make(map[string]uint64)\n\tobytes64arr := make(map[string]uint64)\n\topackets64arr := make(map[string]uint64)\n\todrops64arr := make(map[string]uint64)\n\toerrorsarr := make(map[string]uint64)\n\n\tfor _, line := range lines {\n\t\tfields := kstatSplit.Split(line, -1)\n\t\tinterfaceName := fields[0]\n\t\tinstance := fields[1]\n\t\tswitch fields[3] {\n\t\tcase \"rbytes64\":\n\t\t\trbytes64arr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse rbytes64: %w\", err)\n\t\t\t}\n\t\tcase \"ipackets64\":\n\t\t\tipackets64arr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse ipackets64: %w\", err)\n\t\t\t}\n\t\tcase \"idrops64\":\n\t\t\tidrops64arr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse idrops64: %w\", err)\n\t\t\t}\n\t\tcase \"ierrors\":\n\t\t\tierrorsarr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse ierrors: %w\", err)\n\t\t\t}\n\t\tcase \"obytes64\":\n\t\t\tobytes64arr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse obytes64: %w\", err)\n\t\t\t}\n\t\tcase \"opackets64\":\n\t\t\topackets64arr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse opackets64: %w\", err)\n\t\t\t}\n\t\tcase \"odrops64\":\n\t\t\todrops64arr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse odrops64: %w\", err)\n\t\t\t}\n\t\tcase \"oerrors\":\n\t\t\toerrorsarr[interfaceName+instance], err = strconv.ParseUint(fields[4], 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"cannot parse oerrors: %w\", err)\n\t\t\t}\n\t\t}\n\t}\n\tret := make([]IOCountersStat, 0)\n\tfor k := range rbytes64arr {\n\t\tnic := IOCountersStat{\n\t\t\tName:        k,\n\t\t\tBytesRecv:   rbytes64arr[k],\n\t\t\tPacketsRecv: ipackets64arr[k],\n\t\t\tErrin:       ierrorsarr[k],\n\t\t\tDropin:      idrops64arr[k],\n\t\t\tBytesSent:   obytes64arr[k],\n\t\t\tPacketsSent: opackets64arr[k],\n\t\t\tErrout:      oerrorsarr[k],\n\t\t\tDropout:     odrops64arr[k],\n\t\t}\n\t\tret = append(ret, nic)\n\t}\n\n\tif !pernic {\n\t\treturn getIOCountersAll(ret)\n\t}\n\n\treturn ret, nil\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCountersWithContext(ctx, pernic)\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\n// Deprecated: use process.PidsWithContext instead\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConnectionsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n\nfunc ConnectionsMaxWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsWithoutUidsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithoutUidsWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithoutUidsWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsPidWithoutUidsWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidMaxWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, false)\n}\n\nfunc ConnectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, true)\n}\n\nfunc connectionsPidMaxWithoutUidsWithContext(_ context.Context, _ string, _ int32, _ int, _ bool) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_unix.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build freebsd || darwin\n\npackage net\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\nfunc ConnectionsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsPidWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n\nfunc ConnectionsPidWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\tvar ret []ConnectionStat\n\n\targs := []string{\"-i\"}\n\tswitch strings.ToLower(kind) {\n\tdefault:\n\t\tfallthrough\n\tcase \"\":\n\t\tfallthrough\n\tcase \"all\":\n\t\tfallthrough\n\tcase \"inet\":\n\t\targs = append(args, \"tcp\", \"-i\", \"udp\")\n\tcase \"inet4\":\n\t\targs = append(args, \"4\")\n\tcase \"inet6\":\n\t\targs = append(args, \"6\")\n\tcase \"tcp\":\n\t\targs = append(args, \"tcp\")\n\tcase \"tcp4\":\n\t\targs = append(args, \"4tcp\")\n\tcase \"tcp6\":\n\t\targs = append(args, \"6tcp\")\n\tcase \"udp\":\n\t\targs = append(args, \"udp\")\n\tcase \"udp4\":\n\t\targs = append(args, \"4udp\")\n\tcase \"udp6\":\n\t\targs = append(args, \"6udp\")\n\tcase \"unix\":\n\t\targs = []string{\"-U\"}\n\t}\n\n\tr, err := common.CallLsofWithContext(ctx, invoke, pid, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, rr := range r {\n\t\tif strings.HasPrefix(rr, \"COMMAND\") {\n\t\t\tcontinue\n\t\t}\n\t\tn, err := parseNetLine(rr)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, n)\n\t}\n\n\treturn ret, nil\n}\n\nvar constMap = map[string]int{\n\t\"unix\": syscall.AF_UNIX,\n\t\"TCP\":  syscall.SOCK_STREAM,\n\t\"UDP\":  syscall.SOCK_DGRAM,\n\t\"IPv4\": syscall.AF_INET,\n\t\"IPv6\": syscall.AF_INET6,\n}\n\nfunc parseNetLine(line string) (ConnectionStat, error) {\n\tf := strings.Fields(line)\n\tif len(f) < 8 {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"wrong line,%s\", line)\n\t}\n\n\tif len(f) == 8 {\n\t\tf = append(f, f[7])\n\t\tf[7] = \"unix\"\n\t}\n\n\tpid, err := strconv.ParseInt(f[1], 10, 32)\n\tif err != nil {\n\t\treturn ConnectionStat{}, err\n\t}\n\tfd, err := strconv.ParseInt(strings.Trim(f[3], \"u\"), 10, 32)\n\tif err != nil {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"unknown fd, %s\", f[3])\n\t}\n\tnetFamily, ok := constMap[f[4]]\n\tif !ok {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"unknown family, %s\", f[4])\n\t}\n\tnetType, ok := constMap[f[7]]\n\tif !ok {\n\t\treturn ConnectionStat{}, fmt.Errorf(\"unknown type, %s\", f[7])\n\t}\n\n\tvar laddr, raddr Addr\n\tif f[7] == \"unix\" {\n\t\tladdr.IP = f[8]\n\t} else {\n\t\tladdr, raddr, err = parseNetAddr(f[8])\n\t\tif err != nil {\n\t\t\treturn ConnectionStat{}, fmt.Errorf(\"failed to parse netaddr, %s\", f[8])\n\t\t}\n\t}\n\n\tn := ConnectionStat{\n\t\tFd:     uint32(fd),\n\t\tFamily: uint32(netFamily),\n\t\tType:   uint32(netType),\n\t\tLaddr:  laddr,\n\t\tRaddr:  raddr,\n\t\tPid:    int32(pid),\n\t}\n\tif len(f) == 10 {\n\t\tn.Status = strings.Trim(f[9], \"()\")\n\t}\n\n\treturn n, nil\n}\n\nfunc parseNetAddr(line string) (laddr Addr, raddr Addr, err error) {\n\tparse := func(l string) (Addr, error) {\n\t\thost, port, err := net.SplitHostPort(l)\n\t\tif err != nil {\n\t\t\treturn Addr{}, fmt.Errorf(\"wrong addr, %s\", l)\n\t\t}\n\t\tlport, err := strconv.ParseInt(port, 10, 32)\n\t\tif err != nil {\n\t\t\treturn Addr{}, err\n\t\t}\n\t\treturn Addr{IP: host, Port: uint32(lport)}, nil\n\t}\n\n\taddrs := strings.Split(line, \"->\")\n\tif len(addrs) == 0 {\n\t\treturn laddr, raddr, fmt.Errorf(\"wrong netaddr, %s\", line)\n\t}\n\tladdr, err = parse(addrs[0])\n\tif len(addrs) == 2 { // remote addr exists\n\t\traddr, err = parse(addrs[1])\n\t\tif err != nil {\n\t\t\treturn laddr, raddr, err\n\t\t}\n\t}\n\n\treturn laddr, raddr, err\n}\n\nfunc ConnectionsPidMaxWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n\nfunc ConnectionsWithoutUidsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithoutUidsWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithoutUidsWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsPidWithoutUidsWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn)\n}\n\nfunc connectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/net/net_windows.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build windows\n\npackage net\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"golang.org/x/sys/windows\"\n)\n\nvar (\n\tmodiphlpapi             = windows.NewLazySystemDLL(\"iphlpapi.dll\")\n\tprocGetExtendedTCPTable = modiphlpapi.NewProc(\"GetExtendedTcpTable\")\n\tprocGetExtendedUDPTable = modiphlpapi.NewProc(\"GetExtendedUdpTable\")\n\tprocGetIfEntry2         = modiphlpapi.NewProc(\"GetIfEntry2\")\n)\n\nconst (\n\tTCPTableBasicListener = iota\n\tTCPTableBasicConnections\n\tTCPTableBasicAll\n\tTCPTableOwnerPIDListener\n\tTCPTableOwnerPIDConnections\n\tTCPTableOwnerPIDAll\n\tTCPTableOwnerModuleListener\n\tTCPTableOwnerModuleConnections\n\tTCPTableOwnerModuleAll\n)\n\ntype netConnectionKindType struct {\n\tfamily   uint32\n\tsockType uint32\n\tfilename string\n}\n\nvar kindTCP4 = netConnectionKindType{\n\tfamily:   syscall.AF_INET,\n\tsockType: syscall.SOCK_STREAM,\n\tfilename: \"tcp\",\n}\n\nvar kindTCP6 = netConnectionKindType{\n\tfamily:   syscall.AF_INET6,\n\tsockType: syscall.SOCK_STREAM,\n\tfilename: \"tcp6\",\n}\n\nvar kindUDP4 = netConnectionKindType{\n\tfamily:   syscall.AF_INET,\n\tsockType: syscall.SOCK_DGRAM,\n\tfilename: \"udp\",\n}\n\nvar kindUDP6 = netConnectionKindType{\n\tfamily:   syscall.AF_INET6,\n\tsockType: syscall.SOCK_DGRAM,\n\tfilename: \"udp6\",\n}\n\nvar netConnectionKindMap = map[string][]netConnectionKindType{\n\t\"all\":   {kindTCP4, kindTCP6, kindUDP4, kindUDP6},\n\t\"tcp\":   {kindTCP4, kindTCP6},\n\t\"tcp4\":  {kindTCP4},\n\t\"tcp6\":  {kindTCP6},\n\t\"udp\":   {kindUDP4, kindUDP6},\n\t\"udp4\":  {kindUDP4},\n\t\"udp6\":  {kindUDP6},\n\t\"inet\":  {kindTCP4, kindTCP6, kindUDP4, kindUDP6},\n\t\"inet4\": {kindTCP4, kindUDP4},\n\t\"inet6\": {kindTCP6, kindUDP6},\n}\n\n// https://github.com/microsoft/ethr/blob/aecdaf923970e5a9b4c461b4e2e3963d781ad2cc/plt_windows.go#L114-L170\ntype guid struct {\n\tData1 uint32\n\tData2 uint16\n\tData3 uint16\n\tData4 [8]byte\n}\n\nconst (\n\tmaxStringSize        = 256\n\tmaxPhysAddressLength = 32\n\tpad0for64_4for32     = 0\n)\n\ntype mibIfRow2 struct {\n\tInterfaceLuid               uint64\n\tInterfaceIndex              uint32\n\tInterfaceGuid               guid\n\tAlias                       [maxStringSize + 1]uint16\n\tDescription                 [maxStringSize + 1]uint16\n\tPhysicalAddressLength       uint32\n\tPhysicalAddress             [maxPhysAddressLength]uint8\n\tPermanentPhysicalAddress    [maxPhysAddressLength]uint8\n\tMtu                         uint32\n\tType                        uint32\n\tTunnelType                  uint32\n\tMediaType                   uint32\n\tPhysicalMediumType          uint32\n\tAccessType                  uint32\n\tDirectionType               uint32\n\tInterfaceAndOperStatusFlags uint32\n\tOperStatus                  uint32\n\tAdminStatus                 uint32\n\tMediaConnectState           uint32\n\tNetworkGuid                 guid\n\tConnectionType              uint32\n\tpadding1                    [pad0for64_4for32]byte\n\tTransmitLinkSpeed           uint64\n\tReceiveLinkSpeed            uint64\n\tInOctets                    uint64\n\tInUcastPkts                 uint64\n\tInNUcastPkts                uint64\n\tInDiscards                  uint64\n\tInErrors                    uint64\n\tInUnknownProtos             uint64\n\tInUcastOctets               uint64\n\tInMulticastOctets           uint64\n\tInBroadcastOctets           uint64\n\tOutOctets                   uint64\n\tOutUcastPkts                uint64\n\tOutNUcastPkts               uint64\n\tOutDiscards                 uint64\n\tOutErrors                   uint64\n\tOutUcastOctets              uint64\n\tOutMulticastOctets          uint64\n\tOutBroadcastOctets          uint64\n\tOutQLen                     uint64\n}\n\nfunc IOCountersWithContext(ctx context.Context, pernic bool) ([]IOCountersStat, error) {\n\tifs, err := net.Interfaces()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar counters []IOCountersStat\n\n\terr = procGetIfEntry2.Find()\n\tif err == nil { // Vista+, uint64 values (issue#693)\n\t\tfor _, ifi := range ifs {\n\t\t\tc := IOCountersStat{\n\t\t\t\tName: ifi.Name,\n\t\t\t}\n\n\t\t\trow := mibIfRow2{InterfaceIndex: uint32(ifi.Index)}\n\t\t\tret, _, err := procGetIfEntry2.Call(uintptr(unsafe.Pointer(&row)))\n\t\t\tif ret != 0 {\n\t\t\t\treturn nil, os.NewSyscallError(\"GetIfEntry2\", err)\n\t\t\t}\n\t\t\tc.BytesSent = uint64(row.OutOctets)\n\t\t\tc.BytesRecv = uint64(row.InOctets)\n\t\t\tc.PacketsSent = uint64(row.OutUcastPkts)\n\t\t\tc.PacketsRecv = uint64(row.InUcastPkts)\n\t\t\tc.Errin = uint64(row.InErrors)\n\t\t\tc.Errout = uint64(row.OutErrors)\n\t\t\tc.Dropin = uint64(row.InDiscards)\n\t\t\tc.Dropout = uint64(row.OutDiscards)\n\n\t\t\tcounters = append(counters, c)\n\t\t}\n\t} else { // WinXP fallback, uint32 values\n\t\tfor _, ifi := range ifs {\n\t\t\tc := IOCountersStat{\n\t\t\t\tName: ifi.Name,\n\t\t\t}\n\n\t\t\trow := windows.MibIfRow{Index: uint32(ifi.Index)}\n\t\t\terr = windows.GetIfEntry(&row)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, os.NewSyscallError(\"GetIfEntry\", err)\n\t\t\t}\n\t\t\tc.BytesSent = uint64(row.OutOctets)\n\t\t\tc.BytesRecv = uint64(row.InOctets)\n\t\t\tc.PacketsSent = uint64(row.OutUcastPkts)\n\t\t\tc.PacketsRecv = uint64(row.InUcastPkts)\n\t\t\tc.Errin = uint64(row.InErrors)\n\t\t\tc.Errout = uint64(row.OutErrors)\n\t\t\tc.Dropin = uint64(row.InDiscards)\n\t\t\tc.Dropout = uint64(row.OutDiscards)\n\n\t\t\tcounters = append(counters, c)\n\t\t}\n\t}\n\n\tif !pernic {\n\t\treturn getIOCountersAll(counters)\n\t}\n\treturn counters, nil\n}\n\nfunc IOCountersByFileWithContext(ctx context.Context, pernic bool, filename string) ([]IOCountersStat, error) {\n\treturn IOCounters(pernic)\n}\n\nfunc ConnectionsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsPidWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsPidWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\ttmap, ok := netConnectionKindMap[kind]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"invalid kind, %s\", kind)\n\t}\n\treturn getProcInet(tmap, pid)\n}\n\nfunc getProcInet(kinds []netConnectionKindType, pid int32) ([]ConnectionStat, error) {\n\tstats := make([]ConnectionStat, 0)\n\n\tfor _, kind := range kinds {\n\t\ts, err := getNetStatWithKind(kind)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif pid == 0 {\n\t\t\tstats = append(stats, s...)\n\t\t} else {\n\t\t\tfor _, ns := range s {\n\t\t\t\tif ns.Pid != pid {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tstats = append(stats, ns)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn stats, nil\n}\n\nfunc getNetStatWithKind(kindType netConnectionKindType) ([]ConnectionStat, error) {\n\tif kindType.filename == \"\" {\n\t\treturn nil, fmt.Errorf(\"kind filename must be required\")\n\t}\n\n\tswitch kindType.filename {\n\tcase kindTCP4.filename:\n\t\treturn getTCPConnections(kindTCP4.family)\n\tcase kindTCP6.filename:\n\t\treturn getTCPConnections(kindTCP6.family)\n\tcase kindUDP4.filename:\n\t\treturn getUDPConnections(kindUDP4.family)\n\tcase kindUDP6.filename:\n\t\treturn getUDPConnections(kindUDP6.family)\n\t}\n\n\treturn nil, fmt.Errorf(\"invalid kind filename, %s\", kindType.filename)\n}\n\n// Deprecated: use process.PidsWithContext instead\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConnectionsMaxWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsWithoutUidsWithContext(ctx context.Context, kind string) ([]ConnectionStat, error) {\n\treturn ConnectionsMaxWithoutUidsWithContext(ctx, kind, 0)\n}\n\nfunc ConnectionsMaxWithoutUidsWithContext(ctx context.Context, kind string, maxConn int) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, 0, maxConn)\n}\n\nfunc ConnectionsPidWithoutUidsWithContext(ctx context.Context, kind string, pid int32) ([]ConnectionStat, error) {\n\treturn ConnectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, 0)\n}\n\nfunc ConnectionsPidMaxWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, false)\n}\n\nfunc ConnectionsPidMaxWithoutUidsWithContext(ctx context.Context, kind string, pid int32, maxConn int) ([]ConnectionStat, error) {\n\treturn connectionsPidMaxWithoutUidsWithContext(ctx, kind, pid, maxConn, true)\n}\n\nfunc connectionsPidMaxWithoutUidsWithContext(_ context.Context, _ string, _ int32, _ int, _ bool) ([]ConnectionStat, error) {\n\treturn []ConnectionStat{}, common.ErrNotImplementedError\n}\n\nfunc FilterCountersWithContext(ctx context.Context) ([]FilterStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ConntrackStatsWithContext(ctx context.Context, percpu bool) ([]ConntrackStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProtoCountersWithContext(ctx context.Context, protocols []string) ([]ProtoCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc getTableUintptr(family uint32, buf []byte) uintptr {\n\tvar (\n\t\tpmibTCPTable  pmibTCPTableOwnerPidAll\n\t\tpmibTCP6Table pmibTCP6TableOwnerPidAll\n\n\t\tp uintptr\n\t)\n\tswitch family {\n\tcase kindTCP4.family:\n\t\tif len(buf) > 0 {\n\t\t\tpmibTCPTable = (*mibTCPTableOwnerPid)(unsafe.Pointer(&buf[0]))\n\t\t\tp = uintptr(unsafe.Pointer(pmibTCPTable))\n\t\t} else {\n\t\t\tp = uintptr(unsafe.Pointer(pmibTCPTable))\n\t\t}\n\tcase kindTCP6.family:\n\t\tif len(buf) > 0 {\n\t\t\tpmibTCP6Table = (*mibTCP6TableOwnerPid)(unsafe.Pointer(&buf[0]))\n\t\t\tp = uintptr(unsafe.Pointer(pmibTCP6Table))\n\t\t} else {\n\t\t\tp = uintptr(unsafe.Pointer(pmibTCP6Table))\n\t\t}\n\t}\n\treturn p\n}\n\nfunc getTableInfo(filename string, table interface{}) (index, step, length int) {\n\tswitch filename {\n\tcase kindTCP4.filename:\n\t\tindex = int(unsafe.Sizeof(table.(pmibTCPTableOwnerPidAll).DwNumEntries))\n\t\tstep = int(unsafe.Sizeof(table.(pmibTCPTableOwnerPidAll).Table))\n\t\tlength = int(table.(pmibTCPTableOwnerPidAll).DwNumEntries)\n\tcase kindTCP6.filename:\n\t\tindex = int(unsafe.Sizeof(table.(pmibTCP6TableOwnerPidAll).DwNumEntries))\n\t\tstep = int(unsafe.Sizeof(table.(pmibTCP6TableOwnerPidAll).Table))\n\t\tlength = int(table.(pmibTCP6TableOwnerPidAll).DwNumEntries)\n\tcase kindUDP4.filename:\n\t\tindex = int(unsafe.Sizeof(table.(pmibUDPTableOwnerPid).DwNumEntries))\n\t\tstep = int(unsafe.Sizeof(table.(pmibUDPTableOwnerPid).Table))\n\t\tlength = int(table.(pmibUDPTableOwnerPid).DwNumEntries)\n\tcase kindUDP6.filename:\n\t\tindex = int(unsafe.Sizeof(table.(pmibUDP6TableOwnerPid).DwNumEntries))\n\t\tstep = int(unsafe.Sizeof(table.(pmibUDP6TableOwnerPid).Table))\n\t\tlength = int(table.(pmibUDP6TableOwnerPid).DwNumEntries)\n\t}\n\n\treturn\n}\n\nfunc getTCPConnections(family uint32) ([]ConnectionStat, error) {\n\tvar (\n\t\tp    uintptr\n\t\tbuf  []byte\n\t\tsize uint32\n\n\t\tpmibTCPTable  pmibTCPTableOwnerPidAll\n\t\tpmibTCP6Table pmibTCP6TableOwnerPidAll\n\t)\n\n\tif family == 0 {\n\t\treturn nil, fmt.Errorf(\"faimly must be required\")\n\t}\n\n\tfor {\n\t\tswitch family {\n\t\tcase kindTCP4.family:\n\t\t\tif len(buf) > 0 {\n\t\t\t\tpmibTCPTable = (*mibTCPTableOwnerPid)(unsafe.Pointer(&buf[0]))\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibTCPTable))\n\t\t\t} else {\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibTCPTable))\n\t\t\t}\n\t\tcase kindTCP6.family:\n\t\t\tif len(buf) > 0 {\n\t\t\t\tpmibTCP6Table = (*mibTCP6TableOwnerPid)(unsafe.Pointer(&buf[0]))\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibTCP6Table))\n\t\t\t} else {\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibTCP6Table))\n\t\t\t}\n\t\t}\n\n\t\terr := getExtendedTcpTable(p,\n\t\t\t&size,\n\t\t\ttrue,\n\t\t\tfamily,\n\t\t\ttcpTableOwnerPidAll,\n\t\t\t0)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif err != windows.ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf = make([]byte, size)\n\t}\n\n\tvar (\n\t\tindex, step int\n\t\tlength      int\n\t)\n\n\tstats := make([]ConnectionStat, 0)\n\tswitch family {\n\tcase kindTCP4.family:\n\t\tindex, step, length = getTableInfo(kindTCP4.filename, pmibTCPTable)\n\tcase kindTCP6.family:\n\t\tindex, step, length = getTableInfo(kindTCP6.filename, pmibTCP6Table)\n\t}\n\n\tif length == 0 {\n\t\treturn nil, nil\n\t}\n\n\tfor i := 0; i < length; i++ {\n\t\tswitch family {\n\t\tcase kindTCP4.family:\n\t\t\tmibs := (*mibTCPRowOwnerPid)(unsafe.Pointer(&buf[index]))\n\t\t\tns := mibs.convertToConnectionStat()\n\t\t\tstats = append(stats, ns)\n\t\tcase kindTCP6.family:\n\t\t\tmibs := (*mibTCP6RowOwnerPid)(unsafe.Pointer(&buf[index]))\n\t\t\tns := mibs.convertToConnectionStat()\n\t\t\tstats = append(stats, ns)\n\t\t}\n\n\t\tindex += step\n\t}\n\treturn stats, nil\n}\n\nfunc getUDPConnections(family uint32) ([]ConnectionStat, error) {\n\tvar (\n\t\tp    uintptr\n\t\tbuf  []byte\n\t\tsize uint32\n\n\t\tpmibUDPTable  pmibUDPTableOwnerPid\n\t\tpmibUDP6Table pmibUDP6TableOwnerPid\n\t)\n\n\tif family == 0 {\n\t\treturn nil, fmt.Errorf(\"faimly must be required\")\n\t}\n\n\tfor {\n\t\tswitch family {\n\t\tcase kindUDP4.family:\n\t\t\tif len(buf) > 0 {\n\t\t\t\tpmibUDPTable = (*mibUDPTableOwnerPid)(unsafe.Pointer(&buf[0]))\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibUDPTable))\n\t\t\t} else {\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibUDPTable))\n\t\t\t}\n\t\tcase kindUDP6.family:\n\t\t\tif len(buf) > 0 {\n\t\t\t\tpmibUDP6Table = (*mibUDP6TableOwnerPid)(unsafe.Pointer(&buf[0]))\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibUDP6Table))\n\t\t\t} else {\n\t\t\t\tp = uintptr(unsafe.Pointer(pmibUDP6Table))\n\t\t\t}\n\t\t}\n\n\t\terr := getExtendedUdpTable(\n\t\t\tp,\n\t\t\t&size,\n\t\t\ttrue,\n\t\t\tfamily,\n\t\t\tudpTableOwnerPid,\n\t\t\t0,\n\t\t)\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif err != windows.ERROR_INSUFFICIENT_BUFFER {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf = make([]byte, size)\n\t}\n\n\tvar index, step, length int\n\n\tstats := make([]ConnectionStat, 0)\n\tswitch family {\n\tcase kindUDP4.family:\n\t\tindex, step, length = getTableInfo(kindUDP4.filename, pmibUDPTable)\n\tcase kindUDP6.family:\n\t\tindex, step, length = getTableInfo(kindUDP6.filename, pmibUDP6Table)\n\t}\n\n\tif length == 0 {\n\t\treturn nil, nil\n\t}\n\n\tfor i := 0; i < length; i++ {\n\t\tswitch family {\n\t\tcase kindUDP4.family:\n\t\t\tmibs := (*mibUDPRowOwnerPid)(unsafe.Pointer(&buf[index]))\n\t\t\tns := mibs.convertToConnectionStat()\n\t\t\tstats = append(stats, ns)\n\t\tcase kindUDP6.family:\n\t\t\tmibs := (*mibUDP6RowOwnerPid)(unsafe.Pointer(&buf[index]))\n\t\t\tns := mibs.convertToConnectionStat()\n\t\t\tstats = append(stats, ns)\n\t\t}\n\n\t\tindex += step\n\t}\n\treturn stats, nil\n}\n\n// tcpStatuses https://msdn.microsoft.com/en-us/library/windows/desktop/bb485761(v=vs.85).aspx\nvar tcpStatuses = map[mibTCPState]string{\n\t1:  \"CLOSED\",\n\t2:  \"LISTEN\",\n\t3:  \"SYN_SENT\",\n\t4:  \"SYN_RECEIVED\",\n\t5:  \"ESTABLISHED\",\n\t6:  \"FIN_WAIT_1\",\n\t7:  \"FIN_WAIT_2\",\n\t8:  \"CLOSE_WAIT\",\n\t9:  \"CLOSING\",\n\t10: \"LAST_ACK\",\n\t11: \"TIME_WAIT\",\n\t12: \"DELETE\",\n}\n\nfunc getExtendedTcpTable(pTcpTable uintptr, pdwSize *uint32, bOrder bool, ulAf uint32, tableClass tcpTableClass, reserved uint32) (errcode error) {\n\tr1, _, _ := syscall.Syscall6(procGetExtendedTCPTable.Addr(), 6, pTcpTable, uintptr(unsafe.Pointer(pdwSize)), getUintptrFromBool(bOrder), uintptr(ulAf), uintptr(tableClass), uintptr(reserved))\n\tif r1 != 0 {\n\t\terrcode = syscall.Errno(r1)\n\t}\n\treturn\n}\n\nfunc getExtendedUdpTable(pUdpTable uintptr, pdwSize *uint32, bOrder bool, ulAf uint32, tableClass udpTableClass, reserved uint32) (errcode error) {\n\tr1, _, _ := syscall.Syscall6(procGetExtendedUDPTable.Addr(), 6, pUdpTable, uintptr(unsafe.Pointer(pdwSize)), getUintptrFromBool(bOrder), uintptr(ulAf), uintptr(tableClass), uintptr(reserved))\n\tif r1 != 0 {\n\t\terrcode = syscall.Errno(r1)\n\t}\n\treturn\n}\n\nfunc getUintptrFromBool(b bool) uintptr {\n\tif b {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\nconst anySize = 1\n\n// type MIB_TCP_STATE int32\ntype mibTCPState int32\n\ntype tcpTableClass int32\n\nconst (\n\ttcpTableBasicListener tcpTableClass = iota\n\ttcpTableBasicConnections\n\ttcpTableBasicAll\n\ttcpTableOwnerPidListener\n\ttcpTableOwnerPidConnections\n\ttcpTableOwnerPidAll\n\ttcpTableOwnerModuleListener\n\ttcpTableOwnerModuleConnections\n\ttcpTableOwnerModuleAll\n)\n\ntype udpTableClass int32\n\nconst (\n\tudpTableBasic udpTableClass = iota\n\tudpTableOwnerPid\n\tudpTableOwnerModule\n)\n\n// TCP\n\ntype mibTCPRowOwnerPid struct {\n\tDwState      uint32\n\tDwLocalAddr  uint32\n\tDwLocalPort  uint32\n\tDwRemoteAddr uint32\n\tDwRemotePort uint32\n\tDwOwningPid  uint32\n}\n\nfunc (m *mibTCPRowOwnerPid) convertToConnectionStat() ConnectionStat {\n\tns := ConnectionStat{\n\t\tFamily: kindTCP4.family,\n\t\tType:   kindTCP4.sockType,\n\t\tLaddr: Addr{\n\t\t\tIP:   parseIPv4HexString(m.DwLocalAddr),\n\t\t\tPort: uint32(decodePort(m.DwLocalPort)),\n\t\t},\n\t\tRaddr: Addr{\n\t\t\tIP:   parseIPv4HexString(m.DwRemoteAddr),\n\t\t\tPort: uint32(decodePort(m.DwRemotePort)),\n\t\t},\n\t\tPid:    int32(m.DwOwningPid),\n\t\tStatus: tcpStatuses[mibTCPState(m.DwState)],\n\t}\n\n\treturn ns\n}\n\ntype mibTCPTableOwnerPid struct {\n\tDwNumEntries uint32\n\tTable        [anySize]mibTCPRowOwnerPid\n}\n\ntype mibTCP6RowOwnerPid struct {\n\tUcLocalAddr     [16]byte\n\tDwLocalScopeId  uint32\n\tDwLocalPort     uint32\n\tUcRemoteAddr    [16]byte\n\tDwRemoteScopeId uint32\n\tDwRemotePort    uint32\n\tDwState         uint32\n\tDwOwningPid     uint32\n}\n\nfunc (m *mibTCP6RowOwnerPid) convertToConnectionStat() ConnectionStat {\n\tns := ConnectionStat{\n\t\tFamily: kindTCP6.family,\n\t\tType:   kindTCP6.sockType,\n\t\tLaddr: Addr{\n\t\t\tIP:   parseIPv6HexString(m.UcLocalAddr),\n\t\t\tPort: uint32(decodePort(m.DwLocalPort)),\n\t\t},\n\t\tRaddr: Addr{\n\t\t\tIP:   parseIPv6HexString(m.UcRemoteAddr),\n\t\t\tPort: uint32(decodePort(m.DwRemotePort)),\n\t\t},\n\t\tPid:    int32(m.DwOwningPid),\n\t\tStatus: tcpStatuses[mibTCPState(m.DwState)],\n\t}\n\n\treturn ns\n}\n\ntype mibTCP6TableOwnerPid struct {\n\tDwNumEntries uint32\n\tTable        [anySize]mibTCP6RowOwnerPid\n}\n\ntype (\n\tpmibTCPTableOwnerPidAll  *mibTCPTableOwnerPid\n\tpmibTCP6TableOwnerPidAll *mibTCP6TableOwnerPid\n)\n\n// UDP\n\ntype mibUDPRowOwnerPid struct {\n\tDwLocalAddr uint32\n\tDwLocalPort uint32\n\tDwOwningPid uint32\n}\n\nfunc (m *mibUDPRowOwnerPid) convertToConnectionStat() ConnectionStat {\n\tns := ConnectionStat{\n\t\tFamily: kindUDP4.family,\n\t\tType:   kindUDP4.sockType,\n\t\tLaddr: Addr{\n\t\t\tIP:   parseIPv4HexString(m.DwLocalAddr),\n\t\t\tPort: uint32(decodePort(m.DwLocalPort)),\n\t\t},\n\t\tPid: int32(m.DwOwningPid),\n\t}\n\n\treturn ns\n}\n\ntype mibUDPTableOwnerPid struct {\n\tDwNumEntries uint32\n\tTable        [anySize]mibUDPRowOwnerPid\n}\n\ntype mibUDP6RowOwnerPid struct {\n\tUcLocalAddr    [16]byte\n\tDwLocalScopeId uint32\n\tDwLocalPort    uint32\n\tDwOwningPid    uint32\n}\n\nfunc (m *mibUDP6RowOwnerPid) convertToConnectionStat() ConnectionStat {\n\tns := ConnectionStat{\n\t\tFamily: kindUDP6.family,\n\t\tType:   kindUDP6.sockType,\n\t\tLaddr: Addr{\n\t\t\tIP:   parseIPv6HexString(m.UcLocalAddr),\n\t\t\tPort: uint32(decodePort(m.DwLocalPort)),\n\t\t},\n\t\tPid: int32(m.DwOwningPid),\n\t}\n\n\treturn ns\n}\n\ntype mibUDP6TableOwnerPid struct {\n\tDwNumEntries uint32\n\tTable        [anySize]mibUDP6RowOwnerPid\n}\n\ntype (\n\tpmibUDPTableOwnerPid  *mibUDPTableOwnerPid\n\tpmibUDP6TableOwnerPid *mibUDP6TableOwnerPid\n)\n\nfunc decodePort(port uint32) uint16 {\n\treturn syscall.Ntohs(uint16(port))\n}\n\nfunc parseIPv4HexString(addr uint32) string {\n\treturn fmt.Sprintf(\"%d.%d.%d.%d\", addr&255, addr>>8&255, addr>>16&255, addr>>24&255)\n}\n\nfunc parseIPv6HexString(addr [16]byte) string {\n\tvar ret [16]byte\n\tfor i := 0; i < 16; i++ {\n\t\tret[i] = uint8(addr[i])\n\t}\n\n\t// convert []byte to net.IP\n\tip := net.IP(ret[:])\n\treturn ip.String()\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage process\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"runtime\"\n\t\"sort\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/mem\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n)\n\nvar (\n\tinvoke                 common.Invoker = common.Invoke{}\n\tErrorNoChildren                       = errors.New(\"process does not have children\") // Deprecated: ErrorNoChildren is never returned by process.Children(), check its returned []*Process slice length instead\n\tErrorProcessNotRunning                = errors.New(\"process does not exist\")\n\tErrorNotPermitted                     = errors.New(\"operation not permitted\")\n)\n\ntype Process struct {\n\tPid            int32 `json:\"pid\"`\n\tname           string\n\tstatus         string\n\tparent         int32\n\tparentMutex    sync.RWMutex // for windows ppid cache\n\tnumCtxSwitches *NumCtxSwitchesStat\n\tuids           []uint32\n\tgids           []uint32\n\tgroups         []uint32\n\tnumThreads     int32\n\tmemInfo        *MemoryInfoStat\n\tsigInfo        *SignalInfoStat\n\tcreateTime     int64\n\n\tlastCPUTimes *cpu.TimesStat\n\tlastCPUTime  time.Time\n\n\ttgid int32\n}\n\n// Process status\nconst (\n\t// Running marks a task a running or runnable (on the run queue)\n\tRunning = \"running\"\n\t// Blocked marks a task waiting on a short, uninterruptible operation (usually I/O)\n\tBlocked = \"blocked\"\n\t// Idle marks a task sleeping for more than about 20 seconds\n\tIdle = \"idle\"\n\t// Lock marks a task waiting to acquire a lock\n\tLock = \"lock\"\n\t// Sleep marks task waiting for short, interruptible operation\n\tSleep = \"sleep\"\n\t// Stop marks a stopped process\n\tStop = \"stop\"\n\t// Wait marks an idle interrupt thread (or paging in pre 2.6.xx Linux)\n\tWait = \"wait\"\n\t// Zombie marks a defunct process, terminated but not reaped by its parent\n\tZombie = \"zombie\"\n\n\t// Solaris states. See https://github.com/collectd/collectd/blob/1da3305c10c8ff9a63081284cf3d4bb0f6daffd8/src/processes.c#L2115\n\tDaemon   = \"daemon\"\n\tDetached = \"detached\"\n\tSystem   = \"system\"\n\tOrphan   = \"orphan\"\n\n\tUnknownState = \"\"\n)\n\ntype OpenFilesStat struct {\n\tPath string `json:\"path\"`\n\tFd   uint64 `json:\"fd\"`\n}\n\ntype MemoryInfoStat struct {\n\tRSS    uint64 `json:\"rss\"`    // bytes\n\tVMS    uint64 `json:\"vms\"`    // bytes\n\tHWM    uint64 `json:\"hwm\"`    // bytes\n\tData   uint64 `json:\"data\"`   // bytes\n\tStack  uint64 `json:\"stack\"`  // bytes\n\tLocked uint64 `json:\"locked\"` // bytes\n\tSwap   uint64 `json:\"swap\"`   // bytes\n}\n\ntype SignalInfoStat struct {\n\tPendingProcess uint64 `json:\"pending_process\"`\n\tPendingThread  uint64 `json:\"pending_thread\"`\n\tBlocked        uint64 `json:\"blocked\"`\n\tIgnored        uint64 `json:\"ignored\"`\n\tCaught         uint64 `json:\"caught\"`\n}\n\ntype RlimitStat struct {\n\tResource int32  `json:\"resource\"`\n\tSoft     uint64 `json:\"soft\"`\n\tHard     uint64 `json:\"hard\"`\n\tUsed     uint64 `json:\"used\"`\n}\n\ntype IOCountersStat struct {\n\t// ReadCount is a number of read I/O operations such as syscalls.\n\tReadCount uint64 `json:\"readCount\"`\n\t// WriteCount is a number of read I/O operations such as syscalls.\n\tWriteCount uint64 `json:\"writeCount\"`\n\t// ReadBytes is a number of all I/O read in bytes. This includes disk I/O on Linux and Windows.\n\tReadBytes uint64 `json:\"readBytes\"`\n\t// WriteBytes is a number of all I/O write in bytes. This includes disk I/O on Linux and Windows.\n\tWriteBytes uint64 `json:\"writeBytes\"`\n\t// DiskReadBytes is a number of disk I/O write in bytes. Currently only Linux has this value.\n\tDiskReadBytes uint64 `json:\"diskReadBytes\"`\n\t// DiskWriteBytes is a number of disk I/O read in bytes.  Currently only Linux has this value.\n\tDiskWriteBytes uint64 `json:\"diskWriteBytes\"`\n}\n\ntype NumCtxSwitchesStat struct {\n\tVoluntary   int64 `json:\"voluntary\"`\n\tInvoluntary int64 `json:\"involuntary\"`\n}\n\ntype PageFaultsStat struct {\n\tMinorFaults      uint64 `json:\"minorFaults\"`\n\tMajorFaults      uint64 `json:\"majorFaults\"`\n\tChildMinorFaults uint64 `json:\"childMinorFaults\"`\n\tChildMajorFaults uint64 `json:\"childMajorFaults\"`\n}\n\n// Resource limit constants are from /usr/include/x86_64-linux-gnu/bits/resource.h\n// from libc6-dev package in Ubuntu 16.10\nconst (\n\tRLIMIT_CPU        int32 = 0\n\tRLIMIT_FSIZE      int32 = 1\n\tRLIMIT_DATA       int32 = 2\n\tRLIMIT_STACK      int32 = 3\n\tRLIMIT_CORE       int32 = 4\n\tRLIMIT_RSS        int32 = 5\n\tRLIMIT_NPROC      int32 = 6\n\tRLIMIT_NOFILE     int32 = 7\n\tRLIMIT_MEMLOCK    int32 = 8\n\tRLIMIT_AS         int32 = 9\n\tRLIMIT_LOCKS      int32 = 10\n\tRLIMIT_SIGPENDING int32 = 11\n\tRLIMIT_MSGQUEUE   int32 = 12\n\tRLIMIT_NICE       int32 = 13\n\tRLIMIT_RTPRIO     int32 = 14\n\tRLIMIT_RTTIME     int32 = 15\n)\n\nfunc (p Process) String() string {\n\ts, _ := json.Marshal(p)\n\treturn string(s)\n}\n\nfunc (o OpenFilesStat) String() string {\n\ts, _ := json.Marshal(o)\n\treturn string(s)\n}\n\nfunc (m MemoryInfoStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\nfunc (r RlimitStat) String() string {\n\ts, _ := json.Marshal(r)\n\treturn string(s)\n}\n\nfunc (i IOCountersStat) String() string {\n\ts, _ := json.Marshal(i)\n\treturn string(s)\n}\n\nfunc (p NumCtxSwitchesStat) String() string {\n\ts, _ := json.Marshal(p)\n\treturn string(s)\n}\n\nvar enableBootTimeCache bool\n\n// EnableBootTimeCache change cache behavior of BootTime. If true, cache BootTime value. Default is false.\nfunc EnableBootTimeCache(enable bool) {\n\tenableBootTimeCache = enable\n}\n\n// Pids returns a slice of process ID list which are running now.\nfunc Pids() ([]int32, error) {\n\treturn PidsWithContext(context.Background())\n}\n\nfunc PidsWithContext(ctx context.Context) ([]int32, error) {\n\tpids, err := pidsWithContext(ctx)\n\tsort.Slice(pids, func(i, j int) bool { return pids[i] < pids[j] })\n\treturn pids, err\n}\n\n// Processes returns a slice of pointers to Process structs for all\n// currently running processes.\nfunc Processes() ([]*Process, error) {\n\treturn ProcessesWithContext(context.Background())\n}\n\n// NewProcess creates a new Process instance, it only stores the pid and\n// checks that the process exists. Other method on Process can be used\n// to get more information about the process. An error will be returned\n// if the process does not exist.\nfunc NewProcess(pid int32) (*Process, error) {\n\treturn NewProcessWithContext(context.Background(), pid)\n}\n\nfunc NewProcessWithContext(ctx context.Context, pid int32) (*Process, error) {\n\tp := &Process{\n\t\tPid: pid,\n\t}\n\n\texists, err := PidExistsWithContext(ctx, pid)\n\tif err != nil {\n\t\treturn p, err\n\t}\n\tif !exists {\n\t\treturn p, ErrorProcessNotRunning\n\t}\n\tp.CreateTimeWithContext(ctx)\n\treturn p, nil\n}\n\nfunc PidExists(pid int32) (bool, error) {\n\treturn PidExistsWithContext(context.Background(), pid)\n}\n\n// Background returns true if the process is in background, false otherwise.\nfunc (p *Process) Background() (bool, error) {\n\treturn p.BackgroundWithContext(context.Background())\n}\n\nfunc (p *Process) BackgroundWithContext(ctx context.Context) (bool, error) {\n\tfg, err := p.ForegroundWithContext(ctx)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn !fg, err\n}\n\n// If interval is 0, return difference from last call(non-blocking).\n// If interval > 0, wait interval sec and return difference between start and end.\nfunc (p *Process) Percent(interval time.Duration) (float64, error) {\n\treturn p.PercentWithContext(context.Background(), interval)\n}\n\nfunc (p *Process) PercentWithContext(ctx context.Context, interval time.Duration) (float64, error) {\n\tcpuTimes, err := p.TimesWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tnow := time.Now()\n\n\tif interval > 0 {\n\t\tp.lastCPUTimes = cpuTimes\n\t\tp.lastCPUTime = now\n\t\tif err := common.Sleep(ctx, interval); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tcpuTimes, err = p.TimesWithContext(ctx)\n\t\tnow = time.Now()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t} else {\n\t\tif p.lastCPUTimes == nil {\n\t\t\t// invoked first time\n\t\t\tp.lastCPUTimes = cpuTimes\n\t\t\tp.lastCPUTime = now\n\t\t\treturn 0, nil\n\t\t}\n\t}\n\n\tnumcpu := runtime.NumCPU()\n\tdelta := (now.Sub(p.lastCPUTime).Seconds()) * float64(numcpu)\n\tret := calculatePercent(p.lastCPUTimes, cpuTimes, delta, numcpu)\n\tp.lastCPUTimes = cpuTimes\n\tp.lastCPUTime = now\n\treturn ret, nil\n}\n\n// IsRunning returns whether the process is still running or not.\nfunc (p *Process) IsRunning() (bool, error) {\n\treturn p.IsRunningWithContext(context.Background())\n}\n\nfunc (p *Process) IsRunningWithContext(ctx context.Context) (bool, error) {\n\tcreateTime, err := p.CreateTimeWithContext(ctx)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tp2, err := NewProcessWithContext(ctx, p.Pid)\n\tif errors.Is(err, ErrorProcessNotRunning) {\n\t\treturn false, nil\n\t}\n\tcreateTime2, err := p2.CreateTimeWithContext(ctx)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn createTime == createTime2, nil\n}\n\n// CreateTime returns created time of the process in milliseconds since the epoch, in UTC.\nfunc (p *Process) CreateTime() (int64, error) {\n\treturn p.CreateTimeWithContext(context.Background())\n}\n\nfunc (p *Process) CreateTimeWithContext(ctx context.Context) (int64, error) {\n\tif p.createTime != 0 {\n\t\treturn p.createTime, nil\n\t}\n\tcreateTime, err := p.createTimeWithContext(ctx)\n\tp.createTime = createTime\n\treturn p.createTime, err\n}\n\nfunc calculatePercent(t1, t2 *cpu.TimesStat, delta float64, numcpu int) float64 {\n\tif delta == 0 {\n\t\treturn 0\n\t}\n\t// https://github.com/giampaolo/psutil/blob/c034e6692cf736b5e87d14418a8153bb03f6cf42/psutil/__init__.py#L1064\n\tdelta_proc := (t2.User - t1.User) + (t2.System - t1.System)\n\tif delta_proc <= 0 {\n\t\treturn 0\n\t}\n\toverall_percent := ((delta_proc / delta) * 100) * float64(numcpu)\n\treturn overall_percent\n}\n\n// MemoryPercent returns how many percent of the total RAM this process uses\nfunc (p *Process) MemoryPercent() (float32, error) {\n\treturn p.MemoryPercentWithContext(context.Background())\n}\n\nfunc (p *Process) MemoryPercentWithContext(ctx context.Context) (float32, error) {\n\tmachineMemory, err := mem.VirtualMemoryWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\ttotal := machineMemory.Total\n\n\tprocessMemory, err := p.MemoryInfoWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tused := processMemory.RSS\n\n\treturn (100 * float32(used) / float32(total)), nil\n}\n\n// CPUPercent returns how many percent of the CPU time this process uses\nfunc (p *Process) CPUPercent() (float64, error) {\n\treturn p.CPUPercentWithContext(context.Background())\n}\n\nfunc (p *Process) CPUPercentWithContext(ctx context.Context) (float64, error) {\n\tcrt_time, err := p.createTimeWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tcput, err := p.TimesWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tcreated := time.Unix(0, crt_time*int64(time.Millisecond))\n\ttotalTime := time.Since(created).Seconds()\n\tif totalTime <= 0 {\n\t\treturn 0, nil\n\t}\n\n\treturn 100 * cput.Total() / totalTime, nil\n}\n\n// Groups returns all group IDs(include supplementary groups) of the process as a slice of the int\nfunc (p *Process) Groups() ([]uint32, error) {\n\treturn p.GroupsWithContext(context.Background())\n}\n\n// Ppid returns Parent Process ID of the process.\nfunc (p *Process) Ppid() (int32, error) {\n\treturn p.PpidWithContext(context.Background())\n}\n\n// Name returns name of the process.\nfunc (p *Process) Name() (string, error) {\n\treturn p.NameWithContext(context.Background())\n}\n\n// Exe returns executable path of the process.\nfunc (p *Process) Exe() (string, error) {\n\treturn p.ExeWithContext(context.Background())\n}\n\n// Cmdline returns the command line arguments of the process as a string with\n// each argument separated by 0x20 ascii character.\nfunc (p *Process) Cmdline() (string, error) {\n\treturn p.CmdlineWithContext(context.Background())\n}\n\n// CmdlineSlice returns the command line arguments of the process as a slice with each\n// element being an argument.\nfunc (p *Process) CmdlineSlice() ([]string, error) {\n\treturn p.CmdlineSliceWithContext(context.Background())\n}\n\n// Cwd returns current working directory of the process.\nfunc (p *Process) Cwd() (string, error) {\n\treturn p.CwdWithContext(context.Background())\n}\n\n// Parent returns parent Process of the process.\nfunc (p *Process) Parent() (*Process, error) {\n\treturn p.ParentWithContext(context.Background())\n}\n\n// ParentWithContext returns parent Process of the process.\nfunc (p *Process) ParentWithContext(ctx context.Context) (*Process, error) {\n\tppid, err := p.PpidWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewProcessWithContext(ctx, ppid)\n}\n\n// Status returns the process status.\n// Return value could be one of these.\n// R: Running S: Sleep T: Stop I: Idle\n// Z: Zombie W: Wait L: Lock\n// The character is same within all supported platforms.\nfunc (p *Process) Status() ([]string, error) {\n\treturn p.StatusWithContext(context.Background())\n}\n\n// Foreground returns true if the process is in foreground, false otherwise.\nfunc (p *Process) Foreground() (bool, error) {\n\treturn p.ForegroundWithContext(context.Background())\n}\n\n// Uids returns user ids of the process as a slice of the int\nfunc (p *Process) Uids() ([]uint32, error) {\n\treturn p.UidsWithContext(context.Background())\n}\n\n// Gids returns group ids of the process as a slice of the int\nfunc (p *Process) Gids() ([]uint32, error) {\n\treturn p.GidsWithContext(context.Background())\n}\n\n// Terminal returns a terminal which is associated with the process.\nfunc (p *Process) Terminal() (string, error) {\n\treturn p.TerminalWithContext(context.Background())\n}\n\n// Nice returns a nice value (priority).\nfunc (p *Process) Nice() (int32, error) {\n\treturn p.NiceWithContext(context.Background())\n}\n\n// IOnice returns process I/O nice value (priority).\nfunc (p *Process) IOnice() (int32, error) {\n\treturn p.IOniceWithContext(context.Background())\n}\n\n// Rlimit returns Resource Limits.\nfunc (p *Process) Rlimit() ([]RlimitStat, error) {\n\treturn p.RlimitWithContext(context.Background())\n}\n\n// RlimitUsage returns Resource Limits.\n// If gatherUsed is true, the currently used value will be gathered and added\n// to the resulting RlimitStat.\nfunc (p *Process) RlimitUsage(gatherUsed bool) ([]RlimitStat, error) {\n\treturn p.RlimitUsageWithContext(context.Background(), gatherUsed)\n}\n\n// IOCounters returns IO Counters.\nfunc (p *Process) IOCounters() (*IOCountersStat, error) {\n\treturn p.IOCountersWithContext(context.Background())\n}\n\n// NumCtxSwitches returns the number of the context switches of the process.\nfunc (p *Process) NumCtxSwitches() (*NumCtxSwitchesStat, error) {\n\treturn p.NumCtxSwitchesWithContext(context.Background())\n}\n\n// NumFDs returns the number of File Descriptors used by the process.\nfunc (p *Process) NumFDs() (int32, error) {\n\treturn p.NumFDsWithContext(context.Background())\n}\n\n// NumThreads returns the number of threads used by the process.\nfunc (p *Process) NumThreads() (int32, error) {\n\treturn p.NumThreadsWithContext(context.Background())\n}\n\nfunc (p *Process) Threads() (map[int32]*cpu.TimesStat, error) {\n\treturn p.ThreadsWithContext(context.Background())\n}\n\n// Times returns CPU times of the process.\nfunc (p *Process) Times() (*cpu.TimesStat, error) {\n\treturn p.TimesWithContext(context.Background())\n}\n\n// CPUAffinity returns CPU affinity of the process.\nfunc (p *Process) CPUAffinity() ([]int32, error) {\n\treturn p.CPUAffinityWithContext(context.Background())\n}\n\n// MemoryInfo returns generic process memory information,\n// such as RSS and VMS.\nfunc (p *Process) MemoryInfo() (*MemoryInfoStat, error) {\n\treturn p.MemoryInfoWithContext(context.Background())\n}\n\n// MemoryInfoEx returns platform-specific process memory information.\nfunc (p *Process) MemoryInfoEx() (*MemoryInfoExStat, error) {\n\treturn p.MemoryInfoExWithContext(context.Background())\n}\n\n// PageFaults returns the process's page fault counters.\nfunc (p *Process) PageFaults() (*PageFaultsStat, error) {\n\treturn p.PageFaultsWithContext(context.Background())\n}\n\n// Children returns the children of the process represented as a slice\n// of pointers to Process type.\nfunc (p *Process) Children() ([]*Process, error) {\n\treturn p.ChildrenWithContext(context.Background())\n}\n\n// OpenFiles returns a slice of OpenFilesStat opend by the process.\n// OpenFilesStat includes a file path and file descriptor.\nfunc (p *Process) OpenFiles() ([]OpenFilesStat, error) {\n\treturn p.OpenFilesWithContext(context.Background())\n}\n\n// Connections returns a slice of net.ConnectionStat used by the process.\n// This returns all kind of the connection. This means TCP, UDP or UNIX.\nfunc (p *Process) Connections() ([]net.ConnectionStat, error) {\n\treturn p.ConnectionsWithContext(context.Background())\n}\n\n// ConnectionsMax returns a slice of net.ConnectionStat used by the process at most `max`.\nfunc (p *Process) ConnectionsMax(maxConn int) ([]net.ConnectionStat, error) {\n\treturn p.ConnectionsMaxWithContext(context.Background(), maxConn)\n}\n\n// MemoryMaps get memory maps from /proc/(pid)/smaps\nfunc (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) {\n\treturn p.MemoryMapsWithContext(context.Background(), grouped)\n}\n\n// Tgid returns thread group id of the process.\nfunc (p *Process) Tgid() (int32, error) {\n\treturn p.TgidWithContext(context.Background())\n}\n\n// SendSignal sends a unix.Signal to the process.\nfunc (p *Process) SendSignal(sig Signal) error {\n\treturn p.SendSignalWithContext(context.Background(), sig)\n}\n\n// Suspend sends SIGSTOP to the process.\nfunc (p *Process) Suspend() error {\n\treturn p.SuspendWithContext(context.Background())\n}\n\n// Resume sends SIGCONT to the process.\nfunc (p *Process) Resume() error {\n\treturn p.ResumeWithContext(context.Background())\n}\n\n// Terminate sends SIGTERM to the process.\nfunc (p *Process) Terminate() error {\n\treturn p.TerminateWithContext(context.Background())\n}\n\n// Kill sends SIGKILL to the process.\nfunc (p *Process) Kill() error {\n\treturn p.KillWithContext(context.Background())\n}\n\n// Username returns a username of the process.\nfunc (p *Process) Username() (string, error) {\n\treturn p.UsernameWithContext(context.Background())\n}\n\n// Environ returns the environment variables of the process.\nfunc (p *Process) Environ() ([]string, error) {\n\treturn p.EnvironWithContext(context.Background())\n}\n\n// convertStatusChar as reported by the ps command across different platforms.\nfunc convertStatusChar(letter string) string {\n\t// Sources\n\t// Darwin: http://www.mywebuniversity.com/Man_Pages/Darwin/man_ps.html\n\t// FreeBSD: https://www.freebsd.org/cgi/man.cgi?ps\n\t// Linux https://man7.org/linux/man-pages/man1/ps.1.html\n\t// OpenBSD: https://man.openbsd.org/ps.1#state\n\t// Solaris: https://github.com/collectd/collectd/blob/1da3305c10c8ff9a63081284cf3d4bb0f6daffd8/src/processes.c#L2115\n\tswitch letter {\n\tcase \"A\":\n\t\treturn Daemon\n\tcase \"D\", \"U\":\n\t\treturn Blocked\n\tcase \"E\":\n\t\treturn Detached\n\tcase \"I\":\n\t\treturn Idle\n\tcase \"L\":\n\t\treturn Lock\n\tcase \"O\":\n\t\treturn Orphan\n\tcase \"R\":\n\t\treturn Running\n\tcase \"S\":\n\t\treturn Sleep\n\tcase \"T\", \"t\":\n\t\t// \"t\" is used by Linux to signal stopped by the debugger during tracing\n\t\treturn Stop\n\tcase \"W\":\n\t\treturn Wait\n\tcase \"Y\":\n\t\treturn System\n\tcase \"Z\":\n\t\treturn Zombie\n\tdefault:\n\t\treturn UnknownState\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_bsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin || freebsd || openbsd\n\npackage process\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/binary\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\ntype MemoryInfoExStat struct{}\n\ntype MemoryMapsStat struct{}\n\nfunc (p *Process) TgidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOniceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitWithContext(ctx context.Context) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumCtxSwitchesWithContext(ctx context.Context) (*NumCtxSwitchesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumFDsWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) CPUAffinityWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoExWithContext(ctx context.Context) (*MemoryInfoExStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) PageFaultsWithContext(ctx context.Context) (*PageFaultsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ThreadsWithContext(ctx context.Context) (map[int32]*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc parseKinfoProc(buf []byte) (KinfoProc, error) {\n\tvar k KinfoProc\n\tbr := bytes.NewReader(buf)\n\terr := common.Read(br, binary.LittleEndian, &k)\n\treturn k, err\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_darwin.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin\n\npackage process\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n)\n\n// copied from sys/sysctl.h\nconst (\n\tCTLKern          = 1  // \"high kernel\": proc, limits\n\tKernProc         = 14 // struct: process entries\n\tKernProcPID      = 1  // by process id\n\tKernProcProc     = 8  // only return procs\n\tKernProcAll      = 0  // everything\n\tKernProcPathname = 12 // path to executable\n)\n\ntype _Ctype_struct___0 struct {\n\tPad uint64\n}\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\tvar ret []int32\n\n\tkprocs, err := unix.SysctlKinfoProcSlice(\"kern.proc.all\")\n\tif err != nil {\n\t\treturn ret, err\n\t}\n\n\tfor _, proc := range kprocs {\n\t\tret = append(ret, int32(proc.Proc.P_pid))\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn k.Eproc.Ppid, nil\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tname := common.ByteToString(k.Proc.P_comm[:])\n\n\tif len(name) >= 15 {\n\t\tcmdName, err := p.cmdNameWithContext(ctx)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif len(cmdName) > 0 {\n\t\t\textendedName := filepath.Base(cmdName)\n\t\t\tif strings.HasPrefix(extendedName, p.name) {\n\t\t\t\tname = extendedName\n\t\t\t}\n\t\t}\n\t}\n\n\treturn name, nil\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn k.Proc.P_starttime.Sec*1000 + int64(k.Proc.P_starttime.Usec)/1000, nil\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\tr, err := callPsWithContext(ctx, \"state\", p.Pid, false, false)\n\tif err != nil {\n\t\treturn []string{\"\"}, err\n\t}\n\tstatus := convertStatusChar(r[0][0][0:1])\n\treturn []string{status}, err\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\t// see https://github.com/shirou/gopsutil/issues/596#issuecomment-432707831 for implementation details\n\tpid := p.Pid\n\tout, err := invoke.CommandWithContext(ctx, \"ps\", \"-o\", \"stat=\", \"-p\", strconv.Itoa(int(pid)))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn strings.IndexByte(string(out), '+') != -1, nil\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// See: http://unix.superglobalmegacorp.com/Net2/newsrc/sys/ucred.h.html\n\tuserEffectiveUID := uint32(k.Eproc.Ucred.Uid)\n\n\treturn []uint32{userEffectiveUID}, nil\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgids := make([]uint32, 0, 3)\n\tgids = append(gids, uint32(k.Eproc.Pcred.P_rgid), uint32(k.Eproc.Pcred.P_rgid), uint32(k.Eproc.Pcred.P_svgid))\n\n\treturn gids, nil\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n\t// k, err := p.getKProc()\n\t// if err != nil {\n\t// \treturn nil, err\n\t// }\n\n\t// groups := make([]int32, k.Eproc.Ucred.Ngroups)\n\t// for i := int16(0); i < k.Eproc.Ucred.Ngroups; i++ {\n\t// \tgroups[i] = int32(k.Eproc.Ucred.Groups[i])\n\t// }\n\n\t// return groups, nil\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n\t/*\n\t\tk, err := p.getKProc()\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tttyNr := uint64(k.Eproc.Tdev)\n\t\ttermmap, err := getTerminalMap()\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\treturn termmap[ttyNr], nil\n\t*/\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(k.Proc.P_nice), nil\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\tprocs, err := ProcessesWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, nil\n\t}\n\tret := make([]*Process, 0, len(procs))\n\tfor _, proc := range procs {\n\t\tppid, err := proc.PpidWithContext(ctx)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif ppid == p.Pid {\n\t\t\tret = append(ret, proc)\n\t\t}\n\t}\n\tsort.Slice(ret, func(i, j int) bool { return ret[i].Pid < ret[j].Pid })\n\treturn ret, nil\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn net.ConnectionsPidWithContext(ctx, \"all\", p.Pid)\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn net.ConnectionsPidMaxWithContext(ctx, \"all\", p.Pid, maxConn)\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\tout := []*Process{}\n\n\tpids, err := PidsWithContext(ctx)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\n\tfor _, pid := range pids {\n\t\tp, err := NewProcessWithContext(ctx, pid)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, p)\n\t}\n\n\treturn out, nil\n}\n\n// Returns a proc as defined here:\n// http://unix.superglobalmegacorp.com/Net2/newsrc/sys/kinfo_proc.h.html\nfunc (p *Process) getKProc() (*unix.KinfoProc, error) {\n\treturn unix.SysctlKinfoProc(\"kern.proc.pid\", int(p.Pid))\n}\n\n// call ps command.\n// Return value deletes Header line(you must not input wrong arg).\n// And splited by Space. Caller have responsibility to manage.\n// If passed arg pid is 0, get information from all process.\nfunc callPsWithContext(ctx context.Context, arg string, pid int32, threadOption bool, nameOption bool) ([][]string, error) {\n\tvar cmd []string\n\tif pid == 0 { // will get from all processes.\n\t\tcmd = []string{\"-ax\", \"-o\", arg}\n\t} else if threadOption {\n\t\tcmd = []string{\"-x\", \"-o\", arg, \"-M\", \"-p\", strconv.Itoa(int(pid))}\n\t} else {\n\t\tcmd = []string{\"-x\", \"-o\", arg, \"-p\", strconv.Itoa(int(pid))}\n\t}\n\tif nameOption {\n\t\tcmd = append(cmd, \"-c\")\n\t}\n\tout, err := invoke.CommandWithContext(ctx, \"ps\", cmd...)\n\tif err != nil {\n\t\treturn [][]string{}, err\n\t}\n\tlines := strings.Split(string(out), \"\\n\")\n\n\tvar ret [][]string\n\tfor _, l := range lines[1:] {\n\t\tvar lr []string\n\t\tif nameOption {\n\t\t\tlr = append(lr, l)\n\t\t} else {\n\t\t\tfor _, r := range strings.Split(l, \" \") {\n\t\t\t\tif r == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tlr = append(lr, strings.TrimSpace(r))\n\t\t\t}\n\t\t}\n\t\tif len(lr) != 0 {\n\t\t\tret = append(ret, lr)\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n\nvar (\n\tprocPidPath      common.ProcPidPathFunc\n\tprocPidInfo      common.ProcPidInfoFunc\n\tmachTimeBaseInfo common.MachTimeBaseInfoFunc\n)\n\nfunc registerFuncs() (*common.Library, error) {\n\tlib, err := common.NewLibrary(common.System)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tprocPidPath = common.GetFunc[common.ProcPidPathFunc](lib, common.ProcPidPathSym)\n\tprocPidInfo = common.GetFunc[common.ProcPidInfoFunc](lib, common.ProcPidInfoSym)\n\tmachTimeBaseInfo = common.GetFunc[common.MachTimeBaseInfoFunc](lib, common.MachTimeBaseInfoSym)\n\n\treturn lib, nil\n}\n\nfunc getTimeScaleToNanoSeconds() float64 {\n\tvar timeBaseInfo common.MachTimeBaseInfo\n\n\tmachTimeBaseInfo(uintptr(unsafe.Pointer(&timeBaseInfo)))\n\n\treturn float64(timeBaseInfo.Numer) / float64(timeBaseInfo.Denom)\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\tlib, err := registerFuncs()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer lib.Close()\n\n\tbuf := common.NewCStr(common.PROC_PIDPATHINFO_MAXSIZE)\n\tret := procPidPath(p.Pid, buf.Addr(), common.PROC_PIDPATHINFO_MAXSIZE)\n\n\tif ret <= 0 {\n\t\treturn \"\", fmt.Errorf(\"unknown error: proc_pidpath returned %d\", ret)\n\t}\n\n\treturn buf.GoString(), nil\n}\n\n// sys/proc_info.h\ntype vnodePathInfo struct {\n\t_       [152]byte\n\tvipPath [common.MAXPATHLEN]byte\n\t_       [1176]byte\n}\n\n// CwdWithContext retrieves the Current Working Directory for the given process.\n// It uses the proc_pidinfo from libproc and will only work for processes the\n// EUID can access.  Otherwise \"operation not permitted\" will be returned as the\n// error.\n// Note: This might also work for other *BSD OSs.\nfunc (p *Process) CwdWithContext(ctx context.Context) (string, error) {\n\tlib, err := registerFuncs()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer lib.Close()\n\n\t// Lock OS thread to ensure the errno does not change\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n\n\tvar vpi vnodePathInfo\n\tconst vpiSize = int32(unsafe.Sizeof(vpi))\n\tret := procPidInfo(p.Pid, common.PROC_PIDVNODEPATHINFO, 0, uintptr(unsafe.Pointer(&vpi)), vpiSize)\n\terrno, _ := lib.Dlsym(\"errno\")\n\terr = *(**unix.Errno)(unsafe.Pointer(&errno))\n\tif err == unix.EPERM {\n\t\treturn \"\", ErrorNotPermitted\n\t}\n\n\tif ret <= 0 {\n\t\treturn \"\", fmt.Errorf(\"unknown error: proc_pidinfo returned %d\", ret)\n\t}\n\n\tif ret != vpiSize {\n\t\treturn \"\", fmt.Errorf(\"too few bytes; expected %d, got %d\", vpiSize, ret)\n\t}\n\treturn common.GoString(&vpi.vipPath[0]), nil\n}\n\nfunc procArgs(pid int32) ([]byte, int, error) {\n\tprocargs, _, err := common.CallSyscall([]int32{common.CTL_KERN, common.KERN_PROCARGS2, pid})\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\t// The first 4 bytes indicate the number of arguments.\n\tnargs := procargs[:4]\n\treturn procargs, int(binary.LittleEndian.Uint32(nargs)), nil\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\treturn p.cmdlineSliceWithContext(ctx, true)\n}\n\nfunc (p *Process) cmdlineSliceWithContext(ctx context.Context, fallback bool) ([]string, error) {\n\tpargs, nargs, err := procArgs(p.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// The first bytes hold the nargs int, skip it.\n\targs := bytes.Split((pargs)[unsafe.Sizeof(int(0)):], []byte{0})\n\tvar argStr string\n\t// The first element is the actual binary/command path.\n\t// command := args[0]\n\tvar argSlice []string\n\t// var envSlice []string\n\t// All other, non-zero elements are arguments. The first \"nargs\" elements\n\t// are the arguments. Everything else in the slice is then the environment\n\t// of the process.\n\tfor _, arg := range args[1:] {\n\t\targStr = string(arg[:])\n\t\tif len(argStr) > 0 {\n\t\t\tif nargs > 0 {\n\t\t\t\targSlice = append(argSlice, argStr)\n\t\t\t\tnargs--\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbreak\n\t\t\t// envSlice = append(envSlice, argStr)\n\t\t}\n\t}\n\treturn argSlice, err\n}\n\n// cmdNameWithContext returns the command name (including spaces) without any arguments\nfunc (p *Process) cmdNameWithContext(ctx context.Context) (string, error) {\n\tr, err := p.cmdlineSliceWithContext(ctx, false)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif len(r) == 0 {\n\t\treturn \"\", nil\n\t}\n\n\treturn r[0], err\n}\n\nfunc (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {\n\tr, err := p.CmdlineSliceWithContext(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.Join(r, \" \"), err\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\tlib, err := registerFuncs()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer lib.Close()\n\n\tvar ti ProcTaskInfo\n\tprocPidInfo(p.Pid, common.PROC_PIDTASKINFO, 0, uintptr(unsafe.Pointer(&ti)), int32(unsafe.Sizeof(ti)))\n\n\treturn int32(ti.Threadnum), nil\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\tlib, err := registerFuncs()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer lib.Close()\n\n\tvar ti ProcTaskInfo\n\tprocPidInfo(p.Pid, common.PROC_PIDTASKINFO, 0, uintptr(unsafe.Pointer(&ti)), int32(unsafe.Sizeof(ti)))\n\n\ttimescaleToNanoSeconds := getTimeScaleToNanoSeconds()\n\tret := &cpu.TimesStat{\n\t\tCPU:    \"cpu\",\n\t\tUser:   float64(ti.Total_user) * timescaleToNanoSeconds / 1e9,\n\t\tSystem: float64(ti.Total_system) * timescaleToNanoSeconds / 1e9,\n\t}\n\treturn ret, nil\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\tlib, err := registerFuncs()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer lib.Close()\n\n\tvar ti ProcTaskInfo\n\tprocPidInfo(p.Pid, common.PROC_PIDTASKINFO, 0, uintptr(unsafe.Pointer(&ti)), int32(unsafe.Sizeof(ti)))\n\n\tret := &MemoryInfoStat{\n\t\tRSS:  uint64(ti.Resident_size),\n\t\tVMS:  uint64(ti.Virtual_size),\n\t\tSwap: uint64(ti.Pageins),\n\t}\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_darwin_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_darwin.go\n\npackage process\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec       int64\n\tUsec      int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype UGid_t uint32\n\ntype KinfoProc struct {\n\tProc  ExternProc\n\tEproc Eproc\n}\n\ntype Eproc struct {\n\tPaddr     *uint64\n\tSess      *Session\n\tPcred     Upcred\n\tUcred     Uucred\n\tPad_cgo_0 [4]byte\n\tVm        Vmspace\n\tPpid      int32\n\tPgid      int32\n\tJobc      int16\n\tPad_cgo_1 [2]byte\n\tTdev      int32\n\tTpgid     int32\n\tPad_cgo_2 [4]byte\n\tTsess     *Session\n\tWmesg     [8]int8\n\tXsize     int32\n\tXrssize   int16\n\tXccount   int16\n\tXswrss    int16\n\tPad_cgo_3 [2]byte\n\tFlag      int32\n\tLogin     [12]int8\n\tSpare     [4]int32\n\tPad_cgo_4 [4]byte\n}\n\ntype Proc struct{}\n\ntype Session struct{}\n\ntype ucred struct {\n\tLink  _Ctype_struct___0\n\tRef   uint64\n\tPosix Posix_cred\n\tLabel *Label\n\tAudit Au_session\n}\n\ntype Uucred struct {\n\tRef       int32\n\tUID       uint32\n\tNgroups   int16\n\tPad_cgo_0 [2]byte\n\tGroups    [16]uint32\n}\n\ntype Upcred struct {\n\tPc_lock   [72]int8\n\tPc_ucred  *ucred\n\tP_ruid    uint32\n\tP_svuid   uint32\n\tP_rgid    uint32\n\tP_svgid   uint32\n\tP_refcnt  int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Vmspace struct {\n\tDummy     int32\n\tPad_cgo_0 [4]byte\n\tDummy2    *int8\n\tDummy3    [5]int32\n\tPad_cgo_1 [4]byte\n\tDummy4    [3]*int8\n}\n\ntype Sigacts struct{}\n\ntype ExternProc struct {\n\tP_un        [16]byte\n\tP_vmspace   uint64\n\tP_sigacts   uint64\n\tPad_cgo_0   [3]byte\n\tP_flag      int32\n\tP_stat      int8\n\tP_pid       int32\n\tP_oppid     int32\n\tP_dupfd     int32\n\tPad_cgo_1   [4]byte\n\tUser_stack  uint64\n\tExit_thread uint64\n\tP_debugger  int32\n\tSigwait     int32\n\tP_estcpu    uint32\n\tP_cpticks   int32\n\tP_pctcpu    uint32\n\tPad_cgo_2   [4]byte\n\tP_wchan     uint64\n\tP_wmesg     uint64\n\tP_swtime    uint32\n\tP_slptime   uint32\n\tP_realtimer Itimerval\n\tP_rtime     Timeval\n\tP_uticks    uint64\n\tP_sticks    uint64\n\tP_iticks    uint64\n\tP_traceflag int32\n\tPad_cgo_3   [4]byte\n\tP_tracep    uint64\n\tP_siglist   int32\n\tPad_cgo_4   [4]byte\n\tP_textvp    uint64\n\tP_holdcnt   int32\n\tP_sigmask   uint32\n\tP_sigignore uint32\n\tP_sigcatch  uint32\n\tP_priority  uint8\n\tP_usrpri    uint8\n\tP_nice      int8\n\tP_comm      [17]int8\n\tPad_cgo_5   [4]byte\n\tP_pgrp      uint64\n\tP_addr      uint64\n\tP_xstat     uint16\n\tP_acflag    uint16\n\tPad_cgo_6   [4]byte\n\tP_ru        uint64\n}\n\ntype Itimerval struct {\n\tInterval Timeval\n\tValue    Timeval\n}\n\ntype Vnode struct{}\n\ntype Pgrp struct{}\n\ntype UserStruct struct{}\n\ntype Au_session struct {\n\tAia_p *AuditinfoAddr\n\tMask  AuMask\n}\n\ntype Posix_cred struct {\n\tUID       uint32\n\tRuid      uint32\n\tSvuid     uint32\n\tNgroups   int16\n\tPad_cgo_0 [2]byte\n\tGroups    [16]uint32\n\tRgid      uint32\n\tSvgid     uint32\n\tGmuid     uint32\n\tFlags     int32\n}\n\ntype Label struct{}\n\ntype ProcTaskInfo struct {\n\tVirtual_size      uint64\n\tResident_size     uint64\n\tTotal_user        uint64\n\tTotal_system      uint64\n\tThreads_user      uint64\n\tThreads_system    uint64\n\tPolicy            int32\n\tFaults            int32\n\tPageins           int32\n\tCow_faults        int32\n\tMessages_sent     int32\n\tMessages_received int32\n\tSyscalls_mach     int32\n\tSyscalls_unix     int32\n\tCsw               int32\n\tThreadnum         int32\n\tNumrunning        int32\n\tPriority          int32\n}\n\ntype AuditinfoAddr struct {\n\tAuid   uint32\n\tMask   AuMask\n\tTermid AuTidAddr\n\tAsid   int32\n\tFlags  uint64\n}\n\ntype AuMask struct {\n\tSuccess uint32\n\tFailure uint32\n}\n\ntype AuTidAddr struct {\n\tPort int32\n\tType uint32\n\tAddr [4]uint32\n}\n\ntype UcredQueue struct {\n\tNext *ucred\n\tPrev **ucred\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_darwin_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build darwin && arm64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs process/types_darwin.go\n\npackage process\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec       int64\n\tUsec      int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype UGid_t uint32\n\ntype KinfoProc struct {\n\tProc  ExternProc\n\tEproc Eproc\n}\n\ntype Eproc struct {\n\tPaddr     *Proc\n\tSess      *Session\n\tPcred     Upcred\n\tUcred     Uucred\n\tVm        Vmspace\n\tPpid      int32\n\tPgid      int32\n\tJobc      int16\n\tTdev      int32\n\tTpgid     int32\n\tTsess     *Session\n\tWmesg     [8]int8\n\tXsize     int32\n\tXrssize   int16\n\tXccount   int16\n\tXswrss    int16\n\tFlag      int32\n\tLogin     [12]int8\n\tSpare     [4]int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Proc struct{}\n\ntype Session struct{}\n\ntype ucred struct{}\n\ntype Uucred struct {\n\tRef     int32\n\tUID     uint32\n\tNgroups int16\n\tGroups  [16]uint32\n}\n\ntype Upcred struct {\n\tPc_lock   [72]int8\n\tPc_ucred  *ucred\n\tP_ruid    uint32\n\tP_svuid   uint32\n\tP_rgid    uint32\n\tP_svgid   uint32\n\tP_refcnt  int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Vmspace struct {\n\tDummy  int32\n\tDummy2 *int8\n\tDummy3 [5]int32\n\tDummy4 [3]*int8\n}\n\ntype Sigacts struct{}\n\ntype ExternProc struct {\n\tP_un        [16]byte\n\tP_vmspace   uint64\n\tP_sigacts   uint64\n\tPad_cgo_0   [3]byte\n\tP_flag      int32\n\tP_stat      int8\n\tP_pid       int32\n\tP_oppid     int32\n\tP_dupfd     int32\n\tPad_cgo_1   [4]byte\n\tUser_stack  uint64\n\tExit_thread uint64\n\tP_debugger  int32\n\tSigwait     int32\n\tP_estcpu    uint32\n\tP_cpticks   int32\n\tP_pctcpu    uint32\n\tPad_cgo_2   [4]byte\n\tP_wchan     uint64\n\tP_wmesg     uint64\n\tP_swtime    uint32\n\tP_slptime   uint32\n\tP_realtimer Itimerval\n\tP_rtime     Timeval\n\tP_uticks    uint64\n\tP_sticks    uint64\n\tP_iticks    uint64\n\tP_traceflag int32\n\tPad_cgo_3   [4]byte\n\tP_tracep    uint64\n\tP_siglist   int32\n\tPad_cgo_4   [4]byte\n\tP_textvp    uint64\n\tP_holdcnt   int32\n\tP_sigmask   uint32\n\tP_sigignore uint32\n\tP_sigcatch  uint32\n\tP_priority  uint8\n\tP_usrpri    uint8\n\tP_nice      int8\n\tP_comm      [17]int8\n\tPad_cgo_5   [4]byte\n\tP_pgrp      uint64\n\tP_addr      uint64\n\tP_xstat     uint16\n\tP_acflag    uint16\n\tPad_cgo_6   [4]byte\n\tP_ru        uint64\n}\n\ntype Itimerval struct {\n\tInterval Timeval\n\tValue    Timeval\n}\n\ntype Vnode struct{}\n\ntype Pgrp struct{}\n\ntype UserStruct struct{}\n\ntype Au_session struct {\n\tAia_p *AuditinfoAddr\n\tMask  AuMask\n}\n\ntype Posix_cred struct{}\n\ntype Label struct{}\n\ntype ProcTaskInfo struct {\n\tVirtual_size      uint64\n\tResident_size     uint64\n\tTotal_user        uint64\n\tTotal_system      uint64\n\tThreads_user      uint64\n\tThreads_system    uint64\n\tPolicy            int32\n\tFaults            int32\n\tPageins           int32\n\tCow_faults        int32\n\tMessages_sent     int32\n\tMessages_received int32\n\tSyscalls_mach     int32\n\tSyscalls_unix     int32\n\tCsw               int32\n\tThreadnum         int32\n\tNumrunning        int32\n\tPriority          int32\n}\n\ntype AuditinfoAddr struct {\n\tAuid   uint32\n\tMask   AuMask\n\tTermid AuTidAddr\n\tAsid   int32\n\tFlags  uint64\n}\ntype AuMask struct {\n\tSuccess uint32\n\tFailure uint32\n}\ntype AuTidAddr struct {\n\tPort int32\n\tType uint32\n\tAddr [4]uint32\n}\n\ntype UcredQueue struct {\n\tNext *ucred\n\tPrev **ucred\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_fallback.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build !darwin && !linux && !freebsd && !openbsd && !windows && !solaris && !plan9\n\npackage process\n\nimport (\n\t\"context\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n)\n\ntype Signal = syscall.Signal\n\ntype MemoryMapsStat struct {\n\tPath         string `json:\"path\"`\n\tRss          uint64 `json:\"rss\"`\n\tSize         uint64 `json:\"size\"`\n\tPss          uint64 `json:\"pss\"`\n\tSharedClean  uint64 `json:\"sharedClean\"`\n\tSharedDirty  uint64 `json:\"sharedDirty\"`\n\tPrivateClean uint64 `json:\"privateClean\"`\n\tPrivateDirty uint64 `json:\"privateDirty\"`\n\tReferenced   uint64 `json:\"referenced\"`\n\tAnonymous    uint64 `json:\"anonymous\"`\n\tSwap         uint64 `json:\"swap\"`\n}\n\ntype MemoryInfoExStat struct{}\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc PidExistsWithContext(ctx context.Context, pid int32) (bool, error) {\n\treturn false, common.ErrNotImplementedError\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) TgidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) CwdWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\treturn []string{\"\"}, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\treturn false, common.ErrNotImplementedError\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOniceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitWithContext(ctx context.Context) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumCtxSwitchesWithContext(ctx context.Context) (*NumCtxSwitchesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumFDsWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ThreadsWithContext(ctx context.Context) (map[int32]*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) CPUAffinityWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoExWithContext(ctx context.Context) (*MemoryInfoExStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) PageFaultsWithContext(ctx context.Context) (*PageFaultsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) SendSignalWithContext(ctx context.Context, sig Signal) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) SuspendWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) ResumeWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) TerminateWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) KillWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) UsernameWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_freebsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build freebsd\n\npackage process\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n)\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\tvar ret []int32\n\tprocs, err := ProcessesWithContext(ctx)\n\tif err != nil {\n\t\treturn ret, nil\n\t}\n\n\tfor _, p := range procs {\n\t\tret = append(ret, p.Pid)\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn k.Ppid, nil\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tname := common.IntToString(k.Comm[:])\n\n\tif len(name) >= 15 {\n\t\tcmdlineSlice, err := p.CmdlineSliceWithContext(ctx)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif len(cmdlineSlice) > 0 {\n\t\t\textendedName := filepath.Base(cmdlineSlice[0])\n\t\t\tif strings.HasPrefix(extendedName, p.name) {\n\t\t\t\tname = extendedName\n\t\t\t}\n\t\t}\n\t}\n\n\treturn name, nil\n}\n\nfunc (p *Process) CwdWithContext(ctx context.Context) (string, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcCwd, p.Pid}\n\tbuf, length, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif length != sizeOfKinfoFile {\n\t\treturn \"\", errors.New(\"unexpected size of KinfoFile\")\n\t}\n\n\tvar k kinfoFile\n\tbr := bytes.NewReader(buf)\n\tif err := common.Read(br, binary.LittleEndian, &k); err != nil {\n\t\treturn \"\", err\n\t}\n\tcwd := common.IntToString(k.Path[:])\n\n\treturn cwd, nil\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcPathname, p.Pid}\n\tbuf, _, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn strings.Trim(string(buf), \"\\x00\"), nil\n}\n\nfunc (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcArgs, p.Pid}\n\tbuf, _, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tret := strings.FieldsFunc(string(buf), func(r rune) bool {\n\t\treturn r == '\\u0000'\n\t})\n\n\treturn strings.Join(ret, \" \"), nil\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcArgs, p.Pid}\n\tbuf, _, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(buf) == 0 {\n\t\treturn nil, nil\n\t}\n\tif buf[len(buf)-1] == 0 {\n\t\tbuf = buf[:len(buf)-1]\n\t}\n\tparts := bytes.Split(buf, []byte{0})\n\tvar strParts []string\n\tfor _, p := range parts {\n\t\tstrParts = append(strParts, string(p))\n\t}\n\n\treturn strParts, nil\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int64(k.Start.Sec)*1000 + int64(k.Start.Usec)/1000, nil\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn []string{\"\"}, err\n\t}\n\tvar s string\n\tswitch k.Stat {\n\tcase SIDL:\n\t\ts = Idle\n\tcase SRUN:\n\t\ts = Running\n\tcase SSLEEP:\n\t\ts = Sleep\n\tcase SSTOP:\n\t\ts = Stop\n\tcase SZOMB:\n\t\ts = Zombie\n\tcase SWAIT:\n\t\ts = Wait\n\tcase SLOCK:\n\t\ts = Lock\n\t}\n\n\treturn []string{s}, nil\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\t// see https://github.com/shirou/gopsutil/issues/596#issuecomment-432707831 for implementation details\n\tpid := p.Pid\n\tout, err := invoke.CommandWithContext(ctx, \"ps\", \"-o\", \"stat=\", \"-p\", strconv.Itoa(int(pid)))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn strings.IndexByte(string(out), '+') != -1, nil\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tuids := make([]uint32, 0, 3)\n\n\tuids = append(uids, uint32(k.Ruid), uint32(k.Uid), uint32(k.Svuid))\n\n\treturn uids, nil\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgids := make([]uint32, 0, 3)\n\tgids = append(gids, uint32(k.Rgid), uint32(k.Ngroups), uint32(k.Svgid))\n\n\treturn gids, nil\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgroups := make([]uint32, k.Ngroups)\n\tfor i := int16(0); i < k.Ngroups; i++ {\n\t\tgroups[i] = uint32(k.Groups[i])\n\t}\n\n\treturn groups, nil\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tttyNr := uint64(k.Tdev)\n\n\ttermmap, err := getTerminalMap()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn termmap[ttyNr], nil\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(k.Nice), nil\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &IOCountersStat{\n\t\tReadCount:  uint64(k.Rusage.Inblock),\n\t\tWriteCount: uint64(k.Rusage.Oublock),\n\t}, nil\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn k.Numthreads, nil\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &cpu.TimesStat{\n\t\tCPU:    \"cpu\",\n\t\tUser:   float64(k.Rusage.Utime.Sec) + float64(k.Rusage.Utime.Usec)/1000000,\n\t\tSystem: float64(k.Rusage.Stime.Sec) + float64(k.Rusage.Stime.Usec)/1000000,\n\t}, nil\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tv, err := unix.Sysctl(\"vm.stats.vm.v_page_size\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpageSize := common.LittleEndian.Uint16([]byte(v))\n\n\treturn &MemoryInfoStat{\n\t\tRSS: uint64(k.Rssize) * uint64(pageSize),\n\t\tVMS: uint64(k.Size),\n\t}, nil\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\tprocs, err := ProcessesWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, nil\n\t}\n\tret := make([]*Process, 0, len(procs))\n\tfor _, proc := range procs {\n\t\tppid, err := proc.PpidWithContext(ctx)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif ppid == p.Pid {\n\t\t\tret = append(ret, proc)\n\t\t}\n\t}\n\tsort.Slice(ret, func(i, j int) bool { return ret[i].Pid < ret[j].Pid })\n\treturn ret, nil\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn net.ConnectionsPidWithContext(ctx, \"all\", p.Pid)\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn net.ConnectionsPidMaxWithContext(ctx, \"all\", p.Pid, maxConn)\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\tresults := []*Process{}\n\n\tmib := []int32{CTLKern, KernProc, KernProcProc, 0}\n\tbuf, length, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn results, err\n\t}\n\n\t// get kinfo_proc size\n\tcount := int(length / uint64(sizeOfKinfoProc))\n\n\t// parse buf to procs\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*sizeOfKinfoProc : (i+1)*sizeOfKinfoProc]\n\t\tk, err := parseKinfoProc(b)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tp, err := NewProcessWithContext(ctx, int32(k.Pid))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tresults = append(results, p)\n\t}\n\n\treturn results, nil\n}\n\nfunc (p *Process) getKProc() (*KinfoProc, error) {\n\tmib := []int32{CTLKern, KernProc, KernProcPID, p.Pid}\n\n\tbuf, length, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif length != sizeOfKinfoProc {\n\t\treturn nil, errors.New(\"unexpected size of KinfoProc\")\n\t}\n\n\tk, err := parseKinfoProc(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &k, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_freebsd_386.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 14\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 7\n\tKernProcCwd      = 42\n)\n\nconst (\n\tsizeofPtr      = 0x4\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x4\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x488\n\tsizeOfKinfoProc    = 0x300\n\tsizeOfKinfoFile    = 0x570 // TODO: should be changed by running on the target machine\n)\n\nconst (\n\tSIDL   = 1\n\tSRUN   = 2\n\tSSLEEP = 3\n\tSSTOP  = 4\n\tSZOMB  = 5\n\tSWAIT  = 6\n\tSLOCK  = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype KinfoProc struct {\n\tStructsize   int32\n\tLayout       int32\n\tArgs         int32 /* pargs */\n\tPaddr        int32 /* proc */\n\tAddr         int32 /* user */\n\tTracep       int32 /* vnode */\n\tTextvp       int32 /* vnode */\n\tFd           int32 /* filedesc */\n\tVmspace      int32 /* vmspace */\n\tWchan        int32\n\tPid          int32\n\tPpid         int32\n\tPgid         int32\n\tTpgid        int32\n\tSid          int32\n\tTsid         int32\n\tJobc         int16\n\tSpare_short1 int16\n\tTdev         uint32\n\tSiglist      [16]byte /* sigset */\n\tSigmask      [16]byte /* sigset */\n\tSigignore    [16]byte /* sigset */\n\tSigcatch     [16]byte /* sigset */\n\tUid          uint32\n\tRuid         uint32\n\tSvuid        uint32\n\tRgid         uint32\n\tSvgid        uint32\n\tNgroups      int16\n\tSpare_short2 int16\n\tGroups       [16]uint32\n\tSize         uint32\n\tRssize       int32\n\tSwrss        int32\n\tTsize        int32\n\tDsize        int32\n\tSsize        int32\n\tXstat        uint16\n\tAcflag       uint16\n\tPctcpu       uint32\n\tEstcpu       uint32\n\tSlptime      uint32\n\tSwtime       uint32\n\tCow          uint32\n\tRuntime      uint64\n\tStart        Timeval\n\tChildtime    Timeval\n\tFlag         int32\n\tKiflag       int32\n\tTraceflag    int32\n\tStat         int8\n\tNice         int8\n\tLock         int8\n\tRqindex      int8\n\tOncpu        uint8\n\tLastcpu      uint8\n\tTdname       [17]int8\n\tWmesg        [9]int8\n\tLogin        [18]int8\n\tLockname     [9]int8\n\tComm         [20]int8\n\tEmul         [17]int8\n\tLoginclass   [18]int8\n\tSparestrings [50]int8\n\tSpareints    [7]int32\n\tFlag2        int32\n\tFibnum       int32\n\tCr_flags     uint32\n\tJid          int32\n\tNumthreads   int32\n\tTid          int32\n\tPri          Priority\n\tRusage       Rusage\n\tRusage_ch    Rusage\n\tPcb          int32 /* pcb */\n\tKstack       int32\n\tUdata        int32\n\tTdaddr       int32 /* thread */\n\tSpareptrs    [6]int32\n\tSparelongs   [12]int32\n\tSflag        int32\n\tTdflags      int32\n}\n\ntype Priority struct {\n\tClass  uint8\n\tLevel  uint8\n\tNative uint8\n\tUser   uint8\n}\n\ntype KinfoVmentry struct {\n\tStructsize       int32\n\tType             int32\n\tStart            uint64\n\tEnd              uint64\n\tOffset           uint64\n\tVn_fileid        uint64\n\tVn_fsid          uint32\n\tFlags            int32\n\tResident         int32\n\tPrivate_resident int32\n\tProtection       int32\n\tRef_count        int32\n\tShadow_count     int32\n\tVn_type          int32\n\tVn_size          uint64\n\tVn_rdev          uint32\n\tVn_mode          uint16\n\tStatus           uint16\n\tX_kve_ispare     [12]int32\n\tPath             [1024]int8\n}\n\n// TODO: should be changed by running on the target machine\ntype kinfoFile struct {\n\tStructsize     int32\n\tType           int32\n\tFd             int32\n\tRef_count      int32\n\tFlags          int32\n\tPad0           int32\n\tOffset         int64\n\tAnon0          [304]byte\n\tStatus         uint16\n\tPad1           uint16\n\tX_kf_ispare0   int32\n\tCap_rights     capRights\n\tX_kf_cap_spare uint64\n\tPath           [1024]int8 // changed from uint8 by hand\n}\n\n// TODO: should be changed by running on the target machine\ntype capRights struct {\n\tRights [2]uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_freebsd_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs types_freebsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 14\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 7\n\tKernProcCwd      = 42\n)\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x488\n\tsizeOfKinfoProc    = 0x440\n\tsizeOfKinfoFile    = 0x570\n)\n\nconst (\n\tSIDL   = 1\n\tSRUN   = 2\n\tSSLEEP = 3\n\tSSTOP  = 4\n\tSZOMB  = 5\n\tSWAIT  = 6\n\tSLOCK  = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype KinfoProc struct {\n\tStructsize     int32\n\tLayout         int32\n\tArgs           int64 /* pargs */\n\tPaddr          int64 /* proc */\n\tAddr           int64 /* user */\n\tTracep         int64 /* vnode */\n\tTextvp         int64 /* vnode */\n\tFd             int64 /* filedesc */\n\tVmspace        int64 /* vmspace */\n\tWchan          int64\n\tPid            int32\n\tPpid           int32\n\tPgid           int32\n\tTpgid          int32\n\tSid            int32\n\tTsid           int32\n\tJobc           int16\n\tSpare_short1   int16\n\tTdev_freebsd11 uint32\n\tSiglist        [16]byte /* sigset */\n\tSigmask        [16]byte /* sigset */\n\tSigignore      [16]byte /* sigset */\n\tSigcatch       [16]byte /* sigset */\n\tUid            uint32\n\tRuid           uint32\n\tSvuid          uint32\n\tRgid           uint32\n\tSvgid          uint32\n\tNgroups        int16\n\tSpare_short2   int16\n\tGroups         [16]uint32\n\tSize           uint64\n\tRssize         int64\n\tSwrss          int64\n\tTsize          int64\n\tDsize          int64\n\tSsize          int64\n\tXstat          uint16\n\tAcflag         uint16\n\tPctcpu         uint32\n\tEstcpu         uint32\n\tSlptime        uint32\n\tSwtime         uint32\n\tCow            uint32\n\tRuntime        uint64\n\tStart          Timeval\n\tChildtime      Timeval\n\tFlag           int64\n\tKiflag         int64\n\tTraceflag      int32\n\tStat           int8\n\tNice           int8\n\tLock           int8\n\tRqindex        int8\n\tOncpu_old      uint8\n\tLastcpu_old    uint8\n\tTdname         [17]int8\n\tWmesg          [9]int8\n\tLogin          [18]int8\n\tLockname       [9]int8\n\tComm           [20]int8\n\tEmul           [17]int8\n\tLoginclass     [18]int8\n\tMoretdname     [4]int8\n\tSparestrings   [46]int8\n\tSpareints      [2]int32\n\tTdev           uint64\n\tOncpu          int32\n\tLastcpu        int32\n\tTracer         int32\n\tFlag2          int32\n\tFibnum         int32\n\tCr_flags       uint32\n\tJid            int32\n\tNumthreads     int32\n\tTid            int32\n\tPri            Priority\n\tRusage         Rusage\n\tRusage_ch      Rusage\n\tPcb            int64 /* pcb */\n\tKstack         int64\n\tUdata          int64\n\tTdaddr         int64 /* thread */\n\tPd             int64 /* pwddesc, not accurate */\n\tSpareptrs      [5]int64\n\tSparelongs     [12]int64\n\tSflag          int64\n\tTdflags        int64\n}\n\ntype Priority struct {\n\tClass  uint8\n\tLevel  uint8\n\tNative uint8\n\tUser   uint8\n}\n\ntype KinfoVmentry struct {\n\tStructsize        int32\n\tType              int32\n\tStart             uint64\n\tEnd               uint64\n\tOffset            uint64\n\tVn_fileid         uint64\n\tVn_fsid_freebsd11 uint32\n\tFlags             int32\n\tResident          int32\n\tPrivate_resident  int32\n\tProtection        int32\n\tRef_count         int32\n\tShadow_count      int32\n\tVn_type           int32\n\tVn_size           uint64\n\tVn_rdev_freebsd11 uint32\n\tVn_mode           uint16\n\tStatus            uint16\n\tType_spec         [8]byte\n\tVn_rdev           uint64\n\tX_kve_ispare      [8]int32\n\tPath              [1024]int8\n}\n\ntype kinfoFile struct {\n\tStructsize     int32\n\tType           int32\n\tFd             int32\n\tRef_count      int32\n\tFlags          int32\n\tPad0           int32\n\tOffset         int64\n\tAnon0          [304]byte\n\tStatus         uint16\n\tPad1           uint16\n\tX_kf_ispare0   int32\n\tCap_rights     capRights\n\tX_kf_cap_spare uint64\n\tPath           [1024]int8\n}\n\ntype capRights struct {\n\tRights [2]uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_freebsd_arm.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 14\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 7\n\tKernProcCwd      = 42\n)\n\nconst (\n\tsizeofPtr      = 0x4\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x4\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x488\n\tsizeOfKinfoProc    = 0x440\n\tsizeOfKinfoFile    = 0x570 // TODO: should be changed by running on the target machine\n)\n\nconst (\n\tSIDL   = 1\n\tSRUN   = 2\n\tSSLEEP = 3\n\tSSTOP  = 4\n\tSZOMB  = 5\n\tSWAIT  = 6\n\tSLOCK  = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur int32\n\tMax int32\n}\n\ntype KinfoProc struct {\n\tStructsize   int32\n\tLayout       int32\n\tArgs         int32 /* pargs */\n\tPaddr        int32 /* proc */\n\tAddr         int32 /* user */\n\tTracep       int32 /* vnode */\n\tTextvp       int32 /* vnode */\n\tFd           int32 /* filedesc */\n\tVmspace      int32 /* vmspace */\n\tWchan        int32\n\tPid          int32\n\tPpid         int32\n\tPgid         int32\n\tTpgid        int32\n\tSid          int32\n\tTsid         int32\n\tJobc         int16\n\tSpare_short1 int16\n\tTdev         uint32\n\tSiglist      [16]byte /* sigset */\n\tSigmask      [16]byte /* sigset */\n\tSigignore    [16]byte /* sigset */\n\tSigcatch     [16]byte /* sigset */\n\tUid          uint32\n\tRuid         uint32\n\tSvuid        uint32\n\tRgid         uint32\n\tSvgid        uint32\n\tNgroups      int16\n\tSpare_short2 int16\n\tGroups       [16]uint32\n\tSize         uint32\n\tRssize       int32\n\tSwrss        int32\n\tTsize        int32\n\tDsize        int32\n\tSsize        int32\n\tXstat        uint16\n\tAcflag       uint16\n\tPctcpu       uint32\n\tEstcpu       uint32\n\tSlptime      uint32\n\tSwtime       uint32\n\tCow          uint32\n\tRuntime      uint64\n\tStart        Timeval\n\tChildtime    Timeval\n\tFlag         int32\n\tKiflag       int32\n\tTraceflag    int32\n\tStat         int8\n\tNice         int8\n\tLock         int8\n\tRqindex      int8\n\tOncpu        uint8\n\tLastcpu      uint8\n\tTdname       [17]int8\n\tWmesg        [9]int8\n\tLogin        [18]int8\n\tLockname     [9]int8\n\tComm         [20]int8\n\tEmul         [17]int8\n\tLoginclass   [18]int8\n\tSparestrings [50]int8\n\tSpareints    [4]int32\n\tFlag2        int32\n\tFibnum       int32\n\tCr_flags     uint32\n\tJid          int32\n\tNumthreads   int32\n\tTid          int32\n\tPri          Priority\n\tRusage       Rusage\n\tRusage_ch    Rusage\n\tPcb          int32 /* pcb */\n\tKstack       int32\n\tUdata        int32\n\tTdaddr       int32 /* thread */\n\tSpareptrs    [6]int64\n\tSparelongs   [12]int64\n\tSflag        int64\n\tTdflags      int64\n}\n\ntype Priority struct {\n\tClass  uint8\n\tLevel  uint8\n\tNative uint8\n\tUser   uint8\n}\n\ntype KinfoVmentry struct {\n\tStructsize       int32\n\tType             int32\n\tStart            uint64\n\tEnd              uint64\n\tOffset           uint64\n\tVn_fileid        uint64\n\tVn_fsid          uint32\n\tFlags            int32\n\tResident         int32\n\tPrivate_resident int32\n\tProtection       int32\n\tRef_count        int32\n\tShadow_count     int32\n\tVn_type          int32\n\tVn_size          uint64\n\tVn_rdev          uint32\n\tVn_mode          uint16\n\tStatus           uint16\n\tX_kve_ispare     [12]int32\n\tPath             [1024]int8\n}\n\n// TODO: should be changed by running on the target machine\ntype kinfoFile struct {\n\tStructsize     int32\n\tType           int32\n\tFd             int32\n\tRef_count      int32\n\tFlags          int32\n\tPad0           int32\n\tOffset         int64\n\tAnon0          [304]byte\n\tStatus         uint16\n\tPad1           uint16\n\tX_kf_ispare0   int32\n\tCap_rights     capRights\n\tX_kf_cap_spare uint64\n\tPath           [1024]int8 // changed from uint8 by hand\n}\n\n// TODO: should be changed by running on the target machine\ntype capRights struct {\n\tRights [2]uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_freebsd_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build freebsd && arm64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs types_freebsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 14\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 7\n\tKernProcCwd      = 42\n)\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x488\n\tsizeOfKinfoProc    = 0x440\n\tsizeOfKinfoFile    = 0x570\n)\n\nconst (\n\tSIDL   = 1\n\tSRUN   = 2\n\tSSLEEP = 3\n\tSSTOP  = 4\n\tSZOMB  = 5\n\tSWAIT  = 6\n\tSLOCK  = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype KinfoProc struct {\n\tStructsize     int32\n\tLayout         int32\n\tArgs           int64 /* pargs */\n\tPaddr          int64 /* proc */\n\tAddr           int64 /* user */\n\tTracep         int64 /* vnode */\n\tTextvp         int64 /* vnode */\n\tFd             int64 /* filedesc */\n\tVmspace        int64 /* vmspace */\n\tWchan          int64\n\tPid            int32\n\tPpid           int32\n\tPgid           int32\n\tTpgid          int32\n\tSid            int32\n\tTsid           int32\n\tJobc           int16\n\tSpare_short1   int16\n\tTdev_freebsd11 uint32\n\tSiglist        [16]byte /* sigset */\n\tSigmask        [16]byte /* sigset */\n\tSigignore      [16]byte /* sigset */\n\tSigcatch       [16]byte /* sigset */\n\tUid            uint32\n\tRuid           uint32\n\tSvuid          uint32\n\tRgid           uint32\n\tSvgid          uint32\n\tNgroups        int16\n\tSpare_short2   int16\n\tGroups         [16]uint32\n\tSize           uint64\n\tRssize         int64\n\tSwrss          int64\n\tTsize          int64\n\tDsize          int64\n\tSsize          int64\n\tXstat          uint16\n\tAcflag         uint16\n\tPctcpu         uint32\n\tEstcpu         uint32\n\tSlptime        uint32\n\tSwtime         uint32\n\tCow            uint32\n\tRuntime        uint64\n\tStart          Timeval\n\tChildtime      Timeval\n\tFlag           int64\n\tKiflag         int64\n\tTraceflag      int32\n\tStat           uint8\n\tNice           int8\n\tLock           uint8\n\tRqindex        uint8\n\tOncpu_old      uint8\n\tLastcpu_old    uint8\n\tTdname         [17]uint8\n\tWmesg          [9]uint8\n\tLogin          [18]uint8\n\tLockname       [9]uint8\n\tComm           [20]int8 // changed from uint8 by hand\n\tEmul           [17]uint8\n\tLoginclass     [18]uint8\n\tMoretdname     [4]uint8\n\tSparestrings   [46]uint8\n\tSpareints      [2]int32\n\tTdev           uint64\n\tOncpu          int32\n\tLastcpu        int32\n\tTracer         int32\n\tFlag2          int32\n\tFibnum         int32\n\tCr_flags       uint32\n\tJid            int32\n\tNumthreads     int32\n\tTid            int32\n\tPri            Priority\n\tRusage         Rusage\n\tRusage_ch      Rusage\n\tPcb            int64 /* pcb */\n\tKstack         int64\n\tUdata          int64\n\tTdaddr         int64 /* thread */\n\tPd             int64 /* pwddesc, not accurate */\n\tSpareptrs      [5]int64\n\tSparelongs     [12]int64\n\tSflag          int64\n\tTdflags        int64\n}\n\ntype Priority struct {\n\tClass  uint8\n\tLevel  uint8\n\tNative uint8\n\tUser   uint8\n}\n\ntype KinfoVmentry struct {\n\tStructsize        int32\n\tType              int32\n\tStart             uint64\n\tEnd               uint64\n\tOffset            uint64\n\tVn_fileid         uint64\n\tVn_fsid_freebsd11 uint32\n\tFlags             int32\n\tResident          int32\n\tPrivate_resident  int32\n\tProtection        int32\n\tRef_count         int32\n\tShadow_count      int32\n\tVn_type           int32\n\tVn_size           uint64\n\tVn_rdev_freebsd11 uint32\n\tVn_mode           uint16\n\tStatus            uint16\n\tType_spec         [8]byte\n\tVn_rdev           uint64\n\tX_kve_ispare      [8]int32\n\tPath              [1024]uint8\n}\n\ntype kinfoFile struct {\n\tStructsize     int32\n\tType           int32\n\tFd             int32\n\tRef_count      int32\n\tFlags          int32\n\tPad0           int32\n\tOffset         int64\n\tAnon0          [304]byte\n\tStatus         uint16\n\tPad1           uint16\n\tX_kf_ispare0   int32\n\tCap_rights     capRights\n\tX_kf_cap_spare uint64\n\tPath           [1024]int8 // changed from uint8 by hand\n}\n\ntype capRights struct {\n\tRights [2]uint64\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_linux.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux\n\npackage process\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/tklauser/go-sysconf\"\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n)\n\nvar pageSize = uint64(os.Getpagesize())\n\nconst prioProcess = 0 // linux/resource.h\n\nvar clockTicks = 100 // default value\n\nfunc init() {\n\tclkTck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\t// ignore errors\n\tif err == nil {\n\t\tclockTicks = int(clkTck)\n\t}\n}\n\n// MemoryInfoExStat is different between OSes\ntype MemoryInfoExStat struct {\n\tRSS    uint64 `json:\"rss\"`    // bytes\n\tVMS    uint64 `json:\"vms\"`    // bytes\n\tShared uint64 `json:\"shared\"` // bytes\n\tText   uint64 `json:\"text\"`   // bytes\n\tLib    uint64 `json:\"lib\"`    // bytes\n\tData   uint64 `json:\"data\"`   // bytes\n\tDirty  uint64 `json:\"dirty\"`  // bytes\n}\n\nfunc (m MemoryInfoExStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\ntype MemoryMapsStat struct {\n\tPath         string `json:\"path\"`\n\tRss          uint64 `json:\"rss\"`\n\tSize         uint64 `json:\"size\"`\n\tPss          uint64 `json:\"pss\"`\n\tSharedClean  uint64 `json:\"sharedClean\"`\n\tSharedDirty  uint64 `json:\"sharedDirty\"`\n\tPrivateClean uint64 `json:\"privateClean\"`\n\tPrivateDirty uint64 `json:\"privateDirty\"`\n\tReferenced   uint64 `json:\"referenced\"`\n\tAnonymous    uint64 `json:\"anonymous\"`\n\tSwap         uint64 `json:\"swap\"`\n}\n\n// String returns JSON value of the process.\nfunc (m MemoryMapsStat) String() string {\n\ts, _ := json.Marshal(m)\n\treturn string(s)\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\t_, ppid, _, _, _, _, _, err := p.fillFromStatWithContext(ctx)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\treturn ppid, nil\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\tif p.name == \"\" {\n\t\tif err := p.fillNameWithContext(ctx); err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn p.name, nil\n}\n\nfunc (p *Process) TgidWithContext(ctx context.Context) (int32, error) {\n\tif p.tgid == 0 {\n\t\tif err := p.fillFromStatusWithContext(ctx); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn p.tgid, nil\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\treturn p.fillFromExeWithContext(ctx)\n}\n\nfunc (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {\n\treturn p.fillFromCmdlineWithContext(ctx)\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\treturn p.fillSliceFromCmdlineWithContext(ctx)\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\t_, _, _, createTime, _, _, _, err := p.fillFromStatWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn createTime, nil\n}\n\nfunc (p *Process) CwdWithContext(ctx context.Context) (string, error) {\n\treturn p.fillFromCwdWithContext(ctx)\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\terr := p.fillFromStatusWithContext(ctx)\n\tif err != nil {\n\t\treturn []string{\"\"}, err\n\t}\n\treturn []string{p.status}, nil\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\t// see https://github.com/shirou/gopsutil/issues/596#issuecomment-432707831 for implementation details\n\tpid := p.Pid\n\tstatPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"stat\")\n\tcontents, err := os.ReadFile(statPath)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tfields := strings.Fields(string(contents))\n\tif len(fields) < 8 {\n\t\treturn false, fmt.Errorf(\"insufficient data in %s\", statPath)\n\t}\n\tpgid := fields[4]\n\ttpgid := fields[7]\n\treturn pgid == tpgid, nil\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\terr := p.fillFromStatusWithContext(ctx)\n\tif err != nil {\n\t\treturn []uint32{}, err\n\t}\n\treturn p.uids, nil\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\terr := p.fillFromStatusWithContext(ctx)\n\tif err != nil {\n\t\treturn []uint32{}, err\n\t}\n\treturn p.gids, nil\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\terr := p.fillFromStatusWithContext(ctx)\n\tif err != nil {\n\t\treturn []uint32{}, err\n\t}\n\treturn p.groups, nil\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\tt, _, _, _, _, _, _, err := p.fillFromStatWithContext(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\ttermmap, err := getTerminalMap()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tterminal := termmap[t]\n\treturn terminal, nil\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\t_, _, _, _, _, nice, _, err := p.fillFromStatWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn nice, nil\n}\n\nfunc (p *Process) IOniceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitWithContext(ctx context.Context) ([]RlimitStat, error) {\n\treturn p.RlimitUsageWithContext(ctx, false)\n}\n\nfunc (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ([]RlimitStat, error) {\n\trlimits, err := p.fillFromLimitsWithContext(ctx)\n\tif !gatherUsed || err != nil {\n\t\treturn rlimits, err\n\t}\n\n\t_, _, _, _, rtprio, nice, _, err := p.fillFromStatWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := p.fillFromStatusWithContext(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor i := range rlimits {\n\t\trs := &rlimits[i]\n\t\tswitch rs.Resource {\n\t\tcase RLIMIT_CPU:\n\t\t\ttimes, err := p.TimesWithContext(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\trs.Used = uint64(times.User + times.System)\n\t\tcase RLIMIT_DATA:\n\t\t\trs.Used = uint64(p.memInfo.Data)\n\t\tcase RLIMIT_STACK:\n\t\t\trs.Used = uint64(p.memInfo.Stack)\n\t\tcase RLIMIT_RSS:\n\t\t\trs.Used = uint64(p.memInfo.RSS)\n\t\tcase RLIMIT_NOFILE:\n\t\t\tn, err := p.NumFDsWithContext(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\trs.Used = uint64(n)\n\t\tcase RLIMIT_MEMLOCK:\n\t\t\trs.Used = uint64(p.memInfo.Locked)\n\t\tcase RLIMIT_AS:\n\t\t\trs.Used = uint64(p.memInfo.VMS)\n\t\tcase RLIMIT_LOCKS:\n\t\t\t// TODO we can get the used value from /proc/$pid/locks. But linux doesn't enforce it, so not a high priority.\n\t\tcase RLIMIT_SIGPENDING:\n\t\t\trs.Used = p.sigInfo.PendingProcess\n\t\tcase RLIMIT_NICE:\n\t\t\t// The rlimit for nice is a little unusual, in that 0 means the niceness cannot be decreased beyond the current value, but it can be increased.\n\t\t\t// So effectively: if rs.Soft == 0 { rs.Soft = rs.Used }\n\t\t\trs.Used = uint64(nice)\n\t\tcase RLIMIT_RTPRIO:\n\t\t\trs.Used = uint64(rtprio)\n\t\t}\n\t}\n\n\treturn rlimits, err\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\treturn p.fillFromIOWithContext(ctx)\n}\n\nfunc (p *Process) NumCtxSwitchesWithContext(ctx context.Context) (*NumCtxSwitchesStat, error) {\n\terr := p.fillFromStatusWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p.numCtxSwitches, nil\n}\n\nfunc (p *Process) NumFDsWithContext(ctx context.Context) (int32, error) {\n\t_, fnames, err := p.fillFromfdListWithContext(ctx)\n\treturn int32(len(fnames)), err\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\terr := p.fillFromStatusWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn p.numThreads, nil\n}\n\nfunc (p *Process) ThreadsWithContext(ctx context.Context) (map[int32]*cpu.TimesStat, error) {\n\tret := make(map[int32]*cpu.TimesStat)\n\ttaskPath := common.HostProcWithContext(ctx, strconv.Itoa(int(p.Pid)), \"task\")\n\n\ttids, err := readPidsFromDir(taskPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, tid := range tids {\n\t\t_, _, cpuTimes, _, _, _, _, err := p.fillFromTIDStatWithContext(ctx, tid)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tret[tid] = cpuTimes\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\t_, _, cpuTimes, _, _, _, _, err := p.fillFromStatWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn cpuTimes, nil\n}\n\nfunc (p *Process) CPUAffinityWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\tmeminfo, _, err := p.fillFromStatmWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn meminfo, nil\n}\n\nfunc (p *Process) MemoryInfoExWithContext(ctx context.Context) (*MemoryInfoExStat, error) {\n\t_, memInfoEx, err := p.fillFromStatmWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn memInfoEx, nil\n}\n\nfunc (p *Process) PageFaultsWithContext(ctx context.Context) (*PageFaultsStat, error) {\n\t_, _, _, _, _, _, pageFaults, err := p.fillFromStatWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn pageFaults, nil\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\tstatFiles, err := filepath.Glob(common.HostProcWithContext(ctx, \"[0-9]*/stat\"))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make([]*Process, 0, len(statFiles))\n\tfor _, statFile := range statFiles {\n\t\tstatContents, err := os.ReadFile(statFile)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tfields := splitProcStat(statContents)\n\t\tpid, err := strconv.ParseInt(fields[1], 10, 32)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tppid, err := strconv.ParseInt(fields[4], 10, 32)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif int32(ppid) == p.Pid {\n\t\t\tnp, err := NewProcessWithContext(ctx, int32(pid))\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tret = append(ret, np)\n\t\t}\n\t}\n\tsort.Slice(ret, func(i, j int) bool { return ret[i].Pid < ret[j].Pid })\n\treturn ret, nil\n}\n\nfunc (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, error) {\n\t_, ofs, err := p.fillFromfdWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make([]OpenFilesStat, len(ofs))\n\tfor i, o := range ofs {\n\t\tret[i] = *o\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn net.ConnectionsPidWithContext(ctx, \"all\", p.Pid)\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn net.ConnectionsPidMaxWithContext(ctx, \"all\", p.Pid, maxConn)\n}\n\nfunc (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {\n\tpid := p.Pid\n\tvar ret []MemoryMapsStat\n\tsmapsPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"smaps\")\n\tif grouped {\n\t\tret = make([]MemoryMapsStat, 1)\n\t\t// If smaps_rollup exists (require kernel >= 4.15), then we will use it\n\t\t// for pre-summed memory information for a process.\n\t\tsmapsRollupPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"smaps_rollup\")\n\t\tif _, err := os.Stat(smapsRollupPath); !os.IsNotExist(err) {\n\t\t\tsmapsPath = smapsRollupPath\n\t\t}\n\t}\n\tcontents, err := os.ReadFile(smapsPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlines := strings.Split(string(contents), \"\\n\")\n\n\t// function of parsing a block\n\tgetBlock := func(firstLine []string, block []string) (MemoryMapsStat, error) {\n\t\tm := MemoryMapsStat{}\n\t\tif len(firstLine) >= 6 {\n\t\t\tm.Path = strings.Join(firstLine[5:], \" \")\n\t\t}\n\n\t\tfor _, line := range block {\n\t\t\tif strings.Contains(line, \"VmFlags\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfield := strings.Split(line, \":\")\n\t\t\tif len(field) < 2 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tv := strings.Trim(field[1], \"kB\") // remove last \"kB\"\n\t\t\tv = strings.TrimSpace(v)\n\t\t\tt, err := strconv.ParseUint(v, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn m, err\n\t\t\t}\n\n\t\t\tswitch field[0] {\n\t\t\tcase \"Size\":\n\t\t\t\tm.Size = t\n\t\t\tcase \"Rss\":\n\t\t\t\tm.Rss = t\n\t\t\tcase \"Pss\":\n\t\t\t\tm.Pss = t\n\t\t\tcase \"Shared_Clean\":\n\t\t\t\tm.SharedClean = t\n\t\t\tcase \"Shared_Dirty\":\n\t\t\t\tm.SharedDirty = t\n\t\t\tcase \"Private_Clean\":\n\t\t\t\tm.PrivateClean = t\n\t\t\tcase \"Private_Dirty\":\n\t\t\t\tm.PrivateDirty = t\n\t\t\tcase \"Referenced\":\n\t\t\t\tm.Referenced = t\n\t\t\tcase \"Anonymous\":\n\t\t\t\tm.Anonymous = t\n\t\t\tcase \"Swap\":\n\t\t\t\tm.Swap = t\n\t\t\t}\n\t\t}\n\t\treturn m, nil\n\t}\n\n\tvar firstLine []string\n\tblocks := make([]string, 0, 16)\n\n\tfor i, line := range lines {\n\t\tfields := strings.Fields(line)\n\t\tif (len(fields) > 0 && !strings.HasSuffix(fields[0], \":\")) || i == len(lines)-1 {\n\t\t\t// new block section\n\t\t\tif len(firstLine) > 0 && len(blocks) > 0 {\n\t\t\t\tg, err := getBlock(firstLine, blocks)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn &ret, err\n\t\t\t\t}\n\t\t\t\tif grouped {\n\t\t\t\t\tret[0].Size += g.Size\n\t\t\t\t\tret[0].Rss += g.Rss\n\t\t\t\t\tret[0].Pss += g.Pss\n\t\t\t\t\tret[0].SharedClean += g.SharedClean\n\t\t\t\t\tret[0].SharedDirty += g.SharedDirty\n\t\t\t\t\tret[0].PrivateClean += g.PrivateClean\n\t\t\t\t\tret[0].PrivateDirty += g.PrivateDirty\n\t\t\t\t\tret[0].Referenced += g.Referenced\n\t\t\t\t\tret[0].Anonymous += g.Anonymous\n\t\t\t\t\tret[0].Swap += g.Swap\n\t\t\t\t} else {\n\t\t\t\t\tret = append(ret, g)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// starts new block\n\t\t\tblocks = make([]string, 0, 16)\n\t\t\tfirstLine = fields\n\t\t} else {\n\t\t\tblocks = append(blocks, line)\n\t\t}\n\t}\n\n\treturn &ret, nil\n}\n\nfunc (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) {\n\tenvironPath := common.HostProcWithContext(ctx, strconv.Itoa(int(p.Pid)), \"environ\")\n\n\tenvironContent, err := os.ReadFile(environPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn strings.Split(string(environContent), \"\\000\"), nil\n}\n\n/**\n** Internal functions\n**/\n\nfunc limitToUint(val string) (uint64, error) {\n\tif val == \"unlimited\" {\n\t\treturn math.MaxUint64, nil\n\t}\n\tres, err := strconv.ParseUint(val, 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn res, nil\n}\n\n// Get num_fds from /proc/(pid)/limits\nfunc (p *Process) fillFromLimitsWithContext(ctx context.Context) ([]RlimitStat, error) {\n\tpid := p.Pid\n\tlimitsFile := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"limits\")\n\td, err := os.Open(limitsFile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tvar limitStats []RlimitStat\n\n\tlimitsScanner := bufio.NewScanner(d)\n\tfor limitsScanner.Scan() {\n\t\tvar statItem RlimitStat\n\n\t\tstr := strings.Fields(limitsScanner.Text())\n\n\t\t// Remove the header line\n\t\tif strings.Contains(str[len(str)-1], \"Units\") {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Assert that last item is a Hard limit\n\t\tstatItem.Hard, err = limitToUint(str[len(str)-1])\n\t\tif err != nil {\n\t\t\t// On error remove last item and try once again since it can be unit or header line\n\t\t\tstr = str[:len(str)-1]\n\t\t\tstatItem.Hard, err = limitToUint(str[len(str)-1])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\t// Remove last item from string\n\t\tstr = str[:len(str)-1]\n\n\t\t// Now last item is a Soft limit\n\t\tstatItem.Soft, err = limitToUint(str[len(str)-1])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// Remove last item from string\n\t\tstr = str[:len(str)-1]\n\n\t\t// The rest is a stats name\n\t\tresourceName := strings.Join(str, \" \")\n\t\tswitch resourceName {\n\t\tcase \"Max cpu time\":\n\t\t\tstatItem.Resource = RLIMIT_CPU\n\t\tcase \"Max file size\":\n\t\t\tstatItem.Resource = RLIMIT_FSIZE\n\t\tcase \"Max data size\":\n\t\t\tstatItem.Resource = RLIMIT_DATA\n\t\tcase \"Max stack size\":\n\t\t\tstatItem.Resource = RLIMIT_STACK\n\t\tcase \"Max core file size\":\n\t\t\tstatItem.Resource = RLIMIT_CORE\n\t\tcase \"Max resident set\":\n\t\t\tstatItem.Resource = RLIMIT_RSS\n\t\tcase \"Max processes\":\n\t\t\tstatItem.Resource = RLIMIT_NPROC\n\t\tcase \"Max open files\":\n\t\t\tstatItem.Resource = RLIMIT_NOFILE\n\t\tcase \"Max locked memory\":\n\t\t\tstatItem.Resource = RLIMIT_MEMLOCK\n\t\tcase \"Max address space\":\n\t\t\tstatItem.Resource = RLIMIT_AS\n\t\tcase \"Max file locks\":\n\t\t\tstatItem.Resource = RLIMIT_LOCKS\n\t\tcase \"Max pending signals\":\n\t\t\tstatItem.Resource = RLIMIT_SIGPENDING\n\t\tcase \"Max msgqueue size\":\n\t\t\tstatItem.Resource = RLIMIT_MSGQUEUE\n\t\tcase \"Max nice priority\":\n\t\t\tstatItem.Resource = RLIMIT_NICE\n\t\tcase \"Max realtime priority\":\n\t\t\tstatItem.Resource = RLIMIT_RTPRIO\n\t\tcase \"Max realtime timeout\":\n\t\t\tstatItem.Resource = RLIMIT_RTTIME\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\tlimitStats = append(limitStats, statItem)\n\t}\n\n\tif err := limitsScanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn limitStats, nil\n}\n\n// Get list of /proc/(pid)/fd files\nfunc (p *Process) fillFromfdListWithContext(ctx context.Context) (string, []string, error) {\n\tpid := p.Pid\n\tstatPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"fd\")\n\td, err := os.Open(statPath)\n\tif err != nil {\n\t\treturn statPath, []string{}, err\n\t}\n\tdefer d.Close()\n\tfnames, err := d.Readdirnames(-1)\n\treturn statPath, fnames, err\n}\n\n// Get num_fds from /proc/(pid)/fd\nfunc (p *Process) fillFromfdWithContext(ctx context.Context) (int32, []*OpenFilesStat, error) {\n\tstatPath, fnames, err := p.fillFromfdListWithContext(ctx)\n\tif err != nil {\n\t\treturn 0, nil, err\n\t}\n\tnumFDs := int32(len(fnames))\n\n\tvar openfiles []*OpenFilesStat\n\tfor _, fd := range fnames {\n\t\tfpath := filepath.Join(statPath, fd)\n\t\tfilepath, err := os.Readlink(fpath)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tt, err := strconv.ParseUint(fd, 10, 64)\n\t\tif err != nil {\n\t\t\treturn numFDs, openfiles, err\n\t\t}\n\t\to := &OpenFilesStat{\n\t\t\tPath: filepath,\n\t\t\tFd:   t,\n\t\t}\n\t\topenfiles = append(openfiles, o)\n\t}\n\n\treturn numFDs, openfiles, nil\n}\n\n// Get cwd from /proc/(pid)/cwd\nfunc (p *Process) fillFromCwdWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\tcwdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"cwd\")\n\tcwd, err := os.Readlink(cwdPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(cwd), nil\n}\n\n// Get exe from /proc/(pid)/exe\nfunc (p *Process) fillFromExeWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\texePath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"exe\")\n\texe, err := os.Readlink(exePath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(exe), nil\n}\n\n// Get cmdline from /proc/(pid)/cmdline\nfunc (p *Process) fillFromCmdlineWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\tcmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"cmdline\")\n\tcmdline, err := os.ReadFile(cmdPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tret := strings.FieldsFunc(string(cmdline), func(r rune) bool {\n\t\treturn r == '\\u0000'\n\t})\n\n\treturn strings.Join(ret, \" \"), nil\n}\n\nfunc (p *Process) fillSliceFromCmdlineWithContext(ctx context.Context) ([]string, error) {\n\tpid := p.Pid\n\tcmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"cmdline\")\n\tcmdline, err := os.ReadFile(cmdPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(cmdline) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tcmdline = bytes.TrimRight(cmdline, \"\\x00\")\n\n\tparts := bytes.Split(cmdline, []byte{0})\n\tvar strParts []string\n\tfor _, p := range parts {\n\t\tstrParts = append(strParts, string(p))\n\t}\n\n\treturn strParts, nil\n}\n\n// Get IO status from /proc/(pid)/io\nfunc (p *Process) fillFromIOWithContext(ctx context.Context) (*IOCountersStat, error) {\n\tpid := p.Pid\n\tioPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"io\")\n\tioline, err := os.ReadFile(ioPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlines := strings.Split(string(ioline), \"\\n\")\n\tret := &IOCountersStat{}\n\n\tfor _, line := range lines {\n\t\tfield := strings.Fields(line)\n\t\tif len(field) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tt, err := strconv.ParseUint(field[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparam := strings.TrimSuffix(field[0], \":\")\n\t\tswitch param {\n\t\tcase \"syscr\":\n\t\t\tret.ReadCount = t\n\t\tcase \"syscw\":\n\t\t\tret.WriteCount = t\n\t\tcase \"read_bytes\":\n\t\t\tret.DiskReadBytes = t\n\t\tcase \"write_bytes\":\n\t\t\tret.DiskWriteBytes = t\n\t\tcase \"rchar\":\n\t\t\tret.ReadBytes = t\n\t\tcase \"wchar\":\n\t\t\tret.WriteBytes = t\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n\n// Get memory info from /proc/(pid)/statm\nfunc (p *Process) fillFromStatmWithContext(ctx context.Context) (*MemoryInfoStat, *MemoryInfoExStat, error) {\n\tpid := p.Pid\n\tmemPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"statm\")\n\tcontents, err := os.ReadFile(memPath)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tfields := strings.Split(string(contents), \" \")\n\n\tvms, err := strconv.ParseUint(fields[0], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\trss, err := strconv.ParseUint(fields[1], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tmemInfo := &MemoryInfoStat{\n\t\tRSS: rss * pageSize,\n\t\tVMS: vms * pageSize,\n\t}\n\n\tshared, err := strconv.ParseUint(fields[2], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\ttext, err := strconv.ParseUint(fields[3], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tlib, err := strconv.ParseUint(fields[4], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdirty, err := strconv.ParseUint(fields[5], 10, 64)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tmemInfoEx := &MemoryInfoExStat{\n\t\tRSS:    rss * pageSize,\n\t\tVMS:    vms * pageSize,\n\t\tShared: shared * pageSize,\n\t\tText:   text * pageSize,\n\t\tLib:    lib * pageSize,\n\t\tDirty:  dirty * pageSize,\n\t}\n\n\treturn memInfo, memInfoEx, nil\n}\n\n// Get name from /proc/(pid)/comm or /proc/(pid)/status\nfunc (p *Process) fillNameWithContext(ctx context.Context) error {\n\terr := p.fillFromCommWithContext(ctx)\n\tif err == nil && p.name != \"\" && len(p.name) < 15 {\n\t\treturn nil\n\t}\n\treturn p.fillFromStatusWithContext(ctx)\n}\n\n// Get name from /proc/(pid)/comm\nfunc (p *Process) fillFromCommWithContext(ctx context.Context) error {\n\tpid := p.Pid\n\tstatPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"comm\")\n\tcontents, err := os.ReadFile(statPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp.name = strings.TrimSuffix(string(contents), \"\\n\")\n\treturn nil\n}\n\n// Get various status from /proc/(pid)/status\nfunc (p *Process) fillFromStatus() error {\n\treturn p.fillFromStatusWithContext(context.Background())\n}\n\nfunc (p *Process) fillFromStatusWithContext(ctx context.Context) error {\n\tpid := p.Pid\n\tstatPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"status\")\n\tcontents, err := os.ReadFile(statPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\tlines := strings.Split(string(contents), \"\\n\")\n\tp.numCtxSwitches = &NumCtxSwitchesStat{}\n\tp.memInfo = &MemoryInfoStat{}\n\tp.sigInfo = &SignalInfoStat{}\n\tfor _, line := range lines {\n\t\ttabParts := strings.SplitN(line, \"\\t\", 2)\n\t\tif len(tabParts) < 2 {\n\t\t\tcontinue\n\t\t}\n\t\tvalue := tabParts[1]\n\t\tswitch strings.TrimRight(tabParts[0], \":\") {\n\t\tcase \"Name\":\n\t\t\tp.name = strings.Trim(value, \" \\t\")\n\t\t\tif len(p.name) >= 15 {\n\t\t\t\tcmdlineSlice, err := p.CmdlineSliceWithContext(ctx)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif len(cmdlineSlice) > 0 {\n\t\t\t\t\textendedName := filepath.Base(cmdlineSlice[0])\n\t\t\t\t\tif strings.HasPrefix(extendedName, p.name) {\n\t\t\t\t\t\tp.name = extendedName\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Ensure we have a copy and not reference into slice\n\t\t\tp.name = string([]byte(p.name))\n\t\tcase \"State\":\n\t\t\tp.status = convertStatusChar(value[0:1])\n\t\t\t// Ensure we have a copy and not reference into slice\n\t\t\tp.status = string([]byte(p.status))\n\t\tcase \"PPid\", \"Ppid\":\n\t\t\tpval, err := strconv.ParseInt(value, 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.parent = int32(pval)\n\t\tcase \"Tgid\":\n\t\t\tpval, err := strconv.ParseInt(value, 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.tgid = int32(pval)\n\t\tcase \"Uid\":\n\t\t\tp.uids = make([]uint32, 0, 4)\n\t\t\tfor _, i := range strings.Split(value, \"\\t\") {\n\t\t\t\tv, err := strconv.ParseInt(i, 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tp.uids = append(p.uids, uint32(v))\n\t\t\t}\n\t\tcase \"Gid\":\n\t\t\tp.gids = make([]uint32, 0, 4)\n\t\t\tfor _, i := range strings.Split(value, \"\\t\") {\n\t\t\t\tv, err := strconv.ParseInt(i, 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tp.gids = append(p.gids, uint32(v))\n\t\t\t}\n\t\tcase \"Groups\":\n\t\t\tgroups := strings.Fields(value)\n\t\t\tp.groups = make([]uint32, 0, len(groups))\n\t\t\tfor _, i := range groups {\n\t\t\t\tv, err := strconv.ParseUint(i, 10, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tp.groups = append(p.groups, uint32(v))\n\t\t\t}\n\t\tcase \"Threads\":\n\t\t\tv, err := strconv.ParseInt(value, 10, 32)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.numThreads = int32(v)\n\t\tcase \"voluntary_ctxt_switches\":\n\t\t\tv, err := strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.numCtxSwitches.Voluntary = v\n\t\tcase \"nonvoluntary_ctxt_switches\":\n\t\t\tv, err := strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.numCtxSwitches.Involuntary = v\n\t\tcase \"VmRSS\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.RSS = v * 1024\n\t\tcase \"VmSize\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.VMS = v * 1024\n\t\tcase \"VmSwap\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.Swap = v * 1024\n\t\tcase \"VmHWM\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.HWM = v * 1024\n\t\tcase \"VmData\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.Data = v * 1024\n\t\tcase \"VmStk\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.Stack = v * 1024\n\t\tcase \"VmLck\":\n\t\t\tvalue := strings.Trim(value, \" kB\") // remove last \"kB\"\n\t\t\tv, err := strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.memInfo.Locked = v * 1024\n\t\tcase \"SigPnd\":\n\t\t\tif len(value) > 16 {\n\t\t\t\tvalue = value[len(value)-16:]\n\t\t\t}\n\t\t\tv, err := strconv.ParseUint(value, 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.sigInfo.PendingThread = v\n\t\tcase \"ShdPnd\":\n\t\t\tif len(value) > 16 {\n\t\t\t\tvalue = value[len(value)-16:]\n\t\t\t}\n\t\t\tv, err := strconv.ParseUint(value, 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.sigInfo.PendingProcess = v\n\t\tcase \"SigBlk\":\n\t\t\tif len(value) > 16 {\n\t\t\t\tvalue = value[len(value)-16:]\n\t\t\t}\n\t\t\tv, err := strconv.ParseUint(value, 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.sigInfo.Blocked = v\n\t\tcase \"SigIgn\":\n\t\t\tif len(value) > 16 {\n\t\t\t\tvalue = value[len(value)-16:]\n\t\t\t}\n\t\t\tv, err := strconv.ParseUint(value, 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.sigInfo.Ignored = v\n\t\tcase \"SigCgt\":\n\t\t\tif len(value) > 16 {\n\t\t\t\tvalue = value[len(value)-16:]\n\t\t\t}\n\t\t\tv, err := strconv.ParseUint(value, 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.sigInfo.Caught = v\n\t\t}\n\n\t}\n\treturn nil\n}\n\nfunc (p *Process) fillFromTIDStat(tid int32) (uint64, int32, *cpu.TimesStat, int64, uint32, int32, *PageFaultsStat, error) {\n\treturn p.fillFromTIDStatWithContext(context.Background(), tid)\n}\n\nfunc (p *Process) fillFromTIDStatWithContext(ctx context.Context, tid int32) (uint64, int32, *cpu.TimesStat, int64, uint32, int32, *PageFaultsStat, error) {\n\tpid := p.Pid\n\tvar statPath string\n\n\tif tid == -1 {\n\t\tstatPath = common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"stat\")\n\t} else {\n\t\tstatPath = common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"task\", strconv.Itoa(int(tid)), \"stat\")\n\t}\n\n\tcontents, err := os.ReadFile(statPath)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\t// Indexing from one, as described in `man proc` about the file /proc/[pid]/stat\n\tfields := splitProcStat(contents)\n\n\tterminal, err := strconv.ParseUint(fields[7], 10, 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\n\tppid, err := strconv.ParseInt(fields[4], 10, 32)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\tutime, err := strconv.ParseFloat(fields[14], 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\n\tstime, err := strconv.ParseFloat(fields[15], 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\n\t// There is no such thing as iotime in stat file.  As an approximation, we\n\t// will use delayacct_blkio_ticks (aggregated block I/O delays, as per Linux\n\t// docs).  Note: I am assuming at least Linux 2.6.18\n\tvar iotime float64\n\tif len(fields) > 42 {\n\t\tiotime, err = strconv.ParseFloat(fields[42], 64)\n\t\tif err != nil {\n\t\t\tiotime = 0 // Ancient linux version, most likely\n\t\t}\n\t} else {\n\t\tiotime = 0 // e.g. SmartOS containers\n\t}\n\n\tcpuTimes := &cpu.TimesStat{\n\t\tCPU:    \"cpu\",\n\t\tUser:   utime / float64(clockTicks),\n\t\tSystem: stime / float64(clockTicks),\n\t\tIowait: iotime / float64(clockTicks),\n\t}\n\n\tbootTime, _ := common.BootTimeWithContext(ctx, enableBootTimeCache)\n\tt, err := strconv.ParseUint(fields[22], 10, 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\tcreateTime := int64((t * 1000 / uint64(clockTicks)) + uint64(bootTime*1000))\n\n\trtpriority, err := strconv.ParseInt(fields[18], 10, 32)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\tif rtpriority < 0 {\n\t\trtpriority = rtpriority*-1 - 1\n\t} else {\n\t\trtpriority = 0\n\t}\n\n\t//\tp.Nice = mustParseInt32(fields[18])\n\t// use syscall instead of parse Stat file\n\tsnice, _ := unix.Getpriority(prioProcess, int(pid))\n\tnice := int32(snice) // FIXME: is this true?\n\n\tminFault, err := strconv.ParseUint(fields[10], 10, 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\tcMinFault, err := strconv.ParseUint(fields[11], 10, 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\tmajFault, err := strconv.ParseUint(fields[12], 10, 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\tcMajFault, err := strconv.ParseUint(fields[13], 10, 64)\n\tif err != nil {\n\t\treturn 0, 0, nil, 0, 0, 0, nil, err\n\t}\n\n\tfaults := &PageFaultsStat{\n\t\tMinorFaults:      minFault,\n\t\tMajorFaults:      majFault,\n\t\tChildMinorFaults: cMinFault,\n\t\tChildMajorFaults: cMajFault,\n\t}\n\n\treturn terminal, int32(ppid), cpuTimes, createTime, uint32(rtpriority), nice, faults, nil\n}\n\nfunc (p *Process) fillFromStatWithContext(ctx context.Context) (uint64, int32, *cpu.TimesStat, int64, uint32, int32, *PageFaultsStat, error) {\n\treturn p.fillFromTIDStatWithContext(ctx, -1)\n}\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn readPidsFromDir(common.HostProcWithContext(ctx))\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\tout := []*Process{}\n\n\tpids, err := PidsWithContext(ctx)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\n\tfor _, pid := range pids {\n\t\tp, err := NewProcessWithContext(ctx, pid)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, p)\n\t}\n\n\treturn out, nil\n}\n\nfunc readPidsFromDir(path string) ([]int32, error) {\n\tvar ret []int32\n\n\td, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tfnames, err := d.Readdirnames(-1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, fname := range fnames {\n\t\tpid, err := strconv.ParseInt(fname, 10, 32)\n\t\tif err != nil {\n\t\t\t// if not numeric name, just skip\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, int32(pid))\n\t}\n\n\treturn ret, nil\n}\n\nfunc splitProcStat(content []byte) []string {\n\tnameStart := bytes.IndexByte(content, '(')\n\tnameEnd := bytes.LastIndexByte(content, ')')\n\trestFields := strings.Fields(string(content[nameEnd+2:])) // +2 skip ') '\n\tname := content[nameStart+1 : nameEnd]\n\tpid := strings.TrimSpace(string(content[:nameStart]))\n\tfields := make([]string, 3, len(restFields)+3)\n\tfields[1] = string(pid)\n\tfields[2] = string(name)\n\tfields = append(fields, restFields...)\n\treturn fields\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_openbsd.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd\n\npackage process\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unsafe\"\n\n\tcpu \"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\tmem \"github.com/shirou/gopsutil/v4/mem\"\n\tnet \"github.com/shirou/gopsutil/v4/net\"\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\tvar ret []int32\n\tprocs, err := ProcessesWithContext(ctx)\n\tif err != nil {\n\t\treturn ret, nil\n\t}\n\n\tfor _, p := range procs {\n\t\tret = append(ret, p.Pid)\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn k.Ppid, nil\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tname := common.IntToString(k.Comm[:])\n\n\tif len(name) >= 15 {\n\t\tcmdlineSlice, err := p.CmdlineSliceWithContext(ctx)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif len(cmdlineSlice) > 0 {\n\t\t\textendedName := filepath.Base(cmdlineSlice[0])\n\t\t\tif strings.HasPrefix(extendedName, p.name) {\n\t\t\t\tname = extendedName\n\t\t\t}\n\t\t}\n\t}\n\n\treturn name, nil\n}\n\nfunc (p *Process) CwdWithContext(ctx context.Context) (string, error) {\n\tmib := []int32{CTLKern, KernProcCwd, p.Pid}\n\tbuf, _, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn common.ByteToString(buf), nil\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\tmib := []int32{CTLKern, KernProcArgs, p.Pid, KernProcArgv}\n\tbuf, _, err := common.CallSyscall(mib)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t/* From man sysctl(2):\n\tThe buffer pointed to by oldp is filled with an array of char\n\tpointers followed by the strings themselves. The last char\n\tpointer is a NULL pointer. */\n\tvar strParts []string\n\tr := bytes.NewReader(buf)\n\tbaseAddr := uintptr(unsafe.Pointer(&buf[0]))\n\tfor {\n\t\targvp, err := readPtr(r)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif argvp == 0 { // check for a NULL pointer\n\t\t\tbreak\n\t\t}\n\t\toffset := argvp - baseAddr\n\t\tlength := uintptr(bytes.IndexByte(buf[offset:], 0))\n\t\tstr := string(buf[offset : offset+length])\n\t\tstrParts = append(strParts, str)\n\t}\n\n\treturn strParts, nil\n}\n\n// readPtr reads a pointer data from a given reader. WARNING: only little\n// endian architectures are supported.\nfunc readPtr(r io.Reader) (uintptr, error) {\n\tswitch sizeofPtr {\n\tcase 4:\n\t\tvar p uint32\n\t\tif err := binary.Read(r, binary.LittleEndian, &p); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn uintptr(p), nil\n\tcase 8:\n\t\tvar p uint64\n\t\tif err := binary.Read(r, binary.LittleEndian, &p); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn uintptr(p), nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unsupported pointer size\")\n\t}\n}\n\nfunc (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {\n\targv, err := p.CmdlineSliceWithContext(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.Join(argv, \" \"), nil\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn []string{\"\"}, err\n\t}\n\tvar s string\n\tswitch k.Stat {\n\tcase SIDL:\n\tcase SRUN:\n\tcase SONPROC:\n\t\ts = Running\n\tcase SSLEEP:\n\t\ts = Sleep\n\tcase SSTOP:\n\t\ts = Stop\n\tcase SDEAD:\n\t\ts = Zombie\n\t}\n\n\treturn []string{s}, nil\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\t// see https://github.com/shirou/gopsutil/issues/596#issuecomment-432707831 for implementation details\n\tpid := p.Pid\n\tout, err := invoke.CommandWithContext(ctx, \"ps\", \"-o\", \"stat=\", \"-p\", strconv.Itoa(int(pid)))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn strings.IndexByte(string(out), '+') != -1, nil\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tuids := make([]uint32, 0, 3)\n\n\tuids = append(uids, uint32(k.Ruid), uint32(k.Uid), uint32(k.Svuid))\n\n\treturn uids, nil\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgids := make([]uint32, 0, 3)\n\tgids = append(gids, uint32(k.Rgid), uint32(k.Ngroups), uint32(k.Svgid))\n\n\treturn gids, nil\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgroups := make([]uint32, k.Ngroups)\n\tfor i := int16(0); i < k.Ngroups; i++ {\n\t\tgroups[i] = uint32(k.Groups[i])\n\t}\n\n\treturn groups, nil\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tttyNr := uint64(k.Tdev)\n\n\ttermmap, err := getTerminalMap()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn termmap[ttyNr], nil\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(k.Nice), nil\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &IOCountersStat{\n\t\tReadCount:  uint64(k.Uru_inblock),\n\t\tWriteCount: uint64(k.Uru_oublock),\n\t}, nil\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\t/* not supported, just return 1 */\n\treturn 1, nil\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &cpu.TimesStat{\n\t\tCPU:    \"cpu\",\n\t\tUser:   float64(k.Uutime_sec) + float64(k.Uutime_usec)/1000000,\n\t\tSystem: float64(k.Ustime_sec) + float64(k.Ustime_usec)/1000000,\n\t}, nil\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\tk, err := p.getKProc()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpageSize, err := mem.GetPageSizeWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &MemoryInfoStat{\n\t\tRSS: uint64(k.Vm_rssize) * pageSize,\n\t\tVMS: uint64(k.Vm_tsize) + uint64(k.Vm_dsize) +\n\t\t\tuint64(k.Vm_ssize),\n\t}, nil\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\tprocs, err := ProcessesWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, nil\n\t}\n\tret := make([]*Process, 0, len(procs))\n\tfor _, proc := range procs {\n\t\tppid, err := proc.PpidWithContext(ctx)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif ppid == p.Pid {\n\t\t\tret = append(ret, proc)\n\t\t}\n\t}\n\tsort.Slice(ret, func(i, j int) bool { return ret[i].Pid < ret[j].Pid })\n\treturn ret, nil\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\tresults := []*Process{}\n\n\tbuf, length, err := callKernProcSyscall(KernProcAll, 0)\n\tif err != nil {\n\t\treturn results, err\n\t}\n\n\t// get kinfo_proc size\n\tcount := int(length / uint64(sizeOfKinfoProc))\n\n\t// parse buf to procs\n\tfor i := 0; i < count; i++ {\n\t\tb := buf[i*sizeOfKinfoProc : (i+1)*sizeOfKinfoProc]\n\t\tk, err := parseKinfoProc(b)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tp, err := NewProcessWithContext(ctx, int32(k.Pid))\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tresults = append(results, p)\n\t}\n\n\treturn results, nil\n}\n\nfunc (p *Process) getKProc() (*KinfoProc, error) {\n\tbuf, length, err := callKernProcSyscall(KernProcPID, p.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif length != sizeOfKinfoProc {\n\t\treturn nil, errors.New(\"unexpected size of KinfoProc\")\n\t}\n\n\tk, err := parseKinfoProc(buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &k, nil\n}\n\nfunc callKernProcSyscall(op int32, arg int32) ([]byte, uint64, error) {\n\tmib := []int32{CTLKern, KernProc, op, arg, sizeOfKinfoProc, 0}\n\tmibptr := unsafe.Pointer(&mib[0])\n\tmiblen := uint64(len(mib))\n\tlength := uint64(0)\n\t_, _, err := unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn nil, length, err\n\t}\n\n\tcount := int32(length / uint64(sizeOfKinfoProc))\n\tmib = []int32{CTLKern, KernProc, op, arg, sizeOfKinfoProc, count}\n\tmibptr = unsafe.Pointer(&mib[0])\n\tmiblen = uint64(len(mib))\n\t// get proc info itself\n\tbuf := make([]byte, length)\n\t_, _, err = unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(mibptr),\n\t\tuintptr(miblen),\n\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\tuintptr(unsafe.Pointer(&length)),\n\t\t0,\n\t\t0)\n\tif err != 0 {\n\t\treturn buf, length, err\n\t}\n\n\treturn buf, length, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_openbsd_386.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && 386\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs process/types_openbsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 66\n\tKernProcAll      = 0\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 55\n\tKernProcCwd      = 78\n\tKernProcArgv     = 1\n\tKernProcEnv      = 3\n)\n\nconst (\n\tArgMax = 256 * 1024\n)\n\nconst (\n\tsizeofPtr      = 0x4\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x4\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x38\n\tsizeOfKinfoProc    = 0x264\n)\n\nconst (\n\tSIDL    = 1\n\tSRUN    = 2\n\tSSLEEP  = 3\n\tSSTOP   = 4\n\tSZOMB   = 5\n\tSDEAD   = 6\n\tSONPROC = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype KinfoProc struct {\n\tForw         uint64\n\tBack         uint64\n\tPaddr        uint64\n\tAddr         uint64\n\tFd           uint64\n\tStats        uint64\n\tLimit        uint64\n\tVmspace      uint64\n\tSigacts      uint64\n\tSess         uint64\n\tTsess        uint64\n\tRu           uint64\n\tEflag        int32\n\tExitsig      int32\n\tFlag         int32\n\tPid          int32\n\tPpid         int32\n\tSid          int32\n\tX_pgid       int32\n\tTpgid        int32\n\tUid          uint32\n\tRuid         uint32\n\tGid          uint32\n\tRgid         uint32\n\tGroups       [16]uint32\n\tNgroups      int16\n\tJobc         int16\n\tTdev         uint32\n\tEstcpu       uint32\n\tRtime_sec    uint32\n\tRtime_usec   uint32\n\tCpticks      int32\n\tPctcpu       uint32\n\tSwtime       uint32\n\tSlptime      uint32\n\tSchedflags   int32\n\tUticks       uint64\n\tSticks       uint64\n\tIticks       uint64\n\tTracep       uint64\n\tTraceflag    int32\n\tHoldcnt      int32\n\tSiglist      int32\n\tSigmask      uint32\n\tSigignore    uint32\n\tSigcatch     uint32\n\tStat         int8\n\tPriority     uint8\n\tUsrpri       uint8\n\tNice         uint8\n\tXstat        uint16\n\tAcflag       uint16\n\tComm         [24]int8\n\tWmesg        [8]int8\n\tWchan        uint64\n\tLogin        [32]int8\n\tVm_rssize    int32\n\tVm_tsize     int32\n\tVm_dsize     int32\n\tVm_ssize     int32\n\tUvalid       int64\n\tUstart_sec   uint64\n\tUstart_usec  uint32\n\tUutime_sec   uint32\n\tUutime_usec  uint32\n\tUstime_sec   uint32\n\tUstime_usec  uint32\n\tUru_maxrss   uint64\n\tUru_ixrss    uint64\n\tUru_idrss    uint64\n\tUru_isrss    uint64\n\tUru_minflt   uint64\n\tUru_majflt   uint64\n\tUru_nswap    uint64\n\tUru_inblock  uint64\n\tUru_oublock  uint64\n\tUru_msgsnd   uint64\n\tUru_msgrcv   uint64\n\tUru_nsignals uint64\n\tUru_nvcsw    uint64\n\tUru_nivcsw   uint64\n\tUctime_sec   uint32\n\tUctime_usec  uint32\n\tPsflags      int32\n\tSpare        int32\n\tSvuid        uint32\n\tSvgid        uint32\n\tEmul         [8]int8\n\tRlim_rss_cur uint64\n\tCpuid        uint64\n\tVm_map_size  uint64\n\tTid          int32\n\tRtableid     uint32\n}\n\ntype Priority struct{}\n\ntype KinfoVmentry struct {\n\tStart          uint32\n\tEnd            uint32\n\tGuard          uint32\n\tFspace         uint32\n\tFspace_augment uint32\n\tOffset         uint64\n\tWired_count    int32\n\tEtype          int32\n\tProtection     int32\n\tMax_protection int32\n\tAdvice         int32\n\tInheritance    int32\n\tFlags          uint8\n\tPad_cgo_0      [3]byte\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_openbsd_amd64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_openbsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 66\n\tKernProcAll      = 0\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 55\n\tKernProcCwd      = 78\n\tKernProcArgv     = 1\n\tKernProcEnv      = 3\n)\n\nconst (\n\tArgMax = 256 * 1024\n)\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x50\n\tsizeOfKinfoProc    = 0x268\n)\n\nconst (\n\tSIDL    = 1\n\tSRUN    = 2\n\tSSLEEP  = 3\n\tSSTOP   = 4\n\tSZOMB   = 5\n\tSDEAD   = 6\n\tSONPROC = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype KinfoProc struct {\n\tForw         uint64\n\tBack         uint64\n\tPaddr        uint64\n\tAddr         uint64\n\tFd           uint64\n\tStats        uint64\n\tLimit        uint64\n\tVmspace      uint64\n\tSigacts      uint64\n\tSess         uint64\n\tTsess        uint64\n\tRu           uint64\n\tEflag        int32\n\tExitsig      int32\n\tFlag         int32\n\tPid          int32\n\tPpid         int32\n\tSid          int32\n\tX_pgid       int32\n\tTpgid        int32\n\tUid          uint32\n\tRuid         uint32\n\tGid          uint32\n\tRgid         uint32\n\tGroups       [16]uint32\n\tNgroups      int16\n\tJobc         int16\n\tTdev         uint32\n\tEstcpu       uint32\n\tRtime_sec    uint32\n\tRtime_usec   uint32\n\tCpticks      int32\n\tPctcpu       uint32\n\tSwtime       uint32\n\tSlptime      uint32\n\tSchedflags   int32\n\tUticks       uint64\n\tSticks       uint64\n\tIticks       uint64\n\tTracep       uint64\n\tTraceflag    int32\n\tHoldcnt      int32\n\tSiglist      int32\n\tSigmask      uint32\n\tSigignore    uint32\n\tSigcatch     uint32\n\tStat         int8\n\tPriority     uint8\n\tUsrpri       uint8\n\tNice         uint8\n\tXstat        uint16\n\tAcflag       uint16\n\tComm         [24]int8\n\tWmesg        [8]int8\n\tWchan        uint64\n\tLogin        [32]int8\n\tVm_rssize    int32\n\tVm_tsize     int32\n\tVm_dsize     int32\n\tVm_ssize     int32\n\tUvalid       int64\n\tUstart_sec   uint64\n\tUstart_usec  uint32\n\tUutime_sec   uint32\n\tUutime_usec  uint32\n\tUstime_sec   uint32\n\tUstime_usec  uint32\n\tPad_cgo_0    [4]byte\n\tUru_maxrss   uint64\n\tUru_ixrss    uint64\n\tUru_idrss    uint64\n\tUru_isrss    uint64\n\tUru_minflt   uint64\n\tUru_majflt   uint64\n\tUru_nswap    uint64\n\tUru_inblock  uint64\n\tUru_oublock  uint64\n\tUru_msgsnd   uint64\n\tUru_msgrcv   uint64\n\tUru_nsignals uint64\n\tUru_nvcsw    uint64\n\tUru_nivcsw   uint64\n\tUctime_sec   uint32\n\tUctime_usec  uint32\n\tPsflags      int32\n\tSpare        int32\n\tSvuid        uint32\n\tSvgid        uint32\n\tEmul         [8]int8\n\tRlim_rss_cur uint64\n\tCpuid        uint64\n\tVm_map_size  uint64\n\tTid          int32\n\tRtableid     uint32\n}\n\ntype Priority struct{}\n\ntype KinfoVmentry struct {\n\tStart          uint64\n\tEnd            uint64\n\tGuard          uint64\n\tFspace         uint64\n\tFspace_augment uint64\n\tOffset         uint64\n\tWired_count    int32\n\tEtype          int32\n\tProtection     int32\n\tMax_protection int32\n\tAdvice         int32\n\tInheritance    int32\n\tFlags          uint8\n\tPad_cgo_0      [7]byte\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_openbsd_arm.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && arm\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs process/types_openbsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 66\n\tKernProcAll      = 0\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 55\n\tKernProcCwd      = 78\n\tKernProcArgv     = 1\n\tKernProcEnv      = 3\n)\n\nconst (\n\tArgMax = 256 * 1024\n)\n\nconst (\n\tsizeofPtr      = 0x4\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x4\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x38\n\tsizeOfKinfoProc    = 0x264\n)\n\nconst (\n\tSIDL    = 1\n\tSRUN    = 2\n\tSSLEEP  = 3\n\tSSTOP   = 4\n\tSZOMB   = 5\n\tSDEAD   = 6\n\tSONPROC = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype KinfoProc struct {\n\tForw         uint64\n\tBack         uint64\n\tPaddr        uint64\n\tAddr         uint64\n\tFd           uint64\n\tStats        uint64\n\tLimit        uint64\n\tVmspace      uint64\n\tSigacts      uint64\n\tSess         uint64\n\tTsess        uint64\n\tRu           uint64\n\tEflag        int32\n\tExitsig      int32\n\tFlag         int32\n\tPid          int32\n\tPpid         int32\n\tSid          int32\n\tX_pgid       int32\n\tTpgid        int32\n\tUid          uint32\n\tRuid         uint32\n\tGid          uint32\n\tRgid         uint32\n\tGroups       [16]uint32\n\tNgroups      int16\n\tJobc         int16\n\tTdev         uint32\n\tEstcpu       uint32\n\tRtime_sec    uint32\n\tRtime_usec   uint32\n\tCpticks      int32\n\tPctcpu       uint32\n\tSwtime       uint32\n\tSlptime      uint32\n\tSchedflags   int32\n\tUticks       uint64\n\tSticks       uint64\n\tIticks       uint64\n\tTracep       uint64\n\tTraceflag    int32\n\tHoldcnt      int32\n\tSiglist      int32\n\tSigmask      uint32\n\tSigignore    uint32\n\tSigcatch     uint32\n\tStat         int8\n\tPriority     uint8\n\tUsrpri       uint8\n\tNice         uint8\n\tXstat        uint16\n\tAcflag       uint16\n\tComm         [24]int8\n\tWmesg        [8]int8\n\tWchan        uint64\n\tLogin        [32]int8\n\tVm_rssize    int32\n\tVm_tsize     int32\n\tVm_dsize     int32\n\tVm_ssize     int32\n\tUvalid       int64\n\tUstart_sec   uint64\n\tUstart_usec  uint32\n\tUutime_sec   uint32\n\tUutime_usec  uint32\n\tUstime_sec   uint32\n\tUstime_usec  uint32\n\tUru_maxrss   uint64\n\tUru_ixrss    uint64\n\tUru_idrss    uint64\n\tUru_isrss    uint64\n\tUru_minflt   uint64\n\tUru_majflt   uint64\n\tUru_nswap    uint64\n\tUru_inblock  uint64\n\tUru_oublock  uint64\n\tUru_msgsnd   uint64\n\tUru_msgrcv   uint64\n\tUru_nsignals uint64\n\tUru_nvcsw    uint64\n\tUru_nivcsw   uint64\n\tUctime_sec   uint32\n\tUctime_usec  uint32\n\tPsflags      int32\n\tSpare        int32\n\tSvuid        uint32\n\tSvgid        uint32\n\tEmul         [8]int8\n\tRlim_rss_cur uint64\n\tCpuid        uint64\n\tVm_map_size  uint64\n\tTid          int32\n\tRtableid     uint32\n}\n\ntype Priority struct{}\n\ntype KinfoVmentry struct {\n\tStart          uint32\n\tEnd            uint32\n\tGuard          uint32\n\tFspace         uint32\n\tFspace_augment uint32\n\tOffset         uint64\n\tWired_count    int32\n\tEtype          int32\n\tProtection     int32\n\tMax_protection int32\n\tAdvice         int32\n\tInheritance    int32\n\tFlags          uint8\n\tPad_cgo_0      [3]byte\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_openbsd_arm64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && arm64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs process/types_openbsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 66\n\tKernProcAll      = 0\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 55\n\tKernProcCwd      = 78\n\tKernProcArgv     = 1\n\tKernProcEnv      = 3\n)\n\nconst (\n\tArgMax = 256 * 1024\n)\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x50\n\tsizeOfKinfoProc    = 0x270\n)\n\nconst (\n\tSIDL    = 1\n\tSRUN    = 2\n\tSSLEEP  = 3\n\tSSTOP   = 4\n\tSZOMB   = 5\n\tSDEAD   = 6\n\tSONPROC = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype KinfoProc struct {\n\tForw         uint64\n\tBack         uint64\n\tPaddr        uint64\n\tAddr         uint64\n\tFd           uint64\n\tStats        uint64\n\tLimit        uint64\n\tVmspace      uint64\n\tSigacts      uint64\n\tSess         uint64\n\tTsess        uint64\n\tRu           uint64\n\tEflag        int32\n\tExitsig      int32\n\tFlag         int32\n\tPid          int32\n\tPpid         int32\n\tSid          int32\n\tX_pgid       int32\n\tTpgid        int32\n\tUid          uint32\n\tRuid         uint32\n\tGid          uint32\n\tRgid         uint32\n\tGroups       [16]uint32\n\tNgroups      int16\n\tJobc         int16\n\tTdev         uint32\n\tEstcpu       uint32\n\tRtime_sec    uint32\n\tRtime_usec   uint32\n\tCpticks      int32\n\tPctcpu       uint32\n\tSwtime       uint32\n\tSlptime      uint32\n\tSchedflags   int32\n\tUticks       uint64\n\tSticks       uint64\n\tIticks       uint64\n\tTracep       uint64\n\tTraceflag    int32\n\tHoldcnt      int32\n\tSiglist      int32\n\tSigmask      uint32\n\tSigignore    uint32\n\tSigcatch     uint32\n\tStat         int8\n\tPriority     uint8\n\tUsrpri       uint8\n\tNice         uint8\n\tXstat        uint16\n\tAcflag       uint16\n\tComm         [24]int8\n\tWmesg        [8]uint8\n\tWchan        uint64\n\tLogin        [32]uint8\n\tVm_rssize    int32\n\tVm_tsize     int32\n\tVm_dsize     int32\n\tVm_ssize     int32\n\tUvalid       int64\n\tUstart_sec   uint64\n\tUstart_usec  uint32\n\tUutime_sec   uint32\n\tUutime_usec  uint32\n\tUstime_sec   uint32\n\tUstime_usec  uint32\n\tUru_maxrss   uint64\n\tUru_ixrss    uint64\n\tUru_idrss    uint64\n\tUru_isrss    uint64\n\tUru_minflt   uint64\n\tUru_majflt   uint64\n\tUru_nswap    uint64\n\tUru_inblock  uint64\n\tUru_oublock  uint64\n\tUru_msgsnd   uint64\n\tUru_msgrcv   uint64\n\tUru_nsignals uint64\n\tUru_nvcsw    uint64\n\tUru_nivcsw   uint64\n\tUctime_sec   uint32\n\tUctime_usec  uint32\n\tPsflags      uint32\n\tSpare        int32\n\tSvuid        uint32\n\tSvgid        uint32\n\tEmul         [8]uint8\n\tRlim_rss_cur uint64\n\tCpuid        uint64\n\tVm_map_size  uint64\n\tTid          int32\n\tRtableid     uint32\n\tPledge       uint64\n}\n\ntype Priority struct{}\n\ntype KinfoVmentry struct {\n\tStart          uint64\n\tEnd            uint64\n\tGuard          uint64\n\tFspace         uint64\n\tFspace_augment uint64\n\tOffset         uint64\n\tWired_count    int32\n\tEtype          int32\n\tProtection     int32\n\tMax_protection int32\n\tAdvice         int32\n\tInheritance    int32\n\tFlags          uint8\n\tPad_cgo_0      [7]byte\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_openbsd_riscv64.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build openbsd && riscv64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs process/types_openbsd.go\n\npackage process\n\nconst (\n\tCTLKern          = 1\n\tKernProc         = 66\n\tKernProcAll      = 0\n\tKernProcPID      = 1\n\tKernProcProc     = 8\n\tKernProcPathname = 12\n\tKernProcArgs     = 55\n\tKernProcCwd      = 78\n\tKernProcArgv     = 1\n\tKernProcEnv      = 3\n)\n\nconst (\n\tArgMax = 256 * 1024\n)\n\nconst (\n\tsizeofPtr      = 0x8\n\tsizeofShort    = 0x2\n\tsizeofInt      = 0x4\n\tsizeofLong     = 0x8\n\tsizeofLongLong = 0x8\n)\n\nconst (\n\tsizeOfKinfoVmentry = 0x50\n\tsizeOfKinfoProc    = 0x288\n)\n\nconst (\n\tSIDL    = 1\n\tSRUN    = 2\n\tSSLEEP  = 3\n\tSSTOP   = 4\n\tSZOMB   = 5\n\tSDEAD   = 6\n\tSONPROC = 7\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype KinfoProc struct {\n\tForw         uint64\n\tBack         uint64\n\tPaddr        uint64\n\tAddr         uint64\n\tFd           uint64\n\tStats        uint64\n\tLimit        uint64\n\tVmspace      uint64\n\tSigacts      uint64\n\tSess         uint64\n\tTsess        uint64\n\tRu           uint64\n\tEflag        int32\n\tExitsig      int32\n\tFlag         int32\n\tPid          int32\n\tPpid         int32\n\tSid          int32\n\tX_pgid       int32\n\tTpgid        int32\n\tUid          uint32\n\tRuid         uint32\n\tGid          uint32\n\tRgid         uint32\n\tGroups       [16]uint32\n\tNgroups      int16\n\tJobc         int16\n\tTdev         uint32\n\tEstcpu       uint32\n\tRtime_sec    uint32\n\tRtime_usec   uint32\n\tCpticks      int32\n\tPctcpu       uint32\n\tSwtime       uint32\n\tSlptime      uint32\n\tSchedflags   int32\n\tUticks       uint64\n\tSticks       uint64\n\tIticks       uint64\n\tTracep       uint64\n\tTraceflag    int32\n\tHoldcnt      int32\n\tSiglist      int32\n\tSigmask      uint32\n\tSigignore    uint32\n\tSigcatch     uint32\n\tStat         int8\n\tPriority     uint8\n\tUsrpri       uint8\n\tNice         uint8\n\tXstat        uint16\n\tSpare        uint16\n\tComm         [24]int8\n\tWmesg        [8]uint8\n\tWchan        uint64\n\tLogin        [32]uint8\n\tVm_rssize    int32\n\tVm_tsize     int32\n\tVm_dsize     int32\n\tVm_ssize     int32\n\tUvalid       int64\n\tUstart_sec   uint64\n\tUstart_usec  uint32\n\tUutime_sec   uint32\n\tUutime_usec  uint32\n\tUstime_sec   uint32\n\tUstime_usec  uint32\n\tUru_maxrss   uint64\n\tUru_ixrss    uint64\n\tUru_idrss    uint64\n\tUru_isrss    uint64\n\tUru_minflt   uint64\n\tUru_majflt   uint64\n\tUru_nswap    uint64\n\tUru_inblock  uint64\n\tUru_oublock  uint64\n\tUru_msgsnd   uint64\n\tUru_msgrcv   uint64\n\tUru_nsignals uint64\n\tUru_nvcsw    uint64\n\tUru_nivcsw   uint64\n\tUctime_sec   uint32\n\tUctime_usec  uint32\n\tPsflags      uint32\n\tAcflag       uint32\n\tSvuid        uint32\n\tSvgid        uint32\n\tEmul         [8]uint8\n\tRlim_rss_cur uint64\n\tCpuid        uint64\n\tVm_map_size  uint64\n\tTid          int32\n\tRtableid     uint32\n\tPledge       uint64\n\tName         [24]uint8\n}\n\ntype Priority struct{}\n\ntype KinfoVmentry struct {\n\tStart          uint64\n\tEnd            uint64\n\tGuard          uint64\n\tFspace         uint64\n\tFspace_augment uint64\n\tOffset         uint64\n\tWired_count    int32\n\tEtype          int32\n\tProtection     int32\n\tMax_protection int32\n\tAdvice         int32\n\tInheritance    int32\n\tFlags          uint8\n\tPad_cgo_0      [7]byte\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_plan9.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build plan9\n\npackage process\n\nimport (\n\t\"context\"\n\t\"syscall\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n)\n\ntype Signal = syscall.Note\n\ntype MemoryMapsStat struct {\n\tPath         string `json:\"path\"`\n\tRss          uint64 `json:\"rss\"`\n\tSize         uint64 `json:\"size\"`\n\tPss          uint64 `json:\"pss\"`\n\tSharedClean  uint64 `json:\"sharedClean\"`\n\tSharedDirty  uint64 `json:\"sharedDirty\"`\n\tPrivateClean uint64 `json:\"privateClean\"`\n\tPrivateDirty uint64 `json:\"privateDirty\"`\n\tReferenced   uint64 `json:\"referenced\"`\n\tAnonymous    uint64 `json:\"anonymous\"`\n\tSwap         uint64 `json:\"swap\"`\n}\n\ntype MemoryInfoExStat struct{}\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc PidExistsWithContext(ctx context.Context, pid int32) (bool, error) {\n\treturn false, common.ErrNotImplementedError\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) TgidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) CwdWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\treturn []string{\"\"}, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\treturn false, common.ErrNotImplementedError\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOniceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitWithContext(ctx context.Context) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumCtxSwitchesWithContext(ctx context.Context) (*NumCtxSwitchesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumFDsWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ThreadsWithContext(ctx context.Context) (map[int32]*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) CPUAffinityWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoExWithContext(ctx context.Context) (*MemoryInfoExStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) PageFaultsWithContext(ctx context.Context) (*PageFaultsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) SendSignalWithContext(ctx context.Context, sig Signal) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) SuspendWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) ResumeWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) TerminateWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) KillWithContext(ctx context.Context) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) UsernameWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_posix.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build linux || freebsd || openbsd || darwin || solaris\n\npackage process\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n)\n\ntype Signal = syscall.Signal\n\n// POSIX\nfunc getTerminalMap() (map[uint64]string, error) {\n\tret := make(map[uint64]string)\n\tvar termfiles []string\n\n\td, err := os.Open(\"/dev\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tdevnames, err := d.Readdirnames(-1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, devname := range devnames {\n\t\tif strings.HasPrefix(devname, \"/dev/tty\") {\n\t\t\ttermfiles = append(termfiles, \"/dev/tty/\"+devname)\n\t\t}\n\t}\n\n\tvar ptsnames []string\n\tptsd, err := os.Open(\"/dev/pts\")\n\tif err != nil {\n\t\tptsnames, _ = filepath.Glob(\"/dev/ttyp*\")\n\t\tif ptsnames == nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tdefer ptsd.Close()\n\n\tif ptsnames == nil {\n\t\tdefer ptsd.Close()\n\t\tptsnames, err = ptsd.Readdirnames(-1)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, ptsname := range ptsnames {\n\t\t\ttermfiles = append(termfiles, \"/dev/pts/\"+ptsname)\n\t\t}\n\t} else {\n\t\ttermfiles = ptsnames\n\t}\n\n\tfor _, name := range termfiles {\n\t\tstat := unix.Stat_t{}\n\t\tif err = unix.Stat(name, &stat); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\trdev := uint64(stat.Rdev)\n\t\tret[rdev] = strings.Replace(name, \"/dev\", \"\", -1)\n\t}\n\treturn ret, nil\n}\n\n// isMount is a port of python's os.path.ismount()\n// https://github.com/python/cpython/blob/08ff4369afca84587b1c82034af4e9f64caddbf2/Lib/posixpath.py#L186-L216\n// https://docs.python.org/3/library/os.path.html#os.path.ismount\nfunc isMount(path string) bool {\n\t// Check symlinkness with os.Lstat; unix.DT_LNK is not portable\n\tfileInfo, err := os.Lstat(path)\n\tif err != nil {\n\t\treturn false\n\t}\n\tif fileInfo.Mode()&os.ModeSymlink != 0 {\n\t\treturn false\n\t}\n\tvar stat1 unix.Stat_t\n\tif err := unix.Lstat(path, &stat1); err != nil {\n\t\treturn false\n\t}\n\tparent := filepath.Join(path, \"..\")\n\tvar stat2 unix.Stat_t\n\tif err := unix.Lstat(parent, &stat2); err != nil {\n\t\treturn false\n\t}\n\treturn stat1.Dev != stat2.Dev || stat1.Ino == stat2.Ino\n}\n\nfunc PidExistsWithContext(ctx context.Context, pid int32) (bool, error) {\n\tif pid <= 0 {\n\t\treturn false, fmt.Errorf(\"invalid pid %v\", pid)\n\t}\n\tproc, err := os.FindProcess(int(pid))\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tdefer proc.Release()\n\n\tif isMount(common.HostProcWithContext(ctx)) { // if /<HOST_PROC>/proc exists and is mounted, check if /<HOST_PROC>/proc/<PID> folder exists\n\t\t_, err := os.Stat(common.HostProcWithContext(ctx, strconv.Itoa(int(pid))))\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn err == nil, err\n\t}\n\n\t// procfs does not exist or is not mounted, check PID existence by signalling the pid\n\terr = proc.Signal(syscall.Signal(0))\n\tif err == nil {\n\t\treturn true, nil\n\t}\n\tif errors.Is(err, os.ErrProcessDone) {\n\t\treturn false, nil\n\t}\n\tvar errno syscall.Errno\n\tif !errors.As(err, &errno) {\n\t\treturn false, err\n\t}\n\tswitch errno {\n\tcase syscall.ESRCH:\n\t\treturn false, nil\n\tcase syscall.EPERM:\n\t\treturn true, nil\n\t}\n\n\treturn false, err\n}\n\nfunc (p *Process) SendSignalWithContext(ctx context.Context, sig syscall.Signal) error {\n\tprocess, err := os.FindProcess(int(p.Pid))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer process.Release()\n\n\terr = process.Signal(sig)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (p *Process) SuspendWithContext(ctx context.Context) error {\n\treturn p.SendSignalWithContext(ctx, unix.SIGSTOP)\n}\n\nfunc (p *Process) ResumeWithContext(ctx context.Context) error {\n\treturn p.SendSignalWithContext(ctx, unix.SIGCONT)\n}\n\nfunc (p *Process) TerminateWithContext(ctx context.Context) error {\n\treturn p.SendSignalWithContext(ctx, unix.SIGTERM)\n}\n\nfunc (p *Process) KillWithContext(ctx context.Context) error {\n\treturn p.SendSignalWithContext(ctx, unix.SIGKILL)\n}\n\nfunc (p *Process) UsernameWithContext(ctx context.Context) (string, error) {\n\tuids, err := p.UidsWithContext(ctx)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif len(uids) > 0 {\n\t\tu, err := user.LookupId(strconv.Itoa(int(uids[0])))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn u.Username, nil\n\t}\n\treturn \"\", nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_solaris.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\npackage process\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n)\n\ntype MemoryMapsStat struct {\n\tPath         string `json:\"path\"`\n\tRss          uint64 `json:\"rss\"`\n\tSize         uint64 `json:\"size\"`\n\tPss          uint64 `json:\"pss\"`\n\tSharedClean  uint64 `json:\"sharedClean\"`\n\tSharedDirty  uint64 `json:\"sharedDirty\"`\n\tPrivateClean uint64 `json:\"privateClean\"`\n\tPrivateDirty uint64 `json:\"privateDirty\"`\n\tReferenced   uint64 `json:\"referenced\"`\n\tAnonymous    uint64 `json:\"anonymous\"`\n\tSwap         uint64 `json:\"swap\"`\n}\n\ntype MemoryInfoExStat struct{}\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\treturn readPidsFromDir(common.HostProcWithContext(ctx))\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\tout := []*Process{}\n\n\tpids, err := PidsWithContext(ctx)\n\tif err != nil {\n\t\treturn out, err\n\t}\n\n\tfor _, pid := range pids {\n\t\tp, err := NewProcessWithContext(ctx, pid)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, p)\n\t}\n\n\treturn out, nil\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) TgidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\texe, err := p.fillFromPathAOutWithContext(ctx)\n\tif os.IsNotExist(err) {\n\t\texe, err = p.fillFromExecnameWithContext(ctx)\n\t}\n\treturn exe, err\n}\n\nfunc (p *Process) CmdlineWithContext(ctx context.Context) (string, error) {\n\treturn p.fillFromCmdlineWithContext(ctx)\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\treturn p.fillSliceFromCmdlineWithContext(ctx)\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) CwdWithContext(ctx context.Context) (string, error) {\n\treturn p.fillFromPathCwdWithContext(ctx)\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\treturn []string{\"\"}, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\treturn false, common.ErrNotImplementedError\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOniceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitWithContext(ctx context.Context) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumCtxSwitchesWithContext(ctx context.Context) (*NumCtxSwitchesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) NumFDsWithContext(ctx context.Context) (int32, error) {\n\t_, fnames, err := p.fillFromfdListWithContext(ctx)\n\treturn int32(len(fnames)), err\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ThreadsWithContext(ctx context.Context) (map[int32]*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) CPUAffinityWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoExWithContext(ctx context.Context) (*MemoryInfoExStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) PageFaultsWithContext(ctx context.Context) (*PageFaultsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\n/**\n** Internal functions\n**/\n\nfunc (p *Process) fillFromfdListWithContext(ctx context.Context) (string, []string, error) {\n\tpid := p.Pid\n\tstatPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"fd\")\n\td, err := os.Open(statPath)\n\tif err != nil {\n\t\treturn statPath, []string{}, err\n\t}\n\tdefer d.Close()\n\tfnames, err := d.Readdirnames(-1)\n\treturn statPath, fnames, err\n}\n\nfunc (p *Process) fillFromPathCwdWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\tcwdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"path\", \"cwd\")\n\tcwd, err := os.Readlink(cwdPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn cwd, nil\n}\n\nfunc (p *Process) fillFromPathAOutWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\tcwdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"path\", \"a.out\")\n\texe, err := os.Readlink(cwdPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn exe, nil\n}\n\nfunc (p *Process) fillFromExecnameWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\texecNamePath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"execname\")\n\texe, err := os.ReadFile(execNamePath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(exe), nil\n}\n\nfunc (p *Process) fillFromCmdlineWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\tcmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"cmdline\")\n\tcmdline, err := os.ReadFile(cmdPath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tret := strings.FieldsFunc(string(cmdline), func(r rune) bool {\n\t\tif r == '\\u0000' {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t})\n\n\treturn strings.Join(ret, \" \"), nil\n}\n\nfunc (p *Process) fillSliceFromCmdlineWithContext(ctx context.Context) ([]string, error) {\n\tpid := p.Pid\n\tcmdPath := common.HostProcWithContext(ctx, strconv.Itoa(int(pid)), \"cmdline\")\n\tcmdline, err := os.ReadFile(cmdPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(cmdline) == 0 {\n\t\treturn nil, nil\n\t}\n\tif cmdline[len(cmdline)-1] == 0 {\n\t\tcmdline = cmdline[:len(cmdline)-1]\n\t}\n\tparts := bytes.Split(cmdline, []byte{0})\n\tvar strParts []string\n\tfor _, p := range parts {\n\t\tstrParts = append(strParts, string(p))\n\t}\n\n\treturn strParts, nil\n}\n\nfunc readPidsFromDir(path string) ([]int32, error) {\n\tvar ret []int32\n\n\td, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer d.Close()\n\n\tfnames, err := d.Readdirnames(-1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, fname := range fnames {\n\t\tpid, err := strconv.ParseInt(fname, 10, 32)\n\t\tif err != nil {\n\t\t\t// if not numeric name, just skip\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, int32(pid))\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_windows.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build windows\n\npackage process\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/cpu\"\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"github.com/shirou/gopsutil/v4/net\"\n\t\"golang.org/x/sys/windows\"\n)\n\ntype Signal = syscall.Signal\n\nvar (\n\tmodntdll             = windows.NewLazySystemDLL(\"ntdll.dll\")\n\tprocNtResumeProcess  = modntdll.NewProc(\"NtResumeProcess\")\n\tprocNtSuspendProcess = modntdll.NewProc(\"NtSuspendProcess\")\n\n\tmodpsapi                     = windows.NewLazySystemDLL(\"psapi.dll\")\n\tprocGetProcessMemoryInfo     = modpsapi.NewProc(\"GetProcessMemoryInfo\")\n\tprocGetProcessImageFileNameW = modpsapi.NewProc(\"GetProcessImageFileNameW\")\n\n\tadvapi32                  = windows.NewLazySystemDLL(\"advapi32.dll\")\n\tprocLookupPrivilegeValue  = advapi32.NewProc(\"LookupPrivilegeValueW\")\n\tprocAdjustTokenPrivileges = advapi32.NewProc(\"AdjustTokenPrivileges\")\n\n\tprocQueryFullProcessImageNameW = common.Modkernel32.NewProc(\"QueryFullProcessImageNameW\")\n\tprocGetPriorityClass           = common.Modkernel32.NewProc(\"GetPriorityClass\")\n\tprocGetProcessIoCounters       = common.Modkernel32.NewProc(\"GetProcessIoCounters\")\n\tprocGetNativeSystemInfo        = common.Modkernel32.NewProc(\"GetNativeSystemInfo\")\n\tprocGetProcessHandleCount      = common.Modkernel32.NewProc(\"GetProcessHandleCount\")\n\n\tprocessorArchitecture uint\n)\n\nconst processQueryInformation = windows.PROCESS_QUERY_LIMITED_INFORMATION\n\ntype systemProcessorInformation struct {\n\tProcessorArchitecture uint16\n\tProcessorLevel        uint16\n\tProcessorRevision     uint16\n\tReserved              uint16\n\tProcessorFeatureBits  uint16\n}\n\ntype systemInfo struct {\n\twProcessorArchitecture      uint16\n\twReserved                   uint16\n\tdwpageSize                  uint32\n\tlpMinimumApplicationAddress uintptr\n\tlpMaximumApplicationAddress uintptr\n\tdwActiveProcessorMask       uintptr\n\tdwNumberOfProcessors        uint32\n\tdwProcessorType             uint32\n\tdwAllocationGranularity     uint32\n\twProcessorLevel             uint16\n\twProcessorRevision          uint16\n}\n\n// Memory_info_ex is different between OSes\ntype MemoryInfoExStat struct{}\n\ntype MemoryMapsStat struct{}\n\n// ioCounters is an equivalent representation of IO_COUNTERS in the Windows API.\n// https://docs.microsoft.com/windows/win32/api/winnt/ns-winnt-io_counters\ntype ioCounters struct {\n\tReadOperationCount  uint64\n\tWriteOperationCount uint64\n\tOtherOperationCount uint64\n\tReadTransferCount   uint64\n\tWriteTransferCount  uint64\n\tOtherTransferCount  uint64\n}\n\ntype processBasicInformation32 struct {\n\tReserved1       uint32\n\tPebBaseAddress  uint32\n\tReserved2       uint32\n\tReserved3       uint32\n\tUniqueProcessId uint32\n\tReserved4       uint32\n}\n\ntype processBasicInformation64 struct {\n\tReserved1       uint64\n\tPebBaseAddress  uint64\n\tReserved2       uint64\n\tReserved3       uint64\n\tUniqueProcessId uint64\n\tReserved4       uint64\n}\n\ntype processEnvironmentBlock32 struct {\n\tReserved1         [2]uint8\n\tBeingDebugged     uint8\n\tReserved2         uint8\n\tReserved3         [2]uint32\n\tLdr               uint32\n\tProcessParameters uint32\n\t// More fields which we don't use so far\n}\n\ntype processEnvironmentBlock64 struct {\n\tReserved1         [2]uint8\n\tBeingDebugged     uint8\n\tReserved2         uint8\n\t_                 [4]uint8 // padding, since we are 64 bit, the next pointer is 64 bit aligned (when compiling for 32 bit, this is not the case without manual padding)\n\tReserved3         [2]uint64\n\tLdr               uint64\n\tProcessParameters uint64\n\t// More fields which we don't use so far\n}\n\ntype rtlUserProcessParameters32 struct {\n\tReserved1                      [16]uint8\n\tConsoleHandle                  uint32\n\tConsoleFlags                   uint32\n\tStdInputHandle                 uint32\n\tStdOutputHandle                uint32\n\tStdErrorHandle                 uint32\n\tCurrentDirectoryPathNameLength uint16\n\t_                              uint16 // Max Length\n\tCurrentDirectoryPathAddress    uint32\n\tCurrentDirectoryHandle         uint32\n\tDllPathNameLength              uint16\n\t_                              uint16 // Max Length\n\tDllPathAddress                 uint32\n\tImagePathNameLength            uint16\n\t_                              uint16 // Max Length\n\tImagePathAddress               uint32\n\tCommandLineLength              uint16\n\t_                              uint16 // Max Length\n\tCommandLineAddress             uint32\n\tEnvironmentAddress             uint32\n\t// More fields which we don't use so far\n}\n\ntype rtlUserProcessParameters64 struct {\n\tReserved1                      [16]uint8\n\tConsoleHandle                  uint64\n\tConsoleFlags                   uint64\n\tStdInputHandle                 uint64\n\tStdOutputHandle                uint64\n\tStdErrorHandle                 uint64\n\tCurrentDirectoryPathNameLength uint16\n\t_                              uint16 // Max Length\n\t_                              uint32 // Padding\n\tCurrentDirectoryPathAddress    uint64\n\tCurrentDirectoryHandle         uint64\n\tDllPathNameLength              uint16\n\t_                              uint16 // Max Length\n\t_                              uint32 // Padding\n\tDllPathAddress                 uint64\n\tImagePathNameLength            uint16\n\t_                              uint16 // Max Length\n\t_                              uint32 // Padding\n\tImagePathAddress               uint64\n\tCommandLineLength              uint16\n\t_                              uint16 // Max Length\n\t_                              uint32 // Padding\n\tCommandLineAddress             uint64\n\tEnvironmentAddress             uint64\n\t// More fields which we don't use so far\n}\n\ntype winLUID struct {\n\tLowPart  winDWord\n\tHighPart winLong\n}\n\n// LUID_AND_ATTRIBUTES\ntype winLUIDAndAttributes struct {\n\tLuid       winLUID\n\tAttributes winDWord\n}\n\n// TOKEN_PRIVILEGES\ntype winTokenPrivileges struct {\n\tPrivilegeCount winDWord\n\tPrivileges     [1]winLUIDAndAttributes\n}\n\ntype (\n\twinLong  int32\n\twinDWord uint32\n)\n\nfunc init() {\n\tvar systemInfo systemInfo\n\n\tprocGetNativeSystemInfo.Call(uintptr(unsafe.Pointer(&systemInfo)))\n\tprocessorArchitecture = uint(systemInfo.wProcessorArchitecture)\n\n\t// enable SeDebugPrivilege https://github.com/midstar/proci/blob/6ec79f57b90ba3d9efa2a7b16ef9c9369d4be875/proci_windows.go#L80-L119\n\thandle, err := syscall.GetCurrentProcess()\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar token syscall.Token\n\terr = syscall.OpenProcessToken(handle, 0x0028, &token)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer token.Close()\n\n\ttokenPrivileges := winTokenPrivileges{PrivilegeCount: 1}\n\tlpName := syscall.StringToUTF16(\"SeDebugPrivilege\")\n\tret, _, _ := procLookupPrivilegeValue.Call(\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&lpName[0])),\n\t\tuintptr(unsafe.Pointer(&tokenPrivileges.Privileges[0].Luid)))\n\tif ret == 0 {\n\t\treturn\n\t}\n\n\ttokenPrivileges.Privileges[0].Attributes = 0x00000002 // SE_PRIVILEGE_ENABLED\n\n\tprocAdjustTokenPrivileges.Call(\n\t\tuintptr(token),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&tokenPrivileges)),\n\t\tuintptr(unsafe.Sizeof(tokenPrivileges)),\n\t\t0,\n\t\t0)\n}\n\nfunc pidsWithContext(ctx context.Context) ([]int32, error) {\n\t// inspired by https://gist.github.com/henkman/3083408\n\t// and https://github.com/giampaolo/psutil/blob/1c3a15f637521ba5c0031283da39c733fda53e4c/psutil/arch/windows/process_info.c#L315-L329\n\tvar ret []int32\n\tvar read uint32 = 0\n\tvar psSize uint32 = 1024\n\tconst dwordSize uint32 = 4\n\n\tfor {\n\t\tps := make([]uint32, psSize)\n\t\tif err := windows.EnumProcesses(ps, &read); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif uint32(len(ps)) == read/dwordSize { // ps buffer was too small to host every results, retry with a bigger one\n\t\t\tpsSize += 1024\n\t\t\tcontinue\n\t\t}\n\t\tfor _, pid := range ps[:read/dwordSize] {\n\t\t\tret = append(ret, int32(pid))\n\t\t}\n\t\treturn ret, nil\n\n\t}\n}\n\nfunc PidExistsWithContext(ctx context.Context, pid int32) (bool, error) {\n\tif pid == 0 { // special case for pid 0 System Idle Process\n\t\treturn true, nil\n\t}\n\tif pid < 0 {\n\t\treturn false, fmt.Errorf(\"invalid pid %v\", pid)\n\t}\n\tif pid%4 != 0 {\n\t\t// OpenProcess will succeed even on non-existing pid here https://devblogs.microsoft.com/oldnewthing/20080606-00/?p=22043\n\t\t// so we list every pid just to be sure and be future-proof\n\t\tpids, err := PidsWithContext(ctx)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tfor _, i := range pids {\n\t\t\tif i == pid {\n\t\t\t\treturn true, err\n\t\t\t}\n\t\t}\n\t\treturn false, err\n\t}\n\th, err := windows.OpenProcess(windows.SYNCHRONIZE, false, uint32(pid))\n\tif err == windows.ERROR_ACCESS_DENIED {\n\t\treturn true, nil\n\t}\n\tif err == windows.ERROR_INVALID_PARAMETER {\n\t\treturn false, nil\n\t}\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tdefer windows.CloseHandle(h)\n\tevent, err := windows.WaitForSingleObject(h, 0)\n\treturn event == uint32(windows.WAIT_TIMEOUT), err\n}\n\nfunc (p *Process) PpidWithContext(ctx context.Context) (int32, error) {\n\t// if cached already, return from cache\n\tcachedPpid := p.getPpid()\n\tif cachedPpid != 0 {\n\t\treturn cachedPpid, nil\n\t}\n\n\tppid, _, _, err := getFromSnapProcess(p.Pid)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// no errors and not cached already, so cache it\n\tp.setPpid(ppid)\n\n\treturn ppid, nil\n}\n\nfunc (p *Process) NameWithContext(ctx context.Context) (string, error) {\n\tif p.Pid == 0 {\n\t\treturn \"System Idle Process\", nil\n\t}\n\tif p.Pid == 4 {\n\t\treturn \"System\", nil\n\t}\n\n\texe, err := p.ExeWithContext(ctx)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not get Name: %s\", err)\n\t}\n\n\treturn filepath.Base(exe), nil\n}\n\nfunc (p *Process) TgidWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ExeWithContext(ctx context.Context) (string, error) {\n\tc, err := windows.OpenProcess(processQueryInformation, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer windows.CloseHandle(c)\n\tbuf := make([]uint16, syscall.MAX_LONG_PATH)\n\tsize := uint32(syscall.MAX_LONG_PATH)\n\tif err := procQueryFullProcessImageNameW.Find(); err == nil { // Vista+\n\t\tret, _, err := procQueryFullProcessImageNameW.Call(\n\t\t\tuintptr(c),\n\t\t\tuintptr(0),\n\t\t\tuintptr(unsafe.Pointer(&buf[0])),\n\t\t\tuintptr(unsafe.Pointer(&size)))\n\t\tif ret == 0 {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn windows.UTF16ToString(buf[:]), nil\n\t}\n\t// XP fallback\n\tret, _, err := procGetProcessImageFileNameW.Call(uintptr(c), uintptr(unsafe.Pointer(&buf[0])), uintptr(size))\n\tif ret == 0 {\n\t\treturn \"\", err\n\t}\n\treturn common.ConvertDOSPath(windows.UTF16ToString(buf[:])), nil\n}\n\nfunc (p *Process) CmdlineWithContext(_ context.Context) (string, error) {\n\tcmdline, err := getProcessCommandLine(p.Pid)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not get CommandLine: %s\", err)\n\t}\n\treturn cmdline, nil\n}\n\nfunc (p *Process) CmdlineSliceWithContext(ctx context.Context) ([]string, error) {\n\tcmdline, err := p.CmdlineWithContext(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn strings.Split(cmdline, \" \"), nil\n}\n\nfunc (p *Process) createTimeWithContext(ctx context.Context) (int64, error) {\n\tru, err := getRusage(p.Pid)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not get CreationDate: %s\", err)\n\t}\n\n\treturn ru.CreationTime.Nanoseconds() / 1000000, nil\n}\n\nfunc (p *Process) CwdWithContext(_ context.Context) (string, error) {\n\th, err := windows.OpenProcess(processQueryInformation|windows.PROCESS_VM_READ, false, uint32(p.Pid))\n\tif err == windows.ERROR_ACCESS_DENIED || err == windows.ERROR_INVALID_PARAMETER {\n\t\treturn \"\", nil\n\t}\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer syscall.CloseHandle(syscall.Handle(h))\n\n\tprocIs32Bits := is32BitProcess(h)\n\n\tif procIs32Bits {\n\t\tuserProcParams, err := getUserProcessParams32(h)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif userProcParams.CurrentDirectoryPathNameLength > 0 {\n\t\t\tcwd := readProcessMemory(syscall.Handle(h), procIs32Bits, uint64(userProcParams.CurrentDirectoryPathAddress), uint(userProcParams.CurrentDirectoryPathNameLength))\n\t\t\tif len(cwd) != int(userProcParams.CurrentDirectoryPathNameLength) {\n\t\t\t\treturn \"\", errors.New(\"cannot read current working directory\")\n\t\t\t}\n\n\t\t\treturn convertUTF16ToString(cwd), nil\n\t\t}\n\t} else {\n\t\tuserProcParams, err := getUserProcessParams64(h)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif userProcParams.CurrentDirectoryPathNameLength > 0 {\n\t\t\tcwd := readProcessMemory(syscall.Handle(h), procIs32Bits, userProcParams.CurrentDirectoryPathAddress, uint(userProcParams.CurrentDirectoryPathNameLength))\n\t\t\tif len(cwd) != int(userProcParams.CurrentDirectoryPathNameLength) {\n\t\t\t\treturn \"\", errors.New(\"cannot read current working directory\")\n\t\t\t}\n\n\t\t\treturn convertUTF16ToString(cwd), nil\n\t\t}\n\t}\n\n\t// if we reach here, we have no cwd\n\treturn \"\", nil\n}\n\nfunc (p *Process) StatusWithContext(ctx context.Context) ([]string, error) {\n\treturn []string{\"\"}, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ForegroundWithContext(ctx context.Context) (bool, error) {\n\treturn false, common.ErrNotImplementedError\n}\n\nfunc (p *Process) UsernameWithContext(ctx context.Context) (string, error) {\n\tpid := p.Pid\n\tc, err := windows.OpenProcess(processQueryInformation, false, uint32(pid))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer windows.CloseHandle(c)\n\n\tvar token syscall.Token\n\terr = syscall.OpenProcessToken(syscall.Handle(c), syscall.TOKEN_QUERY, &token)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer token.Close()\n\ttokenUser, err := token.GetTokenUser()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tuser, domain, _, err := tokenUser.User.Sid.LookupAccount(\"\")\n\treturn domain + \"\\\\\" + user, err\n}\n\nfunc (p *Process) UidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GidsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) GroupsWithContext(ctx context.Context) ([]uint32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TerminalWithContext(ctx context.Context) (string, error) {\n\treturn \"\", common.ErrNotImplementedError\n}\n\n// priorityClasses maps a win32 priority class to its WMI equivalent Win32_Process.Priority\n// https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-getpriorityclass\n// https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-process\nvar priorityClasses = map[int]int32{\n\t0x00008000: 10, // ABOVE_NORMAL_PRIORITY_CLASS\n\t0x00004000: 6,  // BELOW_NORMAL_PRIORITY_CLASS\n\t0x00000080: 13, // HIGH_PRIORITY_CLASS\n\t0x00000040: 4,  // IDLE_PRIORITY_CLASS\n\t0x00000020: 8,  // NORMAL_PRIORITY_CLASS\n\t0x00000100: 24, // REALTIME_PRIORITY_CLASS\n}\n\nfunc (p *Process) NiceWithContext(ctx context.Context) (int32, error) {\n\tc, err := windows.OpenProcess(processQueryInformation, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer windows.CloseHandle(c)\n\tret, _, err := procGetPriorityClass.Call(uintptr(c))\n\tif ret == 0 {\n\t\treturn 0, err\n\t}\n\tpriority, ok := priorityClasses[int(ret)]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"unknown priority class %v\", ret)\n\t}\n\treturn priority, nil\n}\n\nfunc (p *Process) IOniceWithContext(ctx context.Context) (int32, error) {\n\treturn 0, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitWithContext(ctx context.Context) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) RlimitUsageWithContext(ctx context.Context, gatherUsed bool) ([]RlimitStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) IOCountersWithContext(ctx context.Context) (*IOCountersStat, error) {\n\tc, err := windows.OpenProcess(processQueryInformation, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer windows.CloseHandle(c)\n\tvar ioCounters ioCounters\n\tret, _, err := procGetProcessIoCounters.Call(uintptr(c), uintptr(unsafe.Pointer(&ioCounters)))\n\tif ret == 0 {\n\t\treturn nil, err\n\t}\n\tstats := &IOCountersStat{\n\t\tReadCount:  ioCounters.ReadOperationCount,\n\t\tReadBytes:  ioCounters.ReadTransferCount,\n\t\tWriteCount: ioCounters.WriteOperationCount,\n\t\tWriteBytes: ioCounters.WriteTransferCount,\n\t}\n\n\treturn stats, nil\n}\n\nfunc (p *Process) NumCtxSwitchesWithContext(ctx context.Context) (*NumCtxSwitchesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\n// NumFDsWithContext returns the number of handles for a process on Windows,\n// not the number of file descriptors (FDs).\nfunc (p *Process) NumFDsWithContext(ctx context.Context) (int32, error) {\n\thandle, err := windows.OpenProcess(processQueryInformation, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer windows.CloseHandle(handle)\n\n\tvar handleCount uint32\n\tret, _, err := procGetProcessHandleCount.Call(uintptr(handle), uintptr(unsafe.Pointer(&handleCount)))\n\tif ret == 0 {\n\t\treturn 0, err\n\t}\n\treturn int32(handleCount), nil\n}\n\nfunc (p *Process) NumThreadsWithContext(ctx context.Context) (int32, error) {\n\tppid, ret, _, err := getFromSnapProcess(p.Pid)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// if no errors and not cached already, cache ppid\n\tp.parent = ppid\n\tif 0 == p.getPpid() {\n\t\tp.setPpid(ppid)\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) ThreadsWithContext(ctx context.Context) (map[int32]*cpu.TimesStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) TimesWithContext(ctx context.Context) (*cpu.TimesStat, error) {\n\tsysTimes, err := getProcessCPUTimes(p.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// User and kernel times are represented as a FILETIME structure\n\t// which contains a 64-bit value representing the number of\n\t// 100-nanosecond intervals since January 1, 1601 (UTC):\n\t// http://msdn.microsoft.com/en-us/library/ms724284(VS.85).aspx\n\t// To convert it into a float representing the seconds that the\n\t// process has executed in user/kernel mode I borrowed the code\n\t// below from psutil's _psutil_windows.c, and in turn from Python's\n\t// Modules/posixmodule.c\n\n\tuser := float64(sysTimes.UserTime.HighDateTime)*429.4967296 + float64(sysTimes.UserTime.LowDateTime)*1e-7\n\tkernel := float64(sysTimes.KernelTime.HighDateTime)*429.4967296 + float64(sysTimes.KernelTime.LowDateTime)*1e-7\n\n\treturn &cpu.TimesStat{\n\t\tUser:   user,\n\t\tSystem: kernel,\n\t}, nil\n}\n\nfunc (p *Process) CPUAffinityWithContext(ctx context.Context) ([]int32, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryInfoWithContext(ctx context.Context) (*MemoryInfoStat, error) {\n\tmem, err := getMemoryInfo(p.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tret := &MemoryInfoStat{\n\t\tRSS: uint64(mem.WorkingSetSize),\n\t\tVMS: uint64(mem.PagefileUsage),\n\t}\n\n\treturn ret, nil\n}\n\nfunc (p *Process) MemoryInfoExWithContext(ctx context.Context) (*MemoryInfoExStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) PageFaultsWithContext(ctx context.Context) (*PageFaultsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) ChildrenWithContext(ctx context.Context) ([]*Process, error) {\n\tout := []*Process{}\n\tsnap, err := windows.CreateToolhelp32Snapshot(windows.TH32CS_SNAPPROCESS, uint32(0))\n\tif err != nil {\n\t\treturn out, err\n\t}\n\tdefer windows.CloseHandle(snap)\n\tvar pe32 windows.ProcessEntry32\n\tpe32.Size = uint32(unsafe.Sizeof(pe32))\n\tif err := windows.Process32First(snap, &pe32); err != nil {\n\t\treturn out, err\n\t}\n\tfor {\n\t\tif pe32.ParentProcessID == uint32(p.Pid) {\n\t\t\tp, err := NewProcessWithContext(ctx, int32(pe32.ProcessID))\n\t\t\tif err == nil {\n\t\t\t\tout = append(out, p)\n\t\t\t}\n\t\t}\n\t\tif err = windows.Process32Next(snap, &pe32); err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn out, nil\n}\n\nfunc (p *Process) OpenFilesWithContext(ctx context.Context) ([]OpenFilesStat, error) {\n\tfiles := make([]OpenFilesStat, 0)\n\tfileExists := make(map[string]bool)\n\n\tprocess, err := windows.OpenProcess(common.ProcessQueryInformation, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuffer := make([]byte, 1024)\n\tvar size uint32\n\n\tst := common.CallWithExpandingBuffer(\n\t\tfunc() common.NtStatus {\n\t\t\treturn common.NtQuerySystemInformation(\n\t\t\t\tcommon.SystemExtendedHandleInformationClass,\n\t\t\t\t&buffer[0],\n\t\t\t\tuint32(len(buffer)),\n\t\t\t\t&size,\n\t\t\t)\n\t\t},\n\t\t&buffer,\n\t\t&size,\n\t)\n\tif st.IsError() {\n\t\treturn nil, st.Error()\n\t}\n\n\thandlesList := (*common.SystemExtendedHandleInformation)(unsafe.Pointer(&buffer[0]))\n\thandles := make([]common.SystemExtendedHandleTableEntryInformation, int(handlesList.NumberOfHandles))\n\thdr := (*reflect.SliceHeader)(unsafe.Pointer(&handles))\n\thdr.Data = uintptr(unsafe.Pointer(&handlesList.Handles[0]))\n\n\tcurrentProcess, err := windows.GetCurrentProcess()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, handle := range handles {\n\t\tvar file uintptr\n\t\tif int32(handle.UniqueProcessId) != p.Pid {\n\t\t\tcontinue\n\t\t}\n\t\tif windows.DuplicateHandle(process, windows.Handle(handle.HandleValue), currentProcess, (*windows.Handle)(&file),\n\t\t\t0, true, windows.DUPLICATE_SAME_ACCESS) != nil {\n\t\t\tcontinue\n\t\t}\n\t\t// release the new handle\n\t\tdefer windows.CloseHandle(windows.Handle(file))\n\n\t\tfileType, err := windows.GetFileType(windows.Handle(file))\n\t\tif err != nil || fileType != windows.FILE_TYPE_DISK {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar fileName string\n\t\tch := make(chan struct{})\n\n\t\tgo func() {\n\t\t\tvar buf [syscall.MAX_LONG_PATH]uint16\n\t\t\tn, err := windows.GetFinalPathNameByHandle(windows.Handle(file), &buf[0], syscall.MAX_LONG_PATH, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tfileName = string(utf16.Decode(buf[:n]))\n\t\t\tch <- struct{}{}\n\t\t}()\n\n\t\tselect {\n\t\tcase <-time.NewTimer(100 * time.Millisecond).C:\n\t\t\tcontinue\n\t\tcase <-ch:\n\t\t\tfileInfo, err := os.Stat(fileName)\n\t\t\tif err != nil || fileInfo.IsDir() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif _, exists := fileExists[fileName]; !exists {\n\t\t\t\tfiles = append(files, OpenFilesStat{\n\t\t\t\t\tPath: fileName,\n\t\t\t\t\tFd:   uint64(file),\n\t\t\t\t})\n\t\t\t\tfileExists[fileName] = true\n\t\t\t}\n\t\tcase <-ctx.Done():\n\t\t\treturn files, ctx.Err()\n\t\t}\n\t}\n\n\treturn files, nil\n}\n\nfunc (p *Process) ConnectionsWithContext(ctx context.Context) ([]net.ConnectionStat, error) {\n\treturn net.ConnectionsPidWithContext(ctx, \"all\", p.Pid)\n}\n\nfunc (p *Process) ConnectionsMaxWithContext(ctx context.Context, maxConn int) ([]net.ConnectionStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {\n\treturn nil, common.ErrNotImplementedError\n}\n\nfunc (p *Process) SendSignalWithContext(ctx context.Context, sig syscall.Signal) error {\n\treturn common.ErrNotImplementedError\n}\n\nfunc (p *Process) SuspendWithContext(ctx context.Context) error {\n\tc, err := windows.OpenProcess(windows.PROCESS_SUSPEND_RESUME, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer windows.CloseHandle(c)\n\n\tr1, _, _ := procNtSuspendProcess.Call(uintptr(c))\n\tif r1 != 0 {\n\t\t// See https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/596a1078-e883-4972-9bbc-49e60bebca55\n\t\treturn fmt.Errorf(\"NtStatus='0x%.8X'\", r1)\n\t}\n\n\treturn nil\n}\n\nfunc (p *Process) ResumeWithContext(ctx context.Context) error {\n\tc, err := windows.OpenProcess(windows.PROCESS_SUSPEND_RESUME, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer windows.CloseHandle(c)\n\n\tr1, _, _ := procNtResumeProcess.Call(uintptr(c))\n\tif r1 != 0 {\n\t\t// See https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/596a1078-e883-4972-9bbc-49e60bebca55\n\t\treturn fmt.Errorf(\"NtStatus='0x%.8X'\", r1)\n\t}\n\n\treturn nil\n}\n\nfunc (p *Process) TerminateWithContext(ctx context.Context) error {\n\tproc, err := windows.OpenProcess(windows.PROCESS_TERMINATE, false, uint32(p.Pid))\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = windows.TerminateProcess(proc, 0)\n\twindows.CloseHandle(proc)\n\treturn err\n}\n\nfunc (p *Process) KillWithContext(ctx context.Context) error {\n\tprocess, err := os.FindProcess(int(p.Pid))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer process.Release()\n\treturn process.Kill()\n}\n\nfunc (p *Process) EnvironWithContext(ctx context.Context) ([]string, error) {\n\tenvVars, err := getProcessEnvironmentVariables(p.Pid, ctx)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not get environment variables: %s\", err)\n\t}\n\treturn envVars, nil\n}\n\n// retrieve Ppid in a thread-safe manner\nfunc (p *Process) getPpid() int32 {\n\tp.parentMutex.RLock()\n\tdefer p.parentMutex.RUnlock()\n\treturn p.parent\n}\n\n// cache Ppid in a thread-safe manner (WINDOWS ONLY)\n// see https://psutil.readthedocs.io/en/latest/#psutil.Process.ppid\nfunc (p *Process) setPpid(ppid int32) {\n\tp.parentMutex.Lock()\n\tdefer p.parentMutex.Unlock()\n\tp.parent = ppid\n}\n\nfunc getFromSnapProcess(pid int32) (int32, int32, string, error) {\n\tsnap, err := windows.CreateToolhelp32Snapshot(windows.TH32CS_SNAPPROCESS, uint32(pid))\n\tif err != nil {\n\t\treturn 0, 0, \"\", err\n\t}\n\tdefer windows.CloseHandle(snap)\n\tvar pe32 windows.ProcessEntry32\n\tpe32.Size = uint32(unsafe.Sizeof(pe32))\n\tif err = windows.Process32First(snap, &pe32); err != nil {\n\t\treturn 0, 0, \"\", err\n\t}\n\tfor {\n\t\tif pe32.ProcessID == uint32(pid) {\n\t\t\tszexe := windows.UTF16ToString(pe32.ExeFile[:])\n\t\t\treturn int32(pe32.ParentProcessID), int32(pe32.Threads), szexe, nil\n\t\t}\n\t\tif err = windows.Process32Next(snap, &pe32); err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn 0, 0, \"\", fmt.Errorf(\"couldn't find pid: %d\", pid)\n}\n\nfunc ProcessesWithContext(ctx context.Context) ([]*Process, error) {\n\tout := []*Process{}\n\n\tpids, err := PidsWithContext(ctx)\n\tif err != nil {\n\t\treturn out, fmt.Errorf(\"could not get Processes %s\", err)\n\t}\n\n\tfor _, pid := range pids {\n\t\tp, err := NewProcessWithContext(ctx, pid)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, p)\n\t}\n\n\treturn out, nil\n}\n\nfunc getRusage(pid int32) (*windows.Rusage, error) {\n\tvar CPU windows.Rusage\n\n\tc, err := windows.OpenProcess(processQueryInformation, false, uint32(pid))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer windows.CloseHandle(c)\n\n\tif err := windows.GetProcessTimes(c, &CPU.CreationTime, &CPU.ExitTime, &CPU.KernelTime, &CPU.UserTime); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &CPU, nil\n}\n\nfunc getMemoryInfo(pid int32) (PROCESS_MEMORY_COUNTERS, error) {\n\tvar mem PROCESS_MEMORY_COUNTERS\n\tc, err := windows.OpenProcess(processQueryInformation, false, uint32(pid))\n\tif err != nil {\n\t\treturn mem, err\n\t}\n\tdefer windows.CloseHandle(c)\n\tif err := getProcessMemoryInfo(c, &mem); err != nil {\n\t\treturn mem, err\n\t}\n\n\treturn mem, err\n}\n\nfunc getProcessMemoryInfo(h windows.Handle, mem *PROCESS_MEMORY_COUNTERS) (err error) {\n\tr1, _, e1 := syscall.Syscall(procGetProcessMemoryInfo.Addr(), 3, uintptr(h), uintptr(unsafe.Pointer(mem)), uintptr(unsafe.Sizeof(*mem)))\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = error(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\ntype SYSTEM_TIMES struct {\n\tCreateTime syscall.Filetime\n\tExitTime   syscall.Filetime\n\tKernelTime syscall.Filetime\n\tUserTime   syscall.Filetime\n}\n\nfunc getProcessCPUTimes(pid int32) (SYSTEM_TIMES, error) {\n\tvar times SYSTEM_TIMES\n\n\th, err := windows.OpenProcess(processQueryInformation, false, uint32(pid))\n\tif err != nil {\n\t\treturn times, err\n\t}\n\tdefer windows.CloseHandle(h)\n\n\terr = syscall.GetProcessTimes(\n\t\tsyscall.Handle(h),\n\t\t&times.CreateTime,\n\t\t&times.ExitTime,\n\t\t&times.KernelTime,\n\t\t&times.UserTime,\n\t)\n\n\treturn times, err\n}\n\nfunc getUserProcessParams32(handle windows.Handle) (rtlUserProcessParameters32, error) {\n\tpebAddress, err := queryPebAddress(syscall.Handle(handle), true)\n\tif err != nil {\n\t\treturn rtlUserProcessParameters32{}, fmt.Errorf(\"cannot locate process PEB: %w\", err)\n\t}\n\n\tbuf := readProcessMemory(syscall.Handle(handle), true, pebAddress, uint(unsafe.Sizeof(processEnvironmentBlock32{})))\n\tif len(buf) != int(unsafe.Sizeof(processEnvironmentBlock32{})) {\n\t\treturn rtlUserProcessParameters32{}, fmt.Errorf(\"cannot read process PEB\")\n\t}\n\tpeb := (*processEnvironmentBlock32)(unsafe.Pointer(&buf[0]))\n\tuserProcessAddress := uint64(peb.ProcessParameters)\n\tbuf = readProcessMemory(syscall.Handle(handle), true, userProcessAddress, uint(unsafe.Sizeof(rtlUserProcessParameters32{})))\n\tif len(buf) != int(unsafe.Sizeof(rtlUserProcessParameters32{})) {\n\t\treturn rtlUserProcessParameters32{}, fmt.Errorf(\"cannot read user process parameters\")\n\t}\n\treturn *(*rtlUserProcessParameters32)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc getUserProcessParams64(handle windows.Handle) (rtlUserProcessParameters64, error) {\n\tpebAddress, err := queryPebAddress(syscall.Handle(handle), false)\n\tif err != nil {\n\t\treturn rtlUserProcessParameters64{}, fmt.Errorf(\"cannot locate process PEB: %w\", err)\n\t}\n\n\tbuf := readProcessMemory(syscall.Handle(handle), false, pebAddress, uint(unsafe.Sizeof(processEnvironmentBlock64{})))\n\tif len(buf) != int(unsafe.Sizeof(processEnvironmentBlock64{})) {\n\t\treturn rtlUserProcessParameters64{}, fmt.Errorf(\"cannot read process PEB\")\n\t}\n\tpeb := (*processEnvironmentBlock64)(unsafe.Pointer(&buf[0]))\n\tuserProcessAddress := peb.ProcessParameters\n\tbuf = readProcessMemory(syscall.Handle(handle), false, userProcessAddress, uint(unsafe.Sizeof(rtlUserProcessParameters64{})))\n\tif len(buf) != int(unsafe.Sizeof(rtlUserProcessParameters64{})) {\n\t\treturn rtlUserProcessParameters64{}, fmt.Errorf(\"cannot read user process parameters\")\n\t}\n\treturn *(*rtlUserProcessParameters64)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc is32BitProcess(h windows.Handle) bool {\n\tconst (\n\t\tPROCESSOR_ARCHITECTURE_INTEL = 0\n\t\tPROCESSOR_ARCHITECTURE_ARM   = 5\n\t\tPROCESSOR_ARCHITECTURE_ARM64 = 12\n\t\tPROCESSOR_ARCHITECTURE_IA64  = 6\n\t\tPROCESSOR_ARCHITECTURE_AMD64 = 9\n\t)\n\n\tvar procIs32Bits bool\n\tswitch processorArchitecture {\n\tcase PROCESSOR_ARCHITECTURE_INTEL, PROCESSOR_ARCHITECTURE_ARM:\n\t\tprocIs32Bits = true\n\tcase PROCESSOR_ARCHITECTURE_ARM64, PROCESSOR_ARCHITECTURE_IA64, PROCESSOR_ARCHITECTURE_AMD64:\n\t\tvar wow64 uint\n\n\t\tret, _, _ := common.ProcNtQueryInformationProcess.Call(\n\t\t\tuintptr(h),\n\t\t\tuintptr(common.ProcessWow64Information),\n\t\t\tuintptr(unsafe.Pointer(&wow64)),\n\t\t\tuintptr(unsafe.Sizeof(wow64)),\n\t\t\tuintptr(0),\n\t\t)\n\t\tif int(ret) >= 0 {\n\t\t\tif wow64 != 0 {\n\t\t\t\tprocIs32Bits = true\n\t\t\t}\n\t\t} else {\n\t\t\t// if the OS does not support the call, we fallback into the bitness of the app\n\t\t\tif unsafe.Sizeof(wow64) == 4 {\n\t\t\t\tprocIs32Bits = true\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\t// for other unknown platforms, we rely on process platform\n\t\tif unsafe.Sizeof(processorArchitecture) == 8 {\n\t\t\tprocIs32Bits = false\n\t\t} else {\n\t\t\tprocIs32Bits = true\n\t\t}\n\t}\n\treturn procIs32Bits\n}\n\nfunc getProcessEnvironmentVariables(pid int32, ctx context.Context) ([]string, error) {\n\th, err := windows.OpenProcess(processQueryInformation|windows.PROCESS_VM_READ, false, uint32(pid))\n\tif err == windows.ERROR_ACCESS_DENIED || err == windows.ERROR_INVALID_PARAMETER {\n\t\treturn nil, nil\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer syscall.CloseHandle(syscall.Handle(h))\n\n\tprocIs32Bits := is32BitProcess(h)\n\n\tvar processParameterBlockAddress uint64\n\n\tif procIs32Bits {\n\t\tpeb, err := getUserProcessParams32(h)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tprocessParameterBlockAddress = uint64(peb.EnvironmentAddress)\n\t} else {\n\t\tpeb, err := getUserProcessParams64(h)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tprocessParameterBlockAddress = peb.EnvironmentAddress\n\t}\n\tenvvarScanner := bufio.NewScanner(&processReader{\n\t\tprocessHandle:  h,\n\t\tis32BitProcess: procIs32Bits,\n\t\toffset:         processParameterBlockAddress,\n\t})\n\tenvvarScanner.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) {\n\t\tif atEOF && len(data) == 0 {\n\t\t\treturn 0, nil, nil\n\t\t}\n\t\t// Check for UTF-16 zero character\n\t\tfor i := 0; i < len(data)-1; i += 2 {\n\t\t\tif data[i] == 0 && data[i+1] == 0 {\n\t\t\t\treturn i + 2, data[0:i], nil\n\t\t\t}\n\t\t}\n\t\tif atEOF {\n\t\t\treturn len(data), data, nil\n\t\t}\n\t\t// Request more data\n\t\treturn 0, nil, nil\n\t})\n\tvar envVars []string\n\tfor envvarScanner.Scan() {\n\t\tentry := envvarScanner.Bytes()\n\t\tif len(entry) == 0 {\n\t\t\tbreak // Block is finished\n\t\t}\n\t\tenvVars = append(envVars, convertUTF16ToString(entry))\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\tbreak\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t}\n\tif err := envvarScanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn envVars, nil\n}\n\ntype processReader struct {\n\tprocessHandle  windows.Handle\n\tis32BitProcess bool\n\toffset         uint64\n}\n\nfunc (p *processReader) Read(buf []byte) (int, error) {\n\tprocessMemory := readProcessMemory(syscall.Handle(p.processHandle), p.is32BitProcess, p.offset, uint(len(buf)))\n\tif len(processMemory) == 0 {\n\t\treturn 0, io.EOF\n\t}\n\tcopy(buf, processMemory)\n\tp.offset += uint64(len(processMemory))\n\treturn len(processMemory), nil\n}\n\nfunc getProcessCommandLine(pid int32) (string, error) {\n\th, err := windows.OpenProcess(processQueryInformation|windows.PROCESS_VM_READ, false, uint32(pid))\n\tif err == windows.ERROR_ACCESS_DENIED || err == windows.ERROR_INVALID_PARAMETER {\n\t\treturn \"\", nil\n\t}\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer syscall.CloseHandle(syscall.Handle(h))\n\n\tprocIs32Bits := is32BitProcess(h)\n\n\tif procIs32Bits {\n\t\tuserProcParams, err := getUserProcessParams32(h)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif userProcParams.CommandLineLength > 0 {\n\t\t\tcmdLine := readProcessMemory(syscall.Handle(h), procIs32Bits, uint64(userProcParams.CommandLineAddress), uint(userProcParams.CommandLineLength))\n\t\t\tif len(cmdLine) != int(userProcParams.CommandLineLength) {\n\t\t\t\treturn \"\", errors.New(\"cannot read cmdline\")\n\t\t\t}\n\n\t\t\treturn convertUTF16ToString(cmdLine), nil\n\t\t}\n\t} else {\n\t\tuserProcParams, err := getUserProcessParams64(h)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif userProcParams.CommandLineLength > 0 {\n\t\t\tcmdLine := readProcessMemory(syscall.Handle(h), procIs32Bits, userProcParams.CommandLineAddress, uint(userProcParams.CommandLineLength))\n\t\t\tif len(cmdLine) != int(userProcParams.CommandLineLength) {\n\t\t\t\treturn \"\", errors.New(\"cannot read cmdline\")\n\t\t\t}\n\n\t\t\treturn convertUTF16ToString(cmdLine), nil\n\t\t}\n\t}\n\n\t// if we reach here, we have no command line\n\treturn \"\", nil\n}\n\nfunc convertUTF16ToString(src []byte) string {\n\tsrcLen := len(src) / 2\n\n\tcodePoints := make([]uint16, srcLen)\n\n\tsrcIdx := 0\n\tfor i := 0; i < srcLen; i++ {\n\t\tcodePoints[i] = uint16(src[srcIdx]) | uint16(src[srcIdx+1])<<8\n\t\tsrcIdx += 2\n\t}\n\treturn syscall.UTF16ToString(codePoints)\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_windows_32bit.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build (windows && 386) || (windows && arm)\n\npackage process\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"golang.org/x/sys/windows\"\n)\n\ntype PROCESS_MEMORY_COUNTERS struct {\n\tCB                         uint32\n\tPageFaultCount             uint32\n\tPeakWorkingSetSize         uint32\n\tWorkingSetSize             uint32\n\tQuotaPeakPagedPoolUsage    uint32\n\tQuotaPagedPoolUsage        uint32\n\tQuotaPeakNonPagedPoolUsage uint32\n\tQuotaNonPagedPoolUsage     uint32\n\tPagefileUsage              uint32\n\tPeakPagefileUsage          uint32\n}\n\nfunc queryPebAddress(procHandle syscall.Handle, is32BitProcess bool) (uint64, error) {\n\tif is32BitProcess {\n\t\t// we are on a 32-bit process reading an external 32-bit process\n\t\tvar info processBasicInformation32\n\n\t\tret, _, _ := common.ProcNtQueryInformationProcess.Call(\n\t\t\tuintptr(procHandle),\n\t\t\tuintptr(common.ProcessBasicInformation),\n\t\t\tuintptr(unsafe.Pointer(&info)),\n\t\t\tuintptr(unsafe.Sizeof(info)),\n\t\t\tuintptr(0),\n\t\t)\n\t\tif status := windows.NTStatus(ret); status == windows.STATUS_SUCCESS {\n\t\t\treturn uint64(info.PebBaseAddress), nil\n\t\t} else {\n\t\t\treturn 0, windows.NTStatus(ret)\n\t\t}\n\t} else {\n\t\t// we are on a 32-bit process reading an external 64-bit process\n\t\tif common.ProcNtWow64QueryInformationProcess64.Find() == nil { // avoid panic\n\t\t\tvar info processBasicInformation64\n\n\t\t\tret, _, _ := common.ProcNtWow64QueryInformationProcess64.Call(\n\t\t\t\tuintptr(procHandle),\n\t\t\t\tuintptr(common.ProcessBasicInformation),\n\t\t\t\tuintptr(unsafe.Pointer(&info)),\n\t\t\t\tuintptr(unsafe.Sizeof(info)),\n\t\t\t\tuintptr(0),\n\t\t\t)\n\t\t\tif status := windows.NTStatus(ret); status == windows.STATUS_SUCCESS {\n\t\t\t\treturn info.PebBaseAddress, nil\n\t\t\t} else {\n\t\t\t\treturn 0, windows.NTStatus(ret)\n\t\t\t}\n\t\t} else {\n\t\t\treturn 0, errors.New(\"can't find API to query 64 bit process from 32 bit\")\n\t\t}\n\t}\n}\n\nfunc readProcessMemory(h syscall.Handle, is32BitProcess bool, address uint64, size uint) []byte {\n\tif is32BitProcess {\n\t\tvar read uint\n\n\t\tbuffer := make([]byte, size)\n\n\t\tret, _, _ := common.ProcNtReadVirtualMemory.Call(\n\t\t\tuintptr(h),\n\t\t\tuintptr(address),\n\t\t\tuintptr(unsafe.Pointer(&buffer[0])),\n\t\t\tuintptr(size),\n\t\t\tuintptr(unsafe.Pointer(&read)),\n\t\t)\n\t\tif int(ret) >= 0 && read > 0 {\n\t\t\treturn buffer[:read]\n\t\t}\n\t} else {\n\t\t// reading a 64-bit process from a 32-bit one\n\t\tif common.ProcNtWow64ReadVirtualMemory64.Find() == nil { // avoid panic\n\t\t\tvar read uint64\n\n\t\t\tbuffer := make([]byte, size)\n\n\t\t\tret, _, _ := common.ProcNtWow64ReadVirtualMemory64.Call(\n\t\t\t\tuintptr(h),\n\t\t\t\tuintptr(address&0xFFFFFFFF), // the call expects a 64-bit value\n\t\t\t\tuintptr(address>>32),\n\t\t\t\tuintptr(unsafe.Pointer(&buffer[0])),\n\t\t\t\tuintptr(size), // the call expects a 64-bit value\n\t\t\t\tuintptr(0),    // but size is 32-bit so pass zero as the high dword\n\t\t\t\tuintptr(unsafe.Pointer(&read)),\n\t\t\t)\n\t\t\tif int(ret) >= 0 && read > 0 {\n\t\t\t\treturn buffer[:uint(read)]\n\t\t\t}\n\t\t}\n\t}\n\n\t// if we reach here, an error happened\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/shirou/gopsutil/v4/process/process_windows_64bit.go",
    "content": "// SPDX-License-Identifier: BSD-3-Clause\n//go:build (windows && amd64) || (windows && arm64)\n\npackage process\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/shirou/gopsutil/v4/internal/common\"\n\t\"golang.org/x/sys/windows\"\n)\n\ntype PROCESS_MEMORY_COUNTERS struct {\n\tCB                         uint32\n\tPageFaultCount             uint32\n\tPeakWorkingSetSize         uint64\n\tWorkingSetSize             uint64\n\tQuotaPeakPagedPoolUsage    uint64\n\tQuotaPagedPoolUsage        uint64\n\tQuotaPeakNonPagedPoolUsage uint64\n\tQuotaNonPagedPoolUsage     uint64\n\tPagefileUsage              uint64\n\tPeakPagefileUsage          uint64\n}\n\nfunc queryPebAddress(procHandle syscall.Handle, is32BitProcess bool) (uint64, error) {\n\tif is32BitProcess {\n\t\t// we are on a 64-bit process reading an external 32-bit process\n\t\tvar wow64 uint\n\n\t\tret, _, _ := common.ProcNtQueryInformationProcess.Call(\n\t\t\tuintptr(procHandle),\n\t\t\tuintptr(common.ProcessWow64Information),\n\t\t\tuintptr(unsafe.Pointer(&wow64)),\n\t\t\tuintptr(unsafe.Sizeof(wow64)),\n\t\t\tuintptr(0),\n\t\t)\n\t\tif status := windows.NTStatus(ret); status == windows.STATUS_SUCCESS {\n\t\t\treturn uint64(wow64), nil\n\t\t} else {\n\t\t\treturn 0, windows.NTStatus(ret)\n\t\t}\n\t} else {\n\t\t// we are on a 64-bit process reading an external 64-bit process\n\t\tvar info processBasicInformation64\n\n\t\tret, _, _ := common.ProcNtQueryInformationProcess.Call(\n\t\t\tuintptr(procHandle),\n\t\t\tuintptr(common.ProcessBasicInformation),\n\t\t\tuintptr(unsafe.Pointer(&info)),\n\t\t\tuintptr(unsafe.Sizeof(info)),\n\t\t\tuintptr(0),\n\t\t)\n\t\tif status := windows.NTStatus(ret); status == windows.STATUS_SUCCESS {\n\t\t\treturn info.PebBaseAddress, nil\n\t\t} else {\n\t\t\treturn 0, windows.NTStatus(ret)\n\t\t}\n\t}\n}\n\nfunc readProcessMemory(procHandle syscall.Handle, _ bool, address uint64, size uint) []byte {\n\tvar read uint\n\n\tbuffer := make([]byte, size)\n\n\tret, _, _ := common.ProcNtReadVirtualMemory.Call(\n\t\tuintptr(procHandle),\n\t\tuintptr(address),\n\t\tuintptr(unsafe.Pointer(&buffer[0])),\n\t\tuintptr(size),\n\t\tuintptr(unsafe.Pointer(&read)),\n\t)\n\tif int(ret) >= 0 && read > 0 {\n\t\treturn buffer[:read]\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/shopspring/decimal/.gitignore",
    "content": ".git\n*.swp\n\n# IntelliJ\n.idea/\n*.iml\n"
  },
  {
    "path": "vendor/github.com/shopspring/decimal/.travis.yml",
    "content": "language: go\n\ngo:\n  - 1.7.x\n  - 1.12.x\n  - 1.13.x\n  - tip\n\ninstall:\n  - go build .\n\nscript:\n  - go test -v\n"
  },
  {
    "path": "vendor/github.com/shopspring/decimal/CHANGELOG.md",
    "content": "## Decimal v1.2.0 \n\n#### BREAKING\n- Drop support for Go version older than 1.7 [#172](https://github.com/shopspring/decimal/pull/172)\n\n#### FEATURES\n- Add NewFromInt and NewFromInt32 initializers [#72](https://github.com/shopspring/decimal/pull/72)\n- Add support for Go modules [#157](https://github.com/shopspring/decimal/pull/157)\n- Add BigInt, BigFloat helper methods [#171](https://github.com/shopspring/decimal/pull/171)\n\n#### ENHANCEMENTS\n- Memory usage optimization [#160](https://github.com/shopspring/decimal/pull/160)\n- Updated travis CI golang versions [#156](https://github.com/shopspring/decimal/pull/156)\n- Update documentation [#173](https://github.com/shopspring/decimal/pull/173)\n- Improve code quality [#174](https://github.com/shopspring/decimal/pull/174)\n\n#### BUGFIXES\n- Revert remove insignificant digits [#159](https://github.com/shopspring/decimal/pull/159)\n- Remove 15 interval for RoundCash [#166](https://github.com/shopspring/decimal/pull/166)\n"
  },
  {
    "path": "vendor/github.com/shopspring/decimal/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Spring, 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\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n- Based on https://github.com/oguzbilgic/fpd, which has the following license:\n\"\"\"\nThe MIT License (MIT)\n\nCopyright (c) 2013 Oguz Bilgic\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": "vendor/github.com/shopspring/decimal/README.md",
    "content": "# decimal\n\n[![Build Status](https://travis-ci.org/shopspring/decimal.png?branch=master)](https://travis-ci.org/shopspring/decimal) [![GoDoc](https://godoc.org/github.com/shopspring/decimal?status.svg)](https://godoc.org/github.com/shopspring/decimal) [![Go Report Card](https://goreportcard.com/badge/github.com/shopspring/decimal)](https://goreportcard.com/report/github.com/shopspring/decimal)\n\nArbitrary-precision fixed-point decimal numbers in go.\n\n_Note:_ Decimal library can \"only\" represent numbers with a maximum of 2^31 digits after the decimal point.\n\n## Features\n\n * The zero-value is 0, and is safe to use without initialization\n * Addition, subtraction, multiplication with no loss of precision\n * Division with specified precision\n * Database/sql serialization/deserialization\n * JSON and XML serialization/deserialization\n\n## Install\n\nRun `go get github.com/shopspring/decimal`\n\n## Requirements \n\nDecimal library requires Go version `>=1.7`\n\n## Usage\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/shopspring/decimal\"\n)\n\nfunc main() {\n\tprice, err := decimal.NewFromString(\"136.02\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tquantity := decimal.NewFromInt(3)\n\n\tfee, _ := decimal.NewFromString(\".035\")\n\ttaxRate, _ := decimal.NewFromString(\".08875\")\n\n\tsubtotal := price.Mul(quantity)\n\n\tpreTax := subtotal.Mul(fee.Add(decimal.NewFromFloat(1)))\n\n\ttotal := preTax.Mul(taxRate.Add(decimal.NewFromFloat(1)))\n\n\tfmt.Println(\"Subtotal:\", subtotal)                      // Subtotal: 408.06\n\tfmt.Println(\"Pre-tax:\", preTax)                         // Pre-tax: 422.3421\n\tfmt.Println(\"Taxes:\", total.Sub(preTax))                // Taxes: 37.482861375\n\tfmt.Println(\"Total:\", total)                            // Total: 459.824961375\n\tfmt.Println(\"Tax rate:\", total.Sub(preTax).Div(preTax)) // Tax rate: 0.08875\n}\n```\n\n## Documentation\n\nhttp://godoc.org/github.com/shopspring/decimal\n\n## Production Usage\n\n* [Spring](https://shopspring.com/), since August 14, 2014.\n* If you are using this in production, please let us know!\n\n## FAQ\n\n#### Why don't you just use float64?\n\nBecause float64 (or any binary floating point type, actually) can't represent\nnumbers such as `0.1` exactly.\n\nConsider this code: http://play.golang.org/p/TQBd4yJe6B You might expect that\nit prints out `10`, but it actually prints `9.999999999999831`. Over time,\nthese small errors can really add up!\n\n#### Why don't you just use big.Rat?\n\nbig.Rat is fine for representing rational numbers, but Decimal is better for\nrepresenting money. Why? Here's a (contrived) example:\n\nLet's say you use big.Rat, and you have two numbers, x and y, both\nrepresenting 1/3, and you have `z = 1 - x - y = 1/3`. If you print each one\nout, the string output has to stop somewhere (let's say it stops at 3 decimal\ndigits, for simplicity), so you'll get 0.333, 0.333, and 0.333. But where did\nthe other 0.001 go?\n\nHere's the above example as code: http://play.golang.org/p/lCZZs0w9KE\n\nWith Decimal, the strings being printed out represent the number exactly. So,\nif you have `x = y = 1/3` (with precision 3), they will actually be equal to\n0.333, and when you do `z = 1 - x - y`, `z` will be equal to .334. No money is\nunaccounted for!\n\nYou still have to be careful. If you want to split a number `N` 3 ways, you\ncan't just send `N/3` to three different people. You have to pick one to send\n`N - (2/3*N)` to. That person will receive the fraction of a penny remainder.\n\nBut, it is much easier to be careful with Decimal than with big.Rat.\n\n#### Why isn't the API similar to big.Int's?\n\nbig.Int's API is built to reduce the number of memory allocations for maximal\nperformance. This makes sense for its use-case, but the trade-off is that the\nAPI is awkward and easy to misuse.\n\nFor example, to add two big.Ints, you do: `z := new(big.Int).Add(x, y)`. A\ndeveloper unfamiliar with this API might try to do `z := a.Add(a, b)`. This\nmodifies `a` and sets `z` as an alias for `a`, which they might not expect. It\nalso modifies any other aliases to `a`.\n\nHere's an example of the subtle bugs you can introduce with big.Int's API:\nhttps://play.golang.org/p/x2R_78pa8r\n\nIn contrast, it's difficult to make such mistakes with decimal. Decimals\nbehave like other go numbers types: even though `a = b` will not deep copy\n`b` into `a`, it is impossible to modify a Decimal, since all Decimal methods\nreturn new Decimals and do not modify the originals. The downside is that\nthis causes extra allocations, so Decimal is less performant.  My assumption\nis that if you're using Decimals, you probably care more about correctness\nthan performance.\n\n## License\n\nThe MIT License (MIT)\n\nThis is a heavily modified fork of [fpd.Decimal](https://github.com/oguzbilgic/fpd), which was also released under the MIT License.\n"
  },
  {
    "path": "vendor/github.com/shopspring/decimal/decimal-go.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Multiprecision decimal numbers.\n// For floating-point formatting only; not general purpose.\n// Only operations are assign and (binary) left/right shift.\n// Can do binary floating point in multiprecision decimal precisely\n// because 2 divides 10; cannot do decimal floating point\n// in multiprecision binary precisely.\n\npackage decimal\n\ntype decimal struct {\n\td     [800]byte // digits, big-endian representation\n\tnd    int       // number of digits used\n\tdp    int       // decimal point\n\tneg   bool      // negative flag\n\ttrunc bool      // discarded nonzero digits beyond d[:nd]\n}\n\nfunc (a *decimal) String() string {\n\tn := 10 + a.nd\n\tif a.dp > 0 {\n\t\tn += a.dp\n\t}\n\tif a.dp < 0 {\n\t\tn += -a.dp\n\t}\n\n\tbuf := make([]byte, n)\n\tw := 0\n\tswitch {\n\tcase a.nd == 0:\n\t\treturn \"0\"\n\n\tcase a.dp <= 0:\n\t\t// zeros fill space between decimal point and digits\n\t\tbuf[w] = '0'\n\t\tw++\n\t\tbuf[w] = '.'\n\t\tw++\n\t\tw += digitZero(buf[w : w+-a.dp])\n\t\tw += copy(buf[w:], a.d[0:a.nd])\n\n\tcase a.dp < a.nd:\n\t\t// decimal point in middle of digits\n\t\tw += copy(buf[w:], a.d[0:a.dp])\n\t\tbuf[w] = '.'\n\t\tw++\n\t\tw += copy(buf[w:], a.d[a.dp:a.nd])\n\n\tdefault:\n\t\t// zeros fill space between digits and decimal point\n\t\tw += copy(buf[w:], a.d[0:a.nd])\n\t\tw += digitZero(buf[w : w+a.dp-a.nd])\n\t}\n\treturn string(buf[0:w])\n}\n\nfunc digitZero(dst []byte) int {\n\tfor i := range dst {\n\t\tdst[i] = '0'\n\t}\n\treturn len(dst)\n}\n\n// trim trailing zeros from number.\n// (They are meaningless; the decimal point is tracked\n// independent of the number of digits.)\nfunc trim(a *decimal) {\n\tfor a.nd > 0 && a.d[a.nd-1] == '0' {\n\t\ta.nd--\n\t}\n\tif a.nd == 0 {\n\t\ta.dp = 0\n\t}\n}\n\n// Assign v to a.\nfunc (a *decimal) Assign(v uint64) {\n\tvar buf [24]byte\n\n\t// Write reversed decimal in buf.\n\tn := 0\n\tfor v > 0 {\n\t\tv1 := v / 10\n\t\tv -= 10 * v1\n\t\tbuf[n] = byte(v + '0')\n\t\tn++\n\t\tv = v1\n\t}\n\n\t// Reverse again to produce forward decimal in a.d.\n\ta.nd = 0\n\tfor n--; n >= 0; n-- {\n\t\ta.d[a.nd] = buf[n]\n\t\ta.nd++\n\t}\n\ta.dp = a.nd\n\ttrim(a)\n}\n\n// Maximum shift that we can do in one pass without overflow.\n// A uint has 32 or 64 bits, and we have to be able to accommodate 9<<k.\nconst uintSize = 32 << (^uint(0) >> 63)\nconst maxShift = uintSize - 4\n\n// Binary shift right (/ 2) by k bits.  k <= maxShift to avoid overflow.\nfunc rightShift(a *decimal, k uint) {\n\tr := 0 // read pointer\n\tw := 0 // write pointer\n\n\t// Pick up enough leading digits to cover first shift.\n\tvar n uint\n\tfor ; n>>k == 0; r++ {\n\t\tif r >= a.nd {\n\t\t\tif n == 0 {\n\t\t\t\t// a == 0; shouldn't get here, but handle anyway.\n\t\t\t\ta.nd = 0\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfor n>>k == 0 {\n\t\t\t\tn = n * 10\n\t\t\t\tr++\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tc := uint(a.d[r])\n\t\tn = n*10 + c - '0'\n\t}\n\ta.dp -= r - 1\n\n\tvar mask uint = (1 << k) - 1\n\n\t// Pick up a digit, put down a digit.\n\tfor ; r < a.nd; r++ {\n\t\tc := uint(a.d[r])\n\t\tdig := n >> k\n\t\tn &= mask\n\t\ta.d[w] = byte(dig + '0')\n\t\tw++\n\t\tn = n*10 + c - '0'\n\t}\n\n\t// Put down extra digits.\n\tfor n > 0 {\n\t\tdig := n >> k\n\t\tn &= mask\n\t\tif w < len(a.d) {\n\t\t\ta.d[w] = byte(dig + '0')\n\t\t\tw++\n\t\t} else if dig > 0 {\n\t\t\ta.trunc = true\n\t\t}\n\t\tn = n * 10\n\t}\n\n\ta.nd = w\n\ttrim(a)\n}\n\n// Cheat sheet for left shift: table indexed by shift count giving\n// number of new digits that will be introduced by that shift.\n//\n// For example, leftcheats[4] = {2, \"625\"}.  That means that\n// if we are shifting by 4 (multiplying by 16), it will add 2 digits\n// when the string prefix is \"625\" through \"999\", and one fewer digit\n// if the string prefix is \"000\" through \"624\".\n//\n// Credit for this trick goes to Ken.\n\ntype leftCheat struct {\n\tdelta  int    // number of new digits\n\tcutoff string // minus one digit if original < a.\n}\n\nvar leftcheats = []leftCheat{\n\t// Leading digits of 1/2^i = 5^i.\n\t// 5^23 is not an exact 64-bit floating point number,\n\t// so have to use bc for the math.\n\t// Go up to 60 to be large enough for 32bit and 64bit platforms.\n\t/*\n\t\tseq 60 | sed 's/^/5^/' | bc |\n\t\tawk 'BEGIN{ print \"\\t{ 0, \\\"\\\" },\" }\n\t\t{\n\t\t\tlog2 = log(2)/log(10)\n\t\t\tprintf(\"\\t{ %d, \\\"%s\\\" },\\t// * %d\\n\",\n\t\t\t\tint(log2*NR+1), $0, 2**NR)\n\t\t}'\n\t*/\n\t{0, \"\"},\n\t{1, \"5\"},                                           // * 2\n\t{1, \"25\"},                                          // * 4\n\t{1, \"125\"},                                         // * 8\n\t{2, \"625\"},                                         // * 16\n\t{2, \"3125\"},                                        // * 32\n\t{2, \"15625\"},                                       // * 64\n\t{3, \"78125\"},                                       // * 128\n\t{3, \"390625\"},                                      // * 256\n\t{3, \"1953125\"},                                     // * 512\n\t{4, \"9765625\"},                                     // * 1024\n\t{4, \"48828125\"},                                    // * 2048\n\t{4, \"244140625\"},                                   // * 4096\n\t{4, \"1220703125\"},                                  // * 8192\n\t{5, \"6103515625\"},                                  // * 16384\n\t{5, \"30517578125\"},                                 // * 32768\n\t{5, \"152587890625\"},                                // * 65536\n\t{6, \"762939453125\"},                                // * 131072\n\t{6, \"3814697265625\"},                               // * 262144\n\t{6, \"19073486328125\"},                              // * 524288\n\t{7, \"95367431640625\"},                              // * 1048576\n\t{7, \"476837158203125\"},                             // * 2097152\n\t{7, \"2384185791015625\"},                            // * 4194304\n\t{7, \"11920928955078125\"},                           // * 8388608\n\t{8, \"59604644775390625\"},                           // * 16777216\n\t{8, \"298023223876953125\"},                          // * 33554432\n\t{8, \"1490116119384765625\"},                         // * 67108864\n\t{9, \"7450580596923828125\"},                         // * 134217728\n\t{9, \"37252902984619140625\"},                        // * 268435456\n\t{9, \"186264514923095703125\"},                       // * 536870912\n\t{10, \"931322574615478515625\"},                      // * 1073741824\n\t{10, \"4656612873077392578125\"},                     // * 2147483648\n\t{10, \"23283064365386962890625\"},                    // * 4294967296\n\t{10, \"116415321826934814453125\"},                   // * 8589934592\n\t{11, \"582076609134674072265625\"},                   // * 17179869184\n\t{11, \"2910383045673370361328125\"},                  // * 34359738368\n\t{11, \"14551915228366851806640625\"},                 // * 68719476736\n\t{12, \"72759576141834259033203125\"},                 // * 137438953472\n\t{12, \"363797880709171295166015625\"},                // * 274877906944\n\t{12, \"1818989403545856475830078125\"},               // * 549755813888\n\t{13, \"9094947017729282379150390625\"},               // * 1099511627776\n\t{13, \"45474735088646411895751953125\"},              // * 2199023255552\n\t{13, \"227373675443232059478759765625\"},             // * 4398046511104\n\t{13, \"1136868377216160297393798828125\"},            // * 8796093022208\n\t{14, \"5684341886080801486968994140625\"},            // * 17592186044416\n\t{14, \"28421709430404007434844970703125\"},           // * 35184372088832\n\t{14, \"142108547152020037174224853515625\"},          // * 70368744177664\n\t{15, \"710542735760100185871124267578125\"},          // * 140737488355328\n\t{15, \"3552713678800500929355621337890625\"},         // * 281474976710656\n\t{15, \"17763568394002504646778106689453125\"},        // * 562949953421312\n\t{16, \"88817841970012523233890533447265625\"},        // * 1125899906842624\n\t{16, \"444089209850062616169452667236328125\"},       // * 2251799813685248\n\t{16, \"2220446049250313080847263336181640625\"},      // * 4503599627370496\n\t{16, \"11102230246251565404236316680908203125\"},     // * 9007199254740992\n\t{17, \"55511151231257827021181583404541015625\"},     // * 18014398509481984\n\t{17, \"277555756156289135105907917022705078125\"},    // * 36028797018963968\n\t{17, \"1387778780781445675529539585113525390625\"},   // * 72057594037927936\n\t{18, \"6938893903907228377647697925567626953125\"},   // * 144115188075855872\n\t{18, \"34694469519536141888238489627838134765625\"},  // * 288230376151711744\n\t{18, \"173472347597680709441192448139190673828125\"}, // * 576460752303423488\n\t{19, \"867361737988403547205962240695953369140625\"}, // * 1152921504606846976\n}\n\n// Is the leading prefix of b lexicographically less than s?\nfunc prefixIsLessThan(b []byte, s string) bool {\n\tfor i := 0; i < len(s); i++ {\n\t\tif i >= len(b) {\n\t\t\treturn true\n\t\t}\n\t\tif b[i] != s[i] {\n\t\t\treturn b[i] < s[i]\n\t\t}\n\t}\n\treturn false\n}\n\n// Binary shift left (* 2) by k bits.  k <= maxShift to avoid overflow.\nfunc leftShift(a *decimal, k uint) {\n\tdelta := leftcheats[k].delta\n\tif prefixIsLessThan(a.d[0:a.nd], leftcheats[k].cutoff) {\n\t\tdelta--\n\t}\n\n\tr := a.nd         // read index\n\tw := a.nd + delta // write index\n\n\t// Pick up a digit, put down a digit.\n\tvar n uint\n\tfor r--; r >= 0; r-- {\n\t\tn += (uint(a.d[r]) - '0') << k\n\t\tquo := n / 10\n\t\trem := n - 10*quo\n\t\tw--\n\t\tif w < len(a.d) {\n\t\t\ta.d[w] = byte(rem + '0')\n\t\t} else if rem != 0 {\n\t\t\ta.trunc = true\n\t\t}\n\t\tn = quo\n\t}\n\n\t// Put down extra digits.\n\tfor n > 0 {\n\t\tquo := n / 10\n\t\trem := n - 10*quo\n\t\tw--\n\t\tif w < len(a.d) {\n\t\t\ta.d[w] = byte(rem + '0')\n\t\t} else if rem != 0 {\n\t\t\ta.trunc = true\n\t\t}\n\t\tn = quo\n\t}\n\n\ta.nd += delta\n\tif a.nd >= len(a.d) {\n\t\ta.nd = len(a.d)\n\t}\n\ta.dp += delta\n\ttrim(a)\n}\n\n// Binary shift left (k > 0) or right (k < 0).\nfunc (a *decimal) Shift(k int) {\n\tswitch {\n\tcase a.nd == 0:\n\t\t// nothing to do: a == 0\n\tcase k > 0:\n\t\tfor k > maxShift {\n\t\t\tleftShift(a, maxShift)\n\t\t\tk -= maxShift\n\t\t}\n\t\tleftShift(a, uint(k))\n\tcase k < 0:\n\t\tfor k < -maxShift {\n\t\t\trightShift(a, maxShift)\n\t\t\tk += maxShift\n\t\t}\n\t\trightShift(a, uint(-k))\n\t}\n}\n\n// If we chop a at nd digits, should we round up?\nfunc shouldRoundUp(a *decimal, nd int) bool {\n\tif nd < 0 || nd >= a.nd {\n\t\treturn false\n\t}\n\tif a.d[nd] == '5' && nd+1 == a.nd { // exactly halfway - round to even\n\t\t// if we truncated, a little higher than what's recorded - always round up\n\t\tif a.trunc {\n\t\t\treturn true\n\t\t}\n\t\treturn nd > 0 && (a.d[nd-1]-'0')%2 != 0\n\t}\n\t// not halfway - digit tells all\n\treturn a.d[nd] >= '5'\n}\n\n// Round a to nd digits (or fewer).\n// If nd is zero, it means we're rounding\n// just to the left of the digits, as in\n// 0.09 -> 0.1.\nfunc (a *decimal) Round(nd int) {\n\tif nd < 0 || nd >= a.nd {\n\t\treturn\n\t}\n\tif shouldRoundUp(a, nd) {\n\t\ta.RoundUp(nd)\n\t} else {\n\t\ta.RoundDown(nd)\n\t}\n}\n\n// Round a down to nd digits (or fewer).\nfunc (a *decimal) RoundDown(nd int) {\n\tif nd < 0 || nd >= a.nd {\n\t\treturn\n\t}\n\ta.nd = nd\n\ttrim(a)\n}\n\n// Round a up to nd digits (or fewer).\nfunc (a *decimal) RoundUp(nd int) {\n\tif nd < 0 || nd >= a.nd {\n\t\treturn\n\t}\n\n\t// round up\n\tfor i := nd - 1; i >= 0; i-- {\n\t\tc := a.d[i]\n\t\tif c < '9' { // can stop after this digit\n\t\t\ta.d[i]++\n\t\t\ta.nd = i + 1\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Number is all 9s.\n\t// Change to single 1 with adjusted decimal point.\n\ta.d[0] = '1'\n\ta.nd = 1\n\ta.dp++\n}\n\n// Extract integer part, rounded appropriately.\n// No guarantees about overflow.\nfunc (a *decimal) RoundedInteger() uint64 {\n\tif a.dp > 20 {\n\t\treturn 0xFFFFFFFFFFFFFFFF\n\t}\n\tvar i int\n\tn := uint64(0)\n\tfor i = 0; i < a.dp && i < a.nd; i++ {\n\t\tn = n*10 + uint64(a.d[i]-'0')\n\t}\n\tfor ; i < a.dp; i++ {\n\t\tn *= 10\n\t}\n\tif shouldRoundUp(a, a.dp) {\n\t\tn++\n\t}\n\treturn n\n}\n"
  },
  {
    "path": "vendor/github.com/shopspring/decimal/decimal.go",
    "content": "// Package decimal implements an arbitrary precision fixed-point decimal.\n//\n// The zero-value of a Decimal is 0, as you would expect.\n//\n// The best way to create a new Decimal is to use decimal.NewFromString, ex:\n//\n//     n, err := decimal.NewFromString(\"-123.4567\")\n//     n.String() // output: \"-123.4567\"\n//\n// To use Decimal as part of a struct:\n//\n//     type Struct struct {\n//         Number Decimal\n//     }\n//\n// Note: This can \"only\" represent numbers with a maximum of 2^31 digits after the decimal point.\npackage decimal\n\nimport (\n\t\"database/sql/driver\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/big\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// DivisionPrecision is the number of decimal places in the result when it\n// doesn't divide exactly.\n//\n// Example:\n//\n//     d1 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))\n//     d1.String() // output: \"0.6666666666666667\"\n//     d2 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(30000))\n//     d2.String() // output: \"0.0000666666666667\"\n//     d3 := decimal.NewFromFloat(20000).Div(decimal.NewFromFloat(3))\n//     d3.String() // output: \"6666.6666666666666667\"\n//     decimal.DivisionPrecision = 3\n//     d4 := decimal.NewFromFloat(2).Div(decimal.NewFromFloat(3))\n//     d4.String() // output: \"0.667\"\n//\nvar DivisionPrecision = 16\n\n// MarshalJSONWithoutQuotes should be set to true if you want the decimal to\n// be JSON marshaled as a number, instead of as a string.\n// WARNING: this is dangerous for decimals with many digits, since many JSON\n// unmarshallers (ex: Javascript's) will unmarshal JSON numbers to IEEE 754\n// double-precision floating point numbers, which means you can potentially\n// silently lose precision.\nvar MarshalJSONWithoutQuotes = false\n\n// Zero constant, to make computations faster.\n// Zero should never be compared with == or != directly, please use decimal.Equal or decimal.Cmp instead.\nvar Zero = New(0, 1)\n\nvar zeroInt = big.NewInt(0)\nvar oneInt = big.NewInt(1)\nvar twoInt = big.NewInt(2)\nvar fourInt = big.NewInt(4)\nvar fiveInt = big.NewInt(5)\nvar tenInt = big.NewInt(10)\nvar twentyInt = big.NewInt(20)\n\n// Decimal represents a fixed-point decimal. It is immutable.\n// number = value * 10 ^ exp\ntype Decimal struct {\n\tvalue *big.Int\n\n\t// NOTE(vadim): this must be an int32, because we cast it to float64 during\n\t// calculations. If exp is 64 bit, we might lose precision.\n\t// If we cared about being able to represent every possible decimal, we\n\t// could make exp a *big.Int but it would hurt performance and numbers\n\t// like that are unrealistic.\n\texp int32\n}\n\n// New returns a new fixed-point decimal, value * 10 ^ exp.\nfunc New(value int64, exp int32) Decimal {\n\treturn Decimal{\n\t\tvalue: big.NewInt(value),\n\t\texp:   exp,\n\t}\n}\n\n// NewFromInt converts a int64 to Decimal.\n//\n// Example:\n//\n//     NewFromInt(123).String() // output: \"123\"\n//     NewFromInt(-10).String() // output: \"-10\"\nfunc NewFromInt(value int64) Decimal {\n\treturn Decimal{\n\t\tvalue: big.NewInt(value),\n\t\texp:   0,\n\t}\n}\n\n// NewFromInt32 converts a int32 to Decimal.\n//\n// Example:\n//\n//     NewFromInt(123).String() // output: \"123\"\n//     NewFromInt(-10).String() // output: \"-10\"\nfunc NewFromInt32(value int32) Decimal {\n\treturn Decimal{\n\t\tvalue: big.NewInt(int64(value)),\n\t\texp:   0,\n\t}\n}\n\n// NewFromBigInt returns a new Decimal from a big.Int, value * 10 ^ exp\nfunc NewFromBigInt(value *big.Int, exp int32) Decimal {\n\treturn Decimal{\n\t\tvalue: big.NewInt(0).Set(value),\n\t\texp:   exp,\n\t}\n}\n\n// NewFromString returns a new Decimal from a string representation.\n// Trailing zeroes are not trimmed.\n//\n// Example:\n//\n//     d, err := NewFromString(\"-123.45\")\n//     d2, err := NewFromString(\".0001\")\n//     d3, err := NewFromString(\"1.47000\")\n//\nfunc NewFromString(value string) (Decimal, error) {\n\toriginalInput := value\n\tvar intString string\n\tvar exp int64\n\n\t// Check if number is using scientific notation\n\teIndex := strings.IndexAny(value, \"Ee\")\n\tif eIndex != -1 {\n\t\texpInt, err := strconv.ParseInt(value[eIndex+1:], 10, 32)\n\t\tif err != nil {\n\t\t\tif e, ok := err.(*strconv.NumError); ok && e.Err == strconv.ErrRange {\n\t\t\t\treturn Decimal{}, fmt.Errorf(\"can't convert %s to decimal: fractional part too long\", value)\n\t\t\t}\n\t\t\treturn Decimal{}, fmt.Errorf(\"can't convert %s to decimal: exponent is not numeric\", value)\n\t\t}\n\t\tvalue = value[:eIndex]\n\t\texp = expInt\n\t}\n\n\tparts := strings.Split(value, \".\")\n\tif len(parts) == 1 {\n\t\t// There is no decimal point, we can just parse the original string as\n\t\t// an int\n\t\tintString = value\n\t} else if len(parts) == 2 {\n\t\tintString = parts[0] + parts[1]\n\t\texpInt := -len(parts[1])\n\t\texp += int64(expInt)\n\t} else {\n\t\treturn Decimal{}, fmt.Errorf(\"can't convert %s to decimal: too many .s\", value)\n\t}\n\n\tdValue := new(big.Int)\n\t_, ok := dValue.SetString(intString, 10)\n\tif !ok {\n\t\treturn Decimal{}, fmt.Errorf(\"can't convert %s to decimal\", value)\n\t}\n\n\tif exp < math.MinInt32 || exp > math.MaxInt32 {\n\t\t// NOTE(vadim): I doubt a string could realistically be this long\n\t\treturn Decimal{}, fmt.Errorf(\"can't convert %s to decimal: fractional part too long\", originalInput)\n\t}\n\n\treturn Decimal{\n\t\tvalue: dValue,\n\t\texp:   int32(exp),\n\t}, nil\n}\n\n// RequireFromString returns a new Decimal from a string representation\n// or panics if NewFromString would have returned an error.\n//\n// Example:\n//\n//     d := RequireFromString(\"-123.45\")\n//     d2 := RequireFromString(\".0001\")\n//\nfunc RequireFromString(value string) Decimal {\n\tdec, err := NewFromString(value)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn dec\n}\n\n// NewFromFloat converts a float64 to Decimal.\n//\n// The converted number will contain the number of significant digits that can be\n// represented in a float with reliable roundtrip.\n// This is typically 15 digits, but may be more in some cases.\n// See https://www.exploringbinary.com/decimal-precision-of-binary-floating-point-numbers/ for more information.\n//\n// For slightly faster conversion, use NewFromFloatWithExponent where you can specify the precision in absolute terms.\n//\n// NOTE: this will panic on NaN, +/-inf\nfunc NewFromFloat(value float64) Decimal {\n\tif value == 0 {\n\t\treturn New(0, 0)\n\t}\n\treturn newFromFloat(value, math.Float64bits(value), &float64info)\n}\n\n// NewFromFloat32 converts a float32 to Decimal.\n//\n// The converted number will contain the number of significant digits that can be\n// represented in a float with reliable roundtrip.\n// This is typically 6-8 digits depending on the input.\n// See https://www.exploringbinary.com/decimal-precision-of-binary-floating-point-numbers/ for more information.\n//\n// For slightly faster conversion, use NewFromFloatWithExponent where you can specify the precision in absolute terms.\n//\n// NOTE: this will panic on NaN, +/-inf\nfunc NewFromFloat32(value float32) Decimal {\n\tif value == 0 {\n\t\treturn New(0, 0)\n\t}\n\t// XOR is workaround for https://github.com/golang/go/issues/26285\n\ta := math.Float32bits(value) ^ 0x80808080\n\treturn newFromFloat(float64(value), uint64(a)^0x80808080, &float32info)\n}\n\nfunc newFromFloat(val float64, bits uint64, flt *floatInfo) Decimal {\n\tif math.IsNaN(val) || math.IsInf(val, 0) {\n\t\tpanic(fmt.Sprintf(\"Cannot create a Decimal from %v\", val))\n\t}\n\texp := int(bits>>flt.mantbits) & (1<<flt.expbits - 1)\n\tmant := bits & (uint64(1)<<flt.mantbits - 1)\n\n\tswitch exp {\n\tcase 0:\n\t\t// denormalized\n\t\texp++\n\n\tdefault:\n\t\t// add implicit top bit\n\t\tmant |= uint64(1) << flt.mantbits\n\t}\n\texp += flt.bias\n\n\tvar d decimal\n\td.Assign(mant)\n\td.Shift(exp - int(flt.mantbits))\n\td.neg = bits>>(flt.expbits+flt.mantbits) != 0\n\n\troundShortest(&d, mant, exp, flt)\n\t// If less than 19 digits, we can do calculation in an int64.\n\tif d.nd < 19 {\n\t\ttmp := int64(0)\n\t\tm := int64(1)\n\t\tfor i := d.nd - 1; i >= 0; i-- {\n\t\t\ttmp += m * int64(d.d[i]-'0')\n\t\t\tm *= 10\n\t\t}\n\t\tif d.neg {\n\t\t\ttmp *= -1\n\t\t}\n\t\treturn Decimal{value: big.NewInt(tmp), exp: int32(d.dp) - int32(d.nd)}\n\t}\n\tdValue := new(big.Int)\n\tdValue, ok := dValue.SetString(string(d.d[:d.nd]), 10)\n\tif ok {\n\t\treturn Decimal{value: dValue, exp: int32(d.dp) - int32(d.nd)}\n\t}\n\n\treturn NewFromFloatWithExponent(val, int32(d.dp)-int32(d.nd))\n}\n\n// NewFromFloatWithExponent converts a float64 to Decimal, with an arbitrary\n// number of fractional digits.\n//\n// Example:\n//\n//     NewFromFloatWithExponent(123.456, -2).String() // output: \"123.46\"\n//\nfunc NewFromFloatWithExponent(value float64, exp int32) Decimal {\n\tif math.IsNaN(value) || math.IsInf(value, 0) {\n\t\tpanic(fmt.Sprintf(\"Cannot create a Decimal from %v\", value))\n\t}\n\n\tbits := math.Float64bits(value)\n\tmant := bits & (1<<52 - 1)\n\texp2 := int32((bits >> 52) & (1<<11 - 1))\n\tsign := bits >> 63\n\n\tif exp2 == 0 {\n\t\t// specials\n\t\tif mant == 0 {\n\t\t\treturn Decimal{}\n\t\t}\n\t\t// subnormal\n\t\texp2++\n\t} else {\n\t\t// normal\n\t\tmant |= 1 << 52\n\t}\n\n\texp2 -= 1023 + 52\n\n\t// normalizing base-2 values\n\tfor mant&1 == 0 {\n\t\tmant = mant >> 1\n\t\texp2++\n\t}\n\n\t// maximum number of fractional base-10 digits to represent 2^N exactly cannot be more than -N if N<0\n\tif exp < 0 && exp < exp2 {\n\t\tif exp2 < 0 {\n\t\t\texp = exp2\n\t\t} else {\n\t\t\texp = 0\n\t\t}\n\t}\n\n\t// representing 10^M * 2^N as 5^M * 2^(M+N)\n\texp2 -= exp\n\n\ttemp := big.NewInt(1)\n\tdMant := big.NewInt(int64(mant))\n\n\t// applying 5^M\n\tif exp > 0 {\n\t\ttemp = temp.SetInt64(int64(exp))\n\t\ttemp = temp.Exp(fiveInt, temp, nil)\n\t} else if exp < 0 {\n\t\ttemp = temp.SetInt64(-int64(exp))\n\t\ttemp = temp.Exp(fiveInt, temp, nil)\n\t\tdMant = dMant.Mul(dMant, temp)\n\t\ttemp = temp.SetUint64(1)\n\t}\n\n\t// applying 2^(M+N)\n\tif exp2 > 0 {\n\t\tdMant = dMant.Lsh(dMant, uint(exp2))\n\t} else if exp2 < 0 {\n\t\ttemp = temp.Lsh(temp, uint(-exp2))\n\t}\n\n\t// rounding and downscaling\n\tif exp > 0 || exp2 < 0 {\n\t\thalfDown := new(big.Int).Rsh(temp, 1)\n\t\tdMant = dMant.Add(dMant, halfDown)\n\t\tdMant = dMant.Quo(dMant, temp)\n\t}\n\n\tif sign == 1 {\n\t\tdMant = dMant.Neg(dMant)\n\t}\n\n\treturn Decimal{\n\t\tvalue: dMant,\n\t\texp:   exp,\n\t}\n}\n\n// rescale returns a rescaled version of the decimal. Returned\n// decimal may be less precise if the given exponent is bigger\n// than the initial exponent of the Decimal.\n// NOTE: this will truncate, NOT round\n//\n// Example:\n//\n// \td := New(12345, -4)\n//\td2 := d.rescale(-1)\n//\td3 := d2.rescale(-4)\n//\tprintln(d1)\n//\tprintln(d2)\n//\tprintln(d3)\n//\n// Output:\n//\n//\t1.2345\n//\t1.2\n//\t1.2000\n//\nfunc (d Decimal) rescale(exp int32) Decimal {\n\td.ensureInitialized()\n\n\tif d.exp == exp {\n\t\treturn Decimal{\n\t\t\tnew(big.Int).Set(d.value),\n\t\t\td.exp,\n\t\t}\n\t}\n\n\t// NOTE(vadim): must convert exps to float64 before - to prevent overflow\n\tdiff := math.Abs(float64(exp) - float64(d.exp))\n\tvalue := new(big.Int).Set(d.value)\n\n\texpScale := new(big.Int).Exp(tenInt, big.NewInt(int64(diff)), nil)\n\tif exp > d.exp {\n\t\tvalue = value.Quo(value, expScale)\n\t} else if exp < d.exp {\n\t\tvalue = value.Mul(value, expScale)\n\t}\n\n\treturn Decimal{\n\t\tvalue: value,\n\t\texp:   exp,\n\t}\n}\n\n// Abs returns the absolute value of the decimal.\nfunc (d Decimal) Abs() Decimal {\n\td.ensureInitialized()\n\td2Value := new(big.Int).Abs(d.value)\n\treturn Decimal{\n\t\tvalue: d2Value,\n\t\texp:   d.exp,\n\t}\n}\n\n// Add returns d + d2.\nfunc (d Decimal) Add(d2 Decimal) Decimal {\n\trd, rd2 := RescalePair(d, d2)\n\n\td3Value := new(big.Int).Add(rd.value, rd2.value)\n\treturn Decimal{\n\t\tvalue: d3Value,\n\t\texp:   rd.exp,\n\t}\n}\n\n// Sub returns d - d2.\nfunc (d Decimal) Sub(d2 Decimal) Decimal {\n\trd, rd2 := RescalePair(d, d2)\n\n\td3Value := new(big.Int).Sub(rd.value, rd2.value)\n\treturn Decimal{\n\t\tvalue: d3Value,\n\t\texp:   rd.exp,\n\t}\n}\n\n// Neg returns -d.\nfunc (d Decimal) Neg() Decimal {\n\td.ensureInitialized()\n\tval := new(big.Int).Neg(d.value)\n\treturn Decimal{\n\t\tvalue: val,\n\t\texp:   d.exp,\n\t}\n}\n\n// Mul returns d * d2.\nfunc (d Decimal) Mul(d2 Decimal) Decimal {\n\td.ensureInitialized()\n\td2.ensureInitialized()\n\n\texpInt64 := int64(d.exp) + int64(d2.exp)\n\tif expInt64 > math.MaxInt32 || expInt64 < math.MinInt32 {\n\t\t// NOTE(vadim): better to panic than give incorrect results, as\n\t\t// Decimals are usually used for money\n\t\tpanic(fmt.Sprintf(\"exponent %v overflows an int32!\", expInt64))\n\t}\n\n\td3Value := new(big.Int).Mul(d.value, d2.value)\n\treturn Decimal{\n\t\tvalue: d3Value,\n\t\texp:   int32(expInt64),\n\t}\n}\n\n// Shift shifts the decimal in base 10.\n// It shifts left when shift is positive and right if shift is negative.\n// In simpler terms, the given value for shift is added to the exponent\n// of the decimal.\nfunc (d Decimal) Shift(shift int32) Decimal {\n\td.ensureInitialized()\n\treturn Decimal{\n\t\tvalue: new(big.Int).Set(d.value),\n\t\texp:   d.exp + shift,\n\t}\n}\n\n// Div returns d / d2. If it doesn't divide exactly, the result will have\n// DivisionPrecision digits after the decimal point.\nfunc (d Decimal) Div(d2 Decimal) Decimal {\n\treturn d.DivRound(d2, int32(DivisionPrecision))\n}\n\n// QuoRem does divsion with remainder\n// d.QuoRem(d2,precision) returns quotient q and remainder r such that\n//   d = d2 * q + r, q an integer multiple of 10^(-precision)\n//   0 <= r < abs(d2) * 10 ^(-precision) if d>=0\n//   0 >= r > -abs(d2) * 10 ^(-precision) if d<0\n// Note that precision<0 is allowed as input.\nfunc (d Decimal) QuoRem(d2 Decimal, precision int32) (Decimal, Decimal) {\n\td.ensureInitialized()\n\td2.ensureInitialized()\n\tif d2.value.Sign() == 0 {\n\t\tpanic(\"decimal division by 0\")\n\t}\n\tscale := -precision\n\te := int64(d.exp - d2.exp - scale)\n\tif e > math.MaxInt32 || e < math.MinInt32 {\n\t\tpanic(\"overflow in decimal QuoRem\")\n\t}\n\tvar aa, bb, expo big.Int\n\tvar scalerest int32\n\t// d = a 10^ea\n\t// d2 = b 10^eb\n\tif e < 0 {\n\t\taa = *d.value\n\t\texpo.SetInt64(-e)\n\t\tbb.Exp(tenInt, &expo, nil)\n\t\tbb.Mul(d2.value, &bb)\n\t\tscalerest = d.exp\n\t\t// now aa = a\n\t\t//     bb = b 10^(scale + eb - ea)\n\t} else {\n\t\texpo.SetInt64(e)\n\t\taa.Exp(tenInt, &expo, nil)\n\t\taa.Mul(d.value, &aa)\n\t\tbb = *d2.value\n\t\tscalerest = scale + d2.exp\n\t\t// now aa = a ^ (ea - eb - scale)\n\t\t//     bb = b\n\t}\n\tvar q, r big.Int\n\tq.QuoRem(&aa, &bb, &r)\n\tdq := Decimal{value: &q, exp: scale}\n\tdr := Decimal{value: &r, exp: scalerest}\n\treturn dq, dr\n}\n\n// DivRound divides and rounds to a given precision\n// i.e. to an integer multiple of 10^(-precision)\n//   for a positive quotient digit 5 is rounded up, away from 0\n//   if the quotient is negative then digit 5 is rounded down, away from 0\n// Note that precision<0 is allowed as input.\nfunc (d Decimal) DivRound(d2 Decimal, precision int32) Decimal {\n\t// QuoRem already checks initialization\n\tq, r := d.QuoRem(d2, precision)\n\t// the actual rounding decision is based on comparing r*10^precision and d2/2\n\t// instead compare 2 r 10 ^precision and d2\n\tvar rv2 big.Int\n\trv2.Abs(r.value)\n\trv2.Lsh(&rv2, 1)\n\t// now rv2 = abs(r.value) * 2\n\tr2 := Decimal{value: &rv2, exp: r.exp + precision}\n\t// r2 is now 2 * r * 10 ^ precision\n\tvar c = r2.Cmp(d2.Abs())\n\n\tif c < 0 {\n\t\treturn q\n\t}\n\n\tif d.value.Sign()*d2.value.Sign() < 0 {\n\t\treturn q.Sub(New(1, -precision))\n\t}\n\n\treturn q.Add(New(1, -precision))\n}\n\n// Mod returns d % d2.\nfunc (d Decimal) Mod(d2 Decimal) Decimal {\n\tquo := d.Div(d2).Truncate(0)\n\treturn d.Sub(d2.Mul(quo))\n}\n\n// Pow returns d to the power d2\nfunc (d Decimal) Pow(d2 Decimal) Decimal {\n\tvar temp Decimal\n\tif d2.IntPart() == 0 {\n\t\treturn NewFromFloat(1)\n\t}\n\ttemp = d.Pow(d2.Div(NewFromFloat(2)))\n\tif d2.IntPart()%2 == 0 {\n\t\treturn temp.Mul(temp)\n\t}\n\tif d2.IntPart() > 0 {\n\t\treturn temp.Mul(temp).Mul(d)\n\t}\n\treturn temp.Mul(temp).Div(d)\n}\n\n// Cmp compares the numbers represented by d and d2 and returns:\n//\n//     -1 if d <  d2\n//      0 if d == d2\n//     +1 if d >  d2\n//\nfunc (d Decimal) Cmp(d2 Decimal) int {\n\td.ensureInitialized()\n\td2.ensureInitialized()\n\n\tif d.exp == d2.exp {\n\t\treturn d.value.Cmp(d2.value)\n\t}\n\n\trd, rd2 := RescalePair(d, d2)\n\n\treturn rd.value.Cmp(rd2.value)\n}\n\n// Equal returns whether the numbers represented by d and d2 are equal.\nfunc (d Decimal) Equal(d2 Decimal) bool {\n\treturn d.Cmp(d2) == 0\n}\n\n// Equals is deprecated, please use Equal method instead\nfunc (d Decimal) Equals(d2 Decimal) bool {\n\treturn d.Equal(d2)\n}\n\n// GreaterThan (GT) returns true when d is greater than d2.\nfunc (d Decimal) GreaterThan(d2 Decimal) bool {\n\treturn d.Cmp(d2) == 1\n}\n\n// GreaterThanOrEqual (GTE) returns true when d is greater than or equal to d2.\nfunc (d Decimal) GreaterThanOrEqual(d2 Decimal) bool {\n\tcmp := d.Cmp(d2)\n\treturn cmp == 1 || cmp == 0\n}\n\n// LessThan (LT) returns true when d is less than d2.\nfunc (d Decimal) LessThan(d2 Decimal) bool {\n\treturn d.Cmp(d2) == -1\n}\n\n// LessThanOrEqual (LTE) returns true when d is less than or equal to d2.\nfunc (d Decimal) LessThanOrEqual(d2 Decimal) bool {\n\tcmp := d.Cmp(d2)\n\treturn cmp == -1 || cmp == 0\n}\n\n// Sign returns:\n//\n//\t-1 if d <  0\n//\t 0 if d == 0\n//\t+1 if d >  0\n//\nfunc (d Decimal) Sign() int {\n\tif d.value == nil {\n\t\treturn 0\n\t}\n\treturn d.value.Sign()\n}\n\n// IsPositive return\n//\n//\ttrue if d > 0\n//\tfalse if d == 0\n//\tfalse if d < 0\nfunc (d Decimal) IsPositive() bool {\n\treturn d.Sign() == 1\n}\n\n// IsNegative return\n//\n//\ttrue if d < 0\n//\tfalse if d == 0\n//\tfalse if d > 0\nfunc (d Decimal) IsNegative() bool {\n\treturn d.Sign() == -1\n}\n\n// IsZero return\n//\n//\ttrue if d == 0\n//\tfalse if d > 0\n//\tfalse if d < 0\nfunc (d Decimal) IsZero() bool {\n\treturn d.Sign() == 0\n}\n\n// Exponent returns the exponent, or scale component of the decimal.\nfunc (d Decimal) Exponent() int32 {\n\treturn d.exp\n}\n\n// Coefficient returns the coefficient of the decimal.  It is scaled by 10^Exponent()\nfunc (d Decimal) Coefficient() *big.Int {\n\td.ensureInitialized()\n\t// we copy the coefficient so that mutating the result does not mutate the\n\t// Decimal.\n\treturn big.NewInt(0).Set(d.value)\n}\n\n// IntPart returns the integer component of the decimal.\nfunc (d Decimal) IntPart() int64 {\n\tscaledD := d.rescale(0)\n\treturn scaledD.value.Int64()\n}\n\n// BigInt returns integer component of the decimal as a BigInt.\nfunc (d Decimal) BigInt() *big.Int {\n\tscaledD := d.rescale(0)\n\ti := &big.Int{}\n\ti.SetString(scaledD.String(), 10)\n\treturn i\n}\n\n// BigFloat returns decimal as BigFloat.\n// Be aware that casting decimal to BigFloat might cause a loss of precision.\nfunc (d Decimal) BigFloat() *big.Float {\n\tf := &big.Float{}\n\tf.SetString(d.String())\n\treturn f\n}\n\n// Rat returns a rational number representation of the decimal.\nfunc (d Decimal) Rat() *big.Rat {\n\td.ensureInitialized()\n\tif d.exp <= 0 {\n\t\t// NOTE(vadim): must negate after casting to prevent int32 overflow\n\t\tdenom := new(big.Int).Exp(tenInt, big.NewInt(-int64(d.exp)), nil)\n\t\treturn new(big.Rat).SetFrac(d.value, denom)\n\t}\n\n\tmul := new(big.Int).Exp(tenInt, big.NewInt(int64(d.exp)), nil)\n\tnum := new(big.Int).Mul(d.value, mul)\n\treturn new(big.Rat).SetFrac(num, oneInt)\n}\n\n// Float64 returns the nearest float64 value for d and a bool indicating\n// whether f represents d exactly.\n// For more details, see the documentation for big.Rat.Float64\nfunc (d Decimal) Float64() (f float64, exact bool) {\n\treturn d.Rat().Float64()\n}\n\n// String returns the string representation of the decimal\n// with the fixed point.\n//\n// Example:\n//\n//     d := New(-12345, -3)\n//     println(d.String())\n//\n// Output:\n//\n//     -12.345\n//\nfunc (d Decimal) String() string {\n\treturn d.string(true)\n}\n\n// StringFixed returns a rounded fixed-point string with places digits after\n// the decimal point.\n//\n// Example:\n//\n// \t   NewFromFloat(0).StringFixed(2) // output: \"0.00\"\n// \t   NewFromFloat(0).StringFixed(0) // output: \"0\"\n// \t   NewFromFloat(5.45).StringFixed(0) // output: \"5\"\n// \t   NewFromFloat(5.45).StringFixed(1) // output: \"5.5\"\n// \t   NewFromFloat(5.45).StringFixed(2) // output: \"5.45\"\n// \t   NewFromFloat(5.45).StringFixed(3) // output: \"5.450\"\n// \t   NewFromFloat(545).StringFixed(-1) // output: \"550\"\n//\nfunc (d Decimal) StringFixed(places int32) string {\n\trounded := d.Round(places)\n\treturn rounded.string(false)\n}\n\n// StringFixedBank returns a banker rounded fixed-point string with places digits\n// after the decimal point.\n//\n// Example:\n//\n// \t   NewFromFloat(0).StringFixedBank(2) // output: \"0.00\"\n// \t   NewFromFloat(0).StringFixedBank(0) // output: \"0\"\n// \t   NewFromFloat(5.45).StringFixedBank(0) // output: \"5\"\n// \t   NewFromFloat(5.45).StringFixedBank(1) // output: \"5.4\"\n// \t   NewFromFloat(5.45).StringFixedBank(2) // output: \"5.45\"\n// \t   NewFromFloat(5.45).StringFixedBank(3) // output: \"5.450\"\n// \t   NewFromFloat(545).StringFixedBank(-1) // output: \"540\"\n//\nfunc (d Decimal) StringFixedBank(places int32) string {\n\trounded := d.RoundBank(places)\n\treturn rounded.string(false)\n}\n\n// StringFixedCash returns a Swedish/Cash rounded fixed-point string. For\n// more details see the documentation at function RoundCash.\nfunc (d Decimal) StringFixedCash(interval uint8) string {\n\trounded := d.RoundCash(interval)\n\treturn rounded.string(false)\n}\n\n// Round rounds the decimal to places decimal places.\n// If places < 0, it will round the integer part to the nearest 10^(-places).\n//\n// Example:\n//\n// \t   NewFromFloat(5.45).Round(1).String() // output: \"5.5\"\n// \t   NewFromFloat(545).Round(-1).String() // output: \"550\"\n//\nfunc (d Decimal) Round(places int32) Decimal {\n\t// truncate to places + 1\n\tret := d.rescale(-places - 1)\n\n\t// add sign(d) * 0.5\n\tif ret.value.Sign() < 0 {\n\t\tret.value.Sub(ret.value, fiveInt)\n\t} else {\n\t\tret.value.Add(ret.value, fiveInt)\n\t}\n\n\t// floor for positive numbers, ceil for negative numbers\n\t_, m := ret.value.DivMod(ret.value, tenInt, new(big.Int))\n\tret.exp++\n\tif ret.value.Sign() < 0 && m.Cmp(zeroInt) != 0 {\n\t\tret.value.Add(ret.value, oneInt)\n\t}\n\n\treturn ret\n}\n\n// RoundBank rounds the decimal to places decimal places.\n// If the final digit to round is equidistant from the nearest two integers the\n// rounded value is taken as the even number\n//\n// If places < 0, it will round the integer part to the nearest 10^(-places).\n//\n// Examples:\n//\n// \t   NewFromFloat(5.45).Round(1).String() // output: \"5.4\"\n// \t   NewFromFloat(545).Round(-1).String() // output: \"540\"\n// \t   NewFromFloat(5.46).Round(1).String() // output: \"5.5\"\n// \t   NewFromFloat(546).Round(-1).String() // output: \"550\"\n// \t   NewFromFloat(5.55).Round(1).String() // output: \"5.6\"\n// \t   NewFromFloat(555).Round(-1).String() // output: \"560\"\n//\nfunc (d Decimal) RoundBank(places int32) Decimal {\n\n\tround := d.Round(places)\n\tremainder := d.Sub(round).Abs()\n\n\thalf := New(5, -places-1)\n\tif remainder.Cmp(half) == 0 && round.value.Bit(0) != 0 {\n\t\tif round.value.Sign() < 0 {\n\t\t\tround.value.Add(round.value, oneInt)\n\t\t} else {\n\t\t\tround.value.Sub(round.value, oneInt)\n\t\t}\n\t}\n\n\treturn round\n}\n\n// RoundCash aka Cash/Penny/öre rounding rounds decimal to a specific\n// interval. The amount payable for a cash transaction is rounded to the nearest\n// multiple of the minimum currency unit available. The following intervals are\n// available: 5, 10, 25, 50 and 100; any other number throws a panic.\n//\t    5:   5 cent rounding 3.43 => 3.45\n// \t   10:  10 cent rounding 3.45 => 3.50 (5 gets rounded up)\n// \t   25:  25 cent rounding 3.41 => 3.50\n// \t   50:  50 cent rounding 3.75 => 4.00\n// \t  100: 100 cent rounding 3.50 => 4.00\n// For more details: https://en.wikipedia.org/wiki/Cash_rounding\nfunc (d Decimal) RoundCash(interval uint8) Decimal {\n\tvar iVal *big.Int\n\tswitch interval {\n\tcase 5:\n\t\tiVal = twentyInt\n\tcase 10:\n\t\tiVal = tenInt\n\tcase 25:\n\t\tiVal = fourInt\n\tcase 50:\n\t\tiVal = twoInt\n\tcase 100:\n\t\tiVal = oneInt\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Decimal does not support this Cash rounding interval `%d`. Supported: 5, 10, 25, 50, 100\", interval))\n\t}\n\tdVal := Decimal{\n\t\tvalue: iVal,\n\t}\n\n\t// TODO: optimize those calculations to reduce the high allocations (~29 allocs).\n\treturn d.Mul(dVal).Round(0).Div(dVal).Truncate(2)\n}\n\n// Floor returns the nearest integer value less than or equal to d.\nfunc (d Decimal) Floor() Decimal {\n\td.ensureInitialized()\n\n\tif d.exp >= 0 {\n\t\treturn d\n\t}\n\n\texp := big.NewInt(10)\n\n\t// NOTE(vadim): must negate after casting to prevent int32 overflow\n\texp.Exp(exp, big.NewInt(-int64(d.exp)), nil)\n\n\tz := new(big.Int).Div(d.value, exp)\n\treturn Decimal{value: z, exp: 0}\n}\n\n// Ceil returns the nearest integer value greater than or equal to d.\nfunc (d Decimal) Ceil() Decimal {\n\td.ensureInitialized()\n\n\tif d.exp >= 0 {\n\t\treturn d\n\t}\n\n\texp := big.NewInt(10)\n\n\t// NOTE(vadim): must negate after casting to prevent int32 overflow\n\texp.Exp(exp, big.NewInt(-int64(d.exp)), nil)\n\n\tz, m := new(big.Int).DivMod(d.value, exp, new(big.Int))\n\tif m.Cmp(zeroInt) != 0 {\n\t\tz.Add(z, oneInt)\n\t}\n\treturn Decimal{value: z, exp: 0}\n}\n\n// Truncate truncates off digits from the number, without rounding.\n//\n// NOTE: precision is the last digit that will not be truncated (must be >= 0).\n//\n// Example:\n//\n//     decimal.NewFromString(\"123.456\").Truncate(2).String() // \"123.45\"\n//\nfunc (d Decimal) Truncate(precision int32) Decimal {\n\td.ensureInitialized()\n\tif precision >= 0 && -precision > d.exp {\n\t\treturn d.rescale(-precision)\n\t}\n\treturn d\n}\n\n// UnmarshalJSON implements the json.Unmarshaler interface.\nfunc (d *Decimal) UnmarshalJSON(decimalBytes []byte) error {\n\tif string(decimalBytes) == \"null\" {\n\t\treturn nil\n\t}\n\n\tstr, err := unquoteIfQuoted(decimalBytes)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error decoding string '%s': %s\", decimalBytes, err)\n\t}\n\n\tdecimal, err := NewFromString(str)\n\t*d = decimal\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error decoding string '%s': %s\", str, err)\n\t}\n\treturn nil\n}\n\n// MarshalJSON implements the json.Marshaler interface.\nfunc (d Decimal) MarshalJSON() ([]byte, error) {\n\tvar str string\n\tif MarshalJSONWithoutQuotes {\n\t\tstr = d.String()\n\t} else {\n\t\tstr = \"\\\"\" + d.String() + \"\\\"\"\n\t}\n\treturn []byte(str), nil\n}\n\n// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. As a string representation\n// is already used when encoding to text, this method stores that string as []byte\nfunc (d *Decimal) UnmarshalBinary(data []byte) error {\n\t// Extract the exponent\n\td.exp = int32(binary.BigEndian.Uint32(data[:4]))\n\n\t// Extract the value\n\td.value = new(big.Int)\n\treturn d.value.GobDecode(data[4:])\n}\n\n// MarshalBinary implements the encoding.BinaryMarshaler interface.\nfunc (d Decimal) MarshalBinary() (data []byte, err error) {\n\t// Write the exponent first since it's a fixed size\n\tv1 := make([]byte, 4)\n\tbinary.BigEndian.PutUint32(v1, uint32(d.exp))\n\n\t// Add the value\n\tvar v2 []byte\n\tif v2, err = d.value.GobEncode(); err != nil {\n\t\treturn\n\t}\n\n\t// Return the byte array\n\tdata = append(v1, v2...)\n\treturn\n}\n\n// Scan implements the sql.Scanner interface for database deserialization.\nfunc (d *Decimal) Scan(value interface{}) error {\n\t// first try to see if the data is stored in database as a Numeric datatype\n\tswitch v := value.(type) {\n\n\tcase float32:\n\t\t*d = NewFromFloat(float64(v))\n\t\treturn nil\n\n\tcase float64:\n\t\t// numeric in sqlite3 sends us float64\n\t\t*d = NewFromFloat(v)\n\t\treturn nil\n\n\tcase int64:\n\t\t// at least in sqlite3 when the value is 0 in db, the data is sent\n\t\t// to us as an int64 instead of a float64 ...\n\t\t*d = New(v, 0)\n\t\treturn nil\n\n\tdefault:\n\t\t// default is trying to interpret value stored as string\n\t\tstr, err := unquoteIfQuoted(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*d, err = NewFromString(str)\n\t\treturn err\n\t}\n}\n\n// Value implements the driver.Valuer interface for database serialization.\nfunc (d Decimal) Value() (driver.Value, error) {\n\treturn d.String(), nil\n}\n\n// UnmarshalText implements the encoding.TextUnmarshaler interface for XML\n// deserialization.\nfunc (d *Decimal) UnmarshalText(text []byte) error {\n\tstr := string(text)\n\n\tdec, err := NewFromString(str)\n\t*d = dec\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error decoding string '%s': %s\", str, err)\n\t}\n\n\treturn nil\n}\n\n// MarshalText implements the encoding.TextMarshaler interface for XML\n// serialization.\nfunc (d Decimal) MarshalText() (text []byte, err error) {\n\treturn []byte(d.String()), nil\n}\n\n// GobEncode implements the gob.GobEncoder interface for gob serialization.\nfunc (d Decimal) GobEncode() ([]byte, error) {\n\treturn d.MarshalBinary()\n}\n\n// GobDecode implements the gob.GobDecoder interface for gob serialization.\nfunc (d *Decimal) GobDecode(data []byte) error {\n\treturn d.UnmarshalBinary(data)\n}\n\n// StringScaled first scales the decimal then calls .String() on it.\n// NOTE: buggy, unintuitive, and DEPRECATED! Use StringFixed instead.\nfunc (d Decimal) StringScaled(exp int32) string {\n\treturn d.rescale(exp).String()\n}\n\nfunc (d Decimal) string(trimTrailingZeros bool) string {\n\tif d.exp >= 0 {\n\t\treturn d.rescale(0).value.String()\n\t}\n\n\tabs := new(big.Int).Abs(d.value)\n\tstr := abs.String()\n\n\tvar intPart, fractionalPart string\n\n\t// NOTE(vadim): this cast to int will cause bugs if d.exp == INT_MIN\n\t// and you are on a 32-bit machine. Won't fix this super-edge case.\n\tdExpInt := int(d.exp)\n\tif len(str) > -dExpInt {\n\t\tintPart = str[:len(str)+dExpInt]\n\t\tfractionalPart = str[len(str)+dExpInt:]\n\t} else {\n\t\tintPart = \"0\"\n\n\t\tnum0s := -dExpInt - len(str)\n\t\tfractionalPart = strings.Repeat(\"0\", num0s) + str\n\t}\n\n\tif trimTrailingZeros {\n\t\ti := len(fractionalPart) - 1\n\t\tfor ; i >= 0; i-- {\n\t\t\tif fractionalPart[i] != '0' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tfractionalPart = fractionalPart[:i+1]\n\t}\n\n\tnumber := intPart\n\tif len(fractionalPart) > 0 {\n\t\tnumber += \".\" + fractionalPart\n\t}\n\n\tif d.value.Sign() < 0 {\n\t\treturn \"-\" + number\n\t}\n\n\treturn number\n}\n\nfunc (d *Decimal) ensureInitialized() {\n\tif d.value == nil {\n\t\td.value = new(big.Int)\n\t}\n}\n\n// Min returns the smallest Decimal that was passed in the arguments.\n//\n// To call this function with an array, you must do:\n//\n//     Min(arr[0], arr[1:]...)\n//\n// This makes it harder to accidentally call Min with 0 arguments.\nfunc Min(first Decimal, rest ...Decimal) Decimal {\n\tans := first\n\tfor _, item := range rest {\n\t\tif item.Cmp(ans) < 0 {\n\t\t\tans = item\n\t\t}\n\t}\n\treturn ans\n}\n\n// Max returns the largest Decimal that was passed in the arguments.\n//\n// To call this function with an array, you must do:\n//\n//     Max(arr[0], arr[1:]...)\n//\n// This makes it harder to accidentally call Max with 0 arguments.\nfunc Max(first Decimal, rest ...Decimal) Decimal {\n\tans := first\n\tfor _, item := range rest {\n\t\tif item.Cmp(ans) > 0 {\n\t\t\tans = item\n\t\t}\n\t}\n\treturn ans\n}\n\n// Sum returns the combined total of the provided first and rest Decimals\nfunc Sum(first Decimal, rest ...Decimal) Decimal {\n\ttotal := first\n\tfor _, item := range rest {\n\t\ttotal = total.Add(item)\n\t}\n\n\treturn total\n}\n\n// Avg returns the average value of the provided first and rest Decimals\nfunc Avg(first Decimal, rest ...Decimal) Decimal {\n\tcount := New(int64(len(rest)+1), 0)\n\tsum := Sum(first, rest...)\n\treturn sum.Div(count)\n}\n\n// RescalePair rescales two decimals to common exponential value (minimal exp of both decimals)\nfunc RescalePair(d1 Decimal, d2 Decimal) (Decimal, Decimal) {\n\td1.ensureInitialized()\n\td2.ensureInitialized()\n\n\tif d1.exp == d2.exp {\n\t\treturn d1, d2\n\t}\n\n\tbaseScale := min(d1.exp, d2.exp)\n\tif baseScale != d1.exp {\n\t\treturn d1.rescale(baseScale), d2\n\t}\n\treturn d1, d2.rescale(baseScale)\n}\n\nfunc min(x, y int32) int32 {\n\tif x >= y {\n\t\treturn y\n\t}\n\treturn x\n}\n\nfunc unquoteIfQuoted(value interface{}) (string, error) {\n\tvar bytes []byte\n\n\tswitch v := value.(type) {\n\tcase string:\n\t\tbytes = []byte(v)\n\tcase []byte:\n\t\tbytes = v\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"could not convert value '%+v' to byte array of type '%T'\",\n\t\t\tvalue, value)\n\t}\n\n\t// If the amount is quoted, strip the quotes\n\tif len(bytes) > 2 && bytes[0] == '\"' && bytes[len(bytes)-1] == '\"' {\n\t\tbytes = bytes[1 : len(bytes)-1]\n\t}\n\treturn string(bytes), nil\n}\n\n// NullDecimal represents a nullable decimal with compatibility for\n// scanning null values from the database.\ntype NullDecimal struct {\n\tDecimal Decimal\n\tValid   bool\n}\n\n// Scan implements the sql.Scanner interface for database deserialization.\nfunc (d *NullDecimal) Scan(value interface{}) error {\n\tif value == nil {\n\t\td.Valid = false\n\t\treturn nil\n\t}\n\td.Valid = true\n\treturn d.Decimal.Scan(value)\n}\n\n// Value implements the driver.Valuer interface for database serialization.\nfunc (d NullDecimal) Value() (driver.Value, error) {\n\tif !d.Valid {\n\t\treturn nil, nil\n\t}\n\treturn d.Decimal.Value()\n}\n\n// UnmarshalJSON implements the json.Unmarshaler interface.\nfunc (d *NullDecimal) UnmarshalJSON(decimalBytes []byte) error {\n\tif string(decimalBytes) == \"null\" {\n\t\td.Valid = false\n\t\treturn nil\n\t}\n\td.Valid = true\n\treturn d.Decimal.UnmarshalJSON(decimalBytes)\n}\n\n// MarshalJSON implements the json.Marshaler interface.\nfunc (d NullDecimal) MarshalJSON() ([]byte, error) {\n\tif !d.Valid {\n\t\treturn []byte(\"null\"), nil\n\t}\n\treturn d.Decimal.MarshalJSON()\n}\n\n// Trig functions\n\n// Atan returns the arctangent, in radians, of x.\nfunc (d Decimal) Atan() Decimal {\n\tif d.Equal(NewFromFloat(0.0)) {\n\t\treturn d\n\t}\n\tif d.GreaterThan(NewFromFloat(0.0)) {\n\t\treturn d.satan()\n\t}\n\treturn d.Neg().satan().Neg()\n}\n\nfunc (d Decimal) xatan() Decimal {\n\tP0 := NewFromFloat(-8.750608600031904122785e-01)\n\tP1 := NewFromFloat(-1.615753718733365076637e+01)\n\tP2 := NewFromFloat(-7.500855792314704667340e+01)\n\tP3 := NewFromFloat(-1.228866684490136173410e+02)\n\tP4 := NewFromFloat(-6.485021904942025371773e+01)\n\tQ0 := NewFromFloat(2.485846490142306297962e+01)\n\tQ1 := NewFromFloat(1.650270098316988542046e+02)\n\tQ2 := NewFromFloat(4.328810604912902668951e+02)\n\tQ3 := NewFromFloat(4.853903996359136964868e+02)\n\tQ4 := NewFromFloat(1.945506571482613964425e+02)\n\tz := d.Mul(d)\n\tb1 := P0.Mul(z).Add(P1).Mul(z).Add(P2).Mul(z).Add(P3).Mul(z).Add(P4).Mul(z)\n\tb2 := z.Add(Q0).Mul(z).Add(Q1).Mul(z).Add(Q2).Mul(z).Add(Q3).Mul(z).Add(Q4)\n\tz = b1.Div(b2)\n\tz = d.Mul(z).Add(d)\n\treturn z\n}\n\n// satan reduces its argument (known to be positive)\n// to the range [0, 0.66] and calls xatan.\nfunc (d Decimal) satan() Decimal {\n\tMorebits := NewFromFloat(6.123233995736765886130e-17) // pi/2 = PIO2 + Morebits\n\tTan3pio8 := NewFromFloat(2.41421356237309504880)      // tan(3*pi/8)\n\tpi := NewFromFloat(3.14159265358979323846264338327950288419716939937510582097494459)\n\n\tif d.LessThanOrEqual(NewFromFloat(0.66)) {\n\t\treturn d.xatan()\n\t}\n\tif d.GreaterThan(Tan3pio8) {\n\t\treturn pi.Div(NewFromFloat(2.0)).Sub(NewFromFloat(1.0).Div(d).xatan()).Add(Morebits)\n\t}\n\treturn pi.Div(NewFromFloat(4.0)).Add((d.Sub(NewFromFloat(1.0)).Div(d.Add(NewFromFloat(1.0)))).xatan()).Add(NewFromFloat(0.5).Mul(Morebits))\n}\n\n// sin coefficients\nvar _sin = [...]Decimal{\n\tNewFromFloat(1.58962301576546568060e-10), // 0x3de5d8fd1fd19ccd\n\tNewFromFloat(-2.50507477628578072866e-8), // 0xbe5ae5e5a9291f5d\n\tNewFromFloat(2.75573136213857245213e-6),  // 0x3ec71de3567d48a1\n\tNewFromFloat(-1.98412698295895385996e-4), // 0xbf2a01a019bfdf03\n\tNewFromFloat(8.33333333332211858878e-3),  // 0x3f8111111110f7d0\n\tNewFromFloat(-1.66666666666666307295e-1), // 0xbfc5555555555548\n}\n\n// Sin returns the sine of the radian argument x.\nfunc (d Decimal) Sin() Decimal {\n\tPI4A := NewFromFloat(7.85398125648498535156e-1)                             // 0x3fe921fb40000000, Pi/4 split into three parts\n\tPI4B := NewFromFloat(3.77489470793079817668e-8)                             // 0x3e64442d00000000,\n\tPI4C := NewFromFloat(2.69515142907905952645e-15)                            // 0x3ce8469898cc5170,\n\tM4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi\n\n\tif d.Equal(NewFromFloat(0.0)) {\n\t\treturn d\n\t}\n\t// make argument positive but save the sign\n\tsign := false\n\tif d.LessThan(NewFromFloat(0.0)) {\n\t\td = d.Neg()\n\t\tsign = true\n\t}\n\n\tj := d.Mul(M4PI).IntPart()    // integer part of x/(Pi/4), as integer for tests on the phase angle\n\ty := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float\n\n\t// map zeros to origin\n\tif j&1 == 1 {\n\t\tj++\n\t\ty = y.Add(NewFromFloat(1.0))\n\t}\n\tj &= 7 // octant modulo 2Pi radians (360 degrees)\n\t// reflect in x axis\n\tif j > 3 {\n\t\tsign = !sign\n\t\tj -= 4\n\t}\n\tz := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic\n\tzz := z.Mul(z)\n\n\tif j == 1 || j == 2 {\n\t\tw := zz.Mul(zz).Mul(_cos[0].Mul(zz).Add(_cos[1]).Mul(zz).Add(_cos[2]).Mul(zz).Add(_cos[3]).Mul(zz).Add(_cos[4]).Mul(zz).Add(_cos[5]))\n\t\ty = NewFromFloat(1.0).Sub(NewFromFloat(0.5).Mul(zz)).Add(w)\n\t} else {\n\t\ty = z.Add(z.Mul(zz).Mul(_sin[0].Mul(zz).Add(_sin[1]).Mul(zz).Add(_sin[2]).Mul(zz).Add(_sin[3]).Mul(zz).Add(_sin[4]).Mul(zz).Add(_sin[5])))\n\t}\n\tif sign {\n\t\ty = y.Neg()\n\t}\n\treturn y\n}\n\n// cos coefficients\nvar _cos = [...]Decimal{\n\tNewFromFloat(-1.13585365213876817300e-11), // 0xbda8fa49a0861a9b\n\tNewFromFloat(2.08757008419747316778e-9),   // 0x3e21ee9d7b4e3f05\n\tNewFromFloat(-2.75573141792967388112e-7),  // 0xbe927e4f7eac4bc6\n\tNewFromFloat(2.48015872888517045348e-5),   // 0x3efa01a019c844f5\n\tNewFromFloat(-1.38888888888730564116e-3),  // 0xbf56c16c16c14f91\n\tNewFromFloat(4.16666666666665929218e-2),   // 0x3fa555555555554b\n}\n\n// Cos returns the cosine of the radian argument x.\nfunc (d Decimal) Cos() Decimal {\n\n\tPI4A := NewFromFloat(7.85398125648498535156e-1)                             // 0x3fe921fb40000000, Pi/4 split into three parts\n\tPI4B := NewFromFloat(3.77489470793079817668e-8)                             // 0x3e64442d00000000,\n\tPI4C := NewFromFloat(2.69515142907905952645e-15)                            // 0x3ce8469898cc5170,\n\tM4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi\n\n\t// make argument positive\n\tsign := false\n\tif d.LessThan(NewFromFloat(0.0)) {\n\t\td = d.Neg()\n\t}\n\n\tj := d.Mul(M4PI).IntPart()    // integer part of x/(Pi/4), as integer for tests on the phase angle\n\ty := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float\n\n\t// map zeros to origin\n\tif j&1 == 1 {\n\t\tj++\n\t\ty = y.Add(NewFromFloat(1.0))\n\t}\n\tj &= 7 // octant modulo 2Pi radians (360 degrees)\n\t// reflect in x axis\n\tif j > 3 {\n\t\tsign = !sign\n\t\tj -= 4\n\t}\n\tif j > 1 {\n\t\tsign = !sign\n\t}\n\n\tz := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic\n\tzz := z.Mul(z)\n\n\tif j == 1 || j == 2 {\n\t\ty = z.Add(z.Mul(zz).Mul(_sin[0].Mul(zz).Add(_sin[1]).Mul(zz).Add(_sin[2]).Mul(zz).Add(_sin[3]).Mul(zz).Add(_sin[4]).Mul(zz).Add(_sin[5])))\n\t} else {\n\t\tw := zz.Mul(zz).Mul(_cos[0].Mul(zz).Add(_cos[1]).Mul(zz).Add(_cos[2]).Mul(zz).Add(_cos[3]).Mul(zz).Add(_cos[4]).Mul(zz).Add(_cos[5]))\n\t\ty = NewFromFloat(1.0).Sub(NewFromFloat(0.5).Mul(zz)).Add(w)\n\t}\n\tif sign {\n\t\ty = y.Neg()\n\t}\n\treturn y\n}\n\nvar _tanP = [...]Decimal{\n\tNewFromFloat(-1.30936939181383777646e+4), // 0xc0c992d8d24f3f38\n\tNewFromFloat(1.15351664838587416140e+6),  // 0x413199eca5fc9ddd\n\tNewFromFloat(-1.79565251976484877988e+7), // 0xc1711fead3299176\n}\nvar _tanQ = [...]Decimal{\n\tNewFromFloat(1.00000000000000000000e+0),\n\tNewFromFloat(1.36812963470692954678e+4),  //0x40cab8a5eeb36572\n\tNewFromFloat(-1.32089234440210967447e+6), //0xc13427bc582abc96\n\tNewFromFloat(2.50083801823357915839e+7),  //0x4177d98fc2ead8ef\n\tNewFromFloat(-5.38695755929454629881e+7), //0xc189afe03cbe5a31\n}\n\n// Tan returns the tangent of the radian argument x.\nfunc (d Decimal) Tan() Decimal {\n\n\tPI4A := NewFromFloat(7.85398125648498535156e-1)                             // 0x3fe921fb40000000, Pi/4 split into three parts\n\tPI4B := NewFromFloat(3.77489470793079817668e-8)                             // 0x3e64442d00000000,\n\tPI4C := NewFromFloat(2.69515142907905952645e-15)                            // 0x3ce8469898cc5170,\n\tM4PI := NewFromFloat(1.273239544735162542821171882678754627704620361328125) // 4/pi\n\n\tif d.Equal(NewFromFloat(0.0)) {\n\t\treturn d\n\t}\n\n\t// make argument positive but save the sign\n\tsign := false\n\tif d.LessThan(NewFromFloat(0.0)) {\n\t\td = d.Neg()\n\t\tsign = true\n\t}\n\n\tj := d.Mul(M4PI).IntPart()    // integer part of x/(Pi/4), as integer for tests on the phase angle\n\ty := NewFromFloat(float64(j)) // integer part of x/(Pi/4), as float\n\n\t// map zeros to origin\n\tif j&1 == 1 {\n\t\tj++\n\t\ty = y.Add(NewFromFloat(1.0))\n\t}\n\n\tz := d.Sub(y.Mul(PI4A)).Sub(y.Mul(PI4B)).Sub(y.Mul(PI4C)) // Extended precision modular arithmetic\n\tzz := z.Mul(z)\n\n\tif zz.GreaterThan(NewFromFloat(1e-14)) {\n\t\tw := zz.Mul(_tanP[0].Mul(zz).Add(_tanP[1]).Mul(zz).Add(_tanP[2]))\n\t\tx := zz.Add(_tanQ[1]).Mul(zz).Add(_tanQ[2]).Mul(zz).Add(_tanQ[3]).Mul(zz).Add(_tanQ[4])\n\t\ty = z.Add(z.Mul(w.Div(x)))\n\t} else {\n\t\ty = z\n\t}\n\tif j&2 == 2 {\n\t\ty = NewFromFloat(-1.0).Div(y)\n\t}\n\tif sign {\n\t\ty = y.Neg()\n\t}\n\treturn y\n}\n"
  },
  {
    "path": "vendor/github.com/shopspring/decimal/rounding.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Multiprecision decimal numbers.\n// For floating-point formatting only; not general purpose.\n// Only operations are assign and (binary) left/right shift.\n// Can do binary floating point in multiprecision decimal precisely\n// because 2 divides 10; cannot do decimal floating point\n// in multiprecision binary precisely.\n\npackage decimal\n\ntype floatInfo struct {\n\tmantbits uint\n\texpbits  uint\n\tbias     int\n}\n\nvar float32info = floatInfo{23, 8, -127}\nvar float64info = floatInfo{52, 11, -1023}\n\n// roundShortest rounds d (= mant * 2^exp) to the shortest number of digits\n// that will let the original floating point value be precisely reconstructed.\nfunc roundShortest(d *decimal, mant uint64, exp int, flt *floatInfo) {\n\t// If mantissa is zero, the number is zero; stop now.\n\tif mant == 0 {\n\t\td.nd = 0\n\t\treturn\n\t}\n\n\t// Compute upper and lower such that any decimal number\n\t// between upper and lower (possibly inclusive)\n\t// will round to the original floating point number.\n\n\t// We may see at once that the number is already shortest.\n\t//\n\t// Suppose d is not denormal, so that 2^exp <= d < 10^dp.\n\t// The closest shorter number is at least 10^(dp-nd) away.\n\t// The lower/upper bounds computed below are at distance\n\t// at most 2^(exp-mantbits).\n\t//\n\t// So the number is already shortest if 10^(dp-nd) > 2^(exp-mantbits),\n\t// or equivalently log2(10)*(dp-nd) > exp-mantbits.\n\t// It is true if 332/100*(dp-nd) >= exp-mantbits (log2(10) > 3.32).\n\tminexp := flt.bias + 1 // minimum possible exponent\n\tif exp > minexp && 332*(d.dp-d.nd) >= 100*(exp-int(flt.mantbits)) {\n\t\t// The number is already shortest.\n\t\treturn\n\t}\n\n\t// d = mant << (exp - mantbits)\n\t// Next highest floating point number is mant+1 << exp-mantbits.\n\t// Our upper bound is halfway between, mant*2+1 << exp-mantbits-1.\n\tupper := new(decimal)\n\tupper.Assign(mant*2 + 1)\n\tupper.Shift(exp - int(flt.mantbits) - 1)\n\n\t// d = mant << (exp - mantbits)\n\t// Next lowest floating point number is mant-1 << exp-mantbits,\n\t// unless mant-1 drops the significant bit and exp is not the minimum exp,\n\t// in which case the next lowest is mant*2-1 << exp-mantbits-1.\n\t// Either way, call it mantlo << explo-mantbits.\n\t// Our lower bound is halfway between, mantlo*2+1 << explo-mantbits-1.\n\tvar mantlo uint64\n\tvar explo int\n\tif mant > 1<<flt.mantbits || exp == minexp {\n\t\tmantlo = mant - 1\n\t\texplo = exp\n\t} else {\n\t\tmantlo = mant*2 - 1\n\t\texplo = exp - 1\n\t}\n\tlower := new(decimal)\n\tlower.Assign(mantlo*2 + 1)\n\tlower.Shift(explo - int(flt.mantbits) - 1)\n\n\t// The upper and lower bounds are possible outputs only if\n\t// the original mantissa is even, so that IEEE round-to-even\n\t// would round to the original mantissa and not the neighbors.\n\tinclusive := mant%2 == 0\n\n\t// Now we can figure out the minimum number of digits required.\n\t// Walk along until d has distinguished itself from upper and lower.\n\tfor i := 0; i < d.nd; i++ {\n\t\tl := byte('0') // lower digit\n\t\tif i < lower.nd {\n\t\t\tl = lower.d[i]\n\t\t}\n\t\tm := d.d[i]    // middle digit\n\t\tu := byte('0') // upper digit\n\t\tif i < upper.nd {\n\t\t\tu = upper.d[i]\n\t\t}\n\n\t\t// Okay to round down (truncate) if lower has a different digit\n\t\t// or if lower is inclusive and is exactly the result of rounding\n\t\t// down (i.e., and we have reached the final digit of lower).\n\t\tokdown := l != m || inclusive && i+1 == lower.nd\n\n\t\t// Okay to round up if upper has a different digit and either upper\n\t\t// is inclusive or upper is bigger than the result of rounding up.\n\t\tokup := m != u && (inclusive || m+1 < u || i+1 < upper.nd)\n\n\t\t// If it's okay to do either, then round to the nearest one.\n\t\t// If it's okay to do only one, do it.\n\t\tswitch {\n\t\tcase okdown && okup:\n\t\t\td.Round(i + 1)\n\t\t\treturn\n\t\tcase okdown:\n\t\t\td.RoundDown(i + 1)\n\t\t\treturn\n\t\tcase okup:\n\t\t\td.RoundUp(i + 1)\n\t\t\treturn\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/siddontang/go-log/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 siddontang\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."
  },
  {
    "path": "vendor/github.com/siddontang/go-log/log/doc.go",
    "content": "// Package log supplies more advanced features than go orign log package.\n//\n// It supports log different level: trace, debug, info, warn, error, fatal.\n//\n// It also supports different log handlers which you can log to stdout, file, socket, etc...\n//\n// Use\n//\n//  import \"github.com/siddontang/go-log/log\"\n//\n//  //log with different level\n//  log.Info(\"hello world\")\n//  log.Error(\"hello world\")\n//\n//  //create a logger with specified handler\n//  h := NewStreamHandler(os.Stdout)\n//  l := log.NewDefault(h)\n//  l.Info(\"hello world\")\n//\npackage log\n"
  },
  {
    "path": "vendor/github.com/siddontang/go-log/log/filehandler.go",
    "content": "package log\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path\"\n\t\"time\"\n)\n\n// FileHandler writes log to a file.\ntype FileHandler struct {\n\tfd *os.File\n}\n\n// NewFileHandler creates a FileHander\nfunc NewFileHandler(fileName string, flag int) (*FileHandler, error) {\n\tdir := path.Dir(fileName)\n\tos.Mkdir(dir, 0777)\n\n\tf, err := os.OpenFile(fileName, flag, 0755)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\th := new(FileHandler)\n\n\th.fd = f\n\n\treturn h, nil\n}\n\n// Write implements Handler interface\nfunc (h *FileHandler) Write(b []byte) (n int, err error) {\n\treturn h.fd.Write(b)\n}\n\n// Close implements Handler interface\nfunc (h *FileHandler) Close() error {\n\treturn h.fd.Close()\n}\n\n// RotatingFileHandler writes log a file, if file size exceeds maxBytes,\n// it will backup current file and open a new one.\n//\n// max backup file number is set by backupCount, it will delete oldest if backups too many.\ntype RotatingFileHandler struct {\n\tfd *os.File\n\n\tfileName    string\n\tmaxBytes    int\n\tcurBytes    int\n\tbackupCount int\n}\n\n// NewRotatingFileHandler creates a RotatingFileHandler\nfunc NewRotatingFileHandler(fileName string, maxBytes int, backupCount int) (*RotatingFileHandler, error) {\n\tdir := path.Dir(fileName)\n\tos.MkdirAll(dir, 0777)\n\n\th := new(RotatingFileHandler)\n\n\tif maxBytes <= 0 {\n\t\treturn nil, fmt.Errorf(\"invalid max bytes\")\n\t}\n\n\th.fileName = fileName\n\th.maxBytes = maxBytes\n\th.backupCount = backupCount\n\n\tvar err error\n\th.fd, err = os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tf, err := h.fd.Stat()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\th.curBytes = int(f.Size())\n\n\treturn h, nil\n}\n\n// Write implements Handler interface\nfunc (h *RotatingFileHandler) Write(p []byte) (n int, err error) {\n\th.doRollover()\n\tn, err = h.fd.Write(p)\n\th.curBytes += n\n\treturn\n}\n\n// Close implements Handler interface\nfunc (h *RotatingFileHandler) Close() error {\n\tif h.fd != nil {\n\t\treturn h.fd.Close()\n\t}\n\treturn nil\n}\n\nfunc (h *RotatingFileHandler) doRollover() {\n\tif h.curBytes < h.maxBytes {\n\t\treturn\n\t}\n\n\tf, err := h.fd.Stat()\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif h.maxBytes <= 0 {\n\t\treturn\n\t} else if f.Size() < int64(h.maxBytes) {\n\t\th.curBytes = int(f.Size())\n\t\treturn\n\t}\n\n\tif h.backupCount > 0 {\n\t\th.fd.Close()\n\n\t\tfor i := h.backupCount - 1; i > 0; i-- {\n\t\t\tsfn := fmt.Sprintf(\"%s.%d\", h.fileName, i)\n\t\t\tdfn := fmt.Sprintf(\"%s.%d\", h.fileName, i+1)\n\n\t\t\tos.Rename(sfn, dfn)\n\t\t}\n\n\t\tdfn := fmt.Sprintf(\"%s.1\", h.fileName)\n\t\tos.Rename(h.fileName, dfn)\n\n\t\th.fd, _ = os.OpenFile(h.fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)\n\t\th.curBytes = 0\n\t\tf, err := h.fd.Stat()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\th.curBytes = int(f.Size())\n\t}\n}\n\n// TimeRotatingFileHandler writes log to a file,\n// it will backup current and open a new one, with a period time you sepecified.\n//\n// refer: http://docs.python.org/2/library/logging.handlers.html.\n// same like python TimedRotatingFileHandler.\ntype TimeRotatingFileHandler struct {\n\tfd *os.File\n\n\tbaseName   string\n\tinterval   int64\n\tsuffix     string\n\trolloverAt int64\n}\n\n// TimeRotating way\nconst (\n\tWhenSecond = iota\n\tWhenMinute\n\tWhenHour\n\tWhenDay\n)\n\n// NewTimeRotatingFileHandler creates a TimeRotatingFileHandler\nfunc NewTimeRotatingFileHandler(baseName string, when int8, interval int) (*TimeRotatingFileHandler, error) {\n\tdir := path.Dir(baseName)\n\tos.MkdirAll(dir, 0777)\n\n\th := new(TimeRotatingFileHandler)\n\n\th.baseName = baseName\n\n\tswitch when {\n\tcase WhenSecond:\n\t\th.interval = 1\n\t\th.suffix = \"2006-01-02_15-04-05\"\n\tcase WhenMinute:\n\t\th.interval = 60\n\t\th.suffix = \"2006-01-02_15-04\"\n\tcase WhenHour:\n\t\th.interval = 3600\n\t\th.suffix = \"2006-01-02_15\"\n\tcase WhenDay:\n\t\th.interval = 3600 * 24\n\t\th.suffix = \"2006-01-02\"\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid when_rotate: %d\", when)\n\t}\n\n\th.interval = h.interval * int64(interval)\n\n\tvar err error\n\th.fd, err = os.OpenFile(h.baseName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfInfo, _ := h.fd.Stat()\n\th.rolloverAt = fInfo.ModTime().Unix() + h.interval\n\n\treturn h, nil\n}\n\nfunc (h *TimeRotatingFileHandler) doRollover() {\n\t//refer http://hg.python.org/cpython/file/2.7/Lib/logging/handlers.py\n\tnow := time.Now()\n\n\tif h.rolloverAt <= now.Unix() {\n\t\tfName := h.baseName + now.Format(h.suffix)\n\t\th.fd.Close()\n\t\te := os.Rename(h.baseName, fName)\n\t\tif e != nil {\n\t\t\tpanic(e)\n\t\t}\n\n\t\th.fd, _ = os.OpenFile(h.baseName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)\n\n\t\th.rolloverAt = time.Now().Unix() + h.interval\n\t}\n}\n\n// Write implements Handler interface\nfunc (h *TimeRotatingFileHandler) Write(b []byte) (n int, err error) {\n\th.doRollover()\n\treturn h.fd.Write(b)\n}\n\n// Close implements Handler interface\nfunc (h *TimeRotatingFileHandler) Close() error {\n\treturn h.fd.Close()\n}\n"
  },
  {
    "path": "vendor/github.com/siddontang/go-log/log/handler.go",
    "content": "package log\n\nimport (\n\t\"io\"\n)\n\n//Handler writes logs to somewhere\ntype Handler interface {\n\tWrite(p []byte) (n int, err error)\n\tClose() error\n}\n\n// StreamHandler writes logs to a specified io Writer, maybe stdout, stderr, etc...\ntype StreamHandler struct {\n\tw io.Writer\n}\n\n// NewStreamHandler creates a StreamHandler\nfunc NewStreamHandler(w io.Writer) (*StreamHandler, error) {\n\th := new(StreamHandler)\n\n\th.w = w\n\n\treturn h, nil\n}\n\n// Write implements Handler interface\nfunc (h *StreamHandler) Write(b []byte) (n int, err error) {\n\treturn h.w.Write(b)\n}\n\n// Close implements Handler interface\nfunc (h *StreamHandler) Close() error {\n\treturn nil\n}\n\n// NullHandler does nothing, it discards anything.\ntype NullHandler struct {\n}\n\n// NewNullHandler creates a NullHandler\nfunc NewNullHandler() (*NullHandler, error) {\n\treturn new(NullHandler), nil\n}\n\n// // Write implements Handler interface\nfunc (h *NullHandler) Write(b []byte) (n int, err error) {\n\treturn len(b), nil\n}\n\n// Close implements Handler interface\nfunc (h *NullHandler) Close() error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/siddontang/go-log/log/log.go",
    "content": "package log\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nvar logger = NewDefault(newStdHandler())\n\n// SetDefaultLogger changes the global logger\nfunc SetDefaultLogger(l *Logger) {\n\tlogger = l\n}\n\n// SetLevel changes the logger level\nfunc SetLevel(level Level) {\n\tlogger.SetLevel(level)\n}\n\n// SetLevelByName changes the logger level by name\nfunc SetLevelByName(name string) {\n\tlogger.SetLevelByName(name)\n}\n\n// Fatal records the log with fatal level and exits\nfunc Fatal(args ...interface{}) {\n\tlogger.Output(2, LevelFatal, fmt.Sprint(args...))\n\tos.Exit(1)\n}\n\n// Fatalf records the log with fatal level and exits\nfunc Fatalf(format string, args ...interface{}) {\n\tlogger.Output(2, LevelFatal, fmt.Sprintf(format, args...))\n\tos.Exit(1)\n}\n\n// Fatalln records the log with fatal level and exits\nfunc Fatalln(args ...interface{}) {\n\tlogger.Output(2, LevelFatal, fmt.Sprintln(args...))\n\tos.Exit(1)\n}\n\n// Panic records the log with fatal level and panics\nfunc Panic(args ...interface{}) {\n\tmsg := fmt.Sprint(args...)\n\tlogger.Output(2, LevelError, msg)\n\tpanic(msg)\n}\n\n// Panicf records the log with fatal level and panics\nfunc Panicf(format string, args ...interface{}) {\n\tmsg := fmt.Sprintf(format, args...)\n\tlogger.Output(2, LevelError, msg)\n\tpanic(msg)\n}\n\n// Panicln records the log with fatal level and panics\nfunc Panicln(args ...interface{}) {\n\tmsg := fmt.Sprintln(args...)\n\tlogger.Output(2, LevelError, msg)\n\tpanic(msg)\n}\n\n// Print records the log with trace level\nfunc Print(args ...interface{}) {\n\tlogger.Output(2, LevelTrace, fmt.Sprint(args...))\n}\n\n// Printf records the log with trace level\nfunc Printf(format string, args ...interface{}) {\n\tlogger.Output(2, LevelTrace, fmt.Sprintf(format, args...))\n}\n\n// Println records the log with trace level\nfunc Println(args ...interface{}) {\n\tlogger.Output(2, LevelTrace, fmt.Sprintln(args...))\n}\n\n// Debug records the log with debug level\nfunc Debug(args ...interface{}) {\n\tlogger.Output(2, LevelDebug, fmt.Sprint(args...))\n}\n\n// Debugf records the log with debug level\nfunc Debugf(format string, args ...interface{}) {\n\tlogger.Output(2, LevelDebug, fmt.Sprintf(format, args...))\n}\n\n// Debugln records the log with debug level\nfunc Debugln(args ...interface{}) {\n\tlogger.Output(2, LevelDebug, fmt.Sprintln(args...))\n}\n\n// Error records the log with error level\nfunc Error(args ...interface{}) {\n\tlogger.Output(2, LevelError, fmt.Sprint(args...))\n}\n\n// Errorf records the log with error level\nfunc Errorf(format string, args ...interface{}) {\n\tlogger.Output(2, LevelError, fmt.Sprintf(format, args...))\n}\n\n// Errorln records the log with error level\nfunc Errorln(args ...interface{}) {\n\tlogger.Output(2, LevelError, fmt.Sprintln(args...))\n}\n\n// Info records the log with info level\nfunc Info(args ...interface{}) {\n\tlogger.Output(2, LevelInfo, fmt.Sprint(args...))\n}\n\n// Infof records the log with info level\nfunc Infof(format string, args ...interface{}) {\n\tlogger.Output(2, LevelInfo, fmt.Sprintf(format, args...))\n}\n\n// Infoln records the log with info level\nfunc Infoln(args ...interface{}) {\n\tlogger.Output(2, LevelInfo, fmt.Sprintln(args...))\n}\n\n// Warn records the log with warn level\nfunc Warn(args ...interface{}) {\n\tlogger.Output(2, LevelWarn, fmt.Sprint(args...))\n}\n\n// Warnf records the log with warn level\nfunc Warnf(format string, args ...interface{}) {\n\tlogger.Output(2, LevelWarn, fmt.Sprintf(format, args...))\n}\n\n// Warnln records the log with warn level\nfunc Warnln(args ...interface{}) {\n\tlogger.Output(2, LevelWarn, fmt.Sprintln(args...))\n}\n"
  },
  {
    "path": "vendor/github.com/siddontang/go-log/log/logger.go",
    "content": "package log\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/siddontang/go-log/loggers\"\n)\n\nconst (\n\ttimeFormat     = \"2006/01/02 15:04:05\"\n\tmaxBufPoolSize = 16\n)\n\n// Logger flag\nconst (\n\tLtime  = 1 << iota // time format \"2006/01/02 15:04:05\"\n\tLfile              // file.go:123\n\tLlevel             // [Trace|Debug|Info...]\n)\n\n// Level type\ntype Level int\n\n// Log level, from low to high, more high means more serious\nconst (\n\tLevelTrace Level = iota\n\tLevelDebug\n\tLevelInfo\n\tLevelWarn\n\tLevelError\n\tLevelFatal\n)\n\n// String returns level String\nfunc (l Level) String() string {\n\tswitch l {\n\tcase LevelTrace:\n\t\treturn \"trace\"\n\tcase LevelDebug:\n\t\treturn \"debug\"\n\tcase LevelInfo:\n\t\treturn \"info\"\n\tcase LevelWarn:\n\t\treturn \"warn\"\n\tcase LevelError:\n\t\treturn \"error\"\n\tcase LevelFatal:\n\t\treturn \"fatal\"\n\t}\n\t// return default info\n\treturn \"info\"\n}\n\n// Logger is the logger to record log\ntype Logger struct {\n\t// TODO: support logger.Contextual\n\tloggers.Advanced\n\n\tlevel Level\n\tflag  int\n\n\thLock   sync.Mutex\n\thandler Handler\n\n\tbufs sync.Pool\n}\n\n// New creates a logger with specified handler and flag\nfunc New(handler Handler, flag int) *Logger {\n\tvar l = new(Logger)\n\n\tl.level = LevelInfo\n\tl.handler = handler\n\n\tl.flag = flag\n\n\tl.bufs = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn make([]byte, 0, 1024)\n\t\t},\n\t}\n\n\treturn l\n}\n\n// NewDefault creates default logger with specified handler and flag: Ltime|Lfile|Llevel\nfunc NewDefault(handler Handler) *Logger {\n\treturn New(handler, Ltime|Lfile|Llevel)\n}\n\nfunc newStdHandler() *StreamHandler {\n\th, _ := NewStreamHandler(os.Stdout)\n\treturn h\n}\n\n// Close closes the logger\nfunc (l *Logger) Close() {\n\tl.hLock.Lock()\n\tdefer l.hLock.Unlock()\n\tl.handler.Close()\n}\n\n// SetLevel sets log level, any log level less than it will not log\nfunc (l *Logger) SetLevel(level Level) {\n\tl.level = level\n}\n\n// SetLevelByName sets log level by name\nfunc (l *Logger) SetLevelByName(name string) {\n\tlevel := LevelInfo\n\tswitch strings.ToLower(name) {\n\tcase \"trace\":\n\t\tlevel = LevelTrace\n\tcase \"debug\":\n\t\tlevel = LevelDebug\n\tcase \"warn\", \"warning\":\n\t\tlevel = LevelWarn\n\tcase \"error\":\n\t\tlevel = LevelError\n\tcase \"fatal\":\n\t\tlevel = LevelFatal\n\tdefault:\n\t\tlevel = LevelInfo\n\t}\n\n\tl.SetLevel(level)\n}\n\n// Output records the log with special callstack depth and log level.\nfunc (l *Logger) Output(callDepth int, level Level, msg string) {\n\tif l.level > level {\n\t\treturn\n\t}\n\n\tbuf := l.bufs.Get().([]byte)\n\tbuf = buf[0:0]\n\tdefer l.bufs.Put(buf)\n\n\tif l.flag&Ltime > 0 {\n\t\tnow := time.Now().Format(timeFormat)\n\t\tbuf = append(buf, '[')\n\t\tbuf = append(buf, now...)\n\t\tbuf = append(buf, \"] \"...)\n\t}\n\n\tif l.flag&Llevel > 0 {\n\t\tbuf = append(buf, '[')\n\t\tbuf = append(buf, level.String()...)\n\t\tbuf = append(buf, \"] \"...)\n\t}\n\n\tif l.flag&Lfile > 0 {\n\t\t_, file, line, ok := runtime.Caller(callDepth)\n\t\tif !ok {\n\t\t\tfile = \"???\"\n\t\t\tline = 0\n\t\t} else {\n\t\t\tfor i := len(file) - 1; i > 0; i-- {\n\t\t\t\tif file[i] == '/' {\n\t\t\t\t\tfile = file[i+1:]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf = append(buf, file...)\n\t\tbuf = append(buf, ':')\n\n\t\tbuf = strconv.AppendInt(buf, int64(line), 10)\n\t\tbuf = append(buf, ' ')\n\t}\n\n\tbuf = append(buf, msg...)\n\tif len(msg) == 0 || msg[len(msg)-1] != '\\n' {\n\t\tbuf = append(buf, '\\n')\n\t}\n\n\tl.hLock.Lock()\n\tl.handler.Write(buf)\n\tl.hLock.Unlock()\n}\n\n// Fatal records the log with fatal level and exits\nfunc (l *Logger) Fatal(args ...interface{}) {\n\tl.Output(2, LevelFatal, fmt.Sprint(args...))\n\tos.Exit(1)\n}\n\n// Fatalf records the log with fatal level and exits\nfunc (l *Logger) Fatalf(format string, args ...interface{}) {\n\tl.Output(2, LevelFatal, fmt.Sprintf(format, args...))\n\tos.Exit(1)\n}\n\n// Fatalln records the log with fatal level and exits\nfunc (l *Logger) Fatalln(args ...interface{}) {\n\tl.Output(2, LevelFatal, fmt.Sprintln(args...))\n\tos.Exit(1)\n}\n\n// Panic records the log with fatal level and panics\nfunc (l *Logger) Panic(args ...interface{}) {\n\tmsg := fmt.Sprint(args...)\n\tl.Output(2, LevelError, msg)\n\tpanic(msg)\n}\n\n// Panicf records the log with fatal level and panics\nfunc (l *Logger) Panicf(format string, args ...interface{}) {\n\tmsg := fmt.Sprintf(format, args...)\n\tl.Output(2, LevelError, msg)\n\tpanic(msg)\n}\n\n// Panicln records the log with fatal level and panics\nfunc (l *Logger) Panicln(args ...interface{}) {\n\tmsg := fmt.Sprintln(args...)\n\tl.Output(2, LevelError, msg)\n\tpanic(msg)\n}\n\n// Print records the log with trace level\nfunc (l *Logger) Print(args ...interface{}) {\n\tl.Output(2, LevelTrace, fmt.Sprint(args...))\n}\n\n// Printf records the log with trace level\nfunc (l *Logger) Printf(format string, args ...interface{}) {\n\tl.Output(2, LevelTrace, fmt.Sprintf(format, args...))\n}\n\n// Println records the log with trace level\nfunc (l *Logger) Println(args ...interface{}) {\n\tl.Output(2, LevelTrace, fmt.Sprintln(args...))\n}\n\n// Debug records the log with debug level\nfunc (l *Logger) Debug(args ...interface{}) {\n\tl.Output(2, LevelDebug, fmt.Sprint(args...))\n}\n\n// Debugf records the log with debug level\nfunc (l *Logger) Debugf(format string, args ...interface{}) {\n\tl.Output(2, LevelDebug, fmt.Sprintf(format, args...))\n}\n\n// Debugln records the log with debug level\nfunc (l *Logger) Debugln(args ...interface{}) {\n\tl.Output(2, LevelDebug, fmt.Sprintln(args...))\n}\n\n// Error records the log with error level\nfunc (l *Logger) Error(args ...interface{}) {\n\tl.Output(2, LevelError, fmt.Sprint(args...))\n}\n\n// Errorf records the log with error level\nfunc (l *Logger) Errorf(format string, args ...interface{}) {\n\tl.Output(2, LevelError, fmt.Sprintf(format, args...))\n}\n\n// Errorln records the log with error level\nfunc (l *Logger) Errorln(args ...interface{}) {\n\tl.Output(2, LevelError, fmt.Sprintln(args...))\n}\n\n// Info records the log with info level\nfunc (l *Logger) Info(args ...interface{}) {\n\tl.Output(2, LevelInfo, fmt.Sprint(args...))\n}\n\n// Infof records the log with info level\nfunc (l *Logger) Infof(format string, args ...interface{}) {\n\tl.Output(2, LevelInfo, fmt.Sprintf(format, args...))\n}\n\n// Infoln records the log with info level\nfunc (l *Logger) Infoln(args ...interface{}) {\n\tl.Output(2, LevelInfo, fmt.Sprintln(args...))\n}\n\n// Warn records the log with warn level\nfunc (l *Logger) Warn(args ...interface{}) {\n\tl.Output(2, LevelWarn, fmt.Sprint(args...))\n}\n\n// Warnf records the log with warn level\nfunc (l *Logger) Warnf(format string, args ...interface{}) {\n\tl.Output(2, LevelWarn, fmt.Sprintf(format, args...))\n}\n\n// Warnln records the log with warn level\nfunc (l *Logger) Warnln(args ...interface{}) {\n\tl.Output(2, LevelWarn, fmt.Sprintln(args...))\n}\n"
  },
  {
    "path": "vendor/github.com/siddontang/go-log/loggers/loggers.go",
    "content": "// MIT License\n\n// Copyright (c) 2017 Birkir A. Barkarson\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\npackage loggers\n\n// Standard is the interface used by Go's standard library's log package.\ntype Standard interface {\n\tFatal(args ...interface{})\n\tFatalf(format string, args ...interface{})\n\tFatalln(args ...interface{})\n\n\tPanic(args ...interface{})\n\tPanicf(format string, args ...interface{})\n\tPanicln(args ...interface{})\n\n\tPrint(args ...interface{})\n\tPrintf(format string, args ...interface{})\n\tPrintln(args ...interface{})\n}\n\n// Advanced is an interface with commonly used log level methods.\ntype Advanced interface {\n\tStandard\n\n\tDebug(args ...interface{})\n\tDebugf(format string, args ...interface{})\n\tDebugln(args ...interface{})\n\n\tError(args ...interface{})\n\tErrorf(format string, args ...interface{})\n\tErrorln(args ...interface{})\n\n\tInfo(args ...interface{})\n\tInfof(format string, args ...interface{})\n\tInfoln(args ...interface{})\n\n\tWarn(args ...interface{})\n\tWarnf(format string, args ...interface{})\n\tWarnln(args ...interface{})\n}\n\n// Contextual is an interface that allows context addition to a log statement before\n// calling the final print (message/level) method.\ntype Contextual interface {\n\tAdvanced\n\n\tWithField(key string, value interface{}) Advanced\n\tWithFields(fields ...interface{}) Advanced\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors.\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": "vendor/github.com/stretchr/testify/assert/assertion_compare.go",
    "content": "package assert\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// Deprecated: CompareType has only ever been for internal use and has accidentally been published since v1.6.0. Do not use it.\ntype CompareType = compareResult\n\ntype compareResult int\n\nconst (\n\tcompareLess compareResult = iota - 1\n\tcompareEqual\n\tcompareGreater\n)\n\nvar (\n\tintType   = reflect.TypeOf(int(1))\n\tint8Type  = reflect.TypeOf(int8(1))\n\tint16Type = reflect.TypeOf(int16(1))\n\tint32Type = reflect.TypeOf(int32(1))\n\tint64Type = reflect.TypeOf(int64(1))\n\n\tuintType   = reflect.TypeOf(uint(1))\n\tuint8Type  = reflect.TypeOf(uint8(1))\n\tuint16Type = reflect.TypeOf(uint16(1))\n\tuint32Type = reflect.TypeOf(uint32(1))\n\tuint64Type = reflect.TypeOf(uint64(1))\n\n\tuintptrType = reflect.TypeOf(uintptr(1))\n\n\tfloat32Type = reflect.TypeOf(float32(1))\n\tfloat64Type = reflect.TypeOf(float64(1))\n\n\tstringType = reflect.TypeOf(\"\")\n\n\ttimeType  = reflect.TypeOf(time.Time{})\n\tbytesType = reflect.TypeOf([]byte{})\n)\n\nfunc compare(obj1, obj2 interface{}, kind reflect.Kind) (compareResult, bool) {\n\tobj1Value := reflect.ValueOf(obj1)\n\tobj2Value := reflect.ValueOf(obj2)\n\n\t// throughout this switch we try and avoid calling .Convert() if possible,\n\t// as this has a pretty big performance impact\n\tswitch kind {\n\tcase reflect.Int:\n\t\t{\n\t\t\tintobj1, ok := obj1.(int)\n\t\t\tif !ok {\n\t\t\t\tintobj1 = obj1Value.Convert(intType).Interface().(int)\n\t\t\t}\n\t\t\tintobj2, ok := obj2.(int)\n\t\t\tif !ok {\n\t\t\t\tintobj2 = obj2Value.Convert(intType).Interface().(int)\n\t\t\t}\n\t\t\tif intobj1 > intobj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif intobj1 == intobj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif intobj1 < intobj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Int8:\n\t\t{\n\t\t\tint8obj1, ok := obj1.(int8)\n\t\t\tif !ok {\n\t\t\t\tint8obj1 = obj1Value.Convert(int8Type).Interface().(int8)\n\t\t\t}\n\t\t\tint8obj2, ok := obj2.(int8)\n\t\t\tif !ok {\n\t\t\t\tint8obj2 = obj2Value.Convert(int8Type).Interface().(int8)\n\t\t\t}\n\t\t\tif int8obj1 > int8obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif int8obj1 == int8obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif int8obj1 < int8obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Int16:\n\t\t{\n\t\t\tint16obj1, ok := obj1.(int16)\n\t\t\tif !ok {\n\t\t\t\tint16obj1 = obj1Value.Convert(int16Type).Interface().(int16)\n\t\t\t}\n\t\t\tint16obj2, ok := obj2.(int16)\n\t\t\tif !ok {\n\t\t\t\tint16obj2 = obj2Value.Convert(int16Type).Interface().(int16)\n\t\t\t}\n\t\t\tif int16obj1 > int16obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif int16obj1 == int16obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif int16obj1 < int16obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Int32:\n\t\t{\n\t\t\tint32obj1, ok := obj1.(int32)\n\t\t\tif !ok {\n\t\t\t\tint32obj1 = obj1Value.Convert(int32Type).Interface().(int32)\n\t\t\t}\n\t\t\tint32obj2, ok := obj2.(int32)\n\t\t\tif !ok {\n\t\t\t\tint32obj2 = obj2Value.Convert(int32Type).Interface().(int32)\n\t\t\t}\n\t\t\tif int32obj1 > int32obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif int32obj1 == int32obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif int32obj1 < int32obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Int64:\n\t\t{\n\t\t\tint64obj1, ok := obj1.(int64)\n\t\t\tif !ok {\n\t\t\t\tint64obj1 = obj1Value.Convert(int64Type).Interface().(int64)\n\t\t\t}\n\t\t\tint64obj2, ok := obj2.(int64)\n\t\t\tif !ok {\n\t\t\t\tint64obj2 = obj2Value.Convert(int64Type).Interface().(int64)\n\t\t\t}\n\t\t\tif int64obj1 > int64obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif int64obj1 == int64obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif int64obj1 < int64obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Uint:\n\t\t{\n\t\t\tuintobj1, ok := obj1.(uint)\n\t\t\tif !ok {\n\t\t\t\tuintobj1 = obj1Value.Convert(uintType).Interface().(uint)\n\t\t\t}\n\t\t\tuintobj2, ok := obj2.(uint)\n\t\t\tif !ok {\n\t\t\t\tuintobj2 = obj2Value.Convert(uintType).Interface().(uint)\n\t\t\t}\n\t\t\tif uintobj1 > uintobj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif uintobj1 == uintobj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif uintobj1 < uintobj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Uint8:\n\t\t{\n\t\t\tuint8obj1, ok := obj1.(uint8)\n\t\t\tif !ok {\n\t\t\t\tuint8obj1 = obj1Value.Convert(uint8Type).Interface().(uint8)\n\t\t\t}\n\t\t\tuint8obj2, ok := obj2.(uint8)\n\t\t\tif !ok {\n\t\t\t\tuint8obj2 = obj2Value.Convert(uint8Type).Interface().(uint8)\n\t\t\t}\n\t\t\tif uint8obj1 > uint8obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif uint8obj1 == uint8obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif uint8obj1 < uint8obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Uint16:\n\t\t{\n\t\t\tuint16obj1, ok := obj1.(uint16)\n\t\t\tif !ok {\n\t\t\t\tuint16obj1 = obj1Value.Convert(uint16Type).Interface().(uint16)\n\t\t\t}\n\t\t\tuint16obj2, ok := obj2.(uint16)\n\t\t\tif !ok {\n\t\t\t\tuint16obj2 = obj2Value.Convert(uint16Type).Interface().(uint16)\n\t\t\t}\n\t\t\tif uint16obj1 > uint16obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif uint16obj1 == uint16obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif uint16obj1 < uint16obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Uint32:\n\t\t{\n\t\t\tuint32obj1, ok := obj1.(uint32)\n\t\t\tif !ok {\n\t\t\t\tuint32obj1 = obj1Value.Convert(uint32Type).Interface().(uint32)\n\t\t\t}\n\t\t\tuint32obj2, ok := obj2.(uint32)\n\t\t\tif !ok {\n\t\t\t\tuint32obj2 = obj2Value.Convert(uint32Type).Interface().(uint32)\n\t\t\t}\n\t\t\tif uint32obj1 > uint32obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif uint32obj1 == uint32obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif uint32obj1 < uint32obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Uint64:\n\t\t{\n\t\t\tuint64obj1, ok := obj1.(uint64)\n\t\t\tif !ok {\n\t\t\t\tuint64obj1 = obj1Value.Convert(uint64Type).Interface().(uint64)\n\t\t\t}\n\t\t\tuint64obj2, ok := obj2.(uint64)\n\t\t\tif !ok {\n\t\t\t\tuint64obj2 = obj2Value.Convert(uint64Type).Interface().(uint64)\n\t\t\t}\n\t\t\tif uint64obj1 > uint64obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif uint64obj1 == uint64obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif uint64obj1 < uint64obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Float32:\n\t\t{\n\t\t\tfloat32obj1, ok := obj1.(float32)\n\t\t\tif !ok {\n\t\t\t\tfloat32obj1 = obj1Value.Convert(float32Type).Interface().(float32)\n\t\t\t}\n\t\t\tfloat32obj2, ok := obj2.(float32)\n\t\t\tif !ok {\n\t\t\t\tfloat32obj2 = obj2Value.Convert(float32Type).Interface().(float32)\n\t\t\t}\n\t\t\tif float32obj1 > float32obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif float32obj1 == float32obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif float32obj1 < float32obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.Float64:\n\t\t{\n\t\t\tfloat64obj1, ok := obj1.(float64)\n\t\t\tif !ok {\n\t\t\t\tfloat64obj1 = obj1Value.Convert(float64Type).Interface().(float64)\n\t\t\t}\n\t\t\tfloat64obj2, ok := obj2.(float64)\n\t\t\tif !ok {\n\t\t\t\tfloat64obj2 = obj2Value.Convert(float64Type).Interface().(float64)\n\t\t\t}\n\t\t\tif float64obj1 > float64obj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif float64obj1 == float64obj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif float64obj1 < float64obj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\tcase reflect.String:\n\t\t{\n\t\t\tstringobj1, ok := obj1.(string)\n\t\t\tif !ok {\n\t\t\t\tstringobj1 = obj1Value.Convert(stringType).Interface().(string)\n\t\t\t}\n\t\t\tstringobj2, ok := obj2.(string)\n\t\t\tif !ok {\n\t\t\t\tstringobj2 = obj2Value.Convert(stringType).Interface().(string)\n\t\t\t}\n\t\t\tif stringobj1 > stringobj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif stringobj1 == stringobj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif stringobj1 < stringobj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\t// Check for known struct types we can check for compare results.\n\tcase reflect.Struct:\n\t\t{\n\t\t\t// All structs enter here. We're not interested in most types.\n\t\t\tif !obj1Value.CanConvert(timeType) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// time.Time can be compared!\n\t\t\ttimeObj1, ok := obj1.(time.Time)\n\t\t\tif !ok {\n\t\t\t\ttimeObj1 = obj1Value.Convert(timeType).Interface().(time.Time)\n\t\t\t}\n\n\t\t\ttimeObj2, ok := obj2.(time.Time)\n\t\t\tif !ok {\n\t\t\t\ttimeObj2 = obj2Value.Convert(timeType).Interface().(time.Time)\n\t\t\t}\n\n\t\t\tif timeObj1.Before(timeObj2) {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t\tif timeObj1.Equal(timeObj2) {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\treturn compareGreater, true\n\t\t}\n\tcase reflect.Slice:\n\t\t{\n\t\t\t// We only care about the []byte type.\n\t\t\tif !obj1Value.CanConvert(bytesType) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// []byte can be compared!\n\t\t\tbytesObj1, ok := obj1.([]byte)\n\t\t\tif !ok {\n\t\t\t\tbytesObj1 = obj1Value.Convert(bytesType).Interface().([]byte)\n\n\t\t\t}\n\t\t\tbytesObj2, ok := obj2.([]byte)\n\t\t\tif !ok {\n\t\t\t\tbytesObj2 = obj2Value.Convert(bytesType).Interface().([]byte)\n\t\t\t}\n\n\t\t\treturn compareResult(bytes.Compare(bytesObj1, bytesObj2)), true\n\t\t}\n\tcase reflect.Uintptr:\n\t\t{\n\t\t\tuintptrObj1, ok := obj1.(uintptr)\n\t\t\tif !ok {\n\t\t\t\tuintptrObj1 = obj1Value.Convert(uintptrType).Interface().(uintptr)\n\t\t\t}\n\t\t\tuintptrObj2, ok := obj2.(uintptr)\n\t\t\tif !ok {\n\t\t\t\tuintptrObj2 = obj2Value.Convert(uintptrType).Interface().(uintptr)\n\t\t\t}\n\t\t\tif uintptrObj1 > uintptrObj2 {\n\t\t\t\treturn compareGreater, true\n\t\t\t}\n\t\t\tif uintptrObj1 == uintptrObj2 {\n\t\t\t\treturn compareEqual, true\n\t\t\t}\n\t\t\tif uintptrObj1 < uintptrObj2 {\n\t\t\t\treturn compareLess, true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn compareEqual, false\n}\n\n// Greater asserts that the first element is greater than the second\n//\n//\tassert.Greater(t, 2, 1)\n//\tassert.Greater(t, float64(2), float64(1))\n//\tassert.Greater(t, \"b\", \"a\")\nfunc Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn compareTwoValues(t, e1, e2, []compareResult{compareGreater}, \"\\\"%v\\\" is not greater than \\\"%v\\\"\", msgAndArgs...)\n}\n\n// GreaterOrEqual asserts that the first element is greater than or equal to the second\n//\n//\tassert.GreaterOrEqual(t, 2, 1)\n//\tassert.GreaterOrEqual(t, 2, 2)\n//\tassert.GreaterOrEqual(t, \"b\", \"a\")\n//\tassert.GreaterOrEqual(t, \"b\", \"b\")\nfunc GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn compareTwoValues(t, e1, e2, []compareResult{compareGreater, compareEqual}, \"\\\"%v\\\" is not greater than or equal to \\\"%v\\\"\", msgAndArgs...)\n}\n\n// Less asserts that the first element is less than the second\n//\n//\tassert.Less(t, 1, 2)\n//\tassert.Less(t, float64(1), float64(2))\n//\tassert.Less(t, \"a\", \"b\")\nfunc Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn compareTwoValues(t, e1, e2, []compareResult{compareLess}, \"\\\"%v\\\" is not less than \\\"%v\\\"\", msgAndArgs...)\n}\n\n// LessOrEqual asserts that the first element is less than or equal to the second\n//\n//\tassert.LessOrEqual(t, 1, 2)\n//\tassert.LessOrEqual(t, 2, 2)\n//\tassert.LessOrEqual(t, \"a\", \"b\")\n//\tassert.LessOrEqual(t, \"b\", \"b\")\nfunc LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn compareTwoValues(t, e1, e2, []compareResult{compareLess, compareEqual}, \"\\\"%v\\\" is not less than or equal to \\\"%v\\\"\", msgAndArgs...)\n}\n\n// Positive asserts that the specified element is positive\n//\n//\tassert.Positive(t, 1)\n//\tassert.Positive(t, 1.23)\nfunc Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tzero := reflect.Zero(reflect.TypeOf(e))\n\treturn compareTwoValues(t, e, zero.Interface(), []compareResult{compareGreater}, \"\\\"%v\\\" is not positive\", msgAndArgs...)\n}\n\n// Negative asserts that the specified element is negative\n//\n//\tassert.Negative(t, -1)\n//\tassert.Negative(t, -1.23)\nfunc Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tzero := reflect.Zero(reflect.TypeOf(e))\n\treturn compareTwoValues(t, e, zero.Interface(), []compareResult{compareLess}, \"\\\"%v\\\" is not negative\", msgAndArgs...)\n}\n\nfunc compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\te1Kind := reflect.ValueOf(e1).Kind()\n\te2Kind := reflect.ValueOf(e2).Kind()\n\tif e1Kind != e2Kind {\n\t\treturn Fail(t, \"Elements should be the same type\", msgAndArgs...)\n\t}\n\n\tcompareResult, isComparable := compare(e1, e2, e1Kind)\n\tif !isComparable {\n\t\treturn Fail(t, fmt.Sprintf(\"Can not compare type \\\"%s\\\"\", reflect.TypeOf(e1)), msgAndArgs...)\n\t}\n\n\tif !containsValue(allowedComparesResults, compareResult) {\n\t\treturn Fail(t, fmt.Sprintf(failMessage, e1, e2), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\nfunc containsValue(values []compareResult, value compareResult) bool {\n\tfor _, v := range values {\n\t\tif v == value {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_format.go",
    "content": "// Code generated with github.com/stretchr/testify/_codegen; DO NOT EDIT.\n\npackage assert\n\nimport (\n\thttp \"net/http\"\n\turl \"net/url\"\n\ttime \"time\"\n)\n\n// Conditionf uses a Comparison to assert a complex condition.\nfunc Conditionf(t TestingT, comp Comparison, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Condition(t, comp, append([]interface{}{msg}, args...)...)\n}\n\n// Containsf asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\tassert.Containsf(t, \"Hello World\", \"World\", \"error message %s\", \"formatted\")\n//\tassert.Containsf(t, [\"Hello\", \"World\"], \"World\", \"error message %s\", \"formatted\")\n//\tassert.Containsf(t, {\"Hello\": \"World\"}, \"Hello\", \"error message %s\", \"formatted\")\nfunc Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Contains(t, s, contains, append([]interface{}{msg}, args...)...)\n}\n\n// DirExistsf checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc DirExistsf(t TestingT, path string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn DirExists(t, path, append([]interface{}{msg}, args...)...)\n}\n\n// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], \"error message %s\", \"formatted\")\nfunc ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...)\n}\n\n// Emptyf asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tassert.Emptyf(t, obj, \"error message %s\", \"formatted\")\nfunc Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Empty(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// Equalf asserts that two objects are equal.\n//\n//\tassert.Equalf(t, 123, 123, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc Equalf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Equal(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// EqualErrorf asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\tassert.EqualErrorf(t, err,  expectedErrorString, \"error message %s\", \"formatted\")\nfunc EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualError(t, theError, errString, append([]interface{}{msg}, args...)...)\n}\n\n// EqualExportedValuesf asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t assert.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, \"error message %s\", \"formatted\") => true\n//\t assert.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, \"error message %s\", \"formatted\") => false\nfunc EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualExportedValues(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// EqualValuesf asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\tassert.EqualValuesf(t, uint32(123), int32(123), \"error message %s\", \"formatted\")\nfunc EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualValues(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Errorf asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if assert.Errorf(t, err, \"error message %s\", \"formatted\") {\n//\t\t   assert.Equal(t, expectedErrorf, err)\n//\t  }\nfunc Errorf(t TestingT, err error, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Error(t, err, append([]interface{}{msg}, args...)...)\n}\n\n// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorAs(t, err, target, append([]interface{}{msg}, args...)...)\n}\n\n// ErrorContainsf asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\tassert.ErrorContainsf(t, err,  expectedErrorSubString, \"error message %s\", \"formatted\")\nfunc ErrorContainsf(t TestingT, theError error, contains string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorContains(t, theError, contains, append([]interface{}{msg}, args...)...)\n}\n\n// ErrorIsf asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorIs(t, err, target, append([]interface{}{msg}, args...)...)\n}\n\n// Eventuallyf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\tassert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Eventually(t, condition, waitFor, tick, append([]interface{}{msg}, args...)...)\n}\n\n// EventuallyWithTf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\tassert.EventuallyWithTf(t, func(c *assert.CollectT, \"error message %s\", \"formatted\") {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\tassert.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc EventuallyWithTf(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EventuallyWithT(t, condition, waitFor, tick, append([]interface{}{msg}, args...)...)\n}\n\n// Exactlyf asserts that two objects are equal in value and type.\n//\n//\tassert.Exactlyf(t, int32(123), int64(123), \"error message %s\", \"formatted\")\nfunc Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Exactly(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Failf reports a failure through\nfunc Failf(t TestingT, failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Fail(t, failureMessage, append([]interface{}{msg}, args...)...)\n}\n\n// FailNowf fails test\nfunc FailNowf(t TestingT, failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FailNow(t, failureMessage, append([]interface{}{msg}, args...)...)\n}\n\n// Falsef asserts that the specified value is false.\n//\n//\tassert.Falsef(t, myBool, \"error message %s\", \"formatted\")\nfunc Falsef(t TestingT, value bool, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn False(t, value, append([]interface{}{msg}, args...)...)\n}\n\n// FileExistsf checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc FileExistsf(t TestingT, path string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FileExists(t, path, append([]interface{}{msg}, args...)...)\n}\n\n// Greaterf asserts that the first element is greater than the second\n//\n//\tassert.Greaterf(t, 2, 1, \"error message %s\", \"formatted\")\n//\tassert.Greaterf(t, float64(2), float64(1), \"error message %s\", \"formatted\")\n//\tassert.Greaterf(t, \"b\", \"a\", \"error message %s\", \"formatted\")\nfunc Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Greater(t, e1, e2, append([]interface{}{msg}, args...)...)\n}\n\n// GreaterOrEqualf asserts that the first element is greater than or equal to the second\n//\n//\tassert.GreaterOrEqualf(t, 2, 1, \"error message %s\", \"formatted\")\n//\tassert.GreaterOrEqualf(t, 2, 2, \"error message %s\", \"formatted\")\n//\tassert.GreaterOrEqualf(t, \"b\", \"a\", \"error message %s\", \"formatted\")\n//\tassert.GreaterOrEqualf(t, \"b\", \"b\", \"error message %s\", \"formatted\")\nfunc GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn GreaterOrEqual(t, e1, e2, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPBodyContainsf asserts that a specified handler returns a\n// body that contains a string.\n//\n//\tassert.HTTPBodyContainsf(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPBodyNotContainsf asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\tassert.HTTPBodyNotContainsf(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyNotContains(t, handler, method, url, values, str, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPErrorf asserts that a specified handler returns an error status code.\n//\n//\tassert.HTTPErrorf(t, myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPError(t, handler, method, url, values, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPRedirectf asserts that a specified handler returns a redirect status code.\n//\n//\tassert.HTTPRedirectf(t, myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPRedirect(t, handler, method, url, values, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPStatusCodef asserts that a specified handler returns a specified status code.\n//\n//\tassert.HTTPStatusCodef(t, myHandler, \"GET\", \"/notImplemented\", nil, 501, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPStatusCode(t, handler, method, url, values, statuscode, append([]interface{}{msg}, args...)...)\n}\n\n// HTTPSuccessf asserts that a specified handler returns a success status code.\n//\n//\tassert.HTTPSuccessf(t, myHandler, \"POST\", \"http://www.google.com\", nil, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPSuccess(t, handler, method, url, values, append([]interface{}{msg}, args...)...)\n}\n\n// Implementsf asserts that an object is implemented by the specified interface.\n//\n//\tassert.Implementsf(t, (*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Implements(t, interfaceObject, object, append([]interface{}{msg}, args...)...)\n}\n\n// InDeltaf asserts that the two numerals are within delta of each other.\n//\n//\tassert.InDeltaf(t, math.Pi, 22/7.0, 0.01, \"error message %s\", \"formatted\")\nfunc InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDelta(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc InDeltaMapValuesf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaMapValues(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// InDeltaSlicef is the same as InDelta, except it compares two slices.\nfunc InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaSlice(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// InEpsilonf asserts that expected and actual have a relative error less than epsilon\nfunc InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilon(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)\n}\n\n// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.\nfunc InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonSlice(t, expected, actual, epsilon, append([]interface{}{msg}, args...)...)\n}\n\n// IsDecreasingf asserts that the collection is decreasing\n//\n//\tassert.IsDecreasingf(t, []int{2, 1, 0}, \"error message %s\", \"formatted\")\n//\tassert.IsDecreasingf(t, []float{2, 1}, \"error message %s\", \"formatted\")\n//\tassert.IsDecreasingf(t, []string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsDecreasing(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// IsIncreasingf asserts that the collection is increasing\n//\n//\tassert.IsIncreasingf(t, []int{1, 2, 3}, \"error message %s\", \"formatted\")\n//\tassert.IsIncreasingf(t, []float{1, 2}, \"error message %s\", \"formatted\")\n//\tassert.IsIncreasingf(t, []string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsIncreasing(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// IsNonDecreasingf asserts that the collection is not decreasing\n//\n//\tassert.IsNonDecreasingf(t, []int{1, 1, 2}, \"error message %s\", \"formatted\")\n//\tassert.IsNonDecreasingf(t, []float{1, 2}, \"error message %s\", \"formatted\")\n//\tassert.IsNonDecreasingf(t, []string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsNonDecreasing(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// IsNonIncreasingf asserts that the collection is not increasing\n//\n//\tassert.IsNonIncreasingf(t, []int{2, 1, 1}, \"error message %s\", \"formatted\")\n//\tassert.IsNonIncreasingf(t, []float{2, 1}, \"error message %s\", \"formatted\")\n//\tassert.IsNonIncreasingf(t, []string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsNonIncreasing(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// IsTypef asserts that the specified objects are of the same type.\nfunc IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsType(t, expectedType, object, append([]interface{}{msg}, args...)...)\n}\n\n// JSONEqf asserts that two JSON strings are equivalent.\n//\n//\tassert.JSONEqf(t, `{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`, \"error message %s\", \"formatted\")\nfunc JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn JSONEq(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Lenf asserts that the specified object has specific length.\n// Lenf also fails if the object has a type that len() not accept.\n//\n//\tassert.Lenf(t, mySlice, 3, \"error message %s\", \"formatted\")\nfunc Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Len(t, object, length, append([]interface{}{msg}, args...)...)\n}\n\n// Lessf asserts that the first element is less than the second\n//\n//\tassert.Lessf(t, 1, 2, \"error message %s\", \"formatted\")\n//\tassert.Lessf(t, float64(1), float64(2), \"error message %s\", \"formatted\")\n//\tassert.Lessf(t, \"a\", \"b\", \"error message %s\", \"formatted\")\nfunc Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Less(t, e1, e2, append([]interface{}{msg}, args...)...)\n}\n\n// LessOrEqualf asserts that the first element is less than or equal to the second\n//\n//\tassert.LessOrEqualf(t, 1, 2, \"error message %s\", \"formatted\")\n//\tassert.LessOrEqualf(t, 2, 2, \"error message %s\", \"formatted\")\n//\tassert.LessOrEqualf(t, \"a\", \"b\", \"error message %s\", \"formatted\")\n//\tassert.LessOrEqualf(t, \"b\", \"b\", \"error message %s\", \"formatted\")\nfunc LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn LessOrEqual(t, e1, e2, append([]interface{}{msg}, args...)...)\n}\n\n// Negativef asserts that the specified element is negative\n//\n//\tassert.Negativef(t, -1, \"error message %s\", \"formatted\")\n//\tassert.Negativef(t, -1.23, \"error message %s\", \"formatted\")\nfunc Negativef(t TestingT, e interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Negative(t, e, append([]interface{}{msg}, args...)...)\n}\n\n// Neverf asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\tassert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Never(t, condition, waitFor, tick, append([]interface{}{msg}, args...)...)\n}\n\n// Nilf asserts that the specified object is nil.\n//\n//\tassert.Nilf(t, err, \"error message %s\", \"formatted\")\nfunc Nilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Nil(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// NoDirExistsf checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoDirExists(t, path, append([]interface{}{msg}, args...)...)\n}\n\n// NoErrorf asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if assert.NoErrorf(t, err, \"error message %s\", \"formatted\") {\n//\t\t   assert.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc NoErrorf(t TestingT, err error, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoError(t, err, append([]interface{}{msg}, args...)...)\n}\n\n// NoFileExistsf checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoFileExists(t, path, append([]interface{}{msg}, args...)...)\n}\n\n// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\tassert.NotContainsf(t, \"Hello World\", \"Earth\", \"error message %s\", \"formatted\")\n//\tassert.NotContainsf(t, [\"Hello\", \"World\"], \"Earth\", \"error message %s\", \"formatted\")\n//\tassert.NotContainsf(t, {\"Hello\": \"World\"}, \"Earth\", \"error message %s\", \"formatted\")\nfunc NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotContains(t, s, contains, append([]interface{}{msg}, args...)...)\n}\n\n// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], \"error message %s\", \"formatted\") -> false\n//\n// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], \"error message %s\", \"formatted\") -> true\n//\n// assert.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], \"error message %s\", \"formatted\") -> true\nfunc NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...)\n}\n\n// NotEmptyf asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif assert.NotEmptyf(t, obj, \"error message %s\", \"formatted\") {\n//\t  assert.Equal(t, \"two\", obj[1])\n//\t}\nfunc NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEmpty(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// NotEqualf asserts that the specified values are NOT equal.\n//\n//\tassert.NotEqualf(t, obj1, obj2, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqual(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// NotEqualValuesf asserts that two objects are not equal even when converted to the same type\n//\n//\tassert.NotEqualValuesf(t, obj1, obj2, \"error message %s\", \"formatted\")\nfunc NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// NotErrorAsf asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotErrorAs(t, err, target, append([]interface{}{msg}, args...)...)\n}\n\n// NotErrorIsf asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotErrorIs(t, err, target, append([]interface{}{msg}, args...)...)\n}\n\n// NotImplementsf asserts that an object does not implement the specified interface.\n//\n//\tassert.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc NotImplementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotImplements(t, interfaceObject, object, append([]interface{}{msg}, args...)...)\n}\n\n// NotNilf asserts that the specified object is not nil.\n//\n//\tassert.NotNilf(t, err, \"error message %s\", \"formatted\")\nfunc NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotNil(t, object, append([]interface{}{msg}, args...)...)\n}\n\n// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\tassert.NotPanicsf(t, func(){ RemainCalm() }, \"error message %s\", \"formatted\")\nfunc NotPanicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotPanics(t, f, append([]interface{}{msg}, args...)...)\n}\n\n// NotRegexpf asserts that a specified regexp does not match a string.\n//\n//\tassert.NotRegexpf(t, regexp.MustCompile(\"starts\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\tassert.NotRegexpf(t, \"^start\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotRegexp(t, rx, str, append([]interface{}{msg}, args...)...)\n}\n\n// NotSamef asserts that two pointers do not reference the same object.\n//\n//\tassert.NotSamef(t, ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSame(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// NotSubsetf asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\tassert.NotSubsetf(t, [1, 3, 4], [1, 2], \"error message %s\", \"formatted\")\n//\tassert.NotSubsetf(t, {\"x\": 1, \"y\": 2}, {\"z\": 3}, \"error message %s\", \"formatted\")\nfunc NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSubset(t, list, subset, append([]interface{}{msg}, args...)...)\n}\n\n// NotZerof asserts that i is not the zero value for its type.\nfunc NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotZero(t, i, append([]interface{}{msg}, args...)...)\n}\n\n// Panicsf asserts that the code inside the specified PanicTestFunc panics.\n//\n//\tassert.Panicsf(t, func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc Panicsf(t TestingT, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Panics(t, f, append([]interface{}{msg}, args...)...)\n}\n\n// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\tassert.PanicsWithErrorf(t, \"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc PanicsWithErrorf(t TestingT, errString string, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithError(t, errString, f, append([]interface{}{msg}, args...)...)\n}\n\n// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\tassert.PanicsWithValuef(t, \"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc PanicsWithValuef(t TestingT, expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithValue(t, expected, f, append([]interface{}{msg}, args...)...)\n}\n\n// Positivef asserts that the specified element is positive\n//\n//\tassert.Positivef(t, 1, \"error message %s\", \"formatted\")\n//\tassert.Positivef(t, 1.23, \"error message %s\", \"formatted\")\nfunc Positivef(t TestingT, e interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Positive(t, e, append([]interface{}{msg}, args...)...)\n}\n\n// Regexpf asserts that a specified regexp matches a string.\n//\n//\tassert.Regexpf(t, regexp.MustCompile(\"start\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\tassert.Regexpf(t, \"start...$\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Regexp(t, rx, str, append([]interface{}{msg}, args...)...)\n}\n\n// Samef asserts that two pointers reference the same object.\n//\n//\tassert.Samef(t, ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc Samef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Same(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Subsetf asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\tassert.Subsetf(t, [1, 2, 3], [1, 2], \"error message %s\", \"formatted\")\n//\tassert.Subsetf(t, {\"x\": 1, \"y\": 2}, {\"x\": 1}, \"error message %s\", \"formatted\")\nfunc Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Subset(t, list, subset, append([]interface{}{msg}, args...)...)\n}\n\n// Truef asserts that the specified value is true.\n//\n//\tassert.Truef(t, myBool, \"error message %s\", \"formatted\")\nfunc Truef(t TestingT, value bool, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn True(t, value, append([]interface{}{msg}, args...)...)\n}\n\n// WithinDurationf asserts that the two times are within duration delta of each other.\n//\n//\tassert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, \"error message %s\", \"formatted\")\nfunc WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinDuration(t, expected, actual, delta, append([]interface{}{msg}, args...)...)\n}\n\n// WithinRangef asserts that a time is within a time range (inclusive).\n//\n//\tassert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), \"error message %s\", \"formatted\")\nfunc WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinRange(t, actual, start, end, append([]interface{}{msg}, args...)...)\n}\n\n// YAMLEqf asserts that two YAML strings are equivalent.\nfunc YAMLEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn YAMLEq(t, expected, actual, append([]interface{}{msg}, args...)...)\n}\n\n// Zerof asserts that i is the zero value for its type.\nfunc Zerof(t TestingT, i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Zero(t, i, append([]interface{}{msg}, args...)...)\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_format.go.tmpl",
    "content": "{{.CommentFormat}}\nfunc {{.DocInfo.Name}}f(t TestingT, {{.ParamsFormat}}) bool {\n\tif h, ok := t.(tHelper); ok { h.Helper() }\n\treturn {{.DocInfo.Name}}(t, {{.ForwardedParamsFormat}})\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_forward.go",
    "content": "// Code generated with github.com/stretchr/testify/_codegen; DO NOT EDIT.\n\npackage assert\n\nimport (\n\thttp \"net/http\"\n\turl \"net/url\"\n\ttime \"time\"\n)\n\n// Condition uses a Comparison to assert a complex condition.\nfunc (a *Assertions) Condition(comp Comparison, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Condition(a.t, comp, msgAndArgs...)\n}\n\n// Conditionf uses a Comparison to assert a complex condition.\nfunc (a *Assertions) Conditionf(comp Comparison, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Conditionf(a.t, comp, msg, args...)\n}\n\n// Contains asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\ta.Contains(\"Hello World\", \"World\")\n//\ta.Contains([\"Hello\", \"World\"], \"World\")\n//\ta.Contains({\"Hello\": \"World\"}, \"Hello\")\nfunc (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Contains(a.t, s, contains, msgAndArgs...)\n}\n\n// Containsf asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\ta.Containsf(\"Hello World\", \"World\", \"error message %s\", \"formatted\")\n//\ta.Containsf([\"Hello\", \"World\"], \"World\", \"error message %s\", \"formatted\")\n//\ta.Containsf({\"Hello\": \"World\"}, \"Hello\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Containsf(a.t, s, contains, msg, args...)\n}\n\n// DirExists checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc (a *Assertions) DirExists(path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn DirExists(a.t, path, msgAndArgs...)\n}\n\n// DirExistsf checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc (a *Assertions) DirExistsf(path string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn DirExistsf(a.t, path, msg, args...)\n}\n\n// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// a.ElementsMatch([1, 3, 2, 3], [1, 3, 3, 2])\nfunc (a *Assertions) ElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ElementsMatch(a.t, listA, listB, msgAndArgs...)\n}\n\n// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// a.ElementsMatchf([1, 3, 2, 3], [1, 3, 3, 2], \"error message %s\", \"formatted\")\nfunc (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ElementsMatchf(a.t, listA, listB, msg, args...)\n}\n\n// Empty asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\ta.Empty(obj)\nfunc (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Empty(a.t, object, msgAndArgs...)\n}\n\n// Emptyf asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\ta.Emptyf(obj, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Emptyf(a.t, object, msg, args...)\n}\n\n// Equal asserts that two objects are equal.\n//\n//\ta.Equal(123, 123)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Equal(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualError asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.EqualError(err,  expectedErrorString)\nfunc (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualError(a.t, theError, errString, msgAndArgs...)\n}\n\n// EqualErrorf asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.EqualErrorf(err,  expectedErrorString, \"error message %s\", \"formatted\")\nfunc (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualErrorf(a.t, theError, errString, msg, args...)\n}\n\n// EqualExportedValues asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t a.EqualExportedValues(S{1, 2}, S{1, 3}) => true\n//\t a.EqualExportedValues(S{1, 2}, S{2, 3}) => false\nfunc (a *Assertions) EqualExportedValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualExportedValues(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualExportedValuesf asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t a.EqualExportedValuesf(S{1, 2}, S{1, 3}, \"error message %s\", \"formatted\") => true\n//\t a.EqualExportedValuesf(S{1, 2}, S{2, 3}, \"error message %s\", \"formatted\") => false\nfunc (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualExportedValuesf(a.t, expected, actual, msg, args...)\n}\n\n// EqualValues asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\ta.EqualValues(uint32(123), int32(123))\nfunc (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualValues(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualValuesf asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\ta.EqualValuesf(uint32(123), int32(123), \"error message %s\", \"formatted\")\nfunc (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EqualValuesf(a.t, expected, actual, msg, args...)\n}\n\n// Equalf asserts that two objects are equal.\n//\n//\ta.Equalf(123, 123, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Equalf(a.t, expected, actual, msg, args...)\n}\n\n// Error asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.Error(err) {\n//\t\t   assert.Equal(t, expectedError, err)\n//\t  }\nfunc (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Error(a.t, err, msgAndArgs...)\n}\n\n// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorAs(a.t, err, target, msgAndArgs...)\n}\n\n// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorAsf(a.t, err, target, msg, args...)\n}\n\n// ErrorContains asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.ErrorContains(err,  expectedErrorSubString)\nfunc (a *Assertions) ErrorContains(theError error, contains string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorContains(a.t, theError, contains, msgAndArgs...)\n}\n\n// ErrorContainsf asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.ErrorContainsf(err,  expectedErrorSubString, \"error message %s\", \"formatted\")\nfunc (a *Assertions) ErrorContainsf(theError error, contains string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorContainsf(a.t, theError, contains, msg, args...)\n}\n\n// ErrorIs asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorIs(a.t, err, target, msgAndArgs...)\n}\n\n// ErrorIsf asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn ErrorIsf(a.t, err, target, msg, args...)\n}\n\n// Errorf asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.Errorf(err, \"error message %s\", \"formatted\") {\n//\t\t   assert.Equal(t, expectedErrorf, err)\n//\t  }\nfunc (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Errorf(a.t, err, msg, args...)\n}\n\n// Eventually asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\ta.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond)\nfunc (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Eventually(a.t, condition, waitFor, tick, msgAndArgs...)\n}\n\n// EventuallyWithT asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\ta.EventuallyWithT(func(c *assert.CollectT) {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\tassert.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EventuallyWithT(a.t, condition, waitFor, tick, msgAndArgs...)\n}\n\n// EventuallyWithTf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\ta.EventuallyWithTf(func(c *assert.CollectT, \"error message %s\", \"formatted\") {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\tassert.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc (a *Assertions) EventuallyWithTf(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn EventuallyWithTf(a.t, condition, waitFor, tick, msg, args...)\n}\n\n// Eventuallyf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\ta.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Eventuallyf(a.t, condition, waitFor, tick, msg, args...)\n}\n\n// Exactly asserts that two objects are equal in value and type.\n//\n//\ta.Exactly(int32(123), int64(123))\nfunc (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Exactly(a.t, expected, actual, msgAndArgs...)\n}\n\n// Exactlyf asserts that two objects are equal in value and type.\n//\n//\ta.Exactlyf(int32(123), int64(123), \"error message %s\", \"formatted\")\nfunc (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Exactlyf(a.t, expected, actual, msg, args...)\n}\n\n// Fail reports a failure through\nfunc (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Fail(a.t, failureMessage, msgAndArgs...)\n}\n\n// FailNow fails test\nfunc (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FailNow(a.t, failureMessage, msgAndArgs...)\n}\n\n// FailNowf fails test\nfunc (a *Assertions) FailNowf(failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FailNowf(a.t, failureMessage, msg, args...)\n}\n\n// Failf reports a failure through\nfunc (a *Assertions) Failf(failureMessage string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Failf(a.t, failureMessage, msg, args...)\n}\n\n// False asserts that the specified value is false.\n//\n//\ta.False(myBool)\nfunc (a *Assertions) False(value bool, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn False(a.t, value, msgAndArgs...)\n}\n\n// Falsef asserts that the specified value is false.\n//\n//\ta.Falsef(myBool, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Falsef(value bool, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Falsef(a.t, value, msg, args...)\n}\n\n// FileExists checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc (a *Assertions) FileExists(path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FileExists(a.t, path, msgAndArgs...)\n}\n\n// FileExistsf checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn FileExistsf(a.t, path, msg, args...)\n}\n\n// Greater asserts that the first element is greater than the second\n//\n//\ta.Greater(2, 1)\n//\ta.Greater(float64(2), float64(1))\n//\ta.Greater(\"b\", \"a\")\nfunc (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Greater(a.t, e1, e2, msgAndArgs...)\n}\n\n// GreaterOrEqual asserts that the first element is greater than or equal to the second\n//\n//\ta.GreaterOrEqual(2, 1)\n//\ta.GreaterOrEqual(2, 2)\n//\ta.GreaterOrEqual(\"b\", \"a\")\n//\ta.GreaterOrEqual(\"b\", \"b\")\nfunc (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn GreaterOrEqual(a.t, e1, e2, msgAndArgs...)\n}\n\n// GreaterOrEqualf asserts that the first element is greater than or equal to the second\n//\n//\ta.GreaterOrEqualf(2, 1, \"error message %s\", \"formatted\")\n//\ta.GreaterOrEqualf(2, 2, \"error message %s\", \"formatted\")\n//\ta.GreaterOrEqualf(\"b\", \"a\", \"error message %s\", \"formatted\")\n//\ta.GreaterOrEqualf(\"b\", \"b\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn GreaterOrEqualf(a.t, e1, e2, msg, args...)\n}\n\n// Greaterf asserts that the first element is greater than the second\n//\n//\ta.Greaterf(2, 1, \"error message %s\", \"formatted\")\n//\ta.Greaterf(float64(2), float64(1), \"error message %s\", \"formatted\")\n//\ta.Greaterf(\"b\", \"a\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Greaterf(a.t, e1, e2, msg, args...)\n}\n\n// HTTPBodyContains asserts that a specified handler returns a\n// body that contains a string.\n//\n//\ta.HTTPBodyContains(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyContains(a.t, handler, method, url, values, str, msgAndArgs...)\n}\n\n// HTTPBodyContainsf asserts that a specified handler returns a\n// body that contains a string.\n//\n//\ta.HTTPBodyContainsf(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyContainsf(a.t, handler, method, url, values, str, msg, args...)\n}\n\n// HTTPBodyNotContains asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\ta.HTTPBodyNotContains(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyNotContains(a.t, handler, method, url, values, str, msgAndArgs...)\n}\n\n// HTTPBodyNotContainsf asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\ta.HTTPBodyNotContainsf(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPBodyNotContainsf(a.t, handler, method, url, values, str, msg, args...)\n}\n\n// HTTPError asserts that a specified handler returns an error status code.\n//\n//\ta.HTTPError(myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPError(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPErrorf asserts that a specified handler returns an error status code.\n//\n//\ta.HTTPErrorf(myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPErrorf(a.t, handler, method, url, values, msg, args...)\n}\n\n// HTTPRedirect asserts that a specified handler returns a redirect status code.\n//\n//\ta.HTTPRedirect(myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPRedirect(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPRedirectf asserts that a specified handler returns a redirect status code.\n//\n//\ta.HTTPRedirectf(myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPRedirectf(a.t, handler, method, url, values, msg, args...)\n}\n\n// HTTPStatusCode asserts that a specified handler returns a specified status code.\n//\n//\ta.HTTPStatusCode(myHandler, \"GET\", \"/notImplemented\", nil, 501)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPStatusCode(a.t, handler, method, url, values, statuscode, msgAndArgs...)\n}\n\n// HTTPStatusCodef asserts that a specified handler returns a specified status code.\n//\n//\ta.HTTPStatusCodef(myHandler, \"GET\", \"/notImplemented\", nil, 501, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPStatusCodef(a.t, handler, method, url, values, statuscode, msg, args...)\n}\n\n// HTTPSuccess asserts that a specified handler returns a success status code.\n//\n//\ta.HTTPSuccess(myHandler, \"POST\", \"http://www.google.com\", nil)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPSuccess(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPSuccessf asserts that a specified handler returns a success status code.\n//\n//\ta.HTTPSuccessf(myHandler, \"POST\", \"http://www.google.com\", nil, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn HTTPSuccessf(a.t, handler, method, url, values, msg, args...)\n}\n\n// Implements asserts that an object is implemented by the specified interface.\n//\n//\ta.Implements((*MyInterface)(nil), new(MyObject))\nfunc (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Implements(a.t, interfaceObject, object, msgAndArgs...)\n}\n\n// Implementsf asserts that an object is implemented by the specified interface.\n//\n//\ta.Implementsf((*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Implementsf(a.t, interfaceObject, object, msg, args...)\n}\n\n// InDelta asserts that the two numerals are within delta of each other.\n//\n//\ta.InDelta(math.Pi, 22/7.0, 0.01)\nfunc (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDelta(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc (a *Assertions) InDeltaMapValues(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaMapValues(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc (a *Assertions) InDeltaMapValuesf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaMapValuesf(a.t, expected, actual, delta, msg, args...)\n}\n\n// InDeltaSlice is the same as InDelta, except it compares two slices.\nfunc (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaSlice(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaSlicef is the same as InDelta, except it compares two slices.\nfunc (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaSlicef(a.t, expected, actual, delta, msg, args...)\n}\n\n// InDeltaf asserts that the two numerals are within delta of each other.\n//\n//\ta.InDeltaf(math.Pi, 22/7.0, 0.01, \"error message %s\", \"formatted\")\nfunc (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InDeltaf(a.t, expected, actual, delta, msg, args...)\n}\n\n// InEpsilon asserts that expected and actual have a relative error less than epsilon\nfunc (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilon(a.t, expected, actual, epsilon, msgAndArgs...)\n}\n\n// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.\nfunc (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonSlice(a.t, expected, actual, epsilon, msgAndArgs...)\n}\n\n// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.\nfunc (a *Assertions) InEpsilonSlicef(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonSlicef(a.t, expected, actual, epsilon, msg, args...)\n}\n\n// InEpsilonf asserts that expected and actual have a relative error less than epsilon\nfunc (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn InEpsilonf(a.t, expected, actual, epsilon, msg, args...)\n}\n\n// IsDecreasing asserts that the collection is decreasing\n//\n//\ta.IsDecreasing([]int{2, 1, 0})\n//\ta.IsDecreasing([]float{2, 1})\n//\ta.IsDecreasing([]string{\"b\", \"a\"})\nfunc (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsDecreasing(a.t, object, msgAndArgs...)\n}\n\n// IsDecreasingf asserts that the collection is decreasing\n//\n//\ta.IsDecreasingf([]int{2, 1, 0}, \"error message %s\", \"formatted\")\n//\ta.IsDecreasingf([]float{2, 1}, \"error message %s\", \"formatted\")\n//\ta.IsDecreasingf([]string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsDecreasingf(a.t, object, msg, args...)\n}\n\n// IsIncreasing asserts that the collection is increasing\n//\n//\ta.IsIncreasing([]int{1, 2, 3})\n//\ta.IsIncreasing([]float{1, 2})\n//\ta.IsIncreasing([]string{\"a\", \"b\"})\nfunc (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsIncreasing(a.t, object, msgAndArgs...)\n}\n\n// IsIncreasingf asserts that the collection is increasing\n//\n//\ta.IsIncreasingf([]int{1, 2, 3}, \"error message %s\", \"formatted\")\n//\ta.IsIncreasingf([]float{1, 2}, \"error message %s\", \"formatted\")\n//\ta.IsIncreasingf([]string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsIncreasingf(a.t, object, msg, args...)\n}\n\n// IsNonDecreasing asserts that the collection is not decreasing\n//\n//\ta.IsNonDecreasing([]int{1, 1, 2})\n//\ta.IsNonDecreasing([]float{1, 2})\n//\ta.IsNonDecreasing([]string{\"a\", \"b\"})\nfunc (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsNonDecreasing(a.t, object, msgAndArgs...)\n}\n\n// IsNonDecreasingf asserts that the collection is not decreasing\n//\n//\ta.IsNonDecreasingf([]int{1, 1, 2}, \"error message %s\", \"formatted\")\n//\ta.IsNonDecreasingf([]float{1, 2}, \"error message %s\", \"formatted\")\n//\ta.IsNonDecreasingf([]string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsNonDecreasingf(a.t, object, msg, args...)\n}\n\n// IsNonIncreasing asserts that the collection is not increasing\n//\n//\ta.IsNonIncreasing([]int{2, 1, 1})\n//\ta.IsNonIncreasing([]float{2, 1})\n//\ta.IsNonIncreasing([]string{\"b\", \"a\"})\nfunc (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsNonIncreasing(a.t, object, msgAndArgs...)\n}\n\n// IsNonIncreasingf asserts that the collection is not increasing\n//\n//\ta.IsNonIncreasingf([]int{2, 1, 1}, \"error message %s\", \"formatted\")\n//\ta.IsNonIncreasingf([]float{2, 1}, \"error message %s\", \"formatted\")\n//\ta.IsNonIncreasingf([]string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsNonIncreasingf(a.t, object, msg, args...)\n}\n\n// IsType asserts that the specified objects are of the same type.\nfunc (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsType(a.t, expectedType, object, msgAndArgs...)\n}\n\n// IsTypef asserts that the specified objects are of the same type.\nfunc (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn IsTypef(a.t, expectedType, object, msg, args...)\n}\n\n// JSONEq asserts that two JSON strings are equivalent.\n//\n//\ta.JSONEq(`{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`)\nfunc (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn JSONEq(a.t, expected, actual, msgAndArgs...)\n}\n\n// JSONEqf asserts that two JSON strings are equivalent.\n//\n//\ta.JSONEqf(`{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`, \"error message %s\", \"formatted\")\nfunc (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn JSONEqf(a.t, expected, actual, msg, args...)\n}\n\n// Len asserts that the specified object has specific length.\n// Len also fails if the object has a type that len() not accept.\n//\n//\ta.Len(mySlice, 3)\nfunc (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Len(a.t, object, length, msgAndArgs...)\n}\n\n// Lenf asserts that the specified object has specific length.\n// Lenf also fails if the object has a type that len() not accept.\n//\n//\ta.Lenf(mySlice, 3, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Lenf(a.t, object, length, msg, args...)\n}\n\n// Less asserts that the first element is less than the second\n//\n//\ta.Less(1, 2)\n//\ta.Less(float64(1), float64(2))\n//\ta.Less(\"a\", \"b\")\nfunc (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Less(a.t, e1, e2, msgAndArgs...)\n}\n\n// LessOrEqual asserts that the first element is less than or equal to the second\n//\n//\ta.LessOrEqual(1, 2)\n//\ta.LessOrEqual(2, 2)\n//\ta.LessOrEqual(\"a\", \"b\")\n//\ta.LessOrEqual(\"b\", \"b\")\nfunc (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn LessOrEqual(a.t, e1, e2, msgAndArgs...)\n}\n\n// LessOrEqualf asserts that the first element is less than or equal to the second\n//\n//\ta.LessOrEqualf(1, 2, \"error message %s\", \"formatted\")\n//\ta.LessOrEqualf(2, 2, \"error message %s\", \"formatted\")\n//\ta.LessOrEqualf(\"a\", \"b\", \"error message %s\", \"formatted\")\n//\ta.LessOrEqualf(\"b\", \"b\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn LessOrEqualf(a.t, e1, e2, msg, args...)\n}\n\n// Lessf asserts that the first element is less than the second\n//\n//\ta.Lessf(1, 2, \"error message %s\", \"formatted\")\n//\ta.Lessf(float64(1), float64(2), \"error message %s\", \"formatted\")\n//\ta.Lessf(\"a\", \"b\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Lessf(a.t, e1, e2, msg, args...)\n}\n\n// Negative asserts that the specified element is negative\n//\n//\ta.Negative(-1)\n//\ta.Negative(-1.23)\nfunc (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Negative(a.t, e, msgAndArgs...)\n}\n\n// Negativef asserts that the specified element is negative\n//\n//\ta.Negativef(-1, \"error message %s\", \"formatted\")\n//\ta.Negativef(-1.23, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Negativef(a.t, e, msg, args...)\n}\n\n// Never asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\ta.Never(func() bool { return false; }, time.Second, 10*time.Millisecond)\nfunc (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Never(a.t, condition, waitFor, tick, msgAndArgs...)\n}\n\n// Neverf asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\ta.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Neverf(a.t, condition, waitFor, tick, msg, args...)\n}\n\n// Nil asserts that the specified object is nil.\n//\n//\ta.Nil(err)\nfunc (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Nil(a.t, object, msgAndArgs...)\n}\n\n// Nilf asserts that the specified object is nil.\n//\n//\ta.Nilf(err, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Nilf(a.t, object, msg, args...)\n}\n\n// NoDirExists checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc (a *Assertions) NoDirExists(path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoDirExists(a.t, path, msgAndArgs...)\n}\n\n// NoDirExistsf checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc (a *Assertions) NoDirExistsf(path string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoDirExistsf(a.t, path, msg, args...)\n}\n\n// NoError asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.NoError(err) {\n//\t\t   assert.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc (a *Assertions) NoError(err error, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoError(a.t, err, msgAndArgs...)\n}\n\n// NoErrorf asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.NoErrorf(err, \"error message %s\", \"formatted\") {\n//\t\t   assert.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoErrorf(a.t, err, msg, args...)\n}\n\n// NoFileExists checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc (a *Assertions) NoFileExists(path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoFileExists(a.t, path, msgAndArgs...)\n}\n\n// NoFileExistsf checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc (a *Assertions) NoFileExistsf(path string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NoFileExistsf(a.t, path, msg, args...)\n}\n\n// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\ta.NotContains(\"Hello World\", \"Earth\")\n//\ta.NotContains([\"Hello\", \"World\"], \"Earth\")\n//\ta.NotContains({\"Hello\": \"World\"}, \"Earth\")\nfunc (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotContains(a.t, s, contains, msgAndArgs...)\n}\n\n// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\ta.NotContainsf(\"Hello World\", \"Earth\", \"error message %s\", \"formatted\")\n//\ta.NotContainsf([\"Hello\", \"World\"], \"Earth\", \"error message %s\", \"formatted\")\n//\ta.NotContainsf({\"Hello\": \"World\"}, \"Earth\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotContainsf(a.t, s, contains, msg, args...)\n}\n\n// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false\n//\n// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true\n//\n// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true\nfunc (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotElementsMatch(a.t, listA, listB, msgAndArgs...)\n}\n\n// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], \"error message %s\", \"formatted\") -> false\n//\n// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], \"error message %s\", \"formatted\") -> true\n//\n// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], \"error message %s\", \"formatted\") -> true\nfunc (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotElementsMatchf(a.t, listA, listB, msg, args...)\n}\n\n// NotEmpty asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif a.NotEmpty(obj) {\n//\t  assert.Equal(t, \"two\", obj[1])\n//\t}\nfunc (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEmpty(a.t, object, msgAndArgs...)\n}\n\n// NotEmptyf asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif a.NotEmptyf(obj, \"error message %s\", \"formatted\") {\n//\t  assert.Equal(t, \"two\", obj[1])\n//\t}\nfunc (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEmptyf(a.t, object, msg, args...)\n}\n\n// NotEqual asserts that the specified values are NOT equal.\n//\n//\ta.NotEqual(obj1, obj2)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqual(a.t, expected, actual, msgAndArgs...)\n}\n\n// NotEqualValues asserts that two objects are not equal even when converted to the same type\n//\n//\ta.NotEqualValues(obj1, obj2)\nfunc (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqualValues(a.t, expected, actual, msgAndArgs...)\n}\n\n// NotEqualValuesf asserts that two objects are not equal even when converted to the same type\n//\n//\ta.NotEqualValuesf(obj1, obj2, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqualValuesf(a.t, expected, actual, msg, args...)\n}\n\n// NotEqualf asserts that the specified values are NOT equal.\n//\n//\ta.NotEqualf(obj1, obj2, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotEqualf(a.t, expected, actual, msg, args...)\n}\n\n// NotErrorAs asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotErrorAs(a.t, err, target, msgAndArgs...)\n}\n\n// NotErrorAsf asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotErrorAsf(a.t, err, target, msg, args...)\n}\n\n// NotErrorIs asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotErrorIs(a.t, err, target, msgAndArgs...)\n}\n\n// NotErrorIsf asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotErrorIsf(a.t, err, target, msg, args...)\n}\n\n// NotImplements asserts that an object does not implement the specified interface.\n//\n//\ta.NotImplements((*MyInterface)(nil), new(MyObject))\nfunc (a *Assertions) NotImplements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotImplements(a.t, interfaceObject, object, msgAndArgs...)\n}\n\n// NotImplementsf asserts that an object does not implement the specified interface.\n//\n//\ta.NotImplementsf((*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotImplementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotImplementsf(a.t, interfaceObject, object, msg, args...)\n}\n\n// NotNil asserts that the specified object is not nil.\n//\n//\ta.NotNil(err)\nfunc (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotNil(a.t, object, msgAndArgs...)\n}\n\n// NotNilf asserts that the specified object is not nil.\n//\n//\ta.NotNilf(err, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotNilf(a.t, object, msg, args...)\n}\n\n// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\ta.NotPanics(func(){ RemainCalm() })\nfunc (a *Assertions) NotPanics(f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotPanics(a.t, f, msgAndArgs...)\n}\n\n// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\ta.NotPanicsf(func(){ RemainCalm() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotPanicsf(f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotPanicsf(a.t, f, msg, args...)\n}\n\n// NotRegexp asserts that a specified regexp does not match a string.\n//\n//\ta.NotRegexp(regexp.MustCompile(\"starts\"), \"it's starting\")\n//\ta.NotRegexp(\"^start\", \"it's not starting\")\nfunc (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotRegexp(a.t, rx, str, msgAndArgs...)\n}\n\n// NotRegexpf asserts that a specified regexp does not match a string.\n//\n//\ta.NotRegexpf(regexp.MustCompile(\"starts\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\ta.NotRegexpf(\"^start\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotRegexpf(a.t, rx, str, msg, args...)\n}\n\n// NotSame asserts that two pointers do not reference the same object.\n//\n//\ta.NotSame(ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) NotSame(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSame(a.t, expected, actual, msgAndArgs...)\n}\n\n// NotSamef asserts that two pointers do not reference the same object.\n//\n//\ta.NotSamef(ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSamef(a.t, expected, actual, msg, args...)\n}\n\n// NotSubset asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\ta.NotSubset([1, 3, 4], [1, 2])\n//\ta.NotSubset({\"x\": 1, \"y\": 2}, {\"z\": 3})\nfunc (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSubset(a.t, list, subset, msgAndArgs...)\n}\n\n// NotSubsetf asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\ta.NotSubsetf([1, 3, 4], [1, 2], \"error message %s\", \"formatted\")\n//\ta.NotSubsetf({\"x\": 1, \"y\": 2}, {\"z\": 3}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotSubsetf(a.t, list, subset, msg, args...)\n}\n\n// NotZero asserts that i is not the zero value for its type.\nfunc (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotZero(a.t, i, msgAndArgs...)\n}\n\n// NotZerof asserts that i is not the zero value for its type.\nfunc (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn NotZerof(a.t, i, msg, args...)\n}\n\n// Panics asserts that the code inside the specified PanicTestFunc panics.\n//\n//\ta.Panics(func(){ GoCrazy() })\nfunc (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Panics(a.t, f, msgAndArgs...)\n}\n\n// PanicsWithError asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\ta.PanicsWithError(\"crazy error\", func(){ GoCrazy() })\nfunc (a *Assertions) PanicsWithError(errString string, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithError(a.t, errString, f, msgAndArgs...)\n}\n\n// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\ta.PanicsWithErrorf(\"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) PanicsWithErrorf(errString string, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithErrorf(a.t, errString, f, msg, args...)\n}\n\n// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\ta.PanicsWithValue(\"crazy error\", func(){ GoCrazy() })\nfunc (a *Assertions) PanicsWithValue(expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithValue(a.t, expected, f, msgAndArgs...)\n}\n\n// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\ta.PanicsWithValuef(\"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) PanicsWithValuef(expected interface{}, f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn PanicsWithValuef(a.t, expected, f, msg, args...)\n}\n\n// Panicsf asserts that the code inside the specified PanicTestFunc panics.\n//\n//\ta.Panicsf(func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Panicsf(f PanicTestFunc, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Panicsf(a.t, f, msg, args...)\n}\n\n// Positive asserts that the specified element is positive\n//\n//\ta.Positive(1)\n//\ta.Positive(1.23)\nfunc (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Positive(a.t, e, msgAndArgs...)\n}\n\n// Positivef asserts that the specified element is positive\n//\n//\ta.Positivef(1, \"error message %s\", \"formatted\")\n//\ta.Positivef(1.23, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Positivef(a.t, e, msg, args...)\n}\n\n// Regexp asserts that a specified regexp matches a string.\n//\n//\ta.Regexp(regexp.MustCompile(\"start\"), \"it's starting\")\n//\ta.Regexp(\"start...$\", \"it's not starting\")\nfunc (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Regexp(a.t, rx, str, msgAndArgs...)\n}\n\n// Regexpf asserts that a specified regexp matches a string.\n//\n//\ta.Regexpf(regexp.MustCompile(\"start\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\ta.Regexpf(\"start...$\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Regexpf(a.t, rx, str, msg, args...)\n}\n\n// Same asserts that two pointers reference the same object.\n//\n//\ta.Same(ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) Same(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Same(a.t, expected, actual, msgAndArgs...)\n}\n\n// Samef asserts that two pointers reference the same object.\n//\n//\ta.Samef(ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Samef(a.t, expected, actual, msg, args...)\n}\n\n// Subset asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\ta.Subset([1, 2, 3], [1, 2])\n//\ta.Subset({\"x\": 1, \"y\": 2}, {\"x\": 1})\nfunc (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Subset(a.t, list, subset, msgAndArgs...)\n}\n\n// Subsetf asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\ta.Subsetf([1, 2, 3], [1, 2], \"error message %s\", \"formatted\")\n//\ta.Subsetf({\"x\": 1, \"y\": 2}, {\"x\": 1}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Subsetf(a.t, list, subset, msg, args...)\n}\n\n// True asserts that the specified value is true.\n//\n//\ta.True(myBool)\nfunc (a *Assertions) True(value bool, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn True(a.t, value, msgAndArgs...)\n}\n\n// Truef asserts that the specified value is true.\n//\n//\ta.Truef(myBool, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Truef(value bool, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Truef(a.t, value, msg, args...)\n}\n\n// WithinDuration asserts that the two times are within duration delta of each other.\n//\n//\ta.WithinDuration(time.Now(), time.Now(), 10*time.Second)\nfunc (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinDuration(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// WithinDurationf asserts that the two times are within duration delta of each other.\n//\n//\ta.WithinDurationf(time.Now(), time.Now(), 10*time.Second, \"error message %s\", \"formatted\")\nfunc (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinDurationf(a.t, expected, actual, delta, msg, args...)\n}\n\n// WithinRange asserts that a time is within a time range (inclusive).\n//\n//\ta.WithinRange(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second))\nfunc (a *Assertions) WithinRange(actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinRange(a.t, actual, start, end, msgAndArgs...)\n}\n\n// WithinRangef asserts that a time is within a time range (inclusive).\n//\n//\ta.WithinRangef(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), \"error message %s\", \"formatted\")\nfunc (a *Assertions) WithinRangef(actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn WithinRangef(a.t, actual, start, end, msg, args...)\n}\n\n// YAMLEq asserts that two YAML strings are equivalent.\nfunc (a *Assertions) YAMLEq(expected string, actual string, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn YAMLEq(a.t, expected, actual, msgAndArgs...)\n}\n\n// YAMLEqf asserts that two YAML strings are equivalent.\nfunc (a *Assertions) YAMLEqf(expected string, actual string, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn YAMLEqf(a.t, expected, actual, msg, args...)\n}\n\n// Zero asserts that i is the zero value for its type.\nfunc (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Zero(a.t, i, msgAndArgs...)\n}\n\n// Zerof asserts that i is the zero value for its type.\nfunc (a *Assertions) Zerof(i interface{}, msg string, args ...interface{}) bool {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Zerof(a.t, i, msg, args...)\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl",
    "content": "{{.CommentWithoutT \"a\"}}\nfunc (a *Assertions) {{.DocInfo.Name}}({{.Params}}) bool {\n\tif h, ok := a.t.(tHelper); ok { h.Helper() }\n\treturn {{.DocInfo.Name}}(a.t, {{.ForwardedParams}})\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertion_order.go",
    "content": "package assert\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// isOrdered checks that collection contains orderable elements.\nfunc isOrdered(t TestingT, object interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool {\n\tobjKind := reflect.TypeOf(object).Kind()\n\tif objKind != reflect.Slice && objKind != reflect.Array {\n\t\treturn false\n\t}\n\n\tobjValue := reflect.ValueOf(object)\n\tobjLen := objValue.Len()\n\n\tif objLen <= 1 {\n\t\treturn true\n\t}\n\n\tvalue := objValue.Index(0)\n\tvalueInterface := value.Interface()\n\tfirstValueKind := value.Kind()\n\n\tfor i := 1; i < objLen; i++ {\n\t\tprevValue := value\n\t\tprevValueInterface := valueInterface\n\n\t\tvalue = objValue.Index(i)\n\t\tvalueInterface = value.Interface()\n\n\t\tcompareResult, isComparable := compare(prevValueInterface, valueInterface, firstValueKind)\n\n\t\tif !isComparable {\n\t\t\treturn Fail(t, fmt.Sprintf(\"Can not compare type \\\"%s\\\" and \\\"%s\\\"\", reflect.TypeOf(value), reflect.TypeOf(prevValue)), msgAndArgs...)\n\t\t}\n\n\t\tif !containsValue(allowedComparesResults, compareResult) {\n\t\t\treturn Fail(t, fmt.Sprintf(failMessage, prevValue, value), msgAndArgs...)\n\t\t}\n\t}\n\n\treturn true\n}\n\n// IsIncreasing asserts that the collection is increasing\n//\n//\tassert.IsIncreasing(t, []int{1, 2, 3})\n//\tassert.IsIncreasing(t, []float{1, 2})\n//\tassert.IsIncreasing(t, []string{\"a\", \"b\"})\nfunc IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\treturn isOrdered(t, object, []compareResult{compareLess}, \"\\\"%v\\\" is not less than \\\"%v\\\"\", msgAndArgs...)\n}\n\n// IsNonIncreasing asserts that the collection is not increasing\n//\n//\tassert.IsNonIncreasing(t, []int{2, 1, 1})\n//\tassert.IsNonIncreasing(t, []float{2, 1})\n//\tassert.IsNonIncreasing(t, []string{\"b\", \"a\"})\nfunc IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\treturn isOrdered(t, object, []compareResult{compareEqual, compareGreater}, \"\\\"%v\\\" is not greater than or equal to \\\"%v\\\"\", msgAndArgs...)\n}\n\n// IsDecreasing asserts that the collection is decreasing\n//\n//\tassert.IsDecreasing(t, []int{2, 1, 0})\n//\tassert.IsDecreasing(t, []float{2, 1})\n//\tassert.IsDecreasing(t, []string{\"b\", \"a\"})\nfunc IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\treturn isOrdered(t, object, []compareResult{compareGreater}, \"\\\"%v\\\" is not greater than \\\"%v\\\"\", msgAndArgs...)\n}\n\n// IsNonDecreasing asserts that the collection is not decreasing\n//\n//\tassert.IsNonDecreasing(t, []int{1, 1, 2})\n//\tassert.IsNonDecreasing(t, []float{1, 2})\n//\tassert.IsNonDecreasing(t, []string{\"a\", \"b\"})\nfunc IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\treturn isOrdered(t, object, []compareResult{compareLess, compareEqual}, \"\\\"%v\\\" is not less than or equal to \\\"%v\\\"\", msgAndArgs...)\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/assertions.go",
    "content": "package assert\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/davecgh/go-spew/spew\"\n\t\"github.com/pmezard/go-difflib/difflib\"\n\n\t// Wrapper around gopkg.in/yaml.v3\n\t\"github.com/stretchr/testify/assert/yaml\"\n)\n\n//go:generate sh -c \"cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl\"\n\n// TestingT is an interface wrapper around *testing.T\ntype TestingT interface {\n\tErrorf(format string, args ...interface{})\n}\n\n// ComparisonAssertionFunc is a common function prototype when comparing two values.  Can be useful\n// for table driven tests.\ntype ComparisonAssertionFunc func(TestingT, interface{}, interface{}, ...interface{}) bool\n\n// ValueAssertionFunc is a common function prototype when validating a single value.  Can be useful\n// for table driven tests.\ntype ValueAssertionFunc func(TestingT, interface{}, ...interface{}) bool\n\n// BoolAssertionFunc is a common function prototype when validating a bool value.  Can be useful\n// for table driven tests.\ntype BoolAssertionFunc func(TestingT, bool, ...interface{}) bool\n\n// ErrorAssertionFunc is a common function prototype when validating an error value.  Can be useful\n// for table driven tests.\ntype ErrorAssertionFunc func(TestingT, error, ...interface{}) bool\n\n// PanicAssertionFunc is a common function prototype when validating a panic value.  Can be useful\n// for table driven tests.\ntype PanicAssertionFunc = func(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool\n\n// Comparison is a custom function that returns true on success and false on failure\ntype Comparison func() (success bool)\n\n/*\n\tHelper functions\n*/\n\n// ObjectsAreEqual determines if two objects are considered equal.\n//\n// This function does no assertion of any kind.\nfunc ObjectsAreEqual(expected, actual interface{}) bool {\n\tif expected == nil || actual == nil {\n\t\treturn expected == actual\n\t}\n\n\texp, ok := expected.([]byte)\n\tif !ok {\n\t\treturn reflect.DeepEqual(expected, actual)\n\t}\n\n\tact, ok := actual.([]byte)\n\tif !ok {\n\t\treturn false\n\t}\n\tif exp == nil || act == nil {\n\t\treturn exp == nil && act == nil\n\t}\n\treturn bytes.Equal(exp, act)\n}\n\n// copyExportedFields iterates downward through nested data structures and creates a copy\n// that only contains the exported struct fields.\nfunc copyExportedFields(expected interface{}) interface{} {\n\tif isNil(expected) {\n\t\treturn expected\n\t}\n\n\texpectedType := reflect.TypeOf(expected)\n\texpectedKind := expectedType.Kind()\n\texpectedValue := reflect.ValueOf(expected)\n\n\tswitch expectedKind {\n\tcase reflect.Struct:\n\t\tresult := reflect.New(expectedType).Elem()\n\t\tfor i := 0; i < expectedType.NumField(); i++ {\n\t\t\tfield := expectedType.Field(i)\n\t\t\tisExported := field.IsExported()\n\t\t\tif isExported {\n\t\t\t\tfieldValue := expectedValue.Field(i)\n\t\t\t\tif isNil(fieldValue) || isNil(fieldValue.Interface()) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tnewValue := copyExportedFields(fieldValue.Interface())\n\t\t\t\tresult.Field(i).Set(reflect.ValueOf(newValue))\n\t\t\t}\n\t\t}\n\t\treturn result.Interface()\n\n\tcase reflect.Ptr:\n\t\tresult := reflect.New(expectedType.Elem())\n\t\tunexportedRemoved := copyExportedFields(expectedValue.Elem().Interface())\n\t\tresult.Elem().Set(reflect.ValueOf(unexportedRemoved))\n\t\treturn result.Interface()\n\n\tcase reflect.Array, reflect.Slice:\n\t\tvar result reflect.Value\n\t\tif expectedKind == reflect.Array {\n\t\t\tresult = reflect.New(reflect.ArrayOf(expectedValue.Len(), expectedType.Elem())).Elem()\n\t\t} else {\n\t\t\tresult = reflect.MakeSlice(expectedType, expectedValue.Len(), expectedValue.Len())\n\t\t}\n\t\tfor i := 0; i < expectedValue.Len(); i++ {\n\t\t\tindex := expectedValue.Index(i)\n\t\t\tif isNil(index) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tunexportedRemoved := copyExportedFields(index.Interface())\n\t\t\tresult.Index(i).Set(reflect.ValueOf(unexportedRemoved))\n\t\t}\n\t\treturn result.Interface()\n\n\tcase reflect.Map:\n\t\tresult := reflect.MakeMap(expectedType)\n\t\tfor _, k := range expectedValue.MapKeys() {\n\t\t\tindex := expectedValue.MapIndex(k)\n\t\t\tunexportedRemoved := copyExportedFields(index.Interface())\n\t\t\tresult.SetMapIndex(k, reflect.ValueOf(unexportedRemoved))\n\t\t}\n\t\treturn result.Interface()\n\n\tdefault:\n\t\treturn expected\n\t}\n}\n\n// ObjectsExportedFieldsAreEqual determines if the exported (public) fields of two objects are\n// considered equal. This comparison of only exported fields is applied recursively to nested data\n// structures.\n//\n// This function does no assertion of any kind.\n//\n// Deprecated: Use [EqualExportedValues] instead.\nfunc ObjectsExportedFieldsAreEqual(expected, actual interface{}) bool {\n\texpectedCleaned := copyExportedFields(expected)\n\tactualCleaned := copyExportedFields(actual)\n\treturn ObjectsAreEqualValues(expectedCleaned, actualCleaned)\n}\n\n// ObjectsAreEqualValues gets whether two objects are equal, or if their\n// values are equal.\nfunc ObjectsAreEqualValues(expected, actual interface{}) bool {\n\tif ObjectsAreEqual(expected, actual) {\n\t\treturn true\n\t}\n\n\texpectedValue := reflect.ValueOf(expected)\n\tactualValue := reflect.ValueOf(actual)\n\tif !expectedValue.IsValid() || !actualValue.IsValid() {\n\t\treturn false\n\t}\n\n\texpectedType := expectedValue.Type()\n\tactualType := actualValue.Type()\n\tif !expectedType.ConvertibleTo(actualType) {\n\t\treturn false\n\t}\n\n\tif !isNumericType(expectedType) || !isNumericType(actualType) {\n\t\t// Attempt comparison after type conversion\n\t\treturn reflect.DeepEqual(\n\t\t\texpectedValue.Convert(actualType).Interface(), actual,\n\t\t)\n\t}\n\n\t// If BOTH values are numeric, there are chances of false positives due\n\t// to overflow or underflow. So, we need to make sure to always convert\n\t// the smaller type to a larger type before comparing.\n\tif expectedType.Size() >= actualType.Size() {\n\t\treturn actualValue.Convert(expectedType).Interface() == expected\n\t}\n\n\treturn expectedValue.Convert(actualType).Interface() == actual\n}\n\n// isNumericType returns true if the type is one of:\n// int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64,\n// float32, float64, complex64, complex128\nfunc isNumericType(t reflect.Type) bool {\n\treturn t.Kind() >= reflect.Int && t.Kind() <= reflect.Complex128\n}\n\n/* CallerInfo is necessary because the assert functions use the testing object\ninternally, causing it to print the file:line of the assert method, rather than where\nthe problem actually occurred in calling code.*/\n\n// CallerInfo returns an array of strings containing the file and line number\n// of each stack frame leading from the current test to the assert call that\n// failed.\nfunc CallerInfo() []string {\n\n\tvar pc uintptr\n\tvar ok bool\n\tvar file string\n\tvar line int\n\tvar name string\n\n\tcallers := []string{}\n\tfor i := 0; ; i++ {\n\t\tpc, file, line, ok = runtime.Caller(i)\n\t\tif !ok {\n\t\t\t// The breaks below failed to terminate the loop, and we ran off the\n\t\t\t// end of the call stack.\n\t\t\tbreak\n\t\t}\n\n\t\t// This is a huge edge case, but it will panic if this is the case, see #180\n\t\tif file == \"<autogenerated>\" {\n\t\t\tbreak\n\t\t}\n\n\t\tf := runtime.FuncForPC(pc)\n\t\tif f == nil {\n\t\t\tbreak\n\t\t}\n\t\tname = f.Name()\n\n\t\t// testing.tRunner is the standard library function that calls\n\t\t// tests. Subtests are called directly by tRunner, without going through\n\t\t// the Test/Benchmark/Example function that contains the t.Run calls, so\n\t\t// with subtests we should break when we hit tRunner, without adding it\n\t\t// to the list of callers.\n\t\tif name == \"testing.tRunner\" {\n\t\t\tbreak\n\t\t}\n\n\t\tparts := strings.Split(file, \"/\")\n\t\tif len(parts) > 1 {\n\t\t\tfilename := parts[len(parts)-1]\n\t\t\tdir := parts[len(parts)-2]\n\t\t\tif (dir != \"assert\" && dir != \"mock\" && dir != \"require\") || filename == \"mock_test.go\" {\n\t\t\t\tcallers = append(callers, fmt.Sprintf(\"%s:%d\", file, line))\n\t\t\t}\n\t\t}\n\n\t\t// Drop the package\n\t\tsegments := strings.Split(name, \".\")\n\t\tname = segments[len(segments)-1]\n\t\tif isTest(name, \"Test\") ||\n\t\t\tisTest(name, \"Benchmark\") ||\n\t\t\tisTest(name, \"Example\") {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn callers\n}\n\n// Stolen from the `go test` tool.\n// isTest tells whether name looks like a test (or benchmark, according to prefix).\n// It is a Test (say) if there is a character after Test that is not a lower-case letter.\n// We don't want TesticularCancer.\nfunc isTest(name, prefix string) bool {\n\tif !strings.HasPrefix(name, prefix) {\n\t\treturn false\n\t}\n\tif len(name) == len(prefix) { // \"Test\" is ok\n\t\treturn true\n\t}\n\tr, _ := utf8.DecodeRuneInString(name[len(prefix):])\n\treturn !unicode.IsLower(r)\n}\n\nfunc messageFromMsgAndArgs(msgAndArgs ...interface{}) string {\n\tif len(msgAndArgs) == 0 || msgAndArgs == nil {\n\t\treturn \"\"\n\t}\n\tif len(msgAndArgs) == 1 {\n\t\tmsg := msgAndArgs[0]\n\t\tif msgAsStr, ok := msg.(string); ok {\n\t\t\treturn msgAsStr\n\t\t}\n\t\treturn fmt.Sprintf(\"%+v\", msg)\n\t}\n\tif len(msgAndArgs) > 1 {\n\t\treturn fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...)\n\t}\n\treturn \"\"\n}\n\n// Aligns the provided message so that all lines after the first line start at the same location as the first line.\n// Assumes that the first line starts at the correct location (after carriage return, tab, label, spacer and tab).\n// The longestLabelLen parameter specifies the length of the longest label in the output (required because this is the\n// basis on which the alignment occurs).\nfunc indentMessageLines(message string, longestLabelLen int) string {\n\toutBuf := new(bytes.Buffer)\n\n\tfor i, scanner := 0, bufio.NewScanner(strings.NewReader(message)); scanner.Scan(); i++ {\n\t\t// no need to align first line because it starts at the correct location (after the label)\n\t\tif i != 0 {\n\t\t\t// append alignLen+1 spaces to align with \"{{longestLabel}}:\" before adding tab\n\t\t\toutBuf.WriteString(\"\\n\\t\" + strings.Repeat(\" \", longestLabelLen+1) + \"\\t\")\n\t\t}\n\t\toutBuf.WriteString(scanner.Text())\n\t}\n\n\treturn outBuf.String()\n}\n\ntype failNower interface {\n\tFailNow()\n}\n\n// FailNow fails test\nfunc FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFail(t, failureMessage, msgAndArgs...)\n\n\t// We cannot extend TestingT with FailNow() and\n\t// maintain backwards compatibility, so we fallback\n\t// to panicking when FailNow is not available in\n\t// TestingT.\n\t// See issue #263\n\n\tif t, ok := t.(failNower); ok {\n\t\tt.FailNow()\n\t} else {\n\t\tpanic(\"test failed and t is missing `FailNow()`\")\n\t}\n\treturn false\n}\n\n// Fail reports a failure through\nfunc Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcontent := []labeledContent{\n\t\t{\"Error Trace\", strings.Join(CallerInfo(), \"\\n\\t\\t\\t\")},\n\t\t{\"Error\", failureMessage},\n\t}\n\n\t// Add test name if the Go version supports it\n\tif n, ok := t.(interface {\n\t\tName() string\n\t}); ok {\n\t\tcontent = append(content, labeledContent{\"Test\", n.Name()})\n\t}\n\n\tmessage := messageFromMsgAndArgs(msgAndArgs...)\n\tif len(message) > 0 {\n\t\tcontent = append(content, labeledContent{\"Messages\", message})\n\t}\n\n\tt.Errorf(\"\\n%s\", \"\"+labeledOutput(content...))\n\n\treturn false\n}\n\ntype labeledContent struct {\n\tlabel   string\n\tcontent string\n}\n\n// labeledOutput returns a string consisting of the provided labeledContent. Each labeled output is appended in the following manner:\n//\n//\t\\t{{label}}:{{align_spaces}}\\t{{content}}\\n\n//\n// The initial carriage return is required to undo/erase any padding added by testing.T.Errorf. The \"\\t{{label}}:\" is for the label.\n// If a label is shorter than the longest label provided, padding spaces are added to make all the labels match in length. Once this\n// alignment is achieved, \"\\t{{content}}\\n\" is added for the output.\n//\n// If the content of the labeledOutput contains line breaks, the subsequent lines are aligned so that they start at the same location as the first line.\nfunc labeledOutput(content ...labeledContent) string {\n\tlongestLabel := 0\n\tfor _, v := range content {\n\t\tif len(v.label) > longestLabel {\n\t\t\tlongestLabel = len(v.label)\n\t\t}\n\t}\n\tvar output string\n\tfor _, v := range content {\n\t\toutput += \"\\t\" + v.label + \":\" + strings.Repeat(\" \", longestLabel-len(v.label)) + \"\\t\" + indentMessageLines(v.content, longestLabel) + \"\\n\"\n\t}\n\treturn output\n}\n\n// Implements asserts that an object is implemented by the specified interface.\n//\n//\tassert.Implements(t, (*MyInterface)(nil), new(MyObject))\nfunc Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinterfaceType := reflect.TypeOf(interfaceObject).Elem()\n\n\tif object == nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Cannot check if nil implements %v\", interfaceType), msgAndArgs...)\n\t}\n\tif !reflect.TypeOf(object).Implements(interfaceType) {\n\t\treturn Fail(t, fmt.Sprintf(\"%T must implement %v\", object, interfaceType), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// NotImplements asserts that an object does not implement the specified interface.\n//\n//\tassert.NotImplements(t, (*MyInterface)(nil), new(MyObject))\nfunc NotImplements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinterfaceType := reflect.TypeOf(interfaceObject).Elem()\n\n\tif object == nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Cannot check if nil does not implement %v\", interfaceType), msgAndArgs...)\n\t}\n\tif reflect.TypeOf(object).Implements(interfaceType) {\n\t\treturn Fail(t, fmt.Sprintf(\"%T implements %v\", object, interfaceType), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// IsType asserts that the specified objects are of the same type.\nfunc IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif !ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) {\n\t\treturn Fail(t, fmt.Sprintf(\"Object expected to be of type %v, but was %v\", reflect.TypeOf(expectedType), reflect.TypeOf(object)), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// Equal asserts that two objects are equal.\n//\n//\tassert.Equal(t, 123, 123)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif err := validateEqualArgs(expected, actual); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Invalid operation: %#v == %#v (%s)\",\n\t\t\texpected, actual, err), msgAndArgs...)\n\t}\n\n\tif !ObjectsAreEqual(expected, actual) {\n\t\tdiff := diff(expected, actual)\n\t\texpected, actual = formatUnequalValues(expected, actual)\n\t\treturn Fail(t, fmt.Sprintf(\"Not equal: \\n\"+\n\t\t\t\"expected: %s\\n\"+\n\t\t\t\"actual  : %s%s\", expected, actual, diff), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// validateEqualArgs checks whether provided arguments can be safely used in the\n// Equal/NotEqual functions.\nfunc validateEqualArgs(expected, actual interface{}) error {\n\tif expected == nil && actual == nil {\n\t\treturn nil\n\t}\n\n\tif isFunction(expected) || isFunction(actual) {\n\t\treturn errors.New(\"cannot take func type as argument\")\n\t}\n\treturn nil\n}\n\n// Same asserts that two pointers reference the same object.\n//\n//\tassert.Same(t, ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc Same(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tsame, ok := samePointers(expected, actual)\n\tif !ok {\n\t\treturn Fail(t, \"Both arguments must be pointers\", msgAndArgs...)\n\t}\n\n\tif !same {\n\t\t// both are pointers but not the same type & pointing to the same address\n\t\treturn Fail(t, fmt.Sprintf(\"Not same: \\n\"+\n\t\t\t\"expected: %p %#v\\n\"+\n\t\t\t\"actual  : %p %#v\", expected, expected, actual, actual), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// NotSame asserts that two pointers do not reference the same object.\n//\n//\tassert.NotSame(t, ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tsame, ok := samePointers(expected, actual)\n\tif !ok {\n\t\t//fails when the arguments are not pointers\n\t\treturn !(Fail(t, \"Both arguments must be pointers\", msgAndArgs...))\n\t}\n\n\tif same {\n\t\treturn Fail(t, fmt.Sprintf(\n\t\t\t\"Expected and actual point to the same object: %p %#v\",\n\t\t\texpected, expected), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// samePointers checks if two generic interface objects are pointers of the same\n// type pointing to the same object. It returns two values: same indicating if\n// they are the same type and point to the same object, and ok indicating that\n// both inputs are pointers.\nfunc samePointers(first, second interface{}) (same bool, ok bool) {\n\tfirstPtr, secondPtr := reflect.ValueOf(first), reflect.ValueOf(second)\n\tif firstPtr.Kind() != reflect.Ptr || secondPtr.Kind() != reflect.Ptr {\n\t\treturn false, false //not both are pointers\n\t}\n\n\tfirstType, secondType := reflect.TypeOf(first), reflect.TypeOf(second)\n\tif firstType != secondType {\n\t\treturn false, true // both are pointers, but of different types\n\t}\n\n\t// compare pointer addresses\n\treturn first == second, true\n}\n\n// formatUnequalValues takes two values of arbitrary types and returns string\n// representations appropriate to be presented to the user.\n//\n// If the values are not of like type, the returned strings will be prefixed\n// with the type name, and the value will be enclosed in parentheses similar\n// to a type conversion in the Go grammar.\nfunc formatUnequalValues(expected, actual interface{}) (e string, a string) {\n\tif reflect.TypeOf(expected) != reflect.TypeOf(actual) {\n\t\treturn fmt.Sprintf(\"%T(%s)\", expected, truncatingFormat(expected)),\n\t\t\tfmt.Sprintf(\"%T(%s)\", actual, truncatingFormat(actual))\n\t}\n\tswitch expected.(type) {\n\tcase time.Duration:\n\t\treturn fmt.Sprintf(\"%v\", expected), fmt.Sprintf(\"%v\", actual)\n\t}\n\treturn truncatingFormat(expected), truncatingFormat(actual)\n}\n\n// truncatingFormat formats the data and truncates it if it's too long.\n//\n// This helps keep formatted error messages lines from exceeding the\n// bufio.MaxScanTokenSize max line length that the go testing framework imposes.\nfunc truncatingFormat(data interface{}) string {\n\tvalue := fmt.Sprintf(\"%#v\", data)\n\tmax := bufio.MaxScanTokenSize - 100 // Give us some space the type info too if needed.\n\tif len(value) > max {\n\t\tvalue = value[0:max] + \"<... truncated>\"\n\t}\n\treturn value\n}\n\n// EqualValues asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\tassert.EqualValues(t, uint32(123), int32(123))\nfunc EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif !ObjectsAreEqualValues(expected, actual) {\n\t\tdiff := diff(expected, actual)\n\t\texpected, actual = formatUnequalValues(expected, actual)\n\t\treturn Fail(t, fmt.Sprintf(\"Not equal: \\n\"+\n\t\t\t\"expected: %s\\n\"+\n\t\t\t\"actual  : %s%s\", expected, actual, diff), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// EqualExportedValues asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t assert.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true\n//\t assert.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false\nfunc EqualExportedValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\taType := reflect.TypeOf(expected)\n\tbType := reflect.TypeOf(actual)\n\n\tif aType != bType {\n\t\treturn Fail(t, fmt.Sprintf(\"Types expected to match exactly\\n\\t%v != %v\", aType, bType), msgAndArgs...)\n\t}\n\n\texpected = copyExportedFields(expected)\n\tactual = copyExportedFields(actual)\n\n\tif !ObjectsAreEqualValues(expected, actual) {\n\t\tdiff := diff(expected, actual)\n\t\texpected, actual = formatUnequalValues(expected, actual)\n\t\treturn Fail(t, fmt.Sprintf(\"Not equal (comparing only exported fields): \\n\"+\n\t\t\t\"expected: %s\\n\"+\n\t\t\t\"actual  : %s%s\", expected, actual, diff), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// Exactly asserts that two objects are equal in value and type.\n//\n//\tassert.Exactly(t, int32(123), int64(123))\nfunc Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\taType := reflect.TypeOf(expected)\n\tbType := reflect.TypeOf(actual)\n\n\tif aType != bType {\n\t\treturn Fail(t, fmt.Sprintf(\"Types expected to match exactly\\n\\t%v != %v\", aType, bType), msgAndArgs...)\n\t}\n\n\treturn Equal(t, expected, actual, msgAndArgs...)\n\n}\n\n// NotNil asserts that the specified object is not nil.\n//\n//\tassert.NotNil(t, err)\nfunc NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tif !isNil(object) {\n\t\treturn true\n\t}\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Fail(t, \"Expected value not to be nil.\", msgAndArgs...)\n}\n\n// isNil checks if a specified object is nil or not, without Failing.\nfunc isNil(object interface{}) bool {\n\tif object == nil {\n\t\treturn true\n\t}\n\n\tvalue := reflect.ValueOf(object)\n\tswitch value.Kind() {\n\tcase\n\t\treflect.Chan, reflect.Func,\n\t\treflect.Interface, reflect.Map,\n\t\treflect.Ptr, reflect.Slice, reflect.UnsafePointer:\n\n\t\treturn value.IsNil()\n\t}\n\n\treturn false\n}\n\n// Nil asserts that the specified object is nil.\n//\n//\tassert.Nil(t, err)\nfunc Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tif isNil(object) {\n\t\treturn true\n\t}\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\treturn Fail(t, fmt.Sprintf(\"Expected nil, but got: %#v\", object), msgAndArgs...)\n}\n\n// isEmpty gets whether the specified object is considered empty or not.\nfunc isEmpty(object interface{}) bool {\n\n\t// get nil case out of the way\n\tif object == nil {\n\t\treturn true\n\t}\n\n\tobjValue := reflect.ValueOf(object)\n\n\tswitch objValue.Kind() {\n\t// collection types are empty when they have no element\n\tcase reflect.Chan, reflect.Map, reflect.Slice:\n\t\treturn objValue.Len() == 0\n\t// pointers are empty if nil or if the value they point to is empty\n\tcase reflect.Ptr:\n\t\tif objValue.IsNil() {\n\t\t\treturn true\n\t\t}\n\t\tderef := objValue.Elem().Interface()\n\t\treturn isEmpty(deref)\n\t// for all other types, compare against the zero value\n\t// array types are empty when they match their zero-initialized state\n\tdefault:\n\t\tzero := reflect.Zero(objValue.Type())\n\t\treturn reflect.DeepEqual(object, zero.Interface())\n\t}\n}\n\n// Empty asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tassert.Empty(t, obj)\nfunc Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tpass := isEmpty(object)\n\tif !pass {\n\t\tif h, ok := t.(tHelper); ok {\n\t\t\th.Helper()\n\t\t}\n\t\tFail(t, fmt.Sprintf(\"Should be empty, but was %v\", object), msgAndArgs...)\n\t}\n\n\treturn pass\n\n}\n\n// NotEmpty asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif assert.NotEmpty(t, obj) {\n//\t  assert.Equal(t, \"two\", obj[1])\n//\t}\nfunc NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool {\n\tpass := !isEmpty(object)\n\tif !pass {\n\t\tif h, ok := t.(tHelper); ok {\n\t\t\th.Helper()\n\t\t}\n\t\tFail(t, fmt.Sprintf(\"Should NOT be empty, but was %v\", object), msgAndArgs...)\n\t}\n\n\treturn pass\n\n}\n\n// getLen tries to get the length of an object.\n// It returns (0, false) if impossible.\nfunc getLen(x interface{}) (length int, ok bool) {\n\tv := reflect.ValueOf(x)\n\tdefer func() {\n\t\tok = recover() == nil\n\t}()\n\treturn v.Len(), true\n}\n\n// Len asserts that the specified object has specific length.\n// Len also fails if the object has a type that len() not accept.\n//\n//\tassert.Len(t, mySlice, 3)\nfunc Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tl, ok := getLen(object)\n\tif !ok {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%v\\\" could not be applied builtin len()\", object), msgAndArgs...)\n\t}\n\n\tif l != length {\n\t\treturn Fail(t, fmt.Sprintf(\"\\\"%v\\\" should have %d item(s), but has %d\", object, length, l), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// True asserts that the specified value is true.\n//\n//\tassert.True(t, myBool)\nfunc True(t TestingT, value bool, msgAndArgs ...interface{}) bool {\n\tif !value {\n\t\tif h, ok := t.(tHelper); ok {\n\t\t\th.Helper()\n\t\t}\n\t\treturn Fail(t, \"Should be true\", msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// False asserts that the specified value is false.\n//\n//\tassert.False(t, myBool)\nfunc False(t TestingT, value bool, msgAndArgs ...interface{}) bool {\n\tif value {\n\t\tif h, ok := t.(tHelper); ok {\n\t\t\th.Helper()\n\t\t}\n\t\treturn Fail(t, \"Should be false\", msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// NotEqual asserts that the specified values are NOT equal.\n//\n//\tassert.NotEqual(t, obj1, obj2)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif err := validateEqualArgs(expected, actual); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Invalid operation: %#v != %#v (%s)\",\n\t\t\texpected, actual, err), msgAndArgs...)\n\t}\n\n\tif ObjectsAreEqual(expected, actual) {\n\t\treturn Fail(t, fmt.Sprintf(\"Should not be: %#v\\n\", actual), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// NotEqualValues asserts that two objects are not equal even when converted to the same type\n//\n//\tassert.NotEqualValues(t, obj1, obj2)\nfunc NotEqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif ObjectsAreEqualValues(expected, actual) {\n\t\treturn Fail(t, fmt.Sprintf(\"Should not be: %#v\\n\", actual), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// containsElement try loop over the list check if the list includes the element.\n// return (false, false) if impossible.\n// return (true, false) if element was not found.\n// return (true, true) if element was found.\nfunc containsElement(list interface{}, element interface{}) (ok, found bool) {\n\n\tlistValue := reflect.ValueOf(list)\n\tlistType := reflect.TypeOf(list)\n\tif listType == nil {\n\t\treturn false, false\n\t}\n\tlistKind := listType.Kind()\n\tdefer func() {\n\t\tif e := recover(); e != nil {\n\t\t\tok = false\n\t\t\tfound = false\n\t\t}\n\t}()\n\n\tif listKind == reflect.String {\n\t\telementValue := reflect.ValueOf(element)\n\t\treturn true, strings.Contains(listValue.String(), elementValue.String())\n\t}\n\n\tif listKind == reflect.Map {\n\t\tmapKeys := listValue.MapKeys()\n\t\tfor i := 0; i < len(mapKeys); i++ {\n\t\t\tif ObjectsAreEqual(mapKeys[i].Interface(), element) {\n\t\t\t\treturn true, true\n\t\t\t}\n\t\t}\n\t\treturn true, false\n\t}\n\n\tfor i := 0; i < listValue.Len(); i++ {\n\t\tif ObjectsAreEqual(listValue.Index(i).Interface(), element) {\n\t\t\treturn true, true\n\t\t}\n\t}\n\treturn true, false\n\n}\n\n// Contains asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\tassert.Contains(t, \"Hello World\", \"World\")\n//\tassert.Contains(t, [\"Hello\", \"World\"], \"World\")\n//\tassert.Contains(t, {\"Hello\": \"World\"}, \"Hello\")\nfunc Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tok, found := containsElement(s, contains)\n\tif !ok {\n\t\treturn Fail(t, fmt.Sprintf(\"%#v could not be applied builtin len()\", s), msgAndArgs...)\n\t}\n\tif !found {\n\t\treturn Fail(t, fmt.Sprintf(\"%#v does not contain %#v\", s, contains), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\tassert.NotContains(t, \"Hello World\", \"Earth\")\n//\tassert.NotContains(t, [\"Hello\", \"World\"], \"Earth\")\n//\tassert.NotContains(t, {\"Hello\": \"World\"}, \"Earth\")\nfunc NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tok, found := containsElement(s, contains)\n\tif !ok {\n\t\treturn Fail(t, fmt.Sprintf(\"%#v could not be applied builtin len()\", s), msgAndArgs...)\n\t}\n\tif found {\n\t\treturn Fail(t, fmt.Sprintf(\"%#v should not contain %#v\", s, contains), msgAndArgs...)\n\t}\n\n\treturn true\n\n}\n\n// Subset asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\tassert.Subset(t, [1, 2, 3], [1, 2])\n//\tassert.Subset(t, {\"x\": 1, \"y\": 2}, {\"x\": 1})\nfunc Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif subset == nil {\n\t\treturn true // we consider nil to be equal to the nil set\n\t}\n\n\tlistKind := reflect.TypeOf(list).Kind()\n\tif listKind != reflect.Array && listKind != reflect.Slice && listKind != reflect.Map {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", list, listKind), msgAndArgs...)\n\t}\n\n\tsubsetKind := reflect.TypeOf(subset).Kind()\n\tif subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", subset, subsetKind), msgAndArgs...)\n\t}\n\n\tif subsetKind == reflect.Map && listKind == reflect.Map {\n\t\tsubsetMap := reflect.ValueOf(subset)\n\t\tactualMap := reflect.ValueOf(list)\n\n\t\tfor _, k := range subsetMap.MapKeys() {\n\t\t\tev := subsetMap.MapIndex(k)\n\t\t\tav := actualMap.MapIndex(k)\n\n\t\t\tif !av.IsValid() {\n\t\t\t\treturn Fail(t, fmt.Sprintf(\"%#v does not contain %#v\", list, subset), msgAndArgs...)\n\t\t\t}\n\t\t\tif !ObjectsAreEqual(ev.Interface(), av.Interface()) {\n\t\t\t\treturn Fail(t, fmt.Sprintf(\"%#v does not contain %#v\", list, subset), msgAndArgs...)\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tsubsetList := reflect.ValueOf(subset)\n\tfor i := 0; i < subsetList.Len(); i++ {\n\t\telement := subsetList.Index(i).Interface()\n\t\tok, found := containsElement(list, element)\n\t\tif !ok {\n\t\t\treturn Fail(t, fmt.Sprintf(\"%#v could not be applied builtin len()\", list), msgAndArgs...)\n\t\t}\n\t\tif !found {\n\t\t\treturn Fail(t, fmt.Sprintf(\"%#v does not contain %#v\", list, element), msgAndArgs...)\n\t\t}\n\t}\n\n\treturn true\n}\n\n// NotSubset asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\tassert.NotSubset(t, [1, 3, 4], [1, 2])\n//\tassert.NotSubset(t, {\"x\": 1, \"y\": 2}, {\"z\": 3})\nfunc NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif subset == nil {\n\t\treturn Fail(t, \"nil is the empty set which is a subset of every set\", msgAndArgs...)\n\t}\n\n\tlistKind := reflect.TypeOf(list).Kind()\n\tif listKind != reflect.Array && listKind != reflect.Slice && listKind != reflect.Map {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", list, listKind), msgAndArgs...)\n\t}\n\n\tsubsetKind := reflect.TypeOf(subset).Kind()\n\tif subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s\", subset, subsetKind), msgAndArgs...)\n\t}\n\n\tif subsetKind == reflect.Map && listKind == reflect.Map {\n\t\tsubsetMap := reflect.ValueOf(subset)\n\t\tactualMap := reflect.ValueOf(list)\n\n\t\tfor _, k := range subsetMap.MapKeys() {\n\t\t\tev := subsetMap.MapIndex(k)\n\t\t\tav := actualMap.MapIndex(k)\n\n\t\t\tif !av.IsValid() {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif !ObjectsAreEqual(ev.Interface(), av.Interface()) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn Fail(t, fmt.Sprintf(\"%q is a subset of %q\", subset, list), msgAndArgs...)\n\t}\n\n\tsubsetList := reflect.ValueOf(subset)\n\tfor i := 0; i < subsetList.Len(); i++ {\n\t\telement := subsetList.Index(i).Interface()\n\t\tok, found := containsElement(list, element)\n\t\tif !ok {\n\t\t\treturn Fail(t, fmt.Sprintf(\"\\\"%s\\\" could not be applied builtin len()\", list), msgAndArgs...)\n\t\t}\n\t\tif !found {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn Fail(t, fmt.Sprintf(\"%q is a subset of %q\", subset, list), msgAndArgs...)\n}\n\n// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])\nfunc ElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif isEmpty(listA) && isEmpty(listB) {\n\t\treturn true\n\t}\n\n\tif !isList(t, listA, msgAndArgs...) || !isList(t, listB, msgAndArgs...) {\n\t\treturn false\n\t}\n\n\textraA, extraB := diffLists(listA, listB)\n\n\tif len(extraA) == 0 && len(extraB) == 0 {\n\t\treturn true\n\t}\n\n\treturn Fail(t, formatListDiff(listA, listB, extraA, extraB), msgAndArgs...)\n}\n\n// isList checks that the provided value is array or slice.\nfunc isList(t TestingT, list interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tkind := reflect.TypeOf(list).Kind()\n\tif kind != reflect.Array && kind != reflect.Slice {\n\t\treturn Fail(t, fmt.Sprintf(\"%q has an unsupported type %s, expecting array or slice\", list, kind),\n\t\t\tmsgAndArgs...)\n\t}\n\treturn true\n}\n\n// diffLists diffs two arrays/slices and returns slices of elements that are only in A and only in B.\n// If some element is present multiple times, each instance is counted separately (e.g. if something is 2x in A and\n// 5x in B, it will be 0x in extraA and 3x in extraB). The order of items in both lists is ignored.\nfunc diffLists(listA, listB interface{}) (extraA, extraB []interface{}) {\n\taValue := reflect.ValueOf(listA)\n\tbValue := reflect.ValueOf(listB)\n\n\taLen := aValue.Len()\n\tbLen := bValue.Len()\n\n\t// Mark indexes in bValue that we already used\n\tvisited := make([]bool, bLen)\n\tfor i := 0; i < aLen; i++ {\n\t\telement := aValue.Index(i).Interface()\n\t\tfound := false\n\t\tfor j := 0; j < bLen; j++ {\n\t\t\tif visited[j] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif ObjectsAreEqual(bValue.Index(j).Interface(), element) {\n\t\t\t\tvisited[j] = true\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\textraA = append(extraA, element)\n\t\t}\n\t}\n\n\tfor j := 0; j < bLen; j++ {\n\t\tif visited[j] {\n\t\t\tcontinue\n\t\t}\n\t\textraB = append(extraB, bValue.Index(j).Interface())\n\t}\n\n\treturn\n}\n\nfunc formatListDiff(listA, listB interface{}, extraA, extraB []interface{}) string {\n\tvar msg bytes.Buffer\n\n\tmsg.WriteString(\"elements differ\")\n\tif len(extraA) > 0 {\n\t\tmsg.WriteString(\"\\n\\nextra elements in list A:\\n\")\n\t\tmsg.WriteString(spewConfig.Sdump(extraA))\n\t}\n\tif len(extraB) > 0 {\n\t\tmsg.WriteString(\"\\n\\nextra elements in list B:\\n\")\n\t\tmsg.WriteString(spewConfig.Sdump(extraB))\n\t}\n\tmsg.WriteString(\"\\n\\nlistA:\\n\")\n\tmsg.WriteString(spewConfig.Sdump(listA))\n\tmsg.WriteString(\"\\n\\nlistB:\\n\")\n\tmsg.WriteString(spewConfig.Sdump(listB))\n\n\treturn msg.String()\n}\n\n// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false\n//\n// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true\n//\n// assert.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true\nfunc NotElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif isEmpty(listA) && isEmpty(listB) {\n\t\treturn Fail(t, \"listA and listB contain the same elements\", msgAndArgs)\n\t}\n\n\tif !isList(t, listA, msgAndArgs...) {\n\t\treturn Fail(t, \"listA is not a list type\", msgAndArgs...)\n\t}\n\tif !isList(t, listB, msgAndArgs...) {\n\t\treturn Fail(t, \"listB is not a list type\", msgAndArgs...)\n\t}\n\n\textraA, extraB := diffLists(listA, listB)\n\tif len(extraA) == 0 && len(extraB) == 0 {\n\t\treturn Fail(t, \"listA and listB contain the same elements\", msgAndArgs)\n\t}\n\n\treturn true\n}\n\n// Condition uses a Comparison to assert a complex condition.\nfunc Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tresult := comp()\n\tif !result {\n\t\tFail(t, \"Condition failed!\", msgAndArgs...)\n\t}\n\treturn result\n}\n\n// PanicTestFunc defines a func that should be passed to the assert.Panics and assert.NotPanics\n// methods, and represents a simple func that takes no arguments, and returns nothing.\ntype PanicTestFunc func()\n\n// didPanic returns true if the function passed to it panics. Otherwise, it returns false.\nfunc didPanic(f PanicTestFunc) (didPanic bool, message interface{}, stack string) {\n\tdidPanic = true\n\n\tdefer func() {\n\t\tmessage = recover()\n\t\tif didPanic {\n\t\t\tstack = string(debug.Stack())\n\t\t}\n\t}()\n\n\t// call the target function\n\tf()\n\tdidPanic = false\n\n\treturn\n}\n\n// Panics asserts that the code inside the specified PanicTestFunc panics.\n//\n//\tassert.Panics(t, func(){ GoCrazy() })\nfunc Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif funcDidPanic, panicValue, _ := didPanic(f); !funcDidPanic {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic\\n\\tPanic value:\\t%#v\", f, panicValue), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\tassert.PanicsWithValue(t, \"crazy error\", func(){ GoCrazy() })\nfunc PanicsWithValue(t TestingT, expected interface{}, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tfuncDidPanic, panicValue, panickedStack := didPanic(f)\n\tif !funcDidPanic {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic\\n\\tPanic value:\\t%#v\", f, panicValue), msgAndArgs...)\n\t}\n\tif panicValue != expected {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic with value:\\t%#v\\n\\tPanic value:\\t%#v\\n\\tPanic stack:\\t%s\", f, expected, panicValue, panickedStack), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// PanicsWithError asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\tassert.PanicsWithError(t, \"crazy error\", func(){ GoCrazy() })\nfunc PanicsWithError(t TestingT, errString string, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tfuncDidPanic, panicValue, panickedStack := didPanic(f)\n\tif !funcDidPanic {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic\\n\\tPanic value:\\t%#v\", f, panicValue), msgAndArgs...)\n\t}\n\tpanicErr, ok := panicValue.(error)\n\tif !ok || panicErr.Error() != errString {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should panic with error message:\\t%#v\\n\\tPanic value:\\t%#v\\n\\tPanic stack:\\t%s\", f, errString, panicValue, panickedStack), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\tassert.NotPanics(t, func(){ RemainCalm() })\nfunc NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif funcDidPanic, panicValue, panickedStack := didPanic(f); funcDidPanic {\n\t\treturn Fail(t, fmt.Sprintf(\"func %#v should not panic\\n\\tPanic value:\\t%v\\n\\tPanic stack:\\t%s\", f, panicValue, panickedStack), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// WithinDuration asserts that the two times are within duration delta of each other.\n//\n//\tassert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second)\nfunc WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tdt := expected.Sub(actual)\n\tif dt < -delta || dt > delta {\n\t\treturn Fail(t, fmt.Sprintf(\"Max difference between %v and %v allowed is %v, but difference was %v\", expected, actual, delta, dt), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// WithinRange asserts that a time is within a time range (inclusive).\n//\n//\tassert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second))\nfunc WithinRange(t TestingT, actual, start, end time.Time, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif end.Before(start) {\n\t\treturn Fail(t, \"Start should be before end\", msgAndArgs...)\n\t}\n\n\tif actual.Before(start) {\n\t\treturn Fail(t, fmt.Sprintf(\"Time %v expected to be in time range %v to %v, but is before the range\", actual, start, end), msgAndArgs...)\n\t} else if actual.After(end) {\n\t\treturn Fail(t, fmt.Sprintf(\"Time %v expected to be in time range %v to %v, but is after the range\", actual, start, end), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\nfunc toFloat(x interface{}) (float64, bool) {\n\tvar xf float64\n\txok := true\n\n\tswitch xn := x.(type) {\n\tcase uint:\n\t\txf = float64(xn)\n\tcase uint8:\n\t\txf = float64(xn)\n\tcase uint16:\n\t\txf = float64(xn)\n\tcase uint32:\n\t\txf = float64(xn)\n\tcase uint64:\n\t\txf = float64(xn)\n\tcase int:\n\t\txf = float64(xn)\n\tcase int8:\n\t\txf = float64(xn)\n\tcase int16:\n\t\txf = float64(xn)\n\tcase int32:\n\t\txf = float64(xn)\n\tcase int64:\n\t\txf = float64(xn)\n\tcase float32:\n\t\txf = float64(xn)\n\tcase float64:\n\t\txf = xn\n\tcase time.Duration:\n\t\txf = float64(xn)\n\tdefault:\n\t\txok = false\n\t}\n\n\treturn xf, xok\n}\n\n// InDelta asserts that the two numerals are within delta of each other.\n//\n//\tassert.InDelta(t, math.Pi, 22/7.0, 0.01)\nfunc InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\taf, aok := toFloat(expected)\n\tbf, bok := toFloat(actual)\n\n\tif !aok || !bok {\n\t\treturn Fail(t, \"Parameters must be numerical\", msgAndArgs...)\n\t}\n\n\tif math.IsNaN(af) && math.IsNaN(bf) {\n\t\treturn true\n\t}\n\n\tif math.IsNaN(af) {\n\t\treturn Fail(t, \"Expected must not be NaN\", msgAndArgs...)\n\t}\n\n\tif math.IsNaN(bf) {\n\t\treturn Fail(t, fmt.Sprintf(\"Expected %v with delta %v, but was NaN\", expected, delta), msgAndArgs...)\n\t}\n\n\tdt := af - bf\n\tif dt < -delta || dt > delta {\n\t\treturn Fail(t, fmt.Sprintf(\"Max difference between %v and %v allowed is %v, but difference was %v\", expected, actual, delta, dt), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// InDeltaSlice is the same as InDelta, except it compares two slices.\nfunc InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif expected == nil || actual == nil ||\n\t\treflect.TypeOf(actual).Kind() != reflect.Slice ||\n\t\treflect.TypeOf(expected).Kind() != reflect.Slice {\n\t\treturn Fail(t, \"Parameters must be slice\", msgAndArgs...)\n\t}\n\n\tactualSlice := reflect.ValueOf(actual)\n\texpectedSlice := reflect.ValueOf(expected)\n\n\tfor i := 0; i < actualSlice.Len(); i++ {\n\t\tresult := InDelta(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), delta, msgAndArgs...)\n\t\tif !result {\n\t\t\treturn result\n\t\t}\n\t}\n\n\treturn true\n}\n\n// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc InDeltaMapValues(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif expected == nil || actual == nil ||\n\t\treflect.TypeOf(actual).Kind() != reflect.Map ||\n\t\treflect.TypeOf(expected).Kind() != reflect.Map {\n\t\treturn Fail(t, \"Arguments must be maps\", msgAndArgs...)\n\t}\n\n\texpectedMap := reflect.ValueOf(expected)\n\tactualMap := reflect.ValueOf(actual)\n\n\tif expectedMap.Len() != actualMap.Len() {\n\t\treturn Fail(t, \"Arguments must have the same number of keys\", msgAndArgs...)\n\t}\n\n\tfor _, k := range expectedMap.MapKeys() {\n\t\tev := expectedMap.MapIndex(k)\n\t\tav := actualMap.MapIndex(k)\n\n\t\tif !ev.IsValid() {\n\t\t\treturn Fail(t, fmt.Sprintf(\"missing key %q in expected map\", k), msgAndArgs...)\n\t\t}\n\n\t\tif !av.IsValid() {\n\t\t\treturn Fail(t, fmt.Sprintf(\"missing key %q in actual map\", k), msgAndArgs...)\n\t\t}\n\n\t\tif !InDelta(\n\t\t\tt,\n\t\t\tev.Interface(),\n\t\t\tav.Interface(),\n\t\t\tdelta,\n\t\t\tmsgAndArgs...,\n\t\t) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc calcRelativeError(expected, actual interface{}) (float64, error) {\n\taf, aok := toFloat(expected)\n\tbf, bok := toFloat(actual)\n\tif !aok || !bok {\n\t\treturn 0, fmt.Errorf(\"Parameters must be numerical\")\n\t}\n\tif math.IsNaN(af) && math.IsNaN(bf) {\n\t\treturn 0, nil\n\t}\n\tif math.IsNaN(af) {\n\t\treturn 0, errors.New(\"expected value must not be NaN\")\n\t}\n\tif af == 0 {\n\t\treturn 0, fmt.Errorf(\"expected value must have a value other than zero to calculate the relative error\")\n\t}\n\tif math.IsNaN(bf) {\n\t\treturn 0, errors.New(\"actual value must not be NaN\")\n\t}\n\n\treturn math.Abs(af-bf) / math.Abs(af), nil\n}\n\n// InEpsilon asserts that expected and actual have a relative error less than epsilon\nfunc InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif math.IsNaN(epsilon) {\n\t\treturn Fail(t, \"epsilon must not be NaN\", msgAndArgs...)\n\t}\n\tactualEpsilon, err := calcRelativeError(expected, actual)\n\tif err != nil {\n\t\treturn Fail(t, err.Error(), msgAndArgs...)\n\t}\n\tif math.IsNaN(actualEpsilon) {\n\t\treturn Fail(t, \"relative error is NaN\", msgAndArgs...)\n\t}\n\tif actualEpsilon > epsilon {\n\t\treturn Fail(t, fmt.Sprintf(\"Relative error is too high: %#v (expected)\\n\"+\n\t\t\t\"        < %#v (actual)\", epsilon, actualEpsilon), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.\nfunc InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tif expected == nil || actual == nil {\n\t\treturn Fail(t, \"Parameters must be slice\", msgAndArgs...)\n\t}\n\n\texpectedSlice := reflect.ValueOf(expected)\n\tactualSlice := reflect.ValueOf(actual)\n\n\tif expectedSlice.Type().Kind() != reflect.Slice {\n\t\treturn Fail(t, \"Expected value must be slice\", msgAndArgs...)\n\t}\n\n\texpectedLen := expectedSlice.Len()\n\tif !IsType(t, expected, actual) || !Len(t, actual, expectedLen) {\n\t\treturn false\n\t}\n\n\tfor i := 0; i < expectedLen; i++ {\n\t\tif !InEpsilon(t, expectedSlice.Index(i).Interface(), actualSlice.Index(i).Interface(), epsilon, \"at index %d\", i) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n/*\n\tErrors\n*/\n\n// NoError asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if assert.NoError(t, err) {\n//\t\t   assert.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc NoError(t TestingT, err error, msgAndArgs ...interface{}) bool {\n\tif err != nil {\n\t\tif h, ok := t.(tHelper); ok {\n\t\t\th.Helper()\n\t\t}\n\t\treturn Fail(t, fmt.Sprintf(\"Received unexpected error:\\n%+v\", err), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// Error asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if assert.Error(t, err) {\n//\t\t   assert.Equal(t, expectedError, err)\n//\t  }\nfunc Error(t TestingT, err error, msgAndArgs ...interface{}) bool {\n\tif err == nil {\n\t\tif h, ok := t.(tHelper); ok {\n\t\t\th.Helper()\n\t\t}\n\t\treturn Fail(t, \"An error is expected but got nil.\", msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// EqualError asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\tassert.EqualError(t, err,  expectedErrorString)\nfunc EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif !Error(t, theError, msgAndArgs...) {\n\t\treturn false\n\t}\n\texpected := errString\n\tactual := theError.Error()\n\t// don't need to use deep equals here, we know they are both strings\n\tif expected != actual {\n\t\treturn Fail(t, fmt.Sprintf(\"Error message not equal:\\n\"+\n\t\t\t\"expected: %q\\n\"+\n\t\t\t\"actual  : %q\", expected, actual), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// ErrorContains asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\tassert.ErrorContains(t, err,  expectedErrorSubString)\nfunc ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif !Error(t, theError, msgAndArgs...) {\n\t\treturn false\n\t}\n\n\tactual := theError.Error()\n\tif !strings.Contains(actual, contains) {\n\t\treturn Fail(t, fmt.Sprintf(\"Error %#v does not contain %#v\", actual, contains), msgAndArgs...)\n\t}\n\n\treturn true\n}\n\n// matchRegexp return true if a specified regexp matches a string.\nfunc matchRegexp(rx interface{}, str interface{}) bool {\n\tvar r *regexp.Regexp\n\tif rr, ok := rx.(*regexp.Regexp); ok {\n\t\tr = rr\n\t} else {\n\t\tr = regexp.MustCompile(fmt.Sprint(rx))\n\t}\n\n\tswitch v := str.(type) {\n\tcase []byte:\n\t\treturn r.Match(v)\n\tcase string:\n\t\treturn r.MatchString(v)\n\tdefault:\n\t\treturn r.MatchString(fmt.Sprint(v))\n\t}\n\n}\n\n// Regexp asserts that a specified regexp matches a string.\n//\n//\tassert.Regexp(t, regexp.MustCompile(\"start\"), \"it's starting\")\n//\tassert.Regexp(t, \"start...$\", \"it's not starting\")\nfunc Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tmatch := matchRegexp(rx, str)\n\n\tif !match {\n\t\tFail(t, fmt.Sprintf(\"Expect \\\"%v\\\" to match \\\"%v\\\"\", str, rx), msgAndArgs...)\n\t}\n\n\treturn match\n}\n\n// NotRegexp asserts that a specified regexp does not match a string.\n//\n//\tassert.NotRegexp(t, regexp.MustCompile(\"starts\"), \"it's starting\")\n//\tassert.NotRegexp(t, \"^start\", \"it's not starting\")\nfunc NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tmatch := matchRegexp(rx, str)\n\n\tif match {\n\t\tFail(t, fmt.Sprintf(\"Expect \\\"%v\\\" to NOT match \\\"%v\\\"\", str, rx), msgAndArgs...)\n\t}\n\n\treturn !match\n\n}\n\n// Zero asserts that i is the zero value for its type.\nfunc Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif i != nil && !reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) {\n\t\treturn Fail(t, fmt.Sprintf(\"Should be zero, but was %v\", i), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// NotZero asserts that i is not the zero value for its type.\nfunc NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif i == nil || reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) {\n\t\treturn Fail(t, fmt.Sprintf(\"Should not be zero, but was %v\", i), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// FileExists checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc FileExists(t TestingT, path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinfo, err := os.Lstat(path)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn Fail(t, fmt.Sprintf(\"unable to find file %q\", path), msgAndArgs...)\n\t\t}\n\t\treturn Fail(t, fmt.Sprintf(\"error when running os.Lstat(%q): %s\", path, err), msgAndArgs...)\n\t}\n\tif info.IsDir() {\n\t\treturn Fail(t, fmt.Sprintf(\"%q is a directory\", path), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// NoFileExists checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc NoFileExists(t TestingT, path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinfo, err := os.Lstat(path)\n\tif err != nil {\n\t\treturn true\n\t}\n\tif info.IsDir() {\n\t\treturn true\n\t}\n\treturn Fail(t, fmt.Sprintf(\"file %q exists\", path), msgAndArgs...)\n}\n\n// DirExists checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc DirExists(t TestingT, path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinfo, err := os.Lstat(path)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn Fail(t, fmt.Sprintf(\"unable to find file %q\", path), msgAndArgs...)\n\t\t}\n\t\treturn Fail(t, fmt.Sprintf(\"error when running os.Lstat(%q): %s\", path, err), msgAndArgs...)\n\t}\n\tif !info.IsDir() {\n\t\treturn Fail(t, fmt.Sprintf(\"%q is a file\", path), msgAndArgs...)\n\t}\n\treturn true\n}\n\n// NoDirExists checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc NoDirExists(t TestingT, path string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tinfo, err := os.Lstat(path)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn true\n\t\t}\n\t\treturn true\n\t}\n\tif !info.IsDir() {\n\t\treturn true\n\t}\n\treturn Fail(t, fmt.Sprintf(\"directory %q exists\", path), msgAndArgs...)\n}\n\n// JSONEq asserts that two JSON strings are equivalent.\n//\n//\tassert.JSONEq(t, `{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`)\nfunc JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tvar expectedJSONAsInterface, actualJSONAsInterface interface{}\n\n\tif err := json.Unmarshal([]byte(expected), &expectedJSONAsInterface); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Expected value ('%s') is not valid json.\\nJSON parsing error: '%s'\", expected, err.Error()), msgAndArgs...)\n\t}\n\n\tif err := json.Unmarshal([]byte(actual), &actualJSONAsInterface); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Input ('%s') needs to be valid json.\\nJSON parsing error: '%s'\", actual, err.Error()), msgAndArgs...)\n\t}\n\n\treturn Equal(t, expectedJSONAsInterface, actualJSONAsInterface, msgAndArgs...)\n}\n\n// YAMLEq asserts that two YAML strings are equivalent.\nfunc YAMLEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tvar expectedYAMLAsInterface, actualYAMLAsInterface interface{}\n\n\tif err := yaml.Unmarshal([]byte(expected), &expectedYAMLAsInterface); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Expected value ('%s') is not valid yaml.\\nYAML parsing error: '%s'\", expected, err.Error()), msgAndArgs...)\n\t}\n\n\tif err := yaml.Unmarshal([]byte(actual), &actualYAMLAsInterface); err != nil {\n\t\treturn Fail(t, fmt.Sprintf(\"Input ('%s') needs to be valid yaml.\\nYAML error: '%s'\", actual, err.Error()), msgAndArgs...)\n\t}\n\n\treturn Equal(t, expectedYAMLAsInterface, actualYAMLAsInterface, msgAndArgs...)\n}\n\nfunc typeAndKind(v interface{}) (reflect.Type, reflect.Kind) {\n\tt := reflect.TypeOf(v)\n\tk := t.Kind()\n\n\tif k == reflect.Ptr {\n\t\tt = t.Elem()\n\t\tk = t.Kind()\n\t}\n\treturn t, k\n}\n\n// diff returns a diff of both values as long as both are of the same type and\n// are a struct, map, slice, array or string. Otherwise it returns an empty string.\nfunc diff(expected interface{}, actual interface{}) string {\n\tif expected == nil || actual == nil {\n\t\treturn \"\"\n\t}\n\n\tet, ek := typeAndKind(expected)\n\tat, _ := typeAndKind(actual)\n\n\tif et != at {\n\t\treturn \"\"\n\t}\n\n\tif ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array && ek != reflect.String {\n\t\treturn \"\"\n\t}\n\n\tvar e, a string\n\n\tswitch et {\n\tcase reflect.TypeOf(\"\"):\n\t\te = reflect.ValueOf(expected).String()\n\t\ta = reflect.ValueOf(actual).String()\n\tcase reflect.TypeOf(time.Time{}):\n\t\te = spewConfigStringerEnabled.Sdump(expected)\n\t\ta = spewConfigStringerEnabled.Sdump(actual)\n\tdefault:\n\t\te = spewConfig.Sdump(expected)\n\t\ta = spewConfig.Sdump(actual)\n\t}\n\n\tdiff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{\n\t\tA:        difflib.SplitLines(e),\n\t\tB:        difflib.SplitLines(a),\n\t\tFromFile: \"Expected\",\n\t\tFromDate: \"\",\n\t\tToFile:   \"Actual\",\n\t\tToDate:   \"\",\n\t\tContext:  1,\n\t})\n\n\treturn \"\\n\\nDiff:\\n\" + diff\n}\n\nfunc isFunction(arg interface{}) bool {\n\tif arg == nil {\n\t\treturn false\n\t}\n\treturn reflect.TypeOf(arg).Kind() == reflect.Func\n}\n\nvar spewConfig = spew.ConfigState{\n\tIndent:                  \" \",\n\tDisablePointerAddresses: true,\n\tDisableCapacities:       true,\n\tSortKeys:                true,\n\tDisableMethods:          true,\n\tMaxDepth:                10,\n}\n\nvar spewConfigStringerEnabled = spew.ConfigState{\n\tIndent:                  \" \",\n\tDisablePointerAddresses: true,\n\tDisableCapacities:       true,\n\tSortKeys:                true,\n\tMaxDepth:                10,\n}\n\ntype tHelper = interface {\n\tHelper()\n}\n\n// Eventually asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\tassert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond)\nfunc Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tch := make(chan bool, 1)\n\n\ttimer := time.NewTimer(waitFor)\n\tdefer timer.Stop()\n\n\tticker := time.NewTicker(tick)\n\tdefer ticker.Stop()\n\n\tfor tick := ticker.C; ; {\n\t\tselect {\n\t\tcase <-timer.C:\n\t\t\treturn Fail(t, \"Condition never satisfied\", msgAndArgs...)\n\t\tcase <-tick:\n\t\t\ttick = nil\n\t\t\tgo func() { ch <- condition() }()\n\t\tcase v := <-ch:\n\t\t\tif v {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\ttick = ticker.C\n\t\t}\n\t}\n}\n\n// CollectT implements the TestingT interface and collects all errors.\ntype CollectT struct {\n\t// A slice of errors. Non-nil slice denotes a failure.\n\t// If it's non-nil but len(c.errors) == 0, this is also a failure\n\t// obtained by direct c.FailNow() call.\n\terrors []error\n}\n\n// Errorf collects the error.\nfunc (c *CollectT) Errorf(format string, args ...interface{}) {\n\tc.errors = append(c.errors, fmt.Errorf(format, args...))\n}\n\n// FailNow stops execution by calling runtime.Goexit.\nfunc (c *CollectT) FailNow() {\n\tc.fail()\n\truntime.Goexit()\n}\n\n// Deprecated: That was a method for internal usage that should not have been published. Now just panics.\nfunc (*CollectT) Reset() {\n\tpanic(\"Reset() is deprecated\")\n}\n\n// Deprecated: That was a method for internal usage that should not have been published. Now just panics.\nfunc (*CollectT) Copy(TestingT) {\n\tpanic(\"Copy() is deprecated\")\n}\n\nfunc (c *CollectT) fail() {\n\tif !c.failed() {\n\t\tc.errors = []error{} // Make it non-nil to mark a failure.\n\t}\n}\n\nfunc (c *CollectT) failed() bool {\n\treturn c.errors != nil\n}\n\n// EventuallyWithT asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\tassert.EventuallyWithT(t, func(c *assert.CollectT) {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\tassert.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tvar lastFinishedTickErrs []error\n\tch := make(chan *CollectT, 1)\n\n\ttimer := time.NewTimer(waitFor)\n\tdefer timer.Stop()\n\n\tticker := time.NewTicker(tick)\n\tdefer ticker.Stop()\n\n\tfor tick := ticker.C; ; {\n\t\tselect {\n\t\tcase <-timer.C:\n\t\t\tfor _, err := range lastFinishedTickErrs {\n\t\t\t\tt.Errorf(\"%v\", err)\n\t\t\t}\n\t\t\treturn Fail(t, \"Condition never satisfied\", msgAndArgs...)\n\t\tcase <-tick:\n\t\t\ttick = nil\n\t\t\tgo func() {\n\t\t\t\tcollect := new(CollectT)\n\t\t\t\tdefer func() {\n\t\t\t\t\tch <- collect\n\t\t\t\t}()\n\t\t\t\tcondition(collect)\n\t\t\t}()\n\t\tcase collect := <-ch:\n\t\t\tif !collect.failed() {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Keep the errors from the last ended condition, so that they can be copied to t if timeout is reached.\n\t\t\tlastFinishedTickErrs = collect.errors\n\t\t\ttick = ticker.C\n\t\t}\n\t}\n}\n\n// Never asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\tassert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond)\nfunc Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\n\tch := make(chan bool, 1)\n\n\ttimer := time.NewTimer(waitFor)\n\tdefer timer.Stop()\n\n\tticker := time.NewTicker(tick)\n\tdefer ticker.Stop()\n\n\tfor tick := ticker.C; ; {\n\t\tselect {\n\t\tcase <-timer.C:\n\t\t\treturn true\n\t\tcase <-tick:\n\t\t\ttick = nil\n\t\t\tgo func() { ch <- condition() }()\n\t\tcase v := <-ch:\n\t\t\tif v {\n\t\t\t\treturn Fail(t, \"Condition satisfied\", msgAndArgs...)\n\t\t\t}\n\t\t\ttick = ticker.C\n\t\t}\n\t}\n}\n\n// ErrorIs asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif errors.Is(err, target) {\n\t\treturn true\n\t}\n\n\tvar expectedText string\n\tif target != nil {\n\t\texpectedText = target.Error()\n\t}\n\n\tchain := buildErrorChainString(err)\n\n\treturn Fail(t, fmt.Sprintf(\"Target error should be in err chain:\\n\"+\n\t\t\"expected: %q\\n\"+\n\t\t\"in chain: %s\", expectedText, chain,\n\t), msgAndArgs...)\n}\n\n// NotErrorIs asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif !errors.Is(err, target) {\n\t\treturn true\n\t}\n\n\tvar expectedText string\n\tif target != nil {\n\t\texpectedText = target.Error()\n\t}\n\n\tchain := buildErrorChainString(err)\n\n\treturn Fail(t, fmt.Sprintf(\"Target error should not be in err chain:\\n\"+\n\t\t\"found: %q\\n\"+\n\t\t\"in chain: %s\", expectedText, chain,\n\t), msgAndArgs...)\n}\n\n// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif errors.As(err, target) {\n\t\treturn true\n\t}\n\n\tchain := buildErrorChainString(err)\n\n\treturn Fail(t, fmt.Sprintf(\"Should be in error chain:\\n\"+\n\t\t\"expected: %q\\n\"+\n\t\t\"in chain: %s\", target, chain,\n\t), msgAndArgs...)\n}\n\n// NotErrorAs asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif !errors.As(err, target) {\n\t\treturn true\n\t}\n\n\tchain := buildErrorChainString(err)\n\n\treturn Fail(t, fmt.Sprintf(\"Target error should not be in err chain:\\n\"+\n\t\t\"found: %q\\n\"+\n\t\t\"in chain: %s\", target, chain,\n\t), msgAndArgs...)\n}\n\nfunc buildErrorChainString(err error) string {\n\tif err == nil {\n\t\treturn \"\"\n\t}\n\n\te := errors.Unwrap(err)\n\tchain := fmt.Sprintf(\"%q\", err.Error())\n\tfor e != nil {\n\t\tchain += fmt.Sprintf(\"\\n\\t%q\", e.Error())\n\t\te = errors.Unwrap(e)\n\t}\n\treturn chain\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/doc.go",
    "content": "// Package assert provides a set of comprehensive testing tools for use with the normal Go testing system.\n//\n// # Example Usage\n//\n// The following is a complete example using assert in a standard test function:\n//\n//\timport (\n//\t  \"testing\"\n//\t  \"github.com/stretchr/testify/assert\"\n//\t)\n//\n//\tfunc TestSomething(t *testing.T) {\n//\n//\t  var a string = \"Hello\"\n//\t  var b string = \"Hello\"\n//\n//\t  assert.Equal(t, a, b, \"The two words should be the same.\")\n//\n//\t}\n//\n// if you assert many times, use the format below:\n//\n//\timport (\n//\t  \"testing\"\n//\t  \"github.com/stretchr/testify/assert\"\n//\t)\n//\n//\tfunc TestSomething(t *testing.T) {\n//\t  assert := assert.New(t)\n//\n//\t  var a string = \"Hello\"\n//\t  var b string = \"Hello\"\n//\n//\t  assert.Equal(a, b, \"The two words should be the same.\")\n//\t}\n//\n// # Assertions\n//\n// Assertions allow you to easily write test code, and are global funcs in the `assert` package.\n// All assertion functions take, as the first argument, the `*testing.T` object provided by the\n// testing framework. This allows the assertion funcs to write the failings and other details to\n// the correct place.\n//\n// Every assertion function also takes an optional string message as the final argument,\n// allowing custom error messages to be appended to the message the assertion method outputs.\npackage assert\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/errors.go",
    "content": "package assert\n\nimport (\n\t\"errors\"\n)\n\n// AnError is an error instance useful for testing.  If the code does not care\n// about error specifics, and only needs to return the error for example, this\n// error should be used to make the test code more readable.\nvar AnError = errors.New(\"assert.AnError general error for testing\")\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/forward_assertions.go",
    "content": "package assert\n\n// Assertions provides assertion methods around the\n// TestingT interface.\ntype Assertions struct {\n\tt TestingT\n}\n\n// New makes a new Assertions object for the specified TestingT.\nfunc New(t TestingT) *Assertions {\n\treturn &Assertions{\n\t\tt: t,\n\t}\n}\n\n//go:generate sh -c \"cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_forward.go.tmpl -include-format-funcs\"\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/http_assertions.go",
    "content": "package assert\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/http/httptest\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// httpCode is a helper that returns HTTP code of the response. It returns -1 and\n// an error if building a new request fails.\nfunc httpCode(handler http.HandlerFunc, method, url string, values url.Values) (int, error) {\n\tw := httptest.NewRecorder()\n\treq, err := http.NewRequest(method, url, http.NoBody)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\treq.URL.RawQuery = values.Encode()\n\thandler(w, req)\n\treturn w.Code, nil\n}\n\n// HTTPSuccess asserts that a specified handler returns a success status code.\n//\n//\tassert.HTTPSuccess(t, myHandler, \"POST\", \"http://www.google.com\", nil)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcode, err := httpCode(handler, method, url, values)\n\tif err != nil {\n\t\tFail(t, fmt.Sprintf(\"Failed to build test request, got error: %s\", err), msgAndArgs...)\n\t}\n\n\tisSuccessCode := code >= http.StatusOK && code <= http.StatusPartialContent\n\tif !isSuccessCode {\n\t\tFail(t, fmt.Sprintf(\"Expected HTTP success status code for %q but received %d\", url+\"?\"+values.Encode(), code), msgAndArgs...)\n\t}\n\n\treturn isSuccessCode\n}\n\n// HTTPRedirect asserts that a specified handler returns a redirect status code.\n//\n//\tassert.HTTPRedirect(t, myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcode, err := httpCode(handler, method, url, values)\n\tif err != nil {\n\t\tFail(t, fmt.Sprintf(\"Failed to build test request, got error: %s\", err), msgAndArgs...)\n\t}\n\n\tisRedirectCode := code >= http.StatusMultipleChoices && code <= http.StatusTemporaryRedirect\n\tif !isRedirectCode {\n\t\tFail(t, fmt.Sprintf(\"Expected HTTP redirect status code for %q but received %d\", url+\"?\"+values.Encode(), code), msgAndArgs...)\n\t}\n\n\treturn isRedirectCode\n}\n\n// HTTPError asserts that a specified handler returns an error status code.\n//\n//\tassert.HTTPError(t, myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcode, err := httpCode(handler, method, url, values)\n\tif err != nil {\n\t\tFail(t, fmt.Sprintf(\"Failed to build test request, got error: %s\", err), msgAndArgs...)\n\t}\n\n\tisErrorCode := code >= http.StatusBadRequest\n\tif !isErrorCode {\n\t\tFail(t, fmt.Sprintf(\"Expected HTTP error status code for %q but received %d\", url+\"?\"+values.Encode(), code), msgAndArgs...)\n\t}\n\n\treturn isErrorCode\n}\n\n// HTTPStatusCode asserts that a specified handler returns a specified status code.\n//\n//\tassert.HTTPStatusCode(t, myHandler, \"GET\", \"/notImplemented\", nil, 501)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPStatusCode(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tcode, err := httpCode(handler, method, url, values)\n\tif err != nil {\n\t\tFail(t, fmt.Sprintf(\"Failed to build test request, got error: %s\", err), msgAndArgs...)\n\t}\n\n\tsuccessful := code == statuscode\n\tif !successful {\n\t\tFail(t, fmt.Sprintf(\"Expected HTTP status code %d for %q but received %d\", statuscode, url+\"?\"+values.Encode(), code), msgAndArgs...)\n\t}\n\n\treturn successful\n}\n\n// HTTPBody is a helper that returns HTTP body of the response. It returns\n// empty string if building a new request fails.\nfunc HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) string {\n\tw := httptest.NewRecorder()\n\tif len(values) > 0 {\n\t\turl += \"?\" + values.Encode()\n\t}\n\treq, err := http.NewRequest(method, url, http.NoBody)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\thandler(w, req)\n\treturn w.Body.String()\n}\n\n// HTTPBodyContains asserts that a specified handler returns a\n// body that contains a string.\n//\n//\tassert.HTTPBodyContains(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tbody := HTTPBody(handler, method, url, values)\n\n\tcontains := strings.Contains(body, fmt.Sprint(str))\n\tif !contains {\n\t\tFail(t, fmt.Sprintf(\"Expected response body for \\\"%s\\\" to contain \\\"%s\\\" but found \\\"%s\\\"\", url+\"?\"+values.Encode(), str, body), msgAndArgs...)\n\t}\n\n\treturn contains\n}\n\n// HTTPBodyNotContains asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\tassert.HTTPBodyNotContains(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) bool {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tbody := HTTPBody(handler, method, url, values)\n\n\tcontains := strings.Contains(body, fmt.Sprint(str))\n\tif contains {\n\t\tFail(t, fmt.Sprintf(\"Expected response body for \\\"%s\\\" to NOT contain \\\"%s\\\" but found \\\"%s\\\"\", url+\"?\"+values.Encode(), str, body), msgAndArgs...)\n\t}\n\n\treturn !contains\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go",
    "content": "//go:build testify_yaml_custom && !testify_yaml_fail && !testify_yaml_default\n// +build testify_yaml_custom,!testify_yaml_fail,!testify_yaml_default\n\n// Package yaml is an implementation of YAML functions that calls a pluggable implementation.\n//\n// This implementation is selected with the testify_yaml_custom build tag.\n//\n//\tgo test -tags testify_yaml_custom\n//\n// This implementation can be used at build time to replace the default implementation\n// to avoid linking with [gopkg.in/yaml.v3].\n//\n// In your test package:\n//\n//\t\timport assertYaml \"github.com/stretchr/testify/assert/yaml\"\n//\n//\t\tfunc init() {\n//\t\t\tassertYaml.Unmarshal = func (in []byte, out interface{}) error {\n//\t\t\t\t// ...\n//\t     \t\t\treturn nil\n//\t\t\t}\n//\t\t}\npackage yaml\n\nvar Unmarshal func(in []byte, out interface{}) error\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go",
    "content": "//go:build !testify_yaml_fail && !testify_yaml_custom\n// +build !testify_yaml_fail,!testify_yaml_custom\n\n// Package yaml is just an indirection to handle YAML deserialization.\n//\n// This package is just an indirection that allows the builder to override the\n// indirection with an alternative implementation of this package that uses\n// another implementation of YAML deserialization. This allows to not either not\n// use YAML deserialization at all, or to use another implementation than\n// [gopkg.in/yaml.v3] (for example for license compatibility reasons, see [PR #1120]).\n//\n// Alternative implementations are selected using build tags:\n//\n//   - testify_yaml_fail: [Unmarshal] always fails with an error\n//   - testify_yaml_custom: [Unmarshal] is a variable. Caller must initialize it\n//     before calling any of [github.com/stretchr/testify/assert.YAMLEq] or\n//     [github.com/stretchr/testify/assert.YAMLEqf].\n//\n// Usage:\n//\n//\tgo test -tags testify_yaml_fail\n//\n// You can check with \"go list\" which implementation is linked:\n//\n//\tgo list -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml\n//\tgo list -tags testify_yaml_fail -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml\n//\tgo list -tags testify_yaml_custom -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml\n//\n// [PR #1120]: https://github.com/stretchr/testify/pull/1120\npackage yaml\n\nimport goyaml \"gopkg.in/yaml.v3\"\n\n// Unmarshal is just a wrapper of [gopkg.in/yaml.v3.Unmarshal].\nfunc Unmarshal(in []byte, out interface{}) error {\n\treturn goyaml.Unmarshal(in, out)\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go",
    "content": "//go:build testify_yaml_fail && !testify_yaml_custom && !testify_yaml_default\n// +build testify_yaml_fail,!testify_yaml_custom,!testify_yaml_default\n\n// Package yaml is an implementation of YAML functions that always fail.\n//\n// This implementation can be used at build time to replace the default implementation\n// to avoid linking with [gopkg.in/yaml.v3]:\n//\n//\tgo test -tags testify_yaml_fail\npackage yaml\n\nimport \"errors\"\n\nvar errNotImplemented = errors.New(\"YAML functions are not available (see https://pkg.go.dev/github.com/stretchr/testify/assert/yaml)\")\n\nfunc Unmarshal([]byte, interface{}) error {\n\treturn errNotImplemented\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/require/doc.go",
    "content": "// Package require implements the same assertions as the `assert` package but\n// stops test execution when a test fails.\n//\n// # Example Usage\n//\n// The following is a complete example using require in a standard test function:\n//\n//\timport (\n//\t  \"testing\"\n//\t  \"github.com/stretchr/testify/require\"\n//\t)\n//\n//\tfunc TestSomething(t *testing.T) {\n//\n//\t  var a string = \"Hello\"\n//\t  var b string = \"Hello\"\n//\n//\t  require.Equal(t, a, b, \"The two words should be the same.\")\n//\n//\t}\n//\n// # Assertions\n//\n// The `require` package have same global functions as in the `assert` package,\n// but instead of returning a boolean result they call `t.FailNow()`.\n//\n// Every assertion function also takes an optional string message as the final argument,\n// allowing custom error messages to be appended to the message the assertion method outputs.\npackage require\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/require/forward_requirements.go",
    "content": "package require\n\n// Assertions provides assertion methods around the\n// TestingT interface.\ntype Assertions struct {\n\tt TestingT\n}\n\n// New makes a new Assertions object for the specified TestingT.\nfunc New(t TestingT) *Assertions {\n\treturn &Assertions{\n\t\tt: t,\n\t}\n}\n\n//go:generate sh -c \"cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=require -template=require_forward.go.tmpl -include-format-funcs\"\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/require/require.go",
    "content": "// Code generated with github.com/stretchr/testify/_codegen; DO NOT EDIT.\n\npackage require\n\nimport (\n\tassert \"github.com/stretchr/testify/assert\"\n\thttp \"net/http\"\n\turl \"net/url\"\n\ttime \"time\"\n)\n\n// Condition uses a Comparison to assert a complex condition.\nfunc Condition(t TestingT, comp assert.Comparison, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Condition(t, comp, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Conditionf uses a Comparison to assert a complex condition.\nfunc Conditionf(t TestingT, comp assert.Comparison, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Conditionf(t, comp, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Contains asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\trequire.Contains(t, \"Hello World\", \"World\")\n//\trequire.Contains(t, [\"Hello\", \"World\"], \"World\")\n//\trequire.Contains(t, {\"Hello\": \"World\"}, \"Hello\")\nfunc Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Contains(t, s, contains, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Containsf asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\trequire.Containsf(t, \"Hello World\", \"World\", \"error message %s\", \"formatted\")\n//\trequire.Containsf(t, [\"Hello\", \"World\"], \"World\", \"error message %s\", \"formatted\")\n//\trequire.Containsf(t, {\"Hello\": \"World\"}, \"Hello\", \"error message %s\", \"formatted\")\nfunc Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Containsf(t, s, contains, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// DirExists checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc DirExists(t TestingT, path string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.DirExists(t, path, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// DirExistsf checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc DirExistsf(t TestingT, path string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.DirExistsf(t, path, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// require.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2])\nfunc ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ElementsMatch(t, listA, listB, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// require.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], \"error message %s\", \"formatted\")\nfunc ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ElementsMatchf(t, listA, listB, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Empty asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\trequire.Empty(t, obj)\nfunc Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Empty(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Emptyf asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\trequire.Emptyf(t, obj, \"error message %s\", \"formatted\")\nfunc Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Emptyf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Equal asserts that two objects are equal.\n//\n//\trequire.Equal(t, 123, 123)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc Equal(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Equal(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EqualError asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\trequire.EqualError(t, err,  expectedErrorString)\nfunc EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EqualError(t, theError, errString, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EqualErrorf asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\trequire.EqualErrorf(t, err,  expectedErrorString, \"error message %s\", \"formatted\")\nfunc EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EqualErrorf(t, theError, errString, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EqualExportedValues asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t require.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true\n//\t require.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false\nfunc EqualExportedValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EqualExportedValues(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EqualExportedValuesf asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t require.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, \"error message %s\", \"formatted\") => true\n//\t require.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, \"error message %s\", \"formatted\") => false\nfunc EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EqualExportedValuesf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EqualValues asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\trequire.EqualValues(t, uint32(123), int32(123))\nfunc EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EqualValues(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EqualValuesf asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\trequire.EqualValuesf(t, uint32(123), int32(123), \"error message %s\", \"formatted\")\nfunc EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EqualValuesf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Equalf asserts that two objects are equal.\n//\n//\trequire.Equalf(t, 123, 123, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc Equalf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Equalf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Error asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if require.Error(t, err) {\n//\t\t   require.Equal(t, expectedError, err)\n//\t  }\nfunc Error(t TestingT, err error, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Error(t, err, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ErrorAs(t, err, target, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ErrorAsf(t, err, target, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ErrorContains asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\trequire.ErrorContains(t, err,  expectedErrorSubString)\nfunc ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ErrorContains(t, theError, contains, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ErrorContainsf asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\trequire.ErrorContainsf(t, err,  expectedErrorSubString, \"error message %s\", \"formatted\")\nfunc ErrorContainsf(t TestingT, theError error, contains string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ErrorContainsf(t, theError, contains, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ErrorIs asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc ErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ErrorIs(t, err, target, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// ErrorIsf asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc ErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.ErrorIsf(t, err, target, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Errorf asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if require.Errorf(t, err, \"error message %s\", \"formatted\") {\n//\t\t   require.Equal(t, expectedErrorf, err)\n//\t  }\nfunc Errorf(t TestingT, err error, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Errorf(t, err, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Eventually asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\trequire.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond)\nfunc Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Eventually(t, condition, waitFor, tick, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EventuallyWithT asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\trequire.EventuallyWithT(t, func(c *require.CollectT) {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\trequire.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EventuallyWithT(t, condition, waitFor, tick, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// EventuallyWithTf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\trequire.EventuallyWithTf(t, func(c *require.CollectT, \"error message %s\", \"formatted\") {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\trequire.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.EventuallyWithTf(t, condition, waitFor, tick, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Eventuallyf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\trequire.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Eventuallyf(t, condition, waitFor, tick, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Exactly asserts that two objects are equal in value and type.\n//\n//\trequire.Exactly(t, int32(123), int64(123))\nfunc Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Exactly(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Exactlyf asserts that two objects are equal in value and type.\n//\n//\trequire.Exactlyf(t, int32(123), int64(123), \"error message %s\", \"formatted\")\nfunc Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Exactlyf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Fail reports a failure through\nfunc Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Fail(t, failureMessage, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// FailNow fails test\nfunc FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.FailNow(t, failureMessage, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// FailNowf fails test\nfunc FailNowf(t TestingT, failureMessage string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.FailNowf(t, failureMessage, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Failf reports a failure through\nfunc Failf(t TestingT, failureMessage string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Failf(t, failureMessage, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// False asserts that the specified value is false.\n//\n//\trequire.False(t, myBool)\nfunc False(t TestingT, value bool, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.False(t, value, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Falsef asserts that the specified value is false.\n//\n//\trequire.Falsef(t, myBool, \"error message %s\", \"formatted\")\nfunc Falsef(t TestingT, value bool, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Falsef(t, value, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// FileExists checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc FileExists(t TestingT, path string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.FileExists(t, path, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// FileExistsf checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc FileExistsf(t TestingT, path string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.FileExistsf(t, path, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Greater asserts that the first element is greater than the second\n//\n//\trequire.Greater(t, 2, 1)\n//\trequire.Greater(t, float64(2), float64(1))\n//\trequire.Greater(t, \"b\", \"a\")\nfunc Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Greater(t, e1, e2, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// GreaterOrEqual asserts that the first element is greater than or equal to the second\n//\n//\trequire.GreaterOrEqual(t, 2, 1)\n//\trequire.GreaterOrEqual(t, 2, 2)\n//\trequire.GreaterOrEqual(t, \"b\", \"a\")\n//\trequire.GreaterOrEqual(t, \"b\", \"b\")\nfunc GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.GreaterOrEqual(t, e1, e2, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// GreaterOrEqualf asserts that the first element is greater than or equal to the second\n//\n//\trequire.GreaterOrEqualf(t, 2, 1, \"error message %s\", \"formatted\")\n//\trequire.GreaterOrEqualf(t, 2, 2, \"error message %s\", \"formatted\")\n//\trequire.GreaterOrEqualf(t, \"b\", \"a\", \"error message %s\", \"formatted\")\n//\trequire.GreaterOrEqualf(t, \"b\", \"b\", \"error message %s\", \"formatted\")\nfunc GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.GreaterOrEqualf(t, e1, e2, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Greaterf asserts that the first element is greater than the second\n//\n//\trequire.Greaterf(t, 2, 1, \"error message %s\", \"formatted\")\n//\trequire.Greaterf(t, float64(2), float64(1), \"error message %s\", \"formatted\")\n//\trequire.Greaterf(t, \"b\", \"a\", \"error message %s\", \"formatted\")\nfunc Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Greaterf(t, e1, e2, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPBodyContains asserts that a specified handler returns a\n// body that contains a string.\n//\n//\trequire.HTTPBodyContains(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPBodyContains(t, handler, method, url, values, str, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPBodyContainsf asserts that a specified handler returns a\n// body that contains a string.\n//\n//\trequire.HTTPBodyContainsf(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPBodyContainsf(t, handler, method, url, values, str, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPBodyNotContains asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\trequire.HTTPBodyNotContains(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPBodyNotContains(t, handler, method, url, values, str, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPBodyNotContainsf asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\trequire.HTTPBodyNotContainsf(t, myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPBodyNotContainsf(t, handler, method, url, values, str, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPError asserts that a specified handler returns an error status code.\n//\n//\trequire.HTTPError(t, myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPError(t, handler, method, url, values, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPErrorf asserts that a specified handler returns an error status code.\n//\n//\trequire.HTTPErrorf(t, myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPErrorf(t, handler, method, url, values, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPRedirect asserts that a specified handler returns a redirect status code.\n//\n//\trequire.HTTPRedirect(t, myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPRedirect(t, handler, method, url, values, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPRedirectf asserts that a specified handler returns a redirect status code.\n//\n//\trequire.HTTPRedirectf(t, myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPRedirectf(t, handler, method, url, values, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPStatusCode asserts that a specified handler returns a specified status code.\n//\n//\trequire.HTTPStatusCode(t, myHandler, \"GET\", \"/notImplemented\", nil, 501)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPStatusCode(t, handler, method, url, values, statuscode, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPStatusCodef asserts that a specified handler returns a specified status code.\n//\n//\trequire.HTTPStatusCodef(t, myHandler, \"GET\", \"/notImplemented\", nil, 501, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPStatusCodef(t, handler, method, url, values, statuscode, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPSuccess asserts that a specified handler returns a success status code.\n//\n//\trequire.HTTPSuccess(t, myHandler, \"POST\", \"http://www.google.com\", nil)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPSuccess(t, handler, method, url, values, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// HTTPSuccessf asserts that a specified handler returns a success status code.\n//\n//\trequire.HTTPSuccessf(t, myHandler, \"POST\", \"http://www.google.com\", nil, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.HTTPSuccessf(t, handler, method, url, values, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Implements asserts that an object is implemented by the specified interface.\n//\n//\trequire.Implements(t, (*MyInterface)(nil), new(MyObject))\nfunc Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Implements(t, interfaceObject, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Implementsf asserts that an object is implemented by the specified interface.\n//\n//\trequire.Implementsf(t, (*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Implementsf(t, interfaceObject, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InDelta asserts that the two numerals are within delta of each other.\n//\n//\trequire.InDelta(t, math.Pi, 22/7.0, 0.01)\nfunc InDelta(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InDelta(t, expected, actual, delta, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc InDeltaMapValues(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InDeltaMapValues(t, expected, actual, delta, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc InDeltaMapValuesf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InDeltaMapValuesf(t, expected, actual, delta, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InDeltaSlice is the same as InDelta, except it compares two slices.\nfunc InDeltaSlice(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InDeltaSlice(t, expected, actual, delta, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InDeltaSlicef is the same as InDelta, except it compares two slices.\nfunc InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InDeltaSlicef(t, expected, actual, delta, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InDeltaf asserts that the two numerals are within delta of each other.\n//\n//\trequire.InDeltaf(t, math.Pi, 22/7.0, 0.01, \"error message %s\", \"formatted\")\nfunc InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InDeltaf(t, expected, actual, delta, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InEpsilon asserts that expected and actual have a relative error less than epsilon\nfunc InEpsilon(t TestingT, expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InEpsilon(t, expected, actual, epsilon, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.\nfunc InEpsilonSlice(t TestingT, expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InEpsilonSlice(t, expected, actual, epsilon, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.\nfunc InEpsilonSlicef(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InEpsilonSlicef(t, expected, actual, epsilon, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// InEpsilonf asserts that expected and actual have a relative error less than epsilon\nfunc InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.InEpsilonf(t, expected, actual, epsilon, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsDecreasing asserts that the collection is decreasing\n//\n//\trequire.IsDecreasing(t, []int{2, 1, 0})\n//\trequire.IsDecreasing(t, []float{2, 1})\n//\trequire.IsDecreasing(t, []string{\"b\", \"a\"})\nfunc IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsDecreasing(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsDecreasingf asserts that the collection is decreasing\n//\n//\trequire.IsDecreasingf(t, []int{2, 1, 0}, \"error message %s\", \"formatted\")\n//\trequire.IsDecreasingf(t, []float{2, 1}, \"error message %s\", \"formatted\")\n//\trequire.IsDecreasingf(t, []string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsDecreasingf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsIncreasing asserts that the collection is increasing\n//\n//\trequire.IsIncreasing(t, []int{1, 2, 3})\n//\trequire.IsIncreasing(t, []float{1, 2})\n//\trequire.IsIncreasing(t, []string{\"a\", \"b\"})\nfunc IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsIncreasing(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsIncreasingf asserts that the collection is increasing\n//\n//\trequire.IsIncreasingf(t, []int{1, 2, 3}, \"error message %s\", \"formatted\")\n//\trequire.IsIncreasingf(t, []float{1, 2}, \"error message %s\", \"formatted\")\n//\trequire.IsIncreasingf(t, []string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsIncreasingf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsNonDecreasing asserts that the collection is not decreasing\n//\n//\trequire.IsNonDecreasing(t, []int{1, 1, 2})\n//\trequire.IsNonDecreasing(t, []float{1, 2})\n//\trequire.IsNonDecreasing(t, []string{\"a\", \"b\"})\nfunc IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsNonDecreasing(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsNonDecreasingf asserts that the collection is not decreasing\n//\n//\trequire.IsNonDecreasingf(t, []int{1, 1, 2}, \"error message %s\", \"formatted\")\n//\trequire.IsNonDecreasingf(t, []float{1, 2}, \"error message %s\", \"formatted\")\n//\trequire.IsNonDecreasingf(t, []string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsNonDecreasingf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsNonIncreasing asserts that the collection is not increasing\n//\n//\trequire.IsNonIncreasing(t, []int{2, 1, 1})\n//\trequire.IsNonIncreasing(t, []float{2, 1})\n//\trequire.IsNonIncreasing(t, []string{\"b\", \"a\"})\nfunc IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsNonIncreasing(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsNonIncreasingf asserts that the collection is not increasing\n//\n//\trequire.IsNonIncreasingf(t, []int{2, 1, 1}, \"error message %s\", \"formatted\")\n//\trequire.IsNonIncreasingf(t, []float{2, 1}, \"error message %s\", \"formatted\")\n//\trequire.IsNonIncreasingf(t, []string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsNonIncreasingf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsType asserts that the specified objects are of the same type.\nfunc IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsType(t, expectedType, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// IsTypef asserts that the specified objects are of the same type.\nfunc IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.IsTypef(t, expectedType, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// JSONEq asserts that two JSON strings are equivalent.\n//\n//\trequire.JSONEq(t, `{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`)\nfunc JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.JSONEq(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// JSONEqf asserts that two JSON strings are equivalent.\n//\n//\trequire.JSONEqf(t, `{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`, \"error message %s\", \"formatted\")\nfunc JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.JSONEqf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Len asserts that the specified object has specific length.\n// Len also fails if the object has a type that len() not accept.\n//\n//\trequire.Len(t, mySlice, 3)\nfunc Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Len(t, object, length, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Lenf asserts that the specified object has specific length.\n// Lenf also fails if the object has a type that len() not accept.\n//\n//\trequire.Lenf(t, mySlice, 3, \"error message %s\", \"formatted\")\nfunc Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Lenf(t, object, length, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Less asserts that the first element is less than the second\n//\n//\trequire.Less(t, 1, 2)\n//\trequire.Less(t, float64(1), float64(2))\n//\trequire.Less(t, \"a\", \"b\")\nfunc Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Less(t, e1, e2, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// LessOrEqual asserts that the first element is less than or equal to the second\n//\n//\trequire.LessOrEqual(t, 1, 2)\n//\trequire.LessOrEqual(t, 2, 2)\n//\trequire.LessOrEqual(t, \"a\", \"b\")\n//\trequire.LessOrEqual(t, \"b\", \"b\")\nfunc LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.LessOrEqual(t, e1, e2, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// LessOrEqualf asserts that the first element is less than or equal to the second\n//\n//\trequire.LessOrEqualf(t, 1, 2, \"error message %s\", \"formatted\")\n//\trequire.LessOrEqualf(t, 2, 2, \"error message %s\", \"formatted\")\n//\trequire.LessOrEqualf(t, \"a\", \"b\", \"error message %s\", \"formatted\")\n//\trequire.LessOrEqualf(t, \"b\", \"b\", \"error message %s\", \"formatted\")\nfunc LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.LessOrEqualf(t, e1, e2, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Lessf asserts that the first element is less than the second\n//\n//\trequire.Lessf(t, 1, 2, \"error message %s\", \"formatted\")\n//\trequire.Lessf(t, float64(1), float64(2), \"error message %s\", \"formatted\")\n//\trequire.Lessf(t, \"a\", \"b\", \"error message %s\", \"formatted\")\nfunc Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Lessf(t, e1, e2, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Negative asserts that the specified element is negative\n//\n//\trequire.Negative(t, -1)\n//\trequire.Negative(t, -1.23)\nfunc Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Negative(t, e, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Negativef asserts that the specified element is negative\n//\n//\trequire.Negativef(t, -1, \"error message %s\", \"formatted\")\n//\trequire.Negativef(t, -1.23, \"error message %s\", \"formatted\")\nfunc Negativef(t TestingT, e interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Negativef(t, e, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Never asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\trequire.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond)\nfunc Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Never(t, condition, waitFor, tick, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Neverf asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\trequire.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Neverf(t, condition, waitFor, tick, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Nil asserts that the specified object is nil.\n//\n//\trequire.Nil(t, err)\nfunc Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Nil(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Nilf asserts that the specified object is nil.\n//\n//\trequire.Nilf(t, err, \"error message %s\", \"formatted\")\nfunc Nilf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Nilf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NoDirExists checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc NoDirExists(t TestingT, path string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NoDirExists(t, path, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NoDirExistsf checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NoDirExistsf(t, path, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NoError asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if require.NoError(t, err) {\n//\t\t   require.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc NoError(t TestingT, err error, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NoError(t, err, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NoErrorf asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if require.NoErrorf(t, err, \"error message %s\", \"formatted\") {\n//\t\t   require.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc NoErrorf(t TestingT, err error, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NoErrorf(t, err, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NoFileExists checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc NoFileExists(t TestingT, path string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NoFileExists(t, path, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NoFileExistsf checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NoFileExistsf(t, path, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\trequire.NotContains(t, \"Hello World\", \"Earth\")\n//\trequire.NotContains(t, [\"Hello\", \"World\"], \"Earth\")\n//\trequire.NotContains(t, {\"Hello\": \"World\"}, \"Earth\")\nfunc NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotContains(t, s, contains, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\trequire.NotContainsf(t, \"Hello World\", \"Earth\", \"error message %s\", \"formatted\")\n//\trequire.NotContainsf(t, [\"Hello\", \"World\"], \"Earth\", \"error message %s\", \"formatted\")\n//\trequire.NotContainsf(t, {\"Hello\": \"World\"}, \"Earth\", \"error message %s\", \"formatted\")\nfunc NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotContainsf(t, s, contains, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false\n//\n// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true\n//\n// require.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true\nfunc NotElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotElementsMatch(t, listA, listB, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], \"error message %s\", \"formatted\") -> false\n//\n// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], \"error message %s\", \"formatted\") -> true\n//\n// require.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], \"error message %s\", \"formatted\") -> true\nfunc NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotElementsMatchf(t, listA, listB, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotEmpty asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif require.NotEmpty(t, obj) {\n//\t  require.Equal(t, \"two\", obj[1])\n//\t}\nfunc NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotEmpty(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotEmptyf asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif require.NotEmptyf(t, obj, \"error message %s\", \"formatted\") {\n//\t  require.Equal(t, \"two\", obj[1])\n//\t}\nfunc NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotEmptyf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotEqual asserts that the specified values are NOT equal.\n//\n//\trequire.NotEqual(t, obj1, obj2)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotEqual(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotEqualValues asserts that two objects are not equal even when converted to the same type\n//\n//\trequire.NotEqualValues(t, obj1, obj2)\nfunc NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotEqualValues(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotEqualValuesf asserts that two objects are not equal even when converted to the same type\n//\n//\trequire.NotEqualValuesf(t, obj1, obj2, \"error message %s\", \"formatted\")\nfunc NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotEqualValuesf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotEqualf asserts that the specified values are NOT equal.\n//\n//\trequire.NotEqualf(t, obj1, obj2, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotEqualf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotErrorAs asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotErrorAs(t, err, target, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotErrorAsf asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotErrorAsf(t, err, target, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotErrorIs asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotErrorIs(t, err, target, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotErrorIsf asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotErrorIsf(t, err, target, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotImplements asserts that an object does not implement the specified interface.\n//\n//\trequire.NotImplements(t, (*MyInterface)(nil), new(MyObject))\nfunc NotImplements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotImplements(t, interfaceObject, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotImplementsf asserts that an object does not implement the specified interface.\n//\n//\trequire.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc NotImplementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotImplementsf(t, interfaceObject, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotNil asserts that the specified object is not nil.\n//\n//\trequire.NotNil(t, err)\nfunc NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotNil(t, object, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotNilf asserts that the specified object is not nil.\n//\n//\trequire.NotNilf(t, err, \"error message %s\", \"formatted\")\nfunc NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotNilf(t, object, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\trequire.NotPanics(t, func(){ RemainCalm() })\nfunc NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotPanics(t, f, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\trequire.NotPanicsf(t, func(){ RemainCalm() }, \"error message %s\", \"formatted\")\nfunc NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotPanicsf(t, f, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotRegexp asserts that a specified regexp does not match a string.\n//\n//\trequire.NotRegexp(t, regexp.MustCompile(\"starts\"), \"it's starting\")\n//\trequire.NotRegexp(t, \"^start\", \"it's not starting\")\nfunc NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotRegexp(t, rx, str, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotRegexpf asserts that a specified regexp does not match a string.\n//\n//\trequire.NotRegexpf(t, regexp.MustCompile(\"starts\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\trequire.NotRegexpf(t, \"^start\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotRegexpf(t, rx, str, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotSame asserts that two pointers do not reference the same object.\n//\n//\trequire.NotSame(t, ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc NotSame(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotSame(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotSamef asserts that two pointers do not reference the same object.\n//\n//\trequire.NotSamef(t, ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotSamef(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotSubset asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\trequire.NotSubset(t, [1, 3, 4], [1, 2])\n//\trequire.NotSubset(t, {\"x\": 1, \"y\": 2}, {\"z\": 3})\nfunc NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotSubset(t, list, subset, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotSubsetf asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\trequire.NotSubsetf(t, [1, 3, 4], [1, 2], \"error message %s\", \"formatted\")\n//\trequire.NotSubsetf(t, {\"x\": 1, \"y\": 2}, {\"z\": 3}, \"error message %s\", \"formatted\")\nfunc NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotSubsetf(t, list, subset, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotZero asserts that i is not the zero value for its type.\nfunc NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotZero(t, i, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// NotZerof asserts that i is not the zero value for its type.\nfunc NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.NotZerof(t, i, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Panics asserts that the code inside the specified PanicTestFunc panics.\n//\n//\trequire.Panics(t, func(){ GoCrazy() })\nfunc Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Panics(t, f, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// PanicsWithError asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\trequire.PanicsWithError(t, \"crazy error\", func(){ GoCrazy() })\nfunc PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.PanicsWithError(t, errString, f, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\trequire.PanicsWithErrorf(t, \"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.PanicsWithErrorf(t, errString, f, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\trequire.PanicsWithValue(t, \"crazy error\", func(){ GoCrazy() })\nfunc PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.PanicsWithValue(t, expected, f, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\trequire.PanicsWithValuef(t, \"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.PanicsWithValuef(t, expected, f, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Panicsf asserts that the code inside the specified PanicTestFunc panics.\n//\n//\trequire.Panicsf(t, func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Panicsf(t, f, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Positive asserts that the specified element is positive\n//\n//\trequire.Positive(t, 1)\n//\trequire.Positive(t, 1.23)\nfunc Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Positive(t, e, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Positivef asserts that the specified element is positive\n//\n//\trequire.Positivef(t, 1, \"error message %s\", \"formatted\")\n//\trequire.Positivef(t, 1.23, \"error message %s\", \"formatted\")\nfunc Positivef(t TestingT, e interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Positivef(t, e, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Regexp asserts that a specified regexp matches a string.\n//\n//\trequire.Regexp(t, regexp.MustCompile(\"start\"), \"it's starting\")\n//\trequire.Regexp(t, \"start...$\", \"it's not starting\")\nfunc Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Regexp(t, rx, str, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Regexpf asserts that a specified regexp matches a string.\n//\n//\trequire.Regexpf(t, regexp.MustCompile(\"start\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\trequire.Regexpf(t, \"start...$\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Regexpf(t, rx, str, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Same asserts that two pointers reference the same object.\n//\n//\trequire.Same(t, ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc Same(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Same(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Samef asserts that two pointers reference the same object.\n//\n//\trequire.Samef(t, ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc Samef(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Samef(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Subset asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\trequire.Subset(t, [1, 2, 3], [1, 2])\n//\trequire.Subset(t, {\"x\": 1, \"y\": 2}, {\"x\": 1})\nfunc Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Subset(t, list, subset, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Subsetf asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\trequire.Subsetf(t, [1, 2, 3], [1, 2], \"error message %s\", \"formatted\")\n//\trequire.Subsetf(t, {\"x\": 1, \"y\": 2}, {\"x\": 1}, \"error message %s\", \"formatted\")\nfunc Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Subsetf(t, list, subset, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// True asserts that the specified value is true.\n//\n//\trequire.True(t, myBool)\nfunc True(t TestingT, value bool, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.True(t, value, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Truef asserts that the specified value is true.\n//\n//\trequire.Truef(t, myBool, \"error message %s\", \"formatted\")\nfunc Truef(t TestingT, value bool, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Truef(t, value, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// WithinDuration asserts that the two times are within duration delta of each other.\n//\n//\trequire.WithinDuration(t, time.Now(), time.Now(), 10*time.Second)\nfunc WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.WithinDuration(t, expected, actual, delta, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// WithinDurationf asserts that the two times are within duration delta of each other.\n//\n//\trequire.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, \"error message %s\", \"formatted\")\nfunc WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.WithinDurationf(t, expected, actual, delta, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// WithinRange asserts that a time is within a time range (inclusive).\n//\n//\trequire.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second))\nfunc WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.WithinRange(t, actual, start, end, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// WithinRangef asserts that a time is within a time range (inclusive).\n//\n//\trequire.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), \"error message %s\", \"formatted\")\nfunc WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.WithinRangef(t, actual, start, end, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// YAMLEq asserts that two YAML strings are equivalent.\nfunc YAMLEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.YAMLEq(t, expected, actual, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// YAMLEqf asserts that two YAML strings are equivalent.\nfunc YAMLEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.YAMLEqf(t, expected, actual, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Zero asserts that i is the zero value for its type.\nfunc Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Zero(t, i, msgAndArgs...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n\n// Zerof asserts that i is the zero value for its type.\nfunc Zerof(t TestingT, i interface{}, msg string, args ...interface{}) {\n\tif h, ok := t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tif assert.Zerof(t, i, msg, args...) {\n\t\treturn\n\t}\n\tt.FailNow()\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/require/require.go.tmpl",
    "content": "{{ replace .Comment \"assert.\" \"require.\"}}\nfunc {{.DocInfo.Name}}(t TestingT, {{.Params}}) {\n\tif h, ok := t.(tHelper); ok { h.Helper() }\n\tif assert.{{.DocInfo.Name}}(t, {{.ForwardedParams}}) { return }\n\tt.FailNow()\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/require/require_forward.go",
    "content": "// Code generated with github.com/stretchr/testify/_codegen; DO NOT EDIT.\n\npackage require\n\nimport (\n\tassert \"github.com/stretchr/testify/assert\"\n\thttp \"net/http\"\n\turl \"net/url\"\n\ttime \"time\"\n)\n\n// Condition uses a Comparison to assert a complex condition.\nfunc (a *Assertions) Condition(comp assert.Comparison, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tCondition(a.t, comp, msgAndArgs...)\n}\n\n// Conditionf uses a Comparison to assert a complex condition.\nfunc (a *Assertions) Conditionf(comp assert.Comparison, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tConditionf(a.t, comp, msg, args...)\n}\n\n// Contains asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\ta.Contains(\"Hello World\", \"World\")\n//\ta.Contains([\"Hello\", \"World\"], \"World\")\n//\ta.Contains({\"Hello\": \"World\"}, \"Hello\")\nfunc (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tContains(a.t, s, contains, msgAndArgs...)\n}\n\n// Containsf asserts that the specified string, list(array, slice...) or map contains the\n// specified substring or element.\n//\n//\ta.Containsf(\"Hello World\", \"World\", \"error message %s\", \"formatted\")\n//\ta.Containsf([\"Hello\", \"World\"], \"World\", \"error message %s\", \"formatted\")\n//\ta.Containsf({\"Hello\": \"World\"}, \"Hello\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Containsf(s interface{}, contains interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tContainsf(a.t, s, contains, msg, args...)\n}\n\n// DirExists checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc (a *Assertions) DirExists(path string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tDirExists(a.t, path, msgAndArgs...)\n}\n\n// DirExistsf checks whether a directory exists in the given path. It also fails\n// if the path is a file rather a directory or there is an error checking whether it exists.\nfunc (a *Assertions) DirExistsf(path string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tDirExistsf(a.t, path, msg, args...)\n}\n\n// ElementsMatch asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// a.ElementsMatch([1, 3, 2, 3], [1, 3, 3, 2])\nfunc (a *Assertions) ElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tElementsMatch(a.t, listA, listB, msgAndArgs...)\n}\n\n// ElementsMatchf asserts that the specified listA(array, slice...) is equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should match.\n//\n// a.ElementsMatchf([1, 3, 2, 3], [1, 3, 3, 2], \"error message %s\", \"formatted\")\nfunc (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tElementsMatchf(a.t, listA, listB, msg, args...)\n}\n\n// Empty asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\ta.Empty(obj)\nfunc (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEmpty(a.t, object, msgAndArgs...)\n}\n\n// Emptyf asserts that the specified object is empty.  I.e. nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\ta.Emptyf(obj, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEmptyf(a.t, object, msg, args...)\n}\n\n// Equal asserts that two objects are equal.\n//\n//\ta.Equal(123, 123)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqual(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualError asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.EqualError(err,  expectedErrorString)\nfunc (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqualError(a.t, theError, errString, msgAndArgs...)\n}\n\n// EqualErrorf asserts that a function returned an error (i.e. not `nil`)\n// and that it is equal to the provided error.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.EqualErrorf(err,  expectedErrorString, \"error message %s\", \"formatted\")\nfunc (a *Assertions) EqualErrorf(theError error, errString string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqualErrorf(a.t, theError, errString, msg, args...)\n}\n\n// EqualExportedValues asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t a.EqualExportedValues(S{1, 2}, S{1, 3}) => true\n//\t a.EqualExportedValues(S{1, 2}, S{2, 3}) => false\nfunc (a *Assertions) EqualExportedValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqualExportedValues(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualExportedValuesf asserts that the types of two objects are equal and their public\n// fields are also equal. This is useful for comparing structs that have private fields\n// that could potentially differ.\n//\n//\t type S struct {\n//\t\tExported     \tint\n//\t\tnotExported   \tint\n//\t }\n//\t a.EqualExportedValuesf(S{1, 2}, S{1, 3}, \"error message %s\", \"formatted\") => true\n//\t a.EqualExportedValuesf(S{1, 2}, S{2, 3}, \"error message %s\", \"formatted\") => false\nfunc (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqualExportedValuesf(a.t, expected, actual, msg, args...)\n}\n\n// EqualValues asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\ta.EqualValues(uint32(123), int32(123))\nfunc (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqualValues(a.t, expected, actual, msgAndArgs...)\n}\n\n// EqualValuesf asserts that two objects are equal or convertible to the larger\n// type and equal.\n//\n//\ta.EqualValuesf(uint32(123), int32(123), \"error message %s\", \"formatted\")\nfunc (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqualValuesf(a.t, expected, actual, msg, args...)\n}\n\n// Equalf asserts that two objects are equal.\n//\n//\ta.Equalf(123, 123, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses). Function equality\n// cannot be determined and will always fail.\nfunc (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEqualf(a.t, expected, actual, msg, args...)\n}\n\n// Error asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.Error(err) {\n//\t\t   assert.Equal(t, expectedError, err)\n//\t  }\nfunc (a *Assertions) Error(err error, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tError(a.t, err, msgAndArgs...)\n}\n\n// ErrorAs asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc (a *Assertions) ErrorAs(err error, target interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tErrorAs(a.t, err, target, msgAndArgs...)\n}\n\n// ErrorAsf asserts that at least one of the errors in err's chain matches target, and if so, sets target to that error value.\n// This is a wrapper for errors.As.\nfunc (a *Assertions) ErrorAsf(err error, target interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tErrorAsf(a.t, err, target, msg, args...)\n}\n\n// ErrorContains asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.ErrorContains(err,  expectedErrorSubString)\nfunc (a *Assertions) ErrorContains(theError error, contains string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tErrorContains(a.t, theError, contains, msgAndArgs...)\n}\n\n// ErrorContainsf asserts that a function returned an error (i.e. not `nil`)\n// and that the error contains the specified substring.\n//\n//\tactualObj, err := SomeFunction()\n//\ta.ErrorContainsf(err,  expectedErrorSubString, \"error message %s\", \"formatted\")\nfunc (a *Assertions) ErrorContainsf(theError error, contains string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tErrorContainsf(a.t, theError, contains, msg, args...)\n}\n\n// ErrorIs asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) ErrorIs(err error, target error, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tErrorIs(a.t, err, target, msgAndArgs...)\n}\n\n// ErrorIsf asserts that at least one of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) ErrorIsf(err error, target error, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tErrorIsf(a.t, err, target, msg, args...)\n}\n\n// Errorf asserts that a function returned an error (i.e. not `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.Errorf(err, \"error message %s\", \"formatted\") {\n//\t\t   assert.Equal(t, expectedErrorf, err)\n//\t  }\nfunc (a *Assertions) Errorf(err error, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tErrorf(a.t, err, msg, args...)\n}\n\n// Eventually asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\ta.Eventually(func() bool { return true; }, time.Second, 10*time.Millisecond)\nfunc (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEventually(a.t, condition, waitFor, tick, msgAndArgs...)\n}\n\n// EventuallyWithT asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\ta.EventuallyWithT(func(c *assert.CollectT) {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\tassert.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEventuallyWithT(a.t, condition, waitFor, tick, msgAndArgs...)\n}\n\n// EventuallyWithTf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick. In contrast to Eventually,\n// it supplies a CollectT to the condition function, so that the condition\n// function can use the CollectT to call other assertions.\n// The condition is considered \"met\" if no errors are raised in a tick.\n// The supplied CollectT collects all errors from one tick (if there are any).\n// If the condition is not met before waitFor, the collected errors of\n// the last tick are copied to t.\n//\n//\texternalValue := false\n//\tgo func() {\n//\t\ttime.Sleep(8*time.Second)\n//\t\texternalValue = true\n//\t}()\n//\ta.EventuallyWithTf(func(c *assert.CollectT, \"error message %s\", \"formatted\") {\n//\t\t// add assertions as needed; any assertion failure will fail the current tick\n//\t\tassert.True(c, externalValue, \"expected 'externalValue' to be true\")\n//\t}, 10*time.Second, 1*time.Second, \"external state has not changed to 'true'; still false\")\nfunc (a *Assertions) EventuallyWithTf(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEventuallyWithTf(a.t, condition, waitFor, tick, msg, args...)\n}\n\n// Eventuallyf asserts that given condition will be met in waitFor time,\n// periodically checking target function each tick.\n//\n//\ta.Eventuallyf(func() bool { return true; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Eventuallyf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tEventuallyf(a.t, condition, waitFor, tick, msg, args...)\n}\n\n// Exactly asserts that two objects are equal in value and type.\n//\n//\ta.Exactly(int32(123), int64(123))\nfunc (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tExactly(a.t, expected, actual, msgAndArgs...)\n}\n\n// Exactlyf asserts that two objects are equal in value and type.\n//\n//\ta.Exactlyf(int32(123), int64(123), \"error message %s\", \"formatted\")\nfunc (a *Assertions) Exactlyf(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tExactlyf(a.t, expected, actual, msg, args...)\n}\n\n// Fail reports a failure through\nfunc (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFail(a.t, failureMessage, msgAndArgs...)\n}\n\n// FailNow fails test\nfunc (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFailNow(a.t, failureMessage, msgAndArgs...)\n}\n\n// FailNowf fails test\nfunc (a *Assertions) FailNowf(failureMessage string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFailNowf(a.t, failureMessage, msg, args...)\n}\n\n// Failf reports a failure through\nfunc (a *Assertions) Failf(failureMessage string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFailf(a.t, failureMessage, msg, args...)\n}\n\n// False asserts that the specified value is false.\n//\n//\ta.False(myBool)\nfunc (a *Assertions) False(value bool, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFalse(a.t, value, msgAndArgs...)\n}\n\n// Falsef asserts that the specified value is false.\n//\n//\ta.Falsef(myBool, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Falsef(value bool, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFalsef(a.t, value, msg, args...)\n}\n\n// FileExists checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc (a *Assertions) FileExists(path string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFileExists(a.t, path, msgAndArgs...)\n}\n\n// FileExistsf checks whether a file exists in the given path. It also fails if\n// the path points to a directory or there is an error when trying to check the file.\nfunc (a *Assertions) FileExistsf(path string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tFileExistsf(a.t, path, msg, args...)\n}\n\n// Greater asserts that the first element is greater than the second\n//\n//\ta.Greater(2, 1)\n//\ta.Greater(float64(2), float64(1))\n//\ta.Greater(\"b\", \"a\")\nfunc (a *Assertions) Greater(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tGreater(a.t, e1, e2, msgAndArgs...)\n}\n\n// GreaterOrEqual asserts that the first element is greater than or equal to the second\n//\n//\ta.GreaterOrEqual(2, 1)\n//\ta.GreaterOrEqual(2, 2)\n//\ta.GreaterOrEqual(\"b\", \"a\")\n//\ta.GreaterOrEqual(\"b\", \"b\")\nfunc (a *Assertions) GreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tGreaterOrEqual(a.t, e1, e2, msgAndArgs...)\n}\n\n// GreaterOrEqualf asserts that the first element is greater than or equal to the second\n//\n//\ta.GreaterOrEqualf(2, 1, \"error message %s\", \"formatted\")\n//\ta.GreaterOrEqualf(2, 2, \"error message %s\", \"formatted\")\n//\ta.GreaterOrEqualf(\"b\", \"a\", \"error message %s\", \"formatted\")\n//\ta.GreaterOrEqualf(\"b\", \"b\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) GreaterOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tGreaterOrEqualf(a.t, e1, e2, msg, args...)\n}\n\n// Greaterf asserts that the first element is greater than the second\n//\n//\ta.Greaterf(2, 1, \"error message %s\", \"formatted\")\n//\ta.Greaterf(float64(2), float64(1), \"error message %s\", \"formatted\")\n//\ta.Greaterf(\"b\", \"a\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Greaterf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tGreaterf(a.t, e1, e2, msg, args...)\n}\n\n// HTTPBodyContains asserts that a specified handler returns a\n// body that contains a string.\n//\n//\ta.HTTPBodyContains(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPBodyContains(a.t, handler, method, url, values, str, msgAndArgs...)\n}\n\n// HTTPBodyContainsf asserts that a specified handler returns a\n// body that contains a string.\n//\n//\ta.HTTPBodyContainsf(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPBodyContainsf(a.t, handler, method, url, values, str, msg, args...)\n}\n\n// HTTPBodyNotContains asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\ta.HTTPBodyNotContains(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPBodyNotContains(a.t, handler, method, url, values, str, msgAndArgs...)\n}\n\n// HTTPBodyNotContainsf asserts that a specified handler returns a\n// body that does not contain a string.\n//\n//\ta.HTTPBodyNotContainsf(myHandler, \"GET\", \"www.google.com\", nil, \"I'm Feeling Lucky\", \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPBodyNotContainsf(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPBodyNotContainsf(a.t, handler, method, url, values, str, msg, args...)\n}\n\n// HTTPError asserts that a specified handler returns an error status code.\n//\n//\ta.HTTPError(myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPError(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPErrorf asserts that a specified handler returns an error status code.\n//\n//\ta.HTTPErrorf(myHandler, \"POST\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPErrorf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPErrorf(a.t, handler, method, url, values, msg, args...)\n}\n\n// HTTPRedirect asserts that a specified handler returns a redirect status code.\n//\n//\ta.HTTPRedirect(myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPRedirect(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPRedirectf asserts that a specified handler returns a redirect status code.\n//\n//\ta.HTTPRedirectf(myHandler, \"GET\", \"/a/b/c\", url.Values{\"a\": []string{\"b\", \"c\"}}\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPRedirectf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPRedirectf(a.t, handler, method, url, values, msg, args...)\n}\n\n// HTTPStatusCode asserts that a specified handler returns a specified status code.\n//\n//\ta.HTTPStatusCode(myHandler, \"GET\", \"/notImplemented\", nil, 501)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPStatusCode(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPStatusCode(a.t, handler, method, url, values, statuscode, msgAndArgs...)\n}\n\n// HTTPStatusCodef asserts that a specified handler returns a specified status code.\n//\n//\ta.HTTPStatusCodef(myHandler, \"GET\", \"/notImplemented\", nil, 501, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPStatusCodef(handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPStatusCodef(a.t, handler, method, url, values, statuscode, msg, args...)\n}\n\n// HTTPSuccess asserts that a specified handler returns a success status code.\n//\n//\ta.HTTPSuccess(myHandler, \"POST\", \"http://www.google.com\", nil)\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPSuccess(a.t, handler, method, url, values, msgAndArgs...)\n}\n\n// HTTPSuccessf asserts that a specified handler returns a success status code.\n//\n//\ta.HTTPSuccessf(myHandler, \"POST\", \"http://www.google.com\", nil, \"error message %s\", \"formatted\")\n//\n// Returns whether the assertion was successful (true) or not (false).\nfunc (a *Assertions) HTTPSuccessf(handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tHTTPSuccessf(a.t, handler, method, url, values, msg, args...)\n}\n\n// Implements asserts that an object is implemented by the specified interface.\n//\n//\ta.Implements((*MyInterface)(nil), new(MyObject))\nfunc (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tImplements(a.t, interfaceObject, object, msgAndArgs...)\n}\n\n// Implementsf asserts that an object is implemented by the specified interface.\n//\n//\ta.Implementsf((*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc (a *Assertions) Implementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tImplementsf(a.t, interfaceObject, object, msg, args...)\n}\n\n// InDelta asserts that the two numerals are within delta of each other.\n//\n//\ta.InDelta(math.Pi, 22/7.0, 0.01)\nfunc (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInDelta(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaMapValues is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc (a *Assertions) InDeltaMapValues(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInDeltaMapValues(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaMapValuesf is the same as InDelta, but it compares all values between two maps. Both maps must have exactly the same keys.\nfunc (a *Assertions) InDeltaMapValuesf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInDeltaMapValuesf(a.t, expected, actual, delta, msg, args...)\n}\n\n// InDeltaSlice is the same as InDelta, except it compares two slices.\nfunc (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInDeltaSlice(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// InDeltaSlicef is the same as InDelta, except it compares two slices.\nfunc (a *Assertions) InDeltaSlicef(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInDeltaSlicef(a.t, expected, actual, delta, msg, args...)\n}\n\n// InDeltaf asserts that the two numerals are within delta of each other.\n//\n//\ta.InDeltaf(math.Pi, 22/7.0, 0.01, \"error message %s\", \"formatted\")\nfunc (a *Assertions) InDeltaf(expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInDeltaf(a.t, expected, actual, delta, msg, args...)\n}\n\n// InEpsilon asserts that expected and actual have a relative error less than epsilon\nfunc (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInEpsilon(a.t, expected, actual, epsilon, msgAndArgs...)\n}\n\n// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices.\nfunc (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInEpsilonSlice(a.t, expected, actual, epsilon, msgAndArgs...)\n}\n\n// InEpsilonSlicef is the same as InEpsilon, except it compares each value from two slices.\nfunc (a *Assertions) InEpsilonSlicef(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInEpsilonSlicef(a.t, expected, actual, epsilon, msg, args...)\n}\n\n// InEpsilonf asserts that expected and actual have a relative error less than epsilon\nfunc (a *Assertions) InEpsilonf(expected interface{}, actual interface{}, epsilon float64, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tInEpsilonf(a.t, expected, actual, epsilon, msg, args...)\n}\n\n// IsDecreasing asserts that the collection is decreasing\n//\n//\ta.IsDecreasing([]int{2, 1, 0})\n//\ta.IsDecreasing([]float{2, 1})\n//\ta.IsDecreasing([]string{\"b\", \"a\"})\nfunc (a *Assertions) IsDecreasing(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsDecreasing(a.t, object, msgAndArgs...)\n}\n\n// IsDecreasingf asserts that the collection is decreasing\n//\n//\ta.IsDecreasingf([]int{2, 1, 0}, \"error message %s\", \"formatted\")\n//\ta.IsDecreasingf([]float{2, 1}, \"error message %s\", \"formatted\")\n//\ta.IsDecreasingf([]string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsDecreasingf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsDecreasingf(a.t, object, msg, args...)\n}\n\n// IsIncreasing asserts that the collection is increasing\n//\n//\ta.IsIncreasing([]int{1, 2, 3})\n//\ta.IsIncreasing([]float{1, 2})\n//\ta.IsIncreasing([]string{\"a\", \"b\"})\nfunc (a *Assertions) IsIncreasing(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsIncreasing(a.t, object, msgAndArgs...)\n}\n\n// IsIncreasingf asserts that the collection is increasing\n//\n//\ta.IsIncreasingf([]int{1, 2, 3}, \"error message %s\", \"formatted\")\n//\ta.IsIncreasingf([]float{1, 2}, \"error message %s\", \"formatted\")\n//\ta.IsIncreasingf([]string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsIncreasingf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsIncreasingf(a.t, object, msg, args...)\n}\n\n// IsNonDecreasing asserts that the collection is not decreasing\n//\n//\ta.IsNonDecreasing([]int{1, 1, 2})\n//\ta.IsNonDecreasing([]float{1, 2})\n//\ta.IsNonDecreasing([]string{\"a\", \"b\"})\nfunc (a *Assertions) IsNonDecreasing(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsNonDecreasing(a.t, object, msgAndArgs...)\n}\n\n// IsNonDecreasingf asserts that the collection is not decreasing\n//\n//\ta.IsNonDecreasingf([]int{1, 1, 2}, \"error message %s\", \"formatted\")\n//\ta.IsNonDecreasingf([]float{1, 2}, \"error message %s\", \"formatted\")\n//\ta.IsNonDecreasingf([]string{\"a\", \"b\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsNonDecreasingf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsNonDecreasingf(a.t, object, msg, args...)\n}\n\n// IsNonIncreasing asserts that the collection is not increasing\n//\n//\ta.IsNonIncreasing([]int{2, 1, 1})\n//\ta.IsNonIncreasing([]float{2, 1})\n//\ta.IsNonIncreasing([]string{\"b\", \"a\"})\nfunc (a *Assertions) IsNonIncreasing(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsNonIncreasing(a.t, object, msgAndArgs...)\n}\n\n// IsNonIncreasingf asserts that the collection is not increasing\n//\n//\ta.IsNonIncreasingf([]int{2, 1, 1}, \"error message %s\", \"formatted\")\n//\ta.IsNonIncreasingf([]float{2, 1}, \"error message %s\", \"formatted\")\n//\ta.IsNonIncreasingf([]string{\"b\", \"a\"}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsNonIncreasingf(a.t, object, msg, args...)\n}\n\n// IsType asserts that the specified objects are of the same type.\nfunc (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsType(a.t, expectedType, object, msgAndArgs...)\n}\n\n// IsTypef asserts that the specified objects are of the same type.\nfunc (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tIsTypef(a.t, expectedType, object, msg, args...)\n}\n\n// JSONEq asserts that two JSON strings are equivalent.\n//\n//\ta.JSONEq(`{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`)\nfunc (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tJSONEq(a.t, expected, actual, msgAndArgs...)\n}\n\n// JSONEqf asserts that two JSON strings are equivalent.\n//\n//\ta.JSONEqf(`{\"hello\": \"world\", \"foo\": \"bar\"}`, `{\"foo\": \"bar\", \"hello\": \"world\"}`, \"error message %s\", \"formatted\")\nfunc (a *Assertions) JSONEqf(expected string, actual string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tJSONEqf(a.t, expected, actual, msg, args...)\n}\n\n// Len asserts that the specified object has specific length.\n// Len also fails if the object has a type that len() not accept.\n//\n//\ta.Len(mySlice, 3)\nfunc (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tLen(a.t, object, length, msgAndArgs...)\n}\n\n// Lenf asserts that the specified object has specific length.\n// Lenf also fails if the object has a type that len() not accept.\n//\n//\ta.Lenf(mySlice, 3, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Lenf(object interface{}, length int, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tLenf(a.t, object, length, msg, args...)\n}\n\n// Less asserts that the first element is less than the second\n//\n//\ta.Less(1, 2)\n//\ta.Less(float64(1), float64(2))\n//\ta.Less(\"a\", \"b\")\nfunc (a *Assertions) Less(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tLess(a.t, e1, e2, msgAndArgs...)\n}\n\n// LessOrEqual asserts that the first element is less than or equal to the second\n//\n//\ta.LessOrEqual(1, 2)\n//\ta.LessOrEqual(2, 2)\n//\ta.LessOrEqual(\"a\", \"b\")\n//\ta.LessOrEqual(\"b\", \"b\")\nfunc (a *Assertions) LessOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tLessOrEqual(a.t, e1, e2, msgAndArgs...)\n}\n\n// LessOrEqualf asserts that the first element is less than or equal to the second\n//\n//\ta.LessOrEqualf(1, 2, \"error message %s\", \"formatted\")\n//\ta.LessOrEqualf(2, 2, \"error message %s\", \"formatted\")\n//\ta.LessOrEqualf(\"a\", \"b\", \"error message %s\", \"formatted\")\n//\ta.LessOrEqualf(\"b\", \"b\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) LessOrEqualf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tLessOrEqualf(a.t, e1, e2, msg, args...)\n}\n\n// Lessf asserts that the first element is less than the second\n//\n//\ta.Lessf(1, 2, \"error message %s\", \"formatted\")\n//\ta.Lessf(float64(1), float64(2), \"error message %s\", \"formatted\")\n//\ta.Lessf(\"a\", \"b\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Lessf(e1 interface{}, e2 interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tLessf(a.t, e1, e2, msg, args...)\n}\n\n// Negative asserts that the specified element is negative\n//\n//\ta.Negative(-1)\n//\ta.Negative(-1.23)\nfunc (a *Assertions) Negative(e interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNegative(a.t, e, msgAndArgs...)\n}\n\n// Negativef asserts that the specified element is negative\n//\n//\ta.Negativef(-1, \"error message %s\", \"formatted\")\n//\ta.Negativef(-1.23, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Negativef(e interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNegativef(a.t, e, msg, args...)\n}\n\n// Never asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\ta.Never(func() bool { return false; }, time.Second, 10*time.Millisecond)\nfunc (a *Assertions) Never(condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNever(a.t, condition, waitFor, tick, msgAndArgs...)\n}\n\n// Neverf asserts that the given condition doesn't satisfy in waitFor time,\n// periodically checking the target function each tick.\n//\n//\ta.Neverf(func() bool { return false; }, time.Second, 10*time.Millisecond, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Neverf(condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNeverf(a.t, condition, waitFor, tick, msg, args...)\n}\n\n// Nil asserts that the specified object is nil.\n//\n//\ta.Nil(err)\nfunc (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNil(a.t, object, msgAndArgs...)\n}\n\n// Nilf asserts that the specified object is nil.\n//\n//\ta.Nilf(err, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Nilf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNilf(a.t, object, msg, args...)\n}\n\n// NoDirExists checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc (a *Assertions) NoDirExists(path string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNoDirExists(a.t, path, msgAndArgs...)\n}\n\n// NoDirExistsf checks whether a directory does not exist in the given path.\n// It fails if the path points to an existing _directory_ only.\nfunc (a *Assertions) NoDirExistsf(path string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNoDirExistsf(a.t, path, msg, args...)\n}\n\n// NoError asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.NoError(err) {\n//\t\t   assert.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc (a *Assertions) NoError(err error, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNoError(a.t, err, msgAndArgs...)\n}\n\n// NoErrorf asserts that a function returned no error (i.e. `nil`).\n//\n//\t  actualObj, err := SomeFunction()\n//\t  if a.NoErrorf(err, \"error message %s\", \"formatted\") {\n//\t\t   assert.Equal(t, expectedObj, actualObj)\n//\t  }\nfunc (a *Assertions) NoErrorf(err error, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNoErrorf(a.t, err, msg, args...)\n}\n\n// NoFileExists checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc (a *Assertions) NoFileExists(path string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNoFileExists(a.t, path, msgAndArgs...)\n}\n\n// NoFileExistsf checks whether a file does not exist in a given path. It fails\n// if the path points to an existing _file_ only.\nfunc (a *Assertions) NoFileExistsf(path string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNoFileExistsf(a.t, path, msg, args...)\n}\n\n// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\ta.NotContains(\"Hello World\", \"Earth\")\n//\ta.NotContains([\"Hello\", \"World\"], \"Earth\")\n//\ta.NotContains({\"Hello\": \"World\"}, \"Earth\")\nfunc (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotContains(a.t, s, contains, msgAndArgs...)\n}\n\n// NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the\n// specified substring or element.\n//\n//\ta.NotContainsf(\"Hello World\", \"Earth\", \"error message %s\", \"formatted\")\n//\ta.NotContainsf([\"Hello\", \"World\"], \"Earth\", \"error message %s\", \"formatted\")\n//\ta.NotContainsf({\"Hello\": \"World\"}, \"Earth\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotContainsf(a.t, s, contains, msg, args...)\n}\n\n// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false\n//\n// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true\n//\n// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true\nfunc (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotElementsMatch(a.t, listA, listB, msgAndArgs...)\n}\n\n// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified\n// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements,\n// the number of appearances of each of them in both lists should not match.\n// This is an inverse of ElementsMatch.\n//\n// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], \"error message %s\", \"formatted\") -> false\n//\n// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], \"error message %s\", \"formatted\") -> true\n//\n// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], \"error message %s\", \"formatted\") -> true\nfunc (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotElementsMatchf(a.t, listA, listB, msg, args...)\n}\n\n// NotEmpty asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif a.NotEmpty(obj) {\n//\t  assert.Equal(t, \"two\", obj[1])\n//\t}\nfunc (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotEmpty(a.t, object, msgAndArgs...)\n}\n\n// NotEmptyf asserts that the specified object is NOT empty.  I.e. not nil, \"\", false, 0 or either\n// a slice or a channel with len == 0.\n//\n//\tif a.NotEmptyf(obj, \"error message %s\", \"formatted\") {\n//\t  assert.Equal(t, \"two\", obj[1])\n//\t}\nfunc (a *Assertions) NotEmptyf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotEmptyf(a.t, object, msg, args...)\n}\n\n// NotEqual asserts that the specified values are NOT equal.\n//\n//\ta.NotEqual(obj1, obj2)\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotEqual(a.t, expected, actual, msgAndArgs...)\n}\n\n// NotEqualValues asserts that two objects are not equal even when converted to the same type\n//\n//\ta.NotEqualValues(obj1, obj2)\nfunc (a *Assertions) NotEqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotEqualValues(a.t, expected, actual, msgAndArgs...)\n}\n\n// NotEqualValuesf asserts that two objects are not equal even when converted to the same type\n//\n//\ta.NotEqualValuesf(obj1, obj2, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotEqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotEqualValuesf(a.t, expected, actual, msg, args...)\n}\n\n// NotEqualf asserts that the specified values are NOT equal.\n//\n//\ta.NotEqualf(obj1, obj2, \"error message %s\", \"formatted\")\n//\n// Pointer variable equality is determined based on the equality of the\n// referenced values (as opposed to the memory addresses).\nfunc (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotEqualf(a.t, expected, actual, msg, args...)\n}\n\n// NotErrorAs asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotErrorAs(a.t, err, target, msgAndArgs...)\n}\n\n// NotErrorAsf asserts that none of the errors in err's chain matches target,\n// but if so, sets target to that error value.\nfunc (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotErrorAsf(a.t, err, target, msg, args...)\n}\n\n// NotErrorIs asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotErrorIs(a.t, err, target, msgAndArgs...)\n}\n\n// NotErrorIsf asserts that none of the errors in err's chain matches target.\n// This is a wrapper for errors.Is.\nfunc (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotErrorIsf(a.t, err, target, msg, args...)\n}\n\n// NotImplements asserts that an object does not implement the specified interface.\n//\n//\ta.NotImplements((*MyInterface)(nil), new(MyObject))\nfunc (a *Assertions) NotImplements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotImplements(a.t, interfaceObject, object, msgAndArgs...)\n}\n\n// NotImplementsf asserts that an object does not implement the specified interface.\n//\n//\ta.NotImplementsf((*MyInterface)(nil), new(MyObject), \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotImplementsf(interfaceObject interface{}, object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotImplementsf(a.t, interfaceObject, object, msg, args...)\n}\n\n// NotNil asserts that the specified object is not nil.\n//\n//\ta.NotNil(err)\nfunc (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotNil(a.t, object, msgAndArgs...)\n}\n\n// NotNilf asserts that the specified object is not nil.\n//\n//\ta.NotNilf(err, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotNilf(object interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotNilf(a.t, object, msg, args...)\n}\n\n// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\ta.NotPanics(func(){ RemainCalm() })\nfunc (a *Assertions) NotPanics(f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotPanics(a.t, f, msgAndArgs...)\n}\n\n// NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic.\n//\n//\ta.NotPanicsf(func(){ RemainCalm() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotPanicsf(f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotPanicsf(a.t, f, msg, args...)\n}\n\n// NotRegexp asserts that a specified regexp does not match a string.\n//\n//\ta.NotRegexp(regexp.MustCompile(\"starts\"), \"it's starting\")\n//\ta.NotRegexp(\"^start\", \"it's not starting\")\nfunc (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotRegexp(a.t, rx, str, msgAndArgs...)\n}\n\n// NotRegexpf asserts that a specified regexp does not match a string.\n//\n//\ta.NotRegexpf(regexp.MustCompile(\"starts\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\ta.NotRegexpf(\"^start\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotRegexpf(rx interface{}, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotRegexpf(a.t, rx, str, msg, args...)\n}\n\n// NotSame asserts that two pointers do not reference the same object.\n//\n//\ta.NotSame(ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) NotSame(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotSame(a.t, expected, actual, msgAndArgs...)\n}\n\n// NotSamef asserts that two pointers do not reference the same object.\n//\n//\ta.NotSamef(ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotSamef(a.t, expected, actual, msg, args...)\n}\n\n// NotSubset asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\ta.NotSubset([1, 3, 4], [1, 2])\n//\ta.NotSubset({\"x\": 1, \"y\": 2}, {\"z\": 3})\nfunc (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotSubset(a.t, list, subset, msgAndArgs...)\n}\n\n// NotSubsetf asserts that the specified list(array, slice...) or map does NOT\n// contain all elements given in the specified subset list(array, slice...) or\n// map.\n//\n//\ta.NotSubsetf([1, 3, 4], [1, 2], \"error message %s\", \"formatted\")\n//\ta.NotSubsetf({\"x\": 1, \"y\": 2}, {\"z\": 3}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotSubsetf(a.t, list, subset, msg, args...)\n}\n\n// NotZero asserts that i is not the zero value for its type.\nfunc (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotZero(a.t, i, msgAndArgs...)\n}\n\n// NotZerof asserts that i is not the zero value for its type.\nfunc (a *Assertions) NotZerof(i interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tNotZerof(a.t, i, msg, args...)\n}\n\n// Panics asserts that the code inside the specified PanicTestFunc panics.\n//\n//\ta.Panics(func(){ GoCrazy() })\nfunc (a *Assertions) Panics(f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPanics(a.t, f, msgAndArgs...)\n}\n\n// PanicsWithError asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\ta.PanicsWithError(\"crazy error\", func(){ GoCrazy() })\nfunc (a *Assertions) PanicsWithError(errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPanicsWithError(a.t, errString, f, msgAndArgs...)\n}\n\n// PanicsWithErrorf asserts that the code inside the specified PanicTestFunc\n// panics, and that the recovered panic value is an error that satisfies the\n// EqualError comparison.\n//\n//\ta.PanicsWithErrorf(\"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) PanicsWithErrorf(errString string, f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPanicsWithErrorf(a.t, errString, f, msg, args...)\n}\n\n// PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\ta.PanicsWithValue(\"crazy error\", func(){ GoCrazy() })\nfunc (a *Assertions) PanicsWithValue(expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPanicsWithValue(a.t, expected, f, msgAndArgs...)\n}\n\n// PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that\n// the recovered panic value equals the expected panic value.\n//\n//\ta.PanicsWithValuef(\"crazy error\", func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) PanicsWithValuef(expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPanicsWithValuef(a.t, expected, f, msg, args...)\n}\n\n// Panicsf asserts that the code inside the specified PanicTestFunc panics.\n//\n//\ta.Panicsf(func(){ GoCrazy() }, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Panicsf(f assert.PanicTestFunc, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPanicsf(a.t, f, msg, args...)\n}\n\n// Positive asserts that the specified element is positive\n//\n//\ta.Positive(1)\n//\ta.Positive(1.23)\nfunc (a *Assertions) Positive(e interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPositive(a.t, e, msgAndArgs...)\n}\n\n// Positivef asserts that the specified element is positive\n//\n//\ta.Positivef(1, \"error message %s\", \"formatted\")\n//\ta.Positivef(1.23, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Positivef(e interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tPositivef(a.t, e, msg, args...)\n}\n\n// Regexp asserts that a specified regexp matches a string.\n//\n//\ta.Regexp(regexp.MustCompile(\"start\"), \"it's starting\")\n//\ta.Regexp(\"start...$\", \"it's not starting\")\nfunc (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tRegexp(a.t, rx, str, msgAndArgs...)\n}\n\n// Regexpf asserts that a specified regexp matches a string.\n//\n//\ta.Regexpf(regexp.MustCompile(\"start\"), \"it's starting\", \"error message %s\", \"formatted\")\n//\ta.Regexpf(\"start...$\", \"it's not starting\", \"error message %s\", \"formatted\")\nfunc (a *Assertions) Regexpf(rx interface{}, str interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tRegexpf(a.t, rx, str, msg, args...)\n}\n\n// Same asserts that two pointers reference the same object.\n//\n//\ta.Same(ptr1, ptr2)\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) Same(expected interface{}, actual interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tSame(a.t, expected, actual, msgAndArgs...)\n}\n\n// Samef asserts that two pointers reference the same object.\n//\n//\ta.Samef(ptr1, ptr2, \"error message %s\", \"formatted\")\n//\n// Both arguments must be pointer variables. Pointer variable sameness is\n// determined based on the equality of both type and value.\nfunc (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tSamef(a.t, expected, actual, msg, args...)\n}\n\n// Subset asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\ta.Subset([1, 2, 3], [1, 2])\n//\ta.Subset({\"x\": 1, \"y\": 2}, {\"x\": 1})\nfunc (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tSubset(a.t, list, subset, msgAndArgs...)\n}\n\n// Subsetf asserts that the specified list(array, slice...) or map contains all\n// elements given in the specified subset list(array, slice...) or map.\n//\n//\ta.Subsetf([1, 2, 3], [1, 2], \"error message %s\", \"formatted\")\n//\ta.Subsetf({\"x\": 1, \"y\": 2}, {\"x\": 1}, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tSubsetf(a.t, list, subset, msg, args...)\n}\n\n// True asserts that the specified value is true.\n//\n//\ta.True(myBool)\nfunc (a *Assertions) True(value bool, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tTrue(a.t, value, msgAndArgs...)\n}\n\n// Truef asserts that the specified value is true.\n//\n//\ta.Truef(myBool, \"error message %s\", \"formatted\")\nfunc (a *Assertions) Truef(value bool, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tTruef(a.t, value, msg, args...)\n}\n\n// WithinDuration asserts that the two times are within duration delta of each other.\n//\n//\ta.WithinDuration(time.Now(), time.Now(), 10*time.Second)\nfunc (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tWithinDuration(a.t, expected, actual, delta, msgAndArgs...)\n}\n\n// WithinDurationf asserts that the two times are within duration delta of each other.\n//\n//\ta.WithinDurationf(time.Now(), time.Now(), 10*time.Second, \"error message %s\", \"formatted\")\nfunc (a *Assertions) WithinDurationf(expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tWithinDurationf(a.t, expected, actual, delta, msg, args...)\n}\n\n// WithinRange asserts that a time is within a time range (inclusive).\n//\n//\ta.WithinRange(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second))\nfunc (a *Assertions) WithinRange(actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tWithinRange(a.t, actual, start, end, msgAndArgs...)\n}\n\n// WithinRangef asserts that a time is within a time range (inclusive).\n//\n//\ta.WithinRangef(time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), \"error message %s\", \"formatted\")\nfunc (a *Assertions) WithinRangef(actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tWithinRangef(a.t, actual, start, end, msg, args...)\n}\n\n// YAMLEq asserts that two YAML strings are equivalent.\nfunc (a *Assertions) YAMLEq(expected string, actual string, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tYAMLEq(a.t, expected, actual, msgAndArgs...)\n}\n\n// YAMLEqf asserts that two YAML strings are equivalent.\nfunc (a *Assertions) YAMLEqf(expected string, actual string, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tYAMLEqf(a.t, expected, actual, msg, args...)\n}\n\n// Zero asserts that i is the zero value for its type.\nfunc (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tZero(a.t, i, msgAndArgs...)\n}\n\n// Zerof asserts that i is the zero value for its type.\nfunc (a *Assertions) Zerof(i interface{}, msg string, args ...interface{}) {\n\tif h, ok := a.t.(tHelper); ok {\n\t\th.Helper()\n\t}\n\tZerof(a.t, i, msg, args...)\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/require/require_forward.go.tmpl",
    "content": "{{.CommentWithoutT \"a\"}}\nfunc (a *Assertions) {{.DocInfo.Name}}({{.Params}}) {\n\tif h, ok := a.t.(tHelper); ok { h.Helper() }\n\t{{.DocInfo.Name}}(a.t, {{.ForwardedParams}})\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/require/requirements.go",
    "content": "package require\n\n// TestingT is an interface wrapper around *testing.T\ntype TestingT interface {\n\tErrorf(format string, args ...interface{})\n\tFailNow()\n}\n\ntype tHelper = interface {\n\tHelper()\n}\n\n// ComparisonAssertionFunc is a common function prototype when comparing two values.  Can be useful\n// for table driven tests.\ntype ComparisonAssertionFunc func(TestingT, interface{}, interface{}, ...interface{})\n\n// ValueAssertionFunc is a common function prototype when validating a single value.  Can be useful\n// for table driven tests.\ntype ValueAssertionFunc func(TestingT, interface{}, ...interface{})\n\n// BoolAssertionFunc is a common function prototype when validating a bool value.  Can be useful\n// for table driven tests.\ntype BoolAssertionFunc func(TestingT, bool, ...interface{})\n\n// ErrorAssertionFunc is a common function prototype when validating an error value.  Can be useful\n// for table driven tests.\ntype ErrorAssertionFunc func(TestingT, error, ...interface{})\n\n//go:generate sh -c \"cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=require -template=require.go.tmpl -include-format-funcs\"\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/suite/doc.go",
    "content": "// Package suite contains logic for creating testing suite structs\n// and running the methods on those structs as tests.  The most useful\n// piece of this package is that you can create setup/teardown methods\n// on your testing suites, which will run before/after the whole suite\n// or individual tests (depending on which interface(s) you\n// implement).\n//\n// The suite package does not support parallel tests. See [issue 934].\n//\n// A testing suite is usually built by first extending the built-in\n// suite functionality from suite.Suite in testify.  Alternatively,\n// you could reproduce that logic on your own if you wanted (you\n// just need to implement the TestingSuite interface from\n// suite/interfaces.go).\n//\n// After that, you can implement any of the interfaces in\n// suite/interfaces.go to add setup/teardown functionality to your\n// suite, and add any methods that start with \"Test\" to add tests.\n// Methods that do not match any suite interfaces and do not begin\n// with \"Test\" will not be run by testify, and can safely be used as\n// helper methods.\n//\n// Once you've built your testing suite, you need to run the suite\n// (using suite.Run from testify) inside any function that matches the\n// identity that \"go test\" is already looking for (i.e.\n// func(*testing.T)).\n//\n// Regular expression to select test suites specified command-line\n// argument \"-run\". Regular expression to select the methods\n// of test suites specified command-line argument \"-m\".\n// Suite object has assertion methods.\n//\n// A crude example:\n//\n//\t// Basic imports\n//\timport (\n//\t    \"testing\"\n//\t    \"github.com/stretchr/testify/assert\"\n//\t    \"github.com/stretchr/testify/suite\"\n//\t)\n//\n//\t// Define the suite, and absorb the built-in basic suite\n//\t// functionality from testify - including a T() method which\n//\t// returns the current testing context\n//\ttype ExampleTestSuite struct {\n//\t    suite.Suite\n//\t    VariableThatShouldStartAtFive int\n//\t}\n//\n//\t// Make sure that VariableThatShouldStartAtFive is set to five\n//\t// before each test\n//\tfunc (suite *ExampleTestSuite) SetupTest() {\n//\t    suite.VariableThatShouldStartAtFive = 5\n//\t}\n//\n//\t// All methods that begin with \"Test\" are run as tests within a\n//\t// suite.\n//\tfunc (suite *ExampleTestSuite) TestExample() {\n//\t    assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive)\n//\t    suite.Equal(5, suite.VariableThatShouldStartAtFive)\n//\t}\n//\n//\t// In order for 'go test' to run this suite, we need to create\n//\t// a normal test function and pass our suite to suite.Run\n//\tfunc TestExampleTestSuite(t *testing.T) {\n//\t    suite.Run(t, new(ExampleTestSuite))\n//\t}\n//\n// [issue 934]: https://github.com/stretchr/testify/issues/934\npackage suite\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/suite/interfaces.go",
    "content": "package suite\n\nimport \"testing\"\n\n// TestingSuite can store and return the current *testing.T context\n// generated by 'go test'.\ntype TestingSuite interface {\n\tT() *testing.T\n\tSetT(*testing.T)\n\tSetS(suite TestingSuite)\n}\n\n// SetupAllSuite has a SetupSuite method, which will run before the\n// tests in the suite are run.\ntype SetupAllSuite interface {\n\tSetupSuite()\n}\n\n// SetupTestSuite has a SetupTest method, which will run before each\n// test in the suite.\ntype SetupTestSuite interface {\n\tSetupTest()\n}\n\n// TearDownAllSuite has a TearDownSuite method, which will run after\n// all the tests in the suite have been run.\ntype TearDownAllSuite interface {\n\tTearDownSuite()\n}\n\n// TearDownTestSuite has a TearDownTest method, which will run after\n// each test in the suite.\ntype TearDownTestSuite interface {\n\tTearDownTest()\n}\n\n// BeforeTest has a function to be executed right before the test\n// starts and receives the suite and test names as input\ntype BeforeTest interface {\n\tBeforeTest(suiteName, testName string)\n}\n\n// AfterTest has a function to be executed right after the test\n// finishes and receives the suite and test names as input\ntype AfterTest interface {\n\tAfterTest(suiteName, testName string)\n}\n\n// WithStats implements HandleStats, a function that will be executed\n// when a test suite is finished. The stats contain information about\n// the execution of that suite and its tests.\ntype WithStats interface {\n\tHandleStats(suiteName string, stats *SuiteInformation)\n}\n\n// SetupSubTest has a SetupSubTest method, which will run before each\n// subtest in the suite.\ntype SetupSubTest interface {\n\tSetupSubTest()\n}\n\n// TearDownSubTest has a TearDownSubTest method, which will run after\n// each subtest in the suite have been run.\ntype TearDownSubTest interface {\n\tTearDownSubTest()\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/suite/stats.go",
    "content": "package suite\n\nimport \"time\"\n\n// SuiteInformation stats stores stats for the whole suite execution.\ntype SuiteInformation struct {\n\tStart, End time.Time\n\tTestStats  map[string]*TestInformation\n}\n\n// TestInformation stores information about the execution of each test.\ntype TestInformation struct {\n\tTestName   string\n\tStart, End time.Time\n\tPassed     bool\n}\n\nfunc newSuiteInformation() *SuiteInformation {\n\ttestStats := make(map[string]*TestInformation)\n\n\treturn &SuiteInformation{\n\t\tTestStats: testStats,\n\t}\n}\n\nfunc (s SuiteInformation) start(testName string) {\n\ts.TestStats[testName] = &TestInformation{\n\t\tTestName: testName,\n\t\tStart:    time.Now(),\n\t}\n}\n\nfunc (s SuiteInformation) end(testName string, passed bool) {\n\ts.TestStats[testName].End = time.Now()\n\ts.TestStats[testName].Passed = passed\n}\n\nfunc (s SuiteInformation) Passed() bool {\n\tfor _, stats := range s.TestStats {\n\t\tif !stats.Passed {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/stretchr/testify/suite/suite.go",
    "content": "package suite\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime/debug\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/stretchr/testify/assert\"\n\t\"github.com/stretchr/testify/require\"\n)\n\nvar allTestsFilter = func(_, _ string) (bool, error) { return true, nil }\nvar matchMethod = flag.String(\"testify.m\", \"\", \"regular expression to select tests of the testify suite to run\")\n\n// Suite is a basic testing suite with methods for storing and\n// retrieving the current *testing.T context.\ntype Suite struct {\n\t*assert.Assertions\n\n\tmu      sync.RWMutex\n\trequire *require.Assertions\n\tt       *testing.T\n\n\t// Parent suite to have access to the implemented methods of parent struct\n\ts TestingSuite\n}\n\n// T retrieves the current *testing.T context.\nfunc (suite *Suite) T() *testing.T {\n\tsuite.mu.RLock()\n\tdefer suite.mu.RUnlock()\n\treturn suite.t\n}\n\n// SetT sets the current *testing.T context.\nfunc (suite *Suite) SetT(t *testing.T) {\n\tsuite.mu.Lock()\n\tdefer suite.mu.Unlock()\n\tsuite.t = t\n\tsuite.Assertions = assert.New(t)\n\tsuite.require = require.New(t)\n}\n\n// SetS needs to set the current test suite as parent\n// to get access to the parent methods\nfunc (suite *Suite) SetS(s TestingSuite) {\n\tsuite.s = s\n}\n\n// Require returns a require context for suite.\nfunc (suite *Suite) Require() *require.Assertions {\n\tsuite.mu.Lock()\n\tdefer suite.mu.Unlock()\n\tif suite.require == nil {\n\t\tpanic(\"'Require' must not be called before 'Run' or 'SetT'\")\n\t}\n\treturn suite.require\n}\n\n// Assert returns an assert context for suite.  Normally, you can call\n// `suite.NoError(expected, actual)`, but for situations where the embedded\n// methods are overridden (for example, you might want to override\n// assert.Assertions with require.Assertions), this method is provided so you\n// can call `suite.Assert().NoError()`.\nfunc (suite *Suite) Assert() *assert.Assertions {\n\tsuite.mu.Lock()\n\tdefer suite.mu.Unlock()\n\tif suite.Assertions == nil {\n\t\tpanic(\"'Assert' must not be called before 'Run' or 'SetT'\")\n\t}\n\treturn suite.Assertions\n}\n\nfunc recoverAndFailOnPanic(t *testing.T) {\n\tt.Helper()\n\tr := recover()\n\tfailOnPanic(t, r)\n}\n\nfunc failOnPanic(t *testing.T, r interface{}) {\n\tt.Helper()\n\tif r != nil {\n\t\tt.Errorf(\"test panicked: %v\\n%s\", r, debug.Stack())\n\t\tt.FailNow()\n\t}\n}\n\n// Run provides suite functionality around golang subtests.  It should be\n// called in place of t.Run(name, func(t *testing.T)) in test suite code.\n// The passed-in func will be executed as a subtest with a fresh instance of t.\n// Provides compatibility with go test pkg -run TestSuite/TestName/SubTestName.\nfunc (suite *Suite) Run(name string, subtest func()) bool {\n\toldT := suite.T()\n\n\treturn oldT.Run(name, func(t *testing.T) {\n\t\tsuite.SetT(t)\n\t\tdefer suite.SetT(oldT)\n\n\t\tdefer recoverAndFailOnPanic(t)\n\n\t\tif setupSubTest, ok := suite.s.(SetupSubTest); ok {\n\t\t\tsetupSubTest.SetupSubTest()\n\t\t}\n\n\t\tif tearDownSubTest, ok := suite.s.(TearDownSubTest); ok {\n\t\t\tdefer tearDownSubTest.TearDownSubTest()\n\t\t}\n\n\t\tsubtest()\n\t})\n}\n\n// Run takes a testing suite and runs all of the tests attached\n// to it.\nfunc Run(t *testing.T, suite TestingSuite) {\n\tdefer recoverAndFailOnPanic(t)\n\n\tsuite.SetT(t)\n\tsuite.SetS(suite)\n\n\tvar suiteSetupDone bool\n\n\tvar stats *SuiteInformation\n\tif _, ok := suite.(WithStats); ok {\n\t\tstats = newSuiteInformation()\n\t}\n\n\ttests := []testing.InternalTest{}\n\tmethodFinder := reflect.TypeOf(suite)\n\tsuiteName := methodFinder.Elem().Name()\n\n\tfor i := 0; i < methodFinder.NumMethod(); i++ {\n\t\tmethod := methodFinder.Method(i)\n\n\t\tok, err := methodFilter(method.Name)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"testify: invalid regexp for -m: %s\\n\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !suiteSetupDone {\n\t\t\tif stats != nil {\n\t\t\t\tstats.Start = time.Now()\n\t\t\t}\n\n\t\t\tif setupAllSuite, ok := suite.(SetupAllSuite); ok {\n\t\t\t\tsetupAllSuite.SetupSuite()\n\t\t\t}\n\n\t\t\tsuiteSetupDone = true\n\t\t}\n\n\t\ttest := testing.InternalTest{\n\t\t\tName: method.Name,\n\t\t\tF: func(t *testing.T) {\n\t\t\t\tparentT := suite.T()\n\t\t\t\tsuite.SetT(t)\n\t\t\t\tdefer recoverAndFailOnPanic(t)\n\t\t\t\tdefer func() {\n\t\t\t\t\tt.Helper()\n\n\t\t\t\t\tr := recover()\n\n\t\t\t\t\tif stats != nil {\n\t\t\t\t\t\tpassed := !t.Failed() && r == nil\n\t\t\t\t\t\tstats.end(method.Name, passed)\n\t\t\t\t\t}\n\n\t\t\t\t\tif afterTestSuite, ok := suite.(AfterTest); ok {\n\t\t\t\t\t\tafterTestSuite.AfterTest(suiteName, method.Name)\n\t\t\t\t\t}\n\n\t\t\t\t\tif tearDownTestSuite, ok := suite.(TearDownTestSuite); ok {\n\t\t\t\t\t\ttearDownTestSuite.TearDownTest()\n\t\t\t\t\t}\n\n\t\t\t\t\tsuite.SetT(parentT)\n\t\t\t\t\tfailOnPanic(t, r)\n\t\t\t\t}()\n\n\t\t\t\tif setupTestSuite, ok := suite.(SetupTestSuite); ok {\n\t\t\t\t\tsetupTestSuite.SetupTest()\n\t\t\t\t}\n\t\t\t\tif beforeTestSuite, ok := suite.(BeforeTest); ok {\n\t\t\t\t\tbeforeTestSuite.BeforeTest(methodFinder.Elem().Name(), method.Name)\n\t\t\t\t}\n\n\t\t\t\tif stats != nil {\n\t\t\t\t\tstats.start(method.Name)\n\t\t\t\t}\n\n\t\t\t\tmethod.Func.Call([]reflect.Value{reflect.ValueOf(suite)})\n\t\t\t},\n\t\t}\n\t\ttests = append(tests, test)\n\t}\n\tif suiteSetupDone {\n\t\tdefer func() {\n\t\t\tif tearDownAllSuite, ok := suite.(TearDownAllSuite); ok {\n\t\t\t\ttearDownAllSuite.TearDownSuite()\n\t\t\t}\n\n\t\t\tif suiteWithStats, measureStats := suite.(WithStats); measureStats {\n\t\t\t\tstats.End = time.Now()\n\t\t\t\tsuiteWithStats.HandleStats(suiteName, stats)\n\t\t\t}\n\t\t}()\n\t}\n\n\trunTests(t, tests)\n}\n\n// Filtering method according to set regular expression\n// specified command-line argument -m\nfunc methodFilter(name string) (bool, error) {\n\tif ok, _ := regexp.MatchString(\"^Test\", name); !ok {\n\t\treturn false, nil\n\t}\n\treturn regexp.MatchString(*matchMethod, name)\n}\n\nfunc runTests(t testing.TB, tests []testing.InternalTest) {\n\tif len(tests) == 0 {\n\t\tt.Log(\"warning: no tests to run\")\n\t\treturn\n\t}\n\n\tr, ok := t.(runner)\n\tif !ok { // backwards compatibility with Go 1.6 and below\n\t\tif !testing.RunTests(allTestsFilter, tests) {\n\t\t\tt.Fail()\n\t\t}\n\t\treturn\n\t}\n\n\tfor _, test := range tests {\n\t\tr.Run(test.Name, test.F)\n\t}\n}\n\ntype runner interface {\n\tRun(name string, f func(t *testing.T)) bool\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/.cirrus.yml",
    "content": "env:\n  CIRRUS_CLONE_DEPTH: 1\n  GO_VERSION: go1.20\n\nfreebsd_12_task:\n  freebsd_instance:\n    image_family: freebsd-12-3\n  install_script: |\n    pkg install -y go\n    GOBIN=$PWD/bin go install golang.org/dl/${GO_VERSION}@latest\n    bin/${GO_VERSION} download\n  build_script: bin/${GO_VERSION} build -v ./...\n  test_script: bin/${GO_VERSION} test -race ./...\n\nfreebsd_13_task:\n  freebsd_instance:\n    image_family: freebsd-13-0\n  install_script: |\n    pkg install -y go\n    GOBIN=$PWD/bin go install golang.org/dl/${GO_VERSION}@latest\n    bin/${GO_VERSION} download\n  build_script: bin/${GO_VERSION} build -v ./...\n  test_script: bin/${GO_VERSION} test -race ./...\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/.gitignore",
    "content": "_obj/\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2018-2022, Tobias Klauser\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 notice, this\n  list of conditions and the following disclaimer.\n\n* 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\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\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": "vendor/github.com/tklauser/go-sysconf/README.md",
    "content": "# go-sysconf\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/tklauser/go-sysconf.svg)](https://pkg.go.dev/github.com/tklauser/go-sysconf)\n[![GitHub Action Status](https://github.com/tklauser/go-sysconf/workflows/Tests/badge.svg)](https://github.com/tklauser/go-sysconf/actions?query=workflow%3ATests)\n\n`sysconf` for Go, without using cgo or external binaries (e.g. getconf).\n\nSupported operating systems: Linux, macOS, DragonflyBSD, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos.\n\nAll POSIX.1 and POSIX.2 variables are supported, see [References](#references) for a complete list.\n\nAdditionally, the following non-standard variables are supported on some operating systems:\n\n| Variable | Supported on |\n|---|---|\n| `SC_PHYS_PAGES`       | Linux, macOS, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos |\n| `SC_AVPHYS_PAGES`     | Linux, OpenBSD, Solaris/Illumos |\n| `SC_NPROCESSORS_CONF` | Linux, macOS, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos |\n| `SC_NPROCESSORS_ONLN` | Linux, macOS, FreeBSD, NetBSD, OpenBSD, Solaris/Illumos |\n| `SC_UIO_MAXIOV`       | Linux |\n\n## Usage\n\n```Go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/tklauser/go-sysconf\"\n)\n\nfunc main() {\n\t// get clock ticks, this will return the same as C.sysconf(C._SC_CLK_TCK)\n\tclktck, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)\n\tif err == nil {\n\t\tfmt.Printf(\"SC_CLK_TCK: %v\\n\", clktck)\n\t}\n}\n```\n\n## References\n\n* [POSIX documenation for `sysconf`](http://pubs.opengroup.org/onlinepubs/9699919799/functions/sysconf.html)\n* [Linux manpage for `sysconf(3)`](http://man7.org/linux/man-pages/man3/sysconf.3.html)\n* [glibc constants for `sysconf` parameters](https://www.gnu.org/software/libc/manual/html_node/Constants-for-Sysconf.html)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package sysconf implements the sysconf(3) function and provides the\n// associated SC_* constants to query system configuration values.\npackage sysconf\n\nimport \"errors\"\n\n//go:generate go run mksysconf.go\n\nvar errInvalid = errors.New(\"invalid parameter value\")\n\n// Sysconf returns the value of a sysconf(3) runtime system parameter.\n// The name parameter should be a SC_* constant define in this package. The\n// implementation is GOOS-specific and certain SC_* constants might not be\n// defined for all GOOSes.\nfunc Sysconf(name int) (int64, error) {\n\treturn sysconf(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_bsd.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || dragonfly || freebsd || netbsd || openbsd\n// +build darwin dragonfly freebsd netbsd openbsd\n\npackage sysconf\n\nimport \"golang.org/x/sys/unix\"\n\nfunc pathconf(path string, name int) int64 {\n\tif val, err := unix.Pathconf(path, name); err == nil {\n\t\treturn int64(val)\n\t}\n\treturn -1\n}\n\nfunc sysctl32(name string) int64 {\n\tif val, err := unix.SysctlUint32(name); err == nil {\n\t\treturn int64(val)\n\t}\n\treturn -1\n}\n\nfunc sysctl64(name string) int64 {\n\tif val, err := unix.SysctlUint64(name); err == nil {\n\t\treturn int64(val)\n\t}\n\treturn -1\n}\n\nfunc yesno(val int64) int64 {\n\tif val == 0 {\n\t\treturn -1\n\t}\n\treturn val\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_darwin.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage sysconf\n\nimport (\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t_HOST_NAME_MAX  = _MAXHOSTNAMELEN - 1\n\t_LOGIN_NAME_MAX = _MAXLOGNAME\n\t_SYMLOOP_MAX    = _MAXSYMLINKS\n)\n\nvar uname struct {\n\tsync.Once\n\tmacOSMajor int\n}\n\n// sysconf implements sysconf(4) as in the Darwin libc (derived from the FreeBSD\n// libc), version 1534.81.1.\n// See https://github.com/apple-oss-distributions/Libc/tree/Libc-1534.81.1.\nfunc sysconf(name int) (int64, error) {\n\tswitch name {\n\tcase SC_AIO_LISTIO_MAX:\n\t\tfallthrough\n\tcase SC_AIO_MAX:\n\t\treturn sysctl32(\"kern.aiomax\"), nil\n\tcase SC_AIO_PRIO_DELTA_MAX:\n\t\treturn -1, nil\n\tcase SC_ARG_MAX:\n\t\treturn sysctl32(\"kern.argmax\"), nil\n\tcase SC_ATEXIT_MAX:\n\t\treturn _INT_MAX, nil\n\tcase SC_CHILD_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn int64(rlim.Cur), nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_CLK_TCK:\n\t\treturn _CLK_TCK, nil\n\tcase SC_DELAYTIMER_MAX:\n\t\treturn -1, nil\n\tcase SC_GETGR_R_SIZE_MAX:\n\t\treturn 4096, nil\n\tcase SC_GETPW_R_SIZE_MAX:\n\t\treturn 4096, nil\n\tcase SC_IOV_MAX:\n\t\treturn _IOV_MAX, nil\n\tcase SC_MQ_OPEN_MAX:\n\t\treturn -1, nil\n\tcase SC_MQ_PRIO_MAX:\n\t\treturn -1, nil\n\tcase SC_NGROUPS_MAX:\n\t\treturn sysctl32(\"kern.ngroups\"), nil\n\tcase SC_OPEN_MAX, SC_STREAM_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err != nil {\n\t\t\treturn -1, nil\n\t\t}\n\t\tif rlim.Cur > unix.RLIM_INFINITY {\n\t\t\treturn -1, nil\n\t\t}\n\t\tif rlim.Cur > _LONG_MAX {\n\t\t\treturn -1, unix.EOVERFLOW\n\t\t}\n\t\treturn int64(rlim.Cur), nil\n\tcase SC_RTSIG_MAX:\n\t\treturn -1, nil\n\tcase SC_SEM_NSEMS_MAX:\n\t\treturn sysctl32(\"kern.sysv.semmns\"), nil\n\tcase SC_SEM_VALUE_MAX:\n\t\treturn _POSIX_SEM_VALUE_MAX, nil\n\tcase SC_SIGQUEUE_MAX:\n\t\treturn -1, nil\n\tcase SC_THREAD_DESTRUCTOR_ITERATIONS:\n\t\treturn _PTHREAD_DESTRUCTOR_ITERATIONS, nil\n\tcase SC_THREAD_KEYS_MAX:\n\t\treturn _PTHREAD_KEYS_MAX, nil\n\tcase SC_THREAD_PRIO_INHERIT:\n\t\treturn _POSIX_THREAD_PRIO_INHERIT, nil\n\tcase SC_THREAD_PRIO_PROTECT:\n\t\treturn _POSIX_THREAD_PRIO_PROTECT, nil\n\tcase SC_THREAD_STACK_MIN:\n\t\treturn _PTHREAD_STACK_MIN, nil\n\tcase SC_THREAD_THREADS_MAX:\n\t\treturn -1, nil\n\tcase SC_TIMER_MAX:\n\t\treturn -1, nil\n\tcase SC_TTY_NAME_MAX:\n\t\t// should be _PATH_DEV instead of \"/\"\n\t\treturn pathconf(\"/\", _PC_NAME_MAX), nil\n\tcase SC_TZNAME_MAX:\n\t\treturn pathconf(_PATH_ZONEINFO, _PC_NAME_MAX), nil\n\n\tcase SC_IPV6:\n\t\tif _POSIX_IPV6 == 0 {\n\t\t\tfd, err := unix.Socket(unix.AF_INET6, unix.SOCK_DGRAM, 0)\n\t\t\tif err == nil && fd >= 0 {\n\t\t\t\tunix.Close(fd)\n\t\t\t\treturn int64(200112), nil\n\t\t\t}\n\t\t\treturn 0, nil\n\t\t}\n\t\treturn _POSIX_IPV6, nil\n\tcase SC_MESSAGE_PASSING:\n\t\tif _POSIX_MESSAGE_PASSING == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.message_passing\")), nil\n\t\t}\n\t\treturn _POSIX_MESSAGE_PASSING, nil\n\tcase SC_PRIORITIZED_IO:\n\t\tif _POSIX_PRIORITIZED_IO == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.prioritized_io\")), nil\n\t\t}\n\t\treturn _POSIX_PRIORITIZED_IO, nil\n\tcase SC_PRIORITY_SCHEDULING:\n\t\tif _POSIX_PRIORITY_SCHEDULING == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.priority_scheduling\")), nil\n\t\t}\n\t\treturn _POSIX_PRIORITY_SCHEDULING, nil\n\tcase SC_REALTIME_SIGNALS:\n\t\tif _POSIX_REALTIME_SIGNALS == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.realtime_signals\")), nil\n\t\t}\n\t\treturn _POSIX_REALTIME_SIGNALS, nil\n\tcase SC_SAVED_IDS:\n\t\treturn yesno(sysctl32(\"kern.saved_ids\")), nil\n\tcase SC_SEMAPHORES:\n\t\tif _POSIX_SEMAPHORES == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.semaphores\")), nil\n\t\t}\n\t\treturn _POSIX_SEMAPHORES, nil\n\tcase SC_SPAWN:\n\t\tuname.Once.Do(func() {\n\t\t\tvar u unix.Utsname\n\t\t\terr := unix.Uname(&u)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\trel := unix.ByteSliceToString(u.Release[:])\n\t\t\tver := strings.Split(rel, \".\")\n\t\t\tmaj, _ := strconv.Atoi(ver[0])\n\t\t\tuname.macOSMajor = maj\n\t\t})\n\t\tif uname.macOSMajor < 22 {\n\t\t\treturn -1, nil\n\t\t}\n\t\t// macOS 13 (Ventura) and later\n\t\treturn 200112, nil\n\tcase SC_SPIN_LOCKS:\n\t\treturn _POSIX_SPIN_LOCKS, nil\n\tcase SC_SPORADIC_SERVER:\n\t\treturn _POSIX_SPORADIC_SERVER, nil\n\tcase SC_SS_REPL_MAX:\n\t\treturn _POSIX_SS_REPL_MAX, nil\n\tcase SC_SYNCHRONIZED_IO:\n\t\tif _POSIX_SYNCHRONIZED_IO == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.synchronized_io\")), nil\n\t\t}\n\t\treturn _POSIX_SYNCHRONIZED_IO, nil\n\tcase SC_THREAD_ATTR_STACKADDR:\n\t\treturn _POSIX_THREAD_ATTR_STACKADDR, nil\n\tcase SC_THREAD_ATTR_STACKSIZE:\n\t\treturn _POSIX_THREAD_ATTR_STACKSIZE, nil\n\tcase SC_THREAD_CPUTIME:\n\t\treturn _POSIX_THREAD_CPUTIME, nil\n\tcase SC_THREAD_PRIORITY_SCHEDULING:\n\t\treturn _POSIX_THREAD_PRIORITY_SCHEDULING, nil\n\tcase SC_THREAD_PROCESS_SHARED:\n\t\treturn _POSIX_THREAD_PROCESS_SHARED, nil\n\tcase SC_THREAD_SAFE_FUNCTIONS:\n\t\treturn _POSIX_THREAD_SAFE_FUNCTIONS, nil\n\tcase SC_THREAD_SPORADIC_SERVER:\n\t\treturn _POSIX_THREAD_SPORADIC_SERVER, nil\n\tcase SC_TIMERS:\n\t\tif _POSIX_TIMERS == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.timers\")), nil\n\t\t}\n\t\treturn _POSIX_TIMERS, nil\n\tcase SC_TRACE:\n\t\treturn _POSIX_TRACE, nil\n\tcase SC_TRACE_EVENT_FILTER:\n\t\treturn _POSIX_TRACE_EVENT_FILTER, nil\n\tcase SC_TRACE_EVENT_NAME_MAX:\n\t\treturn _POSIX_TRACE_EVENT_NAME_MAX, nil\n\tcase SC_TRACE_INHERIT:\n\t\treturn _POSIX_TRACE_INHERIT, nil\n\tcase SC_TRACE_LOG:\n\t\treturn _POSIX_TRACE_LOG, nil\n\tcase SC_TRACE_NAME_MAX:\n\t\treturn _POSIX_TRACE_NAME_MAX, nil\n\tcase SC_TRACE_SYS_MAX:\n\t\treturn _POSIX_TRACE_SYS_MAX, nil\n\tcase SC_TRACE_USER_EVENT_MAX:\n\t\treturn _POSIX_TRACE_USER_EVENT_MAX, nil\n\tcase SC_TYPED_MEMORY_OBJECTS:\n\t\treturn _POSIX_TYPED_MEMORY_OBJECTS, nil\n\tcase SC_VERSION:\n\t\t// TODO(tk): darwin libc uses sysctl(CTL_KERN, KERN_POSIX1)\n\t\treturn _POSIX_VERSION, nil\n\n\tcase SC_V6_ILP32_OFF32:\n\t\tif _V6_ILP32_OFF32 == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofInt == unix.SizeofLong &&\n\t\t\t\tunix.SizeofLong == unix.SizeofPtr &&\n\t\t\t\tunix.SizeofPtr == sizeofOffT {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _V6_ILP32_OFF32, nil\n\tcase SC_V6_ILP32_OFFBIG:\n\t\tif _V6_ILP32_OFFBIG == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofInt == unix.SizeofLong &&\n\t\t\t\tunix.SizeofLong == unix.SizeofPtr &&\n\t\t\t\tsizeofOffT*_CHAR_BIT >= 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _V6_ILP32_OFFBIG, nil\n\tcase SC_V6_LP64_OFF64:\n\t\tif _V6_LP64_OFF64 == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT == 64 &&\n\t\t\t\tunix.SizeofLong == unix.SizeofPtr &&\n\t\t\t\tunix.SizeofPtr == sizeofOffT {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _V6_LP64_OFF64, nil\n\tcase SC_V6_LPBIG_OFFBIG:\n\t\tif _V6_LPBIG_OFFBIG == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT >= 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT >= 64 &&\n\t\t\t\tunix.SizeofPtr*_CHAR_BIT >= 64 &&\n\t\t\t\tsizeofOffT*_CHAR_BIT >= 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _V6_LPBIG_OFFBIG, nil\n\n\tcase SC_2_CHAR_TERM:\n\t\treturn _POSIX2_CHAR_TERM, nil\n\tcase SC_2_PBS,\n\t\tSC_2_PBS_ACCOUNTING,\n\t\tSC_2_PBS_CHECKPOINT,\n\t\tSC_2_PBS_LOCATE,\n\t\tSC_2_PBS_MESSAGE,\n\t\tSC_2_PBS_TRACK:\n\t\treturn _POSIX2_PBS, nil\n\tcase SC_2_UPE:\n\t\treturn _POSIX2_UPE, nil\n\n\tcase SC_XOPEN_CRYPT:\n\t\treturn _XOPEN_CRYPT, nil\n\tcase SC_XOPEN_ENH_I18N:\n\t\treturn _XOPEN_ENH_I18N, nil\n\tcase SC_XOPEN_REALTIME:\n\t\treturn _XOPEN_REALTIME, nil\n\tcase SC_XOPEN_REALTIME_THREADS:\n\t\treturn _XOPEN_REALTIME_THREADS, nil\n\tcase SC_XOPEN_SHM:\n\t\treturn _XOPEN_SHM, nil\n\tcase SC_XOPEN_STREAMS:\n\t\treturn -1, nil\n\tcase SC_XOPEN_UNIX:\n\t\treturn _XOPEN_UNIX, nil\n\tcase SC_XOPEN_VERSION:\n\t\treturn _XOPEN_VERSION, nil\n\tcase SC_XOPEN_XCU_VERSION:\n\t\treturn _XOPEN_XCU_VERSION, nil\n\n\tcase SC_PHYS_PAGES:\n\t\treturn sysctl64(\"hw.memsize\") / int64(unix.Getpagesize()), nil\n\tcase SC_NPROCESSORS_CONF:\n\t\tfallthrough\n\tcase SC_NPROCESSORS_ONLN:\n\t\treturn sysctl32(\"hw.ncpu\"), nil\n\t}\n\n\treturn sysconfGeneric(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_dragonfly.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage sysconf\n\nimport \"golang.org/x/sys/unix\"\n\nconst (\n\t_HOST_NAME_MAX  = _MAXHOSTNAMELEN - 1\n\t_LOGIN_NAME_MAX = _MAXLOGNAME\n\t_SYMLOOP_MAX    = _MAXSYMLINKS\n)\n\n// sysconf implements sysconf(3) as in the FreeBSD 12 libc.\nfunc sysconf(name int) (int64, error) {\n\tswitch name {\n\tcase SC_AIO_LISTIO_MAX:\n\t\treturn sysctl32(\"p1003_1b.aio_listio_max\"), nil\n\tcase SC_AIO_MAX:\n\t\treturn sysctl32(\"p1003_1b.aio_max\"), nil\n\tcase SC_AIO_PRIO_DELTA_MAX:\n\t\treturn sysctl32(\"p1003_1b.aio_prio_delta_max\"), nil\n\tcase SC_ARG_MAX:\n\t\treturn sysctl32(\"kern.argmax\"), nil\n\tcase SC_ATEXIT_MAX:\n\t\treturn _ATEXIT_SIZE, nil\n\tcase SC_CHILD_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn rlim.Cur, nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_CLK_TCK:\n\t\treturn _CLK_TCK, nil\n\tcase SC_DELAYTIMER_MAX:\n\t\treturn yesno(sysctl32(\"p1003_1b.delaytimer_max\")), nil\n\tcase SC_GETGR_R_SIZE_MAX, SC_GETPW_R_SIZE_MAX:\n\t\treturn -1, nil\n\tcase SC_IOV_MAX:\n\t\treturn sysctl32(\"kern.iov_max\"), nil\n\tcase SC_MQ_OPEN_MAX:\n\t\treturn sysctl32(\"kern.mqueue.mq_open_max\"), nil\n\tcase SC_MQ_PRIO_MAX:\n\t\treturn sysctl32(\"kern.mqueue.mq_prio_max\"), nil\n\tcase SC_NGROUPS_MAX:\n\t\treturn sysctl32(\"kern.ngroups\"), nil\n\tcase SC_OPEN_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn rlim.Cur, nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_RTSIG_MAX:\n\t\treturn yesno(sysctl32(\"p1003_1b.rtsig_max\")), nil\n\tcase SC_SEM_NSEMS_MAX:\n\t\treturn -1, nil\n\tcase SC_SEM_VALUE_MAX:\n\t\treturn -1, nil\n\tcase SC_SIGQUEUE_MAX:\n\t\treturn yesno(sysctl32(\"p1003_1b.sigqueue_max\")), nil\n\tcase SC_STREAM_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn rlim.Cur, nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_THREAD_DESTRUCTOR_ITERATIONS:\n\t\treturn _PTHREAD_DESTRUCTOR_ITERATIONS, nil\n\tcase SC_THREAD_KEYS_MAX:\n\t\treturn _PTHREAD_KEYS_MAX, nil\n\tcase SC_THREAD_PRIO_INHERIT:\n\t\treturn _POSIX_THREAD_PRIO_INHERIT, nil\n\tcase SC_THREAD_PRIO_PROTECT:\n\t\treturn _POSIX_THREAD_PRIO_PROTECT, nil\n\tcase SC_THREAD_STACK_MIN:\n\t\treturn _PTHREAD_STACK_MIN, nil\n\tcase SC_THREAD_THREADS_MAX:\n\t\treturn -1, nil\n\tcase SC_TIMER_MAX:\n\t\treturn yesno(sysctl32(\"p1003_1b.timer_max\")), nil\n\tcase SC_TTY_NAME_MAX:\n\t\treturn pathconf(_PATH_DEV, _PC_NAME_MAX), nil\n\tcase SC_TZNAME_MAX:\n\t\treturn pathconf(_PATH_ZONEINFO, _PC_NAME_MAX), nil\n\n\tcase SC_ASYNCHRONOUS_IO:\n\t\tif _POSIX_ASYNCHRONOUS_IO == 0 {\n\t\t\treturn sysctl64(\"p1003_1b.asynchronous_io\"), nil\n\t\t}\n\t\treturn _POSIX_ASYNCHRONOUS_IO, nil\n\tcase SC_IPV6:\n\t\tif _POSIX_IPV6 == 0 {\n\t\t\tfd, err := unix.Socket(unix.AF_INET6, unix.SOCK_DGRAM, 0)\n\t\t\tif err == nil && fd >= 0 {\n\t\t\t\tunix.Close(fd)\n\t\t\t\treturn int64(200112), nil\n\t\t\t}\n\t\t\treturn 0, nil\n\t\t}\n\t\treturn _POSIX_IPV6, nil\n\tcase SC_MESSAGE_PASSING:\n\t\tif _POSIX_MESSAGE_PASSING == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.message_passing\")), nil\n\t\t}\n\t\treturn _POSIX_MESSAGE_PASSING, nil\n\tcase SC_PRIORITIZED_IO:\n\t\tif _POSIX_PRIORITIZED_IO == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.prioritized_io\")), nil\n\t\t}\n\t\treturn _POSIX_PRIORITIZED_IO, nil\n\tcase SC_PRIORITY_SCHEDULING:\n\t\tif _POSIX_PRIORITY_SCHEDULING == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.priority_scheduling\")), nil\n\t\t}\n\t\treturn _POSIX_PRIORITY_SCHEDULING, nil\n\tcase SC_REALTIME_SIGNALS:\n\t\tif _POSIX_REALTIME_SIGNALS == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.realtime_signals\")), nil\n\t\t}\n\t\treturn _POSIX_REALTIME_SIGNALS, nil\n\tcase SC_SAVED_IDS:\n\t\treturn yesno(sysctl32(\"kern.saved_ids\")), nil\n\tcase SC_SEMAPHORES:\n\t\tif _POSIX_SEMAPHORES == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.semaphores\")), nil\n\t\t}\n\t\treturn _POSIX_SEMAPHORES, nil\n\tcase SC_SPAWN:\n\t\treturn _POSIX_SPAWN, nil\n\tcase SC_SPIN_LOCKS:\n\t\treturn _POSIX_SPIN_LOCKS, nil\n\tcase SC_SPORADIC_SERVER:\n\t\treturn _POSIX_SPORADIC_SERVER, nil\n\tcase SC_SYNCHRONIZED_IO:\n\t\tif _POSIX_SYNCHRONIZED_IO == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.synchronized_io\")), nil\n\t\t}\n\t\treturn _POSIX_SYNCHRONIZED_IO, nil\n\tcase SC_THREAD_ATTR_STACKADDR:\n\t\treturn _POSIX_THREAD_ATTR_STACKADDR, nil\n\tcase SC_THREAD_ATTR_STACKSIZE:\n\t\treturn _POSIX_THREAD_ATTR_STACKSIZE, nil\n\tcase SC_THREAD_CPUTIME:\n\t\treturn _POSIX_THREAD_CPUTIME, nil\n\tcase SC_THREAD_PRIORITY_SCHEDULING:\n\t\treturn _POSIX_THREAD_PRIORITY_SCHEDULING, nil\n\tcase SC_THREAD_PROCESS_SHARED:\n\t\treturn _POSIX_THREAD_PROCESS_SHARED, nil\n\tcase SC_THREAD_SAFE_FUNCTIONS:\n\t\treturn _POSIX_THREAD_SAFE_FUNCTIONS, nil\n\tcase SC_THREAD_SPORADIC_SERVER:\n\t\treturn _POSIX_THREAD_SPORADIC_SERVER, nil\n\tcase SC_TIMERS:\n\t\tif _POSIX_TIMERS == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.timers\")), nil\n\t\t}\n\t\treturn _POSIX_TIMERS, nil\n\tcase SC_TRACE:\n\t\treturn _POSIX_TRACE, nil\n\tcase SC_TYPED_MEMORY_OBJECTS:\n\t\treturn _POSIX_TYPED_MEMORY_OBJECTS, nil\n\tcase SC_VERSION:\n\t\t// TODO(tk): FreeBSD libc uses sysctl(CTL_KERN, KERN_POSIX1)\n\t\treturn _POSIX_VERSION, nil\n\n\t\t/* TODO(tk): these need GOARCH-dependent integer size checks\n\t\tcase SC_V6_ILP32_OFF32:\n\t\t\treturn _V6_ILP32_OFF32, nil\n\t\tcase SC_V6_ILP32_OFFBIG:\n\t\t\treturn _V6_ILP32_OFFBIG, nil\n\t\tcase SC_V6_LP64_OFF64:\n\t\t\treturn _V6_LP64_OFF64, nil\n\t\tcase SC_V6_LPBIG_OFFBIG:\n\t\t\treturn _V6_LPBIG_OFFBIG, nil\n\t\t*/\n\n\tcase SC_2_CHAR_TERM:\n\t\treturn _POSIX2_CHAR_TERM, nil\n\tcase SC_2_PBS,\n\t\tSC_2_PBS_ACCOUNTING,\n\t\tSC_2_PBS_CHECKPOINT,\n\t\tSC_2_PBS_LOCATE,\n\t\tSC_2_PBS_MESSAGE,\n\t\tSC_2_PBS_TRACK:\n\t\treturn _POSIX2_PBS, nil\n\tcase SC_2_UPE:\n\t\treturn _POSIX2_UPE, nil\n\n\tcase SC_XOPEN_CRYPT:\n\t\treturn _XOPEN_CRYPT, nil\n\tcase SC_XOPEN_ENH_I18N:\n\t\treturn _XOPEN_ENH_I18N, nil\n\tcase SC_XOPEN_REALTIME:\n\t\treturn _XOPEN_REALTIME, nil\n\tcase SC_XOPEN_REALTIME_THREADS:\n\t\treturn _XOPEN_REALTIME_THREADS, nil\n\tcase SC_XOPEN_SHM:\n\t\treturn _XOPEN_SHM, nil\n\tcase SC_XOPEN_STREAMS:\n\t\treturn -1, nil\n\tcase SC_XOPEN_UNIX:\n\t\treturn _XOPEN_UNIX, nil\n\n\tcase SC_PHYS_PAGES:\n\t\treturn sysctl64(\"hw.availpages\"), nil\n\tcase SC_NPROCESSORS_CONF:\n\t\tfallthrough\n\tcase SC_NPROCESSORS_ONLN:\n\t\treturn sysctl32(\"hw.ncpu\"), nil\n\t}\n\n\treturn sysconfGeneric(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_freebsd.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage sysconf\n\nimport \"golang.org/x/sys/unix\"\n\nconst (\n\t_HOST_NAME_MAX  = _MAXHOSTNAMELEN - 1\n\t_LOGIN_NAME_MAX = _MAXLOGNAME\n\t_SYMLOOP_MAX    = _MAXSYMLINKS\n)\n\n// sysconf implements sysconf(3) as in the FreeBSD 12 libc.\nfunc sysconf(name int) (int64, error) {\n\tswitch name {\n\tcase SC_AIO_LISTIO_MAX:\n\t\treturn sysctl32(\"p1003_1b.aio_listio_max\"), nil\n\tcase SC_AIO_MAX:\n\t\treturn sysctl32(\"p1003_1b.aio_max\"), nil\n\tcase SC_AIO_PRIO_DELTA_MAX:\n\t\treturn sysctl32(\"p1003_1b.aio_prio_delta_max\"), nil\n\tcase SC_ARG_MAX:\n\t\treturn sysctl32(\"kern.argmax\"), nil\n\tcase SC_ATEXIT_MAX:\n\t\treturn _ATEXIT_SIZE, nil\n\tcase SC_CHILD_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn rlim.Cur, nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_CLK_TCK:\n\t\treturn _CLK_TCK, nil\n\tcase SC_DELAYTIMER_MAX:\n\t\treturn sysctl32(\"p1003_1b.delaytimer_max\"), nil\n\tcase SC_GETGR_R_SIZE_MAX, SC_GETPW_R_SIZE_MAX:\n\t\treturn -1, nil\n\tcase SC_IOV_MAX:\n\t\treturn sysctl32(\"kern.iov_max\"), nil\n\tcase SC_MQ_OPEN_MAX:\n\t\treturn yesno(sysctl32(\"p1003_1b.mq_open_max\")), nil\n\tcase SC_MQ_PRIO_MAX:\n\t\treturn _MQ_PRIO_MAX, nil\n\tcase SC_NGROUPS_MAX:\n\t\treturn sysctl32(\"kern.ngroups\"), nil\n\tcase SC_OPEN_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn rlim.Cur, nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_RTSIG_MAX:\n\t\treturn sysctl32(\"p1003_1b.rtsig_max\"), nil\n\tcase SC_SEM_NSEMS_MAX:\n\t\treturn -1, nil\n\tcase SC_SEM_VALUE_MAX:\n\t\treturn _SEM_VALUE_MAX, nil\n\tcase SC_SIGQUEUE_MAX:\n\t\treturn sysctl32(\"p1003_1b.sigqueue_max\"), nil\n\tcase SC_STREAM_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err != nil {\n\t\t\treturn -1, nil\n\t\t}\n\t\tif rlim.Cur == unix.RLIM_INFINITY {\n\t\t\treturn -1, nil\n\t\t}\n\t\tif rlim.Cur > _LONG_MAX {\n\t\t\treturn -1, unix.EOVERFLOW\n\t\t}\n\t\tif rlim.Cur > _SHRT_MAX {\n\t\t\treturn _SHRT_MAX, nil\n\t\t}\n\t\treturn rlim.Cur, nil\n\tcase SC_THREAD_DESTRUCTOR_ITERATIONS:\n\t\treturn _PTHREAD_DESTRUCTOR_ITERATIONS, nil\n\tcase SC_THREAD_KEYS_MAX:\n\t\treturn _PTHREAD_KEYS_MAX, nil\n\tcase SC_THREAD_PRIO_INHERIT:\n\t\treturn _POSIX_THREAD_PRIO_INHERIT, nil\n\tcase SC_THREAD_PRIO_PROTECT:\n\t\treturn _POSIX_THREAD_PRIO_PROTECT, nil\n\tcase SC_THREAD_STACK_MIN:\n\t\treturn _PTHREAD_STACK_MIN, nil\n\tcase SC_THREAD_THREADS_MAX:\n\t\treturn -1, nil\n\tcase SC_TIMER_MAX:\n\t\treturn yesno(sysctl32(\"p1003_1b.timer_max\")), nil\n\tcase SC_TTY_NAME_MAX:\n\t\treturn pathconf(_PATH_DEV, _PC_NAME_MAX), nil\n\tcase SC_TZNAME_MAX:\n\t\treturn pathconf(_PATH_ZONEINFO, _PC_NAME_MAX), nil\n\n\tcase SC_IPV6:\n\t\tif _POSIX_IPV6 == 0 {\n\t\t\tfd, err := unix.Socket(unix.AF_INET6, unix.SOCK_DGRAM, 0)\n\t\t\tif err == nil && fd >= 0 {\n\t\t\t\tunix.Close(fd)\n\t\t\t\treturn int64(200112), nil\n\t\t\t}\n\t\t\treturn 0, nil\n\t\t}\n\t\treturn _POSIX_IPV6, nil\n\tcase SC_MESSAGE_PASSING:\n\t\tif _POSIX_MESSAGE_PASSING == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.message_passing\")), nil\n\t\t}\n\t\treturn _POSIX_MESSAGE_PASSING, nil\n\tcase SC_PRIORITIZED_IO:\n\t\tif _POSIX_PRIORITIZED_IO == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.prioritized_io\")), nil\n\t\t}\n\t\treturn _POSIX_PRIORITIZED_IO, nil\n\tcase SC_PRIORITY_SCHEDULING:\n\t\tif _POSIX_PRIORITY_SCHEDULING == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.priority_scheduling\")), nil\n\t\t}\n\t\treturn _POSIX_PRIORITY_SCHEDULING, nil\n\tcase SC_REALTIME_SIGNALS:\n\t\tif _POSIX_REALTIME_SIGNALS == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.realtime_signals\")), nil\n\t\t}\n\t\treturn _POSIX_REALTIME_SIGNALS, nil\n\tcase SC_SAVED_IDS:\n\t\treturn yesno(sysctl32(\"kern.saved_ids\")), nil\n\tcase SC_SEMAPHORES:\n\t\tif _POSIX_SEMAPHORES == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.semaphores\")), nil\n\t\t}\n\t\treturn _POSIX_SEMAPHORES, nil\n\tcase SC_SPAWN:\n\t\treturn _POSIX_SPAWN, nil\n\tcase SC_SPIN_LOCKS:\n\t\treturn _POSIX_SPIN_LOCKS, nil\n\tcase SC_SPORADIC_SERVER:\n\t\treturn _POSIX_SPORADIC_SERVER, nil\n\tcase SC_SYNCHRONIZED_IO:\n\t\tif _POSIX_SYNCHRONIZED_IO == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.synchronized_io\")), nil\n\t\t}\n\t\treturn _POSIX_SYNCHRONIZED_IO, nil\n\tcase SC_THREAD_ATTR_STACKADDR:\n\t\treturn _POSIX_THREAD_ATTR_STACKADDR, nil\n\tcase SC_THREAD_ATTR_STACKSIZE:\n\t\treturn _POSIX_THREAD_ATTR_STACKSIZE, nil\n\tcase SC_THREAD_CPUTIME:\n\t\treturn _POSIX_THREAD_CPUTIME, nil\n\tcase SC_THREAD_PRIORITY_SCHEDULING:\n\t\treturn _POSIX_THREAD_PRIORITY_SCHEDULING, nil\n\tcase SC_THREAD_PROCESS_SHARED:\n\t\treturn _POSIX_THREAD_PROCESS_SHARED, nil\n\tcase SC_THREAD_SAFE_FUNCTIONS:\n\t\treturn _POSIX_THREAD_SAFE_FUNCTIONS, nil\n\tcase SC_TIMERS:\n\t\tif _POSIX_TIMERS == 0 {\n\t\t\treturn yesno(sysctl32(\"p1003_1b.timers\")), nil\n\t\t}\n\t\treturn _POSIX_TIMERS, nil\n\tcase SC_TRACE:\n\t\treturn _POSIX_TRACE, nil\n\tcase SC_TYPED_MEMORY_OBJECTS:\n\t\treturn _POSIX_TYPED_MEMORY_OBJECTS, nil\n\tcase SC_VERSION:\n\t\t// TODO(tk): FreeBSD libc uses sysctl(CTL_KERN, KERN_POSIX1)\n\t\treturn _POSIX_VERSION, nil\n\n\t\t/* TODO(tk): these need GOARCH-dependent integer size checks\n\t\tcase SC_V6_ILP32_OFF32:\n\t\t\treturn _V6_ILP32_OFF32, nil\n\t\tcase SC_V6_ILP32_OFFBIG:\n\t\t\treturn _V6_ILP32_OFFBIG, nil\n\t\tcase SC_V6_LP64_OFF64:\n\t\t\treturn _V6_LP64_OFF64, nil\n\t\tcase SC_V6_LPBIG_OFFBIG:\n\t\t\treturn _V6_LPBIG_OFFBIG, nil\n\t\t*/\n\n\tcase SC_2_CHAR_TERM:\n\t\treturn _POSIX2_CHAR_TERM, nil\n\tcase SC_2_PBS,\n\t\tSC_2_PBS_ACCOUNTING,\n\t\tSC_2_PBS_CHECKPOINT,\n\t\tSC_2_PBS_LOCATE,\n\t\tSC_2_PBS_MESSAGE,\n\t\tSC_2_PBS_TRACK:\n\t\treturn _POSIX2_PBS, nil\n\tcase SC_2_UPE:\n\t\treturn _POSIX2_UPE, nil\n\n\tcase SC_XOPEN_CRYPT:\n\t\treturn _XOPEN_CRYPT, nil\n\tcase SC_XOPEN_ENH_I18N:\n\t\treturn _XOPEN_ENH_I18N, nil\n\tcase SC_XOPEN_REALTIME:\n\t\treturn _XOPEN_REALTIME, nil\n\tcase SC_XOPEN_REALTIME_THREADS:\n\t\treturn _XOPEN_REALTIME_THREADS, nil\n\tcase SC_XOPEN_SHM:\n\t\treturn _XOPEN_SHM, nil\n\tcase SC_XOPEN_STREAMS:\n\t\treturn -1, nil\n\tcase SC_XOPEN_UNIX:\n\t\treturn _XOPEN_UNIX, nil\n\n\tcase SC_PHYS_PAGES:\n\t\tif val, err := unix.SysctlUint64(\"hw.availpages\"); err == nil {\n\t\t\treturn int64(val), nil\n\t\t}\n\t\treturn -1, nil\n\tcase SC_NPROCESSORS_CONF:\n\t\tfallthrough\n\tcase SC_NPROCESSORS_ONLN:\n\t\tif val, err := unix.SysctlUint32(\"hw.ncpu\"); err == nil {\n\t\t\treturn int64(val), nil\n\t\t}\n\t\treturn -1, nil\n\t}\n\n\treturn sysconfGeneric(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_generic.go",
    "content": "// Copyright 2021 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd\n// +build darwin dragonfly freebsd linux netbsd openbsd\n\npackage sysconf\n\nimport \"os\"\n\nfunc sysconfGeneric(name int) (int64, error) {\n\t// POSIX default values\n\tif sc, err := sysconfPOSIX(name); err == nil {\n\t\treturn sc, nil\n\t}\n\n\tswitch name {\n\tcase SC_BC_BASE_MAX:\n\t\treturn _BC_BASE_MAX, nil\n\tcase SC_BC_DIM_MAX:\n\t\treturn _BC_DIM_MAX, nil\n\tcase SC_BC_SCALE_MAX:\n\t\treturn _BC_SCALE_MAX, nil\n\tcase SC_BC_STRING_MAX:\n\t\treturn _BC_STRING_MAX, nil\n\tcase SC_COLL_WEIGHTS_MAX:\n\t\treturn _COLL_WEIGHTS_MAX, nil\n\tcase SC_EXPR_NEST_MAX:\n\t\treturn _EXPR_NEST_MAX, nil\n\tcase SC_HOST_NAME_MAX:\n\t\treturn _HOST_NAME_MAX, nil\n\tcase SC_LINE_MAX:\n\t\treturn _LINE_MAX, nil\n\tcase SC_LOGIN_NAME_MAX:\n\t\treturn _LOGIN_NAME_MAX, nil\n\tcase SC_PAGESIZE: // same as SC_PAGE_SIZE\n\t\treturn int64(os.Getpagesize()), nil\n\tcase SC_RE_DUP_MAX:\n\t\treturn _RE_DUP_MAX, nil\n\tcase SC_SYMLOOP_MAX:\n\t\treturn _SYMLOOP_MAX, nil\n\t}\n\n\treturn -1, errInvalid\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_linux.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage sysconf\n\nimport (\n\t\"bufio\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/tklauser/numcpus\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t// CLK_TCK is a constant on Linux for all architectures except alpha and ia64.\n\t// See e.g.\n\t// https://git.musl-libc.org/cgit/musl/tree/src/conf/sysconf.c#n30\n\t// https://github.com/containerd/cgroups/pull/12\n\t// https://lore.kernel.org/lkml/agtlq6$iht$1@penguin.transmeta.com/\n\t_SYSTEM_CLK_TCK = 100\n)\n\nfunc readProcFsInt64(path string, fallback int64) int64 {\n\tdata, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\treturn fallback\n\t}\n\ti, err := strconv.ParseInt(string(data[:len(data)-1]), 0, 64)\n\tif err != nil {\n\t\treturn fallback\n\t}\n\treturn i\n}\n\n// getMemPages computes mem*unit/os.Getpagesize(), but avoids overflowing int64.\nfunc getMemPages(mem uint64, unit uint32) int64 {\n\tpageSize := os.Getpagesize()\n\tfor unit > 1 && pageSize > 1 {\n\t\tunit >>= 1\n\t\tpageSize >>= 1\n\t}\n\tmem *= uint64(unit)\n\tfor pageSize > 1 {\n\t\tpageSize >>= 1\n\t\tmem >>= 1\n\t}\n\treturn int64(mem)\n}\n\nfunc getPhysPages() int64 {\n\tvar si unix.Sysinfo_t\n\terr := unix.Sysinfo(&si)\n\tif err != nil {\n\t\treturn int64(0)\n\t}\n\treturn getMemPages(uint64(si.Totalram), si.Unit)\n}\n\nfunc getAvPhysPages() int64 {\n\tvar si unix.Sysinfo_t\n\terr := unix.Sysinfo(&si)\n\tif err != nil {\n\t\treturn int64(0)\n\t}\n\treturn getMemPages(uint64(si.Freeram), si.Unit)\n}\n\nfunc getNprocsSysfs() (int64, error) {\n\tn, err := numcpus.GetOnline()\n\treturn int64(n), err\n}\n\nfunc getNprocsProcStat() (int64, error) {\n\tf, err := os.Open(\"/proc/stat\")\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tdefer f.Close()\n\n\tcount := int64(0)\n\ts := bufio.NewScanner(f)\n\tfor s.Scan() {\n\t\tif line := strings.TrimSpace(s.Text()); strings.HasPrefix(line, \"cpu\") {\n\t\t\tl := strings.SplitN(line, \" \", 2)\n\t\t\t_, err := strconv.ParseInt(l[0][3:], 10, 64)\n\t\t\tif err == nil {\n\t\t\t\tcount++\n\t\t\t}\n\t\t} else {\n\t\t\t// The current format of /proc/stat has all the\n\t\t\t// cpu* lines at the beginning. Assume this\n\t\t\t// stays this way.\n\t\t\tbreak\n\t\t}\n\t}\n\treturn count, nil\n}\n\nfunc getNprocs() int64 {\n\tcount, err := getNprocsSysfs()\n\tif err == nil {\n\t\treturn count\n\t}\n\n\tcount, err = getNprocsProcStat()\n\tif err == nil {\n\t\treturn count\n\t}\n\n\t// default to the value determined at runtime startup if all else fails\n\treturn int64(runtime.NumCPU())\n}\n\nfunc getNprocsConf() int64 {\n\tcount, err := numcpus.GetConfigured()\n\tif err == nil {\n\t\treturn int64(count)\n\t}\n\n\t// TODO(tk): fall back to reading /proc/cpuinfo on legacy systems\n\t// without sysfs?\n\n\treturn getNprocs()\n}\n\nfunc hasClock(clockid int32) bool {\n\tvar res unix.Timespec\n\tif err := unix.ClockGetres(clockid, &res); err != nil {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc max(a, b int64) int64 {\n\tif a > b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc sysconf(name int) (int64, error) {\n\tswitch name {\n\tcase SC_AIO_LISTIO_MAX:\n\t\treturn -1, nil\n\tcase SC_AIO_MAX:\n\t\treturn -1, nil\n\tcase SC_AIO_PRIO_DELTA_MAX:\n\t\treturn _AIO_PRIO_DELTA_MAX, nil\n\tcase SC_ARG_MAX:\n\t\targMax := int64(_POSIX_ARG_MAX)\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_STACK, &rlim); err == nil {\n\t\t\targMax = max(argMax, int64(rlim.Cur/4))\n\t\t}\n\t\treturn argMax, nil\n\tcase SC_ATEXIT_MAX:\n\t\treturn _INT_MAX, nil\n\tcase SC_CHILD_MAX:\n\t\tchildMax := int64(-1)\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlim); err == nil && rlim.Cur != unix.RLIM_INFINITY {\n\t\t\tchildMax = int64(rlim.Cur)\n\t\t}\n\t\treturn childMax, nil\n\tcase SC_CLK_TCK:\n\t\treturn _SYSTEM_CLK_TCK, nil\n\tcase SC_DELAYTIMER_MAX:\n\t\treturn _DELAYTIMER_MAX, nil\n\tcase SC_GETGR_R_SIZE_MAX:\n\t\treturn _NSS_BUFLEN_GROUP, nil\n\tcase SC_GETPW_R_SIZE_MAX:\n\t\treturn _NSS_BUFLEN_PASSWD, nil\n\tcase SC_MQ_OPEN_MAX:\n\t\treturn -1, nil\n\tcase SC_MQ_PRIO_MAX:\n\t\treturn _MQ_PRIO_MAX, nil\n\tcase SC_NGROUPS_MAX:\n\t\treturn readProcFsInt64(\"/proc/sys/kernel/ngroups_max\", _NGROUPS_MAX), nil\n\tcase SC_OPEN_MAX:\n\t\topenMax := int64(_OPEN_MAX)\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {\n\t\t\topenMax = int64(rlim.Cur)\n\t\t}\n\t\treturn openMax, nil\n\tcase SC_RTSIG_MAX:\n\t\treturn _RTSIG_MAX, nil\n\tcase SC_SEM_NSEMS_MAX:\n\t\treturn -1, nil\n\tcase SC_SEM_VALUE_MAX:\n\t\treturn _SEM_VALUE_MAX, nil\n\tcase SC_SIGQUEUE_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_SIGPENDING, &rlim); err == nil {\n\t\t\treturn int64(rlim.Cur), nil\n\t\t}\n\t\treturn readProcFsInt64(\"/proc/sys/kernel/rtsig-max\", _POSIX_SIGQUEUE_MAX), nil\n\tcase SC_STREAM_MAX:\n\t\treturn _STREAM_MAX, nil\n\tcase SC_THREAD_DESTRUCTOR_ITERATIONS:\n\t\treturn _POSIX_THREAD_DESTRUCTOR_ITERATIONS, nil\n\tcase SC_THREAD_KEYS_MAX:\n\t\treturn _PTHREAD_KEYS_MAX, nil\n\tcase SC_THREAD_PRIO_INHERIT:\n\t\treturn _POSIX_THREAD_PRIO_INHERIT, nil\n\tcase SC_THREAD_PRIO_PROTECT:\n\t\treturn _POSIX_THREAD_PRIO_PROTECT, nil\n\tcase SC_THREAD_STACK_MIN:\n\t\treturn _PTHREAD_STACK_MIN, nil\n\tcase SC_THREAD_THREADS_MAX:\n\t\treturn -1, nil\n\tcase SC_TIMER_MAX:\n\t\treturn -1, nil\n\tcase SC_TTY_NAME_MAX:\n\t\treturn _TTY_NAME_MAX, nil\n\tcase SC_TZNAME_MAX:\n\t\treturn -1, nil\n\n\tcase SC_CPUTIME:\n\t\tif hasClock(unix.CLOCK_PROCESS_CPUTIME_ID) {\n\t\t\treturn _POSIX_VERSION, nil\n\t\t}\n\t\treturn -1, nil\n\tcase SC_MONOTONIC_CLOCK:\n\t\tif hasClock(unix.CLOCK_MONOTONIC) {\n\t\t\treturn _POSIX_VERSION, nil\n\t\t}\n\t\treturn -1, nil\n\tcase SC_SAVED_IDS:\n\t\treturn _POSIX_SAVED_IDS, nil\n\tcase SC_SPAWN:\n\t\treturn _POSIX_SPAWN, nil\n\tcase SC_SPIN_LOCKS:\n\t\treturn _POSIX_SPIN_LOCKS, nil\n\tcase SC_SPORADIC_SERVER:\n\t\treturn _POSIX_SPORADIC_SERVER, nil\n\tcase SC_SYNCHRONIZED_IO:\n\t\treturn _POSIX_SYNCHRONIZED_IO, nil\n\tcase SC_THREAD_ATTR_STACKADDR:\n\t\treturn _POSIX_THREAD_ATTR_STACKADDR, nil\n\tcase SC_THREAD_ATTR_STACKSIZE:\n\t\treturn _POSIX_THREAD_ATTR_STACKSIZE, nil\n\tcase SC_THREAD_CPUTIME:\n\t\tif hasClock(unix.CLOCK_THREAD_CPUTIME_ID) {\n\t\t\treturn _POSIX_VERSION, nil\n\t\t}\n\t\treturn -1, nil\n\tcase SC_THREAD_PRIORITY_SCHEDULING:\n\t\treturn _POSIX_THREAD_PRIORITY_SCHEDULING, nil\n\tcase SC_THREAD_PROCESS_SHARED:\n\t\treturn _POSIX_THREAD_PROCESS_SHARED, nil\n\tcase SC_THREAD_SAFE_FUNCTIONS:\n\t\treturn _POSIX_THREAD_SAFE_FUNCTIONS, nil\n\tcase SC_THREAD_SPORADIC_SERVER:\n\t\treturn _POSIX_THREAD_SPORADIC_SERVER, nil\n\tcase SC_TRACE:\n\t\treturn _POSIX_TRACE, nil\n\tcase SC_TRACE_EVENT_FILTER:\n\t\treturn _POSIX_TRACE_EVENT_FILTER, nil\n\tcase SC_TRACE_EVENT_NAME_MAX:\n\t\treturn -1, nil\n\tcase SC_TRACE_INHERIT:\n\t\treturn _POSIX_TRACE_INHERIT, nil\n\tcase SC_TRACE_LOG:\n\t\treturn _POSIX_TRACE_LOG, nil\n\tcase SC_TRACE_NAME_MAX:\n\t\treturn -1, nil\n\tcase SC_TRACE_SYS_MAX:\n\t\treturn -1, nil\n\tcase SC_TRACE_USER_EVENT_MAX:\n\t\treturn -1, nil\n\tcase SC_TYPED_MEMORY_OBJECTS:\n\t\treturn _POSIX_TYPED_MEMORY_OBJECTS, nil\n\n\tcase SC_V7_ILP32_OFF32:\n\t\treturn _POSIX_V7_ILP32_OFF32, nil\n\tcase SC_V7_ILP32_OFFBIG:\n\t\treturn _POSIX_V7_ILP32_OFFBIG, nil\n\tcase SC_V7_LP64_OFF64:\n\t\treturn _POSIX_V7_LP64_OFF64, nil\n\tcase SC_V7_LPBIG_OFFBIG:\n\t\treturn _POSIX_V7_LPBIG_OFFBIG, nil\n\n\tcase SC_V6_ILP32_OFF32:\n\t\treturn _POSIX_V6_ILP32_OFF32, nil\n\tcase SC_V6_ILP32_OFFBIG:\n\t\treturn _POSIX_V6_ILP32_OFFBIG, nil\n\tcase SC_V6_LP64_OFF64:\n\t\treturn _POSIX_V6_LP64_OFF64, nil\n\tcase SC_V6_LPBIG_OFFBIG:\n\t\treturn _POSIX_V6_LPBIG_OFFBIG, nil\n\n\tcase SC_2_C_VERSION:\n\t\treturn _POSIX2_C_VERSION, nil\n\tcase SC_2_CHAR_TERM:\n\t\treturn _POSIX2_CHAR_TERM, nil\n\tcase SC_2_PBS,\n\t\tSC_2_PBS_ACCOUNTING,\n\t\tSC_2_PBS_CHECKPOINT,\n\t\tSC_2_PBS_LOCATE,\n\t\tSC_2_PBS_MESSAGE,\n\t\tSC_2_PBS_TRACK:\n\t\treturn -1, nil\n\tcase SC_2_UPE:\n\t\treturn -1, nil\n\n\tcase SC_XOPEN_CRYPT:\n\t\t// removed in glibc 2.28\n\t\treturn -1, nil\n\tcase SC_XOPEN_ENH_I18N:\n\t\treturn _XOPEN_ENH_I18N, nil\n\tcase SC_XOPEN_REALTIME:\n\t\treturn _XOPEN_REALTIME, nil\n\tcase SC_XOPEN_REALTIME_THREADS:\n\t\treturn _XOPEN_REALTIME_THREADS, nil\n\tcase SC_XOPEN_SHM:\n\t\treturn _XOPEN_SHM, nil\n\tcase SC_XOPEN_STREAMS:\n\t\treturn -1, nil\n\tcase SC_XOPEN_UNIX:\n\t\treturn _XOPEN_UNIX, nil\n\tcase SC_XOPEN_VERSION:\n\t\treturn _XOPEN_VERSION, nil\n\tcase SC_XOPEN_XCU_VERSION:\n\t\treturn _XOPEN_XCU_VERSION, nil\n\n\tcase SC_PHYS_PAGES:\n\t\treturn getPhysPages(), nil\n\tcase SC_AVPHYS_PAGES:\n\t\treturn getAvPhysPages(), nil\n\tcase SC_NPROCESSORS_CONF:\n\t\treturn getNprocsConf(), nil\n\tcase SC_NPROCESSORS_ONLN:\n\t\treturn getNprocs(), nil\n\tcase SC_UIO_MAXIOV: // same as _SC_IOV_MAX\n\t\treturn _UIO_MAXIOV, nil\n\t}\n\n\treturn sysconfGeneric(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_netbsd.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage sysconf\n\nimport (\n\t\"sync\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t_HOST_NAME_MAX  = _MAXHOSTNAMELEN\n\t_LOGIN_NAME_MAX = _MAXLOGNAME + 1\n\t_SYMLOOP_MAX    = _MAXSYMLINKS\n\n\t_POSIX2_C_BIND    = 1\n\t_POSIX2_C_DEV     = -1\n\t_POSIX2_CHAR_TERM = -1\n\t_POSIX2_FORT_DEV  = -1\n\t_POSIX2_FORT_RUN  = -1\n\t_POSIX2_LOCALEDEF = -1\n\t_POSIX2_SW_DEV    = -1\n\t_POSIX2_UPE       = -1\n)\n\nvar (\n\tclktck     int64\n\tclktckOnce sync.Once\n)\n\nfunc sysconfPOSIX(name int) (int64, error) {\n\t// NetBSD does not define all _POSIX_* values used in sysconf_posix.go\n\t// The supported ones are handled in sysconf below.\n\treturn -1, errInvalid\n}\n\nfunc sysconf(name int) (int64, error) {\n\t// NetBSD uses sysctl to get some of these values. For the user.* namespace,\n\t// calls get handled by user_sysctl in /usr/src/lib/libc/gen/sysctl.c\n\t// Duplicate the relevant values here.\n\n\tswitch name {\n\n\t// 1003.1\n\tcase SC_ARG_MAX:\n\t\treturn sysctl32(\"kern.argmax\"), nil\n\tcase SC_CHILD_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn int64(rlim.Cur), nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_CLK_TCK:\n\t\tclktckOnce.Do(func() {\n\t\t\tclktck = -1\n\t\t\tif ci, err := unix.SysctlClockinfo(\"kern.clockrate\"); err == nil {\n\t\t\t\tclktck = int64(ci.Hz)\n\t\t\t}\n\t\t})\n\t\treturn clktck, nil\n\tcase SC_NGROUPS_MAX:\n\t\treturn sysctl32(\"kern.ngroups\"), nil\n\tcase SC_JOB_CONTROL:\n\t\treturn sysctl32(\"kern.job_control\"), nil\n\tcase SC_OPEN_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {\n\t\t\treturn int64(rlim.Cur), nil\n\t\t}\n\t\treturn -1, nil\n\tcase SC_STREAM_MAX:\n\t\t// sysctl(\"user.stream_max\")\n\t\treturn _FOPEN_MAX, nil\n\tcase SC_TZNAME_MAX:\n\t\t// sysctl(\"user.tzname_max\")\n\t\treturn _NAME_MAX, nil\n\tcase SC_SAVED_IDS:\n\t\treturn yesno(sysctl32(\"kern.saved_ids\")), nil\n\tcase SC_VERSION:\n\t\treturn sysctl32(\"kern.posix1version\"), nil\n\n\t// 1003.1b\n\tcase SC_FSYNC:\n\t\treturn sysctl32(\"kern.fsync\"), nil\n\tcase SC_SYNCHRONIZED_IO:\n\t\treturn sysctl32(\"kern.synchronized_io\"), nil\n\tcase SC_MAPPED_FILES:\n\t\treturn sysctl32(\"kern.mapped_files\"), nil\n\tcase SC_MEMLOCK:\n\t\treturn sysctl32(\"kern.memlock\"), nil\n\tcase SC_MEMLOCK_RANGE:\n\t\treturn sysctl32(\"kern.memlock_range\"), nil\n\tcase SC_MEMORY_PROTECTION:\n\t\treturn sysctl32(\"kern.memory_protection\"), nil\n\tcase SC_MONOTONIC_CLOCK:\n\t\treturn sysctl32(\"kern.monotonic_clock\"), nil\n\tcase SC_SEMAPHORES:\n\t\treturn sysctl32(\"kern.posix_semaphores\"), nil\n\tcase SC_TIMERS:\n\t\treturn sysctl32(\"kern.posix_timers\"), nil\n\n\t// 1003.1c\n\tcase SC_LOGIN_NAME_MAX:\n\t\treturn sysctl32(\"kern.login_name_max\"), nil\n\tcase SC_THREADS:\n\t\treturn sysctl32(\"kern.posix_threads\"), nil\n\n\t// 1003.1j\n\tcase SC_BARRIERS:\n\t\treturn yesno(sysctl32(\"kern.posix_barriers\")), nil\n\tcase SC_SPIN_LOCKS:\n\t\treturn yesno(sysctl32(\"kern.posix_spin_locks\")), nil\n\tcase SC_READER_WRITER_LOCKS:\n\t\treturn yesno(sysctl32(\"kern.posix_reader_writer_locks\")), nil\n\n\t// 1003.2\n\tcase SC_2_VERSION:\n\t\t// sysctl user.posix2_version\n\t\treturn _POSIX2_VERSION, nil\n\tcase SC_2_C_BIND:\n\t\t// sysctl user.posix2_c_bind\n\t\treturn _POSIX2_C_BIND, nil\n\tcase SC_2_C_DEV:\n\t\t// sysctl user.posix2_c_dev\n\t\treturn _POSIX2_C_DEV, nil\n\tcase SC_2_CHAR_TERM:\n\t\t// sysctl user.posix2_char_term\n\t\treturn _POSIX2_CHAR_TERM, nil\n\tcase SC_2_FORT_DEV:\n\t\t// sysctl user.posix2_fort_dev\n\t\treturn _POSIX2_FORT_DEV, nil\n\tcase SC_2_FORT_RUN:\n\t\t// sysctl user.posix2_fort_run\n\t\treturn _POSIX2_FORT_RUN, nil\n\tcase SC_2_LOCALEDEF:\n\t\t// sysctl user.posix2_localedef\n\t\treturn _POSIX2_LOCALEDEF, nil\n\tcase SC_2_SW_DEV:\n\t\t// sysctl user.posix2_sw_dev\n\t\treturn _POSIX2_SW_DEV, nil\n\tcase SC_2_UPE:\n\t\t// sysctl user.posix2_upe\n\t\treturn _POSIX2_UPE, nil\n\n\t// XPG 4.2\n\tcase SC_IOV_MAX:\n\t\treturn sysctl32(\"kern.iov_max\"), nil\n\tcase SC_XOPEN_SHM:\n\t\treturn yesno(sysctl32(\"kern.ipc.sysvshm\")), nil\n\n\t// 1003.1-2001, XSI Option Group\n\tcase SC_AIO_LISTIO_MAX:\n\t\treturn sysctl32(\"kern.aio_listio_max\"), nil\n\tcase SC_AIO_MAX:\n\t\treturn sysctl32(\"kern.aio_max\"), nil\n\tcase SC_ASYNCHRONOUS_IO:\n\t\treturn yesno(sysctl32(\"kern.posix_aio\")), nil\n\tcase SC_MESSAGE_PASSING:\n\t\treturn yesno(sysctl32(\"kern.posix_msg\")), nil\n\tcase SC_MQ_OPEN_MAX:\n\t\treturn sysctl32(\"kern.mqueue.mq_open_max\"), nil\n\tcase SC_MQ_PRIO_MAX:\n\t\treturn sysctl32(\"kern.mqueue.mq_prio_max\"), nil\n\tcase SC_PRIORITY_SCHEDULING:\n\t\treturn yesno(sysctl32(\"kern.posix_sched\")), nil\n\tcase SC_ATEXIT_MAX:\n\t\t// sysctl(\"user.atexit_max\")\n\t\treturn -1, nil // TODO\n\n\t// 1003.1-2001, TSF\n\tcase SC_GETGR_R_SIZE_MAX:\n\t\treturn _GETGR_R_SIZE_MAX, nil\n\tcase SC_GETPW_R_SIZE_MAX:\n\t\treturn _GETPW_R_SIZE_MAX, nil\n\n\t// Unsorted\n\tcase SC_HOST_NAME_MAX:\n\t\treturn _MAXHOSTNAMELEN, nil\n\tcase SC_PASS_MAX:\n\t\treturn _PASSWORD_LEN, nil\n\tcase SC_REGEXP:\n\t\treturn _POSIX_REGEXP, nil\n\tcase SC_SHARED_MEMORY_OBJECTS:\n\t\treturn _POSIX_SHARED_MEMORY_OBJECTS, nil\n\tcase SC_SHELL:\n\t\treturn _POSIX_SHELL, nil\n\tcase SC_SPAWN:\n\t\treturn _POSIX_SPAWN, nil\n\n\t// Extensions\n\tcase SC_NPROCESSORS_CONF:\n\t\treturn sysctl32(\"hw.ncpu\"), nil\n\tcase SC_NPROCESSORS_ONLN:\n\t\treturn sysctl32(\"hw.ncpuonline\"), nil\n\n\t// Linux/Solaris\n\tcase SC_PHYS_PAGES:\n\t\treturn sysctl64(\"hw.physmem64\") / int64(unix.Getpagesize()), nil\n\n\t// Native\n\tcase SC_SCHED_RT_TS:\n\t\treturn sysctl32(\"kern.sched.rtts\"), nil\n\tcase SC_SCHED_PRI_MIN:\n\t\treturn sysctl32(\"kern.sched.pri_min\"), nil\n\tcase SC_SCHED_PRI_MAX:\n\t\treturn sysctl32(\"kern.sched.pri_max\"), nil\n\tcase SC_THREAD_DESTRUCTOR_ITERATIONS:\n\t\treturn _POSIX_THREAD_DESTRUCTOR_ITERATIONS, nil\n\tcase SC_THREAD_KEYS_MAX:\n\t\treturn _POSIX_THREAD_KEYS_MAX, nil\n\tcase SC_THREAD_STACK_MIN:\n\t\treturn int64(unix.Getpagesize()), nil\n\tcase SC_THREAD_THREADS_MAX:\n\t\treturn sysctl32(\"kern.maxproc\"), nil\n\tcase SC_THREAD_ATTR_STACKADDR:\n\t\treturn _POSIX_THREAD_ATTR_STACKADDR, nil\n\tcase SC_THREAD_ATTR_STACKSIZE:\n\t\treturn _POSIX_THREAD_ATTR_STACKSIZE, nil\n\tcase SC_THREAD_SAFE_FUNCTIONS:\n\t\treturn _POSIX_THREAD_SAFE_FUNCTIONS, nil\n\tcase SC_THREAD_PRIO_PROTECT:\n\t\treturn _POSIX_THREAD_PRIO_PROTECT, nil\n\tcase SC_THREAD_PRIORITY_SCHEDULING,\n\t\tSC_THREAD_PRIO_INHERIT,\n\t\tSC_THREAD_PROCESS_SHARED:\n\t\treturn -1, nil\n\tcase SC_TTY_NAME_MAX:\n\t\treturn pathconf(_PATH_DEV, _PC_NAME_MAX), nil\n\tcase SC_TIMER_MAX:\n\t\treturn _POSIX_TIMER_MAX, nil\n\tcase SC_SEM_NSEMS_MAX:\n\t\treturn _LONG_MAX, nil\n\tcase SC_CPUTIME:\n\t\treturn _POSIX_CPUTIME, nil\n\tcase SC_THREAD_CPUTIME:\n\t\treturn _POSIX_THREAD_CPUTIME, nil\n\tcase SC_DELAYTIMER_MAX:\n\t\treturn _POSIX_DELAYTIMER_MAX, nil\n\tcase SC_SIGQUEUE_MAX:\n\t\treturn _POSIX_SIGQUEUE_MAX, nil\n\tcase SC_REALTIME_SIGNALS:\n\t\treturn 200112, nil\n\t}\n\n\treturn sysconfGeneric(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_openbsd.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage sysconf\n\nimport \"golang.org/x/sys/unix\"\n\n// sysconf implements sysconf(3) as in the OpenBSD 6.3 libc.\nfunc sysconf(name int) (int64, error) {\n\tswitch name {\n\tcase SC_AIO_LISTIO_MAX,\n\t\tSC_AIO_MAX,\n\t\tSC_AIO_PRIO_DELTA_MAX:\n\t\treturn -1, nil\n\tcase SC_ARG_MAX:\n\t\treturn sysctl32(\"kern.argmax\"), nil\n\tcase SC_ATEXIT_MAX:\n\t\treturn -1, nil\n\tcase SC_CHILD_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NPROC, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn int64(rlim.Cur), nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_CLK_TCK:\n\t\treturn _CLK_TCK, nil\n\tcase SC_DELAYTIMER_MAX:\n\t\treturn -1, nil\n\tcase SC_GETGR_R_SIZE_MAX:\n\t\treturn _GR_BUF_LEN, nil\n\tcase SC_GETPW_R_SIZE_MAX:\n\t\treturn _PW_BUF_LEN, nil\n\tcase SC_IOV_MAX:\n\t\treturn _IOV_MAX, nil\n\tcase SC_LOGIN_NAME_MAX:\n\t\treturn _LOGIN_NAME_MAX, nil\n\tcase SC_NGROUPS_MAX:\n\t\treturn sysctl32(\"kern.ngroups\"), nil\n\tcase SC_OPEN_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\treturn int64(rlim.Cur), nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_SEM_NSEMS_MAX:\n\t\treturn -1, nil\n\tcase SC_SEM_VALUE_MAX:\n\t\treturn _SEM_VALUE_MAX, nil\n\tcase SC_SIGQUEUE_MAX:\n\t\treturn -1, nil\n\tcase SC_STREAM_MAX:\n\t\tvar rlim unix.Rlimit\n\t\tif err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlim); err == nil {\n\t\t\tif rlim.Cur != unix.RLIM_INFINITY {\n\t\t\t\tif rlim.Cur > _SHRT_MAX {\n\t\t\t\t\treturn _SHRT_MAX, nil\n\t\t\t\t}\n\t\t\t\treturn int64(rlim.Cur), nil\n\t\t\t}\n\t\t}\n\t\treturn -1, nil\n\tcase SC_THREAD_DESTRUCTOR_ITERATIONS:\n\t\treturn _PTHREAD_DESTRUCTOR_ITERATIONS, nil\n\tcase SC_THREAD_KEYS_MAX:\n\t\treturn _PTHREAD_KEYS_MAX, nil\n\tcase SC_THREAD_STACK_MIN:\n\t\treturn _PTHREAD_STACK_MIN, nil\n\tcase SC_THREAD_THREADS_MAX:\n\t\treturn -1, nil\n\tcase SC_TIMER_MAX:\n\t\treturn -1, nil\n\tcase SC_TTY_NAME_MAX:\n\t\treturn _TTY_NAME_MAX, nil\n\tcase SC_TZNAME_MAX:\n\t\treturn _NAME_MAX, nil\n\n\tcase SC_BARRIERS:\n\t\treturn _POSIX_BARRIERS, nil\n\tcase SC_FSYNC:\n\t\treturn _POSIX_FSYNC, nil\n\tcase SC_IPV6:\n\t\tif _POSIX_IPV6 == 0 {\n\t\t\tfd, err := unix.Socket(unix.AF_INET6, unix.SOCK_DGRAM, 0)\n\t\t\tif err == nil && fd >= 0 {\n\t\t\t\tunix.Close(fd)\n\t\t\t\treturn int64(200112), nil\n\t\t\t}\n\t\t\treturn 0, nil\n\t\t}\n\t\treturn _POSIX_IPV6, nil\n\tcase SC_JOB_CONTROL:\n\t\treturn _POSIX_JOB_CONTROL, nil\n\tcase SC_MAPPED_FILES:\n\t\treturn _POSIX_MAPPED_FILES, nil\n\tcase SC_MONOTONIC_CLOCK:\n\t\treturn _POSIX_MONOTONIC_CLOCK, nil\n\tcase SC_SAVED_IDS:\n\t\treturn _POSIX_SAVED_IDS, nil\n\tcase SC_SEMAPHORES:\n\t\treturn _POSIX_SEMAPHORES, nil\n\tcase SC_SPAWN:\n\t\treturn _POSIX_SPAWN, nil\n\tcase SC_SPIN_LOCKS:\n\t\treturn _POSIX_SPIN_LOCKS, nil\n\tcase SC_SPORADIC_SERVER:\n\t\treturn _POSIX_SPORADIC_SERVER, nil\n\tcase SC_SYNCHRONIZED_IO:\n\t\treturn _POSIX_SYNCHRONIZED_IO, nil\n\tcase SC_THREAD_ATTR_STACKADDR:\n\t\treturn _POSIX_THREAD_ATTR_STACKADDR, nil\n\tcase SC_THREAD_ATTR_STACKSIZE:\n\t\treturn _POSIX_THREAD_ATTR_STACKSIZE, nil\n\tcase SC_THREAD_CPUTIME:\n\t\treturn _POSIX_THREAD_CPUTIME, nil\n\tcase SC_THREAD_PRIO_INHERIT:\n\t\treturn _POSIX_THREAD_PRIO_INHERIT, nil\n\tcase SC_THREAD_PRIO_PROTECT:\n\t\treturn _POSIX_THREAD_PRIO_PROTECT, nil\n\tcase SC_THREAD_PRIORITY_SCHEDULING:\n\t\treturn _POSIX_THREAD_PRIORITY_SCHEDULING, nil\n\tcase SC_THREAD_PROCESS_SHARED:\n\t\treturn _POSIX_THREAD_PROCESS_SHARED, nil\n\tcase SC_THREAD_ROBUST_PRIO_INHERIT:\n\t\treturn _POSIX_THREAD_ROBUST_PRIO_INHERIT, nil\n\tcase SC_THREAD_ROBUST_PRIO_PROTECT:\n\t\treturn _POSIX_THREAD_ROBUST_PRIO_PROTECT, nil\n\tcase SC_THREAD_SAFE_FUNCTIONS:\n\t\treturn _POSIX_THREAD_SAFE_FUNCTIONS, nil\n\tcase SC_THREAD_SPORADIC_SERVER:\n\t\treturn _POSIX_THREAD_SPORADIC_SERVER, nil\n\tcase SC_THREADS:\n\t\treturn _POSIX_THREADS, nil\n\tcase SC_TIMEOUTS:\n\t\treturn _POSIX_TIMEOUTS, nil\n\tcase SC_TIMERS:\n\t\treturn _POSIX_TIMERS, nil\n\tcase SC_TRACE,\n\t\tSC_TRACE_EVENT_FILTER,\n\t\tSC_TRACE_EVENT_NAME_MAX,\n\t\tSC_TRACE_INHERIT,\n\t\tSC_TRACE_LOG:\n\t\treturn _POSIX_TRACE, nil\n\tcase SC_TYPED_MEMORY_OBJECTS:\n\t\treturn _POSIX_TYPED_MEMORY_OBJECTS, nil\n\n\tcase SC_V7_ILP32_OFF32:\n\t\treturn _POSIX_V7_ILP32_OFF32, nil\n\tcase SC_V7_ILP32_OFFBIG:\n\t\tif _POSIX_V7_ILP32_OFFBIG == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofPtr*_CHAR_BIT == 32 &&\n\t\t\t\tsizeofOffT*_CHAR_BIT >= 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _POSIX_V7_ILP32_OFFBIG, nil\n\tcase SC_V7_LP64_OFF64:\n\t\tif _POSIX_V7_LP64_OFF64 == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT == 64 &&\n\t\t\t\tunix.SizeofPtr*_CHAR_BIT == 64 &&\n\t\t\t\tsizeofOffT*_CHAR_BIT == 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _POSIX_V7_LP64_OFF64, nil\n\tcase SC_V7_LPBIG_OFFBIG:\n\t\tif _POSIX_V7_LPBIG_OFFBIG == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT >= 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT >= 64 &&\n\t\t\t\tunix.SizeofPtr*_CHAR_BIT >= 64 &&\n\t\t\t\tsizeofOffT*_CHAR_BIT >= 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _POSIX_V7_LPBIG_OFFBIG, nil\n\n\tcase SC_V6_ILP32_OFF32:\n\t\treturn _POSIX_V6_ILP32_OFF32, nil\n\tcase SC_V6_ILP32_OFFBIG:\n\t\tif _POSIX_V6_ILP32_OFFBIG == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofPtr*_CHAR_BIT == 32 &&\n\t\t\t\tsizeofOffT*_CHAR_BIT >= 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _POSIX_V6_ILP32_OFFBIG, nil\n\tcase SC_V6_LP64_OFF64:\n\t\tif _POSIX_V6_LP64_OFF64 == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT == 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT == 64 &&\n\t\t\t\tunix.SizeofPtr*_CHAR_BIT == 64 &&\n\t\t\t\tsizeofOffT*_CHAR_BIT == 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _POSIX_V6_LP64_OFF64, nil\n\tcase SC_V6_LPBIG_OFFBIG:\n\t\tif _POSIX_V6_LPBIG_OFFBIG == 0 {\n\t\t\tif unix.SizeofInt*_CHAR_BIT >= 32 &&\n\t\t\t\tunix.SizeofLong*_CHAR_BIT >= 64 &&\n\t\t\t\tunix.SizeofPtr*_CHAR_BIT >= 64 &&\n\t\t\t\tsizeofOffT*_CHAR_BIT >= 64 {\n\t\t\t\treturn 1, nil\n\t\t\t}\n\t\t\treturn -1, nil\n\t\t}\n\t\treturn _POSIX_V6_LPBIG_OFFBIG, nil\n\n\tcase SC_2_CHAR_TERM:\n\t\treturn _POSIX2_CHAR_TERM, nil\n\tcase SC_2_PBS,\n\t\tSC_2_PBS_ACCOUNTING,\n\t\tSC_2_PBS_CHECKPOINT,\n\t\tSC_2_PBS_LOCATE,\n\t\tSC_2_PBS_MESSAGE,\n\t\tSC_2_PBS_TRACK:\n\t\treturn _POSIX2_PBS, nil\n\tcase SC_2_UPE:\n\t\treturn _POSIX2_UPE, nil\n\tcase SC_2_VERSION:\n\t\treturn _POSIX2_VERSION, nil\n\n\tcase SC_XOPEN_CRYPT:\n\t\treturn _XOPEN_CRYPT, nil\n\tcase SC_XOPEN_ENH_I18N:\n\t\treturn _XOPEN_ENH_I18N, nil\n\tcase SC_XOPEN_REALTIME:\n\t\treturn _XOPEN_REALTIME, nil\n\tcase SC_XOPEN_REALTIME_THREADS:\n\t\treturn _XOPEN_REALTIME_THREADS, nil\n\tcase SC_XOPEN_SHM:\n\t\treturn _XOPEN_SHM, nil\n\tcase SC_XOPEN_STREAMS:\n\t\treturn _XOPEN_STREAMS, nil\n\tcase SC_XOPEN_UNIX:\n\t\treturn _XOPEN_UNIX, nil\n\tcase SC_XOPEN_UUCP:\n\t\treturn _XOPEN_UUCP, nil\n\n\tcase SC_AVPHYS_PAGES:\n\t\tif uvm, err := unix.SysctlUvmexp(\"vm.uvmexp\"); err == nil {\n\t\t\treturn int64(uvm.Free), nil\n\t\t}\n\t\treturn -1, nil\n\tcase SC_PHYS_PAGES:\n\t\treturn sysctl64(\"hw.physmem\") / int64(unix.Getpagesize()), nil\n\tcase SC_NPROCESSORS_CONF:\n\t\treturn sysctl32(\"hw.ncpu\"), nil\n\tcase SC_NPROCESSORS_ONLN:\n\t\tif val, err := unix.SysctlUint32(\"hw.ncpuonline\"); err == nil {\n\t\t\treturn int64(val), nil\n\t\t}\n\t\treturn sysctl32(\"hw.ncpu\"), nil\n\t}\n\n\treturn sysconfGeneric(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_posix.go",
    "content": "// Copyright 2018 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || dragonfly || freebsd || linux || openbsd\n// +build darwin dragonfly freebsd linux openbsd\n\npackage sysconf\n\nfunc sysconfPOSIX(name int) (int64, error) {\n\tswitch name {\n\tcase SC_ADVISORY_INFO:\n\t\treturn _POSIX_ADVISORY_INFO, nil\n\tcase SC_ASYNCHRONOUS_IO:\n\t\treturn _POSIX_ASYNCHRONOUS_IO, nil\n\tcase SC_BARRIERS:\n\t\treturn _POSIX_BARRIERS, nil\n\tcase SC_CLOCK_SELECTION:\n\t\treturn _POSIX_CLOCK_SELECTION, nil\n\tcase SC_CPUTIME:\n\t\treturn _POSIX_CPUTIME, nil\n\tcase SC_FSYNC:\n\t\treturn _POSIX_FSYNC, nil\n\tcase SC_IPV6:\n\t\treturn _POSIX_IPV6, nil\n\tcase SC_JOB_CONTROL:\n\t\treturn _POSIX_JOB_CONTROL, nil\n\tcase SC_MAPPED_FILES:\n\t\treturn _POSIX_MAPPED_FILES, nil\n\tcase SC_MEMLOCK:\n\t\treturn _POSIX_MEMLOCK, nil\n\tcase SC_MEMLOCK_RANGE:\n\t\treturn _POSIX_MEMLOCK_RANGE, nil\n\tcase SC_MONOTONIC_CLOCK:\n\t\treturn _POSIX_MONOTONIC_CLOCK, nil\n\tcase SC_MEMORY_PROTECTION:\n\t\treturn _POSIX_MEMORY_PROTECTION, nil\n\tcase SC_MESSAGE_PASSING:\n\t\treturn _POSIX_MESSAGE_PASSING, nil\n\tcase SC_PRIORITIZED_IO:\n\t\treturn _POSIX_PRIORITIZED_IO, nil\n\tcase SC_PRIORITY_SCHEDULING:\n\t\treturn _POSIX_PRIORITY_SCHEDULING, nil\n\tcase SC_RAW_SOCKETS:\n\t\treturn _POSIX_RAW_SOCKETS, nil\n\tcase SC_READER_WRITER_LOCKS:\n\t\treturn _POSIX_READER_WRITER_LOCKS, nil\n\tcase SC_REALTIME_SIGNALS:\n\t\treturn _POSIX_REALTIME_SIGNALS, nil\n\tcase SC_REGEXP:\n\t\treturn _POSIX_REGEXP, nil\n\tcase SC_SEMAPHORES:\n\t\treturn _POSIX_SEMAPHORES, nil\n\tcase SC_SHARED_MEMORY_OBJECTS:\n\t\treturn _POSIX_SHARED_MEMORY_OBJECTS, nil\n\tcase SC_SHELL:\n\t\treturn _POSIX_SHELL, nil\n\tcase SC_THREADS:\n\t\treturn _POSIX_THREADS, nil\n\tcase SC_TIMEOUTS:\n\t\treturn _POSIX_TIMEOUTS, nil\n\tcase SC_TIMERS:\n\t\treturn _POSIX_TIMERS, nil\n\tcase SC_VERSION:\n\t\treturn _POSIX_VERSION, nil\n\n\tcase SC_2_C_BIND:\n\t\treturn _POSIX2_C_BIND, nil\n\tcase SC_2_C_DEV:\n\t\treturn _POSIX2_C_DEV, nil\n\tcase SC_2_FORT_DEV:\n\t\treturn -1, nil\n\tcase SC_2_FORT_RUN:\n\t\treturn -1, nil\n\tcase SC_2_LOCALEDEF:\n\t\treturn _POSIX2_LOCALEDEF, nil\n\tcase SC_2_SW_DEV:\n\t\treturn _POSIX2_SW_DEV, nil\n\tcase SC_2_VERSION:\n\t\treturn _POSIX2_VERSION, nil\n\t}\n\treturn -1, errInvalid\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_solaris.go",
    "content": "// Copyright 2021 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage sysconf\n\nimport \"golang.org/x/sys/unix\"\n\nfunc sysconf(name int) (int64, error) {\n\tif name < 0 {\n\t\treturn -1, errInvalid\n\t}\n\treturn unix.Sysconf(name)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/sysconf_unsupported.go",
    "content": "// Copyright 2021 Tobias Klauser. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris\n// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris\n\npackage sysconf\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc sysconf(name int) (int64, error) {\n\treturn -1, fmt.Errorf(\"unsupported on %s\", runtime.GOOS)\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_defs_darwin.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_defs_darwin.go\n\n//go:build darwin\n// +build darwin\n\npackage sysconf\n\nconst (\n\tSC_AIO_LISTIO_MAX               = 0x2a\n\tSC_AIO_MAX                      = 0x2b\n\tSC_AIO_PRIO_DELTA_MAX           = 0x2c\n\tSC_ARG_MAX                      = 0x1\n\tSC_ATEXIT_MAX                   = 0x6b\n\tSC_BC_BASE_MAX                  = 0x9\n\tSC_BC_DIM_MAX                   = 0xa\n\tSC_BC_SCALE_MAX                 = 0xb\n\tSC_BC_STRING_MAX                = 0xc\n\tSC_CHILD_MAX                    = 0x2\n\tSC_CLK_TCK                      = 0x3\n\tSC_COLL_WEIGHTS_MAX             = 0xd\n\tSC_DELAYTIMER_MAX               = 0x2d\n\tSC_EXPR_NEST_MAX                = 0xe\n\tSC_GETGR_R_SIZE_MAX             = 0x46\n\tSC_GETPW_R_SIZE_MAX             = 0x47\n\tSC_HOST_NAME_MAX                = 0x48\n\tSC_IOV_MAX                      = 0x38\n\tSC_LINE_MAX                     = 0xf\n\tSC_LOGIN_NAME_MAX               = 0x49\n\tSC_MQ_OPEN_MAX                  = 0x2e\n\tSC_MQ_PRIO_MAX                  = 0x4b\n\tSC_NGROUPS_MAX                  = 0x4\n\tSC_OPEN_MAX                     = 0x5\n\tSC_PAGE_SIZE                    = 0x1d\n\tSC_PAGESIZE                     = 0x1d\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 0x55\n\tSC_THREAD_KEYS_MAX              = 0x56\n\tSC_THREAD_STACK_MIN             = 0x5d\n\tSC_THREAD_THREADS_MAX           = 0x5e\n\tSC_RE_DUP_MAX                   = 0x10\n\tSC_RTSIG_MAX                    = 0x30\n\tSC_SEM_NSEMS_MAX                = 0x31\n\tSC_SEM_VALUE_MAX                = 0x32\n\tSC_SIGQUEUE_MAX                 = 0x33\n\tSC_STREAM_MAX                   = 0x1a\n\tSC_SYMLOOP_MAX                  = 0x78\n\tSC_TIMER_MAX                    = 0x34\n\tSC_TTY_NAME_MAX                 = 0x65\n\tSC_TZNAME_MAX                   = 0x1b\n\n\tSC_ADVISORY_INFO              = 0x41\n\tSC_ASYNCHRONOUS_IO            = 0x1c\n\tSC_BARRIERS                   = 0x42\n\tSC_CLOCK_SELECTION            = 0x43\n\tSC_CPUTIME                    = 0x44\n\tSC_FSYNC                      = 0x26\n\tSC_IPV6                       = 0x76\n\tSC_JOB_CONTROL                = 0x6\n\tSC_MAPPED_FILES               = 0x2f\n\tSC_MEMLOCK                    = 0x1e\n\tSC_MEMLOCK_RANGE              = 0x1f\n\tSC_MEMORY_PROTECTION          = 0x20\n\tSC_MESSAGE_PASSING            = 0x21\n\tSC_MONOTONIC_CLOCK            = 0x4a\n\tSC_PRIORITIZED_IO             = 0x22\n\tSC_PRIORITY_SCHEDULING        = 0x23\n\tSC_RAW_SOCKETS                = 0x77\n\tSC_READER_WRITER_LOCKS        = 0x4c\n\tSC_REALTIME_SIGNALS           = 0x24\n\tSC_REGEXP                     = 0x4d\n\tSC_SAVED_IDS                  = 0x7\n\tSC_SEMAPHORES                 = 0x25\n\tSC_SHARED_MEMORY_OBJECTS      = 0x27\n\tSC_SHELL                      = 0x4e\n\tSC_SPAWN                      = 0x4f\n\tSC_SPIN_LOCKS                 = 0x50\n\tSC_SPORADIC_SERVER            = 0x51\n\tSC_SS_REPL_MAX                = 0x7e\n\tSC_SYNCHRONIZED_IO            = 0x28\n\tSC_THREAD_ATTR_STACKADDR      = 0x52\n\tSC_THREAD_ATTR_STACKSIZE      = 0x53\n\tSC_THREAD_CPUTIME             = 0x54\n\tSC_THREAD_PRIO_INHERIT        = 0x57\n\tSC_THREAD_PRIO_PROTECT        = 0x58\n\tSC_THREAD_PRIORITY_SCHEDULING = 0x59\n\tSC_THREAD_PROCESS_SHARED      = 0x5a\n\tSC_THREAD_SAFE_FUNCTIONS      = 0x5b\n\tSC_THREAD_SPORADIC_SERVER     = 0x5c\n\tSC_THREADS                    = 0x60\n\tSC_TIMEOUTS                   = 0x5f\n\tSC_TIMERS                     = 0x29\n\tSC_TRACE                      = 0x61\n\tSC_TRACE_EVENT_FILTER         = 0x62\n\tSC_TRACE_EVENT_NAME_MAX       = 0x7f\n\tSC_TRACE_INHERIT              = 0x63\n\tSC_TRACE_LOG                  = 0x64\n\tSC_TRACE_NAME_MAX             = 0x80\n\tSC_TRACE_SYS_MAX              = 0x81\n\tSC_TRACE_USER_EVENT_MAX       = 0x82\n\tSC_TYPED_MEMORY_OBJECTS       = 0x66\n\tSC_VERSION                    = 0x8\n\n\tSC_V6_ILP32_OFF32  = 0x67\n\tSC_V6_ILP32_OFFBIG = 0x68\n\tSC_V6_LP64_OFF64   = 0x69\n\tSC_V6_LPBIG_OFFBIG = 0x6a\n\n\tSC_2_C_BIND         = 0x12\n\tSC_2_C_DEV          = 0x13\n\tSC_2_CHAR_TERM      = 0x14\n\tSC_2_FORT_DEV       = 0x15\n\tSC_2_FORT_RUN       = 0x16\n\tSC_2_LOCALEDEF      = 0x17\n\tSC_2_PBS            = 0x3b\n\tSC_2_PBS_ACCOUNTING = 0x3c\n\tSC_2_PBS_CHECKPOINT = 0x3d\n\tSC_2_PBS_LOCATE     = 0x3e\n\tSC_2_PBS_MESSAGE    = 0x3f\n\tSC_2_PBS_TRACK      = 0x40\n\tSC_2_SW_DEV         = 0x18\n\tSC_2_UPE            = 0x19\n\tSC_2_VERSION        = 0x11\n\n\tSC_XOPEN_CRYPT            = 0x6c\n\tSC_XOPEN_ENH_I18N         = 0x6d\n\tSC_XOPEN_REALTIME         = 0x6f\n\tSC_XOPEN_REALTIME_THREADS = 0x70\n\tSC_XOPEN_SHM              = 0x71\n\tSC_XOPEN_STREAMS          = 0x72\n\tSC_XOPEN_UNIX             = 0x73\n\tSC_XOPEN_VERSION          = 0x74\n\tSC_XOPEN_XCU_VERSION      = 0x79\n\n\tSC_PHYS_PAGES       = 0xc8\n\tSC_NPROCESSORS_CONF = 0x39\n\tSC_NPROCESSORS_ONLN = 0x3a\n)\n\nconst (\n\t_BC_BASE_MAX      = 0x63\n\t_BC_DIM_MAX       = 0x800\n\t_BC_SCALE_MAX     = 0x63\n\t_BC_STRING_MAX    = 0x3e8\n\t_COLL_WEIGHTS_MAX = 0x2\n\t_EXPR_NEST_MAX    = 0x20\n\t_IOV_MAX          = 0x400\n\t_LINE_MAX         = 0x800\n\t_NAME_MAX         = 0xff\n\t_RE_DUP_MAX       = 0xff\n\n\t_CLK_TCK = 0x64\n\n\t_MAXHOSTNAMELEN = 0x100\n\t_MAXLOGNAME     = 0xff\n\t_MAXSYMLINKS    = 0x20\n\n\t_POSIX_ADVISORY_INFO                = -0x1\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = -0x1\n\t_POSIX_BARRIERS                     = -0x1\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = -0x1\n\t_POSIX_CPUTIME                      = -0x1\n\t_POSIX_FSYNC                        = 0x30db0\n\t_POSIX_IPV6                         = 0x30db0\n\t_POSIX_JOB_CONTROL                  = 0x30db0\n\t_POSIX_MAPPED_FILES                 = 0x30db0\n\t_POSIX_MEMLOCK                      = -0x1\n\t_POSIX_MEMLOCK_RANGE                = -0x1\n\t_POSIX_MEMORY_PROTECTION            = 0x30db0\n\t_POSIX_MESSAGE_PASSING              = -0x1\n\t_POSIX_MONOTONIC_CLOCK              = -0x1\n\t_POSIX_PRIORITIZED_IO               = -0x1\n\t_POSIX_PRIORITY_SCHEDULING          = -0x1\n\t_POSIX_RAW_SOCKETS                  = -0x1\n\t_POSIX_READER_WRITER_LOCKS          = 0x30db0\n\t_POSIX_REALTIME_SIGNALS             = -0x1\n\t_POSIX_REGEXP                       = 0x30db0\n\t_POSIX_SEM_VALUE_MAX                = 0x7fff\n\t_POSIX_SEMAPHORES                   = -0x1\n\t_POSIX_SHARED_MEMORY_OBJECTS        = -0x1\n\t_POSIX_SHELL                        = 0x30db0\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPIN_LOCKS                   = -0x1\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SS_REPL_MAX                  = 0x4\n\t_POSIX_SYNCHRONIZED_IO              = -0x1\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x30db0\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x30db0\n\t_POSIX_THREAD_CPUTIME               = -0x1\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_KEYS_MAX              = 0x80\n\t_POSIX_THREAD_PRIO_INHERIT          = -0x1\n\t_POSIX_THREAD_PRIO_PROTECT          = -0x1\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = -0x1\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x30db0\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x30db0\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x30db0\n\t_POSIX_TIMEOUTS                     = -0x1\n\t_POSIX_TIMERS                       = -0x1\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_EVENT_NAME_MAX         = 0x1e\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TRACE_NAME_MAX               = 0x8\n\t_POSIX_TRACE_SYS_MAX                = 0x8\n\t_POSIX_TRACE_USER_EVENT_MAX         = 0x20\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x30db0\n\n\t_V6_ILP32_OFF32  = -0x1\n\t_V6_ILP32_OFFBIG = -0x1\n\t_V6_LP64_OFF64   = 0x1\n\t_V6_LPBIG_OFFBIG = 0x1\n\n\t_POSIX2_C_BIND    = 0x30db0\n\t_POSIX2_C_DEV     = 0x30db0\n\t_POSIX2_CHAR_TERM = 0x30db0\n\t_POSIX2_LOCALEDEF = 0x30db0\n\t_POSIX2_PBS       = -0x1\n\t_POSIX2_SW_DEV    = 0x30db0\n\t_POSIX2_UPE       = 0x30db0\n\t_POSIX2_VERSION   = 0x30db0\n\n\t_XOPEN_CRYPT            = 0x1\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = -0x1\n\t_XOPEN_REALTIME_THREADS = -0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x258\n\t_XOPEN_XCU_VERSION      = 0x4\n\n\t_PTHREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_PTHREAD_KEYS_MAX              = 0x200\n\t_PTHREAD_STACK_MIN             = 0x2000\n)\n\nconst (\n\t_PC_NAME_MAX = 0x4\n\n\t_PATH_ZONEINFO = \"/usr/share/zoneinfo\"\n)\n\nconst (\n\t_CHAR_BIT = 0x8\n\n\t_INT_MAX  = 0x7fffffff\n\t_LONG_MAX = 0x7fffffffffffffff\n\n\tsizeofOffT = 0x8\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_defs_dragonfly.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_defs_dragonfly.go\n\n//go:build dragonfly\n// +build dragonfly\n\npackage sysconf\n\nconst (\n\tSC_AIO_LISTIO_MAX               = 0x2a\n\tSC_AIO_MAX                      = 0x2b\n\tSC_AIO_PRIO_DELTA_MAX           = 0x2c\n\tSC_ARG_MAX                      = 0x1\n\tSC_ATEXIT_MAX                   = 0x6b\n\tSC_BC_BASE_MAX                  = 0x9\n\tSC_BC_DIM_MAX                   = 0xa\n\tSC_BC_SCALE_MAX                 = 0xb\n\tSC_BC_STRING_MAX                = 0xc\n\tSC_CHILD_MAX                    = 0x2\n\tSC_CLK_TCK                      = 0x3\n\tSC_COLL_WEIGHTS_MAX             = 0xd\n\tSC_DELAYTIMER_MAX               = 0x2d\n\tSC_EXPR_NEST_MAX                = 0xe\n\tSC_GETGR_R_SIZE_MAX             = 0x46\n\tSC_GETPW_R_SIZE_MAX             = 0x47\n\tSC_HOST_NAME_MAX                = 0x48\n\tSC_IOV_MAX                      = 0x38\n\tSC_LINE_MAX                     = 0xf\n\tSC_LOGIN_NAME_MAX               = 0x49\n\tSC_MQ_OPEN_MAX                  = 0x2e\n\tSC_MQ_PRIO_MAX                  = 0x4b\n\tSC_NGROUPS_MAX                  = 0x4\n\tSC_OPEN_MAX                     = 0x5\n\tSC_PAGE_SIZE                    = 0x2f\n\tSC_PAGESIZE                     = 0x2f\n\tSC_RE_DUP_MAX                   = 0x10\n\tSC_RTSIG_MAX                    = 0x30\n\tSC_SEM_NSEMS_MAX                = 0x31\n\tSC_SEM_VALUE_MAX                = 0x32\n\tSC_SIGQUEUE_MAX                 = 0x33\n\tSC_STREAM_MAX                   = 0x1a\n\tSC_SYMLOOP_MAX                  = 0x78\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 0x55\n\tSC_THREAD_KEYS_MAX              = 0x56\n\tSC_THREAD_STACK_MIN             = 0x5d\n\tSC_THREAD_THREADS_MAX           = 0x5e\n\tSC_TIMER_MAX                    = 0x34\n\tSC_TTY_NAME_MAX                 = 0x65\n\tSC_TZNAME_MAX                   = 0x1b\n\n\tSC_ADVISORY_INFO              = 0x41\n\tSC_ASYNCHRONOUS_IO            = 0x1c\n\tSC_BARRIERS                   = 0x42\n\tSC_CLOCK_SELECTION            = 0x43\n\tSC_CPUTIME                    = 0x44\n\tSC_FSYNC                      = 0x26\n\tSC_IPV6                       = 0x76\n\tSC_JOB_CONTROL                = 0x6\n\tSC_MAPPED_FILES               = 0x1d\n\tSC_MEMLOCK                    = 0x1e\n\tSC_MEMLOCK_RANGE              = 0x1f\n\tSC_MEMORY_PROTECTION          = 0x20\n\tSC_MESSAGE_PASSING            = 0x21\n\tSC_MONOTONIC_CLOCK            = 0x4a\n\tSC_PRIORITIZED_IO             = 0x22\n\tSC_PRIORITY_SCHEDULING        = 0x23\n\tSC_RAW_SOCKETS                = 0x77\n\tSC_READER_WRITER_LOCKS        = 0x4c\n\tSC_REALTIME_SIGNALS           = 0x24\n\tSC_REGEXP                     = 0x4d\n\tSC_SAVED_IDS                  = 0x7\n\tSC_SEMAPHORES                 = 0x25\n\tSC_SHARED_MEMORY_OBJECTS      = 0x27\n\tSC_SHELL                      = 0x4e\n\tSC_SPAWN                      = 0x4f\n\tSC_SPIN_LOCKS                 = 0x50\n\tSC_SPORADIC_SERVER            = 0x51\n\tSC_SYNCHRONIZED_IO            = 0x28\n\tSC_THREAD_ATTR_STACKADDR      = 0x52\n\tSC_THREAD_ATTR_STACKSIZE      = 0x53\n\tSC_THREAD_CPUTIME             = 0x54\n\tSC_THREAD_PRIO_INHERIT        = 0x57\n\tSC_THREAD_PRIO_PROTECT        = 0x58\n\tSC_THREAD_PRIORITY_SCHEDULING = 0x59\n\tSC_THREAD_PROCESS_SHARED      = 0x5a\n\tSC_THREAD_SAFE_FUNCTIONS      = 0x5b\n\tSC_THREAD_SPORADIC_SERVER     = 0x5c\n\tSC_THREADS                    = 0x60\n\tSC_TIMEOUTS                   = 0x5f\n\tSC_TIMERS                     = 0x29\n\tSC_TRACE                      = 0x61\n\tSC_TRACE_EVENT_FILTER         = 0x62\n\tSC_TRACE_INHERIT              = 0x63\n\tSC_TRACE_LOG                  = 0x64\n\tSC_TYPED_MEMORY_OBJECTS       = 0x66\n\tSC_VERSION                    = 0x8\n\n\tSC_V6_ILP32_OFF32  = 0x67\n\tSC_V6_ILP32_OFFBIG = 0x68\n\tSC_V6_LP64_OFF64   = 0x69\n\tSC_V6_LPBIG_OFFBIG = 0x6a\n\n\tSC_2_C_BIND         = 0x12\n\tSC_2_C_DEV          = 0x13\n\tSC_2_CHAR_TERM      = 0x14\n\tSC_2_FORT_DEV       = 0x15\n\tSC_2_FORT_RUN       = 0x16\n\tSC_2_LOCALEDEF      = 0x17\n\tSC_2_PBS            = 0x3b\n\tSC_2_PBS_ACCOUNTING = 0x3c\n\tSC_2_PBS_CHECKPOINT = 0x3d\n\tSC_2_PBS_LOCATE     = 0x3e\n\tSC_2_PBS_MESSAGE    = 0x3f\n\tSC_2_PBS_TRACK      = 0x40\n\tSC_2_SW_DEV         = 0x18\n\tSC_2_UPE            = 0x19\n\tSC_2_VERSION        = 0x11\n\n\tSC_XOPEN_CRYPT            = 0x6c\n\tSC_XOPEN_ENH_I18N         = 0x6d\n\tSC_XOPEN_REALTIME         = 0x6f\n\tSC_XOPEN_REALTIME_THREADS = 0x70\n\tSC_XOPEN_SHM              = 0x71\n\tSC_XOPEN_STREAMS          = 0x72\n\tSC_XOPEN_UNIX             = 0x73\n\tSC_XOPEN_VERSION          = 0x74\n\tSC_XOPEN_XCU_VERSION      = 0x75\n\n\tSC_PHYS_PAGES       = 0x79\n\tSC_NPROCESSORS_CONF = 0x39\n\tSC_NPROCESSORS_ONLN = 0x3a\n)\n\nconst (\n\t_BC_BASE_MAX      = 0x63\n\t_BC_DIM_MAX       = 0x800\n\t_BC_SCALE_MAX     = 0x63\n\t_BC_STRING_MAX    = 0x3e8\n\t_COLL_WEIGHTS_MAX = 0xa\n\t_EXPR_NEST_MAX    = 0x20\n\t_LINE_MAX         = 0x800\n\t_RE_DUP_MAX       = 0xff\n\n\t_CLK_TCK = 0x80\n\n\t_MAXHOSTNAMELEN = 0x100\n\t_MAXLOGNAME     = 0x11\n\t_MAXSYMLINKS    = 0x20\n\t_ATEXIT_SIZE    = 0x20\n\n\t_POSIX_ADVISORY_INFO              = -0x1\n\t_POSIX_ARG_MAX                    = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO            = 0x0\n\t_POSIX_BARRIERS                   = 0x30db0\n\t_POSIX_CHILD_MAX                  = 0x19\n\t_POSIX_CLOCK_SELECTION            = -0x1\n\t_POSIX_CPUTIME                    = 0x30db0\n\t_POSIX_FSYNC                      = 0x30db0\n\t_POSIX_IPV6                       = 0x0\n\t_POSIX_JOB_CONTROL                = 0x1\n\t_POSIX_MAPPED_FILES               = 0x30db0\n\t_POSIX_MEMLOCK                    = -0x1\n\t_POSIX_MEMLOCK_RANGE              = 0x30db0\n\t_POSIX_MEMORY_PROTECTION          = 0x30db0\n\t_POSIX_MESSAGE_PASSING            = 0x30db0\n\t_POSIX_MONOTONIC_CLOCK            = 0x30db0\n\t_POSIX_PRIORITIZED_IO             = -0x1\n\t_POSIX_PRIORITY_SCHEDULING        = 0x30db0\n\t_POSIX_RAW_SOCKETS                = 0x30db0\n\t_POSIX_READER_WRITER_LOCKS        = 0x30db0\n\t_POSIX_REALTIME_SIGNALS           = 0x30db0\n\t_POSIX_REGEXP                     = 0x1\n\t_POSIX_SEM_VALUE_MAX              = 0x7fff\n\t_POSIX_SEMAPHORES                 = 0x30db0\n\t_POSIX_SHARED_MEMORY_OBJECTS      = 0x30db0\n\t_POSIX_SHELL                      = 0x1\n\t_POSIX_SPAWN                      = 0x30db0\n\t_POSIX_SPIN_LOCKS                 = 0x30db0\n\t_POSIX_SPORADIC_SERVER            = -0x1\n\t_POSIX_SYNCHRONIZED_IO            = -0x1\n\t_POSIX_THREAD_ATTR_STACKADDR      = 0x30db0\n\t_POSIX_THREAD_ATTR_STACKSIZE      = 0x30db0\n\t_POSIX_THREAD_CPUTIME             = 0x30db0\n\t_POSIX_THREAD_PRIO_INHERIT        = 0x30db0\n\t_POSIX_THREAD_PRIO_PROTECT        = 0x30db0\n\t_POSIX_THREAD_PRIORITY_SCHEDULING = 0x30db0\n\t_POSIX_THREAD_PROCESS_SHARED      = -0x1\n\t_POSIX_THREAD_SAFE_FUNCTIONS      = -0x1\n\t_POSIX_THREAD_SPORADIC_SERVER     = -0x1\n\t_POSIX_THREADS                    = 0x30db0\n\t_POSIX_TIMEOUTS                   = 0x30db0\n\t_POSIX_TIMERS                     = 0x30db0\n\t_POSIX_TRACE                      = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS       = -0x1\n\t_POSIX_VERSION                    = 0x30db0\n\n\t_V6_ILP32_OFF32  = -0x1\n\t_V6_ILP32_OFFBIG = 0x0\n\t_V6_LP64_OFF64   = 0x0\n\t_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_CHAR_TERM = 0x1\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_PBS       = -0x1\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_UPE       = 0x31069\n\t_POSIX2_VERSION   = 0x30a2c\n\n\t_XOPEN_CRYPT            = -0x1\n\t_XOPEN_ENH_I18N         = -0x1\n\t_XOPEN_REALTIME         = -0x1\n\t_XOPEN_REALTIME_THREADS = -0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = -0x1\n\n\t_PTHREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_PTHREAD_KEYS_MAX              = 0x100\n\t_PTHREAD_STACK_MIN             = 0x4000\n)\n\nconst (\n\t_PC_NAME_MAX = 0x4\n\n\t_PATH_DEV      = \"/dev/\"\n\t_PATH_ZONEINFO = \"/usr/share/zoneinfo\"\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_defs_freebsd.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_defs_freebsd.go\n\n//go:build freebsd\n// +build freebsd\n\npackage sysconf\n\nconst (\n\tSC_AIO_LISTIO_MAX               = 0x2a\n\tSC_AIO_MAX                      = 0x2b\n\tSC_AIO_PRIO_DELTA_MAX           = 0x2c\n\tSC_ARG_MAX                      = 0x1\n\tSC_ATEXIT_MAX                   = 0x6b\n\tSC_BC_BASE_MAX                  = 0x9\n\tSC_BC_DIM_MAX                   = 0xa\n\tSC_BC_SCALE_MAX                 = 0xb\n\tSC_BC_STRING_MAX                = 0xc\n\tSC_CHILD_MAX                    = 0x2\n\tSC_CLK_TCK                      = 0x3\n\tSC_COLL_WEIGHTS_MAX             = 0xd\n\tSC_DELAYTIMER_MAX               = 0x2d\n\tSC_EXPR_NEST_MAX                = 0xe\n\tSC_GETGR_R_SIZE_MAX             = 0x46\n\tSC_GETPW_R_SIZE_MAX             = 0x47\n\tSC_HOST_NAME_MAX                = 0x48\n\tSC_IOV_MAX                      = 0x38\n\tSC_LINE_MAX                     = 0xf\n\tSC_LOGIN_NAME_MAX               = 0x49\n\tSC_MQ_OPEN_MAX                  = 0x2e\n\tSC_MQ_PRIO_MAX                  = 0x4b\n\tSC_NGROUPS_MAX                  = 0x4\n\tSC_OPEN_MAX                     = 0x5\n\tSC_PAGE_SIZE                    = 0x2f\n\tSC_PAGESIZE                     = 0x2f\n\tSC_RE_DUP_MAX                   = 0x10\n\tSC_RTSIG_MAX                    = 0x30\n\tSC_SEM_NSEMS_MAX                = 0x31\n\tSC_SEM_VALUE_MAX                = 0x32\n\tSC_SIGQUEUE_MAX                 = 0x33\n\tSC_STREAM_MAX                   = 0x1a\n\tSC_SYMLOOP_MAX                  = 0x78\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 0x55\n\tSC_THREAD_KEYS_MAX              = 0x56\n\tSC_THREAD_STACK_MIN             = 0x5d\n\tSC_THREAD_THREADS_MAX           = 0x5e\n\tSC_TIMER_MAX                    = 0x34\n\tSC_TTY_NAME_MAX                 = 0x65\n\tSC_TZNAME_MAX                   = 0x1b\n\n\tSC_ADVISORY_INFO              = 0x41\n\tSC_ASYNCHRONOUS_IO            = 0x1c\n\tSC_BARRIERS                   = 0x42\n\tSC_CLOCK_SELECTION            = 0x43\n\tSC_CPUTIME                    = 0x44\n\tSC_FSYNC                      = 0x26\n\tSC_IPV6                       = 0x76\n\tSC_JOB_CONTROL                = 0x6\n\tSC_MAPPED_FILES               = 0x1d\n\tSC_MEMLOCK                    = 0x1e\n\tSC_MEMLOCK_RANGE              = 0x1f\n\tSC_MEMORY_PROTECTION          = 0x20\n\tSC_MESSAGE_PASSING            = 0x21\n\tSC_MONOTONIC_CLOCK            = 0x4a\n\tSC_PRIORITIZED_IO             = 0x22\n\tSC_PRIORITY_SCHEDULING        = 0x23\n\tSC_RAW_SOCKETS                = 0x77\n\tSC_READER_WRITER_LOCKS        = 0x4c\n\tSC_REALTIME_SIGNALS           = 0x24\n\tSC_REGEXP                     = 0x4d\n\tSC_SAVED_IDS                  = 0x7\n\tSC_SEMAPHORES                 = 0x25\n\tSC_SHARED_MEMORY_OBJECTS      = 0x27\n\tSC_SHELL                      = 0x4e\n\tSC_SPAWN                      = 0x4f\n\tSC_SPIN_LOCKS                 = 0x50\n\tSC_SPORADIC_SERVER            = 0x51\n\tSC_SYNCHRONIZED_IO            = 0x28\n\tSC_THREAD_ATTR_STACKADDR      = 0x52\n\tSC_THREAD_ATTR_STACKSIZE      = 0x53\n\tSC_THREAD_CPUTIME             = 0x54\n\tSC_THREAD_PRIO_INHERIT        = 0x57\n\tSC_THREAD_PRIO_PROTECT        = 0x58\n\tSC_THREAD_PRIORITY_SCHEDULING = 0x59\n\tSC_THREAD_PROCESS_SHARED      = 0x5a\n\tSC_THREAD_SAFE_FUNCTIONS      = 0x5b\n\tSC_THREAD_SPORADIC_SERVER     = 0x5c\n\tSC_THREADS                    = 0x60\n\tSC_TIMEOUTS                   = 0x5f\n\tSC_TIMERS                     = 0x29\n\tSC_TRACE                      = 0x61\n\tSC_TRACE_EVENT_FILTER         = 0x62\n\tSC_TRACE_INHERIT              = 0x63\n\tSC_TRACE_LOG                  = 0x64\n\tSC_TYPED_MEMORY_OBJECTS       = 0x66\n\tSC_VERSION                    = 0x8\n\n\tSC_V6_ILP32_OFF32  = 0x67\n\tSC_V6_ILP32_OFFBIG = 0x68\n\tSC_V6_LP64_OFF64   = 0x69\n\tSC_V6_LPBIG_OFFBIG = 0x6a\n\n\tSC_2_C_BIND         = 0x12\n\tSC_2_C_DEV          = 0x13\n\tSC_2_CHAR_TERM      = 0x14\n\tSC_2_FORT_DEV       = 0x15\n\tSC_2_FORT_RUN       = 0x16\n\tSC_2_LOCALEDEF      = 0x17\n\tSC_2_PBS            = 0x3b\n\tSC_2_PBS_ACCOUNTING = 0x3c\n\tSC_2_PBS_CHECKPOINT = 0x3d\n\tSC_2_PBS_LOCATE     = 0x3e\n\tSC_2_PBS_MESSAGE    = 0x3f\n\tSC_2_PBS_TRACK      = 0x40\n\tSC_2_SW_DEV         = 0x18\n\tSC_2_UPE            = 0x19\n\tSC_2_VERSION        = 0x11\n\n\tSC_XOPEN_CRYPT            = 0x6c\n\tSC_XOPEN_ENH_I18N         = 0x6d\n\tSC_XOPEN_REALTIME         = 0x6f\n\tSC_XOPEN_REALTIME_THREADS = 0x70\n\tSC_XOPEN_SHM              = 0x71\n\tSC_XOPEN_STREAMS          = 0x72\n\tSC_XOPEN_UNIX             = 0x73\n\tSC_XOPEN_VERSION          = 0x74\n\tSC_XOPEN_XCU_VERSION      = 0x75\n\n\tSC_PHYS_PAGES       = 0x79\n\tSC_NPROCESSORS_CONF = 0x39\n\tSC_NPROCESSORS_ONLN = 0x3a\n)\n\nconst (\n\t_BC_BASE_MAX      = 0x63\n\t_BC_DIM_MAX       = 0x800\n\t_BC_SCALE_MAX     = 0x63\n\t_BC_STRING_MAX    = 0x3e8\n\t_COLL_WEIGHTS_MAX = 0xa\n\t_EXPR_NEST_MAX    = 0x20\n\t_LINE_MAX         = 0x800\n\t_MQ_PRIO_MAX      = 0x40\n\t_RE_DUP_MAX       = 0xff\n\t_SEM_VALUE_MAX    = 0x7fffffff\n\n\t_CLK_TCK = 0x80\n\n\t_MAXHOSTNAMELEN = 0x100\n\t_MAXLOGNAME     = 0x21\n\t_MAXSYMLINKS    = 0x20\n\t_ATEXIT_SIZE    = 0x20\n\n\t_POSIX_ADVISORY_INFO              = 0x30db0\n\t_POSIX_ARG_MAX                    = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO            = 0x30db0\n\t_POSIX_BARRIERS                   = 0x30db0\n\t_POSIX_CHILD_MAX                  = 0x19\n\t_POSIX_CLOCK_SELECTION            = -0x1\n\t_POSIX_CPUTIME                    = 0x30db0\n\t_POSIX_FSYNC                      = 0x30db0\n\t_POSIX_IPV6                       = 0x0\n\t_POSIX_JOB_CONTROL                = 0x1\n\t_POSIX_MAPPED_FILES               = 0x30db0\n\t_POSIX_MEMLOCK                    = -0x1\n\t_POSIX_MEMLOCK_RANGE              = 0x30db0\n\t_POSIX_MEMORY_PROTECTION          = 0x30db0\n\t_POSIX_MESSAGE_PASSING            = 0x30db0\n\t_POSIX_MONOTONIC_CLOCK            = 0x30db0\n\t_POSIX_PRIORITIZED_IO             = -0x1\n\t_POSIX_PRIORITY_SCHEDULING        = 0x0\n\t_POSIX_RAW_SOCKETS                = 0x30db0\n\t_POSIX_READER_WRITER_LOCKS        = 0x30db0\n\t_POSIX_REALTIME_SIGNALS           = 0x30db0\n\t_POSIX_REGEXP                     = 0x1\n\t_POSIX_SEM_VALUE_MAX              = 0x7fff\n\t_POSIX_SEMAPHORES                 = 0x30db0\n\t_POSIX_SHARED_MEMORY_OBJECTS      = 0x30db0\n\t_POSIX_SHELL                      = 0x1\n\t_POSIX_SPAWN                      = 0x30db0\n\t_POSIX_SPIN_LOCKS                 = 0x30db0\n\t_POSIX_SPORADIC_SERVER            = -0x1\n\t_POSIX_SYNCHRONIZED_IO            = -0x1\n\t_POSIX_THREAD_ATTR_STACKADDR      = 0x30db0\n\t_POSIX_THREAD_ATTR_STACKSIZE      = 0x30db0\n\t_POSIX_THREAD_CPUTIME             = 0x30db0\n\t_POSIX_THREAD_PRIO_INHERIT        = 0x30db0\n\t_POSIX_THREAD_PRIO_PROTECT        = 0x30db0\n\t_POSIX_THREAD_PRIORITY_SCHEDULING = 0x30db0\n\t_POSIX_THREAD_PROCESS_SHARED      = 0x30db0\n\t_POSIX_THREAD_SAFE_FUNCTIONS      = -0x1\n\t_POSIX_THREADS                    = 0x30db0\n\t_POSIX_TIMEOUTS                   = 0x30db0\n\t_POSIX_TIMERS                     = 0x30db0\n\t_POSIX_TRACE                      = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS       = -0x1\n\t_POSIX_VERSION                    = 0x30db0\n\n\t_V6_ILP32_OFF32  = -0x1\n\t_V6_ILP32_OFFBIG = 0x0\n\t_V6_LP64_OFF64   = 0x0\n\t_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x30db0\n\t_POSIX2_C_DEV     = -0x1\n\t_POSIX2_CHAR_TERM = 0x1\n\t_POSIX2_LOCALEDEF = -0x1\n\t_POSIX2_PBS       = -0x1\n\t_POSIX2_SW_DEV    = -0x1\n\t_POSIX2_UPE       = 0x30db0\n\t_POSIX2_VERSION   = 0x30a2c\n\n\t_XOPEN_CRYPT            = -0x1\n\t_XOPEN_ENH_I18N         = -0x1\n\t_XOPEN_REALTIME         = -0x1\n\t_XOPEN_REALTIME_THREADS = -0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = -0x1\n\n\t_PTHREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_PTHREAD_KEYS_MAX              = 0x100\n\t_PTHREAD_STACK_MIN             = 0x800\n)\n\nconst (\n\t_PC_NAME_MAX = 0x4\n\n\t_PATH_DEV      = \"/dev/\"\n\t_PATH_ZONEINFO = \"/usr/share/zoneinfo\"\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_defs_linux.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_defs_linux.go\n\n//go:build linux\n// +build linux\n\npackage sysconf\n\nconst (\n\tSC_AIO_LISTIO_MAX               = 0x17\n\tSC_AIO_MAX                      = 0x18\n\tSC_AIO_PRIO_DELTA_MAX           = 0x19\n\tSC_ARG_MAX                      = 0x0\n\tSC_ATEXIT_MAX                   = 0x57\n\tSC_BC_BASE_MAX                  = 0x24\n\tSC_BC_DIM_MAX                   = 0x25\n\tSC_BC_SCALE_MAX                 = 0x26\n\tSC_BC_STRING_MAX                = 0x27\n\tSC_CHILD_MAX                    = 0x1\n\tSC_CLK_TCK                      = 0x2\n\tSC_COLL_WEIGHTS_MAX             = 0x28\n\tSC_DELAYTIMER_MAX               = 0x1a\n\tSC_EXPR_NEST_MAX                = 0x2a\n\tSC_GETGR_R_SIZE_MAX             = 0x45\n\tSC_GETPW_R_SIZE_MAX             = 0x46\n\tSC_HOST_NAME_MAX                = 0xb4\n\tSC_IOV_MAX                      = 0x3c\n\tSC_LINE_MAX                     = 0x2b\n\tSC_LOGIN_NAME_MAX               = 0x47\n\tSC_MQ_OPEN_MAX                  = 0x1b\n\tSC_MQ_PRIO_MAX                  = 0x1c\n\tSC_NGROUPS_MAX                  = 0x3\n\tSC_OPEN_MAX                     = 0x4\n\tSC_PAGE_SIZE                    = 0x1e\n\tSC_PAGESIZE                     = 0x1e\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 0x49\n\tSC_THREAD_KEYS_MAX              = 0x4a\n\tSC_THREAD_STACK_MIN             = 0x4b\n\tSC_THREAD_THREADS_MAX           = 0x4c\n\tSC_RE_DUP_MAX                   = 0x2c\n\tSC_RTSIG_MAX                    = 0x1f\n\tSC_SEM_NSEMS_MAX                = 0x20\n\tSC_SEM_VALUE_MAX                = 0x21\n\tSC_SIGQUEUE_MAX                 = 0x22\n\tSC_STREAM_MAX                   = 0x5\n\tSC_SYMLOOP_MAX                  = 0xad\n\tSC_TIMER_MAX                    = 0x23\n\tSC_TTY_NAME_MAX                 = 0x48\n\tSC_TZNAME_MAX                   = 0x6\n\n\tSC_ADVISORY_INFO              = 0x84\n\tSC_ASYNCHRONOUS_IO            = 0xc\n\tSC_BARRIERS                   = 0x85\n\tSC_CLOCK_SELECTION            = 0x89\n\tSC_CPUTIME                    = 0x8a\n\tSC_FSYNC                      = 0xf\n\tSC_IPV6                       = 0xeb\n\tSC_JOB_CONTROL                = 0x7\n\tSC_MAPPED_FILES               = 0x10\n\tSC_MEMLOCK                    = 0x11\n\tSC_MEMLOCK_RANGE              = 0x12\n\tSC_MEMORY_PROTECTION          = 0x13\n\tSC_MESSAGE_PASSING            = 0x14\n\tSC_MONOTONIC_CLOCK            = 0x95\n\tSC_PRIORITIZED_IO             = 0xd\n\tSC_PRIORITY_SCHEDULING        = 0xa\n\tSC_RAW_SOCKETS                = 0xec\n\tSC_READER_WRITER_LOCKS        = 0x99\n\tSC_REALTIME_SIGNALS           = 0x9\n\tSC_REGEXP                     = 0x9b\n\tSC_SAVED_IDS                  = 0x8\n\tSC_SEMAPHORES                 = 0x15\n\tSC_SHARED_MEMORY_OBJECTS      = 0x16\n\tSC_SHELL                      = 0x9d\n\tSC_SPAWN                      = 0x9f\n\tSC_SPIN_LOCKS                 = 0x9a\n\tSC_SPORADIC_SERVER            = 0xa0\n\tSC_SS_REPL_MAX                = 0xf1\n\tSC_SYNCHRONIZED_IO            = 0xe\n\tSC_THREAD_ATTR_STACKADDR      = 0x4d\n\tSC_THREAD_ATTR_STACKSIZE      = 0x4e\n\tSC_THREAD_CPUTIME             = 0x8b\n\tSC_THREAD_PRIO_INHERIT        = 0x50\n\tSC_THREAD_PRIO_PROTECT        = 0x51\n\tSC_THREAD_PRIORITY_SCHEDULING = 0x4f\n\tSC_THREAD_PROCESS_SHARED      = 0x52\n\tSC_THREAD_ROBUST_PRIO_INHERIT = 0xf7\n\tSC_THREAD_ROBUST_PRIO_PROTECT = 0xf8\n\tSC_THREAD_SAFE_FUNCTIONS      = 0x44\n\tSC_THREAD_SPORADIC_SERVER     = 0xa1\n\tSC_THREADS                    = 0x43\n\tSC_TIMEOUTS                   = 0xa4\n\tSC_TIMERS                     = 0xb\n\tSC_TRACE                      = 0xb5\n\tSC_TRACE_EVENT_FILTER         = 0xb6\n\tSC_TRACE_EVENT_NAME_MAX       = 0xf2\n\tSC_TRACE_INHERIT              = 0xb7\n\tSC_TRACE_LOG                  = 0xb8\n\tSC_TRACE_NAME_MAX             = 0xf3\n\tSC_TRACE_SYS_MAX              = 0xf4\n\tSC_TRACE_USER_EVENT_MAX       = 0xf5\n\tSC_TYPED_MEMORY_OBJECTS       = 0xa5\n\tSC_VERSION                    = 0x1d\n\n\tSC_V7_ILP32_OFF32  = 0xed\n\tSC_V7_ILP32_OFFBIG = 0xee\n\tSC_V7_LP64_OFF64   = 0xef\n\tSC_V7_LPBIG_OFFBIG = 0xf0\n\n\tSC_V6_ILP32_OFF32  = 0xb0\n\tSC_V6_ILP32_OFFBIG = 0xb1\n\tSC_V6_LP64_OFF64   = 0xb2\n\tSC_V6_LPBIG_OFFBIG = 0xb3\n\n\tSC_2_C_BIND         = 0x2f\n\tSC_2_C_DEV          = 0x30\n\tSC_2_C_VERSION      = 0x60\n\tSC_2_CHAR_TERM      = 0x5f\n\tSC_2_FORT_DEV       = 0x31\n\tSC_2_FORT_RUN       = 0x32\n\tSC_2_LOCALEDEF      = 0x34\n\tSC_2_PBS            = 0xa8\n\tSC_2_PBS_ACCOUNTING = 0xa9\n\tSC_2_PBS_CHECKPOINT = 0xaf\n\tSC_2_PBS_LOCATE     = 0xaa\n\tSC_2_PBS_MESSAGE    = 0xab\n\tSC_2_PBS_TRACK      = 0xac\n\tSC_2_SW_DEV         = 0x33\n\tSC_2_UPE            = 0x61\n\tSC_2_VERSION        = 0x2e\n\n\tSC_XOPEN_CRYPT            = 0x5c\n\tSC_XOPEN_ENH_I18N         = 0x5d\n\tSC_XOPEN_REALTIME         = 0x82\n\tSC_XOPEN_REALTIME_THREADS = 0x83\n\tSC_XOPEN_SHM              = 0x5e\n\tSC_XOPEN_STREAMS          = 0xf6\n\tSC_XOPEN_UNIX             = 0x5b\n\tSC_XOPEN_VERSION          = 0x59\n\tSC_XOPEN_XCU_VERSION      = 0x5a\n\n\tSC_PHYS_PAGES       = 0x55\n\tSC_AVPHYS_PAGES     = 0x56\n\tSC_NPROCESSORS_CONF = 0x53\n\tSC_NPROCESSORS_ONLN = 0x54\n\tSC_UIO_MAXIOV       = 0x3c\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_defs_netbsd.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_defs_netbsd.go\n\n//go:build netbsd\n// +build netbsd\n\npackage sysconf\n\nconst (\n\tSC_ARG_MAX                      = 0x1\n\tSC_CHILD_MAX                    = 0x2\n\tSC_NGROUPS_MAX                  = 0x4\n\tSC_OPEN_MAX                     = 0x5\n\tSC_JOB_CONTROL                  = 0x6\n\tSC_SAVED_IDS                    = 0x7\n\tSC_VERSION                      = 0x8\n\tSC_BC_BASE_MAX                  = 0x9\n\tSC_BC_DIM_MAX                   = 0xa\n\tSC_BC_SCALE_MAX                 = 0xb\n\tSC_BC_STRING_MAX                = 0xc\n\tSC_COLL_WEIGHTS_MAX             = 0xd\n\tSC_EXPR_NEST_MAX                = 0xe\n\tSC_LINE_MAX                     = 0xf\n\tSC_RE_DUP_MAX                   = 0x10\n\tSC_2_VERSION                    = 0x11\n\tSC_2_C_BIND                     = 0x12\n\tSC_2_C_DEV                      = 0x13\n\tSC_2_CHAR_TERM                  = 0x14\n\tSC_2_FORT_DEV                   = 0x15\n\tSC_2_FORT_RUN                   = 0x16\n\tSC_2_LOCALEDEF                  = 0x17\n\tSC_2_SW_DEV                     = 0x18\n\tSC_2_UPE                        = 0x19\n\tSC_STREAM_MAX                   = 0x1a\n\tSC_TZNAME_MAX                   = 0x1b\n\tSC_PAGESIZE                     = 0x1c\n\tSC_PAGE_SIZE                    = 0x1c\n\tSC_FSYNC                        = 0x1d\n\tSC_XOPEN_SHM                    = 0x1e\n\tSC_SYNCHRONIZED_IO              = 0x1f\n\tSC_IOV_MAX                      = 0x20\n\tSC_MAPPED_FILES                 = 0x21\n\tSC_MEMLOCK                      = 0x22\n\tSC_MEMLOCK_RANGE                = 0x23\n\tSC_MEMORY_PROTECTION            = 0x24\n\tSC_LOGIN_NAME_MAX               = 0x25\n\tSC_MONOTONIC_CLOCK              = 0x26\n\tSC_CLK_TCK                      = 0x27\n\tSC_ATEXIT_MAX                   = 0x28\n\tSC_THREADS                      = 0x29\n\tSC_SEMAPHORES                   = 0x2a\n\tSC_BARRIERS                     = 0x2b\n\tSC_TIMERS                       = 0x2c\n\tSC_SPIN_LOCKS                   = 0x2d\n\tSC_READER_WRITER_LOCKS          = 0x2e\n\tSC_GETGR_R_SIZE_MAX             = 0x2f\n\tSC_GETPW_R_SIZE_MAX             = 0x30\n\tSC_CLOCK_SELECTION              = 0x31\n\tSC_ASYNCHRONOUS_IO              = 0x32\n\tSC_AIO_LISTIO_MAX               = 0x33\n\tSC_AIO_MAX                      = 0x34\n\tSC_MESSAGE_PASSING              = 0x35\n\tSC_MQ_OPEN_MAX                  = 0x36\n\tSC_MQ_PRIO_MAX                  = 0x37\n\tSC_PRIORITY_SCHEDULING          = 0x38\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 0x39\n\tSC_THREAD_KEYS_MAX              = 0x3a\n\tSC_THREAD_STACK_MIN             = 0x3b\n\tSC_THREAD_THREADS_MAX           = 0x3c\n\tSC_THREAD_ATTR_STACKADDR        = 0x3d\n\tSC_THREAD_ATTR_STACKSIZE        = 0x3e\n\tSC_THREAD_PRIORITY_SCHEDULING   = 0x3f\n\tSC_THREAD_PRIO_INHERIT          = 0x40\n\tSC_THREAD_PRIO_PROTECT          = 0x41\n\tSC_THREAD_PROCESS_SHARED        = 0x42\n\tSC_THREAD_SAFE_FUNCTIONS        = 0x43\n\tSC_TTY_NAME_MAX                 = 0x44\n\tSC_HOST_NAME_MAX                = 0x45\n\tSC_PASS_MAX                     = 0x46\n\tSC_REGEXP                       = 0x47\n\tSC_SHELL                        = 0x48\n\tSC_SYMLOOP_MAX                  = 0x49\n\n\tSC_V6_ILP32_OFF32   = 0x4a\n\tSC_V6_ILP32_OFFBIG  = 0x4b\n\tSC_V6_LP64_OFF64    = 0x4c\n\tSC_V6_LPBIG_OFFBIG  = 0x4d\n\tSC_2_PBS            = 0x50\n\tSC_2_PBS_ACCOUNTING = 0x51\n\tSC_2_PBS_CHECKPOINT = 0x52\n\tSC_2_PBS_LOCATE     = 0x53\n\tSC_2_PBS_MESSAGE    = 0x54\n\tSC_2_PBS_TRACK      = 0x55\n\n\tSC_SPAWN                 = 0x56\n\tSC_SHARED_MEMORY_OBJECTS = 0x57\n\n\tSC_TIMER_MAX        = 0x58\n\tSC_SEM_NSEMS_MAX    = 0x59\n\tSC_CPUTIME          = 0x5a\n\tSC_THREAD_CPUTIME   = 0x5b\n\tSC_DELAYTIMER_MAX   = 0x5c\n\tSC_SIGQUEUE_MAX     = 0x5d\n\tSC_REALTIME_SIGNALS = 0x5e\n\n\tSC_PHYS_PAGES = 0x79\n\n\tSC_NPROCESSORS_CONF = 0x3e9\n\tSC_NPROCESSORS_ONLN = 0x3ea\n\n\tSC_SCHED_RT_TS   = 0x7d1\n\tSC_SCHED_PRI_MIN = 0x7d2\n\tSC_SCHED_PRI_MAX = 0x7d3\n)\n\nconst (\n\t_MAXHOSTNAMELEN = 0x100\n\t_MAXLOGNAME     = 0x10\n\t_MAXSYMLINKS    = 0x20\n\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CPUTIME                      = 0x30db0\n\t_POSIX_DELAYTIMER_MAX               = 0x20\n\t_POSIX_PRIORITY_SCHEDULING          = 0x30db0\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x0\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x30db0\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x30db0\n\t_POSIX_THREAD_CPUTIME               = 0x30db0\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_KEYS_MAX              = 0x80\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x30db0\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x30db0\n\t_POSIX_TIMER_MAX                    = 0x20\n\t_POSIX_VERSION                      = 0x30db0\n\n\t_POSIX2_VERSION = 0x30db0\n\n\t_FOPEN_MAX  = 0x14\n\t_NAME_MAX   = 0x1ff\n\t_RE_DUP_MAX = 0xff\n\n\t_BC_BASE_MAX      = 0x7fffffff\n\t_BC_DIM_MAX       = 0xffff\n\t_BC_SCALE_MAX     = 0x7fffffff\n\t_BC_STRING_MAX    = 0x7fffffff\n\t_COLL_WEIGHTS_MAX = 0x2\n\t_EXPR_NEST_MAX    = 0x20\n\t_LINE_MAX         = 0x800\n\n\t_GETGR_R_SIZE_MAX = 0x400\n\t_GETPW_R_SIZE_MAX = 0x400\n\n\t_PATH_DEV      = \"/dev/\"\n\t_PATH_ZONEINFO = \"/usr/share/zoneinfo\"\n\n\t_PASSWORD_LEN = 0x80\n)\n\nconst _PC_NAME_MAX = 0x4\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_defs_openbsd.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_defs_openbsd.go\n\n//go:build openbsd\n// +build openbsd\n\npackage sysconf\n\nconst (\n\tSC_AIO_LISTIO_MAX               = 0x2a\n\tSC_AIO_MAX                      = 0x2b\n\tSC_AIO_PRIO_DELTA_MAX           = 0x2c\n\tSC_ARG_MAX                      = 0x1\n\tSC_ATEXIT_MAX                   = 0x2e\n\tSC_BC_BASE_MAX                  = 0x9\n\tSC_BC_DIM_MAX                   = 0xa\n\tSC_BC_SCALE_MAX                 = 0xb\n\tSC_BC_STRING_MAX                = 0xc\n\tSC_CHILD_MAX                    = 0x2\n\tSC_CLK_TCK                      = 0x3\n\tSC_COLL_WEIGHTS_MAX             = 0xd\n\tSC_DELAYTIMER_MAX               = 0x32\n\tSC_EXPR_NEST_MAX                = 0xe\n\tSC_GETGR_R_SIZE_MAX             = 0x64\n\tSC_GETPW_R_SIZE_MAX             = 0x65\n\tSC_HOST_NAME_MAX                = 0x21\n\tSC_IOV_MAX                      = 0x33\n\tSC_LINE_MAX                     = 0xf\n\tSC_LOGIN_NAME_MAX               = 0x66\n\tSC_MQ_OPEN_MAX                  = 0x3a\n\tSC_MQ_PRIO_MAX                  = 0x3b\n\tSC_NGROUPS_MAX                  = 0x4\n\tSC_OPEN_MAX                     = 0x5\n\tSC_PAGE_SIZE                    = 0x1c\n\tSC_PAGESIZE                     = 0x1c\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 0x50\n\tSC_THREAD_KEYS_MAX              = 0x51\n\tSC_THREAD_STACK_MIN             = 0x59\n\tSC_THREAD_THREADS_MAX           = 0x5a\n\tSC_RE_DUP_MAX                   = 0x10\n\tSC_SEM_NSEMS_MAX                = 0x1f\n\tSC_SEM_VALUE_MAX                = 0x20\n\tSC_SIGQUEUE_MAX                 = 0x46\n\tSC_STREAM_MAX                   = 0x1a\n\tSC_SYMLOOP_MAX                  = 0x4c\n\tSC_TIMER_MAX                    = 0x5d\n\tSC_TTY_NAME_MAX                 = 0x6b\n\tSC_TZNAME_MAX                   = 0x1b\n\n\tSC_ADVISORY_INFO              = 0x29\n\tSC_ASYNCHRONOUS_IO            = 0x2d\n\tSC_BARRIERS                   = 0x2f\n\tSC_CLOCK_SELECTION            = 0x30\n\tSC_CPUTIME                    = 0x31\n\tSC_FSYNC                      = 0x1d\n\tSC_IPV6                       = 0x34\n\tSC_JOB_CONTROL                = 0x6\n\tSC_MAPPED_FILES               = 0x35\n\tSC_MEMLOCK                    = 0x36\n\tSC_MEMLOCK_RANGE              = 0x37\n\tSC_MEMORY_PROTECTION          = 0x38\n\tSC_MESSAGE_PASSING            = 0x39\n\tSC_MONOTONIC_CLOCK            = 0x22\n\tSC_PRIORITIZED_IO             = 0x3c\n\tSC_PRIORITY_SCHEDULING        = 0x3d\n\tSC_RAW_SOCKETS                = 0x3e\n\tSC_READER_WRITER_LOCKS        = 0x3f\n\tSC_REALTIME_SIGNALS           = 0x40\n\tSC_REGEXP                     = 0x41\n\tSC_SAVED_IDS                  = 0x7\n\tSC_SEMAPHORES                 = 0x43\n\tSC_SHARED_MEMORY_OBJECTS      = 0x44\n\tSC_SHELL                      = 0x45\n\tSC_SPAWN                      = 0x47\n\tSC_SPIN_LOCKS                 = 0x48\n\tSC_SPORADIC_SERVER            = 0x49\n\tSC_SS_REPL_MAX                = 0x4a\n\tSC_SYNCHRONIZED_IO            = 0x4b\n\tSC_THREAD_ATTR_STACKADDR      = 0x4d\n\tSC_THREAD_ATTR_STACKSIZE      = 0x4e\n\tSC_THREAD_CPUTIME             = 0x4f\n\tSC_THREAD_PRIO_INHERIT        = 0x52\n\tSC_THREAD_PRIO_PROTECT        = 0x53\n\tSC_THREAD_PRIORITY_SCHEDULING = 0x54\n\tSC_THREAD_PROCESS_SHARED      = 0x55\n\tSC_THREAD_ROBUST_PRIO_INHERIT = 0x56\n\tSC_THREAD_ROBUST_PRIO_PROTECT = 0x57\n\tSC_THREAD_SAFE_FUNCTIONS      = 0x67\n\tSC_THREAD_SPORADIC_SERVER     = 0x58\n\tSC_THREADS                    = 0x5b\n\tSC_TIMEOUTS                   = 0x5c\n\tSC_TIMERS                     = 0x5e\n\tSC_TRACE                      = 0x5f\n\tSC_TRACE_EVENT_FILTER         = 0x60\n\tSC_TRACE_EVENT_NAME_MAX       = 0x61\n\tSC_TRACE_INHERIT              = 0x62\n\tSC_TRACE_LOG                  = 0x63\n\tSC_TRACE_NAME_MAX             = 0x68\n\tSC_TRACE_SYS_MAX              = 0x69\n\tSC_TRACE_USER_EVENT_MAX       = 0x6a\n\tSC_TYPED_MEMORY_OBJECTS       = 0x6c\n\tSC_VERSION                    = 0x8\n\n\tSC_V7_ILP32_OFF32  = 0x71\n\tSC_V7_ILP32_OFFBIG = 0x72\n\tSC_V7_LP64_OFF64   = 0x73\n\tSC_V7_LPBIG_OFFBIG = 0x74\n\n\tSC_V6_ILP32_OFF32  = 0x6d\n\tSC_V6_ILP32_OFFBIG = 0x6e\n\tSC_V6_LP64_OFF64   = 0x6f\n\tSC_V6_LPBIG_OFFBIG = 0x70\n\n\tSC_2_C_BIND         = 0x12\n\tSC_2_C_DEV          = 0x13\n\tSC_2_CHAR_TERM      = 0x14\n\tSC_2_FORT_DEV       = 0x15\n\tSC_2_FORT_RUN       = 0x16\n\tSC_2_LOCALEDEF      = 0x17\n\tSC_2_PBS            = 0x23\n\tSC_2_PBS_ACCOUNTING = 0x24\n\tSC_2_PBS_CHECKPOINT = 0x25\n\tSC_2_PBS_LOCATE     = 0x26\n\tSC_2_PBS_MESSAGE    = 0x27\n\tSC_2_PBS_TRACK      = 0x28\n\tSC_2_SW_DEV         = 0x18\n\tSC_2_UPE            = 0x19\n\tSC_2_VERSION        = 0x11\n\n\tSC_XOPEN_CRYPT            = 0x75\n\tSC_XOPEN_ENH_I18N         = 0x76\n\tSC_XOPEN_REALTIME         = 0x78\n\tSC_XOPEN_REALTIME_THREADS = 0x79\n\tSC_XOPEN_SHM              = 0x1e\n\tSC_XOPEN_STREAMS          = 0x7a\n\tSC_XOPEN_UNIX             = 0x7b\n\tSC_XOPEN_UUCP             = 0x7c\n\tSC_XOPEN_VERSION          = 0x7d\n\n\tSC_AVPHYS_PAGES     = 0x1f5\n\tSC_PHYS_PAGES       = 0x1f4\n\tSC_NPROCESSORS_CONF = 0x1f6\n\tSC_NPROCESSORS_ONLN = 0x1f7\n)\n\nconst (\n\t_HOST_NAME_MAX                 = 0xff\n\t_IOV_MAX                       = 0x400\n\t_LOGIN_NAME_MAX                = 0x20\n\t_PTHREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_PTHREAD_KEYS_MAX              = 0x100\n\t_PTHREAD_STACK_MIN             = 0x1000\n\t_PTHREAD_THREADS_MAX           = 0xffffffffffffffff\n\t_SEM_VALUE_MAX                 = 0xffffffff\n\t_SYMLOOP_MAX                   = 0x20\n\t_TTY_NAME_MAX                  = 0x104\n\n\t_GR_BUF_LEN = 0xa40\n\t_PW_BUF_LEN = 0x400\n\n\t_CLK_TCK = 0x64\n\n\t_POSIX_ADVISORY_INFO              = -0x1\n\t_POSIX_ARG_MAX                    = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO            = -0x1\n\t_POSIX_BARRIERS                   = 0x30db0\n\t_POSIX_CHILD_MAX                  = 0x19\n\t_POSIX_CLOCK_SELECTION            = -0x1\n\t_POSIX_CPUTIME                    = 0x31069\n\t_POSIX_FSYNC                      = 0x30db0\n\t_POSIX_IPV6                       = 0x0\n\t_POSIX_JOB_CONTROL                = 0x1\n\t_POSIX_MAPPED_FILES               = 0x30db0\n\t_POSIX_MEMLOCK                    = 0x30db0\n\t_POSIX_MEMLOCK_RANGE              = 0x30db0\n\t_POSIX_MEMORY_PROTECTION          = 0x30db0\n\t_POSIX_MESSAGE_PASSING            = -0x1\n\t_POSIX_MONOTONIC_CLOCK            = 0x30db0\n\t_POSIX_PRIORITIZED_IO             = -0x1\n\t_POSIX_PRIORITY_SCHEDULING        = -0x1\n\t_POSIX_RAW_SOCKETS                = 0x30db0\n\t_POSIX_READER_WRITER_LOCKS        = 0x30db0\n\t_POSIX_REALTIME_SIGNALS           = -0x1\n\t_POSIX_REGEXP                     = 0x1\n\t_POSIX_SAVED_IDS                  = 0x1\n\t_POSIX_SEMAPHORES                 = 0x30db0\n\t_POSIX_SHARED_MEMORY_OBJECTS      = 0x31069\n\t_POSIX_SHELL                      = 0x1\n\t_POSIX_SPAWN                      = 0x30db0\n\t_POSIX_SPIN_LOCKS                 = 0x30db0\n\t_POSIX_SPORADIC_SERVER            = -0x1\n\t_POSIX_SYNCHRONIZED_IO            = -0x1\n\t_POSIX_THREAD_ATTR_STACKADDR      = 0x30db0\n\t_POSIX_THREAD_ATTR_STACKSIZE      = 0x30db0\n\t_POSIX_THREAD_CPUTIME             = 0x31069\n\t_POSIX_THREAD_KEYS_MAX            = 0x80\n\t_POSIX_THREAD_PRIO_INHERIT        = -0x1\n\t_POSIX_THREAD_PRIO_PROTECT        = -0x1\n\t_POSIX_THREAD_PRIORITY_SCHEDULING = -0x1\n\t_POSIX_THREAD_PROCESS_SHARED      = -0x1\n\t_POSIX_THREAD_ROBUST_PRIO_INHERIT = -0x1\n\t_POSIX_THREAD_ROBUST_PRIO_PROTECT = -0x1\n\t_POSIX_THREAD_SAFE_FUNCTIONS      = 0x30db0\n\t_POSIX_THREAD_SPORADIC_SERVER     = -0x1\n\t_POSIX_THREADS                    = 0x30db0\n\t_POSIX_TIMERS                     = -0x1\n\t_POSIX_TIMEOUTS                   = 0x30db0\n\t_POSIX_TRACE                      = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS       = -0x1\n\t_POSIX_VERSION                    = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = 0x0\n\t_POSIX_V7_LP64_OFF64   = 0x0\n\t_POSIX_V7_LPBIG_OFFBIG = 0x0\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = 0x0\n\t_POSIX_V6_LP64_OFF64   = 0x0\n\t_POSIX_V6_LPBIG_OFFBIG = 0x0\n\n\t_POSIX2_C_BIND    = 0x30db0\n\t_POSIX2_C_DEV     = -0x1\n\t_POSIX2_CHAR_TERM = 0x1\n\t_POSIX2_LOCALEDEF = -0x1\n\t_POSIX2_PBS       = -0x1\n\t_POSIX2_SW_DEV    = 0x30db0\n\t_POSIX2_UPE       = 0x30db0\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_CRYPT            = 0x1\n\t_XOPEN_ENH_I18N         = -0x1\n\t_XOPEN_REALTIME         = -0x1\n\t_XOPEN_REALTIME_THREADS = -0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_STREAMS          = -0x1\n\t_XOPEN_UNIX             = -0x1\n\t_XOPEN_UUCP             = -0x1\n\n\t_FOPEN_MAX  = 0x14\n\t_NAME_MAX   = 0xff\n\t_RE_DUP_MAX = 0xff\n\n\t_BC_BASE_MAX      = 0x7fffffff\n\t_BC_DIM_MAX       = 0xffff\n\t_BC_SCALE_MAX     = 0x7fffffff\n\t_BC_STRING_MAX    = 0x7fffffff\n\t_COLL_WEIGHTS_MAX = 0x2\n\t_EXPR_NEST_MAX    = 0x20\n\t_LINE_MAX         = 0x800\n\n\t_SHRT_MAX = 0x7fff\n\n\t_PATH_ZONEINFO = \"/usr/share/zoneinfo\"\n)\n\nconst (\n\t_CHAR_BIT = 0x8\n\n\t_INT_MAX = 0x7fffffff\n\n\tsizeofOffT = 0x8\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_defs_solaris.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_defs_solaris.go\n\n//go:build solaris\n// +build solaris\n\npackage sysconf\n\nconst (\n\tSC_AIO_LISTIO_MAX               = 0x12\n\tSC_AIO_MAX                      = 0x13\n\tSC_AIO_PRIO_DELTA_MAX           = 0x14\n\tSC_ARG_MAX                      = 0x1\n\tSC_ATEXIT_MAX                   = 0x4c\n\tSC_BC_BASE_MAX                  = 0x36\n\tSC_BC_DIM_MAX                   = 0x37\n\tSC_BC_SCALE_MAX                 = 0x38\n\tSC_BC_STRING_MAX                = 0x39\n\tSC_CHILD_MAX                    = 0x2\n\tSC_CLK_TCK                      = 0x3\n\tSC_COLL_WEIGHTS_MAX             = 0x3a\n\tSC_DELAYTIMER_MAX               = 0x16\n\tSC_EXPR_NEST_MAX                = 0x3b\n\tSC_GETGR_R_SIZE_MAX             = 0x239\n\tSC_GETPW_R_SIZE_MAX             = 0x23a\n\tSC_HOST_NAME_MAX                = 0x2df\n\tSC_IOV_MAX                      = 0x4d\n\tSC_LINE_MAX                     = 0x3c\n\tSC_LOGIN_NAME_MAX               = 0x23b\n\tSC_MQ_OPEN_MAX                  = 0x1d\n\tSC_MQ_PRIO_MAX                  = 0x1e\n\tSC_NGROUPS_MAX                  = 0x4\n\tSC_OPEN_MAX                     = 0x5\n\tSC_PAGE_SIZE                    = 0xb\n\tSC_PAGESIZE                     = 0xb\n\tSC_THREAD_DESTRUCTOR_ITERATIONS = 0x238\n\tSC_THREAD_KEYS_MAX              = 0x23c\n\tSC_THREAD_STACK_MIN             = 0x23d\n\tSC_THREAD_THREADS_MAX           = 0x23e\n\tSC_RE_DUP_MAX                   = 0x3d\n\tSC_RTSIG_MAX                    = 0x22\n\tSC_SEM_NSEMS_MAX                = 0x24\n\tSC_SEM_VALUE_MAX                = 0x25\n\tSC_SIGQUEUE_MAX                 = 0x27\n\tSC_STREAM_MAX                   = 0x10\n\tSC_SYMLOOP_MAX                  = 0x2e8\n\tSC_TIMER_MAX                    = 0x2c\n\tSC_TTY_NAME_MAX                 = 0x23f\n\tSC_TZNAME_MAX                   = 0x11\n\n\tSC_ADVISORY_INFO              = 0x2db\n\tSC_ASYNCHRONOUS_IO            = 0x15\n\tSC_BARRIERS                   = 0x2dc\n\tSC_CLOCK_SELECTION            = 0x2dd\n\tSC_CPUTIME                    = 0x2de\n\tSC_FSYNC                      = 0x17\n\tSC_IPV6                       = 0x2fa\n\tSC_JOB_CONTROL                = 0x6\n\tSC_MAPPED_FILES               = 0x18\n\tSC_MEMLOCK                    = 0x19\n\tSC_MEMLOCK_RANGE              = 0x1a\n\tSC_MEMORY_PROTECTION          = 0x1b\n\tSC_MESSAGE_PASSING            = 0x1c\n\tSC_MONOTONIC_CLOCK            = 0x2e0\n\tSC_PRIORITIZED_IO             = 0x1f\n\tSC_PRIORITY_SCHEDULING        = 0x20\n\tSC_RAW_SOCKETS                = 0x2fb\n\tSC_READER_WRITER_LOCKS        = 0x2e1\n\tSC_REALTIME_SIGNALS           = 0x21\n\tSC_REGEXP                     = 0x2e2\n\tSC_SAVED_IDS                  = 0x7\n\tSC_SEMAPHORES                 = 0x23\n\tSC_SHARED_MEMORY_OBJECTS      = 0x26\n\tSC_SHELL                      = 0x2e3\n\tSC_SPAWN                      = 0x2e4\n\tSC_SPIN_LOCKS                 = 0x2e5\n\tSC_SPORADIC_SERVER            = 0x2e6\n\tSC_SS_REPL_MAX                = 0x2e7\n\tSC_SYNCHRONIZED_IO            = 0x2a\n\tSC_THREAD_ATTR_STACKADDR      = 0x241\n\tSC_THREAD_ATTR_STACKSIZE      = 0x242\n\tSC_THREAD_CPUTIME             = 0x2e9\n\tSC_THREAD_PRIO_INHERIT        = 0x244\n\tSC_THREAD_PRIO_PROTECT        = 0x245\n\tSC_THREAD_PRIORITY_SCHEDULING = 0x243\n\tSC_THREAD_PROCESS_SHARED      = 0x246\n\tSC_THREAD_SAFE_FUNCTIONS      = 0x247\n\tSC_THREAD_SPORADIC_SERVER     = 0x2ea\n\tSC_THREADS                    = 0x240\n\tSC_TIMEOUTS                   = 0x2eb\n\tSC_TIMERS                     = 0x2b\n\tSC_TRACE                      = 0x2ec\n\tSC_TRACE_EVENT_FILTER         = 0x2ed\n\tSC_TRACE_EVENT_NAME_MAX       = 0x2ee\n\tSC_TRACE_INHERIT              = 0x2ef\n\tSC_TRACE_LOG                  = 0x2f0\n\tSC_TRACE_NAME_MAX             = 0x2f1\n\tSC_TRACE_SYS_MAX              = 0x2f2\n\tSC_TRACE_USER_EVENT_MAX       = 0x2f3\n\tSC_TYPED_MEMORY_OBJECTS       = 0x2f4\n\tSC_VERSION                    = 0x8\n\n\tSC_V6_ILP32_OFF32  = 0x2f5\n\tSC_V6_ILP32_OFFBIG = 0x2f6\n\tSC_V6_LP64_OFF64   = 0x2f7\n\tSC_V6_LPBIG_OFFBIG = 0x2f8\n\n\tSC_2_C_BIND         = 0x2d\n\tSC_2_C_DEV          = 0x2e\n\tSC_2_C_VERSION      = 0x2f\n\tSC_2_CHAR_TERM      = 0x42\n\tSC_2_FORT_DEV       = 0x30\n\tSC_2_FORT_RUN       = 0x31\n\tSC_2_LOCALEDEF      = 0x32\n\tSC_2_PBS            = 0x2d4\n\tSC_2_PBS_ACCOUNTING = 0x2d5\n\tSC_2_PBS_CHECKPOINT = 0x2d6\n\tSC_2_PBS_LOCATE     = 0x2d8\n\tSC_2_PBS_MESSAGE    = 0x2d9\n\tSC_2_PBS_TRACK      = 0x2da\n\tSC_2_SW_DEV         = 0x33\n\tSC_2_UPE            = 0x34\n\tSC_2_VERSION        = 0x35\n\n\tSC_XOPEN_CRYPT            = 0x3e\n\tSC_XOPEN_ENH_I18N         = 0x3f\n\tSC_XOPEN_REALTIME         = 0x2ce\n\tSC_XOPEN_REALTIME_THREADS = 0x2cf\n\tSC_XOPEN_SHM              = 0x40\n\tSC_XOPEN_STREAMS          = 0x2f9\n\tSC_XOPEN_UNIX             = 0x4e\n\tSC_XOPEN_VERSION          = 0xc\n\tSC_XOPEN_XCU_VERSION      = 0x43\n\n\tSC_PHYS_PAGES       = 0x1f4\n\tSC_AVPHYS_PAGES     = 0x1f5\n\tSC_NPROCESSORS_CONF = 0xe\n\tSC_NPROCESSORS_ONLN = 0xf\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_freebsd_386.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_freebsd.go\n\n//go:build freebsd && 386\n// +build freebsd,386\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffff\n\t_SHRT_MAX = 0x7fff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_freebsd_amd64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_freebsd.go\n\n//go:build freebsd && amd64\n// +build freebsd,amd64\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffffffffffff\n\t_SHRT_MAX = 0x7fff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_freebsd_arm.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_freebsd.go\n\n//go:build freebsd && arm\n// +build freebsd,arm\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffff\n\t_SHRT_MAX = 0x7fff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_freebsd_arm64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_freebsd.go\n\n//go:build freebsd && arm64\n// +build freebsd,arm64\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffffffffffff\n\t_SHRT_MAX = 0x7fff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_freebsd_riscv64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_freebsd.go\n\n//go:build freebsd && riscv64\n// +build freebsd,riscv64\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffffffffffff\n\t_SHRT_MAX = 0x7fff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_386.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && 386\n// +build linux,386\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x4000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = 0x1\n\t_POSIX_V7_ILP32_OFFBIG = 0x1\n\t_POSIX_V7_LP64_OFF64   = -0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = 0x1\n\t_POSIX_V6_ILP32_OFFBIG = 0x1\n\t_POSIX_V6_LP64_OFF64   = -0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_amd64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && amd64\n// +build linux,amd64\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x4000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_arm.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && arm\n// +build linux,arm\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x4000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = 0x1\n\t_POSIX_V7_ILP32_OFFBIG = 0x1\n\t_POSIX_V7_LP64_OFF64   = -0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = 0x1\n\t_POSIX_V6_ILP32_OFFBIG = 0x1\n\t_POSIX_V6_LP64_OFF64   = -0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_arm64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && arm64\n// +build linux,arm64\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_loong64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && loong64\n// +build linux,loong64\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_mips.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && mips\n// +build linux,mips\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = 0x1\n\t_POSIX_V7_ILP32_OFFBIG = 0x1\n\t_POSIX_V7_LP64_OFF64   = -0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = 0x1\n\t_POSIX_V6_ILP32_OFFBIG = 0x1\n\t_POSIX_V6_LP64_OFF64   = -0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_mips64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && mips64\n// +build linux,mips64\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_mips64le.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && mips64le\n// +build linux,mips64le\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_mipsle.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && mipsle\n// +build linux,mipsle\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = 0x1\n\t_POSIX_V7_ILP32_OFFBIG = 0x1\n\t_POSIX_V7_LP64_OFF64   = -0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = 0x1\n\t_POSIX_V6_ILP32_OFFBIG = 0x1\n\t_POSIX_V6_LP64_OFF64   = -0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_ppc64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && ppc64\n// +build linux,ppc64\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_ppc64le.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && ppc64le\n// +build linux,ppc64le\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x20000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_riscv64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && riscv64\n// +build linux,riscv64\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x4000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_linux_s390x.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_linux.go\n\n//go:build linux && s390x\n// +build linux,s390x\n\npackage sysconf\n\nconst (\n\t_AIO_PRIO_DELTA_MAX = 0x14\n\t_BC_BASE_MAX        = 0x63\n\t_BC_DIM_MAX         = 0x800\n\t_BC_SCALE_MAX       = 0x63\n\t_BC_STRING_MAX      = 0x3e8\n\t_COLL_WEIGHTS_MAX   = 0xff\n\t_DELAYTIMER_MAX     = 0x7fffffff\n\t_EXPR_NEST_MAX      = 0x20\n\t_HOST_NAME_MAX      = 0x40\n\t_LINE_MAX           = 0x800\n\t_LOGIN_NAME_MAX     = 0x100\n\t_MQ_PRIO_MAX        = 0x8000\n\t_NGROUPS_MAX        = 0x10000\n\t_NSS_BUFLEN_GROUP   = 0x400\n\t_NSS_BUFLEN_PASSWD  = 0x400\n\t_OPEN_MAX           = 0x100\n\t_PTHREAD_KEYS_MAX   = 0x400\n\t_PTHREAD_STACK_MIN  = 0x4000\n\t_RE_DUP_MAX         = 0x7fff\n\t_RTSIG_MAX          = 0x20\n\t_SEM_VALUE_MAX      = 0x7fffffff\n\t_STREAM_MAX         = 0x10\n\t_SYMLOOP_MAX        = -0x1\n\t_TTY_NAME_MAX       = 0x20\n\n\t_UIO_MAXIOV = 0x400\n\n\t_INT_MAX = 0x7fffffff\n\n\t_POSIX_ADVISORY_INFO                = 0x31069\n\t_POSIX_ARG_MAX                      = 0x1000\n\t_POSIX_ASYNCHRONOUS_IO              = 0x31069\n\t_POSIX_BARRIERS                     = 0x31069\n\t_POSIX_CHILD_MAX                    = 0x19\n\t_POSIX_CLOCK_SELECTION              = 0x31069\n\t_POSIX_CPUTIME                      = 0x0\n\t_POSIX_FSYNC                        = 0x31069\n\t_POSIX_IPV6                         = 0x31069\n\t_POSIX_JOB_CONTROL                  = 0x1\n\t_POSIX_MAPPED_FILES                 = 0x31069\n\t_POSIX_MEMLOCK                      = 0x31069\n\t_POSIX_MEMLOCK_RANGE                = 0x31069\n\t_POSIX_MEMORY_PROTECTION            = 0x31069\n\t_POSIX_MESSAGE_PASSING              = 0x31069\n\t_POSIX_MONOTONIC_CLOCK              = 0x0\n\t_POSIX_PRIORITIZED_IO               = 0x31069\n\t_POSIX_PRIORITY_SCHEDULING          = 0x31069\n\t_POSIX_RAW_SOCKETS                  = 0x31069\n\t_POSIX_READER_WRITER_LOCKS          = 0x31069\n\t_POSIX_REALTIME_SIGNALS             = 0x31069\n\t_POSIX_REGEXP                       = 0x1\n\t_POSIX_SAVED_IDS                    = 0x1\n\t_POSIX_SEMAPHORES                   = 0x31069\n\t_POSIX_SHARED_MEMORY_OBJECTS        = 0x31069\n\t_POSIX_SHELL                        = 0x1\n\t_POSIX_SIGQUEUE_MAX                 = 0x20\n\t_POSIX_SPAWN                        = 0x31069\n\t_POSIX_SPIN_LOCKS                   = 0x31069\n\t_POSIX_SPORADIC_SERVER              = -0x1\n\t_POSIX_SYNCHRONIZED_IO              = 0x31069\n\t_POSIX_THREAD_ATTR_STACKADDR        = 0x31069\n\t_POSIX_THREAD_ATTR_STACKSIZE        = 0x31069\n\t_POSIX_THREAD_DESTRUCTOR_ITERATIONS = 0x4\n\t_POSIX_THREAD_PRIO_INHERIT          = 0x31069\n\t_POSIX_THREAD_PRIO_PROTECT          = 0x31069\n\t_POSIX_THREAD_PRIORITY_SCHEDULING   = 0x31069\n\t_POSIX_THREAD_PROCESS_SHARED        = 0x31069\n\t_POSIX_THREAD_SAFE_FUNCTIONS        = 0x31069\n\t_POSIX_THREAD_SPORADIC_SERVER       = -0x1\n\t_POSIX_THREADS                      = 0x31069\n\t_POSIX_TIMEOUTS                     = 0x31069\n\t_POSIX_TIMERS                       = 0x31069\n\t_POSIX_TRACE                        = -0x1\n\t_POSIX_TRACE_EVENT_FILTER           = -0x1\n\t_POSIX_TRACE_INHERIT                = -0x1\n\t_POSIX_TRACE_LOG                    = -0x1\n\t_POSIX_TYPED_MEMORY_OBJECTS         = -0x1\n\t_POSIX_VERSION                      = 0x31069\n\n\t_POSIX_V7_ILP32_OFF32  = -0x1\n\t_POSIX_V7_ILP32_OFFBIG = -0x1\n\t_POSIX_V7_LP64_OFF64   = 0x1\n\t_POSIX_V7_LPBIG_OFFBIG = -0x1\n\n\t_POSIX_V6_ILP32_OFF32  = -0x1\n\t_POSIX_V6_ILP32_OFFBIG = -0x1\n\t_POSIX_V6_LP64_OFF64   = 0x1\n\t_POSIX_V6_LPBIG_OFFBIG = -0x1\n\n\t_POSIX2_C_BIND    = 0x31069\n\t_POSIX2_C_DEV     = 0x31069\n\t_POSIX2_C_VERSION = 0x31069\n\t_POSIX2_CHAR_TERM = 0x31069\n\t_POSIX2_LOCALEDEF = 0x31069\n\t_POSIX2_SW_DEV    = 0x31069\n\t_POSIX2_VERSION   = 0x31069\n\n\t_XOPEN_ENH_I18N         = 0x1\n\t_XOPEN_REALTIME         = 0x1\n\t_XOPEN_REALTIME_THREADS = 0x1\n\t_XOPEN_SHM              = 0x1\n\t_XOPEN_UNIX             = 0x1\n\t_XOPEN_VERSION          = 0x2bc\n\t_XOPEN_XCU_VERSION      = 0x4\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_netbsd_386.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_netbsd.go\n\n//go:build netbsd && 386\n// +build netbsd,386\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_netbsd_amd64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_netbsd.go\n\n//go:build netbsd && amd64\n// +build netbsd,amd64\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffffffffffff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_netbsd_arm.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_netbsd.go\n\n//go:build netbsd && arm\n// +build netbsd,arm\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/go-sysconf/zsysconf_values_netbsd_arm64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs sysconf_values_netbsd.go\n\n//go:build netbsd && arm64\n// +build netbsd,arm64\n\npackage sysconf\n\nconst (\n\t_LONG_MAX = 0x7fffffffffffffff\n)\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/.cirrus.yml",
    "content": "env:\n  CIRRUS_CLONE_DEPTH: 1\n  GO_VERSION: go1.20\n\nfreebsd_12_task:\n  freebsd_instance:\n    image_family: freebsd-12-3\n  install_script: |\n    pkg install -y go\n    GOBIN=$PWD/bin go install golang.org/dl/${GO_VERSION}@latest\n    bin/${GO_VERSION} download\n  build_script: bin/${GO_VERSION} build -buildvcs=false -v ./...\n  test_script: bin/${GO_VERSION} test -buildvcs=false -race ./...\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/README.md",
    "content": "# numcpus\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/tklauser/numcpus.svg)](https://pkg.go.dev/github.com/tklauser/numcpus)\n[![GitHub Action Status](https://github.com/tklauser/numcpus/workflows/Tests/badge.svg)](https://github.com/tklauser/numcpus/actions?query=workflow%3ATests)\n\nPackage numcpus provides information about the number of CPUs in the system.\n\nIt gets the number of CPUs (online, offline, present, possible, configured or\nkernel maximum) on Linux, Darwin, FreeBSD, NetBSD, OpenBSD, DragonflyBSD or\nSolaris/Illumos systems.\n\nOn Linux, the information is retrieved by reading the corresponding CPU\ntopology files in `/sys/devices/system/cpu`.\n\nOn BSD systems, the information is retrieved using the `hw.ncpu` and\n`hw.ncpuonline` sysctls, if supported.\n\nNot all functions are supported on Darwin, FreeBSD, NetBSD, OpenBSD,\nDragonflyBSD and Solaris/Illumos. ErrNotSupported is returned in case a\nfunction is not supported on a particular platform.\n\n## Usage\n\n```Go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/tklauser/numcpus\"\n)\n\nfunc main() {\n\tonline, err := numcpus.GetOnline()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"GetOnline: %v\\n\", err)\n\t}\n\tfmt.Printf(\"online CPUs: %v\\n\", online)\n\n\tpossible, err := numcpus.GetPossible()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"GetPossible: %v\\n\", err)\n\t}\n\tfmt.Printf(\"possible CPUs: %v\\n\", possible)\n}\n```\n\n## References\n\n* [Linux kernel sysfs documentation for CPU attributes](https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu)\n* [Linux kernel CPU topology documentation](https://www.kernel.org/doc/Documentation/cputopology.txt)\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/numcpus.go",
    "content": "// Copyright 2018-2022 Tobias Klauser\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// Package numcpus provides information about the number of CPUs in the system.\n//\n// It gets the number of CPUs (online, offline, present, possible or kernel\n// maximum) on Linux, Darwin, FreeBSD, NetBSD, OpenBSD, DragonflyBSD,\n// Solaris/Illumos or Windows systems.\n//\n// On Linux, the information is retrieved by reading the corresponding CPU\n// topology files in /sys/devices/system/cpu.\n//\n// On BSD systems, the information is retrieved using the hw.ncpu and\n// hw.ncpuonline sysctls, if supported.\n//\n// On Windows systems, the information is retrieved using the\n// GetActiveProcessorCount and GetMaximumProcessorCount functions, respectively.\n//\n// Not all functions are supported on Darwin, FreeBSD, NetBSD, OpenBSD,\n// DragonflyBSD, Solaris/Illumos and Windows. ErrNotSupported is returned in\n// case a function is not supported on a particular platform.\npackage numcpus\n\nimport \"errors\"\n\n// ErrNotSupported is the error returned when the function is not supported.\nvar ErrNotSupported = errors.New(\"function not supported\")\n\n// GetConfigured returns the number of CPUs configured on the system. This\n// function should return the same value as `getconf _SC_NPROCESSORS_CONF` on a\n// unix system.\nfunc GetConfigured() (int, error) {\n\treturn getConfigured()\n}\n\n// GetKernelMax returns the maximum number of CPUs allowed by the kernel\n// configuration. This function is only supported on Linux and Windows systems.\nfunc GetKernelMax() (int, error) {\n\treturn getKernelMax()\n}\n\n// GetOffline returns the number of offline CPUs, i.e. CPUs that are not online\n// because they have been hotplugged off or exceed the limit of CPUs allowed by\n// the kernel configuration (see GetKernelMax). This function is only supported\n// on Linux systems.\nfunc GetOffline() (int, error) {\n\treturn getOffline()\n}\n\n// GetOnline returns the number of CPUs that are online and being scheduled.\nfunc GetOnline() (int, error) {\n\treturn getOnline()\n}\n\n// GetPossible returns the number of possible CPUs, i.e. CPUs that\n// have been allocated resources and can be brought online if they are present.\nfunc GetPossible() (int, error) {\n\treturn getPossible()\n}\n\n// GetPresent returns the number of CPUs present in the system.\nfunc GetPresent() (int, error) {\n\treturn getPresent()\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/numcpus_bsd.go",
    "content": "// Copyright 2018 Tobias Klauser\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//go:build darwin || dragonfly || freebsd || netbsd || openbsd\n// +build darwin dragonfly freebsd netbsd openbsd\n\npackage numcpus\n\nimport (\n\t\"runtime\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc getConfigured() (int, error) {\n\tn, err := unix.SysctlUint32(\"hw.ncpu\")\n\treturn int(n), err\n}\n\nfunc getKernelMax() (int, error) {\n\tif runtime.GOOS == \"freebsd\" {\n\t\tn, err := unix.SysctlUint32(\"kern.smp.maxcpus\")\n\t\treturn int(n), err\n\t}\n\treturn 0, ErrNotSupported\n}\n\nfunc getOffline() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getOnline() (int, error) {\n\tvar n uint32\n\tvar err error\n\tswitch runtime.GOOS {\n\tcase \"netbsd\", \"openbsd\":\n\t\tn, err = unix.SysctlUint32(\"hw.ncpuonline\")\n\t\tif err != nil {\n\t\t\tn, err = unix.SysctlUint32(\"hw.ncpu\")\n\t\t}\n\tdefault:\n\t\tn, err = unix.SysctlUint32(\"hw.ncpu\")\n\t}\n\treturn int(n), err\n}\n\nfunc getPossible() (int, error) {\n\tn, err := unix.SysctlUint32(\"hw.ncpu\")\n\treturn int(n), err\n}\n\nfunc getPresent() (int, error) {\n\tn, err := unix.SysctlUint32(\"hw.ncpu\")\n\treturn int(n), err\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/numcpus_linux.go",
    "content": "// Copyright 2018 Tobias Klauser\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\npackage numcpus\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst sysfsCPUBasePath = \"/sys/devices/system/cpu\"\n\nfunc getFromCPUAffinity() (int, error) {\n\tvar cpuSet unix.CPUSet\n\tif err := unix.SchedGetaffinity(0, &cpuSet); err != nil {\n\t\treturn 0, err\n\t}\n\treturn cpuSet.Count(), nil\n}\n\nfunc readCPURange(file string) (int, error) {\n\tbuf, err := ioutil.ReadFile(filepath.Join(sysfsCPUBasePath, file))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn parseCPURange(strings.Trim(string(buf), \"\\n \"))\n}\n\nfunc parseCPURange(cpus string) (int, error) {\n\tn := int(0)\n\tfor _, cpuRange := range strings.Split(cpus, \",\") {\n\t\tif len(cpuRange) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\trangeOp := strings.SplitN(cpuRange, \"-\", 2)\n\t\tfirst, err := strconv.ParseUint(rangeOp[0], 10, 32)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif len(rangeOp) == 1 {\n\t\t\tn++\n\t\t\tcontinue\n\t\t}\n\t\tlast, err := strconv.ParseUint(rangeOp[1], 10, 32)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += int(last - first + 1)\n\t}\n\treturn n, nil\n}\n\nfunc getConfigured() (int, error) {\n\td, err := os.Open(sysfsCPUBasePath)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer d.Close()\n\tfis, err := d.Readdir(-1)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tcount := 0\n\tfor _, fi := range fis {\n\t\tif name := fi.Name(); fi.IsDir() && strings.HasPrefix(name, \"cpu\") {\n\t\t\t_, err := strconv.ParseInt(name[3:], 10, 64)\n\t\t\tif err == nil {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t}\n\treturn count, nil\n}\n\nfunc getKernelMax() (int, error) {\n\tbuf, err := ioutil.ReadFile(filepath.Join(sysfsCPUBasePath, \"kernel_max\"))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tn, err := strconv.ParseInt(strings.Trim(string(buf), \"\\n \"), 10, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc getOffline() (int, error) {\n\treturn readCPURange(\"offline\")\n}\n\nfunc getOnline() (int, error) {\n\tif n, err := getFromCPUAffinity(); err == nil {\n\t\treturn n, nil\n\t}\n\treturn readCPURange(\"online\")\n}\n\nfunc getPossible() (int, error) {\n\treturn readCPURange(\"possible\")\n}\n\nfunc getPresent() (int, error) {\n\treturn readCPURange(\"present\")\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/numcpus_solaris.go",
    "content": "// Copyright 2021 Tobias Klauser\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//go:build solaris\n// +build solaris\n\npackage numcpus\n\nimport \"golang.org/x/sys/unix\"\n\n// taken from /usr/include/sys/unistd.h\nconst (\n\t_SC_NPROCESSORS_CONF = 14\n\t_SC_NPROCESSORS_ONLN = 15\n\t_SC_NPROCESSORS_MAX  = 516\n)\n\nfunc getConfigured() (int, error) {\n\tn, err := unix.Sysconf(_SC_NPROCESSORS_CONF)\n\treturn int(n), err\n}\n\nfunc getKernelMax() (int, error) {\n\tn, err := unix.Sysconf(_SC_NPROCESSORS_MAX)\n\treturn int(n), err\n}\n\nfunc getOffline() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getOnline() (int, error) {\n\tn, err := unix.Sysconf(_SC_NPROCESSORS_ONLN)\n\treturn int(n), err\n}\n\nfunc getPossible() (int, error) {\n\tn, err := unix.Sysconf(_SC_NPROCESSORS_CONF)\n\treturn int(n), err\n}\n\nfunc getPresent() (int, error) {\n\tn, err := unix.Sysconf(_SC_NPROCESSORS_CONF)\n\treturn int(n), err\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/numcpus_unsupported.go",
    "content": "// Copyright 2021 Tobias Klauser\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//go:build !darwin && !dragonfly && !freebsd && !linux && !netbsd && !openbsd && !solaris && !windows\n// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows\n\npackage numcpus\n\nfunc getConfigured() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getKernelMax() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getOffline() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getOnline() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getPossible() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getPresent() (int, error) {\n\treturn 0, ErrNotSupported\n}\n"
  },
  {
    "path": "vendor/github.com/tklauser/numcpus/numcpus_windows.go",
    "content": "// Copyright 2022 Tobias Klauser\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\npackage numcpus\n\nimport \"golang.org/x/sys/windows\"\n\nfunc getConfigured() (int, error) {\n\treturn int(windows.GetActiveProcessorCount(windows.ALL_PROCESSOR_GROUPS)), nil\n}\n\nfunc getKernelMax() (int, error) {\n\treturn int(windows.GetMaximumProcessorCount(windows.ALL_PROCESSOR_GROUPS)), nil\n}\n\nfunc getOffline() (int, error) {\n\treturn 0, ErrNotSupported\n}\n\nfunc getOnline() (int, error) {\n\treturn int(windows.GetActiveProcessorCount(windows.ALL_PROCESSOR_GROUPS)), nil\n}\n\nfunc getPossible() (int, error) {\n\treturn int(windows.GetActiveProcessorCount(windows.ALL_PROCESSOR_GROUPS)), nil\n}\n\nfunc getPresent() (int, error) {\n\treturn int(windows.GetActiveProcessorCount(windows.ALL_PROCESSOR_GROUPS)), nil\n}\n"
  },
  {
    "path": "vendor/github.com/yusufpapurcu/wmi/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Stack Exchange\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"
  },
  {
    "path": "vendor/github.com/yusufpapurcu/wmi/README.md",
    "content": "wmi\n===\n\nPackage wmi provides a WQL interface to Windows WMI.\n\nNote: It interfaces with WMI on the local machine, therefore it only runs on Windows.\n"
  },
  {
    "path": "vendor/github.com/yusufpapurcu/wmi/swbemservices.go",
    "content": "//go:build windows\n// +build windows\n\npackage wmi\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"sync\"\n\n\t\"github.com/go-ole/go-ole\"\n\t\"github.com/go-ole/go-ole/oleutil\"\n)\n\n// SWbemServices is used to access wmi. See https://msdn.microsoft.com/en-us/library/aa393719(v=vs.85).aspx\ntype SWbemServices struct {\n\t//TODO: track namespace. Not sure if we can re connect to a different namespace using the same instance\n\tcWMIClient            *Client //This could also be an embedded struct, but then we would need to branch on Client vs SWbemServices in the Query method\n\tsWbemLocatorIUnknown  *ole.IUnknown\n\tsWbemLocatorIDispatch *ole.IDispatch\n\tqueries               chan *queryRequest\n\tcloseError            chan error\n\tlQueryorClose         sync.Mutex\n}\n\ntype queryRequest struct {\n\tquery    string\n\tdst      interface{}\n\targs     []interface{}\n\tfinished chan error\n}\n\n// InitializeSWbemServices will return a new SWbemServices object that can be used to query WMI\nfunc InitializeSWbemServices(c *Client, connectServerArgs ...interface{}) (*SWbemServices, error) {\n\t//fmt.Println(\"InitializeSWbemServices: Starting\")\n\t//TODO: implement connectServerArgs as optional argument for init with connectServer call\n\ts := new(SWbemServices)\n\ts.cWMIClient = c\n\ts.queries = make(chan *queryRequest)\n\tinitError := make(chan error)\n\tgo s.process(initError)\n\n\terr, ok := <-initError\n\tif ok {\n\t\treturn nil, err //Send error to caller\n\t}\n\t//fmt.Println(\"InitializeSWbemServices: Finished\")\n\treturn s, nil\n}\n\n// Close will clear and release all of the SWbemServices resources\nfunc (s *SWbemServices) Close() error {\n\ts.lQueryorClose.Lock()\n\tif s == nil || s.sWbemLocatorIDispatch == nil {\n\t\ts.lQueryorClose.Unlock()\n\t\treturn fmt.Errorf(\"SWbemServices is not Initialized\")\n\t}\n\tif s.queries == nil {\n\t\ts.lQueryorClose.Unlock()\n\t\treturn fmt.Errorf(\"SWbemServices has been closed\")\n\t}\n\t//fmt.Println(\"Close: sending close request\")\n\tvar result error\n\tce := make(chan error)\n\ts.closeError = ce //Race condition if multiple callers to close. May need to lock here\n\tclose(s.queries)  //Tell background to shut things down\n\ts.lQueryorClose.Unlock()\n\terr, ok := <-ce\n\tif ok {\n\t\tresult = err\n\t}\n\t//fmt.Println(\"Close: finished\")\n\treturn result\n}\n\nfunc (s *SWbemServices) process(initError chan error) {\n\t//fmt.Println(\"process: starting background thread initialization\")\n\t//All OLE/WMI calls must happen on the same initialized thead, so lock this goroutine\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n\n\terr := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED)\n\tif err != nil {\n\t\toleCode := err.(*ole.OleError).Code()\n\t\tif oleCode != ole.S_OK && oleCode != S_FALSE {\n\t\t\tinitError <- fmt.Errorf(\"ole.CoInitializeEx error: %v\", err)\n\t\t\treturn\n\t\t}\n\t}\n\tdefer ole.CoUninitialize()\n\n\tunknown, err := oleutil.CreateObject(\"WbemScripting.SWbemLocator\")\n\tif err != nil {\n\t\tinitError <- fmt.Errorf(\"CreateObject SWbemLocator error: %v\", err)\n\t\treturn\n\t} else if unknown == nil {\n\t\tinitError <- ErrNilCreateObject\n\t\treturn\n\t}\n\tdefer unknown.Release()\n\ts.sWbemLocatorIUnknown = unknown\n\n\tdispatch, err := s.sWbemLocatorIUnknown.QueryInterface(ole.IID_IDispatch)\n\tif err != nil {\n\t\tinitError <- fmt.Errorf(\"SWbemLocator QueryInterface error: %v\", err)\n\t\treturn\n\t}\n\tdefer dispatch.Release()\n\ts.sWbemLocatorIDispatch = dispatch\n\n\t// we can't do the ConnectServer call outside the loop unless we find a way to track and re-init the connectServerArgs\n\t//fmt.Println(\"process: initialized. closing initError\")\n\tclose(initError)\n\t//fmt.Println(\"process: waiting for queries\")\n\tfor q := range s.queries {\n\t\t//fmt.Printf(\"process: new query: len(query)=%d\\n\", len(q.query))\n\t\terrQuery := s.queryBackground(q)\n\t\t//fmt.Println(\"process: s.queryBackground finished\")\n\t\tif errQuery != nil {\n\t\t\tq.finished <- errQuery\n\t\t}\n\t\tclose(q.finished)\n\t}\n\t//fmt.Println(\"process: queries channel closed\")\n\ts.queries = nil //set channel to nil so we know it is closed\n\t//TODO: I think the Release/Clear calls can panic if things are in a bad state.\n\t//TODO: May need to recover from panics and send error to method caller instead.\n\tclose(s.closeError)\n}\n\n// Query runs the WQL query using a SWbemServices instance and appends the values to dst.\n//\n// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in\n// the query must have the same name in dst. Supported types are all signed and\n// unsigned integers, time.Time, string, bool, or a pointer to one of those.\n// Array types are not supported.\n//\n// By default, the local machine and default namespace are used. These can be\n// changed using connectServerArgs. See\n// http://msdn.microsoft.com/en-us/library/aa393720.aspx for details.\nfunc (s *SWbemServices) Query(query string, dst interface{}, connectServerArgs ...interface{}) error {\n\ts.lQueryorClose.Lock()\n\tif s == nil || s.sWbemLocatorIDispatch == nil {\n\t\ts.lQueryorClose.Unlock()\n\t\treturn fmt.Errorf(\"SWbemServices is not Initialized\")\n\t}\n\tif s.queries == nil {\n\t\ts.lQueryorClose.Unlock()\n\t\treturn fmt.Errorf(\"SWbemServices has been closed\")\n\t}\n\n\t//fmt.Println(\"Query: Sending query request\")\n\tqr := queryRequest{\n\t\tquery:    query,\n\t\tdst:      dst,\n\t\targs:     connectServerArgs,\n\t\tfinished: make(chan error),\n\t}\n\ts.queries <- &qr\n\ts.lQueryorClose.Unlock()\n\terr, ok := <-qr.finished\n\tif ok {\n\t\t//fmt.Println(\"Query: Finished with error\")\n\t\treturn err //Send error to caller\n\t}\n\t//fmt.Println(\"Query: Finished\")\n\treturn nil\n}\n\nfunc (s *SWbemServices) queryBackground(q *queryRequest) error {\n\tif s == nil || s.sWbemLocatorIDispatch == nil {\n\t\treturn fmt.Errorf(\"SWbemServices is not Initialized\")\n\t}\n\twmi := s.sWbemLocatorIDispatch //Should just rename in the code, but this will help as we break things apart\n\t//fmt.Println(\"queryBackground: Starting\")\n\n\tdv := reflect.ValueOf(q.dst)\n\tif dv.Kind() != reflect.Ptr || dv.IsNil() {\n\t\treturn ErrInvalidEntityType\n\t}\n\tdv = dv.Elem()\n\tmat, elemType := checkMultiArg(dv)\n\tif mat == multiArgTypeInvalid {\n\t\treturn ErrInvalidEntityType\n\t}\n\n\t// service is a SWbemServices\n\tserviceRaw, err := oleutil.CallMethod(wmi, \"ConnectServer\", q.args...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tservice := serviceRaw.ToIDispatch()\n\tdefer serviceRaw.Clear()\n\n\t// result is a SWBemObjectSet\n\tresultRaw, err := oleutil.CallMethod(service, \"ExecQuery\", q.query)\n\tif err != nil {\n\t\treturn err\n\t}\n\tresult := resultRaw.ToIDispatch()\n\tdefer resultRaw.Clear()\n\n\tcount, err := oleInt64(result, \"Count\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tenumProperty, err := result.GetProperty(\"_NewEnum\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer enumProperty.Clear()\n\n\tenum, err := enumProperty.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif enum == nil {\n\t\treturn fmt.Errorf(\"can't get IEnumVARIANT, enum is nil\")\n\t}\n\tdefer enum.Release()\n\n\t// Initialize a slice with Count capacity\n\tdv.Set(reflect.MakeSlice(dv.Type(), 0, int(count)))\n\n\tvar errFieldMismatch error\n\tfor itemRaw, length, err := enum.Next(1); length > 0; itemRaw, length, err = enum.Next(1) {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\terr := func() error {\n\t\t\t// item is a SWbemObject, but really a Win32_Process\n\t\t\titem := itemRaw.ToIDispatch()\n\t\t\tdefer item.Release()\n\n\t\t\tev := reflect.New(elemType)\n\t\t\tif err = s.cWMIClient.loadEntity(ev.Interface(), item); err != nil {\n\t\t\t\tif _, ok := err.(*ErrFieldMismatch); ok {\n\t\t\t\t\t// We continue loading entities even in the face of field mismatch errors.\n\t\t\t\t\t// If we encounter any other error, that other error is returned. Otherwise,\n\t\t\t\t\t// an ErrFieldMismatch is returned.\n\t\t\t\t\terrFieldMismatch = err\n\t\t\t\t} else {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif mat != multiArgTypeStructPtr {\n\t\t\t\tev = ev.Elem()\n\t\t\t}\n\t\t\tdv.Set(reflect.Append(dv, ev))\n\t\t\treturn nil\n\t\t}()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t//fmt.Println(\"queryBackground: Finished\")\n\treturn errFieldMismatch\n}\n"
  },
  {
    "path": "vendor/github.com/yusufpapurcu/wmi/wmi.go",
    "content": "//go:build windows\n// +build windows\n\n/*\nPackage wmi provides a WQL interface for WMI on Windows.\n\nExample code to print names of running processes:\n\n\ttype Win32_Process struct {\n\t\tName string\n\t}\n\n\tfunc main() {\n\t\tvar dst []Win32_Process\n\t\tq := wmi.CreateQuery(&dst, \"\")\n\t\terr := wmi.Query(q, &dst)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tfor i, v := range dst {\n\t\t\tprintln(i, v.Name)\n\t\t}\n\t}\n*/\npackage wmi\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/go-ole/go-ole\"\n\t\"github.com/go-ole/go-ole/oleutil\"\n)\n\nvar l = log.New(os.Stdout, \"\", log.LstdFlags)\n\nvar (\n\tErrInvalidEntityType = errors.New(\"wmi: invalid entity type\")\n\t// ErrNilCreateObject is the error returned if CreateObject returns nil even\n\t// if the error was nil.\n\tErrNilCreateObject = errors.New(\"wmi: create object returned nil\")\n\tlock               sync.Mutex\n)\n\n// S_FALSE is returned by CoInitializeEx if it was already called on this thread.\nconst S_FALSE = 0x00000001\n\n// QueryNamespace invokes Query with the given namespace on the local machine.\nfunc QueryNamespace(query string, dst interface{}, namespace string) error {\n\treturn Query(query, dst, nil, namespace)\n}\n\n// Query runs the WQL query and appends the values to dst.\n//\n// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in\n// the query must have the same name in dst. Supported types are all signed and\n// unsigned integers, time.Time, string, bool, or a pointer to one of those.\n// Array types are not supported.\n//\n// By default, the local machine and default namespace are used. These can be\n// changed using connectServerArgs. See\n// https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/swbemlocator-connectserver\n// for details.\n//\n// Query is a wrapper around DefaultClient.Query.\nfunc Query(query string, dst interface{}, connectServerArgs ...interface{}) error {\n\tif DefaultClient.SWbemServicesClient == nil {\n\t\treturn DefaultClient.Query(query, dst, connectServerArgs...)\n\t}\n\treturn DefaultClient.SWbemServicesClient.Query(query, dst, connectServerArgs...)\n}\n\n// CallMethod calls a method named methodName on an instance of the class named\n// className, with the given params.\n//\n// CallMethod is a wrapper around DefaultClient.CallMethod.\nfunc CallMethod(connectServerArgs []interface{}, className, methodName string, params []interface{}) (int32, error) {\n\treturn DefaultClient.CallMethod(connectServerArgs, className, methodName, params)\n}\n\n// A Client is an WMI query client.\n//\n// Its zero value (DefaultClient) is a usable client.\ntype Client struct {\n\t// NonePtrZero specifies if nil values for fields which aren't pointers\n\t// should be returned as the field types zero value.\n\t//\n\t// Setting this to true allows stucts without pointer fields to be used\n\t// without the risk failure should a nil value returned from WMI.\n\tNonePtrZero bool\n\n\t// PtrNil specifies if nil values for pointer fields should be returned\n\t// as nil.\n\t//\n\t// Setting this to true will set pointer fields to nil where WMI\n\t// returned nil, otherwise the types zero value will be returned.\n\tPtrNil bool\n\n\t// AllowMissingFields specifies that struct fields not present in the\n\t// query result should not result in an error.\n\t//\n\t// Setting this to true allows custom queries to be used with full\n\t// struct definitions instead of having to define multiple structs.\n\tAllowMissingFields bool\n\n\t// SWbemServiceClient is an optional SWbemServices object that can be\n\t// initialized and then reused across multiple queries. If it is null\n\t// then the method will initialize a new temporary client each time.\n\tSWbemServicesClient *SWbemServices\n}\n\n// DefaultClient is the default Client and is used by Query, QueryNamespace, and CallMethod.\nvar DefaultClient = &Client{}\n\n// coinitService coinitializes WMI service. If no error is returned, a cleanup function\n// is returned which must be executed (usually deferred) to clean up allocated resources.\nfunc (c *Client) coinitService(connectServerArgs ...interface{}) (*ole.IDispatch, func(), error) {\n\tvar unknown *ole.IUnknown\n\tvar wmi *ole.IDispatch\n\tvar serviceRaw *ole.VARIANT\n\n\t// be sure teardown happens in the reverse\n\t// order from that which they were created\n\tdeferFn := func() {\n\t\tif serviceRaw != nil {\n\t\t\tserviceRaw.Clear()\n\t\t}\n\t\tif wmi != nil {\n\t\t\twmi.Release()\n\t\t}\n\t\tif unknown != nil {\n\t\t\tunknown.Release()\n\t\t}\n\t\tole.CoUninitialize()\n\t}\n\n\t// if we error'ed here, clean up immediately\n\tvar err error\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tdeferFn()\n\t\t}\n\t}()\n\n\terr = ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED)\n\tif err != nil {\n\t\toleCode := err.(*ole.OleError).Code()\n\t\tif oleCode != ole.S_OK && oleCode != S_FALSE {\n\t\t\treturn nil, nil, err\n\t\t}\n\t}\n\n\tunknown, err = oleutil.CreateObject(\"WbemScripting.SWbemLocator\")\n\tif err != nil {\n\t\treturn nil, nil, err\n\t} else if unknown == nil {\n\t\treturn nil, nil, ErrNilCreateObject\n\t}\n\n\twmi, err = unknown.QueryInterface(ole.IID_IDispatch)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// service is a SWbemServices\n\tserviceRaw, err = oleutil.CallMethod(wmi, \"ConnectServer\", connectServerArgs...)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn serviceRaw.ToIDispatch(), deferFn, nil\n}\n\n// CallMethod calls a WMI method named methodName on an instance\n// of the class named className. It passes in the arguments given\n// in params. Use connectServerArgs to customize the machine and\n// namespace; by default, the local machine and default namespace\n// are used. See\n// https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/swbemlocator-connectserver\n// for details.\nfunc (c *Client) CallMethod(connectServerArgs []interface{}, className, methodName string, params []interface{}) (int32, error) {\n\tservice, cleanup, err := c.coinitService(connectServerArgs...)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"coinit: %v\", err)\n\t}\n\tdefer cleanup()\n\n\t// Get class\n\tclassRaw, err := oleutil.CallMethod(service, \"Get\", className)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"CallMethod Get class %s: %v\", className, err)\n\t}\n\tclass := classRaw.ToIDispatch()\n\tdefer classRaw.Clear()\n\n\t// Run method\n\tresultRaw, err := oleutil.CallMethod(class, methodName, params...)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"CallMethod %s.%s: %v\", className, methodName, err)\n\t}\n\tresultInt, ok := resultRaw.Value().(int32)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"return value was not an int32: %v (%T)\", resultRaw, resultRaw)\n\t}\n\n\treturn resultInt, nil\n}\n\n// Query runs the WQL query and appends the values to dst.\n//\n// dst must have type *[]S or *[]*S, for some struct type S. Fields selected in\n// the query must have the same name in dst. Supported types are all signed and\n// unsigned integers, time.Time, string, bool, or a pointer to one of those.\n// Array types are not supported.\n//\n// By default, the local machine and default namespace are used. These can be\n// changed using connectServerArgs. See\n// https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/swbemlocator-connectserver\n// for details.\nfunc (c *Client) Query(query string, dst interface{}, connectServerArgs ...interface{}) error {\n\tdv := reflect.ValueOf(dst)\n\tif dv.Kind() != reflect.Ptr || dv.IsNil() {\n\t\treturn ErrInvalidEntityType\n\t}\n\tdv = dv.Elem()\n\tmat, elemType := checkMultiArg(dv)\n\tif mat == multiArgTypeInvalid {\n\t\treturn ErrInvalidEntityType\n\t}\n\n\tlock.Lock()\n\tdefer lock.Unlock()\n\truntime.LockOSThread()\n\tdefer runtime.UnlockOSThread()\n\n\tservice, cleanup, err := c.coinitService(connectServerArgs...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer cleanup()\n\n\t// result is a SWBemObjectSet\n\tresultRaw, err := oleutil.CallMethod(service, \"ExecQuery\", query)\n\tif err != nil {\n\t\treturn err\n\t}\n\tresult := resultRaw.ToIDispatch()\n\tdefer resultRaw.Clear()\n\n\tcount, err := oleInt64(result, \"Count\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tenumProperty, err := result.GetProperty(\"_NewEnum\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer enumProperty.Clear()\n\n\tenum, err := enumProperty.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif enum == nil {\n\t\treturn fmt.Errorf(\"can't get IEnumVARIANT, enum is nil\")\n\t}\n\tdefer enum.Release()\n\n\t// Initialize a slice with Count capacity\n\tdv.Set(reflect.MakeSlice(dv.Type(), 0, int(count)))\n\n\tvar errFieldMismatch error\n\tfor itemRaw, length, err := enum.Next(1); length > 0; itemRaw, length, err = enum.Next(1) {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\terr := func() error {\n\t\t\t// item is a SWbemObject, but really a Win32_Process\n\t\t\titem := itemRaw.ToIDispatch()\n\t\t\tdefer item.Release()\n\n\t\t\tev := reflect.New(elemType)\n\t\t\tif err = c.loadEntity(ev.Interface(), item); err != nil {\n\t\t\t\tif _, ok := err.(*ErrFieldMismatch); ok {\n\t\t\t\t\t// We continue loading entities even in the face of field mismatch errors.\n\t\t\t\t\t// If we encounter any other error, that other error is returned. Otherwise,\n\t\t\t\t\t// an ErrFieldMismatch is returned.\n\t\t\t\t\terrFieldMismatch = err\n\t\t\t\t} else {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif mat != multiArgTypeStructPtr {\n\t\t\t\tev = ev.Elem()\n\t\t\t}\n\t\t\tdv.Set(reflect.Append(dv, ev))\n\t\t\treturn nil\n\t\t}()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn errFieldMismatch\n}\n\n// ErrFieldMismatch is returned when a field is to be loaded into a different\n// type than the one it was stored from, or when a field is missing or\n// unexported in the destination struct.\n// StructType is the type of the struct pointed to by the destination argument.\ntype ErrFieldMismatch struct {\n\tStructType reflect.Type\n\tFieldName  string\n\tReason     string\n}\n\nfunc (e *ErrFieldMismatch) Error() string {\n\treturn fmt.Sprintf(\"wmi: cannot load field %q into a %q: %s\",\n\t\te.FieldName, e.StructType, e.Reason)\n}\n\nvar timeType = reflect.TypeOf(time.Time{})\n\n// loadEntity loads a SWbemObject into a struct pointer.\nfunc (c *Client) loadEntity(dst interface{}, src *ole.IDispatch) (errFieldMismatch error) {\n\tv := reflect.ValueOf(dst).Elem()\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tf := v.Field(i)\n\t\tof := f\n\t\tisPtr := f.Kind() == reflect.Ptr\n\t\tn := v.Type().Field(i).Name\n\t\tif n[0] < 'A' || n[0] > 'Z' {\n\t\t\tcontinue\n\t\t}\n\t\tif !f.CanSet() {\n\t\t\treturn &ErrFieldMismatch{\n\t\t\t\tStructType: of.Type(),\n\t\t\t\tFieldName:  n,\n\t\t\t\tReason:     \"CanSet() is false\",\n\t\t\t}\n\t\t}\n\t\tprop, err := oleutil.GetProperty(src, n)\n\t\tif err != nil {\n\t\t\tif !c.AllowMissingFields {\n\t\t\t\terrFieldMismatch = &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"no such struct field\",\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tdefer prop.Clear()\n\n\t\tif isPtr && !(c.PtrNil && prop.VT == 0x1) {\n\t\t\tptr := reflect.New(f.Type().Elem())\n\t\t\tf.Set(ptr)\n\t\t\tf = f.Elem()\n\t\t}\n\n\t\tif prop.VT == 0x1 { //VT_NULL\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch val := prop.Value().(type) {\n\t\tcase int8, int16, int32, int64, int:\n\t\t\tv := reflect.ValueOf(val).Int()\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tf.SetInt(v)\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\tf.SetUint(uint64(v))\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not an integer class\",\n\t\t\t\t}\n\t\t\t}\n\t\tcase uint8, uint16, uint32, uint64:\n\t\t\tv := reflect.ValueOf(val).Uint()\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tf.SetInt(int64(v))\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\tf.SetUint(v)\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not an integer class\",\n\t\t\t\t}\n\t\t\t}\n\t\tcase string:\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.String:\n\t\t\t\tf.SetString(val)\n\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\tiv, err := strconv.ParseInt(val, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tf.SetInt(iv)\n\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t\tuv, err := strconv.ParseUint(val, 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tf.SetUint(uv)\n\t\t\tcase reflect.Struct:\n\t\t\t\tswitch f.Type() {\n\t\t\t\tcase timeType:\n\t\t\t\t\tif len(val) == 25 {\n\t\t\t\t\t\tmins, err := strconv.Atoi(val[22:])\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tval = val[:22] + fmt.Sprintf(\"%02d%02d\", mins/60, mins%60)\n\t\t\t\t\t}\n\t\t\t\t\tt, err := time.Parse(\"20060102150405.000000-0700\", val)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tf.Set(reflect.ValueOf(t))\n\t\t\t\t}\n\t\t\t}\n\t\tcase bool:\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Bool:\n\t\t\t\tf.SetBool(val)\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not a bool\",\n\t\t\t\t}\n\t\t\t}\n\t\tcase float32:\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Float32:\n\t\t\t\tf.SetFloat(float64(val))\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not a Float32\",\n\t\t\t\t}\n\t\t\t}\n\t\tcase float64:\n\t\t\tswitch f.Kind() {\n\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\tf.SetFloat(val)\n\t\t\tdefault:\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     \"not a Float64\",\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\tdefault:\n\t\t\tif f.Kind() == reflect.Slice {\n\t\t\t\tswitch f.Type().Elem().Kind() {\n\t\t\t\tcase reflect.String:\n\t\t\t\t\tsafeArray := prop.ToArray()\n\t\t\t\t\tif safeArray != nil {\n\t\t\t\t\t\tarr := safeArray.ToValueArray()\n\t\t\t\t\t\tfArr := reflect.MakeSlice(f.Type(), len(arr), len(arr))\n\t\t\t\t\t\tfor i, v := range arr {\n\t\t\t\t\t\t\ts := fArr.Index(i)\n\t\t\t\t\t\t\ts.SetString(v.(string))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.Set(fArr)\n\t\t\t\t\t}\n\t\t\t\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\t\t\t\tsafeArray := prop.ToArray()\n\t\t\t\t\tif safeArray != nil {\n\t\t\t\t\t\tarr := safeArray.ToValueArray()\n\t\t\t\t\t\tfArr := reflect.MakeSlice(f.Type(), len(arr), len(arr))\n\t\t\t\t\t\tfor i, v := range arr {\n\t\t\t\t\t\t\ts := fArr.Index(i)\n\t\t\t\t\t\t\ts.SetUint(reflect.ValueOf(v).Uint())\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.Set(fArr)\n\t\t\t\t\t}\n\t\t\t\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\t\t\t\tsafeArray := prop.ToArray()\n\t\t\t\t\tif safeArray != nil {\n\t\t\t\t\t\tarr := safeArray.ToValueArray()\n\t\t\t\t\t\tfArr := reflect.MakeSlice(f.Type(), len(arr), len(arr))\n\t\t\t\t\t\tfor i, v := range arr {\n\t\t\t\t\t\t\ts := fArr.Index(i)\n\t\t\t\t\t\t\ts.SetInt(reflect.ValueOf(v).Int())\n\t\t\t\t\t\t}\n\t\t\t\t\t\tf.Set(fArr)\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\t\tFieldName:  n,\n\t\t\t\t\t\tReason:     fmt.Sprintf(\"unsupported slice type (%T)\", val),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttypeof := reflect.TypeOf(val)\n\t\t\t\tif typeof == nil && (isPtr || c.NonePtrZero) {\n\t\t\t\t\tif (isPtr && c.PtrNil) || (!isPtr && c.NonePtrZero) {\n\t\t\t\t\t\tof.Set(reflect.Zero(of.Type()))\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\treturn &ErrFieldMismatch{\n\t\t\t\t\tStructType: of.Type(),\n\t\t\t\t\tFieldName:  n,\n\t\t\t\t\tReason:     fmt.Sprintf(\"unsupported type (%T)\", val),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn errFieldMismatch\n}\n\ntype multiArgType int\n\nconst (\n\tmultiArgTypeInvalid multiArgType = iota\n\tmultiArgTypeStruct\n\tmultiArgTypeStructPtr\n)\n\n// checkMultiArg checks that v has type []S, []*S for some struct type S.\n//\n// It returns what category the slice's elements are, and the reflect.Type\n// that represents S.\nfunc checkMultiArg(v reflect.Value) (m multiArgType, elemType reflect.Type) {\n\tif v.Kind() != reflect.Slice {\n\t\treturn multiArgTypeInvalid, nil\n\t}\n\telemType = v.Type().Elem()\n\tswitch elemType.Kind() {\n\tcase reflect.Struct:\n\t\treturn multiArgTypeStruct, elemType\n\tcase reflect.Ptr:\n\t\telemType = elemType.Elem()\n\t\tif elemType.Kind() == reflect.Struct {\n\t\t\treturn multiArgTypeStructPtr, elemType\n\t\t}\n\t}\n\treturn multiArgTypeInvalid, nil\n}\n\nfunc oleInt64(item *ole.IDispatch, prop string) (int64, error) {\n\tv, err := oleutil.GetProperty(item, prop)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer v.Clear()\n\n\ti := int64(v.Val)\n\treturn i, nil\n}\n\n// CreateQuery returns a WQL query string that queries all columns of src. where\n// is an optional string that is appended to the query, to be used with WHERE\n// clauses. In such a case, the \"WHERE\" string should appear at the beginning.\n// The wmi class is obtained by the name of the type. You can pass a optional\n// class throught the variadic class parameter which is useful for anonymous\n// structs.\nfunc CreateQuery(src interface{}, where string, class ...string) string {\n\tvar b bytes.Buffer\n\tb.WriteString(\"SELECT \")\n\ts := reflect.Indirect(reflect.ValueOf(src))\n\tt := s.Type()\n\tif s.Kind() == reflect.Slice {\n\t\tt = t.Elem()\n\t}\n\tif t.Kind() != reflect.Struct {\n\t\treturn \"\"\n\t}\n\tvar fields []string\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfields = append(fields, t.Field(i).Name)\n\t}\n\tb.WriteString(strings.Join(fields, \", \"))\n\tb.WriteString(\" FROM \")\n\tif len(class) > 0 {\n\t\tb.WriteString(class[0])\n\t} else {\n\t\tb.WriteString(t.Name())\n\t}\n\tb.WriteString(\" \" + where)\n\treturn b.String()\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/CONTRIBUTING.md",
    "content": "# Contributing to go.opentelemetry.io/auto/sdk\n\nThe `go.opentelemetry.io/auto/sdk` module is a purpose built OpenTelemetry SDK.\nIt is designed to be:\n\n0. An OpenTelemetry compliant SDK\n1. Instrumented by auto-instrumentation (serializable into OTLP JSON)\n2. Lightweight\n3. User-friendly\n\nThese design choices are listed in the order of their importance.\n\nThe primary design goal of this module is to be an OpenTelemetry SDK.\nThis means that it needs to implement the Go APIs found in `go.opentelemetry.io/otel`.\n\nHaving met the requirement of SDK compliance, this module needs to provide code that the `go.opentelemetry.io/auto` module can instrument.\nThe chosen approach to meet this goal is to ensure the telemetry from the SDK is serializable into JSON encoded OTLP.\nThis ensures then that the serialized form is compatible with other OpenTelemetry systems, and the auto-instrumentation can use these systems to deserialize any telemetry it is sent.\n\nOutside of these first two goals, the intended use becomes relevant.\nThis package is intended to be used in the `go.opentelemetry.io/otel` global API as a default when the auto-instrumentation is running.\nBecause of this, this package needs to not add unnecessary dependencies to that API.\nIdeally, it adds none.\nIt also needs to operate efficiently.\n\nFinally, this module is designed to be user-friendly to Go development.\nIt hides complexity in order to provide simpler APIs when the previous goals can all still be met.\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/VERSIONING.md",
    "content": "# Versioning\n\nThis document describes the versioning policy for this module.\nThis policy is designed so the following goals can be achieved.\n\n**Users are provided a codebase of value that is stable and secure.**\n\n## Policy\n\n* Versioning of this module will be idiomatic of a Go project using [Go modules](https://github.com/golang/go/wiki/Modules).\n  * [Semantic import versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning) will be used.\n    * Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html).\n    * Any `v2` or higher version of this module will be included as a `/vN` at the end of the module path used in `go.mod` files and in the package import path.\n\n* GitHub releases will be made for all releases.\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage sdk provides an auto-instrumentable OpenTelemetry SDK.\n\nAn [go.opentelemetry.io/auto.Instrumentation] can be configured to target the\nprocess running this SDK. In that case, all telemetry the SDK produces will be\nprocessed and handled by that [go.opentelemetry.io/auto.Instrumentation].\n\nBy default, if there is no [go.opentelemetry.io/auto.Instrumentation] set to\nauto-instrument the SDK, the SDK will not generate any telemetry.\n*/\npackage sdk\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/attr.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\n// Attr is a key-value pair.\ntype Attr struct {\n\tKey   string `json:\"key,omitempty\"`\n\tValue Value  `json:\"value,omitempty\"`\n}\n\n// String returns an Attr for a string value.\nfunc String(key, value string) Attr {\n\treturn Attr{key, StringValue(value)}\n}\n\n// Int64 returns an Attr for an int64 value.\nfunc Int64(key string, value int64) Attr {\n\treturn Attr{key, Int64Value(value)}\n}\n\n// Int returns an Attr for an int value.\nfunc Int(key string, value int) Attr {\n\treturn Int64(key, int64(value))\n}\n\n// Float64 returns an Attr for a float64 value.\nfunc Float64(key string, value float64) Attr {\n\treturn Attr{key, Float64Value(value)}\n}\n\n// Bool returns an Attr for a bool value.\nfunc Bool(key string, value bool) Attr {\n\treturn Attr{key, BoolValue(value)}\n}\n\n// Bytes returns an Attr for a []byte value.\n// The passed slice must not be changed after it is passed.\nfunc Bytes(key string, value []byte) Attr {\n\treturn Attr{key, BytesValue(value)}\n}\n\n// Slice returns an Attr for a []Value value.\n// The passed slice must not be changed after it is passed.\nfunc Slice(key string, value ...Value) Attr {\n\treturn Attr{key, SliceValue(value...)}\n}\n\n// Map returns an Attr for a map value.\n// The passed slice must not be changed after it is passed.\nfunc Map(key string, value ...Attr) Attr {\n\treturn Attr{key, MapValue(value...)}\n}\n\n// Equal returns if a is equal to b.\nfunc (a Attr) Equal(b Attr) bool {\n\treturn a.Key == b.Key && a.Value.Equal(b.Value)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage telemetry provides a lightweight representations of OpenTelemetry\ntelemetry that is compatible with the OTLP JSON protobuf encoding.\n*/\npackage telemetry\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\nimport (\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n)\n\nconst (\n\ttraceIDSize = 16\n\tspanIDSize  = 8\n)\n\n// TraceID is a custom data type that is used for all trace IDs.\ntype TraceID [traceIDSize]byte\n\n// String returns the hex string representation form of a TraceID.\nfunc (tid TraceID) String() string {\n\treturn hex.EncodeToString(tid[:])\n}\n\n// IsEmpty returns false if id contains at least one non-zero byte.\nfunc (tid TraceID) IsEmpty() bool {\n\treturn tid == [traceIDSize]byte{}\n}\n\n// MarshalJSON converts the trace ID into a hex string enclosed in quotes.\nfunc (tid TraceID) MarshalJSON() ([]byte, error) {\n\tif tid.IsEmpty() {\n\t\treturn []byte(`\"\"`), nil\n\t}\n\treturn marshalJSON(tid[:])\n}\n\n// UnmarshalJSON inflates the trace ID from hex string, possibly enclosed in\n// quotes.\nfunc (tid *TraceID) UnmarshalJSON(data []byte) error {\n\t*tid = [traceIDSize]byte{}\n\treturn unmarshalJSON(tid[:], data)\n}\n\n// SpanID is a custom data type that is used for all span IDs.\ntype SpanID [spanIDSize]byte\n\n// String returns the hex string representation form of a SpanID.\nfunc (sid SpanID) String() string {\n\treturn hex.EncodeToString(sid[:])\n}\n\n// IsEmpty returns true if the span ID contains at least one non-zero byte.\nfunc (sid SpanID) IsEmpty() bool {\n\treturn sid == [spanIDSize]byte{}\n}\n\n// MarshalJSON converts span ID into a hex string enclosed in quotes.\nfunc (sid SpanID) MarshalJSON() ([]byte, error) {\n\tif sid.IsEmpty() {\n\t\treturn []byte(`\"\"`), nil\n\t}\n\treturn marshalJSON(sid[:])\n}\n\n// UnmarshalJSON decodes span ID from hex string, possibly enclosed in quotes.\nfunc (sid *SpanID) UnmarshalJSON(data []byte) error {\n\t*sid = [spanIDSize]byte{}\n\treturn unmarshalJSON(sid[:], data)\n}\n\n// marshalJSON converts id into a hex string enclosed in quotes.\nfunc marshalJSON(id []byte) ([]byte, error) {\n\t// Plus 2 quote chars at the start and end.\n\thexLen := hex.EncodedLen(len(id)) + 2\n\n\tb := make([]byte, hexLen)\n\thex.Encode(b[1:hexLen-1], id)\n\tb[0], b[hexLen-1] = '\"', '\"'\n\n\treturn b, nil\n}\n\n// unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes.\nfunc unmarshalJSON(dst []byte, src []byte) error {\n\tif l := len(src); l >= 2 && src[0] == '\"' && src[l-1] == '\"' {\n\t\tsrc = src[1 : l-1]\n\t}\n\tnLen := len(src)\n\tif nLen == 0 {\n\t\treturn nil\n\t}\n\n\tif len(dst) != hex.DecodedLen(nLen) {\n\t\treturn errors.New(\"invalid length for ID\")\n\t}\n\n\t_, err := hex.Decode(dst, src)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot unmarshal ID from string '%s': %w\", string(src), err)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\nimport (\n\t\"encoding/json\"\n\t\"strconv\"\n)\n\n// protoInt64 represents the protobuf encoding of integers which can be either\n// strings or integers.\ntype protoInt64 int64\n\n// Int64 returns the protoInt64 as an int64.\nfunc (i *protoInt64) Int64() int64 { return int64(*i) }\n\n// UnmarshalJSON decodes both strings and integers.\nfunc (i *protoInt64) UnmarshalJSON(data []byte) error {\n\tif data[0] == '\"' {\n\t\tvar str string\n\t\tif err := json.Unmarshal(data, &str); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tparsedInt, err := strconv.ParseInt(str, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoInt64(parsedInt)\n\t} else {\n\t\tvar parsedInt int64\n\t\tif err := json.Unmarshal(data, &parsedInt); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoInt64(parsedInt)\n\t}\n\treturn nil\n}\n\n// protoUint64 represents the protobuf encoding of integers which can be either\n// strings or integers.\ntype protoUint64 uint64\n\n// Int64 returns the protoUint64 as a uint64.\nfunc (i *protoUint64) Uint64() uint64 { return uint64(*i) }\n\n// UnmarshalJSON decodes both strings and integers.\nfunc (i *protoUint64) UnmarshalJSON(data []byte) error {\n\tif data[0] == '\"' {\n\t\tvar str string\n\t\tif err := json.Unmarshal(data, &str); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tparsedUint, err := strconv.ParseUint(str, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoUint64(parsedUint)\n\t} else {\n\t\tvar parsedUint uint64\n\t\tif err := json.Unmarshal(data, &parsedUint); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoUint64(parsedUint)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/resource.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Resource information.\ntype Resource struct {\n\t// Attrs are the set of attributes that describe the resource. Attribute\n\t// keys MUST be unique (it is not allowed to have more than one attribute\n\t// with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// DroppedAttrs is the number of dropped attributes. If the value\n\t// is 0, then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r.\nfunc (r *Resource) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Resource type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Resource field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&r.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&r.DroppedAttrs)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/scope.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Scope is the identifying values of the instrumentation scope.\ntype Scope struct {\n\tName         string `json:\"name,omitempty\"`\n\tVersion      string `json:\"version,omitempty\"`\n\tAttrs        []Attr `json:\"attributes,omitempty\"`\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r.\nfunc (s *Scope) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Scope type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Scope field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"name\":\n\t\t\terr = decoder.Decode(&s.Name)\n\t\tcase \"version\":\n\t\t\terr = decoder.Decode(&s.Version)\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&s.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&s.DroppedAttrs)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"time\"\n)\n\n// A Span represents a single operation performed by a single component of the\n// system.\ntype Span struct {\n\t// A unique identifier for a trace. All spans from the same trace share\n\t// the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR\n\t// of length other than 16 bytes is considered invalid (empty string in OTLP/JSON\n\t// is zero-length and thus is also invalid).\n\t//\n\t// This field is required.\n\tTraceID TraceID `json:\"traceId,omitempty\"`\n\t// A unique identifier for a span within a trace, assigned when the span\n\t// is created. The ID is an 8-byte array. An ID with all zeroes OR of length\n\t// other than 8 bytes is considered invalid (empty string in OTLP/JSON\n\t// is zero-length and thus is also invalid).\n\t//\n\t// This field is required.\n\tSpanID SpanID `json:\"spanId,omitempty\"`\n\t// trace_state conveys information about request position in multiple distributed tracing graphs.\n\t// It is a trace_state in w3c-trace-context format: https://www.w3.org/TR/trace-context/#tracestate-header\n\t// See also https://github.com/w3c/distributed-tracing for more details about this field.\n\tTraceState string `json:\"traceState,omitempty\"`\n\t// The `span_id` of this span's parent span. If this is a root span, then this\n\t// field must be empty. The ID is an 8-byte array.\n\tParentSpanID SpanID `json:\"parentSpanId,omitempty\"`\n\t// Flags, a bit field.\n\t//\n\t// Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace\n\t// Context specification. To read the 8-bit W3C trace flag, use\n\t// `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`.\n\t//\n\t// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.\n\t//\n\t// Bits 8 and 9 represent the 3 states of whether a span's parent\n\t// is remote. The states are (unknown, is not remote, is remote).\n\t// To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`.\n\t// To read whether the span is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`.\n\t//\n\t// When creating span messages, if the message is logically forwarded from another source\n\t// with an equivalent flags fields (i.e., usually another OTLP span message), the field SHOULD\n\t// be copied as-is. If creating from a source that does not have an equivalent flags field\n\t// (such as a runtime representation of an OpenTelemetry span), the high 22 bits MUST\n\t// be set to zero.\n\t// Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero.\n\t//\n\t// [Optional].\n\tFlags uint32 `json:\"flags,omitempty\"`\n\t// A description of the span's operation.\n\t//\n\t// For example, the name can be a qualified method name or a file name\n\t// and a line number where the operation is called. A best practice is to use\n\t// the same display name at the same call point in an application.\n\t// This makes it easier to correlate spans in different traces.\n\t//\n\t// This field is semantically required to be set to non-empty string.\n\t// Empty value is equivalent to an unknown span name.\n\t//\n\t// This field is required.\n\tName string `json:\"name\"`\n\t// Distinguishes between spans generated in a particular context. For example,\n\t// two spans with the same name may be distinguished using `CLIENT` (caller)\n\t// and `SERVER` (callee) to identify queueing latency associated with the span.\n\tKind SpanKind `json:\"kind,omitempty\"`\n\t// start_time_unix_nano is the start time of the span. On the client side, this is the time\n\t// kept by the local machine where the span execution starts. On the server side, this\n\t// is the time when the server's application handler starts running.\n\t// Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970.\n\t//\n\t// This field is semantically required and it is expected that end_time >= start_time.\n\tStartTime time.Time `json:\"startTimeUnixNano,omitempty\"`\n\t// end_time_unix_nano is the end time of the span. On the client side, this is the time\n\t// kept by the local machine where the span execution ends. On the server side, this\n\t// is the time when the server application handler stops running.\n\t// Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970.\n\t//\n\t// This field is semantically required and it is expected that end_time >= start_time.\n\tEndTime time.Time `json:\"endTimeUnixNano,omitempty\"`\n\t// attributes is a collection of key/value pairs. Note, global attributes\n\t// like server name can be set using the resource API. Examples of attributes:\n\t//\n\t//     \"/http/user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36\"\n\t//     \"/http/server_latency\": 300\n\t//     \"example.com/myattribute\": true\n\t//     \"example.com/score\": 10.239\n\t//\n\t// The OpenTelemetry API specification further restricts the allowed value types:\n\t// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/README.md#attribute\n\t// Attribute keys MUST be unique (it is not allowed to have more than one\n\t// attribute with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// dropped_attributes_count is the number of attributes that were discarded. Attributes\n\t// can be discarded because their keys are too long or because there are too many\n\t// attributes. If this value is 0, then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n\t// events is a collection of Event items.\n\tEvents []*SpanEvent `json:\"events,omitempty\"`\n\t// dropped_events_count is the number of dropped events. If the value is 0, then no\n\t// events were dropped.\n\tDroppedEvents uint32 `json:\"droppedEventsCount,omitempty\"`\n\t// links is a collection of Links, which are references from this span to a span\n\t// in the same or different trace.\n\tLinks []*SpanLink `json:\"links,omitempty\"`\n\t// dropped_links_count is the number of dropped links after the maximum size was\n\t// enforced. If this value is 0, then no links were dropped.\n\tDroppedLinks uint32 `json:\"droppedLinksCount,omitempty\"`\n\t// An optional final status for this span. Semantically when Status isn't set, it means\n\t// span's status code is unset, i.e. assume STATUS_CODE_UNSET (code = 0).\n\tStatus *Status `json:\"status,omitempty\"`\n}\n\n// MarshalJSON encodes s into OTLP formatted JSON.\nfunc (s Span) MarshalJSON() ([]byte, error) {\n\tstartT := s.StartTime.UnixNano()\n\tif s.StartTime.IsZero() || startT < 0 {\n\t\tstartT = 0\n\t}\n\n\tendT := s.EndTime.UnixNano()\n\tif s.EndTime.IsZero() || endT < 0 {\n\t\tendT = 0\n\t}\n\n\t// Override non-empty default SpanID marshal and omitempty.\n\tvar parentSpanId string\n\tif !s.ParentSpanID.IsEmpty() {\n\t\tb := make([]byte, hex.EncodedLen(spanIDSize))\n\t\thex.Encode(b, s.ParentSpanID[:])\n\t\tparentSpanId = string(b)\n\t}\n\n\ttype Alias Span\n\treturn json.Marshal(struct {\n\t\tAlias\n\t\tParentSpanID string `json:\"parentSpanId,omitempty\"`\n\t\tStartTime    uint64 `json:\"startTimeUnixNano,omitempty\"`\n\t\tEndTime      uint64 `json:\"endTimeUnixNano,omitempty\"`\n\t}{\n\t\tAlias:        Alias(s),\n\t\tParentSpanID: parentSpanId,\n\t\tStartTime:    uint64(startT),\n\t\tEndTime:      uint64(endT),\n\t})\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into s.\nfunc (s *Span) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Span type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Span field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"traceId\", \"trace_id\":\n\t\t\terr = decoder.Decode(&s.TraceID)\n\t\tcase \"spanId\", \"span_id\":\n\t\t\terr = decoder.Decode(&s.SpanID)\n\t\tcase \"traceState\", \"trace_state\":\n\t\t\terr = decoder.Decode(&s.TraceState)\n\t\tcase \"parentSpanId\", \"parent_span_id\":\n\t\t\terr = decoder.Decode(&s.ParentSpanID)\n\t\tcase \"flags\":\n\t\t\terr = decoder.Decode(&s.Flags)\n\t\tcase \"name\":\n\t\t\terr = decoder.Decode(&s.Name)\n\t\tcase \"kind\":\n\t\t\terr = decoder.Decode(&s.Kind)\n\t\tcase \"startTimeUnixNano\", \"start_time_unix_nano\":\n\t\t\tvar val protoUint64\n\t\t\terr = decoder.Decode(&val)\n\t\t\ts.StartTime = time.Unix(0, int64(val.Uint64()))\n\t\tcase \"endTimeUnixNano\", \"end_time_unix_nano\":\n\t\t\tvar val protoUint64\n\t\t\terr = decoder.Decode(&val)\n\t\t\ts.EndTime = time.Unix(0, int64(val.Uint64()))\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&s.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&s.DroppedAttrs)\n\t\tcase \"events\":\n\t\t\terr = decoder.Decode(&s.Events)\n\t\tcase \"droppedEventsCount\", \"dropped_events_count\":\n\t\t\terr = decoder.Decode(&s.DroppedEvents)\n\t\tcase \"links\":\n\t\t\terr = decoder.Decode(&s.Links)\n\t\tcase \"droppedLinksCount\", \"dropped_links_count\":\n\t\t\terr = decoder.Decode(&s.DroppedLinks)\n\t\tcase \"status\":\n\t\t\terr = decoder.Decode(&s.Status)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// SpanFlags represents constants used to interpret the\n// Span.flags field, which is protobuf 'fixed32' type and is to\n// be used as bit-fields. Each non-zero value defined in this enum is\n// a bit-mask.  To extract the bit-field, for example, use an\n// expression like:\n//\n//\t(span.flags & SPAN_FLAGS_TRACE_FLAGS_MASK)\n//\n// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.\n//\n// Note that Span flags were introduced in version 1.1 of the\n// OpenTelemetry protocol.  Older Span producers do not set this\n// field, consequently consumers should not rely on the absence of a\n// particular flag bit to indicate the presence of a particular feature.\ntype SpanFlags int32\n\nconst (\n\t// Bits 0-7 are used for trace flags.\n\tSpanFlagsTraceFlagsMask SpanFlags = 255\n\t// Bits 8 and 9 are used to indicate that the parent span or link span is remote.\n\t// Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known.\n\t// Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote.\n\tSpanFlagsContextHasIsRemoteMask SpanFlags = 256\n\t// SpanFlagsContextHasIsRemoteMask indicates the Span is remote.\n\tSpanFlagsContextIsRemoteMask SpanFlags = 512\n)\n\n// SpanKind is the type of span. Can be used to specify additional relationships between spans\n// in addition to a parent/child relationship.\ntype SpanKind int32\n\nconst (\n\t// Indicates that the span represents an internal operation within an application,\n\t// as opposed to an operation happening at the boundaries. Default value.\n\tSpanKindInternal SpanKind = 1\n\t// Indicates that the span covers server-side handling of an RPC or other\n\t// remote network request.\n\tSpanKindServer SpanKind = 2\n\t// Indicates that the span describes a request to some remote service.\n\tSpanKindClient SpanKind = 3\n\t// Indicates that the span describes a producer sending a message to a broker.\n\t// Unlike CLIENT and SERVER, there is often no direct critical path latency relationship\n\t// between producer and consumer spans. A PRODUCER span ends when the message was accepted\n\t// by the broker while the logical processing of the message might span a much longer time.\n\tSpanKindProducer SpanKind = 4\n\t// Indicates that the span describes consumer receiving a message from a broker.\n\t// Like the PRODUCER kind, there is often no direct critical path latency relationship\n\t// between producer and consumer spans.\n\tSpanKindConsumer SpanKind = 5\n)\n\n// Event is a time-stamped annotation of the span, consisting of user-supplied\n// text description and key-value pairs.\ntype SpanEvent struct {\n\t// time_unix_nano is the time the event occurred.\n\tTime time.Time `json:\"timeUnixNano,omitempty\"`\n\t// name of the event.\n\t// This field is semantically required to be set to non-empty string.\n\tName string `json:\"name,omitempty\"`\n\t// attributes is a collection of attribute key/value pairs on the event.\n\t// Attribute keys MUST be unique (it is not allowed to have more than one\n\t// attribute with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// dropped_attributes_count is the number of dropped attributes. If the value is 0,\n\t// then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n}\n\n// MarshalJSON encodes e into OTLP formatted JSON.\nfunc (e SpanEvent) MarshalJSON() ([]byte, error) {\n\tt := e.Time.UnixNano()\n\tif e.Time.IsZero() || t < 0 {\n\t\tt = 0\n\t}\n\n\ttype Alias SpanEvent\n\treturn json.Marshal(struct {\n\t\tAlias\n\t\tTime uint64 `json:\"timeUnixNano,omitempty\"`\n\t}{\n\t\tAlias: Alias(e),\n\t\tTime:  uint64(t),\n\t})\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into se.\nfunc (se *SpanEvent) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid SpanEvent type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid SpanEvent field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"timeUnixNano\", \"time_unix_nano\":\n\t\t\tvar val protoUint64\n\t\t\terr = decoder.Decode(&val)\n\t\t\tse.Time = time.Unix(0, int64(val.Uint64()))\n\t\tcase \"name\":\n\t\t\terr = decoder.Decode(&se.Name)\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&se.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&se.DroppedAttrs)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// A pointer from the current span to another span in the same trace or in a\n// different trace. For example, this can be used in batching operations,\n// where a single batch handler processes multiple requests from different\n// traces or when the handler receives a request from a different project.\ntype SpanLink struct {\n\t// A unique identifier of a trace that this linked span is part of. The ID is a\n\t// 16-byte array.\n\tTraceID TraceID `json:\"traceId,omitempty\"`\n\t// A unique identifier for the linked span. The ID is an 8-byte array.\n\tSpanID SpanID `json:\"spanId,omitempty\"`\n\t// The trace_state associated with the link.\n\tTraceState string `json:\"traceState,omitempty\"`\n\t// attributes is a collection of attribute key/value pairs on the link.\n\t// Attribute keys MUST be unique (it is not allowed to have more than one\n\t// attribute with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// dropped_attributes_count is the number of dropped attributes. If the value is 0,\n\t// then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n\t// Flags, a bit field.\n\t//\n\t// Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace\n\t// Context specification. To read the 8-bit W3C trace flag, use\n\t// `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`.\n\t//\n\t// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.\n\t//\n\t// Bits 8 and 9 represent the 3 states of whether the link is remote.\n\t// The states are (unknown, is not remote, is remote).\n\t// To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`.\n\t// To read whether the link is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`.\n\t//\n\t// Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero.\n\t// When creating new spans, bits 10-31 (most-significant 22-bits) MUST be zero.\n\t//\n\t// [Optional].\n\tFlags uint32 `json:\"flags,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into sl.\nfunc (sl *SpanLink) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid SpanLink type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid SpanLink field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"traceId\", \"trace_id\":\n\t\t\terr = decoder.Decode(&sl.TraceID)\n\t\tcase \"spanId\", \"span_id\":\n\t\t\terr = decoder.Decode(&sl.SpanID)\n\t\tcase \"traceState\", \"trace_state\":\n\t\t\terr = decoder.Decode(&sl.TraceState)\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&sl.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&sl.DroppedAttrs)\n\t\tcase \"flags\":\n\t\t\terr = decoder.Decode(&sl.Flags)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\n// For the semantics of status codes see\n// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status\ntype StatusCode int32\n\nconst (\n\t// The default status.\n\tStatusCodeUnset StatusCode = 0\n\t// The Span has been validated by an Application developer or Operator to\n\t// have completed successfully.\n\tStatusCodeOK StatusCode = 1\n\t// The Span contains an error.\n\tStatusCodeError StatusCode = 2\n)\n\nvar statusCodeStrings = []string{\n\t\"Unset\",\n\t\"OK\",\n\t\"Error\",\n}\n\nfunc (s StatusCode) String() string {\n\tif s >= 0 && int(s) < len(statusCodeStrings) {\n\t\treturn statusCodeStrings[s]\n\t}\n\treturn \"<unknown telemetry.StatusCode>\"\n}\n\n// The Status type defines a logical error model that is suitable for different\n// programming environments, including REST APIs and RPC APIs.\ntype Status struct {\n\t// A developer-facing human readable error message.\n\tMessage string `json:\"message,omitempty\"`\n\t// The status code.\n\tCode StatusCode `json:\"code,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Traces represents the traces data that can be stored in a persistent storage,\n// OR can be embedded by other protocols that transfer OTLP traces data but do\n// not implement the OTLP protocol.\n//\n// The main difference between this message and collector protocol is that\n// in this message there will not be any \"control\" or \"metadata\" specific to\n// OTLP protocol.\n//\n// When new fields are added into this message, the OTLP request MUST be updated\n// as well.\ntype Traces struct {\n\t// An array of ResourceSpans.\n\t// For data coming from a single resource this array will typically contain\n\t// one element. Intermediary nodes that receive data from multiple origins\n\t// typically batch the data before forwarding further and in that case this\n\t// array will contain multiple elements.\n\tResourceSpans []*ResourceSpans `json:\"resourceSpans,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into td.\nfunc (td *Traces) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid TracesData type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid TracesData field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"resourceSpans\", \"resource_spans\":\n\t\t\terr = decoder.Decode(&td.ResourceSpans)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// A collection of ScopeSpans from a Resource.\ntype ResourceSpans struct {\n\t// The resource for the spans in this message.\n\t// If this field is not set then no resource info is known.\n\tResource Resource `json:\"resource\"`\n\t// A list of ScopeSpans that originate from a resource.\n\tScopeSpans []*ScopeSpans `json:\"scopeSpans,omitempty\"`\n\t// This schema_url applies to the data in the \"resource\" field. It does not apply\n\t// to the data in the \"scope_spans\" field which have their own schema_url field.\n\tSchemaURL string `json:\"schemaUrl,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into rs.\nfunc (rs *ResourceSpans) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid ResourceSpans type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid ResourceSpans field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"resource\":\n\t\t\terr = decoder.Decode(&rs.Resource)\n\t\tcase \"scopeSpans\", \"scope_spans\":\n\t\t\terr = decoder.Decode(&rs.ScopeSpans)\n\t\tcase \"schemaUrl\", \"schema_url\":\n\t\t\terr = decoder.Decode(&rs.SchemaURL)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// A collection of Spans produced by an InstrumentationScope.\ntype ScopeSpans struct {\n\t// The instrumentation scope information for the spans in this message.\n\t// Semantically when InstrumentationScope isn't set, it is equivalent with\n\t// an empty instrumentation scope name (unknown).\n\tScope *Scope `json:\"scope\"`\n\t// A list of Spans that originate from an instrumentation scope.\n\tSpans []*Span `json:\"spans,omitempty\"`\n\t// The Schema URL, if known. This is the identifier of the Schema that the span data\n\t// is recorded in. To learn more about Schema URL see\n\t// https://opentelemetry.io/docs/specs/otel/schemas/#schema-url\n\t// This schema_url applies to all spans and span events in the \"spans\" field.\n\tSchemaURL string `json:\"schemaUrl,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into ss.\nfunc (ss *ScopeSpans) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid ScopeSpans type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid ScopeSpans field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"scope\":\n\t\t\terr = decoder.Decode(&ss.Scope)\n\t\tcase \"spans\":\n\t\t\terr = decoder.Decode(&ss.Spans)\n\t\tcase \"schemaUrl\", \"schema_url\":\n\t\t\terr = decoder.Decode(&ss.SchemaURL)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n//go:generate stringer -type=ValueKind -trimprefix=ValueKind\n\npackage telemetry\n\nimport (\n\t\"bytes\"\n\t\"cmp\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"slices\"\n\t\"strconv\"\n\t\"unsafe\"\n)\n\n// A Value represents a structured value.\n// A zero value is valid and represents an empty value.\ntype Value struct {\n\t// Ensure forward compatibility by explicitly making this not comparable.\n\tnoCmp [0]func() //nolint: unused  // This is indeed used.\n\n\t// num holds the value for Int64, Float64, and Bool. It holds the length\n\t// for String, Bytes, Slice, Map.\n\tnum uint64\n\t// any holds either the KindBool, KindInt64, KindFloat64, stringptr,\n\t// bytesptr, sliceptr, or mapptr. If KindBool, KindInt64, or KindFloat64\n\t// then the value of Value is in num as described above. Otherwise, it\n\t// contains the value wrapped in the appropriate type.\n\tany any\n}\n\ntype (\n\t// sliceptr represents a value in Value.any for KindString Values.\n\tstringptr *byte\n\t// bytesptr represents a value in Value.any for KindBytes Values.\n\tbytesptr *byte\n\t// sliceptr represents a value in Value.any for KindSlice Values.\n\tsliceptr *Value\n\t// mapptr represents a value in Value.any for KindMap Values.\n\tmapptr *Attr\n)\n\n// ValueKind is the kind of a [Value].\ntype ValueKind int\n\n// ValueKind values.\nconst (\n\tValueKindEmpty ValueKind = iota\n\tValueKindBool\n\tValueKindFloat64\n\tValueKindInt64\n\tValueKindString\n\tValueKindBytes\n\tValueKindSlice\n\tValueKindMap\n)\n\nvar valueKindStrings = []string{\n\t\"Empty\",\n\t\"Bool\",\n\t\"Float64\",\n\t\"Int64\",\n\t\"String\",\n\t\"Bytes\",\n\t\"Slice\",\n\t\"Map\",\n}\n\nfunc (k ValueKind) String() string {\n\tif k >= 0 && int(k) < len(valueKindStrings) {\n\t\treturn valueKindStrings[k]\n\t}\n\treturn \"<unknown telemetry.ValueKind>\"\n}\n\n// StringValue returns a new [Value] for a string.\nfunc StringValue(v string) Value {\n\treturn Value{\n\t\tnum: uint64(len(v)),\n\t\tany: stringptr(unsafe.StringData(v)),\n\t}\n}\n\n// IntValue returns a [Value] for an int.\nfunc IntValue(v int) Value { return Int64Value(int64(v)) }\n\n// Int64Value returns a [Value] for an int64.\nfunc Int64Value(v int64) Value {\n\treturn Value{num: uint64(v), any: ValueKindInt64}\n}\n\n// Float64Value returns a [Value] for a float64.\nfunc Float64Value(v float64) Value {\n\treturn Value{num: math.Float64bits(v), any: ValueKindFloat64}\n}\n\n// BoolValue returns a [Value] for a bool.\nfunc BoolValue(v bool) Value { //nolint:revive // Not a control flag.\n\tvar n uint64\n\tif v {\n\t\tn = 1\n\t}\n\treturn Value{num: n, any: ValueKindBool}\n}\n\n// BytesValue returns a [Value] for a byte slice. The passed slice must not be\n// changed after it is passed.\nfunc BytesValue(v []byte) Value {\n\treturn Value{\n\t\tnum: uint64(len(v)),\n\t\tany: bytesptr(unsafe.SliceData(v)),\n\t}\n}\n\n// SliceValue returns a [Value] for a slice of [Value]. The passed slice must\n// not be changed after it is passed.\nfunc SliceValue(vs ...Value) Value {\n\treturn Value{\n\t\tnum: uint64(len(vs)),\n\t\tany: sliceptr(unsafe.SliceData(vs)),\n\t}\n}\n\n// MapValue returns a new [Value] for a slice of key-value pairs. The passed\n// slice must not be changed after it is passed.\nfunc MapValue(kvs ...Attr) Value {\n\treturn Value{\n\t\tnum: uint64(len(kvs)),\n\t\tany: mapptr(unsafe.SliceData(kvs)),\n\t}\n}\n\n// AsString returns the value held by v as a string.\nfunc (v Value) AsString() string {\n\tif sp, ok := v.any.(stringptr); ok {\n\t\treturn unsafe.String(sp, v.num)\n\t}\n\t// TODO: error handle\n\treturn \"\"\n}\n\n// asString returns the value held by v as a string. It will panic if the Value\n// is not KindString.\nfunc (v Value) asString() string {\n\treturn unsafe.String(v.any.(stringptr), v.num)\n}\n\n// AsInt64 returns the value held by v as an int64.\nfunc (v Value) AsInt64() int64 {\n\tif v.Kind() != ValueKindInt64 {\n\t\t// TODO: error handle\n\t\treturn 0\n\t}\n\treturn v.asInt64()\n}\n\n// asInt64 returns the value held by v as an int64. If v is not of KindInt64,\n// this will return garbage.\nfunc (v Value) asInt64() int64 {\n\t// Assumes v.num was a valid int64 (overflow not checked).\n\treturn int64(v.num) // nolint: gosec\n}\n\n// AsBool returns the value held by v as a bool.\nfunc (v Value) AsBool() bool {\n\tif v.Kind() != ValueKindBool {\n\t\t// TODO: error handle\n\t\treturn false\n\t}\n\treturn v.asBool()\n}\n\n// asBool returns the value held by v as a bool. If v is not of KindBool, this\n// will return garbage.\nfunc (v Value) asBool() bool { return v.num == 1 }\n\n// AsFloat64 returns the value held by v as a float64.\nfunc (v Value) AsFloat64() float64 {\n\tif v.Kind() != ValueKindFloat64 {\n\t\t// TODO: error handle\n\t\treturn 0\n\t}\n\treturn v.asFloat64()\n}\n\n// asFloat64 returns the value held by v as a float64. If v is not of\n// KindFloat64, this will return garbage.\nfunc (v Value) asFloat64() float64 { return math.Float64frombits(v.num) }\n\n// AsBytes returns the value held by v as a []byte.\nfunc (v Value) AsBytes() []byte {\n\tif sp, ok := v.any.(bytesptr); ok {\n\t\treturn unsafe.Slice((*byte)(sp), v.num)\n\t}\n\t// TODO: error handle\n\treturn nil\n}\n\n// asBytes returns the value held by v as a []byte. It will panic if the Value\n// is not KindBytes.\nfunc (v Value) asBytes() []byte {\n\treturn unsafe.Slice((*byte)(v.any.(bytesptr)), v.num)\n}\n\n// AsSlice returns the value held by v as a []Value.\nfunc (v Value) AsSlice() []Value {\n\tif sp, ok := v.any.(sliceptr); ok {\n\t\treturn unsafe.Slice((*Value)(sp), v.num)\n\t}\n\t// TODO: error handle\n\treturn nil\n}\n\n// asSlice returns the value held by v as a []Value. It will panic if the Value\n// is not KindSlice.\nfunc (v Value) asSlice() []Value {\n\treturn unsafe.Slice((*Value)(v.any.(sliceptr)), v.num)\n}\n\n// AsMap returns the value held by v as a []Attr.\nfunc (v Value) AsMap() []Attr {\n\tif sp, ok := v.any.(mapptr); ok {\n\t\treturn unsafe.Slice((*Attr)(sp), v.num)\n\t}\n\t// TODO: error handle\n\treturn nil\n}\n\n// asMap returns the value held by v as a []Attr. It will panic if the\n// Value is not KindMap.\nfunc (v Value) asMap() []Attr {\n\treturn unsafe.Slice((*Attr)(v.any.(mapptr)), v.num)\n}\n\n// Kind returns the Kind of v.\nfunc (v Value) Kind() ValueKind {\n\tswitch x := v.any.(type) {\n\tcase ValueKind:\n\t\treturn x\n\tcase stringptr:\n\t\treturn ValueKindString\n\tcase bytesptr:\n\t\treturn ValueKindBytes\n\tcase sliceptr:\n\t\treturn ValueKindSlice\n\tcase mapptr:\n\t\treturn ValueKindMap\n\tdefault:\n\t\treturn ValueKindEmpty\n\t}\n}\n\n// Empty returns if v does not hold any value.\nfunc (v Value) Empty() bool { return v.Kind() == ValueKindEmpty }\n\n// Equal returns if v is equal to w.\nfunc (v Value) Equal(w Value) bool {\n\tk1 := v.Kind()\n\tk2 := w.Kind()\n\tif k1 != k2 {\n\t\treturn false\n\t}\n\tswitch k1 {\n\tcase ValueKindInt64, ValueKindBool:\n\t\treturn v.num == w.num\n\tcase ValueKindString:\n\t\treturn v.asString() == w.asString()\n\tcase ValueKindFloat64:\n\t\treturn v.asFloat64() == w.asFloat64()\n\tcase ValueKindSlice:\n\t\treturn slices.EqualFunc(v.asSlice(), w.asSlice(), Value.Equal)\n\tcase ValueKindMap:\n\t\tsv := sortMap(v.asMap())\n\t\tsw := sortMap(w.asMap())\n\t\treturn slices.EqualFunc(sv, sw, Attr.Equal)\n\tcase ValueKindBytes:\n\t\treturn bytes.Equal(v.asBytes(), w.asBytes())\n\tcase ValueKindEmpty:\n\t\treturn true\n\tdefault:\n\t\t// TODO: error handle\n\t\treturn false\n\t}\n}\n\nfunc sortMap(m []Attr) []Attr {\n\tsm := make([]Attr, len(m))\n\tcopy(sm, m)\n\tslices.SortFunc(sm, func(a, b Attr) int {\n\t\treturn cmp.Compare(a.Key, b.Key)\n\t})\n\n\treturn sm\n}\n\n// String returns Value's value as a string, formatted like [fmt.Sprint].\n//\n// The returned string is meant for debugging;\n// the string representation is not stable.\nfunc (v Value) String() string {\n\tswitch v.Kind() {\n\tcase ValueKindString:\n\t\treturn v.asString()\n\tcase ValueKindInt64:\n\t\t// Assumes v.num was a valid int64 (overflow not checked).\n\t\treturn strconv.FormatInt(int64(v.num), 10) // nolint: gosec\n\tcase ValueKindFloat64:\n\t\treturn strconv.FormatFloat(v.asFloat64(), 'g', -1, 64)\n\tcase ValueKindBool:\n\t\treturn strconv.FormatBool(v.asBool())\n\tcase ValueKindBytes:\n\t\treturn fmt.Sprint(v.asBytes())\n\tcase ValueKindMap:\n\t\treturn fmt.Sprint(v.asMap())\n\tcase ValueKindSlice:\n\t\treturn fmt.Sprint(v.asSlice())\n\tcase ValueKindEmpty:\n\t\treturn \"<nil>\"\n\tdefault:\n\t\t// Try to handle this as gracefully as possible.\n\t\t//\n\t\t// Don't panic here. The goal here is to have developers find this\n\t\t// first if a slog.Kind is is not handled. It is\n\t\t// preferable to have user's open issue asking why their attributes\n\t\t// have a \"unhandled: \" prefix than say that their code is panicking.\n\t\treturn fmt.Sprintf(\"<unhandled telemetry.ValueKind: %s>\", v.Kind())\n\t}\n}\n\n// MarshalJSON encodes v into OTLP formatted JSON.\nfunc (v *Value) MarshalJSON() ([]byte, error) {\n\tswitch v.Kind() {\n\tcase ValueKindString:\n\t\treturn json.Marshal(struct {\n\t\t\tValue string `json:\"stringValue\"`\n\t\t}{v.asString()})\n\tcase ValueKindInt64:\n\t\treturn json.Marshal(struct {\n\t\t\tValue string `json:\"intValue\"`\n\t\t}{strconv.FormatInt(int64(v.num), 10)})\n\tcase ValueKindFloat64:\n\t\treturn json.Marshal(struct {\n\t\t\tValue float64 `json:\"doubleValue\"`\n\t\t}{v.asFloat64()})\n\tcase ValueKindBool:\n\t\treturn json.Marshal(struct {\n\t\t\tValue bool `json:\"boolValue\"`\n\t\t}{v.asBool()})\n\tcase ValueKindBytes:\n\t\treturn json.Marshal(struct {\n\t\t\tValue []byte `json:\"bytesValue\"`\n\t\t}{v.asBytes()})\n\tcase ValueKindMap:\n\t\treturn json.Marshal(struct {\n\t\t\tValue struct {\n\t\t\t\tValues []Attr `json:\"values\"`\n\t\t\t} `json:\"kvlistValue\"`\n\t\t}{struct {\n\t\t\tValues []Attr `json:\"values\"`\n\t\t}{v.asMap()}})\n\tcase ValueKindSlice:\n\t\treturn json.Marshal(struct {\n\t\t\tValue struct {\n\t\t\t\tValues []Value `json:\"values\"`\n\t\t\t} `json:\"arrayValue\"`\n\t\t}{struct {\n\t\t\tValues []Value `json:\"values\"`\n\t\t}{v.asSlice()}})\n\tcase ValueKindEmpty:\n\t\treturn nil, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown Value kind: %s\", v.Kind().String())\n\t}\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into v.\nfunc (v *Value) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Value type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Value key: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"stringValue\", \"string_value\":\n\t\t\tvar val string\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = StringValue(val)\n\t\tcase \"boolValue\", \"bool_value\":\n\t\t\tvar val bool\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = BoolValue(val)\n\t\tcase \"intValue\", \"int_value\":\n\t\t\tvar val protoInt64\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = Int64Value(val.Int64())\n\t\tcase \"doubleValue\", \"double_value\":\n\t\t\tvar val float64\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = Float64Value(val)\n\t\tcase \"bytesValue\", \"bytes_value\":\n\t\t\tvar val64 string\n\t\t\tif err := decoder.Decode(&val64); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tvar val []byte\n\t\t\tval, err = base64.StdEncoding.DecodeString(val64)\n\t\t\t*v = BytesValue(val)\n\t\tcase \"arrayValue\", \"array_value\":\n\t\t\tvar val struct{ Values []Value }\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = SliceValue(val.Values...)\n\t\tcase \"kvlistValue\", \"kvlist_value\":\n\t\t\tvar val struct{ Values []Attr }\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = MapValue(val.Values...)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t\tcontinue\n\t\t}\n\t\t// Use first valid. Ignore the rest.\n\t\treturn err\n\t}\n\n\t// Only unknown fields. Return nil without unmarshaling any value.\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/limit.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage sdk\n\nimport (\n\t\"log/slog\"\n\t\"os\"\n\t\"strconv\"\n)\n\n// maxSpan are the span limits resolved during startup.\nvar maxSpan = newSpanLimits()\n\ntype spanLimits struct {\n\t// Attrs is the number of allowed attributes for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT key if it exists. Otherwise, the\n\t// environment variable value for OTEL_ATTRIBUTE_COUNT_LIMIT, or 128 if\n\t// that is not set, is used.\n\tAttrs int\n\t// AttrValueLen is the maximum attribute value length allowed for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT key if it exists. Otherwise, the\n\t// environment variable value for OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, or -1\n\t// if that is not set, is used.\n\tAttrValueLen int\n\t// Events is the number of allowed events for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_EVENT_COUNT_LIMIT key, or 128 is used if that is not set.\n\tEvents int\n\t// EventAttrs is the number of allowed attributes for a span event.\n\t//\n\t// The is resolved from the environment variable value for the\n\t// OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT key, or 128 is used if that is not set.\n\tEventAttrs int\n\t// Links is the number of allowed Links for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_LINK_COUNT_LIMIT, or 128 is used if that is not set.\n\tLinks int\n\t// LinkAttrs is the number of allowed attributes for a span link.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, or 128 is used if that is not set.\n\tLinkAttrs int\n}\n\nfunc newSpanLimits() spanLimits {\n\treturn spanLimits{\n\t\tAttrs: firstEnv(\n\t\t\t128,\n\t\t\t\"OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT\",\n\t\t\t\"OTEL_ATTRIBUTE_COUNT_LIMIT\",\n\t\t),\n\t\tAttrValueLen: firstEnv(\n\t\t\t-1, // Unlimited.\n\t\t\t\"OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT\",\n\t\t\t\"OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT\",\n\t\t),\n\t\tEvents:     firstEnv(128, \"OTEL_SPAN_EVENT_COUNT_LIMIT\"),\n\t\tEventAttrs: firstEnv(128, \"OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT\"),\n\t\tLinks:      firstEnv(128, \"OTEL_SPAN_LINK_COUNT_LIMIT\"),\n\t\tLinkAttrs:  firstEnv(128, \"OTEL_LINK_ATTRIBUTE_COUNT_LIMIT\"),\n\t}\n}\n\n// firstEnv returns the parsed integer value of the first matching environment\n// variable from keys. The defaultVal is returned if the value is not an\n// integer or no match is found.\nfunc firstEnv(defaultVal int, keys ...string) int {\n\tfor _, key := range keys {\n\t\tstrV := os.Getenv(key)\n\t\tif strV == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tv, err := strconv.Atoi(strV)\n\t\tif err == nil {\n\t\t\treturn v\n\t\t}\n\t\tslog.Warn(\n\t\t\t\"invalid limit environment variable\",\n\t\t\t\"error\", err,\n\t\t\t\"key\", key,\n\t\t\t\"value\", strV,\n\t\t)\n\t}\n\n\treturn defaultVal\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/span.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage sdk\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/codes\"\n\tsemconv \"go.opentelemetry.io/otel/semconv/v1.26.0\"\n\t\"go.opentelemetry.io/otel/trace\"\n\t\"go.opentelemetry.io/otel/trace/noop\"\n\n\t\"go.opentelemetry.io/auto/sdk/internal/telemetry\"\n)\n\ntype span struct {\n\tnoop.Span\n\n\tspanContext trace.SpanContext\n\tsampled     atomic.Bool\n\n\tmu     sync.Mutex\n\ttraces *telemetry.Traces\n\tspan   *telemetry.Span\n}\n\nfunc (s *span) SpanContext() trace.SpanContext {\n\tif s == nil {\n\t\treturn trace.SpanContext{}\n\t}\n\t// s.spanContext is immutable, do not acquire lock s.mu.\n\treturn s.spanContext\n}\n\nfunc (s *span) IsRecording() bool {\n\tif s == nil {\n\t\treturn false\n\t}\n\n\treturn s.sampled.Load()\n}\n\nfunc (s *span) SetStatus(c codes.Code, msg string) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tif s.span.Status == nil {\n\t\ts.span.Status = new(telemetry.Status)\n\t}\n\n\ts.span.Status.Message = msg\n\n\tswitch c {\n\tcase codes.Unset:\n\t\ts.span.Status.Code = telemetry.StatusCodeUnset\n\tcase codes.Error:\n\t\ts.span.Status.Code = telemetry.StatusCodeError\n\tcase codes.Ok:\n\t\ts.span.Status.Code = telemetry.StatusCodeOK\n\t}\n}\n\nfunc (s *span) SetAttributes(attrs ...attribute.KeyValue) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tlimit := maxSpan.Attrs\n\tif limit == 0 {\n\t\t// No attributes allowed.\n\t\ts.span.DroppedAttrs += uint32(len(attrs))\n\t\treturn\n\t}\n\n\tm := make(map[string]int)\n\tfor i, a := range s.span.Attrs {\n\t\tm[a.Key] = i\n\t}\n\n\tfor _, a := range attrs {\n\t\tval := convAttrValue(a.Value)\n\t\tif val.Empty() {\n\t\t\ts.span.DroppedAttrs++\n\t\t\tcontinue\n\t\t}\n\n\t\tif idx, ok := m[string(a.Key)]; ok {\n\t\t\ts.span.Attrs[idx] = telemetry.Attr{\n\t\t\t\tKey:   string(a.Key),\n\t\t\t\tValue: val,\n\t\t\t}\n\t\t} else if limit < 0 || len(s.span.Attrs) < limit {\n\t\t\ts.span.Attrs = append(s.span.Attrs, telemetry.Attr{\n\t\t\t\tKey:   string(a.Key),\n\t\t\t\tValue: val,\n\t\t\t})\n\t\t\tm[string(a.Key)] = len(s.span.Attrs) - 1\n\t\t} else {\n\t\t\ts.span.DroppedAttrs++\n\t\t}\n\t}\n}\n\n// convCappedAttrs converts up to limit attrs into a []telemetry.Attr. The\n// number of dropped attributes is also returned.\nfunc convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, uint32) {\n\tif limit == 0 {\n\t\treturn nil, uint32(len(attrs))\n\t}\n\n\tif limit < 0 {\n\t\t// Unlimited.\n\t\treturn convAttrs(attrs), 0\n\t}\n\n\tlimit = min(len(attrs), limit)\n\treturn convAttrs(attrs[:limit]), uint32(len(attrs) - limit)\n}\n\nfunc convAttrs(attrs []attribute.KeyValue) []telemetry.Attr {\n\tif len(attrs) == 0 {\n\t\t// Avoid allocations if not necessary.\n\t\treturn nil\n\t}\n\n\tout := make([]telemetry.Attr, 0, len(attrs))\n\tfor _, attr := range attrs {\n\t\tkey := string(attr.Key)\n\t\tval := convAttrValue(attr.Value)\n\t\tif val.Empty() {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, telemetry.Attr{Key: key, Value: val})\n\t}\n\treturn out\n}\n\nfunc convAttrValue(value attribute.Value) telemetry.Value {\n\tswitch value.Type() {\n\tcase attribute.BOOL:\n\t\treturn telemetry.BoolValue(value.AsBool())\n\tcase attribute.INT64:\n\t\treturn telemetry.Int64Value(value.AsInt64())\n\tcase attribute.FLOAT64:\n\t\treturn telemetry.Float64Value(value.AsFloat64())\n\tcase attribute.STRING:\n\t\tv := truncate(maxSpan.AttrValueLen, value.AsString())\n\t\treturn telemetry.StringValue(v)\n\tcase attribute.BOOLSLICE:\n\t\tslice := value.AsBoolSlice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tout = append(out, telemetry.BoolValue(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\tcase attribute.INT64SLICE:\n\t\tslice := value.AsInt64Slice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tout = append(out, telemetry.Int64Value(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\tcase attribute.FLOAT64SLICE:\n\t\tslice := value.AsFloat64Slice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tout = append(out, telemetry.Float64Value(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\tcase attribute.STRINGSLICE:\n\t\tslice := value.AsStringSlice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tv = truncate(maxSpan.AttrValueLen, v)\n\t\t\tout = append(out, telemetry.StringValue(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\t}\n\treturn telemetry.Value{}\n}\n\n// truncate returns a truncated version of s such that it contains less than\n// the limit number of characters. Truncation is applied by returning the limit\n// number of valid characters contained in s.\n//\n// If limit is negative, it returns the original string.\n//\n// UTF-8 is supported. When truncating, all invalid characters are dropped\n// before applying truncation.\n//\n// If s already contains less than the limit number of bytes, it is returned\n// unchanged. No invalid characters are removed.\nfunc truncate(limit int, s string) string {\n\t// This prioritize performance in the following order based on the most\n\t// common expected use-cases.\n\t//\n\t//  - Short values less than the default limit (128).\n\t//  - Strings with valid encodings that exceed the limit.\n\t//  - No limit.\n\t//  - Strings with invalid encodings that exceed the limit.\n\tif limit < 0 || len(s) <= limit {\n\t\treturn s\n\t}\n\n\t// Optimistically, assume all valid UTF-8.\n\tvar b strings.Builder\n\tcount := 0\n\tfor i, c := range s {\n\t\tif c != utf8.RuneError {\n\t\t\tcount++\n\t\t\tif count > limit {\n\t\t\t\treturn s[:i]\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t_, size := utf8.DecodeRuneInString(s[i:])\n\t\tif size == 1 {\n\t\t\t// Invalid encoding.\n\t\t\tb.Grow(len(s) - 1)\n\t\t\t_, _ = b.WriteString(s[:i])\n\t\t\ts = s[i:]\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Fast-path, no invalid input.\n\tif b.Cap() == 0 {\n\t\treturn s\n\t}\n\n\t// Truncate while validating UTF-8.\n\tfor i := 0; i < len(s) && count < limit; {\n\t\tc := s[i]\n\t\tif c < utf8.RuneSelf {\n\t\t\t// Optimization for single byte runes (common case).\n\t\t\t_ = b.WriteByte(c)\n\t\t\ti++\n\t\t\tcount++\n\t\t\tcontinue\n\t\t}\n\n\t\t_, size := utf8.DecodeRuneInString(s[i:])\n\t\tif size == 1 {\n\t\t\t// We checked for all 1-byte runes above, this is a RuneError.\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\n\t\t_, _ = b.WriteString(s[i : i+size])\n\t\ti += size\n\t\tcount++\n\t}\n\n\treturn b.String()\n}\n\nfunc (s *span) End(opts ...trace.SpanEndOption) {\n\tif s == nil || !s.sampled.Swap(false) {\n\t\treturn\n\t}\n\n\t// s.end exists so the lock (s.mu) is not held while s.ended is called.\n\ts.ended(s.end(opts))\n}\n\nfunc (s *span) end(opts []trace.SpanEndOption) []byte {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tcfg := trace.NewSpanEndConfig(opts...)\n\tif t := cfg.Timestamp(); !t.IsZero() {\n\t\ts.span.EndTime = cfg.Timestamp()\n\t} else {\n\t\ts.span.EndTime = time.Now()\n\t}\n\n\tb, _ := json.Marshal(s.traces) // TODO: do not ignore this error.\n\treturn b\n}\n\n// Expected to be implemented in eBPF.\n//\n//go:noinline\nfunc (*span) ended(buf []byte) { ended(buf) }\n\n// ended is used for testing.\nvar ended = func([]byte) {}\n\nfunc (s *span) RecordError(err error, opts ...trace.EventOption) {\n\tif s == nil || err == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\tcfg := trace.NewEventConfig(opts...)\n\n\tattrs := cfg.Attributes()\n\tattrs = append(attrs,\n\t\tsemconv.ExceptionType(typeStr(err)),\n\t\tsemconv.ExceptionMessage(err.Error()),\n\t)\n\tif cfg.StackTrace() {\n\t\tbuf := make([]byte, 2048)\n\t\tn := runtime.Stack(buf, false)\n\t\tattrs = append(attrs, semconv.ExceptionStacktrace(string(buf[0:n])))\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\ts.addEvent(semconv.ExceptionEventName, cfg.Timestamp(), attrs)\n}\n\nfunc typeStr(i any) string {\n\tt := reflect.TypeOf(i)\n\tif t.PkgPath() == \"\" && t.Name() == \"\" {\n\t\t// Likely a builtin type.\n\t\treturn t.String()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", t.PkgPath(), t.Name())\n}\n\nfunc (s *span) AddEvent(name string, opts ...trace.EventOption) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\tcfg := trace.NewEventConfig(opts...)\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\ts.addEvent(name, cfg.Timestamp(), cfg.Attributes())\n}\n\n// addEvent adds an event with name and attrs at tStamp to the span. The span\n// lock (s.mu) needs to be held by the caller.\nfunc (s *span) addEvent(name string, tStamp time.Time, attrs []attribute.KeyValue) {\n\tlimit := maxSpan.Events\n\n\tif limit == 0 {\n\t\ts.span.DroppedEvents++\n\t\treturn\n\t}\n\n\tif limit > 0 && len(s.span.Events) == limit {\n\t\t// Drop head while avoiding allocation of more capacity.\n\t\tcopy(s.span.Events[:limit-1], s.span.Events[1:])\n\t\ts.span.Events = s.span.Events[:limit-1]\n\t\ts.span.DroppedEvents++\n\t}\n\n\te := &telemetry.SpanEvent{Time: tStamp, Name: name}\n\te.Attrs, e.DroppedAttrs = convCappedAttrs(maxSpan.EventAttrs, attrs)\n\n\ts.span.Events = append(s.span.Events, e)\n}\n\nfunc (s *span) AddLink(link trace.Link) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\tl := maxSpan.Links\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tif l == 0 {\n\t\ts.span.DroppedLinks++\n\t\treturn\n\t}\n\n\tif l > 0 && len(s.span.Links) == l {\n\t\t// Drop head while avoiding allocation of more capacity.\n\t\tcopy(s.span.Links[:l-1], s.span.Links[1:])\n\t\ts.span.Links = s.span.Links[:l-1]\n\t\ts.span.DroppedLinks++\n\t}\n\n\ts.span.Links = append(s.span.Links, convLink(link))\n}\n\nfunc convLinks(links []trace.Link) []*telemetry.SpanLink {\n\tout := make([]*telemetry.SpanLink, 0, len(links))\n\tfor _, link := range links {\n\t\tout = append(out, convLink(link))\n\t}\n\treturn out\n}\n\nfunc convLink(link trace.Link) *telemetry.SpanLink {\n\tl := &telemetry.SpanLink{\n\t\tTraceID:    telemetry.TraceID(link.SpanContext.TraceID()),\n\t\tSpanID:     telemetry.SpanID(link.SpanContext.SpanID()),\n\t\tTraceState: link.SpanContext.TraceState().String(),\n\t\tFlags:      uint32(link.SpanContext.TraceFlags()),\n\t}\n\tl.Attrs, l.DroppedAttrs = convCappedAttrs(maxSpan.LinkAttrs, link.Attributes)\n\n\treturn l\n}\n\nfunc (s *span) SetName(name string) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\ts.span.Name = name\n}\n\nfunc (*span) TracerProvider() trace.TracerProvider { return TracerProvider() }\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/tracer.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage sdk\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\t\"go.opentelemetry.io/otel/trace\"\n\t\"go.opentelemetry.io/otel/trace/noop\"\n\n\t\"go.opentelemetry.io/auto/sdk/internal/telemetry\"\n)\n\ntype tracer struct {\n\tnoop.Tracer\n\n\tname, schemaURL, version string\n}\n\nvar _ trace.Tracer = tracer{}\n\nfunc (t tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {\n\tvar psc trace.SpanContext\n\tsampled := true\n\tspan := new(span)\n\n\t// Ask eBPF for sampling decision and span context info.\n\tt.start(ctx, span, &psc, &sampled, &span.spanContext)\n\n\tspan.sampled.Store(sampled)\n\n\tctx = trace.ContextWithSpan(ctx, span)\n\n\tif sampled {\n\t\t// Only build traces if sampled.\n\t\tcfg := trace.NewSpanStartConfig(opts...)\n\t\tspan.traces, span.span = t.traces(name, cfg, span.spanContext, psc)\n\t}\n\n\treturn ctx, span\n}\n\n// Expected to be implemented in eBPF.\n//\n//go:noinline\nfunc (t *tracer) start(\n\tctx context.Context,\n\tspanPtr *span,\n\tpsc *trace.SpanContext,\n\tsampled *bool,\n\tsc *trace.SpanContext,\n) {\n\tstart(ctx, spanPtr, psc, sampled, sc)\n}\n\n// start is used for testing.\nvar start = func(context.Context, *span, *trace.SpanContext, *bool, *trace.SpanContext) {}\n\nfunc (t tracer) traces(name string, cfg trace.SpanConfig, sc, psc trace.SpanContext) (*telemetry.Traces, *telemetry.Span) {\n\tspan := &telemetry.Span{\n\t\tTraceID:      telemetry.TraceID(sc.TraceID()),\n\t\tSpanID:       telemetry.SpanID(sc.SpanID()),\n\t\tFlags:        uint32(sc.TraceFlags()),\n\t\tTraceState:   sc.TraceState().String(),\n\t\tParentSpanID: telemetry.SpanID(psc.SpanID()),\n\t\tName:         name,\n\t\tKind:         spanKind(cfg.SpanKind()),\n\t}\n\n\tspan.Attrs, span.DroppedAttrs = convCappedAttrs(maxSpan.Attrs, cfg.Attributes())\n\n\tlinks := cfg.Links()\n\tif limit := maxSpan.Links; limit == 0 {\n\t\tspan.DroppedLinks = uint32(len(links))\n\t} else {\n\t\tif limit > 0 {\n\t\t\tn := max(len(links)-limit, 0)\n\t\t\tspan.DroppedLinks = uint32(n)\n\t\t\tlinks = links[n:]\n\t\t}\n\t\tspan.Links = convLinks(links)\n\t}\n\n\tif t := cfg.Timestamp(); !t.IsZero() {\n\t\tspan.StartTime = cfg.Timestamp()\n\t} else {\n\t\tspan.StartTime = time.Now()\n\t}\n\n\treturn &telemetry.Traces{\n\t\tResourceSpans: []*telemetry.ResourceSpans{\n\t\t\t{\n\t\t\t\tScopeSpans: []*telemetry.ScopeSpans{\n\t\t\t\t\t{\n\t\t\t\t\t\tScope: &telemetry.Scope{\n\t\t\t\t\t\t\tName:    t.name,\n\t\t\t\t\t\t\tVersion: t.version,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSpans:     []*telemetry.Span{span},\n\t\t\t\t\t\tSchemaURL: t.schemaURL,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}, span\n}\n\nfunc spanKind(kind trace.SpanKind) telemetry.SpanKind {\n\tswitch kind {\n\tcase trace.SpanKindInternal:\n\t\treturn telemetry.SpanKindInternal\n\tcase trace.SpanKindServer:\n\t\treturn telemetry.SpanKindServer\n\tcase trace.SpanKindClient:\n\t\treturn telemetry.SpanKindClient\n\tcase trace.SpanKindProducer:\n\t\treturn telemetry.SpanKindProducer\n\tcase trace.SpanKindConsumer:\n\t\treturn telemetry.SpanKindConsumer\n\t}\n\treturn telemetry.SpanKind(0) // undefined.\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/auto/sdk/tracer_provider.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage sdk\n\nimport (\n\t\"go.opentelemetry.io/otel/trace\"\n\t\"go.opentelemetry.io/otel/trace/noop\"\n)\n\n// TracerProvider returns an auto-instrumentable [trace.TracerProvider].\n//\n// If an [go.opentelemetry.io/auto.Instrumentation] is configured to instrument\n// the process using the returned TracerProvider, all of the telemetry it\n// produces will be processed and handled by that Instrumentation. By default,\n// if no Instrumentation instruments the TracerProvider it will not generate\n// any trace telemetry.\nfunc TracerProvider() trace.TracerProvider { return tracerProviderInstance }\n\nvar tracerProviderInstance = new(tracerProvider)\n\ntype tracerProvider struct{ noop.TracerProvider }\n\nvar _ trace.TracerProvider = tracerProvider{}\n\nfunc (p tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer {\n\tcfg := trace.NewTracerConfig(opts...)\n\treturn tracer{\n\t\tname:      name,\n\t\tversion:   cfg.InstrumentationVersion(),\n\t\tschemaURL: cfg.SchemaURL(),\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/client.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// DefaultClient is the default Client and is used by Get, Head, Post and PostForm.\n// Please be careful of intitialization order - for example, if you change\n// the global propagator, the DefaultClient might still be using the old one.\nvar DefaultClient = &http.Client{Transport: NewTransport(http.DefaultTransport)}\n\n// Get is a convenient replacement for http.Get that adds a span around the request.\nfunc Get(ctx context.Context, targetURL string) (resp *http.Response, err error) {\n\treq, err := http.NewRequestWithContext(ctx, \"GET\", targetURL, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn DefaultClient.Do(req)\n}\n\n// Head is a convenient replacement for http.Head that adds a span around the request.\nfunc Head(ctx context.Context, targetURL string) (resp *http.Response, err error) {\n\treq, err := http.NewRequestWithContext(ctx, \"HEAD\", targetURL, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn DefaultClient.Do(req)\n}\n\n// Post is a convenient replacement for http.Post that adds a span around the request.\nfunc Post(ctx context.Context, targetURL, contentType string, body io.Reader) (resp *http.Response, err error) {\n\treq, err := http.NewRequestWithContext(ctx, \"POST\", targetURL, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header.Set(\"Content-Type\", contentType)\n\treturn DefaultClient.Do(req)\n}\n\n// PostForm is a convenient replacement for http.PostForm that adds a span around the request.\nfunc PostForm(ctx context.Context, targetURL string, data url.Values) (resp *http.Response, err error) {\n\treturn Post(ctx, targetURL, \"application/x-www-form-urlencoded\", strings.NewReader(data.Encode()))\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\nimport (\n\t\"net/http\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\n// Attribute keys that can be added to a span.\nconst (\n\tReadBytesKey  = attribute.Key(\"http.read_bytes\")  // if anything was read from the request body, the total number of bytes read\n\tReadErrorKey  = attribute.Key(\"http.read_error\")  // If an error occurred while reading a request, the string of the error (io.EOF is not recorded)\n\tWroteBytesKey = attribute.Key(\"http.wrote_bytes\") // if anything was written to the response writer, the total number of bytes written\n\tWriteErrorKey = attribute.Key(\"http.write_error\") // if an error occurred while writing a reply, the string of the error (io.EOF is not recorded)\n)\n\n// Server HTTP metrics.\nconst (\n\tserverRequestSize  = \"http.server.request.size\"  // Incoming request bytes total\n\tserverResponseSize = \"http.server.response.size\" // Incoming response bytes total\n\tserverDuration     = \"http.server.duration\"      // Incoming end to end duration, milliseconds\n)\n\n// Client HTTP metrics.\nconst (\n\tclientRequestSize  = \"http.client.request.size\"  // Outgoing request bytes total\n\tclientResponseSize = \"http.client.response.size\" // Outgoing response bytes total\n\tclientDuration     = \"http.client.duration\"      // Outgoing end to end duration, milliseconds\n)\n\n// Filter is a predicate used to determine whether a given http.request should\n// be traced. A Filter must return true if the request should be traced.\ntype Filter func(*http.Request) bool\n\nfunc newTracer(tp trace.TracerProvider) trace.Tracer {\n\treturn tp.Tracer(ScopeName, trace.WithInstrumentationVersion(Version()))\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"net/http/httptrace\"\n\n\t\"go.opentelemetry.io/otel\"\n\t\"go.opentelemetry.io/otel/metric\"\n\t\"go.opentelemetry.io/otel/propagation\"\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\n// ScopeName is the instrumentation scope name.\nconst ScopeName = \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\n// config represents the configuration options available for the http.Handler\n// and http.Transport types.\ntype config struct {\n\tServerName        string\n\tTracer            trace.Tracer\n\tMeter             metric.Meter\n\tPropagators       propagation.TextMapPropagator\n\tSpanStartOptions  []trace.SpanStartOption\n\tPublicEndpoint    bool\n\tPublicEndpointFn  func(*http.Request) bool\n\tReadEvent         bool\n\tWriteEvent        bool\n\tFilters           []Filter\n\tSpanNameFormatter func(string, *http.Request) string\n\tClientTrace       func(context.Context) *httptrace.ClientTrace\n\n\tTracerProvider trace.TracerProvider\n\tMeterProvider  metric.MeterProvider\n}\n\n// Option interface used for setting optional config properties.\ntype Option interface {\n\tapply(*config)\n}\n\ntype optionFunc func(*config)\n\nfunc (o optionFunc) apply(c *config) {\n\to(c)\n}\n\n// newConfig creates a new config struct and applies opts to it.\nfunc newConfig(opts ...Option) *config {\n\tc := &config{\n\t\tPropagators:   otel.GetTextMapPropagator(),\n\t\tMeterProvider: otel.GetMeterProvider(),\n\t}\n\tfor _, opt := range opts {\n\t\topt.apply(c)\n\t}\n\n\t// Tracer is only initialized if manually specified. Otherwise, can be passed with the tracing context.\n\tif c.TracerProvider != nil {\n\t\tc.Tracer = newTracer(c.TracerProvider)\n\t}\n\n\tc.Meter = c.MeterProvider.Meter(\n\t\tScopeName,\n\t\tmetric.WithInstrumentationVersion(Version()),\n\t)\n\n\treturn c\n}\n\n// WithTracerProvider specifies a tracer provider to use for creating a tracer.\n// If none is specified, the global provider is used.\nfunc WithTracerProvider(provider trace.TracerProvider) Option {\n\treturn optionFunc(func(cfg *config) {\n\t\tif provider != nil {\n\t\t\tcfg.TracerProvider = provider\n\t\t}\n\t})\n}\n\n// WithMeterProvider specifies a meter provider to use for creating a meter.\n// If none is specified, the global provider is used.\nfunc WithMeterProvider(provider metric.MeterProvider) Option {\n\treturn optionFunc(func(cfg *config) {\n\t\tif provider != nil {\n\t\t\tcfg.MeterProvider = provider\n\t\t}\n\t})\n}\n\n// WithPublicEndpoint configures the Handler to link the span with an incoming\n// span context. If this option is not provided, then the association is a child\n// association instead of a link.\nfunc WithPublicEndpoint() Option {\n\treturn optionFunc(func(c *config) {\n\t\tc.PublicEndpoint = true\n\t})\n}\n\n// WithPublicEndpointFn runs with every request, and allows conditionnally\n// configuring the Handler to link the span with an incoming span context. If\n// this option is not provided or returns false, then the association is a\n// child association instead of a link.\n// Note: WithPublicEndpoint takes precedence over WithPublicEndpointFn.\nfunc WithPublicEndpointFn(fn func(*http.Request) bool) Option {\n\treturn optionFunc(func(c *config) {\n\t\tc.PublicEndpointFn = fn\n\t})\n}\n\n// WithPropagators configures specific propagators. If this\n// option isn't specified, then the global TextMapPropagator is used.\nfunc WithPropagators(ps propagation.TextMapPropagator) Option {\n\treturn optionFunc(func(c *config) {\n\t\tif ps != nil {\n\t\t\tc.Propagators = ps\n\t\t}\n\t})\n}\n\n// WithSpanOptions configures an additional set of\n// trace.SpanOptions, which are applied to each new span.\nfunc WithSpanOptions(opts ...trace.SpanStartOption) Option {\n\treturn optionFunc(func(c *config) {\n\t\tc.SpanStartOptions = append(c.SpanStartOptions, opts...)\n\t})\n}\n\n// WithFilter adds a filter to the list of filters used by the handler.\n// If any filter indicates to exclude a request then the request will not be\n// traced. All filters must allow a request to be traced for a Span to be created.\n// If no filters are provided then all requests are traced.\n// Filters will be invoked for each processed request, it is advised to make them\n// simple and fast.\nfunc WithFilter(f Filter) Option {\n\treturn optionFunc(func(c *config) {\n\t\tc.Filters = append(c.Filters, f)\n\t})\n}\n\ntype event int\n\n// Different types of events that can be recorded, see WithMessageEvents.\nconst (\n\tReadEvents event = iota\n\tWriteEvents\n)\n\n// WithMessageEvents configures the Handler to record the specified events\n// (span.AddEvent) on spans. By default only summary attributes are added at the\n// end of the request.\n//\n// Valid events are:\n//   - ReadEvents: Record the number of bytes read after every http.Request.Body.Read\n//     using the ReadBytesKey\n//   - WriteEvents: Record the number of bytes written after every http.ResponeWriter.Write\n//     using the WriteBytesKey\nfunc WithMessageEvents(events ...event) Option {\n\treturn optionFunc(func(c *config) {\n\t\tfor _, e := range events {\n\t\t\tswitch e {\n\t\t\tcase ReadEvents:\n\t\t\t\tc.ReadEvent = true\n\t\t\tcase WriteEvents:\n\t\t\t\tc.WriteEvent = true\n\t\t\t}\n\t\t}\n\t})\n}\n\n// WithSpanNameFormatter takes a function that will be called on every\n// request and the returned string will become the Span Name.\nfunc WithSpanNameFormatter(f func(operation string, r *http.Request) string) Option {\n\treturn optionFunc(func(c *config) {\n\t\tc.SpanNameFormatter = f\n\t})\n}\n\n// WithClientTrace takes a function that returns client trace instance that will be\n// applied to the requests sent through the otelhttp Transport.\nfunc WithClientTrace(f func(context.Context) *httptrace.ClientTrace) Option {\n\treturn optionFunc(func(c *config) {\n\t\tc.ClientTrace = f\n\t})\n}\n\n// WithServerName returns an Option that sets the name of the (virtual) server\n// handling requests.\nfunc WithServerName(server string) Option {\n\treturn optionFunc(func(c *config) {\n\t\tc.ServerName = server\n\t})\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\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// Package otelhttp provides an http.Handler and functions that are intended\n// to be used to add tracing by wrapping existing handlers (with Handler) and\n// routes WithRouteTag.\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/felixge/httpsnoop\"\n\n\t\"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil\"\n\t\"go.opentelemetry.io/otel\"\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/metric\"\n\t\"go.opentelemetry.io/otel/propagation\"\n\tsemconv \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\n// middleware is an http middleware which wraps the next handler in a span.\ntype middleware struct {\n\toperation string\n\tserver    string\n\n\ttracer            trace.Tracer\n\tmeter             metric.Meter\n\tpropagators       propagation.TextMapPropagator\n\tspanStartOptions  []trace.SpanStartOption\n\treadEvent         bool\n\twriteEvent        bool\n\tfilters           []Filter\n\tspanNameFormatter func(string, *http.Request) string\n\tpublicEndpoint    bool\n\tpublicEndpointFn  func(*http.Request) bool\n\n\trequestBytesCounter  metric.Int64Counter\n\tresponseBytesCounter metric.Int64Counter\n\tserverLatencyMeasure metric.Float64Histogram\n}\n\nfunc defaultHandlerFormatter(operation string, _ *http.Request) string {\n\treturn operation\n}\n\n// NewHandler wraps the passed handler in a span named after the operation and\n// enriches it with metrics.\nfunc NewHandler(handler http.Handler, operation string, opts ...Option) http.Handler {\n\treturn NewMiddleware(operation, opts...)(handler)\n}\n\n// NewMiddleware returns a tracing and metrics instrumentation middleware.\n// The handler returned by the middleware wraps a handler\n// in a span named after the operation and enriches it with metrics.\nfunc NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Handler {\n\th := middleware{\n\t\toperation: operation,\n\t}\n\n\tdefaultOpts := []Option{\n\t\tWithSpanOptions(trace.WithSpanKind(trace.SpanKindServer)),\n\t\tWithSpanNameFormatter(defaultHandlerFormatter),\n\t}\n\n\tc := newConfig(append(defaultOpts, opts...)...)\n\th.configure(c)\n\th.createMeasures()\n\n\treturn func(next http.Handler) http.Handler {\n\t\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\t\th.serveHTTP(w, r, next)\n\t\t})\n\t}\n}\n\nfunc (h *middleware) configure(c *config) {\n\th.tracer = c.Tracer\n\th.meter = c.Meter\n\th.propagators = c.Propagators\n\th.spanStartOptions = c.SpanStartOptions\n\th.readEvent = c.ReadEvent\n\th.writeEvent = c.WriteEvent\n\th.filters = c.Filters\n\th.spanNameFormatter = c.SpanNameFormatter\n\th.publicEndpoint = c.PublicEndpoint\n\th.publicEndpointFn = c.PublicEndpointFn\n\th.server = c.ServerName\n}\n\nfunc handleErr(err error) {\n\tif err != nil {\n\t\totel.Handle(err)\n\t}\n}\n\nfunc (h *middleware) createMeasures() {\n\tvar err error\n\th.requestBytesCounter, err = h.meter.Int64Counter(\n\t\tserverRequestSize,\n\t\tmetric.WithUnit(\"By\"),\n\t\tmetric.WithDescription(\"Measures the size of HTTP request messages.\"),\n\t)\n\thandleErr(err)\n\n\th.responseBytesCounter, err = h.meter.Int64Counter(\n\t\tserverResponseSize,\n\t\tmetric.WithUnit(\"By\"),\n\t\tmetric.WithDescription(\"Measures the size of HTTP response messages.\"),\n\t)\n\thandleErr(err)\n\n\th.serverLatencyMeasure, err = h.meter.Float64Histogram(\n\t\tserverDuration,\n\t\tmetric.WithUnit(\"ms\"),\n\t\tmetric.WithDescription(\"Measures the duration of inbound HTTP requests.\"),\n\t)\n\thandleErr(err)\n}\n\n// serveHTTP sets up tracing and calls the given next http.Handler with the span\n// context injected into the request context.\nfunc (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http.Handler) {\n\trequestStartTime := time.Now()\n\tfor _, f := range h.filters {\n\t\tif !f(r) {\n\t\t\t// Simply pass through to the handler if a filter rejects the request\n\t\t\tnext.ServeHTTP(w, r)\n\t\t\treturn\n\t\t}\n\t}\n\n\tctx := h.propagators.Extract(r.Context(), propagation.HeaderCarrier(r.Header))\n\topts := []trace.SpanStartOption{\n\t\ttrace.WithAttributes(semconvutil.HTTPServerRequest(h.server, r)...),\n\t}\n\tif h.server != \"\" {\n\t\thostAttr := semconv.NetHostName(h.server)\n\t\topts = append(opts, trace.WithAttributes(hostAttr))\n\t}\n\topts = append(opts, h.spanStartOptions...)\n\tif h.publicEndpoint || (h.publicEndpointFn != nil && h.publicEndpointFn(r.WithContext(ctx))) {\n\t\topts = append(opts, trace.WithNewRoot())\n\t\t// Linking incoming span context if any for public endpoint.\n\t\tif s := trace.SpanContextFromContext(ctx); s.IsValid() && s.IsRemote() {\n\t\t\topts = append(opts, trace.WithLinks(trace.Link{SpanContext: s}))\n\t\t}\n\t}\n\n\ttracer := h.tracer\n\n\tif tracer == nil {\n\t\tif span := trace.SpanFromContext(r.Context()); span.SpanContext().IsValid() {\n\t\t\ttracer = newTracer(span.TracerProvider())\n\t\t} else {\n\t\t\ttracer = newTracer(otel.GetTracerProvider())\n\t\t}\n\t}\n\n\tctx, span := tracer.Start(ctx, h.spanNameFormatter(h.operation, r), opts...)\n\tdefer span.End()\n\n\treadRecordFunc := func(int64) {}\n\tif h.readEvent {\n\t\treadRecordFunc = func(n int64) {\n\t\t\tspan.AddEvent(\"read\", trace.WithAttributes(ReadBytesKey.Int64(n)))\n\t\t}\n\t}\n\n\tvar bw bodyWrapper\n\t// if request body is nil or NoBody, we don't want to mutate the body as it\n\t// will affect the identity of it in an unforeseeable way because we assert\n\t// ReadCloser fulfills a certain interface and it is indeed nil or NoBody.\n\tif r.Body != nil && r.Body != http.NoBody {\n\t\tbw.ReadCloser = r.Body\n\t\tbw.record = readRecordFunc\n\t\tr.Body = &bw\n\t}\n\n\twriteRecordFunc := func(int64) {}\n\tif h.writeEvent {\n\t\twriteRecordFunc = func(n int64) {\n\t\t\tspan.AddEvent(\"write\", trace.WithAttributes(WroteBytesKey.Int64(n)))\n\t\t}\n\t}\n\n\trww := &respWriterWrapper{\n\t\tResponseWriter: w,\n\t\trecord:         writeRecordFunc,\n\t\tctx:            ctx,\n\t\tprops:          h.propagators,\n\t\tstatusCode:     http.StatusOK, // default status code in case the Handler doesn't write anything\n\t}\n\n\t// Wrap w to use our ResponseWriter methods while also exposing\n\t// other interfaces that w may implement (http.CloseNotifier,\n\t// http.Flusher, http.Hijacker, http.Pusher, io.ReaderFrom).\n\n\tw = httpsnoop.Wrap(w, httpsnoop.Hooks{\n\t\tHeader: func(httpsnoop.HeaderFunc) httpsnoop.HeaderFunc {\n\t\t\treturn rww.Header\n\t\t},\n\t\tWrite: func(httpsnoop.WriteFunc) httpsnoop.WriteFunc {\n\t\t\treturn rww.Write\n\t\t},\n\t\tWriteHeader: func(httpsnoop.WriteHeaderFunc) httpsnoop.WriteHeaderFunc {\n\t\t\treturn rww.WriteHeader\n\t\t},\n\t})\n\n\tlabeler := &Labeler{}\n\tctx = injectLabeler(ctx, labeler)\n\n\tnext.ServeHTTP(w, r.WithContext(ctx))\n\n\tsetAfterServeAttributes(span, bw.read.Load(), rww.written, rww.statusCode, bw.err, rww.err)\n\n\t// Add metrics\n\tattributes := append(labeler.Get(), semconvutil.HTTPServerRequestMetrics(h.server, r)...)\n\tif rww.statusCode > 0 {\n\t\tattributes = append(attributes, semconv.HTTPStatusCode(rww.statusCode))\n\t}\n\to := metric.WithAttributes(attributes...)\n\th.requestBytesCounter.Add(ctx, bw.read.Load(), o)\n\th.responseBytesCounter.Add(ctx, rww.written, o)\n\n\t// Use floating point division here for higher precision (instead of Millisecond method).\n\telapsedTime := float64(time.Since(requestStartTime)) / float64(time.Millisecond)\n\n\th.serverLatencyMeasure.Record(ctx, elapsedTime, o)\n}\n\nfunc setAfterServeAttributes(span trace.Span, read, wrote int64, statusCode int, rerr, werr error) {\n\tattributes := []attribute.KeyValue{}\n\n\t// TODO: Consider adding an event after each read and write, possibly as an\n\t// option (defaulting to off), so as to not create needlessly verbose spans.\n\tif read > 0 {\n\t\tattributes = append(attributes, ReadBytesKey.Int64(read))\n\t}\n\tif rerr != nil && rerr != io.EOF {\n\t\tattributes = append(attributes, ReadErrorKey.String(rerr.Error()))\n\t}\n\tif wrote > 0 {\n\t\tattributes = append(attributes, WroteBytesKey.Int64(wrote))\n\t}\n\tif statusCode > 0 {\n\t\tattributes = append(attributes, semconv.HTTPStatusCode(statusCode))\n\t}\n\tspan.SetStatus(semconvutil.HTTPServerStatus(statusCode))\n\n\tif werr != nil && werr != io.EOF {\n\t\tattributes = append(attributes, WriteErrorKey.String(werr.Error()))\n\t}\n\tspan.SetAttributes(attributes...)\n}\n\n// WithRouteTag annotates spans and metrics with the provided route name\n// with HTTP route attribute.\nfunc WithRouteTag(route string, h http.Handler) http.Handler {\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tattr := semconv.HTTPRouteKey.String(route)\n\n\t\tspan := trace.SpanFromContext(r.Context())\n\t\tspan.SetAttributes(attr)\n\n\t\tlabeler, _ := LabelerFromContext(r.Context())\n\t\tlabeler.Add(attr)\n\n\t\th.ServeHTTP(w, r)\n\t})\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/gen.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage semconvutil // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil\"\n\n// Generate semconvutil package:\n//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/httpconv_test.go.tmpl \"--data={}\" --out=httpconv_test.go\n//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/httpconv.go.tmpl \"--data={}\" --out=httpconv.go\n//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/netconv_test.go.tmpl \"--data={}\" --out=netconv_test.go\n//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/netconv.go.tmpl \"--data={}\" --out=netconv.go\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go",
    "content": "// Code created by gotmpl. DO NOT MODIFY.\n// source: internal/shared/semconvutil/httpconv.go.tmpl\n\n// Copyright The OpenTelemetry Authors\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\npackage semconvutil // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil\"\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/codes\"\n\tsemconv \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n)\n\n// HTTPClientResponse returns trace attributes for an HTTP response received by a\n// client from a server. It will return the following attributes if the related\n// values are defined in resp: \"http.status.code\",\n// \"http.response_content_length\".\n//\n// This does not add all OpenTelemetry required attributes for an HTTP event,\n// it assumes ClientRequest was used to create the span with a complete set of\n// attributes. If a complete set of attributes can be generated using the\n// request contained in resp. For example:\n//\n//\tappend(HTTPClientResponse(resp), ClientRequest(resp.Request)...)\nfunc HTTPClientResponse(resp *http.Response) []attribute.KeyValue {\n\treturn hc.ClientResponse(resp)\n}\n\n// HTTPClientRequest returns trace attributes for an HTTP request made by a client.\n// The following attributes are always returned: \"http.url\", \"http.method\",\n// \"net.peer.name\". The following attributes are returned if the related values\n// are defined in req: \"net.peer.port\", \"user_agent.original\",\n// \"http.request_content_length\".\nfunc HTTPClientRequest(req *http.Request) []attribute.KeyValue {\n\treturn hc.ClientRequest(req)\n}\n\n// HTTPClientRequestMetrics returns metric attributes for an HTTP request made by a client.\n// The following attributes are always returned: \"http.method\", \"net.peer.name\".\n// The following attributes are returned if the\n// related values are defined in req: \"net.peer.port\".\nfunc HTTPClientRequestMetrics(req *http.Request) []attribute.KeyValue {\n\treturn hc.ClientRequestMetrics(req)\n}\n\n// HTTPClientStatus returns a span status code and message for an HTTP status code\n// value received by a client.\nfunc HTTPClientStatus(code int) (codes.Code, string) {\n\treturn hc.ClientStatus(code)\n}\n\n// HTTPServerRequest returns trace attributes for an HTTP request received by a\n// server.\n//\n// The server must be the primary server name if it is known. For example this\n// would be the ServerName directive\n// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache\n// server, and the server_name directive\n// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an\n// nginx server. More generically, the primary server name would be the host\n// header value that matches the default virtual host of an HTTP server. It\n// should include the host identifier and if a port is used to route to the\n// server that port identifier should be included as an appropriate port\n// suffix.\n//\n// If the primary server name is not known, server should be an empty string.\n// The req Host will be used to determine the server instead.\n//\n// The following attributes are always returned: \"http.method\", \"http.scheme\",\n// \"http.target\", \"net.host.name\". The following attributes are returned if\n// they related values are defined in req: \"net.host.port\", \"net.sock.peer.addr\",\n// \"net.sock.peer.port\", \"user_agent.original\", \"http.client_ip\".\nfunc HTTPServerRequest(server string, req *http.Request) []attribute.KeyValue {\n\treturn hc.ServerRequest(server, req)\n}\n\n// HTTPServerRequestMetrics returns metric attributes for an HTTP request received by a\n// server.\n//\n// The server must be the primary server name if it is known. For example this\n// would be the ServerName directive\n// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache\n// server, and the server_name directive\n// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an\n// nginx server. More generically, the primary server name would be the host\n// header value that matches the default virtual host of an HTTP server. It\n// should include the host identifier and if a port is used to route to the\n// server that port identifier should be included as an appropriate port\n// suffix.\n//\n// If the primary server name is not known, server should be an empty string.\n// The req Host will be used to determine the server instead.\n//\n// The following attributes are always returned: \"http.method\", \"http.scheme\",\n// \"net.host.name\". The following attributes are returned if they related\n// values are defined in req: \"net.host.port\".\nfunc HTTPServerRequestMetrics(server string, req *http.Request) []attribute.KeyValue {\n\treturn hc.ServerRequestMetrics(server, req)\n}\n\n// HTTPServerStatus returns a span status code and message for an HTTP status code\n// value returned by a server. Status codes in the 400-499 range are not\n// returned as errors.\nfunc HTTPServerStatus(code int) (codes.Code, string) {\n\treturn hc.ServerStatus(code)\n}\n\n// httpConv are the HTTP semantic convention attributes defined for a version\n// of the OpenTelemetry specification.\ntype httpConv struct {\n\tNetConv *netConv\n\n\tHTTPClientIPKey              attribute.Key\n\tHTTPMethodKey                attribute.Key\n\tHTTPRequestContentLengthKey  attribute.Key\n\tHTTPResponseContentLengthKey attribute.Key\n\tHTTPRouteKey                 attribute.Key\n\tHTTPSchemeHTTP               attribute.KeyValue\n\tHTTPSchemeHTTPS              attribute.KeyValue\n\tHTTPStatusCodeKey            attribute.Key\n\tHTTPTargetKey                attribute.Key\n\tHTTPURLKey                   attribute.Key\n\tUserAgentOriginalKey         attribute.Key\n}\n\nvar hc = &httpConv{\n\tNetConv: nc,\n\n\tHTTPClientIPKey:              semconv.HTTPClientIPKey,\n\tHTTPMethodKey:                semconv.HTTPMethodKey,\n\tHTTPRequestContentLengthKey:  semconv.HTTPRequestContentLengthKey,\n\tHTTPResponseContentLengthKey: semconv.HTTPResponseContentLengthKey,\n\tHTTPRouteKey:                 semconv.HTTPRouteKey,\n\tHTTPSchemeHTTP:               semconv.HTTPSchemeHTTP,\n\tHTTPSchemeHTTPS:              semconv.HTTPSchemeHTTPS,\n\tHTTPStatusCodeKey:            semconv.HTTPStatusCodeKey,\n\tHTTPTargetKey:                semconv.HTTPTargetKey,\n\tHTTPURLKey:                   semconv.HTTPURLKey,\n\tUserAgentOriginalKey:         semconv.UserAgentOriginalKey,\n}\n\n// ClientResponse returns attributes for an HTTP response received by a client\n// from a server. The following attributes are returned if the related values\n// are defined in resp: \"http.status.code\", \"http.response_content_length\".\n//\n// This does not add all OpenTelemetry required attributes for an HTTP event,\n// it assumes ClientRequest was used to create the span with a complete set of\n// attributes. If a complete set of attributes can be generated using the\n// request contained in resp. For example:\n//\n//\tappend(ClientResponse(resp), ClientRequest(resp.Request)...)\nfunc (c *httpConv) ClientResponse(resp *http.Response) []attribute.KeyValue {\n\t/* The following semantic conventions are returned if present:\n\thttp.status_code                int\n\thttp.response_content_length    int\n\t*/\n\tvar n int\n\tif resp.StatusCode > 0 {\n\t\tn++\n\t}\n\tif resp.ContentLength > 0 {\n\t\tn++\n\t}\n\n\tattrs := make([]attribute.KeyValue, 0, n)\n\tif resp.StatusCode > 0 {\n\t\tattrs = append(attrs, c.HTTPStatusCodeKey.Int(resp.StatusCode))\n\t}\n\tif resp.ContentLength > 0 {\n\t\tattrs = append(attrs, c.HTTPResponseContentLengthKey.Int(int(resp.ContentLength)))\n\t}\n\treturn attrs\n}\n\n// ClientRequest returns attributes for an HTTP request made by a client. The\n// following attributes are always returned: \"http.url\", \"http.method\",\n// \"net.peer.name\". The following attributes are returned if the related values\n// are defined in req: \"net.peer.port\", \"user_agent.original\",\n// \"http.request_content_length\", \"user_agent.original\".\nfunc (c *httpConv) ClientRequest(req *http.Request) []attribute.KeyValue {\n\t/* The following semantic conventions are returned if present:\n\thttp.method                     string\n\tuser_agent.original             string\n\thttp.url                        string\n\tnet.peer.name                   string\n\tnet.peer.port                   int\n\thttp.request_content_length     int\n\t*/\n\n\t/* The following semantic conventions are not returned:\n\thttp.status_code                This requires the response. See ClientResponse.\n\thttp.response_content_length    This requires the response. See ClientResponse.\n\tnet.sock.family                 This requires the socket used.\n\tnet.sock.peer.addr              This requires the socket used.\n\tnet.sock.peer.name              This requires the socket used.\n\tnet.sock.peer.port              This requires the socket used.\n\thttp.resend_count               This is something outside of a single request.\n\tnet.protocol.name               The value is the Request is ignored, and the go client will always use \"http\".\n\tnet.protocol.version            The value in the Request is ignored, and the go client will always use 1.1 or 2.0.\n\t*/\n\tn := 3 // URL, peer name, proto, and method.\n\tvar h string\n\tif req.URL != nil {\n\t\th = req.URL.Host\n\t}\n\tpeer, p := firstHostPort(h, req.Header.Get(\"Host\"))\n\tport := requiredHTTPPort(req.URL != nil && req.URL.Scheme == \"https\", p)\n\tif port > 0 {\n\t\tn++\n\t}\n\tuseragent := req.UserAgent()\n\tif useragent != \"\" {\n\t\tn++\n\t}\n\tif req.ContentLength > 0 {\n\t\tn++\n\t}\n\n\tattrs := make([]attribute.KeyValue, 0, n)\n\n\tattrs = append(attrs, c.method(req.Method))\n\n\tvar u string\n\tif req.URL != nil {\n\t\t// Remove any username/password info that may be in the URL.\n\t\tuserinfo := req.URL.User\n\t\treq.URL.User = nil\n\t\tu = req.URL.String()\n\t\t// Restore any username/password info that was removed.\n\t\treq.URL.User = userinfo\n\t}\n\tattrs = append(attrs, c.HTTPURLKey.String(u))\n\n\tattrs = append(attrs, c.NetConv.PeerName(peer))\n\tif port > 0 {\n\t\tattrs = append(attrs, c.NetConv.PeerPort(port))\n\t}\n\n\tif useragent != \"\" {\n\t\tattrs = append(attrs, c.UserAgentOriginalKey.String(useragent))\n\t}\n\n\tif l := req.ContentLength; l > 0 {\n\t\tattrs = append(attrs, c.HTTPRequestContentLengthKey.Int64(l))\n\t}\n\n\treturn attrs\n}\n\n// ClientRequestMetrics returns metric attributes for an HTTP request made by a client. The\n// following attributes are always returned: \"http.method\", \"net.peer.name\".\n// The following attributes are returned if the related values\n// are defined in req: \"net.peer.port\".\nfunc (c *httpConv) ClientRequestMetrics(req *http.Request) []attribute.KeyValue {\n\t/* The following semantic conventions are returned if present:\n\thttp.method                     string\n\tnet.peer.name                   string\n\tnet.peer.port                   int\n\t*/\n\n\tn := 2 // method, peer name.\n\tvar h string\n\tif req.URL != nil {\n\t\th = req.URL.Host\n\t}\n\tpeer, p := firstHostPort(h, req.Header.Get(\"Host\"))\n\tport := requiredHTTPPort(req.URL != nil && req.URL.Scheme == \"https\", p)\n\tif port > 0 {\n\t\tn++\n\t}\n\n\tattrs := make([]attribute.KeyValue, 0, n)\n\tattrs = append(attrs, c.method(req.Method), c.NetConv.PeerName(peer))\n\n\tif port > 0 {\n\t\tattrs = append(attrs, c.NetConv.PeerPort(port))\n\t}\n\n\treturn attrs\n}\n\n// ServerRequest returns attributes for an HTTP request received by a server.\n//\n// The server must be the primary server name if it is known. For example this\n// would be the ServerName directive\n// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache\n// server, and the server_name directive\n// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an\n// nginx server. More generically, the primary server name would be the host\n// header value that matches the default virtual host of an HTTP server. It\n// should include the host identifier and if a port is used to route to the\n// server that port identifier should be included as an appropriate port\n// suffix.\n//\n// If the primary server name is not known, server should be an empty string.\n// The req Host will be used to determine the server instead.\n//\n// The following attributes are always returned: \"http.method\", \"http.scheme\",\n// \"http.target\", \"net.host.name\". The following attributes are returned if they\n// related values are defined in req: \"net.host.port\", \"net.sock.peer.addr\",\n// \"net.sock.peer.port\", \"user_agent.original\", \"http.client_ip\",\n// \"net.protocol.name\", \"net.protocol.version\".\nfunc (c *httpConv) ServerRequest(server string, req *http.Request) []attribute.KeyValue {\n\t/* The following semantic conventions are returned if present:\n\thttp.method             string\n\thttp.scheme             string\n\tnet.host.name           string\n\tnet.host.port           int\n\tnet.sock.peer.addr      string\n\tnet.sock.peer.port      int\n\tuser_agent.original     string\n\thttp.client_ip          string\n\tnet.protocol.name       string Note: not set if the value is \"http\".\n\tnet.protocol.version    string\n\thttp.target             string Note: doesn't include the query parameter.\n\t*/\n\n\t/* The following semantic conventions are not returned:\n\thttp.status_code                This requires the response.\n\thttp.request_content_length     This requires the len() of body, which can mutate it.\n\thttp.response_content_length    This requires the response.\n\thttp.route                      This is not available.\n\tnet.sock.peer.name              This would require a DNS lookup.\n\tnet.sock.host.addr              The request doesn't have access to the underlying socket.\n\tnet.sock.host.port              The request doesn't have access to the underlying socket.\n\n\t*/\n\tn := 4 // Method, scheme, proto, and host name.\n\tvar host string\n\tvar p int\n\tif server == \"\" {\n\t\thost, p = splitHostPort(req.Host)\n\t} else {\n\t\t// Prioritize the primary server name.\n\t\thost, p = splitHostPort(server)\n\t\tif p < 0 {\n\t\t\t_, p = splitHostPort(req.Host)\n\t\t}\n\t}\n\thostPort := requiredHTTPPort(req.TLS != nil, p)\n\tif hostPort > 0 {\n\t\tn++\n\t}\n\tpeer, peerPort := splitHostPort(req.RemoteAddr)\n\tif peer != \"\" {\n\t\tn++\n\t\tif peerPort > 0 {\n\t\t\tn++\n\t\t}\n\t}\n\tuseragent := req.UserAgent()\n\tif useragent != \"\" {\n\t\tn++\n\t}\n\n\tclientIP := serverClientIP(req.Header.Get(\"X-Forwarded-For\"))\n\tif clientIP != \"\" {\n\t\tn++\n\t}\n\n\tvar target string\n\tif req.URL != nil {\n\t\ttarget = req.URL.Path\n\t\tif target != \"\" {\n\t\t\tn++\n\t\t}\n\t}\n\tprotoName, protoVersion := netProtocol(req.Proto)\n\tif protoName != \"\" && protoName != \"http\" {\n\t\tn++\n\t}\n\tif protoVersion != \"\" {\n\t\tn++\n\t}\n\n\tattrs := make([]attribute.KeyValue, 0, n)\n\n\tattrs = append(attrs, c.method(req.Method))\n\tattrs = append(attrs, c.scheme(req.TLS != nil))\n\tattrs = append(attrs, c.NetConv.HostName(host))\n\n\tif hostPort > 0 {\n\t\tattrs = append(attrs, c.NetConv.HostPort(hostPort))\n\t}\n\n\tif peer != \"\" {\n\t\t// The Go HTTP server sets RemoteAddr to \"IP:port\", this will not be a\n\t\t// file-path that would be interpreted with a sock family.\n\t\tattrs = append(attrs, c.NetConv.SockPeerAddr(peer))\n\t\tif peerPort > 0 {\n\t\t\tattrs = append(attrs, c.NetConv.SockPeerPort(peerPort))\n\t\t}\n\t}\n\n\tif useragent != \"\" {\n\t\tattrs = append(attrs, c.UserAgentOriginalKey.String(useragent))\n\t}\n\n\tif clientIP != \"\" {\n\t\tattrs = append(attrs, c.HTTPClientIPKey.String(clientIP))\n\t}\n\n\tif target != \"\" {\n\t\tattrs = append(attrs, c.HTTPTargetKey.String(target))\n\t}\n\n\tif protoName != \"\" && protoName != \"http\" {\n\t\tattrs = append(attrs, c.NetConv.NetProtocolName.String(protoName))\n\t}\n\tif protoVersion != \"\" {\n\t\tattrs = append(attrs, c.NetConv.NetProtocolVersion.String(protoVersion))\n\t}\n\n\treturn attrs\n}\n\n// ServerRequestMetrics returns metric attributes for an HTTP request received\n// by a server.\n//\n// The server must be the primary server name if it is known. For example this\n// would be the ServerName directive\n// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache\n// server, and the server_name directive\n// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an\n// nginx server. More generically, the primary server name would be the host\n// header value that matches the default virtual host of an HTTP server. It\n// should include the host identifier and if a port is used to route to the\n// server that port identifier should be included as an appropriate port\n// suffix.\n//\n// If the primary server name is not known, server should be an empty string.\n// The req Host will be used to determine the server instead.\n//\n// The following attributes are always returned: \"http.method\", \"http.scheme\",\n// \"net.host.name\". The following attributes are returned if they related\n// values are defined in req: \"net.host.port\".\nfunc (c *httpConv) ServerRequestMetrics(server string, req *http.Request) []attribute.KeyValue {\n\t/* The following semantic conventions are returned if present:\n\thttp.scheme             string\n\thttp.route              string\n\thttp.method             string\n\thttp.status_code        int\n\tnet.host.name           string\n\tnet.host.port           int\n\tnet.protocol.name       string Note: not set if the value is \"http\".\n\tnet.protocol.version    string\n\t*/\n\n\tn := 3 // Method, scheme, and host name.\n\tvar host string\n\tvar p int\n\tif server == \"\" {\n\t\thost, p = splitHostPort(req.Host)\n\t} else {\n\t\t// Prioritize the primary server name.\n\t\thost, p = splitHostPort(server)\n\t\tif p < 0 {\n\t\t\t_, p = splitHostPort(req.Host)\n\t\t}\n\t}\n\thostPort := requiredHTTPPort(req.TLS != nil, p)\n\tif hostPort > 0 {\n\t\tn++\n\t}\n\tprotoName, protoVersion := netProtocol(req.Proto)\n\tif protoName != \"\" {\n\t\tn++\n\t}\n\tif protoVersion != \"\" {\n\t\tn++\n\t}\n\n\tattrs := make([]attribute.KeyValue, 0, n)\n\n\tattrs = append(attrs, c.methodMetric(req.Method))\n\tattrs = append(attrs, c.scheme(req.TLS != nil))\n\tattrs = append(attrs, c.NetConv.HostName(host))\n\n\tif hostPort > 0 {\n\t\tattrs = append(attrs, c.NetConv.HostPort(hostPort))\n\t}\n\tif protoName != \"\" {\n\t\tattrs = append(attrs, c.NetConv.NetProtocolName.String(protoName))\n\t}\n\tif protoVersion != \"\" {\n\t\tattrs = append(attrs, c.NetConv.NetProtocolVersion.String(protoVersion))\n\t}\n\n\treturn attrs\n}\n\nfunc (c *httpConv) method(method string) attribute.KeyValue {\n\tif method == \"\" {\n\t\treturn c.HTTPMethodKey.String(http.MethodGet)\n\t}\n\treturn c.HTTPMethodKey.String(method)\n}\n\nfunc (c *httpConv) methodMetric(method string) attribute.KeyValue {\n\tmethod = strings.ToUpper(method)\n\tswitch method {\n\tcase http.MethodConnect, http.MethodDelete, http.MethodGet, http.MethodHead, http.MethodOptions, http.MethodPatch, http.MethodPost, http.MethodPut, http.MethodTrace:\n\tdefault:\n\t\tmethod = \"_OTHER\"\n\t}\n\treturn c.HTTPMethodKey.String(method)\n}\n\nfunc (c *httpConv) scheme(https bool) attribute.KeyValue { // nolint:revive\n\tif https {\n\t\treturn c.HTTPSchemeHTTPS\n\t}\n\treturn c.HTTPSchemeHTTP\n}\n\nfunc serverClientIP(xForwardedFor string) string {\n\tif idx := strings.Index(xForwardedFor, \",\"); idx >= 0 {\n\t\txForwardedFor = xForwardedFor[:idx]\n\t}\n\treturn xForwardedFor\n}\n\nfunc requiredHTTPPort(https bool, port int) int { // nolint:revive\n\tif https {\n\t\tif port > 0 && port != 443 {\n\t\t\treturn port\n\t\t}\n\t} else {\n\t\tif port > 0 && port != 80 {\n\t\t\treturn port\n\t\t}\n\t}\n\treturn -1\n}\n\n// Return the request host and port from the first non-empty source.\nfunc firstHostPort(source ...string) (host string, port int) {\n\tfor _, hostport := range source {\n\t\thost, port = splitHostPort(hostport)\n\t\tif host != \"\" || port > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn\n}\n\n// ClientStatus returns a span status code and message for an HTTP status code\n// value received by a client.\nfunc (c *httpConv) ClientStatus(code int) (codes.Code, string) {\n\tif code < 100 || code >= 600 {\n\t\treturn codes.Error, fmt.Sprintf(\"Invalid HTTP status code %d\", code)\n\t}\n\tif code >= 400 {\n\t\treturn codes.Error, \"\"\n\t}\n\treturn codes.Unset, \"\"\n}\n\n// ServerStatus returns a span status code and message for an HTTP status code\n// value returned by a server. Status codes in the 400-499 range are not\n// returned as errors.\nfunc (c *httpConv) ServerStatus(code int) (codes.Code, string) {\n\tif code < 100 || code >= 600 {\n\t\treturn codes.Error, fmt.Sprintf(\"Invalid HTTP status code %d\", code)\n\t}\n\tif code >= 500 {\n\t\treturn codes.Error, \"\"\n\t}\n\treturn codes.Unset, \"\"\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go",
    "content": "// Code created by gotmpl. DO NOT MODIFY.\n// source: internal/shared/semconvutil/netconv.go.tmpl\n\n// Copyright The OpenTelemetry Authors\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\npackage semconvutil // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil\"\n\nimport (\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\tsemconv \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n)\n\n// NetTransport returns a trace attribute describing the transport protocol of the\n// passed network. See the net.Dial for information about acceptable network\n// values.\nfunc NetTransport(network string) attribute.KeyValue {\n\treturn nc.Transport(network)\n}\n\n// netConv are the network semantic convention attributes defined for a version\n// of the OpenTelemetry specification.\ntype netConv struct {\n\tNetHostNameKey     attribute.Key\n\tNetHostPortKey     attribute.Key\n\tNetPeerNameKey     attribute.Key\n\tNetPeerPortKey     attribute.Key\n\tNetProtocolName    attribute.Key\n\tNetProtocolVersion attribute.Key\n\tNetSockFamilyKey   attribute.Key\n\tNetSockPeerAddrKey attribute.Key\n\tNetSockPeerPortKey attribute.Key\n\tNetSockHostAddrKey attribute.Key\n\tNetSockHostPortKey attribute.Key\n\tNetTransportOther  attribute.KeyValue\n\tNetTransportTCP    attribute.KeyValue\n\tNetTransportUDP    attribute.KeyValue\n\tNetTransportInProc attribute.KeyValue\n}\n\nvar nc = &netConv{\n\tNetHostNameKey:     semconv.NetHostNameKey,\n\tNetHostPortKey:     semconv.NetHostPortKey,\n\tNetPeerNameKey:     semconv.NetPeerNameKey,\n\tNetPeerPortKey:     semconv.NetPeerPortKey,\n\tNetProtocolName:    semconv.NetProtocolNameKey,\n\tNetProtocolVersion: semconv.NetProtocolVersionKey,\n\tNetSockFamilyKey:   semconv.NetSockFamilyKey,\n\tNetSockPeerAddrKey: semconv.NetSockPeerAddrKey,\n\tNetSockPeerPortKey: semconv.NetSockPeerPortKey,\n\tNetSockHostAddrKey: semconv.NetSockHostAddrKey,\n\tNetSockHostPortKey: semconv.NetSockHostPortKey,\n\tNetTransportOther:  semconv.NetTransportOther,\n\tNetTransportTCP:    semconv.NetTransportTCP,\n\tNetTransportUDP:    semconv.NetTransportUDP,\n\tNetTransportInProc: semconv.NetTransportInProc,\n}\n\nfunc (c *netConv) Transport(network string) attribute.KeyValue {\n\tswitch network {\n\tcase \"tcp\", \"tcp4\", \"tcp6\":\n\t\treturn c.NetTransportTCP\n\tcase \"udp\", \"udp4\", \"udp6\":\n\t\treturn c.NetTransportUDP\n\tcase \"unix\", \"unixgram\", \"unixpacket\":\n\t\treturn c.NetTransportInProc\n\tdefault:\n\t\t// \"ip:*\", \"ip4:*\", and \"ip6:*\" all are considered other.\n\t\treturn c.NetTransportOther\n\t}\n}\n\n// Host returns attributes for a network host address.\nfunc (c *netConv) Host(address string) []attribute.KeyValue {\n\th, p := splitHostPort(address)\n\tvar n int\n\tif h != \"\" {\n\t\tn++\n\t\tif p > 0 {\n\t\t\tn++\n\t\t}\n\t}\n\n\tif n == 0 {\n\t\treturn nil\n\t}\n\n\tattrs := make([]attribute.KeyValue, 0, n)\n\tattrs = append(attrs, c.HostName(h))\n\tif p > 0 {\n\t\tattrs = append(attrs, c.HostPort(int(p)))\n\t}\n\treturn attrs\n}\n\nfunc (c *netConv) HostName(name string) attribute.KeyValue {\n\treturn c.NetHostNameKey.String(name)\n}\n\nfunc (c *netConv) HostPort(port int) attribute.KeyValue {\n\treturn c.NetHostPortKey.Int(port)\n}\n\nfunc family(network, address string) string {\n\tswitch network {\n\tcase \"unix\", \"unixgram\", \"unixpacket\":\n\t\treturn \"unix\"\n\tdefault:\n\t\tif ip := net.ParseIP(address); ip != nil {\n\t\t\tif ip.To4() == nil {\n\t\t\t\treturn \"inet6\"\n\t\t\t}\n\t\t\treturn \"inet\"\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// Peer returns attributes for a network peer address.\nfunc (c *netConv) Peer(address string) []attribute.KeyValue {\n\th, p := splitHostPort(address)\n\tvar n int\n\tif h != \"\" {\n\t\tn++\n\t\tif p > 0 {\n\t\t\tn++\n\t\t}\n\t}\n\n\tif n == 0 {\n\t\treturn nil\n\t}\n\n\tattrs := make([]attribute.KeyValue, 0, n)\n\tattrs = append(attrs, c.PeerName(h))\n\tif p > 0 {\n\t\tattrs = append(attrs, c.PeerPort(int(p)))\n\t}\n\treturn attrs\n}\n\nfunc (c *netConv) PeerName(name string) attribute.KeyValue {\n\treturn c.NetPeerNameKey.String(name)\n}\n\nfunc (c *netConv) PeerPort(port int) attribute.KeyValue {\n\treturn c.NetPeerPortKey.Int(port)\n}\n\nfunc (c *netConv) SockPeerAddr(addr string) attribute.KeyValue {\n\treturn c.NetSockPeerAddrKey.String(addr)\n}\n\nfunc (c *netConv) SockPeerPort(port int) attribute.KeyValue {\n\treturn c.NetSockPeerPortKey.Int(port)\n}\n\n// splitHostPort splits a network address hostport of the form \"host\",\n// \"host%zone\", \"[host]\", \"[host%zone], \"host:port\", \"host%zone:port\",\n// \"[host]:port\", \"[host%zone]:port\", or \":port\" into host or host%zone and\n// port.\n//\n// An empty host is returned if it is not provided or unparsable. A negative\n// port is returned if it is not provided or unparsable.\nfunc splitHostPort(hostport string) (host string, port int) {\n\tport = -1\n\n\tif strings.HasPrefix(hostport, \"[\") {\n\t\taddrEnd := strings.LastIndex(hostport, \"]\")\n\t\tif addrEnd < 0 {\n\t\t\t// Invalid hostport.\n\t\t\treturn\n\t\t}\n\t\tif i := strings.LastIndex(hostport[addrEnd:], \":\"); i < 0 {\n\t\t\thost = hostport[1:addrEnd]\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tif i := strings.LastIndex(hostport, \":\"); i < 0 {\n\t\t\thost = hostport\n\t\t\treturn\n\t\t}\n\t}\n\n\thost, pStr, err := net.SplitHostPort(hostport)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tp, err := strconv.ParseUint(pStr, 10, 16)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn host, int(p)\n}\n\nfunc netProtocol(proto string) (name string, version string) {\n\tname, version, _ = strings.Cut(proto, \"/\")\n\tname = strings.ToLower(name)\n\treturn name, version\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\nimport (\n\t\"context\"\n\t\"sync\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n)\n\n// Labeler is used to allow instrumented HTTP handlers to add custom attributes to\n// the metrics recorded by the net/http instrumentation.\ntype Labeler struct {\n\tmu         sync.Mutex\n\tattributes []attribute.KeyValue\n}\n\n// Add attributes to a Labeler.\nfunc (l *Labeler) Add(ls ...attribute.KeyValue) {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tl.attributes = append(l.attributes, ls...)\n}\n\n// Get returns a copy of the attributes added to the Labeler.\nfunc (l *Labeler) Get() []attribute.KeyValue {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tret := make([]attribute.KeyValue, len(l.attributes))\n\tcopy(ret, l.attributes)\n\treturn ret\n}\n\ntype labelerContextKeyType int\n\nconst lablelerContextKey labelerContextKeyType = 0\n\nfunc injectLabeler(ctx context.Context, l *Labeler) context.Context {\n\treturn context.WithValue(ctx, lablelerContextKey, l)\n}\n\n// LabelerFromContext retrieves a Labeler instance from the provided context if\n// one is available.  If no Labeler was found in the provided context a new, empty\n// Labeler is returned and the second return value is false.  In this case it is\n// safe to use the Labeler but any attributes added to it will not be used.\nfunc LabelerFromContext(ctx context.Context) (*Labeler, bool) {\n\tl, ok := ctx.Value(lablelerContextKey).(*Labeler)\n\tif !ok {\n\t\tl = &Labeler{}\n\t}\n\treturn l, ok\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptrace\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"go.opentelemetry.io/otel/metric\"\n\n\t\"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil\"\n\t\"go.opentelemetry.io/otel\"\n\t\"go.opentelemetry.io/otel/codes\"\n\t\"go.opentelemetry.io/otel/propagation\"\n\t\"go.opentelemetry.io/otel/trace\"\n\n\tsemconv \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n)\n\n// Transport implements the http.RoundTripper interface and wraps\n// outbound HTTP(S) requests with a span and enriches it with metrics.\ntype Transport struct {\n\trt http.RoundTripper\n\n\ttracer            trace.Tracer\n\tmeter             metric.Meter\n\tpropagators       propagation.TextMapPropagator\n\tspanStartOptions  []trace.SpanStartOption\n\tfilters           []Filter\n\tspanNameFormatter func(string, *http.Request) string\n\tclientTrace       func(context.Context) *httptrace.ClientTrace\n\n\trequestBytesCounter  metric.Int64Counter\n\tresponseBytesCounter metric.Int64Counter\n\tlatencyMeasure       metric.Float64Histogram\n}\n\nvar _ http.RoundTripper = &Transport{}\n\n// NewTransport wraps the provided http.RoundTripper with one that\n// starts a span, injects the span context into the outbound request headers,\n// and enriches it with metrics.\n//\n// If the provided http.RoundTripper is nil, http.DefaultTransport will be used\n// as the base http.RoundTripper.\nfunc NewTransport(base http.RoundTripper, opts ...Option) *Transport {\n\tif base == nil {\n\t\tbase = http.DefaultTransport\n\t}\n\n\tt := Transport{\n\t\trt: base,\n\t}\n\n\tdefaultOpts := []Option{\n\t\tWithSpanOptions(trace.WithSpanKind(trace.SpanKindClient)),\n\t\tWithSpanNameFormatter(defaultTransportFormatter),\n\t}\n\n\tc := newConfig(append(defaultOpts, opts...)...)\n\tt.applyConfig(c)\n\tt.createMeasures()\n\n\treturn &t\n}\n\nfunc (t *Transport) applyConfig(c *config) {\n\tt.tracer = c.Tracer\n\tt.meter = c.Meter\n\tt.propagators = c.Propagators\n\tt.spanStartOptions = c.SpanStartOptions\n\tt.filters = c.Filters\n\tt.spanNameFormatter = c.SpanNameFormatter\n\tt.clientTrace = c.ClientTrace\n}\n\nfunc (t *Transport) createMeasures() {\n\tvar err error\n\tt.requestBytesCounter, err = t.meter.Int64Counter(\n\t\tclientRequestSize,\n\t\tmetric.WithUnit(\"By\"),\n\t\tmetric.WithDescription(\"Measures the size of HTTP request messages.\"),\n\t)\n\thandleErr(err)\n\n\tt.responseBytesCounter, err = t.meter.Int64Counter(\n\t\tclientResponseSize,\n\t\tmetric.WithUnit(\"By\"),\n\t\tmetric.WithDescription(\"Measures the size of HTTP response messages.\"),\n\t)\n\thandleErr(err)\n\n\tt.latencyMeasure, err = t.meter.Float64Histogram(\n\t\tclientDuration,\n\t\tmetric.WithUnit(\"ms\"),\n\t\tmetric.WithDescription(\"Measures the duration of outbound HTTP requests.\"),\n\t)\n\thandleErr(err)\n}\n\nfunc defaultTransportFormatter(_ string, r *http.Request) string {\n\treturn \"HTTP \" + r.Method\n}\n\n// RoundTrip creates a Span and propagates its context via the provided request's headers\n// before handing the request to the configured base RoundTripper. The created span will\n// end when the response body is closed or when a read from the body returns io.EOF.\nfunc (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) {\n\trequestStartTime := time.Now()\n\tfor _, f := range t.filters {\n\t\tif !f(r) {\n\t\t\t// Simply pass through to the base RoundTripper if a filter rejects the request\n\t\t\treturn t.rt.RoundTrip(r)\n\t\t}\n\t}\n\n\ttracer := t.tracer\n\n\tif tracer == nil {\n\t\tif span := trace.SpanFromContext(r.Context()); span.SpanContext().IsValid() {\n\t\t\ttracer = newTracer(span.TracerProvider())\n\t\t} else {\n\t\t\ttracer = newTracer(otel.GetTracerProvider())\n\t\t}\n\t}\n\n\topts := append([]trace.SpanStartOption{}, t.spanStartOptions...) // start with the configured options\n\n\tctx, span := tracer.Start(r.Context(), t.spanNameFormatter(\"\", r), opts...)\n\n\tif t.clientTrace != nil {\n\t\tctx = httptrace.WithClientTrace(ctx, t.clientTrace(ctx))\n\t}\n\n\tlabeler := &Labeler{}\n\tctx = injectLabeler(ctx, labeler)\n\n\tr = r.Clone(ctx) // According to RoundTripper spec, we shouldn't modify the origin request.\n\n\t// use a body wrapper to determine the request size\n\tvar bw bodyWrapper\n\t// if request body is nil or NoBody, we don't want to mutate the body as it\n\t// will affect the identity of it in an unforeseeable way because we assert\n\t// ReadCloser fulfills a certain interface and it is indeed nil or NoBody.\n\tif r.Body != nil && r.Body != http.NoBody {\n\t\tbw.ReadCloser = r.Body\n\t\t// noop to prevent nil panic. not using this record fun yet.\n\t\tbw.record = func(int64) {}\n\t\tr.Body = &bw\n\t}\n\n\tspan.SetAttributes(semconvutil.HTTPClientRequest(r)...)\n\tt.propagators.Inject(ctx, propagation.HeaderCarrier(r.Header))\n\n\tres, err := t.rt.RoundTrip(r)\n\tif err != nil {\n\t\tspan.RecordError(err)\n\t\tspan.SetStatus(codes.Error, err.Error())\n\t\tspan.End()\n\t\treturn res, err\n\t}\n\n\t// metrics\n\tmetricAttrs := append(labeler.Get(), semconvutil.HTTPClientRequestMetrics(r)...)\n\tif res.StatusCode > 0 {\n\t\tmetricAttrs = append(metricAttrs, semconv.HTTPStatusCode(res.StatusCode))\n\t}\n\to := metric.WithAttributes(metricAttrs...)\n\tt.requestBytesCounter.Add(ctx, bw.read.Load(), o)\n\t// For handling response bytes we leverage a callback when the client reads the http response\n\treadRecordFunc := func(n int64) {\n\t\tt.responseBytesCounter.Add(ctx, n, o)\n\t}\n\n\t// traces\n\tspan.SetAttributes(semconvutil.HTTPClientResponse(res)...)\n\tspan.SetStatus(semconvutil.HTTPClientStatus(res.StatusCode))\n\n\tres.Body = newWrappedBody(span, readRecordFunc, res.Body)\n\n\t// Use floating point division here for higher precision (instead of Millisecond method).\n\telapsedTime := float64(time.Since(requestStartTime)) / float64(time.Millisecond)\n\n\tt.latencyMeasure.Record(ctx, elapsedTime, o)\n\n\treturn res, err\n}\n\n// newWrappedBody returns a new and appropriately scoped *wrappedBody as an\n// io.ReadCloser. If the passed body implements io.Writer, the returned value\n// will implement io.ReadWriteCloser.\nfunc newWrappedBody(span trace.Span, record func(n int64), body io.ReadCloser) io.ReadCloser {\n\t// The successful protocol switch responses will have a body that\n\t// implement an io.ReadWriteCloser. Ensure this interface type continues\n\t// to be satisfied if that is the case.\n\tif _, ok := body.(io.ReadWriteCloser); ok {\n\t\treturn &wrappedBody{span: span, record: record, body: body}\n\t}\n\n\t// Remove the implementation of the io.ReadWriteCloser and only implement\n\t// the io.ReadCloser.\n\treturn struct{ io.ReadCloser }{&wrappedBody{span: span, record: record, body: body}}\n}\n\n// wrappedBody is the response body type returned by the transport\n// instrumentation to complete a span. Errors encountered when using the\n// response body are recorded in span tracking the response.\n//\n// The span tracking the response is ended when this body is closed.\n//\n// If the response body implements the io.Writer interface (i.e. for\n// successful protocol switches), the wrapped body also will.\ntype wrappedBody struct {\n\tspan     trace.Span\n\trecorded atomic.Bool\n\trecord   func(n int64)\n\tbody     io.ReadCloser\n\tread     atomic.Int64\n}\n\nvar _ io.ReadWriteCloser = &wrappedBody{}\n\nfunc (wb *wrappedBody) Write(p []byte) (int, error) {\n\t// This will not panic given the guard in newWrappedBody.\n\tn, err := wb.body.(io.Writer).Write(p)\n\tif err != nil {\n\t\twb.span.RecordError(err)\n\t\twb.span.SetStatus(codes.Error, err.Error())\n\t}\n\treturn n, err\n}\n\nfunc (wb *wrappedBody) Read(b []byte) (int, error) {\n\tn, err := wb.body.Read(b)\n\t// Record the number of bytes read\n\twb.read.Add(int64(n))\n\n\tswitch err {\n\tcase nil:\n\t\t// nothing to do here but fall through to the return\n\tcase io.EOF:\n\t\twb.recordBytesRead()\n\t\twb.span.End()\n\tdefault:\n\t\twb.span.RecordError(err)\n\t\twb.span.SetStatus(codes.Error, err.Error())\n\t}\n\treturn n, err\n}\n\n// recordBytesRead is a function that ensures the number of bytes read is recorded once and only once.\nfunc (wb *wrappedBody) recordBytesRead() {\n\t// note: it is more performant (and equally correct) to use atomic.Bool over sync.Once here. In the event that\n\t// two goroutines are racing to call this method, the number of bytes read will no longer increase. Using\n\t// CompareAndSwap allows later goroutines to return quickly and not block waiting for the race winner to finish\n\t// calling wb.record(wb.read.Load()).\n\tif wb.recorded.CompareAndSwap(false, true) {\n\t\t// Record the total number of bytes read\n\t\twb.record(wb.read.Load())\n\t}\n}\n\nfunc (wb *wrappedBody) Close() error {\n\twb.recordBytesRead()\n\twb.span.End()\n\tif wb.body != nil {\n\t\treturn wb.body.Close()\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\n// Version is the current release version of the otelhttp instrumentation.\nfunc Version() string {\n\treturn \"0.49.0\"\n\t// This string is updated by the pre_release.sh script during release\n}\n\n// SemVersion is the semantic version to be supplied to tracer/meter creation.\n//\n// Deprecated: Use [Version] instead.\nfunc SemVersion() string {\n\treturn Version()\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go",
    "content": "// Copyright The OpenTelemetry Authors\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\npackage otelhttp // import \"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"sync/atomic\"\n\n\t\"go.opentelemetry.io/otel/propagation\"\n)\n\nvar _ io.ReadCloser = &bodyWrapper{}\n\n// bodyWrapper wraps a http.Request.Body (an io.ReadCloser) to track the number\n// of bytes read and the last error.\ntype bodyWrapper struct {\n\tio.ReadCloser\n\trecord func(n int64) // must not be nil\n\n\tread atomic.Int64\n\terr  error\n}\n\nfunc (w *bodyWrapper) Read(b []byte) (int, error) {\n\tn, err := w.ReadCloser.Read(b)\n\tn1 := int64(n)\n\tw.read.Add(n1)\n\tw.err = err\n\tw.record(n1)\n\treturn n, err\n}\n\nfunc (w *bodyWrapper) Close() error {\n\treturn w.ReadCloser.Close()\n}\n\nvar _ http.ResponseWriter = &respWriterWrapper{}\n\n// respWriterWrapper wraps a http.ResponseWriter in order to track the number of\n// bytes written, the last error, and to catch the first written statusCode.\n// TODO: The wrapped http.ResponseWriter doesn't implement any of the optional\n// types (http.Hijacker, http.Pusher, http.CloseNotifier, http.Flusher, etc)\n// that may be useful when using it in real life situations.\ntype respWriterWrapper struct {\n\thttp.ResponseWriter\n\trecord func(n int64) // must not be nil\n\n\t// used to inject the header\n\tctx context.Context\n\n\tprops propagation.TextMapPropagator\n\n\twritten     int64\n\tstatusCode  int\n\terr         error\n\twroteHeader bool\n}\n\nfunc (w *respWriterWrapper) Header() http.Header {\n\treturn w.ResponseWriter.Header()\n}\n\nfunc (w *respWriterWrapper) Write(p []byte) (int, error) {\n\tif !w.wroteHeader {\n\t\tw.WriteHeader(http.StatusOK)\n\t}\n\tn, err := w.ResponseWriter.Write(p)\n\tn1 := int64(n)\n\tw.record(n1)\n\tw.written += n1\n\tw.err = err\n\treturn n, err\n}\n\n// WriteHeader persists initial statusCode for span attribution.\n// All calls to WriteHeader will be propagated to the underlying ResponseWriter\n// and will persist the statusCode from the first call.\n// Blocking consecutive calls to WriteHeader alters expected behavior and will\n// remove warning logs from net/http where developers will notice incorrect handler implementations.\nfunc (w *respWriterWrapper) WriteHeader(statusCode int) {\n\tif !w.wroteHeader {\n\t\tw.wroteHeader = true\n\t\tw.statusCode = statusCode\n\t}\n\tw.ResponseWriter.WriteHeader(statusCode)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/.codespellignore",
    "content": "ot\nfo\nte\ncollison\nconsequentially\nans\nnam\nvalu\nthirdparty\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/.codespellrc",
    "content": "# https://github.com/codespell-project/codespell\n[codespell]\nbuiltin = clear,rare,informal\ncheck-filenames =\ncheck-hidden =\nignore-words = .codespellignore\ninteractive = 1\nskip = .git,go.mod,go.sum,go.work,go.work.sum,semconv,venv,.tools\nuri-ignore-words-list = *\nwrite =\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/.gitattributes",
    "content": "* text=auto eol=lf\n*.{cmd,[cC][mM][dD]} text eol=crlf\n*.{bat,[bB][aA][tT]} text eol=crlf\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/.gitignore",
    "content": ".DS_Store\nThumbs.db\n\n.cache/\n.tools/\nvenv/\n.idea/\n.vscode/\n*.iml\n*.so\ncoverage.*\ngo.work\ngo.work.sum\n\ngen/\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/.golangci.yml",
    "content": "# See https://github.com/golangci/golangci-lint#config-file\nrun:\n  issues-exit-code: 1 #Default\n  tests: true #Default\n\nlinters:\n  # Disable everything by default so upgrades to not include new \"default\n  # enabled\" linters.\n  disable-all: true\n  # Specifically enable linters we want to use.\n  enable:\n    - asasalint\n    - bodyclose\n    - depguard\n    - errcheck\n    - errorlint\n    - godot\n    - gofumpt\n    - goimports\n    - gosec\n    - gosimple\n    - govet\n    - ineffassign\n    - misspell\n    - perfsprint\n    - revive\n    - staticcheck\n    - testifylint\n    - typecheck\n    - unconvert\n    - unused\n    - unparam\n    - usestdlibvars\n    - usetesting\n\nissues:\n  # Maximum issues count per one linter.\n  # Set to 0 to disable.\n  # Default: 50\n  # Setting to unlimited so the linter only is run once to debug all issues.\n  max-issues-per-linter: 0\n  # Maximum count of issues with the same text.\n  # Set to 0 to disable.\n  # Default: 3\n  # Setting to unlimited so the linter only is run once to debug all issues.\n  max-same-issues: 0\n  # Excluding configuration per-path, per-linter, per-text and per-source.\n  exclude-rules:\n    # TODO: Having appropriate comments for exported objects helps development,\n    # even for objects in internal packages. Appropriate comments for all\n    # exported objects should be added and this exclusion removed.\n    - path: '.*internal/.*'\n      text: \"exported (method|function|type|const) (.+) should have comment or be unexported\"\n      linters:\n        - revive\n    # Yes, they are, but it's okay in a test.\n    - path: _test\\.go\n      text: \"exported func.*returns unexported type.*which can be annoying to use\"\n      linters:\n        - revive\n    # Example test functions should be treated like main.\n    - path: example.*_test\\.go\n      text: \"calls to (.+) only in main[(][)] or init[(][)] functions\"\n      linters:\n        - revive\n    # It's okay to not run gosec and perfsprint in a test.\n    - path: _test\\.go\n      linters:\n        - gosec\n        - perfsprint\n    # Ignoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand)\n    # as we commonly use it in tests and examples.\n    - text: \"G404:\"\n      linters:\n        - gosec\n    # Ignoring gosec G402: TLS MinVersion too low\n    # as the https://pkg.go.dev/crypto/tls#Config handles MinVersion default well.\n    - text: \"G402: TLS MinVersion too low.\"\n      linters:\n        - gosec\n  include:\n    # revive exported should have comment or be unexported.\n    - EXC0012\n    # revive package comment should be of the form ...\n    - EXC0013\n\nlinters-settings:\n  depguard:\n    rules:\n      non-tests:\n        files:\n          - \"!$test\"\n          - \"!**/*test/*.go\"\n          - \"!**/internal/matchers/*.go\"\n        deny:\n          - pkg: \"testing\"\n          - pkg: \"github.com/stretchr/testify\"\n          - pkg: \"crypto/md5\"\n          - pkg: \"crypto/sha1\"\n          - pkg: \"crypto/**/pkix\"\n      auto/sdk:\n        files:\n          - \"!internal/global/trace.go\"\n          - \"~internal/global/trace_test.go\"\n        deny:\n          - pkg: \"go.opentelemetry.io/auto/sdk\"\n            desc: Do not use SDK from automatic instrumentation.\n      otlp-internal:\n        files:\n          - \"!**/exporters/otlp/internal/**/*.go\"\n        deny:\n          - pkg: \"go.opentelemetry.io/otel/exporters/otlp/internal\"\n            desc: Do not use cross-module internal packages.\n      otlptrace-internal:\n        files:\n          - \"!**/exporters/otlp/otlptrace/*.go\"\n          - \"!**/exporters/otlp/otlptrace/internal/**.go\"\n        deny:\n          - pkg: \"go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal\"\n            desc: Do not use cross-module internal packages.\n      otlpmetric-internal:\n        files:\n          - \"!**/exporters/otlp/otlpmetric/internal/*.go\"\n          - \"!**/exporters/otlp/otlpmetric/internal/**/*.go\"\n        deny:\n          - pkg: \"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal\"\n            desc: Do not use cross-module internal packages.\n      otel-internal:\n        files:\n          - \"**/sdk/*.go\"\n          - \"**/sdk/**/*.go\"\n          - \"**/exporters/*.go\"\n          - \"**/exporters/**/*.go\"\n          - \"**/schema/*.go\"\n          - \"**/schema/**/*.go\"\n          - \"**/metric/*.go\"\n          - \"**/metric/**/*.go\"\n          - \"**/bridge/*.go\"\n          - \"**/bridge/**/*.go\"\n          - \"**/trace/*.go\"\n          - \"**/trace/**/*.go\"\n          - \"**/log/*.go\"\n          - \"**/log/**/*.go\"\n        deny:\n          - pkg: \"go.opentelemetry.io/otel/internal$\"\n            desc: Do not use cross-module internal packages.\n          - pkg: \"go.opentelemetry.io/otel/internal/attribute\"\n            desc: Do not use cross-module internal packages.\n          - pkg: \"go.opentelemetry.io/otel/internal/internaltest\"\n            desc: Do not use cross-module internal packages.\n          - pkg: \"go.opentelemetry.io/otel/internal/matchers\"\n            desc: Do not use cross-module internal packages.\n  godot:\n    exclude:\n      # Exclude links.\n      - '^ *\\[[^]]+\\]:'\n      # Exclude sentence fragments for lists.\n      - '^[ ]*[-•]'\n      # Exclude sentences prefixing a list.\n      - ':$'\n  goimports:\n    local-prefixes: go.opentelemetry.io\n  misspell:\n    locale: US\n    ignore-words:\n      - cancelled\n  perfsprint:\n    err-error: true\n    errorf: true\n    int-conversion: true\n    sprintf1: true\n    strconcat: true\n  revive:\n    # Sets the default failure confidence.\n    # This means that linting errors with less than 0.8 confidence will be ignored.\n    # Default: 0.8\n    confidence: 0.01\n    # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md\n    rules:\n      - name: blank-imports\n      - name: bool-literal-in-expr\n      - name: constant-logical-expr\n      - name: context-as-argument\n        disabled: true\n        arguments:\n          - allowTypesBefore: \"*testing.T\"\n      - name: context-keys-type\n      - name: deep-exit\n      - name: defer\n        arguments:\n          - [\"call-chain\", \"loop\"]\n      - name: dot-imports\n      - name: duplicated-imports\n      - name: early-return\n        arguments:\n          - \"preserveScope\"\n      - name: empty-block\n      - name: empty-lines\n      - name: error-naming\n      - name: error-return\n      - name: error-strings\n      - name: errorf\n      - name: exported\n        arguments:\n          - \"sayRepetitiveInsteadOfStutters\"\n      - name: flag-parameter\n      - name: identical-branches\n      - name: if-return\n      - name: import-shadowing\n      - name: increment-decrement\n      - name: indent-error-flow\n        arguments:\n          - \"preserveScope\"\n      - name: package-comments\n      - name: range\n      - name: range-val-in-closure\n      - name: range-val-address\n      - name: redefines-builtin-id\n      - name: string-format\n        arguments:\n          - - panic\n            - '/^[^\\n]*$/'\n            - must not contain line breaks\n      - name: struct-tag\n      - name: superfluous-else\n        arguments:\n          - \"preserveScope\"\n      - name: time-equal\n      - name: unconditional-recursion\n      - name: unexported-return\n      - name: unhandled-error\n        arguments:\n          - \"fmt.Fprint\"\n          - \"fmt.Fprintf\"\n          - \"fmt.Fprintln\"\n          - \"fmt.Print\"\n          - \"fmt.Printf\"\n          - \"fmt.Println\"\n      - name: unnecessary-stmt\n      - name: useless-break\n      - name: var-declaration\n      - name: var-naming\n        arguments:\n          - [\"ID\"] # AllowList\n          - [\"Otel\", \"Aws\", \"Gcp\"] # DenyList\n      - name: waitgroup-by-value\n  testifylint:\n    enable-all: true\n    disable:\n      - float-compare\n      - go-require\n      - require-error\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/.lycheeignore",
    "content": "http://localhost\nhttp://jaeger-collector\nhttps://github.com/open-telemetry/opentelemetry-go/milestone/\nhttps://github.com/open-telemetry/opentelemetry-go/projects\nfile:///home/runner/work/opentelemetry-go/opentelemetry-go/libraries\nfile:///home/runner/work/opentelemetry-go/opentelemetry-go/manual\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/.markdownlint.yaml",
    "content": "# Default state for all rules\ndefault: true\n\n# ul-style\nMD004: false\n\n# hard-tabs\nMD010: false\n\n# line-length\nMD013: false\n\n# no-duplicate-header\nMD024:\n  siblings_only: true\n\n#single-title\nMD025: false\n\n# ol-prefix\nMD029:\n  style: ordered\n\n# no-inline-html\nMD033: false\n\n# fenced-code-language\nMD040: false\n\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).\n\nThis project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n<!-- Released section -->\n<!-- Don't change this section unless doing release -->\n\n## [1.35.0/0.57.0/0.11.0] 2025-03-05\n\nThis release is the last to support [Go 1.22].\nThe next release will require at least [Go 1.23].\n\n### Added\n\n- Add `ValueFromAttribute` and `KeyValueFromAttribute` in `go.opentelemetry.io/otel/log`. (#6180)\n- Add `EventName` and `SetEventName` to `Record` in `go.opentelemetry.io/otel/log`. (#6187)\n- Add `EventName` to `RecordFactory` in `go.opentelemetry.io/otel/log/logtest`. (#6187)\n- `AssertRecordEqual` in `go.opentelemetry.io/otel/log/logtest` checks `Record.EventName`. (#6187)\n- Add `EventName` and `SetEventName` to `Record` in `go.opentelemetry.io/otel/sdk/log`. (#6193)\n- Add `EventName` to `RecordFactory` in `go.opentelemetry.io/otel/sdk/log/logtest`. (#6193)\n- Emit `Record.EventName` field in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#6211)\n- Emit `Record.EventName` field in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6211)\n- Emit `Record.EventName` field in `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` (#6210)\n- The `go.opentelemetry.io/otel/semconv/v1.28.0` package.\n  The package contains semantic conventions from the `v1.28.0` version of the OpenTelemetry Semantic Conventions.\n  See the [migration documentation](./semconv/v1.28.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.27.0`(#6236)\n- The `go.opentelemetry.io/otel/semconv/v1.30.0` package.\n  The package contains semantic conventions from the `v1.30.0` version of the OpenTelemetry Semantic Conventions.\n  See the [migration documentation](./semconv/v1.30.0/MIGRATION.md) for information on how to upgrade from `go.opentelemetry.io/otel/semconv/v1.28.0`(#6240)\n- Document the pitfalls of using `Resource` as a comparable type.\n  `Resource.Equal` and `Resource.Equivalent` should be used instead. (#6272)\n- Support [Go 1.24]. (#6304)\n- Add `FilterProcessor` and `EnabledParameters` in `go.opentelemetry.io/otel/sdk/log`.\n  It replaces `go.opentelemetry.io/otel/sdk/log/internal/x.FilterProcessor`.\n  Compared to previous version it additionally gives the possibility to filter by resource and instrumentation scope. (#6317)\n\n### Changed\n\n- Update `github.com/prometheus/common` to `v0.62.0`, which changes the `NameValidationScheme` to `NoEscaping`.\n  This allows metrics names to keep original delimiters (e.g. `.`), rather than replacing with underscores.\n  This is controlled by the `Content-Type` header, or can be reverted by setting `NameValidationScheme` to `LegacyValidation` in `github.com/prometheus/common/model`. (#6198)\n\n### Fixes\n\n- Eliminate goroutine leak for the processor returned by `NewSimpleSpanProcessor` in `go.opentelemetry.io/otel/sdk/trace` when `Shutdown` is called and the passed `ctx` is canceled and `SpanExporter.Shutdown` has not returned. (#6368)\n- Eliminate goroutine leak for the processor returned by `NewBatchSpanProcessor` in `go.opentelemetry.io/otel/sdk/trace` when `ForceFlush` is called and the passed `ctx` is canceled and `SpanExporter.Export` has not returned. (#6369)\n\n## [1.34.0/0.56.0/0.10.0] 2025-01-17\n\n### Changed\n\n- Remove the notices from `Logger` to make the whole Logs API user-facing in `go.opentelemetry.io/otel/log`. (#6167)\n\n### Fixed\n\n- Relax minimum Go version to 1.22.0 in various modules. (#6073)\n- The `Type` name logged for the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` client is corrected from `otlphttpgrpc` to `otlptracegrpc`. (#6143)\n- The `Type` name logged for the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlphttpgrpc` client is corrected from `otlphttphttp` to `otlptracehttp`. (#6143)\n\n## [1.33.0/0.55.0/0.9.0/0.0.12] 2024-12-12\n\n### Added\n\n- Add `Reset` method to `SpanRecorder` in `go.opentelemetry.io/otel/sdk/trace/tracetest`. (#5994)\n- Add `EnabledInstrument` interface in `go.opentelemetry.io/otel/sdk/metric/internal/x`.\n  This is an experimental interface that is implemented by synchronous instruments provided by `go.opentelemetry.io/otel/sdk/metric`.\n  Users can use it to avoid performing computationally expensive operations when recording measurements.\n  It does not fall within the scope of the OpenTelemetry Go versioning and stability [policy](./VERSIONING.md) and it may be changed in backwards incompatible ways or removed in feature releases. (#6016)\n\n### Changed\n\n- The default global API now supports full auto-instrumentation from the `go.opentelemetry.io/auto` package.\n  See that package for more information. (#5920)\n- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5929)\n- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5929)\n- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5929)\n- Performance improvements for attribute value `AsStringSlice`, `AsFloat64Slice`, `AsInt64Slice`, `AsBoolSlice`. (#6011)\n- Change `EnabledParameters` to have a `Severity` field instead of a getter and setter in `go.opentelemetry.io/otel/log`. (#6009)\n\n### Fixed\n\n- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5954)\n- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5954)\n- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5954)\n- Fix invalid exemplar keys in `go.opentelemetry.io/otel/exporters/prometheus`. (#5995)\n- Fix attribute value truncation in `go.opentelemetry.io/otel/sdk/trace`. (#5997)\n- Fix attribute value truncation in `go.opentelemetry.io/otel/sdk/log`. (#6032)\n\n## [1.32.0/0.54.0/0.8.0/0.0.11] 2024-11-08\n\n### Added\n\n- Add `go.opentelemetry.io/otel/sdk/metric/exemplar.AlwaysOffFilter`, which can be used to disable exemplar recording. (#5850)\n- Add `go.opentelemetry.io/otel/sdk/metric.WithExemplarFilter`, which can be used to configure the exemplar filter used by the metrics SDK. (#5850)\n- Add `ExemplarReservoirProviderSelector` and `DefaultExemplarReservoirProviderSelector` to `go.opentelemetry.io/otel/sdk/metric`, which defines the exemplar reservoir to use based on the aggregation of the metric. (#5861)\n- Add `ExemplarReservoirProviderSelector` to `go.opentelemetry.io/otel/sdk/metric.Stream` to allow using views to configure the exemplar reservoir to use for a metric. (#5861)\n- Add `ReservoirProvider`, `HistogramReservoirProvider` and `FixedSizeReservoirProvider` to `go.opentelemetry.io/otel/sdk/metric/exemplar` to make it convenient to use providers of Reservoirs. (#5861)\n- The `go.opentelemetry.io/otel/semconv/v1.27.0` package.\n  The package contains semantic conventions from the `v1.27.0` version of the OpenTelemetry Semantic Conventions. (#5894)\n- Add `Attributes attribute.Set` field to `Scope` in `go.opentelemetry.io/otel/sdk/instrumentation`. (#5903)\n- Add `Attributes attribute.Set` field to `ScopeRecords` in `go.opentelemetry.io/otel/log/logtest`. (#5927)\n- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` adds instrumentation scope attributes. (#5934)\n- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` adds instrumentation scope attributes. (#5934)\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` adds instrumentation scope attributes. (#5935)\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` adds instrumentation scope attributes. (#5935)\n- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` adds instrumentation scope attributes. (#5933)\n- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` adds instrumentation scope attributes. (#5933)\n- `go.opentelemetry.io/otel/exporters/prometheus` adds instrumentation scope attributes in `otel_scope_info` metric as labels. (#5932)\n\n### Changed\n\n- Support scope attributes and make them as identifying for `Tracer` in `go.opentelemetry.io/otel` and `go.opentelemetry.io/otel/sdk/trace`. (#5924)\n- Support scope attributes and make them as identifying for `Meter` in `go.opentelemetry.io/otel` and `go.opentelemetry.io/otel/sdk/metric`. (#5926)\n- Support scope attributes and make them as identifying for `Logger` in `go.opentelemetry.io/otel` and `go.opentelemetry.io/otel/sdk/log`. (#5925)\n- Make schema URL and scope attributes as identifying for `Tracer` in `go.opentelemetry.io/otel/bridge/opentracing`. (#5931)\n- Clear unneeded slice elements to allow GC to collect the objects in `go.opentelemetry.io/otel/sdk/metric` and `go.opentelemetry.io/otel/sdk/trace`. (#5804)\n\n### Fixed\n\n- Global MeterProvider registration unwraps global instrument Observers, the undocumented Unwrap() methods are now private. (#5881)\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5892)\n- `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5911)\n- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` now keeps the metadata already present in the context when `WithHeaders` is used. (#5915)\n- Fix `go.opentelemetry.io/otel/exporters/prometheus` trying to add exemplars to Gauge metrics, which is unsupported. (#5912)\n- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#5944)\n- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5944)\n- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#5944)\n- Fix `WithEndpointURL` to always use a secure connection when an https URL is passed in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5944)\n- Fix incorrect metrics generated from callbacks when multiple readers are used in `go.opentelemetry.io/otel/sdk/metric`. (#5900)\n\n### Removed\n\n- Remove all examples under `go.opentelemetry.io/otel/example` as they are moved to [Contrib repository](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/examples). (#5930)\n\n## [1.31.0/0.53.0/0.7.0/0.0.10] 2024-10-11\n\n### Added\n\n- Add `go.opentelemetry.io/otel/sdk/metric/exemplar` package which includes `Exemplar`, `Filter`, `TraceBasedFilter`, `AlwaysOnFilter`, `HistogramReservoir`, `FixedSizeReservoir`, `Reservoir`, `Value` and `ValueType` types. These will be used for configuring the exemplar reservoir for the metrics sdk. (#5747, #5862)\n- Add `WithExportBufferSize` option to log batch processor.(#5877)\n\n### Changed\n\n- Enable exemplars by default in `go.opentelemetry.io/otel/sdk/metric`. Exemplars can be disabled by setting `OTEL_METRICS_EXEMPLAR_FILTER=always_off` (#5778)\n- `Logger.Enabled` in `go.opentelemetry.io/otel/log` now accepts a newly introduced `EnabledParameters` type instead of `Record`. (#5791)\n- `FilterProcessor.Enabled` in `go.opentelemetry.io/otel/sdk/log/internal/x` now accepts `EnabledParameters` instead of `Record`. (#5791)\n- The `Record` type in `go.opentelemetry.io/otel/log` is no longer comparable. (#5847)\n- Performance improvements for the trace SDK `SetAttributes` method in `Span`. (#5864)\n- Reduce memory allocations for the `Event` and `Link` lists in `Span`. (#5858)\n- Performance improvements for the trace SDK `AddEvent`, `AddLink`, `RecordError` and `End` methods in `Span`. (#5874)\n\n### Deprecated\n\n- Deprecate all examples under `go.opentelemetry.io/otel/example` as they are moved to [Contrib repository](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/examples). (#5854)\n\n### Fixed\n\n- The race condition for multiple `FixedSize` exemplar reservoirs identified in #5814 is resolved. (#5819)\n- Fix log records duplication in case of heterogeneous resource attributes by correctly mapping each log record to it's resource and scope. (#5803)\n- Fix timer channel drain to avoid hanging on Go 1.23. (#5868)\n- Fix delegation for global meter providers, and panic when calling otel.SetMeterProvider. (#5827)\n- Change the `reflect.TypeOf` to use a nil pointer to not allocate on the heap unless necessary. (#5827)\n\n## [1.30.0/0.52.0/0.6.0/0.0.9] 2024-09-09\n\n### Added\n\n- Support `OTEL_EXPORTER_OTLP_LOGS_INSECURE` and `OTEL_EXPORTER_OTLP_INSECURE` environments in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#5739)\n- The `WithResource` option for `NewMeterProvider` now merges the provided resources with the ones from environment variables. (#5773)\n- The `WithResource` option for `NewLoggerProvider` now merges the provided resources with the ones from environment variables. (#5773)\n- Add UTF-8 support to `go.opentelemetry.io/otel/exporters/prometheus`. (#5755)\n\n### Fixed\n\n- Fix memory leak in the global `MeterProvider` when identical instruments are repeatedly created. (#5754)\n- Fix panic on instruments creation when setting meter provider. (#5758)\n- Fix an issue where `SetMeterProvider` in `go.opentelemetry.io/otel` might miss the delegation for instruments and registries. (#5780)\n\n### Removed\n\n- Drop support for [Go 1.21]. (#5736, #5740, #5800)\n\n## [1.29.0/0.51.0/0.5.0] 2024-08-23\n\nThis release is the last to support [Go 1.21].\nThe next release will require at least [Go 1.22].\n\n### Added\n\n- Add MacOS ARM64 platform to the compatibility testing suite. (#5577)\n- Add `InstrumentationScope` field to `SpanStub` in `go.opentelemetry.io/otel/sdk/trace/tracetest`, as a replacement for the deprecated `InstrumentationLibrary`. (#5627)\n- Make the initial release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`.\n  This new module contains an OTLP exporter that transmits log telemetry using gRPC.\n  This module is unstable and breaking changes may be introduced.\n  See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5629)\n- Add `Walk` function to `TraceState` in `go.opentelemetry.io/otel/trace` to iterate all the key-value pairs. (#5651)\n- Bridge the trace state in `go.opentelemetry.io/otel/bridge/opencensus`. (#5651)\n- Zero value of `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` no longer panics. (#5665)\n- The `FilterProcessor` interface type is added in `go.opentelemetry.io/otel/sdk/log/internal/x`.\n  This is an optional and experimental interface that log `Processor`s can implement to instruct the `Logger` if a `Record` will be processed or not.\n  It replaces the existing `Enabled` method that is removed from the `Processor` interface itself.\n  It does not fall within the scope of the OpenTelemetry Go versioning and stability [policy](./VERSIONING.md) and it may be changed in backwards incompatible ways or removed in feature releases. (#5692)\n- Support [Go 1.23]. (#5720)\n\n### Changed\n\n- `NewMemberRaw`, `NewKeyProperty` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage` allow UTF-8 string in key. (#5132)\n- `Processor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` now accepts a pointer to `Record` instead of a value so that the record modifications done in a processor are propagated to subsequent registered processors. (#5636)\n- `SimpleProcessor.Enabled` in `go.opentelemetry.io/otel/sdk/log` now returns `false` if the exporter is `nil`. (#5665)\n- Update the concurrency requirements of `Exporter` in `go.opentelemetry.io/otel/sdk/log`. (#5666)\n- `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` synchronizes `OnEmit` calls. (#5666)\n- The `Processor` interface in `go.opentelemetry.io/otel/sdk/log` no longer includes the `Enabled` method.\n  See the `FilterProcessor` interface type added in `go.opentelemetry.io/otel/sdk/log/internal/x` to continue providing this functionality. (#5692)\n- The `SimpleProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693)\n- The `BatchProcessor` type in `go.opentelemetry.io/otel/sdk/log` is no longer comparable. (#5693)\n\n### Fixed\n\n- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5584)\n- Pass the underlying error rather than a generic retry-able failure in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`, `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5541)\n- Correct the `Tracer`, `Meter`, and `Logger` names used in `go.opentelemetry.io/otel/example/dice`. (#5612)\n- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/namedtracer`. (#5612)\n- Correct the `Tracer` name used in `go.opentelemetry.io/otel/example/opencensus`. (#5612)\n- Correct the `Tracer` and `Meter` names used in `go.opentelemetry.io/otel/example/otel-collector`. (#5612)\n- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/passthrough`. (#5612)\n- Correct the `Meter` name used in `go.opentelemetry.io/otel/example/prometheus`. (#5612)\n- Correct the `Tracer` names used in `go.opentelemetry.io/otel/example/zipkin`. (#5612)\n- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5641)\n- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5650)\n- Stop percent encoding header environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705)\n- Remove invalid environment variable header keys in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`, `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`, `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` (#5705)\n\n### Removed\n\n- The `Enabled` method of the `SimpleProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692)\n- The `Enabled` method of the `BatchProcessor` in `go.opentelemetry.io/otel/sdk/log` is removed. (#5692)\n\n## [1.28.0/0.50.0/0.4.0] 2024-07-02\n\n### Added\n\n- The `IsEmpty` method is added to the `Instrument` type in `go.opentelemetry.io/otel/sdk/metric`.\n  This method is used to check if an `Instrument` instance is a zero-value. (#5431)\n- Store and provide the emitted `context.Context` in `ScopeRecords` of `go.opentelemetry.io/otel/sdk/log/logtest`. (#5468)\n- The `go.opentelemetry.io/otel/semconv/v1.26.0` package.\n  The package contains semantic conventions from the `v1.26.0` version of the OpenTelemetry Semantic Conventions. (#5476)\n- The `AssertRecordEqual` method to `go.opentelemetry.io/otel/log/logtest` to allow comparison of two log records in tests. (#5499)\n- The `WithHeaders` option to `go.opentelemetry.io/otel/exporters/zipkin` to allow configuring custom http headers while exporting spans. (#5530)\n\n### Changed\n\n- `Tracer.Start` in `go.opentelemetry.io/otel/trace/noop` no longer allocates a span for empty span context. (#5457)\n- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/example/otel-collector`. (#5490)\n- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/example/zipkin`. (#5490)\n- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/exporters/zipkin`. (#5490)\n  - The exporter no longer exports the deprecated \"otel.library.name\" or \"otel.library.version\" attributes.\n- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/sdk/resource`. (#5490)\n- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/sdk/trace`. (#5490)\n- `SimpleProcessor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` no longer allocates a slice which makes it possible to have a zero-allocation log processing using `SimpleProcessor`. (#5493)\n- Use non-generic functions in the `Start` method of `\"go.opentelemetry.io/otel/sdk/trace\".Trace` to reduce memory allocation. (#5497)\n- `service.instance.id` is populated for a `Resource` created with `\"go.opentelemetry.io/otel/sdk/resource\".Default` with a default value when `OTEL_GO_X_RESOURCE` is set. (#5520)\n- Improve performance of metric instruments in `go.opentelemetry.io/otel/sdk/metric` by removing unnecessary calls to `time.Now`. (#5545)\n\n### Fixed\n\n- Log a warning to the OpenTelemetry internal logger when a `Record` in `go.opentelemetry.io/otel/sdk/log` drops an attribute due to a limit being reached. (#5376)\n- Identify the `Tracer` returned from the global `TracerProvider` in `go.opentelemetry.io/otel/global` with its schema URL. (#5426)\n- Identify the `Meter` returned from the global `MeterProvider` in `go.opentelemetry.io/otel/global` with its schema URL. (#5426)\n- Log a warning to the OpenTelemetry internal logger when a `Span` in `go.opentelemetry.io/otel/sdk/trace` drops an attribute, event, or link due to a limit being reached. (#5434)\n- Document instrument name requirements in `go.opentelemetry.io/otel/metric`. (#5435)\n- Prevent random number generation data-race for experimental rand exemplars in `go.opentelemetry.io/otel/sdk/metric`. (#5456)\n- Fix counting number of dropped attributes of `Record` in `go.opentelemetry.io/otel/sdk/log`. (#5464)\n- Fix panic in baggage creation when a member contains `0x80` char in key or value. (#5494)\n- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#5508)\n- Retry trace and span ID generation if it generated an invalid one in `go.opentelemetry.io/otel/sdk/trace`. (#5514)\n- Fix stale timestamps reported by the last-value aggregation. (#5517)\n- Indicate the `Exporter` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` must be created by the `New` method. (#5521)\n- Improved performance in all `{Bool,Int64,Float64,String}SliceValue` functions of `go.opentelemetry.io/attributes` by reducing the number of allocations. (#5549)\n- Replace invalid percent-encoded octet sequences with replacement char in `go.opentelemetry.io/otel/baggage`. (#5528)\n\n## [1.27.0/0.49.0/0.3.0] 2024-05-21\n\n### Added\n\n- Add example for `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. (#5242)\n- Add `RecordFactory` in `go.opentelemetry.io/otel/sdk/log/logtest` to facilitate testing exporter and processor implementations. (#5258)\n- Add `RecordFactory` in `go.opentelemetry.io/otel/log/logtest` to facilitate testing bridge implementations. (#5263)\n- The count of dropped records from the `BatchProcessor` in `go.opentelemetry.io/otel/sdk/log` is logged. (#5276)\n- Add metrics in the `otel-collector` example. (#5283)\n- Add the synchronous gauge instrument to `go.opentelemetry.io/otel/metric`. (#5304)\n  - An `int64` or `float64` synchronous gauge instrument can now be created from a `Meter`.\n  - All implementations of the API (`go.opentelemetry.io/otel/metric/noop`, `go.opentelemetry.io/otel/sdk/metric`) are updated to support this instrument.\n- Add logs to `go.opentelemetry.io/otel/example/dice`. (#5349)\n\n### Changed\n\n- The `Shutdown` method of `Exporter` in `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` ignores the context cancellation and always returns `nil`. (#5189)\n- The `ForceFlush` and `Shutdown` methods of the exporter returned by `New` in `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` ignore the context cancellation and always return `nil`. (#5189)\n- Apply the value length limits to `Record` attributes in `go.opentelemetry.io/otel/sdk/log`. (#5230)\n- De-duplicate map attributes added to a `Record` in `go.opentelemetry.io/otel/sdk/log`. (#5230)\n- `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` won't print timestamps when `WithoutTimestamps` option is set. (#5241)\n- The `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` exporter won't print `AttributeValueLengthLimit` and `AttributeCountLimit` fields now, instead it prints the `DroppedAttributes` field. (#5272)\n- Improved performance in the `Stringer` implementation of `go.opentelemetry.io/otel/baggage.Member` by reducing the number of allocations. (#5286)\n- Set the start time for last-value aggregates in `go.opentelemetry.io/otel/sdk/metric`. (#5305)\n- The `Span` in `go.opentelemetry.io/otel/sdk/trace` will record links without span context if either non-empty `TraceState` or attributes are provided. (#5315)\n- Upgrade all dependencies of `go.opentelemetry.io/otel/semconv/v1.24.0` to `go.opentelemetry.io/otel/semconv/v1.25.0`. (#5374)\n\n### Fixed\n\n- Comparison of unordered maps for `go.opentelemetry.io/otel/log.KeyValue` and `go.opentelemetry.io/otel/log.Value`. (#5306)\n- Fix the empty output of `go.opentelemetry.io/otel/log.Value` in `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. (#5311)\n- Split the behavior of `Recorder` in `go.opentelemetry.io/otel/log/logtest` so it behaves as a `LoggerProvider` only. (#5365)\n- Fix wrong package name of the error message when parsing endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5371)\n- Identify the `Logger` returned from the global `LoggerProvider` in `go.opentelemetry.io/otel/log/global` with its schema URL. (#5375)\n\n## [1.26.0/0.48.0/0.2.0-alpha] 2024-04-24\n\n### Added\n\n- Add `Recorder` in `go.opentelemetry.io/otel/log/logtest` to facilitate testing the log bridge implementations. (#5134)\n- Add span flags to OTLP spans and links exported by `go.opentelemetry.io/otel/exporters/otlp/otlptrace`. (#5194)\n- Make the initial alpha release of `go.opentelemetry.io/otel/sdk/log`.\n  This new module contains the Go implementation of the OpenTelemetry Logs SDK.\n  This module is unstable and breaking changes may be introduced.\n  See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5240)\n- Make the initial alpha release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`.\n  This new module contains an OTLP exporter that transmits log telemetry using HTTP.\n  This module is unstable and breaking changes may be introduced.\n  See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5240)\n- Make the initial alpha release of `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`.\n  This new module contains an exporter prints log records to STDOUT.\n  This module is unstable and breaking changes may be introduced.\n  See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5240)\n- The `go.opentelemetry.io/otel/semconv/v1.25.0` package.\n  The package contains semantic conventions from the `v1.25.0` version of the OpenTelemetry Semantic Conventions. (#5254)\n\n### Changed\n\n- Update `go.opentelemetry.io/proto/otlp` from v1.1.0 to v1.2.0. (#5177)\n- Improve performance of baggage member character validation in `go.opentelemetry.io/otel/baggage`. (#5214)\n- The `otel-collector` example now uses docker compose to bring up services instead of kubernetes. (#5244)\n\n### Fixed\n\n- Slice attribute values in `go.opentelemetry.io/otel/attribute` are now emitted as their JSON representation. (#5159)\n\n## [1.25.0/0.47.0/0.0.8/0.1.0-alpha] 2024-04-05\n\n### Added\n\n- Add `WithProxy` option in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4906)\n- Add `WithProxy` option in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlptracehttp`. (#4906)\n- Add `AddLink` method to the `Span` interface in `go.opentelemetry.io/otel/trace`. (#5032)\n- The `Enabled` method is added to the `Logger` interface in `go.opentelemetry.io/otel/log`.\n  This method is used to notify users if a log record will be emitted or not. (#5071)\n- Add `SeverityUndefined` `const` to `go.opentelemetry.io/otel/log`.\n  This value represents an unset severity level. (#5072)\n- Add `Empty` function in `go.opentelemetry.io/otel/log` to return a `KeyValue` for an empty value. (#5076)\n- Add `go.opentelemetry.io/otel/log/global` to manage the global `LoggerProvider`.\n  This package is provided with the anticipation that all functionality will be migrate to `go.opentelemetry.io/otel` when `go.opentelemetry.io/otel/log` stabilizes.\n  At which point, users will be required to migrage their code, and this package will be deprecated then removed. (#5085)\n- Add support for `Summary` metrics in the `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` exporters. (#5100)\n- Add `otel.scope.name` and `otel.scope.version` tags to spans exported by `go.opentelemetry.io/otel/exporters/zipkin`. (#5108)\n- Add support for `AddLink` to `go.opentelemetry.io/otel/bridge/opencensus`. (#5116)\n- Add `String` method to `Value` and `KeyValue` in `go.opentelemetry.io/otel/log`. (#5117)\n- Add Exemplar support to `go.opentelemetry.io/otel/exporters/prometheus`. (#5111)\n- Add metric semantic conventions to `go.opentelemetry.io/otel/semconv/v1.24.0`. Future `semconv` packages will include metric semantic conventions as well. (#4528)\n\n### Changed\n\n- `SpanFromContext` and `SpanContextFromContext` in `go.opentelemetry.io/otel/trace` no longer make a heap allocation when the passed context has no span. (#5049)\n- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` now create a gRPC client in idle mode and with \"dns\" as the default resolver using [`grpc.NewClient`](https://pkg.go.dev/google.golang.org/grpc#NewClient). (#5151)\n  Because of that `WithDialOption` ignores [`grpc.WithBlock`](https://pkg.go.dev/google.golang.org/grpc#WithBlock), [`grpc.WithTimeout`](https://pkg.go.dev/google.golang.org/grpc#WithTimeout), and [`grpc.WithReturnConnectionError`](https://pkg.go.dev/google.golang.org/grpc#WithReturnConnectionError).\n  Notice that [`grpc.DialContext`](https://pkg.go.dev/google.golang.org/grpc#DialContext) which was used before is now deprecated.\n\n### Fixed\n\n- Clarify the documentation about equivalence guarantees for the `Set` and `Distinct` types in `go.opentelemetry.io/otel/attribute`. (#5027)\n- Prevent default `ErrorHandler` self-delegation. (#5137)\n- Update all dependencies to address [GO-2024-2687]. (#5139)\n\n### Removed\n\n- Drop support for [Go 1.20]. (#4967)\n\n### Deprecated\n\n- Deprecate `go.opentelemetry.io/otel/attribute.Sortable` type. (#4734)\n- Deprecate `go.opentelemetry.io/otel/attribute.NewSetWithSortable` function. (#4734)\n- Deprecate `go.opentelemetry.io/otel/attribute.NewSetWithSortableFiltered` function. (#4734)\n\n## [1.24.0/0.46.0/0.0.1-alpha] 2024-02-23\n\nThis release is the last to support [Go 1.20].\nThe next release will require at least [Go 1.21].\n\n### Added\n\n- Support [Go 1.22]. (#4890)\n- Add exemplar support to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4900)\n- Add exemplar support to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4900)\n- The `go.opentelemetry.io/otel/log` module is added.\n  This module includes OpenTelemetry Go's implementation of the Logs Bridge API.\n  This module is in an alpha state, it is subject to breaking changes.\n  See our [versioning policy](./VERSIONING.md) for more info. (#4961)\n- Add ARM64 platform to the compatibility testing suite. (#4994)\n\n### Fixed\n\n- Fix registration of multiple callbacks when using the global meter provider from `go.opentelemetry.io/otel`. (#4945)\n- Fix negative buckets in output of exponential histograms. (#4956)\n\n## [1.23.1] 2024-02-07\n\n### Fixed\n\n- Register all callbacks passed during observable instrument creation instead of just the last one multiple times in `go.opentelemetry.io/otel/sdk/metric`. (#4888)\n\n## [1.23.0] 2024-02-06\n\nThis release contains the first stable, `v1`, release of the following modules:\n\n- `go.opentelemetry.io/otel/bridge/opencensus`\n- `go.opentelemetry.io/otel/bridge/opencensus/test`\n- `go.opentelemetry.io/otel/example/opencensus`\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`\n- `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric`\n\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\n### Added\n\n- Add `WithEndpointURL` option to the `exporters/otlp/otlpmetric/otlpmetricgrpc`, `exporters/otlp/otlpmetric/otlpmetrichttp`, `exporters/otlp/otlptrace/otlptracegrpc` and `exporters/otlp/otlptrace/otlptracehttp` packages. (#4808)\n- Experimental exemplar exporting is added to the metric SDK.\n  See [metric documentation](./sdk/metric/internal/x/README.md#exemplars) for more information about this feature and how to enable it. (#4871)\n- `ErrSchemaURLConflict` is added to `go.opentelemetry.io/otel/sdk/resource`.\n  This error is returned when a merge of two `Resource`s with different (non-empty) schema URL is attempted. (#4876)\n\n### Changed\n\n- The `Merge` and `New` functions in `go.opentelemetry.io/otel/sdk/resource` now returns a partial result if there is a schema URL merge conflict.\n  Instead of returning `nil` when two `Resource`s with different (non-empty) schema URLs are merged the merged `Resource`, along with the new `ErrSchemaURLConflict` error, is returned.\n  It is up to the user to decide if they want to use the returned `Resource` or not.\n  It may have desired attributes overwritten or include stale semantic conventions. (#4876)\n\n### Fixed\n\n- Fix `ContainerID` resource detection on systemd when cgroup path has a colon. (#4449)\n- Fix `go.opentelemetry.io/otel/sdk/metric` to cache instruments to avoid leaking memory when the same instrument is created multiple times. (#4820)\n- Fix missing `Mix` and `Max` values for `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` by introducing `MarshalText` and `MarshalJSON` for the `Extrema` type in `go.opentelemetry.io/sdk/metric/metricdata`. (#4827)\n\n## [1.23.0-rc.1] 2024-01-18\n\nThis is a release candidate for the v1.23.0 release.\nThat release is expected to include the `v1` release of the following modules:\n\n- `go.opentelemetry.io/otel/bridge/opencensus`\n- `go.opentelemetry.io/otel/bridge/opencensus/test`\n- `go.opentelemetry.io/otel/example/opencensus`\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`\n- `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric`\n\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\n## [1.22.0/0.45.0] 2024-01-17\n\n### Added\n\n- The `go.opentelemetry.io/otel/semconv/v1.22.0` package.\n  The package contains semantic conventions from the `v1.22.0` version of the OpenTelemetry Semantic Conventions. (#4735)\n- The `go.opentelemetry.io/otel/semconv/v1.23.0` package.\n  The package contains semantic conventions from the `v1.23.0` version of the OpenTelemetry Semantic Conventions. (#4746)\n- The `go.opentelemetry.io/otel/semconv/v1.23.1` package.\n  The package contains semantic conventions from the `v1.23.1` version of the OpenTelemetry Semantic Conventions. (#4749)\n- The `go.opentelemetry.io/otel/semconv/v1.24.0` package.\n  The package contains semantic conventions from the `v1.24.0` version of the OpenTelemetry Semantic Conventions. (#4770)\n- Add `WithResourceAsConstantLabels` option to apply resource attributes for every metric emitted by the Prometheus exporter. (#4733)\n- Experimental cardinality limiting is added to the metric SDK.\n  See [metric documentation](./sdk/metric/internal/x/README.md#cardinality-limit) for more information about this feature and how to enable it. (#4457)\n- Add `NewMemberRaw` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage`. (#4804)\n\n### Changed\n\n- Upgrade all use of `go.opentelemetry.io/otel/semconv` to use `v1.24.0`. (#4754)\n- Update transformations in `go.opentelemetry.io/otel/exporters/zipkin` to follow `v1.24.0` version of the OpenTelemetry specification. (#4754)\n- Record synchronous measurements when the passed context is canceled instead of dropping in `go.opentelemetry.io/otel/sdk/metric`.\n  If you do not want to make a measurement when the context is cancelled, you need to handle it yourself (e.g  `if ctx.Err() != nil`). (#4671)\n- Improve `go.opentelemetry.io/otel/trace.TraceState`'s performance. (#4722)\n- Improve `go.opentelemetry.io/otel/propagation.TraceContext`'s performance. (#4721)\n- Improve `go.opentelemetry.io/otel/baggage` performance. (#4743)\n- Improve performance of the `(*Set).Filter` method in `go.opentelemetry.io/otel/attribute` when the passed filter does not filter out any attributes from the set. (#4774)\n- `Member.String` in `go.opentelemetry.io/otel/baggage` percent-encodes only when necessary. (#4775)\n- Improve `go.opentelemetry.io/otel/trace.Span`'s performance when adding multiple attributes. (#4818)\n- `Property.Value` in `go.opentelemetry.io/otel/baggage` now returns a raw string instead of a percent-encoded value. (#4804)\n\n### Fixed\n\n- Fix `Parse` in `go.opentelemetry.io/otel/baggage` to validate member value before percent-decoding. (#4755)\n- Fix whitespace encoding of `Member.String` in `go.opentelemetry.io/otel/baggage`. (#4756)\n- Fix observable not registered error when the asynchronous instrument has a drop aggregation in `go.opentelemetry.io/otel/sdk/metric`. (#4772)\n- Fix baggage item key so that it is not canonicalized in `go.opentelemetry.io/otel/bridge/opentracing`. (#4776)\n- Fix `go.opentelemetry.io/otel/bridge/opentracing` to properly handle baggage values that requires escaping during propagation. (#4804)\n- Fix a bug where using multiple readers resulted in incorrect asynchronous counter values in `go.opentelemetry.io/otel/sdk/metric`. (#4742)\n\n## [1.21.0/0.44.0] 2023-11-16\n\n### Removed\n\n- Remove the deprecated `go.opentelemetry.io/otel/bridge/opencensus.NewTracer`. (#4706)\n- Remove the deprecated `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` module. (#4707)\n- Remove the deprecated `go.opentelemetry.io/otel/example/view` module. (#4708)\n- Remove the deprecated `go.opentelemetry.io/otel/example/fib` module. (#4723)\n\n### Fixed\n\n- Do not parse non-protobuf responses in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4719)\n- Do not parse non-protobuf responses in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4719)\n\n## [1.20.0/0.43.0] 2023-11-10\n\nThis release brings a breaking change for custom trace API implementations. Some interfaces (`TracerProvider`, `Tracer`, `Span`) now embed the `go.opentelemetry.io/otel/trace/embedded` types. Implementers need to update their implementations based on what they want the default behavior to be. See the \"API Implementations\" section of the [trace API] package documentation for more information about how to accomplish this.\n\n### Added\n\n- Add `go.opentelemetry.io/otel/bridge/opencensus.InstallTraceBridge`, which installs the OpenCensus trace bridge, and replaces `opencensus.NewTracer`. (#4567)\n- Add scope version to trace and metric bridges in `go.opentelemetry.io/otel/bridge/opencensus`. (#4584)\n- Add the `go.opentelemetry.io/otel/trace/embedded` package to be embedded in the exported trace API interfaces. (#4620)\n- Add the `go.opentelemetry.io/otel/trace/noop` package as a default no-op implementation of the trace API. (#4620)\n- Add context propagation in `go.opentelemetry.io/otel/example/dice`. (#4644)\n- Add view configuration to `go.opentelemetry.io/otel/example/prometheus`. (#4649)\n- Add `go.opentelemetry.io/otel/metric.WithExplicitBucketBoundaries`, which allows defining default explicit bucket boundaries when creating histogram instruments. (#4603)\n- Add `Version` function in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4660)\n- Add `Version` function in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4660)\n- Add Summary, SummaryDataPoint, and QuantileValue to `go.opentelemetry.io/sdk/metric/metricdata`. (#4622)\n- `go.opentelemetry.io/otel/bridge/opencensus.NewMetricProducer` now supports exemplars from OpenCensus. (#4585)\n- Add support for `WithExplicitBucketBoundaries` in `go.opentelemetry.io/otel/sdk/metric`. (#4605)\n- Add support for Summary metrics in `go.opentelemetry.io/otel/bridge/opencensus`. (#4668)\n\n### Deprecated\n\n- Deprecate `go.opentelemetry.io/otel/bridge/opencensus.NewTracer` in favor of `opencensus.InstallTraceBridge`. (#4567)\n- Deprecate `go.opentelemetry.io/otel/example/fib` package is in favor of `go.opentelemetry.io/otel/example/dice`. (#4618)\n- Deprecate `go.opentelemetry.io/otel/trace.NewNoopTracerProvider`.\n  Use the added `NewTracerProvider` function in `go.opentelemetry.io/otel/trace/noop` instead. (#4620)\n- Deprecate `go.opentelemetry.io/otel/example/view` package in favor of `go.opentelemetry.io/otel/example/prometheus`. (#4649)\n- Deprecate `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`. (#4693)\n\n### Changed\n\n- `go.opentelemetry.io/otel/bridge/opencensus.NewMetricProducer` returns a `*MetricProducer` struct instead of the metric.Producer interface. (#4583)\n- The `TracerProvider` in `go.opentelemetry.io/otel/trace` now embeds the `go.opentelemetry.io/otel/trace/embedded.TracerProvider` type.\n  This extends the `TracerProvider` interface and is is a breaking change for any existing implementation.\n  Implementers need to update their implementations based on what they want the default behavior of the interface to be.\n  See the \"API Implementations\" section of the `go.opentelemetry.io/otel/trace` package documentation for more information about how to accomplish this. (#4620)\n- The `Tracer` in `go.opentelemetry.io/otel/trace` now embeds the `go.opentelemetry.io/otel/trace/embedded.Tracer` type.\n  This extends the `Tracer` interface and is is a breaking change for any existing implementation.\n  Implementers need to update their implementations based on what they want the default behavior of the interface to be.\n  See the \"API Implementations\" section of the `go.opentelemetry.io/otel/trace` package documentation for more information about how to accomplish this. (#4620)\n- The `Span` in `go.opentelemetry.io/otel/trace` now embeds the `go.opentelemetry.io/otel/trace/embedded.Span` type.\n  This extends the `Span` interface and is is a breaking change for any existing implementation.\n  Implementers need to update their implementations based on what they want the default behavior of the interface to be.\n  See the \"API Implementations\" section of the `go.opentelemetry.io/otel/trace` package documentation for more information about how to accomplish this. (#4620)\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` does no longer depend on `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`. (#4660)\n- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` does no longer depend on `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`. (#4660)\n- Retry for `502 Bad Gateway` and `504 Gateway Timeout` HTTP statuses in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4670)\n- Retry for `502 Bad Gateway` and `504 Gateway Timeout` HTTP statuses in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4670)\n- Retry for `RESOURCE_EXHAUSTED` only if RetryInfo is returned in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4669)\n- Retry for `RESOURCE_EXHAUSTED` only if RetryInfo is returned in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#4669)\n- Retry temporary HTTP request failures in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4679)\n- Retry temporary HTTP request failures in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4679)\n\n### Fixed\n\n- Fix improper parsing of characters such us `+`, `/` by `Parse` in `go.opentelemetry.io/otel/baggage` as they were rendered as a whitespace. (#4667)\n- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_RESOURCE_ATTRIBUTES` in `go.opentelemetry.io/otel/sdk/resource` as they were rendered as a whitespace. (#4699)\n- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_METRICS_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` as they were rendered as a whitespace. (#4699)\n- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_METRICS_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` as they were rendered as a whitespace. (#4699)\n- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_TRACES_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlptracegrpc` as they were rendered as a whitespace. (#4699)\n- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_TRACES_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlptracehttp` as they were rendered as a whitespace. (#4699)\n- In `go.opentelemetry.op/otel/exporters/prometheus`, the exporter no longer `Collect`s metrics after `Shutdown` is invoked. (#4648)\n- Fix documentation for `WithCompressor` in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#4695)\n- Fix documentation for `WithCompressor` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4695)\n\n## [1.19.0/0.42.0/0.0.7] 2023-09-28\n\nThis release contains the first stable release of the OpenTelemetry Go [metric SDK].\nOur project stability guarantees now apply to the `go.opentelemetry.io/otel/sdk/metric` package.\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\n### Added\n\n- Add the \"Roll the dice\" getting started application example in `go.opentelemetry.io/otel/example/dice`. (#4539)\n- The `WithWriter` and `WithPrettyPrint` options to `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` to set a custom `io.Writer`, and allow displaying the output in human-readable JSON. (#4507)\n\n### Changed\n\n- Allow '/' characters in metric instrument names. (#4501)\n- The exporter in `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` does not prettify its output by default anymore. (#4507)\n- Upgrade `gopkg.io/yaml` from `v2` to `v3` in `go.opentelemetry.io/otel/schema`. (#4535)\n\n### Fixed\n\n- In `go.opentelemetry.op/otel/exporters/prometheus`, don't try to create the Prometheus metric on every `Collect` if we know the scope is invalid. (#4499)\n\n### Removed\n\n- Remove `\"go.opentelemetry.io/otel/bridge/opencensus\".NewMetricExporter`, which is replaced by `NewMetricProducer`. (#4566)\n\n## [1.19.0-rc.1/0.42.0-rc.1] 2023-09-14\n\nThis is a release candidate for the v1.19.0/v0.42.0 release.\nThat release is expected to include the `v1` release of the OpenTelemetry Go metric SDK and will provide stability guarantees of that SDK.\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\n### Changed\n\n- Allow '/' characters in metric instrument names. (#4501)\n\n### Fixed\n\n- In `go.opentelemetry.op/otel/exporters/prometheus`, don't try to create the prometheus metric on every `Collect` if we know the scope is invalid. (#4499)\n\n## [1.18.0/0.41.0/0.0.6] 2023-09-12\n\nThis release drops the compatibility guarantee of [Go 1.19].\n\n### Added\n\n- Add `WithProducer` option in `go.opentelemetry.op/otel/exporters/prometheus` to restore the ability to register producers on the prometheus exporter's manual reader. (#4473)\n- Add `IgnoreValue` option in `go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest` to allow ignoring values when comparing metrics. (#4447)\n\n### Changed\n\n- Use a `TestingT` interface instead of `*testing.T` struct in `go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest`. (#4483)\n\n### Deprecated\n\n- The `NewMetricExporter` in `go.opentelemetry.io/otel/bridge/opencensus` was deprecated in `v0.35.0` (#3541).\n  The deprecation notice format for the function has been corrected to trigger Go documentation and build tooling. (#4470)\n\n### Removed\n\n- Removed the deprecated `go.opentelemetry.io/otel/exporters/jaeger` package. (#4467)\n- Removed the deprecated `go.opentelemetry.io/otel/example/jaeger` package. (#4467)\n- Removed the deprecated `go.opentelemetry.io/otel/sdk/metric/aggregation` package. (#4468)\n- Removed the deprecated internal packages in `go.opentelemetry.io/otel/exporters/otlp` and its sub-packages. (#4469)\n- Dropped guaranteed support for versions of Go less than 1.20. (#4481)\n\n## [1.17.0/0.40.0/0.0.5] 2023-08-28\n\n### Added\n\n- Export the `ManualReader` struct in `go.opentelemetry.io/otel/sdk/metric`. (#4244)\n- Export the `PeriodicReader` struct in `go.opentelemetry.io/otel/sdk/metric`. (#4244)\n- Add support for exponential histogram aggregations.\n  A histogram can be configured as an exponential histogram using a view with `\"go.opentelemetry.io/otel/sdk/metric\".ExponentialHistogram` as the aggregation. (#4245)\n- Export the `Exporter` struct in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4272)\n- Export the `Exporter` struct in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4272)\n- The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` now support the `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` environment variable. (#4287)\n- Add `WithoutCounterSuffixes` option in `go.opentelemetry.io/otel/exporters/prometheus` to disable addition of `_total` suffixes. (#4306)\n- Add info and debug logging to the metric SDK in `go.opentelemetry.io/otel/sdk/metric`. (#4315)\n- The `go.opentelemetry.io/otel/semconv/v1.21.0` package.\n  The package contains semantic conventions from the `v1.21.0` version of the OpenTelemetry Semantic Conventions. (#4362)\n- Accept 201 to 299 HTTP status as success in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4365)\n- Document the `Temporality` and `Aggregation` methods of the `\"go.opentelemetry.io/otel/sdk/metric\".Exporter\"` need to be concurrent safe. (#4381)\n- Expand the set of units supported by the Prometheus exporter, and don't add unit suffixes if they are already present in `go.opentelemetry.op/otel/exporters/prometheus` (#4374)\n- Move the `Aggregation` interface and its implementations from `go.opentelemetry.io/otel/sdk/metric/aggregation` to `go.opentelemetry.io/otel/sdk/metric`. (#4435)\n- The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` now support the `OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION` environment variable. (#4437)\n- Add the `NewAllowKeysFilter` and `NewDenyKeysFilter` functions to `go.opentelemetry.io/otel/attribute` to allow convenient creation of allow-keys and deny-keys filters. (#4444)\n- Support Go 1.21. (#4463)\n\n### Changed\n\n- Starting from `v1.21.0` of semantic conventions, `go.opentelemetry.io/otel/semconv/{version}/httpconv` and `go.opentelemetry.io/otel/semconv/{version}/netconv` packages will no longer be published. (#4145)\n- Log duplicate instrument conflict at a warning level instead of info in `go.opentelemetry.io/otel/sdk/metric`. (#4202)\n- Return an error on the creation of new instruments in `go.opentelemetry.io/otel/sdk/metric` if their name doesn't pass regexp validation. (#4210)\n- `NewManualReader` in `go.opentelemetry.io/otel/sdk/metric` returns `*ManualReader` instead of `Reader`. (#4244)\n- `NewPeriodicReader` in `go.opentelemetry.io/otel/sdk/metric` returns `*PeriodicReader` instead of `Reader`. (#4244)\n- Count the Collect time in the `PeriodicReader` timeout in `go.opentelemetry.io/otel/sdk/metric`. (#4221)\n- The function `New` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` returns `*Exporter` instead of `\"go.opentelemetry.io/otel/sdk/metric\".Exporter`. (#4272)\n- The function `New` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` returns `*Exporter` instead of `\"go.opentelemetry.io/otel/sdk/metric\".Exporter`. (#4272)\n- If an attribute set is omitted from an async callback, the previous value will no longer be exported in `go.opentelemetry.io/otel/sdk/metric`. (#4290)\n- If an attribute set is observed multiple times in an async callback in `go.opentelemetry.io/otel/sdk/metric`, the values will be summed instead of the last observation winning. (#4289)\n- Allow the explicit bucket histogram aggregation to be used for the up-down counter, observable counter, observable up-down counter, and observable gauge in the `go.opentelemetry.io/otel/sdk/metric` package. (#4332)\n- Restrict `Meter`s in `go.opentelemetry.io/otel/sdk/metric` to only register and collect instruments it created. (#4333)\n- `PeriodicReader.Shutdown` and `PeriodicReader.ForceFlush` in `go.opentelemetry.io/otel/sdk/metric` now apply the periodic reader's timeout to the operation if the user provided context does not contain a deadline. (#4356, #4377)\n- Upgrade all use of `go.opentelemetry.io/otel/semconv` to use `v1.21.0`. (#4408)\n- Increase instrument name maximum length from 63 to 255 characters in `go.opentelemetry.io/otel/sdk/metric`. (#4434)\n- Add `go.opentelemetry.op/otel/sdk/metric.WithProducer` as an `Option` for `\"go.opentelemetry.io/otel/sdk/metric\".NewManualReader` and `\"go.opentelemetry.io/otel/sdk/metric\".NewPeriodicReader`. (#4346)\n\n### Removed\n\n- Remove `Reader.RegisterProducer` in `go.opentelemetry.io/otel/metric`.\n  Use the added `WithProducer` option instead. (#4346)\n- Remove `Reader.ForceFlush` in `go.opentelemetry.io/otel/metric`.\n  Notice that `PeriodicReader.ForceFlush` is still available. (#4375)\n\n### Fixed\n\n- Correctly format log messages from the `go.opentelemetry.io/otel/exporters/zipkin` exporter. (#4143)\n- Log an error for calls to `NewView` in `go.opentelemetry.io/otel/sdk/metric` that have empty criteria. (#4307)\n- Fix `\"go.opentelemetry.io/otel/sdk/resource\".WithHostID()` to not set an empty `host.id`. (#4317)\n- Use the instrument identifying fields to cache aggregators and determine duplicate instrument registrations in `go.opentelemetry.io/otel/sdk/metric`. (#4337)\n- Detect duplicate instruments for case-insensitive names in `go.opentelemetry.io/otel/sdk/metric`. (#4338)\n- The `ManualReader` will not panic if `AggregationSelector` returns `nil` in `go.opentelemetry.io/otel/sdk/metric`. (#4350)\n- If a `Reader`'s `AggregationSelector` returns `nil` or `DefaultAggregation` the pipeline will use the default aggregation. (#4350)\n- Log a suggested view that fixes instrument conflicts in `go.opentelemetry.io/otel/sdk/metric`. (#4349)\n- Fix possible panic, deadlock and race condition in batch span processor in `go.opentelemetry.io/otel/sdk/trace`. (#4353)\n- Improve context cancellation handling in batch span processor's `ForceFlush` in  `go.opentelemetry.io/otel/sdk/trace`. (#4369)\n- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` using gotmpl. (#4397, #3846)\n- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using gotmpl. (#4404, #3846)\n- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using gotmpl. (#4407, #3846)\n- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using gotmpl. (#4400, #3846)\n- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using gotmpl. (#4401, #3846)\n- Do not block the metric SDK when OTLP metric exports are blocked in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#3925, #4395)\n- Do not append `_total` if the counter already has that suffix for the Prometheus exproter in `go.opentelemetry.io/otel/exporter/prometheus`. (#4373)\n- Fix resource detection data race in `go.opentelemetry.io/otel/sdk/resource`. (#4409)\n- Use the first-seen instrument name during instrument name conflicts in `go.opentelemetry.io/otel/sdk/metric`. (#4428)\n\n### Deprecated\n\n- The `go.opentelemetry.io/otel/exporters/jaeger` package is deprecated.\n  OpenTelemetry dropped support for Jaeger exporter in July 2023.\n  Use `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`\n  or `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` instead. (#4423)\n- The `go.opentelemetry.io/otel/example/jaeger` package is deprecated. (#4423)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` package is deprecated. (#4420)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/oconf` package is deprecated. (#4420)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otest` package is deprecated. (#4420)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/transform` package is deprecated. (#4420)\n- The `go.opentelemetry.io/otel/exporters/otlp/internal` package is deprecated. (#4421)\n- The `go.opentelemetry.io/otel/exporters/otlp/internal/envconfig` package is deprecated. (#4421)\n- The `go.opentelemetry.io/otel/exporters/otlp/internal/retry` package is deprecated. (#4421)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` package is deprecated. (#4425)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/envconfig` package is deprecated. (#4425)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig` package is deprecated. (#4425)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlptracetest` package is deprecated. (#4425)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry` package is deprecated. (#4425)\n- The `go.opentelemetry.io/otel/sdk/metric/aggregation` package is deprecated.\n  Use the aggregation types added to `go.opentelemetry.io/otel/sdk/metric` instead. (#4435)\n\n## [1.16.0/0.39.0] 2023-05-18\n\nThis release contains the first stable release of the OpenTelemetry Go [metric API].\nOur project stability guarantees now apply to the `go.opentelemetry.io/otel/metric` package.\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\n### Added\n\n- The `go.opentelemetry.io/otel/semconv/v1.19.0` package.\n  The package contains semantic conventions from the `v1.19.0` version of the OpenTelemetry specification. (#3848)\n- The `go.opentelemetry.io/otel/semconv/v1.20.0` package.\n  The package contains semantic conventions from the `v1.20.0` version of the OpenTelemetry specification. (#4078)\n- The Exponential Histogram data types in `go.opentelemetry.io/otel/sdk/metric/metricdata`. (#4165)\n- OTLP metrics exporter now supports the Exponential Histogram Data Type. (#4222)\n- Fix serialization of `time.Time` zero values in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` packages. (#4271)\n\n### Changed\n\n- Use `strings.Cut()` instead of `string.SplitN()` for better readability and memory use. (#4049)\n- `MeterProvider` returns noop meters once it has been shutdown. (#4154)\n\n### Removed\n\n- The deprecated `go.opentelemetry.io/otel/metric/instrument` package is removed.\n  Use `go.opentelemetry.io/otel/metric` instead. (#4055)\n\n### Fixed\n\n- Fix build for BSD based systems in `go.opentelemetry.io/otel/sdk/resource`. (#4077)\n\n## [1.16.0-rc.1/0.39.0-rc.1] 2023-05-03\n\nThis is a release candidate for the v1.16.0/v0.39.0 release.\nThat release is expected to include the `v1` release of the OpenTelemetry Go metric API and will provide stability guarantees of that API.\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\n### Added\n\n- Support global `MeterProvider` in `go.opentelemetry.io/otel`. (#4039)\n  - Use `Meter` for a `metric.Meter` from the global `metric.MeterProvider`.\n  - Use `GetMeterProivder` for a global `metric.MeterProvider`.\n  - Use `SetMeterProivder` to set the global `metric.MeterProvider`.\n\n### Changed\n\n- Move the `go.opentelemetry.io/otel/metric` module to the `stable-v1` module set.\n  This stages the metric API to be released as a stable module. (#4038)\n\n### Removed\n\n- The `go.opentelemetry.io/otel/metric/global` package is removed.\n  Use `go.opentelemetry.io/otel` instead. (#4039)\n\n## [1.15.1/0.38.1] 2023-05-02\n\n### Fixed\n\n- Remove unused imports from `sdk/resource/host_id_bsd.go` which caused build failures. (#4040, #4041)\n\n## [1.15.0/0.38.0] 2023-04-27\n\n### Added\n\n- The `go.opentelemetry.io/otel/metric/embedded` package. (#3916)\n- The `Version` function to `go.opentelemetry.io/otel/sdk` to return the SDK version. (#3949)\n- Add a `WithNamespace` option to `go.opentelemetry.io/otel/exporters/prometheus` to allow users to prefix metrics with a namespace. (#3970)\n- The following configuration types were added to `go.opentelemetry.io/otel/metric/instrument` to be used in the configuration of measurement methods. (#3971)\n  - The `AddConfig` used to hold configuration for addition measurements\n    - `NewAddConfig` used to create a new `AddConfig`\n    - `AddOption` used to configure an `AddConfig`\n  - The `RecordConfig` used to hold configuration for recorded measurements\n    - `NewRecordConfig` used to create a new `RecordConfig`\n    - `RecordOption` used to configure a `RecordConfig`\n  - The `ObserveConfig` used to hold configuration for observed measurements\n    - `NewObserveConfig` used to create a new `ObserveConfig`\n    - `ObserveOption` used to configure an `ObserveConfig`\n- `WithAttributeSet` and `WithAttributes` are added to `go.opentelemetry.io/otel/metric/instrument`.\n  They return an option used during a measurement that defines the attribute Set associated with the measurement. (#3971)\n- The `Version` function to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` to return the OTLP metrics client version. (#3956)\n- The `Version` function to `go.opentelemetry.io/otel/exporters/otlp/otlptrace` to return the OTLP trace client version. (#3956)\n\n### Changed\n\n- The `Extrema` in `go.opentelemetry.io/otel/sdk/metric/metricdata` is redefined with a generic argument of `[N int64 | float64]`. (#3870)\n- Update all exported interfaces from `go.opentelemetry.io/otel/metric` to embed their corresponding interface from `go.opentelemetry.io/otel/metric/embedded`.\n  This adds an implementation requirement to set the interface default behavior for unimplemented methods. (#3916)\n- Move No-Op implementation from `go.opentelemetry.io/otel/metric` into its own package `go.opentelemetry.io/otel/metric/noop`. (#3941)\n  - `metric.NewNoopMeterProvider` is replaced with `noop.NewMeterProvider`\n- Add all the methods from `\"go.opentelemetry.io/otel/trace\".SpanContext` to `bridgeSpanContext` by embedding `otel.SpanContext` in `bridgeSpanContext`. (#3966)\n- Wrap `UploadMetrics` error in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/` to improve error message when encountering generic grpc errors. (#3974)\n- The measurement methods for all instruments in `go.opentelemetry.io/otel/metric/instrument` accept an option instead of the variadic `\"go.opentelemetry.io/otel/attribute\".KeyValue`. (#3971)\n  - The `Int64Counter.Add` method now accepts `...AddOption`\n  - The `Float64Counter.Add` method now accepts `...AddOption`\n  - The `Int64UpDownCounter.Add` method now accepts `...AddOption`\n  - The `Float64UpDownCounter.Add` method now accepts `...AddOption`\n  - The `Int64Histogram.Record` method now accepts `...RecordOption`\n  - The `Float64Histogram.Record` method now accepts `...RecordOption`\n  - The `Int64Observer.Observe` method now accepts `...ObserveOption`\n  - The `Float64Observer.Observe` method now accepts `...ObserveOption`\n- The `Observer` methods in `go.opentelemetry.io/otel/metric` accept an option instead of the variadic `\"go.opentelemetry.io/otel/attribute\".KeyValue`. (#3971)\n  - The `Observer.ObserveInt64` method now accepts `...ObserveOption`\n  - The `Observer.ObserveFloat64` method now accepts `...ObserveOption`\n- Move global metric back to `go.opentelemetry.io/otel/metric/global` from `go.opentelemetry.io/otel`. (#3986)\n\n### Fixed\n\n- `TracerProvider` allows calling `Tracer()` while it's shutting down.\n  It used to deadlock. (#3924)\n- Use the SDK version for the Telemetry SDK resource detector in `go.opentelemetry.io/otel/sdk/resource`. (#3949)\n- Fix a data race in `SpanProcessor` returned by `NewSimpleSpanProcessor` in `go.opentelemetry.io/otel/sdk/trace`. (#3951)\n- Automatically figure out the default aggregation with `aggregation.Default`. (#3967)\n\n### Deprecated\n\n- The `go.opentelemetry.io/otel/metric/instrument` package is deprecated.\n  Use the equivalent types added to `go.opentelemetry.io/otel/metric` instead. (#4018)\n\n## [1.15.0-rc.2/0.38.0-rc.2] 2023-03-23\n\nThis is a release candidate for the v1.15.0/v0.38.0 release.\nThat release will include the `v1` release of the OpenTelemetry Go metric API and will provide stability guarantees of that API.\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\n### Added\n\n- The `WithHostID` option to `go.opentelemetry.io/otel/sdk/resource`. (#3812)\n- The `WithoutTimestamps` option to `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` to sets all timestamps to zero. (#3828)\n- The new `Exemplar` type is added to `go.opentelemetry.io/otel/sdk/metric/metricdata`.\n  Both the `DataPoint` and `HistogramDataPoint` types from that package have a new field of `Exemplars` containing the sampled exemplars for their timeseries. (#3849)\n- Configuration for each metric instrument in `go.opentelemetry.io/otel/sdk/metric/instrument`. (#3895)\n- The internal logging introduces a warning level verbosity equal to `V(1)`. (#3900)\n- Added a log message warning about usage of `SimpleSpanProcessor` in production environments. (#3854)\n\n### Changed\n\n- Optimize memory allocation when creation a new `Set` using `NewSet` or `NewSetWithFiltered` in `go.opentelemetry.io/otel/attribute`. (#3832)\n- Optimize memory allocation when creation new metric instruments in `go.opentelemetry.io/otel/sdk/metric`. (#3832)\n- Avoid creating new objects on all calls to `WithDeferredSetup` and `SkipContextSetup` in OpenTracing bridge. (#3833)\n- The `New` and `Detect` functions from `go.opentelemetry.io/otel/sdk/resource` return errors that wrap underlying errors instead of just containing the underlying error strings. (#3844)\n- Both the `Histogram` and `HistogramDataPoint` are redefined with a generic argument of `[N int64 | float64]` in `go.opentelemetry.io/otel/sdk/metric/metricdata`. (#3849)\n- The metric `Export` interface from `go.opentelemetry.io/otel/sdk/metric` accepts a `*ResourceMetrics` instead of `ResourceMetrics`. (#3853)\n- Rename `Asynchronous` to `Observable` in `go.opentelemetry.io/otel/metric/instrument`. (#3892)\n- Rename `Int64ObserverOption` to `Int64ObservableOption` in `go.opentelemetry.io/otel/metric/instrument`. (#3895)\n- Rename `Float64ObserverOption` to `Float64ObservableOption` in `go.opentelemetry.io/otel/metric/instrument`. (#3895)\n- The internal logging changes the verbosity level of info to `V(4)`, the verbosity level of debug to `V(8)`. (#3900)\n\n### Fixed\n\n- `TracerProvider` consistently doesn't allow to register a `SpanProcessor` after shutdown. (#3845)\n\n### Removed\n\n- The deprecated `go.opentelemetry.io/otel/metric/global` package is removed. (#3829)\n- The unneeded `Synchronous` interface in `go.opentelemetry.io/otel/metric/instrument` was removed. (#3892)\n- The `Float64ObserverConfig` and `NewFloat64ObserverConfig` in `go.opentelemetry.io/otel/sdk/metric/instrument`.\n  Use the added `float64` instrument configuration instead. (#3895)\n- The `Int64ObserverConfig` and `NewInt64ObserverConfig` in `go.opentelemetry.io/otel/sdk/metric/instrument`.\n  Use the added `int64` instrument configuration instead. (#3895)\n- The `NewNoopMeter` function in `go.opentelemetry.io/otel/metric`, use `NewMeterProvider().Meter(\"\")` instead. (#3893)\n\n## [1.15.0-rc.1/0.38.0-rc.1] 2023-03-01\n\nThis is a release candidate for the v1.15.0/v0.38.0 release.\nThat release will include the `v1` release of the OpenTelemetry Go metric API and will provide stability guarantees of that API.\nSee our [versioning policy](VERSIONING.md) for more information about these stability guarantees.\n\nThis release drops the compatibility guarantee of [Go 1.18].\n\n### Added\n\n- Support global `MeterProvider` in `go.opentelemetry.io/otel`. (#3818)\n  - Use `Meter` for a `metric.Meter` from the global `metric.MeterProvider`.\n  - Use `GetMeterProivder` for a global `metric.MeterProvider`.\n  - Use `SetMeterProivder` to set the global `metric.MeterProvider`.\n\n### Changed\n\n- Dropped compatibility testing for [Go 1.18].\n  The project no longer guarantees support for this version of Go. (#3813)\n\n### Fixed\n\n- Handle empty environment variable as it they were not set. (#3764)\n- Clarify the `httpconv` and `netconv` packages in `go.opentelemetry.io/otel/semconv/*` provide tracing semantic conventions. (#3823)\n- Fix race conditions in `go.opentelemetry.io/otel/exporters/metric/prometheus` that could cause a panic. (#3899)\n- Fix sending nil `scopeInfo` to metrics channel in `go.opentelemetry.io/otel/exporters/metric/prometheus` that could cause a panic in `github.com/prometheus/client_golang/prometheus`. (#3899)\n\n### Deprecated\n\n- The `go.opentelemetry.io/otel/metric/global` package is deprecated.\n  Use `go.opentelemetry.io/otel` instead. (#3818)\n\n### Removed\n\n- The deprecated `go.opentelemetry.io/otel/metric/unit` package is removed. (#3814)\n\n## [1.14.0/0.37.0/0.0.4] 2023-02-27\n\nThis release is the last to support [Go 1.18].\nThe next release will require at least [Go 1.19].\n\n### Added\n\n- The `event` type semantic conventions are added to `go.opentelemetry.io/otel/semconv/v1.17.0`. (#3697)\n- Support [Go 1.20]. (#3693)\n- The `go.opentelemetry.io/otel/semconv/v1.18.0` package.\n  The package contains semantic conventions from the `v1.18.0` version of the OpenTelemetry specification. (#3719)\n  - The following `const` renames from `go.opentelemetry.io/otel/semconv/v1.17.0` are included:\n    - `OtelScopeNameKey` -> `OTelScopeNameKey`\n    - `OtelScopeVersionKey` -> `OTelScopeVersionKey`\n    - `OtelLibraryNameKey` -> `OTelLibraryNameKey`\n    - `OtelLibraryVersionKey` -> `OTelLibraryVersionKey`\n    - `OtelStatusCodeKey` -> `OTelStatusCodeKey`\n    - `OtelStatusDescriptionKey` -> `OTelStatusDescriptionKey`\n    - `OtelStatusCodeOk` -> `OTelStatusCodeOk`\n    - `OtelStatusCodeError` -> `OTelStatusCodeError`\n  - The following `func` renames from `go.opentelemetry.io/otel/semconv/v1.17.0` are included:\n    - `OtelScopeName` -> `OTelScopeName`\n    - `OtelScopeVersion` -> `OTelScopeVersion`\n    - `OtelLibraryName` -> `OTelLibraryName`\n    - `OtelLibraryVersion` -> `OTelLibraryVersion`\n    - `OtelStatusDescription` -> `OTelStatusDescription`\n- A `IsSampled` method is added to the `SpanContext` implementation in `go.opentelemetry.io/otel/bridge/opentracing` to expose the span sampled state.\n  See the [README](./bridge/opentracing/README.md) for more information. (#3570)\n- The `WithInstrumentationAttributes` option to `go.opentelemetry.io/otel/metric`. (#3738)\n- The `WithInstrumentationAttributes` option to `go.opentelemetry.io/otel/trace`. (#3739)\n- The following environment variables are supported by the periodic `Reader` in `go.opentelemetry.io/otel/sdk/metric`. (#3763)\n  - `OTEL_METRIC_EXPORT_INTERVAL` sets the time between collections and exports.\n  - `OTEL_METRIC_EXPORT_TIMEOUT` sets the timeout an export is attempted.\n\n### Changed\n\n- Fall-back to `TextMapCarrier` when it's not `HttpHeader`s in `go.opentelemetry.io/otel/bridge/opentracing`. (#3679)\n- The `Collect` method of the `\"go.opentelemetry.io/otel/sdk/metric\".Reader` interface is updated to accept the `metricdata.ResourceMetrics` value the collection will be made into.\n  This change is made to enable memory reuse by SDK users. (#3732)\n- The `WithUnit` option in `go.opentelemetry.io/otel/sdk/metric/instrument` is updated to accept a `string` for the unit value. (#3776)\n\n### Fixed\n\n- Ensure `go.opentelemetry.io/otel` does not use generics. (#3723, #3725)\n- Multi-reader `MeterProvider`s now export metrics for all readers, instead of just the first reader. (#3720, #3724)\n- Remove use of deprecated `\"math/rand\".Seed` in `go.opentelemetry.io/otel/example/prometheus`. (#3733)\n- Do not silently drop unknown schema data with `Parse` in  `go.opentelemetry.io/otel/schema/v1.1`. (#3743)\n- Data race issue in OTLP exporter retry mechanism. (#3755, #3756)\n- Wrapping empty errors when exporting in `go.opentelemetry.io/otel/sdk/metric`. (#3698, #3772)\n- Incorrect \"all\" and \"resource\" definition for schema files in `go.opentelemetry.io/otel/schema/v1.1`. (#3777)\n\n### Deprecated\n\n- The `go.opentelemetry.io/otel/metric/unit` package is deprecated.\n  Use the equivalent unit string instead. (#3776)\n  - Use `\"1\"` instead of `unit.Dimensionless`\n  - Use `\"By\"` instead of `unit.Bytes`\n  - Use `\"ms\"` instead of `unit.Milliseconds`\n\n## [1.13.0/0.36.0] 2023-02-07\n\n### Added\n\n- Attribute `KeyValue` creations functions to `go.opentelemetry.io/otel/semconv/v1.17.0` for all non-enum semantic conventions.\n  These functions ensure semantic convention type correctness. (#3675)\n\n### Fixed\n\n- Removed the `http.target` attribute from being added by `ServerRequest` in the following packages. (#3687)\n  - `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`\n  - `go.opentelemetry.io/otel/semconv/v1.14.0/httpconv`\n  - `go.opentelemetry.io/otel/semconv/v1.15.0/httpconv`\n  - `go.opentelemetry.io/otel/semconv/v1.16.0/httpconv`\n  - `go.opentelemetry.io/otel/semconv/v1.17.0/httpconv`\n\n### Removed\n\n- The deprecated `go.opentelemetry.io/otel/metric/instrument/asyncfloat64` package is removed. (#3631)\n- The deprecated `go.opentelemetry.io/otel/metric/instrument/asyncint64` package is removed. (#3631)\n- The deprecated `go.opentelemetry.io/otel/metric/instrument/syncfloat64` package is removed. (#3631)\n- The deprecated `go.opentelemetry.io/otel/metric/instrument/syncint64` package is removed. (#3631)\n\n## [1.12.0/0.35.0] 2023-01-28\n\n### Added\n\n- The `WithInt64Callback` option to `go.opentelemetry.io/otel/metric/instrument`.\n  This options is used to configure `int64` Observer callbacks during their creation. (#3507)\n- The `WithFloat64Callback` option to `go.opentelemetry.io/otel/metric/instrument`.\n  This options is used to configure `float64` Observer callbacks during their creation. (#3507)\n- The `Producer` interface and `Reader.RegisterProducer(Producer)` to `go.opentelemetry.io/otel/sdk/metric`.\n  These additions are used to enable external metric Producers. (#3524)\n- The `Callback` function type to `go.opentelemetry.io/otel/metric`.\n  This new named function type is registered with a `Meter`. (#3564)\n- The `go.opentelemetry.io/otel/semconv/v1.13.0` package.\n  The package contains semantic conventions from the `v1.13.0` version of the OpenTelemetry specification. (#3499)\n  - The `EndUserAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is merged into `ClientRequest` and `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `HTTPAttributesFromHTTPStatusCode` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is merged into `ClientResponse` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `HTTPClientAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ClientRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `HTTPServerAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `HTTPServerMetricAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `NetAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is split into `Transport` in `go.opentelemetry.io/otel/semconv/v1.13.0/netconv` and `ClientRequest` or `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `SpanStatusFromHTTPStatusCode` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ClientStatus` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `SpanStatusFromHTTPStatusCodeAndSpanKind` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is split into `ClientStatus` and `ServerStatus` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`.\n  - The `Client` function is included in `go.opentelemetry.io/otel/semconv/v1.13.0/netconv` to generate attributes for a `net.Conn`.\n  - The `Server` function is included in `go.opentelemetry.io/otel/semconv/v1.13.0/netconv` to generate attributes for a `net.Listener`.\n- The `go.opentelemetry.io/otel/semconv/v1.14.0` package.\n  The package contains semantic conventions from the `v1.14.0` version of the OpenTelemetry specification. (#3566)\n- The `go.opentelemetry.io/otel/semconv/v1.15.0` package.\n  The package contains semantic conventions from the `v1.15.0` version of the OpenTelemetry specification. (#3578)\n- The `go.opentelemetry.io/otel/semconv/v1.16.0` package.\n  The package contains semantic conventions from the `v1.16.0` version of the OpenTelemetry specification. (#3579)\n- Metric instruments to `go.opentelemetry.io/otel/metric/instrument`.\n  These instruments are use as replacements of the deprecated `go.opentelemetry.io/otel/metric/instrument/{asyncfloat64,asyncint64,syncfloat64,syncint64}` packages.(#3575, #3586)\n  - `Float64ObservableCounter` replaces the `asyncfloat64.Counter`\n  - `Float64ObservableUpDownCounter` replaces the `asyncfloat64.UpDownCounter`\n  - `Float64ObservableGauge` replaces the `asyncfloat64.Gauge`\n  - `Int64ObservableCounter` replaces the `asyncint64.Counter`\n  - `Int64ObservableUpDownCounter` replaces the `asyncint64.UpDownCounter`\n  - `Int64ObservableGauge` replaces the `asyncint64.Gauge`\n  - `Float64Counter` replaces the `syncfloat64.Counter`\n  - `Float64UpDownCounter` replaces the `syncfloat64.UpDownCounter`\n  - `Float64Histogram` replaces the `syncfloat64.Histogram`\n  - `Int64Counter` replaces the `syncint64.Counter`\n  - `Int64UpDownCounter` replaces the `syncint64.UpDownCounter`\n  - `Int64Histogram` replaces the `syncint64.Histogram`\n- `NewTracerProvider` to `go.opentelemetry.io/otel/bridge/opentracing`.\n  This is used to create `WrapperTracer` instances from a `TracerProvider`. (#3116)\n- The `Extrema` type to `go.opentelemetry.io/otel/sdk/metric/metricdata`.\n  This type is used to represent min/max values and still be able to distinguish unset and zero values. (#3487)\n- The `go.opentelemetry.io/otel/semconv/v1.17.0` package.\n  The package contains semantic conventions from the `v1.17.0` version of the OpenTelemetry specification. (#3599)\n\n### Changed\n\n- Jaeger and Zipkin exporter use `github.com/go-logr/logr` as the logging interface, and add the `WithLogr` option. (#3497, #3500)\n- Instrument configuration in `go.opentelemetry.io/otel/metric/instrument` is split into specific options and configuration based on the instrument type. (#3507)\n  - Use the added `Int64Option` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/syncint64`.\n  - Use the added `Float64Option` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/syncfloat64`.\n  - Use the added `Int64ObserverOption` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/asyncint64`.\n  - Use the added `Float64ObserverOption` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/asyncfloat64`.\n- Return a `Registration` from the `RegisterCallback` method of a `Meter` in the `go.opentelemetry.io/otel/metric` package.\n  This `Registration` can be used to unregister callbacks. (#3522)\n- Global error handler uses an atomic value instead of a mutex. (#3543)\n- Add `NewMetricProducer` to `go.opentelemetry.io/otel/bridge/opencensus`, which can be used to pass OpenCensus metrics to an OpenTelemetry Reader. (#3541)\n- Global logger uses an atomic value instead of a mutex. (#3545)\n- The `Shutdown` method of the `\"go.opentelemetry.io/otel/sdk/trace\".TracerProvider` releases all computational resources when called the first time. (#3551)\n- The `Sampler` returned from `TraceIDRatioBased` `go.opentelemetry.io/otel/sdk/trace` now uses the rightmost bits for sampling decisions.\n  This fixes random sampling when using ID generators like `xray.IDGenerator` and increasing parity with other language implementations. (#3557)\n- Errors from `go.opentelemetry.io/otel/exporters/otlp/otlptrace` exporters are wrapped in errors identifying their signal name.\n  Existing users of the exporters attempting to identify specific errors will need to use `errors.Unwrap()` to get the underlying error. (#3516)\n- Exporters from `go.opentelemetry.io/otel/exporters/otlp` will print the final retryable error message when attempts to retry time out. (#3514)\n- The instrument kind names in `go.opentelemetry.io/otel/sdk/metric` are updated to match the API. (#3562)\n  - `InstrumentKindSyncCounter` is renamed to `InstrumentKindCounter`\n  - `InstrumentKindSyncUpDownCounter` is renamed to `InstrumentKindUpDownCounter`\n  - `InstrumentKindSyncHistogram` is renamed to `InstrumentKindHistogram`\n  - `InstrumentKindAsyncCounter` is renamed to `InstrumentKindObservableCounter`\n  - `InstrumentKindAsyncUpDownCounter` is renamed to `InstrumentKindObservableUpDownCounter`\n  - `InstrumentKindAsyncGauge` is renamed to `InstrumentKindObservableGauge`\n- The `RegisterCallback` method of the `Meter` in `go.opentelemetry.io/otel/metric` changed.\n  - The named `Callback` replaces the inline function parameter. (#3564)\n  - `Callback` is required to return an error. (#3576)\n  - `Callback` accepts the added `Observer` parameter added.\n    This new parameter is used by `Callback` implementations to observe values for asynchronous instruments instead of calling the `Observe` method of the instrument directly. (#3584)\n  - The slice of `instrument.Asynchronous` is now passed as a variadic argument. (#3587)\n- The exporter from `go.opentelemetry.io/otel/exporters/zipkin` is updated to use the `v1.16.0` version of semantic conventions.\n  This means it no longer uses the removed `net.peer.ip` or `http.host` attributes to determine the remote endpoint.\n  Instead it uses the `net.sock.peer` attributes. (#3581)\n- The `Min` and `Max` fields of the `HistogramDataPoint` in `go.opentelemetry.io/otel/sdk/metric/metricdata` are now defined with the added `Extrema` type instead of a `*float64`. (#3487)\n\n### Fixed\n\n- Asynchronous instruments that use sum aggregators and attribute filters correctly add values from equivalent attribute sets that have been filtered. (#3439, #3549)\n- The `RegisterCallback` method of the `Meter` from `go.opentelemetry.io/otel/sdk/metric` only registers a callback for instruments created by that meter.\n  Trying to register a callback with instruments from a different meter will result in an error being returned. (#3584)\n\n### Deprecated\n\n- The `NewMetricExporter` in `go.opentelemetry.io/otel/bridge/opencensus` is deprecated.\n  Use `NewMetricProducer` instead. (#3541)\n- The `go.opentelemetry.io/otel/metric/instrument/asyncfloat64` package is deprecated.\n  Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575)\n- The `go.opentelemetry.io/otel/metric/instrument/asyncint64` package is deprecated.\n  Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575)\n- The `go.opentelemetry.io/otel/metric/instrument/syncfloat64` package is deprecated.\n  Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575)\n- The `go.opentelemetry.io/otel/metric/instrument/syncint64` package is deprecated.\n  Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575)\n- The `NewWrappedTracerProvider` in `go.opentelemetry.io/otel/bridge/opentracing` is now deprecated.\n  Use `NewTracerProvider` instead. (#3116)\n\n### Removed\n\n- The deprecated `go.opentelemetry.io/otel/sdk/metric/view` package is removed. (#3520)\n- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/asyncint64` is removed.\n  Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530)\n  - The `Counter` method is replaced by `Meter.Int64ObservableCounter`\n  - The `UpDownCounter` method is replaced by `Meter.Int64ObservableUpDownCounter`\n  - The `Gauge` method is replaced by `Meter.Int64ObservableGauge`\n- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/asyncfloat64` is removed.\n  Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530)\n  - The `Counter` method is replaced by `Meter.Float64ObservableCounter`\n  - The `UpDownCounter` method is replaced by `Meter.Float64ObservableUpDownCounter`\n  - The `Gauge` method is replaced by `Meter.Float64ObservableGauge`\n- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/syncint64` is removed.\n  Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530)\n  - The `Counter` method is replaced by `Meter.Int64Counter`\n  - The `UpDownCounter` method is replaced by `Meter.Int64UpDownCounter`\n  - The `Histogram` method is replaced by `Meter.Int64Histogram`\n- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/syncfloat64` is removed.\n  Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530)\n  - The `Counter` method is replaced by `Meter.Float64Counter`\n  - The `UpDownCounter` method is replaced by `Meter.Float64UpDownCounter`\n  - The `Histogram` method is replaced by `Meter.Float64Histogram`\n\n## [1.11.2/0.34.0] 2022-12-05\n\n### Added\n\n- The `WithView` `Option` is added to the `go.opentelemetry.io/otel/sdk/metric` package.\n   This option is used to configure the view(s) a `MeterProvider` will use for all `Reader`s that are registered with it. (#3387)\n- Add Instrumentation Scope and Version as info metric and label in Prometheus exporter.\n  This can be disabled using the `WithoutScopeInfo()` option added to that package.(#3273, #3357)\n- OTLP exporters now recognize: (#3363)\n  - `OTEL_EXPORTER_OTLP_INSECURE`\n  - `OTEL_EXPORTER_OTLP_TRACES_INSECURE`\n  - `OTEL_EXPORTER_OTLP_METRICS_INSECURE`\n  - `OTEL_EXPORTER_OTLP_CLIENT_KEY`\n  - `OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY`\n  - `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY`\n  - `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE`\n  - `OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE`\n  - `OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE`\n- The `View` type and related `NewView` function to create a view according to the OpenTelemetry specification are added to `go.opentelemetry.io/otel/sdk/metric`.\n  These additions are replacements for the `View` type and `New` function from `go.opentelemetry.io/otel/sdk/metric/view`. (#3459)\n- The `Instrument` and `InstrumentKind` type are added to `go.opentelemetry.io/otel/sdk/metric`.\n  These additions are replacements for the `Instrument` and `InstrumentKind` types from `go.opentelemetry.io/otel/sdk/metric/view`. (#3459)\n- The `Stream` type is added to `go.opentelemetry.io/otel/sdk/metric` to define a metric data stream a view will produce. (#3459)\n- The `AssertHasAttributes` allows instrument authors to test that datapoints returned have appropriate attributes. (#3487)\n\n### Changed\n\n- The `\"go.opentelemetry.io/otel/sdk/metric\".WithReader` option no longer accepts views to associate with the `Reader`.\n   Instead, views are now registered directly with the `MeterProvider` via the new `WithView` option.\n   The views registered with the `MeterProvider` apply to all `Reader`s. (#3387)\n- The `Temporality(view.InstrumentKind) metricdata.Temporality` and `Aggregation(view.InstrumentKind) aggregation.Aggregation` methods are added to the `\"go.opentelemetry.io/otel/sdk/metric\".Exporter` interface. (#3260)\n- The `Temporality(view.InstrumentKind) metricdata.Temporality` and `Aggregation(view.InstrumentKind) aggregation.Aggregation` methods are added to the `\"go.opentelemetry.io/otel/exporters/otlp/otlpmetric\".Client` interface. (#3260)\n- The `WithTemporalitySelector` and `WithAggregationSelector` `ReaderOption`s have been changed to `ManualReaderOption`s in the `go.opentelemetry.io/otel/sdk/metric` package. (#3260)\n- The periodic reader in the `go.opentelemetry.io/otel/sdk/metric` package now uses the temporality and aggregation selectors from its configured exporter instead of accepting them as options. (#3260)\n\n### Fixed\n\n- The `go.opentelemetry.io/otel/exporters/prometheus` exporter fixes duplicated `_total` suffixes. (#3369)\n- Remove comparable requirement for `Reader`s. (#3387)\n- Cumulative metrics from the OpenCensus bridge (`go.opentelemetry.io/otel/bridge/opencensus`) are defined as monotonic sums, instead of non-monotonic. (#3389)\n- Asynchronous counters (`Counter` and `UpDownCounter`) from the metric SDK now produce delta sums when configured with delta temporality. (#3398)\n- Exported `Status` codes in the `go.opentelemetry.io/otel/exporters/zipkin` exporter are now exported as all upper case values. (#3340)\n- `Aggregation`s from `go.opentelemetry.io/otel/sdk/metric` with no data are not exported. (#3394, #3436)\n- Re-enabled Attribute Filters in the Metric SDK. (#3396)\n- Asynchronous callbacks are only called if they are registered with at least one instrument that does not use drop aggregation. (#3408)\n- Do not report empty partial-success responses in the `go.opentelemetry.io/otel/exporters/otlp` exporters. (#3438, #3432)\n- Handle partial success responses in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` exporters. (#3162, #3440)\n- Prevent duplicate Prometheus description, unit, and type. (#3469)\n- Prevents panic when using incorrect `attribute.Value.As[Type]Slice()`. (#3489)\n\n### Removed\n\n- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric.Client` interface is removed. (#3486)\n- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric.New` function is removed. Use the `otlpmetric[http|grpc].New` directly. (#3486)\n\n### Deprecated\n\n- The `go.opentelemetry.io/otel/sdk/metric/view` package is deprecated.\n  Use `Instrument`, `InstrumentKind`, `View`, and `NewView` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3476)\n\n## [1.11.1/0.33.0] 2022-10-19\n\n### Added\n\n- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` registers with a Prometheus registerer on creation.\n   By default, it will register with the default Prometheus registerer.\n   A non-default registerer can be used by passing the `WithRegisterer` option. (#3239)\n- Added the `WithAggregationSelector` option to the `go.opentelemetry.io/otel/exporters/prometheus` package to change the default `AggregationSelector` used. (#3341)\n- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` converts the `Resource` associated with metric exports into a `target_info` metric. (#3285)\n\n### Changed\n\n- The `\"go.opentelemetry.io/otel/exporters/prometheus\".New` function is updated to return an error.\n   It will return an error if the exporter fails to register with Prometheus. (#3239)\n\n### Fixed\n\n- The URL-encoded values from the `OTEL_RESOURCE_ATTRIBUTES` environment variable are decoded. (#2963)\n- The `baggage.NewMember` function decodes the `value` parameter instead of directly using it.\n   This fixes the implementation to be compliant with the W3C specification. (#3226)\n- Slice attributes of the `attribute` package are now comparable based on their value, not instance. (#3108 #3252)\n- The `Shutdown` and `ForceFlush` methods of the `\"go.opentelemetry.io/otel/sdk/trace\".TraceProvider` no longer return an error when no processor is registered. (#3268)\n- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` cumulatively sums histogram buckets. (#3281)\n- The sum of each histogram data point is now uniquely exported by the `go.opentelemetry.io/otel/exporters/otlpmetric` exporters. (#3284, #3293)\n- Recorded values for asynchronous counters (`Counter` and `UpDownCounter`) are interpreted as exact, not incremental, sum values by the metric SDK. (#3350, #3278)\n- `UpDownCounters` are now correctly output as Prometheus gauges in the `go.opentelemetry.io/otel/exporters/prometheus` exporter. (#3358)\n- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` no longer describes the metrics it will send to Prometheus on startup.\n   Instead the exporter is defined as an \"unchecked\" collector for Prometheus.\n   This fixes the `reader is not registered` warning currently emitted on startup. (#3291 #3342)\n- The `go.opentelemetry.io/otel/exporters/prometheus` exporter now correctly adds `_total` suffixes to counter metrics. (#3360)\n- The `go.opentelemetry.io/otel/exporters/prometheus` exporter now adds a unit suffix to metric names.\n   This can be disabled using the `WithoutUnits()` option added to that package. (#3352)\n\n## [1.11.0/0.32.3] 2022-10-12\n\n### Added\n\n- Add default User-Agent header to OTLP exporter requests (`go.opentelemetry.io/otel/exporters/otlptrace/otlptracegrpc` and `go.opentelemetry.io/otel/exporters/otlptrace/otlptracehttp`). (#3261)\n\n### Changed\n\n- `span.SetStatus` has been updated such that calls that lower the status are now no-ops. (#3214)\n- Upgrade `golang.org/x/sys/unix` from `v0.0.0-20210423185535-09eb48e85fd7` to `v0.0.0-20220919091848-fb04ddd9f9c8`.\n  This addresses [GO-2022-0493](https://pkg.go.dev/vuln/GO-2022-0493). (#3235)\n\n## [0.32.2] Metric SDK (Alpha) - 2022-10-11\n\n### Added\n\n- Added an example of using metric views to customize instruments. (#3177)\n- Add default User-Agent header to OTLP exporter requests (`go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetrichttp`). (#3261)\n\n### Changed\n\n- Flush pending measurements with the `PeriodicReader` in the `go.opentelemetry.io/otel/sdk/metric` when `ForceFlush` or `Shutdown` are called. (#3220)\n- Update histogram default bounds to match the requirements of the latest specification. (#3222)\n- Encode the HTTP status code in the OpenTracing bridge (`go.opentelemetry.io/otel/bridge/opentracing`) as an integer.  (#3265)\n\n### Fixed\n\n- Use default view if instrument does not match any registered view of a reader. (#3224, #3237)\n- Return the same instrument every time a user makes the exact same instrument creation call. (#3229, #3251)\n- Return the existing instrument when a view transforms a creation call to match an existing instrument. (#3240, #3251)\n- Log a warning when a conflicting instrument (e.g. description, unit, data-type) is created instead of returning an error. (#3251)\n- The OpenCensus bridge no longer sends empty batches of metrics. (#3263)\n\n## [0.32.1] Metric SDK (Alpha) - 2022-09-22\n\n### Changed\n\n- The Prometheus exporter sanitizes OpenTelemetry instrument names when exporting.\n   Invalid characters are replaced with `_`. (#3212)\n\n### Added\n\n- The metric portion of the OpenCensus bridge (`go.opentelemetry.io/otel/bridge/opencensus`) has been reintroduced. (#3192)\n- The OpenCensus bridge example (`go.opentelemetry.io/otel/example/opencensus`) has been reintroduced. (#3206)\n\n### Fixed\n\n- Updated go.mods to point to valid versions of the sdk. (#3216)\n- Set the `MeterProvider` resource on all exported metric data. (#3218)\n\n## [0.32.0] Revised Metric SDK (Alpha) - 2022-09-18\n\n### Changed\n\n- The metric SDK in `go.opentelemetry.io/otel/sdk/metric` is completely refactored to comply with the OpenTelemetry specification.\n  Please see the package documentation for how the new SDK is initialized and configured. (#3175)\n- Update the minimum supported go version to go1.18. Removes support for go1.17 (#3179)\n\n### Removed\n\n- The metric portion of the OpenCensus bridge (`go.opentelemetry.io/otel/bridge/opencensus`) has been removed.\n  A new bridge compliant with the revised metric SDK will be added back in a future release. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/aggregator/aggregatortest` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/aggregator/histogram` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/aggregator/sum` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/aggregator` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/controller/basic` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/controller/controllertest` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/controller/time` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/export/aggregation` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/export` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/metrictest` package is removed.\n  A replacement package that supports the new metric SDK will be added back in a future release. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/number` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/processor/basic` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/processor/processortest` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/processor/reducer` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/registry` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/sdkapi` package is removed, see the new metric SDK. (#3175)\n- The `go.opentelemetry.io/otel/sdk/metric/selector/simple` package is removed, see the new metric SDK. (#3175)\n- The `\"go.opentelemetry.io/otel/sdk/metric\".ErrUninitializedInstrument` variable was removed. (#3175)\n- The `\"go.opentelemetry.io/otel/sdk/metric\".ErrBadInstrument` variable was removed. (#3175)\n- The `\"go.opentelemetry.io/otel/sdk/metric\".Accumulator` type was removed, see the `MeterProvider`in the new metric SDK. (#3175)\n- The `\"go.opentelemetry.io/otel/sdk/metric\".NewAccumulator` function was removed, see `NewMeterProvider`in the new metric SDK. (#3175)\n- The deprecated `\"go.opentelemetry.io/otel/sdk/metric\".AtomicFieldOffsets` function was removed. (#3175)\n\n## [1.10.0] - 2022-09-09\n\n### Added\n\n- Support Go 1.19. (#3077)\n  Include compatibility testing and document support. (#3077)\n- Support the OTLP ExportTracePartialSuccess response; these are passed to the registered error handler. (#3106)\n- Upgrade go.opentelemetry.io/proto/otlp from v0.18.0 to v0.19.0 (#3107)\n\n### Changed\n\n- Fix misidentification of OpenTelemetry `SpanKind` in OpenTracing bridge (`go.opentelemetry.io/otel/bridge/opentracing`).  (#3096)\n- Attempting to start a span with a nil `context` will no longer cause a panic. (#3110)\n- All exporters will be shutdown even if one reports an error (#3091)\n- Ensure valid UTF-8 when truncating over-length attribute values. (#3156)\n\n## [1.9.0/0.0.3] - 2022-08-01\n\n### Added\n\n- Add support for Schema Files format 1.1.x (metric \"split\" transform) with the new `go.opentelemetry.io/otel/schema/v1.1` package. (#2999)\n- Add the `go.opentelemetry.io/otel/semconv/v1.11.0` package.\n  The package contains semantic conventions from the `v1.11.0` version of the OpenTelemetry specification. (#3009)\n- Add the `go.opentelemetry.io/otel/semconv/v1.12.0` package.\n  The package contains semantic conventions from the `v1.12.0` version of the OpenTelemetry specification. (#3010)\n- Add the `http.method` attribute to HTTP server metric from all `go.opentelemetry.io/otel/semconv/*` packages. (#3018)\n\n### Fixed\n\n- Invalid warning for context setup being deferred in `go.opentelemetry.io/otel/bridge/opentracing` package. (#3029)\n\n## [1.8.0/0.31.0] - 2022-07-08\n\n### Added\n\n- Add support for `opentracing.TextMap` format in the `Inject` and `Extract` methods\nof the `\"go.opentelemetry.io/otel/bridge/opentracing\".BridgeTracer` type. (#2911)\n\n### Changed\n\n- The `crosslink` make target has been updated to use the `go.opentelemetry.io/build-tools/crosslink` package. (#2886)\n- In the `go.opentelemetry.io/otel/sdk/instrumentation` package rename `Library` to `Scope` and alias `Library` as `Scope` (#2976)\n- Move metric no-op implementation form `nonrecording` to `metric` package. (#2866)\n\n### Removed\n\n- Support for go1.16. Support is now only for go1.17 and go1.18 (#2917)\n\n### Deprecated\n\n- The `Library` struct in the `go.opentelemetry.io/otel/sdk/instrumentation` package is deprecated.\n  Use the equivalent `Scope` struct instead. (#2977)\n- The `ReadOnlySpan.InstrumentationLibrary` method from the `go.opentelemetry.io/otel/sdk/trace` package is deprecated.\n  Use the equivalent `ReadOnlySpan.InstrumentationScope` method instead. (#2977)\n\n## [1.7.0/0.30.0] - 2022-04-28\n\n### Added\n\n- Add the `go.opentelemetry.io/otel/semconv/v1.8.0` package.\n  The package contains semantic conventions from the `v1.8.0` version of the OpenTelemetry specification. (#2763)\n- Add the `go.opentelemetry.io/otel/semconv/v1.9.0` package.\n  The package contains semantic conventions from the `v1.9.0` version of the OpenTelemetry specification. (#2792)\n- Add the `go.opentelemetry.io/otel/semconv/v1.10.0` package.\n  The package contains semantic conventions from the `v1.10.0` version of the OpenTelemetry specification. (#2842)\n- Added an in-memory exporter to metrictest to aid testing with a full SDK. (#2776)\n\n### Fixed\n\n- Globally delegated instruments are unwrapped before delegating asynchronous callbacks. (#2784)\n- Remove import of `testing` package in non-tests builds of the `go.opentelemetry.io/otel` package. (#2786)\n\n### Changed\n\n- The `WithLabelEncoder` option from the `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` package is renamed to `WithAttributeEncoder`. (#2790)\n- The `LabelFilterSelector` interface from `go.opentelemetry.io/otel/sdk/metric/processor/reducer` is renamed to `AttributeFilterSelector`.\n  The method included in the renamed interface also changed from `LabelFilterFor` to `AttributeFilterFor`. (#2790)\n- The `Metadata.Labels` method from the `go.opentelemetry.io/otel/sdk/metric/export` package is renamed to `Metadata.Attributes`.\n  Consequentially, the `Record` type from the same package also has had the embedded method renamed. (#2790)\n\n### Deprecated\n\n- The `Iterator.Label` method in the `go.opentelemetry.io/otel/attribute` package is deprecated.\n  Use the equivalent `Iterator.Attribute` method instead. (#2790)\n- The `Iterator.IndexedLabel` method in the `go.opentelemetry.io/otel/attribute` package is deprecated.\n  Use the equivalent `Iterator.IndexedAttribute` method instead. (#2790)\n- The `MergeIterator.Label` method in the `go.opentelemetry.io/otel/attribute` package is deprecated.\n  Use the equivalent `MergeIterator.Attribute` method instead. (#2790)\n\n### Removed\n\n- Removed the `Batch` type from the `go.opentelemetry.io/otel/sdk/metric/metrictest` package. (#2864)\n- Removed the `Measurement` type from the `go.opentelemetry.io/otel/sdk/metric/metrictest` package. (#2864)\n\n## [0.29.0] - 2022-04-11\n\n### Added\n\n- The metrics global package was added back into several test files. (#2764)\n- The `Meter` function is added back to the `go.opentelemetry.io/otel/metric/global` package.\n  This function is a convenience function equivalent to calling `global.MeterProvider().Meter(...)`. (#2750)\n\n### Removed\n\n- Removed module the `go.opentelemetry.io/otel/sdk/export/metric`.\n  Use the `go.opentelemetry.io/otel/sdk/metric` module instead. (#2720)\n\n### Changed\n\n- Don't panic anymore when setting a global MeterProvider to itself. (#2749)\n- Upgrade `go.opentelemetry.io/proto/otlp` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` from `v0.12.1` to `v0.15.0`.\n  This replaces the use of the now deprecated `InstrumentationLibrary` and `InstrumentationLibraryMetrics` types and fields in the proto library with the equivalent `InstrumentationScope` and `ScopeMetrics`. (#2748)\n\n## [1.6.3] - 2022-04-07\n\n### Fixed\n\n- Allow non-comparable global `MeterProvider`, `TracerProvider`, and `TextMapPropagator` types to be set. (#2772, #2773)\n\n## [1.6.2] - 2022-04-06\n\n### Changed\n\n- Don't panic anymore when setting a global TracerProvider or TextMapPropagator to itself. (#2749)\n- Upgrade `go.opentelemetry.io/proto/otlp` in `go.opentelemetry.io/otel/exporters/otlp/otlptrace` from `v0.12.1` to `v0.15.0`.\n  This replaces the use of the now deprecated `InstrumentationLibrary` and `InstrumentationLibrarySpans` types and fields in the proto library with the equivalent `InstrumentationScope` and `ScopeSpans`. (#2748)\n\n## [1.6.1] - 2022-03-28\n\n### Fixed\n\n- The `go.opentelemetry.io/otel/schema/*` packages now use the correct schema URL for their `SchemaURL` constant.\n  Instead of using `\"https://opentelemetry.io/schemas/v<version>\"` they now use the correct URL without a `v` prefix, `\"https://opentelemetry.io/schemas/<version>\"`. (#2743, #2744)\n\n### Security\n\n- Upgrade `go.opentelemetry.io/proto/otlp` from `v0.12.0` to `v0.12.1`.\n  This includes an indirect upgrade of `github.com/grpc-ecosystem/grpc-gateway` which resolves [a vulnerability](https://nvd.nist.gov/vuln/detail/CVE-2019-11254) from `gopkg.in/yaml.v2` in version `v2.2.3`. (#2724, #2728)\n\n## [1.6.0/0.28.0] - 2022-03-23\n\n### ⚠️ Notice ⚠️\n\nThis update is a breaking change of the unstable Metrics API.\nCode instrumented with the `go.opentelemetry.io/otel/metric` will need to be modified.\n\n### Added\n\n- Add metrics exponential histogram support.\n  New mapping functions have been made available in `sdk/metric/aggregator/exponential/mapping` for other OpenTelemetry projects to take dependencies on. (#2502)\n- Add Go 1.18 to our compatibility tests. (#2679)\n- Allow configuring the Sampler with the `OTEL_TRACES_SAMPLER` and `OTEL_TRACES_SAMPLER_ARG` environment variables. (#2305, #2517)\n- Add the `metric/global` for obtaining and setting the global `MeterProvider`. (#2660)\n\n### Changed\n\n- The metrics API has been significantly changed to match the revised OpenTelemetry specification.\n  High-level changes include:\n\n  - Synchronous and asynchronous instruments are now handled by independent `InstrumentProvider`s.\n    These `InstrumentProvider`s are managed with a `Meter`.\n  - Synchronous and asynchronous instruments are grouped into their own packages based on value types.\n  - Asynchronous callbacks can now be registered with a `Meter`.\n\n  Be sure to check out the metric module documentation for more information on how to use the revised API. (#2587, #2660)\n\n### Fixed\n\n- Fallback to general attribute limits when span specific ones are not set in the environment. (#2675, #2677)\n\n## [1.5.0] - 2022-03-16\n\n### Added\n\n- Log the Exporters configuration in the TracerProviders message. (#2578)\n- Added support to configure the span limits with environment variables.\n  The following environment variables are supported. (#2606, #2637)\n  - `OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT`\n  - `OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT`\n  - `OTEL_SPAN_EVENT_COUNT_LIMIT`\n  - `OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT`\n  - `OTEL_SPAN_LINK_COUNT_LIMIT`\n  - `OTEL_LINK_ATTRIBUTE_COUNT_LIMIT`\n\n  If the provided environment variables are invalid (negative), the default values would be used.\n- Rename the `gc` runtime name to `go` (#2560)\n- Add resource container ID detection. (#2418)\n- Add span attribute value length limit.\n  The new `AttributeValueLengthLimit` field is added to the `\"go.opentelemetry.io/otel/sdk/trace\".SpanLimits` type to configure this limit for a `TracerProvider`.\n  The default limit for this resource is \"unlimited\". (#2637)\n- Add the `WithRawSpanLimits` option to `go.opentelemetry.io/otel/sdk/trace`.\n  This option replaces the `WithSpanLimits` option.\n  Zero or negative values will not be changed to the default value like `WithSpanLimits` does.\n  Setting a limit to zero will effectively disable the related resource it limits and setting to a negative value will mean that resource is unlimited.\n  Consequentially, limits should be constructed using `NewSpanLimits` and updated accordingly. (#2637)\n\n### Changed\n\n- Drop oldest tracestate `Member` when capacity is reached. (#2592)\n- Add event and link drop counts to the exported data from the `oltptrace` exporter. (#2601)\n- Unify path cleaning functionally in the `otlpmetric` and `otlptrace` configuration. (#2639)\n- Change the debug message from the `sdk/trace.BatchSpanProcessor` to reflect the count is cumulative. (#2640)\n- Introduce new internal `envconfig` package for OTLP exporters. (#2608)\n- If `http.Request.Host` is empty, fall back to use `URL.Host` when populating `http.host` in the `semconv` packages. (#2661)\n\n### Fixed\n\n- Remove the OTLP trace exporter limit of SpanEvents when exporting. (#2616)\n- Default to port `4318` instead of `4317` for the `otlpmetrichttp` and `otlptracehttp` client. (#2614, #2625)\n- Unlimited span limits are now supported (negative values). (#2636, #2637)\n\n### Deprecated\n\n- Deprecated `\"go.opentelemetry.io/otel/sdk/trace\".WithSpanLimits`.\n  Use `WithRawSpanLimits` instead.\n  That option allows setting unlimited and zero limits, this option does not.\n  This option will be kept until the next major version incremented release. (#2637)\n\n## [1.4.1] - 2022-02-16\n\n### Fixed\n\n- Fix race condition in reading the dropped spans number for the `BatchSpanProcessor`. (#2615)\n\n## [1.4.0] - 2022-02-11\n\n### Added\n\n- Use `OTEL_EXPORTER_ZIPKIN_ENDPOINT` environment variable to specify zipkin collector endpoint. (#2490)\n- Log the configuration of `TracerProvider`s, and `Tracer`s for debugging.\n  To enable use a logger with Verbosity (V level) `>=1`. (#2500)\n- Added support to configure the batch span-processor with environment variables.\n  The following environment variables are used. (#2515)\n  - `OTEL_BSP_SCHEDULE_DELAY`\n  - `OTEL_BSP_EXPORT_TIMEOUT`\n  - `OTEL_BSP_MAX_QUEUE_SIZE`.\n  - `OTEL_BSP_MAX_EXPORT_BATCH_SIZE`\n\n### Changed\n\n- Zipkin exporter exports `Resource` attributes in the `Tags` field. (#2589)\n\n### Deprecated\n\n- Deprecate module the `go.opentelemetry.io/otel/sdk/export/metric`.\n  Use the `go.opentelemetry.io/otel/sdk/metric` module instead. (#2382)\n- Deprecate `\"go.opentelemetry.io/otel/sdk/metric\".AtomicFieldOffsets`. (#2445)\n\n### Fixed\n\n- Fixed the instrument kind for noop async instruments to correctly report an implementation. (#2461)\n- Fix UDP packets overflowing with Jaeger payloads. (#2489, #2512)\n- Change the `otlpmetric.Client` interface's `UploadMetrics` method to accept a single `ResourceMetrics` instead of a slice of them. (#2491)\n- Specify explicit buckets in Prometheus example, fixing issue where example only has `+inf` bucket. (#2419, #2493)\n- W3C baggage will now decode urlescaped values. (#2529)\n- Baggage members are now only validated once, when calling `NewMember` and not also when adding it to the baggage itself. (#2522)\n- The order attributes are dropped from spans in the `go.opentelemetry.io/otel/sdk/trace` package when capacity is reached is fixed to be in compliance with the OpenTelemetry specification.\n  Instead of dropping the least-recently-used attribute, the last added attribute is dropped.\n  This drop order still only applies to attributes with unique keys not already contained in the span.\n  If an attribute is added with a key already contained in the span, that attribute is updated to the new value being added. (#2576)\n\n### Removed\n\n- Updated `go.opentelemetry.io/proto/otlp` from `v0.11.0` to `v0.12.0`. This version removes a number of deprecated methods. (#2546)\n  - [`Metric.GetIntGauge()`](https://pkg.go.dev/go.opentelemetry.io/proto/otlp@v0.11.0/metrics/v1#Metric.GetIntGauge)\n  - [`Metric.GetIntHistogram()`](https://pkg.go.dev/go.opentelemetry.io/proto/otlp@v0.11.0/metrics/v1#Metric.GetIntHistogram)\n  - [`Metric.GetIntSum()`](https://pkg.go.dev/go.opentelemetry.io/proto/otlp@v0.11.0/metrics/v1#Metric.GetIntSum)\n\n## [1.3.0] - 2021-12-10\n\n### ⚠️ Notice ⚠️\n\nWe have updated the project minimum supported Go version to 1.16\n\n### Added\n\n- Added an internal Logger.\n  This can be used by the SDK and API to provide users with feedback of the internal state.\n  To enable verbose logs configure the logger which will print V(1) logs. For debugging information configure to print V(5) logs. (#2343)\n- Add the `WithRetry` `Option` and the `RetryConfig` type to the `go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp` package to specify retry behavior consistently. (#2425)\n- Add `SpanStatusFromHTTPStatusCodeAndSpanKind` to all `semconv` packages to return a span status code similar to `SpanStatusFromHTTPStatusCode`, but exclude `4XX` HTTP errors as span errors if the span is of server kind. (#2296)\n\n### Changed\n\n- The `\"go.opentelemetry.io/otel/exporter/otel/otlptrace/otlptracegrpc\".Client` now uses the underlying gRPC `ClientConn` to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#2329)\n- The `\"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc\".Client` now uses the underlying gRPC `ClientConn` to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#2425)\n- The `\"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc\".RetrySettings` type is renamed to `RetryConfig`. (#2425)\n- The `go.opentelemetry.io/otel/exporter/otel/*` gRPC exporters now default to using the host's root CA set if none are provided by the user and `WithInsecure` is not specified. (#2432)\n- Change `resource.Default` to be evaluated the first time it is called, rather than on import. This allows the caller the option to update `OTEL_RESOURCE_ATTRIBUTES` first, such as with `os.Setenv`. (#2371)\n\n### Fixed\n\n- The `go.opentelemetry.io/otel/exporter/otel/*` exporters are updated to handle per-signal and universal endpoints according to the OpenTelemetry specification.\n  Any per-signal endpoint set via an `OTEL_EXPORTER_OTLP_<signal>_ENDPOINT` environment variable is now used without modification of the path.\n  When `OTEL_EXPORTER_OTLP_ENDPOINT` is set, if it contains a path, that path is used as a base path which per-signal paths are appended to. (#2433)\n- Basic metric controller updated to use sync.Map to avoid blocking calls (#2381)\n- The `go.opentelemetry.io/otel/exporter/jaeger` correctly sets the `otel.status_code` value to be a string of `ERROR` or `OK` instead of an integer code. (#2439, #2440)\n\n### Deprecated\n\n- Deprecated the `\"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp\".WithMaxAttempts` `Option`, use the new `WithRetry` `Option` instead. (#2425)\n- Deprecated the `\"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp\".WithBackoff` `Option`, use the new `WithRetry` `Option` instead. (#2425)\n\n### Removed\n\n- Remove the metric Processor's ability to convert cumulative to delta aggregation temporality. (#2350)\n- Remove the metric Bound Instruments interface and implementations. (#2399)\n- Remove the metric MinMaxSumCount kind aggregation and the corresponding OTLP export path. (#2423)\n- Metric SDK removes the \"exact\" aggregator for histogram instruments, as it performed a non-standard aggregation for OTLP export (creating repeated Gauge points) and worked its way into a number of confusing examples. (#2348)\n\n## [1.2.0] - 2021-11-12\n\n### Changed\n\n- Metric SDK `export.ExportKind`, `export.ExportKindSelector` types have been renamed to `aggregation.Temporality` and `aggregation.TemporalitySelector` respectively to keep in line with current specification and protocol along with built-in selectors (e.g., `aggregation.CumulativeTemporalitySelector`, ...). (#2274)\n- The Metric `Exporter` interface now requires a `TemporalitySelector` method instead of an `ExportKindSelector`. (#2274)\n- Metrics API cleanup. The `metric/sdkapi` package has been created to relocate the API-to-SDK interface:\n  - The following interface types simply moved from `metric` to `metric/sdkapi`: `Descriptor`, `MeterImpl`, `InstrumentImpl`, `SyncImpl`, `BoundSyncImpl`, `AsyncImpl`, `AsyncRunner`, `AsyncSingleRunner`, and `AsyncBatchRunner`\n  - The following struct types moved and are replaced with type aliases, since they are exposed to the user: `Observation`, `Measurement`.\n  - The No-op implementations of sync and async instruments are no longer exported, new functions `sdkapi.NewNoopAsyncInstrument()` and `sdkapi.NewNoopSyncInstrument()` are provided instead. (#2271)\n- Update the SDK `BatchSpanProcessor` to export all queued spans when `ForceFlush` is called. (#2080, #2335)\n\n### Added\n\n- Add the `\"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc\".WithGRPCConn` option so the exporter can reuse an existing gRPC connection. (#2002)\n- Added a new `schema` module to help parse Schema Files in OTEP 0152 format. (#2267)\n- Added a new `MapCarrier` to the `go.opentelemetry.io/otel/propagation` package to hold propagated cross-cutting concerns as a `map[string]string` held in memory. (#2334)\n\n## [1.1.0] - 2021-10-27\n\n### Added\n\n- Add the `\"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\".WithGRPCConn` option so the exporter can reuse an existing gRPC connection. (#2002)\n- Add the `go.opentelemetry.io/otel/semconv/v1.7.0` package.\n  The package contains semantic conventions from the `v1.7.0` version of the OpenTelemetry specification. (#2320)\n- Add the `go.opentelemetry.io/otel/semconv/v1.6.1` package.\n  The package contains semantic conventions from the `v1.6.1` version of the OpenTelemetry specification. (#2321)\n- Add the `go.opentelemetry.io/otel/semconv/v1.5.0` package.\n  The package contains semantic conventions from the `v1.5.0` version of the OpenTelemetry specification. (#2322)\n  - When upgrading from the `semconv/v1.4.0` package note the following name changes:\n    - `K8SReplicasetUIDKey` -> `K8SReplicaSetUIDKey`\n    - `K8SReplicasetNameKey` -> `K8SReplicaSetNameKey`\n    - `K8SStatefulsetUIDKey` -> `K8SStatefulSetUIDKey`\n    - `k8SStatefulsetNameKey` -> `K8SStatefulSetNameKey`\n    - `K8SDaemonsetUIDKey` -> `K8SDaemonSetUIDKey`\n    - `K8SDaemonsetNameKey` -> `K8SDaemonSetNameKey`\n\n### Changed\n\n- Links added to a span will be dropped by the SDK if they contain an invalid span context (#2275).\n\n### Fixed\n\n- The `\"go.opentelemetry.io/otel/semconv/v1.4.0\".HTTPServerAttributesFromHTTPRequest` now correctly only sets the HTTP client IP attribute even if the connection was routed with proxies and there are multiple addresses in the `X-Forwarded-For` header. (#2282, #2284)\n- The `\"go.opentelemetry.io/otel/semconv/v1.4.0\".NetAttributesFromHTTPRequest` function correctly handles IPv6 addresses as IP addresses and sets the correct net peer IP instead of the net peer hostname attribute. (#2283, #2285)\n- The simple span processor shutdown method deterministically returns the exporter error status if it simultaneously finishes when the deadline is reached. (#2290, #2289)\n\n## [1.0.1] - 2021-10-01\n\n### Fixed\n\n- json stdout exporter no longer crashes due to concurrency bug. (#2265)\n\n## [Metrics 0.24.0] - 2021-10-01\n\n### Changed\n\n- NoopMeterProvider is now private and NewNoopMeterProvider must be used to obtain a noopMeterProvider. (#2237)\n- The Metric SDK `Export()` function takes a new two-level reader interface for iterating over results one instrumentation library at a time. (#2197)\n  - The former `\"go.opentelemetry.io/otel/sdk/export/metric\".CheckpointSet` is renamed `Reader`.\n  - The new interface is named `\"go.opentelemetry.io/otel/sdk/export/metric\".InstrumentationLibraryReader`.\n\n## [1.0.0] - 2021-09-20\n\nThis is the first stable release for the project.\nThis release includes an API and SDK for the tracing signal that will comply with the stability guarantees defined by the projects [versioning policy](./VERSIONING.md).\n\n### Added\n\n- OTLP trace exporter now sets the `SchemaURL` field in the exported telemetry if the Tracer has `WithSchemaURL` option. (#2242)\n\n### Fixed\n\n- Slice-valued attributes can correctly be used as map keys. (#2223)\n\n### Removed\n\n- Removed the `\"go.opentelemetry.io/otel/exporters/zipkin\".WithSDKOptions` function. (#2248)\n- Removed the deprecated package `go.opentelemetry.io/otel/oteltest`. (#2234)\n- Removed the deprecated package `go.opentelemetry.io/otel/bridge/opencensus/utils`. (#2233)\n- Removed deprecated functions, types, and methods from `go.opentelemetry.io/otel/attribute` package.\n  Use the typed functions and methods added to the package instead. (#2235)\n  - The `Key.Array` method is removed.\n  - The `Array` function is removed.\n  - The `Any` function is removed.\n  - The `ArrayValue` function is removed.\n  - The `AsArray` function is removed.\n\n## [1.0.0-RC3] - 2021-09-02\n\n### Added\n\n- Added `ErrorHandlerFunc` to use a function as an `\"go.opentelemetry.io/otel\".ErrorHandler`. (#2149)\n- Added `\"go.opentelemetry.io/otel/trace\".WithStackTrace` option to add a stack trace when using `span.RecordError` or when panic is handled in `span.End`. (#2163)\n- Added typed slice attribute types and functionality to the `go.opentelemetry.io/otel/attribute` package to replace the existing array type and functions. (#2162)\n  - `BoolSlice`, `IntSlice`, `Int64Slice`, `Float64Slice`, and `StringSlice` replace the use of the `Array` function in the package.\n- Added the `go.opentelemetry.io/otel/example/fib` example package.\n  Included is an example application that computes Fibonacci numbers. (#2203)\n\n### Changed\n\n- Metric instruments have been renamed to match the (feature-frozen) metric API specification:\n  - ValueRecorder becomes Histogram\n  - ValueObserver becomes Gauge\n  - SumObserver becomes CounterObserver\n  - UpDownSumObserver becomes UpDownCounterObserver\n  The API exported from this project is still considered experimental. (#2202)\n- Metric SDK/API implementation type `InstrumentKind` moves into `sdkapi` sub-package. (#2091)\n- The Metrics SDK export record no longer contains a Resource pointer, the SDK `\"go.opentelemetry.io/otel/sdk/trace/export/metric\".Exporter.Export()` function for push-based exporters now takes a single Resource argument, pull-based exporters use `\"go.opentelemetry.io/otel/sdk/metric/controller/basic\".Controller.Resource()`. (#2120)\n- The JSON output of the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` is harmonized now such that the output is \"plain\" JSON objects after each other of the form `{ ... } { ... } { ... }`. Earlier the JSON objects describing a span were wrapped in a slice for each `Exporter.ExportSpans` call, like `[ { ... } ][ { ... } { ... } ]`. Outputting JSON object directly after each other is consistent with JSON loggers, and a bit easier to parse and read. (#2196)\n- Update the `NewTracerConfig`, `NewSpanStartConfig`, `NewSpanEndConfig`, and `NewEventConfig` function in the `go.opentelemetry.io/otel/trace` package to return their respective configurations as structs instead of pointers to the struct. (#2212)\n\n### Deprecated\n\n- The `go.opentelemetry.io/otel/bridge/opencensus/utils` package is deprecated.\n  All functionality from this package now exists in the `go.opentelemetry.io/otel/bridge/opencensus` package.\n  The functions from that package should be used instead. (#2166)\n- The `\"go.opentelemetry.io/otel/attribute\".Array` function and the related `ARRAY` value type is deprecated.\n  Use the typed `*Slice` functions and types added to the package instead. (#2162)\n- The `\"go.opentelemetry.io/otel/attribute\".Any` function is deprecated.\n  Use the typed functions instead. (#2181)\n- The `go.opentelemetry.io/otel/oteltest` package is deprecated.\n  The `\"go.opentelemetry.io/otel/sdk/trace/tracetest\".SpanRecorder` can be registered with the default SDK (`go.opentelemetry.io/otel/sdk/trace`) as a `SpanProcessor` and used as a replacement for this deprecated package. (#2188)\n\n### Removed\n\n- Removed metrics test package `go.opentelemetry.io/otel/sdk/export/metric/metrictest`. (#2105)\n\n### Fixed\n\n- The `fromEnv` detector no longer throws an error when `OTEL_RESOURCE_ATTRIBUTES` environment variable is not set or empty. (#2138)\n- Setting the global `ErrorHandler` with `\"go.opentelemetry.io/otel\".SetErrorHandler` multiple times is now supported. (#2160, #2140)\n- The `\"go.opentelemetry.io/otel/attribute\".Any` function now supports `int32` values. (#2169)\n- Multiple calls to `\"go.opentelemetry.io/otel/sdk/metric/controller/basic\".WithResource()` are handled correctly, and when no resources are provided `\"go.opentelemetry.io/otel/sdk/resource\".Default()` is used. (#2120)\n- The `WithoutTimestamps` option for the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` exporter causes the exporter to correctly omit timestamps. (#2195)\n- Fixed typos in resources.go. (#2201)\n\n## [1.0.0-RC2] - 2021-07-26\n\n### Added\n\n- Added `WithOSDescription` resource configuration option to set OS (Operating System) description resource attribute (`os.description`). (#1840)\n- Added `WithOS` resource configuration option to set all OS (Operating System) resource attributes at once. (#1840)\n- Added the `WithRetry` option to the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` package.\n  This option is a replacement for the removed `WithMaxAttempts` and `WithBackoff` options. (#2095)\n- Added API `LinkFromContext` to return Link which encapsulates SpanContext from provided context and also encapsulates attributes. (#2115)\n- Added a new `Link` type under the SDK `otel/sdk/trace` package that counts the number of attributes that were dropped for surpassing the `AttributePerLinkCountLimit` configured in the Span's `SpanLimits`.\n  This new type replaces the equal-named API `Link` type found in the `otel/trace` package for most usages within the SDK.\n  For example, instances of this type are now returned by the `Links()` function of `ReadOnlySpan`s provided in places like the `OnEnd` function of `SpanProcessor` implementations. (#2118)\n- Added the `SpanRecorder` type to the `go.opentelemetry.io/otel/skd/trace/tracetest` package.\n  This type can be used with the default SDK as a `SpanProcessor` during testing. (#2132)\n\n### Changed\n\n- The `SpanModels` function is now exported from the `go.opentelemetry.io/otel/exporters/zipkin` package to convert OpenTelemetry spans into Zipkin model spans. (#2027)\n- Rename the `\"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\".RetrySettings` to `RetryConfig`. (#2095)\n\n### Deprecated\n\n- The `TextMapCarrier` and `TextMapPropagator` from the `go.opentelemetry.io/otel/oteltest` package and their associated creation functions (`TextMapCarrier`, `NewTextMapPropagator`) are deprecated. (#2114)\n- The `Harness` type from the `go.opentelemetry.io/otel/oteltest` package and its associated creation function, `NewHarness` are deprecated and will be removed in the next release. (#2123)\n- The `TraceStateFromKeyValues` function from the `go.opentelemetry.io/otel/oteltest` package is deprecated.\n  Use the `trace.ParseTraceState` function instead. (#2122)\n\n### Removed\n\n- Removed the deprecated package `go.opentelemetry.io/otel/exporters/trace/jaeger`. (#2020)\n- Removed the deprecated package `go.opentelemetry.io/otel/exporters/trace/zipkin`. (#2020)\n- Removed the `\"go.opentelemetry.io/otel/sdk/resource\".WithBuiltinDetectors` function.\n  The explicit `With*` options for every built-in detector should be used instead. (#2026 #2097)\n- Removed the `WithMaxAttempts` and `WithBackoff` options from the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` package.\n  The retry logic of the package has been updated to match the `otlptracegrpc` package and accordingly a `WithRetry` option is added that should be used instead. (#2095)\n- Removed `DroppedAttributeCount` field from `otel/trace.Link` struct. (#2118)\n\n### Fixed\n\n- When using WithNewRoot, don't use the parent context for making sampling decisions. (#2032)\n- `oteltest.Tracer` now creates a valid `SpanContext` when using `WithNewRoot`. (#2073)\n- OS type detector now sets the correct `dragonflybsd` value for DragonFly BSD. (#2092)\n- The OTel span status is correctly transformed into the OTLP status in the `go.opentelemetry.io/otel/exporters/otlp/otlptrace` package.\n  This fix will by default set the status to `Unset` if it is not explicitly set to `Ok` or `Error`. (#2099 #2102)\n- The `Inject` method for the `\"go.opentelemetry.io/otel/propagation\".TraceContext` type no longer injects empty `tracestate` values. (#2108)\n- Use `6831` as default Jaeger agent port instead of `6832`. (#2131)\n\n## [Experimental Metrics v0.22.0] - 2021-07-19\n\n### Added\n\n- Adds HTTP support for OTLP metrics exporter. (#2022)\n\n### Removed\n\n- Removed the deprecated package `go.opentelemetry.io/otel/exporters/metric/prometheus`. (#2020)\n\n## [1.0.0-RC1] / 0.21.0 - 2021-06-18\n\nWith this release we are introducing a split in module versions.  The tracing API and SDK are entering the `v1.0.0` Release Candidate phase with `v1.0.0-RC1`\nwhile the experimental metrics API and SDK continue with `v0.x` releases at `v0.21.0`.  Modules at major version 1 or greater will not depend on modules\nwith major version 0.\n\n### Added\n\n- Adds `otlpgrpc.WithRetry`option for configuring the retry policy for transient errors on the otlp/gRPC exporter. (#1832)\n  - The following status codes are defined as transient errors:\n      | gRPC Status Code | Description |\n      | ---------------- | ----------- |\n      | 1  | Cancelled |\n      | 4  | Deadline Exceeded |\n      | 8  | Resource Exhausted |\n      | 10 | Aborted |\n      | 10 | Out of Range |\n      | 14 | Unavailable |\n      | 15 | Data Loss |\n- Added `Status` type to the `go.opentelemetry.io/otel/sdk/trace` package to represent the status of a span. (#1874)\n- Added `SpanStub` type and its associated functions to the `go.opentelemetry.io/otel/sdk/trace/tracetest` package.\n  This type can be used as a testing replacement for the `SpanSnapshot` that was removed from the `go.opentelemetry.io/otel/sdk/trace` package. (#1873)\n- Adds support for scheme in `OTEL_EXPORTER_OTLP_ENDPOINT` according to the spec. (#1886)\n- Adds `trace.WithSchemaURL` option for configuring the tracer with a Schema URL. (#1889)\n- Added an example of using OpenTelemetry Go as a trace context forwarder. (#1912)\n- `ParseTraceState` is added to the `go.opentelemetry.io/otel/trace` package.\n  It can be used to decode a `TraceState` from a `tracestate` header string value. (#1937)\n- Added `Len` method to the `TraceState` type in the `go.opentelemetry.io/otel/trace` package.\n  This method returns the number of list-members the `TraceState` holds. (#1937)\n- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlptrace` that defines a trace exporter that uses a `otlptrace.Client` to send data.\n  Creates package `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` implementing a gRPC `otlptrace.Client` and offers convenience functions, `NewExportPipeline` and `InstallNewPipeline`, to setup and install a `otlptrace.Exporter` in tracing .(#1922)\n- Added `Baggage`, `Member`, and `Property` types to the `go.opentelemetry.io/otel/baggage` package along with their related functions. (#1967)\n- Added `ContextWithBaggage`, `ContextWithoutBaggage`, and `FromContext` functions to the `go.opentelemetry.io/otel/baggage` package.\n  These functions replace the `Set`, `Value`, `ContextWithValue`, `ContextWithoutValue`, and `ContextWithEmpty` functions from that package and directly work with the new `Baggage` type. (#1967)\n- The `OTEL_SERVICE_NAME` environment variable is the preferred source for `service.name`, used by the environment resource detector if a service name is present both there and in `OTEL_RESOURCE_ATTRIBUTES`. (#1969)\n- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` implementing an HTTP `otlptrace.Client` and offers convenience functions, `NewExportPipeline` and `InstallNewPipeline`, to setup and install a `otlptrace.Exporter` in tracing. (#1963)\n- Changes `go.opentelemetry.io/otel/sdk/resource.NewWithAttributes` to require a schema URL. The old function is still available as `resource.NewSchemaless`. This is a breaking change. (#1938)\n- Several builtin resource detectors now correctly populate the schema URL. (#1938)\n- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` that defines a metrics exporter that uses a `otlpmetric.Client` to send data.\n- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` implementing a gRPC `otlpmetric.Client` and offers convenience functions, `New` and `NewUnstarted`, to create an `otlpmetric.Exporter`.(#1991)\n- Added `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` exporter. (#2005)\n- Added `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` exporter. (#2005)\n- Added a `TracerProvider()` method to the `\"go.opentelemetry.io/otel/trace\".Span` interface. This can be used to obtain a `TracerProvider` from a given span that utilizes the same trace processing pipeline.  (#2009)\n\n### Changed\n\n- Make `NewSplitDriver` from `go.opentelemetry.io/otel/exporters/otlp` take variadic arguments instead of a `SplitConfig` item.\n  `NewSplitDriver` now automatically implements an internal `noopDriver` for `SplitConfig` fields that are not initialized. (#1798)\n- `resource.New()` now creates a Resource without builtin detectors. Previous behavior is now achieved by using `WithBuiltinDetectors` Option. (#1810)\n- Move the `Event` type from the `go.opentelemetry.io/otel` package to the `go.opentelemetry.io/otel/sdk/trace` package. (#1846)\n- CI builds validate against last two versions of Go, dropping 1.14 and adding 1.16. (#1865)\n- BatchSpanProcessor now report export failures when calling `ForceFlush()` method. (#1860)\n- `Set.Encoded(Encoder)` no longer caches the result of an encoding. (#1855)\n- Renamed `CloudZoneKey` to `CloudAvailabilityZoneKey` in Resource semantic conventions according to spec. (#1871)\n- The `StatusCode` and `StatusMessage` methods of the `ReadOnlySpan` interface and the `Span` produced by the `go.opentelemetry.io/otel/sdk/trace` package have been replaced with a single `Status` method.\n  This method returns the status of a span using the new `Status` type. (#1874)\n- Updated `ExportSpans` method of the`SpanExporter` interface type to accept `ReadOnlySpan`s instead of the removed `SpanSnapshot`.\n  This brings the export interface into compliance with the specification in that it now accepts an explicitly immutable type instead of just an implied one. (#1873)\n- Unembed `SpanContext` in `Link`. (#1877)\n- Generate Semantic conventions from the specification YAML. (#1891)\n- Spans created by the global `Tracer` obtained from `go.opentelemetry.io/otel`, prior to a functioning `TracerProvider` being set, now propagate the span context from their parent if one exists. (#1901)\n- The `\"go.opentelemetry.io/otel\".Tracer` function now accepts tracer options. (#1902)\n- Move the `go.opentelemetry.io/otel/unit` package to `go.opentelemetry.io/otel/metric/unit`. (#1903)\n- Changed `go.opentelemetry.io/otel/trace.TracerConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config.) (#1921)\n- Changed `go.opentelemetry.io/otel/trace.SpanConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config). (#1921)\n- Changed `span.End()` now only accepts Options that are allowed at `End()`. (#1921)\n- Changed `go.opentelemetry.io/otel/metric.InstrumentConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config). (#1921)\n- Changed `go.opentelemetry.io/otel/metric.MeterConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config). (#1921)\n- Refactored option types according to the contribution style guide. (#1882)\n- Move the `go.opentelemetry.io/otel/trace.TraceStateFromKeyValues` function to the `go.opentelemetry.io/otel/oteltest` package.\n  This function is preserved for testing purposes where it may be useful to create a `TraceState` from `attribute.KeyValue`s, but it is not intended for production use.\n  The new `ParseTraceState` function should be used to create a `TraceState`. (#1931)\n- Updated `MarshalJSON` method of the `go.opentelemetry.io/otel/trace.TraceState` type to marshal the type into the string representation of the `TraceState`. (#1931)\n- The `TraceState.Delete` method from the `go.opentelemetry.io/otel/trace` package no longer returns an error in addition to a `TraceState`. (#1931)\n- Updated `Get` method of the `TraceState` type from the `go.opentelemetry.io/otel/trace` package to accept a `string` instead of an `attribute.Key` type. (#1931)\n- Updated `Insert` method of the `TraceState` type from the `go.opentelemetry.io/otel/trace` package to accept a pair of `string`s instead of an `attribute.KeyValue` type. (#1931)\n- Updated `Delete` method of the `TraceState` type from the `go.opentelemetry.io/otel/trace` package to accept a `string` instead of an `attribute.Key` type. (#1931)\n- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/stdout` package. (#1985)\n- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/metric/prometheus` package. (#1985)\n- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/trace/jaeger` package. (#1985)\n- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/trace/zipkin` package. (#1985)\n- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/otlp` package. (#1985)\n- Renamed `NewUnstartedExporter` to `NewUnstarted` in the `go.opentelemetry.io/otel/exporters/otlp` package. (#1985)\n- The `go.opentelemetry.io/otel/semconv` package has been moved to `go.opentelemetry.io/otel/semconv/v1.4.0` to allow for multiple [telemetry schema](https://github.com/open-telemetry/oteps/blob/main/text/0152-telemetry-schemas.md) versions to be used concurrently. (#1987)\n- Metrics test helpers in `go.opentelemetry.io/otel/oteltest` have been moved to `go.opentelemetry.io/otel/metric/metrictest`. (#1988)\n\n### Deprecated\n\n- The `go.opentelemetry.io/otel/exporters/metric/prometheus` is deprecated, use `go.opentelemetry.io/otel/exporters/prometheus` instead. (#1993)\n- The `go.opentelemetry.io/otel/exporters/trace/jaeger` is deprecated, use `go.opentelemetry.io/otel/exporters/jaeger` instead. (#1993)\n- The `go.opentelemetry.io/otel/exporters/trace/zipkin` is deprecated, use `go.opentelemetry.io/otel/exporters/zipkin` instead. (#1993)\n\n### Removed\n\n- Removed `resource.WithoutBuiltin()`. Use `resource.New()`. (#1810)\n- Unexported types `resource.FromEnv`, `resource.Host`, and `resource.TelemetrySDK`, Use the corresponding `With*()` to use individually. (#1810)\n- Removed the `Tracer` and `IsRecording` method from the `ReadOnlySpan` in the `go.opentelemetry.io/otel/sdk/trace`.\n  The `Tracer` method is not a required to be included in this interface and given the mutable nature of the tracer that is associated with a span, this method is not appropriate.\n  The `IsRecording` method returns if the span is recording or not.\n  A read-only span value does not need to know if updates to it will be recorded or not.\n  By definition, it cannot be updated so there is no point in communicating if an update is recorded. (#1873)\n- Removed the `SpanSnapshot` type from the `go.opentelemetry.io/otel/sdk/trace` package.\n  The use of this type has been replaced with the use of the explicitly immutable `ReadOnlySpan` type.\n  When a concrete representation of a read-only span is needed for testing, the newly added `SpanStub` in the `go.opentelemetry.io/otel/sdk/trace/tracetest` package should be used. (#1873)\n- Removed the `Tracer` method from the `Span` interface in the `go.opentelemetry.io/otel/trace` package.\n  Using the same tracer that created a span introduces the error where an instrumentation library's `Tracer` is used by other code instead of their own.\n  The `\"go.opentelemetry.io/otel\".Tracer` function or a `TracerProvider` should be used to acquire a library specific `Tracer` instead. (#1900)\n  - The `TracerProvider()` method on the `Span` interface may also be used to obtain a `TracerProvider` using the same trace processing pipeline. (#2009)\n- The `http.url` attribute generated by `HTTPClientAttributesFromHTTPRequest` will no longer include username or password information. (#1919)\n- Removed `IsEmpty` method of the `TraceState` type in the `go.opentelemetry.io/otel/trace` package in favor of using the added `TraceState.Len` method. (#1931)\n- Removed `Set`, `Value`, `ContextWithValue`, `ContextWithoutValue`, and `ContextWithEmpty` functions in the `go.opentelemetry.io/otel/baggage` package.\n  Handling of baggage is now done using the added `Baggage` type and related context functions (`ContextWithBaggage`, `ContextWithoutBaggage`, and `FromContext`) in that package. (#1967)\n- The `InstallNewPipeline` and `NewExportPipeline` creation functions in all the exporters (prometheus, otlp, stdout, jaeger, and zipkin) have been removed.\n  These functions were deemed premature attempts to provide convenience that did not achieve this aim. (#1985)\n- The `go.opentelemetry.io/otel/exporters/otlp` exporter has been removed.  Use `go.opentelemetry.io/otel/exporters/otlp/otlptrace` instead. (#1990)\n- The `go.opentelemetry.io/otel/exporters/stdout` exporter has been removed.  Use `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` or `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` instead. (#2005)\n\n### Fixed\n\n- Only report errors from the `\"go.opentelemetry.io/otel/sdk/resource\".Environment` function when they are not `nil`. (#1850, #1851)\n- The `Shutdown` method of the simple `SpanProcessor` in the `go.opentelemetry.io/otel/sdk/trace` package now honors the context deadline or cancellation. (#1616, #1856)\n- BatchSpanProcessor now drops span batches that failed to be exported. (#1860)\n- Use `http://localhost:14268/api/traces` as default Jaeger collector endpoint instead of `http://localhost:14250`. (#1898)\n- Allow trailing and leading whitespace in the parsing of a `tracestate` header. (#1931)\n- Add logic to determine if the channel is closed to fix Jaeger exporter test panic with close closed channel. (#1870, #1973)\n- Avoid transport security when OTLP endpoint is a Unix socket. (#2001)\n\n### Security\n\n## [0.20.0] - 2021-04-23\n\n### Added\n\n- The OTLP exporter now has two new convenience functions, `NewExportPipeline` and `InstallNewPipeline`, setup and install the exporter in tracing and metrics pipelines. (#1373)\n- Adds semantic conventions for exceptions. (#1492)\n- Added Jaeger Environment variables: `OTEL_EXPORTER_JAEGER_AGENT_HOST`, `OTEL_EXPORTER_JAEGER_AGENT_PORT`\n  These environment variables can be used to override Jaeger agent hostname and port (#1752)\n- Option `ExportTimeout` was added to batch span processor. (#1755)\n- `trace.TraceFlags` is now a defined type over `byte` and `WithSampled(bool) TraceFlags` and `IsSampled() bool` methods have been added to it. (#1770)\n- The `Event` and `Link` struct types from the `go.opentelemetry.io/otel` package now include a `DroppedAttributeCount` field to record the number of attributes that were not recorded due to configured limits being reached. (#1771)\n- The Jaeger exporter now reports dropped attributes for a Span event in the exported log. (#1771)\n- Adds test to check BatchSpanProcessor ignores `OnEnd` and `ForceFlush` post `Shutdown`. (#1772)\n- Extract resource attributes from the `OTEL_RESOURCE_ATTRIBUTES` environment variable and merge them with the `resource.Default` resource as well as resources provided to the `TracerProvider` and metric `Controller`. (#1785)\n- Added `WithOSType` resource configuration option to set OS (Operating System) type resource attribute (`os.type`). (#1788)\n- Added `WithProcess*` resource configuration options to set Process resource attributes. (#1788)\n  - `process.pid`\n  - `process.executable.name`\n  - `process.executable.path`\n  - `process.command_args`\n  - `process.owner`\n  - `process.runtime.name`\n  - `process.runtime.version`\n  - `process.runtime.description`\n- Adds `k8s.node.name` and `k8s.node.uid` attribute keys to the `semconv` package. (#1789)\n- Added support for configuring OTLP/HTTP and OTLP/gRPC Endpoints, TLS Certificates, Headers, Compression and Timeout via Environment Variables. (#1758, #1769 and #1811)\n  - `OTEL_EXPORTER_OTLP_ENDPOINT`\n  - `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`\n  - `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`\n  - `OTEL_EXPORTER_OTLP_HEADERS`\n  - `OTEL_EXPORTER_OTLP_TRACES_HEADERS`\n  - `OTEL_EXPORTER_OTLP_METRICS_HEADERS`\n  - `OTEL_EXPORTER_OTLP_COMPRESSION`\n  - `OTEL_EXPORTER_OTLP_TRACES_COMPRESSION`\n  - `OTEL_EXPORTER_OTLP_METRICS_COMPRESSION`\n  - `OTEL_EXPORTER_OTLP_TIMEOUT`\n  - `OTEL_EXPORTER_OTLP_TRACES_TIMEOUT`\n  - `OTEL_EXPORTER_OTLP_METRICS_TIMEOUT`\n  - `OTEL_EXPORTER_OTLP_CERTIFICATE`\n  - `OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE`\n  - `OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE`\n- Adds `otlpgrpc.WithTimeout` option for configuring timeout to the otlp/gRPC exporter. (#1821)\n- Adds `jaeger.WithMaxPacketSize` option for configuring maximum UDP packet size used when connecting to the Jaeger agent. (#1853)\n\n### Fixed\n\n- The `Span.IsRecording` implementation from `go.opentelemetry.io/otel/sdk/trace` always returns false when not being sampled. (#1750)\n- The Jaeger exporter now correctly sets tags for the Span status code and message.\n  This means it uses the correct tag keys (`\"otel.status_code\"`, `\"otel.status_description\"`) and does not set the status message as a tag unless it is set on the span. (#1761)\n- The Jaeger exporter now correctly records Span event's names using the `\"event\"` key for a tag.\n  Additionally, this tag is overridden, as specified in the OTel specification, if the event contains an attribute with that key. (#1768)\n- Zipkin Exporter: Ensure mapping between OTel and Zipkin span data complies with the specification. (#1688)\n- Fixed typo for default service name in Jaeger Exporter. (#1797)\n- Fix flaky OTLP for the reconnnection of the client connection. (#1527, #1814)\n- Fix Jaeger exporter dropping of span batches that exceed the UDP packet size limit.\n  Instead, the exporter now splits the batch into smaller sendable batches. (#1828)\n\n### Changed\n\n- Span `RecordError` now records an `exception` event to comply with the semantic convention specification. (#1492)\n- Jaeger exporter was updated to use thrift v0.14.1. (#1712)\n- Migrate from using internally built and maintained version of the OTLP to the one hosted at `go.opentelemetry.io/proto/otlp`. (#1713)\n- Migrate from using `github.com/gogo/protobuf` to `google.golang.org/protobuf` to match `go.opentelemetry.io/proto/otlp`. (#1713)\n- The storage of a local or remote Span in a `context.Context` using its SpanContext is unified to store just the current Span.\n  The Span's SpanContext can now self-identify as being remote or not.\n  This means that `\"go.opentelemetry.io/otel/trace\".ContextWithRemoteSpanContext` will now overwrite any existing current Span, not just existing remote Spans, and make it the current Span in a `context.Context`. (#1731)\n- Improve OTLP/gRPC exporter connection errors. (#1737)\n- Information about a parent span context in a `\"go.opentelemetry.io/otel/export/trace\".SpanSnapshot` is unified in a new `Parent` field.\n  The existing `ParentSpanID` and `HasRemoteParent` fields are removed in favor of this. (#1748)\n- The `ParentContext` field of the `\"go.opentelemetry.io/otel/sdk/trace\".SamplingParameters` is updated to hold a `context.Context` containing the parent span.\n  This changes it to make `SamplingParameters` conform with the OpenTelemetry specification. (#1749)\n- Updated Jaeger Environment Variables: `JAEGER_ENDPOINT`, `JAEGER_USER`, `JAEGER_PASSWORD`\n  to `OTEL_EXPORTER_JAEGER_ENDPOINT`, `OTEL_EXPORTER_JAEGER_USER`, `OTEL_EXPORTER_JAEGER_PASSWORD` in compliance with OTel specification. (#1752)\n- Modify `BatchSpanProcessor.ForceFlush` to abort after timeout/cancellation. (#1757)\n- The `DroppedAttributeCount` field of the `Span` in the `go.opentelemetry.io/otel` package now only represents the number of attributes dropped for the span itself.\n  It no longer is a conglomerate of itself, events, and link attributes that have been dropped. (#1771)\n- Make `ExportSpans` in Jaeger Exporter honor context deadline. (#1773)\n- Modify Zipkin Exporter default service name, use default resource's serviceName instead of empty. (#1777)\n- The `go.opentelemetry.io/otel/sdk/export/trace` package is merged into the `go.opentelemetry.io/otel/sdk/trace` package. (#1778)\n- The prometheus.InstallNewPipeline example is moved from comment to example test (#1796)\n- The convenience functions for the stdout exporter have been updated to return the `TracerProvider` implementation and enable the shutdown of the exporter. (#1800)\n- Replace the flush function returned from the Jaeger exporter's convenience creation functions (`InstallNewPipeline` and `NewExportPipeline`) with the `TracerProvider` implementation they create.\n  This enables the caller to shutdown and flush using the related `TracerProvider` methods. (#1822)\n- Updated the Jaeger exporter to have a default endpoint, `http://localhost:14250`, for the collector. (#1824)\n- Changed the function `WithCollectorEndpoint` in the Jaeger exporter to no longer accept an endpoint as an argument.\n  The endpoint can be passed with the `CollectorEndpointOption` using the `WithEndpoint` function or by setting the `OTEL_EXPORTER_JAEGER_ENDPOINT` environment variable value appropriately. (#1824)\n- The Jaeger exporter no longer batches exported spans itself, instead it relies on the SDK's `BatchSpanProcessor` for this functionality. (#1830)\n- The Jaeger exporter creation functions (`NewRawExporter`, `NewExportPipeline`, and `InstallNewPipeline`) no longer accept the removed `Option` type as a variadic argument. (#1830)\n\n### Removed\n\n- Removed Jaeger Environment variables: `JAEGER_SERVICE_NAME`, `JAEGER_DISABLED`, `JAEGER_TAGS`\n  These environment variables will no longer be used to override values of the Jaeger exporter (#1752)\n- No longer set the links for a `Span` in `go.opentelemetry.io/otel/sdk/trace` that is configured to be a new root.\n  This is unspecified behavior that the OpenTelemetry community plans to standardize in the future.\n  To prevent backwards incompatible changes when it is specified, these links are removed. (#1726)\n- Setting error status while recording error with Span from oteltest package. (#1729)\n- The concept of a remote and local Span stored in a context is unified to just the current Span.\n  Because of this `\"go.opentelemetry.io/otel/trace\".RemoteSpanContextFromContext` is removed as it is no longer needed.\n  Instead, `\"go.opentelemetry.io/otel/trace\".SpanContextFromContext` can be used to return the current Span.\n  If needed, that Span's `SpanContext.IsRemote()` can then be used to determine if it is remote or not. (#1731)\n- The `HasRemoteParent` field of the `\"go.opentelemetry.io/otel/sdk/trace\".SamplingParameters` is removed.\n  This field is redundant to the information returned from the `Remote` method of the `SpanContext` held in the `ParentContext` field. (#1749)\n- The `trace.FlagsDebug` and `trace.FlagsDeferred` constants have been removed and will be localized to the B3 propagator. (#1770)\n- Remove `Process` configuration, `WithProcessFromEnv` and `ProcessFromEnv`, and type from the Jaeger exporter package.\n  The information that could be configured in the `Process` struct should be configured in a `Resource` instead. (#1776, #1804)\n- Remove the `WithDisabled` option from the Jaeger exporter.\n  To disable the exporter unregister it from the `TracerProvider` or use a no-operation `TracerProvider`. (#1806)\n- Removed the functions `CollectorEndpointFromEnv` and `WithCollectorEndpointOptionFromEnv` from the Jaeger exporter.\n  These functions for retrieving specific environment variable values are redundant of other internal functions and\n  are not intended for end user use. (#1824)\n- Removed the Jaeger exporter `WithSDKOptions` `Option`.\n  This option was used to set SDK options for the exporter creation convenience functions.\n  These functions are provided as a way to easily setup or install the exporter with what are deemed reasonable SDK settings for common use cases.\n  If the SDK needs to be configured differently, the `NewRawExporter` function and direct setup of the SDK with the desired settings should be used. (#1825)\n- The `WithBufferMaxCount` and `WithBatchMaxCount` `Option`s from the Jaeger exporter are removed.\n  The exporter no longer batches exports, instead relying on the SDK's `BatchSpanProcessor` for this functionality. (#1830)\n- The Jaeger exporter `Option` type is removed.\n  The type is no longer used by the exporter to configure anything.\n  All the previous configurations these options provided were duplicates of SDK configuration.\n  They have been removed in favor of using the SDK configuration and focuses the exporter configuration to be only about the endpoints it will send telemetry to. (#1830)\n\n## [0.19.0] - 2021-03-18\n\n### Added\n\n- Added `Marshaler` config option to `otlphttp` to enable otlp over json or protobufs. (#1586)\n- A `ForceFlush` method to the `\"go.opentelemetry.io/otel/sdk/trace\".TracerProvider` to flush all registered `SpanProcessor`s. (#1608)\n- Added `WithSampler` and `WithSpanLimits` to tracer provider. (#1633, #1702)\n- `\"go.opentelemetry.io/otel/trace\".SpanContext` now has a `remote` property, and `IsRemote()` predicate, that is true when the `SpanContext` has been extracted from remote context data. (#1701)\n- A `Valid` method to the `\"go.opentelemetry.io/otel/attribute\".KeyValue` type. (#1703)\n\n### Changed\n\n- `trace.SpanContext` is now immutable and has no exported fields. (#1573)\n  - `trace.NewSpanContext()` can be used in conjunction with the `trace.SpanContextConfig` struct to initialize a new `SpanContext` where all values are known.\n- Update the `ForceFlush` method signature to the `\"go.opentelemetry.io/otel/sdk/trace\".SpanProcessor` to accept a `context.Context` and return an error. (#1608)\n- Update the `Shutdown` method to the `\"go.opentelemetry.io/otel/sdk/trace\".TracerProvider` return an error on shutdown failure. (#1608)\n- The SimpleSpanProcessor will now shut down the enclosed `SpanExporter` and gracefully ignore subsequent calls to `OnEnd` after `Shutdown` is called. (#1612)\n- `\"go.opentelemetry.io/sdk/metric/controller.basic\".WithPusher` is replaced with `WithExporter` to provide consistent naming across project. (#1656)\n- Added non-empty string check for trace `Attribute` keys. (#1659)\n- Add `description` to SpanStatus only when `StatusCode` is set to error. (#1662)\n- Jaeger exporter falls back to `resource.Default`'s `service.name` if the exported Span does not have one. (#1673)\n- Jaeger exporter populates Jaeger's Span Process from Resource. (#1673)\n- Renamed the `LabelSet` method of `\"go.opentelemetry.io/otel/sdk/resource\".Resource` to `Set`. (#1692)\n- Changed `WithSDK` to `WithSDKOptions` to accept variadic arguments of `TracerProviderOption` type in `go.opentelemetry.io/otel/exporters/trace/jaeger` package. (#1693)\n- Changed `WithSDK` to `WithSDKOptions` to accept variadic arguments of `TracerProviderOption` type in `go.opentelemetry.io/otel/exporters/trace/zipkin` package. (#1693)\n\n### Removed\n\n- Removed `serviceName` parameter from Zipkin exporter and uses resource instead. (#1549)\n- Removed `WithConfig` from tracer provider to avoid overriding configuration. (#1633)\n- Removed the exported `SimpleSpanProcessor` and `BatchSpanProcessor` structs.\n   These are now returned as a SpanProcessor interface from their respective constructors. (#1638)\n- Removed `WithRecord()` from `trace.SpanOption` when creating a span. (#1660)\n- Removed setting status to `Error` while recording an error as a span event in `RecordError`. (#1663)\n- Removed `jaeger.WithProcess` configuration option. (#1673)\n- Removed `ApplyConfig` method from `\"go.opentelemetry.io/otel/sdk/trace\".TracerProvider` and the now unneeded `Config` struct. (#1693)\n\n### Fixed\n\n- Jaeger Exporter: Ensure mapping between OTEL and Jaeger span data complies with the specification. (#1626)\n- `SamplingResult.TraceState` is correctly propagated to a newly created span's `SpanContext`. (#1655)\n- The `otel-collector` example now correctly flushes metric events prior to shutting down the exporter. (#1678)\n- Do not set span status message in `SpanStatusFromHTTPStatusCode` if it can be inferred from `http.status_code`. (#1681)\n- Synchronization issues in global trace delegate implementation. (#1686)\n- Reduced excess memory usage by global `TracerProvider`. (#1687)\n\n## [0.18.0] - 2021-03-03\n\n### Added\n\n- Added `resource.Default()` for use with meter and tracer providers. (#1507)\n- `AttributePerEventCountLimit` and `AttributePerLinkCountLimit` for `SpanLimits`. (#1535)\n- Added `Keys()` method to `propagation.TextMapCarrier` and `propagation.HeaderCarrier` to adapt `http.Header` to this interface. (#1544)\n- Added `code` attributes to `go.opentelemetry.io/otel/semconv` package. (#1558)\n- Compatibility testing suite in the CI system for the following systems. (#1567)\n   | OS      | Go Version | Architecture |\n   | ------- | ---------- | ------------ |\n   | Ubuntu  | 1.15       | amd64        |\n   | Ubuntu  | 1.14       | amd64        |\n   | Ubuntu  | 1.15       | 386          |\n   | Ubuntu  | 1.14       | 386          |\n   | MacOS   | 1.15       | amd64        |\n   | MacOS   | 1.14       | amd64        |\n   | Windows | 1.15       | amd64        |\n   | Windows | 1.14       | amd64        |\n   | Windows | 1.15       | 386          |\n   | Windows | 1.14       | 386          |\n\n### Changed\n\n- Replaced interface `oteltest.SpanRecorder` with its existing implementation\n  `StandardSpanRecorder`. (#1542)\n- Default span limit values to 128. (#1535)\n- Rename `MaxEventsPerSpan`, `MaxAttributesPerSpan` and `MaxLinksPerSpan` to `EventCountLimit`, `AttributeCountLimit` and `LinkCountLimit`, and move these fields into `SpanLimits`. (#1535)\n- Renamed the `otel/label` package to `otel/attribute`. (#1541)\n- Vendor the Jaeger exporter's dependency on Apache Thrift. (#1551)\n- Parallelize the CI linting and testing. (#1567)\n- Stagger timestamps in exact aggregator tests. (#1569)\n- Changed all examples to use `WithBatchTimeout(5 * time.Second)` rather than `WithBatchTimeout(5)`. (#1621)\n- Prevent end-users from implementing some interfaces (#1575)\n\n  ```\n      \"otel/exporters/otlp/otlphttp\".Option\n      \"otel/exporters/stdout\".Option\n      \"otel/oteltest\".Option\n      \"otel/trace\".TracerOption\n      \"otel/trace\".SpanOption\n      \"otel/trace\".EventOption\n      \"otel/trace\".LifeCycleOption\n      \"otel/trace\".InstrumentationOption\n      \"otel/sdk/resource\".Option\n      \"otel/sdk/trace\".ParentBasedSamplerOption\n      \"otel/sdk/trace\".ReadOnlySpan\n      \"otel/sdk/trace\".ReadWriteSpan\n  ```\n\n### Removed\n\n- Removed attempt to resample spans upon changing the span name with `span.SetName()`. (#1545)\n- The `test-benchmark` is no longer a dependency of the `precommit` make target. (#1567)\n- Removed the `test-386` make target.\n   This was replaced with a full compatibility testing suite (i.e. multi OS/arch) in the CI system. (#1567)\n\n### Fixed\n\n- The sequential timing check of timestamps in the stdout exporter are now setup explicitly to be sequential (#1571). (#1572)\n- Windows build of Jaeger tests now compiles with OS specific functions (#1576). (#1577)\n- The sequential timing check of timestamps of go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue are now setup explicitly to be sequential (#1578). (#1579)\n- Validate tracestate header keys with vendors according to the W3C TraceContext specification (#1475). (#1581)\n- The OTLP exporter includes related labels for translations of a GaugeArray (#1563). (#1570)\n\n## [0.17.0] - 2021-02-12\n\n### Changed\n\n- Rename project default branch from `master` to `main`. (#1505)\n- Reverse order in which `Resource` attributes are merged, per change in spec. (#1501)\n- Add tooling to maintain \"replace\" directives in go.mod files automatically. (#1528)\n- Create new modules: otel/metric, otel/trace, otel/oteltest, otel/sdk/export/metric, otel/sdk/metric (#1528)\n- Move metric-related public global APIs from otel to otel/metric/global. (#1528)\n\n## Fixed\n\n- Fixed otlpgrpc reconnection issue.\n- The example code in the README.md of `go.opentelemetry.io/otel/exporters/otlp` is moved to a compiled example test and used the new `WithAddress` instead of `WithEndpoint`. (#1513)\n- The otel-collector example now uses the default OTLP receiver port of the collector.\n\n## [0.16.0] - 2021-01-13\n\n### Added\n\n- Add the `ReadOnlySpan` and `ReadWriteSpan` interfaces to provide better control for accessing span data. (#1360)\n- `NewGRPCDriver` function returns a `ProtocolDriver` that maintains a single gRPC connection to the collector. (#1369)\n- Added documentation about the project's versioning policy. (#1388)\n- Added `NewSplitDriver` for OTLP exporter that allows sending traces and metrics to different endpoints. (#1418)\n- Added codeql workflow to GitHub Actions (#1428)\n- Added Gosec workflow to GitHub Actions (#1429)\n- Add new HTTP driver for OTLP exporter in `exporters/otlp/otlphttp`. Currently it only supports the binary protobuf payloads. (#1420)\n- Add an OpenCensus exporter bridge. (#1444)\n\n### Changed\n\n- Rename `internal/testing` to `internal/internaltest`. (#1449)\n- Rename `export.SpanData` to `export.SpanSnapshot` and use it only for exporting spans. (#1360)\n- Store the parent's full `SpanContext` rather than just its span ID in the `span` struct. (#1360)\n- Improve span duration accuracy. (#1360)\n- Migrated CI/CD from CircleCI to GitHub Actions (#1382)\n- Remove duplicate checkout from GitHub Actions workflow (#1407)\n- Metric `array` aggregator renamed `exact` to match its `aggregation.Kind` (#1412)\n- Metric `exact` aggregator includes per-point timestamps (#1412)\n- Metric stdout exporter uses MinMaxSumCount aggregator for ValueRecorder instruments (#1412)\n- `NewExporter` from `exporters/otlp` now takes a `ProtocolDriver` as a parameter. (#1369)\n- Many OTLP Exporter options became gRPC ProtocolDriver options. (#1369)\n- Unify endpoint API that related to OTel exporter. (#1401)\n- Optimize metric histogram aggregator to reuse its slice of buckets. (#1435)\n- Metric aggregator Count() and histogram Bucket.Counts are consistently `uint64`. (1430)\n- Histogram aggregator accepts functional options, uses default boundaries if none given. (#1434)\n- `SamplingResult` now passed a `Tracestate` from the parent `SpanContext` (#1432)\n- Moved gRPC driver for OTLP exporter to `exporters/otlp/otlpgrpc`. (#1420)\n- The `TraceContext` propagator now correctly propagates `TraceState` through the `SpanContext`. (#1447)\n- Metric Push and Pull Controller components are combined into a single \"basic\" Controller:\n  - `WithExporter()` and `Start()` to configure Push behavior\n  - `Start()` is optional; use `Collect()` and `ForEach()` for Pull behavior\n  - `Start()` and `Stop()` accept Context. (#1378)\n- The `Event` type is moved from the `otel/sdk/export/trace` package to the `otel/trace` API package. (#1452)\n\n### Removed\n\n- Remove `errUninitializedSpan` as its only usage is now obsolete. (#1360)\n- Remove Metric export functionality related to quantiles and summary data points: this is not specified (#1412)\n- Remove DDSketch metric aggregator; our intention is to re-introduce this as an option of the histogram aggregator after [new OTLP histogram data types](https://github.com/open-telemetry/opentelemetry-proto/pull/226) are released (#1412)\n\n### Fixed\n\n- `BatchSpanProcessor.Shutdown()` will now shutdown underlying `export.SpanExporter`. (#1443)\n\n## [0.15.0] - 2020-12-10\n\n### Added\n\n- The `WithIDGenerator` `TracerProviderOption` is added to the `go.opentelemetry.io/otel/trace` package to configure an `IDGenerator` for the `TracerProvider`. (#1363)\n\n### Changed\n\n- The Zipkin exporter now uses the Span status code to determine. (#1328)\n- `NewExporter` and `Start` functions in `go.opentelemetry.io/otel/exporters/otlp` now receive `context.Context` as a first parameter. (#1357)\n- Move the OpenCensus example into `example` directory. (#1359)\n- Moved the SDK's `internal.IDGenerator` interface in to the `sdk/trace` package to enable support for externally-defined ID generators. (#1363)\n- Bump `github.com/google/go-cmp` from 0.5.3 to 0.5.4 (#1374)\n- Bump `github.com/golangci/golangci-lint` in `/internal/tools` (#1375)\n\n### Fixed\n\n- Metric SDK `SumObserver` and `UpDownSumObserver` instruments correctness fixes. (#1381)\n\n## [0.14.0] - 2020-11-19\n\n### Added\n\n- An `EventOption` and the related `NewEventConfig` function are added to the `go.opentelemetry.io/otel` package to configure Span events. (#1254)\n- A `TextMapPropagator` and associated `TextMapCarrier` are added to the `go.opentelemetry.io/otel/oteltest` package to test `TextMap` type propagators and their use. (#1259)\n- `SpanContextFromContext` returns `SpanContext` from context. (#1255)\n- `TraceState` has been added to `SpanContext`. (#1340)\n- `DeploymentEnvironmentKey` added to `go.opentelemetry.io/otel/semconv` package. (#1323)\n- Add an OpenCensus to OpenTelemetry tracing bridge. (#1305)\n- Add a parent context argument to `SpanProcessor.OnStart` to follow the specification. (#1333)\n- Add missing tests for `sdk/trace/attributes_map.go`. (#1337)\n\n### Changed\n\n- Move the `go.opentelemetry.io/otel/api/trace` package into `go.opentelemetry.io/otel/trace` with the following changes. (#1229) (#1307)\n  - `ID` has been renamed to `TraceID`.\n  - `IDFromHex` has been renamed to `TraceIDFromHex`.\n  - `EmptySpanContext` is removed.\n- Move the `go.opentelemetry.io/otel/api/trace/tracetest` package into `go.opentelemetry.io/otel/oteltest`. (#1229)\n- OTLP Exporter updates:\n  - supports OTLP v0.6.0 (#1230, #1354)\n  - supports configurable aggregation temporality (default: Cumulative, optional: Stateless). (#1296)\n- The Sampler is now called on local child spans. (#1233)\n- The `Kind` type from the `go.opentelemetry.io/otel/api/metric` package was renamed to `InstrumentKind` to more specifically describe what it is and avoid semantic ambiguity. (#1240)\n- The `MetricKind` method of the `Descriptor` type in the `go.opentelemetry.io/otel/api/metric` package was renamed to `Descriptor.InstrumentKind`.\n   This matches the returned type and fixes misuse of the term metric. (#1240)\n- Move test harness from the `go.opentelemetry.io/otel/api/apitest` package into `go.opentelemetry.io/otel/oteltest`. (#1241)\n- Move the `go.opentelemetry.io/otel/api/metric/metrictest` package into `go.opentelemetry.io/oteltest` as part of #964. (#1252)\n- Move the `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric` as part of #1303. (#1321)\n- Move the `go.opentelemetry.io/otel/api/metric/registry` package into `go.opentelemetry.io/otel/metric/registry` as a part of #1303. (#1316)\n- Move the `Number` type (together with related functions) from `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric/number` as a part of #1303. (#1316)\n- The function signature of the Span `AddEvent` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required name and a variable number of `EventOption`s. (#1254)\n- The function signature of the Span `RecordError` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required error value and a variable number of `EventOption`s. (#1254)\n- Move the `go.opentelemetry.io/otel/api/global` package to `go.opentelemetry.io/otel`. (#1262) (#1330)\n- Move the `Version` function from `go.opentelemetry.io/otel/sdk` to `go.opentelemetry.io/otel`. (#1330)\n- Rename correlation context header from `\"otcorrelations\"` to `\"baggage\"` to match the OpenTelemetry specification. (#1267)\n- Fix `Code.UnmarshalJSON` to work with valid JSON only. (#1276)\n- The `resource.New()` method changes signature to support builtin attributes and functional options, including `telemetry.sdk.*` and\n  `host.name` semantic conventions; the former method is renamed `resource.NewWithAttributes`. (#1235)\n- The Prometheus exporter now exports non-monotonic counters (i.e. `UpDownCounter`s) as gauges. (#1210)\n- Correct the `Span.End` method documentation in the `otel` API to state updates are not allowed on a span after it has ended. (#1310)\n- Updated span collection limits for attribute, event and link counts to 1000 (#1318)\n- Renamed `semconv.HTTPUrlKey` to `semconv.HTTPURLKey`. (#1338)\n\n### Removed\n\n- The `ErrInvalidHexID`, `ErrInvalidTraceIDLength`, `ErrInvalidSpanIDLength`, `ErrInvalidSpanIDLength`, or `ErrNilSpanID` from the `go.opentelemetry.io/otel` package are unexported now. (#1243)\n- The `AddEventWithTimestamp` method on the `Span` interface in `go.opentelemetry.io/otel` is removed due to its redundancy.\n   It is replaced by using the `AddEvent` method with a `WithTimestamp` option. (#1254)\n- The `MockSpan` and `MockTracer` types are removed from `go.opentelemetry.io/otel/oteltest`.\n   `Tracer` and `Span` from the same module should be used in their place instead. (#1306)\n- `WorkerCount` option is removed from `go.opentelemetry.io/otel/exporters/otlp`. (#1350)\n- Remove the following labels types: INT32, UINT32, UINT64 and FLOAT32. (#1314)\n\n### Fixed\n\n- Rename `MergeItererator` to `MergeIterator` in the `go.opentelemetry.io/otel/label` package. (#1244)\n- The `go.opentelemetry.io/otel/api/global` packages global TextMapPropagator now delegates functionality to a globally set delegate for all previously returned propagators. (#1258)\n- Fix condition in `label.Any`. (#1299)\n- Fix global `TracerProvider` to pass options to its configured provider. (#1329)\n- Fix missing handler for `ExactKind` aggregator in OTLP metrics transformer (#1309)\n\n## [0.13.0] - 2020-10-08\n\n### Added\n\n- OTLP Metric exporter supports Histogram aggregation. (#1209)\n- The `Code` struct from the `go.opentelemetry.io/otel/codes` package now supports JSON marshaling and unmarshaling as well as implements the `Stringer` interface. (#1214)\n- A Baggage API to implement the OpenTelemetry specification. (#1217)\n- Add Shutdown method to sdk/trace/provider, shutdown processors in the order they were registered. (#1227)\n\n### Changed\n\n- Set default propagator to no-op propagator. (#1184)\n- The `HTTPSupplier`, `HTTPExtractor`, `HTTPInjector`, and `HTTPPropagator` from the `go.opentelemetry.io/otel/api/propagation` package were replaced with unified `TextMapCarrier` and `TextMapPropagator` in the `go.opentelemetry.io/otel/propagation` package. (#1212) (#1325)\n- The `New` function from the `go.opentelemetry.io/otel/api/propagation` package was replaced with `NewCompositeTextMapPropagator` in the `go.opentelemetry.io/otel` package. (#1212)\n- The status codes of the `go.opentelemetry.io/otel/codes` package have been updated to match the latest OpenTelemetry specification.\n   They now are `Unset`, `Error`, and `Ok`.\n   They no longer track the gRPC codes. (#1214)\n- The `StatusCode` field of the `SpanData` struct in the `go.opentelemetry.io/otel/sdk/export/trace` package now uses the codes package from this package instead of the gRPC project. (#1214)\n- Move the `go.opentelemetry.io/otel/api/baggage` package into `go.opentelemetry.io/otel/baggage`. (#1217) (#1325)\n- A `Shutdown` method of `SpanProcessor` and all its implementations receives a context and returns an error. (#1264)\n\n### Fixed\n\n- Copies of data from arrays and slices passed to `go.opentelemetry.io/otel/label.ArrayValue()` are now used in the returned `Value` instead of using the mutable data itself. (#1226)\n\n### Removed\n\n- The `ExtractHTTP` and `InjectHTTP` functions from the `go.opentelemetry.io/otel/api/propagation` package were removed. (#1212)\n- The `Propagators` interface from the `go.opentelemetry.io/otel/api/propagation` package was removed to conform to the OpenTelemetry specification.\n   The explicit `TextMapPropagator` type can be used in its place as this is the `Propagator` type the specification defines. (#1212)\n- The `SetAttribute` method of the `Span` from the `go.opentelemetry.io/otel/api/trace` package was removed given its redundancy with the `SetAttributes` method. (#1216)\n- The internal implementation of Baggage storage is removed in favor of using the new Baggage API functionality. (#1217)\n- Remove duplicate hostname key `HostHostNameKey` in Resource semantic conventions. (#1219)\n- Nested array/slice support has been removed. (#1226)\n\n## [0.12.0] - 2020-09-24\n\n### Added\n\n- A `SpanConfigure` function in `go.opentelemetry.io/otel/api/trace` to create a new `SpanConfig` from `SpanOption`s. (#1108)\n- In the `go.opentelemetry.io/otel/api/trace` package, `NewTracerConfig` was added to construct new `TracerConfig`s.\n   This addition was made to conform with our project option conventions. (#1155)\n- Instrumentation library information was added to the Zipkin exporter. (#1119)\n- The `SpanProcessor` interface now has a `ForceFlush()` method. (#1166)\n- More semantic conventions for k8s as resource attributes. (#1167)\n\n### Changed\n\n- Add reconnecting udp connection type to Jaeger exporter.\n   This change adds a new optional implementation of the udp conn interface used to detect changes to an agent's host dns record.\n   It then adopts the new destination address to ensure the exporter doesn't get stuck. This change was ported from jaegertracing/jaeger-client-go#520. (#1063)\n- Replace `StartOption` and `EndOption` in `go.opentelemetry.io/otel/api/trace` with `SpanOption`.\n   This change is matched by replacing the `StartConfig` and `EndConfig` with a unified `SpanConfig`. (#1108)\n- Replace the `LinkedTo` span option in `go.opentelemetry.io/otel/api/trace` with `WithLinks`.\n   This is be more consistent with our other option patterns, i.e. passing the item to be configured directly instead of its component parts, and provides a cleaner function signature. (#1108)\n- The `go.opentelemetry.io/otel/api/trace` `TracerOption` was changed to an interface to conform to project option conventions. (#1109)\n- Move the `B3` and `TraceContext` from within the `go.opentelemetry.io/otel/api/trace` package to their own `go.opentelemetry.io/otel/propagators` package.\n    This removal of the propagators is reflective of the OpenTelemetry specification for these propagators as well as cleans up the `go.opentelemetry.io/otel/api/trace` API. (#1118)\n- Rename Jaeger tags used for instrumentation library information to reflect changes in OpenTelemetry specification. (#1119)\n- Rename `ProbabilitySampler` to `TraceIDRatioBased` and change semantics to ignore parent span sampling status. (#1115)\n- Move `tools` package under `internal`. (#1141)\n- Move `go.opentelemetry.io/otel/api/correlation` package to `go.opentelemetry.io/otel/api/baggage`. (#1142)\n   The `correlation.CorrelationContext` propagator has been renamed `baggage.Baggage`.  Other exported functions and types are unchanged.\n- Rename `ParentOrElse` sampler to `ParentBased` and allow setting samplers depending on parent span. (#1153)\n- In the `go.opentelemetry.io/otel/api/trace` package, `SpanConfigure` was renamed to `NewSpanConfig`. (#1155)\n- Change `dependabot.yml` to add a `Skip Changelog` label to dependabot-sourced PRs. (#1161)\n- The [configuration style guide](https://github.com/open-telemetry/opentelemetry-go/blob/master/CONTRIBUTING.md#config) has been updated to\n   recommend the use of `newConfig()` instead of `configure()`. (#1163)\n- The `otlp.Config` type has been unexported and changed to `otlp.config`, along with its initializer. (#1163)\n- Ensure exported interface types include parameter names and update the\n   Style Guide to reflect this styling rule. (#1172)\n- Don't consider unset environment variable for resource detection to be an error. (#1170)\n- Rename `go.opentelemetry.io/otel/api/metric.ConfigureInstrument` to `NewInstrumentConfig` and\n  `go.opentelemetry.io/otel/api/metric.ConfigureMeter` to `NewMeterConfig`.\n- ValueObserver instruments use LastValue aggregator by default. (#1165)\n- OTLP Metric exporter supports LastValue aggregation. (#1165)\n- Move the `go.opentelemetry.io/otel/api/unit` package to `go.opentelemetry.io/otel/unit`. (#1185)\n- Rename `Provider` to `MeterProvider` in the `go.opentelemetry.io/otel/api/metric` package. (#1190)\n- Rename `NoopProvider` to `NoopMeterProvider` in the `go.opentelemetry.io/otel/api/metric` package. (#1190)\n- Rename `NewProvider` to `NewMeterProvider` in the `go.opentelemetry.io/otel/api/metric/metrictest` package. (#1190)\n- Rename `Provider` to `MeterProvider` in the `go.opentelemetry.io/otel/api/metric/registry` package. (#1190)\n- Rename `NewProvider` to `NewMeterProvider` in the `go.opentelemetry.io/otel/api/metri/registryc` package. (#1190)\n- Rename `Provider` to `TracerProvider` in the `go.opentelemetry.io/otel/api/trace` package. (#1190)\n- Rename `NoopProvider` to `NoopTracerProvider` in the `go.opentelemetry.io/otel/api/trace` package. (#1190)\n- Rename `Provider` to `TracerProvider` in the `go.opentelemetry.io/otel/api/trace/tracetest` package. (#1190)\n- Rename `NewProvider` to `NewTracerProvider` in the `go.opentelemetry.io/otel/api/trace/tracetest` package. (#1190)\n- Rename `WrapperProvider` to `WrapperTracerProvider` in the `go.opentelemetry.io/otel/bridge/opentracing` package. (#1190)\n- Rename `NewWrapperProvider` to `NewWrapperTracerProvider` in the `go.opentelemetry.io/otel/bridge/opentracing` package. (#1190)\n- Rename `Provider` method of the pull controller to `MeterProvider` in the `go.opentelemetry.io/otel/sdk/metric/controller/pull` package. (#1190)\n- Rename `Provider` method of the push controller to `MeterProvider` in the `go.opentelemetry.io/otel/sdk/metric/controller/push` package. (#1190)\n- Rename `ProviderOptions` to `TracerProviderConfig` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190)\n- Rename `ProviderOption` to `TracerProviderOption` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190)\n- Rename `Provider` to `TracerProvider` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190)\n- Rename `NewProvider` to `NewTracerProvider` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190)\n- Renamed `SamplingDecision` values to comply with OpenTelemetry specification change. (#1192)\n- Renamed Zipkin attribute names from `ot.status_code & ot.status_description` to `otel.status_code & otel.status_description`. (#1201)\n- The default SDK now invokes registered `SpanProcessor`s in the order they were registered with the `TracerProvider`. (#1195)\n- Add test of spans being processed by the `SpanProcessor`s in the order they were registered. (#1203)\n\n### Removed\n\n- Remove the B3 propagator from `go.opentelemetry.io/otel/propagators`. It is now located in the\n   `go.opentelemetry.io/contrib/propagators/` module. (#1191)\n- Remove the semantic convention for HTTP status text, `HTTPStatusTextKey` from package `go.opentelemetry.io/otel/semconv`. (#1194)\n\n### Fixed\n\n- Zipkin example no longer mentions `ParentSampler`, corrected to `ParentBased`. (#1171)\n- Fix missing shutdown processor in otel-collector example. (#1186)\n- Fix missing shutdown processor in basic and namedtracer examples. (#1197)\n\n## [0.11.0] - 2020-08-24\n\n### Added\n\n- Support for exporting array-valued attributes via OTLP. (#992)\n- `Noop` and `InMemory` `SpanBatcher` implementations to help with testing integrations. (#994)\n- Support for filtering metric label sets. (#1047)\n- A dimensionality-reducing metric Processor. (#1057)\n- Integration tests for more OTel Collector Attribute types. (#1062)\n- A new `WithSpanProcessor` `ProviderOption` is added to the `go.opentelemetry.io/otel/sdk/trace` package to create a `Provider` and automatically register the `SpanProcessor`. (#1078)\n\n### Changed\n\n- Rename `sdk/metric/processor/test` to `sdk/metric/processor/processortest`. (#1049)\n- Rename `sdk/metric/controller/test` to `sdk/metric/controller/controllertest`. (#1049)\n- Rename `api/testharness` to `api/apitest`. (#1049)\n- Rename `api/trace/testtrace` to `api/trace/tracetest`. (#1049)\n- Change Metric Processor to merge multiple observations. (#1024)\n- The `go.opentelemetry.io/otel/bridge/opentracing` bridge package has been made into its own module.\n   This removes the package dependencies of this bridge from the rest of the OpenTelemetry based project. (#1038)\n- Renamed `go.opentelemetry.io/otel/api/standard` package to `go.opentelemetry.io/otel/semconv` to avoid the ambiguous and generic name `standard` and better describe the package as containing OpenTelemetry semantic conventions. (#1016)\n- The environment variable used for resource detection has been changed from `OTEL_RESOURCE_LABELS` to `OTEL_RESOURCE_ATTRIBUTES` (#1042)\n- Replace `WithSyncer` with `WithBatcher` in examples. (#1044)\n- Replace the `google.golang.org/grpc/codes` dependency in the API with an equivalent `go.opentelemetry.io/otel/codes` package. (#1046)\n- Merge the `go.opentelemetry.io/otel/api/label` and `go.opentelemetry.io/otel/api/kv` into the new `go.opentelemetry.io/otel/label` package. (#1060)\n- Unify Callback Function Naming.\n   Rename `*Callback` with `*Func`. (#1061)\n- CI builds validate against last two versions of Go, dropping 1.13 and adding 1.15. (#1064)\n- The `go.opentelemetry.io/otel/sdk/export/trace` interfaces `SpanSyncer` and `SpanBatcher` have been replaced with a specification compliant `Exporter` interface.\n   This interface still supports the export of `SpanData`, but only as a slice.\n   Implementation are also required now to return any error from `ExportSpans` if one occurs as well as implement a `Shutdown` method for exporter clean-up. (#1078)\n- The `go.opentelemetry.io/otel/sdk/trace` `NewBatchSpanProcessor` function no longer returns an error.\n   If a `nil` exporter is passed as an argument to this function, instead of it returning an error, it now returns a `BatchSpanProcessor` that handles the export of `SpanData` by not taking any action. (#1078)\n- The `go.opentelemetry.io/otel/sdk/trace` `NewProvider` function to create a `Provider` no longer returns an error, instead only a `*Provider`.\n   This change is related to `NewBatchSpanProcessor` not returning an error which was the only error this function would return. (#1078)\n\n### Removed\n\n- Duplicate, unused API sampler interface. (#999)\n   Use the [`Sampler` interface](https://github.com/open-telemetry/opentelemetry-go/blob/v0.11.0/sdk/trace/sampling.go) provided by the SDK instead.\n- The `grpctrace` instrumentation was moved to the `go.opentelemetry.io/contrib` repository and out of this repository.\n   This move includes moving the `grpc` example to the `go.opentelemetry.io/contrib` as well. (#1027)\n- The `WithSpan` method of the `Tracer` interface.\n   The functionality this method provided was limited compared to what a user can provide themselves.\n   It was removed with the understanding that if there is sufficient user need it can be added back based on actual user usage. (#1043)\n- The `RegisterSpanProcessor` and `UnregisterSpanProcessor` functions.\n   These were holdovers from an approach prior to the TracerProvider design. They were not used anymore. (#1077)\n- The `oterror` package. (#1026)\n- The `othttp` and `httptrace` instrumentations were moved to `go.opentelemetry.io/contrib`. (#1032)\n\n### Fixed\n\n- The `semconv.HTTPServerMetricAttributesFromHTTPRequest()` function no longer generates the high-cardinality `http.request.content.length` label. (#1031)\n- Correct instrumentation version tag in Jaeger exporter. (#1037)\n- The SDK span will now set an error event if the `End` method is called during a panic (i.e. it was deferred). (#1043)\n- Move internally generated protobuf code from the `go.opentelemetry.io/otel` to the OTLP exporter to reduce dependency overhead. (#1050)\n- The `otel-collector` example referenced outdated collector processors. (#1006)\n\n## [0.10.0] - 2020-07-29\n\nThis release migrates the default OpenTelemetry SDK into its own Go module, decoupling the SDK from the API and reducing dependencies for instrumentation packages.\n\n### Added\n\n- The Zipkin exporter now has `NewExportPipeline` and `InstallNewPipeline` constructor functions to match the common pattern.\n    These function build a new exporter with default SDK options and register the exporter with the `global` package respectively. (#944)\n- Add propagator option for gRPC instrumentation. (#986)\n- The `testtrace` package now tracks the `trace.SpanKind` for each span. (#987)\n\n### Changed\n\n- Replace the `RegisterGlobal` `Option` in the Jaeger exporter with an `InstallNewPipeline` constructor function.\n   This matches the other exporter constructor patterns and will register a new exporter after building it with default configuration. (#944)\n- The trace (`go.opentelemetry.io/otel/exporters/trace/stdout`) and metric (`go.opentelemetry.io/otel/exporters/metric/stdout`) `stdout` exporters are now merged into a single exporter at `go.opentelemetry.io/otel/exporters/stdout`.\n   This new exporter was made into its own Go module to follow the pattern of all exporters and decouple it from the `go.opentelemetry.io/otel` module. (#956, #963)\n- Move the `go.opentelemetry.io/otel/exporters/test` test package to `go.opentelemetry.io/otel/sdk/export/metric/metrictest`. (#962)\n- The `go.opentelemetry.io/otel/api/kv/value` package was merged into the parent `go.opentelemetry.io/otel/api/kv` package. (#968)\n  - `value.Bool` was replaced with `kv.BoolValue`.\n  - `value.Int64` was replaced with `kv.Int64Value`.\n  - `value.Uint64` was replaced with `kv.Uint64Value`.\n  - `value.Float64` was replaced with `kv.Float64Value`.\n  - `value.Int32` was replaced with `kv.Int32Value`.\n  - `value.Uint32` was replaced with `kv.Uint32Value`.\n  - `value.Float32` was replaced with `kv.Float32Value`.\n  - `value.String` was replaced with `kv.StringValue`.\n  - `value.Int` was replaced with `kv.IntValue`.\n  - `value.Uint` was replaced with `kv.UintValue`.\n  - `value.Array` was replaced with `kv.ArrayValue`.\n- Rename `Infer` to `Any` in the `go.opentelemetry.io/otel/api/kv` package. (#972)\n- Change `othttp` to use the `httpsnoop` package to wrap the `ResponseWriter` so that optional interfaces (`http.Hijacker`, `http.Flusher`, etc.) that are implemented by the original `ResponseWriter`are also implemented by the wrapped `ResponseWriter`. (#979)\n- Rename `go.opentelemetry.io/otel/sdk/metric/aggregator/test` package to `go.opentelemetry.io/otel/sdk/metric/aggregator/aggregatortest`. (#980)\n- Make the SDK into its own Go module called `go.opentelemetry.io/otel/sdk`. (#985)\n- Changed the default trace `Sampler` from `AlwaysOn` to `ParentOrElse(AlwaysOn)`. (#989)\n\n### Removed\n\n- The `IndexedAttribute` function from the `go.opentelemetry.io/otel/api/label` package was removed in favor of `IndexedLabel` which it was synonymous with. (#970)\n\n### Fixed\n\n- Bump github.com/golangci/golangci-lint from 1.28.3 to 1.29.0 in /tools. (#953)\n- Bump github.com/google/go-cmp from 0.5.0 to 0.5.1. (#957)\n- Use `global.Handle` for span export errors in the OTLP exporter. (#946)\n- Correct Go language formatting in the README documentation. (#961)\n- Remove default SDK dependencies from the `go.opentelemetry.io/otel/api` package. (#977)\n- Remove default SDK dependencies from the `go.opentelemetry.io/otel/instrumentation` package. (#983)\n- Move documented examples for `go.opentelemetry.io/otel/instrumentation/grpctrace` interceptors into Go example tests. (#984)\n\n## [0.9.0] - 2020-07-20\n\n### Added\n\n- A new Resource Detector interface is included to allow resources to be automatically detected and included. (#939)\n- A Detector to automatically detect resources from an environment variable. (#939)\n- Github action to generate protobuf Go bindings locally in `internal/opentelemetry-proto-gen`. (#938)\n- OTLP .proto files from `open-telemetry/opentelemetry-proto` imported as a git submodule under `internal/opentelemetry-proto`.\n   References to `github.com/open-telemetry/opentelemetry-proto` changed to `go.opentelemetry.io/otel/internal/opentelemetry-proto-gen`. (#942)\n\n### Changed\n\n- Non-nil value `struct`s for key-value pairs will be marshalled using JSON rather than `Sprintf`. (#948)\n\n### Removed\n\n- Removed dependency on `github.com/open-telemetry/opentelemetry-collector`. (#943)\n\n## [0.8.0] - 2020-07-09\n\n### Added\n\n- The `B3Encoding` type to represent the B3 encoding(s) the B3 propagator can inject.\n   A value for HTTP supported encodings (Multiple Header: `MultipleHeader`, Single Header: `SingleHeader`) are included. (#882)\n- The `FlagsDeferred` trace flag to indicate if the trace sampling decision has been deferred. (#882)\n- The `FlagsDebug` trace flag to indicate if the trace is a debug trace. (#882)\n- Add `peer.service` semantic attribute. (#898)\n- Add database-specific semantic attributes. (#899)\n- Add semantic convention for `faas.coldstart` and `container.id`. (#909)\n- Add http content size semantic conventions. (#905)\n- Include `http.request_content_length` in HTTP request basic attributes. (#905)\n- Add semantic conventions for operating system process resource attribute keys. (#919)\n- The Jaeger exporter now has a `WithBatchMaxCount` option to specify the maximum number of spans sent in a batch. (#931)\n\n### Changed\n\n- Update `CONTRIBUTING.md` to ask for updates to `CHANGELOG.md` with each pull request. (#879)\n- Use lowercase header names for B3 Multiple Headers. (#881)\n- The B3 propagator `SingleHeader` field has been replaced with `InjectEncoding`.\n   This new field can be set to combinations of the `B3Encoding` bitmasks and will inject trace information in these encodings.\n   If no encoding is set, the propagator will default to `MultipleHeader` encoding. (#882)\n- The B3 propagator now extracts from either HTTP encoding of B3 (Single Header or Multiple Header) based on what is contained in the header.\n   Preference is given to Single Header encoding with Multiple Header being the fallback if Single Header is not found or is invalid.\n   This behavior change is made to dynamically support all correctly encoded traces received instead of having to guess the expected encoding prior to receiving. (#882)\n- Extend semantic conventions for RPC. (#900)\n- To match constant naming conventions in the `api/standard` package, the `FaaS*` key names are appended with a suffix of `Key`. (#920)\n  - `\"api/standard\".FaaSName` -> `FaaSNameKey`\n  - `\"api/standard\".FaaSID` -> `FaaSIDKey`\n  - `\"api/standard\".FaaSVersion` -> `FaaSVersionKey`\n  - `\"api/standard\".FaaSInstance` -> `FaaSInstanceKey`\n\n### Removed\n\n- The `FlagsUnused` trace flag is removed.\n   The purpose of this flag was to act as the inverse of `FlagsSampled`, the inverse of `FlagsSampled` is used instead. (#882)\n- The B3 header constants (`B3SingleHeader`, `B3DebugFlagHeader`, `B3TraceIDHeader`, `B3SpanIDHeader`, `B3SampledHeader`, `B3ParentSpanIDHeader`) are removed.\n   If B3 header keys are needed [the authoritative OpenZipkin package constants](https://pkg.go.dev/github.com/openzipkin/zipkin-go@v0.2.2/propagation/b3?tab=doc#pkg-constants) should be used instead. (#882)\n\n### Fixed\n\n- The B3 Single Header name is now correctly `b3` instead of the previous `X-B3`. (#881)\n- The B3 propagator now correctly supports sampling only values (`b3: 0`, `b3: 1`, or `b3: d`) for a Single B3 Header. (#882)\n- The B3 propagator now propagates the debug flag.\n   This removes the behavior of changing the debug flag into a set sampling bit.\n   Instead, this now follow the B3 specification and omits the `X-B3-Sampling` header. (#882)\n- The B3 propagator now tracks \"unset\" sampling state (meaning \"defer the decision\") and does not set the `X-B3-Sampling` header when injecting. (#882)\n- Bump github.com/itchyny/gojq from 0.10.3 to 0.10.4 in /tools. (#883)\n- Bump github.com/opentracing/opentracing-go from v1.1.1-0.20190913142402-a7454ce5950e to v1.2.0. (#885)\n- The tracing time conversion for OTLP spans is now correctly set to `UnixNano`. (#896)\n- Ensure span status is not set to `Unknown` when no HTTP status code is provided as it is assumed to be `200 OK`. (#908)\n- Ensure `httptrace.clientTracer` closes `http.headers` span. (#912)\n- Prometheus exporter will not apply stale updates or forget inactive metrics. (#903)\n- Add test for api.standard `HTTPClientAttributesFromHTTPRequest`. (#905)\n- Bump github.com/golangci/golangci-lint from 1.27.0 to 1.28.1 in /tools. (#901, #913)\n- Update otel-collector example to use the v0.5.0 collector. (#915)\n- The `grpctrace` instrumentation uses a span name conforming to the OpenTelemetry semantic conventions (does not contain a leading slash (`/`)). (#922)\n- The `grpctrace` instrumentation includes an `rpc.method` attribute now set to the gRPC method name. (#900, #922)\n- The `grpctrace` instrumentation `rpc.service` attribute now contains the package name if one exists.\n   This is in accordance with OpenTelemetry semantic conventions. (#922)\n- Correlation Context extractor will no longer insert an empty map into the returned context when no valid values are extracted. (#923)\n- Bump google.golang.org/api from 0.28.0 to 0.29.0 in /exporters/trace/jaeger. (#925)\n- Bump github.com/itchyny/gojq from 0.10.4 to 0.11.0 in /tools. (#926)\n- Bump github.com/golangci/golangci-lint from 1.28.1 to 1.28.2 in /tools. (#930)\n\n## [0.7.0] - 2020-06-26\n\nThis release implements the v0.5.0 version of the OpenTelemetry specification.\n\n### Added\n\n- The othttp instrumentation now includes default metrics. (#861)\n- This CHANGELOG file to track all changes in the project going forward.\n- Support for array type attributes. (#798)\n- Apply transitive dependabot go.mod dependency updates as part of a new automatic Github workflow. (#844)\n- Timestamps are now passed to exporters for each export. (#835)\n- Add new `Accumulation` type to metric SDK to transport telemetry from `Accumulator`s to `Processor`s.\n   This replaces the prior `Record` `struct` use for this purpose. (#835)\n- New dependabot integration to automate package upgrades. (#814)\n- `Meter` and `Tracer` implementations accept instrumentation version version as an optional argument.\n   This instrumentation version is passed on to exporters. (#811) (#805) (#802)\n- The OTLP exporter includes the instrumentation version in telemetry it exports. (#811)\n- Environment variables for Jaeger exporter are supported. (#796)\n- New `aggregation.Kind` in the export metric API. (#808)\n- New example that uses OTLP and the collector. (#790)\n- Handle errors in the span `SetName` during span initialization. (#791)\n- Default service config to enable retries for retry-able failed requests in the OTLP exporter and an option to override this default. (#777)\n- New `go.opentelemetry.io/otel/api/oterror` package to uniformly support error handling and definitions for the project. (#778)\n- New `global` default implementation of the `go.opentelemetry.io/otel/api/oterror.Handler` interface to be used to handle errors prior to an user defined `Handler`.\n   There is also functionality for the user to register their `Handler` as well as a convenience function `Handle` to handle an error with this global `Handler`(#778)\n- Options to specify propagators for httptrace and grpctrace instrumentation. (#784)\n- The required `application/json` header for the Zipkin exporter is included in all exports. (#774)\n- Integrate HTTP semantics helpers from the contrib repository into the `api/standard` package. #769\n\n### Changed\n\n- Rename `Integrator` to `Processor` in the metric SDK. (#863)\n- Rename `AggregationSelector` to `AggregatorSelector`. (#859)\n- Rename `SynchronizedCopy` to `SynchronizedMove`. (#858)\n- Rename `simple` integrator to `basic` integrator. (#857)\n- Merge otlp collector examples. (#841)\n- Change the metric SDK to support cumulative, delta, and pass-through exporters directly.\n   With these changes, cumulative and delta specific exporters are able to request the correct kind of aggregation from the SDK. (#840)\n- The `Aggregator.Checkpoint` API is renamed to `SynchronizedCopy` and adds an argument, a different `Aggregator` into which the copy is stored. (#812)\n- The `export.Aggregator` contract is that `Update()` and `SynchronizedCopy()` are synchronized with each other.\n   All the aggregation interfaces (`Sum`, `LastValue`, ...) are not meant to be synchronized, as the caller is expected to synchronize aggregators at a higher level after the `Accumulator`.\n   Some of the `Aggregators` used unnecessary locking and that has been cleaned up. (#812)\n- Use of `metric.Number` was replaced by `int64` now that we use `sync.Mutex` in the `MinMaxSumCount` and `Histogram` `Aggregators`. (#812)\n- Replace `AlwaysParentSample` with `ParentSample(fallback)` to match the OpenTelemetry v0.5.0 specification. (#810)\n- Rename `sdk/export/metric/aggregator` to `sdk/export/metric/aggregation`. #808\n- Send configured headers with every request in the OTLP exporter, instead of just on connection creation. (#806)\n- Update error handling for any one off error handlers, replacing, instead, with the `global.Handle` function. (#791)\n- Rename `plugin` directory to `instrumentation` to match the OpenTelemetry specification. (#779)\n- Makes the argument order to Histogram and DDSketch `New()` consistent. (#781)\n\n### Removed\n\n- `Uint64NumberKind` and related functions from the API. (#864)\n- Context arguments from `Aggregator.Checkpoint` and `Integrator.Process` as they were unused. (#803)\n- `SpanID` is no longer included in parameters for sampling decision to match the OpenTelemetry specification. (#775)\n\n### Fixed\n\n- Upgrade OTLP exporter to opentelemetry-proto matching the opentelemetry-collector v0.4.0 release. (#866)\n- Allow changes to `go.sum` and `go.mod` when running dependabot tidy-up. (#871)\n- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1. (#824)\n- Bump github.com/prometheus/client_golang from 1.7.0 to 1.7.1 in /exporters/metric/prometheus. (#867)\n- Bump google.golang.org/grpc from 1.29.1 to 1.30.0 in /exporters/trace/jaeger. (#853)\n- Bump google.golang.org/grpc from 1.29.1 to 1.30.0 in /exporters/trace/zipkin. (#854)\n- Bumps github.com/golang/protobuf from 1.3.2 to 1.4.2 (#848)\n- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/otlp (#817)\n- Bump github.com/golangci/golangci-lint from 1.25.1 to 1.27.0 in /tools (#828)\n- Bump github.com/prometheus/client_golang from 1.5.0 to 1.7.0 in /exporters/metric/prometheus (#838)\n- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/trace/jaeger (#829)\n- Bump github.com/benbjohnson/clock from 1.0.0 to 1.0.3 (#815)\n- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/trace/zipkin (#823)\n- Bump github.com/itchyny/gojq from 0.10.1 to 0.10.3 in /tools (#830)\n- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/metric/prometheus (#822)\n- Bump google.golang.org/grpc from 1.27.1 to 1.29.1 in /exporters/trace/zipkin (#820)\n- Bump google.golang.org/grpc from 1.27.1 to 1.29.1 in /exporters/trace/jaeger (#831)\n- Bump github.com/google/go-cmp from 0.4.0 to 0.5.0 (#836)\n- Bump github.com/google/go-cmp from 0.4.0 to 0.5.0 in /exporters/trace/jaeger (#837)\n- Bump github.com/google/go-cmp from 0.4.0 to 0.5.0 in /exporters/otlp (#839)\n- Bump google.golang.org/api from 0.20.0 to 0.28.0 in /exporters/trace/jaeger (#843)\n- Set span status from HTTP status code in the othttp instrumentation. (#832)\n- Fixed typo in push controller comment. (#834)\n- The `Aggregator` testing has been updated and cleaned. (#812)\n- `metric.Number(0)` expressions are replaced by `0` where possible. (#812)\n- Fixed `global` `handler_test.go` test failure. #804\n- Fixed `BatchSpanProcessor.Shutdown` to wait until all spans are processed. (#766)\n- Fixed OTLP example's accidental early close of exporter. (#807)\n- Ensure zipkin exporter reads and closes response body. (#788)\n- Update instrumentation to use `api/standard` keys instead of custom keys. (#782)\n- Clean up tools and RELEASING documentation. (#762)\n\n## [0.6.0] - 2020-05-21\n\n### Added\n\n- Support for `Resource`s in the prometheus exporter. (#757)\n- New pull controller. (#751)\n- New `UpDownSumObserver` instrument. (#750)\n- OpenTelemetry collector demo. (#711)\n- New `SumObserver` instrument. (#747)\n- New `UpDownCounter` instrument. (#745)\n- New timeout `Option` and configuration function `WithTimeout` to the push controller. (#742)\n- New `api/standards` package to implement semantic conventions and standard key-value generation. (#731)\n\n### Changed\n\n- Rename `Register*` functions in the metric API to `New*` for all `Observer` instruments. (#761)\n- Use `[]float64` for histogram boundaries, not `[]metric.Number`. (#758)\n- Change OTLP example to use exporter as a trace `Syncer` instead of as an unneeded `Batcher`. (#756)\n- Replace `WithResourceAttributes()` with `WithResource()` in the trace SDK. (#754)\n- The prometheus exporter now uses the new pull controller. (#751)\n- Rename `ScheduleDelayMillis` to `BatchTimeout` in the trace `BatchSpanProcessor`.(#752)\n- Support use of synchronous instruments in asynchronous callbacks (#725)\n- Move `Resource` from the `Export` method parameter into the metric export `Record`. (#739)\n- Rename `Observer` instrument to `ValueObserver`. (#734)\n- The push controller now has a method (`Provider()`) to return a `metric.Provider` instead of the old `Meter` method that acted as a `metric.Provider`. (#738)\n- Replace `Measure` instrument by `ValueRecorder` instrument. (#732)\n- Rename correlation context header from `\"Correlation-Context\"` to `\"otcorrelations\"` to match the OpenTelemetry specification. (#727)\n\n### Fixed\n\n- Ensure gRPC `ClientStream` override methods do not panic in grpctrace package. (#755)\n- Disable parts of `BatchSpanProcessor` test until a fix is found. (#743)\n- Fix `string` case in `kv` `Infer` function. (#746)\n- Fix panic in grpctrace client interceptors. (#740)\n- Refactor the `api/metrics` push controller and add `CheckpointSet` synchronization. (#737)\n- Rewrite span batch process queue batching logic. (#719)\n- Remove the push controller named Meter map. (#738)\n- Fix Histogram aggregator initial state (fix #735). (#736)\n- Ensure golang alpine image is running `golang-1.14` for examples. (#733)\n- Added test for grpctrace `UnaryInterceptorClient`. (#695)\n- Rearrange `api/metric` code layout. (#724)\n\n## [0.5.0] - 2020-05-13\n\n### Added\n\n- Batch `Observer` callback support. (#717)\n- Alias `api` types to root package of project. (#696)\n- Create basic `othttp.Transport` for simple client instrumentation. (#678)\n- `SetAttribute(string, interface{})` to the trace API. (#674)\n- Jaeger exporter option that allows user to specify custom http client. (#671)\n- `Stringer` and `Infer` methods to `key`s. (#662)\n\n### Changed\n\n- Rename `NewKey` in the `kv` package to just `Key`. (#721)\n- Move `core` and `key` to `kv` package. (#720)\n- Make the metric API `Meter` a `struct` so the abstract `MeterImpl` can be passed and simplify implementation. (#709)\n- Rename SDK `Batcher` to `Integrator` to match draft OpenTelemetry SDK specification. (#710)\n- Rename SDK `Ungrouped` integrator to `simple.Integrator` to match draft OpenTelemetry SDK specification. (#710)\n- Rename SDK `SDK` `struct` to `Accumulator` to match draft OpenTelemetry SDK specification. (#710)\n- Move `Number` from `core` to `api/metric` package. (#706)\n- Move `SpanContext` from `core` to `trace` package. (#692)\n- Change traceparent header from `Traceparent` to `traceparent` to implement the W3C specification. (#681)\n\n### Fixed\n\n- Update tooling to run generators in all submodules. (#705)\n- gRPC interceptor regexp to match methods without a service name. (#683)\n- Use a `const` for padding 64-bit B3 trace IDs. (#701)\n- Update `mockZipkin` listen address from `:0` to `127.0.0.1:0`. (#700)\n- Left-pad 64-bit B3 trace IDs with zero. (#698)\n- Propagate at least the first W3C tracestate header. (#694)\n- Remove internal `StateLocker` implementation. (#688)\n- Increase instance size CI system uses. (#690)\n- Add a `key` benchmark and use reflection in `key.Infer()`. (#679)\n- Fix internal `global` test by using `global.Meter` with `RecordBatch()`. (#680)\n- Reimplement histogram using mutex instead of `StateLocker`. (#669)\n- Switch `MinMaxSumCount` to a mutex lock implementation instead of `StateLocker`. (#667)\n- Update documentation to not include any references to `WithKeys`. (#672)\n- Correct misspelling. (#668)\n- Fix clobbering of the span context if extraction fails. (#656)\n- Bump `golangci-lint` and work around the corrupting bug. (#666) (#670)\n\n## [0.4.3] - 2020-04-24\n\n### Added\n\n- `Dockerfile` and `docker-compose.yml` to run example code. (#635)\n- New `grpctrace` package that provides gRPC client and server interceptors for both unary and stream connections. (#621)\n- New `api/label` package, providing common label set implementation. (#651)\n- Support for JSON marshaling of `Resources`. (#654)\n- `TraceID` and `SpanID` implementations for `Stringer` interface. (#642)\n- `RemoteAddrKey` in the othttp plugin to include the HTTP client address in top-level spans. (#627)\n- `WithSpanFormatter` option to the othttp plugin. (#617)\n- Updated README to include section for compatible libraries and include reference to the contrib repository. (#612)\n- The prometheus exporter now supports exporting histograms. (#601)\n- A `String` method to the `Resource` to return a hashable identifier for a now unique resource. (#613)\n- An `Iter` method to the `Resource` to return an array `AttributeIterator`. (#613)\n- An `Equal` method to the `Resource` test the equivalence of resources. (#613)\n- An iterable structure (`AttributeIterator`) for `Resource` attributes.\n\n### Changed\n\n- zipkin export's `NewExporter` now requires a `serviceName` argument to ensure this needed values is provided. (#644)\n- Pass `Resources` through the metrics export pipeline. (#659)\n\n### Removed\n\n- `WithKeys` option from the metric API. (#639)\n\n### Fixed\n\n- Use the `label.Set.Equivalent` value instead of an encoding in the batcher. (#658)\n- Correct typo `trace.Exporter` to `trace.SpanSyncer` in comments. (#653)\n- Use type names for return values in jaeger exporter. (#648)\n- Increase the visibility of the `api/key` package by updating comments and fixing usages locally. (#650)\n- `Checkpoint` only after `Update`; Keep records in the `sync.Map` longer. (#647)\n- Do not cache `reflect.ValueOf()` in metric Labels. (#649)\n- Batch metrics exported from the OTLP exporter based on `Resource` and labels. (#626)\n- Add error wrapping to the prometheus exporter. (#631)\n- Update the OTLP exporter batching of traces to use a unique `string` representation of an associated `Resource` as the batching key. (#623)\n- Update OTLP `SpanData` transform to only include the `ParentSpanID` if one exists. (#614)\n- Update `Resource` internal representation to uniquely and reliably identify resources. (#613)\n- Check return value from `CheckpointSet.ForEach` in prometheus exporter. (#622)\n- Ensure spans created by httptrace client tracer reflect operation structure. (#618)\n- Create a new recorder rather than reuse when multiple observations in same epoch for asynchronous instruments. #610\n- The default port the OTLP exporter uses to connect to the OpenTelemetry collector is updated to match the one the collector listens on by default. (#611)\n\n## [0.4.2] - 2020-03-31\n\n### Fixed\n\n- Fix `pre_release.sh` to update version in `sdk/opentelemetry.go`. (#607)\n- Fix time conversion from internal to OTLP in OTLP exporter. (#606)\n\n## [0.4.1] - 2020-03-31\n\n### Fixed\n\n- Update `tag.sh` to create signed tags. (#604)\n\n## [0.4.0] - 2020-03-30\n\n### Added\n\n- New API package `api/metric/registry` that exposes a `MeterImpl` wrapper for use by SDKs to generate unique instruments. (#580)\n- Script to verify examples after a new release. (#579)\n\n### Removed\n\n- The dogstatsd exporter due to lack of support.\n   This additionally removes support for statsd. (#591)\n- `LabelSet` from the metric API.\n   This is replaced by a `[]core.KeyValue` slice. (#595)\n- `Labels` from the metric API's `Meter` interface. (#595)\n\n### Changed\n\n- The metric `export.Labels` became an interface which the SDK implements and the `export` package provides a simple, immutable implementation of this interface intended for testing purposes. (#574)\n- Renamed `internal/metric.Meter` to `MeterImpl`. (#580)\n- Renamed `api/global/internal.obsImpl` to `asyncImpl`. (#580)\n\n### Fixed\n\n- Corrected missing return in mock span. (#582)\n- Update License header for all source files to match CNCF guidelines and include a test to ensure it is present. (#586) (#596)\n- Update to v0.3.0 of the OTLP in the OTLP exporter. (#588)\n- Update pre-release script to be compatible between GNU and BSD based systems. (#592)\n- Add a `RecordBatch` benchmark. (#594)\n- Moved span transforms of the OTLP exporter to the internal package. (#593)\n- Build both go-1.13 and go-1.14 in circleci to test for all supported versions of Go. (#569)\n- Removed unneeded allocation on empty labels in OLTP exporter. (#597)\n- Update `BatchedSpanProcessor` to process the queue until no data but respect max batch size. (#599)\n- Update project documentation godoc.org links to pkg.go.dev. (#602)\n\n## [0.3.0] - 2020-03-21\n\nThis is a first official beta release, which provides almost fully complete metrics, tracing, and context propagation functionality.\nThere is still a possibility of breaking changes.\n\n### Added\n\n- Add `Observer` metric instrument. (#474)\n- Add global `Propagators` functionality to enable deferred initialization for propagators registered before the first Meter SDK is installed. (#494)\n- Simplified export setup pipeline for the jaeger exporter to match other exporters. (#459)\n- The zipkin trace exporter. (#495)\n- The OTLP exporter to export metric and trace telemetry to the OpenTelemetry collector. (#497) (#544) (#545)\n- Add `StatusMessage` field to the trace `Span`. (#524)\n- Context propagation in OpenTracing bridge in terms of OpenTelemetry context propagation. (#525)\n- The `Resource` type was added to the SDK. (#528)\n- The global API now supports a `Tracer` and `Meter` function as shortcuts to getting a global `*Provider` and calling these methods directly. (#538)\n- The metric API now defines a generic `MeterImpl` interface to support general purpose `Meter` construction.\n   Additionally, `SyncImpl` and `AsyncImpl` are added to support general purpose instrument construction. (#560)\n- A metric `Kind` is added to represent the `MeasureKind`, `ObserverKind`, and `CounterKind`. (#560)\n- Scripts to better automate the release process. (#576)\n\n### Changed\n\n- Default to to use `AlwaysSampler` instead of `ProbabilitySampler` to match OpenTelemetry specification. (#506)\n- Renamed `AlwaysSampleSampler` to `AlwaysOnSampler` in the trace API. (#511)\n- Renamed `NeverSampleSampler` to `AlwaysOffSampler` in the trace API. (#511)\n- The `Status` field of the `Span` was changed to `StatusCode` to disambiguate with the added `StatusMessage`. (#524)\n- Updated the trace `Sampler` interface conform to the OpenTelemetry specification. (#531)\n- Rename metric API `Options` to `Config`. (#541)\n- Rename metric `Counter` aggregator to be `Sum`. (#541)\n- Unify metric options into `Option` from instrument specific options. (#541)\n- The trace API's `TraceProvider` now support `Resource`s. (#545)\n- Correct error in zipkin module name. (#548)\n- The jaeger trace exporter now supports `Resource`s. (#551)\n- Metric SDK now supports `Resource`s.\n   The `WithResource` option was added to configure a `Resource` on creation and the `Resource` method was added to the metric `Descriptor` to return the associated `Resource`. (#552)\n- Replace `ErrNoLastValue` and `ErrEmptyDataSet` by `ErrNoData` in the metric SDK. (#557)\n- The stdout trace exporter now supports `Resource`s. (#558)\n- The metric `Descriptor` is now included at the API instead of the SDK. (#560)\n- Replace `Ordered` with an iterator in `export.Labels`. (#567)\n\n### Removed\n\n- The vendor specific Stackdriver. It is now hosted on 3rd party vendor infrastructure. (#452)\n- The `Unregister` method for metric observers as it is not in the OpenTelemetry specification. (#560)\n- `GetDescriptor` from the metric SDK. (#575)\n- The `Gauge` instrument from the metric API. (#537)\n\n### Fixed\n\n- Make histogram aggregator checkpoint consistent. (#438)\n- Update README with import instructions and how to build and test. (#505)\n- The default label encoding was updated to be unique. (#508)\n- Use `NewRoot` in the othttp plugin for public endpoints. (#513)\n- Fix data race in `BatchedSpanProcessor`. (#518)\n- Skip test-386 for Mac OS 10.15.x (Catalina and upwards). #521\n- Use a variable-size array to represent ordered labels in maps. (#523)\n- Update the OTLP protobuf and update changed import path. (#532)\n- Use `StateLocker` implementation in `MinMaxSumCount`. (#546)\n- Eliminate goroutine leak in histogram stress test. (#547)\n- Update OTLP exporter with latest protobuf. (#550)\n- Add filters to the othttp plugin. (#556)\n- Provide an implementation of the `Header*` filters that do not depend on Go 1.14. (#565)\n- Encode labels once during checkpoint.\n   The checkpoint function is executed in a single thread so we can do the encoding lazily before passing the encoded version of labels to the exporter.\n   This is a cheap and quick way to avoid encoding the labels on every collection interval. (#572)\n- Run coverage over all packages in `COVERAGE_MOD_DIR`. (#573)\n\n## [0.2.3] - 2020-03-04\n\n### Added\n\n- `RecordError` method on `Span`s in the trace API to Simplify adding error events to spans. (#473)\n- Configurable push frequency for exporters setup pipeline. (#504)\n\n### Changed\n\n- Rename the `exporter` directory to `exporters`.\n   The `go.opentelemetry.io/otel/exporter/trace/jaeger` package was mistakenly released with a `v1.0.0` tag instead of `v0.1.0`.\n   This resulted in all subsequent releases not becoming the default latest.\n   A consequence of this was that all `go get`s pulled in the incompatible `v0.1.0` release of that package when pulling in more recent packages from other otel packages.\n   Renaming the `exporter` directory to `exporters` fixes this issue by renaming the package and therefore clearing any existing dependency tags.\n   Consequentially, this action also renames *all* exporter packages. (#502)\n\n### Removed\n\n- The `CorrelationContextHeader` constant in the `correlation` package is no longer exported. (#503)\n\n## [0.2.2] - 2020-02-27\n\n### Added\n\n- `HTTPSupplier` interface in the propagation API to specify methods to retrieve and store a single value for a key to be associated with a carrier. (#467)\n- `HTTPExtractor` interface in the propagation API to extract information from an `HTTPSupplier` into a context. (#467)\n- `HTTPInjector` interface in the propagation API to inject information into an `HTTPSupplier.` (#467)\n- `Config` and configuring `Option` to the propagator API. (#467)\n- `Propagators` interface in the propagation API to contain the set of injectors and extractors for all supported carrier formats. (#467)\n- `HTTPPropagator` interface in the propagation API to inject and extract from an `HTTPSupplier.` (#467)\n- `WithInjectors` and `WithExtractors` functions to the propagator API to configure injectors and extractors to use. (#467)\n- `ExtractHTTP` and `InjectHTTP` functions to apply configured HTTP extractors and injectors to a passed context. (#467)\n- Histogram aggregator. (#433)\n- `DefaultPropagator` function and have it return `trace.TraceContext` as the default context propagator. (#456)\n- `AlwaysParentSample` sampler to the trace API. (#455)\n- `WithNewRoot` option function to the trace API to specify the created span should be considered a root span. (#451)\n\n### Changed\n\n- Renamed `WithMap` to `ContextWithMap` in the correlation package. (#481)\n- Renamed `FromContext` to `MapFromContext` in the correlation package. (#481)\n- Move correlation context propagation to correlation package. (#479)\n- Do not default to putting remote span context into links. (#480)\n- `Tracer.WithSpan` updated to accept `StartOptions`. (#472)\n- Renamed `MetricKind` to `Kind` to not stutter in the type usage. (#432)\n- Renamed the `export` package to `metric` to match directory structure. (#432)\n- Rename the `api/distributedcontext` package to `api/correlation`. (#444)\n- Rename the `api/propagators` package to `api/propagation`. (#444)\n- Move the propagators from the `propagators` package into the `trace` API package. (#444)\n- Update `Float64Gauge`, `Int64Gauge`, `Float64Counter`, `Int64Counter`, `Float64Measure`, and `Int64Measure` metric methods to use value receivers instead of pointers. (#462)\n- Moved all dependencies of tools package to a tools directory. (#466)\n\n### Removed\n\n- Binary propagators. (#467)\n- NOOP propagator. (#467)\n\n### Fixed\n\n- Upgraded `github.com/golangci/golangci-lint` from `v1.21.0` to `v1.23.6` in `tools/`. (#492)\n- Fix a possible nil-dereference crash (#478)\n- Correct comments for `InstallNewPipeline` in the stdout exporter. (#483)\n- Correct comments for `InstallNewPipeline` in the dogstatsd exporter. (#484)\n- Correct comments for `InstallNewPipeline` in the prometheus exporter. (#482)\n- Initialize `onError` based on `Config` in prometheus exporter. (#486)\n- Correct module name in prometheus exporter README. (#475)\n- Removed tracer name prefix from span names. (#430)\n- Fix `aggregator_test.go` import package comment. (#431)\n- Improved detail in stdout exporter. (#436)\n- Fix a dependency issue (generate target should depend on stringer, not lint target) in Makefile. (#442)\n- Reorders the Makefile targets within `precommit` target so we generate files and build the code before doing linting, so we can get much nicer errors about syntax errors from the compiler. (#442)\n- Reword function documentation in gRPC plugin. (#446)\n- Send the `span.kind` tag to Jaeger from the jaeger exporter. (#441)\n- Fix `metadataSupplier` in the jaeger exporter to overwrite the header if existing instead of appending to it. (#441)\n- Upgraded to Go 1.13 in CI. (#465)\n- Correct opentelemetry.io URL in trace SDK documentation. (#464)\n- Refactored reference counting logic in SDK determination of stale records. (#468)\n- Add call to `runtime.Gosched` in instrument `acquireHandle` logic to not block the collector. (#469)\n\n## [0.2.1.1] - 2020-01-13\n\n### Fixed\n\n- Use stateful batcher on Prometheus exporter fixing regression introduced in #395. (#428)\n\n## [0.2.1] - 2020-01-08\n\n### Added\n\n- Global meter forwarding implementation.\n   This enables deferred initialization for metric instruments registered before the first Meter SDK is installed. (#392)\n- Global trace forwarding implementation.\n   This enables deferred initialization for tracers registered before the first Trace SDK is installed. (#406)\n- Standardize export pipeline creation in all exporters. (#395)\n- A testing, organization, and comments for 64-bit field alignment. (#418)\n- Script to tag all modules in the project. (#414)\n\n### Changed\n\n- Renamed `propagation` package to `propagators`. (#362)\n- Renamed `B3Propagator` propagator to `B3`. (#362)\n- Renamed `TextFormatPropagator` propagator to `TextFormat`. (#362)\n- Renamed `BinaryPropagator` propagator to `Binary`. (#362)\n- Renamed `BinaryFormatPropagator` propagator to `BinaryFormat`. (#362)\n- Renamed `NoopTextFormatPropagator` propagator to `NoopTextFormat`. (#362)\n- Renamed `TraceContextPropagator` propagator to `TraceContext`. (#362)\n- Renamed `SpanOption` to `StartOption` in the trace API. (#369)\n- Renamed `StartOptions` to `StartConfig` in the trace API. (#369)\n- Renamed `EndOptions` to `EndConfig` in the trace API. (#369)\n- `Number` now has a pointer receiver for its methods. (#375)\n- Renamed `CurrentSpan` to `SpanFromContext` in the trace API. (#379)\n- Renamed `SetCurrentSpan` to `ContextWithSpan` in the trace API. (#379)\n- Renamed `Message` in Event to `Name` in the trace API. (#389)\n- Prometheus exporter no longer aggregates metrics, instead it only exports them. (#385)\n- Renamed `HandleImpl` to `BoundInstrumentImpl` in the metric API. (#400)\n- Renamed `Float64CounterHandle` to `Float64CounterBoundInstrument` in the metric API. (#400)\n- Renamed `Int64CounterHandle` to `Int64CounterBoundInstrument` in the metric API. (#400)\n- Renamed `Float64GaugeHandle` to `Float64GaugeBoundInstrument` in the metric API. (#400)\n- Renamed `Int64GaugeHandle` to `Int64GaugeBoundInstrument` in the metric API. (#400)\n- Renamed `Float64MeasureHandle` to `Float64MeasureBoundInstrument` in the metric API. (#400)\n- Renamed `Int64MeasureHandle` to `Int64MeasureBoundInstrument` in the metric API. (#400)\n- Renamed `Release` method for bound instruments in the metric API to `Unbind`. (#400)\n- Renamed `AcquireHandle` method for bound instruments in the metric API to `Bind`. (#400)\n- Renamed the `File` option in the stdout exporter to `Writer`. (#404)\n- Renamed all `Options` to `Config` for all metric exports where this wasn't already the case.\n\n### Fixed\n\n- Aggregator import path corrected. (#421)\n- Correct links in README. (#368)\n- The README was updated to match latest code changes in its examples. (#374)\n- Don't capitalize error statements. (#375)\n- Fix ignored errors. (#375)\n- Fix ambiguous variable naming. (#375)\n- Removed unnecessary type casting. (#375)\n- Use named parameters. (#375)\n- Updated release schedule. (#378)\n- Correct http-stackdriver example module name. (#394)\n- Removed the `http.request` span in `httptrace` package. (#397)\n- Add comments in the metrics SDK (#399)\n- Initialize checkpoint when creating ddsketch aggregator to prevent panic when merging into a empty one. (#402) (#403)\n- Add documentation of compatible exporters in the README. (#405)\n- Typo fix. (#408)\n- Simplify span check logic in SDK tracer implementation. (#419)\n\n## [0.2.0] - 2019-12-03\n\n### Added\n\n- Unary gRPC tracing example. (#351)\n- Prometheus exporter. (#334)\n- Dogstatsd metrics exporter. (#326)\n\n### Changed\n\n- Rename `MaxSumCount` aggregation to `MinMaxSumCount` and add the `Min` interface for this aggregation. (#352)\n- Rename `GetMeter` to `Meter`. (#357)\n- Rename `HTTPTraceContextPropagator` to `TraceContextPropagator`. (#355)\n- Rename `HTTPB3Propagator` to `B3Propagator`. (#355)\n- Rename `HTTPTraceContextPropagator` to `TraceContextPropagator`. (#355)\n- Move `/global` package to `/api/global`. (#356)\n- Rename `GetTracer` to `Tracer`. (#347)\n\n### Removed\n\n- `SetAttribute` from the `Span` interface in the trace API. (#361)\n- `AddLink` from the `Span` interface in the trace API. (#349)\n- `Link` from the `Span` interface in the trace API. (#349)\n\n### Fixed\n\n- Exclude example directories from coverage report. (#365)\n- Lint make target now implements automatic fixes with `golangci-lint` before a second run to report the remaining issues. (#360)\n- Drop `GO111MODULE` environment variable in Makefile as Go 1.13 is the project specified minimum version and this is environment variable is not needed for that version of Go. (#359)\n- Run the race checker for all test. (#354)\n- Redundant commands in the Makefile are removed. (#354)\n- Split the `generate` and `lint` targets of the Makefile. (#354)\n- Renames `circle-ci` target to more generic `ci` in Makefile. (#354)\n- Add example Prometheus binary to gitignore. (#358)\n- Support negative numbers with the `MaxSumCount`. (#335)\n- Resolve race conditions in `push_test.go` identified in #339. (#340)\n- Use `/usr/bin/env bash` as a shebang in scripts rather than `/bin/bash`. (#336)\n- Trace benchmark now tests both `AlwaysSample` and `NeverSample`.\n   Previously it was testing `AlwaysSample` twice. (#325)\n- Trace benchmark now uses a `[]byte` for `TraceID` to fix failing test. (#325)\n- Added a trace benchmark to test variadic functions in `setAttribute` vs `setAttributes` (#325)\n- The `defaultkeys` batcher was only using the encoded label set as its map key while building a checkpoint.\n   This allowed distinct label sets through, but any metrics sharing a label set could be overwritten or merged incorrectly.\n   This was corrected. (#333)\n\n## [0.1.2] - 2019-11-18\n\n### Fixed\n\n- Optimized the `simplelru` map for attributes to reduce the number of allocations. (#328)\n- Removed unnecessary unslicing of parameters that are already a slice. (#324)\n\n## [0.1.1] - 2019-11-18\n\nThis release contains a Metrics SDK with stdout exporter and supports basic aggregations such as counter, gauges, array, maxsumcount, and ddsketch.\n\n### Added\n\n- Metrics stdout export pipeline. (#265)\n- Array aggregation for raw measure metrics. (#282)\n- The core.Value now have a `MarshalJSON` method. (#281)\n\n### Removed\n\n- `WithService`, `WithResources`, and `WithComponent` methods of tracers. (#314)\n- Prefix slash in `Tracer.Start()` for the Jaeger example. (#292)\n\n### Changed\n\n- Allocation in LabelSet construction to reduce GC overhead. (#318)\n- `trace.WithAttributes` to append values instead of replacing (#315)\n- Use a formula for tolerance in sampling tests. (#298)\n- Move export types into trace and metric-specific sub-directories. (#289)\n- `SpanKind` back to being based on an `int` type. (#288)\n\n### Fixed\n\n- URL to OpenTelemetry website in README. (#323)\n- Name of othttp default tracer. (#321)\n- `ExportSpans` for the stackdriver exporter now handles `nil` context. (#294)\n- CI modules cache to correctly restore/save from/to the cache. (#316)\n- Fix metric SDK race condition between `LoadOrStore` and the assignment `rec.recorder = i.meter.exporter.AggregatorFor(rec)`. (#293)\n- README now reflects the new code structure introduced with these changes. (#291)\n- Make the basic example work. (#279)\n\n## [0.1.0] - 2019-11-04\n\nThis is the first release of open-telemetry go library.\nIt contains api and sdk for trace and meter.\n\n### Added\n\n- Initial OpenTelemetry trace and metric API prototypes.\n- Initial OpenTelemetry trace, metric, and export SDK packages.\n- A wireframe bridge to support compatibility with OpenTracing.\n- Example code for a basic, http-stackdriver, http, jaeger, and named tracer setup.\n- Exporters for Jaeger, Stackdriver, and stdout.\n- Propagators for binary, B3, and trace-context protocols.\n- Project information and guidelines in the form of a README and CONTRIBUTING.\n- Tools to build the project and a Makefile to automate the process.\n- Apache-2.0 license.\n- CircleCI build CI manifest files.\n- CODEOWNERS file to track owners of this project.\n\n[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...HEAD\n[1.35.0/0.57.0/0.11.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.35.0\n[1.34.0/0.56.0/0.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.34.0\n[1.33.0/0.55.0/0.9.0/0.0.12]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.33.0\n[1.32.0/0.54.0/0.8.0/0.0.11]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.32.0\n[1.31.0/0.53.0/0.7.0/0.0.10]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.31.0\n[1.30.0/0.52.0/0.6.0/0.0.9]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.30.0\n[1.29.0/0.51.0/0.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.29.0\n[1.28.0/0.50.0/0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.28.0\n[1.27.0/0.49.0/0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.27.0\n[1.26.0/0.48.0/0.2.0-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.26.0\n[1.25.0/0.47.0/0.0.8/0.1.0-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.25.0\n[1.24.0/0.46.0/0.0.1-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.24.0\n[1.23.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.1\n[1.23.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.0\n[1.23.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.0-rc.1\n[1.22.0/0.45.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.22.0\n[1.21.0/0.44.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.21.0\n[1.20.0/0.43.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.20.0\n[1.19.0/0.42.0/0.0.7]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.19.0\n[1.19.0-rc.1/0.42.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.19.0-rc.1\n[1.18.0/0.41.0/0.0.6]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.18.0\n[1.17.0/0.40.0/0.0.5]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.17.0\n[1.16.0/0.39.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.16.0\n[1.16.0-rc.1/0.39.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.16.0-rc.1\n[1.15.1/0.38.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.1\n[1.15.0/0.38.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.0\n[1.15.0-rc.2/0.38.0-rc.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.0-rc.2\n[1.15.0-rc.1/0.38.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.0-rc.1\n[1.14.0/0.37.0/0.0.4]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.14.0\n[1.13.0/0.36.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.13.0\n[1.12.0/0.35.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.12.0\n[1.11.2/0.34.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.11.2\n[1.11.1/0.33.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.11.1\n[1.11.0/0.32.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.11.0\n[0.32.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/metric/v0.32.2\n[0.32.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/metric/v0.32.1\n[0.32.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/metric/v0.32.0\n[1.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.10.0\n[1.9.0/0.0.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.9.0\n[1.8.0/0.31.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.8.0\n[1.7.0/0.30.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.7.0\n[0.29.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/metric/v0.29.0\n[1.6.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.3\n[1.6.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.2\n[1.6.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.1\n[1.6.0/0.28.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.0\n[1.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.5.0\n[1.4.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.4.1\n[1.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.4.0\n[1.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.3.0\n[1.2.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.2.0\n[1.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.1.0\n[1.0.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.1\n[Metrics 0.24.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/metric/v0.24.0\n[1.0.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0\n[1.0.0-RC3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0-RC3\n[1.0.0-RC2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0-RC2\n[Experimental Metrics v0.22.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/metric/v0.22.0\n[1.0.0-RC1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0-RC1\n[0.20.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.20.0\n[0.19.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.19.0\n[0.18.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.18.0\n[0.17.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.17.0\n[0.16.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.16.0\n[0.15.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.15.0\n[0.14.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.14.0\n[0.13.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.13.0\n[0.12.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.12.0\n[0.11.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.11.0\n[0.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.10.0\n[0.9.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.9.0\n[0.8.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.8.0\n[0.7.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.7.0\n[0.6.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.6.0\n[0.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.5.0\n[0.4.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.3\n[0.4.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.2\n[0.4.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.1\n[0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.0\n[0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.3.0\n[0.2.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.3\n[0.2.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.2\n[0.2.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.1.1\n[0.2.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.1\n[0.2.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.0\n[0.1.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.2\n[0.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.1\n[0.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.0\n\n<!-- Released section ended -->\n\n[Go 1.24]: https://go.dev/doc/go1.24\n[Go 1.23]: https://go.dev/doc/go1.23\n[Go 1.22]: https://go.dev/doc/go1.22\n[Go 1.21]: https://go.dev/doc/go1.21\n[Go 1.20]: https://go.dev/doc/go1.20\n[Go 1.19]: https://go.dev/doc/go1.19\n[Go 1.18]: https://go.dev/doc/go1.18\n\n[metric API]:https://pkg.go.dev/go.opentelemetry.io/otel/metric\n[metric SDK]:https://pkg.go.dev/go.opentelemetry.io/otel/sdk/metric\n[trace API]:https://pkg.go.dev/go.opentelemetry.io/otel/trace\n\n[GO-2024-2687]: https://pkg.go.dev/vuln/GO-2024-2687\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/CODEOWNERS",
    "content": "#####################################################\n#\n# List of approvers for this repository\n#\n#####################################################\n#\n# Learn about membership in OpenTelemetry community:\n#  https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md\n#\n#\n# Learn about CODEOWNERS file format:\n#  https://help.github.com/en/articles/about-code-owners\n#\n\n* @MrAlias @XSAM @dashpole @pellared @dmathieu\n\nCODEOWNERS @MrAlias @pellared @dashpole @XSAM @dmathieu\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/CONTRIBUTING.md",
    "content": "# Contributing to opentelemetry-go\n\nThe Go special interest group (SIG) meets regularly. See the\nOpenTelemetry\n[community](https://github.com/open-telemetry/community#golang-sdk)\nrepo for information on this and other language SIGs.\n\nSee the [public meeting\nnotes](https://docs.google.com/document/d/1E5e7Ld0NuU1iVvf-42tOBpu2VBBLYnh73GJuITGJTTU/edit)\nfor a summary description of past meetings. To request edit access,\njoin the meeting or get in touch on\n[Slack](https://cloud-native.slack.com/archives/C01NPAXACKT).\n\n## Development\n\nYou can view and edit the source code by cloning this repository:\n\n```sh\ngit clone https://github.com/open-telemetry/opentelemetry-go.git\n```\n\nRun `make test` to run the tests instead of `go test`.\n\nThere are some generated files checked into the repo. To make sure\nthat the generated files are up-to-date, run `make` (or `make\nprecommit` - the `precommit` target is the default).\n\nThe `precommit` target also fixes the formatting of the code and\nchecks the status of the go module files.\n\nAdditionally, there is a `codespell` target that checks for common\ntypos in the code. It is not run by default, but you can run it\nmanually with `make codespell`. It will set up a virtual environment\nin `venv` and install `codespell` there.\n\nIf after running `make precommit` the output of `git status` contains\n`nothing to commit, working tree clean` then it means that everything\nis up-to-date and properly formatted.\n\n## Pull Requests\n\n### How to Send Pull Requests\n\nEveryone is welcome to contribute code to `opentelemetry-go` via\nGitHub pull requests (PRs).\n\nTo create a new PR, fork the project in GitHub and clone the upstream\nrepo:\n\n```sh\ngo get -d go.opentelemetry.io/otel\n```\n\n(This may print some warning about \"build constraints exclude all Go\nfiles\", just ignore it.)\n\nThis will put the project in `${GOPATH}/src/go.opentelemetry.io/otel`. You\ncan alternatively use `git` directly with:\n\n```sh\ngit clone https://github.com/open-telemetry/opentelemetry-go\n```\n\n(Note that `git clone` is *not* using the `go.opentelemetry.io/otel` name -\nthat name is a kind of a redirector to GitHub that `go get` can\nunderstand, but `git` does not.)\n\nThis would put the project in the `opentelemetry-go` directory in\ncurrent working directory.\n\nEnter the newly created directory and add your fork as a new remote:\n\n```sh\ngit remote add <YOUR_FORK> git@github.com:<YOUR_GITHUB_USERNAME>/opentelemetry-go\n```\n\nCheck out a new branch, make modifications, run linters and tests, update\n`CHANGELOG.md`, and push the branch to your fork:\n\n```sh\ngit checkout -b <YOUR_BRANCH_NAME>\n# edit files\n# update changelog\nmake precommit\ngit add -p\ngit commit\ngit push <YOUR_FORK> <YOUR_BRANCH_NAME>\n```\n\nOpen a pull request against the main `opentelemetry-go` repo. Be sure to add the pull\nrequest ID to the entry you added to `CHANGELOG.md`.\n\nAvoid rebasing and force-pushing to your branch to facilitate reviewing the pull request.\nRewriting Git history makes it difficult to keep track of iterations during code review.\nAll pull requests are squashed to a single commit upon merge to `main`.\n\n### How to Receive Comments\n\n* If the PR is not ready for review, please put `[WIP]` in the title,\n  tag it as `work-in-progress`, or mark it as\n  [`draft`](https://github.blog/2019-02-14-introducing-draft-pull-requests/).\n* Make sure CLA is signed and CI is clear.\n\n### How to Get PRs Merged\n\nA PR is considered **ready to merge** when:\n\n* It has received two qualified approvals[^1].\n\n  This is not enforced through automation, but needs to be validated by the\n  maintainer merging.\n  * The qualified approvals need to be from [Approver]s/[Maintainer]s\n    affiliated with different companies. Two qualified approvals from\n    [Approver]s or [Maintainer]s affiliated with the same company counts as a\n    single qualified approval.\n  * PRs introducing changes that have already been discussed and consensus\n    reached only need one qualified approval. The discussion and resolution\n    needs to be linked to the PR.\n  * Trivial changes[^2] only need one qualified approval.\n\n* All feedback has been addressed.\n  * All PR comments and suggestions are resolved.\n  * All GitHub Pull Request reviews with a status of \"Request changes\" have\n    been addressed. Another review by the objecting reviewer with a different\n    status can be submitted to clear the original review, or the review can be\n    dismissed by a [Maintainer] when the issues from the original review have\n    been addressed.\n  * Any comments or reviews that cannot be resolved between the PR author and\n    reviewers can be submitted to the community [Approver]s and [Maintainer]s\n    during the weekly SIG meeting. If consensus is reached among the\n    [Approver]s and [Maintainer]s during the SIG meeting the objections to the\n    PR may be dismissed or resolved or the PR closed by a [Maintainer].\n  * Any substantive changes to the PR require existing Approval reviews be\n    cleared unless the approver explicitly states that their approval persists\n    across changes. This includes changes resulting from other feedback.\n    [Approver]s and [Maintainer]s can help in clearing reviews and they should\n    be consulted if there are any questions.\n\n* The PR branch is up to date with the base branch it is merging into.\n  * To ensure this does not block the PR, it should be configured to allow\n    maintainers to update it.\n\n* It has been open for review for at least one working day. This gives people\n  reasonable time to review.\n  * Trivial changes[^2] do not have to wait for one day and may be merged with\n    a single [Maintainer]'s approval.\n\n* All required GitHub workflows have succeeded.\n* Urgent fix can take exception as long as it has been actively communicated\n  among [Maintainer]s.\n\nAny [Maintainer] can merge the PR once the above criteria have been met.\n\n[^1]: A qualified approval is a GitHub Pull Request review with \"Approve\"\n  status from an OpenTelemetry Go [Approver] or [Maintainer].\n[^2]: Trivial changes include: typo corrections, cosmetic non-substantive\n  changes, documentation corrections or updates, dependency updates, etc.\n\n## Design Choices\n\nAs with other OpenTelemetry clients, opentelemetry-go follows the\n[OpenTelemetry Specification](https://opentelemetry.io/docs/specs/otel).\n\nIt's especially valuable to read through the [library\nguidelines](https://opentelemetry.io/docs/specs/otel/library-guidelines).\n\n### Focus on Capabilities, Not Structure Compliance\n\nOpenTelemetry is an evolving specification, one where the desires and\nuse cases are clear, but the method to satisfy those uses cases are\nnot.\n\nAs such, Contributions should provide functionality and behavior that\nconforms to the specification, but the interface and structure is\nflexible.\n\nIt is preferable to have contributions follow the idioms of the\nlanguage rather than conform to specific API names or argument\npatterns in the spec.\n\nFor a deeper discussion, see\n[this](https://github.com/open-telemetry/opentelemetry-specification/issues/165).\n\n## Tests\n\nEach functionality should be covered by tests.\n\nPerformance-critical functionality should also be covered by benchmarks.\n\n- Pull requests adding a performance-critical functionality\nshould have `go test -bench` output in their description.\n- Pull requests changing a performance-critical functionality\nshould have [`benchstat`](https://pkg.go.dev/golang.org/x/perf/cmd/benchstat)\noutput in their description.\n\n## Documentation\n\nEach (non-internal, non-test) package must be documented using\n[Go Doc Comments](https://go.dev/doc/comment),\npreferably in a `doc.go` file.\n\nPrefer using [Examples](https://pkg.go.dev/testing#hdr-Examples)\ninstead of putting code snippets in Go doc comments.\nIn some cases, you can even create [Testable Examples](https://go.dev/blog/examples).\n\nYou can install and run a \"local Go Doc site\" in the following way:\n\n  ```sh\n  go install golang.org/x/pkgsite/cmd/pkgsite@latest\n  pkgsite\n  ```\n\n[`go.opentelemetry.io/otel/metric`](https://pkg.go.dev/go.opentelemetry.io/otel/metric)\nis an example of a very well-documented package.\n\n### README files\n\nEach (non-internal, non-test, non-documentation) package must contain a\n`README.md` file containing at least a title, and a `pkg.go.dev` badge.\n\nThe README should not be a repetition of Go doc comments.\n\nYou can verify the presence of all README files with the `make verify-readmes`\ncommand.\n\n## Style Guide\n\nOne of the primary goals of this project is that it is actually used by\ndevelopers. With this goal in mind the project strives to build\nuser-friendly and idiomatic Go code adhering to the Go community's best\npractices.\n\nFor a non-comprehensive but foundational overview of these best practices\nthe [Effective Go](https://golang.org/doc/effective_go.html) documentation\nis an excellent starting place.\n\nAs a convenience for developers building this project the `make precommit`\nwill format, lint, validate, and in some cases fix the changes you plan to\nsubmit. This check will need to pass for your changes to be able to be\nmerged.\n\nIn addition to idiomatic Go, the project has adopted certain standards for\nimplementations of common patterns. These standards should be followed as a\ndefault, and if they are not followed documentation needs to be included as\nto the reasons why.\n\n### Configuration\n\nWhen creating an instantiation function for a complex `type T struct`, it is\nuseful to allow variable number of options to be applied. However, the strong\ntype system of Go restricts the function design options. There are a few ways\nto solve this problem, but we have landed on the following design.\n\n#### `config`\n\nConfiguration should be held in a `struct` named `config`, or prefixed with\nspecific type name this Configuration applies to if there are multiple\n`config` in the package. This type must contain configuration options.\n\n```go\n// config contains configuration options for a thing.\ntype config struct {\n\t// options ...\n}\n```\n\nIn general the `config` type will not need to be used externally to the\npackage and should be unexported. If, however, it is expected that the user\nwill likely want to build custom options for the configuration, the `config`\nshould be exported. Please, include in the documentation for the `config`\nhow the user can extend the configuration.\n\nIt is important that internal `config` are not shared across package boundaries.\nMeaning a `config` from one package should not be directly used by another. The\none exception is the API packages.  The configs from the base API, eg.\n`go.opentelemetry.io/otel/trace.TracerConfig` and\n`go.opentelemetry.io/otel/metric.InstrumentConfig`, are intended to be consumed\nby the SDK therefore it is expected that these are exported.\n\nWhen a config is exported we want to maintain forward and backward\ncompatibility, to achieve this no fields should be exported but should\ninstead be accessed by methods.\n\nOptionally, it is common to include a `newConfig` function (with the same\nnaming scheme). This function wraps any defaults setting and looping over\nall options to create a configured `config`.\n\n```go\n// newConfig returns an appropriately configured config.\nfunc newConfig(options ...Option) config {\n\t// Set default values for config.\n\tconfig := config{/* […] */}\n\tfor _, option := range options {\n\t\tconfig = option.apply(config)\n\t}\n\t// Perform any validation here.\n\treturn config\n}\n```\n\nIf validation of the `config` options is also performed this can return an\nerror as well that is expected to be handled by the instantiation function\nor propagated to the user.\n\nGiven the design goal of not having the user need to work with the `config`,\nthe `newConfig` function should also be unexported.\n\n#### `Option`\n\nTo set the value of the options a `config` contains, a corresponding\n`Option` interface type should be used.\n\n```go\ntype Option interface {\n\tapply(config) config\n}\n```\n\nHaving `apply` unexported makes sure that it will not be used externally.\nMoreover, the interface becomes sealed so the user cannot easily implement\nthe interface on its own.\n\nThe `apply` method should return a modified version of the passed config.\nThis approach, instead of passing a pointer, is used to prevent the config from being allocated to the heap.\n\nThe name of the interface should be prefixed in the same way the\ncorresponding `config` is (if at all).\n\n#### Options\n\nAll user configurable options for a `config` must have a related unexported\nimplementation of the `Option` interface and an exported configuration\nfunction that wraps this implementation.\n\nThe wrapping function name should be prefixed with `With*` (or in the\nspecial case of a boolean options `Without*`) and should have the following\nfunction signature.\n\n```go\nfunc With*(…) Option { … }\n```\n\n##### `bool` Options\n\n```go\ntype defaultFalseOption bool\n\nfunc (o defaultFalseOption) apply(c config) config {\n\tc.Bool = bool(o)\n    return c\n}\n\n// WithOption sets a T to have an option included.\nfunc WithOption() Option {\n\treturn defaultFalseOption(true)\n}\n```\n\n```go\ntype defaultTrueOption bool\n\nfunc (o defaultTrueOption) apply(c config) config {\n\tc.Bool = bool(o)\n    return c\n}\n\n// WithoutOption sets a T to have Bool option excluded.\nfunc WithoutOption() Option {\n\treturn defaultTrueOption(false)\n}\n```\n\n##### Declared Type Options\n\n```go\ntype myTypeOption struct {\n\tMyType MyType\n}\n\nfunc (o myTypeOption) apply(c config) config {\n\tc.MyType = o.MyType\n    return c\n}\n\n// WithMyType sets T to have include MyType.\nfunc WithMyType(t MyType) Option {\n\treturn myTypeOption{t}\n}\n```\n\n##### Functional Options\n\n```go\ntype optionFunc func(config) config\n\nfunc (fn optionFunc) apply(c config) config {\n\treturn fn(c)\n}\n\n// WithMyType sets t as MyType.\nfunc WithMyType(t MyType) Option {\n\treturn optionFunc(func(c config) config {\n\t\tc.MyType = t\n        return c\n\t})\n}\n```\n\n#### Instantiation\n\nUsing this configuration pattern to configure instantiation with a `NewT`\nfunction.\n\n```go\nfunc NewT(options ...Option) T {…}\n```\n\nAny required parameters can be declared before the variadic `options`.\n\n#### Dealing with Overlap\n\nSometimes there are multiple complex `struct` that share common\nconfiguration and also have distinct configuration. To avoid repeated\nportions of `config`s, a common `config` can be used with the union of\noptions being handled with the `Option` interface.\n\nFor example.\n\n```go\n// config holds options for all animals.\ntype config struct {\n\tWeight      float64\n\tColor       string\n\tMaxAltitude float64\n}\n\n// DogOption apply Dog specific options.\ntype DogOption interface {\n\tapplyDog(config) config\n}\n\n// BirdOption apply Bird specific options.\ntype BirdOption interface {\n\tapplyBird(config) config\n}\n\n// Option apply options for all animals.\ntype Option interface {\n\tBirdOption\n\tDogOption\n}\n\ntype weightOption float64\n\nfunc (o weightOption) applyDog(c config) config {\n\tc.Weight = float64(o)\n\treturn c\n}\n\nfunc (o weightOption) applyBird(c config) config {\n\tc.Weight = float64(o)\n\treturn c\n}\n\nfunc WithWeight(w float64) Option { return weightOption(w) }\n\ntype furColorOption string\n\nfunc (o furColorOption) applyDog(c config) config {\n\tc.Color = string(o)\n\treturn c\n}\n\nfunc WithFurColor(c string) DogOption { return furColorOption(c) }\n\ntype maxAltitudeOption float64\n\nfunc (o maxAltitudeOption) applyBird(c config) config {\n\tc.MaxAltitude = float64(o)\n\treturn c\n}\n\nfunc WithMaxAltitude(a float64) BirdOption { return maxAltitudeOption(a) }\n\nfunc NewDog(name string, o ...DogOption) Dog    {…}\nfunc NewBird(name string, o ...BirdOption) Bird {…}\n```\n\n### Interfaces\n\nTo allow other developers to better comprehend the code, it is important\nto ensure it is sufficiently documented. One simple measure that contributes\nto this aim is self-documenting by naming method parameters. Therefore,\nwhere appropriate, methods of every exported interface type should have\ntheir parameters appropriately named.\n\n#### Interface Stability\n\nAll exported stable interfaces that include the following warning in their\ndocumentation are allowed to be extended with additional methods.\n\n> Warning: methods may be added to this interface in minor releases.\n\nThese interfaces are defined by the OpenTelemetry specification and will be\nupdated as the specification evolves.\n\nOtherwise, stable interfaces MUST NOT be modified.\n\n#### How to Change Specification Interfaces\n\nWhen an API change must be made, we will update the SDK with the new method one\nrelease before the API change. This will allow the SDK one version before the\nAPI change to work seamlessly with the new API.\n\nIf an incompatible version of the SDK is used with the new API the application\nwill fail to compile.\n\n#### How Not to Change Specification Interfaces\n\nWe have explored using a v2 of the API to change interfaces and found that there\nwas no way to introduce a v2 and have it work seamlessly with the v1 of the API.\nProblems happened with libraries that upgraded to v2 when an application did not,\nand would not produce any telemetry.\n\nMore detail of the approaches considered and their limitations can be found in\nthe [Use a V2 API to evolve interfaces](https://github.com/open-telemetry/opentelemetry-go/issues/3920)\nissue.\n\n#### How to Change Other Interfaces\n\nIf new functionality is needed for an interface that cannot be changed it MUST\nbe added by including an additional interface. That added interface can be a\nsimple interface for the specific functionality that you want to add or it can\nbe a super-set of the original interface. For example, if you wanted to a\n`Close` method to the `Exporter` interface:\n\n```go\ntype Exporter interface {\n\tExport()\n}\n```\n\nA new interface, `Closer`, can be added:\n\n```go\ntype Closer interface {\n\tClose()\n}\n```\n\nCode that is passed the `Exporter` interface can now check to see if the passed\nvalue also satisfies the new interface. E.g.\n\n```go\nfunc caller(e Exporter) {\n\t/* ... */\n\tif c, ok := e.(Closer); ok {\n\t\tc.Close()\n\t}\n\t/* ... */\n}\n```\n\nAlternatively, a new type that is the super-set of an `Exporter` can be created.\n\n```go\ntype ClosingExporter struct {\n\tExporter\n\tClose()\n}\n```\n\nThis new type can be used similar to the simple interface above in that a\npassed `Exporter` type can be asserted to satisfy the `ClosingExporter` type\nand the `Close` method called.\n\nThis super-set approach can be useful if there is explicit behavior that needs\nto be coupled with the original type and passed as a unified type to a new\nfunction, but, because of this coupling, it also limits the applicability of\nthe added functionality. If there exist other interfaces where this\nfunctionality should be added, each one will need their own super-set\ninterfaces and will duplicate the pattern. For this reason, the simple targeted\ninterface that defines the specific functionality should be preferred.\n\nSee also:\n[Keeping Your Modules Compatible: Working with interfaces](https://go.dev/blog/module-compatibility#working-with-interfaces).\n\n### Testing\n\nThe tests should never leak goroutines.\n\nUse the term `ConcurrentSafe` in the test name when it aims to verify the\nabsence of race conditions. The top-level tests with this term will be run\nmany times in the `test-concurrent-safe` CI job to increase the chance of\ncatching concurrency issues. This does not apply to subtests when this term\nis not in their root name.\n\n### Internal packages\n\nThe use of internal packages should be scoped to a single module. A sub-module\nshould never import from a parent internal package. This creates a coupling\nbetween the two modules where a user can upgrade the parent without the child\nand if the internal package API has changed it will fail to upgrade[^3].\n\nThere are two known exceptions to this rule:\n\n- `go.opentelemetry.io/otel/internal/global`\n  - This package manages global state for all of opentelemetry-go. It needs to\n  be a single package in order to ensure the uniqueness of the global state.\n- `go.opentelemetry.io/otel/internal/baggage`\n  - This package provides values in a `context.Context` that need to be\n  recognized by `go.opentelemetry.io/otel/baggage` and\n  `go.opentelemetry.io/otel/bridge/opentracing` but remain private.\n\nIf you have duplicate code in multiple modules, make that code into a Go\ntemplate stored in `go.opentelemetry.io/otel/internal/shared` and use [gotmpl]\nto render the templates in the desired locations. See [#4404] for an example of\nthis.\n\n[^3]: https://github.com/open-telemetry/opentelemetry-go/issues/3548\n\n### Ignoring context cancellation\n\nOpenTelemetry API implementations need to ignore the cancellation of the context that are\npassed when recording a value (e.g. starting a span, recording a measurement, emitting a log).\nRecording methods should not return an error describing the cancellation state of the context\nwhen they complete, nor should they abort any work.\n\nThis rule may not apply if the OpenTelemetry specification defines a timeout mechanism for\nthe method. In that case the context cancellation can be used for the timeout with the\nrestriction that this behavior is documented for the method. Otherwise, timeouts\nare expected to be handled by the user calling the API, not the implementation.\n\nStoppage of the telemetry pipeline is handled by calling the appropriate `Shutdown` method\nof a provider. It is assumed the context passed from a user is not used for this purpose.\n\nOutside of the direct recording of telemetry from the API (e.g. exporting telemetry,\nforce flushing telemetry, shutting down a signal provider) the context cancellation\nshould be honored. This means all work done on behalf of the user provided context\nshould be canceled.\n\n## Approvers and Maintainers\n\n### Triagers\n\n- [Cheng-Zhen Yang](https://github.com/scorpionknifes), Independent\n\n### Approvers\n\n### Maintainers\n\n- [Damien Mathieu](https://github.com/dmathieu), Elastic\n- [David Ashpole](https://github.com/dashpole), Google\n- [Robert Pająk](https://github.com/pellared), Splunk\n- [Sam Xie](https://github.com/XSAM), Cisco/AppDynamics\n- [Tyler Yahn](https://github.com/MrAlias), Splunk\n\n### Emeritus\n\n- [Aaron Clawson](https://github.com/MadVikingGod)\n- [Anthony Mirabella](https://github.com/Aneurysm9)\n- [Chester Cheung](https://github.com/hanyuancheung)\n- [Evan Torrie](https://github.com/evantorrie)\n- [Gustavo Silva Paiva](https://github.com/paivagustavo)\n- [Josh MacDonald](https://github.com/jmacd)\n- [Liz Fong-Jones](https://github.com/lizthegrey)\n\n### Become an Approver or a Maintainer\n\nSee the [community membership document in OpenTelemetry community\nrepo](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md).\n\n[Approver]: #approvers\n[Maintainer]: #maintainers\n[gotmpl]: https://pkg.go.dev/go.opentelemetry.io/build-tools/gotmpl\n[#4404]: https://github.com/open-telemetry/opentelemetry-go/pull/4404\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/Makefile",
    "content": "# Copyright The OpenTelemetry Authors\n# SPDX-License-Identifier: Apache-2.0\n\nTOOLS_MOD_DIR := ./internal/tools\n\nALL_DOCS := $(shell find . -name '*.md' -type f | sort)\nALL_GO_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \\; | sort)\nOTEL_GO_MOD_DIRS := $(filter-out $(TOOLS_MOD_DIR), $(ALL_GO_MOD_DIRS))\nALL_COVERAGE_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \\; | grep -E -v '^./example|^$(TOOLS_MOD_DIR)' | sort)\n\nGO = go\nTIMEOUT = 60\n\n# User to run as in docker images.\nDOCKER_USER=$(shell id -u):$(shell id -g)\nDEPENDENCIES_DOCKERFILE=./dependencies.Dockerfile\n\n.DEFAULT_GOAL := precommit\n\n.PHONY: precommit ci\nprecommit: generate toolchain-check license-check misspell go-mod-tidy golangci-lint-fix verify-readmes verify-mods test-default\nci: generate toolchain-check license-check lint vanity-import-check verify-readmes verify-mods build test-default check-clean-work-tree test-coverage\n\n# Tools\n\nTOOLS = $(CURDIR)/.tools\n\n$(TOOLS):\n\t@mkdir -p $@\n$(TOOLS)/%: $(TOOLS_MOD_DIR)/go.mod | $(TOOLS)\n\tcd $(TOOLS_MOD_DIR) && \\\n\t$(GO) build -o $@ $(PACKAGE)\n\nMULTIMOD = $(TOOLS)/multimod\n$(TOOLS)/multimod: PACKAGE=go.opentelemetry.io/build-tools/multimod\n\nSEMCONVGEN = $(TOOLS)/semconvgen\n$(TOOLS)/semconvgen: PACKAGE=go.opentelemetry.io/build-tools/semconvgen\n\nCROSSLINK = $(TOOLS)/crosslink\n$(TOOLS)/crosslink: PACKAGE=go.opentelemetry.io/build-tools/crosslink\n\nSEMCONVKIT = $(TOOLS)/semconvkit\n$(TOOLS)/semconvkit: PACKAGE=go.opentelemetry.io/otel/$(TOOLS_MOD_DIR)/semconvkit\n\nGOLANGCI_LINT = $(TOOLS)/golangci-lint\n$(TOOLS)/golangci-lint: PACKAGE=github.com/golangci/golangci-lint/cmd/golangci-lint\n\nMISSPELL = $(TOOLS)/misspell\n$(TOOLS)/misspell: PACKAGE=github.com/client9/misspell/cmd/misspell\n\nGOCOVMERGE = $(TOOLS)/gocovmerge\n$(TOOLS)/gocovmerge: PACKAGE=github.com/wadey/gocovmerge\n\nSTRINGER = $(TOOLS)/stringer\n$(TOOLS)/stringer: PACKAGE=golang.org/x/tools/cmd/stringer\n\nPORTO = $(TOOLS)/porto\n$(TOOLS)/porto: PACKAGE=github.com/jcchavezs/porto/cmd/porto\n\nGOTMPL = $(TOOLS)/gotmpl\n$(GOTMPL): PACKAGE=go.opentelemetry.io/build-tools/gotmpl\n\nGORELEASE = $(TOOLS)/gorelease\n$(GORELEASE): PACKAGE=golang.org/x/exp/cmd/gorelease\n\nGOVULNCHECK = $(TOOLS)/govulncheck\n$(TOOLS)/govulncheck: PACKAGE=golang.org/x/vuln/cmd/govulncheck\n\n.PHONY: tools\ntools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(SEMCONVGEN) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE)\n\n# Virtualized python tools via docker\n\n# The directory where the virtual environment is created.\nVENVDIR := venv\n\n# The directory where the python tools are installed.\nPYTOOLS := $(VENVDIR)/bin\n\n# The pip executable in the virtual environment.\nPIP := $(PYTOOLS)/pip\n\n# The directory in the docker image where the current directory is mounted.\nWORKDIR := /workdir\n\n# The python image to use for the virtual environment.\nPYTHONIMAGE := $(shell awk '$$4==\"python\" {print $$2}' $(DEPENDENCIES_DOCKERFILE))\n\n# Run the python image with the current directory mounted.\nDOCKERPY := docker run --rm -u $(DOCKER_USER) -v \"$(CURDIR):$(WORKDIR)\" -w $(WORKDIR) $(PYTHONIMAGE)\n\n# Create a virtual environment for Python tools.\n$(PYTOOLS):\n# The `--upgrade` flag is needed to ensure that the virtual environment is\n# created with the latest pip version.\n\t@$(DOCKERPY) bash -c \"python3 -m venv $(VENVDIR) && $(PIP) install --upgrade --cache-dir=$(WORKDIR)/.cache/pip pip\"\n\n# Install python packages into the virtual environment.\n$(PYTOOLS)/%: $(PYTOOLS)\n\t@$(DOCKERPY) $(PIP) install --cache-dir=$(WORKDIR)/.cache/pip -r requirements.txt\n\nCODESPELL = $(PYTOOLS)/codespell\n$(CODESPELL): PACKAGE=codespell\n\n# Generate\n\n.PHONY: generate\ngenerate: go-generate vanity-import-fix\n\n.PHONY: go-generate\ngo-generate: $(OTEL_GO_MOD_DIRS:%=go-generate/%)\ngo-generate/%: DIR=$*\ngo-generate/%: $(STRINGER) $(GOTMPL)\n\t@echo \"$(GO) generate $(DIR)/...\" \\\n\t\t&& cd $(DIR) \\\n\t\t&& PATH=\"$(TOOLS):$${PATH}\" $(GO) generate ./...\n\n.PHONY: vanity-import-fix\nvanity-import-fix: $(PORTO)\n\t@$(PORTO) --include-internal -w .\n\n# Generate go.work file for local development.\n.PHONY: go-work\ngo-work: $(CROSSLINK)\n\t$(CROSSLINK) work --root=$(shell pwd) --go=1.22.7\n\n# Build\n\n.PHONY: build\n\nbuild: $(OTEL_GO_MOD_DIRS:%=build/%) $(OTEL_GO_MOD_DIRS:%=build-tests/%)\nbuild/%: DIR=$*\nbuild/%:\n\t@echo \"$(GO) build $(DIR)/...\" \\\n\t\t&& cd $(DIR) \\\n\t\t&& $(GO) build ./...\n\nbuild-tests/%: DIR=$*\nbuild-tests/%:\n\t@echo \"$(GO) build tests $(DIR)/...\" \\\n\t\t&& cd $(DIR) \\\n\t\t&& $(GO) list ./... \\\n\t\t| grep -v third_party \\\n\t\t| xargs $(GO) test -vet=off -run xxxxxMatchNothingxxxxx >/dev/null\n\n# Tests\n\nTEST_TARGETS := test-default test-bench test-short test-verbose test-race test-concurrent-safe\n.PHONY: $(TEST_TARGETS) test\ntest-default test-race: ARGS=-race\ntest-bench:   ARGS=-run=xxxxxMatchNothingxxxxx -test.benchtime=1ms -bench=.\ntest-short:   ARGS=-short\ntest-verbose: ARGS=-v -race\ntest-concurrent-safe: ARGS=-run=ConcurrentSafe -count=100 -race\ntest-concurrent-safe: TIMEOUT=120\n$(TEST_TARGETS): test\ntest: $(OTEL_GO_MOD_DIRS:%=test/%)\ntest/%: DIR=$*\ntest/%:\n\t@echo \"$(GO) test -timeout $(TIMEOUT)s $(ARGS) $(DIR)/...\" \\\n\t\t&& cd $(DIR) \\\n\t\t&& $(GO) list ./... \\\n\t\t| grep -v third_party \\\n\t\t| xargs $(GO) test -timeout $(TIMEOUT)s $(ARGS)\n\nCOVERAGE_MODE    = atomic\nCOVERAGE_PROFILE = coverage.out\n.PHONY: test-coverage\ntest-coverage: $(GOCOVMERGE)\n\t@set -e; \\\n\tprintf \"\" > coverage.txt; \\\n\tfor dir in $(ALL_COVERAGE_MOD_DIRS); do \\\n\t  echo \"$(GO) test -coverpkg=go.opentelemetry.io/otel/... -covermode=$(COVERAGE_MODE) -coverprofile=\"$(COVERAGE_PROFILE)\" $${dir}/...\"; \\\n\t  (cd \"$${dir}\" && \\\n\t    $(GO) list ./... \\\n\t    | grep -v third_party \\\n\t    | grep -v 'semconv/v.*' \\\n\t    | xargs $(GO) test -coverpkg=./... -covermode=$(COVERAGE_MODE) -coverprofile=\"$(COVERAGE_PROFILE)\" && \\\n\t  $(GO) tool cover -html=coverage.out -o coverage.html); \\\n\tdone; \\\n\t$(GOCOVMERGE) $$(find . -name coverage.out) > coverage.txt\n\n.PHONY: benchmark\nbenchmark: $(OTEL_GO_MOD_DIRS:%=benchmark/%)\nbenchmark/%:\n\t@echo \"$(GO) test -run=xxxxxMatchNothingxxxxx -bench=. $*...\" \\\n\t\t&& cd $* \\\n\t\t&& $(GO) list ./... \\\n\t\t| grep -v third_party \\\n\t\t| xargs $(GO) test -run=xxxxxMatchNothingxxxxx -bench=.\n\n.PHONY: golangci-lint golangci-lint-fix\ngolangci-lint-fix: ARGS=--fix\ngolangci-lint-fix: golangci-lint\ngolangci-lint: $(OTEL_GO_MOD_DIRS:%=golangci-lint/%)\ngolangci-lint/%: DIR=$*\ngolangci-lint/%: $(GOLANGCI_LINT)\n\t@echo 'golangci-lint $(if $(ARGS),$(ARGS) ,)$(DIR)' \\\n\t\t&& cd $(DIR) \\\n\t\t&& $(GOLANGCI_LINT) run --allow-serial-runners $(ARGS)\n\n.PHONY: crosslink\ncrosslink: $(CROSSLINK)\n\t@echo \"Updating intra-repository dependencies in all go modules\" \\\n\t\t&& $(CROSSLINK) --root=$(shell pwd) --prune\n\n.PHONY: go-mod-tidy\ngo-mod-tidy: $(ALL_GO_MOD_DIRS:%=go-mod-tidy/%)\ngo-mod-tidy/%: DIR=$*\ngo-mod-tidy/%: crosslink\n\t@echo \"$(GO) mod tidy in $(DIR)\" \\\n\t\t&& cd $(DIR) \\\n\t\t&& $(GO) mod tidy -compat=1.21\n\n.PHONY: lint-modules\nlint-modules: go-mod-tidy\n\n.PHONY: lint\nlint: misspell lint-modules golangci-lint govulncheck\n\n.PHONY: vanity-import-check\nvanity-import-check: $(PORTO)\n\t@$(PORTO) --include-internal -l . || ( echo \"(run: make vanity-import-fix)\"; exit 1 )\n\n.PHONY: misspell\nmisspell: $(MISSPELL)\n\t@$(MISSPELL) -w $(ALL_DOCS)\n\n.PHONY: govulncheck\ngovulncheck: $(OTEL_GO_MOD_DIRS:%=govulncheck/%)\ngovulncheck/%: DIR=$*\ngovulncheck/%: $(GOVULNCHECK)\n\t@echo \"govulncheck ./... in $(DIR)\" \\\n\t\t&& cd $(DIR) \\\n\t\t&& $(GOVULNCHECK) ./...\n\n.PHONY: codespell\ncodespell: $(CODESPELL)\n\t@$(DOCKERPY) $(CODESPELL)\n\n.PHONY: toolchain-check\ntoolchain-check:\n\t@toolchainRes=$$(for f in $(ALL_GO_MOD_DIRS); do \\\n\t           awk '/^toolchain/ { found=1; next } END { if (found) print FILENAME }' $$f/go.mod; \\\n\tdone); \\\n\tif [ -n \"$${toolchainRes}\" ]; then \\\n\t\t\techo \"toolchain checking failed:\"; echo \"$${toolchainRes}\"; \\\n\t\t\texit 1; \\\n\tfi\n\n.PHONY: license-check\nlicense-check:\n\t@licRes=$$(for f in $$(find . -type f \\( -iname '*.go' -o -iname '*.sh' \\) ! -path '**/third_party/*' ! -path './.git/*' ) ; do \\\n\t           awk '/Copyright The OpenTelemetry Authors|generated|GENERATED/ && NR<=4 { found=1; next } END { if (!found) print FILENAME }' $$f; \\\n\t   done); \\\n\t   if [ -n \"$${licRes}\" ]; then \\\n\t           echo \"license header checking failed:\"; echo \"$${licRes}\"; \\\n\t           exit 1; \\\n\t   fi\n\n.PHONY: check-clean-work-tree\ncheck-clean-work-tree:\n\t@if ! git diff --quiet; then \\\n\t  echo; \\\n\t  echo 'Working tree is not clean, did you forget to run \"make precommit\"?'; \\\n\t  echo; \\\n\t  git status; \\\n\t  exit 1; \\\n\tfi\n\n# The weaver docker image to use for semconv-generate.\nWEAVER_IMAGE := $(shell awk '$$4==\"weaver\" {print $$2}' $(DEPENDENCIES_DOCKERFILE))\n\nSEMCONVPKG ?= \"semconv/\"\n.PHONY: semconv-generate\nsemconv-generate: $(SEMCONVKIT)\n\t[ \"$(TAG)\" ] || ( echo \"TAG unset: missing opentelemetry semantic-conventions tag\"; exit 1 )\n\t# Ensure the target directory for source code is available.\n\tmkdir -p $(PWD)/$(SEMCONVPKG)/${TAG}\n\t# Note: We mount a home directory for downloading/storing the semconv repository.\n\t# Weaver will automatically clean the cache when finished, but the directories will remain.\n\tmkdir -p ~/.weaver\n\tdocker run --rm \\\n\t\t-u $(DOCKER_USER) \\\n\t\t--env HOME=/tmp/weaver \\\n\t\t--mount 'type=bind,source=$(PWD)/semconv,target=/home/weaver/templates/registry/go,readonly' \\\n\t\t--mount 'type=bind,source=$(PWD)/semconv/${TAG},target=/home/weaver/target' \\\n\t\t--mount 'type=bind,source=$(HOME)/.weaver,target=/tmp/weaver/.weaver' \\\n\t\t$(WEAVER_IMAGE) registry generate \\\n\t\t--registry=https://github.com/open-telemetry/semantic-conventions/archive/refs/tags/$(TAG).zip[model] \\\n\t\t--templates=/home/weaver/templates \\\n\t\t--param tag=$(TAG) \\\n\t\tgo \\\n\t\t/home/weaver/target\n\t$(SEMCONVKIT) -output \"$(SEMCONVPKG)/$(TAG)\" -tag \"$(TAG)\"\n\n.PHONY: gorelease\ngorelease: $(OTEL_GO_MOD_DIRS:%=gorelease/%)\ngorelease/%: DIR=$*\ngorelease/%:| $(GORELEASE)\n\t@echo \"gorelease in $(DIR):\" \\\n\t\t&& cd $(DIR) \\\n\t\t&& $(GORELEASE) \\\n\t\t|| echo \"\"\n\n.PHONY: verify-mods\nverify-mods: $(MULTIMOD)\n\t$(MULTIMOD) verify\n\n.PHONY: prerelease\nprerelease: verify-mods\n\t@[ \"${MODSET}\" ] || ( echo \">> env var MODSET is not set\"; exit 1 )\n\t$(MULTIMOD) prerelease -m ${MODSET}\n\nCOMMIT ?= \"HEAD\"\n.PHONY: add-tags\nadd-tags: verify-mods\n\t@[ \"${MODSET}\" ] || ( echo \">> env var MODSET is not set\"; exit 1 )\n\t$(MULTIMOD) tag -m ${MODSET} -c ${COMMIT}\n\n.PHONY: lint-markdown\nlint-markdown:\n\tdocker run -v \"$(CURDIR):$(WORKDIR)\" avtodev/markdown-lint:v1 -c $(WORKDIR)/.markdownlint.yaml $(WORKDIR)/**/*.md\n\n.PHONY: verify-readmes\nverify-readmes:\n\t./verify_readmes.sh\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/README.md",
    "content": "# OpenTelemetry-Go\n\n[![ci](https://github.com/open-telemetry/opentelemetry-go/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/open-telemetry/opentelemetry-go/actions/workflows/ci.yml)\n[![codecov.io](https://codecov.io/gh/open-telemetry/opentelemetry-go/coverage.svg?branch=main)](https://app.codecov.io/gh/open-telemetry/opentelemetry-go?branch=main)\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel)](https://pkg.go.dev/go.opentelemetry.io/otel)\n[![Go Report Card](https://goreportcard.com/badge/go.opentelemetry.io/otel)](https://goreportcard.com/report/go.opentelemetry.io/otel)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/open-telemetry/opentelemetry-go/badge)](https://scorecard.dev/viewer/?uri=github.com/open-telemetry/opentelemetry-go)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9996/badge)](https://www.bestpractices.dev/projects/9996)\n[![Slack](https://img.shields.io/badge/slack-@cncf/otel--go-brightgreen.svg?logo=slack)](https://cloud-native.slack.com/archives/C01NPAXACKT)\n\nOpenTelemetry-Go is the [Go](https://golang.org/) implementation of [OpenTelemetry](https://opentelemetry.io/).\nIt provides a set of APIs to directly measure performance and behavior of your software and send this data to observability platforms.\n\n## Project Status\n\n| Signal  | Status             |\n|---------|--------------------|\n| Traces  | Stable             |\n| Metrics | Stable             |\n| Logs    | Beta[^1]           |\n\nProgress and status specific to this repository is tracked in our\n[project boards](https://github.com/open-telemetry/opentelemetry-go/projects)\nand\n[milestones](https://github.com/open-telemetry/opentelemetry-go/milestones).\n\nProject versioning information and stability guarantees can be found in the\n[versioning documentation](VERSIONING.md).\n\n[^1]: https://github.com/orgs/open-telemetry/projects/43\n\n### Compatibility\n\nOpenTelemetry-Go ensures compatibility with the current supported versions of\nthe [Go language](https://golang.org/doc/devel/release#policy):\n\n> Each major Go release is supported until there are two newer major releases.\n> For example, Go 1.5 was supported until the Go 1.7 release, and Go 1.6 was supported until the Go 1.8 release.\n\nFor versions of Go that are no longer supported upstream, opentelemetry-go will\nstop ensuring compatibility with these versions in the following manner:\n\n- A minor release of opentelemetry-go will be made to add support for the new\n  supported release of Go.\n- The following minor release of opentelemetry-go will remove compatibility\n  testing for the oldest (now archived upstream) version of Go. This, and\n  future, releases of opentelemetry-go may include features only supported by\n  the currently supported versions of Go.\n\nCurrently, this project supports the following environments.\n\n| OS       | Go Version | Architecture |\n|----------|------------|--------------|\n| Ubuntu   | 1.24       | amd64        |\n| Ubuntu   | 1.23       | amd64        |\n| Ubuntu   | 1.22       | amd64        |\n| Ubuntu   | 1.24       | 386          |\n| Ubuntu   | 1.23       | 386          |\n| Ubuntu   | 1.22       | 386          |\n| Ubuntu   | 1.24       | arm64        |\n| Ubuntu   | 1.23       | arm64        |\n| Ubuntu   | 1.22       | arm64        |\n| macOS 13 | 1.24       | amd64        |\n| macOS 13 | 1.23       | amd64        |\n| macOS 13 | 1.22       | amd64        |\n| macOS    | 1.24       | arm64        |\n| macOS    | 1.23       | arm64        |\n| macOS    | 1.22       | arm64        |\n| Windows  | 1.24       | amd64        |\n| Windows  | 1.23       | amd64        |\n| Windows  | 1.22       | amd64        |\n| Windows  | 1.24       | 386          |\n| Windows  | 1.23       | 386          |\n| Windows  | 1.22       | 386          |\n\nWhile this project should work for other systems, no compatibility guarantees\nare made for those systems currently.\n\n## Getting Started\n\nYou can find a getting started guide on [opentelemetry.io](https://opentelemetry.io/docs/languages/go/getting-started/).\n\nOpenTelemetry's goal is to provide a single set of APIs to capture distributed\ntraces and metrics from your application and send them to an observability\nplatform. This project allows you to do just that for applications written in\nGo. There are two steps to this process: instrument your application, and\nconfigure an exporter.\n\n### Instrumentation\n\nTo start capturing distributed traces and metric events from your application\nit first needs to be instrumented. The easiest way to do this is by using an\ninstrumentation library for your code. Be sure to check out [the officially\nsupported instrumentation\nlibraries](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/instrumentation).\n\nIf you need to extend the telemetry an instrumentation library provides or want\nto build your own instrumentation for your application directly you will need\nto use the\n[Go otel](https://pkg.go.dev/go.opentelemetry.io/otel)\npackage. The [examples](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/examples)\nare a good way to see some practical uses of this process.\n\n### Export\n\nNow that your application is instrumented to collect telemetry, it needs an\nexport pipeline to send that telemetry to an observability platform.\n\nAll officially supported exporters for the OpenTelemetry project are contained in the [exporters directory](./exporters).\n\n| Exporter                              | Logs | Metrics | Traces |\n|---------------------------------------|:----:|:-------:|:------:|\n| [OTLP](./exporters/otlp/)             |  ✓   |    ✓    |   ✓    |\n| [Prometheus](./exporters/prometheus/) |      |    ✓    |        |\n| [stdout](./exporters/stdout/)         |  ✓   |    ✓    |   ✓    |\n| [Zipkin](./exporters/zipkin/)         |      |         |   ✓    |\n\n## Contributing\n\nSee the [contributing documentation](CONTRIBUTING.md).\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/RELEASING.md",
    "content": "# Release Process\n\n## Semantic Convention Generation\n\nNew versions of the [OpenTelemetry Semantic Conventions] mean new versions of the `semconv` package need to be generated.\nThe `semconv-generate` make target is used for this.\n\n1. Set the `TAG` environment variable to the semantic convention tag you want to generate.\n2. Run the `make semconv-generate ...` target from this repository.\n\nFor example,\n\n```sh\nexport TAG=\"v1.30.0\" # Change to the release version you are generating.\nmake semconv-generate # Uses the exported TAG.\n```\n\nThis should create a new sub-package of [`semconv`](./semconv).\nEnsure things look correct before submitting a pull request to include the addition.\n\n## Breaking changes validation\n\nYou can run `make gorelease` that runs [gorelease](https://pkg.go.dev/golang.org/x/exp/cmd/gorelease) to ensure that there are no unwanted changes done in the public API.\n\nYou can check/report problems with `gorelease` [here](https://golang.org/issues/26420).\n\n## Verify changes for contrib repository\n\nIf the changes in the main repository are going to affect the contrib repository, it is important to verify that the changes are compatible with the contrib repository.\n\nFollow [the steps](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/RELEASING.md#verify-otel-changes) in the contrib repository to verify OTel changes.\n\n## Pre-Release\n\nFirst, decide which module sets will be released and update their versions\nin `versions.yaml`.  Commit this change to a new branch.\n\nUpdate go.mod for submodules to depend on the new release which will happen in the next step.\n\n1. Run the `prerelease` make target. It creates a branch\n    `prerelease_<module set>_<new tag>` that will contain all release changes.\n\n    ```\n    make prerelease MODSET=<module set>\n    ```\n\n2. Verify the changes.\n\n    ```\n    git diff ...prerelease_<module set>_<new tag>\n    ```\n\n    This should have changed the version for all modules to be `<new tag>`.\n    If these changes look correct, merge them into your pre-release branch:\n\n    ```go\n    git merge prerelease_<module set>_<new tag>\n    ```\n\n3. Update the [Changelog](./CHANGELOG.md).\n   - Make sure all relevant changes for this release are included and are in language that non-contributors to the project can understand.\n       To verify this, you can look directly at the commits since the `<last tag>`.\n\n       ```\n       git --no-pager log --pretty=oneline \"<last tag>..HEAD\"\n       ```\n\n   - Move all the `Unreleased` changes into a new section following the title scheme (`[<new tag>] - <date of release>`).\n   - Make sure the new section is under the comment for released section, like `<!-- Released section -->`, so it is protected from being overwritten in the future.\n   - Update all the appropriate links at the bottom.\n\n4. Push the changes to upstream and create a Pull Request on GitHub.\n    Be sure to include the curated changes from the [Changelog](./CHANGELOG.md) in the description.\n\n## Tag\n\nOnce the Pull Request with all the version changes has been approved and merged it is time to tag the merged commit.\n\n***IMPORTANT***: It is critical you use the same tag that you used in the Pre-Release step!\nFailure to do so will leave things in a broken state. As long as you do not\nchange `versions.yaml` between pre-release and this step, things should be fine.\n\n***IMPORTANT***: [There is currently no way to remove an incorrectly tagged version of a Go module](https://github.com/golang/go/issues/34189).\nIt is critical you make sure the version you push upstream is correct.\n[Failure to do so will lead to minor emergencies and tough to work around](https://github.com/open-telemetry/opentelemetry-go/issues/331).\n\n1. For each module set that will be released, run the `add-tags` make target\n    using the `<commit-hash>` of the commit on the main branch for the merged Pull Request.\n\n    ```\n    make add-tags MODSET=<module set> COMMIT=<commit hash>\n    ```\n\n    It should only be necessary to provide an explicit `COMMIT` value if the\n    current `HEAD` of your working directory is not the correct commit.\n\n2. Push tags to the upstream remote (not your fork: `github.com/open-telemetry/opentelemetry-go.git`).\n    Make sure you push all sub-modules as well.\n\n    ```\n    git push upstream <new tag>\n    git push upstream <submodules-path/new tag>\n    ...\n    ```\n\n## Release\n\nFinally create a Release for the new `<new tag>` on GitHub.\nThe release body should include all the release notes from the Changelog for this release.\n\n## Post-Release\n\n### Contrib Repository\n\nOnce verified be sure to [make a release for the `contrib` repository](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/RELEASING.md) that uses this release.\n\n### Website Documentation\n\nUpdate the [Go instrumentation documentation] in the OpenTelemetry website under [content/en/docs/languages/go].\nImportantly, bump any package versions referenced to be the latest one you just released and ensure all code examples still compile and are accurate.\n\n[OpenTelemetry Semantic Conventions]: https://github.com/open-telemetry/semantic-conventions\n[Go instrumentation documentation]: https://opentelemetry.io/docs/languages/go/\n[content/en/docs/languages/go]: https://github.com/open-telemetry/opentelemetry.io/tree/main/content/en/docs/languages/go\n\n### Demo Repository\n\nBump the dependencies in the following Go services:\n\n- [`accounting`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/accounting)\n- [`checkoutservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/checkout)\n- [`productcatalogservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/product-catalog)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/VERSIONING.md",
    "content": "# Versioning\n\nThis document describes the versioning policy for this repository. This policy\nis designed so the following goals can be achieved.\n\n**Users are provided a codebase of value that is stable and secure.**\n\n## Policy\n\n* Versioning of this project will be idiomatic of a Go project using [Go\n  modules](https://github.com/golang/go/wiki/Modules).\n  * [Semantic import\n    versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning)\n    will be used.\n    * Versions will comply with [semver\n      2.0](https://semver.org/spec/v2.0.0.html) with the following exceptions.\n      * New methods may be added to exported API interfaces. All exported\n        interfaces that fall within this exception will include the following\n        paragraph in their public documentation.\n\n        > Warning: methods may be added to this interface in minor releases.\n\n    * If a module is version `v2` or higher, the major version of the module\n      must be included as a `/vN` at the end of the module paths used in\n      `go.mod` files (e.g., `module go.opentelemetry.io/otel/v2`, `require\n      go.opentelemetry.io/otel/v2 v2.0.1`) and in the package import path\n      (e.g., `import \"go.opentelemetry.io/otel/v2/trace\"`). This includes the\n      paths used in `go get` commands (e.g., `go get\n      go.opentelemetry.io/otel/v2@v2.0.1`).  Note there is both a `/v2` and a\n      `@v2.0.1` in that example. One way to think about it is that the module\n      name now includes the `/v2`, so include `/v2` whenever you are using the\n      module name).\n    * If a module is version `v0` or `v1`, do not include the major version in\n      either the module path or the import path.\n  * Modules will be used to encapsulate signals and components.\n    * Experimental modules still under active development will be versioned at\n      `v0` to imply the stability guarantee defined by\n      [semver](https://semver.org/spec/v2.0.0.html#spec-item-4).\n\n      > Major version zero (0.y.z) is for initial development. Anything MAY\n      > change at any time. The public API SHOULD NOT be considered stable.\n\n    * Mature modules for which we guarantee a stable public API will be versioned\n      with a major version greater than `v0`.\n      * The decision to make a module stable will be made on a case-by-case\n        basis by the maintainers of this project.\n    * Experimental modules will start their versioning at `v0.0.0` and will\n      increment their minor version when backwards incompatible changes are\n      released and increment their patch version when backwards compatible\n      changes are released.\n    * All stable modules that use the same major version number will use the\n      same entire version number.\n      * Stable modules may be released with an incremented minor or patch\n        version even though that module has not been changed, but rather so\n        that it will remain at the same version as other stable modules that\n        did undergo change.\n      * When an experimental module becomes stable a new stable module version\n        will be released and will include this now stable module. The new\n        stable module version will be an increment of the minor version number\n        and will be applied to all existing stable modules as well as the newly\n        stable module being released.\n* Versioning of the associated [contrib\n  repository](https://github.com/open-telemetry/opentelemetry-go-contrib) of\n  this project will be idiomatic of a Go project using [Go\n  modules](https://github.com/golang/go/wiki/Modules).\n  * [Semantic import\n    versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning)\n    will be used.\n    * Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html).\n    * If a module is version `v2` or higher, the\n      major version of the module must be included as a `/vN` at the end of the\n      module paths used in `go.mod` files (e.g., `module\n      go.opentelemetry.io/contrib/instrumentation/host/v2`, `require\n      go.opentelemetry.io/contrib/instrumentation/host/v2 v2.0.1`) and in the\n      package import path (e.g., `import\n      \"go.opentelemetry.io/contrib/instrumentation/host/v2\"`). This includes\n      the paths used in `go get` commands (e.g., `go get\n      go.opentelemetry.io/contrib/instrumentation/host/v2@v2.0.1`.  Note there\n      is both a `/v2` and a `@v2.0.1` in that example. One way to think about\n      it is that the module name now includes the `/v2`, so include `/v2`\n      whenever you are using the module name).\n    * If a module is version `v0` or `v1`, do not include the major version\n      in either the module path or the import path.\n  * In addition to public APIs, telemetry produced by stable instrumentation\n    will remain stable and backwards compatible. This is to avoid breaking\n    alerts and dashboard.\n  * Modules will be used to encapsulate instrumentation, detectors, exporters,\n    propagators, and any other independent sets of related components.\n    * Experimental modules still under active development will be versioned at\n      `v0` to imply the stability guarantee defined by\n      [semver](https://semver.org/spec/v2.0.0.html#spec-item-4).\n\n      > Major version zero (0.y.z) is for initial development. Anything MAY\n      > change at any time. The public API SHOULD NOT be considered stable.\n\n    * Mature modules for which we guarantee a stable public API and telemetry will\n      be versioned with a major version greater than `v0`.\n    * Experimental modules will start their versioning at `v0.0.0` and will\n      increment their minor version when backwards incompatible changes are\n      released and increment their patch version when backwards compatible\n      changes are released.\n    * Stable contrib modules cannot depend on experimental modules from this\n      project.\n    * All stable contrib modules of the same major version with this project\n      will use the same entire version as this project.\n      * Stable modules may be released with an incremented minor or patch\n        version even though that module's code has not been changed. Instead\n        the only change that will have been included is to have updated that\n        modules dependency on this project's stable APIs.\n      * When an experimental module in contrib becomes stable a new stable\n        module version will be released and will include this now stable\n        module. The new stable module version will be an increment of the minor\n        version number and will be applied to all existing stable contrib\n        modules, this project's modules, and the newly stable module being\n        released.\n  * Contrib modules will be kept up to date with this project's releases.\n    * Due to the dependency contrib modules will implicitly have on this\n      project's modules the release of stable contrib modules to match the\n      released version number will be staggered after this project's release.\n      There is no explicit time guarantee for how long after this projects\n      release the contrib release will be. Effort should be made to keep them\n      as close in time as possible.\n    * No additional stable release in this project can be made until the\n      contrib repository has a matching stable release.\n    * No release can be made in the contrib repository after this project's\n      stable release except for a stable release of the contrib repository.\n* GitHub releases will be made for all releases.\n* Go modules will be made available at Go package mirrors.\n\n## Example Versioning Lifecycle\n\nTo better understand the implementation of the above policy the following\nexample is provided. This project is simplified to include only the following\nmodules and their versions:\n\n* `otel`: `v0.14.0`\n* `otel/trace`: `v0.14.0`\n* `otel/metric`: `v0.14.0`\n* `otel/baggage`: `v0.14.0`\n* `otel/sdk/trace`: `v0.14.0`\n* `otel/sdk/metric`: `v0.14.0`\n\nThese modules have been developed to a point where the `otel/trace`,\n`otel/baggage`, and `otel/sdk/trace` modules have reached a point that they\nshould be considered for a stable release. The `otel/metric` and\n`otel/sdk/metric` are still under active development and the `otel` module\ndepends on both `otel/trace` and `otel/metric`.\n\nThe `otel` package is refactored to remove its dependencies on `otel/metric` so\nit can be released as stable as well. With that done the following release\ncandidates are made:\n\n* `otel`: `v1.0.0-RC1`\n* `otel/trace`: `v1.0.0-RC1`\n* `otel/baggage`: `v1.0.0-RC1`\n* `otel/sdk/trace`: `v1.0.0-RC1`\n\nThe `otel/metric` and `otel/sdk/metric` modules remain at `v0.14.0`.\n\nA few minor issues are discovered in the `otel/trace` package. These issues are\nresolved with some minor, but backwards incompatible, changes and are released\nas a second release candidate:\n\n* `otel`: `v1.0.0-RC2`\n* `otel/trace`: `v1.0.0-RC2`\n* `otel/baggage`: `v1.0.0-RC2`\n* `otel/sdk/trace`: `v1.0.0-RC2`\n\nNotice that all module version numbers are incremented to adhere to our\nversioning policy.\n\nAfter these release candidates have been evaluated to satisfaction, they are\nreleased as version `v1.0.0`.\n\n* `otel`: `v1.0.0`\n* `otel/trace`: `v1.0.0`\n* `otel/baggage`: `v1.0.0`\n* `otel/sdk/trace`: `v1.0.0`\n\nSince both the `go` utility and the Go module system support [the semantic\nversioning definition of\nprecedence](https://semver.org/spec/v2.0.0.html#spec-item-11), this release\nwill correctly be interpreted as the successor to the previous release\ncandidates.\n\nActive development of this project continues. The `otel/metric` module now has\nbackwards incompatible changes to its API that need to be released and the\n`otel/baggage` module has a minor bug fix that needs to be released. The\nfollowing release is made:\n\n* `otel`: `v1.0.1`\n* `otel/trace`: `v1.0.1`\n* `otel/metric`: `v0.15.0`\n* `otel/baggage`: `v1.0.1`\n* `otel/sdk/trace`: `v1.0.1`\n* `otel/sdk/metric`: `v0.15.0`\n\nNotice that, again, all stable module versions are incremented in unison and\nthe `otel/sdk/metric` package, which depends on the `otel/metric` package, also\nbumped its version. This bump of the `otel/sdk/metric` package makes sense\ngiven their coupling, though it is not explicitly required by our versioning\npolicy.\n\nAs we progress, the `otel/metric` and `otel/sdk/metric` packages have reached a\npoint where they should be evaluated for stability. The `otel` module is\nreintegrated with the `otel/metric` package and the following release is made:\n\n* `otel`: `v1.1.0-RC1`\n* `otel/trace`: `v1.1.0-RC1`\n* `otel/metric`: `v1.1.0-RC1`\n* `otel/baggage`: `v1.1.0-RC1`\n* `otel/sdk/trace`: `v1.1.0-RC1`\n* `otel/sdk/metric`: `v1.1.0-RC1`\n\nAll the modules are evaluated and determined to a viable stable release. They\nare then released as version `v1.1.0` (the minor version is incremented to\nindicate the addition of new signal).\n\n* `otel`: `v1.1.0`\n* `otel/trace`: `v1.1.0`\n* `otel/metric`: `v1.1.0`\n* `otel/baggage`: `v1.1.0`\n* `otel/sdk/trace`: `v1.1.0`\n* `otel/sdk/metric`: `v1.1.0`\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/README.md",
    "content": "# Attribute\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/attribute)](https://pkg.go.dev/go.opentelemetry.io/otel/attribute)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Package attribute provides key and value attributes.\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/encoder.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n\nimport (\n\t\"bytes\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\ntype (\n\t// Encoder is a mechanism for serializing an attribute set into a specific\n\t// string representation that supports caching, to avoid repeated\n\t// serialization. An example could be an exporter encoding the attribute\n\t// set into a wire representation.\n\tEncoder interface {\n\t\t// Encode returns the serialized encoding of the attribute set using\n\t\t// its Iterator. This result may be cached by a attribute.Set.\n\t\tEncode(iterator Iterator) string\n\n\t\t// ID returns a value that is unique for each class of attribute\n\t\t// encoder. Attribute encoders allocate these using `NewEncoderID`.\n\t\tID() EncoderID\n\t}\n\n\t// EncoderID is used to identify distinct Encoder\n\t// implementations, for caching encoded results.\n\tEncoderID struct {\n\t\tvalue uint64\n\t}\n\n\t// defaultAttrEncoder uses a sync.Pool of buffers to reduce the number of\n\t// allocations used in encoding attributes. This implementation encodes a\n\t// comma-separated list of key=value, with '/'-escaping of '=', ',', and\n\t// '\\'.\n\tdefaultAttrEncoder struct {\n\t\t// pool is a pool of attribute set builders. The buffers in this pool\n\t\t// grow to a size that most attribute encodings will not allocate new\n\t\t// memory.\n\t\tpool sync.Pool // *bytes.Buffer\n\t}\n)\n\n// escapeChar is used to ensure uniqueness of the attribute encoding where\n// keys or values contain either '=' or ','.  Since there is no parser needed\n// for this encoding and its only requirement is to be unique, this choice is\n// arbitrary.  Users will see these in some exporters (e.g., stdout), so the\n// backslash ('\\') is used as a conventional choice.\nconst escapeChar = '\\\\'\n\nvar (\n\t_ Encoder = &defaultAttrEncoder{}\n\n\t// encoderIDCounter is for generating IDs for other attribute encoders.\n\tencoderIDCounter uint64\n\n\tdefaultEncoderOnce     sync.Once\n\tdefaultEncoderID       = NewEncoderID()\n\tdefaultEncoderInstance *defaultAttrEncoder\n)\n\n// NewEncoderID returns a unique attribute encoder ID. It should be called\n// once per each type of attribute encoder. Preferably in init() or in var\n// definition.\nfunc NewEncoderID() EncoderID {\n\treturn EncoderID{value: atomic.AddUint64(&encoderIDCounter, 1)}\n}\n\n// DefaultEncoder returns an attribute encoder that encodes attributes in such\n// a way that each escaped attribute's key is followed by an equal sign and\n// then by an escaped attribute's value. All key-value pairs are separated by\n// a comma.\n//\n// Escaping is done by prepending a backslash before either a backslash, equal\n// sign or a comma.\nfunc DefaultEncoder() Encoder {\n\tdefaultEncoderOnce.Do(func() {\n\t\tdefaultEncoderInstance = &defaultAttrEncoder{\n\t\t\tpool: sync.Pool{\n\t\t\t\tNew: func() interface{} {\n\t\t\t\t\treturn &bytes.Buffer{}\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t})\n\treturn defaultEncoderInstance\n}\n\n// Encode is a part of an implementation of the AttributeEncoder interface.\nfunc (d *defaultAttrEncoder) Encode(iter Iterator) string {\n\tbuf := d.pool.Get().(*bytes.Buffer)\n\tdefer d.pool.Put(buf)\n\tbuf.Reset()\n\n\tfor iter.Next() {\n\t\ti, keyValue := iter.IndexedAttribute()\n\t\tif i > 0 {\n\t\t\t_, _ = buf.WriteRune(',')\n\t\t}\n\t\tcopyAndEscape(buf, string(keyValue.Key))\n\n\t\t_, _ = buf.WriteRune('=')\n\n\t\tif keyValue.Value.Type() == STRING {\n\t\t\tcopyAndEscape(buf, keyValue.Value.AsString())\n\t\t} else {\n\t\t\t_, _ = buf.WriteString(keyValue.Value.Emit())\n\t\t}\n\t}\n\treturn buf.String()\n}\n\n// ID is a part of an implementation of the AttributeEncoder interface.\nfunc (*defaultAttrEncoder) ID() EncoderID {\n\treturn defaultEncoderID\n}\n\n// copyAndEscape escapes `=`, `,` and its own escape character (`\\`),\n// making the default encoding unique.\nfunc copyAndEscape(buf *bytes.Buffer, val string) {\n\tfor _, ch := range val {\n\t\tswitch ch {\n\t\tcase '=', ',', escapeChar:\n\t\t\t_, _ = buf.WriteRune(escapeChar)\n\t\t}\n\t\t_, _ = buf.WriteRune(ch)\n\t}\n}\n\n// Valid returns true if this encoder ID was allocated by\n// `NewEncoderID`.  Invalid encoder IDs will not be cached.\nfunc (id EncoderID) Valid() bool {\n\treturn id.value != 0\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/filter.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n\n// Filter supports removing certain attributes from attribute sets. When\n// the filter returns true, the attribute will be kept in the filtered\n// attribute set. When the filter returns false, the attribute is excluded\n// from the filtered attribute set, and the attribute instead appears in\n// the removed list of excluded attributes.\ntype Filter func(KeyValue) bool\n\n// NewAllowKeysFilter returns a Filter that only allows attributes with one of\n// the provided keys.\n//\n// If keys is empty a deny-all filter is returned.\nfunc NewAllowKeysFilter(keys ...Key) Filter {\n\tif len(keys) <= 0 {\n\t\treturn func(kv KeyValue) bool { return false }\n\t}\n\n\tallowed := make(map[Key]struct{})\n\tfor _, k := range keys {\n\t\tallowed[k] = struct{}{}\n\t}\n\treturn func(kv KeyValue) bool {\n\t\t_, ok := allowed[kv.Key]\n\t\treturn ok\n\t}\n}\n\n// NewDenyKeysFilter returns a Filter that only allows attributes\n// that do not have one of the provided keys.\n//\n// If keys is empty an allow-all filter is returned.\nfunc NewDenyKeysFilter(keys ...Key) Filter {\n\tif len(keys) <= 0 {\n\t\treturn func(kv KeyValue) bool { return true }\n\t}\n\n\tforbid := make(map[Key]struct{})\n\tfor _, k := range keys {\n\t\tforbid[k] = struct{}{}\n\t}\n\treturn func(kv KeyValue) bool {\n\t\t_, ok := forbid[kv.Key]\n\t\treturn !ok\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/iterator.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n\n// Iterator allows iterating over the set of attributes in order, sorted by\n// key.\ntype Iterator struct {\n\tstorage *Set\n\tidx     int\n}\n\n// MergeIterator supports iterating over two sets of attributes while\n// eliminating duplicate values from the combined set. The first iterator\n// value takes precedence.\ntype MergeIterator struct {\n\tone     oneIterator\n\ttwo     oneIterator\n\tcurrent KeyValue\n}\n\ntype oneIterator struct {\n\titer Iterator\n\tdone bool\n\tattr KeyValue\n}\n\n// Next moves the iterator to the next position. Returns false if there are no\n// more attributes.\nfunc (i *Iterator) Next() bool {\n\ti.idx++\n\treturn i.idx < i.Len()\n}\n\n// Label returns current KeyValue. Must be called only after Next returns\n// true.\n//\n// Deprecated: Use Attribute instead.\nfunc (i *Iterator) Label() KeyValue {\n\treturn i.Attribute()\n}\n\n// Attribute returns the current KeyValue of the Iterator. It must be called\n// only after Next returns true.\nfunc (i *Iterator) Attribute() KeyValue {\n\tkv, _ := i.storage.Get(i.idx)\n\treturn kv\n}\n\n// IndexedLabel returns current index and attribute. Must be called only\n// after Next returns true.\n//\n// Deprecated: Use IndexedAttribute instead.\nfunc (i *Iterator) IndexedLabel() (int, KeyValue) {\n\treturn i.idx, i.Attribute()\n}\n\n// IndexedAttribute returns current index and attribute. Must be called only\n// after Next returns true.\nfunc (i *Iterator) IndexedAttribute() (int, KeyValue) {\n\treturn i.idx, i.Attribute()\n}\n\n// Len returns a number of attributes in the iterated set.\nfunc (i *Iterator) Len() int {\n\treturn i.storage.Len()\n}\n\n// ToSlice is a convenience function that creates a slice of attributes from\n// the passed iterator. The iterator is set up to start from the beginning\n// before creating the slice.\nfunc (i *Iterator) ToSlice() []KeyValue {\n\tl := i.Len()\n\tif l == 0 {\n\t\treturn nil\n\t}\n\ti.idx = -1\n\tslice := make([]KeyValue, 0, l)\n\tfor i.Next() {\n\t\tslice = append(slice, i.Attribute())\n\t}\n\treturn slice\n}\n\n// NewMergeIterator returns a MergeIterator for merging two attribute sets.\n// Duplicates are resolved by taking the value from the first set.\nfunc NewMergeIterator(s1, s2 *Set) MergeIterator {\n\tmi := MergeIterator{\n\t\tone: makeOne(s1.Iter()),\n\t\ttwo: makeOne(s2.Iter()),\n\t}\n\treturn mi\n}\n\nfunc makeOne(iter Iterator) oneIterator {\n\toi := oneIterator{\n\t\titer: iter,\n\t}\n\toi.advance()\n\treturn oi\n}\n\nfunc (oi *oneIterator) advance() {\n\tif oi.done = !oi.iter.Next(); !oi.done {\n\t\toi.attr = oi.iter.Attribute()\n\t}\n}\n\n// Next returns true if there is another attribute available.\nfunc (m *MergeIterator) Next() bool {\n\tif m.one.done && m.two.done {\n\t\treturn false\n\t}\n\tif m.one.done {\n\t\tm.current = m.two.attr\n\t\tm.two.advance()\n\t\treturn true\n\t}\n\tif m.two.done {\n\t\tm.current = m.one.attr\n\t\tm.one.advance()\n\t\treturn true\n\t}\n\tif m.one.attr.Key == m.two.attr.Key {\n\t\tm.current = m.one.attr // first iterator attribute value wins\n\t\tm.one.advance()\n\t\tm.two.advance()\n\t\treturn true\n\t}\n\tif m.one.attr.Key < m.two.attr.Key {\n\t\tm.current = m.one.attr\n\t\tm.one.advance()\n\t\treturn true\n\t}\n\tm.current = m.two.attr\n\tm.two.advance()\n\treturn true\n}\n\n// Label returns the current value after Next() returns true.\n//\n// Deprecated: Use Attribute instead.\nfunc (m *MergeIterator) Label() KeyValue {\n\treturn m.current\n}\n\n// Attribute returns the current value after Next() returns true.\nfunc (m *MergeIterator) Attribute() KeyValue {\n\treturn m.current\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/key.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n\n// Key represents the key part in key-value pairs. It's a string. The\n// allowed character set in the key depends on the use of the key.\ntype Key string\n\n// Bool creates a KeyValue instance with a BOOL Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- Bool(name, value).\nfunc (k Key) Bool(v bool) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: BoolValue(v),\n\t}\n}\n\n// BoolSlice creates a KeyValue instance with a BOOLSLICE Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- BoolSlice(name, value).\nfunc (k Key) BoolSlice(v []bool) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: BoolSliceValue(v),\n\t}\n}\n\n// Int creates a KeyValue instance with an INT64 Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- Int(name, value).\nfunc (k Key) Int(v int) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: IntValue(v),\n\t}\n}\n\n// IntSlice creates a KeyValue instance with an INT64SLICE Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- IntSlice(name, value).\nfunc (k Key) IntSlice(v []int) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: IntSliceValue(v),\n\t}\n}\n\n// Int64 creates a KeyValue instance with an INT64 Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- Int64(name, value).\nfunc (k Key) Int64(v int64) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: Int64Value(v),\n\t}\n}\n\n// Int64Slice creates a KeyValue instance with an INT64SLICE Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- Int64Slice(name, value).\nfunc (k Key) Int64Slice(v []int64) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: Int64SliceValue(v),\n\t}\n}\n\n// Float64 creates a KeyValue instance with a FLOAT64 Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- Float64(name, value).\nfunc (k Key) Float64(v float64) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: Float64Value(v),\n\t}\n}\n\n// Float64Slice creates a KeyValue instance with a FLOAT64SLICE Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- Float64(name, value).\nfunc (k Key) Float64Slice(v []float64) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: Float64SliceValue(v),\n\t}\n}\n\n// String creates a KeyValue instance with a STRING Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- String(name, value).\nfunc (k Key) String(v string) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: StringValue(v),\n\t}\n}\n\n// StringSlice creates a KeyValue instance with a STRINGSLICE Value.\n//\n// If creating both a key and value at the same time, use the provided\n// convenience function instead -- StringSlice(name, value).\nfunc (k Key) StringSlice(v []string) KeyValue {\n\treturn KeyValue{\n\t\tKey:   k,\n\t\tValue: StringSliceValue(v),\n\t}\n}\n\n// Defined returns true for non-empty keys.\nfunc (k Key) Defined() bool {\n\treturn len(k) != 0\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/kv.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n\nimport (\n\t\"fmt\"\n)\n\n// KeyValue holds a key and value pair.\ntype KeyValue struct {\n\tKey   Key\n\tValue Value\n}\n\n// Valid returns if kv is a valid OpenTelemetry attribute.\nfunc (kv KeyValue) Valid() bool {\n\treturn kv.Key.Defined() && kv.Value.Type() != INVALID\n}\n\n// Bool creates a KeyValue with a BOOL Value type.\nfunc Bool(k string, v bool) KeyValue {\n\treturn Key(k).Bool(v)\n}\n\n// BoolSlice creates a KeyValue with a BOOLSLICE Value type.\nfunc BoolSlice(k string, v []bool) KeyValue {\n\treturn Key(k).BoolSlice(v)\n}\n\n// Int creates a KeyValue with an INT64 Value type.\nfunc Int(k string, v int) KeyValue {\n\treturn Key(k).Int(v)\n}\n\n// IntSlice creates a KeyValue with an INT64SLICE Value type.\nfunc IntSlice(k string, v []int) KeyValue {\n\treturn Key(k).IntSlice(v)\n}\n\n// Int64 creates a KeyValue with an INT64 Value type.\nfunc Int64(k string, v int64) KeyValue {\n\treturn Key(k).Int64(v)\n}\n\n// Int64Slice creates a KeyValue with an INT64SLICE Value type.\nfunc Int64Slice(k string, v []int64) KeyValue {\n\treturn Key(k).Int64Slice(v)\n}\n\n// Float64 creates a KeyValue with a FLOAT64 Value type.\nfunc Float64(k string, v float64) KeyValue {\n\treturn Key(k).Float64(v)\n}\n\n// Float64Slice creates a KeyValue with a FLOAT64SLICE Value type.\nfunc Float64Slice(k string, v []float64) KeyValue {\n\treturn Key(k).Float64Slice(v)\n}\n\n// String creates a KeyValue with a STRING Value type.\nfunc String(k, v string) KeyValue {\n\treturn Key(k).String(v)\n}\n\n// StringSlice creates a KeyValue with a STRINGSLICE Value type.\nfunc StringSlice(k string, v []string) KeyValue {\n\treturn Key(k).StringSlice(v)\n}\n\n// Stringer creates a new key-value pair with a passed name and a string\n// value generated by the passed Stringer interface.\nfunc Stringer(k string, v fmt.Stringer) KeyValue {\n\treturn Key(k).String(v.String())\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/set.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n\nimport (\n\t\"cmp\"\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"slices\"\n\t\"sort\"\n)\n\ntype (\n\t// Set is the representation for a distinct attribute set. It manages an\n\t// immutable set of attributes, with an internal cache for storing\n\t// attribute encodings.\n\t//\n\t// This type will remain comparable for backwards compatibility. The\n\t// equivalence of Sets across versions is not guaranteed to be stable.\n\t// Prior versions may find two Sets to be equal or not when compared\n\t// directly (i.e. ==), but subsequent versions may not. Users should use\n\t// the Equals method to ensure stable equivalence checking.\n\t//\n\t// Users should also use the Distinct returned from Equivalent as a map key\n\t// instead of a Set directly. In addition to that type providing guarantees\n\t// on stable equivalence, it may also provide performance improvements.\n\tSet struct {\n\t\tequivalent Distinct\n\t}\n\n\t// Distinct is a unique identifier of a Set.\n\t//\n\t// Distinct is designed to be ensures equivalence stability: comparisons\n\t// will return the save value across versions. For this reason, Distinct\n\t// should always be used as a map key instead of a Set.\n\tDistinct struct {\n\t\tiface interface{}\n\t}\n\n\t// Sortable implements sort.Interface, used for sorting KeyValue.\n\t//\n\t// Deprecated: This type is no longer used. It was added as a performance\n\t// optimization for Go < 1.21 that is no longer needed (Go < 1.21 is no\n\t// longer supported by the module).\n\tSortable []KeyValue\n)\n\nvar (\n\t// keyValueType is used in computeDistinctReflect.\n\tkeyValueType = reflect.TypeOf(KeyValue{})\n\n\t// emptySet is returned for empty attribute sets.\n\temptySet = &Set{\n\t\tequivalent: Distinct{\n\t\t\tiface: [0]KeyValue{},\n\t\t},\n\t}\n)\n\n// EmptySet returns a reference to a Set with no elements.\n//\n// This is a convenience provided for optimized calling utility.\nfunc EmptySet() *Set {\n\treturn emptySet\n}\n\n// reflectValue abbreviates reflect.ValueOf(d).\nfunc (d Distinct) reflectValue() reflect.Value {\n\treturn reflect.ValueOf(d.iface)\n}\n\n// Valid returns true if this value refers to a valid Set.\nfunc (d Distinct) Valid() bool {\n\treturn d.iface != nil\n}\n\n// Len returns the number of attributes in this set.\nfunc (l *Set) Len() int {\n\tif l == nil || !l.equivalent.Valid() {\n\t\treturn 0\n\t}\n\treturn l.equivalent.reflectValue().Len()\n}\n\n// Get returns the KeyValue at ordered position idx in this set.\nfunc (l *Set) Get(idx int) (KeyValue, bool) {\n\tif l == nil || !l.equivalent.Valid() {\n\t\treturn KeyValue{}, false\n\t}\n\tvalue := l.equivalent.reflectValue()\n\n\tif idx >= 0 && idx < value.Len() {\n\t\t// Note: The Go compiler successfully avoids an allocation for\n\t\t// the interface{} conversion here:\n\t\treturn value.Index(idx).Interface().(KeyValue), true\n\t}\n\n\treturn KeyValue{}, false\n}\n\n// Value returns the value of a specified key in this set.\nfunc (l *Set) Value(k Key) (Value, bool) {\n\tif l == nil || !l.equivalent.Valid() {\n\t\treturn Value{}, false\n\t}\n\trValue := l.equivalent.reflectValue()\n\tvlen := rValue.Len()\n\n\tidx := sort.Search(vlen, func(idx int) bool {\n\t\treturn rValue.Index(idx).Interface().(KeyValue).Key >= k\n\t})\n\tif idx >= vlen {\n\t\treturn Value{}, false\n\t}\n\tkeyValue := rValue.Index(idx).Interface().(KeyValue)\n\tif k == keyValue.Key {\n\t\treturn keyValue.Value, true\n\t}\n\treturn Value{}, false\n}\n\n// HasValue tests whether a key is defined in this set.\nfunc (l *Set) HasValue(k Key) bool {\n\tif l == nil {\n\t\treturn false\n\t}\n\t_, ok := l.Value(k)\n\treturn ok\n}\n\n// Iter returns an iterator for visiting the attributes in this set.\nfunc (l *Set) Iter() Iterator {\n\treturn Iterator{\n\t\tstorage: l,\n\t\tidx:     -1,\n\t}\n}\n\n// ToSlice returns the set of attributes belonging to this set, sorted, where\n// keys appear no more than once.\nfunc (l *Set) ToSlice() []KeyValue {\n\titer := l.Iter()\n\treturn iter.ToSlice()\n}\n\n// Equivalent returns a value that may be used as a map key. The Distinct type\n// guarantees that the result will equal the equivalent. Distinct value of any\n// attribute set with the same elements as this, where sets are made unique by\n// choosing the last value in the input for any given key.\nfunc (l *Set) Equivalent() Distinct {\n\tif l == nil || !l.equivalent.Valid() {\n\t\treturn emptySet.equivalent\n\t}\n\treturn l.equivalent\n}\n\n// Equals returns true if the argument set is equivalent to this set.\nfunc (l *Set) Equals(o *Set) bool {\n\treturn l.Equivalent() == o.Equivalent()\n}\n\n// Encoded returns the encoded form of this set, according to encoder.\nfunc (l *Set) Encoded(encoder Encoder) string {\n\tif l == nil || encoder == nil {\n\t\treturn \"\"\n\t}\n\n\treturn encoder.Encode(l.Iter())\n}\n\nfunc empty() Set {\n\treturn Set{\n\t\tequivalent: emptySet.equivalent,\n\t}\n}\n\n// NewSet returns a new Set. See the documentation for\n// NewSetWithSortableFiltered for more details.\n//\n// Except for empty sets, this method adds an additional allocation compared\n// with calls that include a Sortable.\nfunc NewSet(kvs ...KeyValue) Set {\n\ts, _ := NewSetWithFiltered(kvs, nil)\n\treturn s\n}\n\n// NewSetWithSortable returns a new Set. See the documentation for\n// NewSetWithSortableFiltered for more details.\n//\n// This call includes a Sortable option as a memory optimization.\n//\n// Deprecated: Use [NewSet] instead.\nfunc NewSetWithSortable(kvs []KeyValue, _ *Sortable) Set {\n\ts, _ := NewSetWithFiltered(kvs, nil)\n\treturn s\n}\n\n// NewSetWithFiltered returns a new Set. See the documentation for\n// NewSetWithSortableFiltered for more details.\n//\n// This call includes a Filter to include/exclude attribute keys from the\n// return value. Excluded keys are returned as a slice of attribute values.\nfunc NewSetWithFiltered(kvs []KeyValue, filter Filter) (Set, []KeyValue) {\n\t// Check for empty set.\n\tif len(kvs) == 0 {\n\t\treturn empty(), nil\n\t}\n\n\t// Stable sort so the following de-duplication can implement\n\t// last-value-wins semantics.\n\tslices.SortStableFunc(kvs, func(a, b KeyValue) int {\n\t\treturn cmp.Compare(a.Key, b.Key)\n\t})\n\n\tposition := len(kvs) - 1\n\toffset := position - 1\n\n\t// The requirements stated above require that the stable\n\t// result be placed in the end of the input slice, while\n\t// overwritten values are swapped to the beginning.\n\t//\n\t// De-duplicate with last-value-wins semantics.  Preserve\n\t// duplicate values at the beginning of the input slice.\n\tfor ; offset >= 0; offset-- {\n\t\tif kvs[offset].Key == kvs[position].Key {\n\t\t\tcontinue\n\t\t}\n\t\tposition--\n\t\tkvs[offset], kvs[position] = kvs[position], kvs[offset]\n\t}\n\tkvs = kvs[position:]\n\n\tif filter != nil {\n\t\tif div := filteredToFront(kvs, filter); div != 0 {\n\t\t\treturn Set{equivalent: computeDistinct(kvs[div:])}, kvs[:div]\n\t\t}\n\t}\n\treturn Set{equivalent: computeDistinct(kvs)}, nil\n}\n\n// NewSetWithSortableFiltered returns a new Set.\n//\n// Duplicate keys are eliminated by taking the last value.  This\n// re-orders the input slice so that unique last-values are contiguous\n// at the end of the slice.\n//\n// This ensures the following:\n//\n// - Last-value-wins semantics\n// - Caller sees the reordering, but doesn't lose values\n// - Repeated call preserve last-value wins.\n//\n// Note that methods are defined on Set, although this returns Set. Callers\n// can avoid memory allocations by:\n//\n// - allocating a Sortable for use as a temporary in this method\n// - allocating a Set for storing the return value of this constructor.\n//\n// The result maintains a cache of encoded attributes, by attribute.EncoderID.\n// This value should not be copied after its first use.\n//\n// The second []KeyValue return value is a list of attributes that were\n// excluded by the Filter (if non-nil).\n//\n// Deprecated: Use [NewSetWithFiltered] instead.\nfunc NewSetWithSortableFiltered(kvs []KeyValue, _ *Sortable, filter Filter) (Set, []KeyValue) {\n\treturn NewSetWithFiltered(kvs, filter)\n}\n\n// filteredToFront filters slice in-place using keep function. All KeyValues that need to\n// be removed are moved to the front. All KeyValues that need to be kept are\n// moved (in-order) to the back. The index for the first KeyValue to be kept is\n// returned.\nfunc filteredToFront(slice []KeyValue, keep Filter) int {\n\tn := len(slice)\n\tj := n\n\tfor i := n - 1; i >= 0; i-- {\n\t\tif keep(slice[i]) {\n\t\t\tj--\n\t\t\tslice[i], slice[j] = slice[j], slice[i]\n\t\t}\n\t}\n\treturn j\n}\n\n// Filter returns a filtered copy of this Set. See the documentation for\n// NewSetWithSortableFiltered for more details.\nfunc (l *Set) Filter(re Filter) (Set, []KeyValue) {\n\tif re == nil {\n\t\treturn *l, nil\n\t}\n\n\t// Iterate in reverse to the first attribute that will be filtered out.\n\tn := l.Len()\n\tfirst := n - 1\n\tfor ; first >= 0; first-- {\n\t\tkv, _ := l.Get(first)\n\t\tif !re(kv) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// No attributes will be dropped, return the immutable Set l and nil.\n\tif first < 0 {\n\t\treturn *l, nil\n\t}\n\n\t// Copy now that we know we need to return a modified set.\n\t//\n\t// Do not do this in-place on the underlying storage of *Set l. Sets are\n\t// immutable and filtering should not change this.\n\tslice := l.ToSlice()\n\n\t// Don't re-iterate the slice if only slice[0] is filtered.\n\tif first == 0 {\n\t\t// It is safe to assume len(slice) >= 1 given we found at least one\n\t\t// attribute above that needs to be filtered out.\n\t\treturn Set{equivalent: computeDistinct(slice[1:])}, slice[:1]\n\t}\n\n\t// Move the filtered slice[first] to the front (preserving order).\n\tkv := slice[first]\n\tcopy(slice[1:first+1], slice[:first])\n\tslice[0] = kv\n\n\t// Do not re-evaluate re(slice[first+1:]).\n\tdiv := filteredToFront(slice[1:first+1], re) + 1\n\treturn Set{equivalent: computeDistinct(slice[div:])}, slice[:div]\n}\n\n// computeDistinct returns a Distinct using either the fixed- or\n// reflect-oriented code path, depending on the size of the input. The input\n// slice is assumed to already be sorted and de-duplicated.\nfunc computeDistinct(kvs []KeyValue) Distinct {\n\tiface := computeDistinctFixed(kvs)\n\tif iface == nil {\n\t\tiface = computeDistinctReflect(kvs)\n\t}\n\treturn Distinct{\n\t\tiface: iface,\n\t}\n}\n\n// computeDistinctFixed computes a Distinct for small slices. It returns nil\n// if the input is too large for this code path.\nfunc computeDistinctFixed(kvs []KeyValue) interface{} {\n\tswitch len(kvs) {\n\tcase 1:\n\t\treturn [1]KeyValue(kvs)\n\tcase 2:\n\t\treturn [2]KeyValue(kvs)\n\tcase 3:\n\t\treturn [3]KeyValue(kvs)\n\tcase 4:\n\t\treturn [4]KeyValue(kvs)\n\tcase 5:\n\t\treturn [5]KeyValue(kvs)\n\tcase 6:\n\t\treturn [6]KeyValue(kvs)\n\tcase 7:\n\t\treturn [7]KeyValue(kvs)\n\tcase 8:\n\t\treturn [8]KeyValue(kvs)\n\tcase 9:\n\t\treturn [9]KeyValue(kvs)\n\tcase 10:\n\t\treturn [10]KeyValue(kvs)\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// computeDistinctReflect computes a Distinct using reflection, works for any\n// size input.\nfunc computeDistinctReflect(kvs []KeyValue) interface{} {\n\tat := reflect.New(reflect.ArrayOf(len(kvs), keyValueType)).Elem()\n\tfor i, keyValue := range kvs {\n\t\t*(at.Index(i).Addr().Interface().(*KeyValue)) = keyValue\n\t}\n\treturn at.Interface()\n}\n\n// MarshalJSON returns the JSON encoding of the Set.\nfunc (l *Set) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(l.equivalent.iface)\n}\n\n// MarshalLog is the marshaling function used by the logging system to represent this Set.\nfunc (l Set) MarshalLog() interface{} {\n\tkvs := make(map[string]string)\n\tfor _, kv := range l.ToSlice() {\n\t\tkvs[string(kv.Key)] = kv.Value.Emit()\n\t}\n\treturn kvs\n}\n\n// Len implements sort.Interface.\nfunc (l *Sortable) Len() int {\n\treturn len(*l)\n}\n\n// Swap implements sort.Interface.\nfunc (l *Sortable) Swap(i, j int) {\n\t(*l)[i], (*l)[j] = (*l)[j], (*l)[i]\n}\n\n// Less implements sort.Interface.\nfunc (l *Sortable) Less(i, j int) bool {\n\treturn (*l)[i].Key < (*l)[j].Key\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/type_string.go",
    "content": "// Code generated by \"stringer -type=Type\"; DO NOT EDIT.\n\npackage attribute\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[INVALID-0]\n\t_ = x[BOOL-1]\n\t_ = x[INT64-2]\n\t_ = x[FLOAT64-3]\n\t_ = x[STRING-4]\n\t_ = x[BOOLSLICE-5]\n\t_ = x[INT64SLICE-6]\n\t_ = x[FLOAT64SLICE-7]\n\t_ = x[STRINGSLICE-8]\n}\n\nconst _Type_name = \"INVALIDBOOLINT64FLOAT64STRINGBOOLSLICEINT64SLICEFLOAT64SLICESTRINGSLICE\"\n\nvar _Type_index = [...]uint8{0, 7, 11, 16, 23, 29, 38, 48, 60, 71}\n\nfunc (i Type) String() string {\n\tif i < 0 || i >= Type(len(_Type_index)-1) {\n\t\treturn \"Type(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _Type_name[_Type_index[i]:_Type_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/attribute/value.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage attribute // import \"go.opentelemetry.io/otel/attribute\"\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"go.opentelemetry.io/otel/internal\"\n\t\"go.opentelemetry.io/otel/internal/attribute\"\n)\n\n//go:generate stringer -type=Type\n\n// Type describes the type of the data Value holds.\ntype Type int // nolint: revive  // redefines builtin Type.\n\n// Value represents the value part in key-value pairs.\ntype Value struct {\n\tvtype    Type\n\tnumeric  uint64\n\tstringly string\n\tslice    interface{}\n}\n\nconst (\n\t// INVALID is used for a Value with no value set.\n\tINVALID Type = iota\n\t// BOOL is a boolean Type Value.\n\tBOOL\n\t// INT64 is a 64-bit signed integral Type Value.\n\tINT64\n\t// FLOAT64 is a 64-bit floating point Type Value.\n\tFLOAT64\n\t// STRING is a string Type Value.\n\tSTRING\n\t// BOOLSLICE is a slice of booleans Type Value.\n\tBOOLSLICE\n\t// INT64SLICE is a slice of 64-bit signed integral numbers Type Value.\n\tINT64SLICE\n\t// FLOAT64SLICE is a slice of 64-bit floating point numbers Type Value.\n\tFLOAT64SLICE\n\t// STRINGSLICE is a slice of strings Type Value.\n\tSTRINGSLICE\n)\n\n// BoolValue creates a BOOL Value.\nfunc BoolValue(v bool) Value {\n\treturn Value{\n\t\tvtype:   BOOL,\n\t\tnumeric: internal.BoolToRaw(v),\n\t}\n}\n\n// BoolSliceValue creates a BOOLSLICE Value.\nfunc BoolSliceValue(v []bool) Value {\n\treturn Value{vtype: BOOLSLICE, slice: attribute.BoolSliceValue(v)}\n}\n\n// IntValue creates an INT64 Value.\nfunc IntValue(v int) Value {\n\treturn Int64Value(int64(v))\n}\n\n// IntSliceValue creates an INTSLICE Value.\nfunc IntSliceValue(v []int) Value {\n\tvar int64Val int64\n\tcp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(int64Val)))\n\tfor i, val := range v {\n\t\tcp.Elem().Index(i).SetInt(int64(val))\n\t}\n\treturn Value{\n\t\tvtype: INT64SLICE,\n\t\tslice: cp.Elem().Interface(),\n\t}\n}\n\n// Int64Value creates an INT64 Value.\nfunc Int64Value(v int64) Value {\n\treturn Value{\n\t\tvtype:   INT64,\n\t\tnumeric: internal.Int64ToRaw(v),\n\t}\n}\n\n// Int64SliceValue creates an INT64SLICE Value.\nfunc Int64SliceValue(v []int64) Value {\n\treturn Value{vtype: INT64SLICE, slice: attribute.Int64SliceValue(v)}\n}\n\n// Float64Value creates a FLOAT64 Value.\nfunc Float64Value(v float64) Value {\n\treturn Value{\n\t\tvtype:   FLOAT64,\n\t\tnumeric: internal.Float64ToRaw(v),\n\t}\n}\n\n// Float64SliceValue creates a FLOAT64SLICE Value.\nfunc Float64SliceValue(v []float64) Value {\n\treturn Value{vtype: FLOAT64SLICE, slice: attribute.Float64SliceValue(v)}\n}\n\n// StringValue creates a STRING Value.\nfunc StringValue(v string) Value {\n\treturn Value{\n\t\tvtype:    STRING,\n\t\tstringly: v,\n\t}\n}\n\n// StringSliceValue creates a STRINGSLICE Value.\nfunc StringSliceValue(v []string) Value {\n\treturn Value{vtype: STRINGSLICE, slice: attribute.StringSliceValue(v)}\n}\n\n// Type returns a type of the Value.\nfunc (v Value) Type() Type {\n\treturn v.vtype\n}\n\n// AsBool returns the bool value. Make sure that the Value's type is\n// BOOL.\nfunc (v Value) AsBool() bool {\n\treturn internal.RawToBool(v.numeric)\n}\n\n// AsBoolSlice returns the []bool value. Make sure that the Value's type is\n// BOOLSLICE.\nfunc (v Value) AsBoolSlice() []bool {\n\tif v.vtype != BOOLSLICE {\n\t\treturn nil\n\t}\n\treturn v.asBoolSlice()\n}\n\nfunc (v Value) asBoolSlice() []bool {\n\treturn attribute.AsBoolSlice(v.slice)\n}\n\n// AsInt64 returns the int64 value. Make sure that the Value's type is\n// INT64.\nfunc (v Value) AsInt64() int64 {\n\treturn internal.RawToInt64(v.numeric)\n}\n\n// AsInt64Slice returns the []int64 value. Make sure that the Value's type is\n// INT64SLICE.\nfunc (v Value) AsInt64Slice() []int64 {\n\tif v.vtype != INT64SLICE {\n\t\treturn nil\n\t}\n\treturn v.asInt64Slice()\n}\n\nfunc (v Value) asInt64Slice() []int64 {\n\treturn attribute.AsInt64Slice(v.slice)\n}\n\n// AsFloat64 returns the float64 value. Make sure that the Value's\n// type is FLOAT64.\nfunc (v Value) AsFloat64() float64 {\n\treturn internal.RawToFloat64(v.numeric)\n}\n\n// AsFloat64Slice returns the []float64 value. Make sure that the Value's type is\n// FLOAT64SLICE.\nfunc (v Value) AsFloat64Slice() []float64 {\n\tif v.vtype != FLOAT64SLICE {\n\t\treturn nil\n\t}\n\treturn v.asFloat64Slice()\n}\n\nfunc (v Value) asFloat64Slice() []float64 {\n\treturn attribute.AsFloat64Slice(v.slice)\n}\n\n// AsString returns the string value. Make sure that the Value's type\n// is STRING.\nfunc (v Value) AsString() string {\n\treturn v.stringly\n}\n\n// AsStringSlice returns the []string value. Make sure that the Value's type is\n// STRINGSLICE.\nfunc (v Value) AsStringSlice() []string {\n\tif v.vtype != STRINGSLICE {\n\t\treturn nil\n\t}\n\treturn v.asStringSlice()\n}\n\nfunc (v Value) asStringSlice() []string {\n\treturn attribute.AsStringSlice(v.slice)\n}\n\ntype unknownValueType struct{}\n\n// AsInterface returns Value's data as interface{}.\nfunc (v Value) AsInterface() interface{} {\n\tswitch v.Type() {\n\tcase BOOL:\n\t\treturn v.AsBool()\n\tcase BOOLSLICE:\n\t\treturn v.asBoolSlice()\n\tcase INT64:\n\t\treturn v.AsInt64()\n\tcase INT64SLICE:\n\t\treturn v.asInt64Slice()\n\tcase FLOAT64:\n\t\treturn v.AsFloat64()\n\tcase FLOAT64SLICE:\n\t\treturn v.asFloat64Slice()\n\tcase STRING:\n\t\treturn v.stringly\n\tcase STRINGSLICE:\n\t\treturn v.asStringSlice()\n\t}\n\treturn unknownValueType{}\n}\n\n// Emit returns a string representation of Value's data.\nfunc (v Value) Emit() string {\n\tswitch v.Type() {\n\tcase BOOLSLICE:\n\t\treturn fmt.Sprint(v.asBoolSlice())\n\tcase BOOL:\n\t\treturn strconv.FormatBool(v.AsBool())\n\tcase INT64SLICE:\n\t\tj, err := json.Marshal(v.asInt64Slice())\n\t\tif err != nil {\n\t\t\treturn fmt.Sprintf(\"invalid: %v\", v.asInt64Slice())\n\t\t}\n\t\treturn string(j)\n\tcase INT64:\n\t\treturn strconv.FormatInt(v.AsInt64(), 10)\n\tcase FLOAT64SLICE:\n\t\tj, err := json.Marshal(v.asFloat64Slice())\n\t\tif err != nil {\n\t\t\treturn fmt.Sprintf(\"invalid: %v\", v.asFloat64Slice())\n\t\t}\n\t\treturn string(j)\n\tcase FLOAT64:\n\t\treturn fmt.Sprint(v.AsFloat64())\n\tcase STRINGSLICE:\n\t\tj, err := json.Marshal(v.asStringSlice())\n\t\tif err != nil {\n\t\t\treturn fmt.Sprintf(\"invalid: %v\", v.asStringSlice())\n\t\t}\n\t\treturn string(j)\n\tcase STRING:\n\t\treturn v.stringly\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\n// MarshalJSON returns the JSON encoding of the Value.\nfunc (v Value) MarshalJSON() ([]byte, error) {\n\tvar jsonVal struct {\n\t\tType  string\n\t\tValue interface{}\n\t}\n\tjsonVal.Type = v.Type().String()\n\tjsonVal.Value = v.AsInterface()\n\treturn json.Marshal(jsonVal)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/baggage/README.md",
    "content": "# Baggage\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/baggage)](https://pkg.go.dev/go.opentelemetry.io/otel/baggage)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/baggage/baggage.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage baggage // import \"go.opentelemetry.io/otel/baggage\"\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"strings\"\n\t\"unicode/utf8\"\n\n\t\"go.opentelemetry.io/otel/internal/baggage\"\n)\n\nconst (\n\tmaxMembers               = 180\n\tmaxBytesPerMembers       = 4096\n\tmaxBytesPerBaggageString = 8192\n\n\tlistDelimiter     = \",\"\n\tkeyValueDelimiter = \"=\"\n\tpropertyDelimiter = \";\"\n)\n\nvar (\n\terrInvalidKey      = errors.New(\"invalid key\")\n\terrInvalidValue    = errors.New(\"invalid value\")\n\terrInvalidProperty = errors.New(\"invalid baggage list-member property\")\n\terrInvalidMember   = errors.New(\"invalid baggage list-member\")\n\terrMemberNumber    = errors.New(\"too many list-members in baggage-string\")\n\terrMemberBytes     = errors.New(\"list-member too large\")\n\terrBaggageBytes    = errors.New(\"baggage-string too large\")\n)\n\n// Property is an additional metadata entry for a baggage list-member.\ntype Property struct {\n\tkey, value string\n\n\t// hasValue indicates if a zero-value value means the property does not\n\t// have a value or if it was the zero-value.\n\thasValue bool\n}\n\n// NewKeyProperty returns a new Property for key.\n//\n// The passed key must be valid, non-empty UTF-8 string.\n// If key is invalid, an error will be returned.\n// However, the specific Propagators that are used to transmit baggage entries across\n// component boundaries may impose their own restrictions on Property key.\n// For example, the W3C Baggage specification restricts the Property keys to strings that\n// satisfy the token definition from RFC7230, Section 3.2.6.\n// For maximum compatibility, alphanumeric value are strongly recommended to be used as Property key.\nfunc NewKeyProperty(key string) (Property, error) {\n\tif !validateBaggageName(key) {\n\t\treturn newInvalidProperty(), fmt.Errorf(\"%w: %q\", errInvalidKey, key)\n\t}\n\n\tp := Property{key: key}\n\treturn p, nil\n}\n\n// NewKeyValueProperty returns a new Property for key with value.\n//\n// The passed key must be compliant with W3C Baggage specification.\n// The passed value must be percent-encoded as defined in W3C Baggage specification.\n//\n// Notice: Consider using [NewKeyValuePropertyRaw] instead\n// that does not require percent-encoding of the value.\nfunc NewKeyValueProperty(key, value string) (Property, error) {\n\tif !validateKey(key) {\n\t\treturn newInvalidProperty(), fmt.Errorf(\"%w: %q\", errInvalidKey, key)\n\t}\n\n\tif !validateValue(value) {\n\t\treturn newInvalidProperty(), fmt.Errorf(\"%w: %q\", errInvalidValue, value)\n\t}\n\tdecodedValue, err := url.PathUnescape(value)\n\tif err != nil {\n\t\treturn newInvalidProperty(), fmt.Errorf(\"%w: %q\", errInvalidValue, value)\n\t}\n\treturn NewKeyValuePropertyRaw(key, decodedValue)\n}\n\n// NewKeyValuePropertyRaw returns a new Property for key with value.\n//\n// The passed key must be valid, non-empty UTF-8 string.\n// The passed value must be valid UTF-8 string.\n// However, the specific Propagators that are used to transmit baggage entries across\n// component boundaries may impose their own restrictions on Property key.\n// For example, the W3C Baggage specification restricts the Property keys to strings that\n// satisfy the token definition from RFC7230, Section 3.2.6.\n// For maximum compatibility, alphanumeric value are strongly recommended to be used as Property key.\nfunc NewKeyValuePropertyRaw(key, value string) (Property, error) {\n\tif !validateBaggageName(key) {\n\t\treturn newInvalidProperty(), fmt.Errorf(\"%w: %q\", errInvalidKey, key)\n\t}\n\tif !validateBaggageValue(value) {\n\t\treturn newInvalidProperty(), fmt.Errorf(\"%w: %q\", errInvalidValue, value)\n\t}\n\n\tp := Property{\n\t\tkey:      key,\n\t\tvalue:    value,\n\t\thasValue: true,\n\t}\n\treturn p, nil\n}\n\nfunc newInvalidProperty() Property {\n\treturn Property{}\n}\n\n// parseProperty attempts to decode a Property from the passed string. It\n// returns an error if the input is invalid according to the W3C Baggage\n// specification.\nfunc parseProperty(property string) (Property, error) {\n\tif property == \"\" {\n\t\treturn newInvalidProperty(), nil\n\t}\n\n\tp, ok := parsePropertyInternal(property)\n\tif !ok {\n\t\treturn newInvalidProperty(), fmt.Errorf(\"%w: %q\", errInvalidProperty, property)\n\t}\n\n\treturn p, nil\n}\n\n// validate ensures p conforms to the W3C Baggage specification, returning an\n// error otherwise.\nfunc (p Property) validate() error {\n\terrFunc := func(err error) error {\n\t\treturn fmt.Errorf(\"invalid property: %w\", err)\n\t}\n\n\tif !validateBaggageName(p.key) {\n\t\treturn errFunc(fmt.Errorf(\"%w: %q\", errInvalidKey, p.key))\n\t}\n\tif !p.hasValue && p.value != \"\" {\n\t\treturn errFunc(errors.New(\"inconsistent value\"))\n\t}\n\tif p.hasValue && !validateBaggageValue(p.value) {\n\t\treturn errFunc(fmt.Errorf(\"%w: %q\", errInvalidValue, p.value))\n\t}\n\treturn nil\n}\n\n// Key returns the Property key.\nfunc (p Property) Key() string {\n\treturn p.key\n}\n\n// Value returns the Property value. Additionally, a boolean value is returned\n// indicating if the returned value is the empty if the Property has a value\n// that is empty or if the value is not set.\nfunc (p Property) Value() (string, bool) {\n\treturn p.value, p.hasValue\n}\n\n// String encodes Property into a header string compliant with the W3C Baggage\n// specification.\n// It would return empty string if the key is invalid with the W3C Baggage\n// specification. This could happen for a UTF-8 key, as it may contain\n// invalid characters.\nfunc (p Property) String() string {\n\t//  W3C Baggage specification does not allow percent-encoded keys.\n\tif !validateKey(p.key) {\n\t\treturn \"\"\n\t}\n\n\tif p.hasValue {\n\t\treturn fmt.Sprintf(\"%s%s%v\", p.key, keyValueDelimiter, valueEscape(p.value))\n\t}\n\treturn p.key\n}\n\ntype properties []Property\n\nfunc fromInternalProperties(iProps []baggage.Property) properties {\n\tif len(iProps) == 0 {\n\t\treturn nil\n\t}\n\n\tprops := make(properties, len(iProps))\n\tfor i, p := range iProps {\n\t\tprops[i] = Property{\n\t\t\tkey:      p.Key,\n\t\t\tvalue:    p.Value,\n\t\t\thasValue: p.HasValue,\n\t\t}\n\t}\n\treturn props\n}\n\nfunc (p properties) asInternal() []baggage.Property {\n\tif len(p) == 0 {\n\t\treturn nil\n\t}\n\n\tiProps := make([]baggage.Property, len(p))\n\tfor i, prop := range p {\n\t\tiProps[i] = baggage.Property{\n\t\t\tKey:      prop.key,\n\t\t\tValue:    prop.value,\n\t\t\tHasValue: prop.hasValue,\n\t\t}\n\t}\n\treturn iProps\n}\n\nfunc (p properties) Copy() properties {\n\tif len(p) == 0 {\n\t\treturn nil\n\t}\n\n\tprops := make(properties, len(p))\n\tcopy(props, p)\n\treturn props\n}\n\n// validate ensures each Property in p conforms to the W3C Baggage\n// specification, returning an error otherwise.\nfunc (p properties) validate() error {\n\tfor _, prop := range p {\n\t\tif err := prop.validate(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// String encodes properties into a header string compliant with the W3C Baggage\n// specification.\nfunc (p properties) String() string {\n\tprops := make([]string, 0, len(p))\n\tfor _, prop := range p {\n\t\ts := prop.String()\n\n\t\t// Ignored empty properties.\n\t\tif s != \"\" {\n\t\t\tprops = append(props, s)\n\t\t}\n\t}\n\treturn strings.Join(props, propertyDelimiter)\n}\n\n// Member is a list-member of a baggage-string as defined by the W3C Baggage\n// specification.\ntype Member struct {\n\tkey, value string\n\tproperties properties\n\n\t// hasData indicates whether the created property contains data or not.\n\t// Properties that do not contain data are invalid with no other check\n\t// required.\n\thasData bool\n}\n\n// NewMember returns a new Member from the passed arguments.\n//\n// The passed key must be compliant with W3C Baggage specification.\n// The passed value must be percent-encoded as defined in W3C Baggage specification.\n//\n// Notice: Consider using [NewMemberRaw] instead\n// that does not require percent-encoding of the value.\nfunc NewMember(key, value string, props ...Property) (Member, error) {\n\tif !validateKey(key) {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %q\", errInvalidKey, key)\n\t}\n\n\tif !validateValue(value) {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %q\", errInvalidValue, value)\n\t}\n\tdecodedValue, err := url.PathUnescape(value)\n\tif err != nil {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %q\", errInvalidValue, value)\n\t}\n\treturn NewMemberRaw(key, decodedValue, props...)\n}\n\n// NewMemberRaw returns a new Member from the passed arguments.\n//\n// The passed key must be valid, non-empty UTF-8 string.\n// The passed value must be valid UTF-8 string.\n// However, the specific Propagators that are used to transmit baggage entries across\n// component boundaries may impose their own restrictions on baggage key.\n// For example, the W3C Baggage specification restricts the baggage keys to strings that\n// satisfy the token definition from RFC7230, Section 3.2.6.\n// For maximum compatibility, alphanumeric value are strongly recommended to be used as baggage key.\nfunc NewMemberRaw(key, value string, props ...Property) (Member, error) {\n\tm := Member{\n\t\tkey:        key,\n\t\tvalue:      value,\n\t\tproperties: properties(props).Copy(),\n\t\thasData:    true,\n\t}\n\tif err := m.validate(); err != nil {\n\t\treturn newInvalidMember(), err\n\t}\n\treturn m, nil\n}\n\nfunc newInvalidMember() Member {\n\treturn Member{}\n}\n\n// parseMember attempts to decode a Member from the passed string. It returns\n// an error if the input is invalid according to the W3C Baggage\n// specification.\nfunc parseMember(member string) (Member, error) {\n\tif n := len(member); n > maxBytesPerMembers {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %d\", errMemberBytes, n)\n\t}\n\n\tvar props properties\n\tkeyValue, properties, found := strings.Cut(member, propertyDelimiter)\n\tif found {\n\t\t// Parse the member properties.\n\t\tfor _, pStr := range strings.Split(properties, propertyDelimiter) {\n\t\t\tp, err := parseProperty(pStr)\n\t\t\tif err != nil {\n\t\t\t\treturn newInvalidMember(), err\n\t\t\t}\n\t\t\tprops = append(props, p)\n\t\t}\n\t}\n\t// Parse the member key/value pair.\n\n\t// Take into account a value can contain equal signs (=).\n\tk, v, found := strings.Cut(keyValue, keyValueDelimiter)\n\tif !found {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %q\", errInvalidMember, member)\n\t}\n\t// \"Leading and trailing whitespaces are allowed but MUST be trimmed\n\t// when converting the header into a data structure.\"\n\tkey := strings.TrimSpace(k)\n\tif !validateKey(key) {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %q\", errInvalidKey, key)\n\t}\n\n\trawVal := strings.TrimSpace(v)\n\tif !validateValue(rawVal) {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %q\", errInvalidValue, v)\n\t}\n\n\t// Decode a percent-encoded value.\n\tunescapeVal, err := url.PathUnescape(rawVal)\n\tif err != nil {\n\t\treturn newInvalidMember(), fmt.Errorf(\"%w: %w\", errInvalidValue, err)\n\t}\n\n\tvalue := replaceInvalidUTF8Sequences(len(rawVal), unescapeVal)\n\treturn Member{key: key, value: value, properties: props, hasData: true}, nil\n}\n\n// replaceInvalidUTF8Sequences replaces invalid UTF-8 sequences with '�'.\nfunc replaceInvalidUTF8Sequences(c int, unescapeVal string) string {\n\tif utf8.ValidString(unescapeVal) {\n\t\treturn unescapeVal\n\t}\n\t// W3C baggage spec:\n\t// https://github.com/w3c/baggage/blob/8c215efbeebd3fa4b1aceb937a747e56444f22f3/baggage/HTTP_HEADER_FORMAT.md?plain=1#L69\n\n\tvar b strings.Builder\n\tb.Grow(c)\n\tfor i := 0; i < len(unescapeVal); {\n\t\tr, size := utf8.DecodeRuneInString(unescapeVal[i:])\n\t\tif r == utf8.RuneError && size == 1 {\n\t\t\t// Invalid UTF-8 sequence found, replace it with '�'\n\t\t\t_, _ = b.WriteString(\"�\")\n\t\t} else {\n\t\t\t_, _ = b.WriteRune(r)\n\t\t}\n\t\ti += size\n\t}\n\n\treturn b.String()\n}\n\n// validate ensures m conforms to the W3C Baggage specification.\n// A key must be an ASCII string, returning an error otherwise.\nfunc (m Member) validate() error {\n\tif !m.hasData {\n\t\treturn fmt.Errorf(\"%w: %q\", errInvalidMember, m)\n\t}\n\n\tif !validateBaggageName(m.key) {\n\t\treturn fmt.Errorf(\"%w: %q\", errInvalidKey, m.key)\n\t}\n\tif !validateBaggageValue(m.value) {\n\t\treturn fmt.Errorf(\"%w: %q\", errInvalidValue, m.value)\n\t}\n\treturn m.properties.validate()\n}\n\n// Key returns the Member key.\nfunc (m Member) Key() string { return m.key }\n\n// Value returns the Member value.\nfunc (m Member) Value() string { return m.value }\n\n// Properties returns a copy of the Member properties.\nfunc (m Member) Properties() []Property { return m.properties.Copy() }\n\n// String encodes Member into a header string compliant with the W3C Baggage\n// specification.\n// It would return empty string if the key is invalid with the W3C Baggage\n// specification. This could happen for a UTF-8 key, as it may contain\n// invalid characters.\nfunc (m Member) String() string {\n\t//  W3C Baggage specification does not allow percent-encoded keys.\n\tif !validateKey(m.key) {\n\t\treturn \"\"\n\t}\n\n\ts := m.key + keyValueDelimiter + valueEscape(m.value)\n\tif len(m.properties) > 0 {\n\t\ts += propertyDelimiter + m.properties.String()\n\t}\n\treturn s\n}\n\n// Baggage is a list of baggage members representing the baggage-string as\n// defined by the W3C Baggage specification.\ntype Baggage struct { //nolint:golint\n\tlist baggage.List\n}\n\n// New returns a new valid Baggage. It returns an error if it results in a\n// Baggage exceeding limits set in that specification.\n//\n// It expects all the provided members to have already been validated.\nfunc New(members ...Member) (Baggage, error) {\n\tif len(members) == 0 {\n\t\treturn Baggage{}, nil\n\t}\n\n\tb := make(baggage.List)\n\tfor _, m := range members {\n\t\tif !m.hasData {\n\t\t\treturn Baggage{}, errInvalidMember\n\t\t}\n\n\t\t// OpenTelemetry resolves duplicates by last-one-wins.\n\t\tb[m.key] = baggage.Item{\n\t\t\tValue:      m.value,\n\t\t\tProperties: m.properties.asInternal(),\n\t\t}\n\t}\n\n\t// Check member numbers after deduplication.\n\tif len(b) > maxMembers {\n\t\treturn Baggage{}, errMemberNumber\n\t}\n\n\tbag := Baggage{b}\n\tif n := len(bag.String()); n > maxBytesPerBaggageString {\n\t\treturn Baggage{}, fmt.Errorf(\"%w: %d\", errBaggageBytes, n)\n\t}\n\n\treturn bag, nil\n}\n\n// Parse attempts to decode a baggage-string from the passed string. It\n// returns an error if the input is invalid according to the W3C Baggage\n// specification.\n//\n// If there are duplicate list-members contained in baggage, the last one\n// defined (reading left-to-right) will be the only one kept. This diverges\n// from the W3C Baggage specification which allows duplicate list-members, but\n// conforms to the OpenTelemetry Baggage specification.\nfunc Parse(bStr string) (Baggage, error) {\n\tif bStr == \"\" {\n\t\treturn Baggage{}, nil\n\t}\n\n\tif n := len(bStr); n > maxBytesPerBaggageString {\n\t\treturn Baggage{}, fmt.Errorf(\"%w: %d\", errBaggageBytes, n)\n\t}\n\n\tb := make(baggage.List)\n\tfor _, memberStr := range strings.Split(bStr, listDelimiter) {\n\t\tm, err := parseMember(memberStr)\n\t\tif err != nil {\n\t\t\treturn Baggage{}, err\n\t\t}\n\t\t// OpenTelemetry resolves duplicates by last-one-wins.\n\t\tb[m.key] = baggage.Item{\n\t\t\tValue:      m.value,\n\t\t\tProperties: m.properties.asInternal(),\n\t\t}\n\t}\n\n\t// OpenTelemetry does not allow for duplicate list-members, but the W3C\n\t// specification does. Now that we have deduplicated, ensure the baggage\n\t// does not exceed list-member limits.\n\tif len(b) > maxMembers {\n\t\treturn Baggage{}, errMemberNumber\n\t}\n\n\treturn Baggage{b}, nil\n}\n\n// Member returns the baggage list-member identified by key.\n//\n// If there is no list-member matching the passed key the returned Member will\n// be a zero-value Member.\n// The returned member is not validated, as we assume the validation happened\n// when it was added to the Baggage.\nfunc (b Baggage) Member(key string) Member {\n\tv, ok := b.list[key]\n\tif !ok {\n\t\t// We do not need to worry about distinguishing between the situation\n\t\t// where a zero-valued Member is included in the Baggage because a\n\t\t// zero-valued Member is invalid according to the W3C Baggage\n\t\t// specification (it has an empty key).\n\t\treturn newInvalidMember()\n\t}\n\n\treturn Member{\n\t\tkey:        key,\n\t\tvalue:      v.Value,\n\t\tproperties: fromInternalProperties(v.Properties),\n\t\thasData:    true,\n\t}\n}\n\n// Members returns all the baggage list-members.\n// The order of the returned list-members is not significant.\n//\n// The returned members are not validated, as we assume the validation happened\n// when they were added to the Baggage.\nfunc (b Baggage) Members() []Member {\n\tif len(b.list) == 0 {\n\t\treturn nil\n\t}\n\n\tmembers := make([]Member, 0, len(b.list))\n\tfor k, v := range b.list {\n\t\tmembers = append(members, Member{\n\t\t\tkey:        k,\n\t\t\tvalue:      v.Value,\n\t\t\tproperties: fromInternalProperties(v.Properties),\n\t\t\thasData:    true,\n\t\t})\n\t}\n\treturn members\n}\n\n// SetMember returns a copy of the Baggage with the member included. If the\n// baggage contains a Member with the same key, the existing Member is\n// replaced.\n//\n// If member is invalid according to the W3C Baggage specification, an error\n// is returned with the original Baggage.\nfunc (b Baggage) SetMember(member Member) (Baggage, error) {\n\tif !member.hasData {\n\t\treturn b, errInvalidMember\n\t}\n\n\tn := len(b.list)\n\tif _, ok := b.list[member.key]; !ok {\n\t\tn++\n\t}\n\tlist := make(baggage.List, n)\n\n\tfor k, v := range b.list {\n\t\t// Do not copy if we are just going to overwrite.\n\t\tif k == member.key {\n\t\t\tcontinue\n\t\t}\n\t\tlist[k] = v\n\t}\n\n\tlist[member.key] = baggage.Item{\n\t\tValue:      member.value,\n\t\tProperties: member.properties.asInternal(),\n\t}\n\n\treturn Baggage{list: list}, nil\n}\n\n// DeleteMember returns a copy of the Baggage with the list-member identified\n// by key removed.\nfunc (b Baggage) DeleteMember(key string) Baggage {\n\tn := len(b.list)\n\tif _, ok := b.list[key]; ok {\n\t\tn--\n\t}\n\tlist := make(baggage.List, n)\n\n\tfor k, v := range b.list {\n\t\tif k == key {\n\t\t\tcontinue\n\t\t}\n\t\tlist[k] = v\n\t}\n\n\treturn Baggage{list: list}\n}\n\n// Len returns the number of list-members in the Baggage.\nfunc (b Baggage) Len() int {\n\treturn len(b.list)\n}\n\n// String encodes Baggage into a header string compliant with the W3C Baggage\n// specification.\n// It would ignore members where the member key is invalid with the W3C Baggage\n// specification. This could happen for a UTF-8 key, as it may contain\n// invalid characters.\nfunc (b Baggage) String() string {\n\tmembers := make([]string, 0, len(b.list))\n\tfor k, v := range b.list {\n\t\ts := Member{\n\t\t\tkey:        k,\n\t\t\tvalue:      v.Value,\n\t\t\tproperties: fromInternalProperties(v.Properties),\n\t\t}.String()\n\n\t\t// Ignored empty members.\n\t\tif s != \"\" {\n\t\t\tmembers = append(members, s)\n\t\t}\n\t}\n\treturn strings.Join(members, listDelimiter)\n}\n\n// parsePropertyInternal attempts to decode a Property from the passed string.\n// It follows the spec at https://www.w3.org/TR/baggage/#definition.\nfunc parsePropertyInternal(s string) (p Property, ok bool) {\n\t// For the entire function we will use \"   key    =    value  \" as an example.\n\t// Attempting to parse the key.\n\t// First skip spaces at the beginning \"<   >key    =    value  \" (they could be empty).\n\tindex := skipSpace(s, 0)\n\n\t// Parse the key: \"   <key>    =    value  \".\n\tkeyStart := index\n\tkeyEnd := index\n\tfor _, c := range s[keyStart:] {\n\t\tif !validateKeyChar(c) {\n\t\t\tbreak\n\t\t}\n\t\tkeyEnd++\n\t}\n\n\t// If we couldn't find any valid key character,\n\t// it means the key is either empty or invalid.\n\tif keyStart == keyEnd {\n\t\treturn\n\t}\n\n\t// Skip spaces after the key: \"   key<    >=    value  \".\n\tindex = skipSpace(s, keyEnd)\n\n\tif index == len(s) {\n\t\t// A key can have no value, like: \"   key    \".\n\t\tok = true\n\t\tp.key = s[keyStart:keyEnd]\n\t\treturn\n\t}\n\n\t// If we have not reached the end and we can't find the '=' delimiter,\n\t// it means the property is invalid.\n\tif s[index] != keyValueDelimiter[0] {\n\t\treturn\n\t}\n\n\t// Attempting to parse the value.\n\t// Match: \"   key    =<    >value  \".\n\tindex = skipSpace(s, index+1)\n\n\t// Match the value string: \"   key    =    <value>  \".\n\t// A valid property can be: \"   key    =\".\n\t// Therefore, we don't have to check if the value is empty.\n\tvalueStart := index\n\tvalueEnd := index\n\tfor _, c := range s[valueStart:] {\n\t\tif !validateValueChar(c) {\n\t\t\tbreak\n\t\t}\n\t\tvalueEnd++\n\t}\n\n\t// Skip all trailing whitespaces: \"   key    =    value<  >\".\n\tindex = skipSpace(s, valueEnd)\n\n\t// If after looking for the value and skipping whitespaces\n\t// we have not reached the end, it means the property is\n\t// invalid, something like: \"   key    =    value  value1\".\n\tif index != len(s) {\n\t\treturn\n\t}\n\n\t// Decode a percent-encoded value.\n\trawVal := s[valueStart:valueEnd]\n\tunescapeVal, err := url.PathUnescape(rawVal)\n\tif err != nil {\n\t\treturn\n\t}\n\tvalue := replaceInvalidUTF8Sequences(len(rawVal), unescapeVal)\n\n\tok = true\n\tp.key = s[keyStart:keyEnd]\n\tp.hasValue = true\n\n\tp.value = value\n\treturn\n}\n\nfunc skipSpace(s string, offset int) int {\n\ti := offset\n\tfor ; i < len(s); i++ {\n\t\tc := s[i]\n\t\tif c != ' ' && c != '\\t' {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn i\n}\n\nvar safeKeyCharset = [utf8.RuneSelf]bool{\n\t// 0x23 to 0x27\n\t'#':  true,\n\t'$':  true,\n\t'%':  true,\n\t'&':  true,\n\t'\\'': true,\n\n\t// 0x30 to 0x39\n\t'0': true,\n\t'1': true,\n\t'2': true,\n\t'3': true,\n\t'4': true,\n\t'5': true,\n\t'6': true,\n\t'7': true,\n\t'8': true,\n\t'9': true,\n\n\t// 0x41 to 0x5a\n\t'A': true,\n\t'B': true,\n\t'C': true,\n\t'D': true,\n\t'E': true,\n\t'F': true,\n\t'G': true,\n\t'H': true,\n\t'I': true,\n\t'J': true,\n\t'K': true,\n\t'L': true,\n\t'M': true,\n\t'N': true,\n\t'O': true,\n\t'P': true,\n\t'Q': true,\n\t'R': true,\n\t'S': true,\n\t'T': true,\n\t'U': true,\n\t'V': true,\n\t'W': true,\n\t'X': true,\n\t'Y': true,\n\t'Z': true,\n\n\t// 0x5e to 0x7a\n\t'^': true,\n\t'_': true,\n\t'`': true,\n\t'a': true,\n\t'b': true,\n\t'c': true,\n\t'd': true,\n\t'e': true,\n\t'f': true,\n\t'g': true,\n\t'h': true,\n\t'i': true,\n\t'j': true,\n\t'k': true,\n\t'l': true,\n\t'm': true,\n\t'n': true,\n\t'o': true,\n\t'p': true,\n\t'q': true,\n\t'r': true,\n\t's': true,\n\t't': true,\n\t'u': true,\n\t'v': true,\n\t'w': true,\n\t'x': true,\n\t'y': true,\n\t'z': true,\n\n\t// remainder\n\t'!': true,\n\t'*': true,\n\t'+': true,\n\t'-': true,\n\t'.': true,\n\t'|': true,\n\t'~': true,\n}\n\n// validateBaggageName checks if the string is a valid OpenTelemetry Baggage name.\n// Baggage name is a valid, non-empty UTF-8 string.\nfunc validateBaggageName(s string) bool {\n\tif len(s) == 0 {\n\t\treturn false\n\t}\n\n\treturn utf8.ValidString(s)\n}\n\n// validateBaggageValue checks if the string is a valid OpenTelemetry Baggage value.\n// Baggage value is a valid UTF-8 strings.\n// Empty string is also a valid UTF-8 string.\nfunc validateBaggageValue(s string) bool {\n\treturn utf8.ValidString(s)\n}\n\n// validateKey checks if the string is a valid W3C Baggage key.\nfunc validateKey(s string) bool {\n\tif len(s) == 0 {\n\t\treturn false\n\t}\n\n\tfor _, c := range s {\n\t\tif !validateKeyChar(c) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc validateKeyChar(c int32) bool {\n\treturn c >= 0 && c < int32(utf8.RuneSelf) && safeKeyCharset[c]\n}\n\n// validateValue checks if the string is a valid W3C Baggage value.\nfunc validateValue(s string) bool {\n\tfor _, c := range s {\n\t\tif !validateValueChar(c) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nvar safeValueCharset = [utf8.RuneSelf]bool{\n\t'!': true, // 0x21\n\n\t// 0x23 to 0x2b\n\t'#':  true,\n\t'$':  true,\n\t'%':  true,\n\t'&':  true,\n\t'\\'': true,\n\t'(':  true,\n\t')':  true,\n\t'*':  true,\n\t'+':  true,\n\n\t// 0x2d to 0x3a\n\t'-': true,\n\t'.': true,\n\t'/': true,\n\t'0': true,\n\t'1': true,\n\t'2': true,\n\t'3': true,\n\t'4': true,\n\t'5': true,\n\t'6': true,\n\t'7': true,\n\t'8': true,\n\t'9': true,\n\t':': true,\n\n\t// 0x3c to 0x5b\n\t'<': true, // 0x3C\n\t'=': true, // 0x3D\n\t'>': true, // 0x3E\n\t'?': true, // 0x3F\n\t'@': true, // 0x40\n\t'A': true, // 0x41\n\t'B': true, // 0x42\n\t'C': true, // 0x43\n\t'D': true, // 0x44\n\t'E': true, // 0x45\n\t'F': true, // 0x46\n\t'G': true, // 0x47\n\t'H': true, // 0x48\n\t'I': true, // 0x49\n\t'J': true, // 0x4A\n\t'K': true, // 0x4B\n\t'L': true, // 0x4C\n\t'M': true, // 0x4D\n\t'N': true, // 0x4E\n\t'O': true, // 0x4F\n\t'P': true, // 0x50\n\t'Q': true, // 0x51\n\t'R': true, // 0x52\n\t'S': true, // 0x53\n\t'T': true, // 0x54\n\t'U': true, // 0x55\n\t'V': true, // 0x56\n\t'W': true, // 0x57\n\t'X': true, // 0x58\n\t'Y': true, // 0x59\n\t'Z': true, // 0x5A\n\t'[': true, // 0x5B\n\n\t// 0x5d to 0x7e\n\t']': true, // 0x5D\n\t'^': true, // 0x5E\n\t'_': true, // 0x5F\n\t'`': true, // 0x60\n\t'a': true, // 0x61\n\t'b': true, // 0x62\n\t'c': true, // 0x63\n\t'd': true, // 0x64\n\t'e': true, // 0x65\n\t'f': true, // 0x66\n\t'g': true, // 0x67\n\t'h': true, // 0x68\n\t'i': true, // 0x69\n\t'j': true, // 0x6A\n\t'k': true, // 0x6B\n\t'l': true, // 0x6C\n\t'm': true, // 0x6D\n\t'n': true, // 0x6E\n\t'o': true, // 0x6F\n\t'p': true, // 0x70\n\t'q': true, // 0x71\n\t'r': true, // 0x72\n\t's': true, // 0x73\n\t't': true, // 0x74\n\t'u': true, // 0x75\n\t'v': true, // 0x76\n\t'w': true, // 0x77\n\t'x': true, // 0x78\n\t'y': true, // 0x79\n\t'z': true, // 0x7A\n\t'{': true, // 0x7B\n\t'|': true, // 0x7C\n\t'}': true, // 0x7D\n\t'~': true, // 0x7E\n}\n\nfunc validateValueChar(c int32) bool {\n\treturn c >= 0 && c < int32(utf8.RuneSelf) && safeValueCharset[c]\n}\n\n// valueEscape escapes the string so it can be safely placed inside a baggage value,\n// replacing special characters with %XX sequences as needed.\n//\n// The implementation is based on:\n// https://github.com/golang/go/blob/f6509cf5cdbb5787061b784973782933c47f1782/src/net/url/url.go#L285.\nfunc valueEscape(s string) string {\n\thexCount := 0\n\tfor i := 0; i < len(s); i++ {\n\t\tc := s[i]\n\t\tif shouldEscape(c) {\n\t\t\thexCount++\n\t\t}\n\t}\n\n\tif hexCount == 0 {\n\t\treturn s\n\t}\n\n\tvar buf [64]byte\n\tvar t []byte\n\n\trequired := len(s) + 2*hexCount\n\tif required <= len(buf) {\n\t\tt = buf[:required]\n\t} else {\n\t\tt = make([]byte, required)\n\t}\n\n\tj := 0\n\tfor i := 0; i < len(s); i++ {\n\t\tc := s[i]\n\t\tif shouldEscape(s[i]) {\n\t\t\tconst upperhex = \"0123456789ABCDEF\"\n\t\t\tt[j] = '%'\n\t\t\tt[j+1] = upperhex[c>>4]\n\t\t\tt[j+2] = upperhex[c&15]\n\t\t\tj += 3\n\t\t} else {\n\t\t\tt[j] = c\n\t\t\tj++\n\t\t}\n\t}\n\n\treturn string(t)\n}\n\n// shouldEscape returns true if the specified byte should be escaped when\n// appearing in a baggage value string.\nfunc shouldEscape(c byte) bool {\n\tif c == '%' {\n\t\t// The percent character must be encoded so that percent-encoding can work.\n\t\treturn true\n\t}\n\treturn !validateValueChar(int32(c))\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/baggage/context.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage baggage // import \"go.opentelemetry.io/otel/baggage\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/internal/baggage\"\n)\n\n// ContextWithBaggage returns a copy of parent with baggage.\nfunc ContextWithBaggage(parent context.Context, b Baggage) context.Context {\n\t// Delegate so any hooks for the OpenTracing bridge are handled.\n\treturn baggage.ContextWithList(parent, b.list)\n}\n\n// ContextWithoutBaggage returns a copy of parent with no baggage.\nfunc ContextWithoutBaggage(parent context.Context) context.Context {\n\t// Delegate so any hooks for the OpenTracing bridge are handled.\n\treturn baggage.ContextWithList(parent, nil)\n}\n\n// FromContext returns the baggage contained in ctx.\nfunc FromContext(ctx context.Context) Baggage {\n\t// Delegate so any hooks for the OpenTracing bridge are handled.\n\treturn Baggage{list: baggage.ListFromContext(ctx)}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/baggage/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage baggage provides functionality for storing and retrieving\nbaggage items in Go context. For propagating the baggage, see the\ngo.opentelemetry.io/otel/propagation package.\n*/\npackage baggage // import \"go.opentelemetry.io/otel/baggage\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/codes/README.md",
    "content": "# Codes\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/codes)](https://pkg.go.dev/go.opentelemetry.io/otel/codes)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/codes/codes.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage codes // import \"go.opentelemetry.io/otel/codes\"\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\nconst (\n\t// Unset is the default status code.\n\tUnset Code = 0\n\n\t// Error indicates the operation contains an error.\n\t//\n\t// NOTE: The error code in OTLP is 2.\n\t// The value of this enum is only relevant to the internals\n\t// of the Go SDK.\n\tError Code = 1\n\n\t// Ok indicates operation has been validated by an Application developers\n\t// or Operator to have completed successfully, or contain no error.\n\t//\n\t// NOTE: The Ok code in OTLP is 1.\n\t// The value of this enum is only relevant to the internals\n\t// of the Go SDK.\n\tOk Code = 2\n\n\tmaxCode = 3\n)\n\n// Code is an 32-bit representation of a status state.\ntype Code uint32\n\nvar codeToStr = map[Code]string{\n\tUnset: \"Unset\",\n\tError: \"Error\",\n\tOk:    \"Ok\",\n}\n\nvar strToCode = map[string]Code{\n\t`\"Unset\"`: Unset,\n\t`\"Error\"`: Error,\n\t`\"Ok\"`:    Ok,\n}\n\n// String returns the Code as a string.\nfunc (c Code) String() string {\n\treturn codeToStr[c]\n}\n\n// UnmarshalJSON unmarshals b into the Code.\n//\n// This is based on the functionality in the gRPC codes package:\n// https://github.com/grpc/grpc-go/blob/bb64fee312b46ebee26be43364a7a966033521b1/codes/codes.go#L218-L244\nfunc (c *Code) UnmarshalJSON(b []byte) error {\n\t// From json.Unmarshaler: By convention, to approximate the behavior of\n\t// Unmarshal itself, Unmarshalers implement UnmarshalJSON([]byte(\"null\")) as\n\t// a no-op.\n\tif string(b) == \"null\" {\n\t\treturn nil\n\t}\n\tif c == nil {\n\t\treturn errors.New(\"nil receiver passed to UnmarshalJSON\")\n\t}\n\n\tvar x interface{}\n\tif err := json.Unmarshal(b, &x); err != nil {\n\t\treturn err\n\t}\n\tswitch x.(type) {\n\tcase string:\n\t\tif jc, ok := strToCode[string(b)]; ok {\n\t\t\t*c = jc\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"invalid code: %q\", string(b))\n\tcase float64:\n\t\tif ci, err := strconv.ParseUint(string(b), 10, 32); err == nil {\n\t\t\tif ci >= maxCode {\n\t\t\t\treturn fmt.Errorf(\"invalid code: %q\", ci)\n\t\t\t}\n\n\t\t\t*c = Code(ci) // nolint: gosec  // Bit size of 32 check above.\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"invalid code: %q\", string(b))\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid code: %q\", string(b))\n\t}\n}\n\n// MarshalJSON returns c as the JSON encoding of c.\nfunc (c *Code) MarshalJSON() ([]byte, error) {\n\tif c == nil {\n\t\treturn []byte(\"null\"), nil\n\t}\n\tstr, ok := codeToStr[*c]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"invalid code: %d\", *c)\n\t}\n\treturn []byte(fmt.Sprintf(\"%q\", str)), nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/codes/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage codes defines the canonical error codes used by OpenTelemetry.\n\nIt conforms to [the OpenTelemetry\nspecification](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/trace/api.md#set-status).\n*/\npackage codes // import \"go.opentelemetry.io/otel/codes\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/dependencies.Dockerfile",
    "content": "# This is a renovate-friendly source of Docker images.\nFROM python:3.13.2-slim-bullseye@sha256:31b581c8218e1f3c58672481b3b7dba8e898852866b408c6a984c22832523935 AS python\nFROM otel/weaver:v0.13.2@sha256:ae7346b992e477f629ea327e0979e8a416a97f7956ab1f7e95ac1f44edf1a893 AS weaver\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage otel provides global access to the OpenTelemetry API. The subpackages of\nthe otel package provide an implementation of the OpenTelemetry API.\n\nThe provided API is used to instrument code and measure data about that code's\nperformance and operation. The measured data, by default, is not processed or\ntransmitted anywhere. An implementation of the OpenTelemetry SDK, like the\ndefault SDK implementation (go.opentelemetry.io/otel/sdk), and associated\nexporters are used to process and transport this data.\n\nTo read the getting started guide, see https://opentelemetry.io/docs/languages/go/getting-started/.\n\nTo read more about tracing, see go.opentelemetry.io/otel/trace.\n\nTo read more about metrics, see go.opentelemetry.io/otel/metric.\n\nTo read more about logs, see go.opentelemetry.io/otel/log.\n\nTo read more about propagation, see go.opentelemetry.io/otel/propagation and\ngo.opentelemetry.io/otel/baggage.\n*/\npackage otel // import \"go.opentelemetry.io/otel\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/error_handler.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage otel // import \"go.opentelemetry.io/otel\"\n\n// ErrorHandler handles irremediable events.\ntype ErrorHandler interface {\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n\n\t// Handle handles any error deemed irremediable by an OpenTelemetry\n\t// component.\n\tHandle(error)\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n}\n\n// ErrorHandlerFunc is a convenience adapter to allow the use of a function\n// as an ErrorHandler.\ntype ErrorHandlerFunc func(error)\n\nvar _ ErrorHandler = ErrorHandlerFunc(nil)\n\n// Handle handles the irremediable error by calling the ErrorHandlerFunc itself.\nfunc (f ErrorHandlerFunc) Handle(err error) {\n\tf(err)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/get_main_pkgs.sh",
    "content": "#!/usr/bin/env bash\n\n# Copyright The OpenTelemetry Authors\n# SPDX-License-Identifier: Apache-2.0\n\nset -euo pipefail\n\ntop_dir='.'\nif [[ $# -gt 0 ]]; then\n    top_dir=\"${1}\"\nfi\n\np=$(pwd)\nmod_dirs=()\n\n# Note `mapfile` does not exist in older bash versions:\n# https://stackoverflow.com/questions/41475261/need-alternative-to-readarray-mapfile-for-script-on-older-version-of-bash\n\nwhile IFS= read -r line; do\n    mod_dirs+=(\"$line\")\ndone < <(find \"${top_dir}\" -type f -name 'go.mod' -exec dirname {} \\; | sort)\n\nfor mod_dir in \"${mod_dirs[@]}\"; do\n    cd \"${mod_dir}\"\n\n    while IFS= read -r line; do\n        echo \".${line#${p}}\"\n    done < <(go list --find -f '{{.Name}}|{{.Dir}}' ./... | grep '^main|' | cut -f 2- -d '|')\n    cd \"${p}\"\ndone\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/handler.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage otel // import \"go.opentelemetry.io/otel\"\n\nimport (\n\t\"go.opentelemetry.io/otel/internal/global\"\n)\n\n// Compile-time check global.ErrDelegator implements ErrorHandler.\nvar _ ErrorHandler = (*global.ErrDelegator)(nil)\n\n// GetErrorHandler returns the global ErrorHandler instance.\n//\n// The default ErrorHandler instance returned will log all errors to STDERR\n// until an override ErrorHandler is set with SetErrorHandler. All\n// ErrorHandler returned prior to this will automatically forward errors to\n// the set instance instead of logging.\n//\n// Subsequent calls to SetErrorHandler after the first will not forward errors\n// to the new ErrorHandler for prior returned instances.\nfunc GetErrorHandler() ErrorHandler { return global.GetErrorHandler() }\n\n// SetErrorHandler sets the global ErrorHandler to h.\n//\n// The first time this is called all ErrorHandler previously returned from\n// GetErrorHandler will send errors to h instead of the default logging\n// ErrorHandler. Subsequent calls will set the global ErrorHandler, but not\n// delegate errors to h.\nfunc SetErrorHandler(h ErrorHandler) { global.SetErrorHandler(h) }\n\n// Handle is a convenience function for GetErrorHandler().Handle(err).\nfunc Handle(err error) { global.GetErrorHandler().Handle(err) }\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage attribute provide several helper functions for some commonly used\nlogic of processing attributes.\n*/\npackage attribute // import \"go.opentelemetry.io/otel/internal/attribute\"\n\nimport (\n\t\"reflect\"\n)\n\n// BoolSliceValue converts a bool slice into an array with same elements as slice.\nfunc BoolSliceValue(v []bool) interface{} {\n\tvar zero bool\n\tcp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()\n\treflect.Copy(cp, reflect.ValueOf(v))\n\treturn cp.Interface()\n}\n\n// Int64SliceValue converts an int64 slice into an array with same elements as slice.\nfunc Int64SliceValue(v []int64) interface{} {\n\tvar zero int64\n\tcp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()\n\treflect.Copy(cp, reflect.ValueOf(v))\n\treturn cp.Interface()\n}\n\n// Float64SliceValue converts a float64 slice into an array with same elements as slice.\nfunc Float64SliceValue(v []float64) interface{} {\n\tvar zero float64\n\tcp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()\n\treflect.Copy(cp, reflect.ValueOf(v))\n\treturn cp.Interface()\n}\n\n// StringSliceValue converts a string slice into an array with same elements as slice.\nfunc StringSliceValue(v []string) interface{} {\n\tvar zero string\n\tcp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()\n\treflect.Copy(cp, reflect.ValueOf(v))\n\treturn cp.Interface()\n}\n\n// AsBoolSlice converts a bool array into a slice into with same elements as array.\nfunc AsBoolSlice(v interface{}) []bool {\n\trv := reflect.ValueOf(v)\n\tif rv.Type().Kind() != reflect.Array {\n\t\treturn nil\n\t}\n\tcpy := make([]bool, rv.Len())\n\tif len(cpy) > 0 {\n\t\t_ = reflect.Copy(reflect.ValueOf(cpy), rv)\n\t}\n\treturn cpy\n}\n\n// AsInt64Slice converts an int64 array into a slice into with same elements as array.\nfunc AsInt64Slice(v interface{}) []int64 {\n\trv := reflect.ValueOf(v)\n\tif rv.Type().Kind() != reflect.Array {\n\t\treturn nil\n\t}\n\tcpy := make([]int64, rv.Len())\n\tif len(cpy) > 0 {\n\t\t_ = reflect.Copy(reflect.ValueOf(cpy), rv)\n\t}\n\treturn cpy\n}\n\n// AsFloat64Slice converts a float64 array into a slice into with same elements as array.\nfunc AsFloat64Slice(v interface{}) []float64 {\n\trv := reflect.ValueOf(v)\n\tif rv.Type().Kind() != reflect.Array {\n\t\treturn nil\n\t}\n\tcpy := make([]float64, rv.Len())\n\tif len(cpy) > 0 {\n\t\t_ = reflect.Copy(reflect.ValueOf(cpy), rv)\n\t}\n\treturn cpy\n}\n\n// AsStringSlice converts a string array into a slice into with same elements as array.\nfunc AsStringSlice(v interface{}) []string {\n\trv := reflect.ValueOf(v)\n\tif rv.Type().Kind() != reflect.Array {\n\t\treturn nil\n\t}\n\tcpy := make([]string, rv.Len())\n\tif len(cpy) > 0 {\n\t\t_ = reflect.Copy(reflect.ValueOf(cpy), rv)\n\t}\n\treturn cpy\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/baggage/baggage.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage baggage provides base types and functionality to store and retrieve\nbaggage in Go context. This package exists because the OpenTracing bridge to\nOpenTelemetry needs to synchronize state whenever baggage for a context is\nmodified and that context contains an OpenTracing span. If it were not for\nthis need this package would not need to exist and the\n`go.opentelemetry.io/otel/baggage` package would be the singular place where\nW3C baggage is handled.\n*/\npackage baggage // import \"go.opentelemetry.io/otel/internal/baggage\"\n\n// List is the collection of baggage members. The W3C allows for duplicates,\n// but OpenTelemetry does not, therefore, this is represented as a map.\ntype List map[string]Item\n\n// Item is the value and metadata properties part of a list-member.\ntype Item struct {\n\tValue      string\n\tProperties []Property\n}\n\n// Property is a metadata entry for a list-member.\ntype Property struct {\n\tKey, Value string\n\n\t// HasValue indicates if a zero-value value means the property does not\n\t// have a value or if it was the zero-value.\n\tHasValue bool\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/baggage/context.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage baggage // import \"go.opentelemetry.io/otel/internal/baggage\"\n\nimport \"context\"\n\ntype baggageContextKeyType int\n\nconst baggageKey baggageContextKeyType = iota\n\n// SetHookFunc is a callback called when storing baggage in the context.\ntype SetHookFunc func(context.Context, List) context.Context\n\n// GetHookFunc is a callback called when getting baggage from the context.\ntype GetHookFunc func(context.Context, List) List\n\ntype baggageState struct {\n\tlist List\n\n\tsetHook SetHookFunc\n\tgetHook GetHookFunc\n}\n\n// ContextWithSetHook returns a copy of parent with hook configured to be\n// invoked every time ContextWithBaggage is called.\n//\n// Passing nil SetHookFunc creates a context with no set hook to call.\nfunc ContextWithSetHook(parent context.Context, hook SetHookFunc) context.Context {\n\tvar s baggageState\n\tif v, ok := parent.Value(baggageKey).(baggageState); ok {\n\t\ts = v\n\t}\n\n\ts.setHook = hook\n\treturn context.WithValue(parent, baggageKey, s)\n}\n\n// ContextWithGetHook returns a copy of parent with hook configured to be\n// invoked every time FromContext is called.\n//\n// Passing nil GetHookFunc creates a context with no get hook to call.\nfunc ContextWithGetHook(parent context.Context, hook GetHookFunc) context.Context {\n\tvar s baggageState\n\tif v, ok := parent.Value(baggageKey).(baggageState); ok {\n\t\ts = v\n\t}\n\n\ts.getHook = hook\n\treturn context.WithValue(parent, baggageKey, s)\n}\n\n// ContextWithList returns a copy of parent with baggage. Passing nil list\n// returns a context without any baggage.\nfunc ContextWithList(parent context.Context, list List) context.Context {\n\tvar s baggageState\n\tif v, ok := parent.Value(baggageKey).(baggageState); ok {\n\t\ts = v\n\t}\n\n\ts.list = list\n\tctx := context.WithValue(parent, baggageKey, s)\n\tif s.setHook != nil {\n\t\tctx = s.setHook(ctx, list)\n\t}\n\n\treturn ctx\n}\n\n// ListFromContext returns the baggage contained in ctx.\nfunc ListFromContext(ctx context.Context) List {\n\tswitch v := ctx.Value(baggageKey).(type) {\n\tcase baggageState:\n\t\tif v.getHook != nil {\n\t\t\treturn v.getHook(ctx, v.list)\n\t\t}\n\t\treturn v.list\n\tdefault:\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/gen.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage internal // import \"go.opentelemetry.io/otel/internal\"\n\n//go:generate gotmpl --body=./shared/matchers/expectation.go.tmpl \"--data={}\" --out=matchers/expectation.go\n//go:generate gotmpl --body=./shared/matchers/expecter.go.tmpl \"--data={}\" --out=matchers/expecter.go\n//go:generate gotmpl --body=./shared/matchers/temporal_matcher.go.tmpl \"--data={}\" --out=matchers/temporal_matcher.go\n\n//go:generate gotmpl --body=./shared/internaltest/alignment.go.tmpl \"--data={}\" --out=internaltest/alignment.go\n//go:generate gotmpl --body=./shared/internaltest/env.go.tmpl \"--data={}\" --out=internaltest/env.go\n//go:generate gotmpl --body=./shared/internaltest/env_test.go.tmpl \"--data={}\" --out=internaltest/env_test.go\n//go:generate gotmpl --body=./shared/internaltest/errors.go.tmpl \"--data={}\" --out=internaltest/errors.go\n//go:generate gotmpl --body=./shared/internaltest/harness.go.tmpl \"--data={\\\"matchersImportPath\\\": \\\"go.opentelemetry.io/otel/internal/matchers\\\"}\" --out=internaltest/harness.go\n//go:generate gotmpl --body=./shared/internaltest/text_map_carrier.go.tmpl \"--data={}\" --out=internaltest/text_map_carrier.go\n//go:generate gotmpl --body=./shared/internaltest/text_map_carrier_test.go.tmpl \"--data={}\" --out=internaltest/text_map_carrier_test.go\n//go:generate gotmpl --body=./shared/internaltest/text_map_propagator.go.tmpl \"--data={}\" --out=internaltest/text_map_propagator.go\n//go:generate gotmpl --body=./shared/internaltest/text_map_propagator_test.go.tmpl \"--data={}\" --out=internaltest/text_map_propagator_test.go\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/global/handler.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage global // import \"go.opentelemetry.io/otel/internal/global\"\n\nimport (\n\t\"log\"\n\t\"sync/atomic\"\n)\n\n// ErrorHandler handles irremediable events.\ntype ErrorHandler interface {\n\t// Handle handles any error deemed irremediable by an OpenTelemetry\n\t// component.\n\tHandle(error)\n}\n\ntype ErrDelegator struct {\n\tdelegate atomic.Pointer[ErrorHandler]\n}\n\n// Compile-time check that delegator implements ErrorHandler.\nvar _ ErrorHandler = (*ErrDelegator)(nil)\n\nfunc (d *ErrDelegator) Handle(err error) {\n\tif eh := d.delegate.Load(); eh != nil {\n\t\t(*eh).Handle(err)\n\t\treturn\n\t}\n\tlog.Print(err)\n}\n\n// setDelegate sets the ErrorHandler delegate.\nfunc (d *ErrDelegator) setDelegate(eh ErrorHandler) {\n\td.delegate.Store(&eh)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/global/instruments.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage global // import \"go.opentelemetry.io/otel/internal/global\"\n\nimport (\n\t\"context\"\n\t\"sync/atomic\"\n\n\t\"go.opentelemetry.io/otel/metric\"\n\t\"go.opentelemetry.io/otel/metric/embedded\"\n)\n\n// unwrapper unwraps to return the underlying instrument implementation.\ntype unwrapper interface {\n\tunwrap() metric.Observable\n}\n\ntype afCounter struct {\n\tembedded.Float64ObservableCounter\n\tmetric.Float64Observable\n\n\tname string\n\topts []metric.Float64ObservableCounterOption\n\n\tdelegate atomic.Value // metric.Float64ObservableCounter\n}\n\nvar (\n\t_ unwrapper                       = (*afCounter)(nil)\n\t_ metric.Float64ObservableCounter = (*afCounter)(nil)\n)\n\nfunc (i *afCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Float64ObservableCounter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *afCounter) unwrap() metric.Observable {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\treturn ctr.(metric.Float64ObservableCounter)\n\t}\n\treturn nil\n}\n\ntype afUpDownCounter struct {\n\tembedded.Float64ObservableUpDownCounter\n\tmetric.Float64Observable\n\n\tname string\n\topts []metric.Float64ObservableUpDownCounterOption\n\n\tdelegate atomic.Value // metric.Float64ObservableUpDownCounter\n}\n\nvar (\n\t_ unwrapper                             = (*afUpDownCounter)(nil)\n\t_ metric.Float64ObservableUpDownCounter = (*afUpDownCounter)(nil)\n)\n\nfunc (i *afUpDownCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Float64ObservableUpDownCounter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *afUpDownCounter) unwrap() metric.Observable {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\treturn ctr.(metric.Float64ObservableUpDownCounter)\n\t}\n\treturn nil\n}\n\ntype afGauge struct {\n\tembedded.Float64ObservableGauge\n\tmetric.Float64Observable\n\n\tname string\n\topts []metric.Float64ObservableGaugeOption\n\n\tdelegate atomic.Value // metric.Float64ObservableGauge\n}\n\nvar (\n\t_ unwrapper                     = (*afGauge)(nil)\n\t_ metric.Float64ObservableGauge = (*afGauge)(nil)\n)\n\nfunc (i *afGauge) setDelegate(m metric.Meter) {\n\tctr, err := m.Float64ObservableGauge(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *afGauge) unwrap() metric.Observable {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\treturn ctr.(metric.Float64ObservableGauge)\n\t}\n\treturn nil\n}\n\ntype aiCounter struct {\n\tembedded.Int64ObservableCounter\n\tmetric.Int64Observable\n\n\tname string\n\topts []metric.Int64ObservableCounterOption\n\n\tdelegate atomic.Value // metric.Int64ObservableCounter\n}\n\nvar (\n\t_ unwrapper                     = (*aiCounter)(nil)\n\t_ metric.Int64ObservableCounter = (*aiCounter)(nil)\n)\n\nfunc (i *aiCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Int64ObservableCounter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *aiCounter) unwrap() metric.Observable {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\treturn ctr.(metric.Int64ObservableCounter)\n\t}\n\treturn nil\n}\n\ntype aiUpDownCounter struct {\n\tembedded.Int64ObservableUpDownCounter\n\tmetric.Int64Observable\n\n\tname string\n\topts []metric.Int64ObservableUpDownCounterOption\n\n\tdelegate atomic.Value // metric.Int64ObservableUpDownCounter\n}\n\nvar (\n\t_ unwrapper                           = (*aiUpDownCounter)(nil)\n\t_ metric.Int64ObservableUpDownCounter = (*aiUpDownCounter)(nil)\n)\n\nfunc (i *aiUpDownCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Int64ObservableUpDownCounter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *aiUpDownCounter) unwrap() metric.Observable {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\treturn ctr.(metric.Int64ObservableUpDownCounter)\n\t}\n\treturn nil\n}\n\ntype aiGauge struct {\n\tembedded.Int64ObservableGauge\n\tmetric.Int64Observable\n\n\tname string\n\topts []metric.Int64ObservableGaugeOption\n\n\tdelegate atomic.Value // metric.Int64ObservableGauge\n}\n\nvar (\n\t_ unwrapper                   = (*aiGauge)(nil)\n\t_ metric.Int64ObservableGauge = (*aiGauge)(nil)\n)\n\nfunc (i *aiGauge) setDelegate(m metric.Meter) {\n\tctr, err := m.Int64ObservableGauge(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *aiGauge) unwrap() metric.Observable {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\treturn ctr.(metric.Int64ObservableGauge)\n\t}\n\treturn nil\n}\n\n// Sync Instruments.\ntype sfCounter struct {\n\tembedded.Float64Counter\n\n\tname string\n\topts []metric.Float64CounterOption\n\n\tdelegate atomic.Value // metric.Float64Counter\n}\n\nvar _ metric.Float64Counter = (*sfCounter)(nil)\n\nfunc (i *sfCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Float64Counter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *sfCounter) Add(ctx context.Context, incr float64, opts ...metric.AddOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Float64Counter).Add(ctx, incr, opts...)\n\t}\n}\n\ntype sfUpDownCounter struct {\n\tembedded.Float64UpDownCounter\n\n\tname string\n\topts []metric.Float64UpDownCounterOption\n\n\tdelegate atomic.Value // metric.Float64UpDownCounter\n}\n\nvar _ metric.Float64UpDownCounter = (*sfUpDownCounter)(nil)\n\nfunc (i *sfUpDownCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Float64UpDownCounter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *sfUpDownCounter) Add(ctx context.Context, incr float64, opts ...metric.AddOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Float64UpDownCounter).Add(ctx, incr, opts...)\n\t}\n}\n\ntype sfHistogram struct {\n\tembedded.Float64Histogram\n\n\tname string\n\topts []metric.Float64HistogramOption\n\n\tdelegate atomic.Value // metric.Float64Histogram\n}\n\nvar _ metric.Float64Histogram = (*sfHistogram)(nil)\n\nfunc (i *sfHistogram) setDelegate(m metric.Meter) {\n\tctr, err := m.Float64Histogram(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *sfHistogram) Record(ctx context.Context, x float64, opts ...metric.RecordOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Float64Histogram).Record(ctx, x, opts...)\n\t}\n}\n\ntype sfGauge struct {\n\tembedded.Float64Gauge\n\n\tname string\n\topts []metric.Float64GaugeOption\n\n\tdelegate atomic.Value // metric.Float64Gauge\n}\n\nvar _ metric.Float64Gauge = (*sfGauge)(nil)\n\nfunc (i *sfGauge) setDelegate(m metric.Meter) {\n\tctr, err := m.Float64Gauge(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *sfGauge) Record(ctx context.Context, x float64, opts ...metric.RecordOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Float64Gauge).Record(ctx, x, opts...)\n\t}\n}\n\ntype siCounter struct {\n\tembedded.Int64Counter\n\n\tname string\n\topts []metric.Int64CounterOption\n\n\tdelegate atomic.Value // metric.Int64Counter\n}\n\nvar _ metric.Int64Counter = (*siCounter)(nil)\n\nfunc (i *siCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Int64Counter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *siCounter) Add(ctx context.Context, x int64, opts ...metric.AddOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Int64Counter).Add(ctx, x, opts...)\n\t}\n}\n\ntype siUpDownCounter struct {\n\tembedded.Int64UpDownCounter\n\n\tname string\n\topts []metric.Int64UpDownCounterOption\n\n\tdelegate atomic.Value // metric.Int64UpDownCounter\n}\n\nvar _ metric.Int64UpDownCounter = (*siUpDownCounter)(nil)\n\nfunc (i *siUpDownCounter) setDelegate(m metric.Meter) {\n\tctr, err := m.Int64UpDownCounter(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *siUpDownCounter) Add(ctx context.Context, x int64, opts ...metric.AddOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Int64UpDownCounter).Add(ctx, x, opts...)\n\t}\n}\n\ntype siHistogram struct {\n\tembedded.Int64Histogram\n\n\tname string\n\topts []metric.Int64HistogramOption\n\n\tdelegate atomic.Value // metric.Int64Histogram\n}\n\nvar _ metric.Int64Histogram = (*siHistogram)(nil)\n\nfunc (i *siHistogram) setDelegate(m metric.Meter) {\n\tctr, err := m.Int64Histogram(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *siHistogram) Record(ctx context.Context, x int64, opts ...metric.RecordOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Int64Histogram).Record(ctx, x, opts...)\n\t}\n}\n\ntype siGauge struct {\n\tembedded.Int64Gauge\n\n\tname string\n\topts []metric.Int64GaugeOption\n\n\tdelegate atomic.Value // metric.Int64Gauge\n}\n\nvar _ metric.Int64Gauge = (*siGauge)(nil)\n\nfunc (i *siGauge) setDelegate(m metric.Meter) {\n\tctr, err := m.Int64Gauge(i.name, i.opts...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\ti.delegate.Store(ctr)\n}\n\nfunc (i *siGauge) Record(ctx context.Context, x int64, opts ...metric.RecordOption) {\n\tif ctr := i.delegate.Load(); ctr != nil {\n\t\tctr.(metric.Int64Gauge).Record(ctx, x, opts...)\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage global // import \"go.opentelemetry.io/otel/internal/global\"\n\nimport (\n\t\"log\"\n\t\"os\"\n\t\"sync/atomic\"\n\n\t\"github.com/go-logr/logr\"\n\t\"github.com/go-logr/stdr\"\n)\n\n// globalLogger holds a reference to the [logr.Logger] used within\n// go.opentelemetry.io/otel.\n//\n// The default logger uses stdr which is backed by the standard `log.Logger`\n// interface. This logger will only show messages at the Error Level.\nvar globalLogger = func() *atomic.Pointer[logr.Logger] {\n\tl := stdr.New(log.New(os.Stderr, \"\", log.LstdFlags|log.Lshortfile))\n\n\tp := new(atomic.Pointer[logr.Logger])\n\tp.Store(&l)\n\treturn p\n}()\n\n// SetLogger sets the global Logger to l.\n//\n// To see Warn messages use a logger with `l.V(1).Enabled() == true`\n// To see Info messages use a logger with `l.V(4).Enabled() == true`\n// To see Debug messages use a logger with `l.V(8).Enabled() == true`.\nfunc SetLogger(l logr.Logger) {\n\tglobalLogger.Store(&l)\n}\n\n// GetLogger returns the global logger.\nfunc GetLogger() logr.Logger {\n\treturn *globalLogger.Load()\n}\n\n// Info prints messages about the general state of the API or SDK.\n// This should usually be less than 5 messages a minute.\nfunc Info(msg string, keysAndValues ...interface{}) {\n\tGetLogger().V(4).Info(msg, keysAndValues...)\n}\n\n// Error prints messages about exceptional states of the API or SDK.\nfunc Error(err error, msg string, keysAndValues ...interface{}) {\n\tGetLogger().Error(err, msg, keysAndValues...)\n}\n\n// Debug prints messages about all internal changes in the API or SDK.\nfunc Debug(msg string, keysAndValues ...interface{}) {\n\tGetLogger().V(8).Info(msg, keysAndValues...)\n}\n\n// Warn prints messages about warnings in the API or SDK.\n// Not an error but is likely more important than an informational event.\nfunc Warn(msg string, keysAndValues ...interface{}) {\n\tGetLogger().V(1).Info(msg, keysAndValues...)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/global/meter.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage global // import \"go.opentelemetry.io/otel/internal/global\"\n\nimport (\n\t\"container/list\"\n\t\"context\"\n\t\"reflect\"\n\t\"sync\"\n\n\t\"go.opentelemetry.io/otel/metric\"\n\t\"go.opentelemetry.io/otel/metric/embedded\"\n)\n\n// meterProvider is a placeholder for a configured SDK MeterProvider.\n//\n// All MeterProvider functionality is forwarded to a delegate once\n// configured.\ntype meterProvider struct {\n\tembedded.MeterProvider\n\n\tmtx    sync.Mutex\n\tmeters map[il]*meter\n\n\tdelegate metric.MeterProvider\n}\n\n// setDelegate configures p to delegate all MeterProvider functionality to\n// provider.\n//\n// All Meters provided prior to this function call are switched out to be\n// Meters provided by provider. All instruments and callbacks are recreated and\n// delegated.\n//\n// It is guaranteed by the caller that this happens only once.\nfunc (p *meterProvider) setDelegate(provider metric.MeterProvider) {\n\tp.mtx.Lock()\n\tdefer p.mtx.Unlock()\n\n\tp.delegate = provider\n\n\tif len(p.meters) == 0 {\n\t\treturn\n\t}\n\n\tfor _, meter := range p.meters {\n\t\tmeter.setDelegate(provider)\n\t}\n\n\tp.meters = nil\n}\n\n// Meter implements MeterProvider.\nfunc (p *meterProvider) Meter(name string, opts ...metric.MeterOption) metric.Meter {\n\tp.mtx.Lock()\n\tdefer p.mtx.Unlock()\n\n\tif p.delegate != nil {\n\t\treturn p.delegate.Meter(name, opts...)\n\t}\n\n\t// At this moment it is guaranteed that no sdk is installed, save the meter in the meters map.\n\n\tc := metric.NewMeterConfig(opts...)\n\tkey := il{\n\t\tname:    name,\n\t\tversion: c.InstrumentationVersion(),\n\t\tschema:  c.SchemaURL(),\n\t\tattrs:   c.InstrumentationAttributes(),\n\t}\n\n\tif p.meters == nil {\n\t\tp.meters = make(map[il]*meter)\n\t}\n\n\tif val, ok := p.meters[key]; ok {\n\t\treturn val\n\t}\n\n\tt := &meter{name: name, opts: opts, instruments: make(map[instID]delegatedInstrument)}\n\tp.meters[key] = t\n\treturn t\n}\n\n// meter is a placeholder for a metric.Meter.\n//\n// All Meter functionality is forwarded to a delegate once configured.\n// Otherwise, all functionality is forwarded to a NoopMeter.\ntype meter struct {\n\tembedded.Meter\n\n\tname string\n\topts []metric.MeterOption\n\n\tmtx         sync.Mutex\n\tinstruments map[instID]delegatedInstrument\n\n\tregistry list.List\n\n\tdelegate metric.Meter\n}\n\ntype delegatedInstrument interface {\n\tsetDelegate(metric.Meter)\n}\n\n// instID are the identifying properties of a instrument.\ntype instID struct {\n\t// name is the name of the stream.\n\tname string\n\t// description is the description of the stream.\n\tdescription string\n\t// kind defines the functional group of the instrument.\n\tkind reflect.Type\n\t// unit is the unit of the stream.\n\tunit string\n}\n\n// setDelegate configures m to delegate all Meter functionality to Meters\n// created by provider.\n//\n// All subsequent calls to the Meter methods will be passed to the delegate.\n//\n// It is guaranteed by the caller that this happens only once.\nfunc (m *meter) setDelegate(provider metric.MeterProvider) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tmeter := provider.Meter(m.name, m.opts...)\n\tm.delegate = meter\n\n\tfor _, inst := range m.instruments {\n\t\tinst.setDelegate(meter)\n\t}\n\n\tvar n *list.Element\n\tfor e := m.registry.Front(); e != nil; e = n {\n\t\tr := e.Value.(*registration)\n\t\tr.setDelegate(meter)\n\t\tn = e.Next()\n\t\tm.registry.Remove(e)\n\t}\n\n\tm.instruments = nil\n\tm.registry.Init()\n}\n\nfunc (m *meter) Int64Counter(name string, options ...metric.Int64CounterOption) (metric.Int64Counter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Int64Counter(name, options...)\n\t}\n\n\tcfg := metric.NewInt64CounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*siCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Int64Counter), nil\n\t}\n\ti := &siCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Int64UpDownCounter(name string, options ...metric.Int64UpDownCounterOption) (metric.Int64UpDownCounter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Int64UpDownCounter(name, options...)\n\t}\n\n\tcfg := metric.NewInt64UpDownCounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*siUpDownCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Int64UpDownCounter), nil\n\t}\n\ti := &siUpDownCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Int64Histogram(name string, options ...metric.Int64HistogramOption) (metric.Int64Histogram, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Int64Histogram(name, options...)\n\t}\n\n\tcfg := metric.NewInt64HistogramConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*siHistogram)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Int64Histogram), nil\n\t}\n\ti := &siHistogram{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Int64Gauge(name string, options ...metric.Int64GaugeOption) (metric.Int64Gauge, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Int64Gauge(name, options...)\n\t}\n\n\tcfg := metric.NewInt64GaugeConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*siGauge)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Int64Gauge), nil\n\t}\n\ti := &siGauge{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Int64ObservableCounter(name string, options ...metric.Int64ObservableCounterOption) (metric.Int64ObservableCounter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Int64ObservableCounter(name, options...)\n\t}\n\n\tcfg := metric.NewInt64ObservableCounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*aiCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Int64ObservableCounter), nil\n\t}\n\ti := &aiCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Int64ObservableUpDownCounter(name string, options ...metric.Int64ObservableUpDownCounterOption) (metric.Int64ObservableUpDownCounter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Int64ObservableUpDownCounter(name, options...)\n\t}\n\n\tcfg := metric.NewInt64ObservableUpDownCounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*aiUpDownCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Int64ObservableUpDownCounter), nil\n\t}\n\ti := &aiUpDownCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Int64ObservableGauge(name string, options ...metric.Int64ObservableGaugeOption) (metric.Int64ObservableGauge, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Int64ObservableGauge(name, options...)\n\t}\n\n\tcfg := metric.NewInt64ObservableGaugeConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*aiGauge)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Int64ObservableGauge), nil\n\t}\n\ti := &aiGauge{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Float64Counter(name string, options ...metric.Float64CounterOption) (metric.Float64Counter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Float64Counter(name, options...)\n\t}\n\n\tcfg := metric.NewFloat64CounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*sfCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Float64Counter), nil\n\t}\n\ti := &sfCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Float64UpDownCounter(name string, options ...metric.Float64UpDownCounterOption) (metric.Float64UpDownCounter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Float64UpDownCounter(name, options...)\n\t}\n\n\tcfg := metric.NewFloat64UpDownCounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*sfUpDownCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Float64UpDownCounter), nil\n\t}\n\ti := &sfUpDownCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Float64Histogram(name string, options ...metric.Float64HistogramOption) (metric.Float64Histogram, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Float64Histogram(name, options...)\n\t}\n\n\tcfg := metric.NewFloat64HistogramConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*sfHistogram)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Float64Histogram), nil\n\t}\n\ti := &sfHistogram{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Float64Gauge(name string, options ...metric.Float64GaugeOption) (metric.Float64Gauge, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Float64Gauge(name, options...)\n\t}\n\n\tcfg := metric.NewFloat64GaugeConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*sfGauge)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Float64Gauge), nil\n\t}\n\ti := &sfGauge{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Float64ObservableCounter(name string, options ...metric.Float64ObservableCounterOption) (metric.Float64ObservableCounter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Float64ObservableCounter(name, options...)\n\t}\n\n\tcfg := metric.NewFloat64ObservableCounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*afCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Float64ObservableCounter), nil\n\t}\n\ti := &afCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Float64ObservableUpDownCounter(name string, options ...metric.Float64ObservableUpDownCounterOption) (metric.Float64ObservableUpDownCounter, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Float64ObservableUpDownCounter(name, options...)\n\t}\n\n\tcfg := metric.NewFloat64ObservableUpDownCounterConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*afUpDownCounter)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Float64ObservableUpDownCounter), nil\n\t}\n\ti := &afUpDownCounter{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\nfunc (m *meter) Float64ObservableGauge(name string, options ...metric.Float64ObservableGaugeOption) (metric.Float64ObservableGauge, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.Float64ObservableGauge(name, options...)\n\t}\n\n\tcfg := metric.NewFloat64ObservableGaugeConfig(options...)\n\tid := instID{\n\t\tname:        name,\n\t\tkind:        reflect.TypeOf((*afGauge)(nil)),\n\t\tdescription: cfg.Description(),\n\t\tunit:        cfg.Unit(),\n\t}\n\tif f, ok := m.instruments[id]; ok {\n\t\treturn f.(metric.Float64ObservableGauge), nil\n\t}\n\ti := &afGauge{name: name, opts: options}\n\tm.instruments[id] = i\n\treturn i, nil\n}\n\n// RegisterCallback captures the function that will be called during Collect.\nfunc (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) (metric.Registration, error) {\n\tm.mtx.Lock()\n\tdefer m.mtx.Unlock()\n\n\tif m.delegate != nil {\n\t\treturn m.delegate.RegisterCallback(unwrapCallback(f), unwrapInstruments(insts)...)\n\t}\n\n\treg := &registration{instruments: insts, function: f}\n\te := m.registry.PushBack(reg)\n\treg.unreg = func() error {\n\t\tm.mtx.Lock()\n\t\t_ = m.registry.Remove(e)\n\t\tm.mtx.Unlock()\n\t\treturn nil\n\t}\n\treturn reg, nil\n}\n\nfunc unwrapInstruments(instruments []metric.Observable) []metric.Observable {\n\tout := make([]metric.Observable, 0, len(instruments))\n\n\tfor _, inst := range instruments {\n\t\tif in, ok := inst.(unwrapper); ok {\n\t\t\tout = append(out, in.unwrap())\n\t\t} else {\n\t\t\tout = append(out, inst)\n\t\t}\n\t}\n\n\treturn out\n}\n\ntype registration struct {\n\tembedded.Registration\n\n\tinstruments []metric.Observable\n\tfunction    metric.Callback\n\n\tunreg   func() error\n\tunregMu sync.Mutex\n}\n\ntype unwrapObs struct {\n\tembedded.Observer\n\tobs metric.Observer\n}\n\n// unwrapFloat64Observable returns an expected metric.Float64Observable after\n// unwrapping the global object.\nfunc unwrapFloat64Observable(inst metric.Float64Observable) metric.Float64Observable {\n\tif unwrapped, ok := inst.(unwrapper); ok {\n\t\tif floatObs, ok := unwrapped.unwrap().(metric.Float64Observable); ok {\n\t\t\t// Note: if the unwrapped object does not\n\t\t\t// unwrap as an observable for either of the\n\t\t\t// predicates here, it means an internal bug in\n\t\t\t// this package.  We avoid logging an error in\n\t\t\t// this case, because the SDK has to try its\n\t\t\t// own type conversion on the object.  The SDK\n\t\t\t// will see this and be forced to respond with\n\t\t\t// its own error.\n\t\t\t//\n\t\t\t// This code uses a double-nested if statement\n\t\t\t// to avoid creating a branch that is\n\t\t\t// impossible to cover.\n\t\t\tinst = floatObs\n\t\t}\n\t}\n\treturn inst\n}\n\n// unwrapInt64Observable returns an expected metric.Int64Observable after\n// unwrapping the global object.\nfunc unwrapInt64Observable(inst metric.Int64Observable) metric.Int64Observable {\n\tif unwrapped, ok := inst.(unwrapper); ok {\n\t\tif unint, ok := unwrapped.unwrap().(metric.Int64Observable); ok {\n\t\t\t// See the comment in unwrapFloat64Observable().\n\t\t\tinst = unint\n\t\t}\n\t}\n\treturn inst\n}\n\nfunc (uo *unwrapObs) ObserveFloat64(inst metric.Float64Observable, value float64, opts ...metric.ObserveOption) {\n\tuo.obs.ObserveFloat64(unwrapFloat64Observable(inst), value, opts...)\n}\n\nfunc (uo *unwrapObs) ObserveInt64(inst metric.Int64Observable, value int64, opts ...metric.ObserveOption) {\n\tuo.obs.ObserveInt64(unwrapInt64Observable(inst), value, opts...)\n}\n\nfunc unwrapCallback(f metric.Callback) metric.Callback {\n\treturn func(ctx context.Context, obs metric.Observer) error {\n\t\treturn f(ctx, &unwrapObs{obs: obs})\n\t}\n}\n\nfunc (c *registration) setDelegate(m metric.Meter) {\n\tc.unregMu.Lock()\n\tdefer c.unregMu.Unlock()\n\n\tif c.unreg == nil {\n\t\t// Unregister already called.\n\t\treturn\n\t}\n\n\treg, err := m.RegisterCallback(unwrapCallback(c.function), unwrapInstruments(c.instruments)...)\n\tif err != nil {\n\t\tGetErrorHandler().Handle(err)\n\t\treturn\n\t}\n\n\tc.unreg = reg.Unregister\n}\n\nfunc (c *registration) Unregister() error {\n\tc.unregMu.Lock()\n\tdefer c.unregMu.Unlock()\n\tif c.unreg == nil {\n\t\t// Unregister already called.\n\t\treturn nil\n\t}\n\n\tvar err error\n\terr, c.unreg = c.unreg(), nil\n\treturn err\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/global/propagator.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage global // import \"go.opentelemetry.io/otel/internal/global\"\n\nimport (\n\t\"context\"\n\t\"sync\"\n\n\t\"go.opentelemetry.io/otel/propagation\"\n)\n\n// textMapPropagator is a default TextMapPropagator that delegates calls to a\n// registered delegate if one is set, otherwise it defaults to delegating the\n// calls to a the default no-op propagation.TextMapPropagator.\ntype textMapPropagator struct {\n\tmtx      sync.Mutex\n\tonce     sync.Once\n\tdelegate propagation.TextMapPropagator\n\tnoop     propagation.TextMapPropagator\n}\n\n// Compile-time guarantee that textMapPropagator implements the\n// propagation.TextMapPropagator interface.\nvar _ propagation.TextMapPropagator = (*textMapPropagator)(nil)\n\nfunc newTextMapPropagator() *textMapPropagator {\n\treturn &textMapPropagator{\n\t\tnoop: propagation.NewCompositeTextMapPropagator(),\n\t}\n}\n\n// SetDelegate sets a delegate propagation.TextMapPropagator that all calls are\n// forwarded to. Delegation can only be performed once, all subsequent calls\n// perform no delegation.\nfunc (p *textMapPropagator) SetDelegate(delegate propagation.TextMapPropagator) {\n\tif delegate == nil {\n\t\treturn\n\t}\n\n\tp.mtx.Lock()\n\tp.once.Do(func() { p.delegate = delegate })\n\tp.mtx.Unlock()\n}\n\n// effectiveDelegate returns the current delegate of p if one is set,\n// otherwise the default noop TextMapPropagator is returned. This method\n// can be called concurrently.\nfunc (p *textMapPropagator) effectiveDelegate() propagation.TextMapPropagator {\n\tp.mtx.Lock()\n\tdefer p.mtx.Unlock()\n\tif p.delegate != nil {\n\t\treturn p.delegate\n\t}\n\treturn p.noop\n}\n\n// Inject set cross-cutting concerns from the Context into the carrier.\nfunc (p *textMapPropagator) Inject(ctx context.Context, carrier propagation.TextMapCarrier) {\n\tp.effectiveDelegate().Inject(ctx, carrier)\n}\n\n// Extract reads cross-cutting concerns from the carrier into a Context.\nfunc (p *textMapPropagator) Extract(ctx context.Context, carrier propagation.TextMapCarrier) context.Context {\n\treturn p.effectiveDelegate().Extract(ctx, carrier)\n}\n\n// Fields returns the keys whose values are set with Inject.\nfunc (p *textMapPropagator) Fields() []string {\n\treturn p.effectiveDelegate().Fields()\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/global/state.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage global // import \"go.opentelemetry.io/otel/internal/global\"\n\nimport (\n\t\"errors\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"go.opentelemetry.io/otel/metric\"\n\t\"go.opentelemetry.io/otel/propagation\"\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\ntype (\n\terrorHandlerHolder struct {\n\t\teh ErrorHandler\n\t}\n\n\ttracerProviderHolder struct {\n\t\ttp trace.TracerProvider\n\t}\n\n\tpropagatorsHolder struct {\n\t\ttm propagation.TextMapPropagator\n\t}\n\n\tmeterProviderHolder struct {\n\t\tmp metric.MeterProvider\n\t}\n)\n\nvar (\n\tglobalErrorHandler  = defaultErrorHandler()\n\tglobalTracer        = defaultTracerValue()\n\tglobalPropagators   = defaultPropagatorsValue()\n\tglobalMeterProvider = defaultMeterProvider()\n\n\tdelegateErrorHandlerOnce      sync.Once\n\tdelegateTraceOnce             sync.Once\n\tdelegateTextMapPropagatorOnce sync.Once\n\tdelegateMeterOnce             sync.Once\n)\n\n// GetErrorHandler returns the global ErrorHandler instance.\n//\n// The default ErrorHandler instance returned will log all errors to STDERR\n// until an override ErrorHandler is set with SetErrorHandler. All\n// ErrorHandler returned prior to this will automatically forward errors to\n// the set instance instead of logging.\n//\n// Subsequent calls to SetErrorHandler after the first will not forward errors\n// to the new ErrorHandler for prior returned instances.\nfunc GetErrorHandler() ErrorHandler {\n\treturn globalErrorHandler.Load().(errorHandlerHolder).eh\n}\n\n// SetErrorHandler sets the global ErrorHandler to h.\n//\n// The first time this is called all ErrorHandler previously returned from\n// GetErrorHandler will send errors to h instead of the default logging\n// ErrorHandler. Subsequent calls will set the global ErrorHandler, but not\n// delegate errors to h.\nfunc SetErrorHandler(h ErrorHandler) {\n\tcurrent := GetErrorHandler()\n\n\tif _, cOk := current.(*ErrDelegator); cOk {\n\t\tif _, ehOk := h.(*ErrDelegator); ehOk && current == h {\n\t\t\t// Do not assign to the delegate of the default ErrDelegator to be\n\t\t\t// itself.\n\t\t\tError(\n\t\t\t\terrors.New(\"no ErrorHandler delegate configured\"),\n\t\t\t\t\"ErrorHandler remains its current value.\",\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t}\n\n\tdelegateErrorHandlerOnce.Do(func() {\n\t\tif def, ok := current.(*ErrDelegator); ok {\n\t\t\tdef.setDelegate(h)\n\t\t}\n\t})\n\tglobalErrorHandler.Store(errorHandlerHolder{eh: h})\n}\n\n// TracerProvider is the internal implementation for global.TracerProvider.\nfunc TracerProvider() trace.TracerProvider {\n\treturn globalTracer.Load().(tracerProviderHolder).tp\n}\n\n// SetTracerProvider is the internal implementation for global.SetTracerProvider.\nfunc SetTracerProvider(tp trace.TracerProvider) {\n\tcurrent := TracerProvider()\n\n\tif _, cOk := current.(*tracerProvider); cOk {\n\t\tif _, tpOk := tp.(*tracerProvider); tpOk && current == tp {\n\t\t\t// Do not assign the default delegating TracerProvider to delegate\n\t\t\t// to itself.\n\t\t\tError(\n\t\t\t\terrors.New(\"no delegate configured in tracer provider\"),\n\t\t\t\t\"Setting tracer provider to its current value. No delegate will be configured\",\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t}\n\n\tdelegateTraceOnce.Do(func() {\n\t\tif def, ok := current.(*tracerProvider); ok {\n\t\t\tdef.setDelegate(tp)\n\t\t}\n\t})\n\tglobalTracer.Store(tracerProviderHolder{tp: tp})\n}\n\n// TextMapPropagator is the internal implementation for global.TextMapPropagator.\nfunc TextMapPropagator() propagation.TextMapPropagator {\n\treturn globalPropagators.Load().(propagatorsHolder).tm\n}\n\n// SetTextMapPropagator is the internal implementation for global.SetTextMapPropagator.\nfunc SetTextMapPropagator(p propagation.TextMapPropagator) {\n\tcurrent := TextMapPropagator()\n\n\tif _, cOk := current.(*textMapPropagator); cOk {\n\t\tif _, pOk := p.(*textMapPropagator); pOk && current == p {\n\t\t\t// Do not assign the default delegating TextMapPropagator to\n\t\t\t// delegate to itself.\n\t\t\tError(\n\t\t\t\terrors.New(\"no delegate configured in text map propagator\"),\n\t\t\t\t\"Setting text map propagator to its current value. No delegate will be configured\",\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// For the textMapPropagator already returned by TextMapPropagator\n\t// delegate to p.\n\tdelegateTextMapPropagatorOnce.Do(func() {\n\t\tif def, ok := current.(*textMapPropagator); ok {\n\t\t\tdef.SetDelegate(p)\n\t\t}\n\t})\n\t// Return p when subsequent calls to TextMapPropagator are made.\n\tglobalPropagators.Store(propagatorsHolder{tm: p})\n}\n\n// MeterProvider is the internal implementation for global.MeterProvider.\nfunc MeterProvider() metric.MeterProvider {\n\treturn globalMeterProvider.Load().(meterProviderHolder).mp\n}\n\n// SetMeterProvider is the internal implementation for global.SetMeterProvider.\nfunc SetMeterProvider(mp metric.MeterProvider) {\n\tcurrent := MeterProvider()\n\tif _, cOk := current.(*meterProvider); cOk {\n\t\tif _, mpOk := mp.(*meterProvider); mpOk && current == mp {\n\t\t\t// Do not assign the default delegating MeterProvider to delegate\n\t\t\t// to itself.\n\t\t\tError(\n\t\t\t\terrors.New(\"no delegate configured in meter provider\"),\n\t\t\t\t\"Setting meter provider to its current value. No delegate will be configured\",\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t}\n\n\tdelegateMeterOnce.Do(func() {\n\t\tif def, ok := current.(*meterProvider); ok {\n\t\t\tdef.setDelegate(mp)\n\t\t}\n\t})\n\tglobalMeterProvider.Store(meterProviderHolder{mp: mp})\n}\n\nfunc defaultErrorHandler() *atomic.Value {\n\tv := &atomic.Value{}\n\tv.Store(errorHandlerHolder{eh: &ErrDelegator{}})\n\treturn v\n}\n\nfunc defaultTracerValue() *atomic.Value {\n\tv := &atomic.Value{}\n\tv.Store(tracerProviderHolder{tp: &tracerProvider{}})\n\treturn v\n}\n\nfunc defaultPropagatorsValue() *atomic.Value {\n\tv := &atomic.Value{}\n\tv.Store(propagatorsHolder{tm: newTextMapPropagator()})\n\treturn v\n}\n\nfunc defaultMeterProvider() *atomic.Value {\n\tv := &atomic.Value{}\n\tv.Store(meterProviderHolder{mp: &meterProvider{}})\n\treturn v\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/global/trace.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage global // import \"go.opentelemetry.io/otel/internal/global\"\n\n/*\nThis file contains the forwarding implementation of the TracerProvider used as\nthe default global instance. Prior to initialization of an SDK, Tracers\nreturned by the global TracerProvider will provide no-op functionality. This\nmeans that all Span created prior to initialization are no-op Spans.\n\nOnce an SDK has been initialized, all provided no-op Tracers are swapped for\nTracers provided by the SDK defined TracerProvider. However, any Span started\nprior to this initialization does not change its behavior. Meaning, the Span\nremains a no-op Span.\n\nThe implementation to track and swap Tracers locks all new Tracer creation\nuntil the swap is complete. This assumes that this operation is not\nperformance-critical. If that assumption is incorrect, be sure to configure an\nSDK prior to any Tracer creation.\n*/\n\nimport (\n\t\"context\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"go.opentelemetry.io/auto/sdk\"\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/codes\"\n\t\"go.opentelemetry.io/otel/trace\"\n\t\"go.opentelemetry.io/otel/trace/embedded\"\n)\n\n// tracerProvider is a placeholder for a configured SDK TracerProvider.\n//\n// All TracerProvider functionality is forwarded to a delegate once\n// configured.\ntype tracerProvider struct {\n\tembedded.TracerProvider\n\n\tmtx      sync.Mutex\n\ttracers  map[il]*tracer\n\tdelegate trace.TracerProvider\n}\n\n// Compile-time guarantee that tracerProvider implements the TracerProvider\n// interface.\nvar _ trace.TracerProvider = &tracerProvider{}\n\n// setDelegate configures p to delegate all TracerProvider functionality to\n// provider.\n//\n// All Tracers provided prior to this function call are switched out to be\n// Tracers provided by provider.\n//\n// It is guaranteed by the caller that this happens only once.\nfunc (p *tracerProvider) setDelegate(provider trace.TracerProvider) {\n\tp.mtx.Lock()\n\tdefer p.mtx.Unlock()\n\n\tp.delegate = provider\n\n\tif len(p.tracers) == 0 {\n\t\treturn\n\t}\n\n\tfor _, t := range p.tracers {\n\t\tt.setDelegate(provider)\n\t}\n\n\tp.tracers = nil\n}\n\n// Tracer implements TracerProvider.\nfunc (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer {\n\tp.mtx.Lock()\n\tdefer p.mtx.Unlock()\n\n\tif p.delegate != nil {\n\t\treturn p.delegate.Tracer(name, opts...)\n\t}\n\n\t// At this moment it is guaranteed that no sdk is installed, save the tracer in the tracers map.\n\n\tc := trace.NewTracerConfig(opts...)\n\tkey := il{\n\t\tname:    name,\n\t\tversion: c.InstrumentationVersion(),\n\t\tschema:  c.SchemaURL(),\n\t\tattrs:   c.InstrumentationAttributes(),\n\t}\n\n\tif p.tracers == nil {\n\t\tp.tracers = make(map[il]*tracer)\n\t}\n\n\tif val, ok := p.tracers[key]; ok {\n\t\treturn val\n\t}\n\n\tt := &tracer{name: name, opts: opts, provider: p}\n\tp.tracers[key] = t\n\treturn t\n}\n\ntype il struct {\n\tname    string\n\tversion string\n\tschema  string\n\tattrs   attribute.Set\n}\n\n// tracer is a placeholder for a trace.Tracer.\n//\n// All Tracer functionality is forwarded to a delegate once configured.\n// Otherwise, all functionality is forwarded to a NoopTracer.\ntype tracer struct {\n\tembedded.Tracer\n\n\tname     string\n\topts     []trace.TracerOption\n\tprovider *tracerProvider\n\n\tdelegate atomic.Value\n}\n\n// Compile-time guarantee that tracer implements the trace.Tracer interface.\nvar _ trace.Tracer = &tracer{}\n\n// setDelegate configures t to delegate all Tracer functionality to Tracers\n// created by provider.\n//\n// All subsequent calls to the Tracer methods will be passed to the delegate.\n//\n// It is guaranteed by the caller that this happens only once.\nfunc (t *tracer) setDelegate(provider trace.TracerProvider) {\n\tt.delegate.Store(provider.Tracer(t.name, t.opts...))\n}\n\n// Start implements trace.Tracer by forwarding the call to t.delegate if\n// set, otherwise it forwards the call to a NoopTracer.\nfunc (t *tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {\n\tdelegate := t.delegate.Load()\n\tif delegate != nil {\n\t\treturn delegate.(trace.Tracer).Start(ctx, name, opts...)\n\t}\n\n\treturn t.newSpan(ctx, autoInstEnabled, name, opts)\n}\n\n// autoInstEnabled determines if the auto-instrumentation SDK span is returned\n// from the tracer when not backed by a delegate and auto-instrumentation has\n// attached to this process.\n//\n// The auto-instrumentation is expected to overwrite this value to true when it\n// attaches. By default, this will point to false and mean a tracer will return\n// a nonRecordingSpan by default.\nvar autoInstEnabled = new(bool)\n\nfunc (t *tracer) newSpan(ctx context.Context, autoSpan *bool, name string, opts []trace.SpanStartOption) (context.Context, trace.Span) {\n\t// autoInstEnabled is passed to newSpan via the autoSpan parameter. This is\n\t// so the auto-instrumentation can define a uprobe for (*t).newSpan and be\n\t// provided with the address of the bool autoInstEnabled points to. It\n\t// needs to be a parameter so that pointer can be reliably determined, it\n\t// should not be read from the global.\n\n\tif *autoSpan {\n\t\ttracer := sdk.TracerProvider().Tracer(t.name, t.opts...)\n\t\treturn tracer.Start(ctx, name, opts...)\n\t}\n\n\ts := nonRecordingSpan{sc: trace.SpanContextFromContext(ctx), tracer: t}\n\tctx = trace.ContextWithSpan(ctx, s)\n\treturn ctx, s\n}\n\n// nonRecordingSpan is a minimal implementation of a Span that wraps a\n// SpanContext. It performs no operations other than to return the wrapped\n// SpanContext.\ntype nonRecordingSpan struct {\n\tembedded.Span\n\n\tsc     trace.SpanContext\n\ttracer *tracer\n}\n\nvar _ trace.Span = nonRecordingSpan{}\n\n// SpanContext returns the wrapped SpanContext.\nfunc (s nonRecordingSpan) SpanContext() trace.SpanContext { return s.sc }\n\n// IsRecording always returns false.\nfunc (nonRecordingSpan) IsRecording() bool { return false }\n\n// SetStatus does nothing.\nfunc (nonRecordingSpan) SetStatus(codes.Code, string) {}\n\n// SetError does nothing.\nfunc (nonRecordingSpan) SetError(bool) {}\n\n// SetAttributes does nothing.\nfunc (nonRecordingSpan) SetAttributes(...attribute.KeyValue) {}\n\n// End does nothing.\nfunc (nonRecordingSpan) End(...trace.SpanEndOption) {}\n\n// RecordError does nothing.\nfunc (nonRecordingSpan) RecordError(error, ...trace.EventOption) {}\n\n// AddEvent does nothing.\nfunc (nonRecordingSpan) AddEvent(string, ...trace.EventOption) {}\n\n// AddLink does nothing.\nfunc (nonRecordingSpan) AddLink(trace.Link) {}\n\n// SetName does nothing.\nfunc (nonRecordingSpan) SetName(string) {}\n\nfunc (s nonRecordingSpan) TracerProvider() trace.TracerProvider { return s.tracer.provider }\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal/rawhelpers.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage internal // import \"go.opentelemetry.io/otel/internal\"\n\nimport (\n\t\"math\"\n\t\"unsafe\"\n)\n\nfunc BoolToRaw(b bool) uint64 { // nolint:revive  // b is not a control flag.\n\tif b {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\nfunc RawToBool(r uint64) bool {\n\treturn r != 0\n}\n\nfunc Int64ToRaw(i int64) uint64 {\n\t// Assumes original was a valid int64 (overflow not checked).\n\treturn uint64(i) // nolint: gosec\n}\n\nfunc RawToInt64(r uint64) int64 {\n\t// Assumes original was a valid int64 (overflow not checked).\n\treturn int64(r) // nolint: gosec\n}\n\nfunc Float64ToRaw(f float64) uint64 {\n\treturn math.Float64bits(f)\n}\n\nfunc RawToFloat64(r uint64) float64 {\n\treturn math.Float64frombits(r)\n}\n\nfunc RawPtrToFloat64Ptr(r *uint64) *float64 {\n\t// Assumes original was a valid *float64 (overflow not checked).\n\treturn (*float64)(unsafe.Pointer(r)) // nolint: gosec\n}\n\nfunc RawPtrToInt64Ptr(r *uint64) *int64 {\n\t// Assumes original was a valid *int64 (overflow not checked).\n\treturn (*int64)(unsafe.Pointer(r)) // nolint: gosec\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/internal_logging.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage otel // import \"go.opentelemetry.io/otel\"\n\nimport (\n\t\"github.com/go-logr/logr\"\n\n\t\"go.opentelemetry.io/otel/internal/global\"\n)\n\n// SetLogger configures the logger used internally to opentelemetry.\nfunc SetLogger(logger logr.Logger) {\n\tglobal.SetLogger(logger)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/README.md",
    "content": "# Metric API\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/metric)](https://pkg.go.dev/go.opentelemetry.io/otel/metric)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/metric/embedded\"\n)\n\n// Float64Observable describes a set of instruments used asynchronously to\n// record float64 measurements once per collection cycle. Observations of\n// these instruments are only made within a callback.\n//\n// Warning: Methods may be added to this interface in minor releases.\ntype Float64Observable interface {\n\tObservable\n\n\tfloat64Observable()\n}\n\n// Float64ObservableCounter is an instrument used to asynchronously record\n// increasing float64 measurements once per collection cycle. Observations are\n// only made within a callback for this instrument. The value observed is\n// assumed the to be the cumulative sum of the count.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for\n// unimplemented methods.\ntype Float64ObservableCounter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64ObservableCounter\n\n\tFloat64Observable\n}\n\n// Float64ObservableCounterConfig contains options for asynchronous counter\n// instruments that record float64 values.\ntype Float64ObservableCounterConfig struct {\n\tdescription string\n\tunit        string\n\tcallbacks   []Float64Callback\n}\n\n// NewFloat64ObservableCounterConfig returns a new\n// [Float64ObservableCounterConfig] with all opts applied.\nfunc NewFloat64ObservableCounterConfig(opts ...Float64ObservableCounterOption) Float64ObservableCounterConfig {\n\tvar config Float64ObservableCounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyFloat64ObservableCounter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Float64ObservableCounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Float64ObservableCounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Callbacks returns the configured callbacks.\nfunc (c Float64ObservableCounterConfig) Callbacks() []Float64Callback {\n\treturn c.callbacks\n}\n\n// Float64ObservableCounterOption applies options to a\n// [Float64ObservableCounterConfig]. See [Float64ObservableOption] and\n// [InstrumentOption] for other options that can be used as a\n// Float64ObservableCounterOption.\ntype Float64ObservableCounterOption interface {\n\tapplyFloat64ObservableCounter(Float64ObservableCounterConfig) Float64ObservableCounterConfig\n}\n\n// Float64ObservableUpDownCounter is an instrument used to asynchronously\n// record float64 measurements once per collection cycle. Observations are only\n// made within a callback for this instrument. The value observed is assumed\n// the to be the cumulative sum of the count.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Float64ObservableUpDownCounter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64ObservableUpDownCounter\n\n\tFloat64Observable\n}\n\n// Float64ObservableUpDownCounterConfig contains options for asynchronous\n// counter instruments that record float64 values.\ntype Float64ObservableUpDownCounterConfig struct {\n\tdescription string\n\tunit        string\n\tcallbacks   []Float64Callback\n}\n\n// NewFloat64ObservableUpDownCounterConfig returns a new\n// [Float64ObservableUpDownCounterConfig] with all opts applied.\nfunc NewFloat64ObservableUpDownCounterConfig(opts ...Float64ObservableUpDownCounterOption) Float64ObservableUpDownCounterConfig {\n\tvar config Float64ObservableUpDownCounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyFloat64ObservableUpDownCounter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Float64ObservableUpDownCounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Float64ObservableUpDownCounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Callbacks returns the configured callbacks.\nfunc (c Float64ObservableUpDownCounterConfig) Callbacks() []Float64Callback {\n\treturn c.callbacks\n}\n\n// Float64ObservableUpDownCounterOption applies options to a\n// [Float64ObservableUpDownCounterConfig]. See [Float64ObservableOption] and\n// [InstrumentOption] for other options that can be used as a\n// Float64ObservableUpDownCounterOption.\ntype Float64ObservableUpDownCounterOption interface {\n\tapplyFloat64ObservableUpDownCounter(Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig\n}\n\n// Float64ObservableGauge is an instrument used to asynchronously record\n// instantaneous float64 measurements once per collection cycle. Observations\n// are only made within a callback for this instrument.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Float64ObservableGauge interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64ObservableGauge\n\n\tFloat64Observable\n}\n\n// Float64ObservableGaugeConfig contains options for asynchronous counter\n// instruments that record float64 values.\ntype Float64ObservableGaugeConfig struct {\n\tdescription string\n\tunit        string\n\tcallbacks   []Float64Callback\n}\n\n// NewFloat64ObservableGaugeConfig returns a new [Float64ObservableGaugeConfig]\n// with all opts applied.\nfunc NewFloat64ObservableGaugeConfig(opts ...Float64ObservableGaugeOption) Float64ObservableGaugeConfig {\n\tvar config Float64ObservableGaugeConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyFloat64ObservableGauge(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Float64ObservableGaugeConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Float64ObservableGaugeConfig) Unit() string {\n\treturn c.unit\n}\n\n// Callbacks returns the configured callbacks.\nfunc (c Float64ObservableGaugeConfig) Callbacks() []Float64Callback {\n\treturn c.callbacks\n}\n\n// Float64ObservableGaugeOption applies options to a\n// [Float64ObservableGaugeConfig]. See [Float64ObservableOption] and\n// [InstrumentOption] for other options that can be used as a\n// Float64ObservableGaugeOption.\ntype Float64ObservableGaugeOption interface {\n\tapplyFloat64ObservableGauge(Float64ObservableGaugeConfig) Float64ObservableGaugeConfig\n}\n\n// Float64Observer is a recorder of float64 measurements.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Float64Observer interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64Observer\n\n\t// Observe records the float64 value.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tObserve(value float64, options ...ObserveOption)\n}\n\n// Float64Callback is a function registered with a Meter that makes\n// observations for a Float64Observable instrument it is registered with.\n// Calls to the Float64Observer record measurement values for the\n// Float64Observable.\n//\n// The function needs to complete in a finite amount of time and the deadline\n// of the passed context is expected to be honored.\n//\n// The function needs to make unique observations across all registered\n// Float64Callbacks. Meaning, it should not report measurements with the same\n// attributes as another Float64Callbacks also registered for the same\n// instrument.\n//\n// The function needs to be concurrent safe.\ntype Float64Callback func(context.Context, Float64Observer) error\n\n// Float64ObservableOption applies options to float64 Observer instruments.\ntype Float64ObservableOption interface {\n\tFloat64ObservableCounterOption\n\tFloat64ObservableUpDownCounterOption\n\tFloat64ObservableGaugeOption\n}\n\ntype float64CallbackOpt struct {\n\tcback Float64Callback\n}\n\nfunc (o float64CallbackOpt) applyFloat64ObservableCounter(cfg Float64ObservableCounterConfig) Float64ObservableCounterConfig {\n\tcfg.callbacks = append(cfg.callbacks, o.cback)\n\treturn cfg\n}\n\nfunc (o float64CallbackOpt) applyFloat64ObservableUpDownCounter(cfg Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig {\n\tcfg.callbacks = append(cfg.callbacks, o.cback)\n\treturn cfg\n}\n\nfunc (o float64CallbackOpt) applyFloat64ObservableGauge(cfg Float64ObservableGaugeConfig) Float64ObservableGaugeConfig {\n\tcfg.callbacks = append(cfg.callbacks, o.cback)\n\treturn cfg\n}\n\n// WithFloat64Callback adds callback to be called for an instrument.\nfunc WithFloat64Callback(callback Float64Callback) Float64ObservableOption {\n\treturn float64CallbackOpt{callback}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/asyncint64.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/metric/embedded\"\n)\n\n// Int64Observable describes a set of instruments used asynchronously to record\n// int64 measurements once per collection cycle. Observations of these\n// instruments are only made within a callback.\n//\n// Warning: Methods may be added to this interface in minor releases.\ntype Int64Observable interface {\n\tObservable\n\n\tint64Observable()\n}\n\n// Int64ObservableCounter is an instrument used to asynchronously record\n// increasing int64 measurements once per collection cycle. Observations are\n// only made within a callback for this instrument. The value observed is\n// assumed the to be the cumulative sum of the count.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64ObservableCounter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64ObservableCounter\n\n\tInt64Observable\n}\n\n// Int64ObservableCounterConfig contains options for asynchronous counter\n// instruments that record int64 values.\ntype Int64ObservableCounterConfig struct {\n\tdescription string\n\tunit        string\n\tcallbacks   []Int64Callback\n}\n\n// NewInt64ObservableCounterConfig returns a new [Int64ObservableCounterConfig]\n// with all opts applied.\nfunc NewInt64ObservableCounterConfig(opts ...Int64ObservableCounterOption) Int64ObservableCounterConfig {\n\tvar config Int64ObservableCounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyInt64ObservableCounter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Int64ObservableCounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Int64ObservableCounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Callbacks returns the configured callbacks.\nfunc (c Int64ObservableCounterConfig) Callbacks() []Int64Callback {\n\treturn c.callbacks\n}\n\n// Int64ObservableCounterOption applies options to a\n// [Int64ObservableCounterConfig]. See [Int64ObservableOption] and\n// [InstrumentOption] for other options that can be used as an\n// Int64ObservableCounterOption.\ntype Int64ObservableCounterOption interface {\n\tapplyInt64ObservableCounter(Int64ObservableCounterConfig) Int64ObservableCounterConfig\n}\n\n// Int64ObservableUpDownCounter is an instrument used to asynchronously record\n// int64 measurements once per collection cycle. Observations are only made\n// within a callback for this instrument. The value observed is assumed the to\n// be the cumulative sum of the count.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64ObservableUpDownCounter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64ObservableUpDownCounter\n\n\tInt64Observable\n}\n\n// Int64ObservableUpDownCounterConfig contains options for asynchronous counter\n// instruments that record int64 values.\ntype Int64ObservableUpDownCounterConfig struct {\n\tdescription string\n\tunit        string\n\tcallbacks   []Int64Callback\n}\n\n// NewInt64ObservableUpDownCounterConfig returns a new\n// [Int64ObservableUpDownCounterConfig] with all opts applied.\nfunc NewInt64ObservableUpDownCounterConfig(opts ...Int64ObservableUpDownCounterOption) Int64ObservableUpDownCounterConfig {\n\tvar config Int64ObservableUpDownCounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyInt64ObservableUpDownCounter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Int64ObservableUpDownCounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Int64ObservableUpDownCounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Callbacks returns the configured callbacks.\nfunc (c Int64ObservableUpDownCounterConfig) Callbacks() []Int64Callback {\n\treturn c.callbacks\n}\n\n// Int64ObservableUpDownCounterOption applies options to a\n// [Int64ObservableUpDownCounterConfig]. See [Int64ObservableOption] and\n// [InstrumentOption] for other options that can be used as an\n// Int64ObservableUpDownCounterOption.\ntype Int64ObservableUpDownCounterOption interface {\n\tapplyInt64ObservableUpDownCounter(Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig\n}\n\n// Int64ObservableGauge is an instrument used to asynchronously record\n// instantaneous int64 measurements once per collection cycle. Observations are\n// only made within a callback for this instrument.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64ObservableGauge interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64ObservableGauge\n\n\tInt64Observable\n}\n\n// Int64ObservableGaugeConfig contains options for asynchronous counter\n// instruments that record int64 values.\ntype Int64ObservableGaugeConfig struct {\n\tdescription string\n\tunit        string\n\tcallbacks   []Int64Callback\n}\n\n// NewInt64ObservableGaugeConfig returns a new [Int64ObservableGaugeConfig]\n// with all opts applied.\nfunc NewInt64ObservableGaugeConfig(opts ...Int64ObservableGaugeOption) Int64ObservableGaugeConfig {\n\tvar config Int64ObservableGaugeConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyInt64ObservableGauge(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Int64ObservableGaugeConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Int64ObservableGaugeConfig) Unit() string {\n\treturn c.unit\n}\n\n// Callbacks returns the configured callbacks.\nfunc (c Int64ObservableGaugeConfig) Callbacks() []Int64Callback {\n\treturn c.callbacks\n}\n\n// Int64ObservableGaugeOption applies options to a\n// [Int64ObservableGaugeConfig]. See [Int64ObservableOption] and\n// [InstrumentOption] for other options that can be used as an\n// Int64ObservableGaugeOption.\ntype Int64ObservableGaugeOption interface {\n\tapplyInt64ObservableGauge(Int64ObservableGaugeConfig) Int64ObservableGaugeConfig\n}\n\n// Int64Observer is a recorder of int64 measurements.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64Observer interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64Observer\n\n\t// Observe records the int64 value.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tObserve(value int64, options ...ObserveOption)\n}\n\n// Int64Callback is a function registered with a Meter that makes observations\n// for an Int64Observable instrument it is registered with. Calls to the\n// Int64Observer record measurement values for the Int64Observable.\n//\n// The function needs to complete in a finite amount of time and the deadline\n// of the passed context is expected to be honored.\n//\n// The function needs to make unique observations across all registered\n// Int64Callbacks. Meaning, it should not report measurements with the same\n// attributes as another Int64Callbacks also registered for the same\n// instrument.\n//\n// The function needs to be concurrent safe.\ntype Int64Callback func(context.Context, Int64Observer) error\n\n// Int64ObservableOption applies options to int64 Observer instruments.\ntype Int64ObservableOption interface {\n\tInt64ObservableCounterOption\n\tInt64ObservableUpDownCounterOption\n\tInt64ObservableGaugeOption\n}\n\ntype int64CallbackOpt struct {\n\tcback Int64Callback\n}\n\nfunc (o int64CallbackOpt) applyInt64ObservableCounter(cfg Int64ObservableCounterConfig) Int64ObservableCounterConfig {\n\tcfg.callbacks = append(cfg.callbacks, o.cback)\n\treturn cfg\n}\n\nfunc (o int64CallbackOpt) applyInt64ObservableUpDownCounter(cfg Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig {\n\tcfg.callbacks = append(cfg.callbacks, o.cback)\n\treturn cfg\n}\n\nfunc (o int64CallbackOpt) applyInt64ObservableGauge(cfg Int64ObservableGaugeConfig) Int64ObservableGaugeConfig {\n\tcfg.callbacks = append(cfg.callbacks, o.cback)\n\treturn cfg\n}\n\n// WithInt64Callback adds callback to be called for an instrument.\nfunc WithInt64Callback(callback Int64Callback) Int64ObservableOption {\n\treturn int64CallbackOpt{callback}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/config.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n\nimport \"go.opentelemetry.io/otel/attribute\"\n\n// MeterConfig contains options for Meters.\ntype MeterConfig struct {\n\tinstrumentationVersion string\n\tschemaURL              string\n\tattrs                  attribute.Set\n\n\t// Ensure forward compatibility by explicitly making this not comparable.\n\tnoCmp [0]func() //nolint: unused  // This is indeed used.\n}\n\n// InstrumentationVersion returns the version of the library providing\n// instrumentation.\nfunc (cfg MeterConfig) InstrumentationVersion() string {\n\treturn cfg.instrumentationVersion\n}\n\n// InstrumentationAttributes returns the attributes associated with the library\n// providing instrumentation.\nfunc (cfg MeterConfig) InstrumentationAttributes() attribute.Set {\n\treturn cfg.attrs\n}\n\n// SchemaURL is the schema_url of the library providing instrumentation.\nfunc (cfg MeterConfig) SchemaURL() string {\n\treturn cfg.schemaURL\n}\n\n// MeterOption is an interface for applying Meter options.\ntype MeterOption interface {\n\t// applyMeter is used to set a MeterOption value of a MeterConfig.\n\tapplyMeter(MeterConfig) MeterConfig\n}\n\n// NewMeterConfig creates a new MeterConfig and applies\n// all the given options.\nfunc NewMeterConfig(opts ...MeterOption) MeterConfig {\n\tvar config MeterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyMeter(config)\n\t}\n\treturn config\n}\n\ntype meterOptionFunc func(MeterConfig) MeterConfig\n\nfunc (fn meterOptionFunc) applyMeter(cfg MeterConfig) MeterConfig {\n\treturn fn(cfg)\n}\n\n// WithInstrumentationVersion sets the instrumentation version.\nfunc WithInstrumentationVersion(version string) MeterOption {\n\treturn meterOptionFunc(func(config MeterConfig) MeterConfig {\n\t\tconfig.instrumentationVersion = version\n\t\treturn config\n\t})\n}\n\n// WithInstrumentationAttributes sets the instrumentation attributes.\n//\n// The passed attributes will be de-duplicated.\nfunc WithInstrumentationAttributes(attr ...attribute.KeyValue) MeterOption {\n\treturn meterOptionFunc(func(config MeterConfig) MeterConfig {\n\t\tconfig.attrs = attribute.NewSet(attr...)\n\t\treturn config\n\t})\n}\n\n// WithSchemaURL sets the schema URL.\nfunc WithSchemaURL(schemaURL string) MeterOption {\n\treturn meterOptionFunc(func(config MeterConfig) MeterConfig {\n\t\tconfig.schemaURL = schemaURL\n\t\treturn config\n\t})\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage metric provides the OpenTelemetry API used to measure metrics about\nsource code operation.\n\nThis API is separate from its implementation so the instrumentation built from\nit is reusable. See [go.opentelemetry.io/otel/sdk/metric] for the official\nOpenTelemetry implementation of this API.\n\nAll measurements made with this package are made via instruments. These\ninstruments are created by a [Meter] which itself is created by a\n[MeterProvider]. Applications need to accept a [MeterProvider] implementation\nas a starting point when instrumenting. This can be done directly, or by using\nthe OpenTelemetry global MeterProvider via [GetMeterProvider]. Using an\nappropriately named [Meter] from the accepted [MeterProvider], instrumentation\ncan then be built from the [Meter]'s instruments.\n\n# Instruments\n\nEach instrument is designed to make measurements of a particular type. Broadly,\nall instruments fall into two overlapping logical categories: asynchronous or\nsynchronous, and int64 or float64.\n\nAll synchronous instruments ([Int64Counter], [Int64UpDownCounter],\n[Int64Histogram], [Float64Counter], [Float64UpDownCounter], and\n[Float64Histogram]) are used to measure the operation and performance of source\ncode during the source code execution. These instruments only make measurements\nwhen the source code they instrument is run.\n\nAll asynchronous instruments ([Int64ObservableCounter],\n[Int64ObservableUpDownCounter], [Int64ObservableGauge],\n[Float64ObservableCounter], [Float64ObservableUpDownCounter], and\n[Float64ObservableGauge]) are used to measure metrics outside of the execution\nof source code. They are said to make \"observations\" via a callback function\ncalled once every measurement collection cycle.\n\nEach instrument is also grouped by the value type it measures. Either int64 or\nfloat64. The value being measured will dictate which instrument in these\ncategories to use.\n\nOutside of these two broad categories, instruments are described by the\nfunction they are designed to serve. All Counters ([Int64Counter],\n[Float64Counter], [Int64ObservableCounter], and [Float64ObservableCounter]) are\ndesigned to measure values that never decrease in value, but instead only\nincrementally increase in value. UpDownCounters ([Int64UpDownCounter],\n[Float64UpDownCounter], [Int64ObservableUpDownCounter], and\n[Float64ObservableUpDownCounter]) on the other hand, are designed to measure\nvalues that can increase and decrease. When more information needs to be\nconveyed about all the synchronous measurements made during a collection cycle,\na Histogram ([Int64Histogram] and [Float64Histogram]) should be used. Finally,\nwhen just the most recent measurement needs to be conveyed about an\nasynchronous measurement, a Gauge ([Int64ObservableGauge] and\n[Float64ObservableGauge]) should be used.\n\nSee the [OpenTelemetry documentation] for more information about instruments\nand their intended use.\n\n# Instrument Name\n\nOpenTelemetry defines an [instrument name syntax] that restricts what\ninstrument names are allowed.\n\nInstrument names should ...\n\n  - Not be empty.\n  - Have an alphabetic character as their first letter.\n  - Have any letter after the first be an alphanumeric character, ‘_’, ‘.’,\n    ‘-’, or ‘/’.\n  - Have a maximum length of 255 letters.\n\nTo ensure compatibility with observability platforms, all instruments created\nneed to conform to this syntax. Not all implementations of the API will validate\nthese names, it is the callers responsibility to ensure compliance.\n\n# Measurements\n\nMeasurements are made by recording values and information about the values with\nan instrument. How these measurements are recorded depends on the instrument.\n\nMeasurements for synchronous instruments ([Int64Counter], [Int64UpDownCounter],\n[Int64Histogram], [Float64Counter], [Float64UpDownCounter], and\n[Float64Histogram]) are recorded using the instrument methods directly. All\ncounter instruments have an Add method that is used to measure an increment\nvalue, and all histogram instruments have a Record method to measure a data\npoint.\n\nAsynchronous instruments ([Int64ObservableCounter],\n[Int64ObservableUpDownCounter], [Int64ObservableGauge],\n[Float64ObservableCounter], [Float64ObservableUpDownCounter], and\n[Float64ObservableGauge]) record measurements within a callback function. The\ncallback is registered with the Meter which ensures the callback is called once\nper collection cycle. A callback can be registered two ways: during the\ninstrument's creation using an option, or later using the RegisterCallback\nmethod of the [Meter] that created the instrument.\n\nIf the following criteria are met, an option ([WithInt64Callback] or\n[WithFloat64Callback]) can be used during the asynchronous instrument's\ncreation to register a callback ([Int64Callback] or [Float64Callback],\nrespectively):\n\n  - The measurement process is known when the instrument is created\n  - Only that instrument will make a measurement within the callback\n  - The callback never needs to be unregistered\n\nIf the criteria are not met, use the RegisterCallback method of the [Meter] that\ncreated the instrument to register a [Callback].\n\n# API Implementations\n\nThis package does not conform to the standard Go versioning policy, all of its\ninterfaces may have methods added to them without a package major version bump.\nThis non-standard API evolution could surprise an uninformed implementation\nauthor. They could unknowingly build their implementation in a way that would\nresult in a runtime panic for their users that update to the new API.\n\nThe API is designed to help inform an instrumentation author about this\nnon-standard API evolution. It requires them to choose a default behavior for\nunimplemented interface methods. There are three behavior choices they can\nmake:\n\n  - Compilation failure\n  - Panic\n  - Default to another implementation\n\nAll interfaces in this API embed a corresponding interface from\n[go.opentelemetry.io/otel/metric/embedded]. If an author wants the default\nbehavior of their implementations to be a compilation failure, signaling to\ntheir users they need to update to the latest version of that implementation,\nthey need to embed the corresponding interface from\n[go.opentelemetry.io/otel/metric/embedded] in their implementation. For\nexample,\n\n\timport \"go.opentelemetry.io/otel/metric/embedded\"\n\n\ttype MeterProvider struct {\n\t\tembedded.MeterProvider\n\t\t// ...\n\t}\n\nIf an author wants the default behavior of their implementations to a panic,\nthey need to embed the API interface directly.\n\n\timport \"go.opentelemetry.io/otel/metric\"\n\n\ttype MeterProvider struct {\n\t\tmetric.MeterProvider\n\t\t// ...\n\t}\n\nThis is not a recommended behavior as it could lead to publishing packages that\ncontain runtime panics when users update other package that use newer versions\nof [go.opentelemetry.io/otel/metric].\n\nFinally, an author can embed another implementation in theirs. The embedded\nimplementation will be used for methods not defined by the author. For example,\nan author who wants to default to silently dropping the call can use\n[go.opentelemetry.io/otel/metric/noop]:\n\n\timport \"go.opentelemetry.io/otel/metric/noop\"\n\n\ttype MeterProvider struct {\n\t\tnoop.MeterProvider\n\t\t// ...\n\t}\n\nIt is strongly recommended that authors only embed\n[go.opentelemetry.io/otel/metric/noop] if they choose this default behavior.\nThat implementation is the only one OpenTelemetry authors can guarantee will\nfully implement all the API interfaces when a user updates their API.\n\n[instrument name syntax]: https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-name-syntax\n[OpenTelemetry documentation]: https://opentelemetry.io/docs/concepts/signals/metrics/\n[GetMeterProvider]: https://pkg.go.dev/go.opentelemetry.io/otel#GetMeterProvider\n*/\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/embedded/README.md",
    "content": "# Metric Embedded\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/metric/embedded)](https://pkg.go.dev/go.opentelemetry.io/otel/metric/embedded)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/embedded/embedded.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Package embedded provides interfaces embedded within the [OpenTelemetry\n// metric API].\n//\n// Implementers of the [OpenTelemetry metric API] can embed the relevant type\n// from this package into their implementation directly. Doing so will result\n// in a compilation error for users when the [OpenTelemetry metric API] is\n// extended (which is something that can happen without a major version bump of\n// the API package).\n//\n// [OpenTelemetry metric API]: https://pkg.go.dev/go.opentelemetry.io/otel/metric\npackage embedded // import \"go.opentelemetry.io/otel/metric/embedded\"\n\n// MeterProvider is embedded in\n// [go.opentelemetry.io/otel/metric.MeterProvider].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.MeterProvider] if you want users to\n// experience a compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/metric.MeterProvider]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype MeterProvider interface{ meterProvider() }\n\n// Meter is embedded in [go.opentelemetry.io/otel/metric.Meter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Meter] if you want users to experience a\n// compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/metric.Meter] interface\n// is extended (which is something that can happen without a major version bump\n// of the API package).\ntype Meter interface{ meter() }\n\n// Float64Observer is embedded in\n// [go.opentelemetry.io/otel/metric.Float64Observer].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64Observer] if you want\n// users to experience a compilation error, signaling they need to update to\n// your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Float64Observer] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Float64Observer interface{ float64Observer() }\n\n// Int64Observer is embedded in\n// [go.opentelemetry.io/otel/metric.Int64Observer].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64Observer] if you want users\n// to experience a compilation error, signaling they need to update to your\n// latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Int64Observer] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Int64Observer interface{ int64Observer() }\n\n// Observer is embedded in [go.opentelemetry.io/otel/metric.Observer].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Observer] if you want users to experience a\n// compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/metric.Observer]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Observer interface{ observer() }\n\n// Registration is embedded in [go.opentelemetry.io/otel/metric.Registration].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Registration] if you want users to\n// experience a compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/metric.Registration]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Registration interface{ registration() }\n\n// Float64Counter is embedded in\n// [go.opentelemetry.io/otel/metric.Float64Counter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64Counter] if you want\n// users to experience a compilation error, signaling they need to update to\n// your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Float64Counter] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Float64Counter interface{ float64Counter() }\n\n// Float64Histogram is embedded in\n// [go.opentelemetry.io/otel/metric.Float64Histogram].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64Histogram] if you want\n// users to experience a compilation error, signaling they need to update to\n// your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Float64Histogram] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Float64Histogram interface{ float64Histogram() }\n\n// Float64Gauge is embedded in [go.opentelemetry.io/otel/metric.Float64Gauge].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64Gauge] if you want users to\n// experience a compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/metric.Float64Gauge]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Float64Gauge interface{ float64Gauge() }\n\n// Float64ObservableCounter is embedded in\n// [go.opentelemetry.io/otel/metric.Float64ObservableCounter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64ObservableCounter] if you\n// want users to experience a compilation error, signaling they need to update\n// to your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Float64ObservableCounter]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Float64ObservableCounter interface{ float64ObservableCounter() }\n\n// Float64ObservableGauge is embedded in\n// [go.opentelemetry.io/otel/metric.Float64ObservableGauge].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64ObservableGauge] if you\n// want users to experience a compilation error, signaling they need to update\n// to your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Float64ObservableGauge]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Float64ObservableGauge interface{ float64ObservableGauge() }\n\n// Float64ObservableUpDownCounter is embedded in\n// [go.opentelemetry.io/otel/metric.Float64ObservableUpDownCounter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64ObservableUpDownCounter]\n// if you want users to experience a compilation error, signaling they need to\n// update to your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Float64ObservableUpDownCounter]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Float64ObservableUpDownCounter interface{ float64ObservableUpDownCounter() }\n\n// Float64UpDownCounter is embedded in\n// [go.opentelemetry.io/otel/metric.Float64UpDownCounter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Float64UpDownCounter] if you\n// want users to experience a compilation error, signaling they need to update\n// to your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Float64UpDownCounter] interface\n// is extended (which is something that can happen without a major version bump\n// of the API package).\ntype Float64UpDownCounter interface{ float64UpDownCounter() }\n\n// Int64Counter is embedded in\n// [go.opentelemetry.io/otel/metric.Int64Counter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64Counter] if you want users\n// to experience a compilation error, signaling they need to update to your\n// latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Int64Counter] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Int64Counter interface{ int64Counter() }\n\n// Int64Histogram is embedded in\n// [go.opentelemetry.io/otel/metric.Int64Histogram].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64Histogram] if you want\n// users to experience a compilation error, signaling they need to update to\n// your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Int64Histogram] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Int64Histogram interface{ int64Histogram() }\n\n// Int64Gauge is embedded in [go.opentelemetry.io/otel/metric.Int64Gauge].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64Gauge] if you want users to experience\n// a compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/metric.Int64Gauge]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Int64Gauge interface{ int64Gauge() }\n\n// Int64ObservableCounter is embedded in\n// [go.opentelemetry.io/otel/metric.Int64ObservableCounter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64ObservableCounter] if you\n// want users to experience a compilation error, signaling they need to update\n// to your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Int64ObservableCounter]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Int64ObservableCounter interface{ int64ObservableCounter() }\n\n// Int64ObservableGauge is embedded in\n// [go.opentelemetry.io/otel/metric.Int64ObservableGauge].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64ObservableGauge] if you\n// want users to experience a compilation error, signaling they need to update\n// to your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Int64ObservableGauge] interface\n// is extended (which is something that can happen without a major version bump\n// of the API package).\ntype Int64ObservableGauge interface{ int64ObservableGauge() }\n\n// Int64ObservableUpDownCounter is embedded in\n// [go.opentelemetry.io/otel/metric.Int64ObservableUpDownCounter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64ObservableUpDownCounter] if\n// you want users to experience a compilation error, signaling they need to\n// update to your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Int64ObservableUpDownCounter]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype Int64ObservableUpDownCounter interface{ int64ObservableUpDownCounter() }\n\n// Int64UpDownCounter is embedded in\n// [go.opentelemetry.io/otel/metric.Int64UpDownCounter].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/metric.Int64UpDownCounter] if you want\n// users to experience a compilation error, signaling they need to update to\n// your latest implementation, when the\n// [go.opentelemetry.io/otel/metric.Int64UpDownCounter] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Int64UpDownCounter interface{ int64UpDownCounter() }\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/instrument.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n\nimport \"go.opentelemetry.io/otel/attribute\"\n\n// Observable is used as a grouping mechanism for all instruments that are\n// updated within a Callback.\ntype Observable interface {\n\tobservable()\n}\n\n// InstrumentOption applies options to all instruments.\ntype InstrumentOption interface {\n\tInt64CounterOption\n\tInt64UpDownCounterOption\n\tInt64HistogramOption\n\tInt64GaugeOption\n\tInt64ObservableCounterOption\n\tInt64ObservableUpDownCounterOption\n\tInt64ObservableGaugeOption\n\n\tFloat64CounterOption\n\tFloat64UpDownCounterOption\n\tFloat64HistogramOption\n\tFloat64GaugeOption\n\tFloat64ObservableCounterOption\n\tFloat64ObservableUpDownCounterOption\n\tFloat64ObservableGaugeOption\n}\n\n// HistogramOption applies options to histogram instruments.\ntype HistogramOption interface {\n\tInt64HistogramOption\n\tFloat64HistogramOption\n}\n\ntype descOpt string\n\nfunc (o descOpt) applyFloat64Counter(c Float64CounterConfig) Float64CounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyFloat64UpDownCounter(c Float64UpDownCounterConfig) Float64UpDownCounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyFloat64Histogram(c Float64HistogramConfig) Float64HistogramConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyFloat64Gauge(c Float64GaugeConfig) Float64GaugeConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyFloat64ObservableCounter(c Float64ObservableCounterConfig) Float64ObservableCounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyFloat64ObservableUpDownCounter(c Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyFloat64ObservableGauge(c Float64ObservableGaugeConfig) Float64ObservableGaugeConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyInt64Counter(c Int64CounterConfig) Int64CounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyInt64UpDownCounter(c Int64UpDownCounterConfig) Int64UpDownCounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyInt64Histogram(c Int64HistogramConfig) Int64HistogramConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyInt64Gauge(c Int64GaugeConfig) Int64GaugeConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyInt64ObservableCounter(c Int64ObservableCounterConfig) Int64ObservableCounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyInt64ObservableUpDownCounter(c Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig {\n\tc.description = string(o)\n\treturn c\n}\n\nfunc (o descOpt) applyInt64ObservableGauge(c Int64ObservableGaugeConfig) Int64ObservableGaugeConfig {\n\tc.description = string(o)\n\treturn c\n}\n\n// WithDescription sets the instrument description.\nfunc WithDescription(desc string) InstrumentOption { return descOpt(desc) }\n\ntype unitOpt string\n\nfunc (o unitOpt) applyFloat64Counter(c Float64CounterConfig) Float64CounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyFloat64UpDownCounter(c Float64UpDownCounterConfig) Float64UpDownCounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyFloat64Histogram(c Float64HistogramConfig) Float64HistogramConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyFloat64Gauge(c Float64GaugeConfig) Float64GaugeConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyFloat64ObservableCounter(c Float64ObservableCounterConfig) Float64ObservableCounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyFloat64ObservableUpDownCounter(c Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyFloat64ObservableGauge(c Float64ObservableGaugeConfig) Float64ObservableGaugeConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyInt64Counter(c Int64CounterConfig) Int64CounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyInt64UpDownCounter(c Int64UpDownCounterConfig) Int64UpDownCounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyInt64Histogram(c Int64HistogramConfig) Int64HistogramConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyInt64Gauge(c Int64GaugeConfig) Int64GaugeConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyInt64ObservableCounter(c Int64ObservableCounterConfig) Int64ObservableCounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyInt64ObservableUpDownCounter(c Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\nfunc (o unitOpt) applyInt64ObservableGauge(c Int64ObservableGaugeConfig) Int64ObservableGaugeConfig {\n\tc.unit = string(o)\n\treturn c\n}\n\n// WithUnit sets the instrument unit.\n//\n// The unit u should be defined using the appropriate [UCUM](https://ucum.org) case-sensitive code.\nfunc WithUnit(u string) InstrumentOption { return unitOpt(u) }\n\n// WithExplicitBucketBoundaries sets the instrument explicit bucket boundaries.\n//\n// This option is considered \"advisory\", and may be ignored by API implementations.\nfunc WithExplicitBucketBoundaries(bounds ...float64) HistogramOption { return bucketOpt(bounds) }\n\ntype bucketOpt []float64\n\nfunc (o bucketOpt) applyFloat64Histogram(c Float64HistogramConfig) Float64HistogramConfig {\n\tc.explicitBucketBoundaries = o\n\treturn c\n}\n\nfunc (o bucketOpt) applyInt64Histogram(c Int64HistogramConfig) Int64HistogramConfig {\n\tc.explicitBucketBoundaries = o\n\treturn c\n}\n\n// AddOption applies options to an addition measurement. See\n// [MeasurementOption] for other options that can be used as an AddOption.\ntype AddOption interface {\n\tapplyAdd(AddConfig) AddConfig\n}\n\n// AddConfig contains options for an addition measurement.\ntype AddConfig struct {\n\tattrs attribute.Set\n}\n\n// NewAddConfig returns a new [AddConfig] with all opts applied.\nfunc NewAddConfig(opts []AddOption) AddConfig {\n\tconfig := AddConfig{attrs: *attribute.EmptySet()}\n\tfor _, o := range opts {\n\t\tconfig = o.applyAdd(config)\n\t}\n\treturn config\n}\n\n// Attributes returns the configured attribute set.\nfunc (c AddConfig) Attributes() attribute.Set {\n\treturn c.attrs\n}\n\n// RecordOption applies options to an addition measurement. See\n// [MeasurementOption] for other options that can be used as a RecordOption.\ntype RecordOption interface {\n\tapplyRecord(RecordConfig) RecordConfig\n}\n\n// RecordConfig contains options for a recorded measurement.\ntype RecordConfig struct {\n\tattrs attribute.Set\n}\n\n// NewRecordConfig returns a new [RecordConfig] with all opts applied.\nfunc NewRecordConfig(opts []RecordOption) RecordConfig {\n\tconfig := RecordConfig{attrs: *attribute.EmptySet()}\n\tfor _, o := range opts {\n\t\tconfig = o.applyRecord(config)\n\t}\n\treturn config\n}\n\n// Attributes returns the configured attribute set.\nfunc (c RecordConfig) Attributes() attribute.Set {\n\treturn c.attrs\n}\n\n// ObserveOption applies options to an addition measurement. See\n// [MeasurementOption] for other options that can be used as a ObserveOption.\ntype ObserveOption interface {\n\tapplyObserve(ObserveConfig) ObserveConfig\n}\n\n// ObserveConfig contains options for an observed measurement.\ntype ObserveConfig struct {\n\tattrs attribute.Set\n}\n\n// NewObserveConfig returns a new [ObserveConfig] with all opts applied.\nfunc NewObserveConfig(opts []ObserveOption) ObserveConfig {\n\tconfig := ObserveConfig{attrs: *attribute.EmptySet()}\n\tfor _, o := range opts {\n\t\tconfig = o.applyObserve(config)\n\t}\n\treturn config\n}\n\n// Attributes returns the configured attribute set.\nfunc (c ObserveConfig) Attributes() attribute.Set {\n\treturn c.attrs\n}\n\n// MeasurementOption applies options to all instrument measurement.\ntype MeasurementOption interface {\n\tAddOption\n\tRecordOption\n\tObserveOption\n}\n\ntype attrOpt struct {\n\tset attribute.Set\n}\n\n// mergeSets returns the union of keys between a and b. Any duplicate keys will\n// use the value associated with b.\nfunc mergeSets(a, b attribute.Set) attribute.Set {\n\t// NewMergeIterator uses the first value for any duplicates.\n\titer := attribute.NewMergeIterator(&b, &a)\n\tmerged := make([]attribute.KeyValue, 0, a.Len()+b.Len())\n\tfor iter.Next() {\n\t\tmerged = append(merged, iter.Attribute())\n\t}\n\treturn attribute.NewSet(merged...)\n}\n\nfunc (o attrOpt) applyAdd(c AddConfig) AddConfig {\n\tswitch {\n\tcase o.set.Len() == 0:\n\tcase c.attrs.Len() == 0:\n\t\tc.attrs = o.set\n\tdefault:\n\t\tc.attrs = mergeSets(c.attrs, o.set)\n\t}\n\treturn c\n}\n\nfunc (o attrOpt) applyRecord(c RecordConfig) RecordConfig {\n\tswitch {\n\tcase o.set.Len() == 0:\n\tcase c.attrs.Len() == 0:\n\t\tc.attrs = o.set\n\tdefault:\n\t\tc.attrs = mergeSets(c.attrs, o.set)\n\t}\n\treturn c\n}\n\nfunc (o attrOpt) applyObserve(c ObserveConfig) ObserveConfig {\n\tswitch {\n\tcase o.set.Len() == 0:\n\tcase c.attrs.Len() == 0:\n\t\tc.attrs = o.set\n\tdefault:\n\t\tc.attrs = mergeSets(c.attrs, o.set)\n\t}\n\treturn c\n}\n\n// WithAttributeSet sets the attribute Set associated with a measurement is\n// made with.\n//\n// If multiple WithAttributeSet or WithAttributes options are passed the\n// attributes will be merged together in the order they are passed. Attributes\n// with duplicate keys will use the last value passed.\nfunc WithAttributeSet(attributes attribute.Set) MeasurementOption {\n\treturn attrOpt{set: attributes}\n}\n\n// WithAttributes converts attributes into an attribute Set and sets the Set to\n// be associated with a measurement. This is shorthand for:\n//\n//\tcp := make([]attribute.KeyValue, len(attributes))\n//\tcopy(cp, attributes)\n//\tWithAttributeSet(attribute.NewSet(cp...))\n//\n// [attribute.NewSet] may modify the passed attributes so this will make a copy\n// of attributes before creating a set in order to ensure this function is\n// concurrent safe. This makes this option function less optimized in\n// comparison to [WithAttributeSet]. Therefore, [WithAttributeSet] should be\n// preferred for performance sensitive code.\n//\n// See [WithAttributeSet] for information about how multiple WithAttributes are\n// merged.\nfunc WithAttributes(attributes ...attribute.KeyValue) MeasurementOption {\n\tcp := make([]attribute.KeyValue, len(attributes))\n\tcopy(cp, attributes)\n\treturn attrOpt{set: attribute.NewSet(cp...)}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/meter.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/metric/embedded\"\n)\n\n// MeterProvider provides access to named Meter instances, for instrumenting\n// an application or package.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype MeterProvider interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.MeterProvider\n\n\t// Meter returns a new Meter with the provided name and configuration.\n\t//\n\t// A Meter should be scoped at most to a single package. The name needs to\n\t// be unique so it does not collide with other names used by\n\t// an application, nor other applications. To achieve this, the import path\n\t// of the instrumentation package is recommended to be used as name.\n\t//\n\t// If the name is empty, then an implementation defined default name will\n\t// be used instead.\n\tMeter(name string, opts ...MeterOption) Meter\n}\n\n// Meter provides access to instrument instances for recording metrics.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Meter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Meter\n\n\t// Int64Counter returns a new Int64Counter instrument identified by name\n\t// and configured with options. The instrument is used to synchronously\n\t// record increasing int64 measurements during a computational operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tInt64Counter(name string, options ...Int64CounterOption) (Int64Counter, error)\n\n\t// Int64UpDownCounter returns a new Int64UpDownCounter instrument\n\t// identified by name and configured with options. The instrument is used\n\t// to synchronously record int64 measurements during a computational\n\t// operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tInt64UpDownCounter(name string, options ...Int64UpDownCounterOption) (Int64UpDownCounter, error)\n\n\t// Int64Histogram returns a new Int64Histogram instrument identified by\n\t// name and configured with options. The instrument is used to\n\t// synchronously record the distribution of int64 measurements during a\n\t// computational operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tInt64Histogram(name string, options ...Int64HistogramOption) (Int64Histogram, error)\n\n\t// Int64Gauge returns a new Int64Gauge instrument identified by name and\n\t// configured with options. The instrument is used to synchronously record\n\t// instantaneous int64 measurements during a computational operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tInt64Gauge(name string, options ...Int64GaugeOption) (Int64Gauge, error)\n\n\t// Int64ObservableCounter returns a new Int64ObservableCounter identified\n\t// by name and configured with options. The instrument is used to\n\t// asynchronously record increasing int64 measurements once per a\n\t// measurement collection cycle.\n\t//\n\t// Measurements for the returned instrument are made via a callback. Use\n\t// the WithInt64Callback option to register the callback here, or use the\n\t// RegisterCallback method of this Meter to register one later. See the\n\t// Measurements section of the package documentation for more information.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tInt64ObservableCounter(name string, options ...Int64ObservableCounterOption) (Int64ObservableCounter, error)\n\n\t// Int64ObservableUpDownCounter returns a new Int64ObservableUpDownCounter\n\t// instrument identified by name and configured with options. The\n\t// instrument is used to asynchronously record int64 measurements once per\n\t// a measurement collection cycle.\n\t//\n\t// Measurements for the returned instrument are made via a callback. Use\n\t// the WithInt64Callback option to register the callback here, or use the\n\t// RegisterCallback method of this Meter to register one later. See the\n\t// Measurements section of the package documentation for more information.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tInt64ObservableUpDownCounter(name string, options ...Int64ObservableUpDownCounterOption) (Int64ObservableUpDownCounter, error)\n\n\t// Int64ObservableGauge returns a new Int64ObservableGauge instrument\n\t// identified by name and configured with options. The instrument is used\n\t// to asynchronously record instantaneous int64 measurements once per a\n\t// measurement collection cycle.\n\t//\n\t// Measurements for the returned instrument are made via a callback. Use\n\t// the WithInt64Callback option to register the callback here, or use the\n\t// RegisterCallback method of this Meter to register one later. See the\n\t// Measurements section of the package documentation for more information.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tInt64ObservableGauge(name string, options ...Int64ObservableGaugeOption) (Int64ObservableGauge, error)\n\n\t// Float64Counter returns a new Float64Counter instrument identified by\n\t// name and configured with options. The instrument is used to\n\t// synchronously record increasing float64 measurements during a\n\t// computational operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tFloat64Counter(name string, options ...Float64CounterOption) (Float64Counter, error)\n\n\t// Float64UpDownCounter returns a new Float64UpDownCounter instrument\n\t// identified by name and configured with options. The instrument is used\n\t// to synchronously record float64 measurements during a computational\n\t// operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tFloat64UpDownCounter(name string, options ...Float64UpDownCounterOption) (Float64UpDownCounter, error)\n\n\t// Float64Histogram returns a new Float64Histogram instrument identified by\n\t// name and configured with options. The instrument is used to\n\t// synchronously record the distribution of float64 measurements during a\n\t// computational operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tFloat64Histogram(name string, options ...Float64HistogramOption) (Float64Histogram, error)\n\n\t// Float64Gauge returns a new Float64Gauge instrument identified by name and\n\t// configured with options. The instrument is used to synchronously record\n\t// instantaneous float64 measurements during a computational operation.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tFloat64Gauge(name string, options ...Float64GaugeOption) (Float64Gauge, error)\n\n\t// Float64ObservableCounter returns a new Float64ObservableCounter\n\t// instrument identified by name and configured with options. The\n\t// instrument is used to asynchronously record increasing float64\n\t// measurements once per a measurement collection cycle.\n\t//\n\t// Measurements for the returned instrument are made via a callback. Use\n\t// the WithFloat64Callback option to register the callback here, or use the\n\t// RegisterCallback method of this Meter to register one later. See the\n\t// Measurements section of the package documentation for more information.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tFloat64ObservableCounter(name string, options ...Float64ObservableCounterOption) (Float64ObservableCounter, error)\n\n\t// Float64ObservableUpDownCounter returns a new\n\t// Float64ObservableUpDownCounter instrument identified by name and\n\t// configured with options. The instrument is used to asynchronously record\n\t// float64 measurements once per a measurement collection cycle.\n\t//\n\t// Measurements for the returned instrument are made via a callback. Use\n\t// the WithFloat64Callback option to register the callback here, or use the\n\t// RegisterCallback method of this Meter to register one later. See the\n\t// Measurements section of the package documentation for more information.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tFloat64ObservableUpDownCounter(name string, options ...Float64ObservableUpDownCounterOption) (Float64ObservableUpDownCounter, error)\n\n\t// Float64ObservableGauge returns a new Float64ObservableGauge instrument\n\t// identified by name and configured with options. The instrument is used\n\t// to asynchronously record instantaneous float64 measurements once per a\n\t// measurement collection cycle.\n\t//\n\t// Measurements for the returned instrument are made via a callback. Use\n\t// the WithFloat64Callback option to register the callback here, or use the\n\t// RegisterCallback method of this Meter to register one later. See the\n\t// Measurements section of the package documentation for more information.\n\t//\n\t// The name needs to conform to the OpenTelemetry instrument name syntax.\n\t// See the Instrument Name section of the package documentation for more\n\t// information.\n\tFloat64ObservableGauge(name string, options ...Float64ObservableGaugeOption) (Float64ObservableGauge, error)\n\n\t// RegisterCallback registers f to be called during the collection of a\n\t// measurement cycle.\n\t//\n\t// If Unregister of the returned Registration is called, f needs to be\n\t// unregistered and not called during collection.\n\t//\n\t// The instruments f is registered with are the only instruments that f may\n\t// observe values for.\n\t//\n\t// If no instruments are passed, f should not be registered nor called\n\t// during collection.\n\t//\n\t// The function f needs to be concurrent safe.\n\tRegisterCallback(f Callback, instruments ...Observable) (Registration, error)\n}\n\n// Callback is a function registered with a Meter that makes observations for\n// the set of instruments it is registered with. The Observer parameter is used\n// to record measurement observations for these instruments.\n//\n// The function needs to complete in a finite amount of time and the deadline\n// of the passed context is expected to be honored.\n//\n// The function needs to make unique observations across all registered\n// Callbacks. Meaning, it should not report measurements for an instrument with\n// the same attributes as another Callback will report.\n//\n// The function needs to be concurrent safe.\ntype Callback func(context.Context, Observer) error\n\n// Observer records measurements for multiple instruments in a Callback.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Observer interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Observer\n\n\t// ObserveFloat64 records the float64 value for obsrv.\n\tObserveFloat64(obsrv Float64Observable, value float64, opts ...ObserveOption)\n\n\t// ObserveInt64 records the int64 value for obsrv.\n\tObserveInt64(obsrv Int64Observable, value int64, opts ...ObserveOption)\n}\n\n// Registration is an token representing the unique registration of a callback\n// for a set of instruments with a Meter.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Registration interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Registration\n\n\t// Unregister removes the callback registration from a Meter.\n\t//\n\t// This method needs to be idempotent and concurrent safe.\n\tUnregister() error\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/syncfloat64.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/metric/embedded\"\n)\n\n// Float64Counter is an instrument that records increasing float64 values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Float64Counter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64Counter\n\n\t// Add records a change to the counter.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tAdd(ctx context.Context, incr float64, options ...AddOption)\n}\n\n// Float64CounterConfig contains options for synchronous counter instruments that\n// record float64 values.\ntype Float64CounterConfig struct {\n\tdescription string\n\tunit        string\n}\n\n// NewFloat64CounterConfig returns a new [Float64CounterConfig] with all opts\n// applied.\nfunc NewFloat64CounterConfig(opts ...Float64CounterOption) Float64CounterConfig {\n\tvar config Float64CounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyFloat64Counter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Float64CounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Float64CounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Float64CounterOption applies options to a [Float64CounterConfig]. See\n// [InstrumentOption] for other options that can be used as a\n// Float64CounterOption.\ntype Float64CounterOption interface {\n\tapplyFloat64Counter(Float64CounterConfig) Float64CounterConfig\n}\n\n// Float64UpDownCounter is an instrument that records increasing or decreasing\n// float64 values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Float64UpDownCounter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64UpDownCounter\n\n\t// Add records a change to the counter.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tAdd(ctx context.Context, incr float64, options ...AddOption)\n}\n\n// Float64UpDownCounterConfig contains options for synchronous counter\n// instruments that record float64 values.\ntype Float64UpDownCounterConfig struct {\n\tdescription string\n\tunit        string\n}\n\n// NewFloat64UpDownCounterConfig returns a new [Float64UpDownCounterConfig]\n// with all opts applied.\nfunc NewFloat64UpDownCounterConfig(opts ...Float64UpDownCounterOption) Float64UpDownCounterConfig {\n\tvar config Float64UpDownCounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyFloat64UpDownCounter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Float64UpDownCounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Float64UpDownCounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Float64UpDownCounterOption applies options to a\n// [Float64UpDownCounterConfig]. See [InstrumentOption] for other options that\n// can be used as a Float64UpDownCounterOption.\ntype Float64UpDownCounterOption interface {\n\tapplyFloat64UpDownCounter(Float64UpDownCounterConfig) Float64UpDownCounterConfig\n}\n\n// Float64Histogram is an instrument that records a distribution of float64\n// values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Float64Histogram interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64Histogram\n\n\t// Record adds an additional value to the distribution.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tRecord(ctx context.Context, incr float64, options ...RecordOption)\n}\n\n// Float64HistogramConfig contains options for synchronous histogram\n// instruments that record float64 values.\ntype Float64HistogramConfig struct {\n\tdescription              string\n\tunit                     string\n\texplicitBucketBoundaries []float64\n}\n\n// NewFloat64HistogramConfig returns a new [Float64HistogramConfig] with all\n// opts applied.\nfunc NewFloat64HistogramConfig(opts ...Float64HistogramOption) Float64HistogramConfig {\n\tvar config Float64HistogramConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyFloat64Histogram(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Float64HistogramConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Float64HistogramConfig) Unit() string {\n\treturn c.unit\n}\n\n// ExplicitBucketBoundaries returns the configured explicit bucket boundaries.\nfunc (c Float64HistogramConfig) ExplicitBucketBoundaries() []float64 {\n\treturn c.explicitBucketBoundaries\n}\n\n// Float64HistogramOption applies options to a [Float64HistogramConfig]. See\n// [InstrumentOption] for other options that can be used as a\n// Float64HistogramOption.\ntype Float64HistogramOption interface {\n\tapplyFloat64Histogram(Float64HistogramConfig) Float64HistogramConfig\n}\n\n// Float64Gauge is an instrument that records instantaneous float64 values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Float64Gauge interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Float64Gauge\n\n\t// Record records the instantaneous value.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tRecord(ctx context.Context, value float64, options ...RecordOption)\n}\n\n// Float64GaugeConfig contains options for synchronous gauge instruments that\n// record float64 values.\ntype Float64GaugeConfig struct {\n\tdescription string\n\tunit        string\n}\n\n// NewFloat64GaugeConfig returns a new [Float64GaugeConfig] with all opts\n// applied.\nfunc NewFloat64GaugeConfig(opts ...Float64GaugeOption) Float64GaugeConfig {\n\tvar config Float64GaugeConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyFloat64Gauge(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Float64GaugeConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Float64GaugeConfig) Unit() string {\n\treturn c.unit\n}\n\n// Float64GaugeOption applies options to a [Float64GaugeConfig]. See\n// [InstrumentOption] for other options that can be used as a\n// Float64GaugeOption.\ntype Float64GaugeOption interface {\n\tapplyFloat64Gauge(Float64GaugeConfig) Float64GaugeConfig\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric/syncint64.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage metric // import \"go.opentelemetry.io/otel/metric\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/metric/embedded\"\n)\n\n// Int64Counter is an instrument that records increasing int64 values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64Counter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64Counter\n\n\t// Add records a change to the counter.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tAdd(ctx context.Context, incr int64, options ...AddOption)\n}\n\n// Int64CounterConfig contains options for synchronous counter instruments that\n// record int64 values.\ntype Int64CounterConfig struct {\n\tdescription string\n\tunit        string\n}\n\n// NewInt64CounterConfig returns a new [Int64CounterConfig] with all opts\n// applied.\nfunc NewInt64CounterConfig(opts ...Int64CounterOption) Int64CounterConfig {\n\tvar config Int64CounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyInt64Counter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Int64CounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Int64CounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Int64CounterOption applies options to a [Int64CounterConfig]. See\n// [InstrumentOption] for other options that can be used as an\n// Int64CounterOption.\ntype Int64CounterOption interface {\n\tapplyInt64Counter(Int64CounterConfig) Int64CounterConfig\n}\n\n// Int64UpDownCounter is an instrument that records increasing or decreasing\n// int64 values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64UpDownCounter interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64UpDownCounter\n\n\t// Add records a change to the counter.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tAdd(ctx context.Context, incr int64, options ...AddOption)\n}\n\n// Int64UpDownCounterConfig contains options for synchronous counter\n// instruments that record int64 values.\ntype Int64UpDownCounterConfig struct {\n\tdescription string\n\tunit        string\n}\n\n// NewInt64UpDownCounterConfig returns a new [Int64UpDownCounterConfig] with\n// all opts applied.\nfunc NewInt64UpDownCounterConfig(opts ...Int64UpDownCounterOption) Int64UpDownCounterConfig {\n\tvar config Int64UpDownCounterConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyInt64UpDownCounter(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Int64UpDownCounterConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Int64UpDownCounterConfig) Unit() string {\n\treturn c.unit\n}\n\n// Int64UpDownCounterOption applies options to a [Int64UpDownCounterConfig].\n// See [InstrumentOption] for other options that can be used as an\n// Int64UpDownCounterOption.\ntype Int64UpDownCounterOption interface {\n\tapplyInt64UpDownCounter(Int64UpDownCounterConfig) Int64UpDownCounterConfig\n}\n\n// Int64Histogram is an instrument that records a distribution of int64\n// values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64Histogram interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64Histogram\n\n\t// Record adds an additional value to the distribution.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tRecord(ctx context.Context, incr int64, options ...RecordOption)\n}\n\n// Int64HistogramConfig contains options for synchronous histogram instruments\n// that record int64 values.\ntype Int64HistogramConfig struct {\n\tdescription              string\n\tunit                     string\n\texplicitBucketBoundaries []float64\n}\n\n// NewInt64HistogramConfig returns a new [Int64HistogramConfig] with all opts\n// applied.\nfunc NewInt64HistogramConfig(opts ...Int64HistogramOption) Int64HistogramConfig {\n\tvar config Int64HistogramConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyInt64Histogram(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Int64HistogramConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Int64HistogramConfig) Unit() string {\n\treturn c.unit\n}\n\n// ExplicitBucketBoundaries returns the configured explicit bucket boundaries.\nfunc (c Int64HistogramConfig) ExplicitBucketBoundaries() []float64 {\n\treturn c.explicitBucketBoundaries\n}\n\n// Int64HistogramOption applies options to a [Int64HistogramConfig]. See\n// [InstrumentOption] for other options that can be used as an\n// Int64HistogramOption.\ntype Int64HistogramOption interface {\n\tapplyInt64Histogram(Int64HistogramConfig) Int64HistogramConfig\n}\n\n// Int64Gauge is an instrument that records instantaneous int64 values.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Int64Gauge interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Int64Gauge\n\n\t// Record records the instantaneous value.\n\t//\n\t// Use the WithAttributeSet (or, if performance is not a concern,\n\t// the WithAttributes) option to include measurement attributes.\n\tRecord(ctx context.Context, value int64, options ...RecordOption)\n}\n\n// Int64GaugeConfig contains options for synchronous gauge instruments that\n// record int64 values.\ntype Int64GaugeConfig struct {\n\tdescription string\n\tunit        string\n}\n\n// NewInt64GaugeConfig returns a new [Int64GaugeConfig] with all opts\n// applied.\nfunc NewInt64GaugeConfig(opts ...Int64GaugeOption) Int64GaugeConfig {\n\tvar config Int64GaugeConfig\n\tfor _, o := range opts {\n\t\tconfig = o.applyInt64Gauge(config)\n\t}\n\treturn config\n}\n\n// Description returns the configured description.\nfunc (c Int64GaugeConfig) Description() string {\n\treturn c.description\n}\n\n// Unit returns the configured unit.\nfunc (c Int64GaugeConfig) Unit() string {\n\treturn c.unit\n}\n\n// Int64GaugeOption applies options to a [Int64GaugeConfig]. See\n// [InstrumentOption] for other options that can be used as a\n// Int64GaugeOption.\ntype Int64GaugeOption interface {\n\tapplyInt64Gauge(Int64GaugeConfig) Int64GaugeConfig\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/metric.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage otel // import \"go.opentelemetry.io/otel\"\n\nimport (\n\t\"go.opentelemetry.io/otel/internal/global\"\n\t\"go.opentelemetry.io/otel/metric\"\n)\n\n// Meter returns a Meter from the global MeterProvider. The name must be the\n// name of the library providing instrumentation. This name may be the same as\n// the instrumented code only if that code provides built-in instrumentation.\n// If the name is empty, then a implementation defined default name will be\n// used instead.\n//\n// If this is called before a global MeterProvider is registered the returned\n// Meter will be a No-op implementation of a Meter. When a global MeterProvider\n// is registered for the first time, the returned Meter, and all the\n// instruments it has created or will create, are recreated automatically from\n// the new MeterProvider.\n//\n// This is short for GetMeterProvider().Meter(name).\nfunc Meter(name string, opts ...metric.MeterOption) metric.Meter {\n\treturn GetMeterProvider().Meter(name, opts...)\n}\n\n// GetMeterProvider returns the registered global meter provider.\n//\n// If no global GetMeterProvider has been registered, a No-op GetMeterProvider\n// implementation is returned. When a global GetMeterProvider is registered for\n// the first time, the returned GetMeterProvider, and all the Meters it has\n// created or will create, are recreated automatically from the new\n// GetMeterProvider.\nfunc GetMeterProvider() metric.MeterProvider {\n\treturn global.MeterProvider()\n}\n\n// SetMeterProvider registers mp as the global MeterProvider.\nfunc SetMeterProvider(mp metric.MeterProvider) {\n\tglobal.SetMeterProvider(mp)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/propagation/README.md",
    "content": "# Propagation\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/propagation)](https://pkg.go.dev/go.opentelemetry.io/otel/propagation)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/propagation/baggage.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage propagation // import \"go.opentelemetry.io/otel/propagation\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/baggage\"\n)\n\nconst baggageHeader = \"baggage\"\n\n// Baggage is a propagator that supports the W3C Baggage format.\n//\n// This propagates user-defined baggage associated with a trace. The complete\n// specification is defined at https://www.w3.org/TR/baggage/.\ntype Baggage struct{}\n\nvar _ TextMapPropagator = Baggage{}\n\n// Inject sets baggage key-values from ctx into the carrier.\nfunc (b Baggage) Inject(ctx context.Context, carrier TextMapCarrier) {\n\tbStr := baggage.FromContext(ctx).String()\n\tif bStr != \"\" {\n\t\tcarrier.Set(baggageHeader, bStr)\n\t}\n}\n\n// Extract returns a copy of parent with the baggage from the carrier added.\nfunc (b Baggage) Extract(parent context.Context, carrier TextMapCarrier) context.Context {\n\tbStr := carrier.Get(baggageHeader)\n\tif bStr == \"\" {\n\t\treturn parent\n\t}\n\n\tbag, err := baggage.Parse(bStr)\n\tif err != nil {\n\t\treturn parent\n\t}\n\treturn baggage.ContextWithBaggage(parent, bag)\n}\n\n// Fields returns the keys who's values are set with Inject.\nfunc (b Baggage) Fields() []string {\n\treturn []string{baggageHeader}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/propagation/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage propagation contains OpenTelemetry context propagators.\n\nOpenTelemetry propagators are used to extract and inject context data from and\ninto messages exchanged by applications. The propagator supported by this\npackage is the W3C Trace Context encoding\n(https://www.w3.org/TR/trace-context/), and W3C Baggage\n(https://www.w3.org/TR/baggage/).\n*/\npackage propagation // import \"go.opentelemetry.io/otel/propagation\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/propagation/propagation.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage propagation // import \"go.opentelemetry.io/otel/propagation\"\n\nimport (\n\t\"context\"\n\t\"net/http\"\n)\n\n// TextMapCarrier is the storage medium used by a TextMapPropagator.\ntype TextMapCarrier interface {\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n\n\t// Get returns the value associated with the passed key.\n\tGet(key string) string\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n\n\t// Set stores the key-value pair.\n\tSet(key string, value string)\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n\n\t// Keys lists the keys stored in this carrier.\n\tKeys() []string\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n}\n\n// MapCarrier is a TextMapCarrier that uses a map held in memory as a storage\n// medium for propagated key-value pairs.\ntype MapCarrier map[string]string\n\n// Compile time check that MapCarrier implements the TextMapCarrier.\nvar _ TextMapCarrier = MapCarrier{}\n\n// Get returns the value associated with the passed key.\nfunc (c MapCarrier) Get(key string) string {\n\treturn c[key]\n}\n\n// Set stores the key-value pair.\nfunc (c MapCarrier) Set(key, value string) {\n\tc[key] = value\n}\n\n// Keys lists the keys stored in this carrier.\nfunc (c MapCarrier) Keys() []string {\n\tkeys := make([]string, 0, len(c))\n\tfor k := range c {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n\n// HeaderCarrier adapts http.Header to satisfy the TextMapCarrier interface.\ntype HeaderCarrier http.Header\n\n// Get returns the value associated with the passed key.\nfunc (hc HeaderCarrier) Get(key string) string {\n\treturn http.Header(hc).Get(key)\n}\n\n// Set stores the key-value pair.\nfunc (hc HeaderCarrier) Set(key string, value string) {\n\thttp.Header(hc).Set(key, value)\n}\n\n// Keys lists the keys stored in this carrier.\nfunc (hc HeaderCarrier) Keys() []string {\n\tkeys := make([]string, 0, len(hc))\n\tfor k := range hc {\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys\n}\n\n// TextMapPropagator propagates cross-cutting concerns as key-value text\n// pairs within a carrier that travels in-band across process boundaries.\ntype TextMapPropagator interface {\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n\n\t// Inject set cross-cutting concerns from the Context into the carrier.\n\tInject(ctx context.Context, carrier TextMapCarrier)\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n\n\t// Extract reads cross-cutting concerns from the carrier into a Context.\n\tExtract(ctx context.Context, carrier TextMapCarrier) context.Context\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n\n\t// Fields returns the keys whose values are set with Inject.\n\tFields() []string\n\t// DO NOT CHANGE: any modification will not be backwards compatible and\n\t// must never be done outside of a new major release.\n}\n\ntype compositeTextMapPropagator []TextMapPropagator\n\nfunc (p compositeTextMapPropagator) Inject(ctx context.Context, carrier TextMapCarrier) {\n\tfor _, i := range p {\n\t\ti.Inject(ctx, carrier)\n\t}\n}\n\nfunc (p compositeTextMapPropagator) Extract(ctx context.Context, carrier TextMapCarrier) context.Context {\n\tfor _, i := range p {\n\t\tctx = i.Extract(ctx, carrier)\n\t}\n\treturn ctx\n}\n\nfunc (p compositeTextMapPropagator) Fields() []string {\n\tunique := make(map[string]struct{})\n\tfor _, i := range p {\n\t\tfor _, k := range i.Fields() {\n\t\t\tunique[k] = struct{}{}\n\t\t}\n\t}\n\n\tfields := make([]string, 0, len(unique))\n\tfor k := range unique {\n\t\tfields = append(fields, k)\n\t}\n\treturn fields\n}\n\n// NewCompositeTextMapPropagator returns a unified TextMapPropagator from the\n// group of passed TextMapPropagator. This allows different cross-cutting\n// concerns to be propagates in a unified manner.\n//\n// The returned TextMapPropagator will inject and extract cross-cutting\n// concerns in the order the TextMapPropagators were provided. Additionally,\n// the Fields method will return a de-duplicated slice of the keys that are\n// set with the Inject method.\nfunc NewCompositeTextMapPropagator(p ...TextMapPropagator) TextMapPropagator {\n\treturn compositeTextMapPropagator(p)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/propagation/trace_context.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage propagation // import \"go.opentelemetry.io/otel/propagation\"\n\nimport (\n\t\"context\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\nconst (\n\tsupportedVersion  = 0\n\tmaxVersion        = 254\n\ttraceparentHeader = \"traceparent\"\n\ttracestateHeader  = \"tracestate\"\n\tdelimiter         = \"-\"\n)\n\n// TraceContext is a propagator that supports the W3C Trace Context format\n// (https://www.w3.org/TR/trace-context/)\n//\n// This propagator will propagate the traceparent and tracestate headers to\n// guarantee traces are not broken. It is up to the users of this propagator\n// to choose if they want to participate in a trace by modifying the\n// traceparent header and relevant parts of the tracestate header containing\n// their proprietary information.\ntype TraceContext struct{}\n\nvar (\n\t_           TextMapPropagator = TraceContext{}\n\tversionPart                   = fmt.Sprintf(\"%.2X\", supportedVersion)\n)\n\n// Inject injects the trace context from ctx into carrier.\nfunc (tc TraceContext) Inject(ctx context.Context, carrier TextMapCarrier) {\n\tsc := trace.SpanContextFromContext(ctx)\n\tif !sc.IsValid() {\n\t\treturn\n\t}\n\n\tif ts := sc.TraceState().String(); ts != \"\" {\n\t\tcarrier.Set(tracestateHeader, ts)\n\t}\n\n\t// Clear all flags other than the trace-context supported sampling bit.\n\tflags := sc.TraceFlags() & trace.FlagsSampled\n\n\tvar sb strings.Builder\n\tsb.Grow(2 + 32 + 16 + 2 + 3)\n\t_, _ = sb.WriteString(versionPart)\n\ttraceID := sc.TraceID()\n\tspanID := sc.SpanID()\n\tflagByte := [1]byte{byte(flags)}\n\tvar buf [32]byte\n\tfor _, src := range [][]byte{traceID[:], spanID[:], flagByte[:]} {\n\t\t_ = sb.WriteByte(delimiter[0])\n\t\tn := hex.Encode(buf[:], src)\n\t\t_, _ = sb.Write(buf[:n])\n\t}\n\tcarrier.Set(traceparentHeader, sb.String())\n}\n\n// Extract reads tracecontext from the carrier into a returned Context.\n//\n// The returned Context will be a copy of ctx and contain the extracted\n// tracecontext as the remote SpanContext. If the extracted tracecontext is\n// invalid, the passed ctx will be returned directly instead.\nfunc (tc TraceContext) Extract(ctx context.Context, carrier TextMapCarrier) context.Context {\n\tsc := tc.extract(carrier)\n\tif !sc.IsValid() {\n\t\treturn ctx\n\t}\n\treturn trace.ContextWithRemoteSpanContext(ctx, sc)\n}\n\nfunc (tc TraceContext) extract(carrier TextMapCarrier) trace.SpanContext {\n\th := carrier.Get(traceparentHeader)\n\tif h == \"\" {\n\t\treturn trace.SpanContext{}\n\t}\n\n\tvar ver [1]byte\n\tif !extractPart(ver[:], &h, 2) {\n\t\treturn trace.SpanContext{}\n\t}\n\tversion := int(ver[0])\n\tif version > maxVersion {\n\t\treturn trace.SpanContext{}\n\t}\n\n\tvar scc trace.SpanContextConfig\n\tif !extractPart(scc.TraceID[:], &h, 32) {\n\t\treturn trace.SpanContext{}\n\t}\n\tif !extractPart(scc.SpanID[:], &h, 16) {\n\t\treturn trace.SpanContext{}\n\t}\n\n\tvar opts [1]byte\n\tif !extractPart(opts[:], &h, 2) {\n\t\treturn trace.SpanContext{}\n\t}\n\tif version == 0 && (h != \"\" || opts[0] > 2) {\n\t\t// version 0 not allow extra\n\t\t// version 0 not allow other flag\n\t\treturn trace.SpanContext{}\n\t}\n\n\t// Clear all flags other than the trace-context supported sampling bit.\n\tscc.TraceFlags = trace.TraceFlags(opts[0]) & trace.FlagsSampled\n\n\t// Ignore the error returned here. Failure to parse tracestate MUST NOT\n\t// affect the parsing of traceparent according to the W3C tracecontext\n\t// specification.\n\tscc.TraceState, _ = trace.ParseTraceState(carrier.Get(tracestateHeader))\n\tscc.Remote = true\n\n\tsc := trace.NewSpanContext(scc)\n\tif !sc.IsValid() {\n\t\treturn trace.SpanContext{}\n\t}\n\n\treturn sc\n}\n\n// upperHex detect hex is upper case Unicode characters.\nfunc upperHex(v string) bool {\n\tfor _, c := range v {\n\t\tif c >= 'A' && c <= 'F' {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc extractPart(dst []byte, h *string, n int) bool {\n\tpart, left, _ := strings.Cut(*h, delimiter)\n\t*h = left\n\t// hex.Decode decodes unsupported upper-case characters, so exclude explicitly.\n\tif len(part) != n || upperHex(part) {\n\t\treturn false\n\t}\n\tif p, err := hex.Decode(dst, []byte(part)); err != nil || p != n/2 {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Fields returns the keys who's values are set with Inject.\nfunc (tc TraceContext) Fields() []string {\n\treturn []string{traceparentHeader, tracestateHeader}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/propagation.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage otel // import \"go.opentelemetry.io/otel\"\n\nimport (\n\t\"go.opentelemetry.io/otel/internal/global\"\n\t\"go.opentelemetry.io/otel/propagation\"\n)\n\n// GetTextMapPropagator returns the global TextMapPropagator. If none has been\n// set, a No-Op TextMapPropagator is returned.\nfunc GetTextMapPropagator() propagation.TextMapPropagator {\n\treturn global.TextMapPropagator()\n}\n\n// SetTextMapPropagator sets propagator as the global TextMapPropagator.\nfunc SetTextMapPropagator(propagator propagation.TextMapPropagator) {\n\tglobal.SetTextMapPropagator(propagator)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/renovate.json",
    "content": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:best-practices\"\n  ],\n  \"ignorePaths\": [],\n  \"labels\": [\"Skip Changelog\", \"dependencies\"],\n  \"postUpdateOptions\" : [\n    \"gomodTidy\"\n  ],\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"gomod\"],\n      \"matchDepTypes\": [\"indirect\"],\n      \"enabled\": true\n    },\n    {\n      \"matchPackageNames\": [\"go.opentelemetry.io/build-tools/**\"],\n      \"groupName\": \"build-tools\"\n    },\n    {\n      \"matchPackageNames\": [\"google.golang.org/genproto/googleapis/**\"],\n      \"groupName\": \"googleapis\"\n    },\n    {\n      \"matchPackageNames\": [\"golang.org/x/**\"],\n      \"groupName\": \"golang.org/x\"\n    }\n  ]\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/requirements.txt",
    "content": "codespell==2.4.1\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/README.md",
    "content": "# Semconv v1.20.0\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.20.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.20.0)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/attribute_group.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Code generated from semantic convention specification. DO NOT EDIT.\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\nimport \"go.opentelemetry.io/otel/attribute\"\n\n// Describes HTTP attributes.\nconst (\n\t// HTTPMethodKey is the attribute Key conforming to the \"http.method\"\n\t// semantic conventions. It represents the hTTP request method.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'GET', 'POST', 'HEAD'\n\tHTTPMethodKey = attribute.Key(\"http.method\")\n\n\t// HTTPStatusCodeKey is the attribute Key conforming to the\n\t// \"http.status_code\" semantic conventions. It represents the [HTTP\n\t// response status code](https://tools.ietf.org/html/rfc7231#section-6).\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (If and only if one was\n\t// received/sent.)\n\t// Stability: stable\n\t// Examples: 200\n\tHTTPStatusCodeKey = attribute.Key(\"http.status_code\")\n)\n\n// HTTPMethod returns an attribute KeyValue conforming to the \"http.method\"\n// semantic conventions. It represents the hTTP request method.\nfunc HTTPMethod(val string) attribute.KeyValue {\n\treturn HTTPMethodKey.String(val)\n}\n\n// HTTPStatusCode returns an attribute KeyValue conforming to the\n// \"http.status_code\" semantic conventions. It represents the [HTTP response\n// status code](https://tools.ietf.org/html/rfc7231#section-6).\nfunc HTTPStatusCode(val int) attribute.KeyValue {\n\treturn HTTPStatusCodeKey.Int(val)\n}\n\n// HTTP Server spans attributes\nconst (\n\t// HTTPSchemeKey is the attribute Key conforming to the \"http.scheme\"\n\t// semantic conventions. It represents the URI scheme identifying the used\n\t// protocol.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'http', 'https'\n\tHTTPSchemeKey = attribute.Key(\"http.scheme\")\n\n\t// HTTPRouteKey is the attribute Key conforming to the \"http.route\"\n\t// semantic conventions. It represents the matched route (path template in\n\t// the format used by the respective server framework). See note below\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (If and only if it's available)\n\t// Stability: stable\n\t// Examples: '/users/:userID?', '{controller}/{action}/{id?}'\n\t// Note: MUST NOT be populated when this is not supported by the HTTP\n\t// server framework as the route attribute should have low-cardinality and\n\t// the URI path can NOT substitute it.\n\t// SHOULD include the [application\n\t// root](/specification/trace/semantic_conventions/http.md#http-server-definitions)\n\t// if there is one.\n\tHTTPRouteKey = attribute.Key(\"http.route\")\n)\n\n// HTTPScheme returns an attribute KeyValue conforming to the \"http.scheme\"\n// semantic conventions. It represents the URI scheme identifying the used\n// protocol.\nfunc HTTPScheme(val string) attribute.KeyValue {\n\treturn HTTPSchemeKey.String(val)\n}\n\n// HTTPRoute returns an attribute KeyValue conforming to the \"http.route\"\n// semantic conventions. It represents the matched route (path template in the\n// format used by the respective server framework). See note below\nfunc HTTPRoute(val string) attribute.KeyValue {\n\treturn HTTPRouteKey.String(val)\n}\n\n// Attributes for Events represented using Log Records.\nconst (\n\t// EventNameKey is the attribute Key conforming to the \"event.name\"\n\t// semantic conventions. It represents the name identifies the event.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'click', 'exception'\n\tEventNameKey = attribute.Key(\"event.name\")\n\n\t// EventDomainKey is the attribute Key conforming to the \"event.domain\"\n\t// semantic conventions. It represents the domain identifies the business\n\t// context for the events.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Note: Events across different domains may have same `event.name`, yet be\n\t// unrelated events.\n\tEventDomainKey = attribute.Key(\"event.domain\")\n)\n\nvar (\n\t// Events from browser apps\n\tEventDomainBrowser = EventDomainKey.String(\"browser\")\n\t// Events from mobile apps\n\tEventDomainDevice = EventDomainKey.String(\"device\")\n\t// Events from Kubernetes\n\tEventDomainK8S = EventDomainKey.String(\"k8s\")\n)\n\n// EventName returns an attribute KeyValue conforming to the \"event.name\"\n// semantic conventions. It represents the name identifies the event.\nfunc EventName(val string) attribute.KeyValue {\n\treturn EventNameKey.String(val)\n}\n\n// These attributes may be used for any network related operation.\nconst (\n\t// NetTransportKey is the attribute Key conforming to the \"net.transport\"\n\t// semantic conventions. It represents the transport protocol used. See\n\t// note below.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tNetTransportKey = attribute.Key(\"net.transport\")\n\n\t// NetProtocolNameKey is the attribute Key conforming to the\n\t// \"net.protocol.name\" semantic conventions. It represents the application\n\t// layer protocol used. The value SHOULD be normalized to lowercase.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'amqp', 'http', 'mqtt'\n\tNetProtocolNameKey = attribute.Key(\"net.protocol.name\")\n\n\t// NetProtocolVersionKey is the attribute Key conforming to the\n\t// \"net.protocol.version\" semantic conventions. It represents the version\n\t// of the application layer protocol used. See note below.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '3.1.1'\n\t// Note: `net.protocol.version` refers to the version of the protocol used\n\t// and might be different from the protocol client's version. If the HTTP\n\t// client used has a version of `0.27.2`, but sends HTTP version `1.1`,\n\t// this attribute should be set to `1.1`.\n\tNetProtocolVersionKey = attribute.Key(\"net.protocol.version\")\n\n\t// NetSockPeerNameKey is the attribute Key conforming to the\n\t// \"net.sock.peer.name\" semantic conventions. It represents the remote\n\t// socket peer name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended (If available and different from\n\t// `net.peer.name` and if `net.sock.peer.addr` is set.)\n\t// Stability: stable\n\t// Examples: 'proxy.example.com'\n\tNetSockPeerNameKey = attribute.Key(\"net.sock.peer.name\")\n\n\t// NetSockPeerAddrKey is the attribute Key conforming to the\n\t// \"net.sock.peer.addr\" semantic conventions. It represents the remote\n\t// socket peer address: IPv4 or IPv6 for internet protocols, path for local\n\t// communication,\n\t// [etc](https://man7.org/linux/man-pages/man7/address_families.7.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '127.0.0.1', '/tmp/mysql.sock'\n\tNetSockPeerAddrKey = attribute.Key(\"net.sock.peer.addr\")\n\n\t// NetSockPeerPortKey is the attribute Key conforming to the\n\t// \"net.sock.peer.port\" semantic conventions. It represents the remote\n\t// socket peer port.\n\t//\n\t// Type: int\n\t// RequirementLevel: Recommended (If defined for the address family and if\n\t// different than `net.peer.port` and if `net.sock.peer.addr` is set.)\n\t// Stability: stable\n\t// Examples: 16456\n\tNetSockPeerPortKey = attribute.Key(\"net.sock.peer.port\")\n\n\t// NetSockFamilyKey is the attribute Key conforming to the\n\t// \"net.sock.family\" semantic conventions. It represents the protocol\n\t// [address\n\t// family](https://man7.org/linux/man-pages/man7/address_families.7.html)\n\t// which is used for communication.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: ConditionallyRequired (If different than `inet` and if\n\t// any of `net.sock.peer.addr` or `net.sock.host.addr` are set. Consumers\n\t// of telemetry SHOULD accept both IPv4 and IPv6 formats for the address in\n\t// `net.sock.peer.addr` if `net.sock.family` is not set. This is to support\n\t// instrumentations that follow previous versions of this document.)\n\t// Stability: stable\n\t// Examples: 'inet6', 'bluetooth'\n\tNetSockFamilyKey = attribute.Key(\"net.sock.family\")\n\n\t// NetPeerNameKey is the attribute Key conforming to the \"net.peer.name\"\n\t// semantic conventions. It represents the logical remote hostname, see\n\t// note below.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'example.com'\n\t// Note: `net.peer.name` SHOULD NOT be set if capturing it would require an\n\t// extra DNS lookup.\n\tNetPeerNameKey = attribute.Key(\"net.peer.name\")\n\n\t// NetPeerPortKey is the attribute Key conforming to the \"net.peer.port\"\n\t// semantic conventions. It represents the logical remote port number\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 80, 8080, 443\n\tNetPeerPortKey = attribute.Key(\"net.peer.port\")\n\n\t// NetHostNameKey is the attribute Key conforming to the \"net.host.name\"\n\t// semantic conventions. It represents the logical local hostname or\n\t// similar, see note below.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'localhost'\n\tNetHostNameKey = attribute.Key(\"net.host.name\")\n\n\t// NetHostPortKey is the attribute Key conforming to the \"net.host.port\"\n\t// semantic conventions. It represents the logical local port number,\n\t// preferably the one that the peer used to connect\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 8080\n\tNetHostPortKey = attribute.Key(\"net.host.port\")\n\n\t// NetSockHostAddrKey is the attribute Key conforming to the\n\t// \"net.sock.host.addr\" semantic conventions. It represents the local\n\t// socket address. Useful in case of a multi-IP host.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '192.168.0.1'\n\tNetSockHostAddrKey = attribute.Key(\"net.sock.host.addr\")\n\n\t// NetSockHostPortKey is the attribute Key conforming to the\n\t// \"net.sock.host.port\" semantic conventions. It represents the local\n\t// socket port number.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (If defined for the address\n\t// family and if different than `net.host.port` and if `net.sock.host.addr`\n\t// is set. In other cases, it is still recommended to set this.)\n\t// Stability: stable\n\t// Examples: 35555\n\tNetSockHostPortKey = attribute.Key(\"net.sock.host.port\")\n)\n\nvar (\n\t// ip_tcp\n\tNetTransportTCP = NetTransportKey.String(\"ip_tcp\")\n\t// ip_udp\n\tNetTransportUDP = NetTransportKey.String(\"ip_udp\")\n\t// Named or anonymous pipe. See note below\n\tNetTransportPipe = NetTransportKey.String(\"pipe\")\n\t// In-process communication\n\tNetTransportInProc = NetTransportKey.String(\"inproc\")\n\t// Something else (non IP-based)\n\tNetTransportOther = NetTransportKey.String(\"other\")\n)\n\nvar (\n\t// IPv4 address\n\tNetSockFamilyInet = NetSockFamilyKey.String(\"inet\")\n\t// IPv6 address\n\tNetSockFamilyInet6 = NetSockFamilyKey.String(\"inet6\")\n\t// Unix domain socket path\n\tNetSockFamilyUnix = NetSockFamilyKey.String(\"unix\")\n)\n\n// NetProtocolName returns an attribute KeyValue conforming to the\n// \"net.protocol.name\" semantic conventions. It represents the application\n// layer protocol used. The value SHOULD be normalized to lowercase.\nfunc NetProtocolName(val string) attribute.KeyValue {\n\treturn NetProtocolNameKey.String(val)\n}\n\n// NetProtocolVersion returns an attribute KeyValue conforming to the\n// \"net.protocol.version\" semantic conventions. It represents the version of\n// the application layer protocol used. See note below.\nfunc NetProtocolVersion(val string) attribute.KeyValue {\n\treturn NetProtocolVersionKey.String(val)\n}\n\n// NetSockPeerName returns an attribute KeyValue conforming to the\n// \"net.sock.peer.name\" semantic conventions. It represents the remote socket\n// peer name.\nfunc NetSockPeerName(val string) attribute.KeyValue {\n\treturn NetSockPeerNameKey.String(val)\n}\n\n// NetSockPeerAddr returns an attribute KeyValue conforming to the\n// \"net.sock.peer.addr\" semantic conventions. It represents the remote socket\n// peer address: IPv4 or IPv6 for internet protocols, path for local\n// communication,\n// [etc](https://man7.org/linux/man-pages/man7/address_families.7.html).\nfunc NetSockPeerAddr(val string) attribute.KeyValue {\n\treturn NetSockPeerAddrKey.String(val)\n}\n\n// NetSockPeerPort returns an attribute KeyValue conforming to the\n// \"net.sock.peer.port\" semantic conventions. It represents the remote socket\n// peer port.\nfunc NetSockPeerPort(val int) attribute.KeyValue {\n\treturn NetSockPeerPortKey.Int(val)\n}\n\n// NetPeerName returns an attribute KeyValue conforming to the\n// \"net.peer.name\" semantic conventions. It represents the logical remote\n// hostname, see note below.\nfunc NetPeerName(val string) attribute.KeyValue {\n\treturn NetPeerNameKey.String(val)\n}\n\n// NetPeerPort returns an attribute KeyValue conforming to the\n// \"net.peer.port\" semantic conventions. It represents the logical remote port\n// number\nfunc NetPeerPort(val int) attribute.KeyValue {\n\treturn NetPeerPortKey.Int(val)\n}\n\n// NetHostName returns an attribute KeyValue conforming to the\n// \"net.host.name\" semantic conventions. It represents the logical local\n// hostname or similar, see note below.\nfunc NetHostName(val string) attribute.KeyValue {\n\treturn NetHostNameKey.String(val)\n}\n\n// NetHostPort returns an attribute KeyValue conforming to the\n// \"net.host.port\" semantic conventions. It represents the logical local port\n// number, preferably the one that the peer used to connect\nfunc NetHostPort(val int) attribute.KeyValue {\n\treturn NetHostPortKey.Int(val)\n}\n\n// NetSockHostAddr returns an attribute KeyValue conforming to the\n// \"net.sock.host.addr\" semantic conventions. It represents the local socket\n// address. Useful in case of a multi-IP host.\nfunc NetSockHostAddr(val string) attribute.KeyValue {\n\treturn NetSockHostAddrKey.String(val)\n}\n\n// NetSockHostPort returns an attribute KeyValue conforming to the\n// \"net.sock.host.port\" semantic conventions. It represents the local socket\n// port number.\nfunc NetSockHostPort(val int) attribute.KeyValue {\n\treturn NetSockHostPortKey.Int(val)\n}\n\n// These attributes may be used for any network related operation.\nconst (\n\t// NetHostConnectionTypeKey is the attribute Key conforming to the\n\t// \"net.host.connection.type\" semantic conventions. It represents the\n\t// internet connection type currently being used by the host.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'wifi'\n\tNetHostConnectionTypeKey = attribute.Key(\"net.host.connection.type\")\n\n\t// NetHostConnectionSubtypeKey is the attribute Key conforming to the\n\t// \"net.host.connection.subtype\" semantic conventions. It represents the\n\t// this describes more details regarding the connection.type. It may be the\n\t// type of cell technology connection, but it could be used for describing\n\t// details about a wifi connection.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'LTE'\n\tNetHostConnectionSubtypeKey = attribute.Key(\"net.host.connection.subtype\")\n\n\t// NetHostCarrierNameKey is the attribute Key conforming to the\n\t// \"net.host.carrier.name\" semantic conventions. It represents the name of\n\t// the mobile carrier.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'sprint'\n\tNetHostCarrierNameKey = attribute.Key(\"net.host.carrier.name\")\n\n\t// NetHostCarrierMccKey is the attribute Key conforming to the\n\t// \"net.host.carrier.mcc\" semantic conventions. It represents the mobile\n\t// carrier country code.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '310'\n\tNetHostCarrierMccKey = attribute.Key(\"net.host.carrier.mcc\")\n\n\t// NetHostCarrierMncKey is the attribute Key conforming to the\n\t// \"net.host.carrier.mnc\" semantic conventions. It represents the mobile\n\t// carrier network code.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '001'\n\tNetHostCarrierMncKey = attribute.Key(\"net.host.carrier.mnc\")\n\n\t// NetHostCarrierIccKey is the attribute Key conforming to the\n\t// \"net.host.carrier.icc\" semantic conventions. It represents the ISO\n\t// 3166-1 alpha-2 2-character country code associated with the mobile\n\t// carrier network.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'DE'\n\tNetHostCarrierIccKey = attribute.Key(\"net.host.carrier.icc\")\n)\n\nvar (\n\t// wifi\n\tNetHostConnectionTypeWifi = NetHostConnectionTypeKey.String(\"wifi\")\n\t// wired\n\tNetHostConnectionTypeWired = NetHostConnectionTypeKey.String(\"wired\")\n\t// cell\n\tNetHostConnectionTypeCell = NetHostConnectionTypeKey.String(\"cell\")\n\t// unavailable\n\tNetHostConnectionTypeUnavailable = NetHostConnectionTypeKey.String(\"unavailable\")\n\t// unknown\n\tNetHostConnectionTypeUnknown = NetHostConnectionTypeKey.String(\"unknown\")\n)\n\nvar (\n\t// GPRS\n\tNetHostConnectionSubtypeGprs = NetHostConnectionSubtypeKey.String(\"gprs\")\n\t// EDGE\n\tNetHostConnectionSubtypeEdge = NetHostConnectionSubtypeKey.String(\"edge\")\n\t// UMTS\n\tNetHostConnectionSubtypeUmts = NetHostConnectionSubtypeKey.String(\"umts\")\n\t// CDMA\n\tNetHostConnectionSubtypeCdma = NetHostConnectionSubtypeKey.String(\"cdma\")\n\t// EVDO Rel. 0\n\tNetHostConnectionSubtypeEvdo0 = NetHostConnectionSubtypeKey.String(\"evdo_0\")\n\t// EVDO Rev. A\n\tNetHostConnectionSubtypeEvdoA = NetHostConnectionSubtypeKey.String(\"evdo_a\")\n\t// CDMA2000 1XRTT\n\tNetHostConnectionSubtypeCdma20001xrtt = NetHostConnectionSubtypeKey.String(\"cdma2000_1xrtt\")\n\t// HSDPA\n\tNetHostConnectionSubtypeHsdpa = NetHostConnectionSubtypeKey.String(\"hsdpa\")\n\t// HSUPA\n\tNetHostConnectionSubtypeHsupa = NetHostConnectionSubtypeKey.String(\"hsupa\")\n\t// HSPA\n\tNetHostConnectionSubtypeHspa = NetHostConnectionSubtypeKey.String(\"hspa\")\n\t// IDEN\n\tNetHostConnectionSubtypeIden = NetHostConnectionSubtypeKey.String(\"iden\")\n\t// EVDO Rev. B\n\tNetHostConnectionSubtypeEvdoB = NetHostConnectionSubtypeKey.String(\"evdo_b\")\n\t// LTE\n\tNetHostConnectionSubtypeLte = NetHostConnectionSubtypeKey.String(\"lte\")\n\t// EHRPD\n\tNetHostConnectionSubtypeEhrpd = NetHostConnectionSubtypeKey.String(\"ehrpd\")\n\t// HSPAP\n\tNetHostConnectionSubtypeHspap = NetHostConnectionSubtypeKey.String(\"hspap\")\n\t// GSM\n\tNetHostConnectionSubtypeGsm = NetHostConnectionSubtypeKey.String(\"gsm\")\n\t// TD-SCDMA\n\tNetHostConnectionSubtypeTdScdma = NetHostConnectionSubtypeKey.String(\"td_scdma\")\n\t// IWLAN\n\tNetHostConnectionSubtypeIwlan = NetHostConnectionSubtypeKey.String(\"iwlan\")\n\t// 5G NR (New Radio)\n\tNetHostConnectionSubtypeNr = NetHostConnectionSubtypeKey.String(\"nr\")\n\t// 5G NRNSA (New Radio Non-Standalone)\n\tNetHostConnectionSubtypeNrnsa = NetHostConnectionSubtypeKey.String(\"nrnsa\")\n\t// LTE CA\n\tNetHostConnectionSubtypeLteCa = NetHostConnectionSubtypeKey.String(\"lte_ca\")\n)\n\n// NetHostCarrierName returns an attribute KeyValue conforming to the\n// \"net.host.carrier.name\" semantic conventions. It represents the name of the\n// mobile carrier.\nfunc NetHostCarrierName(val string) attribute.KeyValue {\n\treturn NetHostCarrierNameKey.String(val)\n}\n\n// NetHostCarrierMcc returns an attribute KeyValue conforming to the\n// \"net.host.carrier.mcc\" semantic conventions. It represents the mobile\n// carrier country code.\nfunc NetHostCarrierMcc(val string) attribute.KeyValue {\n\treturn NetHostCarrierMccKey.String(val)\n}\n\n// NetHostCarrierMnc returns an attribute KeyValue conforming to the\n// \"net.host.carrier.mnc\" semantic conventions. It represents the mobile\n// carrier network code.\nfunc NetHostCarrierMnc(val string) attribute.KeyValue {\n\treturn NetHostCarrierMncKey.String(val)\n}\n\n// NetHostCarrierIcc returns an attribute KeyValue conforming to the\n// \"net.host.carrier.icc\" semantic conventions. It represents the ISO 3166-1\n// alpha-2 2-character country code associated with the mobile carrier network.\nfunc NetHostCarrierIcc(val string) attribute.KeyValue {\n\treturn NetHostCarrierIccKey.String(val)\n}\n\n// Semantic conventions for HTTP client and server Spans.\nconst (\n\t// HTTPRequestContentLengthKey is the attribute Key conforming to the\n\t// \"http.request_content_length\" semantic conventions. It represents the\n\t// size of the request payload body in bytes. This is the number of bytes\n\t// transferred excluding headers and is often, but not always, present as\n\t// the\n\t// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n\t// header. For requests using transport encoding, this should be the\n\t// compressed size.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 3495\n\tHTTPRequestContentLengthKey = attribute.Key(\"http.request_content_length\")\n\n\t// HTTPResponseContentLengthKey is the attribute Key conforming to the\n\t// \"http.response_content_length\" semantic conventions. It represents the\n\t// size of the response payload body in bytes. This is the number of bytes\n\t// transferred excluding headers and is often, but not always, present as\n\t// the\n\t// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n\t// header. For requests using transport encoding, this should be the\n\t// compressed size.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 3495\n\tHTTPResponseContentLengthKey = attribute.Key(\"http.response_content_length\")\n)\n\n// HTTPRequestContentLength returns an attribute KeyValue conforming to the\n// \"http.request_content_length\" semantic conventions. It represents the size\n// of the request payload body in bytes. This is the number of bytes\n// transferred excluding headers and is often, but not always, present as the\n// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n// header. For requests using transport encoding, this should be the compressed\n// size.\nfunc HTTPRequestContentLength(val int) attribute.KeyValue {\n\treturn HTTPRequestContentLengthKey.Int(val)\n}\n\n// HTTPResponseContentLength returns an attribute KeyValue conforming to the\n// \"http.response_content_length\" semantic conventions. It represents the size\n// of the response payload body in bytes. This is the number of bytes\n// transferred excluding headers and is often, but not always, present as the\n// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n// header. For requests using transport encoding, this should be the compressed\n// size.\nfunc HTTPResponseContentLength(val int) attribute.KeyValue {\n\treturn HTTPResponseContentLengthKey.Int(val)\n}\n\n// Semantic convention describing per-message attributes populated on messaging\n// spans or links.\nconst (\n\t// MessagingMessageIDKey is the attribute Key conforming to the\n\t// \"messaging.message.id\" semantic conventions. It represents a value used\n\t// by the messaging system as an identifier for the message, represented as\n\t// a string.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '452a7c7c7c7048c2f887f61572b18fc2'\n\tMessagingMessageIDKey = attribute.Key(\"messaging.message.id\")\n\n\t// MessagingMessageConversationIDKey is the attribute Key conforming to the\n\t// \"messaging.message.conversation_id\" semantic conventions. It represents\n\t// the [conversation ID](#conversations) identifying the conversation to\n\t// which the message belongs, represented as a string. Sometimes called\n\t// \"Correlation ID\".\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'MyConversationID'\n\tMessagingMessageConversationIDKey = attribute.Key(\"messaging.message.conversation_id\")\n\n\t// MessagingMessagePayloadSizeBytesKey is the attribute Key conforming to\n\t// the \"messaging.message.payload_size_bytes\" semantic conventions. It\n\t// represents the (uncompressed) size of the message payload in bytes. Also\n\t// use this attribute if it is unknown whether the compressed or\n\t// uncompressed payload size is reported.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 2738\n\tMessagingMessagePayloadSizeBytesKey = attribute.Key(\"messaging.message.payload_size_bytes\")\n\n\t// MessagingMessagePayloadCompressedSizeBytesKey is the attribute Key\n\t// conforming to the \"messaging.message.payload_compressed_size_bytes\"\n\t// semantic conventions. It represents the compressed size of the message\n\t// payload in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 2048\n\tMessagingMessagePayloadCompressedSizeBytesKey = attribute.Key(\"messaging.message.payload_compressed_size_bytes\")\n)\n\n// MessagingMessageID returns an attribute KeyValue conforming to the\n// \"messaging.message.id\" semantic conventions. It represents a value used by\n// the messaging system as an identifier for the message, represented as a\n// string.\nfunc MessagingMessageID(val string) attribute.KeyValue {\n\treturn MessagingMessageIDKey.String(val)\n}\n\n// MessagingMessageConversationID returns an attribute KeyValue conforming\n// to the \"messaging.message.conversation_id\" semantic conventions. It\n// represents the [conversation ID](#conversations) identifying the\n// conversation to which the message belongs, represented as a string.\n// Sometimes called \"Correlation ID\".\nfunc MessagingMessageConversationID(val string) attribute.KeyValue {\n\treturn MessagingMessageConversationIDKey.String(val)\n}\n\n// MessagingMessagePayloadSizeBytes returns an attribute KeyValue conforming\n// to the \"messaging.message.payload_size_bytes\" semantic conventions. It\n// represents the (uncompressed) size of the message payload in bytes. Also use\n// this attribute if it is unknown whether the compressed or uncompressed\n// payload size is reported.\nfunc MessagingMessagePayloadSizeBytes(val int) attribute.KeyValue {\n\treturn MessagingMessagePayloadSizeBytesKey.Int(val)\n}\n\n// MessagingMessagePayloadCompressedSizeBytes returns an attribute KeyValue\n// conforming to the \"messaging.message.payload_compressed_size_bytes\" semantic\n// conventions. It represents the compressed size of the message payload in\n// bytes.\nfunc MessagingMessagePayloadCompressedSizeBytes(val int) attribute.KeyValue {\n\treturn MessagingMessagePayloadCompressedSizeBytesKey.Int(val)\n}\n\n// Semantic convention for attributes that describe messaging destination on\n// broker\nconst (\n\t// MessagingDestinationNameKey is the attribute Key conforming to the\n\t// \"messaging.destination.name\" semantic conventions. It represents the\n\t// message destination name\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'MyQueue', 'MyTopic'\n\t// Note: Destination name SHOULD uniquely identify a specific queue, topic\n\t// or other entity within the broker. If\n\t// the broker does not have such notion, the destination name SHOULD\n\t// uniquely identify the broker.\n\tMessagingDestinationNameKey = attribute.Key(\"messaging.destination.name\")\n\n\t// MessagingDestinationTemplateKey is the attribute Key conforming to the\n\t// \"messaging.destination.template\" semantic conventions. It represents the\n\t// low cardinality representation of the messaging destination name\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '/customers/{customerID}'\n\t// Note: Destination names could be constructed from templates. An example\n\t// would be a destination name involving a user name or product id.\n\t// Although the destination name in this case is of high cardinality, the\n\t// underlying template is of low cardinality and can be effectively used\n\t// for grouping and aggregation.\n\tMessagingDestinationTemplateKey = attribute.Key(\"messaging.destination.template\")\n\n\t// MessagingDestinationTemporaryKey is the attribute Key conforming to the\n\t// \"messaging.destination.temporary\" semantic conventions. It represents a\n\t// boolean that is true if the message destination is temporary and might\n\t// not exist anymore after messages are processed.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessagingDestinationTemporaryKey = attribute.Key(\"messaging.destination.temporary\")\n\n\t// MessagingDestinationAnonymousKey is the attribute Key conforming to the\n\t// \"messaging.destination.anonymous\" semantic conventions. It represents a\n\t// boolean that is true if the message destination is anonymous (could be\n\t// unnamed or have auto-generated name).\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessagingDestinationAnonymousKey = attribute.Key(\"messaging.destination.anonymous\")\n)\n\n// MessagingDestinationName returns an attribute KeyValue conforming to the\n// \"messaging.destination.name\" semantic conventions. It represents the message\n// destination name\nfunc MessagingDestinationName(val string) attribute.KeyValue {\n\treturn MessagingDestinationNameKey.String(val)\n}\n\n// MessagingDestinationTemplate returns an attribute KeyValue conforming to\n// the \"messaging.destination.template\" semantic conventions. It represents the\n// low cardinality representation of the messaging destination name\nfunc MessagingDestinationTemplate(val string) attribute.KeyValue {\n\treturn MessagingDestinationTemplateKey.String(val)\n}\n\n// MessagingDestinationTemporary returns an attribute KeyValue conforming to\n// the \"messaging.destination.temporary\" semantic conventions. It represents a\n// boolean that is true if the message destination is temporary and might not\n// exist anymore after messages are processed.\nfunc MessagingDestinationTemporary(val bool) attribute.KeyValue {\n\treturn MessagingDestinationTemporaryKey.Bool(val)\n}\n\n// MessagingDestinationAnonymous returns an attribute KeyValue conforming to\n// the \"messaging.destination.anonymous\" semantic conventions. It represents a\n// boolean that is true if the message destination is anonymous (could be\n// unnamed or have auto-generated name).\nfunc MessagingDestinationAnonymous(val bool) attribute.KeyValue {\n\treturn MessagingDestinationAnonymousKey.Bool(val)\n}\n\n// Semantic convention for attributes that describe messaging source on broker\nconst (\n\t// MessagingSourceNameKey is the attribute Key conforming to the\n\t// \"messaging.source.name\" semantic conventions. It represents the message\n\t// source name\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'MyQueue', 'MyTopic'\n\t// Note: Source name SHOULD uniquely identify a specific queue, topic, or\n\t// other entity within the broker. If\n\t// the broker does not have such notion, the source name SHOULD uniquely\n\t// identify the broker.\n\tMessagingSourceNameKey = attribute.Key(\"messaging.source.name\")\n\n\t// MessagingSourceTemplateKey is the attribute Key conforming to the\n\t// \"messaging.source.template\" semantic conventions. It represents the low\n\t// cardinality representation of the messaging source name\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '/customers/{customerID}'\n\t// Note: Source names could be constructed from templates. An example would\n\t// be a source name involving a user name or product id. Although the\n\t// source name in this case is of high cardinality, the underlying template\n\t// is of low cardinality and can be effectively used for grouping and\n\t// aggregation.\n\tMessagingSourceTemplateKey = attribute.Key(\"messaging.source.template\")\n\n\t// MessagingSourceTemporaryKey is the attribute Key conforming to the\n\t// \"messaging.source.temporary\" semantic conventions. It represents a\n\t// boolean that is true if the message source is temporary and might not\n\t// exist anymore after messages are processed.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessagingSourceTemporaryKey = attribute.Key(\"messaging.source.temporary\")\n\n\t// MessagingSourceAnonymousKey is the attribute Key conforming to the\n\t// \"messaging.source.anonymous\" semantic conventions. It represents a\n\t// boolean that is true if the message source is anonymous (could be\n\t// unnamed or have auto-generated name).\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessagingSourceAnonymousKey = attribute.Key(\"messaging.source.anonymous\")\n)\n\n// MessagingSourceName returns an attribute KeyValue conforming to the\n// \"messaging.source.name\" semantic conventions. It represents the message\n// source name\nfunc MessagingSourceName(val string) attribute.KeyValue {\n\treturn MessagingSourceNameKey.String(val)\n}\n\n// MessagingSourceTemplate returns an attribute KeyValue conforming to the\n// \"messaging.source.template\" semantic conventions. It represents the low\n// cardinality representation of the messaging source name\nfunc MessagingSourceTemplate(val string) attribute.KeyValue {\n\treturn MessagingSourceTemplateKey.String(val)\n}\n\n// MessagingSourceTemporary returns an attribute KeyValue conforming to the\n// \"messaging.source.temporary\" semantic conventions. It represents a boolean\n// that is true if the message source is temporary and might not exist anymore\n// after messages are processed.\nfunc MessagingSourceTemporary(val bool) attribute.KeyValue {\n\treturn MessagingSourceTemporaryKey.Bool(val)\n}\n\n// MessagingSourceAnonymous returns an attribute KeyValue conforming to the\n// \"messaging.source.anonymous\" semantic conventions. It represents a boolean\n// that is true if the message source is anonymous (could be unnamed or have\n// auto-generated name).\nfunc MessagingSourceAnonymous(val bool) attribute.KeyValue {\n\treturn MessagingSourceAnonymousKey.Bool(val)\n}\n\n// Attributes for RabbitMQ\nconst (\n\t// MessagingRabbitmqDestinationRoutingKeyKey is the attribute Key\n\t// conforming to the \"messaging.rabbitmq.destination.routing_key\" semantic\n\t// conventions. It represents the rabbitMQ message routing key.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (If not empty.)\n\t// Stability: stable\n\t// Examples: 'myKey'\n\tMessagingRabbitmqDestinationRoutingKeyKey = attribute.Key(\"messaging.rabbitmq.destination.routing_key\")\n)\n\n// MessagingRabbitmqDestinationRoutingKey returns an attribute KeyValue\n// conforming to the \"messaging.rabbitmq.destination.routing_key\" semantic\n// conventions. It represents the rabbitMQ message routing key.\nfunc MessagingRabbitmqDestinationRoutingKey(val string) attribute.KeyValue {\n\treturn MessagingRabbitmqDestinationRoutingKeyKey.String(val)\n}\n\n// Attributes for Apache Kafka\nconst (\n\t// MessagingKafkaMessageKeyKey is the attribute Key conforming to the\n\t// \"messaging.kafka.message.key\" semantic conventions. It represents the\n\t// message keys in Kafka are used for grouping alike messages to ensure\n\t// they're processed on the same partition. They differ from\n\t// `messaging.message.id` in that they're not unique. If the key is `null`,\n\t// the attribute MUST NOT be set.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'myKey'\n\t// Note: If the key type is not string, it's string representation has to\n\t// be supplied for the attribute. If the key has no unambiguous, canonical\n\t// string form, don't include its value.\n\tMessagingKafkaMessageKeyKey = attribute.Key(\"messaging.kafka.message.key\")\n\n\t// MessagingKafkaConsumerGroupKey is the attribute Key conforming to the\n\t// \"messaging.kafka.consumer.group\" semantic conventions. It represents the\n\t// name of the Kafka Consumer Group that is handling the message. Only\n\t// applies to consumers, not producers.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'my-group'\n\tMessagingKafkaConsumerGroupKey = attribute.Key(\"messaging.kafka.consumer.group\")\n\n\t// MessagingKafkaClientIDKey is the attribute Key conforming to the\n\t// \"messaging.kafka.client_id\" semantic conventions. It represents the\n\t// client ID for the Consumer or Producer that is handling the message.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'client-5'\n\tMessagingKafkaClientIDKey = attribute.Key(\"messaging.kafka.client_id\")\n\n\t// MessagingKafkaDestinationPartitionKey is the attribute Key conforming to\n\t// the \"messaging.kafka.destination.partition\" semantic conventions. It\n\t// represents the partition the message is sent to.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 2\n\tMessagingKafkaDestinationPartitionKey = attribute.Key(\"messaging.kafka.destination.partition\")\n\n\t// MessagingKafkaSourcePartitionKey is the attribute Key conforming to the\n\t// \"messaging.kafka.source.partition\" semantic conventions. It represents\n\t// the partition the message is received from.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 2\n\tMessagingKafkaSourcePartitionKey = attribute.Key(\"messaging.kafka.source.partition\")\n\n\t// MessagingKafkaMessageOffsetKey is the attribute Key conforming to the\n\t// \"messaging.kafka.message.offset\" semantic conventions. It represents the\n\t// offset of a record in the corresponding Kafka partition.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 42\n\tMessagingKafkaMessageOffsetKey = attribute.Key(\"messaging.kafka.message.offset\")\n\n\t// MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the\n\t// \"messaging.kafka.message.tombstone\" semantic conventions. It represents\n\t// a boolean that is true if the message is a tombstone.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: ConditionallyRequired (If value is `true`. When\n\t// missing, the value is assumed to be `false`.)\n\t// Stability: stable\n\tMessagingKafkaMessageTombstoneKey = attribute.Key(\"messaging.kafka.message.tombstone\")\n)\n\n// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the\n// \"messaging.kafka.message.key\" semantic conventions. It represents the\n// message keys in Kafka are used for grouping alike messages to ensure they're\n// processed on the same partition. They differ from `messaging.message.id` in\n// that they're not unique. If the key is `null`, the attribute MUST NOT be\n// set.\nfunc MessagingKafkaMessageKey(val string) attribute.KeyValue {\n\treturn MessagingKafkaMessageKeyKey.String(val)\n}\n\n// MessagingKafkaConsumerGroup returns an attribute KeyValue conforming to\n// the \"messaging.kafka.consumer.group\" semantic conventions. It represents the\n// name of the Kafka Consumer Group that is handling the message. Only applies\n// to consumers, not producers.\nfunc MessagingKafkaConsumerGroup(val string) attribute.KeyValue {\n\treturn MessagingKafkaConsumerGroupKey.String(val)\n}\n\n// MessagingKafkaClientID returns an attribute KeyValue conforming to the\n// \"messaging.kafka.client_id\" semantic conventions. It represents the client\n// ID for the Consumer or Producer that is handling the message.\nfunc MessagingKafkaClientID(val string) attribute.KeyValue {\n\treturn MessagingKafkaClientIDKey.String(val)\n}\n\n// MessagingKafkaDestinationPartition returns an attribute KeyValue\n// conforming to the \"messaging.kafka.destination.partition\" semantic\n// conventions. It represents the partition the message is sent to.\nfunc MessagingKafkaDestinationPartition(val int) attribute.KeyValue {\n\treturn MessagingKafkaDestinationPartitionKey.Int(val)\n}\n\n// MessagingKafkaSourcePartition returns an attribute KeyValue conforming to\n// the \"messaging.kafka.source.partition\" semantic conventions. It represents\n// the partition the message is received from.\nfunc MessagingKafkaSourcePartition(val int) attribute.KeyValue {\n\treturn MessagingKafkaSourcePartitionKey.Int(val)\n}\n\n// MessagingKafkaMessageOffset returns an attribute KeyValue conforming to\n// the \"messaging.kafka.message.offset\" semantic conventions. It represents the\n// offset of a record in the corresponding Kafka partition.\nfunc MessagingKafkaMessageOffset(val int) attribute.KeyValue {\n\treturn MessagingKafkaMessageOffsetKey.Int(val)\n}\n\n// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming\n// to the \"messaging.kafka.message.tombstone\" semantic conventions. It\n// represents a boolean that is true if the message is a tombstone.\nfunc MessagingKafkaMessageTombstone(val bool) attribute.KeyValue {\n\treturn MessagingKafkaMessageTombstoneKey.Bool(val)\n}\n\n// Attributes for Apache RocketMQ\nconst (\n\t// MessagingRocketmqNamespaceKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.namespace\" semantic conventions. It represents the\n\t// namespace of RocketMQ resources, resources in different namespaces are\n\t// individual.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'myNamespace'\n\tMessagingRocketmqNamespaceKey = attribute.Key(\"messaging.rocketmq.namespace\")\n\n\t// MessagingRocketmqClientGroupKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.client_group\" semantic conventions. It represents\n\t// the name of the RocketMQ producer/consumer group that is handling the\n\t// message. The client type is identified by the SpanKind.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'myConsumerGroup'\n\tMessagingRocketmqClientGroupKey = attribute.Key(\"messaging.rocketmq.client_group\")\n\n\t// MessagingRocketmqClientIDKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.client_id\" semantic conventions. It represents the\n\t// unique identifier for each client.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'myhost@8742@s8083jm'\n\tMessagingRocketmqClientIDKey = attribute.Key(\"messaging.rocketmq.client_id\")\n\n\t// MessagingRocketmqMessageDeliveryTimestampKey is the attribute Key\n\t// conforming to the \"messaging.rocketmq.message.delivery_timestamp\"\n\t// semantic conventions. It represents the timestamp in milliseconds that\n\t// the delay message is expected to be delivered to consumer.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (If the message type is delay\n\t// and delay time level is not specified.)\n\t// Stability: stable\n\t// Examples: 1665987217045\n\tMessagingRocketmqMessageDeliveryTimestampKey = attribute.Key(\"messaging.rocketmq.message.delivery_timestamp\")\n\n\t// MessagingRocketmqMessageDelayTimeLevelKey is the attribute Key\n\t// conforming to the \"messaging.rocketmq.message.delay_time_level\" semantic\n\t// conventions. It represents the delay time level for delay message, which\n\t// determines the message delay time.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (If the message type is delay\n\t// and delivery timestamp is not specified.)\n\t// Stability: stable\n\t// Examples: 3\n\tMessagingRocketmqMessageDelayTimeLevelKey = attribute.Key(\"messaging.rocketmq.message.delay_time_level\")\n\n\t// MessagingRocketmqMessageGroupKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.group\" semantic conventions. It represents\n\t// the it is essential for FIFO message. Messages that belong to the same\n\t// message group are always processed one by one within the same consumer\n\t// group.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (If the message type is FIFO.)\n\t// Stability: stable\n\t// Examples: 'myMessageGroup'\n\tMessagingRocketmqMessageGroupKey = attribute.Key(\"messaging.rocketmq.message.group\")\n\n\t// MessagingRocketmqMessageTypeKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.type\" semantic conventions. It represents\n\t// the type of message.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessagingRocketmqMessageTypeKey = attribute.Key(\"messaging.rocketmq.message.type\")\n\n\t// MessagingRocketmqMessageTagKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.tag\" semantic conventions. It represents the\n\t// secondary classifier of message besides topic.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'tagA'\n\tMessagingRocketmqMessageTagKey = attribute.Key(\"messaging.rocketmq.message.tag\")\n\n\t// MessagingRocketmqMessageKeysKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.keys\" semantic conventions. It represents\n\t// the key(s) of message, another way to mark message besides message id.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'keyA', 'keyB'\n\tMessagingRocketmqMessageKeysKey = attribute.Key(\"messaging.rocketmq.message.keys\")\n\n\t// MessagingRocketmqConsumptionModelKey is the attribute Key conforming to\n\t// the \"messaging.rocketmq.consumption_model\" semantic conventions. It\n\t// represents the model of message consumption. This only applies to\n\t// consumer spans.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessagingRocketmqConsumptionModelKey = attribute.Key(\"messaging.rocketmq.consumption_model\")\n)\n\nvar (\n\t// Normal message\n\tMessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String(\"normal\")\n\t// FIFO message\n\tMessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String(\"fifo\")\n\t// Delay message\n\tMessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String(\"delay\")\n\t// Transaction message\n\tMessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String(\"transaction\")\n)\n\nvar (\n\t// Clustering consumption model\n\tMessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String(\"clustering\")\n\t// Broadcasting consumption model\n\tMessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String(\"broadcasting\")\n)\n\n// MessagingRocketmqNamespace returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.namespace\" semantic conventions. It represents the\n// namespace of RocketMQ resources, resources in different namespaces are\n// individual.\nfunc MessagingRocketmqNamespace(val string) attribute.KeyValue {\n\treturn MessagingRocketmqNamespaceKey.String(val)\n}\n\n// MessagingRocketmqClientGroup returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.client_group\" semantic conventions. It represents\n// the name of the RocketMQ producer/consumer group that is handling the\n// message. The client type is identified by the SpanKind.\nfunc MessagingRocketmqClientGroup(val string) attribute.KeyValue {\n\treturn MessagingRocketmqClientGroupKey.String(val)\n}\n\n// MessagingRocketmqClientID returns an attribute KeyValue conforming to the\n// \"messaging.rocketmq.client_id\" semantic conventions. It represents the\n// unique identifier for each client.\nfunc MessagingRocketmqClientID(val string) attribute.KeyValue {\n\treturn MessagingRocketmqClientIDKey.String(val)\n}\n\n// MessagingRocketmqMessageDeliveryTimestamp returns an attribute KeyValue\n// conforming to the \"messaging.rocketmq.message.delivery_timestamp\" semantic\n// conventions. It represents the timestamp in milliseconds that the delay\n// message is expected to be delivered to consumer.\nfunc MessagingRocketmqMessageDeliveryTimestamp(val int) attribute.KeyValue {\n\treturn MessagingRocketmqMessageDeliveryTimestampKey.Int(val)\n}\n\n// MessagingRocketmqMessageDelayTimeLevel returns an attribute KeyValue\n// conforming to the \"messaging.rocketmq.message.delay_time_level\" semantic\n// conventions. It represents the delay time level for delay message, which\n// determines the message delay time.\nfunc MessagingRocketmqMessageDelayTimeLevel(val int) attribute.KeyValue {\n\treturn MessagingRocketmqMessageDelayTimeLevelKey.Int(val)\n}\n\n// MessagingRocketmqMessageGroup returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.message.group\" semantic conventions. It represents\n// the it is essential for FIFO message. Messages that belong to the same\n// message group are always processed one by one within the same consumer\n// group.\nfunc MessagingRocketmqMessageGroup(val string) attribute.KeyValue {\n\treturn MessagingRocketmqMessageGroupKey.String(val)\n}\n\n// MessagingRocketmqMessageTag returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.message.tag\" semantic conventions. It represents the\n// secondary classifier of message besides topic.\nfunc MessagingRocketmqMessageTag(val string) attribute.KeyValue {\n\treturn MessagingRocketmqMessageTagKey.String(val)\n}\n\n// MessagingRocketmqMessageKeys returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.message.keys\" semantic conventions. It represents\n// the key(s) of message, another way to mark message besides message id.\nfunc MessagingRocketmqMessageKeys(val ...string) attribute.KeyValue {\n\treturn MessagingRocketmqMessageKeysKey.StringSlice(val)\n}\n\n// Describes user-agent attributes.\nconst (\n\t// UserAgentOriginalKey is the attribute Key conforming to the\n\t// \"user_agent.original\" semantic conventions. It represents the value of\n\t// the [HTTP\n\t// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent)\n\t// header sent by the client.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'CERN-LineMode/2.15 libwww/2.17b3'\n\tUserAgentOriginalKey = attribute.Key(\"user_agent.original\")\n)\n\n// UserAgentOriginal returns an attribute KeyValue conforming to the\n// \"user_agent.original\" semantic conventions. It represents the value of the\n// [HTTP\n// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent)\n// header sent by the client.\nfunc UserAgentOriginal(val string) attribute.KeyValue {\n\treturn UserAgentOriginalKey.String(val)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Package semconv implements OpenTelemetry semantic conventions.\n//\n// OpenTelemetry semantic conventions are agreed standardized naming\n// patterns for OpenTelemetry things. This package represents the conventions\n// as of the v1.20.0 version of the OpenTelemetry specification.\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/event.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Code generated from semantic convention specification. DO NOT EDIT.\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\nimport \"go.opentelemetry.io/otel/attribute\"\n\n// This semantic convention defines the attributes used to represent a feature\n// flag evaluation as an event.\nconst (\n\t// FeatureFlagKeyKey is the attribute Key conforming to the\n\t// \"feature_flag.key\" semantic conventions. It represents the unique\n\t// identifier of the feature flag.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'logo-color'\n\tFeatureFlagKeyKey = attribute.Key(\"feature_flag.key\")\n\n\t// FeatureFlagProviderNameKey is the attribute Key conforming to the\n\t// \"feature_flag.provider_name\" semantic conventions. It represents the\n\t// name of the service provider that performs the flag evaluation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended\n\t// Stability: stable\n\t// Examples: 'Flag Manager'\n\tFeatureFlagProviderNameKey = attribute.Key(\"feature_flag.provider_name\")\n\n\t// FeatureFlagVariantKey is the attribute Key conforming to the\n\t// \"feature_flag.variant\" semantic conventions. It represents the sHOULD be\n\t// a semantic identifier for a value. If one is unavailable, a stringified\n\t// version of the value can be used.\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended\n\t// Stability: stable\n\t// Examples: 'red', 'true', 'on'\n\t// Note: A semantic identifier, commonly referred to as a variant, provides\n\t// a means\n\t// for referring to a value without including the value itself. This can\n\t// provide additional context for understanding the meaning behind a value.\n\t// For example, the variant `red` maybe be used for the value `#c05543`.\n\t//\n\t// A stringified version of the value can be used in situations where a\n\t// semantic identifier is unavailable. String representation of the value\n\t// should be determined by the implementer.\n\tFeatureFlagVariantKey = attribute.Key(\"feature_flag.variant\")\n)\n\n// FeatureFlagKey returns an attribute KeyValue conforming to the\n// \"feature_flag.key\" semantic conventions. It represents the unique identifier\n// of the feature flag.\nfunc FeatureFlagKey(val string) attribute.KeyValue {\n\treturn FeatureFlagKeyKey.String(val)\n}\n\n// FeatureFlagProviderName returns an attribute KeyValue conforming to the\n// \"feature_flag.provider_name\" semantic conventions. It represents the name of\n// the service provider that performs the flag evaluation.\nfunc FeatureFlagProviderName(val string) attribute.KeyValue {\n\treturn FeatureFlagProviderNameKey.String(val)\n}\n\n// FeatureFlagVariant returns an attribute KeyValue conforming to the\n// \"feature_flag.variant\" semantic conventions. It represents the sHOULD be a\n// semantic identifier for a value. If one is unavailable, a stringified\n// version of the value can be used.\nfunc FeatureFlagVariant(val string) attribute.KeyValue {\n\treturn FeatureFlagVariantKey.String(val)\n}\n\n// RPC received/sent message.\nconst (\n\t// MessageTypeKey is the attribute Key conforming to the \"message.type\"\n\t// semantic conventions. It represents the whether this is a received or\n\t// sent message.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessageTypeKey = attribute.Key(\"message.type\")\n\n\t// MessageIDKey is the attribute Key conforming to the \"message.id\"\n\t// semantic conventions. It represents the mUST be calculated as two\n\t// different counters starting from `1` one for sent messages and one for\n\t// received message.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Note: This way we guarantee that the values will be consistent between\n\t// different implementations.\n\tMessageIDKey = attribute.Key(\"message.id\")\n\n\t// MessageCompressedSizeKey is the attribute Key conforming to the\n\t// \"message.compressed_size\" semantic conventions. It represents the\n\t// compressed size of the message in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessageCompressedSizeKey = attribute.Key(\"message.compressed_size\")\n\n\t// MessageUncompressedSizeKey is the attribute Key conforming to the\n\t// \"message.uncompressed_size\" semantic conventions. It represents the\n\t// uncompressed size of the message in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tMessageUncompressedSizeKey = attribute.Key(\"message.uncompressed_size\")\n)\n\nvar (\n\t// sent\n\tMessageTypeSent = MessageTypeKey.String(\"SENT\")\n\t// received\n\tMessageTypeReceived = MessageTypeKey.String(\"RECEIVED\")\n)\n\n// MessageID returns an attribute KeyValue conforming to the \"message.id\"\n// semantic conventions. It represents the mUST be calculated as two different\n// counters starting from `1` one for sent messages and one for received\n// message.\nfunc MessageID(val int) attribute.KeyValue {\n\treturn MessageIDKey.Int(val)\n}\n\n// MessageCompressedSize returns an attribute KeyValue conforming to the\n// \"message.compressed_size\" semantic conventions. It represents the compressed\n// size of the message in bytes.\nfunc MessageCompressedSize(val int) attribute.KeyValue {\n\treturn MessageCompressedSizeKey.Int(val)\n}\n\n// MessageUncompressedSize returns an attribute KeyValue conforming to the\n// \"message.uncompressed_size\" semantic conventions. It represents the\n// uncompressed size of the message in bytes.\nfunc MessageUncompressedSize(val int) attribute.KeyValue {\n\treturn MessageUncompressedSizeKey.Int(val)\n}\n\n// The attributes used to report a single exception associated with a span.\nconst (\n\t// ExceptionEscapedKey is the attribute Key conforming to the\n\t// \"exception.escaped\" semantic conventions. It represents the sHOULD be\n\t// set to true if the exception event is recorded at a point where it is\n\t// known that the exception is escaping the scope of the span.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Note: An exception is considered to have escaped (or left) the scope of\n\t// a span,\n\t// if that span is ended while the exception is still logically \"in\n\t// flight\".\n\t// This may be actually \"in flight\" in some languages (e.g. if the\n\t// exception\n\t// is passed to a Context manager's `__exit__` method in Python) but will\n\t// usually be caught at the point of recording the exception in most\n\t// languages.\n\t//\n\t// It is usually not possible to determine at the point where an exception\n\t// is thrown\n\t// whether it will escape the scope of a span.\n\t// However, it is trivial to know that an exception\n\t// will escape, if one checks for an active exception just before ending\n\t// the span,\n\t// as done in the [example above](#recording-an-exception).\n\t//\n\t// It follows that an exception may still escape the scope of the span\n\t// even if the `exception.escaped` attribute was not set or set to false,\n\t// since the event might have been recorded at a time where it was not\n\t// clear whether the exception will escape.\n\tExceptionEscapedKey = attribute.Key(\"exception.escaped\")\n)\n\n// ExceptionEscaped returns an attribute KeyValue conforming to the\n// \"exception.escaped\" semantic conventions. It represents the sHOULD be set to\n// true if the exception event is recorded at a point where it is known that\n// the exception is escaping the scope of the span.\nfunc ExceptionEscaped(val bool) attribute.KeyValue {\n\treturn ExceptionEscapedKey.Bool(val)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/exception.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\nconst (\n\t// ExceptionEventName is the name of the Span event representing an exception.\n\tExceptionEventName = \"exception\"\n)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/http.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\n// HTTP scheme attributes.\nvar (\n\tHTTPSchemeHTTP  = HTTPSchemeKey.String(\"http\")\n\tHTTPSchemeHTTPS = HTTPSchemeKey.String(\"https\")\n)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/resource.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Code generated from semantic convention specification. DO NOT EDIT.\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\nimport \"go.opentelemetry.io/otel/attribute\"\n\n// The web browser in which the application represented by the resource is\n// running. The `browser.*` attributes MUST be used only for resources that\n// represent applications running in a web browser (regardless of whether\n// running on a mobile or desktop device).\nconst (\n\t// BrowserBrandsKey is the attribute Key conforming to the \"browser.brands\"\n\t// semantic conventions. It represents the array of brand name and version\n\t// separated by a space\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: ' Not A;Brand 99', 'Chromium 99', 'Chrome 99'\n\t// Note: This value is intended to be taken from the [UA client hints\n\t// API](https://wicg.github.io/ua-client-hints/#interface)\n\t// (`navigator.userAgentData.brands`).\n\tBrowserBrandsKey = attribute.Key(\"browser.brands\")\n\n\t// BrowserPlatformKey is the attribute Key conforming to the\n\t// \"browser.platform\" semantic conventions. It represents the platform on\n\t// which the browser is running\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Windows', 'macOS', 'Android'\n\t// Note: This value is intended to be taken from the [UA client hints\n\t// API](https://wicg.github.io/ua-client-hints/#interface)\n\t// (`navigator.userAgentData.platform`). If unavailable, the legacy\n\t// `navigator.platform` API SHOULD NOT be used instead and this attribute\n\t// SHOULD be left unset in order for the values to be consistent.\n\t// The list of possible values is defined in the [W3C User-Agent Client\n\t// Hints\n\t// specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform).\n\t// Note that some (but not all) of these values can overlap with values in\n\t// the [`os.type` and `os.name` attributes](./os.md). However, for\n\t// consistency, the values in the `browser.platform` attribute should\n\t// capture the exact value that the user agent provides.\n\tBrowserPlatformKey = attribute.Key(\"browser.platform\")\n\n\t// BrowserMobileKey is the attribute Key conforming to the \"browser.mobile\"\n\t// semantic conventions. It represents a boolean that is true if the\n\t// browser is running on a mobile device\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Note: This value is intended to be taken from the [UA client hints\n\t// API](https://wicg.github.io/ua-client-hints/#interface)\n\t// (`navigator.userAgentData.mobile`). If unavailable, this attribute\n\t// SHOULD be left unset.\n\tBrowserMobileKey = attribute.Key(\"browser.mobile\")\n\n\t// BrowserLanguageKey is the attribute Key conforming to the\n\t// \"browser.language\" semantic conventions. It represents the preferred\n\t// language of the user using the browser\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'en', 'en-US', 'fr', 'fr-FR'\n\t// Note: This value is intended to be taken from the Navigator API\n\t// `navigator.language`.\n\tBrowserLanguageKey = attribute.Key(\"browser.language\")\n)\n\n// BrowserBrands returns an attribute KeyValue conforming to the\n// \"browser.brands\" semantic conventions. It represents the array of brand name\n// and version separated by a space\nfunc BrowserBrands(val ...string) attribute.KeyValue {\n\treturn BrowserBrandsKey.StringSlice(val)\n}\n\n// BrowserPlatform returns an attribute KeyValue conforming to the\n// \"browser.platform\" semantic conventions. It represents the platform on which\n// the browser is running\nfunc BrowserPlatform(val string) attribute.KeyValue {\n\treturn BrowserPlatformKey.String(val)\n}\n\n// BrowserMobile returns an attribute KeyValue conforming to the\n// \"browser.mobile\" semantic conventions. It represents a boolean that is true\n// if the browser is running on a mobile device\nfunc BrowserMobile(val bool) attribute.KeyValue {\n\treturn BrowserMobileKey.Bool(val)\n}\n\n// BrowserLanguage returns an attribute KeyValue conforming to the\n// \"browser.language\" semantic conventions. It represents the preferred\n// language of the user using the browser\nfunc BrowserLanguage(val string) attribute.KeyValue {\n\treturn BrowserLanguageKey.String(val)\n}\n\n// A cloud environment (e.g. GCP, Azure, AWS)\nconst (\n\t// CloudProviderKey is the attribute Key conforming to the \"cloud.provider\"\n\t// semantic conventions. It represents the name of the cloud provider.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tCloudProviderKey = attribute.Key(\"cloud.provider\")\n\n\t// CloudAccountIDKey is the attribute Key conforming to the\n\t// \"cloud.account.id\" semantic conventions. It represents the cloud account\n\t// ID the resource is assigned to.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '111111111111', 'opentelemetry'\n\tCloudAccountIDKey = attribute.Key(\"cloud.account.id\")\n\n\t// CloudRegionKey is the attribute Key conforming to the \"cloud.region\"\n\t// semantic conventions. It represents the geographical region the resource\n\t// is running.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'us-central1', 'us-east-1'\n\t// Note: Refer to your provider's docs to see the available regions, for\n\t// example [Alibaba Cloud\n\t// regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS\n\t// regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/),\n\t// [Azure\n\t// regions](https://azure.microsoft.com/en-us/global-infrastructure/geographies/),\n\t// [Google Cloud regions](https://cloud.google.com/about/locations), or\n\t// [Tencent Cloud\n\t// regions](https://www.tencentcloud.com/document/product/213/6091).\n\tCloudRegionKey = attribute.Key(\"cloud.region\")\n\n\t// CloudResourceIDKey is the attribute Key conforming to the\n\t// \"cloud.resource_id\" semantic conventions. It represents the cloud\n\t// provider-specific native identifier of the monitored cloud resource\n\t// (e.g. an\n\t// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)\n\t// on AWS, a [fully qualified resource\n\t// ID](https://learn.microsoft.com/en-us/rest/api/resources/resources/get-by-id)\n\t// on Azure, a [full resource\n\t// name](https://cloud.google.com/apis/design/resource_names#full_resource_name)\n\t// on GCP)\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function',\n\t// '//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID',\n\t// '/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>'\n\t// Note: On some cloud providers, it may not be possible to determine the\n\t// full ID at startup,\n\t// so it may be necessary to set `cloud.resource_id` as a span attribute\n\t// instead.\n\t//\n\t// The exact value to use for `cloud.resource_id` depends on the cloud\n\t// provider.\n\t// The following well-known definitions MUST be used if you set this\n\t// attribute and they apply:\n\t//\n\t// * **AWS Lambda:** The function\n\t// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\n\t//   Take care not to use the \"invoked ARN\" directly but replace any\n\t//   [alias\n\t// suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)\n\t//   with the resolved function version, as the same runtime instance may\n\t// be invokable with\n\t//   multiple different aliases.\n\t// * **GCP:** The [URI of the\n\t// resource](https://cloud.google.com/iam/docs/full-resource-names)\n\t// * **Azure:** The [Fully Qualified Resource\n\t// ID](https://docs.microsoft.com/en-us/rest/api/resources/resources/get-by-id)\n\t// of the invoked function,\n\t//   *not* the function app, having the form\n\t// `/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>`.\n\t//   This means that a span attribute MUST be used, as an Azure function\n\t// app can host multiple functions that would usually share\n\t//   a TracerProvider.\n\tCloudResourceIDKey = attribute.Key(\"cloud.resource_id\")\n\n\t// CloudAvailabilityZoneKey is the attribute Key conforming to the\n\t// \"cloud.availability_zone\" semantic conventions. It represents the cloud\n\t// regions often have multiple, isolated locations known as zones to\n\t// increase availability. Availability zone represents the zone where the\n\t// resource is running.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'us-east-1c'\n\t// Note: Availability zones are called \"zones\" on Alibaba Cloud and Google\n\t// Cloud.\n\tCloudAvailabilityZoneKey = attribute.Key(\"cloud.availability_zone\")\n\n\t// CloudPlatformKey is the attribute Key conforming to the \"cloud.platform\"\n\t// semantic conventions. It represents the cloud platform in use.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Note: The prefix of the service SHOULD match the one specified in\n\t// `cloud.provider`.\n\tCloudPlatformKey = attribute.Key(\"cloud.platform\")\n)\n\nvar (\n\t// Alibaba Cloud\n\tCloudProviderAlibabaCloud = CloudProviderKey.String(\"alibaba_cloud\")\n\t// Amazon Web Services\n\tCloudProviderAWS = CloudProviderKey.String(\"aws\")\n\t// Microsoft Azure\n\tCloudProviderAzure = CloudProviderKey.String(\"azure\")\n\t// Google Cloud Platform\n\tCloudProviderGCP = CloudProviderKey.String(\"gcp\")\n\t// Heroku Platform as a Service\n\tCloudProviderHeroku = CloudProviderKey.String(\"heroku\")\n\t// IBM Cloud\n\tCloudProviderIbmCloud = CloudProviderKey.String(\"ibm_cloud\")\n\t// Tencent Cloud\n\tCloudProviderTencentCloud = CloudProviderKey.String(\"tencent_cloud\")\n)\n\nvar (\n\t// Alibaba Cloud Elastic Compute Service\n\tCloudPlatformAlibabaCloudECS = CloudPlatformKey.String(\"alibaba_cloud_ecs\")\n\t// Alibaba Cloud Function Compute\n\tCloudPlatformAlibabaCloudFc = CloudPlatformKey.String(\"alibaba_cloud_fc\")\n\t// Red Hat OpenShift on Alibaba Cloud\n\tCloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String(\"alibaba_cloud_openshift\")\n\t// AWS Elastic Compute Cloud\n\tCloudPlatformAWSEC2 = CloudPlatformKey.String(\"aws_ec2\")\n\t// AWS Elastic Container Service\n\tCloudPlatformAWSECS = CloudPlatformKey.String(\"aws_ecs\")\n\t// AWS Elastic Kubernetes Service\n\tCloudPlatformAWSEKS = CloudPlatformKey.String(\"aws_eks\")\n\t// AWS Lambda\n\tCloudPlatformAWSLambda = CloudPlatformKey.String(\"aws_lambda\")\n\t// AWS Elastic Beanstalk\n\tCloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String(\"aws_elastic_beanstalk\")\n\t// AWS App Runner\n\tCloudPlatformAWSAppRunner = CloudPlatformKey.String(\"aws_app_runner\")\n\t// Red Hat OpenShift on AWS (ROSA)\n\tCloudPlatformAWSOpenshift = CloudPlatformKey.String(\"aws_openshift\")\n\t// Azure Virtual Machines\n\tCloudPlatformAzureVM = CloudPlatformKey.String(\"azure_vm\")\n\t// Azure Container Instances\n\tCloudPlatformAzureContainerInstances = CloudPlatformKey.String(\"azure_container_instances\")\n\t// Azure Kubernetes Service\n\tCloudPlatformAzureAKS = CloudPlatformKey.String(\"azure_aks\")\n\t// Azure Functions\n\tCloudPlatformAzureFunctions = CloudPlatformKey.String(\"azure_functions\")\n\t// Azure App Service\n\tCloudPlatformAzureAppService = CloudPlatformKey.String(\"azure_app_service\")\n\t// Azure Red Hat OpenShift\n\tCloudPlatformAzureOpenshift = CloudPlatformKey.String(\"azure_openshift\")\n\t// Google Cloud Compute Engine (GCE)\n\tCloudPlatformGCPComputeEngine = CloudPlatformKey.String(\"gcp_compute_engine\")\n\t// Google Cloud Run\n\tCloudPlatformGCPCloudRun = CloudPlatformKey.String(\"gcp_cloud_run\")\n\t// Google Cloud Kubernetes Engine (GKE)\n\tCloudPlatformGCPKubernetesEngine = CloudPlatformKey.String(\"gcp_kubernetes_engine\")\n\t// Google Cloud Functions (GCF)\n\tCloudPlatformGCPCloudFunctions = CloudPlatformKey.String(\"gcp_cloud_functions\")\n\t// Google Cloud App Engine (GAE)\n\tCloudPlatformGCPAppEngine = CloudPlatformKey.String(\"gcp_app_engine\")\n\t// Red Hat OpenShift on Google Cloud\n\tCloudPlatformGCPOpenshift = CloudPlatformKey.String(\"gcp_openshift\")\n\t// Red Hat OpenShift on IBM Cloud\n\tCloudPlatformIbmCloudOpenshift = CloudPlatformKey.String(\"ibm_cloud_openshift\")\n\t// Tencent Cloud Cloud Virtual Machine (CVM)\n\tCloudPlatformTencentCloudCvm = CloudPlatformKey.String(\"tencent_cloud_cvm\")\n\t// Tencent Cloud Elastic Kubernetes Service (EKS)\n\tCloudPlatformTencentCloudEKS = CloudPlatformKey.String(\"tencent_cloud_eks\")\n\t// Tencent Cloud Serverless Cloud Function (SCF)\n\tCloudPlatformTencentCloudScf = CloudPlatformKey.String(\"tencent_cloud_scf\")\n)\n\n// CloudAccountID returns an attribute KeyValue conforming to the\n// \"cloud.account.id\" semantic conventions. It represents the cloud account ID\n// the resource is assigned to.\nfunc CloudAccountID(val string) attribute.KeyValue {\n\treturn CloudAccountIDKey.String(val)\n}\n\n// CloudRegion returns an attribute KeyValue conforming to the\n// \"cloud.region\" semantic conventions. It represents the geographical region\n// the resource is running.\nfunc CloudRegion(val string) attribute.KeyValue {\n\treturn CloudRegionKey.String(val)\n}\n\n// CloudResourceID returns an attribute KeyValue conforming to the\n// \"cloud.resource_id\" semantic conventions. It represents the cloud\n// provider-specific native identifier of the monitored cloud resource (e.g. an\n// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)\n// on AWS, a [fully qualified resource\n// ID](https://learn.microsoft.com/en-us/rest/api/resources/resources/get-by-id)\n// on Azure, a [full resource\n// name](https://cloud.google.com/apis/design/resource_names#full_resource_name)\n// on GCP)\nfunc CloudResourceID(val string) attribute.KeyValue {\n\treturn CloudResourceIDKey.String(val)\n}\n\n// CloudAvailabilityZone returns an attribute KeyValue conforming to the\n// \"cloud.availability_zone\" semantic conventions. It represents the cloud\n// regions often have multiple, isolated locations known as zones to increase\n// availability. Availability zone represents the zone where the resource is\n// running.\nfunc CloudAvailabilityZone(val string) attribute.KeyValue {\n\treturn CloudAvailabilityZoneKey.String(val)\n}\n\n// Resources used by AWS Elastic Container Service (ECS).\nconst (\n\t// AWSECSContainerARNKey is the attribute Key conforming to the\n\t// \"aws.ecs.container.arn\" semantic conventions. It represents the Amazon\n\t// Resource Name (ARN) of an [ECS container\n\t// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples:\n\t// 'arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9'\n\tAWSECSContainerARNKey = attribute.Key(\"aws.ecs.container.arn\")\n\n\t// AWSECSClusterARNKey is the attribute Key conforming to the\n\t// \"aws.ecs.cluster.arn\" semantic conventions. It represents the ARN of an\n\t// [ECS\n\t// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'\n\tAWSECSClusterARNKey = attribute.Key(\"aws.ecs.cluster.arn\")\n\n\t// AWSECSLaunchtypeKey is the attribute Key conforming to the\n\t// \"aws.ecs.launchtype\" semantic conventions. It represents the [launch\n\t// type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)\n\t// for an ECS task.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tAWSECSLaunchtypeKey = attribute.Key(\"aws.ecs.launchtype\")\n\n\t// AWSECSTaskARNKey is the attribute Key conforming to the\n\t// \"aws.ecs.task.arn\" semantic conventions. It represents the ARN of an\n\t// [ECS task\n\t// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples:\n\t// 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b'\n\tAWSECSTaskARNKey = attribute.Key(\"aws.ecs.task.arn\")\n\n\t// AWSECSTaskFamilyKey is the attribute Key conforming to the\n\t// \"aws.ecs.task.family\" semantic conventions. It represents the task\n\t// definition family this task definition is a member of.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry-family'\n\tAWSECSTaskFamilyKey = attribute.Key(\"aws.ecs.task.family\")\n\n\t// AWSECSTaskRevisionKey is the attribute Key conforming to the\n\t// \"aws.ecs.task.revision\" semantic conventions. It represents the revision\n\t// for this task definition.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '8', '26'\n\tAWSECSTaskRevisionKey = attribute.Key(\"aws.ecs.task.revision\")\n)\n\nvar (\n\t// ec2\n\tAWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String(\"ec2\")\n\t// fargate\n\tAWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String(\"fargate\")\n)\n\n// AWSECSContainerARN returns an attribute KeyValue conforming to the\n// \"aws.ecs.container.arn\" semantic conventions. It represents the Amazon\n// Resource Name (ARN) of an [ECS container\n// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\nfunc AWSECSContainerARN(val string) attribute.KeyValue {\n\treturn AWSECSContainerARNKey.String(val)\n}\n\n// AWSECSClusterARN returns an attribute KeyValue conforming to the\n// \"aws.ecs.cluster.arn\" semantic conventions. It represents the ARN of an [ECS\n// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\nfunc AWSECSClusterARN(val string) attribute.KeyValue {\n\treturn AWSECSClusterARNKey.String(val)\n}\n\n// AWSECSTaskARN returns an attribute KeyValue conforming to the\n// \"aws.ecs.task.arn\" semantic conventions. It represents the ARN of an [ECS\n// task\n// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html).\nfunc AWSECSTaskARN(val string) attribute.KeyValue {\n\treturn AWSECSTaskARNKey.String(val)\n}\n\n// AWSECSTaskFamily returns an attribute KeyValue conforming to the\n// \"aws.ecs.task.family\" semantic conventions. It represents the task\n// definition family this task definition is a member of.\nfunc AWSECSTaskFamily(val string) attribute.KeyValue {\n\treturn AWSECSTaskFamilyKey.String(val)\n}\n\n// AWSECSTaskRevision returns an attribute KeyValue conforming to the\n// \"aws.ecs.task.revision\" semantic conventions. It represents the revision for\n// this task definition.\nfunc AWSECSTaskRevision(val string) attribute.KeyValue {\n\treturn AWSECSTaskRevisionKey.String(val)\n}\n\n// Resources used by AWS Elastic Kubernetes Service (EKS).\nconst (\n\t// AWSEKSClusterARNKey is the attribute Key conforming to the\n\t// \"aws.eks.cluster.arn\" semantic conventions. It represents the ARN of an\n\t// EKS cluster.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'\n\tAWSEKSClusterARNKey = attribute.Key(\"aws.eks.cluster.arn\")\n)\n\n// AWSEKSClusterARN returns an attribute KeyValue conforming to the\n// \"aws.eks.cluster.arn\" semantic conventions. It represents the ARN of an EKS\n// cluster.\nfunc AWSEKSClusterARN(val string) attribute.KeyValue {\n\treturn AWSEKSClusterARNKey.String(val)\n}\n\n// Resources specific to Amazon Web Services.\nconst (\n\t// AWSLogGroupNamesKey is the attribute Key conforming to the\n\t// \"aws.log.group.names\" semantic conventions. It represents the name(s) of\n\t// the AWS log group(s) an application is writing to.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '/aws/lambda/my-function', 'opentelemetry-service'\n\t// Note: Multiple log groups must be supported for cases like\n\t// multi-container applications, where a single application has sidecar\n\t// containers, and each write to their own log group.\n\tAWSLogGroupNamesKey = attribute.Key(\"aws.log.group.names\")\n\n\t// AWSLogGroupARNsKey is the attribute Key conforming to the\n\t// \"aws.log.group.arns\" semantic conventions. It represents the Amazon\n\t// Resource Name(s) (ARN) of the AWS log group(s).\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples:\n\t// 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*'\n\t// Note: See the [log group ARN format\n\t// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n\tAWSLogGroupARNsKey = attribute.Key(\"aws.log.group.arns\")\n\n\t// AWSLogStreamNamesKey is the attribute Key conforming to the\n\t// \"aws.log.stream.names\" semantic conventions. It represents the name(s)\n\t// of the AWS log stream(s) an application is writing to.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'\n\tAWSLogStreamNamesKey = attribute.Key(\"aws.log.stream.names\")\n\n\t// AWSLogStreamARNsKey is the attribute Key conforming to the\n\t// \"aws.log.stream.arns\" semantic conventions. It represents the ARN(s) of\n\t// the AWS log stream(s).\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples:\n\t// 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'\n\t// Note: See the [log stream ARN format\n\t// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n\t// One log group can contain several log streams, so these ARNs necessarily\n\t// identify both a log group and a log stream.\n\tAWSLogStreamARNsKey = attribute.Key(\"aws.log.stream.arns\")\n)\n\n// AWSLogGroupNames returns an attribute KeyValue conforming to the\n// \"aws.log.group.names\" semantic conventions. It represents the name(s) of the\n// AWS log group(s) an application is writing to.\nfunc AWSLogGroupNames(val ...string) attribute.KeyValue {\n\treturn AWSLogGroupNamesKey.StringSlice(val)\n}\n\n// AWSLogGroupARNs returns an attribute KeyValue conforming to the\n// \"aws.log.group.arns\" semantic conventions. It represents the Amazon Resource\n// Name(s) (ARN) of the AWS log group(s).\nfunc AWSLogGroupARNs(val ...string) attribute.KeyValue {\n\treturn AWSLogGroupARNsKey.StringSlice(val)\n}\n\n// AWSLogStreamNames returns an attribute KeyValue conforming to the\n// \"aws.log.stream.names\" semantic conventions. It represents the name(s) of\n// the AWS log stream(s) an application is writing to.\nfunc AWSLogStreamNames(val ...string) attribute.KeyValue {\n\treturn AWSLogStreamNamesKey.StringSlice(val)\n}\n\n// AWSLogStreamARNs returns an attribute KeyValue conforming to the\n// \"aws.log.stream.arns\" semantic conventions. It represents the ARN(s) of the\n// AWS log stream(s).\nfunc AWSLogStreamARNs(val ...string) attribute.KeyValue {\n\treturn AWSLogStreamARNsKey.StringSlice(val)\n}\n\n// Heroku dyno metadata\nconst (\n\t// HerokuReleaseCreationTimestampKey is the attribute Key conforming to the\n\t// \"heroku.release.creation_timestamp\" semantic conventions. It represents\n\t// the time and date the release was created\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2022-10-23T18:00:42Z'\n\tHerokuReleaseCreationTimestampKey = attribute.Key(\"heroku.release.creation_timestamp\")\n\n\t// HerokuReleaseCommitKey is the attribute Key conforming to the\n\t// \"heroku.release.commit\" semantic conventions. It represents the commit\n\t// hash for the current release\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'e6134959463efd8966b20e75b913cafe3f5ec'\n\tHerokuReleaseCommitKey = attribute.Key(\"heroku.release.commit\")\n\n\t// HerokuAppIDKey is the attribute Key conforming to the \"heroku.app.id\"\n\t// semantic conventions. It represents the unique identifier for the\n\t// application\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2daa2797-e42b-4624-9322-ec3f968df4da'\n\tHerokuAppIDKey = attribute.Key(\"heroku.app.id\")\n)\n\n// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming\n// to the \"heroku.release.creation_timestamp\" semantic conventions. It\n// represents the time and date the release was created\nfunc HerokuReleaseCreationTimestamp(val string) attribute.KeyValue {\n\treturn HerokuReleaseCreationTimestampKey.String(val)\n}\n\n// HerokuReleaseCommit returns an attribute KeyValue conforming to the\n// \"heroku.release.commit\" semantic conventions. It represents the commit hash\n// for the current release\nfunc HerokuReleaseCommit(val string) attribute.KeyValue {\n\treturn HerokuReleaseCommitKey.String(val)\n}\n\n// HerokuAppID returns an attribute KeyValue conforming to the\n// \"heroku.app.id\" semantic conventions. It represents the unique identifier\n// for the application\nfunc HerokuAppID(val string) attribute.KeyValue {\n\treturn HerokuAppIDKey.String(val)\n}\n\n// A container instance.\nconst (\n\t// ContainerNameKey is the attribute Key conforming to the \"container.name\"\n\t// semantic conventions. It represents the container name used by container\n\t// runtime.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry-autoconf'\n\tContainerNameKey = attribute.Key(\"container.name\")\n\n\t// ContainerIDKey is the attribute Key conforming to the \"container.id\"\n\t// semantic conventions. It represents the container ID. Usually a UUID, as\n\t// for example used to [identify Docker\n\t// containers](https://docs.docker.com/engine/reference/run/#container-identification).\n\t// The UUID might be abbreviated.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'a3bf90e006b2'\n\tContainerIDKey = attribute.Key(\"container.id\")\n\n\t// ContainerRuntimeKey is the attribute Key conforming to the\n\t// \"container.runtime\" semantic conventions. It represents the container\n\t// runtime managing this container.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'docker', 'containerd', 'rkt'\n\tContainerRuntimeKey = attribute.Key(\"container.runtime\")\n\n\t// ContainerImageNameKey is the attribute Key conforming to the\n\t// \"container.image.name\" semantic conventions. It represents the name of\n\t// the image the container was built on.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'gcr.io/opentelemetry/operator'\n\tContainerImageNameKey = attribute.Key(\"container.image.name\")\n\n\t// ContainerImageTagKey is the attribute Key conforming to the\n\t// \"container.image.tag\" semantic conventions. It represents the container\n\t// image tag.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '0.1'\n\tContainerImageTagKey = attribute.Key(\"container.image.tag\")\n)\n\n// ContainerName returns an attribute KeyValue conforming to the\n// \"container.name\" semantic conventions. It represents the container name used\n// by container runtime.\nfunc ContainerName(val string) attribute.KeyValue {\n\treturn ContainerNameKey.String(val)\n}\n\n// ContainerID returns an attribute KeyValue conforming to the\n// \"container.id\" semantic conventions. It represents the container ID. Usually\n// a UUID, as for example used to [identify Docker\n// containers](https://docs.docker.com/engine/reference/run/#container-identification).\n// The UUID might be abbreviated.\nfunc ContainerID(val string) attribute.KeyValue {\n\treturn ContainerIDKey.String(val)\n}\n\n// ContainerRuntime returns an attribute KeyValue conforming to the\n// \"container.runtime\" semantic conventions. It represents the container\n// runtime managing this container.\nfunc ContainerRuntime(val string) attribute.KeyValue {\n\treturn ContainerRuntimeKey.String(val)\n}\n\n// ContainerImageName returns an attribute KeyValue conforming to the\n// \"container.image.name\" semantic conventions. It represents the name of the\n// image the container was built on.\nfunc ContainerImageName(val string) attribute.KeyValue {\n\treturn ContainerImageNameKey.String(val)\n}\n\n// ContainerImageTag returns an attribute KeyValue conforming to the\n// \"container.image.tag\" semantic conventions. It represents the container\n// image tag.\nfunc ContainerImageTag(val string) attribute.KeyValue {\n\treturn ContainerImageTagKey.String(val)\n}\n\n// The software deployment.\nconst (\n\t// DeploymentEnvironmentKey is the attribute Key conforming to the\n\t// \"deployment.environment\" semantic conventions. It represents the name of\n\t// the [deployment\n\t// environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka\n\t// deployment tier).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'staging', 'production'\n\tDeploymentEnvironmentKey = attribute.Key(\"deployment.environment\")\n)\n\n// DeploymentEnvironment returns an attribute KeyValue conforming to the\n// \"deployment.environment\" semantic conventions. It represents the name of the\n// [deployment\n// environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka\n// deployment tier).\nfunc DeploymentEnvironment(val string) attribute.KeyValue {\n\treturn DeploymentEnvironmentKey.String(val)\n}\n\n// The device on which the process represented by this resource is running.\nconst (\n\t// DeviceIDKey is the attribute Key conforming to the \"device.id\" semantic\n\t// conventions. It represents a unique identifier representing the device\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092'\n\t// Note: The device identifier MUST only be defined using the values\n\t// outlined below. This value is not an advertising identifier and MUST NOT\n\t// be used as such. On iOS (Swift or Objective-C), this value MUST be equal\n\t// to the [vendor\n\t// identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor).\n\t// On Android (Java or Kotlin), this value MUST be equal to the Firebase\n\t// Installation ID or a globally unique UUID which is persisted across\n\t// sessions in your application. More information can be found\n\t// [here](https://developer.android.com/training/articles/user-data-ids) on\n\t// best practices and exact implementation details. Caution should be taken\n\t// when storing personal data or anything which can identify a user. GDPR\n\t// and data protection laws may apply, ensure you do your own due\n\t// diligence.\n\tDeviceIDKey = attribute.Key(\"device.id\")\n\n\t// DeviceModelIdentifierKey is the attribute Key conforming to the\n\t// \"device.model.identifier\" semantic conventions. It represents the model\n\t// identifier for the device\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'iPhone3,4', 'SM-G920F'\n\t// Note: It's recommended this value represents a machine readable version\n\t// of the model identifier rather than the market or consumer-friendly name\n\t// of the device.\n\tDeviceModelIdentifierKey = attribute.Key(\"device.model.identifier\")\n\n\t// DeviceModelNameKey is the attribute Key conforming to the\n\t// \"device.model.name\" semantic conventions. It represents the marketing\n\t// name for the device model\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6'\n\t// Note: It's recommended this value represents a human readable version of\n\t// the device model rather than a machine readable alternative.\n\tDeviceModelNameKey = attribute.Key(\"device.model.name\")\n\n\t// DeviceManufacturerKey is the attribute Key conforming to the\n\t// \"device.manufacturer\" semantic conventions. It represents the name of\n\t// the device manufacturer\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Apple', 'Samsung'\n\t// Note: The Android OS provides this field via\n\t// [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER).\n\t// iOS apps SHOULD hardcode the value `Apple`.\n\tDeviceManufacturerKey = attribute.Key(\"device.manufacturer\")\n)\n\n// DeviceID returns an attribute KeyValue conforming to the \"device.id\"\n// semantic conventions. It represents a unique identifier representing the\n// device\nfunc DeviceID(val string) attribute.KeyValue {\n\treturn DeviceIDKey.String(val)\n}\n\n// DeviceModelIdentifier returns an attribute KeyValue conforming to the\n// \"device.model.identifier\" semantic conventions. It represents the model\n// identifier for the device\nfunc DeviceModelIdentifier(val string) attribute.KeyValue {\n\treturn DeviceModelIdentifierKey.String(val)\n}\n\n// DeviceModelName returns an attribute KeyValue conforming to the\n// \"device.model.name\" semantic conventions. It represents the marketing name\n// for the device model\nfunc DeviceModelName(val string) attribute.KeyValue {\n\treturn DeviceModelNameKey.String(val)\n}\n\n// DeviceManufacturer returns an attribute KeyValue conforming to the\n// \"device.manufacturer\" semantic conventions. It represents the name of the\n// device manufacturer\nfunc DeviceManufacturer(val string) attribute.KeyValue {\n\treturn DeviceManufacturerKey.String(val)\n}\n\n// A serverless instance.\nconst (\n\t// FaaSNameKey is the attribute Key conforming to the \"faas.name\" semantic\n\t// conventions. It represents the name of the single function that this\n\t// runtime instance executes.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'my-function', 'myazurefunctionapp/some-function-name'\n\t// Note: This is the name of the function as configured/deployed on the\n\t// FaaS\n\t// platform and is usually different from the name of the callback\n\t// function (which may be stored in the\n\t// [`code.namespace`/`code.function`](../../trace/semantic_conventions/span-general.md#source-code-attributes)\n\t// span attributes).\n\t//\n\t// For some cloud providers, the above definition is ambiguous. The\n\t// following\n\t// definition of function name MUST be used for this attribute\n\t// (and consequently the span name) for the listed cloud\n\t// providers/products:\n\t//\n\t// * **Azure:**  The full name `<FUNCAPP>/<FUNC>`, i.e., function app name\n\t//   followed by a forward slash followed by the function name (this form\n\t//   can also be seen in the resource JSON for the function).\n\t//   This means that a span attribute MUST be used, as an Azure function\n\t//   app can host multiple functions that would usually share\n\t//   a TracerProvider (see also the `cloud.resource_id` attribute).\n\tFaaSNameKey = attribute.Key(\"faas.name\")\n\n\t// FaaSVersionKey is the attribute Key conforming to the \"faas.version\"\n\t// semantic conventions. It represents the immutable version of the\n\t// function being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '26', 'pinkfroid-00002'\n\t// Note: Depending on the cloud provider and platform, use:\n\t//\n\t// * **AWS Lambda:** The [function\n\t// version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)\n\t//   (an integer represented as a decimal string).\n\t// * **Google Cloud Run:** The\n\t// [revision](https://cloud.google.com/run/docs/managing/revisions)\n\t//   (i.e., the function name plus the revision suffix).\n\t// * **Google Cloud Functions:** The value of the\n\t//   [`K_REVISION` environment\n\t// variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically).\n\t// * **Azure Functions:** Not applicable. Do not set this attribute.\n\tFaaSVersionKey = attribute.Key(\"faas.version\")\n\n\t// FaaSInstanceKey is the attribute Key conforming to the \"faas.instance\"\n\t// semantic conventions. It represents the execution environment ID as a\n\t// string, that will be potentially reused for other invocations to the\n\t// same function/function version.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de'\n\t// Note: * **AWS Lambda:** Use the (full) log stream name.\n\tFaaSInstanceKey = attribute.Key(\"faas.instance\")\n\n\t// FaaSMaxMemoryKey is the attribute Key conforming to the\n\t// \"faas.max_memory\" semantic conventions. It represents the amount of\n\t// memory available to the serverless function converted to Bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 134217728\n\t// Note: It's recommended to set this attribute since e.g. too little\n\t// memory can easily stop a Java AWS Lambda function from working\n\t// correctly. On AWS Lambda, the environment variable\n\t// `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must\n\t// be multiplied by 1,048,576).\n\tFaaSMaxMemoryKey = attribute.Key(\"faas.max_memory\")\n)\n\n// FaaSName returns an attribute KeyValue conforming to the \"faas.name\"\n// semantic conventions. It represents the name of the single function that\n// this runtime instance executes.\nfunc FaaSName(val string) attribute.KeyValue {\n\treturn FaaSNameKey.String(val)\n}\n\n// FaaSVersion returns an attribute KeyValue conforming to the\n// \"faas.version\" semantic conventions. It represents the immutable version of\n// the function being executed.\nfunc FaaSVersion(val string) attribute.KeyValue {\n\treturn FaaSVersionKey.String(val)\n}\n\n// FaaSInstance returns an attribute KeyValue conforming to the\n// \"faas.instance\" semantic conventions. It represents the execution\n// environment ID as a string, that will be potentially reused for other\n// invocations to the same function/function version.\nfunc FaaSInstance(val string) attribute.KeyValue {\n\treturn FaaSInstanceKey.String(val)\n}\n\n// FaaSMaxMemory returns an attribute KeyValue conforming to the\n// \"faas.max_memory\" semantic conventions. It represents the amount of memory\n// available to the serverless function converted to Bytes.\nfunc FaaSMaxMemory(val int) attribute.KeyValue {\n\treturn FaaSMaxMemoryKey.Int(val)\n}\n\n// A host is defined as a general computing instance.\nconst (\n\t// HostIDKey is the attribute Key conforming to the \"host.id\" semantic\n\t// conventions. It represents the unique host ID. For Cloud, this must be\n\t// the instance_id assigned by the cloud provider. For non-containerized\n\t// systems, this should be the `machine-id`. See the table below for the\n\t// sources to use to determine the `machine-id` based on operating system.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'fdbf79e8af94cb7f9e8df36789187052'\n\tHostIDKey = attribute.Key(\"host.id\")\n\n\t// HostNameKey is the attribute Key conforming to the \"host.name\" semantic\n\t// conventions. It represents the name of the host. On Unix systems, it may\n\t// contain what the hostname command returns, or the fully qualified\n\t// hostname, or another name specified by the user.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry-test'\n\tHostNameKey = attribute.Key(\"host.name\")\n\n\t// HostTypeKey is the attribute Key conforming to the \"host.type\" semantic\n\t// conventions. It represents the type of host. For Cloud, this must be the\n\t// machine type.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'n1-standard-1'\n\tHostTypeKey = attribute.Key(\"host.type\")\n\n\t// HostArchKey is the attribute Key conforming to the \"host.arch\" semantic\n\t// conventions. It represents the CPU architecture the host system is\n\t// running on.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tHostArchKey = attribute.Key(\"host.arch\")\n\n\t// HostImageNameKey is the attribute Key conforming to the\n\t// \"host.image.name\" semantic conventions. It represents the name of the VM\n\t// image or OS install the host was instantiated from.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905'\n\tHostImageNameKey = attribute.Key(\"host.image.name\")\n\n\t// HostImageIDKey is the attribute Key conforming to the \"host.image.id\"\n\t// semantic conventions. It represents the vM image ID. For Cloud, this\n\t// value is from the provider.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'ami-07b06b442921831e5'\n\tHostImageIDKey = attribute.Key(\"host.image.id\")\n\n\t// HostImageVersionKey is the attribute Key conforming to the\n\t// \"host.image.version\" semantic conventions. It represents the version\n\t// string of the VM image as defined in [Version\n\t// Attributes](README.md#version-attributes).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '0.1'\n\tHostImageVersionKey = attribute.Key(\"host.image.version\")\n)\n\nvar (\n\t// AMD64\n\tHostArchAMD64 = HostArchKey.String(\"amd64\")\n\t// ARM32\n\tHostArchARM32 = HostArchKey.String(\"arm32\")\n\t// ARM64\n\tHostArchARM64 = HostArchKey.String(\"arm64\")\n\t// Itanium\n\tHostArchIA64 = HostArchKey.String(\"ia64\")\n\t// 32-bit PowerPC\n\tHostArchPPC32 = HostArchKey.String(\"ppc32\")\n\t// 64-bit PowerPC\n\tHostArchPPC64 = HostArchKey.String(\"ppc64\")\n\t// IBM z/Architecture\n\tHostArchS390x = HostArchKey.String(\"s390x\")\n\t// 32-bit x86\n\tHostArchX86 = HostArchKey.String(\"x86\")\n)\n\n// HostID returns an attribute KeyValue conforming to the \"host.id\" semantic\n// conventions. It represents the unique host ID. For Cloud, this must be the\n// instance_id assigned by the cloud provider. For non-containerized systems,\n// this should be the `machine-id`. See the table below for the sources to use\n// to determine the `machine-id` based on operating system.\nfunc HostID(val string) attribute.KeyValue {\n\treturn HostIDKey.String(val)\n}\n\n// HostName returns an attribute KeyValue conforming to the \"host.name\"\n// semantic conventions. It represents the name of the host. On Unix systems,\n// it may contain what the hostname command returns, or the fully qualified\n// hostname, or another name specified by the user.\nfunc HostName(val string) attribute.KeyValue {\n\treturn HostNameKey.String(val)\n}\n\n// HostType returns an attribute KeyValue conforming to the \"host.type\"\n// semantic conventions. It represents the type of host. For Cloud, this must\n// be the machine type.\nfunc HostType(val string) attribute.KeyValue {\n\treturn HostTypeKey.String(val)\n}\n\n// HostImageName returns an attribute KeyValue conforming to the\n// \"host.image.name\" semantic conventions. It represents the name of the VM\n// image or OS install the host was instantiated from.\nfunc HostImageName(val string) attribute.KeyValue {\n\treturn HostImageNameKey.String(val)\n}\n\n// HostImageID returns an attribute KeyValue conforming to the\n// \"host.image.id\" semantic conventions. It represents the vM image ID. For\n// Cloud, this value is from the provider.\nfunc HostImageID(val string) attribute.KeyValue {\n\treturn HostImageIDKey.String(val)\n}\n\n// HostImageVersion returns an attribute KeyValue conforming to the\n// \"host.image.version\" semantic conventions. It represents the version string\n// of the VM image as defined in [Version\n// Attributes](README.md#version-attributes).\nfunc HostImageVersion(val string) attribute.KeyValue {\n\treturn HostImageVersionKey.String(val)\n}\n\n// A Kubernetes Cluster.\nconst (\n\t// K8SClusterNameKey is the attribute Key conforming to the\n\t// \"k8s.cluster.name\" semantic conventions. It represents the name of the\n\t// cluster.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry-cluster'\n\tK8SClusterNameKey = attribute.Key(\"k8s.cluster.name\")\n)\n\n// K8SClusterName returns an attribute KeyValue conforming to the\n// \"k8s.cluster.name\" semantic conventions. It represents the name of the\n// cluster.\nfunc K8SClusterName(val string) attribute.KeyValue {\n\treturn K8SClusterNameKey.String(val)\n}\n\n// A Kubernetes Node object.\nconst (\n\t// K8SNodeNameKey is the attribute Key conforming to the \"k8s.node.name\"\n\t// semantic conventions. It represents the name of the Node.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'node-1'\n\tK8SNodeNameKey = attribute.Key(\"k8s.node.name\")\n\n\t// K8SNodeUIDKey is the attribute Key conforming to the \"k8s.node.uid\"\n\t// semantic conventions. It represents the UID of the Node.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2'\n\tK8SNodeUIDKey = attribute.Key(\"k8s.node.uid\")\n)\n\n// K8SNodeName returns an attribute KeyValue conforming to the\n// \"k8s.node.name\" semantic conventions. It represents the name of the Node.\nfunc K8SNodeName(val string) attribute.KeyValue {\n\treturn K8SNodeNameKey.String(val)\n}\n\n// K8SNodeUID returns an attribute KeyValue conforming to the \"k8s.node.uid\"\n// semantic conventions. It represents the UID of the Node.\nfunc K8SNodeUID(val string) attribute.KeyValue {\n\treturn K8SNodeUIDKey.String(val)\n}\n\n// A Kubernetes Namespace.\nconst (\n\t// K8SNamespaceNameKey is the attribute Key conforming to the\n\t// \"k8s.namespace.name\" semantic conventions. It represents the name of the\n\t// namespace that the pod is running in.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'default'\n\tK8SNamespaceNameKey = attribute.Key(\"k8s.namespace.name\")\n)\n\n// K8SNamespaceName returns an attribute KeyValue conforming to the\n// \"k8s.namespace.name\" semantic conventions. It represents the name of the\n// namespace that the pod is running in.\nfunc K8SNamespaceName(val string) attribute.KeyValue {\n\treturn K8SNamespaceNameKey.String(val)\n}\n\n// A Kubernetes Pod object.\nconst (\n\t// K8SPodUIDKey is the attribute Key conforming to the \"k8s.pod.uid\"\n\t// semantic conventions. It represents the UID of the Pod.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SPodUIDKey = attribute.Key(\"k8s.pod.uid\")\n\n\t// K8SPodNameKey is the attribute Key conforming to the \"k8s.pod.name\"\n\t// semantic conventions. It represents the name of the Pod.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry-pod-autoconf'\n\tK8SPodNameKey = attribute.Key(\"k8s.pod.name\")\n)\n\n// K8SPodUID returns an attribute KeyValue conforming to the \"k8s.pod.uid\"\n// semantic conventions. It represents the UID of the Pod.\nfunc K8SPodUID(val string) attribute.KeyValue {\n\treturn K8SPodUIDKey.String(val)\n}\n\n// K8SPodName returns an attribute KeyValue conforming to the \"k8s.pod.name\"\n// semantic conventions. It represents the name of the Pod.\nfunc K8SPodName(val string) attribute.KeyValue {\n\treturn K8SPodNameKey.String(val)\n}\n\n// A container in a\n// [PodTemplate](https://kubernetes.io/docs/concepts/workloads/pods/#pod-templates).\nconst (\n\t// K8SContainerNameKey is the attribute Key conforming to the\n\t// \"k8s.container.name\" semantic conventions. It represents the name of the\n\t// Container from Pod specification, must be unique within a Pod. Container\n\t// runtime usually uses different globally unique name (`container.name`).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'redis'\n\tK8SContainerNameKey = attribute.Key(\"k8s.container.name\")\n\n\t// K8SContainerRestartCountKey is the attribute Key conforming to the\n\t// \"k8s.container.restart_count\" semantic conventions. It represents the\n\t// number of times the container was restarted. This attribute can be used\n\t// to identify a particular container (running or stopped) within a\n\t// container spec.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 0, 2\n\tK8SContainerRestartCountKey = attribute.Key(\"k8s.container.restart_count\")\n)\n\n// K8SContainerName returns an attribute KeyValue conforming to the\n// \"k8s.container.name\" semantic conventions. It represents the name of the\n// Container from Pod specification, must be unique within a Pod. Container\n// runtime usually uses different globally unique name (`container.name`).\nfunc K8SContainerName(val string) attribute.KeyValue {\n\treturn K8SContainerNameKey.String(val)\n}\n\n// K8SContainerRestartCount returns an attribute KeyValue conforming to the\n// \"k8s.container.restart_count\" semantic conventions. It represents the number\n// of times the container was restarted. This attribute can be used to identify\n// a particular container (running or stopped) within a container spec.\nfunc K8SContainerRestartCount(val int) attribute.KeyValue {\n\treturn K8SContainerRestartCountKey.Int(val)\n}\n\n// A Kubernetes ReplicaSet object.\nconst (\n\t// K8SReplicaSetUIDKey is the attribute Key conforming to the\n\t// \"k8s.replicaset.uid\" semantic conventions. It represents the UID of the\n\t// ReplicaSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SReplicaSetUIDKey = attribute.Key(\"k8s.replicaset.uid\")\n\n\t// K8SReplicaSetNameKey is the attribute Key conforming to the\n\t// \"k8s.replicaset.name\" semantic conventions. It represents the name of\n\t// the ReplicaSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\tK8SReplicaSetNameKey = attribute.Key(\"k8s.replicaset.name\")\n)\n\n// K8SReplicaSetUID returns an attribute KeyValue conforming to the\n// \"k8s.replicaset.uid\" semantic conventions. It represents the UID of the\n// ReplicaSet.\nfunc K8SReplicaSetUID(val string) attribute.KeyValue {\n\treturn K8SReplicaSetUIDKey.String(val)\n}\n\n// K8SReplicaSetName returns an attribute KeyValue conforming to the\n// \"k8s.replicaset.name\" semantic conventions. It represents the name of the\n// ReplicaSet.\nfunc K8SReplicaSetName(val string) attribute.KeyValue {\n\treturn K8SReplicaSetNameKey.String(val)\n}\n\n// A Kubernetes Deployment object.\nconst (\n\t// K8SDeploymentUIDKey is the attribute Key conforming to the\n\t// \"k8s.deployment.uid\" semantic conventions. It represents the UID of the\n\t// Deployment.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SDeploymentUIDKey = attribute.Key(\"k8s.deployment.uid\")\n\n\t// K8SDeploymentNameKey is the attribute Key conforming to the\n\t// \"k8s.deployment.name\" semantic conventions. It represents the name of\n\t// the Deployment.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\tK8SDeploymentNameKey = attribute.Key(\"k8s.deployment.name\")\n)\n\n// K8SDeploymentUID returns an attribute KeyValue conforming to the\n// \"k8s.deployment.uid\" semantic conventions. It represents the UID of the\n// Deployment.\nfunc K8SDeploymentUID(val string) attribute.KeyValue {\n\treturn K8SDeploymentUIDKey.String(val)\n}\n\n// K8SDeploymentName returns an attribute KeyValue conforming to the\n// \"k8s.deployment.name\" semantic conventions. It represents the name of the\n// Deployment.\nfunc K8SDeploymentName(val string) attribute.KeyValue {\n\treturn K8SDeploymentNameKey.String(val)\n}\n\n// A Kubernetes StatefulSet object.\nconst (\n\t// K8SStatefulSetUIDKey is the attribute Key conforming to the\n\t// \"k8s.statefulset.uid\" semantic conventions. It represents the UID of the\n\t// StatefulSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SStatefulSetUIDKey = attribute.Key(\"k8s.statefulset.uid\")\n\n\t// K8SStatefulSetNameKey is the attribute Key conforming to the\n\t// \"k8s.statefulset.name\" semantic conventions. It represents the name of\n\t// the StatefulSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\tK8SStatefulSetNameKey = attribute.Key(\"k8s.statefulset.name\")\n)\n\n// K8SStatefulSetUID returns an attribute KeyValue conforming to the\n// \"k8s.statefulset.uid\" semantic conventions. It represents the UID of the\n// StatefulSet.\nfunc K8SStatefulSetUID(val string) attribute.KeyValue {\n\treturn K8SStatefulSetUIDKey.String(val)\n}\n\n// K8SStatefulSetName returns an attribute KeyValue conforming to the\n// \"k8s.statefulset.name\" semantic conventions. It represents the name of the\n// StatefulSet.\nfunc K8SStatefulSetName(val string) attribute.KeyValue {\n\treturn K8SStatefulSetNameKey.String(val)\n}\n\n// A Kubernetes DaemonSet object.\nconst (\n\t// K8SDaemonSetUIDKey is the attribute Key conforming to the\n\t// \"k8s.daemonset.uid\" semantic conventions. It represents the UID of the\n\t// DaemonSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SDaemonSetUIDKey = attribute.Key(\"k8s.daemonset.uid\")\n\n\t// K8SDaemonSetNameKey is the attribute Key conforming to the\n\t// \"k8s.daemonset.name\" semantic conventions. It represents the name of the\n\t// DaemonSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\tK8SDaemonSetNameKey = attribute.Key(\"k8s.daemonset.name\")\n)\n\n// K8SDaemonSetUID returns an attribute KeyValue conforming to the\n// \"k8s.daemonset.uid\" semantic conventions. It represents the UID of the\n// DaemonSet.\nfunc K8SDaemonSetUID(val string) attribute.KeyValue {\n\treturn K8SDaemonSetUIDKey.String(val)\n}\n\n// K8SDaemonSetName returns an attribute KeyValue conforming to the\n// \"k8s.daemonset.name\" semantic conventions. It represents the name of the\n// DaemonSet.\nfunc K8SDaemonSetName(val string) attribute.KeyValue {\n\treturn K8SDaemonSetNameKey.String(val)\n}\n\n// A Kubernetes Job object.\nconst (\n\t// K8SJobUIDKey is the attribute Key conforming to the \"k8s.job.uid\"\n\t// semantic conventions. It represents the UID of the Job.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SJobUIDKey = attribute.Key(\"k8s.job.uid\")\n\n\t// K8SJobNameKey is the attribute Key conforming to the \"k8s.job.name\"\n\t// semantic conventions. It represents the name of the Job.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\tK8SJobNameKey = attribute.Key(\"k8s.job.name\")\n)\n\n// K8SJobUID returns an attribute KeyValue conforming to the \"k8s.job.uid\"\n// semantic conventions. It represents the UID of the Job.\nfunc K8SJobUID(val string) attribute.KeyValue {\n\treturn K8SJobUIDKey.String(val)\n}\n\n// K8SJobName returns an attribute KeyValue conforming to the \"k8s.job.name\"\n// semantic conventions. It represents the name of the Job.\nfunc K8SJobName(val string) attribute.KeyValue {\n\treturn K8SJobNameKey.String(val)\n}\n\n// A Kubernetes CronJob object.\nconst (\n\t// K8SCronJobUIDKey is the attribute Key conforming to the\n\t// \"k8s.cronjob.uid\" semantic conventions. It represents the UID of the\n\t// CronJob.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SCronJobUIDKey = attribute.Key(\"k8s.cronjob.uid\")\n\n\t// K8SCronJobNameKey is the attribute Key conforming to the\n\t// \"k8s.cronjob.name\" semantic conventions. It represents the name of the\n\t// CronJob.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\tK8SCronJobNameKey = attribute.Key(\"k8s.cronjob.name\")\n)\n\n// K8SCronJobUID returns an attribute KeyValue conforming to the\n// \"k8s.cronjob.uid\" semantic conventions. It represents the UID of the\n// CronJob.\nfunc K8SCronJobUID(val string) attribute.KeyValue {\n\treturn K8SCronJobUIDKey.String(val)\n}\n\n// K8SCronJobName returns an attribute KeyValue conforming to the\n// \"k8s.cronjob.name\" semantic conventions. It represents the name of the\n// CronJob.\nfunc K8SCronJobName(val string) attribute.KeyValue {\n\treturn K8SCronJobNameKey.String(val)\n}\n\n// The operating system (OS) on which the process represented by this resource\n// is running.\nconst (\n\t// OSTypeKey is the attribute Key conforming to the \"os.type\" semantic\n\t// conventions. It represents the operating system type.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\tOSTypeKey = attribute.Key(\"os.type\")\n\n\t// OSDescriptionKey is the attribute Key conforming to the \"os.description\"\n\t// semantic conventions. It represents the human readable (not intended to\n\t// be parsed) OS version information, like e.g. reported by `ver` or\n\t// `lsb_release -a` commands.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1\n\t// LTS'\n\tOSDescriptionKey = attribute.Key(\"os.description\")\n\n\t// OSNameKey is the attribute Key conforming to the \"os.name\" semantic\n\t// conventions. It represents the human readable operating system name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'iOS', 'Android', 'Ubuntu'\n\tOSNameKey = attribute.Key(\"os.name\")\n\n\t// OSVersionKey is the attribute Key conforming to the \"os.version\"\n\t// semantic conventions. It represents the version string of the operating\n\t// system as defined in [Version\n\t// Attributes](../../resource/semantic_conventions/README.md#version-attributes).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '14.2.1', '18.04.1'\n\tOSVersionKey = attribute.Key(\"os.version\")\n)\n\nvar (\n\t// Microsoft Windows\n\tOSTypeWindows = OSTypeKey.String(\"windows\")\n\t// Linux\n\tOSTypeLinux = OSTypeKey.String(\"linux\")\n\t// Apple Darwin\n\tOSTypeDarwin = OSTypeKey.String(\"darwin\")\n\t// FreeBSD\n\tOSTypeFreeBSD = OSTypeKey.String(\"freebsd\")\n\t// NetBSD\n\tOSTypeNetBSD = OSTypeKey.String(\"netbsd\")\n\t// OpenBSD\n\tOSTypeOpenBSD = OSTypeKey.String(\"openbsd\")\n\t// DragonFly BSD\n\tOSTypeDragonflyBSD = OSTypeKey.String(\"dragonflybsd\")\n\t// HP-UX (Hewlett Packard Unix)\n\tOSTypeHPUX = OSTypeKey.String(\"hpux\")\n\t// AIX (Advanced Interactive eXecutive)\n\tOSTypeAIX = OSTypeKey.String(\"aix\")\n\t// SunOS, Oracle Solaris\n\tOSTypeSolaris = OSTypeKey.String(\"solaris\")\n\t// IBM z/OS\n\tOSTypeZOS = OSTypeKey.String(\"z_os\")\n)\n\n// OSDescription returns an attribute KeyValue conforming to the\n// \"os.description\" semantic conventions. It represents the human readable (not\n// intended to be parsed) OS version information, like e.g. reported by `ver`\n// or `lsb_release -a` commands.\nfunc OSDescription(val string) attribute.KeyValue {\n\treturn OSDescriptionKey.String(val)\n}\n\n// OSName returns an attribute KeyValue conforming to the \"os.name\" semantic\n// conventions. It represents the human readable operating system name.\nfunc OSName(val string) attribute.KeyValue {\n\treturn OSNameKey.String(val)\n}\n\n// OSVersion returns an attribute KeyValue conforming to the \"os.version\"\n// semantic conventions. It represents the version string of the operating\n// system as defined in [Version\n// Attributes](../../resource/semantic_conventions/README.md#version-attributes).\nfunc OSVersion(val string) attribute.KeyValue {\n\treturn OSVersionKey.String(val)\n}\n\n// An operating system process.\nconst (\n\t// ProcessPIDKey is the attribute Key conforming to the \"process.pid\"\n\t// semantic conventions. It represents the process identifier (PID).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 1234\n\tProcessPIDKey = attribute.Key(\"process.pid\")\n\n\t// ProcessParentPIDKey is the attribute Key conforming to the\n\t// \"process.parent_pid\" semantic conventions. It represents the parent\n\t// Process identifier (PID).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 111\n\tProcessParentPIDKey = attribute.Key(\"process.parent_pid\")\n\n\t// ProcessExecutableNameKey is the attribute Key conforming to the\n\t// \"process.executable.name\" semantic conventions. It represents the name\n\t// of the process executable. On Linux based systems, can be set to the\n\t// `Name` in `proc/[pid]/status`. On Windows, can be set to the base name\n\t// of `GetProcessImageFileNameW`.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (See alternative attributes\n\t// below.)\n\t// Stability: stable\n\t// Examples: 'otelcol'\n\tProcessExecutableNameKey = attribute.Key(\"process.executable.name\")\n\n\t// ProcessExecutablePathKey is the attribute Key conforming to the\n\t// \"process.executable.path\" semantic conventions. It represents the full\n\t// path to the process executable. On Linux based systems, can be set to\n\t// the target of `proc/[pid]/exe`. On Windows, can be set to the result of\n\t// `GetProcessImageFileNameW`.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (See alternative attributes\n\t// below.)\n\t// Stability: stable\n\t// Examples: '/usr/bin/cmd/otelcol'\n\tProcessExecutablePathKey = attribute.Key(\"process.executable.path\")\n\n\t// ProcessCommandKey is the attribute Key conforming to the\n\t// \"process.command\" semantic conventions. It represents the command used\n\t// to launch the process (i.e. the command name). On Linux based systems,\n\t// can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can\n\t// be set to the first parameter extracted from `GetCommandLineW`.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (See alternative attributes\n\t// below.)\n\t// Stability: stable\n\t// Examples: 'cmd/otelcol'\n\tProcessCommandKey = attribute.Key(\"process.command\")\n\n\t// ProcessCommandLineKey is the attribute Key conforming to the\n\t// \"process.command_line\" semantic conventions. It represents the full\n\t// command used to launch the process as a single string representing the\n\t// full command. On Windows, can be set to the result of `GetCommandLineW`.\n\t// Do not set this if you have to assemble it just for monitoring; use\n\t// `process.command_args` instead.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (See alternative attributes\n\t// below.)\n\t// Stability: stable\n\t// Examples: 'C:\\\\cmd\\\\otecol --config=\"my directory\\\\config.yaml\"'\n\tProcessCommandLineKey = attribute.Key(\"process.command_line\")\n\n\t// ProcessCommandArgsKey is the attribute Key conforming to the\n\t// \"process.command_args\" semantic conventions. It represents the all the\n\t// command arguments (including the command/executable itself) as received\n\t// by the process. On Linux-based systems (and some other Unixoid systems\n\t// supporting procfs), can be set according to the list of null-delimited\n\t// strings extracted from `proc/[pid]/cmdline`. For libc-based executables,\n\t// this would be the full argv vector passed to `main`.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: ConditionallyRequired (See alternative attributes\n\t// below.)\n\t// Stability: stable\n\t// Examples: 'cmd/otecol', '--config=config.yaml'\n\tProcessCommandArgsKey = attribute.Key(\"process.command_args\")\n\n\t// ProcessOwnerKey is the attribute Key conforming to the \"process.owner\"\n\t// semantic conventions. It represents the username of the user that owns\n\t// the process.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'root'\n\tProcessOwnerKey = attribute.Key(\"process.owner\")\n)\n\n// ProcessPID returns an attribute KeyValue conforming to the \"process.pid\"\n// semantic conventions. It represents the process identifier (PID).\nfunc ProcessPID(val int) attribute.KeyValue {\n\treturn ProcessPIDKey.Int(val)\n}\n\n// ProcessParentPID returns an attribute KeyValue conforming to the\n// \"process.parent_pid\" semantic conventions. It represents the parent Process\n// identifier (PID).\nfunc ProcessParentPID(val int) attribute.KeyValue {\n\treturn ProcessParentPIDKey.Int(val)\n}\n\n// ProcessExecutableName returns an attribute KeyValue conforming to the\n// \"process.executable.name\" semantic conventions. It represents the name of\n// the process executable. On Linux based systems, can be set to the `Name` in\n// `proc/[pid]/status`. On Windows, can be set to the base name of\n// `GetProcessImageFileNameW`.\nfunc ProcessExecutableName(val string) attribute.KeyValue {\n\treturn ProcessExecutableNameKey.String(val)\n}\n\n// ProcessExecutablePath returns an attribute KeyValue conforming to the\n// \"process.executable.path\" semantic conventions. It represents the full path\n// to the process executable. On Linux based systems, can be set to the target\n// of `proc/[pid]/exe`. On Windows, can be set to the result of\n// `GetProcessImageFileNameW`.\nfunc ProcessExecutablePath(val string) attribute.KeyValue {\n\treturn ProcessExecutablePathKey.String(val)\n}\n\n// ProcessCommand returns an attribute KeyValue conforming to the\n// \"process.command\" semantic conventions. It represents the command used to\n// launch the process (i.e. the command name). On Linux based systems, can be\n// set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to\n// the first parameter extracted from `GetCommandLineW`.\nfunc ProcessCommand(val string) attribute.KeyValue {\n\treturn ProcessCommandKey.String(val)\n}\n\n// ProcessCommandLine returns an attribute KeyValue conforming to the\n// \"process.command_line\" semantic conventions. It represents the full command\n// used to launch the process as a single string representing the full command.\n// On Windows, can be set to the result of `GetCommandLineW`. Do not set this\n// if you have to assemble it just for monitoring; use `process.command_args`\n// instead.\nfunc ProcessCommandLine(val string) attribute.KeyValue {\n\treturn ProcessCommandLineKey.String(val)\n}\n\n// ProcessCommandArgs returns an attribute KeyValue conforming to the\n// \"process.command_args\" semantic conventions. It represents the all the\n// command arguments (including the command/executable itself) as received by\n// the process. On Linux-based systems (and some other Unixoid systems\n// supporting procfs), can be set according to the list of null-delimited\n// strings extracted from `proc/[pid]/cmdline`. For libc-based executables,\n// this would be the full argv vector passed to `main`.\nfunc ProcessCommandArgs(val ...string) attribute.KeyValue {\n\treturn ProcessCommandArgsKey.StringSlice(val)\n}\n\n// ProcessOwner returns an attribute KeyValue conforming to the\n// \"process.owner\" semantic conventions. It represents the username of the user\n// that owns the process.\nfunc ProcessOwner(val string) attribute.KeyValue {\n\treturn ProcessOwnerKey.String(val)\n}\n\n// The single (language) runtime instance which is monitored.\nconst (\n\t// ProcessRuntimeNameKey is the attribute Key conforming to the\n\t// \"process.runtime.name\" semantic conventions. It represents the name of\n\t// the runtime of this process. For compiled native binaries, this SHOULD\n\t// be the name of the compiler.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'OpenJDK Runtime Environment'\n\tProcessRuntimeNameKey = attribute.Key(\"process.runtime.name\")\n\n\t// ProcessRuntimeVersionKey is the attribute Key conforming to the\n\t// \"process.runtime.version\" semantic conventions. It represents the\n\t// version of the runtime of this process, as returned by the runtime\n\t// without modification.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '14.0.2'\n\tProcessRuntimeVersionKey = attribute.Key(\"process.runtime.version\")\n\n\t// ProcessRuntimeDescriptionKey is the attribute Key conforming to the\n\t// \"process.runtime.description\" semantic conventions. It represents an\n\t// additional description about the runtime of the process, for example a\n\t// specific vendor customization of the runtime environment.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0'\n\tProcessRuntimeDescriptionKey = attribute.Key(\"process.runtime.description\")\n)\n\n// ProcessRuntimeName returns an attribute KeyValue conforming to the\n// \"process.runtime.name\" semantic conventions. It represents the name of the\n// runtime of this process. For compiled native binaries, this SHOULD be the\n// name of the compiler.\nfunc ProcessRuntimeName(val string) attribute.KeyValue {\n\treturn ProcessRuntimeNameKey.String(val)\n}\n\n// ProcessRuntimeVersion returns an attribute KeyValue conforming to the\n// \"process.runtime.version\" semantic conventions. It represents the version of\n// the runtime of this process, as returned by the runtime without\n// modification.\nfunc ProcessRuntimeVersion(val string) attribute.KeyValue {\n\treturn ProcessRuntimeVersionKey.String(val)\n}\n\n// ProcessRuntimeDescription returns an attribute KeyValue conforming to the\n// \"process.runtime.description\" semantic conventions. It represents an\n// additional description about the runtime of the process, for example a\n// specific vendor customization of the runtime environment.\nfunc ProcessRuntimeDescription(val string) attribute.KeyValue {\n\treturn ProcessRuntimeDescriptionKey.String(val)\n}\n\n// A service instance.\nconst (\n\t// ServiceNameKey is the attribute Key conforming to the \"service.name\"\n\t// semantic conventions. It represents the logical name of the service.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'shoppingcart'\n\t// Note: MUST be the same for all instances of horizontally scaled\n\t// services. If the value was not specified, SDKs MUST fallback to\n\t// `unknown_service:` concatenated with\n\t// [`process.executable.name`](process.md#process), e.g.\n\t// `unknown_service:bash`. If `process.executable.name` is not available,\n\t// the value MUST be set to `unknown_service`.\n\tServiceNameKey = attribute.Key(\"service.name\")\n)\n\n// ServiceName returns an attribute KeyValue conforming to the\n// \"service.name\" semantic conventions. It represents the logical name of the\n// service.\nfunc ServiceName(val string) attribute.KeyValue {\n\treturn ServiceNameKey.String(val)\n}\n\n// A service instance.\nconst (\n\t// ServiceNamespaceKey is the attribute Key conforming to the\n\t// \"service.namespace\" semantic conventions. It represents a namespace for\n\t// `service.name`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Shop'\n\t// Note: A string value having a meaning that helps to distinguish a group\n\t// of services, for example the team name that owns a group of services.\n\t// `service.name` is expected to be unique within the same namespace. If\n\t// `service.namespace` is not specified in the Resource then `service.name`\n\t// is expected to be unique for all services that have no explicit\n\t// namespace defined (so the empty/unspecified namespace is simply one more\n\t// valid namespace). Zero-length namespace string is assumed equal to\n\t// unspecified namespace.\n\tServiceNamespaceKey = attribute.Key(\"service.namespace\")\n\n\t// ServiceInstanceIDKey is the attribute Key conforming to the\n\t// \"service.instance.id\" semantic conventions. It represents the string ID\n\t// of the service instance.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'my-k8s-pod-deployment-1',\n\t// '627cc493-f310-47de-96bd-71410b7dec09'\n\t// Note: MUST be unique for each instance of the same\n\t// `service.namespace,service.name` pair (in other words\n\t// `service.namespace,service.name,service.instance.id` triplet MUST be\n\t// globally unique). The ID helps to distinguish instances of the same\n\t// service that exist at the same time (e.g. instances of a horizontally\n\t// scaled service). It is preferable for the ID to be persistent and stay\n\t// the same for the lifetime of the service instance, however it is\n\t// acceptable that the ID is ephemeral and changes during important\n\t// lifetime events for the service (e.g. service restarts). If the service\n\t// has no inherent unique ID that can be used as the value of this\n\t// attribute it is recommended to generate a random Version 1 or Version 4\n\t// RFC 4122 UUID (services aiming for reproducible UUIDs may also use\n\t// Version 5, see RFC 4122 for more recommendations).\n\tServiceInstanceIDKey = attribute.Key(\"service.instance.id\")\n\n\t// ServiceVersionKey is the attribute Key conforming to the\n\t// \"service.version\" semantic conventions. It represents the version string\n\t// of the service API or implementation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2.0.0'\n\tServiceVersionKey = attribute.Key(\"service.version\")\n)\n\n// ServiceNamespace returns an attribute KeyValue conforming to the\n// \"service.namespace\" semantic conventions. It represents a namespace for\n// `service.name`.\nfunc ServiceNamespace(val string) attribute.KeyValue {\n\treturn ServiceNamespaceKey.String(val)\n}\n\n// ServiceInstanceID returns an attribute KeyValue conforming to the\n// \"service.instance.id\" semantic conventions. It represents the string ID of\n// the service instance.\nfunc ServiceInstanceID(val string) attribute.KeyValue {\n\treturn ServiceInstanceIDKey.String(val)\n}\n\n// ServiceVersion returns an attribute KeyValue conforming to the\n// \"service.version\" semantic conventions. It represents the version string of\n// the service API or implementation.\nfunc ServiceVersion(val string) attribute.KeyValue {\n\treturn ServiceVersionKey.String(val)\n}\n\n// The telemetry SDK used to capture data recorded by the instrumentation\n// libraries.\nconst (\n\t// TelemetrySDKNameKey is the attribute Key conforming to the\n\t// \"telemetry.sdk.name\" semantic conventions. It represents the name of the\n\t// telemetry SDK as defined above.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\tTelemetrySDKNameKey = attribute.Key(\"telemetry.sdk.name\")\n\n\t// TelemetrySDKLanguageKey is the attribute Key conforming to the\n\t// \"telemetry.sdk.language\" semantic conventions. It represents the\n\t// language of the telemetry SDK.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\tTelemetrySDKLanguageKey = attribute.Key(\"telemetry.sdk.language\")\n\n\t// TelemetrySDKVersionKey is the attribute Key conforming to the\n\t// \"telemetry.sdk.version\" semantic conventions. It represents the version\n\t// string of the telemetry SDK.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: '1.2.3'\n\tTelemetrySDKVersionKey = attribute.Key(\"telemetry.sdk.version\")\n)\n\nvar (\n\t// cpp\n\tTelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String(\"cpp\")\n\t// dotnet\n\tTelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String(\"dotnet\")\n\t// erlang\n\tTelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String(\"erlang\")\n\t// go\n\tTelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String(\"go\")\n\t// java\n\tTelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String(\"java\")\n\t// nodejs\n\tTelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String(\"nodejs\")\n\t// php\n\tTelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String(\"php\")\n\t// python\n\tTelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String(\"python\")\n\t// ruby\n\tTelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String(\"ruby\")\n\t// webjs\n\tTelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String(\"webjs\")\n\t// swift\n\tTelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String(\"swift\")\n)\n\n// TelemetrySDKName returns an attribute KeyValue conforming to the\n// \"telemetry.sdk.name\" semantic conventions. It represents the name of the\n// telemetry SDK as defined above.\nfunc TelemetrySDKName(val string) attribute.KeyValue {\n\treturn TelemetrySDKNameKey.String(val)\n}\n\n// TelemetrySDKVersion returns an attribute KeyValue conforming to the\n// \"telemetry.sdk.version\" semantic conventions. It represents the version\n// string of the telemetry SDK.\nfunc TelemetrySDKVersion(val string) attribute.KeyValue {\n\treturn TelemetrySDKVersionKey.String(val)\n}\n\n// The telemetry SDK used to capture data recorded by the instrumentation\n// libraries.\nconst (\n\t// TelemetryAutoVersionKey is the attribute Key conforming to the\n\t// \"telemetry.auto.version\" semantic conventions. It represents the version\n\t// string of the auto instrumentation agent, if used.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '1.2.3'\n\tTelemetryAutoVersionKey = attribute.Key(\"telemetry.auto.version\")\n)\n\n// TelemetryAutoVersion returns an attribute KeyValue conforming to the\n// \"telemetry.auto.version\" semantic conventions. It represents the version\n// string of the auto instrumentation agent, if used.\nfunc TelemetryAutoVersion(val string) attribute.KeyValue {\n\treturn TelemetryAutoVersionKey.String(val)\n}\n\n// Resource describing the packaged software running the application code. Web\n// engines are typically executed using process.runtime.\nconst (\n\t// WebEngineNameKey is the attribute Key conforming to the \"webengine.name\"\n\t// semantic conventions. It represents the name of the web engine.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'WildFly'\n\tWebEngineNameKey = attribute.Key(\"webengine.name\")\n\n\t// WebEngineVersionKey is the attribute Key conforming to the\n\t// \"webengine.version\" semantic conventions. It represents the version of\n\t// the web engine.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '21.0.0'\n\tWebEngineVersionKey = attribute.Key(\"webengine.version\")\n\n\t// WebEngineDescriptionKey is the attribute Key conforming to the\n\t// \"webengine.description\" semantic conventions. It represents the\n\t// additional description of the web engine (e.g. detailed version and\n\t// edition information).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) -\n\t// 2.2.2.Final'\n\tWebEngineDescriptionKey = attribute.Key(\"webengine.description\")\n)\n\n// WebEngineName returns an attribute KeyValue conforming to the\n// \"webengine.name\" semantic conventions. It represents the name of the web\n// engine.\nfunc WebEngineName(val string) attribute.KeyValue {\n\treturn WebEngineNameKey.String(val)\n}\n\n// WebEngineVersion returns an attribute KeyValue conforming to the\n// \"webengine.version\" semantic conventions. It represents the version of the\n// web engine.\nfunc WebEngineVersion(val string) attribute.KeyValue {\n\treturn WebEngineVersionKey.String(val)\n}\n\n// WebEngineDescription returns an attribute KeyValue conforming to the\n// \"webengine.description\" semantic conventions. It represents the additional\n// description of the web engine (e.g. detailed version and edition\n// information).\nfunc WebEngineDescription(val string) attribute.KeyValue {\n\treturn WebEngineDescriptionKey.String(val)\n}\n\n// Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's\n// concepts.\nconst (\n\t// OTelScopeNameKey is the attribute Key conforming to the\n\t// \"otel.scope.name\" semantic conventions. It represents the name of the\n\t// instrumentation scope - (`InstrumentationScope.Name` in OTLP).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'io.opentelemetry.contrib.mongodb'\n\tOTelScopeNameKey = attribute.Key(\"otel.scope.name\")\n\n\t// OTelScopeVersionKey is the attribute Key conforming to the\n\t// \"otel.scope.version\" semantic conventions. It represents the version of\n\t// the instrumentation scope - (`InstrumentationScope.Version` in OTLP).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '1.0.0'\n\tOTelScopeVersionKey = attribute.Key(\"otel.scope.version\")\n)\n\n// OTelScopeName returns an attribute KeyValue conforming to the\n// \"otel.scope.name\" semantic conventions. It represents the name of the\n// instrumentation scope - (`InstrumentationScope.Name` in OTLP).\nfunc OTelScopeName(val string) attribute.KeyValue {\n\treturn OTelScopeNameKey.String(val)\n}\n\n// OTelScopeVersion returns an attribute KeyValue conforming to the\n// \"otel.scope.version\" semantic conventions. It represents the version of the\n// instrumentation scope - (`InstrumentationScope.Version` in OTLP).\nfunc OTelScopeVersion(val string) attribute.KeyValue {\n\treturn OTelScopeVersionKey.String(val)\n}\n\n// Span attributes used by non-OTLP exporters to represent OpenTelemetry\n// Scope's concepts.\nconst (\n\t// OTelLibraryNameKey is the attribute Key conforming to the\n\t// \"otel.library.name\" semantic conventions. It represents the deprecated,\n\t// use the `otel.scope.name` attribute.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: deprecated\n\t// Examples: 'io.opentelemetry.contrib.mongodb'\n\tOTelLibraryNameKey = attribute.Key(\"otel.library.name\")\n\n\t// OTelLibraryVersionKey is the attribute Key conforming to the\n\t// \"otel.library.version\" semantic conventions. It represents the\n\t// deprecated, use the `otel.scope.version` attribute.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: deprecated\n\t// Examples: '1.0.0'\n\tOTelLibraryVersionKey = attribute.Key(\"otel.library.version\")\n)\n\n// OTelLibraryName returns an attribute KeyValue conforming to the\n// \"otel.library.name\" semantic conventions. It represents the deprecated, use\n// the `otel.scope.name` attribute.\nfunc OTelLibraryName(val string) attribute.KeyValue {\n\treturn OTelLibraryNameKey.String(val)\n}\n\n// OTelLibraryVersion returns an attribute KeyValue conforming to the\n// \"otel.library.version\" semantic conventions. It represents the deprecated,\n// use the `otel.scope.version` attribute.\nfunc OTelLibraryVersion(val string) attribute.KeyValue {\n\treturn OTelLibraryVersionKey.String(val)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/schema.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\n// SchemaURL is the schema URL that matches the version of the semantic conventions\n// that this package defines. Semconv packages starting from v1.4.0 must declare\n// non-empty schema URL in the form https://opentelemetry.io/schemas/<version>\nconst SchemaURL = \"https://opentelemetry.io/schemas/1.20.0\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.20.0/trace.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Code generated from semantic convention specification. DO NOT EDIT.\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.20.0\"\n\nimport \"go.opentelemetry.io/otel/attribute\"\n\n// The shared attributes used to report a single exception associated with a\n// span or log.\nconst (\n\t// ExceptionTypeKey is the attribute Key conforming to the \"exception.type\"\n\t// semantic conventions. It represents the type of the exception (its\n\t// fully-qualified class name, if applicable). The dynamic type of the\n\t// exception should be preferred over the static type in languages that\n\t// support it.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'java.net.ConnectException', 'OSError'\n\tExceptionTypeKey = attribute.Key(\"exception.type\")\n\n\t// ExceptionMessageKey is the attribute Key conforming to the\n\t// \"exception.message\" semantic conventions. It represents the exception\n\t// message.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Division by zero', \"Can't convert 'int' object to str\n\t// implicitly\"\n\tExceptionMessageKey = attribute.Key(\"exception.message\")\n\n\t// ExceptionStacktraceKey is the attribute Key conforming to the\n\t// \"exception.stacktrace\" semantic conventions. It represents a stacktrace\n\t// as a string in the natural representation for the language runtime. The\n\t// representation is to be determined and documented by each language SIG.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Exception in thread \"main\" java.lang.RuntimeException: Test\n\t// exception\\\\n at '\n\t//  'com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\\\n at '\n\t//  'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\\\n at '\n\t//  'com.example.GenerateTrace.main(GenerateTrace.java:5)'\n\tExceptionStacktraceKey = attribute.Key(\"exception.stacktrace\")\n)\n\n// ExceptionType returns an attribute KeyValue conforming to the\n// \"exception.type\" semantic conventions. It represents the type of the\n// exception (its fully-qualified class name, if applicable). The dynamic type\n// of the exception should be preferred over the static type in languages that\n// support it.\nfunc ExceptionType(val string) attribute.KeyValue {\n\treturn ExceptionTypeKey.String(val)\n}\n\n// ExceptionMessage returns an attribute KeyValue conforming to the\n// \"exception.message\" semantic conventions. It represents the exception\n// message.\nfunc ExceptionMessage(val string) attribute.KeyValue {\n\treturn ExceptionMessageKey.String(val)\n}\n\n// ExceptionStacktrace returns an attribute KeyValue conforming to the\n// \"exception.stacktrace\" semantic conventions. It represents a stacktrace as a\n// string in the natural representation for the language runtime. The\n// representation is to be determined and documented by each language SIG.\nfunc ExceptionStacktrace(val string) attribute.KeyValue {\n\treturn ExceptionStacktraceKey.String(val)\n}\n\n// The attributes described in this section are rather generic. They may be\n// used in any Log Record they apply to.\nconst (\n\t// LogRecordUIDKey is the attribute Key conforming to the \"log.record.uid\"\n\t// semantic conventions. It represents a unique identifier for the Log\n\t// Record.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '01ARZ3NDEKTSV4RRFFQ69G5FAV'\n\t// Note: If an id is provided, other log records with the same id will be\n\t// considered duplicates and can be removed safely. This means, that two\n\t// distinguishable log records MUST have different values.\n\t// The id MAY be an [Universally Unique Lexicographically Sortable\n\t// Identifier (ULID)](https://github.com/ulid/spec), but other identifiers\n\t// (e.g. UUID) may be used as needed.\n\tLogRecordUIDKey = attribute.Key(\"log.record.uid\")\n)\n\n// LogRecordUID returns an attribute KeyValue conforming to the\n// \"log.record.uid\" semantic conventions. It represents a unique identifier for\n// the Log Record.\nfunc LogRecordUID(val string) attribute.KeyValue {\n\treturn LogRecordUIDKey.String(val)\n}\n\n// Span attributes used by AWS Lambda (in addition to general `faas`\n// attributes).\nconst (\n\t// AWSLambdaInvokedARNKey is the attribute Key conforming to the\n\t// \"aws.lambda.invoked_arn\" semantic conventions. It represents the full\n\t// invoked ARN as provided on the `Context` passed to the function\n\t// (`Lambda-Runtime-Invoked-Function-ARN` header on the\n\t// `/runtime/invocation/next` applicable).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'arn:aws:lambda:us-east-1:123456:function:myfunction:myalias'\n\t// Note: This may be different from `cloud.resource_id` if an alias is\n\t// involved.\n\tAWSLambdaInvokedARNKey = attribute.Key(\"aws.lambda.invoked_arn\")\n)\n\n// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the\n// \"aws.lambda.invoked_arn\" semantic conventions. It represents the full\n// invoked ARN as provided on the `Context` passed to the function\n// (`Lambda-Runtime-Invoked-Function-ARN` header on the\n// `/runtime/invocation/next` applicable).\nfunc AWSLambdaInvokedARN(val string) attribute.KeyValue {\n\treturn AWSLambdaInvokedARNKey.String(val)\n}\n\n// Attributes for CloudEvents. CloudEvents is a specification on how to define\n// event data in a standard way. These attributes can be attached to spans when\n// performing operations with CloudEvents, regardless of the protocol being\n// used.\nconst (\n\t// CloudeventsEventIDKey is the attribute Key conforming to the\n\t// \"cloudevents.event_id\" semantic conventions. It represents the\n\t// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id)\n\t// uniquely identifies the event.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: '123e4567-e89b-12d3-a456-426614174000', '0001'\n\tCloudeventsEventIDKey = attribute.Key(\"cloudevents.event_id\")\n\n\t// CloudeventsEventSourceKey is the attribute Key conforming to the\n\t// \"cloudevents.event_source\" semantic conventions. It represents the\n\t// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1)\n\t// identifies the context in which an event happened.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'https://github.com/cloudevents',\n\t// '/cloudevents/spec/pull/123', 'my-service'\n\tCloudeventsEventSourceKey = attribute.Key(\"cloudevents.event_source\")\n\n\t// CloudeventsEventSpecVersionKey is the attribute Key conforming to the\n\t// \"cloudevents.event_spec_version\" semantic conventions. It represents the\n\t// [version of the CloudEvents\n\t// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion)\n\t// which the event uses.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '1.0'\n\tCloudeventsEventSpecVersionKey = attribute.Key(\"cloudevents.event_spec_version\")\n\n\t// CloudeventsEventTypeKey is the attribute Key conforming to the\n\t// \"cloudevents.event_type\" semantic conventions. It represents the\n\t// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type)\n\t// contains a value describing the type of event related to the originating\n\t// occurrence.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'com.github.pull_request.opened',\n\t// 'com.example.object.deleted.v2'\n\tCloudeventsEventTypeKey = attribute.Key(\"cloudevents.event_type\")\n\n\t// CloudeventsEventSubjectKey is the attribute Key conforming to the\n\t// \"cloudevents.event_subject\" semantic conventions. It represents the\n\t// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject)\n\t// of the event in the context of the event producer (identified by\n\t// source).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'mynewfile.jpg'\n\tCloudeventsEventSubjectKey = attribute.Key(\"cloudevents.event_subject\")\n)\n\n// CloudeventsEventID returns an attribute KeyValue conforming to the\n// \"cloudevents.event_id\" semantic conventions. It represents the\n// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id)\n// uniquely identifies the event.\nfunc CloudeventsEventID(val string) attribute.KeyValue {\n\treturn CloudeventsEventIDKey.String(val)\n}\n\n// CloudeventsEventSource returns an attribute KeyValue conforming to the\n// \"cloudevents.event_source\" semantic conventions. It represents the\n// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1)\n// identifies the context in which an event happened.\nfunc CloudeventsEventSource(val string) attribute.KeyValue {\n\treturn CloudeventsEventSourceKey.String(val)\n}\n\n// CloudeventsEventSpecVersion returns an attribute KeyValue conforming to\n// the \"cloudevents.event_spec_version\" semantic conventions. It represents the\n// [version of the CloudEvents\n// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion)\n// which the event uses.\nfunc CloudeventsEventSpecVersion(val string) attribute.KeyValue {\n\treturn CloudeventsEventSpecVersionKey.String(val)\n}\n\n// CloudeventsEventType returns an attribute KeyValue conforming to the\n// \"cloudevents.event_type\" semantic conventions. It represents the\n// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type)\n// contains a value describing the type of event related to the originating\n// occurrence.\nfunc CloudeventsEventType(val string) attribute.KeyValue {\n\treturn CloudeventsEventTypeKey.String(val)\n}\n\n// CloudeventsEventSubject returns an attribute KeyValue conforming to the\n// \"cloudevents.event_subject\" semantic conventions. It represents the\n// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject)\n// of the event in the context of the event producer (identified by source).\nfunc CloudeventsEventSubject(val string) attribute.KeyValue {\n\treturn CloudeventsEventSubjectKey.String(val)\n}\n\n// Semantic conventions for the OpenTracing Shim\nconst (\n\t// OpentracingRefTypeKey is the attribute Key conforming to the\n\t// \"opentracing.ref_type\" semantic conventions. It represents the\n\t// parent-child Reference type\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Note: The causal relationship between a child Span and a parent Span.\n\tOpentracingRefTypeKey = attribute.Key(\"opentracing.ref_type\")\n)\n\nvar (\n\t// The parent Span depends on the child Span in some capacity\n\tOpentracingRefTypeChildOf = OpentracingRefTypeKey.String(\"child_of\")\n\t// The parent Span does not depend in any way on the result of the child Span\n\tOpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String(\"follows_from\")\n)\n\n// The attributes used to perform database client calls.\nconst (\n\t// DBSystemKey is the attribute Key conforming to the \"db.system\" semantic\n\t// conventions. It represents an identifier for the database management\n\t// system (DBMS) product being used. See below for a list of well-known\n\t// identifiers.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\tDBSystemKey = attribute.Key(\"db.system\")\n\n\t// DBConnectionStringKey is the attribute Key conforming to the\n\t// \"db.connection_string\" semantic conventions. It represents the\n\t// connection string used to connect to the database. It is recommended to\n\t// remove embedded credentials.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Server=(localdb)\\\\v11.0;Integrated Security=true;'\n\tDBConnectionStringKey = attribute.Key(\"db.connection_string\")\n\n\t// DBUserKey is the attribute Key conforming to the \"db.user\" semantic\n\t// conventions. It represents the username for accessing the database.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'readonly_user', 'reporting_user'\n\tDBUserKey = attribute.Key(\"db.user\")\n\n\t// DBJDBCDriverClassnameKey is the attribute Key conforming to the\n\t// \"db.jdbc.driver_classname\" semantic conventions. It represents the\n\t// fully-qualified class name of the [Java Database Connectivity\n\t// (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/)\n\t// driver used to connect.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'org.postgresql.Driver',\n\t// 'com.microsoft.sqlserver.jdbc.SQLServerDriver'\n\tDBJDBCDriverClassnameKey = attribute.Key(\"db.jdbc.driver_classname\")\n\n\t// DBNameKey is the attribute Key conforming to the \"db.name\" semantic\n\t// conventions. It represents the this attribute is used to report the name\n\t// of the database being accessed. For commands that switch the database,\n\t// this should be set to the target database (even if the command fails).\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (If applicable.)\n\t// Stability: stable\n\t// Examples: 'customers', 'main'\n\t// Note: In some SQL databases, the database name to be used is called\n\t// \"schema name\". In case there are multiple layers that could be\n\t// considered for database name (e.g. Oracle instance name and schema\n\t// name), the database name to be used is the more specific layer (e.g.\n\t// Oracle schema name).\n\tDBNameKey = attribute.Key(\"db.name\")\n\n\t// DBStatementKey is the attribute Key conforming to the \"db.statement\"\n\t// semantic conventions. It represents the database statement being\n\t// executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended (Should be collected by default only if\n\t// there is sanitization that excludes sensitive information.)\n\t// Stability: stable\n\t// Examples: 'SELECT * FROM wuser_table', 'SET mykey \"WuValue\"'\n\tDBStatementKey = attribute.Key(\"db.statement\")\n\n\t// DBOperationKey is the attribute Key conforming to the \"db.operation\"\n\t// semantic conventions. It represents the name of the operation being\n\t// executed, e.g. the [MongoDB command\n\t// name](https://docs.mongodb.com/manual/reference/command/#database-operations)\n\t// such as `findAndModify`, or the SQL keyword.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (If `db.statement` is not\n\t// applicable.)\n\t// Stability: stable\n\t// Examples: 'findAndModify', 'HMSET', 'SELECT'\n\t// Note: When setting this to an SQL keyword, it is not recommended to\n\t// attempt any client-side parsing of `db.statement` just to get this\n\t// property, but it should be set if the operation name is provided by the\n\t// library being instrumented. If the SQL statement has an ambiguous\n\t// operation, or performs more than one operation, this value may be\n\t// omitted.\n\tDBOperationKey = attribute.Key(\"db.operation\")\n)\n\nvar (\n\t// Some other SQL database. Fallback only. See notes\n\tDBSystemOtherSQL = DBSystemKey.String(\"other_sql\")\n\t// Microsoft SQL Server\n\tDBSystemMSSQL = DBSystemKey.String(\"mssql\")\n\t// Microsoft SQL Server Compact\n\tDBSystemMssqlcompact = DBSystemKey.String(\"mssqlcompact\")\n\t// MySQL\n\tDBSystemMySQL = DBSystemKey.String(\"mysql\")\n\t// Oracle Database\n\tDBSystemOracle = DBSystemKey.String(\"oracle\")\n\t// IBM DB2\n\tDBSystemDB2 = DBSystemKey.String(\"db2\")\n\t// PostgreSQL\n\tDBSystemPostgreSQL = DBSystemKey.String(\"postgresql\")\n\t// Amazon Redshift\n\tDBSystemRedshift = DBSystemKey.String(\"redshift\")\n\t// Apache Hive\n\tDBSystemHive = DBSystemKey.String(\"hive\")\n\t// Cloudscape\n\tDBSystemCloudscape = DBSystemKey.String(\"cloudscape\")\n\t// HyperSQL DataBase\n\tDBSystemHSQLDB = DBSystemKey.String(\"hsqldb\")\n\t// Progress Database\n\tDBSystemProgress = DBSystemKey.String(\"progress\")\n\t// SAP MaxDB\n\tDBSystemMaxDB = DBSystemKey.String(\"maxdb\")\n\t// SAP HANA\n\tDBSystemHanaDB = DBSystemKey.String(\"hanadb\")\n\t// Ingres\n\tDBSystemIngres = DBSystemKey.String(\"ingres\")\n\t// FirstSQL\n\tDBSystemFirstSQL = DBSystemKey.String(\"firstsql\")\n\t// EnterpriseDB\n\tDBSystemEDB = DBSystemKey.String(\"edb\")\n\t// InterSystems Caché\n\tDBSystemCache = DBSystemKey.String(\"cache\")\n\t// Adabas (Adaptable Database System)\n\tDBSystemAdabas = DBSystemKey.String(\"adabas\")\n\t// Firebird\n\tDBSystemFirebird = DBSystemKey.String(\"firebird\")\n\t// Apache Derby\n\tDBSystemDerby = DBSystemKey.String(\"derby\")\n\t// FileMaker\n\tDBSystemFilemaker = DBSystemKey.String(\"filemaker\")\n\t// Informix\n\tDBSystemInformix = DBSystemKey.String(\"informix\")\n\t// InstantDB\n\tDBSystemInstantDB = DBSystemKey.String(\"instantdb\")\n\t// InterBase\n\tDBSystemInterbase = DBSystemKey.String(\"interbase\")\n\t// MariaDB\n\tDBSystemMariaDB = DBSystemKey.String(\"mariadb\")\n\t// Netezza\n\tDBSystemNetezza = DBSystemKey.String(\"netezza\")\n\t// Pervasive PSQL\n\tDBSystemPervasive = DBSystemKey.String(\"pervasive\")\n\t// PointBase\n\tDBSystemPointbase = DBSystemKey.String(\"pointbase\")\n\t// SQLite\n\tDBSystemSqlite = DBSystemKey.String(\"sqlite\")\n\t// Sybase\n\tDBSystemSybase = DBSystemKey.String(\"sybase\")\n\t// Teradata\n\tDBSystemTeradata = DBSystemKey.String(\"teradata\")\n\t// Vertica\n\tDBSystemVertica = DBSystemKey.String(\"vertica\")\n\t// H2\n\tDBSystemH2 = DBSystemKey.String(\"h2\")\n\t// ColdFusion IMQ\n\tDBSystemColdfusion = DBSystemKey.String(\"coldfusion\")\n\t// Apache Cassandra\n\tDBSystemCassandra = DBSystemKey.String(\"cassandra\")\n\t// Apache HBase\n\tDBSystemHBase = DBSystemKey.String(\"hbase\")\n\t// MongoDB\n\tDBSystemMongoDB = DBSystemKey.String(\"mongodb\")\n\t// Redis\n\tDBSystemRedis = DBSystemKey.String(\"redis\")\n\t// Couchbase\n\tDBSystemCouchbase = DBSystemKey.String(\"couchbase\")\n\t// CouchDB\n\tDBSystemCouchDB = DBSystemKey.String(\"couchdb\")\n\t// Microsoft Azure Cosmos DB\n\tDBSystemCosmosDB = DBSystemKey.String(\"cosmosdb\")\n\t// Amazon DynamoDB\n\tDBSystemDynamoDB = DBSystemKey.String(\"dynamodb\")\n\t// Neo4j\n\tDBSystemNeo4j = DBSystemKey.String(\"neo4j\")\n\t// Apache Geode\n\tDBSystemGeode = DBSystemKey.String(\"geode\")\n\t// Elasticsearch\n\tDBSystemElasticsearch = DBSystemKey.String(\"elasticsearch\")\n\t// Memcached\n\tDBSystemMemcached = DBSystemKey.String(\"memcached\")\n\t// CockroachDB\n\tDBSystemCockroachdb = DBSystemKey.String(\"cockroachdb\")\n\t// OpenSearch\n\tDBSystemOpensearch = DBSystemKey.String(\"opensearch\")\n\t// ClickHouse\n\tDBSystemClickhouse = DBSystemKey.String(\"clickhouse\")\n\t// Cloud Spanner\n\tDBSystemSpanner = DBSystemKey.String(\"spanner\")\n\t// Trino\n\tDBSystemTrino = DBSystemKey.String(\"trino\")\n)\n\n// DBConnectionString returns an attribute KeyValue conforming to the\n// \"db.connection_string\" semantic conventions. It represents the connection\n// string used to connect to the database. It is recommended to remove embedded\n// credentials.\nfunc DBConnectionString(val string) attribute.KeyValue {\n\treturn DBConnectionStringKey.String(val)\n}\n\n// DBUser returns an attribute KeyValue conforming to the \"db.user\" semantic\n// conventions. It represents the username for accessing the database.\nfunc DBUser(val string) attribute.KeyValue {\n\treturn DBUserKey.String(val)\n}\n\n// DBJDBCDriverClassname returns an attribute KeyValue conforming to the\n// \"db.jdbc.driver_classname\" semantic conventions. It represents the\n// fully-qualified class name of the [Java Database Connectivity\n// (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver\n// used to connect.\nfunc DBJDBCDriverClassname(val string) attribute.KeyValue {\n\treturn DBJDBCDriverClassnameKey.String(val)\n}\n\n// DBName returns an attribute KeyValue conforming to the \"db.name\" semantic\n// conventions. It represents the this attribute is used to report the name of\n// the database being accessed. For commands that switch the database, this\n// should be set to the target database (even if the command fails).\nfunc DBName(val string) attribute.KeyValue {\n\treturn DBNameKey.String(val)\n}\n\n// DBStatement returns an attribute KeyValue conforming to the\n// \"db.statement\" semantic conventions. It represents the database statement\n// being executed.\nfunc DBStatement(val string) attribute.KeyValue {\n\treturn DBStatementKey.String(val)\n}\n\n// DBOperation returns an attribute KeyValue conforming to the\n// \"db.operation\" semantic conventions. It represents the name of the operation\n// being executed, e.g. the [MongoDB command\n// name](https://docs.mongodb.com/manual/reference/command/#database-operations)\n// such as `findAndModify`, or the SQL keyword.\nfunc DBOperation(val string) attribute.KeyValue {\n\treturn DBOperationKey.String(val)\n}\n\n// Connection-level attributes for Microsoft SQL Server\nconst (\n\t// DBMSSQLInstanceNameKey is the attribute Key conforming to the\n\t// \"db.mssql.instance_name\" semantic conventions. It represents the\n\t// Microsoft SQL Server [instance\n\t// name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15)\n\t// connecting to. This name is used to determine the port of a named\n\t// instance.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'MSSQLSERVER'\n\t// Note: If setting a `db.mssql.instance_name`, `net.peer.port` is no\n\t// longer required (but still recommended if non-standard).\n\tDBMSSQLInstanceNameKey = attribute.Key(\"db.mssql.instance_name\")\n)\n\n// DBMSSQLInstanceName returns an attribute KeyValue conforming to the\n// \"db.mssql.instance_name\" semantic conventions. It represents the Microsoft\n// SQL Server [instance\n// name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15)\n// connecting to. This name is used to determine the port of a named instance.\nfunc DBMSSQLInstanceName(val string) attribute.KeyValue {\n\treturn DBMSSQLInstanceNameKey.String(val)\n}\n\n// Call-level attributes for Cassandra\nconst (\n\t// DBCassandraPageSizeKey is the attribute Key conforming to the\n\t// \"db.cassandra.page_size\" semantic conventions. It represents the fetch\n\t// size used for paging, i.e. how many rows will be returned at once.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 5000\n\tDBCassandraPageSizeKey = attribute.Key(\"db.cassandra.page_size\")\n\n\t// DBCassandraConsistencyLevelKey is the attribute Key conforming to the\n\t// \"db.cassandra.consistency_level\" semantic conventions. It represents the\n\t// consistency level of the query. Based on consistency values from\n\t// [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tDBCassandraConsistencyLevelKey = attribute.Key(\"db.cassandra.consistency_level\")\n\n\t// DBCassandraTableKey is the attribute Key conforming to the\n\t// \"db.cassandra.table\" semantic conventions. It represents the name of the\n\t// primary table that the operation is acting upon, including the keyspace\n\t// name (if applicable).\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended\n\t// Stability: stable\n\t// Examples: 'mytable'\n\t// Note: This mirrors the db.sql.table attribute but references cassandra\n\t// rather than sql. It is not recommended to attempt any client-side\n\t// parsing of `db.statement` just to get this property, but it should be\n\t// set if it is provided by the library being instrumented. If the\n\t// operation is acting upon an anonymous table, or more than one table,\n\t// this value MUST NOT be set.\n\tDBCassandraTableKey = attribute.Key(\"db.cassandra.table\")\n\n\t// DBCassandraIdempotenceKey is the attribute Key conforming to the\n\t// \"db.cassandra.idempotence\" semantic conventions. It represents the\n\t// whether or not the query is idempotent.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tDBCassandraIdempotenceKey = attribute.Key(\"db.cassandra.idempotence\")\n\n\t// DBCassandraSpeculativeExecutionCountKey is the attribute Key conforming\n\t// to the \"db.cassandra.speculative_execution_count\" semantic conventions.\n\t// It represents the number of times a query was speculatively executed.\n\t// Not set or `0` if the query was not executed speculatively.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 0, 2\n\tDBCassandraSpeculativeExecutionCountKey = attribute.Key(\"db.cassandra.speculative_execution_count\")\n\n\t// DBCassandraCoordinatorIDKey is the attribute Key conforming to the\n\t// \"db.cassandra.coordinator.id\" semantic conventions. It represents the ID\n\t// of the coordinating node for a query.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'be13faa2-8574-4d71-926d-27f16cf8a7af'\n\tDBCassandraCoordinatorIDKey = attribute.Key(\"db.cassandra.coordinator.id\")\n\n\t// DBCassandraCoordinatorDCKey is the attribute Key conforming to the\n\t// \"db.cassandra.coordinator.dc\" semantic conventions. It represents the\n\t// data center of the coordinating node for a query.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'us-west-2'\n\tDBCassandraCoordinatorDCKey = attribute.Key(\"db.cassandra.coordinator.dc\")\n)\n\nvar (\n\t// all\n\tDBCassandraConsistencyLevelAll = DBCassandraConsistencyLevelKey.String(\"all\")\n\t// each_quorum\n\tDBCassandraConsistencyLevelEachQuorum = DBCassandraConsistencyLevelKey.String(\"each_quorum\")\n\t// quorum\n\tDBCassandraConsistencyLevelQuorum = DBCassandraConsistencyLevelKey.String(\"quorum\")\n\t// local_quorum\n\tDBCassandraConsistencyLevelLocalQuorum = DBCassandraConsistencyLevelKey.String(\"local_quorum\")\n\t// one\n\tDBCassandraConsistencyLevelOne = DBCassandraConsistencyLevelKey.String(\"one\")\n\t// two\n\tDBCassandraConsistencyLevelTwo = DBCassandraConsistencyLevelKey.String(\"two\")\n\t// three\n\tDBCassandraConsistencyLevelThree = DBCassandraConsistencyLevelKey.String(\"three\")\n\t// local_one\n\tDBCassandraConsistencyLevelLocalOne = DBCassandraConsistencyLevelKey.String(\"local_one\")\n\t// any\n\tDBCassandraConsistencyLevelAny = DBCassandraConsistencyLevelKey.String(\"any\")\n\t// serial\n\tDBCassandraConsistencyLevelSerial = DBCassandraConsistencyLevelKey.String(\"serial\")\n\t// local_serial\n\tDBCassandraConsistencyLevelLocalSerial = DBCassandraConsistencyLevelKey.String(\"local_serial\")\n)\n\n// DBCassandraPageSize returns an attribute KeyValue conforming to the\n// \"db.cassandra.page_size\" semantic conventions. It represents the fetch size\n// used for paging, i.e. how many rows will be returned at once.\nfunc DBCassandraPageSize(val int) attribute.KeyValue {\n\treturn DBCassandraPageSizeKey.Int(val)\n}\n\n// DBCassandraTable returns an attribute KeyValue conforming to the\n// \"db.cassandra.table\" semantic conventions. It represents the name of the\n// primary table that the operation is acting upon, including the keyspace name\n// (if applicable).\nfunc DBCassandraTable(val string) attribute.KeyValue {\n\treturn DBCassandraTableKey.String(val)\n}\n\n// DBCassandraIdempotence returns an attribute KeyValue conforming to the\n// \"db.cassandra.idempotence\" semantic conventions. It represents the whether\n// or not the query is idempotent.\nfunc DBCassandraIdempotence(val bool) attribute.KeyValue {\n\treturn DBCassandraIdempotenceKey.Bool(val)\n}\n\n// DBCassandraSpeculativeExecutionCount returns an attribute KeyValue\n// conforming to the \"db.cassandra.speculative_execution_count\" semantic\n// conventions. It represents the number of times a query was speculatively\n// executed. Not set or `0` if the query was not executed speculatively.\nfunc DBCassandraSpeculativeExecutionCount(val int) attribute.KeyValue {\n\treturn DBCassandraSpeculativeExecutionCountKey.Int(val)\n}\n\n// DBCassandraCoordinatorID returns an attribute KeyValue conforming to the\n// \"db.cassandra.coordinator.id\" semantic conventions. It represents the ID of\n// the coordinating node for a query.\nfunc DBCassandraCoordinatorID(val string) attribute.KeyValue {\n\treturn DBCassandraCoordinatorIDKey.String(val)\n}\n\n// DBCassandraCoordinatorDC returns an attribute KeyValue conforming to the\n// \"db.cassandra.coordinator.dc\" semantic conventions. It represents the data\n// center of the coordinating node for a query.\nfunc DBCassandraCoordinatorDC(val string) attribute.KeyValue {\n\treturn DBCassandraCoordinatorDCKey.String(val)\n}\n\n// Call-level attributes for Redis\nconst (\n\t// DBRedisDBIndexKey is the attribute Key conforming to the\n\t// \"db.redis.database_index\" semantic conventions. It represents the index\n\t// of the database being accessed as used in the [`SELECT`\n\t// command](https://redis.io/commands/select), provided as an integer. To\n\t// be used instead of the generic `db.name` attribute.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (If other than the default\n\t// database (`0`).)\n\t// Stability: stable\n\t// Examples: 0, 1, 15\n\tDBRedisDBIndexKey = attribute.Key(\"db.redis.database_index\")\n)\n\n// DBRedisDBIndex returns an attribute KeyValue conforming to the\n// \"db.redis.database_index\" semantic conventions. It represents the index of\n// the database being accessed as used in the [`SELECT`\n// command](https://redis.io/commands/select), provided as an integer. To be\n// used instead of the generic `db.name` attribute.\nfunc DBRedisDBIndex(val int) attribute.KeyValue {\n\treturn DBRedisDBIndexKey.Int(val)\n}\n\n// Call-level attributes for MongoDB\nconst (\n\t// DBMongoDBCollectionKey is the attribute Key conforming to the\n\t// \"db.mongodb.collection\" semantic conventions. It represents the\n\t// collection being accessed within the database stated in `db.name`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'customers', 'products'\n\tDBMongoDBCollectionKey = attribute.Key(\"db.mongodb.collection\")\n)\n\n// DBMongoDBCollection returns an attribute KeyValue conforming to the\n// \"db.mongodb.collection\" semantic conventions. It represents the collection\n// being accessed within the database stated in `db.name`.\nfunc DBMongoDBCollection(val string) attribute.KeyValue {\n\treturn DBMongoDBCollectionKey.String(val)\n}\n\n// Call-level attributes for SQL databases\nconst (\n\t// DBSQLTableKey is the attribute Key conforming to the \"db.sql.table\"\n\t// semantic conventions. It represents the name of the primary table that\n\t// the operation is acting upon, including the database name (if\n\t// applicable).\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended\n\t// Stability: stable\n\t// Examples: 'public.users', 'customers'\n\t// Note: It is not recommended to attempt any client-side parsing of\n\t// `db.statement` just to get this property, but it should be set if it is\n\t// provided by the library being instrumented. If the operation is acting\n\t// upon an anonymous table, or more than one table, this value MUST NOT be\n\t// set.\n\tDBSQLTableKey = attribute.Key(\"db.sql.table\")\n)\n\n// DBSQLTable returns an attribute KeyValue conforming to the \"db.sql.table\"\n// semantic conventions. It represents the name of the primary table that the\n// operation is acting upon, including the database name (if applicable).\nfunc DBSQLTable(val string) attribute.KeyValue {\n\treturn DBSQLTableKey.String(val)\n}\n\n// Call-level attributes for Cosmos DB.\nconst (\n\t// DBCosmosDBClientIDKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.client_id\" semantic conventions. It represents the unique\n\t// Cosmos client instance id.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '3ba4827d-4422-483f-b59f-85b74211c11d'\n\tDBCosmosDBClientIDKey = attribute.Key(\"db.cosmosdb.client_id\")\n\n\t// DBCosmosDBOperationTypeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.operation_type\" semantic conventions. It represents the\n\t// cosmosDB Operation Type.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: ConditionallyRequired (when performing one of the\n\t// operations in this list)\n\t// Stability: stable\n\tDBCosmosDBOperationTypeKey = attribute.Key(\"db.cosmosdb.operation_type\")\n\n\t// DBCosmosDBConnectionModeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.connection_mode\" semantic conventions. It represents the\n\t// cosmos client connection mode.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: ConditionallyRequired (if not `direct` (or pick gw as\n\t// default))\n\t// Stability: stable\n\tDBCosmosDBConnectionModeKey = attribute.Key(\"db.cosmosdb.connection_mode\")\n\n\t// DBCosmosDBContainerKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.container\" semantic conventions. It represents the cosmos\n\t// DB container name.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (if available)\n\t// Stability: stable\n\t// Examples: 'anystring'\n\tDBCosmosDBContainerKey = attribute.Key(\"db.cosmosdb.container\")\n\n\t// DBCosmosDBRequestContentLengthKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.request_content_length\" semantic conventions. It represents\n\t// the request payload size in bytes\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tDBCosmosDBRequestContentLengthKey = attribute.Key(\"db.cosmosdb.request_content_length\")\n\n\t// DBCosmosDBStatusCodeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.status_code\" semantic conventions. It represents the cosmos\n\t// DB status code.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (if response was received)\n\t// Stability: stable\n\t// Examples: 200, 201\n\tDBCosmosDBStatusCodeKey = attribute.Key(\"db.cosmosdb.status_code\")\n\n\t// DBCosmosDBSubStatusCodeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.sub_status_code\" semantic conventions. It represents the\n\t// cosmos DB sub status code.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (when response was received and\n\t// contained sub-code.)\n\t// Stability: stable\n\t// Examples: 1000, 1002\n\tDBCosmosDBSubStatusCodeKey = attribute.Key(\"db.cosmosdb.sub_status_code\")\n\n\t// DBCosmosDBRequestChargeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.request_charge\" semantic conventions. It represents the rU\n\t// consumed for that operation\n\t//\n\t// Type: double\n\t// RequirementLevel: ConditionallyRequired (when available)\n\t// Stability: stable\n\t// Examples: 46.18, 1.0\n\tDBCosmosDBRequestChargeKey = attribute.Key(\"db.cosmosdb.request_charge\")\n)\n\nvar (\n\t// invalid\n\tDBCosmosDBOperationTypeInvalid = DBCosmosDBOperationTypeKey.String(\"Invalid\")\n\t// create\n\tDBCosmosDBOperationTypeCreate = DBCosmosDBOperationTypeKey.String(\"Create\")\n\t// patch\n\tDBCosmosDBOperationTypePatch = DBCosmosDBOperationTypeKey.String(\"Patch\")\n\t// read\n\tDBCosmosDBOperationTypeRead = DBCosmosDBOperationTypeKey.String(\"Read\")\n\t// read_feed\n\tDBCosmosDBOperationTypeReadFeed = DBCosmosDBOperationTypeKey.String(\"ReadFeed\")\n\t// delete\n\tDBCosmosDBOperationTypeDelete = DBCosmosDBOperationTypeKey.String(\"Delete\")\n\t// replace\n\tDBCosmosDBOperationTypeReplace = DBCosmosDBOperationTypeKey.String(\"Replace\")\n\t// execute\n\tDBCosmosDBOperationTypeExecute = DBCosmosDBOperationTypeKey.String(\"Execute\")\n\t// query\n\tDBCosmosDBOperationTypeQuery = DBCosmosDBOperationTypeKey.String(\"Query\")\n\t// head\n\tDBCosmosDBOperationTypeHead = DBCosmosDBOperationTypeKey.String(\"Head\")\n\t// head_feed\n\tDBCosmosDBOperationTypeHeadFeed = DBCosmosDBOperationTypeKey.String(\"HeadFeed\")\n\t// upsert\n\tDBCosmosDBOperationTypeUpsert = DBCosmosDBOperationTypeKey.String(\"Upsert\")\n\t// batch\n\tDBCosmosDBOperationTypeBatch = DBCosmosDBOperationTypeKey.String(\"Batch\")\n\t// query_plan\n\tDBCosmosDBOperationTypeQueryPlan = DBCosmosDBOperationTypeKey.String(\"QueryPlan\")\n\t// execute_javascript\n\tDBCosmosDBOperationTypeExecuteJavascript = DBCosmosDBOperationTypeKey.String(\"ExecuteJavaScript\")\n)\n\nvar (\n\t// Gateway (HTTP) connections mode\n\tDBCosmosDBConnectionModeGateway = DBCosmosDBConnectionModeKey.String(\"gateway\")\n\t// Direct connection\n\tDBCosmosDBConnectionModeDirect = DBCosmosDBConnectionModeKey.String(\"direct\")\n)\n\n// DBCosmosDBClientID returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.client_id\" semantic conventions. It represents the unique\n// Cosmos client instance id.\nfunc DBCosmosDBClientID(val string) attribute.KeyValue {\n\treturn DBCosmosDBClientIDKey.String(val)\n}\n\n// DBCosmosDBContainer returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.container\" semantic conventions. It represents the cosmos DB\n// container name.\nfunc DBCosmosDBContainer(val string) attribute.KeyValue {\n\treturn DBCosmosDBContainerKey.String(val)\n}\n\n// DBCosmosDBRequestContentLength returns an attribute KeyValue conforming\n// to the \"db.cosmosdb.request_content_length\" semantic conventions. It\n// represents the request payload size in bytes\nfunc DBCosmosDBRequestContentLength(val int) attribute.KeyValue {\n\treturn DBCosmosDBRequestContentLengthKey.Int(val)\n}\n\n// DBCosmosDBStatusCode returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.status_code\" semantic conventions. It represents the cosmos DB\n// status code.\nfunc DBCosmosDBStatusCode(val int) attribute.KeyValue {\n\treturn DBCosmosDBStatusCodeKey.Int(val)\n}\n\n// DBCosmosDBSubStatusCode returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.sub_status_code\" semantic conventions. It represents the cosmos\n// DB sub status code.\nfunc DBCosmosDBSubStatusCode(val int) attribute.KeyValue {\n\treturn DBCosmosDBSubStatusCodeKey.Int(val)\n}\n\n// DBCosmosDBRequestCharge returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.request_charge\" semantic conventions. It represents the rU\n// consumed for that operation\nfunc DBCosmosDBRequestCharge(val float64) attribute.KeyValue {\n\treturn DBCosmosDBRequestChargeKey.Float64(val)\n}\n\n// Span attributes used by non-OTLP exporters to represent OpenTelemetry Span's\n// concepts.\nconst (\n\t// OTelStatusCodeKey is the attribute Key conforming to the\n\t// \"otel.status_code\" semantic conventions. It represents the name of the\n\t// code, either \"OK\" or \"ERROR\". MUST NOT be set if the status code is\n\t// UNSET.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tOTelStatusCodeKey = attribute.Key(\"otel.status_code\")\n\n\t// OTelStatusDescriptionKey is the attribute Key conforming to the\n\t// \"otel.status_description\" semantic conventions. It represents the\n\t// description of the Status if it has a value, otherwise not set.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'resource not found'\n\tOTelStatusDescriptionKey = attribute.Key(\"otel.status_description\")\n)\n\nvar (\n\t// The operation has been validated by an Application developer or Operator to have completed successfully\n\tOTelStatusCodeOk = OTelStatusCodeKey.String(\"OK\")\n\t// The operation contains an error\n\tOTelStatusCodeError = OTelStatusCodeKey.String(\"ERROR\")\n)\n\n// OTelStatusDescription returns an attribute KeyValue conforming to the\n// \"otel.status_description\" semantic conventions. It represents the\n// description of the Status if it has a value, otherwise not set.\nfunc OTelStatusDescription(val string) attribute.KeyValue {\n\treturn OTelStatusDescriptionKey.String(val)\n}\n\n// This semantic convention describes an instance of a function that runs\n// without provisioning or managing of servers (also known as serverless\n// functions or Function as a Service (FaaS)) with spans.\nconst (\n\t// FaaSTriggerKey is the attribute Key conforming to the \"faas.trigger\"\n\t// semantic conventions. It represents the type of the trigger which caused\n\t// this function invocation.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Note: For the server/consumer span on the incoming side,\n\t// `faas.trigger` MUST be set.\n\t//\n\t// Clients invoking FaaS instances usually cannot set `faas.trigger`,\n\t// since they would typically need to look in the payload to determine\n\t// the event type. If clients set it, it should be the same as the\n\t// trigger that corresponding incoming would have (i.e., this has\n\t// nothing to do with the underlying transport used to make the API\n\t// call to invoke the lambda, which is often HTTP).\n\tFaaSTriggerKey = attribute.Key(\"faas.trigger\")\n\n\t// FaaSInvocationIDKey is the attribute Key conforming to the\n\t// \"faas.invocation_id\" semantic conventions. It represents the invocation\n\t// ID of the current function invocation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28'\n\tFaaSInvocationIDKey = attribute.Key(\"faas.invocation_id\")\n)\n\nvar (\n\t// A response to some data source operation such as a database or filesystem read/write\n\tFaaSTriggerDatasource = FaaSTriggerKey.String(\"datasource\")\n\t// To provide an answer to an inbound HTTP request\n\tFaaSTriggerHTTP = FaaSTriggerKey.String(\"http\")\n\t// A function is set to be executed when messages are sent to a messaging system\n\tFaaSTriggerPubsub = FaaSTriggerKey.String(\"pubsub\")\n\t// A function is scheduled to be executed regularly\n\tFaaSTriggerTimer = FaaSTriggerKey.String(\"timer\")\n\t// If none of the others apply\n\tFaaSTriggerOther = FaaSTriggerKey.String(\"other\")\n)\n\n// FaaSInvocationID returns an attribute KeyValue conforming to the\n// \"faas.invocation_id\" semantic conventions. It represents the invocation ID\n// of the current function invocation.\nfunc FaaSInvocationID(val string) attribute.KeyValue {\n\treturn FaaSInvocationIDKey.String(val)\n}\n\n// Semantic Convention for FaaS triggered as a response to some data source\n// operation such as a database or filesystem read/write.\nconst (\n\t// FaaSDocumentCollectionKey is the attribute Key conforming to the\n\t// \"faas.document.collection\" semantic conventions. It represents the name\n\t// of the source on which the triggering operation was performed. For\n\t// example, in Cloud Storage or S3 corresponds to the bucket name, and in\n\t// Cosmos DB to the database name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'myBucketName', 'myDBName'\n\tFaaSDocumentCollectionKey = attribute.Key(\"faas.document.collection\")\n\n\t// FaaSDocumentOperationKey is the attribute Key conforming to the\n\t// \"faas.document.operation\" semantic conventions. It represents the\n\t// describes the type of the operation that was performed on the data.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\tFaaSDocumentOperationKey = attribute.Key(\"faas.document.operation\")\n\n\t// FaaSDocumentTimeKey is the attribute Key conforming to the\n\t// \"faas.document.time\" semantic conventions. It represents a string\n\t// containing the time when the data was accessed in the [ISO\n\t// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n\t// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2020-01-23T13:47:06Z'\n\tFaaSDocumentTimeKey = attribute.Key(\"faas.document.time\")\n\n\t// FaaSDocumentNameKey is the attribute Key conforming to the\n\t// \"faas.document.name\" semantic conventions. It represents the document\n\t// name/table subjected to the operation. For example, in Cloud Storage or\n\t// S3 is the name of the file, and in Cosmos DB the table name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'myFile.txt', 'myTableName'\n\tFaaSDocumentNameKey = attribute.Key(\"faas.document.name\")\n)\n\nvar (\n\t// When a new object is created\n\tFaaSDocumentOperationInsert = FaaSDocumentOperationKey.String(\"insert\")\n\t// When an object is modified\n\tFaaSDocumentOperationEdit = FaaSDocumentOperationKey.String(\"edit\")\n\t// When an object is deleted\n\tFaaSDocumentOperationDelete = FaaSDocumentOperationKey.String(\"delete\")\n)\n\n// FaaSDocumentCollection returns an attribute KeyValue conforming to the\n// \"faas.document.collection\" semantic conventions. It represents the name of\n// the source on which the triggering operation was performed. For example, in\n// Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the\n// database name.\nfunc FaaSDocumentCollection(val string) attribute.KeyValue {\n\treturn FaaSDocumentCollectionKey.String(val)\n}\n\n// FaaSDocumentTime returns an attribute KeyValue conforming to the\n// \"faas.document.time\" semantic conventions. It represents a string containing\n// the time when the data was accessed in the [ISO\n// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\nfunc FaaSDocumentTime(val string) attribute.KeyValue {\n\treturn FaaSDocumentTimeKey.String(val)\n}\n\n// FaaSDocumentName returns an attribute KeyValue conforming to the\n// \"faas.document.name\" semantic conventions. It represents the document\n// name/table subjected to the operation. For example, in Cloud Storage or S3\n// is the name of the file, and in Cosmos DB the table name.\nfunc FaaSDocumentName(val string) attribute.KeyValue {\n\treturn FaaSDocumentNameKey.String(val)\n}\n\n// Semantic Convention for FaaS scheduled to be executed regularly.\nconst (\n\t// FaaSTimeKey is the attribute Key conforming to the \"faas.time\" semantic\n\t// conventions. It represents a string containing the function invocation\n\t// time in the [ISO\n\t// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n\t// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2020-01-23T13:47:06Z'\n\tFaaSTimeKey = attribute.Key(\"faas.time\")\n\n\t// FaaSCronKey is the attribute Key conforming to the \"faas.cron\" semantic\n\t// conventions. It represents a string containing the schedule period as\n\t// [Cron\n\t// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '0/5 * * * ? *'\n\tFaaSCronKey = attribute.Key(\"faas.cron\")\n)\n\n// FaaSTime returns an attribute KeyValue conforming to the \"faas.time\"\n// semantic conventions. It represents a string containing the function\n// invocation time in the [ISO\n// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\nfunc FaaSTime(val string) attribute.KeyValue {\n\treturn FaaSTimeKey.String(val)\n}\n\n// FaaSCron returns an attribute KeyValue conforming to the \"faas.cron\"\n// semantic conventions. It represents a string containing the schedule period\n// as [Cron\n// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\nfunc FaaSCron(val string) attribute.KeyValue {\n\treturn FaaSCronKey.String(val)\n}\n\n// Contains additional attributes for incoming FaaS spans.\nconst (\n\t// FaaSColdstartKey is the attribute Key conforming to the \"faas.coldstart\"\n\t// semantic conventions. It represents a boolean that is true if the\n\t// serverless function is executed for the first time (aka cold-start).\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tFaaSColdstartKey = attribute.Key(\"faas.coldstart\")\n)\n\n// FaaSColdstart returns an attribute KeyValue conforming to the\n// \"faas.coldstart\" semantic conventions. It represents a boolean that is true\n// if the serverless function is executed for the first time (aka cold-start).\nfunc FaaSColdstart(val bool) attribute.KeyValue {\n\treturn FaaSColdstartKey.Bool(val)\n}\n\n// Contains additional attributes for outgoing FaaS spans.\nconst (\n\t// FaaSInvokedNameKey is the attribute Key conforming to the\n\t// \"faas.invoked_name\" semantic conventions. It represents the name of the\n\t// invoked function.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'my-function'\n\t// Note: SHOULD be equal to the `faas.name` resource attribute of the\n\t// invoked function.\n\tFaaSInvokedNameKey = attribute.Key(\"faas.invoked_name\")\n\n\t// FaaSInvokedProviderKey is the attribute Key conforming to the\n\t// \"faas.invoked_provider\" semantic conventions. It represents the cloud\n\t// provider of the invoked function.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Note: SHOULD be equal to the `cloud.provider` resource attribute of the\n\t// invoked function.\n\tFaaSInvokedProviderKey = attribute.Key(\"faas.invoked_provider\")\n\n\t// FaaSInvokedRegionKey is the attribute Key conforming to the\n\t// \"faas.invoked_region\" semantic conventions. It represents the cloud\n\t// region of the invoked function.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (For some cloud providers, like\n\t// AWS or GCP, the region in which a function is hosted is essential to\n\t// uniquely identify the function and also part of its endpoint. Since it's\n\t// part of the endpoint being called, the region is always known to\n\t// clients. In these cases, `faas.invoked_region` MUST be set accordingly.\n\t// If the region is unknown to the client or not required for identifying\n\t// the invoked function, setting `faas.invoked_region` is optional.)\n\t// Stability: stable\n\t// Examples: 'eu-central-1'\n\t// Note: SHOULD be equal to the `cloud.region` resource attribute of the\n\t// invoked function.\n\tFaaSInvokedRegionKey = attribute.Key(\"faas.invoked_region\")\n)\n\nvar (\n\t// Alibaba Cloud\n\tFaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String(\"alibaba_cloud\")\n\t// Amazon Web Services\n\tFaaSInvokedProviderAWS = FaaSInvokedProviderKey.String(\"aws\")\n\t// Microsoft Azure\n\tFaaSInvokedProviderAzure = FaaSInvokedProviderKey.String(\"azure\")\n\t// Google Cloud Platform\n\tFaaSInvokedProviderGCP = FaaSInvokedProviderKey.String(\"gcp\")\n\t// Tencent Cloud\n\tFaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String(\"tencent_cloud\")\n)\n\n// FaaSInvokedName returns an attribute KeyValue conforming to the\n// \"faas.invoked_name\" semantic conventions. It represents the name of the\n// invoked function.\nfunc FaaSInvokedName(val string) attribute.KeyValue {\n\treturn FaaSInvokedNameKey.String(val)\n}\n\n// FaaSInvokedRegion returns an attribute KeyValue conforming to the\n// \"faas.invoked_region\" semantic conventions. It represents the cloud region\n// of the invoked function.\nfunc FaaSInvokedRegion(val string) attribute.KeyValue {\n\treturn FaaSInvokedRegionKey.String(val)\n}\n\n// Operations that access some remote service.\nconst (\n\t// PeerServiceKey is the attribute Key conforming to the \"peer.service\"\n\t// semantic conventions. It represents the\n\t// [`service.name`](../../resource/semantic_conventions/README.md#service)\n\t// of the remote service. SHOULD be equal to the actual `service.name`\n\t// resource attribute of the remote service if any.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'AuthTokenCache'\n\tPeerServiceKey = attribute.Key(\"peer.service\")\n)\n\n// PeerService returns an attribute KeyValue conforming to the\n// \"peer.service\" semantic conventions. It represents the\n// [`service.name`](../../resource/semantic_conventions/README.md#service) of\n// the remote service. SHOULD be equal to the actual `service.name` resource\n// attribute of the remote service if any.\nfunc PeerService(val string) attribute.KeyValue {\n\treturn PeerServiceKey.String(val)\n}\n\n// These attributes may be used for any operation with an authenticated and/or\n// authorized enduser.\nconst (\n\t// EnduserIDKey is the attribute Key conforming to the \"enduser.id\"\n\t// semantic conventions. It represents the username or client_id extracted\n\t// from the access token or\n\t// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header\n\t// in the inbound request from outside the system.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'username'\n\tEnduserIDKey = attribute.Key(\"enduser.id\")\n\n\t// EnduserRoleKey is the attribute Key conforming to the \"enduser.role\"\n\t// semantic conventions. It represents the actual/assumed role the client\n\t// is making the request under extracted from token or application security\n\t// context.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'admin'\n\tEnduserRoleKey = attribute.Key(\"enduser.role\")\n\n\t// EnduserScopeKey is the attribute Key conforming to the \"enduser.scope\"\n\t// semantic conventions. It represents the scopes or granted authorities\n\t// the client currently possesses extracted from token or application\n\t// security context. The value would come from the scope associated with an\n\t// [OAuth 2.0 Access\n\t// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute\n\t// value in a [SAML 2.0\n\t// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'read:message, write:files'\n\tEnduserScopeKey = attribute.Key(\"enduser.scope\")\n)\n\n// EnduserID returns an attribute KeyValue conforming to the \"enduser.id\"\n// semantic conventions. It represents the username or client_id extracted from\n// the access token or\n// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in\n// the inbound request from outside the system.\nfunc EnduserID(val string) attribute.KeyValue {\n\treturn EnduserIDKey.String(val)\n}\n\n// EnduserRole returns an attribute KeyValue conforming to the\n// \"enduser.role\" semantic conventions. It represents the actual/assumed role\n// the client is making the request under extracted from token or application\n// security context.\nfunc EnduserRole(val string) attribute.KeyValue {\n\treturn EnduserRoleKey.String(val)\n}\n\n// EnduserScope returns an attribute KeyValue conforming to the\n// \"enduser.scope\" semantic conventions. It represents the scopes or granted\n// authorities the client currently possesses extracted from token or\n// application security context. The value would come from the scope associated\n// with an [OAuth 2.0 Access\n// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute\n// value in a [SAML 2.0\n// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).\nfunc EnduserScope(val string) attribute.KeyValue {\n\treturn EnduserScopeKey.String(val)\n}\n\n// These attributes may be used for any operation to store information about a\n// thread that started a span.\nconst (\n\t// ThreadIDKey is the attribute Key conforming to the \"thread.id\" semantic\n\t// conventions. It represents the current \"managed\" thread ID (as opposed\n\t// to OS thread ID).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 42\n\tThreadIDKey = attribute.Key(\"thread.id\")\n\n\t// ThreadNameKey is the attribute Key conforming to the \"thread.name\"\n\t// semantic conventions. It represents the current thread name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'main'\n\tThreadNameKey = attribute.Key(\"thread.name\")\n)\n\n// ThreadID returns an attribute KeyValue conforming to the \"thread.id\"\n// semantic conventions. It represents the current \"managed\" thread ID (as\n// opposed to OS thread ID).\nfunc ThreadID(val int) attribute.KeyValue {\n\treturn ThreadIDKey.Int(val)\n}\n\n// ThreadName returns an attribute KeyValue conforming to the \"thread.name\"\n// semantic conventions. It represents the current thread name.\nfunc ThreadName(val string) attribute.KeyValue {\n\treturn ThreadNameKey.String(val)\n}\n\n// These attributes allow to report this unit of code and therefore to provide\n// more context about the span.\nconst (\n\t// CodeFunctionKey is the attribute Key conforming to the \"code.function\"\n\t// semantic conventions. It represents the method or function name, or\n\t// equivalent (usually rightmost part of the code unit's name).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'serveRequest'\n\tCodeFunctionKey = attribute.Key(\"code.function\")\n\n\t// CodeNamespaceKey is the attribute Key conforming to the \"code.namespace\"\n\t// semantic conventions. It represents the \"namespace\" within which\n\t// `code.function` is defined. Usually the qualified class or module name,\n\t// such that `code.namespace` + some separator + `code.function` form a\n\t// unique identifier for the code unit.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'com.example.MyHTTPService'\n\tCodeNamespaceKey = attribute.Key(\"code.namespace\")\n\n\t// CodeFilepathKey is the attribute Key conforming to the \"code.filepath\"\n\t// semantic conventions. It represents the source code file name that\n\t// identifies the code unit as uniquely as possible (preferably an absolute\n\t// file path).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '/usr/local/MyApplication/content_root/app/index.php'\n\tCodeFilepathKey = attribute.Key(\"code.filepath\")\n\n\t// CodeLineNumberKey is the attribute Key conforming to the \"code.lineno\"\n\t// semantic conventions. It represents the line number in `code.filepath`\n\t// best representing the operation. It SHOULD point within the code unit\n\t// named in `code.function`.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 42\n\tCodeLineNumberKey = attribute.Key(\"code.lineno\")\n\n\t// CodeColumnKey is the attribute Key conforming to the \"code.column\"\n\t// semantic conventions. It represents the column number in `code.filepath`\n\t// best representing the operation. It SHOULD point within the code unit\n\t// named in `code.function`.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 16\n\tCodeColumnKey = attribute.Key(\"code.column\")\n)\n\n// CodeFunction returns an attribute KeyValue conforming to the\n// \"code.function\" semantic conventions. It represents the method or function\n// name, or equivalent (usually rightmost part of the code unit's name).\nfunc CodeFunction(val string) attribute.KeyValue {\n\treturn CodeFunctionKey.String(val)\n}\n\n// CodeNamespace returns an attribute KeyValue conforming to the\n// \"code.namespace\" semantic conventions. It represents the \"namespace\" within\n// which `code.function` is defined. Usually the qualified class or module\n// name, such that `code.namespace` + some separator + `code.function` form a\n// unique identifier for the code unit.\nfunc CodeNamespace(val string) attribute.KeyValue {\n\treturn CodeNamespaceKey.String(val)\n}\n\n// CodeFilepath returns an attribute KeyValue conforming to the\n// \"code.filepath\" semantic conventions. It represents the source code file\n// name that identifies the code unit as uniquely as possible (preferably an\n// absolute file path).\nfunc CodeFilepath(val string) attribute.KeyValue {\n\treturn CodeFilepathKey.String(val)\n}\n\n// CodeLineNumber returns an attribute KeyValue conforming to the \"code.lineno\"\n// semantic conventions. It represents the line number in `code.filepath` best\n// representing the operation. It SHOULD point within the code unit named in\n// `code.function`.\nfunc CodeLineNumber(val int) attribute.KeyValue {\n\treturn CodeLineNumberKey.Int(val)\n}\n\n// CodeColumn returns an attribute KeyValue conforming to the \"code.column\"\n// semantic conventions. It represents the column number in `code.filepath`\n// best representing the operation. It SHOULD point within the code unit named\n// in `code.function`.\nfunc CodeColumn(val int) attribute.KeyValue {\n\treturn CodeColumnKey.Int(val)\n}\n\n// Semantic Convention for HTTP Client\nconst (\n\t// HTTPURLKey is the attribute Key conforming to the \"http.url\" semantic\n\t// conventions. It represents the full HTTP request URL in the form\n\t// `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is\n\t// not transmitted over HTTP, but if it is known, it should be included\n\t// nevertheless.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv'\n\t// Note: `http.url` MUST NOT contain credentials passed via URL in form of\n\t// `https://username:password@www.example.com/`. In such case the\n\t// attribute's value should be `https://www.example.com/`.\n\tHTTPURLKey = attribute.Key(\"http.url\")\n\n\t// HTTPResendCountKey is the attribute Key conforming to the\n\t// \"http.resend_count\" semantic conventions. It represents the ordinal\n\t// number of request resending attempt (for any reason, including\n\t// redirects).\n\t//\n\t// Type: int\n\t// RequirementLevel: Recommended (if and only if request was retried.)\n\t// Stability: stable\n\t// Examples: 3\n\t// Note: The resend count SHOULD be updated each time an HTTP request gets\n\t// resent by the client, regardless of what was the cause of the resending\n\t// (e.g. redirection, authorization failure, 503 Server Unavailable,\n\t// network issues, or any other).\n\tHTTPResendCountKey = attribute.Key(\"http.resend_count\")\n)\n\n// HTTPURL returns an attribute KeyValue conforming to the \"http.url\"\n// semantic conventions. It represents the full HTTP request URL in the form\n// `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not\n// transmitted over HTTP, but if it is known, it should be included\n// nevertheless.\nfunc HTTPURL(val string) attribute.KeyValue {\n\treturn HTTPURLKey.String(val)\n}\n\n// HTTPResendCount returns an attribute KeyValue conforming to the\n// \"http.resend_count\" semantic conventions. It represents the ordinal number\n// of request resending attempt (for any reason, including redirects).\nfunc HTTPResendCount(val int) attribute.KeyValue {\n\treturn HTTPResendCountKey.Int(val)\n}\n\n// Semantic Convention for HTTP Server\nconst (\n\t// HTTPTargetKey is the attribute Key conforming to the \"http.target\"\n\t// semantic conventions. It represents the full request target as passed in\n\t// a HTTP request line or equivalent.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: '/users/12314/?q=ddds'\n\tHTTPTargetKey = attribute.Key(\"http.target\")\n\n\t// HTTPClientIPKey is the attribute Key conforming to the \"http.client_ip\"\n\t// semantic conventions. It represents the IP address of the original\n\t// client behind all proxies, if known (e.g. from\n\t// [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '83.164.160.102'\n\t// Note: This is not necessarily the same as `net.sock.peer.addr`, which\n\t// would\n\t// identify the network-level peer, which may be a proxy.\n\t//\n\t// This attribute should be set when a source of information different\n\t// from the one used for `net.sock.peer.addr`, is available even if that\n\t// other\n\t// source just confirms the same value as `net.sock.peer.addr`.\n\t// Rationale: For `net.sock.peer.addr`, one typically does not know if it\n\t// comes from a proxy, reverse proxy, or the actual client. Setting\n\t// `http.client_ip` when it's the same as `net.sock.peer.addr` means that\n\t// one is at least somewhat confident that the address is not that of\n\t// the closest proxy.\n\tHTTPClientIPKey = attribute.Key(\"http.client_ip\")\n)\n\n// HTTPTarget returns an attribute KeyValue conforming to the \"http.target\"\n// semantic conventions. It represents the full request target as passed in a\n// HTTP request line or equivalent.\nfunc HTTPTarget(val string) attribute.KeyValue {\n\treturn HTTPTargetKey.String(val)\n}\n\n// HTTPClientIP returns an attribute KeyValue conforming to the\n// \"http.client_ip\" semantic conventions. It represents the IP address of the\n// original client behind all proxies, if known (e.g. from\n// [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)).\nfunc HTTPClientIP(val string) attribute.KeyValue {\n\treturn HTTPClientIPKey.String(val)\n}\n\n// The `aws` conventions apply to operations using the AWS SDK. They map\n// request or response parameters in AWS SDK API calls to attributes on a Span.\n// The conventions have been collected over time based on feedback from AWS\n// users of tracing and will continue to evolve as new interesting conventions\n// are found.\n// Some descriptions are also provided for populating general OpenTelemetry\n// semantic conventions based on these APIs.\nconst (\n\t// AWSRequestIDKey is the attribute Key conforming to the \"aws.request_id\"\n\t// semantic conventions. It represents the AWS request ID as returned in\n\t// the response headers `x-amz-request-id` or `x-amz-requestid`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '79b9da39-b7ae-508a-a6bc-864b2829c622', 'C9ER4AJX75574TDJ'\n\tAWSRequestIDKey = attribute.Key(\"aws.request_id\")\n)\n\n// AWSRequestID returns an attribute KeyValue conforming to the\n// \"aws.request_id\" semantic conventions. It represents the AWS request ID as\n// returned in the response headers `x-amz-request-id` or `x-amz-requestid`.\nfunc AWSRequestID(val string) attribute.KeyValue {\n\treturn AWSRequestIDKey.String(val)\n}\n\n// Attributes that exist for multiple DynamoDB request types.\nconst (\n\t// AWSDynamoDBTableNamesKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.table_names\" semantic conventions. It represents the keys\n\t// in the `RequestItems` object field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Users', 'Cats'\n\tAWSDynamoDBTableNamesKey = attribute.Key(\"aws.dynamodb.table_names\")\n\n\t// AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.consumed_capacity\" semantic conventions. It represents the\n\t// JSON-serialized value of each item in the `ConsumedCapacity` response\n\t// field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": {\n\t// \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" :\n\t// { \"CapacityUnits\": number, \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\":\n\t// { \"CapacityUnits\": number, \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number }, \"TableName\": \"string\",\n\t// \"WriteCapacityUnits\": number }'\n\tAWSDynamoDBConsumedCapacityKey = attribute.Key(\"aws.dynamodb.consumed_capacity\")\n\n\t// AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.item_collection_metrics\" semantic conventions. It\n\t// represents the JSON-serialized value of the `ItemCollectionMetrics`\n\t// response field.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\":\n\t// blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": {\n\t// \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ],\n\t// \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } },\n\t// \"SizeEstimateRangeGB\": [ number ] } ] }'\n\tAWSDynamoDBItemCollectionMetricsKey = attribute.Key(\"aws.dynamodb.item_collection_metrics\")\n\n\t// AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.provisioned_read_capacity\" semantic conventions. It\n\t// represents the value of the `ProvisionedThroughput.ReadCapacityUnits`\n\t// request parameter.\n\t//\n\t// Type: double\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 1.0, 2.0\n\tAWSDynamoDBProvisionedReadCapacityKey = attribute.Key(\"aws.dynamodb.provisioned_read_capacity\")\n\n\t// AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming\n\t// to the \"aws.dynamodb.provisioned_write_capacity\" semantic conventions.\n\t// It represents the value of the\n\t// `ProvisionedThroughput.WriteCapacityUnits` request parameter.\n\t//\n\t// Type: double\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 1.0, 2.0\n\tAWSDynamoDBProvisionedWriteCapacityKey = attribute.Key(\"aws.dynamodb.provisioned_write_capacity\")\n\n\t// AWSDynamoDBConsistentReadKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.consistent_read\" semantic conventions. It represents the\n\t// value of the `ConsistentRead` request parameter.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tAWSDynamoDBConsistentReadKey = attribute.Key(\"aws.dynamodb.consistent_read\")\n\n\t// AWSDynamoDBProjectionKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.projection\" semantic conventions. It represents the value\n\t// of the `ProjectionExpression` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Title', 'Title, Price, Color', 'Title, Description,\n\t// RelatedItems, ProductReviews'\n\tAWSDynamoDBProjectionKey = attribute.Key(\"aws.dynamodb.projection\")\n\n\t// AWSDynamoDBLimitKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.limit\" semantic conventions. It represents the value of\n\t// the `Limit` request parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 10\n\tAWSDynamoDBLimitKey = attribute.Key(\"aws.dynamodb.limit\")\n\n\t// AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.attributes_to_get\" semantic conventions. It represents the\n\t// value of the `AttributesToGet` request parameter.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'lives', 'id'\n\tAWSDynamoDBAttributesToGetKey = attribute.Key(\"aws.dynamodb.attributes_to_get\")\n\n\t// AWSDynamoDBIndexNameKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.index_name\" semantic conventions. It represents the value\n\t// of the `IndexName` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'name_to_group'\n\tAWSDynamoDBIndexNameKey = attribute.Key(\"aws.dynamodb.index_name\")\n\n\t// AWSDynamoDBSelectKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.select\" semantic conventions. It represents the value of\n\t// the `Select` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'ALL_ATTRIBUTES', 'COUNT'\n\tAWSDynamoDBSelectKey = attribute.Key(\"aws.dynamodb.select\")\n)\n\n// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.table_names\" semantic conventions. It represents the keys in\n// the `RequestItems` object field.\nfunc AWSDynamoDBTableNames(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBTableNamesKey.StringSlice(val)\n}\n\n// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to\n// the \"aws.dynamodb.consumed_capacity\" semantic conventions. It represents the\n// JSON-serialized value of each item in the `ConsumedCapacity` response field.\nfunc AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBConsumedCapacityKey.StringSlice(val)\n}\n\n// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.item_collection_metrics\" semantic conventions. It\n// represents the JSON-serialized value of the `ItemCollectionMetrics` response\n// field.\nfunc AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue {\n\treturn AWSDynamoDBItemCollectionMetricsKey.String(val)\n}\n\n// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.provisioned_read_capacity\" semantic\n// conventions. It represents the value of the\n// `ProvisionedThroughput.ReadCapacityUnits` request parameter.\nfunc AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue {\n\treturn AWSDynamoDBProvisionedReadCapacityKey.Float64(val)\n}\n\n// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.provisioned_write_capacity\" semantic\n// conventions. It represents the value of the\n// `ProvisionedThroughput.WriteCapacityUnits` request parameter.\nfunc AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue {\n\treturn AWSDynamoDBProvisionedWriteCapacityKey.Float64(val)\n}\n\n// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.consistent_read\" semantic conventions. It represents the value\n// of the `ConsistentRead` request parameter.\nfunc AWSDynamoDBConsistentRead(val bool) attribute.KeyValue {\n\treturn AWSDynamoDBConsistentReadKey.Bool(val)\n}\n\n// AWSDynamoDBProjection returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.projection\" semantic conventions. It represents the value of\n// the `ProjectionExpression` request parameter.\nfunc AWSDynamoDBProjection(val string) attribute.KeyValue {\n\treturn AWSDynamoDBProjectionKey.String(val)\n}\n\n// AWSDynamoDBLimit returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.limit\" semantic conventions. It represents the value of the\n// `Limit` request parameter.\nfunc AWSDynamoDBLimit(val int) attribute.KeyValue {\n\treturn AWSDynamoDBLimitKey.Int(val)\n}\n\n// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to\n// the \"aws.dynamodb.attributes_to_get\" semantic conventions. It represents the\n// value of the `AttributesToGet` request parameter.\nfunc AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBAttributesToGetKey.StringSlice(val)\n}\n\n// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.index_name\" semantic conventions. It represents the value of\n// the `IndexName` request parameter.\nfunc AWSDynamoDBIndexName(val string) attribute.KeyValue {\n\treturn AWSDynamoDBIndexNameKey.String(val)\n}\n\n// AWSDynamoDBSelect returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.select\" semantic conventions. It represents the value of the\n// `Select` request parameter.\nfunc AWSDynamoDBSelect(val string) attribute.KeyValue {\n\treturn AWSDynamoDBSelectKey.String(val)\n}\n\n// DynamoDB.CreateTable\nconst (\n\t// AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.global_secondary_indexes\" semantic conventions. It\n\t// represents the JSON-serialized value of each item of the\n\t// `GlobalSecondaryIndexes` request field\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\":\n\t// \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [\n\t// \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": {\n\t// \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'\n\tAWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key(\"aws.dynamodb.global_secondary_indexes\")\n\n\t// AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.local_secondary_indexes\" semantic conventions. It\n\t// represents the JSON-serialized value of each item of the\n\t// `LocalSecondaryIndexes` request field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '{ \"IndexARN\": \"string\", \"IndexName\": \"string\",\n\t// \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ {\n\t// \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": {\n\t// \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }'\n\tAWSDynamoDBLocalSecondaryIndexesKey = attribute.Key(\"aws.dynamodb.local_secondary_indexes\")\n)\n\n// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.global_secondary_indexes\" semantic\n// conventions. It represents the JSON-serialized value of each item of the\n// `GlobalSecondaryIndexes` request field\nfunc AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val)\n}\n\n// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.local_secondary_indexes\" semantic conventions. It\n// represents the JSON-serialized value of each item of the\n// `LocalSecondaryIndexes` request field.\nfunc AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val)\n}\n\n// DynamoDB.ListTables\nconst (\n\t// AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.exclusive_start_table\" semantic conventions. It represents\n\t// the value of the `ExclusiveStartTableName` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Users', 'CatsTable'\n\tAWSDynamoDBExclusiveStartTableKey = attribute.Key(\"aws.dynamodb.exclusive_start_table\")\n\n\t// AWSDynamoDBTableCountKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.table_count\" semantic conventions. It represents the the\n\t// number of items in the `TableNames` response parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 20\n\tAWSDynamoDBTableCountKey = attribute.Key(\"aws.dynamodb.table_count\")\n)\n\n// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.exclusive_start_table\" semantic conventions. It\n// represents the value of the `ExclusiveStartTableName` request parameter.\nfunc AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue {\n\treturn AWSDynamoDBExclusiveStartTableKey.String(val)\n}\n\n// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.table_count\" semantic conventions. It represents the the\n// number of items in the `TableNames` response parameter.\nfunc AWSDynamoDBTableCount(val int) attribute.KeyValue {\n\treturn AWSDynamoDBTableCountKey.Int(val)\n}\n\n// DynamoDB.Query\nconst (\n\t// AWSDynamoDBScanForwardKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.scan_forward\" semantic conventions. It represents the\n\t// value of the `ScanIndexForward` request parameter.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tAWSDynamoDBScanForwardKey = attribute.Key(\"aws.dynamodb.scan_forward\")\n)\n\n// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.scan_forward\" semantic conventions. It represents the value of\n// the `ScanIndexForward` request parameter.\nfunc AWSDynamoDBScanForward(val bool) attribute.KeyValue {\n\treturn AWSDynamoDBScanForwardKey.Bool(val)\n}\n\n// DynamoDB.Scan\nconst (\n\t// AWSDynamoDBSegmentKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.segment\" semantic conventions. It represents the value of\n\t// the `Segment` request parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 10\n\tAWSDynamoDBSegmentKey = attribute.Key(\"aws.dynamodb.segment\")\n\n\t// AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.total_segments\" semantic conventions. It represents the\n\t// value of the `TotalSegments` request parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 100\n\tAWSDynamoDBTotalSegmentsKey = attribute.Key(\"aws.dynamodb.total_segments\")\n\n\t// AWSDynamoDBCountKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.count\" semantic conventions. It represents the value of\n\t// the `Count` response parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 10\n\tAWSDynamoDBCountKey = attribute.Key(\"aws.dynamodb.count\")\n\n\t// AWSDynamoDBScannedCountKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.scanned_count\" semantic conventions. It represents the\n\t// value of the `ScannedCount` response parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 50\n\tAWSDynamoDBScannedCountKey = attribute.Key(\"aws.dynamodb.scanned_count\")\n)\n\n// AWSDynamoDBSegment returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.segment\" semantic conventions. It represents the value of the\n// `Segment` request parameter.\nfunc AWSDynamoDBSegment(val int) attribute.KeyValue {\n\treturn AWSDynamoDBSegmentKey.Int(val)\n}\n\n// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.total_segments\" semantic conventions. It represents the value\n// of the `TotalSegments` request parameter.\nfunc AWSDynamoDBTotalSegments(val int) attribute.KeyValue {\n\treturn AWSDynamoDBTotalSegmentsKey.Int(val)\n}\n\n// AWSDynamoDBCount returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.count\" semantic conventions. It represents the value of the\n// `Count` response parameter.\nfunc AWSDynamoDBCount(val int) attribute.KeyValue {\n\treturn AWSDynamoDBCountKey.Int(val)\n}\n\n// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.scanned_count\" semantic conventions. It represents the value\n// of the `ScannedCount` response parameter.\nfunc AWSDynamoDBScannedCount(val int) attribute.KeyValue {\n\treturn AWSDynamoDBScannedCountKey.Int(val)\n}\n\n// DynamoDB.UpdateTable\nconst (\n\t// AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.attribute_definitions\" semantic conventions. It\n\t// represents the JSON-serialized value of each item in the\n\t// `AttributeDefinitions` request field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }'\n\tAWSDynamoDBAttributeDefinitionsKey = attribute.Key(\"aws.dynamodb.attribute_definitions\")\n\n\t// AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key\n\t// conforming to the \"aws.dynamodb.global_secondary_index_updates\" semantic\n\t// conventions. It represents the JSON-serialized value of each item in the\n\t// the `GlobalSecondaryIndexUpdates` request field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ {\n\t// \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": {\n\t// \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" },\n\t// \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number } }'\n\tAWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key(\"aws.dynamodb.global_secondary_index_updates\")\n)\n\n// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.attribute_definitions\" semantic conventions. It\n// represents the JSON-serialized value of each item in the\n// `AttributeDefinitions` request field.\nfunc AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBAttributeDefinitionsKey.StringSlice(val)\n}\n\n// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.global_secondary_index_updates\" semantic\n// conventions. It represents the JSON-serialized value of each item in the the\n// `GlobalSecondaryIndexUpdates` request field.\nfunc AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val)\n}\n\n// Attributes that exist for S3 request types.\nconst (\n\t// AWSS3BucketKey is the attribute Key conforming to the \"aws.s3.bucket\"\n\t// semantic conventions. It represents the S3 bucket name the request\n\t// refers to. Corresponds to the `--bucket` parameter of the [S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n\t// operations.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'some-bucket-name'\n\t// Note: The `bucket` attribute is applicable to all S3 operations that\n\t// reference a bucket, i.e. that require the bucket name as a mandatory\n\t// parameter.\n\t// This applies to almost all S3 operations except `list-buckets`.\n\tAWSS3BucketKey = attribute.Key(\"aws.s3.bucket\")\n\n\t// AWSS3KeyKey is the attribute Key conforming to the \"aws.s3.key\" semantic\n\t// conventions. It represents the S3 object key the request refers to.\n\t// Corresponds to the `--key` parameter of the [S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n\t// operations.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'someFile.yml'\n\t// Note: The `key` attribute is applicable to all object-related S3\n\t// operations, i.e. that require the object key as a mandatory parameter.\n\t// This applies in particular to the following operations:\n\t//\n\t// -\n\t// [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n\t// -\n\t// [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)\n\t// -\n\t// [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html)\n\t// -\n\t// [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html)\n\t// -\n\t// [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html)\n\t// -\n\t// [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html)\n\t// -\n\t// [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html)\n\t// -\n\t// [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n\t// -\n\t// [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n\t// -\n\t// [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html)\n\t// -\n\t// [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n\t// -\n\t// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n\t// -\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\tAWSS3KeyKey = attribute.Key(\"aws.s3.key\")\n\n\t// AWSS3CopySourceKey is the attribute Key conforming to the\n\t// \"aws.s3.copy_source\" semantic conventions. It represents the source\n\t// object (in the form `bucket`/`key`) for the copy operation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'someFile.yml'\n\t// Note: The `copy_source` attribute applies to S3 copy operations and\n\t// corresponds to the `--copy-source` parameter\n\t// of the [copy-object operation within the S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html).\n\t// This applies in particular to the following operations:\n\t//\n\t// -\n\t// [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n\t// -\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\tAWSS3CopySourceKey = attribute.Key(\"aws.s3.copy_source\")\n\n\t// AWSS3UploadIDKey is the attribute Key conforming to the\n\t// \"aws.s3.upload_id\" semantic conventions. It represents the upload ID\n\t// that identifies the multipart upload.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ'\n\t// Note: The `upload_id` attribute applies to S3 multipart-upload\n\t// operations and corresponds to the `--upload-id` parameter\n\t// of the [S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n\t// multipart operations.\n\t// This applies in particular to the following operations:\n\t//\n\t// -\n\t// [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n\t// -\n\t// [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n\t// -\n\t// [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n\t// -\n\t// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n\t// -\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\tAWSS3UploadIDKey = attribute.Key(\"aws.s3.upload_id\")\n\n\t// AWSS3DeleteKey is the attribute Key conforming to the \"aws.s3.delete\"\n\t// semantic conventions. It represents the delete request container that\n\t// specifies the objects to be deleted.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples:\n\t// 'Objects=[{Key=string,VersionID=string},{Key=string,VersionID=string}],Quiet=boolean'\n\t// Note: The `delete` attribute is only applicable to the\n\t// [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)\n\t// operation.\n\t// The `delete` attribute corresponds to the `--delete` parameter of the\n\t// [delete-objects operation within the S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html).\n\tAWSS3DeleteKey = attribute.Key(\"aws.s3.delete\")\n\n\t// AWSS3PartNumberKey is the attribute Key conforming to the\n\t// \"aws.s3.part_number\" semantic conventions. It represents the part number\n\t// of the part being uploaded in a multipart-upload operation. This is a\n\t// positive integer between 1 and 10,000.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 3456\n\t// Note: The `part_number` attribute is only applicable to the\n\t// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n\t// and\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\t// operations.\n\t// The `part_number` attribute corresponds to the `--part-number` parameter\n\t// of the\n\t// [upload-part operation within the S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html).\n\tAWSS3PartNumberKey = attribute.Key(\"aws.s3.part_number\")\n)\n\n// AWSS3Bucket returns an attribute KeyValue conforming to the\n// \"aws.s3.bucket\" semantic conventions. It represents the S3 bucket name the\n// request refers to. Corresponds to the `--bucket` parameter of the [S3\n// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n// operations.\nfunc AWSS3Bucket(val string) attribute.KeyValue {\n\treturn AWSS3BucketKey.String(val)\n}\n\n// AWSS3Key returns an attribute KeyValue conforming to the \"aws.s3.key\"\n// semantic conventions. It represents the S3 object key the request refers to.\n// Corresponds to the `--key` parameter of the [S3\n// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n// operations.\nfunc AWSS3Key(val string) attribute.KeyValue {\n\treturn AWSS3KeyKey.String(val)\n}\n\n// AWSS3CopySource returns an attribute KeyValue conforming to the\n// \"aws.s3.copy_source\" semantic conventions. It represents the source object\n// (in the form `bucket`/`key`) for the copy operation.\nfunc AWSS3CopySource(val string) attribute.KeyValue {\n\treturn AWSS3CopySourceKey.String(val)\n}\n\n// AWSS3UploadID returns an attribute KeyValue conforming to the\n// \"aws.s3.upload_id\" semantic conventions. It represents the upload ID that\n// identifies the multipart upload.\nfunc AWSS3UploadID(val string) attribute.KeyValue {\n\treturn AWSS3UploadIDKey.String(val)\n}\n\n// AWSS3Delete returns an attribute KeyValue conforming to the\n// \"aws.s3.delete\" semantic conventions. It represents the delete request\n// container that specifies the objects to be deleted.\nfunc AWSS3Delete(val string) attribute.KeyValue {\n\treturn AWSS3DeleteKey.String(val)\n}\n\n// AWSS3PartNumber returns an attribute KeyValue conforming to the\n// \"aws.s3.part_number\" semantic conventions. It represents the part number of\n// the part being uploaded in a multipart-upload operation. This is a positive\n// integer between 1 and 10,000.\nfunc AWSS3PartNumber(val int) attribute.KeyValue {\n\treturn AWSS3PartNumberKey.Int(val)\n}\n\n// Semantic conventions to apply when instrumenting the GraphQL implementation.\n// They map GraphQL operations to attributes on a Span.\nconst (\n\t// GraphqlOperationNameKey is the attribute Key conforming to the\n\t// \"graphql.operation.name\" semantic conventions. It represents the name of\n\t// the operation being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'findBookByID'\n\tGraphqlOperationNameKey = attribute.Key(\"graphql.operation.name\")\n\n\t// GraphqlOperationTypeKey is the attribute Key conforming to the\n\t// \"graphql.operation.type\" semantic conventions. It represents the type of\n\t// the operation being executed.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'query', 'mutation', 'subscription'\n\tGraphqlOperationTypeKey = attribute.Key(\"graphql.operation.type\")\n\n\t// GraphqlDocumentKey is the attribute Key conforming to the\n\t// \"graphql.document\" semantic conventions. It represents the GraphQL\n\t// document being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'query findBookByID { bookByID(id: ?) { name } }'\n\t// Note: The value may be sanitized to exclude sensitive information.\n\tGraphqlDocumentKey = attribute.Key(\"graphql.document\")\n)\n\nvar (\n\t// GraphQL query\n\tGraphqlOperationTypeQuery = GraphqlOperationTypeKey.String(\"query\")\n\t// GraphQL mutation\n\tGraphqlOperationTypeMutation = GraphqlOperationTypeKey.String(\"mutation\")\n\t// GraphQL subscription\n\tGraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String(\"subscription\")\n)\n\n// GraphqlOperationName returns an attribute KeyValue conforming to the\n// \"graphql.operation.name\" semantic conventions. It represents the name of the\n// operation being executed.\nfunc GraphqlOperationName(val string) attribute.KeyValue {\n\treturn GraphqlOperationNameKey.String(val)\n}\n\n// GraphqlDocument returns an attribute KeyValue conforming to the\n// \"graphql.document\" semantic conventions. It represents the GraphQL document\n// being executed.\nfunc GraphqlDocument(val string) attribute.KeyValue {\n\treturn GraphqlDocumentKey.String(val)\n}\n\n// General attributes used in messaging systems.\nconst (\n\t// MessagingSystemKey is the attribute Key conforming to the\n\t// \"messaging.system\" semantic conventions. It represents a string\n\t// identifying the messaging system.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'kafka', 'rabbitmq', 'rocketmq', 'activemq', 'AmazonSQS'\n\tMessagingSystemKey = attribute.Key(\"messaging.system\")\n\n\t// MessagingOperationKey is the attribute Key conforming to the\n\t// \"messaging.operation\" semantic conventions. It represents a string\n\t// identifying the kind of messaging operation as defined in the [Operation\n\t// names](#operation-names) section above.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Note: If a custom value is used, it MUST be of low cardinality.\n\tMessagingOperationKey = attribute.Key(\"messaging.operation\")\n\n\t// MessagingBatchMessageCountKey is the attribute Key conforming to the\n\t// \"messaging.batch.message_count\" semantic conventions. It represents the\n\t// number of messages sent, received, or processed in the scope of the\n\t// batching operation.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (If the span describes an\n\t// operation on a batch of messages.)\n\t// Stability: stable\n\t// Examples: 0, 1, 2\n\t// Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on\n\t// spans that operate with a single message. When a messaging client\n\t// library supports both batch and single-message API for the same\n\t// operation, instrumentations SHOULD use `messaging.batch.message_count`\n\t// for batching APIs and SHOULD NOT use it for single-message APIs.\n\tMessagingBatchMessageCountKey = attribute.Key(\"messaging.batch.message_count\")\n)\n\nvar (\n\t// publish\n\tMessagingOperationPublish = MessagingOperationKey.String(\"publish\")\n\t// receive\n\tMessagingOperationReceive = MessagingOperationKey.String(\"receive\")\n\t// process\n\tMessagingOperationProcess = MessagingOperationKey.String(\"process\")\n)\n\n// MessagingSystem returns an attribute KeyValue conforming to the\n// \"messaging.system\" semantic conventions. It represents a string identifying\n// the messaging system.\nfunc MessagingSystem(val string) attribute.KeyValue {\n\treturn MessagingSystemKey.String(val)\n}\n\n// MessagingBatchMessageCount returns an attribute KeyValue conforming to\n// the \"messaging.batch.message_count\" semantic conventions. It represents the\n// number of messages sent, received, or processed in the scope of the batching\n// operation.\nfunc MessagingBatchMessageCount(val int) attribute.KeyValue {\n\treturn MessagingBatchMessageCountKey.Int(val)\n}\n\n// Semantic convention for a consumer of messages received from a messaging\n// system\nconst (\n\t// MessagingConsumerIDKey is the attribute Key conforming to the\n\t// \"messaging.consumer.id\" semantic conventions. It represents the\n\t// identifier for the consumer receiving a message. For Kafka, set it to\n\t// `{messaging.kafka.consumer.group} - {messaging.kafka.client_id}`, if\n\t// both are present, or only `messaging.kafka.consumer.group`. For brokers,\n\t// such as RabbitMQ and Artemis, set it to the `client_id` of the client\n\t// consuming the message.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'mygroup - client-6'\n\tMessagingConsumerIDKey = attribute.Key(\"messaging.consumer.id\")\n)\n\n// MessagingConsumerID returns an attribute KeyValue conforming to the\n// \"messaging.consumer.id\" semantic conventions. It represents the identifier\n// for the consumer receiving a message. For Kafka, set it to\n// `{messaging.kafka.consumer.group} - {messaging.kafka.client_id}`, if both\n// are present, or only `messaging.kafka.consumer.group`. For brokers, such as\n// RabbitMQ and Artemis, set it to the `client_id` of the client consuming the\n// message.\nfunc MessagingConsumerID(val string) attribute.KeyValue {\n\treturn MessagingConsumerIDKey.String(val)\n}\n\n// Semantic conventions for remote procedure calls.\nconst (\n\t// RPCSystemKey is the attribute Key conforming to the \"rpc.system\"\n\t// semantic conventions. It represents a string identifying the remoting\n\t// system. See below for a list of well-known identifiers.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\tRPCSystemKey = attribute.Key(\"rpc.system\")\n\n\t// RPCServiceKey is the attribute Key conforming to the \"rpc.service\"\n\t// semantic conventions. It represents the full (logical) name of the\n\t// service being called, including its package name, if applicable.\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended\n\t// Stability: stable\n\t// Examples: 'myservice.EchoService'\n\t// Note: This is the logical name of the service from the RPC interface\n\t// perspective, which can be different from the name of any implementing\n\t// class. The `code.namespace` attribute may be used to store the latter\n\t// (despite the attribute name, it may include a class name; e.g., class\n\t// with method actually executing the call on the server side, RPC client\n\t// stub class on the client side).\n\tRPCServiceKey = attribute.Key(\"rpc.service\")\n\n\t// RPCMethodKey is the attribute Key conforming to the \"rpc.method\"\n\t// semantic conventions. It represents the name of the (logical) method\n\t// being called, must be equal to the $method part in the span name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Recommended\n\t// Stability: stable\n\t// Examples: 'exampleMethod'\n\t// Note: This is the logical name of the method from the RPC interface\n\t// perspective, which can be different from the name of any implementing\n\t// method/function. The `code.function` attribute may be used to store the\n\t// latter (e.g., method actually executing the call on the server side, RPC\n\t// client stub method on the client side).\n\tRPCMethodKey = attribute.Key(\"rpc.method\")\n)\n\nvar (\n\t// gRPC\n\tRPCSystemGRPC = RPCSystemKey.String(\"grpc\")\n\t// Java RMI\n\tRPCSystemJavaRmi = RPCSystemKey.String(\"java_rmi\")\n\t// .NET WCF\n\tRPCSystemDotnetWcf = RPCSystemKey.String(\"dotnet_wcf\")\n\t// Apache Dubbo\n\tRPCSystemApacheDubbo = RPCSystemKey.String(\"apache_dubbo\")\n\t// Connect RPC\n\tRPCSystemConnectRPC = RPCSystemKey.String(\"connect_rpc\")\n)\n\n// RPCService returns an attribute KeyValue conforming to the \"rpc.service\"\n// semantic conventions. It represents the full (logical) name of the service\n// being called, including its package name, if applicable.\nfunc RPCService(val string) attribute.KeyValue {\n\treturn RPCServiceKey.String(val)\n}\n\n// RPCMethod returns an attribute KeyValue conforming to the \"rpc.method\"\n// semantic conventions. It represents the name of the (logical) method being\n// called, must be equal to the $method part in the span name.\nfunc RPCMethod(val string) attribute.KeyValue {\n\treturn RPCMethodKey.String(val)\n}\n\n// Tech-specific attributes for gRPC.\nconst (\n\t// RPCGRPCStatusCodeKey is the attribute Key conforming to the\n\t// \"rpc.grpc.status_code\" semantic conventions. It represents the [numeric\n\t// status\n\t// code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of\n\t// the gRPC request.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\tRPCGRPCStatusCodeKey = attribute.Key(\"rpc.grpc.status_code\")\n)\n\nvar (\n\t// OK\n\tRPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0)\n\t// CANCELLED\n\tRPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1)\n\t// UNKNOWN\n\tRPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2)\n\t// INVALID_ARGUMENT\n\tRPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3)\n\t// DEADLINE_EXCEEDED\n\tRPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4)\n\t// NOT_FOUND\n\tRPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5)\n\t// ALREADY_EXISTS\n\tRPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6)\n\t// PERMISSION_DENIED\n\tRPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7)\n\t// RESOURCE_EXHAUSTED\n\tRPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8)\n\t// FAILED_PRECONDITION\n\tRPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9)\n\t// ABORTED\n\tRPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10)\n\t// OUT_OF_RANGE\n\tRPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11)\n\t// UNIMPLEMENTED\n\tRPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12)\n\t// INTERNAL\n\tRPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13)\n\t// UNAVAILABLE\n\tRPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14)\n\t// DATA_LOSS\n\tRPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15)\n\t// UNAUTHENTICATED\n\tRPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16)\n)\n\n// Tech-specific attributes for [JSON RPC](https://www.jsonrpc.org/).\nconst (\n\t// RPCJsonrpcVersionKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.version\" semantic conventions. It represents the protocol\n\t// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0\n\t// does not specify this, the value can be omitted.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (If other than the default\n\t// version (`1.0`))\n\t// Stability: stable\n\t// Examples: '2.0', '1.0'\n\tRPCJsonrpcVersionKey = attribute.Key(\"rpc.jsonrpc.version\")\n\n\t// RPCJsonrpcRequestIDKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.request_id\" semantic conventions. It represents the `id`\n\t// property of request or response. Since protocol allows id to be int,\n\t// string, `null` or missing (for notifications), value is expected to be\n\t// cast to string for simplicity. Use empty string in case of `null` value.\n\t// Omit entirely if this is a notification.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '10', 'request-7', ''\n\tRPCJsonrpcRequestIDKey = attribute.Key(\"rpc.jsonrpc.request_id\")\n\n\t// RPCJsonrpcErrorCodeKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.error_code\" semantic conventions. It represents the\n\t// `error.code` property of response if it is an error response.\n\t//\n\t// Type: int\n\t// RequirementLevel: ConditionallyRequired (If response is not successful.)\n\t// Stability: stable\n\t// Examples: -32700, 100\n\tRPCJsonrpcErrorCodeKey = attribute.Key(\"rpc.jsonrpc.error_code\")\n\n\t// RPCJsonrpcErrorMessageKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.error_message\" semantic conventions. It represents the\n\t// `error.message` property of response if it is an error response.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Parse error', 'User already exists'\n\tRPCJsonrpcErrorMessageKey = attribute.Key(\"rpc.jsonrpc.error_message\")\n)\n\n// RPCJsonrpcVersion returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.version\" semantic conventions. It represents the protocol\n// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0\n// does not specify this, the value can be omitted.\nfunc RPCJsonrpcVersion(val string) attribute.KeyValue {\n\treturn RPCJsonrpcVersionKey.String(val)\n}\n\n// RPCJsonrpcRequestID returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.request_id\" semantic conventions. It represents the `id`\n// property of request or response. Since protocol allows id to be int, string,\n// `null` or missing (for notifications), value is expected to be cast to\n// string for simplicity. Use empty string in case of `null` value. Omit\n// entirely if this is a notification.\nfunc RPCJsonrpcRequestID(val string) attribute.KeyValue {\n\treturn RPCJsonrpcRequestIDKey.String(val)\n}\n\n// RPCJsonrpcErrorCode returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.error_code\" semantic conventions. It represents the\n// `error.code` property of response if it is an error response.\nfunc RPCJsonrpcErrorCode(val int) attribute.KeyValue {\n\treturn RPCJsonrpcErrorCodeKey.Int(val)\n}\n\n// RPCJsonrpcErrorMessage returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.error_message\" semantic conventions. It represents the\n// `error.message` property of response if it is an error response.\nfunc RPCJsonrpcErrorMessage(val string) attribute.KeyValue {\n\treturn RPCJsonrpcErrorMessageKey.String(val)\n}\n\n// Tech-specific attributes for Connect RPC.\nconst (\n\t// RPCConnectRPCErrorCodeKey is the attribute Key conforming to the\n\t// \"rpc.connect_rpc.error_code\" semantic conventions. It represents the\n\t// [error codes](https://connect.build/docs/protocol/#error-codes) of the\n\t// Connect request. Error codes are always string values.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: ConditionallyRequired (If response is not successful\n\t// and if error code available.)\n\t// Stability: stable\n\tRPCConnectRPCErrorCodeKey = attribute.Key(\"rpc.connect_rpc.error_code\")\n)\n\nvar (\n\t// cancelled\n\tRPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String(\"cancelled\")\n\t// unknown\n\tRPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String(\"unknown\")\n\t// invalid_argument\n\tRPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String(\"invalid_argument\")\n\t// deadline_exceeded\n\tRPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String(\"deadline_exceeded\")\n\t// not_found\n\tRPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String(\"not_found\")\n\t// already_exists\n\tRPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String(\"already_exists\")\n\t// permission_denied\n\tRPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String(\"permission_denied\")\n\t// resource_exhausted\n\tRPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String(\"resource_exhausted\")\n\t// failed_precondition\n\tRPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String(\"failed_precondition\")\n\t// aborted\n\tRPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String(\"aborted\")\n\t// out_of_range\n\tRPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String(\"out_of_range\")\n\t// unimplemented\n\tRPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String(\"unimplemented\")\n\t// internal\n\tRPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String(\"internal\")\n\t// unavailable\n\tRPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String(\"unavailable\")\n\t// data_loss\n\tRPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String(\"data_loss\")\n\t// unauthenticated\n\tRPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String(\"unauthenticated\")\n)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.26.0/README.md",
    "content": "# Semconv v1.26.0\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.26.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.26.0)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.26.0/attribute_group.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Code generated from semantic convention specification. DO NOT EDIT.\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.26.0\"\n\nimport \"go.opentelemetry.io/otel/attribute\"\n\n// The Android platform on which the Android application is running.\nconst (\n\t// AndroidOSAPILevelKey is the attribute Key conforming to the\n\t// \"android.os.api_level\" semantic conventions. It represents the uniquely\n\t// identifies the framework API revision offered by a version\n\t// (`os.version`) of the android operating system. More information can be\n\t// found\n\t// [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '33', '32'\n\tAndroidOSAPILevelKey = attribute.Key(\"android.os.api_level\")\n)\n\n// AndroidOSAPILevel returns an attribute KeyValue conforming to the\n// \"android.os.api_level\" semantic conventions. It represents the uniquely\n// identifies the framework API revision offered by a version (`os.version`) of\n// the android operating system. More information can be found\n// [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels).\nfunc AndroidOSAPILevel(val string) attribute.KeyValue {\n\treturn AndroidOSAPILevelKey.String(val)\n}\n\n// ASP.NET Core attributes\nconst (\n\t// AspnetcoreRateLimitingResultKey is the attribute Key conforming to the\n\t// \"aspnetcore.rate_limiting.result\" semantic conventions. It represents\n\t// the rate-limiting result, shows whether the lease was acquired or\n\t// contains a rejection reason\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'acquired', 'request_canceled'\n\tAspnetcoreRateLimitingResultKey = attribute.Key(\"aspnetcore.rate_limiting.result\")\n\n\t// AspnetcoreDiagnosticsHandlerTypeKey is the attribute Key conforming to\n\t// the \"aspnetcore.diagnostics.handler.type\" semantic conventions. It\n\t// represents the full type name of the\n\t// [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler)\n\t// implementation that handled the exception.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (if and only if the exception\n\t// was handled by this handler.)\n\t// Stability: stable\n\t// Examples: 'Contoso.MyHandler'\n\tAspnetcoreDiagnosticsHandlerTypeKey = attribute.Key(\"aspnetcore.diagnostics.handler.type\")\n\n\t// AspnetcoreDiagnosticsExceptionResultKey is the attribute Key conforming\n\t// to the \"aspnetcore.diagnostics.exception.result\" semantic conventions.\n\t// It represents the aSP.NET Core exception middleware handling result\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'handled', 'unhandled'\n\tAspnetcoreDiagnosticsExceptionResultKey = attribute.Key(\"aspnetcore.diagnostics.exception.result\")\n\n\t// AspnetcoreRateLimitingPolicyKey is the attribute Key conforming to the\n\t// \"aspnetcore.rate_limiting.policy\" semantic conventions. It represents\n\t// the rate limiting policy name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'fixed', 'sliding', 'token'\n\tAspnetcoreRateLimitingPolicyKey = attribute.Key(\"aspnetcore.rate_limiting.policy\")\n\n\t// AspnetcoreRequestIsUnhandledKey is the attribute Key conforming to the\n\t// \"aspnetcore.request.is_unhandled\" semantic conventions. It represents\n\t// the flag indicating if request was handled by the application pipeline.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: True\n\tAspnetcoreRequestIsUnhandledKey = attribute.Key(\"aspnetcore.request.is_unhandled\")\n\n\t// AspnetcoreRoutingIsFallbackKey is the attribute Key conforming to the\n\t// \"aspnetcore.routing.is_fallback\" semantic conventions. It represents a\n\t// value that indicates whether the matched route is a fallback route.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: True\n\tAspnetcoreRoutingIsFallbackKey = attribute.Key(\"aspnetcore.routing.is_fallback\")\n\n\t// AspnetcoreRoutingMatchStatusKey is the attribute Key conforming to the\n\t// \"aspnetcore.routing.match_status\" semantic conventions. It represents\n\t// the match result - success or failure\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'success', 'failure'\n\tAspnetcoreRoutingMatchStatusKey = attribute.Key(\"aspnetcore.routing.match_status\")\n)\n\nvar (\n\t// Lease was acquired\n\tAspnetcoreRateLimitingResultAcquired = AspnetcoreRateLimitingResultKey.String(\"acquired\")\n\t// Lease request was rejected by the endpoint limiter\n\tAspnetcoreRateLimitingResultEndpointLimiter = AspnetcoreRateLimitingResultKey.String(\"endpoint_limiter\")\n\t// Lease request was rejected by the global limiter\n\tAspnetcoreRateLimitingResultGlobalLimiter = AspnetcoreRateLimitingResultKey.String(\"global_limiter\")\n\t// Lease request was canceled\n\tAspnetcoreRateLimitingResultRequestCanceled = AspnetcoreRateLimitingResultKey.String(\"request_canceled\")\n)\n\nvar (\n\t// Exception was handled by the exception handling middleware\n\tAspnetcoreDiagnosticsExceptionResultHandled = AspnetcoreDiagnosticsExceptionResultKey.String(\"handled\")\n\t// Exception was not handled by the exception handling middleware\n\tAspnetcoreDiagnosticsExceptionResultUnhandled = AspnetcoreDiagnosticsExceptionResultKey.String(\"unhandled\")\n\t// Exception handling was skipped because the response had started\n\tAspnetcoreDiagnosticsExceptionResultSkipped = AspnetcoreDiagnosticsExceptionResultKey.String(\"skipped\")\n\t// Exception handling didn't run because the request was aborted\n\tAspnetcoreDiagnosticsExceptionResultAborted = AspnetcoreDiagnosticsExceptionResultKey.String(\"aborted\")\n)\n\nvar (\n\t// Match succeeded\n\tAspnetcoreRoutingMatchStatusSuccess = AspnetcoreRoutingMatchStatusKey.String(\"success\")\n\t// Match failed\n\tAspnetcoreRoutingMatchStatusFailure = AspnetcoreRoutingMatchStatusKey.String(\"failure\")\n)\n\n// AspnetcoreDiagnosticsHandlerType returns an attribute KeyValue conforming\n// to the \"aspnetcore.diagnostics.handler.type\" semantic conventions. It\n// represents the full type name of the\n// [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler)\n// implementation that handled the exception.\nfunc AspnetcoreDiagnosticsHandlerType(val string) attribute.KeyValue {\n\treturn AspnetcoreDiagnosticsHandlerTypeKey.String(val)\n}\n\n// AspnetcoreRateLimitingPolicy returns an attribute KeyValue conforming to\n// the \"aspnetcore.rate_limiting.policy\" semantic conventions. It represents\n// the rate limiting policy name.\nfunc AspnetcoreRateLimitingPolicy(val string) attribute.KeyValue {\n\treturn AspnetcoreRateLimitingPolicyKey.String(val)\n}\n\n// AspnetcoreRequestIsUnhandled returns an attribute KeyValue conforming to\n// the \"aspnetcore.request.is_unhandled\" semantic conventions. It represents\n// the flag indicating if request was handled by the application pipeline.\nfunc AspnetcoreRequestIsUnhandled(val bool) attribute.KeyValue {\n\treturn AspnetcoreRequestIsUnhandledKey.Bool(val)\n}\n\n// AspnetcoreRoutingIsFallback returns an attribute KeyValue conforming to\n// the \"aspnetcore.routing.is_fallback\" semantic conventions. It represents a\n// value that indicates whether the matched route is a fallback route.\nfunc AspnetcoreRoutingIsFallback(val bool) attribute.KeyValue {\n\treturn AspnetcoreRoutingIsFallbackKey.Bool(val)\n}\n\n// Generic attributes for AWS services.\nconst (\n\t// AWSRequestIDKey is the attribute Key conforming to the \"aws.request_id\"\n\t// semantic conventions. It represents the AWS request ID as returned in\n\t// the response headers `x-amz-request-id` or `x-amz-requestid`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '79b9da39-b7ae-508a-a6bc-864b2829c622', 'C9ER4AJX75574TDJ'\n\tAWSRequestIDKey = attribute.Key(\"aws.request_id\")\n)\n\n// AWSRequestID returns an attribute KeyValue conforming to the\n// \"aws.request_id\" semantic conventions. It represents the AWS request ID as\n// returned in the response headers `x-amz-request-id` or `x-amz-requestid`.\nfunc AWSRequestID(val string) attribute.KeyValue {\n\treturn AWSRequestIDKey.String(val)\n}\n\n// Attributes for AWS DynamoDB.\nconst (\n\t// AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.attribute_definitions\" semantic conventions. It\n\t// represents the JSON-serialized value of each item in the\n\t// `AttributeDefinitions` request field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }'\n\tAWSDynamoDBAttributeDefinitionsKey = attribute.Key(\"aws.dynamodb.attribute_definitions\")\n\n\t// AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.attributes_to_get\" semantic conventions. It represents the\n\t// value of the `AttributesToGet` request parameter.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'lives', 'id'\n\tAWSDynamoDBAttributesToGetKey = attribute.Key(\"aws.dynamodb.attributes_to_get\")\n\n\t// AWSDynamoDBConsistentReadKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.consistent_read\" semantic conventions. It represents the\n\t// value of the `ConsistentRead` request parameter.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tAWSDynamoDBConsistentReadKey = attribute.Key(\"aws.dynamodb.consistent_read\")\n\n\t// AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.consumed_capacity\" semantic conventions. It represents the\n\t// JSON-serialized value of each item in the `ConsumedCapacity` response\n\t// field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": {\n\t// \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" :\n\t// { \"CapacityUnits\": number, \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\":\n\t// { \"CapacityUnits\": number, \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number }, \"TableName\": \"string\",\n\t// \"WriteCapacityUnits\": number }'\n\tAWSDynamoDBConsumedCapacityKey = attribute.Key(\"aws.dynamodb.consumed_capacity\")\n\n\t// AWSDynamoDBCountKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.count\" semantic conventions. It represents the value of\n\t// the `Count` response parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 10\n\tAWSDynamoDBCountKey = attribute.Key(\"aws.dynamodb.count\")\n\n\t// AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.exclusive_start_table\" semantic conventions. It represents\n\t// the value of the `ExclusiveStartTableName` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Users', 'CatsTable'\n\tAWSDynamoDBExclusiveStartTableKey = attribute.Key(\"aws.dynamodb.exclusive_start_table\")\n\n\t// AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key\n\t// conforming to the \"aws.dynamodb.global_secondary_index_updates\" semantic\n\t// conventions. It represents the JSON-serialized value of each item in the\n\t// `GlobalSecondaryIndexUpdates` request field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ {\n\t// \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": {\n\t// \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" },\n\t// \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number,\n\t// \"WriteCapacityUnits\": number } }'\n\tAWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key(\"aws.dynamodb.global_secondary_index_updates\")\n\n\t// AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.global_secondary_indexes\" semantic conventions. It\n\t// represents the JSON-serialized value of each item of the\n\t// `GlobalSecondaryIndexes` request field\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\":\n\t// \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [\n\t// \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": {\n\t// \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }'\n\tAWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key(\"aws.dynamodb.global_secondary_indexes\")\n\n\t// AWSDynamoDBIndexNameKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.index_name\" semantic conventions. It represents the value\n\t// of the `IndexName` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'name_to_group'\n\tAWSDynamoDBIndexNameKey = attribute.Key(\"aws.dynamodb.index_name\")\n\n\t// AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.item_collection_metrics\" semantic conventions. It\n\t// represents the JSON-serialized value of the `ItemCollectionMetrics`\n\t// response field.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\":\n\t// blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": {\n\t// \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ],\n\t// \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } },\n\t// \"SizeEstimateRangeGB\": [ number ] } ] }'\n\tAWSDynamoDBItemCollectionMetricsKey = attribute.Key(\"aws.dynamodb.item_collection_metrics\")\n\n\t// AWSDynamoDBLimitKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.limit\" semantic conventions. It represents the value of\n\t// the `Limit` request parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 10\n\tAWSDynamoDBLimitKey = attribute.Key(\"aws.dynamodb.limit\")\n\n\t// AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.local_secondary_indexes\" semantic conventions. It\n\t// represents the JSON-serialized value of each item of the\n\t// `LocalSecondaryIndexes` request field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '{ \"IndexARN\": \"string\", \"IndexName\": \"string\",\n\t// \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ {\n\t// \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": {\n\t// \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }'\n\tAWSDynamoDBLocalSecondaryIndexesKey = attribute.Key(\"aws.dynamodb.local_secondary_indexes\")\n\n\t// AWSDynamoDBProjectionKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.projection\" semantic conventions. It represents the value\n\t// of the `ProjectionExpression` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Title', 'Title, Price, Color', 'Title, Description,\n\t// RelatedItems, ProductReviews'\n\tAWSDynamoDBProjectionKey = attribute.Key(\"aws.dynamodb.projection\")\n\n\t// AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to\n\t// the \"aws.dynamodb.provisioned_read_capacity\" semantic conventions. It\n\t// represents the value of the `ProvisionedThroughput.ReadCapacityUnits`\n\t// request parameter.\n\t//\n\t// Type: double\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1.0, 2.0\n\tAWSDynamoDBProvisionedReadCapacityKey = attribute.Key(\"aws.dynamodb.provisioned_read_capacity\")\n\n\t// AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming\n\t// to the \"aws.dynamodb.provisioned_write_capacity\" semantic conventions.\n\t// It represents the value of the\n\t// `ProvisionedThroughput.WriteCapacityUnits` request parameter.\n\t//\n\t// Type: double\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1.0, 2.0\n\tAWSDynamoDBProvisionedWriteCapacityKey = attribute.Key(\"aws.dynamodb.provisioned_write_capacity\")\n\n\t// AWSDynamoDBScanForwardKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.scan_forward\" semantic conventions. It represents the\n\t// value of the `ScanIndexForward` request parameter.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tAWSDynamoDBScanForwardKey = attribute.Key(\"aws.dynamodb.scan_forward\")\n\n\t// AWSDynamoDBScannedCountKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.scanned_count\" semantic conventions. It represents the\n\t// value of the `ScannedCount` response parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 50\n\tAWSDynamoDBScannedCountKey = attribute.Key(\"aws.dynamodb.scanned_count\")\n\n\t// AWSDynamoDBSegmentKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.segment\" semantic conventions. It represents the value of\n\t// the `Segment` request parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 10\n\tAWSDynamoDBSegmentKey = attribute.Key(\"aws.dynamodb.segment\")\n\n\t// AWSDynamoDBSelectKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.select\" semantic conventions. It represents the value of\n\t// the `Select` request parameter.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'ALL_ATTRIBUTES', 'COUNT'\n\tAWSDynamoDBSelectKey = attribute.Key(\"aws.dynamodb.select\")\n\n\t// AWSDynamoDBTableCountKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.table_count\" semantic conventions. It represents the\n\t// number of items in the `TableNames` response parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 20\n\tAWSDynamoDBTableCountKey = attribute.Key(\"aws.dynamodb.table_count\")\n\n\t// AWSDynamoDBTableNamesKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.table_names\" semantic conventions. It represents the keys\n\t// in the `RequestItems` object field.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Users', 'Cats'\n\tAWSDynamoDBTableNamesKey = attribute.Key(\"aws.dynamodb.table_names\")\n\n\t// AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the\n\t// \"aws.dynamodb.total_segments\" semantic conventions. It represents the\n\t// value of the `TotalSegments` request parameter.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 100\n\tAWSDynamoDBTotalSegmentsKey = attribute.Key(\"aws.dynamodb.total_segments\")\n)\n\n// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.attribute_definitions\" semantic conventions. It\n// represents the JSON-serialized value of each item in the\n// `AttributeDefinitions` request field.\nfunc AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBAttributeDefinitionsKey.StringSlice(val)\n}\n\n// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to\n// the \"aws.dynamodb.attributes_to_get\" semantic conventions. It represents the\n// value of the `AttributesToGet` request parameter.\nfunc AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBAttributesToGetKey.StringSlice(val)\n}\n\n// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.consistent_read\" semantic conventions. It represents the value\n// of the `ConsistentRead` request parameter.\nfunc AWSDynamoDBConsistentRead(val bool) attribute.KeyValue {\n\treturn AWSDynamoDBConsistentReadKey.Bool(val)\n}\n\n// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to\n// the \"aws.dynamodb.consumed_capacity\" semantic conventions. It represents the\n// JSON-serialized value of each item in the `ConsumedCapacity` response field.\nfunc AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBConsumedCapacityKey.StringSlice(val)\n}\n\n// AWSDynamoDBCount returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.count\" semantic conventions. It represents the value of the\n// `Count` response parameter.\nfunc AWSDynamoDBCount(val int) attribute.KeyValue {\n\treturn AWSDynamoDBCountKey.Int(val)\n}\n\n// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.exclusive_start_table\" semantic conventions. It\n// represents the value of the `ExclusiveStartTableName` request parameter.\nfunc AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue {\n\treturn AWSDynamoDBExclusiveStartTableKey.String(val)\n}\n\n// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.global_secondary_index_updates\" semantic\n// conventions. It represents the JSON-serialized value of each item in the\n// `GlobalSecondaryIndexUpdates` request field.\nfunc AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val)\n}\n\n// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.global_secondary_indexes\" semantic\n// conventions. It represents the JSON-serialized value of each item of the\n// `GlobalSecondaryIndexes` request field\nfunc AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val)\n}\n\n// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.index_name\" semantic conventions. It represents the value of\n// the `IndexName` request parameter.\nfunc AWSDynamoDBIndexName(val string) attribute.KeyValue {\n\treturn AWSDynamoDBIndexNameKey.String(val)\n}\n\n// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.item_collection_metrics\" semantic conventions. It\n// represents the JSON-serialized value of the `ItemCollectionMetrics` response\n// field.\nfunc AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue {\n\treturn AWSDynamoDBItemCollectionMetricsKey.String(val)\n}\n\n// AWSDynamoDBLimit returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.limit\" semantic conventions. It represents the value of the\n// `Limit` request parameter.\nfunc AWSDynamoDBLimit(val int) attribute.KeyValue {\n\treturn AWSDynamoDBLimitKey.Int(val)\n}\n\n// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming\n// to the \"aws.dynamodb.local_secondary_indexes\" semantic conventions. It\n// represents the JSON-serialized value of each item of the\n// `LocalSecondaryIndexes` request field.\nfunc AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val)\n}\n\n// AWSDynamoDBProjection returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.projection\" semantic conventions. It represents the value of\n// the `ProjectionExpression` request parameter.\nfunc AWSDynamoDBProjection(val string) attribute.KeyValue {\n\treturn AWSDynamoDBProjectionKey.String(val)\n}\n\n// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.provisioned_read_capacity\" semantic\n// conventions. It represents the value of the\n// `ProvisionedThroughput.ReadCapacityUnits` request parameter.\nfunc AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue {\n\treturn AWSDynamoDBProvisionedReadCapacityKey.Float64(val)\n}\n\n// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue\n// conforming to the \"aws.dynamodb.provisioned_write_capacity\" semantic\n// conventions. It represents the value of the\n// `ProvisionedThroughput.WriteCapacityUnits` request parameter.\nfunc AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue {\n\treturn AWSDynamoDBProvisionedWriteCapacityKey.Float64(val)\n}\n\n// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.scan_forward\" semantic conventions. It represents the value of\n// the `ScanIndexForward` request parameter.\nfunc AWSDynamoDBScanForward(val bool) attribute.KeyValue {\n\treturn AWSDynamoDBScanForwardKey.Bool(val)\n}\n\n// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.scanned_count\" semantic conventions. It represents the value\n// of the `ScannedCount` response parameter.\nfunc AWSDynamoDBScannedCount(val int) attribute.KeyValue {\n\treturn AWSDynamoDBScannedCountKey.Int(val)\n}\n\n// AWSDynamoDBSegment returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.segment\" semantic conventions. It represents the value of the\n// `Segment` request parameter.\nfunc AWSDynamoDBSegment(val int) attribute.KeyValue {\n\treturn AWSDynamoDBSegmentKey.Int(val)\n}\n\n// AWSDynamoDBSelect returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.select\" semantic conventions. It represents the value of the\n// `Select` request parameter.\nfunc AWSDynamoDBSelect(val string) attribute.KeyValue {\n\treturn AWSDynamoDBSelectKey.String(val)\n}\n\n// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.table_count\" semantic conventions. It represents the number of\n// items in the `TableNames` response parameter.\nfunc AWSDynamoDBTableCount(val int) attribute.KeyValue {\n\treturn AWSDynamoDBTableCountKey.Int(val)\n}\n\n// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.table_names\" semantic conventions. It represents the keys in\n// the `RequestItems` object field.\nfunc AWSDynamoDBTableNames(val ...string) attribute.KeyValue {\n\treturn AWSDynamoDBTableNamesKey.StringSlice(val)\n}\n\n// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the\n// \"aws.dynamodb.total_segments\" semantic conventions. It represents the value\n// of the `TotalSegments` request parameter.\nfunc AWSDynamoDBTotalSegments(val int) attribute.KeyValue {\n\treturn AWSDynamoDBTotalSegmentsKey.Int(val)\n}\n\n// Attributes for AWS Elastic Container Service (ECS).\nconst (\n\t// AWSECSTaskIDKey is the attribute Key conforming to the \"aws.ecs.task.id\"\n\t// semantic conventions. It represents the ID of a running ECS task. The ID\n\t// MUST be extracted from `task.arn`.\n\t//\n\t// Type: string\n\t// RequirementLevel: ConditionallyRequired (If and only if `task.arn` is\n\t// populated.)\n\t// Stability: experimental\n\t// Examples: '10838bed-421f-43ef-870a-f43feacbbb5b',\n\t// '23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd'\n\tAWSECSTaskIDKey = attribute.Key(\"aws.ecs.task.id\")\n\n\t// AWSECSClusterARNKey is the attribute Key conforming to the\n\t// \"aws.ecs.cluster.arn\" semantic conventions. It represents the ARN of an\n\t// [ECS\n\t// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'\n\tAWSECSClusterARNKey = attribute.Key(\"aws.ecs.cluster.arn\")\n\n\t// AWSECSContainerARNKey is the attribute Key conforming to the\n\t// \"aws.ecs.container.arn\" semantic conventions. It represents the Amazon\n\t// Resource Name (ARN) of an [ECS container\n\t// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9'\n\tAWSECSContainerARNKey = attribute.Key(\"aws.ecs.container.arn\")\n\n\t// AWSECSLaunchtypeKey is the attribute Key conforming to the\n\t// \"aws.ecs.launchtype\" semantic conventions. It represents the [launch\n\t// type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html)\n\t// for an ECS task.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tAWSECSLaunchtypeKey = attribute.Key(\"aws.ecs.launchtype\")\n\n\t// AWSECSTaskARNKey is the attribute Key conforming to the\n\t// \"aws.ecs.task.arn\" semantic conventions. It represents the ARN of a\n\t// running [ECS\n\t// task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b',\n\t// 'arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd'\n\tAWSECSTaskARNKey = attribute.Key(\"aws.ecs.task.arn\")\n\n\t// AWSECSTaskFamilyKey is the attribute Key conforming to the\n\t// \"aws.ecs.task.family\" semantic conventions. It represents the family\n\t// name of the [ECS task\n\t// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)\n\t// used to create the ECS task.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry-family'\n\tAWSECSTaskFamilyKey = attribute.Key(\"aws.ecs.task.family\")\n\n\t// AWSECSTaskRevisionKey is the attribute Key conforming to the\n\t// \"aws.ecs.task.revision\" semantic conventions. It represents the revision\n\t// for the task definition used to create the ECS task.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '8', '26'\n\tAWSECSTaskRevisionKey = attribute.Key(\"aws.ecs.task.revision\")\n)\n\nvar (\n\t// ec2\n\tAWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String(\"ec2\")\n\t// fargate\n\tAWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String(\"fargate\")\n)\n\n// AWSECSTaskID returns an attribute KeyValue conforming to the\n// \"aws.ecs.task.id\" semantic conventions. It represents the ID of a running\n// ECS task. The ID MUST be extracted from `task.arn`.\nfunc AWSECSTaskID(val string) attribute.KeyValue {\n\treturn AWSECSTaskIDKey.String(val)\n}\n\n// AWSECSClusterARN returns an attribute KeyValue conforming to the\n// \"aws.ecs.cluster.arn\" semantic conventions. It represents the ARN of an [ECS\n// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\nfunc AWSECSClusterARN(val string) attribute.KeyValue {\n\treturn AWSECSClusterARNKey.String(val)\n}\n\n// AWSECSContainerARN returns an attribute KeyValue conforming to the\n// \"aws.ecs.container.arn\" semantic conventions. It represents the Amazon\n// Resource Name (ARN) of an [ECS container\n// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\nfunc AWSECSContainerARN(val string) attribute.KeyValue {\n\treturn AWSECSContainerARNKey.String(val)\n}\n\n// AWSECSTaskARN returns an attribute KeyValue conforming to the\n// \"aws.ecs.task.arn\" semantic conventions. It represents the ARN of a running\n// [ECS\n// task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids).\nfunc AWSECSTaskARN(val string) attribute.KeyValue {\n\treturn AWSECSTaskARNKey.String(val)\n}\n\n// AWSECSTaskFamily returns an attribute KeyValue conforming to the\n// \"aws.ecs.task.family\" semantic conventions. It represents the family name of\n// the [ECS task\n// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)\n// used to create the ECS task.\nfunc AWSECSTaskFamily(val string) attribute.KeyValue {\n\treturn AWSECSTaskFamilyKey.String(val)\n}\n\n// AWSECSTaskRevision returns an attribute KeyValue conforming to the\n// \"aws.ecs.task.revision\" semantic conventions. It represents the revision for\n// the task definition used to create the ECS task.\nfunc AWSECSTaskRevision(val string) attribute.KeyValue {\n\treturn AWSECSTaskRevisionKey.String(val)\n}\n\n// Attributes for AWS Elastic Kubernetes Service (EKS).\nconst (\n\t// AWSEKSClusterARNKey is the attribute Key conforming to the\n\t// \"aws.eks.cluster.arn\" semantic conventions. It represents the ARN of an\n\t// EKS cluster.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster'\n\tAWSEKSClusterARNKey = attribute.Key(\"aws.eks.cluster.arn\")\n)\n\n// AWSEKSClusterARN returns an attribute KeyValue conforming to the\n// \"aws.eks.cluster.arn\" semantic conventions. It represents the ARN of an EKS\n// cluster.\nfunc AWSEKSClusterARN(val string) attribute.KeyValue {\n\treturn AWSEKSClusterARNKey.String(val)\n}\n\n// Attributes for AWS Logs.\nconst (\n\t// AWSLogGroupARNsKey is the attribute Key conforming to the\n\t// \"aws.log.group.arns\" semantic conventions. It represents the Amazon\n\t// Resource Name(s) (ARN) of the AWS log group(s).\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*'\n\t// Note: See the [log group ARN format\n\t// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n\tAWSLogGroupARNsKey = attribute.Key(\"aws.log.group.arns\")\n\n\t// AWSLogGroupNamesKey is the attribute Key conforming to the\n\t// \"aws.log.group.names\" semantic conventions. It represents the name(s) of\n\t// the AWS log group(s) an application is writing to.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/aws/lambda/my-function', 'opentelemetry-service'\n\t// Note: Multiple log groups must be supported for cases like\n\t// multi-container applications, where a single application has sidecar\n\t// containers, and each write to their own log group.\n\tAWSLogGroupNamesKey = attribute.Key(\"aws.log.group.names\")\n\n\t// AWSLogStreamARNsKey is the attribute Key conforming to the\n\t// \"aws.log.stream.arns\" semantic conventions. It represents the ARN(s) of\n\t// the AWS log stream(s).\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'\n\t// Note: See the [log stream ARN format\n\t// documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n\t// One log group can contain several log streams, so these ARNs necessarily\n\t// identify both a log group and a log stream.\n\tAWSLogStreamARNsKey = attribute.Key(\"aws.log.stream.arns\")\n\n\t// AWSLogStreamNamesKey is the attribute Key conforming to the\n\t// \"aws.log.stream.names\" semantic conventions. It represents the name(s)\n\t// of the AWS log stream(s) an application is writing to.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b'\n\tAWSLogStreamNamesKey = attribute.Key(\"aws.log.stream.names\")\n)\n\n// AWSLogGroupARNs returns an attribute KeyValue conforming to the\n// \"aws.log.group.arns\" semantic conventions. It represents the Amazon Resource\n// Name(s) (ARN) of the AWS log group(s).\nfunc AWSLogGroupARNs(val ...string) attribute.KeyValue {\n\treturn AWSLogGroupARNsKey.StringSlice(val)\n}\n\n// AWSLogGroupNames returns an attribute KeyValue conforming to the\n// \"aws.log.group.names\" semantic conventions. It represents the name(s) of the\n// AWS log group(s) an application is writing to.\nfunc AWSLogGroupNames(val ...string) attribute.KeyValue {\n\treturn AWSLogGroupNamesKey.StringSlice(val)\n}\n\n// AWSLogStreamARNs returns an attribute KeyValue conforming to the\n// \"aws.log.stream.arns\" semantic conventions. It represents the ARN(s) of the\n// AWS log stream(s).\nfunc AWSLogStreamARNs(val ...string) attribute.KeyValue {\n\treturn AWSLogStreamARNsKey.StringSlice(val)\n}\n\n// AWSLogStreamNames returns an attribute KeyValue conforming to the\n// \"aws.log.stream.names\" semantic conventions. It represents the name(s) of\n// the AWS log stream(s) an application is writing to.\nfunc AWSLogStreamNames(val ...string) attribute.KeyValue {\n\treturn AWSLogStreamNamesKey.StringSlice(val)\n}\n\n// Attributes for AWS Lambda.\nconst (\n\t// AWSLambdaInvokedARNKey is the attribute Key conforming to the\n\t// \"aws.lambda.invoked_arn\" semantic conventions. It represents the full\n\t// invoked ARN as provided on the `Context` passed to the function\n\t// (`Lambda-Runtime-Invoked-Function-ARN` header on the\n\t// `/runtime/invocation/next` applicable).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'arn:aws:lambda:us-east-1:123456:function:myfunction:myalias'\n\t// Note: This may be different from `cloud.resource_id` if an alias is\n\t// involved.\n\tAWSLambdaInvokedARNKey = attribute.Key(\"aws.lambda.invoked_arn\")\n)\n\n// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the\n// \"aws.lambda.invoked_arn\" semantic conventions. It represents the full\n// invoked ARN as provided on the `Context` passed to the function\n// (`Lambda-Runtime-Invoked-Function-ARN` header on the\n// `/runtime/invocation/next` applicable).\nfunc AWSLambdaInvokedARN(val string) attribute.KeyValue {\n\treturn AWSLambdaInvokedARNKey.String(val)\n}\n\n// Attributes for AWS S3.\nconst (\n\t// AWSS3BucketKey is the attribute Key conforming to the \"aws.s3.bucket\"\n\t// semantic conventions. It represents the S3 bucket name the request\n\t// refers to. Corresponds to the `--bucket` parameter of the [S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n\t// operations.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'some-bucket-name'\n\t// Note: The `bucket` attribute is applicable to all S3 operations that\n\t// reference a bucket, i.e. that require the bucket name as a mandatory\n\t// parameter.\n\t// This applies to almost all S3 operations except `list-buckets`.\n\tAWSS3BucketKey = attribute.Key(\"aws.s3.bucket\")\n\n\t// AWSS3CopySourceKey is the attribute Key conforming to the\n\t// \"aws.s3.copy_source\" semantic conventions. It represents the source\n\t// object (in the form `bucket`/`key`) for the copy operation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'someFile.yml'\n\t// Note: The `copy_source` attribute applies to S3 copy operations and\n\t// corresponds to the `--copy-source` parameter\n\t// of the [copy-object operation within the S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html).\n\t// This applies in particular to the following operations:\n\t//\n\t// -\n\t// [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n\t// -\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\tAWSS3CopySourceKey = attribute.Key(\"aws.s3.copy_source\")\n\n\t// AWSS3DeleteKey is the attribute Key conforming to the \"aws.s3.delete\"\n\t// semantic conventions. It represents the delete request container that\n\t// specifies the objects to be deleted.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'Objects=[{Key=string,VersionID=string},{Key=string,VersionID=string}],Quiet=boolean'\n\t// Note: The `delete` attribute is only applicable to the\n\t// [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)\n\t// operation.\n\t// The `delete` attribute corresponds to the `--delete` parameter of the\n\t// [delete-objects operation within the S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html).\n\tAWSS3DeleteKey = attribute.Key(\"aws.s3.delete\")\n\n\t// AWSS3KeyKey is the attribute Key conforming to the \"aws.s3.key\" semantic\n\t// conventions. It represents the S3 object key the request refers to.\n\t// Corresponds to the `--key` parameter of the [S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n\t// operations.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'someFile.yml'\n\t// Note: The `key` attribute is applicable to all object-related S3\n\t// operations, i.e. that require the object key as a mandatory parameter.\n\t// This applies in particular to the following operations:\n\t//\n\t// -\n\t// [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n\t// -\n\t// [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)\n\t// -\n\t// [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html)\n\t// -\n\t// [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html)\n\t// -\n\t// [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html)\n\t// -\n\t// [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html)\n\t// -\n\t// [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html)\n\t// -\n\t// [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n\t// -\n\t// [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n\t// -\n\t// [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html)\n\t// -\n\t// [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n\t// -\n\t// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n\t// -\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\tAWSS3KeyKey = attribute.Key(\"aws.s3.key\")\n\n\t// AWSS3PartNumberKey is the attribute Key conforming to the\n\t// \"aws.s3.part_number\" semantic conventions. It represents the part number\n\t// of the part being uploaded in a multipart-upload operation. This is a\n\t// positive integer between 1 and 10,000.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 3456\n\t// Note: The `part_number` attribute is only applicable to the\n\t// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n\t// and\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\t// operations.\n\t// The `part_number` attribute corresponds to the `--part-number` parameter\n\t// of the\n\t// [upload-part operation within the S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html).\n\tAWSS3PartNumberKey = attribute.Key(\"aws.s3.part_number\")\n\n\t// AWSS3UploadIDKey is the attribute Key conforming to the\n\t// \"aws.s3.upload_id\" semantic conventions. It represents the upload ID\n\t// that identifies the multipart upload.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ'\n\t// Note: The `upload_id` attribute applies to S3 multipart-upload\n\t// operations and corresponds to the `--upload-id` parameter\n\t// of the [S3\n\t// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n\t// multipart operations.\n\t// This applies in particular to the following operations:\n\t//\n\t// -\n\t// [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n\t// -\n\t// [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n\t// -\n\t// [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n\t// -\n\t// [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n\t// -\n\t// [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n\tAWSS3UploadIDKey = attribute.Key(\"aws.s3.upload_id\")\n)\n\n// AWSS3Bucket returns an attribute KeyValue conforming to the\n// \"aws.s3.bucket\" semantic conventions. It represents the S3 bucket name the\n// request refers to. Corresponds to the `--bucket` parameter of the [S3\n// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n// operations.\nfunc AWSS3Bucket(val string) attribute.KeyValue {\n\treturn AWSS3BucketKey.String(val)\n}\n\n// AWSS3CopySource returns an attribute KeyValue conforming to the\n// \"aws.s3.copy_source\" semantic conventions. It represents the source object\n// (in the form `bucket`/`key`) for the copy operation.\nfunc AWSS3CopySource(val string) attribute.KeyValue {\n\treturn AWSS3CopySourceKey.String(val)\n}\n\n// AWSS3Delete returns an attribute KeyValue conforming to the\n// \"aws.s3.delete\" semantic conventions. It represents the delete request\n// container that specifies the objects to be deleted.\nfunc AWSS3Delete(val string) attribute.KeyValue {\n\treturn AWSS3DeleteKey.String(val)\n}\n\n// AWSS3Key returns an attribute KeyValue conforming to the \"aws.s3.key\"\n// semantic conventions. It represents the S3 object key the request refers to.\n// Corresponds to the `--key` parameter of the [S3\n// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html)\n// operations.\nfunc AWSS3Key(val string) attribute.KeyValue {\n\treturn AWSS3KeyKey.String(val)\n}\n\n// AWSS3PartNumber returns an attribute KeyValue conforming to the\n// \"aws.s3.part_number\" semantic conventions. It represents the part number of\n// the part being uploaded in a multipart-upload operation. This is a positive\n// integer between 1 and 10,000.\nfunc AWSS3PartNumber(val int) attribute.KeyValue {\n\treturn AWSS3PartNumberKey.Int(val)\n}\n\n// AWSS3UploadID returns an attribute KeyValue conforming to the\n// \"aws.s3.upload_id\" semantic conventions. It represents the upload ID that\n// identifies the multipart upload.\nfunc AWSS3UploadID(val string) attribute.KeyValue {\n\treturn AWSS3UploadIDKey.String(val)\n}\n\n// The web browser attributes\nconst (\n\t// BrowserBrandsKey is the attribute Key conforming to the \"browser.brands\"\n\t// semantic conventions. It represents the array of brand name and version\n\t// separated by a space\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: ' Not A;Brand 99', 'Chromium 99', 'Chrome 99'\n\t// Note: This value is intended to be taken from the [UA client hints\n\t// API](https://wicg.github.io/ua-client-hints/#interface)\n\t// (`navigator.userAgentData.brands`).\n\tBrowserBrandsKey = attribute.Key(\"browser.brands\")\n\n\t// BrowserLanguageKey is the attribute Key conforming to the\n\t// \"browser.language\" semantic conventions. It represents the preferred\n\t// language of the user using the browser\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'en', 'en-US', 'fr', 'fr-FR'\n\t// Note: This value is intended to be taken from the Navigator API\n\t// `navigator.language`.\n\tBrowserLanguageKey = attribute.Key(\"browser.language\")\n\n\t// BrowserMobileKey is the attribute Key conforming to the \"browser.mobile\"\n\t// semantic conventions. It represents a boolean that is true if the\n\t// browser is running on a mobile device\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: This value is intended to be taken from the [UA client hints\n\t// API](https://wicg.github.io/ua-client-hints/#interface)\n\t// (`navigator.userAgentData.mobile`). If unavailable, this attribute\n\t// SHOULD be left unset.\n\tBrowserMobileKey = attribute.Key(\"browser.mobile\")\n\n\t// BrowserPlatformKey is the attribute Key conforming to the\n\t// \"browser.platform\" semantic conventions. It represents the platform on\n\t// which the browser is running\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Windows', 'macOS', 'Android'\n\t// Note: This value is intended to be taken from the [UA client hints\n\t// API](https://wicg.github.io/ua-client-hints/#interface)\n\t// (`navigator.userAgentData.platform`). If unavailable, the legacy\n\t// `navigator.platform` API SHOULD NOT be used instead and this attribute\n\t// SHOULD be left unset in order for the values to be consistent.\n\t// The list of possible values is defined in the [W3C User-Agent Client\n\t// Hints\n\t// specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform).\n\t// Note that some (but not all) of these values can overlap with values in\n\t// the [`os.type` and `os.name` attributes](./os.md). However, for\n\t// consistency, the values in the `browser.platform` attribute should\n\t// capture the exact value that the user agent provides.\n\tBrowserPlatformKey = attribute.Key(\"browser.platform\")\n)\n\n// BrowserBrands returns an attribute KeyValue conforming to the\n// \"browser.brands\" semantic conventions. It represents the array of brand name\n// and version separated by a space\nfunc BrowserBrands(val ...string) attribute.KeyValue {\n\treturn BrowserBrandsKey.StringSlice(val)\n}\n\n// BrowserLanguage returns an attribute KeyValue conforming to the\n// \"browser.language\" semantic conventions. It represents the preferred\n// language of the user using the browser\nfunc BrowserLanguage(val string) attribute.KeyValue {\n\treturn BrowserLanguageKey.String(val)\n}\n\n// BrowserMobile returns an attribute KeyValue conforming to the\n// \"browser.mobile\" semantic conventions. It represents a boolean that is true\n// if the browser is running on a mobile device\nfunc BrowserMobile(val bool) attribute.KeyValue {\n\treturn BrowserMobileKey.Bool(val)\n}\n\n// BrowserPlatform returns an attribute KeyValue conforming to the\n// \"browser.platform\" semantic conventions. It represents the platform on which\n// the browser is running\nfunc BrowserPlatform(val string) attribute.KeyValue {\n\treturn BrowserPlatformKey.String(val)\n}\n\n// These attributes may be used to describe the client in a connection-based\n// network interaction where there is one side that initiates the connection\n// (the client is the side that initiates the connection). This covers all TCP\n// network interactions since TCP is connection-based and one side initiates\n// the connection (an exception is made for peer-to-peer communication over TCP\n// where the \"user-facing\" surface of the protocol / API doesn't expose a clear\n// notion of client and server). This also covers UDP network interactions\n// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.\nconst (\n\t// ClientAddressKey is the attribute Key conforming to the \"client.address\"\n\t// semantic conventions. It represents the client address - domain name if\n\t// available without reverse DNS lookup; otherwise, IP address or Unix\n\t// domain socket name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'client.example.com', '10.1.2.80', '/tmp/my.sock'\n\t// Note: When observed from the server side, and when communicating through\n\t// an intermediary, `client.address` SHOULD represent the client address\n\t// behind any intermediaries,  for example proxies, if it's available.\n\tClientAddressKey = attribute.Key(\"client.address\")\n\n\t// ClientPortKey is the attribute Key conforming to the \"client.port\"\n\t// semantic conventions. It represents the client port number.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 65123\n\t// Note: When observed from the server side, and when communicating through\n\t// an intermediary, `client.port` SHOULD represent the client port behind\n\t// any intermediaries,  for example proxies, if it's available.\n\tClientPortKey = attribute.Key(\"client.port\")\n)\n\n// ClientAddress returns an attribute KeyValue conforming to the\n// \"client.address\" semantic conventions. It represents the client address -\n// domain name if available without reverse DNS lookup; otherwise, IP address\n// or Unix domain socket name.\nfunc ClientAddress(val string) attribute.KeyValue {\n\treturn ClientAddressKey.String(val)\n}\n\n// ClientPort returns an attribute KeyValue conforming to the \"client.port\"\n// semantic conventions. It represents the client port number.\nfunc ClientPort(val int) attribute.KeyValue {\n\treturn ClientPortKey.Int(val)\n}\n\n// A cloud environment (e.g. GCP, Azure, AWS).\nconst (\n\t// CloudAccountIDKey is the attribute Key conforming to the\n\t// \"cloud.account.id\" semantic conventions. It represents the cloud account\n\t// ID the resource is assigned to.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '111111111111', 'opentelemetry'\n\tCloudAccountIDKey = attribute.Key(\"cloud.account.id\")\n\n\t// CloudAvailabilityZoneKey is the attribute Key conforming to the\n\t// \"cloud.availability_zone\" semantic conventions. It represents the cloud\n\t// regions often have multiple, isolated locations known as zones to\n\t// increase availability. Availability zone represents the zone where the\n\t// resource is running.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'us-east-1c'\n\t// Note: Availability zones are called \"zones\" on Alibaba Cloud and Google\n\t// Cloud.\n\tCloudAvailabilityZoneKey = attribute.Key(\"cloud.availability_zone\")\n\n\t// CloudPlatformKey is the attribute Key conforming to the \"cloud.platform\"\n\t// semantic conventions. It represents the cloud platform in use.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: The prefix of the service SHOULD match the one specified in\n\t// `cloud.provider`.\n\tCloudPlatformKey = attribute.Key(\"cloud.platform\")\n\n\t// CloudProviderKey is the attribute Key conforming to the \"cloud.provider\"\n\t// semantic conventions. It represents the name of the cloud provider.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tCloudProviderKey = attribute.Key(\"cloud.provider\")\n\n\t// CloudRegionKey is the attribute Key conforming to the \"cloud.region\"\n\t// semantic conventions. It represents the geographical region the resource\n\t// is running.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'us-central1', 'us-east-1'\n\t// Note: Refer to your provider's docs to see the available regions, for\n\t// example [Alibaba Cloud\n\t// regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS\n\t// regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/),\n\t// [Azure\n\t// regions](https://azure.microsoft.com/global-infrastructure/geographies/),\n\t// [Google Cloud regions](https://cloud.google.com/about/locations), or\n\t// [Tencent Cloud\n\t// regions](https://www.tencentcloud.com/document/product/213/6091).\n\tCloudRegionKey = attribute.Key(\"cloud.region\")\n\n\t// CloudResourceIDKey is the attribute Key conforming to the\n\t// \"cloud.resource_id\" semantic conventions. It represents the cloud\n\t// provider-specific native identifier of the monitored cloud resource\n\t// (e.g. an\n\t// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)\n\t// on AWS, a [fully qualified resource\n\t// ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id)\n\t// on Azure, a [full resource\n\t// name](https://cloud.google.com/apis/design/resource_names#full_resource_name)\n\t// on GCP)\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function',\n\t// '//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID',\n\t// '/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>'\n\t// Note: On some cloud providers, it may not be possible to determine the\n\t// full ID at startup,\n\t// so it may be necessary to set `cloud.resource_id` as a span attribute\n\t// instead.\n\t//\n\t// The exact value to use for `cloud.resource_id` depends on the cloud\n\t// provider.\n\t// The following well-known definitions MUST be used if you set this\n\t// attribute and they apply:\n\t//\n\t// * **AWS Lambda:** The function\n\t// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\n\t//   Take care not to use the \"invoked ARN\" directly but replace any\n\t//   [alias\n\t// suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)\n\t//   with the resolved function version, as the same runtime instance may\n\t// be invokable with\n\t//   multiple different aliases.\n\t// * **GCP:** The [URI of the\n\t// resource](https://cloud.google.com/iam/docs/full-resource-names)\n\t// * **Azure:** The [Fully Qualified Resource\n\t// ID](https://docs.microsoft.com/rest/api/resources/resources/get-by-id)\n\t// of the invoked function,\n\t//   *not* the function app, having the form\n\t// `/subscriptions/<SUBSCIPTION_GUID>/resourceGroups/<RG>/providers/Microsoft.Web/sites/<FUNCAPP>/functions/<FUNC>`.\n\t//   This means that a span attribute MUST be used, as an Azure function\n\t// app can host multiple functions that would usually share\n\t//   a TracerProvider.\n\tCloudResourceIDKey = attribute.Key(\"cloud.resource_id\")\n)\n\nvar (\n\t// Alibaba Cloud Elastic Compute Service\n\tCloudPlatformAlibabaCloudECS = CloudPlatformKey.String(\"alibaba_cloud_ecs\")\n\t// Alibaba Cloud Function Compute\n\tCloudPlatformAlibabaCloudFc = CloudPlatformKey.String(\"alibaba_cloud_fc\")\n\t// Red Hat OpenShift on Alibaba Cloud\n\tCloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String(\"alibaba_cloud_openshift\")\n\t// AWS Elastic Compute Cloud\n\tCloudPlatformAWSEC2 = CloudPlatformKey.String(\"aws_ec2\")\n\t// AWS Elastic Container Service\n\tCloudPlatformAWSECS = CloudPlatformKey.String(\"aws_ecs\")\n\t// AWS Elastic Kubernetes Service\n\tCloudPlatformAWSEKS = CloudPlatformKey.String(\"aws_eks\")\n\t// AWS Lambda\n\tCloudPlatformAWSLambda = CloudPlatformKey.String(\"aws_lambda\")\n\t// AWS Elastic Beanstalk\n\tCloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String(\"aws_elastic_beanstalk\")\n\t// AWS App Runner\n\tCloudPlatformAWSAppRunner = CloudPlatformKey.String(\"aws_app_runner\")\n\t// Red Hat OpenShift on AWS (ROSA)\n\tCloudPlatformAWSOpenshift = CloudPlatformKey.String(\"aws_openshift\")\n\t// Azure Virtual Machines\n\tCloudPlatformAzureVM = CloudPlatformKey.String(\"azure_vm\")\n\t// Azure Container Apps\n\tCloudPlatformAzureContainerApps = CloudPlatformKey.String(\"azure_container_apps\")\n\t// Azure Container Instances\n\tCloudPlatformAzureContainerInstances = CloudPlatformKey.String(\"azure_container_instances\")\n\t// Azure Kubernetes Service\n\tCloudPlatformAzureAKS = CloudPlatformKey.String(\"azure_aks\")\n\t// Azure Functions\n\tCloudPlatformAzureFunctions = CloudPlatformKey.String(\"azure_functions\")\n\t// Azure App Service\n\tCloudPlatformAzureAppService = CloudPlatformKey.String(\"azure_app_service\")\n\t// Azure Red Hat OpenShift\n\tCloudPlatformAzureOpenshift = CloudPlatformKey.String(\"azure_openshift\")\n\t// Google Bare Metal Solution (BMS)\n\tCloudPlatformGCPBareMetalSolution = CloudPlatformKey.String(\"gcp_bare_metal_solution\")\n\t// Google Cloud Compute Engine (GCE)\n\tCloudPlatformGCPComputeEngine = CloudPlatformKey.String(\"gcp_compute_engine\")\n\t// Google Cloud Run\n\tCloudPlatformGCPCloudRun = CloudPlatformKey.String(\"gcp_cloud_run\")\n\t// Google Cloud Kubernetes Engine (GKE)\n\tCloudPlatformGCPKubernetesEngine = CloudPlatformKey.String(\"gcp_kubernetes_engine\")\n\t// Google Cloud Functions (GCF)\n\tCloudPlatformGCPCloudFunctions = CloudPlatformKey.String(\"gcp_cloud_functions\")\n\t// Google Cloud App Engine (GAE)\n\tCloudPlatformGCPAppEngine = CloudPlatformKey.String(\"gcp_app_engine\")\n\t// Red Hat OpenShift on Google Cloud\n\tCloudPlatformGCPOpenshift = CloudPlatformKey.String(\"gcp_openshift\")\n\t// Red Hat OpenShift on IBM Cloud\n\tCloudPlatformIbmCloudOpenshift = CloudPlatformKey.String(\"ibm_cloud_openshift\")\n\t// Tencent Cloud Cloud Virtual Machine (CVM)\n\tCloudPlatformTencentCloudCvm = CloudPlatformKey.String(\"tencent_cloud_cvm\")\n\t// Tencent Cloud Elastic Kubernetes Service (EKS)\n\tCloudPlatformTencentCloudEKS = CloudPlatformKey.String(\"tencent_cloud_eks\")\n\t// Tencent Cloud Serverless Cloud Function (SCF)\n\tCloudPlatformTencentCloudScf = CloudPlatformKey.String(\"tencent_cloud_scf\")\n)\n\nvar (\n\t// Alibaba Cloud\n\tCloudProviderAlibabaCloud = CloudProviderKey.String(\"alibaba_cloud\")\n\t// Amazon Web Services\n\tCloudProviderAWS = CloudProviderKey.String(\"aws\")\n\t// Microsoft Azure\n\tCloudProviderAzure = CloudProviderKey.String(\"azure\")\n\t// Google Cloud Platform\n\tCloudProviderGCP = CloudProviderKey.String(\"gcp\")\n\t// Heroku Platform as a Service\n\tCloudProviderHeroku = CloudProviderKey.String(\"heroku\")\n\t// IBM Cloud\n\tCloudProviderIbmCloud = CloudProviderKey.String(\"ibm_cloud\")\n\t// Tencent Cloud\n\tCloudProviderTencentCloud = CloudProviderKey.String(\"tencent_cloud\")\n)\n\n// CloudAccountID returns an attribute KeyValue conforming to the\n// \"cloud.account.id\" semantic conventions. It represents the cloud account ID\n// the resource is assigned to.\nfunc CloudAccountID(val string) attribute.KeyValue {\n\treturn CloudAccountIDKey.String(val)\n}\n\n// CloudAvailabilityZone returns an attribute KeyValue conforming to the\n// \"cloud.availability_zone\" semantic conventions. It represents the cloud\n// regions often have multiple, isolated locations known as zones to increase\n// availability. Availability zone represents the zone where the resource is\n// running.\nfunc CloudAvailabilityZone(val string) attribute.KeyValue {\n\treturn CloudAvailabilityZoneKey.String(val)\n}\n\n// CloudRegion returns an attribute KeyValue conforming to the\n// \"cloud.region\" semantic conventions. It represents the geographical region\n// the resource is running.\nfunc CloudRegion(val string) attribute.KeyValue {\n\treturn CloudRegionKey.String(val)\n}\n\n// CloudResourceID returns an attribute KeyValue conforming to the\n// \"cloud.resource_id\" semantic conventions. It represents the cloud\n// provider-specific native identifier of the monitored cloud resource (e.g. an\n// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)\n// on AWS, a [fully qualified resource\n// ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on\n// Azure, a [full resource\n// name](https://cloud.google.com/apis/design/resource_names#full_resource_name)\n// on GCP)\nfunc CloudResourceID(val string) attribute.KeyValue {\n\treturn CloudResourceIDKey.String(val)\n}\n\n// Attributes for CloudEvents.\nconst (\n\t// CloudeventsEventIDKey is the attribute Key conforming to the\n\t// \"cloudevents.event_id\" semantic conventions. It represents the\n\t// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id)\n\t// uniquely identifies the event.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '123e4567-e89b-12d3-a456-426614174000', '0001'\n\tCloudeventsEventIDKey = attribute.Key(\"cloudevents.event_id\")\n\n\t// CloudeventsEventSourceKey is the attribute Key conforming to the\n\t// \"cloudevents.event_source\" semantic conventions. It represents the\n\t// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1)\n\t// identifies the context in which an event happened.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'https://github.com/cloudevents',\n\t// '/cloudevents/spec/pull/123', 'my-service'\n\tCloudeventsEventSourceKey = attribute.Key(\"cloudevents.event_source\")\n\n\t// CloudeventsEventSpecVersionKey is the attribute Key conforming to the\n\t// \"cloudevents.event_spec_version\" semantic conventions. It represents the\n\t// [version of the CloudEvents\n\t// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion)\n\t// which the event uses.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1.0'\n\tCloudeventsEventSpecVersionKey = attribute.Key(\"cloudevents.event_spec_version\")\n\n\t// CloudeventsEventSubjectKey is the attribute Key conforming to the\n\t// \"cloudevents.event_subject\" semantic conventions. It represents the\n\t// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject)\n\t// of the event in the context of the event producer (identified by\n\t// source).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'mynewfile.jpg'\n\tCloudeventsEventSubjectKey = attribute.Key(\"cloudevents.event_subject\")\n\n\t// CloudeventsEventTypeKey is the attribute Key conforming to the\n\t// \"cloudevents.event_type\" semantic conventions. It represents the\n\t// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type)\n\t// contains a value describing the type of event related to the originating\n\t// occurrence.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'com.github.pull_request.opened',\n\t// 'com.example.object.deleted.v2'\n\tCloudeventsEventTypeKey = attribute.Key(\"cloudevents.event_type\")\n)\n\n// CloudeventsEventID returns an attribute KeyValue conforming to the\n// \"cloudevents.event_id\" semantic conventions. It represents the\n// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id)\n// uniquely identifies the event.\nfunc CloudeventsEventID(val string) attribute.KeyValue {\n\treturn CloudeventsEventIDKey.String(val)\n}\n\n// CloudeventsEventSource returns an attribute KeyValue conforming to the\n// \"cloudevents.event_source\" semantic conventions. It represents the\n// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1)\n// identifies the context in which an event happened.\nfunc CloudeventsEventSource(val string) attribute.KeyValue {\n\treturn CloudeventsEventSourceKey.String(val)\n}\n\n// CloudeventsEventSpecVersion returns an attribute KeyValue conforming to\n// the \"cloudevents.event_spec_version\" semantic conventions. It represents the\n// [version of the CloudEvents\n// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion)\n// which the event uses.\nfunc CloudeventsEventSpecVersion(val string) attribute.KeyValue {\n\treturn CloudeventsEventSpecVersionKey.String(val)\n}\n\n// CloudeventsEventSubject returns an attribute KeyValue conforming to the\n// \"cloudevents.event_subject\" semantic conventions. It represents the\n// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject)\n// of the event in the context of the event producer (identified by source).\nfunc CloudeventsEventSubject(val string) attribute.KeyValue {\n\treturn CloudeventsEventSubjectKey.String(val)\n}\n\n// CloudeventsEventType returns an attribute KeyValue conforming to the\n// \"cloudevents.event_type\" semantic conventions. It represents the\n// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type)\n// contains a value describing the type of event related to the originating\n// occurrence.\nfunc CloudeventsEventType(val string) attribute.KeyValue {\n\treturn CloudeventsEventTypeKey.String(val)\n}\n\n// These attributes allow to report this unit of code and therefore to provide\n// more context about the span.\nconst (\n\t// CodeColumnKey is the attribute Key conforming to the \"code.column\"\n\t// semantic conventions. It represents the column number in `code.filepath`\n\t// best representing the operation. It SHOULD point within the code unit\n\t// named in `code.function`.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 16\n\tCodeColumnKey = attribute.Key(\"code.column\")\n\n\t// CodeFilepathKey is the attribute Key conforming to the \"code.filepath\"\n\t// semantic conventions. It represents the source code file name that\n\t// identifies the code unit as uniquely as possible (preferably an absolute\n\t// file path).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/usr/local/MyApplication/content_root/app/index.php'\n\tCodeFilepathKey = attribute.Key(\"code.filepath\")\n\n\t// CodeFunctionKey is the attribute Key conforming to the \"code.function\"\n\t// semantic conventions. It represents the method or function name, or\n\t// equivalent (usually rightmost part of the code unit's name).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'serveRequest'\n\tCodeFunctionKey = attribute.Key(\"code.function\")\n\n\t// CodeLineNumberKey is the attribute Key conforming to the \"code.lineno\"\n\t// semantic conventions. It represents the line number in `code.filepath`\n\t// best representing the operation. It SHOULD point within the code unit\n\t// named in `code.function`.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 42\n\tCodeLineNumberKey = attribute.Key(\"code.lineno\")\n\n\t// CodeNamespaceKey is the attribute Key conforming to the \"code.namespace\"\n\t// semantic conventions. It represents the \"namespace\" within which\n\t// `code.function` is defined. Usually the qualified class or module name,\n\t// such that `code.namespace` + some separator + `code.function` form a\n\t// unique identifier for the code unit.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'com.example.MyHTTPService'\n\tCodeNamespaceKey = attribute.Key(\"code.namespace\")\n\n\t// CodeStacktraceKey is the attribute Key conforming to the\n\t// \"code.stacktrace\" semantic conventions. It represents a stacktrace as a\n\t// string in the natural representation for the language runtime. The\n\t// representation is to be determined and documented by each language SIG.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'at\n\t// com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\\\n at '\n\t//  'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\\\n at '\n\t//  'com.example.GenerateTrace.main(GenerateTrace.java:5)'\n\tCodeStacktraceKey = attribute.Key(\"code.stacktrace\")\n)\n\n// CodeColumn returns an attribute KeyValue conforming to the \"code.column\"\n// semantic conventions. It represents the column number in `code.filepath`\n// best representing the operation. It SHOULD point within the code unit named\n// in `code.function`.\nfunc CodeColumn(val int) attribute.KeyValue {\n\treturn CodeColumnKey.Int(val)\n}\n\n// CodeFilepath returns an attribute KeyValue conforming to the\n// \"code.filepath\" semantic conventions. It represents the source code file\n// name that identifies the code unit as uniquely as possible (preferably an\n// absolute file path).\nfunc CodeFilepath(val string) attribute.KeyValue {\n\treturn CodeFilepathKey.String(val)\n}\n\n// CodeFunction returns an attribute KeyValue conforming to the\n// \"code.function\" semantic conventions. It represents the method or function\n// name, or equivalent (usually rightmost part of the code unit's name).\nfunc CodeFunction(val string) attribute.KeyValue {\n\treturn CodeFunctionKey.String(val)\n}\n\n// CodeLineNumber returns an attribute KeyValue conforming to the \"code.lineno\"\n// semantic conventions. It represents the line number in `code.filepath` best\n// representing the operation. It SHOULD point within the code unit named in\n// `code.function`.\nfunc CodeLineNumber(val int) attribute.KeyValue {\n\treturn CodeLineNumberKey.Int(val)\n}\n\n// CodeNamespace returns an attribute KeyValue conforming to the\n// \"code.namespace\" semantic conventions. It represents the \"namespace\" within\n// which `code.function` is defined. Usually the qualified class or module\n// name, such that `code.namespace` + some separator + `code.function` form a\n// unique identifier for the code unit.\nfunc CodeNamespace(val string) attribute.KeyValue {\n\treturn CodeNamespaceKey.String(val)\n}\n\n// CodeStacktrace returns an attribute KeyValue conforming to the\n// \"code.stacktrace\" semantic conventions. It represents a stacktrace as a\n// string in the natural representation for the language runtime. The\n// representation is to be determined and documented by each language SIG.\nfunc CodeStacktrace(val string) attribute.KeyValue {\n\treturn CodeStacktraceKey.String(val)\n}\n\n// A container instance.\nconst (\n\t// ContainerCommandKey is the attribute Key conforming to the\n\t// \"container.command\" semantic conventions. It represents the command used\n\t// to run the container (i.e. the command name).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'otelcontribcol'\n\t// Note: If using embedded credentials or sensitive data, it is recommended\n\t// to remove them to prevent potential leakage.\n\tContainerCommandKey = attribute.Key(\"container.command\")\n\n\t// ContainerCommandArgsKey is the attribute Key conforming to the\n\t// \"container.command_args\" semantic conventions. It represents the all the\n\t// command arguments (including the command/executable itself) run by the\n\t// container. [2]\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'otelcontribcol, --config, config.yaml'\n\tContainerCommandArgsKey = attribute.Key(\"container.command_args\")\n\n\t// ContainerCommandLineKey is the attribute Key conforming to the\n\t// \"container.command_line\" semantic conventions. It represents the full\n\t// command run by the container as a single string representing the full\n\t// command. [2]\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'otelcontribcol --config config.yaml'\n\tContainerCommandLineKey = attribute.Key(\"container.command_line\")\n\n\t// ContainerCPUStateKey is the attribute Key conforming to the\n\t// \"container.cpu.state\" semantic conventions. It represents the CPU state\n\t// for this data point.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'user', 'kernel'\n\tContainerCPUStateKey = attribute.Key(\"container.cpu.state\")\n\n\t// ContainerIDKey is the attribute Key conforming to the \"container.id\"\n\t// semantic conventions. It represents the container ID. Usually a UUID, as\n\t// for example used to [identify Docker\n\t// containers](https://docs.docker.com/engine/reference/run/#container-identification).\n\t// The UUID might be abbreviated.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'a3bf90e006b2'\n\tContainerIDKey = attribute.Key(\"container.id\")\n\n\t// ContainerImageIDKey is the attribute Key conforming to the\n\t// \"container.image.id\" semantic conventions. It represents the runtime\n\t// specific image identifier. Usually a hash algorithm followed by a UUID.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f'\n\t// Note: Docker defines a sha256 of the image id; `container.image.id`\n\t// corresponds to the `Image` field from the Docker container inspect\n\t// [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect)\n\t// endpoint.\n\t// K8S defines a link to the container registry repository with digest\n\t// `\"imageID\": \"registry.azurecr.io\n\t// /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625\"`.\n\t// The ID is assigned by the container runtime and can vary in different\n\t// environments. Consider using `oci.manifest.digest` if it is important to\n\t// identify the same image in different environments/runtimes.\n\tContainerImageIDKey = attribute.Key(\"container.image.id\")\n\n\t// ContainerImageNameKey is the attribute Key conforming to the\n\t// \"container.image.name\" semantic conventions. It represents the name of\n\t// the image the container was built on.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'gcr.io/opentelemetry/operator'\n\tContainerImageNameKey = attribute.Key(\"container.image.name\")\n\n\t// ContainerImageRepoDigestsKey is the attribute Key conforming to the\n\t// \"container.image.repo_digests\" semantic conventions. It represents the\n\t// repo digests of the container image as provided by the container\n\t// runtime.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb',\n\t// 'internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578'\n\t// Note:\n\t// [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect)\n\t// and\n\t// [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238)\n\t// report those under the `RepoDigests` field.\n\tContainerImageRepoDigestsKey = attribute.Key(\"container.image.repo_digests\")\n\n\t// ContainerImageTagsKey is the attribute Key conforming to the\n\t// \"container.image.tags\" semantic conventions. It represents the container\n\t// image tags. An example can be found in [Docker Image\n\t// Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect).\n\t// Should be only the `<tag>` section of the full name for example from\n\t// `registry.example.com/my-org/my-image:<tag>`.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'v1.27.1', '3.5.7-0'\n\tContainerImageTagsKey = attribute.Key(\"container.image.tags\")\n\n\t// ContainerNameKey is the attribute Key conforming to the \"container.name\"\n\t// semantic conventions. It represents the container name used by container\n\t// runtime.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry-autoconf'\n\tContainerNameKey = attribute.Key(\"container.name\")\n\n\t// ContainerRuntimeKey is the attribute Key conforming to the\n\t// \"container.runtime\" semantic conventions. It represents the container\n\t// runtime managing this container.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'docker', 'containerd', 'rkt'\n\tContainerRuntimeKey = attribute.Key(\"container.runtime\")\n)\n\nvar (\n\t// When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode (Windows)\n\tContainerCPUStateUser = ContainerCPUStateKey.String(\"user\")\n\t// When CPU is used by the system (host OS)\n\tContainerCPUStateSystem = ContainerCPUStateKey.String(\"system\")\n\t// When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel mode (Windows)\n\tContainerCPUStateKernel = ContainerCPUStateKey.String(\"kernel\")\n)\n\n// ContainerCommand returns an attribute KeyValue conforming to the\n// \"container.command\" semantic conventions. It represents the command used to\n// run the container (i.e. the command name).\nfunc ContainerCommand(val string) attribute.KeyValue {\n\treturn ContainerCommandKey.String(val)\n}\n\n// ContainerCommandArgs returns an attribute KeyValue conforming to the\n// \"container.command_args\" semantic conventions. It represents the all the\n// command arguments (including the command/executable itself) run by the\n// container. [2]\nfunc ContainerCommandArgs(val ...string) attribute.KeyValue {\n\treturn ContainerCommandArgsKey.StringSlice(val)\n}\n\n// ContainerCommandLine returns an attribute KeyValue conforming to the\n// \"container.command_line\" semantic conventions. It represents the full\n// command run by the container as a single string representing the full\n// command. [2]\nfunc ContainerCommandLine(val string) attribute.KeyValue {\n\treturn ContainerCommandLineKey.String(val)\n}\n\n// ContainerID returns an attribute KeyValue conforming to the\n// \"container.id\" semantic conventions. It represents the container ID. Usually\n// a UUID, as for example used to [identify Docker\n// containers](https://docs.docker.com/engine/reference/run/#container-identification).\n// The UUID might be abbreviated.\nfunc ContainerID(val string) attribute.KeyValue {\n\treturn ContainerIDKey.String(val)\n}\n\n// ContainerImageID returns an attribute KeyValue conforming to the\n// \"container.image.id\" semantic conventions. It represents the runtime\n// specific image identifier. Usually a hash algorithm followed by a UUID.\nfunc ContainerImageID(val string) attribute.KeyValue {\n\treturn ContainerImageIDKey.String(val)\n}\n\n// ContainerImageName returns an attribute KeyValue conforming to the\n// \"container.image.name\" semantic conventions. It represents the name of the\n// image the container was built on.\nfunc ContainerImageName(val string) attribute.KeyValue {\n\treturn ContainerImageNameKey.String(val)\n}\n\n// ContainerImageRepoDigests returns an attribute KeyValue conforming to the\n// \"container.image.repo_digests\" semantic conventions. It represents the repo\n// digests of the container image as provided by the container runtime.\nfunc ContainerImageRepoDigests(val ...string) attribute.KeyValue {\n\treturn ContainerImageRepoDigestsKey.StringSlice(val)\n}\n\n// ContainerImageTags returns an attribute KeyValue conforming to the\n// \"container.image.tags\" semantic conventions. It represents the container\n// image tags. An example can be found in [Docker Image\n// Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect).\n// Should be only the `<tag>` section of the full name for example from\n// `registry.example.com/my-org/my-image:<tag>`.\nfunc ContainerImageTags(val ...string) attribute.KeyValue {\n\treturn ContainerImageTagsKey.StringSlice(val)\n}\n\n// ContainerName returns an attribute KeyValue conforming to the\n// \"container.name\" semantic conventions. It represents the container name used\n// by container runtime.\nfunc ContainerName(val string) attribute.KeyValue {\n\treturn ContainerNameKey.String(val)\n}\n\n// ContainerRuntime returns an attribute KeyValue conforming to the\n// \"container.runtime\" semantic conventions. It represents the container\n// runtime managing this container.\nfunc ContainerRuntime(val string) attribute.KeyValue {\n\treturn ContainerRuntimeKey.String(val)\n}\n\n// This group defines the attributes used to describe telemetry in the context\n// of databases.\nconst (\n\t// DBClientConnectionsPoolNameKey is the attribute Key conforming to the\n\t// \"db.client.connections.pool.name\" semantic conventions. It represents\n\t// the name of the connection pool; unique within the instrumented\n\t// application. In case the connection pool implementation doesn't provide\n\t// a name, instrumentation should use a combination of `server.address` and\n\t// `server.port` attributes formatted as `server.address:server.port`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myDataSource'\n\tDBClientConnectionsPoolNameKey = attribute.Key(\"db.client.connections.pool.name\")\n\n\t// DBClientConnectionsStateKey is the attribute Key conforming to the\n\t// \"db.client.connections.state\" semantic conventions. It represents the\n\t// state of a connection in the pool\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'idle'\n\tDBClientConnectionsStateKey = attribute.Key(\"db.client.connections.state\")\n\n\t// DBCollectionNameKey is the attribute Key conforming to the\n\t// \"db.collection.name\" semantic conventions. It represents the name of a\n\t// collection (table, container) within the database.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'public.users', 'customers'\n\t// Note: If the collection name is parsed from the query, it SHOULD match\n\t// the value provided in the query and may be qualified with the schema and\n\t// database name.\n\t// It is RECOMMENDED to capture the value as provided by the application\n\t// without attempting to do any case normalization.\n\tDBCollectionNameKey = attribute.Key(\"db.collection.name\")\n\n\t// DBNamespaceKey is the attribute Key conforming to the \"db.namespace\"\n\t// semantic conventions. It represents the name of the database, fully\n\t// qualified within the server address and port.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'customers', 'test.users'\n\t// Note: If a database system has multiple namespace components, they\n\t// SHOULD be concatenated (potentially using database system specific\n\t// conventions) from most general to most specific namespace component, and\n\t// more specific namespaces SHOULD NOT be captured without the more general\n\t// namespaces, to ensure that \"startswith\" queries for the more general\n\t// namespaces will be valid.\n\t// Semantic conventions for individual database systems SHOULD document\n\t// what `db.namespace` means in the context of that system.\n\t// It is RECOMMENDED to capture the value as provided by the application\n\t// without attempting to do any case normalization.\n\tDBNamespaceKey = attribute.Key(\"db.namespace\")\n\n\t// DBOperationNameKey is the attribute Key conforming to the\n\t// \"db.operation.name\" semantic conventions. It represents the name of the\n\t// operation or command being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'findAndModify', 'HMSET', 'SELECT'\n\t// Note: It is RECOMMENDED to capture the value as provided by the\n\t// application without attempting to do any case normalization.\n\tDBOperationNameKey = attribute.Key(\"db.operation.name\")\n\n\t// DBQueryTextKey is the attribute Key conforming to the \"db.query.text\"\n\t// semantic conventions. It represents the database query being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'SELECT * FROM wuser_table where username = ?', 'SET mykey\n\t// \"WuValue\"'\n\tDBQueryTextKey = attribute.Key(\"db.query.text\")\n\n\t// DBSystemKey is the attribute Key conforming to the \"db.system\" semantic\n\t// conventions. It represents the database management system (DBMS) product\n\t// as identified by the client instrumentation.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: The actual DBMS may differ from the one identified by the client.\n\t// For example, when using PostgreSQL client libraries to connect to a\n\t// CockroachDB, the `db.system` is set to `postgresql` based on the\n\t// instrumentation's best knowledge.\n\tDBSystemKey = attribute.Key(\"db.system\")\n)\n\nvar (\n\t// idle\n\tDBClientConnectionsStateIdle = DBClientConnectionsStateKey.String(\"idle\")\n\t// used\n\tDBClientConnectionsStateUsed = DBClientConnectionsStateKey.String(\"used\")\n)\n\nvar (\n\t// Some other SQL database. Fallback only. See notes\n\tDBSystemOtherSQL = DBSystemKey.String(\"other_sql\")\n\t// Microsoft SQL Server\n\tDBSystemMSSQL = DBSystemKey.String(\"mssql\")\n\t// Microsoft SQL Server Compact\n\tDBSystemMssqlcompact = DBSystemKey.String(\"mssqlcompact\")\n\t// MySQL\n\tDBSystemMySQL = DBSystemKey.String(\"mysql\")\n\t// Oracle Database\n\tDBSystemOracle = DBSystemKey.String(\"oracle\")\n\t// IBM DB2\n\tDBSystemDB2 = DBSystemKey.String(\"db2\")\n\t// PostgreSQL\n\tDBSystemPostgreSQL = DBSystemKey.String(\"postgresql\")\n\t// Amazon Redshift\n\tDBSystemRedshift = DBSystemKey.String(\"redshift\")\n\t// Apache Hive\n\tDBSystemHive = DBSystemKey.String(\"hive\")\n\t// Cloudscape\n\tDBSystemCloudscape = DBSystemKey.String(\"cloudscape\")\n\t// HyperSQL DataBase\n\tDBSystemHSQLDB = DBSystemKey.String(\"hsqldb\")\n\t// Progress Database\n\tDBSystemProgress = DBSystemKey.String(\"progress\")\n\t// SAP MaxDB\n\tDBSystemMaxDB = DBSystemKey.String(\"maxdb\")\n\t// SAP HANA\n\tDBSystemHanaDB = DBSystemKey.String(\"hanadb\")\n\t// Ingres\n\tDBSystemIngres = DBSystemKey.String(\"ingres\")\n\t// FirstSQL\n\tDBSystemFirstSQL = DBSystemKey.String(\"firstsql\")\n\t// EnterpriseDB\n\tDBSystemEDB = DBSystemKey.String(\"edb\")\n\t// InterSystems Caché\n\tDBSystemCache = DBSystemKey.String(\"cache\")\n\t// Adabas (Adaptable Database System)\n\tDBSystemAdabas = DBSystemKey.String(\"adabas\")\n\t// Firebird\n\tDBSystemFirebird = DBSystemKey.String(\"firebird\")\n\t// Apache Derby\n\tDBSystemDerby = DBSystemKey.String(\"derby\")\n\t// FileMaker\n\tDBSystemFilemaker = DBSystemKey.String(\"filemaker\")\n\t// Informix\n\tDBSystemInformix = DBSystemKey.String(\"informix\")\n\t// InstantDB\n\tDBSystemInstantDB = DBSystemKey.String(\"instantdb\")\n\t// InterBase\n\tDBSystemInterbase = DBSystemKey.String(\"interbase\")\n\t// MariaDB\n\tDBSystemMariaDB = DBSystemKey.String(\"mariadb\")\n\t// Netezza\n\tDBSystemNetezza = DBSystemKey.String(\"netezza\")\n\t// Pervasive PSQL\n\tDBSystemPervasive = DBSystemKey.String(\"pervasive\")\n\t// PointBase\n\tDBSystemPointbase = DBSystemKey.String(\"pointbase\")\n\t// SQLite\n\tDBSystemSqlite = DBSystemKey.String(\"sqlite\")\n\t// Sybase\n\tDBSystemSybase = DBSystemKey.String(\"sybase\")\n\t// Teradata\n\tDBSystemTeradata = DBSystemKey.String(\"teradata\")\n\t// Vertica\n\tDBSystemVertica = DBSystemKey.String(\"vertica\")\n\t// H2\n\tDBSystemH2 = DBSystemKey.String(\"h2\")\n\t// ColdFusion IMQ\n\tDBSystemColdfusion = DBSystemKey.String(\"coldfusion\")\n\t// Apache Cassandra\n\tDBSystemCassandra = DBSystemKey.String(\"cassandra\")\n\t// Apache HBase\n\tDBSystemHBase = DBSystemKey.String(\"hbase\")\n\t// MongoDB\n\tDBSystemMongoDB = DBSystemKey.String(\"mongodb\")\n\t// Redis\n\tDBSystemRedis = DBSystemKey.String(\"redis\")\n\t// Couchbase\n\tDBSystemCouchbase = DBSystemKey.String(\"couchbase\")\n\t// CouchDB\n\tDBSystemCouchDB = DBSystemKey.String(\"couchdb\")\n\t// Microsoft Azure Cosmos DB\n\tDBSystemCosmosDB = DBSystemKey.String(\"cosmosdb\")\n\t// Amazon DynamoDB\n\tDBSystemDynamoDB = DBSystemKey.String(\"dynamodb\")\n\t// Neo4j\n\tDBSystemNeo4j = DBSystemKey.String(\"neo4j\")\n\t// Apache Geode\n\tDBSystemGeode = DBSystemKey.String(\"geode\")\n\t// Elasticsearch\n\tDBSystemElasticsearch = DBSystemKey.String(\"elasticsearch\")\n\t// Memcached\n\tDBSystemMemcached = DBSystemKey.String(\"memcached\")\n\t// CockroachDB\n\tDBSystemCockroachdb = DBSystemKey.String(\"cockroachdb\")\n\t// OpenSearch\n\tDBSystemOpensearch = DBSystemKey.String(\"opensearch\")\n\t// ClickHouse\n\tDBSystemClickhouse = DBSystemKey.String(\"clickhouse\")\n\t// Cloud Spanner\n\tDBSystemSpanner = DBSystemKey.String(\"spanner\")\n\t// Trino\n\tDBSystemTrino = DBSystemKey.String(\"trino\")\n)\n\n// DBClientConnectionsPoolName returns an attribute KeyValue conforming to\n// the \"db.client.connections.pool.name\" semantic conventions. It represents\n// the name of the connection pool; unique within the instrumented application.\n// In case the connection pool implementation doesn't provide a name,\n// instrumentation should use a combination of `server.address` and\n// `server.port` attributes formatted as `server.address:server.port`.\nfunc DBClientConnectionsPoolName(val string) attribute.KeyValue {\n\treturn DBClientConnectionsPoolNameKey.String(val)\n}\n\n// DBCollectionName returns an attribute KeyValue conforming to the\n// \"db.collection.name\" semantic conventions. It represents the name of a\n// collection (table, container) within the database.\nfunc DBCollectionName(val string) attribute.KeyValue {\n\treturn DBCollectionNameKey.String(val)\n}\n\n// DBNamespace returns an attribute KeyValue conforming to the\n// \"db.namespace\" semantic conventions. It represents the name of the database,\n// fully qualified within the server address and port.\nfunc DBNamespace(val string) attribute.KeyValue {\n\treturn DBNamespaceKey.String(val)\n}\n\n// DBOperationName returns an attribute KeyValue conforming to the\n// \"db.operation.name\" semantic conventions. It represents the name of the\n// operation or command being executed.\nfunc DBOperationName(val string) attribute.KeyValue {\n\treturn DBOperationNameKey.String(val)\n}\n\n// DBQueryText returns an attribute KeyValue conforming to the\n// \"db.query.text\" semantic conventions. It represents the database query being\n// executed.\nfunc DBQueryText(val string) attribute.KeyValue {\n\treturn DBQueryTextKey.String(val)\n}\n\n// This group defines attributes for Cassandra.\nconst (\n\t// DBCassandraConsistencyLevelKey is the attribute Key conforming to the\n\t// \"db.cassandra.consistency_level\" semantic conventions. It represents the\n\t// consistency level of the query. Based on consistency values from\n\t// [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html).\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tDBCassandraConsistencyLevelKey = attribute.Key(\"db.cassandra.consistency_level\")\n\n\t// DBCassandraCoordinatorDCKey is the attribute Key conforming to the\n\t// \"db.cassandra.coordinator.dc\" semantic conventions. It represents the\n\t// data center of the coordinating node for a query.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'us-west-2'\n\tDBCassandraCoordinatorDCKey = attribute.Key(\"db.cassandra.coordinator.dc\")\n\n\t// DBCassandraCoordinatorIDKey is the attribute Key conforming to the\n\t// \"db.cassandra.coordinator.id\" semantic conventions. It represents the ID\n\t// of the coordinating node for a query.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'be13faa2-8574-4d71-926d-27f16cf8a7af'\n\tDBCassandraCoordinatorIDKey = attribute.Key(\"db.cassandra.coordinator.id\")\n\n\t// DBCassandraIdempotenceKey is the attribute Key conforming to the\n\t// \"db.cassandra.idempotence\" semantic conventions. It represents the\n\t// whether or not the query is idempotent.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tDBCassandraIdempotenceKey = attribute.Key(\"db.cassandra.idempotence\")\n\n\t// DBCassandraPageSizeKey is the attribute Key conforming to the\n\t// \"db.cassandra.page_size\" semantic conventions. It represents the fetch\n\t// size used for paging, i.e. how many rows will be returned at once.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 5000\n\tDBCassandraPageSizeKey = attribute.Key(\"db.cassandra.page_size\")\n\n\t// DBCassandraSpeculativeExecutionCountKey is the attribute Key conforming\n\t// to the \"db.cassandra.speculative_execution_count\" semantic conventions.\n\t// It represents the number of times a query was speculatively executed.\n\t// Not set or `0` if the query was not executed speculatively.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 0, 2\n\tDBCassandraSpeculativeExecutionCountKey = attribute.Key(\"db.cassandra.speculative_execution_count\")\n)\n\nvar (\n\t// all\n\tDBCassandraConsistencyLevelAll = DBCassandraConsistencyLevelKey.String(\"all\")\n\t// each_quorum\n\tDBCassandraConsistencyLevelEachQuorum = DBCassandraConsistencyLevelKey.String(\"each_quorum\")\n\t// quorum\n\tDBCassandraConsistencyLevelQuorum = DBCassandraConsistencyLevelKey.String(\"quorum\")\n\t// local_quorum\n\tDBCassandraConsistencyLevelLocalQuorum = DBCassandraConsistencyLevelKey.String(\"local_quorum\")\n\t// one\n\tDBCassandraConsistencyLevelOne = DBCassandraConsistencyLevelKey.String(\"one\")\n\t// two\n\tDBCassandraConsistencyLevelTwo = DBCassandraConsistencyLevelKey.String(\"two\")\n\t// three\n\tDBCassandraConsistencyLevelThree = DBCassandraConsistencyLevelKey.String(\"three\")\n\t// local_one\n\tDBCassandraConsistencyLevelLocalOne = DBCassandraConsistencyLevelKey.String(\"local_one\")\n\t// any\n\tDBCassandraConsistencyLevelAny = DBCassandraConsistencyLevelKey.String(\"any\")\n\t// serial\n\tDBCassandraConsistencyLevelSerial = DBCassandraConsistencyLevelKey.String(\"serial\")\n\t// local_serial\n\tDBCassandraConsistencyLevelLocalSerial = DBCassandraConsistencyLevelKey.String(\"local_serial\")\n)\n\n// DBCassandraCoordinatorDC returns an attribute KeyValue conforming to the\n// \"db.cassandra.coordinator.dc\" semantic conventions. It represents the data\n// center of the coordinating node for a query.\nfunc DBCassandraCoordinatorDC(val string) attribute.KeyValue {\n\treturn DBCassandraCoordinatorDCKey.String(val)\n}\n\n// DBCassandraCoordinatorID returns an attribute KeyValue conforming to the\n// \"db.cassandra.coordinator.id\" semantic conventions. It represents the ID of\n// the coordinating node for a query.\nfunc DBCassandraCoordinatorID(val string) attribute.KeyValue {\n\treturn DBCassandraCoordinatorIDKey.String(val)\n}\n\n// DBCassandraIdempotence returns an attribute KeyValue conforming to the\n// \"db.cassandra.idempotence\" semantic conventions. It represents the whether\n// or not the query is idempotent.\nfunc DBCassandraIdempotence(val bool) attribute.KeyValue {\n\treturn DBCassandraIdempotenceKey.Bool(val)\n}\n\n// DBCassandraPageSize returns an attribute KeyValue conforming to the\n// \"db.cassandra.page_size\" semantic conventions. It represents the fetch size\n// used for paging, i.e. how many rows will be returned at once.\nfunc DBCassandraPageSize(val int) attribute.KeyValue {\n\treturn DBCassandraPageSizeKey.Int(val)\n}\n\n// DBCassandraSpeculativeExecutionCount returns an attribute KeyValue\n// conforming to the \"db.cassandra.speculative_execution_count\" semantic\n// conventions. It represents the number of times a query was speculatively\n// executed. Not set or `0` if the query was not executed speculatively.\nfunc DBCassandraSpeculativeExecutionCount(val int) attribute.KeyValue {\n\treturn DBCassandraSpeculativeExecutionCountKey.Int(val)\n}\n\n// This group defines attributes for Azure Cosmos DB.\nconst (\n\t// DBCosmosDBClientIDKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.client_id\" semantic conventions. It represents the unique\n\t// Cosmos client instance id.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '3ba4827d-4422-483f-b59f-85b74211c11d'\n\tDBCosmosDBClientIDKey = attribute.Key(\"db.cosmosdb.client_id\")\n\n\t// DBCosmosDBConnectionModeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.connection_mode\" semantic conventions. It represents the\n\t// cosmos client connection mode.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tDBCosmosDBConnectionModeKey = attribute.Key(\"db.cosmosdb.connection_mode\")\n\n\t// DBCosmosDBOperationTypeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.operation_type\" semantic conventions. It represents the\n\t// cosmosDB Operation Type.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tDBCosmosDBOperationTypeKey = attribute.Key(\"db.cosmosdb.operation_type\")\n\n\t// DBCosmosDBRequestChargeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.request_charge\" semantic conventions. It represents the rU\n\t// consumed for that operation\n\t//\n\t// Type: double\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 46.18, 1.0\n\tDBCosmosDBRequestChargeKey = attribute.Key(\"db.cosmosdb.request_charge\")\n\n\t// DBCosmosDBRequestContentLengthKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.request_content_length\" semantic conventions. It represents\n\t// the request payload size in bytes\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tDBCosmosDBRequestContentLengthKey = attribute.Key(\"db.cosmosdb.request_content_length\")\n\n\t// DBCosmosDBStatusCodeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.status_code\" semantic conventions. It represents the cosmos\n\t// DB status code.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 200, 201\n\tDBCosmosDBStatusCodeKey = attribute.Key(\"db.cosmosdb.status_code\")\n\n\t// DBCosmosDBSubStatusCodeKey is the attribute Key conforming to the\n\t// \"db.cosmosdb.sub_status_code\" semantic conventions. It represents the\n\t// cosmos DB sub status code.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1000, 1002\n\tDBCosmosDBSubStatusCodeKey = attribute.Key(\"db.cosmosdb.sub_status_code\")\n)\n\nvar (\n\t// Gateway (HTTP) connections mode\n\tDBCosmosDBConnectionModeGateway = DBCosmosDBConnectionModeKey.String(\"gateway\")\n\t// Direct connection\n\tDBCosmosDBConnectionModeDirect = DBCosmosDBConnectionModeKey.String(\"direct\")\n)\n\nvar (\n\t// invalid\n\tDBCosmosDBOperationTypeInvalid = DBCosmosDBOperationTypeKey.String(\"Invalid\")\n\t// create\n\tDBCosmosDBOperationTypeCreate = DBCosmosDBOperationTypeKey.String(\"Create\")\n\t// patch\n\tDBCosmosDBOperationTypePatch = DBCosmosDBOperationTypeKey.String(\"Patch\")\n\t// read\n\tDBCosmosDBOperationTypeRead = DBCosmosDBOperationTypeKey.String(\"Read\")\n\t// read_feed\n\tDBCosmosDBOperationTypeReadFeed = DBCosmosDBOperationTypeKey.String(\"ReadFeed\")\n\t// delete\n\tDBCosmosDBOperationTypeDelete = DBCosmosDBOperationTypeKey.String(\"Delete\")\n\t// replace\n\tDBCosmosDBOperationTypeReplace = DBCosmosDBOperationTypeKey.String(\"Replace\")\n\t// execute\n\tDBCosmosDBOperationTypeExecute = DBCosmosDBOperationTypeKey.String(\"Execute\")\n\t// query\n\tDBCosmosDBOperationTypeQuery = DBCosmosDBOperationTypeKey.String(\"Query\")\n\t// head\n\tDBCosmosDBOperationTypeHead = DBCosmosDBOperationTypeKey.String(\"Head\")\n\t// head_feed\n\tDBCosmosDBOperationTypeHeadFeed = DBCosmosDBOperationTypeKey.String(\"HeadFeed\")\n\t// upsert\n\tDBCosmosDBOperationTypeUpsert = DBCosmosDBOperationTypeKey.String(\"Upsert\")\n\t// batch\n\tDBCosmosDBOperationTypeBatch = DBCosmosDBOperationTypeKey.String(\"Batch\")\n\t// query_plan\n\tDBCosmosDBOperationTypeQueryPlan = DBCosmosDBOperationTypeKey.String(\"QueryPlan\")\n\t// execute_javascript\n\tDBCosmosDBOperationTypeExecuteJavascript = DBCosmosDBOperationTypeKey.String(\"ExecuteJavaScript\")\n)\n\n// DBCosmosDBClientID returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.client_id\" semantic conventions. It represents the unique\n// Cosmos client instance id.\nfunc DBCosmosDBClientID(val string) attribute.KeyValue {\n\treturn DBCosmosDBClientIDKey.String(val)\n}\n\n// DBCosmosDBRequestCharge returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.request_charge\" semantic conventions. It represents the rU\n// consumed for that operation\nfunc DBCosmosDBRequestCharge(val float64) attribute.KeyValue {\n\treturn DBCosmosDBRequestChargeKey.Float64(val)\n}\n\n// DBCosmosDBRequestContentLength returns an attribute KeyValue conforming\n// to the \"db.cosmosdb.request_content_length\" semantic conventions. It\n// represents the request payload size in bytes\nfunc DBCosmosDBRequestContentLength(val int) attribute.KeyValue {\n\treturn DBCosmosDBRequestContentLengthKey.Int(val)\n}\n\n// DBCosmosDBStatusCode returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.status_code\" semantic conventions. It represents the cosmos DB\n// status code.\nfunc DBCosmosDBStatusCode(val int) attribute.KeyValue {\n\treturn DBCosmosDBStatusCodeKey.Int(val)\n}\n\n// DBCosmosDBSubStatusCode returns an attribute KeyValue conforming to the\n// \"db.cosmosdb.sub_status_code\" semantic conventions. It represents the cosmos\n// DB sub status code.\nfunc DBCosmosDBSubStatusCode(val int) attribute.KeyValue {\n\treturn DBCosmosDBSubStatusCodeKey.Int(val)\n}\n\n// This group defines attributes for Elasticsearch.\nconst (\n\t// DBElasticsearchClusterNameKey is the attribute Key conforming to the\n\t// \"db.elasticsearch.cluster.name\" semantic conventions. It represents the\n\t// represents the identifier of an Elasticsearch cluster.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'e9106fc68e3044f0b1475b04bf4ffd5f'\n\tDBElasticsearchClusterNameKey = attribute.Key(\"db.elasticsearch.cluster.name\")\n\n\t// DBElasticsearchNodeNameKey is the attribute Key conforming to the\n\t// \"db.elasticsearch.node.name\" semantic conventions. It represents the\n\t// represents the human-readable identifier of the node/instance to which a\n\t// request was routed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'instance-0000000001'\n\tDBElasticsearchNodeNameKey = attribute.Key(\"db.elasticsearch.node.name\")\n)\n\n// DBElasticsearchClusterName returns an attribute KeyValue conforming to\n// the \"db.elasticsearch.cluster.name\" semantic conventions. It represents the\n// represents the identifier of an Elasticsearch cluster.\nfunc DBElasticsearchClusterName(val string) attribute.KeyValue {\n\treturn DBElasticsearchClusterNameKey.String(val)\n}\n\n// DBElasticsearchNodeName returns an attribute KeyValue conforming to the\n// \"db.elasticsearch.node.name\" semantic conventions. It represents the\n// represents the human-readable identifier of the node/instance to which a\n// request was routed.\nfunc DBElasticsearchNodeName(val string) attribute.KeyValue {\n\treturn DBElasticsearchNodeNameKey.String(val)\n}\n\n// Attributes for software deployments.\nconst (\n\t// DeploymentEnvironmentKey is the attribute Key conforming to the\n\t// \"deployment.environment\" semantic conventions. It represents the name of\n\t// the [deployment\n\t// environment](https://wikipedia.org/wiki/Deployment_environment) (aka\n\t// deployment tier).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'staging', 'production'\n\t// Note: `deployment.environment` does not affect the uniqueness\n\t// constraints defined through\n\t// the `service.namespace`, `service.name` and `service.instance.id`\n\t// resource attributes.\n\t// This implies that resources carrying the following attribute\n\t// combinations MUST be\n\t// considered to be identifying the same service:\n\t//\n\t// * `service.name=frontend`, `deployment.environment=production`\n\t// * `service.name=frontend`, `deployment.environment=staging`.\n\tDeploymentEnvironmentKey = attribute.Key(\"deployment.environment\")\n)\n\n// DeploymentEnvironment returns an attribute KeyValue conforming to the\n// \"deployment.environment\" semantic conventions. It represents the name of the\n// [deployment environment](https://wikipedia.org/wiki/Deployment_environment)\n// (aka deployment tier).\nfunc DeploymentEnvironment(val string) attribute.KeyValue {\n\treturn DeploymentEnvironmentKey.String(val)\n}\n\n// Attributes that represents an occurrence of a lifecycle transition on the\n// Android platform.\nconst (\n\t// AndroidStateKey is the attribute Key conforming to the \"android.state\"\n\t// semantic conventions. It represents the deprecated use the\n\t// `device.app.lifecycle` event definition including `android.state` as a\n\t// payload field instead.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: The Android lifecycle states are defined in [Activity lifecycle\n\t// callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc),\n\t// and from which the `OS identifiers` are derived.\n\tAndroidStateKey = attribute.Key(\"android.state\")\n)\n\nvar (\n\t// Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time\n\tAndroidStateCreated = AndroidStateKey.String(\"created\")\n\t// Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state\n\tAndroidStateBackground = AndroidStateKey.String(\"background\")\n\t// Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states\n\tAndroidStateForeground = AndroidStateKey.String(\"foreground\")\n)\n\n// These attributes may be used to describe the receiver of a network\n// exchange/packet. These should be used when there is no client/server\n// relationship between the two sides, or when that relationship is unknown.\n// This covers low-level network interactions (e.g. packet tracing) where you\n// don't know if there was a connection or which side initiated it. This also\n// covers unidirectional UDP flows and peer-to-peer communication where the\n// \"user-facing\" surface of the protocol / API doesn't expose a clear notion of\n// client and server.\nconst (\n\t// DestinationAddressKey is the attribute Key conforming to the\n\t// \"destination.address\" semantic conventions. It represents the\n\t// destination address - domain name if available without reverse DNS\n\t// lookup; otherwise, IP address or Unix domain socket name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'destination.example.com', '10.1.2.80', '/tmp/my.sock'\n\t// Note: When observed from the source side, and when communicating through\n\t// an intermediary, `destination.address` SHOULD represent the destination\n\t// address behind any intermediaries, for example proxies, if it's\n\t// available.\n\tDestinationAddressKey = attribute.Key(\"destination.address\")\n\n\t// DestinationPortKey is the attribute Key conforming to the\n\t// \"destination.port\" semantic conventions. It represents the destination\n\t// port number\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 3389, 2888\n\tDestinationPortKey = attribute.Key(\"destination.port\")\n)\n\n// DestinationAddress returns an attribute KeyValue conforming to the\n// \"destination.address\" semantic conventions. It represents the destination\n// address - domain name if available without reverse DNS lookup; otherwise, IP\n// address or Unix domain socket name.\nfunc DestinationAddress(val string) attribute.KeyValue {\n\treturn DestinationAddressKey.String(val)\n}\n\n// DestinationPort returns an attribute KeyValue conforming to the\n// \"destination.port\" semantic conventions. It represents the destination port\n// number\nfunc DestinationPort(val int) attribute.KeyValue {\n\treturn DestinationPortKey.Int(val)\n}\n\n// Describes device attributes.\nconst (\n\t// DeviceIDKey is the attribute Key conforming to the \"device.id\" semantic\n\t// conventions. It represents a unique identifier representing the device\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092'\n\t// Note: The device identifier MUST only be defined using the values\n\t// outlined below. This value is not an advertising identifier and MUST NOT\n\t// be used as such. On iOS (Swift or Objective-C), this value MUST be equal\n\t// to the [vendor\n\t// identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor).\n\t// On Android (Java or Kotlin), this value MUST be equal to the Firebase\n\t// Installation ID or a globally unique UUID which is persisted across\n\t// sessions in your application. More information can be found\n\t// [here](https://developer.android.com/training/articles/user-data-ids) on\n\t// best practices and exact implementation details. Caution should be taken\n\t// when storing personal data or anything which can identify a user. GDPR\n\t// and data protection laws may apply, ensure you do your own due\n\t// diligence.\n\tDeviceIDKey = attribute.Key(\"device.id\")\n\n\t// DeviceManufacturerKey is the attribute Key conforming to the\n\t// \"device.manufacturer\" semantic conventions. It represents the name of\n\t// the device manufacturer\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Apple', 'Samsung'\n\t// Note: The Android OS provides this field via\n\t// [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER).\n\t// iOS apps SHOULD hardcode the value `Apple`.\n\tDeviceManufacturerKey = attribute.Key(\"device.manufacturer\")\n\n\t// DeviceModelIdentifierKey is the attribute Key conforming to the\n\t// \"device.model.identifier\" semantic conventions. It represents the model\n\t// identifier for the device\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'iPhone3,4', 'SM-G920F'\n\t// Note: It's recommended this value represents a machine-readable version\n\t// of the model identifier rather than the market or consumer-friendly name\n\t// of the device.\n\tDeviceModelIdentifierKey = attribute.Key(\"device.model.identifier\")\n\n\t// DeviceModelNameKey is the attribute Key conforming to the\n\t// \"device.model.name\" semantic conventions. It represents the marketing\n\t// name for the device model\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6'\n\t// Note: It's recommended this value represents a human-readable version of\n\t// the device model rather than a machine-readable alternative.\n\tDeviceModelNameKey = attribute.Key(\"device.model.name\")\n)\n\n// DeviceID returns an attribute KeyValue conforming to the \"device.id\"\n// semantic conventions. It represents a unique identifier representing the\n// device\nfunc DeviceID(val string) attribute.KeyValue {\n\treturn DeviceIDKey.String(val)\n}\n\n// DeviceManufacturer returns an attribute KeyValue conforming to the\n// \"device.manufacturer\" semantic conventions. It represents the name of the\n// device manufacturer\nfunc DeviceManufacturer(val string) attribute.KeyValue {\n\treturn DeviceManufacturerKey.String(val)\n}\n\n// DeviceModelIdentifier returns an attribute KeyValue conforming to the\n// \"device.model.identifier\" semantic conventions. It represents the model\n// identifier for the device\nfunc DeviceModelIdentifier(val string) attribute.KeyValue {\n\treturn DeviceModelIdentifierKey.String(val)\n}\n\n// DeviceModelName returns an attribute KeyValue conforming to the\n// \"device.model.name\" semantic conventions. It represents the marketing name\n// for the device model\nfunc DeviceModelName(val string) attribute.KeyValue {\n\treturn DeviceModelNameKey.String(val)\n}\n\n// These attributes may be used for any disk related operation.\nconst (\n\t// DiskIoDirectionKey is the attribute Key conforming to the\n\t// \"disk.io.direction\" semantic conventions. It represents the disk IO\n\t// operation direction.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'read'\n\tDiskIoDirectionKey = attribute.Key(\"disk.io.direction\")\n)\n\nvar (\n\t// read\n\tDiskIoDirectionRead = DiskIoDirectionKey.String(\"read\")\n\t// write\n\tDiskIoDirectionWrite = DiskIoDirectionKey.String(\"write\")\n)\n\n// The shared attributes used to report a DNS query.\nconst (\n\t// DNSQuestionNameKey is the attribute Key conforming to the\n\t// \"dns.question.name\" semantic conventions. It represents the name being\n\t// queried.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'www.example.com', 'opentelemetry.io'\n\t// Note: If the name field contains non-printable characters (below 32 or\n\t// above 126), those characters should be represented as escaped base 10\n\t// integers (\\DDD). Back slashes and quotes should be escaped. Tabs,\n\t// carriage returns, and line feeds should be converted to \\t, \\r, and \\n\n\t// respectively.\n\tDNSQuestionNameKey = attribute.Key(\"dns.question.name\")\n)\n\n// DNSQuestionName returns an attribute KeyValue conforming to the\n// \"dns.question.name\" semantic conventions. It represents the name being\n// queried.\nfunc DNSQuestionName(val string) attribute.KeyValue {\n\treturn DNSQuestionNameKey.String(val)\n}\n\n// Attributes for operations with an authenticated and/or authorized enduser.\nconst (\n\t// EnduserIDKey is the attribute Key conforming to the \"enduser.id\"\n\t// semantic conventions. It represents the username or client_id extracted\n\t// from the access token or\n\t// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header\n\t// in the inbound request from outside the system.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'username'\n\tEnduserIDKey = attribute.Key(\"enduser.id\")\n\n\t// EnduserRoleKey is the attribute Key conforming to the \"enduser.role\"\n\t// semantic conventions. It represents the actual/assumed role the client\n\t// is making the request under extracted from token or application security\n\t// context.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'admin'\n\tEnduserRoleKey = attribute.Key(\"enduser.role\")\n\n\t// EnduserScopeKey is the attribute Key conforming to the \"enduser.scope\"\n\t// semantic conventions. It represents the scopes or granted authorities\n\t// the client currently possesses extracted from token or application\n\t// security context. The value would come from the scope associated with an\n\t// [OAuth 2.0 Access\n\t// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute\n\t// value in a [SAML 2.0\n\t// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'read:message, write:files'\n\tEnduserScopeKey = attribute.Key(\"enduser.scope\")\n)\n\n// EnduserID returns an attribute KeyValue conforming to the \"enduser.id\"\n// semantic conventions. It represents the username or client_id extracted from\n// the access token or\n// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in\n// the inbound request from outside the system.\nfunc EnduserID(val string) attribute.KeyValue {\n\treturn EnduserIDKey.String(val)\n}\n\n// EnduserRole returns an attribute KeyValue conforming to the\n// \"enduser.role\" semantic conventions. It represents the actual/assumed role\n// the client is making the request under extracted from token or application\n// security context.\nfunc EnduserRole(val string) attribute.KeyValue {\n\treturn EnduserRoleKey.String(val)\n}\n\n// EnduserScope returns an attribute KeyValue conforming to the\n// \"enduser.scope\" semantic conventions. It represents the scopes or granted\n// authorities the client currently possesses extracted from token or\n// application security context. The value would come from the scope associated\n// with an [OAuth 2.0 Access\n// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute\n// value in a [SAML 2.0\n// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html).\nfunc EnduserScope(val string) attribute.KeyValue {\n\treturn EnduserScopeKey.String(val)\n}\n\n// The shared attributes used to report an error.\nconst (\n\t// ErrorTypeKey is the attribute Key conforming to the \"error.type\"\n\t// semantic conventions. It represents the describes a class of error the\n\t// operation ended with.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'timeout', 'java.net.UnknownHostException',\n\t// 'server_certificate_invalid', '500'\n\t// Note: The `error.type` SHOULD be predictable, and SHOULD have low\n\t// cardinality.\n\t//\n\t// When `error.type` is set to a type (e.g., an exception type), its\n\t// canonical class name identifying the type within the artifact SHOULD be\n\t// used.\n\t//\n\t// Instrumentations SHOULD document the list of errors they report.\n\t//\n\t// The cardinality of `error.type` within one instrumentation library\n\t// SHOULD be low.\n\t// Telemetry consumers that aggregate data from multiple instrumentation\n\t// libraries and applications\n\t// should be prepared for `error.type` to have high cardinality at query\n\t// time when no\n\t// additional filters are applied.\n\t//\n\t// If the operation has completed successfully, instrumentations SHOULD NOT\n\t// set `error.type`.\n\t//\n\t// If a specific domain defines its own set of error identifiers (such as\n\t// HTTP or gRPC status codes),\n\t// it's RECOMMENDED to:\n\t//\n\t// * Use a domain-specific attribute\n\t// * Set `error.type` to capture all errors, regardless of whether they are\n\t// defined within the domain-specific set or not.\n\tErrorTypeKey = attribute.Key(\"error.type\")\n)\n\nvar (\n\t// A fallback error value to be used when the instrumentation doesn't define a custom value\n\tErrorTypeOther = ErrorTypeKey.String(\"_OTHER\")\n)\n\n// Attributes for Events represented using Log Records.\nconst (\n\t// EventNameKey is the attribute Key conforming to the \"event.name\"\n\t// semantic conventions. It represents the identifies the class / type of\n\t// event.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'browser.mouse.click', 'device.app.lifecycle'\n\t// Note: Event names are subject to the same rules as [attribute\n\t// names](https://github.com/open-telemetry/opentelemetry-specification/tree/v1.33.0/specification/common/attribute-naming.md).\n\t// Notably, event names are namespaced to avoid collisions and provide a\n\t// clean separation of semantics for events in separate domains like\n\t// browser, mobile, and kubernetes.\n\tEventNameKey = attribute.Key(\"event.name\")\n)\n\n// EventName returns an attribute KeyValue conforming to the \"event.name\"\n// semantic conventions. It represents the identifies the class / type of\n// event.\nfunc EventName(val string) attribute.KeyValue {\n\treturn EventNameKey.String(val)\n}\n\n// The shared attributes used to report a single exception associated with a\n// span or log.\nconst (\n\t// ExceptionEscapedKey is the attribute Key conforming to the\n\t// \"exception.escaped\" semantic conventions. It represents the sHOULD be\n\t// set to true if the exception event is recorded at a point where it is\n\t// known that the exception is escaping the scope of the span.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Note: An exception is considered to have escaped (or left) the scope of\n\t// a span,\n\t// if that span is ended while the exception is still logically \"in\n\t// flight\".\n\t// This may be actually \"in flight\" in some languages (e.g. if the\n\t// exception\n\t// is passed to a Context manager's `__exit__` method in Python) but will\n\t// usually be caught at the point of recording the exception in most\n\t// languages.\n\t//\n\t// It is usually not possible to determine at the point where an exception\n\t// is thrown\n\t// whether it will escape the scope of a span.\n\t// However, it is trivial to know that an exception\n\t// will escape, if one checks for an active exception just before ending\n\t// the span,\n\t// as done in the [example for recording span\n\t// exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).\n\t//\n\t// It follows that an exception may still escape the scope of the span\n\t// even if the `exception.escaped` attribute was not set or set to false,\n\t// since the event might have been recorded at a time where it was not\n\t// clear whether the exception will escape.\n\tExceptionEscapedKey = attribute.Key(\"exception.escaped\")\n\n\t// ExceptionMessageKey is the attribute Key conforming to the\n\t// \"exception.message\" semantic conventions. It represents the exception\n\t// message.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Division by zero', \"Can't convert 'int' object to str\n\t// implicitly\"\n\tExceptionMessageKey = attribute.Key(\"exception.message\")\n\n\t// ExceptionStacktraceKey is the attribute Key conforming to the\n\t// \"exception.stacktrace\" semantic conventions. It represents a stacktrace\n\t// as a string in the natural representation for the language runtime. The\n\t// representation is to be determined and documented by each language SIG.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'Exception in thread \"main\" java.lang.RuntimeException: Test\n\t// exception\\\\n at '\n\t//  'com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\\\n at '\n\t//  'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\\\n at '\n\t//  'com.example.GenerateTrace.main(GenerateTrace.java:5)'\n\tExceptionStacktraceKey = attribute.Key(\"exception.stacktrace\")\n\n\t// ExceptionTypeKey is the attribute Key conforming to the \"exception.type\"\n\t// semantic conventions. It represents the type of the exception (its\n\t// fully-qualified class name, if applicable). The dynamic type of the\n\t// exception should be preferred over the static type in languages that\n\t// support it.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'java.net.ConnectException', 'OSError'\n\tExceptionTypeKey = attribute.Key(\"exception.type\")\n)\n\n// ExceptionEscaped returns an attribute KeyValue conforming to the\n// \"exception.escaped\" semantic conventions. It represents the sHOULD be set to\n// true if the exception event is recorded at a point where it is known that\n// the exception is escaping the scope of the span.\nfunc ExceptionEscaped(val bool) attribute.KeyValue {\n\treturn ExceptionEscapedKey.Bool(val)\n}\n\n// ExceptionMessage returns an attribute KeyValue conforming to the\n// \"exception.message\" semantic conventions. It represents the exception\n// message.\nfunc ExceptionMessage(val string) attribute.KeyValue {\n\treturn ExceptionMessageKey.String(val)\n}\n\n// ExceptionStacktrace returns an attribute KeyValue conforming to the\n// \"exception.stacktrace\" semantic conventions. It represents a stacktrace as a\n// string in the natural representation for the language runtime. The\n// representation is to be determined and documented by each language SIG.\nfunc ExceptionStacktrace(val string) attribute.KeyValue {\n\treturn ExceptionStacktraceKey.String(val)\n}\n\n// ExceptionType returns an attribute KeyValue conforming to the\n// \"exception.type\" semantic conventions. It represents the type of the\n// exception (its fully-qualified class name, if applicable). The dynamic type\n// of the exception should be preferred over the static type in languages that\n// support it.\nfunc ExceptionType(val string) attribute.KeyValue {\n\treturn ExceptionTypeKey.String(val)\n}\n\n// FaaS attributes\nconst (\n\t// FaaSColdstartKey is the attribute Key conforming to the \"faas.coldstart\"\n\t// semantic conventions. It represents a boolean that is true if the\n\t// serverless function is executed for the first time (aka cold-start).\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tFaaSColdstartKey = attribute.Key(\"faas.coldstart\")\n\n\t// FaaSCronKey is the attribute Key conforming to the \"faas.cron\" semantic\n\t// conventions. It represents a string containing the schedule period as\n\t// [Cron\n\t// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '0/5 * * * ? *'\n\tFaaSCronKey = attribute.Key(\"faas.cron\")\n\n\t// FaaSDocumentCollectionKey is the attribute Key conforming to the\n\t// \"faas.document.collection\" semantic conventions. It represents the name\n\t// of the source on which the triggering operation was performed. For\n\t// example, in Cloud Storage or S3 corresponds to the bucket name, and in\n\t// Cosmos DB to the database name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myBucketName', 'myDBName'\n\tFaaSDocumentCollectionKey = attribute.Key(\"faas.document.collection\")\n\n\t// FaaSDocumentNameKey is the attribute Key conforming to the\n\t// \"faas.document.name\" semantic conventions. It represents the document\n\t// name/table subjected to the operation. For example, in Cloud Storage or\n\t// S3 is the name of the file, and in Cosmos DB the table name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myFile.txt', 'myTableName'\n\tFaaSDocumentNameKey = attribute.Key(\"faas.document.name\")\n\n\t// FaaSDocumentOperationKey is the attribute Key conforming to the\n\t// \"faas.document.operation\" semantic conventions. It represents the\n\t// describes the type of the operation that was performed on the data.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tFaaSDocumentOperationKey = attribute.Key(\"faas.document.operation\")\n\n\t// FaaSDocumentTimeKey is the attribute Key conforming to the\n\t// \"faas.document.time\" semantic conventions. It represents a string\n\t// containing the time when the data was accessed in the [ISO\n\t// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n\t// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2020-01-23T13:47:06Z'\n\tFaaSDocumentTimeKey = attribute.Key(\"faas.document.time\")\n\n\t// FaaSInstanceKey is the attribute Key conforming to the \"faas.instance\"\n\t// semantic conventions. It represents the execution environment ID as a\n\t// string, that will be potentially reused for other invocations to the\n\t// same function/function version.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de'\n\t// Note: * **AWS Lambda:** Use the (full) log stream name.\n\tFaaSInstanceKey = attribute.Key(\"faas.instance\")\n\n\t// FaaSInvocationIDKey is the attribute Key conforming to the\n\t// \"faas.invocation_id\" semantic conventions. It represents the invocation\n\t// ID of the current function invocation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28'\n\tFaaSInvocationIDKey = attribute.Key(\"faas.invocation_id\")\n\n\t// FaaSInvokedNameKey is the attribute Key conforming to the\n\t// \"faas.invoked_name\" semantic conventions. It represents the name of the\n\t// invoked function.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'my-function'\n\t// Note: SHOULD be equal to the `faas.name` resource attribute of the\n\t// invoked function.\n\tFaaSInvokedNameKey = attribute.Key(\"faas.invoked_name\")\n\n\t// FaaSInvokedProviderKey is the attribute Key conforming to the\n\t// \"faas.invoked_provider\" semantic conventions. It represents the cloud\n\t// provider of the invoked function.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: SHOULD be equal to the `cloud.provider` resource attribute of the\n\t// invoked function.\n\tFaaSInvokedProviderKey = attribute.Key(\"faas.invoked_provider\")\n\n\t// FaaSInvokedRegionKey is the attribute Key conforming to the\n\t// \"faas.invoked_region\" semantic conventions. It represents the cloud\n\t// region of the invoked function.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'eu-central-1'\n\t// Note: SHOULD be equal to the `cloud.region` resource attribute of the\n\t// invoked function.\n\tFaaSInvokedRegionKey = attribute.Key(\"faas.invoked_region\")\n\n\t// FaaSMaxMemoryKey is the attribute Key conforming to the\n\t// \"faas.max_memory\" semantic conventions. It represents the amount of\n\t// memory available to the serverless function converted to Bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 134217728\n\t// Note: It's recommended to set this attribute since e.g. too little\n\t// memory can easily stop a Java AWS Lambda function from working\n\t// correctly. On AWS Lambda, the environment variable\n\t// `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must\n\t// be multiplied by 1,048,576).\n\tFaaSMaxMemoryKey = attribute.Key(\"faas.max_memory\")\n\n\t// FaaSNameKey is the attribute Key conforming to the \"faas.name\" semantic\n\t// conventions. It represents the name of the single function that this\n\t// runtime instance executes.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'my-function', 'myazurefunctionapp/some-function-name'\n\t// Note: This is the name of the function as configured/deployed on the\n\t// FaaS\n\t// platform and is usually different from the name of the callback\n\t// function (which may be stored in the\n\t// [`code.namespace`/`code.function`](/docs/general/attributes.md#source-code-attributes)\n\t// span attributes).\n\t//\n\t// For some cloud providers, the above definition is ambiguous. The\n\t// following\n\t// definition of function name MUST be used for this attribute\n\t// (and consequently the span name) for the listed cloud\n\t// providers/products:\n\t//\n\t// * **Azure:**  The full name `<FUNCAPP>/<FUNC>`, i.e., function app name\n\t//   followed by a forward slash followed by the function name (this form\n\t//   can also be seen in the resource JSON for the function).\n\t//   This means that a span attribute MUST be used, as an Azure function\n\t//   app can host multiple functions that would usually share\n\t//   a TracerProvider (see also the `cloud.resource_id` attribute).\n\tFaaSNameKey = attribute.Key(\"faas.name\")\n\n\t// FaaSTimeKey is the attribute Key conforming to the \"faas.time\" semantic\n\t// conventions. It represents a string containing the function invocation\n\t// time in the [ISO\n\t// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n\t// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2020-01-23T13:47:06Z'\n\tFaaSTimeKey = attribute.Key(\"faas.time\")\n\n\t// FaaSTriggerKey is the attribute Key conforming to the \"faas.trigger\"\n\t// semantic conventions. It represents the type of the trigger which caused\n\t// this function invocation.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tFaaSTriggerKey = attribute.Key(\"faas.trigger\")\n\n\t// FaaSVersionKey is the attribute Key conforming to the \"faas.version\"\n\t// semantic conventions. It represents the immutable version of the\n\t// function being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '26', 'pinkfroid-00002'\n\t// Note: Depending on the cloud provider and platform, use:\n\t//\n\t// * **AWS Lambda:** The [function\n\t// version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)\n\t//   (an integer represented as a decimal string).\n\t// * **Google Cloud Run (Services):** The\n\t// [revision](https://cloud.google.com/run/docs/managing/revisions)\n\t//   (i.e., the function name plus the revision suffix).\n\t// * **Google Cloud Functions:** The value of the\n\t//   [`K_REVISION` environment\n\t// variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically).\n\t// * **Azure Functions:** Not applicable. Do not set this attribute.\n\tFaaSVersionKey = attribute.Key(\"faas.version\")\n)\n\nvar (\n\t// When a new object is created\n\tFaaSDocumentOperationInsert = FaaSDocumentOperationKey.String(\"insert\")\n\t// When an object is modified\n\tFaaSDocumentOperationEdit = FaaSDocumentOperationKey.String(\"edit\")\n\t// When an object is deleted\n\tFaaSDocumentOperationDelete = FaaSDocumentOperationKey.String(\"delete\")\n)\n\nvar (\n\t// Alibaba Cloud\n\tFaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String(\"alibaba_cloud\")\n\t// Amazon Web Services\n\tFaaSInvokedProviderAWS = FaaSInvokedProviderKey.String(\"aws\")\n\t// Microsoft Azure\n\tFaaSInvokedProviderAzure = FaaSInvokedProviderKey.String(\"azure\")\n\t// Google Cloud Platform\n\tFaaSInvokedProviderGCP = FaaSInvokedProviderKey.String(\"gcp\")\n\t// Tencent Cloud\n\tFaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String(\"tencent_cloud\")\n)\n\nvar (\n\t// A response to some data source operation such as a database or filesystem read/write\n\tFaaSTriggerDatasource = FaaSTriggerKey.String(\"datasource\")\n\t// To provide an answer to an inbound HTTP request\n\tFaaSTriggerHTTP = FaaSTriggerKey.String(\"http\")\n\t// A function is set to be executed when messages are sent to a messaging system\n\tFaaSTriggerPubsub = FaaSTriggerKey.String(\"pubsub\")\n\t// A function is scheduled to be executed regularly\n\tFaaSTriggerTimer = FaaSTriggerKey.String(\"timer\")\n\t// If none of the others apply\n\tFaaSTriggerOther = FaaSTriggerKey.String(\"other\")\n)\n\n// FaaSColdstart returns an attribute KeyValue conforming to the\n// \"faas.coldstart\" semantic conventions. It represents a boolean that is true\n// if the serverless function is executed for the first time (aka cold-start).\nfunc FaaSColdstart(val bool) attribute.KeyValue {\n\treturn FaaSColdstartKey.Bool(val)\n}\n\n// FaaSCron returns an attribute KeyValue conforming to the \"faas.cron\"\n// semantic conventions. It represents a string containing the schedule period\n// as [Cron\n// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\nfunc FaaSCron(val string) attribute.KeyValue {\n\treturn FaaSCronKey.String(val)\n}\n\n// FaaSDocumentCollection returns an attribute KeyValue conforming to the\n// \"faas.document.collection\" semantic conventions. It represents the name of\n// the source on which the triggering operation was performed. For example, in\n// Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the\n// database name.\nfunc FaaSDocumentCollection(val string) attribute.KeyValue {\n\treturn FaaSDocumentCollectionKey.String(val)\n}\n\n// FaaSDocumentName returns an attribute KeyValue conforming to the\n// \"faas.document.name\" semantic conventions. It represents the document\n// name/table subjected to the operation. For example, in Cloud Storage or S3\n// is the name of the file, and in Cosmos DB the table name.\nfunc FaaSDocumentName(val string) attribute.KeyValue {\n\treturn FaaSDocumentNameKey.String(val)\n}\n\n// FaaSDocumentTime returns an attribute KeyValue conforming to the\n// \"faas.document.time\" semantic conventions. It represents a string containing\n// the time when the data was accessed in the [ISO\n// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\nfunc FaaSDocumentTime(val string) attribute.KeyValue {\n\treturn FaaSDocumentTimeKey.String(val)\n}\n\n// FaaSInstance returns an attribute KeyValue conforming to the\n// \"faas.instance\" semantic conventions. It represents the execution\n// environment ID as a string, that will be potentially reused for other\n// invocations to the same function/function version.\nfunc FaaSInstance(val string) attribute.KeyValue {\n\treturn FaaSInstanceKey.String(val)\n}\n\n// FaaSInvocationID returns an attribute KeyValue conforming to the\n// \"faas.invocation_id\" semantic conventions. It represents the invocation ID\n// of the current function invocation.\nfunc FaaSInvocationID(val string) attribute.KeyValue {\n\treturn FaaSInvocationIDKey.String(val)\n}\n\n// FaaSInvokedName returns an attribute KeyValue conforming to the\n// \"faas.invoked_name\" semantic conventions. It represents the name of the\n// invoked function.\nfunc FaaSInvokedName(val string) attribute.KeyValue {\n\treturn FaaSInvokedNameKey.String(val)\n}\n\n// FaaSInvokedRegion returns an attribute KeyValue conforming to the\n// \"faas.invoked_region\" semantic conventions. It represents the cloud region\n// of the invoked function.\nfunc FaaSInvokedRegion(val string) attribute.KeyValue {\n\treturn FaaSInvokedRegionKey.String(val)\n}\n\n// FaaSMaxMemory returns an attribute KeyValue conforming to the\n// \"faas.max_memory\" semantic conventions. It represents the amount of memory\n// available to the serverless function converted to Bytes.\nfunc FaaSMaxMemory(val int) attribute.KeyValue {\n\treturn FaaSMaxMemoryKey.Int(val)\n}\n\n// FaaSName returns an attribute KeyValue conforming to the \"faas.name\"\n// semantic conventions. It represents the name of the single function that\n// this runtime instance executes.\nfunc FaaSName(val string) attribute.KeyValue {\n\treturn FaaSNameKey.String(val)\n}\n\n// FaaSTime returns an attribute KeyValue conforming to the \"faas.time\"\n// semantic conventions. It represents a string containing the function\n// invocation time in the [ISO\n// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\nfunc FaaSTime(val string) attribute.KeyValue {\n\treturn FaaSTimeKey.String(val)\n}\n\n// FaaSVersion returns an attribute KeyValue conforming to the\n// \"faas.version\" semantic conventions. It represents the immutable version of\n// the function being executed.\nfunc FaaSVersion(val string) attribute.KeyValue {\n\treturn FaaSVersionKey.String(val)\n}\n\n// Attributes for Feature Flags.\nconst (\n\t// FeatureFlagKeyKey is the attribute Key conforming to the\n\t// \"feature_flag.key\" semantic conventions. It represents the unique\n\t// identifier of the feature flag.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'logo-color'\n\tFeatureFlagKeyKey = attribute.Key(\"feature_flag.key\")\n\n\t// FeatureFlagProviderNameKey is the attribute Key conforming to the\n\t// \"feature_flag.provider_name\" semantic conventions. It represents the\n\t// name of the service provider that performs the flag evaluation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Flag Manager'\n\tFeatureFlagProviderNameKey = attribute.Key(\"feature_flag.provider_name\")\n\n\t// FeatureFlagVariantKey is the attribute Key conforming to the\n\t// \"feature_flag.variant\" semantic conventions. It represents the sHOULD be\n\t// a semantic identifier for a value. If one is unavailable, a stringified\n\t// version of the value can be used.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'red', 'true', 'on'\n\t// Note: A semantic identifier, commonly referred to as a variant, provides\n\t// a means\n\t// for referring to a value without including the value itself. This can\n\t// provide additional context for understanding the meaning behind a value.\n\t// For example, the variant `red` maybe be used for the value `#c05543`.\n\t//\n\t// A stringified version of the value can be used in situations where a\n\t// semantic identifier is unavailable. String representation of the value\n\t// should be determined by the implementer.\n\tFeatureFlagVariantKey = attribute.Key(\"feature_flag.variant\")\n)\n\n// FeatureFlagKey returns an attribute KeyValue conforming to the\n// \"feature_flag.key\" semantic conventions. It represents the unique identifier\n// of the feature flag.\nfunc FeatureFlagKey(val string) attribute.KeyValue {\n\treturn FeatureFlagKeyKey.String(val)\n}\n\n// FeatureFlagProviderName returns an attribute KeyValue conforming to the\n// \"feature_flag.provider_name\" semantic conventions. It represents the name of\n// the service provider that performs the flag evaluation.\nfunc FeatureFlagProviderName(val string) attribute.KeyValue {\n\treturn FeatureFlagProviderNameKey.String(val)\n}\n\n// FeatureFlagVariant returns an attribute KeyValue conforming to the\n// \"feature_flag.variant\" semantic conventions. It represents the sHOULD be a\n// semantic identifier for a value. If one is unavailable, a stringified\n// version of the value can be used.\nfunc FeatureFlagVariant(val string) attribute.KeyValue {\n\treturn FeatureFlagVariantKey.String(val)\n}\n\n// Describes file attributes.\nconst (\n\t// FileDirectoryKey is the attribute Key conforming to the \"file.directory\"\n\t// semantic conventions. It represents the directory where the file is\n\t// located. It should include the drive letter, when appropriate.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/home/user', 'C:\\\\Program Files\\\\MyApp'\n\tFileDirectoryKey = attribute.Key(\"file.directory\")\n\n\t// FileExtensionKey is the attribute Key conforming to the \"file.extension\"\n\t// semantic conventions. It represents the file extension, excluding the\n\t// leading dot.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'png', 'gz'\n\t// Note: When the file name has multiple extensions (example.tar.gz), only\n\t// the last one should be captured (\"gz\", not \"tar.gz\").\n\tFileExtensionKey = attribute.Key(\"file.extension\")\n\n\t// FileNameKey is the attribute Key conforming to the \"file.name\" semantic\n\t// conventions. It represents the name of the file including the extension,\n\t// without the directory.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'example.png'\n\tFileNameKey = attribute.Key(\"file.name\")\n\n\t// FilePathKey is the attribute Key conforming to the \"file.path\" semantic\n\t// conventions. It represents the full path to the file, including the file\n\t// name. It should include the drive letter, when appropriate.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/home/alice/example.png', 'C:\\\\Program\n\t// Files\\\\MyApp\\\\myapp.exe'\n\tFilePathKey = attribute.Key(\"file.path\")\n\n\t// FileSizeKey is the attribute Key conforming to the \"file.size\" semantic\n\t// conventions. It represents the file size in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tFileSizeKey = attribute.Key(\"file.size\")\n)\n\n// FileDirectory returns an attribute KeyValue conforming to the\n// \"file.directory\" semantic conventions. It represents the directory where the\n// file is located. It should include the drive letter, when appropriate.\nfunc FileDirectory(val string) attribute.KeyValue {\n\treturn FileDirectoryKey.String(val)\n}\n\n// FileExtension returns an attribute KeyValue conforming to the\n// \"file.extension\" semantic conventions. It represents the file extension,\n// excluding the leading dot.\nfunc FileExtension(val string) attribute.KeyValue {\n\treturn FileExtensionKey.String(val)\n}\n\n// FileName returns an attribute KeyValue conforming to the \"file.name\"\n// semantic conventions. It represents the name of the file including the\n// extension, without the directory.\nfunc FileName(val string) attribute.KeyValue {\n\treturn FileNameKey.String(val)\n}\n\n// FilePath returns an attribute KeyValue conforming to the \"file.path\"\n// semantic conventions. It represents the full path to the file, including the\n// file name. It should include the drive letter, when appropriate.\nfunc FilePath(val string) attribute.KeyValue {\n\treturn FilePathKey.String(val)\n}\n\n// FileSize returns an attribute KeyValue conforming to the \"file.size\"\n// semantic conventions. It represents the file size in bytes.\nfunc FileSize(val int) attribute.KeyValue {\n\treturn FileSizeKey.Int(val)\n}\n\n// Attributes for Google Cloud Run.\nconst (\n\t// GCPCloudRunJobExecutionKey is the attribute Key conforming to the\n\t// \"gcp.cloud_run.job.execution\" semantic conventions. It represents the\n\t// name of the Cloud Run\n\t// [execution](https://cloud.google.com/run/docs/managing/job-executions)\n\t// being run for the Job, as set by the\n\t// [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)\n\t// environment variable.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'job-name-xxxx', 'sample-job-mdw84'\n\tGCPCloudRunJobExecutionKey = attribute.Key(\"gcp.cloud_run.job.execution\")\n\n\t// GCPCloudRunJobTaskIndexKey is the attribute Key conforming to the\n\t// \"gcp.cloud_run.job.task_index\" semantic conventions. It represents the\n\t// index for a task within an execution as provided by the\n\t// [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)\n\t// environment variable.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 0, 1\n\tGCPCloudRunJobTaskIndexKey = attribute.Key(\"gcp.cloud_run.job.task_index\")\n)\n\n// GCPCloudRunJobExecution returns an attribute KeyValue conforming to the\n// \"gcp.cloud_run.job.execution\" semantic conventions. It represents the name\n// of the Cloud Run\n// [execution](https://cloud.google.com/run/docs/managing/job-executions) being\n// run for the Job, as set by the\n// [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)\n// environment variable.\nfunc GCPCloudRunJobExecution(val string) attribute.KeyValue {\n\treturn GCPCloudRunJobExecutionKey.String(val)\n}\n\n// GCPCloudRunJobTaskIndex returns an attribute KeyValue conforming to the\n// \"gcp.cloud_run.job.task_index\" semantic conventions. It represents the index\n// for a task within an execution as provided by the\n// [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars)\n// environment variable.\nfunc GCPCloudRunJobTaskIndex(val int) attribute.KeyValue {\n\treturn GCPCloudRunJobTaskIndexKey.Int(val)\n}\n\n// Attributes for Google Compute Engine (GCE).\nconst (\n\t// GCPGceInstanceHostnameKey is the attribute Key conforming to the\n\t// \"gcp.gce.instance.hostname\" semantic conventions. It represents the\n\t// hostname of a GCE instance. This is the full value of the default or\n\t// [custom\n\t// hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'my-host1234.example.com',\n\t// 'sample-vm.us-west1-b.c.my-project.internal'\n\tGCPGceInstanceHostnameKey = attribute.Key(\"gcp.gce.instance.hostname\")\n\n\t// GCPGceInstanceNameKey is the attribute Key conforming to the\n\t// \"gcp.gce.instance.name\" semantic conventions. It represents the instance\n\t// name of a GCE instance. This is the value provided by `host.name`, the\n\t// visible name of the instance in the Cloud Console UI, and the prefix for\n\t// the default hostname of the instance as defined by the [default internal\n\t// DNS\n\t// name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'instance-1', 'my-vm-name'\n\tGCPGceInstanceNameKey = attribute.Key(\"gcp.gce.instance.name\")\n)\n\n// GCPGceInstanceHostname returns an attribute KeyValue conforming to the\n// \"gcp.gce.instance.hostname\" semantic conventions. It represents the hostname\n// of a GCE instance. This is the full value of the default or [custom\n// hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm).\nfunc GCPGceInstanceHostname(val string) attribute.KeyValue {\n\treturn GCPGceInstanceHostnameKey.String(val)\n}\n\n// GCPGceInstanceName returns an attribute KeyValue conforming to the\n// \"gcp.gce.instance.name\" semantic conventions. It represents the instance\n// name of a GCE instance. This is the value provided by `host.name`, the\n// visible name of the instance in the Cloud Console UI, and the prefix for the\n// default hostname of the instance as defined by the [default internal DNS\n// name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names).\nfunc GCPGceInstanceName(val string) attribute.KeyValue {\n\treturn GCPGceInstanceNameKey.String(val)\n}\n\n// The attributes used to describe telemetry in the context of LLM (Large\n// Language Models) requests and responses.\nconst (\n\t// GenAiCompletionKey is the attribute Key conforming to the\n\t// \"gen_ai.completion\" semantic conventions. It represents the full\n\t// response received from the LLM.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: \"[{'role': 'assistant', 'content': 'The capital of France is\n\t// Paris.'}]\"\n\t// Note: It's RECOMMENDED to format completions as JSON string matching\n\t// [OpenAI messages\n\t// format](https://platform.openai.com/docs/guides/text-generation)\n\tGenAiCompletionKey = attribute.Key(\"gen_ai.completion\")\n\n\t// GenAiPromptKey is the attribute Key conforming to the \"gen_ai.prompt\"\n\t// semantic conventions. It represents the full prompt sent to an LLM.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: \"[{'role': 'user', 'content': 'What is the capital of\n\t// France?'}]\"\n\t// Note: It's RECOMMENDED to format prompts as JSON string matching [OpenAI\n\t// messages\n\t// format](https://platform.openai.com/docs/guides/text-generation)\n\tGenAiPromptKey = attribute.Key(\"gen_ai.prompt\")\n\n\t// GenAiRequestMaxTokensKey is the attribute Key conforming to the\n\t// \"gen_ai.request.max_tokens\" semantic conventions. It represents the\n\t// maximum number of tokens the LLM generates for a request.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 100\n\tGenAiRequestMaxTokensKey = attribute.Key(\"gen_ai.request.max_tokens\")\n\n\t// GenAiRequestModelKey is the attribute Key conforming to the\n\t// \"gen_ai.request.model\" semantic conventions. It represents the name of\n\t// the LLM a request is being made to.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'gpt-4'\n\tGenAiRequestModelKey = attribute.Key(\"gen_ai.request.model\")\n\n\t// GenAiRequestTemperatureKey is the attribute Key conforming to the\n\t// \"gen_ai.request.temperature\" semantic conventions. It represents the\n\t// temperature setting for the LLM request.\n\t//\n\t// Type: double\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 0.0\n\tGenAiRequestTemperatureKey = attribute.Key(\"gen_ai.request.temperature\")\n\n\t// GenAiRequestTopPKey is the attribute Key conforming to the\n\t// \"gen_ai.request.top_p\" semantic conventions. It represents the top_p\n\t// sampling setting for the LLM request.\n\t//\n\t// Type: double\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1.0\n\tGenAiRequestTopPKey = attribute.Key(\"gen_ai.request.top_p\")\n\n\t// GenAiResponseFinishReasonsKey is the attribute Key conforming to the\n\t// \"gen_ai.response.finish_reasons\" semantic conventions. It represents the\n\t// array of reasons the model stopped generating tokens, corresponding to\n\t// each generation received.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'stop'\n\tGenAiResponseFinishReasonsKey = attribute.Key(\"gen_ai.response.finish_reasons\")\n\n\t// GenAiResponseIDKey is the attribute Key conforming to the\n\t// \"gen_ai.response.id\" semantic conventions. It represents the unique\n\t// identifier for the completion.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'chatcmpl-123'\n\tGenAiResponseIDKey = attribute.Key(\"gen_ai.response.id\")\n\n\t// GenAiResponseModelKey is the attribute Key conforming to the\n\t// \"gen_ai.response.model\" semantic conventions. It represents the name of\n\t// the LLM a response was generated from.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'gpt-4-0613'\n\tGenAiResponseModelKey = attribute.Key(\"gen_ai.response.model\")\n\n\t// GenAiSystemKey is the attribute Key conforming to the \"gen_ai.system\"\n\t// semantic conventions. It represents the Generative AI product as\n\t// identified by the client instrumentation.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'openai'\n\t// Note: The actual GenAI product may differ from the one identified by the\n\t// client. For example, when using OpenAI client libraries to communicate\n\t// with Mistral, the `gen_ai.system` is set to `openai` based on the\n\t// instrumentation's best knowledge.\n\tGenAiSystemKey = attribute.Key(\"gen_ai.system\")\n\n\t// GenAiUsageCompletionTokensKey is the attribute Key conforming to the\n\t// \"gen_ai.usage.completion_tokens\" semantic conventions. It represents the\n\t// number of tokens used in the LLM response (completion).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 180\n\tGenAiUsageCompletionTokensKey = attribute.Key(\"gen_ai.usage.completion_tokens\")\n\n\t// GenAiUsagePromptTokensKey is the attribute Key conforming to the\n\t// \"gen_ai.usage.prompt_tokens\" semantic conventions. It represents the\n\t// number of tokens used in the LLM prompt.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 100\n\tGenAiUsagePromptTokensKey = attribute.Key(\"gen_ai.usage.prompt_tokens\")\n)\n\nvar (\n\t// OpenAI\n\tGenAiSystemOpenai = GenAiSystemKey.String(\"openai\")\n)\n\n// GenAiCompletion returns an attribute KeyValue conforming to the\n// \"gen_ai.completion\" semantic conventions. It represents the full response\n// received from the LLM.\nfunc GenAiCompletion(val string) attribute.KeyValue {\n\treturn GenAiCompletionKey.String(val)\n}\n\n// GenAiPrompt returns an attribute KeyValue conforming to the\n// \"gen_ai.prompt\" semantic conventions. It represents the full prompt sent to\n// an LLM.\nfunc GenAiPrompt(val string) attribute.KeyValue {\n\treturn GenAiPromptKey.String(val)\n}\n\n// GenAiRequestMaxTokens returns an attribute KeyValue conforming to the\n// \"gen_ai.request.max_tokens\" semantic conventions. It represents the maximum\n// number of tokens the LLM generates for a request.\nfunc GenAiRequestMaxTokens(val int) attribute.KeyValue {\n\treturn GenAiRequestMaxTokensKey.Int(val)\n}\n\n// GenAiRequestModel returns an attribute KeyValue conforming to the\n// \"gen_ai.request.model\" semantic conventions. It represents the name of the\n// LLM a request is being made to.\nfunc GenAiRequestModel(val string) attribute.KeyValue {\n\treturn GenAiRequestModelKey.String(val)\n}\n\n// GenAiRequestTemperature returns an attribute KeyValue conforming to the\n// \"gen_ai.request.temperature\" semantic conventions. It represents the\n// temperature setting for the LLM request.\nfunc GenAiRequestTemperature(val float64) attribute.KeyValue {\n\treturn GenAiRequestTemperatureKey.Float64(val)\n}\n\n// GenAiRequestTopP returns an attribute KeyValue conforming to the\n// \"gen_ai.request.top_p\" semantic conventions. It represents the top_p\n// sampling setting for the LLM request.\nfunc GenAiRequestTopP(val float64) attribute.KeyValue {\n\treturn GenAiRequestTopPKey.Float64(val)\n}\n\n// GenAiResponseFinishReasons returns an attribute KeyValue conforming to\n// the \"gen_ai.response.finish_reasons\" semantic conventions. It represents the\n// array of reasons the model stopped generating tokens, corresponding to each\n// generation received.\nfunc GenAiResponseFinishReasons(val ...string) attribute.KeyValue {\n\treturn GenAiResponseFinishReasonsKey.StringSlice(val)\n}\n\n// GenAiResponseID returns an attribute KeyValue conforming to the\n// \"gen_ai.response.id\" semantic conventions. It represents the unique\n// identifier for the completion.\nfunc GenAiResponseID(val string) attribute.KeyValue {\n\treturn GenAiResponseIDKey.String(val)\n}\n\n// GenAiResponseModel returns an attribute KeyValue conforming to the\n// \"gen_ai.response.model\" semantic conventions. It represents the name of the\n// LLM a response was generated from.\nfunc GenAiResponseModel(val string) attribute.KeyValue {\n\treturn GenAiResponseModelKey.String(val)\n}\n\n// GenAiUsageCompletionTokens returns an attribute KeyValue conforming to\n// the \"gen_ai.usage.completion_tokens\" semantic conventions. It represents the\n// number of tokens used in the LLM response (completion).\nfunc GenAiUsageCompletionTokens(val int) attribute.KeyValue {\n\treturn GenAiUsageCompletionTokensKey.Int(val)\n}\n\n// GenAiUsagePromptTokens returns an attribute KeyValue conforming to the\n// \"gen_ai.usage.prompt_tokens\" semantic conventions. It represents the number\n// of tokens used in the LLM prompt.\nfunc GenAiUsagePromptTokens(val int) attribute.KeyValue {\n\treturn GenAiUsagePromptTokensKey.Int(val)\n}\n\n// Attributes for GraphQL.\nconst (\n\t// GraphqlDocumentKey is the attribute Key conforming to the\n\t// \"graphql.document\" semantic conventions. It represents the GraphQL\n\t// document being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'query findBookByID { bookByID(id: ?) { name } }'\n\t// Note: The value may be sanitized to exclude sensitive information.\n\tGraphqlDocumentKey = attribute.Key(\"graphql.document\")\n\n\t// GraphqlOperationNameKey is the attribute Key conforming to the\n\t// \"graphql.operation.name\" semantic conventions. It represents the name of\n\t// the operation being executed.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'findBookByID'\n\tGraphqlOperationNameKey = attribute.Key(\"graphql.operation.name\")\n\n\t// GraphqlOperationTypeKey is the attribute Key conforming to the\n\t// \"graphql.operation.type\" semantic conventions. It represents the type of\n\t// the operation being executed.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'query', 'mutation', 'subscription'\n\tGraphqlOperationTypeKey = attribute.Key(\"graphql.operation.type\")\n)\n\nvar (\n\t// GraphQL query\n\tGraphqlOperationTypeQuery = GraphqlOperationTypeKey.String(\"query\")\n\t// GraphQL mutation\n\tGraphqlOperationTypeMutation = GraphqlOperationTypeKey.String(\"mutation\")\n\t// GraphQL subscription\n\tGraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String(\"subscription\")\n)\n\n// GraphqlDocument returns an attribute KeyValue conforming to the\n// \"graphql.document\" semantic conventions. It represents the GraphQL document\n// being executed.\nfunc GraphqlDocument(val string) attribute.KeyValue {\n\treturn GraphqlDocumentKey.String(val)\n}\n\n// GraphqlOperationName returns an attribute KeyValue conforming to the\n// \"graphql.operation.name\" semantic conventions. It represents the name of the\n// operation being executed.\nfunc GraphqlOperationName(val string) attribute.KeyValue {\n\treturn GraphqlOperationNameKey.String(val)\n}\n\n// Attributes for the Android platform on which the Android application is\n// running.\nconst (\n\t// HerokuAppIDKey is the attribute Key conforming to the \"heroku.app.id\"\n\t// semantic conventions. It represents the unique identifier for the\n\t// application\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2daa2797-e42b-4624-9322-ec3f968df4da'\n\tHerokuAppIDKey = attribute.Key(\"heroku.app.id\")\n\n\t// HerokuReleaseCommitKey is the attribute Key conforming to the\n\t// \"heroku.release.commit\" semantic conventions. It represents the commit\n\t// hash for the current release\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'e6134959463efd8966b20e75b913cafe3f5ec'\n\tHerokuReleaseCommitKey = attribute.Key(\"heroku.release.commit\")\n\n\t// HerokuReleaseCreationTimestampKey is the attribute Key conforming to the\n\t// \"heroku.release.creation_timestamp\" semantic conventions. It represents\n\t// the time and date the release was created\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2022-10-23T18:00:42Z'\n\tHerokuReleaseCreationTimestampKey = attribute.Key(\"heroku.release.creation_timestamp\")\n)\n\n// HerokuAppID returns an attribute KeyValue conforming to the\n// \"heroku.app.id\" semantic conventions. It represents the unique identifier\n// for the application\nfunc HerokuAppID(val string) attribute.KeyValue {\n\treturn HerokuAppIDKey.String(val)\n}\n\n// HerokuReleaseCommit returns an attribute KeyValue conforming to the\n// \"heroku.release.commit\" semantic conventions. It represents the commit hash\n// for the current release\nfunc HerokuReleaseCommit(val string) attribute.KeyValue {\n\treturn HerokuReleaseCommitKey.String(val)\n}\n\n// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming\n// to the \"heroku.release.creation_timestamp\" semantic conventions. It\n// represents the time and date the release was created\nfunc HerokuReleaseCreationTimestamp(val string) attribute.KeyValue {\n\treturn HerokuReleaseCreationTimestampKey.String(val)\n}\n\n// A host is defined as a computing instance. For example, physical servers,\n// virtual machines, switches or disk array.\nconst (\n\t// HostArchKey is the attribute Key conforming to the \"host.arch\" semantic\n\t// conventions. It represents the CPU architecture the host system is\n\t// running on.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tHostArchKey = attribute.Key(\"host.arch\")\n\n\t// HostCPUCacheL2SizeKey is the attribute Key conforming to the\n\t// \"host.cpu.cache.l2.size\" semantic conventions. It represents the amount\n\t// of level 2 memory cache available to the processor (in Bytes).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 12288000\n\tHostCPUCacheL2SizeKey = attribute.Key(\"host.cpu.cache.l2.size\")\n\n\t// HostCPUFamilyKey is the attribute Key conforming to the\n\t// \"host.cpu.family\" semantic conventions. It represents the family or\n\t// generation of the CPU.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '6', 'PA-RISC 1.1e'\n\tHostCPUFamilyKey = attribute.Key(\"host.cpu.family\")\n\n\t// HostCPUModelIDKey is the attribute Key conforming to the\n\t// \"host.cpu.model.id\" semantic conventions. It represents the model\n\t// identifier. It provides more granular information about the CPU,\n\t// distinguishing it from other CPUs within the same family.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '6', '9000/778/B180L'\n\tHostCPUModelIDKey = attribute.Key(\"host.cpu.model.id\")\n\n\t// HostCPUModelNameKey is the attribute Key conforming to the\n\t// \"host.cpu.model.name\" semantic conventions. It represents the model\n\t// designation of the processor.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz'\n\tHostCPUModelNameKey = attribute.Key(\"host.cpu.model.name\")\n\n\t// HostCPUSteppingKey is the attribute Key conforming to the\n\t// \"host.cpu.stepping\" semantic conventions. It represents the stepping or\n\t// core revisions.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1', 'r1p1'\n\tHostCPUSteppingKey = attribute.Key(\"host.cpu.stepping\")\n\n\t// HostCPUVendorIDKey is the attribute Key conforming to the\n\t// \"host.cpu.vendor.id\" semantic conventions. It represents the processor\n\t// manufacturer identifier. A maximum 12-character string.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'GenuineIntel'\n\t// Note: [CPUID](https://wiki.osdev.org/CPUID) command returns the vendor\n\t// ID string in EBX, EDX and ECX registers. Writing these to memory in this\n\t// order results in a 12-character string.\n\tHostCPUVendorIDKey = attribute.Key(\"host.cpu.vendor.id\")\n\n\t// HostIDKey is the attribute Key conforming to the \"host.id\" semantic\n\t// conventions. It represents the unique host ID. For Cloud, this must be\n\t// the instance_id assigned by the cloud provider. For non-containerized\n\t// systems, this should be the `machine-id`. See the table below for the\n\t// sources to use to determine the `machine-id` based on operating system.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'fdbf79e8af94cb7f9e8df36789187052'\n\tHostIDKey = attribute.Key(\"host.id\")\n\n\t// HostImageIDKey is the attribute Key conforming to the \"host.image.id\"\n\t// semantic conventions. It represents the vM image ID or host OS image ID.\n\t// For Cloud, this value is from the provider.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'ami-07b06b442921831e5'\n\tHostImageIDKey = attribute.Key(\"host.image.id\")\n\n\t// HostImageNameKey is the attribute Key conforming to the\n\t// \"host.image.name\" semantic conventions. It represents the name of the VM\n\t// image or OS install the host was instantiated from.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905'\n\tHostImageNameKey = attribute.Key(\"host.image.name\")\n\n\t// HostImageVersionKey is the attribute Key conforming to the\n\t// \"host.image.version\" semantic conventions. It represents the version\n\t// string of the VM image or host OS as defined in [Version\n\t// Attributes](/docs/resource/README.md#version-attributes).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '0.1'\n\tHostImageVersionKey = attribute.Key(\"host.image.version\")\n\n\t// HostIPKey is the attribute Key conforming to the \"host.ip\" semantic\n\t// conventions. It represents the available IP addresses of the host,\n\t// excluding loopback interfaces.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '192.168.1.140', 'fe80::abc2:4a28:737a:609e'\n\t// Note: IPv4 Addresses MUST be specified in dotted-quad notation. IPv6\n\t// addresses MUST be specified in the [RFC\n\t// 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format.\n\tHostIPKey = attribute.Key(\"host.ip\")\n\n\t// HostMacKey is the attribute Key conforming to the \"host.mac\" semantic\n\t// conventions. It represents the available MAC addresses of the host,\n\t// excluding loopback interfaces.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'AC-DE-48-23-45-67', 'AC-DE-48-23-45-67-01-9F'\n\t// Note: MAC Addresses MUST be represented in [IEEE RA hexadecimal\n\t// form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf):\n\t// as hyphen-separated octets in uppercase hexadecimal form from most to\n\t// least significant.\n\tHostMacKey = attribute.Key(\"host.mac\")\n\n\t// HostNameKey is the attribute Key conforming to the \"host.name\" semantic\n\t// conventions. It represents the name of the host. On Unix systems, it may\n\t// contain what the hostname command returns, or the fully qualified\n\t// hostname, or another name specified by the user.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry-test'\n\tHostNameKey = attribute.Key(\"host.name\")\n\n\t// HostTypeKey is the attribute Key conforming to the \"host.type\" semantic\n\t// conventions. It represents the type of host. For Cloud, this must be the\n\t// machine type.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'n1-standard-1'\n\tHostTypeKey = attribute.Key(\"host.type\")\n)\n\nvar (\n\t// AMD64\n\tHostArchAMD64 = HostArchKey.String(\"amd64\")\n\t// ARM32\n\tHostArchARM32 = HostArchKey.String(\"arm32\")\n\t// ARM64\n\tHostArchARM64 = HostArchKey.String(\"arm64\")\n\t// Itanium\n\tHostArchIA64 = HostArchKey.String(\"ia64\")\n\t// 32-bit PowerPC\n\tHostArchPPC32 = HostArchKey.String(\"ppc32\")\n\t// 64-bit PowerPC\n\tHostArchPPC64 = HostArchKey.String(\"ppc64\")\n\t// IBM z/Architecture\n\tHostArchS390x = HostArchKey.String(\"s390x\")\n\t// 32-bit x86\n\tHostArchX86 = HostArchKey.String(\"x86\")\n)\n\n// HostCPUCacheL2Size returns an attribute KeyValue conforming to the\n// \"host.cpu.cache.l2.size\" semantic conventions. It represents the amount of\n// level 2 memory cache available to the processor (in Bytes).\nfunc HostCPUCacheL2Size(val int) attribute.KeyValue {\n\treturn HostCPUCacheL2SizeKey.Int(val)\n}\n\n// HostCPUFamily returns an attribute KeyValue conforming to the\n// \"host.cpu.family\" semantic conventions. It represents the family or\n// generation of the CPU.\nfunc HostCPUFamily(val string) attribute.KeyValue {\n\treturn HostCPUFamilyKey.String(val)\n}\n\n// HostCPUModelID returns an attribute KeyValue conforming to the\n// \"host.cpu.model.id\" semantic conventions. It represents the model\n// identifier. It provides more granular information about the CPU,\n// distinguishing it from other CPUs within the same family.\nfunc HostCPUModelID(val string) attribute.KeyValue {\n\treturn HostCPUModelIDKey.String(val)\n}\n\n// HostCPUModelName returns an attribute KeyValue conforming to the\n// \"host.cpu.model.name\" semantic conventions. It represents the model\n// designation of the processor.\nfunc HostCPUModelName(val string) attribute.KeyValue {\n\treturn HostCPUModelNameKey.String(val)\n}\n\n// HostCPUStepping returns an attribute KeyValue conforming to the\n// \"host.cpu.stepping\" semantic conventions. It represents the stepping or core\n// revisions.\nfunc HostCPUStepping(val string) attribute.KeyValue {\n\treturn HostCPUSteppingKey.String(val)\n}\n\n// HostCPUVendorID returns an attribute KeyValue conforming to the\n// \"host.cpu.vendor.id\" semantic conventions. It represents the processor\n// manufacturer identifier. A maximum 12-character string.\nfunc HostCPUVendorID(val string) attribute.KeyValue {\n\treturn HostCPUVendorIDKey.String(val)\n}\n\n// HostID returns an attribute KeyValue conforming to the \"host.id\" semantic\n// conventions. It represents the unique host ID. For Cloud, this must be the\n// instance_id assigned by the cloud provider. For non-containerized systems,\n// this should be the `machine-id`. See the table below for the sources to use\n// to determine the `machine-id` based on operating system.\nfunc HostID(val string) attribute.KeyValue {\n\treturn HostIDKey.String(val)\n}\n\n// HostImageID returns an attribute KeyValue conforming to the\n// \"host.image.id\" semantic conventions. It represents the vM image ID or host\n// OS image ID. For Cloud, this value is from the provider.\nfunc HostImageID(val string) attribute.KeyValue {\n\treturn HostImageIDKey.String(val)\n}\n\n// HostImageName returns an attribute KeyValue conforming to the\n// \"host.image.name\" semantic conventions. It represents the name of the VM\n// image or OS install the host was instantiated from.\nfunc HostImageName(val string) attribute.KeyValue {\n\treturn HostImageNameKey.String(val)\n}\n\n// HostImageVersion returns an attribute KeyValue conforming to the\n// \"host.image.version\" semantic conventions. It represents the version string\n// of the VM image or host OS as defined in [Version\n// Attributes](/docs/resource/README.md#version-attributes).\nfunc HostImageVersion(val string) attribute.KeyValue {\n\treturn HostImageVersionKey.String(val)\n}\n\n// HostIP returns an attribute KeyValue conforming to the \"host.ip\" semantic\n// conventions. It represents the available IP addresses of the host, excluding\n// loopback interfaces.\nfunc HostIP(val ...string) attribute.KeyValue {\n\treturn HostIPKey.StringSlice(val)\n}\n\n// HostMac returns an attribute KeyValue conforming to the \"host.mac\"\n// semantic conventions. It represents the available MAC addresses of the host,\n// excluding loopback interfaces.\nfunc HostMac(val ...string) attribute.KeyValue {\n\treturn HostMacKey.StringSlice(val)\n}\n\n// HostName returns an attribute KeyValue conforming to the \"host.name\"\n// semantic conventions. It represents the name of the host. On Unix systems,\n// it may contain what the hostname command returns, or the fully qualified\n// hostname, or another name specified by the user.\nfunc HostName(val string) attribute.KeyValue {\n\treturn HostNameKey.String(val)\n}\n\n// HostType returns an attribute KeyValue conforming to the \"host.type\"\n// semantic conventions. It represents the type of host. For Cloud, this must\n// be the machine type.\nfunc HostType(val string) attribute.KeyValue {\n\treturn HostTypeKey.String(val)\n}\n\n// Semantic convention attributes in the HTTP namespace.\nconst (\n\t// HTTPConnectionStateKey is the attribute Key conforming to the\n\t// \"http.connection.state\" semantic conventions. It represents the state of\n\t// the HTTP connection in the HTTP connection pool.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'active', 'idle'\n\tHTTPConnectionStateKey = attribute.Key(\"http.connection.state\")\n\n\t// HTTPRequestBodySizeKey is the attribute Key conforming to the\n\t// \"http.request.body.size\" semantic conventions. It represents the size of\n\t// the request payload body in bytes. This is the number of bytes\n\t// transferred excluding headers and is often, but not always, present as\n\t// the\n\t// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n\t// header. For requests using transport encoding, this should be the\n\t// compressed size.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 3495\n\tHTTPRequestBodySizeKey = attribute.Key(\"http.request.body.size\")\n\n\t// HTTPRequestMethodKey is the attribute Key conforming to the\n\t// \"http.request.method\" semantic conventions. It represents the hTTP\n\t// request method.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'GET', 'POST', 'HEAD'\n\t// Note: HTTP request method value SHOULD be \"known\" to the\n\t// instrumentation.\n\t// By default, this convention defines \"known\" methods as the ones listed\n\t// in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\n\t// and the PATCH method defined in\n\t// [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\t//\n\t// If the HTTP request method is not known to instrumentation, it MUST set\n\t// the `http.request.method` attribute to `_OTHER`.\n\t//\n\t// If the HTTP instrumentation could end up converting valid HTTP request\n\t// methods to `_OTHER`, then it MUST provide a way to override\n\t// the list of known HTTP methods. If this override is done via environment\n\t// variable, then the environment variable MUST be named\n\t// OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated\n\t// list of case-sensitive known HTTP methods\n\t// (this list MUST be a full override of the default known method, it is\n\t// not a list of known methods in addition to the defaults).\n\t//\n\t// HTTP method names are case-sensitive and `http.request.method` attribute\n\t// value MUST match a known HTTP method name exactly.\n\t// Instrumentations for specific web frameworks that consider HTTP methods\n\t// to be case insensitive, SHOULD populate a canonical equivalent.\n\t// Tracing instrumentations that do so, MUST also set\n\t// `http.request.method_original` to the original value.\n\tHTTPRequestMethodKey = attribute.Key(\"http.request.method\")\n\n\t// HTTPRequestMethodOriginalKey is the attribute Key conforming to the\n\t// \"http.request.method_original\" semantic conventions. It represents the\n\t// original HTTP method sent by the client in the request line.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'GeT', 'ACL', 'foo'\n\tHTTPRequestMethodOriginalKey = attribute.Key(\"http.request.method_original\")\n\n\t// HTTPRequestResendCountKey is the attribute Key conforming to the\n\t// \"http.request.resend_count\" semantic conventions. It represents the\n\t// ordinal number of request resending attempt (for any reason, including\n\t// redirects).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 3\n\t// Note: The resend count SHOULD be updated each time an HTTP request gets\n\t// resent by the client, regardless of what was the cause of the resending\n\t// (e.g. redirection, authorization failure, 503 Server Unavailable,\n\t// network issues, or any other).\n\tHTTPRequestResendCountKey = attribute.Key(\"http.request.resend_count\")\n\n\t// HTTPRequestSizeKey is the attribute Key conforming to the\n\t// \"http.request.size\" semantic conventions. It represents the total size\n\t// of the request in bytes. This should be the total number of bytes sent\n\t// over the wire, including the request line (HTTP/1.1), framing (HTTP/2\n\t// and HTTP/3), headers, and request body if any.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1437\n\tHTTPRequestSizeKey = attribute.Key(\"http.request.size\")\n\n\t// HTTPResponseBodySizeKey is the attribute Key conforming to the\n\t// \"http.response.body.size\" semantic conventions. It represents the size\n\t// of the response payload body in bytes. This is the number of bytes\n\t// transferred excluding headers and is often, but not always, present as\n\t// the\n\t// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n\t// header. For requests using transport encoding, this should be the\n\t// compressed size.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 3495\n\tHTTPResponseBodySizeKey = attribute.Key(\"http.response.body.size\")\n\n\t// HTTPResponseSizeKey is the attribute Key conforming to the\n\t// \"http.response.size\" semantic conventions. It represents the total size\n\t// of the response in bytes. This should be the total number of bytes sent\n\t// over the wire, including the status line (HTTP/1.1), framing (HTTP/2 and\n\t// HTTP/3), headers, and response body and trailers if any.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1437\n\tHTTPResponseSizeKey = attribute.Key(\"http.response.size\")\n\n\t// HTTPResponseStatusCodeKey is the attribute Key conforming to the\n\t// \"http.response.status_code\" semantic conventions. It represents the\n\t// [HTTP response status\n\t// code](https://tools.ietf.org/html/rfc7231#section-6).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 200\n\tHTTPResponseStatusCodeKey = attribute.Key(\"http.response.status_code\")\n\n\t// HTTPRouteKey is the attribute Key conforming to the \"http.route\"\n\t// semantic conventions. It represents the matched route, that is, the path\n\t// template in the format used by the respective server framework.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '/users/:userID?', '{controller}/{action}/{id?}'\n\t// Note: MUST NOT be populated when this is not supported by the HTTP\n\t// server framework as the route attribute should have low-cardinality and\n\t// the URI path can NOT substitute it.\n\t// SHOULD include the [application\n\t// root](/docs/http/http-spans.md#http-server-definitions) if there is one.\n\tHTTPRouteKey = attribute.Key(\"http.route\")\n)\n\nvar (\n\t// active state\n\tHTTPConnectionStateActive = HTTPConnectionStateKey.String(\"active\")\n\t// idle state\n\tHTTPConnectionStateIdle = HTTPConnectionStateKey.String(\"idle\")\n)\n\nvar (\n\t// CONNECT method\n\tHTTPRequestMethodConnect = HTTPRequestMethodKey.String(\"CONNECT\")\n\t// DELETE method\n\tHTTPRequestMethodDelete = HTTPRequestMethodKey.String(\"DELETE\")\n\t// GET method\n\tHTTPRequestMethodGet = HTTPRequestMethodKey.String(\"GET\")\n\t// HEAD method\n\tHTTPRequestMethodHead = HTTPRequestMethodKey.String(\"HEAD\")\n\t// OPTIONS method\n\tHTTPRequestMethodOptions = HTTPRequestMethodKey.String(\"OPTIONS\")\n\t// PATCH method\n\tHTTPRequestMethodPatch = HTTPRequestMethodKey.String(\"PATCH\")\n\t// POST method\n\tHTTPRequestMethodPost = HTTPRequestMethodKey.String(\"POST\")\n\t// PUT method\n\tHTTPRequestMethodPut = HTTPRequestMethodKey.String(\"PUT\")\n\t// TRACE method\n\tHTTPRequestMethodTrace = HTTPRequestMethodKey.String(\"TRACE\")\n\t// Any HTTP method that the instrumentation has no prior knowledge of\n\tHTTPRequestMethodOther = HTTPRequestMethodKey.String(\"_OTHER\")\n)\n\n// HTTPRequestBodySize returns an attribute KeyValue conforming to the\n// \"http.request.body.size\" semantic conventions. It represents the size of the\n// request payload body in bytes. This is the number of bytes transferred\n// excluding headers and is often, but not always, present as the\n// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n// header. For requests using transport encoding, this should be the compressed\n// size.\nfunc HTTPRequestBodySize(val int) attribute.KeyValue {\n\treturn HTTPRequestBodySizeKey.Int(val)\n}\n\n// HTTPRequestMethodOriginal returns an attribute KeyValue conforming to the\n// \"http.request.method_original\" semantic conventions. It represents the\n// original HTTP method sent by the client in the request line.\nfunc HTTPRequestMethodOriginal(val string) attribute.KeyValue {\n\treturn HTTPRequestMethodOriginalKey.String(val)\n}\n\n// HTTPRequestResendCount returns an attribute KeyValue conforming to the\n// \"http.request.resend_count\" semantic conventions. It represents the ordinal\n// number of request resending attempt (for any reason, including redirects).\nfunc HTTPRequestResendCount(val int) attribute.KeyValue {\n\treturn HTTPRequestResendCountKey.Int(val)\n}\n\n// HTTPRequestSize returns an attribute KeyValue conforming to the\n// \"http.request.size\" semantic conventions. It represents the total size of\n// the request in bytes. This should be the total number of bytes sent over the\n// wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3),\n// headers, and request body if any.\nfunc HTTPRequestSize(val int) attribute.KeyValue {\n\treturn HTTPRequestSizeKey.Int(val)\n}\n\n// HTTPResponseBodySize returns an attribute KeyValue conforming to the\n// \"http.response.body.size\" semantic conventions. It represents the size of\n// the response payload body in bytes. This is the number of bytes transferred\n// excluding headers and is often, but not always, present as the\n// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length)\n// header. For requests using transport encoding, this should be the compressed\n// size.\nfunc HTTPResponseBodySize(val int) attribute.KeyValue {\n\treturn HTTPResponseBodySizeKey.Int(val)\n}\n\n// HTTPResponseSize returns an attribute KeyValue conforming to the\n// \"http.response.size\" semantic conventions. It represents the total size of\n// the response in bytes. This should be the total number of bytes sent over\n// the wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3),\n// headers, and response body and trailers if any.\nfunc HTTPResponseSize(val int) attribute.KeyValue {\n\treturn HTTPResponseSizeKey.Int(val)\n}\n\n// HTTPResponseStatusCode returns an attribute KeyValue conforming to the\n// \"http.response.status_code\" semantic conventions. It represents the [HTTP\n// response status code](https://tools.ietf.org/html/rfc7231#section-6).\nfunc HTTPResponseStatusCode(val int) attribute.KeyValue {\n\treturn HTTPResponseStatusCodeKey.Int(val)\n}\n\n// HTTPRoute returns an attribute KeyValue conforming to the \"http.route\"\n// semantic conventions. It represents the matched route, that is, the path\n// template in the format used by the respective server framework.\nfunc HTTPRoute(val string) attribute.KeyValue {\n\treturn HTTPRouteKey.String(val)\n}\n\n// Java Virtual machine related attributes.\nconst (\n\t// JvmBufferPoolNameKey is the attribute Key conforming to the\n\t// \"jvm.buffer.pool.name\" semantic conventions. It represents the name of\n\t// the buffer pool.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'mapped', 'direct'\n\t// Note: Pool names are generally obtained via\n\t// [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).\n\tJvmBufferPoolNameKey = attribute.Key(\"jvm.buffer.pool.name\")\n\n\t// JvmGcActionKey is the attribute Key conforming to the \"jvm.gc.action\"\n\t// semantic conventions. It represents the name of the garbage collector\n\t// action.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'end of minor GC', 'end of major GC'\n\t// Note: Garbage collector action is generally obtained via\n\t// [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()).\n\tJvmGcActionKey = attribute.Key(\"jvm.gc.action\")\n\n\t// JvmGcNameKey is the attribute Key conforming to the \"jvm.gc.name\"\n\t// semantic conventions. It represents the name of the garbage collector.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'G1 Young Generation', 'G1 Old Generation'\n\t// Note: Garbage collector name is generally obtained via\n\t// [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()).\n\tJvmGcNameKey = attribute.Key(\"jvm.gc.name\")\n\n\t// JvmMemoryPoolNameKey is the attribute Key conforming to the\n\t// \"jvm.memory.pool.name\" semantic conventions. It represents the name of\n\t// the memory pool.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'G1 Old Gen', 'G1 Eden space', 'G1 Survivor Space'\n\t// Note: Pool names are generally obtained via\n\t// [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n\tJvmMemoryPoolNameKey = attribute.Key(\"jvm.memory.pool.name\")\n\n\t// JvmMemoryTypeKey is the attribute Key conforming to the\n\t// \"jvm.memory.type\" semantic conventions. It represents the type of\n\t// memory.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'heap', 'non_heap'\n\tJvmMemoryTypeKey = attribute.Key(\"jvm.memory.type\")\n\n\t// JvmThreadDaemonKey is the attribute Key conforming to the\n\t// \"jvm.thread.daemon\" semantic conventions. It represents the whether the\n\t// thread is daemon or not.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tJvmThreadDaemonKey = attribute.Key(\"jvm.thread.daemon\")\n\n\t// JvmThreadStateKey is the attribute Key conforming to the\n\t// \"jvm.thread.state\" semantic conventions. It represents the state of the\n\t// thread.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'runnable', 'blocked'\n\tJvmThreadStateKey = attribute.Key(\"jvm.thread.state\")\n)\n\nvar (\n\t// Heap memory\n\tJvmMemoryTypeHeap = JvmMemoryTypeKey.String(\"heap\")\n\t// Non-heap memory\n\tJvmMemoryTypeNonHeap = JvmMemoryTypeKey.String(\"non_heap\")\n)\n\nvar (\n\t// A thread that has not yet started is in this state\n\tJvmThreadStateNew = JvmThreadStateKey.String(\"new\")\n\t// A thread executing in the Java virtual machine is in this state\n\tJvmThreadStateRunnable = JvmThreadStateKey.String(\"runnable\")\n\t// A thread that is blocked waiting for a monitor lock is in this state\n\tJvmThreadStateBlocked = JvmThreadStateKey.String(\"blocked\")\n\t// A thread that is waiting indefinitely for another thread to perform a particular action is in this state\n\tJvmThreadStateWaiting = JvmThreadStateKey.String(\"waiting\")\n\t// A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state\n\tJvmThreadStateTimedWaiting = JvmThreadStateKey.String(\"timed_waiting\")\n\t// A thread that has exited is in this state\n\tJvmThreadStateTerminated = JvmThreadStateKey.String(\"terminated\")\n)\n\n// JvmBufferPoolName returns an attribute KeyValue conforming to the\n// \"jvm.buffer.pool.name\" semantic conventions. It represents the name of the\n// buffer pool.\nfunc JvmBufferPoolName(val string) attribute.KeyValue {\n\treturn JvmBufferPoolNameKey.String(val)\n}\n\n// JvmGcAction returns an attribute KeyValue conforming to the\n// \"jvm.gc.action\" semantic conventions. It represents the name of the garbage\n// collector action.\nfunc JvmGcAction(val string) attribute.KeyValue {\n\treturn JvmGcActionKey.String(val)\n}\n\n// JvmGcName returns an attribute KeyValue conforming to the \"jvm.gc.name\"\n// semantic conventions. It represents the name of the garbage collector.\nfunc JvmGcName(val string) attribute.KeyValue {\n\treturn JvmGcNameKey.String(val)\n}\n\n// JvmMemoryPoolName returns an attribute KeyValue conforming to the\n// \"jvm.memory.pool.name\" semantic conventions. It represents the name of the\n// memory pool.\nfunc JvmMemoryPoolName(val string) attribute.KeyValue {\n\treturn JvmMemoryPoolNameKey.String(val)\n}\n\n// JvmThreadDaemon returns an attribute KeyValue conforming to the\n// \"jvm.thread.daemon\" semantic conventions. It represents the whether the\n// thread is daemon or not.\nfunc JvmThreadDaemon(val bool) attribute.KeyValue {\n\treturn JvmThreadDaemonKey.Bool(val)\n}\n\n// Kubernetes resource attributes.\nconst (\n\t// K8SClusterNameKey is the attribute Key conforming to the\n\t// \"k8s.cluster.name\" semantic conventions. It represents the name of the\n\t// cluster.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry-cluster'\n\tK8SClusterNameKey = attribute.Key(\"k8s.cluster.name\")\n\n\t// K8SClusterUIDKey is the attribute Key conforming to the\n\t// \"k8s.cluster.uid\" semantic conventions. It represents a pseudo-ID for\n\t// the cluster, set to the UID of the `kube-system` namespace.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '218fc5a9-a5f1-4b54-aa05-46717d0ab26d'\n\t// Note: K8S doesn't have support for obtaining a cluster ID. If this is\n\t// ever\n\t// added, we will recommend collecting the `k8s.cluster.uid` through the\n\t// official APIs. In the meantime, we are able to use the `uid` of the\n\t// `kube-system` namespace as a proxy for cluster ID. Read on for the\n\t// rationale.\n\t//\n\t// Every object created in a K8S cluster is assigned a distinct UID. The\n\t// `kube-system` namespace is used by Kubernetes itself and will exist\n\t// for the lifetime of the cluster. Using the `uid` of the `kube-system`\n\t// namespace is a reasonable proxy for the K8S ClusterID as it will only\n\t// change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are\n\t// UUIDs as standardized by\n\t// [ISO/IEC 9834-8 and ITU-T\n\t// X.667](https://www.itu.int/ITU-T/studygroups/com17/oid.html).\n\t// Which states:\n\t//\n\t// > If generated according to one of the mechanisms defined in Rec.\n\t//   ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be\n\t//   different from all other UUIDs generated before 3603 A.D., or is\n\t//   extremely likely to be different (depending on the mechanism chosen).\n\t//\n\t// Therefore, UIDs between clusters should be extremely unlikely to\n\t// conflict.\n\tK8SClusterUIDKey = attribute.Key(\"k8s.cluster.uid\")\n\n\t// K8SContainerNameKey is the attribute Key conforming to the\n\t// \"k8s.container.name\" semantic conventions. It represents the name of the\n\t// Container from Pod specification, must be unique within a Pod. Container\n\t// runtime usually uses different globally unique name (`container.name`).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'redis'\n\tK8SContainerNameKey = attribute.Key(\"k8s.container.name\")\n\n\t// K8SContainerRestartCountKey is the attribute Key conforming to the\n\t// \"k8s.container.restart_count\" semantic conventions. It represents the\n\t// number of times the container was restarted. This attribute can be used\n\t// to identify a particular container (running or stopped) within a\n\t// container spec.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tK8SContainerRestartCountKey = attribute.Key(\"k8s.container.restart_count\")\n\n\t// K8SContainerStatusLastTerminatedReasonKey is the attribute Key\n\t// conforming to the \"k8s.container.status.last_terminated_reason\" semantic\n\t// conventions. It represents the last terminated reason of the Container.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Evicted', 'Error'\n\tK8SContainerStatusLastTerminatedReasonKey = attribute.Key(\"k8s.container.status.last_terminated_reason\")\n\n\t// K8SCronJobNameKey is the attribute Key conforming to the\n\t// \"k8s.cronjob.name\" semantic conventions. It represents the name of the\n\t// CronJob.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry'\n\tK8SCronJobNameKey = attribute.Key(\"k8s.cronjob.name\")\n\n\t// K8SCronJobUIDKey is the attribute Key conforming to the\n\t// \"k8s.cronjob.uid\" semantic conventions. It represents the UID of the\n\t// CronJob.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SCronJobUIDKey = attribute.Key(\"k8s.cronjob.uid\")\n\n\t// K8SDaemonSetNameKey is the attribute Key conforming to the\n\t// \"k8s.daemonset.name\" semantic conventions. It represents the name of the\n\t// DaemonSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry'\n\tK8SDaemonSetNameKey = attribute.Key(\"k8s.daemonset.name\")\n\n\t// K8SDaemonSetUIDKey is the attribute Key conforming to the\n\t// \"k8s.daemonset.uid\" semantic conventions. It represents the UID of the\n\t// DaemonSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SDaemonSetUIDKey = attribute.Key(\"k8s.daemonset.uid\")\n\n\t// K8SDeploymentNameKey is the attribute Key conforming to the\n\t// \"k8s.deployment.name\" semantic conventions. It represents the name of\n\t// the Deployment.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry'\n\tK8SDeploymentNameKey = attribute.Key(\"k8s.deployment.name\")\n\n\t// K8SDeploymentUIDKey is the attribute Key conforming to the\n\t// \"k8s.deployment.uid\" semantic conventions. It represents the UID of the\n\t// Deployment.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SDeploymentUIDKey = attribute.Key(\"k8s.deployment.uid\")\n\n\t// K8SJobNameKey is the attribute Key conforming to the \"k8s.job.name\"\n\t// semantic conventions. It represents the name of the Job.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry'\n\tK8SJobNameKey = attribute.Key(\"k8s.job.name\")\n\n\t// K8SJobUIDKey is the attribute Key conforming to the \"k8s.job.uid\"\n\t// semantic conventions. It represents the UID of the Job.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SJobUIDKey = attribute.Key(\"k8s.job.uid\")\n\n\t// K8SNamespaceNameKey is the attribute Key conforming to the\n\t// \"k8s.namespace.name\" semantic conventions. It represents the name of the\n\t// namespace that the pod is running in.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'default'\n\tK8SNamespaceNameKey = attribute.Key(\"k8s.namespace.name\")\n\n\t// K8SNodeNameKey is the attribute Key conforming to the \"k8s.node.name\"\n\t// semantic conventions. It represents the name of the Node.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'node-1'\n\tK8SNodeNameKey = attribute.Key(\"k8s.node.name\")\n\n\t// K8SNodeUIDKey is the attribute Key conforming to the \"k8s.node.uid\"\n\t// semantic conventions. It represents the UID of the Node.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2'\n\tK8SNodeUIDKey = attribute.Key(\"k8s.node.uid\")\n\n\t// K8SPodNameKey is the attribute Key conforming to the \"k8s.pod.name\"\n\t// semantic conventions. It represents the name of the Pod.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry-pod-autoconf'\n\tK8SPodNameKey = attribute.Key(\"k8s.pod.name\")\n\n\t// K8SPodUIDKey is the attribute Key conforming to the \"k8s.pod.uid\"\n\t// semantic conventions. It represents the UID of the Pod.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SPodUIDKey = attribute.Key(\"k8s.pod.uid\")\n\n\t// K8SReplicaSetNameKey is the attribute Key conforming to the\n\t// \"k8s.replicaset.name\" semantic conventions. It represents the name of\n\t// the ReplicaSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry'\n\tK8SReplicaSetNameKey = attribute.Key(\"k8s.replicaset.name\")\n\n\t// K8SReplicaSetUIDKey is the attribute Key conforming to the\n\t// \"k8s.replicaset.uid\" semantic conventions. It represents the UID of the\n\t// ReplicaSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SReplicaSetUIDKey = attribute.Key(\"k8s.replicaset.uid\")\n\n\t// K8SStatefulSetNameKey is the attribute Key conforming to the\n\t// \"k8s.statefulset.name\" semantic conventions. It represents the name of\n\t// the StatefulSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry'\n\tK8SStatefulSetNameKey = attribute.Key(\"k8s.statefulset.name\")\n\n\t// K8SStatefulSetUIDKey is the attribute Key conforming to the\n\t// \"k8s.statefulset.uid\" semantic conventions. It represents the UID of the\n\t// StatefulSet.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff'\n\tK8SStatefulSetUIDKey = attribute.Key(\"k8s.statefulset.uid\")\n)\n\n// K8SClusterName returns an attribute KeyValue conforming to the\n// \"k8s.cluster.name\" semantic conventions. It represents the name of the\n// cluster.\nfunc K8SClusterName(val string) attribute.KeyValue {\n\treturn K8SClusterNameKey.String(val)\n}\n\n// K8SClusterUID returns an attribute KeyValue conforming to the\n// \"k8s.cluster.uid\" semantic conventions. It represents a pseudo-ID for the\n// cluster, set to the UID of the `kube-system` namespace.\nfunc K8SClusterUID(val string) attribute.KeyValue {\n\treturn K8SClusterUIDKey.String(val)\n}\n\n// K8SContainerName returns an attribute KeyValue conforming to the\n// \"k8s.container.name\" semantic conventions. It represents the name of the\n// Container from Pod specification, must be unique within a Pod. Container\n// runtime usually uses different globally unique name (`container.name`).\nfunc K8SContainerName(val string) attribute.KeyValue {\n\treturn K8SContainerNameKey.String(val)\n}\n\n// K8SContainerRestartCount returns an attribute KeyValue conforming to the\n// \"k8s.container.restart_count\" semantic conventions. It represents the number\n// of times the container was restarted. This attribute can be used to identify\n// a particular container (running or stopped) within a container spec.\nfunc K8SContainerRestartCount(val int) attribute.KeyValue {\n\treturn K8SContainerRestartCountKey.Int(val)\n}\n\n// K8SContainerStatusLastTerminatedReason returns an attribute KeyValue\n// conforming to the \"k8s.container.status.last_terminated_reason\" semantic\n// conventions. It represents the last terminated reason of the Container.\nfunc K8SContainerStatusLastTerminatedReason(val string) attribute.KeyValue {\n\treturn K8SContainerStatusLastTerminatedReasonKey.String(val)\n}\n\n// K8SCronJobName returns an attribute KeyValue conforming to the\n// \"k8s.cronjob.name\" semantic conventions. It represents the name of the\n// CronJob.\nfunc K8SCronJobName(val string) attribute.KeyValue {\n\treturn K8SCronJobNameKey.String(val)\n}\n\n// K8SCronJobUID returns an attribute KeyValue conforming to the\n// \"k8s.cronjob.uid\" semantic conventions. It represents the UID of the\n// CronJob.\nfunc K8SCronJobUID(val string) attribute.KeyValue {\n\treturn K8SCronJobUIDKey.String(val)\n}\n\n// K8SDaemonSetName returns an attribute KeyValue conforming to the\n// \"k8s.daemonset.name\" semantic conventions. It represents the name of the\n// DaemonSet.\nfunc K8SDaemonSetName(val string) attribute.KeyValue {\n\treturn K8SDaemonSetNameKey.String(val)\n}\n\n// K8SDaemonSetUID returns an attribute KeyValue conforming to the\n// \"k8s.daemonset.uid\" semantic conventions. It represents the UID of the\n// DaemonSet.\nfunc K8SDaemonSetUID(val string) attribute.KeyValue {\n\treturn K8SDaemonSetUIDKey.String(val)\n}\n\n// K8SDeploymentName returns an attribute KeyValue conforming to the\n// \"k8s.deployment.name\" semantic conventions. It represents the name of the\n// Deployment.\nfunc K8SDeploymentName(val string) attribute.KeyValue {\n\treturn K8SDeploymentNameKey.String(val)\n}\n\n// K8SDeploymentUID returns an attribute KeyValue conforming to the\n// \"k8s.deployment.uid\" semantic conventions. It represents the UID of the\n// Deployment.\nfunc K8SDeploymentUID(val string) attribute.KeyValue {\n\treturn K8SDeploymentUIDKey.String(val)\n}\n\n// K8SJobName returns an attribute KeyValue conforming to the \"k8s.job.name\"\n// semantic conventions. It represents the name of the Job.\nfunc K8SJobName(val string) attribute.KeyValue {\n\treturn K8SJobNameKey.String(val)\n}\n\n// K8SJobUID returns an attribute KeyValue conforming to the \"k8s.job.uid\"\n// semantic conventions. It represents the UID of the Job.\nfunc K8SJobUID(val string) attribute.KeyValue {\n\treturn K8SJobUIDKey.String(val)\n}\n\n// K8SNamespaceName returns an attribute KeyValue conforming to the\n// \"k8s.namespace.name\" semantic conventions. It represents the name of the\n// namespace that the pod is running in.\nfunc K8SNamespaceName(val string) attribute.KeyValue {\n\treturn K8SNamespaceNameKey.String(val)\n}\n\n// K8SNodeName returns an attribute KeyValue conforming to the\n// \"k8s.node.name\" semantic conventions. It represents the name of the Node.\nfunc K8SNodeName(val string) attribute.KeyValue {\n\treturn K8SNodeNameKey.String(val)\n}\n\n// K8SNodeUID returns an attribute KeyValue conforming to the \"k8s.node.uid\"\n// semantic conventions. It represents the UID of the Node.\nfunc K8SNodeUID(val string) attribute.KeyValue {\n\treturn K8SNodeUIDKey.String(val)\n}\n\n// K8SPodName returns an attribute KeyValue conforming to the \"k8s.pod.name\"\n// semantic conventions. It represents the name of the Pod.\nfunc K8SPodName(val string) attribute.KeyValue {\n\treturn K8SPodNameKey.String(val)\n}\n\n// K8SPodUID returns an attribute KeyValue conforming to the \"k8s.pod.uid\"\n// semantic conventions. It represents the UID of the Pod.\nfunc K8SPodUID(val string) attribute.KeyValue {\n\treturn K8SPodUIDKey.String(val)\n}\n\n// K8SReplicaSetName returns an attribute KeyValue conforming to the\n// \"k8s.replicaset.name\" semantic conventions. It represents the name of the\n// ReplicaSet.\nfunc K8SReplicaSetName(val string) attribute.KeyValue {\n\treturn K8SReplicaSetNameKey.String(val)\n}\n\n// K8SReplicaSetUID returns an attribute KeyValue conforming to the\n// \"k8s.replicaset.uid\" semantic conventions. It represents the UID of the\n// ReplicaSet.\nfunc K8SReplicaSetUID(val string) attribute.KeyValue {\n\treturn K8SReplicaSetUIDKey.String(val)\n}\n\n// K8SStatefulSetName returns an attribute KeyValue conforming to the\n// \"k8s.statefulset.name\" semantic conventions. It represents the name of the\n// StatefulSet.\nfunc K8SStatefulSetName(val string) attribute.KeyValue {\n\treturn K8SStatefulSetNameKey.String(val)\n}\n\n// K8SStatefulSetUID returns an attribute KeyValue conforming to the\n// \"k8s.statefulset.uid\" semantic conventions. It represents the UID of the\n// StatefulSet.\nfunc K8SStatefulSetUID(val string) attribute.KeyValue {\n\treturn K8SStatefulSetUIDKey.String(val)\n}\n\n// Log attributes\nconst (\n\t// LogIostreamKey is the attribute Key conforming to the \"log.iostream\"\n\t// semantic conventions. It represents the stream associated with the log.\n\t// See below for a list of well-known values.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tLogIostreamKey = attribute.Key(\"log.iostream\")\n)\n\nvar (\n\t// Logs from stdout stream\n\tLogIostreamStdout = LogIostreamKey.String(\"stdout\")\n\t// Events from stderr stream\n\tLogIostreamStderr = LogIostreamKey.String(\"stderr\")\n)\n\n// Attributes for a file to which log was emitted.\nconst (\n\t// LogFileNameKey is the attribute Key conforming to the \"log.file.name\"\n\t// semantic conventions. It represents the basename of the file.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'audit.log'\n\tLogFileNameKey = attribute.Key(\"log.file.name\")\n\n\t// LogFileNameResolvedKey is the attribute Key conforming to the\n\t// \"log.file.name_resolved\" semantic conventions. It represents the\n\t// basename of the file, with symlinks resolved.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'uuid.log'\n\tLogFileNameResolvedKey = attribute.Key(\"log.file.name_resolved\")\n\n\t// LogFilePathKey is the attribute Key conforming to the \"log.file.path\"\n\t// semantic conventions. It represents the full path to the file.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/var/log/mysql/audit.log'\n\tLogFilePathKey = attribute.Key(\"log.file.path\")\n\n\t// LogFilePathResolvedKey is the attribute Key conforming to the\n\t// \"log.file.path_resolved\" semantic conventions. It represents the full\n\t// path to the file, with symlinks resolved.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/var/lib/docker/uuid.log'\n\tLogFilePathResolvedKey = attribute.Key(\"log.file.path_resolved\")\n)\n\n// LogFileName returns an attribute KeyValue conforming to the\n// \"log.file.name\" semantic conventions. It represents the basename of the\n// file.\nfunc LogFileName(val string) attribute.KeyValue {\n\treturn LogFileNameKey.String(val)\n}\n\n// LogFileNameResolved returns an attribute KeyValue conforming to the\n// \"log.file.name_resolved\" semantic conventions. It represents the basename of\n// the file, with symlinks resolved.\nfunc LogFileNameResolved(val string) attribute.KeyValue {\n\treturn LogFileNameResolvedKey.String(val)\n}\n\n// LogFilePath returns an attribute KeyValue conforming to the\n// \"log.file.path\" semantic conventions. It represents the full path to the\n// file.\nfunc LogFilePath(val string) attribute.KeyValue {\n\treturn LogFilePathKey.String(val)\n}\n\n// LogFilePathResolved returns an attribute KeyValue conforming to the\n// \"log.file.path_resolved\" semantic conventions. It represents the full path\n// to the file, with symlinks resolved.\nfunc LogFilePathResolved(val string) attribute.KeyValue {\n\treturn LogFilePathResolvedKey.String(val)\n}\n\n// The generic attributes that may be used in any Log Record.\nconst (\n\t// LogRecordUIDKey is the attribute Key conforming to the \"log.record.uid\"\n\t// semantic conventions. It represents a unique identifier for the Log\n\t// Record.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '01ARZ3NDEKTSV4RRFFQ69G5FAV'\n\t// Note: If an id is provided, other log records with the same id will be\n\t// considered duplicates and can be removed safely. This means, that two\n\t// distinguishable log records MUST have different values.\n\t// The id MAY be an [Universally Unique Lexicographically Sortable\n\t// Identifier (ULID)](https://github.com/ulid/spec), but other identifiers\n\t// (e.g. UUID) may be used as needed.\n\tLogRecordUIDKey = attribute.Key(\"log.record.uid\")\n)\n\n// LogRecordUID returns an attribute KeyValue conforming to the\n// \"log.record.uid\" semantic conventions. It represents a unique identifier for\n// the Log Record.\nfunc LogRecordUID(val string) attribute.KeyValue {\n\treturn LogRecordUIDKey.String(val)\n}\n\n// Attributes describing telemetry around messaging systems and messaging\n// activities.\nconst (\n\t// MessagingBatchMessageCountKey is the attribute Key conforming to the\n\t// \"messaging.batch.message_count\" semantic conventions. It represents the\n\t// number of messages sent, received, or processed in the scope of the\n\t// batching operation.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 0, 1, 2\n\t// Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on\n\t// spans that operate with a single message. When a messaging client\n\t// library supports both batch and single-message API for the same\n\t// operation, instrumentations SHOULD use `messaging.batch.message_count`\n\t// for batching APIs and SHOULD NOT use it for single-message APIs.\n\tMessagingBatchMessageCountKey = attribute.Key(\"messaging.batch.message_count\")\n\n\t// MessagingClientIDKey is the attribute Key conforming to the\n\t// \"messaging.client.id\" semantic conventions. It represents a unique\n\t// identifier for the client that consumes or produces a message.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'client-5', 'myhost@8742@s8083jm'\n\tMessagingClientIDKey = attribute.Key(\"messaging.client.id\")\n\n\t// MessagingDestinationAnonymousKey is the attribute Key conforming to the\n\t// \"messaging.destination.anonymous\" semantic conventions. It represents a\n\t// boolean that is true if the message destination is anonymous (could be\n\t// unnamed or have auto-generated name).\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tMessagingDestinationAnonymousKey = attribute.Key(\"messaging.destination.anonymous\")\n\n\t// MessagingDestinationNameKey is the attribute Key conforming to the\n\t// \"messaging.destination.name\" semantic conventions. It represents the\n\t// message destination name\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'MyQueue', 'MyTopic'\n\t// Note: Destination name SHOULD uniquely identify a specific queue, topic\n\t// or other entity within the broker. If\n\t// the broker doesn't have such notion, the destination name SHOULD\n\t// uniquely identify the broker.\n\tMessagingDestinationNameKey = attribute.Key(\"messaging.destination.name\")\n\n\t// MessagingDestinationPartitionIDKey is the attribute Key conforming to\n\t// the \"messaging.destination.partition.id\" semantic conventions. It\n\t// represents the identifier of the partition messages are sent to or\n\t// received from, unique within the `messaging.destination.name`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1'\n\tMessagingDestinationPartitionIDKey = attribute.Key(\"messaging.destination.partition.id\")\n\n\t// MessagingDestinationTemplateKey is the attribute Key conforming to the\n\t// \"messaging.destination.template\" semantic conventions. It represents the\n\t// low cardinality representation of the messaging destination name\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/customers/{customerID}'\n\t// Note: Destination names could be constructed from templates. An example\n\t// would be a destination name involving a user name or product id.\n\t// Although the destination name in this case is of high cardinality, the\n\t// underlying template is of low cardinality and can be effectively used\n\t// for grouping and aggregation.\n\tMessagingDestinationTemplateKey = attribute.Key(\"messaging.destination.template\")\n\n\t// MessagingDestinationTemporaryKey is the attribute Key conforming to the\n\t// \"messaging.destination.temporary\" semantic conventions. It represents a\n\t// boolean that is true if the message destination is temporary and might\n\t// not exist anymore after messages are processed.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tMessagingDestinationTemporaryKey = attribute.Key(\"messaging.destination.temporary\")\n\n\t// MessagingDestinationPublishAnonymousKey is the attribute Key conforming\n\t// to the \"messaging.destination_publish.anonymous\" semantic conventions.\n\t// It represents a boolean that is true if the publish message destination\n\t// is anonymous (could be unnamed or have auto-generated name).\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tMessagingDestinationPublishAnonymousKey = attribute.Key(\"messaging.destination_publish.anonymous\")\n\n\t// MessagingDestinationPublishNameKey is the attribute Key conforming to\n\t// the \"messaging.destination_publish.name\" semantic conventions. It\n\t// represents the name of the original destination the message was\n\t// published to\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'MyQueue', 'MyTopic'\n\t// Note: The name SHOULD uniquely identify a specific queue, topic, or\n\t// other entity within the broker. If\n\t// the broker doesn't have such notion, the original destination name\n\t// SHOULD uniquely identify the broker.\n\tMessagingDestinationPublishNameKey = attribute.Key(\"messaging.destination_publish.name\")\n\n\t// MessagingMessageBodySizeKey is the attribute Key conforming to the\n\t// \"messaging.message.body.size\" semantic conventions. It represents the\n\t// size of the message body in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1439\n\t// Note: This can refer to both the compressed or uncompressed body size.\n\t// If both sizes are known, the uncompressed\n\t// body size should be used.\n\tMessagingMessageBodySizeKey = attribute.Key(\"messaging.message.body.size\")\n\n\t// MessagingMessageConversationIDKey is the attribute Key conforming to the\n\t// \"messaging.message.conversation_id\" semantic conventions. It represents\n\t// the conversation ID identifying the conversation to which the message\n\t// belongs, represented as a string. Sometimes called \"Correlation ID\".\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'MyConversationID'\n\tMessagingMessageConversationIDKey = attribute.Key(\"messaging.message.conversation_id\")\n\n\t// MessagingMessageEnvelopeSizeKey is the attribute Key conforming to the\n\t// \"messaging.message.envelope.size\" semantic conventions. It represents\n\t// the size of the message body and metadata in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 2738\n\t// Note: This can refer to both the compressed or uncompressed size. If\n\t// both sizes are known, the uncompressed\n\t// size should be used.\n\tMessagingMessageEnvelopeSizeKey = attribute.Key(\"messaging.message.envelope.size\")\n\n\t// MessagingMessageIDKey is the attribute Key conforming to the\n\t// \"messaging.message.id\" semantic conventions. It represents a value used\n\t// by the messaging system as an identifier for the message, represented as\n\t// a string.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '452a7c7c7c7048c2f887f61572b18fc2'\n\tMessagingMessageIDKey = attribute.Key(\"messaging.message.id\")\n\n\t// MessagingOperationNameKey is the attribute Key conforming to the\n\t// \"messaging.operation.name\" semantic conventions. It represents the\n\t// system-specific name of the messaging operation.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'ack', 'nack', 'send'\n\tMessagingOperationNameKey = attribute.Key(\"messaging.operation.name\")\n\n\t// MessagingOperationTypeKey is the attribute Key conforming to the\n\t// \"messaging.operation.type\" semantic conventions. It represents a string\n\t// identifying the type of the messaging operation.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: If a custom value is used, it MUST be of low cardinality.\n\tMessagingOperationTypeKey = attribute.Key(\"messaging.operation.type\")\n\n\t// MessagingSystemKey is the attribute Key conforming to the\n\t// \"messaging.system\" semantic conventions. It represents the messaging\n\t// system as identified by the client instrumentation.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: The actual messaging system may differ from the one known by the\n\t// client. For example, when using Kafka client libraries to communicate\n\t// with Azure Event Hubs, the `messaging.system` is set to `kafka` based on\n\t// the instrumentation's best knowledge.\n\tMessagingSystemKey = attribute.Key(\"messaging.system\")\n)\n\nvar (\n\t// One or more messages are provided for publishing to an intermediary. If a single message is published, the context of the \"Publish\" span can be used as the creation context and no \"Create\" span needs to be created\n\tMessagingOperationTypePublish = MessagingOperationTypeKey.String(\"publish\")\n\t// A message is created. \"Create\" spans always refer to a single message and are used to provide a unique creation context for messages in batch publishing scenarios\n\tMessagingOperationTypeCreate = MessagingOperationTypeKey.String(\"create\")\n\t// One or more messages are requested by a consumer. This operation refers to pull-based scenarios, where consumers explicitly call methods of messaging SDKs to receive messages\n\tMessagingOperationTypeReceive = MessagingOperationTypeKey.String(\"receive\")\n\t// One or more messages are delivered to or processed by a consumer\n\tMessagingOperationTypeDeliver = MessagingOperationTypeKey.String(\"process\")\n\t// One or more messages are settled\n\tMessagingOperationTypeSettle = MessagingOperationTypeKey.String(\"settle\")\n)\n\nvar (\n\t// Apache ActiveMQ\n\tMessagingSystemActivemq = MessagingSystemKey.String(\"activemq\")\n\t// Amazon Simple Queue Service (SQS)\n\tMessagingSystemAWSSqs = MessagingSystemKey.String(\"aws_sqs\")\n\t// Azure Event Grid\n\tMessagingSystemEventgrid = MessagingSystemKey.String(\"eventgrid\")\n\t// Azure Event Hubs\n\tMessagingSystemEventhubs = MessagingSystemKey.String(\"eventhubs\")\n\t// Azure Service Bus\n\tMessagingSystemServicebus = MessagingSystemKey.String(\"servicebus\")\n\t// Google Cloud Pub/Sub\n\tMessagingSystemGCPPubsub = MessagingSystemKey.String(\"gcp_pubsub\")\n\t// Java Message Service\n\tMessagingSystemJms = MessagingSystemKey.String(\"jms\")\n\t// Apache Kafka\n\tMessagingSystemKafka = MessagingSystemKey.String(\"kafka\")\n\t// RabbitMQ\n\tMessagingSystemRabbitmq = MessagingSystemKey.String(\"rabbitmq\")\n\t// Apache RocketMQ\n\tMessagingSystemRocketmq = MessagingSystemKey.String(\"rocketmq\")\n)\n\n// MessagingBatchMessageCount returns an attribute KeyValue conforming to\n// the \"messaging.batch.message_count\" semantic conventions. It represents the\n// number of messages sent, received, or processed in the scope of the batching\n// operation.\nfunc MessagingBatchMessageCount(val int) attribute.KeyValue {\n\treturn MessagingBatchMessageCountKey.Int(val)\n}\n\n// MessagingClientID returns an attribute KeyValue conforming to the\n// \"messaging.client.id\" semantic conventions. It represents a unique\n// identifier for the client that consumes or produces a message.\nfunc MessagingClientID(val string) attribute.KeyValue {\n\treturn MessagingClientIDKey.String(val)\n}\n\n// MessagingDestinationAnonymous returns an attribute KeyValue conforming to\n// the \"messaging.destination.anonymous\" semantic conventions. It represents a\n// boolean that is true if the message destination is anonymous (could be\n// unnamed or have auto-generated name).\nfunc MessagingDestinationAnonymous(val bool) attribute.KeyValue {\n\treturn MessagingDestinationAnonymousKey.Bool(val)\n}\n\n// MessagingDestinationName returns an attribute KeyValue conforming to the\n// \"messaging.destination.name\" semantic conventions. It represents the message\n// destination name\nfunc MessagingDestinationName(val string) attribute.KeyValue {\n\treturn MessagingDestinationNameKey.String(val)\n}\n\n// MessagingDestinationPartitionID returns an attribute KeyValue conforming\n// to the \"messaging.destination.partition.id\" semantic conventions. It\n// represents the identifier of the partition messages are sent to or received\n// from, unique within the `messaging.destination.name`.\nfunc MessagingDestinationPartitionID(val string) attribute.KeyValue {\n\treturn MessagingDestinationPartitionIDKey.String(val)\n}\n\n// MessagingDestinationTemplate returns an attribute KeyValue conforming to\n// the \"messaging.destination.template\" semantic conventions. It represents the\n// low cardinality representation of the messaging destination name\nfunc MessagingDestinationTemplate(val string) attribute.KeyValue {\n\treturn MessagingDestinationTemplateKey.String(val)\n}\n\n// MessagingDestinationTemporary returns an attribute KeyValue conforming to\n// the \"messaging.destination.temporary\" semantic conventions. It represents a\n// boolean that is true if the message destination is temporary and might not\n// exist anymore after messages are processed.\nfunc MessagingDestinationTemporary(val bool) attribute.KeyValue {\n\treturn MessagingDestinationTemporaryKey.Bool(val)\n}\n\n// MessagingDestinationPublishAnonymous returns an attribute KeyValue\n// conforming to the \"messaging.destination_publish.anonymous\" semantic\n// conventions. It represents a boolean that is true if the publish message\n// destination is anonymous (could be unnamed or have auto-generated name).\nfunc MessagingDestinationPublishAnonymous(val bool) attribute.KeyValue {\n\treturn MessagingDestinationPublishAnonymousKey.Bool(val)\n}\n\n// MessagingDestinationPublishName returns an attribute KeyValue conforming\n// to the \"messaging.destination_publish.name\" semantic conventions. It\n// represents the name of the original destination the message was published to\nfunc MessagingDestinationPublishName(val string) attribute.KeyValue {\n\treturn MessagingDestinationPublishNameKey.String(val)\n}\n\n// MessagingMessageBodySize returns an attribute KeyValue conforming to the\n// \"messaging.message.body.size\" semantic conventions. It represents the size\n// of the message body in bytes.\nfunc MessagingMessageBodySize(val int) attribute.KeyValue {\n\treturn MessagingMessageBodySizeKey.Int(val)\n}\n\n// MessagingMessageConversationID returns an attribute KeyValue conforming\n// to the \"messaging.message.conversation_id\" semantic conventions. It\n// represents the conversation ID identifying the conversation to which the\n// message belongs, represented as a string. Sometimes called \"Correlation ID\".\nfunc MessagingMessageConversationID(val string) attribute.KeyValue {\n\treturn MessagingMessageConversationIDKey.String(val)\n}\n\n// MessagingMessageEnvelopeSize returns an attribute KeyValue conforming to\n// the \"messaging.message.envelope.size\" semantic conventions. It represents\n// the size of the message body and metadata in bytes.\nfunc MessagingMessageEnvelopeSize(val int) attribute.KeyValue {\n\treturn MessagingMessageEnvelopeSizeKey.Int(val)\n}\n\n// MessagingMessageID returns an attribute KeyValue conforming to the\n// \"messaging.message.id\" semantic conventions. It represents a value used by\n// the messaging system as an identifier for the message, represented as a\n// string.\nfunc MessagingMessageID(val string) attribute.KeyValue {\n\treturn MessagingMessageIDKey.String(val)\n}\n\n// MessagingOperationName returns an attribute KeyValue conforming to the\n// \"messaging.operation.name\" semantic conventions. It represents the\n// system-specific name of the messaging operation.\nfunc MessagingOperationName(val string) attribute.KeyValue {\n\treturn MessagingOperationNameKey.String(val)\n}\n\n// This group describes attributes specific to Apache Kafka.\nconst (\n\t// MessagingKafkaConsumerGroupKey is the attribute Key conforming to the\n\t// \"messaging.kafka.consumer.group\" semantic conventions. It represents the\n\t// name of the Kafka Consumer Group that is handling the message. Only\n\t// applies to consumers, not producers.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'my-group'\n\tMessagingKafkaConsumerGroupKey = attribute.Key(\"messaging.kafka.consumer.group\")\n\n\t// MessagingKafkaMessageKeyKey is the attribute Key conforming to the\n\t// \"messaging.kafka.message.key\" semantic conventions. It represents the\n\t// message keys in Kafka are used for grouping alike messages to ensure\n\t// they're processed on the same partition. They differ from\n\t// `messaging.message.id` in that they're not unique. If the key is `null`,\n\t// the attribute MUST NOT be set.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myKey'\n\t// Note: If the key type is not string, it's string representation has to\n\t// be supplied for the attribute. If the key has no unambiguous, canonical\n\t// string form, don't include its value.\n\tMessagingKafkaMessageKeyKey = attribute.Key(\"messaging.kafka.message.key\")\n\n\t// MessagingKafkaMessageOffsetKey is the attribute Key conforming to the\n\t// \"messaging.kafka.message.offset\" semantic conventions. It represents the\n\t// offset of a record in the corresponding Kafka partition.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 42\n\tMessagingKafkaMessageOffsetKey = attribute.Key(\"messaging.kafka.message.offset\")\n\n\t// MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the\n\t// \"messaging.kafka.message.tombstone\" semantic conventions. It represents\n\t// a boolean that is true if the message is a tombstone.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tMessagingKafkaMessageTombstoneKey = attribute.Key(\"messaging.kafka.message.tombstone\")\n)\n\n// MessagingKafkaConsumerGroup returns an attribute KeyValue conforming to\n// the \"messaging.kafka.consumer.group\" semantic conventions. It represents the\n// name of the Kafka Consumer Group that is handling the message. Only applies\n// to consumers, not producers.\nfunc MessagingKafkaConsumerGroup(val string) attribute.KeyValue {\n\treturn MessagingKafkaConsumerGroupKey.String(val)\n}\n\n// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the\n// \"messaging.kafka.message.key\" semantic conventions. It represents the\n// message keys in Kafka are used for grouping alike messages to ensure they're\n// processed on the same partition. They differ from `messaging.message.id` in\n// that they're not unique. If the key is `null`, the attribute MUST NOT be\n// set.\nfunc MessagingKafkaMessageKey(val string) attribute.KeyValue {\n\treturn MessagingKafkaMessageKeyKey.String(val)\n}\n\n// MessagingKafkaMessageOffset returns an attribute KeyValue conforming to\n// the \"messaging.kafka.message.offset\" semantic conventions. It represents the\n// offset of a record in the corresponding Kafka partition.\nfunc MessagingKafkaMessageOffset(val int) attribute.KeyValue {\n\treturn MessagingKafkaMessageOffsetKey.Int(val)\n}\n\n// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming\n// to the \"messaging.kafka.message.tombstone\" semantic conventions. It\n// represents a boolean that is true if the message is a tombstone.\nfunc MessagingKafkaMessageTombstone(val bool) attribute.KeyValue {\n\treturn MessagingKafkaMessageTombstoneKey.Bool(val)\n}\n\n// This group describes attributes specific to RabbitMQ.\nconst (\n\t// MessagingRabbitmqDestinationRoutingKeyKey is the attribute Key\n\t// conforming to the \"messaging.rabbitmq.destination.routing_key\" semantic\n\t// conventions. It represents the rabbitMQ message routing key.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myKey'\n\tMessagingRabbitmqDestinationRoutingKeyKey = attribute.Key(\"messaging.rabbitmq.destination.routing_key\")\n\n\t// MessagingRabbitmqMessageDeliveryTagKey is the attribute Key conforming\n\t// to the \"messaging.rabbitmq.message.delivery_tag\" semantic conventions.\n\t// It represents the rabbitMQ message delivery tag\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 123\n\tMessagingRabbitmqMessageDeliveryTagKey = attribute.Key(\"messaging.rabbitmq.message.delivery_tag\")\n)\n\n// MessagingRabbitmqDestinationRoutingKey returns an attribute KeyValue\n// conforming to the \"messaging.rabbitmq.destination.routing_key\" semantic\n// conventions. It represents the rabbitMQ message routing key.\nfunc MessagingRabbitmqDestinationRoutingKey(val string) attribute.KeyValue {\n\treturn MessagingRabbitmqDestinationRoutingKeyKey.String(val)\n}\n\n// MessagingRabbitmqMessageDeliveryTag returns an attribute KeyValue\n// conforming to the \"messaging.rabbitmq.message.delivery_tag\" semantic\n// conventions. It represents the rabbitMQ message delivery tag\nfunc MessagingRabbitmqMessageDeliveryTag(val int) attribute.KeyValue {\n\treturn MessagingRabbitmqMessageDeliveryTagKey.Int(val)\n}\n\n// This group describes attributes specific to RocketMQ.\nconst (\n\t// MessagingRocketmqClientGroupKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.client_group\" semantic conventions. It represents\n\t// the name of the RocketMQ producer/consumer group that is handling the\n\t// message. The client type is identified by the SpanKind.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myConsumerGroup'\n\tMessagingRocketmqClientGroupKey = attribute.Key(\"messaging.rocketmq.client_group\")\n\n\t// MessagingRocketmqConsumptionModelKey is the attribute Key conforming to\n\t// the \"messaging.rocketmq.consumption_model\" semantic conventions. It\n\t// represents the model of message consumption. This only applies to\n\t// consumer spans.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tMessagingRocketmqConsumptionModelKey = attribute.Key(\"messaging.rocketmq.consumption_model\")\n\n\t// MessagingRocketmqMessageDelayTimeLevelKey is the attribute Key\n\t// conforming to the \"messaging.rocketmq.message.delay_time_level\" semantic\n\t// conventions. It represents the delay time level for delay message, which\n\t// determines the message delay time.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 3\n\tMessagingRocketmqMessageDelayTimeLevelKey = attribute.Key(\"messaging.rocketmq.message.delay_time_level\")\n\n\t// MessagingRocketmqMessageDeliveryTimestampKey is the attribute Key\n\t// conforming to the \"messaging.rocketmq.message.delivery_timestamp\"\n\t// semantic conventions. It represents the timestamp in milliseconds that\n\t// the delay message is expected to be delivered to consumer.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1665987217045\n\tMessagingRocketmqMessageDeliveryTimestampKey = attribute.Key(\"messaging.rocketmq.message.delivery_timestamp\")\n\n\t// MessagingRocketmqMessageGroupKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.group\" semantic conventions. It represents\n\t// the it is essential for FIFO message. Messages that belong to the same\n\t// message group are always processed one by one within the same consumer\n\t// group.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myMessageGroup'\n\tMessagingRocketmqMessageGroupKey = attribute.Key(\"messaging.rocketmq.message.group\")\n\n\t// MessagingRocketmqMessageKeysKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.keys\" semantic conventions. It represents\n\t// the key(s) of message, another way to mark message besides message id.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'keyA', 'keyB'\n\tMessagingRocketmqMessageKeysKey = attribute.Key(\"messaging.rocketmq.message.keys\")\n\n\t// MessagingRocketmqMessageTagKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.tag\" semantic conventions. It represents the\n\t// secondary classifier of message besides topic.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'tagA'\n\tMessagingRocketmqMessageTagKey = attribute.Key(\"messaging.rocketmq.message.tag\")\n\n\t// MessagingRocketmqMessageTypeKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.message.type\" semantic conventions. It represents\n\t// the type of message.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tMessagingRocketmqMessageTypeKey = attribute.Key(\"messaging.rocketmq.message.type\")\n\n\t// MessagingRocketmqNamespaceKey is the attribute Key conforming to the\n\t// \"messaging.rocketmq.namespace\" semantic conventions. It represents the\n\t// namespace of RocketMQ resources, resources in different namespaces are\n\t// individual.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myNamespace'\n\tMessagingRocketmqNamespaceKey = attribute.Key(\"messaging.rocketmq.namespace\")\n)\n\nvar (\n\t// Clustering consumption model\n\tMessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String(\"clustering\")\n\t// Broadcasting consumption model\n\tMessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String(\"broadcasting\")\n)\n\nvar (\n\t// Normal message\n\tMessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String(\"normal\")\n\t// FIFO message\n\tMessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String(\"fifo\")\n\t// Delay message\n\tMessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String(\"delay\")\n\t// Transaction message\n\tMessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String(\"transaction\")\n)\n\n// MessagingRocketmqClientGroup returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.client_group\" semantic conventions. It represents\n// the name of the RocketMQ producer/consumer group that is handling the\n// message. The client type is identified by the SpanKind.\nfunc MessagingRocketmqClientGroup(val string) attribute.KeyValue {\n\treturn MessagingRocketmqClientGroupKey.String(val)\n}\n\n// MessagingRocketmqMessageDelayTimeLevel returns an attribute KeyValue\n// conforming to the \"messaging.rocketmq.message.delay_time_level\" semantic\n// conventions. It represents the delay time level for delay message, which\n// determines the message delay time.\nfunc MessagingRocketmqMessageDelayTimeLevel(val int) attribute.KeyValue {\n\treturn MessagingRocketmqMessageDelayTimeLevelKey.Int(val)\n}\n\n// MessagingRocketmqMessageDeliveryTimestamp returns an attribute KeyValue\n// conforming to the \"messaging.rocketmq.message.delivery_timestamp\" semantic\n// conventions. It represents the timestamp in milliseconds that the delay\n// message is expected to be delivered to consumer.\nfunc MessagingRocketmqMessageDeliveryTimestamp(val int) attribute.KeyValue {\n\treturn MessagingRocketmqMessageDeliveryTimestampKey.Int(val)\n}\n\n// MessagingRocketmqMessageGroup returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.message.group\" semantic conventions. It represents\n// the it is essential for FIFO message. Messages that belong to the same\n// message group are always processed one by one within the same consumer\n// group.\nfunc MessagingRocketmqMessageGroup(val string) attribute.KeyValue {\n\treturn MessagingRocketmqMessageGroupKey.String(val)\n}\n\n// MessagingRocketmqMessageKeys returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.message.keys\" semantic conventions. It represents\n// the key(s) of message, another way to mark message besides message id.\nfunc MessagingRocketmqMessageKeys(val ...string) attribute.KeyValue {\n\treturn MessagingRocketmqMessageKeysKey.StringSlice(val)\n}\n\n// MessagingRocketmqMessageTag returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.message.tag\" semantic conventions. It represents the\n// secondary classifier of message besides topic.\nfunc MessagingRocketmqMessageTag(val string) attribute.KeyValue {\n\treturn MessagingRocketmqMessageTagKey.String(val)\n}\n\n// MessagingRocketmqNamespace returns an attribute KeyValue conforming to\n// the \"messaging.rocketmq.namespace\" semantic conventions. It represents the\n// namespace of RocketMQ resources, resources in different namespaces are\n// individual.\nfunc MessagingRocketmqNamespace(val string) attribute.KeyValue {\n\treturn MessagingRocketmqNamespaceKey.String(val)\n}\n\n// This group describes attributes specific to GCP Pub/Sub.\nconst (\n\t// MessagingGCPPubsubMessageAckDeadlineKey is the attribute Key conforming\n\t// to the \"messaging.gcp_pubsub.message.ack_deadline\" semantic conventions.\n\t// It represents the ack deadline in seconds set for the modify ack\n\t// deadline request.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 10\n\tMessagingGCPPubsubMessageAckDeadlineKey = attribute.Key(\"messaging.gcp_pubsub.message.ack_deadline\")\n\n\t// MessagingGCPPubsubMessageAckIDKey is the attribute Key conforming to the\n\t// \"messaging.gcp_pubsub.message.ack_id\" semantic conventions. It\n\t// represents the ack id for a given message.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'ack_id'\n\tMessagingGCPPubsubMessageAckIDKey = attribute.Key(\"messaging.gcp_pubsub.message.ack_id\")\n\n\t// MessagingGCPPubsubMessageDeliveryAttemptKey is the attribute Key\n\t// conforming to the \"messaging.gcp_pubsub.message.delivery_attempt\"\n\t// semantic conventions. It represents the delivery attempt for a given\n\t// message.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 2\n\tMessagingGCPPubsubMessageDeliveryAttemptKey = attribute.Key(\"messaging.gcp_pubsub.message.delivery_attempt\")\n\n\t// MessagingGCPPubsubMessageOrderingKeyKey is the attribute Key conforming\n\t// to the \"messaging.gcp_pubsub.message.ordering_key\" semantic conventions.\n\t// It represents the ordering key for a given message. If the attribute is\n\t// not present, the message does not have an ordering key.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'ordering_key'\n\tMessagingGCPPubsubMessageOrderingKeyKey = attribute.Key(\"messaging.gcp_pubsub.message.ordering_key\")\n)\n\n// MessagingGCPPubsubMessageAckDeadline returns an attribute KeyValue\n// conforming to the \"messaging.gcp_pubsub.message.ack_deadline\" semantic\n// conventions. It represents the ack deadline in seconds set for the modify\n// ack deadline request.\nfunc MessagingGCPPubsubMessageAckDeadline(val int) attribute.KeyValue {\n\treturn MessagingGCPPubsubMessageAckDeadlineKey.Int(val)\n}\n\n// MessagingGCPPubsubMessageAckID returns an attribute KeyValue conforming\n// to the \"messaging.gcp_pubsub.message.ack_id\" semantic conventions. It\n// represents the ack id for a given message.\nfunc MessagingGCPPubsubMessageAckID(val string) attribute.KeyValue {\n\treturn MessagingGCPPubsubMessageAckIDKey.String(val)\n}\n\n// MessagingGCPPubsubMessageDeliveryAttempt returns an attribute KeyValue\n// conforming to the \"messaging.gcp_pubsub.message.delivery_attempt\" semantic\n// conventions. It represents the delivery attempt for a given message.\nfunc MessagingGCPPubsubMessageDeliveryAttempt(val int) attribute.KeyValue {\n\treturn MessagingGCPPubsubMessageDeliveryAttemptKey.Int(val)\n}\n\n// MessagingGCPPubsubMessageOrderingKey returns an attribute KeyValue\n// conforming to the \"messaging.gcp_pubsub.message.ordering_key\" semantic\n// conventions. It represents the ordering key for a given message. If the\n// attribute is not present, the message does not have an ordering key.\nfunc MessagingGCPPubsubMessageOrderingKey(val string) attribute.KeyValue {\n\treturn MessagingGCPPubsubMessageOrderingKeyKey.String(val)\n}\n\n// This group describes attributes specific to Azure Service Bus.\nconst (\n\t// MessagingServicebusDestinationSubscriptionNameKey is the attribute Key\n\t// conforming to the \"messaging.servicebus.destination.subscription_name\"\n\t// semantic conventions. It represents the name of the subscription in the\n\t// topic messages are received from.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'mySubscription'\n\tMessagingServicebusDestinationSubscriptionNameKey = attribute.Key(\"messaging.servicebus.destination.subscription_name\")\n\n\t// MessagingServicebusDispositionStatusKey is the attribute Key conforming\n\t// to the \"messaging.servicebus.disposition_status\" semantic conventions.\n\t// It represents the describes the [settlement\n\t// type](https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock).\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tMessagingServicebusDispositionStatusKey = attribute.Key(\"messaging.servicebus.disposition_status\")\n\n\t// MessagingServicebusMessageDeliveryCountKey is the attribute Key\n\t// conforming to the \"messaging.servicebus.message.delivery_count\" semantic\n\t// conventions. It represents the number of deliveries that have been\n\t// attempted for this message.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 2\n\tMessagingServicebusMessageDeliveryCountKey = attribute.Key(\"messaging.servicebus.message.delivery_count\")\n\n\t// MessagingServicebusMessageEnqueuedTimeKey is the attribute Key\n\t// conforming to the \"messaging.servicebus.message.enqueued_time\" semantic\n\t// conventions. It represents the UTC epoch seconds at which the message\n\t// has been accepted and stored in the entity.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1701393730\n\tMessagingServicebusMessageEnqueuedTimeKey = attribute.Key(\"messaging.servicebus.message.enqueued_time\")\n)\n\nvar (\n\t// Message is completed\n\tMessagingServicebusDispositionStatusComplete = MessagingServicebusDispositionStatusKey.String(\"complete\")\n\t// Message is abandoned\n\tMessagingServicebusDispositionStatusAbandon = MessagingServicebusDispositionStatusKey.String(\"abandon\")\n\t// Message is sent to dead letter queue\n\tMessagingServicebusDispositionStatusDeadLetter = MessagingServicebusDispositionStatusKey.String(\"dead_letter\")\n\t// Message is deferred\n\tMessagingServicebusDispositionStatusDefer = MessagingServicebusDispositionStatusKey.String(\"defer\")\n)\n\n// MessagingServicebusDestinationSubscriptionName returns an attribute\n// KeyValue conforming to the\n// \"messaging.servicebus.destination.subscription_name\" semantic conventions.\n// It represents the name of the subscription in the topic messages are\n// received from.\nfunc MessagingServicebusDestinationSubscriptionName(val string) attribute.KeyValue {\n\treturn MessagingServicebusDestinationSubscriptionNameKey.String(val)\n}\n\n// MessagingServicebusMessageDeliveryCount returns an attribute KeyValue\n// conforming to the \"messaging.servicebus.message.delivery_count\" semantic\n// conventions. It represents the number of deliveries that have been attempted\n// for this message.\nfunc MessagingServicebusMessageDeliveryCount(val int) attribute.KeyValue {\n\treturn MessagingServicebusMessageDeliveryCountKey.Int(val)\n}\n\n// MessagingServicebusMessageEnqueuedTime returns an attribute KeyValue\n// conforming to the \"messaging.servicebus.message.enqueued_time\" semantic\n// conventions. It represents the UTC epoch seconds at which the message has\n// been accepted and stored in the entity.\nfunc MessagingServicebusMessageEnqueuedTime(val int) attribute.KeyValue {\n\treturn MessagingServicebusMessageEnqueuedTimeKey.Int(val)\n}\n\n// This group describes attributes specific to Azure Event Hubs.\nconst (\n\t// MessagingEventhubsConsumerGroupKey is the attribute Key conforming to\n\t// the \"messaging.eventhubs.consumer.group\" semantic conventions. It\n\t// represents the name of the consumer group the event consumer is\n\t// associated with.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'indexer'\n\tMessagingEventhubsConsumerGroupKey = attribute.Key(\"messaging.eventhubs.consumer.group\")\n\n\t// MessagingEventhubsMessageEnqueuedTimeKey is the attribute Key conforming\n\t// to the \"messaging.eventhubs.message.enqueued_time\" semantic conventions.\n\t// It represents the UTC epoch seconds at which the message has been\n\t// accepted and stored in the entity.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1701393730\n\tMessagingEventhubsMessageEnqueuedTimeKey = attribute.Key(\"messaging.eventhubs.message.enqueued_time\")\n)\n\n// MessagingEventhubsConsumerGroup returns an attribute KeyValue conforming\n// to the \"messaging.eventhubs.consumer.group\" semantic conventions. It\n// represents the name of the consumer group the event consumer is associated\n// with.\nfunc MessagingEventhubsConsumerGroup(val string) attribute.KeyValue {\n\treturn MessagingEventhubsConsumerGroupKey.String(val)\n}\n\n// MessagingEventhubsMessageEnqueuedTime returns an attribute KeyValue\n// conforming to the \"messaging.eventhubs.message.enqueued_time\" semantic\n// conventions. It represents the UTC epoch seconds at which the message has\n// been accepted and stored in the entity.\nfunc MessagingEventhubsMessageEnqueuedTime(val int) attribute.KeyValue {\n\treturn MessagingEventhubsMessageEnqueuedTimeKey.Int(val)\n}\n\n// These attributes may be used for any network related operation.\nconst (\n\t// NetworkCarrierIccKey is the attribute Key conforming to the\n\t// \"network.carrier.icc\" semantic conventions. It represents the ISO 3166-1\n\t// alpha-2 2-character country code associated with the mobile carrier\n\t// network.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'DE'\n\tNetworkCarrierIccKey = attribute.Key(\"network.carrier.icc\")\n\n\t// NetworkCarrierMccKey is the attribute Key conforming to the\n\t// \"network.carrier.mcc\" semantic conventions. It represents the mobile\n\t// carrier country code.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '310'\n\tNetworkCarrierMccKey = attribute.Key(\"network.carrier.mcc\")\n\n\t// NetworkCarrierMncKey is the attribute Key conforming to the\n\t// \"network.carrier.mnc\" semantic conventions. It represents the mobile\n\t// carrier network code.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '001'\n\tNetworkCarrierMncKey = attribute.Key(\"network.carrier.mnc\")\n\n\t// NetworkCarrierNameKey is the attribute Key conforming to the\n\t// \"network.carrier.name\" semantic conventions. It represents the name of\n\t// the mobile carrier.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'sprint'\n\tNetworkCarrierNameKey = attribute.Key(\"network.carrier.name\")\n\n\t// NetworkConnectionSubtypeKey is the attribute Key conforming to the\n\t// \"network.connection.subtype\" semantic conventions. It represents the\n\t// this describes more details regarding the connection.type. It may be the\n\t// type of cell technology connection, but it could be used for describing\n\t// details about a wifi connection.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'LTE'\n\tNetworkConnectionSubtypeKey = attribute.Key(\"network.connection.subtype\")\n\n\t// NetworkConnectionTypeKey is the attribute Key conforming to the\n\t// \"network.connection.type\" semantic conventions. It represents the\n\t// internet connection type.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'wifi'\n\tNetworkConnectionTypeKey = attribute.Key(\"network.connection.type\")\n\n\t// NetworkIoDirectionKey is the attribute Key conforming to the\n\t// \"network.io.direction\" semantic conventions. It represents the network\n\t// IO operation direction.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'transmit'\n\tNetworkIoDirectionKey = attribute.Key(\"network.io.direction\")\n\n\t// NetworkLocalAddressKey is the attribute Key conforming to the\n\t// \"network.local.address\" semantic conventions. It represents the local\n\t// address of the network connection - IP address or Unix domain socket\n\t// name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '10.1.2.80', '/tmp/my.sock'\n\tNetworkLocalAddressKey = attribute.Key(\"network.local.address\")\n\n\t// NetworkLocalPortKey is the attribute Key conforming to the\n\t// \"network.local.port\" semantic conventions. It represents the local port\n\t// number of the network connection.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 65123\n\tNetworkLocalPortKey = attribute.Key(\"network.local.port\")\n\n\t// NetworkPeerAddressKey is the attribute Key conforming to the\n\t// \"network.peer.address\" semantic conventions. It represents the peer\n\t// address of the network connection - IP address or Unix domain socket\n\t// name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '10.1.2.80', '/tmp/my.sock'\n\tNetworkPeerAddressKey = attribute.Key(\"network.peer.address\")\n\n\t// NetworkPeerPortKey is the attribute Key conforming to the\n\t// \"network.peer.port\" semantic conventions. It represents the peer port\n\t// number of the network connection.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 65123\n\tNetworkPeerPortKey = attribute.Key(\"network.peer.port\")\n\n\t// NetworkProtocolNameKey is the attribute Key conforming to the\n\t// \"network.protocol.name\" semantic conventions. It represents the [OSI\n\t// application layer](https://osi-model.com/application-layer/) or non-OSI\n\t// equivalent.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'amqp', 'http', 'mqtt'\n\t// Note: The value SHOULD be normalized to lowercase.\n\tNetworkProtocolNameKey = attribute.Key(\"network.protocol.name\")\n\n\t// NetworkProtocolVersionKey is the attribute Key conforming to the\n\t// \"network.protocol.version\" semantic conventions. It represents the\n\t// actual version of the protocol used for network communication.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '1.1', '2'\n\t// Note: If protocol version is subject to negotiation (for example using\n\t// [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute\n\t// SHOULD be set to the negotiated version. If the actual protocol version\n\t// is not known, this attribute SHOULD NOT be set.\n\tNetworkProtocolVersionKey = attribute.Key(\"network.protocol.version\")\n\n\t// NetworkTransportKey is the attribute Key conforming to the\n\t// \"network.transport\" semantic conventions. It represents the [OSI\n\t// transport layer](https://osi-model.com/transport-layer/) or\n\t// [inter-process communication\n\t// method](https://wikipedia.org/wiki/Inter-process_communication).\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'tcp', 'udp'\n\t// Note: The value SHOULD be normalized to lowercase.\n\t//\n\t// Consider always setting the transport when setting a port number, since\n\t// a port number is ambiguous without knowing the transport. For example\n\t// different processes could be listening on TCP port 12345 and UDP port\n\t// 12345.\n\tNetworkTransportKey = attribute.Key(\"network.transport\")\n\n\t// NetworkTypeKey is the attribute Key conforming to the \"network.type\"\n\t// semantic conventions. It represents the [OSI network\n\t// layer](https://osi-model.com/network-layer/) or non-OSI equivalent.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'ipv4', 'ipv6'\n\t// Note: The value SHOULD be normalized to lowercase.\n\tNetworkTypeKey = attribute.Key(\"network.type\")\n)\n\nvar (\n\t// GPRS\n\tNetworkConnectionSubtypeGprs = NetworkConnectionSubtypeKey.String(\"gprs\")\n\t// EDGE\n\tNetworkConnectionSubtypeEdge = NetworkConnectionSubtypeKey.String(\"edge\")\n\t// UMTS\n\tNetworkConnectionSubtypeUmts = NetworkConnectionSubtypeKey.String(\"umts\")\n\t// CDMA\n\tNetworkConnectionSubtypeCdma = NetworkConnectionSubtypeKey.String(\"cdma\")\n\t// EVDO Rel. 0\n\tNetworkConnectionSubtypeEvdo0 = NetworkConnectionSubtypeKey.String(\"evdo_0\")\n\t// EVDO Rev. A\n\tNetworkConnectionSubtypeEvdoA = NetworkConnectionSubtypeKey.String(\"evdo_a\")\n\t// CDMA2000 1XRTT\n\tNetworkConnectionSubtypeCdma20001xrtt = NetworkConnectionSubtypeKey.String(\"cdma2000_1xrtt\")\n\t// HSDPA\n\tNetworkConnectionSubtypeHsdpa = NetworkConnectionSubtypeKey.String(\"hsdpa\")\n\t// HSUPA\n\tNetworkConnectionSubtypeHsupa = NetworkConnectionSubtypeKey.String(\"hsupa\")\n\t// HSPA\n\tNetworkConnectionSubtypeHspa = NetworkConnectionSubtypeKey.String(\"hspa\")\n\t// IDEN\n\tNetworkConnectionSubtypeIden = NetworkConnectionSubtypeKey.String(\"iden\")\n\t// EVDO Rev. B\n\tNetworkConnectionSubtypeEvdoB = NetworkConnectionSubtypeKey.String(\"evdo_b\")\n\t// LTE\n\tNetworkConnectionSubtypeLte = NetworkConnectionSubtypeKey.String(\"lte\")\n\t// EHRPD\n\tNetworkConnectionSubtypeEhrpd = NetworkConnectionSubtypeKey.String(\"ehrpd\")\n\t// HSPAP\n\tNetworkConnectionSubtypeHspap = NetworkConnectionSubtypeKey.String(\"hspap\")\n\t// GSM\n\tNetworkConnectionSubtypeGsm = NetworkConnectionSubtypeKey.String(\"gsm\")\n\t// TD-SCDMA\n\tNetworkConnectionSubtypeTdScdma = NetworkConnectionSubtypeKey.String(\"td_scdma\")\n\t// IWLAN\n\tNetworkConnectionSubtypeIwlan = NetworkConnectionSubtypeKey.String(\"iwlan\")\n\t// 5G NR (New Radio)\n\tNetworkConnectionSubtypeNr = NetworkConnectionSubtypeKey.String(\"nr\")\n\t// 5G NRNSA (New Radio Non-Standalone)\n\tNetworkConnectionSubtypeNrnsa = NetworkConnectionSubtypeKey.String(\"nrnsa\")\n\t// LTE CA\n\tNetworkConnectionSubtypeLteCa = NetworkConnectionSubtypeKey.String(\"lte_ca\")\n)\n\nvar (\n\t// wifi\n\tNetworkConnectionTypeWifi = NetworkConnectionTypeKey.String(\"wifi\")\n\t// wired\n\tNetworkConnectionTypeWired = NetworkConnectionTypeKey.String(\"wired\")\n\t// cell\n\tNetworkConnectionTypeCell = NetworkConnectionTypeKey.String(\"cell\")\n\t// unavailable\n\tNetworkConnectionTypeUnavailable = NetworkConnectionTypeKey.String(\"unavailable\")\n\t// unknown\n\tNetworkConnectionTypeUnknown = NetworkConnectionTypeKey.String(\"unknown\")\n)\n\nvar (\n\t// transmit\n\tNetworkIoDirectionTransmit = NetworkIoDirectionKey.String(\"transmit\")\n\t// receive\n\tNetworkIoDirectionReceive = NetworkIoDirectionKey.String(\"receive\")\n)\n\nvar (\n\t// TCP\n\tNetworkTransportTCP = NetworkTransportKey.String(\"tcp\")\n\t// UDP\n\tNetworkTransportUDP = NetworkTransportKey.String(\"udp\")\n\t// Named or anonymous pipe\n\tNetworkTransportPipe = NetworkTransportKey.String(\"pipe\")\n\t// Unix domain socket\n\tNetworkTransportUnix = NetworkTransportKey.String(\"unix\")\n)\n\nvar (\n\t// IPv4\n\tNetworkTypeIpv4 = NetworkTypeKey.String(\"ipv4\")\n\t// IPv6\n\tNetworkTypeIpv6 = NetworkTypeKey.String(\"ipv6\")\n)\n\n// NetworkCarrierIcc returns an attribute KeyValue conforming to the\n// \"network.carrier.icc\" semantic conventions. It represents the ISO 3166-1\n// alpha-2 2-character country code associated with the mobile carrier network.\nfunc NetworkCarrierIcc(val string) attribute.KeyValue {\n\treturn NetworkCarrierIccKey.String(val)\n}\n\n// NetworkCarrierMcc returns an attribute KeyValue conforming to the\n// \"network.carrier.mcc\" semantic conventions. It represents the mobile carrier\n// country code.\nfunc NetworkCarrierMcc(val string) attribute.KeyValue {\n\treturn NetworkCarrierMccKey.String(val)\n}\n\n// NetworkCarrierMnc returns an attribute KeyValue conforming to the\n// \"network.carrier.mnc\" semantic conventions. It represents the mobile carrier\n// network code.\nfunc NetworkCarrierMnc(val string) attribute.KeyValue {\n\treturn NetworkCarrierMncKey.String(val)\n}\n\n// NetworkCarrierName returns an attribute KeyValue conforming to the\n// \"network.carrier.name\" semantic conventions. It represents the name of the\n// mobile carrier.\nfunc NetworkCarrierName(val string) attribute.KeyValue {\n\treturn NetworkCarrierNameKey.String(val)\n}\n\n// NetworkLocalAddress returns an attribute KeyValue conforming to the\n// \"network.local.address\" semantic conventions. It represents the local\n// address of the network connection - IP address or Unix domain socket name.\nfunc NetworkLocalAddress(val string) attribute.KeyValue {\n\treturn NetworkLocalAddressKey.String(val)\n}\n\n// NetworkLocalPort returns an attribute KeyValue conforming to the\n// \"network.local.port\" semantic conventions. It represents the local port\n// number of the network connection.\nfunc NetworkLocalPort(val int) attribute.KeyValue {\n\treturn NetworkLocalPortKey.Int(val)\n}\n\n// NetworkPeerAddress returns an attribute KeyValue conforming to the\n// \"network.peer.address\" semantic conventions. It represents the peer address\n// of the network connection - IP address or Unix domain socket name.\nfunc NetworkPeerAddress(val string) attribute.KeyValue {\n\treturn NetworkPeerAddressKey.String(val)\n}\n\n// NetworkPeerPort returns an attribute KeyValue conforming to the\n// \"network.peer.port\" semantic conventions. It represents the peer port number\n// of the network connection.\nfunc NetworkPeerPort(val int) attribute.KeyValue {\n\treturn NetworkPeerPortKey.Int(val)\n}\n\n// NetworkProtocolName returns an attribute KeyValue conforming to the\n// \"network.protocol.name\" semantic conventions. It represents the [OSI\n// application layer](https://osi-model.com/application-layer/) or non-OSI\n// equivalent.\nfunc NetworkProtocolName(val string) attribute.KeyValue {\n\treturn NetworkProtocolNameKey.String(val)\n}\n\n// NetworkProtocolVersion returns an attribute KeyValue conforming to the\n// \"network.protocol.version\" semantic conventions. It represents the actual\n// version of the protocol used for network communication.\nfunc NetworkProtocolVersion(val string) attribute.KeyValue {\n\treturn NetworkProtocolVersionKey.String(val)\n}\n\n// An OCI image manifest.\nconst (\n\t// OciManifestDigestKey is the attribute Key conforming to the\n\t// \"oci.manifest.digest\" semantic conventions. It represents the digest of\n\t// the OCI image manifest. For container images specifically is the digest\n\t// by which the container image is known.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// 'sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4'\n\t// Note: Follows [OCI Image Manifest\n\t// Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md),\n\t// and specifically the [Digest\n\t// property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).\n\t// An example can be found in [Example Image\n\t// Manifest](https://docs.docker.com/registry/spec/manifest-v2-2/#example-image-manifest).\n\tOciManifestDigestKey = attribute.Key(\"oci.manifest.digest\")\n)\n\n// OciManifestDigest returns an attribute KeyValue conforming to the\n// \"oci.manifest.digest\" semantic conventions. It represents the digest of the\n// OCI image manifest. For container images specifically is the digest by which\n// the container image is known.\nfunc OciManifestDigest(val string) attribute.KeyValue {\n\treturn OciManifestDigestKey.String(val)\n}\n\n// Attributes used by the OpenTracing Shim layer.\nconst (\n\t// OpentracingRefTypeKey is the attribute Key conforming to the\n\t// \"opentracing.ref_type\" semantic conventions. It represents the\n\t// parent-child Reference type\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: The causal relationship between a child Span and a parent Span.\n\tOpentracingRefTypeKey = attribute.Key(\"opentracing.ref_type\")\n)\n\nvar (\n\t// The parent Span depends on the child Span in some capacity\n\tOpentracingRefTypeChildOf = OpentracingRefTypeKey.String(\"child_of\")\n\t// The parent Span doesn't depend in any way on the result of the child Span\n\tOpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String(\"follows_from\")\n)\n\n// The operating system (OS) on which the process represented by this resource\n// is running.\nconst (\n\t// OSBuildIDKey is the attribute Key conforming to the \"os.build_id\"\n\t// semantic conventions. It represents the unique identifier for a\n\t// particular build or compilation of the operating system.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'TQ3C.230805.001.B2', '20E247', '22621'\n\tOSBuildIDKey = attribute.Key(\"os.build_id\")\n\n\t// OSDescriptionKey is the attribute Key conforming to the \"os.description\"\n\t// semantic conventions. It represents the human readable (not intended to\n\t// be parsed) OS version information, like e.g. reported by `ver` or\n\t// `lsb_release -a` commands.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1\n\t// LTS'\n\tOSDescriptionKey = attribute.Key(\"os.description\")\n\n\t// OSNameKey is the attribute Key conforming to the \"os.name\" semantic\n\t// conventions. It represents the human readable operating system name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'iOS', 'Android', 'Ubuntu'\n\tOSNameKey = attribute.Key(\"os.name\")\n\n\t// OSTypeKey is the attribute Key conforming to the \"os.type\" semantic\n\t// conventions. It represents the operating system type.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tOSTypeKey = attribute.Key(\"os.type\")\n\n\t// OSVersionKey is the attribute Key conforming to the \"os.version\"\n\t// semantic conventions. It represents the version string of the operating\n\t// system as defined in [Version\n\t// Attributes](/docs/resource/README.md#version-attributes).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '14.2.1', '18.04.1'\n\tOSVersionKey = attribute.Key(\"os.version\")\n)\n\nvar (\n\t// Microsoft Windows\n\tOSTypeWindows = OSTypeKey.String(\"windows\")\n\t// Linux\n\tOSTypeLinux = OSTypeKey.String(\"linux\")\n\t// Apple Darwin\n\tOSTypeDarwin = OSTypeKey.String(\"darwin\")\n\t// FreeBSD\n\tOSTypeFreeBSD = OSTypeKey.String(\"freebsd\")\n\t// NetBSD\n\tOSTypeNetBSD = OSTypeKey.String(\"netbsd\")\n\t// OpenBSD\n\tOSTypeOpenBSD = OSTypeKey.String(\"openbsd\")\n\t// DragonFly BSD\n\tOSTypeDragonflyBSD = OSTypeKey.String(\"dragonflybsd\")\n\t// HP-UX (Hewlett Packard Unix)\n\tOSTypeHPUX = OSTypeKey.String(\"hpux\")\n\t// AIX (Advanced Interactive eXecutive)\n\tOSTypeAIX = OSTypeKey.String(\"aix\")\n\t// SunOS, Oracle Solaris\n\tOSTypeSolaris = OSTypeKey.String(\"solaris\")\n\t// IBM z/OS\n\tOSTypeZOS = OSTypeKey.String(\"z_os\")\n)\n\n// OSBuildID returns an attribute KeyValue conforming to the \"os.build_id\"\n// semantic conventions. It represents the unique identifier for a particular\n// build or compilation of the operating system.\nfunc OSBuildID(val string) attribute.KeyValue {\n\treturn OSBuildIDKey.String(val)\n}\n\n// OSDescription returns an attribute KeyValue conforming to the\n// \"os.description\" semantic conventions. It represents the human readable (not\n// intended to be parsed) OS version information, like e.g. reported by `ver`\n// or `lsb_release -a` commands.\nfunc OSDescription(val string) attribute.KeyValue {\n\treturn OSDescriptionKey.String(val)\n}\n\n// OSName returns an attribute KeyValue conforming to the \"os.name\" semantic\n// conventions. It represents the human readable operating system name.\nfunc OSName(val string) attribute.KeyValue {\n\treturn OSNameKey.String(val)\n}\n\n// OSVersion returns an attribute KeyValue conforming to the \"os.version\"\n// semantic conventions. It represents the version string of the operating\n// system as defined in [Version\n// Attributes](/docs/resource/README.md#version-attributes).\nfunc OSVersion(val string) attribute.KeyValue {\n\treturn OSVersionKey.String(val)\n}\n\n// Attributes reserved for OpenTelemetry\nconst (\n\t// OTelStatusCodeKey is the attribute Key conforming to the\n\t// \"otel.status_code\" semantic conventions. It represents the name of the\n\t// code, either \"OK\" or \"ERROR\". MUST NOT be set if the status code is\n\t// UNSET.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\tOTelStatusCodeKey = attribute.Key(\"otel.status_code\")\n\n\t// OTelStatusDescriptionKey is the attribute Key conforming to the\n\t// \"otel.status_description\" semantic conventions. It represents the\n\t// description of the Status if it has a value, otherwise not set.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'resource not found'\n\tOTelStatusDescriptionKey = attribute.Key(\"otel.status_description\")\n)\n\nvar (\n\t// The operation has been validated by an Application developer or Operator to have completed successfully\n\tOTelStatusCodeOk = OTelStatusCodeKey.String(\"OK\")\n\t// The operation contains an error\n\tOTelStatusCodeError = OTelStatusCodeKey.String(\"ERROR\")\n)\n\n// OTelStatusDescription returns an attribute KeyValue conforming to the\n// \"otel.status_description\" semantic conventions. It represents the\n// description of the Status if it has a value, otherwise not set.\nfunc OTelStatusDescription(val string) attribute.KeyValue {\n\treturn OTelStatusDescriptionKey.String(val)\n}\n\n// Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's\n// concepts.\nconst (\n\t// OTelScopeNameKey is the attribute Key conforming to the\n\t// \"otel.scope.name\" semantic conventions. It represents the name of the\n\t// instrumentation scope - (`InstrumentationScope.Name` in OTLP).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'io.opentelemetry.contrib.mongodb'\n\tOTelScopeNameKey = attribute.Key(\"otel.scope.name\")\n\n\t// OTelScopeVersionKey is the attribute Key conforming to the\n\t// \"otel.scope.version\" semantic conventions. It represents the version of\n\t// the instrumentation scope - (`InstrumentationScope.Version` in OTLP).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '1.0.0'\n\tOTelScopeVersionKey = attribute.Key(\"otel.scope.version\")\n)\n\n// OTelScopeName returns an attribute KeyValue conforming to the\n// \"otel.scope.name\" semantic conventions. It represents the name of the\n// instrumentation scope - (`InstrumentationScope.Name` in OTLP).\nfunc OTelScopeName(val string) attribute.KeyValue {\n\treturn OTelScopeNameKey.String(val)\n}\n\n// OTelScopeVersion returns an attribute KeyValue conforming to the\n// \"otel.scope.version\" semantic conventions. It represents the version of the\n// instrumentation scope - (`InstrumentationScope.Version` in OTLP).\nfunc OTelScopeVersion(val string) attribute.KeyValue {\n\treturn OTelScopeVersionKey.String(val)\n}\n\n// Operations that access some remote service.\nconst (\n\t// PeerServiceKey is the attribute Key conforming to the \"peer.service\"\n\t// semantic conventions. It represents the\n\t// [`service.name`](/docs/resource/README.md#service) of the remote\n\t// service. SHOULD be equal to the actual `service.name` resource attribute\n\t// of the remote service if any.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'AuthTokenCache'\n\tPeerServiceKey = attribute.Key(\"peer.service\")\n)\n\n// PeerService returns an attribute KeyValue conforming to the\n// \"peer.service\" semantic conventions. It represents the\n// [`service.name`](/docs/resource/README.md#service) of the remote service.\n// SHOULD be equal to the actual `service.name` resource attribute of the\n// remote service if any.\nfunc PeerService(val string) attribute.KeyValue {\n\treturn PeerServiceKey.String(val)\n}\n\n// An operating system process.\nconst (\n\t// ProcessCommandKey is the attribute Key conforming to the\n\t// \"process.command\" semantic conventions. It represents the command used\n\t// to launch the process (i.e. the command name). On Linux based systems,\n\t// can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can\n\t// be set to the first parameter extracted from `GetCommandLineW`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'cmd/otelcol'\n\tProcessCommandKey = attribute.Key(\"process.command\")\n\n\t// ProcessCommandArgsKey is the attribute Key conforming to the\n\t// \"process.command_args\" semantic conventions. It represents the all the\n\t// command arguments (including the command/executable itself) as received\n\t// by the process. On Linux-based systems (and some other Unixoid systems\n\t// supporting procfs), can be set according to the list of null-delimited\n\t// strings extracted from `proc/[pid]/cmdline`. For libc-based executables,\n\t// this would be the full argv vector passed to `main`.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'cmd/otecol', '--config=config.yaml'\n\tProcessCommandArgsKey = attribute.Key(\"process.command_args\")\n\n\t// ProcessCommandLineKey is the attribute Key conforming to the\n\t// \"process.command_line\" semantic conventions. It represents the full\n\t// command used to launch the process as a single string representing the\n\t// full command. On Windows, can be set to the result of `GetCommandLineW`.\n\t// Do not set this if you have to assemble it just for monitoring; use\n\t// `process.command_args` instead.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'C:\\\\cmd\\\\otecol --config=\"my directory\\\\config.yaml\"'\n\tProcessCommandLineKey = attribute.Key(\"process.command_line\")\n\n\t// ProcessContextSwitchTypeKey is the attribute Key conforming to the\n\t// \"process.context_switch_type\" semantic conventions. It represents the\n\t// specifies whether the context switches for this data point were\n\t// voluntary or involuntary.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tProcessContextSwitchTypeKey = attribute.Key(\"process.context_switch_type\")\n\n\t// ProcessCreationTimeKey is the attribute Key conforming to the\n\t// \"process.creation.time\" semantic conventions. It represents the date and\n\t// time the process was created, in ISO 8601 format.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2023-11-21T09:25:34.853Z'\n\tProcessCreationTimeKey = attribute.Key(\"process.creation.time\")\n\n\t// ProcessExecutableNameKey is the attribute Key conforming to the\n\t// \"process.executable.name\" semantic conventions. It represents the name\n\t// of the process executable. On Linux based systems, can be set to the\n\t// `Name` in `proc/[pid]/status`. On Windows, can be set to the base name\n\t// of `GetProcessImageFileNameW`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'otelcol'\n\tProcessExecutableNameKey = attribute.Key(\"process.executable.name\")\n\n\t// ProcessExecutablePathKey is the attribute Key conforming to the\n\t// \"process.executable.path\" semantic conventions. It represents the full\n\t// path to the process executable. On Linux based systems, can be set to\n\t// the target of `proc/[pid]/exe`. On Windows, can be set to the result of\n\t// `GetProcessImageFileNameW`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/usr/bin/cmd/otelcol'\n\tProcessExecutablePathKey = attribute.Key(\"process.executable.path\")\n\n\t// ProcessExitCodeKey is the attribute Key conforming to the\n\t// \"process.exit.code\" semantic conventions. It represents the exit code of\n\t// the process.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 127\n\tProcessExitCodeKey = attribute.Key(\"process.exit.code\")\n\n\t// ProcessExitTimeKey is the attribute Key conforming to the\n\t// \"process.exit.time\" semantic conventions. It represents the date and\n\t// time the process exited, in ISO 8601 format.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2023-11-21T09:26:12.315Z'\n\tProcessExitTimeKey = attribute.Key(\"process.exit.time\")\n\n\t// ProcessGroupLeaderPIDKey is the attribute Key conforming to the\n\t// \"process.group_leader.pid\" semantic conventions. It represents the PID\n\t// of the process's group leader. This is also the process group ID (PGID)\n\t// of the process.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 23\n\tProcessGroupLeaderPIDKey = attribute.Key(\"process.group_leader.pid\")\n\n\t// ProcessInteractiveKey is the attribute Key conforming to the\n\t// \"process.interactive\" semantic conventions. It represents the whether\n\t// the process is connected to an interactive shell.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tProcessInteractiveKey = attribute.Key(\"process.interactive\")\n\n\t// ProcessOwnerKey is the attribute Key conforming to the \"process.owner\"\n\t// semantic conventions. It represents the username of the user that owns\n\t// the process.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'root'\n\tProcessOwnerKey = attribute.Key(\"process.owner\")\n\n\t// ProcessPagingFaultTypeKey is the attribute Key conforming to the\n\t// \"process.paging.fault_type\" semantic conventions. It represents the type\n\t// of page fault for this data point. Type `major` is for major/hard page\n\t// faults, and `minor` is for minor/soft page faults.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tProcessPagingFaultTypeKey = attribute.Key(\"process.paging.fault_type\")\n\n\t// ProcessParentPIDKey is the attribute Key conforming to the\n\t// \"process.parent_pid\" semantic conventions. It represents the parent\n\t// Process identifier (PPID).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 111\n\tProcessParentPIDKey = attribute.Key(\"process.parent_pid\")\n\n\t// ProcessPIDKey is the attribute Key conforming to the \"process.pid\"\n\t// semantic conventions. It represents the process identifier (PID).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1234\n\tProcessPIDKey = attribute.Key(\"process.pid\")\n\n\t// ProcessRealUserIDKey is the attribute Key conforming to the\n\t// \"process.real_user.id\" semantic conventions. It represents the real user\n\t// ID (RUID) of the process.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1000\n\tProcessRealUserIDKey = attribute.Key(\"process.real_user.id\")\n\n\t// ProcessRealUserNameKey is the attribute Key conforming to the\n\t// \"process.real_user.name\" semantic conventions. It represents the\n\t// username of the real user of the process.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'operator'\n\tProcessRealUserNameKey = attribute.Key(\"process.real_user.name\")\n\n\t// ProcessRuntimeDescriptionKey is the attribute Key conforming to the\n\t// \"process.runtime.description\" semantic conventions. It represents an\n\t// additional description about the runtime of the process, for example a\n\t// specific vendor customization of the runtime environment.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0'\n\tProcessRuntimeDescriptionKey = attribute.Key(\"process.runtime.description\")\n\n\t// ProcessRuntimeNameKey is the attribute Key conforming to the\n\t// \"process.runtime.name\" semantic conventions. It represents the name of\n\t// the runtime of this process. For compiled native binaries, this SHOULD\n\t// be the name of the compiler.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'OpenJDK Runtime Environment'\n\tProcessRuntimeNameKey = attribute.Key(\"process.runtime.name\")\n\n\t// ProcessRuntimeVersionKey is the attribute Key conforming to the\n\t// \"process.runtime.version\" semantic conventions. It represents the\n\t// version of the runtime of this process, as returned by the runtime\n\t// without modification.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '14.0.2'\n\tProcessRuntimeVersionKey = attribute.Key(\"process.runtime.version\")\n\n\t// ProcessSavedUserIDKey is the attribute Key conforming to the\n\t// \"process.saved_user.id\" semantic conventions. It represents the saved\n\t// user ID (SUID) of the process.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1002\n\tProcessSavedUserIDKey = attribute.Key(\"process.saved_user.id\")\n\n\t// ProcessSavedUserNameKey is the attribute Key conforming to the\n\t// \"process.saved_user.name\" semantic conventions. It represents the\n\t// username of the saved user.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'operator'\n\tProcessSavedUserNameKey = attribute.Key(\"process.saved_user.name\")\n\n\t// ProcessSessionLeaderPIDKey is the attribute Key conforming to the\n\t// \"process.session_leader.pid\" semantic conventions. It represents the PID\n\t// of the process's session leader. This is also the session ID (SID) of\n\t// the process.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 14\n\tProcessSessionLeaderPIDKey = attribute.Key(\"process.session_leader.pid\")\n\n\t// ProcessUserIDKey is the attribute Key conforming to the\n\t// \"process.user.id\" semantic conventions. It represents the effective user\n\t// ID (EUID) of the process.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1001\n\tProcessUserIDKey = attribute.Key(\"process.user.id\")\n\n\t// ProcessUserNameKey is the attribute Key conforming to the\n\t// \"process.user.name\" semantic conventions. It represents the username of\n\t// the effective user of the process.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'root'\n\tProcessUserNameKey = attribute.Key(\"process.user.name\")\n\n\t// ProcessVpidKey is the attribute Key conforming to the \"process.vpid\"\n\t// semantic conventions. It represents the virtual process identifier.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 12\n\t// Note: The process ID within a PID namespace. This is not necessarily\n\t// unique across all processes on the host but it is unique within the\n\t// process namespace that the process exists within.\n\tProcessVpidKey = attribute.Key(\"process.vpid\")\n)\n\nvar (\n\t// voluntary\n\tProcessContextSwitchTypeVoluntary = ProcessContextSwitchTypeKey.String(\"voluntary\")\n\t// involuntary\n\tProcessContextSwitchTypeInvoluntary = ProcessContextSwitchTypeKey.String(\"involuntary\")\n)\n\nvar (\n\t// major\n\tProcessPagingFaultTypeMajor = ProcessPagingFaultTypeKey.String(\"major\")\n\t// minor\n\tProcessPagingFaultTypeMinor = ProcessPagingFaultTypeKey.String(\"minor\")\n)\n\n// ProcessCommand returns an attribute KeyValue conforming to the\n// \"process.command\" semantic conventions. It represents the command used to\n// launch the process (i.e. the command name). On Linux based systems, can be\n// set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to\n// the first parameter extracted from `GetCommandLineW`.\nfunc ProcessCommand(val string) attribute.KeyValue {\n\treturn ProcessCommandKey.String(val)\n}\n\n// ProcessCommandArgs returns an attribute KeyValue conforming to the\n// \"process.command_args\" semantic conventions. It represents the all the\n// command arguments (including the command/executable itself) as received by\n// the process. On Linux-based systems (and some other Unixoid systems\n// supporting procfs), can be set according to the list of null-delimited\n// strings extracted from `proc/[pid]/cmdline`. For libc-based executables,\n// this would be the full argv vector passed to `main`.\nfunc ProcessCommandArgs(val ...string) attribute.KeyValue {\n\treturn ProcessCommandArgsKey.StringSlice(val)\n}\n\n// ProcessCommandLine returns an attribute KeyValue conforming to the\n// \"process.command_line\" semantic conventions. It represents the full command\n// used to launch the process as a single string representing the full command.\n// On Windows, can be set to the result of `GetCommandLineW`. Do not set this\n// if you have to assemble it just for monitoring; use `process.command_args`\n// instead.\nfunc ProcessCommandLine(val string) attribute.KeyValue {\n\treturn ProcessCommandLineKey.String(val)\n}\n\n// ProcessCreationTime returns an attribute KeyValue conforming to the\n// \"process.creation.time\" semantic conventions. It represents the date and\n// time the process was created, in ISO 8601 format.\nfunc ProcessCreationTime(val string) attribute.KeyValue {\n\treturn ProcessCreationTimeKey.String(val)\n}\n\n// ProcessExecutableName returns an attribute KeyValue conforming to the\n// \"process.executable.name\" semantic conventions. It represents the name of\n// the process executable. On Linux based systems, can be set to the `Name` in\n// `proc/[pid]/status`. On Windows, can be set to the base name of\n// `GetProcessImageFileNameW`.\nfunc ProcessExecutableName(val string) attribute.KeyValue {\n\treturn ProcessExecutableNameKey.String(val)\n}\n\n// ProcessExecutablePath returns an attribute KeyValue conforming to the\n// \"process.executable.path\" semantic conventions. It represents the full path\n// to the process executable. On Linux based systems, can be set to the target\n// of `proc/[pid]/exe`. On Windows, can be set to the result of\n// `GetProcessImageFileNameW`.\nfunc ProcessExecutablePath(val string) attribute.KeyValue {\n\treturn ProcessExecutablePathKey.String(val)\n}\n\n// ProcessExitCode returns an attribute KeyValue conforming to the\n// \"process.exit.code\" semantic conventions. It represents the exit code of the\n// process.\nfunc ProcessExitCode(val int) attribute.KeyValue {\n\treturn ProcessExitCodeKey.Int(val)\n}\n\n// ProcessExitTime returns an attribute KeyValue conforming to the\n// \"process.exit.time\" semantic conventions. It represents the date and time\n// the process exited, in ISO 8601 format.\nfunc ProcessExitTime(val string) attribute.KeyValue {\n\treturn ProcessExitTimeKey.String(val)\n}\n\n// ProcessGroupLeaderPID returns an attribute KeyValue conforming to the\n// \"process.group_leader.pid\" semantic conventions. It represents the PID of\n// the process's group leader. This is also the process group ID (PGID) of the\n// process.\nfunc ProcessGroupLeaderPID(val int) attribute.KeyValue {\n\treturn ProcessGroupLeaderPIDKey.Int(val)\n}\n\n// ProcessInteractive returns an attribute KeyValue conforming to the\n// \"process.interactive\" semantic conventions. It represents the whether the\n// process is connected to an interactive shell.\nfunc ProcessInteractive(val bool) attribute.KeyValue {\n\treturn ProcessInteractiveKey.Bool(val)\n}\n\n// ProcessOwner returns an attribute KeyValue conforming to the\n// \"process.owner\" semantic conventions. It represents the username of the user\n// that owns the process.\nfunc ProcessOwner(val string) attribute.KeyValue {\n\treturn ProcessOwnerKey.String(val)\n}\n\n// ProcessParentPID returns an attribute KeyValue conforming to the\n// \"process.parent_pid\" semantic conventions. It represents the parent Process\n// identifier (PPID).\nfunc ProcessParentPID(val int) attribute.KeyValue {\n\treturn ProcessParentPIDKey.Int(val)\n}\n\n// ProcessPID returns an attribute KeyValue conforming to the \"process.pid\"\n// semantic conventions. It represents the process identifier (PID).\nfunc ProcessPID(val int) attribute.KeyValue {\n\treturn ProcessPIDKey.Int(val)\n}\n\n// ProcessRealUserID returns an attribute KeyValue conforming to the\n// \"process.real_user.id\" semantic conventions. It represents the real user ID\n// (RUID) of the process.\nfunc ProcessRealUserID(val int) attribute.KeyValue {\n\treturn ProcessRealUserIDKey.Int(val)\n}\n\n// ProcessRealUserName returns an attribute KeyValue conforming to the\n// \"process.real_user.name\" semantic conventions. It represents the username of\n// the real user of the process.\nfunc ProcessRealUserName(val string) attribute.KeyValue {\n\treturn ProcessRealUserNameKey.String(val)\n}\n\n// ProcessRuntimeDescription returns an attribute KeyValue conforming to the\n// \"process.runtime.description\" semantic conventions. It represents an\n// additional description about the runtime of the process, for example a\n// specific vendor customization of the runtime environment.\nfunc ProcessRuntimeDescription(val string) attribute.KeyValue {\n\treturn ProcessRuntimeDescriptionKey.String(val)\n}\n\n// ProcessRuntimeName returns an attribute KeyValue conforming to the\n// \"process.runtime.name\" semantic conventions. It represents the name of the\n// runtime of this process. For compiled native binaries, this SHOULD be the\n// name of the compiler.\nfunc ProcessRuntimeName(val string) attribute.KeyValue {\n\treturn ProcessRuntimeNameKey.String(val)\n}\n\n// ProcessRuntimeVersion returns an attribute KeyValue conforming to the\n// \"process.runtime.version\" semantic conventions. It represents the version of\n// the runtime of this process, as returned by the runtime without\n// modification.\nfunc ProcessRuntimeVersion(val string) attribute.KeyValue {\n\treturn ProcessRuntimeVersionKey.String(val)\n}\n\n// ProcessSavedUserID returns an attribute KeyValue conforming to the\n// \"process.saved_user.id\" semantic conventions. It represents the saved user\n// ID (SUID) of the process.\nfunc ProcessSavedUserID(val int) attribute.KeyValue {\n\treturn ProcessSavedUserIDKey.Int(val)\n}\n\n// ProcessSavedUserName returns an attribute KeyValue conforming to the\n// \"process.saved_user.name\" semantic conventions. It represents the username\n// of the saved user.\nfunc ProcessSavedUserName(val string) attribute.KeyValue {\n\treturn ProcessSavedUserNameKey.String(val)\n}\n\n// ProcessSessionLeaderPID returns an attribute KeyValue conforming to the\n// \"process.session_leader.pid\" semantic conventions. It represents the PID of\n// the process's session leader. This is also the session ID (SID) of the\n// process.\nfunc ProcessSessionLeaderPID(val int) attribute.KeyValue {\n\treturn ProcessSessionLeaderPIDKey.Int(val)\n}\n\n// ProcessUserID returns an attribute KeyValue conforming to the\n// \"process.user.id\" semantic conventions. It represents the effective user ID\n// (EUID) of the process.\nfunc ProcessUserID(val int) attribute.KeyValue {\n\treturn ProcessUserIDKey.Int(val)\n}\n\n// ProcessUserName returns an attribute KeyValue conforming to the\n// \"process.user.name\" semantic conventions. It represents the username of the\n// effective user of the process.\nfunc ProcessUserName(val string) attribute.KeyValue {\n\treturn ProcessUserNameKey.String(val)\n}\n\n// ProcessVpid returns an attribute KeyValue conforming to the\n// \"process.vpid\" semantic conventions. It represents the virtual process\n// identifier.\nfunc ProcessVpid(val int) attribute.KeyValue {\n\treturn ProcessVpidKey.Int(val)\n}\n\n// Attributes for process CPU\nconst (\n\t// ProcessCPUStateKey is the attribute Key conforming to the\n\t// \"process.cpu.state\" semantic conventions. It represents the CPU state of\n\t// the process.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tProcessCPUStateKey = attribute.Key(\"process.cpu.state\")\n)\n\nvar (\n\t// system\n\tProcessCPUStateSystem = ProcessCPUStateKey.String(\"system\")\n\t// user\n\tProcessCPUStateUser = ProcessCPUStateKey.String(\"user\")\n\t// wait\n\tProcessCPUStateWait = ProcessCPUStateKey.String(\"wait\")\n)\n\n// Attributes for remote procedure calls.\nconst (\n\t// RPCConnectRPCErrorCodeKey is the attribute Key conforming to the\n\t// \"rpc.connect_rpc.error_code\" semantic conventions. It represents the\n\t// [error codes](https://connect.build/docs/protocol/#error-codes) of the\n\t// Connect request. Error codes are always string values.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tRPCConnectRPCErrorCodeKey = attribute.Key(\"rpc.connect_rpc.error_code\")\n\n\t// RPCGRPCStatusCodeKey is the attribute Key conforming to the\n\t// \"rpc.grpc.status_code\" semantic conventions. It represents the [numeric\n\t// status\n\t// code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of\n\t// the gRPC request.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tRPCGRPCStatusCodeKey = attribute.Key(\"rpc.grpc.status_code\")\n\n\t// RPCJsonrpcErrorCodeKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.error_code\" semantic conventions. It represents the\n\t// `error.code` property of response if it is an error response.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: -32700, 100\n\tRPCJsonrpcErrorCodeKey = attribute.Key(\"rpc.jsonrpc.error_code\")\n\n\t// RPCJsonrpcErrorMessageKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.error_message\" semantic conventions. It represents the\n\t// `error.message` property of response if it is an error response.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Parse error', 'User already exists'\n\tRPCJsonrpcErrorMessageKey = attribute.Key(\"rpc.jsonrpc.error_message\")\n\n\t// RPCJsonrpcRequestIDKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.request_id\" semantic conventions. It represents the `id`\n\t// property of request or response. Since protocol allows id to be int,\n\t// string, `null` or missing (for notifications), value is expected to be\n\t// cast to string for simplicity. Use empty string in case of `null` value.\n\t// Omit entirely if this is a notification.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '10', 'request-7', ''\n\tRPCJsonrpcRequestIDKey = attribute.Key(\"rpc.jsonrpc.request_id\")\n\n\t// RPCJsonrpcVersionKey is the attribute Key conforming to the\n\t// \"rpc.jsonrpc.version\" semantic conventions. It represents the protocol\n\t// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0\n\t// doesn't specify this, the value can be omitted.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2.0', '1.0'\n\tRPCJsonrpcVersionKey = attribute.Key(\"rpc.jsonrpc.version\")\n\n\t// RPCMessageCompressedSizeKey is the attribute Key conforming to the\n\t// \"rpc.message.compressed_size\" semantic conventions. It represents the\n\t// compressed size of the message in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tRPCMessageCompressedSizeKey = attribute.Key(\"rpc.message.compressed_size\")\n\n\t// RPCMessageIDKey is the attribute Key conforming to the \"rpc.message.id\"\n\t// semantic conventions. It represents the mUST be calculated as two\n\t// different counters starting from `1` one for sent messages and one for\n\t// received message.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Note: This way we guarantee that the values will be consistent between\n\t// different implementations.\n\tRPCMessageIDKey = attribute.Key(\"rpc.message.id\")\n\n\t// RPCMessageTypeKey is the attribute Key conforming to the\n\t// \"rpc.message.type\" semantic conventions. It represents the whether this\n\t// is a received or sent message.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tRPCMessageTypeKey = attribute.Key(\"rpc.message.type\")\n\n\t// RPCMessageUncompressedSizeKey is the attribute Key conforming to the\n\t// \"rpc.message.uncompressed_size\" semantic conventions. It represents the\n\t// uncompressed size of the message in bytes.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tRPCMessageUncompressedSizeKey = attribute.Key(\"rpc.message.uncompressed_size\")\n\n\t// RPCMethodKey is the attribute Key conforming to the \"rpc.method\"\n\t// semantic conventions. It represents the name of the (logical) method\n\t// being called, must be equal to the $method part in the span name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'exampleMethod'\n\t// Note: This is the logical name of the method from the RPC interface\n\t// perspective, which can be different from the name of any implementing\n\t// method/function. The `code.function` attribute may be used to store the\n\t// latter (e.g., method actually executing the call on the server side, RPC\n\t// client stub method on the client side).\n\tRPCMethodKey = attribute.Key(\"rpc.method\")\n\n\t// RPCServiceKey is the attribute Key conforming to the \"rpc.service\"\n\t// semantic conventions. It represents the full (logical) name of the\n\t// service being called, including its package name, if applicable.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'myservice.EchoService'\n\t// Note: This is the logical name of the service from the RPC interface\n\t// perspective, which can be different from the name of any implementing\n\t// class. The `code.namespace` attribute may be used to store the latter\n\t// (despite the attribute name, it may include a class name; e.g., class\n\t// with method actually executing the call on the server side, RPC client\n\t// stub class on the client side).\n\tRPCServiceKey = attribute.Key(\"rpc.service\")\n\n\t// RPCSystemKey is the attribute Key conforming to the \"rpc.system\"\n\t// semantic conventions. It represents a string identifying the remoting\n\t// system. See below for a list of well-known identifiers.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tRPCSystemKey = attribute.Key(\"rpc.system\")\n)\n\nvar (\n\t// cancelled\n\tRPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String(\"cancelled\")\n\t// unknown\n\tRPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String(\"unknown\")\n\t// invalid_argument\n\tRPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String(\"invalid_argument\")\n\t// deadline_exceeded\n\tRPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String(\"deadline_exceeded\")\n\t// not_found\n\tRPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String(\"not_found\")\n\t// already_exists\n\tRPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String(\"already_exists\")\n\t// permission_denied\n\tRPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String(\"permission_denied\")\n\t// resource_exhausted\n\tRPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String(\"resource_exhausted\")\n\t// failed_precondition\n\tRPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String(\"failed_precondition\")\n\t// aborted\n\tRPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String(\"aborted\")\n\t// out_of_range\n\tRPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String(\"out_of_range\")\n\t// unimplemented\n\tRPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String(\"unimplemented\")\n\t// internal\n\tRPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String(\"internal\")\n\t// unavailable\n\tRPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String(\"unavailable\")\n\t// data_loss\n\tRPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String(\"data_loss\")\n\t// unauthenticated\n\tRPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String(\"unauthenticated\")\n)\n\nvar (\n\t// OK\n\tRPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0)\n\t// CANCELLED\n\tRPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1)\n\t// UNKNOWN\n\tRPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2)\n\t// INVALID_ARGUMENT\n\tRPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3)\n\t// DEADLINE_EXCEEDED\n\tRPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4)\n\t// NOT_FOUND\n\tRPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5)\n\t// ALREADY_EXISTS\n\tRPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6)\n\t// PERMISSION_DENIED\n\tRPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7)\n\t// RESOURCE_EXHAUSTED\n\tRPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8)\n\t// FAILED_PRECONDITION\n\tRPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9)\n\t// ABORTED\n\tRPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10)\n\t// OUT_OF_RANGE\n\tRPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11)\n\t// UNIMPLEMENTED\n\tRPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12)\n\t// INTERNAL\n\tRPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13)\n\t// UNAVAILABLE\n\tRPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14)\n\t// DATA_LOSS\n\tRPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15)\n\t// UNAUTHENTICATED\n\tRPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16)\n)\n\nvar (\n\t// sent\n\tRPCMessageTypeSent = RPCMessageTypeKey.String(\"SENT\")\n\t// received\n\tRPCMessageTypeReceived = RPCMessageTypeKey.String(\"RECEIVED\")\n)\n\nvar (\n\t// gRPC\n\tRPCSystemGRPC = RPCSystemKey.String(\"grpc\")\n\t// Java RMI\n\tRPCSystemJavaRmi = RPCSystemKey.String(\"java_rmi\")\n\t// .NET WCF\n\tRPCSystemDotnetWcf = RPCSystemKey.String(\"dotnet_wcf\")\n\t// Apache Dubbo\n\tRPCSystemApacheDubbo = RPCSystemKey.String(\"apache_dubbo\")\n\t// Connect RPC\n\tRPCSystemConnectRPC = RPCSystemKey.String(\"connect_rpc\")\n)\n\n// RPCJsonrpcErrorCode returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.error_code\" semantic conventions. It represents the\n// `error.code` property of response if it is an error response.\nfunc RPCJsonrpcErrorCode(val int) attribute.KeyValue {\n\treturn RPCJsonrpcErrorCodeKey.Int(val)\n}\n\n// RPCJsonrpcErrorMessage returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.error_message\" semantic conventions. It represents the\n// `error.message` property of response if it is an error response.\nfunc RPCJsonrpcErrorMessage(val string) attribute.KeyValue {\n\treturn RPCJsonrpcErrorMessageKey.String(val)\n}\n\n// RPCJsonrpcRequestID returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.request_id\" semantic conventions. It represents the `id`\n// property of request or response. Since protocol allows id to be int, string,\n// `null` or missing (for notifications), value is expected to be cast to\n// string for simplicity. Use empty string in case of `null` value. Omit\n// entirely if this is a notification.\nfunc RPCJsonrpcRequestID(val string) attribute.KeyValue {\n\treturn RPCJsonrpcRequestIDKey.String(val)\n}\n\n// RPCJsonrpcVersion returns an attribute KeyValue conforming to the\n// \"rpc.jsonrpc.version\" semantic conventions. It represents the protocol\n// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0\n// doesn't specify this, the value can be omitted.\nfunc RPCJsonrpcVersion(val string) attribute.KeyValue {\n\treturn RPCJsonrpcVersionKey.String(val)\n}\n\n// RPCMessageCompressedSize returns an attribute KeyValue conforming to the\n// \"rpc.message.compressed_size\" semantic conventions. It represents the\n// compressed size of the message in bytes.\nfunc RPCMessageCompressedSize(val int) attribute.KeyValue {\n\treturn RPCMessageCompressedSizeKey.Int(val)\n}\n\n// RPCMessageID returns an attribute KeyValue conforming to the\n// \"rpc.message.id\" semantic conventions. It represents the mUST be calculated\n// as two different counters starting from `1` one for sent messages and one\n// for received message.\nfunc RPCMessageID(val int) attribute.KeyValue {\n\treturn RPCMessageIDKey.Int(val)\n}\n\n// RPCMessageUncompressedSize returns an attribute KeyValue conforming to\n// the \"rpc.message.uncompressed_size\" semantic conventions. It represents the\n// uncompressed size of the message in bytes.\nfunc RPCMessageUncompressedSize(val int) attribute.KeyValue {\n\treturn RPCMessageUncompressedSizeKey.Int(val)\n}\n\n// RPCMethod returns an attribute KeyValue conforming to the \"rpc.method\"\n// semantic conventions. It represents the name of the (logical) method being\n// called, must be equal to the $method part in the span name.\nfunc RPCMethod(val string) attribute.KeyValue {\n\treturn RPCMethodKey.String(val)\n}\n\n// RPCService returns an attribute KeyValue conforming to the \"rpc.service\"\n// semantic conventions. It represents the full (logical) name of the service\n// being called, including its package name, if applicable.\nfunc RPCService(val string) attribute.KeyValue {\n\treturn RPCServiceKey.String(val)\n}\n\n// These attributes may be used to describe the server in a connection-based\n// network interaction where there is one side that initiates the connection\n// (the client is the side that initiates the connection). This covers all TCP\n// network interactions since TCP is connection-based and one side initiates\n// the connection (an exception is made for peer-to-peer communication over TCP\n// where the \"user-facing\" surface of the protocol / API doesn't expose a clear\n// notion of client and server). This also covers UDP network interactions\n// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.\nconst (\n\t// ServerAddressKey is the attribute Key conforming to the \"server.address\"\n\t// semantic conventions. It represents the server domain name if available\n\t// without reverse DNS lookup; otherwise, IP address or Unix domain socket\n\t// name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'example.com', '10.1.2.80', '/tmp/my.sock'\n\t// Note: When observed from the client side, and when communicating through\n\t// an intermediary, `server.address` SHOULD represent the server address\n\t// behind any intermediaries, for example proxies, if it's available.\n\tServerAddressKey = attribute.Key(\"server.address\")\n\n\t// ServerPortKey is the attribute Key conforming to the \"server.port\"\n\t// semantic conventions. It represents the server port number.\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 80, 8080, 443\n\t// Note: When observed from the client side, and when communicating through\n\t// an intermediary, `server.port` SHOULD represent the server port behind\n\t// any intermediaries, for example proxies, if it's available.\n\tServerPortKey = attribute.Key(\"server.port\")\n)\n\n// ServerAddress returns an attribute KeyValue conforming to the\n// \"server.address\" semantic conventions. It represents the server domain name\n// if available without reverse DNS lookup; otherwise, IP address or Unix\n// domain socket name.\nfunc ServerAddress(val string) attribute.KeyValue {\n\treturn ServerAddressKey.String(val)\n}\n\n// ServerPort returns an attribute KeyValue conforming to the \"server.port\"\n// semantic conventions. It represents the server port number.\nfunc ServerPort(val int) attribute.KeyValue {\n\treturn ServerPortKey.Int(val)\n}\n\n// A service instance.\nconst (\n\t// ServiceInstanceIDKey is the attribute Key conforming to the\n\t// \"service.instance.id\" semantic conventions. It represents the string ID\n\t// of the service instance.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '627cc493-f310-47de-96bd-71410b7dec09'\n\t// Note: MUST be unique for each instance of the same\n\t// `service.namespace,service.name` pair (in other words\n\t// `service.namespace,service.name,service.instance.id` triplet MUST be\n\t// globally unique). The ID helps to\n\t// distinguish instances of the same service that exist at the same time\n\t// (e.g. instances of a horizontally scaled\n\t// service).\n\t//\n\t// Implementations, such as SDKs, are recommended to generate a random\n\t// Version 1 or Version 4 [RFC\n\t// 4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an\n\t// inherent unique ID as the source of\n\t// this value if stability is desirable. In that case, the ID SHOULD be\n\t// used as source of a UUID Version 5 and\n\t// SHOULD use the following UUID as the namespace:\n\t// `4d63009a-8d0f-11ee-aad7-4c796ed8e320`.\n\t//\n\t// UUIDs are typically recommended, as only an opaque value for the\n\t// purposes of identifying a service instance is\n\t// needed. Similar to what can be seen in the man page for the\n\t// [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html)\n\t// file, the underlying\n\t// data, such as pod name and namespace should be treated as confidential,\n\t// being the user's choice to expose it\n\t// or not via another resource attribute.\n\t//\n\t// For applications running behind an application server (like unicorn), we\n\t// do not recommend using one identifier\n\t// for all processes participating in the application. Instead, it's\n\t// recommended each division (e.g. a worker\n\t// thread in unicorn) to have its own instance.id.\n\t//\n\t// It's not recommended for a Collector to set `service.instance.id` if it\n\t// can't unambiguously determine the\n\t// service instance that is generating that telemetry. For instance,\n\t// creating an UUID based on `pod.name` will\n\t// likely be wrong, as the Collector might not know from which container\n\t// within that pod the telemetry originated.\n\t// However, Collectors can set the `service.instance.id` if they can\n\t// unambiguously determine the service instance\n\t// for that telemetry. This is typically the case for scraping receivers,\n\t// as they know the target address and\n\t// port.\n\tServiceInstanceIDKey = attribute.Key(\"service.instance.id\")\n\n\t// ServiceNameKey is the attribute Key conforming to the \"service.name\"\n\t// semantic conventions. It represents the logical name of the service.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'shoppingcart'\n\t// Note: MUST be the same for all instances of horizontally scaled\n\t// services. If the value was not specified, SDKs MUST fallback to\n\t// `unknown_service:` concatenated with\n\t// [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If\n\t// `process.executable.name` is not available, the value MUST be set to\n\t// `unknown_service`.\n\tServiceNameKey = attribute.Key(\"service.name\")\n\n\t// ServiceNamespaceKey is the attribute Key conforming to the\n\t// \"service.namespace\" semantic conventions. It represents a namespace for\n\t// `service.name`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Shop'\n\t// Note: A string value having a meaning that helps to distinguish a group\n\t// of services, for example the team name that owns a group of services.\n\t// `service.name` is expected to be unique within the same namespace. If\n\t// `service.namespace` is not specified in the Resource then `service.name`\n\t// is expected to be unique for all services that have no explicit\n\t// namespace defined (so the empty/unspecified namespace is simply one more\n\t// valid namespace). Zero-length namespace string is assumed equal to\n\t// unspecified namespace.\n\tServiceNamespaceKey = attribute.Key(\"service.namespace\")\n\n\t// ServiceVersionKey is the attribute Key conforming to the\n\t// \"service.version\" semantic conventions. It represents the version string\n\t// of the service API or implementation. The format is not defined by these\n\t// conventions.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '2.0.0', 'a01dbef8a'\n\tServiceVersionKey = attribute.Key(\"service.version\")\n)\n\n// ServiceInstanceID returns an attribute KeyValue conforming to the\n// \"service.instance.id\" semantic conventions. It represents the string ID of\n// the service instance.\nfunc ServiceInstanceID(val string) attribute.KeyValue {\n\treturn ServiceInstanceIDKey.String(val)\n}\n\n// ServiceName returns an attribute KeyValue conforming to the\n// \"service.name\" semantic conventions. It represents the logical name of the\n// service.\nfunc ServiceName(val string) attribute.KeyValue {\n\treturn ServiceNameKey.String(val)\n}\n\n// ServiceNamespace returns an attribute KeyValue conforming to the\n// \"service.namespace\" semantic conventions. It represents a namespace for\n// `service.name`.\nfunc ServiceNamespace(val string) attribute.KeyValue {\n\treturn ServiceNamespaceKey.String(val)\n}\n\n// ServiceVersion returns an attribute KeyValue conforming to the\n// \"service.version\" semantic conventions. It represents the version string of\n// the service API or implementation. The format is not defined by these\n// conventions.\nfunc ServiceVersion(val string) attribute.KeyValue {\n\treturn ServiceVersionKey.String(val)\n}\n\n// Session is defined as the period of time encompassing all activities\n// performed by the application and the actions executed by the end user.\n// Consequently, a Session is represented as a collection of Logs, Events, and\n// Spans emitted by the Client Application throughout the Session's duration.\n// Each Session is assigned a unique identifier, which is included as an\n// attribute in the Logs, Events, and Spans generated during the Session's\n// lifecycle.\n// When a session reaches end of life, typically due to user inactivity or\n// session timeout, a new session identifier will be assigned. The previous\n// session identifier may be provided by the instrumentation so that telemetry\n// backends can link the two sessions.\nconst (\n\t// SessionIDKey is the attribute Key conforming to the \"session.id\"\n\t// semantic conventions. It represents a unique id to identify a session.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '00112233-4455-6677-8899-aabbccddeeff'\n\tSessionIDKey = attribute.Key(\"session.id\")\n\n\t// SessionPreviousIDKey is the attribute Key conforming to the\n\t// \"session.previous_id\" semantic conventions. It represents the previous\n\t// `session.id` for this user, when known.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '00112233-4455-6677-8899-aabbccddeeff'\n\tSessionPreviousIDKey = attribute.Key(\"session.previous_id\")\n)\n\n// SessionID returns an attribute KeyValue conforming to the \"session.id\"\n// semantic conventions. It represents a unique id to identify a session.\nfunc SessionID(val string) attribute.KeyValue {\n\treturn SessionIDKey.String(val)\n}\n\n// SessionPreviousID returns an attribute KeyValue conforming to the\n// \"session.previous_id\" semantic conventions. It represents the previous\n// `session.id` for this user, when known.\nfunc SessionPreviousID(val string) attribute.KeyValue {\n\treturn SessionPreviousIDKey.String(val)\n}\n\n// SignalR attributes\nconst (\n\t// SignalrConnectionStatusKey is the attribute Key conforming to the\n\t// \"signalr.connection.status\" semantic conventions. It represents the\n\t// signalR HTTP connection closure status.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'app_shutdown', 'timeout'\n\tSignalrConnectionStatusKey = attribute.Key(\"signalr.connection.status\")\n\n\t// SignalrTransportKey is the attribute Key conforming to the\n\t// \"signalr.transport\" semantic conventions. It represents the [SignalR\n\t// transport\n\t// type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'web_sockets', 'long_polling'\n\tSignalrTransportKey = attribute.Key(\"signalr.transport\")\n)\n\nvar (\n\t// The connection was closed normally\n\tSignalrConnectionStatusNormalClosure = SignalrConnectionStatusKey.String(\"normal_closure\")\n\t// The connection was closed due to a timeout\n\tSignalrConnectionStatusTimeout = SignalrConnectionStatusKey.String(\"timeout\")\n\t// The connection was closed because the app is shutting down\n\tSignalrConnectionStatusAppShutdown = SignalrConnectionStatusKey.String(\"app_shutdown\")\n)\n\nvar (\n\t// ServerSentEvents protocol\n\tSignalrTransportServerSentEvents = SignalrTransportKey.String(\"server_sent_events\")\n\t// LongPolling protocol\n\tSignalrTransportLongPolling = SignalrTransportKey.String(\"long_polling\")\n\t// WebSockets protocol\n\tSignalrTransportWebSockets = SignalrTransportKey.String(\"web_sockets\")\n)\n\n// These attributes may be used to describe the sender of a network\n// exchange/packet. These should be used when there is no client/server\n// relationship between the two sides, or when that relationship is unknown.\n// This covers low-level network interactions (e.g. packet tracing) where you\n// don't know if there was a connection or which side initiated it. This also\n// covers unidirectional UDP flows and peer-to-peer communication where the\n// \"user-facing\" surface of the protocol / API doesn't expose a clear notion of\n// client and server.\nconst (\n\t// SourceAddressKey is the attribute Key conforming to the \"source.address\"\n\t// semantic conventions. It represents the source address - domain name if\n\t// available without reverse DNS lookup; otherwise, IP address or Unix\n\t// domain socket name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'source.example.com', '10.1.2.80', '/tmp/my.sock'\n\t// Note: When observed from the destination side, and when communicating\n\t// through an intermediary, `source.address` SHOULD represent the source\n\t// address behind any intermediaries, for example proxies, if it's\n\t// available.\n\tSourceAddressKey = attribute.Key(\"source.address\")\n\n\t// SourcePortKey is the attribute Key conforming to the \"source.port\"\n\t// semantic conventions. It represents the source port number\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 3389, 2888\n\tSourcePortKey = attribute.Key(\"source.port\")\n)\n\n// SourceAddress returns an attribute KeyValue conforming to the\n// \"source.address\" semantic conventions. It represents the source address -\n// domain name if available without reverse DNS lookup; otherwise, IP address\n// or Unix domain socket name.\nfunc SourceAddress(val string) attribute.KeyValue {\n\treturn SourceAddressKey.String(val)\n}\n\n// SourcePort returns an attribute KeyValue conforming to the \"source.port\"\n// semantic conventions. It represents the source port number\nfunc SourcePort(val int) attribute.KeyValue {\n\treturn SourcePortKey.Int(val)\n}\n\n// Describes System attributes\nconst (\n\t// SystemDeviceKey is the attribute Key conforming to the \"system.device\"\n\t// semantic conventions. It represents the device identifier\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '(identifier)'\n\tSystemDeviceKey = attribute.Key(\"system.device\")\n)\n\n// SystemDevice returns an attribute KeyValue conforming to the\n// \"system.device\" semantic conventions. It represents the device identifier\nfunc SystemDevice(val string) attribute.KeyValue {\n\treturn SystemDeviceKey.String(val)\n}\n\n// Describes System CPU attributes\nconst (\n\t// SystemCPULogicalNumberKey is the attribute Key conforming to the\n\t// \"system.cpu.logical_number\" semantic conventions. It represents the\n\t// logical CPU number [0..n-1]\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 1\n\tSystemCPULogicalNumberKey = attribute.Key(\"system.cpu.logical_number\")\n\n\t// SystemCPUStateKey is the attribute Key conforming to the\n\t// \"system.cpu.state\" semantic conventions. It represents the state of the\n\t// CPU\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'idle', 'interrupt'\n\tSystemCPUStateKey = attribute.Key(\"system.cpu.state\")\n)\n\nvar (\n\t// user\n\tSystemCPUStateUser = SystemCPUStateKey.String(\"user\")\n\t// system\n\tSystemCPUStateSystem = SystemCPUStateKey.String(\"system\")\n\t// nice\n\tSystemCPUStateNice = SystemCPUStateKey.String(\"nice\")\n\t// idle\n\tSystemCPUStateIdle = SystemCPUStateKey.String(\"idle\")\n\t// iowait\n\tSystemCPUStateIowait = SystemCPUStateKey.String(\"iowait\")\n\t// interrupt\n\tSystemCPUStateInterrupt = SystemCPUStateKey.String(\"interrupt\")\n\t// steal\n\tSystemCPUStateSteal = SystemCPUStateKey.String(\"steal\")\n)\n\n// SystemCPULogicalNumber returns an attribute KeyValue conforming to the\n// \"system.cpu.logical_number\" semantic conventions. It represents the logical\n// CPU number [0..n-1]\nfunc SystemCPULogicalNumber(val int) attribute.KeyValue {\n\treturn SystemCPULogicalNumberKey.Int(val)\n}\n\n// Describes System Memory attributes\nconst (\n\t// SystemMemoryStateKey is the attribute Key conforming to the\n\t// \"system.memory.state\" semantic conventions. It represents the memory\n\t// state\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'free', 'cached'\n\tSystemMemoryStateKey = attribute.Key(\"system.memory.state\")\n)\n\nvar (\n\t// used\n\tSystemMemoryStateUsed = SystemMemoryStateKey.String(\"used\")\n\t// free\n\tSystemMemoryStateFree = SystemMemoryStateKey.String(\"free\")\n\t// shared\n\tSystemMemoryStateShared = SystemMemoryStateKey.String(\"shared\")\n\t// buffers\n\tSystemMemoryStateBuffers = SystemMemoryStateKey.String(\"buffers\")\n\t// cached\n\tSystemMemoryStateCached = SystemMemoryStateKey.String(\"cached\")\n)\n\n// Describes System Memory Paging attributes\nconst (\n\t// SystemPagingDirectionKey is the attribute Key conforming to the\n\t// \"system.paging.direction\" semantic conventions. It represents the paging\n\t// access direction\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'in'\n\tSystemPagingDirectionKey = attribute.Key(\"system.paging.direction\")\n\n\t// SystemPagingStateKey is the attribute Key conforming to the\n\t// \"system.paging.state\" semantic conventions. It represents the memory\n\t// paging state\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'free'\n\tSystemPagingStateKey = attribute.Key(\"system.paging.state\")\n\n\t// SystemPagingTypeKey is the attribute Key conforming to the\n\t// \"system.paging.type\" semantic conventions. It represents the memory\n\t// paging type\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'minor'\n\tSystemPagingTypeKey = attribute.Key(\"system.paging.type\")\n)\n\nvar (\n\t// in\n\tSystemPagingDirectionIn = SystemPagingDirectionKey.String(\"in\")\n\t// out\n\tSystemPagingDirectionOut = SystemPagingDirectionKey.String(\"out\")\n)\n\nvar (\n\t// used\n\tSystemPagingStateUsed = SystemPagingStateKey.String(\"used\")\n\t// free\n\tSystemPagingStateFree = SystemPagingStateKey.String(\"free\")\n)\n\nvar (\n\t// major\n\tSystemPagingTypeMajor = SystemPagingTypeKey.String(\"major\")\n\t// minor\n\tSystemPagingTypeMinor = SystemPagingTypeKey.String(\"minor\")\n)\n\n// Describes Filesystem attributes\nconst (\n\t// SystemFilesystemModeKey is the attribute Key conforming to the\n\t// \"system.filesystem.mode\" semantic conventions. It represents the\n\t// filesystem mode\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'rw, ro'\n\tSystemFilesystemModeKey = attribute.Key(\"system.filesystem.mode\")\n\n\t// SystemFilesystemMountpointKey is the attribute Key conforming to the\n\t// \"system.filesystem.mountpoint\" semantic conventions. It represents the\n\t// filesystem mount path\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/mnt/data'\n\tSystemFilesystemMountpointKey = attribute.Key(\"system.filesystem.mountpoint\")\n\n\t// SystemFilesystemStateKey is the attribute Key conforming to the\n\t// \"system.filesystem.state\" semantic conventions. It represents the\n\t// filesystem state\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'used'\n\tSystemFilesystemStateKey = attribute.Key(\"system.filesystem.state\")\n\n\t// SystemFilesystemTypeKey is the attribute Key conforming to the\n\t// \"system.filesystem.type\" semantic conventions. It represents the\n\t// filesystem type\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'ext4'\n\tSystemFilesystemTypeKey = attribute.Key(\"system.filesystem.type\")\n)\n\nvar (\n\t// used\n\tSystemFilesystemStateUsed = SystemFilesystemStateKey.String(\"used\")\n\t// free\n\tSystemFilesystemStateFree = SystemFilesystemStateKey.String(\"free\")\n\t// reserved\n\tSystemFilesystemStateReserved = SystemFilesystemStateKey.String(\"reserved\")\n)\n\nvar (\n\t// fat32\n\tSystemFilesystemTypeFat32 = SystemFilesystemTypeKey.String(\"fat32\")\n\t// exfat\n\tSystemFilesystemTypeExfat = SystemFilesystemTypeKey.String(\"exfat\")\n\t// ntfs\n\tSystemFilesystemTypeNtfs = SystemFilesystemTypeKey.String(\"ntfs\")\n\t// refs\n\tSystemFilesystemTypeRefs = SystemFilesystemTypeKey.String(\"refs\")\n\t// hfsplus\n\tSystemFilesystemTypeHfsplus = SystemFilesystemTypeKey.String(\"hfsplus\")\n\t// ext4\n\tSystemFilesystemTypeExt4 = SystemFilesystemTypeKey.String(\"ext4\")\n)\n\n// SystemFilesystemMode returns an attribute KeyValue conforming to the\n// \"system.filesystem.mode\" semantic conventions. It represents the filesystem\n// mode\nfunc SystemFilesystemMode(val string) attribute.KeyValue {\n\treturn SystemFilesystemModeKey.String(val)\n}\n\n// SystemFilesystemMountpoint returns an attribute KeyValue conforming to\n// the \"system.filesystem.mountpoint\" semantic conventions. It represents the\n// filesystem mount path\nfunc SystemFilesystemMountpoint(val string) attribute.KeyValue {\n\treturn SystemFilesystemMountpointKey.String(val)\n}\n\n// Describes Network attributes\nconst (\n\t// SystemNetworkStateKey is the attribute Key conforming to the\n\t// \"system.network.state\" semantic conventions. It represents a stateless\n\t// protocol MUST NOT set this attribute\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'close_wait'\n\tSystemNetworkStateKey = attribute.Key(\"system.network.state\")\n)\n\nvar (\n\t// close\n\tSystemNetworkStateClose = SystemNetworkStateKey.String(\"close\")\n\t// close_wait\n\tSystemNetworkStateCloseWait = SystemNetworkStateKey.String(\"close_wait\")\n\t// closing\n\tSystemNetworkStateClosing = SystemNetworkStateKey.String(\"closing\")\n\t// delete\n\tSystemNetworkStateDelete = SystemNetworkStateKey.String(\"delete\")\n\t// established\n\tSystemNetworkStateEstablished = SystemNetworkStateKey.String(\"established\")\n\t// fin_wait_1\n\tSystemNetworkStateFinWait1 = SystemNetworkStateKey.String(\"fin_wait_1\")\n\t// fin_wait_2\n\tSystemNetworkStateFinWait2 = SystemNetworkStateKey.String(\"fin_wait_2\")\n\t// last_ack\n\tSystemNetworkStateLastAck = SystemNetworkStateKey.String(\"last_ack\")\n\t// listen\n\tSystemNetworkStateListen = SystemNetworkStateKey.String(\"listen\")\n\t// syn_recv\n\tSystemNetworkStateSynRecv = SystemNetworkStateKey.String(\"syn_recv\")\n\t// syn_sent\n\tSystemNetworkStateSynSent = SystemNetworkStateKey.String(\"syn_sent\")\n\t// time_wait\n\tSystemNetworkStateTimeWait = SystemNetworkStateKey.String(\"time_wait\")\n)\n\n// Describes System Process attributes\nconst (\n\t// SystemProcessStatusKey is the attribute Key conforming to the\n\t// \"system.process.status\" semantic conventions. It represents the process\n\t// state, e.g., [Linux Process State\n\t// Codes](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES)\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'running'\n\tSystemProcessStatusKey = attribute.Key(\"system.process.status\")\n)\n\nvar (\n\t// running\n\tSystemProcessStatusRunning = SystemProcessStatusKey.String(\"running\")\n\t// sleeping\n\tSystemProcessStatusSleeping = SystemProcessStatusKey.String(\"sleeping\")\n\t// stopped\n\tSystemProcessStatusStopped = SystemProcessStatusKey.String(\"stopped\")\n\t// defunct\n\tSystemProcessStatusDefunct = SystemProcessStatusKey.String(\"defunct\")\n)\n\n// Attributes for telemetry SDK.\nconst (\n\t// TelemetrySDKLanguageKey is the attribute Key conforming to the\n\t// \"telemetry.sdk.language\" semantic conventions. It represents the\n\t// language of the telemetry SDK.\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Required\n\t// Stability: stable\n\tTelemetrySDKLanguageKey = attribute.Key(\"telemetry.sdk.language\")\n\n\t// TelemetrySDKNameKey is the attribute Key conforming to the\n\t// \"telemetry.sdk.name\" semantic conventions. It represents the name of the\n\t// telemetry SDK as defined above.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: 'opentelemetry'\n\t// Note: The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute\n\t// to `opentelemetry`.\n\t// If another SDK, like a fork or a vendor-provided implementation, is\n\t// used, this SDK MUST set the\n\t// `telemetry.sdk.name` attribute to the fully-qualified class or module\n\t// name of this SDK's main entry point\n\t// or another suitable identifier depending on the language.\n\t// The identifier `opentelemetry` is reserved and MUST NOT be used in this\n\t// case.\n\t// All custom identifiers SHOULD be stable across different versions of an\n\t// implementation.\n\tTelemetrySDKNameKey = attribute.Key(\"telemetry.sdk.name\")\n\n\t// TelemetrySDKVersionKey is the attribute Key conforming to the\n\t// \"telemetry.sdk.version\" semantic conventions. It represents the version\n\t// string of the telemetry SDK.\n\t//\n\t// Type: string\n\t// RequirementLevel: Required\n\t// Stability: stable\n\t// Examples: '1.2.3'\n\tTelemetrySDKVersionKey = attribute.Key(\"telemetry.sdk.version\")\n\n\t// TelemetryDistroNameKey is the attribute Key conforming to the\n\t// \"telemetry.distro.name\" semantic conventions. It represents the name of\n\t// the auto instrumentation agent or distribution, if used.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'parts-unlimited-java'\n\t// Note: Official auto instrumentation agents and distributions SHOULD set\n\t// the `telemetry.distro.name` attribute to\n\t// a string starting with `opentelemetry-`, e.g.\n\t// `opentelemetry-java-instrumentation`.\n\tTelemetryDistroNameKey = attribute.Key(\"telemetry.distro.name\")\n\n\t// TelemetryDistroVersionKey is the attribute Key conforming to the\n\t// \"telemetry.distro.version\" semantic conventions. It represents the\n\t// version string of the auto instrumentation agent or distribution, if\n\t// used.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1.2.3'\n\tTelemetryDistroVersionKey = attribute.Key(\"telemetry.distro.version\")\n)\n\nvar (\n\t// cpp\n\tTelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String(\"cpp\")\n\t// dotnet\n\tTelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String(\"dotnet\")\n\t// erlang\n\tTelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String(\"erlang\")\n\t// go\n\tTelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String(\"go\")\n\t// java\n\tTelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String(\"java\")\n\t// nodejs\n\tTelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String(\"nodejs\")\n\t// php\n\tTelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String(\"php\")\n\t// python\n\tTelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String(\"python\")\n\t// ruby\n\tTelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String(\"ruby\")\n\t// rust\n\tTelemetrySDKLanguageRust = TelemetrySDKLanguageKey.String(\"rust\")\n\t// swift\n\tTelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String(\"swift\")\n\t// webjs\n\tTelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String(\"webjs\")\n)\n\n// TelemetrySDKName returns an attribute KeyValue conforming to the\n// \"telemetry.sdk.name\" semantic conventions. It represents the name of the\n// telemetry SDK as defined above.\nfunc TelemetrySDKName(val string) attribute.KeyValue {\n\treturn TelemetrySDKNameKey.String(val)\n}\n\n// TelemetrySDKVersion returns an attribute KeyValue conforming to the\n// \"telemetry.sdk.version\" semantic conventions. It represents the version\n// string of the telemetry SDK.\nfunc TelemetrySDKVersion(val string) attribute.KeyValue {\n\treturn TelemetrySDKVersionKey.String(val)\n}\n\n// TelemetryDistroName returns an attribute KeyValue conforming to the\n// \"telemetry.distro.name\" semantic conventions. It represents the name of the\n// auto instrumentation agent or distribution, if used.\nfunc TelemetryDistroName(val string) attribute.KeyValue {\n\treturn TelemetryDistroNameKey.String(val)\n}\n\n// TelemetryDistroVersion returns an attribute KeyValue conforming to the\n// \"telemetry.distro.version\" semantic conventions. It represents the version\n// string of the auto instrumentation agent or distribution, if used.\nfunc TelemetryDistroVersion(val string) attribute.KeyValue {\n\treturn TelemetryDistroVersionKey.String(val)\n}\n\n// These attributes may be used for any operation to store information about a\n// thread that started a span.\nconst (\n\t// ThreadIDKey is the attribute Key conforming to the \"thread.id\" semantic\n\t// conventions. It represents the current \"managed\" thread ID (as opposed\n\t// to OS thread ID).\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 42\n\tThreadIDKey = attribute.Key(\"thread.id\")\n\n\t// ThreadNameKey is the attribute Key conforming to the \"thread.name\"\n\t// semantic conventions. It represents the current thread name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'main'\n\tThreadNameKey = attribute.Key(\"thread.name\")\n)\n\n// ThreadID returns an attribute KeyValue conforming to the \"thread.id\"\n// semantic conventions. It represents the current \"managed\" thread ID (as\n// opposed to OS thread ID).\nfunc ThreadID(val int) attribute.KeyValue {\n\treturn ThreadIDKey.Int(val)\n}\n\n// ThreadName returns an attribute KeyValue conforming to the \"thread.name\"\n// semantic conventions. It represents the current thread name.\nfunc ThreadName(val string) attribute.KeyValue {\n\treturn ThreadNameKey.String(val)\n}\n\n// Semantic convention attributes in the TLS namespace.\nconst (\n\t// TLSCipherKey is the attribute Key conforming to the \"tls.cipher\"\n\t// semantic conventions. It represents the string indicating the\n\t// [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5)\n\t// used during the current connection.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'TLS_RSA_WITH_3DES_EDE_CBC_SHA',\n\t// 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256'\n\t// Note: The values allowed for `tls.cipher` MUST be one of the\n\t// `Descriptions` of the [registered TLS Cipher\n\t// Suits](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#table-tls-parameters-4).\n\tTLSCipherKey = attribute.Key(\"tls.cipher\")\n\n\t// TLSClientCertificateKey is the attribute Key conforming to the\n\t// \"tls.client.certificate\" semantic conventions. It represents the\n\t// pEM-encoded stand-alone certificate offered by the client. This is\n\t// usually mutually-exclusive of `client.certificate_chain` since this\n\t// value also exists in that list.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'MII...'\n\tTLSClientCertificateKey = attribute.Key(\"tls.client.certificate\")\n\n\t// TLSClientCertificateChainKey is the attribute Key conforming to the\n\t// \"tls.client.certificate_chain\" semantic conventions. It represents the\n\t// array of PEM-encoded certificates that make up the certificate chain\n\t// offered by the client. This is usually mutually-exclusive of\n\t// `client.certificate` since that value should be the first certificate in\n\t// the chain.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'MII...', 'MI...'\n\tTLSClientCertificateChainKey = attribute.Key(\"tls.client.certificate_chain\")\n\n\t// TLSClientHashMd5Key is the attribute Key conforming to the\n\t// \"tls.client.hash.md5\" semantic conventions. It represents the\n\t// certificate fingerprint using the MD5 digest of DER-encoded version of\n\t// certificate offered by the client. For consistency with other hash\n\t// values, this value should be formatted as an uppercase hash.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC'\n\tTLSClientHashMd5Key = attribute.Key(\"tls.client.hash.md5\")\n\n\t// TLSClientHashSha1Key is the attribute Key conforming to the\n\t// \"tls.client.hash.sha1\" semantic conventions. It represents the\n\t// certificate fingerprint using the SHA1 digest of DER-encoded version of\n\t// certificate offered by the client. For consistency with other hash\n\t// values, this value should be formatted as an uppercase hash.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A'\n\tTLSClientHashSha1Key = attribute.Key(\"tls.client.hash.sha1\")\n\n\t// TLSClientHashSha256Key is the attribute Key conforming to the\n\t// \"tls.client.hash.sha256\" semantic conventions. It represents the\n\t// certificate fingerprint using the SHA256 digest of DER-encoded version\n\t// of certificate offered by the client. For consistency with other hash\n\t// values, this value should be formatted as an uppercase hash.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0'\n\tTLSClientHashSha256Key = attribute.Key(\"tls.client.hash.sha256\")\n\n\t// TLSClientIssuerKey is the attribute Key conforming to the\n\t// \"tls.client.issuer\" semantic conventions. It represents the\n\t// distinguished name of\n\t// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6)\n\t// of the issuer of the x.509 certificate presented by the client.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example,\n\t// DC=com'\n\tTLSClientIssuerKey = attribute.Key(\"tls.client.issuer\")\n\n\t// TLSClientJa3Key is the attribute Key conforming to the \"tls.client.ja3\"\n\t// semantic conventions. It represents a hash that identifies clients based\n\t// on how they perform an SSL/TLS handshake.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'd4e5b18d6b55c71272893221c96ba240'\n\tTLSClientJa3Key = attribute.Key(\"tls.client.ja3\")\n\n\t// TLSClientNotAfterKey is the attribute Key conforming to the\n\t// \"tls.client.not_after\" semantic conventions. It represents the date/Time\n\t// indicating when client certificate is no longer considered valid.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2021-01-01T00:00:00.000Z'\n\tTLSClientNotAfterKey = attribute.Key(\"tls.client.not_after\")\n\n\t// TLSClientNotBeforeKey is the attribute Key conforming to the\n\t// \"tls.client.not_before\" semantic conventions. It represents the\n\t// date/Time indicating when client certificate is first considered valid.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1970-01-01T00:00:00.000Z'\n\tTLSClientNotBeforeKey = attribute.Key(\"tls.client.not_before\")\n\n\t// TLSClientServerNameKey is the attribute Key conforming to the\n\t// \"tls.client.server_name\" semantic conventions. It represents the also\n\t// called an SNI, this tells the server which hostname to which the client\n\t// is attempting to connect to.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'opentelemetry.io'\n\tTLSClientServerNameKey = attribute.Key(\"tls.client.server_name\")\n\n\t// TLSClientSubjectKey is the attribute Key conforming to the\n\t// \"tls.client.subject\" semantic conventions. It represents the\n\t// distinguished name of subject of the x.509 certificate presented by the\n\t// client.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'CN=myclient, OU=Documentation Team, DC=example, DC=com'\n\tTLSClientSubjectKey = attribute.Key(\"tls.client.subject\")\n\n\t// TLSClientSupportedCiphersKey is the attribute Key conforming to the\n\t// \"tls.client.supported_ciphers\" semantic conventions. It represents the\n\t// array of ciphers offered by the client during the client hello.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '\"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\n\t// \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\", \"...\"'\n\tTLSClientSupportedCiphersKey = attribute.Key(\"tls.client.supported_ciphers\")\n\n\t// TLSCurveKey is the attribute Key conforming to the \"tls.curve\" semantic\n\t// conventions. It represents the string indicating the curve used for the\n\t// given cipher, when applicable\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'secp256r1'\n\tTLSCurveKey = attribute.Key(\"tls.curve\")\n\n\t// TLSEstablishedKey is the attribute Key conforming to the\n\t// \"tls.established\" semantic conventions. It represents the boolean flag\n\t// indicating if the TLS negotiation was successful and transitioned to an\n\t// encrypted tunnel.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: True\n\tTLSEstablishedKey = attribute.Key(\"tls.established\")\n\n\t// TLSNextProtocolKey is the attribute Key conforming to the\n\t// \"tls.next_protocol\" semantic conventions. It represents the string\n\t// indicating the protocol being tunneled. Per the values in the [IANA\n\t// registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids),\n\t// this string should be lower case.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'http/1.1'\n\tTLSNextProtocolKey = attribute.Key(\"tls.next_protocol\")\n\n\t// TLSProtocolNameKey is the attribute Key conforming to the\n\t// \"tls.protocol.name\" semantic conventions. It represents the normalized\n\t// lowercase protocol name parsed from original string of the negotiated\n\t// [SSL/TLS protocol\n\t// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES)\n\t//\n\t// Type: Enum\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\tTLSProtocolNameKey = attribute.Key(\"tls.protocol.name\")\n\n\t// TLSProtocolVersionKey is the attribute Key conforming to the\n\t// \"tls.protocol.version\" semantic conventions. It represents the numeric\n\t// part of the version parsed from the original string of the negotiated\n\t// [SSL/TLS protocol\n\t// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES)\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1.2', '3'\n\tTLSProtocolVersionKey = attribute.Key(\"tls.protocol.version\")\n\n\t// TLSResumedKey is the attribute Key conforming to the \"tls.resumed\"\n\t// semantic conventions. It represents the boolean flag indicating if this\n\t// TLS connection was resumed from an existing TLS negotiation.\n\t//\n\t// Type: boolean\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: True\n\tTLSResumedKey = attribute.Key(\"tls.resumed\")\n\n\t// TLSServerCertificateKey is the attribute Key conforming to the\n\t// \"tls.server.certificate\" semantic conventions. It represents the\n\t// pEM-encoded stand-alone certificate offered by the server. This is\n\t// usually mutually-exclusive of `server.certificate_chain` since this\n\t// value also exists in that list.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'MII...'\n\tTLSServerCertificateKey = attribute.Key(\"tls.server.certificate\")\n\n\t// TLSServerCertificateChainKey is the attribute Key conforming to the\n\t// \"tls.server.certificate_chain\" semantic conventions. It represents the\n\t// array of PEM-encoded certificates that make up the certificate chain\n\t// offered by the server. This is usually mutually-exclusive of\n\t// `server.certificate` since that value should be the first certificate in\n\t// the chain.\n\t//\n\t// Type: string[]\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'MII...', 'MI...'\n\tTLSServerCertificateChainKey = attribute.Key(\"tls.server.certificate_chain\")\n\n\t// TLSServerHashMd5Key is the attribute Key conforming to the\n\t// \"tls.server.hash.md5\" semantic conventions. It represents the\n\t// certificate fingerprint using the MD5 digest of DER-encoded version of\n\t// certificate offered by the server. For consistency with other hash\n\t// values, this value should be formatted as an uppercase hash.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC'\n\tTLSServerHashMd5Key = attribute.Key(\"tls.server.hash.md5\")\n\n\t// TLSServerHashSha1Key is the attribute Key conforming to the\n\t// \"tls.server.hash.sha1\" semantic conventions. It represents the\n\t// certificate fingerprint using the SHA1 digest of DER-encoded version of\n\t// certificate offered by the server. For consistency with other hash\n\t// values, this value should be formatted as an uppercase hash.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A'\n\tTLSServerHashSha1Key = attribute.Key(\"tls.server.hash.sha1\")\n\n\t// TLSServerHashSha256Key is the attribute Key conforming to the\n\t// \"tls.server.hash.sha256\" semantic conventions. It represents the\n\t// certificate fingerprint using the SHA256 digest of DER-encoded version\n\t// of certificate offered by the server. For consistency with other hash\n\t// values, this value should be formatted as an uppercase hash.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples:\n\t// '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0'\n\tTLSServerHashSha256Key = attribute.Key(\"tls.server.hash.sha256\")\n\n\t// TLSServerIssuerKey is the attribute Key conforming to the\n\t// \"tls.server.issuer\" semantic conventions. It represents the\n\t// distinguished name of\n\t// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6)\n\t// of the issuer of the x.509 certificate presented by the client.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example,\n\t// DC=com'\n\tTLSServerIssuerKey = attribute.Key(\"tls.server.issuer\")\n\n\t// TLSServerJa3sKey is the attribute Key conforming to the\n\t// \"tls.server.ja3s\" semantic conventions. It represents a hash that\n\t// identifies servers based on how they perform an SSL/TLS handshake.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'd4e5b18d6b55c71272893221c96ba240'\n\tTLSServerJa3sKey = attribute.Key(\"tls.server.ja3s\")\n\n\t// TLSServerNotAfterKey is the attribute Key conforming to the\n\t// \"tls.server.not_after\" semantic conventions. It represents the date/Time\n\t// indicating when server certificate is no longer considered valid.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '2021-01-01T00:00:00.000Z'\n\tTLSServerNotAfterKey = attribute.Key(\"tls.server.not_after\")\n\n\t// TLSServerNotBeforeKey is the attribute Key conforming to the\n\t// \"tls.server.not_before\" semantic conventions. It represents the\n\t// date/Time indicating when server certificate is first considered valid.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '1970-01-01T00:00:00.000Z'\n\tTLSServerNotBeforeKey = attribute.Key(\"tls.server.not_before\")\n\n\t// TLSServerSubjectKey is the attribute Key conforming to the\n\t// \"tls.server.subject\" semantic conventions. It represents the\n\t// distinguished name of subject of the x.509 certificate presented by the\n\t// server.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'CN=myserver, OU=Documentation Team, DC=example, DC=com'\n\tTLSServerSubjectKey = attribute.Key(\"tls.server.subject\")\n)\n\nvar (\n\t// ssl\n\tTLSProtocolNameSsl = TLSProtocolNameKey.String(\"ssl\")\n\t// tls\n\tTLSProtocolNameTLS = TLSProtocolNameKey.String(\"tls\")\n)\n\n// TLSCipher returns an attribute KeyValue conforming to the \"tls.cipher\"\n// semantic conventions. It represents the string indicating the\n// [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) used\n// during the current connection.\nfunc TLSCipher(val string) attribute.KeyValue {\n\treturn TLSCipherKey.String(val)\n}\n\n// TLSClientCertificate returns an attribute KeyValue conforming to the\n// \"tls.client.certificate\" semantic conventions. It represents the pEM-encoded\n// stand-alone certificate offered by the client. This is usually\n// mutually-exclusive of `client.certificate_chain` since this value also\n// exists in that list.\nfunc TLSClientCertificate(val string) attribute.KeyValue {\n\treturn TLSClientCertificateKey.String(val)\n}\n\n// TLSClientCertificateChain returns an attribute KeyValue conforming to the\n// \"tls.client.certificate_chain\" semantic conventions. It represents the array\n// of PEM-encoded certificates that make up the certificate chain offered by\n// the client. This is usually mutually-exclusive of `client.certificate` since\n// that value should be the first certificate in the chain.\nfunc TLSClientCertificateChain(val ...string) attribute.KeyValue {\n\treturn TLSClientCertificateChainKey.StringSlice(val)\n}\n\n// TLSClientHashMd5 returns an attribute KeyValue conforming to the\n// \"tls.client.hash.md5\" semantic conventions. It represents the certificate\n// fingerprint using the MD5 digest of DER-encoded version of certificate\n// offered by the client. For consistency with other hash values, this value\n// should be formatted as an uppercase hash.\nfunc TLSClientHashMd5(val string) attribute.KeyValue {\n\treturn TLSClientHashMd5Key.String(val)\n}\n\n// TLSClientHashSha1 returns an attribute KeyValue conforming to the\n// \"tls.client.hash.sha1\" semantic conventions. It represents the certificate\n// fingerprint using the SHA1 digest of DER-encoded version of certificate\n// offered by the client. For consistency with other hash values, this value\n// should be formatted as an uppercase hash.\nfunc TLSClientHashSha1(val string) attribute.KeyValue {\n\treturn TLSClientHashSha1Key.String(val)\n}\n\n// TLSClientHashSha256 returns an attribute KeyValue conforming to the\n// \"tls.client.hash.sha256\" semantic conventions. It represents the certificate\n// fingerprint using the SHA256 digest of DER-encoded version of certificate\n// offered by the client. For consistency with other hash values, this value\n// should be formatted as an uppercase hash.\nfunc TLSClientHashSha256(val string) attribute.KeyValue {\n\treturn TLSClientHashSha256Key.String(val)\n}\n\n// TLSClientIssuer returns an attribute KeyValue conforming to the\n// \"tls.client.issuer\" semantic conventions. It represents the distinguished\n// name of\n// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of\n// the issuer of the x.509 certificate presented by the client.\nfunc TLSClientIssuer(val string) attribute.KeyValue {\n\treturn TLSClientIssuerKey.String(val)\n}\n\n// TLSClientJa3 returns an attribute KeyValue conforming to the\n// \"tls.client.ja3\" semantic conventions. It represents a hash that identifies\n// clients based on how they perform an SSL/TLS handshake.\nfunc TLSClientJa3(val string) attribute.KeyValue {\n\treturn TLSClientJa3Key.String(val)\n}\n\n// TLSClientNotAfter returns an attribute KeyValue conforming to the\n// \"tls.client.not_after\" semantic conventions. It represents the date/Time\n// indicating when client certificate is no longer considered valid.\nfunc TLSClientNotAfter(val string) attribute.KeyValue {\n\treturn TLSClientNotAfterKey.String(val)\n}\n\n// TLSClientNotBefore returns an attribute KeyValue conforming to the\n// \"tls.client.not_before\" semantic conventions. It represents the date/Time\n// indicating when client certificate is first considered valid.\nfunc TLSClientNotBefore(val string) attribute.KeyValue {\n\treturn TLSClientNotBeforeKey.String(val)\n}\n\n// TLSClientServerName returns an attribute KeyValue conforming to the\n// \"tls.client.server_name\" semantic conventions. It represents the also called\n// an SNI, this tells the server which hostname to which the client is\n// attempting to connect to.\nfunc TLSClientServerName(val string) attribute.KeyValue {\n\treturn TLSClientServerNameKey.String(val)\n}\n\n// TLSClientSubject returns an attribute KeyValue conforming to the\n// \"tls.client.subject\" semantic conventions. It represents the distinguished\n// name of subject of the x.509 certificate presented by the client.\nfunc TLSClientSubject(val string) attribute.KeyValue {\n\treturn TLSClientSubjectKey.String(val)\n}\n\n// TLSClientSupportedCiphers returns an attribute KeyValue conforming to the\n// \"tls.client.supported_ciphers\" semantic conventions. It represents the array\n// of ciphers offered by the client during the client hello.\nfunc TLSClientSupportedCiphers(val ...string) attribute.KeyValue {\n\treturn TLSClientSupportedCiphersKey.StringSlice(val)\n}\n\n// TLSCurve returns an attribute KeyValue conforming to the \"tls.curve\"\n// semantic conventions. It represents the string indicating the curve used for\n// the given cipher, when applicable\nfunc TLSCurve(val string) attribute.KeyValue {\n\treturn TLSCurveKey.String(val)\n}\n\n// TLSEstablished returns an attribute KeyValue conforming to the\n// \"tls.established\" semantic conventions. It represents the boolean flag\n// indicating if the TLS negotiation was successful and transitioned to an\n// encrypted tunnel.\nfunc TLSEstablished(val bool) attribute.KeyValue {\n\treturn TLSEstablishedKey.Bool(val)\n}\n\n// TLSNextProtocol returns an attribute KeyValue conforming to the\n// \"tls.next_protocol\" semantic conventions. It represents the string\n// indicating the protocol being tunneled. Per the values in the [IANA\n// registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids),\n// this string should be lower case.\nfunc TLSNextProtocol(val string) attribute.KeyValue {\n\treturn TLSNextProtocolKey.String(val)\n}\n\n// TLSProtocolVersion returns an attribute KeyValue conforming to the\n// \"tls.protocol.version\" semantic conventions. It represents the numeric part\n// of the version parsed from the original string of the negotiated [SSL/TLS\n// protocol\n// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES)\nfunc TLSProtocolVersion(val string) attribute.KeyValue {\n\treturn TLSProtocolVersionKey.String(val)\n}\n\n// TLSResumed returns an attribute KeyValue conforming to the \"tls.resumed\"\n// semantic conventions. It represents the boolean flag indicating if this TLS\n// connection was resumed from an existing TLS negotiation.\nfunc TLSResumed(val bool) attribute.KeyValue {\n\treturn TLSResumedKey.Bool(val)\n}\n\n// TLSServerCertificate returns an attribute KeyValue conforming to the\n// \"tls.server.certificate\" semantic conventions. It represents the pEM-encoded\n// stand-alone certificate offered by the server. This is usually\n// mutually-exclusive of `server.certificate_chain` since this value also\n// exists in that list.\nfunc TLSServerCertificate(val string) attribute.KeyValue {\n\treturn TLSServerCertificateKey.String(val)\n}\n\n// TLSServerCertificateChain returns an attribute KeyValue conforming to the\n// \"tls.server.certificate_chain\" semantic conventions. It represents the array\n// of PEM-encoded certificates that make up the certificate chain offered by\n// the server. This is usually mutually-exclusive of `server.certificate` since\n// that value should be the first certificate in the chain.\nfunc TLSServerCertificateChain(val ...string) attribute.KeyValue {\n\treturn TLSServerCertificateChainKey.StringSlice(val)\n}\n\n// TLSServerHashMd5 returns an attribute KeyValue conforming to the\n// \"tls.server.hash.md5\" semantic conventions. It represents the certificate\n// fingerprint using the MD5 digest of DER-encoded version of certificate\n// offered by the server. For consistency with other hash values, this value\n// should be formatted as an uppercase hash.\nfunc TLSServerHashMd5(val string) attribute.KeyValue {\n\treturn TLSServerHashMd5Key.String(val)\n}\n\n// TLSServerHashSha1 returns an attribute KeyValue conforming to the\n// \"tls.server.hash.sha1\" semantic conventions. It represents the certificate\n// fingerprint using the SHA1 digest of DER-encoded version of certificate\n// offered by the server. For consistency with other hash values, this value\n// should be formatted as an uppercase hash.\nfunc TLSServerHashSha1(val string) attribute.KeyValue {\n\treturn TLSServerHashSha1Key.String(val)\n}\n\n// TLSServerHashSha256 returns an attribute KeyValue conforming to the\n// \"tls.server.hash.sha256\" semantic conventions. It represents the certificate\n// fingerprint using the SHA256 digest of DER-encoded version of certificate\n// offered by the server. For consistency with other hash values, this value\n// should be formatted as an uppercase hash.\nfunc TLSServerHashSha256(val string) attribute.KeyValue {\n\treturn TLSServerHashSha256Key.String(val)\n}\n\n// TLSServerIssuer returns an attribute KeyValue conforming to the\n// \"tls.server.issuer\" semantic conventions. It represents the distinguished\n// name of\n// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of\n// the issuer of the x.509 certificate presented by the client.\nfunc TLSServerIssuer(val string) attribute.KeyValue {\n\treturn TLSServerIssuerKey.String(val)\n}\n\n// TLSServerJa3s returns an attribute KeyValue conforming to the\n// \"tls.server.ja3s\" semantic conventions. It represents a hash that identifies\n// servers based on how they perform an SSL/TLS handshake.\nfunc TLSServerJa3s(val string) attribute.KeyValue {\n\treturn TLSServerJa3sKey.String(val)\n}\n\n// TLSServerNotAfter returns an attribute KeyValue conforming to the\n// \"tls.server.not_after\" semantic conventions. It represents the date/Time\n// indicating when server certificate is no longer considered valid.\nfunc TLSServerNotAfter(val string) attribute.KeyValue {\n\treturn TLSServerNotAfterKey.String(val)\n}\n\n// TLSServerNotBefore returns an attribute KeyValue conforming to the\n// \"tls.server.not_before\" semantic conventions. It represents the date/Time\n// indicating when server certificate is first considered valid.\nfunc TLSServerNotBefore(val string) attribute.KeyValue {\n\treturn TLSServerNotBeforeKey.String(val)\n}\n\n// TLSServerSubject returns an attribute KeyValue conforming to the\n// \"tls.server.subject\" semantic conventions. It represents the distinguished\n// name of subject of the x.509 certificate presented by the server.\nfunc TLSServerSubject(val string) attribute.KeyValue {\n\treturn TLSServerSubjectKey.String(val)\n}\n\n// Attributes describing URL.\nconst (\n\t// URLDomainKey is the attribute Key conforming to the \"url.domain\"\n\t// semantic conventions. It represents the domain extracted from the\n\t// `url.full`, such as \"opentelemetry.io\".\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'www.foo.bar', 'opentelemetry.io', '3.12.167.2',\n\t// '[1080:0:0:0:8:800:200C:417A]'\n\t// Note: In some cases a URL may refer to an IP and/or port directly,\n\t// without a domain name. In this case, the IP address would go to the\n\t// domain field. If the URL contains a [literal IPv6\n\t// address](https://www.rfc-editor.org/rfc/rfc2732#section-2) enclosed by\n\t// `[` and `]`, the `[` and `]` characters should also be captured in the\n\t// domain field.\n\tURLDomainKey = attribute.Key(\"url.domain\")\n\n\t// URLExtensionKey is the attribute Key conforming to the \"url.extension\"\n\t// semantic conventions. It represents the file extension extracted from\n\t// the `url.full`, excluding the leading dot.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'png', 'gz'\n\t// Note: The file extension is only set if it exists, as not every url has\n\t// a file extension. When the file name has multiple extensions\n\t// `example.tar.gz`, only the last one should be captured `gz`, not\n\t// `tar.gz`.\n\tURLExtensionKey = attribute.Key(\"url.extension\")\n\n\t// URLFragmentKey is the attribute Key conforming to the \"url.fragment\"\n\t// semantic conventions. It represents the [URI\n\t// fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'SemConv'\n\tURLFragmentKey = attribute.Key(\"url.fragment\")\n\n\t// URLFullKey is the attribute Key conforming to the \"url.full\" semantic\n\t// conventions. It represents the absolute URL describing a network\n\t// resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv',\n\t// '//localhost'\n\t// Note: For network calls, URL usually has\n\t// `scheme://host[:port][path][?query][#fragment]` format, where the\n\t// fragment is not transmitted over HTTP, but if it is known, it SHOULD be\n\t// included nevertheless.\n\t// `url.full` MUST NOT contain credentials passed via URL in form of\n\t// `https://username:password@www.example.com/`. In such case username and\n\t// password SHOULD be redacted and attribute's value SHOULD be\n\t// `https://REDACTED:REDACTED@www.example.com/`.\n\t// `url.full` SHOULD capture the absolute URL when it is available (or can\n\t// be reconstructed). Sensitive content provided in `url.full` SHOULD be\n\t// scrubbed when instrumentations can identify it.\n\tURLFullKey = attribute.Key(\"url.full\")\n\n\t// URLOriginalKey is the attribute Key conforming to the \"url.original\"\n\t// semantic conventions. It represents the unmodified original URL as seen\n\t// in the event source.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv',\n\t// 'search?q=OpenTelemetry'\n\t// Note: In network monitoring, the observed URL may be a full URL, whereas\n\t// in access logs, the URL is often just represented as a path. This field\n\t// is meant to represent the URL as it was observed, complete or not.\n\t// `url.original` might contain credentials passed via URL in form of\n\t// `https://username:password@www.example.com/`. In such case password and\n\t// username SHOULD NOT be redacted and attribute's value SHOULD remain the\n\t// same.\n\tURLOriginalKey = attribute.Key(\"url.original\")\n\n\t// URLPathKey is the attribute Key conforming to the \"url.path\" semantic\n\t// conventions. It represents the [URI\n\t// path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: '/search'\n\t// Note: Sensitive content provided in `url.path` SHOULD be scrubbed when\n\t// instrumentations can identify it.\n\tURLPathKey = attribute.Key(\"url.path\")\n\n\t// URLPortKey is the attribute Key conforming to the \"url.port\" semantic\n\t// conventions. It represents the port extracted from the `url.full`\n\t//\n\t// Type: int\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 443\n\tURLPortKey = attribute.Key(\"url.port\")\n\n\t// URLQueryKey is the attribute Key conforming to the \"url.query\" semantic\n\t// conventions. It represents the [URI\n\t// query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'q=OpenTelemetry'\n\t// Note: Sensitive content provided in `url.query` SHOULD be scrubbed when\n\t// instrumentations can identify it.\n\tURLQueryKey = attribute.Key(\"url.query\")\n\n\t// URLRegisteredDomainKey is the attribute Key conforming to the\n\t// \"url.registered_domain\" semantic conventions. It represents the highest\n\t// registered url domain, stripped of the subdomain.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'example.com', 'foo.co.uk'\n\t// Note: This value can be determined precisely with the [public suffix\n\t// list](http://publicsuffix.org). For example, the registered domain for\n\t// `foo.example.com` is `example.com`. Trying to approximate this by simply\n\t// taking the last two labels will not work well for TLDs such as `co.uk`.\n\tURLRegisteredDomainKey = attribute.Key(\"url.registered_domain\")\n\n\t// URLSchemeKey is the attribute Key conforming to the \"url.scheme\"\n\t// semantic conventions. It represents the [URI\n\t// scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component\n\t// identifying the used protocol.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'https', 'ftp', 'telnet'\n\tURLSchemeKey = attribute.Key(\"url.scheme\")\n\n\t// URLSubdomainKey is the attribute Key conforming to the \"url.subdomain\"\n\t// semantic conventions. It represents the subdomain portion of a fully\n\t// qualified domain name includes all of the names except the host name\n\t// under the registered_domain. In a partially qualified domain, or if the\n\t// qualification level of the full name cannot be determined, subdomain\n\t// contains all of the names below the registered domain.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'east', 'sub2.sub1'\n\t// Note: The subdomain portion of `www.east.mydomain.co.uk` is `east`. If\n\t// the domain has multiple levels of subdomain, such as\n\t// `sub2.sub1.example.com`, the subdomain field should contain `sub2.sub1`,\n\t// with no trailing period.\n\tURLSubdomainKey = attribute.Key(\"url.subdomain\")\n\n\t// URLTemplateKey is the attribute Key conforming to the \"url.template\"\n\t// semantic conventions. It represents the low-cardinality template of an\n\t// [absolute path\n\t// reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '/users/{id}', '/users/:id', '/users?id={id}'\n\tURLTemplateKey = attribute.Key(\"url.template\")\n\n\t// URLTopLevelDomainKey is the attribute Key conforming to the\n\t// \"url.top_level_domain\" semantic conventions. It represents the effective\n\t// top level domain (eTLD), also known as the domain suffix, is the last\n\t// part of the domain name. For example, the top level domain for\n\t// example.com is `com`.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'com', 'co.uk'\n\t// Note: This value can be determined precisely with the [public suffix\n\t// list](http://publicsuffix.org).\n\tURLTopLevelDomainKey = attribute.Key(\"url.top_level_domain\")\n)\n\n// URLDomain returns an attribute KeyValue conforming to the \"url.domain\"\n// semantic conventions. It represents the domain extracted from the\n// `url.full`, such as \"opentelemetry.io\".\nfunc URLDomain(val string) attribute.KeyValue {\n\treturn URLDomainKey.String(val)\n}\n\n// URLExtension returns an attribute KeyValue conforming to the\n// \"url.extension\" semantic conventions. It represents the file extension\n// extracted from the `url.full`, excluding the leading dot.\nfunc URLExtension(val string) attribute.KeyValue {\n\treturn URLExtensionKey.String(val)\n}\n\n// URLFragment returns an attribute KeyValue conforming to the\n// \"url.fragment\" semantic conventions. It represents the [URI\n// fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\nfunc URLFragment(val string) attribute.KeyValue {\n\treturn URLFragmentKey.String(val)\n}\n\n// URLFull returns an attribute KeyValue conforming to the \"url.full\"\n// semantic conventions. It represents the absolute URL describing a network\n// resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)\nfunc URLFull(val string) attribute.KeyValue {\n\treturn URLFullKey.String(val)\n}\n\n// URLOriginal returns an attribute KeyValue conforming to the\n// \"url.original\" semantic conventions. It represents the unmodified original\n// URL as seen in the event source.\nfunc URLOriginal(val string) attribute.KeyValue {\n\treturn URLOriginalKey.String(val)\n}\n\n// URLPath returns an attribute KeyValue conforming to the \"url.path\"\n// semantic conventions. It represents the [URI\n// path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\nfunc URLPath(val string) attribute.KeyValue {\n\treturn URLPathKey.String(val)\n}\n\n// URLPort returns an attribute KeyValue conforming to the \"url.port\"\n// semantic conventions. It represents the port extracted from the `url.full`\nfunc URLPort(val int) attribute.KeyValue {\n\treturn URLPortKey.Int(val)\n}\n\n// URLQuery returns an attribute KeyValue conforming to the \"url.query\"\n// semantic conventions. It represents the [URI\n// query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\nfunc URLQuery(val string) attribute.KeyValue {\n\treturn URLQueryKey.String(val)\n}\n\n// URLRegisteredDomain returns an attribute KeyValue conforming to the\n// \"url.registered_domain\" semantic conventions. It represents the highest\n// registered url domain, stripped of the subdomain.\nfunc URLRegisteredDomain(val string) attribute.KeyValue {\n\treturn URLRegisteredDomainKey.String(val)\n}\n\n// URLScheme returns an attribute KeyValue conforming to the \"url.scheme\"\n// semantic conventions. It represents the [URI\n// scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component\n// identifying the used protocol.\nfunc URLScheme(val string) attribute.KeyValue {\n\treturn URLSchemeKey.String(val)\n}\n\n// URLSubdomain returns an attribute KeyValue conforming to the\n// \"url.subdomain\" semantic conventions. It represents the subdomain portion of\n// a fully qualified domain name includes all of the names except the host name\n// under the registered_domain. In a partially qualified domain, or if the\n// qualification level of the full name cannot be determined, subdomain\n// contains all of the names below the registered domain.\nfunc URLSubdomain(val string) attribute.KeyValue {\n\treturn URLSubdomainKey.String(val)\n}\n\n// URLTemplate returns an attribute KeyValue conforming to the\n// \"url.template\" semantic conventions. It represents the low-cardinality\n// template of an [absolute path\n// reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\nfunc URLTemplate(val string) attribute.KeyValue {\n\treturn URLTemplateKey.String(val)\n}\n\n// URLTopLevelDomain returns an attribute KeyValue conforming to the\n// \"url.top_level_domain\" semantic conventions. It represents the effective top\n// level domain (eTLD), also known as the domain suffix, is the last part of\n// the domain name. For example, the top level domain for example.com is `com`.\nfunc URLTopLevelDomain(val string) attribute.KeyValue {\n\treturn URLTopLevelDomainKey.String(val)\n}\n\n// Describes user-agent attributes.\nconst (\n\t// UserAgentNameKey is the attribute Key conforming to the\n\t// \"user_agent.name\" semantic conventions. It represents the name of the\n\t// user-agent extracted from original. Usually refers to the browser's\n\t// name.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'Safari', 'YourApp'\n\t// Note: [Example](https://www.whatsmyua.info) of extracting browser's name\n\t// from original string. In the case of using a user-agent for non-browser\n\t// products, such as microservices with multiple names/versions inside the\n\t// `user_agent.original`, the most significant name SHOULD be selected. In\n\t// such a scenario it should align with `user_agent.version`\n\tUserAgentNameKey = attribute.Key(\"user_agent.name\")\n\n\t// UserAgentOriginalKey is the attribute Key conforming to the\n\t// \"user_agent.original\" semantic conventions. It represents the value of\n\t// the [HTTP\n\t// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent)\n\t// header sent by the client.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: stable\n\t// Examples: 'CERN-LineMode/2.15 libwww/2.17b3', 'Mozilla/5.0 (iPhone; CPU\n\t// iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko)\n\t// Version/14.1.2 Mobile/15E148 Safari/604.1', 'YourApp/1.0.0\n\t// grpc-java-okhttp/1.27.2'\n\tUserAgentOriginalKey = attribute.Key(\"user_agent.original\")\n\n\t// UserAgentVersionKey is the attribute Key conforming to the\n\t// \"user_agent.version\" semantic conventions. It represents the version of\n\t// the user-agent extracted from original. Usually refers to the browser's\n\t// version\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '14.1.2', '1.0.0'\n\t// Note: [Example](https://www.whatsmyua.info) of extracting browser's\n\t// version from original string. In the case of using a user-agent for\n\t// non-browser products, such as microservices with multiple names/versions\n\t// inside the `user_agent.original`, the most significant version SHOULD be\n\t// selected. In such a scenario it should align with `user_agent.name`\n\tUserAgentVersionKey = attribute.Key(\"user_agent.version\")\n)\n\n// UserAgentName returns an attribute KeyValue conforming to the\n// \"user_agent.name\" semantic conventions. It represents the name of the\n// user-agent extracted from original. Usually refers to the browser's name.\nfunc UserAgentName(val string) attribute.KeyValue {\n\treturn UserAgentNameKey.String(val)\n}\n\n// UserAgentOriginal returns an attribute KeyValue conforming to the\n// \"user_agent.original\" semantic conventions. It represents the value of the\n// [HTTP\n// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent)\n// header sent by the client.\nfunc UserAgentOriginal(val string) attribute.KeyValue {\n\treturn UserAgentOriginalKey.String(val)\n}\n\n// UserAgentVersion returns an attribute KeyValue conforming to the\n// \"user_agent.version\" semantic conventions. It represents the version of the\n// user-agent extracted from original. Usually refers to the browser's version\nfunc UserAgentVersion(val string) attribute.KeyValue {\n\treturn UserAgentVersionKey.String(val)\n}\n\n// The attributes used to describe the packaged software running the\n// application code.\nconst (\n\t// WebEngineDescriptionKey is the attribute Key conforming to the\n\t// \"webengine.description\" semantic conventions. It represents the\n\t// additional description of the web engine (e.g. detailed version and\n\t// edition information).\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) -\n\t// 2.2.2.Final'\n\tWebEngineDescriptionKey = attribute.Key(\"webengine.description\")\n\n\t// WebEngineNameKey is the attribute Key conforming to the \"webengine.name\"\n\t// semantic conventions. It represents the name of the web engine.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: 'WildFly'\n\tWebEngineNameKey = attribute.Key(\"webengine.name\")\n\n\t// WebEngineVersionKey is the attribute Key conforming to the\n\t// \"webengine.version\" semantic conventions. It represents the version of\n\t// the web engine.\n\t//\n\t// Type: string\n\t// RequirementLevel: Optional\n\t// Stability: experimental\n\t// Examples: '21.0.0'\n\tWebEngineVersionKey = attribute.Key(\"webengine.version\")\n)\n\n// WebEngineDescription returns an attribute KeyValue conforming to the\n// \"webengine.description\" semantic conventions. It represents the additional\n// description of the web engine (e.g. detailed version and edition\n// information).\nfunc WebEngineDescription(val string) attribute.KeyValue {\n\treturn WebEngineDescriptionKey.String(val)\n}\n\n// WebEngineName returns an attribute KeyValue conforming to the\n// \"webengine.name\" semantic conventions. It represents the name of the web\n// engine.\nfunc WebEngineName(val string) attribute.KeyValue {\n\treturn WebEngineNameKey.String(val)\n}\n\n// WebEngineVersion returns an attribute KeyValue conforming to the\n// \"webengine.version\" semantic conventions. It represents the version of the\n// web engine.\nfunc WebEngineVersion(val string) attribute.KeyValue {\n\treturn WebEngineVersionKey.String(val)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.26.0/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Package semconv implements OpenTelemetry semantic conventions.\n//\n// OpenTelemetry semantic conventions are agreed standardized naming\n// patterns for OpenTelemetry things. This package represents the v1.26.0\n// version of the OpenTelemetry semantic conventions.\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.26.0\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.26.0/exception.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.26.0\"\n\nconst (\n\t// ExceptionEventName is the name of the Span event representing an exception.\n\tExceptionEventName = \"exception\"\n)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.26.0/metric.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Code generated from semantic convention specification. DO NOT EDIT.\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.26.0\"\n\nconst (\n\n\t// ContainerCPUTime is the metric conforming to the \"container.cpu.time\"\n\t// semantic conventions. It represents the total CPU time consumed.\n\t// Instrument: counter\n\t// Unit: s\n\t// Stability: Experimental\n\tContainerCPUTimeName        = \"container.cpu.time\"\n\tContainerCPUTimeUnit        = \"s\"\n\tContainerCPUTimeDescription = \"Total CPU time consumed\"\n\n\t// ContainerMemoryUsage is the metric conforming to the\n\t// \"container.memory.usage\" semantic conventions. It represents the memory\n\t// usage of the container.\n\t// Instrument: counter\n\t// Unit: By\n\t// Stability: Experimental\n\tContainerMemoryUsageName        = \"container.memory.usage\"\n\tContainerMemoryUsageUnit        = \"By\"\n\tContainerMemoryUsageDescription = \"Memory usage of the container.\"\n\n\t// ContainerDiskIo is the metric conforming to the \"container.disk.io\" semantic\n\t// conventions. It represents the disk bytes for the container.\n\t// Instrument: counter\n\t// Unit: By\n\t// Stability: Experimental\n\tContainerDiskIoName        = \"container.disk.io\"\n\tContainerDiskIoUnit        = \"By\"\n\tContainerDiskIoDescription = \"Disk bytes for the container.\"\n\n\t// ContainerNetworkIo is the metric conforming to the \"container.network.io\"\n\t// semantic conventions. It represents the network bytes for the container.\n\t// Instrument: counter\n\t// Unit: By\n\t// Stability: Experimental\n\tContainerNetworkIoName        = \"container.network.io\"\n\tContainerNetworkIoUnit        = \"By\"\n\tContainerNetworkIoDescription = \"Network bytes for the container.\"\n\n\t// DBClientOperationDuration is the metric conforming to the\n\t// \"db.client.operation.duration\" semantic conventions. It represents the\n\t// duration of database client operations.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tDBClientOperationDurationName        = \"db.client.operation.duration\"\n\tDBClientOperationDurationUnit        = \"s\"\n\tDBClientOperationDurationDescription = \"Duration of database client operations.\"\n\n\t// DBClientConnectionCount is the metric conforming to the\n\t// \"db.client.connection.count\" semantic conventions. It represents the number\n\t// of connections that are currently in state described by the `state`\n\t// attribute.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionCountName        = \"db.client.connection.count\"\n\tDBClientConnectionCountUnit        = \"{connection}\"\n\tDBClientConnectionCountDescription = \"The number of connections that are currently in state described by the `state` attribute\"\n\n\t// DBClientConnectionIdleMax is the metric conforming to the\n\t// \"db.client.connection.idle.max\" semantic conventions. It represents the\n\t// maximum number of idle open connections allowed.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionIdleMaxName        = \"db.client.connection.idle.max\"\n\tDBClientConnectionIdleMaxUnit        = \"{connection}\"\n\tDBClientConnectionIdleMaxDescription = \"The maximum number of idle open connections allowed\"\n\n\t// DBClientConnectionIdleMin is the metric conforming to the\n\t// \"db.client.connection.idle.min\" semantic conventions. It represents the\n\t// minimum number of idle open connections allowed.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionIdleMinName        = \"db.client.connection.idle.min\"\n\tDBClientConnectionIdleMinUnit        = \"{connection}\"\n\tDBClientConnectionIdleMinDescription = \"The minimum number of idle open connections allowed\"\n\n\t// DBClientConnectionMax is the metric conforming to the\n\t// \"db.client.connection.max\" semantic conventions. It represents the maximum\n\t// number of open connections allowed.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionMaxName        = \"db.client.connection.max\"\n\tDBClientConnectionMaxUnit        = \"{connection}\"\n\tDBClientConnectionMaxDescription = \"The maximum number of open connections allowed\"\n\n\t// DBClientConnectionPendingRequests is the metric conforming to the\n\t// \"db.client.connection.pending_requests\" semantic conventions. It represents\n\t// the number of pending requests for an open connection, cumulative for the\n\t// entire pool.\n\t// Instrument: updowncounter\n\t// Unit: {request}\n\t// Stability: Experimental\n\tDBClientConnectionPendingRequestsName        = \"db.client.connection.pending_requests\"\n\tDBClientConnectionPendingRequestsUnit        = \"{request}\"\n\tDBClientConnectionPendingRequestsDescription = \"The number of pending requests for an open connection, cumulative for the entire pool\"\n\n\t// DBClientConnectionTimeouts is the metric conforming to the\n\t// \"db.client.connection.timeouts\" semantic conventions. It represents the\n\t// number of connection timeouts that have occurred trying to obtain a\n\t// connection from the pool.\n\t// Instrument: counter\n\t// Unit: {timeout}\n\t// Stability: Experimental\n\tDBClientConnectionTimeoutsName        = \"db.client.connection.timeouts\"\n\tDBClientConnectionTimeoutsUnit        = \"{timeout}\"\n\tDBClientConnectionTimeoutsDescription = \"The number of connection timeouts that have occurred trying to obtain a connection from the pool\"\n\n\t// DBClientConnectionCreateTime is the metric conforming to the\n\t// \"db.client.connection.create_time\" semantic conventions. It represents the\n\t// time it took to create a new connection.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tDBClientConnectionCreateTimeName        = \"db.client.connection.create_time\"\n\tDBClientConnectionCreateTimeUnit        = \"s\"\n\tDBClientConnectionCreateTimeDescription = \"The time it took to create a new connection\"\n\n\t// DBClientConnectionWaitTime is the metric conforming to the\n\t// \"db.client.connection.wait_time\" semantic conventions. It represents the\n\t// time it took to obtain an open connection from the pool.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tDBClientConnectionWaitTimeName        = \"db.client.connection.wait_time\"\n\tDBClientConnectionWaitTimeUnit        = \"s\"\n\tDBClientConnectionWaitTimeDescription = \"The time it took to obtain an open connection from the pool\"\n\n\t// DBClientConnectionUseTime is the metric conforming to the\n\t// \"db.client.connection.use_time\" semantic conventions. It represents the time\n\t// between borrowing a connection and returning it to the pool.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tDBClientConnectionUseTimeName        = \"db.client.connection.use_time\"\n\tDBClientConnectionUseTimeUnit        = \"s\"\n\tDBClientConnectionUseTimeDescription = \"The time between borrowing a connection and returning it to the pool\"\n\n\t// DBClientConnectionsUsage is the metric conforming to the\n\t// \"db.client.connections.usage\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.count` instead.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionsUsageName        = \"db.client.connections.usage\"\n\tDBClientConnectionsUsageUnit        = \"{connection}\"\n\tDBClientConnectionsUsageDescription = \"Deprecated, use `db.client.connection.count` instead.\"\n\n\t// DBClientConnectionsIdleMax is the metric conforming to the\n\t// \"db.client.connections.idle.max\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.idle.max` instead.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionsIdleMaxName        = \"db.client.connections.idle.max\"\n\tDBClientConnectionsIdleMaxUnit        = \"{connection}\"\n\tDBClientConnectionsIdleMaxDescription = \"Deprecated, use `db.client.connection.idle.max` instead.\"\n\n\t// DBClientConnectionsIdleMin is the metric conforming to the\n\t// \"db.client.connections.idle.min\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.idle.min` instead.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionsIdleMinName        = \"db.client.connections.idle.min\"\n\tDBClientConnectionsIdleMinUnit        = \"{connection}\"\n\tDBClientConnectionsIdleMinDescription = \"Deprecated, use `db.client.connection.idle.min` instead.\"\n\n\t// DBClientConnectionsMax is the metric conforming to the\n\t// \"db.client.connections.max\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.max` instead.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tDBClientConnectionsMaxName        = \"db.client.connections.max\"\n\tDBClientConnectionsMaxUnit        = \"{connection}\"\n\tDBClientConnectionsMaxDescription = \"Deprecated, use `db.client.connection.max` instead.\"\n\n\t// DBClientConnectionsPendingRequests is the metric conforming to the\n\t// \"db.client.connections.pending_requests\" semantic conventions. It represents\n\t// the deprecated, use `db.client.connection.pending_requests` instead.\n\t// Instrument: updowncounter\n\t// Unit: {request}\n\t// Stability: Experimental\n\tDBClientConnectionsPendingRequestsName        = \"db.client.connections.pending_requests\"\n\tDBClientConnectionsPendingRequestsUnit        = \"{request}\"\n\tDBClientConnectionsPendingRequestsDescription = \"Deprecated, use `db.client.connection.pending_requests` instead.\"\n\n\t// DBClientConnectionsTimeouts is the metric conforming to the\n\t// \"db.client.connections.timeouts\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.timeouts` instead.\n\t// Instrument: counter\n\t// Unit: {timeout}\n\t// Stability: Experimental\n\tDBClientConnectionsTimeoutsName        = \"db.client.connections.timeouts\"\n\tDBClientConnectionsTimeoutsUnit        = \"{timeout}\"\n\tDBClientConnectionsTimeoutsDescription = \"Deprecated, use `db.client.connection.timeouts` instead.\"\n\n\t// DBClientConnectionsCreateTime is the metric conforming to the\n\t// \"db.client.connections.create_time\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.create_time` instead. Note: the unit\n\t// also changed from `ms` to `s`.\n\t// Instrument: histogram\n\t// Unit: ms\n\t// Stability: Experimental\n\tDBClientConnectionsCreateTimeName        = \"db.client.connections.create_time\"\n\tDBClientConnectionsCreateTimeUnit        = \"ms\"\n\tDBClientConnectionsCreateTimeDescription = \"Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from `ms` to `s`.\"\n\n\t// DBClientConnectionsWaitTime is the metric conforming to the\n\t// \"db.client.connections.wait_time\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.wait_time` instead. Note: the unit\n\t// also changed from `ms` to `s`.\n\t// Instrument: histogram\n\t// Unit: ms\n\t// Stability: Experimental\n\tDBClientConnectionsWaitTimeName        = \"db.client.connections.wait_time\"\n\tDBClientConnectionsWaitTimeUnit        = \"ms\"\n\tDBClientConnectionsWaitTimeDescription = \"Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from `ms` to `s`.\"\n\n\t// DBClientConnectionsUseTime is the metric conforming to the\n\t// \"db.client.connections.use_time\" semantic conventions. It represents the\n\t// deprecated, use `db.client.connection.use_time` instead. Note: the unit also\n\t// changed from `ms` to `s`.\n\t// Instrument: histogram\n\t// Unit: ms\n\t// Stability: Experimental\n\tDBClientConnectionsUseTimeName        = \"db.client.connections.use_time\"\n\tDBClientConnectionsUseTimeUnit        = \"ms\"\n\tDBClientConnectionsUseTimeDescription = \"Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from `ms` to `s`.\"\n\n\t// DNSLookupDuration is the metric conforming to the \"dns.lookup.duration\"\n\t// semantic conventions. It represents the measures the time taken to perform a\n\t// DNS lookup.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tDNSLookupDurationName        = \"dns.lookup.duration\"\n\tDNSLookupDurationUnit        = \"s\"\n\tDNSLookupDurationDescription = \"Measures the time taken to perform a DNS lookup.\"\n\n\t// AspnetcoreRoutingMatchAttempts is the metric conforming to the\n\t// \"aspnetcore.routing.match_attempts\" semantic conventions. It represents the\n\t// number of requests that were attempted to be matched to an endpoint.\n\t// Instrument: counter\n\t// Unit: {match_attempt}\n\t// Stability: Stable\n\tAspnetcoreRoutingMatchAttemptsName        = \"aspnetcore.routing.match_attempts\"\n\tAspnetcoreRoutingMatchAttemptsUnit        = \"{match_attempt}\"\n\tAspnetcoreRoutingMatchAttemptsDescription = \"Number of requests that were attempted to be matched to an endpoint.\"\n\n\t// AspnetcoreDiagnosticsExceptions is the metric conforming to the\n\t// \"aspnetcore.diagnostics.exceptions\" semantic conventions. It represents the\n\t// number of exceptions caught by exception handling middleware.\n\t// Instrument: counter\n\t// Unit: {exception}\n\t// Stability: Stable\n\tAspnetcoreDiagnosticsExceptionsName        = \"aspnetcore.diagnostics.exceptions\"\n\tAspnetcoreDiagnosticsExceptionsUnit        = \"{exception}\"\n\tAspnetcoreDiagnosticsExceptionsDescription = \"Number of exceptions caught by exception handling middleware.\"\n\n\t// AspnetcoreRateLimitingActiveRequestLeases is the metric conforming to the\n\t// \"aspnetcore.rate_limiting.active_request_leases\" semantic conventions. It\n\t// represents the number of requests that are currently active on the server\n\t// that hold a rate limiting lease.\n\t// Instrument: updowncounter\n\t// Unit: {request}\n\t// Stability: Stable\n\tAspnetcoreRateLimitingActiveRequestLeasesName        = \"aspnetcore.rate_limiting.active_request_leases\"\n\tAspnetcoreRateLimitingActiveRequestLeasesUnit        = \"{request}\"\n\tAspnetcoreRateLimitingActiveRequestLeasesDescription = \"Number of requests that are currently active on the server that hold a rate limiting lease.\"\n\n\t// AspnetcoreRateLimitingRequestLeaseDuration is the metric conforming to the\n\t// \"aspnetcore.rate_limiting.request_lease.duration\" semantic conventions. It\n\t// represents the duration of rate limiting lease held by requests on the\n\t// server.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tAspnetcoreRateLimitingRequestLeaseDurationName        = \"aspnetcore.rate_limiting.request_lease.duration\"\n\tAspnetcoreRateLimitingRequestLeaseDurationUnit        = \"s\"\n\tAspnetcoreRateLimitingRequestLeaseDurationDescription = \"The duration of rate limiting lease held by requests on the server.\"\n\n\t// AspnetcoreRateLimitingRequestTimeInQueue is the metric conforming to the\n\t// \"aspnetcore.rate_limiting.request.time_in_queue\" semantic conventions. It\n\t// represents the time the request spent in a queue waiting to acquire a rate\n\t// limiting lease.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tAspnetcoreRateLimitingRequestTimeInQueueName        = \"aspnetcore.rate_limiting.request.time_in_queue\"\n\tAspnetcoreRateLimitingRequestTimeInQueueUnit        = \"s\"\n\tAspnetcoreRateLimitingRequestTimeInQueueDescription = \"The time the request spent in a queue waiting to acquire a rate limiting lease.\"\n\n\t// AspnetcoreRateLimitingQueuedRequests is the metric conforming to the\n\t// \"aspnetcore.rate_limiting.queued_requests\" semantic conventions. It\n\t// represents the number of requests that are currently queued, waiting to\n\t// acquire a rate limiting lease.\n\t// Instrument: updowncounter\n\t// Unit: {request}\n\t// Stability: Stable\n\tAspnetcoreRateLimitingQueuedRequestsName        = \"aspnetcore.rate_limiting.queued_requests\"\n\tAspnetcoreRateLimitingQueuedRequestsUnit        = \"{request}\"\n\tAspnetcoreRateLimitingQueuedRequestsDescription = \"Number of requests that are currently queued, waiting to acquire a rate limiting lease.\"\n\n\t// AspnetcoreRateLimitingRequests is the metric conforming to the\n\t// \"aspnetcore.rate_limiting.requests\" semantic conventions. It represents the\n\t// number of requests that tried to acquire a rate limiting lease.\n\t// Instrument: counter\n\t// Unit: {request}\n\t// Stability: Stable\n\tAspnetcoreRateLimitingRequestsName        = \"aspnetcore.rate_limiting.requests\"\n\tAspnetcoreRateLimitingRequestsUnit        = \"{request}\"\n\tAspnetcoreRateLimitingRequestsDescription = \"Number of requests that tried to acquire a rate limiting lease.\"\n\n\t// KestrelActiveConnections is the metric conforming to the\n\t// \"kestrel.active_connections\" semantic conventions. It represents the number\n\t// of connections that are currently active on the server.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Stable\n\tKestrelActiveConnectionsName        = \"kestrel.active_connections\"\n\tKestrelActiveConnectionsUnit        = \"{connection}\"\n\tKestrelActiveConnectionsDescription = \"Number of connections that are currently active on the server.\"\n\n\t// KestrelConnectionDuration is the metric conforming to the\n\t// \"kestrel.connection.duration\" semantic conventions. It represents the\n\t// duration of connections on the server.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tKestrelConnectionDurationName        = \"kestrel.connection.duration\"\n\tKestrelConnectionDurationUnit        = \"s\"\n\tKestrelConnectionDurationDescription = \"The duration of connections on the server.\"\n\n\t// KestrelRejectedConnections is the metric conforming to the\n\t// \"kestrel.rejected_connections\" semantic conventions. It represents the\n\t// number of connections rejected by the server.\n\t// Instrument: counter\n\t// Unit: {connection}\n\t// Stability: Stable\n\tKestrelRejectedConnectionsName        = \"kestrel.rejected_connections\"\n\tKestrelRejectedConnectionsUnit        = \"{connection}\"\n\tKestrelRejectedConnectionsDescription = \"Number of connections rejected by the server.\"\n\n\t// KestrelQueuedConnections is the metric conforming to the\n\t// \"kestrel.queued_connections\" semantic conventions. It represents the number\n\t// of connections that are currently queued and are waiting to start.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Stable\n\tKestrelQueuedConnectionsName        = \"kestrel.queued_connections\"\n\tKestrelQueuedConnectionsUnit        = \"{connection}\"\n\tKestrelQueuedConnectionsDescription = \"Number of connections that are currently queued and are waiting to start.\"\n\n\t// KestrelQueuedRequests is the metric conforming to the\n\t// \"kestrel.queued_requests\" semantic conventions. It represents the number of\n\t// HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are\n\t// currently queued and are waiting to start.\n\t// Instrument: updowncounter\n\t// Unit: {request}\n\t// Stability: Stable\n\tKestrelQueuedRequestsName        = \"kestrel.queued_requests\"\n\tKestrelQueuedRequestsUnit        = \"{request}\"\n\tKestrelQueuedRequestsDescription = \"Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start.\"\n\n\t// KestrelUpgradedConnections is the metric conforming to the\n\t// \"kestrel.upgraded_connections\" semantic conventions. It represents the\n\t// number of connections that are currently upgraded (WebSockets). .\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Stable\n\tKestrelUpgradedConnectionsName        = \"kestrel.upgraded_connections\"\n\tKestrelUpgradedConnectionsUnit        = \"{connection}\"\n\tKestrelUpgradedConnectionsDescription = \"Number of connections that are currently upgraded (WebSockets). .\"\n\n\t// KestrelTLSHandshakeDuration is the metric conforming to the\n\t// \"kestrel.tls_handshake.duration\" semantic conventions. It represents the\n\t// duration of TLS handshakes on the server.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tKestrelTLSHandshakeDurationName        = \"kestrel.tls_handshake.duration\"\n\tKestrelTLSHandshakeDurationUnit        = \"s\"\n\tKestrelTLSHandshakeDurationDescription = \"The duration of TLS handshakes on the server.\"\n\n\t// KestrelActiveTLSHandshakes is the metric conforming to the\n\t// \"kestrel.active_tls_handshakes\" semantic conventions. It represents the\n\t// number of TLS handshakes that are currently in progress on the server.\n\t// Instrument: updowncounter\n\t// Unit: {handshake}\n\t// Stability: Stable\n\tKestrelActiveTLSHandshakesName        = \"kestrel.active_tls_handshakes\"\n\tKestrelActiveTLSHandshakesUnit        = \"{handshake}\"\n\tKestrelActiveTLSHandshakesDescription = \"Number of TLS handshakes that are currently in progress on the server.\"\n\n\t// SignalrServerConnectionDuration is the metric conforming to the\n\t// \"signalr.server.connection.duration\" semantic conventions. It represents the\n\t// duration of connections on the server.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tSignalrServerConnectionDurationName        = \"signalr.server.connection.duration\"\n\tSignalrServerConnectionDurationUnit        = \"s\"\n\tSignalrServerConnectionDurationDescription = \"The duration of connections on the server.\"\n\n\t// SignalrServerActiveConnections is the metric conforming to the\n\t// \"signalr.server.active_connections\" semantic conventions. It represents the\n\t// number of connections that are currently active on the server.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Stable\n\tSignalrServerActiveConnectionsName        = \"signalr.server.active_connections\"\n\tSignalrServerActiveConnectionsUnit        = \"{connection}\"\n\tSignalrServerActiveConnectionsDescription = \"Number of connections that are currently active on the server.\"\n\n\t// FaaSInvokeDuration is the metric conforming to the \"faas.invoke_duration\"\n\t// semantic conventions. It represents the measures the duration of the\n\t// function's logic execution.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tFaaSInvokeDurationName        = \"faas.invoke_duration\"\n\tFaaSInvokeDurationUnit        = \"s\"\n\tFaaSInvokeDurationDescription = \"Measures the duration of the function's logic execution\"\n\n\t// FaaSInitDuration is the metric conforming to the \"faas.init_duration\"\n\t// semantic conventions. It represents the measures the duration of the\n\t// function's initialization, such as a cold start.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tFaaSInitDurationName        = \"faas.init_duration\"\n\tFaaSInitDurationUnit        = \"s\"\n\tFaaSInitDurationDescription = \"Measures the duration of the function's initialization, such as a cold start\"\n\n\t// FaaSColdstarts is the metric conforming to the \"faas.coldstarts\" semantic\n\t// conventions. It represents the number of invocation cold starts.\n\t// Instrument: counter\n\t// Unit: {coldstart}\n\t// Stability: Experimental\n\tFaaSColdstartsName        = \"faas.coldstarts\"\n\tFaaSColdstartsUnit        = \"{coldstart}\"\n\tFaaSColdstartsDescription = \"Number of invocation cold starts\"\n\n\t// FaaSErrors is the metric conforming to the \"faas.errors\" semantic\n\t// conventions. It represents the number of invocation errors.\n\t// Instrument: counter\n\t// Unit: {error}\n\t// Stability: Experimental\n\tFaaSErrorsName        = \"faas.errors\"\n\tFaaSErrorsUnit        = \"{error}\"\n\tFaaSErrorsDescription = \"Number of invocation errors\"\n\n\t// FaaSInvocations is the metric conforming to the \"faas.invocations\" semantic\n\t// conventions. It represents the number of successful invocations.\n\t// Instrument: counter\n\t// Unit: {invocation}\n\t// Stability: Experimental\n\tFaaSInvocationsName        = \"faas.invocations\"\n\tFaaSInvocationsUnit        = \"{invocation}\"\n\tFaaSInvocationsDescription = \"Number of successful invocations\"\n\n\t// FaaSTimeouts is the metric conforming to the \"faas.timeouts\" semantic\n\t// conventions. It represents the number of invocation timeouts.\n\t// Instrument: counter\n\t// Unit: {timeout}\n\t// Stability: Experimental\n\tFaaSTimeoutsName        = \"faas.timeouts\"\n\tFaaSTimeoutsUnit        = \"{timeout}\"\n\tFaaSTimeoutsDescription = \"Number of invocation timeouts\"\n\n\t// FaaSMemUsage is the metric conforming to the \"faas.mem_usage\" semantic\n\t// conventions. It represents the distribution of max memory usage per\n\t// invocation.\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tFaaSMemUsageName        = \"faas.mem_usage\"\n\tFaaSMemUsageUnit        = \"By\"\n\tFaaSMemUsageDescription = \"Distribution of max memory usage per invocation\"\n\n\t// FaaSCPUUsage is the metric conforming to the \"faas.cpu_usage\" semantic\n\t// conventions. It represents the distribution of CPU usage per invocation.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tFaaSCPUUsageName        = \"faas.cpu_usage\"\n\tFaaSCPUUsageUnit        = \"s\"\n\tFaaSCPUUsageDescription = \"Distribution of CPU usage per invocation\"\n\n\t// FaaSNetIo is the metric conforming to the \"faas.net_io\" semantic\n\t// conventions. It represents the distribution of net I/O usage per invocation.\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tFaaSNetIoName        = \"faas.net_io\"\n\tFaaSNetIoUnit        = \"By\"\n\tFaaSNetIoDescription = \"Distribution of net I/O usage per invocation\"\n\n\t// HTTPServerRequestDuration is the metric conforming to the\n\t// \"http.server.request.duration\" semantic conventions. It represents the\n\t// duration of HTTP server requests.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tHTTPServerRequestDurationName        = \"http.server.request.duration\"\n\tHTTPServerRequestDurationUnit        = \"s\"\n\tHTTPServerRequestDurationDescription = \"Duration of HTTP server requests.\"\n\n\t// HTTPServerActiveRequests is the metric conforming to the\n\t// \"http.server.active_requests\" semantic conventions. It represents the number\n\t// of active HTTP server requests.\n\t// Instrument: updowncounter\n\t// Unit: {request}\n\t// Stability: Experimental\n\tHTTPServerActiveRequestsName        = \"http.server.active_requests\"\n\tHTTPServerActiveRequestsUnit        = \"{request}\"\n\tHTTPServerActiveRequestsDescription = \"Number of active HTTP server requests.\"\n\n\t// HTTPServerRequestBodySize is the metric conforming to the\n\t// \"http.server.request.body.size\" semantic conventions. It represents the size\n\t// of HTTP server request bodies.\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tHTTPServerRequestBodySizeName        = \"http.server.request.body.size\"\n\tHTTPServerRequestBodySizeUnit        = \"By\"\n\tHTTPServerRequestBodySizeDescription = \"Size of HTTP server request bodies.\"\n\n\t// HTTPServerResponseBodySize is the metric conforming to the\n\t// \"http.server.response.body.size\" semantic conventions. It represents the\n\t// size of HTTP server response bodies.\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tHTTPServerResponseBodySizeName        = \"http.server.response.body.size\"\n\tHTTPServerResponseBodySizeUnit        = \"By\"\n\tHTTPServerResponseBodySizeDescription = \"Size of HTTP server response bodies.\"\n\n\t// HTTPClientRequestDuration is the metric conforming to the\n\t// \"http.client.request.duration\" semantic conventions. It represents the\n\t// duration of HTTP client requests.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tHTTPClientRequestDurationName        = \"http.client.request.duration\"\n\tHTTPClientRequestDurationUnit        = \"s\"\n\tHTTPClientRequestDurationDescription = \"Duration of HTTP client requests.\"\n\n\t// HTTPClientRequestBodySize is the metric conforming to the\n\t// \"http.client.request.body.size\" semantic conventions. It represents the size\n\t// of HTTP client request bodies.\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tHTTPClientRequestBodySizeName        = \"http.client.request.body.size\"\n\tHTTPClientRequestBodySizeUnit        = \"By\"\n\tHTTPClientRequestBodySizeDescription = \"Size of HTTP client request bodies.\"\n\n\t// HTTPClientResponseBodySize is the metric conforming to the\n\t// \"http.client.response.body.size\" semantic conventions. It represents the\n\t// size of HTTP client response bodies.\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tHTTPClientResponseBodySizeName        = \"http.client.response.body.size\"\n\tHTTPClientResponseBodySizeUnit        = \"By\"\n\tHTTPClientResponseBodySizeDescription = \"Size of HTTP client response bodies.\"\n\n\t// HTTPClientOpenConnections is the metric conforming to the\n\t// \"http.client.open_connections\" semantic conventions. It represents the\n\t// number of outbound HTTP connections that are currently active or idle on the\n\t// client.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\tHTTPClientOpenConnectionsName        = \"http.client.open_connections\"\n\tHTTPClientOpenConnectionsUnit        = \"{connection}\"\n\tHTTPClientOpenConnectionsDescription = \"Number of outbound HTTP connections that are currently active or idle on the client.\"\n\n\t// HTTPClientConnectionDuration is the metric conforming to the\n\t// \"http.client.connection.duration\" semantic conventions. It represents the\n\t// duration of the successfully established outbound HTTP connections.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tHTTPClientConnectionDurationName        = \"http.client.connection.duration\"\n\tHTTPClientConnectionDurationUnit        = \"s\"\n\tHTTPClientConnectionDurationDescription = \"The duration of the successfully established outbound HTTP connections.\"\n\n\t// HTTPClientActiveRequests is the metric conforming to the\n\t// \"http.client.active_requests\" semantic conventions. It represents the number\n\t// of active HTTP requests.\n\t// Instrument: updowncounter\n\t// Unit: {request}\n\t// Stability: Experimental\n\tHTTPClientActiveRequestsName        = \"http.client.active_requests\"\n\tHTTPClientActiveRequestsUnit        = \"{request}\"\n\tHTTPClientActiveRequestsDescription = \"Number of active HTTP requests.\"\n\n\t// JvmMemoryInit is the metric conforming to the \"jvm.memory.init\" semantic\n\t// conventions. It represents the measure of initial memory requested.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tJvmMemoryInitName        = \"jvm.memory.init\"\n\tJvmMemoryInitUnit        = \"By\"\n\tJvmMemoryInitDescription = \"Measure of initial memory requested.\"\n\n\t// JvmSystemCPUUtilization is the metric conforming to the\n\t// \"jvm.system.cpu.utilization\" semantic conventions. It represents the recent\n\t// CPU utilization for the whole system as reported by the JVM.\n\t// Instrument: gauge\n\t// Unit: 1\n\t// Stability: Experimental\n\tJvmSystemCPUUtilizationName        = \"jvm.system.cpu.utilization\"\n\tJvmSystemCPUUtilizationUnit        = \"1\"\n\tJvmSystemCPUUtilizationDescription = \"Recent CPU utilization for the whole system as reported by the JVM.\"\n\n\t// JvmSystemCPULoad1m is the metric conforming to the \"jvm.system.cpu.load_1m\"\n\t// semantic conventions. It represents the average CPU load of the whole system\n\t// for the last minute as reported by the JVM.\n\t// Instrument: gauge\n\t// Unit: {run_queue_item}\n\t// Stability: Experimental\n\tJvmSystemCPULoad1mName        = \"jvm.system.cpu.load_1m\"\n\tJvmSystemCPULoad1mUnit        = \"{run_queue_item}\"\n\tJvmSystemCPULoad1mDescription = \"Average CPU load of the whole system for the last minute as reported by the JVM.\"\n\n\t// JvmBufferMemoryUsage is the metric conforming to the\n\t// \"jvm.buffer.memory.usage\" semantic conventions. It represents the measure of\n\t// memory used by buffers.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tJvmBufferMemoryUsageName        = \"jvm.buffer.memory.usage\"\n\tJvmBufferMemoryUsageUnit        = \"By\"\n\tJvmBufferMemoryUsageDescription = \"Measure of memory used by buffers.\"\n\n\t// JvmBufferMemoryLimit is the metric conforming to the\n\t// \"jvm.buffer.memory.limit\" semantic conventions. It represents the measure of\n\t// total memory capacity of buffers.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tJvmBufferMemoryLimitName        = \"jvm.buffer.memory.limit\"\n\tJvmBufferMemoryLimitUnit        = \"By\"\n\tJvmBufferMemoryLimitDescription = \"Measure of total memory capacity of buffers.\"\n\n\t// JvmBufferCount is the metric conforming to the \"jvm.buffer.count\" semantic\n\t// conventions. It represents the number of buffers in the pool.\n\t// Instrument: updowncounter\n\t// Unit: {buffer}\n\t// Stability: Experimental\n\tJvmBufferCountName        = \"jvm.buffer.count\"\n\tJvmBufferCountUnit        = \"{buffer}\"\n\tJvmBufferCountDescription = \"Number of buffers in the pool.\"\n\n\t// JvmMemoryUsed is the metric conforming to the \"jvm.memory.used\" semantic\n\t// conventions. It represents the measure of memory used.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Stable\n\tJvmMemoryUsedName        = \"jvm.memory.used\"\n\tJvmMemoryUsedUnit        = \"By\"\n\tJvmMemoryUsedDescription = \"Measure of memory used.\"\n\n\t// JvmMemoryCommitted is the metric conforming to the \"jvm.memory.committed\"\n\t// semantic conventions. It represents the measure of memory committed.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Stable\n\tJvmMemoryCommittedName        = \"jvm.memory.committed\"\n\tJvmMemoryCommittedUnit        = \"By\"\n\tJvmMemoryCommittedDescription = \"Measure of memory committed.\"\n\n\t// JvmMemoryLimit is the metric conforming to the \"jvm.memory.limit\" semantic\n\t// conventions. It represents the measure of max obtainable memory.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Stable\n\tJvmMemoryLimitName        = \"jvm.memory.limit\"\n\tJvmMemoryLimitUnit        = \"By\"\n\tJvmMemoryLimitDescription = \"Measure of max obtainable memory.\"\n\n\t// JvmMemoryUsedAfterLastGc is the metric conforming to the\n\t// \"jvm.memory.used_after_last_gc\" semantic conventions. It represents the\n\t// measure of memory used, as measured after the most recent garbage collection\n\t// event on this pool.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Stable\n\tJvmMemoryUsedAfterLastGcName        = \"jvm.memory.used_after_last_gc\"\n\tJvmMemoryUsedAfterLastGcUnit        = \"By\"\n\tJvmMemoryUsedAfterLastGcDescription = \"Measure of memory used, as measured after the most recent garbage collection event on this pool.\"\n\n\t// JvmGcDuration is the metric conforming to the \"jvm.gc.duration\" semantic\n\t// conventions. It represents the duration of JVM garbage collection actions.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Stable\n\tJvmGcDurationName        = \"jvm.gc.duration\"\n\tJvmGcDurationUnit        = \"s\"\n\tJvmGcDurationDescription = \"Duration of JVM garbage collection actions.\"\n\n\t// JvmThreadCount is the metric conforming to the \"jvm.thread.count\" semantic\n\t// conventions. It represents the number of executing platform threads.\n\t// Instrument: updowncounter\n\t// Unit: {thread}\n\t// Stability: Stable\n\tJvmThreadCountName        = \"jvm.thread.count\"\n\tJvmThreadCountUnit        = \"{thread}\"\n\tJvmThreadCountDescription = \"Number of executing platform threads.\"\n\n\t// JvmClassLoaded is the metric conforming to the \"jvm.class.loaded\" semantic\n\t// conventions. It represents the number of classes loaded since JVM start.\n\t// Instrument: counter\n\t// Unit: {class}\n\t// Stability: Stable\n\tJvmClassLoadedName        = \"jvm.class.loaded\"\n\tJvmClassLoadedUnit        = \"{class}\"\n\tJvmClassLoadedDescription = \"Number of classes loaded since JVM start.\"\n\n\t// JvmClassUnloaded is the metric conforming to the \"jvm.class.unloaded\"\n\t// semantic conventions. It represents the number of classes unloaded since JVM\n\t// start.\n\t// Instrument: counter\n\t// Unit: {class}\n\t// Stability: Stable\n\tJvmClassUnloadedName        = \"jvm.class.unloaded\"\n\tJvmClassUnloadedUnit        = \"{class}\"\n\tJvmClassUnloadedDescription = \"Number of classes unloaded since JVM start.\"\n\n\t// JvmClassCount is the metric conforming to the \"jvm.class.count\" semantic\n\t// conventions. It represents the number of classes currently loaded.\n\t// Instrument: updowncounter\n\t// Unit: {class}\n\t// Stability: Stable\n\tJvmClassCountName        = \"jvm.class.count\"\n\tJvmClassCountUnit        = \"{class}\"\n\tJvmClassCountDescription = \"Number of classes currently loaded.\"\n\n\t// JvmCPUCount is the metric conforming to the \"jvm.cpu.count\" semantic\n\t// conventions. It represents the number of processors available to the Java\n\t// virtual machine.\n\t// Instrument: updowncounter\n\t// Unit: {cpu}\n\t// Stability: Stable\n\tJvmCPUCountName        = \"jvm.cpu.count\"\n\tJvmCPUCountUnit        = \"{cpu}\"\n\tJvmCPUCountDescription = \"Number of processors available to the Java virtual machine.\"\n\n\t// JvmCPUTime is the metric conforming to the \"jvm.cpu.time\" semantic\n\t// conventions. It represents the cPU time used by the process as reported by\n\t// the JVM.\n\t// Instrument: counter\n\t// Unit: s\n\t// Stability: Stable\n\tJvmCPUTimeName        = \"jvm.cpu.time\"\n\tJvmCPUTimeUnit        = \"s\"\n\tJvmCPUTimeDescription = \"CPU time used by the process as reported by the JVM.\"\n\n\t// JvmCPURecentUtilization is the metric conforming to the\n\t// \"jvm.cpu.recent_utilization\" semantic conventions. It represents the recent\n\t// CPU utilization for the process as reported by the JVM.\n\t// Instrument: gauge\n\t// Unit: 1\n\t// Stability: Stable\n\tJvmCPURecentUtilizationName        = \"jvm.cpu.recent_utilization\"\n\tJvmCPURecentUtilizationUnit        = \"1\"\n\tJvmCPURecentUtilizationDescription = \"Recent CPU utilization for the process as reported by the JVM.\"\n\n\t// MessagingPublishDuration is the metric conforming to the\n\t// \"messaging.publish.duration\" semantic conventions. It represents the\n\t// measures the duration of publish operation.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tMessagingPublishDurationName        = \"messaging.publish.duration\"\n\tMessagingPublishDurationUnit        = \"s\"\n\tMessagingPublishDurationDescription = \"Measures the duration of publish operation.\"\n\n\t// MessagingReceiveDuration is the metric conforming to the\n\t// \"messaging.receive.duration\" semantic conventions. It represents the\n\t// measures the duration of receive operation.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tMessagingReceiveDurationName        = \"messaging.receive.duration\"\n\tMessagingReceiveDurationUnit        = \"s\"\n\tMessagingReceiveDurationDescription = \"Measures the duration of receive operation.\"\n\n\t// MessagingProcessDuration is the metric conforming to the\n\t// \"messaging.process.duration\" semantic conventions. It represents the\n\t// measures the duration of process operation.\n\t// Instrument: histogram\n\t// Unit: s\n\t// Stability: Experimental\n\tMessagingProcessDurationName        = \"messaging.process.duration\"\n\tMessagingProcessDurationUnit        = \"s\"\n\tMessagingProcessDurationDescription = \"Measures the duration of process operation.\"\n\n\t// MessagingPublishMessages is the metric conforming to the\n\t// \"messaging.publish.messages\" semantic conventions. It represents the\n\t// measures the number of published messages.\n\t// Instrument: counter\n\t// Unit: {message}\n\t// Stability: Experimental\n\tMessagingPublishMessagesName        = \"messaging.publish.messages\"\n\tMessagingPublishMessagesUnit        = \"{message}\"\n\tMessagingPublishMessagesDescription = \"Measures the number of published messages.\"\n\n\t// MessagingReceiveMessages is the metric conforming to the\n\t// \"messaging.receive.messages\" semantic conventions. It represents the\n\t// measures the number of received messages.\n\t// Instrument: counter\n\t// Unit: {message}\n\t// Stability: Experimental\n\tMessagingReceiveMessagesName        = \"messaging.receive.messages\"\n\tMessagingReceiveMessagesUnit        = \"{message}\"\n\tMessagingReceiveMessagesDescription = \"Measures the number of received messages.\"\n\n\t// MessagingProcessMessages is the metric conforming to the\n\t// \"messaging.process.messages\" semantic conventions. It represents the\n\t// measures the number of processed messages.\n\t// Instrument: counter\n\t// Unit: {message}\n\t// Stability: Experimental\n\tMessagingProcessMessagesName        = \"messaging.process.messages\"\n\tMessagingProcessMessagesUnit        = \"{message}\"\n\tMessagingProcessMessagesDescription = \"Measures the number of processed messages.\"\n\n\t// ProcessCPUTime is the metric conforming to the \"process.cpu.time\" semantic\n\t// conventions. It represents the total CPU seconds broken down by different\n\t// states.\n\t// Instrument: counter\n\t// Unit: s\n\t// Stability: Experimental\n\tProcessCPUTimeName        = \"process.cpu.time\"\n\tProcessCPUTimeUnit        = \"s\"\n\tProcessCPUTimeDescription = \"Total CPU seconds broken down by different states.\"\n\n\t// ProcessCPUUtilization is the metric conforming to the\n\t// \"process.cpu.utilization\" semantic conventions. It represents the difference\n\t// in process.cpu.time since the last measurement, divided by the elapsed time\n\t// and number of CPUs available to the process.\n\t// Instrument: gauge\n\t// Unit: 1\n\t// Stability: Experimental\n\tProcessCPUUtilizationName        = \"process.cpu.utilization\"\n\tProcessCPUUtilizationUnit        = \"1\"\n\tProcessCPUUtilizationDescription = \"Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process.\"\n\n\t// ProcessMemoryUsage is the metric conforming to the \"process.memory.usage\"\n\t// semantic conventions. It represents the amount of physical memory in use.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tProcessMemoryUsageName        = \"process.memory.usage\"\n\tProcessMemoryUsageUnit        = \"By\"\n\tProcessMemoryUsageDescription = \"The amount of physical memory in use.\"\n\n\t// ProcessMemoryVirtual is the metric conforming to the\n\t// \"process.memory.virtual\" semantic conventions. It represents the amount of\n\t// committed virtual memory.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tProcessMemoryVirtualName        = \"process.memory.virtual\"\n\tProcessMemoryVirtualUnit        = \"By\"\n\tProcessMemoryVirtualDescription = \"The amount of committed virtual memory.\"\n\n\t// ProcessDiskIo is the metric conforming to the \"process.disk.io\" semantic\n\t// conventions. It represents the disk bytes transferred.\n\t// Instrument: counter\n\t// Unit: By\n\t// Stability: Experimental\n\tProcessDiskIoName        = \"process.disk.io\"\n\tProcessDiskIoUnit        = \"By\"\n\tProcessDiskIoDescription = \"Disk bytes transferred.\"\n\n\t// ProcessNetworkIo is the metric conforming to the \"process.network.io\"\n\t// semantic conventions. It represents the network bytes transferred.\n\t// Instrument: counter\n\t// Unit: By\n\t// Stability: Experimental\n\tProcessNetworkIoName        = \"process.network.io\"\n\tProcessNetworkIoUnit        = \"By\"\n\tProcessNetworkIoDescription = \"Network bytes transferred.\"\n\n\t// ProcessThreadCount is the metric conforming to the \"process.thread.count\"\n\t// semantic conventions. It represents the process threads count.\n\t// Instrument: updowncounter\n\t// Unit: {thread}\n\t// Stability: Experimental\n\tProcessThreadCountName        = \"process.thread.count\"\n\tProcessThreadCountUnit        = \"{thread}\"\n\tProcessThreadCountDescription = \"Process threads count.\"\n\n\t// ProcessOpenFileDescriptorCount is the metric conforming to the\n\t// \"process.open_file_descriptor.count\" semantic conventions. It represents the\n\t// number of file descriptors in use by the process.\n\t// Instrument: updowncounter\n\t// Unit: {count}\n\t// Stability: Experimental\n\tProcessOpenFileDescriptorCountName        = \"process.open_file_descriptor.count\"\n\tProcessOpenFileDescriptorCountUnit        = \"{count}\"\n\tProcessOpenFileDescriptorCountDescription = \"Number of file descriptors in use by the process.\"\n\n\t// ProcessContextSwitches is the metric conforming to the\n\t// \"process.context_switches\" semantic conventions. It represents the number of\n\t// times the process has been context switched.\n\t// Instrument: counter\n\t// Unit: {count}\n\t// Stability: Experimental\n\tProcessContextSwitchesName        = \"process.context_switches\"\n\tProcessContextSwitchesUnit        = \"{count}\"\n\tProcessContextSwitchesDescription = \"Number of times the process has been context switched.\"\n\n\t// ProcessPagingFaults is the metric conforming to the \"process.paging.faults\"\n\t// semantic conventions. It represents the number of page faults the process\n\t// has made.\n\t// Instrument: counter\n\t// Unit: {fault}\n\t// Stability: Experimental\n\tProcessPagingFaultsName        = \"process.paging.faults\"\n\tProcessPagingFaultsUnit        = \"{fault}\"\n\tProcessPagingFaultsDescription = \"Number of page faults the process has made.\"\n\n\t// RPCServerDuration is the metric conforming to the \"rpc.server.duration\"\n\t// semantic conventions. It represents the measures the duration of inbound\n\t// RPC.\n\t// Instrument: histogram\n\t// Unit: ms\n\t// Stability: Experimental\n\tRPCServerDurationName        = \"rpc.server.duration\"\n\tRPCServerDurationUnit        = \"ms\"\n\tRPCServerDurationDescription = \"Measures the duration of inbound RPC.\"\n\n\t// RPCServerRequestSize is the metric conforming to the\n\t// \"rpc.server.request.size\" semantic conventions. It represents the measures\n\t// the size of RPC request messages (uncompressed).\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tRPCServerRequestSizeName        = \"rpc.server.request.size\"\n\tRPCServerRequestSizeUnit        = \"By\"\n\tRPCServerRequestSizeDescription = \"Measures the size of RPC request messages (uncompressed).\"\n\n\t// RPCServerResponseSize is the metric conforming to the\n\t// \"rpc.server.response.size\" semantic conventions. It represents the measures\n\t// the size of RPC response messages (uncompressed).\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tRPCServerResponseSizeName        = \"rpc.server.response.size\"\n\tRPCServerResponseSizeUnit        = \"By\"\n\tRPCServerResponseSizeDescription = \"Measures the size of RPC response messages (uncompressed).\"\n\n\t// RPCServerRequestsPerRPC is the metric conforming to the\n\t// \"rpc.server.requests_per_rpc\" semantic conventions. It represents the\n\t// measures the number of messages received per RPC.\n\t// Instrument: histogram\n\t// Unit: {count}\n\t// Stability: Experimental\n\tRPCServerRequestsPerRPCName        = \"rpc.server.requests_per_rpc\"\n\tRPCServerRequestsPerRPCUnit        = \"{count}\"\n\tRPCServerRequestsPerRPCDescription = \"Measures the number of messages received per RPC.\"\n\n\t// RPCServerResponsesPerRPC is the metric conforming to the\n\t// \"rpc.server.responses_per_rpc\" semantic conventions. It represents the\n\t// measures the number of messages sent per RPC.\n\t// Instrument: histogram\n\t// Unit: {count}\n\t// Stability: Experimental\n\tRPCServerResponsesPerRPCName        = \"rpc.server.responses_per_rpc\"\n\tRPCServerResponsesPerRPCUnit        = \"{count}\"\n\tRPCServerResponsesPerRPCDescription = \"Measures the number of messages sent per RPC.\"\n\n\t// RPCClientDuration is the metric conforming to the \"rpc.client.duration\"\n\t// semantic conventions. It represents the measures the duration of outbound\n\t// RPC.\n\t// Instrument: histogram\n\t// Unit: ms\n\t// Stability: Experimental\n\tRPCClientDurationName        = \"rpc.client.duration\"\n\tRPCClientDurationUnit        = \"ms\"\n\tRPCClientDurationDescription = \"Measures the duration of outbound RPC.\"\n\n\t// RPCClientRequestSize is the metric conforming to the\n\t// \"rpc.client.request.size\" semantic conventions. It represents the measures\n\t// the size of RPC request messages (uncompressed).\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tRPCClientRequestSizeName        = \"rpc.client.request.size\"\n\tRPCClientRequestSizeUnit        = \"By\"\n\tRPCClientRequestSizeDescription = \"Measures the size of RPC request messages (uncompressed).\"\n\n\t// RPCClientResponseSize is the metric conforming to the\n\t// \"rpc.client.response.size\" semantic conventions. It represents the measures\n\t// the size of RPC response messages (uncompressed).\n\t// Instrument: histogram\n\t// Unit: By\n\t// Stability: Experimental\n\tRPCClientResponseSizeName        = \"rpc.client.response.size\"\n\tRPCClientResponseSizeUnit        = \"By\"\n\tRPCClientResponseSizeDescription = \"Measures the size of RPC response messages (uncompressed).\"\n\n\t// RPCClientRequestsPerRPC is the metric conforming to the\n\t// \"rpc.client.requests_per_rpc\" semantic conventions. It represents the\n\t// measures the number of messages received per RPC.\n\t// Instrument: histogram\n\t// Unit: {count}\n\t// Stability: Experimental\n\tRPCClientRequestsPerRPCName        = \"rpc.client.requests_per_rpc\"\n\tRPCClientRequestsPerRPCUnit        = \"{count}\"\n\tRPCClientRequestsPerRPCDescription = \"Measures the number of messages received per RPC.\"\n\n\t// RPCClientResponsesPerRPC is the metric conforming to the\n\t// \"rpc.client.responses_per_rpc\" semantic conventions. It represents the\n\t// measures the number of messages sent per RPC.\n\t// Instrument: histogram\n\t// Unit: {count}\n\t// Stability: Experimental\n\tRPCClientResponsesPerRPCName        = \"rpc.client.responses_per_rpc\"\n\tRPCClientResponsesPerRPCUnit        = \"{count}\"\n\tRPCClientResponsesPerRPCDescription = \"Measures the number of messages sent per RPC.\"\n\n\t// SystemCPUTime is the metric conforming to the \"system.cpu.time\" semantic\n\t// conventions. It represents the seconds each logical CPU spent on each mode.\n\t// Instrument: counter\n\t// Unit: s\n\t// Stability: Experimental\n\tSystemCPUTimeName        = \"system.cpu.time\"\n\tSystemCPUTimeUnit        = \"s\"\n\tSystemCPUTimeDescription = \"Seconds each logical CPU spent on each mode\"\n\n\t// SystemCPUUtilization is the metric conforming to the\n\t// \"system.cpu.utilization\" semantic conventions. It represents the difference\n\t// in system.cpu.time since the last measurement, divided by the elapsed time\n\t// and number of logical CPUs.\n\t// Instrument: gauge\n\t// Unit: 1\n\t// Stability: Experimental\n\tSystemCPUUtilizationName        = \"system.cpu.utilization\"\n\tSystemCPUUtilizationUnit        = \"1\"\n\tSystemCPUUtilizationDescription = \"Difference in system.cpu.time since the last measurement, divided by the elapsed time and number of logical CPUs\"\n\n\t// SystemCPUFrequency is the metric conforming to the \"system.cpu.frequency\"\n\t// semantic conventions. It represents the reports the current frequency of the\n\t// CPU in Hz.\n\t// Instrument: gauge\n\t// Unit: {Hz}\n\t// Stability: Experimental\n\tSystemCPUFrequencyName        = \"system.cpu.frequency\"\n\tSystemCPUFrequencyUnit        = \"{Hz}\"\n\tSystemCPUFrequencyDescription = \"Reports the current frequency of the CPU in Hz\"\n\n\t// SystemCPUPhysicalCount is the metric conforming to the\n\t// \"system.cpu.physical.count\" semantic conventions. It represents the reports\n\t// the number of actual physical processor cores on the hardware.\n\t// Instrument: updowncounter\n\t// Unit: {cpu}\n\t// Stability: Experimental\n\tSystemCPUPhysicalCountName        = \"system.cpu.physical.count\"\n\tSystemCPUPhysicalCountUnit        = \"{cpu}\"\n\tSystemCPUPhysicalCountDescription = \"Reports the number of actual physical processor cores on the hardware\"\n\n\t// SystemCPULogicalCount is the metric conforming to the\n\t// \"system.cpu.logical.count\" semantic conventions. It represents the reports\n\t// the number of logical (virtual) processor cores created by the operating\n\t// system to manage multitasking.\n\t// Instrument: updowncounter\n\t// Unit: {cpu}\n\t// Stability: Experimental\n\tSystemCPULogicalCountName        = \"system.cpu.logical.count\"\n\tSystemCPULogicalCountUnit        = \"{cpu}\"\n\tSystemCPULogicalCountDescription = \"Reports the number of logical (virtual) processor cores created by the operating system to manage multitasking\"\n\n\t// SystemMemoryUsage is the metric conforming to the \"system.memory.usage\"\n\t// semantic conventions. It represents the reports memory in use by state.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tSystemMemoryUsageName        = \"system.memory.usage\"\n\tSystemMemoryUsageUnit        = \"By\"\n\tSystemMemoryUsageDescription = \"Reports memory in use by state.\"\n\n\t// SystemMemoryLimit is the metric conforming to the \"system.memory.limit\"\n\t// semantic conventions. It represents the total memory available in the\n\t// system.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tSystemMemoryLimitName        = \"system.memory.limit\"\n\tSystemMemoryLimitUnit        = \"By\"\n\tSystemMemoryLimitDescription = \"Total memory available in the system.\"\n\n\t// SystemMemoryShared is the metric conforming to the \"system.memory.shared\"\n\t// semantic conventions. It represents the shared memory used (mostly by\n\t// tmpfs).\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tSystemMemorySharedName        = \"system.memory.shared\"\n\tSystemMemorySharedUnit        = \"By\"\n\tSystemMemorySharedDescription = \"Shared memory used (mostly by tmpfs).\"\n\n\t// SystemMemoryUtilization is the metric conforming to the\n\t// \"system.memory.utilization\" semantic conventions.\n\t// Instrument: gauge\n\t// Unit: 1\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemMemoryUtilizationName = \"system.memory.utilization\"\n\tSystemMemoryUtilizationUnit = \"1\"\n\n\t// SystemPagingUsage is the metric conforming to the \"system.paging.usage\"\n\t// semantic conventions. It represents the unix swap or windows pagefile usage.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tSystemPagingUsageName        = \"system.paging.usage\"\n\tSystemPagingUsageUnit        = \"By\"\n\tSystemPagingUsageDescription = \"Unix swap or windows pagefile usage\"\n\n\t// SystemPagingUtilization is the metric conforming to the\n\t// \"system.paging.utilization\" semantic conventions.\n\t// Instrument: gauge\n\t// Unit: 1\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemPagingUtilizationName = \"system.paging.utilization\"\n\tSystemPagingUtilizationUnit = \"1\"\n\n\t// SystemPagingFaults is the metric conforming to the \"system.paging.faults\"\n\t// semantic conventions.\n\t// Instrument: counter\n\t// Unit: {fault}\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemPagingFaultsName = \"system.paging.faults\"\n\tSystemPagingFaultsUnit = \"{fault}\"\n\n\t// SystemPagingOperations is the metric conforming to the\n\t// \"system.paging.operations\" semantic conventions.\n\t// Instrument: counter\n\t// Unit: {operation}\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemPagingOperationsName = \"system.paging.operations\"\n\tSystemPagingOperationsUnit = \"{operation}\"\n\n\t// SystemDiskIo is the metric conforming to the \"system.disk.io\" semantic\n\t// conventions.\n\t// Instrument: counter\n\t// Unit: By\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemDiskIoName = \"system.disk.io\"\n\tSystemDiskIoUnit = \"By\"\n\n\t// SystemDiskOperations is the metric conforming to the\n\t// \"system.disk.operations\" semantic conventions.\n\t// Instrument: counter\n\t// Unit: {operation}\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemDiskOperationsName = \"system.disk.operations\"\n\tSystemDiskOperationsUnit = \"{operation}\"\n\n\t// SystemDiskIoTime is the metric conforming to the \"system.disk.io_time\"\n\t// semantic conventions. It represents the time disk spent activated.\n\t// Instrument: counter\n\t// Unit: s\n\t// Stability: Experimental\n\tSystemDiskIoTimeName        = \"system.disk.io_time\"\n\tSystemDiskIoTimeUnit        = \"s\"\n\tSystemDiskIoTimeDescription = \"Time disk spent activated\"\n\n\t// SystemDiskOperationTime is the metric conforming to the\n\t// \"system.disk.operation_time\" semantic conventions. It represents the sum of\n\t// the time each operation took to complete.\n\t// Instrument: counter\n\t// Unit: s\n\t// Stability: Experimental\n\tSystemDiskOperationTimeName        = \"system.disk.operation_time\"\n\tSystemDiskOperationTimeUnit        = \"s\"\n\tSystemDiskOperationTimeDescription = \"Sum of the time each operation took to complete\"\n\n\t// SystemDiskMerged is the metric conforming to the \"system.disk.merged\"\n\t// semantic conventions.\n\t// Instrument: counter\n\t// Unit: {operation}\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemDiskMergedName = \"system.disk.merged\"\n\tSystemDiskMergedUnit = \"{operation}\"\n\n\t// SystemFilesystemUsage is the metric conforming to the\n\t// \"system.filesystem.usage\" semantic conventions.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemFilesystemUsageName = \"system.filesystem.usage\"\n\tSystemFilesystemUsageUnit = \"By\"\n\n\t// SystemFilesystemUtilization is the metric conforming to the\n\t// \"system.filesystem.utilization\" semantic conventions.\n\t// Instrument: gauge\n\t// Unit: 1\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemFilesystemUtilizationName = \"system.filesystem.utilization\"\n\tSystemFilesystemUtilizationUnit = \"1\"\n\n\t// SystemNetworkDropped is the metric conforming to the\n\t// \"system.network.dropped\" semantic conventions. It represents the count of\n\t// packets that are dropped or discarded even though there was no error.\n\t// Instrument: counter\n\t// Unit: {packet}\n\t// Stability: Experimental\n\tSystemNetworkDroppedName        = \"system.network.dropped\"\n\tSystemNetworkDroppedUnit        = \"{packet}\"\n\tSystemNetworkDroppedDescription = \"Count of packets that are dropped or discarded even though there was no error\"\n\n\t// SystemNetworkPackets is the metric conforming to the\n\t// \"system.network.packets\" semantic conventions.\n\t// Instrument: counter\n\t// Unit: {packet}\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemNetworkPacketsName = \"system.network.packets\"\n\tSystemNetworkPacketsUnit = \"{packet}\"\n\n\t// SystemNetworkErrors is the metric conforming to the \"system.network.errors\"\n\t// semantic conventions. It represents the count of network errors detected.\n\t// Instrument: counter\n\t// Unit: {error}\n\t// Stability: Experimental\n\tSystemNetworkErrorsName        = \"system.network.errors\"\n\tSystemNetworkErrorsUnit        = \"{error}\"\n\tSystemNetworkErrorsDescription = \"Count of network errors detected\"\n\n\t// SystemNetworkIo is the metric conforming to the \"system.network.io\" semantic\n\t// conventions.\n\t// Instrument: counter\n\t// Unit: By\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemNetworkIoName = \"system.network.io\"\n\tSystemNetworkIoUnit = \"By\"\n\n\t// SystemNetworkConnections is the metric conforming to the\n\t// \"system.network.connections\" semantic conventions.\n\t// Instrument: updowncounter\n\t// Unit: {connection}\n\t// Stability: Experimental\n\t// NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository.\n\tSystemNetworkConnectionsName = \"system.network.connections\"\n\tSystemNetworkConnectionsUnit = \"{connection}\"\n\n\t// SystemProcessCount is the metric conforming to the \"system.process.count\"\n\t// semantic conventions. It represents the total number of processes in each\n\t// state.\n\t// Instrument: updowncounter\n\t// Unit: {process}\n\t// Stability: Experimental\n\tSystemProcessCountName        = \"system.process.count\"\n\tSystemProcessCountUnit        = \"{process}\"\n\tSystemProcessCountDescription = \"Total number of processes in each state\"\n\n\t// SystemProcessCreated is the metric conforming to the\n\t// \"system.process.created\" semantic conventions. It represents the total\n\t// number of processes created over uptime of the host.\n\t// Instrument: counter\n\t// Unit: {process}\n\t// Stability: Experimental\n\tSystemProcessCreatedName        = \"system.process.created\"\n\tSystemProcessCreatedUnit        = \"{process}\"\n\tSystemProcessCreatedDescription = \"Total number of processes created over uptime of the host\"\n\n\t// SystemLinuxMemoryAvailable is the metric conforming to the\n\t// \"system.linux.memory.available\" semantic conventions. It represents an\n\t// estimate of how much memory is available for starting new applications,\n\t// without causing swapping.\n\t// Instrument: updowncounter\n\t// Unit: By\n\t// Stability: Experimental\n\tSystemLinuxMemoryAvailableName        = \"system.linux.memory.available\"\n\tSystemLinuxMemoryAvailableUnit        = \"By\"\n\tSystemLinuxMemoryAvailableDescription = \"An estimate of how much memory is available for starting new applications, without causing swapping\"\n)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/semconv/v1.26.0/schema.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage semconv // import \"go.opentelemetry.io/otel/semconv/v1.26.0\"\n\n// SchemaURL is the schema URL that matches the version of the semantic conventions\n// that this package defines. Semconv packages starting from v1.4.0 must declare\n// non-empty schema URL in the form https://opentelemetry.io/schemas/<version>\nconst SchemaURL = \"https://opentelemetry.io/schemas/1.26.0\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/README.md",
    "content": "# Trace API\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/trace)](https://pkg.go.dev/go.opentelemetry.io/otel/trace)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/auto.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/codes\"\n\tsemconv \"go.opentelemetry.io/otel/semconv/v1.26.0\"\n\t\"go.opentelemetry.io/otel/trace/embedded\"\n\t\"go.opentelemetry.io/otel/trace/internal/telemetry\"\n)\n\n// newAutoTracerProvider returns an auto-instrumentable [trace.TracerProvider].\n// If an [go.opentelemetry.io/auto.Instrumentation] is configured to instrument\n// the process using the returned TracerProvider, all of the telemetry it\n// produces will be processed and handled by that Instrumentation. By default,\n// if no Instrumentation instruments the TracerProvider it will not generate\n// any trace telemetry.\nfunc newAutoTracerProvider() TracerProvider { return tracerProviderInstance }\n\nvar tracerProviderInstance = new(autoTracerProvider)\n\ntype autoTracerProvider struct{ embedded.TracerProvider }\n\nvar _ TracerProvider = autoTracerProvider{}\n\nfunc (p autoTracerProvider) Tracer(name string, opts ...TracerOption) Tracer {\n\tcfg := NewTracerConfig(opts...)\n\treturn autoTracer{\n\t\tname:      name,\n\t\tversion:   cfg.InstrumentationVersion(),\n\t\tschemaURL: cfg.SchemaURL(),\n\t}\n}\n\ntype autoTracer struct {\n\tembedded.Tracer\n\n\tname, schemaURL, version string\n}\n\nvar _ Tracer = autoTracer{}\n\nfunc (t autoTracer) Start(ctx context.Context, name string, opts ...SpanStartOption) (context.Context, Span) {\n\tvar psc SpanContext\n\tsampled := true\n\tspan := new(autoSpan)\n\n\t// Ask eBPF for sampling decision and span context info.\n\tt.start(ctx, span, &psc, &sampled, &span.spanContext)\n\n\tspan.sampled.Store(sampled)\n\n\tctx = ContextWithSpan(ctx, span)\n\n\tif sampled {\n\t\t// Only build traces if sampled.\n\t\tcfg := NewSpanStartConfig(opts...)\n\t\tspan.traces, span.span = t.traces(name, cfg, span.spanContext, psc)\n\t}\n\n\treturn ctx, span\n}\n\n// Expected to be implemented in eBPF.\n//\n//go:noinline\nfunc (t *autoTracer) start(\n\tctx context.Context,\n\tspanPtr *autoSpan,\n\tpsc *SpanContext,\n\tsampled *bool,\n\tsc *SpanContext,\n) {\n\tstart(ctx, spanPtr, psc, sampled, sc)\n}\n\n// start is used for testing.\nvar start = func(context.Context, *autoSpan, *SpanContext, *bool, *SpanContext) {}\n\nfunc (t autoTracer) traces(name string, cfg SpanConfig, sc, psc SpanContext) (*telemetry.Traces, *telemetry.Span) {\n\tspan := &telemetry.Span{\n\t\tTraceID:      telemetry.TraceID(sc.TraceID()),\n\t\tSpanID:       telemetry.SpanID(sc.SpanID()),\n\t\tFlags:        uint32(sc.TraceFlags()),\n\t\tTraceState:   sc.TraceState().String(),\n\t\tParentSpanID: telemetry.SpanID(psc.SpanID()),\n\t\tName:         name,\n\t\tKind:         spanKind(cfg.SpanKind()),\n\t}\n\n\tspan.Attrs, span.DroppedAttrs = convCappedAttrs(maxSpan.Attrs, cfg.Attributes())\n\n\tlinks := cfg.Links()\n\tif limit := maxSpan.Links; limit == 0 {\n\t\tn := int64(len(links))\n\t\tif n > 0 {\n\t\t\tspan.DroppedLinks = uint32(min(n, math.MaxUint32)) // nolint: gosec  // Bounds checked.\n\t\t}\n\t} else {\n\t\tif limit > 0 {\n\t\t\tn := int64(max(len(links)-limit, 0))\n\t\t\tspan.DroppedLinks = uint32(min(n, math.MaxUint32)) // nolint: gosec  // Bounds checked.\n\t\t\tlinks = links[n:]\n\t\t}\n\t\tspan.Links = convLinks(links)\n\t}\n\n\tif t := cfg.Timestamp(); !t.IsZero() {\n\t\tspan.StartTime = cfg.Timestamp()\n\t} else {\n\t\tspan.StartTime = time.Now()\n\t}\n\n\treturn &telemetry.Traces{\n\t\tResourceSpans: []*telemetry.ResourceSpans{\n\t\t\t{\n\t\t\t\tScopeSpans: []*telemetry.ScopeSpans{\n\t\t\t\t\t{\n\t\t\t\t\t\tScope: &telemetry.Scope{\n\t\t\t\t\t\t\tName:    t.name,\n\t\t\t\t\t\t\tVersion: t.version,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSpans:     []*telemetry.Span{span},\n\t\t\t\t\t\tSchemaURL: t.schemaURL,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}, span\n}\n\nfunc spanKind(kind SpanKind) telemetry.SpanKind {\n\tswitch kind {\n\tcase SpanKindInternal:\n\t\treturn telemetry.SpanKindInternal\n\tcase SpanKindServer:\n\t\treturn telemetry.SpanKindServer\n\tcase SpanKindClient:\n\t\treturn telemetry.SpanKindClient\n\tcase SpanKindProducer:\n\t\treturn telemetry.SpanKindProducer\n\tcase SpanKindConsumer:\n\t\treturn telemetry.SpanKindConsumer\n\t}\n\treturn telemetry.SpanKind(0) // undefined.\n}\n\ntype autoSpan struct {\n\tembedded.Span\n\n\tspanContext SpanContext\n\tsampled     atomic.Bool\n\n\tmu     sync.Mutex\n\ttraces *telemetry.Traces\n\tspan   *telemetry.Span\n}\n\nfunc (s *autoSpan) SpanContext() SpanContext {\n\tif s == nil {\n\t\treturn SpanContext{}\n\t}\n\t// s.spanContext is immutable, do not acquire lock s.mu.\n\treturn s.spanContext\n}\n\nfunc (s *autoSpan) IsRecording() bool {\n\tif s == nil {\n\t\treturn false\n\t}\n\n\treturn s.sampled.Load()\n}\n\nfunc (s *autoSpan) SetStatus(c codes.Code, msg string) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tif s.span.Status == nil {\n\t\ts.span.Status = new(telemetry.Status)\n\t}\n\n\ts.span.Status.Message = msg\n\n\tswitch c {\n\tcase codes.Unset:\n\t\ts.span.Status.Code = telemetry.StatusCodeUnset\n\tcase codes.Error:\n\t\ts.span.Status.Code = telemetry.StatusCodeError\n\tcase codes.Ok:\n\t\ts.span.Status.Code = telemetry.StatusCodeOK\n\t}\n}\n\nfunc (s *autoSpan) SetAttributes(attrs ...attribute.KeyValue) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tlimit := maxSpan.Attrs\n\tif limit == 0 {\n\t\t// No attributes allowed.\n\t\tn := int64(len(attrs))\n\t\tif n > 0 {\n\t\t\ts.span.DroppedAttrs += uint32(min(n, math.MaxUint32)) // nolint: gosec  // Bounds checked.\n\t\t}\n\t\treturn\n\t}\n\n\tm := make(map[string]int)\n\tfor i, a := range s.span.Attrs {\n\t\tm[a.Key] = i\n\t}\n\n\tfor _, a := range attrs {\n\t\tval := convAttrValue(a.Value)\n\t\tif val.Empty() {\n\t\t\ts.span.DroppedAttrs++\n\t\t\tcontinue\n\t\t}\n\n\t\tif idx, ok := m[string(a.Key)]; ok {\n\t\t\ts.span.Attrs[idx] = telemetry.Attr{\n\t\t\t\tKey:   string(a.Key),\n\t\t\t\tValue: val,\n\t\t\t}\n\t\t} else if limit < 0 || len(s.span.Attrs) < limit {\n\t\t\ts.span.Attrs = append(s.span.Attrs, telemetry.Attr{\n\t\t\t\tKey:   string(a.Key),\n\t\t\t\tValue: val,\n\t\t\t})\n\t\t\tm[string(a.Key)] = len(s.span.Attrs) - 1\n\t\t} else {\n\t\t\ts.span.DroppedAttrs++\n\t\t}\n\t}\n}\n\n// convCappedAttrs converts up to limit attrs into a []telemetry.Attr. The\n// number of dropped attributes is also returned.\nfunc convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, uint32) {\n\tn := len(attrs)\n\tif limit == 0 {\n\t\tvar out uint32\n\t\tif n > 0 {\n\t\t\tout = uint32(min(int64(n), math.MaxUint32)) // nolint: gosec  // Bounds checked.\n\t\t}\n\t\treturn nil, out\n\t}\n\n\tif limit < 0 {\n\t\t// Unlimited.\n\t\treturn convAttrs(attrs), 0\n\t}\n\n\tif n < 0 {\n\t\tn = 0\n\t}\n\n\tlimit = min(n, limit)\n\treturn convAttrs(attrs[:limit]), uint32(n - limit) // nolint: gosec  // Bounds checked.\n}\n\nfunc convAttrs(attrs []attribute.KeyValue) []telemetry.Attr {\n\tif len(attrs) == 0 {\n\t\t// Avoid allocations if not necessary.\n\t\treturn nil\n\t}\n\n\tout := make([]telemetry.Attr, 0, len(attrs))\n\tfor _, attr := range attrs {\n\t\tkey := string(attr.Key)\n\t\tval := convAttrValue(attr.Value)\n\t\tif val.Empty() {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, telemetry.Attr{Key: key, Value: val})\n\t}\n\treturn out\n}\n\nfunc convAttrValue(value attribute.Value) telemetry.Value {\n\tswitch value.Type() {\n\tcase attribute.BOOL:\n\t\treturn telemetry.BoolValue(value.AsBool())\n\tcase attribute.INT64:\n\t\treturn telemetry.Int64Value(value.AsInt64())\n\tcase attribute.FLOAT64:\n\t\treturn telemetry.Float64Value(value.AsFloat64())\n\tcase attribute.STRING:\n\t\tv := truncate(maxSpan.AttrValueLen, value.AsString())\n\t\treturn telemetry.StringValue(v)\n\tcase attribute.BOOLSLICE:\n\t\tslice := value.AsBoolSlice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tout = append(out, telemetry.BoolValue(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\tcase attribute.INT64SLICE:\n\t\tslice := value.AsInt64Slice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tout = append(out, telemetry.Int64Value(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\tcase attribute.FLOAT64SLICE:\n\t\tslice := value.AsFloat64Slice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tout = append(out, telemetry.Float64Value(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\tcase attribute.STRINGSLICE:\n\t\tslice := value.AsStringSlice()\n\t\tout := make([]telemetry.Value, 0, len(slice))\n\t\tfor _, v := range slice {\n\t\t\tv = truncate(maxSpan.AttrValueLen, v)\n\t\t\tout = append(out, telemetry.StringValue(v))\n\t\t}\n\t\treturn telemetry.SliceValue(out...)\n\t}\n\treturn telemetry.Value{}\n}\n\n// truncate returns a truncated version of s such that it contains less than\n// the limit number of characters. Truncation is applied by returning the limit\n// number of valid characters contained in s.\n//\n// If limit is negative, it returns the original string.\n//\n// UTF-8 is supported. When truncating, all invalid characters are dropped\n// before applying truncation.\n//\n// If s already contains less than the limit number of bytes, it is returned\n// unchanged. No invalid characters are removed.\nfunc truncate(limit int, s string) string {\n\t// This prioritize performance in the following order based on the most\n\t// common expected use-cases.\n\t//\n\t//  - Short values less than the default limit (128).\n\t//  - Strings with valid encodings that exceed the limit.\n\t//  - No limit.\n\t//  - Strings with invalid encodings that exceed the limit.\n\tif limit < 0 || len(s) <= limit {\n\t\treturn s\n\t}\n\n\t// Optimistically, assume all valid UTF-8.\n\tvar b strings.Builder\n\tcount := 0\n\tfor i, c := range s {\n\t\tif c != utf8.RuneError {\n\t\t\tcount++\n\t\t\tif count > limit {\n\t\t\t\treturn s[:i]\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t_, size := utf8.DecodeRuneInString(s[i:])\n\t\tif size == 1 {\n\t\t\t// Invalid encoding.\n\t\t\tb.Grow(len(s) - 1)\n\t\t\t_, _ = b.WriteString(s[:i])\n\t\t\ts = s[i:]\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Fast-path, no invalid input.\n\tif b.Cap() == 0 {\n\t\treturn s\n\t}\n\n\t// Truncate while validating UTF-8.\n\tfor i := 0; i < len(s) && count < limit; {\n\t\tc := s[i]\n\t\tif c < utf8.RuneSelf {\n\t\t\t// Optimization for single byte runes (common case).\n\t\t\t_ = b.WriteByte(c)\n\t\t\ti++\n\t\t\tcount++\n\t\t\tcontinue\n\t\t}\n\n\t\t_, size := utf8.DecodeRuneInString(s[i:])\n\t\tif size == 1 {\n\t\t\t// We checked for all 1-byte runes above, this is a RuneError.\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\n\t\t_, _ = b.WriteString(s[i : i+size])\n\t\ti += size\n\t\tcount++\n\t}\n\n\treturn b.String()\n}\n\nfunc (s *autoSpan) End(opts ...SpanEndOption) {\n\tif s == nil || !s.sampled.Swap(false) {\n\t\treturn\n\t}\n\n\t// s.end exists so the lock (s.mu) is not held while s.ended is called.\n\ts.ended(s.end(opts))\n}\n\nfunc (s *autoSpan) end(opts []SpanEndOption) []byte {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tcfg := NewSpanEndConfig(opts...)\n\tif t := cfg.Timestamp(); !t.IsZero() {\n\t\ts.span.EndTime = cfg.Timestamp()\n\t} else {\n\t\ts.span.EndTime = time.Now()\n\t}\n\n\tb, _ := json.Marshal(s.traces) // TODO: do not ignore this error.\n\treturn b\n}\n\n// Expected to be implemented in eBPF.\n//\n//go:noinline\nfunc (*autoSpan) ended(buf []byte) { ended(buf) }\n\n// ended is used for testing.\nvar ended = func([]byte) {}\n\nfunc (s *autoSpan) RecordError(err error, opts ...EventOption) {\n\tif s == nil || err == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\tcfg := NewEventConfig(opts...)\n\n\tattrs := cfg.Attributes()\n\tattrs = append(attrs,\n\t\tsemconv.ExceptionType(typeStr(err)),\n\t\tsemconv.ExceptionMessage(err.Error()),\n\t)\n\tif cfg.StackTrace() {\n\t\tbuf := make([]byte, 2048)\n\t\tn := runtime.Stack(buf, false)\n\t\tattrs = append(attrs, semconv.ExceptionStacktrace(string(buf[0:n])))\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\ts.addEvent(semconv.ExceptionEventName, cfg.Timestamp(), attrs)\n}\n\nfunc typeStr(i any) string {\n\tt := reflect.TypeOf(i)\n\tif t.PkgPath() == \"\" && t.Name() == \"\" {\n\t\t// Likely a builtin type.\n\t\treturn t.String()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", t.PkgPath(), t.Name())\n}\n\nfunc (s *autoSpan) AddEvent(name string, opts ...EventOption) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\tcfg := NewEventConfig(opts...)\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\ts.addEvent(name, cfg.Timestamp(), cfg.Attributes())\n}\n\n// addEvent adds an event with name and attrs at tStamp to the span. The span\n// lock (s.mu) needs to be held by the caller.\nfunc (s *autoSpan) addEvent(name string, tStamp time.Time, attrs []attribute.KeyValue) {\n\tlimit := maxSpan.Events\n\n\tif limit == 0 {\n\t\ts.span.DroppedEvents++\n\t\treturn\n\t}\n\n\tif limit > 0 && len(s.span.Events) == limit {\n\t\t// Drop head while avoiding allocation of more capacity.\n\t\tcopy(s.span.Events[:limit-1], s.span.Events[1:])\n\t\ts.span.Events = s.span.Events[:limit-1]\n\t\ts.span.DroppedEvents++\n\t}\n\n\te := &telemetry.SpanEvent{Time: tStamp, Name: name}\n\te.Attrs, e.DroppedAttrs = convCappedAttrs(maxSpan.EventAttrs, attrs)\n\n\ts.span.Events = append(s.span.Events, e)\n}\n\nfunc (s *autoSpan) AddLink(link Link) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\tl := maxSpan.Links\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tif l == 0 {\n\t\ts.span.DroppedLinks++\n\t\treturn\n\t}\n\n\tif l > 0 && len(s.span.Links) == l {\n\t\t// Drop head while avoiding allocation of more capacity.\n\t\tcopy(s.span.Links[:l-1], s.span.Links[1:])\n\t\ts.span.Links = s.span.Links[:l-1]\n\t\ts.span.DroppedLinks++\n\t}\n\n\ts.span.Links = append(s.span.Links, convLink(link))\n}\n\nfunc convLinks(links []Link) []*telemetry.SpanLink {\n\tout := make([]*telemetry.SpanLink, 0, len(links))\n\tfor _, link := range links {\n\t\tout = append(out, convLink(link))\n\t}\n\treturn out\n}\n\nfunc convLink(link Link) *telemetry.SpanLink {\n\tl := &telemetry.SpanLink{\n\t\tTraceID:    telemetry.TraceID(link.SpanContext.TraceID()),\n\t\tSpanID:     telemetry.SpanID(link.SpanContext.SpanID()),\n\t\tTraceState: link.SpanContext.TraceState().String(),\n\t\tFlags:      uint32(link.SpanContext.TraceFlags()),\n\t}\n\tl.Attrs, l.DroppedAttrs = convCappedAttrs(maxSpan.LinkAttrs, link.Attributes)\n\n\treturn l\n}\n\nfunc (s *autoSpan) SetName(name string) {\n\tif s == nil || !s.sampled.Load() {\n\t\treturn\n\t}\n\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\ts.span.Name = name\n}\n\nfunc (*autoSpan) TracerProvider() TracerProvider { return newAutoTracerProvider() }\n\n// maxSpan are the span limits resolved during startup.\nvar maxSpan = newSpanLimits()\n\ntype spanLimits struct {\n\t// Attrs is the number of allowed attributes for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT key if it exists. Otherwise, the\n\t// environment variable value for OTEL_ATTRIBUTE_COUNT_LIMIT, or 128 if\n\t// that is not set, is used.\n\tAttrs int\n\t// AttrValueLen is the maximum attribute value length allowed for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT key if it exists. Otherwise, the\n\t// environment variable value for OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, or -1\n\t// if that is not set, is used.\n\tAttrValueLen int\n\t// Events is the number of allowed events for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_EVENT_COUNT_LIMIT key, or 128 is used if that is not set.\n\tEvents int\n\t// EventAttrs is the number of allowed attributes for a span event.\n\t//\n\t// The is resolved from the environment variable value for the\n\t// OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT key, or 128 is used if that is not set.\n\tEventAttrs int\n\t// Links is the number of allowed Links for a span.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_SPAN_LINK_COUNT_LIMIT, or 128 is used if that is not set.\n\tLinks int\n\t// LinkAttrs is the number of allowed attributes for a span link.\n\t//\n\t// This is resolved from the environment variable value for the\n\t// OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, or 128 is used if that is not set.\n\tLinkAttrs int\n}\n\nfunc newSpanLimits() spanLimits {\n\treturn spanLimits{\n\t\tAttrs: firstEnv(\n\t\t\t128,\n\t\t\t\"OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT\",\n\t\t\t\"OTEL_ATTRIBUTE_COUNT_LIMIT\",\n\t\t),\n\t\tAttrValueLen: firstEnv(\n\t\t\t-1, // Unlimited.\n\t\t\t\"OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT\",\n\t\t\t\"OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT\",\n\t\t),\n\t\tEvents:     firstEnv(128, \"OTEL_SPAN_EVENT_COUNT_LIMIT\"),\n\t\tEventAttrs: firstEnv(128, \"OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT\"),\n\t\tLinks:      firstEnv(128, \"OTEL_SPAN_LINK_COUNT_LIMIT\"),\n\t\tLinkAttrs:  firstEnv(128, \"OTEL_LINK_ATTRIBUTE_COUNT_LIMIT\"),\n\t}\n}\n\n// firstEnv returns the parsed integer value of the first matching environment\n// variable from keys. The defaultVal is returned if the value is not an\n// integer or no match is found.\nfunc firstEnv(defaultVal int, keys ...string) int {\n\tfor _, key := range keys {\n\t\tstrV := os.Getenv(key)\n\t\tif strV == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tv, err := strconv.Atoi(strV)\n\t\tif err == nil {\n\t\t\treturn v\n\t\t}\n\t\t// Ignore invalid environment variable.\n\t}\n\n\treturn defaultVal\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/config.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport (\n\t\"time\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n)\n\n// TracerConfig is a group of options for a Tracer.\ntype TracerConfig struct {\n\tinstrumentationVersion string\n\t// Schema URL of the telemetry emitted by the Tracer.\n\tschemaURL string\n\tattrs     attribute.Set\n}\n\n// InstrumentationVersion returns the version of the library providing instrumentation.\nfunc (t *TracerConfig) InstrumentationVersion() string {\n\treturn t.instrumentationVersion\n}\n\n// InstrumentationAttributes returns the attributes associated with the library\n// providing instrumentation.\nfunc (t *TracerConfig) InstrumentationAttributes() attribute.Set {\n\treturn t.attrs\n}\n\n// SchemaURL returns the Schema URL of the telemetry emitted by the Tracer.\nfunc (t *TracerConfig) SchemaURL() string {\n\treturn t.schemaURL\n}\n\n// NewTracerConfig applies all the options to a returned TracerConfig.\nfunc NewTracerConfig(options ...TracerOption) TracerConfig {\n\tvar config TracerConfig\n\tfor _, option := range options {\n\t\tconfig = option.apply(config)\n\t}\n\treturn config\n}\n\n// TracerOption applies an option to a TracerConfig.\ntype TracerOption interface {\n\tapply(TracerConfig) TracerConfig\n}\n\ntype tracerOptionFunc func(TracerConfig) TracerConfig\n\nfunc (fn tracerOptionFunc) apply(cfg TracerConfig) TracerConfig {\n\treturn fn(cfg)\n}\n\n// SpanConfig is a group of options for a Span.\ntype SpanConfig struct {\n\tattributes []attribute.KeyValue\n\ttimestamp  time.Time\n\tlinks      []Link\n\tnewRoot    bool\n\tspanKind   SpanKind\n\tstackTrace bool\n}\n\n// Attributes describe the associated qualities of a Span.\nfunc (cfg *SpanConfig) Attributes() []attribute.KeyValue {\n\treturn cfg.attributes\n}\n\n// Timestamp is a time in a Span life-cycle.\nfunc (cfg *SpanConfig) Timestamp() time.Time {\n\treturn cfg.timestamp\n}\n\n// StackTrace checks whether stack trace capturing is enabled.\nfunc (cfg *SpanConfig) StackTrace() bool {\n\treturn cfg.stackTrace\n}\n\n// Links are the associations a Span has with other Spans.\nfunc (cfg *SpanConfig) Links() []Link {\n\treturn cfg.links\n}\n\n// NewRoot identifies a Span as the root Span for a new trace. This is\n// commonly used when an existing trace crosses trust boundaries and the\n// remote parent span context should be ignored for security.\nfunc (cfg *SpanConfig) NewRoot() bool {\n\treturn cfg.newRoot\n}\n\n// SpanKind is the role a Span has in a trace.\nfunc (cfg *SpanConfig) SpanKind() SpanKind {\n\treturn cfg.spanKind\n}\n\n// NewSpanStartConfig applies all the options to a returned SpanConfig.\n// No validation is performed on the returned SpanConfig (e.g. no uniqueness\n// checking or bounding of data), it is left to the SDK to perform this\n// action.\nfunc NewSpanStartConfig(options ...SpanStartOption) SpanConfig {\n\tvar c SpanConfig\n\tfor _, option := range options {\n\t\tc = option.applySpanStart(c)\n\t}\n\treturn c\n}\n\n// NewSpanEndConfig applies all the options to a returned SpanConfig.\n// No validation is performed on the returned SpanConfig (e.g. no uniqueness\n// checking or bounding of data), it is left to the SDK to perform this\n// action.\nfunc NewSpanEndConfig(options ...SpanEndOption) SpanConfig {\n\tvar c SpanConfig\n\tfor _, option := range options {\n\t\tc = option.applySpanEnd(c)\n\t}\n\treturn c\n}\n\n// SpanStartOption applies an option to a SpanConfig. These options are applicable\n// only when the span is created.\ntype SpanStartOption interface {\n\tapplySpanStart(SpanConfig) SpanConfig\n}\n\ntype spanOptionFunc func(SpanConfig) SpanConfig\n\nfunc (fn spanOptionFunc) applySpanStart(cfg SpanConfig) SpanConfig {\n\treturn fn(cfg)\n}\n\n// SpanEndOption applies an option to a SpanConfig. These options are\n// applicable only when the span is ended.\ntype SpanEndOption interface {\n\tapplySpanEnd(SpanConfig) SpanConfig\n}\n\n// EventConfig is a group of options for an Event.\ntype EventConfig struct {\n\tattributes []attribute.KeyValue\n\ttimestamp  time.Time\n\tstackTrace bool\n}\n\n// Attributes describe the associated qualities of an Event.\nfunc (cfg *EventConfig) Attributes() []attribute.KeyValue {\n\treturn cfg.attributes\n}\n\n// Timestamp is a time in an Event life-cycle.\nfunc (cfg *EventConfig) Timestamp() time.Time {\n\treturn cfg.timestamp\n}\n\n// StackTrace checks whether stack trace capturing is enabled.\nfunc (cfg *EventConfig) StackTrace() bool {\n\treturn cfg.stackTrace\n}\n\n// NewEventConfig applies all the EventOptions to a returned EventConfig. If no\n// timestamp option is passed, the returned EventConfig will have a Timestamp\n// set to the call time, otherwise no validation is performed on the returned\n// EventConfig.\nfunc NewEventConfig(options ...EventOption) EventConfig {\n\tvar c EventConfig\n\tfor _, option := range options {\n\t\tc = option.applyEvent(c)\n\t}\n\tif c.timestamp.IsZero() {\n\t\tc.timestamp = time.Now()\n\t}\n\treturn c\n}\n\n// EventOption applies span event options to an EventConfig.\ntype EventOption interface {\n\tapplyEvent(EventConfig) EventConfig\n}\n\n// SpanOption are options that can be used at both the beginning and end of a span.\ntype SpanOption interface {\n\tSpanStartOption\n\tSpanEndOption\n}\n\n// SpanStartEventOption are options that can be used at the start of a span, or with an event.\ntype SpanStartEventOption interface {\n\tSpanStartOption\n\tEventOption\n}\n\n// SpanEndEventOption are options that can be used at the end of a span, or with an event.\ntype SpanEndEventOption interface {\n\tSpanEndOption\n\tEventOption\n}\n\ntype attributeOption []attribute.KeyValue\n\nfunc (o attributeOption) applySpan(c SpanConfig) SpanConfig {\n\tc.attributes = append(c.attributes, []attribute.KeyValue(o)...)\n\treturn c\n}\nfunc (o attributeOption) applySpanStart(c SpanConfig) SpanConfig { return o.applySpan(c) }\nfunc (o attributeOption) applyEvent(c EventConfig) EventConfig {\n\tc.attributes = append(c.attributes, []attribute.KeyValue(o)...)\n\treturn c\n}\n\nvar _ SpanStartEventOption = attributeOption{}\n\n// WithAttributes adds the attributes related to a span life-cycle event.\n// These attributes are used to describe the work a Span represents when this\n// option is provided to a Span's start event. Otherwise, these\n// attributes provide additional information about the event being recorded\n// (e.g. error, state change, processing progress, system event).\n//\n// If multiple of these options are passed the attributes of each successive\n// option will extend the attributes instead of overwriting. There is no\n// guarantee of uniqueness in the resulting attributes.\nfunc WithAttributes(attributes ...attribute.KeyValue) SpanStartEventOption {\n\treturn attributeOption(attributes)\n}\n\n// SpanEventOption are options that can be used with an event or a span.\ntype SpanEventOption interface {\n\tSpanOption\n\tEventOption\n}\n\ntype timestampOption time.Time\n\nfunc (o timestampOption) applySpan(c SpanConfig) SpanConfig {\n\tc.timestamp = time.Time(o)\n\treturn c\n}\nfunc (o timestampOption) applySpanStart(c SpanConfig) SpanConfig { return o.applySpan(c) }\nfunc (o timestampOption) applySpanEnd(c SpanConfig) SpanConfig   { return o.applySpan(c) }\nfunc (o timestampOption) applyEvent(c EventConfig) EventConfig {\n\tc.timestamp = time.Time(o)\n\treturn c\n}\n\nvar _ SpanEventOption = timestampOption{}\n\n// WithTimestamp sets the time of a Span or Event life-cycle moment (e.g.\n// started, stopped, errored).\nfunc WithTimestamp(t time.Time) SpanEventOption {\n\treturn timestampOption(t)\n}\n\ntype stackTraceOption bool\n\nfunc (o stackTraceOption) applyEvent(c EventConfig) EventConfig {\n\tc.stackTrace = bool(o)\n\treturn c\n}\n\nfunc (o stackTraceOption) applySpan(c SpanConfig) SpanConfig {\n\tc.stackTrace = bool(o)\n\treturn c\n}\nfunc (o stackTraceOption) applySpanEnd(c SpanConfig) SpanConfig { return o.applySpan(c) }\n\n// WithStackTrace sets the flag to capture the error with stack trace (e.g. true, false).\nfunc WithStackTrace(b bool) SpanEndEventOption {\n\treturn stackTraceOption(b)\n}\n\n// WithLinks adds links to a Span. The links are added to the existing Span\n// links, i.e. this does not overwrite. Links with invalid span context are ignored.\nfunc WithLinks(links ...Link) SpanStartOption {\n\treturn spanOptionFunc(func(cfg SpanConfig) SpanConfig {\n\t\tcfg.links = append(cfg.links, links...)\n\t\treturn cfg\n\t})\n}\n\n// WithNewRoot specifies that the Span should be treated as a root Span. Any\n// existing parent span context will be ignored when defining the Span's trace\n// identifiers.\nfunc WithNewRoot() SpanStartOption {\n\treturn spanOptionFunc(func(cfg SpanConfig) SpanConfig {\n\t\tcfg.newRoot = true\n\t\treturn cfg\n\t})\n}\n\n// WithSpanKind sets the SpanKind of a Span.\nfunc WithSpanKind(kind SpanKind) SpanStartOption {\n\treturn spanOptionFunc(func(cfg SpanConfig) SpanConfig {\n\t\tcfg.spanKind = kind\n\t\treturn cfg\n\t})\n}\n\n// WithInstrumentationVersion sets the instrumentation version.\nfunc WithInstrumentationVersion(version string) TracerOption {\n\treturn tracerOptionFunc(func(cfg TracerConfig) TracerConfig {\n\t\tcfg.instrumentationVersion = version\n\t\treturn cfg\n\t})\n}\n\n// WithInstrumentationAttributes sets the instrumentation attributes.\n//\n// The passed attributes will be de-duplicated.\nfunc WithInstrumentationAttributes(attr ...attribute.KeyValue) TracerOption {\n\treturn tracerOptionFunc(func(config TracerConfig) TracerConfig {\n\t\tconfig.attrs = attribute.NewSet(attr...)\n\t\treturn config\n\t})\n}\n\n// WithSchemaURL sets the schema URL for the Tracer.\nfunc WithSchemaURL(schemaURL string) TracerOption {\n\treturn tracerOptionFunc(func(cfg TracerConfig) TracerConfig {\n\t\tcfg.schemaURL = schemaURL\n\t\treturn cfg\n\t})\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/context.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport \"context\"\n\ntype traceContextKeyType int\n\nconst currentSpanKey traceContextKeyType = iota\n\n// ContextWithSpan returns a copy of parent with span set as the current Span.\nfunc ContextWithSpan(parent context.Context, span Span) context.Context {\n\treturn context.WithValue(parent, currentSpanKey, span)\n}\n\n// ContextWithSpanContext returns a copy of parent with sc as the current\n// Span. The Span implementation that wraps sc is non-recording and performs\n// no operations other than to return sc as the SpanContext from the\n// SpanContext method.\nfunc ContextWithSpanContext(parent context.Context, sc SpanContext) context.Context {\n\treturn ContextWithSpan(parent, nonRecordingSpan{sc: sc})\n}\n\n// ContextWithRemoteSpanContext returns a copy of parent with rsc set explicitly\n// as a remote SpanContext and as the current Span. The Span implementation\n// that wraps rsc is non-recording and performs no operations other than to\n// return rsc as the SpanContext from the SpanContext method.\nfunc ContextWithRemoteSpanContext(parent context.Context, rsc SpanContext) context.Context {\n\treturn ContextWithSpanContext(parent, rsc.WithRemote(true))\n}\n\n// SpanFromContext returns the current Span from ctx.\n//\n// If no Span is currently set in ctx an implementation of a Span that\n// performs no operations is returned.\nfunc SpanFromContext(ctx context.Context) Span {\n\tif ctx == nil {\n\t\treturn noopSpanInstance\n\t}\n\tif span, ok := ctx.Value(currentSpanKey).(Span); ok {\n\t\treturn span\n\t}\n\treturn noopSpanInstance\n}\n\n// SpanContextFromContext returns the current Span's SpanContext.\nfunc SpanContextFromContext(ctx context.Context) SpanContext {\n\treturn SpanFromContext(ctx).SpanContext()\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage trace provides an implementation of the tracing part of the\nOpenTelemetry API.\n\nTo participate in distributed traces a Span needs to be created for the\noperation being performed as part of a traced workflow. In its simplest form:\n\n\tvar tracer trace.Tracer\n\n\tfunc init() {\n\t\ttracer = otel.Tracer(\"instrumentation/package/name\")\n\t}\n\n\tfunc operation(ctx context.Context) {\n\t\tvar span trace.Span\n\t\tctx, span = tracer.Start(ctx, \"operation\")\n\t\tdefer span.End()\n\t\t// ...\n\t}\n\nA Tracer is unique to the instrumentation and is used to create Spans.\nInstrumentation should be designed to accept a TracerProvider from which it\ncan create its own unique Tracer. Alternatively, the registered global\nTracerProvider from the go.opentelemetry.io/otel package can be used as\na default.\n\n\tconst (\n\t\tname    = \"instrumentation/package/name\"\n\t\tversion = \"0.1.0\"\n\t)\n\n\ttype Instrumentation struct {\n\t\ttracer trace.Tracer\n\t}\n\n\tfunc NewInstrumentation(tp trace.TracerProvider) *Instrumentation {\n\t\tif tp == nil {\n\t\t\ttp = otel.TracerProvider()\n\t\t}\n\t\treturn &Instrumentation{\n\t\t\ttracer: tp.Tracer(name, trace.WithInstrumentationVersion(version)),\n\t\t}\n\t}\n\n\tfunc operation(ctx context.Context, inst *Instrumentation) {\n\t\tvar span trace.Span\n\t\tctx, span = inst.tracer.Start(ctx, \"operation\")\n\t\tdefer span.End()\n\t\t// ...\n\t}\n\n# API Implementations\n\nThis package does not conform to the standard Go versioning policy; all of its\ninterfaces may have methods added to them without a package major version bump.\nThis non-standard API evolution could surprise an uninformed implementation\nauthor. They could unknowingly build their implementation in a way that would\nresult in a runtime panic for their users that update to the new API.\n\nThe API is designed to help inform an instrumentation author about this\nnon-standard API evolution. It requires them to choose a default behavior for\nunimplemented interface methods. There are three behavior choices they can\nmake:\n\n  - Compilation failure\n  - Panic\n  - Default to another implementation\n\nAll interfaces in this API embed a corresponding interface from\n[go.opentelemetry.io/otel/trace/embedded]. If an author wants the default\nbehavior of their implementations to be a compilation failure, signaling to\ntheir users they need to update to the latest version of that implementation,\nthey need to embed the corresponding interface from\n[go.opentelemetry.io/otel/trace/embedded] in their implementation. For\nexample,\n\n\timport \"go.opentelemetry.io/otel/trace/embedded\"\n\n\ttype TracerProvider struct {\n\t\tembedded.TracerProvider\n\t\t// ...\n\t}\n\nIf an author wants the default behavior of their implementations to panic, they\ncan embed the API interface directly.\n\n\timport \"go.opentelemetry.io/otel/trace\"\n\n\ttype TracerProvider struct {\n\t\ttrace.TracerProvider\n\t\t// ...\n\t}\n\nThis option is not recommended. It will lead to publishing packages that\ncontain runtime panics when users update to newer versions of\n[go.opentelemetry.io/otel/trace], which may be done with a transitive\ndependency.\n\nFinally, an author can embed another implementation in theirs. The embedded\nimplementation will be used for methods not defined by the author. For example,\nan author who wants to default to silently dropping the call can use\n[go.opentelemetry.io/otel/trace/noop]:\n\n\timport \"go.opentelemetry.io/otel/trace/noop\"\n\n\ttype TracerProvider struct {\n\t\tnoop.TracerProvider\n\t\t// ...\n\t}\n\nIt is strongly recommended that authors only embed\n[go.opentelemetry.io/otel/trace/noop] if they choose this default behavior.\nThat implementation is the only one OpenTelemetry authors can guarantee will\nfully implement all the API interfaces when a user updates their API.\n*/\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/embedded/README.md",
    "content": "# Trace Embedded\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/trace/embedded)](https://pkg.go.dev/go.opentelemetry.io/otel/trace/embedded)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/embedded/embedded.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Package embedded provides interfaces embedded within the [OpenTelemetry\n// trace API].\n//\n// Implementers of the [OpenTelemetry trace API] can embed the relevant type\n// from this package into their implementation directly. Doing so will result\n// in a compilation error for users when the [OpenTelemetry trace API] is\n// extended (which is something that can happen without a major version bump of\n// the API package).\n//\n// [OpenTelemetry trace API]: https://pkg.go.dev/go.opentelemetry.io/otel/trace\npackage embedded // import \"go.opentelemetry.io/otel/trace/embedded\"\n\n// TracerProvider is embedded in\n// [go.opentelemetry.io/otel/trace.TracerProvider].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/trace.TracerProvider] if you want users to\n// experience a compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/trace.TracerProvider]\n// interface is extended (which is something that can happen without a major\n// version bump of the API package).\ntype TracerProvider interface{ tracerProvider() }\n\n// Tracer is embedded in [go.opentelemetry.io/otel/trace.Tracer].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/trace.Tracer] if you want users to experience a\n// compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/trace.Tracer] interface\n// is extended (which is something that can happen without a major version bump\n// of the API package).\ntype Tracer interface{ tracer() }\n\n// Span is embedded in [go.opentelemetry.io/otel/trace.Span].\n//\n// Embed this interface in your implementation of the\n// [go.opentelemetry.io/otel/trace.Span] if you want users to experience a\n// compilation error, signaling they need to update to your latest\n// implementation, when the [go.opentelemetry.io/otel/trace.Span] interface is\n// extended (which is something that can happen without a major version bump of\n// the API package).\ntype Span interface{ span() }\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/attr.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\n// Attr is a key-value pair.\ntype Attr struct {\n\tKey   string `json:\"key,omitempty\"`\n\tValue Value  `json:\"value,omitempty\"`\n}\n\n// String returns an Attr for a string value.\nfunc String(key, value string) Attr {\n\treturn Attr{key, StringValue(value)}\n}\n\n// Int64 returns an Attr for an int64 value.\nfunc Int64(key string, value int64) Attr {\n\treturn Attr{key, Int64Value(value)}\n}\n\n// Int returns an Attr for an int value.\nfunc Int(key string, value int) Attr {\n\treturn Int64(key, int64(value))\n}\n\n// Float64 returns an Attr for a float64 value.\nfunc Float64(key string, value float64) Attr {\n\treturn Attr{key, Float64Value(value)}\n}\n\n// Bool returns an Attr for a bool value.\nfunc Bool(key string, value bool) Attr {\n\treturn Attr{key, BoolValue(value)}\n}\n\n// Bytes returns an Attr for a []byte value.\n// The passed slice must not be changed after it is passed.\nfunc Bytes(key string, value []byte) Attr {\n\treturn Attr{key, BytesValue(value)}\n}\n\n// Slice returns an Attr for a []Value value.\n// The passed slice must not be changed after it is passed.\nfunc Slice(key string, value ...Value) Attr {\n\treturn Attr{key, SliceValue(value...)}\n}\n\n// Map returns an Attr for a map value.\n// The passed slice must not be changed after it is passed.\nfunc Map(key string, value ...Attr) Attr {\n\treturn Attr{key, MapValue(value...)}\n}\n\n// Equal returns if a is equal to b.\nfunc (a Attr) Equal(b Attr) bool {\n\treturn a.Key == b.Key && a.Value.Equal(b.Value)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/doc.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n/*\nPackage telemetry provides a lightweight representations of OpenTelemetry\ntelemetry that is compatible with the OTLP JSON protobuf encoding.\n*/\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/id.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\nimport (\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n)\n\nconst (\n\ttraceIDSize = 16\n\tspanIDSize  = 8\n)\n\n// TraceID is a custom data type that is used for all trace IDs.\ntype TraceID [traceIDSize]byte\n\n// String returns the hex string representation form of a TraceID.\nfunc (tid TraceID) String() string {\n\treturn hex.EncodeToString(tid[:])\n}\n\n// IsEmpty returns false if id contains at least one non-zero byte.\nfunc (tid TraceID) IsEmpty() bool {\n\treturn tid == [traceIDSize]byte{}\n}\n\n// MarshalJSON converts the trace ID into a hex string enclosed in quotes.\nfunc (tid TraceID) MarshalJSON() ([]byte, error) {\n\tif tid.IsEmpty() {\n\t\treturn []byte(`\"\"`), nil\n\t}\n\treturn marshalJSON(tid[:])\n}\n\n// UnmarshalJSON inflates the trace ID from hex string, possibly enclosed in\n// quotes.\nfunc (tid *TraceID) UnmarshalJSON(data []byte) error {\n\t*tid = [traceIDSize]byte{}\n\treturn unmarshalJSON(tid[:], data)\n}\n\n// SpanID is a custom data type that is used for all span IDs.\ntype SpanID [spanIDSize]byte\n\n// String returns the hex string representation form of a SpanID.\nfunc (sid SpanID) String() string {\n\treturn hex.EncodeToString(sid[:])\n}\n\n// IsEmpty returns true if the span ID contains at least one non-zero byte.\nfunc (sid SpanID) IsEmpty() bool {\n\treturn sid == [spanIDSize]byte{}\n}\n\n// MarshalJSON converts span ID into a hex string enclosed in quotes.\nfunc (sid SpanID) MarshalJSON() ([]byte, error) {\n\tif sid.IsEmpty() {\n\t\treturn []byte(`\"\"`), nil\n\t}\n\treturn marshalJSON(sid[:])\n}\n\n// UnmarshalJSON decodes span ID from hex string, possibly enclosed in quotes.\nfunc (sid *SpanID) UnmarshalJSON(data []byte) error {\n\t*sid = [spanIDSize]byte{}\n\treturn unmarshalJSON(sid[:], data)\n}\n\n// marshalJSON converts id into a hex string enclosed in quotes.\nfunc marshalJSON(id []byte) ([]byte, error) {\n\t// Plus 2 quote chars at the start and end.\n\thexLen := hex.EncodedLen(len(id)) + 2\n\n\tb := make([]byte, hexLen)\n\thex.Encode(b[1:hexLen-1], id)\n\tb[0], b[hexLen-1] = '\"', '\"'\n\n\treturn b, nil\n}\n\n// unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes.\nfunc unmarshalJSON(dst []byte, src []byte) error {\n\tif l := len(src); l >= 2 && src[0] == '\"' && src[l-1] == '\"' {\n\t\tsrc = src[1 : l-1]\n\t}\n\tnLen := len(src)\n\tif nLen == 0 {\n\t\treturn nil\n\t}\n\n\tif len(dst) != hex.DecodedLen(nLen) {\n\t\treturn errors.New(\"invalid length for ID\")\n\t}\n\n\t_, err := hex.Decode(dst, src)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot unmarshal ID from string '%s': %w\", string(src), err)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/number.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\nimport (\n\t\"encoding/json\"\n\t\"strconv\"\n)\n\n// protoInt64 represents the protobuf encoding of integers which can be either\n// strings or integers.\ntype protoInt64 int64\n\n// Int64 returns the protoInt64 as an int64.\nfunc (i *protoInt64) Int64() int64 { return int64(*i) }\n\n// UnmarshalJSON decodes both strings and integers.\nfunc (i *protoInt64) UnmarshalJSON(data []byte) error {\n\tif data[0] == '\"' {\n\t\tvar str string\n\t\tif err := json.Unmarshal(data, &str); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tparsedInt, err := strconv.ParseInt(str, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoInt64(parsedInt)\n\t} else {\n\t\tvar parsedInt int64\n\t\tif err := json.Unmarshal(data, &parsedInt); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoInt64(parsedInt)\n\t}\n\treturn nil\n}\n\n// protoUint64 represents the protobuf encoding of integers which can be either\n// strings or integers.\ntype protoUint64 uint64\n\n// Int64 returns the protoUint64 as a uint64.\nfunc (i *protoUint64) Uint64() uint64 { return uint64(*i) }\n\n// UnmarshalJSON decodes both strings and integers.\nfunc (i *protoUint64) UnmarshalJSON(data []byte) error {\n\tif data[0] == '\"' {\n\t\tvar str string\n\t\tif err := json.Unmarshal(data, &str); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tparsedUint, err := strconv.ParseUint(str, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoUint64(parsedUint)\n\t} else {\n\t\tvar parsedUint uint64\n\t\tif err := json.Unmarshal(data, &parsedUint); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*i = protoUint64(parsedUint)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/resource.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Resource information.\ntype Resource struct {\n\t// Attrs are the set of attributes that describe the resource. Attribute\n\t// keys MUST be unique (it is not allowed to have more than one attribute\n\t// with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// DroppedAttrs is the number of dropped attributes. If the value\n\t// is 0, then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r.\nfunc (r *Resource) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Resource type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Resource field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&r.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&r.DroppedAttrs)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/scope.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Scope is the identifying values of the instrumentation scope.\ntype Scope struct {\n\tName         string `json:\"name,omitempty\"`\n\tVersion      string `json:\"version,omitempty\"`\n\tAttrs        []Attr `json:\"attributes,omitempty\"`\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r.\nfunc (s *Scope) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Scope type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Scope field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"name\":\n\t\t\terr = decoder.Decode(&s.Name)\n\t\tcase \"version\":\n\t\t\terr = decoder.Decode(&s.Version)\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&s.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&s.DroppedAttrs)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/span.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"time\"\n)\n\n// A Span represents a single operation performed by a single component of the\n// system.\ntype Span struct {\n\t// A unique identifier for a trace. All spans from the same trace share\n\t// the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR\n\t// of length other than 16 bytes is considered invalid (empty string in OTLP/JSON\n\t// is zero-length and thus is also invalid).\n\t//\n\t// This field is required.\n\tTraceID TraceID `json:\"traceId,omitempty\"`\n\t// A unique identifier for a span within a trace, assigned when the span\n\t// is created. The ID is an 8-byte array. An ID with all zeroes OR of length\n\t// other than 8 bytes is considered invalid (empty string in OTLP/JSON\n\t// is zero-length and thus is also invalid).\n\t//\n\t// This field is required.\n\tSpanID SpanID `json:\"spanId,omitempty\"`\n\t// trace_state conveys information about request position in multiple distributed tracing graphs.\n\t// It is a trace_state in w3c-trace-context format: https://www.w3.org/TR/trace-context/#tracestate-header\n\t// See also https://github.com/w3c/distributed-tracing for more details about this field.\n\tTraceState string `json:\"traceState,omitempty\"`\n\t// The `span_id` of this span's parent span. If this is a root span, then this\n\t// field must be empty. The ID is an 8-byte array.\n\tParentSpanID SpanID `json:\"parentSpanId,omitempty\"`\n\t// Flags, a bit field.\n\t//\n\t// Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace\n\t// Context specification. To read the 8-bit W3C trace flag, use\n\t// `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`.\n\t//\n\t// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.\n\t//\n\t// Bits 8 and 9 represent the 3 states of whether a span's parent\n\t// is remote. The states are (unknown, is not remote, is remote).\n\t// To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`.\n\t// To read whether the span is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`.\n\t//\n\t// When creating span messages, if the message is logically forwarded from another source\n\t// with an equivalent flags fields (i.e., usually another OTLP span message), the field SHOULD\n\t// be copied as-is. If creating from a source that does not have an equivalent flags field\n\t// (such as a runtime representation of an OpenTelemetry span), the high 22 bits MUST\n\t// be set to zero.\n\t// Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero.\n\t//\n\t// [Optional].\n\tFlags uint32 `json:\"flags,omitempty\"`\n\t// A description of the span's operation.\n\t//\n\t// For example, the name can be a qualified method name or a file name\n\t// and a line number where the operation is called. A best practice is to use\n\t// the same display name at the same call point in an application.\n\t// This makes it easier to correlate spans in different traces.\n\t//\n\t// This field is semantically required to be set to non-empty string.\n\t// Empty value is equivalent to an unknown span name.\n\t//\n\t// This field is required.\n\tName string `json:\"name\"`\n\t// Distinguishes between spans generated in a particular context. For example,\n\t// two spans with the same name may be distinguished using `CLIENT` (caller)\n\t// and `SERVER` (callee) to identify queueing latency associated with the span.\n\tKind SpanKind `json:\"kind,omitempty\"`\n\t// start_time_unix_nano is the start time of the span. On the client side, this is the time\n\t// kept by the local machine where the span execution starts. On the server side, this\n\t// is the time when the server's application handler starts running.\n\t// Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970.\n\t//\n\t// This field is semantically required and it is expected that end_time >= start_time.\n\tStartTime time.Time `json:\"startTimeUnixNano,omitempty\"`\n\t// end_time_unix_nano is the end time of the span. On the client side, this is the time\n\t// kept by the local machine where the span execution ends. On the server side, this\n\t// is the time when the server application handler stops running.\n\t// Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970.\n\t//\n\t// This field is semantically required and it is expected that end_time >= start_time.\n\tEndTime time.Time `json:\"endTimeUnixNano,omitempty\"`\n\t// attributes is a collection of key/value pairs. Note, global attributes\n\t// like server name can be set using the resource API. Examples of attributes:\n\t//\n\t//     \"/http/user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36\"\n\t//     \"/http/server_latency\": 300\n\t//     \"example.com/myattribute\": true\n\t//     \"example.com/score\": 10.239\n\t//\n\t// The OpenTelemetry API specification further restricts the allowed value types:\n\t// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/README.md#attribute\n\t// Attribute keys MUST be unique (it is not allowed to have more than one\n\t// attribute with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// dropped_attributes_count is the number of attributes that were discarded. Attributes\n\t// can be discarded because their keys are too long or because there are too many\n\t// attributes. If this value is 0, then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n\t// events is a collection of Event items.\n\tEvents []*SpanEvent `json:\"events,omitempty\"`\n\t// dropped_events_count is the number of dropped events. If the value is 0, then no\n\t// events were dropped.\n\tDroppedEvents uint32 `json:\"droppedEventsCount,omitempty\"`\n\t// links is a collection of Links, which are references from this span to a span\n\t// in the same or different trace.\n\tLinks []*SpanLink `json:\"links,omitempty\"`\n\t// dropped_links_count is the number of dropped links after the maximum size was\n\t// enforced. If this value is 0, then no links were dropped.\n\tDroppedLinks uint32 `json:\"droppedLinksCount,omitempty\"`\n\t// An optional final status for this span. Semantically when Status isn't set, it means\n\t// span's status code is unset, i.e. assume STATUS_CODE_UNSET (code = 0).\n\tStatus *Status `json:\"status,omitempty\"`\n}\n\n// MarshalJSON encodes s into OTLP formatted JSON.\nfunc (s Span) MarshalJSON() ([]byte, error) {\n\tstartT := s.StartTime.UnixNano()\n\tif s.StartTime.IsZero() || startT < 0 {\n\t\tstartT = 0\n\t}\n\n\tendT := s.EndTime.UnixNano()\n\tif s.EndTime.IsZero() || endT < 0 {\n\t\tendT = 0\n\t}\n\n\t// Override non-empty default SpanID marshal and omitempty.\n\tvar parentSpanId string\n\tif !s.ParentSpanID.IsEmpty() {\n\t\tb := make([]byte, hex.EncodedLen(spanIDSize))\n\t\thex.Encode(b, s.ParentSpanID[:])\n\t\tparentSpanId = string(b)\n\t}\n\n\ttype Alias Span\n\treturn json.Marshal(struct {\n\t\tAlias\n\t\tParentSpanID string `json:\"parentSpanId,omitempty\"`\n\t\tStartTime    uint64 `json:\"startTimeUnixNano,omitempty\"`\n\t\tEndTime      uint64 `json:\"endTimeUnixNano,omitempty\"`\n\t}{\n\t\tAlias:        Alias(s),\n\t\tParentSpanID: parentSpanId,\n\t\tStartTime:    uint64(startT), // nolint:gosec  // >0 checked above.\n\t\tEndTime:      uint64(endT),   // nolint:gosec  // >0 checked above.\n\t})\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into s.\nfunc (s *Span) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Span type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Span field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"traceId\", \"trace_id\":\n\t\t\terr = decoder.Decode(&s.TraceID)\n\t\tcase \"spanId\", \"span_id\":\n\t\t\terr = decoder.Decode(&s.SpanID)\n\t\tcase \"traceState\", \"trace_state\":\n\t\t\terr = decoder.Decode(&s.TraceState)\n\t\tcase \"parentSpanId\", \"parent_span_id\":\n\t\t\terr = decoder.Decode(&s.ParentSpanID)\n\t\tcase \"flags\":\n\t\t\terr = decoder.Decode(&s.Flags)\n\t\tcase \"name\":\n\t\t\terr = decoder.Decode(&s.Name)\n\t\tcase \"kind\":\n\t\t\terr = decoder.Decode(&s.Kind)\n\t\tcase \"startTimeUnixNano\", \"start_time_unix_nano\":\n\t\t\tvar val protoUint64\n\t\t\terr = decoder.Decode(&val)\n\t\t\tv := int64(min(val.Uint64(), math.MaxInt64)) // nolint: gosec  // Overflow checked.\n\t\t\ts.StartTime = time.Unix(0, v)\n\t\tcase \"endTimeUnixNano\", \"end_time_unix_nano\":\n\t\t\tvar val protoUint64\n\t\t\terr = decoder.Decode(&val)\n\t\t\tv := int64(min(val.Uint64(), math.MaxInt64)) // nolint: gosec  // Overflow checked.\n\t\t\ts.EndTime = time.Unix(0, v)\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&s.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&s.DroppedAttrs)\n\t\tcase \"events\":\n\t\t\terr = decoder.Decode(&s.Events)\n\t\tcase \"droppedEventsCount\", \"dropped_events_count\":\n\t\t\terr = decoder.Decode(&s.DroppedEvents)\n\t\tcase \"links\":\n\t\t\terr = decoder.Decode(&s.Links)\n\t\tcase \"droppedLinksCount\", \"dropped_links_count\":\n\t\t\terr = decoder.Decode(&s.DroppedLinks)\n\t\tcase \"status\":\n\t\t\terr = decoder.Decode(&s.Status)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// SpanFlags represents constants used to interpret the\n// Span.flags field, which is protobuf 'fixed32' type and is to\n// be used as bit-fields. Each non-zero value defined in this enum is\n// a bit-mask.  To extract the bit-field, for example, use an\n// expression like:\n//\n//\t(span.flags & SPAN_FLAGS_TRACE_FLAGS_MASK)\n//\n// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.\n//\n// Note that Span flags were introduced in version 1.1 of the\n// OpenTelemetry protocol.  Older Span producers do not set this\n// field, consequently consumers should not rely on the absence of a\n// particular flag bit to indicate the presence of a particular feature.\ntype SpanFlags int32\n\nconst (\n\t// Bits 0-7 are used for trace flags.\n\tSpanFlagsTraceFlagsMask SpanFlags = 255\n\t// Bits 8 and 9 are used to indicate that the parent span or link span is remote.\n\t// Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known.\n\t// Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote.\n\tSpanFlagsContextHasIsRemoteMask SpanFlags = 256\n\t// SpanFlagsContextHasIsRemoteMask indicates the Span is remote.\n\tSpanFlagsContextIsRemoteMask SpanFlags = 512\n)\n\n// SpanKind is the type of span. Can be used to specify additional relationships between spans\n// in addition to a parent/child relationship.\ntype SpanKind int32\n\nconst (\n\t// Indicates that the span represents an internal operation within an application,\n\t// as opposed to an operation happening at the boundaries. Default value.\n\tSpanKindInternal SpanKind = 1\n\t// Indicates that the span covers server-side handling of an RPC or other\n\t// remote network request.\n\tSpanKindServer SpanKind = 2\n\t// Indicates that the span describes a request to some remote service.\n\tSpanKindClient SpanKind = 3\n\t// Indicates that the span describes a producer sending a message to a broker.\n\t// Unlike CLIENT and SERVER, there is often no direct critical path latency relationship\n\t// between producer and consumer spans. A PRODUCER span ends when the message was accepted\n\t// by the broker while the logical processing of the message might span a much longer time.\n\tSpanKindProducer SpanKind = 4\n\t// Indicates that the span describes consumer receiving a message from a broker.\n\t// Like the PRODUCER kind, there is often no direct critical path latency relationship\n\t// between producer and consumer spans.\n\tSpanKindConsumer SpanKind = 5\n)\n\n// Event is a time-stamped annotation of the span, consisting of user-supplied\n// text description and key-value pairs.\ntype SpanEvent struct {\n\t// time_unix_nano is the time the event occurred.\n\tTime time.Time `json:\"timeUnixNano,omitempty\"`\n\t// name of the event.\n\t// This field is semantically required to be set to non-empty string.\n\tName string `json:\"name,omitempty\"`\n\t// attributes is a collection of attribute key/value pairs on the event.\n\t// Attribute keys MUST be unique (it is not allowed to have more than one\n\t// attribute with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// dropped_attributes_count is the number of dropped attributes. If the value is 0,\n\t// then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n}\n\n// MarshalJSON encodes e into OTLP formatted JSON.\nfunc (e SpanEvent) MarshalJSON() ([]byte, error) {\n\tt := e.Time.UnixNano()\n\tif e.Time.IsZero() || t < 0 {\n\t\tt = 0\n\t}\n\n\ttype Alias SpanEvent\n\treturn json.Marshal(struct {\n\t\tAlias\n\t\tTime uint64 `json:\"timeUnixNano,omitempty\"`\n\t}{\n\t\tAlias: Alias(e),\n\t\tTime:  uint64(t), // nolint: gosec  // >0 checked above\n\t})\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into se.\nfunc (se *SpanEvent) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid SpanEvent type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid SpanEvent field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"timeUnixNano\", \"time_unix_nano\":\n\t\t\tvar val protoUint64\n\t\t\terr = decoder.Decode(&val)\n\t\t\tv := int64(min(val.Uint64(), math.MaxInt64)) // nolint: gosec  // Overflow checked.\n\t\t\tse.Time = time.Unix(0, v)\n\t\tcase \"name\":\n\t\t\terr = decoder.Decode(&se.Name)\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&se.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&se.DroppedAttrs)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// A pointer from the current span to another span in the same trace or in a\n// different trace. For example, this can be used in batching operations,\n// where a single batch handler processes multiple requests from different\n// traces or when the handler receives a request from a different project.\ntype SpanLink struct {\n\t// A unique identifier of a trace that this linked span is part of. The ID is a\n\t// 16-byte array.\n\tTraceID TraceID `json:\"traceId,omitempty\"`\n\t// A unique identifier for the linked span. The ID is an 8-byte array.\n\tSpanID SpanID `json:\"spanId,omitempty\"`\n\t// The trace_state associated with the link.\n\tTraceState string `json:\"traceState,omitempty\"`\n\t// attributes is a collection of attribute key/value pairs on the link.\n\t// Attribute keys MUST be unique (it is not allowed to have more than one\n\t// attribute with the same key).\n\tAttrs []Attr `json:\"attributes,omitempty\"`\n\t// dropped_attributes_count is the number of dropped attributes. If the value is 0,\n\t// then no attributes were dropped.\n\tDroppedAttrs uint32 `json:\"droppedAttributesCount,omitempty\"`\n\t// Flags, a bit field.\n\t//\n\t// Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace\n\t// Context specification. To read the 8-bit W3C trace flag, use\n\t// `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`.\n\t//\n\t// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.\n\t//\n\t// Bits 8 and 9 represent the 3 states of whether the link is remote.\n\t// The states are (unknown, is not remote, is remote).\n\t// To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`.\n\t// To read whether the link is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`.\n\t//\n\t// Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero.\n\t// When creating new spans, bits 10-31 (most-significant 22-bits) MUST be zero.\n\t//\n\t// [Optional].\n\tFlags uint32 `json:\"flags,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into sl.\nfunc (sl *SpanLink) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid SpanLink type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid SpanLink field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"traceId\", \"trace_id\":\n\t\t\terr = decoder.Decode(&sl.TraceID)\n\t\tcase \"spanId\", \"span_id\":\n\t\t\terr = decoder.Decode(&sl.SpanID)\n\t\tcase \"traceState\", \"trace_state\":\n\t\t\terr = decoder.Decode(&sl.TraceState)\n\t\tcase \"attributes\":\n\t\t\terr = decoder.Decode(&sl.Attrs)\n\t\tcase \"droppedAttributesCount\", \"dropped_attributes_count\":\n\t\t\terr = decoder.Decode(&sl.DroppedAttrs)\n\t\tcase \"flags\":\n\t\t\terr = decoder.Decode(&sl.Flags)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/status.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\n// For the semantics of status codes see\n// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status\ntype StatusCode int32\n\nconst (\n\t// The default status.\n\tStatusCodeUnset StatusCode = 0\n\t// The Span has been validated by an Application developer or Operator to\n\t// have completed successfully.\n\tStatusCodeOK StatusCode = 1\n\t// The Span contains an error.\n\tStatusCodeError StatusCode = 2\n)\n\nvar statusCodeStrings = []string{\n\t\"Unset\",\n\t\"OK\",\n\t\"Error\",\n}\n\nfunc (s StatusCode) String() string {\n\tif s >= 0 && int(s) < len(statusCodeStrings) {\n\t\treturn statusCodeStrings[s]\n\t}\n\treturn \"<unknown telemetry.StatusCode>\"\n}\n\n// The Status type defines a logical error model that is suitable for different\n// programming environments, including REST APIs and RPC APIs.\ntype Status struct {\n\t// A developer-facing human readable error message.\n\tMessage string `json:\"message,omitempty\"`\n\t// The status code.\n\tCode StatusCode `json:\"code,omitempty\"`\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/traces.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Traces represents the traces data that can be stored in a persistent storage,\n// OR can be embedded by other protocols that transfer OTLP traces data but do\n// not implement the OTLP protocol.\n//\n// The main difference between this message and collector protocol is that\n// in this message there will not be any \"control\" or \"metadata\" specific to\n// OTLP protocol.\n//\n// When new fields are added into this message, the OTLP request MUST be updated\n// as well.\ntype Traces struct {\n\t// An array of ResourceSpans.\n\t// For data coming from a single resource this array will typically contain\n\t// one element. Intermediary nodes that receive data from multiple origins\n\t// typically batch the data before forwarding further and in that case this\n\t// array will contain multiple elements.\n\tResourceSpans []*ResourceSpans `json:\"resourceSpans,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into td.\nfunc (td *Traces) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid TracesData type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid TracesData field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"resourceSpans\", \"resource_spans\":\n\t\t\terr = decoder.Decode(&td.ResourceSpans)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// A collection of ScopeSpans from a Resource.\ntype ResourceSpans struct {\n\t// The resource for the spans in this message.\n\t// If this field is not set then no resource info is known.\n\tResource Resource `json:\"resource\"`\n\t// A list of ScopeSpans that originate from a resource.\n\tScopeSpans []*ScopeSpans `json:\"scopeSpans,omitempty\"`\n\t// This schema_url applies to the data in the \"resource\" field. It does not apply\n\t// to the data in the \"scope_spans\" field which have their own schema_url field.\n\tSchemaURL string `json:\"schemaUrl,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into rs.\nfunc (rs *ResourceSpans) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid ResourceSpans type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid ResourceSpans field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"resource\":\n\t\t\terr = decoder.Decode(&rs.Resource)\n\t\tcase \"scopeSpans\", \"scope_spans\":\n\t\t\terr = decoder.Decode(&rs.ScopeSpans)\n\t\tcase \"schemaUrl\", \"schema_url\":\n\t\t\terr = decoder.Decode(&rs.SchemaURL)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// A collection of Spans produced by an InstrumentationScope.\ntype ScopeSpans struct {\n\t// The instrumentation scope information for the spans in this message.\n\t// Semantically when InstrumentationScope isn't set, it is equivalent with\n\t// an empty instrumentation scope name (unknown).\n\tScope *Scope `json:\"scope\"`\n\t// A list of Spans that originate from an instrumentation scope.\n\tSpans []*Span `json:\"spans,omitempty\"`\n\t// The Schema URL, if known. This is the identifier of the Schema that the span data\n\t// is recorded in. To learn more about Schema URL see\n\t// https://opentelemetry.io/docs/specs/otel/schemas/#schema-url\n\t// This schema_url applies to all spans and span events in the \"spans\" field.\n\tSchemaURL string `json:\"schemaUrl,omitempty\"`\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into ss.\nfunc (ss *ScopeSpans) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid ScopeSpans type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid ScopeSpans field: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"scope\":\n\t\t\terr = decoder.Decode(&ss.Scope)\n\t\tcase \"spans\":\n\t\t\terr = decoder.Decode(&ss.Spans)\n\t\tcase \"schemaUrl\", \"schema_url\":\n\t\t\terr = decoder.Decode(&ss.SchemaURL)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/internal/telemetry/value.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage telemetry // import \"go.opentelemetry.io/otel/trace/internal/telemetry\"\n\nimport (\n\t\"bytes\"\n\t\"cmp\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"slices\"\n\t\"strconv\"\n\t\"unsafe\"\n)\n\n// A Value represents a structured value.\n// A zero value is valid and represents an empty value.\ntype Value struct {\n\t// Ensure forward compatibility by explicitly making this not comparable.\n\tnoCmp [0]func() //nolint: unused  // This is indeed used.\n\n\t// num holds the value for Int64, Float64, and Bool. It holds the length\n\t// for String, Bytes, Slice, Map.\n\tnum uint64\n\t// any holds either the KindBool, KindInt64, KindFloat64, stringptr,\n\t// bytesptr, sliceptr, or mapptr. If KindBool, KindInt64, or KindFloat64\n\t// then the value of Value is in num as described above. Otherwise, it\n\t// contains the value wrapped in the appropriate type.\n\tany any\n}\n\ntype (\n\t// sliceptr represents a value in Value.any for KindString Values.\n\tstringptr *byte\n\t// bytesptr represents a value in Value.any for KindBytes Values.\n\tbytesptr *byte\n\t// sliceptr represents a value in Value.any for KindSlice Values.\n\tsliceptr *Value\n\t// mapptr represents a value in Value.any for KindMap Values.\n\tmapptr *Attr\n)\n\n// ValueKind is the kind of a [Value].\ntype ValueKind int\n\n// ValueKind values.\nconst (\n\tValueKindEmpty ValueKind = iota\n\tValueKindBool\n\tValueKindFloat64\n\tValueKindInt64\n\tValueKindString\n\tValueKindBytes\n\tValueKindSlice\n\tValueKindMap\n)\n\nvar valueKindStrings = []string{\n\t\"Empty\",\n\t\"Bool\",\n\t\"Float64\",\n\t\"Int64\",\n\t\"String\",\n\t\"Bytes\",\n\t\"Slice\",\n\t\"Map\",\n}\n\nfunc (k ValueKind) String() string {\n\tif k >= 0 && int(k) < len(valueKindStrings) {\n\t\treturn valueKindStrings[k]\n\t}\n\treturn \"<unknown telemetry.ValueKind>\"\n}\n\n// StringValue returns a new [Value] for a string.\nfunc StringValue(v string) Value {\n\treturn Value{\n\t\tnum: uint64(len(v)),\n\t\tany: stringptr(unsafe.StringData(v)),\n\t}\n}\n\n// IntValue returns a [Value] for an int.\nfunc IntValue(v int) Value { return Int64Value(int64(v)) }\n\n// Int64Value returns a [Value] for an int64.\nfunc Int64Value(v int64) Value {\n\treturn Value{\n\t\tnum: uint64(v), // nolint: gosec  // Store raw bytes.\n\t\tany: ValueKindInt64,\n\t}\n}\n\n// Float64Value returns a [Value] for a float64.\nfunc Float64Value(v float64) Value {\n\treturn Value{num: math.Float64bits(v), any: ValueKindFloat64}\n}\n\n// BoolValue returns a [Value] for a bool.\nfunc BoolValue(v bool) Value { //nolint:revive // Not a control flag.\n\tvar n uint64\n\tif v {\n\t\tn = 1\n\t}\n\treturn Value{num: n, any: ValueKindBool}\n}\n\n// BytesValue returns a [Value] for a byte slice. The passed slice must not be\n// changed after it is passed.\nfunc BytesValue(v []byte) Value {\n\treturn Value{\n\t\tnum: uint64(len(v)),\n\t\tany: bytesptr(unsafe.SliceData(v)),\n\t}\n}\n\n// SliceValue returns a [Value] for a slice of [Value]. The passed slice must\n// not be changed after it is passed.\nfunc SliceValue(vs ...Value) Value {\n\treturn Value{\n\t\tnum: uint64(len(vs)),\n\t\tany: sliceptr(unsafe.SliceData(vs)),\n\t}\n}\n\n// MapValue returns a new [Value] for a slice of key-value pairs. The passed\n// slice must not be changed after it is passed.\nfunc MapValue(kvs ...Attr) Value {\n\treturn Value{\n\t\tnum: uint64(len(kvs)),\n\t\tany: mapptr(unsafe.SliceData(kvs)),\n\t}\n}\n\n// AsString returns the value held by v as a string.\nfunc (v Value) AsString() string {\n\tif sp, ok := v.any.(stringptr); ok {\n\t\treturn unsafe.String(sp, v.num)\n\t}\n\t// TODO: error handle\n\treturn \"\"\n}\n\n// asString returns the value held by v as a string. It will panic if the Value\n// is not KindString.\nfunc (v Value) asString() string {\n\treturn unsafe.String(v.any.(stringptr), v.num)\n}\n\n// AsInt64 returns the value held by v as an int64.\nfunc (v Value) AsInt64() int64 {\n\tif v.Kind() != ValueKindInt64 {\n\t\t// TODO: error handle\n\t\treturn 0\n\t}\n\treturn v.asInt64()\n}\n\n// asInt64 returns the value held by v as an int64. If v is not of KindInt64,\n// this will return garbage.\nfunc (v Value) asInt64() int64 {\n\t// Assumes v.num was a valid int64 (overflow not checked).\n\treturn int64(v.num) // nolint: gosec\n}\n\n// AsBool returns the value held by v as a bool.\nfunc (v Value) AsBool() bool {\n\tif v.Kind() != ValueKindBool {\n\t\t// TODO: error handle\n\t\treturn false\n\t}\n\treturn v.asBool()\n}\n\n// asBool returns the value held by v as a bool. If v is not of KindBool, this\n// will return garbage.\nfunc (v Value) asBool() bool { return v.num == 1 }\n\n// AsFloat64 returns the value held by v as a float64.\nfunc (v Value) AsFloat64() float64 {\n\tif v.Kind() != ValueKindFloat64 {\n\t\t// TODO: error handle\n\t\treturn 0\n\t}\n\treturn v.asFloat64()\n}\n\n// asFloat64 returns the value held by v as a float64. If v is not of\n// KindFloat64, this will return garbage.\nfunc (v Value) asFloat64() float64 { return math.Float64frombits(v.num) }\n\n// AsBytes returns the value held by v as a []byte.\nfunc (v Value) AsBytes() []byte {\n\tif sp, ok := v.any.(bytesptr); ok {\n\t\treturn unsafe.Slice((*byte)(sp), v.num)\n\t}\n\t// TODO: error handle\n\treturn nil\n}\n\n// asBytes returns the value held by v as a []byte. It will panic if the Value\n// is not KindBytes.\nfunc (v Value) asBytes() []byte {\n\treturn unsafe.Slice((*byte)(v.any.(bytesptr)), v.num)\n}\n\n// AsSlice returns the value held by v as a []Value.\nfunc (v Value) AsSlice() []Value {\n\tif sp, ok := v.any.(sliceptr); ok {\n\t\treturn unsafe.Slice((*Value)(sp), v.num)\n\t}\n\t// TODO: error handle\n\treturn nil\n}\n\n// asSlice returns the value held by v as a []Value. It will panic if the Value\n// is not KindSlice.\nfunc (v Value) asSlice() []Value {\n\treturn unsafe.Slice((*Value)(v.any.(sliceptr)), v.num)\n}\n\n// AsMap returns the value held by v as a []Attr.\nfunc (v Value) AsMap() []Attr {\n\tif sp, ok := v.any.(mapptr); ok {\n\t\treturn unsafe.Slice((*Attr)(sp), v.num)\n\t}\n\t// TODO: error handle\n\treturn nil\n}\n\n// asMap returns the value held by v as a []Attr. It will panic if the\n// Value is not KindMap.\nfunc (v Value) asMap() []Attr {\n\treturn unsafe.Slice((*Attr)(v.any.(mapptr)), v.num)\n}\n\n// Kind returns the Kind of v.\nfunc (v Value) Kind() ValueKind {\n\tswitch x := v.any.(type) {\n\tcase ValueKind:\n\t\treturn x\n\tcase stringptr:\n\t\treturn ValueKindString\n\tcase bytesptr:\n\t\treturn ValueKindBytes\n\tcase sliceptr:\n\t\treturn ValueKindSlice\n\tcase mapptr:\n\t\treturn ValueKindMap\n\tdefault:\n\t\treturn ValueKindEmpty\n\t}\n}\n\n// Empty returns if v does not hold any value.\nfunc (v Value) Empty() bool { return v.Kind() == ValueKindEmpty }\n\n// Equal returns if v is equal to w.\nfunc (v Value) Equal(w Value) bool {\n\tk1 := v.Kind()\n\tk2 := w.Kind()\n\tif k1 != k2 {\n\t\treturn false\n\t}\n\tswitch k1 {\n\tcase ValueKindInt64, ValueKindBool:\n\t\treturn v.num == w.num\n\tcase ValueKindString:\n\t\treturn v.asString() == w.asString()\n\tcase ValueKindFloat64:\n\t\treturn v.asFloat64() == w.asFloat64()\n\tcase ValueKindSlice:\n\t\treturn slices.EqualFunc(v.asSlice(), w.asSlice(), Value.Equal)\n\tcase ValueKindMap:\n\t\tsv := sortMap(v.asMap())\n\t\tsw := sortMap(w.asMap())\n\t\treturn slices.EqualFunc(sv, sw, Attr.Equal)\n\tcase ValueKindBytes:\n\t\treturn bytes.Equal(v.asBytes(), w.asBytes())\n\tcase ValueKindEmpty:\n\t\treturn true\n\tdefault:\n\t\t// TODO: error handle\n\t\treturn false\n\t}\n}\n\nfunc sortMap(m []Attr) []Attr {\n\tsm := make([]Attr, len(m))\n\tcopy(sm, m)\n\tslices.SortFunc(sm, func(a, b Attr) int {\n\t\treturn cmp.Compare(a.Key, b.Key)\n\t})\n\n\treturn sm\n}\n\n// String returns Value's value as a string, formatted like [fmt.Sprint].\n//\n// The returned string is meant for debugging;\n// the string representation is not stable.\nfunc (v Value) String() string {\n\tswitch v.Kind() {\n\tcase ValueKindString:\n\t\treturn v.asString()\n\tcase ValueKindInt64:\n\t\t// Assumes v.num was a valid int64 (overflow not checked).\n\t\treturn strconv.FormatInt(int64(v.num), 10) // nolint: gosec\n\tcase ValueKindFloat64:\n\t\treturn strconv.FormatFloat(v.asFloat64(), 'g', -1, 64)\n\tcase ValueKindBool:\n\t\treturn strconv.FormatBool(v.asBool())\n\tcase ValueKindBytes:\n\t\treturn fmt.Sprint(v.asBytes())\n\tcase ValueKindMap:\n\t\treturn fmt.Sprint(v.asMap())\n\tcase ValueKindSlice:\n\t\treturn fmt.Sprint(v.asSlice())\n\tcase ValueKindEmpty:\n\t\treturn \"<nil>\"\n\tdefault:\n\t\t// Try to handle this as gracefully as possible.\n\t\t//\n\t\t// Don't panic here. The goal here is to have developers find this\n\t\t// first if a slog.Kind is is not handled. It is\n\t\t// preferable to have user's open issue asking why their attributes\n\t\t// have a \"unhandled: \" prefix than say that their code is panicking.\n\t\treturn fmt.Sprintf(\"<unhandled telemetry.ValueKind: %s>\", v.Kind())\n\t}\n}\n\n// MarshalJSON encodes v into OTLP formatted JSON.\nfunc (v *Value) MarshalJSON() ([]byte, error) {\n\tswitch v.Kind() {\n\tcase ValueKindString:\n\t\treturn json.Marshal(struct {\n\t\t\tValue string `json:\"stringValue\"`\n\t\t}{v.asString()})\n\tcase ValueKindInt64:\n\t\treturn json.Marshal(struct {\n\t\t\tValue string `json:\"intValue\"`\n\t\t}{strconv.FormatInt(int64(v.num), 10)}) // nolint: gosec  // From raw bytes.\n\tcase ValueKindFloat64:\n\t\treturn json.Marshal(struct {\n\t\t\tValue float64 `json:\"doubleValue\"`\n\t\t}{v.asFloat64()})\n\tcase ValueKindBool:\n\t\treturn json.Marshal(struct {\n\t\t\tValue bool `json:\"boolValue\"`\n\t\t}{v.asBool()})\n\tcase ValueKindBytes:\n\t\treturn json.Marshal(struct {\n\t\t\tValue []byte `json:\"bytesValue\"`\n\t\t}{v.asBytes()})\n\tcase ValueKindMap:\n\t\treturn json.Marshal(struct {\n\t\t\tValue struct {\n\t\t\t\tValues []Attr `json:\"values\"`\n\t\t\t} `json:\"kvlistValue\"`\n\t\t}{struct {\n\t\t\tValues []Attr `json:\"values\"`\n\t\t}{v.asMap()}})\n\tcase ValueKindSlice:\n\t\treturn json.Marshal(struct {\n\t\t\tValue struct {\n\t\t\t\tValues []Value `json:\"values\"`\n\t\t\t} `json:\"arrayValue\"`\n\t\t}{struct {\n\t\t\tValues []Value `json:\"values\"`\n\t\t}{v.asSlice()}})\n\tcase ValueKindEmpty:\n\t\treturn nil, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown Value kind: %s\", v.Kind().String())\n\t}\n}\n\n// UnmarshalJSON decodes the OTLP formatted JSON contained in data into v.\nfunc (v *Value) UnmarshalJSON(data []byte) error {\n\tdecoder := json.NewDecoder(bytes.NewReader(data))\n\n\tt, err := decoder.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t != json.Delim('{') {\n\t\treturn errors.New(\"invalid Value type\")\n\t}\n\n\tfor decoder.More() {\n\t\tkeyIface, err := decoder.Token()\n\t\tif err != nil {\n\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t// Empty.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\tkey, ok := keyIface.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid Value key: %#v\", keyIface)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"stringValue\", \"string_value\":\n\t\t\tvar val string\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = StringValue(val)\n\t\tcase \"boolValue\", \"bool_value\":\n\t\t\tvar val bool\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = BoolValue(val)\n\t\tcase \"intValue\", \"int_value\":\n\t\t\tvar val protoInt64\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = Int64Value(val.Int64())\n\t\tcase \"doubleValue\", \"double_value\":\n\t\t\tvar val float64\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = Float64Value(val)\n\t\tcase \"bytesValue\", \"bytes_value\":\n\t\t\tvar val64 string\n\t\t\tif err := decoder.Decode(&val64); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tvar val []byte\n\t\t\tval, err = base64.StdEncoding.DecodeString(val64)\n\t\t\t*v = BytesValue(val)\n\t\tcase \"arrayValue\", \"array_value\":\n\t\t\tvar val struct{ Values []Value }\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = SliceValue(val.Values...)\n\t\tcase \"kvlistValue\", \"kvlist_value\":\n\t\t\tvar val struct{ Values []Attr }\n\t\t\terr = decoder.Decode(&val)\n\t\t\t*v = MapValue(val.Values...)\n\t\tdefault:\n\t\t\t// Skip unknown.\n\t\t\tcontinue\n\t\t}\n\t\t// Use first valid. Ignore the rest.\n\t\treturn err\n\t}\n\n\t// Only unknown fields. Return nil without unmarshaling any value.\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/nonrecording.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\n// nonRecordingSpan is a minimal implementation of a Span that wraps a\n// SpanContext. It performs no operations other than to return the wrapped\n// SpanContext.\ntype nonRecordingSpan struct {\n\tnoopSpan\n\n\tsc SpanContext\n}\n\n// SpanContext returns the wrapped SpanContext.\nfunc (s nonRecordingSpan) SpanContext() SpanContext { return s.sc }\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/noop/README.md",
    "content": "# Trace Noop\n\n[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/trace/noop)](https://pkg.go.dev/go.opentelemetry.io/otel/trace/noop)\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/noop/noop.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\n// Package noop provides an implementation of the OpenTelemetry trace API that\n// produces no telemetry and minimizes used computation resources.\n//\n// Using this package to implement the OpenTelemetry trace API will effectively\n// disable OpenTelemetry.\n//\n// This implementation can be embedded in other implementations of the\n// OpenTelemetry trace API. Doing so will mean the implementation defaults to\n// no operation for methods it does not implement.\npackage noop // import \"go.opentelemetry.io/otel/trace/noop\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/codes\"\n\t\"go.opentelemetry.io/otel/trace\"\n\t\"go.opentelemetry.io/otel/trace/embedded\"\n)\n\nvar (\n\t// Compile-time check this implements the OpenTelemetry API.\n\n\t_ trace.TracerProvider = TracerProvider{}\n\t_ trace.Tracer         = Tracer{}\n\t_ trace.Span           = Span{}\n)\n\n// TracerProvider is an OpenTelemetry No-Op TracerProvider.\ntype TracerProvider struct{ embedded.TracerProvider }\n\n// NewTracerProvider returns a TracerProvider that does not record any telemetry.\nfunc NewTracerProvider() TracerProvider {\n\treturn TracerProvider{}\n}\n\n// Tracer returns an OpenTelemetry Tracer that does not record any telemetry.\nfunc (TracerProvider) Tracer(string, ...trace.TracerOption) trace.Tracer {\n\treturn Tracer{}\n}\n\n// Tracer is an OpenTelemetry No-Op Tracer.\ntype Tracer struct{ embedded.Tracer }\n\n// Start creates a span. The created span will be set in a child context of ctx\n// and returned with the span.\n//\n// If ctx contains a span context, the returned span will also contain that\n// span context. If the span context in ctx is for a non-recording span, that\n// span instance will be returned directly.\nfunc (t Tracer) Start(ctx context.Context, _ string, _ ...trace.SpanStartOption) (context.Context, trace.Span) {\n\tspan := trace.SpanFromContext(ctx)\n\n\t// If the parent context contains a non-zero span context, that span\n\t// context needs to be returned as a non-recording span\n\t// (https://github.com/open-telemetry/opentelemetry-specification/blob/3a1dde966a4ce87cce5adf464359fe369741bbea/specification/trace/api.md#behavior-of-the-api-in-the-absence-of-an-installed-sdk).\n\tvar zeroSC trace.SpanContext\n\tif sc := span.SpanContext(); !sc.Equal(zeroSC) {\n\t\tif !span.IsRecording() {\n\t\t\t// If the span is not recording return it directly.\n\t\t\treturn ctx, span\n\t\t}\n\t\t// Otherwise, return the span context needs in a non-recording span.\n\t\tspan = Span{sc: sc}\n\t} else {\n\t\t// No parent, return a No-Op span with an empty span context.\n\t\tspan = noopSpanInstance\n\t}\n\treturn trace.ContextWithSpan(ctx, span), span\n}\n\nvar noopSpanInstance trace.Span = Span{}\n\n// Span is an OpenTelemetry No-Op Span.\ntype Span struct {\n\tembedded.Span\n\n\tsc trace.SpanContext\n}\n\n// SpanContext returns an empty span context.\nfunc (s Span) SpanContext() trace.SpanContext { return s.sc }\n\n// IsRecording always returns false.\nfunc (Span) IsRecording() bool { return false }\n\n// SetStatus does nothing.\nfunc (Span) SetStatus(codes.Code, string) {}\n\n// SetAttributes does nothing.\nfunc (Span) SetAttributes(...attribute.KeyValue) {}\n\n// End does nothing.\nfunc (Span) End(...trace.SpanEndOption) {}\n\n// RecordError does nothing.\nfunc (Span) RecordError(error, ...trace.EventOption) {}\n\n// AddEvent does nothing.\nfunc (Span) AddEvent(string, ...trace.EventOption) {}\n\n// AddLink does nothing.\nfunc (Span) AddLink(trace.Link) {}\n\n// SetName does nothing.\nfunc (Span) SetName(string) {}\n\n// TracerProvider returns a No-Op TracerProvider.\nfunc (Span) TracerProvider() trace.TracerProvider { return TracerProvider{} }\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/noop.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/codes\"\n\t\"go.opentelemetry.io/otel/trace/embedded\"\n)\n\n// NewNoopTracerProvider returns an implementation of TracerProvider that\n// performs no operations. The Tracer and Spans created from the returned\n// TracerProvider also perform no operations.\n//\n// Deprecated: Use [go.opentelemetry.io/otel/trace/noop.NewTracerProvider]\n// instead.\nfunc NewNoopTracerProvider() TracerProvider {\n\treturn noopTracerProvider{}\n}\n\ntype noopTracerProvider struct{ embedded.TracerProvider }\n\nvar _ TracerProvider = noopTracerProvider{}\n\n// Tracer returns noop implementation of Tracer.\nfunc (p noopTracerProvider) Tracer(string, ...TracerOption) Tracer {\n\treturn noopTracer{}\n}\n\n// noopTracer is an implementation of Tracer that performs no operations.\ntype noopTracer struct{ embedded.Tracer }\n\nvar _ Tracer = noopTracer{}\n\n// Start carries forward a non-recording Span, if one is present in the context, otherwise it\n// creates a no-op Span.\nfunc (t noopTracer) Start(ctx context.Context, name string, _ ...SpanStartOption) (context.Context, Span) {\n\tspan := SpanFromContext(ctx)\n\tif _, ok := span.(nonRecordingSpan); !ok {\n\t\t// span is likely already a noopSpan, but let's be sure\n\t\tspan = noopSpanInstance\n\t}\n\treturn ContextWithSpan(ctx, span), span\n}\n\n// noopSpan is an implementation of Span that performs no operations.\ntype noopSpan struct{ embedded.Span }\n\nvar noopSpanInstance Span = noopSpan{}\n\n// SpanContext returns an empty span context.\nfunc (noopSpan) SpanContext() SpanContext { return SpanContext{} }\n\n// IsRecording always returns false.\nfunc (noopSpan) IsRecording() bool { return false }\n\n// SetStatus does nothing.\nfunc (noopSpan) SetStatus(codes.Code, string) {}\n\n// SetError does nothing.\nfunc (noopSpan) SetError(bool) {}\n\n// SetAttributes does nothing.\nfunc (noopSpan) SetAttributes(...attribute.KeyValue) {}\n\n// End does nothing.\nfunc (noopSpan) End(...SpanEndOption) {}\n\n// RecordError does nothing.\nfunc (noopSpan) RecordError(error, ...EventOption) {}\n\n// AddEvent does nothing.\nfunc (noopSpan) AddEvent(string, ...EventOption) {}\n\n// AddLink does nothing.\nfunc (noopSpan) AddLink(Link) {}\n\n// SetName does nothing.\nfunc (noopSpan) SetName(string) {}\n\n// TracerProvider returns a no-op TracerProvider.\nfunc (s noopSpan) TracerProvider() TracerProvider {\n\treturn s.tracerProvider(autoInstEnabled)\n}\n\n// autoInstEnabled defines if the auto-instrumentation SDK is enabled.\n//\n// The auto-instrumentation is expected to overwrite this value to true when it\n// attaches to the process.\nvar autoInstEnabled = new(bool)\n\n// tracerProvider return a noopTracerProvider if autoEnabled is false,\n// otherwise it will return a TracerProvider from the sdk package used in\n// auto-instrumentation.\nfunc (noopSpan) tracerProvider(autoEnabled *bool) TracerProvider {\n\tif *autoEnabled {\n\t\treturn newAutoTracerProvider()\n\t}\n\treturn noopTracerProvider{}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/provider.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport \"go.opentelemetry.io/otel/trace/embedded\"\n\n// TracerProvider provides Tracers that are used by instrumentation code to\n// trace computational workflows.\n//\n// A TracerProvider is the collection destination of all Spans from Tracers it\n// provides, it represents a unique telemetry collection pipeline. How that\n// pipeline is defined, meaning how those Spans are collected, processed, and\n// where they are exported, depends on its implementation. Instrumentation\n// authors do not need to define this implementation, rather just use the\n// provided Tracers to instrument code.\n//\n// Commonly, instrumentation code will accept a TracerProvider implementation\n// at runtime from its users or it can simply use the globally registered one\n// (see https://pkg.go.dev/go.opentelemetry.io/otel#GetTracerProvider).\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype TracerProvider interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.TracerProvider\n\n\t// Tracer returns a unique Tracer scoped to be used by instrumentation code\n\t// to trace computational workflows. The scope and identity of that\n\t// instrumentation code is uniquely defined by the name and options passed.\n\t//\n\t// The passed name needs to uniquely identify instrumentation code.\n\t// Therefore, it is recommended that name is the Go package name of the\n\t// library providing instrumentation (note: not the code being\n\t// instrumented). Instrumentation libraries can have multiple versions,\n\t// therefore, the WithInstrumentationVersion option should be used to\n\t// distinguish these different codebases. Additionally, instrumentation\n\t// libraries may sometimes use traces to communicate different domains of\n\t// workflow data (i.e. using spans to communicate workflow events only). If\n\t// this is the case, the WithScopeAttributes option should be used to\n\t// uniquely identify Tracers that handle the different domains of workflow\n\t// data.\n\t//\n\t// If the same name and options are passed multiple times, the same Tracer\n\t// will be returned (it is up to the implementation if this will be the\n\t// same underlying instance of that Tracer or not). It is not necessary to\n\t// call this multiple times with the same name and options to get an\n\t// up-to-date Tracer. All implementations will ensure any TracerProvider\n\t// configuration changes are propagated to all provided Tracers.\n\t//\n\t// If name is empty, then an implementation defined default name will be\n\t// used instead.\n\t//\n\t// This method is safe to call concurrently.\n\tTracer(name string, options ...TracerOption) Tracer\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/span.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/codes\"\n\t\"go.opentelemetry.io/otel/trace/embedded\"\n)\n\n// Span is the individual component of a trace. It represents a single named\n// and timed operation of a workflow that is traced. A Tracer is used to\n// create a Span and it is then up to the operation the Span represents to\n// properly end the Span when the operation itself ends.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Span interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Span\n\n\t// End completes the Span. The Span is considered complete and ready to be\n\t// delivered through the rest of the telemetry pipeline after this method\n\t// is called. Therefore, updates to the Span are not allowed after this\n\t// method has been called.\n\tEnd(options ...SpanEndOption)\n\n\t// AddEvent adds an event with the provided name and options.\n\tAddEvent(name string, options ...EventOption)\n\n\t// AddLink adds a link.\n\t// Adding links at span creation using WithLinks is preferred to calling AddLink\n\t// later, for contexts that are available during span creation, because head\n\t// sampling decisions can only consider information present during span creation.\n\tAddLink(link Link)\n\n\t// IsRecording returns the recording state of the Span. It will return\n\t// true if the Span is active and events can be recorded.\n\tIsRecording() bool\n\n\t// RecordError will record err as an exception span event for this span. An\n\t// additional call to SetStatus is required if the Status of the Span should\n\t// be set to Error, as this method does not change the Span status. If this\n\t// span is not being recorded or err is nil then this method does nothing.\n\tRecordError(err error, options ...EventOption)\n\n\t// SpanContext returns the SpanContext of the Span. The returned SpanContext\n\t// is usable even after the End method has been called for the Span.\n\tSpanContext() SpanContext\n\n\t// SetStatus sets the status of the Span in the form of a code and a\n\t// description, provided the status hasn't already been set to a higher\n\t// value before (OK > Error > Unset). The description is only included in a\n\t// status when the code is for an error.\n\tSetStatus(code codes.Code, description string)\n\n\t// SetName sets the Span name.\n\tSetName(name string)\n\n\t// SetAttributes sets kv as attributes of the Span. If a key from kv\n\t// already exists for an attribute of the Span it will be overwritten with\n\t// the value contained in kv.\n\tSetAttributes(kv ...attribute.KeyValue)\n\n\t// TracerProvider returns a TracerProvider that can be used to generate\n\t// additional Spans on the same telemetry pipeline as the current Span.\n\tTracerProvider() TracerProvider\n}\n\n// Link is the relationship between two Spans. The relationship can be within\n// the same Trace or across different Traces.\n//\n// For example, a Link is used in the following situations:\n//\n//  1. Batch Processing: A batch of operations may contain operations\n//     associated with one or more traces/spans. Since there can only be one\n//     parent SpanContext, a Link is used to keep reference to the\n//     SpanContext of all operations in the batch.\n//  2. Public Endpoint: A SpanContext for an in incoming client request on a\n//     public endpoint should be considered untrusted. In such a case, a new\n//     trace with its own identity and sampling decision needs to be created,\n//     but this new trace needs to be related to the original trace in some\n//     form. A Link is used to keep reference to the original SpanContext and\n//     track the relationship.\ntype Link struct {\n\t// SpanContext of the linked Span.\n\tSpanContext SpanContext\n\n\t// Attributes describe the aspects of the link.\n\tAttributes []attribute.KeyValue\n}\n\n// LinkFromContext returns a link encapsulating the SpanContext in the provided\n// ctx.\nfunc LinkFromContext(ctx context.Context, attrs ...attribute.KeyValue) Link {\n\treturn Link{\n\t\tSpanContext: SpanContextFromContext(ctx),\n\t\tAttributes:  attrs,\n\t}\n}\n\n// SpanKind is the role a Span plays in a Trace.\ntype SpanKind int\n\n// As a convenience, these match the proto definition, see\n// https://github.com/open-telemetry/opentelemetry-proto/blob/30d237e1ff3ab7aa50e0922b5bebdd93505090af/opentelemetry/proto/trace/v1/trace.proto#L101-L129\n//\n// The unspecified value is not a valid `SpanKind`. Use `ValidateSpanKind()`\n// to coerce a span kind to a valid value.\nconst (\n\t// SpanKindUnspecified is an unspecified SpanKind and is not a valid\n\t// SpanKind. SpanKindUnspecified should be replaced with SpanKindInternal\n\t// if it is received.\n\tSpanKindUnspecified SpanKind = 0\n\t// SpanKindInternal is a SpanKind for a Span that represents an internal\n\t// operation within an application.\n\tSpanKindInternal SpanKind = 1\n\t// SpanKindServer is a SpanKind for a Span that represents the operation\n\t// of handling a request from a client.\n\tSpanKindServer SpanKind = 2\n\t// SpanKindClient is a SpanKind for a Span that represents the operation\n\t// of client making a request to a server.\n\tSpanKindClient SpanKind = 3\n\t// SpanKindProducer is a SpanKind for a Span that represents the operation\n\t// of a producer sending a message to a message broker. Unlike\n\t// SpanKindClient and SpanKindServer, there is often no direct\n\t// relationship between this kind of Span and a SpanKindConsumer kind. A\n\t// SpanKindProducer Span will end once the message is accepted by the\n\t// message broker which might not overlap with the processing of that\n\t// message.\n\tSpanKindProducer SpanKind = 4\n\t// SpanKindConsumer is a SpanKind for a Span that represents the operation\n\t// of a consumer receiving a message from a message broker. Like\n\t// SpanKindProducer Spans, there is often no direct relationship between\n\t// this Span and the Span that produced the message.\n\tSpanKindConsumer SpanKind = 5\n)\n\n// ValidateSpanKind returns a valid span kind value.  This will coerce\n// invalid values into the default value, SpanKindInternal.\nfunc ValidateSpanKind(spanKind SpanKind) SpanKind {\n\tswitch spanKind {\n\tcase SpanKindInternal,\n\t\tSpanKindServer,\n\t\tSpanKindClient,\n\t\tSpanKindProducer,\n\t\tSpanKindConsumer:\n\t\t// valid\n\t\treturn spanKind\n\tdefault:\n\t\treturn SpanKindInternal\n\t}\n}\n\n// String returns the specified name of the SpanKind in lower-case.\nfunc (sk SpanKind) String() string {\n\tswitch sk {\n\tcase SpanKindInternal:\n\t\treturn \"internal\"\n\tcase SpanKindServer:\n\t\treturn \"server\"\n\tcase SpanKindClient:\n\t\treturn \"client\"\n\tcase SpanKindProducer:\n\t\treturn \"producer\"\n\tcase SpanKindConsumer:\n\t\treturn \"consumer\"\n\tdefault:\n\t\treturn \"unspecified\"\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/trace.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n)\n\nconst (\n\t// FlagsSampled is a bitmask with the sampled bit set. A SpanContext\n\t// with the sampling bit set means the span is sampled.\n\tFlagsSampled = TraceFlags(0x01)\n\n\terrInvalidHexID errorConst = \"trace-id and span-id can only contain [0-9a-f] characters, all lowercase\"\n\n\terrInvalidTraceIDLength errorConst = \"hex encoded trace-id must have length equals to 32\"\n\terrNilTraceID           errorConst = \"trace-id can't be all zero\"\n\n\terrInvalidSpanIDLength errorConst = \"hex encoded span-id must have length equals to 16\"\n\terrNilSpanID           errorConst = \"span-id can't be all zero\"\n)\n\ntype errorConst string\n\nfunc (e errorConst) Error() string {\n\treturn string(e)\n}\n\n// TraceID is a unique identity of a trace.\n// nolint:revive // revive complains about stutter of `trace.TraceID`.\ntype TraceID [16]byte\n\nvar (\n\tnilTraceID TraceID\n\t_          json.Marshaler = nilTraceID\n)\n\n// IsValid checks whether the trace TraceID is valid. A valid trace ID does\n// not consist of zeros only.\nfunc (t TraceID) IsValid() bool {\n\treturn !bytes.Equal(t[:], nilTraceID[:])\n}\n\n// MarshalJSON implements a custom marshal function to encode TraceID\n// as a hex string.\nfunc (t TraceID) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(t.String())\n}\n\n// String returns the hex string representation form of a TraceID.\nfunc (t TraceID) String() string {\n\treturn hex.EncodeToString(t[:])\n}\n\n// SpanID is a unique identity of a span in a trace.\ntype SpanID [8]byte\n\nvar (\n\tnilSpanID SpanID\n\t_         json.Marshaler = nilSpanID\n)\n\n// IsValid checks whether the SpanID is valid. A valid SpanID does not consist\n// of zeros only.\nfunc (s SpanID) IsValid() bool {\n\treturn !bytes.Equal(s[:], nilSpanID[:])\n}\n\n// MarshalJSON implements a custom marshal function to encode SpanID\n// as a hex string.\nfunc (s SpanID) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(s.String())\n}\n\n// String returns the hex string representation form of a SpanID.\nfunc (s SpanID) String() string {\n\treturn hex.EncodeToString(s[:])\n}\n\n// TraceIDFromHex returns a TraceID from a hex string if it is compliant with\n// the W3C trace-context specification.  See more at\n// https://www.w3.org/TR/trace-context/#trace-id\n// nolint:revive // revive complains about stutter of `trace.TraceIDFromHex`.\nfunc TraceIDFromHex(h string) (TraceID, error) {\n\tt := TraceID{}\n\tif len(h) != 32 {\n\t\treturn t, errInvalidTraceIDLength\n\t}\n\n\tif err := decodeHex(h, t[:]); err != nil {\n\t\treturn t, err\n\t}\n\n\tif !t.IsValid() {\n\t\treturn t, errNilTraceID\n\t}\n\treturn t, nil\n}\n\n// SpanIDFromHex returns a SpanID from a hex string if it is compliant\n// with the w3c trace-context specification.\n// See more at https://www.w3.org/TR/trace-context/#parent-id\nfunc SpanIDFromHex(h string) (SpanID, error) {\n\ts := SpanID{}\n\tif len(h) != 16 {\n\t\treturn s, errInvalidSpanIDLength\n\t}\n\n\tif err := decodeHex(h, s[:]); err != nil {\n\t\treturn s, err\n\t}\n\n\tif !s.IsValid() {\n\t\treturn s, errNilSpanID\n\t}\n\treturn s, nil\n}\n\nfunc decodeHex(h string, b []byte) error {\n\tfor _, r := range h {\n\t\tswitch {\n\t\tcase 'a' <= r && r <= 'f':\n\t\t\tcontinue\n\t\tcase '0' <= r && r <= '9':\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn errInvalidHexID\n\t\t}\n\t}\n\n\tdecoded, err := hex.DecodeString(h)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcopy(b, decoded)\n\treturn nil\n}\n\n// TraceFlags contains flags that can be set on a SpanContext.\ntype TraceFlags byte //nolint:revive // revive complains about stutter of `trace.TraceFlags`.\n\n// IsSampled returns if the sampling bit is set in the TraceFlags.\nfunc (tf TraceFlags) IsSampled() bool {\n\treturn tf&FlagsSampled == FlagsSampled\n}\n\n// WithSampled sets the sampling bit in a new copy of the TraceFlags.\nfunc (tf TraceFlags) WithSampled(sampled bool) TraceFlags { // nolint:revive  // sampled is not a control flag.\n\tif sampled {\n\t\treturn tf | FlagsSampled\n\t}\n\n\treturn tf &^ FlagsSampled\n}\n\n// MarshalJSON implements a custom marshal function to encode TraceFlags\n// as a hex string.\nfunc (tf TraceFlags) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(tf.String())\n}\n\n// String returns the hex string representation form of TraceFlags.\nfunc (tf TraceFlags) String() string {\n\treturn hex.EncodeToString([]byte{byte(tf)}[:])\n}\n\n// SpanContextConfig contains mutable fields usable for constructing\n// an immutable SpanContext.\ntype SpanContextConfig struct {\n\tTraceID    TraceID\n\tSpanID     SpanID\n\tTraceFlags TraceFlags\n\tTraceState TraceState\n\tRemote     bool\n}\n\n// NewSpanContext constructs a SpanContext using values from the provided\n// SpanContextConfig.\nfunc NewSpanContext(config SpanContextConfig) SpanContext {\n\treturn SpanContext{\n\t\ttraceID:    config.TraceID,\n\t\tspanID:     config.SpanID,\n\t\ttraceFlags: config.TraceFlags,\n\t\ttraceState: config.TraceState,\n\t\tremote:     config.Remote,\n\t}\n}\n\n// SpanContext contains identifying trace information about a Span.\ntype SpanContext struct {\n\ttraceID    TraceID\n\tspanID     SpanID\n\ttraceFlags TraceFlags\n\ttraceState TraceState\n\tremote     bool\n}\n\nvar _ json.Marshaler = SpanContext{}\n\n// IsValid returns if the SpanContext is valid. A valid span context has a\n// valid TraceID and SpanID.\nfunc (sc SpanContext) IsValid() bool {\n\treturn sc.HasTraceID() && sc.HasSpanID()\n}\n\n// IsRemote indicates whether the SpanContext represents a remotely-created Span.\nfunc (sc SpanContext) IsRemote() bool {\n\treturn sc.remote\n}\n\n// WithRemote returns a copy of sc with the Remote property set to remote.\nfunc (sc SpanContext) WithRemote(remote bool) SpanContext {\n\treturn SpanContext{\n\t\ttraceID:    sc.traceID,\n\t\tspanID:     sc.spanID,\n\t\ttraceFlags: sc.traceFlags,\n\t\ttraceState: sc.traceState,\n\t\tremote:     remote,\n\t}\n}\n\n// TraceID returns the TraceID from the SpanContext.\nfunc (sc SpanContext) TraceID() TraceID {\n\treturn sc.traceID\n}\n\n// HasTraceID checks if the SpanContext has a valid TraceID.\nfunc (sc SpanContext) HasTraceID() bool {\n\treturn sc.traceID.IsValid()\n}\n\n// WithTraceID returns a new SpanContext with the TraceID replaced.\nfunc (sc SpanContext) WithTraceID(traceID TraceID) SpanContext {\n\treturn SpanContext{\n\t\ttraceID:    traceID,\n\t\tspanID:     sc.spanID,\n\t\ttraceFlags: sc.traceFlags,\n\t\ttraceState: sc.traceState,\n\t\tremote:     sc.remote,\n\t}\n}\n\n// SpanID returns the SpanID from the SpanContext.\nfunc (sc SpanContext) SpanID() SpanID {\n\treturn sc.spanID\n}\n\n// HasSpanID checks if the SpanContext has a valid SpanID.\nfunc (sc SpanContext) HasSpanID() bool {\n\treturn sc.spanID.IsValid()\n}\n\n// WithSpanID returns a new SpanContext with the SpanID replaced.\nfunc (sc SpanContext) WithSpanID(spanID SpanID) SpanContext {\n\treturn SpanContext{\n\t\ttraceID:    sc.traceID,\n\t\tspanID:     spanID,\n\t\ttraceFlags: sc.traceFlags,\n\t\ttraceState: sc.traceState,\n\t\tremote:     sc.remote,\n\t}\n}\n\n// TraceFlags returns the flags from the SpanContext.\nfunc (sc SpanContext) TraceFlags() TraceFlags {\n\treturn sc.traceFlags\n}\n\n// IsSampled returns if the sampling bit is set in the SpanContext's TraceFlags.\nfunc (sc SpanContext) IsSampled() bool {\n\treturn sc.traceFlags.IsSampled()\n}\n\n// WithTraceFlags returns a new SpanContext with the TraceFlags replaced.\nfunc (sc SpanContext) WithTraceFlags(flags TraceFlags) SpanContext {\n\treturn SpanContext{\n\t\ttraceID:    sc.traceID,\n\t\tspanID:     sc.spanID,\n\t\ttraceFlags: flags,\n\t\ttraceState: sc.traceState,\n\t\tremote:     sc.remote,\n\t}\n}\n\n// TraceState returns the TraceState from the SpanContext.\nfunc (sc SpanContext) TraceState() TraceState {\n\treturn sc.traceState\n}\n\n// WithTraceState returns a new SpanContext with the TraceState replaced.\nfunc (sc SpanContext) WithTraceState(state TraceState) SpanContext {\n\treturn SpanContext{\n\t\ttraceID:    sc.traceID,\n\t\tspanID:     sc.spanID,\n\t\ttraceFlags: sc.traceFlags,\n\t\ttraceState: state,\n\t\tremote:     sc.remote,\n\t}\n}\n\n// Equal is a predicate that determines whether two SpanContext values are equal.\nfunc (sc SpanContext) Equal(other SpanContext) bool {\n\treturn sc.traceID == other.traceID &&\n\t\tsc.spanID == other.spanID &&\n\t\tsc.traceFlags == other.traceFlags &&\n\t\tsc.traceState.String() == other.traceState.String() &&\n\t\tsc.remote == other.remote\n}\n\n// MarshalJSON implements a custom marshal function to encode a SpanContext.\nfunc (sc SpanContext) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(SpanContextConfig{\n\t\tTraceID:    sc.traceID,\n\t\tSpanID:     sc.spanID,\n\t\tTraceFlags: sc.traceFlags,\n\t\tTraceState: sc.traceState,\n\t\tRemote:     sc.remote,\n\t})\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/tracer.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport (\n\t\"context\"\n\n\t\"go.opentelemetry.io/otel/trace/embedded\"\n)\n\n// Tracer is the creator of Spans.\n//\n// Warning: Methods may be added to this interface in minor releases. See\n// package documentation on API implementation for information on how to set\n// default behavior for unimplemented methods.\ntype Tracer interface {\n\t// Users of the interface can ignore this. This embedded type is only used\n\t// by implementations of this interface. See the \"API Implementations\"\n\t// section of the package documentation for more information.\n\tembedded.Tracer\n\n\t// Start creates a span and a context.Context containing the newly-created span.\n\t//\n\t// If the context.Context provided in `ctx` contains a Span then the newly-created\n\t// Span will be a child of that span, otherwise it will be a root span. This behavior\n\t// can be overridden by providing `WithNewRoot()` as a SpanOption, causing the\n\t// newly-created Span to be a root span even if `ctx` contains a Span.\n\t//\n\t// When creating a Span it is recommended to provide all known span attributes using\n\t// the `WithAttributes()` SpanOption as samplers will only have access to the\n\t// attributes provided when a Span is created.\n\t//\n\t// Any Span that is created MUST also be ended. This is the responsibility of the user.\n\t// Implementations of this API may leak memory or other resources if Spans are not ended.\n\tStart(ctx context.Context, spanName string, opts ...SpanStartOption) (context.Context, Span)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace/tracestate.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage trace // import \"go.opentelemetry.io/otel/trace\"\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n)\n\nconst (\n\tmaxListMembers = 32\n\n\tlistDelimiters  = \",\"\n\tmemberDelimiter = \"=\"\n\n\terrInvalidKey    errorConst = \"invalid tracestate key\"\n\terrInvalidValue  errorConst = \"invalid tracestate value\"\n\terrInvalidMember errorConst = \"invalid tracestate list-member\"\n\terrMemberNumber  errorConst = \"too many list-members in tracestate\"\n\terrDuplicate     errorConst = \"duplicate list-member in tracestate\"\n)\n\ntype member struct {\n\tKey   string\n\tValue string\n}\n\n// according to (chr = %x20 / (nblk-char = %x21-2B / %x2D-3C / %x3E-7E) )\n// means (chr = %x20-2B / %x2D-3C / %x3E-7E) .\nfunc checkValueChar(v byte) bool {\n\treturn v >= '\\x20' && v <= '\\x7e' && v != '\\x2c' && v != '\\x3d'\n}\n\n// according to (nblk-chr = %x21-2B / %x2D-3C / %x3E-7E) .\nfunc checkValueLast(v byte) bool {\n\treturn v >= '\\x21' && v <= '\\x7e' && v != '\\x2c' && v != '\\x3d'\n}\n\n// based on the W3C Trace Context specification\n//\n//\tvalue    = (0*255(chr)) nblk-chr\n//\tnblk-chr = %x21-2B / %x2D-3C / %x3E-7E\n//\tchr      = %x20 / nblk-chr\n//\n// see https://www.w3.org/TR/trace-context-1/#value\nfunc checkValue(val string) bool {\n\tn := len(val)\n\tif n == 0 || n > 256 {\n\t\treturn false\n\t}\n\tfor i := 0; i < n-1; i++ {\n\t\tif !checkValueChar(val[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn checkValueLast(val[n-1])\n}\n\nfunc checkKeyRemain(key string) bool {\n\t// ( lcalpha / DIGIT / \"_\" / \"-\"/ \"*\" / \"/\" )\n\tfor _, v := range key {\n\t\tif isAlphaNum(byte(v)) {\n\t\t\tcontinue\n\t\t}\n\t\tswitch v {\n\t\tcase '_', '-', '*', '/':\n\t\t\tcontinue\n\t\t}\n\t\treturn false\n\t}\n\treturn true\n}\n\n// according to\n//\n//\tsimple-key = lcalpha (0*255( lcalpha / DIGIT / \"_\" / \"-\"/ \"*\" / \"/\" ))\n//\tsystem-id = lcalpha (0*13( lcalpha / DIGIT / \"_\" / \"-\"/ \"*\" / \"/\" ))\n//\n// param n is remain part length, should be 255 in simple-key or 13 in system-id.\nfunc checkKeyPart(key string, n int) bool {\n\tif len(key) == 0 {\n\t\treturn false\n\t}\n\tfirst := key[0] // key's first char\n\tret := len(key[1:]) <= n\n\tret = ret && first >= 'a' && first <= 'z'\n\treturn ret && checkKeyRemain(key[1:])\n}\n\nfunc isAlphaNum(c byte) bool {\n\tif c >= 'a' && c <= 'z' {\n\t\treturn true\n\t}\n\treturn c >= '0' && c <= '9'\n}\n\n// according to\n//\n//\ttenant-id = ( lcalpha / DIGIT ) 0*240( lcalpha / DIGIT / \"_\" / \"-\"/ \"*\" / \"/\" )\n//\n// param n is remain part length, should be 240 exactly.\nfunc checkKeyTenant(key string, n int) bool {\n\tif len(key) == 0 {\n\t\treturn false\n\t}\n\treturn isAlphaNum(key[0]) && len(key[1:]) <= n && checkKeyRemain(key[1:])\n}\n\n// based on the W3C Trace Context specification\n//\n//\tkey = simple-key / multi-tenant-key\n//\tsimple-key = lcalpha (0*255( lcalpha / DIGIT / \"_\" / \"-\"/ \"*\" / \"/\" ))\n//\tmulti-tenant-key = tenant-id \"@\" system-id\n//\ttenant-id = ( lcalpha / DIGIT ) (0*240( lcalpha / DIGIT / \"_\" / \"-\"/ \"*\" / \"/\" ))\n//\tsystem-id = lcalpha (0*13( lcalpha / DIGIT / \"_\" / \"-\"/ \"*\" / \"/\" ))\n//\tlcalpha    = %x61-7A ; a-z\n//\n// see https://www.w3.org/TR/trace-context-1/#tracestate-header.\nfunc checkKey(key string) bool {\n\ttenant, system, ok := strings.Cut(key, \"@\")\n\tif !ok {\n\t\treturn checkKeyPart(key, 255)\n\t}\n\treturn checkKeyTenant(tenant, 240) && checkKeyPart(system, 13)\n}\n\nfunc newMember(key, value string) (member, error) {\n\tif !checkKey(key) {\n\t\treturn member{}, errInvalidKey\n\t}\n\tif !checkValue(value) {\n\t\treturn member{}, errInvalidValue\n\t}\n\treturn member{Key: key, Value: value}, nil\n}\n\nfunc parseMember(m string) (member, error) {\n\tkey, val, ok := strings.Cut(m, memberDelimiter)\n\tif !ok {\n\t\treturn member{}, fmt.Errorf(\"%w: %s\", errInvalidMember, m)\n\t}\n\tkey = strings.TrimLeft(key, \" \\t\")\n\tval = strings.TrimRight(val, \" \\t\")\n\tresult, e := newMember(key, val)\n\tif e != nil {\n\t\treturn member{}, fmt.Errorf(\"%w: %s\", errInvalidMember, m)\n\t}\n\treturn result, nil\n}\n\n// String encodes member into a string compliant with the W3C Trace Context\n// specification.\nfunc (m member) String() string {\n\treturn m.Key + \"=\" + m.Value\n}\n\n// TraceState provides additional vendor-specific trace identification\n// information across different distributed tracing systems. It represents an\n// immutable list consisting of key/value pairs, each pair is referred to as a\n// list-member.\n//\n// TraceState conforms to the W3C Trace Context specification\n// (https://www.w3.org/TR/trace-context-1). All operations that create or copy\n// a TraceState do so by validating all input and will only produce TraceState\n// that conform to the specification. Specifically, this means that all\n// list-member's key/value pairs are valid, no duplicate list-members exist,\n// and the maximum number of list-members (32) is not exceeded.\ntype TraceState struct { //nolint:revive // revive complains about stutter of `trace.TraceState`\n\t// list is the members in order.\n\tlist []member\n}\n\nvar _ json.Marshaler = TraceState{}\n\n// ParseTraceState attempts to decode a TraceState from the passed\n// string. It returns an error if the input is invalid according to the W3C\n// Trace Context specification.\nfunc ParseTraceState(ts string) (TraceState, error) {\n\tif ts == \"\" {\n\t\treturn TraceState{}, nil\n\t}\n\n\twrapErr := func(err error) error {\n\t\treturn fmt.Errorf(\"failed to parse tracestate: %w\", err)\n\t}\n\n\tvar members []member\n\tfound := make(map[string]struct{})\n\tfor ts != \"\" {\n\t\tvar memberStr string\n\t\tmemberStr, ts, _ = strings.Cut(ts, listDelimiters)\n\t\tif len(memberStr) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tm, err := parseMember(memberStr)\n\t\tif err != nil {\n\t\t\treturn TraceState{}, wrapErr(err)\n\t\t}\n\n\t\tif _, ok := found[m.Key]; ok {\n\t\t\treturn TraceState{}, wrapErr(errDuplicate)\n\t\t}\n\t\tfound[m.Key] = struct{}{}\n\n\t\tmembers = append(members, m)\n\t\tif n := len(members); n > maxListMembers {\n\t\t\treturn TraceState{}, wrapErr(errMemberNumber)\n\t\t}\n\t}\n\n\treturn TraceState{list: members}, nil\n}\n\n// MarshalJSON marshals the TraceState into JSON.\nfunc (ts TraceState) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(ts.String())\n}\n\n// String encodes the TraceState into a string compliant with the W3C\n// Trace Context specification. The returned string will be invalid if the\n// TraceState contains any invalid members.\nfunc (ts TraceState) String() string {\n\tif len(ts.list) == 0 {\n\t\treturn \"\"\n\t}\n\tvar n int\n\tn += len(ts.list)     // member delimiters: '='\n\tn += len(ts.list) - 1 // list delimiters: ','\n\tfor _, mem := range ts.list {\n\t\tn += len(mem.Key)\n\t\tn += len(mem.Value)\n\t}\n\n\tvar sb strings.Builder\n\tsb.Grow(n)\n\t_, _ = sb.WriteString(ts.list[0].Key)\n\t_ = sb.WriteByte('=')\n\t_, _ = sb.WriteString(ts.list[0].Value)\n\tfor i := 1; i < len(ts.list); i++ {\n\t\t_ = sb.WriteByte(listDelimiters[0])\n\t\t_, _ = sb.WriteString(ts.list[i].Key)\n\t\t_ = sb.WriteByte('=')\n\t\t_, _ = sb.WriteString(ts.list[i].Value)\n\t}\n\treturn sb.String()\n}\n\n// Get returns the value paired with key from the corresponding TraceState\n// list-member if it exists, otherwise an empty string is returned.\nfunc (ts TraceState) Get(key string) string {\n\tfor _, member := range ts.list {\n\t\tif member.Key == key {\n\t\t\treturn member.Value\n\t\t}\n\t}\n\n\treturn \"\"\n}\n\n// Walk walks all key value pairs in the TraceState by calling f\n// Iteration stops if f returns false.\nfunc (ts TraceState) Walk(f func(key, value string) bool) {\n\tfor _, m := range ts.list {\n\t\tif !f(m.Key, m.Value) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// Insert adds a new list-member defined by the key/value pair to the\n// TraceState. If a list-member already exists for the given key, that\n// list-member's value is updated. The new or updated list-member is always\n// moved to the beginning of the TraceState as specified by the W3C Trace\n// Context specification.\n//\n// If key or value are invalid according to the W3C Trace Context\n// specification an error is returned with the original TraceState.\n//\n// If adding a new list-member means the TraceState would have more members\n// then is allowed, the new list-member will be inserted and the right-most\n// list-member will be dropped in the returned TraceState.\nfunc (ts TraceState) Insert(key, value string) (TraceState, error) {\n\tm, err := newMember(key, value)\n\tif err != nil {\n\t\treturn ts, err\n\t}\n\tn := len(ts.list)\n\tfound := n\n\tfor i := range ts.list {\n\t\tif ts.list[i].Key == key {\n\t\t\tfound = i\n\t\t}\n\t}\n\tcTS := TraceState{}\n\tif found == n && n < maxListMembers {\n\t\tcTS.list = make([]member, n+1)\n\t} else {\n\t\tcTS.list = make([]member, n)\n\t}\n\tcTS.list[0] = m\n\t// When the number of members exceeds capacity, drop the \"right-most\".\n\tcopy(cTS.list[1:], ts.list[0:found])\n\tif found < n {\n\t\tcopy(cTS.list[1+found:], ts.list[found+1:])\n\t}\n\treturn cTS, nil\n}\n\n// Delete returns a copy of the TraceState with the list-member identified by\n// key removed.\nfunc (ts TraceState) Delete(key string) TraceState {\n\tmembers := make([]member, ts.Len())\n\tcopy(members, ts.list)\n\tfor i, member := range ts.list {\n\t\tif member.Key == key {\n\t\t\tmembers = append(members[:i], members[i+1:]...)\n\t\t\t// TraceState should contain no duplicate members.\n\t\t\tbreak\n\t\t}\n\t}\n\treturn TraceState{list: members}\n}\n\n// Len returns the number of list-members in the TraceState.\nfunc (ts TraceState) Len() int {\n\treturn len(ts.list)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/trace.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage otel // import \"go.opentelemetry.io/otel\"\n\nimport (\n\t\"go.opentelemetry.io/otel/internal/global\"\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\n// Tracer creates a named tracer that implements Tracer interface.\n// If the name is an empty string then provider uses default name.\n//\n// This is short for GetTracerProvider().Tracer(name, opts...)\nfunc Tracer(name string, opts ...trace.TracerOption) trace.Tracer {\n\treturn GetTracerProvider().Tracer(name, opts...)\n}\n\n// GetTracerProvider returns the registered global trace provider.\n// If none is registered then an instance of NoopTracerProvider is returned.\n//\n// Use the trace provider to create a named tracer. E.g.\n//\n//\ttracer := otel.GetTracerProvider().Tracer(\"example.com/foo\")\n//\n// or\n//\n//\ttracer := otel.Tracer(\"example.com/foo\")\nfunc GetTracerProvider() trace.TracerProvider {\n\treturn global.TracerProvider()\n}\n\n// SetTracerProvider registers `tp` as the global trace provider.\nfunc SetTracerProvider(tp trace.TracerProvider) {\n\tglobal.SetTracerProvider(tp)\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/verify_readmes.sh",
    "content": "#!/bin/bash\n\n# Copyright The OpenTelemetry Authors\n# SPDX-License-Identifier: Apache-2.0\n\nset -euo pipefail\n\ndirs=$(find . -type d -not -path \"*/internal*\" -not -path \"*/test*\" -not -path \"*/example*\" -not -path \"*/.*\" | sort)\n\nmissingReadme=false\nfor dir in $dirs; do\n\tif [ ! -f \"$dir/README.md\" ]; then\n\t\techo \"couldn't find README.md for $dir\"\n\t\tmissingReadme=true\n\tfi\ndone\n\nif [ \"$missingReadme\" = true ] ; then\n\techo \"Error: some READMEs couldn't be found.\"\n\texit 1\nfi\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/verify_released_changelog.sh",
    "content": "#!/bin/bash\n\n# Copyright The OpenTelemetry Authors\n# SPDX-License-Identifier: Apache-2.0\n\nset -euo pipefail\n\nTARGET=\"${1:?Must provide target ref}\"\n\nFILE=\"CHANGELOG.md\"\nTEMP_DIR=$(mktemp -d)\necho \"Temp folder: $TEMP_DIR\"\n\n# Only the latest commit of the feature branch is available\n# automatically. To diff with the base branch, we need to\n# fetch that too (and we only need its latest commit).\ngit fetch origin \"${TARGET}\" --depth=1\n\n# Checkout the previous version on the base branch of the changelog to tmpfolder\ngit --work-tree=\"$TEMP_DIR\" checkout FETCH_HEAD $FILE\n\nPREVIOUS_FILE=\"$TEMP_DIR/$FILE\"\nCURRENT_FILE=\"$FILE\"\nPREVIOUS_LOCKED_FILE=\"$TEMP_DIR/previous_locked_section.md\"\nCURRENT_LOCKED_FILE=\"$TEMP_DIR/current_locked_section.md\"\n\n# Extract released sections from the previous version\nawk '/^<!-- Released section -->/ {flag=1} /^<!-- Released section ended -->/ {flag=0} flag' \"$PREVIOUS_FILE\" > \"$PREVIOUS_LOCKED_FILE\"\n\n# Extract released sections from the current version\nawk '/^<!-- Released section -->/ {flag=1} /^<!-- Released section ended -->/ {flag=0} flag' \"$CURRENT_FILE\" > \"$CURRENT_LOCKED_FILE\"\n\n# Compare the released sections\nif ! diff -q \"$PREVIOUS_LOCKED_FILE\" \"$CURRENT_LOCKED_FILE\"; then\n    echo \"Error: The released sections of the changelog file have been modified.\"\n    diff \"$PREVIOUS_LOCKED_FILE\" \"$CURRENT_LOCKED_FILE\"\n    rm -rf \"$TEMP_DIR\"\n    false\nfi\n\nrm -rf \"$TEMP_DIR\"\necho \"The released sections remain unchanged.\"\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/version.go",
    "content": "// Copyright The OpenTelemetry Authors\n// SPDX-License-Identifier: Apache-2.0\n\npackage otel // import \"go.opentelemetry.io/otel\"\n\n// Version is the current release version of OpenTelemetry in use.\nfunc Version() string {\n\treturn \"1.35.0\"\n}\n"
  },
  {
    "path": "vendor/go.opentelemetry.io/otel/versions.yaml",
    "content": "# Copyright The OpenTelemetry Authors\n# SPDX-License-Identifier: Apache-2.0\n\nmodule-sets:\n  stable-v1:\n    version: v1.35.0\n    modules:\n      - go.opentelemetry.io/otel\n      - go.opentelemetry.io/otel/bridge/opencensus\n      - go.opentelemetry.io/otel/bridge/opencensus/test\n      - go.opentelemetry.io/otel/bridge/opentracing\n      - go.opentelemetry.io/otel/bridge/opentracing/test\n      - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc\n      - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\n      - go.opentelemetry.io/otel/exporters/otlp/otlptrace\n      - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\n      - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\n      - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric\n      - go.opentelemetry.io/otel/exporters/stdout/stdouttrace\n      - go.opentelemetry.io/otel/exporters/zipkin\n      - go.opentelemetry.io/otel/metric\n      - go.opentelemetry.io/otel/sdk\n      - go.opentelemetry.io/otel/sdk/metric\n      - go.opentelemetry.io/otel/trace\n  experimental-metrics:\n    version: v0.57.0\n    modules:\n      - go.opentelemetry.io/otel/exporters/prometheus\n  experimental-logs:\n    version: v0.11.0\n    modules:\n      - go.opentelemetry.io/otel/log\n      - go.opentelemetry.io/otel/sdk/log\n      - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc\n      - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\n      - go.opentelemetry.io/otel/exporters/stdout/stdoutlog\n  experimental-schema:\n    version: v0.0.12\n    modules:\n      - go.opentelemetry.io/otel/schema\nexcluded-modules:\n  - go.opentelemetry.io/otel/internal/tools\n  - go.opentelemetry.io/otel/trace/internal/telemetry/test\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/LICENSE",
    "content": "Copyright 2009 The Go Authors.\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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/golang.org/x/crypto/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/blowfish/block.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage blowfish\n\n// getNextWord returns the next big-endian uint32 value from the byte slice\n// at the given position in a circular manner, updating the position.\nfunc getNextWord(b []byte, pos *int) uint32 {\n\tvar w uint32\n\tj := *pos\n\tfor i := 0; i < 4; i++ {\n\t\tw = w<<8 | uint32(b[j])\n\t\tj++\n\t\tif j >= len(b) {\n\t\t\tj = 0\n\t\t}\n\t}\n\t*pos = j\n\treturn w\n}\n\n// ExpandKey performs a key expansion on the given *Cipher. Specifically, it\n// performs the Blowfish algorithm's key schedule which sets up the *Cipher's\n// pi and substitution tables for calls to Encrypt. This is used, primarily,\n// by the bcrypt package to reuse the Blowfish key schedule during its\n// set up. It's unlikely that you need to use this directly.\nfunc ExpandKey(key []byte, c *Cipher) {\n\tj := 0\n\tfor i := 0; i < 18; i++ {\n\t\t// Using inlined getNextWord for performance.\n\t\tvar d uint32\n\t\tfor k := 0; k < 4; k++ {\n\t\t\td = d<<8 | uint32(key[j])\n\t\t\tj++\n\t\t\tif j >= len(key) {\n\t\t\t\tj = 0\n\t\t\t}\n\t\t}\n\t\tc.p[i] ^= d\n\t}\n\n\tvar l, r uint32\n\tfor i := 0; i < 18; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.p[i], c.p[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s0[i], c.s0[i+1] = l, r\n\t}\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s1[i], c.s1[i+1] = l, r\n\t}\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s2[i], c.s2[i+1] = l, r\n\t}\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s3[i], c.s3[i+1] = l, r\n\t}\n}\n\n// This is similar to ExpandKey, but folds the salt during the key\n// schedule. While ExpandKey is essentially expandKeyWithSalt with an all-zero\n// salt passed in, reusing ExpandKey turns out to be a place of inefficiency\n// and specializing it here is useful.\nfunc expandKeyWithSalt(key []byte, salt []byte, c *Cipher) {\n\tj := 0\n\tfor i := 0; i < 18; i++ {\n\t\tc.p[i] ^= getNextWord(key, &j)\n\t}\n\n\tj = 0\n\tvar l, r uint32\n\tfor i := 0; i < 18; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.p[i], c.p[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s0[i], c.s0[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s1[i], c.s1[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s2[i], c.s2[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s3[i], c.s3[i+1] = l, r\n\t}\n}\n\nfunc encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {\n\txl, xr := l, r\n\txl ^= c.p[0]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16]\n\txr ^= c.p[17]\n\treturn xr, xl\n}\n\nfunc decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {\n\txl, xr := l, r\n\txl ^= c.p[17]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1]\n\txr ^= c.p[0]\n\treturn xr, xl\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/blowfish/cipher.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package blowfish implements Bruce Schneier's Blowfish encryption algorithm.\n//\n// Blowfish is a legacy cipher and its short block size makes it vulnerable to\n// birthday bound attacks (see https://sweet32.info). It should only be used\n// where compatibility with legacy systems, not security, is the goal.\n//\n// Deprecated: any new system should use AES (from crypto/aes, if necessary in\n// an AEAD mode like crypto/cipher.NewGCM) or XChaCha20-Poly1305 (from\n// golang.org/x/crypto/chacha20poly1305).\npackage blowfish\n\n// The code is a port of Bruce Schneier's C implementation.\n// See https://www.schneier.com/blowfish.html.\n\nimport \"strconv\"\n\n// The Blowfish block size in bytes.\nconst BlockSize = 8\n\n// A Cipher is an instance of Blowfish encryption using a particular key.\ntype Cipher struct {\n\tp              [18]uint32\n\ts0, s1, s2, s3 [256]uint32\n}\n\ntype KeySizeError int\n\nfunc (k KeySizeError) Error() string {\n\treturn \"crypto/blowfish: invalid key size \" + strconv.Itoa(int(k))\n}\n\n// NewCipher creates and returns a Cipher.\n// The key argument should be the Blowfish key, from 1 to 56 bytes.\nfunc NewCipher(key []byte) (*Cipher, error) {\n\tvar result Cipher\n\tif k := len(key); k < 1 || k > 56 {\n\t\treturn nil, KeySizeError(k)\n\t}\n\tinitCipher(&result)\n\tExpandKey(key, &result)\n\treturn &result, nil\n}\n\n// NewSaltedCipher creates a returns a Cipher that folds a salt into its key\n// schedule. For most purposes, NewCipher, instead of NewSaltedCipher, is\n// sufficient and desirable. For bcrypt compatibility, the key can be over 56\n// bytes.\nfunc NewSaltedCipher(key, salt []byte) (*Cipher, error) {\n\tif len(salt) == 0 {\n\t\treturn NewCipher(key)\n\t}\n\tvar result Cipher\n\tif k := len(key); k < 1 {\n\t\treturn nil, KeySizeError(k)\n\t}\n\tinitCipher(&result)\n\texpandKeyWithSalt(key, salt, &result)\n\treturn &result, nil\n}\n\n// BlockSize returns the Blowfish block size, 8 bytes.\n// It is necessary to satisfy the Block interface in the\n// package \"crypto/cipher\".\nfunc (c *Cipher) BlockSize() int { return BlockSize }\n\n// Encrypt encrypts the 8-byte buffer src using the key k\n// and stores the result in dst.\n// Note that for amounts of data larger than a block,\n// it is not safe to just call Encrypt on successive blocks;\n// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go).\nfunc (c *Cipher) Encrypt(dst, src []byte) {\n\tl := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])\n\tr := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])\n\tl, r = encryptBlock(l, r, c)\n\tdst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)\n\tdst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r)\n}\n\n// Decrypt decrypts the 8-byte buffer src using the key k\n// and stores the result in dst.\nfunc (c *Cipher) Decrypt(dst, src []byte) {\n\tl := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])\n\tr := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])\n\tl, r = decryptBlock(l, r, c)\n\tdst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)\n\tdst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r)\n}\n\nfunc initCipher(c *Cipher) {\n\tcopy(c.p[0:], p[0:])\n\tcopy(c.s0[0:], s0[0:])\n\tcopy(c.s1[0:], s1[0:])\n\tcopy(c.s2[0:], s2[0:])\n\tcopy(c.s3[0:], s3[0:])\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/blowfish/const.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// The startup permutation array and substitution boxes.\n// They are the hexadecimal digits of PI; see:\n// https://www.schneier.com/code/constants.txt.\n\npackage blowfish\n\nvar s0 = [256]uint32{\n\t0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,\n\t0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n\t0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,\n\t0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n\t0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,\n\t0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n\t0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,\n\t0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n\t0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,\n\t0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n\t0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,\n\t0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n\t0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,\n\t0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n\t0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,\n\t0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n\t0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,\n\t0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n\t0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,\n\t0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n\t0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,\n\t0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n\t0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,\n\t0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n\t0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,\n\t0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n\t0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,\n\t0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n\t0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,\n\t0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n\t0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,\n\t0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n\t0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,\n\t0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n\t0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,\n\t0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n\t0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,\n\t0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n\t0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,\n\t0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n\t0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,\n\t0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n\t0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,\n}\n\nvar s1 = [256]uint32{\n\t0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d,\n\t0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,\n\t0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65,\n\t0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n\t0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9,\n\t0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,\n\t0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d,\n\t0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n\t0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,\n\t0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,\n\t0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908,\n\t0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n\t0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124,\n\t0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\n\t0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908,\n\t0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n\t0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b,\n\t0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,\n\t0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,\n\t0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n\t0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d,\n\t0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,\n\t0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5,\n\t0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n\t0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96,\n\t0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,\n\t0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca,\n\t0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n\t0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,\n\t0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,\n\t0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054,\n\t0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n\t0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea,\n\t0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\n\t0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646,\n\t0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n\t0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea,\n\t0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,\n\t0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,\n\t0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n\t0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd,\n\t0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,\n\t0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,\n}\n\nvar s2 = [256]uint32{\n\t0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7,\n\t0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,\n\t0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,\n\t0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n\t0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4,\n\t0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,\n\t0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec,\n\t0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n\t0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332,\n\t0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,\n\t0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58,\n\t0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n\t0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,\n\t0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,\n\t0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60,\n\t0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n\t0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99,\n\t0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\n\t0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74,\n\t0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n\t0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3,\n\t0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,\n\t0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,\n\t0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n\t0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa,\n\t0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,\n\t0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086,\n\t0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n\t0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24,\n\t0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,\n\t0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84,\n\t0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n\t0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,\n\t0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,\n\t0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe,\n\t0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n\t0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0,\n\t0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\n\t0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188,\n\t0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n\t0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8,\n\t0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,\n\t0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,\n}\n\nvar s3 = [256]uint32{\n\t0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,\n\t0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n\t0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,\n\t0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n\t0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,\n\t0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n\t0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,\n\t0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n\t0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,\n\t0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n\t0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,\n\t0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n\t0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,\n\t0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n\t0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,\n\t0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n\t0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,\n\t0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n\t0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,\n\t0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n\t0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,\n\t0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n\t0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,\n\t0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n\t0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,\n\t0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n\t0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,\n\t0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n\t0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,\n\t0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n\t0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,\n\t0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n\t0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,\n\t0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n\t0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,\n\t0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n\t0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,\n\t0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n\t0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,\n\t0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n\t0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,\n\t0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n\t0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,\n}\n\nvar p = [18]uint32{\n\t0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,\n\t0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n\t0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_arm64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego\n\npackage chacha20\n\nconst bufSize = 256\n\n//go:noescape\nfunc xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)\n\nfunc (c *Cipher) xorKeyStreamBlocks(dst, src []byte) {\n\txorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_arm64.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego\n\n#include \"textflag.h\"\n\n#define NUM_ROUNDS 10\n\n// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)\nTEXT ·xorKeyStreamVX(SB), NOSPLIT, $0\n\tMOVD\tdst+0(FP), R1\n\tMOVD\tsrc+24(FP), R2\n\tMOVD\tsrc_len+32(FP), R3\n\tMOVD\tkey+48(FP), R4\n\tMOVD\tnonce+56(FP), R6\n\tMOVD\tcounter+64(FP), R7\n\n\tMOVD\t$·constants(SB), R10\n\tMOVD\t$·incRotMatrix(SB), R11\n\n\tMOVW\t(R7), R20\n\n\tAND\t$~255, R3, R13\n\tADD\tR2, R13, R12 // R12 for block end\n\tAND\t$255, R3, R13\nloop:\n\tMOVD\t$NUM_ROUNDS, R21\n\tVLD1\t(R11), [V30.S4, V31.S4]\n\n\t// load contants\n\t// VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4]\n\tWORD\t$0x4D60E940\n\n\t// load keys\n\t// VLD4R 16(R4), [V4.S4, V5.S4, V6.S4, V7.S4]\n\tWORD\t$0x4DFFE884\n\t// VLD4R 16(R4), [V8.S4, V9.S4, V10.S4, V11.S4]\n\tWORD\t$0x4DFFE888\n\tSUB\t$32, R4\n\n\t// load counter + nonce\n\t// VLD1R (R7), [V12.S4]\n\tWORD\t$0x4D40C8EC\n\n\t// VLD3R (R6), [V13.S4, V14.S4, V15.S4]\n\tWORD\t$0x4D40E8CD\n\n\t// update counter\n\tVADD\tV30.S4, V12.S4, V12.S4\n\nchacha:\n\t// V0..V3 += V4..V7\n\t// V12..V15 <<<= ((V12..V15 XOR V0..V3), 16)\n\tVADD\tV0.S4, V4.S4, V0.S4\n\tVADD\tV1.S4, V5.S4, V1.S4\n\tVADD\tV2.S4, V6.S4, V2.S4\n\tVADD\tV3.S4, V7.S4, V3.S4\n\tVEOR\tV12.B16, V0.B16, V12.B16\n\tVEOR\tV13.B16, V1.B16, V13.B16\n\tVEOR\tV14.B16, V2.B16, V14.B16\n\tVEOR\tV15.B16, V3.B16, V15.B16\n\tVREV32\tV12.H8, V12.H8\n\tVREV32\tV13.H8, V13.H8\n\tVREV32\tV14.H8, V14.H8\n\tVREV32\tV15.H8, V15.H8\n\t// V8..V11 += V12..V15\n\t// V4..V7 <<<= ((V4..V7 XOR V8..V11), 12)\n\tVADD\tV8.S4, V12.S4, V8.S4\n\tVADD\tV9.S4, V13.S4, V9.S4\n\tVADD\tV10.S4, V14.S4, V10.S4\n\tVADD\tV11.S4, V15.S4, V11.S4\n\tVEOR\tV8.B16, V4.B16, V16.B16\n\tVEOR\tV9.B16, V5.B16, V17.B16\n\tVEOR\tV10.B16, V6.B16, V18.B16\n\tVEOR\tV11.B16, V7.B16, V19.B16\n\tVSHL\t$12, V16.S4, V4.S4\n\tVSHL\t$12, V17.S4, V5.S4\n\tVSHL\t$12, V18.S4, V6.S4\n\tVSHL\t$12, V19.S4, V7.S4\n\tVSRI\t$20, V16.S4, V4.S4\n\tVSRI\t$20, V17.S4, V5.S4\n\tVSRI\t$20, V18.S4, V6.S4\n\tVSRI\t$20, V19.S4, V7.S4\n\n\t// V0..V3 += V4..V7\n\t// V12..V15 <<<= ((V12..V15 XOR V0..V3), 8)\n\tVADD\tV0.S4, V4.S4, V0.S4\n\tVADD\tV1.S4, V5.S4, V1.S4\n\tVADD\tV2.S4, V6.S4, V2.S4\n\tVADD\tV3.S4, V7.S4, V3.S4\n\tVEOR\tV12.B16, V0.B16, V12.B16\n\tVEOR\tV13.B16, V1.B16, V13.B16\n\tVEOR\tV14.B16, V2.B16, V14.B16\n\tVEOR\tV15.B16, V3.B16, V15.B16\n\tVTBL\tV31.B16, [V12.B16], V12.B16\n\tVTBL\tV31.B16, [V13.B16], V13.B16\n\tVTBL\tV31.B16, [V14.B16], V14.B16\n\tVTBL\tV31.B16, [V15.B16], V15.B16\n\n\t// V8..V11 += V12..V15\n\t// V4..V7 <<<= ((V4..V7 XOR V8..V11), 7)\n\tVADD\tV12.S4, V8.S4, V8.S4\n\tVADD\tV13.S4, V9.S4, V9.S4\n\tVADD\tV14.S4, V10.S4, V10.S4\n\tVADD\tV15.S4, V11.S4, V11.S4\n\tVEOR\tV8.B16, V4.B16, V16.B16\n\tVEOR\tV9.B16, V5.B16, V17.B16\n\tVEOR\tV10.B16, V6.B16, V18.B16\n\tVEOR\tV11.B16, V7.B16, V19.B16\n\tVSHL\t$7, V16.S4, V4.S4\n\tVSHL\t$7, V17.S4, V5.S4\n\tVSHL\t$7, V18.S4, V6.S4\n\tVSHL\t$7, V19.S4, V7.S4\n\tVSRI\t$25, V16.S4, V4.S4\n\tVSRI\t$25, V17.S4, V5.S4\n\tVSRI\t$25, V18.S4, V6.S4\n\tVSRI\t$25, V19.S4, V7.S4\n\n\t// V0..V3 += V5..V7, V4\n\t// V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 16)\n\tVADD\tV0.S4, V5.S4, V0.S4\n\tVADD\tV1.S4, V6.S4, V1.S4\n\tVADD\tV2.S4, V7.S4, V2.S4\n\tVADD\tV3.S4, V4.S4, V3.S4\n\tVEOR\tV15.B16, V0.B16, V15.B16\n\tVEOR\tV12.B16, V1.B16, V12.B16\n\tVEOR\tV13.B16, V2.B16, V13.B16\n\tVEOR\tV14.B16, V3.B16, V14.B16\n\tVREV32\tV12.H8, V12.H8\n\tVREV32\tV13.H8, V13.H8\n\tVREV32\tV14.H8, V14.H8\n\tVREV32\tV15.H8, V15.H8\n\n\t// V10 += V15; V5 <<<= ((V10 XOR V5), 12)\n\t// ...\n\tVADD\tV15.S4, V10.S4, V10.S4\n\tVADD\tV12.S4, V11.S4, V11.S4\n\tVADD\tV13.S4, V8.S4, V8.S4\n\tVADD\tV14.S4, V9.S4, V9.S4\n\tVEOR\tV10.B16, V5.B16, V16.B16\n\tVEOR\tV11.B16, V6.B16, V17.B16\n\tVEOR\tV8.B16, V7.B16, V18.B16\n\tVEOR\tV9.B16, V4.B16, V19.B16\n\tVSHL\t$12, V16.S4, V5.S4\n\tVSHL\t$12, V17.S4, V6.S4\n\tVSHL\t$12, V18.S4, V7.S4\n\tVSHL\t$12, V19.S4, V4.S4\n\tVSRI\t$20, V16.S4, V5.S4\n\tVSRI\t$20, V17.S4, V6.S4\n\tVSRI\t$20, V18.S4, V7.S4\n\tVSRI\t$20, V19.S4, V4.S4\n\n\t// V0 += V5; V15 <<<= ((V0 XOR V15), 8)\n\t// ...\n\tVADD\tV5.S4, V0.S4, V0.S4\n\tVADD\tV6.S4, V1.S4, V1.S4\n\tVADD\tV7.S4, V2.S4, V2.S4\n\tVADD\tV4.S4, V3.S4, V3.S4\n\tVEOR\tV0.B16, V15.B16, V15.B16\n\tVEOR\tV1.B16, V12.B16, V12.B16\n\tVEOR\tV2.B16, V13.B16, V13.B16\n\tVEOR\tV3.B16, V14.B16, V14.B16\n\tVTBL\tV31.B16, [V12.B16], V12.B16\n\tVTBL\tV31.B16, [V13.B16], V13.B16\n\tVTBL\tV31.B16, [V14.B16], V14.B16\n\tVTBL\tV31.B16, [V15.B16], V15.B16\n\n\t// V10 += V15; V5 <<<= ((V10 XOR V5), 7)\n\t// ...\n\tVADD\tV15.S4, V10.S4, V10.S4\n\tVADD\tV12.S4, V11.S4, V11.S4\n\tVADD\tV13.S4, V8.S4, V8.S4\n\tVADD\tV14.S4, V9.S4, V9.S4\n\tVEOR\tV10.B16, V5.B16, V16.B16\n\tVEOR\tV11.B16, V6.B16, V17.B16\n\tVEOR\tV8.B16, V7.B16, V18.B16\n\tVEOR\tV9.B16, V4.B16, V19.B16\n\tVSHL\t$7, V16.S4, V5.S4\n\tVSHL\t$7, V17.S4, V6.S4\n\tVSHL\t$7, V18.S4, V7.S4\n\tVSHL\t$7, V19.S4, V4.S4\n\tVSRI\t$25, V16.S4, V5.S4\n\tVSRI\t$25, V17.S4, V6.S4\n\tVSRI\t$25, V18.S4, V7.S4\n\tVSRI\t$25, V19.S4, V4.S4\n\n\tSUB\t$1, R21\n\tCBNZ\tR21, chacha\n\n\t// VLD4R (R10), [V16.S4, V17.S4, V18.S4, V19.S4]\n\tWORD\t$0x4D60E950\n\n\t// VLD4R 16(R4), [V20.S4, V21.S4, V22.S4, V23.S4]\n\tWORD\t$0x4DFFE894\n\tVADD\tV30.S4, V12.S4, V12.S4\n\tVADD\tV16.S4, V0.S4, V0.S4\n\tVADD\tV17.S4, V1.S4, V1.S4\n\tVADD\tV18.S4, V2.S4, V2.S4\n\tVADD\tV19.S4, V3.S4, V3.S4\n\t// VLD4R 16(R4), [V24.S4, V25.S4, V26.S4, V27.S4]\n\tWORD\t$0x4DFFE898\n\t// restore R4\n\tSUB\t$32, R4\n\n\t// load counter + nonce\n\t// VLD1R (R7), [V28.S4]\n\tWORD\t$0x4D40C8FC\n\t// VLD3R (R6), [V29.S4, V30.S4, V31.S4]\n\tWORD\t$0x4D40E8DD\n\n\tVADD\tV20.S4, V4.S4, V4.S4\n\tVADD\tV21.S4, V5.S4, V5.S4\n\tVADD\tV22.S4, V6.S4, V6.S4\n\tVADD\tV23.S4, V7.S4, V7.S4\n\tVADD\tV24.S4, V8.S4, V8.S4\n\tVADD\tV25.S4, V9.S4, V9.S4\n\tVADD\tV26.S4, V10.S4, V10.S4\n\tVADD\tV27.S4, V11.S4, V11.S4\n\tVADD\tV28.S4, V12.S4, V12.S4\n\tVADD\tV29.S4, V13.S4, V13.S4\n\tVADD\tV30.S4, V14.S4, V14.S4\n\tVADD\tV31.S4, V15.S4, V15.S4\n\n\tVZIP1\tV1.S4, V0.S4, V16.S4\n\tVZIP2\tV1.S4, V0.S4, V17.S4\n\tVZIP1\tV3.S4, V2.S4, V18.S4\n\tVZIP2\tV3.S4, V2.S4, V19.S4\n\tVZIP1\tV5.S4, V4.S4, V20.S4\n\tVZIP2\tV5.S4, V4.S4, V21.S4\n\tVZIP1\tV7.S4, V6.S4, V22.S4\n\tVZIP2\tV7.S4, V6.S4, V23.S4\n\tVZIP1\tV9.S4, V8.S4, V24.S4\n\tVZIP2\tV9.S4, V8.S4, V25.S4\n\tVZIP1\tV11.S4, V10.S4, V26.S4\n\tVZIP2\tV11.S4, V10.S4, V27.S4\n\tVZIP1\tV13.S4, V12.S4, V28.S4\n\tVZIP2\tV13.S4, V12.S4, V29.S4\n\tVZIP1\tV15.S4, V14.S4, V30.S4\n\tVZIP2\tV15.S4, V14.S4, V31.S4\n\tVZIP1\tV18.D2, V16.D2, V0.D2\n\tVZIP2\tV18.D2, V16.D2, V4.D2\n\tVZIP1\tV19.D2, V17.D2, V8.D2\n\tVZIP2\tV19.D2, V17.D2, V12.D2\n\tVLD1.P\t64(R2), [V16.B16, V17.B16, V18.B16, V19.B16]\n\n\tVZIP1\tV22.D2, V20.D2, V1.D2\n\tVZIP2\tV22.D2, V20.D2, V5.D2\n\tVZIP1\tV23.D2, V21.D2, V9.D2\n\tVZIP2\tV23.D2, V21.D2, V13.D2\n\tVLD1.P\t64(R2), [V20.B16, V21.B16, V22.B16, V23.B16]\n\tVZIP1\tV26.D2, V24.D2, V2.D2\n\tVZIP2\tV26.D2, V24.D2, V6.D2\n\tVZIP1\tV27.D2, V25.D2, V10.D2\n\tVZIP2\tV27.D2, V25.D2, V14.D2\n\tVLD1.P\t64(R2), [V24.B16, V25.B16, V26.B16, V27.B16]\n\tVZIP1\tV30.D2, V28.D2, V3.D2\n\tVZIP2\tV30.D2, V28.D2, V7.D2\n\tVZIP1\tV31.D2, V29.D2, V11.D2\n\tVZIP2\tV31.D2, V29.D2, V15.D2\n\tVLD1.P\t64(R2), [V28.B16, V29.B16, V30.B16, V31.B16]\n\tVEOR\tV0.B16, V16.B16, V16.B16\n\tVEOR\tV1.B16, V17.B16, V17.B16\n\tVEOR\tV2.B16, V18.B16, V18.B16\n\tVEOR\tV3.B16, V19.B16, V19.B16\n\tVST1.P\t[V16.B16, V17.B16, V18.B16, V19.B16], 64(R1)\n\tVEOR\tV4.B16, V20.B16, V20.B16\n\tVEOR\tV5.B16, V21.B16, V21.B16\n\tVEOR\tV6.B16, V22.B16, V22.B16\n\tVEOR\tV7.B16, V23.B16, V23.B16\n\tVST1.P\t[V20.B16, V21.B16, V22.B16, V23.B16], 64(R1)\n\tVEOR\tV8.B16, V24.B16, V24.B16\n\tVEOR\tV9.B16, V25.B16, V25.B16\n\tVEOR\tV10.B16, V26.B16, V26.B16\n\tVEOR\tV11.B16, V27.B16, V27.B16\n\tVST1.P\t[V24.B16, V25.B16, V26.B16, V27.B16], 64(R1)\n\tVEOR\tV12.B16, V28.B16, V28.B16\n\tVEOR\tV13.B16, V29.B16, V29.B16\n\tVEOR\tV14.B16, V30.B16, V30.B16\n\tVEOR\tV15.B16, V31.B16, V31.B16\n\tVST1.P\t[V28.B16, V29.B16, V30.B16, V31.B16], 64(R1)\n\n\tADD\t$4, R20\n\tMOVW\tR20, (R7) // update counter\n\n\tCMP\tR2, R12\n\tBGT\tloop\n\n\tRET\n\n\nDATA\t·constants+0x00(SB)/4, $0x61707865\nDATA\t·constants+0x04(SB)/4, $0x3320646e\nDATA\t·constants+0x08(SB)/4, $0x79622d32\nDATA\t·constants+0x0c(SB)/4, $0x6b206574\nGLOBL\t·constants(SB), NOPTR|RODATA, $32\n\nDATA\t·incRotMatrix+0x00(SB)/4, $0x00000000\nDATA\t·incRotMatrix+0x04(SB)/4, $0x00000001\nDATA\t·incRotMatrix+0x08(SB)/4, $0x00000002\nDATA\t·incRotMatrix+0x0c(SB)/4, $0x00000003\nDATA\t·incRotMatrix+0x10(SB)/4, $0x02010003\nDATA\t·incRotMatrix+0x14(SB)/4, $0x06050407\nDATA\t·incRotMatrix+0x18(SB)/4, $0x0A09080B\nDATA\t·incRotMatrix+0x1c(SB)/4, $0x0E0D0C0F\nGLOBL\t·incRotMatrix(SB), NOPTR|RODATA, $32\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_generic.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package chacha20 implements the ChaCha20 and XChaCha20 encryption algorithms\n// as specified in RFC 8439 and draft-irtf-cfrg-xchacha-01.\npackage chacha20\n\nimport (\n\t\"crypto/cipher\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"math/bits\"\n\n\t\"golang.org/x/crypto/internal/alias\"\n)\n\nconst (\n\t// KeySize is the size of the key used by this cipher, in bytes.\n\tKeySize = 32\n\n\t// NonceSize is the size of the nonce used with the standard variant of this\n\t// cipher, in bytes.\n\t//\n\t// Note that this is too short to be safely generated at random if the same\n\t// key is reused more than 2³² times.\n\tNonceSize = 12\n\n\t// NonceSizeX is the size of the nonce used with the XChaCha20 variant of\n\t// this cipher, in bytes.\n\tNonceSizeX = 24\n)\n\n// Cipher is a stateful instance of ChaCha20 or XChaCha20 using a particular key\n// and nonce. A *Cipher implements the cipher.Stream interface.\ntype Cipher struct {\n\t// The ChaCha20 state is 16 words: 4 constant, 8 of key, 1 of counter\n\t// (incremented after each block), and 3 of nonce.\n\tkey     [8]uint32\n\tcounter uint32\n\tnonce   [3]uint32\n\n\t// The last len bytes of buf are leftover key stream bytes from the previous\n\t// XORKeyStream invocation. The size of buf depends on how many blocks are\n\t// computed at a time by xorKeyStreamBlocks.\n\tbuf [bufSize]byte\n\tlen int\n\n\t// overflow is set when the counter overflowed, no more blocks can be\n\t// generated, and the next XORKeyStream call should panic.\n\toverflow bool\n\n\t// The counter-independent results of the first round are cached after they\n\t// are computed the first time.\n\tprecompDone      bool\n\tp1, p5, p9, p13  uint32\n\tp2, p6, p10, p14 uint32\n\tp3, p7, p11, p15 uint32\n}\n\nvar _ cipher.Stream = (*Cipher)(nil)\n\n// NewUnauthenticatedCipher creates a new ChaCha20 stream cipher with the given\n// 32 bytes key and a 12 or 24 bytes nonce. If a nonce of 24 bytes is provided,\n// the XChaCha20 construction will be used. It returns an error if key or nonce\n// have any other length.\n//\n// Note that ChaCha20, like all stream ciphers, is not authenticated and allows\n// attackers to silently tamper with the plaintext. For this reason, it is more\n// appropriate as a building block than as a standalone encryption mechanism.\n// Instead, consider using package golang.org/x/crypto/chacha20poly1305.\nfunc NewUnauthenticatedCipher(key, nonce []byte) (*Cipher, error) {\n\t// This function is split into a wrapper so that the Cipher allocation will\n\t// be inlined, and depending on how the caller uses the return value, won't\n\t// escape to the heap.\n\tc := &Cipher{}\n\treturn newUnauthenticatedCipher(c, key, nonce)\n}\n\nfunc newUnauthenticatedCipher(c *Cipher, key, nonce []byte) (*Cipher, error) {\n\tif len(key) != KeySize {\n\t\treturn nil, errors.New(\"chacha20: wrong key size\")\n\t}\n\tif len(nonce) == NonceSizeX {\n\t\t// XChaCha20 uses the ChaCha20 core to mix 16 bytes of the nonce into a\n\t\t// derived key, allowing it to operate on a nonce of 24 bytes. See\n\t\t// draft-irtf-cfrg-xchacha-01, Section 2.3.\n\t\tkey, _ = HChaCha20(key, nonce[0:16])\n\t\tcNonce := make([]byte, NonceSize)\n\t\tcopy(cNonce[4:12], nonce[16:24])\n\t\tnonce = cNonce\n\t} else if len(nonce) != NonceSize {\n\t\treturn nil, errors.New(\"chacha20: wrong nonce size\")\n\t}\n\n\tkey, nonce = key[:KeySize], nonce[:NonceSize] // bounds check elimination hint\n\tc.key = [8]uint32{\n\t\tbinary.LittleEndian.Uint32(key[0:4]),\n\t\tbinary.LittleEndian.Uint32(key[4:8]),\n\t\tbinary.LittleEndian.Uint32(key[8:12]),\n\t\tbinary.LittleEndian.Uint32(key[12:16]),\n\t\tbinary.LittleEndian.Uint32(key[16:20]),\n\t\tbinary.LittleEndian.Uint32(key[20:24]),\n\t\tbinary.LittleEndian.Uint32(key[24:28]),\n\t\tbinary.LittleEndian.Uint32(key[28:32]),\n\t}\n\tc.nonce = [3]uint32{\n\t\tbinary.LittleEndian.Uint32(nonce[0:4]),\n\t\tbinary.LittleEndian.Uint32(nonce[4:8]),\n\t\tbinary.LittleEndian.Uint32(nonce[8:12]),\n\t}\n\treturn c, nil\n}\n\n// The constant first 4 words of the ChaCha20 state.\nconst (\n\tj0 uint32 = 0x61707865 // expa\n\tj1 uint32 = 0x3320646e // nd 3\n\tj2 uint32 = 0x79622d32 // 2-by\n\tj3 uint32 = 0x6b206574 // te k\n)\n\nconst blockSize = 64\n\n// quarterRound is the core of ChaCha20. It shuffles the bits of 4 state words.\n// It's executed 4 times for each of the 20 ChaCha20 rounds, operating on all 16\n// words each round, in columnar or diagonal groups of 4 at a time.\nfunc quarterRound(a, b, c, d uint32) (uint32, uint32, uint32, uint32) {\n\ta += b\n\td ^= a\n\td = bits.RotateLeft32(d, 16)\n\tc += d\n\tb ^= c\n\tb = bits.RotateLeft32(b, 12)\n\ta += b\n\td ^= a\n\td = bits.RotateLeft32(d, 8)\n\tc += d\n\tb ^= c\n\tb = bits.RotateLeft32(b, 7)\n\treturn a, b, c, d\n}\n\n// SetCounter sets the Cipher counter. The next invocation of XORKeyStream will\n// behave as if (64 * counter) bytes had been encrypted so far.\n//\n// To prevent accidental counter reuse, SetCounter panics if counter is less\n// than the current value.\n//\n// Note that the execution time of XORKeyStream is not independent of the\n// counter value.\nfunc (s *Cipher) SetCounter(counter uint32) {\n\t// Internally, s may buffer multiple blocks, which complicates this\n\t// implementation slightly. When checking whether the counter has rolled\n\t// back, we must use both s.counter and s.len to determine how many blocks\n\t// we have already output.\n\toutputCounter := s.counter - uint32(s.len)/blockSize\n\tif s.overflow || counter < outputCounter {\n\t\tpanic(\"chacha20: SetCounter attempted to rollback counter\")\n\t}\n\n\t// In the general case, we set the new counter value and reset s.len to 0,\n\t// causing the next call to XORKeyStream to refill the buffer. However, if\n\t// we're advancing within the existing buffer, we can save work by simply\n\t// setting s.len.\n\tif counter < s.counter {\n\t\ts.len = int(s.counter-counter) * blockSize\n\t} else {\n\t\ts.counter = counter\n\t\ts.len = 0\n\t}\n}\n\n// XORKeyStream XORs each byte in the given slice with a byte from the\n// cipher's key stream. Dst and src must overlap entirely or not at all.\n//\n// If len(dst) < len(src), XORKeyStream will panic. It is acceptable\n// to pass a dst bigger than src, and in that case, XORKeyStream will\n// only update dst[:len(src)] and will not touch the rest of dst.\n//\n// Multiple calls to XORKeyStream behave as if the concatenation of\n// the src buffers was passed in a single run. That is, Cipher\n// maintains state and does not reset at each XORKeyStream call.\nfunc (s *Cipher) XORKeyStream(dst, src []byte) {\n\tif len(src) == 0 {\n\t\treturn\n\t}\n\tif len(dst) < len(src) {\n\t\tpanic(\"chacha20: output smaller than input\")\n\t}\n\tdst = dst[:len(src)]\n\tif alias.InexactOverlap(dst, src) {\n\t\tpanic(\"chacha20: invalid buffer overlap\")\n\t}\n\n\t// First, drain any remaining key stream from a previous XORKeyStream.\n\tif s.len != 0 {\n\t\tkeyStream := s.buf[bufSize-s.len:]\n\t\tif len(src) < len(keyStream) {\n\t\t\tkeyStream = keyStream[:len(src)]\n\t\t}\n\t\t_ = src[len(keyStream)-1] // bounds check elimination hint\n\t\tfor i, b := range keyStream {\n\t\t\tdst[i] = src[i] ^ b\n\t\t}\n\t\ts.len -= len(keyStream)\n\t\tdst, src = dst[len(keyStream):], src[len(keyStream):]\n\t}\n\tif len(src) == 0 {\n\t\treturn\n\t}\n\n\t// If we'd need to let the counter overflow and keep generating output,\n\t// panic immediately. If instead we'd only reach the last block, remember\n\t// not to generate any more output after the buffer is drained.\n\tnumBlocks := (uint64(len(src)) + blockSize - 1) / blockSize\n\tif s.overflow || uint64(s.counter)+numBlocks > 1<<32 {\n\t\tpanic(\"chacha20: counter overflow\")\n\t} else if uint64(s.counter)+numBlocks == 1<<32 {\n\t\ts.overflow = true\n\t}\n\n\t// xorKeyStreamBlocks implementations expect input lengths that are a\n\t// multiple of bufSize. Platform-specific ones process multiple blocks at a\n\t// time, so have bufSizes that are a multiple of blockSize.\n\n\tfull := len(src) - len(src)%bufSize\n\tif full > 0 {\n\t\ts.xorKeyStreamBlocks(dst[:full], src[:full])\n\t}\n\tdst, src = dst[full:], src[full:]\n\n\t// If using a multi-block xorKeyStreamBlocks would overflow, use the generic\n\t// one that does one block at a time.\n\tconst blocksPerBuf = bufSize / blockSize\n\tif uint64(s.counter)+blocksPerBuf > 1<<32 {\n\t\ts.buf = [bufSize]byte{}\n\t\tnumBlocks := (len(src) + blockSize - 1) / blockSize\n\t\tbuf := s.buf[bufSize-numBlocks*blockSize:]\n\t\tcopy(buf, src)\n\t\ts.xorKeyStreamBlocksGeneric(buf, buf)\n\t\ts.len = len(buf) - copy(dst, buf)\n\t\treturn\n\t}\n\n\t// If we have a partial (multi-)block, pad it for xorKeyStreamBlocks, and\n\t// keep the leftover keystream for the next XORKeyStream invocation.\n\tif len(src) > 0 {\n\t\ts.buf = [bufSize]byte{}\n\t\tcopy(s.buf[:], src)\n\t\ts.xorKeyStreamBlocks(s.buf[:], s.buf[:])\n\t\ts.len = bufSize - copy(dst, s.buf[:])\n\t}\n}\n\nfunc (s *Cipher) xorKeyStreamBlocksGeneric(dst, src []byte) {\n\tif len(dst) != len(src) || len(dst)%blockSize != 0 {\n\t\tpanic(\"chacha20: internal error: wrong dst and/or src length\")\n\t}\n\n\t// To generate each block of key stream, the initial cipher state\n\t// (represented below) is passed through 20 rounds of shuffling,\n\t// alternatively applying quarterRounds by columns (like 1, 5, 9, 13)\n\t// or by diagonals (like 1, 6, 11, 12).\n\t//\n\t//      0:cccccccc   1:cccccccc   2:cccccccc   3:cccccccc\n\t//      4:kkkkkkkk   5:kkkkkkkk   6:kkkkkkkk   7:kkkkkkkk\n\t//      8:kkkkkkkk   9:kkkkkkkk  10:kkkkkkkk  11:kkkkkkkk\n\t//     12:bbbbbbbb  13:nnnnnnnn  14:nnnnnnnn  15:nnnnnnnn\n\t//\n\t//            c=constant k=key b=blockcount n=nonce\n\tvar (\n\t\tc0, c1, c2, c3   = j0, j1, j2, j3\n\t\tc4, c5, c6, c7   = s.key[0], s.key[1], s.key[2], s.key[3]\n\t\tc8, c9, c10, c11 = s.key[4], s.key[5], s.key[6], s.key[7]\n\t\t_, c13, c14, c15 = s.counter, s.nonce[0], s.nonce[1], s.nonce[2]\n\t)\n\n\t// Three quarters of the first round don't depend on the counter, so we can\n\t// calculate them here, and reuse them for multiple blocks in the loop, and\n\t// for future XORKeyStream invocations.\n\tif !s.precompDone {\n\t\ts.p1, s.p5, s.p9, s.p13 = quarterRound(c1, c5, c9, c13)\n\t\ts.p2, s.p6, s.p10, s.p14 = quarterRound(c2, c6, c10, c14)\n\t\ts.p3, s.p7, s.p11, s.p15 = quarterRound(c3, c7, c11, c15)\n\t\ts.precompDone = true\n\t}\n\n\t// A condition of len(src) > 0 would be sufficient, but this also\n\t// acts as a bounds check elimination hint.\n\tfor len(src) >= 64 && len(dst) >= 64 {\n\t\t// The remainder of the first column round.\n\t\tfcr0, fcr4, fcr8, fcr12 := quarterRound(c0, c4, c8, s.counter)\n\n\t\t// The second diagonal round.\n\t\tx0, x5, x10, x15 := quarterRound(fcr0, s.p5, s.p10, s.p15)\n\t\tx1, x6, x11, x12 := quarterRound(s.p1, s.p6, s.p11, fcr12)\n\t\tx2, x7, x8, x13 := quarterRound(s.p2, s.p7, fcr8, s.p13)\n\t\tx3, x4, x9, x14 := quarterRound(s.p3, fcr4, s.p9, s.p14)\n\n\t\t// The remaining 18 rounds.\n\t\tfor i := 0; i < 9; i++ {\n\t\t\t// Column round.\n\t\t\tx0, x4, x8, x12 = quarterRound(x0, x4, x8, x12)\n\t\t\tx1, x5, x9, x13 = quarterRound(x1, x5, x9, x13)\n\t\t\tx2, x6, x10, x14 = quarterRound(x2, x6, x10, x14)\n\t\t\tx3, x7, x11, x15 = quarterRound(x3, x7, x11, x15)\n\n\t\t\t// Diagonal round.\n\t\t\tx0, x5, x10, x15 = quarterRound(x0, x5, x10, x15)\n\t\t\tx1, x6, x11, x12 = quarterRound(x1, x6, x11, x12)\n\t\t\tx2, x7, x8, x13 = quarterRound(x2, x7, x8, x13)\n\t\t\tx3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)\n\t\t}\n\n\t\t// Add back the initial state to generate the key stream, then\n\t\t// XOR the key stream with the source and write out the result.\n\t\taddXor(dst[0:4], src[0:4], x0, c0)\n\t\taddXor(dst[4:8], src[4:8], x1, c1)\n\t\taddXor(dst[8:12], src[8:12], x2, c2)\n\t\taddXor(dst[12:16], src[12:16], x3, c3)\n\t\taddXor(dst[16:20], src[16:20], x4, c4)\n\t\taddXor(dst[20:24], src[20:24], x5, c5)\n\t\taddXor(dst[24:28], src[24:28], x6, c6)\n\t\taddXor(dst[28:32], src[28:32], x7, c7)\n\t\taddXor(dst[32:36], src[32:36], x8, c8)\n\t\taddXor(dst[36:40], src[36:40], x9, c9)\n\t\taddXor(dst[40:44], src[40:44], x10, c10)\n\t\taddXor(dst[44:48], src[44:48], x11, c11)\n\t\taddXor(dst[48:52], src[48:52], x12, s.counter)\n\t\taddXor(dst[52:56], src[52:56], x13, c13)\n\t\taddXor(dst[56:60], src[56:60], x14, c14)\n\t\taddXor(dst[60:64], src[60:64], x15, c15)\n\n\t\ts.counter += 1\n\n\t\tsrc, dst = src[blockSize:], dst[blockSize:]\n\t}\n}\n\n// HChaCha20 uses the ChaCha20 core to generate a derived key from a 32 bytes\n// key and a 16 bytes nonce. It returns an error if key or nonce have any other\n// length. It is used as part of the XChaCha20 construction.\nfunc HChaCha20(key, nonce []byte) ([]byte, error) {\n\t// This function is split into a wrapper so that the slice allocation will\n\t// be inlined, and depending on how the caller uses the return value, won't\n\t// escape to the heap.\n\tout := make([]byte, 32)\n\treturn hChaCha20(out, key, nonce)\n}\n\nfunc hChaCha20(out, key, nonce []byte) ([]byte, error) {\n\tif len(key) != KeySize {\n\t\treturn nil, errors.New(\"chacha20: wrong HChaCha20 key size\")\n\t}\n\tif len(nonce) != 16 {\n\t\treturn nil, errors.New(\"chacha20: wrong HChaCha20 nonce size\")\n\t}\n\n\tx0, x1, x2, x3 := j0, j1, j2, j3\n\tx4 := binary.LittleEndian.Uint32(key[0:4])\n\tx5 := binary.LittleEndian.Uint32(key[4:8])\n\tx6 := binary.LittleEndian.Uint32(key[8:12])\n\tx7 := binary.LittleEndian.Uint32(key[12:16])\n\tx8 := binary.LittleEndian.Uint32(key[16:20])\n\tx9 := binary.LittleEndian.Uint32(key[20:24])\n\tx10 := binary.LittleEndian.Uint32(key[24:28])\n\tx11 := binary.LittleEndian.Uint32(key[28:32])\n\tx12 := binary.LittleEndian.Uint32(nonce[0:4])\n\tx13 := binary.LittleEndian.Uint32(nonce[4:8])\n\tx14 := binary.LittleEndian.Uint32(nonce[8:12])\n\tx15 := binary.LittleEndian.Uint32(nonce[12:16])\n\n\tfor i := 0; i < 10; i++ {\n\t\t// Diagonal round.\n\t\tx0, x4, x8, x12 = quarterRound(x0, x4, x8, x12)\n\t\tx1, x5, x9, x13 = quarterRound(x1, x5, x9, x13)\n\t\tx2, x6, x10, x14 = quarterRound(x2, x6, x10, x14)\n\t\tx3, x7, x11, x15 = quarterRound(x3, x7, x11, x15)\n\n\t\t// Column round.\n\t\tx0, x5, x10, x15 = quarterRound(x0, x5, x10, x15)\n\t\tx1, x6, x11, x12 = quarterRound(x1, x6, x11, x12)\n\t\tx2, x7, x8, x13 = quarterRound(x2, x7, x8, x13)\n\t\tx3, x4, x9, x14 = quarterRound(x3, x4, x9, x14)\n\t}\n\n\t_ = out[31] // bounds check elimination hint\n\tbinary.LittleEndian.PutUint32(out[0:4], x0)\n\tbinary.LittleEndian.PutUint32(out[4:8], x1)\n\tbinary.LittleEndian.PutUint32(out[8:12], x2)\n\tbinary.LittleEndian.PutUint32(out[12:16], x3)\n\tbinary.LittleEndian.PutUint32(out[16:20], x12)\n\tbinary.LittleEndian.PutUint32(out[20:24], x13)\n\tbinary.LittleEndian.PutUint32(out[24:28], x14)\n\tbinary.LittleEndian.PutUint32(out[28:32], x15)\n\treturn out, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_noasm.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (!arm64 && !s390x && !ppc64 && !ppc64le) || !gc || purego\n\npackage chacha20\n\nconst bufSize = blockSize\n\nfunc (s *Cipher) xorKeyStreamBlocks(dst, src []byte) {\n\ts.xorKeyStreamBlocksGeneric(dst, src)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego && (ppc64 || ppc64le)\n\npackage chacha20\n\nconst bufSize = 256\n\n//go:noescape\nfunc chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32)\n\nfunc (c *Cipher) xorKeyStreamBlocks(dst, src []byte) {\n\tchaCha20_ctr32_vsx(&dst[0], &src[0], len(src), &c.key, &c.counter)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Based on CRYPTOGAMS code with the following comment:\n// # ====================================================================\n// # Written by Andy Polyakov <appro@openssl.org> for the OpenSSL\n// # project. The module is, however, dual licensed under OpenSSL and\n// # CRYPTOGAMS licenses depending on where you obtain it. For further\n// # details see http://www.openssl.org/~appro/cryptogams/.\n// # ====================================================================\n\n// Code for the perl script that generates the ppc64 assembler\n// can be found in the cryptogams repository at the link below. It is based on\n// the original from openssl.\n\n// https://github.com/dot-asm/cryptogams/commit/a60f5b50ed908e91\n\n// The differences in this and the original implementation are\n// due to the calling conventions and initialization of constants.\n\n//go:build gc && !purego && (ppc64 || ppc64le)\n\n#include \"textflag.h\"\n\n#define OUT  R3\n#define INP  R4\n#define LEN  R5\n#define KEY  R6\n#define CNT  R7\n#define TMP  R15\n\n#define CONSTBASE  R16\n#define BLOCKS R17\n\n// for VPERMXOR\n#define MASK  R18\n\nDATA consts<>+0x00(SB)/4, $0x61707865\nDATA consts<>+0x04(SB)/4, $0x3320646e\nDATA consts<>+0x08(SB)/4, $0x79622d32\nDATA consts<>+0x0c(SB)/4, $0x6b206574\nDATA consts<>+0x10(SB)/4, $0x00000001\nDATA consts<>+0x14(SB)/4, $0x00000000\nDATA consts<>+0x18(SB)/4, $0x00000000\nDATA consts<>+0x1c(SB)/4, $0x00000000\nDATA consts<>+0x20(SB)/4, $0x00000004\nDATA consts<>+0x24(SB)/4, $0x00000000\nDATA consts<>+0x28(SB)/4, $0x00000000\nDATA consts<>+0x2c(SB)/4, $0x00000000\nDATA consts<>+0x30(SB)/4, $0x0e0f0c0d\nDATA consts<>+0x34(SB)/4, $0x0a0b0809\nDATA consts<>+0x38(SB)/4, $0x06070405\nDATA consts<>+0x3c(SB)/4, $0x02030001\nDATA consts<>+0x40(SB)/4, $0x0d0e0f0c\nDATA consts<>+0x44(SB)/4, $0x090a0b08\nDATA consts<>+0x48(SB)/4, $0x05060704\nDATA consts<>+0x4c(SB)/4, $0x01020300\nDATA consts<>+0x50(SB)/4, $0x61707865\nDATA consts<>+0x54(SB)/4, $0x61707865\nDATA consts<>+0x58(SB)/4, $0x61707865\nDATA consts<>+0x5c(SB)/4, $0x61707865\nDATA consts<>+0x60(SB)/4, $0x3320646e\nDATA consts<>+0x64(SB)/4, $0x3320646e\nDATA consts<>+0x68(SB)/4, $0x3320646e\nDATA consts<>+0x6c(SB)/4, $0x3320646e\nDATA consts<>+0x70(SB)/4, $0x79622d32\nDATA consts<>+0x74(SB)/4, $0x79622d32\nDATA consts<>+0x78(SB)/4, $0x79622d32\nDATA consts<>+0x7c(SB)/4, $0x79622d32\nDATA consts<>+0x80(SB)/4, $0x6b206574\nDATA consts<>+0x84(SB)/4, $0x6b206574\nDATA consts<>+0x88(SB)/4, $0x6b206574\nDATA consts<>+0x8c(SB)/4, $0x6b206574\nDATA consts<>+0x90(SB)/4, $0x00000000\nDATA consts<>+0x94(SB)/4, $0x00000001\nDATA consts<>+0x98(SB)/4, $0x00000002\nDATA consts<>+0x9c(SB)/4, $0x00000003\nDATA consts<>+0xa0(SB)/4, $0x11223300\nDATA consts<>+0xa4(SB)/4, $0x55667744\nDATA consts<>+0xa8(SB)/4, $0x99aabb88\nDATA consts<>+0xac(SB)/4, $0xddeeffcc\nDATA consts<>+0xb0(SB)/4, $0x22330011\nDATA consts<>+0xb4(SB)/4, $0x66774455\nDATA consts<>+0xb8(SB)/4, $0xaabb8899\nDATA consts<>+0xbc(SB)/4, $0xeeffccdd\nGLOBL consts<>(SB), RODATA, $0xc0\n\n#ifdef GOARCH_ppc64\n#define BE_XXBRW_INIT() \\\n\t\tLVSL (R0)(R0), V24 \\\n\t\tVSPLTISB $3, V25   \\\n\t\tVXOR V24, V25, V24 \\\n\n#define BE_XXBRW(vr) VPERM vr, vr, V24, vr\n#else\n#define BE_XXBRW_INIT()\n#define BE_XXBRW(vr)\n#endif\n\n//func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32)\nTEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40\n\tMOVD out+0(FP), OUT\n\tMOVD inp+8(FP), INP\n\tMOVD len+16(FP), LEN\n\tMOVD key+24(FP), KEY\n\tMOVD counter+32(FP), CNT\n\n\t// Addressing for constants\n\tMOVD $consts<>+0x00(SB), CONSTBASE\n\tMOVD $16, R8\n\tMOVD $32, R9\n\tMOVD $48, R10\n\tMOVD $64, R11\n\tSRD $6, LEN, BLOCKS\n\t// for VPERMXOR\n\tMOVD $consts<>+0xa0(SB), MASK\n\tMOVD $16, R20\n\t// V16\n\tLXVW4X (CONSTBASE)(R0), VS48\n\tADD $80,CONSTBASE\n\n\t// Load key into V17,V18\n\tLXVW4X (KEY)(R0), VS49\n\tLXVW4X (KEY)(R8), VS50\n\n\t// Load CNT, NONCE into V19\n\tLXVW4X (CNT)(R0), VS51\n\n\t// Clear V27\n\tVXOR V27, V27, V27\n\n\tBE_XXBRW_INIT()\n\n\t// V28\n\tLXVW4X (CONSTBASE)(R11), VS60\n\n\t// Load mask constants for VPERMXOR\n\tLXVW4X (MASK)(R0), V20\n\tLXVW4X (MASK)(R20), V21\n\n\t// splat slot from V19 -> V26\n\tVSPLTW $0, V19, V26\n\n\tVSLDOI $4, V19, V27, V19\n\tVSLDOI $12, V27, V19, V19\n\n\tVADDUWM V26, V28, V26\n\n\tMOVD $10, R14\n\tMOVD R14, CTR\n\tPCALIGN $16\nloop_outer_vsx:\n\t// V0, V1, V2, V3\n\tLXVW4X (R0)(CONSTBASE), VS32\n\tLXVW4X (R8)(CONSTBASE), VS33\n\tLXVW4X (R9)(CONSTBASE), VS34\n\tLXVW4X (R10)(CONSTBASE), VS35\n\n\t// splat values from V17, V18 into V4-V11\n\tVSPLTW $0, V17, V4\n\tVSPLTW $1, V17, V5\n\tVSPLTW $2, V17, V6\n\tVSPLTW $3, V17, V7\n\tVSPLTW $0, V18, V8\n\tVSPLTW $1, V18, V9\n\tVSPLTW $2, V18, V10\n\tVSPLTW $3, V18, V11\n\n\t// VOR\n\tVOR V26, V26, V12\n\n\t// splat values from V19 -> V13, V14, V15\n\tVSPLTW $1, V19, V13\n\tVSPLTW $2, V19, V14\n\tVSPLTW $3, V19, V15\n\n\t// splat   const values\n\tVSPLTISW $-16, V27\n\tVSPLTISW $12, V28\n\tVSPLTISW $8, V29\n\tVSPLTISW $7, V30\n\tPCALIGN $16\nloop_vsx:\n\tVADDUWM V0, V4, V0\n\tVADDUWM V1, V5, V1\n\tVADDUWM V2, V6, V2\n\tVADDUWM V3, V7, V3\n\n\tVPERMXOR V12, V0, V21, V12\n\tVPERMXOR V13, V1, V21, V13\n\tVPERMXOR V14, V2, V21, V14\n\tVPERMXOR V15, V3, V21, V15\n\n\tVADDUWM V8, V12, V8\n\tVADDUWM V9, V13, V9\n\tVADDUWM V10, V14, V10\n\tVADDUWM V11, V15, V11\n\n\tVXOR V4, V8, V4\n\tVXOR V5, V9, V5\n\tVXOR V6, V10, V6\n\tVXOR V7, V11, V7\n\n\tVRLW V4, V28, V4\n\tVRLW V5, V28, V5\n\tVRLW V6, V28, V6\n\tVRLW V7, V28, V7\n\n\tVADDUWM V0, V4, V0\n\tVADDUWM V1, V5, V1\n\tVADDUWM V2, V6, V2\n\tVADDUWM V3, V7, V3\n\n\tVPERMXOR V12, V0, V20, V12\n\tVPERMXOR V13, V1, V20, V13\n\tVPERMXOR V14, V2, V20, V14\n\tVPERMXOR V15, V3, V20, V15\n\n\tVADDUWM V8, V12, V8\n\tVADDUWM V9, V13, V9\n\tVADDUWM V10, V14, V10\n\tVADDUWM V11, V15, V11\n\n\tVXOR V4, V8, V4\n\tVXOR V5, V9, V5\n\tVXOR V6, V10, V6\n\tVXOR V7, V11, V7\n\n\tVRLW V4, V30, V4\n\tVRLW V5, V30, V5\n\tVRLW V6, V30, V6\n\tVRLW V7, V30, V7\n\n\tVADDUWM V0, V5, V0\n\tVADDUWM V1, V6, V1\n\tVADDUWM V2, V7, V2\n\tVADDUWM V3, V4, V3\n\n\tVPERMXOR V15, V0, V21, V15\n\tVPERMXOR V12, V1, V21, V12\n\tVPERMXOR V13, V2, V21, V13\n\tVPERMXOR V14, V3, V21, V14\n\n\tVADDUWM V10, V15, V10\n\tVADDUWM V11, V12, V11\n\tVADDUWM V8, V13, V8\n\tVADDUWM V9, V14, V9\n\n\tVXOR V5, V10, V5\n\tVXOR V6, V11, V6\n\tVXOR V7, V8, V7\n\tVXOR V4, V9, V4\n\n\tVRLW V5, V28, V5\n\tVRLW V6, V28, V6\n\tVRLW V7, V28, V7\n\tVRLW V4, V28, V4\n\n\tVADDUWM V0, V5, V0\n\tVADDUWM V1, V6, V1\n\tVADDUWM V2, V7, V2\n\tVADDUWM V3, V4, V3\n\n\tVPERMXOR V15, V0, V20, V15\n\tVPERMXOR V12, V1, V20, V12\n\tVPERMXOR V13, V2, V20, V13\n\tVPERMXOR V14, V3, V20, V14\n\n\tVADDUWM V10, V15, V10\n\tVADDUWM V11, V12, V11\n\tVADDUWM V8, V13, V8\n\tVADDUWM V9, V14, V9\n\n\tVXOR V5, V10, V5\n\tVXOR V6, V11, V6\n\tVXOR V7, V8, V7\n\tVXOR V4, V9, V4\n\n\tVRLW V5, V30, V5\n\tVRLW V6, V30, V6\n\tVRLW V7, V30, V7\n\tVRLW V4, V30, V4\n\tBDNZ   loop_vsx\n\n\tVADDUWM V12, V26, V12\n\n\tVMRGEW V0, V1, V27\n\tVMRGEW V2, V3, V28\n\n\tVMRGOW V0, V1, V0\n\tVMRGOW V2, V3, V2\n\n\tVMRGEW V4, V5, V29\n\tVMRGEW V6, V7, V30\n\n\tXXPERMDI VS32, VS34, $0, VS33\n\tXXPERMDI VS32, VS34, $3, VS35\n\tXXPERMDI VS59, VS60, $0, VS32\n\tXXPERMDI VS59, VS60, $3, VS34\n\n\tVMRGOW V4, V5, V4\n\tVMRGOW V6, V7, V6\n\n\tVMRGEW V8, V9, V27\n\tVMRGEW V10, V11, V28\n\n\tXXPERMDI VS36, VS38, $0, VS37\n\tXXPERMDI VS36, VS38, $3, VS39\n\tXXPERMDI VS61, VS62, $0, VS36\n\tXXPERMDI VS61, VS62, $3, VS38\n\n\tVMRGOW V8, V9, V8\n\tVMRGOW V10, V11, V10\n\n\tVMRGEW V12, V13, V29\n\tVMRGEW V14, V15, V30\n\n\tXXPERMDI VS40, VS42, $0, VS41\n\tXXPERMDI VS40, VS42, $3, VS43\n\tXXPERMDI VS59, VS60, $0, VS40\n\tXXPERMDI VS59, VS60, $3, VS42\n\n\tVMRGOW V12, V13, V12\n\tVMRGOW V14, V15, V14\n\n\tVSPLTISW $4, V27\n\tVADDUWM V26, V27, V26\n\n\tXXPERMDI VS44, VS46, $0, VS45\n\tXXPERMDI VS44, VS46, $3, VS47\n\tXXPERMDI VS61, VS62, $0, VS44\n\tXXPERMDI VS61, VS62, $3, VS46\n\n\tVADDUWM V0, V16, V0\n\tVADDUWM V4, V17, V4\n\tVADDUWM V8, V18, V8\n\tVADDUWM V12, V19, V12\n\n\tBE_XXBRW(V0)\n\tBE_XXBRW(V4)\n\tBE_XXBRW(V8)\n\tBE_XXBRW(V12)\n\n\tCMPU LEN, $64\n\tBLT tail_vsx\n\n\t// Bottom of loop\n\tLXVW4X (INP)(R0), VS59\n\tLXVW4X (INP)(R8), VS60\n\tLXVW4X (INP)(R9), VS61\n\tLXVW4X (INP)(R10), VS62\n\n\tVXOR V27, V0, V27\n\tVXOR V28, V4, V28\n\tVXOR V29, V8, V29\n\tVXOR V30, V12, V30\n\n\tSTXVW4X VS59, (OUT)(R0)\n\tSTXVW4X VS60, (OUT)(R8)\n\tADD     $64, INP\n\tSTXVW4X VS61, (OUT)(R9)\n\tADD     $-64, LEN\n\tSTXVW4X VS62, (OUT)(R10)\n\tADD     $64, OUT\n\tBEQ     done_vsx\n\n\tVADDUWM V1, V16, V0\n\tVADDUWM V5, V17, V4\n\tVADDUWM V9, V18, V8\n\tVADDUWM V13, V19, V12\n\n\tBE_XXBRW(V0)\n\tBE_XXBRW(V4)\n\tBE_XXBRW(V8)\n\tBE_XXBRW(V12)\n\n\tCMPU  LEN, $64\n\tBLT   tail_vsx\n\n\tLXVW4X (INP)(R0), VS59\n\tLXVW4X (INP)(R8), VS60\n\tLXVW4X (INP)(R9), VS61\n\tLXVW4X (INP)(R10), VS62\n\n\tVXOR V27, V0, V27\n\tVXOR V28, V4, V28\n\tVXOR V29, V8, V29\n\tVXOR V30, V12, V30\n\n\tSTXVW4X VS59, (OUT)(R0)\n\tSTXVW4X VS60, (OUT)(R8)\n\tADD     $64, INP\n\tSTXVW4X VS61, (OUT)(R9)\n\tADD     $-64, LEN\n\tSTXVW4X VS62, (OUT)(V10)\n\tADD     $64, OUT\n\tBEQ     done_vsx\n\n\tVADDUWM V2, V16, V0\n\tVADDUWM V6, V17, V4\n\tVADDUWM V10, V18, V8\n\tVADDUWM V14, V19, V12\n\n\tBE_XXBRW(V0)\n\tBE_XXBRW(V4)\n\tBE_XXBRW(V8)\n\tBE_XXBRW(V12)\n\n\tCMPU LEN, $64\n\tBLT  tail_vsx\n\n\tLXVW4X (INP)(R0), VS59\n\tLXVW4X (INP)(R8), VS60\n\tLXVW4X (INP)(R9), VS61\n\tLXVW4X (INP)(R10), VS62\n\n\tVXOR V27, V0, V27\n\tVXOR V28, V4, V28\n\tVXOR V29, V8, V29\n\tVXOR V30, V12, V30\n\n\tSTXVW4X VS59, (OUT)(R0)\n\tSTXVW4X VS60, (OUT)(R8)\n\tADD     $64, INP\n\tSTXVW4X VS61, (OUT)(R9)\n\tADD     $-64, LEN\n\tSTXVW4X VS62, (OUT)(R10)\n\tADD     $64, OUT\n\tBEQ     done_vsx\n\n\tVADDUWM V3, V16, V0\n\tVADDUWM V7, V17, V4\n\tVADDUWM V11, V18, V8\n\tVADDUWM V15, V19, V12\n\n\tBE_XXBRW(V0)\n\tBE_XXBRW(V4)\n\tBE_XXBRW(V8)\n\tBE_XXBRW(V12)\n\n\tCMPU  LEN, $64\n\tBLT   tail_vsx\n\n\tLXVW4X (INP)(R0), VS59\n\tLXVW4X (INP)(R8), VS60\n\tLXVW4X (INP)(R9), VS61\n\tLXVW4X (INP)(R10), VS62\n\n\tVXOR V27, V0, V27\n\tVXOR V28, V4, V28\n\tVXOR V29, V8, V29\n\tVXOR V30, V12, V30\n\n\tSTXVW4X VS59, (OUT)(R0)\n\tSTXVW4X VS60, (OUT)(R8)\n\tADD     $64, INP\n\tSTXVW4X VS61, (OUT)(R9)\n\tADD     $-64, LEN\n\tSTXVW4X VS62, (OUT)(R10)\n\tADD     $64, OUT\n\n\tMOVD $10, R14\n\tMOVD R14, CTR\n\tBNE  loop_outer_vsx\n\ndone_vsx:\n\t// Increment counter by number of 64 byte blocks\n\tMOVWZ (CNT), R14\n\tADD  BLOCKS, R14\n\tMOVWZ R14, (CNT)\n\tRET\n\ntail_vsx:\n\tADD  $32, R1, R11\n\tMOVD LEN, CTR\n\n\t// Save values on stack to copy from\n\tSTXVW4X VS32, (R11)(R0)\n\tSTXVW4X VS36, (R11)(R8)\n\tSTXVW4X VS40, (R11)(R9)\n\tSTXVW4X VS44, (R11)(R10)\n\tADD $-1, R11, R12\n\tADD $-1, INP\n\tADD $-1, OUT\n\tPCALIGN $16\nlooptail_vsx:\n\t// Copying the result to OUT\n\t// in bytes.\n\tMOVBZU 1(R12), KEY\n\tMOVBZU 1(INP), TMP\n\tXOR    KEY, TMP, KEY\n\tMOVBU  KEY, 1(OUT)\n\tBDNZ   looptail_vsx\n\n\t// Clear the stack values\n\tSTXVW4X VS48, (R11)(R0)\n\tSTXVW4X VS48, (R11)(R8)\n\tSTXVW4X VS48, (R11)(R9)\n\tSTXVW4X VS48, (R11)(R10)\n\tBR      done_vsx\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_s390x.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego\n\npackage chacha20\n\nimport \"golang.org/x/sys/cpu\"\n\nvar haveAsm = cpu.S390X.HasVX\n\nconst bufSize = 256\n\n// xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only\n// be called when the vector facility is available. Implementation in asm_s390x.s.\n//\n//go:noescape\nfunc xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)\n\nfunc (c *Cipher) xorKeyStreamBlocks(dst, src []byte) {\n\tif cpu.S390X.HasVX {\n\t\txorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter)\n\t} else {\n\t\tc.xorKeyStreamBlocksGeneric(dst, src)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/chacha_s390x.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego\n\n#include \"go_asm.h\"\n#include \"textflag.h\"\n\n// This is an implementation of the ChaCha20 encryption algorithm as\n// specified in RFC 7539. It uses vector instructions to compute\n// 4 keystream blocks in parallel (256 bytes) which are then XORed\n// with the bytes in the input slice.\n\nGLOBL ·constants<>(SB), RODATA|NOPTR, $32\n// BSWAP: swap bytes in each 4-byte element\nDATA ·constants<>+0x00(SB)/4, $0x03020100\nDATA ·constants<>+0x04(SB)/4, $0x07060504\nDATA ·constants<>+0x08(SB)/4, $0x0b0a0908\nDATA ·constants<>+0x0c(SB)/4, $0x0f0e0d0c\n// J0: [j0, j1, j2, j3]\nDATA ·constants<>+0x10(SB)/4, $0x61707865\nDATA ·constants<>+0x14(SB)/4, $0x3320646e\nDATA ·constants<>+0x18(SB)/4, $0x79622d32\nDATA ·constants<>+0x1c(SB)/4, $0x6b206574\n\n#define BSWAP V5\n#define J0    V6\n#define KEY0  V7\n#define KEY1  V8\n#define NONCE V9\n#define CTR   V10\n#define M0    V11\n#define M1    V12\n#define M2    V13\n#define M3    V14\n#define INC   V15\n#define X0    V16\n#define X1    V17\n#define X2    V18\n#define X3    V19\n#define X4    V20\n#define X5    V21\n#define X6    V22\n#define X7    V23\n#define X8    V24\n#define X9    V25\n#define X10   V26\n#define X11   V27\n#define X12   V28\n#define X13   V29\n#define X14   V30\n#define X15   V31\n\n#define NUM_ROUNDS 20\n\n#define ROUND4(a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, c3, d0, d1, d2, d3) \\\n\tVAF    a1, a0, a0  \\\n\tVAF    b1, b0, b0  \\\n\tVAF    c1, c0, c0  \\\n\tVAF    d1, d0, d0  \\\n\tVX     a0, a2, a2  \\\n\tVX     b0, b2, b2  \\\n\tVX     c0, c2, c2  \\\n\tVX     d0, d2, d2  \\\n\tVERLLF $16, a2, a2 \\\n\tVERLLF $16, b2, b2 \\\n\tVERLLF $16, c2, c2 \\\n\tVERLLF $16, d2, d2 \\\n\tVAF    a2, a3, a3  \\\n\tVAF    b2, b3, b3  \\\n\tVAF    c2, c3, c3  \\\n\tVAF    d2, d3, d3  \\\n\tVX     a3, a1, a1  \\\n\tVX     b3, b1, b1  \\\n\tVX     c3, c1, c1  \\\n\tVX     d3, d1, d1  \\\n\tVERLLF $12, a1, a1 \\\n\tVERLLF $12, b1, b1 \\\n\tVERLLF $12, c1, c1 \\\n\tVERLLF $12, d1, d1 \\\n\tVAF    a1, a0, a0  \\\n\tVAF    b1, b0, b0  \\\n\tVAF    c1, c0, c0  \\\n\tVAF    d1, d0, d0  \\\n\tVX     a0, a2, a2  \\\n\tVX     b0, b2, b2  \\\n\tVX     c0, c2, c2  \\\n\tVX     d0, d2, d2  \\\n\tVERLLF $8, a2, a2  \\\n\tVERLLF $8, b2, b2  \\\n\tVERLLF $8, c2, c2  \\\n\tVERLLF $8, d2, d2  \\\n\tVAF    a2, a3, a3  \\\n\tVAF    b2, b3, b3  \\\n\tVAF    c2, c3, c3  \\\n\tVAF    d2, d3, d3  \\\n\tVX     a3, a1, a1  \\\n\tVX     b3, b1, b1  \\\n\tVX     c3, c1, c1  \\\n\tVX     d3, d1, d1  \\\n\tVERLLF $7, a1, a1  \\\n\tVERLLF $7, b1, b1  \\\n\tVERLLF $7, c1, c1  \\\n\tVERLLF $7, d1, d1\n\n#define PERMUTE(mask, v0, v1, v2, v3) \\\n\tVPERM v0, v0, mask, v0 \\\n\tVPERM v1, v1, mask, v1 \\\n\tVPERM v2, v2, mask, v2 \\\n\tVPERM v3, v3, mask, v3\n\n#define ADDV(x, v0, v1, v2, v3) \\\n\tVAF x, v0, v0 \\\n\tVAF x, v1, v1 \\\n\tVAF x, v2, v2 \\\n\tVAF x, v3, v3\n\n#define XORV(off, dst, src, v0, v1, v2, v3) \\\n\tVLM  off(src), M0, M3          \\\n\tPERMUTE(BSWAP, v0, v1, v2, v3) \\\n\tVX   v0, M0, M0                \\\n\tVX   v1, M1, M1                \\\n\tVX   v2, M2, M2                \\\n\tVX   v3, M3, M3                \\\n\tVSTM M0, M3, off(dst)\n\n#define SHUFFLE(a, b, c, d, t, u, v, w) \\\n\tVMRHF a, c, t \\ // t = {a[0], c[0], a[1], c[1]}\n\tVMRHF b, d, u \\ // u = {b[0], d[0], b[1], d[1]}\n\tVMRLF a, c, v \\ // v = {a[2], c[2], a[3], c[3]}\n\tVMRLF b, d, w \\ // w = {b[2], d[2], b[3], d[3]}\n\tVMRHF t, u, a \\ // a = {a[0], b[0], c[0], d[0]}\n\tVMRLF t, u, b \\ // b = {a[1], b[1], c[1], d[1]}\n\tVMRHF v, w, c \\ // c = {a[2], b[2], c[2], d[2]}\n\tVMRLF v, w, d // d = {a[3], b[3], c[3], d[3]}\n\n// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32)\nTEXT ·xorKeyStreamVX(SB), NOSPLIT, $0\n\tMOVD $·constants<>(SB), R1\n\tMOVD dst+0(FP), R2         // R2=&dst[0]\n\tLMG  src+24(FP), R3, R4    // R3=&src[0] R4=len(src)\n\tMOVD key+48(FP), R5        // R5=key\n\tMOVD nonce+56(FP), R6      // R6=nonce\n\tMOVD counter+64(FP), R7    // R7=counter\n\n\t// load BSWAP and J0\n\tVLM (R1), BSWAP, J0\n\n\t// setup\n\tMOVD  $95, R0\n\tVLM   (R5), KEY0, KEY1\n\tVLL   R0, (R6), NONCE\n\tVZERO M0\n\tVLEIB $7, $32, M0\n\tVSRLB M0, NONCE, NONCE\n\n\t// initialize counter values\n\tVLREPF (R7), CTR\n\tVZERO  INC\n\tVLEIF  $1, $1, INC\n\tVLEIF  $2, $2, INC\n\tVLEIF  $3, $3, INC\n\tVAF    INC, CTR, CTR\n\tVREPIF $4, INC\n\nchacha:\n\tVREPF $0, J0, X0\n\tVREPF $1, J0, X1\n\tVREPF $2, J0, X2\n\tVREPF $3, J0, X3\n\tVREPF $0, KEY0, X4\n\tVREPF $1, KEY0, X5\n\tVREPF $2, KEY0, X6\n\tVREPF $3, KEY0, X7\n\tVREPF $0, KEY1, X8\n\tVREPF $1, KEY1, X9\n\tVREPF $2, KEY1, X10\n\tVREPF $3, KEY1, X11\n\tVLR   CTR, X12\n\tVREPF $1, NONCE, X13\n\tVREPF $2, NONCE, X14\n\tVREPF $3, NONCE, X15\n\n\tMOVD $(NUM_ROUNDS/2), R1\n\nloop:\n\tROUND4(X0, X4, X12,  X8, X1, X5, X13,  X9, X2, X6, X14, X10, X3, X7, X15, X11)\n\tROUND4(X0, X5, X15, X10, X1, X6, X12, X11, X2, X7, X13, X8,  X3, X4, X14, X9)\n\n\tADD $-1, R1\n\tBNE loop\n\n\t// decrement length\n\tADD $-256, R4\n\n\t// rearrange vectors\n\tSHUFFLE(X0, X1, X2, X3, M0, M1, M2, M3)\n\tADDV(J0, X0, X1, X2, X3)\n\tSHUFFLE(X4, X5, X6, X7, M0, M1, M2, M3)\n\tADDV(KEY0, X4, X5, X6, X7)\n\tSHUFFLE(X8, X9, X10, X11, M0, M1, M2, M3)\n\tADDV(KEY1, X8, X9, X10, X11)\n\tVAF CTR, X12, X12\n\tSHUFFLE(X12, X13, X14, X15, M0, M1, M2, M3)\n\tADDV(NONCE, X12, X13, X14, X15)\n\n\t// increment counters\n\tVAF INC, CTR, CTR\n\n\t// xor keystream with plaintext\n\tXORV(0*64, R2, R3, X0, X4,  X8, X12)\n\tXORV(1*64, R2, R3, X1, X5,  X9, X13)\n\tXORV(2*64, R2, R3, X2, X6, X10, X14)\n\tXORV(3*64, R2, R3, X3, X7, X11, X15)\n\n\t// increment pointers\n\tMOVD $256(R2), R2\n\tMOVD $256(R3), R3\n\n\tCMPBNE  R4, $0, chacha\n\n\tVSTEF $0, CTR, (R7)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/chacha20/xor.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found src the LICENSE file.\n\npackage chacha20\n\nimport \"runtime\"\n\n// Platforms that have fast unaligned 32-bit little endian accesses.\nconst unaligned = runtime.GOARCH == \"386\" ||\n\truntime.GOARCH == \"amd64\" ||\n\truntime.GOARCH == \"arm64\" ||\n\truntime.GOARCH == \"ppc64le\" ||\n\truntime.GOARCH == \"s390x\"\n\n// addXor reads a little endian uint32 from src, XORs it with (a + b) and\n// places the result in little endian byte order in dst.\nfunc addXor(dst, src []byte, a, b uint32) {\n\t_, _ = src[3], dst[3] // bounds check elimination hint\n\tif unaligned {\n\t\t// The compiler should optimize this code into\n\t\t// 32-bit unaligned little endian loads and stores.\n\t\t// TODO: delete once the compiler does a reliably\n\t\t// good job with the generic code below.\n\t\t// See issue #25111 for more details.\n\t\tv := uint32(src[0])\n\t\tv |= uint32(src[1]) << 8\n\t\tv |= uint32(src[2]) << 16\n\t\tv |= uint32(src[3]) << 24\n\t\tv ^= a + b\n\t\tdst[0] = byte(v)\n\t\tdst[1] = byte(v >> 8)\n\t\tdst[2] = byte(v >> 16)\n\t\tdst[3] = byte(v >> 24)\n\t} else {\n\t\ta += b\n\t\tdst[0] = src[0] ^ byte(a)\n\t\tdst[1] = src[1] ^ byte(a>>8)\n\t\tdst[2] = src[2] ^ byte(a>>16)\n\t\tdst[3] = src[3] ^ byte(a>>24)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/curve25519/curve25519.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package curve25519 provides an implementation of the X25519 function, which\n// performs scalar multiplication on the elliptic curve known as Curve25519.\n// See RFC 7748.\n//\n// This package is a wrapper for the X25519 implementation\n// in the crypto/ecdh package.\npackage curve25519\n\nimport \"crypto/ecdh\"\n\n// ScalarMult sets dst to the product scalar * point.\n//\n// Deprecated: when provided a low-order point, ScalarMult will set dst to all\n// zeroes, irrespective of the scalar. Instead, use the X25519 function, which\n// will return an error.\nfunc ScalarMult(dst, scalar, point *[32]byte) {\n\tif _, err := x25519(dst, scalar[:], point[:]); err != nil {\n\t\t// The only error condition for x25519 when the inputs are 32 bytes long\n\t\t// is if the output would have been the all-zero value.\n\t\tfor i := range dst {\n\t\t\tdst[i] = 0\n\t\t}\n\t}\n}\n\n// ScalarBaseMult sets dst to the product scalar * base where base is the\n// standard generator.\n//\n// It is recommended to use the X25519 function with Basepoint instead, as\n// copying into fixed size arrays can lead to unexpected bugs.\nfunc ScalarBaseMult(dst, scalar *[32]byte) {\n\tcurve := ecdh.X25519()\n\tpriv, err := curve.NewPrivateKey(scalar[:])\n\tif err != nil {\n\t\tpanic(\"curve25519: internal error: scalarBaseMult was not 32 bytes\")\n\t}\n\tcopy(dst[:], priv.PublicKey().Bytes())\n}\n\nconst (\n\t// ScalarSize is the size of the scalar input to X25519.\n\tScalarSize = 32\n\t// PointSize is the size of the point input to X25519.\n\tPointSize = 32\n)\n\n// Basepoint is the canonical Curve25519 generator.\nvar Basepoint []byte\n\nvar basePoint = [32]byte{9}\n\nfunc init() { Basepoint = basePoint[:] }\n\n// X25519 returns the result of the scalar multiplication (scalar * point),\n// according to RFC 7748, Section 5. scalar, point and the return value are\n// slices of 32 bytes.\n//\n// scalar can be generated at random, for example with crypto/rand. point should\n// be either Basepoint or the output of another X25519 call.\n//\n// If point is Basepoint (but not if it's a different slice with the same\n// contents) a precomputed implementation might be used for performance.\nfunc X25519(scalar, point []byte) ([]byte, error) {\n\t// Outline the body of function, to let the allocation be inlined in the\n\t// caller, and possibly avoid escaping to the heap.\n\tvar dst [32]byte\n\treturn x25519(&dst, scalar, point)\n}\n\nfunc x25519(dst *[32]byte, scalar, point []byte) ([]byte, error) {\n\tcurve := ecdh.X25519()\n\tpub, err := curve.NewPublicKey(point)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpriv, err := curve.NewPrivateKey(scalar)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout, err := priv.ECDH(pub)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcopy(dst[:], out)\n\treturn dst[:], nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/alias/alias.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !purego\n\n// Package alias implements memory aliasing tests.\npackage alias\n\nimport \"unsafe\"\n\n// AnyOverlap reports whether x and y share memory at any (not necessarily\n// corresponding) index. The memory beyond the slice length is ignored.\nfunc AnyOverlap(x, y []byte) bool {\n\treturn len(x) > 0 && len(y) > 0 &&\n\t\tuintptr(unsafe.Pointer(&x[0])) <= uintptr(unsafe.Pointer(&y[len(y)-1])) &&\n\t\tuintptr(unsafe.Pointer(&y[0])) <= uintptr(unsafe.Pointer(&x[len(x)-1]))\n}\n\n// InexactOverlap reports whether x and y share memory at any non-corresponding\n// index. The memory beyond the slice length is ignored. Note that x and y can\n// have different lengths and still not have any inexact overlap.\n//\n// InexactOverlap can be used to implement the requirements of the crypto/cipher\n// AEAD, Block, BlockMode and Stream interfaces.\nfunc InexactOverlap(x, y []byte) bool {\n\tif len(x) == 0 || len(y) == 0 || &x[0] == &y[0] {\n\t\treturn false\n\t}\n\treturn AnyOverlap(x, y)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/alias/alias_purego.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build purego\n\n// Package alias implements memory aliasing tests.\npackage alias\n\n// This is the Google App Engine standard variant based on reflect\n// because the unsafe package and cgo are disallowed.\n\nimport \"reflect\"\n\n// AnyOverlap reports whether x and y share memory at any (not necessarily\n// corresponding) index. The memory beyond the slice length is ignored.\nfunc AnyOverlap(x, y []byte) bool {\n\treturn len(x) > 0 && len(y) > 0 &&\n\t\treflect.ValueOf(&x[0]).Pointer() <= reflect.ValueOf(&y[len(y)-1]).Pointer() &&\n\t\treflect.ValueOf(&y[0]).Pointer() <= reflect.ValueOf(&x[len(x)-1]).Pointer()\n}\n\n// InexactOverlap reports whether x and y share memory at any non-corresponding\n// index. The memory beyond the slice length is ignored. Note that x and y can\n// have different lengths and still not have any inexact overlap.\n//\n// InexactOverlap can be used to implement the requirements of the crypto/cipher\n// AEAD, Block, BlockMode and Stream interfaces.\nfunc InexactOverlap(x, y []byte) bool {\n\tif len(x) == 0 || len(y) == 0 || &x[0] == &y[0] {\n\t\treturn false\n\t}\n\treturn AnyOverlap(x, y)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (!amd64 && !loong64 && !ppc64le && !ppc64 && !s390x) || !gc || purego\n\npackage poly1305\n\ntype mac struct{ macGeneric }\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/poly1305.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package poly1305 implements Poly1305 one-time message authentication code as\n// specified in https://cr.yp.to/mac/poly1305-20050329.pdf.\n//\n// Poly1305 is a fast, one-time authentication function. It is infeasible for an\n// attacker to generate an authenticator for a message without the key. However, a\n// key must only be used for a single message. Authenticating two different\n// messages with the same key allows an attacker to forge authenticators for other\n// messages with the same key.\n//\n// Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was\n// used with a fixed key in order to generate one-time keys from an nonce.\n// However, in this package AES isn't used and the one-time key is specified\n// directly.\npackage poly1305\n\nimport \"crypto/subtle\"\n\n// TagSize is the size, in bytes, of a poly1305 authenticator.\nconst TagSize = 16\n\n// Sum generates an authenticator for msg using a one-time key and puts the\n// 16-byte result into out. Authenticating two different messages with the same\n// key allows an attacker to forge messages at will.\nfunc Sum(out *[16]byte, m []byte, key *[32]byte) {\n\th := New(key)\n\th.Write(m)\n\th.Sum(out[:0])\n}\n\n// Verify returns true if mac is a valid authenticator for m with the given key.\nfunc Verify(mac *[16]byte, m []byte, key *[32]byte) bool {\n\tvar tmp [16]byte\n\tSum(&tmp, m, key)\n\treturn subtle.ConstantTimeCompare(tmp[:], mac[:]) == 1\n}\n\n// New returns a new MAC computing an authentication\n// tag of all data written to it with the given key.\n// This allows writing the message progressively instead\n// of passing it as a single slice. Common users should use\n// the Sum function instead.\n//\n// The key must be unique for each message, as authenticating\n// two different messages with the same key allows an attacker\n// to forge messages at will.\nfunc New(key *[32]byte) *MAC {\n\tm := &MAC{}\n\tinitialize(key, &m.macState)\n\treturn m\n}\n\n// MAC is an io.Writer computing an authentication tag\n// of the data written to it.\n//\n// MAC cannot be used like common hash.Hash implementations,\n// because using a poly1305 key twice breaks its security.\n// Therefore writing data to a running MAC after calling\n// Sum or Verify causes it to panic.\ntype MAC struct {\n\tmac // platform-dependent implementation\n\n\tfinalized bool\n}\n\n// Size returns the number of bytes Sum will return.\nfunc (h *MAC) Size() int { return TagSize }\n\n// Write adds more data to the running message authentication code.\n// It never returns an error.\n//\n// It must not be called after the first call of Sum or Verify.\nfunc (h *MAC) Write(p []byte) (n int, err error) {\n\tif h.finalized {\n\t\tpanic(\"poly1305: write to MAC after Sum or Verify\")\n\t}\n\treturn h.mac.Write(p)\n}\n\n// Sum computes the authenticator of all data written to the\n// message authentication code.\nfunc (h *MAC) Sum(b []byte) []byte {\n\tvar mac [TagSize]byte\n\th.mac.Sum(&mac)\n\th.finalized = true\n\treturn append(b, mac[:]...)\n}\n\n// Verify returns whether the authenticator of all data written to\n// the message authentication code matches the expected value.\nfunc (h *MAC) Verify(expected []byte) bool {\n\tvar mac [TagSize]byte\n\th.mac.Sum(&mac)\n\th.finalized = true\n\treturn subtle.ConstantTimeCompare(expected, mac[:]) == 1\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s",
    "content": "// Code generated by command: go run sum_amd64_asm.go -out ../sum_amd64.s -pkg poly1305. DO NOT EDIT.\n\n//go:build gc && !purego\n\n// func update(state *macState, msg []byte)\nTEXT ·update(SB), $0-32\n\tMOVQ state+0(FP), DI\n\tMOVQ msg_base+8(FP), SI\n\tMOVQ msg_len+16(FP), R15\n\tMOVQ (DI), R8\n\tMOVQ 8(DI), R9\n\tMOVQ 16(DI), R10\n\tMOVQ 24(DI), R11\n\tMOVQ 32(DI), R12\n\tCMPQ R15, $0x10\n\tJB   bytes_between_0_and_15\n\nloop:\n\tADDQ (SI), R8\n\tADCQ 8(SI), R9\n\tADCQ $0x01, R10\n\tLEAQ 16(SI), SI\n\nmultiply:\n\tMOVQ  R11, AX\n\tMULQ  R8\n\tMOVQ  AX, BX\n\tMOVQ  DX, CX\n\tMOVQ  R11, AX\n\tMULQ  R9\n\tADDQ  AX, CX\n\tADCQ  $0x00, DX\n\tMOVQ  R11, R13\n\tIMULQ R10, R13\n\tADDQ  DX, R13\n\tMOVQ  R12, AX\n\tMULQ  R8\n\tADDQ  AX, CX\n\tADCQ  $0x00, DX\n\tMOVQ  DX, R8\n\tMOVQ  R12, R14\n\tIMULQ R10, R14\n\tMOVQ  R12, AX\n\tMULQ  R9\n\tADDQ  AX, R13\n\tADCQ  DX, R14\n\tADDQ  R8, R13\n\tADCQ  $0x00, R14\n\tMOVQ  BX, R8\n\tMOVQ  CX, R9\n\tMOVQ  R13, R10\n\tANDQ  $0x03, R10\n\tMOVQ  R13, BX\n\tANDQ  $-4, BX\n\tADDQ  BX, R8\n\tADCQ  R14, R9\n\tADCQ  $0x00, R10\n\tSHRQ  $0x02, R14, R13\n\tSHRQ  $0x02, R14\n\tADDQ  R13, R8\n\tADCQ  R14, R9\n\tADCQ  $0x00, R10\n\tSUBQ  $0x10, R15\n\tCMPQ  R15, $0x10\n\tJAE   loop\n\nbytes_between_0_and_15:\n\tTESTQ R15, R15\n\tJZ    done\n\tMOVQ  $0x00000001, BX\n\tXORQ  CX, CX\n\tXORQ  R13, R13\n\tADDQ  R15, SI\n\nflush_buffer:\n\tSHLQ $0x08, BX, CX\n\tSHLQ $0x08, BX\n\tMOVB -1(SI), R13\n\tXORQ R13, BX\n\tDECQ SI\n\tDECQ R15\n\tJNZ  flush_buffer\n\tADDQ BX, R8\n\tADCQ CX, R9\n\tADCQ $0x00, R10\n\tMOVQ $0x00000010, R15\n\tJMP  multiply\n\ndone:\n\tMOVQ R8, (DI)\n\tMOVQ R9, 8(DI)\n\tMOVQ R10, 16(DI)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego && (amd64 || loong64 || ppc64 || ppc64le)\n\npackage poly1305\n\n//go:noescape\nfunc update(state *macState, msg []byte)\n\n// mac is a wrapper for macGeneric that redirects calls that would have gone to\n// updateGeneric to update.\n//\n// Its Write and Sum methods are otherwise identical to the macGeneric ones, but\n// using function pointers would carry a major performance cost.\ntype mac struct{ macGeneric }\n\nfunc (h *mac) Write(p []byte) (int, error) {\n\tnn := len(p)\n\tif h.offset > 0 {\n\t\tn := copy(h.buffer[h.offset:], p)\n\t\tif h.offset+n < TagSize {\n\t\t\th.offset += n\n\t\t\treturn nn, nil\n\t\t}\n\t\tp = p[n:]\n\t\th.offset = 0\n\t\tupdate(&h.macState, h.buffer[:])\n\t}\n\tif n := len(p) - (len(p) % TagSize); n > 0 {\n\t\tupdate(&h.macState, p[:n])\n\t\tp = p[n:]\n\t}\n\tif len(p) > 0 {\n\t\th.offset += copy(h.buffer[h.offset:], p)\n\t}\n\treturn nn, nil\n}\n\nfunc (h *mac) Sum(out *[16]byte) {\n\tstate := h.macState\n\tif h.offset > 0 {\n\t\tupdate(&state, h.buffer[:h.offset])\n\t}\n\tfinalize(out, &state.h, &state.s)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// This file provides the generic implementation of Sum and MAC. Other files\n// might provide optimized assembly implementations of some of this code.\n\npackage poly1305\n\nimport (\n\t\"encoding/binary\"\n\t\"math/bits\"\n)\n\n// Poly1305 [RFC 7539] is a relatively simple algorithm: the authentication tag\n// for a 64 bytes message is approximately\n//\n//     s + m[0:16] * r⁴ + m[16:32] * r³ + m[32:48] * r² + m[48:64] * r  mod  2¹³⁰ - 5\n//\n// for some secret r and s. It can be computed sequentially like\n//\n//     for len(msg) > 0:\n//         h += read(msg, 16)\n//         h *= r\n//         h %= 2¹³⁰ - 5\n//     return h + s\n//\n// All the complexity is about doing performant constant-time math on numbers\n// larger than any available numeric type.\n\nfunc sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) {\n\th := newMACGeneric(key)\n\th.Write(msg)\n\th.Sum(out)\n}\n\nfunc newMACGeneric(key *[32]byte) macGeneric {\n\tm := macGeneric{}\n\tinitialize(key, &m.macState)\n\treturn m\n}\n\n// macState holds numbers in saturated 64-bit little-endian limbs. That is,\n// the value of [x0, x1, x2] is x[0] + x[1] * 2⁶⁴ + x[2] * 2¹²⁸.\ntype macState struct {\n\t// h is the main accumulator. It is to be interpreted modulo 2¹³⁰ - 5, but\n\t// can grow larger during and after rounds. It must, however, remain below\n\t// 2 * (2¹³⁰ - 5).\n\th [3]uint64\n\t// r and s are the private key components.\n\tr [2]uint64\n\ts [2]uint64\n}\n\ntype macGeneric struct {\n\tmacState\n\n\tbuffer [TagSize]byte\n\toffset int\n}\n\n// Write splits the incoming message into TagSize chunks, and passes them to\n// update. It buffers incomplete chunks.\nfunc (h *macGeneric) Write(p []byte) (int, error) {\n\tnn := len(p)\n\tif h.offset > 0 {\n\t\tn := copy(h.buffer[h.offset:], p)\n\t\tif h.offset+n < TagSize {\n\t\t\th.offset += n\n\t\t\treturn nn, nil\n\t\t}\n\t\tp = p[n:]\n\t\th.offset = 0\n\t\tupdateGeneric(&h.macState, h.buffer[:])\n\t}\n\tif n := len(p) - (len(p) % TagSize); n > 0 {\n\t\tupdateGeneric(&h.macState, p[:n])\n\t\tp = p[n:]\n\t}\n\tif len(p) > 0 {\n\t\th.offset += copy(h.buffer[h.offset:], p)\n\t}\n\treturn nn, nil\n}\n\n// Sum flushes the last incomplete chunk from the buffer, if any, and generates\n// the MAC output. It does not modify its state, in order to allow for multiple\n// calls to Sum, even if no Write is allowed after Sum.\nfunc (h *macGeneric) Sum(out *[TagSize]byte) {\n\tstate := h.macState\n\tif h.offset > 0 {\n\t\tupdateGeneric(&state, h.buffer[:h.offset])\n\t}\n\tfinalize(out, &state.h, &state.s)\n}\n\n// [rMask0, rMask1] is the specified Poly1305 clamping mask in little-endian. It\n// clears some bits of the secret coefficient to make it possible to implement\n// multiplication more efficiently.\nconst (\n\trMask0 = 0x0FFFFFFC0FFFFFFF\n\trMask1 = 0x0FFFFFFC0FFFFFFC\n)\n\n// initialize loads the 256-bit key into the two 128-bit secret values r and s.\nfunc initialize(key *[32]byte, m *macState) {\n\tm.r[0] = binary.LittleEndian.Uint64(key[0:8]) & rMask0\n\tm.r[1] = binary.LittleEndian.Uint64(key[8:16]) & rMask1\n\tm.s[0] = binary.LittleEndian.Uint64(key[16:24])\n\tm.s[1] = binary.LittleEndian.Uint64(key[24:32])\n}\n\n// uint128 holds a 128-bit number as two 64-bit limbs, for use with the\n// bits.Mul64 and bits.Add64 intrinsics.\ntype uint128 struct {\n\tlo, hi uint64\n}\n\nfunc mul64(a, b uint64) uint128 {\n\thi, lo := bits.Mul64(a, b)\n\treturn uint128{lo, hi}\n}\n\nfunc add128(a, b uint128) uint128 {\n\tlo, c := bits.Add64(a.lo, b.lo, 0)\n\thi, c := bits.Add64(a.hi, b.hi, c)\n\tif c != 0 {\n\t\tpanic(\"poly1305: unexpected overflow\")\n\t}\n\treturn uint128{lo, hi}\n}\n\nfunc shiftRightBy2(a uint128) uint128 {\n\ta.lo = a.lo>>2 | (a.hi&3)<<62\n\ta.hi = a.hi >> 2\n\treturn a\n}\n\n// updateGeneric absorbs msg into the state.h accumulator. For each chunk m of\n// 128 bits of message, it computes\n//\n//\th₊ = (h + m) * r  mod  2¹³⁰ - 5\n//\n// If the msg length is not a multiple of TagSize, it assumes the last\n// incomplete chunk is the final one.\nfunc updateGeneric(state *macState, msg []byte) {\n\th0, h1, h2 := state.h[0], state.h[1], state.h[2]\n\tr0, r1 := state.r[0], state.r[1]\n\n\tfor len(msg) > 0 {\n\t\tvar c uint64\n\n\t\t// For the first step, h + m, we use a chain of bits.Add64 intrinsics.\n\t\t// The resulting value of h might exceed 2¹³⁰ - 5, but will be partially\n\t\t// reduced at the end of the multiplication below.\n\t\t//\n\t\t// The spec requires us to set a bit just above the message size, not to\n\t\t// hide leading zeroes. For full chunks, that's 1 << 128, so we can just\n\t\t// add 1 to the most significant (2¹²⁸) limb, h2.\n\t\tif len(msg) >= TagSize {\n\t\t\th0, c = bits.Add64(h0, binary.LittleEndian.Uint64(msg[0:8]), 0)\n\t\t\th1, c = bits.Add64(h1, binary.LittleEndian.Uint64(msg[8:16]), c)\n\t\t\th2 += c + 1\n\n\t\t\tmsg = msg[TagSize:]\n\t\t} else {\n\t\t\tvar buf [TagSize]byte\n\t\t\tcopy(buf[:], msg)\n\t\t\tbuf[len(msg)] = 1\n\n\t\t\th0, c = bits.Add64(h0, binary.LittleEndian.Uint64(buf[0:8]), 0)\n\t\t\th1, c = bits.Add64(h1, binary.LittleEndian.Uint64(buf[8:16]), c)\n\t\t\th2 += c\n\n\t\t\tmsg = nil\n\t\t}\n\n\t\t// Multiplication of big number limbs is similar to elementary school\n\t\t// columnar multiplication. Instead of digits, there are 64-bit limbs.\n\t\t//\n\t\t// We are multiplying a 3 limbs number, h, by a 2 limbs number, r.\n\t\t//\n\t\t//                        h2    h1    h0  x\n\t\t//                              r1    r0  =\n\t\t//                       ----------------\n\t\t//                      h2r0  h1r0  h0r0     <-- individual 128-bit products\n\t\t//            +   h2r1  h1r1  h0r1\n\t\t//               ------------------------\n\t\t//                 m3    m2    m1    m0      <-- result in 128-bit overlapping limbs\n\t\t//               ------------------------\n\t\t//         m3.hi m2.hi m1.hi m0.hi           <-- carry propagation\n\t\t//     +         m3.lo m2.lo m1.lo m0.lo\n\t\t//        -------------------------------\n\t\t//           t4    t3    t2    t1    t0      <-- final result in 64-bit limbs\n\t\t//\n\t\t// The main difference from pen-and-paper multiplication is that we do\n\t\t// carry propagation in a separate step, as if we wrote two digit sums\n\t\t// at first (the 128-bit limbs), and then carried the tens all at once.\n\n\t\th0r0 := mul64(h0, r0)\n\t\th1r0 := mul64(h1, r0)\n\t\th2r0 := mul64(h2, r0)\n\t\th0r1 := mul64(h0, r1)\n\t\th1r1 := mul64(h1, r1)\n\t\th2r1 := mul64(h2, r1)\n\n\t\t// Since h2 is known to be at most 7 (5 + 1 + 1), and r0 and r1 have their\n\t\t// top 4 bits cleared by rMask{0,1}, we know that their product is not going\n\t\t// to overflow 64 bits, so we can ignore the high part of the products.\n\t\t//\n\t\t// This also means that the product doesn't have a fifth limb (t4).\n\t\tif h2r0.hi != 0 {\n\t\t\tpanic(\"poly1305: unexpected overflow\")\n\t\t}\n\t\tif h2r1.hi != 0 {\n\t\t\tpanic(\"poly1305: unexpected overflow\")\n\t\t}\n\n\t\tm0 := h0r0\n\t\tm1 := add128(h1r0, h0r1) // These two additions don't overflow thanks again\n\t\tm2 := add128(h2r0, h1r1) // to the 4 masked bits at the top of r0 and r1.\n\t\tm3 := h2r1\n\n\t\tt0 := m0.lo\n\t\tt1, c := bits.Add64(m1.lo, m0.hi, 0)\n\t\tt2, c := bits.Add64(m2.lo, m1.hi, c)\n\t\tt3, _ := bits.Add64(m3.lo, m2.hi, c)\n\n\t\t// Now we have the result as 4 64-bit limbs, and we need to reduce it\n\t\t// modulo 2¹³⁰ - 5. The special shape of this Crandall prime lets us do\n\t\t// a cheap partial reduction according to the reduction identity\n\t\t//\n\t\t//     c * 2¹³⁰ + n  =  c * 5 + n  mod  2¹³⁰ - 5\n\t\t//\n\t\t// because 2¹³⁰ = 5 mod 2¹³⁰ - 5. Partial reduction since the result is\n\t\t// likely to be larger than 2¹³⁰ - 5, but still small enough to fit the\n\t\t// assumptions we make about h in the rest of the code.\n\t\t//\n\t\t// See also https://speakerdeck.com/gtank/engineering-prime-numbers?slide=23\n\n\t\t// We split the final result at the 2¹³⁰ mark into h and cc, the carry.\n\t\t// Note that the carry bits are effectively shifted left by 2, in other\n\t\t// words, cc = c * 4 for the c in the reduction identity.\n\t\th0, h1, h2 = t0, t1, t2&maskLow2Bits\n\t\tcc := uint128{t2 & maskNotLow2Bits, t3}\n\n\t\t// To add c * 5 to h, we first add cc = c * 4, and then add (cc >> 2) = c.\n\n\t\th0, c = bits.Add64(h0, cc.lo, 0)\n\t\th1, c = bits.Add64(h1, cc.hi, c)\n\t\th2 += c\n\n\t\tcc = shiftRightBy2(cc)\n\n\t\th0, c = bits.Add64(h0, cc.lo, 0)\n\t\th1, c = bits.Add64(h1, cc.hi, c)\n\t\th2 += c\n\n\t\t// h2 is at most 3 + 1 + 1 = 5, making the whole of h at most\n\t\t//\n\t\t//     5 * 2¹²⁸ + (2¹²⁸ - 1) = 6 * 2¹²⁸ - 1\n\t}\n\n\tstate.h[0], state.h[1], state.h[2] = h0, h1, h2\n}\n\nconst (\n\tmaskLow2Bits    uint64 = 0x0000000000000003\n\tmaskNotLow2Bits uint64 = ^maskLow2Bits\n)\n\n// select64 returns x if v == 1 and y if v == 0, in constant time.\nfunc select64(v, x, y uint64) uint64 { return ^(v-1)&x | (v-1)&y }\n\n// [p0, p1, p2] is 2¹³⁰ - 5 in little endian order.\nconst (\n\tp0 = 0xFFFFFFFFFFFFFFFB\n\tp1 = 0xFFFFFFFFFFFFFFFF\n\tp2 = 0x0000000000000003\n)\n\n// finalize completes the modular reduction of h and computes\n//\n//\tout = h + s  mod  2¹²⁸\nfunc finalize(out *[TagSize]byte, h *[3]uint64, s *[2]uint64) {\n\th0, h1, h2 := h[0], h[1], h[2]\n\n\t// After the partial reduction in updateGeneric, h might be more than\n\t// 2¹³⁰ - 5, but will be less than 2 * (2¹³⁰ - 5). To complete the reduction\n\t// in constant time, we compute t = h - (2¹³⁰ - 5), and select h as the\n\t// result if the subtraction underflows, and t otherwise.\n\n\thMinusP0, b := bits.Sub64(h0, p0, 0)\n\thMinusP1, b := bits.Sub64(h1, p1, b)\n\t_, b = bits.Sub64(h2, p2, b)\n\n\t// h = h if h < p else h - p\n\th0 = select64(b, h0, hMinusP0)\n\th1 = select64(b, h1, hMinusP1)\n\n\t// Finally, we compute the last Poly1305 step\n\t//\n\t//     tag = h + s  mod  2¹²⁸\n\t//\n\t// by just doing a wide addition with the 128 low bits of h and discarding\n\t// the overflow.\n\th0, c := bits.Add64(h0, s[0], 0)\n\th1, _ = bits.Add64(h1, s[1], c)\n\n\tbinary.LittleEndian.PutUint64(out[0:8], h0)\n\tbinary.LittleEndian.PutUint64(out[8:16], h1)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s",
    "content": "// Copyright 2025 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego\n\n// func update(state *macState, msg []byte)\nTEXT ·update(SB), $0-32\n\tMOVV\tstate+0(FP), R4\n\tMOVV\tmsg_base+8(FP), R5\n\tMOVV\tmsg_len+16(FP), R6\n\n\tMOVV\t$0x10, R7\n\n\tMOVV\t(R4), R8\t// h0\n\tMOVV\t8(R4), R9\t// h1\n\tMOVV\t16(R4), R10\t// h2\n\tMOVV\t24(R4), R11\t// r0\n\tMOVV\t32(R4), R12\t// r1\n\n\tBLT\tR6, R7, bytes_between_0_and_15\n\nloop:\n\tMOVV\t(R5), R14\t// msg[0:8]\n\tMOVV\t8(R5), R16\t// msg[8:16]\n\tADDV\tR14, R8, R8\t// h0 (x1 + y1 = z1', if z1' < x1 then z1' overflow)\n\tADDV\tR16, R9, R27\n\tSGTU\tR14, R8, R24\t// h0.carry\n\tSGTU\tR9, R27, R28\n\tADDV\tR27, R24, R9\t// h1\n\tSGTU\tR27, R9, R24\n\tOR\tR24, R28, R24\t// h1.carry\n\tADDV\t$0x01, R24, R24\n\tADDV\tR10, R24, R10\t// h2\n\n\tADDV\t$16, R5, R5\t// msg = msg[16:]\n\nmultiply:\n\tMULV\tR8, R11, R14\t// h0r0.lo\n\tMULHVU\tR8, R11, R15\t// h0r0.hi\n\tMULV\tR9, R11, R13\t// h1r0.lo\n\tMULHVU\tR9, R11, R16\t// h1r0.hi\n\tADDV\tR13, R15, R15\n\tSGTU\tR13, R15, R24\n\tADDV\tR24, R16, R16\n\tMULV\tR10, R11, R25\n\tADDV\tR16, R25, R25\n\tMULV\tR8, R12, R13\t// h0r1.lo\n\tMULHVU\tR8, R12, R16\t// h0r1.hi\n\tADDV\tR13, R15, R15\n\tSGTU\tR13, R15, R24\n\tADDV\tR24, R16, R16\n\tMOVV\tR16, R8\n\tMULV\tR10, R12, R26\t// h2r1\n\tMULV\tR9, R12, R13\t// h1r1.lo\n\tMULHVU\tR9, R12, R16\t// h1r1.hi\n\tADDV\tR13, R25, R25\n\tADDV\tR16, R26, R27\n\tSGTU\tR13, R25, R24\n\tADDV\tR27, R24, R26\n\tADDV\tR8, R25, R25\n\tSGTU\tR8, R25, R24\n\tADDV\tR24, R26, R26\n\tAND\t$3, R25, R10\n\tAND\t$-4, R25, R17\n\tADDV\tR17, R14, R8\n\tADDV\tR26, R15, R27\n\tSGTU\tR17, R8, R24\n\tSGTU\tR26, R27, R28\n\tADDV\tR27, R24, R9\n\tSGTU\tR27, R9, R24\n\tOR\tR24, R28, R24\n\tADDV\tR24, R10, R10\n\tSLLV\t$62, R26, R27\n\tSRLV\t$2, R25, R28\n\tSRLV\t$2, R26, R26\n\tOR\tR27, R28, R25\n\tADDV\tR25, R8, R8\n\tADDV\tR26, R9, R27\n\tSGTU\tR25, R8, R24\n\tSGTU\tR26, R27, R28\n\tADDV\tR27, R24, R9\n\tSGTU\tR27, R9, R24\n\tOR\tR24, R28, R24\n\tADDV\tR24, R10, R10\n\n\tSUBV\t$16, R6, R6\n\tBGE\tR6, R7, loop\n\nbytes_between_0_and_15:\n\tBEQ\tR6, R0, done\n\tMOVV\t$1, R14\n\tXOR\tR15, R15\n\tADDV\tR6, R5, R5\n\nflush_buffer:\n\tMOVBU\t-1(R5), R25\n\tSRLV\t$56, R14, R24\n\tSLLV\t$8, R15, R28\n\tSLLV\t$8, R14, R14\n\tOR\tR24, R28, R15\n\tXOR\tR25, R14, R14\n\tSUBV\t$1, R6, R6\n\tSUBV\t$1, R5, R5\n\tBNE\tR6, R0, flush_buffer\n\n\tADDV\tR14, R8, R8\n\tSGTU\tR14, R8, R24\n\tADDV\tR15, R9, R27\n\tSGTU\tR15, R27, R28\n\tADDV\tR27, R24, R9\n\tSGTU\tR27, R9, R24\n\tOR\tR24, R28, R24\n\tADDV\tR10, R24, R10\n\n\tMOVV\t$16, R6\n\tJMP\tmultiply\n\ndone:\n\tMOVV\tR8, (R4)\n\tMOVV\tR9, 8(R4)\n\tMOVV\tR10, 16(R4)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego && (ppc64 || ppc64le)\n\n#include \"textflag.h\"\n\n// This was ported from the amd64 implementation.\n\n#ifdef GOARCH_ppc64le\n#define LE_MOVD MOVD\n#define LE_MOVWZ MOVWZ\n#define LE_MOVHZ MOVHZ\n#else\n#define LE_MOVD MOVDBR\n#define LE_MOVWZ MOVWBR\n#define LE_MOVHZ MOVHBR\n#endif\n\n#define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \\\n\tLE_MOVD (msg)( R0), t0; \\\n\tLE_MOVD (msg)(R24), t1; \\\n\tMOVD $1, t2;     \\\n\tADDC t0, h0, h0; \\\n\tADDE t1, h1, h1; \\\n\tADDE t2, h2;     \\\n\tADD  $16, msg\n\n#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3, t4, t5) \\\n\tMULLD  r0, h0, t0;  \\\n\tMULHDU r0, h0, t1;  \\\n\tMULLD  r0, h1, t4;  \\\n\tMULHDU r0, h1, t5;  \\\n\tADDC   t4, t1, t1;  \\\n\tMULLD  r0, h2, t2;  \\\n\tMULHDU r1, h0, t4;  \\\n\tMULLD  r1, h0, h0;  \\\n\tADDE   t5, t2, t2;  \\\n\tADDC   h0, t1, t1;  \\\n\tMULLD  h2, r1, t3;  \\\n\tADDZE  t4, h0;      \\\n\tMULHDU r1, h1, t5;  \\\n\tMULLD  r1, h1, t4;  \\\n\tADDC   t4, t2, t2;  \\\n\tADDE   t5, t3, t3;  \\\n\tADDC   h0, t2, t2;  \\\n\tMOVD   $-4, t4;     \\\n\tADDZE  t3;          \\\n\tRLDICL $0, t2, $62, h2; \\\n\tAND    t2, t4, h0;  \\\n\tADDC   t0, h0, h0;  \\\n\tADDE   t3, t1, h1;  \\\n\tSLD    $62, t3, t4; \\\n\tSRD    $2, t2;      \\\n\tADDZE  h2;          \\\n\tOR     t4, t2, t2;  \\\n\tSRD    $2, t3;      \\\n\tADDC   t2, h0, h0;  \\\n\tADDE   t3, h1, h1;  \\\n\tADDZE  h2\n\n// func update(state *[7]uint64, msg []byte)\nTEXT ·update(SB), $0-32\n\tMOVD state+0(FP), R3\n\tMOVD msg_base+8(FP), R4\n\tMOVD msg_len+16(FP), R5\n\n\tMOVD 0(R3), R8   // h0\n\tMOVD 8(R3), R9   // h1\n\tMOVD 16(R3), R10 // h2\n\tMOVD 24(R3), R11 // r0\n\tMOVD 32(R3), R12 // r1\n\n\tMOVD $8, R24\n\n\tCMP R5, $16\n\tBLT bytes_between_0_and_15\n\nloop:\n\tPOLY1305_ADD(R4, R8, R9, R10, R20, R21, R22)\n\n\tPCALIGN $16\nmultiply:\n\tPOLY1305_MUL(R8, R9, R10, R11, R12, R16, R17, R18, R14, R20, R21)\n\tADD $-16, R5\n\tCMP R5, $16\n\tBGE loop\n\nbytes_between_0_and_15:\n\tCMP  R5, $0\n\tBEQ  done\n\tMOVD $0, R16 // h0\n\tMOVD $0, R17 // h1\n\nflush_buffer:\n\tCMP R5, $8\n\tBLE just1\n\n\tMOVD $8, R21\n\tSUB  R21, R5, R21\n\n\t// Greater than 8 -- load the rightmost remaining bytes in msg\n\t// and put into R17 (h1)\n\tLE_MOVD (R4)(R21), R17\n\tMOVD $16, R22\n\n\t// Find the offset to those bytes\n\tSUB R5, R22, R22\n\tSLD $3, R22\n\n\t// Shift to get only the bytes in msg\n\tSRD R22, R17, R17\n\n\t// Put 1 at high end\n\tMOVD $1, R23\n\tSLD  $3, R21\n\tSLD  R21, R23, R23\n\tOR   R23, R17, R17\n\n\t// Remainder is 8\n\tMOVD $8, R5\n\njust1:\n\tCMP R5, $8\n\tBLT less8\n\n\t// Exactly 8\n\tLE_MOVD (R4), R16\n\n\tCMP R17, $0\n\n\t// Check if we've already set R17; if not\n\t// set 1 to indicate end of msg.\n\tBNE  carry\n\tMOVD $1, R17\n\tBR   carry\n\nless8:\n\tMOVD  $0, R16   // h0\n\tMOVD  $0, R22   // shift count\n\tCMP   R5, $4\n\tBLT   less4\n\tLE_MOVWZ (R4), R16\n\tADD   $4, R4\n\tADD   $-4, R5\n\tMOVD  $32, R22\n\nless4:\n\tCMP   R5, $2\n\tBLT   less2\n\tLE_MOVHZ (R4), R21\n\tSLD   R22, R21, R21\n\tOR    R16, R21, R16\n\tADD   $16, R22\n\tADD   $-2, R5\n\tADD   $2, R4\n\nless2:\n\tCMP   R5, $0\n\tBEQ   insert1\n\tMOVBZ (R4), R21\n\tSLD   R22, R21, R21\n\tOR    R16, R21, R16\n\tADD   $8, R22\n\ninsert1:\n\t// Insert 1 at end of msg\n\tMOVD $1, R21\n\tSLD  R22, R21, R21\n\tOR   R16, R21, R16\n\ncarry:\n\t// Add new values to h0, h1, h2\n\tADDC  R16, R8\n\tADDE  R17, R9\n\tADDZE R10, R10\n\tMOVD  $16, R5\n\tADD   R5, R4\n\tBR    multiply\n\ndone:\n\t// Save h0, h1, h2 in state\n\tMOVD R8, 0(R3)\n\tMOVD R9, 8(R3)\n\tMOVD R10, 16(R3)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego\n\npackage poly1305\n\nimport (\n\t\"golang.org/x/sys/cpu\"\n)\n\n// updateVX is an assembly implementation of Poly1305 that uses vector\n// instructions. It must only be called if the vector facility (vx) is\n// available.\n//\n//go:noescape\nfunc updateVX(state *macState, msg []byte)\n\n// mac is a replacement for macGeneric that uses a larger buffer and redirects\n// calls that would have gone to updateGeneric to updateVX if the vector\n// facility is installed.\n//\n// A larger buffer is required for good performance because the vector\n// implementation has a higher fixed cost per call than the generic\n// implementation.\ntype mac struct {\n\tmacState\n\n\tbuffer [16 * TagSize]byte // size must be a multiple of block size (16)\n\toffset int\n}\n\nfunc (h *mac) Write(p []byte) (int, error) {\n\tnn := len(p)\n\tif h.offset > 0 {\n\t\tn := copy(h.buffer[h.offset:], p)\n\t\tif h.offset+n < len(h.buffer) {\n\t\t\th.offset += n\n\t\t\treturn nn, nil\n\t\t}\n\t\tp = p[n:]\n\t\th.offset = 0\n\t\tif cpu.S390X.HasVX {\n\t\t\tupdateVX(&h.macState, h.buffer[:])\n\t\t} else {\n\t\t\tupdateGeneric(&h.macState, h.buffer[:])\n\t\t}\n\t}\n\n\ttail := len(p) % len(h.buffer) // number of bytes to copy into buffer\n\tbody := len(p) - tail          // number of bytes to process now\n\tif body > 0 {\n\t\tif cpu.S390X.HasVX {\n\t\t\tupdateVX(&h.macState, p[:body])\n\t\t} else {\n\t\t\tupdateGeneric(&h.macState, p[:body])\n\t\t}\n\t}\n\th.offset = copy(h.buffer[:], p[body:]) // copy tail bytes - can be 0\n\treturn nn, nil\n}\n\nfunc (h *mac) Sum(out *[TagSize]byte) {\n\tstate := h.macState\n\tremainder := h.buffer[:h.offset]\n\n\t// Use the generic implementation if we have 2 or fewer blocks left\n\t// to sum. The vector implementation has a higher startup time.\n\tif cpu.S390X.HasVX && len(remainder) > 2*TagSize {\n\t\tupdateVX(&state, remainder)\n\t} else if len(remainder) > 0 {\n\t\tupdateGeneric(&state, remainder)\n\t}\n\tfinalize(out, &state.h, &state.s)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc && !purego\n\n#include \"textflag.h\"\n\n// This implementation of Poly1305 uses the vector facility (vx)\n// to process up to 2 blocks (32 bytes) per iteration using an\n// algorithm based on the one described in:\n//\n// NEON crypto, Daniel J. Bernstein & Peter Schwabe\n// https://cryptojedi.org/papers/neoncrypto-20120320.pdf\n//\n// This algorithm uses 5 26-bit limbs to represent a 130-bit\n// value. These limbs are, for the most part, zero extended and\n// placed into 64-bit vector register elements. Each vector\n// register is 128-bits wide and so holds 2 of these elements.\n// Using 26-bit limbs allows us plenty of headroom to accommodate\n// accumulations before and after multiplication without\n// overflowing either 32-bits (before multiplication) or 64-bits\n// (after multiplication).\n//\n// In order to parallelise the operations required to calculate\n// the sum we use two separate accumulators and then sum those\n// in an extra final step. For compatibility with the generic\n// implementation we perform this summation at the end of every\n// updateVX call.\n//\n// To use two accumulators we must multiply the message blocks\n// by r² rather than r. Only the final message block should be\n// multiplied by r.\n//\n// Example:\n//\n// We want to calculate the sum (h) for a 64 byte message (m):\n//\n//   h = m[0:16]r⁴ + m[16:32]r³ + m[32:48]r² + m[48:64]r\n//\n// To do this we split the calculation into the even indices\n// and odd indices of the message. These form our SIMD 'lanes':\n//\n//   h = m[ 0:16]r⁴ + m[32:48]r² +   <- lane 0\n//       m[16:32]r³ + m[48:64]r      <- lane 1\n//\n// To calculate this iteratively we refactor so that both lanes\n// are written in terms of r² and r:\n//\n//   h = (m[ 0:16]r² + m[32:48])r² + <- lane 0\n//       (m[16:32]r² + m[48:64])r    <- lane 1\n//                ^             ^\n//                |             coefficients for second iteration\n//                coefficients for first iteration\n//\n// So in this case we would have two iterations. In the first\n// both lanes are multiplied by r². In the second only the\n// first lane is multiplied by r² and the second lane is\n// instead multiplied by r. This gives use the odd and even\n// powers of r that we need from the original equation.\n//\n// Notation:\n//\n//   h - accumulator\n//   r - key\n//   m - message\n//\n//   [a, b]       - SIMD register holding two 64-bit values\n//   [a, b, c, d] - SIMD register holding four 32-bit values\n//   xᵢ[n]        - limb n of variable x with bit width i\n//\n// Limbs are expressed in little endian order, so for 26-bit\n// limbs x₂₆[4] will be the most significant limb and x₂₆[0]\n// will be the least significant limb.\n\n// masking constants\n#define MOD24 V0 // [0x0000000000ffffff, 0x0000000000ffffff] - mask low 24-bits\n#define MOD26 V1 // [0x0000000003ffffff, 0x0000000003ffffff] - mask low 26-bits\n\n// expansion constants (see EXPAND macro)\n#define EX0 V2\n#define EX1 V3\n#define EX2 V4\n\n// key (r², r or 1 depending on context)\n#define R_0 V5\n#define R_1 V6\n#define R_2 V7\n#define R_3 V8\n#define R_4 V9\n\n// precalculated coefficients (5r², 5r or 0 depending on context)\n#define R5_1 V10\n#define R5_2 V11\n#define R5_3 V12\n#define R5_4 V13\n\n// message block (m)\n#define M_0 V14\n#define M_1 V15\n#define M_2 V16\n#define M_3 V17\n#define M_4 V18\n\n// accumulator (h)\n#define H_0 V19\n#define H_1 V20\n#define H_2 V21\n#define H_3 V22\n#define H_4 V23\n\n// temporary registers (for short-lived values)\n#define T_0 V24\n#define T_1 V25\n#define T_2 V26\n#define T_3 V27\n#define T_4 V28\n\nGLOBL ·constants<>(SB), RODATA, $0x30\n// EX0\nDATA ·constants<>+0x00(SB)/8, $0x0006050403020100\nDATA ·constants<>+0x08(SB)/8, $0x1016151413121110\n// EX1\nDATA ·constants<>+0x10(SB)/8, $0x060c0b0a09080706\nDATA ·constants<>+0x18(SB)/8, $0x161c1b1a19181716\n// EX2\nDATA ·constants<>+0x20(SB)/8, $0x0d0d0d0d0d0f0e0d\nDATA ·constants<>+0x28(SB)/8, $0x1d1d1d1d1d1f1e1d\n\n// MULTIPLY multiplies each lane of f and g, partially reduced\n// modulo 2¹³⁰ - 5. The result, h, consists of partial products\n// in each lane that need to be reduced further to produce the\n// final result.\n//\n//   h₁₃₀ = (f₁₃₀g₁₃₀) % 2¹³⁰ + (5f₁₃₀g₁₃₀) / 2¹³⁰\n//\n// Note that the multiplication by 5 of the high bits is\n// achieved by precalculating the multiplication of four of the\n// g coefficients by 5. These are g51-g54.\n#define MULTIPLY(f0, f1, f2, f3, f4, g0, g1, g2, g3, g4, g51, g52, g53, g54, h0, h1, h2, h3, h4) \\\n\tVMLOF  f0, g0, h0        \\\n\tVMLOF  f0, g3, h3        \\\n\tVMLOF  f0, g1, h1        \\\n\tVMLOF  f0, g4, h4        \\\n\tVMLOF  f0, g2, h2        \\\n\tVMLOF  f1, g54, T_0      \\\n\tVMLOF  f1, g2, T_3       \\\n\tVMLOF  f1, g0, T_1       \\\n\tVMLOF  f1, g3, T_4       \\\n\tVMLOF  f1, g1, T_2       \\\n\tVMALOF f2, g53, h0, h0   \\\n\tVMALOF f2, g1, h3, h3    \\\n\tVMALOF f2, g54, h1, h1   \\\n\tVMALOF f2, g2, h4, h4    \\\n\tVMALOF f2, g0, h2, h2    \\\n\tVMALOF f3, g52, T_0, T_0 \\\n\tVMALOF f3, g0, T_3, T_3  \\\n\tVMALOF f3, g53, T_1, T_1 \\\n\tVMALOF f3, g1, T_4, T_4  \\\n\tVMALOF f3, g54, T_2, T_2 \\\n\tVMALOF f4, g51, h0, h0   \\\n\tVMALOF f4, g54, h3, h3   \\\n\tVMALOF f4, g52, h1, h1   \\\n\tVMALOF f4, g0, h4, h4    \\\n\tVMALOF f4, g53, h2, h2   \\\n\tVAG    T_0, h0, h0       \\\n\tVAG    T_3, h3, h3       \\\n\tVAG    T_1, h1, h1       \\\n\tVAG    T_4, h4, h4       \\\n\tVAG    T_2, h2, h2\n\n// REDUCE performs the following carry operations in four\n// stages, as specified in Bernstein & Schwabe:\n//\n//   1: h₂₆[0]->h₂₆[1] h₂₆[3]->h₂₆[4]\n//   2: h₂₆[1]->h₂₆[2] h₂₆[4]->h₂₆[0]\n//   3: h₂₆[0]->h₂₆[1] h₂₆[2]->h₂₆[3]\n//   4: h₂₆[3]->h₂₆[4]\n//\n// The result is that all of the limbs are limited to 26-bits\n// except for h₂₆[1] and h₂₆[4] which are limited to 27-bits.\n//\n// Note that although each limb is aligned at 26-bit intervals\n// they may contain values that exceed 2²⁶ - 1, hence the need\n// to carry the excess bits in each limb.\n#define REDUCE(h0, h1, h2, h3, h4) \\\n\tVESRLG $26, h0, T_0  \\\n\tVESRLG $26, h3, T_1  \\\n\tVN     MOD26, h0, h0 \\\n\tVN     MOD26, h3, h3 \\\n\tVAG    T_0, h1, h1   \\\n\tVAG    T_1, h4, h4   \\\n\tVESRLG $26, h1, T_2  \\\n\tVESRLG $26, h4, T_3  \\\n\tVN     MOD26, h1, h1 \\\n\tVN     MOD26, h4, h4 \\\n\tVESLG  $2, T_3, T_4  \\\n\tVAG    T_3, T_4, T_4 \\\n\tVAG    T_2, h2, h2   \\\n\tVAG    T_4, h0, h0   \\\n\tVESRLG $26, h2, T_0  \\\n\tVESRLG $26, h0, T_1  \\\n\tVN     MOD26, h2, h2 \\\n\tVN     MOD26, h0, h0 \\\n\tVAG    T_0, h3, h3   \\\n\tVAG    T_1, h1, h1   \\\n\tVESRLG $26, h3, T_2  \\\n\tVN     MOD26, h3, h3 \\\n\tVAG    T_2, h4, h4\n\n// EXPAND splits the 128-bit little-endian values in0 and in1\n// into 26-bit big-endian limbs and places the results into\n// the first and second lane of d₂₆[0:4] respectively.\n//\n// The EX0, EX1 and EX2 constants are arrays of byte indices\n// for permutation. The permutation both reverses the bytes\n// in the input and ensures the bytes are copied into the\n// destination limb ready to be shifted into their final\n// position.\n#define EXPAND(in0, in1, d0, d1, d2, d3, d4) \\\n\tVPERM  in0, in1, EX0, d0 \\\n\tVPERM  in0, in1, EX1, d2 \\\n\tVPERM  in0, in1, EX2, d4 \\\n\tVESRLG $26, d0, d1       \\\n\tVESRLG $30, d2, d3       \\\n\tVESRLG $4, d2, d2        \\\n\tVN     MOD26, d0, d0     \\ // [in0₂₆[0], in1₂₆[0]]\n\tVN     MOD26, d3, d3     \\ // [in0₂₆[3], in1₂₆[3]]\n\tVN     MOD26, d1, d1     \\ // [in0₂₆[1], in1₂₆[1]]\n\tVN     MOD24, d4, d4     \\ // [in0₂₆[4], in1₂₆[4]]\n\tVN     MOD26, d2, d2     // [in0₂₆[2], in1₂₆[2]]\n\n// func updateVX(state *macState, msg []byte)\nTEXT ·updateVX(SB), NOSPLIT, $0\n\tMOVD state+0(FP), R1\n\tLMG  msg+8(FP), R2, R3 // R2=msg_base, R3=msg_len\n\n\t// load EX0, EX1 and EX2\n\tMOVD $·constants<>(SB), R5\n\tVLM  (R5), EX0, EX2\n\n\t// generate masks\n\tVGMG $(64-24), $63, MOD24 // [0x00ffffff, 0x00ffffff]\n\tVGMG $(64-26), $63, MOD26 // [0x03ffffff, 0x03ffffff]\n\n\t// load h (accumulator) and r (key) from state\n\tVZERO T_1               // [0, 0]\n\tVL    0(R1), T_0        // [h₆₄[0], h₆₄[1]]\n\tVLEG  $0, 16(R1), T_1   // [h₆₄[2], 0]\n\tVL    24(R1), T_2       // [r₆₄[0], r₆₄[1]]\n\tVPDI  $0, T_0, T_2, T_3 // [h₆₄[0], r₆₄[0]]\n\tVPDI  $5, T_0, T_2, T_4 // [h₆₄[1], r₆₄[1]]\n\n\t// unpack h and r into 26-bit limbs\n\t// note: h₆₄[2] may have the low 3 bits set, so h₂₆[4] is a 27-bit value\n\tVN     MOD26, T_3, H_0            // [h₂₆[0], r₂₆[0]]\n\tVZERO  H_1                        // [0, 0]\n\tVZERO  H_3                        // [0, 0]\n\tVGMG   $(64-12-14), $(63-12), T_0 // [0x03fff000, 0x03fff000] - 26-bit mask with low 12 bits masked out\n\tVESLG  $24, T_1, T_1              // [h₆₄[2]<<24, 0]\n\tVERIMG $-26&63, T_3, MOD26, H_1   // [h₂₆[1], r₂₆[1]]\n\tVESRLG $+52&63, T_3, H_2          // [h₂₆[2], r₂₆[2]] - low 12 bits only\n\tVERIMG $-14&63, T_4, MOD26, H_3   // [h₂₆[1], r₂₆[1]]\n\tVESRLG $40, T_4, H_4              // [h₂₆[4], r₂₆[4]] - low 24 bits only\n\tVERIMG $+12&63, T_4, T_0, H_2     // [h₂₆[2], r₂₆[2]] - complete\n\tVO     T_1, H_4, H_4              // [h₂₆[4], r₂₆[4]] - complete\n\n\t// replicate r across all 4 vector elements\n\tVREPF $3, H_0, R_0 // [r₂₆[0], r₂₆[0], r₂₆[0], r₂₆[0]]\n\tVREPF $3, H_1, R_1 // [r₂₆[1], r₂₆[1], r₂₆[1], r₂₆[1]]\n\tVREPF $3, H_2, R_2 // [r₂₆[2], r₂₆[2], r₂₆[2], r₂₆[2]]\n\tVREPF $3, H_3, R_3 // [r₂₆[3], r₂₆[3], r₂₆[3], r₂₆[3]]\n\tVREPF $3, H_4, R_4 // [r₂₆[4], r₂₆[4], r₂₆[4], r₂₆[4]]\n\n\t// zero out lane 1 of h\n\tVLEIG $1, $0, H_0 // [h₂₆[0], 0]\n\tVLEIG $1, $0, H_1 // [h₂₆[1], 0]\n\tVLEIG $1, $0, H_2 // [h₂₆[2], 0]\n\tVLEIG $1, $0, H_3 // [h₂₆[3], 0]\n\tVLEIG $1, $0, H_4 // [h₂₆[4], 0]\n\n\t// calculate 5r (ignore least significant limb)\n\tVREPIF $5, T_0\n\tVMLF   T_0, R_1, R5_1 // [5r₂₆[1], 5r₂₆[1], 5r₂₆[1], 5r₂₆[1]]\n\tVMLF   T_0, R_2, R5_2 // [5r₂₆[2], 5r₂₆[2], 5r₂₆[2], 5r₂₆[2]]\n\tVMLF   T_0, R_3, R5_3 // [5r₂₆[3], 5r₂₆[3], 5r₂₆[3], 5r₂₆[3]]\n\tVMLF   T_0, R_4, R5_4 // [5r₂₆[4], 5r₂₆[4], 5r₂₆[4], 5r₂₆[4]]\n\n\t// skip r² calculation if we are only calculating one block\n\tCMPBLE R3, $16, skip\n\n\t// calculate r²\n\tMULTIPLY(R_0, R_1, R_2, R_3, R_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, M_0, M_1, M_2, M_3, M_4)\n\tREDUCE(M_0, M_1, M_2, M_3, M_4)\n\tVGBM   $0x0f0f, T_0\n\tVERIMG $0, M_0, T_0, R_0 // [r₂₆[0], r²₂₆[0], r₂₆[0], r²₂₆[0]]\n\tVERIMG $0, M_1, T_0, R_1 // [r₂₆[1], r²₂₆[1], r₂₆[1], r²₂₆[1]]\n\tVERIMG $0, M_2, T_0, R_2 // [r₂₆[2], r²₂₆[2], r₂₆[2], r²₂₆[2]]\n\tVERIMG $0, M_3, T_0, R_3 // [r₂₆[3], r²₂₆[3], r₂₆[3], r²₂₆[3]]\n\tVERIMG $0, M_4, T_0, R_4 // [r₂₆[4], r²₂₆[4], r₂₆[4], r²₂₆[4]]\n\n\t// calculate 5r² (ignore least significant limb)\n\tVREPIF $5, T_0\n\tVMLF   T_0, R_1, R5_1 // [5r₂₆[1], 5r²₂₆[1], 5r₂₆[1], 5r²₂₆[1]]\n\tVMLF   T_0, R_2, R5_2 // [5r₂₆[2], 5r²₂₆[2], 5r₂₆[2], 5r²₂₆[2]]\n\tVMLF   T_0, R_3, R5_3 // [5r₂₆[3], 5r²₂₆[3], 5r₂₆[3], 5r²₂₆[3]]\n\tVMLF   T_0, R_4, R5_4 // [5r₂₆[4], 5r²₂₆[4], 5r₂₆[4], 5r²₂₆[4]]\n\nloop:\n\tCMPBLE R3, $32, b2 // 2 or fewer blocks remaining, need to change key coefficients\n\n\t// load next 2 blocks from message\n\tVLM (R2), T_0, T_1\n\n\t// update message slice\n\tSUB  $32, R3\n\tMOVD $32(R2), R2\n\n\t// unpack message blocks into 26-bit big-endian limbs\n\tEXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)\n\n\t// add 2¹²⁸ to each message block value\n\tVLEIB $4, $1, M_4\n\tVLEIB $12, $1, M_4\n\nmultiply:\n\t// accumulate the incoming message\n\tVAG H_0, M_0, M_0\n\tVAG H_3, M_3, M_3\n\tVAG H_1, M_1, M_1\n\tVAG H_4, M_4, M_4\n\tVAG H_2, M_2, M_2\n\n\t// multiply the accumulator by the key coefficient\n\tMULTIPLY(M_0, M_1, M_2, M_3, M_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, H_0, H_1, H_2, H_3, H_4)\n\n\t// carry and partially reduce the partial products\n\tREDUCE(H_0, H_1, H_2, H_3, H_4)\n\n\tCMPBNE R3, $0, loop\n\nfinish:\n\t// sum lane 0 and lane 1 and put the result in lane 1\n\tVZERO  T_0\n\tVSUMQG H_0, T_0, H_0\n\tVSUMQG H_3, T_0, H_3\n\tVSUMQG H_1, T_0, H_1\n\tVSUMQG H_4, T_0, H_4\n\tVSUMQG H_2, T_0, H_2\n\n\t// reduce again after summation\n\t// TODO(mundaym): there might be a more efficient way to do this\n\t// now that we only have 1 active lane. For example, we could\n\t// simultaneously pack the values as we reduce them.\n\tREDUCE(H_0, H_1, H_2, H_3, H_4)\n\n\t// carry h[1] through to h[4] so that only h[4] can exceed 2²⁶ - 1\n\t// TODO(mundaym): in testing this final carry was unnecessary.\n\t// Needs a proof before it can be removed though.\n\tVESRLG $26, H_1, T_1\n\tVN     MOD26, H_1, H_1\n\tVAQ    T_1, H_2, H_2\n\tVESRLG $26, H_2, T_2\n\tVN     MOD26, H_2, H_2\n\tVAQ    T_2, H_3, H_3\n\tVESRLG $26, H_3, T_3\n\tVN     MOD26, H_3, H_3\n\tVAQ    T_3, H_4, H_4\n\n\t// h is now < 2(2¹³⁰ - 5)\n\t// Pack each lane in h₂₆[0:4] into h₁₂₈[0:1].\n\tVESLG $26, H_1, H_1\n\tVESLG $26, H_3, H_3\n\tVO    H_0, H_1, H_0\n\tVO    H_2, H_3, H_2\n\tVESLG $4, H_2, H_2\n\tVLEIB $7, $48, H_1\n\tVSLB  H_1, H_2, H_2\n\tVO    H_0, H_2, H_0\n\tVLEIB $7, $104, H_1\n\tVSLB  H_1, H_4, H_3\n\tVO    H_3, H_0, H_0\n\tVLEIB $7, $24, H_1\n\tVSRLB H_1, H_4, H_1\n\n\t// update state\n\tVSTEG $1, H_0, 0(R1)\n\tVSTEG $0, H_0, 8(R1)\n\tVSTEG $1, H_1, 16(R1)\n\tRET\n\nb2:  // 2 or fewer blocks remaining\n\tCMPBLE R3, $16, b1\n\n\t// Load the 2 remaining blocks (17-32 bytes remaining).\n\tMOVD $-17(R3), R0    // index of final byte to load modulo 16\n\tVL   (R2), T_0       // load full 16 byte block\n\tVLL  R0, 16(R2), T_1 // load final (possibly partial) block and pad with zeros to 16 bytes\n\n\t// The Poly1305 algorithm requires that a 1 bit be appended to\n\t// each message block. If the final block is less than 16 bytes\n\t// long then it is easiest to insert the 1 before the message\n\t// block is split into 26-bit limbs. If, on the other hand, the\n\t// final message block is 16 bytes long then we append the 1 bit\n\t// after expansion as normal.\n\tMOVBZ  $1, R0\n\tMOVD   $-16(R3), R3   // index of byte in last block to insert 1 at (could be 16)\n\tCMPBEQ R3, $16, 2(PC) // skip the insertion if the final block is 16 bytes long\n\tVLVGB  R3, R0, T_1    // insert 1 into the byte at index R3\n\n\t// Split both blocks into 26-bit limbs in the appropriate lanes.\n\tEXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)\n\n\t// Append a 1 byte to the end of the second to last block.\n\tVLEIB $4, $1, M_4\n\n\t// Append a 1 byte to the end of the last block only if it is a\n\t// full 16 byte block.\n\tCMPBNE R3, $16, 2(PC)\n\tVLEIB  $12, $1, M_4\n\n\t// Finally, set up the coefficients for the final multiplication.\n\t// We have previously saved r and 5r in the 32-bit even indexes\n\t// of the R_[0-4] and R5_[1-4] coefficient registers.\n\t//\n\t// We want lane 0 to be multiplied by r² so that can be kept the\n\t// same. We want lane 1 to be multiplied by r so we need to move\n\t// the saved r value into the 32-bit odd index in lane 1 by\n\t// rotating the 64-bit lane by 32.\n\tVGBM   $0x00ff, T_0         // [0, 0xffffffffffffffff] - mask lane 1 only\n\tVERIMG $32, R_0, T_0, R_0   // [_,  r²₂₆[0], _,  r₂₆[0]]\n\tVERIMG $32, R_1, T_0, R_1   // [_,  r²₂₆[1], _,  r₂₆[1]]\n\tVERIMG $32, R_2, T_0, R_2   // [_,  r²₂₆[2], _,  r₂₆[2]]\n\tVERIMG $32, R_3, T_0, R_3   // [_,  r²₂₆[3], _,  r₂₆[3]]\n\tVERIMG $32, R_4, T_0, R_4   // [_,  r²₂₆[4], _,  r₂₆[4]]\n\tVERIMG $32, R5_1, T_0, R5_1 // [_, 5r²₂₆[1], _, 5r₂₆[1]]\n\tVERIMG $32, R5_2, T_0, R5_2 // [_, 5r²₂₆[2], _, 5r₂₆[2]]\n\tVERIMG $32, R5_3, T_0, R5_3 // [_, 5r²₂₆[3], _, 5r₂₆[3]]\n\tVERIMG $32, R5_4, T_0, R5_4 // [_, 5r²₂₆[4], _, 5r₂₆[4]]\n\n\tMOVD $0, R3\n\tBR   multiply\n\nskip:\n\tCMPBEQ R3, $0, finish\n\nb1:  // 1 block remaining\n\n\t// Load the final block (1-16 bytes). This will be placed into\n\t// lane 0.\n\tMOVD $-1(R3), R0\n\tVLL  R0, (R2), T_0 // pad to 16 bytes with zeros\n\n\t// The Poly1305 algorithm requires that a 1 bit be appended to\n\t// each message block. If the final block is less than 16 bytes\n\t// long then it is easiest to insert the 1 before the message\n\t// block is split into 26-bit limbs. If, on the other hand, the\n\t// final message block is 16 bytes long then we append the 1 bit\n\t// after expansion as normal.\n\tMOVBZ  $1, R0\n\tCMPBEQ R3, $16, 2(PC)\n\tVLVGB  R3, R0, T_0\n\n\t// Set the message block in lane 1 to the value 0 so that it\n\t// can be accumulated without affecting the final result.\n\tVZERO T_1\n\n\t// Split the final message block into 26-bit limbs in lane 0.\n\t// Lane 1 will be contain 0.\n\tEXPAND(T_0, T_1, M_0, M_1, M_2, M_3, M_4)\n\n\t// Append a 1 byte to the end of the last block only if it is a\n\t// full 16 byte block.\n\tCMPBNE R3, $16, 2(PC)\n\tVLEIB  $4, $1, M_4\n\n\t// We have previously saved r and 5r in the 32-bit even indexes\n\t// of the R_[0-4] and R5_[1-4] coefficient registers.\n\t//\n\t// We want lane 0 to be multiplied by r so we need to move the\n\t// saved r value into the 32-bit odd index in lane 0. We want\n\t// lane 1 to be set to the value 1. This makes multiplication\n\t// a no-op. We do this by setting lane 1 in every register to 0\n\t// and then just setting the 32-bit index 3 in R_0 to 1.\n\tVZERO T_0\n\tMOVD  $0, R0\n\tMOVD  $0x10111213, R12\n\tVLVGP R12, R0, T_1         // [_, 0x10111213, _, 0x00000000]\n\tVPERM T_0, R_0, T_1, R_0   // [_,  r₂₆[0], _, 0]\n\tVPERM T_0, R_1, T_1, R_1   // [_,  r₂₆[1], _, 0]\n\tVPERM T_0, R_2, T_1, R_2   // [_,  r₂₆[2], _, 0]\n\tVPERM T_0, R_3, T_1, R_3   // [_,  r₂₆[3], _, 0]\n\tVPERM T_0, R_4, T_1, R_4   // [_,  r₂₆[4], _, 0]\n\tVPERM T_0, R5_1, T_1, R5_1 // [_, 5r₂₆[1], _, 0]\n\tVPERM T_0, R5_2, T_1, R5_2 // [_, 5r₂₆[2], _, 0]\n\tVPERM T_0, R5_3, T_1, R5_3 // [_, 5r₂₆[3], _, 0]\n\tVPERM T_0, R5_4, T_1, R5_4 // [_, 5r₂₆[4], _, 0]\n\n\t// Set the value of lane 1 to be 1.\n\tVLEIF $3, $1, R_0 // [_,  r₂₆[0], _, 1]\n\n\tMOVD $0, R3\n\tBR   multiply\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/buffer.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"io\"\n\t\"sync\"\n)\n\n// buffer provides a linked list buffer for data exchange\n// between producer and consumer. Theoretically the buffer is\n// of unlimited capacity as it does no allocation of its own.\ntype buffer struct {\n\t// protects concurrent access to head, tail and closed\n\t*sync.Cond\n\n\thead *element // the buffer that will be read first\n\ttail *element // the buffer that will be read last\n\n\tclosed bool\n}\n\n// An element represents a single link in a linked list.\ntype element struct {\n\tbuf  []byte\n\tnext *element\n}\n\n// newBuffer returns an empty buffer that is not closed.\nfunc newBuffer() *buffer {\n\te := new(element)\n\tb := &buffer{\n\t\tCond: newCond(),\n\t\thead: e,\n\t\ttail: e,\n\t}\n\treturn b\n}\n\n// write makes buf available for Read to receive.\n// buf must not be modified after the call to write.\nfunc (b *buffer) write(buf []byte) {\n\tb.Cond.L.Lock()\n\te := &element{buf: buf}\n\tb.tail.next = e\n\tb.tail = e\n\tb.Cond.Signal()\n\tb.Cond.L.Unlock()\n}\n\n// eof closes the buffer. Reads from the buffer once all\n// the data has been consumed will receive io.EOF.\nfunc (b *buffer) eof() {\n\tb.Cond.L.Lock()\n\tb.closed = true\n\tb.Cond.Signal()\n\tb.Cond.L.Unlock()\n}\n\n// Read reads data from the internal buffer in buf.  Reads will block\n// if no data is available, or until the buffer is closed.\nfunc (b *buffer) Read(buf []byte) (n int, err error) {\n\tb.Cond.L.Lock()\n\tdefer b.Cond.L.Unlock()\n\n\tfor len(buf) > 0 {\n\t\t// if there is data in b.head, copy it\n\t\tif len(b.head.buf) > 0 {\n\t\t\tr := copy(buf, b.head.buf)\n\t\t\tbuf, b.head.buf = buf[r:], b.head.buf[r:]\n\t\t\tn += r\n\t\t\tcontinue\n\t\t}\n\t\t// if there is a next buffer, make it the head\n\t\tif len(b.head.buf) == 0 && b.head != b.tail {\n\t\t\tb.head = b.head.next\n\t\t\tcontinue\n\t\t}\n\n\t\t// if at least one byte has been copied, return\n\t\tif n > 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// if nothing was read, and there is nothing outstanding\n\t\t// check to see if the buffer is closed.\n\t\tif b.closed {\n\t\t\terr = io.EOF\n\t\t\tbreak\n\t\t}\n\t\t// out of buffers, wait for producer\n\t\tb.Cond.Wait()\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/certs.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sort\"\n\t\"time\"\n)\n\n// Certificate algorithm names from [PROTOCOL.certkeys]. These values can appear\n// in Certificate.Type, PublicKey.Type, and ClientConfig.HostKeyAlgorithms.\n// Unlike key algorithm names, these are not passed to AlgorithmSigner nor\n// returned by MultiAlgorithmSigner and don't appear in the Signature.Format\n// field.\nconst (\n\tCertAlgoRSAv01        = \"ssh-rsa-cert-v01@openssh.com\"\n\tCertAlgoDSAv01        = \"ssh-dss-cert-v01@openssh.com\"\n\tCertAlgoECDSA256v01   = \"ecdsa-sha2-nistp256-cert-v01@openssh.com\"\n\tCertAlgoECDSA384v01   = \"ecdsa-sha2-nistp384-cert-v01@openssh.com\"\n\tCertAlgoECDSA521v01   = \"ecdsa-sha2-nistp521-cert-v01@openssh.com\"\n\tCertAlgoSKECDSA256v01 = \"sk-ecdsa-sha2-nistp256-cert-v01@openssh.com\"\n\tCertAlgoED25519v01    = \"ssh-ed25519-cert-v01@openssh.com\"\n\tCertAlgoSKED25519v01  = \"sk-ssh-ed25519-cert-v01@openssh.com\"\n\n\t// CertAlgoRSASHA256v01 and CertAlgoRSASHA512v01 can't appear as a\n\t// Certificate.Type (or PublicKey.Type), but only in\n\t// ClientConfig.HostKeyAlgorithms.\n\tCertAlgoRSASHA256v01 = \"rsa-sha2-256-cert-v01@openssh.com\"\n\tCertAlgoRSASHA512v01 = \"rsa-sha2-512-cert-v01@openssh.com\"\n)\n\nconst (\n\t// Deprecated: use CertAlgoRSAv01.\n\tCertSigAlgoRSAv01 = CertAlgoRSAv01\n\t// Deprecated: use CertAlgoRSASHA256v01.\n\tCertSigAlgoRSASHA2256v01 = CertAlgoRSASHA256v01\n\t// Deprecated: use CertAlgoRSASHA512v01.\n\tCertSigAlgoRSASHA2512v01 = CertAlgoRSASHA512v01\n)\n\n// Certificate types distinguish between host and user\n// certificates. The values can be set in the CertType field of\n// Certificate.\nconst (\n\tUserCert = 1\n\tHostCert = 2\n)\n\n// Signature represents a cryptographic signature.\ntype Signature struct {\n\tFormat string\n\tBlob   []byte\n\tRest   []byte `ssh:\"rest\"`\n}\n\n// CertTimeInfinity can be used for OpenSSHCertV01.ValidBefore to indicate that\n// a certificate does not expire.\nconst CertTimeInfinity = 1<<64 - 1\n\n// An Certificate represents an OpenSSH certificate as defined in\n// [PROTOCOL.certkeys]?rev=1.8. The Certificate type implements the\n// PublicKey interface, so it can be unmarshaled using\n// ParsePublicKey.\ntype Certificate struct {\n\tNonce           []byte\n\tKey             PublicKey\n\tSerial          uint64\n\tCertType        uint32\n\tKeyId           string\n\tValidPrincipals []string\n\tValidAfter      uint64\n\tValidBefore     uint64\n\tPermissions\n\tReserved     []byte\n\tSignatureKey PublicKey\n\tSignature    *Signature\n}\n\n// genericCertData holds the key-independent part of the certificate data.\n// Overall, certificates contain an nonce, public key fields and\n// key-independent fields.\ntype genericCertData struct {\n\tSerial          uint64\n\tCertType        uint32\n\tKeyId           string\n\tValidPrincipals []byte\n\tValidAfter      uint64\n\tValidBefore     uint64\n\tCriticalOptions []byte\n\tExtensions      []byte\n\tReserved        []byte\n\tSignatureKey    []byte\n\tSignature       []byte\n}\n\nfunc marshalStringList(namelist []string) []byte {\n\tvar to []byte\n\tfor _, name := range namelist {\n\t\ts := struct{ N string }{name}\n\t\tto = append(to, Marshal(&s)...)\n\t}\n\treturn to\n}\n\ntype optionsTuple struct {\n\tKey   string\n\tValue []byte\n}\n\ntype optionsTupleValue struct {\n\tValue string\n}\n\n// serialize a map of critical options or extensions\n// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,\n// we need two length prefixes for a non-empty string value\nfunc marshalTuples(tups map[string]string) []byte {\n\tkeys := make([]string, 0, len(tups))\n\tfor key := range tups {\n\t\tkeys = append(keys, key)\n\t}\n\tsort.Strings(keys)\n\n\tvar ret []byte\n\tfor _, key := range keys {\n\t\ts := optionsTuple{Key: key}\n\t\tif value := tups[key]; len(value) > 0 {\n\t\t\ts.Value = Marshal(&optionsTupleValue{value})\n\t\t}\n\t\tret = append(ret, Marshal(&s)...)\n\t}\n\treturn ret\n}\n\n// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation,\n// we need two length prefixes for a non-empty option value\nfunc parseTuples(in []byte) (map[string]string, error) {\n\ttups := map[string]string{}\n\tvar lastKey string\n\tvar haveLastKey bool\n\n\tfor len(in) > 0 {\n\t\tvar key, val, extra []byte\n\t\tvar ok bool\n\n\t\tif key, in, ok = parseString(in); !ok {\n\t\t\treturn nil, errShortRead\n\t\t}\n\t\tkeyStr := string(key)\n\t\t// according to [PROTOCOL.certkeys], the names must be in\n\t\t// lexical order.\n\t\tif haveLastKey && keyStr <= lastKey {\n\t\t\treturn nil, fmt.Errorf(\"ssh: certificate options are not in lexical order\")\n\t\t}\n\t\tlastKey, haveLastKey = keyStr, true\n\t\t// the next field is a data field, which if non-empty has a string embedded\n\t\tif val, in, ok = parseString(in); !ok {\n\t\t\treturn nil, errShortRead\n\t\t}\n\t\tif len(val) > 0 {\n\t\t\tval, extra, ok = parseString(val)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errShortRead\n\t\t\t}\n\t\t\tif len(extra) > 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"ssh: unexpected trailing data after certificate option value\")\n\t\t\t}\n\t\t\ttups[keyStr] = string(val)\n\t\t} else {\n\t\t\ttups[keyStr] = \"\"\n\t\t}\n\t}\n\treturn tups, nil\n}\n\nfunc parseCert(in []byte, privAlgo string) (*Certificate, error) {\n\tnonce, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn nil, errShortRead\n\t}\n\n\tkey, rest, err := parsePubKey(rest, privAlgo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar g genericCertData\n\tif err := Unmarshal(rest, &g); err != nil {\n\t\treturn nil, err\n\t}\n\n\tc := &Certificate{\n\t\tNonce:       nonce,\n\t\tKey:         key,\n\t\tSerial:      g.Serial,\n\t\tCertType:    g.CertType,\n\t\tKeyId:       g.KeyId,\n\t\tValidAfter:  g.ValidAfter,\n\t\tValidBefore: g.ValidBefore,\n\t}\n\n\tfor principals := g.ValidPrincipals; len(principals) > 0; {\n\t\tprincipal, rest, ok := parseString(principals)\n\t\tif !ok {\n\t\t\treturn nil, errShortRead\n\t\t}\n\t\tc.ValidPrincipals = append(c.ValidPrincipals, string(principal))\n\t\tprincipals = rest\n\t}\n\n\tc.CriticalOptions, err = parseTuples(g.CriticalOptions)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Extensions, err = parseTuples(g.Extensions)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.Reserved = g.Reserved\n\tk, err := ParsePublicKey(g.SignatureKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.SignatureKey = k\n\tc.Signature, rest, ok = parseSignatureBody(g.Signature)\n\tif !ok || len(rest) > 0 {\n\t\treturn nil, errors.New(\"ssh: signature parse error\")\n\t}\n\n\treturn c, nil\n}\n\ntype openSSHCertSigner struct {\n\tpub    *Certificate\n\tsigner Signer\n}\n\ntype algorithmOpenSSHCertSigner struct {\n\t*openSSHCertSigner\n\talgorithmSigner AlgorithmSigner\n}\n\n// NewCertSigner returns a Signer that signs with the given Certificate, whose\n// private key is held by signer. It returns an error if the public key in cert\n// doesn't match the key used by signer.\nfunc NewCertSigner(cert *Certificate, signer Signer) (Signer, error) {\n\tif !bytes.Equal(cert.Key.Marshal(), signer.PublicKey().Marshal()) {\n\t\treturn nil, errors.New(\"ssh: signer and cert have different public key\")\n\t}\n\n\tswitch s := signer.(type) {\n\tcase MultiAlgorithmSigner:\n\t\treturn &multiAlgorithmSigner{\n\t\t\tAlgorithmSigner: &algorithmOpenSSHCertSigner{\n\t\t\t\t&openSSHCertSigner{cert, signer}, s},\n\t\t\tsupportedAlgorithms: s.Algorithms(),\n\t\t}, nil\n\tcase AlgorithmSigner:\n\t\treturn &algorithmOpenSSHCertSigner{\n\t\t\t&openSSHCertSigner{cert, signer}, s}, nil\n\tdefault:\n\t\treturn &openSSHCertSigner{cert, signer}, nil\n\t}\n}\n\nfunc (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {\n\treturn s.signer.Sign(rand, data)\n}\n\nfunc (s *openSSHCertSigner) PublicKey() PublicKey {\n\treturn s.pub\n}\n\nfunc (s *algorithmOpenSSHCertSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {\n\treturn s.algorithmSigner.SignWithAlgorithm(rand, data, algorithm)\n}\n\nconst sourceAddressCriticalOption = \"source-address\"\n\n// CertChecker does the work of verifying a certificate. Its methods\n// can be plugged into ClientConfig.HostKeyCallback and\n// ServerConfig.PublicKeyCallback. For the CertChecker to work,\n// minimally, the IsAuthority callback should be set.\ntype CertChecker struct {\n\t// SupportedCriticalOptions lists the CriticalOptions that the\n\t// server application layer understands. These are only used\n\t// for user certificates.\n\tSupportedCriticalOptions []string\n\n\t// IsUserAuthority should return true if the key is recognized as an\n\t// authority for the given user certificate. This allows for\n\t// certificates to be signed by other certificates. This must be set\n\t// if this CertChecker will be checking user certificates.\n\tIsUserAuthority func(auth PublicKey) bool\n\n\t// IsHostAuthority should report whether the key is recognized as\n\t// an authority for this host. This allows for certificates to be\n\t// signed by other keys, and for those other keys to only be valid\n\t// signers for particular hostnames. This must be set if this\n\t// CertChecker will be checking host certificates.\n\tIsHostAuthority func(auth PublicKey, address string) bool\n\n\t// Clock is used for verifying time stamps. If nil, time.Now\n\t// is used.\n\tClock func() time.Time\n\n\t// UserKeyFallback is called when CertChecker.Authenticate encounters a\n\t// public key that is not a certificate. It must implement validation\n\t// of user keys or else, if nil, all such keys are rejected.\n\tUserKeyFallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)\n\n\t// HostKeyFallback is called when CertChecker.CheckHostKey encounters a\n\t// public key that is not a certificate. It must implement host key\n\t// validation or else, if nil, all such keys are rejected.\n\tHostKeyFallback HostKeyCallback\n\n\t// IsRevoked is called for each certificate so that revocation checking\n\t// can be implemented. It should return true if the given certificate\n\t// is revoked and false otherwise. If nil, no certificates are\n\t// considered to have been revoked.\n\tIsRevoked func(cert *Certificate) bool\n}\n\n// CheckHostKey checks a host key certificate. This method can be\n// plugged into ClientConfig.HostKeyCallback.\nfunc (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key PublicKey) error {\n\tcert, ok := key.(*Certificate)\n\tif !ok {\n\t\tif c.HostKeyFallback != nil {\n\t\t\treturn c.HostKeyFallback(addr, remote, key)\n\t\t}\n\t\treturn errors.New(\"ssh: non-certificate host key\")\n\t}\n\tif cert.CertType != HostCert {\n\t\treturn fmt.Errorf(\"ssh: certificate presented as a host key has type %d\", cert.CertType)\n\t}\n\tif !c.IsHostAuthority(cert.SignatureKey, addr) {\n\t\treturn fmt.Errorf(\"ssh: no authorities for hostname: %v\", addr)\n\t}\n\n\thostname, _, err := net.SplitHostPort(addr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Pass hostname only as principal for host certificates (consistent with OpenSSH)\n\treturn c.CheckCert(hostname, cert)\n}\n\n// Authenticate checks a user certificate. Authenticate can be used as\n// a value for ServerConfig.PublicKeyCallback.\nfunc (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permissions, error) {\n\tcert, ok := pubKey.(*Certificate)\n\tif !ok {\n\t\tif c.UserKeyFallback != nil {\n\t\t\treturn c.UserKeyFallback(conn, pubKey)\n\t\t}\n\t\treturn nil, errors.New(\"ssh: normal key pairs not accepted\")\n\t}\n\n\tif cert.CertType != UserCert {\n\t\treturn nil, fmt.Errorf(\"ssh: cert has type %d\", cert.CertType)\n\t}\n\tif !c.IsUserAuthority(cert.SignatureKey) {\n\t\treturn nil, fmt.Errorf(\"ssh: certificate signed by unrecognized authority\")\n\t}\n\n\tif err := c.CheckCert(conn.User(), cert); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &cert.Permissions, nil\n}\n\n// CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and\n// the signature of the certificate.\nfunc (c *CertChecker) CheckCert(principal string, cert *Certificate) error {\n\tif c.IsRevoked != nil && c.IsRevoked(cert) {\n\t\treturn fmt.Errorf(\"ssh: certificate serial %d revoked\", cert.Serial)\n\t}\n\n\tfor opt := range cert.CriticalOptions {\n\t\t// sourceAddressCriticalOption will be enforced by\n\t\t// serverAuthenticate\n\t\tif opt == sourceAddressCriticalOption {\n\t\t\tcontinue\n\t\t}\n\n\t\tfound := false\n\t\tfor _, supp := range c.SupportedCriticalOptions {\n\t\t\tif supp == opt {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn fmt.Errorf(\"ssh: unsupported critical option %q in certificate\", opt)\n\t\t}\n\t}\n\n\tif len(cert.ValidPrincipals) > 0 {\n\t\t// By default, certs are valid for all users/hosts.\n\t\tfound := false\n\t\tfor _, p := range cert.ValidPrincipals {\n\t\t\tif p == principal {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn fmt.Errorf(\"ssh: principal %q not in the set of valid principals for given certificate: %q\", principal, cert.ValidPrincipals)\n\t\t}\n\t}\n\n\tclock := c.Clock\n\tif clock == nil {\n\t\tclock = time.Now\n\t}\n\n\tunixNow := clock().Unix()\n\tif after := int64(cert.ValidAfter); after < 0 || unixNow < int64(cert.ValidAfter) {\n\t\treturn fmt.Errorf(\"ssh: cert is not yet valid\")\n\t}\n\tif before := int64(cert.ValidBefore); cert.ValidBefore != uint64(CertTimeInfinity) && (unixNow >= before || before < 0) {\n\t\treturn fmt.Errorf(\"ssh: cert has expired\")\n\t}\n\tif err := cert.SignatureKey.Verify(cert.bytesForSigning(), cert.Signature); err != nil {\n\t\treturn fmt.Errorf(\"ssh: certificate signature does not verify\")\n\t}\n\n\treturn nil\n}\n\n// SignCert signs the certificate with an authority, setting the Nonce,\n// SignatureKey, and Signature fields. If the authority implements the\n// MultiAlgorithmSigner interface the first algorithm in the list is used. This\n// is useful if you want to sign with a specific algorithm.\nfunc (c *Certificate) SignCert(rand io.Reader, authority Signer) error {\n\tc.Nonce = make([]byte, 32)\n\tif _, err := io.ReadFull(rand, c.Nonce); err != nil {\n\t\treturn err\n\t}\n\tc.SignatureKey = authority.PublicKey()\n\n\tif v, ok := authority.(MultiAlgorithmSigner); ok {\n\t\tif len(v.Algorithms()) == 0 {\n\t\t\treturn errors.New(\"the provided authority has no signature algorithm\")\n\t\t}\n\t\t// Use the first algorithm in the list.\n\t\tsig, err := v.SignWithAlgorithm(rand, c.bytesForSigning(), v.Algorithms()[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tc.Signature = sig\n\t\treturn nil\n\t} else if v, ok := authority.(AlgorithmSigner); ok && v.PublicKey().Type() == KeyAlgoRSA {\n\t\t// Default to KeyAlgoRSASHA512 for ssh-rsa signers.\n\t\t// TODO: consider using KeyAlgoRSASHA256 as default.\n\t\tsig, err := v.SignWithAlgorithm(rand, c.bytesForSigning(), KeyAlgoRSASHA512)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tc.Signature = sig\n\t\treturn nil\n\t}\n\n\tsig, err := authority.Sign(rand, c.bytesForSigning())\n\tif err != nil {\n\t\treturn err\n\t}\n\tc.Signature = sig\n\treturn nil\n}\n\n// certKeyAlgoNames is a mapping from known certificate algorithm names to the\n// corresponding public key signature algorithm.\n//\n// This map must be kept in sync with the one in agent/client.go.\nvar certKeyAlgoNames = map[string]string{\n\tCertAlgoRSAv01:        KeyAlgoRSA,\n\tCertAlgoRSASHA256v01:  KeyAlgoRSASHA256,\n\tCertAlgoRSASHA512v01:  KeyAlgoRSASHA512,\n\tCertAlgoDSAv01:        KeyAlgoDSA,\n\tCertAlgoECDSA256v01:   KeyAlgoECDSA256,\n\tCertAlgoECDSA384v01:   KeyAlgoECDSA384,\n\tCertAlgoECDSA521v01:   KeyAlgoECDSA521,\n\tCertAlgoSKECDSA256v01: KeyAlgoSKECDSA256,\n\tCertAlgoED25519v01:    KeyAlgoED25519,\n\tCertAlgoSKED25519v01:  KeyAlgoSKED25519,\n}\n\n// underlyingAlgo returns the signature algorithm associated with algo (which is\n// an advertised or negotiated public key or host key algorithm). These are\n// usually the same, except for certificate algorithms.\nfunc underlyingAlgo(algo string) string {\n\tif a, ok := certKeyAlgoNames[algo]; ok {\n\t\treturn a\n\t}\n\treturn algo\n}\n\n// certificateAlgo returns the certificate algorithms that uses the provided\n// underlying signature algorithm.\nfunc certificateAlgo(algo string) (certAlgo string, ok bool) {\n\tfor certName, algoName := range certKeyAlgoNames {\n\t\tif algoName == algo {\n\t\t\treturn certName, true\n\t\t}\n\t}\n\treturn \"\", false\n}\n\nfunc (cert *Certificate) bytesForSigning() []byte {\n\tc2 := *cert\n\tc2.Signature = nil\n\tout := c2.Marshal()\n\t// Drop trailing signature length.\n\treturn out[:len(out)-4]\n}\n\n// Marshal serializes c into OpenSSH's wire format. It is part of the\n// PublicKey interface.\nfunc (c *Certificate) Marshal() []byte {\n\tgeneric := genericCertData{\n\t\tSerial:          c.Serial,\n\t\tCertType:        c.CertType,\n\t\tKeyId:           c.KeyId,\n\t\tValidPrincipals: marshalStringList(c.ValidPrincipals),\n\t\tValidAfter:      uint64(c.ValidAfter),\n\t\tValidBefore:     uint64(c.ValidBefore),\n\t\tCriticalOptions: marshalTuples(c.CriticalOptions),\n\t\tExtensions:      marshalTuples(c.Extensions),\n\t\tReserved:        c.Reserved,\n\t\tSignatureKey:    c.SignatureKey.Marshal(),\n\t}\n\tif c.Signature != nil {\n\t\tgeneric.Signature = Marshal(c.Signature)\n\t}\n\tgenericBytes := Marshal(&generic)\n\tkeyBytes := c.Key.Marshal()\n\t_, keyBytes, _ = parseString(keyBytes)\n\tprefix := Marshal(&struct {\n\t\tName  string\n\t\tNonce []byte\n\t\tKey   []byte `ssh:\"rest\"`\n\t}{c.Type(), c.Nonce, keyBytes})\n\n\tresult := make([]byte, 0, len(prefix)+len(genericBytes))\n\tresult = append(result, prefix...)\n\tresult = append(result, genericBytes...)\n\treturn result\n}\n\n// Type returns the certificate algorithm name. It is part of the PublicKey interface.\nfunc (c *Certificate) Type() string {\n\tcertName, ok := certificateAlgo(c.Key.Type())\n\tif !ok {\n\t\tpanic(\"unknown certificate type for key type \" + c.Key.Type())\n\t}\n\treturn certName\n}\n\n// Verify verifies a signature against the certificate's public\n// key. It is part of the PublicKey interface.\nfunc (c *Certificate) Verify(data []byte, sig *Signature) error {\n\treturn c.Key.Verify(data, sig)\n}\n\nfunc parseSignatureBody(in []byte) (out *Signature, rest []byte, ok bool) {\n\tformat, in, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\n\tout = &Signature{\n\t\tFormat: string(format),\n\t}\n\n\tif out.Blob, in, ok = parseString(in); !ok {\n\t\treturn\n\t}\n\n\tswitch out.Format {\n\tcase KeyAlgoSKECDSA256, CertAlgoSKECDSA256v01, KeyAlgoSKED25519, CertAlgoSKED25519v01:\n\t\tout.Rest = in\n\t\treturn out, nil, ok\n\t}\n\n\treturn out, in, ok\n}\n\nfunc parseSignature(in []byte) (out *Signature, rest []byte, ok bool) {\n\tsigBytes, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\n\tout, trailing, ok := parseSignatureBody(sigBytes)\n\tif !ok || len(trailing) > 0 {\n\t\treturn nil, nil, false\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/channel.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"sync\"\n)\n\nconst (\n\tminPacketLength = 9\n\t// channelMaxPacket contains the maximum number of bytes that will be\n\t// sent in a single packet. As per RFC 4253, section 6.1, 32k is also\n\t// the minimum.\n\tchannelMaxPacket = 1 << 15\n\t// We follow OpenSSH here.\n\tchannelWindowSize = 64 * channelMaxPacket\n)\n\n// NewChannel represents an incoming request to a channel. It must either be\n// accepted for use by calling Accept, or rejected by calling Reject.\ntype NewChannel interface {\n\t// Accept accepts the channel creation request. It returns the Channel\n\t// and a Go channel containing SSH requests. The Go channel must be\n\t// serviced otherwise the Channel will hang.\n\tAccept() (Channel, <-chan *Request, error)\n\n\t// Reject rejects the channel creation request. After calling\n\t// this, no other methods on the Channel may be called.\n\tReject(reason RejectionReason, message string) error\n\n\t// ChannelType returns the type of the channel, as supplied by the\n\t// client.\n\tChannelType() string\n\n\t// ExtraData returns the arbitrary payload for this channel, as supplied\n\t// by the client. This data is specific to the channel type.\n\tExtraData() []byte\n}\n\n// A Channel is an ordered, reliable, flow-controlled, duplex stream\n// that is multiplexed over an SSH connection.\ntype Channel interface {\n\t// Read reads up to len(data) bytes from the channel.\n\tRead(data []byte) (int, error)\n\n\t// Write writes len(data) bytes to the channel.\n\tWrite(data []byte) (int, error)\n\n\t// Close signals end of channel use. No data may be sent after this\n\t// call.\n\tClose() error\n\n\t// CloseWrite signals the end of sending in-band\n\t// data. Requests may still be sent, and the other side may\n\t// still send data\n\tCloseWrite() error\n\n\t// SendRequest sends a channel request.  If wantReply is true,\n\t// it will wait for a reply and return the result as a\n\t// boolean, otherwise the return value will be false. Channel\n\t// requests are out-of-band messages so they may be sent even\n\t// if the data stream is closed or blocked by flow control.\n\t// If the channel is closed before a reply is returned, io.EOF\n\t// is returned.\n\tSendRequest(name string, wantReply bool, payload []byte) (bool, error)\n\n\t// Stderr returns an io.ReadWriter that writes to this channel\n\t// with the extended data type set to stderr. Stderr may\n\t// safely be read and written from a different goroutine than\n\t// Read and Write respectively.\n\tStderr() io.ReadWriter\n}\n\n// Request is a request sent outside of the normal stream of\n// data. Requests can either be specific to an SSH channel, or they\n// can be global.\ntype Request struct {\n\tType      string\n\tWantReply bool\n\tPayload   []byte\n\n\tch  *channel\n\tmux *mux\n}\n\n// Reply sends a response to a request. It must be called for all requests\n// where WantReply is true and is a no-op otherwise. The payload argument is\n// ignored for replies to channel-specific requests.\nfunc (r *Request) Reply(ok bool, payload []byte) error {\n\tif !r.WantReply {\n\t\treturn nil\n\t}\n\n\tif r.ch == nil {\n\t\treturn r.mux.ackRequest(ok, payload)\n\t}\n\n\treturn r.ch.ackRequest(ok)\n}\n\n// RejectionReason is an enumeration used when rejecting channel creation\n// requests. See RFC 4254, section 5.1.\ntype RejectionReason uint32\n\nconst (\n\tProhibited RejectionReason = iota + 1\n\tConnectionFailed\n\tUnknownChannelType\n\tResourceShortage\n)\n\n// String converts the rejection reason to human readable form.\nfunc (r RejectionReason) String() string {\n\tswitch r {\n\tcase Prohibited:\n\t\treturn \"administratively prohibited\"\n\tcase ConnectionFailed:\n\t\treturn \"connect failed\"\n\tcase UnknownChannelType:\n\t\treturn \"unknown channel type\"\n\tcase ResourceShortage:\n\t\treturn \"resource shortage\"\n\t}\n\treturn fmt.Sprintf(\"unknown reason %d\", int(r))\n}\n\nfunc min(a uint32, b int) uint32 {\n\tif a < uint32(b) {\n\t\treturn a\n\t}\n\treturn uint32(b)\n}\n\ntype channelDirection uint8\n\nconst (\n\tchannelInbound channelDirection = iota\n\tchannelOutbound\n)\n\n// channel is an implementation of the Channel interface that works\n// with the mux class.\ntype channel struct {\n\t// R/O after creation\n\tchanType          string\n\textraData         []byte\n\tlocalId, remoteId uint32\n\n\t// maxIncomingPayload and maxRemotePayload are the maximum\n\t// payload sizes of normal and extended data packets for\n\t// receiving and sending, respectively. The wire packet will\n\t// be 9 or 13 bytes larger (excluding encryption overhead).\n\tmaxIncomingPayload uint32\n\tmaxRemotePayload   uint32\n\n\tmux *mux\n\n\t// decided is set to true if an accept or reject message has been sent\n\t// (for outbound channels) or received (for inbound channels).\n\tdecided bool\n\n\t// direction contains either channelOutbound, for channels created\n\t// locally, or channelInbound, for channels created by the peer.\n\tdirection channelDirection\n\n\t// Pending internal channel messages.\n\tmsg chan interface{}\n\n\t// Since requests have no ID, there can be only one request\n\t// with WantReply=true outstanding.  This lock is held by a\n\t// goroutine that has such an outgoing request pending.\n\tsentRequestMu sync.Mutex\n\n\tincomingRequests chan *Request\n\n\tsentEOF bool\n\n\t// thread-safe data\n\tremoteWin  window\n\tpending    *buffer\n\textPending *buffer\n\n\t// windowMu protects myWindow, the flow-control window, and myConsumed,\n\t// the number of bytes consumed since we last increased myWindow\n\twindowMu   sync.Mutex\n\tmyWindow   uint32\n\tmyConsumed uint32\n\n\t// writeMu serializes calls to mux.conn.writePacket() and\n\t// protects sentClose and packetPool. This mutex must be\n\t// different from windowMu, as writePacket can block if there\n\t// is a key exchange pending.\n\twriteMu   sync.Mutex\n\tsentClose bool\n\n\t// packetPool has a buffer for each extended channel ID to\n\t// save allocations during writes.\n\tpacketPool map[uint32][]byte\n}\n\n// writePacket sends a packet. If the packet is a channel close, it updates\n// sentClose. This method takes the lock c.writeMu.\nfunc (ch *channel) writePacket(packet []byte) error {\n\tch.writeMu.Lock()\n\tif ch.sentClose {\n\t\tch.writeMu.Unlock()\n\t\treturn io.EOF\n\t}\n\tch.sentClose = (packet[0] == msgChannelClose)\n\terr := ch.mux.conn.writePacket(packet)\n\tch.writeMu.Unlock()\n\treturn err\n}\n\nfunc (ch *channel) sendMessage(msg interface{}) error {\n\tif debugMux {\n\t\tlog.Printf(\"send(%d): %#v\", ch.mux.chanList.offset, msg)\n\t}\n\n\tp := Marshal(msg)\n\tbinary.BigEndian.PutUint32(p[1:], ch.remoteId)\n\treturn ch.writePacket(p)\n}\n\n// WriteExtended writes data to a specific extended stream. These streams are\n// used, for example, for stderr.\nfunc (ch *channel) WriteExtended(data []byte, extendedCode uint32) (n int, err error) {\n\tif ch.sentEOF {\n\t\treturn 0, io.EOF\n\t}\n\t// 1 byte message type, 4 bytes remoteId, 4 bytes data length\n\topCode := byte(msgChannelData)\n\theaderLength := uint32(9)\n\tif extendedCode > 0 {\n\t\theaderLength += 4\n\t\topCode = msgChannelExtendedData\n\t}\n\n\tch.writeMu.Lock()\n\tpacket := ch.packetPool[extendedCode]\n\t// We don't remove the buffer from packetPool, so\n\t// WriteExtended calls from different goroutines will be\n\t// flagged as errors by the race detector.\n\tch.writeMu.Unlock()\n\n\tfor len(data) > 0 {\n\t\tspace := min(ch.maxRemotePayload, len(data))\n\t\tif space, err = ch.remoteWin.reserve(space); err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tif want := headerLength + space; uint32(cap(packet)) < want {\n\t\t\tpacket = make([]byte, want)\n\t\t} else {\n\t\t\tpacket = packet[:want]\n\t\t}\n\n\t\ttodo := data[:space]\n\n\t\tpacket[0] = opCode\n\t\tbinary.BigEndian.PutUint32(packet[1:], ch.remoteId)\n\t\tif extendedCode > 0 {\n\t\t\tbinary.BigEndian.PutUint32(packet[5:], uint32(extendedCode))\n\t\t}\n\t\tbinary.BigEndian.PutUint32(packet[headerLength-4:], uint32(len(todo)))\n\t\tcopy(packet[headerLength:], todo)\n\t\tif err = ch.writePacket(packet); err != nil {\n\t\t\treturn n, err\n\t\t}\n\n\t\tn += len(todo)\n\t\tdata = data[len(todo):]\n\t}\n\n\tch.writeMu.Lock()\n\tch.packetPool[extendedCode] = packet\n\tch.writeMu.Unlock()\n\n\treturn n, err\n}\n\nfunc (ch *channel) handleData(packet []byte) error {\n\theaderLen := 9\n\tisExtendedData := packet[0] == msgChannelExtendedData\n\tif isExtendedData {\n\t\theaderLen = 13\n\t}\n\tif len(packet) < headerLen {\n\t\t// malformed data packet\n\t\treturn parseError(packet[0])\n\t}\n\n\tvar extended uint32\n\tif isExtendedData {\n\t\textended = binary.BigEndian.Uint32(packet[5:])\n\t}\n\n\tlength := binary.BigEndian.Uint32(packet[headerLen-4 : headerLen])\n\tif length == 0 {\n\t\treturn nil\n\t}\n\tif length > ch.maxIncomingPayload {\n\t\t// TODO(hanwen): should send Disconnect?\n\t\treturn errors.New(\"ssh: incoming packet exceeds maximum payload size\")\n\t}\n\n\tdata := packet[headerLen:]\n\tif length != uint32(len(data)) {\n\t\treturn errors.New(\"ssh: wrong packet length\")\n\t}\n\n\tch.windowMu.Lock()\n\tif ch.myWindow < length {\n\t\tch.windowMu.Unlock()\n\t\t// TODO(hanwen): should send Disconnect with reason?\n\t\treturn errors.New(\"ssh: remote side wrote too much\")\n\t}\n\tch.myWindow -= length\n\tch.windowMu.Unlock()\n\n\tif extended == 1 {\n\t\tch.extPending.write(data)\n\t} else if extended > 0 {\n\t\t// discard other extended data.\n\t} else {\n\t\tch.pending.write(data)\n\t}\n\treturn nil\n}\n\nfunc (c *channel) adjustWindow(adj uint32) error {\n\tc.windowMu.Lock()\n\t// Since myConsumed and myWindow are managed on our side, and can never\n\t// exceed the initial window setting, we don't worry about overflow.\n\tc.myConsumed += adj\n\tvar sendAdj uint32\n\tif (channelWindowSize-c.myWindow > 3*c.maxIncomingPayload) ||\n\t\t(c.myWindow < channelWindowSize/2) {\n\t\tsendAdj = c.myConsumed\n\t\tc.myConsumed = 0\n\t\tc.myWindow += sendAdj\n\t}\n\tc.windowMu.Unlock()\n\tif sendAdj == 0 {\n\t\treturn nil\n\t}\n\treturn c.sendMessage(windowAdjustMsg{\n\t\tAdditionalBytes: sendAdj,\n\t})\n}\n\nfunc (c *channel) ReadExtended(data []byte, extended uint32) (n int, err error) {\n\tswitch extended {\n\tcase 1:\n\t\tn, err = c.extPending.Read(data)\n\tcase 0:\n\t\tn, err = c.pending.Read(data)\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"ssh: extended code %d unimplemented\", extended)\n\t}\n\n\tif n > 0 {\n\t\terr = c.adjustWindow(uint32(n))\n\t\t// sendWindowAdjust can return io.EOF if the remote\n\t\t// peer has closed the connection, however we want to\n\t\t// defer forwarding io.EOF to the caller of Read until\n\t\t// the buffer has been drained.\n\t\tif n > 0 && err == io.EOF {\n\t\t\terr = nil\n\t\t}\n\t}\n\n\treturn n, err\n}\n\nfunc (c *channel) close() {\n\tc.pending.eof()\n\tc.extPending.eof()\n\tclose(c.msg)\n\tclose(c.incomingRequests)\n\tc.writeMu.Lock()\n\t// This is not necessary for a normal channel teardown, but if\n\t// there was another error, it is.\n\tc.sentClose = true\n\tc.writeMu.Unlock()\n\t// Unblock writers.\n\tc.remoteWin.close()\n}\n\n// responseMessageReceived is called when a success or failure message is\n// received on a channel to check that such a message is reasonable for the\n// given channel.\nfunc (ch *channel) responseMessageReceived() error {\n\tif ch.direction == channelInbound {\n\t\treturn errors.New(\"ssh: channel response message received on inbound channel\")\n\t}\n\tif ch.decided {\n\t\treturn errors.New(\"ssh: duplicate response received for channel\")\n\t}\n\tch.decided = true\n\treturn nil\n}\n\nfunc (ch *channel) handlePacket(packet []byte) error {\n\tswitch packet[0] {\n\tcase msgChannelData, msgChannelExtendedData:\n\t\treturn ch.handleData(packet)\n\tcase msgChannelClose:\n\t\tch.sendMessage(channelCloseMsg{PeersID: ch.remoteId})\n\t\tch.mux.chanList.remove(ch.localId)\n\t\tch.close()\n\t\treturn nil\n\tcase msgChannelEOF:\n\t\t// RFC 4254 is mute on how EOF affects dataExt messages but\n\t\t// it is logical to signal EOF at the same time.\n\t\tch.extPending.eof()\n\t\tch.pending.eof()\n\t\treturn nil\n\t}\n\n\tdecoded, err := decode(packet)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch msg := decoded.(type) {\n\tcase *channelOpenFailureMsg:\n\t\tif err := ch.responseMessageReceived(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tch.mux.chanList.remove(msg.PeersID)\n\t\tch.msg <- msg\n\tcase *channelOpenConfirmMsg:\n\t\tif err := ch.responseMessageReceived(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {\n\t\t\treturn fmt.Errorf(\"ssh: invalid MaxPacketSize %d from peer\", msg.MaxPacketSize)\n\t\t}\n\t\tch.remoteId = msg.MyID\n\t\tch.maxRemotePayload = msg.MaxPacketSize\n\t\tch.remoteWin.add(msg.MyWindow)\n\t\tch.msg <- msg\n\tcase *windowAdjustMsg:\n\t\tif !ch.remoteWin.add(msg.AdditionalBytes) {\n\t\t\treturn fmt.Errorf(\"ssh: invalid window update for %d bytes\", msg.AdditionalBytes)\n\t\t}\n\tcase *channelRequestMsg:\n\t\treq := Request{\n\t\t\tType:      msg.Request,\n\t\t\tWantReply: msg.WantReply,\n\t\t\tPayload:   msg.RequestSpecificData,\n\t\t\tch:        ch,\n\t\t}\n\n\t\tch.incomingRequests <- &req\n\tdefault:\n\t\tch.msg <- msg\n\t}\n\treturn nil\n}\n\nfunc (m *mux) newChannel(chanType string, direction channelDirection, extraData []byte) *channel {\n\tch := &channel{\n\t\tremoteWin:        window{Cond: newCond()},\n\t\tmyWindow:         channelWindowSize,\n\t\tpending:          newBuffer(),\n\t\textPending:       newBuffer(),\n\t\tdirection:        direction,\n\t\tincomingRequests: make(chan *Request, chanSize),\n\t\tmsg:              make(chan interface{}, chanSize),\n\t\tchanType:         chanType,\n\t\textraData:        extraData,\n\t\tmux:              m,\n\t\tpacketPool:       make(map[uint32][]byte),\n\t}\n\tch.localId = m.chanList.add(ch)\n\treturn ch\n}\n\nvar errUndecided = errors.New(\"ssh: must Accept or Reject channel\")\nvar errDecidedAlready = errors.New(\"ssh: can call Accept or Reject only once\")\n\ntype extChannel struct {\n\tcode uint32\n\tch   *channel\n}\n\nfunc (e *extChannel) Write(data []byte) (n int, err error) {\n\treturn e.ch.WriteExtended(data, e.code)\n}\n\nfunc (e *extChannel) Read(data []byte) (n int, err error) {\n\treturn e.ch.ReadExtended(data, e.code)\n}\n\nfunc (ch *channel) Accept() (Channel, <-chan *Request, error) {\n\tif ch.decided {\n\t\treturn nil, nil, errDecidedAlready\n\t}\n\tch.maxIncomingPayload = channelMaxPacket\n\tconfirm := channelOpenConfirmMsg{\n\t\tPeersID:       ch.remoteId,\n\t\tMyID:          ch.localId,\n\t\tMyWindow:      ch.myWindow,\n\t\tMaxPacketSize: ch.maxIncomingPayload,\n\t}\n\tch.decided = true\n\tif err := ch.sendMessage(confirm); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn ch, ch.incomingRequests, nil\n}\n\nfunc (ch *channel) Reject(reason RejectionReason, message string) error {\n\tif ch.decided {\n\t\treturn errDecidedAlready\n\t}\n\treject := channelOpenFailureMsg{\n\t\tPeersID:  ch.remoteId,\n\t\tReason:   reason,\n\t\tMessage:  message,\n\t\tLanguage: \"en\",\n\t}\n\tch.decided = true\n\treturn ch.sendMessage(reject)\n}\n\nfunc (ch *channel) Read(data []byte) (int, error) {\n\tif !ch.decided {\n\t\treturn 0, errUndecided\n\t}\n\treturn ch.ReadExtended(data, 0)\n}\n\nfunc (ch *channel) Write(data []byte) (int, error) {\n\tif !ch.decided {\n\t\treturn 0, errUndecided\n\t}\n\treturn ch.WriteExtended(data, 0)\n}\n\nfunc (ch *channel) CloseWrite() error {\n\tif !ch.decided {\n\t\treturn errUndecided\n\t}\n\tch.sentEOF = true\n\treturn ch.sendMessage(channelEOFMsg{\n\t\tPeersID: ch.remoteId})\n}\n\nfunc (ch *channel) Close() error {\n\tif !ch.decided {\n\t\treturn errUndecided\n\t}\n\n\treturn ch.sendMessage(channelCloseMsg{\n\t\tPeersID: ch.remoteId})\n}\n\n// Extended returns an io.ReadWriter that sends and receives data on the given,\n// SSH extended stream. Such streams are used, for example, for stderr.\nfunc (ch *channel) Extended(code uint32) io.ReadWriter {\n\tif !ch.decided {\n\t\treturn nil\n\t}\n\treturn &extChannel{code, ch}\n}\n\nfunc (ch *channel) Stderr() io.ReadWriter {\n\treturn ch.Extended(1)\n}\n\nfunc (ch *channel) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {\n\tif !ch.decided {\n\t\treturn false, errUndecided\n\t}\n\n\tif wantReply {\n\t\tch.sentRequestMu.Lock()\n\t\tdefer ch.sentRequestMu.Unlock()\n\t}\n\n\tmsg := channelRequestMsg{\n\t\tPeersID:             ch.remoteId,\n\t\tRequest:             name,\n\t\tWantReply:           wantReply,\n\t\tRequestSpecificData: payload,\n\t}\n\n\tif err := ch.sendMessage(msg); err != nil {\n\t\treturn false, err\n\t}\n\n\tif wantReply {\n\t\tm, ok := (<-ch.msg)\n\t\tif !ok {\n\t\t\treturn false, io.EOF\n\t\t}\n\t\tswitch m.(type) {\n\t\tcase *channelRequestFailureMsg:\n\t\t\treturn false, nil\n\t\tcase *channelRequestSuccessMsg:\n\t\t\treturn true, nil\n\t\tdefault:\n\t\t\treturn false, fmt.Errorf(\"ssh: unexpected response to channel request: %#v\", m)\n\t\t}\n\t}\n\n\treturn false, nil\n}\n\n// ackRequest either sends an ack or nack to the channel request.\nfunc (ch *channel) ackRequest(ok bool) error {\n\tif !ch.decided {\n\t\treturn errUndecided\n\t}\n\n\tvar msg interface{}\n\tif !ok {\n\t\tmsg = channelRequestFailureMsg{\n\t\t\tPeersID: ch.remoteId,\n\t\t}\n\t} else {\n\t\tmsg = channelRequestSuccessMsg{\n\t\t\tPeersID: ch.remoteId,\n\t\t}\n\t}\n\treturn ch.sendMessage(msg)\n}\n\nfunc (ch *channel) ChannelType() string {\n\treturn ch.chanType\n}\n\nfunc (ch *channel) ExtraData() []byte {\n\treturn ch.extraData\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/cipher.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/des\"\n\t\"crypto/rc4\"\n\t\"crypto/subtle\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\n\t\"golang.org/x/crypto/chacha20\"\n\t\"golang.org/x/crypto/internal/poly1305\"\n)\n\nconst (\n\tpacketSizeMultiple = 16 // TODO(huin) this should be determined by the cipher.\n\n\t// RFC 4253 section 6.1 defines a minimum packet size of 32768 that implementations\n\t// MUST be able to process (plus a few more kilobytes for padding and mac). The RFC\n\t// indicates implementations SHOULD be able to handle larger packet sizes, but then\n\t// waffles on about reasonable limits.\n\t//\n\t// OpenSSH caps their maxPacket at 256kB so we choose to do\n\t// the same. maxPacket is also used to ensure that uint32\n\t// length fields do not overflow, so it should remain well\n\t// below 4G.\n\tmaxPacket = 256 * 1024\n)\n\n// noneCipher implements cipher.Stream and provides no encryption. It is used\n// by the transport before the first key-exchange.\ntype noneCipher struct{}\n\nfunc (c noneCipher) XORKeyStream(dst, src []byte) {\n\tcopy(dst, src)\n}\n\nfunc newAESCTR(key, iv []byte) (cipher.Stream, error) {\n\tc, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn cipher.NewCTR(c, iv), nil\n}\n\nfunc newRC4(key, iv []byte) (cipher.Stream, error) {\n\treturn rc4.NewCipher(key)\n}\n\ntype cipherMode struct {\n\tkeySize int\n\tivSize  int\n\tcreate  func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error)\n}\n\nfunc streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, error)) func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\treturn func(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\t\tstream, err := createFunc(key, iv)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar streamDump []byte\n\t\tif skip > 0 {\n\t\t\tstreamDump = make([]byte, 512)\n\t\t}\n\n\t\tfor remainingToDump := skip; remainingToDump > 0; {\n\t\t\tdumpThisTime := remainingToDump\n\t\t\tif dumpThisTime > len(streamDump) {\n\t\t\t\tdumpThisTime = len(streamDump)\n\t\t\t}\n\t\t\tstream.XORKeyStream(streamDump[:dumpThisTime], streamDump[:dumpThisTime])\n\t\t\tremainingToDump -= dumpThisTime\n\t\t}\n\n\t\tmac := macModes[algs.MAC].new(macKey)\n\t\treturn &streamPacketCipher{\n\t\t\tmac:       mac,\n\t\t\tetm:       macModes[algs.MAC].etm,\n\t\t\tmacResult: make([]byte, mac.Size()),\n\t\t\tcipher:    stream,\n\t\t}, nil\n\t}\n}\n\n// cipherModes documents properties of supported ciphers. Ciphers not included\n// are not supported and will not be negotiated, even if explicitly requested in\n// ClientConfig.Crypto.Ciphers.\nvar cipherModes = map[string]*cipherMode{\n\t// Ciphers from RFC 4344, which introduced many CTR-based ciphers. Algorithms\n\t// are defined in the order specified in the RFC.\n\t\"aes128-ctr\": {16, aes.BlockSize, streamCipherMode(0, newAESCTR)},\n\t\"aes192-ctr\": {24, aes.BlockSize, streamCipherMode(0, newAESCTR)},\n\t\"aes256-ctr\": {32, aes.BlockSize, streamCipherMode(0, newAESCTR)},\n\n\t// Ciphers from RFC 4345, which introduces security-improved arcfour ciphers.\n\t// They are defined in the order specified in the RFC.\n\t\"arcfour128\": {16, 0, streamCipherMode(1536, newRC4)},\n\t\"arcfour256\": {32, 0, streamCipherMode(1536, newRC4)},\n\n\t// Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol.\n\t// Note that this cipher is not safe, as stated in RFC 4253: \"Arcfour (and\n\t// RC4) has problems with weak keys, and should be used with caution.\"\n\t// RFC 4345 introduces improved versions of Arcfour.\n\t\"arcfour\": {16, 0, streamCipherMode(0, newRC4)},\n\n\t// AEAD ciphers\n\tgcm128CipherID:     {16, 12, newGCMCipher},\n\tgcm256CipherID:     {32, 12, newGCMCipher},\n\tchacha20Poly1305ID: {64, 0, newChaCha20Cipher},\n\n\t// CBC mode is insecure and so is not included in the default config.\n\t// (See https://www.ieee-security.org/TC/SP2013/papers/4977a526.pdf). If absolutely\n\t// needed, it's possible to specify a custom Config to enable it.\n\t// You should expect that an active attacker can recover plaintext if\n\t// you do.\n\taes128cbcID: {16, aes.BlockSize, newAESCBCCipher},\n\n\t// 3des-cbc is insecure and is not included in the default\n\t// config.\n\ttripledescbcID: {24, des.BlockSize, newTripleDESCBCCipher},\n}\n\n// prefixLen is the length of the packet prefix that contains the packet length\n// and number of padding bytes.\nconst prefixLen = 5\n\n// streamPacketCipher is a packetCipher using a stream cipher.\ntype streamPacketCipher struct {\n\tmac    hash.Hash\n\tcipher cipher.Stream\n\tetm    bool\n\n\t// The following members are to avoid per-packet allocations.\n\tprefix      [prefixLen]byte\n\tseqNumBytes [4]byte\n\tpadding     [2 * packetSizeMultiple]byte\n\tpacketData  []byte\n\tmacResult   []byte\n}\n\n// readCipherPacket reads and decrypt a single packet from the reader argument.\nfunc (s *streamPacketCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {\n\tif _, err := io.ReadFull(r, s.prefix[:]); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar encryptedPaddingLength [1]byte\n\tif s.mac != nil && s.etm {\n\t\tcopy(encryptedPaddingLength[:], s.prefix[4:5])\n\t\ts.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])\n\t} else {\n\t\ts.cipher.XORKeyStream(s.prefix[:], s.prefix[:])\n\t}\n\n\tlength := binary.BigEndian.Uint32(s.prefix[0:4])\n\tpaddingLength := uint32(s.prefix[4])\n\n\tvar macSize uint32\n\tif s.mac != nil {\n\t\ts.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)\n\t\ts.mac.Write(s.seqNumBytes[:])\n\t\tif s.etm {\n\t\t\ts.mac.Write(s.prefix[:4])\n\t\t\ts.mac.Write(encryptedPaddingLength[:])\n\t\t} else {\n\t\t\ts.mac.Write(s.prefix[:])\n\t\t}\n\t\tmacSize = uint32(s.mac.Size())\n\t}\n\n\tif length <= paddingLength+1 {\n\t\treturn nil, errors.New(\"ssh: invalid packet length, packet too small\")\n\t}\n\n\tif length > maxPacket {\n\t\treturn nil, errors.New(\"ssh: invalid packet length, packet too large\")\n\t}\n\n\t// the maxPacket check above ensures that length-1+macSize\n\t// does not overflow.\n\tif uint32(cap(s.packetData)) < length-1+macSize {\n\t\ts.packetData = make([]byte, length-1+macSize)\n\t} else {\n\t\ts.packetData = s.packetData[:length-1+macSize]\n\t}\n\n\tif _, err := io.ReadFull(r, s.packetData); err != nil {\n\t\treturn nil, err\n\t}\n\tmac := s.packetData[length-1:]\n\tdata := s.packetData[:length-1]\n\n\tif s.mac != nil && s.etm {\n\t\ts.mac.Write(data)\n\t}\n\n\ts.cipher.XORKeyStream(data, data)\n\n\tif s.mac != nil {\n\t\tif !s.etm {\n\t\t\ts.mac.Write(data)\n\t\t}\n\t\ts.macResult = s.mac.Sum(s.macResult[:0])\n\t\tif subtle.ConstantTimeCompare(s.macResult, mac) != 1 {\n\t\t\treturn nil, errors.New(\"ssh: MAC failure\")\n\t\t}\n\t}\n\n\treturn s.packetData[:length-paddingLength-1], nil\n}\n\n// writeCipherPacket encrypts and sends a packet of data to the writer argument\nfunc (s *streamPacketCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {\n\tif len(packet) > maxPacket {\n\t\treturn errors.New(\"ssh: packet too large\")\n\t}\n\n\taadlen := 0\n\tif s.mac != nil && s.etm {\n\t\t// packet length is not encrypted for EtM modes\n\t\taadlen = 4\n\t}\n\n\tpaddingLength := packetSizeMultiple - (prefixLen+len(packet)-aadlen)%packetSizeMultiple\n\tif paddingLength < 4 {\n\t\tpaddingLength += packetSizeMultiple\n\t}\n\n\tlength := len(packet) + 1 + paddingLength\n\tbinary.BigEndian.PutUint32(s.prefix[:], uint32(length))\n\ts.prefix[4] = byte(paddingLength)\n\tpadding := s.padding[:paddingLength]\n\tif _, err := io.ReadFull(rand, padding); err != nil {\n\t\treturn err\n\t}\n\n\tif s.mac != nil {\n\t\ts.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum)\n\t\ts.mac.Write(s.seqNumBytes[:])\n\n\t\tif s.etm {\n\t\t\t// For EtM algorithms, the packet length must stay unencrypted,\n\t\t\t// but the following data (padding length) must be encrypted\n\t\t\ts.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5])\n\t\t}\n\n\t\ts.mac.Write(s.prefix[:])\n\n\t\tif !s.etm {\n\t\t\t// For non-EtM algorithms, the algorithm is applied on unencrypted data\n\t\t\ts.mac.Write(packet)\n\t\t\ts.mac.Write(padding)\n\t\t}\n\t}\n\n\tif !(s.mac != nil && s.etm) {\n\t\t// For EtM algorithms, the padding length has already been encrypted\n\t\t// and the packet length must remain unencrypted\n\t\ts.cipher.XORKeyStream(s.prefix[:], s.prefix[:])\n\t}\n\n\ts.cipher.XORKeyStream(packet, packet)\n\ts.cipher.XORKeyStream(padding, padding)\n\n\tif s.mac != nil && s.etm {\n\t\t// For EtM algorithms, packet and padding must be encrypted\n\t\ts.mac.Write(packet)\n\t\ts.mac.Write(padding)\n\t}\n\n\tif _, err := w.Write(s.prefix[:]); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.Write(packet); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.Write(padding); err != nil {\n\t\treturn err\n\t}\n\n\tif s.mac != nil {\n\t\ts.macResult = s.mac.Sum(s.macResult[:0])\n\t\tif _, err := w.Write(s.macResult); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype gcmCipher struct {\n\taead   cipher.AEAD\n\tprefix [4]byte\n\tiv     []byte\n\tbuf    []byte\n}\n\nfunc newGCMCipher(key, iv, unusedMacKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) {\n\tc, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taead, err := cipher.NewGCM(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &gcmCipher{\n\t\taead: aead,\n\t\tiv:   iv,\n\t}, nil\n}\n\nconst gcmTagSize = 16\n\nfunc (c *gcmCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {\n\t// Pad out to multiple of 16 bytes. This is different from the\n\t// stream cipher because that encrypts the length too.\n\tpadding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple)\n\tif padding < 4 {\n\t\tpadding += packetSizeMultiple\n\t}\n\n\tlength := uint32(len(packet) + int(padding) + 1)\n\tbinary.BigEndian.PutUint32(c.prefix[:], length)\n\tif _, err := w.Write(c.prefix[:]); err != nil {\n\t\treturn err\n\t}\n\n\tif cap(c.buf) < int(length) {\n\t\tc.buf = make([]byte, length)\n\t} else {\n\t\tc.buf = c.buf[:length]\n\t}\n\n\tc.buf[0] = padding\n\tcopy(c.buf[1:], packet)\n\tif _, err := io.ReadFull(rand, c.buf[1+len(packet):]); err != nil {\n\t\treturn err\n\t}\n\tc.buf = c.aead.Seal(c.buf[:0], c.iv, c.buf, c.prefix[:])\n\tif _, err := w.Write(c.buf); err != nil {\n\t\treturn err\n\t}\n\tc.incIV()\n\n\treturn nil\n}\n\nfunc (c *gcmCipher) incIV() {\n\tfor i := 4 + 7; i >= 4; i-- {\n\t\tc.iv[i]++\n\t\tif c.iv[i] != 0 {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (c *gcmCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {\n\tif _, err := io.ReadFull(r, c.prefix[:]); err != nil {\n\t\treturn nil, err\n\t}\n\tlength := binary.BigEndian.Uint32(c.prefix[:])\n\tif length > maxPacket {\n\t\treturn nil, errors.New(\"ssh: max packet length exceeded\")\n\t}\n\n\tif cap(c.buf) < int(length+gcmTagSize) {\n\t\tc.buf = make([]byte, length+gcmTagSize)\n\t} else {\n\t\tc.buf = c.buf[:length+gcmTagSize]\n\t}\n\n\tif _, err := io.ReadFull(r, c.buf); err != nil {\n\t\treturn nil, err\n\t}\n\n\tplain, err := c.aead.Open(c.buf[:0], c.iv, c.buf, c.prefix[:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.incIV()\n\n\tif len(plain) == 0 {\n\t\treturn nil, errors.New(\"ssh: empty packet\")\n\t}\n\n\tpadding := plain[0]\n\tif padding < 4 {\n\t\t// padding is a byte, so it automatically satisfies\n\t\t// the maximum size, which is 255.\n\t\treturn nil, fmt.Errorf(\"ssh: illegal padding %d\", padding)\n\t}\n\n\tif int(padding+1) >= len(plain) {\n\t\treturn nil, fmt.Errorf(\"ssh: padding %d too large\", padding)\n\t}\n\tplain = plain[1 : length-uint32(padding)]\n\treturn plain, nil\n}\n\n// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1\ntype cbcCipher struct {\n\tmac       hash.Hash\n\tmacSize   uint32\n\tdecrypter cipher.BlockMode\n\tencrypter cipher.BlockMode\n\n\t// The following members are to avoid per-packet allocations.\n\tseqNumBytes [4]byte\n\tpacketData  []byte\n\tmacResult   []byte\n\n\t// Amount of data we should still read to hide which\n\t// verification error triggered.\n\toracleCamouflage uint32\n}\n\nfunc newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\tcbc := &cbcCipher{\n\t\tmac:        macModes[algs.MAC].new(macKey),\n\t\tdecrypter:  cipher.NewCBCDecrypter(c, iv),\n\t\tencrypter:  cipher.NewCBCEncrypter(c, iv),\n\t\tpacketData: make([]byte, 1024),\n\t}\n\tif cbc.mac != nil {\n\t\tcbc.macSize = uint32(cbc.mac.Size())\n\t}\n\n\treturn cbc, nil\n}\n\nfunc newAESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\tc, err := aes.NewCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcbc, err := newCBCCipher(c, key, iv, macKey, algs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn cbc, nil\n}\n\nfunc newTripleDESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) {\n\tc, err := des.NewTripleDESCipher(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcbc, err := newCBCCipher(c, key, iv, macKey, algs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn cbc, nil\n}\n\nfunc maxUInt32(a, b int) uint32 {\n\tif a > b {\n\t\treturn uint32(a)\n\t}\n\treturn uint32(b)\n}\n\nconst (\n\tcbcMinPacketSizeMultiple = 8\n\tcbcMinPacketSize         = 16\n\tcbcMinPaddingSize        = 4\n)\n\n// cbcError represents a verification error that may leak information.\ntype cbcError string\n\nfunc (e cbcError) Error() string { return string(e) }\n\nfunc (c *cbcCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {\n\tp, err := c.readCipherPacketLeaky(seqNum, r)\n\tif err != nil {\n\t\tif _, ok := err.(cbcError); ok {\n\t\t\t// Verification error: read a fixed amount of\n\t\t\t// data, to make distinguishing between\n\t\t\t// failing MAC and failing length check more\n\t\t\t// difficult.\n\t\t\tio.CopyN(io.Discard, r, int64(c.oracleCamouflage))\n\t\t}\n\t}\n\treturn p, err\n}\n\nfunc (c *cbcCipher) readCipherPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) {\n\tblockSize := c.decrypter.BlockSize()\n\n\t// Read the header, which will include some of the subsequent data in the\n\t// case of block ciphers - this is copied back to the payload later.\n\t// How many bytes of payload/padding will be read with this first read.\n\tfirstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * blockSize)\n\tfirstBlock := c.packetData[:firstBlockLength]\n\tif _, err := io.ReadFull(r, firstBlock); err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength\n\n\tc.decrypter.CryptBlocks(firstBlock, firstBlock)\n\tlength := binary.BigEndian.Uint32(firstBlock[:4])\n\tif length > maxPacket {\n\t\treturn nil, cbcError(\"ssh: packet too large\")\n\t}\n\tif length+4 < maxUInt32(cbcMinPacketSize, blockSize) {\n\t\t// The minimum size of a packet is 16 (or the cipher block size, whichever\n\t\t// is larger) bytes.\n\t\treturn nil, cbcError(\"ssh: packet too small\")\n\t}\n\t// The length of the packet (including the length field but not the MAC) must\n\t// be a multiple of the block size or 8, whichever is larger.\n\tif (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 {\n\t\treturn nil, cbcError(\"ssh: invalid packet length multiple\")\n\t}\n\n\tpaddingLength := uint32(firstBlock[4])\n\tif paddingLength < cbcMinPaddingSize || length <= paddingLength+1 {\n\t\treturn nil, cbcError(\"ssh: invalid packet length\")\n\t}\n\n\t// Positions within the c.packetData buffer:\n\tmacStart := 4 + length\n\tpaddingStart := macStart - paddingLength\n\n\t// Entire packet size, starting before length, ending at end of mac.\n\tentirePacketSize := macStart + c.macSize\n\n\t// Ensure c.packetData is large enough for the entire packet data.\n\tif uint32(cap(c.packetData)) < entirePacketSize {\n\t\t// Still need to upsize and copy, but this should be rare at runtime, only\n\t\t// on upsizing the packetData buffer.\n\t\tc.packetData = make([]byte, entirePacketSize)\n\t\tcopy(c.packetData, firstBlock)\n\t} else {\n\t\tc.packetData = c.packetData[:entirePacketSize]\n\t}\n\n\tn, err := io.ReadFull(r, c.packetData[firstBlockLength:])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.oracleCamouflage -= uint32(n)\n\n\tremainingCrypted := c.packetData[firstBlockLength:macStart]\n\tc.decrypter.CryptBlocks(remainingCrypted, remainingCrypted)\n\n\tmac := c.packetData[macStart:]\n\tif c.mac != nil {\n\t\tc.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)\n\t\tc.mac.Write(c.seqNumBytes[:])\n\t\tc.mac.Write(c.packetData[:macStart])\n\t\tc.macResult = c.mac.Sum(c.macResult[:0])\n\t\tif subtle.ConstantTimeCompare(c.macResult, mac) != 1 {\n\t\t\treturn nil, cbcError(\"ssh: MAC failure\")\n\t\t}\n\t}\n\n\treturn c.packetData[prefixLen:paddingStart], nil\n}\n\nfunc (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error {\n\teffectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize())\n\n\t// Length of encrypted portion of the packet (header, payload, padding).\n\t// Enforce minimum padding and packet size.\n\tencLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize)\n\t// Enforce block size.\n\tencLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize\n\n\tlength := encLength - 4\n\tpaddingLength := int(length) - (1 + len(packet))\n\n\t// Overall buffer contains: header, payload, padding, mac.\n\t// Space for the MAC is reserved in the capacity but not the slice length.\n\tbufferSize := encLength + c.macSize\n\tif uint32(cap(c.packetData)) < bufferSize {\n\t\tc.packetData = make([]byte, encLength, bufferSize)\n\t} else {\n\t\tc.packetData = c.packetData[:encLength]\n\t}\n\n\tp := c.packetData\n\n\t// Packet header.\n\tbinary.BigEndian.PutUint32(p, length)\n\tp = p[4:]\n\tp[0] = byte(paddingLength)\n\n\t// Payload.\n\tp = p[1:]\n\tcopy(p, packet)\n\n\t// Padding.\n\tp = p[len(packet):]\n\tif _, err := io.ReadFull(rand, p); err != nil {\n\t\treturn err\n\t}\n\n\tif c.mac != nil {\n\t\tc.mac.Reset()\n\t\tbinary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum)\n\t\tc.mac.Write(c.seqNumBytes[:])\n\t\tc.mac.Write(c.packetData)\n\t\t// The MAC is now appended into the capacity reserved for it earlier.\n\t\tc.packetData = c.mac.Sum(c.packetData)\n\t}\n\n\tc.encrypter.CryptBlocks(c.packetData[:encLength], c.packetData[:encLength])\n\n\tif _, err := w.Write(c.packetData); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nconst chacha20Poly1305ID = \"chacha20-poly1305@openssh.com\"\n\n// chacha20Poly1305Cipher implements the chacha20-poly1305@openssh.com\n// AEAD, which is described here:\n//\n//\thttps://tools.ietf.org/html/draft-josefsson-ssh-chacha20-poly1305-openssh-00\n//\n// the methods here also implement padding, which RFC 4253 Section 6\n// also requires of stream ciphers.\ntype chacha20Poly1305Cipher struct {\n\tlengthKey  [32]byte\n\tcontentKey [32]byte\n\tbuf        []byte\n}\n\nfunc newChaCha20Cipher(key, unusedIV, unusedMACKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) {\n\tif len(key) != 64 {\n\t\tpanic(len(key))\n\t}\n\n\tc := &chacha20Poly1305Cipher{\n\t\tbuf: make([]byte, 256),\n\t}\n\n\tcopy(c.contentKey[:], key[:32])\n\tcopy(c.lengthKey[:], key[32:])\n\treturn c, nil\n}\n\nfunc (c *chacha20Poly1305Cipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) {\n\tnonce := make([]byte, 12)\n\tbinary.BigEndian.PutUint32(nonce[8:], seqNum)\n\ts, err := chacha20.NewUnauthenticatedCipher(c.contentKey[:], nonce)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar polyKey, discardBuf [32]byte\n\ts.XORKeyStream(polyKey[:], polyKey[:])\n\ts.XORKeyStream(discardBuf[:], discardBuf[:]) // skip the next 32 bytes\n\n\tencryptedLength := c.buf[:4]\n\tif _, err := io.ReadFull(r, encryptedLength); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar lenBytes [4]byte\n\tls, err := chacha20.NewUnauthenticatedCipher(c.lengthKey[:], nonce)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tls.XORKeyStream(lenBytes[:], encryptedLength)\n\n\tlength := binary.BigEndian.Uint32(lenBytes[:])\n\tif length > maxPacket {\n\t\treturn nil, errors.New(\"ssh: invalid packet length, packet too large\")\n\t}\n\n\tcontentEnd := 4 + length\n\tpacketEnd := contentEnd + poly1305.TagSize\n\tif uint32(cap(c.buf)) < packetEnd {\n\t\tc.buf = make([]byte, packetEnd)\n\t\tcopy(c.buf[:], encryptedLength)\n\t} else {\n\t\tc.buf = c.buf[:packetEnd]\n\t}\n\n\tif _, err := io.ReadFull(r, c.buf[4:packetEnd]); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar mac [poly1305.TagSize]byte\n\tcopy(mac[:], c.buf[contentEnd:packetEnd])\n\tif !poly1305.Verify(&mac, c.buf[:contentEnd], &polyKey) {\n\t\treturn nil, errors.New(\"ssh: MAC failure\")\n\t}\n\n\tplain := c.buf[4:contentEnd]\n\ts.XORKeyStream(plain, plain)\n\n\tif len(plain) == 0 {\n\t\treturn nil, errors.New(\"ssh: empty packet\")\n\t}\n\n\tpadding := plain[0]\n\tif padding < 4 {\n\t\t// padding is a byte, so it automatically satisfies\n\t\t// the maximum size, which is 255.\n\t\treturn nil, fmt.Errorf(\"ssh: illegal padding %d\", padding)\n\t}\n\n\tif int(padding)+1 >= len(plain) {\n\t\treturn nil, fmt.Errorf(\"ssh: padding %d too large\", padding)\n\t}\n\n\tplain = plain[1 : len(plain)-int(padding)]\n\n\treturn plain, nil\n}\n\nfunc (c *chacha20Poly1305Cipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader, payload []byte) error {\n\tnonce := make([]byte, 12)\n\tbinary.BigEndian.PutUint32(nonce[8:], seqNum)\n\ts, err := chacha20.NewUnauthenticatedCipher(c.contentKey[:], nonce)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar polyKey, discardBuf [32]byte\n\ts.XORKeyStream(polyKey[:], polyKey[:])\n\ts.XORKeyStream(discardBuf[:], discardBuf[:]) // skip the next 32 bytes\n\n\t// There is no blocksize, so fall back to multiple of 8 byte\n\t// padding, as described in RFC 4253, Sec 6.\n\tconst packetSizeMultiple = 8\n\n\tpadding := packetSizeMultiple - (1+len(payload))%packetSizeMultiple\n\tif padding < 4 {\n\t\tpadding += packetSizeMultiple\n\t}\n\n\t// size (4 bytes), padding (1), payload, padding, tag.\n\ttotalLength := 4 + 1 + len(payload) + padding + poly1305.TagSize\n\tif cap(c.buf) < totalLength {\n\t\tc.buf = make([]byte, totalLength)\n\t} else {\n\t\tc.buf = c.buf[:totalLength]\n\t}\n\n\tbinary.BigEndian.PutUint32(c.buf, uint32(1+len(payload)+padding))\n\tls, err := chacha20.NewUnauthenticatedCipher(c.lengthKey[:], nonce)\n\tif err != nil {\n\t\treturn err\n\t}\n\tls.XORKeyStream(c.buf, c.buf[:4])\n\tc.buf[4] = byte(padding)\n\tcopy(c.buf[5:], payload)\n\tpacketEnd := 5 + len(payload) + padding\n\tif _, err := io.ReadFull(rand, c.buf[5+len(payload):packetEnd]); err != nil {\n\t\treturn err\n\t}\n\n\ts.XORKeyStream(c.buf[4:], c.buf[4:packetEnd])\n\n\tvar mac [poly1305.TagSize]byte\n\tpoly1305.Sum(&mac, c.buf[:packetEnd], &polyKey)\n\n\tcopy(c.buf[packetEnd:], mac[:])\n\n\tif _, err := w.Write(c.buf); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/client.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Client implements a traditional SSH client that supports shells,\n// subprocesses, TCP port/streamlocal forwarding and tunneled dialing.\ntype Client struct {\n\tConn\n\n\thandleForwardsOnce sync.Once // guards calling (*Client).handleForwards\n\n\tforwards        forwardList // forwarded tcpip connections from the remote side\n\tmu              sync.Mutex\n\tchannelHandlers map[string]chan NewChannel\n}\n\n// HandleChannelOpen returns a channel on which NewChannel requests\n// for the given type are sent. If the type already is being handled,\n// nil is returned. The channel is closed when the connection is closed.\nfunc (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tif c.channelHandlers == nil {\n\t\t// The SSH channel has been closed.\n\t\tc := make(chan NewChannel)\n\t\tclose(c)\n\t\treturn c\n\t}\n\n\tch := c.channelHandlers[channelType]\n\tif ch != nil {\n\t\treturn nil\n\t}\n\n\tch = make(chan NewChannel, chanSize)\n\tc.channelHandlers[channelType] = ch\n\treturn ch\n}\n\n// NewClient creates a Client on top of the given connection.\nfunc NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client {\n\tconn := &Client{\n\t\tConn:            c,\n\t\tchannelHandlers: make(map[string]chan NewChannel, 1),\n\t}\n\n\tgo conn.handleGlobalRequests(reqs)\n\tgo conn.handleChannelOpens(chans)\n\tgo func() {\n\t\tconn.Wait()\n\t\tconn.forwards.closeAll()\n\t}()\n\treturn conn\n}\n\n// NewClientConn establishes an authenticated SSH connection using c\n// as the underlying transport.  The Request and NewChannel channels\n// must be serviced or the connection will hang.\nfunc NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) {\n\tfullConf := *config\n\tfullConf.SetDefaults()\n\tif fullConf.HostKeyCallback == nil {\n\t\tc.Close()\n\t\treturn nil, nil, nil, errors.New(\"ssh: must specify HostKeyCallback\")\n\t}\n\n\tconn := &connection{\n\t\tsshConn: sshConn{conn: c, user: fullConf.User},\n\t}\n\n\tif err := conn.clientHandshake(addr, &fullConf); err != nil {\n\t\tc.Close()\n\t\treturn nil, nil, nil, fmt.Errorf(\"ssh: handshake failed: %w\", err)\n\t}\n\tconn.mux = newMux(conn.transport)\n\treturn conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil\n}\n\n// clientHandshake performs the client side key exchange. See RFC 4253 Section\n// 7.\nfunc (c *connection) clientHandshake(dialAddress string, config *ClientConfig) error {\n\tif config.ClientVersion != \"\" {\n\t\tc.clientVersion = []byte(config.ClientVersion)\n\t} else {\n\t\tc.clientVersion = []byte(packageVersion)\n\t}\n\tvar err error\n\tc.serverVersion, err = exchangeVersions(c.sshConn.conn, c.clientVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tc.transport = newClientTransport(\n\t\tnewTransport(c.sshConn.conn, config.Rand, true /* is client */),\n\t\tc.clientVersion, c.serverVersion, config, dialAddress, c.sshConn.RemoteAddr())\n\tif err := c.transport.waitSession(); err != nil {\n\t\treturn err\n\t}\n\n\tc.sessionID = c.transport.getSessionID()\n\treturn c.clientAuthenticate(config)\n}\n\n// verifyHostKeySignature verifies the host key obtained in the key exchange.\n// algo is the negotiated algorithm, and may be a certificate type.\nfunc verifyHostKeySignature(hostKey PublicKey, algo string, result *kexResult) error {\n\tsig, rest, ok := parseSignatureBody(result.Signature)\n\tif len(rest) > 0 || !ok {\n\t\treturn errors.New(\"ssh: signature parse error\")\n\t}\n\n\tif a := underlyingAlgo(algo); sig.Format != a {\n\t\treturn fmt.Errorf(\"ssh: invalid signature algorithm %q, expected %q\", sig.Format, a)\n\t}\n\n\treturn hostKey.Verify(result.H, sig)\n}\n\n// NewSession opens a new Session for this client. (A session is a remote\n// execution of a program.)\nfunc (c *Client) NewSession() (*Session, error) {\n\tch, in, err := c.OpenChannel(\"session\", nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newSession(ch, in)\n}\n\nfunc (c *Client) handleGlobalRequests(incoming <-chan *Request) {\n\tfor r := range incoming {\n\t\t// This handles keepalive messages and matches\n\t\t// the behaviour of OpenSSH.\n\t\tr.Reply(false, nil)\n\t}\n}\n\n// handleChannelOpens channel open messages from the remote side.\nfunc (c *Client) handleChannelOpens(in <-chan NewChannel) {\n\tfor ch := range in {\n\t\tc.mu.Lock()\n\t\thandler := c.channelHandlers[ch.ChannelType()]\n\t\tc.mu.Unlock()\n\n\t\tif handler != nil {\n\t\t\thandler <- ch\n\t\t} else {\n\t\t\tch.Reject(UnknownChannelType, fmt.Sprintf(\"unknown channel type: %v\", ch.ChannelType()))\n\t\t}\n\t}\n\n\tc.mu.Lock()\n\tfor _, ch := range c.channelHandlers {\n\t\tclose(ch)\n\t}\n\tc.channelHandlers = nil\n\tc.mu.Unlock()\n}\n\n// Dial starts a client connection to the given SSH server. It is a\n// convenience function that connects to the given network address,\n// initiates the SSH handshake, and then sets up a Client.  For access\n// to incoming channels and requests, use net.Dial with NewClientConn\n// instead.\nfunc Dial(network, addr string, config *ClientConfig) (*Client, error) {\n\tconn, err := net.DialTimeout(network, addr, config.Timeout)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc, chans, reqs, err := NewClientConn(conn, addr, config)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewClient(c, chans, reqs), nil\n}\n\n// HostKeyCallback is the function type used for verifying server\n// keys.  A HostKeyCallback must return nil if the host key is OK, or\n// an error to reject it. It receives the hostname as passed to Dial\n// or NewClientConn. The remote address is the RemoteAddr of the\n// net.Conn underlying the SSH connection.\ntype HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error\n\n// BannerCallback is the function type used for treat the banner sent by\n// the server. A BannerCallback receives the message sent by the remote server.\ntype BannerCallback func(message string) error\n\n// A ClientConfig structure is used to configure a Client. It must not be\n// modified after having been passed to an SSH function.\ntype ClientConfig struct {\n\t// Config contains configuration that is shared between clients and\n\t// servers.\n\tConfig\n\n\t// User contains the username to authenticate as.\n\tUser string\n\n\t// Auth contains possible authentication methods to use with the\n\t// server. Only the first instance of a particular RFC 4252 method will\n\t// be used during authentication.\n\tAuth []AuthMethod\n\n\t// HostKeyCallback is called during the cryptographic\n\t// handshake to validate the server's host key. The client\n\t// configuration must supply this callback for the connection\n\t// to succeed. The functions InsecureIgnoreHostKey or\n\t// FixedHostKey can be used for simplistic host key checks.\n\tHostKeyCallback HostKeyCallback\n\n\t// BannerCallback is called during the SSH dance to display a custom\n\t// server's message. The client configuration can supply this callback to\n\t// handle it as wished. The function BannerDisplayStderr can be used for\n\t// simplistic display on Stderr.\n\tBannerCallback BannerCallback\n\n\t// ClientVersion contains the version identification string that will\n\t// be used for the connection. If empty, a reasonable default is used.\n\tClientVersion string\n\n\t// HostKeyAlgorithms lists the public key algorithms that the client will\n\t// accept from the server for host key authentication, in order of\n\t// preference. If empty, a reasonable default is used. Any\n\t// string returned from a PublicKey.Type method may be used, or\n\t// any of the CertAlgo and KeyAlgo constants.\n\tHostKeyAlgorithms []string\n\n\t// Timeout is the maximum amount of time for the TCP connection to establish.\n\t//\n\t// A Timeout of zero means no timeout.\n\tTimeout time.Duration\n}\n\n// InsecureIgnoreHostKey returns a function that can be used for\n// ClientConfig.HostKeyCallback to accept any host key. It should\n// not be used for production code.\nfunc InsecureIgnoreHostKey() HostKeyCallback {\n\treturn func(hostname string, remote net.Addr, key PublicKey) error {\n\t\treturn nil\n\t}\n}\n\ntype fixedHostKey struct {\n\tkey PublicKey\n}\n\nfunc (f *fixedHostKey) check(hostname string, remote net.Addr, key PublicKey) error {\n\tif f.key == nil {\n\t\treturn fmt.Errorf(\"ssh: required host key was nil\")\n\t}\n\tif !bytes.Equal(key.Marshal(), f.key.Marshal()) {\n\t\treturn fmt.Errorf(\"ssh: host key mismatch\")\n\t}\n\treturn nil\n}\n\n// FixedHostKey returns a function for use in\n// ClientConfig.HostKeyCallback to accept only a specific host key.\nfunc FixedHostKey(key PublicKey) HostKeyCallback {\n\thk := &fixedHostKey{key}\n\treturn hk.check\n}\n\n// BannerDisplayStderr returns a function that can be used for\n// ClientConfig.BannerCallback to display banners on os.Stderr.\nfunc BannerDisplayStderr() BannerCallback {\n\treturn func(banner string) error {\n\t\t_, err := os.Stderr.WriteString(banner)\n\n\t\treturn err\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/client_auth.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\ntype authResult int\n\nconst (\n\tauthFailure authResult = iota\n\tauthPartialSuccess\n\tauthSuccess\n)\n\n// clientAuthenticate authenticates with the remote server. See RFC 4252.\nfunc (c *connection) clientAuthenticate(config *ClientConfig) error {\n\t// initiate user auth session\n\tif err := c.transport.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})); err != nil {\n\t\treturn err\n\t}\n\tpacket, err := c.transport.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\t// The server may choose to send a SSH_MSG_EXT_INFO at this point (if we\n\t// advertised willingness to receive one, which we always do) or not. See\n\t// RFC 8308, Section 2.4.\n\textensions := make(map[string][]byte)\n\tif len(packet) > 0 && packet[0] == msgExtInfo {\n\t\tvar extInfo extInfoMsg\n\t\tif err := Unmarshal(packet, &extInfo); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpayload := extInfo.Payload\n\t\tfor i := uint32(0); i < extInfo.NumExtensions; i++ {\n\t\t\tname, rest, ok := parseString(payload)\n\t\t\tif !ok {\n\t\t\t\treturn parseError(msgExtInfo)\n\t\t\t}\n\t\t\tvalue, rest, ok := parseString(rest)\n\t\t\tif !ok {\n\t\t\t\treturn parseError(msgExtInfo)\n\t\t\t}\n\t\t\textensions[string(name)] = value\n\t\t\tpayload = rest\n\t\t}\n\t\tpacket, err = c.transport.readPacket()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tvar serviceAccept serviceAcceptMsg\n\tif err := Unmarshal(packet, &serviceAccept); err != nil {\n\t\treturn err\n\t}\n\n\t// during the authentication phase the client first attempts the \"none\" method\n\t// then any untried methods suggested by the server.\n\tvar tried []string\n\tvar lastMethods []string\n\n\tsessionID := c.transport.getSessionID()\n\tfor auth := AuthMethod(new(noneAuth)); auth != nil; {\n\t\tok, methods, err := auth.auth(sessionID, config.User, c.transport, config.Rand, extensions)\n\t\tif err != nil {\n\t\t\t// On disconnect, return error immediately\n\t\t\tif _, ok := err.(*disconnectMsg); ok {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// We return the error later if there is no other method left to\n\t\t\t// try.\n\t\t\tok = authFailure\n\t\t}\n\t\tif ok == authSuccess {\n\t\t\t// success\n\t\t\treturn nil\n\t\t} else if ok == authFailure {\n\t\t\tif m := auth.method(); !contains(tried, m) {\n\t\t\t\ttried = append(tried, m)\n\t\t\t}\n\t\t}\n\t\tif methods == nil {\n\t\t\tmethods = lastMethods\n\t\t}\n\t\tlastMethods = methods\n\n\t\tauth = nil\n\n\tfindNext:\n\t\tfor _, a := range config.Auth {\n\t\t\tcandidateMethod := a.method()\n\t\t\tif contains(tried, candidateMethod) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, meth := range methods {\n\t\t\t\tif meth == candidateMethod {\n\t\t\t\t\tauth = a\n\t\t\t\t\tbreak findNext\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif auth == nil && err != nil {\n\t\t\t// We have an error and there are no other authentication methods to\n\t\t\t// try, so we return it.\n\t\t\treturn err\n\t\t}\n\t}\n\treturn fmt.Errorf(\"ssh: unable to authenticate, attempted methods %v, no supported methods remain\", tried)\n}\n\nfunc contains(list []string, e string) bool {\n\tfor _, s := range list {\n\t\tif s == e {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// An AuthMethod represents an instance of an RFC 4252 authentication method.\ntype AuthMethod interface {\n\t// auth authenticates user over transport t.\n\t// Returns true if authentication is successful.\n\t// If authentication is not successful, a []string of alternative\n\t// method names is returned. If the slice is nil, it will be ignored\n\t// and the previous set of possible methods will be reused.\n\tauth(session []byte, user string, p packetConn, rand io.Reader, extensions map[string][]byte) (authResult, []string, error)\n\n\t// method returns the RFC 4252 method name.\n\tmethod() string\n}\n\n// \"none\" authentication, RFC 4252 section 5.2.\ntype noneAuth int\n\nfunc (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {\n\tif err := c.writePacket(Marshal(&userAuthRequestMsg{\n\t\tUser:    user,\n\t\tService: serviceSSH,\n\t\tMethod:  \"none\",\n\t})); err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\n\treturn handleAuthResponse(c)\n}\n\nfunc (n *noneAuth) method() string {\n\treturn \"none\"\n}\n\n// passwordCallback is an AuthMethod that fetches the password through\n// a function call, e.g. by prompting the user.\ntype passwordCallback func() (password string, err error)\n\nfunc (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {\n\ttype passwordAuthMsg struct {\n\t\tUser     string `sshtype:\"50\"`\n\t\tService  string\n\t\tMethod   string\n\t\tReply    bool\n\t\tPassword string\n\t}\n\n\tpw, err := cb()\n\t// REVIEW NOTE: is there a need to support skipping a password attempt?\n\t// The program may only find out that the user doesn't have a password\n\t// when prompting.\n\tif err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\n\tif err := c.writePacket(Marshal(&passwordAuthMsg{\n\t\tUser:     user,\n\t\tService:  serviceSSH,\n\t\tMethod:   cb.method(),\n\t\tReply:    false,\n\t\tPassword: pw,\n\t})); err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\n\treturn handleAuthResponse(c)\n}\n\nfunc (cb passwordCallback) method() string {\n\treturn \"password\"\n}\n\n// Password returns an AuthMethod using the given password.\nfunc Password(secret string) AuthMethod {\n\treturn passwordCallback(func() (string, error) { return secret, nil })\n}\n\n// PasswordCallback returns an AuthMethod that uses a callback for\n// fetching a password.\nfunc PasswordCallback(prompt func() (secret string, err error)) AuthMethod {\n\treturn passwordCallback(prompt)\n}\n\ntype publickeyAuthMsg struct {\n\tUser    string `sshtype:\"50\"`\n\tService string\n\tMethod  string\n\t// HasSig indicates to the receiver packet that the auth request is signed and\n\t// should be used for authentication of the request.\n\tHasSig   bool\n\tAlgoname string\n\tPubKey   []byte\n\t// Sig is tagged with \"rest\" so Marshal will exclude it during\n\t// validateKey\n\tSig []byte `ssh:\"rest\"`\n}\n\n// publicKeyCallback is an AuthMethod that uses a set of key\n// pairs for authentication.\ntype publicKeyCallback func() ([]Signer, error)\n\nfunc (cb publicKeyCallback) method() string {\n\treturn \"publickey\"\n}\n\nfunc pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (MultiAlgorithmSigner, string, error) {\n\tvar as MultiAlgorithmSigner\n\tkeyFormat := signer.PublicKey().Type()\n\n\t// If the signer implements MultiAlgorithmSigner we use the algorithms it\n\t// support, if it implements AlgorithmSigner we assume it supports all\n\t// algorithms, otherwise only the key format one.\n\tswitch s := signer.(type) {\n\tcase MultiAlgorithmSigner:\n\t\tas = s\n\tcase AlgorithmSigner:\n\t\tas = &multiAlgorithmSigner{\n\t\t\tAlgorithmSigner:     s,\n\t\t\tsupportedAlgorithms: algorithmsForKeyFormat(underlyingAlgo(keyFormat)),\n\t\t}\n\tdefault:\n\t\tas = &multiAlgorithmSigner{\n\t\t\tAlgorithmSigner:     algorithmSignerWrapper{signer},\n\t\t\tsupportedAlgorithms: []string{underlyingAlgo(keyFormat)},\n\t\t}\n\t}\n\n\tgetFallbackAlgo := func() (string, error) {\n\t\t// Fallback to use if there is no \"server-sig-algs\" extension or a\n\t\t// common algorithm cannot be found. We use the public key format if the\n\t\t// MultiAlgorithmSigner supports it, otherwise we return an error.\n\t\tif !contains(as.Algorithms(), underlyingAlgo(keyFormat)) {\n\t\t\treturn \"\", fmt.Errorf(\"ssh: no common public key signature algorithm, server only supports %q for key type %q, signer only supports %v\",\n\t\t\t\tunderlyingAlgo(keyFormat), keyFormat, as.Algorithms())\n\t\t}\n\t\treturn keyFormat, nil\n\t}\n\n\textPayload, ok := extensions[\"server-sig-algs\"]\n\tif !ok {\n\t\t// If there is no \"server-sig-algs\" extension use the fallback\n\t\t// algorithm.\n\t\talgo, err := getFallbackAlgo()\n\t\treturn as, algo, err\n\t}\n\n\t// The server-sig-algs extension only carries underlying signature\n\t// algorithm, but we are trying to select a protocol-level public key\n\t// algorithm, which might be a certificate type. Extend the list of server\n\t// supported algorithms to include the corresponding certificate algorithms.\n\tserverAlgos := strings.Split(string(extPayload), \",\")\n\tfor _, algo := range serverAlgos {\n\t\tif certAlgo, ok := certificateAlgo(algo); ok {\n\t\t\tserverAlgos = append(serverAlgos, certAlgo)\n\t\t}\n\t}\n\n\t// Filter algorithms based on those supported by MultiAlgorithmSigner.\n\tvar keyAlgos []string\n\tfor _, algo := range algorithmsForKeyFormat(keyFormat) {\n\t\tif contains(as.Algorithms(), underlyingAlgo(algo)) {\n\t\t\tkeyAlgos = append(keyAlgos, algo)\n\t\t}\n\t}\n\n\talgo, err := findCommon(\"public key signature algorithm\", keyAlgos, serverAlgos)\n\tif err != nil {\n\t\t// If there is no overlap, return the fallback algorithm to support\n\t\t// servers that fail to list all supported algorithms.\n\t\talgo, err := getFallbackAlgo()\n\t\treturn as, algo, err\n\t}\n\treturn as, algo, nil\n}\n\nfunc (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader, extensions map[string][]byte) (authResult, []string, error) {\n\t// Authentication is performed by sending an enquiry to test if a key is\n\t// acceptable to the remote. If the key is acceptable, the client will\n\t// attempt to authenticate with the valid key.  If not the client will repeat\n\t// the process with the remaining keys.\n\n\tsigners, err := cb()\n\tif err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\tvar methods []string\n\tvar errSigAlgo error\n\n\torigSignersLen := len(signers)\n\tfor idx := 0; idx < len(signers); idx++ {\n\t\tsigner := signers[idx]\n\t\tpub := signer.PublicKey()\n\t\tas, algo, err := pickSignatureAlgorithm(signer, extensions)\n\t\tif err != nil && errSigAlgo == nil {\n\t\t\t// If we cannot negotiate a signature algorithm store the first\n\t\t\t// error so we can return it to provide a more meaningful message if\n\t\t\t// no other signers work.\n\t\t\terrSigAlgo = err\n\t\t\tcontinue\n\t\t}\n\t\tok, err := validateKey(pub, algo, user, c)\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\t\t// OpenSSH 7.2-7.7 advertises support for rsa-sha2-256 and rsa-sha2-512\n\t\t// in the \"server-sig-algs\" extension but doesn't support these\n\t\t// algorithms for certificate authentication, so if the server rejects\n\t\t// the key try to use the obtained algorithm as if \"server-sig-algs\" had\n\t\t// not been implemented if supported from the algorithm signer.\n\t\tif !ok && idx < origSignersLen && isRSACert(algo) && algo != CertAlgoRSAv01 {\n\t\t\tif contains(as.Algorithms(), KeyAlgoRSA) {\n\t\t\t\t// We retry using the compat algorithm after all signers have\n\t\t\t\t// been tried normally.\n\t\t\t\tsigners = append(signers, &multiAlgorithmSigner{\n\t\t\t\t\tAlgorithmSigner:     as,\n\t\t\t\t\tsupportedAlgorithms: []string{KeyAlgoRSA},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tpubKey := pub.Marshal()\n\t\tdata := buildDataSignedForAuth(session, userAuthRequestMsg{\n\t\t\tUser:    user,\n\t\t\tService: serviceSSH,\n\t\t\tMethod:  cb.method(),\n\t\t}, algo, pubKey)\n\t\tsign, err := as.SignWithAlgorithm(rand, data, underlyingAlgo(algo))\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\n\t\t// manually wrap the serialized signature in a string\n\t\ts := Marshal(sign)\n\t\tsig := make([]byte, stringLength(len(s)))\n\t\tmarshalString(sig, s)\n\t\tmsg := publickeyAuthMsg{\n\t\t\tUser:     user,\n\t\t\tService:  serviceSSH,\n\t\t\tMethod:   cb.method(),\n\t\t\tHasSig:   true,\n\t\t\tAlgoname: algo,\n\t\t\tPubKey:   pubKey,\n\t\t\tSig:      sig,\n\t\t}\n\t\tp := Marshal(&msg)\n\t\tif err := c.writePacket(p); err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\t\tvar success authResult\n\t\tsuccess, methods, err = handleAuthResponse(c)\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\n\t\t// If authentication succeeds or the list of available methods does not\n\t\t// contain the \"publickey\" method, do not attempt to authenticate with any\n\t\t// other keys.  According to RFC 4252 Section 7, the latter can occur when\n\t\t// additional authentication methods are required.\n\t\tif success == authSuccess || !contains(methods, cb.method()) {\n\t\t\treturn success, methods, err\n\t\t}\n\t}\n\n\treturn authFailure, methods, errSigAlgo\n}\n\n// validateKey validates the key provided is acceptable to the server.\nfunc validateKey(key PublicKey, algo string, user string, c packetConn) (bool, error) {\n\tpubKey := key.Marshal()\n\tmsg := publickeyAuthMsg{\n\t\tUser:     user,\n\t\tService:  serviceSSH,\n\t\tMethod:   \"publickey\",\n\t\tHasSig:   false,\n\t\tAlgoname: algo,\n\t\tPubKey:   pubKey,\n\t}\n\tif err := c.writePacket(Marshal(&msg)); err != nil {\n\t\treturn false, err\n\t}\n\n\treturn confirmKeyAck(key, c)\n}\n\nfunc confirmKeyAck(key PublicKey, c packetConn) (bool, error) {\n\tpubKey := key.Marshal()\n\n\tfor {\n\t\tpacket, err := c.readPacket()\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tswitch packet[0] {\n\t\tcase msgUserAuthBanner:\n\t\t\tif err := handleBannerResponse(c, packet); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\tcase msgUserAuthPubKeyOk:\n\t\t\tvar msg userAuthPubKeyOkMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\t// According to RFC 4252 Section 7 the algorithm in\n\t\t\t// SSH_MSG_USERAUTH_PK_OK should match that of the request but some\n\t\t\t// servers send the key type instead. OpenSSH allows any algorithm\n\t\t\t// that matches the public key, so we do the same.\n\t\t\t// https://github.com/openssh/openssh-portable/blob/86bdd385/sshconnect2.c#L709\n\t\t\tif !contains(algorithmsForKeyFormat(key.Type()), msg.Algo) {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t\tif !bytes.Equal(msg.PubKey, pubKey) {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t\treturn true, nil\n\t\tcase msgUserAuthFailure:\n\t\t\treturn false, nil\n\t\tdefault:\n\t\t\treturn false, unexpectedMessageError(msgUserAuthPubKeyOk, packet[0])\n\t\t}\n\t}\n}\n\n// PublicKeys returns an AuthMethod that uses the given key\n// pairs.\nfunc PublicKeys(signers ...Signer) AuthMethod {\n\treturn publicKeyCallback(func() ([]Signer, error) { return signers, nil })\n}\n\n// PublicKeysCallback returns an AuthMethod that runs the given\n// function to obtain a list of key pairs.\nfunc PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMethod {\n\treturn publicKeyCallback(getSigners)\n}\n\n// handleAuthResponse returns whether the preceding authentication request succeeded\n// along with a list of remaining authentication methods to try next and\n// an error if an unexpected response was received.\nfunc handleAuthResponse(c packetConn) (authResult, []string, error) {\n\tgotMsgExtInfo := false\n\tfor {\n\t\tpacket, err := c.readPacket()\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\n\t\tswitch packet[0] {\n\t\tcase msgUserAuthBanner:\n\t\t\tif err := handleBannerResponse(c, packet); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\tcase msgExtInfo:\n\t\t\t// Ignore post-authentication RFC 8308 extensions, once.\n\t\t\tif gotMsgExtInfo {\n\t\t\t\treturn authFailure, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0])\n\t\t\t}\n\t\t\tgotMsgExtInfo = true\n\t\tcase msgUserAuthFailure:\n\t\t\tvar msg userAuthFailureMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\t\tif msg.PartialSuccess {\n\t\t\t\treturn authPartialSuccess, msg.Methods, nil\n\t\t\t}\n\t\t\treturn authFailure, msg.Methods, nil\n\t\tcase msgUserAuthSuccess:\n\t\t\treturn authSuccess, nil, nil\n\t\tdefault:\n\t\t\treturn authFailure, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0])\n\t\t}\n\t}\n}\n\nfunc handleBannerResponse(c packetConn, packet []byte) error {\n\tvar msg userAuthBannerMsg\n\tif err := Unmarshal(packet, &msg); err != nil {\n\t\treturn err\n\t}\n\n\ttransport, ok := c.(*handshakeTransport)\n\tif !ok {\n\t\treturn nil\n\t}\n\n\tif transport.bannerCallback != nil {\n\t\treturn transport.bannerCallback(msg.Message)\n\t}\n\n\treturn nil\n}\n\n// KeyboardInteractiveChallenge should print questions, optionally\n// disabling echoing (e.g. for passwords), and return all the answers.\n// Challenge may be called multiple times in a single session. After\n// successful authentication, the server may send a challenge with no\n// questions, for which the name and instruction messages should be\n// printed.  RFC 4256 section 3.3 details how the UI should behave for\n// both CLI and GUI environments.\ntype KeyboardInteractiveChallenge func(name, instruction string, questions []string, echos []bool) (answers []string, err error)\n\n// KeyboardInteractive returns an AuthMethod using a prompt/response\n// sequence controlled by the server.\nfunc KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod {\n\treturn challenge\n}\n\nfunc (cb KeyboardInteractiveChallenge) method() string {\n\treturn \"keyboard-interactive\"\n}\n\nfunc (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {\n\ttype initiateMsg struct {\n\t\tUser       string `sshtype:\"50\"`\n\t\tService    string\n\t\tMethod     string\n\t\tLanguage   string\n\t\tSubmethods string\n\t}\n\n\tif err := c.writePacket(Marshal(&initiateMsg{\n\t\tUser:    user,\n\t\tService: serviceSSH,\n\t\tMethod:  \"keyboard-interactive\",\n\t})); err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\n\tgotMsgExtInfo := false\n\tgotUserAuthInfoRequest := false\n\tfor {\n\t\tpacket, err := c.readPacket()\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\n\t\t// like handleAuthResponse, but with less options.\n\t\tswitch packet[0] {\n\t\tcase msgUserAuthBanner:\n\t\t\tif err := handleBannerResponse(c, packet); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\t\tcontinue\n\t\tcase msgExtInfo:\n\t\t\t// Ignore post-authentication RFC 8308 extensions, once.\n\t\t\tif gotMsgExtInfo {\n\t\t\t\treturn authFailure, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])\n\t\t\t}\n\t\t\tgotMsgExtInfo = true\n\t\t\tcontinue\n\t\tcase msgUserAuthInfoRequest:\n\t\t\t// OK\n\t\tcase msgUserAuthFailure:\n\t\t\tvar msg userAuthFailureMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\t\tif msg.PartialSuccess {\n\t\t\t\treturn authPartialSuccess, msg.Methods, nil\n\t\t\t}\n\t\t\tif !gotUserAuthInfoRequest {\n\t\t\t\treturn authFailure, msg.Methods, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])\n\t\t\t}\n\t\t\treturn authFailure, msg.Methods, nil\n\t\tcase msgUserAuthSuccess:\n\t\t\treturn authSuccess, nil, nil\n\t\tdefault:\n\t\t\treturn authFailure, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0])\n\t\t}\n\n\t\tvar msg userAuthInfoRequestMsg\n\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\t\tgotUserAuthInfoRequest = true\n\n\t\t// Manually unpack the prompt/echo pairs.\n\t\trest := msg.Prompts\n\t\tvar prompts []string\n\t\tvar echos []bool\n\t\tfor i := 0; i < int(msg.NumPrompts); i++ {\n\t\t\tprompt, r, ok := parseString(rest)\n\t\t\tif !ok || len(r) == 0 {\n\t\t\t\treturn authFailure, nil, errors.New(\"ssh: prompt format error\")\n\t\t\t}\n\t\t\tprompts = append(prompts, string(prompt))\n\t\t\techos = append(echos, r[0] != 0)\n\t\t\trest = r[1:]\n\t\t}\n\n\t\tif len(rest) != 0 {\n\t\t\treturn authFailure, nil, errors.New(\"ssh: extra data following keyboard-interactive pairs\")\n\t\t}\n\n\t\tanswers, err := cb(msg.Name, msg.Instruction, prompts, echos)\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\n\t\tif len(answers) != len(prompts) {\n\t\t\treturn authFailure, nil, fmt.Errorf(\"ssh: incorrect number of answers from keyboard-interactive callback %d (expected %d)\", len(answers), len(prompts))\n\t\t}\n\t\tresponseLength := 1 + 4\n\t\tfor _, a := range answers {\n\t\t\tresponseLength += stringLength(len(a))\n\t\t}\n\t\tserialized := make([]byte, responseLength)\n\t\tp := serialized\n\t\tp[0] = msgUserAuthInfoResponse\n\t\tp = p[1:]\n\t\tp = marshalUint32(p, uint32(len(answers)))\n\t\tfor _, a := range answers {\n\t\t\tp = marshalString(p, []byte(a))\n\t\t}\n\n\t\tif err := c.writePacket(serialized); err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\t}\n}\n\ntype retryableAuthMethod struct {\n\tauthMethod AuthMethod\n\tmaxTries   int\n}\n\nfunc (r *retryableAuthMethod) auth(session []byte, user string, c packetConn, rand io.Reader, extensions map[string][]byte) (ok authResult, methods []string, err error) {\n\tfor i := 0; r.maxTries <= 0 || i < r.maxTries; i++ {\n\t\tok, methods, err = r.authMethod.auth(session, user, c, rand, extensions)\n\t\tif ok != authFailure || err != nil { // either success, partial success or error terminate\n\t\t\treturn ok, methods, err\n\t\t}\n\t}\n\treturn ok, methods, err\n}\n\nfunc (r *retryableAuthMethod) method() string {\n\treturn r.authMethod.method()\n}\n\n// RetryableAuthMethod is a decorator for other auth methods enabling them to\n// be retried up to maxTries before considering that AuthMethod itself failed.\n// If maxTries is <= 0, will retry indefinitely\n//\n// This is useful for interactive clients using challenge/response type\n// authentication (e.g. Keyboard-Interactive, Password, etc) where the user\n// could mistype their response resulting in the server issuing a\n// SSH_MSG_USERAUTH_FAILURE (rfc4252 #8 [password] and rfc4256 #3.4\n// [keyboard-interactive]); Without this decorator, the non-retryable\n// AuthMethod would be removed from future consideration, and never tried again\n// (and so the user would never be able to retry their entry).\nfunc RetryableAuthMethod(auth AuthMethod, maxTries int) AuthMethod {\n\treturn &retryableAuthMethod{authMethod: auth, maxTries: maxTries}\n}\n\n// GSSAPIWithMICAuthMethod is an AuthMethod with \"gssapi-with-mic\" authentication.\n// See RFC 4462 section 3\n// gssAPIClient is implementation of the GSSAPIClient interface, see the definition of the interface for details.\n// target is the server host you want to log in to.\nfunc GSSAPIWithMICAuthMethod(gssAPIClient GSSAPIClient, target string) AuthMethod {\n\tif gssAPIClient == nil {\n\t\tpanic(\"gss-api client must be not nil with enable gssapi-with-mic\")\n\t}\n\treturn &gssAPIWithMICCallback{gssAPIClient: gssAPIClient, target: target}\n}\n\ntype gssAPIWithMICCallback struct {\n\tgssAPIClient GSSAPIClient\n\ttarget       string\n}\n\nfunc (g *gssAPIWithMICCallback) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) {\n\tm := &userAuthRequestMsg{\n\t\tUser:    user,\n\t\tService: serviceSSH,\n\t\tMethod:  g.method(),\n\t}\n\t// The GSS-API authentication method is initiated when the client sends an SSH_MSG_USERAUTH_REQUEST.\n\t// See RFC 4462 section 3.2.\n\tm.Payload = appendU32(m.Payload, 1)\n\tm.Payload = appendString(m.Payload, string(krb5OID))\n\tif err := c.writePacket(Marshal(m)); err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\t// The server responds to the SSH_MSG_USERAUTH_REQUEST with either an\n\t// SSH_MSG_USERAUTH_FAILURE if none of the mechanisms are supported or\n\t// with an SSH_MSG_USERAUTH_GSSAPI_RESPONSE.\n\t// See RFC 4462 section 3.3.\n\t// OpenSSH supports Kerberos V5 mechanism only for GSS-API authentication,so I don't want to check\n\t// selected mech if it is valid.\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\tuserAuthGSSAPIResp := &userAuthGSSAPIResponse{}\n\tif err := Unmarshal(packet, userAuthGSSAPIResp); err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\t// Start the loop into the exchange token.\n\t// See RFC 4462 section 3.4.\n\tvar token []byte\n\tdefer g.gssAPIClient.DeleteSecContext()\n\tfor {\n\t\t// Initiates the establishment of a security context between the application and a remote peer.\n\t\tnextToken, needContinue, err := g.gssAPIClient.InitSecContext(\"host@\"+g.target, token, false)\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\t\tif len(nextToken) > 0 {\n\t\t\tif err := c.writePacket(Marshal(&userAuthGSSAPIToken{\n\t\t\t\tToken: nextToken,\n\t\t\t})); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\t}\n\t\tif !needContinue {\n\t\t\tbreak\n\t\t}\n\t\tpacket, err = c.readPacket()\n\t\tif err != nil {\n\t\t\treturn authFailure, nil, err\n\t\t}\n\t\tswitch packet[0] {\n\t\tcase msgUserAuthFailure:\n\t\t\tvar msg userAuthFailureMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\t\tif msg.PartialSuccess {\n\t\t\t\treturn authPartialSuccess, msg.Methods, nil\n\t\t\t}\n\t\t\treturn authFailure, msg.Methods, nil\n\t\tcase msgUserAuthGSSAPIError:\n\t\t\tuserAuthGSSAPIErrorResp := &userAuthGSSAPIError{}\n\t\t\tif err := Unmarshal(packet, userAuthGSSAPIErrorResp); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\t\treturn authFailure, nil, fmt.Errorf(\"GSS-API Error:\\n\"+\n\t\t\t\t\"Major Status: %d\\n\"+\n\t\t\t\t\"Minor Status: %d\\n\"+\n\t\t\t\t\"Error Message: %s\\n\", userAuthGSSAPIErrorResp.MajorStatus, userAuthGSSAPIErrorResp.MinorStatus,\n\t\t\t\tuserAuthGSSAPIErrorResp.Message)\n\t\tcase msgUserAuthGSSAPIToken:\n\t\t\tuserAuthGSSAPITokenReq := &userAuthGSSAPIToken{}\n\t\t\tif err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {\n\t\t\t\treturn authFailure, nil, err\n\t\t\t}\n\t\t\ttoken = userAuthGSSAPITokenReq.Token\n\t\t}\n\t}\n\t// Binding Encryption Keys.\n\t// See RFC 4462 section 3.5.\n\tmicField := buildMIC(string(session), user, \"ssh-connection\", \"gssapi-with-mic\")\n\tmicToken, err := g.gssAPIClient.GetMIC(micField)\n\tif err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\tif err := c.writePacket(Marshal(&userAuthGSSAPIMIC{\n\t\tMIC: micToken,\n\t})); err != nil {\n\t\treturn authFailure, nil, err\n\t}\n\treturn handleAuthResponse(c)\n}\n\nfunc (g *gssAPIWithMICCallback) method() string {\n\treturn \"gssapi-with-mic\"\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/common.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"sync\"\n\n\t_ \"crypto/sha1\"\n\t_ \"crypto/sha256\"\n\t_ \"crypto/sha512\"\n)\n\n// These are string constants in the SSH protocol.\nconst (\n\tcompressionNone = \"none\"\n\tserviceUserAuth = \"ssh-userauth\"\n\tserviceSSH      = \"ssh-connection\"\n)\n\n// supportedCiphers lists ciphers we support but might not recommend.\nvar supportedCiphers = []string{\n\t\"aes128-ctr\", \"aes192-ctr\", \"aes256-ctr\",\n\t\"aes128-gcm@openssh.com\", gcm256CipherID,\n\tchacha20Poly1305ID,\n\t\"arcfour256\", \"arcfour128\", \"arcfour\",\n\taes128cbcID,\n\ttripledescbcID,\n}\n\n// preferredCiphers specifies the default preference for ciphers.\nvar preferredCiphers = []string{\n\t\"aes128-gcm@openssh.com\", gcm256CipherID,\n\tchacha20Poly1305ID,\n\t\"aes128-ctr\", \"aes192-ctr\", \"aes256-ctr\",\n}\n\n// supportedKexAlgos specifies the supported key-exchange algorithms in\n// preference order.\nvar supportedKexAlgos = []string{\n\tkexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH,\n\t// P384 and P521 are not constant-time yet, but since we don't\n\t// reuse ephemeral keys, using them for ECDH should be OK.\n\tkexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,\n\tkexAlgoDH14SHA256, kexAlgoDH16SHA512, kexAlgoDH14SHA1,\n\tkexAlgoDH1SHA1,\n}\n\n// serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden\n// for the server half.\nvar serverForbiddenKexAlgos = map[string]struct{}{\n\tkexAlgoDHGEXSHA1:   {}, // server half implementation is only minimal to satisfy the automated tests\n\tkexAlgoDHGEXSHA256: {}, // server half implementation is only minimal to satisfy the automated tests\n}\n\n// preferredKexAlgos specifies the default preference for key-exchange\n// algorithms in preference order. The diffie-hellman-group16-sha512 algorithm\n// is disabled by default because it is a bit slower than the others.\nvar preferredKexAlgos = []string{\n\tkexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH,\n\tkexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521,\n\tkexAlgoDH14SHA256, kexAlgoDH14SHA1,\n}\n\n// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods\n// of authenticating servers) in preference order.\nvar supportedHostKeyAlgos = []string{\n\tCertAlgoRSASHA256v01, CertAlgoRSASHA512v01,\n\tCertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01,\n\tCertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01,\n\n\tKeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,\n\tKeyAlgoRSASHA256, KeyAlgoRSASHA512,\n\tKeyAlgoRSA, KeyAlgoDSA,\n\n\tKeyAlgoED25519,\n}\n\n// supportedMACs specifies a default set of MAC algorithms in preference order.\n// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed\n// because they have reached the end of their useful life.\nvar supportedMACs = []string{\n\t\"hmac-sha2-256-etm@openssh.com\", \"hmac-sha2-512-etm@openssh.com\", \"hmac-sha2-256\", \"hmac-sha2-512\", \"hmac-sha1\", \"hmac-sha1-96\",\n}\n\nvar supportedCompressions = []string{compressionNone}\n\n// hashFuncs keeps the mapping of supported signature algorithms to their\n// respective hashes needed for signing and verification.\nvar hashFuncs = map[string]crypto.Hash{\n\tKeyAlgoRSA:       crypto.SHA1,\n\tKeyAlgoRSASHA256: crypto.SHA256,\n\tKeyAlgoRSASHA512: crypto.SHA512,\n\tKeyAlgoDSA:       crypto.SHA1,\n\tKeyAlgoECDSA256:  crypto.SHA256,\n\tKeyAlgoECDSA384:  crypto.SHA384,\n\tKeyAlgoECDSA521:  crypto.SHA512,\n\t// KeyAlgoED25519 doesn't pre-hash.\n\tKeyAlgoSKECDSA256: crypto.SHA256,\n\tKeyAlgoSKED25519:  crypto.SHA256,\n}\n\n// algorithmsForKeyFormat returns the supported signature algorithms for a given\n// public key format (PublicKey.Type), in order of preference. See RFC 8332,\n// Section 2. See also the note in sendKexInit on backwards compatibility.\nfunc algorithmsForKeyFormat(keyFormat string) []string {\n\tswitch keyFormat {\n\tcase KeyAlgoRSA:\n\t\treturn []string{KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA}\n\tcase CertAlgoRSAv01:\n\t\treturn []string{CertAlgoRSASHA256v01, CertAlgoRSASHA512v01, CertAlgoRSAv01}\n\tdefault:\n\t\treturn []string{keyFormat}\n\t}\n}\n\n// isRSA returns whether algo is a supported RSA algorithm, including certificate\n// algorithms.\nfunc isRSA(algo string) bool {\n\talgos := algorithmsForKeyFormat(KeyAlgoRSA)\n\treturn contains(algos, underlyingAlgo(algo))\n}\n\nfunc isRSACert(algo string) bool {\n\t_, ok := certKeyAlgoNames[algo]\n\tif !ok {\n\t\treturn false\n\t}\n\treturn isRSA(algo)\n}\n\n// supportedPubKeyAuthAlgos specifies the supported client public key\n// authentication algorithms. Note that this doesn't include certificate types\n// since those use the underlying algorithm. This list is sent to the client if\n// it supports the server-sig-algs extension. Order is irrelevant.\nvar supportedPubKeyAuthAlgos = []string{\n\tKeyAlgoED25519,\n\tKeyAlgoSKED25519, KeyAlgoSKECDSA256,\n\tKeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521,\n\tKeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA,\n\tKeyAlgoDSA,\n}\n\n// unexpectedMessageError results when the SSH message that we received didn't\n// match what we wanted.\nfunc unexpectedMessageError(expected, got uint8) error {\n\treturn fmt.Errorf(\"ssh: unexpected message type %d (expected %d)\", got, expected)\n}\n\n// parseError results from a malformed SSH message.\nfunc parseError(tag uint8) error {\n\treturn fmt.Errorf(\"ssh: parse error in message type %d\", tag)\n}\n\nfunc findCommon(what string, client []string, server []string) (common string, err error) {\n\tfor _, c := range client {\n\t\tfor _, s := range server {\n\t\t\tif c == s {\n\t\t\t\treturn c, nil\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\", fmt.Errorf(\"ssh: no common algorithm for %s; client offered: %v, server offered: %v\", what, client, server)\n}\n\n// directionAlgorithms records algorithm choices in one direction (either read or write)\ntype directionAlgorithms struct {\n\tCipher      string\n\tMAC         string\n\tCompression string\n}\n\n// rekeyBytes returns a rekeying intervals in bytes.\nfunc (a *directionAlgorithms) rekeyBytes() int64 {\n\t// According to RFC 4344 block ciphers should rekey after\n\t// 2^(BLOCKSIZE/4) blocks. For all AES flavors BLOCKSIZE is\n\t// 128.\n\tswitch a.Cipher {\n\tcase \"aes128-ctr\", \"aes192-ctr\", \"aes256-ctr\", gcm128CipherID, gcm256CipherID, aes128cbcID:\n\t\treturn 16 * (1 << 32)\n\n\t}\n\n\t// For others, stick with RFC 4253 recommendation to rekey after 1 Gb of data.\n\treturn 1 << 30\n}\n\nvar aeadCiphers = map[string]bool{\n\tgcm128CipherID:     true,\n\tgcm256CipherID:     true,\n\tchacha20Poly1305ID: true,\n}\n\ntype algorithms struct {\n\tkex     string\n\thostKey string\n\tw       directionAlgorithms\n\tr       directionAlgorithms\n}\n\nfunc findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) {\n\tresult := &algorithms{}\n\n\tresult.kex, err = findCommon(\"key exchange\", clientKexInit.KexAlgos, serverKexInit.KexAlgos)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tresult.hostKey, err = findCommon(\"host key\", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tstoc, ctos := &result.w, &result.r\n\tif isClient {\n\t\tctos, stoc = stoc, ctos\n\t}\n\n\tctos.Cipher, err = findCommon(\"client to server cipher\", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tstoc.Cipher, err = findCommon(\"server to client cipher\", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif !aeadCiphers[ctos.Cipher] {\n\t\tctos.MAC, err = findCommon(\"client to server MAC\", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tif !aeadCiphers[stoc.Cipher] {\n\t\tstoc.MAC, err = findCommon(\"server to client MAC\", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tctos.Compression, err = findCommon(\"client to server compression\", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tstoc.Compression, err = findCommon(\"server to client compression\", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn result, nil\n}\n\n// If rekeythreshold is too small, we can't make any progress sending\n// stuff.\nconst minRekeyThreshold uint64 = 256\n\n// Config contains configuration data common to both ServerConfig and\n// ClientConfig.\ntype Config struct {\n\t// Rand provides the source of entropy for cryptographic\n\t// primitives. If Rand is nil, the cryptographic random reader\n\t// in package crypto/rand will be used.\n\tRand io.Reader\n\n\t// The maximum number of bytes sent or received after which a\n\t// new key is negotiated. It must be at least 256. If\n\t// unspecified, a size suitable for the chosen cipher is used.\n\tRekeyThreshold uint64\n\n\t// The allowed key exchanges algorithms. If unspecified then a default set\n\t// of algorithms is used. Unsupported values are silently ignored.\n\tKeyExchanges []string\n\n\t// The allowed cipher algorithms. If unspecified then a sensible default is\n\t// used. Unsupported values are silently ignored.\n\tCiphers []string\n\n\t// The allowed MAC algorithms. If unspecified then a sensible default is\n\t// used. Unsupported values are silently ignored.\n\tMACs []string\n}\n\n// SetDefaults sets sensible values for unset fields in config. This is\n// exported for testing: Configs passed to SSH functions are copied and have\n// default values set automatically.\nfunc (c *Config) SetDefaults() {\n\tif c.Rand == nil {\n\t\tc.Rand = rand.Reader\n\t}\n\tif c.Ciphers == nil {\n\t\tc.Ciphers = preferredCiphers\n\t}\n\tvar ciphers []string\n\tfor _, c := range c.Ciphers {\n\t\tif cipherModes[c] != nil {\n\t\t\t// Ignore the cipher if we have no cipherModes definition.\n\t\t\tciphers = append(ciphers, c)\n\t\t}\n\t}\n\tc.Ciphers = ciphers\n\n\tif c.KeyExchanges == nil {\n\t\tc.KeyExchanges = preferredKexAlgos\n\t}\n\tvar kexs []string\n\tfor _, k := range c.KeyExchanges {\n\t\tif kexAlgoMap[k] != nil {\n\t\t\t// Ignore the KEX if we have no kexAlgoMap definition.\n\t\t\tkexs = append(kexs, k)\n\t\t}\n\t}\n\tc.KeyExchanges = kexs\n\n\tif c.MACs == nil {\n\t\tc.MACs = supportedMACs\n\t}\n\tvar macs []string\n\tfor _, m := range c.MACs {\n\t\tif macModes[m] != nil {\n\t\t\t// Ignore the MAC if we have no macModes definition.\n\t\t\tmacs = append(macs, m)\n\t\t}\n\t}\n\tc.MACs = macs\n\n\tif c.RekeyThreshold == 0 {\n\t\t// cipher specific default\n\t} else if c.RekeyThreshold < minRekeyThreshold {\n\t\tc.RekeyThreshold = minRekeyThreshold\n\t} else if c.RekeyThreshold >= math.MaxInt64 {\n\t\t// Avoid weirdness if somebody uses -1 as a threshold.\n\t\tc.RekeyThreshold = math.MaxInt64\n\t}\n}\n\n// buildDataSignedForAuth returns the data that is signed in order to prove\n// possession of a private key. See RFC 4252, section 7. algo is the advertised\n// algorithm, and may be a certificate type.\nfunc buildDataSignedForAuth(sessionID []byte, req userAuthRequestMsg, algo string, pubKey []byte) []byte {\n\tdata := struct {\n\t\tSession []byte\n\t\tType    byte\n\t\tUser    string\n\t\tService string\n\t\tMethod  string\n\t\tSign    bool\n\t\tAlgo    string\n\t\tPubKey  []byte\n\t}{\n\t\tsessionID,\n\t\tmsgUserAuthRequest,\n\t\treq.User,\n\t\treq.Service,\n\t\treq.Method,\n\t\ttrue,\n\t\talgo,\n\t\tpubKey,\n\t}\n\treturn Marshal(data)\n}\n\nfunc appendU16(buf []byte, n uint16) []byte {\n\treturn append(buf, byte(n>>8), byte(n))\n}\n\nfunc appendU32(buf []byte, n uint32) []byte {\n\treturn append(buf, byte(n>>24), byte(n>>16), byte(n>>8), byte(n))\n}\n\nfunc appendU64(buf []byte, n uint64) []byte {\n\treturn append(buf,\n\t\tbyte(n>>56), byte(n>>48), byte(n>>40), byte(n>>32),\n\t\tbyte(n>>24), byte(n>>16), byte(n>>8), byte(n))\n}\n\nfunc appendInt(buf []byte, n int) []byte {\n\treturn appendU32(buf, uint32(n))\n}\n\nfunc appendString(buf []byte, s string) []byte {\n\tbuf = appendU32(buf, uint32(len(s)))\n\tbuf = append(buf, s...)\n\treturn buf\n}\n\nfunc appendBool(buf []byte, b bool) []byte {\n\tif b {\n\t\treturn append(buf, 1)\n\t}\n\treturn append(buf, 0)\n}\n\n// newCond is a helper to hide the fact that there is no usable zero\n// value for sync.Cond.\nfunc newCond() *sync.Cond { return sync.NewCond(new(sync.Mutex)) }\n\n// window represents the buffer available to clients\n// wishing to write to a channel.\ntype window struct {\n\t*sync.Cond\n\twin          uint32 // RFC 4254 5.2 says the window size can grow to 2^32-1\n\twriteWaiters int\n\tclosed       bool\n}\n\n// add adds win to the amount of window available\n// for consumers.\nfunc (w *window) add(win uint32) bool {\n\t// a zero sized window adjust is a noop.\n\tif win == 0 {\n\t\treturn true\n\t}\n\tw.L.Lock()\n\tif w.win+win < win {\n\t\tw.L.Unlock()\n\t\treturn false\n\t}\n\tw.win += win\n\t// It is unusual that multiple goroutines would be attempting to reserve\n\t// window space, but not guaranteed. Use broadcast to notify all waiters\n\t// that additional window is available.\n\tw.Broadcast()\n\tw.L.Unlock()\n\treturn true\n}\n\n// close sets the window to closed, so all reservations fail\n// immediately.\nfunc (w *window) close() {\n\tw.L.Lock()\n\tw.closed = true\n\tw.Broadcast()\n\tw.L.Unlock()\n}\n\n// reserve reserves win from the available window capacity.\n// If no capacity remains, reserve will block. reserve may\n// return less than requested.\nfunc (w *window) reserve(win uint32) (uint32, error) {\n\tvar err error\n\tw.L.Lock()\n\tw.writeWaiters++\n\tw.Broadcast()\n\tfor w.win == 0 && !w.closed {\n\t\tw.Wait()\n\t}\n\tw.writeWaiters--\n\tif w.win < win {\n\t\twin = w.win\n\t}\n\tw.win -= win\n\tif w.closed {\n\t\terr = io.EOF\n\t}\n\tw.L.Unlock()\n\treturn win, err\n}\n\n// waitWriterBlocked waits until some goroutine is blocked for further\n// writes. It is used in tests only.\nfunc (w *window) waitWriterBlocked() {\n\tw.Cond.L.Lock()\n\tfor w.writeWaiters == 0 {\n\t\tw.Cond.Wait()\n\t}\n\tw.Cond.L.Unlock()\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/connection.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"fmt\"\n\t\"net\"\n)\n\n// OpenChannelError is returned if the other side rejects an\n// OpenChannel request.\ntype OpenChannelError struct {\n\tReason  RejectionReason\n\tMessage string\n}\n\nfunc (e *OpenChannelError) Error() string {\n\treturn fmt.Sprintf(\"ssh: rejected: %s (%s)\", e.Reason, e.Message)\n}\n\n// ConnMetadata holds metadata for the connection.\ntype ConnMetadata interface {\n\t// User returns the user ID for this connection.\n\tUser() string\n\n\t// SessionID returns the session hash, also denoted by H.\n\tSessionID() []byte\n\n\t// ClientVersion returns the client's version string as hashed\n\t// into the session ID.\n\tClientVersion() []byte\n\n\t// ServerVersion returns the server's version string as hashed\n\t// into the session ID.\n\tServerVersion() []byte\n\n\t// RemoteAddr returns the remote address for this connection.\n\tRemoteAddr() net.Addr\n\n\t// LocalAddr returns the local address for this connection.\n\tLocalAddr() net.Addr\n}\n\n// Conn represents an SSH connection for both server and client roles.\n// Conn is the basis for implementing an application layer, such\n// as ClientConn, which implements the traditional shell access for\n// clients.\ntype Conn interface {\n\tConnMetadata\n\n\t// SendRequest sends a global request, and returns the\n\t// reply. If wantReply is true, it returns the response status\n\t// and payload. See also RFC 4254, section 4.\n\tSendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error)\n\n\t// OpenChannel tries to open an channel. If the request is\n\t// rejected, it returns *OpenChannelError. On success it returns\n\t// the SSH Channel and a Go channel for incoming, out-of-band\n\t// requests. The Go channel must be serviced, or the\n\t// connection will hang.\n\tOpenChannel(name string, data []byte) (Channel, <-chan *Request, error)\n\n\t// Close closes the underlying network connection\n\tClose() error\n\n\t// Wait blocks until the connection has shut down, and returns the\n\t// error causing the shutdown.\n\tWait() error\n\n\t// TODO(hanwen): consider exposing:\n\t//   RequestKeyChange\n\t//   Disconnect\n}\n\n// DiscardRequests consumes and rejects all requests from the\n// passed-in channel.\nfunc DiscardRequests(in <-chan *Request) {\n\tfor req := range in {\n\t\tif req.WantReply {\n\t\t\treq.Reply(false, nil)\n\t\t}\n\t}\n}\n\n// A connection represents an incoming connection.\ntype connection struct {\n\ttransport *handshakeTransport\n\tsshConn\n\n\t// The connection protocol.\n\t*mux\n}\n\nfunc (c *connection) Close() error {\n\treturn c.sshConn.conn.Close()\n}\n\n// sshConn provides net.Conn metadata, but disallows direct reads and\n// writes.\ntype sshConn struct {\n\tconn net.Conn\n\n\tuser          string\n\tsessionID     []byte\n\tclientVersion []byte\n\tserverVersion []byte\n}\n\nfunc dup(src []byte) []byte {\n\tdst := make([]byte, len(src))\n\tcopy(dst, src)\n\treturn dst\n}\n\nfunc (c *sshConn) User() string {\n\treturn c.user\n}\n\nfunc (c *sshConn) RemoteAddr() net.Addr {\n\treturn c.conn.RemoteAddr()\n}\n\nfunc (c *sshConn) Close() error {\n\treturn c.conn.Close()\n}\n\nfunc (c *sshConn) LocalAddr() net.Addr {\n\treturn c.conn.LocalAddr()\n}\n\nfunc (c *sshConn) SessionID() []byte {\n\treturn dup(c.sessionID)\n}\n\nfunc (c *sshConn) ClientVersion() []byte {\n\treturn dup(c.clientVersion)\n}\n\nfunc (c *sshConn) ServerVersion() []byte {\n\treturn dup(c.serverVersion)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/doc.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage ssh implements an SSH client and server.\n\nSSH is a transport security protocol, an authentication protocol and a\nfamily of application protocols. The most typical application level\nprotocol is a remote shell and this is specifically implemented.  However,\nthe multiplexed nature of SSH is exposed to users that wish to support\nothers.\n\nReferences:\n\n\t[PROTOCOL]: https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL?rev=HEAD\n\t[PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD\n\t[SSH-PARAMETERS]:    http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1\n\nThis package does not fall under the stability promise of the Go language itself,\nso its API may be changed when pressing needs arise.\n*/\npackage ssh\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/handshake.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// debugHandshake, if set, prints messages sent and received.  Key\n// exchange messages are printed as if DH were used, so the debug\n// messages are wrong when using ECDH.\nconst debugHandshake = false\n\n// chanSize sets the amount of buffering SSH connections. This is\n// primarily for testing: setting chanSize=0 uncovers deadlocks more\n// quickly.\nconst chanSize = 16\n\n// maxPendingPackets sets the maximum number of packets to queue while waiting\n// for KEX to complete. This limits the total pending data to maxPendingPackets\n// * maxPacket bytes, which is ~16.8MB.\nconst maxPendingPackets = 64\n\n// keyingTransport is a packet based transport that supports key\n// changes. It need not be thread-safe. It should pass through\n// msgNewKeys in both directions.\ntype keyingTransport interface {\n\tpacketConn\n\n\t// prepareKeyChange sets up a key change. The key change for a\n\t// direction will be effected if a msgNewKeys message is sent\n\t// or received.\n\tprepareKeyChange(*algorithms, *kexResult) error\n\n\t// setStrictMode sets the strict KEX mode, notably triggering\n\t// sequence number resets on sending or receiving msgNewKeys.\n\t// If the sequence number is already > 1 when setStrictMode\n\t// is called, an error is returned.\n\tsetStrictMode() error\n\n\t// setInitialKEXDone indicates to the transport that the initial key exchange\n\t// was completed\n\tsetInitialKEXDone()\n}\n\n// handshakeTransport implements rekeying on top of a keyingTransport\n// and offers a thread-safe writePacket() interface.\ntype handshakeTransport struct {\n\tconn   keyingTransport\n\tconfig *Config\n\n\tserverVersion []byte\n\tclientVersion []byte\n\n\t// hostKeys is non-empty if we are the server. In that case,\n\t// it contains all host keys that can be used to sign the\n\t// connection.\n\thostKeys []Signer\n\n\t// publicKeyAuthAlgorithms is non-empty if we are the server. In that case,\n\t// it contains the supported client public key authentication algorithms.\n\tpublicKeyAuthAlgorithms []string\n\n\t// hostKeyAlgorithms is non-empty if we are the client. In that case,\n\t// we accept these key types from the server as host key.\n\thostKeyAlgorithms []string\n\n\t// On read error, incoming is closed, and readError is set.\n\tincoming  chan []byte\n\treadError error\n\n\tmu sync.Mutex\n\t// Condition for the above mutex. It is used to notify a completed key\n\t// exchange or a write failure. Writes can wait for this condition while a\n\t// key exchange is in progress.\n\twriteCond      *sync.Cond\n\twriteError     error\n\tsentInitPacket []byte\n\tsentInitMsg    *kexInitMsg\n\t// Used to queue writes when a key exchange is in progress. The length is\n\t// limited by pendingPacketsSize. Once full, writes will block until the key\n\t// exchange is completed or an error occurs. If not empty, it is emptied\n\t// all at once when the key exchange is completed in kexLoop.\n\tpendingPackets   [][]byte\n\twritePacketsLeft uint32\n\twriteBytesLeft   int64\n\tuserAuthComplete bool // whether the user authentication phase is complete\n\n\t// If the read loop wants to schedule a kex, it pings this\n\t// channel, and the write loop will send out a kex\n\t// message.\n\trequestKex chan struct{}\n\n\t// If the other side requests or confirms a kex, its kexInit\n\t// packet is sent here for the write loop to find it.\n\tstartKex    chan *pendingKex\n\tkexLoopDone chan struct{} // closed (with writeError non-nil) when kexLoop exits\n\n\t// data for host key checking\n\thostKeyCallback HostKeyCallback\n\tdialAddress     string\n\tremoteAddr      net.Addr\n\n\t// bannerCallback is non-empty if we are the client and it has been set in\n\t// ClientConfig. In that case it is called during the user authentication\n\t// dance to handle a custom server's message.\n\tbannerCallback BannerCallback\n\n\t// Algorithms agreed in the last key exchange.\n\talgorithms *algorithms\n\n\t// Counters exclusively owned by readLoop.\n\treadPacketsLeft uint32\n\treadBytesLeft   int64\n\n\t// The session ID or nil if first kex did not complete yet.\n\tsessionID []byte\n\n\t// strictMode indicates if the other side of the handshake indicated\n\t// that we should be following the strict KEX protocol restrictions.\n\tstrictMode bool\n}\n\ntype pendingKex struct {\n\totherInit []byte\n\tdone      chan error\n}\n\nfunc newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, serverVersion []byte) *handshakeTransport {\n\tt := &handshakeTransport{\n\t\tconn:          conn,\n\t\tserverVersion: serverVersion,\n\t\tclientVersion: clientVersion,\n\t\tincoming:      make(chan []byte, chanSize),\n\t\trequestKex:    make(chan struct{}, 1),\n\t\tstartKex:      make(chan *pendingKex),\n\t\tkexLoopDone:   make(chan struct{}),\n\n\t\tconfig: config,\n\t}\n\tt.writeCond = sync.NewCond(&t.mu)\n\tt.resetReadThresholds()\n\tt.resetWriteThresholds()\n\n\t// We always start with a mandatory key exchange.\n\tt.requestKex <- struct{}{}\n\treturn t\n}\n\nfunc newClientTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ClientConfig, dialAddr string, addr net.Addr) *handshakeTransport {\n\tt := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)\n\tt.dialAddress = dialAddr\n\tt.remoteAddr = addr\n\tt.hostKeyCallback = config.HostKeyCallback\n\tt.bannerCallback = config.BannerCallback\n\tif config.HostKeyAlgorithms != nil {\n\t\tt.hostKeyAlgorithms = config.HostKeyAlgorithms\n\t} else {\n\t\tt.hostKeyAlgorithms = supportedHostKeyAlgos\n\t}\n\tgo t.readLoop()\n\tgo t.kexLoop()\n\treturn t\n}\n\nfunc newServerTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ServerConfig) *handshakeTransport {\n\tt := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion)\n\tt.hostKeys = config.hostKeys\n\tt.publicKeyAuthAlgorithms = config.PublicKeyAuthAlgorithms\n\tgo t.readLoop()\n\tgo t.kexLoop()\n\treturn t\n}\n\nfunc (t *handshakeTransport) getSessionID() []byte {\n\treturn t.sessionID\n}\n\n// waitSession waits for the session to be established. This should be\n// the first thing to call after instantiating handshakeTransport.\nfunc (t *handshakeTransport) waitSession() error {\n\tp, err := t.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif p[0] != msgNewKeys {\n\t\treturn fmt.Errorf(\"ssh: first packet should be msgNewKeys\")\n\t}\n\n\treturn nil\n}\n\nfunc (t *handshakeTransport) id() string {\n\tif len(t.hostKeys) > 0 {\n\t\treturn \"server\"\n\t}\n\treturn \"client\"\n}\n\nfunc (t *handshakeTransport) printPacket(p []byte, write bool) {\n\taction := \"got\"\n\tif write {\n\t\taction = \"sent\"\n\t}\n\n\tif p[0] == msgChannelData || p[0] == msgChannelExtendedData {\n\t\tlog.Printf(\"%s %s data (packet %d bytes)\", t.id(), action, len(p))\n\t} else {\n\t\tmsg, err := decode(p)\n\t\tlog.Printf(\"%s %s %T %v (%v)\", t.id(), action, msg, msg, err)\n\t}\n}\n\nfunc (t *handshakeTransport) readPacket() ([]byte, error) {\n\tp, ok := <-t.incoming\n\tif !ok {\n\t\treturn nil, t.readError\n\t}\n\treturn p, nil\n}\n\nfunc (t *handshakeTransport) readLoop() {\n\tfirst := true\n\tfor {\n\t\tp, err := t.readOnePacket(first)\n\t\tfirst = false\n\t\tif err != nil {\n\t\t\tt.readError = err\n\t\t\tclose(t.incoming)\n\t\t\tbreak\n\t\t}\n\t\t// If this is the first kex, and strict KEX mode is enabled,\n\t\t// we don't ignore any messages, as they may be used to manipulate\n\t\t// the packet sequence numbers.\n\t\tif !(t.sessionID == nil && t.strictMode) && (p[0] == msgIgnore || p[0] == msgDebug) {\n\t\t\tcontinue\n\t\t}\n\t\tt.incoming <- p\n\t}\n\n\t// Stop writers too.\n\tt.recordWriteError(t.readError)\n\n\t// Unblock the writer should it wait for this.\n\tclose(t.startKex)\n\n\t// Don't close t.requestKex; it's also written to from writePacket.\n}\n\nfunc (t *handshakeTransport) pushPacket(p []byte) error {\n\tif debugHandshake {\n\t\tt.printPacket(p, true)\n\t}\n\treturn t.conn.writePacket(p)\n}\n\nfunc (t *handshakeTransport) getWriteError() error {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\treturn t.writeError\n}\n\nfunc (t *handshakeTransport) recordWriteError(err error) {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.writeError == nil && err != nil {\n\t\tt.writeError = err\n\t\tt.writeCond.Broadcast()\n\t}\n}\n\nfunc (t *handshakeTransport) requestKeyExchange() {\n\tselect {\n\tcase t.requestKex <- struct{}{}:\n\tdefault:\n\t\t// something already requested a kex, so do nothing.\n\t}\n}\n\nfunc (t *handshakeTransport) resetWriteThresholds() {\n\tt.writePacketsLeft = packetRekeyThreshold\n\tif t.config.RekeyThreshold > 0 {\n\t\tt.writeBytesLeft = int64(t.config.RekeyThreshold)\n\t} else if t.algorithms != nil {\n\t\tt.writeBytesLeft = t.algorithms.w.rekeyBytes()\n\t} else {\n\t\tt.writeBytesLeft = 1 << 30\n\t}\n}\n\nfunc (t *handshakeTransport) kexLoop() {\n\nwrite:\n\tfor t.getWriteError() == nil {\n\t\tvar request *pendingKex\n\t\tvar sent bool\n\n\t\tfor request == nil || !sent {\n\t\t\tvar ok bool\n\t\t\tselect {\n\t\t\tcase request, ok = <-t.startKex:\n\t\t\t\tif !ok {\n\t\t\t\t\tbreak write\n\t\t\t\t}\n\t\t\tcase <-t.requestKex:\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif !sent {\n\t\t\t\tif err := t.sendKexInit(); err != nil {\n\t\t\t\t\tt.recordWriteError(err)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tsent = true\n\t\t\t}\n\t\t}\n\n\t\tif err := t.getWriteError(); err != nil {\n\t\t\tif request != nil {\n\t\t\t\trequest.done <- err\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\t// We're not servicing t.requestKex, but that is OK:\n\t\t// we never block on sending to t.requestKex.\n\n\t\t// We're not servicing t.startKex, but the remote end\n\t\t// has just sent us a kexInitMsg, so it can't send\n\t\t// another key change request, until we close the done\n\t\t// channel on the pendingKex request.\n\n\t\terr := t.enterKeyExchange(request.otherInit)\n\n\t\tt.mu.Lock()\n\t\tt.writeError = err\n\t\tt.sentInitPacket = nil\n\t\tt.sentInitMsg = nil\n\n\t\tt.resetWriteThresholds()\n\n\t\t// we have completed the key exchange. Since the\n\t\t// reader is still blocked, it is safe to clear out\n\t\t// the requestKex channel. This avoids the situation\n\t\t// where: 1) we consumed our own request for the\n\t\t// initial kex, and 2) the kex from the remote side\n\t\t// caused another send on the requestKex channel,\n\tclear:\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-t.requestKex:\n\t\t\t\t//\n\t\t\tdefault:\n\t\t\t\tbreak clear\n\t\t\t}\n\t\t}\n\n\t\trequest.done <- t.writeError\n\n\t\t// kex finished. Push packets that we received while\n\t\t// the kex was in progress. Don't look at t.startKex\n\t\t// and don't increment writtenSinceKex: if we trigger\n\t\t// another kex while we are still busy with the last\n\t\t// one, things will become very confusing.\n\t\tfor _, p := range t.pendingPackets {\n\t\t\tt.writeError = t.pushPacket(p)\n\t\t\tif t.writeError != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tt.pendingPackets = t.pendingPackets[:0]\n\t\t// Unblock writePacket if waiting for KEX.\n\t\tt.writeCond.Broadcast()\n\t\tt.mu.Unlock()\n\t}\n\n\t// Unblock reader.\n\tt.conn.Close()\n\n\t// drain startKex channel. We don't service t.requestKex\n\t// because nobody does blocking sends there.\n\tfor request := range t.startKex {\n\t\trequest.done <- t.getWriteError()\n\t}\n\n\t// Mark that the loop is done so that Close can return.\n\tclose(t.kexLoopDone)\n}\n\n// The protocol uses uint32 for packet counters, so we can't let them\n// reach 1<<32.  We will actually read and write more packets than\n// this, though: the other side may send more packets, and after we\n// hit this limit on writing we will send a few more packets for the\n// key exchange itself.\nconst packetRekeyThreshold = (1 << 31)\n\nfunc (t *handshakeTransport) resetReadThresholds() {\n\tt.readPacketsLeft = packetRekeyThreshold\n\tif t.config.RekeyThreshold > 0 {\n\t\tt.readBytesLeft = int64(t.config.RekeyThreshold)\n\t} else if t.algorithms != nil {\n\t\tt.readBytesLeft = t.algorithms.r.rekeyBytes()\n\t} else {\n\t\tt.readBytesLeft = 1 << 30\n\t}\n}\n\nfunc (t *handshakeTransport) readOnePacket(first bool) ([]byte, error) {\n\tp, err := t.conn.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif t.readPacketsLeft > 0 {\n\t\tt.readPacketsLeft--\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif t.readBytesLeft > 0 {\n\t\tt.readBytesLeft -= int64(len(p))\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif debugHandshake {\n\t\tt.printPacket(p, false)\n\t}\n\n\tif first && p[0] != msgKexInit {\n\t\treturn nil, fmt.Errorf(\"ssh: first packet should be msgKexInit\")\n\t}\n\n\tif p[0] != msgKexInit {\n\t\treturn p, nil\n\t}\n\n\tfirstKex := t.sessionID == nil\n\n\tkex := pendingKex{\n\t\tdone:      make(chan error, 1),\n\t\totherInit: p,\n\t}\n\tt.startKex <- &kex\n\terr = <-kex.done\n\n\tif debugHandshake {\n\t\tlog.Printf(\"%s exited key exchange (first %v), err %v\", t.id(), firstKex, err)\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt.resetReadThresholds()\n\n\t// By default, a key exchange is hidden from higher layers by\n\t// translating it into msgIgnore.\n\tsuccessPacket := []byte{msgIgnore}\n\tif firstKex {\n\t\t// sendKexInit() for the first kex waits for\n\t\t// msgNewKeys so the authentication process is\n\t\t// guaranteed to happen over an encrypted transport.\n\t\tsuccessPacket = []byte{msgNewKeys}\n\t}\n\n\treturn successPacket, nil\n}\n\nconst (\n\tkexStrictClient = \"kex-strict-c-v00@openssh.com\"\n\tkexStrictServer = \"kex-strict-s-v00@openssh.com\"\n)\n\n// sendKexInit sends a key change message.\nfunc (t *handshakeTransport) sendKexInit() error {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.sentInitMsg != nil {\n\t\t// kexInits may be sent either in response to the other side,\n\t\t// or because our side wants to initiate a key change, so we\n\t\t// may have already sent a kexInit. In that case, don't send a\n\t\t// second kexInit.\n\t\treturn nil\n\t}\n\n\tmsg := &kexInitMsg{\n\t\tCiphersClientServer:     t.config.Ciphers,\n\t\tCiphersServerClient:     t.config.Ciphers,\n\t\tMACsClientServer:        t.config.MACs,\n\t\tMACsServerClient:        t.config.MACs,\n\t\tCompressionClientServer: supportedCompressions,\n\t\tCompressionServerClient: supportedCompressions,\n\t}\n\tio.ReadFull(t.config.Rand, msg.Cookie[:])\n\n\t// We mutate the KexAlgos slice, in order to add the kex-strict extension algorithm,\n\t// and possibly to add the ext-info extension algorithm. Since the slice may be the\n\t// user owned KeyExchanges, we create our own slice in order to avoid using user\n\t// owned memory by mistake.\n\tmsg.KexAlgos = make([]string, 0, len(t.config.KeyExchanges)+2) // room for kex-strict and ext-info\n\tmsg.KexAlgos = append(msg.KexAlgos, t.config.KeyExchanges...)\n\n\tisServer := len(t.hostKeys) > 0\n\tif isServer {\n\t\tfor _, k := range t.hostKeys {\n\t\t\t// If k is a MultiAlgorithmSigner, we restrict the signature\n\t\t\t// algorithms. If k is a AlgorithmSigner, presume it supports all\n\t\t\t// signature algorithms associated with the key format. If k is not\n\t\t\t// an AlgorithmSigner, we can only assume it only supports the\n\t\t\t// algorithms that matches the key format. (This means that Sign\n\t\t\t// can't pick a different default).\n\t\t\tkeyFormat := k.PublicKey().Type()\n\n\t\t\tswitch s := k.(type) {\n\t\t\tcase MultiAlgorithmSigner:\n\t\t\t\tfor _, algo := range algorithmsForKeyFormat(keyFormat) {\n\t\t\t\t\tif contains(s.Algorithms(), underlyingAlgo(algo)) {\n\t\t\t\t\t\tmsg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, algo)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase AlgorithmSigner:\n\t\t\t\tmsg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, algorithmsForKeyFormat(keyFormat)...)\n\t\t\tdefault:\n\t\t\t\tmsg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, keyFormat)\n\t\t\t}\n\t\t}\n\n\t\tif t.sessionID == nil {\n\t\t\tmsg.KexAlgos = append(msg.KexAlgos, kexStrictServer)\n\t\t}\n\t} else {\n\t\tmsg.ServerHostKeyAlgos = t.hostKeyAlgorithms\n\n\t\t// As a client we opt in to receiving SSH_MSG_EXT_INFO so we know what\n\t\t// algorithms the server supports for public key authentication. See RFC\n\t\t// 8308, Section 2.1.\n\t\t//\n\t\t// We also send the strict KEX mode extension algorithm, in order to opt\n\t\t// into the strict KEX mode.\n\t\tif firstKeyExchange := t.sessionID == nil; firstKeyExchange {\n\t\t\tmsg.KexAlgos = append(msg.KexAlgos, \"ext-info-c\")\n\t\t\tmsg.KexAlgos = append(msg.KexAlgos, kexStrictClient)\n\t\t}\n\n\t}\n\n\tpacket := Marshal(msg)\n\n\t// writePacket destroys the contents, so save a copy.\n\tpacketCopy := make([]byte, len(packet))\n\tcopy(packetCopy, packet)\n\n\tif err := t.pushPacket(packetCopy); err != nil {\n\t\treturn err\n\t}\n\n\tt.sentInitMsg = msg\n\tt.sentInitPacket = packet\n\n\treturn nil\n}\n\nvar errSendBannerPhase = errors.New(\"ssh: SendAuthBanner outside of authentication phase\")\n\nfunc (t *handshakeTransport) writePacket(p []byte) error {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\n\tswitch p[0] {\n\tcase msgKexInit:\n\t\treturn errors.New(\"ssh: only handshakeTransport can send kexInit\")\n\tcase msgNewKeys:\n\t\treturn errors.New(\"ssh: only handshakeTransport can send newKeys\")\n\tcase msgUserAuthBanner:\n\t\tif t.userAuthComplete {\n\t\t\treturn errSendBannerPhase\n\t\t}\n\tcase msgUserAuthSuccess:\n\t\tt.userAuthComplete = true\n\t}\n\n\tif t.writeError != nil {\n\t\treturn t.writeError\n\t}\n\n\tif t.sentInitMsg != nil {\n\t\tif len(t.pendingPackets) < maxPendingPackets {\n\t\t\t// Copy the packet so the writer can reuse the buffer.\n\t\t\tcp := make([]byte, len(p))\n\t\t\tcopy(cp, p)\n\t\t\tt.pendingPackets = append(t.pendingPackets, cp)\n\t\t\treturn nil\n\t\t}\n\t\tfor t.sentInitMsg != nil {\n\t\t\t// Block and wait for KEX to complete or an error.\n\t\t\tt.writeCond.Wait()\n\t\t\tif t.writeError != nil {\n\t\t\t\treturn t.writeError\n\t\t\t}\n\t\t}\n\t}\n\n\tif t.writeBytesLeft > 0 {\n\t\tt.writeBytesLeft -= int64(len(p))\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif t.writePacketsLeft > 0 {\n\t\tt.writePacketsLeft--\n\t} else {\n\t\tt.requestKeyExchange()\n\t}\n\n\tif err := t.pushPacket(p); err != nil {\n\t\tt.writeError = err\n\t\tt.writeCond.Broadcast()\n\t}\n\n\treturn nil\n}\n\nfunc (t *handshakeTransport) Close() error {\n\t// Close the connection. This should cause the readLoop goroutine to wake up\n\t// and close t.startKex, which will shut down kexLoop if running.\n\terr := t.conn.Close()\n\n\t// Wait for the kexLoop goroutine to complete.\n\t// At that point we know that the readLoop goroutine is complete too,\n\t// because kexLoop itself waits for readLoop to close the startKex channel.\n\t<-t.kexLoopDone\n\n\treturn err\n}\n\nfunc (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error {\n\tif debugHandshake {\n\t\tlog.Printf(\"%s entered key exchange\", t.id())\n\t}\n\n\totherInit := &kexInitMsg{}\n\tif err := Unmarshal(otherInitPacket, otherInit); err != nil {\n\t\treturn err\n\t}\n\n\tmagics := handshakeMagics{\n\t\tclientVersion: t.clientVersion,\n\t\tserverVersion: t.serverVersion,\n\t\tclientKexInit: otherInitPacket,\n\t\tserverKexInit: t.sentInitPacket,\n\t}\n\n\tclientInit := otherInit\n\tserverInit := t.sentInitMsg\n\tisClient := len(t.hostKeys) == 0\n\tif isClient {\n\t\tclientInit, serverInit = serverInit, clientInit\n\n\t\tmagics.clientKexInit = t.sentInitPacket\n\t\tmagics.serverKexInit = otherInitPacket\n\t}\n\n\tvar err error\n\tt.algorithms, err = findAgreedAlgorithms(isClient, clientInit, serverInit)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif t.sessionID == nil && ((isClient && contains(serverInit.KexAlgos, kexStrictServer)) || (!isClient && contains(clientInit.KexAlgos, kexStrictClient))) {\n\t\tt.strictMode = true\n\t\tif err := t.conn.setStrictMode(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// We don't send FirstKexFollows, but we handle receiving it.\n\t//\n\t// RFC 4253 section 7 defines the kex and the agreement method for\n\t// first_kex_packet_follows. It states that the guessed packet\n\t// should be ignored if the \"kex algorithm and/or the host\n\t// key algorithm is guessed wrong (server and client have\n\t// different preferred algorithm), or if any of the other\n\t// algorithms cannot be agreed upon\". The other algorithms have\n\t// already been checked above so the kex algorithm and host key\n\t// algorithm are checked here.\n\tif otherInit.FirstKexFollows && (clientInit.KexAlgos[0] != serverInit.KexAlgos[0] || clientInit.ServerHostKeyAlgos[0] != serverInit.ServerHostKeyAlgos[0]) {\n\t\t// other side sent a kex message for the wrong algorithm,\n\t\t// which we have to ignore.\n\t\tif _, err := t.conn.readPacket(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tkex, ok := kexAlgoMap[t.algorithms.kex]\n\tif !ok {\n\t\treturn fmt.Errorf(\"ssh: unexpected key exchange algorithm %v\", t.algorithms.kex)\n\t}\n\n\tvar result *kexResult\n\tif len(t.hostKeys) > 0 {\n\t\tresult, err = t.server(kex, &magics)\n\t} else {\n\t\tresult, err = t.client(kex, &magics)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfirstKeyExchange := t.sessionID == nil\n\tif firstKeyExchange {\n\t\tt.sessionID = result.H\n\t}\n\tresult.SessionID = t.sessionID\n\n\tif err := t.conn.prepareKeyChange(t.algorithms, result); err != nil {\n\t\treturn err\n\t}\n\tif err = t.conn.writePacket([]byte{msgNewKeys}); err != nil {\n\t\treturn err\n\t}\n\n\t// On the server side, after the first SSH_MSG_NEWKEYS, send a SSH_MSG_EXT_INFO\n\t// message with the server-sig-algs extension if the client supports it. See\n\t// RFC 8308, Sections 2.4 and 3.1, and [PROTOCOL], Section 1.9.\n\tif !isClient && firstKeyExchange && contains(clientInit.KexAlgos, \"ext-info-c\") {\n\t\tsupportedPubKeyAuthAlgosList := strings.Join(t.publicKeyAuthAlgorithms, \",\")\n\t\textInfo := &extInfoMsg{\n\t\t\tNumExtensions: 2,\n\t\t\tPayload:       make([]byte, 0, 4+15+4+len(supportedPubKeyAuthAlgosList)+4+16+4+1),\n\t\t}\n\t\textInfo.Payload = appendInt(extInfo.Payload, len(\"server-sig-algs\"))\n\t\textInfo.Payload = append(extInfo.Payload, \"server-sig-algs\"...)\n\t\textInfo.Payload = appendInt(extInfo.Payload, len(supportedPubKeyAuthAlgosList))\n\t\textInfo.Payload = append(extInfo.Payload, supportedPubKeyAuthAlgosList...)\n\t\textInfo.Payload = appendInt(extInfo.Payload, len(\"ping@openssh.com\"))\n\t\textInfo.Payload = append(extInfo.Payload, \"ping@openssh.com\"...)\n\t\textInfo.Payload = appendInt(extInfo.Payload, 1)\n\t\textInfo.Payload = append(extInfo.Payload, \"0\"...)\n\t\tif err := t.conn.writePacket(Marshal(extInfo)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif packet, err := t.conn.readPacket(); err != nil {\n\t\treturn err\n\t} else if packet[0] != msgNewKeys {\n\t\treturn unexpectedMessageError(msgNewKeys, packet[0])\n\t}\n\n\tif firstKeyExchange {\n\t\t// Indicates to the transport that the first key exchange is completed\n\t\t// after receiving SSH_MSG_NEWKEYS.\n\t\tt.conn.setInitialKEXDone()\n\t}\n\n\treturn nil\n}\n\n// algorithmSignerWrapper is an AlgorithmSigner that only supports the default\n// key format algorithm.\n//\n// This is technically a violation of the AlgorithmSigner interface, but it\n// should be unreachable given where we use this. Anyway, at least it returns an\n// error instead of panicing or producing an incorrect signature.\ntype algorithmSignerWrapper struct {\n\tSigner\n}\n\nfunc (a algorithmSignerWrapper) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {\n\tif algorithm != underlyingAlgo(a.PublicKey().Type()) {\n\t\treturn nil, errors.New(\"ssh: internal error: algorithmSignerWrapper invoked with non-default algorithm\")\n\t}\n\treturn a.Sign(rand, data)\n}\n\nfunc pickHostKey(hostKeys []Signer, algo string) AlgorithmSigner {\n\tfor _, k := range hostKeys {\n\t\tif s, ok := k.(MultiAlgorithmSigner); ok {\n\t\t\tif !contains(s.Algorithms(), underlyingAlgo(algo)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif algo == k.PublicKey().Type() {\n\t\t\treturn algorithmSignerWrapper{k}\n\t\t}\n\n\t\tk, ok := k.(AlgorithmSigner)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, a := range algorithmsForKeyFormat(k.PublicKey().Type()) {\n\t\t\tif algo == a {\n\t\t\t\treturn k\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *handshakeTransport) server(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) {\n\thostKey := pickHostKey(t.hostKeys, t.algorithms.hostKey)\n\tif hostKey == nil {\n\t\treturn nil, errors.New(\"ssh: internal error: negotiated unsupported signature type\")\n\t}\n\n\tr, err := kex.Server(t.conn, t.config.Rand, magics, hostKey, t.algorithms.hostKey)\n\treturn r, err\n}\n\nfunc (t *handshakeTransport) client(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) {\n\tresult, err := kex.Client(t.conn, t.config.Rand, magics)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\thostKey, err := ParsePublicKey(result.HostKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := verifyHostKeySignature(hostKey, t.algorithms.hostKey, result); err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = t.hostKeyCallback(t.dialAddress, t.remoteAddr, hostKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/internal/bcrypt_pbkdf/bcrypt_pbkdf.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package bcrypt_pbkdf implements bcrypt_pbkdf(3) from OpenBSD.\n//\n// See https://flak.tedunangst.com/post/bcrypt-pbkdf and\n// https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libutil/bcrypt_pbkdf.c.\npackage bcrypt_pbkdf\n\nimport (\n\t\"crypto/sha512\"\n\t\"errors\"\n\t\"golang.org/x/crypto/blowfish\"\n)\n\nconst blockSize = 32\n\n// Key derives a key from the password, salt and rounds count, returning a\n// []byte of length keyLen that can be used as cryptographic key.\nfunc Key(password, salt []byte, rounds, keyLen int) ([]byte, error) {\n\tif rounds < 1 {\n\t\treturn nil, errors.New(\"bcrypt_pbkdf: number of rounds is too small\")\n\t}\n\tif len(password) == 0 {\n\t\treturn nil, errors.New(\"bcrypt_pbkdf: empty password\")\n\t}\n\tif len(salt) == 0 || len(salt) > 1<<20 {\n\t\treturn nil, errors.New(\"bcrypt_pbkdf: bad salt length\")\n\t}\n\tif keyLen > 1024 {\n\t\treturn nil, errors.New(\"bcrypt_pbkdf: keyLen is too large\")\n\t}\n\n\tnumBlocks := (keyLen + blockSize - 1) / blockSize\n\tkey := make([]byte, numBlocks*blockSize)\n\n\th := sha512.New()\n\th.Write(password)\n\tshapass := h.Sum(nil)\n\n\tshasalt := make([]byte, 0, sha512.Size)\n\tcnt, tmp := make([]byte, 4), make([]byte, blockSize)\n\tfor block := 1; block <= numBlocks; block++ {\n\t\th.Reset()\n\t\th.Write(salt)\n\t\tcnt[0] = byte(block >> 24)\n\t\tcnt[1] = byte(block >> 16)\n\t\tcnt[2] = byte(block >> 8)\n\t\tcnt[3] = byte(block)\n\t\th.Write(cnt)\n\t\tbcryptHash(tmp, shapass, h.Sum(shasalt))\n\n\t\tout := make([]byte, blockSize)\n\t\tcopy(out, tmp)\n\t\tfor i := 2; i <= rounds; i++ {\n\t\t\th.Reset()\n\t\t\th.Write(tmp)\n\t\t\tbcryptHash(tmp, shapass, h.Sum(shasalt))\n\t\t\tfor j := 0; j < len(out); j++ {\n\t\t\t\tout[j] ^= tmp[j]\n\t\t\t}\n\t\t}\n\n\t\tfor i, v := range out {\n\t\t\tkey[i*numBlocks+(block-1)] = v\n\t\t}\n\t}\n\treturn key[:keyLen], nil\n}\n\nvar magic = []byte(\"OxychromaticBlowfishSwatDynamite\")\n\nfunc bcryptHash(out, shapass, shasalt []byte) {\n\tc, err := blowfish.NewSaltedCipher(shapass, shasalt)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tfor i := 0; i < 64; i++ {\n\t\tblowfish.ExpandKey(shasalt, c)\n\t\tblowfish.ExpandKey(shapass, c)\n\t}\n\tcopy(out, magic)\n\tfor i := 0; i < 32; i += 8 {\n\t\tfor j := 0; j < 64; j++ {\n\t\t\tc.Encrypt(out[i:i+8], out[i:i+8])\n\t\t}\n\t}\n\t// Swap bytes due to different endianness.\n\tfor i := 0; i < 32; i += 4 {\n\t\tout[i+3], out[i+2], out[i+1], out[i] = out[i], out[i+1], out[i+2], out[i+3]\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/kex.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"crypto\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rand\"\n\t\"crypto/subtle\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\n\t\"golang.org/x/crypto/curve25519\"\n)\n\nconst (\n\tkexAlgoDH1SHA1                = \"diffie-hellman-group1-sha1\"\n\tkexAlgoDH14SHA1               = \"diffie-hellman-group14-sha1\"\n\tkexAlgoDH14SHA256             = \"diffie-hellman-group14-sha256\"\n\tkexAlgoDH16SHA512             = \"diffie-hellman-group16-sha512\"\n\tkexAlgoECDH256                = \"ecdh-sha2-nistp256\"\n\tkexAlgoECDH384                = \"ecdh-sha2-nistp384\"\n\tkexAlgoECDH521                = \"ecdh-sha2-nistp521\"\n\tkexAlgoCurve25519SHA256LibSSH = \"curve25519-sha256@libssh.org\"\n\tkexAlgoCurve25519SHA256       = \"curve25519-sha256\"\n\n\t// For the following kex only the client half contains a production\n\t// ready implementation. The server half only consists of a minimal\n\t// implementation to satisfy the automated tests.\n\tkexAlgoDHGEXSHA1   = \"diffie-hellman-group-exchange-sha1\"\n\tkexAlgoDHGEXSHA256 = \"diffie-hellman-group-exchange-sha256\"\n)\n\n// kexResult captures the outcome of a key exchange.\ntype kexResult struct {\n\t// Session hash. See also RFC 4253, section 8.\n\tH []byte\n\n\t// Shared secret. See also RFC 4253, section 8.\n\tK []byte\n\n\t// Host key as hashed into H.\n\tHostKey []byte\n\n\t// Signature of H.\n\tSignature []byte\n\n\t// A cryptographic hash function that matches the security\n\t// level of the key exchange algorithm. It is used for\n\t// calculating H, and for deriving keys from H and K.\n\tHash crypto.Hash\n\n\t// The session ID, which is the first H computed. This is used\n\t// to derive key material inside the transport.\n\tSessionID []byte\n}\n\n// handshakeMagics contains data that is always included in the\n// session hash.\ntype handshakeMagics struct {\n\tclientVersion, serverVersion []byte\n\tclientKexInit, serverKexInit []byte\n}\n\nfunc (m *handshakeMagics) write(w io.Writer) {\n\twriteString(w, m.clientVersion)\n\twriteString(w, m.serverVersion)\n\twriteString(w, m.clientKexInit)\n\twriteString(w, m.serverKexInit)\n}\n\n// kexAlgorithm abstracts different key exchange algorithms.\ntype kexAlgorithm interface {\n\t// Server runs server-side key agreement, signing the result\n\t// with a hostkey. algo is the negotiated algorithm, and may\n\t// be a certificate type.\n\tServer(p packetConn, rand io.Reader, magics *handshakeMagics, s AlgorithmSigner, algo string) (*kexResult, error)\n\n\t// Client runs the client-side key agreement. Caller is\n\t// responsible for verifying the host key signature.\n\tClient(p packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error)\n}\n\n// dhGroup is a multiplicative group suitable for implementing Diffie-Hellman key agreement.\ntype dhGroup struct {\n\tg, p, pMinus1 *big.Int\n\thashFunc      crypto.Hash\n}\n\nfunc (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) {\n\tif theirPublic.Cmp(bigOne) <= 0 || theirPublic.Cmp(group.pMinus1) >= 0 {\n\t\treturn nil, errors.New(\"ssh: DH parameter out of bounds\")\n\t}\n\treturn new(big.Int).Exp(theirPublic, myPrivate, group.p), nil\n}\n\nfunc (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {\n\tvar x *big.Int\n\tfor {\n\t\tvar err error\n\t\tif x, err = rand.Int(randSource, group.pMinus1); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif x.Sign() > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tX := new(big.Int).Exp(group.g, x, group.p)\n\tkexDHInit := kexDHInitMsg{\n\t\tX: X,\n\t}\n\tif err := c.writePacket(Marshal(&kexDHInit)); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar kexDHReply kexDHReplyMsg\n\tif err = Unmarshal(packet, &kexDHReply); err != nil {\n\t\treturn nil, err\n\t}\n\n\tki, err := group.diffieHellman(kexDHReply.Y, x)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\th := group.hashFunc.New()\n\tmagics.write(h)\n\twriteString(h, kexDHReply.HostKey)\n\twriteInt(h, X)\n\twriteInt(h, kexDHReply.Y)\n\tK := make([]byte, intLength(ki))\n\tmarshalInt(K, ki)\n\th.Write(K)\n\n\treturn &kexResult{\n\t\tH:         h.Sum(nil),\n\t\tK:         K,\n\t\tHostKey:   kexDHReply.HostKey,\n\t\tSignature: kexDHReply.Signature,\n\t\tHash:      group.hashFunc,\n\t}, nil\n}\n\nfunc (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn\n\t}\n\tvar kexDHInit kexDHInitMsg\n\tif err = Unmarshal(packet, &kexDHInit); err != nil {\n\t\treturn\n\t}\n\n\tvar y *big.Int\n\tfor {\n\t\tif y, err = rand.Int(randSource, group.pMinus1); err != nil {\n\t\t\treturn\n\t\t}\n\t\tif y.Sign() > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tY := new(big.Int).Exp(group.g, y, group.p)\n\tki, err := group.diffieHellman(kexDHInit.X, y)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\thostKeyBytes := priv.PublicKey().Marshal()\n\n\th := group.hashFunc.New()\n\tmagics.write(h)\n\twriteString(h, hostKeyBytes)\n\twriteInt(h, kexDHInit.X)\n\twriteInt(h, Y)\n\n\tK := make([]byte, intLength(ki))\n\tmarshalInt(K, ki)\n\th.Write(K)\n\n\tH := h.Sum(nil)\n\n\t// H is already a hash, but the hostkey signing will apply its\n\t// own key-specific hash algorithm.\n\tsig, err := signAndMarshal(priv, randSource, H, algo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkexDHReply := kexDHReplyMsg{\n\t\tHostKey:   hostKeyBytes,\n\t\tY:         Y,\n\t\tSignature: sig,\n\t}\n\tpacket = Marshal(&kexDHReply)\n\n\terr = c.writePacket(packet)\n\treturn &kexResult{\n\t\tH:         H,\n\t\tK:         K,\n\t\tHostKey:   hostKeyBytes,\n\t\tSignature: sig,\n\t\tHash:      group.hashFunc,\n\t}, err\n}\n\n// ecdh performs Elliptic Curve Diffie-Hellman key exchange as\n// described in RFC 5656, section 4.\ntype ecdh struct {\n\tcurve elliptic.Curve\n}\n\nfunc (kex *ecdh) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {\n\tephKey, err := ecdsa.GenerateKey(kex.curve, rand)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkexInit := kexECDHInitMsg{\n\t\tClientPubKey: elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y),\n\t}\n\n\tserialized := Marshal(&kexInit)\n\tif err := c.writePacket(serialized); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar reply kexECDHReplyMsg\n\tif err = Unmarshal(packet, &reply); err != nil {\n\t\treturn nil, err\n\t}\n\n\tx, y, err := unmarshalECKey(kex.curve, reply.EphemeralPubKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// generate shared secret\n\tsecret, _ := kex.curve.ScalarMult(x, y, ephKey.D.Bytes())\n\n\th := ecHash(kex.curve).New()\n\tmagics.write(h)\n\twriteString(h, reply.HostKey)\n\twriteString(h, kexInit.ClientPubKey)\n\twriteString(h, reply.EphemeralPubKey)\n\tK := make([]byte, intLength(secret))\n\tmarshalInt(K, secret)\n\th.Write(K)\n\n\treturn &kexResult{\n\t\tH:         h.Sum(nil),\n\t\tK:         K,\n\t\tHostKey:   reply.HostKey,\n\t\tSignature: reply.Signature,\n\t\tHash:      ecHash(kex.curve),\n\t}, nil\n}\n\n// unmarshalECKey parses and checks an EC key.\nfunc unmarshalECKey(curve elliptic.Curve, pubkey []byte) (x, y *big.Int, err error) {\n\tx, y = elliptic.Unmarshal(curve, pubkey)\n\tif x == nil {\n\t\treturn nil, nil, errors.New(\"ssh: elliptic.Unmarshal failure\")\n\t}\n\tif !validateECPublicKey(curve, x, y) {\n\t\treturn nil, nil, errors.New(\"ssh: public key not on curve\")\n\t}\n\treturn x, y, nil\n}\n\n// validateECPublicKey checks that the point is a valid public key for\n// the given curve. See [SEC1], 3.2.2\nfunc validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool {\n\tif x.Sign() == 0 && y.Sign() == 0 {\n\t\treturn false\n\t}\n\n\tif x.Cmp(curve.Params().P) >= 0 {\n\t\treturn false\n\t}\n\n\tif y.Cmp(curve.Params().P) >= 0 {\n\t\treturn false\n\t}\n\n\tif !curve.IsOnCurve(x, y) {\n\t\treturn false\n\t}\n\n\t// We don't check if N * PubKey == 0, since\n\t//\n\t// - the NIST curves have cofactor = 1, so this is implicit.\n\t// (We don't foresee an implementation that supports non NIST\n\t// curves)\n\t//\n\t// - for ephemeral keys, we don't need to worry about small\n\t// subgroup attacks.\n\treturn true\n}\n\nfunc (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar kexECDHInit kexECDHInitMsg\n\tif err = Unmarshal(packet, &kexECDHInit); err != nil {\n\t\treturn nil, err\n\t}\n\n\tclientX, clientY, err := unmarshalECKey(kex.curve, kexECDHInit.ClientPubKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We could cache this key across multiple users/multiple\n\t// connection attempts, but the benefit is small. OpenSSH\n\t// generates a new key for each incoming connection.\n\tephKey, err := ecdsa.GenerateKey(kex.curve, rand)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\thostKeyBytes := priv.PublicKey().Marshal()\n\n\tserializedEphKey := elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y)\n\n\t// generate shared secret\n\tsecret, _ := kex.curve.ScalarMult(clientX, clientY, ephKey.D.Bytes())\n\n\th := ecHash(kex.curve).New()\n\tmagics.write(h)\n\twriteString(h, hostKeyBytes)\n\twriteString(h, kexECDHInit.ClientPubKey)\n\twriteString(h, serializedEphKey)\n\n\tK := make([]byte, intLength(secret))\n\tmarshalInt(K, secret)\n\th.Write(K)\n\n\tH := h.Sum(nil)\n\n\t// H is already a hash, but the hostkey signing will apply its\n\t// own key-specific hash algorithm.\n\tsig, err := signAndMarshal(priv, rand, H, algo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treply := kexECDHReplyMsg{\n\t\tEphemeralPubKey: serializedEphKey,\n\t\tHostKey:         hostKeyBytes,\n\t\tSignature:       sig,\n\t}\n\n\tserialized := Marshal(&reply)\n\tif err := c.writePacket(serialized); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &kexResult{\n\t\tH:         H,\n\t\tK:         K,\n\t\tHostKey:   reply.HostKey,\n\t\tSignature: sig,\n\t\tHash:      ecHash(kex.curve),\n\t}, nil\n}\n\n// ecHash returns the hash to match the given elliptic curve, see RFC\n// 5656, section 6.2.1\nfunc ecHash(curve elliptic.Curve) crypto.Hash {\n\tbitSize := curve.Params().BitSize\n\tswitch {\n\tcase bitSize <= 256:\n\t\treturn crypto.SHA256\n\tcase bitSize <= 384:\n\t\treturn crypto.SHA384\n\t}\n\treturn crypto.SHA512\n}\n\nvar kexAlgoMap = map[string]kexAlgorithm{}\n\nfunc init() {\n\t// This is the group called diffie-hellman-group1-sha1 in\n\t// RFC 4253 and Oakley Group 2 in RFC 2409.\n\tp, _ := new(big.Int).SetString(\"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF\", 16)\n\tkexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{\n\t\tg:        new(big.Int).SetInt64(2),\n\t\tp:        p,\n\t\tpMinus1:  new(big.Int).Sub(p, bigOne),\n\t\thashFunc: crypto.SHA1,\n\t}\n\n\t// This are the groups called diffie-hellman-group14-sha1 and\n\t// diffie-hellman-group14-sha256 in RFC 4253 and RFC 8268,\n\t// and Oakley Group 14 in RFC 3526.\n\tp, _ = new(big.Int).SetString(\"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF\", 16)\n\tgroup14 := &dhGroup{\n\t\tg:       new(big.Int).SetInt64(2),\n\t\tp:       p,\n\t\tpMinus1: new(big.Int).Sub(p, bigOne),\n\t}\n\n\tkexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{\n\t\tg: group14.g, p: group14.p, pMinus1: group14.pMinus1,\n\t\thashFunc: crypto.SHA1,\n\t}\n\tkexAlgoMap[kexAlgoDH14SHA256] = &dhGroup{\n\t\tg: group14.g, p: group14.p, pMinus1: group14.pMinus1,\n\t\thashFunc: crypto.SHA256,\n\t}\n\n\t// This is the group called diffie-hellman-group16-sha512 in RFC\n\t// 8268 and Oakley Group 16 in RFC 3526.\n\tp, _ = new(big.Int).SetString(\"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF\", 16)\n\n\tkexAlgoMap[kexAlgoDH16SHA512] = &dhGroup{\n\t\tg:        new(big.Int).SetInt64(2),\n\t\tp:        p,\n\t\tpMinus1:  new(big.Int).Sub(p, bigOne),\n\t\thashFunc: crypto.SHA512,\n\t}\n\n\tkexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()}\n\tkexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}\n\tkexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()}\n\tkexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{}\n\tkexAlgoMap[kexAlgoCurve25519SHA256LibSSH] = &curve25519sha256{}\n\tkexAlgoMap[kexAlgoDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1}\n\tkexAlgoMap[kexAlgoDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256}\n}\n\n// curve25519sha256 implements the curve25519-sha256 (formerly known as\n// curve25519-sha256@libssh.org) key exchange method, as described in RFC 8731.\ntype curve25519sha256 struct{}\n\ntype curve25519KeyPair struct {\n\tpriv [32]byte\n\tpub  [32]byte\n}\n\nfunc (kp *curve25519KeyPair) generate(rand io.Reader) error {\n\tif _, err := io.ReadFull(rand, kp.priv[:]); err != nil {\n\t\treturn err\n\t}\n\tcurve25519.ScalarBaseMult(&kp.pub, &kp.priv)\n\treturn nil\n}\n\n// curve25519Zeros is just an array of 32 zero bytes so that we have something\n// convenient to compare against in order to reject curve25519 points with the\n// wrong order.\nvar curve25519Zeros [32]byte\n\nfunc (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) {\n\tvar kp curve25519KeyPair\n\tif err := kp.generate(rand); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := c.writePacket(Marshal(&kexECDHInitMsg{kp.pub[:]})); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar reply kexECDHReplyMsg\n\tif err = Unmarshal(packet, &reply); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(reply.EphemeralPubKey) != 32 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong length\")\n\t}\n\n\tvar servPub, secret [32]byte\n\tcopy(servPub[:], reply.EphemeralPubKey)\n\tcurve25519.ScalarMult(&secret, &kp.priv, &servPub)\n\tif subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong order\")\n\t}\n\n\th := crypto.SHA256.New()\n\tmagics.write(h)\n\twriteString(h, reply.HostKey)\n\twriteString(h, kp.pub[:])\n\twriteString(h, reply.EphemeralPubKey)\n\n\tki := new(big.Int).SetBytes(secret[:])\n\tK := make([]byte, intLength(ki))\n\tmarshalInt(K, ki)\n\th.Write(K)\n\n\treturn &kexResult{\n\t\tH:         h.Sum(nil),\n\t\tK:         K,\n\t\tHostKey:   reply.HostKey,\n\t\tSignature: reply.Signature,\n\t\tHash:      crypto.SHA256,\n\t}, nil\n}\n\nfunc (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn\n\t}\n\tvar kexInit kexECDHInitMsg\n\tif err = Unmarshal(packet, &kexInit); err != nil {\n\t\treturn\n\t}\n\n\tif len(kexInit.ClientPubKey) != 32 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong length\")\n\t}\n\n\tvar kp curve25519KeyPair\n\tif err := kp.generate(rand); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar clientPub, secret [32]byte\n\tcopy(clientPub[:], kexInit.ClientPubKey)\n\tcurve25519.ScalarMult(&secret, &kp.priv, &clientPub)\n\tif subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 {\n\t\treturn nil, errors.New(\"ssh: peer's curve25519 public value has wrong order\")\n\t}\n\n\thostKeyBytes := priv.PublicKey().Marshal()\n\n\th := crypto.SHA256.New()\n\tmagics.write(h)\n\twriteString(h, hostKeyBytes)\n\twriteString(h, kexInit.ClientPubKey)\n\twriteString(h, kp.pub[:])\n\n\tki := new(big.Int).SetBytes(secret[:])\n\tK := make([]byte, intLength(ki))\n\tmarshalInt(K, ki)\n\th.Write(K)\n\n\tH := h.Sum(nil)\n\n\tsig, err := signAndMarshal(priv, rand, H, algo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treply := kexECDHReplyMsg{\n\t\tEphemeralPubKey: kp.pub[:],\n\t\tHostKey:         hostKeyBytes,\n\t\tSignature:       sig,\n\t}\n\tif err := c.writePacket(Marshal(&reply)); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &kexResult{\n\t\tH:         H,\n\t\tK:         K,\n\t\tHostKey:   hostKeyBytes,\n\t\tSignature: sig,\n\t\tHash:      crypto.SHA256,\n\t}, nil\n}\n\n// dhGEXSHA implements the diffie-hellman-group-exchange-sha1 and\n// diffie-hellman-group-exchange-sha256 key agreement protocols,\n// as described in RFC 4419\ntype dhGEXSHA struct {\n\thashFunc crypto.Hash\n}\n\nconst (\n\tdhGroupExchangeMinimumBits   = 2048\n\tdhGroupExchangePreferredBits = 2048\n\tdhGroupExchangeMaximumBits   = 8192\n)\n\nfunc (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {\n\t// Send GexRequest\n\tkexDHGexRequest := kexDHGexRequestMsg{\n\t\tMinBits:      dhGroupExchangeMinimumBits,\n\t\tPreferedBits: dhGroupExchangePreferredBits,\n\t\tMaxBits:      dhGroupExchangeMaximumBits,\n\t}\n\tif err := c.writePacket(Marshal(&kexDHGexRequest)); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Receive GexGroup\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar msg kexDHGexGroupMsg\n\tif err = Unmarshal(packet, &msg); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// reject if p's bit length < dhGroupExchangeMinimumBits or > dhGroupExchangeMaximumBits\n\tif msg.P.BitLen() < dhGroupExchangeMinimumBits || msg.P.BitLen() > dhGroupExchangeMaximumBits {\n\t\treturn nil, fmt.Errorf(\"ssh: server-generated gex p is out of range (%d bits)\", msg.P.BitLen())\n\t}\n\n\t// Check if g is safe by verifying that 1 < g < p-1\n\tpMinusOne := new(big.Int).Sub(msg.P, bigOne)\n\tif msg.G.Cmp(bigOne) <= 0 || msg.G.Cmp(pMinusOne) >= 0 {\n\t\treturn nil, fmt.Errorf(\"ssh: server provided gex g is not safe\")\n\t}\n\n\t// Send GexInit\n\tpHalf := new(big.Int).Rsh(msg.P, 1)\n\tx, err := rand.Int(randSource, pHalf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tX := new(big.Int).Exp(msg.G, x, msg.P)\n\tkexDHGexInit := kexDHGexInitMsg{\n\t\tX: X,\n\t}\n\tif err := c.writePacket(Marshal(&kexDHGexInit)); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Receive GexReply\n\tpacket, err = c.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar kexDHGexReply kexDHGexReplyMsg\n\tif err = Unmarshal(packet, &kexDHGexReply); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif kexDHGexReply.Y.Cmp(bigOne) <= 0 || kexDHGexReply.Y.Cmp(pMinusOne) >= 0 {\n\t\treturn nil, errors.New(\"ssh: DH parameter out of bounds\")\n\t}\n\tkInt := new(big.Int).Exp(kexDHGexReply.Y, x, msg.P)\n\n\t// Check if k is safe by verifying that k > 1 and k < p - 1\n\tif kInt.Cmp(bigOne) <= 0 || kInt.Cmp(pMinusOne) >= 0 {\n\t\treturn nil, fmt.Errorf(\"ssh: derived k is not safe\")\n\t}\n\n\th := gex.hashFunc.New()\n\tmagics.write(h)\n\twriteString(h, kexDHGexReply.HostKey)\n\tbinary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits))\n\tbinary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits))\n\tbinary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits))\n\twriteInt(h, msg.P)\n\twriteInt(h, msg.G)\n\twriteInt(h, X)\n\twriteInt(h, kexDHGexReply.Y)\n\tK := make([]byte, intLength(kInt))\n\tmarshalInt(K, kInt)\n\th.Write(K)\n\n\treturn &kexResult{\n\t\tH:         h.Sum(nil),\n\t\tK:         K,\n\t\tHostKey:   kexDHGexReply.HostKey,\n\t\tSignature: kexDHGexReply.Signature,\n\t\tHash:      gex.hashFunc,\n\t}, nil\n}\n\n// Server half implementation of the Diffie Hellman Key Exchange with SHA1 and SHA256.\n//\n// This is a minimal implementation to satisfy the automated tests.\nfunc (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) {\n\t// Receive GexRequest\n\tpacket, err := c.readPacket()\n\tif err != nil {\n\t\treturn\n\t}\n\tvar kexDHGexRequest kexDHGexRequestMsg\n\tif err = Unmarshal(packet, &kexDHGexRequest); err != nil {\n\t\treturn\n\t}\n\n\t// Send GexGroup\n\t// This is the group called diffie-hellman-group14-sha1 in RFC\n\t// 4253 and Oakley Group 14 in RFC 3526.\n\tp, _ := new(big.Int).SetString(\"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF\", 16)\n\tg := big.NewInt(2)\n\n\tmsg := &kexDHGexGroupMsg{\n\t\tP: p,\n\t\tG: g,\n\t}\n\tif err := c.writePacket(Marshal(msg)); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Receive GexInit\n\tpacket, err = c.readPacket()\n\tif err != nil {\n\t\treturn\n\t}\n\tvar kexDHGexInit kexDHGexInitMsg\n\tif err = Unmarshal(packet, &kexDHGexInit); err != nil {\n\t\treturn\n\t}\n\n\tpHalf := new(big.Int).Rsh(p, 1)\n\n\ty, err := rand.Int(randSource, pHalf)\n\tif err != nil {\n\t\treturn\n\t}\n\tY := new(big.Int).Exp(g, y, p)\n\n\tpMinusOne := new(big.Int).Sub(p, bigOne)\n\tif kexDHGexInit.X.Cmp(bigOne) <= 0 || kexDHGexInit.X.Cmp(pMinusOne) >= 0 {\n\t\treturn nil, errors.New(\"ssh: DH parameter out of bounds\")\n\t}\n\tkInt := new(big.Int).Exp(kexDHGexInit.X, y, p)\n\n\thostKeyBytes := priv.PublicKey().Marshal()\n\n\th := gex.hashFunc.New()\n\tmagics.write(h)\n\twriteString(h, hostKeyBytes)\n\tbinary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits))\n\tbinary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits))\n\tbinary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits))\n\twriteInt(h, p)\n\twriteInt(h, g)\n\twriteInt(h, kexDHGexInit.X)\n\twriteInt(h, Y)\n\n\tK := make([]byte, intLength(kInt))\n\tmarshalInt(K, kInt)\n\th.Write(K)\n\n\tH := h.Sum(nil)\n\n\t// H is already a hash, but the hostkey signing will apply its\n\t// own key-specific hash algorithm.\n\tsig, err := signAndMarshal(priv, randSource, H, algo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkexDHGexReply := kexDHGexReplyMsg{\n\t\tHostKey:   hostKeyBytes,\n\t\tY:         Y,\n\t\tSignature: sig,\n\t}\n\tpacket = Marshal(&kexDHGexReply)\n\n\terr = c.writePacket(packet)\n\n\treturn &kexResult{\n\t\tH:         H,\n\t\tK:         K,\n\t\tHostKey:   hostKeyBytes,\n\t\tSignature: sig,\n\t\tHash:      gex.hashFunc,\n\t}, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/keys.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"bytes\"\n\t\"crypto\"\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/ed25519\"\n\t\"crypto/elliptic\"\n\t\"crypto/md5\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha256\"\n\t\"crypto/x509\"\n\t\"encoding/asn1\"\n\t\"encoding/base64\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\t\"strings\"\n\n\t\"golang.org/x/crypto/ssh/internal/bcrypt_pbkdf\"\n)\n\n// Public key algorithms names. These values can appear in PublicKey.Type,\n// ClientConfig.HostKeyAlgorithms, Signature.Format, or as AlgorithmSigner\n// arguments.\nconst (\n\tKeyAlgoRSA        = \"ssh-rsa\"\n\tKeyAlgoDSA        = \"ssh-dss\"\n\tKeyAlgoECDSA256   = \"ecdsa-sha2-nistp256\"\n\tKeyAlgoSKECDSA256 = \"sk-ecdsa-sha2-nistp256@openssh.com\"\n\tKeyAlgoECDSA384   = \"ecdsa-sha2-nistp384\"\n\tKeyAlgoECDSA521   = \"ecdsa-sha2-nistp521\"\n\tKeyAlgoED25519    = \"ssh-ed25519\"\n\tKeyAlgoSKED25519  = \"sk-ssh-ed25519@openssh.com\"\n\n\t// KeyAlgoRSASHA256 and KeyAlgoRSASHA512 are only public key algorithms, not\n\t// public key formats, so they can't appear as a PublicKey.Type. The\n\t// corresponding PublicKey.Type is KeyAlgoRSA. See RFC 8332, Section 2.\n\tKeyAlgoRSASHA256 = \"rsa-sha2-256\"\n\tKeyAlgoRSASHA512 = \"rsa-sha2-512\"\n)\n\nconst (\n\t// Deprecated: use KeyAlgoRSA.\n\tSigAlgoRSA = KeyAlgoRSA\n\t// Deprecated: use KeyAlgoRSASHA256.\n\tSigAlgoRSASHA2256 = KeyAlgoRSASHA256\n\t// Deprecated: use KeyAlgoRSASHA512.\n\tSigAlgoRSASHA2512 = KeyAlgoRSASHA512\n)\n\n// parsePubKey parses a public key of the given algorithm.\n// Use ParsePublicKey for keys with prepended algorithm.\nfunc parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err error) {\n\tswitch algo {\n\tcase KeyAlgoRSA:\n\t\treturn parseRSA(in)\n\tcase KeyAlgoDSA:\n\t\treturn parseDSA(in)\n\tcase KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521:\n\t\treturn parseECDSA(in)\n\tcase KeyAlgoSKECDSA256:\n\t\treturn parseSKECDSA(in)\n\tcase KeyAlgoED25519:\n\t\treturn parseED25519(in)\n\tcase KeyAlgoSKED25519:\n\t\treturn parseSKEd25519(in)\n\tcase CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01:\n\t\tcert, err := parseCert(in, certKeyAlgoNames[algo])\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t\treturn cert, nil, nil\n\t}\n\treturn nil, nil, fmt.Errorf(\"ssh: unknown key algorithm: %v\", algo)\n}\n\n// parseAuthorizedKey parses a public key in OpenSSH authorized_keys format\n// (see sshd(8) manual page) once the options and key type fields have been\n// removed.\nfunc parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) {\n\tin = bytes.TrimSpace(in)\n\n\ti := bytes.IndexAny(in, \" \\t\")\n\tif i == -1 {\n\t\ti = len(in)\n\t}\n\tbase64Key := in[:i]\n\n\tkey := make([]byte, base64.StdEncoding.DecodedLen(len(base64Key)))\n\tn, err := base64.StdEncoding.Decode(key, base64Key)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tkey = key[:n]\n\tout, err = ParsePublicKey(key)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tcomment = string(bytes.TrimSpace(in[i:]))\n\treturn out, comment, nil\n}\n\n// ParseKnownHosts parses an entry in the format of the known_hosts file.\n//\n// The known_hosts format is documented in the sshd(8) manual page. This\n// function will parse a single entry from in. On successful return, marker\n// will contain the optional marker value (i.e. \"cert-authority\" or \"revoked\")\n// or else be empty, hosts will contain the hosts that this entry matches,\n// pubKey will contain the public key and comment will contain any trailing\n// comment at the end of the line. See the sshd(8) manual page for the various\n// forms that a host string can take.\n//\n// The unparsed remainder of the input will be returned in rest. This function\n// can be called repeatedly to parse multiple entries.\n//\n// If no entries were found in the input then err will be io.EOF. Otherwise a\n// non-nil err value indicates a parse error.\nfunc ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey, comment string, rest []byte, err error) {\n\tfor len(in) > 0 {\n\t\tend := bytes.IndexByte(in, '\\n')\n\t\tif end != -1 {\n\t\t\trest = in[end+1:]\n\t\t\tin = in[:end]\n\t\t} else {\n\t\t\trest = nil\n\t\t}\n\n\t\tend = bytes.IndexByte(in, '\\r')\n\t\tif end != -1 {\n\t\t\tin = in[:end]\n\t\t}\n\n\t\tin = bytes.TrimSpace(in)\n\t\tif len(in) == 0 || in[0] == '#' {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\ti := bytes.IndexAny(in, \" \\t\")\n\t\tif i == -1 {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\t// Strip out the beginning of the known_host key.\n\t\t// This is either an optional marker or a (set of) hostname(s).\n\t\tkeyFields := bytes.Fields(in)\n\t\tif len(keyFields) < 3 || len(keyFields) > 5 {\n\t\t\treturn \"\", nil, nil, \"\", nil, errors.New(\"ssh: invalid entry in known_hosts data\")\n\t\t}\n\n\t\t// keyFields[0] is either \"@cert-authority\", \"@revoked\" or a comma separated\n\t\t// list of hosts\n\t\tmarker := \"\"\n\t\tif keyFields[0][0] == '@' {\n\t\t\tmarker = string(keyFields[0][1:])\n\t\t\tkeyFields = keyFields[1:]\n\t\t}\n\n\t\thosts := string(keyFields[0])\n\t\t// keyFields[1] contains the key type (e.g. “ssh-rsa”).\n\t\t// However, that information is duplicated inside the\n\t\t// base64-encoded key and so is ignored here.\n\n\t\tkey := bytes.Join(keyFields[2:], []byte(\" \"))\n\t\tif pubKey, comment, err = parseAuthorizedKey(key); err != nil {\n\t\t\treturn \"\", nil, nil, \"\", nil, err\n\t\t}\n\n\t\treturn marker, strings.Split(hosts, \",\"), pubKey, comment, rest, nil\n\t}\n\n\treturn \"\", nil, nil, \"\", nil, io.EOF\n}\n\n// ParseAuthorizedKey parses a public key from an authorized_keys\n// file used in OpenSSH according to the sshd(8) manual page.\nfunc ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) {\n\tfor len(in) > 0 {\n\t\tend := bytes.IndexByte(in, '\\n')\n\t\tif end != -1 {\n\t\t\trest = in[end+1:]\n\t\t\tin = in[:end]\n\t\t} else {\n\t\t\trest = nil\n\t\t}\n\n\t\tend = bytes.IndexByte(in, '\\r')\n\t\tif end != -1 {\n\t\t\tin = in[:end]\n\t\t}\n\n\t\tin = bytes.TrimSpace(in)\n\t\tif len(in) == 0 || in[0] == '#' {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\ti := bytes.IndexAny(in, \" \\t\")\n\t\tif i == -1 {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\tif out, comment, err = parseAuthorizedKey(in[i:]); err == nil {\n\t\t\treturn out, comment, options, rest, nil\n\t\t}\n\n\t\t// No key type recognised. Maybe there's an options field at\n\t\t// the beginning.\n\t\tvar b byte\n\t\tinQuote := false\n\t\tvar candidateOptions []string\n\t\toptionStart := 0\n\t\tfor i, b = range in {\n\t\t\tisEnd := !inQuote && (b == ' ' || b == '\\t')\n\t\t\tif (b == ',' && !inQuote) || isEnd {\n\t\t\t\tif i-optionStart > 0 {\n\t\t\t\t\tcandidateOptions = append(candidateOptions, string(in[optionStart:i]))\n\t\t\t\t}\n\t\t\t\toptionStart = i + 1\n\t\t\t}\n\t\t\tif isEnd {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif b == '\"' && (i == 0 || (i > 0 && in[i-1] != '\\\\')) {\n\t\t\t\tinQuote = !inQuote\n\t\t\t}\n\t\t}\n\t\tfor i < len(in) && (in[i] == ' ' || in[i] == '\\t') {\n\t\t\ti++\n\t\t}\n\t\tif i == len(in) {\n\t\t\t// Invalid line: unmatched quote\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\tin = in[i:]\n\t\ti = bytes.IndexAny(in, \" \\t\")\n\t\tif i == -1 {\n\t\t\tin = rest\n\t\t\tcontinue\n\t\t}\n\n\t\tif out, comment, err = parseAuthorizedKey(in[i:]); err == nil {\n\t\t\toptions = candidateOptions\n\t\t\treturn out, comment, options, rest, nil\n\t\t}\n\n\t\tin = rest\n\t\tcontinue\n\t}\n\n\treturn nil, \"\", nil, nil, errors.New(\"ssh: no key found\")\n}\n\n// ParsePublicKey parses an SSH public key formatted for use in\n// the SSH wire protocol according to RFC 4253, section 6.6.\nfunc ParsePublicKey(in []byte) (out PublicKey, err error) {\n\talgo, in, ok := parseString(in)\n\tif !ok {\n\t\treturn nil, errShortRead\n\t}\n\tvar rest []byte\n\tout, rest, err = parsePubKey(in, string(algo))\n\tif len(rest) > 0 {\n\t\treturn nil, errors.New(\"ssh: trailing junk in public key\")\n\t}\n\n\treturn out, err\n}\n\n// MarshalAuthorizedKey serializes key for inclusion in an OpenSSH\n// authorized_keys file. The return value ends with newline.\nfunc MarshalAuthorizedKey(key PublicKey) []byte {\n\tb := &bytes.Buffer{}\n\tb.WriteString(key.Type())\n\tb.WriteByte(' ')\n\te := base64.NewEncoder(base64.StdEncoding, b)\n\te.Write(key.Marshal())\n\te.Close()\n\tb.WriteByte('\\n')\n\treturn b.Bytes()\n}\n\n// MarshalPrivateKey returns a PEM block with the private key serialized in the\n// OpenSSH format.\nfunc MarshalPrivateKey(key crypto.PrivateKey, comment string) (*pem.Block, error) {\n\treturn marshalOpenSSHPrivateKey(key, comment, unencryptedOpenSSHMarshaler)\n}\n\n// MarshalPrivateKeyWithPassphrase returns a PEM block holding the encrypted\n// private key serialized in the OpenSSH format.\nfunc MarshalPrivateKeyWithPassphrase(key crypto.PrivateKey, comment string, passphrase []byte) (*pem.Block, error) {\n\treturn marshalOpenSSHPrivateKey(key, comment, passphraseProtectedOpenSSHMarshaler(passphrase))\n}\n\n// PublicKey represents a public key using an unspecified algorithm.\n//\n// Some PublicKeys provided by this package also implement CryptoPublicKey.\ntype PublicKey interface {\n\t// Type returns the key format name, e.g. \"ssh-rsa\".\n\tType() string\n\n\t// Marshal returns the serialized key data in SSH wire format, with the name\n\t// prefix. To unmarshal the returned data, use the ParsePublicKey function.\n\tMarshal() []byte\n\n\t// Verify that sig is a signature on the given data using this key. This\n\t// method will hash the data appropriately first. sig.Format is allowed to\n\t// be any signature algorithm compatible with the key type, the caller\n\t// should check if it has more stringent requirements.\n\tVerify(data []byte, sig *Signature) error\n}\n\n// CryptoPublicKey, if implemented by a PublicKey,\n// returns the underlying crypto.PublicKey form of the key.\ntype CryptoPublicKey interface {\n\tCryptoPublicKey() crypto.PublicKey\n}\n\n// A Signer can create signatures that verify against a public key.\n//\n// Some Signers provided by this package also implement MultiAlgorithmSigner.\ntype Signer interface {\n\t// PublicKey returns the associated PublicKey.\n\tPublicKey() PublicKey\n\n\t// Sign returns a signature for the given data. This method will hash the\n\t// data appropriately first. The signature algorithm is expected to match\n\t// the key format returned by the PublicKey.Type method (and not to be any\n\t// alternative algorithm supported by the key format).\n\tSign(rand io.Reader, data []byte) (*Signature, error)\n}\n\n// An AlgorithmSigner is a Signer that also supports specifying an algorithm to\n// use for signing.\n//\n// An AlgorithmSigner can't advertise the algorithms it supports, unless it also\n// implements MultiAlgorithmSigner, so it should be prepared to be invoked with\n// every algorithm supported by the public key format.\ntype AlgorithmSigner interface {\n\tSigner\n\n\t// SignWithAlgorithm is like Signer.Sign, but allows specifying a desired\n\t// signing algorithm. Callers may pass an empty string for the algorithm in\n\t// which case the AlgorithmSigner will use a default algorithm. This default\n\t// doesn't currently control any behavior in this package.\n\tSignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error)\n}\n\n// MultiAlgorithmSigner is an AlgorithmSigner that also reports the algorithms\n// supported by that signer.\ntype MultiAlgorithmSigner interface {\n\tAlgorithmSigner\n\n\t// Algorithms returns the available algorithms in preference order. The list\n\t// must not be empty, and it must not include certificate types.\n\tAlgorithms() []string\n}\n\n// NewSignerWithAlgorithms returns a signer restricted to the specified\n// algorithms. The algorithms must be set in preference order. The list must not\n// be empty, and it must not include certificate types. An error is returned if\n// the specified algorithms are incompatible with the public key type.\nfunc NewSignerWithAlgorithms(signer AlgorithmSigner, algorithms []string) (MultiAlgorithmSigner, error) {\n\tif len(algorithms) == 0 {\n\t\treturn nil, errors.New(\"ssh: please specify at least one valid signing algorithm\")\n\t}\n\tvar signerAlgos []string\n\tsupportedAlgos := algorithmsForKeyFormat(underlyingAlgo(signer.PublicKey().Type()))\n\tif s, ok := signer.(*multiAlgorithmSigner); ok {\n\t\tsignerAlgos = s.Algorithms()\n\t} else {\n\t\tsignerAlgos = supportedAlgos\n\t}\n\n\tfor _, algo := range algorithms {\n\t\tif !contains(supportedAlgos, algo) {\n\t\t\treturn nil, fmt.Errorf(\"ssh: algorithm %q is not supported for key type %q\",\n\t\t\t\talgo, signer.PublicKey().Type())\n\t\t}\n\t\tif !contains(signerAlgos, algo) {\n\t\t\treturn nil, fmt.Errorf(\"ssh: algorithm %q is restricted for the provided signer\", algo)\n\t\t}\n\t}\n\treturn &multiAlgorithmSigner{\n\t\tAlgorithmSigner:     signer,\n\t\tsupportedAlgorithms: algorithms,\n\t}, nil\n}\n\ntype multiAlgorithmSigner struct {\n\tAlgorithmSigner\n\tsupportedAlgorithms []string\n}\n\nfunc (s *multiAlgorithmSigner) Algorithms() []string {\n\treturn s.supportedAlgorithms\n}\n\nfunc (s *multiAlgorithmSigner) isAlgorithmSupported(algorithm string) bool {\n\tif algorithm == \"\" {\n\t\talgorithm = underlyingAlgo(s.PublicKey().Type())\n\t}\n\tfor _, algo := range s.supportedAlgorithms {\n\t\tif algorithm == algo {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (s *multiAlgorithmSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {\n\tif !s.isAlgorithmSupported(algorithm) {\n\t\treturn nil, fmt.Errorf(\"ssh: algorithm %q is not supported: %v\", algorithm, s.supportedAlgorithms)\n\t}\n\treturn s.AlgorithmSigner.SignWithAlgorithm(rand, data, algorithm)\n}\n\ntype rsaPublicKey rsa.PublicKey\n\nfunc (r *rsaPublicKey) Type() string {\n\treturn \"ssh-rsa\"\n}\n\n// parseRSA parses an RSA key according to RFC 4253, section 6.6.\nfunc parseRSA(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tE    *big.Int\n\t\tN    *big.Int\n\t\tRest []byte `ssh:\"rest\"`\n\t}\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif w.E.BitLen() > 24 {\n\t\treturn nil, nil, errors.New(\"ssh: exponent too large\")\n\t}\n\te := w.E.Int64()\n\tif e < 3 || e&1 == 0 {\n\t\treturn nil, nil, errors.New(\"ssh: incorrect exponent\")\n\t}\n\n\tvar key rsa.PublicKey\n\tkey.E = int(e)\n\tkey.N = w.N\n\treturn (*rsaPublicKey)(&key), w.Rest, nil\n}\n\nfunc (r *rsaPublicKey) Marshal() []byte {\n\te := new(big.Int).SetInt64(int64(r.E))\n\t// RSA publickey struct layout should match the struct used by\n\t// parseRSACert in the x/crypto/ssh/agent package.\n\twirekey := struct {\n\t\tName string\n\t\tE    *big.Int\n\t\tN    *big.Int\n\t}{\n\t\tKeyAlgoRSA,\n\t\te,\n\t\tr.N,\n\t}\n\treturn Marshal(&wirekey)\n}\n\nfunc (r *rsaPublicKey) Verify(data []byte, sig *Signature) error {\n\tsupportedAlgos := algorithmsForKeyFormat(r.Type())\n\tif !contains(supportedAlgos, sig.Format) {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, r.Type())\n\t}\n\thash := hashFuncs[sig.Format]\n\th := hash.New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\n\t// Signatures in PKCS1v15 must match the key's modulus in\n\t// length. However with SSH, some signers provide RSA\n\t// signatures which are missing the MSB 0's of the bignum\n\t// represented. With ssh-rsa signatures, this is encouraged by\n\t// the spec (even though e.g. OpenSSH will give the full\n\t// length unconditionally). With rsa-sha2-* signatures, the\n\t// verifier is allowed to support these, even though they are\n\t// out of spec. See RFC 4253 Section 6.6 for ssh-rsa and RFC\n\t// 8332 Section 3 for rsa-sha2-* details.\n\t//\n\t// In practice:\n\t// * OpenSSH always allows \"short\" signatures:\n\t//   https://github.com/openssh/openssh-portable/blob/V_9_8_P1/ssh-rsa.c#L526\n\t//   but always generates padded signatures:\n\t//   https://github.com/openssh/openssh-portable/blob/V_9_8_P1/ssh-rsa.c#L439\n\t//\n\t// * PuTTY versions 0.81 and earlier will generate short\n\t//   signatures for all RSA signature variants. Note that\n\t//   PuTTY is embedded in other software, such as WinSCP and\n\t//   FileZilla. At the time of writing, a patch has been\n\t//   applied to PuTTY to generate padded signatures for\n\t//   rsa-sha2-*, but not yet released:\n\t//   https://git.tartarus.org/?p=simon/putty.git;a=commitdiff;h=a5bcf3d384e1bf15a51a6923c3724cbbee022d8e\n\t//\n\t// * SSH.NET versions 2024.0.0 and earlier will generate short\n\t//   signatures for all RSA signature variants, fixed in 2024.1.0:\n\t//   https://github.com/sshnet/SSH.NET/releases/tag/2024.1.0\n\t//\n\t// As a result, we pad these up to the key size by inserting\n\t// leading 0's.\n\t//\n\t// Note that support for short signatures with rsa-sha2-* may\n\t// be removed in the future due to such signatures not being\n\t// allowed by the spec.\n\tblob := sig.Blob\n\tkeySize := (*rsa.PublicKey)(r).Size()\n\tif len(blob) < keySize {\n\t\tpadded := make([]byte, keySize)\n\t\tcopy(padded[keySize-len(blob):], blob)\n\t\tblob = padded\n\t}\n\treturn rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), hash, digest, blob)\n}\n\nfunc (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn (*rsa.PublicKey)(r)\n}\n\ntype dsaPublicKey dsa.PublicKey\n\nfunc (k *dsaPublicKey) Type() string {\n\treturn \"ssh-dss\"\n}\n\nfunc checkDSAParams(param *dsa.Parameters) error {\n\t// SSH specifies FIPS 186-2, which only provided a single size\n\t// (1024 bits) DSA key. FIPS 186-3 allows for larger key\n\t// sizes, which would confuse SSH.\n\tif l := param.P.BitLen(); l != 1024 {\n\t\treturn fmt.Errorf(\"ssh: unsupported DSA key size %d\", l)\n\t}\n\n\treturn nil\n}\n\n// parseDSA parses an DSA key according to RFC 4253, section 6.6.\nfunc parseDSA(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tP, Q, G, Y *big.Int\n\t\tRest       []byte `ssh:\"rest\"`\n\t}\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tparam := dsa.Parameters{\n\t\tP: w.P,\n\t\tQ: w.Q,\n\t\tG: w.G,\n\t}\n\tif err := checkDSAParams(&param); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tkey := &dsaPublicKey{\n\t\tParameters: param,\n\t\tY:          w.Y,\n\t}\n\treturn key, w.Rest, nil\n}\n\nfunc (k *dsaPublicKey) Marshal() []byte {\n\t// DSA publickey struct layout should match the struct used by\n\t// parseDSACert in the x/crypto/ssh/agent package.\n\tw := struct {\n\t\tName       string\n\t\tP, Q, G, Y *big.Int\n\t}{\n\t\tk.Type(),\n\t\tk.P,\n\t\tk.Q,\n\t\tk.G,\n\t\tk.Y,\n\t}\n\n\treturn Marshal(&w)\n}\n\nfunc (k *dsaPublicKey) Verify(data []byte, sig *Signature) error {\n\tif sig.Format != k.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, k.Type())\n\t}\n\th := hashFuncs[sig.Format].New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\n\t// Per RFC 4253, section 6.6,\n\t// The value for 'dss_signature_blob' is encoded as a string containing\n\t// r, followed by s (which are 160-bit integers, without lengths or\n\t// padding, unsigned, and in network byte order).\n\t// For DSS purposes, sig.Blob should be exactly 40 bytes in length.\n\tif len(sig.Blob) != 40 {\n\t\treturn errors.New(\"ssh: DSA signature parse error\")\n\t}\n\tr := new(big.Int).SetBytes(sig.Blob[:20])\n\ts := new(big.Int).SetBytes(sig.Blob[20:])\n\tif dsa.Verify((*dsa.PublicKey)(k), digest, r, s) {\n\t\treturn nil\n\t}\n\treturn errors.New(\"ssh: signature did not verify\")\n}\n\nfunc (k *dsaPublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn (*dsa.PublicKey)(k)\n}\n\ntype dsaPrivateKey struct {\n\t*dsa.PrivateKey\n}\n\nfunc (k *dsaPrivateKey) PublicKey() PublicKey {\n\treturn (*dsaPublicKey)(&k.PrivateKey.PublicKey)\n}\n\nfunc (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) {\n\treturn k.SignWithAlgorithm(rand, data, k.PublicKey().Type())\n}\n\nfunc (k *dsaPrivateKey) Algorithms() []string {\n\treturn []string{k.PublicKey().Type()}\n}\n\nfunc (k *dsaPrivateKey) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {\n\tif algorithm != \"\" && algorithm != k.PublicKey().Type() {\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported signature algorithm %s\", algorithm)\n\t}\n\n\th := hashFuncs[k.PublicKey().Type()].New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\tr, s, err := dsa.Sign(rand, k.PrivateKey, digest)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tsig := make([]byte, 40)\n\trb := r.Bytes()\n\tsb := s.Bytes()\n\n\tcopy(sig[20-len(rb):20], rb)\n\tcopy(sig[40-len(sb):], sb)\n\n\treturn &Signature{\n\t\tFormat: k.PublicKey().Type(),\n\t\tBlob:   sig,\n\t}, nil\n}\n\ntype ecdsaPublicKey ecdsa.PublicKey\n\nfunc (k *ecdsaPublicKey) Type() string {\n\treturn \"ecdsa-sha2-\" + k.nistID()\n}\n\nfunc (k *ecdsaPublicKey) nistID() string {\n\tswitch k.Params().BitSize {\n\tcase 256:\n\t\treturn \"nistp256\"\n\tcase 384:\n\t\treturn \"nistp384\"\n\tcase 521:\n\t\treturn \"nistp521\"\n\t}\n\tpanic(\"ssh: unsupported ecdsa key size\")\n}\n\ntype ed25519PublicKey ed25519.PublicKey\n\nfunc (k ed25519PublicKey) Type() string {\n\treturn KeyAlgoED25519\n}\n\nfunc parseED25519(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tKeyBytes []byte\n\t\tRest     []byte `ssh:\"rest\"`\n\t}\n\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif l := len(w.KeyBytes); l != ed25519.PublicKeySize {\n\t\treturn nil, nil, fmt.Errorf(\"invalid size %d for Ed25519 public key\", l)\n\t}\n\n\treturn ed25519PublicKey(w.KeyBytes), w.Rest, nil\n}\n\nfunc (k ed25519PublicKey) Marshal() []byte {\n\tw := struct {\n\t\tName     string\n\t\tKeyBytes []byte\n\t}{\n\t\tKeyAlgoED25519,\n\t\t[]byte(k),\n\t}\n\treturn Marshal(&w)\n}\n\nfunc (k ed25519PublicKey) Verify(b []byte, sig *Signature) error {\n\tif sig.Format != k.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, k.Type())\n\t}\n\tif l := len(k); l != ed25519.PublicKeySize {\n\t\treturn fmt.Errorf(\"ssh: invalid size %d for Ed25519 public key\", l)\n\t}\n\n\tif ok := ed25519.Verify(ed25519.PublicKey(k), b, sig.Blob); !ok {\n\t\treturn errors.New(\"ssh: signature did not verify\")\n\t}\n\n\treturn nil\n}\n\nfunc (k ed25519PublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn ed25519.PublicKey(k)\n}\n\nfunc supportedEllipticCurve(curve elliptic.Curve) bool {\n\treturn curve == elliptic.P256() || curve == elliptic.P384() || curve == elliptic.P521()\n}\n\n// parseECDSA parses an ECDSA key according to RFC 5656, section 3.1.\nfunc parseECDSA(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tCurve    string\n\t\tKeyBytes []byte\n\t\tRest     []byte `ssh:\"rest\"`\n\t}\n\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tkey := new(ecdsa.PublicKey)\n\n\tswitch w.Curve {\n\tcase \"nistp256\":\n\t\tkey.Curve = elliptic.P256()\n\tcase \"nistp384\":\n\t\tkey.Curve = elliptic.P384()\n\tcase \"nistp521\":\n\t\tkey.Curve = elliptic.P521()\n\tdefault:\n\t\treturn nil, nil, errors.New(\"ssh: unsupported curve\")\n\t}\n\n\tkey.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes)\n\tif key.X == nil || key.Y == nil {\n\t\treturn nil, nil, errors.New(\"ssh: invalid curve point\")\n\t}\n\treturn (*ecdsaPublicKey)(key), w.Rest, nil\n}\n\nfunc (k *ecdsaPublicKey) Marshal() []byte {\n\t// See RFC 5656, section 3.1.\n\tkeyBytes := elliptic.Marshal(k.Curve, k.X, k.Y)\n\t// ECDSA publickey struct layout should match the struct used by\n\t// parseECDSACert in the x/crypto/ssh/agent package.\n\tw := struct {\n\t\tName string\n\t\tID   string\n\t\tKey  []byte\n\t}{\n\t\tk.Type(),\n\t\tk.nistID(),\n\t\tkeyBytes,\n\t}\n\n\treturn Marshal(&w)\n}\n\nfunc (k *ecdsaPublicKey) Verify(data []byte, sig *Signature) error {\n\tif sig.Format != k.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, k.Type())\n\t}\n\n\th := hashFuncs[sig.Format].New()\n\th.Write(data)\n\tdigest := h.Sum(nil)\n\n\t// Per RFC 5656, section 3.1.2,\n\t// The ecdsa_signature_blob value has the following specific encoding:\n\t//    mpint    r\n\t//    mpint    s\n\tvar ecSig struct {\n\t\tR *big.Int\n\t\tS *big.Int\n\t}\n\n\tif err := Unmarshal(sig.Blob, &ecSig); err != nil {\n\t\treturn err\n\t}\n\n\tif ecdsa.Verify((*ecdsa.PublicKey)(k), digest, ecSig.R, ecSig.S) {\n\t\treturn nil\n\t}\n\treturn errors.New(\"ssh: signature did not verify\")\n}\n\nfunc (k *ecdsaPublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn (*ecdsa.PublicKey)(k)\n}\n\n// skFields holds the additional fields present in U2F/FIDO2 signatures.\n// See openssh/PROTOCOL.u2f 'SSH U2F Signatures' for details.\ntype skFields struct {\n\t// Flags contains U2F/FIDO2 flags such as 'user present'\n\tFlags byte\n\t// Counter is a monotonic signature counter which can be\n\t// used to detect concurrent use of a private key, should\n\t// it be extracted from hardware.\n\tCounter uint32\n}\n\ntype skECDSAPublicKey struct {\n\t// application is a URL-like string, typically \"ssh:\" for SSH.\n\t// see openssh/PROTOCOL.u2f for details.\n\tapplication string\n\tecdsa.PublicKey\n}\n\nfunc (k *skECDSAPublicKey) Type() string {\n\treturn KeyAlgoSKECDSA256\n}\n\nfunc (k *skECDSAPublicKey) nistID() string {\n\treturn \"nistp256\"\n}\n\nfunc parseSKECDSA(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tCurve       string\n\t\tKeyBytes    []byte\n\t\tApplication string\n\t\tRest        []byte `ssh:\"rest\"`\n\t}\n\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tkey := new(skECDSAPublicKey)\n\tkey.application = w.Application\n\n\tif w.Curve != \"nistp256\" {\n\t\treturn nil, nil, errors.New(\"ssh: unsupported curve\")\n\t}\n\tkey.Curve = elliptic.P256()\n\n\tkey.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes)\n\tif key.X == nil || key.Y == nil {\n\t\treturn nil, nil, errors.New(\"ssh: invalid curve point\")\n\t}\n\n\treturn key, w.Rest, nil\n}\n\nfunc (k *skECDSAPublicKey) Marshal() []byte {\n\t// See RFC 5656, section 3.1.\n\tkeyBytes := elliptic.Marshal(k.Curve, k.X, k.Y)\n\tw := struct {\n\t\tName        string\n\t\tID          string\n\t\tKey         []byte\n\t\tApplication string\n\t}{\n\t\tk.Type(),\n\t\tk.nistID(),\n\t\tkeyBytes,\n\t\tk.application,\n\t}\n\n\treturn Marshal(&w)\n}\n\nfunc (k *skECDSAPublicKey) Verify(data []byte, sig *Signature) error {\n\tif sig.Format != k.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, k.Type())\n\t}\n\n\th := hashFuncs[sig.Format].New()\n\th.Write([]byte(k.application))\n\tappDigest := h.Sum(nil)\n\n\th.Reset()\n\th.Write(data)\n\tdataDigest := h.Sum(nil)\n\n\tvar ecSig struct {\n\t\tR *big.Int\n\t\tS *big.Int\n\t}\n\tif err := Unmarshal(sig.Blob, &ecSig); err != nil {\n\t\treturn err\n\t}\n\n\tvar skf skFields\n\tif err := Unmarshal(sig.Rest, &skf); err != nil {\n\t\treturn err\n\t}\n\n\tblob := struct {\n\t\tApplicationDigest []byte `ssh:\"rest\"`\n\t\tFlags             byte\n\t\tCounter           uint32\n\t\tMessageDigest     []byte `ssh:\"rest\"`\n\t}{\n\t\tappDigest,\n\t\tskf.Flags,\n\t\tskf.Counter,\n\t\tdataDigest,\n\t}\n\n\toriginal := Marshal(blob)\n\n\th.Reset()\n\th.Write(original)\n\tdigest := h.Sum(nil)\n\n\tif ecdsa.Verify((*ecdsa.PublicKey)(&k.PublicKey), digest, ecSig.R, ecSig.S) {\n\t\treturn nil\n\t}\n\treturn errors.New(\"ssh: signature did not verify\")\n}\n\nfunc (k *skECDSAPublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn &k.PublicKey\n}\n\ntype skEd25519PublicKey struct {\n\t// application is a URL-like string, typically \"ssh:\" for SSH.\n\t// see openssh/PROTOCOL.u2f for details.\n\tapplication string\n\ted25519.PublicKey\n}\n\nfunc (k *skEd25519PublicKey) Type() string {\n\treturn KeyAlgoSKED25519\n}\n\nfunc parseSKEd25519(in []byte) (out PublicKey, rest []byte, err error) {\n\tvar w struct {\n\t\tKeyBytes    []byte\n\t\tApplication string\n\t\tRest        []byte `ssh:\"rest\"`\n\t}\n\n\tif err := Unmarshal(in, &w); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif l := len(w.KeyBytes); l != ed25519.PublicKeySize {\n\t\treturn nil, nil, fmt.Errorf(\"invalid size %d for Ed25519 public key\", l)\n\t}\n\n\tkey := new(skEd25519PublicKey)\n\tkey.application = w.Application\n\tkey.PublicKey = ed25519.PublicKey(w.KeyBytes)\n\n\treturn key, w.Rest, nil\n}\n\nfunc (k *skEd25519PublicKey) Marshal() []byte {\n\tw := struct {\n\t\tName        string\n\t\tKeyBytes    []byte\n\t\tApplication string\n\t}{\n\t\tKeyAlgoSKED25519,\n\t\t[]byte(k.PublicKey),\n\t\tk.application,\n\t}\n\treturn Marshal(&w)\n}\n\nfunc (k *skEd25519PublicKey) Verify(data []byte, sig *Signature) error {\n\tif sig.Format != k.Type() {\n\t\treturn fmt.Errorf(\"ssh: signature type %s for key type %s\", sig.Format, k.Type())\n\t}\n\tif l := len(k.PublicKey); l != ed25519.PublicKeySize {\n\t\treturn fmt.Errorf(\"invalid size %d for Ed25519 public key\", l)\n\t}\n\n\th := hashFuncs[sig.Format].New()\n\th.Write([]byte(k.application))\n\tappDigest := h.Sum(nil)\n\n\th.Reset()\n\th.Write(data)\n\tdataDigest := h.Sum(nil)\n\n\tvar edSig struct {\n\t\tSignature []byte `ssh:\"rest\"`\n\t}\n\n\tif err := Unmarshal(sig.Blob, &edSig); err != nil {\n\t\treturn err\n\t}\n\n\tvar skf skFields\n\tif err := Unmarshal(sig.Rest, &skf); err != nil {\n\t\treturn err\n\t}\n\n\tblob := struct {\n\t\tApplicationDigest []byte `ssh:\"rest\"`\n\t\tFlags             byte\n\t\tCounter           uint32\n\t\tMessageDigest     []byte `ssh:\"rest\"`\n\t}{\n\t\tappDigest,\n\t\tskf.Flags,\n\t\tskf.Counter,\n\t\tdataDigest,\n\t}\n\n\toriginal := Marshal(blob)\n\n\tif ok := ed25519.Verify(k.PublicKey, original, edSig.Signature); !ok {\n\t\treturn errors.New(\"ssh: signature did not verify\")\n\t}\n\n\treturn nil\n}\n\nfunc (k *skEd25519PublicKey) CryptoPublicKey() crypto.PublicKey {\n\treturn k.PublicKey\n}\n\n// NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey,\n// *ecdsa.PrivateKey or any other crypto.Signer and returns a\n// corresponding Signer instance. ECDSA keys must use P-256, P-384 or\n// P-521. DSA keys must use parameter size L1024N160.\nfunc NewSignerFromKey(key interface{}) (Signer, error) {\n\tswitch key := key.(type) {\n\tcase crypto.Signer:\n\t\treturn NewSignerFromSigner(key)\n\tcase *dsa.PrivateKey:\n\t\treturn newDSAPrivateKey(key)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %T\", key)\n\t}\n}\n\nfunc newDSAPrivateKey(key *dsa.PrivateKey) (Signer, error) {\n\tif err := checkDSAParams(&key.PublicKey.Parameters); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &dsaPrivateKey{key}, nil\n}\n\ntype wrappedSigner struct {\n\tsigner crypto.Signer\n\tpubKey PublicKey\n}\n\n// NewSignerFromSigner takes any crypto.Signer implementation and\n// returns a corresponding Signer interface. This can be used, for\n// example, with keys kept in hardware modules.\nfunc NewSignerFromSigner(signer crypto.Signer) (Signer, error) {\n\tpubKey, err := NewPublicKey(signer.Public())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &wrappedSigner{signer, pubKey}, nil\n}\n\nfunc (s *wrappedSigner) PublicKey() PublicKey {\n\treturn s.pubKey\n}\n\nfunc (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) {\n\treturn s.SignWithAlgorithm(rand, data, s.pubKey.Type())\n}\n\nfunc (s *wrappedSigner) Algorithms() []string {\n\treturn algorithmsForKeyFormat(s.pubKey.Type())\n}\n\nfunc (s *wrappedSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) {\n\tif algorithm == \"\" {\n\t\talgorithm = s.pubKey.Type()\n\t}\n\n\tif !contains(s.Algorithms(), algorithm) {\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported signature algorithm %q for key format %q\", algorithm, s.pubKey.Type())\n\t}\n\n\thashFunc := hashFuncs[algorithm]\n\tvar digest []byte\n\tif hashFunc != 0 {\n\t\th := hashFunc.New()\n\t\th.Write(data)\n\t\tdigest = h.Sum(nil)\n\t} else {\n\t\tdigest = data\n\t}\n\n\tsignature, err := s.signer.Sign(rand, digest, hashFunc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// crypto.Signer.Sign is expected to return an ASN.1-encoded signature\n\t// for ECDSA and DSA, but that's not the encoding expected by SSH, so\n\t// re-encode.\n\tswitch s.pubKey.(type) {\n\tcase *ecdsaPublicKey, *dsaPublicKey:\n\t\ttype asn1Signature struct {\n\t\t\tR, S *big.Int\n\t\t}\n\t\tasn1Sig := new(asn1Signature)\n\t\t_, err := asn1.Unmarshal(signature, asn1Sig)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch s.pubKey.(type) {\n\t\tcase *ecdsaPublicKey:\n\t\t\tsignature = Marshal(asn1Sig)\n\n\t\tcase *dsaPublicKey:\n\t\t\tsignature = make([]byte, 40)\n\t\t\tr := asn1Sig.R.Bytes()\n\t\t\ts := asn1Sig.S.Bytes()\n\t\t\tcopy(signature[20-len(r):20], r)\n\t\t\tcopy(signature[40-len(s):40], s)\n\t\t}\n\t}\n\n\treturn &Signature{\n\t\tFormat: algorithm,\n\t\tBlob:   signature,\n\t}, nil\n}\n\n// NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey,\n// or ed25519.PublicKey returns a corresponding PublicKey instance.\n// ECDSA keys must use P-256, P-384 or P-521.\nfunc NewPublicKey(key interface{}) (PublicKey, error) {\n\tswitch key := key.(type) {\n\tcase *rsa.PublicKey:\n\t\treturn (*rsaPublicKey)(key), nil\n\tcase *ecdsa.PublicKey:\n\t\tif !supportedEllipticCurve(key.Curve) {\n\t\t\treturn nil, errors.New(\"ssh: only P-256, P-384 and P-521 EC keys are supported\")\n\t\t}\n\t\treturn (*ecdsaPublicKey)(key), nil\n\tcase *dsa.PublicKey:\n\t\treturn (*dsaPublicKey)(key), nil\n\tcase ed25519.PublicKey:\n\t\tif l := len(key); l != ed25519.PublicKeySize {\n\t\t\treturn nil, fmt.Errorf(\"ssh: invalid size %d for Ed25519 public key\", l)\n\t\t}\n\t\treturn ed25519PublicKey(key), nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %T\", key)\n\t}\n}\n\n// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports\n// the same keys as ParseRawPrivateKey. If the private key is encrypted, it\n// will return a PassphraseMissingError.\nfunc ParsePrivateKey(pemBytes []byte) (Signer, error) {\n\tkey, err := ParseRawPrivateKey(pemBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn NewSignerFromKey(key)\n}\n\n// ParsePrivateKeyWithPassphrase returns a Signer from a PEM encoded private\n// key and passphrase. It supports the same keys as\n// ParseRawPrivateKeyWithPassphrase.\nfunc ParsePrivateKeyWithPassphrase(pemBytes, passphrase []byte) (Signer, error) {\n\tkey, err := ParseRawPrivateKeyWithPassphrase(pemBytes, passphrase)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn NewSignerFromKey(key)\n}\n\n// encryptedBlock tells whether a private key is\n// encrypted by examining its Proc-Type header\n// for a mention of ENCRYPTED\n// according to RFC 1421 Section 4.6.1.1.\nfunc encryptedBlock(block *pem.Block) bool {\n\treturn strings.Contains(block.Headers[\"Proc-Type\"], \"ENCRYPTED\")\n}\n\n// A PassphraseMissingError indicates that parsing this private key requires a\n// passphrase. Use ParsePrivateKeyWithPassphrase.\ntype PassphraseMissingError struct {\n\t// PublicKey will be set if the private key format includes an unencrypted\n\t// public key along with the encrypted private key.\n\tPublicKey PublicKey\n}\n\nfunc (*PassphraseMissingError) Error() string {\n\treturn \"ssh: this private key is passphrase protected\"\n}\n\n// ParseRawPrivateKey returns a private key from a PEM encoded private key. It supports\n// RSA, DSA, ECDSA, and Ed25519 private keys in PKCS#1, PKCS#8, OpenSSL, and OpenSSH\n// formats. If the private key is encrypted, it will return a PassphraseMissingError.\nfunc ParseRawPrivateKey(pemBytes []byte) (interface{}, error) {\n\tblock, _ := pem.Decode(pemBytes)\n\tif block == nil {\n\t\treturn nil, errors.New(\"ssh: no key found\")\n\t}\n\n\tif encryptedBlock(block) {\n\t\treturn nil, &PassphraseMissingError{}\n\t}\n\n\tswitch block.Type {\n\tcase \"RSA PRIVATE KEY\":\n\t\treturn x509.ParsePKCS1PrivateKey(block.Bytes)\n\t// RFC5208 - https://tools.ietf.org/html/rfc5208\n\tcase \"PRIVATE KEY\":\n\t\treturn x509.ParsePKCS8PrivateKey(block.Bytes)\n\tcase \"EC PRIVATE KEY\":\n\t\treturn x509.ParseECPrivateKey(block.Bytes)\n\tcase \"DSA PRIVATE KEY\":\n\t\treturn ParseDSAPrivateKey(block.Bytes)\n\tcase \"OPENSSH PRIVATE KEY\":\n\t\treturn parseOpenSSHPrivateKey(block.Bytes, unencryptedOpenSSHKey)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %q\", block.Type)\n\t}\n}\n\n// ParseRawPrivateKeyWithPassphrase returns a private key decrypted with\n// passphrase from a PEM encoded private key. If the passphrase is wrong, it\n// will return x509.IncorrectPasswordError.\nfunc ParseRawPrivateKeyWithPassphrase(pemBytes, passphrase []byte) (interface{}, error) {\n\tblock, _ := pem.Decode(pemBytes)\n\tif block == nil {\n\t\treturn nil, errors.New(\"ssh: no key found\")\n\t}\n\n\tif block.Type == \"OPENSSH PRIVATE KEY\" {\n\t\treturn parseOpenSSHPrivateKey(block.Bytes, passphraseProtectedOpenSSHKey(passphrase))\n\t}\n\n\tif !encryptedBlock(block) || !x509.IsEncryptedPEMBlock(block) {\n\t\treturn nil, errors.New(\"ssh: not an encrypted key\")\n\t}\n\n\tbuf, err := x509.DecryptPEMBlock(block, passphrase)\n\tif err != nil {\n\t\tif err == x509.IncorrectPasswordError {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nil, fmt.Errorf(\"ssh: cannot decode encrypted private keys: %v\", err)\n\t}\n\n\tvar result interface{}\n\n\tswitch block.Type {\n\tcase \"RSA PRIVATE KEY\":\n\t\tresult, err = x509.ParsePKCS1PrivateKey(buf)\n\tcase \"EC PRIVATE KEY\":\n\t\tresult, err = x509.ParseECPrivateKey(buf)\n\tcase \"DSA PRIVATE KEY\":\n\t\tresult, err = ParseDSAPrivateKey(buf)\n\tdefault:\n\t\terr = fmt.Errorf(\"ssh: unsupported key type %q\", block.Type)\n\t}\n\t// Because of deficiencies in the format, DecryptPEMBlock does not always\n\t// detect an incorrect password. In these cases decrypted DER bytes is\n\t// random noise. If the parsing of the key returns an asn1.StructuralError\n\t// we return x509.IncorrectPasswordError.\n\tif _, ok := err.(asn1.StructuralError); ok {\n\t\treturn nil, x509.IncorrectPasswordError\n\t}\n\n\treturn result, err\n}\n\n// ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as\n// specified by the OpenSSL DSA man page.\nfunc ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) {\n\tvar k struct {\n\t\tVersion int\n\t\tP       *big.Int\n\t\tQ       *big.Int\n\t\tG       *big.Int\n\t\tPub     *big.Int\n\t\tPriv    *big.Int\n\t}\n\trest, err := asn1.Unmarshal(der, &k)\n\tif err != nil {\n\t\treturn nil, errors.New(\"ssh: failed to parse DSA key: \" + err.Error())\n\t}\n\tif len(rest) > 0 {\n\t\treturn nil, errors.New(\"ssh: garbage after DSA key\")\n\t}\n\n\treturn &dsa.PrivateKey{\n\t\tPublicKey: dsa.PublicKey{\n\t\t\tParameters: dsa.Parameters{\n\t\t\t\tP: k.P,\n\t\t\t\tQ: k.Q,\n\t\t\t\tG: k.G,\n\t\t\t},\n\t\t\tY: k.Pub,\n\t\t},\n\t\tX: k.Priv,\n\t}, nil\n}\n\nfunc unencryptedOpenSSHKey(cipherName, kdfName, kdfOpts string, privKeyBlock []byte) ([]byte, error) {\n\tif kdfName != \"none\" || cipherName != \"none\" {\n\t\treturn nil, &PassphraseMissingError{}\n\t}\n\tif kdfOpts != \"\" {\n\t\treturn nil, errors.New(\"ssh: invalid openssh private key\")\n\t}\n\treturn privKeyBlock, nil\n}\n\nfunc passphraseProtectedOpenSSHKey(passphrase []byte) openSSHDecryptFunc {\n\treturn func(cipherName, kdfName, kdfOpts string, privKeyBlock []byte) ([]byte, error) {\n\t\tif kdfName == \"none\" || cipherName == \"none\" {\n\t\t\treturn nil, errors.New(\"ssh: key is not password protected\")\n\t\t}\n\t\tif kdfName != \"bcrypt\" {\n\t\t\treturn nil, fmt.Errorf(\"ssh: unknown KDF %q, only supports %q\", kdfName, \"bcrypt\")\n\t\t}\n\n\t\tvar opts struct {\n\t\t\tSalt   string\n\t\t\tRounds uint32\n\t\t}\n\t\tif err := Unmarshal([]byte(kdfOpts), &opts); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tk, err := bcrypt_pbkdf.Key(passphrase, []byte(opts.Salt), int(opts.Rounds), 32+16)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tkey, iv := k[:32], k[32:]\n\n\t\tc, err := aes.NewCipher(key)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch cipherName {\n\t\tcase \"aes256-ctr\":\n\t\t\tctr := cipher.NewCTR(c, iv)\n\t\t\tctr.XORKeyStream(privKeyBlock, privKeyBlock)\n\t\tcase \"aes256-cbc\":\n\t\t\tif len(privKeyBlock)%c.BlockSize() != 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"ssh: invalid encrypted private key length, not a multiple of the block size\")\n\t\t\t}\n\t\t\tcbc := cipher.NewCBCDecrypter(c, iv)\n\t\t\tcbc.CryptBlocks(privKeyBlock, privKeyBlock)\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"ssh: unknown cipher %q, only supports %q or %q\", cipherName, \"aes256-ctr\", \"aes256-cbc\")\n\t\t}\n\n\t\treturn privKeyBlock, nil\n\t}\n}\n\nfunc unencryptedOpenSSHMarshaler(privKeyBlock []byte) ([]byte, string, string, string, error) {\n\tkey := generateOpenSSHPadding(privKeyBlock, 8)\n\treturn key, \"none\", \"none\", \"\", nil\n}\n\nfunc passphraseProtectedOpenSSHMarshaler(passphrase []byte) openSSHEncryptFunc {\n\treturn func(privKeyBlock []byte) ([]byte, string, string, string, error) {\n\t\tsalt := make([]byte, 16)\n\t\tif _, err := rand.Read(salt); err != nil {\n\t\t\treturn nil, \"\", \"\", \"\", err\n\t\t}\n\n\t\topts := struct {\n\t\t\tSalt   []byte\n\t\t\tRounds uint32\n\t\t}{salt, 16}\n\n\t\t// Derive key to encrypt the private key block.\n\t\tk, err := bcrypt_pbkdf.Key(passphrase, salt, int(opts.Rounds), 32+aes.BlockSize)\n\t\tif err != nil {\n\t\t\treturn nil, \"\", \"\", \"\", err\n\t\t}\n\n\t\t// Add padding matching the block size of AES.\n\t\tkeyBlock := generateOpenSSHPadding(privKeyBlock, aes.BlockSize)\n\n\t\t// Encrypt the private key using the derived secret.\n\n\t\tdst := make([]byte, len(keyBlock))\n\t\tkey, iv := k[:32], k[32:]\n\t\tblock, err := aes.NewCipher(key)\n\t\tif err != nil {\n\t\t\treturn nil, \"\", \"\", \"\", err\n\t\t}\n\n\t\tstream := cipher.NewCTR(block, iv)\n\t\tstream.XORKeyStream(dst, keyBlock)\n\n\t\treturn dst, \"aes256-ctr\", \"bcrypt\", string(Marshal(opts)), nil\n\t}\n}\n\nconst privateKeyAuthMagic = \"openssh-key-v1\\x00\"\n\ntype openSSHDecryptFunc func(CipherName, KdfName, KdfOpts string, PrivKeyBlock []byte) ([]byte, error)\ntype openSSHEncryptFunc func(PrivKeyBlock []byte) (ProtectedKeyBlock []byte, cipherName, kdfName, kdfOptions string, err error)\n\ntype openSSHEncryptedPrivateKey struct {\n\tCipherName   string\n\tKdfName      string\n\tKdfOpts      string\n\tNumKeys      uint32\n\tPubKey       []byte\n\tPrivKeyBlock []byte\n}\n\ntype openSSHPrivateKey struct {\n\tCheck1  uint32\n\tCheck2  uint32\n\tKeytype string\n\tRest    []byte `ssh:\"rest\"`\n}\n\ntype openSSHRSAPrivateKey struct {\n\tN       *big.Int\n\tE       *big.Int\n\tD       *big.Int\n\tIqmp    *big.Int\n\tP       *big.Int\n\tQ       *big.Int\n\tComment string\n\tPad     []byte `ssh:\"rest\"`\n}\n\ntype openSSHEd25519PrivateKey struct {\n\tPub     []byte\n\tPriv    []byte\n\tComment string\n\tPad     []byte `ssh:\"rest\"`\n}\n\ntype openSSHECDSAPrivateKey struct {\n\tCurve   string\n\tPub     []byte\n\tD       *big.Int\n\tComment string\n\tPad     []byte `ssh:\"rest\"`\n}\n\n// parseOpenSSHPrivateKey parses an OpenSSH private key, using the decrypt\n// function to unwrap the encrypted portion. unencryptedOpenSSHKey can be used\n// as the decrypt function to parse an unencrypted private key. See\n// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key.\nfunc parseOpenSSHPrivateKey(key []byte, decrypt openSSHDecryptFunc) (crypto.PrivateKey, error) {\n\tif len(key) < len(privateKeyAuthMagic) || string(key[:len(privateKeyAuthMagic)]) != privateKeyAuthMagic {\n\t\treturn nil, errors.New(\"ssh: invalid openssh private key format\")\n\t}\n\tremaining := key[len(privateKeyAuthMagic):]\n\n\tvar w openSSHEncryptedPrivateKey\n\tif err := Unmarshal(remaining, &w); err != nil {\n\t\treturn nil, err\n\t}\n\tif w.NumKeys != 1 {\n\t\t// We only support single key files, and so does OpenSSH.\n\t\t// https://github.com/openssh/openssh-portable/blob/4103a3ec7/sshkey.c#L4171\n\t\treturn nil, errors.New(\"ssh: multi-key files are not supported\")\n\t}\n\n\tprivKeyBlock, err := decrypt(w.CipherName, w.KdfName, w.KdfOpts, w.PrivKeyBlock)\n\tif err != nil {\n\t\tif err, ok := err.(*PassphraseMissingError); ok {\n\t\t\tpub, errPub := ParsePublicKey(w.PubKey)\n\t\t\tif errPub != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"ssh: failed to parse embedded public key: %v\", errPub)\n\t\t\t}\n\t\t\terr.PublicKey = pub\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tvar pk1 openSSHPrivateKey\n\tif err := Unmarshal(privKeyBlock, &pk1); err != nil || pk1.Check1 != pk1.Check2 {\n\t\tif w.CipherName != \"none\" {\n\t\t\treturn nil, x509.IncorrectPasswordError\n\t\t}\n\t\treturn nil, errors.New(\"ssh: malformed OpenSSH key\")\n\t}\n\n\tswitch pk1.Keytype {\n\tcase KeyAlgoRSA:\n\t\tvar key openSSHRSAPrivateKey\n\t\tif err := Unmarshal(pk1.Rest, &key); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif err := checkOpenSSHKeyPadding(key.Pad); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tpk := &rsa.PrivateKey{\n\t\t\tPublicKey: rsa.PublicKey{\n\t\t\t\tN: key.N,\n\t\t\t\tE: int(key.E.Int64()),\n\t\t\t},\n\t\t\tD:      key.D,\n\t\t\tPrimes: []*big.Int{key.P, key.Q},\n\t\t}\n\n\t\tif err := pk.Validate(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tpk.Precompute()\n\n\t\treturn pk, nil\n\tcase KeyAlgoED25519:\n\t\tvar key openSSHEd25519PrivateKey\n\t\tif err := Unmarshal(pk1.Rest, &key); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif len(key.Priv) != ed25519.PrivateKeySize {\n\t\t\treturn nil, errors.New(\"ssh: private key unexpected length\")\n\t\t}\n\n\t\tif err := checkOpenSSHKeyPadding(key.Pad); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tpk := ed25519.PrivateKey(make([]byte, ed25519.PrivateKeySize))\n\t\tcopy(pk, key.Priv)\n\t\treturn &pk, nil\n\tcase KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521:\n\t\tvar key openSSHECDSAPrivateKey\n\t\tif err := Unmarshal(pk1.Rest, &key); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif err := checkOpenSSHKeyPadding(key.Pad); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar curve elliptic.Curve\n\t\tswitch key.Curve {\n\t\tcase \"nistp256\":\n\t\t\tcurve = elliptic.P256()\n\t\tcase \"nistp384\":\n\t\t\tcurve = elliptic.P384()\n\t\tcase \"nistp521\":\n\t\t\tcurve = elliptic.P521()\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"ssh: unhandled elliptic curve: \" + key.Curve)\n\t\t}\n\n\t\tX, Y := elliptic.Unmarshal(curve, key.Pub)\n\t\tif X == nil || Y == nil {\n\t\t\treturn nil, errors.New(\"ssh: failed to unmarshal public key\")\n\t\t}\n\n\t\tif key.D.Cmp(curve.Params().N) >= 0 {\n\t\t\treturn nil, errors.New(\"ssh: scalar is out of range\")\n\t\t}\n\n\t\tx, y := curve.ScalarBaseMult(key.D.Bytes())\n\t\tif x.Cmp(X) != 0 || y.Cmp(Y) != 0 {\n\t\t\treturn nil, errors.New(\"ssh: public key does not match private key\")\n\t\t}\n\n\t\treturn &ecdsa.PrivateKey{\n\t\t\tPublicKey: ecdsa.PublicKey{\n\t\t\t\tCurve: curve,\n\t\t\t\tX:     X,\n\t\t\t\tY:     Y,\n\t\t\t},\n\t\t\tD: key.D,\n\t\t}, nil\n\tdefault:\n\t\treturn nil, errors.New(\"ssh: unhandled key type\")\n\t}\n}\n\nfunc marshalOpenSSHPrivateKey(key crypto.PrivateKey, comment string, encrypt openSSHEncryptFunc) (*pem.Block, error) {\n\tvar w openSSHEncryptedPrivateKey\n\tvar pk1 openSSHPrivateKey\n\n\t// Random check bytes.\n\tvar check uint32\n\tif err := binary.Read(rand.Reader, binary.BigEndian, &check); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpk1.Check1 = check\n\tpk1.Check2 = check\n\tw.NumKeys = 1\n\n\t// Use a []byte directly on ed25519 keys.\n\tif k, ok := key.(*ed25519.PrivateKey); ok {\n\t\tkey = *k\n\t}\n\n\tswitch k := key.(type) {\n\tcase *rsa.PrivateKey:\n\t\tE := new(big.Int).SetInt64(int64(k.PublicKey.E))\n\t\t// Marshal public key:\n\t\t// E and N are in reversed order in the public and private key.\n\t\tpubKey := struct {\n\t\t\tKeyType string\n\t\t\tE       *big.Int\n\t\t\tN       *big.Int\n\t\t}{\n\t\t\tKeyAlgoRSA,\n\t\t\tE, k.PublicKey.N,\n\t\t}\n\t\tw.PubKey = Marshal(pubKey)\n\n\t\t// Marshal private key.\n\t\tkey := openSSHRSAPrivateKey{\n\t\t\tN:       k.PublicKey.N,\n\t\t\tE:       E,\n\t\t\tD:       k.D,\n\t\t\tIqmp:    k.Precomputed.Qinv,\n\t\t\tP:       k.Primes[0],\n\t\t\tQ:       k.Primes[1],\n\t\t\tComment: comment,\n\t\t}\n\t\tpk1.Keytype = KeyAlgoRSA\n\t\tpk1.Rest = Marshal(key)\n\tcase ed25519.PrivateKey:\n\t\tpub := make([]byte, ed25519.PublicKeySize)\n\t\tpriv := make([]byte, ed25519.PrivateKeySize)\n\t\tcopy(pub, k[32:])\n\t\tcopy(priv, k)\n\n\t\t// Marshal public key.\n\t\tpubKey := struct {\n\t\t\tKeyType string\n\t\t\tPub     []byte\n\t\t}{\n\t\t\tKeyAlgoED25519, pub,\n\t\t}\n\t\tw.PubKey = Marshal(pubKey)\n\n\t\t// Marshal private key.\n\t\tkey := openSSHEd25519PrivateKey{\n\t\t\tPub:     pub,\n\t\t\tPriv:    priv,\n\t\t\tComment: comment,\n\t\t}\n\t\tpk1.Keytype = KeyAlgoED25519\n\t\tpk1.Rest = Marshal(key)\n\tcase *ecdsa.PrivateKey:\n\t\tvar curve, keyType string\n\t\tswitch name := k.Curve.Params().Name; name {\n\t\tcase \"P-256\":\n\t\t\tcurve = \"nistp256\"\n\t\t\tkeyType = KeyAlgoECDSA256\n\t\tcase \"P-384\":\n\t\t\tcurve = \"nistp384\"\n\t\t\tkeyType = KeyAlgoECDSA384\n\t\tcase \"P-521\":\n\t\t\tcurve = \"nistp521\"\n\t\t\tkeyType = KeyAlgoECDSA521\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"ssh: unhandled elliptic curve \" + name)\n\t\t}\n\n\t\tpub := elliptic.Marshal(k.Curve, k.PublicKey.X, k.PublicKey.Y)\n\n\t\t// Marshal public key.\n\t\tpubKey := struct {\n\t\t\tKeyType string\n\t\t\tCurve   string\n\t\t\tPub     []byte\n\t\t}{\n\t\t\tkeyType, curve, pub,\n\t\t}\n\t\tw.PubKey = Marshal(pubKey)\n\n\t\t// Marshal private key.\n\t\tkey := openSSHECDSAPrivateKey{\n\t\t\tCurve:   curve,\n\t\t\tPub:     pub,\n\t\t\tD:       k.D,\n\t\t\tComment: comment,\n\t\t}\n\t\tpk1.Keytype = keyType\n\t\tpk1.Rest = Marshal(key)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported key type %T\", k)\n\t}\n\n\tvar err error\n\t// Add padding and encrypt the key if necessary.\n\tw.PrivKeyBlock, w.CipherName, w.KdfName, w.KdfOpts, err = encrypt(Marshal(pk1))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tb := Marshal(w)\n\tblock := &pem.Block{\n\t\tType:  \"OPENSSH PRIVATE KEY\",\n\t\tBytes: append([]byte(privateKeyAuthMagic), b...),\n\t}\n\treturn block, nil\n}\n\nfunc checkOpenSSHKeyPadding(pad []byte) error {\n\tfor i, b := range pad {\n\t\tif int(b) != i+1 {\n\t\t\treturn errors.New(\"ssh: padding not as expected\")\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc generateOpenSSHPadding(block []byte, blockSize int) []byte {\n\tfor i, l := 0, len(block); (l+i)%blockSize != 0; i++ {\n\t\tblock = append(block, byte(i+1))\n\t}\n\treturn block\n}\n\n// FingerprintLegacyMD5 returns the user presentation of the key's\n// fingerprint as described by RFC 4716 section 4.\nfunc FingerprintLegacyMD5(pubKey PublicKey) string {\n\tmd5sum := md5.Sum(pubKey.Marshal())\n\thexarray := make([]string, len(md5sum))\n\tfor i, c := range md5sum {\n\t\thexarray[i] = hex.EncodeToString([]byte{c})\n\t}\n\treturn strings.Join(hexarray, \":\")\n}\n\n// FingerprintSHA256 returns the user presentation of the key's\n// fingerprint as unpadded base64 encoded sha256 hash.\n// This format was introduced from OpenSSH 6.8.\n// https://www.openssh.com/txt/release-6.8\n// https://tools.ietf.org/html/rfc4648#section-3.2 (unpadded base64 encoding)\nfunc FingerprintSHA256(pubKey PublicKey) string {\n\tsha256sum := sha256.Sum256(pubKey.Marshal())\n\thash := base64.RawStdEncoding.EncodeToString(sha256sum[:])\n\treturn \"SHA256:\" + hash\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/mac.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\n// Message authentication support\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"crypto/sha512\"\n\t\"hash\"\n)\n\ntype macMode struct {\n\tkeySize int\n\tetm     bool\n\tnew     func(key []byte) hash.Hash\n}\n\n// truncatingMAC wraps around a hash.Hash and truncates the output digest to\n// a given size.\ntype truncatingMAC struct {\n\tlength int\n\thmac   hash.Hash\n}\n\nfunc (t truncatingMAC) Write(data []byte) (int, error) {\n\treturn t.hmac.Write(data)\n}\n\nfunc (t truncatingMAC) Sum(in []byte) []byte {\n\tout := t.hmac.Sum(in)\n\treturn out[:len(in)+t.length]\n}\n\nfunc (t truncatingMAC) Reset() {\n\tt.hmac.Reset()\n}\n\nfunc (t truncatingMAC) Size() int {\n\treturn t.length\n}\n\nfunc (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() }\n\nvar macModes = map[string]*macMode{\n\t\"hmac-sha2-512-etm@openssh.com\": {64, true, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha512.New, key)\n\t}},\n\t\"hmac-sha2-256-etm@openssh.com\": {32, true, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha256.New, key)\n\t}},\n\t\"hmac-sha2-512\": {64, false, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha512.New, key)\n\t}},\n\t\"hmac-sha2-256\": {32, false, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha256.New, key)\n\t}},\n\t\"hmac-sha1\": {20, false, func(key []byte) hash.Hash {\n\t\treturn hmac.New(sha1.New, key)\n\t}},\n\t\"hmac-sha1-96\": {20, false, func(key []byte) hash.Hash {\n\t\treturn truncatingMAC{12, hmac.New(sha1.New, key)}\n\t}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/messages.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// These are SSH message type numbers. They are scattered around several\n// documents but many were taken from [SSH-PARAMETERS].\nconst (\n\tmsgIgnore        = 2\n\tmsgUnimplemented = 3\n\tmsgDebug         = 4\n\tmsgNewKeys       = 21\n)\n\n// SSH messages:\n//\n// These structures mirror the wire format of the corresponding SSH messages.\n// They are marshaled using reflection with the marshal and unmarshal functions\n// in this file. The only wrinkle is that a final member of type []byte with a\n// ssh tag of \"rest\" receives the remainder of a packet when unmarshaling.\n\n// See RFC 4253, section 11.1.\nconst msgDisconnect = 1\n\n// disconnectMsg is the message that signals a disconnect. It is also\n// the error type returned from mux.Wait()\ntype disconnectMsg struct {\n\tReason   uint32 `sshtype:\"1\"`\n\tMessage  string\n\tLanguage string\n}\n\nfunc (d *disconnectMsg) Error() string {\n\treturn fmt.Sprintf(\"ssh: disconnect, reason %d: %s\", d.Reason, d.Message)\n}\n\n// See RFC 4253, section 7.1.\nconst msgKexInit = 20\n\ntype kexInitMsg struct {\n\tCookie                  [16]byte `sshtype:\"20\"`\n\tKexAlgos                []string\n\tServerHostKeyAlgos      []string\n\tCiphersClientServer     []string\n\tCiphersServerClient     []string\n\tMACsClientServer        []string\n\tMACsServerClient        []string\n\tCompressionClientServer []string\n\tCompressionServerClient []string\n\tLanguagesClientServer   []string\n\tLanguagesServerClient   []string\n\tFirstKexFollows         bool\n\tReserved                uint32\n}\n\n// See RFC 4253, section 8.\n\n// Diffie-Hellman\nconst msgKexDHInit = 30\n\ntype kexDHInitMsg struct {\n\tX *big.Int `sshtype:\"30\"`\n}\n\nconst msgKexECDHInit = 30\n\ntype kexECDHInitMsg struct {\n\tClientPubKey []byte `sshtype:\"30\"`\n}\n\nconst msgKexECDHReply = 31\n\ntype kexECDHReplyMsg struct {\n\tHostKey         []byte `sshtype:\"31\"`\n\tEphemeralPubKey []byte\n\tSignature       []byte\n}\n\nconst msgKexDHReply = 31\n\ntype kexDHReplyMsg struct {\n\tHostKey   []byte `sshtype:\"31\"`\n\tY         *big.Int\n\tSignature []byte\n}\n\n// See RFC 4419, section 5.\nconst msgKexDHGexGroup = 31\n\ntype kexDHGexGroupMsg struct {\n\tP *big.Int `sshtype:\"31\"`\n\tG *big.Int\n}\n\nconst msgKexDHGexInit = 32\n\ntype kexDHGexInitMsg struct {\n\tX *big.Int `sshtype:\"32\"`\n}\n\nconst msgKexDHGexReply = 33\n\ntype kexDHGexReplyMsg struct {\n\tHostKey   []byte `sshtype:\"33\"`\n\tY         *big.Int\n\tSignature []byte\n}\n\nconst msgKexDHGexRequest = 34\n\ntype kexDHGexRequestMsg struct {\n\tMinBits      uint32 `sshtype:\"34\"`\n\tPreferedBits uint32\n\tMaxBits      uint32\n}\n\n// See RFC 4253, section 10.\nconst msgServiceRequest = 5\n\ntype serviceRequestMsg struct {\n\tService string `sshtype:\"5\"`\n}\n\n// See RFC 4253, section 10.\nconst msgServiceAccept = 6\n\ntype serviceAcceptMsg struct {\n\tService string `sshtype:\"6\"`\n}\n\n// See RFC 8308, section 2.3\nconst msgExtInfo = 7\n\ntype extInfoMsg struct {\n\tNumExtensions uint32 `sshtype:\"7\"`\n\tPayload       []byte `ssh:\"rest\"`\n}\n\n// See RFC 4252, section 5.\nconst msgUserAuthRequest = 50\n\ntype userAuthRequestMsg struct {\n\tUser    string `sshtype:\"50\"`\n\tService string\n\tMethod  string\n\tPayload []byte `ssh:\"rest\"`\n}\n\n// Used for debug printouts of packets.\ntype userAuthSuccessMsg struct {\n}\n\n// See RFC 4252, section 5.1\nconst msgUserAuthFailure = 51\n\ntype userAuthFailureMsg struct {\n\tMethods        []string `sshtype:\"51\"`\n\tPartialSuccess bool\n}\n\n// See RFC 4252, section 5.1\nconst msgUserAuthSuccess = 52\n\n// See RFC 4252, section 5.4\nconst msgUserAuthBanner = 53\n\ntype userAuthBannerMsg struct {\n\tMessage string `sshtype:\"53\"`\n\t// unused, but required to allow message parsing\n\tLanguage string\n}\n\n// See RFC 4256, section 3.2\nconst msgUserAuthInfoRequest = 60\nconst msgUserAuthInfoResponse = 61\n\ntype userAuthInfoRequestMsg struct {\n\tName        string `sshtype:\"60\"`\n\tInstruction string\n\tLanguage    string\n\tNumPrompts  uint32\n\tPrompts     []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.1.\nconst msgChannelOpen = 90\n\ntype channelOpenMsg struct {\n\tChanType         string `sshtype:\"90\"`\n\tPeersID          uint32\n\tPeersWindow      uint32\n\tMaxPacketSize    uint32\n\tTypeSpecificData []byte `ssh:\"rest\"`\n}\n\nconst msgChannelExtendedData = 95\nconst msgChannelData = 94\n\n// Used for debug print outs of packets.\ntype channelDataMsg struct {\n\tPeersID uint32 `sshtype:\"94\"`\n\tLength  uint32\n\tRest    []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.1.\nconst msgChannelOpenConfirm = 91\n\ntype channelOpenConfirmMsg struct {\n\tPeersID          uint32 `sshtype:\"91\"`\n\tMyID             uint32\n\tMyWindow         uint32\n\tMaxPacketSize    uint32\n\tTypeSpecificData []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.1.\nconst msgChannelOpenFailure = 92\n\ntype channelOpenFailureMsg struct {\n\tPeersID  uint32 `sshtype:\"92\"`\n\tReason   RejectionReason\n\tMessage  string\n\tLanguage string\n}\n\nconst msgChannelRequest = 98\n\ntype channelRequestMsg struct {\n\tPeersID             uint32 `sshtype:\"98\"`\n\tRequest             string\n\tWantReply           bool\n\tRequestSpecificData []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 5.4.\nconst msgChannelSuccess = 99\n\ntype channelRequestSuccessMsg struct {\n\tPeersID uint32 `sshtype:\"99\"`\n}\n\n// See RFC 4254, section 5.4.\nconst msgChannelFailure = 100\n\ntype channelRequestFailureMsg struct {\n\tPeersID uint32 `sshtype:\"100\"`\n}\n\n// See RFC 4254, section 5.3\nconst msgChannelClose = 97\n\ntype channelCloseMsg struct {\n\tPeersID uint32 `sshtype:\"97\"`\n}\n\n// See RFC 4254, section 5.3\nconst msgChannelEOF = 96\n\ntype channelEOFMsg struct {\n\tPeersID uint32 `sshtype:\"96\"`\n}\n\n// See RFC 4254, section 4\nconst msgGlobalRequest = 80\n\ntype globalRequestMsg struct {\n\tType      string `sshtype:\"80\"`\n\tWantReply bool\n\tData      []byte `ssh:\"rest\"`\n}\n\n// See RFC 4254, section 4\nconst msgRequestSuccess = 81\n\ntype globalRequestSuccessMsg struct {\n\tData []byte `ssh:\"rest\" sshtype:\"81\"`\n}\n\n// See RFC 4254, section 4\nconst msgRequestFailure = 82\n\ntype globalRequestFailureMsg struct {\n\tData []byte `ssh:\"rest\" sshtype:\"82\"`\n}\n\n// See RFC 4254, section 5.2\nconst msgChannelWindowAdjust = 93\n\ntype windowAdjustMsg struct {\n\tPeersID         uint32 `sshtype:\"93\"`\n\tAdditionalBytes uint32\n}\n\n// See RFC 4252, section 7\nconst msgUserAuthPubKeyOk = 60\n\ntype userAuthPubKeyOkMsg struct {\n\tAlgo   string `sshtype:\"60\"`\n\tPubKey []byte\n}\n\n// See RFC 4462, section 3\nconst msgUserAuthGSSAPIResponse = 60\n\ntype userAuthGSSAPIResponse struct {\n\tSupportMech []byte `sshtype:\"60\"`\n}\n\nconst msgUserAuthGSSAPIToken = 61\n\ntype userAuthGSSAPIToken struct {\n\tToken []byte `sshtype:\"61\"`\n}\n\nconst msgUserAuthGSSAPIMIC = 66\n\ntype userAuthGSSAPIMIC struct {\n\tMIC []byte `sshtype:\"66\"`\n}\n\n// See RFC 4462, section 3.9\nconst msgUserAuthGSSAPIErrTok = 64\n\ntype userAuthGSSAPIErrTok struct {\n\tErrorToken []byte `sshtype:\"64\"`\n}\n\n// See RFC 4462, section 3.8\nconst msgUserAuthGSSAPIError = 65\n\ntype userAuthGSSAPIError struct {\n\tMajorStatus uint32 `sshtype:\"65\"`\n\tMinorStatus uint32\n\tMessage     string\n\tLanguageTag string\n}\n\n// Transport layer OpenSSH extension. See [PROTOCOL], section 1.9\nconst msgPing = 192\n\ntype pingMsg struct {\n\tData string `sshtype:\"192\"`\n}\n\n// Transport layer OpenSSH extension. See [PROTOCOL], section 1.9\nconst msgPong = 193\n\ntype pongMsg struct {\n\tData string `sshtype:\"193\"`\n}\n\n// typeTags returns the possible type bytes for the given reflect.Type, which\n// should be a struct. The possible values are separated by a '|' character.\nfunc typeTags(structType reflect.Type) (tags []byte) {\n\ttagStr := structType.Field(0).Tag.Get(\"sshtype\")\n\n\tfor _, tag := range strings.Split(tagStr, \"|\") {\n\t\ti, err := strconv.Atoi(tag)\n\t\tif err == nil {\n\t\t\ttags = append(tags, byte(i))\n\t\t}\n\t}\n\n\treturn tags\n}\n\nfunc fieldError(t reflect.Type, field int, problem string) error {\n\tif problem != \"\" {\n\t\tproblem = \": \" + problem\n\t}\n\treturn fmt.Errorf(\"ssh: unmarshal error for field %s of type %s%s\", t.Field(field).Name, t.Name(), problem)\n}\n\nvar errShortRead = errors.New(\"ssh: short read\")\n\n// Unmarshal parses data in SSH wire format into a structure. The out\n// argument should be a pointer to struct. If the first member of the\n// struct has the \"sshtype\" tag set to a '|'-separated set of numbers\n// in decimal, the packet must start with one of those numbers. In\n// case of error, Unmarshal returns a ParseError or\n// UnexpectedMessageError.\nfunc Unmarshal(data []byte, out interface{}) error {\n\tv := reflect.ValueOf(out).Elem()\n\tstructType := v.Type()\n\texpectedTypes := typeTags(structType)\n\n\tvar expectedType byte\n\tif len(expectedTypes) > 0 {\n\t\texpectedType = expectedTypes[0]\n\t}\n\n\tif len(data) == 0 {\n\t\treturn parseError(expectedType)\n\t}\n\n\tif len(expectedTypes) > 0 {\n\t\tgoodType := false\n\t\tfor _, e := range expectedTypes {\n\t\t\tif e > 0 && data[0] == e {\n\t\t\t\tgoodType = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !goodType {\n\t\t\treturn fmt.Errorf(\"ssh: unexpected message type %d (expected one of %v)\", data[0], expectedTypes)\n\t\t}\n\t\tdata = data[1:]\n\t}\n\n\tvar ok bool\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tfield := v.Field(i)\n\t\tt := field.Type()\n\t\tswitch t.Kind() {\n\t\tcase reflect.Bool:\n\t\t\tif len(data) < 1 {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetBool(data[0] != 0)\n\t\t\tdata = data[1:]\n\t\tcase reflect.Array:\n\t\t\tif t.Elem().Kind() != reflect.Uint8 {\n\t\t\t\treturn fieldError(structType, i, \"array of unsupported type\")\n\t\t\t}\n\t\t\tif len(data) < t.Len() {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfor j, n := 0, t.Len(); j < n; j++ {\n\t\t\t\tfield.Index(j).Set(reflect.ValueOf(data[j]))\n\t\t\t}\n\t\t\tdata = data[t.Len():]\n\t\tcase reflect.Uint64:\n\t\t\tvar u64 uint64\n\t\t\tif u64, data, ok = parseUint64(data); !ok {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetUint(u64)\n\t\tcase reflect.Uint32:\n\t\t\tvar u32 uint32\n\t\t\tif u32, data, ok = parseUint32(data); !ok {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetUint(uint64(u32))\n\t\tcase reflect.Uint8:\n\t\t\tif len(data) < 1 {\n\t\t\t\treturn errShortRead\n\t\t\t}\n\t\t\tfield.SetUint(uint64(data[0]))\n\t\t\tdata = data[1:]\n\t\tcase reflect.String:\n\t\t\tvar s []byte\n\t\t\tif s, data, ok = parseString(data); !ok {\n\t\t\t\treturn fieldError(structType, i, \"\")\n\t\t\t}\n\t\t\tfield.SetString(string(s))\n\t\tcase reflect.Slice:\n\t\t\tswitch t.Elem().Kind() {\n\t\t\tcase reflect.Uint8:\n\t\t\t\tif structType.Field(i).Tag.Get(\"ssh\") == \"rest\" {\n\t\t\t\t\tfield.Set(reflect.ValueOf(data))\n\t\t\t\t\tdata = nil\n\t\t\t\t} else {\n\t\t\t\t\tvar s []byte\n\t\t\t\t\tif s, data, ok = parseString(data); !ok {\n\t\t\t\t\t\treturn errShortRead\n\t\t\t\t\t}\n\t\t\t\t\tfield.Set(reflect.ValueOf(s))\n\t\t\t\t}\n\t\t\tcase reflect.String:\n\t\t\t\tvar nl []string\n\t\t\t\tif nl, data, ok = parseNameList(data); !ok {\n\t\t\t\t\treturn errShortRead\n\t\t\t\t}\n\t\t\t\tfield.Set(reflect.ValueOf(nl))\n\t\t\tdefault:\n\t\t\t\treturn fieldError(structType, i, \"slice of unsupported type\")\n\t\t\t}\n\t\tcase reflect.Ptr:\n\t\t\tif t == bigIntType {\n\t\t\t\tvar n *big.Int\n\t\t\t\tif n, data, ok = parseInt(data); !ok {\n\t\t\t\t\treturn errShortRead\n\t\t\t\t}\n\t\t\t\tfield.Set(reflect.ValueOf(n))\n\t\t\t} else {\n\t\t\t\treturn fieldError(structType, i, \"pointer to unsupported type\")\n\t\t\t}\n\t\tdefault:\n\t\t\treturn fieldError(structType, i, fmt.Sprintf(\"unsupported type: %v\", t))\n\t\t}\n\t}\n\n\tif len(data) != 0 {\n\t\treturn parseError(expectedType)\n\t}\n\n\treturn nil\n}\n\n// Marshal serializes the message in msg to SSH wire format.  The msg\n// argument should be a struct or pointer to struct. If the first\n// member has the \"sshtype\" tag set to a number in decimal, that\n// number is prepended to the result. If the last of member has the\n// \"ssh\" tag set to \"rest\", its contents are appended to the output.\nfunc Marshal(msg interface{}) []byte {\n\tout := make([]byte, 0, 64)\n\treturn marshalStruct(out, msg)\n}\n\nfunc marshalStruct(out []byte, msg interface{}) []byte {\n\tv := reflect.Indirect(reflect.ValueOf(msg))\n\tmsgTypes := typeTags(v.Type())\n\tif len(msgTypes) > 0 {\n\t\tout = append(out, msgTypes[0])\n\t}\n\n\tfor i, n := 0, v.NumField(); i < n; i++ {\n\t\tfield := v.Field(i)\n\t\tswitch t := field.Type(); t.Kind() {\n\t\tcase reflect.Bool:\n\t\t\tvar v uint8\n\t\t\tif field.Bool() {\n\t\t\t\tv = 1\n\t\t\t}\n\t\t\tout = append(out, v)\n\t\tcase reflect.Array:\n\t\t\tif t.Elem().Kind() != reflect.Uint8 {\n\t\t\t\tpanic(fmt.Sprintf(\"array of non-uint8 in field %d: %T\", i, field.Interface()))\n\t\t\t}\n\t\t\tfor j, l := 0, t.Len(); j < l; j++ {\n\t\t\t\tout = append(out, uint8(field.Index(j).Uint()))\n\t\t\t}\n\t\tcase reflect.Uint32:\n\t\t\tout = appendU32(out, uint32(field.Uint()))\n\t\tcase reflect.Uint64:\n\t\t\tout = appendU64(out, uint64(field.Uint()))\n\t\tcase reflect.Uint8:\n\t\t\tout = append(out, uint8(field.Uint()))\n\t\tcase reflect.String:\n\t\t\ts := field.String()\n\t\t\tout = appendInt(out, len(s))\n\t\t\tout = append(out, s...)\n\t\tcase reflect.Slice:\n\t\t\tswitch t.Elem().Kind() {\n\t\t\tcase reflect.Uint8:\n\t\t\t\tif v.Type().Field(i).Tag.Get(\"ssh\") != \"rest\" {\n\t\t\t\t\tout = appendInt(out, field.Len())\n\t\t\t\t}\n\t\t\t\tout = append(out, field.Bytes()...)\n\t\t\tcase reflect.String:\n\t\t\t\toffset := len(out)\n\t\t\t\tout = appendU32(out, 0)\n\t\t\t\tif n := field.Len(); n > 0 {\n\t\t\t\t\tfor j := 0; j < n; j++ {\n\t\t\t\t\t\tf := field.Index(j)\n\t\t\t\t\t\tif j != 0 {\n\t\t\t\t\t\t\tout = append(out, ',')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tout = append(out, f.String()...)\n\t\t\t\t\t}\n\t\t\t\t\t// overwrite length value\n\t\t\t\t\tbinary.BigEndian.PutUint32(out[offset:], uint32(len(out)-offset-4))\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"slice of unknown type in field %d: %T\", i, field.Interface()))\n\t\t\t}\n\t\tcase reflect.Ptr:\n\t\t\tif t == bigIntType {\n\t\t\t\tvar n *big.Int\n\t\t\t\tnValue := reflect.ValueOf(&n)\n\t\t\t\tnValue.Elem().Set(field)\n\t\t\t\tneeded := intLength(n)\n\t\t\t\toldLength := len(out)\n\n\t\t\t\tif cap(out)-len(out) < needed {\n\t\t\t\t\tnewOut := make([]byte, len(out), 2*(len(out)+needed))\n\t\t\t\t\tcopy(newOut, out)\n\t\t\t\t\tout = newOut\n\t\t\t\t}\n\t\t\t\tout = out[:oldLength+needed]\n\t\t\t\tmarshalInt(out[oldLength:], n)\n\t\t\t} else {\n\t\t\t\tpanic(fmt.Sprintf(\"pointer to unknown type in field %d: %T\", i, field.Interface()))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out\n}\n\nvar bigOne = big.NewInt(1)\n\nfunc parseString(in []byte) (out, rest []byte, ok bool) {\n\tif len(in) < 4 {\n\t\treturn\n\t}\n\tlength := binary.BigEndian.Uint32(in)\n\tin = in[4:]\n\tif uint32(len(in)) < length {\n\t\treturn\n\t}\n\tout = in[:length]\n\trest = in[length:]\n\tok = true\n\treturn\n}\n\nvar (\n\tcomma         = []byte{','}\n\temptyNameList = []string{}\n)\n\nfunc parseNameList(in []byte) (out []string, rest []byte, ok bool) {\n\tcontents, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\tif len(contents) == 0 {\n\t\tout = emptyNameList\n\t\treturn\n\t}\n\tparts := bytes.Split(contents, comma)\n\tout = make([]string, len(parts))\n\tfor i, part := range parts {\n\t\tout[i] = string(part)\n\t}\n\treturn\n}\n\nfunc parseInt(in []byte) (out *big.Int, rest []byte, ok bool) {\n\tcontents, rest, ok := parseString(in)\n\tif !ok {\n\t\treturn\n\t}\n\tout = new(big.Int)\n\n\tif len(contents) > 0 && contents[0]&0x80 == 0x80 {\n\t\t// This is a negative number\n\t\tnotBytes := make([]byte, len(contents))\n\t\tfor i := range notBytes {\n\t\t\tnotBytes[i] = ^contents[i]\n\t\t}\n\t\tout.SetBytes(notBytes)\n\t\tout.Add(out, bigOne)\n\t\tout.Neg(out)\n\t} else {\n\t\t// Positive number\n\t\tout.SetBytes(contents)\n\t}\n\tok = true\n\treturn\n}\n\nfunc parseUint32(in []byte) (uint32, []byte, bool) {\n\tif len(in) < 4 {\n\t\treturn 0, nil, false\n\t}\n\treturn binary.BigEndian.Uint32(in), in[4:], true\n}\n\nfunc parseUint64(in []byte) (uint64, []byte, bool) {\n\tif len(in) < 8 {\n\t\treturn 0, nil, false\n\t}\n\treturn binary.BigEndian.Uint64(in), in[8:], true\n}\n\nfunc intLength(n *big.Int) int {\n\tlength := 4 /* length bytes */\n\tif n.Sign() < 0 {\n\t\tnMinus1 := new(big.Int).Neg(n)\n\t\tnMinus1.Sub(nMinus1, bigOne)\n\t\tbitLen := nMinus1.BitLen()\n\t\tif bitLen%8 == 0 {\n\t\t\t// The number will need 0xff padding\n\t\t\tlength++\n\t\t}\n\t\tlength += (bitLen + 7) / 8\n\t} else if n.Sign() == 0 {\n\t\t// A zero is the zero length string\n\t} else {\n\t\tbitLen := n.BitLen()\n\t\tif bitLen%8 == 0 {\n\t\t\t// The number will need 0x00 padding\n\t\t\tlength++\n\t\t}\n\t\tlength += (bitLen + 7) / 8\n\t}\n\n\treturn length\n}\n\nfunc marshalUint32(to []byte, n uint32) []byte {\n\tbinary.BigEndian.PutUint32(to, n)\n\treturn to[4:]\n}\n\nfunc marshalUint64(to []byte, n uint64) []byte {\n\tbinary.BigEndian.PutUint64(to, n)\n\treturn to[8:]\n}\n\nfunc marshalInt(to []byte, n *big.Int) []byte {\n\tlengthBytes := to\n\tto = to[4:]\n\tlength := 0\n\n\tif n.Sign() < 0 {\n\t\t// A negative number has to be converted to two's-complement\n\t\t// form. So we'll subtract 1 and invert. If the\n\t\t// most-significant-bit isn't set then we'll need to pad the\n\t\t// beginning with 0xff in order to keep the number negative.\n\t\tnMinus1 := new(big.Int).Neg(n)\n\t\tnMinus1.Sub(nMinus1, bigOne)\n\t\tbytes := nMinus1.Bytes()\n\t\tfor i := range bytes {\n\t\t\tbytes[i] ^= 0xff\n\t\t}\n\t\tif len(bytes) == 0 || bytes[0]&0x80 == 0 {\n\t\t\tto[0] = 0xff\n\t\t\tto = to[1:]\n\t\t\tlength++\n\t\t}\n\t\tnBytes := copy(to, bytes)\n\t\tto = to[nBytes:]\n\t\tlength += nBytes\n\t} else if n.Sign() == 0 {\n\t\t// A zero is the zero length string\n\t} else {\n\t\tbytes := n.Bytes()\n\t\tif len(bytes) > 0 && bytes[0]&0x80 != 0 {\n\t\t\t// We'll have to pad this with a 0x00 in order to\n\t\t\t// stop it looking like a negative number.\n\t\t\tto[0] = 0\n\t\t\tto = to[1:]\n\t\t\tlength++\n\t\t}\n\t\tnBytes := copy(to, bytes)\n\t\tto = to[nBytes:]\n\t\tlength += nBytes\n\t}\n\n\tlengthBytes[0] = byte(length >> 24)\n\tlengthBytes[1] = byte(length >> 16)\n\tlengthBytes[2] = byte(length >> 8)\n\tlengthBytes[3] = byte(length)\n\treturn to\n}\n\nfunc writeInt(w io.Writer, n *big.Int) {\n\tlength := intLength(n)\n\tbuf := make([]byte, length)\n\tmarshalInt(buf, n)\n\tw.Write(buf)\n}\n\nfunc writeString(w io.Writer, s []byte) {\n\tvar lengthBytes [4]byte\n\tlengthBytes[0] = byte(len(s) >> 24)\n\tlengthBytes[1] = byte(len(s) >> 16)\n\tlengthBytes[2] = byte(len(s) >> 8)\n\tlengthBytes[3] = byte(len(s))\n\tw.Write(lengthBytes[:])\n\tw.Write(s)\n}\n\nfunc stringLength(n int) int {\n\treturn 4 + n\n}\n\nfunc marshalString(to []byte, s []byte) []byte {\n\tto[0] = byte(len(s) >> 24)\n\tto[1] = byte(len(s) >> 16)\n\tto[2] = byte(len(s) >> 8)\n\tto[3] = byte(len(s))\n\tto = to[4:]\n\tcopy(to, s)\n\treturn to[len(s):]\n}\n\nvar bigIntType = reflect.TypeOf((*big.Int)(nil))\n\n// Decode a packet into its corresponding message.\nfunc decode(packet []byte) (interface{}, error) {\n\tvar msg interface{}\n\tswitch packet[0] {\n\tcase msgDisconnect:\n\t\tmsg = new(disconnectMsg)\n\tcase msgServiceRequest:\n\t\tmsg = new(serviceRequestMsg)\n\tcase msgServiceAccept:\n\t\tmsg = new(serviceAcceptMsg)\n\tcase msgExtInfo:\n\t\tmsg = new(extInfoMsg)\n\tcase msgKexInit:\n\t\tmsg = new(kexInitMsg)\n\tcase msgKexDHInit:\n\t\tmsg = new(kexDHInitMsg)\n\tcase msgKexDHReply:\n\t\tmsg = new(kexDHReplyMsg)\n\tcase msgUserAuthRequest:\n\t\tmsg = new(userAuthRequestMsg)\n\tcase msgUserAuthSuccess:\n\t\treturn new(userAuthSuccessMsg), nil\n\tcase msgUserAuthFailure:\n\t\tmsg = new(userAuthFailureMsg)\n\tcase msgUserAuthBanner:\n\t\tmsg = new(userAuthBannerMsg)\n\tcase msgUserAuthPubKeyOk:\n\t\tmsg = new(userAuthPubKeyOkMsg)\n\tcase msgGlobalRequest:\n\t\tmsg = new(globalRequestMsg)\n\tcase msgRequestSuccess:\n\t\tmsg = new(globalRequestSuccessMsg)\n\tcase msgRequestFailure:\n\t\tmsg = new(globalRequestFailureMsg)\n\tcase msgChannelOpen:\n\t\tmsg = new(channelOpenMsg)\n\tcase msgChannelData:\n\t\tmsg = new(channelDataMsg)\n\tcase msgChannelOpenConfirm:\n\t\tmsg = new(channelOpenConfirmMsg)\n\tcase msgChannelOpenFailure:\n\t\tmsg = new(channelOpenFailureMsg)\n\tcase msgChannelWindowAdjust:\n\t\tmsg = new(windowAdjustMsg)\n\tcase msgChannelEOF:\n\t\tmsg = new(channelEOFMsg)\n\tcase msgChannelClose:\n\t\tmsg = new(channelCloseMsg)\n\tcase msgChannelRequest:\n\t\tmsg = new(channelRequestMsg)\n\tcase msgChannelSuccess:\n\t\tmsg = new(channelRequestSuccessMsg)\n\tcase msgChannelFailure:\n\t\tmsg = new(channelRequestFailureMsg)\n\tcase msgUserAuthGSSAPIToken:\n\t\tmsg = new(userAuthGSSAPIToken)\n\tcase msgUserAuthGSSAPIMIC:\n\t\tmsg = new(userAuthGSSAPIMIC)\n\tcase msgUserAuthGSSAPIErrTok:\n\t\tmsg = new(userAuthGSSAPIErrTok)\n\tcase msgUserAuthGSSAPIError:\n\t\tmsg = new(userAuthGSSAPIError)\n\tdefault:\n\t\treturn nil, unexpectedMessageError(0, packet[0])\n\t}\n\tif err := Unmarshal(packet, msg); err != nil {\n\t\treturn nil, err\n\t}\n\treturn msg, nil\n}\n\nvar packetTypeNames = map[byte]string{\n\tmsgDisconnect:          \"disconnectMsg\",\n\tmsgServiceRequest:      \"serviceRequestMsg\",\n\tmsgServiceAccept:       \"serviceAcceptMsg\",\n\tmsgExtInfo:             \"extInfoMsg\",\n\tmsgKexInit:             \"kexInitMsg\",\n\tmsgKexDHInit:           \"kexDHInitMsg\",\n\tmsgKexDHReply:          \"kexDHReplyMsg\",\n\tmsgUserAuthRequest:     \"userAuthRequestMsg\",\n\tmsgUserAuthSuccess:     \"userAuthSuccessMsg\",\n\tmsgUserAuthFailure:     \"userAuthFailureMsg\",\n\tmsgUserAuthPubKeyOk:    \"userAuthPubKeyOkMsg\",\n\tmsgGlobalRequest:       \"globalRequestMsg\",\n\tmsgRequestSuccess:      \"globalRequestSuccessMsg\",\n\tmsgRequestFailure:      \"globalRequestFailureMsg\",\n\tmsgChannelOpen:         \"channelOpenMsg\",\n\tmsgChannelData:         \"channelDataMsg\",\n\tmsgChannelOpenConfirm:  \"channelOpenConfirmMsg\",\n\tmsgChannelOpenFailure:  \"channelOpenFailureMsg\",\n\tmsgChannelWindowAdjust: \"windowAdjustMsg\",\n\tmsgChannelEOF:          \"channelEOFMsg\",\n\tmsgChannelClose:        \"channelCloseMsg\",\n\tmsgChannelRequest:      \"channelRequestMsg\",\n\tmsgChannelSuccess:      \"channelRequestSuccessMsg\",\n\tmsgChannelFailure:      \"channelRequestFailureMsg\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/mux.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// debugMux, if set, causes messages in the connection protocol to be\n// logged.\nconst debugMux = false\n\n// chanList is a thread safe channel list.\ntype chanList struct {\n\t// protects concurrent access to chans\n\tsync.Mutex\n\n\t// chans are indexed by the local id of the channel, which the\n\t// other side should send in the PeersId field.\n\tchans []*channel\n\n\t// This is a debugging aid: it offsets all IDs by this\n\t// amount. This helps distinguish otherwise identical\n\t// server/client muxes\n\toffset uint32\n}\n\n// Assigns a channel ID to the given channel.\nfunc (c *chanList) add(ch *channel) uint32 {\n\tc.Lock()\n\tdefer c.Unlock()\n\tfor i := range c.chans {\n\t\tif c.chans[i] == nil {\n\t\t\tc.chans[i] = ch\n\t\t\treturn uint32(i) + c.offset\n\t\t}\n\t}\n\tc.chans = append(c.chans, ch)\n\treturn uint32(len(c.chans)-1) + c.offset\n}\n\n// getChan returns the channel for the given ID.\nfunc (c *chanList) getChan(id uint32) *channel {\n\tid -= c.offset\n\n\tc.Lock()\n\tdefer c.Unlock()\n\tif id < uint32(len(c.chans)) {\n\t\treturn c.chans[id]\n\t}\n\treturn nil\n}\n\nfunc (c *chanList) remove(id uint32) {\n\tid -= c.offset\n\tc.Lock()\n\tif id < uint32(len(c.chans)) {\n\t\tc.chans[id] = nil\n\t}\n\tc.Unlock()\n}\n\n// dropAll forgets all channels it knows, returning them in a slice.\nfunc (c *chanList) dropAll() []*channel {\n\tc.Lock()\n\tdefer c.Unlock()\n\tvar r []*channel\n\n\tfor _, ch := range c.chans {\n\t\tif ch == nil {\n\t\t\tcontinue\n\t\t}\n\t\tr = append(r, ch)\n\t}\n\tc.chans = nil\n\treturn r\n}\n\n// mux represents the state for the SSH connection protocol, which\n// multiplexes many channels onto a single packet transport.\ntype mux struct {\n\tconn     packetConn\n\tchanList chanList\n\n\tincomingChannels chan NewChannel\n\n\tglobalSentMu     sync.Mutex\n\tglobalResponses  chan interface{}\n\tincomingRequests chan *Request\n\n\terrCond *sync.Cond\n\terr     error\n}\n\n// When debugging, each new chanList instantiation has a different\n// offset.\nvar globalOff uint32\n\nfunc (m *mux) Wait() error {\n\tm.errCond.L.Lock()\n\tdefer m.errCond.L.Unlock()\n\tfor m.err == nil {\n\t\tm.errCond.Wait()\n\t}\n\treturn m.err\n}\n\n// newMux returns a mux that runs over the given connection.\nfunc newMux(p packetConn) *mux {\n\tm := &mux{\n\t\tconn:             p,\n\t\tincomingChannels: make(chan NewChannel, chanSize),\n\t\tglobalResponses:  make(chan interface{}, 1),\n\t\tincomingRequests: make(chan *Request, chanSize),\n\t\terrCond:          newCond(),\n\t}\n\tif debugMux {\n\t\tm.chanList.offset = atomic.AddUint32(&globalOff, 1)\n\t}\n\n\tgo m.loop()\n\treturn m\n}\n\nfunc (m *mux) sendMessage(msg interface{}) error {\n\tp := Marshal(msg)\n\tif debugMux {\n\t\tlog.Printf(\"send global(%d): %#v\", m.chanList.offset, msg)\n\t}\n\treturn m.conn.writePacket(p)\n}\n\nfunc (m *mux) SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) {\n\tif wantReply {\n\t\tm.globalSentMu.Lock()\n\t\tdefer m.globalSentMu.Unlock()\n\t}\n\n\tif err := m.sendMessage(globalRequestMsg{\n\t\tType:      name,\n\t\tWantReply: wantReply,\n\t\tData:      payload,\n\t}); err != nil {\n\t\treturn false, nil, err\n\t}\n\n\tif !wantReply {\n\t\treturn false, nil, nil\n\t}\n\n\tmsg, ok := <-m.globalResponses\n\tif !ok {\n\t\treturn false, nil, io.EOF\n\t}\n\tswitch msg := msg.(type) {\n\tcase *globalRequestFailureMsg:\n\t\treturn false, msg.Data, nil\n\tcase *globalRequestSuccessMsg:\n\t\treturn true, msg.Data, nil\n\tdefault:\n\t\treturn false, nil, fmt.Errorf(\"ssh: unexpected response to request: %#v\", msg)\n\t}\n}\n\n// ackRequest must be called after processing a global request that\n// has WantReply set.\nfunc (m *mux) ackRequest(ok bool, data []byte) error {\n\tif ok {\n\t\treturn m.sendMessage(globalRequestSuccessMsg{Data: data})\n\t}\n\treturn m.sendMessage(globalRequestFailureMsg{Data: data})\n}\n\nfunc (m *mux) Close() error {\n\treturn m.conn.Close()\n}\n\n// loop runs the connection machine. It will process packets until an\n// error is encountered. To synchronize on loop exit, use mux.Wait.\nfunc (m *mux) loop() {\n\tvar err error\n\tfor err == nil {\n\t\terr = m.onePacket()\n\t}\n\n\tfor _, ch := range m.chanList.dropAll() {\n\t\tch.close()\n\t}\n\n\tclose(m.incomingChannels)\n\tclose(m.incomingRequests)\n\tclose(m.globalResponses)\n\n\tm.conn.Close()\n\n\tm.errCond.L.Lock()\n\tm.err = err\n\tm.errCond.Broadcast()\n\tm.errCond.L.Unlock()\n\n\tif debugMux {\n\t\tlog.Println(\"loop exit\", err)\n\t}\n}\n\n// onePacket reads and processes one packet.\nfunc (m *mux) onePacket() error {\n\tpacket, err := m.conn.readPacket()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif debugMux {\n\t\tif packet[0] == msgChannelData || packet[0] == msgChannelExtendedData {\n\t\t\tlog.Printf(\"decoding(%d): data packet - %d bytes\", m.chanList.offset, len(packet))\n\t\t} else {\n\t\t\tp, _ := decode(packet)\n\t\t\tlog.Printf(\"decoding(%d): %d %#v - %d bytes\", m.chanList.offset, packet[0], p, len(packet))\n\t\t}\n\t}\n\n\tswitch packet[0] {\n\tcase msgChannelOpen:\n\t\treturn m.handleChannelOpen(packet)\n\tcase msgGlobalRequest, msgRequestSuccess, msgRequestFailure:\n\t\treturn m.handleGlobalPacket(packet)\n\tcase msgPing:\n\t\tvar msg pingMsg\n\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to unmarshal ping@openssh.com message: %w\", err)\n\t\t}\n\t\treturn m.sendMessage(pongMsg(msg))\n\t}\n\n\t// assume a channel packet.\n\tif len(packet) < 5 {\n\t\treturn parseError(packet[0])\n\t}\n\tid := binary.BigEndian.Uint32(packet[1:])\n\tch := m.chanList.getChan(id)\n\tif ch == nil {\n\t\treturn m.handleUnknownChannelPacket(id, packet)\n\t}\n\n\treturn ch.handlePacket(packet)\n}\n\nfunc (m *mux) handleGlobalPacket(packet []byte) error {\n\tmsg, err := decode(packet)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch msg := msg.(type) {\n\tcase *globalRequestMsg:\n\t\tm.incomingRequests <- &Request{\n\t\t\tType:      msg.Type,\n\t\t\tWantReply: msg.WantReply,\n\t\t\tPayload:   msg.Data,\n\t\t\tmux:       m,\n\t\t}\n\tcase *globalRequestSuccessMsg, *globalRequestFailureMsg:\n\t\tm.globalResponses <- msg\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"not a global message %#v\", msg))\n\t}\n\n\treturn nil\n}\n\n// handleChannelOpen schedules a channel to be Accept()ed.\nfunc (m *mux) handleChannelOpen(packet []byte) error {\n\tvar msg channelOpenMsg\n\tif err := Unmarshal(packet, &msg); err != nil {\n\t\treturn err\n\t}\n\n\tif msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 {\n\t\tfailMsg := channelOpenFailureMsg{\n\t\t\tPeersID:  msg.PeersID,\n\t\t\tReason:   ConnectionFailed,\n\t\t\tMessage:  \"invalid request\",\n\t\t\tLanguage: \"en_US.UTF-8\",\n\t\t}\n\t\treturn m.sendMessage(failMsg)\n\t}\n\n\tc := m.newChannel(msg.ChanType, channelInbound, msg.TypeSpecificData)\n\tc.remoteId = msg.PeersID\n\tc.maxRemotePayload = msg.MaxPacketSize\n\tc.remoteWin.add(msg.PeersWindow)\n\tm.incomingChannels <- c\n\treturn nil\n}\n\nfunc (m *mux) OpenChannel(chanType string, extra []byte) (Channel, <-chan *Request, error) {\n\tch, err := m.openChannel(chanType, extra)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\treturn ch, ch.incomingRequests, nil\n}\n\nfunc (m *mux) openChannel(chanType string, extra []byte) (*channel, error) {\n\tch := m.newChannel(chanType, channelOutbound, extra)\n\n\tch.maxIncomingPayload = channelMaxPacket\n\n\topen := channelOpenMsg{\n\t\tChanType:         chanType,\n\t\tPeersWindow:      ch.myWindow,\n\t\tMaxPacketSize:    ch.maxIncomingPayload,\n\t\tTypeSpecificData: extra,\n\t\tPeersID:          ch.localId,\n\t}\n\tif err := m.sendMessage(open); err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch msg := (<-ch.msg).(type) {\n\tcase *channelOpenConfirmMsg:\n\t\treturn ch, nil\n\tcase *channelOpenFailureMsg:\n\t\treturn nil, &OpenChannelError{msg.Reason, msg.Message}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unexpected packet in response to channel open: %T\", msg)\n\t}\n}\n\nfunc (m *mux) handleUnknownChannelPacket(id uint32, packet []byte) error {\n\tmsg, err := decode(packet)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch msg := msg.(type) {\n\t// RFC 4254 section 5.4 says unrecognized channel requests should\n\t// receive a failure response.\n\tcase *channelRequestMsg:\n\t\tif msg.WantReply {\n\t\t\treturn m.sendMessage(channelRequestFailureMsg{\n\t\t\t\tPeersID: msg.PeersID,\n\t\t\t})\n\t\t}\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"ssh: invalid channel %d\", id)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/server.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"strings\"\n)\n\n// The Permissions type holds fine-grained permissions that are\n// specific to a user or a specific authentication method for a user.\n// The Permissions value for a successful authentication attempt is\n// available in ServerConn, so it can be used to pass information from\n// the user-authentication phase to the application layer.\ntype Permissions struct {\n\t// CriticalOptions indicate restrictions to the default\n\t// permissions, and are typically used in conjunction with\n\t// user certificates. The standard for SSH certificates\n\t// defines \"force-command\" (only allow the given command to\n\t// execute) and \"source-address\" (only allow connections from\n\t// the given address). The SSH package currently only enforces\n\t// the \"source-address\" critical option. It is up to server\n\t// implementations to enforce other critical options, such as\n\t// \"force-command\", by checking them after the SSH handshake\n\t// is successful. In general, SSH servers should reject\n\t// connections that specify critical options that are unknown\n\t// or not supported.\n\tCriticalOptions map[string]string\n\n\t// Extensions are extra functionality that the server may\n\t// offer on authenticated connections. Lack of support for an\n\t// extension does not preclude authenticating a user. Common\n\t// extensions are \"permit-agent-forwarding\",\n\t// \"permit-X11-forwarding\". The Go SSH library currently does\n\t// not act on any extension, and it is up to server\n\t// implementations to honor them. Extensions can be used to\n\t// pass data from the authentication callbacks to the server\n\t// application layer.\n\tExtensions map[string]string\n}\n\ntype GSSAPIWithMICConfig struct {\n\t// AllowLogin, must be set, is called when gssapi-with-mic\n\t// authentication is selected (RFC 4462 section 3). The srcName is from the\n\t// results of the GSS-API authentication. The format is username@DOMAIN.\n\t// GSSAPI just guarantees to the server who the user is, but not if they can log in, and with what permissions.\n\t// This callback is called after the user identity is established with GSSAPI to decide if the user can login with\n\t// which permissions. If the user is allowed to login, it should return a nil error.\n\tAllowLogin func(conn ConnMetadata, srcName string) (*Permissions, error)\n\n\t// Server must be set. It's the implementation\n\t// of the GSSAPIServer interface. See GSSAPIServer interface for details.\n\tServer GSSAPIServer\n}\n\n// SendAuthBanner implements [ServerPreAuthConn].\nfunc (s *connection) SendAuthBanner(msg string) error {\n\treturn s.transport.writePacket(Marshal(&userAuthBannerMsg{\n\t\tMessage: msg,\n\t}))\n}\n\nfunc (*connection) unexportedMethodForFutureProofing() {}\n\n// ServerPreAuthConn is the interface available on an incoming server\n// connection before authentication has completed.\ntype ServerPreAuthConn interface {\n\tunexportedMethodForFutureProofing() // permits growing ServerPreAuthConn safely later, ala testing.TB\n\n\tConnMetadata\n\n\t// SendAuthBanner sends a banner message to the client.\n\t// It returns an error once the authentication phase has ended.\n\tSendAuthBanner(string) error\n}\n\n// ServerConfig holds server specific configuration data.\ntype ServerConfig struct {\n\t// Config contains configuration shared between client and server.\n\tConfig\n\n\t// PublicKeyAuthAlgorithms specifies the supported client public key\n\t// authentication algorithms. Note that this should not include certificate\n\t// types since those use the underlying algorithm. This list is sent to the\n\t// client if it supports the server-sig-algs extension. Order is irrelevant.\n\t// If unspecified then a default set of algorithms is used.\n\tPublicKeyAuthAlgorithms []string\n\n\thostKeys []Signer\n\n\t// NoClientAuth is true if clients are allowed to connect without\n\t// authenticating.\n\t// To determine NoClientAuth at runtime, set NoClientAuth to true\n\t// and the optional NoClientAuthCallback to a non-nil value.\n\tNoClientAuth bool\n\n\t// NoClientAuthCallback, if non-nil, is called when a user\n\t// attempts to authenticate with auth method \"none\".\n\t// NoClientAuth must also be set to true for this be used, or\n\t// this func is unused.\n\tNoClientAuthCallback func(ConnMetadata) (*Permissions, error)\n\n\t// MaxAuthTries specifies the maximum number of authentication attempts\n\t// permitted per connection. If set to a negative number, the number of\n\t// attempts are unlimited. If set to zero, the number of attempts are limited\n\t// to 6.\n\tMaxAuthTries int\n\n\t// PasswordCallback, if non-nil, is called when a user\n\t// attempts to authenticate using a password.\n\tPasswordCallback func(conn ConnMetadata, password []byte) (*Permissions, error)\n\n\t// PublicKeyCallback, if non-nil, is called when a client\n\t// offers a public key for authentication. It must return a nil error\n\t// if the given public key can be used to authenticate the\n\t// given user. For example, see CertChecker.Authenticate. A\n\t// call to this function does not guarantee that the key\n\t// offered is in fact used to authenticate. To record any data\n\t// depending on the public key, store it inside a\n\t// Permissions.Extensions entry.\n\tPublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)\n\n\t// KeyboardInteractiveCallback, if non-nil, is called when\n\t// keyboard-interactive authentication is selected (RFC\n\t// 4256). The client object's Challenge function should be\n\t// used to query the user. The callback may offer multiple\n\t// Challenge rounds. To avoid information leaks, the client\n\t// should be presented a challenge even if the user is\n\t// unknown.\n\tKeyboardInteractiveCallback func(conn ConnMetadata, client KeyboardInteractiveChallenge) (*Permissions, error)\n\n\t// AuthLogCallback, if non-nil, is called to log all authentication\n\t// attempts.\n\tAuthLogCallback func(conn ConnMetadata, method string, err error)\n\n\t// PreAuthConnCallback, if non-nil, is called upon receiving a new connection\n\t// before any authentication has started. The provided ServerPreAuthConn\n\t// can be used at any time before authentication is complete, including\n\t// after this callback has returned.\n\tPreAuthConnCallback func(ServerPreAuthConn)\n\n\t// ServerVersion is the version identification string to announce in\n\t// the public handshake.\n\t// If empty, a reasonable default is used.\n\t// Note that RFC 4253 section 4.2 requires that this string start with\n\t// \"SSH-2.0-\".\n\tServerVersion string\n\n\t// BannerCallback, if present, is called and the return string is sent to\n\t// the client after key exchange completed but before authentication.\n\tBannerCallback func(conn ConnMetadata) string\n\n\t// GSSAPIWithMICConfig includes gssapi server and callback, which if both non-nil, is used\n\t// when gssapi-with-mic authentication is selected (RFC 4462 section 3).\n\tGSSAPIWithMICConfig *GSSAPIWithMICConfig\n}\n\n// AddHostKey adds a private key as a host key. If an existing host\n// key exists with the same public key format, it is replaced. Each server\n// config must have at least one host key.\nfunc (s *ServerConfig) AddHostKey(key Signer) {\n\tfor i, k := range s.hostKeys {\n\t\tif k.PublicKey().Type() == key.PublicKey().Type() {\n\t\t\ts.hostKeys[i] = key\n\t\t\treturn\n\t\t}\n\t}\n\n\ts.hostKeys = append(s.hostKeys, key)\n}\n\n// cachedPubKey contains the results of querying whether a public key is\n// acceptable for a user. This is a FIFO cache.\ntype cachedPubKey struct {\n\tuser       string\n\tpubKeyData []byte\n\tresult     error\n\tperms      *Permissions\n}\n\n// maxCachedPubKeys is the number of cache entries we store.\n//\n// Due to consistent misuse of the PublicKeyCallback API, we have reduced this\n// to 1, such that the only key in the cache is the most recently seen one. This\n// forces the behavior that the last call to PublicKeyCallback will always be\n// with the key that is used for authentication.\nconst maxCachedPubKeys = 1\n\n// pubKeyCache caches tests for public keys.  Since SSH clients\n// will query whether a public key is acceptable before attempting to\n// authenticate with it, we end up with duplicate queries for public\n// key validity.  The cache only applies to a single ServerConn.\ntype pubKeyCache struct {\n\tkeys []cachedPubKey\n}\n\n// get returns the result for a given user/algo/key tuple.\nfunc (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) {\n\tfor _, k := range c.keys {\n\t\tif k.user == user && bytes.Equal(k.pubKeyData, pubKeyData) {\n\t\t\treturn k, true\n\t\t}\n\t}\n\treturn cachedPubKey{}, false\n}\n\n// add adds the given tuple to the cache.\nfunc (c *pubKeyCache) add(candidate cachedPubKey) {\n\tif len(c.keys) >= maxCachedPubKeys {\n\t\tc.keys = c.keys[1:]\n\t}\n\tc.keys = append(c.keys, candidate)\n}\n\n// ServerConn is an authenticated SSH connection, as seen from the\n// server\ntype ServerConn struct {\n\tConn\n\n\t// If the succeeding authentication callback returned a\n\t// non-nil Permissions pointer, it is stored here.\n\tPermissions *Permissions\n}\n\n// NewServerConn starts a new SSH server with c as the underlying\n// transport.  It starts with a handshake and, if the handshake is\n// unsuccessful, it closes the connection and returns an error.  The\n// Request and NewChannel channels must be serviced, or the connection\n// will hang.\n//\n// The returned error may be of type *ServerAuthError for\n// authentication errors.\nfunc NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) {\n\tfullConf := *config\n\tfullConf.SetDefaults()\n\tif fullConf.MaxAuthTries == 0 {\n\t\tfullConf.MaxAuthTries = 6\n\t}\n\tif len(fullConf.PublicKeyAuthAlgorithms) == 0 {\n\t\tfullConf.PublicKeyAuthAlgorithms = supportedPubKeyAuthAlgos\n\t} else {\n\t\tfor _, algo := range fullConf.PublicKeyAuthAlgorithms {\n\t\t\tif !contains(supportedPubKeyAuthAlgos, algo) {\n\t\t\t\tc.Close()\n\t\t\t\treturn nil, nil, nil, fmt.Errorf(\"ssh: unsupported public key authentication algorithm %s\", algo)\n\t\t\t}\n\t\t}\n\t}\n\t// Check if the config contains any unsupported key exchanges\n\tfor _, kex := range fullConf.KeyExchanges {\n\t\tif _, ok := serverForbiddenKexAlgos[kex]; ok {\n\t\t\tc.Close()\n\t\t\treturn nil, nil, nil, fmt.Errorf(\"ssh: unsupported key exchange %s for server\", kex)\n\t\t}\n\t}\n\n\ts := &connection{\n\t\tsshConn: sshConn{conn: c},\n\t}\n\tperms, err := s.serverHandshake(&fullConf)\n\tif err != nil {\n\t\tc.Close()\n\t\treturn nil, nil, nil, err\n\t}\n\treturn &ServerConn{s, perms}, s.mux.incomingChannels, s.mux.incomingRequests, nil\n}\n\n// signAndMarshal signs the data with the appropriate algorithm,\n// and serializes the result in SSH wire format. algo is the negotiate\n// algorithm and may be a certificate type.\nfunc signAndMarshal(k AlgorithmSigner, rand io.Reader, data []byte, algo string) ([]byte, error) {\n\tsig, err := k.SignWithAlgorithm(rand, data, underlyingAlgo(algo))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn Marshal(sig), nil\n}\n\n// handshake performs key exchange and user authentication.\nfunc (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) {\n\tif len(config.hostKeys) == 0 {\n\t\treturn nil, errors.New(\"ssh: server has no host keys\")\n\t}\n\n\tif !config.NoClientAuth && config.PasswordCallback == nil && config.PublicKeyCallback == nil &&\n\t\tconfig.KeyboardInteractiveCallback == nil && (config.GSSAPIWithMICConfig == nil ||\n\t\tconfig.GSSAPIWithMICConfig.AllowLogin == nil || config.GSSAPIWithMICConfig.Server == nil) {\n\t\treturn nil, errors.New(\"ssh: no authentication methods configured but NoClientAuth is also false\")\n\t}\n\n\tif config.ServerVersion != \"\" {\n\t\ts.serverVersion = []byte(config.ServerVersion)\n\t} else {\n\t\ts.serverVersion = []byte(packageVersion)\n\t}\n\tvar err error\n\ts.clientVersion, err = exchangeVersions(s.sshConn.conn, s.serverVersion)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttr := newTransport(s.sshConn.conn, config.Rand, false /* not client */)\n\ts.transport = newServerTransport(tr, s.clientVersion, s.serverVersion, config)\n\n\tif err := s.transport.waitSession(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We just did the key change, so the session ID is established.\n\ts.sessionID = s.transport.getSessionID()\n\n\tvar packet []byte\n\tif packet, err = s.transport.readPacket(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar serviceRequest serviceRequestMsg\n\tif err = Unmarshal(packet, &serviceRequest); err != nil {\n\t\treturn nil, err\n\t}\n\tif serviceRequest.Service != serviceUserAuth {\n\t\treturn nil, errors.New(\"ssh: requested service '\" + serviceRequest.Service + \"' before authenticating\")\n\t}\n\tserviceAccept := serviceAcceptMsg{\n\t\tService: serviceUserAuth,\n\t}\n\tif err := s.transport.writePacket(Marshal(&serviceAccept)); err != nil {\n\t\treturn nil, err\n\t}\n\n\tperms, err := s.serverAuthenticate(config)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts.mux = newMux(s.transport)\n\treturn perms, err\n}\n\nfunc checkSourceAddress(addr net.Addr, sourceAddrs string) error {\n\tif addr == nil {\n\t\treturn errors.New(\"ssh: no address known for client, but source-address match required\")\n\t}\n\n\ttcpAddr, ok := addr.(*net.TCPAddr)\n\tif !ok {\n\t\treturn fmt.Errorf(\"ssh: remote address %v is not an TCP address when checking source-address match\", addr)\n\t}\n\n\tfor _, sourceAddr := range strings.Split(sourceAddrs, \",\") {\n\t\tif allowedIP := net.ParseIP(sourceAddr); allowedIP != nil {\n\t\t\tif allowedIP.Equal(tcpAddr.IP) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t} else {\n\t\t\t_, ipNet, err := net.ParseCIDR(sourceAddr)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"ssh: error parsing source-address restriction %q: %v\", sourceAddr, err)\n\t\t\t}\n\n\t\t\tif ipNet.Contains(tcpAddr.IP) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fmt.Errorf(\"ssh: remote address %v is not allowed because of source-address restriction\", addr)\n}\n\nfunc gssExchangeToken(gssapiConfig *GSSAPIWithMICConfig, token []byte, s *connection,\n\tsessionID []byte, userAuthReq userAuthRequestMsg) (authErr error, perms *Permissions, err error) {\n\tgssAPIServer := gssapiConfig.Server\n\tdefer gssAPIServer.DeleteSecContext()\n\tvar srcName string\n\tfor {\n\t\tvar (\n\t\t\toutToken     []byte\n\t\t\tneedContinue bool\n\t\t)\n\t\toutToken, srcName, needContinue, err = gssAPIServer.AcceptSecContext(token)\n\t\tif err != nil {\n\t\t\treturn err, nil, nil\n\t\t}\n\t\tif len(outToken) != 0 {\n\t\t\tif err := s.transport.writePacket(Marshal(&userAuthGSSAPIToken{\n\t\t\t\tToken: outToken,\n\t\t\t})); err != nil {\n\t\t\t\treturn nil, nil, err\n\t\t\t}\n\t\t}\n\t\tif !needContinue {\n\t\t\tbreak\n\t\t}\n\t\tpacket, err := s.transport.readPacket()\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t\tuserAuthGSSAPITokenReq := &userAuthGSSAPIToken{}\n\t\tif err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t\ttoken = userAuthGSSAPITokenReq.Token\n\t}\n\tpacket, err := s.transport.readPacket()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tuserAuthGSSAPIMICReq := &userAuthGSSAPIMIC{}\n\tif err := Unmarshal(packet, userAuthGSSAPIMICReq); err != nil {\n\t\treturn nil, nil, err\n\t}\n\tmic := buildMIC(string(sessionID), userAuthReq.User, userAuthReq.Service, userAuthReq.Method)\n\tif err := gssAPIServer.VerifyMIC(mic, userAuthGSSAPIMICReq.MIC); err != nil {\n\t\treturn err, nil, nil\n\t}\n\tperms, authErr = gssapiConfig.AllowLogin(s, srcName)\n\treturn authErr, perms, nil\n}\n\n// isAlgoCompatible checks if the signature format is compatible with the\n// selected algorithm taking into account edge cases that occur with old\n// clients.\nfunc isAlgoCompatible(algo, sigFormat string) bool {\n\t// Compatibility for old clients.\n\t//\n\t// For certificate authentication with OpenSSH 7.2-7.7 signature format can\n\t// be rsa-sha2-256 or rsa-sha2-512 for the algorithm\n\t// ssh-rsa-cert-v01@openssh.com.\n\t//\n\t// With gpg-agent < 2.2.6 the algorithm can be rsa-sha2-256 or rsa-sha2-512\n\t// for signature format ssh-rsa.\n\tif isRSA(algo) && isRSA(sigFormat) {\n\t\treturn true\n\t}\n\t// Standard case: the underlying algorithm must match the signature format.\n\treturn underlyingAlgo(algo) == sigFormat\n}\n\n// ServerAuthError represents server authentication errors and is\n// sometimes returned by NewServerConn. It appends any authentication\n// errors that may occur, and is returned if all of the authentication\n// methods provided by the user failed to authenticate.\ntype ServerAuthError struct {\n\t// Errors contains authentication errors returned by the authentication\n\t// callback methods. The first entry is typically ErrNoAuth.\n\tErrors []error\n}\n\nfunc (l ServerAuthError) Error() string {\n\tvar errs []string\n\tfor _, err := range l.Errors {\n\t\terrs = append(errs, err.Error())\n\t}\n\treturn \"[\" + strings.Join(errs, \", \") + \"]\"\n}\n\n// ServerAuthCallbacks defines server-side authentication callbacks.\ntype ServerAuthCallbacks struct {\n\t// PasswordCallback behaves like [ServerConfig.PasswordCallback].\n\tPasswordCallback func(conn ConnMetadata, password []byte) (*Permissions, error)\n\n\t// PublicKeyCallback behaves like [ServerConfig.PublicKeyCallback].\n\tPublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error)\n\n\t// KeyboardInteractiveCallback behaves like [ServerConfig.KeyboardInteractiveCallback].\n\tKeyboardInteractiveCallback func(conn ConnMetadata, client KeyboardInteractiveChallenge) (*Permissions, error)\n\n\t// GSSAPIWithMICConfig behaves like [ServerConfig.GSSAPIWithMICConfig].\n\tGSSAPIWithMICConfig *GSSAPIWithMICConfig\n}\n\n// PartialSuccessError can be returned by any of the [ServerConfig]\n// authentication callbacks to indicate to the client that authentication has\n// partially succeeded, but further steps are required.\ntype PartialSuccessError struct {\n\t// Next defines the authentication callbacks to apply to further steps. The\n\t// available methods communicated to the client are based on the non-nil\n\t// ServerAuthCallbacks fields.\n\tNext ServerAuthCallbacks\n}\n\nfunc (p *PartialSuccessError) Error() string {\n\treturn \"ssh: authenticated with partial success\"\n}\n\n// ErrNoAuth is the error value returned if no\n// authentication method has been passed yet. This happens as a normal\n// part of the authentication loop, since the client first tries\n// 'none' authentication to discover available methods.\n// It is returned in ServerAuthError.Errors from NewServerConn.\nvar ErrNoAuth = errors.New(\"ssh: no auth passed yet\")\n\n// BannerError is an error that can be returned by authentication handlers in\n// ServerConfig to send a banner message to the client.\ntype BannerError struct {\n\tErr     error\n\tMessage string\n}\n\nfunc (b *BannerError) Unwrap() error {\n\treturn b.Err\n}\n\nfunc (b *BannerError) Error() string {\n\tif b.Err == nil {\n\t\treturn b.Message\n\t}\n\treturn b.Err.Error()\n}\n\nfunc (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) {\n\tif config.PreAuthConnCallback != nil {\n\t\tconfig.PreAuthConnCallback(s)\n\t}\n\n\tsessionID := s.transport.getSessionID()\n\tvar cache pubKeyCache\n\tvar perms *Permissions\n\n\tauthFailures := 0\n\tnoneAuthCount := 0\n\tvar authErrs []error\n\tvar calledBannerCallback bool\n\tpartialSuccessReturned := false\n\t// Set the initial authentication callbacks from the config. They can be\n\t// changed if a PartialSuccessError is returned.\n\tauthConfig := ServerAuthCallbacks{\n\t\tPasswordCallback:            config.PasswordCallback,\n\t\tPublicKeyCallback:           config.PublicKeyCallback,\n\t\tKeyboardInteractiveCallback: config.KeyboardInteractiveCallback,\n\t\tGSSAPIWithMICConfig:         config.GSSAPIWithMICConfig,\n\t}\n\nuserAuthLoop:\n\tfor {\n\t\tif authFailures >= config.MaxAuthTries && config.MaxAuthTries > 0 {\n\t\t\tdiscMsg := &disconnectMsg{\n\t\t\t\tReason:  2,\n\t\t\t\tMessage: \"too many authentication failures\",\n\t\t\t}\n\n\t\t\tif err := s.transport.writePacket(Marshal(discMsg)); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tauthErrs = append(authErrs, discMsg)\n\t\t\treturn nil, &ServerAuthError{Errors: authErrs}\n\t\t}\n\n\t\tvar userAuthReq userAuthRequestMsg\n\t\tif packet, err := s.transport.readPacket(); err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\treturn nil, &ServerAuthError{Errors: authErrs}\n\t\t\t}\n\t\t\treturn nil, err\n\t\t} else if err = Unmarshal(packet, &userAuthReq); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif userAuthReq.Service != serviceSSH {\n\t\t\treturn nil, errors.New(\"ssh: client attempted to negotiate for unknown service: \" + userAuthReq.Service)\n\t\t}\n\n\t\tif s.user != userAuthReq.User && partialSuccessReturned {\n\t\t\treturn nil, fmt.Errorf(\"ssh: client changed the user after a partial success authentication, previous user %q, current user %q\",\n\t\t\t\ts.user, userAuthReq.User)\n\t\t}\n\n\t\ts.user = userAuthReq.User\n\n\t\tif !calledBannerCallback && config.BannerCallback != nil {\n\t\t\tcalledBannerCallback = true\n\t\t\tif msg := config.BannerCallback(s); msg != \"\" {\n\t\t\t\tif err := s.SendAuthBanner(msg); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tperms = nil\n\t\tauthErr := ErrNoAuth\n\n\t\tswitch userAuthReq.Method {\n\t\tcase \"none\":\n\t\t\tnoneAuthCount++\n\t\t\t// We don't allow none authentication after a partial success\n\t\t\t// response.\n\t\t\tif config.NoClientAuth && !partialSuccessReturned {\n\t\t\t\tif config.NoClientAuthCallback != nil {\n\t\t\t\t\tperms, authErr = config.NoClientAuthCallback(s)\n\t\t\t\t} else {\n\t\t\t\t\tauthErr = nil\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"password\":\n\t\t\tif authConfig.PasswordCallback == nil {\n\t\t\t\tauthErr = errors.New(\"ssh: password auth not configured\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tpayload := userAuthReq.Payload\n\t\t\tif len(payload) < 1 || payload[0] != 0 {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\t\t\tpayload = payload[1:]\n\t\t\tpassword, payload, ok := parseString(payload)\n\t\t\tif !ok || len(payload) > 0 {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\n\t\t\tperms, authErr = authConfig.PasswordCallback(s, password)\n\t\tcase \"keyboard-interactive\":\n\t\t\tif authConfig.KeyboardInteractiveCallback == nil {\n\t\t\t\tauthErr = errors.New(\"ssh: keyboard-interactive auth not configured\")\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tprompter := &sshClientKeyboardInteractive{s}\n\t\t\tperms, authErr = authConfig.KeyboardInteractiveCallback(s, prompter.Challenge)\n\t\tcase \"publickey\":\n\t\t\tif authConfig.PublicKeyCallback == nil {\n\t\t\t\tauthErr = errors.New(\"ssh: publickey auth not configured\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tpayload := userAuthReq.Payload\n\t\t\tif len(payload) < 1 {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\t\t\tisQuery := payload[0] == 0\n\t\t\tpayload = payload[1:]\n\t\t\talgoBytes, payload, ok := parseString(payload)\n\t\t\tif !ok {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\t\t\talgo := string(algoBytes)\n\t\t\tif !contains(config.PublicKeyAuthAlgorithms, underlyingAlgo(algo)) {\n\t\t\t\tauthErr = fmt.Errorf(\"ssh: algorithm %q not accepted\", algo)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tpubKeyData, payload, ok := parseString(payload)\n\t\t\tif !ok {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\n\t\t\tpubKey, err := ParsePublicKey(pubKeyData)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tcandidate, ok := cache.get(s.user, pubKeyData)\n\t\t\tif !ok {\n\t\t\t\tcandidate.user = s.user\n\t\t\t\tcandidate.pubKeyData = pubKeyData\n\t\t\t\tcandidate.perms, candidate.result = authConfig.PublicKeyCallback(s, pubKey)\n\t\t\t\t_, isPartialSuccessError := candidate.result.(*PartialSuccessError)\n\n\t\t\t\tif (candidate.result == nil || isPartialSuccessError) &&\n\t\t\t\t\tcandidate.perms != nil &&\n\t\t\t\t\tcandidate.perms.CriticalOptions != nil &&\n\t\t\t\t\tcandidate.perms.CriticalOptions[sourceAddressCriticalOption] != \"\" {\n\t\t\t\t\tif err := checkSourceAddress(\n\t\t\t\t\t\ts.RemoteAddr(),\n\t\t\t\t\t\tcandidate.perms.CriticalOptions[sourceAddressCriticalOption]); err != nil {\n\t\t\t\t\t\tcandidate.result = err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcache.add(candidate)\n\t\t\t}\n\n\t\t\tif isQuery {\n\t\t\t\t// The client can query if the given public key\n\t\t\t\t// would be okay.\n\n\t\t\t\tif len(payload) > 0 {\n\t\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t\t}\n\t\t\t\t_, isPartialSuccessError := candidate.result.(*PartialSuccessError)\n\t\t\t\tif candidate.result == nil || isPartialSuccessError {\n\t\t\t\t\tokMsg := userAuthPubKeyOkMsg{\n\t\t\t\t\t\tAlgo:   algo,\n\t\t\t\t\t\tPubKey: pubKeyData,\n\t\t\t\t\t}\n\t\t\t\t\tif err = s.transport.writePacket(Marshal(&okMsg)); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\tcontinue userAuthLoop\n\t\t\t\t}\n\t\t\t\tauthErr = candidate.result\n\t\t\t} else {\n\t\t\t\tsig, payload, ok := parseSignature(payload)\n\t\t\t\tif !ok || len(payload) > 0 {\n\t\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t\t}\n\t\t\t\t// Ensure the declared public key algo is compatible with the\n\t\t\t\t// decoded one. This check will ensure we don't accept e.g.\n\t\t\t\t// ssh-rsa-cert-v01@openssh.com algorithm with ssh-rsa public\n\t\t\t\t// key type. The algorithm and public key type must be\n\t\t\t\t// consistent: both must be certificate algorithms, or neither.\n\t\t\t\tif !contains(algorithmsForKeyFormat(pubKey.Type()), algo) {\n\t\t\t\t\tauthErr = fmt.Errorf(\"ssh: public key type %q not compatible with selected algorithm %q\",\n\t\t\t\t\t\tpubKey.Type(), algo)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// Ensure the public key algo and signature algo\n\t\t\t\t// are supported.  Compare the private key\n\t\t\t\t// algorithm name that corresponds to algo with\n\t\t\t\t// sig.Format.  This is usually the same, but\n\t\t\t\t// for certs, the names differ.\n\t\t\t\tif !contains(config.PublicKeyAuthAlgorithms, sig.Format) {\n\t\t\t\t\tauthErr = fmt.Errorf(\"ssh: algorithm %q not accepted\", sig.Format)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif !isAlgoCompatible(algo, sig.Format) {\n\t\t\t\t\tauthErr = fmt.Errorf(\"ssh: signature %q not compatible with selected algorithm %q\", sig.Format, algo)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tsignedData := buildDataSignedForAuth(sessionID, userAuthReq, algo, pubKeyData)\n\n\t\t\t\tif err := pubKey.Verify(signedData, sig); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\tauthErr = candidate.result\n\t\t\t\tperms = candidate.perms\n\t\t\t}\n\t\tcase \"gssapi-with-mic\":\n\t\t\tif authConfig.GSSAPIWithMICConfig == nil {\n\t\t\t\tauthErr = errors.New(\"ssh: gssapi-with-mic auth not configured\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tgssapiConfig := authConfig.GSSAPIWithMICConfig\n\t\t\tuserAuthRequestGSSAPI, err := parseGSSAPIPayload(userAuthReq.Payload)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, parseError(msgUserAuthRequest)\n\t\t\t}\n\t\t\t// OpenSSH supports Kerberos V5 mechanism only for GSS-API authentication.\n\t\t\tif userAuthRequestGSSAPI.N == 0 {\n\t\t\t\tauthErr = fmt.Errorf(\"ssh: Mechanism negotiation is not supported\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvar i uint32\n\t\t\tpresent := false\n\t\t\tfor i = 0; i < userAuthRequestGSSAPI.N; i++ {\n\t\t\t\tif userAuthRequestGSSAPI.OIDS[i].Equal(krb5Mesh) {\n\t\t\t\t\tpresent = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !present {\n\t\t\t\tauthErr = fmt.Errorf(\"ssh: GSSAPI authentication must use the Kerberos V5 mechanism\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Initial server response, see RFC 4462 section 3.3.\n\t\t\tif err := s.transport.writePacket(Marshal(&userAuthGSSAPIResponse{\n\t\t\t\tSupportMech: krb5OID,\n\t\t\t})); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// Exchange token, see RFC 4462 section 3.4.\n\t\t\tpacket, err := s.transport.readPacket()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tuserAuthGSSAPITokenReq := &userAuthGSSAPIToken{}\n\t\t\tif err := Unmarshal(packet, userAuthGSSAPITokenReq); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tauthErr, perms, err = gssExchangeToken(gssapiConfig, userAuthGSSAPITokenReq.Token, s, sessionID,\n\t\t\t\tuserAuthReq)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\tdefault:\n\t\t\tauthErr = fmt.Errorf(\"ssh: unknown method %q\", userAuthReq.Method)\n\t\t}\n\n\t\tauthErrs = append(authErrs, authErr)\n\n\t\tif config.AuthLogCallback != nil {\n\t\t\tconfig.AuthLogCallback(s, userAuthReq.Method, authErr)\n\t\t}\n\n\t\tvar bannerErr *BannerError\n\t\tif errors.As(authErr, &bannerErr) {\n\t\t\tif bannerErr.Message != \"\" {\n\t\t\t\tif err := s.SendAuthBanner(bannerErr.Message); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif authErr == nil {\n\t\t\tbreak userAuthLoop\n\t\t}\n\n\t\tvar failureMsg userAuthFailureMsg\n\n\t\tif partialSuccess, ok := authErr.(*PartialSuccessError); ok {\n\t\t\t// After a partial success error we don't allow changing the user\n\t\t\t// name and execute the NoClientAuthCallback.\n\t\t\tpartialSuccessReturned = true\n\n\t\t\t// In case a partial success is returned, the server may send\n\t\t\t// a new set of authentication methods.\n\t\t\tauthConfig = partialSuccess.Next\n\n\t\t\t// Reset pubkey cache, as the new PublicKeyCallback might\n\t\t\t// accept a different set of public keys.\n\t\t\tcache = pubKeyCache{}\n\n\t\t\t// Send back a partial success message to the user.\n\t\t\tfailureMsg.PartialSuccess = true\n\t\t} else {\n\t\t\t// Allow initial attempt of 'none' without penalty.\n\t\t\tif authFailures > 0 || userAuthReq.Method != \"none\" || noneAuthCount != 1 {\n\t\t\t\tauthFailures++\n\t\t\t}\n\t\t\tif config.MaxAuthTries > 0 && authFailures >= config.MaxAuthTries {\n\t\t\t\t// If we have hit the max attempts, don't bother sending the\n\t\t\t\t// final SSH_MSG_USERAUTH_FAILURE message, since there are\n\t\t\t\t// no more authentication methods which can be attempted,\n\t\t\t\t// and this message may cause the client to re-attempt\n\t\t\t\t// authentication while we send the disconnect message.\n\t\t\t\t// Continue, and trigger the disconnect at the start of\n\t\t\t\t// the loop.\n\t\t\t\t//\n\t\t\t\t// The SSH specification is somewhat confusing about this,\n\t\t\t\t// RFC 4252 Section 5.1 requires each authentication failure\n\t\t\t\t// be responded to with a respective SSH_MSG_USERAUTH_FAILURE\n\t\t\t\t// message, but Section 4 says the server should disconnect\n\t\t\t\t// after some number of attempts, but it isn't explicit which\n\t\t\t\t// message should take precedence (i.e. should there be a failure\n\t\t\t\t// message than a disconnect message, or if we are going to\n\t\t\t\t// disconnect, should we only send that message.)\n\t\t\t\t//\n\t\t\t\t// Either way, OpenSSH disconnects immediately after the last\n\t\t\t\t// failed authentication attempt, and given they are typically\n\t\t\t\t// considered the golden implementation it seems reasonable\n\t\t\t\t// to match that behavior.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif authConfig.PasswordCallback != nil {\n\t\t\tfailureMsg.Methods = append(failureMsg.Methods, \"password\")\n\t\t}\n\t\tif authConfig.PublicKeyCallback != nil {\n\t\t\tfailureMsg.Methods = append(failureMsg.Methods, \"publickey\")\n\t\t}\n\t\tif authConfig.KeyboardInteractiveCallback != nil {\n\t\t\tfailureMsg.Methods = append(failureMsg.Methods, \"keyboard-interactive\")\n\t\t}\n\t\tif authConfig.GSSAPIWithMICConfig != nil && authConfig.GSSAPIWithMICConfig.Server != nil &&\n\t\t\tauthConfig.GSSAPIWithMICConfig.AllowLogin != nil {\n\t\t\tfailureMsg.Methods = append(failureMsg.Methods, \"gssapi-with-mic\")\n\t\t}\n\n\t\tif len(failureMsg.Methods) == 0 {\n\t\t\treturn nil, errors.New(\"ssh: no authentication methods available\")\n\t\t}\n\n\t\tif err := s.transport.writePacket(Marshal(&failureMsg)); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif err := s.transport.writePacket([]byte{msgUserAuthSuccess}); err != nil {\n\t\treturn nil, err\n\t}\n\treturn perms, nil\n}\n\n// sshClientKeyboardInteractive implements a ClientKeyboardInteractive by\n// asking the client on the other side of a ServerConn.\ntype sshClientKeyboardInteractive struct {\n\t*connection\n}\n\nfunc (c *sshClientKeyboardInteractive) Challenge(name, instruction string, questions []string, echos []bool) (answers []string, err error) {\n\tif len(questions) != len(echos) {\n\t\treturn nil, errors.New(\"ssh: echos and questions must have equal length\")\n\t}\n\n\tvar prompts []byte\n\tfor i := range questions {\n\t\tprompts = appendString(prompts, questions[i])\n\t\tprompts = appendBool(prompts, echos[i])\n\t}\n\n\tif err := c.transport.writePacket(Marshal(&userAuthInfoRequestMsg{\n\t\tName:        name,\n\t\tInstruction: instruction,\n\t\tNumPrompts:  uint32(len(questions)),\n\t\tPrompts:     prompts,\n\t})); err != nil {\n\t\treturn nil, err\n\t}\n\n\tpacket, err := c.transport.readPacket()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif packet[0] != msgUserAuthInfoResponse {\n\t\treturn nil, unexpectedMessageError(msgUserAuthInfoResponse, packet[0])\n\t}\n\tpacket = packet[1:]\n\n\tn, packet, ok := parseUint32(packet)\n\tif !ok || int(n) != len(questions) {\n\t\treturn nil, parseError(msgUserAuthInfoResponse)\n\t}\n\n\tfor i := uint32(0); i < n; i++ {\n\t\tans, rest, ok := parseString(packet)\n\t\tif !ok {\n\t\t\treturn nil, parseError(msgUserAuthInfoResponse)\n\t\t}\n\n\t\tanswers = append(answers, string(ans))\n\t\tpacket = rest\n\t}\n\tif len(packet) != 0 {\n\t\treturn nil, errors.New(\"ssh: junk at end of message\")\n\t}\n\n\treturn answers, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/session.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\n// Session implements an interactive session described in\n// \"RFC 4254, section 6\".\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n)\n\ntype Signal string\n\n// POSIX signals as listed in RFC 4254 Section 6.10.\nconst (\n\tSIGABRT Signal = \"ABRT\"\n\tSIGALRM Signal = \"ALRM\"\n\tSIGFPE  Signal = \"FPE\"\n\tSIGHUP  Signal = \"HUP\"\n\tSIGILL  Signal = \"ILL\"\n\tSIGINT  Signal = \"INT\"\n\tSIGKILL Signal = \"KILL\"\n\tSIGPIPE Signal = \"PIPE\"\n\tSIGQUIT Signal = \"QUIT\"\n\tSIGSEGV Signal = \"SEGV\"\n\tSIGTERM Signal = \"TERM\"\n\tSIGUSR1 Signal = \"USR1\"\n\tSIGUSR2 Signal = \"USR2\"\n)\n\nvar signals = map[Signal]int{\n\tSIGABRT: 6,\n\tSIGALRM: 14,\n\tSIGFPE:  8,\n\tSIGHUP:  1,\n\tSIGILL:  4,\n\tSIGINT:  2,\n\tSIGKILL: 9,\n\tSIGPIPE: 13,\n\tSIGQUIT: 3,\n\tSIGSEGV: 11,\n\tSIGTERM: 15,\n}\n\ntype TerminalModes map[uint8]uint32\n\n// POSIX terminal mode flags as listed in RFC 4254 Section 8.\nconst (\n\ttty_OP_END    = 0\n\tVINTR         = 1\n\tVQUIT         = 2\n\tVERASE        = 3\n\tVKILL         = 4\n\tVEOF          = 5\n\tVEOL          = 6\n\tVEOL2         = 7\n\tVSTART        = 8\n\tVSTOP         = 9\n\tVSUSP         = 10\n\tVDSUSP        = 11\n\tVREPRINT      = 12\n\tVWERASE       = 13\n\tVLNEXT        = 14\n\tVFLUSH        = 15\n\tVSWTCH        = 16\n\tVSTATUS       = 17\n\tVDISCARD      = 18\n\tIGNPAR        = 30\n\tPARMRK        = 31\n\tINPCK         = 32\n\tISTRIP        = 33\n\tINLCR         = 34\n\tIGNCR         = 35\n\tICRNL         = 36\n\tIUCLC         = 37\n\tIXON          = 38\n\tIXANY         = 39\n\tIXOFF         = 40\n\tIMAXBEL       = 41\n\tIUTF8         = 42 // RFC 8160\n\tISIG          = 50\n\tICANON        = 51\n\tXCASE         = 52\n\tECHO          = 53\n\tECHOE         = 54\n\tECHOK         = 55\n\tECHONL        = 56\n\tNOFLSH        = 57\n\tTOSTOP        = 58\n\tIEXTEN        = 59\n\tECHOCTL       = 60\n\tECHOKE        = 61\n\tPENDIN        = 62\n\tOPOST         = 70\n\tOLCUC         = 71\n\tONLCR         = 72\n\tOCRNL         = 73\n\tONOCR         = 74\n\tONLRET        = 75\n\tCS7           = 90\n\tCS8           = 91\n\tPARENB        = 92\n\tPARODD        = 93\n\tTTY_OP_ISPEED = 128\n\tTTY_OP_OSPEED = 129\n)\n\n// A Session represents a connection to a remote command or shell.\ntype Session struct {\n\t// Stdin specifies the remote process's standard input.\n\t// If Stdin is nil, the remote process reads from an empty\n\t// bytes.Buffer.\n\tStdin io.Reader\n\n\t// Stdout and Stderr specify the remote process's standard\n\t// output and error.\n\t//\n\t// If either is nil, Run connects the corresponding file\n\t// descriptor to an instance of io.Discard. There is a\n\t// fixed amount of buffering that is shared for the two streams.\n\t// If either blocks it may eventually cause the remote\n\t// command to block.\n\tStdout io.Writer\n\tStderr io.Writer\n\n\tch        Channel // the channel backing this session\n\tstarted   bool    // true once Start, Run or Shell is invoked.\n\tcopyFuncs []func() error\n\terrors    chan error // one send per copyFunc\n\n\t// true if pipe method is active\n\tstdinpipe, stdoutpipe, stderrpipe bool\n\n\t// stdinPipeWriter is non-nil if StdinPipe has not been called\n\t// and Stdin was specified by the user; it is the write end of\n\t// a pipe connecting Session.Stdin to the stdin channel.\n\tstdinPipeWriter io.WriteCloser\n\n\texitStatus chan error\n}\n\n// SendRequest sends an out-of-band channel request on the SSH channel\n// underlying the session.\nfunc (s *Session) SendRequest(name string, wantReply bool, payload []byte) (bool, error) {\n\treturn s.ch.SendRequest(name, wantReply, payload)\n}\n\nfunc (s *Session) Close() error {\n\treturn s.ch.Close()\n}\n\n// RFC 4254 Section 6.4.\ntype setenvRequest struct {\n\tName  string\n\tValue string\n}\n\n// Setenv sets an environment variable that will be applied to any\n// command executed by Shell or Run.\nfunc (s *Session) Setenv(name, value string) error {\n\tmsg := setenvRequest{\n\t\tName:  name,\n\t\tValue: value,\n\t}\n\tok, err := s.ch.SendRequest(\"env\", true, Marshal(&msg))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: setenv failed\")\n\t}\n\treturn err\n}\n\n// RFC 4254 Section 6.2.\ntype ptyRequestMsg struct {\n\tTerm     string\n\tColumns  uint32\n\tRows     uint32\n\tWidth    uint32\n\tHeight   uint32\n\tModelist string\n}\n\n// RequestPty requests the association of a pty with the session on the remote host.\nfunc (s *Session) RequestPty(term string, h, w int, termmodes TerminalModes) error {\n\tvar tm []byte\n\tfor k, v := range termmodes {\n\t\tkv := struct {\n\t\t\tKey byte\n\t\t\tVal uint32\n\t\t}{k, v}\n\n\t\ttm = append(tm, Marshal(&kv)...)\n\t}\n\ttm = append(tm, tty_OP_END)\n\treq := ptyRequestMsg{\n\t\tTerm:     term,\n\t\tColumns:  uint32(w),\n\t\tRows:     uint32(h),\n\t\tWidth:    uint32(w * 8),\n\t\tHeight:   uint32(h * 8),\n\t\tModelist: string(tm),\n\t}\n\tok, err := s.ch.SendRequest(\"pty-req\", true, Marshal(&req))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: pty-req failed\")\n\t}\n\treturn err\n}\n\n// RFC 4254 Section 6.5.\ntype subsystemRequestMsg struct {\n\tSubsystem string\n}\n\n// RequestSubsystem requests the association of a subsystem with the session on the remote host.\n// A subsystem is a predefined command that runs in the background when the ssh session is initiated\nfunc (s *Session) RequestSubsystem(subsystem string) error {\n\tmsg := subsystemRequestMsg{\n\t\tSubsystem: subsystem,\n\t}\n\tok, err := s.ch.SendRequest(\"subsystem\", true, Marshal(&msg))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: subsystem request failed\")\n\t}\n\treturn err\n}\n\n// RFC 4254 Section 6.7.\ntype ptyWindowChangeMsg struct {\n\tColumns uint32\n\tRows    uint32\n\tWidth   uint32\n\tHeight  uint32\n}\n\n// WindowChange informs the remote host about a terminal window dimension change to h rows and w columns.\nfunc (s *Session) WindowChange(h, w int) error {\n\treq := ptyWindowChangeMsg{\n\t\tColumns: uint32(w),\n\t\tRows:    uint32(h),\n\t\tWidth:   uint32(w * 8),\n\t\tHeight:  uint32(h * 8),\n\t}\n\t_, err := s.ch.SendRequest(\"window-change\", false, Marshal(&req))\n\treturn err\n}\n\n// RFC 4254 Section 6.9.\ntype signalMsg struct {\n\tSignal string\n}\n\n// Signal sends the given signal to the remote process.\n// sig is one of the SIG* constants.\nfunc (s *Session) Signal(sig Signal) error {\n\tmsg := signalMsg{\n\t\tSignal: string(sig),\n\t}\n\n\t_, err := s.ch.SendRequest(\"signal\", false, Marshal(&msg))\n\treturn err\n}\n\n// RFC 4254 Section 6.5.\ntype execMsg struct {\n\tCommand string\n}\n\n// Start runs cmd on the remote host. Typically, the remote\n// server passes cmd to the shell for interpretation.\n// A Session only accepts one call to Run, Start or Shell.\nfunc (s *Session) Start(cmd string) error {\n\tif s.started {\n\t\treturn errors.New(\"ssh: session already started\")\n\t}\n\treq := execMsg{\n\t\tCommand: cmd,\n\t}\n\n\tok, err := s.ch.SendRequest(\"exec\", true, Marshal(&req))\n\tif err == nil && !ok {\n\t\terr = fmt.Errorf(\"ssh: command %v failed\", cmd)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.start()\n}\n\n// Run runs cmd on the remote host. Typically, the remote\n// server passes cmd to the shell for interpretation.\n// A Session only accepts one call to Run, Start, Shell, Output,\n// or CombinedOutput.\n//\n// The returned error is nil if the command runs, has no problems\n// copying stdin, stdout, and stderr, and exits with a zero exit\n// status.\n//\n// If the remote server does not send an exit status, an error of type\n// *ExitMissingError is returned. If the command completes\n// unsuccessfully or is interrupted by a signal, the error is of type\n// *ExitError. Other error types may be returned for I/O problems.\nfunc (s *Session) Run(cmd string) error {\n\terr := s.Start(cmd)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.Wait()\n}\n\n// Output runs cmd on the remote host and returns its standard output.\nfunc (s *Session) Output(cmd string) ([]byte, error) {\n\tif s.Stdout != nil {\n\t\treturn nil, errors.New(\"ssh: Stdout already set\")\n\t}\n\tvar b bytes.Buffer\n\ts.Stdout = &b\n\terr := s.Run(cmd)\n\treturn b.Bytes(), err\n}\n\ntype singleWriter struct {\n\tb  bytes.Buffer\n\tmu sync.Mutex\n}\n\nfunc (w *singleWriter) Write(p []byte) (int, error) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\treturn w.b.Write(p)\n}\n\n// CombinedOutput runs cmd on the remote host and returns its combined\n// standard output and standard error.\nfunc (s *Session) CombinedOutput(cmd string) ([]byte, error) {\n\tif s.Stdout != nil {\n\t\treturn nil, errors.New(\"ssh: Stdout already set\")\n\t}\n\tif s.Stderr != nil {\n\t\treturn nil, errors.New(\"ssh: Stderr already set\")\n\t}\n\tvar b singleWriter\n\ts.Stdout = &b\n\ts.Stderr = &b\n\terr := s.Run(cmd)\n\treturn b.b.Bytes(), err\n}\n\n// Shell starts a login shell on the remote host. A Session only\n// accepts one call to Run, Start, Shell, Output, or CombinedOutput.\nfunc (s *Session) Shell() error {\n\tif s.started {\n\t\treturn errors.New(\"ssh: session already started\")\n\t}\n\n\tok, err := s.ch.SendRequest(\"shell\", true, nil)\n\tif err == nil && !ok {\n\t\treturn errors.New(\"ssh: could not start shell\")\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.start()\n}\n\nfunc (s *Session) start() error {\n\ts.started = true\n\n\ttype F func(*Session)\n\tfor _, setupFd := range []F{(*Session).stdin, (*Session).stdout, (*Session).stderr} {\n\t\tsetupFd(s)\n\t}\n\n\ts.errors = make(chan error, len(s.copyFuncs))\n\tfor _, fn := range s.copyFuncs {\n\t\tgo func(fn func() error) {\n\t\t\ts.errors <- fn()\n\t\t}(fn)\n\t}\n\treturn nil\n}\n\n// Wait waits for the remote command to exit.\n//\n// The returned error is nil if the command runs, has no problems\n// copying stdin, stdout, and stderr, and exits with a zero exit\n// status.\n//\n// If the remote server does not send an exit status, an error of type\n// *ExitMissingError is returned. If the command completes\n// unsuccessfully or is interrupted by a signal, the error is of type\n// *ExitError. Other error types may be returned for I/O problems.\nfunc (s *Session) Wait() error {\n\tif !s.started {\n\t\treturn errors.New(\"ssh: session not started\")\n\t}\n\twaitErr := <-s.exitStatus\n\n\tif s.stdinPipeWriter != nil {\n\t\ts.stdinPipeWriter.Close()\n\t}\n\tvar copyError error\n\tfor range s.copyFuncs {\n\t\tif err := <-s.errors; err != nil && copyError == nil {\n\t\t\tcopyError = err\n\t\t}\n\t}\n\tif waitErr != nil {\n\t\treturn waitErr\n\t}\n\treturn copyError\n}\n\nfunc (s *Session) wait(reqs <-chan *Request) error {\n\twm := Waitmsg{status: -1}\n\t// Wait for msg channel to be closed before returning.\n\tfor msg := range reqs {\n\t\tswitch msg.Type {\n\t\tcase \"exit-status\":\n\t\t\twm.status = int(binary.BigEndian.Uint32(msg.Payload))\n\t\tcase \"exit-signal\":\n\t\t\tvar sigval struct {\n\t\t\t\tSignal     string\n\t\t\t\tCoreDumped bool\n\t\t\t\tError      string\n\t\t\t\tLang       string\n\t\t\t}\n\t\t\tif err := Unmarshal(msg.Payload, &sigval); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Must sanitize strings?\n\t\t\twm.signal = sigval.Signal\n\t\t\twm.msg = sigval.Error\n\t\t\twm.lang = sigval.Lang\n\t\tdefault:\n\t\t\t// This handles keepalives and matches\n\t\t\t// OpenSSH's behaviour.\n\t\t\tif msg.WantReply {\n\t\t\t\tmsg.Reply(false, nil)\n\t\t\t}\n\t\t}\n\t}\n\tif wm.status == 0 {\n\t\treturn nil\n\t}\n\tif wm.status == -1 {\n\t\t// exit-status was never sent from server\n\t\tif wm.signal == \"\" {\n\t\t\t// signal was not sent either.  RFC 4254\n\t\t\t// section 6.10 recommends against this\n\t\t\t// behavior, but it is allowed, so we let\n\t\t\t// clients handle it.\n\t\t\treturn &ExitMissingError{}\n\t\t}\n\t\twm.status = 128\n\t\tif _, ok := signals[Signal(wm.signal)]; ok {\n\t\t\twm.status += signals[Signal(wm.signal)]\n\t\t}\n\t}\n\n\treturn &ExitError{wm}\n}\n\n// ExitMissingError is returned if a session is torn down cleanly, but\n// the server sends no confirmation of the exit status.\ntype ExitMissingError struct{}\n\nfunc (e *ExitMissingError) Error() string {\n\treturn \"wait: remote command exited without exit status or exit signal\"\n}\n\nfunc (s *Session) stdin() {\n\tif s.stdinpipe {\n\t\treturn\n\t}\n\tvar stdin io.Reader\n\tif s.Stdin == nil {\n\t\tstdin = new(bytes.Buffer)\n\t} else {\n\t\tr, w := io.Pipe()\n\t\tgo func() {\n\t\t\t_, err := io.Copy(w, s.Stdin)\n\t\t\tw.CloseWithError(err)\n\t\t}()\n\t\tstdin, s.stdinPipeWriter = r, w\n\t}\n\ts.copyFuncs = append(s.copyFuncs, func() error {\n\t\t_, err := io.Copy(s.ch, stdin)\n\t\tif err1 := s.ch.CloseWrite(); err == nil && err1 != io.EOF {\n\t\t\terr = err1\n\t\t}\n\t\treturn err\n\t})\n}\n\nfunc (s *Session) stdout() {\n\tif s.stdoutpipe {\n\t\treturn\n\t}\n\tif s.Stdout == nil {\n\t\ts.Stdout = io.Discard\n\t}\n\ts.copyFuncs = append(s.copyFuncs, func() error {\n\t\t_, err := io.Copy(s.Stdout, s.ch)\n\t\treturn err\n\t})\n}\n\nfunc (s *Session) stderr() {\n\tif s.stderrpipe {\n\t\treturn\n\t}\n\tif s.Stderr == nil {\n\t\ts.Stderr = io.Discard\n\t}\n\ts.copyFuncs = append(s.copyFuncs, func() error {\n\t\t_, err := io.Copy(s.Stderr, s.ch.Stderr())\n\t\treturn err\n\t})\n}\n\n// sessionStdin reroutes Close to CloseWrite.\ntype sessionStdin struct {\n\tio.Writer\n\tch Channel\n}\n\nfunc (s *sessionStdin) Close() error {\n\treturn s.ch.CloseWrite()\n}\n\n// StdinPipe returns a pipe that will be connected to the\n// remote command's standard input when the command starts.\nfunc (s *Session) StdinPipe() (io.WriteCloser, error) {\n\tif s.Stdin != nil {\n\t\treturn nil, errors.New(\"ssh: Stdin already set\")\n\t}\n\tif s.started {\n\t\treturn nil, errors.New(\"ssh: StdinPipe after process started\")\n\t}\n\ts.stdinpipe = true\n\treturn &sessionStdin{s.ch, s.ch}, nil\n}\n\n// StdoutPipe returns a pipe that will be connected to the\n// remote command's standard output when the command starts.\n// There is a fixed amount of buffering that is shared between\n// stdout and stderr streams. If the StdoutPipe reader is\n// not serviced fast enough it may eventually cause the\n// remote command to block.\nfunc (s *Session) StdoutPipe() (io.Reader, error) {\n\tif s.Stdout != nil {\n\t\treturn nil, errors.New(\"ssh: Stdout already set\")\n\t}\n\tif s.started {\n\t\treturn nil, errors.New(\"ssh: StdoutPipe after process started\")\n\t}\n\ts.stdoutpipe = true\n\treturn s.ch, nil\n}\n\n// StderrPipe returns a pipe that will be connected to the\n// remote command's standard error when the command starts.\n// There is a fixed amount of buffering that is shared between\n// stdout and stderr streams. If the StderrPipe reader is\n// not serviced fast enough it may eventually cause the\n// remote command to block.\nfunc (s *Session) StderrPipe() (io.Reader, error) {\n\tif s.Stderr != nil {\n\t\treturn nil, errors.New(\"ssh: Stderr already set\")\n\t}\n\tif s.started {\n\t\treturn nil, errors.New(\"ssh: StderrPipe after process started\")\n\t}\n\ts.stderrpipe = true\n\treturn s.ch.Stderr(), nil\n}\n\n// newSession returns a new interactive session on the remote host.\nfunc newSession(ch Channel, reqs <-chan *Request) (*Session, error) {\n\ts := &Session{\n\t\tch: ch,\n\t}\n\ts.exitStatus = make(chan error, 1)\n\tgo func() {\n\t\ts.exitStatus <- s.wait(reqs)\n\t}()\n\n\treturn s, nil\n}\n\n// An ExitError reports unsuccessful completion of a remote command.\ntype ExitError struct {\n\tWaitmsg\n}\n\nfunc (e *ExitError) Error() string {\n\treturn e.Waitmsg.String()\n}\n\n// Waitmsg stores the information about an exited remote command\n// as reported by Wait.\ntype Waitmsg struct {\n\tstatus int\n\tsignal string\n\tmsg    string\n\tlang   string\n}\n\n// ExitStatus returns the exit status of the remote command.\nfunc (w Waitmsg) ExitStatus() int {\n\treturn w.status\n}\n\n// Signal returns the exit signal of the remote command if\n// it was terminated violently.\nfunc (w Waitmsg) Signal() string {\n\treturn w.signal\n}\n\n// Msg returns the exit message given by the remote command\nfunc (w Waitmsg) Msg() string {\n\treturn w.msg\n}\n\n// Lang returns the language tag. See RFC 3066\nfunc (w Waitmsg) Lang() string {\n\treturn w.lang\n}\n\nfunc (w Waitmsg) String() string {\n\tstr := fmt.Sprintf(\"Process exited with status %v\", w.status)\n\tif w.signal != \"\" {\n\t\tstr += fmt.Sprintf(\" from signal %v\", w.signal)\n\t}\n\tif w.msg != \"\" {\n\t\tstr += fmt.Sprintf(\". Reason was: %v\", w.msg)\n\t}\n\treturn str\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/ssh_gss.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"encoding/asn1\"\n\t\"errors\"\n)\n\nvar krb5OID []byte\n\nfunc init() {\n\tkrb5OID, _ = asn1.Marshal(krb5Mesh)\n}\n\n// GSSAPIClient provides the API to plug-in GSSAPI authentication for client logins.\ntype GSSAPIClient interface {\n\t// InitSecContext initiates the establishment of a security context for GSS-API between the\n\t// ssh client and ssh server. Initially the token parameter should be specified as nil.\n\t// The routine may return a outputToken which should be transferred to\n\t// the ssh server, where the ssh server will present it to\n\t// AcceptSecContext. If no token need be sent, InitSecContext will indicate this by setting\n\t// needContinue to false. To complete the context\n\t// establishment, one or more reply tokens may be required from the ssh\n\t// server;if so, InitSecContext will return a needContinue which is true.\n\t// In this case, InitSecContext should be called again when the\n\t// reply token is received from the ssh server, passing the reply\n\t// token to InitSecContext via the token parameters.\n\t// See RFC 2743 section 2.2.1 and RFC 4462 section 3.4.\n\tInitSecContext(target string, token []byte, isGSSDelegCreds bool) (outputToken []byte, needContinue bool, err error)\n\t// GetMIC generates a cryptographic MIC for the SSH2 message, and places\n\t// the MIC in a token for transfer to the ssh server.\n\t// The contents of the MIC field are obtained by calling GSS_GetMIC()\n\t// over the following, using the GSS-API context that was just\n\t// established:\n\t//  string    session identifier\n\t//  byte      SSH_MSG_USERAUTH_REQUEST\n\t//  string    user name\n\t//  string    service\n\t//  string    \"gssapi-with-mic\"\n\t// See RFC 2743 section 2.3.1 and RFC 4462 3.5.\n\tGetMIC(micFiled []byte) ([]byte, error)\n\t// Whenever possible, it should be possible for\n\t// DeleteSecContext() calls to be successfully processed even\n\t// if other calls cannot succeed, thereby enabling context-related\n\t// resources to be released.\n\t// In addition to deleting established security contexts,\n\t// gss_delete_sec_context must also be able to delete \"half-built\"\n\t// security contexts resulting from an incomplete sequence of\n\t// InitSecContext()/AcceptSecContext() calls.\n\t// See RFC 2743 section 2.2.3.\n\tDeleteSecContext() error\n}\n\n// GSSAPIServer provides the API to plug in GSSAPI authentication for server logins.\ntype GSSAPIServer interface {\n\t// AcceptSecContext allows a remotely initiated security context between the application\n\t// and a remote peer to be established by the ssh client. The routine may return a\n\t// outputToken which should be transferred to the ssh client,\n\t// where the ssh client will present it to InitSecContext.\n\t// If no token need be sent, AcceptSecContext will indicate this\n\t// by setting the needContinue to false. To\n\t// complete the context establishment, one or more reply tokens may be\n\t// required from the ssh client. if so, AcceptSecContext\n\t// will return a needContinue which is true, in which case it\n\t// should be called again when the reply token is received from the ssh\n\t// client, passing the token to AcceptSecContext via the\n\t// token parameters.\n\t// The srcName return value is the authenticated username.\n\t// See RFC 2743 section 2.2.2 and RFC 4462 section 3.4.\n\tAcceptSecContext(token []byte) (outputToken []byte, srcName string, needContinue bool, err error)\n\t// VerifyMIC verifies that a cryptographic MIC, contained in the token parameter,\n\t// fits the supplied message is received from the ssh client.\n\t// See RFC 2743 section 2.3.2.\n\tVerifyMIC(micField []byte, micToken []byte) error\n\t// Whenever possible, it should be possible for\n\t// DeleteSecContext() calls to be successfully processed even\n\t// if other calls cannot succeed, thereby enabling context-related\n\t// resources to be released.\n\t// In addition to deleting established security contexts,\n\t// gss_delete_sec_context must also be able to delete \"half-built\"\n\t// security contexts resulting from an incomplete sequence of\n\t// InitSecContext()/AcceptSecContext() calls.\n\t// See RFC 2743 section 2.2.3.\n\tDeleteSecContext() error\n}\n\nvar (\n\t// OpenSSH supports Kerberos V5 mechanism only for GSS-API authentication,\n\t// so we also support the krb5 mechanism only.\n\t// See RFC 1964 section 1.\n\tkrb5Mesh = asn1.ObjectIdentifier{1, 2, 840, 113554, 1, 2, 2}\n)\n\n// The GSS-API authentication method is initiated when the client sends an SSH_MSG_USERAUTH_REQUEST\n// See RFC 4462 section 3.2.\ntype userAuthRequestGSSAPI struct {\n\tN    uint32\n\tOIDS []asn1.ObjectIdentifier\n}\n\nfunc parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) {\n\tn, rest, ok := parseUint32(payload)\n\tif !ok {\n\t\treturn nil, errors.New(\"parse uint32 failed\")\n\t}\n\ts := &userAuthRequestGSSAPI{\n\t\tN:    n,\n\t\tOIDS: make([]asn1.ObjectIdentifier, n),\n\t}\n\tfor i := 0; i < int(n); i++ {\n\t\tvar (\n\t\t\tdesiredMech []byte\n\t\t\terr         error\n\t\t)\n\t\tdesiredMech, rest, ok = parseString(rest)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"parse string failed\")\n\t\t}\n\t\tif rest, err = asn1.Unmarshal(desiredMech, &s.OIDS[i]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\treturn s, nil\n}\n\n// See RFC 4462 section 3.6.\nfunc buildMIC(sessionID string, username string, service string, authMethod string) []byte {\n\tout := make([]byte, 0, 0)\n\tout = appendString(out, sessionID)\n\tout = append(out, msgUserAuthRequest)\n\tout = appendString(out, username)\n\tout = appendString(out, service)\n\tout = appendString(out, authMethod)\n\treturn out\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/streamlocal.go",
    "content": "package ssh\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n)\n\n// streamLocalChannelOpenDirectMsg is a struct used for SSH_MSG_CHANNEL_OPEN message\n// with \"direct-streamlocal@openssh.com\" string.\n//\n// See openssh-portable/PROTOCOL, section 2.4. connection: Unix domain socket forwarding\n// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL#L235\ntype streamLocalChannelOpenDirectMsg struct {\n\tsocketPath string\n\treserved0  string\n\treserved1  uint32\n}\n\n// forwardedStreamLocalPayload is a struct used for SSH_MSG_CHANNEL_OPEN message\n// with \"forwarded-streamlocal@openssh.com\" string.\ntype forwardedStreamLocalPayload struct {\n\tSocketPath string\n\tReserved0  string\n}\n\n// streamLocalChannelForwardMsg is a struct used for SSH2_MSG_GLOBAL_REQUEST message\n// with \"streamlocal-forward@openssh.com\"/\"cancel-streamlocal-forward@openssh.com\" string.\ntype streamLocalChannelForwardMsg struct {\n\tsocketPath string\n}\n\n// ListenUnix is similar to ListenTCP but uses a Unix domain socket.\nfunc (c *Client) ListenUnix(socketPath string) (net.Listener, error) {\n\tc.handleForwardsOnce.Do(c.handleForwards)\n\tm := streamLocalChannelForwardMsg{\n\t\tsocketPath,\n\t}\n\t// send message\n\tok, _, err := c.SendRequest(\"streamlocal-forward@openssh.com\", true, Marshal(&m))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !ok {\n\t\treturn nil, errors.New(\"ssh: streamlocal-forward@openssh.com request denied by peer\")\n\t}\n\tch := c.forwards.add(&net.UnixAddr{Name: socketPath, Net: \"unix\"})\n\n\treturn &unixListener{socketPath, c, ch}, nil\n}\n\nfunc (c *Client) dialStreamLocal(socketPath string) (Channel, error) {\n\tmsg := streamLocalChannelOpenDirectMsg{\n\t\tsocketPath: socketPath,\n\t}\n\tch, in, err := c.OpenChannel(\"direct-streamlocal@openssh.com\", Marshal(&msg))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(in)\n\treturn ch, err\n}\n\ntype unixListener struct {\n\tsocketPath string\n\n\tconn *Client\n\tin   <-chan forward\n}\n\n// Accept waits for and returns the next connection to the listener.\nfunc (l *unixListener) Accept() (net.Conn, error) {\n\ts, ok := <-l.in\n\tif !ok {\n\t\treturn nil, io.EOF\n\t}\n\tch, incoming, err := s.newCh.Accept()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(incoming)\n\n\treturn &chanConn{\n\t\tChannel: ch,\n\t\tladdr: &net.UnixAddr{\n\t\t\tName: l.socketPath,\n\t\t\tNet:  \"unix\",\n\t\t},\n\t\traddr: &net.UnixAddr{\n\t\t\tName: \"@\",\n\t\t\tNet:  \"unix\",\n\t\t},\n\t}, nil\n}\n\n// Close closes the listener.\nfunc (l *unixListener) Close() error {\n\t// this also closes the listener.\n\tl.conn.forwards.remove(&net.UnixAddr{Name: l.socketPath, Net: \"unix\"})\n\tm := streamLocalChannelForwardMsg{\n\t\tl.socketPath,\n\t}\n\tok, _, err := l.conn.SendRequest(\"cancel-streamlocal-forward@openssh.com\", true, Marshal(&m))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: cancel-streamlocal-forward@openssh.com failed\")\n\t}\n\treturn err\n}\n\n// Addr returns the listener's network address.\nfunc (l *unixListener) Addr() net.Addr {\n\treturn &net.UnixAddr{\n\t\tName: l.socketPath,\n\t\tNet:  \"unix\",\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/tcpip.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/rand\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Listen requests the remote peer open a listening socket on\n// addr. Incoming connections will be available by calling Accept on\n// the returned net.Listener. The listener must be serviced, or the\n// SSH connection may hang.\n// N must be \"tcp\", \"tcp4\", \"tcp6\", or \"unix\".\nfunc (c *Client) Listen(n, addr string) (net.Listener, error) {\n\tswitch n {\n\tcase \"tcp\", \"tcp4\", \"tcp6\":\n\t\tladdr, err := net.ResolveTCPAddr(n, addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn c.ListenTCP(laddr)\n\tcase \"unix\":\n\t\treturn c.ListenUnix(addr)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported protocol: %s\", n)\n\t}\n}\n\n// Automatic port allocation is broken with OpenSSH before 6.0. See\n// also https://bugzilla.mindrot.org/show_bug.cgi?id=2017.  In\n// particular, OpenSSH 5.9 sends a channelOpenMsg with port number 0,\n// rather than the actual port number. This means you can never open\n// two different listeners with auto allocated ports. We work around\n// this by trying explicit ports until we succeed.\n\nconst openSSHPrefix = \"OpenSSH_\"\n\nvar portRandomizer = rand.New(rand.NewSource(time.Now().UnixNano()))\n\n// isBrokenOpenSSHVersion returns true if the given version string\n// specifies a version of OpenSSH that is known to have a bug in port\n// forwarding.\nfunc isBrokenOpenSSHVersion(versionStr string) bool {\n\ti := strings.Index(versionStr, openSSHPrefix)\n\tif i < 0 {\n\t\treturn false\n\t}\n\ti += len(openSSHPrefix)\n\tj := i\n\tfor ; j < len(versionStr); j++ {\n\t\tif versionStr[j] < '0' || versionStr[j] > '9' {\n\t\t\tbreak\n\t\t}\n\t}\n\tversion, _ := strconv.Atoi(versionStr[i:j])\n\treturn version < 6\n}\n\n// autoPortListenWorkaround simulates automatic port allocation by\n// trying random ports repeatedly.\nfunc (c *Client) autoPortListenWorkaround(laddr *net.TCPAddr) (net.Listener, error) {\n\tvar sshListener net.Listener\n\tvar err error\n\tconst tries = 10\n\tfor i := 0; i < tries; i++ {\n\t\taddr := *laddr\n\t\taddr.Port = 1024 + portRandomizer.Intn(60000)\n\t\tsshListener, err = c.ListenTCP(&addr)\n\t\tif err == nil {\n\t\t\tladdr.Port = addr.Port\n\t\t\treturn sshListener, err\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"ssh: listen on random port failed after %d tries: %v\", tries, err)\n}\n\n// RFC 4254 7.1\ntype channelForwardMsg struct {\n\taddr  string\n\trport uint32\n}\n\n// handleForwards starts goroutines handling forwarded connections.\n// It's called on first use by (*Client).ListenTCP to not launch\n// goroutines until needed.\nfunc (c *Client) handleForwards() {\n\tgo c.forwards.handleChannels(c.HandleChannelOpen(\"forwarded-tcpip\"))\n\tgo c.forwards.handleChannels(c.HandleChannelOpen(\"forwarded-streamlocal@openssh.com\"))\n}\n\n// ListenTCP requests the remote peer open a listening socket\n// on laddr. Incoming connections will be available by calling\n// Accept on the returned net.Listener.\nfunc (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) {\n\tc.handleForwardsOnce.Do(c.handleForwards)\n\tif laddr.Port == 0 && isBrokenOpenSSHVersion(string(c.ServerVersion())) {\n\t\treturn c.autoPortListenWorkaround(laddr)\n\t}\n\n\tm := channelForwardMsg{\n\t\tladdr.IP.String(),\n\t\tuint32(laddr.Port),\n\t}\n\t// send message\n\tok, resp, err := c.SendRequest(\"tcpip-forward\", true, Marshal(&m))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !ok {\n\t\treturn nil, errors.New(\"ssh: tcpip-forward request denied by peer\")\n\t}\n\n\t// If the original port was 0, then the remote side will\n\t// supply a real port number in the response.\n\tif laddr.Port == 0 {\n\t\tvar p struct {\n\t\t\tPort uint32\n\t\t}\n\t\tif err := Unmarshal(resp, &p); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tladdr.Port = int(p.Port)\n\t}\n\n\t// Register this forward, using the port number we obtained.\n\tch := c.forwards.add(laddr)\n\n\treturn &tcpListener{laddr, c, ch}, nil\n}\n\n// forwardList stores a mapping between remote\n// forward requests and the tcpListeners.\ntype forwardList struct {\n\tsync.Mutex\n\tentries []forwardEntry\n}\n\n// forwardEntry represents an established mapping of a laddr on a\n// remote ssh server to a channel connected to a tcpListener.\ntype forwardEntry struct {\n\tladdr net.Addr\n\tc     chan forward\n}\n\n// forward represents an incoming forwarded tcpip connection. The\n// arguments to add/remove/lookup should be address as specified in\n// the original forward-request.\ntype forward struct {\n\tnewCh NewChannel // the ssh client channel underlying this forward\n\traddr net.Addr   // the raddr of the incoming connection\n}\n\nfunc (l *forwardList) add(addr net.Addr) chan forward {\n\tl.Lock()\n\tdefer l.Unlock()\n\tf := forwardEntry{\n\t\tladdr: addr,\n\t\tc:     make(chan forward, 1),\n\t}\n\tl.entries = append(l.entries, f)\n\treturn f.c\n}\n\n// See RFC 4254, section 7.2\ntype forwardedTCPPayload struct {\n\tAddr       string\n\tPort       uint32\n\tOriginAddr string\n\tOriginPort uint32\n}\n\n// parseTCPAddr parses the originating address from the remote into a *net.TCPAddr.\nfunc parseTCPAddr(addr string, port uint32) (*net.TCPAddr, error) {\n\tif port == 0 || port > 65535 {\n\t\treturn nil, fmt.Errorf(\"ssh: port number out of range: %d\", port)\n\t}\n\tip := net.ParseIP(string(addr))\n\tif ip == nil {\n\t\treturn nil, fmt.Errorf(\"ssh: cannot parse IP address %q\", addr)\n\t}\n\treturn &net.TCPAddr{IP: ip, Port: int(port)}, nil\n}\n\nfunc (l *forwardList) handleChannels(in <-chan NewChannel) {\n\tfor ch := range in {\n\t\tvar (\n\t\t\tladdr net.Addr\n\t\t\traddr net.Addr\n\t\t\terr   error\n\t\t)\n\t\tswitch channelType := ch.ChannelType(); channelType {\n\t\tcase \"forwarded-tcpip\":\n\t\t\tvar payload forwardedTCPPayload\n\t\t\tif err = Unmarshal(ch.ExtraData(), &payload); err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, \"could not parse forwarded-tcpip payload: \"+err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// RFC 4254 section 7.2 specifies that incoming\n\t\t\t// addresses should list the address, in string\n\t\t\t// format. It is implied that this should be an IP\n\t\t\t// address, as it would be impossible to connect to it\n\t\t\t// otherwise.\n\t\t\tladdr, err = parseTCPAddr(payload.Addr, payload.Port)\n\t\t\tif err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\traddr, err = parseTCPAddr(payload.OriginAddr, payload.OriginPort)\n\t\t\tif err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\tcase \"forwarded-streamlocal@openssh.com\":\n\t\t\tvar payload forwardedStreamLocalPayload\n\t\t\tif err = Unmarshal(ch.ExtraData(), &payload); err != nil {\n\t\t\t\tch.Reject(ConnectionFailed, \"could not parse forwarded-streamlocal@openssh.com payload: \"+err.Error())\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tladdr = &net.UnixAddr{\n\t\t\t\tName: payload.SocketPath,\n\t\t\t\tNet:  \"unix\",\n\t\t\t}\n\t\t\traddr = &net.UnixAddr{\n\t\t\t\tName: \"@\",\n\t\t\t\tNet:  \"unix\",\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Errorf(\"ssh: unknown channel type %s\", channelType))\n\t\t}\n\t\tif ok := l.forward(laddr, raddr, ch); !ok {\n\t\t\t// Section 7.2, implementations MUST reject spurious incoming\n\t\t\t// connections.\n\t\t\tch.Reject(Prohibited, \"no forward for address\")\n\t\t\tcontinue\n\t\t}\n\n\t}\n}\n\n// remove removes the forward entry, and the channel feeding its\n// listener.\nfunc (l *forwardList) remove(addr net.Addr) {\n\tl.Lock()\n\tdefer l.Unlock()\n\tfor i, f := range l.entries {\n\t\tif addr.Network() == f.laddr.Network() && addr.String() == f.laddr.String() {\n\t\t\tl.entries = append(l.entries[:i], l.entries[i+1:]...)\n\t\t\tclose(f.c)\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// closeAll closes and clears all forwards.\nfunc (l *forwardList) closeAll() {\n\tl.Lock()\n\tdefer l.Unlock()\n\tfor _, f := range l.entries {\n\t\tclose(f.c)\n\t}\n\tl.entries = nil\n}\n\nfunc (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool {\n\tl.Lock()\n\tdefer l.Unlock()\n\tfor _, f := range l.entries {\n\t\tif laddr.Network() == f.laddr.Network() && laddr.String() == f.laddr.String() {\n\t\t\tf.c <- forward{newCh: ch, raddr: raddr}\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\ntype tcpListener struct {\n\tladdr *net.TCPAddr\n\n\tconn *Client\n\tin   <-chan forward\n}\n\n// Accept waits for and returns the next connection to the listener.\nfunc (l *tcpListener) Accept() (net.Conn, error) {\n\ts, ok := <-l.in\n\tif !ok {\n\t\treturn nil, io.EOF\n\t}\n\tch, incoming, err := s.newCh.Accept()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(incoming)\n\n\treturn &chanConn{\n\t\tChannel: ch,\n\t\tladdr:   l.laddr,\n\t\traddr:   s.raddr,\n\t}, nil\n}\n\n// Close closes the listener.\nfunc (l *tcpListener) Close() error {\n\tm := channelForwardMsg{\n\t\tl.laddr.IP.String(),\n\t\tuint32(l.laddr.Port),\n\t}\n\n\t// this also closes the listener.\n\tl.conn.forwards.remove(l.laddr)\n\tok, _, err := l.conn.SendRequest(\"cancel-tcpip-forward\", true, Marshal(&m))\n\tif err == nil && !ok {\n\t\terr = errors.New(\"ssh: cancel-tcpip-forward failed\")\n\t}\n\treturn err\n}\n\n// Addr returns the listener's network address.\nfunc (l *tcpListener) Addr() net.Addr {\n\treturn l.laddr\n}\n\n// DialContext initiates a connection to the addr from the remote host.\n//\n// The provided Context must be non-nil. If the context expires before the\n// connection is complete, an error is returned. Once successfully connected,\n// any expiration of the context will not affect the connection.\n//\n// See func Dial for additional information.\nfunc (c *Client) DialContext(ctx context.Context, n, addr string) (net.Conn, error) {\n\tif err := ctx.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\ttype connErr struct {\n\t\tconn net.Conn\n\t\terr  error\n\t}\n\tch := make(chan connErr)\n\tgo func() {\n\t\tconn, err := c.Dial(n, addr)\n\t\tselect {\n\t\tcase ch <- connErr{conn, err}:\n\t\tcase <-ctx.Done():\n\t\t\tif conn != nil {\n\t\t\t\tconn.Close()\n\t\t\t}\n\t\t}\n\t}()\n\tselect {\n\tcase res := <-ch:\n\t\treturn res.conn, res.err\n\tcase <-ctx.Done():\n\t\treturn nil, ctx.Err()\n\t}\n}\n\n// Dial initiates a connection to the addr from the remote host.\n// The resulting connection has a zero LocalAddr() and RemoteAddr().\nfunc (c *Client) Dial(n, addr string) (net.Conn, error) {\n\tvar ch Channel\n\tswitch n {\n\tcase \"tcp\", \"tcp4\", \"tcp6\":\n\t\t// Parse the address into host and numeric port.\n\t\thost, portString, err := net.SplitHostPort(addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tport, err := strconv.ParseUint(portString, 10, 16)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tch, err = c.dial(net.IPv4zero.String(), 0, host, int(port))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// Use a zero address for local and remote address.\n\t\tzeroAddr := &net.TCPAddr{\n\t\t\tIP:   net.IPv4zero,\n\t\t\tPort: 0,\n\t\t}\n\t\treturn &chanConn{\n\t\t\tChannel: ch,\n\t\t\tladdr:   zeroAddr,\n\t\t\traddr:   zeroAddr,\n\t\t}, nil\n\tcase \"unix\":\n\t\tvar err error\n\t\tch, err = c.dialStreamLocal(addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &chanConn{\n\t\t\tChannel: ch,\n\t\t\tladdr: &net.UnixAddr{\n\t\t\t\tName: \"@\",\n\t\t\t\tNet:  \"unix\",\n\t\t\t},\n\t\t\traddr: &net.UnixAddr{\n\t\t\t\tName: addr,\n\t\t\t\tNet:  \"unix\",\n\t\t\t},\n\t\t}, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ssh: unsupported protocol: %s\", n)\n\t}\n}\n\n// DialTCP connects to the remote address raddr on the network net,\n// which must be \"tcp\", \"tcp4\", or \"tcp6\".  If laddr is not nil, it is used\n// as the local address for the connection.\nfunc (c *Client) DialTCP(n string, laddr, raddr *net.TCPAddr) (net.Conn, error) {\n\tif laddr == nil {\n\t\tladdr = &net.TCPAddr{\n\t\t\tIP:   net.IPv4zero,\n\t\t\tPort: 0,\n\t\t}\n\t}\n\tch, err := c.dial(laddr.IP.String(), laddr.Port, raddr.IP.String(), raddr.Port)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &chanConn{\n\t\tChannel: ch,\n\t\tladdr:   laddr,\n\t\traddr:   raddr,\n\t}, nil\n}\n\n// RFC 4254 7.2\ntype channelOpenDirectMsg struct {\n\traddr string\n\trport uint32\n\tladdr string\n\tlport uint32\n}\n\nfunc (c *Client) dial(laddr string, lport int, raddr string, rport int) (Channel, error) {\n\tmsg := channelOpenDirectMsg{\n\t\traddr: raddr,\n\t\trport: uint32(rport),\n\t\tladdr: laddr,\n\t\tlport: uint32(lport),\n\t}\n\tch, in, err := c.OpenChannel(\"direct-tcpip\", Marshal(&msg))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgo DiscardRequests(in)\n\treturn ch, nil\n}\n\ntype tcpChan struct {\n\tChannel // the backing channel\n}\n\n// chanConn fulfills the net.Conn interface without\n// the tcpChan having to hold laddr or raddr directly.\ntype chanConn struct {\n\tChannel\n\tladdr, raddr net.Addr\n}\n\n// LocalAddr returns the local network address.\nfunc (t *chanConn) LocalAddr() net.Addr {\n\treturn t.laddr\n}\n\n// RemoteAddr returns the remote network address.\nfunc (t *chanConn) RemoteAddr() net.Addr {\n\treturn t.raddr\n}\n\n// SetDeadline sets the read and write deadlines associated\n// with the connection.\nfunc (t *chanConn) SetDeadline(deadline time.Time) error {\n\tif err := t.SetReadDeadline(deadline); err != nil {\n\t\treturn err\n\t}\n\treturn t.SetWriteDeadline(deadline)\n}\n\n// SetReadDeadline sets the read deadline.\n// A zero value for t means Read will not time out.\n// After the deadline, the error from Read will implement net.Error\n// with Timeout() == true.\nfunc (t *chanConn) SetReadDeadline(deadline time.Time) error {\n\t// for compatibility with previous version,\n\t// the error message contains \"tcpChan\"\n\treturn errors.New(\"ssh: tcpChan: deadline not supported\")\n}\n\n// SetWriteDeadline exists to satisfy the net.Conn interface\n// but is not implemented by this type.  It always returns an error.\nfunc (t *chanConn) SetWriteDeadline(deadline time.Time) error {\n\treturn errors.New(\"ssh: tcpChan: deadline not supported\")\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/transport.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ssh\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"log\"\n)\n\n// debugTransport if set, will print packet types as they go over the\n// wire. No message decoding is done, to minimize the impact on timing.\nconst debugTransport = false\n\nconst (\n\tgcm128CipherID = \"aes128-gcm@openssh.com\"\n\tgcm256CipherID = \"aes256-gcm@openssh.com\"\n\taes128cbcID    = \"aes128-cbc\"\n\ttripledescbcID = \"3des-cbc\"\n)\n\n// packetConn represents a transport that implements packet based\n// operations.\ntype packetConn interface {\n\t// Encrypt and send a packet of data to the remote peer.\n\twritePacket(packet []byte) error\n\n\t// Read a packet from the connection. The read is blocking,\n\t// i.e. if error is nil, then the returned byte slice is\n\t// always non-empty.\n\treadPacket() ([]byte, error)\n\n\t// Close closes the write-side of the connection.\n\tClose() error\n}\n\n// transport is the keyingTransport that implements the SSH packet\n// protocol.\ntype transport struct {\n\treader connectionState\n\twriter connectionState\n\n\tbufReader *bufio.Reader\n\tbufWriter *bufio.Writer\n\trand      io.Reader\n\tisClient  bool\n\tio.Closer\n\n\tstrictMode     bool\n\tinitialKEXDone bool\n}\n\n// packetCipher represents a combination of SSH encryption/MAC\n// protocol.  A single instance should be used for one direction only.\ntype packetCipher interface {\n\t// writeCipherPacket encrypts the packet and writes it to w. The\n\t// contents of the packet are generally scrambled.\n\twriteCipherPacket(seqnum uint32, w io.Writer, rand io.Reader, packet []byte) error\n\n\t// readCipherPacket reads and decrypts a packet of data. The\n\t// returned packet may be overwritten by future calls of\n\t// readPacket.\n\treadCipherPacket(seqnum uint32, r io.Reader) ([]byte, error)\n}\n\n// connectionState represents one side (read or write) of the\n// connection. This is necessary because each direction has its own\n// keys, and can even have its own algorithms\ntype connectionState struct {\n\tpacketCipher\n\tseqNum           uint32\n\tdir              direction\n\tpendingKeyChange chan packetCipher\n}\n\nfunc (t *transport) setStrictMode() error {\n\tif t.reader.seqNum != 1 {\n\t\treturn errors.New(\"ssh: sequence number != 1 when strict KEX mode requested\")\n\t}\n\tt.strictMode = true\n\treturn nil\n}\n\nfunc (t *transport) setInitialKEXDone() {\n\tt.initialKEXDone = true\n}\n\n// prepareKeyChange sets up key material for a keychange. The key changes in\n// both directions are triggered by reading and writing a msgNewKey packet\n// respectively.\nfunc (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) error {\n\tciph, err := newPacketCipher(t.reader.dir, algs.r, kexResult)\n\tif err != nil {\n\t\treturn err\n\t}\n\tt.reader.pendingKeyChange <- ciph\n\n\tciph, err = newPacketCipher(t.writer.dir, algs.w, kexResult)\n\tif err != nil {\n\t\treturn err\n\t}\n\tt.writer.pendingKeyChange <- ciph\n\n\treturn nil\n}\n\nfunc (t *transport) printPacket(p []byte, write bool) {\n\tif len(p) == 0 {\n\t\treturn\n\t}\n\twho := \"server\"\n\tif t.isClient {\n\t\twho = \"client\"\n\t}\n\twhat := \"read\"\n\tif write {\n\t\twhat = \"write\"\n\t}\n\n\tlog.Println(what, who, p[0])\n}\n\n// Read and decrypt next packet.\nfunc (t *transport) readPacket() (p []byte, err error) {\n\tfor {\n\t\tp, err = t.reader.readPacket(t.bufReader, t.strictMode)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\t// in strict mode we pass through DEBUG and IGNORE packets only during the initial KEX\n\t\tif len(p) == 0 || (t.strictMode && !t.initialKEXDone) || (p[0] != msgIgnore && p[0] != msgDebug) {\n\t\t\tbreak\n\t\t}\n\t}\n\tif debugTransport {\n\t\tt.printPacket(p, false)\n\t}\n\n\treturn p, err\n}\n\nfunc (s *connectionState) readPacket(r *bufio.Reader, strictMode bool) ([]byte, error) {\n\tpacket, err := s.packetCipher.readCipherPacket(s.seqNum, r)\n\ts.seqNum++\n\tif err == nil && len(packet) == 0 {\n\t\terr = errors.New(\"ssh: zero length packet\")\n\t}\n\n\tif len(packet) > 0 {\n\t\tswitch packet[0] {\n\t\tcase msgNewKeys:\n\t\t\tselect {\n\t\t\tcase cipher := <-s.pendingKeyChange:\n\t\t\t\ts.packetCipher = cipher\n\t\t\t\tif strictMode {\n\t\t\t\t\ts.seqNum = 0\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn nil, errors.New(\"ssh: got bogus newkeys message\")\n\t\t\t}\n\n\t\tcase msgDisconnect:\n\t\t\t// Transform a disconnect message into an\n\t\t\t// error. Since this is lowest level at which\n\t\t\t// we interpret message types, doing it here\n\t\t\t// ensures that we don't have to handle it\n\t\t\t// elsewhere.\n\t\t\tvar msg disconnectMsg\n\t\t\tif err := Unmarshal(packet, &msg); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, &msg\n\t\t}\n\t}\n\n\t// The packet may point to an internal buffer, so copy the\n\t// packet out here.\n\tfresh := make([]byte, len(packet))\n\tcopy(fresh, packet)\n\n\treturn fresh, err\n}\n\nfunc (t *transport) writePacket(packet []byte) error {\n\tif debugTransport {\n\t\tt.printPacket(packet, true)\n\t}\n\treturn t.writer.writePacket(t.bufWriter, t.rand, packet, t.strictMode)\n}\n\nfunc (s *connectionState) writePacket(w *bufio.Writer, rand io.Reader, packet []byte, strictMode bool) error {\n\tchangeKeys := len(packet) > 0 && packet[0] == msgNewKeys\n\n\terr := s.packetCipher.writeCipherPacket(s.seqNum, w, rand, packet)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = w.Flush(); err != nil {\n\t\treturn err\n\t}\n\ts.seqNum++\n\tif changeKeys {\n\t\tselect {\n\t\tcase cipher := <-s.pendingKeyChange:\n\t\t\ts.packetCipher = cipher\n\t\t\tif strictMode {\n\t\t\t\ts.seqNum = 0\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(\"ssh: no key material for msgNewKeys\")\n\t\t}\n\t}\n\treturn err\n}\n\nfunc newTransport(rwc io.ReadWriteCloser, rand io.Reader, isClient bool) *transport {\n\tt := &transport{\n\t\tbufReader: bufio.NewReader(rwc),\n\t\tbufWriter: bufio.NewWriter(rwc),\n\t\trand:      rand,\n\t\treader: connectionState{\n\t\t\tpacketCipher:     &streamPacketCipher{cipher: noneCipher{}},\n\t\t\tpendingKeyChange: make(chan packetCipher, 1),\n\t\t},\n\t\twriter: connectionState{\n\t\t\tpacketCipher:     &streamPacketCipher{cipher: noneCipher{}},\n\t\t\tpendingKeyChange: make(chan packetCipher, 1),\n\t\t},\n\t\tCloser: rwc,\n\t}\n\tt.isClient = isClient\n\n\tif isClient {\n\t\tt.reader.dir = serverKeys\n\t\tt.writer.dir = clientKeys\n\t} else {\n\t\tt.reader.dir = clientKeys\n\t\tt.writer.dir = serverKeys\n\t}\n\n\treturn t\n}\n\ntype direction struct {\n\tivTag     []byte\n\tkeyTag    []byte\n\tmacKeyTag []byte\n}\n\nvar (\n\tserverKeys = direction{[]byte{'B'}, []byte{'D'}, []byte{'F'}}\n\tclientKeys = direction{[]byte{'A'}, []byte{'C'}, []byte{'E'}}\n)\n\n// setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as\n// described in RFC 4253, section 6.4. direction should either be serverKeys\n// (to setup server->client keys) or clientKeys (for client->server keys).\nfunc newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) {\n\tcipherMode := cipherModes[algs.Cipher]\n\n\tiv := make([]byte, cipherMode.ivSize)\n\tkey := make([]byte, cipherMode.keySize)\n\n\tgenerateKeyMaterial(iv, d.ivTag, kex)\n\tgenerateKeyMaterial(key, d.keyTag, kex)\n\n\tvar macKey []byte\n\tif !aeadCiphers[algs.Cipher] {\n\t\tmacMode := macModes[algs.MAC]\n\t\tmacKey = make([]byte, macMode.keySize)\n\t\tgenerateKeyMaterial(macKey, d.macKeyTag, kex)\n\t}\n\n\treturn cipherModes[algs.Cipher].create(key, iv, macKey, algs)\n}\n\n// generateKeyMaterial fills out with key material generated from tag, K, H\n// and sessionId, as specified in RFC 4253, section 7.2.\nfunc generateKeyMaterial(out, tag []byte, r *kexResult) {\n\tvar digestsSoFar []byte\n\n\th := r.Hash.New()\n\tfor len(out) > 0 {\n\t\th.Reset()\n\t\th.Write(r.K)\n\t\th.Write(r.H)\n\n\t\tif len(digestsSoFar) == 0 {\n\t\t\th.Write(tag)\n\t\t\th.Write(r.SessionID)\n\t\t} else {\n\t\t\th.Write(digestsSoFar)\n\t\t}\n\n\t\tdigest := h.Sum(nil)\n\t\tn := copy(out, digest)\n\t\tout = out[n:]\n\t\tif len(out) > 0 {\n\t\t\tdigestsSoFar = append(digestsSoFar, digest...)\n\t\t}\n\t}\n}\n\nconst packageVersion = \"SSH-2.0-Go\"\n\n// Sends and receives a version line.  The versionLine string should\n// be US ASCII, start with \"SSH-2.0-\", and should not include a\n// newline. exchangeVersions returns the other side's version line.\nfunc exchangeVersions(rw io.ReadWriter, versionLine []byte) (them []byte, err error) {\n\t// Contrary to the RFC, we do not ignore lines that don't\n\t// start with \"SSH-2.0-\" to make the library usable with\n\t// nonconforming servers.\n\tfor _, c := range versionLine {\n\t\t// The spec disallows non US-ASCII chars, and\n\t\t// specifically forbids null chars.\n\t\tif c < 32 {\n\t\t\treturn nil, errors.New(\"ssh: junk character in version line\")\n\t\t}\n\t}\n\tif _, err = rw.Write(append(versionLine, '\\r', '\\n')); err != nil {\n\t\treturn\n\t}\n\n\tthem, err = readVersion(rw)\n\treturn them, err\n}\n\n// maxVersionStringBytes is the maximum number of bytes that we'll\n// accept as a version string. RFC 4253 section 4.2 limits this at 255\n// chars\nconst maxVersionStringBytes = 255\n\n// Read version string as specified by RFC 4253, section 4.2.\nfunc readVersion(r io.Reader) ([]byte, error) {\n\tversionString := make([]byte, 0, 64)\n\tvar ok bool\n\tvar buf [1]byte\n\n\tfor length := 0; length < maxVersionStringBytes; length++ {\n\t\t_, err := io.ReadFull(r, buf[:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// The RFC says that the version should be terminated with \\r\\n\n\t\t// but several SSH servers actually only send a \\n.\n\t\tif buf[0] == '\\n' {\n\t\t\tif !bytes.HasPrefix(versionString, []byte(\"SSH-\")) {\n\t\t\t\t// RFC 4253 says we need to ignore all version string lines\n\t\t\t\t// except the one containing the SSH version (provided that\n\t\t\t\t// all the lines do not exceed 255 bytes in total).\n\t\t\t\tversionString = versionString[:0]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tok = true\n\t\t\tbreak\n\t\t}\n\n\t\t// non ASCII chars are disallowed, but we are lenient,\n\t\t// since Go doesn't use null-terminated strings.\n\n\t\t// The RFC allows a comment after a space, however,\n\t\t// all of it (version and comments) goes into the\n\t\t// session hash.\n\t\tversionString = append(versionString, buf[0])\n\t}\n\n\tif !ok {\n\t\treturn nil, errors.New(\"ssh: overflow reading version string\")\n\t}\n\n\t// There might be a '\\r' on the end which we should remove.\n\tif len(versionString) > 0 && versionString[len(versionString)-1] == '\\r' {\n\t\tversionString = versionString[:len(versionString)-1]\n\t}\n\treturn versionString, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/LICENSE",
    "content": "Copyright 2009 The Go Authors.\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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/golang.org/x/net/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/net/context/context.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package context defines the Context type, which carries deadlines,\n// cancellation signals, and other request-scoped values across API boundaries\n// and between processes.\n// As of Go 1.7 this package is available in the standard library under the\n// name [context], and migrating to it can be done automatically with [go fix].\n//\n// Incoming requests to a server should create a [Context], and outgoing\n// calls to servers should accept a Context. The chain of function\n// calls between them must propagate the Context, optionally replacing\n// it with a derived Context created using [WithCancel], [WithDeadline],\n// [WithTimeout], or [WithValue].\n//\n// Programs that use Contexts should follow these rules to keep interfaces\n// consistent across packages and enable static analysis tools to check context\n// propagation:\n//\n// Do not store Contexts inside a struct type; instead, pass a Context\n// explicitly to each function that needs it. This is discussed further in\n// https://go.dev/blog/context-and-structs. The Context should be the first\n// parameter, typically named ctx:\n//\n//\tfunc DoSomething(ctx context.Context, arg Arg) error {\n//\t\t// ... use ctx ...\n//\t}\n//\n// Do not pass a nil [Context], even if a function permits it. Pass [context.TODO]\n// if you are unsure about which Context to use.\n//\n// Use context Values only for request-scoped data that transits processes and\n// APIs, not for passing optional parameters to functions.\n//\n// The same Context may be passed to functions running in different goroutines;\n// Contexts are safe for simultaneous use by multiple goroutines.\n//\n// See https://go.dev/blog/context for example code for a server that uses\n// Contexts.\n//\n// [go fix]: https://go.dev/cmd/go#hdr-Update_packages_to_use_new_APIs\npackage context\n\nimport (\n\t\"context\" // standard library's context, as of Go 1.7\n\t\"time\"\n)\n\n// A Context carries a deadline, a cancellation signal, and other values across\n// API boundaries.\n//\n// Context's methods may be called by multiple goroutines simultaneously.\ntype Context = context.Context\n\n// Canceled is the error returned by [Context.Err] when the context is canceled\n// for some reason other than its deadline passing.\nvar Canceled = context.Canceled\n\n// DeadlineExceeded is the error returned by [Context.Err] when the context is canceled\n// due to its deadline passing.\nvar DeadlineExceeded = context.DeadlineExceeded\n\n// Background returns a non-nil, empty Context. It is never canceled, has no\n// values, and has no deadline. It is typically used by the main function,\n// initialization, and tests, and as the top-level Context for incoming\n// requests.\nfunc Background() Context {\n\treturn background\n}\n\n// TODO returns a non-nil, empty Context. Code should use context.TODO when\n// it's unclear which Context to use or it is not yet available (because the\n// surrounding function has not yet been extended to accept a Context\n// parameter).\nfunc TODO() Context {\n\treturn todo\n}\n\nvar (\n\tbackground = context.Background()\n\ttodo       = context.TODO()\n)\n\n// A CancelFunc tells an operation to abandon its work.\n// A CancelFunc does not wait for the work to stop.\n// A CancelFunc may be called by multiple goroutines simultaneously.\n// After the first call, subsequent calls to a CancelFunc do nothing.\ntype CancelFunc = context.CancelFunc\n\n// WithCancel returns a derived context that points to the parent context\n// but has a new Done channel. The returned context's Done channel is closed\n// when the returned cancel function is called or when the parent context's\n// Done channel is closed, whichever happens first.\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this [Context] complete.\nfunc WithCancel(parent Context) (ctx Context, cancel CancelFunc) {\n\treturn context.WithCancel(parent)\n}\n\n// WithDeadline returns a derived context that points to the parent context\n// but has the deadline adjusted to be no later than d. If the parent's\n// deadline is already earlier than d, WithDeadline(parent, d) is semantically\n// equivalent to parent. The returned [Context.Done] channel is closed when\n// the deadline expires, when the returned cancel function is called,\n// or when the parent context's Done channel is closed, whichever happens first.\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this [Context] complete.\nfunc WithDeadline(parent Context, d time.Time) (Context, CancelFunc) {\n\treturn context.WithDeadline(parent, d)\n}\n\n// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this [Context] complete:\n//\n//\tfunc slowOperationWithTimeout(ctx context.Context) (Result, error) {\n//\t\tctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)\n//\t\tdefer cancel()  // releases resources if slowOperation completes before timeout elapses\n//\t\treturn slowOperation(ctx)\n//\t}\nfunc WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {\n\treturn context.WithTimeout(parent, timeout)\n}\n\n// WithValue returns a derived context that points to the parent Context.\n// In the derived context, the value associated with key is val.\n//\n// Use context Values only for request-scoped data that transits processes and\n// APIs, not for passing optional parameters to functions.\n//\n// The provided key must be comparable and should not be of type\n// string or any other built-in type to avoid collisions between\n// packages using context. Users of WithValue should define their own\n// types for keys. To avoid allocating when assigning to an\n// interface{}, context keys often have concrete type\n// struct{}. Alternatively, exported context key variables' static\n// type should be a pointer or interface.\nfunc WithValue(parent Context, key, val interface{}) Context {\n\treturn context.WithValue(parent, key, val)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sync/LICENSE",
    "content": "Copyright 2009 The Go Authors.\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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/golang.org/x/sync/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/sync/errgroup/errgroup.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package errgroup provides synchronization, error propagation, and Context\n// cancelation for groups of goroutines working on subtasks of a common task.\n//\n// [errgroup.Group] is related to [sync.WaitGroup] but adds handling of tasks\n// returning errors.\npackage errgroup\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n)\n\ntype token struct{}\n\n// A Group is a collection of goroutines working on subtasks that are part of\n// the same overall task. A Group should not be reused for different tasks.\n//\n// A zero Group is valid, has no limit on the number of active goroutines,\n// and does not cancel on error.\ntype Group struct {\n\tcancel func(error)\n\n\twg sync.WaitGroup\n\n\tsem chan token\n\n\terrOnce sync.Once\n\terr     error\n}\n\nfunc (g *Group) done() {\n\tif g.sem != nil {\n\t\t<-g.sem\n\t}\n\tg.wg.Done()\n}\n\n// WithContext returns a new Group and an associated Context derived from ctx.\n//\n// The derived Context is canceled the first time a function passed to Go\n// returns a non-nil error or the first time Wait returns, whichever occurs\n// first.\nfunc WithContext(ctx context.Context) (*Group, context.Context) {\n\tctx, cancel := context.WithCancelCause(ctx)\n\treturn &Group{cancel: cancel}, ctx\n}\n\n// Wait blocks until all function calls from the Go method have returned, then\n// returns the first non-nil error (if any) from them.\nfunc (g *Group) Wait() error {\n\tg.wg.Wait()\n\tif g.cancel != nil {\n\t\tg.cancel(g.err)\n\t}\n\treturn g.err\n}\n\n// Go calls the given function in a new goroutine.\n// The first call to Go must happen before a Wait.\n// It blocks until the new goroutine can be added without the number of\n// active goroutines in the group exceeding the configured limit.\n//\n// The first call to return a non-nil error cancels the group's context, if the\n// group was created by calling WithContext. The error will be returned by Wait.\nfunc (g *Group) Go(f func() error) {\n\tif g.sem != nil {\n\t\tg.sem <- token{}\n\t}\n\n\tg.wg.Add(1)\n\tgo func() {\n\t\tdefer g.done()\n\n\t\tif err := f(); err != nil {\n\t\t\tg.errOnce.Do(func() {\n\t\t\t\tg.err = err\n\t\t\t\tif g.cancel != nil {\n\t\t\t\t\tg.cancel(g.err)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}()\n}\n\n// TryGo calls the given function in a new goroutine only if the number of\n// active goroutines in the group is currently below the configured limit.\n//\n// The return value reports whether the goroutine was started.\nfunc (g *Group) TryGo(f func() error) bool {\n\tif g.sem != nil {\n\t\tselect {\n\t\tcase g.sem <- token{}:\n\t\t\t// Note: this allows barging iff channels in general allow barging.\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\n\tg.wg.Add(1)\n\tgo func() {\n\t\tdefer g.done()\n\n\t\tif err := f(); err != nil {\n\t\t\tg.errOnce.Do(func() {\n\t\t\t\tg.err = err\n\t\t\t\tif g.cancel != nil {\n\t\t\t\t\tg.cancel(g.err)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}()\n\treturn true\n}\n\n// SetLimit limits the number of active goroutines in this group to at most n.\n// A negative value indicates no limit.\n// A limit of zero will prevent any new goroutines from being added.\n//\n// Any subsequent call to the Go method will block until it can add an active\n// goroutine without exceeding the configured limit.\n//\n// The limit must not be modified while any goroutines in the group are active.\nfunc (g *Group) SetLimit(n int) {\n\tif n < 0 {\n\t\tg.sem = nil\n\t\treturn\n\t}\n\tif len(g.sem) != 0 {\n\t\tpanic(fmt.Errorf(\"errgroup: modify limit while %v goroutines in the group are still active\", len(g.sem)))\n\t}\n\tg.sem = make(chan token, n)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/LICENSE",
    "content": "Copyright 2009 The Go Authors.\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\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis 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": "vendor/golang.org/x/sys/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/asm_aix_ppc64.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go\n//\n\nTEXT ·syscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·syscall6(SB)\n\nTEXT ·rawSyscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin && amd64 && gc\n\n#include \"textflag.h\"\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_sysctlbyname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctlbyname(SB)\nGLOBL\t·libc_sysctlbyname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctlbyname_trampoline_addr(SB)/8, $libc_sysctlbyname_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/byteorder.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport (\n\t\"runtime\"\n)\n\n// byteOrder is a subset of encoding/binary.ByteOrder.\ntype byteOrder interface {\n\tUint32([]byte) uint32\n\tUint64([]byte) uint64\n}\n\ntype littleEndian struct{}\ntype bigEndian struct{}\n\nfunc (littleEndian) Uint32(b []byte) uint32 {\n\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\treturn uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n}\n\nfunc (littleEndian) Uint64(b []byte) uint64 {\n\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n}\n\nfunc (bigEndian) Uint32(b []byte) uint32 {\n\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\treturn uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24\n}\n\nfunc (bigEndian) Uint64(b []byte) uint64 {\n\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\treturn uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |\n\t\tuint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56\n}\n\n// hostByteOrder returns littleEndian on little-endian machines and\n// bigEndian on big-endian machines.\nfunc hostByteOrder() byteOrder {\n\tswitch runtime.GOARCH {\n\tcase \"386\", \"amd64\", \"amd64p32\",\n\t\t\"alpha\",\n\t\t\"arm\", \"arm64\",\n\t\t\"loong64\",\n\t\t\"mipsle\", \"mips64le\", \"mips64p32le\",\n\t\t\"nios2\",\n\t\t\"ppc64le\",\n\t\t\"riscv\", \"riscv64\",\n\t\t\"sh\":\n\t\treturn littleEndian{}\n\tcase \"armbe\", \"arm64be\",\n\t\t\"m68k\",\n\t\t\"mips\", \"mips64\", \"mips64p32\",\n\t\t\"ppc\", \"ppc64\",\n\t\t\"s390\", \"s390x\",\n\t\t\"shbe\",\n\t\t\"sparc\", \"sparc64\":\n\t\treturn bigEndian{}\n\t}\n\tpanic(\"unknown architecture\")\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package cpu implements processor feature detection for\n// various CPU architectures.\npackage cpu\n\nimport (\n\t\"os\"\n\t\"strings\"\n)\n\n// Initialized reports whether the CPU features were initialized.\n//\n// For some GOOS/GOARCH combinations initialization of the CPU features depends\n// on reading an operating specific file, e.g. /proc/self/auxv on linux/arm\n// Initialized will report false if reading the file fails.\nvar Initialized bool\n\n// CacheLinePad is used to pad structs to avoid false sharing.\ntype CacheLinePad struct{ _ [cacheLineSize]byte }\n\n// X86 contains the supported CPU features of the\n// current X86/AMD64 platform. If the current platform\n// is not X86/AMD64 then all feature flags are false.\n//\n// X86 is padded to avoid false sharing. Further the HasAVX\n// and HasAVX2 are only set if the OS supports XMM and YMM\n// registers in addition to the CPUID feature bit being set.\nvar X86 struct {\n\t_                   CacheLinePad\n\tHasAES              bool // AES hardware implementation (AES NI)\n\tHasADX              bool // Multi-precision add-carry instruction extensions\n\tHasAVX              bool // Advanced vector extension\n\tHasAVX2             bool // Advanced vector extension 2\n\tHasAVX512           bool // Advanced vector extension 512\n\tHasAVX512F          bool // Advanced vector extension 512 Foundation Instructions\n\tHasAVX512CD         bool // Advanced vector extension 512 Conflict Detection Instructions\n\tHasAVX512ER         bool // Advanced vector extension 512 Exponential and Reciprocal Instructions\n\tHasAVX512PF         bool // Advanced vector extension 512 Prefetch Instructions\n\tHasAVX512VL         bool // Advanced vector extension 512 Vector Length Extensions\n\tHasAVX512BW         bool // Advanced vector extension 512 Byte and Word Instructions\n\tHasAVX512DQ         bool // Advanced vector extension 512 Doubleword and Quadword Instructions\n\tHasAVX512IFMA       bool // Advanced vector extension 512 Integer Fused Multiply Add\n\tHasAVX512VBMI       bool // Advanced vector extension 512 Vector Byte Manipulation Instructions\n\tHasAVX5124VNNIW     bool // Advanced vector extension 512 Vector Neural Network Instructions Word variable precision\n\tHasAVX5124FMAPS     bool // Advanced vector extension 512 Fused Multiply Accumulation Packed Single precision\n\tHasAVX512VPOPCNTDQ  bool // Advanced vector extension 512 Double and quad word population count instructions\n\tHasAVX512VPCLMULQDQ bool // Advanced vector extension 512 Vector carry-less multiply operations\n\tHasAVX512VNNI       bool // Advanced vector extension 512 Vector Neural Network Instructions\n\tHasAVX512GFNI       bool // Advanced vector extension 512 Galois field New Instructions\n\tHasAVX512VAES       bool // Advanced vector extension 512 Vector AES instructions\n\tHasAVX512VBMI2      bool // Advanced vector extension 512 Vector Byte Manipulation Instructions 2\n\tHasAVX512BITALG     bool // Advanced vector extension 512 Bit Algorithms\n\tHasAVX512BF16       bool // Advanced vector extension 512 BFloat16 Instructions\n\tHasAMXTile          bool // Advanced Matrix Extension Tile instructions\n\tHasAMXInt8          bool // Advanced Matrix Extension Int8 instructions\n\tHasAMXBF16          bool // Advanced Matrix Extension BFloat16 instructions\n\tHasBMI1             bool // Bit manipulation instruction set 1\n\tHasBMI2             bool // Bit manipulation instruction set 2\n\tHasCX16             bool // Compare and exchange 16 Bytes\n\tHasERMS             bool // Enhanced REP for MOVSB and STOSB\n\tHasFMA              bool // Fused-multiply-add instructions\n\tHasOSXSAVE          bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.\n\tHasPCLMULQDQ        bool // PCLMULQDQ instruction - most often used for AES-GCM\n\tHasPOPCNT           bool // Hamming weight instruction POPCNT.\n\tHasRDRAND           bool // RDRAND instruction (on-chip random number generator)\n\tHasRDSEED           bool // RDSEED instruction (on-chip random number generator)\n\tHasSSE2             bool // Streaming SIMD extension 2 (always available on amd64)\n\tHasSSE3             bool // Streaming SIMD extension 3\n\tHasSSSE3            bool // Supplemental streaming SIMD extension 3\n\tHasSSE41            bool // Streaming SIMD extension 4 and 4.1\n\tHasSSE42            bool // Streaming SIMD extension 4 and 4.2\n\tHasAVXIFMA          bool // Advanced vector extension Integer Fused Multiply Add\n\tHasAVXVNNI          bool // Advanced vector extension Vector Neural Network Instructions\n\tHasAVXVNNIInt8      bool // Advanced vector extension Vector Neural Network Int8 instructions\n\t_                   CacheLinePad\n}\n\n// ARM64 contains the supported CPU features of the\n// current ARMv8(aarch64) platform. If the current platform\n// is not arm64 then all feature flags are false.\nvar ARM64 struct {\n\t_           CacheLinePad\n\tHasFP       bool // Floating-point instruction set (always available)\n\tHasASIMD    bool // Advanced SIMD (always available)\n\tHasEVTSTRM  bool // Event stream support\n\tHasAES      bool // AES hardware implementation\n\tHasPMULL    bool // Polynomial multiplication instruction set\n\tHasSHA1     bool // SHA1 hardware implementation\n\tHasSHA2     bool // SHA2 hardware implementation\n\tHasCRC32    bool // CRC32 hardware implementation\n\tHasATOMICS  bool // Atomic memory operation instruction set\n\tHasFPHP     bool // Half precision floating-point instruction set\n\tHasASIMDHP  bool // Advanced SIMD half precision instruction set\n\tHasCPUID    bool // CPUID identification scheme registers\n\tHasASIMDRDM bool // Rounding double multiply add/subtract instruction set\n\tHasJSCVT    bool // Javascript conversion from floating-point to integer\n\tHasFCMA     bool // Floating-point multiplication and addition of complex numbers\n\tHasLRCPC    bool // Release Consistent processor consistent support\n\tHasDCPOP    bool // Persistent memory support\n\tHasSHA3     bool // SHA3 hardware implementation\n\tHasSM3      bool // SM3 hardware implementation\n\tHasSM4      bool // SM4 hardware implementation\n\tHasASIMDDP  bool // Advanced SIMD double precision instruction set\n\tHasSHA512   bool // SHA512 hardware implementation\n\tHasSVE      bool // Scalable Vector Extensions\n\tHasSVE2     bool // Scalable Vector Extensions 2\n\tHasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32\n\tHasDIT      bool // Data Independent Timing support\n\tHasI8MM     bool // Advanced SIMD Int8 matrix multiplication instructions\n\t_           CacheLinePad\n}\n\n// ARM contains the supported CPU features of the current ARM (32-bit) platform.\n// All feature flags are false if:\n//  1. the current platform is not arm, or\n//  2. the current operating system is not Linux.\nvar ARM struct {\n\t_           CacheLinePad\n\tHasSWP      bool // SWP instruction support\n\tHasHALF     bool // Half-word load and store support\n\tHasTHUMB    bool // ARM Thumb instruction set\n\tHas26BIT    bool // Address space limited to 26-bits\n\tHasFASTMUL  bool // 32-bit operand, 64-bit result multiplication support\n\tHasFPA      bool // Floating point arithmetic support\n\tHasVFP      bool // Vector floating point support\n\tHasEDSP     bool // DSP Extensions support\n\tHasJAVA     bool // Java instruction set\n\tHasIWMMXT   bool // Intel Wireless MMX technology support\n\tHasCRUNCH   bool // MaverickCrunch context switching and handling\n\tHasTHUMBEE  bool // Thumb EE instruction set\n\tHasNEON     bool // NEON instruction set\n\tHasVFPv3    bool // Vector floating point version 3 support\n\tHasVFPv3D16 bool // Vector floating point version 3 D8-D15\n\tHasTLS      bool // Thread local storage support\n\tHasVFPv4    bool // Vector floating point version 4 support\n\tHasIDIVA    bool // Integer divide instruction support in ARM mode\n\tHasIDIVT    bool // Integer divide instruction support in Thumb mode\n\tHasVFPD32   bool // Vector floating point version 3 D15-D31\n\tHasLPAE     bool // Large Physical Address Extensions\n\tHasEVTSTRM  bool // Event stream support\n\tHasAES      bool // AES hardware implementation\n\tHasPMULL    bool // Polynomial multiplication instruction set\n\tHasSHA1     bool // SHA1 hardware implementation\n\tHasSHA2     bool // SHA2 hardware implementation\n\tHasCRC32    bool // CRC32 hardware implementation\n\t_           CacheLinePad\n}\n\n// The booleans in Loong64 contain the correspondingly named cpu feature bit.\n// The struct is padded to avoid false sharing.\nvar Loong64 struct {\n\t_         CacheLinePad\n\tHasLSX    bool // support 128-bit vector extension\n\tHasLASX   bool // support 256-bit vector extension\n\tHasCRC32  bool // support CRC instruction\n\tHasLAM_BH bool // support AM{SWAP/ADD}[_DB].{B/H} instruction\n\tHasLAMCAS bool // support AMCAS[_DB].{B/H/W/D} instruction\n\t_         CacheLinePad\n}\n\n// MIPS64X contains the supported CPU features of the current mips64/mips64le\n// platforms. If the current platform is not mips64/mips64le or the current\n// operating system is not Linux then all feature flags are false.\nvar MIPS64X struct {\n\t_      CacheLinePad\n\tHasMSA bool // MIPS SIMD architecture\n\t_      CacheLinePad\n}\n\n// PPC64 contains the supported CPU features of the current ppc64/ppc64le platforms.\n// If the current platform is not ppc64/ppc64le then all feature flags are false.\n//\n// For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00,\n// since there are no optional categories. There are some exceptions that also\n// require kernel support to work (DARN, SCV), so there are feature bits for\n// those as well. The struct is padded to avoid false sharing.\nvar PPC64 struct {\n\t_        CacheLinePad\n\tHasDARN  bool // Hardware random number generator (requires kernel enablement)\n\tHasSCV   bool // Syscall vectored (requires kernel enablement)\n\tIsPOWER8 bool // ISA v2.07 (POWER8)\n\tIsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8\n\t_        CacheLinePad\n}\n\n// S390X contains the supported CPU features of the current IBM Z\n// (s390x) platform. If the current platform is not IBM Z then all\n// feature flags are false.\n//\n// S390X is padded to avoid false sharing. Further HasVX is only set\n// if the OS supports vector registers in addition to the STFLE\n// feature bit being set.\nvar S390X struct {\n\t_         CacheLinePad\n\tHasZARCH  bool // z/Architecture mode is active [mandatory]\n\tHasSTFLE  bool // store facility list extended\n\tHasLDISP  bool // long (20-bit) displacements\n\tHasEIMM   bool // 32-bit immediates\n\tHasDFP    bool // decimal floating point\n\tHasETF3EH bool // ETF-3 enhanced\n\tHasMSA    bool // message security assist (CPACF)\n\tHasAES    bool // KM-AES{128,192,256} functions\n\tHasAESCBC bool // KMC-AES{128,192,256} functions\n\tHasAESCTR bool // KMCTR-AES{128,192,256} functions\n\tHasAESGCM bool // KMA-GCM-AES{128,192,256} functions\n\tHasGHASH  bool // KIMD-GHASH function\n\tHasSHA1   bool // K{I,L}MD-SHA-1 functions\n\tHasSHA256 bool // K{I,L}MD-SHA-256 functions\n\tHasSHA512 bool // K{I,L}MD-SHA-512 functions\n\tHasSHA3   bool // K{I,L}MD-SHA3-{224,256,384,512} and K{I,L}MD-SHAKE-{128,256} functions\n\tHasVX     bool // vector facility\n\tHasVXE    bool // vector-enhancements facility 1\n\t_         CacheLinePad\n}\n\n// RISCV64 contains the supported CPU features and performance characteristics for riscv64\n// platforms. The booleans in RISCV64, with the exception of HasFastMisaligned, indicate\n// the presence of RISC-V extensions.\n//\n// It is safe to assume that all the RV64G extensions are supported and so they are omitted from\n// this structure. As riscv64 Go programs require at least RV64G, the code that populates\n// this structure cannot run successfully if some of the RV64G extensions are missing.\n// The struct is padded to avoid false sharing.\nvar RISCV64 struct {\n\t_                 CacheLinePad\n\tHasFastMisaligned bool // Fast misaligned accesses\n\tHasC              bool // Compressed instruction-set extension\n\tHasV              bool // Vector extension compatible with RVV 1.0\n\tHasZba            bool // Address generation instructions extension\n\tHasZbb            bool // Basic bit-manipulation extension\n\tHasZbs            bool // Single-bit instructions extension\n\t_                 CacheLinePad\n}\n\nfunc init() {\n\tarchInit()\n\tinitOptions()\n\tprocessOptions()\n}\n\n// options contains the cpu debug options that can be used in GODEBUG.\n// Options are arch dependent and are added by the arch specific initOptions functions.\n// Features that are mandatory for the specific GOARCH should have the Required field set\n// (e.g. SSE2 on amd64).\nvar options []option\n\n// Option names should be lower case. e.g. avx instead of AVX.\ntype option struct {\n\tName      string\n\tFeature   *bool\n\tSpecified bool // whether feature value was specified in GODEBUG\n\tEnable    bool // whether feature should be enabled\n\tRequired  bool // whether feature is mandatory and can not be disabled\n}\n\nfunc processOptions() {\n\tenv := os.Getenv(\"GODEBUG\")\nfield:\n\tfor env != \"\" {\n\t\tfield := \"\"\n\t\ti := strings.IndexByte(env, ',')\n\t\tif i < 0 {\n\t\t\tfield, env = env, \"\"\n\t\t} else {\n\t\t\tfield, env = env[:i], env[i+1:]\n\t\t}\n\t\tif len(field) < 4 || field[:4] != \"cpu.\" {\n\t\t\tcontinue\n\t\t}\n\t\ti = strings.IndexByte(field, '=')\n\t\tif i < 0 {\n\t\t\tprint(\"GODEBUG sys/cpu: no value specified for \\\"\", field, \"\\\"\\n\")\n\t\t\tcontinue\n\t\t}\n\t\tkey, value := field[4:i], field[i+1:] // e.g. \"SSE2\", \"on\"\n\n\t\tvar enable bool\n\t\tswitch value {\n\t\tcase \"on\":\n\t\t\tenable = true\n\t\tcase \"off\":\n\t\t\tenable = false\n\t\tdefault:\n\t\t\tprint(\"GODEBUG sys/cpu: value \\\"\", value, \"\\\" not supported for cpu option \\\"\", key, \"\\\"\\n\")\n\t\t\tcontinue field\n\t\t}\n\n\t\tif key == \"all\" {\n\t\t\tfor i := range options {\n\t\t\t\toptions[i].Specified = true\n\t\t\t\toptions[i].Enable = enable || options[i].Required\n\t\t\t}\n\t\t\tcontinue field\n\t\t}\n\n\t\tfor i := range options {\n\t\t\tif options[i].Name == key {\n\t\t\t\toptions[i].Specified = true\n\t\t\t\toptions[i].Enable = enable\n\t\t\t\tcontinue field\n\t\t\t}\n\t\t}\n\n\t\tprint(\"GODEBUG sys/cpu: unknown cpu feature \\\"\", key, \"\\\"\\n\")\n\t}\n\n\tfor _, o := range options {\n\t\tif !o.Specified {\n\t\t\tcontinue\n\t\t}\n\n\t\tif o.Enable && !*o.Feature {\n\t\t\tprint(\"GODEBUG sys/cpu: can not enable \\\"\", o.Name, \"\\\", missing CPU support\\n\")\n\t\t\tcontinue\n\t\t}\n\n\t\tif !o.Enable && o.Required {\n\t\t\tprint(\"GODEBUG sys/cpu: can not disable \\\"\", o.Name, \"\\\", required CPU feature\\n\")\n\t\t\tcontinue\n\t\t}\n\n\t\t*o.Feature = o.Enable\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_aix.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix\n\npackage cpu\n\nconst (\n\t// getsystemcfg constants\n\t_SC_IMPL     = 2\n\t_IMPL_POWER8 = 0x10000\n\t_IMPL_POWER9 = 0x20000\n)\n\nfunc archInit() {\n\timpl := getsystemcfg(_SC_IMPL)\n\tif impl&_IMPL_POWER8 != 0 {\n\t\tPPC64.IsPOWER8 = true\n\t}\n\tif impl&_IMPL_POWER9 != 0 {\n\t\tPPC64.IsPOWER8 = true\n\t\tPPC64.IsPOWER9 = true\n\t}\n\n\tInitialized = true\n}\n\nfunc getsystemcfg(label int) (n uint64) {\n\tr0, _ := callgetsystemcfg(label)\n\tn = uint64(r0)\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_arm.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nconst cacheLineSize = 32\n\n// HWCAP/HWCAP2 bits.\n// These are specific to Linux.\nconst (\n\thwcap_SWP       = 1 << 0\n\thwcap_HALF      = 1 << 1\n\thwcap_THUMB     = 1 << 2\n\thwcap_26BIT     = 1 << 3\n\thwcap_FAST_MULT = 1 << 4\n\thwcap_FPA       = 1 << 5\n\thwcap_VFP       = 1 << 6\n\thwcap_EDSP      = 1 << 7\n\thwcap_JAVA      = 1 << 8\n\thwcap_IWMMXT    = 1 << 9\n\thwcap_CRUNCH    = 1 << 10\n\thwcap_THUMBEE   = 1 << 11\n\thwcap_NEON      = 1 << 12\n\thwcap_VFPv3     = 1 << 13\n\thwcap_VFPv3D16  = 1 << 14\n\thwcap_TLS       = 1 << 15\n\thwcap_VFPv4     = 1 << 16\n\thwcap_IDIVA     = 1 << 17\n\thwcap_IDIVT     = 1 << 18\n\thwcap_VFPD32    = 1 << 19\n\thwcap_LPAE      = 1 << 20\n\thwcap_EVTSTRM   = 1 << 21\n\n\thwcap2_AES   = 1 << 0\n\thwcap2_PMULL = 1 << 1\n\thwcap2_SHA1  = 1 << 2\n\thwcap2_SHA2  = 1 << 3\n\thwcap2_CRC32 = 1 << 4\n)\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"pmull\", Feature: &ARM.HasPMULL},\n\t\t{Name: \"sha1\", Feature: &ARM.HasSHA1},\n\t\t{Name: \"sha2\", Feature: &ARM.HasSHA2},\n\t\t{Name: \"swp\", Feature: &ARM.HasSWP},\n\t\t{Name: \"thumb\", Feature: &ARM.HasTHUMB},\n\t\t{Name: \"thumbee\", Feature: &ARM.HasTHUMBEE},\n\t\t{Name: \"tls\", Feature: &ARM.HasTLS},\n\t\t{Name: \"vfp\", Feature: &ARM.HasVFP},\n\t\t{Name: \"vfpd32\", Feature: &ARM.HasVFPD32},\n\t\t{Name: \"vfpv3\", Feature: &ARM.HasVFPv3},\n\t\t{Name: \"vfpv3d16\", Feature: &ARM.HasVFPv3D16},\n\t\t{Name: \"vfpv4\", Feature: &ARM.HasVFPv4},\n\t\t{Name: \"half\", Feature: &ARM.HasHALF},\n\t\t{Name: \"26bit\", Feature: &ARM.Has26BIT},\n\t\t{Name: \"fastmul\", Feature: &ARM.HasFASTMUL},\n\t\t{Name: \"fpa\", Feature: &ARM.HasFPA},\n\t\t{Name: \"edsp\", Feature: &ARM.HasEDSP},\n\t\t{Name: \"java\", Feature: &ARM.HasJAVA},\n\t\t{Name: \"iwmmxt\", Feature: &ARM.HasIWMMXT},\n\t\t{Name: \"crunch\", Feature: &ARM.HasCRUNCH},\n\t\t{Name: \"neon\", Feature: &ARM.HasNEON},\n\t\t{Name: \"idivt\", Feature: &ARM.HasIDIVT},\n\t\t{Name: \"idiva\", Feature: &ARM.HasIDIVA},\n\t\t{Name: \"lpae\", Feature: &ARM.HasLPAE},\n\t\t{Name: \"evtstrm\", Feature: &ARM.HasEVTSTRM},\n\t\t{Name: \"aes\", Feature: &ARM.HasAES},\n\t\t{Name: \"crc32\", Feature: &ARM.HasCRC32},\n\t}\n\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport \"runtime\"\n\n// cacheLineSize is used to prevent false sharing of cache lines.\n// We choose 128 because Apple Silicon, a.k.a. M1, has 128-byte cache line size.\n// It doesn't cost much and is much more future-proof.\nconst cacheLineSize = 128\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"fp\", Feature: &ARM64.HasFP},\n\t\t{Name: \"asimd\", Feature: &ARM64.HasASIMD},\n\t\t{Name: \"evstrm\", Feature: &ARM64.HasEVTSTRM},\n\t\t{Name: \"aes\", Feature: &ARM64.HasAES},\n\t\t{Name: \"fphp\", Feature: &ARM64.HasFPHP},\n\t\t{Name: \"jscvt\", Feature: &ARM64.HasJSCVT},\n\t\t{Name: \"lrcpc\", Feature: &ARM64.HasLRCPC},\n\t\t{Name: \"pmull\", Feature: &ARM64.HasPMULL},\n\t\t{Name: \"sha1\", Feature: &ARM64.HasSHA1},\n\t\t{Name: \"sha2\", Feature: &ARM64.HasSHA2},\n\t\t{Name: \"sha3\", Feature: &ARM64.HasSHA3},\n\t\t{Name: \"sha512\", Feature: &ARM64.HasSHA512},\n\t\t{Name: \"sm3\", Feature: &ARM64.HasSM3},\n\t\t{Name: \"sm4\", Feature: &ARM64.HasSM4},\n\t\t{Name: \"sve\", Feature: &ARM64.HasSVE},\n\t\t{Name: \"sve2\", Feature: &ARM64.HasSVE2},\n\t\t{Name: \"crc32\", Feature: &ARM64.HasCRC32},\n\t\t{Name: \"atomics\", Feature: &ARM64.HasATOMICS},\n\t\t{Name: \"asimdhp\", Feature: &ARM64.HasASIMDHP},\n\t\t{Name: \"cpuid\", Feature: &ARM64.HasCPUID},\n\t\t{Name: \"asimrdm\", Feature: &ARM64.HasASIMDRDM},\n\t\t{Name: \"fcma\", Feature: &ARM64.HasFCMA},\n\t\t{Name: \"dcpop\", Feature: &ARM64.HasDCPOP},\n\t\t{Name: \"asimddp\", Feature: &ARM64.HasASIMDDP},\n\t\t{Name: \"asimdfhm\", Feature: &ARM64.HasASIMDFHM},\n\t\t{Name: \"dit\", Feature: &ARM64.HasDIT},\n\t\t{Name: \"i8mm\", Feature: &ARM64.HasI8MM},\n\t}\n}\n\nfunc archInit() {\n\tswitch runtime.GOOS {\n\tcase \"freebsd\":\n\t\treadARM64Registers()\n\tcase \"linux\", \"netbsd\", \"openbsd\":\n\t\tdoinit()\n\tdefault:\n\t\t// Many platforms don't seem to allow reading these registers.\n\t\tsetMinimalFeatures()\n\t}\n}\n\n// setMinimalFeatures fakes the minimal ARM64 features expected by\n// TestARM64minimalFeatures.\nfunc setMinimalFeatures() {\n\tARM64.HasASIMD = true\n\tARM64.HasFP = true\n}\n\nfunc readARM64Registers() {\n\tInitialized = true\n\n\tparseARM64SystemRegisters(getisar0(), getisar1(), getpfr0())\n}\n\nfunc parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {\n\t// ID_AA64ISAR0_EL1\n\tswitch extractBits(isar0, 4, 7) {\n\tcase 1:\n\t\tARM64.HasAES = true\n\tcase 2:\n\t\tARM64.HasAES = true\n\t\tARM64.HasPMULL = true\n\t}\n\n\tswitch extractBits(isar0, 8, 11) {\n\tcase 1:\n\t\tARM64.HasSHA1 = true\n\t}\n\n\tswitch extractBits(isar0, 12, 15) {\n\tcase 1:\n\t\tARM64.HasSHA2 = true\n\tcase 2:\n\t\tARM64.HasSHA2 = true\n\t\tARM64.HasSHA512 = true\n\t}\n\n\tswitch extractBits(isar0, 16, 19) {\n\tcase 1:\n\t\tARM64.HasCRC32 = true\n\t}\n\n\tswitch extractBits(isar0, 20, 23) {\n\tcase 2:\n\t\tARM64.HasATOMICS = true\n\t}\n\n\tswitch extractBits(isar0, 28, 31) {\n\tcase 1:\n\t\tARM64.HasASIMDRDM = true\n\t}\n\n\tswitch extractBits(isar0, 32, 35) {\n\tcase 1:\n\t\tARM64.HasSHA3 = true\n\t}\n\n\tswitch extractBits(isar0, 36, 39) {\n\tcase 1:\n\t\tARM64.HasSM3 = true\n\t}\n\n\tswitch extractBits(isar0, 40, 43) {\n\tcase 1:\n\t\tARM64.HasSM4 = true\n\t}\n\n\tswitch extractBits(isar0, 44, 47) {\n\tcase 1:\n\t\tARM64.HasASIMDDP = true\n\t}\n\n\t// ID_AA64ISAR1_EL1\n\tswitch extractBits(isar1, 0, 3) {\n\tcase 1:\n\t\tARM64.HasDCPOP = true\n\t}\n\n\tswitch extractBits(isar1, 12, 15) {\n\tcase 1:\n\t\tARM64.HasJSCVT = true\n\t}\n\n\tswitch extractBits(isar1, 16, 19) {\n\tcase 1:\n\t\tARM64.HasFCMA = true\n\t}\n\n\tswitch extractBits(isar1, 20, 23) {\n\tcase 1:\n\t\tARM64.HasLRCPC = true\n\t}\n\n\tswitch extractBits(isar1, 52, 55) {\n\tcase 1:\n\t\tARM64.HasI8MM = true\n\t}\n\n\t// ID_AA64PFR0_EL1\n\tswitch extractBits(pfr0, 16, 19) {\n\tcase 0:\n\t\tARM64.HasFP = true\n\tcase 1:\n\t\tARM64.HasFP = true\n\t\tARM64.HasFPHP = true\n\t}\n\n\tswitch extractBits(pfr0, 20, 23) {\n\tcase 0:\n\t\tARM64.HasASIMD = true\n\tcase 1:\n\t\tARM64.HasASIMD = true\n\t\tARM64.HasASIMDHP = true\n\t}\n\n\tswitch extractBits(pfr0, 32, 35) {\n\tcase 1:\n\t\tARM64.HasSVE = true\n\n\t\tparseARM64SVERegister(getzfr0())\n\t}\n\n\tswitch extractBits(pfr0, 48, 51) {\n\tcase 1:\n\t\tARM64.HasDIT = true\n\t}\n}\n\nfunc parseARM64SVERegister(zfr0 uint64) {\n\tswitch extractBits(zfr0, 0, 3) {\n\tcase 1:\n\t\tARM64.HasSVE2 = true\n\t}\n}\n\nfunc extractBits(data uint64, start, end uint) uint {\n\treturn (uint)(data>>start) & ((1 << (end - start + 1)) - 1)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_arm64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n// func getisar0() uint64\nTEXT ·getisar0(SB),NOSPLIT,$0-8\n\t// get Instruction Set Attributes 0 into x0\n\t// mrs x0, ID_AA64ISAR0_EL1 = d5380600\n\tWORD\t$0xd5380600\n\tMOVD\tR0, ret+0(FP)\n\tRET\n\n// func getisar1() uint64\nTEXT ·getisar1(SB),NOSPLIT,$0-8\n\t// get Instruction Set Attributes 1 into x0\n\t// mrs x0, ID_AA64ISAR1_EL1 = d5380620\n\tWORD\t$0xd5380620\n\tMOVD\tR0, ret+0(FP)\n\tRET\n\n// func getpfr0() uint64\nTEXT ·getpfr0(SB),NOSPLIT,$0-8\n\t// get Processor Feature Register 0 into x0\n\t// mrs x0, ID_AA64PFR0_EL1 = d5380400\n\tWORD\t$0xd5380400\n\tMOVD\tR0, ret+0(FP)\n\tRET\n\n// func getzfr0() uint64\nTEXT ·getzfr0(SB),NOSPLIT,$0-8\n\t// get SVE Feature Register 0 into x0\n\t// mrs\tx0, ID_AA64ZFR0_EL1 = d5380480\n\tWORD $0xd5380480\n\tMOVD\tR0, ret+0(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin && amd64 && gc\n\npackage cpu\n\n// darwinSupportsAVX512 checks Darwin kernel for AVX512 support via sysctl\n// call (see issue 43089). It also restricts AVX512 support for Darwin to\n// kernel version 21.3.0 (MacOS 12.2.0) or later (see issue 49233).\n//\n// Background:\n// Darwin implements a special mechanism to economize on thread state when\n// AVX512 specific registers are not in use. This scheme minimizes state when\n// preempting threads that haven't yet used any AVX512 instructions, but adds\n// special requirements to check for AVX512 hardware support at runtime (e.g.\n// via sysctl call or commpage inspection). See issue 43089 and link below for\n// full background:\n// https://github.com/apple-oss-distributions/xnu/blob/xnu-11215.1.10/osfmk/i386/fpu.c#L214-L240\n//\n// Additionally, all versions of the Darwin kernel from 19.6.0 through 21.2.0\n// (corresponding to MacOS 10.15.6 - 12.1) have a bug that can cause corruption\n// of the AVX512 mask registers (K0-K7) upon signal return. For this reason\n// AVX512 is considered unsafe to use on Darwin for kernel versions prior to\n// 21.3.0, where a fix has been confirmed. See issue 49233 for full background.\nfunc darwinSupportsAVX512() bool {\n\treturn darwinSysctlEnabled([]byte(\"hw.optional.avx512f\\x00\")) && darwinKernelVersionCheck(21, 3, 0)\n}\n\n// Ensure Darwin kernel version is at least major.minor.patch, avoiding dependencies\nfunc darwinKernelVersionCheck(major, minor, patch int) bool {\n\tvar release [256]byte\n\terr := darwinOSRelease(&release)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\tvar mmp [3]int\n\tc := 0\nLoop:\n\tfor _, b := range release[:] {\n\t\tswitch {\n\t\tcase b >= '0' && b <= '9':\n\t\t\tmmp[c] = 10*mmp[c] + int(b-'0')\n\t\tcase b == '.':\n\t\t\tc++\n\t\t\tif c > 2 {\n\t\t\t\treturn false\n\t\t\t}\n\t\tcase b == 0:\n\t\t\tbreak Loop\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\tif c != 2 {\n\t\treturn false\n\t}\n\treturn mmp[0] > major || mmp[0] == major && (mmp[1] > minor || mmp[1] == minor && mmp[2] >= patch)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gc_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\npackage cpu\n\nfunc getisar0() uint64\nfunc getisar1() uint64\nfunc getpfr0() uint64\nfunc getzfr0() uint64\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gc_s390x.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\npackage cpu\n\n// haveAsmFunctions reports whether the other functions in this file can\n// be safely called.\nfunc haveAsmFunctions() bool { return true }\n\n// The following feature detection functions are defined in cpu_s390x.s.\n// They are likely to be expensive to call so the results should be cached.\nfunc stfle() facilityList\nfunc kmQuery() queryResult\nfunc kmcQuery() queryResult\nfunc kmctrQuery() queryResult\nfunc kmaQuery() queryResult\nfunc kimdQuery() queryResult\nfunc klmdQuery() queryResult\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gc_x86.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (386 || amd64 || amd64p32) && gc\n\npackage cpu\n\n// cpuid is implemented in cpu_gc_x86.s for gc compiler\n// and in cpu_gccgo.c for gccgo.\nfunc cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)\n\n// xgetbv with ecx = 0 is implemented in cpu_gc_x86.s for gc compiler\n// and in cpu_gccgo.c for gccgo.\nfunc xgetbv() (eax, edx uint32)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gc_x86.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (386 || amd64 || amd64p32) && gc\n\n#include \"textflag.h\"\n\n// func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32)\nTEXT ·cpuid(SB), NOSPLIT, $0-24\n\tMOVL eaxArg+0(FP), AX\n\tMOVL ecxArg+4(FP), CX\n\tCPUID\n\tMOVL AX, eax+8(FP)\n\tMOVL BX, ebx+12(FP)\n\tMOVL CX, ecx+16(FP)\n\tMOVL DX, edx+20(FP)\n\tRET\n\n// func xgetbv() (eax, edx uint32)\nTEXT ·xgetbv(SB), NOSPLIT, $0-8\n\tMOVL $0, CX\n\tXGETBV\n\tMOVL AX, eax+0(FP)\n\tMOVL DX, edx+4(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo\n\npackage cpu\n\nfunc getisar0() uint64 { return 0 }\nfunc getisar1() uint64 { return 0 }\nfunc getpfr0() uint64  { return 0 }\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gccgo_s390x.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo\n\npackage cpu\n\n// haveAsmFunctions reports whether the other functions in this file can\n// be safely called.\nfunc haveAsmFunctions() bool { return false }\n\n// TODO(mundaym): the following feature detection functions are currently\n// stubs. See https://golang.org/cl/162887 for how to fix this.\n// They are likely to be expensive to call so the results should be cached.\nfunc stfle() facilityList     { panic(\"not implemented for gccgo\") }\nfunc kmQuery() queryResult    { panic(\"not implemented for gccgo\") }\nfunc kmcQuery() queryResult   { panic(\"not implemented for gccgo\") }\nfunc kmctrQuery() queryResult { panic(\"not implemented for gccgo\") }\nfunc kmaQuery() queryResult   { panic(\"not implemented for gccgo\") }\nfunc kimdQuery() queryResult  { panic(\"not implemented for gccgo\") }\nfunc klmdQuery() queryResult  { panic(\"not implemented for gccgo\") }\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.c",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (386 || amd64 || amd64p32) && gccgo\n\n#include <cpuid.h>\n#include <stdint.h>\n#include <x86intrin.h>\n\n// Need to wrap __get_cpuid_count because it's declared as static.\nint\ngccgoGetCpuidCount(uint32_t leaf, uint32_t subleaf,\n                   uint32_t *eax, uint32_t *ebx,\n                   uint32_t *ecx, uint32_t *edx)\n{\n\treturn __get_cpuid_count(leaf, subleaf, eax, ebx, ecx, edx);\n}\n\n#pragma GCC diagnostic ignored \"-Wunknown-pragmas\"\n#pragma GCC push_options\n#pragma GCC target(\"xsave\")\n#pragma clang attribute push (__attribute__((target(\"xsave\"))), apply_to=function)\n\n// xgetbv reads the contents of an XCR (Extended Control Register)\n// specified in the ECX register into registers EDX:EAX.\n// Currently, the only supported value for XCR is 0.\nvoid\ngccgoXgetbv(uint32_t *eax, uint32_t *edx)\n{\n\tuint64_t v = _xgetbv(0);\n\t*eax = v & 0xffffffff;\n\t*edx = v >> 32;\n}\n\n#pragma clang attribute pop\n#pragma GCC pop_options\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (386 || amd64 || amd64p32) && gccgo\n\npackage cpu\n\n//extern gccgoGetCpuidCount\nfunc gccgoGetCpuidCount(eaxArg, ecxArg uint32, eax, ebx, ecx, edx *uint32)\n\nfunc cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) {\n\tvar a, b, c, d uint32\n\tgccgoGetCpuidCount(eaxArg, ecxArg, &a, &b, &c, &d)\n\treturn a, b, c, d\n}\n\n//extern gccgoXgetbv\nfunc gccgoXgetbv(eax, edx *uint32)\n\nfunc xgetbv() (eax, edx uint32) {\n\tvar a, d uint32\n\tgccgoXgetbv(&a, &d)\n\treturn a, d\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !386 && !amd64 && !amd64p32 && !arm64\n\npackage cpu\n\nfunc archInit() {\n\tif err := readHWCAP(); err != nil {\n\t\treturn\n\t}\n\tdoinit()\n\tInitialized = true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_arm.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nfunc doinit() {\n\tARM.HasSWP = isSet(hwCap, hwcap_SWP)\n\tARM.HasHALF = isSet(hwCap, hwcap_HALF)\n\tARM.HasTHUMB = isSet(hwCap, hwcap_THUMB)\n\tARM.Has26BIT = isSet(hwCap, hwcap_26BIT)\n\tARM.HasFASTMUL = isSet(hwCap, hwcap_FAST_MULT)\n\tARM.HasFPA = isSet(hwCap, hwcap_FPA)\n\tARM.HasVFP = isSet(hwCap, hwcap_VFP)\n\tARM.HasEDSP = isSet(hwCap, hwcap_EDSP)\n\tARM.HasJAVA = isSet(hwCap, hwcap_JAVA)\n\tARM.HasIWMMXT = isSet(hwCap, hwcap_IWMMXT)\n\tARM.HasCRUNCH = isSet(hwCap, hwcap_CRUNCH)\n\tARM.HasTHUMBEE = isSet(hwCap, hwcap_THUMBEE)\n\tARM.HasNEON = isSet(hwCap, hwcap_NEON)\n\tARM.HasVFPv3 = isSet(hwCap, hwcap_VFPv3)\n\tARM.HasVFPv3D16 = isSet(hwCap, hwcap_VFPv3D16)\n\tARM.HasTLS = isSet(hwCap, hwcap_TLS)\n\tARM.HasVFPv4 = isSet(hwCap, hwcap_VFPv4)\n\tARM.HasIDIVA = isSet(hwCap, hwcap_IDIVA)\n\tARM.HasIDIVT = isSet(hwCap, hwcap_IDIVT)\n\tARM.HasVFPD32 = isSet(hwCap, hwcap_VFPD32)\n\tARM.HasLPAE = isSet(hwCap, hwcap_LPAE)\n\tARM.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM)\n\tARM.HasAES = isSet(hwCap2, hwcap2_AES)\n\tARM.HasPMULL = isSet(hwCap2, hwcap2_PMULL)\n\tARM.HasSHA1 = isSet(hwCap2, hwcap2_SHA1)\n\tARM.HasSHA2 = isSet(hwCap2, hwcap2_SHA2)\n\tARM.HasCRC32 = isSet(hwCap2, hwcap2_CRC32)\n}\n\nfunc isSet(hwc uint, value uint) bool {\n\treturn hwc&value != 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport (\n\t\"strings\"\n\t\"syscall\"\n)\n\n// HWCAP/HWCAP2 bits. These are exposed by Linux.\nconst (\n\thwcap_FP       = 1 << 0\n\thwcap_ASIMD    = 1 << 1\n\thwcap_EVTSTRM  = 1 << 2\n\thwcap_AES      = 1 << 3\n\thwcap_PMULL    = 1 << 4\n\thwcap_SHA1     = 1 << 5\n\thwcap_SHA2     = 1 << 6\n\thwcap_CRC32    = 1 << 7\n\thwcap_ATOMICS  = 1 << 8\n\thwcap_FPHP     = 1 << 9\n\thwcap_ASIMDHP  = 1 << 10\n\thwcap_CPUID    = 1 << 11\n\thwcap_ASIMDRDM = 1 << 12\n\thwcap_JSCVT    = 1 << 13\n\thwcap_FCMA     = 1 << 14\n\thwcap_LRCPC    = 1 << 15\n\thwcap_DCPOP    = 1 << 16\n\thwcap_SHA3     = 1 << 17\n\thwcap_SM3      = 1 << 18\n\thwcap_SM4      = 1 << 19\n\thwcap_ASIMDDP  = 1 << 20\n\thwcap_SHA512   = 1 << 21\n\thwcap_SVE      = 1 << 22\n\thwcap_ASIMDFHM = 1 << 23\n\thwcap_DIT      = 1 << 24\n\n\thwcap2_SVE2 = 1 << 1\n\thwcap2_I8MM = 1 << 13\n)\n\n// linuxKernelCanEmulateCPUID reports whether we're running\n// on Linux 4.11+. Ideally we'd like to ask the question about\n// whether the current kernel contains\n// https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=77c97b4ee21290f5f083173d957843b615abbff2\n// but the version number will have to do.\nfunc linuxKernelCanEmulateCPUID() bool {\n\tvar un syscall.Utsname\n\tsyscall.Uname(&un)\n\tvar sb strings.Builder\n\tfor _, b := range un.Release[:] {\n\t\tif b == 0 {\n\t\t\tbreak\n\t\t}\n\t\tsb.WriteByte(byte(b))\n\t}\n\tmajor, minor, _, ok := parseRelease(sb.String())\n\treturn ok && (major > 4 || major == 4 && minor >= 11)\n}\n\nfunc doinit() {\n\tif err := readHWCAP(); err != nil {\n\t\t// We failed to read /proc/self/auxv. This can happen if the binary has\n\t\t// been given extra capabilities(7) with /bin/setcap.\n\t\t//\n\t\t// When this happens, we have two options. If the Linux kernel is new\n\t\t// enough (4.11+), we can read the arm64 registers directly which'll\n\t\t// trap into the kernel and then return back to userspace.\n\t\t//\n\t\t// But on older kernels, such as Linux 4.4.180 as used on many Synology\n\t\t// devices, calling readARM64Registers (specifically getisar0) will\n\t\t// cause a SIGILL and we'll die. So for older kernels, parse /proc/cpuinfo\n\t\t// instead.\n\t\t//\n\t\t// See golang/go#57336.\n\t\tif linuxKernelCanEmulateCPUID() {\n\t\t\treadARM64Registers()\n\t\t} else {\n\t\t\treadLinuxProcCPUInfo()\n\t\t}\n\t\treturn\n\t}\n\n\t// HWCAP feature bits\n\tARM64.HasFP = isSet(hwCap, hwcap_FP)\n\tARM64.HasASIMD = isSet(hwCap, hwcap_ASIMD)\n\tARM64.HasEVTSTRM = isSet(hwCap, hwcap_EVTSTRM)\n\tARM64.HasAES = isSet(hwCap, hwcap_AES)\n\tARM64.HasPMULL = isSet(hwCap, hwcap_PMULL)\n\tARM64.HasSHA1 = isSet(hwCap, hwcap_SHA1)\n\tARM64.HasSHA2 = isSet(hwCap, hwcap_SHA2)\n\tARM64.HasCRC32 = isSet(hwCap, hwcap_CRC32)\n\tARM64.HasATOMICS = isSet(hwCap, hwcap_ATOMICS)\n\tARM64.HasFPHP = isSet(hwCap, hwcap_FPHP)\n\tARM64.HasASIMDHP = isSet(hwCap, hwcap_ASIMDHP)\n\tARM64.HasCPUID = isSet(hwCap, hwcap_CPUID)\n\tARM64.HasASIMDRDM = isSet(hwCap, hwcap_ASIMDRDM)\n\tARM64.HasJSCVT = isSet(hwCap, hwcap_JSCVT)\n\tARM64.HasFCMA = isSet(hwCap, hwcap_FCMA)\n\tARM64.HasLRCPC = isSet(hwCap, hwcap_LRCPC)\n\tARM64.HasDCPOP = isSet(hwCap, hwcap_DCPOP)\n\tARM64.HasSHA3 = isSet(hwCap, hwcap_SHA3)\n\tARM64.HasSM3 = isSet(hwCap, hwcap_SM3)\n\tARM64.HasSM4 = isSet(hwCap, hwcap_SM4)\n\tARM64.HasASIMDDP = isSet(hwCap, hwcap_ASIMDDP)\n\tARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512)\n\tARM64.HasSVE = isSet(hwCap, hwcap_SVE)\n\tARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)\n\tARM64.HasDIT = isSet(hwCap, hwcap_DIT)\n\n\t// HWCAP2 feature bits\n\tARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2)\n\tARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM)\n}\n\nfunc isSet(hwc uint, value uint) bool {\n\treturn hwc&value != 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go",
    "content": "// Copyright 2025 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\n// HWCAP bits. These are exposed by the Linux kernel.\nconst (\n\thwcap_LOONGARCH_LSX  = 1 << 4\n\thwcap_LOONGARCH_LASX = 1 << 5\n)\n\nfunc doinit() {\n\t// TODO: Features that require kernel support like LSX and LASX can\n\t// be detected here once needed in std library or by the compiler.\n\tLoong64.HasLSX = hwcIsSet(hwCap, hwcap_LOONGARCH_LSX)\n\tLoong64.HasLASX = hwcIsSet(hwCap, hwcap_LOONGARCH_LASX)\n}\n\nfunc hwcIsSet(hwc uint, val uint) bool {\n\treturn hwc&val != 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_mips64x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips64 || mips64le)\n\npackage cpu\n\n// HWCAP bits. These are exposed by the Linux kernel 5.4.\nconst (\n\t// CPU features\n\thwcap_MIPS_MSA = 1 << 1\n)\n\nfunc doinit() {\n\t// HWCAP feature bits\n\tMIPS64X.HasMSA = isSet(hwCap, hwcap_MIPS_MSA)\n}\n\nfunc isSet(hwc uint, value uint) bool {\n\treturn hwc&value != 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && !arm && !arm64 && !loong64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x && !riscv64\n\npackage cpu\n\nfunc doinit() {}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_ppc64x.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (ppc64 || ppc64le)\n\npackage cpu\n\n// HWCAP/HWCAP2 bits. These are exposed by the kernel.\nconst (\n\t// ISA Level\n\t_PPC_FEATURE2_ARCH_2_07 = 0x80000000\n\t_PPC_FEATURE2_ARCH_3_00 = 0x00800000\n\n\t// CPU features\n\t_PPC_FEATURE2_DARN = 0x00200000\n\t_PPC_FEATURE2_SCV  = 0x00100000\n)\n\nfunc doinit() {\n\t// HWCAP2 feature bits\n\tPPC64.IsPOWER8 = isSet(hwCap2, _PPC_FEATURE2_ARCH_2_07)\n\tPPC64.IsPOWER9 = isSet(hwCap2, _PPC_FEATURE2_ARCH_3_00)\n\tPPC64.HasDARN = isSet(hwCap2, _PPC_FEATURE2_DARN)\n\tPPC64.HasSCV = isSet(hwCap2, _PPC_FEATURE2_SCV)\n}\n\nfunc isSet(hwc uint, value uint) bool {\n\treturn hwc&value != 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// RISC-V extension discovery code for Linux. The approach here is to first try the riscv_hwprobe\n// syscall falling back to HWCAP to check for the C extension if riscv_hwprobe is not available.\n//\n// A note on detection of the Vector extension using HWCAP.\n//\n// Support for the Vector extension version 1.0 was added to the Linux kernel in release 6.5.\n// Support for the riscv_hwprobe syscall was added in 6.4. It follows that if the riscv_hwprobe\n// syscall is not available then neither is the Vector extension (which needs kernel support).\n// The riscv_hwprobe syscall should then be all we need to detect the Vector extension.\n// However, some RISC-V board manufacturers ship boards with an older kernel on top of which\n// they have back-ported various versions of the Vector extension patches but not the riscv_hwprobe\n// patches. These kernels advertise support for the Vector extension using HWCAP. Falling\n// back to HWCAP to detect the Vector extension, if riscv_hwprobe is not available, or simply not\n// bothering with riscv_hwprobe at all and just using HWCAP may then seem like an attractive option.\n//\n// Unfortunately, simply checking the 'V' bit in AT_HWCAP will not work as this bit is used by\n// RISC-V board and cloud instance providers to mean different things. The Lichee Pi 4A board\n// and the Scaleway RV1 cloud instances use the 'V' bit to advertise their support for the unratified\n// 0.7.1 version of the Vector Specification. The Banana Pi BPI-F3 and the CanMV-K230 board use\n// it to advertise support for 1.0 of the Vector extension. Versions 0.7.1 and 1.0 of the Vector\n// extension are binary incompatible. HWCAP can then not be used in isolation to populate the\n// HasV field as this field indicates that the underlying CPU is compatible with RVV 1.0.\n//\n// There is a way at runtime to distinguish between versions 0.7.1 and 1.0 of the Vector\n// specification by issuing a RVV 1.0 vsetvli instruction and checking the vill bit of the vtype\n// register. This check would allow us to safely detect version 1.0 of the Vector extension\n// with HWCAP, if riscv_hwprobe were not available. However, the check cannot\n// be added until the assembler supports the Vector instructions.\n//\n// Note the riscv_hwprobe syscall does not suffer from these ambiguities by design as all of the\n// extensions it advertises support for are explicitly versioned. It's also worth noting that\n// the riscv_hwprobe syscall is the only way to detect multi-letter RISC-V extensions, e.g., Zba.\n// These cannot be detected using HWCAP and so riscv_hwprobe must be used to detect the majority\n// of RISC-V extensions.\n//\n// Please see https://docs.kernel.org/arch/riscv/hwprobe.html for more information.\n\n// golang.org/x/sys/cpu is not allowed to depend on golang.org/x/sys/unix so we must\n// reproduce the constants, types and functions needed to make the riscv_hwprobe syscall\n// here.\n\nconst (\n\t// Copied from golang.org/x/sys/unix/ztypes_linux_riscv64.go.\n\triscv_HWPROBE_KEY_IMA_EXT_0   = 0x4\n\triscv_HWPROBE_IMA_C           = 0x2\n\triscv_HWPROBE_IMA_V           = 0x4\n\triscv_HWPROBE_EXT_ZBA         = 0x8\n\triscv_HWPROBE_EXT_ZBB         = 0x10\n\triscv_HWPROBE_EXT_ZBS         = 0x20\n\triscv_HWPROBE_KEY_CPUPERF_0   = 0x5\n\triscv_HWPROBE_MISALIGNED_FAST = 0x3\n\triscv_HWPROBE_MISALIGNED_MASK = 0x7\n)\n\nconst (\n\t// sys_RISCV_HWPROBE is copied from golang.org/x/sys/unix/zsysnum_linux_riscv64.go.\n\tsys_RISCV_HWPROBE = 258\n)\n\n// riscvHWProbePairs is copied from golang.org/x/sys/unix/ztypes_linux_riscv64.go.\ntype riscvHWProbePairs struct {\n\tkey   int64\n\tvalue uint64\n}\n\nconst (\n\t// CPU features\n\thwcap_RISCV_ISA_C = 1 << ('C' - 'A')\n)\n\nfunc doinit() {\n\t// A slice of key/value pair structures is passed to the RISCVHWProbe syscall. The key\n\t// field should be initialised with one of the key constants defined above, e.g.,\n\t// RISCV_HWPROBE_KEY_IMA_EXT_0. The syscall will set the value field to the appropriate value.\n\t// If the kernel does not recognise a key it will set the key field to -1 and the value field to 0.\n\n\tpairs := []riscvHWProbePairs{\n\t\t{riscv_HWPROBE_KEY_IMA_EXT_0, 0},\n\t\t{riscv_HWPROBE_KEY_CPUPERF_0, 0},\n\t}\n\n\t// This call only indicates that extensions are supported if they are implemented on all cores.\n\tif riscvHWProbe(pairs, 0) {\n\t\tif pairs[0].key != -1 {\n\t\t\tv := uint(pairs[0].value)\n\t\t\tRISCV64.HasC = isSet(v, riscv_HWPROBE_IMA_C)\n\t\t\tRISCV64.HasV = isSet(v, riscv_HWPROBE_IMA_V)\n\t\t\tRISCV64.HasZba = isSet(v, riscv_HWPROBE_EXT_ZBA)\n\t\t\tRISCV64.HasZbb = isSet(v, riscv_HWPROBE_EXT_ZBB)\n\t\t\tRISCV64.HasZbs = isSet(v, riscv_HWPROBE_EXT_ZBS)\n\t\t}\n\t\tif pairs[1].key != -1 {\n\t\t\tv := pairs[1].value & riscv_HWPROBE_MISALIGNED_MASK\n\t\t\tRISCV64.HasFastMisaligned = v == riscv_HWPROBE_MISALIGNED_FAST\n\t\t}\n\t}\n\n\t// Let's double check with HWCAP if the C extension does not appear to be supported.\n\t// This may happen if we're running on a kernel older than 6.4.\n\n\tif !RISCV64.HasC {\n\t\tRISCV64.HasC = isSet(hwCap, hwcap_RISCV_ISA_C)\n\t}\n}\n\nfunc isSet(hwc uint, value uint) bool {\n\treturn hwc&value != 0\n}\n\n// riscvHWProbe is a simplified version of the generated wrapper function found in\n// golang.org/x/sys/unix/zsyscall_linux_riscv64.go. We simplify it by removing the\n// cpuCount and cpus parameters which we do not need. We always want to pass 0 for\n// these parameters here so the kernel only reports the extensions that are present\n// on all cores.\nfunc riscvHWProbe(pairs []riscvHWProbePairs, flags uint) bool {\n\tvar _zero uintptr\n\tvar p0 unsafe.Pointer\n\tif len(pairs) > 0 {\n\t\tp0 = unsafe.Pointer(&pairs[0])\n\t} else {\n\t\tp0 = unsafe.Pointer(&_zero)\n\t}\n\n\t_, _, e1 := syscall.Syscall6(sys_RISCV_HWPROBE, uintptr(p0), uintptr(len(pairs)), uintptr(0), uintptr(0), uintptr(flags), 0)\n\treturn e1 == 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_linux_s390x.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nconst (\n\t// bit mask values from /usr/include/bits/hwcap.h\n\thwcap_ZARCH  = 2\n\thwcap_STFLE  = 4\n\thwcap_MSA    = 8\n\thwcap_LDISP  = 16\n\thwcap_EIMM   = 32\n\thwcap_DFP    = 64\n\thwcap_ETF3EH = 256\n\thwcap_VX     = 2048\n\thwcap_VXE    = 8192\n)\n\nfunc initS390Xbase() {\n\t// test HWCAP bit vector\n\thas := func(featureMask uint) bool {\n\t\treturn hwCap&featureMask == featureMask\n\t}\n\n\t// mandatory\n\tS390X.HasZARCH = has(hwcap_ZARCH)\n\n\t// optional\n\tS390X.HasSTFLE = has(hwcap_STFLE)\n\tS390X.HasLDISP = has(hwcap_LDISP)\n\tS390X.HasEIMM = has(hwcap_EIMM)\n\tS390X.HasETF3EH = has(hwcap_ETF3EH)\n\tS390X.HasDFP = has(hwcap_DFP)\n\tS390X.HasMSA = has(hwcap_MSA)\n\tS390X.HasVX = has(hwcap_VX)\n\tif S390X.HasVX {\n\t\tS390X.HasVXE = has(hwcap_VXE)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_loong64.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build loong64\n\npackage cpu\n\nconst cacheLineSize = 64\n\n// Bit fields for CPUCFG registers, Related reference documents:\n// https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#_cpucfg\nconst (\n\t// CPUCFG1 bits\n\tcpucfg1_CRC32 = 1 << 25\n\n\t// CPUCFG2 bits\n\tcpucfg2_LAM_BH = 1 << 27\n\tcpucfg2_LAMCAS = 1 << 28\n)\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"lsx\", Feature: &Loong64.HasLSX},\n\t\t{Name: \"lasx\", Feature: &Loong64.HasLASX},\n\t\t{Name: \"crc32\", Feature: &Loong64.HasCRC32},\n\t\t{Name: \"lam_bh\", Feature: &Loong64.HasLAM_BH},\n\t\t{Name: \"lamcas\", Feature: &Loong64.HasLAMCAS},\n\t}\n\n\t// The CPUCFG data on Loong64 only reflects the hardware capabilities,\n\t// not the kernel support status, so features such as LSX and LASX that\n\t// require kernel support cannot be obtained from the CPUCFG data.\n\t//\n\t// These features only require hardware capability support and do not\n\t// require kernel specific support, so they can be obtained directly\n\t// through CPUCFG\n\tcfg1 := get_cpucfg(1)\n\tcfg2 := get_cpucfg(2)\n\n\tLoong64.HasCRC32 = cfgIsSet(cfg1, cpucfg1_CRC32)\n\tLoong64.HasLAMCAS = cfgIsSet(cfg2, cpucfg2_LAMCAS)\n\tLoong64.HasLAM_BH = cfgIsSet(cfg2, cpucfg2_LAM_BH)\n}\n\nfunc get_cpucfg(reg uint32) uint32\n\nfunc cfgIsSet(cfg uint32, val uint32) bool {\n\treturn cfg&val != 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_loong64.s",
    "content": "// Copyright 2025 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n\n// func get_cpucfg(reg uint32) uint32\nTEXT ·get_cpucfg(SB), NOSPLIT|NOFRAME, $0\n\tMOVW\treg+0(FP), R5\n\t// CPUCFG R5, R4 = 0x00006ca4\n\tWORD\t$0x00006ca4\n\tMOVW\tR4, ret+8(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_mips64x.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build mips64 || mips64le\n\npackage cpu\n\nconst cacheLineSize = 32\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"msa\", Feature: &MIPS64X.HasMSA},\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_mipsx.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build mips || mipsle\n\npackage cpu\n\nconst cacheLineSize = 32\n\nfunc initOptions() {}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_netbsd_arm64.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Minimal copy of functionality from x/sys/unix so the cpu package can call\n// sysctl without depending on x/sys/unix.\n\nconst (\n\t_CTL_QUERY = -2\n\n\t_SYSCTL_VERS_1 = 0x1000000\n)\n\nvar _zero uintptr\n\nfunc sysctl(mib []int32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, errno := syscall.Syscall6(\n\t\tsyscall.SYS___SYSCTL,\n\t\tuintptr(_p0),\n\t\tuintptr(len(mib)),\n\t\tuintptr(unsafe.Pointer(old)),\n\t\tuintptr(unsafe.Pointer(oldlen)),\n\t\tuintptr(unsafe.Pointer(new)),\n\t\tuintptr(newlen))\n\tif errno != 0 {\n\t\treturn errno\n\t}\n\treturn nil\n}\n\ntype sysctlNode struct {\n\tFlags          uint32\n\tNum            int32\n\tName           [32]int8\n\tVer            uint32\n\t__rsvd         uint32\n\tUn             [16]byte\n\t_sysctl_size   [8]byte\n\t_sysctl_func   [8]byte\n\t_sysctl_parent [8]byte\n\t_sysctl_desc   [8]byte\n}\n\nfunc sysctlNodes(mib []int32) ([]sysctlNode, error) {\n\tvar olen uintptr\n\n\t// Get a list of all sysctl nodes below the given MIB by performing\n\t// a sysctl for the given MIB with CTL_QUERY appended.\n\tmib = append(mib, _CTL_QUERY)\n\tqnode := sysctlNode{Flags: _SYSCTL_VERS_1}\n\tqp := (*byte)(unsafe.Pointer(&qnode))\n\tsz := unsafe.Sizeof(qnode)\n\tif err := sysctl(mib, nil, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Now that we know the size, get the actual nodes.\n\tnodes := make([]sysctlNode, olen/sz)\n\tnp := (*byte)(unsafe.Pointer(&nodes[0]))\n\tif err := sysctl(mib, np, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nodes, nil\n}\n\nfunc nametomib(name string) ([]int32, error) {\n\t// Split name into components.\n\tvar parts []string\n\tlast := 0\n\tfor i := 0; i < len(name); i++ {\n\t\tif name[i] == '.' {\n\t\t\tparts = append(parts, name[last:i])\n\t\t\tlast = i + 1\n\t\t}\n\t}\n\tparts = append(parts, name[last:])\n\n\tmib := []int32{}\n\t// Discover the nodes and construct the MIB OID.\n\tfor partno, part := range parts {\n\t\tnodes, err := sysctlNodes(mib)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, node := range nodes {\n\t\t\tn := make([]byte, 0)\n\t\t\tfor i := range node.Name {\n\t\t\t\tif node.Name[i] != 0 {\n\t\t\t\t\tn = append(n, byte(node.Name[i]))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif string(n) == part {\n\t\t\t\tmib = append(mib, int32(node.Num))\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif len(mib) != partno+1 {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn mib, nil\n}\n\n// aarch64SysctlCPUID is struct aarch64_sysctl_cpu_id from NetBSD's <aarch64/armreg.h>\ntype aarch64SysctlCPUID struct {\n\tmidr      uint64 /* Main ID Register */\n\trevidr    uint64 /* Revision ID Register */\n\tmpidr     uint64 /* Multiprocessor Affinity Register */\n\taa64dfr0  uint64 /* A64 Debug Feature Register 0 */\n\taa64dfr1  uint64 /* A64 Debug Feature Register 1 */\n\taa64isar0 uint64 /* A64 Instruction Set Attribute Register 0 */\n\taa64isar1 uint64 /* A64 Instruction Set Attribute Register 1 */\n\taa64mmfr0 uint64 /* A64 Memory Model Feature Register 0 */\n\taa64mmfr1 uint64 /* A64 Memory Model Feature Register 1 */\n\taa64mmfr2 uint64 /* A64 Memory Model Feature Register 2 */\n\taa64pfr0  uint64 /* A64 Processor Feature Register 0 */\n\taa64pfr1  uint64 /* A64 Processor Feature Register 1 */\n\taa64zfr0  uint64 /* A64 SVE Feature ID Register 0 */\n\tmvfr0     uint32 /* Media and VFP Feature Register 0 */\n\tmvfr1     uint32 /* Media and VFP Feature Register 1 */\n\tmvfr2     uint32 /* Media and VFP Feature Register 2 */\n\tpad       uint32\n\tclidr     uint64 /* Cache Level ID Register */\n\tctr       uint64 /* Cache Type Register */\n}\n\nfunc sysctlCPUID(name string) (*aarch64SysctlCPUID, error) {\n\tmib, err := nametomib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tout := aarch64SysctlCPUID{}\n\tn := unsafe.Sizeof(out)\n\t_, _, errno := syscall.Syscall6(\n\t\tsyscall.SYS___SYSCTL,\n\t\tuintptr(unsafe.Pointer(&mib[0])),\n\t\tuintptr(len(mib)),\n\t\tuintptr(unsafe.Pointer(&out)),\n\t\tuintptr(unsafe.Pointer(&n)),\n\t\tuintptr(0),\n\t\tuintptr(0))\n\tif errno != 0 {\n\t\treturn nil, errno\n\t}\n\treturn &out, nil\n}\n\nfunc doinit() {\n\tcpuid, err := sysctlCPUID(\"machdep.cpu0.cpu_id\")\n\tif err != nil {\n\t\tsetMinimalFeatures()\n\t\treturn\n\t}\n\tparseARM64SystemRegisters(cpuid.aa64isar0, cpuid.aa64isar1, cpuid.aa64pfr0)\n\n\tInitialized = true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Minimal copy of functionality from x/sys/unix so the cpu package can call\n// sysctl without depending on x/sys/unix.\n\nconst (\n\t// From OpenBSD's sys/sysctl.h.\n\t_CTL_MACHDEP = 7\n\n\t// From OpenBSD's machine/cpu.h.\n\t_CPU_ID_AA64ISAR0 = 2\n\t_CPU_ID_AA64ISAR1 = 3\n)\n\n// Implemented in the runtime package (runtime/sys_openbsd3.go)\nfunc syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n//go:linkname syscall_syscall6 syscall.syscall6\n\nfunc sysctl(mib []uint32, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\t_, _, errno := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(unsafe.Pointer(&mib[0])), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif errno != 0 {\n\t\treturn errno\n\t}\n\treturn nil\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\nfunc sysctlUint64(mib []uint32) (uint64, bool) {\n\tvar out uint64\n\tnout := unsafe.Sizeof(out)\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); err != nil {\n\t\treturn 0, false\n\t}\n\treturn out, true\n}\n\nfunc doinit() {\n\tsetMinimalFeatures()\n\n\t// Get ID_AA64ISAR0 and ID_AA64ISAR1 from sysctl.\n\tisar0, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR0})\n\tif !ok {\n\t\treturn\n\t}\n\tisar1, ok := sysctlUint64([]uint32{_CTL_MACHDEP, _CPU_ID_AA64ISAR1})\n\tif !ok {\n\t\treturn\n\t}\n\tparseARM64SystemRegisters(isar0, isar1, 0)\n\n\tInitialized = true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_openbsd_arm64.s",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\n\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_other_arm.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !linux && arm\n\npackage cpu\n\nfunc archInit() {}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_other_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !linux && !netbsd && !openbsd && arm64\n\npackage cpu\n\nfunc doinit() {}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_other_mips64x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !linux && (mips64 || mips64le)\n\npackage cpu\n\nfunc archInit() {\n\tInitialized = true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_other_ppc64x.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !aix && !linux && (ppc64 || ppc64le)\n\npackage cpu\n\nfunc archInit() {\n\tPPC64.IsPOWER8 = true\n\tInitialized = true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_other_riscv64.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !linux && riscv64\n\npackage cpu\n\nfunc archInit() {\n\tInitialized = true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_other_x86.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 || amd64p32 || (amd64 && (!darwin || !gc))\n\npackage cpu\n\nfunc darwinSupportsAVX512() bool {\n\tpanic(\"only implemented for gc && amd64 && darwin\")\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_ppc64x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build ppc64 || ppc64le\n\npackage cpu\n\nconst cacheLineSize = 128\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"darn\", Feature: &PPC64.HasDARN},\n\t\t{Name: \"scv\", Feature: &PPC64.HasSCV},\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_riscv64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64\n\npackage cpu\n\nconst cacheLineSize = 64\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"fastmisaligned\", Feature: &RISCV64.HasFastMisaligned},\n\t\t{Name: \"c\", Feature: &RISCV64.HasC},\n\t\t{Name: \"v\", Feature: &RISCV64.HasV},\n\t\t{Name: \"zba\", Feature: &RISCV64.HasZba},\n\t\t{Name: \"zbb\", Feature: &RISCV64.HasZbb},\n\t\t{Name: \"zbs\", Feature: &RISCV64.HasZbs},\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_s390x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nconst cacheLineSize = 256\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"zarch\", Feature: &S390X.HasZARCH, Required: true},\n\t\t{Name: \"stfle\", Feature: &S390X.HasSTFLE, Required: true},\n\t\t{Name: \"ldisp\", Feature: &S390X.HasLDISP, Required: true},\n\t\t{Name: \"eimm\", Feature: &S390X.HasEIMM, Required: true},\n\t\t{Name: \"dfp\", Feature: &S390X.HasDFP},\n\t\t{Name: \"etf3eh\", Feature: &S390X.HasETF3EH},\n\t\t{Name: \"msa\", Feature: &S390X.HasMSA},\n\t\t{Name: \"aes\", Feature: &S390X.HasAES},\n\t\t{Name: \"aescbc\", Feature: &S390X.HasAESCBC},\n\t\t{Name: \"aesctr\", Feature: &S390X.HasAESCTR},\n\t\t{Name: \"aesgcm\", Feature: &S390X.HasAESGCM},\n\t\t{Name: \"ghash\", Feature: &S390X.HasGHASH},\n\t\t{Name: \"sha1\", Feature: &S390X.HasSHA1},\n\t\t{Name: \"sha256\", Feature: &S390X.HasSHA256},\n\t\t{Name: \"sha3\", Feature: &S390X.HasSHA3},\n\t\t{Name: \"sha512\", Feature: &S390X.HasSHA512},\n\t\t{Name: \"vx\", Feature: &S390X.HasVX},\n\t\t{Name: \"vxe\", Feature: &S390X.HasVXE},\n\t}\n}\n\n// bitIsSet reports whether the bit at index is set. The bit index\n// is in big endian order, so bit index 0 is the leftmost bit.\nfunc bitIsSet(bits []uint64, index uint) bool {\n\treturn bits[index/64]&((1<<63)>>(index%64)) != 0\n}\n\n// facility is a bit index for the named facility.\ntype facility uint8\n\nconst (\n\t// mandatory facilities\n\tzarch  facility = 1  // z architecture mode is active\n\tstflef facility = 7  // store-facility-list-extended\n\tldisp  facility = 18 // long-displacement\n\teimm   facility = 21 // extended-immediate\n\n\t// miscellaneous facilities\n\tdfp    facility = 42 // decimal-floating-point\n\tetf3eh facility = 30 // extended-translation 3 enhancement\n\n\t// cryptography facilities\n\tmsa  facility = 17  // message-security-assist\n\tmsa3 facility = 76  // message-security-assist extension 3\n\tmsa4 facility = 77  // message-security-assist extension 4\n\tmsa5 facility = 57  // message-security-assist extension 5\n\tmsa8 facility = 146 // message-security-assist extension 8\n\tmsa9 facility = 155 // message-security-assist extension 9\n\n\t// vector facilities\n\tvx   facility = 129 // vector facility\n\tvxe  facility = 135 // vector-enhancements 1\n\tvxe2 facility = 148 // vector-enhancements 2\n)\n\n// facilityList contains the result of an STFLE call.\n// Bits are numbered in big endian order so the\n// leftmost bit (the MSB) is at index 0.\ntype facilityList struct {\n\tbits [4]uint64\n}\n\n// Has reports whether the given facilities are present.\nfunc (s *facilityList) Has(fs ...facility) bool {\n\tif len(fs) == 0 {\n\t\tpanic(\"no facility bits provided\")\n\t}\n\tfor _, f := range fs {\n\t\tif !bitIsSet(s.bits[:], uint(f)) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// function is the code for the named cryptographic function.\ntype function uint8\n\nconst (\n\t// KM{,A,C,CTR} function codes\n\taes128 function = 18 // AES-128\n\taes192 function = 19 // AES-192\n\taes256 function = 20 // AES-256\n\n\t// K{I,L}MD function codes\n\tsha1     function = 1  // SHA-1\n\tsha256   function = 2  // SHA-256\n\tsha512   function = 3  // SHA-512\n\tsha3_224 function = 32 // SHA3-224\n\tsha3_256 function = 33 // SHA3-256\n\tsha3_384 function = 34 // SHA3-384\n\tsha3_512 function = 35 // SHA3-512\n\tshake128 function = 36 // SHAKE-128\n\tshake256 function = 37 // SHAKE-256\n\n\t// KLMD function codes\n\tghash function = 65 // GHASH\n)\n\n// queryResult contains the result of a Query function\n// call. Bits are numbered in big endian order so the\n// leftmost bit (the MSB) is at index 0.\ntype queryResult struct {\n\tbits [2]uint64\n}\n\n// Has reports whether the given functions are present.\nfunc (q *queryResult) Has(fns ...function) bool {\n\tif len(fns) == 0 {\n\t\tpanic(\"no function codes provided\")\n\t}\n\tfor _, f := range fns {\n\t\tif !bitIsSet(q.bits[:], uint(f)) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc doinit() {\n\tinitS390Xbase()\n\n\t// We need implementations of stfle, km and so on\n\t// to detect cryptographic features.\n\tif !haveAsmFunctions() {\n\t\treturn\n\t}\n\n\t// optional cryptographic functions\n\tif S390X.HasMSA {\n\t\taes := []function{aes128, aes192, aes256}\n\n\t\t// cipher message\n\t\tkm, kmc := kmQuery(), kmcQuery()\n\t\tS390X.HasAES = km.Has(aes...)\n\t\tS390X.HasAESCBC = kmc.Has(aes...)\n\t\tif S390X.HasSTFLE {\n\t\t\tfacilities := stfle()\n\t\t\tif facilities.Has(msa4) {\n\t\t\t\tkmctr := kmctrQuery()\n\t\t\t\tS390X.HasAESCTR = kmctr.Has(aes...)\n\t\t\t}\n\t\t\tif facilities.Has(msa8) {\n\t\t\t\tkma := kmaQuery()\n\t\t\t\tS390X.HasAESGCM = kma.Has(aes...)\n\t\t\t}\n\t\t}\n\n\t\t// compute message digest\n\t\tkimd := kimdQuery() // intermediate (no padding)\n\t\tklmd := klmdQuery() // last (padding)\n\t\tS390X.HasSHA1 = kimd.Has(sha1) && klmd.Has(sha1)\n\t\tS390X.HasSHA256 = kimd.Has(sha256) && klmd.Has(sha256)\n\t\tS390X.HasSHA512 = kimd.Has(sha512) && klmd.Has(sha512)\n\t\tS390X.HasGHASH = kimd.Has(ghash) // KLMD-GHASH does not exist\n\t\tsha3 := []function{\n\t\t\tsha3_224, sha3_256, sha3_384, sha3_512,\n\t\t\tshake128, shake256,\n\t\t}\n\t\tS390X.HasSHA3 = kimd.Has(sha3...) && klmd.Has(sha3...)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_s390x.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n// func stfle() facilityList\nTEXT ·stfle(SB), NOSPLIT|NOFRAME, $0-32\n\tMOVD $ret+0(FP), R1\n\tMOVD $3, R0          // last doubleword index to store\n\tXC   $32, (R1), (R1) // clear 4 doublewords (32 bytes)\n\tWORD $0xb2b01000     // store facility list extended (STFLE)\n\tRET\n\n// func kmQuery() queryResult\nTEXT ·kmQuery(SB), NOSPLIT|NOFRAME, $0-16\n\tMOVD $0, R0         // set function code to 0 (KM-Query)\n\tMOVD $ret+0(FP), R1 // address of 16-byte return value\n\tWORD $0xB92E0024    // cipher message (KM)\n\tRET\n\n// func kmcQuery() queryResult\nTEXT ·kmcQuery(SB), NOSPLIT|NOFRAME, $0-16\n\tMOVD $0, R0         // set function code to 0 (KMC-Query)\n\tMOVD $ret+0(FP), R1 // address of 16-byte return value\n\tWORD $0xB92F0024    // cipher message with chaining (KMC)\n\tRET\n\n// func kmctrQuery() queryResult\nTEXT ·kmctrQuery(SB), NOSPLIT|NOFRAME, $0-16\n\tMOVD $0, R0         // set function code to 0 (KMCTR-Query)\n\tMOVD $ret+0(FP), R1 // address of 16-byte return value\n\tWORD $0xB92D4024    // cipher message with counter (KMCTR)\n\tRET\n\n// func kmaQuery() queryResult\nTEXT ·kmaQuery(SB), NOSPLIT|NOFRAME, $0-16\n\tMOVD $0, R0         // set function code to 0 (KMA-Query)\n\tMOVD $ret+0(FP), R1 // address of 16-byte return value\n\tWORD $0xb9296024    // cipher message with authentication (KMA)\n\tRET\n\n// func kimdQuery() queryResult\nTEXT ·kimdQuery(SB), NOSPLIT|NOFRAME, $0-16\n\tMOVD $0, R0         // set function code to 0 (KIMD-Query)\n\tMOVD $ret+0(FP), R1 // address of 16-byte return value\n\tWORD $0xB93E0024    // compute intermediate message digest (KIMD)\n\tRET\n\n// func klmdQuery() queryResult\nTEXT ·klmdQuery(SB), NOSPLIT|NOFRAME, $0-16\n\tMOVD $0, R0         // set function code to 0 (KLMD-Query)\n\tMOVD $ret+0(FP), R1 // address of 16-byte return value\n\tWORD $0xB93F0024    // compute last message digest (KLMD)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_wasm.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build wasm\n\npackage cpu\n\n// We're compiling the cpu package for an unknown (software-abstracted) CPU.\n// Make CacheLinePad an empty struct and hope that the usual struct alignment\n// rules are good enough.\n\nconst cacheLineSize = 0\n\nfunc initOptions() {}\n\nfunc archInit() {}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_x86.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 || amd64 || amd64p32\n\npackage cpu\n\nimport \"runtime\"\n\nconst cacheLineSize = 64\n\nfunc initOptions() {\n\toptions = []option{\n\t\t{Name: \"adx\", Feature: &X86.HasADX},\n\t\t{Name: \"aes\", Feature: &X86.HasAES},\n\t\t{Name: \"avx\", Feature: &X86.HasAVX},\n\t\t{Name: \"avx2\", Feature: &X86.HasAVX2},\n\t\t{Name: \"avx512\", Feature: &X86.HasAVX512},\n\t\t{Name: \"avx512f\", Feature: &X86.HasAVX512F},\n\t\t{Name: \"avx512cd\", Feature: &X86.HasAVX512CD},\n\t\t{Name: \"avx512er\", Feature: &X86.HasAVX512ER},\n\t\t{Name: \"avx512pf\", Feature: &X86.HasAVX512PF},\n\t\t{Name: \"avx512vl\", Feature: &X86.HasAVX512VL},\n\t\t{Name: \"avx512bw\", Feature: &X86.HasAVX512BW},\n\t\t{Name: \"avx512dq\", Feature: &X86.HasAVX512DQ},\n\t\t{Name: \"avx512ifma\", Feature: &X86.HasAVX512IFMA},\n\t\t{Name: \"avx512vbmi\", Feature: &X86.HasAVX512VBMI},\n\t\t{Name: \"avx512vnniw\", Feature: &X86.HasAVX5124VNNIW},\n\t\t{Name: \"avx5124fmaps\", Feature: &X86.HasAVX5124FMAPS},\n\t\t{Name: \"avx512vpopcntdq\", Feature: &X86.HasAVX512VPOPCNTDQ},\n\t\t{Name: \"avx512vpclmulqdq\", Feature: &X86.HasAVX512VPCLMULQDQ},\n\t\t{Name: \"avx512vnni\", Feature: &X86.HasAVX512VNNI},\n\t\t{Name: \"avx512gfni\", Feature: &X86.HasAVX512GFNI},\n\t\t{Name: \"avx512vaes\", Feature: &X86.HasAVX512VAES},\n\t\t{Name: \"avx512vbmi2\", Feature: &X86.HasAVX512VBMI2},\n\t\t{Name: \"avx512bitalg\", Feature: &X86.HasAVX512BITALG},\n\t\t{Name: \"avx512bf16\", Feature: &X86.HasAVX512BF16},\n\t\t{Name: \"amxtile\", Feature: &X86.HasAMXTile},\n\t\t{Name: \"amxint8\", Feature: &X86.HasAMXInt8},\n\t\t{Name: \"amxbf16\", Feature: &X86.HasAMXBF16},\n\t\t{Name: \"bmi1\", Feature: &X86.HasBMI1},\n\t\t{Name: \"bmi2\", Feature: &X86.HasBMI2},\n\t\t{Name: \"cx16\", Feature: &X86.HasCX16},\n\t\t{Name: \"erms\", Feature: &X86.HasERMS},\n\t\t{Name: \"fma\", Feature: &X86.HasFMA},\n\t\t{Name: \"osxsave\", Feature: &X86.HasOSXSAVE},\n\t\t{Name: \"pclmulqdq\", Feature: &X86.HasPCLMULQDQ},\n\t\t{Name: \"popcnt\", Feature: &X86.HasPOPCNT},\n\t\t{Name: \"rdrand\", Feature: &X86.HasRDRAND},\n\t\t{Name: \"rdseed\", Feature: &X86.HasRDSEED},\n\t\t{Name: \"sse3\", Feature: &X86.HasSSE3},\n\t\t{Name: \"sse41\", Feature: &X86.HasSSE41},\n\t\t{Name: \"sse42\", Feature: &X86.HasSSE42},\n\t\t{Name: \"ssse3\", Feature: &X86.HasSSSE3},\n\t\t{Name: \"avxifma\", Feature: &X86.HasAVXIFMA},\n\t\t{Name: \"avxvnni\", Feature: &X86.HasAVXVNNI},\n\t\t{Name: \"avxvnniint8\", Feature: &X86.HasAVXVNNIInt8},\n\n\t\t// These capabilities should always be enabled on amd64:\n\t\t{Name: \"sse2\", Feature: &X86.HasSSE2, Required: runtime.GOARCH == \"amd64\"},\n\t}\n}\n\nfunc archInit() {\n\n\tInitialized = true\n\n\tmaxID, _, _, _ := cpuid(0, 0)\n\n\tif maxID < 1 {\n\t\treturn\n\t}\n\n\t_, _, ecx1, edx1 := cpuid(1, 0)\n\tX86.HasSSE2 = isSet(26, edx1)\n\n\tX86.HasSSE3 = isSet(0, ecx1)\n\tX86.HasPCLMULQDQ = isSet(1, ecx1)\n\tX86.HasSSSE3 = isSet(9, ecx1)\n\tX86.HasFMA = isSet(12, ecx1)\n\tX86.HasCX16 = isSet(13, ecx1)\n\tX86.HasSSE41 = isSet(19, ecx1)\n\tX86.HasSSE42 = isSet(20, ecx1)\n\tX86.HasPOPCNT = isSet(23, ecx1)\n\tX86.HasAES = isSet(25, ecx1)\n\tX86.HasOSXSAVE = isSet(27, ecx1)\n\tX86.HasRDRAND = isSet(30, ecx1)\n\n\tvar osSupportsAVX, osSupportsAVX512 bool\n\t// For XGETBV, OSXSAVE bit is required and sufficient.\n\tif X86.HasOSXSAVE {\n\t\teax, _ := xgetbv()\n\t\t// Check if XMM and YMM registers have OS support.\n\t\tosSupportsAVX = isSet(1, eax) && isSet(2, eax)\n\n\t\tif runtime.GOOS == \"darwin\" {\n\t\t\t// Darwin requires special AVX512 checks, see cpu_darwin_x86.go\n\t\t\tosSupportsAVX512 = osSupportsAVX && darwinSupportsAVX512()\n\t\t} else {\n\t\t\t// Check if OPMASK and ZMM registers have OS support.\n\t\t\tosSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax)\n\t\t}\n\t}\n\n\tX86.HasAVX = isSet(28, ecx1) && osSupportsAVX\n\n\tif maxID < 7 {\n\t\treturn\n\t}\n\n\teax7, ebx7, ecx7, edx7 := cpuid(7, 0)\n\tX86.HasBMI1 = isSet(3, ebx7)\n\tX86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX\n\tX86.HasBMI2 = isSet(8, ebx7)\n\tX86.HasERMS = isSet(9, ebx7)\n\tX86.HasRDSEED = isSet(18, ebx7)\n\tX86.HasADX = isSet(19, ebx7)\n\n\tX86.HasAVX512 = isSet(16, ebx7) && osSupportsAVX512 // Because avx-512 foundation is the core required extension\n\tif X86.HasAVX512 {\n\t\tX86.HasAVX512F = true\n\t\tX86.HasAVX512CD = isSet(28, ebx7)\n\t\tX86.HasAVX512ER = isSet(27, ebx7)\n\t\tX86.HasAVX512PF = isSet(26, ebx7)\n\t\tX86.HasAVX512VL = isSet(31, ebx7)\n\t\tX86.HasAVX512BW = isSet(30, ebx7)\n\t\tX86.HasAVX512DQ = isSet(17, ebx7)\n\t\tX86.HasAVX512IFMA = isSet(21, ebx7)\n\t\tX86.HasAVX512VBMI = isSet(1, ecx7)\n\t\tX86.HasAVX5124VNNIW = isSet(2, edx7)\n\t\tX86.HasAVX5124FMAPS = isSet(3, edx7)\n\t\tX86.HasAVX512VPOPCNTDQ = isSet(14, ecx7)\n\t\tX86.HasAVX512VPCLMULQDQ = isSet(10, ecx7)\n\t\tX86.HasAVX512VNNI = isSet(11, ecx7)\n\t\tX86.HasAVX512GFNI = isSet(8, ecx7)\n\t\tX86.HasAVX512VAES = isSet(9, ecx7)\n\t\tX86.HasAVX512VBMI2 = isSet(6, ecx7)\n\t\tX86.HasAVX512BITALG = isSet(12, ecx7)\n\t}\n\n\tX86.HasAMXTile = isSet(24, edx7)\n\tX86.HasAMXInt8 = isSet(25, edx7)\n\tX86.HasAMXBF16 = isSet(22, edx7)\n\n\t// These features depend on the second level of extended features.\n\tif eax7 >= 1 {\n\t\teax71, _, _, edx71 := cpuid(7, 1)\n\t\tif X86.HasAVX512 {\n\t\t\tX86.HasAVX512BF16 = isSet(5, eax71)\n\t\t}\n\t\tif X86.HasAVX {\n\t\t\tX86.HasAVXIFMA = isSet(23, eax71)\n\t\t\tX86.HasAVXVNNI = isSet(4, eax71)\n\t\t\tX86.HasAVXVNNIInt8 = isSet(4, edx71)\n\t\t}\n\t}\n}\n\nfunc isSet(bitpos uint, value uint32) bool {\n\treturn value&(1<<bitpos) != 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_zos.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nfunc archInit() {\n\tdoinit()\n\tInitialized = true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/cpu_zos_s390x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nfunc initS390Xbase() {\n\t// get the facilities list\n\tfacilities := stfle()\n\n\t// mandatory\n\tS390X.HasZARCH = facilities.Has(zarch)\n\tS390X.HasSTFLE = facilities.Has(stflef)\n\tS390X.HasLDISP = facilities.Has(ldisp)\n\tS390X.HasEIMM = facilities.Has(eimm)\n\n\t// optional\n\tS390X.HasETF3EH = facilities.Has(etf3eh)\n\tS390X.HasDFP = facilities.Has(dfp)\n\tS390X.HasMSA = facilities.Has(msa)\n\tS390X.HasVX = facilities.Has(vx)\n\tif S390X.HasVX {\n\t\tS390X.HasVXE = facilities.Has(vxe)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/endian_big.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64\n\npackage cpu\n\n// IsBigEndian records whether the GOARCH's byte order is big endian.\nconst IsBigEndian = true\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/endian_little.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh || wasm\n\npackage cpu\n\n// IsBigEndian records whether the GOARCH's byte order is big endian.\nconst IsBigEndian = false\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/hwcap_linux.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport (\n\t\"os\"\n)\n\nconst (\n\t_AT_HWCAP  = 16\n\t_AT_HWCAP2 = 26\n\n\tprocAuxv = \"/proc/self/auxv\"\n\n\tuintSize = int(32 << (^uint(0) >> 63))\n)\n\n// For those platforms don't have a 'cpuid' equivalent we use HWCAP/HWCAP2\n// These are initialized in cpu_$GOARCH.go\n// and should not be changed after they are initialized.\nvar hwCap uint\nvar hwCap2 uint\n\nfunc readHWCAP() error {\n\t// For Go 1.21+, get auxv from the Go runtime.\n\tif a := getAuxv(); len(a) > 0 {\n\t\tfor len(a) >= 2 {\n\t\t\ttag, val := a[0], uint(a[1])\n\t\t\ta = a[2:]\n\t\t\tswitch tag {\n\t\t\tcase _AT_HWCAP:\n\t\t\t\thwCap = val\n\t\t\tcase _AT_HWCAP2:\n\t\t\t\thwCap2 = val\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tbuf, err := os.ReadFile(procAuxv)\n\tif err != nil {\n\t\t// e.g. on android /proc/self/auxv is not accessible, so silently\n\t\t// ignore the error and leave Initialized = false. On some\n\t\t// architectures (e.g. arm64) doinit() implements a fallback\n\t\t// readout and will set Initialized = true again.\n\t\treturn err\n\t}\n\tbo := hostByteOrder()\n\tfor len(buf) >= 2*(uintSize/8) {\n\t\tvar tag, val uint\n\t\tswitch uintSize {\n\t\tcase 32:\n\t\t\ttag = uint(bo.Uint32(buf[0:]))\n\t\t\tval = uint(bo.Uint32(buf[4:]))\n\t\t\tbuf = buf[8:]\n\t\tcase 64:\n\t\t\ttag = uint(bo.Uint64(buf[0:]))\n\t\t\tval = uint(bo.Uint64(buf[8:]))\n\t\t\tbuf = buf[16:]\n\t\t}\n\t\tswitch tag {\n\t\tcase _AT_HWCAP:\n\t\t\thwCap = val\n\t\tcase _AT_HWCAP2:\n\t\t\thwCap2 = val\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/parse.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\nimport \"strconv\"\n\n// parseRelease parses a dot-separated version number. It follows the semver\n// syntax, but allows the minor and patch versions to be elided.\n//\n// This is a copy of the Go runtime's parseRelease from\n// https://golang.org/cl/209597.\nfunc parseRelease(rel string) (major, minor, patch int, ok bool) {\n\t// Strip anything after a dash or plus.\n\tfor i := range len(rel) {\n\t\tif rel[i] == '-' || rel[i] == '+' {\n\t\t\trel = rel[:i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tnext := func() (int, bool) {\n\t\tfor i := range len(rel) {\n\t\t\tif rel[i] == '.' {\n\t\t\t\tver, err := strconv.Atoi(rel[:i])\n\t\t\t\trel = rel[i+1:]\n\t\t\t\treturn ver, err == nil\n\t\t\t}\n\t\t}\n\t\tver, err := strconv.Atoi(rel)\n\t\trel = \"\"\n\t\treturn ver, err == nil\n\t}\n\tif major, ok = next(); !ok || rel == \"\" {\n\t\treturn\n\t}\n\tif minor, ok = next(); !ok || rel == \"\" {\n\t\treturn\n\t}\n\tpatch, ok = next()\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/proc_cpuinfo_linux.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && arm64\n\npackage cpu\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc readLinuxProcCPUInfo() error {\n\tf, err := os.Open(\"/proc/cpuinfo\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tvar buf [1 << 10]byte // enough for first CPU\n\tn, err := io.ReadFull(f, buf[:])\n\tif err != nil && err != io.ErrUnexpectedEOF {\n\t\treturn err\n\t}\n\tin := string(buf[:n])\n\tconst features = \"\\nFeatures\t: \"\n\ti := strings.Index(in, features)\n\tif i == -1 {\n\t\treturn errors.New(\"no CPU features found\")\n\t}\n\tin = in[i+len(features):]\n\tif i := strings.Index(in, \"\\n\"); i != -1 {\n\t\tin = in[:i]\n\t}\n\tm := map[string]*bool{}\n\n\tinitOptions() // need it early here; it's harmless to call twice\n\tfor _, o := range options {\n\t\tm[o.Name] = o.Feature\n\t}\n\t// The EVTSTRM field has alias \"evstrm\" in Go, but Linux calls it \"evtstrm\".\n\tm[\"evtstrm\"] = &ARM64.HasEVTSTRM\n\n\tfor _, f := range strings.Fields(in) {\n\t\tif p, ok := m[f]; ok {\n\t\t\t*p = true\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/runtime_auxv.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage cpu\n\n// getAuxvFn is non-nil on Go 1.21+ (via runtime_auxv_go121.go init)\n// on platforms that use auxv.\nvar getAuxvFn func() []uintptr\n\nfunc getAuxv() []uintptr {\n\tif getAuxvFn == nil {\n\t\treturn nil\n\t}\n\treturn getAuxvFn()\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/runtime_auxv_go121.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build go1.21\n\npackage cpu\n\nimport (\n\t_ \"unsafe\" // for linkname\n)\n\n//go:linkname runtime_getAuxv runtime.getAuxv\nfunc runtime_getAuxv() []uintptr\n\nfunc init() {\n\tgetAuxvFn = runtime_getAuxv\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Recreate a getsystemcfg syscall handler instead of\n// using the one provided by x/sys/unix to avoid having\n// the dependency between them. (See golang.org/issue/32102)\n// Moreover, this file will be used during the building of\n// gccgo's libgo and thus must not used a CGo method.\n\n//go:build aix && gccgo\n\npackage cpu\n\nimport (\n\t\"syscall\"\n)\n\n//extern getsystemcfg\nfunc gccgoGetsystemcfg(label uint32) (r uint64)\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 syscall.Errno) {\n\tr1 = uintptr(gccgoGetsystemcfg(uint32(label)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/syscall_aix_ppc64_gc.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Minimal copy of x/sys/unix so the cpu package can make a\n// system call on AIX without depending on x/sys/unix.\n// (See golang.org/issue/32102)\n\n//go:build aix && ppc64 && gc\n\npackage cpu\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg \"libc.a/shr_64.o\"\n\n//go:linkname libc_getsystemcfg libc_getsystemcfg\n\ntype syscallFunc uintptr\n\nvar libc_getsystemcfg syscallFunc\n\ntype errno = syscall.Errno\n\n// Implemented in runtime/syscall_aix.go.\nfunc rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno)\nfunc syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err errno)\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/cpu/syscall_darwin_x86_gc.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Minimal copy of x/sys/unix so the cpu package can make a\n// system call on Darwin without depending on x/sys/unix.\n\n//go:build darwin && amd64 && gc\n\npackage cpu\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\ntype _C_int int32\n\n// adapted from unix.Uname() at x/sys/unix/syscall_darwin.go L419\nfunc darwinOSRelease(release *[256]byte) error {\n\t// from x/sys/unix/zerrors_openbsd_amd64.go\n\tconst (\n\t\tCTL_KERN       = 0x1\n\t\tKERN_OSRELEASE = 0x2\n\t)\n\n\tmib := []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn := unsafe.Sizeof(*release)\n\n\treturn sysctl(mib, &release[0], &n, nil, 0)\n}\n\ntype Errno = syscall.Errno\n\nvar _zero uintptr // Single-word zero for use when we need a valid pointer to 0 bytes.\n\n// from x/sys/unix/zsyscall_darwin_amd64.go L791-807\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tif _, _, err := syscall_syscall6(\n\t\tlibc_sysctl_trampoline_addr,\n\t\tuintptr(_p0),\n\t\tuintptr(len(mib)),\n\t\tuintptr(unsafe.Pointer(old)),\n\t\tuintptr(unsafe.Pointer(oldlen)),\n\t\tuintptr(unsafe.Pointer(new)),\n\t\tuintptr(newlen),\n\t); err != 0 {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n// adapted from internal/cpu/cpu_arm64_darwin.go\nfunc darwinSysctlEnabled(name []byte) bool {\n\tout := int32(0)\n\tnout := unsafe.Sizeof(out)\n\tif ret := sysctlbyname(&name[0], (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); ret != nil {\n\t\treturn false\n\t}\n\treturn out > 0\n}\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"/usr/lib/libSystem.B.dylib\"\n\nvar libc_sysctlbyname_trampoline_addr uintptr\n\n// adapted from runtime/sys_darwin.go in the pattern of sysctl() above, as defined in x/sys/unix\nfunc sysctlbyname(name *byte, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error {\n\tif _, _, err := syscall_syscall6(\n\t\tlibc_sysctlbyname_trampoline_addr,\n\t\tuintptr(unsafe.Pointer(name)),\n\t\tuintptr(unsafe.Pointer(old)),\n\t\tuintptr(unsafe.Pointer(oldlen)),\n\t\tuintptr(unsafe.Pointer(new)),\n\t\tuintptr(newlen),\n\t\t0,\n\t); err != 0 {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n//go:cgo_import_dynamic libc_sysctlbyname sysctlbyname \"/usr/lib/libSystem.B.dylib\"\n\n// Implemented in the runtime package (runtime/sys_darwin.go)\nfunc syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n//go:linkname syscall_syscall6 syscall.syscall6\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/asm.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n\nTEXT ·use(SB),NOSPLIT,$0\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/asm_plan9_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n\n//\n// System call support for 386, Plan 9\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-32\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-44\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·seek(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·seek(SB)\n\nTEXT ·exit(SB),NOSPLIT,$4-4\n\tJMP\tsyscall·exit(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n\n//\n// System call support for amd64, Plan 9\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-64\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·seek(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·seek(SB)\n\nTEXT ·exit(SB),NOSPLIT,$8-8\n\tJMP\tsyscall·exit(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/asm_plan9_arm.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"textflag.h\"\n\n// System call support for plan9 on arm\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-32\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-44\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·seek(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·exit(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/const_plan9.go",
    "content": "package plan9\n\n// Plan 9 Constants\n\n// Open modes\nconst (\n\tO_RDONLY  = 0\n\tO_WRONLY  = 1\n\tO_RDWR    = 2\n\tO_TRUNC   = 16\n\tO_CLOEXEC = 32\n\tO_EXCL    = 0x1000\n)\n\n// Rfork flags\nconst (\n\tRFNAMEG  = 1 << 0\n\tRFENVG   = 1 << 1\n\tRFFDG    = 1 << 2\n\tRFNOTEG  = 1 << 3\n\tRFPROC   = 1 << 4\n\tRFMEM    = 1 << 5\n\tRFNOWAIT = 1 << 6\n\tRFCNAMEG = 1 << 10\n\tRFCENVG  = 1 << 11\n\tRFCFDG   = 1 << 12\n\tRFREND   = 1 << 13\n\tRFNOMNT  = 1 << 14\n)\n\n// Qid.Type bits\nconst (\n\tQTDIR    = 0x80\n\tQTAPPEND = 0x40\n\tQTEXCL   = 0x20\n\tQTMOUNT  = 0x10\n\tQTAUTH   = 0x08\n\tQTTMP    = 0x04\n\tQTFILE   = 0x00\n)\n\n// Dir.Mode bits\nconst (\n\tDMDIR    = 0x80000000\n\tDMAPPEND = 0x40000000\n\tDMEXCL   = 0x20000000\n\tDMMOUNT  = 0x10000000\n\tDMAUTH   = 0x08000000\n\tDMTMP    = 0x04000000\n\tDMREAD   = 0x4\n\tDMWRITE  = 0x2\n\tDMEXEC   = 0x1\n)\n\nconst (\n\tSTATMAX    = 65535\n\tERRMAX     = 128\n\tSTATFIXLEN = 49\n)\n\n// Mount and bind flags\nconst (\n\tMREPL   = 0x0000\n\tMBEFORE = 0x0001\n\tMAFTER  = 0x0002\n\tMORDER  = 0x0003\n\tMCREATE = 0x0004\n\tMCACHE  = 0x0010\n\tMMASK   = 0x0017\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/dir_plan9.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Plan 9 directory marshalling. See intro(5).\n\npackage plan9\n\nimport \"errors\"\n\nvar (\n\tErrShortStat = errors.New(\"stat buffer too short\")\n\tErrBadStat   = errors.New(\"malformed stat buffer\")\n\tErrBadName   = errors.New(\"bad character in file name\")\n)\n\n// A Qid represents a 9P server's unique identification for a file.\ntype Qid struct {\n\tPath uint64 // the file server's unique identification for the file\n\tVers uint32 // version number for given Path\n\tType uint8  // the type of the file (plan9.QTDIR for example)\n}\n\n// A Dir contains the metadata for a file.\ntype Dir struct {\n\t// system-modified data\n\tType uint16 // server type\n\tDev  uint32 // server subtype\n\n\t// file data\n\tQid    Qid    // unique id from server\n\tMode   uint32 // permissions\n\tAtime  uint32 // last read time\n\tMtime  uint32 // last write time\n\tLength int64  // file length\n\tName   string // last element of path\n\tUid    string // owner name\n\tGid    string // group name\n\tMuid   string // last modifier name\n}\n\nvar nullDir = Dir{\n\tType: ^uint16(0),\n\tDev:  ^uint32(0),\n\tQid: Qid{\n\t\tPath: ^uint64(0),\n\t\tVers: ^uint32(0),\n\t\tType: ^uint8(0),\n\t},\n\tMode:   ^uint32(0),\n\tAtime:  ^uint32(0),\n\tMtime:  ^uint32(0),\n\tLength: ^int64(0),\n}\n\n// Null assigns special \"don't touch\" values to members of d to\n// avoid modifying them during plan9.Wstat.\nfunc (d *Dir) Null() { *d = nullDir }\n\n// Marshal encodes a 9P stat message corresponding to d into b\n//\n// If there isn't enough space in b for a stat message, ErrShortStat is returned.\nfunc (d *Dir) Marshal(b []byte) (n int, err error) {\n\tn = STATFIXLEN + len(d.Name) + len(d.Uid) + len(d.Gid) + len(d.Muid)\n\tif n > len(b) {\n\t\treturn n, ErrShortStat\n\t}\n\n\tfor _, c := range d.Name {\n\t\tif c == '/' {\n\t\t\treturn n, ErrBadName\n\t\t}\n\t}\n\n\tb = pbit16(b, uint16(n)-2)\n\tb = pbit16(b, d.Type)\n\tb = pbit32(b, d.Dev)\n\tb = pbit8(b, d.Qid.Type)\n\tb = pbit32(b, d.Qid.Vers)\n\tb = pbit64(b, d.Qid.Path)\n\tb = pbit32(b, d.Mode)\n\tb = pbit32(b, d.Atime)\n\tb = pbit32(b, d.Mtime)\n\tb = pbit64(b, uint64(d.Length))\n\tb = pstring(b, d.Name)\n\tb = pstring(b, d.Uid)\n\tb = pstring(b, d.Gid)\n\tb = pstring(b, d.Muid)\n\n\treturn n, nil\n}\n\n// UnmarshalDir decodes a single 9P stat message from b and returns the resulting Dir.\n//\n// If b is too small to hold a valid stat message, ErrShortStat is returned.\n//\n// If the stat message itself is invalid, ErrBadStat is returned.\nfunc UnmarshalDir(b []byte) (*Dir, error) {\n\tif len(b) < STATFIXLEN {\n\t\treturn nil, ErrShortStat\n\t}\n\tsize, buf := gbit16(b)\n\tif len(b) != int(size)+2 {\n\t\treturn nil, ErrBadStat\n\t}\n\tb = buf\n\n\tvar d Dir\n\td.Type, b = gbit16(b)\n\td.Dev, b = gbit32(b)\n\td.Qid.Type, b = gbit8(b)\n\td.Qid.Vers, b = gbit32(b)\n\td.Qid.Path, b = gbit64(b)\n\td.Mode, b = gbit32(b)\n\td.Atime, b = gbit32(b)\n\td.Mtime, b = gbit32(b)\n\n\tn, b := gbit64(b)\n\td.Length = int64(n)\n\n\tvar ok bool\n\tif d.Name, b, ok = gstring(b); !ok {\n\t\treturn nil, ErrBadStat\n\t}\n\tif d.Uid, b, ok = gstring(b); !ok {\n\t\treturn nil, ErrBadStat\n\t}\n\tif d.Gid, b, ok = gstring(b); !ok {\n\t\treturn nil, ErrBadStat\n\t}\n\tif d.Muid, b, ok = gstring(b); !ok {\n\t\treturn nil, ErrBadStat\n\t}\n\n\treturn &d, nil\n}\n\n// pbit8 copies the 8-bit number v to b and returns the remaining slice of b.\nfunc pbit8(b []byte, v uint8) []byte {\n\tb[0] = byte(v)\n\treturn b[1:]\n}\n\n// pbit16 copies the 16-bit number v to b in little-endian order and returns the remaining slice of b.\nfunc pbit16(b []byte, v uint16) []byte {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n\treturn b[2:]\n}\n\n// pbit32 copies the 32-bit number v to b in little-endian order and returns the remaining slice of b.\nfunc pbit32(b []byte, v uint32) []byte {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n\tb[2] = byte(v >> 16)\n\tb[3] = byte(v >> 24)\n\treturn b[4:]\n}\n\n// pbit64 copies the 64-bit number v to b in little-endian order and returns the remaining slice of b.\nfunc pbit64(b []byte, v uint64) []byte {\n\tb[0] = byte(v)\n\tb[1] = byte(v >> 8)\n\tb[2] = byte(v >> 16)\n\tb[3] = byte(v >> 24)\n\tb[4] = byte(v >> 32)\n\tb[5] = byte(v >> 40)\n\tb[6] = byte(v >> 48)\n\tb[7] = byte(v >> 56)\n\treturn b[8:]\n}\n\n// pstring copies the string s to b, prepending it with a 16-bit length in little-endian order, and\n// returning the remaining slice of b..\nfunc pstring(b []byte, s string) []byte {\n\tb = pbit16(b, uint16(len(s)))\n\tn := copy(b, s)\n\treturn b[n:]\n}\n\n// gbit8 reads an 8-bit number from b and returns it with the remaining slice of b.\nfunc gbit8(b []byte) (uint8, []byte) {\n\treturn uint8(b[0]), b[1:]\n}\n\n// gbit16 reads a 16-bit number in little-endian order from b and returns it with the remaining slice of b.\nfunc gbit16(b []byte) (uint16, []byte) {\n\treturn uint16(b[0]) | uint16(b[1])<<8, b[2:]\n}\n\n// gbit32 reads a 32-bit number in little-endian order from b and returns it with the remaining slice of b.\nfunc gbit32(b []byte) (uint32, []byte) {\n\treturn uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24, b[4:]\n}\n\n// gbit64 reads a 64-bit number in little-endian order from b and returns it with the remaining slice of b.\nfunc gbit64(b []byte) (uint64, []byte) {\n\tlo := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\thi := uint32(b[4]) | uint32(b[5])<<8 | uint32(b[6])<<16 | uint32(b[7])<<24\n\treturn uint64(lo) | uint64(hi)<<32, b[8:]\n}\n\n// gstring reads a string from b, prefixed with a 16-bit length in little-endian order.\n// It returns the string with the remaining slice of b and a boolean. If the length is\n// greater than the number of bytes in b, the boolean will be false.\nfunc gstring(b []byte) (string, []byte, bool) {\n\tn, b := gbit16(b)\n\tif int(n) > len(b) {\n\t\treturn \"\", b, false\n\t}\n\treturn string(b[:n]), b[n:], true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/env_plan9.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Plan 9 environment variables.\n\npackage plan9\n\nimport (\n\t\"syscall\"\n)\n\nfunc Getenv(key string) (value string, found bool) {\n\treturn syscall.Getenv(key)\n}\n\nfunc Setenv(key, value string) error {\n\treturn syscall.Setenv(key, value)\n}\n\nfunc Clearenv() {\n\tsyscall.Clearenv()\n}\n\nfunc Environ() []string {\n\treturn syscall.Environ()\n}\n\nfunc Unsetenv(key string) error {\n\treturn syscall.Unsetenv(key)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/errors_plan9.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage plan9\n\nimport \"syscall\"\n\n// Constants\nconst (\n\t// Invented values to support what package os expects.\n\tO_CREAT    = 0x02000\n\tO_APPEND   = 0x00400\n\tO_NOCTTY   = 0x00000\n\tO_NONBLOCK = 0x00000\n\tO_SYNC     = 0x00000\n\tO_ASYNC    = 0x00000\n\n\tS_IFMT   = 0x1f000\n\tS_IFIFO  = 0x1000\n\tS_IFCHR  = 0x2000\n\tS_IFDIR  = 0x4000\n\tS_IFBLK  = 0x6000\n\tS_IFREG  = 0x8000\n\tS_IFLNK  = 0xa000\n\tS_IFSOCK = 0xc000\n)\n\n// Errors\nvar (\n\tEINVAL       = syscall.NewError(\"bad arg in system call\")\n\tENOTDIR      = syscall.NewError(\"not a directory\")\n\tEISDIR       = syscall.NewError(\"file is a directory\")\n\tENOENT       = syscall.NewError(\"file does not exist\")\n\tEEXIST       = syscall.NewError(\"file already exists\")\n\tEMFILE       = syscall.NewError(\"no free file descriptors\")\n\tEIO          = syscall.NewError(\"i/o error\")\n\tENAMETOOLONG = syscall.NewError(\"file name too long\")\n\tEINTR        = syscall.NewError(\"interrupted\")\n\tEPERM        = syscall.NewError(\"permission denied\")\n\tEBUSY        = syscall.NewError(\"no free devices\")\n\tETIMEDOUT    = syscall.NewError(\"connection timed out\")\n\tEPLAN9       = syscall.NewError(\"not supported by plan 9\")\n\n\t// The following errors do not correspond to any\n\t// Plan 9 system messages. Invented to support\n\t// what package os and others expect.\n\tEACCES       = syscall.NewError(\"access permission denied\")\n\tEAFNOSUPPORT = syscall.NewError(\"address family not supported by protocol\")\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/mkall.sh",
    "content": "#!/usr/bin/env bash\n# Copyright 2009 The Go Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style\n# license that can be found in the LICENSE file.\n\n# The plan9 package provides access to the raw system call\n# interface of the underlying operating system.  Porting Go to\n# a new architecture/operating system combination requires\n# some manual effort, though there are tools that automate\n# much of the process.  The auto-generated files have names\n# beginning with z.\n#\n# This script runs or (given -n) prints suggested commands to generate z files\n# for the current system.  Running those commands is not automatic.\n# This script is documentation more than anything else.\n#\n# * asm_${GOOS}_${GOARCH}.s\n#\n# This hand-written assembly file implements system call dispatch.\n# There are three entry points:\n#\n# \tfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr);\n# \tfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);\n# \tfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr);\n#\n# The first and second are the standard ones; they differ only in\n# how many arguments can be passed to the kernel.\n# The third is for low-level use by the ForkExec wrapper;\n# unlike the first two, it does not call into the scheduler to\n# let it know that a system call is running.\n#\n# * syscall_${GOOS}.go\n#\n# This hand-written Go file implements system calls that need\n# special handling and lists \"//sys\" comments giving prototypes\n# for ones that can be auto-generated.  Mksyscall reads those\n# comments to generate the stubs.\n#\n# * syscall_${GOOS}_${GOARCH}.go\n#\n# Same as syscall_${GOOS}.go except that it contains code specific\n# to ${GOOS} on one particular architecture.\n#\n# * types_${GOOS}.c\n#\n# This hand-written C file includes standard C headers and then\n# creates typedef or enum names beginning with a dollar sign\n# (use of $ in variable names is a gcc extension).  The hardest\n# part about preparing this file is figuring out which headers to\n# include and which symbols need to be #defined to get the\n# actual data structures that pass through to the kernel system calls.\n# Some C libraries present alternate versions for binary compatibility\n# and translate them on the way in and out of system calls, but\n# there is almost always a #define that can get the real ones.\n# See types_darwin.c and types_linux.c for examples.\n#\n# * zerror_${GOOS}_${GOARCH}.go\n#\n# This machine-generated file defines the system's error numbers,\n# error strings, and signal numbers.  The generator is \"mkerrors.sh\".\n# Usually no arguments are needed, but mkerrors.sh will pass its\n# arguments on to godefs.\n#\n# * zsyscall_${GOOS}_${GOARCH}.go\n#\n# Generated by mksyscall.pl; see syscall_${GOOS}.go above.\n#\n# * zsysnum_${GOOS}_${GOARCH}.go\n#\n# Generated by mksysnum_${GOOS}.\n#\n# * ztypes_${GOOS}_${GOARCH}.go\n#\n# Generated by godefs; see types_${GOOS}.c above.\n\nGOOSARCH=\"${GOOS}_${GOARCH}\"\n\n# defaults\nmksyscall=\"go run mksyscall.go\"\nmkerrors=\"./mkerrors.sh\"\nzerrors=\"zerrors_$GOOSARCH.go\"\nmksysctl=\"\"\nzsysctl=\"zsysctl_$GOOSARCH.go\"\nmksysnum=\nmktypes=\nrun=\"sh\"\n\ncase \"$1\" in\n-syscalls)\n\tfor i in zsyscall*go\n\tdo\n\t\tsed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i\n\t\trm _$i\n\tdone\n\texit 0\n\t;;\n-n)\n\trun=\"cat\"\n\tshift\nesac\n\ncase \"$#\" in\n0)\n\t;;\n*)\n\techo 'usage: mkall.sh [-n]' 1>&2\n\texit 2\nesac\n\ncase \"$GOOSARCH\" in\n_* | *_ | _)\n\techo 'undefined $GOOS_$GOARCH:' \"$GOOSARCH\" 1>&2\n\texit 1\n\t;;\nplan9_386)\n\tmkerrors=\n\tmksyscall=\"go run mksyscall.go -l32 -plan9 -tags plan9,386\"\n\tmksysnum=\"./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h\"\n\tmktypes=\"XXX\"\n\t;;\nplan9_amd64)\n\tmkerrors=\n\tmksyscall=\"go run mksyscall.go -l32 -plan9 -tags plan9,amd64\"\n\tmksysnum=\"./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h\"\n\tmktypes=\"XXX\"\n\t;;\nplan9_arm)\n\tmkerrors=\n\tmksyscall=\"go run mksyscall.go -l32 -plan9 -tags plan9,arm\"\n\tmksysnum=\"./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h\"\n\tmktypes=\"XXX\"\n\t;;\n*)\n\techo 'unrecognized $GOOS_$GOARCH: ' \"$GOOSARCH\" 1>&2\n\texit 1\n\t;;\nesac\n\n(\n\tif [ -n \"$mkerrors\" ]; then echo \"$mkerrors |gofmt >$zerrors\"; fi\n\tcase \"$GOOS\" in\n\tplan9)\n\t\tsyscall_goos=\"syscall_$GOOS.go\"\n\t\tif [ -n \"$mksyscall\" ]; then echo \"$mksyscall $syscall_goos |gofmt >zsyscall_$GOOSARCH.go\"; fi\n\t\t;;\n\tesac\n\tif [ -n \"$mksysctl\" ]; then echo \"$mksysctl |gofmt >$zsysctl\"; fi\n\tif [ -n \"$mksysnum\" ]; then echo \"$mksysnum |gofmt >zsysnum_$GOOSARCH.go\"; fi\n\tif [ -n \"$mktypes\" ]; then echo \"$mktypes types_$GOOS.go |gofmt >ztypes_$GOOSARCH.go\"; fi\n) | $run\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/mkerrors.sh",
    "content": "#!/usr/bin/env bash\n# Copyright 2009 The Go Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style\n# license that can be found in the LICENSE file.\n\n# Generate Go code listing errors and other #defined constant\n# values (ENAMETOOLONG etc.), by asking the preprocessor\n# about the definitions.\n\nunset LANG\nexport LC_ALL=C\nexport LC_CTYPE=C\n\nCC=${CC:-gcc}\n\nuname=$(uname)\n\nincludes='\n#include <sys/types.h>\n#include <sys/file.h>\n#include <fcntl.h>\n#include <dirent.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <netinet/ip.h>\n#include <netinet/ip6.h>\n#include <netinet/tcp.h>\n#include <errno.h>\n#include <sys/signal.h>\n#include <signal.h>\n#include <sys/resource.h>\n'\n\nccflags=\"$@\"\n\n# Write go tool cgo -godefs input.\n(\n\techo package plan9\n\techo\n\techo '/*'\n\tindirect=\"includes_$(uname)\"\n\techo \"${!indirect} $includes\"\n\techo '*/'\n\techo 'import \"C\"'\n\techo\n\techo 'const ('\n\n\t# The gcc command line prints all the #defines\n\t# it encounters while processing the input\n\techo \"${!indirect} $includes\" | $CC -x c - -E -dM $ccflags |\n\tawk '\n\t\t$1 != \"#define\" || $2 ~ /\\(/ || $3 == \"\" {next}\n\n\t\t$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next}  # 386 registers\n\t\t$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}\n\t\t$2 ~ /^(SCM_SRCRT)$/ {next}\n\t\t$2 ~ /^(MAP_FAILED)$/ {next}\n\n\t\t$2 !~ /^ETH_/ &&\n\t\t$2 !~ /^EPROC_/ &&\n\t\t$2 !~ /^EQUIV_/ &&\n\t\t$2 !~ /^EXPR_/ &&\n\t\t$2 ~ /^E[A-Z0-9_]+$/ ||\n\t\t$2 ~ /^B[0-9_]+$/ ||\n\t\t$2 ~ /^V[A-Z0-9]+$/ ||\n\t\t$2 ~ /^CS[A-Z0-9]/ ||\n\t\t$2 ~ /^I(SIG|CANON|CRNL|EXTEN|MAXBEL|STRIP|UTF8)$/ ||\n\t\t$2 ~ /^IGN/ ||\n\t\t$2 ~ /^IX(ON|ANY|OFF)$/ ||\n\t\t$2 ~ /^IN(LCR|PCK)$/ ||\n\t\t$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||\n\t\t$2 ~ /^C(LOCAL|READ)$/ ||\n\t\t$2 == \"BRKINT\" ||\n\t\t$2 == \"HUPCL\" ||\n\t\t$2 == \"PENDIN\" ||\n\t\t$2 == \"TOSTOP\" ||\n\t\t$2 ~ /^PAR/ ||\n\t\t$2 ~ /^SIG[^_]/ ||\n\t\t$2 ~ /^O[CNPFP][A-Z]+[^_][A-Z]+$/ ||\n\t\t$2 ~ /^IN_/ ||\n\t\t$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||\n\t\t$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||\n\t\t$2 == \"ICMPV6_FILTER\" ||\n\t\t$2 == \"SOMAXCONN\" ||\n\t\t$2 == \"NAME_MAX\" ||\n\t\t$2 == \"IFNAMSIZ\" ||\n\t\t$2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ ||\n\t\t$2 ~ /^SYSCTL_VERS/ ||\n\t\t$2 ~ /^(MS|MNT)_/ ||\n\t\t$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||\n\t\t$2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ ||\n\t\t$2 ~ /^LINUX_REBOOT_CMD_/ ||\n\t\t$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||\n\t\t$2 !~ \"NLA_TYPE_MASK\" &&\n\t\t$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ ||\n\t\t$2 ~ /^SIOC/ ||\n\t\t$2 ~ /^TIOC/ ||\n\t\t$2 !~ \"RTF_BITS\" &&\n\t\t$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||\n\t\t$2 ~ /^BIOC/ ||\n\t\t$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||\n\t\t$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ ||\n\t\t$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||\n\t\t$2 ~ /^CLONE_[A-Z_]+/ ||\n\t\t$2 !~ /^(BPF_TIMEVAL)$/ &&\n\t\t$2 ~ /^(BPF|DLT)_/ ||\n\t\t$2 !~ \"WMESGLEN\" &&\n\t\t$2 ~ /^W[A-Z0-9]+$/ {printf(\"\\t%s = C.%s\\n\", $2, $2)}\n\t\t$2 ~ /^__WCOREFLAG$/ {next}\n\t\t$2 ~ /^__W[A-Z0-9]+$/ {printf(\"\\t%s = C.%s\\n\", substr($2,3), $2)}\n\n\t\t{next}\n\t' | sort\n\n\techo ')'\n) >_const.go\n\n# Pull out the error names for later.\nerrors=$(\n\techo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |\n\tsort\n)\n\n# Pull out the signal names for later.\nsignals=$(\n\techo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |\n\tgrep -v 'SIGSTKSIZE\\|SIGSTKSZ\\|SIGRT' |\n\tsort\n)\n\n# Again, writing regexps to a file.\necho '#include <errno.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^E[A-Z0-9_]+$/ { print \"^\\t\" $2 \"[ \\t]*=\" }' |\n\tsort >_error.grep\necho '#include <signal.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^SIG[A-Z0-9]+$/ { print \"^\\t\" $2 \"[ \\t]*=\" }' |\n\tgrep -v 'SIGSTKSIZE\\|SIGSTKSZ\\|SIGRT' |\n\tsort >_signal.grep\n\necho '// mkerrors.sh' \"$@\"\necho '// Code generated by the command above; DO NOT EDIT.'\necho\ngo tool cgo -godefs -- \"$@\" _const.go >_error.out\ncat _error.out | grep -vf _error.grep | grep -vf _signal.grep\necho\necho '// Errors'\necho 'const ('\ncat _error.out | grep -f _error.grep | sed 's/=\\(.*\\)/= Errno(\\1)/'\necho ')'\n\necho\necho '// Signals'\necho 'const ('\ncat _error.out | grep -f _signal.grep | sed 's/=\\(.*\\)/= Signal(\\1)/'\necho ')'\n\n# Run C program to print error and syscall strings.\n(\n\techo -E \"\n#include <stdio.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <ctype.h>\n#include <string.h>\n#include <signal.h>\n\n#define nelem(x) (sizeof(x)/sizeof((x)[0]))\n\nenum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below\n\nint errors[] = {\n\"\n\tfor i in $errors\n\tdo\n\t\techo -E '\t'$i,\n\tdone\n\n\techo -E \"\n};\n\nint signals[] = {\n\"\n\tfor i in $signals\n\tdo\n\t\techo -E '\t'$i,\n\tdone\n\n\t# Use -E because on some systems bash builtin interprets \\n itself.\n\techo -E '\n};\n\nstatic int\nintcmp(const void *a, const void *b)\n{\n\treturn *(int*)a - *(int*)b;\n}\n\nint\nmain(void)\n{\n\tint i, j, e;\n\tchar buf[1024], *p;\n\n\tprintf(\"\\n\\n// Error table\\n\");\n\tprintf(\"var errors = [...]string {\\n\");\n\tqsort(errors, nelem(errors), sizeof errors[0], intcmp);\n\tfor(i=0; i<nelem(errors); i++) {\n\t\te = errors[i];\n\t\tif(i > 0 && errors[i-1] == e)\n\t\t\tcontinue;\n\t\tstrcpy(buf, strerror(e));\n\t\t// lowercase first letter: Bad -> bad, but STREAM -> STREAM.\n\t\tif(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)\n\t\t\tbuf[0] += a - A;\n\t\tprintf(\"\\t%d: \\\"%s\\\",\\n\", e, buf);\n\t}\n\tprintf(\"}\\n\\n\");\n\t\n\tprintf(\"\\n\\n// Signal table\\n\");\n\tprintf(\"var signals = [...]string {\\n\");\n\tqsort(signals, nelem(signals), sizeof signals[0], intcmp);\n\tfor(i=0; i<nelem(signals); i++) {\n\t\te = signals[i];\n\t\tif(i > 0 && signals[i-1] == e)\n\t\t\tcontinue;\n\t\tstrcpy(buf, strsignal(e));\n\t\t// lowercase first letter: Bad -> bad, but STREAM -> STREAM.\n\t\tif(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)\n\t\t\tbuf[0] += a - A;\n\t\t// cut trailing : number.\n\t\tp = strrchr(buf, \":\"[0]);\n\t\tif(p)\n\t\t\t*p = '\\0';\n\t\tprintf(\"\\t%d: \\\"%s\\\",\\n\", e, buf);\n\t}\n\tprintf(\"}\\n\\n\");\n\n\treturn 0;\n}\n\n'\n) >_errors.c\n\n$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh",
    "content": "#!/bin/sh\n# Copyright 2009 The Go Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style\n# license that can be found in the LICENSE file.\n\nCOMMAND=\"mksysnum_plan9.sh $@\"\n\ncat <<EOF\n// $COMMAND\n// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT\n\npackage plan9\n\nconst(\nEOF\n\nSP='[ \t]' # space or tab\nsed \"s/^#define${SP}\\\\([A-Z0-9_][A-Z0-9_]*\\\\)${SP}${SP}*\\\\([0-9][0-9]*\\\\)/SYS_\\\\1=\\\\2/g\" \\\n\t< $1 | grep -v SYS__\n\ncat <<EOF\n)\nEOF\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build go1.5\n\npackage plan9\n\nimport \"syscall\"\n\nfunc fixwd() {\n\tsyscall.Fixwd()\n}\n\nfunc Getwd() (wd string, err error) {\n\treturn syscall.Getwd()\n}\n\nfunc Chdir(path string) error {\n\treturn syscall.Chdir(path)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/pwd_plan9.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !go1.5\n\npackage plan9\n\nfunc fixwd() {\n}\n\nfunc Getwd() (wd string, err error) {\n\tfd, err := open(\".\", O_RDONLY)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer Close(fd)\n\treturn Fd2path(fd)\n}\n\nfunc Chdir(path string) error {\n\treturn chdir(path)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/race.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build plan9 && race\n\npackage plan9\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\nconst raceenabled = true\n\nfunc raceAcquire(addr unsafe.Pointer) {\n\truntime.RaceAcquire(addr)\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n\truntime.RaceReleaseMerge(addr)\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n\truntime.RaceReadRange(addr, len)\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n\truntime.RaceWriteRange(addr, len)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/race0.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build plan9 && !race\n\npackage plan9\n\nimport (\n\t\"unsafe\"\n)\n\nconst raceenabled = false\n\nfunc raceAcquire(addr unsafe.Pointer) {\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/str.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build plan9\n\npackage plan9\n\nfunc itoa(val int) string { // do it here rather than with fmt to avoid dependency\n\tif val < 0 {\n\t\treturn \"-\" + itoa(-val)\n\t}\n\tvar buf [32]byte // big enough for int64\n\ti := len(buf) - 1\n\tfor val >= 10 {\n\t\tbuf[i] = byte(val%10 + '0')\n\t\ti--\n\t\tval /= 10\n\t}\n\tbuf[i] = byte(val + '0')\n\treturn string(buf[i:])\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/syscall.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build plan9\n\n// Package plan9 contains an interface to the low-level operating system\n// primitives. OS details vary depending on the underlying system, and\n// by default, godoc will display the OS-specific documentation for the current\n// system. If you want godoc to display documentation for another\n// system, set $GOOS and $GOARCH to the desired system. For example, if\n// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS\n// to freebsd and $GOARCH to arm.\n//\n// The primary use of this package is inside other packages that provide a more\n// portable interface to the system, such as \"os\", \"time\" and \"net\".  Use\n// those packages rather than this one if you can.\n//\n// For details of the functions and data types in this package consult\n// the manuals for the appropriate operating system.\n//\n// These calls return err == nil to indicate success; otherwise\n// err represents an operating system error describing the failure and\n// holds a value of type syscall.ErrorString.\npackage plan9 // import \"golang.org/x/sys/plan9\"\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// ByteSliceFromString returns a NUL-terminated slice of bytes\n// containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc ByteSliceFromString(s string) ([]byte, error) {\n\tif strings.IndexByte(s, 0) != -1 {\n\t\treturn nil, EINVAL\n\t}\n\ta := make([]byte, len(s)+1)\n\tcopy(a, s)\n\treturn a, nil\n}\n\n// BytePtrFromString returns a pointer to a NUL-terminated array of\n// bytes containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc BytePtrFromString(s string) (*byte, error) {\n\ta, err := ByteSliceFromString(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &a[0], nil\n}\n\n// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any\n// bytes after the NUL removed.\nfunc ByteSliceToString(s []byte) string {\n\tif i := bytes.IndexByte(s, 0); i != -1 {\n\t\ts = s[:i]\n\t}\n\treturn string(s)\n}\n\n// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.\n// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated\n// at a zero byte; if the zero byte is not present, the program may crash.\nfunc BytePtrToString(p *byte) string {\n\tif p == nil {\n\t\treturn \"\"\n\t}\n\tif *p == 0 {\n\t\treturn \"\"\n\t}\n\n\t// Find NUL terminator.\n\tn := 0\n\tfor ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 1)\n\t}\n\n\treturn string(unsafe.Slice(p, n))\n}\n\n// Single-word zero for use when we need a valid pointer to 0 bytes.\n// See mksyscall.pl.\nvar _zero uintptr\n\nfunc (ts *Timespec) Unix() (sec int64, nsec int64) {\n\treturn int64(ts.Sec), int64(ts.Nsec)\n}\n\nfunc (tv *Timeval) Unix() (sec int64, nsec int64) {\n\treturn int64(tv.Sec), int64(tv.Usec) * 1000\n}\n\nfunc (ts *Timespec) Nano() int64 {\n\treturn int64(ts.Sec)*1e9 + int64(ts.Nsec)\n}\n\nfunc (tv *Timeval) Nano() int64 {\n\treturn int64(tv.Sec)*1e9 + int64(tv.Usec)*1000\n}\n\n// use is a no-op, but the compiler cannot see that it is.\n// Calling use(p) ensures that p is kept live until that point.\n//\n//go:noescape\nfunc use(p unsafe.Pointer)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/syscall_plan9.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Plan 9 system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and\n// wrap it in our own nicer implementation.\n\npackage plan9\n\nimport (\n\t\"bytes\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// A Note is a string describing a process note.\n// It implements the os.Signal interface.\ntype Note string\n\nfunc (n Note) Signal() {}\n\nfunc (n Note) String() string {\n\treturn string(n)\n}\n\nvar (\n\tStdin  = 0\n\tStdout = 1\n\tStderr = 2\n)\n\n// For testing: clients can set this flag to force\n// creation of IPv6 sockets to return EAFNOSUPPORT.\nvar SocketDisableIPv6 bool\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.ErrorString)\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.ErrorString)\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)\n\nfunc atoi(b []byte) (n uint) {\n\tn = 0\n\tfor i := 0; i < len(b); i++ {\n\t\tn = n*10 + uint(b[i]-'0')\n\t}\n\treturn\n}\n\nfunc cstring(s []byte) string {\n\ti := bytes.IndexByte(s, 0)\n\tif i == -1 {\n\t\ti = len(s)\n\t}\n\treturn string(s[:i])\n}\n\nfunc errstr() string {\n\tvar buf [ERRMAX]byte\n\n\tRawSyscall(SYS_ERRSTR, uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)), 0)\n\n\tbuf[len(buf)-1] = 0\n\treturn cstring(buf[:])\n}\n\n// Implemented in assembly to import from runtime.\nfunc exit(code int)\n\nfunc Exit(code int) { exit(code) }\n\nfunc readnum(path string) (uint, error) {\n\tvar b [12]byte\n\n\tfd, e := Open(path, O_RDONLY)\n\tif e != nil {\n\t\treturn 0, e\n\t}\n\tdefer Close(fd)\n\n\tn, e := Pread(fd, b[:], 0)\n\n\tif e != nil {\n\t\treturn 0, e\n\t}\n\n\tm := 0\n\tfor ; m < n && b[m] == ' '; m++ {\n\t}\n\n\treturn atoi(b[m : n-1]), nil\n}\n\nfunc Getpid() (pid int) {\n\tn, _ := readnum(\"#c/pid\")\n\treturn int(n)\n}\n\nfunc Getppid() (ppid int) {\n\tn, _ := readnum(\"#c/ppid\")\n\treturn int(n)\n}\n\nfunc Read(fd int, p []byte) (n int, err error) {\n\treturn Pread(fd, p, -1)\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\treturn Pwrite(fd, p, -1)\n}\n\nvar ioSync int64\n\n//sys\tfd2path(fd int, buf []byte) (err error)\n\nfunc Fd2path(fd int) (path string, err error) {\n\tvar buf [512]byte\n\n\te := fd2path(fd, buf[:])\n\tif e != nil {\n\t\treturn \"\", e\n\t}\n\treturn cstring(buf[:]), nil\n}\n\n//sys\tpipe(p *[2]int32) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn syscall.ErrorString(\"bad arg in system call\")\n\t}\n\tvar pp [2]int32\n\terr = pipe(&pp)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn\n}\n\n// Underlying system call writes to newoffset via pointer.\n// Implemented in assembly to avoid allocation.\nfunc seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, e := seek(0, fd, offset, whence)\n\n\tif newoffset == -1 {\n\t\terr = syscall.ErrorString(e)\n\t}\n\treturn\n}\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tfd, err := Create(path, O_RDONLY, DMDIR|mode)\n\n\tif fd != -1 {\n\t\tClose(fd)\n\t}\n\n\treturn\n}\n\ntype Waitmsg struct {\n\tPid  int\n\tTime [3]uint32\n\tMsg  string\n}\n\nfunc (w Waitmsg) Exited() bool   { return true }\nfunc (w Waitmsg) Signaled() bool { return false }\n\nfunc (w Waitmsg) ExitStatus() int {\n\tif len(w.Msg) == 0 {\n\t\t// a normal exit returns no message\n\t\treturn 0\n\t}\n\treturn 1\n}\n\n//sys\tawait(s []byte) (n int, err error)\n\nfunc Await(w *Waitmsg) (err error) {\n\tvar buf [512]byte\n\tvar f [5][]byte\n\n\tn, err := await(buf[:])\n\n\tif err != nil || w == nil {\n\t\treturn\n\t}\n\n\tnf := 0\n\tp := 0\n\tfor i := 0; i < n && nf < len(f)-1; i++ {\n\t\tif buf[i] == ' ' {\n\t\t\tf[nf] = buf[p:i]\n\t\t\tp = i + 1\n\t\t\tnf++\n\t\t}\n\t}\n\tf[nf] = buf[p:]\n\tnf++\n\n\tif nf != len(f) {\n\t\treturn syscall.ErrorString(\"invalid wait message\")\n\t}\n\tw.Pid = int(atoi(f[0]))\n\tw.Time[0] = uint32(atoi(f[1]))\n\tw.Time[1] = uint32(atoi(f[2]))\n\tw.Time[2] = uint32(atoi(f[3]))\n\tw.Msg = cstring(f[4])\n\tif w.Msg == \"''\" {\n\t\t// await() returns '' for no error\n\t\tw.Msg = \"\"\n\t}\n\treturn\n}\n\nfunc Unmount(name, old string) (err error) {\n\tfixwd()\n\toldp, err := BytePtrFromString(old)\n\tif err != nil {\n\t\treturn err\n\t}\n\toldptr := uintptr(unsafe.Pointer(oldp))\n\n\tvar r0 uintptr\n\tvar e syscall.ErrorString\n\n\t// bind(2) man page: If name is zero, everything bound or mounted upon old is unbound or unmounted.\n\tif name == \"\" {\n\t\tr0, _, e = Syscall(SYS_UNMOUNT, _zero, oldptr, 0)\n\t} else {\n\t\tnamep, err := BytePtrFromString(name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr0, _, e = Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(namep)), oldptr, 0)\n\t}\n\n\tif int32(r0) == -1 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Fchdir(fd int) (err error) {\n\tpath, err := Fd2path(fd)\n\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn Chdir(path)\n}\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\nfunc NsecToTimeval(nsec int64) (tv Timeval) {\n\tnsec += 999 // round up to microsecond\n\ttv.Usec = int32(nsec % 1e9 / 1e3)\n\ttv.Sec = int32(nsec / 1e9)\n\treturn\n}\n\nfunc nsec() int64 {\n\tvar scratch int64\n\n\tr0, _, _ := Syscall(SYS_NSEC, uintptr(unsafe.Pointer(&scratch)), 0, 0)\n\t// TODO(aram): remove hack after I fix _nsec in the pc64 kernel.\n\tif r0 == 0 {\n\t\treturn scratch\n\t}\n\treturn int64(r0)\n}\n\nfunc Gettimeofday(tv *Timeval) error {\n\tnsec := nsec()\n\t*tv = NsecToTimeval(nsec)\n\treturn nil\n}\n\nfunc Getpagesize() int { return 0x1000 }\n\nfunc Getegid() (egid int) { return -1 }\nfunc Geteuid() (euid int) { return -1 }\nfunc Getgid() (gid int)   { return -1 }\nfunc Getuid() (uid int)   { return -1 }\n\nfunc Getgroups() (gids []int, err error) {\n\treturn make([]int, 0), nil\n}\n\n//sys\topen(path string, mode int) (fd int, err error)\n\nfunc Open(path string, mode int) (fd int, err error) {\n\tfixwd()\n\treturn open(path, mode)\n}\n\n//sys\tcreate(path string, mode int, perm uint32) (fd int, err error)\n\nfunc Create(path string, mode int, perm uint32) (fd int, err error) {\n\tfixwd()\n\treturn create(path, mode, perm)\n}\n\n//sys\tremove(path string) (err error)\n\nfunc Remove(path string) error {\n\tfixwd()\n\treturn remove(path)\n}\n\n//sys\tstat(path string, edir []byte) (n int, err error)\n\nfunc Stat(path string, edir []byte) (n int, err error) {\n\tfixwd()\n\treturn stat(path, edir)\n}\n\n//sys\tbind(name string, old string, flag int) (err error)\n\nfunc Bind(name string, old string, flag int) (err error) {\n\tfixwd()\n\treturn bind(name, old, flag)\n}\n\n//sys\tmount(fd int, afd int, old string, flag int, aname string) (err error)\n\nfunc Mount(fd int, afd int, old string, flag int, aname string) (err error) {\n\tfixwd()\n\treturn mount(fd, afd, old, flag, aname)\n}\n\n//sys\twstat(path string, edir []byte) (err error)\n\nfunc Wstat(path string, edir []byte) (err error) {\n\tfixwd()\n\treturn wstat(path, edir)\n}\n\n//sys\tchdir(path string) (err error)\n//sys\tDup(oldfd int, newfd int) (fd int, err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tClose(fd int) (err error)\n//sys\tFstat(fd int, edir []byte) (n int, err error)\n//sys\tFwstat(fd int, edir []byte) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go",
    "content": "// go run mksyscall.go -l32 -plan9 -tags plan9,386 syscall_plan9.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build plan9 && 386\n\npackage plan9\n\nimport \"unsafe\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fd2path(fd int, buf []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]int32) (err error) {\n\tr0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc await(s []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(s) > 0 {\n\t\t_p0 = unsafe.Pointer(&s[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc open(path string, mode int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc create(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc remove(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, edir []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p1 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(name string, old string, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(old)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(fd int, afd int, old string, flag int, aname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(old)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(aname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wstat(path string, edir []byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p1 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int, newfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0)\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\tr0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, edir []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p0 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fwstat(fd int, edir []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p0 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go",
    "content": "// go run mksyscall.go -l32 -plan9 -tags plan9,amd64 syscall_plan9.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build plan9 && amd64\n\npackage plan9\n\nimport \"unsafe\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fd2path(fd int, buf []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]int32) (err error) {\n\tr0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc await(s []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(s) > 0 {\n\t\t_p0 = unsafe.Pointer(&s[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc open(path string, mode int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc create(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc remove(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, edir []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p1 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(name string, old string, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(old)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(fd int, afd int, old string, flag int, aname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(old)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(aname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wstat(path string, edir []byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p1 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int, newfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0)\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\tr0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, edir []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p0 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fwstat(fd int, edir []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p0 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go",
    "content": "// go run mksyscall.go -l32 -plan9 -tags plan9,arm syscall_plan9.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build plan9 && arm\n\npackage plan9\n\nimport \"unsafe\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fd2path(fd int, buf []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]int32) (err error) {\n\tr0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc await(s []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(s) > 0 {\n\t\t_p0 = unsafe.Pointer(&s[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc open(path string, mode int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc create(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc remove(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, edir []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p1 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(name string, old string, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(old)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(fd int, afd int, old string, flag int, aname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(old)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(aname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wstat(path string, edir []byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p1 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int, newfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0)\n\tfd = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\tr0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, edir []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p0 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))\n\tn = int(r0)\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fwstat(fd int, edir []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(edir) > 0 {\n\t\t_p0 = unsafe.Pointer(&edir[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))\n\tif int32(r0) == -1 {\n\t\terr = e1\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/plan9/zsysnum_plan9.go",
    "content": "// mksysnum_plan9.sh /opt/plan9/sys/src/libc/9syscall/sys.h\n// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT\n\npackage plan9\n\nconst (\n\tSYS_SYSR1       = 0\n\tSYS_BIND        = 2\n\tSYS_CHDIR       = 3\n\tSYS_CLOSE       = 4\n\tSYS_DUP         = 5\n\tSYS_ALARM       = 6\n\tSYS_EXEC        = 7\n\tSYS_EXITS       = 8\n\tSYS_FAUTH       = 10\n\tSYS_SEGBRK      = 12\n\tSYS_OPEN        = 14\n\tSYS_OSEEK       = 16\n\tSYS_SLEEP       = 17\n\tSYS_RFORK       = 19\n\tSYS_PIPE        = 21\n\tSYS_CREATE      = 22\n\tSYS_FD2PATH     = 23\n\tSYS_BRK_        = 24\n\tSYS_REMOVE      = 25\n\tSYS_NOTIFY      = 28\n\tSYS_NOTED       = 29\n\tSYS_SEGATTACH   = 30\n\tSYS_SEGDETACH   = 31\n\tSYS_SEGFREE     = 32\n\tSYS_SEGFLUSH    = 33\n\tSYS_RENDEZVOUS  = 34\n\tSYS_UNMOUNT     = 35\n\tSYS_SEMACQUIRE  = 37\n\tSYS_SEMRELEASE  = 38\n\tSYS_SEEK        = 39\n\tSYS_FVERSION    = 40\n\tSYS_ERRSTR      = 41\n\tSYS_STAT        = 42\n\tSYS_FSTAT       = 43\n\tSYS_WSTAT       = 44\n\tSYS_FWSTAT      = 45\n\tSYS_MOUNT       = 46\n\tSYS_AWAIT       = 47\n\tSYS_PREAD       = 50\n\tSYS_PWRITE      = 51\n\tSYS_TSEMACQUIRE = 52\n\tSYS_NSEC        = 53\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/.gitignore",
    "content": "_obj/\nunix.test\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/README.md",
    "content": "# Building `sys/unix`\n\nThe sys/unix package provides access to the raw system call interface of the\nunderlying operating system. See: https://godoc.org/golang.org/x/sys/unix\n\nPorting Go to a new architecture/OS combination or adding syscalls, types, or\nconstants to an existing architecture/OS pair requires some manual effort;\nhowever, there are tools that automate much of the process.\n\n## Build Systems\n\nThere are currently two ways we generate the necessary files. We are currently\nmigrating the build system to use containers so the builds are reproducible.\nThis is being done on an OS-by-OS basis. Please update this documentation as\ncomponents of the build system change.\n\n### Old Build System (currently for `GOOS != \"linux\"`)\n\nThe old build system generates the Go files based on the C header files\npresent on your system. This means that files\nfor a given GOOS/GOARCH pair must be generated on a system with that OS and\narchitecture. This also means that the generated code can differ from system\nto system, based on differences in the header files.\n\nTo avoid this, if you are using the old build system, only generate the Go\nfiles on an installation with unmodified header files. It is also important to\nkeep track of which version of the OS the files were generated from (ex.\nDarwin 14 vs Darwin 15). This makes it easier to track the progress of changes\nand have each OS upgrade correspond to a single change.\n\nTo build the files for your current OS and architecture, make sure GOOS and\nGOARCH are set correctly and run `mkall.sh`. This will generate the files for\nyour specific system. Running `mkall.sh -n` shows the commands that will be run.\n\nRequirements: bash, go\n\n### New Build System (currently for `GOOS == \"linux\"`)\n\nThe new build system uses a Docker container to generate the go files directly\nfrom source checkouts of the kernel and various system libraries. This means\nthat on any platform that supports Docker, all the files using the new build\nsystem can be generated at once, and generated files will not change based on\nwhat the person running the scripts has installed on their computer.\n\nThe OS specific files for the new build system are located in the `${GOOS}`\ndirectory, and the build is coordinated by the `${GOOS}/mkall.go` program. When\nthe kernel or system library updates, modify the Dockerfile at\n`${GOOS}/Dockerfile` to checkout the new release of the source.\n\nTo build all the files under the new build system, you must be on an amd64/Linux\nsystem and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will\nthen generate all of the files for all of the GOOS/GOARCH pairs in the new build\nsystem. Running `mkall.sh -n` shows the commands that will be run.\n\nRequirements: bash, go, docker\n\n## Component files\n\nThis section describes the various files used in the code generation process.\nIt also contains instructions on how to modify these files to add a new\narchitecture/OS or to add additional syscalls, types, or constants. Note that\nif you are using the new build system, the scripts/programs cannot be called normally.\nThey must be called from within the docker container.\n\n### asm files\n\nThe hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system\ncall dispatch. There are three entry points:\n```\n  func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)\n  func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)\n  func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)\n```\nThe first and second are the standard ones; they differ only in how many\narguments can be passed to the kernel. The third is for low-level use by the\nForkExec wrapper. Unlike the first two, it does not call into the scheduler to\nlet it know that a system call is running.\n\nWhen porting Go to a new architecture/OS, this file must be implemented for\neach GOOS/GOARCH pair.\n\n### mksysnum\n\nMksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go`\nfor the old system). This program takes in a list of header files containing the\nsyscall number declarations and parses them to produce the corresponding list of\nGo numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated\nconstants.\n\nAdding new syscall numbers is mostly done by running the build on a sufficiently\nnew installation of the target OS (or updating the source checkouts for the\nnew build system). However, depending on the OS, you may need to update the\nparsing in mksysnum.\n\n### mksyscall.go\n\nThe `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are\nhand-written Go files which implement system calls (for unix, the specific OS,\nor the specific OS/Architecture pair respectively) that need special handling\nand list `//sys` comments giving prototypes for ones that can be generated.\n\nThe mksyscall.go program takes the `//sys` and `//sysnb` comments and converts\nthem into syscalls. This requires the name of the prototype in the comment to\nmatch a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function\nprototype can be exported (capitalized) or not.\n\nAdding a new syscall often just requires adding a new `//sys` function prototype\nwith the desired arguments and a capitalized name so it is exported. However, if\nyou want the interface to the syscall to be different, often one will make an\nunexported `//sys` prototype, and then write a custom wrapper in\n`syscall_${GOOS}.go`.\n\n### types files\n\nFor each OS, there is a hand-written Go file at `${GOOS}/types.go` (or\n`types_${GOOS}.go` on the old system). This file includes standard C headers and\ncreates Go type aliases to the corresponding C types. The file is then fed\nthrough godef to get the Go compatible definitions. Finally, the generated code\nis fed though mkpost.go to format the code correctly and remove any hidden or\nprivate identifiers. This cleaned-up code is written to\n`ztypes_${GOOS}_${GOARCH}.go`.\n\nThe hardest part about preparing this file is figuring out which headers to\ninclude and which symbols need to be `#define`d to get the actual data\nstructures that pass through to the kernel system calls. Some C libraries\npreset alternate versions for binary compatibility and translate them on the\nway in and out of system calls, but there is almost always a `#define` that can\nget the real ones.\nSee `types_darwin.go` and `linux/types.go` for examples.\n\nTo add a new type, add in the necessary include statement at the top of the\nfile (if it is not already there) and add in a type alias line. Note that if\nyour type is significantly different on different architectures, you may need\nsome `#if/#elif` macros in your include statements.\n\n### mkerrors.sh\n\nThis script is used to generate the system's various constants. This doesn't\njust include the error numbers and error strings, but also the signal numbers\nand a wide variety of miscellaneous constants. The constants come from the list\nof include files in the `includes_${uname}` variable. A regex then picks out\nthe desired `#define` statements, and generates the corresponding Go constants.\nThe error numbers and strings are generated from `#include <errno.h>`, and the\nsignal numbers and strings are generated from `#include <signal.h>`. All of\nthese constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program,\n`_errors.c`, which prints out all the constants.\n\nTo add a constant, add the header that includes it to the appropriate variable.\nThen, edit the regex (if necessary) to match the desired constant. Avoid making\nthe regex too broad to avoid matching unintended constants.\n\n### internal/mkmerge\n\nThis program is used to extract duplicate const, func, and type declarations\nfrom the generated architecture-specific files listed below, and merge these\ninto a common file for each OS.\n\nThe merge is performed in the following steps:\n1. Construct the set of common code that is identical in all architecture-specific files.\n2. Write this common code to the merged file.\n3. Remove the common code from all architecture-specific files.\n\n\n## Generated files\n\n### `zerrors_${GOOS}_${GOARCH}.go`\n\nA file containing all of the system's generated error numbers, error strings,\nsignal numbers, and constants. Generated by `mkerrors.sh` (see above).\n\n### `zsyscall_${GOOS}_${GOARCH}.go`\n\nA file containing all the generated syscalls for a specific GOOS and GOARCH.\nGenerated by `mksyscall.go` (see above).\n\n### `zsysnum_${GOOS}_${GOARCH}.go`\n\nA list of numeric constants for all the syscall number of the specific GOOS\nand GOARCH. Generated by mksysnum (see above).\n\n### `ztypes_${GOOS}_${GOARCH}.go`\n\nA file containing Go types for passing into (or returning from) syscalls.\nGenerated by godefs and the types file (see above).\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/affinity_linux.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// CPU affinity functions\n\npackage unix\n\nimport (\n\t\"math/bits\"\n\t\"unsafe\"\n)\n\nconst cpuSetSize = _CPU_SETSIZE / _NCPUBITS\n\n// CPUSet represents a CPU affinity mask.\ntype CPUSet [cpuSetSize]cpuMask\n\nfunc schedAffinity(trap uintptr, pid int, set *CPUSet) error {\n\t_, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set)))\n\tif e != 0 {\n\t\treturn errnoErr(e)\n\t}\n\treturn nil\n}\n\n// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid.\n// If pid is 0 the calling thread is used.\nfunc SchedGetaffinity(pid int, set *CPUSet) error {\n\treturn schedAffinity(SYS_SCHED_GETAFFINITY, pid, set)\n}\n\n// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid.\n// If pid is 0 the calling thread is used.\nfunc SchedSetaffinity(pid int, set *CPUSet) error {\n\treturn schedAffinity(SYS_SCHED_SETAFFINITY, pid, set)\n}\n\n// Zero clears the set s, so that it contains no CPUs.\nfunc (s *CPUSet) Zero() {\n\tfor i := range s {\n\t\ts[i] = 0\n\t}\n}\n\nfunc cpuBitsIndex(cpu int) int {\n\treturn cpu / _NCPUBITS\n}\n\nfunc cpuBitsMask(cpu int) cpuMask {\n\treturn cpuMask(1 << (uint(cpu) % _NCPUBITS))\n}\n\n// Set adds cpu to the set s.\nfunc (s *CPUSet) Set(cpu int) {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\ts[i] |= cpuBitsMask(cpu)\n\t}\n}\n\n// Clear removes cpu from the set s.\nfunc (s *CPUSet) Clear(cpu int) {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\ts[i] &^= cpuBitsMask(cpu)\n\t}\n}\n\n// IsSet reports whether cpu is in the set s.\nfunc (s *CPUSet) IsSet(cpu int) bool {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\treturn s[i]&cpuBitsMask(cpu) != 0\n\t}\n\treturn false\n}\n\n// Count returns the number of CPUs in the set s.\nfunc (s *CPUSet) Count() int {\n\tc := 0\n\tfor _, b := range s {\n\t\tc += bits.OnesCount64(uint64(b))\n\t}\n\treturn c\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/aliases.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport \"syscall\"\n\ntype Signal = syscall.Signal\ntype Errno = syscall.Errno\ntype SysProcAttr = syscall.SysProcAttr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_aix_ppc64.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go\n//\n\nTEXT ·syscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·syscall6(SB)\n\nTEXT ·rawSyscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_386.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for 386 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_amd64.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for AMD64 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_arm.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for ARM BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_arm64.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for ARM64 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n//\n// System call support for ppc64, BSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for RISCV64 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for 386, Linux\n//\n\n// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80\n// instead of the glibc-specific \"CALL 0x10(GS)\".\n#define INVOKE_SYSCALL\tINT\t$0x80\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tCALL\truntime·entersyscall(SB)\n\tMOVL\ttrap+0(FP), AX  // syscall entry\n\tMOVL\ta1+4(FP), BX\n\tMOVL\ta2+8(FP), CX\n\tMOVL\ta3+12(FP), DX\n\tMOVL\t$0, SI\n\tMOVL\t$0, DI\n\tINVOKE_SYSCALL\n\tMOVL\tAX, r1+16(FP)\n\tMOVL\tDX, r2+20(FP)\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVL\ttrap+0(FP), AX  // syscall entry\n\tMOVL\ta1+4(FP), BX\n\tMOVL\ta2+8(FP), CX\n\tMOVL\ta3+12(FP), DX\n\tMOVL\t$0, SI\n\tMOVL\t$0, DI\n\tINVOKE_SYSCALL\n\tMOVL\tAX, r1+16(FP)\n\tMOVL\tDX, r2+20(FP)\n\tRET\n\nTEXT ·socketcall(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·socketcall(SB)\n\nTEXT ·rawsocketcall(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·rawsocketcall(SB)\n\nTEXT ·seek(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·seek(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for AMD64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tCALL\truntime·entersyscall(SB)\n\tMOVQ\ta1+8(FP), DI\n\tMOVQ\ta2+16(FP), SI\n\tMOVQ\ta3+24(FP), DX\n\tMOVQ\t$0, R10\n\tMOVQ\t$0, R8\n\tMOVQ\t$0, R9\n\tMOVQ\ttrap+0(FP), AX\t// syscall entry\n\tSYSCALL\n\tMOVQ\tAX, r1+32(FP)\n\tMOVQ\tDX, r2+40(FP)\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVQ\ta1+8(FP), DI\n\tMOVQ\ta2+16(FP), SI\n\tMOVQ\ta3+24(FP), DX\n\tMOVQ\t$0, R10\n\tMOVQ\t$0, R8\n\tMOVQ\t$0, R9\n\tMOVQ\ttrap+0(FP), AX\t// syscall entry\n\tSYSCALL\n\tMOVQ\tAX, r1+32(FP)\n\tMOVQ\tDX, r2+40(FP)\n\tRET\n\nTEXT ·gettimeofday(SB),NOSPLIT,$0-16\n\tJMP\tsyscall·gettimeofday(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_arm.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for arm, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tBL\truntime·entersyscall(SB)\n\tMOVW\ttrap+0(FP), R7\n\tMOVW\ta1+4(FP), R0\n\tMOVW\ta2+8(FP), R1\n\tMOVW\ta3+12(FP), R2\n\tMOVW\t$0, R3\n\tMOVW\t$0, R4\n\tMOVW\t$0, R5\n\tSWI\t$0\n\tMOVW\tR0, r1+16(FP)\n\tMOVW\t$0, R0\n\tMOVW\tR0, r2+20(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVW\ttrap+0(FP), R7\t// syscall entry\n\tMOVW\ta1+4(FP), R0\n\tMOVW\ta2+8(FP), R1\n\tMOVW\ta3+12(FP), R2\n\tSWI\t$0\n\tMOVW\tR0, r1+16(FP)\n\tMOVW\t$0, R0\n\tMOVW\tR0, r2+20(FP)\n\tRET\n\nTEXT ·seek(SB),NOSPLIT,$0-28\n\tB\tsyscall·seek(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_arm64.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && arm64 && gc\n\n#include \"textflag.h\"\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R0\n\tMOVD\ta2+16(FP), R1\n\tMOVD\ta3+24(FP), R2\n\tMOVD\t$0, R3\n\tMOVD\t$0, R4\n\tMOVD\t$0, R5\n\tMOVD\ttrap+0(FP), R8\t// syscall entry\n\tSVC\n\tMOVD\tR0, r1+32(FP)\t// r1\n\tMOVD\tR1, r2+40(FP)\t// r2\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R0\n\tMOVD\ta2+16(FP), R1\n\tMOVD\ta3+24(FP), R2\n\tMOVD\t$0, R3\n\tMOVD\t$0, R4\n\tMOVD\t$0, R5\n\tMOVD\ttrap+0(FP), R8\t// syscall entry\n\tSVC\n\tMOVD\tR0, r1+32(FP)\n\tMOVD\tR1, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_loong64.s",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && loong64 && gc\n\n#include \"textflag.h\"\n\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tJAL\truntime·entersyscall(SB)\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R11\t// syscall entry\n\tSYSCALL\n\tMOVV\tR4, r1+32(FP)\n\tMOVV\tR0, r2+40(FP)\t// r2 is not used. Always set to 0\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R11\t// syscall entry\n\tSYSCALL\n\tMOVV\tR4, r1+32(FP)\n\tMOVV\tR0, r2+40(FP)\t// r2 is not used. Always set to 0\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_mips64x.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips64 || mips64le) && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for mips64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tJAL\truntime·entersyscall(SB)\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVV\tR2, r1+32(FP)\n\tMOVV\tR3, r2+40(FP)\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVV\tR2, r1+32(FP)\n\tMOVV\tR3, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_mipsx.s",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips || mipsle) && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for mips, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tJMP syscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·Syscall6(SB)\n\nTEXT ·Syscall9(SB),NOSPLIT,$0-52\n\tJMP syscall·Syscall9(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tJAL\truntime·entersyscall(SB)\n\tMOVW\ta1+4(FP), R4\n\tMOVW\ta2+8(FP), R5\n\tMOVW\ta3+12(FP), R6\n\tMOVW\tR0, R7\n\tMOVW\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVW\tR2, r1+16(FP)\t// r1\n\tMOVW\tR3, r2+20(FP)\t// r2\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP syscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVW\ta1+4(FP), R4\n\tMOVW\ta2+8(FP), R5\n\tMOVW\ta3+12(FP), R6\n\tMOVW\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVW\tR2, r1+16(FP)\n\tMOVW\tR3, r2+20(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (ppc64 || ppc64le) && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for ppc64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R3\n\tMOVD\ta2+16(FP), R4\n\tMOVD\ta3+24(FP), R5\n\tMOVD\tR0, R6\n\tMOVD\tR0, R7\n\tMOVD\tR0, R8\n\tMOVD\ttrap+0(FP), R9\t// syscall entry\n\tSYSCALL R9\n\tMOVD\tR3, r1+32(FP)\n\tMOVD\tR4, r2+40(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R3\n\tMOVD\ta2+16(FP), R4\n\tMOVD\ta3+24(FP), R5\n\tMOVD\tR0, R6\n\tMOVD\tR0, R7\n\tMOVD\tR0, R8\n\tMOVD\ttrap+0(FP), R9\t// syscall entry\n\tSYSCALL R9\n\tMOVD\tR3, r1+32(FP)\n\tMOVD\tR4, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_riscv64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for linux/riscv64.\n//\n// Where available, just jump to package syscall's implementation of\n// these functions.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tCALL\truntime·entersyscall(SB)\n\tMOV\ta1+8(FP), A0\n\tMOV\ta2+16(FP), A1\n\tMOV\ta3+24(FP), A2\n\tMOV\ttrap+0(FP), A7\t// syscall entry\n\tECALL\n\tMOV\tA0, r1+32(FP)\t// r1\n\tMOV\tA1, r2+40(FP)\t// r2\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOV\ta1+8(FP), A0\n\tMOV\ta2+16(FP), A1\n\tMOV\ta3+24(FP), A2\n\tMOV\ttrap+0(FP), A7\t// syscall entry\n\tECALL\n\tMOV\tA0, r1+32(FP)\n\tMOV\tA1, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_s390x.s",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && s390x && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for s390x, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R2\n\tMOVD\ta2+16(FP), R3\n\tMOVD\ta3+24(FP), R4\n\tMOVD\t$0, R5\n\tMOVD\t$0, R6\n\tMOVD\t$0, R7\n\tMOVD\ttrap+0(FP), R1\t// syscall entry\n\tSYSCALL\n\tMOVD\tR2, r1+32(FP)\n\tMOVD\tR3, r2+40(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R2\n\tMOVD\ta2+16(FP), R3\n\tMOVD\ta3+24(FP), R4\n\tMOVD\t$0, R5\n\tMOVD\t$0, R6\n\tMOVD\t$0, R7\n\tMOVD\ttrap+0(FP), R1\t// syscall entry\n\tSYSCALL\n\tMOVD\tR2, r1+32(FP)\n\tMOVD\tR3, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System call support for mips64, OpenBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_solaris_amd64.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go\n//\n\nTEXT ·sysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·sysvicall6(SB)\n\nTEXT ·rawSysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSysvicall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_zos_s390x.s",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x && gc\n\n#include \"textflag.h\"\n\n#define PSALAA            1208(R0)\n#define GTAB64(x)           80(x)\n#define LCA64(x)            88(x)\n#define SAVSTACK_ASYNC(x)  336(x) // in the LCA\n#define CAA(x)               8(x)\n#define CEECAATHDID(x)     976(x) // in the CAA\n#define EDCHPXV(x)        1016(x) // in the CAA\n#define GOCB(x)           1104(x) // in the CAA\n\n// SS_*, where x=SAVSTACK_ASYNC\n#define SS_LE(x)             0(x)\n#define SS_GO(x)             8(x)\n#define SS_ERRNO(x)         16(x)\n#define SS_ERRNOJR(x)       20(x)\n\n// Function Descriptor Offsets\n#define __errno  0x156*16\n#define __err2ad 0x16C*16\n\n// Call Instructions\n#define LE_CALL    BYTE $0x0D; BYTE $0x76 // BL R7, R6\n#define SVC_LOAD   BYTE $0x0A; BYTE $0x08 // SVC 08 LOAD\n#define SVC_DELETE BYTE $0x0A; BYTE $0x09 // SVC 09 DELETE\n\nDATA zosLibVec<>(SB)/8, $0\nGLOBL zosLibVec<>(SB), NOPTR, $8\n\nTEXT ·initZosLibVec(SB), NOSPLIT|NOFRAME, $0-0\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD CAA(R8), R8\n\tMOVD EDCHPXV(R8), R8\n\tMOVD R8, zosLibVec<>(SB)\n\tRET\n\nTEXT ·GetZosLibVec(SB), NOSPLIT|NOFRAME, $0-0\n\tMOVD zosLibVec<>(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·clearErrno(SB), NOSPLIT, $0-0\n\tBL   addrerrno<>(SB)\n\tMOVD $0, 0(R3)\n\tRET\n\n// Returns the address of errno in R3.\nTEXT addrerrno<>(SB), NOSPLIT|NOFRAME, $0-0\n\t// Get library control area (LCA).\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\n\t// Get __errno FuncDesc.\n\tMOVD CAA(R8), R9\n\tMOVD EDCHPXV(R9), R9\n\tADD  $(__errno), R9\n\tLMG  0(R9), R5, R6\n\n\t// Switch to saved LE stack.\n\tMOVD SAVSTACK_ASYNC(R8), R9\n\tMOVD 0(R9), R4\n\tMOVD $0, 0(R9)\n\n\t// Call __errno function.\n\tLE_CALL\n\tNOPH\n\n\t// Switch back to Go stack.\n\tXOR  R0, R0    // Restore R0 to $0.\n\tMOVD R4, 0(R9) // Save stack pointer.\n\tRET\n\n// func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64)\nTEXT ·svcCall(SB), NOSPLIT, $0\n\tBL   runtime·save_g(SB)     // Save g and stack pointer\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD SAVSTACK_ASYNC(R8), R9\n\tMOVD R15, 0(R9)\n\n\tMOVD argv+8(FP), R1   // Move function arguments into registers\n\tMOVD dsa+16(FP), g\n\tMOVD fnptr+0(FP), R15\n\n\tBYTE $0x0D // Branch to function\n\tBYTE $0xEF\n\n\tBL   runtime·load_g(SB)     // Restore g and stack pointer\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD SAVSTACK_ASYNC(R8), R9\n\tMOVD 0(R9), R15\n\n\tRET\n\n// func svcLoad(name *byte) unsafe.Pointer\nTEXT ·svcLoad(SB), NOSPLIT, $0\n\tMOVD R15, R2         // Save go stack pointer\n\tMOVD name+0(FP), R0  // Move SVC args into registers\n\tMOVD $0x80000000, R1\n\tMOVD $0, R15\n\tSVC_LOAD\n\tMOVW R15, R3         // Save return code from SVC\n\tMOVD R2, R15         // Restore go stack pointer\n\tCMP  R3, $0          // Check SVC return code\n\tBNE  error\n\n\tMOVD $-2, R3       // Reset last bit of entry point to zero\n\tAND  R0, R3\n\tMOVD R3, ret+8(FP) // Return entry point returned by SVC\n\tCMP  R0, R3        // Check if last bit of entry point was set\n\tBNE  done\n\n\tMOVD R15, R2 // Save go stack pointer\n\tMOVD $0, R15 // Move SVC args into registers (entry point still in r0 from SVC 08)\n\tSVC_DELETE\n\tMOVD R2, R15 // Restore go stack pointer\n\nerror:\n\tMOVD $0, ret+8(FP) // Return 0 on failure\n\ndone:\n\tXOR R0, R0 // Reset r0 to 0\n\tRET\n\n// func svcUnload(name *byte, fnptr unsafe.Pointer) int64\nTEXT ·svcUnload(SB), NOSPLIT, $0\n\tMOVD R15, R2          // Save go stack pointer\n\tMOVD name+0(FP), R0   // Move SVC args into registers\n\tMOVD fnptr+8(FP), R15\n\tSVC_DELETE\n\tXOR  R0, R0           // Reset r0 to 0\n\tMOVD R15, R1          // Save SVC return code\n\tMOVD R2, R15          // Restore go stack pointer\n\tMOVD R1, ret+16(FP)   // Return SVC return code\n\tRET\n\n// func gettid() uint64\nTEXT ·gettid(SB), NOSPLIT, $0\n\t// Get library control area (LCA).\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\n\t// Get CEECAATHDID\n\tMOVD CAA(R8), R9\n\tMOVD CEECAATHDID(R9), R9\n\tMOVD R9, ret+0(FP)\n\n\tRET\n\n//\n// Call LE function, if the return is -1\n// errno and errno2 is retrieved\n//\nTEXT ·CallLeFuncWithErr(SB), NOSPLIT, $0\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD CAA(R8), R9\n\tMOVD g, GOCB(R9)\n\n\t// Restore LE stack.\n\tMOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address\n\tMOVD 0(R9), R4              // R4-> restore previously saved stack frame pointer\n\n\tMOVD parms_base+8(FP), R7 // R7 -> argument array\n\tMOVD parms_len+16(FP), R8 // R8 number of arguments\n\n\t//  arg 1 ---> R1\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tMOVD 0(R7), R1\n\n\t//  arg 2 ---> R2\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R2\n\n\t//  arg 3 --> R3\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R3\n\n\tCMP  R8, $0\n\tBEQ  docall\n\tMOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument\n\nrepeat:\n\tADD  $8, R7\n\tMOVD 0(R7), R0      // advance arg pointer by 8 byte\n\tADD  $8, R6         // advance LE argument address by 8 byte\n\tMOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame\n\tSUB  $1, R8\n\tCMP  R8, $0\n\tBNE  repeat\n\ndocall:\n\tMOVD funcdesc+0(FP), R8 // R8-> function descriptor\n\tLMG  0(R8), R5, R6\n\tMOVD $0, 0(R9)          // R9 address of SAVSTACK_ASYNC\n\tLE_CALL                 // balr R7, R6 (return #1)\n\tNOPH\n\tMOVD R3, ret+32(FP)\n\tCMP  R3, $-1            // compare result to -1\n\tBNE  done\n\n\t// retrieve errno and errno2\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__errno), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __errno (return #3)\n\tNOPH\n\tMOVWZ 0(R3), R3\n\tMOVD  R3, err+48(FP)\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__err2ad), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __err2ad (return #2)\n\tNOPH\n\tMOVW  (R3), R2            // retrieve errno2\n\tMOVD  R2, errno2+40(FP)   // store in return area\n\ndone:\n\tMOVD R4, 0(R9)            // Save stack pointer.\n\tRET\n\n//\n// Call LE function, if the return is 0\n// errno and errno2 is retrieved\n//\nTEXT ·CallLeFuncWithPtrReturn(SB), NOSPLIT, $0\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD CAA(R8), R9\n\tMOVD g, GOCB(R9)\n\n\t// Restore LE stack.\n\tMOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address\n\tMOVD 0(R9), R4              // R4-> restore previously saved stack frame pointer\n\n\tMOVD parms_base+8(FP), R7 // R7 -> argument array\n\tMOVD parms_len+16(FP), R8 // R8 number of arguments\n\n\t//  arg 1 ---> R1\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tMOVD 0(R7), R1\n\n\t//  arg 2 ---> R2\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R2\n\n\t//  arg 3 --> R3\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R3\n\n\tCMP  R8, $0\n\tBEQ  docall\n\tMOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument\n\nrepeat:\n\tADD  $8, R7\n\tMOVD 0(R7), R0      // advance arg pointer by 8 byte\n\tADD  $8, R6         // advance LE argument address by 8 byte\n\tMOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame\n\tSUB  $1, R8\n\tCMP  R8, $0\n\tBNE  repeat\n\ndocall:\n\tMOVD funcdesc+0(FP), R8 // R8-> function descriptor\n\tLMG  0(R8), R5, R6\n\tMOVD $0, 0(R9)          // R9 address of SAVSTACK_ASYNC\n\tLE_CALL                 // balr R7, R6 (return #1)\n\tNOPH\n\tMOVD R3, ret+32(FP)\n\tCMP  R3, $0             // compare result to 0\n\tBNE  done\n\n\t// retrieve errno and errno2\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__errno), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __errno (return #3)\n\tNOPH\n\tMOVWZ 0(R3), R3\n\tMOVD  R3, err+48(FP)\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__err2ad), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __err2ad (return #2)\n\tNOPH\n\tMOVW  (R3), R2            // retrieve errno2\n\tMOVD  R2, errno2+40(FP)   // store in return area\n\tXOR   R2, R2\n\tMOVWZ R2, (R3)            // clear errno2\n\ndone:\n\tMOVD R4, 0(R9)            // Save stack pointer.\n\tRET\n\n//\n// function to test if a pointer can be safely dereferenced (content read)\n// return 0 for succces\n//\nTEXT ·ptrtest(SB), NOSPLIT, $0-16\n\tMOVD arg+0(FP), R10 // test pointer in R10\n\n\t// set up R2 to point to CEECAADMC\n\tBYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt  2,1208\n\tBYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22                         // llgtr 2,2\n\tBYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF                         // nilh  2,32767\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg    2,88(2)\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg    2,8(2)\n\tBYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68                         // la    2,872(2)\n\n\t// set up R5 to point to the \"shunt\" path which set 1 to R3 (failure)\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33 // xgr   3,3\n\tBYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04 // bras  5,lbl1\n\tBYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01 // lghi  3,1\n\n\t// if r3 is not zero (failed) then branch to finish\n\tBYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33 // lbl1     ltgr  3,3\n\tBYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08 // brc   b'0111',lbl2\n\n\t// stomic store shunt address in R5 into CEECAADMC\n\tBYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg   5,0(2)\n\n\t// now try reading from the test pointer in R10, if it fails it branches to the \"lghi\" instruction above\n\tBYTE $0xE3; BYTE $0x9A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg    9,0(10)\n\n\t// finish here, restore 0 into CEECAADMC\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99                         // lbl2     xgr   9,9\n\tBYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg   9,0(2)\n\tMOVD R3, ret+8(FP)                                                     // result in R3\n\tRET\n\n//\n// function to test if a untptr can be loaded from a pointer\n// return 1: the 8-byte content\n//        2: 0 for success, 1 for failure\n//\n// func safeload(ptr uintptr) ( value uintptr, error uintptr)\nTEXT ·safeload(SB), NOSPLIT, $0-24\n\tMOVD ptr+0(FP), R10                                                    // test pointer in R10\n\tMOVD $0x0, R6\n\tBYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt  2,1208\n\tBYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22                         // llgtr 2,2\n\tBYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF                         // nilh  2,32767\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg    2,88(2)\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg    2,8(2)\n\tBYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68                         // la    2,872(2)\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33                         // xgr   3,3\n\tBYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04                         // bras  5,lbl1\n\tBYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01                         // lghi  3,1\n\tBYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33                         // lbl1     ltgr  3,3\n\tBYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08                         // brc   b'0111',lbl2\n\tBYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 5,0(2)\n\tBYTE $0xE3; BYTE $0x6A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg    6,0(10)\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99                         // lbl2     xgr   9,9\n\tBYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg   9,0(2)\n\tMOVD R6, value+8(FP)                                                   // result in R6\n\tMOVD R3, error+16(FP)                                                  // error in R3\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/auxv.go",
    "content": "// Copyright 2025 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:linkname runtime_getAuxv runtime.getAuxv\nfunc runtime_getAuxv() []uintptr\n\n// Auxv returns the ELF auxiliary vector as a sequence of key/value pairs.\n// The returned slice is always a fresh copy, owned by the caller.\n// It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed,\n// which happens in some locked-down environments and build modes.\nfunc Auxv() ([][2]uintptr, error) {\n\tvec := runtime_getAuxv()\n\tvecLen := len(vec)\n\n\tif vecLen == 0 {\n\t\treturn nil, syscall.ENOENT\n\t}\n\n\tif vecLen%2 != 0 {\n\t\treturn nil, syscall.EINVAL\n\t}\n\n\tresult := make([]uintptr, vecLen)\n\tcopy(result, vec)\n\treturn unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/auxv_unsupported.go",
    "content": "// Copyright 2025 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos)\n\npackage unix\n\nimport \"syscall\"\n\nfunc Auxv() ([][2]uintptr, error) {\n\treturn nil, syscall.ENOTSUP\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/bluetooth_linux.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Bluetooth sockets and messages\n\npackage unix\n\n// Bluetooth Protocols\nconst (\n\tBTPROTO_L2CAP  = 0\n\tBTPROTO_HCI    = 1\n\tBTPROTO_SCO    = 2\n\tBTPROTO_RFCOMM = 3\n\tBTPROTO_BNEP   = 4\n\tBTPROTO_CMTP   = 5\n\tBTPROTO_HIDP   = 6\n\tBTPROTO_AVDTP  = 7\n)\n\nconst (\n\tHCI_CHANNEL_RAW     = 0\n\tHCI_CHANNEL_USER    = 1\n\tHCI_CHANNEL_MONITOR = 2\n\tHCI_CHANNEL_CONTROL = 3\n\tHCI_CHANNEL_LOGGING = 4\n)\n\n// Socketoption Level\nconst (\n\tSOL_BLUETOOTH = 0x112\n\tSOL_HCI       = 0x0\n\tSOL_L2CAP     = 0x6\n\tSOL_RFCOMM    = 0x12\n\tSOL_SCO       = 0x11\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/bpxsvc_zos.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos\n\npackage unix\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"unsafe\"\n)\n\n//go:noescape\nfunc bpxcall(plist []unsafe.Pointer, bpx_offset int64)\n\n//go:noescape\nfunc A2e([]byte)\n\n//go:noescape\nfunc E2a([]byte)\n\nconst (\n\tBPX4STA = 192  // stat\n\tBPX4FST = 104  // fstat\n\tBPX4LST = 132  // lstat\n\tBPX4OPN = 156  // open\n\tBPX4CLO = 72   // close\n\tBPX4CHR = 500  // chattr\n\tBPX4FCR = 504  // fchattr\n\tBPX4LCR = 1180 // lchattr\n\tBPX4CTW = 492  // cond_timed_wait\n\tBPX4GTH = 1056 // __getthent\n\tBPX4PTQ = 412  // pthread_quiesc\n\tBPX4PTR = 320  // ptrace\n)\n\nconst (\n\t//options\n\t//byte1\n\tBPX_OPNFHIGH = 0x80\n\t//byte2\n\tBPX_OPNFEXEC = 0x80\n\t//byte3\n\tBPX_O_NOLARGEFILE = 0x08\n\tBPX_O_LARGEFILE   = 0x04\n\tBPX_O_ASYNCSIG    = 0x02\n\tBPX_O_SYNC        = 0x01\n\t//byte4\n\tBPX_O_CREXCL   = 0xc0\n\tBPX_O_CREAT    = 0x80\n\tBPX_O_EXCL     = 0x40\n\tBPX_O_NOCTTY   = 0x20\n\tBPX_O_TRUNC    = 0x10\n\tBPX_O_APPEND   = 0x08\n\tBPX_O_NONBLOCK = 0x04\n\tBPX_FNDELAY    = 0x04\n\tBPX_O_RDWR     = 0x03\n\tBPX_O_RDONLY   = 0x02\n\tBPX_O_WRONLY   = 0x01\n\tBPX_O_ACCMODE  = 0x03\n\tBPX_O_GETFL    = 0x0f\n\n\t//mode\n\t// byte1 (file type)\n\tBPX_FT_DIR      = 1\n\tBPX_FT_CHARSPEC = 2\n\tBPX_FT_REGFILE  = 3\n\tBPX_FT_FIFO     = 4\n\tBPX_FT_SYMLINK  = 5\n\tBPX_FT_SOCKET   = 6\n\t//byte3\n\tBPX_S_ISUID  = 0x08\n\tBPX_S_ISGID  = 0x04\n\tBPX_S_ISVTX  = 0x02\n\tBPX_S_IRWXU1 = 0x01\n\tBPX_S_IRUSR  = 0x01\n\t//byte4\n\tBPX_S_IRWXU2 = 0xc0\n\tBPX_S_IWUSR  = 0x80\n\tBPX_S_IXUSR  = 0x40\n\tBPX_S_IRWXG  = 0x38\n\tBPX_S_IRGRP  = 0x20\n\tBPX_S_IWGRP  = 0x10\n\tBPX_S_IXGRP  = 0x08\n\tBPX_S_IRWXOX = 0x07\n\tBPX_S_IROTH  = 0x04\n\tBPX_S_IWOTH  = 0x02\n\tBPX_S_IXOTH  = 0x01\n\n\tCW_INTRPT  = 1\n\tCW_CONDVAR = 32\n\tCW_TIMEOUT = 64\n\n\tPGTHA_NEXT        = 2\n\tPGTHA_CURRENT     = 1\n\tPGTHA_FIRST       = 0\n\tPGTHA_LAST        = 3\n\tPGTHA_PROCESS     = 0x80\n\tPGTHA_CONTTY      = 0x40\n\tPGTHA_PATH        = 0x20\n\tPGTHA_COMMAND     = 0x10\n\tPGTHA_FILEDATA    = 0x08\n\tPGTHA_THREAD      = 0x04\n\tPGTHA_PTAG        = 0x02\n\tPGTHA_COMMANDLONG = 0x01\n\tPGTHA_THREADFAST  = 0x80\n\tPGTHA_FILEPATH    = 0x40\n\tPGTHA_THDSIGMASK  = 0x20\n\t// thread quiece mode\n\tQUIESCE_TERM       int32 = 1\n\tQUIESCE_FORCE      int32 = 2\n\tQUIESCE_QUERY      int32 = 3\n\tQUIESCE_FREEZE     int32 = 4\n\tQUIESCE_UNFREEZE   int32 = 5\n\tFREEZE_THIS_THREAD int32 = 6\n\tFREEZE_EXIT        int32 = 8\n\tQUIESCE_SRB        int32 = 9\n)\n\ntype Pgtha struct {\n\tPid        uint32 // 0\n\tTid0       uint32 // 4\n\tTid1       uint32\n\tAccesspid  byte    // C\n\tAccesstid  byte    // D\n\tAccessasid uint16  // E\n\tLoginname  [8]byte // 10\n\tFlag1      byte    // 18\n\tFlag1b2    byte    // 19\n}\n\ntype Bpxystat_t struct { // DSECT BPXYSTAT\n\tSt_id           [4]uint8  // 0\n\tSt_length       uint16    // 0x4\n\tSt_version      uint16    // 0x6\n\tSt_mode         uint32    // 0x8\n\tSt_ino          uint32    // 0xc\n\tSt_dev          uint32    // 0x10\n\tSt_nlink        uint32    // 0x14\n\tSt_uid          uint32    // 0x18\n\tSt_gid          uint32    // 0x1c\n\tSt_size         uint64    // 0x20\n\tSt_atime        uint32    // 0x28\n\tSt_mtime        uint32    // 0x2c\n\tSt_ctime        uint32    // 0x30\n\tSt_rdev         uint32    // 0x34\n\tSt_auditoraudit uint32    // 0x38\n\tSt_useraudit    uint32    // 0x3c\n\tSt_blksize      uint32    // 0x40\n\tSt_createtime   uint32    // 0x44\n\tSt_auditid      [4]uint32 // 0x48\n\tSt_res01        uint32    // 0x58\n\tFt_ccsid        uint16    // 0x5c\n\tFt_flags        uint16    // 0x5e\n\tSt_res01a       [2]uint32 // 0x60\n\tSt_res02        uint32    // 0x68\n\tSt_blocks       uint32    // 0x6c\n\tSt_opaque       [3]uint8  // 0x70\n\tSt_visible      uint8     // 0x73\n\tSt_reftime      uint32    // 0x74\n\tSt_fid          uint64    // 0x78\n\tSt_filefmt      uint8     // 0x80\n\tSt_fspflag2     uint8     // 0x81\n\tSt_res03        [2]uint8  // 0x82\n\tSt_ctimemsec    uint32    // 0x84\n\tSt_seclabel     [8]uint8  // 0x88\n\tSt_res04        [4]uint8  // 0x90\n\t// end of version 1\n\t_               uint32    // 0x94\n\tSt_atime64      uint64    // 0x98\n\tSt_mtime64      uint64    // 0xa0\n\tSt_ctime64      uint64    // 0xa8\n\tSt_createtime64 uint64    // 0xb0\n\tSt_reftime64    uint64    // 0xb8\n\t_               uint64    // 0xc0\n\tSt_res05        [16]uint8 // 0xc8\n\t// end of version 2\n}\n\ntype BpxFilestatus struct {\n\tOflag1 byte\n\tOflag2 byte\n\tOflag3 byte\n\tOflag4 byte\n}\n\ntype BpxMode struct {\n\tFtype byte\n\tMode1 byte\n\tMode2 byte\n\tMode3 byte\n}\n\n// Thr attribute structure for extended attributes\ntype Bpxyatt_t struct { // DSECT BPXYATT\n\tAtt_id           [4]uint8\n\tAtt_version      uint16\n\tAtt_res01        [2]uint8\n\tAtt_setflags1    uint8\n\tAtt_setflags2    uint8\n\tAtt_setflags3    uint8\n\tAtt_setflags4    uint8\n\tAtt_mode         uint32\n\tAtt_uid          uint32\n\tAtt_gid          uint32\n\tAtt_opaquemask   [3]uint8\n\tAtt_visblmaskres uint8\n\tAtt_opaque       [3]uint8\n\tAtt_visibleres   uint8\n\tAtt_size_h       uint32\n\tAtt_size_l       uint32\n\tAtt_atime        uint32\n\tAtt_mtime        uint32\n\tAtt_auditoraudit uint32\n\tAtt_useraudit    uint32\n\tAtt_ctime        uint32\n\tAtt_reftime      uint32\n\t// end of version 1\n\tAtt_filefmt uint8\n\tAtt_res02   [3]uint8\n\tAtt_filetag uint32\n\tAtt_res03   [8]uint8\n\t// end of version 2\n\tAtt_atime64   uint64\n\tAtt_mtime64   uint64\n\tAtt_ctime64   uint64\n\tAtt_reftime64 uint64\n\tAtt_seclabel  [8]uint8\n\tAtt_ver3res02 [8]uint8\n\t// end of version 3\n}\n\nfunc BpxOpen(name string, options *BpxFilestatus, mode *BpxMode) (rv int32, rc int32, rn int32) {\n\tif len(name) < 1024 {\n\t\tvar namebuf [1024]byte\n\t\tsz := int32(copy(namebuf[:], name))\n\t\tA2e(namebuf[:sz])\n\t\tvar parms [7]unsafe.Pointer\n\t\tparms[0] = unsafe.Pointer(&sz)\n\t\tparms[1] = unsafe.Pointer(&namebuf[0])\n\t\tparms[2] = unsafe.Pointer(options)\n\t\tparms[3] = unsafe.Pointer(mode)\n\t\tparms[4] = unsafe.Pointer(&rv)\n\t\tparms[5] = unsafe.Pointer(&rc)\n\t\tparms[6] = unsafe.Pointer(&rn)\n\t\tbpxcall(parms[:], BPX4OPN)\n\t\treturn rv, rc, rn\n\t}\n\treturn -1, -1, -1\n}\n\nfunc BpxClose(fd int32) (rv int32, rc int32, rn int32) {\n\tvar parms [4]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&fd)\n\tparms[1] = unsafe.Pointer(&rv)\n\tparms[2] = unsafe.Pointer(&rc)\n\tparms[3] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4CLO)\n\treturn rv, rc, rn\n}\n\nfunc BpxFileFStat(fd int32, st *Bpxystat_t) (rv int32, rc int32, rn int32) {\n\tst.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3}\n\tst.St_version = 2\n\tstat_sz := uint32(unsafe.Sizeof(*st))\n\tvar parms [6]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&fd)\n\tparms[1] = unsafe.Pointer(&stat_sz)\n\tparms[2] = unsafe.Pointer(st)\n\tparms[3] = unsafe.Pointer(&rv)\n\tparms[4] = unsafe.Pointer(&rc)\n\tparms[5] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4FST)\n\treturn rv, rc, rn\n}\n\nfunc BpxFileStat(name string, st *Bpxystat_t) (rv int32, rc int32, rn int32) {\n\tif len(name) < 1024 {\n\t\tvar namebuf [1024]byte\n\t\tsz := int32(copy(namebuf[:], name))\n\t\tA2e(namebuf[:sz])\n\t\tst.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3}\n\t\tst.St_version = 2\n\t\tstat_sz := uint32(unsafe.Sizeof(*st))\n\t\tvar parms [7]unsafe.Pointer\n\t\tparms[0] = unsafe.Pointer(&sz)\n\t\tparms[1] = unsafe.Pointer(&namebuf[0])\n\t\tparms[2] = unsafe.Pointer(&stat_sz)\n\t\tparms[3] = unsafe.Pointer(st)\n\t\tparms[4] = unsafe.Pointer(&rv)\n\t\tparms[5] = unsafe.Pointer(&rc)\n\t\tparms[6] = unsafe.Pointer(&rn)\n\t\tbpxcall(parms[:], BPX4STA)\n\t\treturn rv, rc, rn\n\t}\n\treturn -1, -1, -1\n}\n\nfunc BpxFileLStat(name string, st *Bpxystat_t) (rv int32, rc int32, rn int32) {\n\tif len(name) < 1024 {\n\t\tvar namebuf [1024]byte\n\t\tsz := int32(copy(namebuf[:], name))\n\t\tA2e(namebuf[:sz])\n\t\tst.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3}\n\t\tst.St_version = 2\n\t\tstat_sz := uint32(unsafe.Sizeof(*st))\n\t\tvar parms [7]unsafe.Pointer\n\t\tparms[0] = unsafe.Pointer(&sz)\n\t\tparms[1] = unsafe.Pointer(&namebuf[0])\n\t\tparms[2] = unsafe.Pointer(&stat_sz)\n\t\tparms[3] = unsafe.Pointer(st)\n\t\tparms[4] = unsafe.Pointer(&rv)\n\t\tparms[5] = unsafe.Pointer(&rc)\n\t\tparms[6] = unsafe.Pointer(&rn)\n\t\tbpxcall(parms[:], BPX4LST)\n\t\treturn rv, rc, rn\n\t}\n\treturn -1, -1, -1\n}\n\nfunc BpxChattr(path string, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) {\n\tif len(path) >= 1024 {\n\t\treturn -1, -1, -1\n\t}\n\tvar namebuf [1024]byte\n\tsz := int32(copy(namebuf[:], path))\n\tA2e(namebuf[:sz])\n\tattr_sz := uint32(unsafe.Sizeof(*attr))\n\tvar parms [7]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&sz)\n\tparms[1] = unsafe.Pointer(&namebuf[0])\n\tparms[2] = unsafe.Pointer(&attr_sz)\n\tparms[3] = unsafe.Pointer(attr)\n\tparms[4] = unsafe.Pointer(&rv)\n\tparms[5] = unsafe.Pointer(&rc)\n\tparms[6] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4CHR)\n\treturn rv, rc, rn\n}\n\nfunc BpxLchattr(path string, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) {\n\tif len(path) >= 1024 {\n\t\treturn -1, -1, -1\n\t}\n\tvar namebuf [1024]byte\n\tsz := int32(copy(namebuf[:], path))\n\tA2e(namebuf[:sz])\n\tattr_sz := uint32(unsafe.Sizeof(*attr))\n\tvar parms [7]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&sz)\n\tparms[1] = unsafe.Pointer(&namebuf[0])\n\tparms[2] = unsafe.Pointer(&attr_sz)\n\tparms[3] = unsafe.Pointer(attr)\n\tparms[4] = unsafe.Pointer(&rv)\n\tparms[5] = unsafe.Pointer(&rc)\n\tparms[6] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4LCR)\n\treturn rv, rc, rn\n}\n\nfunc BpxFchattr(fd int32, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) {\n\tattr_sz := uint32(unsafe.Sizeof(*attr))\n\tvar parms [6]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&fd)\n\tparms[1] = unsafe.Pointer(&attr_sz)\n\tparms[2] = unsafe.Pointer(attr)\n\tparms[3] = unsafe.Pointer(&rv)\n\tparms[4] = unsafe.Pointer(&rc)\n\tparms[5] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4FCR)\n\treturn rv, rc, rn\n}\n\nfunc BpxCondTimedWait(sec uint32, nsec uint32, events uint32, secrem *uint32, nsecrem *uint32) (rv int32, rc int32, rn int32) {\n\tvar parms [8]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&sec)\n\tparms[1] = unsafe.Pointer(&nsec)\n\tparms[2] = unsafe.Pointer(&events)\n\tparms[3] = unsafe.Pointer(secrem)\n\tparms[4] = unsafe.Pointer(nsecrem)\n\tparms[5] = unsafe.Pointer(&rv)\n\tparms[6] = unsafe.Pointer(&rc)\n\tparms[7] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4CTW)\n\treturn rv, rc, rn\n}\nfunc BpxGetthent(in *Pgtha, outlen *uint32, out unsafe.Pointer) (rv int32, rc int32, rn int32) {\n\tvar parms [7]unsafe.Pointer\n\tinlen := uint32(26) // nothing else will work. Go says Pgtha is 28-byte because of alignment, but Pgtha is \"packed\" and must be 26-byte\n\tparms[0] = unsafe.Pointer(&inlen)\n\tparms[1] = unsafe.Pointer(&in)\n\tparms[2] = unsafe.Pointer(outlen)\n\tparms[3] = unsafe.Pointer(&out)\n\tparms[4] = unsafe.Pointer(&rv)\n\tparms[5] = unsafe.Pointer(&rc)\n\tparms[6] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4GTH)\n\treturn rv, rc, rn\n}\nfunc ZosJobname() (jobname string, err error) {\n\tvar pgtha Pgtha\n\tpgtha.Pid = uint32(Getpid())\n\tpgtha.Accesspid = PGTHA_CURRENT\n\tpgtha.Flag1 = PGTHA_PROCESS\n\tvar out [256]byte\n\tvar outlen uint32\n\toutlen = 256\n\trv, rc, rn := BpxGetthent(&pgtha, &outlen, unsafe.Pointer(&out[0]))\n\tif rv == 0 {\n\t\tgthc := []byte{0x87, 0xa3, 0x88, 0x83} // 'gthc' in ebcdic\n\t\tix := bytes.Index(out[:], gthc)\n\t\tif ix == -1 {\n\t\t\terr = fmt.Errorf(\"BPX4GTH: gthc return data not found\")\n\t\t\treturn\n\t\t}\n\t\tjn := out[ix+80 : ix+88] // we didn't declare Pgthc, but jobname is 8-byte at offset 80\n\t\tE2a(jn)\n\t\tjobname = string(bytes.TrimRight(jn, \" \"))\n\n\t} else {\n\t\terr = fmt.Errorf(\"BPX4GTH: rc=%d errno=%d reason=code=0x%x\", rv, rc, rn)\n\t}\n\treturn\n}\nfunc Bpx4ptq(code int32, data string) (rv int32, rc int32, rn int32) {\n\tvar userdata [8]byte\n\tvar parms [5]unsafe.Pointer\n\tcopy(userdata[:], data+\"        \")\n\tA2e(userdata[:])\n\tparms[0] = unsafe.Pointer(&code)\n\tparms[1] = unsafe.Pointer(&userdata[0])\n\tparms[2] = unsafe.Pointer(&rv)\n\tparms[3] = unsafe.Pointer(&rc)\n\tparms[4] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4PTQ)\n\treturn rv, rc, rn\n}\n\nconst (\n\tPT_TRACE_ME             = 0  // Debug this process\n\tPT_READ_I               = 1  // Read a full word\n\tPT_READ_D               = 2  // Read a full word\n\tPT_READ_U               = 3  // Read control info\n\tPT_WRITE_I              = 4  //Write a full word\n\tPT_WRITE_D              = 5  //Write a full word\n\tPT_CONTINUE             = 7  //Continue the process\n\tPT_KILL                 = 8  //Terminate the process\n\tPT_READ_GPR             = 11 // Read GPR, CR, PSW\n\tPT_READ_FPR             = 12 // Read FPR\n\tPT_READ_VR              = 13 // Read VR\n\tPT_WRITE_GPR            = 14 // Write GPR, CR, PSW\n\tPT_WRITE_FPR            = 15 // Write FPR\n\tPT_WRITE_VR             = 16 // Write VR\n\tPT_READ_BLOCK           = 17 // Read storage\n\tPT_WRITE_BLOCK          = 19 // Write storage\n\tPT_READ_GPRH            = 20 // Read GPRH\n\tPT_WRITE_GPRH           = 21 // Write GPRH\n\tPT_REGHSET              = 22 // Read all GPRHs\n\tPT_ATTACH               = 30 // Attach to a process\n\tPT_DETACH               = 31 // Detach from a process\n\tPT_REGSET               = 32 // Read all GPRs\n\tPT_REATTACH             = 33 // Reattach to a process\n\tPT_LDINFO               = 34 // Read loader info\n\tPT_MULTI                = 35 // Multi process mode\n\tPT_LD64INFO             = 36 // RMODE64 Info Area\n\tPT_BLOCKREQ             = 40 // Block request\n\tPT_THREAD_INFO          = 60 // Read thread info\n\tPT_THREAD_MODIFY        = 61\n\tPT_THREAD_READ_FOCUS    = 62\n\tPT_THREAD_WRITE_FOCUS   = 63\n\tPT_THREAD_HOLD          = 64\n\tPT_THREAD_SIGNAL        = 65\n\tPT_EXPLAIN              = 66\n\tPT_EVENTS               = 67\n\tPT_THREAD_INFO_EXTENDED = 68\n\tPT_REATTACH2            = 71\n\tPT_CAPTURE              = 72\n\tPT_UNCAPTURE            = 73\n\tPT_GET_THREAD_TCB       = 74\n\tPT_GET_ALET             = 75\n\tPT_SWAPIN               = 76\n\tPT_EXTENDED_EVENT       = 98\n\tPT_RECOVER              = 99  // Debug a program check\n\tPT_GPR0                 = 0   // General purpose register 0\n\tPT_GPR1                 = 1   // General purpose register 1\n\tPT_GPR2                 = 2   // General purpose register 2\n\tPT_GPR3                 = 3   // General purpose register 3\n\tPT_GPR4                 = 4   // General purpose register 4\n\tPT_GPR5                 = 5   // General purpose register 5\n\tPT_GPR6                 = 6   // General purpose register 6\n\tPT_GPR7                 = 7   // General purpose register 7\n\tPT_GPR8                 = 8   // General purpose register 8\n\tPT_GPR9                 = 9   // General purpose register 9\n\tPT_GPR10                = 10  // General purpose register 10\n\tPT_GPR11                = 11  // General purpose register 11\n\tPT_GPR12                = 12  // General purpose register 12\n\tPT_GPR13                = 13  // General purpose register 13\n\tPT_GPR14                = 14  // General purpose register 14\n\tPT_GPR15                = 15  // General purpose register 15\n\tPT_FPR0                 = 16  // Floating point register 0\n\tPT_FPR1                 = 17  // Floating point register 1\n\tPT_FPR2                 = 18  // Floating point register 2\n\tPT_FPR3                 = 19  // Floating point register 3\n\tPT_FPR4                 = 20  // Floating point register 4\n\tPT_FPR5                 = 21  // Floating point register 5\n\tPT_FPR6                 = 22  // Floating point register 6\n\tPT_FPR7                 = 23  // Floating point register 7\n\tPT_FPR8                 = 24  // Floating point register 8\n\tPT_FPR9                 = 25  // Floating point register 9\n\tPT_FPR10                = 26  // Floating point register 10\n\tPT_FPR11                = 27  // Floating point register 11\n\tPT_FPR12                = 28  // Floating point register 12\n\tPT_FPR13                = 29  // Floating point register 13\n\tPT_FPR14                = 30  // Floating point register 14\n\tPT_FPR15                = 31  // Floating point register 15\n\tPT_FPC                  = 32  // Floating point control register\n\tPT_PSW                  = 40  // PSW\n\tPT_PSW0                 = 40  // Left half of the PSW\n\tPT_PSW1                 = 41  // Right half of the PSW\n\tPT_CR0                  = 42  // Control register 0\n\tPT_CR1                  = 43  // Control register 1\n\tPT_CR2                  = 44  // Control register 2\n\tPT_CR3                  = 45  // Control register 3\n\tPT_CR4                  = 46  // Control register 4\n\tPT_CR5                  = 47  // Control register 5\n\tPT_CR6                  = 48  // Control register 6\n\tPT_CR7                  = 49  // Control register 7\n\tPT_CR8                  = 50  // Control register 8\n\tPT_CR9                  = 51  // Control register 9\n\tPT_CR10                 = 52  // Control register 10\n\tPT_CR11                 = 53  // Control register 11\n\tPT_CR12                 = 54  // Control register 12\n\tPT_CR13                 = 55  // Control register 13\n\tPT_CR14                 = 56  // Control register 14\n\tPT_CR15                 = 57  // Control register 15\n\tPT_GPRH0                = 58  // GP High register 0\n\tPT_GPRH1                = 59  // GP High register 1\n\tPT_GPRH2                = 60  // GP High register 2\n\tPT_GPRH3                = 61  // GP High register 3\n\tPT_GPRH4                = 62  // GP High register 4\n\tPT_GPRH5                = 63  // GP High register 5\n\tPT_GPRH6                = 64  // GP High register 6\n\tPT_GPRH7                = 65  // GP High register 7\n\tPT_GPRH8                = 66  // GP High register 8\n\tPT_GPRH9                = 67  // GP High register 9\n\tPT_GPRH10               = 68  // GP High register 10\n\tPT_GPRH11               = 69  // GP High register 11\n\tPT_GPRH12               = 70  // GP High register 12\n\tPT_GPRH13               = 71  // GP High register 13\n\tPT_GPRH14               = 72  // GP High register 14\n\tPT_GPRH15               = 73  // GP High register 15\n\tPT_VR0                  = 74  // Vector register 0\n\tPT_VR1                  = 75  // Vector register 1\n\tPT_VR2                  = 76  // Vector register 2\n\tPT_VR3                  = 77  // Vector register 3\n\tPT_VR4                  = 78  // Vector register 4\n\tPT_VR5                  = 79  // Vector register 5\n\tPT_VR6                  = 80  // Vector register 6\n\tPT_VR7                  = 81  // Vector register 7\n\tPT_VR8                  = 82  // Vector register 8\n\tPT_VR9                  = 83  // Vector register 9\n\tPT_VR10                 = 84  // Vector register 10\n\tPT_VR11                 = 85  // Vector register 11\n\tPT_VR12                 = 86  // Vector register 12\n\tPT_VR13                 = 87  // Vector register 13\n\tPT_VR14                 = 88  // Vector register 14\n\tPT_VR15                 = 89  // Vector register 15\n\tPT_VR16                 = 90  // Vector register 16\n\tPT_VR17                 = 91  // Vector register 17\n\tPT_VR18                 = 92  // Vector register 18\n\tPT_VR19                 = 93  // Vector register 19\n\tPT_VR20                 = 94  // Vector register 20\n\tPT_VR21                 = 95  // Vector register 21\n\tPT_VR22                 = 96  // Vector register 22\n\tPT_VR23                 = 97  // Vector register 23\n\tPT_VR24                 = 98  // Vector register 24\n\tPT_VR25                 = 99  // Vector register 25\n\tPT_VR26                 = 100 // Vector register 26\n\tPT_VR27                 = 101 // Vector register 27\n\tPT_VR28                 = 102 // Vector register 28\n\tPT_VR29                 = 103 // Vector register 29\n\tPT_VR30                 = 104 // Vector register 30\n\tPT_VR31                 = 105 // Vector register 31\n\tPT_PSWG                 = 106 // PSWG\n\tPT_PSWG0                = 106 // Bytes 0-3\n\tPT_PSWG1                = 107 // Bytes 4-7\n\tPT_PSWG2                = 108 // Bytes 8-11 (IA high word)\n\tPT_PSWG3                = 109 // Bytes 12-15 (IA low word)\n)\n\nfunc Bpx4ptr(request int32, pid int32, addr unsafe.Pointer, data unsafe.Pointer, buffer unsafe.Pointer) (rv int32, rc int32, rn int32) {\n\tvar parms [8]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&request)\n\tparms[1] = unsafe.Pointer(&pid)\n\tparms[2] = unsafe.Pointer(&addr)\n\tparms[3] = unsafe.Pointer(&data)\n\tparms[4] = unsafe.Pointer(&buffer)\n\tparms[5] = unsafe.Pointer(&rv)\n\tparms[6] = unsafe.Pointer(&rc)\n\tparms[7] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4PTR)\n\treturn rv, rc, rn\n}\n\nfunc copyU8(val uint8, dest []uint8) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n\nfunc copyU8Arr(src, dest []uint8) int {\n\tif len(dest) < len(src) {\n\t\treturn 0\n\t}\n\tfor i, v := range src {\n\t\tdest[i] = v\n\t}\n\treturn len(src)\n}\n\nfunc copyU16(val uint16, dest []uint16) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n\nfunc copyU32(val uint32, dest []uint32) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n\nfunc copyU32Arr(src, dest []uint32) int {\n\tif len(dest) < len(src) {\n\t\treturn 0\n\t}\n\tfor i, v := range src {\n\t\tdest[i] = v\n\t}\n\treturn len(src)\n}\n\nfunc copyU64(val uint64, dest []uint64) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/bpxsvc_zos.s",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"go_asm.h\"\n#include \"textflag.h\"\n\n// function to call USS assembly language services\n//\n// doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bit64env.htm\n//\n//   arg1 unsafe.Pointer array that ressembles an OS PLIST\n//\n//   arg2 function offset as in\n//       doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bpx2cr_List_of_offsets.htm\n//\n// func bpxcall(plist []unsafe.Pointer, bpx_offset int64)\n\nTEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0\n\tMOVD  plist_base+0(FP), R1  // r1 points to plist\n\tMOVD  bpx_offset+24(FP), R2 // r2 offset to BPX vector table\n\tMOVD  R14, R7               // save r14\n\tMOVD  R15, R8               // save r15\n\tMOVWZ 16(R0), R9\n\tMOVWZ 544(R9), R9\n\tMOVWZ 24(R9), R9            // call vector in r9\n\tADD   R2, R9                // add offset to vector table\n\tMOVWZ (R9), R9              // r9 points to entry point\n\tBYTE  $0x0D                 // BL R14,R9 --> basr r14,r9\n\tBYTE  $0xE9                 // clobbers 0,1,14,15\n\tMOVD  R8, R15               // restore 15\n\tJMP   R7                    // return via saved return address\n\n//   func A2e(arr [] byte)\n//   code page conversion from  819 to 1047\nTEXT ·A2e(SB), NOSPLIT|NOFRAME, $0\n\tMOVD arg_base+0(FP), R2                        // pointer to arry of characters\n\tMOVD arg_len+8(FP), R3                         // count\n\tXOR  R0, R0\n\tXOR  R1, R1\n\tBYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2))\n\n\t// ASCII -> EBCDIC conversion table:\n\tBYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03\n\tBYTE $0x37; BYTE $0x2d; BYTE $0x2e; BYTE $0x2f\n\tBYTE $0x16; BYTE $0x05; BYTE $0x15; BYTE $0x0b\n\tBYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f\n\tBYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13\n\tBYTE $0x3c; BYTE $0x3d; BYTE $0x32; BYTE $0x26\n\tBYTE $0x18; BYTE $0x19; BYTE $0x3f; BYTE $0x27\n\tBYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f\n\tBYTE $0x40; BYTE $0x5a; BYTE $0x7f; BYTE $0x7b\n\tBYTE $0x5b; BYTE $0x6c; BYTE $0x50; BYTE $0x7d\n\tBYTE $0x4d; BYTE $0x5d; BYTE $0x5c; BYTE $0x4e\n\tBYTE $0x6b; BYTE $0x60; BYTE $0x4b; BYTE $0x61\n\tBYTE $0xf0; BYTE $0xf1; BYTE $0xf2; BYTE $0xf3\n\tBYTE $0xf4; BYTE $0xf5; BYTE $0xf6; BYTE $0xf7\n\tBYTE $0xf8; BYTE $0xf9; BYTE $0x7a; BYTE $0x5e\n\tBYTE $0x4c; BYTE $0x7e; BYTE $0x6e; BYTE $0x6f\n\tBYTE $0x7c; BYTE $0xc1; BYTE $0xc2; BYTE $0xc3\n\tBYTE $0xc4; BYTE $0xc5; BYTE $0xc6; BYTE $0xc7\n\tBYTE $0xc8; BYTE $0xc9; BYTE $0xd1; BYTE $0xd2\n\tBYTE $0xd3; BYTE $0xd4; BYTE $0xd5; BYTE $0xd6\n\tBYTE $0xd7; BYTE $0xd8; BYTE $0xd9; BYTE $0xe2\n\tBYTE $0xe3; BYTE $0xe4; BYTE $0xe5; BYTE $0xe6\n\tBYTE $0xe7; BYTE $0xe8; BYTE $0xe9; BYTE $0xad\n\tBYTE $0xe0; BYTE $0xbd; BYTE $0x5f; BYTE $0x6d\n\tBYTE $0x79; BYTE $0x81; BYTE $0x82; BYTE $0x83\n\tBYTE $0x84; BYTE $0x85; BYTE $0x86; BYTE $0x87\n\tBYTE $0x88; BYTE $0x89; BYTE $0x91; BYTE $0x92\n\tBYTE $0x93; BYTE $0x94; BYTE $0x95; BYTE $0x96\n\tBYTE $0x97; BYTE $0x98; BYTE $0x99; BYTE $0xa2\n\tBYTE $0xa3; BYTE $0xa4; BYTE $0xa5; BYTE $0xa6\n\tBYTE $0xa7; BYTE $0xa8; BYTE $0xa9; BYTE $0xc0\n\tBYTE $0x4f; BYTE $0xd0; BYTE $0xa1; BYTE $0x07\n\tBYTE $0x20; BYTE $0x21; BYTE $0x22; BYTE $0x23\n\tBYTE $0x24; BYTE $0x25; BYTE $0x06; BYTE $0x17\n\tBYTE $0x28; BYTE $0x29; BYTE $0x2a; BYTE $0x2b\n\tBYTE $0x2c; BYTE $0x09; BYTE $0x0a; BYTE $0x1b\n\tBYTE $0x30; BYTE $0x31; BYTE $0x1a; BYTE $0x33\n\tBYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x08\n\tBYTE $0x38; BYTE $0x39; BYTE $0x3a; BYTE $0x3b\n\tBYTE $0x04; BYTE $0x14; BYTE $0x3e; BYTE $0xff\n\tBYTE $0x41; BYTE $0xaa; BYTE $0x4a; BYTE $0xb1\n\tBYTE $0x9f; BYTE $0xb2; BYTE $0x6a; BYTE $0xb5\n\tBYTE $0xbb; BYTE $0xb4; BYTE $0x9a; BYTE $0x8a\n\tBYTE $0xb0; BYTE $0xca; BYTE $0xaf; BYTE $0xbc\n\tBYTE $0x90; BYTE $0x8f; BYTE $0xea; BYTE $0xfa\n\tBYTE $0xbe; BYTE $0xa0; BYTE $0xb6; BYTE $0xb3\n\tBYTE $0x9d; BYTE $0xda; BYTE $0x9b; BYTE $0x8b\n\tBYTE $0xb7; BYTE $0xb8; BYTE $0xb9; BYTE $0xab\n\tBYTE $0x64; BYTE $0x65; BYTE $0x62; BYTE $0x66\n\tBYTE $0x63; BYTE $0x67; BYTE $0x9e; BYTE $0x68\n\tBYTE $0x74; BYTE $0x71; BYTE $0x72; BYTE $0x73\n\tBYTE $0x78; BYTE $0x75; BYTE $0x76; BYTE $0x77\n\tBYTE $0xac; BYTE $0x69; BYTE $0xed; BYTE $0xee\n\tBYTE $0xeb; BYTE $0xef; BYTE $0xec; BYTE $0xbf\n\tBYTE $0x80; BYTE $0xfd; BYTE $0xfe; BYTE $0xfb\n\tBYTE $0xfc; BYTE $0xba; BYTE $0xae; BYTE $0x59\n\tBYTE $0x44; BYTE $0x45; BYTE $0x42; BYTE $0x46\n\tBYTE $0x43; BYTE $0x47; BYTE $0x9c; BYTE $0x48\n\tBYTE $0x54; BYTE $0x51; BYTE $0x52; BYTE $0x53\n\tBYTE $0x58; BYTE $0x55; BYTE $0x56; BYTE $0x57\n\tBYTE $0x8c; BYTE $0x49; BYTE $0xcd; BYTE $0xce\n\tBYTE $0xcb; BYTE $0xcf; BYTE $0xcc; BYTE $0xe1\n\tBYTE $0x70; BYTE $0xdd; BYTE $0xde; BYTE $0xdb\n\tBYTE $0xdc; BYTE $0x8d; BYTE $0x8e; BYTE $0xdf\n\nretry:\n\tWORD $0xB9931022 // TROO 2,2,b'0001'\n\tBVS  retry\n\tRET\n\n//   func e2a(arr [] byte)\n//   code page conversion from  1047 to 819\nTEXT ·E2a(SB), NOSPLIT|NOFRAME, $0\n\tMOVD arg_base+0(FP), R2                        // pointer to arry of characters\n\tMOVD arg_len+8(FP), R3                         // count\n\tXOR  R0, R0\n\tXOR  R1, R1\n\tBYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2))\n\n\t// EBCDIC -> ASCII conversion table:\n\tBYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03\n\tBYTE $0x9c; BYTE $0x09; BYTE $0x86; BYTE $0x7f\n\tBYTE $0x97; BYTE $0x8d; BYTE $0x8e; BYTE $0x0b\n\tBYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f\n\tBYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13\n\tBYTE $0x9d; BYTE $0x0a; BYTE $0x08; BYTE $0x87\n\tBYTE $0x18; BYTE $0x19; BYTE $0x92; BYTE $0x8f\n\tBYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f\n\tBYTE $0x80; BYTE $0x81; BYTE $0x82; BYTE $0x83\n\tBYTE $0x84; BYTE $0x85; BYTE $0x17; BYTE $0x1b\n\tBYTE $0x88; BYTE $0x89; BYTE $0x8a; BYTE $0x8b\n\tBYTE $0x8c; BYTE $0x05; BYTE $0x06; BYTE $0x07\n\tBYTE $0x90; BYTE $0x91; BYTE $0x16; BYTE $0x93\n\tBYTE $0x94; BYTE $0x95; BYTE $0x96; BYTE $0x04\n\tBYTE $0x98; BYTE $0x99; BYTE $0x9a; BYTE $0x9b\n\tBYTE $0x14; BYTE $0x15; BYTE $0x9e; BYTE $0x1a\n\tBYTE $0x20; BYTE $0xa0; BYTE $0xe2; BYTE $0xe4\n\tBYTE $0xe0; BYTE $0xe1; BYTE $0xe3; BYTE $0xe5\n\tBYTE $0xe7; BYTE $0xf1; BYTE $0xa2; BYTE $0x2e\n\tBYTE $0x3c; BYTE $0x28; BYTE $0x2b; BYTE $0x7c\n\tBYTE $0x26; BYTE $0xe9; BYTE $0xea; BYTE $0xeb\n\tBYTE $0xe8; BYTE $0xed; BYTE $0xee; BYTE $0xef\n\tBYTE $0xec; BYTE $0xdf; BYTE $0x21; BYTE $0x24\n\tBYTE $0x2a; BYTE $0x29; BYTE $0x3b; BYTE $0x5e\n\tBYTE $0x2d; BYTE $0x2f; BYTE $0xc2; BYTE $0xc4\n\tBYTE $0xc0; BYTE $0xc1; BYTE $0xc3; BYTE $0xc5\n\tBYTE $0xc7; BYTE $0xd1; BYTE $0xa6; BYTE $0x2c\n\tBYTE $0x25; BYTE $0x5f; BYTE $0x3e; BYTE $0x3f\n\tBYTE $0xf8; BYTE $0xc9; BYTE $0xca; BYTE $0xcb\n\tBYTE $0xc8; BYTE $0xcd; BYTE $0xce; BYTE $0xcf\n\tBYTE $0xcc; BYTE $0x60; BYTE $0x3a; BYTE $0x23\n\tBYTE $0x40; BYTE $0x27; BYTE $0x3d; BYTE $0x22\n\tBYTE $0xd8; BYTE $0x61; BYTE $0x62; BYTE $0x63\n\tBYTE $0x64; BYTE $0x65; BYTE $0x66; BYTE $0x67\n\tBYTE $0x68; BYTE $0x69; BYTE $0xab; BYTE $0xbb\n\tBYTE $0xf0; BYTE $0xfd; BYTE $0xfe; BYTE $0xb1\n\tBYTE $0xb0; BYTE $0x6a; BYTE $0x6b; BYTE $0x6c\n\tBYTE $0x6d; BYTE $0x6e; BYTE $0x6f; BYTE $0x70\n\tBYTE $0x71; BYTE $0x72; BYTE $0xaa; BYTE $0xba\n\tBYTE $0xe6; BYTE $0xb8; BYTE $0xc6; BYTE $0xa4\n\tBYTE $0xb5; BYTE $0x7e; BYTE $0x73; BYTE $0x74\n\tBYTE $0x75; BYTE $0x76; BYTE $0x77; BYTE $0x78\n\tBYTE $0x79; BYTE $0x7a; BYTE $0xa1; BYTE $0xbf\n\tBYTE $0xd0; BYTE $0x5b; BYTE $0xde; BYTE $0xae\n\tBYTE $0xac; BYTE $0xa3; BYTE $0xa5; BYTE $0xb7\n\tBYTE $0xa9; BYTE $0xa7; BYTE $0xb6; BYTE $0xbc\n\tBYTE $0xbd; BYTE $0xbe; BYTE $0xdd; BYTE $0xa8\n\tBYTE $0xaf; BYTE $0x5d; BYTE $0xb4; BYTE $0xd7\n\tBYTE $0x7b; BYTE $0x41; BYTE $0x42; BYTE $0x43\n\tBYTE $0x44; BYTE $0x45; BYTE $0x46; BYTE $0x47\n\tBYTE $0x48; BYTE $0x49; BYTE $0xad; BYTE $0xf4\n\tBYTE $0xf6; BYTE $0xf2; BYTE $0xf3; BYTE $0xf5\n\tBYTE $0x7d; BYTE $0x4a; BYTE $0x4b; BYTE $0x4c\n\tBYTE $0x4d; BYTE $0x4e; BYTE $0x4f; BYTE $0x50\n\tBYTE $0x51; BYTE $0x52; BYTE $0xb9; BYTE $0xfb\n\tBYTE $0xfc; BYTE $0xf9; BYTE $0xfa; BYTE $0xff\n\tBYTE $0x5c; BYTE $0xf7; BYTE $0x53; BYTE $0x54\n\tBYTE $0x55; BYTE $0x56; BYTE $0x57; BYTE $0x58\n\tBYTE $0x59; BYTE $0x5a; BYTE $0xb2; BYTE $0xd4\n\tBYTE $0xd6; BYTE $0xd2; BYTE $0xd3; BYTE $0xd5\n\tBYTE $0x30; BYTE $0x31; BYTE $0x32; BYTE $0x33\n\tBYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x37\n\tBYTE $0x38; BYTE $0x39; BYTE $0xb3; BYTE $0xdb\n\tBYTE $0xdc; BYTE $0xd9; BYTE $0xda; BYTE $0x9f\n\nretry:\n\tWORD $0xB9931022 // TROO 2,2,b'0001'\n\tBVS  retry\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/cap_freebsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build freebsd\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c\n\nconst (\n\t// This is the version of CapRights this package understands. See C implementation for parallels.\n\tcapRightsGoVersion = CAP_RIGHTS_VERSION_00\n\tcapArSizeMin       = CAP_RIGHTS_VERSION_00 + 2\n\tcapArSizeMax       = capRightsGoVersion + 2\n)\n\nvar (\n\tbit2idx = []int{\n\t\t-1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1,\n\t\t4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n\t}\n)\n\nfunc capidxbit(right uint64) int {\n\treturn int((right >> 57) & 0x1f)\n}\n\nfunc rightToIndex(right uint64) (int, error) {\n\tidx := capidxbit(right)\n\tif idx < 0 || idx >= len(bit2idx) {\n\t\treturn -2, fmt.Errorf(\"index for right 0x%x out of range\", right)\n\t}\n\treturn bit2idx[idx], nil\n}\n\nfunc caprver(right uint64) int {\n\treturn int(right >> 62)\n}\n\nfunc capver(rights *CapRights) int {\n\treturn caprver(rights.Rights[0])\n}\n\nfunc caparsize(rights *CapRights) int {\n\treturn capver(rights) + 2\n}\n\n// CapRightsSet sets the permissions in setrights in rights.\nfunc CapRightsSet(rights *CapRights, setrights []uint64) error {\n\t// This is essentially a copy of cap_rights_vset()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range setrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch\")\n\t\t}\n\t\trights.Rights[i] |= right\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch (after assign)\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CapRightsClear clears the permissions in clearrights from rights.\nfunc CapRightsClear(rights *CapRights, clearrights []uint64) error {\n\t// This is essentially a copy of cap_rights_vclear()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range clearrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch\")\n\t\t}\n\t\trights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF)\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch (after assign)\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CapRightsIsSet checks whether all the permissions in setrights are present in rights.\nfunc CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) {\n\t// This is essentially a copy of cap_rights_is_vset()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn false, fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn false, errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range setrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn false, errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn false, errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn false, errors.New(\"index mismatch\")\n\t\t}\n\t\tif (rights.Rights[i] & right) != right {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\n\treturn true, nil\n}\n\nfunc capright(idx uint64, bit uint64) uint64 {\n\treturn ((1 << (57 + idx)) | bit)\n}\n\n// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights.\n// See man cap_rights_init(3) and rights(4).\nfunc CapRightsInit(rights []uint64) (*CapRights, error) {\n\tvar r CapRights\n\tr.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0)\n\tr.Rights[1] = capright(1, 0)\n\n\terr := CapRightsSet(&r, rights)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &r, nil\n}\n\n// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights.\n// The capability rights on fd can never be increased by CapRightsLimit.\n// See man cap_rights_limit(2) and rights(4).\nfunc CapRightsLimit(fd uintptr, rights *CapRights) error {\n\treturn capRightsLimit(int(fd), rights)\n}\n\n// CapRightsGet returns a CapRights structure containing the operations permitted on fd.\n// See man cap_rights_get(3) and rights(4).\nfunc CapRightsGet(fd uintptr) (*CapRights, error) {\n\tr, err := CapRightsInit(nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = capRightsGet(capRightsGoVersion, int(fd), r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn r, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/constants.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nconst (\n\tR_OK = 0x4\n\tW_OK = 0x2\n\tX_OK = 0x1\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_aix_ppc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by AIX.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 16) & 0xffff)\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff)\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn uint64(((major) << 16) | (minor))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_aix_ppc64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc64\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used AIX.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x3fffffff00000000) >> 32)\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32((dev & 0x00000000ffffffff) >> 0)\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tvar DEVNO64 uint64\n\tDEVNO64 = 0x8000000000000000\n\treturn ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_darwin.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in Darwin's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of a Darwin device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 24) & 0xff)\n}\n\n// Minor returns the minor component of a Darwin device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffffff)\n}\n\n// Mkdev returns a Darwin device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 24) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_dragonfly.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in Dragonfly's sys/types.h header.\n//\n// The information below is extracted and adapted from sys/types.h:\n//\n// Minor gives a cookie instead of an index since in order to avoid changing the\n// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for\n// devices that don't use them.\n\npackage unix\n\n// Major returns the major component of a DragonFlyBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 8) & 0xff)\n}\n\n// Minor returns the minor component of a DragonFlyBSD device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff00ff)\n}\n\n// Mkdev returns a DragonFlyBSD device number generated from the given major and\n// minor components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 8) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_freebsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in FreeBSD's sys/types.h header.\n//\n// The information below is extracted and adapted from sys/types.h:\n//\n// Minor gives a cookie instead of an index since in order to avoid changing the\n// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for\n// devices that don't use them.\n\npackage unix\n\n// Major returns the major component of a FreeBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 8) & 0xff)\n}\n\n// Minor returns the minor component of a FreeBSD device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff00ff)\n}\n\n// Mkdev returns a FreeBSD device number generated from the given major and\n// minor components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 8) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_linux.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by the Linux kernel and glibc.\n//\n// The information below is extracted and adapted from bits/sysmacros.h in the\n// glibc sources:\n//\n// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's\n// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major\n// number and m is a hex digit of the minor number. This is backward compatible\n// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also\n// backward compatible with the Linux kernel, which for some architectures uses\n// 32-bit dev_t, encoded as mmmM MMmm.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\tmajor := uint32((dev & 0x00000000000fff00) >> 8)\n\tmajor |= uint32((dev & 0xfffff00000000000) >> 32)\n\treturn major\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x00000000000000ff) >> 0)\n\tminor |= uint32((dev & 0x00000ffffff00000) >> 12)\n\treturn minor\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) & 0x00000fff) << 8\n\tdev |= (uint64(major) & 0xfffff000) << 32\n\tdev |= (uint64(minor) & 0x000000ff) << 0\n\tdev |= (uint64(minor) & 0xffffff00) << 12\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_netbsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in NetBSD's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of a NetBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x000fff00) >> 8)\n}\n\n// Minor returns the minor component of a NetBSD device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x000000ff) >> 0)\n\tminor |= uint32((dev & 0xfff00000) >> 12)\n\treturn minor\n}\n\n// Mkdev returns a NetBSD device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) << 8) & 0x000fff00\n\tdev |= (uint64(minor) << 12) & 0xfff00000\n\tdev |= (uint64(minor) << 0) & 0x000000ff\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_openbsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in OpenBSD's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of an OpenBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x0000ff00) >> 8)\n}\n\n// Minor returns the minor component of an OpenBSD device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x000000ff) >> 0)\n\tminor |= uint32((dev & 0xffff0000) >> 8)\n\treturn minor\n}\n\n// Mkdev returns an OpenBSD device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) << 8) & 0x0000ff00\n\tdev |= (uint64(minor) << 8) & 0xffff0000\n\tdev |= (uint64(minor) << 0) & 0x000000ff\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_zos.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by z/OS.\n//\n// The information below is extracted and adapted from <sys/stat.h> macros.\n\npackage unix\n\n// Major returns the major component of a z/OS device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 16) & 0x0000FFFF)\n}\n\n// Minor returns the minor component of a z/OS device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0x0000FFFF)\n}\n\n// Mkdev returns a z/OS device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 16) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dirent.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport \"unsafe\"\n\n// readInt returns the size-bytes unsigned integer in native byte order at offset off.\nfunc readInt(b []byte, off, size uintptr) (u uint64, ok bool) {\n\tif len(b) < int(off+size) {\n\t\treturn 0, false\n\t}\n\tif isBigEndian {\n\t\treturn readIntBE(b[off:], size), true\n\t}\n\treturn readIntLE(b[off:], size), true\n}\n\nfunc readIntBE(b []byte, size uintptr) uint64 {\n\tswitch size {\n\tcase 1:\n\t\treturn uint64(b[0])\n\tcase 2:\n\t\t_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[1]) | uint64(b[0])<<8\n\tcase 4:\n\t\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24\n\tcase 8:\n\t\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |\n\t\t\tuint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56\n\tdefault:\n\t\tpanic(\"syscall: readInt with unsupported size\")\n\t}\n}\n\nfunc readIntLE(b []byte, size uintptr) uint64 {\n\tswitch size {\n\tcase 1:\n\t\treturn uint64(b[0])\n\tcase 2:\n\t\t_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8\n\tcase 4:\n\t\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24\n\tcase 8:\n\t\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n\tdefault:\n\t\tpanic(\"syscall: readInt with unsupported size\")\n\t}\n}\n\n// ParseDirent parses up to max directory entries in buf,\n// appending the names to names. It returns the number of\n// bytes consumed from buf, the number of entries added\n// to names, and the new names slice.\nfunc ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {\n\toriglen := len(buf)\n\tcount = 0\n\tfor max != 0 && len(buf) > 0 {\n\t\treclen, ok := direntReclen(buf)\n\t\tif !ok || reclen > uint64(len(buf)) {\n\t\t\treturn origlen, count, names\n\t\t}\n\t\trec := buf[:reclen]\n\t\tbuf = buf[reclen:]\n\t\tino, ok := direntIno(rec)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tif ino == 0 { // File absent in directory.\n\t\t\tcontinue\n\t\t}\n\t\tconst namoff = uint64(unsafe.Offsetof(Dirent{}.Name))\n\t\tnamlen, ok := direntNamlen(rec)\n\t\tif !ok || namoff+namlen > uint64(len(rec)) {\n\t\t\tbreak\n\t\t}\n\t\tname := rec[namoff : namoff+namlen]\n\t\tfor i, c := range name {\n\t\t\tif c == 0 {\n\t\t\t\tname = name[:i]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Check for useless names before allocating a string.\n\t\tif string(name) == \".\" || string(name) == \"..\" {\n\t\t\tcontinue\n\t\t}\n\t\tmax--\n\t\tcount++\n\t\tnames = append(names, string(name))\n\t}\n\treturn origlen - len(buf), count, names\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/endian_big.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n//\n//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64\n\npackage unix\n\nconst isBigEndian = true\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/endian_little.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n//\n//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh\n\npackage unix\n\nconst isBigEndian = false\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/env_unix.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// Unix environment variables.\n\npackage unix\n\nimport \"syscall\"\n\nfunc Getenv(key string) (value string, found bool) {\n\treturn syscall.Getenv(key)\n}\n\nfunc Setenv(key, value string) error {\n\treturn syscall.Setenv(key, value)\n}\n\nfunc Clearenv() {\n\tsyscall.Clearenv()\n}\n\nfunc Environ() []string {\n\treturn syscall.Environ()\n}\n\nfunc Unsetenv(key string) error {\n\treturn syscall.Unsetenv(key)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build dragonfly || freebsd || linux || netbsd\n\npackage unix\n\nimport \"unsafe\"\n\n// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux\n// systems by fcntl_linux_32bit.go to be SYS_FCNTL64.\nvar fcntl64Syscall uintptr = SYS_FCNTL\n\nfunc fcntl(fd int, cmd, arg int) (int, error) {\n\tvalptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tvar err error\n\tif errno != 0 {\n\t\terr = errno\n\t}\n\treturn int(valptr), err\n}\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn fcntl(int(fd), cmd, arg)\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))\n\tif errno == 0 {\n\t\treturn nil\n\t}\n\treturn errno\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl_darwin.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport \"unsafe\"\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn fcntl(int(fd), cmd, arg)\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))\n\treturn err\n}\n\n// FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command.\nfunc FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error {\n\t_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore))))\n\treturn err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (linux && 386) || (linux && arm) || (linux && mips) || (linux && mipsle) || (linux && ppc)\n\npackage unix\n\nfunc init() {\n\t// On 32-bit Linux systems, the fcntl syscall that matches Go's\n\t// Flock_t type is SYS_FCNTL64, not SYS_FCNTL.\n\tfcntl64Syscall = SYS_FCNTL64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fdset.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\n// Set adds fd to the set fds.\nfunc (fds *FdSet) Set(fd int) {\n\tfds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS))\n}\n\n// Clear removes fd from the set fds.\nfunc (fds *FdSet) Clear(fd int) {\n\tfds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS))\n}\n\n// IsSet returns whether fd is in the set fds.\nfunc (fds *FdSet) IsSet(fd int) bool {\n\treturn fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0\n}\n\n// Zero clears the set fds.\nfunc (fds *FdSet) Zero() {\n\tfor i := range fds.Bits {\n\t\tfds.Bits[i] = 0\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo && !aix && !hurd\n\npackage unix\n\nimport \"syscall\"\n\n// We can't use the gc-syntax .s files for gccgo. On the plus side\n// much of the functionality can be written directly in Go.\n\nfunc realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr)\n\nfunc realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)\n\nfunc SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {\n\tsyscall.Entersyscall()\n\tr := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0\n}\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {\n\tr := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\treturn r, 0\n}\n\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tr, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)\n\treturn r, 0, syscall.Errno(errno)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo_c.c",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo && !aix && !hurd\n\n#include <errno.h>\n#include <stdint.h>\n#include <unistd.h>\n\n#define _STRINGIFY2_(x) #x\n#define _STRINGIFY_(x) _STRINGIFY2_(x)\n#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)\n\n// Call syscall from C code because the gccgo support for calling from\n// Go to C does not support varargs functions.\n\nstruct ret {\n\tuintptr_t r;\n\tuintptr_t err;\n};\n\nstruct ret gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n  __asm__(GOSYM_PREFIX GOPKGPATH \".realSyscall\");\n\nstruct ret\ngccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n{\n\tstruct ret r;\n\n\terrno = 0;\n\tr.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n\tr.err = errno;\n\treturn r;\n}\n\nuintptr_t gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n  __asm__(GOSYM_PREFIX GOPKGPATH \".realSyscallNoError\");\n\nuintptr_t\ngccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n{\n\treturn syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo && linux && amd64\n\npackage unix\n\nimport \"syscall\"\n\n//extern gettimeofday\nfunc realGettimeofday(*Timeval, *byte) int32\n\nfunc gettimeofday(tv *Timeval) (err syscall.Errno) {\n\tr := realGettimeofday(tv, nil)\n\tif r < 0 {\n\t\treturn syscall.GetErrno()\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ifreq_linux.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// Helpers for dealing with ifreq since it contains a union and thus requires a\n// lot of unsafe.Pointer casts to use properly.\n\n// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq\n// contains an interface name and a union of arbitrary data which can be\n// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq\n// function.\n//\n// Use the Name method to access the stored interface name. The union data\n// fields can be get and set using the following methods:\n//   - Uint16/SetUint16: flags\n//   - Uint32/SetUint32: ifindex, metric, mtu\ntype Ifreq struct{ raw ifreq }\n\n// NewIfreq creates an Ifreq with the input network interface name after\n// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required)\n// bytes.\nfunc NewIfreq(name string) (*Ifreq, error) {\n\t// Leave room for terminating NULL byte.\n\tif len(name) >= IFNAMSIZ {\n\t\treturn nil, EINVAL\n\t}\n\n\tvar ifr ifreq\n\tcopy(ifr.Ifrn[:], name)\n\n\treturn &Ifreq{raw: ifr}, nil\n}\n\n// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc.\n\n// Name returns the interface name associated with the Ifreq.\nfunc (ifr *Ifreq) Name() string {\n\treturn ByteSliceToString(ifr.raw.Ifrn[:])\n}\n\n// According to netdevice(7), only AF_INET addresses are returned for numerous\n// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port\n// field and other data is always empty.\n\n// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C\n// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not\n// AF_INET, an error is returned.\nfunc (ifr *Ifreq) Inet4Addr() ([]byte, error) {\n\traw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]))\n\tif raw.Family != AF_INET {\n\t\t// Cannot safely interpret raw.Addr bytes as an IPv4 address.\n\t\treturn nil, EINVAL\n\t}\n\n\treturn raw.Addr[:], nil\n}\n\n// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an\n// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length\n// or an error will be returned.\nfunc (ifr *Ifreq) SetInet4Addr(v []byte) error {\n\tif len(v) != 4 {\n\t\treturn EINVAL\n\t}\n\n\tvar addr [4]byte\n\tcopy(addr[:], v)\n\n\tifr.clear()\n\t*(*RawSockaddrInet4)(\n\t\tunsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]),\n\t) = RawSockaddrInet4{\n\t\t// Always set IP family as ioctls would require it anyway.\n\t\tFamily: AF_INET,\n\t\tAddr:   addr,\n\t}\n\n\treturn nil\n}\n\n// Uint16 returns the Ifreq union data as a C short/Go uint16 value.\nfunc (ifr *Ifreq) Uint16() uint16 {\n\treturn *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0]))\n}\n\n// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data.\nfunc (ifr *Ifreq) SetUint16(v uint16) {\n\tifr.clear()\n\t*(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v\n}\n\n// Uint32 returns the Ifreq union data as a C int/Go uint32 value.\nfunc (ifr *Ifreq) Uint32() uint32 {\n\treturn *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0]))\n}\n\n// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data.\nfunc (ifr *Ifreq) SetUint32(v uint32) {\n\tifr.clear()\n\t*(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v\n}\n\n// clear zeroes the ifreq's union field to prevent trailing garbage data from\n// being sent to the kernel if an ifreq is reused.\nfunc (ifr *Ifreq) clear() {\n\tfor i := range ifr.raw.Ifru {\n\t\tifr.raw.Ifru[i] = 0\n\t}\n}\n\n// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as\n// IoctlGetEthtoolDrvinfo which use these APIs under the hood.\n\n// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData,\n// use the Ifreq.withData method.\ntype ifreqData struct {\n\tname [IFNAMSIZ]byte\n\t// A type separate from ifreq is required in order to comply with the\n\t// unsafe.Pointer rules since the \"pointer-ness\" of data would not be\n\t// preserved if it were cast into the byte array of a raw ifreq.\n\tdata unsafe.Pointer\n\t// Pad to the same size as ifreq.\n\t_ [len(ifreq{}.Ifru) - SizeofPtr]byte\n}\n\n// withData produces an ifreqData with the pointer p set for ioctls which require\n// arbitrary pointer data.\nfunc (ifr Ifreq) withData(p unsafe.Pointer) ifreqData {\n\treturn ifreqData{\n\t\tname: ifr.raw.Ifrn,\n\t\tdata: p,\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_linux.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport \"unsafe\"\n\n// IoctlRetInt performs an ioctl operation specified by req on a device\n// associated with opened file descriptor fd, and returns a non-negative\n// integer that is returned by the ioctl syscall.\nfunc IoctlRetInt(fd int, req uint) (int, error) {\n\tret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(ret), nil\n}\n\nfunc IoctlGetUint32(fd int, req uint) (uint32, error) {\n\tvar value uint32\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetRTCTime(fd int) (*RTCTime, error) {\n\tvar value RTCTime\n\terr := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlSetRTCTime(fd int, value *RTCTime) error {\n\treturn ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value))\n}\n\nfunc IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {\n\tvar value RTCWkAlrm\n\terr := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {\n\treturn ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value))\n}\n\n// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network\n// device specified by ifname.\nfunc IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {\n\tifr, err := NewIfreq(ifname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvalue := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO}\n\tifrd := ifr.withData(unsafe.Pointer(&value))\n\n\terr = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)\n\treturn &value, err\n}\n\n// IoctlGetEthtoolTsInfo fetches ethtool timestamping and PHC\n// association for the network device specified by ifname.\nfunc IoctlGetEthtoolTsInfo(fd int, ifname string) (*EthtoolTsInfo, error) {\n\tifr, err := NewIfreq(ifname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvalue := EthtoolTsInfo{Cmd: ETHTOOL_GET_TS_INFO}\n\tifrd := ifr.withData(unsafe.Pointer(&value))\n\n\terr = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)\n\treturn &value, err\n}\n\n// IoctlGetHwTstamp retrieves the hardware timestamping configuration\n// for the network device specified by ifname.\nfunc IoctlGetHwTstamp(fd int, ifname string) (*HwTstampConfig, error) {\n\tifr, err := NewIfreq(ifname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvalue := HwTstampConfig{}\n\tifrd := ifr.withData(unsafe.Pointer(&value))\n\n\terr = ioctlIfreqData(fd, SIOCGHWTSTAMP, &ifrd)\n\treturn &value, err\n}\n\n// IoctlSetHwTstamp updates the hardware timestamping configuration for\n// the network device specified by ifname.\nfunc IoctlSetHwTstamp(fd int, ifname string, cfg *HwTstampConfig) error {\n\tifr, err := NewIfreq(ifname)\n\tif err != nil {\n\t\treturn err\n\t}\n\tifrd := ifr.withData(unsafe.Pointer(cfg))\n\treturn ioctlIfreqData(fd, SIOCSHWTSTAMP, &ifrd)\n}\n\n// FdToClockID derives the clock ID from the file descriptor number\n// - see clock_gettime(3), FD_TO_CLOCKID macros. The resulting ID is\n// suitable for system calls like ClockGettime.\nfunc FdToClockID(fd int) int32 { return int32((int(^fd) << 3) | 3) }\n\n// IoctlPtpClockGetcaps returns the description of a given PTP device.\nfunc IoctlPtpClockGetcaps(fd int) (*PtpClockCaps, error) {\n\tvar value PtpClockCaps\n\terr := ioctlPtr(fd, PTP_CLOCK_GETCAPS2, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlPtpSysOffsetPrecise returns a description of the clock\n// offset compared to the system clock.\nfunc IoctlPtpSysOffsetPrecise(fd int) (*PtpSysOffsetPrecise, error) {\n\tvar value PtpSysOffsetPrecise\n\terr := ioctlPtr(fd, PTP_SYS_OFFSET_PRECISE2, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlPtpSysOffsetExtended returns an extended description of the\n// clock offset compared to the system clock. The samples parameter\n// specifies the desired number of measurements.\nfunc IoctlPtpSysOffsetExtended(fd int, samples uint) (*PtpSysOffsetExtended, error) {\n\tvalue := PtpSysOffsetExtended{Samples: uint32(samples)}\n\terr := ioctlPtr(fd, PTP_SYS_OFFSET_EXTENDED2, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlPtpPinGetfunc returns the configuration of the specified\n// I/O pin on given PTP device.\nfunc IoctlPtpPinGetfunc(fd int, index uint) (*PtpPinDesc, error) {\n\tvalue := PtpPinDesc{Index: uint32(index)}\n\terr := ioctlPtr(fd, PTP_PIN_GETFUNC2, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlPtpPinSetfunc updates configuration of the specified PTP\n// I/O pin.\nfunc IoctlPtpPinSetfunc(fd int, pd *PtpPinDesc) error {\n\treturn ioctlPtr(fd, PTP_PIN_SETFUNC2, unsafe.Pointer(pd))\n}\n\n// IoctlPtpPeroutRequest configures the periodic output mode of the\n// PTP I/O pins.\nfunc IoctlPtpPeroutRequest(fd int, r *PtpPeroutRequest) error {\n\treturn ioctlPtr(fd, PTP_PEROUT_REQUEST2, unsafe.Pointer(r))\n}\n\n// IoctlPtpExttsRequest configures the external timestamping mode\n// of the PTP I/O pins.\nfunc IoctlPtpExttsRequest(fd int, r *PtpExttsRequest) error {\n\treturn ioctlPtr(fd, PTP_EXTTS_REQUEST2, unsafe.Pointer(r))\n}\n\n// IoctlGetWatchdogInfo fetches information about a watchdog device from the\n// Linux watchdog API. For more information, see:\n// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.\nfunc IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {\n\tvar value WatchdogInfo\n\terr := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlWatchdogKeepalive issues a keepalive ioctl to a watchdog device. For\n// more information, see:\n// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.\nfunc IoctlWatchdogKeepalive(fd int) error {\n\t// arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr.\n\treturn ioctl(fd, WDIOC_KEEPALIVE, 0)\n}\n\n// IoctlFileCloneRange performs an FICLONERANGE ioctl operation to clone the\n// range of data conveyed in value to the file associated with the file\n// descriptor destFd. See the ioctl_ficlonerange(2) man page for details.\nfunc IoctlFileCloneRange(destFd int, value *FileCloneRange) error {\n\treturn ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value))\n}\n\n// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file\n// associated with the file description srcFd to the file associated with the\n// file descriptor destFd. See the ioctl_ficlone(2) man page for details.\nfunc IoctlFileClone(destFd, srcFd int) error {\n\treturn ioctl(destFd, FICLONE, uintptr(srcFd))\n}\n\ntype FileDedupeRange struct {\n\tSrc_offset uint64\n\tSrc_length uint64\n\tReserved1  uint16\n\tReserved2  uint32\n\tInfo       []FileDedupeRangeInfo\n}\n\ntype FileDedupeRangeInfo struct {\n\tDest_fd       int64\n\tDest_offset   uint64\n\tBytes_deduped uint64\n\tStatus        int32\n\tReserved      uint32\n}\n\n// IoctlFileDedupeRange performs an FIDEDUPERANGE ioctl operation to share the\n// range of data conveyed in value from the file associated with the file\n// descriptor srcFd to the value.Info destinations. See the\n// ioctl_fideduperange(2) man page for details.\nfunc IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {\n\tbuf := make([]byte, SizeofRawFileDedupeRange+\n\t\tlen(value.Info)*SizeofRawFileDedupeRangeInfo)\n\trawrange := (*RawFileDedupeRange)(unsafe.Pointer(&buf[0]))\n\trawrange.Src_offset = value.Src_offset\n\trawrange.Src_length = value.Src_length\n\trawrange.Dest_count = uint16(len(value.Info))\n\trawrange.Reserved1 = value.Reserved1\n\trawrange.Reserved2 = value.Reserved2\n\n\tfor i := range value.Info {\n\t\trawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(\n\t\t\tuintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +\n\t\t\t\tuintptr(i*SizeofRawFileDedupeRangeInfo)))\n\t\trawinfo.Dest_fd = value.Info[i].Dest_fd\n\t\trawinfo.Dest_offset = value.Info[i].Dest_offset\n\t\trawinfo.Bytes_deduped = value.Info[i].Bytes_deduped\n\t\trawinfo.Status = value.Info[i].Status\n\t\trawinfo.Reserved = value.Info[i].Reserved\n\t}\n\n\terr := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0]))\n\n\t// Output\n\tfor i := range value.Info {\n\t\trawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(\n\t\t\tuintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +\n\t\t\t\tuintptr(i*SizeofRawFileDedupeRangeInfo)))\n\t\tvalue.Info[i].Dest_fd = rawinfo.Dest_fd\n\t\tvalue.Info[i].Dest_offset = rawinfo.Dest_offset\n\t\tvalue.Info[i].Bytes_deduped = rawinfo.Bytes_deduped\n\t\tvalue.Info[i].Status = rawinfo.Status\n\t\tvalue.Info[i].Reserved = rawinfo.Reserved\n\t}\n\n\treturn err\n}\n\nfunc IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error {\n\treturn ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value))\n}\n\nfunc IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) {\n\tvar value HIDRawDevInfo\n\terr := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlHIDGetRawName(fd int) (string, error) {\n\tvar value [_HIDIOCGRAWNAME_LEN]byte\n\terr := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0]))\n\treturn ByteSliceToString(value[:]), err\n}\n\nfunc IoctlHIDGetRawPhys(fd int) (string, error) {\n\tvar value [_HIDIOCGRAWPHYS_LEN]byte\n\terr := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0]))\n\treturn ByteSliceToString(value[:]), err\n}\n\nfunc IoctlHIDGetRawUniq(fd int) (string, error) {\n\tvar value [_HIDIOCGRAWUNIQ_LEN]byte\n\terr := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0]))\n\treturn ByteSliceToString(value[:]), err\n}\n\n// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or\n// output. See the netdevice(7) man page for details.\nfunc IoctlIfreq(fd int, req uint, value *Ifreq) error {\n\t// It is possible we will add more fields to *Ifreq itself later to prevent\n\t// misuse, so pass the raw *ifreq directly.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&value.raw))\n}\n\n// TODO(mdlayher): export if and when IfreqData is exported.\n\n// ioctlIfreqData performs an ioctl using an ifreqData structure for input\n// and/or output. See the netdevice(7) man page for details.\nfunc ioctlIfreqData(fd int, req uint, value *ifreqData) error {\n\t// The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are\n\t// identical so pass *IfreqData directly.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an\n// existing KCM socket, returning a structure containing the file descriptor of\n// the new socket.\nfunc IoctlKCMClone(fd int) (*KCMClone, error) {\n\tvar info KCMClone\n\tif err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &info, nil\n}\n\n// IoctlKCMAttach attaches a TCP socket and associated BPF program file\n// descriptor to a multiplexor.\nfunc IoctlKCMAttach(fd int, info KCMAttach) error {\n\treturn ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info))\n}\n\n// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor.\nfunc IoctlKCMUnattach(fd int, info KCMUnattach) error {\n\treturn ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info))\n}\n\n// IoctlLoopGetStatus64 gets the status of the loop device associated with the\n// file descriptor fd using the LOOP_GET_STATUS64 operation.\nfunc IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) {\n\tvar value LoopInfo64\n\tif err := ioctlPtr(fd, LOOP_GET_STATUS64, unsafe.Pointer(&value)); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &value, nil\n}\n\n// IoctlLoopSetStatus64 sets the status of the loop device associated with the\n// file descriptor fd using the LOOP_SET_STATUS64 operation.\nfunc IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {\n\treturn ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value))\n}\n\n// IoctlLoopConfigure configures all loop device parameters in a single step\nfunc IoctlLoopConfigure(fd int, value *LoopConfig) error {\n\treturn ioctlPtr(fd, LOOP_CONFIGURE, unsafe.Pointer(value))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_signed.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || solaris\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req int, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\n// IoctlSetPointerInt performs an ioctl operation which sets an\n// integer value on fd, using the specified request number. The ioctl\n// argument is called with a pointer to the integer value, rather than\n// passing the integer value directly.\nfunc IoctlSetPointerInt(fd int, req int, value int) error {\n\tv := int32(value)\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&v))\n}\n\n// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.\n//\n// To change fd's window size, the req argument should be TIOCSWINSZ.\nfunc IoctlSetWinsize(fd int, req int, value *Winsize) error {\n\t// TODO: if we get the chance, remove the req parameter and\n\t// hardcode TIOCSWINSZ.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlSetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value will usually be TCSETA or TIOCSETA.\nfunc IoctlSetTermios(fd int, req int, value *Termios) error {\n\t// TODO: if we get the chance, remove the req parameter.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\n//\n// A few ioctl requests use the return value as an output parameter;\n// for those, IoctlRetInt should be used instead of this function.\nfunc IoctlGetInt(fd int, req int) (int, error) {\n\tvar value int\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req int) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req int) (*Termios, error) {\n\tvar value Termios\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_unsigned.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\n// IoctlSetPointerInt performs an ioctl operation which sets an\n// integer value on fd, using the specified request number. The ioctl\n// argument is called with a pointer to the integer value, rather than\n// passing the integer value directly.\nfunc IoctlSetPointerInt(fd int, req uint, value int) error {\n\tv := int32(value)\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&v))\n}\n\n// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.\n//\n// To change fd's window size, the req argument should be TIOCSWINSZ.\nfunc IoctlSetWinsize(fd int, req uint, value *Winsize) error {\n\t// TODO: if we get the chance, remove the req parameter and\n\t// hardcode TIOCSWINSZ.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlSetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value will usually be TCSETA or TIOCSETA.\nfunc IoctlSetTermios(fd int, req uint, value *Termios) error {\n\t// TODO: if we get the chance, remove the req parameter.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\n//\n// A few ioctl requests use the return value as an output parameter;\n// for those, IoctlRetInt should be used instead of this function.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_zos.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req int, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\n// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.\n//\n// To change fd's window size, the req argument should be TIOCSWINSZ.\nfunc IoctlSetWinsize(fd int, req int, value *Winsize) error {\n\t// TODO: if we get the chance, remove the req parameter and\n\t// hardcode TIOCSWINSZ.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlSetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value is expected to be TCSETS, TCSETSW, or TCSETSF\nfunc IoctlSetTermios(fd int, req int, value *Termios) error {\n\tif (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) {\n\t\treturn ENOSYS\n\t}\n\terr := Tcsetattr(fd, int(req), value)\n\truntime.KeepAlive(value)\n\treturn err\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\n//\n// A few ioctl requests use the return value as an output parameter;\n// for those, IoctlRetInt should be used instead of this function.\nfunc IoctlGetInt(fd int, req int) (int, error) {\n\tvar value int\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req int) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlGetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value is expected to be TCGETS\nfunc IoctlGetTermios(fd int, req int) (*Termios, error) {\n\tvar value Termios\n\tif req != TCGETS {\n\t\treturn &value, ENOSYS\n\t}\n\terr := Tcgetattr(fd, &value)\n\treturn &value, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mkall.sh",
    "content": "#!/usr/bin/env bash\n# Copyright 2009 The Go Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style\n# license that can be found in the LICENSE file.\n\n# This script runs or (given -n) prints suggested commands to generate files for\n# the Architecture/OS specified by the GOARCH and GOOS environment variables.\n# See README.md for more information about how the build system works.\n\nGOOSARCH=\"${GOOS}_${GOARCH}\"\n\n# defaults\nmksyscall=\"go run mksyscall.go\"\nmkerrors=\"./mkerrors.sh\"\nzerrors=\"zerrors_$GOOSARCH.go\"\nmksysctl=\"\"\nzsysctl=\"zsysctl_$GOOSARCH.go\"\nmksysnum=\nmktypes=\nmkasm=\nrun=\"sh\"\ncmd=\"\"\n\ncase \"$1\" in\n-syscalls)\n\tfor i in zsyscall*go\n\tdo\n\t\t# Run the command line that appears in the first line\n\t\t# of the generated file to regenerate it.\n\t\tsed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i\n\t\trm _$i\n\tdone\n\texit 0\n\t;;\n-n)\n\trun=\"cat\"\n\tcmd=\"echo\"\n\tshift\nesac\n\ncase \"$#\" in\n0)\n\t;;\n*)\n\techo 'usage: mkall.sh [-n]' 1>&2\n\texit 2\nesac\n\nif [[ \"$GOOS\" = \"linux\" ]]; then\n\t# Use the Docker-based build system\n\t# Files generated through docker (use $cmd so you can Ctl-C the build or run)\n\t$cmd docker build --tag generate:$GOOS $GOOS\n\t$cmd docker run --interactive --tty --volume $(cd -- \"$(dirname -- \"$0\")/..\" && pwd):/build generate:$GOOS\n\texit\nfi\n\nGOOSARCH_in=syscall_$GOOSARCH.go\ncase \"$GOOSARCH\" in\n_* | *_ | _)\n\techo 'undefined $GOOS_$GOARCH:' \"$GOOSARCH\" 1>&2\n\texit 1\n\t;;\naix_ppc)\n\tmkerrors=\"$mkerrors -maix32\"\n\tmksyscall=\"go run mksyscall_aix_ppc.go -aix\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\naix_ppc64)\n\tmkerrors=\"$mkerrors -maix64\"\n\tmksyscall=\"go run mksyscall_aix_ppc64.go -aix\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\ndarwin_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\tmkasm=\"go run mkasm.go\"\n\t;;\ndarwin_arm64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\tmkasm=\"go run mkasm.go\"\n\t;;\ndragonfly_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -dragonfly\"\n\tmksysnum=\"go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nfreebsd_386)\n\tmkerrors=\"$mkerrors -m32\"\n\tmksyscall=\"go run mksyscall.go -l32\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nfreebsd_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nfreebsd_arm)\n\tmkerrors=\"$mkerrors\"\n\tmksyscall=\"go run mksyscall.go -l32 -arm\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nfreebsd_arm64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nfreebsd_riscv64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nnetbsd_386)\n\tmkerrors=\"$mkerrors -m32\"\n\tmksyscall=\"go run mksyscall.go -l32 -netbsd\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nnetbsd_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -netbsd\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nnetbsd_arm)\n\tmkerrors=\"$mkerrors\"\n\tmksyscall=\"go run mksyscall.go -l32 -netbsd -arm\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nnetbsd_arm64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -netbsd\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nopenbsd_386)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m32\"\n\tmksyscall=\"go run mksyscall.go -l32 -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nopenbsd_amd64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nopenbsd_arm)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors\"\n\tmksyscall=\"go run mksyscall.go -l32 -openbsd -arm -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_arm64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_mips64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_ppc64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_riscv64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nsolaris_amd64)\n\tmksyscall=\"go run mksyscall_solaris.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nillumos_amd64)\n        mksyscall=\"go run mksyscall_solaris.go\"\n\tmkerrors=\n\tmksysnum=\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\n*)\n\techo 'unrecognized $GOOS_$GOARCH: ' \"$GOOSARCH\" 1>&2\n\texit 1\n\t;;\nesac\n\n(\n\tif [ -n \"$mkerrors\" ]; then echo \"$mkerrors |gofmt >$zerrors\"; fi\n\tcase \"$GOOS\" in\n\t*)\n\t\tsyscall_goos=\"syscall_$GOOS.go\"\n\t\tcase \"$GOOS\" in\n\t\tdarwin | dragonfly | freebsd | netbsd | openbsd)\n\t\t\tsyscall_goos=\"syscall_bsd.go $syscall_goos\"\n\t\t\t;;\n\t\tesac\n\t\tif [ -n \"$mksyscall\" ]; then\n\t\t\tif [ \"$GOOSARCH\" == \"aix_ppc64\" ]; then\n\t\t\t\t# aix/ppc64 script generates files instead of writing to stdin.\n\t\t\t\techo \"$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_\"$GOOSARCH\"_gccgo.go && gofmt -w zsyscall_\"$GOOSARCH\"_gc.go \" ;\n\t\t\telif [ \"$GOOS\" == \"illumos\" ]; then\n\t\t\t        # illumos code generation requires a --illumos switch\n\t\t\t        echo \"$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go\";\n\t\t\t        # illumos implies solaris, so solaris code generation is also required\n\t\t\t\techo \"$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go\";\n\t\t\telse\n\t\t\t\techo \"$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go\";\n\t\t\tfi\n\t\tfi\n\tesac\n\tif [ -n \"$mksysctl\" ]; then echo \"$mksysctl |gofmt >$zsysctl\"; fi\n\tif [ -n \"$mksysnum\" ]; then echo \"$mksysnum |gofmt >zsysnum_$GOOSARCH.go\"; fi\n\tif [ -n \"$mktypes\" ]; then echo \"$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go\"; fi\n\tif [ -n \"$mkasm\" ]; then echo \"$mkasm $GOOS $GOARCH\"; fi\n) | $run\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mkerrors.sh",
    "content": "#!/usr/bin/env bash\n# Copyright 2009 The Go Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style\n# license that can be found in the LICENSE file.\n\n# Generate Go code listing errors and other #defined constant\n# values (ENAMETOOLONG etc.), by asking the preprocessor\n# about the definitions.\n\nunset LANG\nexport LC_ALL=C\nexport LC_CTYPE=C\n\nif test -z \"$GOARCH\" -o -z \"$GOOS\"; then\n\techo 1>&2 \"GOARCH or GOOS not defined in environment\"\n\texit 1\nfi\n\n# Check that we are using the new build system if we should\nif [[ \"$GOOS\" = \"linux\" ]] && [[ \"$GOLANG_SYS_BUILD\" != \"docker\" ]]; then\n\techo 1>&2 \"In the Docker based build system, mkerrors should not be called directly.\"\n\techo 1>&2 \"See README.md\"\n\texit 1\nfi\n\nif [[ \"$GOOS\" = \"aix\" ]]; then\n\tCC=${CC:-gcc}\nelse\n\tCC=${CC:-cc}\nfi\n\nif [[ \"$GOOS\" = \"solaris\" ]]; then\n\t# Assumes GNU versions of utilities in PATH.\n\texport PATH=/usr/gnu/bin:$PATH\nfi\n\nuname=$(uname)\n\nincludes_AIX='\n#include <net/if.h>\n#include <net/netopt.h>\n#include <netinet/ip_mroute.h>\n#include <sys/protosw.h>\n#include <sys/stropts.h>\n#include <sys/mman.h>\n#include <sys/poll.h>\n#include <sys/select.h>\n#include <sys/termio.h>\n#include <termios.h>\n#include <fcntl.h>\n\n#define AF_LOCAL AF_UNIX\n'\n\nincludes_Darwin='\n#define _DARWIN_C_SOURCE\n#define KERNEL 1\n#define _DARWIN_USE_64_BIT_INODE\n#define __APPLE_USE_RFC_3542\n#include <stdint.h>\n#include <sys/stdio.h>\n#include <sys/attr.h>\n#include <sys/clonefile.h>\n#include <sys/kern_control.h>\n#include <sys/types.h>\n#include <sys/event.h>\n#include <sys/ptrace.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/un.h>\n#include <sys/sockio.h>\n#include <sys/sys_domain.h>\n#include <sys/sysctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <sys/xattr.h>\n#include <sys/vsock.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/ip.h>\n#include <termios.h>\n\n// for backwards compatibility because moved TIOCREMOTE to Kernel.framework after MacOSX12.0.sdk.\n#define TIOCREMOTE 0x80047469\n'\n\nincludes_DragonFly='\n#include <sys/types.h>\n#include <sys/event.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/sysctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/wait.h>\n#include <sys/ioctl.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_clone.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <termios.h>\n#include <netinet/ip.h>\n#include <net/ip_mroute/ip_mroute.h>\n'\n\nincludes_FreeBSD='\n#include <sys/capsicum.h>\n#include <sys/param.h>\n#include <sys/types.h>\n#include <sys/disk.h>\n#include <sys/event.h>\n#include <sys/sched.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/un.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/sysctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/wait.h>\n#include <sys/ioctl.h>\n#include <sys/ptrace.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <termios.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <sys/extattr.h>\n\n#if __FreeBSD__ >= 10\n#define IFT_CARP\t0xf8\t// IFT_CARP is deprecated in FreeBSD 10\n#undef SIOCAIFADDR\n#define SIOCAIFADDR\t_IOW(105, 26, struct oifaliasreq)\t// ifaliasreq contains if_data\n#undef SIOCSIFPHYADDR\n#define SIOCSIFPHYADDR\t_IOW(105, 70, struct oifaliasreq)\t// ifaliasreq contains if_data\n#endif\n'\n\nincludes_Linux='\n#define _LARGEFILE_SOURCE\n#define _LARGEFILE64_SOURCE\n#ifndef __LP64__\n#define _FILE_OFFSET_BITS 64\n#endif\n#define _GNU_SOURCE\n\n// See the description in unix/linux/types.go\n#if defined(__ARM_EABI__) || \\\n\t(defined(__mips__) && (_MIPS_SIM == _ABIO32)) || \\\n\t(defined(__powerpc__) && (!defined(__powerpc64__)))\n# ifdef   _TIME_BITS\n#  undef  _TIME_BITS\n# endif\n# define  _TIME_BITS 32\n#endif\n\n// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of\n// these structures. We just include them copied from <bits/termios.h>.\n#if defined(__powerpc__)\nstruct sgttyb {\n        char    sg_ispeed;\n        char    sg_ospeed;\n        char    sg_erase;\n        char    sg_kill;\n        short   sg_flags;\n};\n\nstruct tchars {\n        char    t_intrc;\n        char    t_quitc;\n        char    t_startc;\n        char    t_stopc;\n        char    t_eofc;\n        char    t_brkc;\n};\n\nstruct ltchars {\n        char    t_suspc;\n        char    t_dsuspc;\n        char    t_rprntc;\n        char    t_flushc;\n        char    t_werasc;\n        char    t_lnextc;\n};\n#endif\n\n#include <bits/sockaddr.h>\n#include <sys/epoll.h>\n#include <sys/eventfd.h>\n#include <sys/inotify.h>\n#include <sys/ioctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/prctl.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <sys/time.h>\n#include <sys/select.h>\n#include <sys/signalfd.h>\n#include <sys/socket.h>\n#include <sys/timerfd.h>\n#include <sys/uio.h>\n#include <sys/xattr.h>\n#include <netinet/udp.h>\n#include <linux/audit.h>\n#include <linux/bpf.h>\n#include <linux/can.h>\n#include <linux/can/error.h>\n#include <linux/can/netlink.h>\n#include <linux/can/raw.h>\n#include <linux/capability.h>\n#include <linux/cryptouser.h>\n#include <linux/devlink.h>\n#include <linux/dm-ioctl.h>\n#include <linux/errqueue.h>\n#include <linux/ethtool_netlink.h>\n#include <linux/falloc.h>\n#include <linux/fanotify.h>\n#include <linux/fib_rules.h>\n#include <linux/filter.h>\n#include <linux/fs.h>\n#include <linux/fscrypt.h>\n#include <linux/fsverity.h>\n#include <linux/genetlink.h>\n#include <linux/hdreg.h>\n#include <linux/hidraw.h>\n#include <linux/if.h>\n#include <linux/if_addr.h>\n#include <linux/if_alg.h>\n#include <linux/if_arp.h>\n#include <linux/if_ether.h>\n#include <linux/if_ppp.h>\n#include <linux/if_tun.h>\n#include <linux/if_packet.h>\n#include <linux/if_xdp.h>\n#include <linux/input.h>\n#include <linux/kcm.h>\n#include <linux/kexec.h>\n#include <linux/keyctl.h>\n#include <linux/landlock.h>\n#include <linux/loop.h>\n#include <linux/lwtunnel.h>\n#include <linux/magic.h>\n#include <linux/memfd.h>\n#include <linux/module.h>\n#include <linux/mount.h>\n#include <linux/netfilter/nfnetlink.h>\n#include <linux/netfilter/nf_tables.h>\n#include <linux/netlink.h>\n#include <linux/net_namespace.h>\n#include <linux/nfc.h>\n#include <linux/nsfs.h>\n#include <linux/perf_event.h>\n#include <linux/pps.h>\n#include <linux/ptp_clock.h>\n#include <linux/ptrace.h>\n#include <linux/random.h>\n#include <linux/reboot.h>\n#include <linux/rtc.h>\n#include <linux/rtnetlink.h>\n#include <linux/sched.h>\n#include <linux/seccomp.h>\n#include <linux/serial.h>\n#include <linux/sock_diag.h>\n#include <linux/sockios.h>\n#include <linux/taskstats.h>\n#include <linux/tipc.h>\n#include <linux/vm_sockets.h>\n#include <linux/wait.h>\n#include <linux/watchdog.h>\n#include <linux/wireguard.h>\n\n#include <mtd/ubi-user.h>\n#include <mtd/mtd-user.h>\n#include <net/route.h>\n\n#if defined(__sparc__)\n// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the\n// definition in glibc. As only the error constants are needed here, include the\n// generic termibits.h (which is included by termbits.h on sparc).\n#include <asm-generic/termbits.h>\n#else\n#include <asm/termbits.h>\n#endif\n\n#ifndef PTRACE_GETREGS\n#define PTRACE_GETREGS\t0xc\n#endif\n\n#ifndef PTRACE_SETREGS\n#define PTRACE_SETREGS\t0xd\n#endif\n\n#ifdef SOL_BLUETOOTH\n// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h\n// but it is already in bluetooth_linux.go\n#undef SOL_BLUETOOTH\n#endif\n\n// Certain constants are missing from the fs/crypto UAPI\n#define FS_KEY_DESC_PREFIX              \"fscrypt:\"\n#define FS_KEY_DESC_PREFIX_SIZE         8\n#define FS_MAX_KEY_SIZE                 64\n\n// The code generator produces -0x1 for (~0), but an unsigned value is necessary\n// for the tipc_subscr timeout __u32 field.\n#undef TIPC_WAIT_FOREVER\n#define TIPC_WAIT_FOREVER 0xffffffff\n\n// Copied from linux/netfilter/nf_nat.h\n// Including linux/netfilter/nf_nat.h here causes conflicts between linux/in.h\n// and netinet/in.h.\n#define NF_NAT_RANGE_MAP_IPS\t\t\t(1 << 0)\n#define NF_NAT_RANGE_PROTO_SPECIFIED\t\t(1 << 1)\n#define NF_NAT_RANGE_PROTO_RANDOM\t\t(1 << 2)\n#define NF_NAT_RANGE_PERSISTENT\t\t\t(1 << 3)\n#define NF_NAT_RANGE_PROTO_RANDOM_FULLY\t\t(1 << 4)\n#define NF_NAT_RANGE_PROTO_OFFSET\t\t(1 << 5)\n#define NF_NAT_RANGE_NETMAP\t\t\t(1 << 6)\n#define NF_NAT_RANGE_PROTO_RANDOM_ALL\t\t\\\n\t(NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)\n#define NF_NAT_RANGE_MASK\t\t\t\t\t\\\n\t(NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED |\t\\\n\t NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT |\t\\\n\t NF_NAT_RANGE_PROTO_RANDOM_FULLY | NF_NAT_RANGE_PROTO_OFFSET | \\\n\t NF_NAT_RANGE_NETMAP)\n\n// Copied from linux/hid.h.\n// Keep in sync with the size of the referenced fields.\n#define _HIDIOCGRAWNAME_LEN\t128 // sizeof_field(struct hid_device, name)\n#define _HIDIOCGRAWPHYS_LEN\t64  // sizeof_field(struct hid_device, phys)\n#define _HIDIOCGRAWUNIQ_LEN\t64  // sizeof_field(struct hid_device, uniq)\n\n#define _HIDIOCGRAWNAME\t\tHIDIOCGRAWNAME(_HIDIOCGRAWNAME_LEN)\n#define _HIDIOCGRAWPHYS\t\tHIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN)\n#define _HIDIOCGRAWUNIQ\t\tHIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN)\n\n'\n\nincludes_NetBSD='\n#include <sys/types.h>\n#include <sys/param.h>\n#include <sys/event.h>\n#include <sys/extattr.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/sched.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/sysctl.h>\n#include <sys/termios.h>\n#include <sys/ttycom.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/in_systm.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <netinet/if_ether.h>\n\n// Needed since <sys/param.h> refers to it...\n#define schedppq 1\n'\n\nincludes_OpenBSD='\n#include <sys/types.h>\n#include <sys/param.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/select.h>\n#include <sys/sched.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/sysctl.h>\n#include <sys/termios.h>\n#include <sys/ttycom.h>\n#include <sys/unistd.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/if_var.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/in_systm.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <netinet/if_ether.h>\n#include <net/if_bridge.h>\n\n// We keep some constants not supported in OpenBSD 5.5 and beyond for\n// the promise of compatibility.\n#define EMUL_ENABLED\t\t0x1\n#define EMUL_NATIVE\t\t0x2\n#define IPV6_FAITH\t\t0x1d\n#define IPV6_OPTIONS\t\t0x1\n#define IPV6_RTHDR_STRICT\t0x1\n#define IPV6_SOCKOPT_RESERVED1\t0x3\n#define SIOCGIFGENERIC\t\t0xc020693a\n#define SIOCSIFGENERIC\t\t0x80206939\n#define WALTSIG\t\t\t0x4\n'\n\nincludes_SunOS='\n#include <limits.h>\n#include <sys/types.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/stream.h>\n#include <sys/mman.h>\n#include <sys/wait.h>\n#include <sys/ioctl.h>\n#include <sys/mkdev.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_arp.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/icmp6.h>\n#include <netinet/in.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <termios.h>\n'\n\n\nincludes='\n#include <sys/types.h>\n#include <sys/file.h>\n#include <fcntl.h>\n#include <dirent.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <netinet/ip.h>\n#include <netinet/ip6.h>\n#include <netinet/tcp.h>\n#include <errno.h>\n#include <sys/signal.h>\n#include <signal.h>\n#include <sys/resource.h>\n#include <time.h>\n'\nccflags=\"$@\"\n\n# Write go tool cgo -godefs input.\n(\n\techo package unix\n\techo\n\techo '/*'\n\tindirect=\"includes_$(uname)\"\n\techo \"${!indirect} $includes\"\n\techo '*/'\n\techo 'import \"C\"'\n\techo 'import \"syscall\"'\n\techo\n\techo 'const ('\n\n\t# The gcc command line prints all the #defines\n\t# it encounters while processing the input\n\techo \"${!indirect} $includes\" | $CC -x c - -E -dM $ccflags |\n\tawk '\n\t\t$1 != \"#define\" || $2 ~ /\\(/ || $3 == \"\" {next}\n\n\t\t$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next}  # 386 registers\n\t\t$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}\n\t\t$2 ~ /^(SCM_SRCRT)$/ {next}\n\t\t$2 ~ /^(MAP_FAILED)$/ {next}\n\t\t$2 ~ /^ELF_.*$/ {next}# <asm/elf.h> contains ELF_ARCH, etc.\n\n\t\t$2 ~ /^EXTATTR_NAMESPACE_NAMES/ ||\n\t\t$2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next}\n\n\t\t$2 !~ /^ECCAPBITS/ &&\n\t\t$2 !~ /^ETH_/ &&\n\t\t$2 !~ /^EPROC_/ &&\n\t\t$2 !~ /^EQUIV_/ &&\n\t\t$2 !~ /^EXPR_/ &&\n\t\t$2 !~ /^EVIOC/ &&\n\t\t$2 ~ /^E[A-Z0-9_]+$/ ||\n\t\t$2 ~ /^B[0-9_]+$/ ||\n\t\t$2 ~ /^(OLD|NEW)DEV$/ ||\n\t\t$2 == \"BOTHER\" ||\n\t\t$2 ~ /^CI?BAUD(EX)?$/ ||\n\t\t$2 == \"IBSHIFT\" ||\n\t\t$2 ~ /^V[A-Z0-9]+$/ ||\n\t\t$2 ~ /^CS[A-Z0-9]/ ||\n\t\t$2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ ||\n\t\t$2 ~ /^IGN/ ||\n\t\t$2 ~ /^IX(ON|ANY|OFF)$/ ||\n\t\t$2 ~ /^IN(LCR|PCK)$/ ||\n\t\t$2 !~ \"X86_CR3_PCID_NOFLUSH\" &&\n\t\t$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||\n\t\t$2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ ||\n\t\t$2 == \"BRKINT\" ||\n\t\t$2 == \"HUPCL\" ||\n\t\t$2 == \"PENDIN\" ||\n\t\t$2 == \"TOSTOP\" ||\n\t\t$2 == \"XCASE\" ||\n\t\t$2 == \"ALTWERASE\" ||\n\t\t$2 == \"NOKERNINFO\" ||\n\t\t$2 == \"NFDBITS\" ||\n\t\t$2 ~ /^PAR/ ||\n\t\t$2 ~ /^SIG[^_]/ ||\n\t\t$2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ ||\n\t\t$2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ ||\n\t\t$2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ ||\n\t\t$2 ~ /^O?XTABS$/ ||\n\t\t$2 ~ /^TC[IO](ON|OFF)$/ ||\n\t\t$2 ~ /^IN_/ ||\n\t\t$2 ~ /^KCM/ ||\n\t\t$2 ~ /^LANDLOCK_/ ||\n\t\t$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||\n\t\t$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||\n\t\t$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||\n\t\t$2 == \"LOOP_CONFIGURE\" ||\n\t\t$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||\n\t\t$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||\n\t\t$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||\n\t\t$2 ~ /^PTP_/ ||\n\t\t$2 ~ /^RAW_PAYLOAD_/ ||\n\t\t$2 ~ /^[US]F_/ ||\n\t\t$2 ~ /^TP_STATUS_/ ||\n\t\t$2 ~ /^FALLOC_/ ||\n\t\t$2 ~ /^ICMPV?6?_(FILTER|SEC)/ ||\n\t\t$2 == \"SOMAXCONN\" ||\n\t\t$2 == \"NAME_MAX\" ||\n\t\t$2 == \"IFNAMSIZ\" ||\n\t\t$2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ ||\n\t\t$2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ ||\n\t\t$2 ~ /^HW_MACHINE$/ ||\n\t\t$2 ~ /^SYSCTL_VERS/ ||\n\t\t$2 !~ \"MNT_BITS\" &&\n\t\t$2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ ||\n\t\t$2 ~ /^NS_GET_/ ||\n\t\t$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||\n\t\t$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|PIOD|TFD)_/ ||\n\t\t$2 ~ /^KEXEC_/ ||\n\t\t$2 ~ /^LINUX_REBOOT_CMD_/ ||\n\t\t$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||\n\t\t$2 ~ /^MODULE_INIT_/ ||\n\t\t$2 !~ \"NLA_TYPE_MASK\" &&\n\t\t$2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ &&\n\t\t$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ ||\n\t\t$2 ~ /^SOCK_|SK_DIAG_|SKNLGRP_$/ ||\n\t\t$2 ~ /^(CONNECT|SAE)_/ ||\n\t\t$2 ~ /^FIORDCHK$/ ||\n\t\t$2 ~ /^SIOC/ ||\n\t\t$2 ~ /^TIOC/ ||\n\t\t$2 ~ /^TCGET/ ||\n\t\t$2 ~ /^TCSET/ ||\n\t\t$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||\n\t\t$2 !~ \"RTF_BITS\" &&\n\t\t$2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ ||\n\t\t$2 ~ /^BIOC/ ||\n\t\t$2 ~ /^DIOC/ ||\n\t\t$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||\n\t\t$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||\n\t\t$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||\n\t\t$2 ~ /^CLONE_[A-Z_]+/ ||\n\t\t$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+|BPF_F_LINK)$/ &&\n\t\t$2 ~ /^(BPF|DLT)_/ ||\n\t\t$2 ~ /^AUDIT_/ ||\n\t\t$2 ~ /^(CLOCK|TIMER)_/ ||\n\t\t$2 ~ /^CAN_/ ||\n\t\t$2 ~ /^CAP_/ ||\n\t\t$2 ~ /^CP_/ ||\n\t\t$2 ~ /^CPUSTATES$/ ||\n\t\t$2 ~ /^CTLIOCGINFO$/ ||\n\t\t$2 ~ /^ALG_/ ||\n\t\t$2 ~ /^FI(CLONE|DEDUPERANGE)/ ||\n\t\t$2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE)/ ||\n\t\t$2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ ||\n\t\t$2 ~ /^FS_VERITY_/ ||\n\t\t$2 ~ /^FSCRYPT_/ ||\n\t\t$2 ~ /^DM_/ ||\n\t\t$2 ~ /^GRND_/ ||\n\t\t$2 ~ /^RND/ ||\n\t\t$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||\n\t\t$2 ~ /^KEYCTL_/ ||\n\t\t$2 ~ /^PERF_/ ||\n\t\t$2 ~ /^SECCOMP_/ ||\n\t\t$2 ~ /^SEEK_/ ||\n\t\t$2 ~ /^SCHED_/ ||\n\t\t$2 ~ /^SPLICE_/ ||\n\t\t$2 ~ /^SYNC_FILE_RANGE_/ ||\n\t\t$2 !~ /IOC_MAGIC/ &&\n\t\t$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||\n\t\t$2 ~ /^(VM|VMADDR)_/ ||\n\t\t$2 ~ /^IOCTL_VM_SOCKETS_/ ||\n\t\t$2 ~ /^(TASKSTATS|TS)_/ ||\n\t\t$2 ~ /^CGROUPSTATS_/ ||\n\t\t$2 ~ /^GENL_/ ||\n\t\t$2 ~ /^STATX_/ ||\n\t\t$2 ~ /^RENAME/ ||\n\t\t$2 ~ /^UBI_IOC[A-Z]/ ||\n\t\t$2 ~ /^UTIME_/ ||\n\t\t$2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ ||\n\t\t$2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ ||\n\t\t$2 ~ /^FSOPT_/ ||\n\t\t$2 ~ /^WDIO[CFS]_/ ||\n\t\t$2 ~ /^NFN/ ||\n\t\t$2 !~ /^NFT_META_IIFTYPE/ &&\n\t\t$2 ~ /^NFT_/ ||\n\t\t$2 ~ /^NF_NAT_/ ||\n\t\t$2 ~ /^XDP_/ ||\n\t\t$2 ~ /^RWF_/ ||\n\t\t$2 ~ /^(HDIO|WIN|SMART)_/ ||\n\t\t$2 ~ /^CRYPTO_/ ||\n\t\t$2 ~ /^TIPC_/ ||\n\t\t$2 !~  \"DEVLINK_RELOAD_LIMITS_VALID_MASK\" &&\n\t\t$2 ~ /^DEVLINK_/ ||\n\t\t$2 ~ /^ETHTOOL_/ ||\n\t\t$2 ~ /^LWTUNNEL_IP/ ||\n\t\t$2 ~ /^ITIMER_/ ||\n\t\t$2 !~ \"WMESGLEN\" &&\n\t\t$2 ~ /^W[A-Z0-9]+$/ ||\n\t\t$2 ~ /^P_/ ||\n\t\t$2 ~/^PPPIOC/ ||\n\t\t$2 ~ /^FAN_|FANOTIFY_/ ||\n\t\t$2 == \"HID_MAX_DESCRIPTOR_SIZE\" ||\n\t\t$2 ~ /^_?HIDIOC/ ||\n\t\t$2 ~ /^BUS_(USB|HIL|BLUETOOTH|VIRTUAL)$/ ||\n\t\t$2 ~ /^MTD/ ||\n\t\t$2 ~ /^OTP/ ||\n\t\t$2 ~ /^MEM/ ||\n\t\t$2 ~ /^WG/ ||\n\t\t$2 ~ /^FIB_RULE_/ ||\n\t\t$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE|IOMIN$|IOOPT$|ALIGNOFF$|DISCARD|ROTATIONAL$|ZEROOUT$|GETDISKSEQ$)/ {printf(\"\\t%s = C.%s\\n\", $2, $2)}\n\t\t$2 ~ /^__WCOREFLAG$/ {next}\n\t\t$2 ~ /^__W[A-Z0-9]+$/ {printf(\"\\t%s = C.%s\\n\", substr($2,3), $2)}\n\n\t\t{next}\n\t' | sort\n\n\techo ')'\n) >_const.go\n\n# Pull out the error names for later.\nerrors=$(\n\techo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |\n\tsort\n)\n\n# Pull out the signal names for later.\nsignals=$(\n\techo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |\n\tgrep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |\n\tsort\n)\n\n# Again, writing regexps to a file.\necho '#include <errno.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^E[A-Z0-9_]+$/ { print \"^\\t\" $2 \"[ \\t]*=\" }' |\n\tsort >_error.grep\necho '#include <signal.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^SIG[A-Z0-9]+$/ { print \"^\\t\" $2 \"[ \\t]*=\" }' |\n\tgrep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |\n\tsort >_signal.grep\n\necho '// mkerrors.sh' \"$@\"\necho '// Code generated by the command above; see README.md. DO NOT EDIT.'\necho\necho \"//go:build ${GOARCH} && ${GOOS}\"\necho\ngo tool cgo -godefs -- \"$@\" _const.go >_error.out\ncat _error.out | grep -vf _error.grep | grep -vf _signal.grep\necho\necho '// Errors'\necho 'const ('\ncat _error.out | grep -f _error.grep | sed 's/=\\(.*\\)/= syscall.Errno(\\1)/'\necho ')'\n\necho\necho '// Signals'\necho 'const ('\ncat _error.out | grep -f _signal.grep | sed 's/=\\(.*\\)/= syscall.Signal(\\1)/'\necho ')'\n\n# Run C program to print error and syscall strings.\n(\n\techo -E \"\n#include <stdio.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <ctype.h>\n#include <string.h>\n#include <signal.h>\n\n#define nelem(x) (sizeof(x)/sizeof((x)[0]))\n\nenum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below\n\nstruct tuple {\n\tint num;\n\tconst char *name;\n};\n\nstruct tuple errors[] = {\n\"\n\tfor i in $errors\n\tdo\n\t\techo -E '\t{'$i', \"'$i'\" },'\n\tdone\n\n\techo -E \"\n};\n\nstruct tuple signals[] = {\n\"\n\tfor i in $signals\n\tdo\n\t\techo -E '\t{'$i', \"'$i'\" },'\n\tdone\n\n\t# Use -E because on some systems bash builtin interprets \\n itself.\n\techo -E '\n};\n\nstatic int\ntuplecmp(const void *a, const void *b)\n{\n\treturn ((struct tuple *)a)->num - ((struct tuple *)b)->num;\n}\n\nint\nmain(void)\n{\n\tint i, e;\n\tchar buf[1024], *p;\n\n\tprintf(\"\\n\\n// Error table\\n\");\n\tprintf(\"var errorList = [...]struct {\\n\");\n\tprintf(\"\\tnum  syscall.Errno\\n\");\n\tprintf(\"\\tname string\\n\");\n\tprintf(\"\\tdesc string\\n\");\n\tprintf(\"} {\\n\");\n\tqsort(errors, nelem(errors), sizeof errors[0], tuplecmp);\n\tfor(i=0; i<nelem(errors); i++) {\n\t\te = errors[i].num;\n\t\tif(i > 0 && errors[i-1].num == e)\n\t\t\tcontinue;\n\t\tstrncpy(buf, strerror(e), sizeof(buf) - 1);\n\t\tbuf[sizeof(buf) - 1] = '\\0';\n\t\t// lowercase first letter: Bad -> bad, but STREAM -> STREAM.\n\t\tif(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)\n\t\t\tbuf[0] += a - A;\n\t\tprintf(\"\\t{ %d, \\\"%s\\\", \\\"%s\\\" },\\n\", e, errors[i].name, buf);\n\t}\n\tprintf(\"}\\n\\n\");\n\n\tprintf(\"\\n\\n// Signal table\\n\");\n\tprintf(\"var signalList = [...]struct {\\n\");\n\tprintf(\"\\tnum  syscall.Signal\\n\");\n\tprintf(\"\\tname string\\n\");\n\tprintf(\"\\tdesc string\\n\");\n\tprintf(\"} {\\n\");\n\tqsort(signals, nelem(signals), sizeof signals[0], tuplecmp);\n\tfor(i=0; i<nelem(signals); i++) {\n\t\te = signals[i].num;\n\t\tif(i > 0 && signals[i-1].num == e)\n\t\t\tcontinue;\n\t\tstrncpy(buf, strsignal(e), sizeof(buf) - 1);\n\t\tbuf[sizeof(buf) - 1] = '\\0';\n\t\t// lowercase first letter: Bad -> bad, but STREAM -> STREAM.\n\t\tif(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)\n\t\t\tbuf[0] += a - A;\n\t\t// cut trailing : number.\n\t\tp = strrchr(buf, \":\"[0]);\n\t\tif(p)\n\t\t\t*p = '\\0';\n\t\tprintf(\"\\t{ %d, \\\"%s\\\", \\\"%s\\\" },\\n\", e, signals[i].name, buf);\n\t}\n\tprintf(\"}\\n\\n\");\n\n\treturn 0;\n}\n\n'\n) >_errors.c\n\n$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mmap_nomremap.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris || zos\n\npackage unix\n\nvar mapper = &mmapper{\n\tactive: make(map[*byte][]byte),\n\tmmap:   mmap,\n\tmunmap: munmap,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mremap.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux || netbsd\n\npackage unix\n\nimport \"unsafe\"\n\ntype mremapMmapper struct {\n\tmmapper\n\tmremap func(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error)\n}\n\nvar mapper = &mremapMmapper{\n\tmmapper: mmapper{\n\t\tactive: make(map[*byte][]byte),\n\t\tmmap:   mmap,\n\t\tmunmap: munmap,\n\t},\n\tmremap: mremap,\n}\n\nfunc (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) {\n\tif newLength <= 0 || len(oldData) == 0 || len(oldData) != cap(oldData) || flags&mremapFixed != 0 {\n\t\treturn nil, EINVAL\n\t}\n\n\tpOld := &oldData[cap(oldData)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tbOld := m.active[pOld]\n\tif bOld == nil || &bOld[0] != &oldData[0] {\n\t\treturn nil, EINVAL\n\t}\n\tnewAddr, errno := m.mremap(uintptr(unsafe.Pointer(&bOld[0])), uintptr(len(bOld)), uintptr(newLength), flags, 0)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\tbNew := unsafe.Slice((*byte)(unsafe.Pointer(newAddr)), newLength)\n\tpNew := &bNew[cap(bNew)-1]\n\tif flags&mremapDontunmap == 0 {\n\t\tdelete(m.active, pOld)\n\t}\n\tm.active[pNew] = bNew\n\treturn bNew, nil\n}\n\nfunc Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) {\n\treturn mapper.Mremap(oldData, newLength, flags)\n}\n\nfunc MremapPtr(oldAddr unsafe.Pointer, oldSize uintptr, newAddr unsafe.Pointer, newSize uintptr, flags int) (ret unsafe.Pointer, err error) {\n\txaddr, err := mapper.mremap(uintptr(oldAddr), oldSize, newSize, flags, uintptr(newAddr))\n\treturn unsafe.Pointer(xaddr), err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/pagesize_unix.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// For Unix, get the pagesize from the runtime.\n\npackage unix\n\nimport \"syscall\"\n\nfunc Getpagesize() int {\n\treturn syscall.Getpagesize()\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/pledge_openbsd.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// Pledge implements the pledge syscall.\n//\n// This changes both the promises and execpromises; use PledgePromises or\n// PledgeExecpromises to only change the promises or execpromises\n// respectively.\n//\n// For more information see pledge(2).\nfunc Pledge(promises, execpromises string) error {\n\tif err := pledgeAvailable(); err != nil {\n\t\treturn err\n\t}\n\n\tpptr, err := BytePtrFromString(promises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\texptr, err := BytePtrFromString(execpromises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn pledge(pptr, exptr)\n}\n\n// PledgePromises implements the pledge syscall.\n//\n// This changes the promises and leaves the execpromises untouched.\n//\n// For more information see pledge(2).\nfunc PledgePromises(promises string) error {\n\tif err := pledgeAvailable(); err != nil {\n\t\treturn err\n\t}\n\n\tpptr, err := BytePtrFromString(promises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn pledge(pptr, nil)\n}\n\n// PledgeExecpromises implements the pledge syscall.\n//\n// This changes the execpromises and leaves the promises untouched.\n//\n// For more information see pledge(2).\nfunc PledgeExecpromises(execpromises string) error {\n\tif err := pledgeAvailable(); err != nil {\n\t\treturn err\n\t}\n\n\texptr, err := BytePtrFromString(execpromises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn pledge(nil, exptr)\n}\n\n// majmin returns major and minor version number for an OpenBSD system.\nfunc majmin() (major int, minor int, err error) {\n\tvar v Utsname\n\terr = Uname(&v)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tmajor, err = strconv.Atoi(string(v.Release[0]))\n\tif err != nil {\n\t\terr = errors.New(\"cannot parse major version number returned by uname\")\n\t\treturn\n\t}\n\n\tminor, err = strconv.Atoi(string(v.Release[2]))\n\tif err != nil {\n\t\terr = errors.New(\"cannot parse minor version number returned by uname\")\n\t\treturn\n\t}\n\n\treturn\n}\n\n// pledgeAvailable checks for availability of the pledge(2) syscall\n// based on the running OpenBSD version.\nfunc pledgeAvailable() error {\n\tmaj, min, err := majmin()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Require OpenBSD 6.4 as a minimum.\n\tif maj < 6 || (maj == 6 && min <= 3) {\n\t\treturn fmt.Errorf(\"cannot call Pledge on OpenBSD %d.%d\", maj, min)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ptrace_darwin.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin && !ios\n\npackage unix\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) error {\n\treturn ptrace1(request, pid, addr, data)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ptrace_ios.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build ios\n\npackage unix\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\treturn ENOTSUP\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/race.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin && race) || (linux && race) || (freebsd && race)\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\nconst raceenabled = true\n\nfunc raceAcquire(addr unsafe.Pointer) {\n\truntime.RaceAcquire(addr)\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n\truntime.RaceReleaseMerge(addr)\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n\truntime.RaceReadRange(addr, len)\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n\truntime.RaceWriteRange(addr, len)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/race0.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || (darwin && !race) || (linux && !race) || (freebsd && !race) || netbsd || openbsd || solaris || dragonfly || zos\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nconst raceenabled = false\n\nfunc raceAcquire(addr unsafe.Pointer) {\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/readdirent_getdents.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || dragonfly || freebsd || linux || netbsd || openbsd\n\npackage unix\n\n// ReadDirent reads directory entries from fd and writes them into buf.\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\treturn Getdents(fd, buf)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/readdirent_getdirentries.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || zos\n\npackage unix\n\nimport \"unsafe\"\n\n// ReadDirent reads directory entries from fd and writes them into buf.\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\t// Final argument is (basep *uintptr) and the syscall doesn't take nil.\n\t// 64 bits should be enough. (32 bits isn't even on 386). Since the\n\t// actual system call is getdirentries64, 64 is a good guess.\n\t// TODO(rsc): Can we use a single global basep for all calls?\n\tvar base = (*uintptr)(unsafe.Pointer(new(uint64)))\n\treturn Getdirentries(fd, buf, base)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\n// Round the length of a raw sockaddr up to align it properly.\nfunc cmsgAlignOf(salen int) int {\n\tsalign := SizeofPtr\n\tif SizeofPtr == 8 && !supportsABI(_dragonflyABIChangeVersion) {\n\t\t// 64-bit Dragonfly before the September 2019 ABI changes still requires\n\t\t// 32-bit aligned access to network subsystem.\n\t\tsalign = 4\n\t}\n\treturn (salen + salign - 1) & ^(salign - 1)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_linux.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Socket control messages\n\npackage unix\n\nimport \"unsafe\"\n\n// UnixCredentials encodes credentials into a socket control message\n// for sending to another process. This can be used for\n// authentication.\nfunc UnixCredentials(ucred *Ucred) []byte {\n\tb := make([]byte, CmsgSpace(SizeofUcred))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_CREDENTIALS\n\th.SetLen(CmsgLen(SizeofUcred))\n\t*(*Ucred)(h.data(0)) = *ucred\n\treturn b\n}\n\n// ParseUnixCredentials decodes a socket control message that contains\n// credentials in a Ucred structure. To receive such a message, the\n// SO_PASSCRED option must be enabled on the socket.\nfunc ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_CREDENTIALS {\n\t\treturn nil, EINVAL\n\t}\n\tucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))\n\treturn &ucred, nil\n}\n\n// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO.\nfunc PktInfo4(info *Inet4Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet4Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IP\n\th.Type = IP_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet4Pktinfo))\n\t*(*Inet4Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n\n// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO.\nfunc PktInfo6(info *Inet6Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet6Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IPV6\n\th.Type = IPV6_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet6Pktinfo))\n\t*(*Inet6Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n\n// ParseOrigDstAddr decodes a socket control message containing the original\n// destination address. To receive such a message the IP_RECVORIGDSTADDR or\n// IPV6_RECVORIGDSTADDR option must be enabled on the socket.\nfunc ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) {\n\tswitch {\n\tcase m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0]))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0]))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tdefault:\n\t\treturn nil, EINVAL\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_unix.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// Socket control messages\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// CmsgLen returns the value to store in the Len field of the Cmsghdr\n// structure, taking into account any necessary alignment.\nfunc CmsgLen(datalen int) int {\n\treturn cmsgAlignOf(SizeofCmsghdr) + datalen\n}\n\n// CmsgSpace returns the number of bytes an ancillary element with\n// payload of the passed data length occupies.\nfunc CmsgSpace(datalen int) int {\n\treturn cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen)\n}\n\nfunc (h *Cmsghdr) data(offset uintptr) unsafe.Pointer {\n\treturn unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)) + offset)\n}\n\n// SocketControlMessage represents a socket control message.\ntype SocketControlMessage struct {\n\tHeader Cmsghdr\n\tData   []byte\n}\n\n// ParseSocketControlMessage parses b as an array of socket control\n// messages.\nfunc ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {\n\tvar msgs []SocketControlMessage\n\ti := 0\n\tfor i+CmsgLen(0) <= len(b) {\n\t\th, dbuf, err := socketControlMessageHeaderAndData(b[i:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm := SocketControlMessage{Header: *h, Data: dbuf}\n\t\tmsgs = append(msgs, m)\n\t\ti += cmsgAlignOf(int(h.Len))\n\t}\n\treturn msgs, nil\n}\n\n// ParseOneSocketControlMessage parses a single socket control message from b, returning the message header,\n// message data (a slice of b), and the remainder of b after that single message.\n// When there are no remaining messages, len(remainder) == 0.\nfunc ParseOneSocketControlMessage(b []byte) (hdr Cmsghdr, data []byte, remainder []byte, err error) {\n\th, dbuf, err := socketControlMessageHeaderAndData(b)\n\tif err != nil {\n\t\treturn Cmsghdr{}, nil, nil, err\n\t}\n\tif i := cmsgAlignOf(int(h.Len)); i < len(b) {\n\t\tremainder = b[i:]\n\t}\n\treturn *h, dbuf, remainder, nil\n}\n\nfunc socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\tif h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {\n\t\treturn nil, nil, EINVAL\n\t}\n\treturn h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil\n}\n\n// UnixRights encodes a set of open file descriptors into a socket\n// control message for sending to another process.\nfunc UnixRights(fds ...int) []byte {\n\tdatalen := len(fds) * 4\n\tb := make([]byte, CmsgSpace(datalen))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_RIGHTS\n\th.SetLen(CmsgLen(datalen))\n\tfor i, fd := range fds {\n\t\t*(*int32)(h.data(4 * uintptr(i))) = int32(fd)\n\t}\n\treturn b\n}\n\n// ParseUnixRights decodes a socket control message that contains an\n// integer array of open file descriptors from another process.\nfunc ParseUnixRights(m *SocketControlMessage) ([]int, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_RIGHTS {\n\t\treturn nil, EINVAL\n\t}\n\tfds := make([]int, len(m.Data)>>2)\n\tfor i, j := 0, 0; i < len(m.Data); i += 4 {\n\t\tfds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i])))\n\t\tj++\n\t}\n\treturn fds, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport (\n\t\"runtime\"\n)\n\n// Round the length of a raw sockaddr up to align it properly.\nfunc cmsgAlignOf(salen int) int {\n\tsalign := SizeofPtr\n\n\t// dragonfly needs to check ABI version at runtime, see cmsgAlignOf in\n\t// sockcmsg_dragonfly.go\n\tswitch runtime.GOOS {\n\tcase \"aix\":\n\t\t// There is no alignment on AIX.\n\t\tsalign = 1\n\tcase \"darwin\", \"ios\", \"illumos\", \"solaris\":\n\t\t// NOTE: It seems like 64-bit Darwin, Illumos and Solaris\n\t\t// kernels still require 32-bit aligned access to network\n\t\t// subsystem.\n\t\tif SizeofPtr == 8 {\n\t\t\tsalign = 4\n\t\t}\n\tcase \"netbsd\", \"openbsd\":\n\t\t// NetBSD and OpenBSD armv7 require 64-bit alignment.\n\t\tif runtime.GOARCH == \"arm\" {\n\t\t\tsalign = 8\n\t\t}\n\t\t// NetBSD aarch64 requires 128-bit alignment.\n\t\tif runtime.GOOS == \"netbsd\" && runtime.GOARCH == \"arm64\" {\n\t\t\tsalign = 16\n\t\t}\n\tcase \"zos\":\n\t\t// z/OS socket macros use [32-bit] sizeof(int) alignment,\n\t\t// not pointer width.\n\t\tsalign = SizeofInt\n\t}\n\n\treturn (salen + salign - 1) & ^(salign - 1)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_zos.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Socket control messages\n\npackage unix\n\nimport \"unsafe\"\n\n// UnixCredentials encodes credentials into a socket control message\n// for sending to another process. This can be used for\n// authentication.\nfunc UnixCredentials(ucred *Ucred) []byte {\n\tb := make([]byte, CmsgSpace(SizeofUcred))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_CREDENTIALS\n\th.SetLen(CmsgLen(SizeofUcred))\n\t*(*Ucred)(h.data(0)) = *ucred\n\treturn b\n}\n\n// ParseUnixCredentials decodes a socket control message that contains\n// credentials in a Ucred structure. To receive such a message, the\n// SO_PASSCRED option must be enabled on the socket.\nfunc ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_CREDENTIALS {\n\t\treturn nil, EINVAL\n\t}\n\tucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))\n\treturn &ucred, nil\n}\n\n// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO.\nfunc PktInfo4(info *Inet4Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet4Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IP\n\th.Type = IP_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet4Pktinfo))\n\t*(*Inet4Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n\n// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO.\nfunc PktInfo6(info *Inet6Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet6Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IPV6\n\th.Type = IPV6_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet6Pktinfo))\n\t*(*Inet6Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/symaddr_zos_s390x.s",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x && gc\n\n#include \"textflag.h\"\n\n//  provide the address of function variable to be fixed up.\n\nTEXT ·getPipe2Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Pipe2(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_FlockAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Flock(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_GetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Getxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_NanosleepAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Nanosleep(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_SetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Setxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_Wait4Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Wait4(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_MountAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mount(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_UnmountAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Unmount(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_UtimesNanoAtAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·UtimesNanoAt(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_UtimesNanoAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·UtimesNano(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_MkfifoatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mkfifoat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_ChtagAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Chtag(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_ReadlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Readlinkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\t\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// Package unix contains an interface to the low-level operating system\n// primitives. OS details vary depending on the underlying system, and\n// by default, godoc will display OS-specific documentation for the current\n// system. If you want godoc to display OS documentation for another\n// system, set $GOOS and $GOARCH to the desired system. For example, if\n// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS\n// to freebsd and $GOARCH to arm.\n//\n// The primary use of this package is inside other packages that provide a more\n// portable interface to the system, such as \"os\", \"time\" and \"net\".  Use\n// those packages rather than this one if you can.\n//\n// For details of the functions and data types in this package consult\n// the manuals for the appropriate operating system.\n//\n// These calls return err == nil to indicate success; otherwise\n// err represents an operating system error describing the failure and\n// holds a value of type syscall.Errno.\npackage unix // import \"golang.org/x/sys/unix\"\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// ByteSliceFromString returns a NUL-terminated slice of bytes\n// containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc ByteSliceFromString(s string) ([]byte, error) {\n\tif strings.IndexByte(s, 0) != -1 {\n\t\treturn nil, EINVAL\n\t}\n\ta := make([]byte, len(s)+1)\n\tcopy(a, s)\n\treturn a, nil\n}\n\n// BytePtrFromString returns a pointer to a NUL-terminated array of\n// bytes containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc BytePtrFromString(s string) (*byte, error) {\n\ta, err := ByteSliceFromString(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &a[0], nil\n}\n\n// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any\n// bytes after the NUL removed.\nfunc ByteSliceToString(s []byte) string {\n\tif i := bytes.IndexByte(s, 0); i != -1 {\n\t\ts = s[:i]\n\t}\n\treturn string(s)\n}\n\n// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.\n// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated\n// at a zero byte; if the zero byte is not present, the program may crash.\nfunc BytePtrToString(p *byte) string {\n\tif p == nil {\n\t\treturn \"\"\n\t}\n\tif *p == 0 {\n\t\treturn \"\"\n\t}\n\n\t// Find NUL terminator.\n\tn := 0\n\tfor ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 1)\n\t}\n\n\treturn string(unsafe.Slice(p, n))\n}\n\n// Single-word zero for use when we need a valid pointer to 0 bytes.\nvar _zero uintptr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix\n\n// Aix system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and\n// wrap it in our own nicer implementation.\n\npackage unix\n\nimport \"unsafe\"\n\n/*\n * Wrapped\n */\n\nfunc Access(path string, mode uint32) (err error) {\n\treturn Faccessat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chmod(path string, mode uint32) (err error) {\n\treturn Fchmodat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, 0)\n}\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\treturn Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n > len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif n == len(sa.raw.Path) && name[0] != '@' {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = uint8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) {\n\t\t// Check sl > 3 so we don't change unnamed socket behavior.\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n//sys\tgetcwd(buf []byte) (err error)\n\nconst ImplementsGetwd = true\n\nfunc Getwd() (ret string, err error) {\n\tfor len := uint64(4096); ; len *= 2 {\n\t\tb := make([]byte, len)\n\t\terr := getcwd(b)\n\t\tif err == nil {\n\t\t\ti := 0\n\t\t\tfor b[i] != 0 {\n\t\t\t\ti++\n\t\t\t}\n\t\t\treturn string(b[0:i]), nil\n\t\t}\n\t\tif err != ERANGE {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n}\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\terr = getcwd(buf)\n\tif err == nil {\n\t\ti := 0\n\t\tfor buf[i] != 0 {\n\t\t\ti++\n\t\t}\n\t\tn = i + 1\n\t}\n\treturn\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 16 on BSD.\n\tif n < 0 || n > 1000 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\n/*\n * Socket\n */\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif nfd == -1 {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif emptyIovecs(iov) {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); n == -1 {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\treturn\n}\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\n\t\t// Some versions of AIX have a bug in getsockname (see IV78655).\n\t\t// We can't rely on sa.Len being set correctly.\n\t\tn := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL.\n\t\tfor i := 0; i < n; i++ {\n\t\t\tif pp.Path[i] == 0 {\n\t\t\t\tn = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\terr = gettimeofday(tv, nil)\n\treturn\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\n//sys\tgetdirent(fd int, buf []byte) (n int, err error)\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\treturn getdirent(fd, buf)\n}\n\n//sys\twait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\tvar r Pid_t\n\terr = ERESTART\n\t// AIX wait4 may return with ERESTART errno, while the process is still\n\t// active.\n\tfor err == ERESTART {\n\t\tr, err = wait4(Pid_t(pid), &status, options, rusage)\n\t}\n\twpid = int(r)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n/*\n * Wait\n */\n\ntype WaitStatus uint32\n\nfunc (w WaitStatus) Stopped() bool { return w&0x40 != 0 }\nfunc (w WaitStatus) StopSignal() Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>8) & 0xFF\n}\n\nfunc (w WaitStatus) Exited() bool { return w&0xFF == 0 }\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int((w >> 8) & 0xFF)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }\nfunc (w WaitStatus) Signal() Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>16) & 0xFF\n}\n\nfunc (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }\n\nfunc (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 }\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\tioctl(fd int, req int, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = ioctl\n\n// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX\n// There is no way to create a custom fcntl and to keep //sys fcntl easily,\n// Therefore, the programmer must call dup2 instead of fcntl in this case.\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\n//sys\tFcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\n//sys\tFcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n//sys\tfsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range\n\nfunc Fsync(fd int) error {\n\treturn fsyncRange(fd, O_SYNC, 0, 0)\n}\n\n/*\n * Direct access\n */\n\n//sys\tAcct(path string) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(oldfd int) (fd int, err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n// readdir_r\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n\n//sys\tGetpgrp() (pid int)\n\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tKill(pid int, sig Signal) (err error)\n//sys\tKlogctl(typ int, buf []byte) (n int, err error) = syslog\n//sys\tMkdir(dirfd int, path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error) = open64\n//sys\tOpenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSetdomainname(p []byte) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tv *Timeval) (err error)\n\n//sys\tSetuid(uid int) (err error)\n//sys\tSetgid(uid int) (err error)\n\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tStatx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)\n//sys\tSync()\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sysnb\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tfstat(fd int, stat *Stat_t) (err error)\n//sys\tfstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tlstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = pread64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tPselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tstat(path string, statptr *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n\n// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used.\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg\n\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n\n//sysnb\tpipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n//sys\tgettimeofday(tv *Timeval, tzp *Timezone) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n\n//sys\tGetsystemcfg(label int) (n uint64)\n\n//sys\tumount(target string) (err error)\n\nfunc Unmount(target string, flags int) (err error) {\n\tif flags != 0 {\n\t\t// AIX doesn't have any flags for umount.\n\t\treturn ENOSYS\n\t}\n\treturn umount(target)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix_ppc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc\n\npackage unix\n\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = lseek64\n\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\treturn fstat(fd, stat)\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {\n\treturn fstatat(dirfd, path, stat, flags)\n}\n\nfunc Lstat(path string, stat *Stat_t) error {\n\treturn lstat(path, stat)\n}\n\nfunc Stat(path string, statptr *Stat_t) error {\n\treturn stat(path, statptr)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc64\n\npackage unix\n\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = lseek\n\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int64(sec), Usec: int32(usec)}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// In order to only have Timespec structure, type of Stat_t's fields\n// Atim, Mtim and Ctim is changed from StTimespec to Timespec during\n// ztypes generation.\n// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an\n// int32, so the fields' value must be modified.\nfunc fixStatTimFields(stat *Stat_t) {\n\tstat.Atim.Nsec >>= 32\n\tstat.Mtim.Nsec >>= 32\n\tstat.Ctim.Nsec >>= 32\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\terr := fstat(fd, stat)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {\n\terr := fstatat(dirfd, path, stat, flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Lstat(path string, stat *Stat_t) error {\n\terr := lstat(path, stat)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Stat(path string, statptr *Stat_t) error {\n\terr := stat(path, statptr)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(statptr)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_bsd.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || dragonfly || freebsd || netbsd || openbsd\n\n// BSD system call wrappers shared by *BSD based systems\n// including OS X (Darwin) and FreeBSD.  Like the other\n// syscall_*.go files it is compiled as Go code but also\n// used as input to mksyscall which parses the //sys\n// lines and generates system call stubs.\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst ImplementsGetwd = true\n\nfunc Getwd() (string, error) {\n\tvar buf [PathMax]byte\n\t_, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\n/*\n * Wrapped\n */\n\n//sysnb\tgetgroups(ngid int, gid *_Gid_t) (n int, err error)\n//sysnb\tsetgroups(ngid int, gid *_Gid_t) (err error)\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 16 on BSD.\n\tif n < 0 || n > 1000 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.\n\ntype WaitStatus uint32\n\nconst (\n\tmask  = 0x7F\n\tcore  = 0x80\n\tshift = 8\n\n\texited  = 0\n\tkilled  = 9\n\tstopped = 0x7F\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif w&mask != exited {\n\t\treturn -1\n\t}\n\treturn int(w >> shift)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tsig := syscall.Signal(w & mask)\n\tif sig == stopped || sig == 0 {\n\t\treturn -1\n\t}\n\treturn sig\n}\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }\n\nfunc (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL }\n\nfunc (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\twpid, err = wait4(pid, &status, options, rusage)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\tShutdown(s int, how int) (err error)\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet4\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet6\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) || n == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Index == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = sa.Len\n\tsa.raw.Family = AF_LINK\n\tsa.raw.Index = sa.Index\n\tsa.raw.Type = sa.Type\n\tsa.raw.Nlen = sa.Nlen\n\tsa.raw.Alen = sa.Alen\n\tsa.raw.Slen = sa.Slen\n\tsa.raw.Data = sa.Data\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_LINK:\n\t\tpp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrDatalink)\n\t\tsa.Len = pp.Len\n\t\tsa.Family = pp.Family\n\t\tsa.Index = pp.Index\n\t\tsa.Type = pp.Type\n\t\tsa.Nlen = pp.Nlen\n\t\tsa.Alen = pp.Alen\n\t\tsa.Slen = pp.Slen\n\t\tsa.Data = pp.Data\n\t\treturn sa, nil\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tif pp.Len < 2 || pp.Len > SizeofSockaddrUnix {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t\tsa := new(SockaddrUnix)\n\n\t\t// Some BSDs include the trailing NUL in the length, whereas\n\t\t// others do not. Work around this by subtracting the leading\n\t\t// family and len. The path is then scanned to see if a NUL\n\t\t// terminator still exists within the length.\n\t\tn := int(pp.Len) - 2 // subtract leading Family, Len\n\t\tfor i := 0; i < n; i++ {\n\t\t\tif pp.Path[i] == 0 {\n\t\t\t\t// found early NUL; assume Len included the NUL\n\t\t\t\t// or was overestimating.\n\t\t\t\tn = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\t}\n\treturn anyToSockaddrGOOS(fd, rsa)\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif err != nil {\n\t\treturn\n\t}\n\tif (runtime.GOOS == \"darwin\" || runtime.GOOS == \"ios\") && len == 0 {\n\t\t// Accepted socket has no address.\n\t\t// This is likely due to a bug in xnu kernels,\n\t\t// where instead of ECONNABORTED error socket\n\t\t// is accepted, but has no address.\n\t\tClose(nfd)\n\t\treturn 0, nil, ECONNABORTED\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\t// TODO(jsing): DragonFly has a \"bug\" (see issue 3349), which should be\n\t// reported upstream.\n\tif runtime.GOOS == \"dragonfly\" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 {\n\t\trsa.Addr.Family = AF_UNIX\n\t\trsa.Addr.Len = SizeofSockaddrUnix\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif emptyIovecs(iov) {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\treturn\n}\n\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n//sys\tkevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error)\n\nfunc Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) {\n\tvar change, event unsafe.Pointer\n\tif len(changes) > 0 {\n\t\tchange = unsafe.Pointer(&changes[0])\n\t}\n\tif len(events) > 0 {\n\t\tevent = unsafe.Pointer(&events[0])\n\t}\n\treturn kevent(kq, change, len(changes), event, len(events), timeout)\n}\n\n// sysctlmib translates name to mib number and appends any additional args.\nfunc sysctlmib(name string, args ...int) ([]_C_int, error) {\n\t// Translate name to mib number.\n\tmib, err := nametomib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, a := range args {\n\t\tmib = append(mib, _C_int(a))\n\t}\n\n\treturn mib, nil\n}\n\nfunc Sysctl(name string) (string, error) {\n\treturn SysctlArgs(name)\n}\n\nfunc SysctlArgs(name string, args ...int) (string, error) {\n\tbuf, err := SysctlRaw(name, args...)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := len(buf)\n\n\t// Throw away terminating NUL.\n\tif n > 0 && buf[n-1] == '\\x00' {\n\t\tn--\n\t}\n\treturn string(buf[0:n]), nil\n}\n\nfunc SysctlUint32(name string) (uint32, error) {\n\treturn SysctlUint32Args(name)\n}\n\nfunc SysctlUint32Args(name string, args ...int) (uint32, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn := uintptr(4)\n\tbuf := make([]byte, 4)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn 0, err\n\t}\n\tif n != 4 {\n\t\treturn 0, EIO\n\t}\n\treturn *(*uint32)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc SysctlUint64(name string, args ...int) (uint64, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn := uintptr(8)\n\tbuf := make([]byte, 8)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn 0, err\n\t}\n\tif n != 8 {\n\t\treturn 0, EIO\n\t}\n\treturn *(*uint64)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc SysctlRaw(name string, args ...int) ([]byte, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Find size.\n\tn := uintptr(0)\n\tif err := sysctl(mib, nil, &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Read into buffer of that size.\n\tbuf := make([]byte, n)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// The actual call may return less than the original reported required\n\t// size so ensure we deal with that.\n\treturn buf[:n], nil\n}\n\nfunc SysctlClockinfo(name string) (*Clockinfo, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofClockinfo)\n\tvar ci Clockinfo\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofClockinfo {\n\t\treturn nil, EIO\n\t}\n\treturn &ci, nil\n}\n\nfunc SysctlTimeval(name string) (*Timeval, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar tv Timeval\n\tn := uintptr(unsafe.Sizeof(tv))\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&tv)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != unsafe.Sizeof(tv) {\n\t\treturn nil, EIO\n\t}\n\treturn &tv, nil\n}\n\n//sys\tutimes(path string, timeval *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif ts == nil {\n\t\terr := utimensat(AT_FDCWD, path, nil, 0)\n\t\tif err != ENOSYS {\n\t\t\treturn err\n\t\t}\n\t\treturn utimes(path, nil)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\terr := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\t// Not as efficient as it could be because Timespec and\n\t// Timeval have different types in the different OSes\n\ttv := [2]Timeval{\n\t\tNsecToTimeval(TimespecToNsec(ts[0])),\n\t\tNsecToTimeval(TimespecToNsec(ts[1])),\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\n//sys\tfutimes(fd int, timeval *[2]Timeval) (err error)\n\nfunc Futimes(fd int, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimes(fd, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n// TODO: wrap\n//\tAcct(name nil-string) (err error)\n//\tGethostuuid(uuid *byte, timeout *Timespec) (err error)\n//\tPtrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error)\n\n//sys\tMadvise(b []byte, behav int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Darwin system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//sys\tclosedir(dir uintptr) (err error)\n//sys\treaddir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)\n\nfunc fdopendir(fd int) (dir uintptr, err error) {\n\tr0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)\n\tdir = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fdopendir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fdopendir fdopendir \"/usr/lib/libSystem.B.dylib\"\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\t// Simulate Getdirentries using fdopendir/readdir_r/closedir.\n\t// We store the number of entries to skip in the seek\n\t// offset of fd. See issue #31368.\n\t// It's not the full required semantics, but should handle the case\n\t// of calling Getdirentries or ReadDirent repeatedly.\n\t// It won't handle assigning the results of lseek to *basep, or handle\n\t// the directory being edited underfoot.\n\tskip, err := Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// We need to duplicate the incoming file descriptor\n\t// because the caller expects to retain control of it, but\n\t// fdopendir expects to take control of its argument.\n\t// Just Dup'ing the file descriptor is not enough, as the\n\t// result shares underlying state. Use Openat to make a really\n\t// new file descriptor referring to the same directory.\n\tfd2, err := Openat(fd, \".\", O_RDONLY, 0)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\td, err := fdopendir(fd2)\n\tif err != nil {\n\t\tClose(fd2)\n\t\treturn 0, err\n\t}\n\tdefer closedir(d)\n\n\tvar cnt int64\n\tfor {\n\t\tvar entry Dirent\n\t\tvar entryp *Dirent\n\t\te := readdir_r(d, &entry, &entryp)\n\t\tif e != 0 {\n\t\t\treturn n, errnoErr(e)\n\t\t}\n\t\tif entryp == nil {\n\t\t\tbreak\n\t\t}\n\t\tif skip > 0 {\n\t\t\tskip--\n\t\t\tcnt++\n\t\t\tcontinue\n\t\t}\n\n\t\treclen := int(entry.Reclen)\n\t\tif reclen > len(buf) {\n\t\t\t// Not enough room. Return for now.\n\t\t\t// The counter will let us know where we should start up again.\n\t\t\t// Note: this strategy for suspending in the middle and\n\t\t\t// restarting is O(n^2) in the length of the directory. Oh well.\n\t\t\tbreak\n\t\t}\n\n\t\t// Copy entry into return buffer.\n\t\ts := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)\n\t\tcopy(buf, s)\n\n\t\tbuf = buf[reclen:]\n\t\tn += reclen\n\t\tcnt++\n\t}\n\t// Set the seek offset of the input fd to record\n\t// how many files we've already returned.\n\t_, err = Seek(fd, cnt, 0 /* SEEK_SET */)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\treturn n, nil\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\traw    RawSockaddrDatalink\n}\n\n// SockaddrCtl implements the Sockaddr interface for AF_SYSTEM type sockets.\ntype SockaddrCtl struct {\n\tID   uint32\n\tUnit uint32\n\traw  RawSockaddrCtl\n}\n\nfunc (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Sc_len = SizeofSockaddrCtl\n\tsa.raw.Sc_family = AF_SYSTEM\n\tsa.raw.Ss_sysaddr = AF_SYS_CONTROL\n\tsa.raw.Sc_id = sa.ID\n\tsa.raw.Sc_unit = sa.Unit\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil\n}\n\n// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.\n// SockaddrVM provides access to Darwin VM sockets: a mechanism that enables\n// bidirectional communication between a hypervisor and its guest virtual\n// machines.\ntype SockaddrVM struct {\n\t// CID and Port specify a context ID and port address for a VM socket.\n\t// Guests have a unique CID, and hosts may have a well-known CID of:\n\t//  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.\n\t//  - VMADDR_CID_LOCAL: refers to local communication (loopback).\n\t//  - VMADDR_CID_HOST: refers to other processes on the host.\n\tCID  uint32\n\tPort uint32\n\traw  RawSockaddrVM\n}\n\nfunc (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Len = SizeofSockaddrVM\n\tsa.raw.Family = AF_VSOCK\n\tsa.raw.Port = sa.Port\n\tsa.raw.Cid = sa.CID\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_SYSTEM:\n\t\tpp := (*RawSockaddrCtl)(unsafe.Pointer(rsa))\n\t\tif pp.Ss_sysaddr == AF_SYS_CONTROL {\n\t\t\tsa := new(SockaddrCtl)\n\t\t\tsa.ID = pp.Sc_id\n\t\t\tsa.Unit = pp.Sc_unit\n\t\t\treturn sa, nil\n\t\t}\n\tcase AF_VSOCK:\n\t\tpp := (*RawSockaddrVM)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrVM{\n\t\t\tCID:  pp.Cid,\n\t\t\tPort: pp.Port,\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\n// Some external packages rely on SYS___SYSCTL being defined to implement their\n// own sysctl wrappers. Provide it here, even though direct syscalls are no\n// longer supported on darwin.\nconst SYS___SYSCTL = SYS_SYSCTL\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }\nfunc PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }\nfunc PtraceDenyAttach() (err error)    { return ptrace(PT_DENY_ATTACH, 0, 0, 0) }\n\n//sysnb\tpipe(p *[2]int32) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar x [2]int32\n\terr = pipe(&x)\n\tif err == nil {\n\t\tp[0] = int(x[0])\n\t\tp[1] = int(x[1])\n\t}\n\treturn\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\treturn getfsstat(_p0, bufsize, flags)\n}\n\nfunc xattrPointer(dest []byte) *byte {\n\t// It's only when dest is set to NULL that the OS X implementations of\n\t// getxattr() and listxattr() return the current sizes of the named attributes.\n\t// An empty byte array is not sufficient. To maintain the same behaviour as the\n\t// linux implementation, we wrap around the system calls and pass in NULL when\n\t// dest is empty.\n\tvar destp *byte\n\tif len(dest) > 0 {\n\t\tdestp = &dest[0]\n\t}\n\treturn destp\n}\n\n//sys\tgetxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\treturn getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0)\n}\n\nfunc Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\treturn getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)\n}\n\n//sys\tfgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\treturn fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)\n}\n\n//sys\tsetxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\t// The parameters for the OS X implementation vary slightly compared to the\n\t// linux system call, specifically the position parameter:\n\t//\n\t//  linux:\n\t//      int setxattr(\n\t//          const char *path,\n\t//          const char *name,\n\t//          const void *value,\n\t//          size_t size,\n\t//          int flags\n\t//      );\n\t//\n\t//  darwin:\n\t//      int setxattr(\n\t//          const char *path,\n\t//          const char *name,\n\t//          void *value,\n\t//          size_t size,\n\t//          u_int32_t position,\n\t//          int options\n\t//      );\n\t//\n\t// position specifies the offset within the extended attribute. In the\n\t// current implementation, only the resource fork extended attribute makes\n\t// use of this argument. For all others, position is reserved. We simply\n\t// default to setting it to zero.\n\treturn setxattr(path, attr, xattrPointer(data), len(data), 0, flags)\n}\n\nfunc Lsetxattr(link string, attr string, data []byte, flags int) (err error) {\n\treturn setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)\n}\n\n//sys\tfsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)\n\nfunc Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {\n\treturn fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)\n}\n\n//sys\tremovexattr(path string, attr string, options int) (err error)\n\nfunc Removexattr(path string, attr string) (err error) {\n\t// We wrap around and explicitly zero out the options provided to the OS X\n\t// implementation of removexattr, we do so for interoperability with the\n\t// linux variant.\n\treturn removexattr(path, attr, 0)\n}\n\nfunc Lremovexattr(link string, attr string) (err error) {\n\treturn removexattr(link, attr, XATTR_NOFOLLOW)\n}\n\n//sys\tfremovexattr(fd int, attr string, options int) (err error)\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\treturn fremovexattr(fd, attr, 0)\n}\n\n//sys\tlistxattr(path string, dest *byte, size int, options int) (sz int, err error)\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\treturn listxattr(path, xattrPointer(dest), len(dest), 0)\n}\n\nfunc Llistxattr(link string, dest []byte) (sz int, err error) {\n\treturn listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)\n}\n\n//sys\tflistxattr(fd int, dest *byte, size int, options int) (sz int, err error)\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\treturn flistxattr(fd, xattrPointer(dest), len(dest), 0)\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\n/*\n * Wrapped\n */\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n//sys\tkill(pid int, signum int, posix int) (err error)\n\nfunc Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\nfunc IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error {\n\treturn ioctlPtr(fd, CTLIOCGINFO, unsafe.Pointer(ctlInfo))\n}\n\n// IfreqMTU is struct ifreq used to get or set a network device's MTU.\ntype IfreqMTU struct {\n\tName [IFNAMSIZ]byte\n\tMTU  int32\n}\n\n// IoctlGetIfreqMTU performs the SIOCGIFMTU ioctl operation on fd to get the MTU\n// of the network device specified by ifname.\nfunc IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) {\n\tvar ifreq IfreqMTU\n\tcopy(ifreq.Name[:], ifname)\n\terr := ioctlPtr(fd, SIOCGIFMTU, unsafe.Pointer(&ifreq))\n\treturn &ifreq, err\n}\n\n// IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU\n// of the network device specified by ifreq.Name.\nfunc IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error {\n\treturn ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq))\n}\n\n//sys\trenamexNp(from string, to string, flag uint32) (err error)\n\nfunc RenamexNp(from string, to string, flag uint32) (err error) {\n\treturn renamexNp(from, to, flag)\n}\n\n//sys\trenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error)\n\nfunc RenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {\n\treturn renameatxNp(fromfd, from, tofd, to, flag)\n}\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tvar length = int64(count)\n\terr = sendfile(infd, outfd, *offset, &length, nil, 0)\n\twritten = int(length)\n\treturn\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terrno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, errno\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\n// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.\n// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.\nfunc GetsockoptXucred(fd, level, opt int) (*Xucred, error) {\n\tx := new(Xucred)\n\tvallen := _Socklen(SizeofXucred)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)\n\treturn x, err\n}\n\nfunc GetsockoptTCPConnectionInfo(fd, level, opt int) (*TCPConnectionInfo, error) {\n\tvar value TCPConnectionInfo\n\tvallen := _Socklen(SizeofTCPConnectionInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar kinfo KinfoProc\n\tn := uintptr(SizeofKinfoProc)\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&kinfo)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofKinfoProc {\n\t\treturn nil, EIO\n\t}\n\treturn &kinfo, nil\n}\n\nfunc SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor {\n\t\t// Find size.\n\t\tn := uintptr(0)\n\t\tif err := sysctl(mib, nil, &n, nil, 0); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif n == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\t\tif n%SizeofKinfoProc != 0 {\n\t\t\treturn nil, fmt.Errorf(\"sysctl() returned a size of %d, which is not a multiple of %d\", n, SizeofKinfoProc)\n\t\t}\n\n\t\t// Read into buffer of that size.\n\t\tbuf := make([]KinfoProc, n/SizeofKinfoProc)\n\t\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil {\n\t\t\tif err == ENOMEM {\n\t\t\t\t// Process table grew. Try again.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tif n%SizeofKinfoProc != 0 {\n\t\t\treturn nil, fmt.Errorf(\"sysctl() returned a size of %d, which is not a multiple of %d\", n, SizeofKinfoProc)\n\t\t}\n\n\t\t// The actual call may return less than the original reported required\n\t\t// size so ensure we deal with that.\n\t\treturn buf[:n/SizeofKinfoProc], nil\n\t}\n}\n\n//sys\tpthread_chdir_np(path string) (err error)\n\nfunc PthreadChdir(path string) (err error) {\n\treturn pthread_chdir_np(path)\n}\n\n//sys\tpthread_fchdir_np(fd int) (err error)\n\nfunc PthreadFchdir(fd int) (err error) {\n\treturn pthread_fchdir_np(fd)\n}\n\n// Connectx calls connectx(2) to initiate a connection on a socket.\n//\n// srcIf, srcAddr, and dstAddr are filled into a [SaEndpoints] struct and passed as the endpoints argument.\n//\n//   - srcIf is the optional source interface index. 0 means unspecified.\n//   - srcAddr is the optional source address. nil means unspecified.\n//   - dstAddr is the destination address.\n//\n// On success, Connectx returns the number of bytes enqueued for transmission.\nfunc Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocID, flags uint32, iov []Iovec, connid *SaeConnID) (n uintptr, err error) {\n\tendpoints := SaEndpoints{\n\t\tSrcif: srcIf,\n\t}\n\n\tif srcAddr != nil {\n\t\taddrp, addrlen, err := srcAddr.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tendpoints.Srcaddr = (*RawSockaddr)(addrp)\n\t\tendpoints.Srcaddrlen = uint32(addrlen)\n\t}\n\n\tif dstAddr != nil {\n\t\taddrp, addrlen, err := dstAddr.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tendpoints.Dstaddr = (*RawSockaddr)(addrp)\n\t\tendpoints.Dstaddrlen = uint32(addrlen)\n\t}\n\n\terr = connectx(fd, &endpoints, associd, flags, iov, &n, connid)\n\treturn\n}\n\n// sys\tconnectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)\nconst minIovec = 8\n\nfunc Readv(fd int, iovs [][]byte) (n int, err error) {\n\tif !darwinKernelVersionMin(11, 0, 0) {\n\t\treturn 0, ENOSYS\n\t}\n\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tn, err = readv(fd, iovecs)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {\n\tif !darwinKernelVersionMin(11, 0, 0) {\n\t\treturn 0, ENOSYS\n\t}\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tn, err = preadv(fd, iovecs, offset)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc Writev(fd int, iovs [][]byte) (n int, err error) {\n\tif !darwinKernelVersionMin(11, 0, 0) {\n\t\treturn 0, ENOSYS\n\t}\n\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = writev(fd, iovecs)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {\n\tif !darwinKernelVersionMin(11, 0, 0) {\n\t\treturn 0, ENOSYS\n\t}\n\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = pwritev(fd, iovecs, offset)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc appendBytes(vecs []Iovec, bs [][]byte) []Iovec {\n\tfor _, b := range bs {\n\t\tvar v Iovec\n\t\tv.SetLen(len(b))\n\t\tif len(b) > 0 {\n\t\t\tv.Base = &b[0]\n\t\t} else {\n\t\t\tv.Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t\tvecs = append(vecs, v)\n\t}\n\treturn vecs\n}\n\nfunc writevRacedetect(iovecs []Iovec, n int) {\n\tif !raceenabled {\n\t\treturn\n\t}\n\tfor i := 0; n > 0 && i < len(iovecs); i++ {\n\t\tm := int(iovecs[i].Len)\n\t\tif m > n {\n\t\t\tm = n\n\t\t}\n\t\tn -= m\n\t\tif m > 0 {\n\t\t\traceReadRange(unsafe.Pointer(iovecs[i].Base), m)\n\t\t}\n\t}\n}\n\nfunc readvRacedetect(iovecs []Iovec, n int, err error) {\n\tif !raceenabled {\n\t\treturn\n\t}\n\tfor i := 0; n > 0 && i < len(iovecs); i++ {\n\t\tm := int(iovecs[i].Len)\n\t\tif m > n {\n\t\t\tm = n\n\t\t}\n\t\tn -= m\n\t\tif m > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(iovecs[i].Base), m)\n\t\t}\n\t}\n\tif err == nil {\n\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t}\n}\n\nfunc darwinMajorMinPatch() (maj, min, patch int, err error) {\n\tvar un Utsname\n\terr = Uname(&un)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar mmp [3]int\n\tc := 0\nLoop:\n\tfor _, b := range un.Release[:] {\n\t\tswitch {\n\t\tcase b >= '0' && b <= '9':\n\t\t\tmmp[c] = 10*mmp[c] + int(b-'0')\n\t\tcase b == '.':\n\t\t\tc++\n\t\t\tif c > 2 {\n\t\t\t\treturn 0, 0, 0, ENOTSUP\n\t\t\t}\n\t\tcase b == 0:\n\t\t\tbreak Loop\n\t\tdefault:\n\t\t\treturn 0, 0, 0, ENOTSUP\n\t\t}\n\t}\n\tif c != 2 {\n\t\treturn 0, 0, 0, ENOTSUP\n\t}\n\treturn mmp[0], mmp[1], mmp[2], nil\n}\n\nfunc darwinKernelVersionMin(maj, min, patch int) bool {\n\tactualMaj, actualMin, actualPatch, err := darwinMajorMinPatch()\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn actualMaj > maj || actualMaj == maj && (actualMin > min || actualMin == min && actualPatch >= patch)\n}\n\n//sys\tsendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)\n\n//sys\tshmat(id int, addr uintptr, flag int) (ret uintptr, err error)\n//sys\tshmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)\n//sys\tshmdt(addr uintptr) (err error)\n//sys\tshmget(key int, size int, flag int) (id int, err error)\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tClonefile(src string, dst string, flags int) (err error)\n//sys\tClonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExchangedata(path1 string, path2 string, options int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetcwd(buf []byte) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tp *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sysnb\tIssetugid() (tainted bool)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMount(fsType string, dir string, flags int, data unsafe.Pointer) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tSetattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error)\n//sys\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tSetprivexec(flag int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\treadv(fd int, iovecs []Iovec) (n int, err error)\n//sys\tpreadv(fd int, iovecs []Iovec, offset int64) (n int, err error)\n//sys\twritev(fd int, iovecs []Iovec) (n int, err error)\n//sys\tpwritev(fd int, iovecs []Iovec, offset int64) (n int, err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && darwin\n\npackage unix\n\nimport \"syscall\"\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tStatfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && darwin\n\npackage unix\n\nimport \"syscall\"\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic\n\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin\n\npackage unix\n\nimport _ \"unsafe\"\n\n// Implemented in the runtime package (runtime/sys_darwin.go)\nfunc syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only\nfunc syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\n\n//go:linkname syscall_syscall syscall.syscall\n//go:linkname syscall_syscall6 syscall.syscall6\n//go:linkname syscall_syscall6X syscall.syscall6X\n//go:linkname syscall_syscall9 syscall.syscall9\n//go:linkname syscall_rawSyscall syscall.rawSyscall\n//go:linkname syscall_rawSyscall6 syscall.rawSyscall6\n//go:linkname syscall_syscallPtr syscall.syscallPtr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_dragonfly.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// DragonFly BSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"sync\"\n\t\"unsafe\"\n)\n\n// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h\nvar (\n\tosreldateOnce sync.Once\n\tosreldate     uint32\n)\n\n// First __DragonFly_version after September 2019 ABI changes\n// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html\nconst _dragonflyABIChangeVersion = 500705\n\nfunc supportsABI(ver uint32) bool {\n\tosreldateOnce.Do(func() { osreldate, _ = SysctlUint32(\"kern.osreldate\") })\n\treturn osreldate >= ver\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\tRcf    uint16\n\tRoute  [16]uint16\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\tnamlen, ok := direntNamlen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn (16 + namlen + 1 + 7) &^ 7, true\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\n//sysnb\tpipe() (r int, w int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tr, w, err := pipe()\n\tif err == nil {\n\t\tp[0], p[1] = r, w\n\t}\n\treturn\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (r int, w int, err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\t// pipe2 on dragonfly takes an fds array as an argument, but still\n\t// returns the file descriptors.\n\tr, w, err := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0], p[1] = r, w\n\t}\n\treturn err\n}\n\n//sys\textpread(fd int, p []byte, flags int, offset int64) (n int, err error)\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\treturn extpread(fd, p, 0, offset)\n}\n\n//sys\textpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\treturn extpwrite(fd, p, 0, offset)\n}\n\nfunc Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\nfunc sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {\n\terr := sysctl(mib, old, oldlen, nil, 0)\n\tif err != nil {\n\t\t// Utsname members on Dragonfly are only 32 bytes and\n\t\t// the syscall returns ENOMEM in case the actual value\n\t\t// is longer.\n\t\tif err == ENOMEM {\n\t\t\terr = nil\n\t\t}\n\t}\n\treturn err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctlUname(mib, &uname.Release[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Release[unsafe.Sizeof(uname.Release)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctlUname(mib, &uname.Version[0], &n); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctlUname(mib, &uname.Machine[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\nfunc Dup3(oldfd, newfd, flags int) error {\n\tif oldfd == newfd || flags&^O_CLOEXEC != 0 {\n\t\treturn EINVAL\n\t}\n\thow := F_DUP2FD\n\tif flags&O_CLOEXEC != 0 {\n\t\thow = F_DUP2FD_CLOEXEC\n\t}\n\t_, err := fcntl(oldfd, how, newfd)\n\treturn err\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetdents(fd int, buf []byte) (n int, err error)\n//sys\tGetdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(fd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\taccept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && dragonfly\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// FreeBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"sync\"\n\t\"unsafe\"\n)\n\n// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.\nvar (\n\tosreldateOnce sync.Once\n\tosreldate     uint32\n)\n\nfunc supportsABI(ver uint32) bool {\n\tosreldateOnce.Do(func() { osreldate, _ = SysctlUint32(\"kern.osreldate\") })\n\treturn osreldate >= ver\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [46]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc Pipe(p []int) (err error) {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terrno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, errno\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\n// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.\n// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.\nfunc GetsockoptXucred(fd, level, opt int) (*Xucred, error) {\n\tx := new(Xucred)\n\tvallen := _Socklen(SizeofXucred)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)\n\treturn x, err\n}\n\nfunc Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar (\n\t\t_p0     unsafe.Pointer\n\t\tbufsize uintptr\n\t)\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\t// Suppress ENOMEM errors to be compatible with the C library __xuname() implementation.\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Stat(path string, st *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, st, 0)\n}\n\nfunc Lstat(path string, st *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\treturn Getdirentries(fd, buf, nil)\n}\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tif basep == nil || unsafe.Sizeof(*basep) == 8 {\n\t\treturn getdirentries(fd, buf, (*uint64)(unsafe.Pointer(basep)))\n\t}\n\t// The syscall needs a 64-bit base. On 32-bit machines\n\t// we can't just use the basep passed in. See #32498.\n\tvar base uint64 = uint64(*basep)\n\tn, err = getdirentries(fd, buf, &base)\n\t*basep = uintptr(base)\n\tif base>>32 != 0 {\n\t\t// We can't stuff the base back into a uintptr, so any\n\t\t// future calls would be suspect. Generate an error.\n\t\t// EIO is allowed by getdirentries.\n\t\terr = EIO\n\t}\n\treturn\n}\n\nfunc Mknod(path string, mode uint32, dev uint64) (err error) {\n\treturn Mknodat(AT_FDCWD, path, mode, dev)\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n//sys\tptrace(request int, pid int, addr uintptr, data int) (err error)\n//sys\tptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) = SYS_PTRACE\n\nfunc PtraceAttach(pid int) (err error) {\n\treturn ptrace(PT_ATTACH, pid, 0, 0)\n}\n\nfunc PtraceCont(pid int, signal int) (err error) {\n\treturn ptrace(PT_CONTINUE, pid, 1, signal)\n}\n\nfunc PtraceDetach(pid int) (err error) {\n\treturn ptrace(PT_DETACH, pid, 1, 0)\n}\n\nfunc PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {\n\treturn ptracePtr(PT_GETFPREGS, pid, unsafe.Pointer(fpregsout), 0)\n}\n\nfunc PtraceGetRegs(pid int, regsout *Reg) (err error) {\n\treturn ptracePtr(PT_GETREGS, pid, unsafe.Pointer(regsout), 0)\n}\n\nfunc PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {\n\tioDesc := PtraceIoDesc{\n\t\tOp:   int32(req),\n\t\tOffs: offs,\n\t}\n\tif countin > 0 {\n\t\t_ = out[:countin] // check bounds\n\t\tioDesc.Addr = &out[0]\n\t} else if out != nil {\n\t\tioDesc.Addr = (*byte)(unsafe.Pointer(&_zero))\n\t}\n\tioDesc.SetLen(countin)\n\n\terr = ptracePtr(PT_IO, pid, unsafe.Pointer(&ioDesc), 0)\n\treturn int(ioDesc.Len), err\n}\n\nfunc PtraceLwpEvents(pid int, enable int) (err error) {\n\treturn ptrace(PT_LWP_EVENTS, pid, 0, enable)\n}\n\nfunc PtraceLwpInfo(pid int, info *PtraceLwpInfoStruct) (err error) {\n\treturn ptracePtr(PT_LWPINFO, pid, unsafe.Pointer(info), int(unsafe.Sizeof(*info)))\n}\n\nfunc PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong)\n}\n\nfunc PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong)\n}\n\nfunc PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong)\n}\n\nfunc PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong)\n}\n\nfunc PtraceSetRegs(pid int, regs *Reg) (err error) {\n\treturn ptracePtr(PT_SETREGS, pid, unsafe.Pointer(regs), 0)\n}\n\nfunc PtraceSingleStep(pid int) (err error) {\n\treturn ptrace(PT_STEP, pid, 1, 0)\n}\n\nfunc Dup3(oldfd, newfd, flags int) error {\n\tif oldfd == newfd || flags&^O_CLOEXEC != 0 {\n\t\treturn EINVAL\n\t}\n\thow := F_DUP2FD\n\tif flags&O_CLOEXEC != 0 {\n\t\thow = F_DUP2FD_CLOEXEC\n\t}\n\t_, err := fcntl(oldfd, how, newfd)\n\treturn err\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tCapEnter() (err error)\n//sys\tcapRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET\n//sys\tcapRightsLimit(fd int, rightsp *CapRights) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tgetdirentries(fd int, buf []byte, basep *uint64) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknodat(fd int, path string, mode uint32, dev uint64) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(fdat int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\taccept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc PtraceGetFsBase(pid int, fsbase *int64) (err error) {\n\treturn ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint64(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc PtraceGetFsBase(pid int, fsbase *int64) (err error) {\n\treturn ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint64(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint64(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_hurd.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build hurd\n\npackage unix\n\n/*\n#include <stdint.h>\nint ioctl(int, unsigned long int, uintptr_t);\n*/\nimport \"C\"\nimport \"unsafe\"\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(uintptr(arg)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_hurd_386.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && hurd\n\npackage unix\n\nconst (\n\tTIOCGETA = 0x62251713\n)\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_illumos.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// illumos system calls not present on Solaris.\n\n//go:build amd64 && illumos\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nfunc bytes2iovec(bs [][]byte) []Iovec {\n\tiovecs := make([]Iovec, len(bs))\n\tfor i, b := range bs {\n\t\tiovecs[i].SetLen(len(b))\n\t\tif len(b) > 0 {\n\t\t\tiovecs[i].Base = &b[0]\n\t\t} else {\n\t\t\tiovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t}\n\treturn iovecs\n}\n\n//sys\treadv(fd int, iovs []Iovec) (n int, err error)\n\nfunc Readv(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = readv(fd, iovecs)\n\treturn n, err\n}\n\n//sys\tpreadv(fd int, iovs []Iovec, off int64) (n int, err error)\n\nfunc Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = preadv(fd, iovecs, off)\n\treturn n, err\n}\n\n//sys\twritev(fd int, iovs []Iovec) (n int, err error)\n\nfunc Writev(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = writev(fd, iovecs)\n\treturn n, err\n}\n\n//sys\tpwritev(fd int, iovs []Iovec, off int64) (n int, err error)\n\nfunc Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = pwritev(fd, iovecs, off)\n\treturn n, err\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4\n\nfunc Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Linux system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and\n// wrap it in our own nicer implementation.\n\npackage unix\n\nimport (\n\t\"encoding/binary\"\n\t\"slices\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\n/*\n * Wrapped\n */\n\nfunc Access(path string, mode uint32) (err error) {\n\treturn Faccessat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chmod(path string, mode uint32) (err error) {\n\treturn Fchmodat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, 0)\n}\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\treturn Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)\n}\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tif size <= 0 {\n\t\treturn -1, EINVAL\n\t}\n\treturn EpollCreate1(0)\n}\n\n//sys\tFanotifyInit(flags uint, event_f_flags uint) (fd int, err error)\n//sys\tfanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error)\n\nfunc FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) {\n\tif pathname == \"\" {\n\t\treturn fanotifyMark(fd, flags, mask, dirFd, nil)\n\t}\n\tp, err := BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn fanotifyMark(fd, flags, mask, dirFd, p)\n}\n\n//sys\tfchmodat(dirfd int, path string, mode uint32) (err error)\n//sys\tfchmodat2(dirfd int, path string, mode uint32, flags int) (err error)\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) error {\n\t// Linux fchmodat doesn't support the flags parameter, but fchmodat2 does.\n\t// Try fchmodat2 if flags are specified.\n\tif flags != 0 {\n\t\terr := fchmodat2(dirfd, path, mode, flags)\n\t\tif err == ENOSYS {\n\t\t\t// fchmodat2 isn't available. If the flags are known to be valid,\n\t\t\t// return EOPNOTSUPP to indicate that fchmodat doesn't support them.\n\t\t\tif flags&^(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {\n\t\t\t\treturn EINVAL\n\t\t\t} else if flags&(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {\n\t\t\t\treturn EOPNOTSUPP\n\t\t\t}\n\t\t}\n\t\treturn err\n\t}\n\treturn fchmodat(dirfd, path, mode)\n}\n\nfunc InotifyInit() (fd int, err error) {\n\treturn InotifyInit1(0)\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n// ioctl itself should not be exposed directly, but additional get/set functions\n// for specific types are permissible. These are defined in ioctl.go and\n// ioctl_linux.go.\n//\n// The third argument to ioctl is often a pointer but sometimes an integer.\n// Callers should use ioctlPtr when the third argument is a pointer and ioctl\n// when the third argument is an integer.\n//\n// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr.\n\n//sys\tLinkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)\n\nfunc Link(oldpath string, newpath string) (err error) {\n\treturn Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)\n}\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\treturn Mkdirat(AT_FDCWD, path, mode)\n}\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\treturn Mknodat(AT_FDCWD, path, mode, dev)\n}\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\treturn openat(AT_FDCWD, path, mode|O_LARGEFILE, perm)\n}\n\n//sys\topenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\treturn openat(dirfd, path, flags|O_LARGEFILE, mode)\n}\n\n//sys\topenat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error)\n\nfunc Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) {\n\treturn openat2(dirfd, path, how, SizeofOpenHow)\n}\n\nfunc Pipe(p []int) error {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\n//sys\tppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n\nfunc Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, timeout, sigmask)\n\t}\n\treturn ppoll(&fds[0], len(fds), timeout, sigmask)\n}\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout >= 0 {\n\t\tts = new(Timespec)\n\t\t*ts = NsecToTimespec(int64(timeout) * 1e6)\n\t}\n\treturn Ppoll(fds, ts, nil)\n}\n\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\treturn Readlinkat(AT_FDCWD, path, buf)\n}\n\nfunc Rename(oldpath string, newpath string) (err error) {\n\treturn Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath)\n}\n\nfunc Rmdir(path string) error {\n\treturn Unlinkat(AT_FDCWD, path, AT_REMOVEDIR)\n}\n\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n\nfunc Symlink(oldpath string, newpath string) (err error) {\n\treturn Symlinkat(oldpath, AT_FDCWD, newpath)\n}\n\nfunc Unlink(path string) error {\n\treturn Unlinkat(AT_FDCWD, path, 0)\n}\n\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\terr := utimensat(AT_FDCWD, path, nil, 0)\n\t\tif err != ENOSYS {\n\t\t\treturn err\n\t\t}\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar ts [2]Timespec\n\tts[0] = NsecToTimespec(TimevalToNsec(tv[0]))\n\tts[1] = NsecToTimespec(TimevalToNsec(tv[1]))\n\terr := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\treturn UtimesNanoAt(AT_FDCWD, path, ts, 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc Futimesat(dirfd int, path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimesat(dirfd, path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc Futimes(fd int, tv []Timeval) (err error) {\n\t// Believe it or not, this is the best we can do on Linux\n\t// (and is what glibc does).\n\treturn Utimes(\"/proc/self/fd/\"+strconv.Itoa(fd), tv)\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error)\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\tn, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\t// Getcwd returns the number of bytes written to buf, including the NUL.\n\tif n < 1 || n > len(buf) || buf[n-1] != 0 {\n\t\treturn \"\", EINVAL\n\t}\n\t// In some cases, Linux can return a path that starts with the\n\t// \"(unreachable)\" prefix, which can potentially be a valid relative\n\t// path. To work around that, return ENOENT if path is not absolute.\n\tif buf[0] != '/' {\n\t\treturn \"\", ENOENT\n\t}\n\n\treturn string(buf[0 : n-1]), nil\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 1<<16 on Linux.\n\tif n < 0 || n > 1<<20 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\ntype WaitStatus uint32\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits. At least that's the idea.\n// There are various irregularities. For example, the\n// \"continued\" status is 0xFFFF, distinguishing itself\n// from stopped via the core dump bit.\n\nconst (\n\tmask    = 0x7F\n\tcore    = 0x80\n\texited  = 0x00\n\tstopped = 0x7F\n\tshift   = 8\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }\n\nfunc (w WaitStatus) Stopped() bool { return w&0xFF == stopped }\n\nfunc (w WaitStatus) Continued() bool { return w == 0xFFFF }\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w & mask)\n}\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int {\n\tif w.StopSignal() != SIGTRAP {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) >> 8\n}\n\n//sys\twait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\twpid, err = wait4(pid, &status, options, rusage)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n//sys\tWaitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error)\n\nfunc Mkfifo(path string, mode uint32) error {\n\treturn Mknod(path, mode|S_IFIFO, 0)\n}\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) error {\n\treturn Mknodat(dirfd, path, mode|S_IFIFO, 0)\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := range n {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) {\n\t\t// Check sl > 3 so we don't change unnamed socket behavior.\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\n// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets.\ntype SockaddrLinklayer struct {\n\tProtocol uint16\n\tIfindex  int\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]byte\n\traw      RawSockaddrLinklayer\n}\n\nfunc (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_PACKET\n\tsa.raw.Protocol = sa.Protocol\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\tsa.raw.Hatype = sa.Hatype\n\tsa.raw.Pkttype = sa.Pkttype\n\tsa.raw.Halen = sa.Halen\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil\n}\n\n// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets.\ntype SockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n\traw    RawSockaddrNetlink\n}\n\nfunc (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_NETLINK\n\tsa.raw.Pad = sa.Pad\n\tsa.raw.Pid = sa.Pid\n\tsa.raw.Groups = sa.Groups\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil\n}\n\n// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the HCI protocol.\ntype SockaddrHCI struct {\n\tDev     uint16\n\tChannel uint16\n\traw     RawSockaddrHCI\n}\n\nfunc (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tsa.raw.Dev = sa.Dev\n\tsa.raw.Channel = sa.Channel\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil\n}\n\n// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the L2CAP protocol.\ntype SockaddrL2 struct {\n\tPSM      uint16\n\tCID      uint16\n\tAddr     [6]uint8\n\tAddrType uint8\n\traw      RawSockaddrL2\n}\n\nfunc (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tpsm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))\n\tpsm[0] = byte(sa.PSM)\n\tpsm[1] = byte(sa.PSM >> 8)\n\tfor i := range len(sa.Addr) {\n\t\tsa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]\n\t}\n\tcid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))\n\tcid[0] = byte(sa.CID)\n\tcid[1] = byte(sa.CID >> 8)\n\tsa.raw.Bdaddr_type = sa.AddrType\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil\n}\n\n// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the RFCOMM protocol.\n//\n// Server example:\n//\n//\tfd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)\n//\t_ = unix.Bind(fd, &unix.SockaddrRFCOMM{\n//\t\tChannel: 1,\n//\t\tAddr:    [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00\n//\t})\n//\t_ = Listen(fd, 1)\n//\tnfd, sa, _ := Accept(fd)\n//\tfmt.Printf(\"conn addr=%v fd=%d\", sa.(*unix.SockaddrRFCOMM).Addr, nfd)\n//\tRead(nfd, buf)\n//\n// Client example:\n//\n//\tfd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)\n//\t_ = Connect(fd, &SockaddrRFCOMM{\n//\t\tChannel: 1,\n//\t\tAddr:    [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11\n//\t})\n//\tWrite(fd, []byte(`hello`))\ntype SockaddrRFCOMM struct {\n\t// Addr represents a bluetooth address, byte ordering is little-endian.\n\tAddr [6]uint8\n\n\t// Channel is a designated bluetooth channel, only 1-30 are available for use.\n\t// Since Linux 2.6.7 and further zero value is the first available channel.\n\tChannel uint8\n\n\traw RawSockaddrRFCOMM\n}\n\nfunc (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tsa.raw.Channel = sa.Channel\n\tsa.raw.Bdaddr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil\n}\n\n// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.\n// The RxID and TxID fields are used for transport protocol addressing in\n// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with\n// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning.\n//\n// The SockaddrCAN struct must be bound to the socket file descriptor\n// using Bind before the CAN socket can be used.\n//\n//\t// Read one raw CAN frame\n//\tfd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW)\n//\taddr := &SockaddrCAN{Ifindex: index}\n//\tBind(fd, addr)\n//\tframe := make([]byte, 16)\n//\tRead(fd, frame)\n//\n// The full SocketCAN documentation can be found in the linux kernel\n// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt\ntype SockaddrCAN struct {\n\tIfindex int\n\tRxID    uint32\n\tTxID    uint32\n\traw     RawSockaddrCAN\n}\n\nfunc (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_CAN\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\trx := (*[4]byte)(unsafe.Pointer(&sa.RxID))\n\tfor i := range 4 {\n\t\tsa.raw.Addr[i] = rx[i]\n\t}\n\ttx := (*[4]byte)(unsafe.Pointer(&sa.TxID))\n\tfor i := range 4 {\n\t\tsa.raw.Addr[i+4] = tx[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil\n}\n\n// SockaddrCANJ1939 implements the Sockaddr interface for AF_CAN using J1939\n// protocol (https://en.wikipedia.org/wiki/SAE_J1939). For more information\n// on the purposes of the fields, check the official linux kernel documentation\n// available here: https://www.kernel.org/doc/Documentation/networking/j1939.rst\ntype SockaddrCANJ1939 struct {\n\tIfindex int\n\tName    uint64\n\tPGN     uint32\n\tAddr    uint8\n\traw     RawSockaddrCAN\n}\n\nfunc (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_CAN\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\tn := (*[8]byte)(unsafe.Pointer(&sa.Name))\n\tfor i := range 8 {\n\t\tsa.raw.Addr[i] = n[i]\n\t}\n\tp := (*[4]byte)(unsafe.Pointer(&sa.PGN))\n\tfor i := range 4 {\n\t\tsa.raw.Addr[i+8] = p[i]\n\t}\n\tsa.raw.Addr[12] = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil\n}\n\n// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets.\n// SockaddrALG enables userspace access to the Linux kernel's cryptography\n// subsystem. The Type and Name fields specify which type of hash or cipher\n// should be used with a given socket.\n//\n// To create a file descriptor that provides access to a hash or cipher, both\n// Bind and Accept must be used. Once the setup process is complete, input\n// data can be written to the socket, processed by the kernel, and then read\n// back as hash output or ciphertext.\n//\n// Here is an example of using an AF_ALG socket with SHA1 hashing.\n// The initial socket setup process is as follows:\n//\n//\t// Open a socket to perform SHA1 hashing.\n//\tfd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0)\n//\taddr := &unix.SockaddrALG{Type: \"hash\", Name: \"sha1\"}\n//\tunix.Bind(fd, addr)\n//\t// Note: unix.Accept does not work at this time; must invoke accept()\n//\t// manually using unix.Syscall.\n//\thashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0)\n//\n// Once a file descriptor has been returned from Accept, it may be used to\n// perform SHA1 hashing. The descriptor is not safe for concurrent use, but\n// may be re-used repeatedly with subsequent Write and Read operations.\n//\n// When hashing a small byte slice or string, a single Write and Read may\n// be used:\n//\n//\t// Assume hashfd is already configured using the setup process.\n//\thash := os.NewFile(hashfd, \"sha1\")\n//\t// Hash an input string and read the results. Each Write discards\n//\t// previous hash state. Read always reads the current state.\n//\tb := make([]byte, 20)\n//\tfor i := 0; i < 2; i++ {\n//\t    io.WriteString(hash, \"Hello, world.\")\n//\t    hash.Read(b)\n//\t    fmt.Println(hex.EncodeToString(b))\n//\t}\n//\t// Output:\n//\t// 2ae01472317d1935a84797ec1983ae243fc6aa28\n//\t// 2ae01472317d1935a84797ec1983ae243fc6aa28\n//\n// For hashing larger byte slices, or byte streams such as those read from\n// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update\n// the hash digest instead of creating a new one for a given chunk and finalizing it.\n//\n//\t// Assume hashfd and addr are already configured using the setup process.\n//\thash := os.NewFile(hashfd, \"sha1\")\n//\t// Hash the contents of a file.\n//\tf, _ := os.Open(\"/tmp/linux-4.10-rc7.tar.xz\")\n//\tb := make([]byte, 4096)\n//\tfor {\n//\t    n, err := f.Read(b)\n//\t    if err == io.EOF {\n//\t        break\n//\t    }\n//\t    unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr)\n//\t}\n//\thash.Read(b)\n//\tfmt.Println(hex.EncodeToString(b))\n//\t// Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5\n//\n// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html.\ntype SockaddrALG struct {\n\tType    string\n\tName    string\n\tFeature uint32\n\tMask    uint32\n\traw     RawSockaddrALG\n}\n\nfunc (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\t// Leave room for NUL byte terminator.\n\tif len(sa.Type) > len(sa.raw.Type)-1 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif len(sa.Name) > len(sa.raw.Name)-1 {\n\t\treturn nil, 0, EINVAL\n\t}\n\n\tsa.raw.Family = AF_ALG\n\tsa.raw.Feat = sa.Feature\n\tsa.raw.Mask = sa.Mask\n\n\tcopy(sa.raw.Type[:], sa.Type)\n\tcopy(sa.raw.Name[:], sa.Name)\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil\n}\n\n// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.\n// SockaddrVM provides access to Linux VM sockets: a mechanism that enables\n// bidirectional communication between a hypervisor and its guest virtual\n// machines.\ntype SockaddrVM struct {\n\t// CID and Port specify a context ID and port address for a VM socket.\n\t// Guests have a unique CID, and hosts may have a well-known CID of:\n\t//  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.\n\t//  - VMADDR_CID_LOCAL: refers to local communication (loopback).\n\t//  - VMADDR_CID_HOST: refers to other processes on the host.\n\tCID   uint32\n\tPort  uint32\n\tFlags uint8\n\traw   RawSockaddrVM\n}\n\nfunc (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_VSOCK\n\tsa.raw.Port = sa.Port\n\tsa.raw.Cid = sa.CID\n\tsa.raw.Flags = sa.Flags\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil\n}\n\ntype SockaddrXDP struct {\n\tFlags        uint16\n\tIfindex      uint32\n\tQueueID      uint32\n\tSharedUmemFD uint32\n\traw          RawSockaddrXDP\n}\n\nfunc (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_XDP\n\tsa.raw.Flags = sa.Flags\n\tsa.raw.Ifindex = sa.Ifindex\n\tsa.raw.Queue_id = sa.QueueID\n\tsa.raw.Shared_umem_fd = sa.SharedUmemFD\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil\n}\n\n// This constant mirrors the #define of PX_PROTO_OE in\n// linux/if_pppox.h. We're defining this by hand here instead of\n// autogenerating through mkerrors.sh because including\n// linux/if_pppox.h causes some declaration conflicts with other\n// includes (linux/if_pppox.h includes linux/in.h, which conflicts\n// with netinet/in.h). Given that we only need a single zero constant\n// out of that file, it's cleaner to just define it by hand here.\nconst px_proto_oe = 0\n\ntype SockaddrPPPoE struct {\n\tSID    uint16\n\tRemote []byte\n\tDev    string\n\traw    RawSockaddrPPPoX\n}\n\nfunc (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif len(sa.Remote) != 6 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif len(sa.Dev) > IFNAMSIZ-1 {\n\t\treturn nil, 0, EINVAL\n\t}\n\n\t*(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX\n\t// This next field is in host-endian byte order. We can't use the\n\t// same unsafe pointer cast as above, because this value is not\n\t// 32-bit aligned and some architectures don't allow unaligned\n\t// access.\n\t//\n\t// However, the value of px_proto_oe is 0, so we can use\n\t// encoding/binary helpers to write the bytes without worrying\n\t// about the ordering.\n\tbinary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe)\n\t// This field is deliberately big-endian, unlike the previous\n\t// one. The kernel expects SID to be in network byte order.\n\tbinary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)\n\tcopy(sa.raw[8:14], sa.Remote)\n\tfor i := 14; i < 14+IFNAMSIZ; i++ {\n\t\tsa.raw[i] = 0\n\t}\n\tcopy(sa.raw[14:], sa.Dev)\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil\n}\n\n// SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets.\n// For more information on TIPC, see: http://tipc.sourceforge.net/.\ntype SockaddrTIPC struct {\n\t// Scope is the publication scopes when binding service/service range.\n\t// Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE.\n\tScope int\n\n\t// Addr is the type of address used to manipulate a socket. Addr must be\n\t// one of:\n\t//  - *TIPCSocketAddr: \"id\" variant in the C addr union\n\t//  - *TIPCServiceRange: \"nameseq\" variant in the C addr union\n\t//  - *TIPCServiceName: \"name\" variant in the C addr union\n\t//\n\t// If nil, EINVAL will be returned when the structure is used.\n\tAddr TIPCAddr\n\n\traw RawSockaddrTIPC\n}\n\n// TIPCAddr is implemented by types that can be used as an address for\n// SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange,\n// and *TIPCServiceName.\ntype TIPCAddr interface {\n\ttipcAddrtype() uint8\n\ttipcAddr() [12]byte\n}\n\nfunc (sa *TIPCSocketAddr) tipcAddr() [12]byte {\n\tvar out [12]byte\n\tcopy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:])\n\treturn out\n}\n\nfunc (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR }\n\nfunc (sa *TIPCServiceRange) tipcAddr() [12]byte {\n\tvar out [12]byte\n\tcopy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:])\n\treturn out\n}\n\nfunc (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE }\n\nfunc (sa *TIPCServiceName) tipcAddr() [12]byte {\n\tvar out [12]byte\n\tcopy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:])\n\treturn out\n}\n\nfunc (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR }\n\nfunc (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Addr == nil {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_TIPC\n\tsa.raw.Scope = int8(sa.Scope)\n\tsa.raw.Addrtype = sa.Addr.tipcAddrtype()\n\tsa.raw.Addr = sa.Addr.tipcAddr()\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil\n}\n\n// SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets.\ntype SockaddrL2TPIP struct {\n\tAddr   [4]byte\n\tConnId uint32\n\traw    RawSockaddrL2TPIP\n}\n\nfunc (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_INET\n\tsa.raw.Conn_id = sa.ConnId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil\n}\n\n// SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets.\ntype SockaddrL2TPIP6 struct {\n\tAddr   [16]byte\n\tZoneId uint32\n\tConnId uint32\n\traw    RawSockaddrL2TPIP6\n}\n\nfunc (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_INET6\n\tsa.raw.Conn_id = sa.ConnId\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil\n}\n\n// SockaddrIUCV implements the Sockaddr interface for AF_IUCV sockets.\ntype SockaddrIUCV struct {\n\tUserID string\n\tName   string\n\traw    RawSockaddrIUCV\n}\n\nfunc (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_IUCV\n\t// These are EBCDIC encoded by the kernel, but we still need to pad them\n\t// with blanks. Initializing with blanks allows the caller to feed in either\n\t// a padded or an unpadded string.\n\tfor i := range 8 {\n\t\tsa.raw.Nodeid[i] = ' '\n\t\tsa.raw.User_id[i] = ' '\n\t\tsa.raw.Name[i] = ' '\n\t}\n\tif len(sa.UserID) > 8 || len(sa.Name) > 8 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tfor i, b := range []byte(sa.UserID[:]) {\n\t\tsa.raw.User_id[i] = int8(b)\n\t}\n\tfor i, b := range []byte(sa.Name[:]) {\n\t\tsa.raw.Name[i] = int8(b)\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil\n}\n\ntype SockaddrNFC struct {\n\tDeviceIdx   uint32\n\tTargetIdx   uint32\n\tNFCProtocol uint32\n\traw         RawSockaddrNFC\n}\n\nfunc (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Sa_family = AF_NFC\n\tsa.raw.Dev_idx = sa.DeviceIdx\n\tsa.raw.Target_idx = sa.TargetIdx\n\tsa.raw.Nfc_protocol = sa.NFCProtocol\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil\n}\n\ntype SockaddrNFCLLCP struct {\n\tDeviceIdx      uint32\n\tTargetIdx      uint32\n\tNFCProtocol    uint32\n\tDestinationSAP uint8\n\tSourceSAP      uint8\n\tServiceName    string\n\traw            RawSockaddrNFCLLCP\n}\n\nfunc (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Sa_family = AF_NFC\n\tsa.raw.Dev_idx = sa.DeviceIdx\n\tsa.raw.Target_idx = sa.TargetIdx\n\tsa.raw.Nfc_protocol = sa.NFCProtocol\n\tsa.raw.Dsap = sa.DestinationSAP\n\tsa.raw.Ssap = sa.SourceSAP\n\tif len(sa.ServiceName) > len(sa.raw.Service_name) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tcopy(sa.raw.Service_name[:], sa.ServiceName)\n\tsa.raw.SetServiceNameLen(len(sa.ServiceName))\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil\n}\n\nvar socketProtocol = func(fd int) (int, error) {\n\treturn GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_NETLINK:\n\t\tpp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrNetlink)\n\t\tsa.Family = pp.Family\n\t\tsa.Pad = pp.Pad\n\t\tsa.Pid = pp.Pid\n\t\tsa.Groups = pp.Groups\n\t\treturn sa, nil\n\n\tcase AF_PACKET:\n\t\tpp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrLinklayer)\n\t\tsa.Protocol = pp.Protocol\n\t\tsa.Ifindex = int(pp.Ifindex)\n\t\tsa.Hatype = pp.Hatype\n\t\tsa.Pkttype = pp.Pkttype\n\t\tsa.Halen = pp.Halen\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\tif pp.Path[0] == 0 {\n\t\t\t// \"Abstract\" Unix domain socket.\n\t\t\t// Rewrite leading NUL as @ for textual display.\n\t\t\t// (This is the standard convention.)\n\t\t\t// Not friendly to overwrite in place,\n\t\t\t// but the callers below don't care.\n\t\t\tpp.Path[0] = '@'\n\t\t}\n\n\t\t// Assume path ends at NUL.\n\t\t// This is not technically the Linux semantics for\n\t\t// abstract Unix domain sockets--they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs--but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < len(pp.Path) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch proto {\n\t\tcase IPPROTO_L2TP:\n\t\t\tpp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrL2TPIP)\n\t\t\tsa.ConnId = pp.Conn_id\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrInet4)\n\t\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\t}\n\n\tcase AF_INET6:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch proto {\n\t\tcase IPPROTO_L2TP:\n\t\t\tpp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrL2TPIP6)\n\t\t\tsa.ConnId = pp.Conn_id\n\t\t\tsa.ZoneId = pp.Scope_id\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrInet6)\n\t\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\t\tsa.ZoneId = pp.Scope_id\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\t}\n\n\tcase AF_VSOCK:\n\t\tpp := (*RawSockaddrVM)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrVM{\n\t\t\tCID:   pp.Cid,\n\t\t\tPort:  pp.Port,\n\t\t\tFlags: pp.Flags,\n\t\t}\n\t\treturn sa, nil\n\tcase AF_BLUETOOTH:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections\n\t\tswitch proto {\n\t\tcase BTPROTO_L2CAP:\n\t\t\tpp := (*RawSockaddrL2)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrL2{\n\t\t\t\tPSM:      pp.Psm,\n\t\t\t\tCID:      pp.Cid,\n\t\t\t\tAddr:     pp.Bdaddr,\n\t\t\t\tAddrType: pp.Bdaddr_type,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\tcase BTPROTO_RFCOMM:\n\t\t\tpp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrRFCOMM{\n\t\t\t\tChannel: pp.Channel,\n\t\t\t\tAddr:    pp.Bdaddr,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\t}\n\tcase AF_XDP:\n\t\tpp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrXDP{\n\t\t\tFlags:        pp.Flags,\n\t\t\tIfindex:      pp.Ifindex,\n\t\t\tQueueID:      pp.Queue_id,\n\t\t\tSharedUmemFD: pp.Shared_umem_fd,\n\t\t}\n\t\treturn sa, nil\n\tcase AF_PPPOX:\n\t\tpp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa))\n\t\tif binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t\tsa := &SockaddrPPPoE{\n\t\t\tSID:    binary.BigEndian.Uint16(pp[6:8]),\n\t\t\tRemote: pp[8:14],\n\t\t}\n\t\tfor i := 14; i < 14+IFNAMSIZ; i++ {\n\t\t\tif pp[i] == 0 {\n\t\t\t\tsa.Dev = string(pp[14:i])\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn sa, nil\n\tcase AF_TIPC:\n\t\tpp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa))\n\n\t\tsa := &SockaddrTIPC{\n\t\t\tScope: int(pp.Scope),\n\t\t}\n\n\t\t// Determine which union variant is present in pp.Addr by checking\n\t\t// pp.Addrtype.\n\t\tswitch pp.Addrtype {\n\t\tcase TIPC_SERVICE_RANGE:\n\t\t\tsa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr))\n\t\tcase TIPC_SERVICE_ADDR:\n\t\t\tsa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr))\n\t\tcase TIPC_SOCKET_ADDR:\n\t\t\tsa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr))\n\t\tdefault:\n\t\t\treturn nil, EINVAL\n\t\t}\n\n\t\treturn sa, nil\n\tcase AF_IUCV:\n\t\tpp := (*RawSockaddrIUCV)(unsafe.Pointer(rsa))\n\n\t\tvar user [8]byte\n\t\tvar name [8]byte\n\n\t\tfor i := range 8 {\n\t\t\tuser[i] = byte(pp.User_id[i])\n\t\t\tname[i] = byte(pp.Name[i])\n\t\t}\n\n\t\tsa := &SockaddrIUCV{\n\t\t\tUserID: string(user[:]),\n\t\t\tName:   string(name[:]),\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_CAN:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tpp := (*RawSockaddrCAN)(unsafe.Pointer(rsa))\n\n\t\tswitch proto {\n\t\tcase CAN_J1939:\n\t\t\tsa := &SockaddrCANJ1939{\n\t\t\t\tIfindex: int(pp.Ifindex),\n\t\t\t}\n\t\t\tname := (*[8]byte)(unsafe.Pointer(&sa.Name))\n\t\t\tfor i := range 8 {\n\t\t\t\tname[i] = pp.Addr[i]\n\t\t\t}\n\t\t\tpgn := (*[4]byte)(unsafe.Pointer(&sa.PGN))\n\t\t\tfor i := range 4 {\n\t\t\t\tpgn[i] = pp.Addr[i+8]\n\t\t\t}\n\t\t\taddr := (*[1]byte)(unsafe.Pointer(&sa.Addr))\n\t\t\taddr[0] = pp.Addr[12]\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\tsa := &SockaddrCAN{\n\t\t\t\tIfindex: int(pp.Ifindex),\n\t\t\t}\n\t\t\trx := (*[4]byte)(unsafe.Pointer(&sa.RxID))\n\t\t\tfor i := range 4 {\n\t\t\t\trx[i] = pp.Addr[i]\n\t\t\t}\n\t\t\ttx := (*[4]byte)(unsafe.Pointer(&sa.TxID))\n\t\t\tfor i := range 4 {\n\t\t\t\ttx[i] = pp.Addr[i+4]\n\t\t\t}\n\t\t\treturn sa, nil\n\t\t}\n\tcase AF_NFC:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch proto {\n\t\tcase NFC_SOCKPROTO_RAW:\n\t\t\tpp := (*RawSockaddrNFC)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrNFC{\n\t\t\t\tDeviceIdx:   pp.Dev_idx,\n\t\t\t\tTargetIdx:   pp.Target_idx,\n\t\t\t\tNFCProtocol: pp.Nfc_protocol,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\tcase NFC_SOCKPROTO_LLCP:\n\t\t\tpp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa))\n\t\t\tif uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) {\n\t\t\t\treturn nil, EINVAL\n\t\t\t}\n\t\t\tsa := &SockaddrNFCLLCP{\n\t\t\t\tDeviceIdx:      pp.Dev_idx,\n\t\t\t\tTargetIdx:      pp.Target_idx,\n\t\t\t\tNFCProtocol:    pp.Nfc_protocol,\n\t\t\t\tDestinationSAP: pp.Dsap,\n\t\t\t\tSourceSAP:      pp.Ssap,\n\t\t\t\tServiceName:    string(pp.Service_name[:pp.Service_name_len]),\n\t\t\t}\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\treturn nil, EINVAL\n\t\t}\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, 0)\n\tif err != nil {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptUcred(fd, level, opt int) (*Ucred, error) {\n\tvar value Ucred\n\tvallen := _Socklen(SizeofUcred)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {\n\tvar value TCPInfo\n\tvallen := _Socklen(SizeofTCPInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\n// GetsockoptTCPCCVegasInfo returns algorithm specific congestion control information for a socket using the \"vegas\"\n// algorithm.\n//\n// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:\n//\n//\talgo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)\nfunc GetsockoptTCPCCVegasInfo(fd, level, opt int) (*TCPVegasInfo, error) {\n\tvar value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment\n\tvallen := _Socklen(SizeofTCPCCInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\tout := (*TCPVegasInfo)(unsafe.Pointer(&value[0]))\n\treturn out, err\n}\n\n// GetsockoptTCPCCDCTCPInfo returns algorithm specific congestion control information for a socket using the \"dctp\"\n// algorithm.\n//\n// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:\n//\n//\talgo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)\nfunc GetsockoptTCPCCDCTCPInfo(fd, level, opt int) (*TCPDCTCPInfo, error) {\n\tvar value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment\n\tvallen := _Socklen(SizeofTCPCCInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\tout := (*TCPDCTCPInfo)(unsafe.Pointer(&value[0]))\n\treturn out, err\n}\n\n// GetsockoptTCPCCBBRInfo returns algorithm specific congestion control information for a socket using the \"bbr\"\n// algorithm.\n//\n// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:\n//\n//\talgo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)\nfunc GetsockoptTCPCCBBRInfo(fd, level, opt int) (*TCPBBRInfo, error) {\n\tvar value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment\n\tvallen := _Socklen(SizeofTCPCCInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\tout := (*TCPBBRInfo)(unsafe.Pointer(&value[0]))\n\treturn out, err\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\tif err == ERANGE {\n\t\t\tbuf = make([]byte, vallen)\n\t\t\terr = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\nfunc GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {\n\tvar value TpacketStats\n\tvallen := _Socklen(SizeofTpacketStats)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) {\n\tvar value TpacketStatsV3\n\tvallen := _Socklen(SizeofTpacketStatsV3)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\nfunc SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\n// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a\n// socket to filter incoming packets.  See 'man 7 socket' for usage information.\nfunc SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog))\n}\n\nfunc SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error {\n\tvar p unsafe.Pointer\n\tif len(filter) > 0 {\n\t\tp = unsafe.Pointer(&filter[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter))\n}\n\nfunc SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))\n}\n\nfunc SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))\n}\n\nfunc SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) {\n\tif len(o) == 0 {\n\t\treturn EINVAL\n\t}\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o)))\n}\n\nfunc SetsockoptTCPMD5Sig(fd, level, opt int, s *TCPMD5Sig) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(s), unsafe.Sizeof(*s))\n}\n\n// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)\n\n// KeyctlInt calls keyctl commands in which each argument is an int.\n// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK,\n// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT,\n// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT,\n// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT.\n//sys\tKeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlBuffer calls keyctl commands in which the third and fourth\n// arguments are a buffer and its length, respectively.\n// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE.\n//sys\tKeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlString calls keyctl commands which return a string.\n// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY.\nfunc KeyctlString(cmd int, id int) (string, error) {\n\t// We must loop as the string data may change in between the syscalls.\n\t// We could allocate a large buffer here to reduce the chance that the\n\t// syscall needs to be called twice; however, this is unnecessary as\n\t// the performance loss is negligible.\n\tvar buffer []byte\n\tfor {\n\t\t// Try to fill the buffer with data\n\t\tlength, err := KeyctlBuffer(cmd, id, buffer, 0)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\t// Check if the data was written\n\t\tif length <= len(buffer) {\n\t\t\t// Exclude the null terminator\n\t\t\treturn string(buffer[:length-1]), nil\n\t\t}\n\n\t\t// Make a bigger buffer if needed\n\t\tbuffer = make([]byte, length)\n\t}\n}\n\n// Keyctl commands with special signatures.\n\n// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html\nfunc KeyctlGetKeyringID(id int, create bool) (ringid int, err error) {\n\tcreateInt := 0\n\tif create {\n\t\tcreateInt = 1\n\t}\n\treturn KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0)\n}\n\n// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the\n// key handle permission mask as described in the \"keyctl setperm\" section of\n// http://man7.org/linux/man-pages/man1/keyctl.1.html.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html\nfunc KeyctlSetperm(id int, perm uint32) error {\n\t_, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0)\n\treturn err\n}\n\n//sys\tkeyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html\nfunc KeyctlJoinSessionKeyring(name string) (ringid int, err error) {\n\treturn keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name)\n}\n\n//sys\tkeyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlSearch implements the KEYCTL_SEARCH command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_search.3.html\nfunc KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) {\n\treturn keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid)\n}\n\n//sys\tkeyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL\n\n// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This\n// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice\n// of Iovec (each of which represents a buffer) instead of a single buffer.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html\nfunc KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error {\n\treturn keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid)\n}\n\n//sys\tkeyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command\n// computes a Diffie-Hellman shared secret based on the provide params. The\n// secret is written to the provided buffer and the returned size is the number\n// of bytes written (returning an error if there is insufficient space in the\n// buffer). If a nil buffer is passed in, this function returns the minimum\n// buffer length needed to store the appropriate data. Note that this differs\n// from KEYCTL_READ's behavior which always returns the requested payload size.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html\nfunc KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) {\n\treturn keyctlDH(KEYCTL_DH_COMPUTE, params, buffer)\n}\n\n// KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This\n// command limits the set of keys that can be linked to the keyring, regardless\n// of keyring permissions. The command requires the \"setattr\" permission.\n//\n// When called with an empty keyType the command locks the keyring, preventing\n// any further keys from being linked to the keyring.\n//\n// The \"asymmetric\" keyType defines restrictions requiring key payloads to be\n// DER encoded X.509 certificates signed by keys in another keyring. Restrictions\n// for \"asymmetric\" include \"builtin_trusted\", \"builtin_and_secondary_trusted\",\n// \"key_or_keyring:<key>\", and \"key_or_keyring:<key>:chain\".\n//\n// As of Linux 4.12, only the \"asymmetric\" keyType defines type-specific\n// restrictions.\n//\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html\n// http://man7.org/linux/man-pages/man2/keyctl.2.html\nfunc KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error {\n\tif keyType == \"\" {\n\t\treturn keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid)\n\t}\n\treturn keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction)\n}\n\n//sys\tkeyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL\n//sys\tkeyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\tif emptyIovecs(iov) {\n\t\t\tvar sockType int\n\t\t\tsockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// receive at least one normal byte\n\t\t\tif sockType != SOCK_DGRAM {\n\t\t\t\tvar iova [1]Iovec\n\t\t\t\tiova[0].Base = &dummy\n\t\t\t\tiova[0].SetLen(1)\n\t\t\t\tiov = iova[:]\n\t\t\t}\n\t\t}\n\t\tmsg.Control = &oob[0]\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\treturn\n}\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(ptr)\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar sockType int\n\t\t\tsockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\t// send at least one normal byte\n\t\t\tif sockType != SOCK_DGRAM {\n\t\t\t\tvar iova [1]Iovec\n\t\t\t\tiova[0].Base = &dummy\n\t\t\t\tiova[0].SetLen(1)\n\t\t\t\tiov = iova[:]\n\t\t\t}\n\t\t}\n\t\tmsg.Control = &oob[0]\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n// BindToDevice binds the socket associated with fd to device.\nfunc BindToDevice(fd int, device string) (err error) {\n\treturn SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device)\n}\n\n//sys\tptrace(request int, pid int, addr uintptr, data uintptr) (err error)\n//sys\tptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) = SYS_PTRACE\n\nfunc ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) {\n\t// The peek requests are machine-size oriented, so we wrap it\n\t// to retrieve arbitrary-length data.\n\n\t// The ptrace syscall differs from glibc's ptrace.\n\t// Peeks returns the word in *data, not as the return value.\n\n\tvar buf [SizeofPtr]byte\n\n\t// Leading edge. PEEKTEXT/PEEKDATA don't require aligned\n\t// access (PEEKUSER warns that it might), but if we don't\n\t// align our reads, we might straddle an unmapped page\n\t// boundary and not get the bytes leading up to the page\n\t// boundary.\n\tn := 0\n\tif addr%SizeofPtr != 0 {\n\t\terr = ptracePtr(req, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += copy(out, buf[addr%SizeofPtr:])\n\t\tout = out[n:]\n\t}\n\n\t// Remainder.\n\tfor len(out) > 0 {\n\t\t// We use an internal buffer to guarantee alignment.\n\t\t// It's not documented if this is necessary, but we're paranoid.\n\t\terr = ptracePtr(req, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tcopied := copy(out, buf[0:])\n\t\tn += copied\n\t\tout = out[copied:]\n\t}\n\n\treturn n, nil\n}\n\nfunc PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKTEXT, pid, addr, out)\n}\n\nfunc PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKDATA, pid, addr, out)\n}\n\nfunc PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKUSR, pid, addr, out)\n}\n\nfunc ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) {\n\t// As for ptracePeek, we need to align our accesses to deal\n\t// with the possibility of straddling an invalid page.\n\n\t// Leading edge.\n\tn := 0\n\tif addr%SizeofPtr != 0 {\n\t\tvar buf [SizeofPtr]byte\n\t\terr = ptracePtr(peekReq, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += copy(buf[addr%SizeofPtr:], data)\n\t\tword := *((*uintptr)(unsafe.Pointer(&buf[0])))\n\t\terr = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tdata = data[n:]\n\t}\n\n\t// Interior.\n\tfor len(data) > SizeofPtr {\n\t\tword := *((*uintptr)(unsafe.Pointer(&data[0])))\n\t\terr = ptrace(pokeReq, pid, addr+uintptr(n), word)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tn += SizeofPtr\n\t\tdata = data[SizeofPtr:]\n\t}\n\n\t// Trailing edge.\n\tif len(data) > 0 {\n\t\tvar buf [SizeofPtr]byte\n\t\terr = ptracePtr(peekReq, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tcopy(buf[0:], data)\n\t\tword := *((*uintptr)(unsafe.Pointer(&buf[0])))\n\t\terr = ptrace(pokeReq, pid, addr+uintptr(n), word)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tn += len(data)\n\t}\n\n\treturn n, nil\n}\n\nfunc PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data)\n}\n\nfunc PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data)\n}\n\nfunc PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data)\n}\n\n// elfNT_PRSTATUS is a copy of the debug/elf.NT_PRSTATUS constant so\n// x/sys/unix doesn't need to depend on debug/elf and thus\n// compress/zlib, debug/dwarf, and other packages.\nconst elfNT_PRSTATUS = 1\n\nfunc PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {\n\tvar iov Iovec\n\tiov.Base = (*byte)(unsafe.Pointer(regsout))\n\tiov.SetLen(int(unsafe.Sizeof(*regsout)))\n\treturn ptracePtr(PTRACE_GETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov))\n}\n\nfunc PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {\n\tvar iov Iovec\n\tiov.Base = (*byte)(unsafe.Pointer(regs))\n\tiov.SetLen(int(unsafe.Sizeof(*regs)))\n\treturn ptracePtr(PTRACE_SETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov))\n}\n\nfunc PtraceSetOptions(pid int, options int) (err error) {\n\treturn ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options))\n}\n\nfunc PtraceGetEventMsg(pid int) (msg uint, err error) {\n\tvar data _C_long\n\terr = ptracePtr(PTRACE_GETEVENTMSG, pid, 0, unsafe.Pointer(&data))\n\tmsg = uint(data)\n\treturn\n}\n\nfunc PtraceCont(pid int, signal int) (err error) {\n\treturn ptrace(PTRACE_CONT, pid, 0, uintptr(signal))\n}\n\nfunc PtraceSyscall(pid int, signal int) (err error) {\n\treturn ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal))\n}\n\nfunc PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) }\n\nfunc PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) }\n\nfunc PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) }\n\nfunc PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) }\n\nfunc PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) }\n\n//sys\treboot(magic1 uint, magic2 uint, cmd int, arg string) (err error)\n\nfunc Reboot(cmd int) (err error) {\n\treturn reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, \"\")\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\n//sys\tmount(source string, target string, fstype string, flags uintptr, data *byte) (err error)\n\nfunc Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\t// Certain file systems get rather angry and EINVAL if you give\n\t// them an empty string of data, rather than NULL.\n\tif data == \"\" {\n\t\treturn mount(source, target, fstype, flags, nil)\n\t}\n\tdatap, err := BytePtrFromString(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn mount(source, target, fstype, flags, datap)\n}\n\n//sys\tmountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR\n\n// MountSetattr is a wrapper for mount_setattr(2).\n// https://man7.org/linux/man-pages/man2/mount_setattr.2.html\n//\n// Requires kernel >= 5.12.\nfunc MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error {\n\treturn mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr))\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// Sendto\n// Recvfrom\n// Socketpair\n\n/*\n * Direct access\n */\n//sys\tAcct(path string) (err error)\n//sys\tAddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)\n//sys\tAdjtimex(buf *Timex) (state int, err error)\n//sysnb\tCapget(hdr *CapUserHeader, data *CapUserData) (err error)\n//sysnb\tCapset(hdr *CapUserHeader, data *CapUserData) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockAdjtime(clockid int32, buf *Timex) (state int, err error)\n//sys\tClockGetres(clockid int32, res *Timespec) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClockSettime(clockid int32, time *Timespec) (err error)\n//sys\tClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tCloseRange(first uint, last uint, flags uint) (err error)\n//sys\tCopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tDeleteModule(name string, flags int) (err error)\n//sys\tDup(oldfd int) (fd int, err error)\n\nfunc Dup2(oldfd, newfd int) error {\n\treturn Dup3(oldfd, newfd, 0)\n}\n\n//sys\tDup3(oldfd int, newfd int, flags int) (err error)\n//sysnb\tEpollCreate1(flag int) (fd int, err error)\n//sysnb\tEpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)\n//sys\tEventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2\n//sys\tExit(code int) = SYS_EXIT_GROUP\n//sys\tFallocate(fd int, mode uint32, off int64, len int64) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFgetxattr(fd int, attr string, dest []byte) (sz int, err error)\n//sys\tFinitModule(fd int, params string, flags int) (err error)\n//sys\tFlistxattr(fd int, dest []byte) (sz int, err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFremovexattr(fd int, attr string) (err error)\n//sys\tFsetxattr(fd int, attr string, dest []byte, flags int) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFsmount(fd int, flags int, mountAttrs int) (fsfd int, err error)\n//sys\tFsopen(fsName string, flags int) (fd int, err error)\n//sys\tFspick(dirfd int, pathName string, flags int) (fd int, err error)\n\n//sys\tfsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error)\n\nfunc fsconfigCommon(fd int, cmd uint, key string, value *byte, aux int) (err error) {\n\tvar keyp *byte\n\tif keyp, err = BytePtrFromString(key); err != nil {\n\t\treturn\n\t}\n\treturn fsconfig(fd, cmd, keyp, value, aux)\n}\n\n// FsconfigSetFlag is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_FLAG.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\nfunc FsconfigSetFlag(fd int, key string) (err error) {\n\treturn fsconfigCommon(fd, FSCONFIG_SET_FLAG, key, nil, 0)\n}\n\n// FsconfigSetString is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_STRING.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// value is the parameter value to set.\nfunc FsconfigSetString(fd int, key string, value string) (err error) {\n\tvar valuep *byte\n\tif valuep, err = BytePtrFromString(value); err != nil {\n\t\treturn\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_STRING, key, valuep, 0)\n}\n\n// FsconfigSetBinary is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_BINARY.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// value is the parameter value to set.\nfunc FsconfigSetBinary(fd int, key string, value []byte) (err error) {\n\tif len(value) == 0 {\n\t\treturn EINVAL\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_BINARY, key, &value[0], len(value))\n}\n\n// FsconfigSetPath is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_PATH.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// path is a non-empty path for specified key.\n// atfd is a file descriptor at which to start lookup from or AT_FDCWD.\nfunc FsconfigSetPath(fd int, key string, path string, atfd int) (err error) {\n\tvar valuep *byte\n\tif valuep, err = BytePtrFromString(path); err != nil {\n\t\treturn\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_PATH, key, valuep, atfd)\n}\n\n// FsconfigSetPathEmpty is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_PATH_EMPTY. The same as\n// FconfigSetPath but with AT_PATH_EMPTY implied.\nfunc FsconfigSetPathEmpty(fd int, key string, path string, atfd int) (err error) {\n\tvar valuep *byte\n\tif valuep, err = BytePtrFromString(path); err != nil {\n\t\treturn\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_PATH_EMPTY, key, valuep, atfd)\n}\n\n// FsconfigSetFd is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_FD.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// value is a file descriptor to be assigned to specified key.\nfunc FsconfigSetFd(fd int, key string, value int) (err error) {\n\treturn fsconfigCommon(fd, FSCONFIG_SET_FD, key, nil, value)\n}\n\n// FsconfigCreate is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_CMD_CREATE.\n//\n// fd is the filesystem context to act upon.\nfunc FsconfigCreate(fd int) (err error) {\n\treturn fsconfig(fd, FSCONFIG_CMD_CREATE, nil, nil, 0)\n}\n\n// FsconfigReconfigure is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_CMD_RECONFIGURE.\n//\n// fd is the filesystem context to act upon.\nfunc FsconfigReconfigure(fd int) (err error) {\n\treturn fsconfig(fd, FSCONFIG_CMD_RECONFIGURE, nil, nil, 0)\n}\n\n//sys\tGetdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n\nfunc Getpgrp() (pid int) {\n\tpid, _ = Getpgid(0)\n\treturn\n}\n\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvdsoRet, supported := vgetrandom(buf, uint32(flags))\n\tif supported {\n\t\tif vdsoRet < 0 {\n\t\t\treturn 0, errnoErr(syscall.Errno(-vdsoRet))\n\t\t}\n\t\treturn vdsoRet, nil\n\t}\n\tvar p *byte\n\tif len(buf) > 0 {\n\t\tp = &buf[0]\n\t}\n\tr, _, e := Syscall(SYS_GETRANDOM, uintptr(unsafe.Pointer(p)), uintptr(len(buf)), uintptr(flags))\n\tif e != 0 {\n\t\treturn 0, errnoErr(e)\n\t}\n\treturn int(r), nil\n}\n\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettid() (tid int)\n//sys\tGetxattr(path string, attr string, dest []byte) (sz int, err error)\n//sys\tInitModule(moduleImage []byte, params string) (err error)\n//sys\tInotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)\n//sysnb\tInotifyInit1(flags int) (fd int, err error)\n//sysnb\tInotifyRmWatch(fd int, watchdesc uint32) (success int, err error)\n//sysnb\tKill(pid int, sig syscall.Signal) (err error)\n//sys\tKlogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG\n//sys\tLgetxattr(path string, attr string, dest []byte) (sz int, err error)\n//sys\tListxattr(path string, dest []byte) (sz int, err error)\n//sys\tLlistxattr(path string, dest []byte) (sz int, err error)\n//sys\tLremovexattr(path string, attr string) (err error)\n//sys\tLsetxattr(path string, attr string, data []byte, flags int) (err error)\n//sys\tMemfdCreate(name string, flags int) (fd int, err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tMoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpenTree(dfd int, fileName string, flags uint) (r int, err error)\n//sys\tPerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)\n//sys\tPivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT\n//sys\tPrctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)\n//sys\tpselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tRemovexattr(path string, attr string) (err error)\n//sys\tRenameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)\n//sys\tRequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)\n//sys\tSetdomainname(p []byte) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tv *Timeval) (err error)\n//sys\tSetns(fd int, nstype int) (err error)\n\n//go:linkname syscall_prlimit syscall.prlimit\nfunc syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error\n\nfunc Prlimit(pid, resource int, newlimit, old *Rlimit) error {\n\t// Just call the syscall version, because as of Go 1.21\n\t// it will affect starting a new process.\n\treturn syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old))\n}\n\n// PrctlRetInt performs a prctl operation specified by option and further\n// optional arguments arg2 through arg5 depending on option. It returns a\n// non-negative integer that is returned by the prctl syscall.\nfunc PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) {\n\tret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(ret), nil\n}\n\nfunc Setuid(uid int) (err error) {\n\treturn syscall.Setuid(uid)\n}\n\nfunc Setgid(gid int) (err error) {\n\treturn syscall.Setgid(gid)\n}\n\nfunc Setreuid(ruid, euid int) (err error) {\n\treturn syscall.Setreuid(ruid, euid)\n}\n\nfunc Setregid(rgid, egid int) (err error) {\n\treturn syscall.Setregid(rgid, egid)\n}\n\nfunc Setresuid(ruid, euid, suid int) (err error) {\n\treturn syscall.Setresuid(ruid, euid, suid)\n}\n\nfunc Setresgid(rgid, egid, sgid int) (err error) {\n\treturn syscall.Setresgid(rgid, egid, sgid)\n}\n\n// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.\n// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability.\n// If the call fails due to other reasons, current fsgid will be returned.\nfunc SetfsgidRetGid(gid int) (int, error) {\n\treturn setfsgid(gid)\n}\n\n// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set.\n// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability\n// If the call fails due to other reasons, current fsuid will be returned.\nfunc SetfsuidRetUid(uid int) (int, error) {\n\treturn setfsuid(uid)\n}\n\nfunc Setfsgid(gid int) error {\n\t_, err := setfsgid(gid)\n\treturn err\n}\n\nfunc Setfsuid(uid int) error {\n\t_, err := setfsuid(uid)\n\treturn err\n}\n\nfunc Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {\n\treturn signalfd(fd, sigmask, _C__NSIG/8, flags)\n}\n\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tSetxattr(path string, attr string, data []byte, flags int) (err error)\n//sys\tsignalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4\n//sys\tStatx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)\n//sys\tSync()\n//sys\tSyncfs(fd int) (err error)\n//sysnb\tSysinfo(info *Sysinfo_t) (err error)\n//sys\tTee(rfd int, wfd int, len int, flags int) (n int64, err error)\n//sysnb\tTimerfdCreate(clockid int, flags int) (fd int, err error)\n//sysnb\tTimerfdGettime(fd int, currValue *ItimerSpec) (err error)\n//sysnb\tTimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error)\n//sysnb\tTgkill(tgid int, tid int, sig syscall.Signal) (err error)\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sysnb\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnmount(target string, flags int) (err error) = SYS_UMOUNT2\n//sys\tUnshare(flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\texitThread(code int) (err error) = SYS_EXIT\n//sys\treadv(fd int, iovs []Iovec) (n int, err error) = SYS_READV\n//sys\twritev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV\n//sys\tpreadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV\n//sys\tpwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV\n//sys\tpreadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2\n//sys\tpwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2\n\n// minIovec is the size of the small initial allocation used by\n// Readv, Writev, etc.\n//\n// This small allocation gets stack allocated, which lets the\n// common use case of len(iovs) <= minIovs avoid more expensive\n// heap allocations.\nconst minIovec = 8\n\n// appendBytes converts bs to Iovecs and appends them to vecs.\nfunc appendBytes(vecs []Iovec, bs [][]byte) []Iovec {\n\tfor _, b := range bs {\n\t\tvar v Iovec\n\t\tv.SetLen(len(b))\n\t\tif len(b) > 0 {\n\t\t\tv.Base = &b[0]\n\t\t} else {\n\t\t\tv.Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t\tvecs = append(vecs, v)\n\t}\n\treturn vecs\n}\n\n// offs2lohi splits offs into its low and high order bits.\nfunc offs2lohi(offs int64) (lo, hi uintptr) {\n\tconst longBits = SizeofLong * 8\n\treturn uintptr(offs), uintptr(uint64(offs) >> (longBits - 1) >> 1) // two shifts to avoid false positive in vet\n}\n\nfunc Readv(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tn, err = readv(fd, iovecs)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tlo, hi := offs2lohi(offset)\n\tn, err = preadv(fd, iovecs, lo, hi)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tlo, hi := offs2lohi(offset)\n\tn, err = preadv2(fd, iovecs, lo, hi, flags)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc readvRacedetect(iovecs []Iovec, n int, err error) {\n\tif !raceenabled {\n\t\treturn\n\t}\n\tfor i := 0; n > 0 && i < len(iovecs); i++ {\n\t\tm := min(int(iovecs[i].Len), n)\n\t\tn -= m\n\t\tif m > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(iovecs[i].Base), m)\n\t\t}\n\t}\n\tif err == nil {\n\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t}\n}\n\nfunc Writev(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = writev(fd, iovecs)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tlo, hi := offs2lohi(offset)\n\tn, err = pwritev(fd, iovecs, lo, hi)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tlo, hi := offs2lohi(offset)\n\tn, err = pwritev2(fd, iovecs, lo, hi, flags)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc writevRacedetect(iovecs []Iovec, n int) {\n\tif !raceenabled {\n\t\treturn\n\t}\n\tfor i := 0; n > 0 && i < len(iovecs); i++ {\n\t\tm := min(int(iovecs[i].Len), n)\n\t\tn -= m\n\t\tif m > 0 {\n\t\t\traceReadRange(unsafe.Pointer(iovecs[i].Base), m)\n\t\t}\n\t}\n}\n\n// mmap varies by architecture; see syscall_linux_*.go.\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tmremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error)\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n\nconst (\n\tmremapFixed     = MREMAP_FIXED\n\tmremapDontunmap = MREMAP_DONTUNMAP\n\tmremapMaymove   = MREMAP_MAYMOVE\n)\n\n// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,\n// using the specified flags.\nfunc Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {\n\tvar p unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\tp = unsafe.Pointer(&iovs[0])\n\t}\n\n\tn, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0)\n\tif errno != 0 {\n\t\treturn 0, syscall.Errno(errno)\n\t}\n\n\treturn int(n), nil\n}\n\nfunc isGroupMember(gid int) bool {\n\tgroups, err := Getgroups()\n\tif err != nil {\n\t\treturn false\n\t}\n\n\treturn slices.Contains(groups, gid)\n}\n\nfunc isCapDacOverrideSet() bool {\n\thdr := CapUserHeader{Version: LINUX_CAPABILITY_VERSION_3}\n\tdata := [2]CapUserData{}\n\terr := Capget(&hdr, &data[0])\n\n\treturn err == nil && data[0].Effective&(1<<CAP_DAC_OVERRIDE) != 0\n}\n\n//sys\tfaccessat(dirfd int, path string, mode uint32) (err error)\n//sys\tFaccessat2(dirfd int, path string, mode uint32, flags int) (err error)\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tif flags == 0 {\n\t\treturn faccessat(dirfd, path, mode)\n\t}\n\n\tif err := Faccessat2(dirfd, path, mode, flags); err != ENOSYS && err != EPERM {\n\t\treturn err\n\t}\n\n\t// The Linux kernel faccessat system call does not take any flags.\n\t// The glibc faccessat implements the flags itself; see\n\t// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD\n\t// Because people naturally expect syscall.Faccessat to act\n\t// like C faccessat, we do the same.\n\n\tif flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {\n\t\treturn EINVAL\n\t}\n\n\tvar st Stat_t\n\tif err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {\n\t\treturn err\n\t}\n\n\tmode &= 7\n\tif mode == 0 {\n\t\treturn nil\n\t}\n\n\tvar uid int\n\tif flags&AT_EACCESS != 0 {\n\t\tuid = Geteuid()\n\t\tif uid != 0 && isCapDacOverrideSet() {\n\t\t\t// If CAP_DAC_OVERRIDE is set, file access check is\n\t\t\t// done by the kernel in the same way as for root\n\t\t\t// (see generic_permission() in the Linux sources).\n\t\t\tuid = 0\n\t\t}\n\t} else {\n\t\tuid = Getuid()\n\t}\n\n\tif uid == 0 {\n\t\tif mode&1 == 0 {\n\t\t\t// Root can read and write any file.\n\t\t\treturn nil\n\t\t}\n\t\tif st.Mode&0111 != 0 {\n\t\t\t// Root can execute any file that anybody can execute.\n\t\t\treturn nil\n\t\t}\n\t\treturn EACCES\n\t}\n\n\tvar fmode uint32\n\tif uint32(uid) == st.Uid {\n\t\tfmode = (st.Mode >> 6) & 7\n\t} else {\n\t\tvar gid int\n\t\tif flags&AT_EACCESS != 0 {\n\t\t\tgid = Getegid()\n\t\t} else {\n\t\t\tgid = Getgid()\n\t\t}\n\n\t\tif uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) {\n\t\t\tfmode = (st.Mode >> 3) & 7\n\t\t} else {\n\t\t\tfmode = st.Mode & 7\n\t\t}\n\t}\n\n\tif fmode&mode == mode {\n\t\treturn nil\n\t}\n\n\treturn EACCES\n}\n\n//sys\tnameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT\n//sys\topenByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT\n\n// fileHandle is the argument to nameToHandleAt and openByHandleAt. We\n// originally tried to generate it via unix/linux/types.go with \"type\n// fileHandle C.struct_file_handle\" but that generated empty structs\n// for mips64 and mips64le. Instead, hard code it for now (it's the\n// same everywhere else) until the mips64 generator issue is fixed.\ntype fileHandle struct {\n\tBytes uint32\n\tType  int32\n}\n\n// FileHandle represents the C struct file_handle used by\n// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see\n// OpenByHandleAt).\ntype FileHandle struct {\n\t*fileHandle\n}\n\n// NewFileHandle constructs a FileHandle.\nfunc NewFileHandle(handleType int32, handle []byte) FileHandle {\n\tconst hdrSize = unsafe.Sizeof(fileHandle{})\n\tbuf := make([]byte, hdrSize+uintptr(len(handle)))\n\tcopy(buf[hdrSize:], handle)\n\tfh := (*fileHandle)(unsafe.Pointer(&buf[0]))\n\tfh.Type = handleType\n\tfh.Bytes = uint32(len(handle))\n\treturn FileHandle{fh}\n}\n\nfunc (fh *FileHandle) Size() int   { return int(fh.fileHandle.Bytes) }\nfunc (fh *FileHandle) Type() int32 { return fh.fileHandle.Type }\nfunc (fh *FileHandle) Bytes() []byte {\n\tn := fh.Size()\n\tif n == 0 {\n\t\treturn nil\n\t}\n\treturn unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n)\n}\n\n// NameToHandleAt wraps the name_to_handle_at system call; it obtains\n// a handle for a path name.\nfunc NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) {\n\tvar mid _C_int\n\t// Try first with a small buffer, assuming the handle will\n\t// only be 32 bytes.\n\tsize := uint32(32 + unsafe.Sizeof(fileHandle{}))\n\tdidResize := false\n\tfor {\n\t\tbuf := make([]byte, size)\n\t\tfh := (*fileHandle)(unsafe.Pointer(&buf[0]))\n\t\tfh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{}))\n\t\terr = nameToHandleAt(dirfd, path, fh, &mid, flags)\n\t\tif err == EOVERFLOW {\n\t\t\tif didResize {\n\t\t\t\t// We shouldn't need to resize more than once\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdidResize = true\n\t\t\tsize = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{}))\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn FileHandle{fh}, int(mid), nil\n\t}\n}\n\n// OpenByHandleAt wraps the open_by_handle_at system call; it opens a\n// file via a handle as previously returned by NameToHandleAt.\nfunc OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) {\n\treturn openByHandleAt(mountFD, handle.fileHandle, flags)\n}\n\n// Klogset wraps the sys_syslog system call; it sets console_loglevel to\n// the value specified by arg and passes a dummy pointer to bufp.\nfunc Klogset(typ int, arg int) (err error) {\n\tvar p unsafe.Pointer\n\t_, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg))\n\tif errno != 0 {\n\t\treturn errnoErr(errno)\n\t}\n\treturn nil\n}\n\n// RemoteIovec is Iovec with the pointer replaced with an integer.\n// It is used for ProcessVMReadv and ProcessVMWritev, where the pointer\n// refers to a location in a different process' address space, which\n// would confuse the Go garbage collector.\ntype RemoteIovec struct {\n\tBase uintptr\n\tLen  int\n}\n\n//sys\tProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV\n//sys\tProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV\n\n//sys\tPidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN\n//sys\tPidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD\n//sys\tPidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL\n\n//sys\tshmat(id int, addr uintptr, flag int) (ret uintptr, err error)\n//sys\tshmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)\n//sys\tshmdt(addr uintptr) (err error)\n//sys\tshmget(key int, size int, flag int) (id int, err error)\n\n//sys\tgetitimer(which int, currValue *Itimerval) (err error)\n//sys\tsetitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error)\n\n// MakeItimerval creates an Itimerval from interval and value durations.\nfunc MakeItimerval(interval, value time.Duration) Itimerval {\n\treturn Itimerval{\n\t\tInterval: NsecToTimeval(interval.Nanoseconds()),\n\t\tValue:    NsecToTimeval(value.Nanoseconds()),\n\t}\n}\n\n// A value which may be passed to the which parameter for Getitimer and\n// Setitimer.\ntype ItimerWhich int\n\n// Possible which values for Getitimer and Setitimer.\nconst (\n\tItimerReal    ItimerWhich = ITIMER_REAL\n\tItimerVirtual ItimerWhich = ITIMER_VIRTUAL\n\tItimerProf    ItimerWhich = ITIMER_PROF\n)\n\n// Getitimer wraps getitimer(2) to return the current value of the timer\n// specified by which.\nfunc Getitimer(which ItimerWhich) (Itimerval, error) {\n\tvar it Itimerval\n\tif err := getitimer(int(which), &it); err != nil {\n\t\treturn Itimerval{}, err\n\t}\n\n\treturn it, nil\n}\n\n// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which.\n// It returns the previous value of the timer.\n//\n// If the Itimerval argument is the zero value, the timer will be disarmed.\nfunc Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {\n\tvar prev Itimerval\n\tif err := setitimer(int(which), &it, &prev); err != nil {\n\t\treturn Itimerval{}, err\n\t}\n\n\treturn prev, nil\n}\n\n//sysnb\trtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) = SYS_RT_SIGPROCMASK\n\nfunc PthreadSigmask(how int, set, oldset *Sigset_t) error {\n\tif oldset != nil {\n\t\t// Explicitly clear in case Sigset_t is larger than _C__NSIG.\n\t\t*oldset = Sigset_t{}\n\t}\n\treturn rtSigprocmask(how, set, oldset, _C__NSIG/8)\n}\n\n//sysnb\tgetresuid(ruid *_C_int, euid *_C_int, suid *_C_int)\n//sysnb\tgetresgid(rgid *_C_int, egid *_C_int, sgid *_C_int)\n\nfunc Getresuid() (ruid, euid, suid int) {\n\tvar r, e, s _C_int\n\tgetresuid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\nfunc Getresgid() (rgid, egid, sgid int) {\n\tvar r, e, s _C_int\n\tgetresgid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\n// Pselect is a wrapper around the Linux pselect6 system call.\n// This version does not modify the timeout argument.\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\t// Per https://man7.org/linux/man-pages/man2/select.2.html#NOTES,\n\t// The Linux pselect6() system call modifies its timeout argument.\n\t// [Not modifying the argument] is the behavior required by POSIX.1-2001.\n\tvar mutableTimeout *Timespec\n\tif timeout != nil {\n\t\tmutableTimeout = new(Timespec)\n\t\t*mutableTimeout = *timeout\n\t}\n\n\t// The final argument of the pselect6() system call is not a\n\t// sigset_t * pointer, but is instead a structure\n\tvar kernelMask *sigset_argpack\n\tif sigmask != nil {\n\t\twordBits := 32 << (^uintptr(0) >> 63) // see math.intSize\n\n\t\t// A sigset stores one bit per signal,\n\t\t// offset by 1 (because signal 0 does not exist).\n\t\t// So the number of words needed is ⌈__C_NSIG - 1 / wordBits⌉.\n\t\tsigsetWords := (_C__NSIG - 1 + wordBits - 1) / (wordBits)\n\n\t\tsigsetBytes := uintptr(sigsetWords * (wordBits / 8))\n\t\tkernelMask = &sigset_argpack{\n\t\t\tss:    sigmask,\n\t\t\tssLen: sigsetBytes,\n\t\t}\n\t}\n\n\treturn pselect6(nfd, r, w, e, mutableTimeout, kernelMask)\n}\n\n//sys\tschedSetattr(pid int, attr *SchedAttr, flags uint) (err error)\n//sys\tschedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error)\n\n// SchedSetAttr is a wrapper for sched_setattr(2) syscall.\n// https://man7.org/linux/man-pages/man2/sched_setattr.2.html\nfunc SchedSetAttr(pid int, attr *SchedAttr, flags uint) error {\n\tif attr == nil {\n\t\treturn EINVAL\n\t}\n\tattr.Size = SizeofSchedAttr\n\treturn schedSetattr(pid, attr, flags)\n}\n\n// SchedGetAttr is a wrapper for sched_getattr(2) syscall.\n// https://man7.org/linux/man-pages/man2/sched_getattr.2.html\nfunc SchedGetAttr(pid int, flags uint) (*SchedAttr, error) {\n\tattr := &SchedAttr{}\n\tif err := schedGetattr(pid, attr, SizeofSchedAttr, flags); err != nil {\n\t\treturn nil, err\n\t}\n\treturn attr, nil\n}\n\n//sys\tCachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error)\n//sys\tMseal(b []byte, flags uint) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n// 64-bit file system and 32-bit uid calls\n// (386 default is 32-bit file system and 16-bit uid).\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64\n//sys\tFchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int) = SYS_GETEGID32\n//sysnb\tGeteuid() (euid int) = SYS_GETEUID32\n//sysnb\tGetgid() (gid int) = SYS_GETGID32\n//sysnb\tGetuid() (uid int) = SYS_GETUID32\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tsetfsgid(gid int) (prev int, err error) = SYS_SETFSGID32\n//sys\tsetfsuid(uid int) (prev int, err error) = SYS_SETFSUID32\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n//sys\tPause() (err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n// On x86 Linux, all the socket calls go through an extra indirection,\n// I think because the 5-register system call interface can't handle\n// the 6-argument calls like sendto and recvfrom. Instead the\n// arguments to the underlying system call are the number below\n// and a pointer to an array of uintptr. We hide the pointer in the\n// socketcall assembly to avoid allocation on every system call.\n\nconst (\n\t// see linux/net.h\n\t_SOCKET      = 1\n\t_BIND        = 2\n\t_CONNECT     = 3\n\t_LISTEN      = 4\n\t_ACCEPT      = 5\n\t_GETSOCKNAME = 6\n\t_GETPEERNAME = 7\n\t_SOCKETPAIR  = 8\n\t_SEND        = 9\n\t_RECV        = 10\n\t_SENDTO      = 11\n\t_RECVFROM    = 12\n\t_SHUTDOWN    = 13\n\t_SETSOCKOPT  = 14\n\t_GETSOCKOPT  = 15\n\t_SENDMSG     = 16\n\t_RECVMSG     = 17\n\t_ACCEPT4     = 18\n\t_RECVMMSG    = 19\n\t_SENDMMSG    = 20\n)\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tfd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {\n\t_, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tfd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\tn, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\t_, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tn, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tn, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Listen(s int, n int) (err error) {\n\t_, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Shutdown(s, how int) (err error) {\n\t_, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_alarm.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (386 || amd64 || mips || mipsle || mips64 || mipsle || ppc64 || ppc64le || ppc || s390x || sparc64)\n\npackage unix\n\n// SYS_ALARM is not defined on arm or riscv, but is available for other GOARCH\n// values.\n\n//sys\tAlarm(seconds uint) (remaining uint, err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && linux\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tMemfdSecret(flags int) (fd int, err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\t// Use fstatat, because Android's seccomp policy blocks stat.\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\terrno := gettimeofday(tv)\n\tif errno != 0 {\n\t\treturn errno\n\t}\n\treturn nil\n}\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terrno := gettimeofday(&tv)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Rip }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && linux && gc\n\npackage unix\n\nimport \"syscall\"\n\n//go:noescape\nfunc gettimeofday(tv *Timeval) (err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_arm.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tsocketpair(domain int, typ int, flags int, fd *[2]int32) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n// 64-bit file system and 32-bit uid calls\n// (16-bit uid calls are not always supported in newer kernels)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sysnb\tGetegid() (egid int) = SYS_GETEGID32\n//sysnb\tGeteuid() (euid int) = SYS_GETEUID32\n//sysnb\tGetgid() (gid int) = SYS_GETGID32\n//sysnb\tGetuid() (uid int) = SYS_GETUID32\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tPause() (err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsetfsgid(gid int) (prev int, err error) = SYS_SETFSGID32\n//sys\tsetfsuid(uid int) (prev int, err error) = SYS_SETFSUID32\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n\n//sys\tarmSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and arm_sync_file_range syscalls differ only in the\n\t// order of their arguments.\n\treturn armSyncFileRange(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_arm64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && linux\n\npackage unix\n\nimport \"unsafe\"\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tgetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tMemfdSecret(flags int) (fd int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\n// Getrlimit prefers the prlimit64 system call. See issue 38604.\nfunc Getrlimit(resource int, rlim *Rlimit) error {\n\terr := Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\treturn getrlimit(resource, rlim)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Pc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n\nconst SYS_FSTATAT = SYS_NEWFSTATAT\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gc\n\npackage unix\n\n// SyscallNoError may be used instead of Syscall for syscalls that don't fail.\nfunc SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)\n\n// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't\n// fail.\nfunc RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gc && 386\n\npackage unix\n\nimport \"syscall\"\n\n// Underlying system call writes to newoffset via pointer.\n// Implemented in assembly to avoid allocation.\nfunc seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)\n\nfunc socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)\nfunc rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && gc && linux\n\npackage unix\n\nimport \"syscall\"\n\n// Underlying system call writes to newoffset via pointer.\n// Implemented in assembly to avoid allocation.\nfunc seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gccgo && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n\nfunc socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {\n\tfd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)\n\treturn int(fd), err\n}\n\nfunc rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {\n\tfd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)\n\treturn int(fd), err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gccgo && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_loong64.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build loong64 && linux\n\npackage unix\n\nimport \"unsafe\"\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc timespecFromStatxTimestamp(x StatxTimestamp) Timespec {\n\treturn Timespec{\n\t\tSec:  x.Sec,\n\t\tNsec: int64(x.Nsec),\n\t}\n}\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) error {\n\tvar r Statx_t\n\t// Do it the glibc way, add AT_NO_AUTOMOUNT.\n\tif err := Statx(fd, path, AT_NO_AUTOMOUNT|flags, STATX_BASIC_STATS, &r); err != nil {\n\t\treturn err\n\t}\n\n\tstat.Dev = Mkdev(r.Dev_major, r.Dev_minor)\n\tstat.Ino = r.Ino\n\tstat.Mode = uint32(r.Mode)\n\tstat.Nlink = r.Nlink\n\tstat.Uid = r.Uid\n\tstat.Gid = r.Gid\n\tstat.Rdev = Mkdev(r.Rdev_major, r.Rdev_minor)\n\t// hope we don't get to process files so large to overflow these size\n\t// fields...\n\tstat.Size = int64(r.Size)\n\tstat.Blksize = int32(r.Blksize)\n\tstat.Blocks = int64(r.Blocks)\n\tstat.Atim = timespecFromStatxTimestamp(r.Atime)\n\tstat.Mtim = timespecFromStatxTimestamp(r.Mtime)\n\tstat.Ctim = timespecFromStatxTimestamp(r.Ctime)\n\n\treturn nil\n}\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\treturn Fstatat(fd, \"\", stat, AT_EMPTY_PATH)\n}\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\treturn\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Era }\n\nfunc (r *PtraceRegs) SetPC(era uint64) { r.Era = era }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\treturn Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n\nconst SYS_FSTATAT = SYS_NEWFSTATAT\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips64 || mips64le)\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\ntype stat_t struct {\n\tDev        uint32\n\tPad0       [3]int32\n\tIno        uint64\n\tMode       uint32\n\tNlink      uint32\n\tUid        uint32\n\tGid        uint32\n\tRdev       uint32\n\tPad1       [3]uint32\n\tSize       int64\n\tAtime      uint32\n\tAtime_nsec uint32\n\tMtime      uint32\n\tMtime_nsec uint32\n\tCtime      uint32\n\tCtime_nsec uint32\n\tBlksize    uint32\n\tPad2       uint32\n\tBlocks     int64\n}\n\n//sys\tfstat(fd int, st *stat_t) (err error)\n//sys\tfstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tlstat(path string, st *stat_t) (err error)\n//sys\tstat(path string, st *stat_t) (err error)\n\nfunc Fstat(fd int, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = fstat(fd, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) {\n\tst := &stat_t{}\n\terr = fstatat(dirfd, path, st, flags)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Lstat(path string, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = lstat(path, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Stat(path string, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = stat(path, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc fillStat_t(s *Stat_t, st *stat_t) {\n\ts.Dev = st.Dev\n\ts.Ino = st.Ino\n\ts.Mode = st.Mode\n\ts.Nlink = st.Nlink\n\ts.Uid = st.Uid\n\ts.Gid = st.Gid\n\ts.Rdev = st.Rdev\n\ts.Size = st.Size\n\ts.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)}\n\ts.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)}\n\ts.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)}\n\ts.Blksize = st.Blksize\n\ts.Blocks = st.Blocks\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Epc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips || mipsle)\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n\n//sys\tPause() (err error)\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\t_, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0)\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Epc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_ppc.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && ppc\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint32 { return r.Nip }\n\nfunc (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n\n//sys\tsyncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and sync_file_range2 syscalls differ only in the\n\t// order of their arguments.\n\treturn syncFileRange2(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (ppc64 || ppc64le)\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT\n//sysnb\tGetuid() (uid int)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Nip }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\n//sys\tsyncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and sync_file_range2 syscalls differ only in the\n\t// order of their arguments.\n\treturn syncFileRange2(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && linux\n\npackage unix\n\nimport \"unsafe\"\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tMemfdSecret(flags int) (fd int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Pc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\treturn Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n\n//sys\triscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error)\n\nfunc RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error) {\n\tvar setSize uintptr\n\n\tif set != nil {\n\t\tsetSize = uintptr(unsafe.Sizeof(*set))\n\t}\n\treturn riscvHWProbe(pairs, setSize, set, flags)\n}\n\nconst SYS_FSTATAT = SYS_NEWFSTATAT\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_s390x.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build s390x && linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\n// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct.\n// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in <asm/unistd.h>.\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tmmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)}\n\tr0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// On s390x Linux, all the socket calls go through an extra indirection.\n// The arguments to the underlying system call (SYS_SOCKETCALL) are the\n// number below and a pointer to an array of uintptr.\nconst (\n\t// see linux/net.h\n\tnetSocket      = 1\n\tnetBind        = 2\n\tnetConnect     = 3\n\tnetListen      = 4\n\tnetAccept      = 5\n\tnetGetSockName = 6\n\tnetGetPeerName = 7\n\tnetSocketPair  = 8\n\tnetSend        = 9\n\tnetRecv        = 10\n\tnetSendTo      = 11\n\tnetRecvFrom    = 12\n\tnetShutdown    = 13\n\tnetSetSockOpt  = 14\n\tnetGetSockOpt  = 15\n\tnetSendMsg     = 16\n\tnetRecvMsg     = 17\n\tnetAccept4     = 18\n\tnetRecvMMsg    = 19\n\tnetSendMMsg    = 20\n)\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) {\n\targs := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)}\n\tfd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(fd), nil\n}\n\nfunc getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) error {\n\targs := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc socket(domain int, typ int, proto int) (int, error) {\n\targs := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)}\n\tfd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(fd), nil\n}\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error {\n\targs := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error {\n\targs := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\targs := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\targs := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (int, error) {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (int, error) {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc Listen(s int, n int) error {\n\targs := [2]uintptr{uintptr(s), uintptr(n)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc Shutdown(s, how int) error {\n\targs := [2]uintptr{uintptr(s), uintptr(how)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build sparc64 && linux\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Tpc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// NetBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) {\n\tvar olen uintptr\n\n\t// Get a list of all sysctl nodes below the given MIB by performing\n\t// a sysctl for the given MIB with CTL_QUERY appended.\n\tmib = append(mib, CTL_QUERY)\n\tqnode := Sysctlnode{Flags: SYSCTL_VERS_1}\n\tqp := (*byte)(unsafe.Pointer(&qnode))\n\tsz := unsafe.Sizeof(qnode)\n\tif err = sysctl(mib, nil, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Now that we know the size, get the actual nodes.\n\tnodes = make([]Sysctlnode, olen/sz)\n\tnp := (*byte)(unsafe.Pointer(&nodes[0]))\n\tif err = sysctl(mib, np, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nodes, nil\n}\n\nfunc nametomib(name string) (mib []_C_int, err error) {\n\t// Split name into components.\n\tvar parts []string\n\tlast := 0\n\tfor i := 0; i < len(name); i++ {\n\t\tif name[i] == '.' {\n\t\t\tparts = append(parts, name[last:i])\n\t\t\tlast = i + 1\n\t\t}\n\t}\n\tparts = append(parts, name[last:])\n\n\t// Discover the nodes and construct the MIB OID.\n\tfor partno, part := range parts {\n\t\tnodes, err := sysctlNodes(mib)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, node := range nodes {\n\t\t\tn := make([]byte, 0)\n\t\t\tfor i := range node.Name {\n\t\t\t\tif node.Name[i] != 0 {\n\t\t\t\t\tn = append(n, byte(node.Name[i]))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif string(n) == part {\n\t\t\t\tmib = append(mib, _C_int(node.Num))\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif len(mib) != partno+1 {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t}\n\n\treturn mib, nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc SysctlUvmexp(name string) (*Uvmexp, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofUvmexp)\n\tvar u Uvmexp\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &u, nil\n}\n\nfunc Pipe(p []int) (err error) {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\n//sys\tGetdents(fd int, buf []byte) (n int, err error)\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tn, err = Getdents(fd, buf)\n\tif err != nil || basep == nil {\n\t\treturn\n\t}\n\n\tvar off int64\n\toff, err = Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\t*basep = ^uintptr(0)\n\t\treturn\n\t}\n\t*basep = uintptr(off)\n\tif unsafe.Sizeof(*basep) == 8 {\n\t\treturn\n\t}\n\tif off>>32 != 0 {\n\t\t// We can't stuff the offset back into a uintptr, so any\n\t\t// future calls would be suspect. Generate an error.\n\t\t// EIO is allowed by getdirentries.\n\t\terr = EIO\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\nfunc IoctlGetPtmget(fd int, req uint) (*Ptmget, error) {\n\tvar value Ptmget\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\nfunc Fstatvfs(fd int, buf *Statvfs_t) (err error) {\n\treturn Fstatvfs1(fd, buf, ST_WAIT)\n}\n\nfunc Statvfs(path string, buf *Statvfs_t) (err error) {\n\treturn Statvfs1(path, buf, ST_WAIT)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tDup3(from int, to int, flags int) (err error)\n//sys\tExit(code int)\n//sys\tExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) = SYS_FSTATVFS1\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatvfs1(path string, buf *Statvfs_t, flags int) (err error) = SYS_STATVFS1\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\nconst (\n\tmremapFixed     = MAP_FIXED\n\tmremapDontunmap = 0\n\tmremapMaymove   = 0\n)\n\n//sys\tmremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) = SYS_MREMAP\n\nfunc mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (uintptr, error) {\n\treturn mremapNetBSD(oldaddr, oldlength, newaddr, newlength, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// OpenBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"sort\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [24]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc nametomib(name string) (mib []_C_int, err error) {\n\ti := sort.Search(len(sysctlMib), func(i int) bool {\n\t\treturn sysctlMib[i].ctlname >= name\n\t})\n\tif i < len(sysctlMib) && sysctlMib[i].ctlname == name {\n\t\treturn sysctlMib[i].ctloid, nil\n\t}\n\treturn nil, EINVAL\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc SysctlUvmexp(name string) (*Uvmexp, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofUvmexp)\n\tvar u Uvmexp\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofUvmexp {\n\t\treturn nil, EIO\n\t}\n\treturn &u, nil\n}\n\nfunc Pipe(p []int) (err error) {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\n//sys\tGetdents(fd int, buf []byte) (n int, err error)\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tn, err = Getdents(fd, buf)\n\tif err != nil || basep == nil {\n\t\treturn\n\t}\n\n\tvar off int64\n\toff, err = Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\t*basep = ^uintptr(0)\n\t\treturn\n\t}\n\t*basep = uintptr(off)\n\tif unsafe.Sizeof(*basep) == 8 {\n\t\treturn\n\t}\n\tif off>>32 != 0 {\n\t\t// We can't stuff the offset back into a uintptr, so any\n\t\t// future calls would be suspect. Generate an error.\n\t\t// EIO was allowed by getdirentries.\n\t\terr = EIO\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar bufptr *Statfs_t\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\tbufptr = &buf[0]\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\treturn getfsstat(bufptr, bufsize, flags)\n}\n\n//sysnb\tgetresuid(ruid *_C_int, euid *_C_int, suid *_C_int)\n//sysnb\tgetresgid(rgid *_C_int, egid *_C_int, sgid *_C_int)\n\nfunc Getresuid() (ruid, euid, suid int) {\n\tvar r, e, s _C_int\n\tgetresuid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\nfunc Getresgid() (rgid, egid, sgid int) {\n\tvar r, e, s _C_int\n\tgetresgid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\n//sys\tfcntl(fd int, cmd int, arg int) (n int, err error)\n//sys\tfcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) = SYS_FCNTL\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn fcntl(int(fd), cmd, arg)\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk))\n\treturn err\n}\n\n//sys\tppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n\nfunc Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, timeout, sigmask)\n\t}\n\treturn ppoll(&fds[0], len(fds), timeout, sigmask)\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tDup3(from int, to int, flags int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrtable() (rtable int, err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tMount(fsType string, dir string, flags int, data unsafe.Pointer) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrtable(rtable int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tgetfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n//sys\tpledge(promises *byte, execpromises *byte) (err error)\n//sys\tunveil(path *byte, flags *byte) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/386 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/arm the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build openbsd\n\npackage unix\n\nimport _ \"unsafe\"\n\n// Implemented in the runtime package (runtime/sys_openbsd3.go)\nfunc syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n//go:linkname syscall_syscall syscall.syscall\n//go:linkname syscall_syscall6 syscall.syscall6\n//go:linkname syscall_syscall10 syscall.syscall10\n//go:linkname syscall_rawSyscall syscall.rawSyscall\n//go:linkname syscall_rawSyscall6 syscall.rawSyscall6\n\nfunc syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {\n\treturn syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of OpenBSD the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build ppc64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/ppc64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/riscv64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_solaris.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Solaris system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_solaris.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Implemented in runtime/syscall_solaris.go.\ntype syscallFunc uintptr\n\nfunc rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tFamily uint16\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [244]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\n//sysnb\tpipe(p *[2]_C_int) (n int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\tn, err := pipe(&pp)\n\tif n != 0 {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn nil\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) {\n\t\t// Check sl > 3 so we don't change unnamed socket behavior.\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\n//sys\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error)\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\t// Getcwd will return an error if it failed for any reason.\n\t_, err = Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\n/*\n * Wrapped\n */\n\n//sysnb\tgetgroups(ngid int, gid *_Gid_t) (n int, err error)\n//sysnb\tsetgroups(ngid int, gid *_Gid_t) (err error)\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\t// Check for error and sanity check group count. Newer versions of\n\t// Solaris allow up to 1024 (NGROUPS_MAX).\n\tif n < 0 || n > 1024 {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nil, EINVAL\n\t} else if n == 0 {\n\t\treturn nil, nil\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif n == -1 {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\n// ReadDirent reads directory entries from fd and writes them into buf.\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\t// Final argument is (basep *uintptr) and the syscall doesn't take nil.\n\t// TODO(rsc): Can we use a single global basep for all calls?\n\treturn Getdents(fd, buf, new(uintptr))\n}\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.\n\ntype WaitStatus uint32\n\nconst (\n\tmask  = 0x7F\n\tcore  = 0x80\n\tshift = 8\n\n\texited  = 0\n\tstopped = 0x7F\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif w&mask != exited {\n\t\treturn -1\n\t}\n\treturn int(w >> shift)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tsig := syscall.Signal(w & mask)\n\tif sig == stopped || sig == 0 {\n\t\treturn -1\n\t}\n\treturn sig\n}\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }\n\nfunc (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) {\n\tvar status _C_int\n\trpid, err := wait4(int32(pid), &status, options, rusage)\n\twpid := int(rpid)\n\tif wpid == -1 {\n\t\treturn wpid, err\n\t}\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn wpid, nil\n}\n\n//sys\tgethostname(buf []byte) (n int, err error)\n\nfunc Gethostname() (name string, err error) {\n\tvar buf [MaxHostNameLen]byte\n\tn, err := gethostname(buf[:])\n\tif n != 0 {\n\t\treturn \"\", err\n\t}\n\tn = clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EFAULT\n\t}\n\treturn string(buf[:n]), nil\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(fd int, path string, times *[2]Timespec, flag int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif ts == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\tvalptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)\n\tvar err error\n\tif errno != 0 {\n\t\terr = errno\n\t}\n\treturn int(valptr), err\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0)\n\tif e1 != 0 {\n\t\treturn e1\n\t}\n\treturn nil\n}\n\n//sys\tfutimesat(fildes int, path *byte, times *[2]Timeval) (err error)\n\nfunc Futimesat(dirfd int, path string, tv []Timeval) error {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif tv == nil {\n\t\treturn futimesat(dirfd, pathp, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n// Solaris doesn't have an futimes function because it allows NULL to be\n// specified as the path for futimesat. However, Go doesn't like\n// NULL-style string interfaces, so this simple wrapper is provided.\nfunc Futimes(fd int, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimesat(fd, nil, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\t// Assume path ends at NUL.\n\t\t// This is not technically the Solaris semantics for\n\t\t// abstract Unix domain sockets -- they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs -- but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < len(pp.Path) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif nfd == -1 {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif emptyIovecs(iov) {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Accrightslen = int32(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); n == -1 {\n\t\treturn\n\t}\n\toobn = int(msg.Accrightslen)\n\treturn\n}\n\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Accrightslen = int32(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n//sys\tacct(path *byte) (err error)\n\nfunc Acct(path string) (err error) {\n\tif len(path) == 0 {\n\t\t// Assume caller wants to disable accounting.\n\t\treturn acct(nil)\n\t}\n\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn acct(pathp)\n}\n\n//sys\t__makedev(version int, major uint, minor uint) (val uint64)\n\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn __makedev(NEWDEV, uint(major), uint(minor))\n}\n\n//sys\t__major(version int, dev uint64) (val uint)\n\nfunc Major(dev uint64) uint32 {\n\treturn uint32(__major(NEWDEV, dev))\n}\n\n//sys\t__minor(version int, dev uint64) (val uint)\n\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(__minor(NEWDEV, dev))\n}\n\n/*\n * Expose the ioctl function\n */\n\n//sys\tioctlRet(fd int, req int, arg uintptr) (ret int, err error) = libc.ioctl\n//sys\tioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) = libc.ioctl\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\t_, err = ioctlRet(fd, req, arg)\n\treturn err\n}\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\t_, err = ioctlPtrRet(fd, req, arg)\n\treturn err\n}\n\nfunc IoctlSetTermio(fd int, req int, value *Termio) error {\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\nfunc IoctlGetTermio(fd int, req int) (*Termio, error) {\n\tvar value Termio\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tCreat(path string, mode uint32) (fd int, err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatvfs(fd int, vfsstat *Statvfs_t) (err error)\n//sys\tGetdents(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgid int, err error)\n//sys\tGeteuid() (euid int)\n//sys\tGetegid() (egid int)\n//sys\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (n int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tListen(s int, backlog int) (err error) = libsocket.__xnet_llisten\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tShutdown(s int, how int) (err error) = libsocket.shutdown\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatvfs(path string, vfsstat *Statvfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSync() (err error)\n//sys\tSysconf(which int) (n int64, err error)\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnmount(target string, flags int) (err error) = libc.umount\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto\n//sys\tsocket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom\n\n// Event Ports\n\ntype fileObjCookie struct {\n\tfobj   *fileObj\n\tcookie interface{}\n}\n\n// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports.\ntype EventPort struct {\n\tport  int\n\tmu    sync.Mutex\n\tfds   map[uintptr]*fileObjCookie\n\tpaths map[string]*fileObjCookie\n\t// The user cookie presents an interesting challenge from a memory management perspective.\n\t// There are two paths by which we can discover that it is no longer in use:\n\t// 1. The user calls port_dissociate before any events fire\n\t// 2. An event fires and we return it to the user\n\t// The tricky situation is if the event has fired in the kernel but\n\t// the user hasn't requested/received it yet.\n\t// If the user wants to port_dissociate before the event has been processed,\n\t// we should handle things gracefully. To do so, we need to keep an extra\n\t// reference to the cookie around until the event is processed\n\t// thus the otherwise seemingly extraneous \"cookies\" map\n\t// The key of this map is a pointer to the corresponding fCookie\n\tcookies map[*fileObjCookie]struct{}\n}\n\n// PortEvent is an abstraction of the port_event C struct.\n// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD\n// to see if Path or Fd was the event source. The other will be\n// uninitialized.\ntype PortEvent struct {\n\tCookie interface{}\n\tEvents int32\n\tFd     uintptr\n\tPath   string\n\tSource uint16\n\tfobj   *fileObj\n}\n\n// NewEventPort creates a new EventPort including the\n// underlying call to port_create(3c).\nfunc NewEventPort() (*EventPort, error) {\n\tport, err := port_create()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\te := &EventPort{\n\t\tport:    port,\n\t\tfds:     make(map[uintptr]*fileObjCookie),\n\t\tpaths:   make(map[string]*fileObjCookie),\n\t\tcookies: make(map[*fileObjCookie]struct{}),\n\t}\n\treturn e, nil\n}\n\n//sys\tport_create() (n int, err error)\n//sys\tport_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error)\n//sys\tport_dissociate(port int, source int, object uintptr) (n int, err error)\n//sys\tport_get(port int, pe *portEvent, timeout *Timespec) (n int, err error)\n//sys\tport_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error)\n\n// Close closes the event port.\nfunc (e *EventPort) Close() error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\terr := Close(e.port)\n\tif err != nil {\n\t\treturn err\n\t}\n\te.fds = nil\n\te.paths = nil\n\te.cookies = nil\n\treturn nil\n}\n\n// PathIsWatched checks to see if path is associated with this EventPort.\nfunc (e *EventPort) PathIsWatched(path string) bool {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\t_, found := e.paths[path]\n\treturn found\n}\n\n// FdIsWatched checks to see if fd is associated with this EventPort.\nfunc (e *EventPort) FdIsWatched(fd uintptr) bool {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\t_, found := e.fds[fd]\n\treturn found\n}\n\n// AssociatePath wraps port_associate(3c) for a filesystem path including\n// creating the necessary file_obj from the provided stat information.\nfunc (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tif _, found := e.paths[path]; found {\n\t\treturn fmt.Errorf(\"%v is already associated with this Event Port\", path)\n\t}\n\tfCookie, err := createFileObjCookie(path, stat, cookie)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie)))\n\tif err != nil {\n\t\treturn err\n\t}\n\te.paths[path] = fCookie\n\te.cookies[fCookie] = struct{}{}\n\treturn nil\n}\n\n// DissociatePath wraps port_dissociate(3c) for a filesystem path.\nfunc (e *EventPort) DissociatePath(path string) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tf, ok := e.paths[path]\n\tif !ok {\n\t\treturn fmt.Errorf(\"%v is not associated with this Event Port\", path)\n\t}\n\t_, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj)))\n\t// If the path is no longer associated with this event port (ENOENT)\n\t// we should delete it from our map. We can still return ENOENT to the caller.\n\t// But we need to save the cookie\n\tif err != nil && err != ENOENT {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\t// dissociate was successful, safe to delete the cookie\n\t\tfCookie := e.paths[path]\n\t\tdelete(e.cookies, fCookie)\n\t}\n\tdelete(e.paths, path)\n\treturn err\n}\n\n// AssociateFd wraps calls to port_associate(3c) on file descriptors.\nfunc (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tif _, found := e.fds[fd]; found {\n\t\treturn fmt.Errorf(\"%v is already associated with this Event Port\", fd)\n\t}\n\tfCookie, err := createFileObjCookie(\"\", nil, cookie)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie)))\n\tif err != nil {\n\t\treturn err\n\t}\n\te.fds[fd] = fCookie\n\te.cookies[fCookie] = struct{}{}\n\treturn nil\n}\n\n// DissociateFd wraps calls to port_dissociate(3c) on file descriptors.\nfunc (e *EventPort) DissociateFd(fd uintptr) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\t_, ok := e.fds[fd]\n\tif !ok {\n\t\treturn fmt.Errorf(\"%v is not associated with this Event Port\", fd)\n\t}\n\t_, err := port_dissociate(e.port, PORT_SOURCE_FD, fd)\n\tif err != nil && err != ENOENT {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\t// dissociate was successful, safe to delete the cookie\n\t\tfCookie := e.fds[fd]\n\t\tdelete(e.cookies, fCookie)\n\t}\n\tdelete(e.fds, fd)\n\treturn err\n}\n\nfunc createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) {\n\tfCookie := new(fileObjCookie)\n\tfCookie.cookie = cookie\n\tif name != \"\" && stat != nil {\n\t\tfCookie.fobj = new(fileObj)\n\t\tbs, err := ByteSliceFromString(name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))\n\t\ts := stat.Sys().(*syscall.Stat_t)\n\t\tfCookie.fobj.Atim.Sec = s.Atim.Sec\n\t\tfCookie.fobj.Atim.Nsec = s.Atim.Nsec\n\t\tfCookie.fobj.Mtim.Sec = s.Mtim.Sec\n\t\tfCookie.fobj.Mtim.Nsec = s.Mtim.Nsec\n\t\tfCookie.fobj.Ctim.Sec = s.Ctim.Sec\n\t\tfCookie.fobj.Ctim.Nsec = s.Ctim.Nsec\n\t}\n\treturn fCookie, nil\n}\n\n// GetOne wraps port_get(3c) and returns a single PortEvent.\nfunc (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {\n\tpe := new(portEvent)\n\t_, err := port_get(e.port, pe, t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := new(PortEvent)\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\terr = e.peIntToExt(pe, p)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p, nil\n}\n\n// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent\n// NOTE: Always call this function while holding the e.mu mutex\nfunc (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) error {\n\tif e.cookies == nil {\n\t\treturn fmt.Errorf(\"this EventPort is already closed\")\n\t}\n\tpeExt.Events = peInt.Events\n\tpeExt.Source = peInt.Source\n\tfCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User))\n\t_, found := e.cookies[fCookie]\n\n\tif !found {\n\t\tpanic(\"unexpected event port address; may be due to kernel bug; see https://go.dev/issue/54254\")\n\t}\n\tpeExt.Cookie = fCookie.cookie\n\tdelete(e.cookies, fCookie)\n\n\tswitch peInt.Source {\n\tcase PORT_SOURCE_FD:\n\t\tpeExt.Fd = uintptr(peInt.Object)\n\t\t// Only remove the fds entry if it exists and this cookie matches\n\t\tif fobj, ok := e.fds[peExt.Fd]; ok {\n\t\t\tif fobj == fCookie {\n\t\t\t\tdelete(e.fds, peExt.Fd)\n\t\t\t}\n\t\t}\n\tcase PORT_SOURCE_FILE:\n\t\tpeExt.fobj = fCookie.fobj\n\t\tpeExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))\n\t\t// Only remove the paths entry if it exists and this cookie matches\n\t\tif fobj, ok := e.paths[peExt.Path]; ok {\n\t\t\tif fobj == fCookie {\n\t\t\t\tdelete(e.paths, peExt.Path)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Pending wraps port_getn(3c) and returns how many events are pending.\nfunc (e *EventPort) Pending() (int, error) {\n\tvar n uint32 = 0\n\t_, err := port_getn(e.port, nil, 0, &n, nil)\n\treturn int(n), err\n}\n\n// Get wraps port_getn(3c) and fills a slice of PortEvent.\n// It will block until either min events have been received\n// or the timeout has been exceeded. It will return how many\n// events were actually received along with any error information.\nfunc (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) {\n\tif min == 0 {\n\t\treturn 0, fmt.Errorf(\"need to request at least one event or use Pending() instead\")\n\t}\n\tif len(s) < min {\n\t\treturn 0, fmt.Errorf(\"len(s) (%d) is less than min events requested (%d)\", len(s), min)\n\t}\n\tgot := uint32(min)\n\tmax := uint32(len(s))\n\tvar err error\n\tps := make([]portEvent, max)\n\t_, err = port_getn(e.port, &ps[0], max, &got, timeout)\n\t// got will be trustworthy with ETIME, but not any other error.\n\tif err != nil && err != ETIME {\n\t\treturn 0, err\n\t}\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tvalid := 0\n\tfor i := 0; i < int(got); i++ {\n\t\terr2 := e.peIntToExt(&ps[i], &s[i])\n\t\tif err2 != nil {\n\t\t\tif valid == 0 && err == nil {\n\t\t\t\t// If err2 is the only error and there are no valid events\n\t\t\t\t// to return, return it to the caller.\n\t\t\t\terr = err2\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tvalid = i + 1\n\t}\n\treturn valid, err\n}\n\n//sys\tputmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error)\n\nfunc Putmsg(fd int, cl []byte, data []byte, flags int) (err error) {\n\tvar clp, datap *strbuf\n\tif len(cl) > 0 {\n\t\tclp = &strbuf{\n\t\t\tLen: int32(len(cl)),\n\t\t\tBuf: (*int8)(unsafe.Pointer(&cl[0])),\n\t\t}\n\t}\n\tif len(data) > 0 {\n\t\tdatap = &strbuf{\n\t\t\tLen: int32(len(data)),\n\t\t\tBuf: (*int8)(unsafe.Pointer(&data[0])),\n\t\t}\n\t}\n\treturn putmsg(fd, clp, datap, flags)\n}\n\n//sys\tgetmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error)\n\nfunc Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) {\n\tvar clp, datap *strbuf\n\tif len(cl) > 0 {\n\t\tclp = &strbuf{\n\t\t\tMaxlen: int32(len(cl)),\n\t\t\tBuf:    (*int8)(unsafe.Pointer(&cl[0])),\n\t\t}\n\t}\n\tif len(data) > 0 {\n\t\tdatap = &strbuf{\n\t\t\tMaxlen: int32(len(data)),\n\t\t\tBuf:    (*int8)(unsafe.Pointer(&data[0])),\n\t\t}\n\t}\n\n\tif err = getmsg(fd, clp, datap, &flags); err != nil {\n\t\treturn nil, nil, 0, err\n\t}\n\n\tif len(cl) > 0 {\n\t\tretCl = cl[:clp.Len]\n\t}\n\tif len(data) > 0 {\n\t\tretData = data[:datap.Len]\n\t}\n\treturn retCl, retData, flags, nil\n}\n\nfunc IoctlSetIntRetInt(fd int, req int, arg int) (int, error) {\n\treturn ioctlRet(fd, req, uintptr(arg))\n}\n\nfunc IoctlSetString(fd int, req int, val string) error {\n\tbs := make([]byte, len(val)+1)\n\tcopy(bs[:len(bs)-1], val)\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&bs[0]))\n\truntime.KeepAlive(&bs[0])\n\treturn err\n}\n\n// Lifreq Helpers\n\nfunc (l *Lifreq) SetName(name string) error {\n\tif len(name) >= len(l.Name) {\n\t\treturn fmt.Errorf(\"name cannot be more than %d characters\", len(l.Name)-1)\n\t}\n\tfor i := range name {\n\t\tl.Name[i] = int8(name[i])\n\t}\n\treturn nil\n}\n\nfunc (l *Lifreq) SetLifruInt(d int) {\n\t*(*int)(unsafe.Pointer(&l.Lifru[0])) = d\n}\n\nfunc (l *Lifreq) GetLifruInt() int {\n\treturn *(*int)(unsafe.Pointer(&l.Lifru[0]))\n}\n\nfunc (l *Lifreq) SetLifruUint(d uint) {\n\t*(*uint)(unsafe.Pointer(&l.Lifru[0])) = d\n}\n\nfunc (l *Lifreq) GetLifruUint() uint {\n\treturn *(*uint)(unsafe.Pointer(&l.Lifru[0]))\n}\n\nfunc IoctlLifreq(fd int, req int, l *Lifreq) error {\n\treturn ioctlPtr(fd, req, unsafe.Pointer(l))\n}\n\n// Strioctl Helpers\n\nfunc (s *Strioctl) SetInt(i int) {\n\ts.Len = int32(unsafe.Sizeof(i))\n\ts.Dp = (*int8)(unsafe.Pointer(&i))\n}\n\nfunc IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {\n\treturn ioctlPtrRet(fd, req, unsafe.Pointer(s))\n}\n\n// Ucred Helpers\n// See ucred(3c) and getpeerucred(3c)\n\n//sys\tgetpeerucred(fd uintptr, ucred *uintptr) (err error)\n//sys\tucredFree(ucred uintptr) = ucred_free\n//sys\tucredGet(pid int) (ucred uintptr, err error) = ucred_get\n//sys\tucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid\n//sys\tucredGetegid(ucred uintptr) (gid int) = ucred_getegid\n//sys\tucredGetruid(ucred uintptr) (uid int) = ucred_getruid\n//sys\tucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid\n//sys\tucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid\n//sys\tucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid\n//sys\tucredGetpid(ucred uintptr) (pid int) = ucred_getpid\n\n// Ucred is an opaque struct that holds user credentials.\ntype Ucred struct {\n\tucred uintptr\n}\n\n// We need to ensure that ucredFree is called on the underlying ucred\n// when the Ucred is garbage collected.\nfunc ucredFinalizer(u *Ucred) {\n\tucredFree(u.ucred)\n}\n\nfunc GetPeerUcred(fd uintptr) (*Ucred, error) {\n\tvar ucred uintptr\n\terr := getpeerucred(fd, &ucred)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresult := &Ucred{\n\t\tucred: ucred,\n\t}\n\t// set the finalizer on the result so that the ucred will be freed\n\truntime.SetFinalizer(result, ucredFinalizer)\n\treturn result, nil\n}\n\nfunc UcredGet(pid int) (*Ucred, error) {\n\tucred, err := ucredGet(pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresult := &Ucred{\n\t\tucred: ucred,\n\t}\n\t// set the finalizer on the result so that the ucred will be freed\n\truntime.SetFinalizer(result, ucredFinalizer)\n\treturn result, nil\n}\n\nfunc (u *Ucred) Geteuid() int {\n\tdefer runtime.KeepAlive(u)\n\treturn ucredGeteuid(u.ucred)\n}\n\nfunc (u *Ucred) Getruid() int {\n\tdefer runtime.KeepAlive(u)\n\treturn ucredGetruid(u.ucred)\n}\n\nfunc (u *Ucred) Getsuid() int {\n\tdefer runtime.KeepAlive(u)\n\treturn ucredGetsuid(u.ucred)\n}\n\nfunc (u *Ucred) Getegid() int {\n\tdefer runtime.KeepAlive(u)\n\treturn ucredGetegid(u.ucred)\n}\n\nfunc (u *Ucred) Getrgid() int {\n\tdefer runtime.KeepAlive(u)\n\treturn ucredGetrgid(u.ucred)\n}\n\nfunc (u *Ucred) Getsgid() int {\n\tdefer runtime.KeepAlive(u)\n\treturn ucredGetsgid(u.ucred)\n}\n\nfunc (u *Ucred) Getpid() int {\n\tdefer runtime.KeepAlive(u)\n\treturn ucredGetpid(u.ucred)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && solaris\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris\n\npackage unix\n\nimport (\n\t\"bytes\"\n\t\"sort\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tStdin  = 0\n\tStdout = 1\n\tStderr = 2\n)\n\n// Do the interface allocations only once for common\n// Errno values.\nvar (\n\terrEAGAIN error = syscall.EAGAIN\n\terrEINVAL error = syscall.EINVAL\n\terrENOENT error = syscall.ENOENT\n)\n\nvar (\n\tsignalNameMapOnce sync.Once\n\tsignalNameMap     map[string]syscall.Signal\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e syscall.Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase EAGAIN:\n\t\treturn errEAGAIN\n\tcase EINVAL:\n\t\treturn errEINVAL\n\tcase ENOENT:\n\t\treturn errENOENT\n\t}\n\treturn e\n}\n\n// ErrnoName returns the error name for error number e.\nfunc ErrnoName(e syscall.Errno) string {\n\ti := sort.Search(len(errorList), func(i int) bool {\n\t\treturn errorList[i].num >= e\n\t})\n\tif i < len(errorList) && errorList[i].num == e {\n\t\treturn errorList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalName returns the signal name for signal number s.\nfunc SignalName(s syscall.Signal) string {\n\ti := sort.Search(len(signalList), func(i int) bool {\n\t\treturn signalList[i].num >= s\n\t})\n\tif i < len(signalList) && signalList[i].num == s {\n\t\treturn signalList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalNum returns the syscall.Signal for signal named s,\n// or 0 if a signal with such name is not found.\n// The signal name should start with \"SIG\".\nfunc SignalNum(s string) syscall.Signal {\n\tsignalNameMapOnce.Do(func() {\n\t\tsignalNameMap = make(map[string]syscall.Signal, len(signalList))\n\t\tfor _, signal := range signalList {\n\t\t\tsignalNameMap[signal.name] = signal.num\n\t\t}\n\t})\n\treturn signalNameMap[s]\n}\n\n// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.\nfunc clen(n []byte) int {\n\ti := bytes.IndexByte(n, 0)\n\tif i == -1 {\n\t\ti = len(n)\n\t}\n\treturn i\n}\n\n// Mmap manager, for use by operating system-specific implementations.\n\ntype mmapper struct {\n\tsync.Mutex\n\tactive map[*byte][]byte // active mappings; key is last byte in mapping\n\tmmap   func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error)\n\tmunmap func(addr uintptr, length uintptr) error\n}\n\nfunc (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\tif length <= 0 {\n\t\treturn nil, EINVAL\n\t}\n\n\t// Map the requested memory.\n\taddr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Use unsafe to convert addr into a []byte.\n\tb := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length)\n\n\t// Register mapping in m and return it.\n\tp := &b[cap(b)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tm.active[p] = b\n\treturn b, nil\n}\n\nfunc (m *mmapper) Munmap(data []byte) (err error) {\n\tif len(data) == 0 || len(data) != cap(data) {\n\t\treturn EINVAL\n\t}\n\n\t// Find the base of the mapping.\n\tp := &data[cap(data)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tb := m.active[p]\n\tif b == nil || &b[0] != &data[0] {\n\t\treturn EINVAL\n\t}\n\n\t// Unmap the memory and update m.\n\tif errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil {\n\t\treturn errno\n\t}\n\tdelete(m.active, p)\n\treturn nil\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n\nfunc MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) {\n\txaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset)\n\treturn unsafe.Pointer(xaddr), err\n}\n\nfunc MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) {\n\treturn mapper.munmap(uintptr(addr), length)\n}\n\nfunc Read(fd int, p []byte) (n int, err error) {\n\tn, err = read(fd, p)\n\tif raceenabled {\n\t\tif n > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), n)\n\t\t}\n\t\tif err == nil {\n\t\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t\t}\n\t}\n\treturn\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = write(fd, p)\n\tif raceenabled && n > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), n)\n\t}\n\treturn\n}\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tn, err = pread(fd, p, offset)\n\tif raceenabled {\n\t\tif n > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), n)\n\t\t}\n\t\tif err == nil {\n\t\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t\t}\n\t}\n\treturn\n}\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = pwrite(fd, p, offset)\n\tif raceenabled && n > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), n)\n\t}\n\treturn\n}\n\n// For testing: clients can set this flag to force\n// creation of IPv6 sockets to return EAFNOSUPPORT.\nvar SocketDisableIPv6 bool\n\n// Sockaddr represents a socket address.\ntype Sockaddr interface {\n\tsockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs\n}\n\n// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.\ntype SockaddrInet4 struct {\n\tPort int\n\tAddr [4]byte\n\traw  RawSockaddrInet4\n}\n\n// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.\ntype SockaddrInet6 struct {\n\tPort   int\n\tZoneId uint32\n\tAddr   [16]byte\n\traw    RawSockaddrInet6\n}\n\n// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.\ntype SockaddrUnix struct {\n\tName string\n\traw  RawSockaddrUnix\n}\n\nfunc Bind(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn bind(fd, ptr, n)\n}\n\nfunc Connect(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn connect(fd, ptr, n)\n}\n\nfunc Getpeername(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getpeername(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptByte(fd, level, opt int) (value byte, err error) {\n\tvar n byte\n\tvallen := _Socklen(1)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc GetsockoptInt(fd, level, opt int) (value int, err error) {\n\tvar n int32\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn int(n), err\n}\n\nfunc GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\treturn value, err\n}\n\nfunc GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {\n\tvar value IPMreq\n\tvallen := _Socklen(SizeofIPMreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {\n\tvar value IPv6Mreq\n\tvallen := _Socklen(SizeofIPv6Mreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {\n\tvar value IPv6MTUInfo\n\tvallen := _Socklen(SizeofIPv6MTUInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {\n\tvar value ICMPv6Filter\n\tvallen := _Socklen(SizeofICMPv6Filter)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptLinger(fd, level, opt int) (*Linger, error) {\n\tvar linger Linger\n\tvallen := _Socklen(SizeofLinger)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)\n\treturn &linger, err\n}\n\nfunc GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {\n\tvar tv Timeval\n\tvallen := _Socklen(unsafe.Sizeof(tv))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)\n\treturn &tv, err\n}\n\nfunc GetsockoptUint64(fd, level, opt int) (value uint64, err error) {\n\tvar n uint64\n\tvallen := _Socklen(8)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\n// Recvmsg receives a message from a socket using the recvmsg system call. The\n// received non-control data will be written to p, and any \"out of band\"\n// control data will be written to oob. The flags are passed to recvmsg.\n//\n// The results are:\n//   - n is the number of non-control data bytes read into p\n//   - oobn is the number of control data bytes read into oob; this may be interpreted using [ParseSocketControlMessage]\n//   - recvflags is flags returned by recvmsg\n//   - from is the address of the sender\n//\n// If the underlying socket type is not SOCK_DGRAM, a received message\n// containing oob data and a single '\\0' of non-control data is treated as if\n// the message contained only control data, i.e. n will be zero on return.\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tvar iov [1]Iovec\n\tif len(p) > 0 {\n\t\tiov[0].Base = &p[0]\n\t\tiov[0].SetLen(len(p))\n\t}\n\tvar rsa RawSockaddrAny\n\tn, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa)\n\t// source address is only specified if the socket is unconnected\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\n// RecvmsgBuffers receives a message from a socket using the recvmsg system\n// call. This function is equivalent to Recvmsg, but non-control data read is\n// scattered into the buffers slices.\nfunc RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tiov := make([]Iovec, len(buffers))\n\tfor i := range buffers {\n\t\tif len(buffers[i]) > 0 {\n\t\t\tiov[i].Base = &buffers[i][0]\n\t\t\tiov[i].SetLen(len(buffers[i]))\n\t\t} else {\n\t\t\tiov[i].Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t}\n\tvar rsa RawSockaddrAny\n\tn, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa)\n\tif err == nil && rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\n// Sendmsg sends a message on a socket to an address using the sendmsg system\n// call. This function is equivalent to SendmsgN, but does not return the\n// number of bytes actually sent.\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\n// SendmsgN sends a message on a socket to an address using the sendmsg system\n// call. p contains the non-control data to send, and oob contains the \"out of\n// band\" control data. The flags are passed to sendmsg. The number of\n// non-control bytes actually written to the socket is returned.\n//\n// Some socket types do not support sending control data without accompanying\n// non-control data. If p is empty, and oob contains control data, and the\n// underlying socket type is not SOCK_DGRAM, p will be treated as containing a\n// single '\\0' and the return value will indicate zero bytes sent.\n//\n// The Go function Recvmsg, if called with an empty p and a non-empty oob,\n// will read and ignore this additional '\\0'.  If the message is received by\n// code that does not use Recvmsg, or that does not use Go at all, that code\n// will need to be written to expect and ignore the additional '\\0'.\n//\n// If you need to send non-empty oob with p actually empty, and if the\n// underlying socket type supports it, you can do so via a raw system call as\n// follows:\n//\n//\tmsg := &unix.Msghdr{\n//\t    Control: &oob[0],\n//\t}\n//\tmsg.SetControllen(len(oob))\n//\tn, _, errno := unix.Syscall(unix.SYS_SENDMSG, uintptr(fd), uintptr(unsafe.Pointer(msg)), flags)\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tvar iov [1]Iovec\n\tif len(p) > 0 {\n\t\tiov[0].Base = &p[0]\n\t\tiov[0].SetLen(len(p))\n\t}\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn sendmsgN(fd, iov[:], oob, ptr, salen, flags)\n}\n\n// SendmsgBuffers sends a message on a socket to an address using the sendmsg\n// system call. This function is equivalent to SendmsgN, but the non-control\n// data is gathered from buffers.\nfunc SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tiov := make([]Iovec, len(buffers))\n\tfor i := range buffers {\n\t\tif len(buffers[i]) > 0 {\n\t\t\tiov[i].Base = &buffers[i][0]\n\t\t\tiov[i].SetLen(len(buffers[i]))\n\t\t} else {\n\t\t\tiov[i].Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t}\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn sendmsgN(fd, iov, oob, ptr, salen, flags)\n}\n\nfunc Send(s int, buf []byte, flags int) (err error) {\n\treturn sendto(s, buf, flags, nil, 0)\n}\n\nfunc Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn sendto(fd, p, flags, ptr, salen)\n}\n\nfunc SetsockoptByte(fd, level, opt int, value byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 1)\n}\n\nfunc SetsockoptInt(fd, level, opt int, value int) (err error) {\n\tvar n = int32(value)\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&n), 4)\n}\n\nfunc SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4)\n}\n\nfunc SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq)\n}\n\nfunc SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq)\n}\n\nfunc SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter)\n}\n\nfunc SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger)\n}\n\nfunc SetsockoptString(fd, level, opt int, s string) (err error) {\n\tvar p unsafe.Pointer\n\tif len(s) > 0 {\n\t\tp = unsafe.Pointer(&[]byte(s)[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(s)))\n}\n\nfunc SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))\n}\n\nfunc SetsockoptUint64(fd, level, opt int, value uint64) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)\n}\n\nfunc Socket(domain, typ, proto int) (fd int, err error) {\n\tif domain == AF_INET6 && SocketDisableIPv6 {\n\t\treturn -1, EAFNOSUPPORT\n\t}\n\tfd, err = socket(domain, typ, proto)\n\treturn\n}\n\nfunc Socketpair(domain, typ, proto int) (fd [2]int, err error) {\n\tvar fdx [2]int32\n\terr = socketpair(domain, typ, proto, &fdx)\n\tif err == nil {\n\t\tfd[0] = int(fdx[0])\n\t\tfd[1] = int(fdx[1])\n\t}\n\treturn\n}\n\nvar ioSync int64\n\nfunc CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\tflag, err := fcntl(fd, F_GETFL, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif (flag&O_NONBLOCK != 0) == nonblocking {\n\t\treturn nil\n\t}\n\tif nonblocking {\n\t\tflag |= O_NONBLOCK\n\t} else {\n\t\tflag &= ^O_NONBLOCK\n\t}\n\t_, err = fcntl(fd, F_SETFL, flag)\n\treturn err\n}\n\n// Exec calls execve(2), which replaces the calling executable in the process\n// tree. argv0 should be the full path to an executable (\"/bin/ls\") and the\n// executable name should also be the first argument in argv ([\"ls\", \"-l\"]).\n// envv are the environment variables that should be passed to the new\n// process ([\"USER=go\", \"PWD=/tmp\"]).\nfunc Exec(argv0 string, argv []string, envv []string) error {\n\treturn syscall.Exec(argv0, argv, envv)\n}\n\n// Lutimes sets the access and modification times tv on path. If path refers to\n// a symlink, it is not dereferenced and the timestamps are set on the symlink.\n// If tv is nil, the access and modification times are set to the current time.\n// Otherwise tv must contain exactly 2 elements, with access time as the first\n// element and modification time as the second element.\nfunc Lutimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)\n}\n\n// emptyIovecs reports whether there are no bytes in the slice of Iovec.\nfunc emptyIovecs(iov []Iovec) bool {\n\tfor i := range iov {\n\t\tif iov[i].Len > 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Setrlimit sets a resource limit.\nfunc Setrlimit(resource int, rlim *Rlimit) error {\n\t// Just call the syscall version, because as of Go 1.21\n\t// it will affect starting a new process.\n\treturn syscall.Setrlimit(resource, (*syscall.Rlimit)(rlim))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix_gc.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc\n\npackage unix\n\nimport \"syscall\"\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (ppc64le || ppc64) && gc\n\npackage unix\n\nimport \"syscall\"\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.Syscall(trap, a1, a2, a3)\n}\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)\n}\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.RawSyscall(trap, a1, a2, a3)\n}\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_zos_s390x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\n// Many of the following syscalls are not available on all versions of z/OS.\n// Some missing calls have legacy implementations/simulations but others\n// will be missing completely. To achieve consistent failing behaviour on\n// legacy systems, we first test the function pointer via a safeloading\n// mechanism to see if the function exists on a given system. Then execution\n// is branched to either continue the function call, or return an error.\n\npackage unix\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:noescape\nfunc initZosLibVec()\n\n//go:noescape\nfunc GetZosLibVec() uintptr\n\nfunc init() {\n\tinitZosLibVec()\n\tr0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte(\"__ZOS_XSYSTRACE\\x00\"))[0])))\n\tif r0 != 0 {\n\t\tn, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0)\n\t\tZosTraceLevel = int(n)\n\t\tr0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte(\"__ZOS_XSYSTRACEFD\\x00\"))[0])))\n\t\tif r0 != 0 {\n\t\t\tfd, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0)\n\t\t\tf := os.NewFile(fd, \"zostracefile\")\n\t\t\tif f != nil {\n\t\t\t\tZosTracefile = f\n\t\t\t}\n\t\t}\n\n\t}\n}\n\n//go:noescape\nfunc CallLeFuncWithErr(funcdesc uintptr, parms ...uintptr) (ret, errno2 uintptr, err Errno)\n\n//go:noescape\nfunc CallLeFuncWithPtrReturn(funcdesc uintptr, parms ...uintptr) (ret, errno2 uintptr, err Errno)\n\n// -------------------------------\n// pointer validity test\n// good pointer returns 0\n// bad pointer returns 1\n//\n//go:nosplit\nfunc ptrtest(uintptr) uint64\n\n// Load memory at ptr location with error handling if the location is invalid\n//\n//go:noescape\nfunc safeload(ptr uintptr) (value uintptr, error uintptr)\n\nconst (\n\tentrypointLocationOffset = 8 // From function descriptor\n\n\txplinkEyecatcher   = 0x00c300c500c500f1 // \".C.E.E.1\"\n\teyecatcherOffset   = 16                 // From function entrypoint (negative)\n\tppa1LocationOffset = 8                  // From function entrypoint (negative)\n\n\tnameLenOffset = 0x14 // From PPA1 start\n\tnameOffset    = 0x16 // From PPA1 start\n)\n\nfunc getPpaOffset(funcptr uintptr) int64 {\n\tentrypoint, err := safeload(funcptr + entrypointLocationOffset)\n\tif err != 0 {\n\t\treturn -1\n\t}\n\n\t// XPLink functions have \".C.E.E.1\" as the first 8 bytes (EBCDIC)\n\tval, err := safeload(entrypoint - eyecatcherOffset)\n\tif err != 0 {\n\t\treturn -1\n\t}\n\tif val != xplinkEyecatcher {\n\t\treturn -1\n\t}\n\n\tppaoff, err := safeload(entrypoint - ppa1LocationOffset)\n\tif err != 0 {\n\t\treturn -1\n\t}\n\n\tppaoff >>= 32\n\treturn int64(ppaoff)\n}\n\n//-------------------------------\n// function descriptor pointer validity test\n// good pointer returns 0\n// bad pointer returns 1\n\n// TODO: currently mksyscall_zos_s390x.go generate empty string for funcName\n// have correct funcName pass to the funcptrtest function\nfunc funcptrtest(funcptr uintptr, funcName string) uint64 {\n\tentrypoint, err := safeload(funcptr + entrypointLocationOffset)\n\tif err != 0 {\n\t\treturn 1\n\t}\n\n\tppaoff := getPpaOffset(funcptr)\n\tif ppaoff == -1 {\n\t\treturn 1\n\t}\n\n\t// PPA1 offset value is from the start of the entire function block, not the entrypoint\n\tppa1 := (entrypoint - eyecatcherOffset) + uintptr(ppaoff)\n\n\tnameLen, err := safeload(ppa1 + nameLenOffset)\n\tif err != 0 {\n\t\treturn 1\n\t}\n\n\tnameLen >>= 48\n\tif nameLen > 128 {\n\t\treturn 1\n\t}\n\n\t// no function name input to argument end here\n\tif funcName == \"\" {\n\t\treturn 0\n\t}\n\n\tvar funcname [128]byte\n\tfor i := 0; i < int(nameLen); i += 8 {\n\t\tv, err := safeload(ppa1 + nameOffset + uintptr(i))\n\t\tif err != 0 {\n\t\t\treturn 1\n\t\t}\n\t\tfuncname[i] = byte(v >> 56)\n\t\tfuncname[i+1] = byte(v >> 48)\n\t\tfuncname[i+2] = byte(v >> 40)\n\t\tfuncname[i+3] = byte(v >> 32)\n\t\tfuncname[i+4] = byte(v >> 24)\n\t\tfuncname[i+5] = byte(v >> 16)\n\t\tfuncname[i+6] = byte(v >> 8)\n\t\tfuncname[i+7] = byte(v)\n\t}\n\n\truntime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, // __e2a_l\n\t\t[]uintptr{uintptr(unsafe.Pointer(&funcname[0])), nameLen})\n\n\tname := string(funcname[:nameLen])\n\tif name != funcName {\n\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n// For detection of capabilities on a system.\n// Is function descriptor f a valid function?\nfunc isValidLeFunc(f uintptr) error {\n\tret := funcptrtest(f, \"\")\n\tif ret != 0 {\n\t\treturn fmt.Errorf(\"Bad pointer, not an LE function \")\n\t}\n\treturn nil\n}\n\n// Retrieve function name from descriptor\nfunc getLeFuncName(f uintptr) (string, error) {\n\t// assume it has been checked, only check ppa1 validity here\n\tentry := ((*[2]uintptr)(unsafe.Pointer(f)))[1]\n\tpreamp := ((*[4]uint32)(unsafe.Pointer(entry - eyecatcherOffset)))\n\n\toffsetPpa1 := preamp[2]\n\tif offsetPpa1 > 0x0ffff {\n\t\treturn \"\", fmt.Errorf(\"PPA1 offset seems too big 0x%x\\n\", offsetPpa1)\n\t}\n\n\tppa1 := uintptr(unsafe.Pointer(preamp)) + uintptr(offsetPpa1)\n\tres := ptrtest(ppa1)\n\tif res != 0 {\n\t\treturn \"\", fmt.Errorf(\"PPA1 address not valid\")\n\t}\n\n\tsize := *(*uint16)(unsafe.Pointer(ppa1 + nameLenOffset))\n\tif size > 128 {\n\t\treturn \"\", fmt.Errorf(\"Function name seems too long, length=%d\\n\", size)\n\t}\n\n\tvar name [128]byte\n\tfuncname := (*[128]byte)(unsafe.Pointer(ppa1 + nameOffset))\n\tcopy(name[0:size], funcname[0:size])\n\n\truntime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, // __e2a_l\n\t\t[]uintptr{uintptr(unsafe.Pointer(&name[0])), uintptr(size)})\n\n\treturn string(name[:size]), nil\n}\n\n// Check z/OS version\nfunc zosLeVersion() (version, release uint32) {\n\tp1 := (*(*uintptr)(unsafe.Pointer(uintptr(1208)))) >> 32\n\tp1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 88)))\n\tp1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 8)))\n\tp1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 984)))\n\tvrm := *(*uint32)(unsafe.Pointer(p1 + 80))\n\tversion = (vrm & 0x00ff0000) >> 16\n\trelease = (vrm & 0x0000ff00) >> 8\n\treturn\n}\n\n// returns a zos C FILE * for stdio fd 0, 1, 2\nfunc ZosStdioFilep(fd int32) uintptr {\n\treturn uintptr(*(*uint64)(unsafe.Pointer(uintptr(*(*uint64)(unsafe.Pointer(uintptr(*(*uint64)(unsafe.Pointer(uintptr(uint64(*(*uint32)(unsafe.Pointer(uintptr(1208)))) + 80))) + uint64((fd+2)<<3))))))))\n}\n\nfunc copyStat(stat *Stat_t, statLE *Stat_LE_t) {\n\tstat.Dev = uint64(statLE.Dev)\n\tstat.Ino = uint64(statLE.Ino)\n\tstat.Nlink = uint64(statLE.Nlink)\n\tstat.Mode = uint32(statLE.Mode)\n\tstat.Uid = uint32(statLE.Uid)\n\tstat.Gid = uint32(statLE.Gid)\n\tstat.Rdev = uint64(statLE.Rdev)\n\tstat.Size = statLE.Size\n\tstat.Atim.Sec = int64(statLE.Atim)\n\tstat.Atim.Nsec = 0 //zos doesn't return nanoseconds\n\tstat.Mtim.Sec = int64(statLE.Mtim)\n\tstat.Mtim.Nsec = 0 //zos doesn't return nanoseconds\n\tstat.Ctim.Sec = int64(statLE.Ctim)\n\tstat.Ctim.Nsec = 0 //zos doesn't return nanoseconds\n\tstat.Blksize = int64(statLE.Blksize)\n\tstat.Blocks = statLE.Blocks\n}\n\nfunc svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64)\nfunc svcLoad(name *byte) unsafe.Pointer\nfunc svcUnload(name *byte, fnptr unsafe.Pointer) int64\n\nfunc (d *Dirent) NameString() string {\n\tif d == nil {\n\t\treturn \"\"\n\t}\n\ts := string(d.Name[:])\n\tidx := strings.IndexByte(s, 0)\n\tif idx == -1 {\n\t\treturn s\n\t} else {\n\t\treturn s[:idx]\n\t}\n}\n\nfunc DecodeData(dest []byte, sz int, val uint64) {\n\tfor i := 0; i < sz; i++ {\n\t\tdest[sz-1-i] = byte((val >> (uint64(i * 8))) & 0xff)\n\t}\n}\n\nfunc EncodeData(data []byte) uint64 {\n\tvar value uint64\n\tsz := len(data)\n\tfor i := 0; i < sz; i++ {\n\t\tvalue |= uint64(data[i]) << uint64(((sz - i - 1) * 8))\n\t}\n\treturn value\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet4\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet6\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) || n == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\t// TODO(neeilan): Implement use of first param (fd)\n\tswitch rsa.Addr.Family {\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\t// For z/OS, only replace NUL with @ when the\n\t\t// length is not zero.\n\t\tif pp.Len != 0 && pp.Path[0] == 0 {\n\t\t\t// \"Abstract\" Unix domain socket.\n\t\t\t// Rewrite leading NUL as @ for textual display.\n\t\t\t// (This is the standard convention.)\n\t\t\t// Not friendly to overwrite in place,\n\t\t\t// but the callers below don't care.\n\t\t\tpp.Path[0] = '@'\n\t\t}\n\n\t\t// Assume path ends at NUL.\n\t\t//\n\t\t// For z/OS, the length of the name is a field\n\t\t// in the structure. To be on the safe side, we\n\t\t// will still scan the name for a NUL but only\n\t\t// to the length provided in the structure.\n\t\t//\n\t\t// This is not technically the Linux semantics for\n\t\t// abstract Unix domain sockets--they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs--but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < int(pp.Len) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif err != nil {\n\t\treturn\n\t}\n\t// TODO(neeilan): Remove 0 in call\n\tsa, err = anyToSockaddr(0, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\t// TODO(neeilan): Remove 0 in call\n\tsa, err = anyToSockaddr(0, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Ctermid() (tty string, err error) {\n\tvar termdev [1025]byte\n\truntime.EnterSyscall()\n\tr0, err2, err1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___CTERMID_A<<4, uintptr(unsafe.Pointer(&termdev[0])))\n\truntime.ExitSyscall()\n\tif r0 == 0 {\n\t\treturn \"\", fmt.Errorf(\"%s (errno2=0x%x)\\n\", err1.Error(), err2)\n\t}\n\ts := string(termdev[:])\n\tidx := strings.Index(s, string(rune(0)))\n\tif idx == -1 {\n\t\ttty = s\n\t} else {\n\t\ttty = s[:idx]\n\t}\n\treturn\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = int32(length)\n}\n\n//sys   fcntl(fd int, cmd int, arg int) (val int, err error)\n//sys   Flistxattr(fd int, dest []byte) (sz int, err error) = SYS___FLISTXATTR_A\n//sys   Fremovexattr(fd int, attr string) (err error) = SYS___FREMOVEXATTR_A\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n\n//sys   Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) = SYS___FGETXATTR_A\n//sys   Fsetxattr(fd int, attr string, data []byte, flag int) (err error) = SYS___FSETXATTR_A\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = SYS___ACCEPT_A\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = SYS___ACCEPT4_A\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___BIND_A\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___CONNECT_A\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETPEERNAME_A\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETSOCKNAME_A\n//sys   Removexattr(path string, attr string) (err error) = SYS___REMOVEXATTR_A\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = SYS___RECVFROM_A\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = SYS___SENDTO_A\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___RECVMSG_A\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A\n//sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP\n//sys   munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP\n//sys   ioctl(fd int, req int, arg uintptr) (err error) = SYS_IOCTL\n//sys   ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = SYS_IOCTL\n//sys\tshmat(id int, addr uintptr, flag int) (ret uintptr, err error) = SYS_SHMAT\n//sys\tshmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) = SYS_SHMCTL64\n//sys\tshmdt(addr uintptr) (err error) = SYS_SHMDT\n//sys\tshmget(key int, size int, flag int) (id int, err error) = SYS_SHMGET\n\n//sys   Access(path string, mode uint32) (err error) = SYS___ACCESS_A\n//sys   Chdir(path string) (err error) = SYS___CHDIR_A\n//sys\tChown(path string, uid int, gid int) (err error) = SYS___CHOWN_A\n//sys\tChmod(path string, mode uint32) (err error) = SYS___CHMOD_A\n//sys   Creat(path string, mode uint32) (fd int, err error) = SYS___CREAT_A\n//sys\tDup(oldfd int) (fd int, err error)\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tDup3(oldfd int, newfd int, flags int) (err error) = SYS_DUP3\n//sys\tDirfd(dirp uintptr) (fd int, err error) = SYS_DIRFD\n//sys\tEpollCreate(size int) (fd int, err error) = SYS_EPOLL_CREATE\n//sys\tEpollCreate1(flags int) (fd int, err error) = SYS_EPOLL_CREATE1\n//sys\tEpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) = SYS_EPOLL_CTL\n//sys\tEpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_WAIT\n//sys\tErrno2() (er2 int) = SYS___ERRNO2\n//sys\tEventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error) = SYS___FACCESSAT_A\n\nfunc Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) {\n\treturn Faccessat(dirfd, path, mode, flags)\n}\n\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error) = SYS___FCHMODAT_A\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(fd int, path string, uid int, gid int, flags int) (err error) = SYS___FCHOWNAT_A\n//sys\tFcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) = SYS_FCNTL\n//sys\tFdatasync(fd int) (err error) = SYS_FDATASYNC\n//sys\tfstat(fd int, stat *Stat_LE_t) (err error)\n//sys\tfstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) = SYS___FSTATAT_A\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\tvar statLE Stat_LE_t\n\terr = fstat(fd, &statLE)\n\tcopyStat(stat, &statLE)\n\treturn\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar statLE Stat_LE_t\n\terr = fstatat(dirfd, path, &statLE, flags)\n\tcopyStat(stat, &statLE)\n\treturn\n}\n\nfunc impl_Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)))\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_GetxattrAddr() *(func(path string, attr string, dest []byte) (sz int, err error))\n\nvar Getxattr = enter_Getxattr\n\nfunc enter_Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tfuncref := get_GetxattrAddr()\n\tif validGetxattr() {\n\t\t*funcref = impl_Getxattr\n\t} else {\n\t\t*funcref = error_Getxattr\n\t}\n\treturn (*funcref)(path, attr, dest)\n}\n\nfunc error_Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc validGetxattr() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___GETXATTR_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___GETXATTR_A<<4); err == nil {\n\t\t\treturn name == \"__getxattr_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n//sys   Lgetxattr(link string, attr string, dest []byte) (sz int, err error) = SYS___LGETXATTR_A\n//sys   Lsetxattr(path string, attr string, data []byte, flags int) (err error) = SYS___LSETXATTR_A\n\nfunc impl_Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SetxattrAddr() *(func(path string, attr string, data []byte, flags int) (err error))\n\nvar Setxattr = enter_Setxattr\n\nfunc enter_Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tfuncref := get_SetxattrAddr()\n\tif validSetxattr() {\n\t\t*funcref = impl_Setxattr\n\t} else {\n\t\t*funcref = error_Setxattr\n\t}\n\treturn (*funcref)(path, attr, data, flags)\n}\n\nfunc error_Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\treturn ENOSYS\n}\n\nfunc validSetxattr() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___SETXATTR_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___SETXATTR_A<<4); err == nil {\n\t\t\treturn name == \"__setxattr_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error) = SYS_FSTATFS\n//sys\tFstatvfs(fd int, stat *Statvfs_t) (err error) = SYS_FSTATVFS\n//sys\tFsync(fd int) (err error)\n//sys\tFutimes(fd int, tv []Timeval) (err error) = SYS_FUTIMES\n//sys\tFutimesat(dirfd int, path string, tv []Timeval) (err error) = SYS___FUTIMESAT_A\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetrandom(buf []byte, flags int) (n int, err error) = SYS_GETRANDOM\n//sys\tInotifyInit() (fd int, err error) = SYS_INOTIFY_INIT\n//sys\tInotifyInit1(flags int) (fd int, err error) = SYS_INOTIFY_INIT1\n//sys\tInotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) = SYS___INOTIFY_ADD_WATCH_A\n//sys\tInotifyRmWatch(fd int, watchdesc uint32) (success int, err error) = SYS_INOTIFY_RM_WATCH\n//sys   Listxattr(path string, dest []byte) (sz int, err error) = SYS___LISTXATTR_A\n//sys   Llistxattr(path string, dest []byte) (sz int, err error) = SYS___LLISTXATTR_A\n//sys   Lremovexattr(path string, attr string) (err error) = SYS___LREMOVEXATTR_A\n//sys\tLutimes(path string, tv []Timeval) (err error) = SYS___LUTIMES_A\n//sys   Mprotect(b []byte, prot int) (err error) = SYS_MPROTECT\n//sys   Msync(b []byte, flags int) (err error) = SYS_MSYNC\n//sys   Console2(cmsg *ConsMsg2, modstr *byte, concmd *uint32) (err error) = SYS___CONSOLE2\n\n// Pipe2 begin\n\n//go:nosplit\nfunc getPipe2Addr() *(func([]int, int) error)\n\nvar Pipe2 = pipe2Enter\n\nfunc pipe2Enter(p []int, flags int) (err error) {\n\tif funcptrtest(GetZosLibVec()+SYS_PIPE2<<4, \"\") == 0 {\n\t\t*getPipe2Addr() = pipe2Impl\n\t} else {\n\t\t*getPipe2Addr() = pipe2Error\n\t}\n\treturn (*getPipe2Addr())(p, flags)\n}\n\nfunc pipe2Impl(p []int, flags int) (err error) {\n\tvar pp [2]_C_int\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PIPE2<<4, uintptr(unsafe.Pointer(&pp[0])), uintptr(flags))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t} else {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn\n}\nfunc pipe2Error(p []int, flags int) (err error) {\n\treturn fmt.Errorf(\"Pipe2 is not available on this system\")\n}\n\n// Pipe2 end\n\n//sys   Poll(fds []PollFd, timeout int) (n int, err error) = SYS_POLL\n\nfunc Readdir(dir uintptr) (dirent *Dirent, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READDIR_A<<4, uintptr(dir))\n\truntime.ExitSyscall()\n\tdirent = (*Dirent)(unsafe.Pointer(r0))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//sys\tReaddir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) = SYS___READDIR_R_A\n//sys\tStatfs(path string, buf *Statfs_t) (err error) = SYS___STATFS_A\n//sys\tSyncfs(fd int) (err error) = SYS_SYNCFS\n//sys   Times(tms *Tms) (ticks uintptr, err error) = SYS_TIMES\n//sys   W_Getmntent(buff *byte, size int) (lastsys int, err error) = SYS_W_GETMNTENT\n//sys   W_Getmntent_A(buff *byte, size int) (lastsys int, err error) = SYS___W_GETMNTENT_A\n\n//sys   mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) = SYS___MOUNT_A\n//sys   unmount_LE(filesystem string, mtm int) (err error) = SYS___UMOUNT_A\n//sys   Chroot(path string) (err error) = SYS___CHROOT_A\n//sys   Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) = SYS_SELECT\n//sysnb Uname(buf *Utsname) (err error) = SYS_____OSNAME_A\n//sys   Unshare(flags int) (err error) = SYS_UNSHARE\n\nfunc Ptsname(fd int) (name string, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___PTSNAME_A<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif r0 == 0 {\n\t\terr = errnoErr2(e1, e2)\n\t} else {\n\t\tname = u2s(unsafe.Pointer(r0))\n\t}\n\treturn\n}\n\nfunc u2s(cstr unsafe.Pointer) string {\n\tstr := (*[1024]uint8)(cstr)\n\ti := 0\n\tfor str[i] != 0 {\n\t\ti++\n\t}\n\treturn string(str[:i])\n}\n\nfunc Close(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSE<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tfor i := 0; e1 == EAGAIN && i < 10; i++ {\n\t\truntime.EnterSyscall()\n\t\tCallLeFuncWithErr(GetZosLibVec()+SYS_USLEEP<<4, uintptr(10))\n\t\truntime.ExitSyscall()\n\t\truntime.EnterSyscall()\n\t\tr0, e2, e1 = CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSE<<4, uintptr(fd))\n\t\truntime.ExitSyscall()\n\t}\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// Dummy function: there are no semantics for Madvise on z/OS\nfunc Madvise(b []byte, advice int) (err error) {\n\treturn\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n\nfunc MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) {\n\txaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset)\n\treturn unsafe.Pointer(xaddr), err\n}\n\nfunc MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) {\n\treturn mapper.munmap(uintptr(addr), length)\n}\n\n//sys   Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error) = SYS_GETPGID\n\nfunc Getpgrp() (pid int) {\n\tpid, _ = Getpgid(0)\n\treturn\n}\n\n//sysnb\tGetppid() (pid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = SYS_GETRLIMIT\n\n//sysnb getrusage(who int, rusage *rusage_zos) (err error) = SYS_GETRUSAGE\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\tvar ruz rusage_zos\n\terr = getrusage(who, &ruz)\n\t//Only the first two fields of Rusage are set\n\trusage.Utime.Sec = ruz.Utime.Sec\n\trusage.Utime.Usec = int64(ruz.Utime.Usec)\n\trusage.Stime.Sec = ruz.Stime.Sec\n\trusage.Stime.Usec = int64(ruz.Stime.Usec)\n\treturn\n}\n\n//sys\tGetegid() (egid int) = SYS_GETEGID\n//sys\tGeteuid() (euid int) = SYS_GETEUID\n//sysnb Getsid(pid int) (sid int, err error) = SYS_GETSID\n//sysnb\tGetuid() (uid int)\n//sysnb\tKill(pid int, sig Signal) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS___LCHOWN_A\n//sys\tLink(path string, link string) (err error) = SYS___LINK_A\n//sys\tLinkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) = SYS___LINKAT_A\n//sys\tListen(s int, n int) (err error)\n//sys\tlstat(path string, stat *Stat_LE_t) (err error) = SYS___LSTAT_A\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar statLE Stat_LE_t\n\terr = lstat(path, &statLE)\n\tcopyStat(stat, &statLE)\n\treturn\n}\n\n// for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/\nfunc isSpecialPath(path []byte) (v bool) {\n\tvar special = [4][8]byte{\n\t\t{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'},\n\t\t{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'},\n\t\t{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'},\n\t\t{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}}\n\n\tvar i, j int\n\tfor i = 0; i < len(special); i++ {\n\t\tfor j = 0; j < len(special[i]); j++ {\n\t\t\tif path[j] != special[i][j] {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif j == len(special[i]) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc realpath(srcpath string, abspath []byte) (pathlen int, errno int) {\n\tvar source [1024]byte\n\tcopy(source[:], srcpath)\n\tsource[len(srcpath)] = 0\n\tret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___REALPATH_A<<4, //__realpath_a()\n\t\t[]uintptr{uintptr(unsafe.Pointer(&source[0])),\n\t\t\tuintptr(unsafe.Pointer(&abspath[0]))})\n\tif ret != 0 {\n\t\tindex := bytes.IndexByte(abspath[:], byte(0))\n\t\tif index != -1 {\n\t\t\treturn index, 0\n\t\t}\n\t} else {\n\t\terrptr := (*int)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, []uintptr{}))) //__errno()\n\t\treturn 0, *errptr\n\t}\n\treturn 0, 245 // EBADDATA   245\n}\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tn = int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___READLINK_A<<4,\n\t\t[]uintptr{uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))}))\n\truntime.KeepAlive(unsafe.Pointer(_p0))\n\tif n == -1 {\n\t\tvalue := *(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, []uintptr{})))\n\t\terr = errnoErr(Errno(value))\n\t} else {\n\t\tif buf[0] == '$' {\n\t\t\tif isSpecialPath(buf[1:9]) {\n\t\t\t\tcnt, err1 := realpath(path, buf)\n\t\t\t\tif err1 == 0 {\n\t\t\t\t\tn = cnt\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\nfunc impl_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READLINKAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t\treturn n, err\n\t} else {\n\t\tif buf[0] == '$' {\n\t\t\tif isSpecialPath(buf[1:9]) {\n\t\t\t\tcnt, err1 := realpath(path, buf)\n\t\t\t\tif err1 == 0 {\n\t\t\t\t\tn = cnt\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_ReadlinkatAddr() *(func(dirfd int, path string, buf []byte) (n int, err error))\n\nvar Readlinkat = enter_Readlinkat\n\nfunc enter_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tfuncref := get_ReadlinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___READLINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Readlinkat\n\t} else {\n\t\t*funcref = error_Readlinkat\n\t}\n\treturn (*funcref)(dirfd, path, buf)\n}\n\nfunc error_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n//sys\tMkdir(path string, mode uint32) (err error) = SYS___MKDIR_A\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error) = SYS___MKDIRAT_A\n//sys   Mkfifo(path string, mode uint32) (err error) = SYS___MKFIFO_A\n//sys\tMknod(path string, mode uint32, dev int) (err error) = SYS___MKNOD_A\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error) = SYS___MKNODAT_A\n//sys\tPivotRoot(newroot string, oldroot string) (err error) = SYS___PIVOT_ROOT_A\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPrctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) = SYS___PRCTL_A\n//sysnb\tPrlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT\n//sys\tRename(from string, to string) (err error) = SYS___RENAME_A\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) = SYS___RENAMEAT_A\n//sys\tRenameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) = SYS___RENAMEAT2_A\n//sys\tRmdir(path string) (err error) = SYS___RMDIR_A\n//sys   Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSetegid(egid int) (err error) = SYS_SETEGID\n//sys\tSeteuid(euid int) (err error) = SYS_SETEUID\n//sys\tSethostname(p []byte) (err error) = SYS___SETHOSTNAME_A\n//sys   Setns(fd int, nstype int) (err error) = SYS_SETNS\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error) = SYS_SETPGID\n//sysnb\tSetrlimit(resource int, lim *Rlimit) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error) = SYS_SETREGID\n//sysnb\tSetreuid(ruid int, euid int) (err error) = SYS_SETREUID\n//sysnb\tSetsid() (pid int, err error) = SYS_SETSID\n//sys\tSetuid(uid int) (err error) = SYS_SETUID\n//sys\tSetgid(uid int) (err error) = SYS_SETGID\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tstat(path string, statLE *Stat_LE_t) (err error) = SYS___STAT_A\n\nfunc Stat(path string, sta *Stat_t) (err error) {\n\tvar statLE Stat_LE_t\n\terr = stat(path, &statLE)\n\tcopyStat(sta, &statLE)\n\treturn\n}\n\n//sys\tSymlink(path string, link string) (err error) = SYS___SYMLINK_A\n//sys\tSymlinkat(oldPath string, dirfd int, newPath string) (err error) = SYS___SYMLINKAT_A\n//sys\tSync() = SYS_SYNC\n//sys\tTruncate(path string, length int64) (err error) = SYS___TRUNCATE_A\n//sys\tTcgetattr(fildes int, termptr *Termios) (err error) = SYS_TCGETATTR\n//sys\tTcsetattr(fildes int, when int, termptr *Termios) (err error) = SYS_TCSETATTR\n//sys\tUmask(mask int) (oldmask int)\n//sys\tUnlink(path string) (err error) = SYS___UNLINK_A\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error) = SYS___UNLINKAT_A\n//sys\tUtime(path string, utim *Utimbuf) (err error) = SYS___UTIME_A\n\n//sys\topen(path string, mode int, perm uint32) (fd int, err error) = SYS___OPEN_A\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tif mode&O_ACCMODE == 0 {\n\t\tmode |= O_RDONLY\n\t}\n\treturn open(path, mode, perm)\n}\n\n//sys\topenat(dirfd int, path string, flags int, mode uint32) (fd int, err error) = SYS___OPENAT_A\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tif flags&O_ACCMODE == 0 {\n\t\tflags |= O_RDONLY\n\t}\n\treturn openat(dirfd, path, flags, mode)\n}\n\n//sys\topenat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) = SYS___OPENAT2_A\n\nfunc Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) {\n\tif how.Flags&O_ACCMODE == 0 {\n\t\thow.Flags |= O_RDONLY\n\t}\n\treturn openat2(dirfd, path, how, SizeofOpenHow)\n}\n\nfunc ZosFdToPath(dirfd int) (path string, err error) {\n\tvar buffer [1024]byte\n\truntime.EnterSyscall()\n\tret, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_W_IOCTL<<4, uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0])))\n\truntime.ExitSyscall()\n\tif ret == 0 {\n\t\tzb := bytes.IndexByte(buffer[:], 0)\n\t\tif zb == -1 {\n\t\t\tzb = len(buffer)\n\t\t}\n\t\tCallLeFuncWithErr(GetZosLibVec()+SYS___E2A_L<<4, uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb))\n\t\treturn string(buffer[:zb]), nil\n\t}\n\treturn \"\", errnoErr2(e1, e2)\n}\n\n//sys\tremove(path string) (err error)\n\nfunc Remove(path string) error {\n\treturn remove(path)\n}\n\nconst ImplementsGetwd = true\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar p unsafe.Pointer\n\tif len(buf) > 0 {\n\t\tp = unsafe.Pointer(&buf[0])\n\t} else {\n\t\tp = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___GETCWD_A<<4, uintptr(p), uintptr(len(buf)))\n\truntime.ExitSyscall()\n\tn = clen(buf) + 1\n\tif r0 == 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\tn, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\t// Getcwd returns the number of bytes written to buf, including the NUL.\n\tif n < 1 || n > len(buf) || buf[n-1] != 0 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[0 : n-1]), nil\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count.  Max is 1<<16 on Linux.\n\tif n < 0 || n > 1<<20 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\nfunc gettid() uint64\n\nfunc Gettid() (tid int) {\n\treturn int(gettid())\n}\n\ntype WaitStatus uint32\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.  At least that's the idea.\n// There are various irregularities.  For example, the\n// \"continued\" status is 0xFFFF, distinguishing itself\n// from stopped via the core dump bit.\n\nconst (\n\tmask    = 0x7F\n\tcore    = 0x80\n\texited  = 0x00\n\tstopped = 0x7F\n\tshift   = 8\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }\n\nfunc (w WaitStatus) Stopped() bool { return w&0xFF == stopped }\n\nfunc (w WaitStatus) Continued() bool { return w == 0xFFFF }\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) Signal() Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn Signal(w & mask)\n}\n\nfunc (w WaitStatus) StopSignal() Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twaitid(idType int, id int, info *Siginfo, options int) (err error)\n\nfunc Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) {\n\treturn waitid(idType, id, info, options)\n}\n\n//sys\twaitpid(pid int, wstatus *_C_int, options int) (wpid int, err error)\n\nfunc impl_Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAIT4<<4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)))\n\truntime.ExitSyscall()\n\twpid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_Wait4Addr() *(func(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error))\n\nvar Wait4 = enter_Wait4\n\nfunc enter_Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tfuncref := get_Wait4Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_WAIT4<<4, \"\") == 0 {\n\t\t*funcref = impl_Wait4\n\t} else {\n\t\t*funcref = legacyWait4\n\t}\n\treturn (*funcref)(pid, wstatus, options, rusage)\n}\n\nfunc legacyWait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\t// TODO(mundaym): z/OS doesn't have wait4. I don't think getrusage does what we want.\n\t// At the moment rusage will not be touched.\n\tvar status _C_int\n\twpid, err = waitpid(pid, &status, options)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n//sysnb\tgettimeofday(tv *timeval_zos) (err error)\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\tvar tvz timeval_zos\n\terr = gettimeofday(&tvz)\n\ttv.Sec = tvz.Sec\n\ttv.Usec = int64(tvz.Usec)\n\treturn\n}\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval { //fix\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\n//sysnb pipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sys\tutimes(path string, timeval *[2]Timeval) (err error) = SYS___UTIMES_A\n\nfunc Utimes(path string, tv []Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) = SYS___UTIMENSAT_A\n\nfunc validUtimensat() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___UTIMENSAT_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___UTIMENSAT_A<<4); err == nil {\n\t\t\treturn name == \"__utimensat_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n// Begin UtimesNano\n\n//go:nosplit\nfunc get_UtimesNanoAddr() *(func(path string, ts []Timespec) (err error))\n\nvar UtimesNano = enter_UtimesNano\n\nfunc enter_UtimesNano(path string, ts []Timespec) (err error) {\n\tfuncref := get_UtimesNanoAddr()\n\tif validUtimensat() {\n\t\t*funcref = utimesNanoImpl\n\t} else {\n\t\t*funcref = legacyUtimesNano\n\t}\n\treturn (*funcref)(path, ts)\n}\n\nfunc utimesNanoImpl(path string, ts []Timespec) (err error) {\n\tif ts == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc legacyUtimesNano(path string, ts []Timespec) (err error) {\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\t// Not as efficient as it could be because Timespec and\n\t// Timeval have different types in the different OSes\n\ttv := [2]Timeval{\n\t\tNsecToTimeval(TimespecToNsec(ts[0])),\n\t\tNsecToTimeval(TimespecToNsec(ts[1])),\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n// End UtimesNano\n\n// Begin UtimesNanoAt\n\n//go:nosplit\nfunc get_UtimesNanoAtAddr() *(func(dirfd int, path string, ts []Timespec, flags int) (err error))\n\nvar UtimesNanoAt = enter_UtimesNanoAt\n\nfunc enter_UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) (err error) {\n\tfuncref := get_UtimesNanoAtAddr()\n\tif validUtimensat() {\n\t\t*funcref = utimesNanoAtImpl\n\t} else {\n\t\t*funcref = legacyUtimesNanoAt\n\t}\n\treturn (*funcref)(dirfd, path, ts, flags)\n}\n\nfunc utimesNanoAtImpl(dirfd int, path string, ts []Timespec, flags int) (err error) {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc legacyUtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) (err error) {\n\tif path[0] != '/' {\n\t\tdirPath, err := ZosFdToPath(dirfd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpath = dirPath + \"/\" + path\n\t}\n\tif flags == AT_SYMLINK_NOFOLLOW {\n\t\tif len(ts) != 2 {\n\t\t\treturn EINVAL\n\t\t}\n\n\t\tif ts[0].Nsec >= 5e8 {\n\t\t\tts[0].Sec++\n\t\t}\n\t\tts[0].Nsec = 0\n\t\tif ts[1].Nsec >= 5e8 {\n\t\t\tts[1].Sec++\n\t\t}\n\t\tts[1].Nsec = 0\n\n\t\t// Not as efficient as it could be because Timespec and\n\t\t// Timeval have different types in the different OSes\n\t\ttv := []Timeval{\n\t\t\tNsecToTimeval(TimespecToNsec(ts[0])),\n\t\t\tNsecToTimeval(TimespecToNsec(ts[1])),\n\t\t}\n\t\treturn Lutimes(path, tv)\n\t}\n\treturn UtimesNano(path, ts)\n}\n\n// End UtimesNanoAt\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\t// TODO(neeilan) : Remove this 0 ( added to get sys/unix compiling on z/OS )\n\treturn anyToSockaddr(0, &rsa)\n}\n\nconst (\n\t// identifier constants\n\tnwmHeaderIdentifier    = 0xd5e6d4c8\n\tnwmFilterIdentifier    = 0xd5e6d4c6\n\tnwmTCPConnIdentifier   = 0xd5e6d4c3\n\tnwmRecHeaderIdentifier = 0xd5e6d4d9\n\tnwmIPStatsIdentifier   = 0xd5e6d4c9d7e2e340\n\tnwmIPGStatsIdentifier  = 0xd5e6d4c9d7c7e2e3\n\tnwmTCPStatsIdentifier  = 0xd5e6d4e3c3d7e2e3\n\tnwmUDPStatsIdentifier  = 0xd5e6d4e4c4d7e2e3\n\tnwmICMPGStatsEntry     = 0xd5e6d4c9c3d4d7c7\n\tnwmICMPTStatsEntry     = 0xd5e6d4c9c3d4d7e3\n\n\t// nwmHeader constants\n\tnwmVersion1   = 1\n\tnwmVersion2   = 2\n\tnwmCurrentVer = 2\n\n\tnwmTCPConnType     = 1\n\tnwmGlobalStatsType = 14\n\n\t// nwmFilter constants\n\tnwmFilterLclAddrMask = 0x20000000 // Local address\n\tnwmFilterSrcAddrMask = 0x20000000 // Source address\n\tnwmFilterLclPortMask = 0x10000000 // Local port\n\tnwmFilterSrcPortMask = 0x10000000 // Source port\n\n\t// nwmConnEntry constants\n\tnwmTCPStateClosed   = 1\n\tnwmTCPStateListen   = 2\n\tnwmTCPStateSynSent  = 3\n\tnwmTCPStateSynRcvd  = 4\n\tnwmTCPStateEstab    = 5\n\tnwmTCPStateFinWait1 = 6\n\tnwmTCPStateFinWait2 = 7\n\tnwmTCPStateClosWait = 8\n\tnwmTCPStateLastAck  = 9\n\tnwmTCPStateClosing  = 10\n\tnwmTCPStateTimeWait = 11\n\tnwmTCPStateDeletTCB = 12\n\n\t// Existing constants on linux\n\tBPF_TCP_CLOSE        = 1\n\tBPF_TCP_LISTEN       = 2\n\tBPF_TCP_SYN_SENT     = 3\n\tBPF_TCP_SYN_RECV     = 4\n\tBPF_TCP_ESTABLISHED  = 5\n\tBPF_TCP_FIN_WAIT1    = 6\n\tBPF_TCP_FIN_WAIT2    = 7\n\tBPF_TCP_CLOSE_WAIT   = 8\n\tBPF_TCP_LAST_ACK     = 9\n\tBPF_TCP_CLOSING      = 10\n\tBPF_TCP_TIME_WAIT    = 11\n\tBPF_TCP_NEW_SYN_RECV = -1\n\tBPF_TCP_MAX_STATES   = -2\n)\n\ntype nwmTriplet struct {\n\toffset uint32\n\tlength uint32\n\tnumber uint32\n}\n\ntype nwmQuadruplet struct {\n\toffset uint32\n\tlength uint32\n\tnumber uint32\n\tmatch  uint32\n}\n\ntype nwmHeader struct {\n\tident       uint32\n\tlength      uint32\n\tversion     uint16\n\tnwmType     uint16\n\tbytesNeeded uint32\n\toptions     uint32\n\t_           [16]byte\n\tinputDesc   nwmTriplet\n\toutputDesc  nwmQuadruplet\n}\n\ntype nwmFilter struct {\n\tident         uint32\n\tflags         uint32\n\tresourceName  [8]byte\n\tresourceId    uint32\n\tlistenerId    uint32\n\tlocal         [28]byte // union of sockaddr4 and sockaddr6\n\tremote        [28]byte // union of sockaddr4 and sockaddr6\n\t_             uint16\n\t_             uint16\n\tasid          uint16\n\t_             [2]byte\n\ttnLuName      [8]byte\n\ttnMonGrp      uint32\n\ttnAppl        [8]byte\n\tapplData      [40]byte\n\tnInterface    [16]byte\n\tdVipa         [16]byte\n\tdVipaPfx      uint16\n\tdVipaPort     uint16\n\tdVipaFamily   byte\n\t_             [3]byte\n\tdestXCF       [16]byte\n\tdestXCFPfx    uint16\n\tdestXCFFamily byte\n\t_             [1]byte\n\ttargIP        [16]byte\n\ttargIPPfx     uint16\n\ttargIPFamily  byte\n\t_             [1]byte\n\t_             [20]byte\n}\n\ntype nwmRecHeader struct {\n\tident  uint32\n\tlength uint32\n\tnumber byte\n\t_      [3]byte\n}\n\ntype nwmTCPStatsEntry struct {\n\tident             uint64\n\tcurrEstab         uint32\n\tactiveOpened      uint32\n\tpassiveOpened     uint32\n\tconnClosed        uint32\n\testabResets       uint32\n\tattemptFails      uint32\n\tpassiveDrops      uint32\n\ttimeWaitReused    uint32\n\tinSegs            uint64\n\tpredictAck        uint32\n\tpredictData       uint32\n\tinDupAck          uint32\n\tinBadSum          uint32\n\tinBadLen          uint32\n\tinShort           uint32\n\tinDiscOldTime     uint32\n\tinAllBeforeWin    uint32\n\tinSomeBeforeWin   uint32\n\tinAllAfterWin     uint32\n\tinSomeAfterWin    uint32\n\tinOutOfOrder      uint32\n\tinAfterClose      uint32\n\tinWinProbes       uint32\n\tinWinUpdates      uint32\n\toutWinUpdates     uint32\n\toutSegs           uint64\n\toutDelayAcks      uint32\n\toutRsts           uint32\n\tretransSegs       uint32\n\tretransTimeouts   uint32\n\tretransDrops      uint32\n\tpmtuRetrans       uint32\n\tpmtuErrors        uint32\n\toutWinProbes      uint32\n\tprobeDrops        uint32\n\tkeepAliveProbes   uint32\n\tkeepAliveDrops    uint32\n\tfinwait2Drops     uint32\n\tacceptCount       uint64\n\tinBulkQSegs       uint64\n\tinDiscards        uint64\n\tconnFloods        uint32\n\tconnStalls        uint32\n\tcfgEphemDef       uint16\n\tephemInUse        uint16\n\tephemHiWater      uint16\n\tflags             byte\n\t_                 [1]byte\n\tephemExhaust      uint32\n\tsmcRCurrEstabLnks uint32\n\tsmcRLnkActTimeOut uint32\n\tsmcRActLnkOpened  uint32\n\tsmcRPasLnkOpened  uint32\n\tsmcRLnksClosed    uint32\n\tsmcRCurrEstab     uint32\n\tsmcRActiveOpened  uint32\n\tsmcRPassiveOpened uint32\n\tsmcRConnClosed    uint32\n\tsmcRInSegs        uint64\n\tsmcROutSegs       uint64\n\tsmcRInRsts        uint32\n\tsmcROutRsts       uint32\n\tsmcDCurrEstabLnks uint32\n\tsmcDActLnkOpened  uint32\n\tsmcDPasLnkOpened  uint32\n\tsmcDLnksClosed    uint32\n\tsmcDCurrEstab     uint32\n\tsmcDActiveOpened  uint32\n\tsmcDPassiveOpened uint32\n\tsmcDConnClosed    uint32\n\tsmcDInSegs        uint64\n\tsmcDOutSegs       uint64\n\tsmcDInRsts        uint32\n\tsmcDOutRsts       uint32\n}\n\ntype nwmConnEntry struct {\n\tident             uint32\n\tlocal             [28]byte // union of sockaddr4 and sockaddr6\n\tremote            [28]byte // union of sockaddr4 and sockaddr6\n\tstartTime         [8]byte  // uint64, changed to prevent padding from being inserted\n\tlastActivity      [8]byte  // uint64\n\tbytesIn           [8]byte  // uint64\n\tbytesOut          [8]byte  // uint64\n\tinSegs            [8]byte  // uint64\n\toutSegs           [8]byte  // uint64\n\tstate             uint16\n\tactiveOpen        byte\n\tflag01            byte\n\toutBuffered       uint32\n\tinBuffered        uint32\n\tmaxSndWnd         uint32\n\treXmtCount        uint32\n\tcongestionWnd     uint32\n\tssThresh          uint32\n\troundTripTime     uint32\n\troundTripVar      uint32\n\tsendMSS           uint32\n\tsndWnd            uint32\n\trcvBufSize        uint32\n\tsndBufSize        uint32\n\toutOfOrderCount   uint32\n\tlcl0WindowCount   uint32\n\trmt0WindowCount   uint32\n\tdupacks           uint32\n\tflag02            byte\n\tsockOpt6Cont      byte\n\tasid              uint16\n\tresourceName      [8]byte\n\tresourceId        uint32\n\tsubtask           uint32\n\tsockOpt           byte\n\tsockOpt6          byte\n\tclusterConnFlag   byte\n\tproto             byte\n\ttargetAppl        [8]byte\n\tluName            [8]byte\n\tclientUserId      [8]byte\n\tlogMode           [8]byte\n\ttimeStamp         uint32\n\ttimeStampAge      uint32\n\tserverResourceId  uint32\n\tintfName          [16]byte\n\tttlsStatPol       byte\n\tttlsStatConn      byte\n\tttlsSSLProt       uint16\n\tttlsNegCiph       [2]byte\n\tttlsSecType       byte\n\tttlsFIPS140Mode   byte\n\tttlsUserID        [8]byte\n\tapplData          [40]byte\n\tinOldestTime      [8]byte // uint64\n\toutOldestTime     [8]byte // uint64\n\ttcpTrustedPartner byte\n\t_                 [3]byte\n\tbulkDataIntfName  [16]byte\n\tttlsNegCiph4      [4]byte\n\tsmcReason         uint32\n\tlclSMCLinkId      uint32\n\trmtSMCLinkId      uint32\n\tsmcStatus         byte\n\tsmcFlags          byte\n\t_                 [2]byte\n\trcvWnd            uint32\n\tlclSMCBufSz       uint32\n\trmtSMCBufSz       uint32\n\tttlsSessID        [32]byte\n\tttlsSessIDLen     int16\n\t_                 [1]byte\n\tsmcDStatus        byte\n\tsmcDReason        uint32\n}\n\nvar svcNameTable [][]byte = [][]byte{\n\t[]byte(\"\\xc5\\xe9\\xc2\\xd5\\xd4\\xc9\\xc6\\xf4\"), // svc_EZBNMIF4\n}\n\nconst (\n\tsvc_EZBNMIF4 = 0\n)\n\nfunc GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {\n\tjobname := []byte(\"\\x5c\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") // \"*\"\n\tresponseBuffer := [4096]byte{0}\n\tvar bufferAlet, reasonCode uint32 = 0, 0\n\tvar bufferLen, returnValue, returnCode int32 = 4096, 0, 0\n\n\tdsa := [18]uint64{0}\n\tvar argv [7]unsafe.Pointer\n\targv[0] = unsafe.Pointer(&jobname[0])\n\targv[1] = unsafe.Pointer(&responseBuffer[0])\n\targv[2] = unsafe.Pointer(&bufferAlet)\n\targv[3] = unsafe.Pointer(&bufferLen)\n\targv[4] = unsafe.Pointer(&returnValue)\n\targv[5] = unsafe.Pointer(&returnCode)\n\targv[6] = unsafe.Pointer(&reasonCode)\n\n\trequest := (*struct {\n\t\theader nwmHeader\n\t\tfilter nwmFilter\n\t})(unsafe.Pointer(&responseBuffer[0]))\n\n\tEZBNMIF4 := svcLoad(&svcNameTable[svc_EZBNMIF4][0])\n\tif EZBNMIF4 == nil {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// GetGlobalStats EZBNMIF4 call\n\trequest.header.ident = nwmHeaderIdentifier\n\trequest.header.length = uint32(unsafe.Sizeof(request.header))\n\trequest.header.version = nwmCurrentVer\n\trequest.header.nwmType = nwmGlobalStatsType\n\trequest.header.options = 0x80000000\n\n\tsvcCall(EZBNMIF4, &argv[0], &dsa[0])\n\n\t// outputDesc field is filled by EZBNMIF4 on success\n\tif returnCode != 0 || request.header.outputDesc.offset == 0 {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Check that EZBNMIF4 returned a nwmRecHeader\n\trecHeader := (*nwmRecHeader)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset]))\n\tif recHeader.ident != nwmRecHeaderIdentifier {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Parse nwmTriplets to get offsets of returned entries\n\tvar sections []*uint64\n\tvar sectionDesc *nwmTriplet = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[0]))\n\tfor i := uint32(0); i < uint32(recHeader.number); i++ {\n\t\toffset := request.header.outputDesc.offset + uint32(unsafe.Sizeof(*recHeader)) + i*uint32(unsafe.Sizeof(*sectionDesc))\n\t\tsectionDesc = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[offset]))\n\t\tfor j := uint32(0); j < sectionDesc.number; j++ {\n\t\t\toffset = request.header.outputDesc.offset + sectionDesc.offset + j*sectionDesc.length\n\t\t\tsections = append(sections, (*uint64)(unsafe.Pointer(&responseBuffer[offset])))\n\t\t}\n\t}\n\n\t// Find nwmTCPStatsEntry in returned entries\n\tvar tcpStats *nwmTCPStatsEntry = nil\n\tfor _, ptr := range sections {\n\t\tswitch *ptr {\n\t\tcase nwmTCPStatsIdentifier:\n\t\t\tif tcpStats != nil {\n\t\t\t\treturn nil, errnoErr(EINVAL)\n\t\t\t}\n\t\t\ttcpStats = (*nwmTCPStatsEntry)(unsafe.Pointer(ptr))\n\t\tcase nwmIPStatsIdentifier:\n\t\tcase nwmIPGStatsIdentifier:\n\t\tcase nwmUDPStatsIdentifier:\n\t\tcase nwmICMPGStatsEntry:\n\t\tcase nwmICMPTStatsEntry:\n\t\tdefault:\n\t\t\treturn nil, errnoErr(EINVAL)\n\t\t}\n\t}\n\tif tcpStats == nil {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// GetConnectionDetail EZBNMIF4 call\n\tresponseBuffer = [4096]byte{0}\n\tdsa = [18]uint64{0}\n\tbufferAlet, reasonCode = 0, 0\n\tbufferLen, returnValue, returnCode = 4096, 0, 0\n\tnameptr := (*uint32)(unsafe.Pointer(uintptr(0x21c))) // Get jobname of current process\n\tnameptr = (*uint32)(unsafe.Pointer(uintptr(*nameptr + 12)))\n\targv[0] = unsafe.Pointer(uintptr(*nameptr))\n\n\trequest.header.ident = nwmHeaderIdentifier\n\trequest.header.length = uint32(unsafe.Sizeof(request.header))\n\trequest.header.version = nwmCurrentVer\n\trequest.header.nwmType = nwmTCPConnType\n\trequest.header.options = 0x80000000\n\n\trequest.filter.ident = nwmFilterIdentifier\n\n\tvar localSockaddr RawSockaddrAny\n\tsocklen := _Socklen(SizeofSockaddrAny)\n\terr := getsockname(fd, &localSockaddr, &socklen)\n\tif err != nil {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\tif localSockaddr.Addr.Family == AF_INET {\n\t\tlocalSockaddr := (*RawSockaddrInet4)(unsafe.Pointer(&localSockaddr.Addr))\n\t\tlocalSockFilter := (*RawSockaddrInet4)(unsafe.Pointer(&request.filter.local[0]))\n\t\tlocalSockFilter.Family = AF_INET\n\t\tvar i int\n\t\tfor i = 0; i < 4; i++ {\n\t\t\tif localSockaddr.Addr[i] != 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif i != 4 {\n\t\t\trequest.filter.flags |= nwmFilterLclAddrMask\n\t\t\tfor i = 0; i < 4; i++ {\n\t\t\t\tlocalSockFilter.Addr[i] = localSockaddr.Addr[i]\n\t\t\t}\n\t\t}\n\t\tif localSockaddr.Port != 0 {\n\t\t\trequest.filter.flags |= nwmFilterLclPortMask\n\t\t\tlocalSockFilter.Port = localSockaddr.Port\n\t\t}\n\t} else if localSockaddr.Addr.Family == AF_INET6 {\n\t\tlocalSockaddr := (*RawSockaddrInet6)(unsafe.Pointer(&localSockaddr.Addr))\n\t\tlocalSockFilter := (*RawSockaddrInet6)(unsafe.Pointer(&request.filter.local[0]))\n\t\tlocalSockFilter.Family = AF_INET6\n\t\tvar i int\n\t\tfor i = 0; i < 16; i++ {\n\t\t\tif localSockaddr.Addr[i] != 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif i != 16 {\n\t\t\trequest.filter.flags |= nwmFilterLclAddrMask\n\t\t\tfor i = 0; i < 16; i++ {\n\t\t\t\tlocalSockFilter.Addr[i] = localSockaddr.Addr[i]\n\t\t\t}\n\t\t}\n\t\tif localSockaddr.Port != 0 {\n\t\t\trequest.filter.flags |= nwmFilterLclPortMask\n\t\t\tlocalSockFilter.Port = localSockaddr.Port\n\t\t}\n\t}\n\n\tsvcCall(EZBNMIF4, &argv[0], &dsa[0])\n\n\t// outputDesc field is filled by EZBNMIF4 on success\n\tif returnCode != 0 || request.header.outputDesc.offset == 0 {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Check that EZBNMIF4 returned a nwmConnEntry\n\tconn := (*nwmConnEntry)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset]))\n\tif conn.ident != nwmTCPConnIdentifier {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Copy data from the returned data structures into tcpInfo\n\t// Stats from nwmConnEntry are specific to that connection.\n\t// Stats from nwmTCPStatsEntry are global (to the interface?)\n\t// Fields may not be an exact match. Some fields have no equivalent.\n\tvar tcpinfo TCPInfo\n\ttcpinfo.State = uint8(conn.state)\n\ttcpinfo.Ca_state = 0 // dummy\n\ttcpinfo.Retransmits = uint8(tcpStats.retransSegs)\n\ttcpinfo.Probes = uint8(tcpStats.outWinProbes)\n\ttcpinfo.Backoff = 0 // dummy\n\ttcpinfo.Options = 0 // dummy\n\ttcpinfo.Rto = tcpStats.retransTimeouts\n\ttcpinfo.Ato = tcpStats.outDelayAcks\n\ttcpinfo.Snd_mss = conn.sendMSS\n\ttcpinfo.Rcv_mss = conn.sendMSS // dummy\n\ttcpinfo.Unacked = 0            // dummy\n\ttcpinfo.Sacked = 0             // dummy\n\ttcpinfo.Lost = 0               // dummy\n\ttcpinfo.Retrans = conn.reXmtCount\n\ttcpinfo.Fackets = 0 // dummy\n\ttcpinfo.Last_data_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.lastActivity[0])))\n\ttcpinfo.Last_ack_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.outOldestTime[0])))\n\ttcpinfo.Last_data_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0])))\n\ttcpinfo.Last_ack_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0])))\n\ttcpinfo.Pmtu = conn.sendMSS // dummy, NWMIfRouteMtu is a candidate\n\ttcpinfo.Rcv_ssthresh = conn.ssThresh\n\ttcpinfo.Rtt = conn.roundTripTime\n\ttcpinfo.Rttvar = conn.roundTripVar\n\ttcpinfo.Snd_ssthresh = conn.ssThresh // dummy\n\ttcpinfo.Snd_cwnd = conn.congestionWnd\n\ttcpinfo.Advmss = conn.sendMSS        // dummy\n\ttcpinfo.Reordering = 0               // dummy\n\ttcpinfo.Rcv_rtt = conn.roundTripTime // dummy\n\ttcpinfo.Rcv_space = conn.sendMSS     // dummy\n\ttcpinfo.Total_retrans = conn.reXmtCount\n\n\tsvcUnload(&svcNameTable[svc_EZBNMIF4][0], EZBNMIF4)\n\n\treturn &tcpinfo, nil\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tvar msg Msghdr\n\tvar rsa RawSockaddrAny\n\tmsg.Name = (*byte)(unsafe.Pointer(&rsa))\n\tmsg.Namelen = SizeofSockaddrAny\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*byte)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\t// source address is only specified if the socket is unconnected\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\t// TODO(neeilan): Remove 0 arg added to get this compiling on z/OS\n\t\tfrom, err = anyToSockaddr(0, &rsa)\n\t}\n\treturn\n}\n\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tvar err error\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = int32(salen)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*byte)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && len(p) == 0 {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\nfunc Opendir(name string) (uintptr, error) {\n\tp, err := BytePtrFromString(name)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\terr = nil\n\truntime.EnterSyscall()\n\tdir, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___OPENDIR_A<<4, uintptr(unsafe.Pointer(p)))\n\truntime.ExitSyscall()\n\truntime.KeepAlive(unsafe.Pointer(p))\n\tif dir == 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn dir, err\n}\n\n// clearsyscall.Errno resets the errno value to 0.\nfunc clearErrno()\n\nfunc Closedir(dir uintptr) error {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSEDIR<<4, dir)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\treturn errnoErr2(e1, e2)\n\t}\n\treturn nil\n}\n\nfunc Seekdir(dir uintptr, pos int) {\n\truntime.EnterSyscall()\n\tCallLeFuncWithErr(GetZosLibVec()+SYS_SEEKDIR<<4, dir, uintptr(pos))\n\truntime.ExitSyscall()\n}\n\nfunc Telldir(dir uintptr) (int, error) {\n\tp, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TELLDIR<<4, dir)\n\tpos := int(p)\n\tif int64(p) == -1 {\n\t\treturn pos, errnoErr2(e1, e2)\n\t}\n\treturn pos, nil\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t// struct flock is packed on z/OS. We can't emulate that in Go so\n\t// instead we pack it here.\n\tvar flock [24]byte\n\t*(*int16)(unsafe.Pointer(&flock[0])) = lk.Type\n\t*(*int16)(unsafe.Pointer(&flock[2])) = lk.Whence\n\t*(*int64)(unsafe.Pointer(&flock[4])) = lk.Start\n\t*(*int64)(unsafe.Pointer(&flock[12])) = lk.Len\n\t*(*int32)(unsafe.Pointer(&flock[20])) = lk.Pid\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, fd, uintptr(cmd), uintptr(unsafe.Pointer(&flock)))\n\truntime.ExitSyscall()\n\tlk.Type = *(*int16)(unsafe.Pointer(&flock[0]))\n\tlk.Whence = *(*int16)(unsafe.Pointer(&flock[2]))\n\tlk.Start = *(*int64)(unsafe.Pointer(&flock[4]))\n\tlk.Len = *(*int64)(unsafe.Pointer(&flock[12]))\n\tlk.Pid = *(*int32)(unsafe.Pointer(&flock[20]))\n\tif r0 == 0 {\n\t\treturn nil\n\t}\n\treturn errnoErr2(e1, e2)\n}\n\nfunc impl_Flock(fd int, how int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FLOCK<<4, uintptr(fd), uintptr(how))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FlockAddr() *(func(fd int, how int) (err error))\n\nvar Flock = enter_Flock\n\nfunc validFlock(fp uintptr) bool {\n\tif funcptrtest(GetZosLibVec()+SYS_FLOCK<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS_FLOCK<<4); err == nil {\n\t\t\treturn name == \"flock\"\n\t\t}\n\t}\n\treturn false\n}\n\nfunc enter_Flock(fd int, how int) (err error) {\n\tfuncref := get_FlockAddr()\n\tif validFlock(GetZosLibVec() + SYS_FLOCK<<4) {\n\t\t*funcref = impl_Flock\n\t} else {\n\t\t*funcref = legacyFlock\n\t}\n\treturn (*funcref)(fd, how)\n}\n\nfunc legacyFlock(fd int, how int) error {\n\n\tvar flock_type int16\n\tvar fcntl_cmd int\n\n\tswitch how {\n\tcase LOCK_SH | LOCK_NB:\n\t\tflock_type = F_RDLCK\n\t\tfcntl_cmd = F_SETLK\n\tcase LOCK_EX | LOCK_NB:\n\t\tflock_type = F_WRLCK\n\t\tfcntl_cmd = F_SETLK\n\tcase LOCK_EX:\n\t\tflock_type = F_WRLCK\n\t\tfcntl_cmd = F_SETLKW\n\tcase LOCK_UN:\n\t\tflock_type = F_UNLCK\n\t\tfcntl_cmd = F_SETLKW\n\tdefault:\n\t}\n\n\tflock := Flock_t{\n\t\tType:   int16(flock_type),\n\t\tWhence: int16(0),\n\t\tStart:  int64(0),\n\t\tLen:    int64(0),\n\t\tPid:    int32(Getppid()),\n\t}\n\n\terr := FcntlFlock(uintptr(fd), fcntl_cmd, &flock)\n\treturn err\n}\n\nfunc Mlock(b []byte) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Mlock2(b []byte, flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Mlockall(flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Munlock(b []byte) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_SWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Munlockall() (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_SWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc ClockGettime(clockid int32, ts *Timespec) error {\n\n\tvar ticks_per_sec uint32 = 100 //TODO(kenan): value is currently hardcoded; need sysconf() call otherwise\n\tvar nsec_per_sec int64 = 1000000000\n\n\tif ts == nil {\n\t\treturn EFAULT\n\t}\n\tif clockid == CLOCK_REALTIME || clockid == CLOCK_MONOTONIC {\n\t\tvar nanotime int64 = runtime.Nanotime1()\n\t\tts.Sec = nanotime / nsec_per_sec\n\t\tts.Nsec = nanotime % nsec_per_sec\n\t} else if clockid == CLOCK_PROCESS_CPUTIME_ID || clockid == CLOCK_THREAD_CPUTIME_ID {\n\t\tvar tm Tms\n\t\t_, err := Times(&tm)\n\t\tif err != nil {\n\t\t\treturn EFAULT\n\t\t}\n\t\tts.Sec = int64(tm.Utime / ticks_per_sec)\n\t\tts.Nsec = int64(tm.Utime) * nsec_per_sec / int64(ticks_per_sec)\n\t} else {\n\t\treturn EINVAL\n\t}\n\treturn nil\n}\n\n// Chtag\n\n//go:nosplit\nfunc get_ChtagAddr() *(func(path string, ccsid uint64, textbit uint64) error)\n\nvar Chtag = enter_Chtag\n\nfunc enter_Chtag(path string, ccsid uint64, textbit uint64) error {\n\tfuncref := get_ChtagAddr()\n\tif validSetxattr() {\n\t\t*funcref = impl_Chtag\n\t} else {\n\t\t*funcref = legacy_Chtag\n\t}\n\treturn (*funcref)(path, ccsid, textbit)\n}\n\nfunc legacy_Chtag(path string, ccsid uint64, textbit uint64) error {\n\ttag := ccsid<<16 | textbit<<15\n\tvar tag_buff [8]byte\n\tDecodeData(tag_buff[:], 8, tag)\n\treturn Setxattr(path, \"filetag\", tag_buff[:], XATTR_REPLACE)\n}\n\nfunc impl_Chtag(path string, ccsid uint64, textbit uint64) error {\n\ttag := ccsid<<16 | textbit<<15\n\tvar tag_buff [4]byte\n\tDecodeData(tag_buff[:], 4, tag)\n\treturn Setxattr(path, \"system.filetag\", tag_buff[:], XATTR_REPLACE)\n}\n\n// End of Chtag\n\n// Nanosleep\n\n//go:nosplit\nfunc get_NanosleepAddr() *(func(time *Timespec, leftover *Timespec) error)\n\nvar Nanosleep = enter_Nanosleep\n\nfunc enter_Nanosleep(time *Timespec, leftover *Timespec) error {\n\tfuncref := get_NanosleepAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_NANOSLEEP<<4, \"\") == 0 {\n\t\t*funcref = impl_Nanosleep\n\t} else {\n\t\t*funcref = legacyNanosleep\n\t}\n\treturn (*funcref)(time, leftover)\n}\n\nfunc impl_Nanosleep(time *Timespec, leftover *Timespec) error {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_NANOSLEEP<<4, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\treturn errnoErr2(e1, e2)\n\t}\n\treturn nil\n}\n\nfunc legacyNanosleep(time *Timespec, leftover *Timespec) error {\n\tt0 := runtime.Nanotime1()\n\tvar secrem uint32\n\tvar nsecrem uint32\n\ttotal := time.Sec*1000000000 + time.Nsec\n\telapsed := runtime.Nanotime1() - t0\n\tvar rv int32\n\tvar rc int32\n\tvar err error\n\t// repeatedly sleep for 1 second until less than 1 second left\n\tfor total-elapsed > 1000000000 {\n\t\trv, rc, _ = BpxCondTimedWait(uint32(1), uint32(0), uint32(CW_CONDVAR), &secrem, &nsecrem)\n\t\tif rv != 0 && rc != 112 { // 112 is EAGAIN\n\t\t\tif leftover != nil && rc == 120 { // 120 is EINTR\n\t\t\t\tleftover.Sec = int64(secrem)\n\t\t\t\tleftover.Nsec = int64(nsecrem)\n\t\t\t}\n\t\t\terr = Errno(rc)\n\t\t\treturn err\n\t\t}\n\t\telapsed = runtime.Nanotime1() - t0\n\t}\n\t// sleep the remainder\n\tif total > elapsed {\n\t\trv, rc, _ = BpxCondTimedWait(uint32(0), uint32(total-elapsed), uint32(CW_CONDVAR), &secrem, &nsecrem)\n\t}\n\tif leftover != nil && rc == 120 {\n\t\tleftover.Sec = int64(secrem)\n\t\tleftover.Nsec = int64(nsecrem)\n\t}\n\tif rv != 0 && rc != 112 {\n\t\terr = Errno(rc)\n\t}\n\treturn err\n}\n\n// End of Nanosleep\n\nvar (\n\tStdin  = 0\n\tStdout = 1\n\tStderr = 2\n)\n\n// Do the interface allocations only once for common\n// Errno values.\nvar (\n\terrEAGAIN error = syscall.EAGAIN\n\terrEINVAL error = syscall.EINVAL\n\terrENOENT error = syscall.ENOENT\n)\n\nvar ZosTraceLevel int\nvar ZosTracefile *os.File\n\nvar (\n\tsignalNameMapOnce sync.Once\n\tsignalNameMap     map[string]syscall.Signal\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase EAGAIN:\n\t\treturn errEAGAIN\n\tcase EINVAL:\n\t\treturn errEINVAL\n\tcase ENOENT:\n\t\treturn errENOENT\n\t}\n\treturn e\n}\n\nvar reg *regexp.Regexp\n\n// enhanced with zos specific errno2\nfunc errnoErr2(e Errno, e2 uintptr) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase EAGAIN:\n\t\treturn errEAGAIN\n\t\t/*\n\t\t\tAllow the retrieval of errno2 for EINVAL and ENOENT on zos\n\t\t\t\tcase EINVAL:\n\t\t\t\t\treturn errEINVAL\n\t\t\t\tcase ENOENT:\n\t\t\t\t\treturn errENOENT\n\t\t*/\n\t}\n\tif ZosTraceLevel > 0 {\n\t\tvar name string\n\t\tif reg == nil {\n\t\t\treg = regexp.MustCompile(\"(^unix\\\\.[^/]+$|.*\\\\/unix\\\\.[^/]+$)\")\n\t\t}\n\t\ti := 1\n\t\tpc, file, line, ok := runtime.Caller(i)\n\t\tif ok {\n\t\t\tname = runtime.FuncForPC(pc).Name()\n\t\t}\n\t\tfor ok && reg.MatchString(runtime.FuncForPC(pc).Name()) {\n\t\t\ti += 1\n\t\t\tpc, file, line, ok = runtime.Caller(i)\n\t\t}\n\t\tif ok {\n\t\t\tif ZosTracefile == nil {\n\t\t\t\tZosConsolePrintf(\"From %s:%d\\n\", file, line)\n\t\t\t\tZosConsolePrintf(\"%s: %s (errno2=0x%x)\\n\", name, e.Error(), e2)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(ZosTracefile, \"From %s:%d\\n\", file, line)\n\t\t\t\tfmt.Fprintf(ZosTracefile, \"%s: %s (errno2=0x%x)\\n\", name, e.Error(), e2)\n\t\t\t}\n\t\t} else {\n\t\t\tif ZosTracefile == nil {\n\t\t\t\tZosConsolePrintf(\"%s (errno2=0x%x)\\n\", e.Error(), e2)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(ZosTracefile, \"%s (errno2=0x%x)\\n\", e.Error(), e2)\n\t\t\t}\n\t\t}\n\t}\n\treturn e\n}\n\n// ErrnoName returns the error name for error number e.\nfunc ErrnoName(e Errno) string {\n\ti := sort.Search(len(errorList), func(i int) bool {\n\t\treturn errorList[i].num >= e\n\t})\n\tif i < len(errorList) && errorList[i].num == e {\n\t\treturn errorList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalName returns the signal name for signal number s.\nfunc SignalName(s syscall.Signal) string {\n\ti := sort.Search(len(signalList), func(i int) bool {\n\t\treturn signalList[i].num >= s\n\t})\n\tif i < len(signalList) && signalList[i].num == s {\n\t\treturn signalList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalNum returns the syscall.Signal for signal named s,\n// or 0 if a signal with such name is not found.\n// The signal name should start with \"SIG\".\nfunc SignalNum(s string) syscall.Signal {\n\tsignalNameMapOnce.Do(func() {\n\t\tsignalNameMap = make(map[string]syscall.Signal, len(signalList))\n\t\tfor _, signal := range signalList {\n\t\t\tsignalNameMap[signal.name] = signal.num\n\t\t}\n\t})\n\treturn signalNameMap[s]\n}\n\n// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.\nfunc clen(n []byte) int {\n\ti := bytes.IndexByte(n, 0)\n\tif i == -1 {\n\t\ti = len(n)\n\t}\n\treturn i\n}\n\n// Mmap manager, for use by operating system-specific implementations.\n\ntype mmapper struct {\n\tsync.Mutex\n\tactive map[*byte][]byte // active mappings; key is last byte in mapping\n\tmmap   func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error)\n\tmunmap func(addr uintptr, length uintptr) error\n}\n\nfunc (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\tif length <= 0 {\n\t\treturn nil, EINVAL\n\t}\n\n\t// Set __MAP_64 by default\n\tflags |= __MAP_64\n\n\t// Map the requested memory.\n\taddr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Slice memory layout\n\tvar sl = struct {\n\t\taddr uintptr\n\t\tlen  int\n\t\tcap  int\n\t}{addr, length, length}\n\n\t// Use unsafe to turn sl into a []byte.\n\tb := *(*[]byte)(unsafe.Pointer(&sl))\n\n\t// Register mapping in m and return it.\n\tp := &b[cap(b)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tm.active[p] = b\n\treturn b, nil\n}\n\nfunc (m *mmapper) Munmap(data []byte) (err error) {\n\tif len(data) == 0 || len(data) != cap(data) {\n\t\treturn EINVAL\n\t}\n\n\t// Find the base of the mapping.\n\tp := &data[cap(data)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tb := m.active[p]\n\tif b == nil || &b[0] != &data[0] {\n\t\treturn EINVAL\n\t}\n\n\t// Unmap the memory and update m.\n\tif errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil {\n\t\treturn errno\n\t}\n\tdelete(m.active, p)\n\treturn nil\n}\n\nfunc Read(fd int, p []byte) (n int, err error) {\n\tn, err = read(fd, p)\n\tif raceenabled {\n\t\tif n > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), n)\n\t\t}\n\t\tif err == nil {\n\t\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t\t}\n\t}\n\treturn\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = write(fd, p)\n\tif raceenabled && n > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), n)\n\t}\n\treturn\n}\n\n// For testing: clients can set this flag to force\n// creation of IPv6 sockets to return EAFNOSUPPORT.\nvar SocketDisableIPv6 bool\n\n// Sockaddr represents a socket address.\ntype Sockaddr interface {\n\tsockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs\n}\n\n// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.\ntype SockaddrInet4 struct {\n\tPort int\n\tAddr [4]byte\n\traw  RawSockaddrInet4\n}\n\n// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.\ntype SockaddrInet6 struct {\n\tPort   int\n\tZoneId uint32\n\tAddr   [16]byte\n\traw    RawSockaddrInet6\n}\n\n// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.\ntype SockaddrUnix struct {\n\tName string\n\traw  RawSockaddrUnix\n}\n\nfunc Bind(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn bind(fd, ptr, n)\n}\n\nfunc Connect(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn connect(fd, ptr, n)\n}\n\nfunc Getpeername(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getpeername(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptByte(fd, level, opt int) (value byte, err error) {\n\tvar n byte\n\tvallen := _Socklen(1)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc GetsockoptInt(fd, level, opt int) (value int, err error) {\n\tvar n int32\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn int(n), err\n}\n\nfunc GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\treturn value, err\n}\n\nfunc GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {\n\tvar value IPMreq\n\tvallen := _Socklen(SizeofIPMreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {\n\tvar value IPv6Mreq\n\tvallen := _Socklen(SizeofIPv6Mreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {\n\tvar value IPv6MTUInfo\n\tvallen := _Socklen(SizeofIPv6MTUInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {\n\tvar value ICMPv6Filter\n\tvallen := _Socklen(SizeofICMPv6Filter)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptLinger(fd, level, opt int) (*Linger, error) {\n\tvar linger Linger\n\tvallen := _Socklen(SizeofLinger)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)\n\treturn &linger, err\n}\n\nfunc GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {\n\tvar tv Timeval\n\tvallen := _Socklen(unsafe.Sizeof(tv))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)\n\treturn &tv, err\n}\n\nfunc GetsockoptUint64(fd, level, opt int) (value uint64, err error) {\n\tvar n uint64\n\tvallen := _Socklen(8)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\nfunc Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {\n\tptr, n, err := to.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn sendto(fd, p, flags, ptr, n)\n}\n\nfunc SetsockoptByte(fd, level, opt int, value byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 1)\n}\n\nfunc SetsockoptInt(fd, level, opt int, value int) (err error) {\n\tvar n = int32(value)\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&n), 4)\n}\n\nfunc SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4)\n}\n\nfunc SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq)\n}\n\nfunc SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq)\n}\n\nfunc SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter)\n}\n\nfunc SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger)\n}\n\nfunc SetsockoptString(fd, level, opt int, s string) (err error) {\n\tvar p unsafe.Pointer\n\tif len(s) > 0 {\n\t\tp = unsafe.Pointer(&[]byte(s)[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(s)))\n}\n\nfunc SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))\n}\n\nfunc SetsockoptUint64(fd, level, opt int, value uint64) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)\n}\n\nfunc Socket(domain, typ, proto int) (fd int, err error) {\n\tif domain == AF_INET6 && SocketDisableIPv6 {\n\t\treturn -1, EAFNOSUPPORT\n\t}\n\tfd, err = socket(domain, typ, proto)\n\treturn\n}\n\nfunc Socketpair(domain, typ, proto int) (fd [2]int, err error) {\n\tvar fdx [2]int32\n\terr = socketpair(domain, typ, proto, &fdx)\n\tif err == nil {\n\t\tfd[0] = int(fdx[0])\n\t\tfd[1] = int(fdx[1])\n\t}\n\treturn\n}\n\nvar ioSync int64\n\nfunc CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\tflag, err := fcntl(fd, F_GETFL, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif nonblocking {\n\t\tflag |= O_NONBLOCK\n\t} else {\n\t\tflag &= ^O_NONBLOCK\n\t}\n\t_, err = fcntl(fd, F_SETFL, flag)\n\treturn err\n}\n\n// Exec calls execve(2), which replaces the calling executable in the process\n// tree. argv0 should be the full path to an executable (\"/bin/ls\") and the\n// executable name should also be the first argument in argv ([\"ls\", \"-l\"]).\n// envv are the environment variables that should be passed to the new\n// process ([\"USER=go\", \"PWD=/tmp\"]).\nfunc Exec(argv0 string, argv []string, envv []string) error {\n\treturn syscall.Exec(argv0, argv, envv)\n}\n\nfunc Getag(path string) (ccsid uint16, flag uint16, err error) {\n\tvar val [8]byte\n\tsz, err := Getxattr(path, \"ccsid\", val[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tccsid = uint16(EncodeData(val[0:sz]))\n\tsz, err = Getxattr(path, \"flags\", val[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tflag = uint16(EncodeData(val[0:sz]) >> 15)\n\treturn\n}\n\n// Mount begin\nfunc impl_Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p3 *byte\n\t_p3, err = BytePtrFromString(data)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MOUNT1_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(_p3)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MountAddr() *(func(source string, target string, fstype string, flags uintptr, data string) (err error))\n\nvar Mount = enter_Mount\n\nfunc enter_Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\tfuncref := get_MountAddr()\n\tif validMount() {\n\t\t*funcref = impl_Mount\n\t} else {\n\t\t*funcref = legacyMount\n\t}\n\treturn (*funcref)(source, target, fstype, flags, data)\n}\n\nfunc legacyMount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\tif needspace := 8 - len(fstype); needspace <= 0 {\n\t\tfstype = fstype[0:8]\n\t} else {\n\t\tfstype += \"        \"[0:needspace]\n\t}\n\treturn mount_LE(target, source, fstype, uint32(flags), int32(len(data)), data)\n}\n\nfunc validMount() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___MOUNT1_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___MOUNT1_A<<4); err == nil {\n\t\t\treturn name == \"__mount1_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n// Mount end\n\n// Unmount begin\nfunc impl_Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UMOUNT2_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_UnmountAddr() *(func(target string, flags int) (err error))\n\nvar Unmount = enter_Unmount\n\nfunc enter_Unmount(target string, flags int) (err error) {\n\tfuncref := get_UnmountAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___UMOUNT2_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Unmount\n\t} else {\n\t\t*funcref = legacyUnmount\n\t}\n\treturn (*funcref)(target, flags)\n}\n\nfunc legacyUnmount(name string, mtm int) (err error) {\n\t// mountpoint is always a full path and starts with a '/'\n\t// check if input string is not a mountpoint but a filesystem name\n\tif name[0] != '/' {\n\t\treturn unmount_LE(name, mtm)\n\t}\n\t// treat name as mountpoint\n\tb2s := func(arr []byte) string {\n\t\tvar str string\n\t\tfor i := 0; i < len(arr); i++ {\n\t\t\tif arr[i] == 0 {\n\t\t\t\tstr = string(arr[:i])\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn str\n\t}\n\tvar buffer struct {\n\t\theader W_Mnth\n\t\tfsinfo [64]W_Mntent\n\t}\n\tfs_count, err := W_Getmntent_A((*byte)(unsafe.Pointer(&buffer)), int(unsafe.Sizeof(buffer)))\n\tif err == nil {\n\t\terr = EINVAL\n\t\tfor i := 0; i < fs_count; i++ {\n\t\t\tif b2s(buffer.fsinfo[i].Mountpoint[:]) == name {\n\t\t\t\terr = unmount_LE(b2s(buffer.fsinfo[i].Fsname[:]), mtm)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t} else if fs_count == 0 {\n\t\terr = EINVAL\n\t}\n\treturn err\n}\n\n// Unmount end\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\nfunc direntLeToDirentUnix(dirent *direntLE, dir uintptr, path string) (Dirent, error) {\n\tvar d Dirent\n\n\td.Ino = uint64(dirent.Ino)\n\toffset, err := Telldir(dir)\n\tif err != nil {\n\t\treturn d, err\n\t}\n\n\td.Off = int64(offset)\n\ts := string(bytes.Split(dirent.Name[:], []byte{0})[0])\n\tcopy(d.Name[:], s)\n\n\td.Reclen = uint16(24 + len(d.NameString()))\n\tvar st Stat_t\n\tpath = path + \"/\" + s\n\terr = Lstat(path, &st)\n\tif err != nil {\n\t\treturn d, err\n\t}\n\n\td.Type = uint8(st.Mode >> 24)\n\treturn d, err\n}\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\t// Simulation of Getdirentries port from the Darwin implementation.\n\t// COMMENTS FROM DARWIN:\n\t// It's not the full required semantics, but should handle the case\n\t// of calling Getdirentries or ReadDirent repeatedly.\n\t// It won't handle assigning the results of lseek to *basep, or handle\n\t// the directory being edited underfoot.\n\n\tskip, err := Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Get path from fd to avoid unavailable call (fdopendir)\n\tpath, err := ZosFdToPath(fd)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\td, err := Opendir(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer Closedir(d)\n\n\tvar cnt int64\n\tfor {\n\t\tvar entryLE direntLE\n\t\tvar entrypLE *direntLE\n\t\te := Readdir_r(d, &entryLE, &entrypLE)\n\t\tif e != nil {\n\t\t\treturn n, e\n\t\t}\n\t\tif entrypLE == nil {\n\t\t\tbreak\n\t\t}\n\t\tif skip > 0 {\n\t\t\tskip--\n\t\t\tcnt++\n\t\t\tcontinue\n\t\t}\n\n\t\t// Dirent on zos has a different structure\n\t\tentry, e := direntLeToDirentUnix(&entryLE, d, path)\n\t\tif e != nil {\n\t\t\treturn n, e\n\t\t}\n\n\t\treclen := int(entry.Reclen)\n\t\tif reclen > len(buf) {\n\t\t\t// Not enough room. Return for now.\n\t\t\t// The counter will let us know where we should start up again.\n\t\t\t// Note: this strategy for suspending in the middle and\n\t\t\t// restarting is O(n^2) in the length of the directory. Oh well.\n\t\t\tbreak\n\t\t}\n\n\t\t// Copy entry into return buffer.\n\t\ts := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)\n\t\tcopy(buf, s)\n\n\t\tbuf = buf[reclen:]\n\t\tn += reclen\n\t\tcnt++\n\t}\n\t// Set the seek offset of the input fd to record\n\t// how many files we've already returned.\n\t_, err = Seek(fd, cnt, 0 /* SEEK_SET */)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\treturn n, nil\n}\n\nfunc Err2ad() (eadd *int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS___ERR2AD<<4)\n\teadd = (*int)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc ZosConsolePrintf(format string, v ...interface{}) (int, error) {\n\ttype __cmsg struct {\n\t\t_            uint16\n\t\t_            [2]uint8\n\t\t__msg_length uint32\n\t\t__msg        uintptr\n\t\t_            [4]uint8\n\t}\n\tmsg := fmt.Sprintf(format, v...)\n\tstrptr := unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&msg)).Data)\n\tlen := (*reflect.StringHeader)(unsafe.Pointer(&msg)).Len\n\tcmsg := __cmsg{__msg_length: uint32(len), __msg: uintptr(strptr)}\n\tcmd := uint32(0)\n\truntime.EnterSyscall()\n\trc, err2, err1 := CallLeFuncWithErr(GetZosLibVec()+SYS_____CONSOLE_A<<4, uintptr(unsafe.Pointer(&cmsg)), 0, uintptr(unsafe.Pointer(&cmd)))\n\truntime.ExitSyscall()\n\tif rc != 0 {\n\t\treturn 0, fmt.Errorf(\"%s (errno2=0x%x)\\n\", err1.Error(), err2)\n\t}\n\treturn 0, nil\n}\nfunc ZosStringToEbcdicBytes(str string, nullterm bool) (ebcdicBytes []byte) {\n\tif nullterm {\n\t\tebcdicBytes = []byte(str + \"\\x00\")\n\t} else {\n\t\tebcdicBytes = []byte(str)\n\t}\n\tA2e(ebcdicBytes)\n\treturn\n}\nfunc ZosEbcdicBytesToString(b []byte, trimRight bool) (str string) {\n\tres := make([]byte, len(b))\n\tcopy(res, b)\n\tE2a(res)\n\tif trimRight {\n\t\tstr = string(bytes.TrimRight(res, \" \\x00\"))\n\t} else {\n\t\tstr = string(res)\n\t}\n\treturn\n}\n\nfunc fdToPath(dirfd int) (path string, err error) {\n\tvar buffer [1024]byte\n\t// w_ctrl()\n\tret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_W_IOCTL<<4,\n\t\t[]uintptr{uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0]))})\n\tif ret == 0 {\n\t\tzb := bytes.IndexByte(buffer[:], 0)\n\t\tif zb == -1 {\n\t\t\tzb = len(buffer)\n\t\t}\n\t\t// __e2a_l()\n\t\truntime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4,\n\t\t\t[]uintptr{uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb)})\n\t\treturn string(buffer[:zb]), nil\n\t}\n\t// __errno()\n\terrno := int(*(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4,\n\t\t[]uintptr{}))))\n\t// __errno2()\n\terrno2 := int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO2<<4,\n\t\t[]uintptr{}))\n\t// strerror_r()\n\tret = runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_STRERROR_R<<4,\n\t\t[]uintptr{uintptr(errno), uintptr(unsafe.Pointer(&buffer[0])), 1024})\n\tif ret == 0 {\n\t\tzb := bytes.IndexByte(buffer[:], 0)\n\t\tif zb == -1 {\n\t\t\tzb = len(buffer)\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"%s (errno2=0x%x)\", buffer[:zb], errno2)\n\t} else {\n\t\treturn \"\", fmt.Errorf(\"fdToPath errno %d (errno2=0x%x)\", errno, errno2)\n\t}\n}\n\nfunc impl_Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKFIFOAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MkfifoatAddr() *(func(dirfd int, path string, mode uint32) (err error))\n\nvar Mkfifoat = enter_Mkfifoat\n\nfunc enter_Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tfuncref := get_MkfifoatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___MKFIFOAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Mkfifoat\n\t} else {\n\t\t*funcref = legacy_Mkfifoat\n\t}\n\treturn (*funcref)(dirfd, path, mode)\n}\n\nfunc legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tdirname, err := ZosFdToPath(dirfd)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn Mkfifo(dirname+\"/\"+path, mode)\n}\n\n//sys\tPosix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT\n//sys\tGrantpt(fildes int) (rc int, err error) = SYS_GRANTPT\n//sys\tUnlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT\n\nfunc fcntlAsIs(fd uintptr, cmd int, arg uintptr) (val int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), arg)\n\truntime.ExitSyscall()\n\tval = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Fcntl(fd uintptr, cmd int, op interface{}) (ret int, err error) {\n\tswitch op.(type) {\n\tcase *Flock_t:\n\t\terr = FcntlFlock(fd, cmd, op.(*Flock_t))\n\t\tif err != nil {\n\t\t\tret = -1\n\t\t}\n\t\treturn\n\tcase int:\n\t\treturn FcntlInt(fd, cmd, op.(int))\n\tcase *F_cnvrt:\n\t\treturn fcntlAsIs(fd, cmd, uintptr(unsafe.Pointer(op.(*F_cnvrt))))\n\tcase unsafe.Pointer:\n\t\treturn fcntlAsIs(fd, cmd, uintptr(op.(unsafe.Pointer)))\n\tdefault:\n\t\treturn -1, EINVAL\n\t}\n\treturn\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\t// TODO: use LE call instead if the call is implemented\n\toriginalOffset, err := Seek(infd, 0, SEEK_CUR)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\t//start reading data from in_fd\n\tif offset != nil {\n\t\t_, err := Seek(infd, *offset, SEEK_SET)\n\t\tif err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t}\n\n\tbuf := make([]byte, count)\n\treadBuf := make([]byte, 0)\n\tvar n int = 0\n\tfor i := 0; i < count; i += n {\n\t\tn, err := Read(infd, buf)\n\t\tif n == 0 {\n\t\t\tif err != nil {\n\t\t\t\treturn -1, err\n\t\t\t} else { // EOF\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treadBuf = append(readBuf, buf...)\n\t\tbuf = buf[0:0]\n\t}\n\n\tn2, err := Write(outfd, readBuf)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\t//When sendfile() returns, this variable will be set to the\n\t// offset of the byte following the last byte that was read.\n\tif offset != nil {\n\t\t*offset = *offset + int64(n)\n\t\t// If offset is not NULL, then sendfile() does not modify the file\n\t\t// offset of in_fd\n\t\t_, err := Seek(infd, originalOffset, SEEK_SET)\n\t\tif err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t}\n\treturn n2, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sysvshm_linux.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux\n\npackage unix\n\nimport \"runtime\"\n\n// SysvShmCtl performs control operations on the shared memory segment\n// specified by id.\nfunc SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {\n\tif runtime.GOARCH == \"arm\" ||\n\t\truntime.GOARCH == \"mips64\" || runtime.GOARCH == \"mips64le\" {\n\t\tcmd |= ipc_64\n\t}\n\n\treturn shmctl(id, cmd, desc)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sysvshm_unix.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin && !ios) || linux || zos\n\npackage unix\n\nimport \"unsafe\"\n\n// SysvShmAttach attaches the Sysv shared memory segment associated with the\n// shared memory identifier id.\nfunc SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) {\n\taddr, errno := shmat(id, addr, flag)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Retrieve the size of the shared memory to enable slice creation\n\tvar info SysvShmDesc\n\n\t_, err := SysvShmCtl(id, IPC_STAT, &info)\n\tif err != nil {\n\t\t// release the shared memory if we can't find the size\n\n\t\t// ignoring error from shmdt as there's nothing sensible to return here\n\t\tshmdt(addr)\n\t\treturn nil, err\n\t}\n\n\t// Use unsafe to convert addr into a []byte.\n\tb := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz))\n\treturn b, nil\n}\n\n// SysvShmDetach unmaps the shared memory slice returned from SysvShmAttach.\n//\n// It is not safe to use the slice after calling this function.\nfunc SysvShmDetach(data []byte) error {\n\tif len(data) == 0 {\n\t\treturn EINVAL\n\t}\n\n\treturn shmdt(uintptr(unsafe.Pointer(&data[0])))\n}\n\n// SysvShmGet returns the Sysv shared memory identifier associated with key.\n// If the IPC_CREAT flag is specified a new segment is created.\nfunc SysvShmGet(key, size, flag int) (id int, err error) {\n\treturn shmget(key, size, flag)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sysvshm_unix_other.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin && !ios) || zos\n\npackage unix\n\n// SysvShmCtl performs control operations on the shared memory segment\n// specified by id.\nfunc SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {\n\treturn shmctl(id, cmd, desc)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/timestruct.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport \"time\"\n\n// TimespecToNsec returns the time stored in ts as nanoseconds.\nfunc TimespecToNsec(ts Timespec) int64 { return ts.Nano() }\n\n// NsecToTimespec converts a number of nanoseconds into a Timespec.\nfunc NsecToTimespec(nsec int64) Timespec {\n\tsec := nsec / 1e9\n\tnsec = nsec % 1e9\n\tif nsec < 0 {\n\t\tnsec += 1e9\n\t\tsec--\n\t}\n\treturn setTimespec(sec, nsec)\n}\n\n// TimeToTimespec converts t into a Timespec.\n// On some 32-bit systems the range of valid Timespec values are smaller\n// than that of time.Time values.  So if t is out of the valid range of\n// Timespec, it returns a zero Timespec and ERANGE.\nfunc TimeToTimespec(t time.Time) (Timespec, error) {\n\tsec := t.Unix()\n\tnsec := int64(t.Nanosecond())\n\tts := setTimespec(sec, nsec)\n\n\t// Currently all targets have either int32 or int64 for Timespec.Sec.\n\t// If there were a new target with floating point type for it, we have\n\t// to consider the rounding error.\n\tif int64(ts.Sec) != sec {\n\t\treturn Timespec{}, ERANGE\n\t}\n\treturn ts, nil\n}\n\n// TimevalToNsec returns the time stored in tv as nanoseconds.\nfunc TimevalToNsec(tv Timeval) int64 { return tv.Nano() }\n\n// NsecToTimeval converts a number of nanoseconds into a Timeval.\nfunc NsecToTimeval(nsec int64) Timeval {\n\tnsec += 999 // round up to microsecond\n\tusec := nsec % 1e9 / 1e3\n\tsec := nsec / 1e9\n\tif usec < 0 {\n\t\tusec += 1e6\n\t\tsec--\n\t}\n\treturn setTimeval(sec, usec)\n}\n\n// Unix returns the time stored in ts as seconds plus nanoseconds.\nfunc (ts *Timespec) Unix() (sec int64, nsec int64) {\n\treturn int64(ts.Sec), int64(ts.Nsec)\n}\n\n// Unix returns the time stored in tv as seconds plus nanoseconds.\nfunc (tv *Timeval) Unix() (sec int64, nsec int64) {\n\treturn int64(tv.Sec), int64(tv.Usec) * 1000\n}\n\n// Nano returns the time stored in ts as nanoseconds.\nfunc (ts *Timespec) Nano() int64 {\n\treturn int64(ts.Sec)*1e9 + int64(ts.Nsec)\n}\n\n// Nano returns the time stored in tv as nanoseconds.\nfunc (tv *Timeval) Nano() int64 {\n\treturn int64(tv.Sec)*1e9 + int64(tv.Usec)*1000\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/unveil_openbsd.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport \"fmt\"\n\n// Unveil implements the unveil syscall.\n// For more information see unveil(2).\n// Note that the special case of blocking further\n// unveil calls is handled by UnveilBlock.\nfunc Unveil(path string, flags string) error {\n\tif err := supportsUnveil(); err != nil {\n\t\treturn err\n\t}\n\tpathPtr, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tflagsPtr, err := BytePtrFromString(flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn unveil(pathPtr, flagsPtr)\n}\n\n// UnveilBlock blocks future unveil calls.\n// For more information see unveil(2).\nfunc UnveilBlock() error {\n\tif err := supportsUnveil(); err != nil {\n\t\treturn err\n\t}\n\treturn unveil(nil, nil)\n}\n\n// supportsUnveil checks for availability of the unveil(2) system call based\n// on the running OpenBSD version.\nfunc supportsUnveil() error {\n\tmaj, min, err := majmin()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// unveil is not available before 6.4\n\tif maj < 6 || (maj == 6 && min <= 3) {\n\t\treturn fmt.Errorf(\"cannot call Unveil on OpenBSD %d.%d\", maj, min)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/vgetrandom_linux.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && go1.24\n\npackage unix\n\nimport _ \"unsafe\"\n\n//go:linkname vgetrandom runtime.vgetrandom\n//go:noescape\nfunc vgetrandom(p []byte, flags uint32) (ret int, supported bool)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !linux || !go1.24\n\npackage unix\n\nfunc vgetrandom(p []byte, flags uint32) (ret int, supported bool) {\n\treturn -1, false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/xattr_bsd.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build freebsd || netbsd\n\npackage unix\n\nimport (\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// Derive extattr namespace and attribute name\n\nfunc xattrnamespace(fullattr string) (ns int, attr string, err error) {\n\ts := strings.IndexByte(fullattr, '.')\n\tif s == -1 {\n\t\treturn -1, \"\", ENOATTR\n\t}\n\n\tnamespace := fullattr[0:s]\n\tattr = fullattr[s+1:]\n\n\tswitch namespace {\n\tcase \"user\":\n\t\treturn EXTATTR_NAMESPACE_USER, attr, nil\n\tcase \"system\":\n\t\treturn EXTATTR_NAMESPACE_SYSTEM, attr, nil\n\tdefault:\n\t\treturn -1, \"\", ENOATTR\n\t}\n}\n\nfunc initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {\n\tif len(dest) > idx {\n\t\treturn unsafe.Pointer(&dest[idx])\n\t}\n\tif dest != nil {\n\t\t// extattr_get_file and extattr_list_file treat NULL differently from\n\t\t// a non-NULL pointer of length zero. Preserve the property of nilness,\n\t\t// even if we can't use dest directly.\n\t\treturn unsafe.Pointer(&_zero)\n\t}\n\treturn nil\n}\n\n// FreeBSD and NetBSD implement their own syscalls to handle extended attributes\n\nfunc Getxattr(file string, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetFile(file, nsid, a, uintptr(d), destsize)\n}\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)\n}\n\nfunc Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetLink(link, nsid, a, uintptr(d), destsize)\n}\n\n// flags are unused on FreeBSD\n\nfunc Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Setxattr(file string, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Lsetxattr(link string, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Removexattr(file string, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteFile(file, nsid, a)\n\treturn\n}\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteFd(fd, nsid, a)\n\treturn\n}\n\nfunc Lremovexattr(link string, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteLink(link, nsid, a)\n\treturn\n}\n\nfunc Listxattr(file string, dest []byte) (sz int, err error) {\n\tdestsiz := len(dest)\n\n\t// FreeBSD won't allow you to list xattrs from multiple namespaces\n\ts, pos := 0, 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := ListxattrNS(file, nsid, dest[pos:])\n\n\t\t/* Errors accessing system attrs are ignored so that\n\t\t * we can implement the Linux-like behavior of omitting errors that\n\t\t * we don't have read permissions on\n\t\t *\n\t\t * Linux will still error if we ask for user attributes on a file that\n\t\t * we don't have read permissions on, so don't ignore those errors\n\t\t */\n\t\tif e != nil {\n\t\t\tif e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tpos = s\n\t\tif pos > destsiz {\n\t\t\tpos = destsiz\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\nfunc ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)\n\tif e != nil {\n\t\treturn 0, err\n\t}\n\n\treturn s, nil\n}\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tdestsiz := len(dest)\n\n\ts, pos := 0, 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := FlistxattrNS(fd, nsid, dest[pos:])\n\n\t\tif e != nil {\n\t\t\tif e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tpos = s\n\t\tif pos > destsiz {\n\t\t\tpos = destsiz\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\nfunc FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)\n\tif e != nil {\n\t\treturn 0, err\n\t}\n\n\treturn s, nil\n}\n\nfunc Llistxattr(link string, dest []byte) (sz int, err error) {\n\tdestsiz := len(dest)\n\n\ts, pos := 0, 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := LlistxattrNS(link, nsid, dest[pos:])\n\n\t\tif e != nil {\n\t\t\tif e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tpos = s\n\t\tif pos > destsiz {\n\t\t\tpos = destsiz\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\nfunc LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)\n\tif e != nil {\n\t\treturn 0, err\n\t}\n\n\treturn s, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go",
    "content": "// mkerrors.sh -maix32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc && aix\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -maix32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                  = 0x10\n\tAF_BYPASS                     = 0x19\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x18\n\tAF_INTF                       = 0x14\n\tAF_ISO                        = 0x7\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x12\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x1e\n\tAF_NDD                        = 0x17\n\tAF_NETWARE                    = 0x16\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x7\n\tAF_PUP                        = 0x4\n\tAF_RIF                        = 0x15\n\tAF_ROUTE                      = 0x11\n\tAF_SNA                        = 0xb\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tALTWERASE                     = 0x400000\n\tARPHRD_802_3                  = 0x6\n\tARPHRD_802_5                  = 0x6\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FDDI                   = 0x1\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB38400                        = 0xf\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB9600                         = 0xd\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x1000\n\tBSDLY                         = 0x1000\n\tCAP_AACCT                     = 0x6\n\tCAP_ARM_APPLICATION           = 0x5\n\tCAP_BYPASS_RAC_VMM            = 0x3\n\tCAP_CLEAR                     = 0x0\n\tCAP_CREDENTIALS               = 0x7\n\tCAP_EFFECTIVE                 = 0x1\n\tCAP_EWLM_AGENT                = 0x4\n\tCAP_INHERITABLE               = 0x2\n\tCAP_MAXIMUM                   = 0x7\n\tCAP_NUMA_ATTACH               = 0x2\n\tCAP_PERMITTED                 = 0x3\n\tCAP_PROPAGATE                 = 0x1\n\tCAP_PROPOGATE                 = 0x1\n\tCAP_SET                       = 0x1\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_MONOTONIC               = 0xa\n\tCLOCK_PROCESS_CPUTIME_ID      = 0xb\n\tCLOCK_REALTIME                = 0x9\n\tCLOCK_THREAD_CPUTIME_ID       = 0xc\n\tCR0                           = 0x0\n\tCR1                           = 0x100\n\tCR2                           = 0x200\n\tCR3                           = 0x300\n\tCRDLY                         = 0x300\n\tCREAD                         = 0x80\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIOCGIFCONF                  = -0x3ff796dc\n\tCSIZE                         = 0x30\n\tCSMAP_DIR                     = \"/usr/lib/nls/csmap/\"\n\tCSTART                        = '\\021'\n\tCSTOP                         = '\\023'\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x20000\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x80000\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x40000\n\tECH_ICMPID                    = 0x2\n\tETHERNET_CSMACD               = 0x6\n\tEVENP                         = 0x80\n\tEXCONTINUE                    = 0x0\n\tEXDLOK                        = 0x3\n\tEXIO                          = 0x2\n\tEXPGIO                        = 0x0\n\tEXRESUME                      = 0x2\n\tEXRETURN                      = 0x1\n\tEXSIG                         = 0x4\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tEXTRAP                        = 0x1\n\tEYEC_RTENTRYA                 = 0x257274656e747241\n\tEYEC_RTENTRYF                 = 0x257274656e747246\n\tE_ACC                         = 0x0\n\tFD_CLOEXEC                    = 0x1\n\tFD_SETSIZE                    = 0xfffe\n\tFF0                           = 0x0\n\tFF1                           = 0x2000\n\tFFDLY                         = 0x2000\n\tFLUSHBAND                     = 0x40\n\tFLUSHLOW                      = 0x8\n\tFLUSHO                        = 0x100000\n\tFLUSHR                        = 0x1\n\tFLUSHRW                       = 0x3\n\tFLUSHW                        = 0x2\n\tF_CLOSEM                      = 0xa\n\tF_DUP2FD                      = 0xe\n\tF_DUPFD                       = 0x0\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0x5\n\tF_GETLK64                     = 0xb\n\tF_GETOWN                      = 0x8\n\tF_LOCK                        = 0x1\n\tF_OK                          = 0x0\n\tF_RDLCK                       = 0x1\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0x6\n\tF_SETLK64                     = 0xc\n\tF_SETLKW                      = 0x7\n\tF_SETLKW64                    = 0xd\n\tF_SETOWN                      = 0x9\n\tF_TEST                        = 0x3\n\tF_TLOCK                       = 0x2\n\tF_TSTLK                       = 0xf\n\tF_ULOCK                       = 0x0\n\tF_UNLCK                       = 0x3\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x26\n\tICMP6_SEC_SEND_DEL            = 0x46\n\tICMP6_SEC_SEND_GET            = 0x47\n\tICMP6_SEC_SEND_SET            = 0x44\n\tICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x200000\n\tIFA_FIRSTALIAS                = 0x2000\n\tIFA_ROUTE                     = 0x1\n\tIFF_64BIT                     = 0x4000000\n\tIFF_ALLCAST                   = 0x20000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_BPF                       = 0x8000000\n\tIFF_BRIDGE                    = 0x40000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x80c52\n\tIFF_CHECKSUM_OFFLOAD          = 0x10000000\n\tIFF_D1                        = 0x8000\n\tIFF_D2                        = 0x4000\n\tIFF_D3                        = 0x2000\n\tIFF_D4                        = 0x1000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEVHEALTH                 = 0x4000\n\tIFF_DO_HW_LOOPBACK            = 0x10000\n\tIFF_GROUP_ROUTING             = 0x2000000\n\tIFF_IFBUFMGT                  = 0x800000\n\tIFF_LINK0                     = 0x100000\n\tIFF_LINK1                     = 0x200000\n\tIFF_LINK2                     = 0x400000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x80000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOECHO                    = 0x800\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_OACTIVE                   = 0x400\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PROMISC                   = 0x100\n\tIFF_PSEG                      = 0x40000000\n\tIFF_RUNNING                   = 0x40\n\tIFF_SIMPLEX                   = 0x800\n\tIFF_SNAP                      = 0x8000\n\tIFF_TCP_DISABLE_CKSUM         = 0x20000000\n\tIFF_TCP_NOCKSUM               = 0x1000000\n\tIFF_UP                        = 0x1\n\tIFF_VIPA                      = 0x80000000\n\tIFNAMSIZ                      = 0x10\n\tIFO_FLUSH                     = 0x1\n\tIFT_1822                      = 0x2\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_CLUSTER                   = 0x3e\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FCS                       = 0x3a\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_GIFTUNNEL                 = 0x3c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HF                        = 0x3d\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SN                        = 0x38\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_SP                        = 0x39\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_TUNNEL                    = 0x3b\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_VIPA                      = 0x37\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x10000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_USE                        = 0x1\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_BIP                   = 0x53\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_GIF                   = 0x8c\n\tIPPROTO_GRE                   = 0x2f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPIP                  = 0x4\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_LOCAL                 = 0x3f\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_MH                    = 0x87\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_QOS                   = 0x2d\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_TP                    = 0x1d\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADDRFORM                 = 0x16\n\tIPV6_ADDR_PREFERENCES         = 0x4a\n\tIPV6_ADD_MEMBERSHIP           = 0xc\n\tIPV6_AIXRAWSOCKET             = 0x39\n\tIPV6_CHECKSUM                 = 0x27\n\tIPV6_DONTFRAG                 = 0x2d\n\tIPV6_DROP_MEMBERSHIP          = 0xd\n\tIPV6_DSTOPTS                  = 0x36\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffffff\n\tIPV6_FLOWINFO_PRIFLOW         = 0xfffffff\n\tIPV6_FLOWINFO_PRIORITY        = 0xf000000\n\tIPV6_FLOWINFO_SRFLAG          = 0x10000000\n\tIPV6_FLOWINFO_VERSION         = 0xf0000000\n\tIPV6_HOPLIMIT                 = 0x28\n\tIPV6_HOPOPTS                  = 0x34\n\tIPV6_JOIN_GROUP               = 0xc\n\tIPV6_LEAVE_GROUP              = 0xd\n\tIPV6_MIPDSTOPTS               = 0x36\n\tIPV6_MULTICAST_HOPS           = 0xa\n\tIPV6_MULTICAST_IF             = 0x9\n\tIPV6_MULTICAST_LOOP           = 0xb\n\tIPV6_NEXTHOP                  = 0x30\n\tIPV6_NOPROBE                  = 0x1c\n\tIPV6_PATHMTU                  = 0x2e\n\tIPV6_PKTINFO                  = 0x21\n\tIPV6_PKTOPTIONS               = 0x24\n\tIPV6_PRIORITY_10              = 0xa000000\n\tIPV6_PRIORITY_11              = 0xb000000\n\tIPV6_PRIORITY_12              = 0xc000000\n\tIPV6_PRIORITY_13              = 0xd000000\n\tIPV6_PRIORITY_14              = 0xe000000\n\tIPV6_PRIORITY_15              = 0xf000000\n\tIPV6_PRIORITY_8               = 0x8000000\n\tIPV6_PRIORITY_9               = 0x9000000\n\tIPV6_PRIORITY_BULK            = 0x4000000\n\tIPV6_PRIORITY_CONTROL         = 0x7000000\n\tIPV6_PRIORITY_FILLER          = 0x1000000\n\tIPV6_PRIORITY_INTERACTIVE     = 0x6000000\n\tIPV6_PRIORITY_RESERVED1       = 0x3000000\n\tIPV6_PRIORITY_RESERVED2       = 0x5000000\n\tIPV6_PRIORITY_UNATTENDED      = 0x2000000\n\tIPV6_PRIORITY_UNCHARACTERIZED = 0x0\n\tIPV6_RECVDSTOPTS              = 0x38\n\tIPV6_RECVHOPLIMIT             = 0x29\n\tIPV6_RECVHOPOPTS              = 0x35\n\tIPV6_RECVHOPS                 = 0x22\n\tIPV6_RECVIF                   = 0x1e\n\tIPV6_RECVPATHMTU              = 0x2f\n\tIPV6_RECVPKTINFO              = 0x23\n\tIPV6_RECVRTHDR                = 0x33\n\tIPV6_RECVSRCRT                = 0x1d\n\tIPV6_RECVTCLASS               = 0x2a\n\tIPV6_RTHDR                    = 0x32\n\tIPV6_RTHDRDSTOPTS             = 0x37\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_RTHDR_TYPE_2             = 0x2\n\tIPV6_SENDIF                   = 0x1f\n\tIPV6_SRFLAG_LOOSE             = 0x0\n\tIPV6_SRFLAG_STRICT            = 0x10000000\n\tIPV6_TCLASS                   = 0x2b\n\tIPV6_TOKEN_LENGTH             = 0x40\n\tIPV6_UNICAST_HOPS             = 0x4\n\tIPV6_USE_MIN_MTU              = 0x2c\n\tIPV6_V6ONLY                   = 0x25\n\tIPV6_VERSION                  = 0x60000000\n\tIP_ADDRFORM                   = 0x16\n\tIP_ADD_MEMBERSHIP             = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x3c\n\tIP_BLOCK_SOURCE               = 0x3a\n\tIP_BROADCAST_IF               = 0x10\n\tIP_CACHE_LINE_SIZE            = 0x80\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPMODE                   = 0x11\n\tIP_DONTFRAG                   = 0x19\n\tIP_DROP_MEMBERSHIP            = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x3d\n\tIP_FINDPMTU                   = 0x1a\n\tIP_HDRINCL                    = 0x2\n\tIP_INC_MEMBERSHIPS            = 0x14\n\tIP_INIT_MEMBERSHIP            = 0x14\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_HOPS             = 0xa\n\tIP_MULTICAST_IF               = 0x9\n\tIP_MULTICAST_LOOP             = 0xb\n\tIP_MULTICAST_TTL              = 0xa\n\tIP_OPT                        = 0x1b\n\tIP_OPTIONS                    = 0x1\n\tIP_PMTUAGE                    = 0x1b\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x14\n\tIP_RECVIFINFO                 = 0xf\n\tIP_RECVINTERFACE              = 0x20\n\tIP_RECVMACHDR                 = 0xe\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVTTL                    = 0x22\n\tIP_RETOPTS                    = 0x8\n\tIP_SOURCE_FILTER              = 0x48\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x3b\n\tIP_UNICAST_HOPS               = 0x4\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x800\n\tIXANY                         = 0x1000\n\tIXOFF                         = 0x400\n\tIXON                          = 0x200\n\tI_FLUSH                       = 0x20005305\n\tLNOFLSH                       = 0x8000\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_NORMAL                   = 0x0\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_SPACEAVAIL               = 0x5\n\tMADV_WILLNEED                 = 0x3\n\tMAP_ANON                      = 0x10\n\tMAP_ANONYMOUS                 = 0x10\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x100\n\tMAP_PRIVATE                   = 0x2\n\tMAP_SHARED                    = 0x1\n\tMAP_TYPE                      = 0xf0\n\tMAP_VARIABLE                  = 0x0\n\tMCAST_BLOCK_SOURCE            = 0x40\n\tMCAST_EXCLUDE                 = 0x2\n\tMCAST_INCLUDE                 = 0x1\n\tMCAST_JOIN_GROUP              = 0x3e\n\tMCAST_JOIN_SOURCE_GROUP       = 0x42\n\tMCAST_LEAVE_GROUP             = 0x3f\n\tMCAST_LEAVE_SOURCE_GROUP      = 0x43\n\tMCAST_SOURCE_FILTER           = 0x49\n\tMCAST_UNBLOCK_SOURCE          = 0x41\n\tMCL_CURRENT                   = 0x100\n\tMCL_FUTURE                    = 0x200\n\tMSG_ANY                       = 0x4\n\tMSG_ARGEXT                    = 0x400\n\tMSG_BAND                      = 0x2\n\tMSG_COMPAT                    = 0x8000\n\tMSG_CTRUNC                    = 0x20\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_EOR                       = 0x8\n\tMSG_HIPRI                     = 0x1\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_MPEG2                     = 0x80\n\tMSG_NONBLOCK                  = 0x4000\n\tMSG_NOSIGNAL                  = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x10\n\tMSG_WAITALL                   = 0x40\n\tMSG_WAITFORONE                = 0x200\n\tMS_ASYNC                      = 0x10\n\tMS_EINTR                      = 0x80\n\tMS_INVALIDATE                 = 0x40\n\tMS_PER_SEC                    = 0x3e8\n\tMS_SYNC                       = 0x20\n\tNFDBITS                       = 0x20\n\tNL0                           = 0x0\n\tNL1                           = 0x4000\n\tNL2                           = 0x8000\n\tNL3                           = 0xc000\n\tNLDLY                         = 0x4000\n\tNOFLSH                        = 0x80\n\tNOFLUSH                       = 0x80000000\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tONOEOT                        = 0x80000\n\tOPOST                         = 0x1\n\tOXTABS                        = 0x40000\n\tO_ACCMODE                     = 0x23\n\tO_APPEND                      = 0x8\n\tO_CIO                         = 0x80\n\tO_CIOR                        = 0x800000000\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DEFER                       = 0x2000\n\tO_DELAY                       = 0x4000\n\tO_DIRECT                      = 0x8000000\n\tO_DIRECTORY                   = 0x80000\n\tO_DSYNC                       = 0x400000\n\tO_EFSOFF                      = 0x400000000\n\tO_EFSON                       = 0x200000000\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x20\n\tO_LARGEFILE                   = 0x4000000\n\tO_NDELAY                      = 0x8000\n\tO_NOCACHE                     = 0x100000\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x1000000\n\tO_NONBLOCK                    = 0x4\n\tO_NONE                        = 0x3\n\tO_NSHARE                      = 0x10000\n\tO_RAW                         = 0x100000000\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSHARE                      = 0x1000\n\tO_RSYNC                       = 0x200000\n\tO_SEARCH                      = 0x20\n\tO_SNAPSHOT                    = 0x40\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_TTY_INIT                    = 0x0\n\tO_WRONLY                      = 0x1\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x20000000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tPR_64BIT                      = 0x20\n\tPR_ADDR                       = 0x2\n\tPR_ARGEXT                     = 0x400\n\tPR_ATOMIC                     = 0x1\n\tPR_CONNREQUIRED               = 0x4\n\tPR_FASTHZ                     = 0x5\n\tPR_INP                        = 0x40\n\tPR_INTRLEVEL                  = 0x8000\n\tPR_MLS                        = 0x100\n\tPR_MLS_1_LABEL                = 0x200\n\tPR_NOEOR                      = 0x4000\n\tPR_RIGHTS                     = 0x10\n\tPR_SLOWHZ                     = 0x2\n\tPR_WANTRCVD                   = 0x8\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x7\n\tRLIMIT_NPROC                  = 0x9\n\tRLIMIT_RSS                    = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0x7fffffff\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x8\n\tRTAX_NETMASK                  = 0x2\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DOWNSTREAM                = 0x100\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTC_IA64                      = 0x3\n\tRTC_POWER                     = 0x1\n\tRTC_POWER_PC                  = 0x2\n\tRTF_ACTIVE_DGD                = 0x1000000\n\tRTF_BCE                       = 0x80000\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_BROADCAST                 = 0x400000\n\tRTF_BUL                       = 0x2000\n\tRTF_CLONE                     = 0x10000\n\tRTF_CLONED                    = 0x20000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_FREE_IN_PROG              = 0x4000000\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_LLINFO                    = 0x400\n\tRTF_LOCAL                     = 0x200000\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTICAST                 = 0x800000\n\tRTF_PERMANENT6                = 0x8000000\n\tRTF_PINNED                    = 0x100000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_PROTO3                    = 0x40000\n\tRTF_REJECT                    = 0x8\n\tRTF_SMALLMTU                  = 0x40000\n\tRTF_STATIC                    = 0x800\n\tRTF_STOPSRCH                  = 0x2000000\n\tRTF_UNREACHABLE               = 0x10000000\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_EXPIRE                    = 0xf\n\tRTM_GET                       = 0x4\n\tRTM_GETNEXT                   = 0x11\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_RTLOST                    = 0x10\n\tRTM_RTTUNIT                   = 0xf4240\n\tRTM_SAMEADDR                  = 0x12\n\tRTM_SET                       = 0x13\n\tRTM_VERSION                   = 0x2\n\tRTM_VERSION_GR                = 0x4\n\tRTM_VERSION_GR_COMPAT         = 0x3\n\tRTM_VERSION_POLICY            = 0x5\n\tRTM_VERSION_POLICY_EXT        = 0x6\n\tRTM_VERSION_POLICY_PRFN       = 0x7\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tRUSAGE_THREAD                 = 0x1\n\tSCM_RIGHTS                    = 0x1\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIGMAX64                      = 0xff\n\tSIGQUEUE_MAX                  = 0x20\n\tSIOCADDIFVIPA                 = 0x20006942\n\tSIOCADDMTU                    = -0x7ffb9690\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDNETID                  = -0x7fd796a9\n\tSIOCADDRT                     = -0x7fcf8df6\n\tSIOCAIFADDR                   = -0x7fbf96e6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fb396e0\n\tSIOCDELIFVIPA                 = 0x20006943\n\tSIOCDELMTU                    = -0x7ffb968f\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELPMTU                   = -0x7fd78ff6\n\tSIOCDELRT                     = -0x7fcf8df5\n\tSIOCDIFADDR                   = -0x7fd796e7\n\tSIOCDNETOPT                   = -0x3ffe9680\n\tSIOCDX25XLATE                 = -0x7fd7969b\n\tSIOCFIFADDR                   = -0x7fdf966d\n\tSIOCGARP                      = -0x3fb396da\n\tSIOCGETMTUS                   = 0x2000696f\n\tSIOCGETSGCNT                  = -0x3feb8acc\n\tSIOCGETVIFCNT                 = -0x3feb8acd\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fd796df\n\tSIOCGIFADDRS                  = 0x2000698c\n\tSIOCGIFBAUDRATE               = -0x3fdf9669\n\tSIOCGIFBRDADDR                = -0x3fd796dd\n\tSIOCGIFCONF                   = -0x3ff796bb\n\tSIOCGIFCONFGLOB               = -0x3ff79670\n\tSIOCGIFDSTADDR                = -0x3fd796de\n\tSIOCGIFFLAGS                  = -0x3fd796ef\n\tSIOCGIFGIDLIST                = 0x20006968\n\tSIOCGIFHWADDR                 = -0x3fab966b\n\tSIOCGIFMETRIC                 = -0x3fd796e9\n\tSIOCGIFMTU                    = -0x3fd796aa\n\tSIOCGIFNETMASK                = -0x3fd796db\n\tSIOCGIFOPTIONS                = -0x3fd796d6\n\tSIOCGISNO                     = -0x3fd79695\n\tSIOCGLOADF                    = -0x3ffb967e\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGNETOPT                   = -0x3ffe96a5\n\tSIOCGNETOPT1                  = -0x3fdf967f\n\tSIOCGNMTUS                    = 0x2000696e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSIZIFCONF                = 0x4004696a\n\tSIOCGSRCFILTER                = -0x3fe796cb\n\tSIOCGTUNEPHASE                = -0x3ffb9676\n\tSIOCGX25XLATE                 = -0x3fd7969c\n\tSIOCIFATTACH                  = -0x7fdf9699\n\tSIOCIFDETACH                  = -0x7fdf969a\n\tSIOCIFGETPKEY                 = -0x7fdf969b\n\tSIOCIF_ATM_DARP               = -0x7fdf9683\n\tSIOCIF_ATM_DUMPARP            = -0x7fdf9685\n\tSIOCIF_ATM_GARP               = -0x7fdf9682\n\tSIOCIF_ATM_IDLE               = -0x7fdf9686\n\tSIOCIF_ATM_SARP               = -0x7fdf9681\n\tSIOCIF_ATM_SNMPARP            = -0x7fdf9687\n\tSIOCIF_ATM_SVC                = -0x7fdf9684\n\tSIOCIF_ATM_UBR                = -0x7fdf9688\n\tSIOCIF_DEVHEALTH              = -0x7ffb966c\n\tSIOCIF_IB_ARP_INCOMP          = -0x7fdf9677\n\tSIOCIF_IB_ARP_TIMER           = -0x7fdf9678\n\tSIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f\n\tSIOCIF_IB_DEL_ARP             = -0x7fdf967f\n\tSIOCIF_IB_DEL_PINFO           = -0x3fdf9670\n\tSIOCIF_IB_DUMP_ARP            = -0x7fdf9680\n\tSIOCIF_IB_GET_ARP             = -0x7fdf967e\n\tSIOCIF_IB_GET_INFO            = -0x3f879675\n\tSIOCIF_IB_GET_STATS           = -0x3f879672\n\tSIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a\n\tSIOCIF_IB_RESET_STATS         = -0x3f879671\n\tSIOCIF_IB_RESIZE_CQ           = -0x7fdf9679\n\tSIOCIF_IB_SET_ARP             = -0x7fdf967d\n\tSIOCIF_IB_SET_PKEY            = -0x7fdf967c\n\tSIOCIF_IB_SET_PORT            = -0x7fdf967b\n\tSIOCIF_IB_SET_QKEY            = -0x7fdf9676\n\tSIOCIF_IB_SET_QSIZE           = -0x7fdf967a\n\tSIOCLISTIFVIPA                = 0x20006944\n\tSIOCSARP                      = -0x7fb396e2\n\tSIOCSHIWAT                    = 0x80047300\n\tSIOCSIFADDR                   = -0x7fd796f4\n\tSIOCSIFADDRORI                = -0x7fdb9673\n\tSIOCSIFBRDADDR                = -0x7fd796ed\n\tSIOCSIFDSTADDR                = -0x7fd796f2\n\tSIOCSIFFLAGS                  = -0x7fd796f0\n\tSIOCSIFGIDLIST                = 0x20006969\n\tSIOCSIFMETRIC                 = -0x7fd796e8\n\tSIOCSIFMTU                    = -0x7fd796a8\n\tSIOCSIFNETDUMP                = -0x7fd796e4\n\tSIOCSIFNETMASK                = -0x7fd796ea\n\tSIOCSIFOPTIONS                = -0x7fd796d7\n\tSIOCSIFSUBCHAN                = -0x7fd796e5\n\tSIOCSISNO                     = -0x7fd79694\n\tSIOCSLOADF                    = -0x3ffb967d\n\tSIOCSLOWAT                    = 0x80047302\n\tSIOCSNETOPT                   = -0x7ffe96a6\n\tSIOCSPGRP                     = 0x80047308\n\tSIOCSX25XLATE                 = -0x7fd7969d\n\tSOCK_CONN_DGRAM               = 0x6\n\tSOCK_DGRAM                    = 0x2\n\tSOCK_RAW                      = 0x3\n\tSOCK_RDM                      = 0x4\n\tSOCK_SEQPACKET                = 0x5\n\tSOCK_STREAM                   = 0x1\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x400\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_AUDIT                      = 0x8000\n\tSO_BROADCAST                  = 0x20\n\tSO_CKSUMRECV                  = 0x800\n\tSO_DEBUG                      = 0x1\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROR                      = 0x1007\n\tSO_KEEPALIVE                  = 0x8\n\tSO_KERNACCEPT                 = 0x2000\n\tSO_LINGER                     = 0x80\n\tSO_NOMULTIPATH                = 0x4000\n\tSO_NOREUSEADDR                = 0x1000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PEERID                     = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_REUSEADDR                  = 0x4\n\tSO_REUSEPORT                  = 0x200\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_TIMESTAMPNS                = 0x100a\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_USE_IFBUFS                 = 0x400\n\tS_BANDURG                     = 0x400\n\tS_EMODFMT                     = 0x3c000000\n\tS_ENFMT                       = 0x400\n\tS_ERROR                       = 0x100\n\tS_HANGUP                      = 0x200\n\tS_HIPRI                       = 0x2\n\tS_ICRYPTO                     = 0x80000\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFIFO                       = 0x1000\n\tS_IFJOURNAL                   = 0x10000\n\tS_IFLNK                       = 0xa000\n\tS_IFMPX                       = 0x2200\n\tS_IFMT                        = 0xf000\n\tS_IFPDIR                      = 0x4000000\n\tS_IFPSDIR                     = 0x8000000\n\tS_IFPSSDIR                    = 0xc000000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_IFSYSEA                     = 0x30000000\n\tS_INPUT                       = 0x1\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_ITCB                        = 0x1000000\n\tS_ITP                         = 0x800000\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXACL                       = 0x2000000\n\tS_IXATTR                      = 0x40000\n\tS_IXGRP                       = 0x8\n\tS_IXINTERFACE                 = 0x100000\n\tS_IXMOD                       = 0x40000000\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tS_MSG                         = 0x8\n\tS_OUTPUT                      = 0x4\n\tS_RDBAND                      = 0x20\n\tS_RDNORM                      = 0x10\n\tS_RESERVED1                   = 0x20000\n\tS_RESERVED2                   = 0x200000\n\tS_RESERVED3                   = 0x400000\n\tS_RESERVED4                   = 0x80000000\n\tS_RESFMT1                     = 0x10000000\n\tS_RESFMT10                    = 0x34000000\n\tS_RESFMT11                    = 0x38000000\n\tS_RESFMT12                    = 0x3c000000\n\tS_RESFMT2                     = 0x14000000\n\tS_RESFMT3                     = 0x18000000\n\tS_RESFMT4                     = 0x1c000000\n\tS_RESFMT5                     = 0x20000000\n\tS_RESFMT6                     = 0x24000000\n\tS_RESFMT7                     = 0x28000000\n\tS_RESFMT8                     = 0x2c000000\n\tS_WRBAND                      = 0x80\n\tS_WRNORM                      = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x400\n\tTAB2                          = 0x800\n\tTAB3                          = 0xc00\n\tTABDLY                        = 0xc00\n\tTCFLSH                        = 0x540c\n\tTCGETA                        = 0x5405\n\tTCGETS                        = 0x5401\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800\n\tTCP_ACLADD                    = 0x23\n\tTCP_ACLBIND                   = 0x26\n\tTCP_ACLCLEAR                  = 0x22\n\tTCP_ACLDEL                    = 0x24\n\tTCP_ACLDENY                   = 0x8\n\tTCP_ACLFLUSH                  = 0x21\n\tTCP_ACLGID                    = 0x1\n\tTCP_ACLLS                     = 0x25\n\tTCP_ACLSUBNET                 = 0x4\n\tTCP_ACLUID                    = 0x2\n\tTCP_CWND_DF                   = 0x16\n\tTCP_CWND_IF                   = 0x15\n\tTCP_DELAY_ACK_FIN             = 0x2\n\tTCP_DELAY_ACK_SYN             = 0x1\n\tTCP_FASTNAME                  = 0x101080a\n\tTCP_KEEPCNT                   = 0x13\n\tTCP_KEEPIDLE                  = 0x11\n\tTCP_KEEPINTVL                 = 0x12\n\tTCP_LSPRIV                    = 0x29\n\tTCP_LUID                      = 0x20\n\tTCP_MAXBURST                  = 0x8\n\tTCP_MAXDF                     = 0x64\n\tTCP_MAXIF                     = 0x64\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MAXWIN                    = 0xffff\n\tTCP_MAXWINDOWSCALE            = 0xe\n\tTCP_MAX_SACK                  = 0x4\n\tTCP_MSS                       = 0x5b4\n\tTCP_NODELAY                   = 0x1\n\tTCP_NODELAYACK                = 0x14\n\tTCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19\n\tTCP_NOREDUCE_CWND_IN_FRXMT    = 0x18\n\tTCP_NOTENTER_SSTART           = 0x17\n\tTCP_OPT                       = 0x19\n\tTCP_RFC1323                   = 0x4\n\tTCP_SETPRIV                   = 0x27\n\tTCP_STDURG                    = 0x10\n\tTCP_TIMESTAMP_OPTLEN          = 0xc\n\tTCP_UNSETPRIV                 = 0x28\n\tTCSAFLUSH                     = 0x2\n\tTCSBRK                        = 0x5409\n\tTCSETA                        = 0x5406\n\tTCSETAF                       = 0x5408\n\tTCSETAW                       = 0x5407\n\tTCSETS                        = 0x5402\n\tTCSETSF                       = 0x5404\n\tTCSETSW                       = 0x5403\n\tTCXONC                        = 0x540b\n\tTIMER_ABSTIME                 = 0x3e7\n\tTIMER_MAX                     = 0x20\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x2000747a\n\tTIOCCDTR                      = 0x20007478\n\tTIOCCONS                      = 0x80047462\n\tTIOCEXCL                      = 0x2000740d\n\tTIOCFLUSH                     = 0x80047410\n\tTIOCGETC                      = 0x40067412\n\tTIOCGETD                      = 0x40047400\n\tTIOCGETP                      = 0x40067408\n\tTIOCGLTC                      = 0x40067474\n\tTIOCGPGRP                     = 0x40047477\n\tTIOCGSID                      = 0x40047448\n\tTIOCGSIZE                     = 0x40087468\n\tTIOCGWINSZ                    = 0x40087468\n\tTIOCHPCL                      = 0x20007402\n\tTIOCLBIC                      = 0x8004747e\n\tTIOCLBIS                      = 0x8004747f\n\tTIOCLGET                      = 0x4004747c\n\tTIOCLSET                      = 0x8004747d\n\tTIOCMBIC                      = 0x8004746b\n\tTIOCMBIS                      = 0x8004746c\n\tTIOCMGET                      = 0x4004746a\n\tTIOCMIWAIT                    = 0x80047464\n\tTIOCMODG                      = 0x40047403\n\tTIOCMODS                      = 0x80047404\n\tTIOCMSET                      = 0x8004746d\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x20007471\n\tTIOCNXCL                      = 0x2000740e\n\tTIOCOUTQ                      = 0x40047473\n\tTIOCPKT                       = 0x80047470\n\tTIOCPKT_DATA                  = 0x0\n\tTIOCPKT_DOSTOP                = 0x20\n\tTIOCPKT_FLUSHREAD             = 0x1\n\tTIOCPKT_FLUSHWRITE            = 0x2\n\tTIOCPKT_NOSTOP                = 0x10\n\tTIOCPKT_START                 = 0x8\n\tTIOCPKT_STOP                  = 0x4\n\tTIOCREMOTE                    = 0x80047469\n\tTIOCSBRK                      = 0x2000747b\n\tTIOCSDTR                      = 0x20007479\n\tTIOCSETC                      = 0x80067411\n\tTIOCSETD                      = 0x80047401\n\tTIOCSETN                      = 0x8006740a\n\tTIOCSETP                      = 0x80067409\n\tTIOCSLTC                      = 0x80067475\n\tTIOCSPGRP                     = 0x80047476\n\tTIOCSSIZE                     = 0x80087467\n\tTIOCSTART                     = 0x2000746e\n\tTIOCSTI                       = 0x80017472\n\tTIOCSTOP                      = 0x2000746f\n\tTIOCSWINSZ                    = 0x80087467\n\tTIOCUCNTL                     = 0x80047466\n\tTOSTOP                        = 0x10000\n\tUTIME_NOW                     = -0x2\n\tUTIME_OMIT                    = -0x3\n\tVDISCRD                       = 0xc\n\tVDSUSP                        = 0xa\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xe\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xb\n\tVSTART                        = 0x7\n\tVSTOP                         = 0x8\n\tVSTRT                         = 0x7\n\tVSUSP                         = 0x9\n\tVT0                           = 0x0\n\tVT1                           = 0x8000\n\tVTDELAY                       = 0x2000\n\tVTDLY                         = 0x8000\n\tVTIME                         = 0x5\n\tVWERSE                        = 0xd\n\tWPARSTART                     = 0x1\n\tWPARSTOP                      = 0x2\n\tWPARTTYNAME                   = \"Global\"\n\tXCASE                         = 0x4\n\tXTABS                         = 0xc00\n\t_FDATAFLUSH                   = 0x2000000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x43)\n\tEADDRNOTAVAIL   = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x42)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x38)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x78)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x75)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECLONEME        = syscall.Errno(0x52)\n\tECONNABORTED    = syscall.Errno(0x48)\n\tECONNREFUSED    = syscall.Errno(0x4f)\n\tECONNRESET      = syscall.Errno(0x49)\n\tECORRUPT        = syscall.Errno(0x59)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDESTADDREQ     = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x3a)\n\tEDIST           = syscall.Errno(0x35)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x58)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFORMAT         = syscall.Errno(0x30)\n\tEHOSTDOWN       = syscall.Errno(0x50)\n\tEHOSTUNREACH    = syscall.Errno(0x51)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x74)\n\tEINPROGRESS     = syscall.Errno(0x37)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x4b)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x55)\n\tEMEDIA          = syscall.Errno(0x6e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x3b)\n\tEMULTIHOP       = syscall.Errno(0x7d)\n\tENAMETOOLONG    = syscall.Errno(0x56)\n\tENETDOWN        = syscall.Errno(0x45)\n\tENETRESET       = syscall.Errno(0x47)\n\tENETUNREACH     = syscall.Errno(0x46)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x70)\n\tENOBUFS         = syscall.Errno(0x4a)\n\tENOCONNECT      = syscall.Errno(0x32)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x7a)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x31)\n\tENOLINK         = syscall.Errno(0x7e)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENOPROTOOPT     = syscall.Errno(0x3d)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x76)\n\tENOSTR          = syscall.Errno(0x7b)\n\tENOSYS          = syscall.Errno(0x6d)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x4c)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x11)\n\tENOTREADY       = syscall.Errno(0x2e)\n\tENOTRECOVERABLE = syscall.Errno(0x5e)\n\tENOTRUST        = syscall.Errno(0x72)\n\tENOTSOCK        = syscall.Errno(0x39)\n\tENOTSUP         = syscall.Errno(0x7c)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x40)\n\tEOVERFLOW       = syscall.Errno(0x7f)\n\tEOWNERDEAD      = syscall.Errno(0x5f)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x41)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x53)\n\tEPROTO          = syscall.Errno(0x79)\n\tEPROTONOSUPPORT = syscall.Errno(0x3e)\n\tEPROTOTYPE      = syscall.Errno(0x3c)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x5d)\n\tERESTART        = syscall.Errno(0x52)\n\tEROFS           = syscall.Errno(0x1e)\n\tESAD            = syscall.Errno(0x71)\n\tESHUTDOWN       = syscall.Errno(0x4d)\n\tESOCKTNOSUPPORT = syscall.Errno(0x3f)\n\tESOFT           = syscall.Errno(0x6f)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x34)\n\tESYSERROR       = syscall.Errno(0x5a)\n\tETIME           = syscall.Errno(0x77)\n\tETIMEDOUT       = syscall.Errno(0x4e)\n\tETOOMANYREFS    = syscall.Errno(0x73)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x54)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEWRPROTECT      = syscall.Errno(0x2f)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGAIO      = syscall.Signal(0x17)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGALRM1    = syscall.Signal(0x26)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCAPI     = syscall.Signal(0x31)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCLD      = syscall.Signal(0x14)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGCPUFAIL  = syscall.Signal(0x3b)\n\tSIGDANGER   = syscall.Signal(0x21)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGGRANT    = syscall.Signal(0x3c)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOINT    = syscall.Signal(0x10)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKAP      = syscall.Signal(0x3c)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGLOST     = syscall.Signal(0x6)\n\tSIGMAX      = syscall.Signal(0x3f)\n\tSIGMAX32    = syscall.Signal(0x3f)\n\tSIGMIGRATE  = syscall.Signal(0x23)\n\tSIGMSG      = syscall.Signal(0x1b)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPOLL     = syscall.Signal(0x17)\n\tSIGPRE      = syscall.Signal(0x24)\n\tSIGPROF     = syscall.Signal(0x20)\n\tSIGPTY      = syscall.Signal(0x17)\n\tSIGPWR      = syscall.Signal(0x1d)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGRECONFIG = syscall.Signal(0x3a)\n\tSIGRETRACT  = syscall.Signal(0x3d)\n\tSIGSAK      = syscall.Signal(0x3f)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSOUND    = syscall.Signal(0x3e)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGSYSERROR = syscall.Signal(0x30)\n\tSIGTALRM    = syscall.Signal(0x26)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVIRT     = syscall.Signal(0x25)\n\tSIGVTALRM   = syscall.Signal(0x22)\n\tSIGWAITING  = syscall.Signal(0x27)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"ENOTEMPTY\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"not a typewriter\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock condition if locked\"},\n\t{46, \"ENOTREADY\", \"device not ready\"},\n\t{47, \"EWRPROTECT\", \"write-protected media\"},\n\t{48, \"EFORMAT\", \"unformatted or incompatible media\"},\n\t{49, \"ENOLCK\", \"no locks available\"},\n\t{50, \"ENOCONNECT\", \"cannot Establish Connection\"},\n\t{52, \"ESTALE\", \"missing file or filesystem\"},\n\t{53, \"EDIST\", \"requests blocked by Administrator\"},\n\t{55, \"EINPROGRESS\", \"operation now in progress\"},\n\t{56, \"EALREADY\", \"operation already in progress\"},\n\t{57, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{58, \"EDESTADDREQ\", \"destination address required\"},\n\t{59, \"EMSGSIZE\", \"message too long\"},\n\t{60, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{61, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{62, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{63, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{64, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{65, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{66, \"EAFNOSUPPORT\", \"addr family not supported by protocol\"},\n\t{67, \"EADDRINUSE\", \"address already in use\"},\n\t{68, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{69, \"ENETDOWN\", \"network is down\"},\n\t{70, \"ENETUNREACH\", \"network is unreachable\"},\n\t{71, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{72, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{73, \"ECONNRESET\", \"connection reset by peer\"},\n\t{74, \"ENOBUFS\", \"no buffer space available\"},\n\t{75, \"EISCONN\", \"socket is already connected\"},\n\t{76, \"ENOTCONN\", \"socket is not connected\"},\n\t{77, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{78, \"ETIMEDOUT\", \"connection timed out\"},\n\t{79, \"ECONNREFUSED\", \"connection refused\"},\n\t{80, \"EHOSTDOWN\", \"host is down\"},\n\t{81, \"EHOSTUNREACH\", \"no route to host\"},\n\t{82, \"ERESTART\", \"restart the system call\"},\n\t{83, \"EPROCLIM\", \"too many processes\"},\n\t{84, \"EUSERS\", \"too many users\"},\n\t{85, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{86, \"ENAMETOOLONG\", \"file name too long\"},\n\t{88, \"EDQUOT\", \"disk quota exceeded\"},\n\t{89, \"ECORRUPT\", \"invalid file system control data detected\"},\n\t{90, \"ESYSERROR\", \"for future use \"},\n\t{93, \"EREMOTE\", \"item is not local to host\"},\n\t{94, \"ENOTRECOVERABLE\", \"state not recoverable \"},\n\t{95, \"EOWNERDEAD\", \"previous owner died \"},\n\t{109, \"ENOSYS\", \"function not implemented\"},\n\t{110, \"EMEDIA\", \"media surface error\"},\n\t{111, \"ESOFT\", \"I/O completed, but needs relocation\"},\n\t{112, \"ENOATTR\", \"no attribute found\"},\n\t{113, \"ESAD\", \"security Authentication Denied\"},\n\t{114, \"ENOTRUST\", \"not a Trusted Program\"},\n\t{115, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{116, \"EILSEQ\", \"invalid wide character\"},\n\t{117, \"ECANCELED\", \"asynchronous I/O cancelled\"},\n\t{118, \"ENOSR\", \"out of STREAMS resources\"},\n\t{119, \"ETIME\", \"system call timed out\"},\n\t{120, \"EBADMSG\", \"next message has wrong type\"},\n\t{121, \"EPROTO\", \"error in protocol\"},\n\t{122, \"ENODATA\", \"no message on stream head read q\"},\n\t{123, \"ENOSTR\", \"fd not associated with a stream\"},\n\t{124, \"ENOTSUP\", \"unsupported attribute value\"},\n\t{125, \"EMULTIHOP\", \"multihop is not allowed\"},\n\t{126, \"ENOLINK\", \"the server link has been severed\"},\n\t{127, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"IOT/Abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible/complete\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{27, \"SIGMSG\", \"input device data\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGPWR\", \"power-failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"paging space low\"},\n\t{34, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{35, \"SIGMIGRATE\", \"signal 35\"},\n\t{36, \"SIGPRE\", \"signal 36\"},\n\t{37, \"SIGVIRT\", \"signal 37\"},\n\t{38, \"SIGTALRM\", \"signal 38\"},\n\t{39, \"SIGWAITING\", \"signal 39\"},\n\t{48, \"SIGSYSERROR\", \"signal 48\"},\n\t{49, \"SIGCAPI\", \"signal 49\"},\n\t{58, \"SIGRECONFIG\", \"signal 58\"},\n\t{59, \"SIGCPUFAIL\", \"CPU Failure Predicted\"},\n\t{60, \"SIGKAP\", \"monitor mode granted\"},\n\t{61, \"SIGRETRACT\", \"monitor mode retracted\"},\n\t{62, \"SIGSOUND\", \"sound completed\"},\n\t{63, \"SIGSAK\", \"secure attention\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go",
    "content": "// mkerrors.sh -maix64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && aix\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -maix64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                  = 0x10\n\tAF_BYPASS                     = 0x19\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x18\n\tAF_INTF                       = 0x14\n\tAF_ISO                        = 0x7\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x12\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x1e\n\tAF_NDD                        = 0x17\n\tAF_NETWARE                    = 0x16\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x7\n\tAF_PUP                        = 0x4\n\tAF_RIF                        = 0x15\n\tAF_ROUTE                      = 0x11\n\tAF_SNA                        = 0xb\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tALTWERASE                     = 0x400000\n\tARPHRD_802_3                  = 0x6\n\tARPHRD_802_5                  = 0x6\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FDDI                   = 0x1\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB38400                        = 0xf\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB9600                         = 0xd\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x1000\n\tBSDLY                         = 0x1000\n\tCAP_AACCT                     = 0x6\n\tCAP_ARM_APPLICATION           = 0x5\n\tCAP_BYPASS_RAC_VMM            = 0x3\n\tCAP_CLEAR                     = 0x0\n\tCAP_CREDENTIALS               = 0x7\n\tCAP_EFFECTIVE                 = 0x1\n\tCAP_EWLM_AGENT                = 0x4\n\tCAP_INHERITABLE               = 0x2\n\tCAP_MAXIMUM                   = 0x7\n\tCAP_NUMA_ATTACH               = 0x2\n\tCAP_PERMITTED                 = 0x3\n\tCAP_PROPAGATE                 = 0x1\n\tCAP_PROPOGATE                 = 0x1\n\tCAP_SET                       = 0x1\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_MONOTONIC               = 0xa\n\tCLOCK_PROCESS_CPUTIME_ID      = 0xb\n\tCLOCK_REALTIME                = 0x9\n\tCLOCK_THREAD_CPUTIME_ID       = 0xc\n\tCR0                           = 0x0\n\tCR1                           = 0x100\n\tCR2                           = 0x200\n\tCR3                           = 0x300\n\tCRDLY                         = 0x300\n\tCREAD                         = 0x80\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIOCGIFCONF                  = -0x3fef96dc\n\tCSIZE                         = 0x30\n\tCSMAP_DIR                     = \"/usr/lib/nls/csmap/\"\n\tCSTART                        = '\\021'\n\tCSTOP                         = '\\023'\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x20000\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x80000\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x40000\n\tECH_ICMPID                    = 0x2\n\tETHERNET_CSMACD               = 0x6\n\tEVENP                         = 0x80\n\tEXCONTINUE                    = 0x0\n\tEXDLOK                        = 0x3\n\tEXIO                          = 0x2\n\tEXPGIO                        = 0x0\n\tEXRESUME                      = 0x2\n\tEXRETURN                      = 0x1\n\tEXSIG                         = 0x4\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tEXTRAP                        = 0x1\n\tEYEC_RTENTRYA                 = 0x257274656e747241\n\tEYEC_RTENTRYF                 = 0x257274656e747246\n\tE_ACC                         = 0x0\n\tFD_CLOEXEC                    = 0x1\n\tFD_SETSIZE                    = 0xfffe\n\tFF0                           = 0x0\n\tFF1                           = 0x2000\n\tFFDLY                         = 0x2000\n\tFLUSHBAND                     = 0x40\n\tFLUSHLOW                      = 0x8\n\tFLUSHO                        = 0x100000\n\tFLUSHR                        = 0x1\n\tFLUSHRW                       = 0x3\n\tFLUSHW                        = 0x2\n\tF_CLOSEM                      = 0xa\n\tF_DUP2FD                      = 0xe\n\tF_DUPFD                       = 0x0\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0xb\n\tF_GETLK64                     = 0xb\n\tF_GETOWN                      = 0x8\n\tF_LOCK                        = 0x1\n\tF_OK                          = 0x0\n\tF_RDLCK                       = 0x1\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0xc\n\tF_SETLK64                     = 0xc\n\tF_SETLKW                      = 0xd\n\tF_SETLKW64                    = 0xd\n\tF_SETOWN                      = 0x9\n\tF_TEST                        = 0x3\n\tF_TLOCK                       = 0x2\n\tF_TSTLK                       = 0xf\n\tF_ULOCK                       = 0x0\n\tF_UNLCK                       = 0x3\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x26\n\tICMP6_SEC_SEND_DEL            = 0x46\n\tICMP6_SEC_SEND_GET            = 0x47\n\tICMP6_SEC_SEND_SET            = 0x44\n\tICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x200000\n\tIFA_FIRSTALIAS                = 0x2000\n\tIFA_ROUTE                     = 0x1\n\tIFF_64BIT                     = 0x4000000\n\tIFF_ALLCAST                   = 0x20000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_BPF                       = 0x8000000\n\tIFF_BRIDGE                    = 0x40000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x80c52\n\tIFF_CHECKSUM_OFFLOAD          = 0x10000000\n\tIFF_D1                        = 0x8000\n\tIFF_D2                        = 0x4000\n\tIFF_D3                        = 0x2000\n\tIFF_D4                        = 0x1000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEVHEALTH                 = 0x4000\n\tIFF_DO_HW_LOOPBACK            = 0x10000\n\tIFF_GROUP_ROUTING             = 0x2000000\n\tIFF_IFBUFMGT                  = 0x800000\n\tIFF_LINK0                     = 0x100000\n\tIFF_LINK1                     = 0x200000\n\tIFF_LINK2                     = 0x400000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x80000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOECHO                    = 0x800\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_OACTIVE                   = 0x400\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PROMISC                   = 0x100\n\tIFF_PSEG                      = 0x40000000\n\tIFF_RUNNING                   = 0x40\n\tIFF_SIMPLEX                   = 0x800\n\tIFF_SNAP                      = 0x8000\n\tIFF_TCP_DISABLE_CKSUM         = 0x20000000\n\tIFF_TCP_NOCKSUM               = 0x1000000\n\tIFF_UP                        = 0x1\n\tIFF_VIPA                      = 0x80000000\n\tIFNAMSIZ                      = 0x10\n\tIFO_FLUSH                     = 0x1\n\tIFT_1822                      = 0x2\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_CLUSTER                   = 0x3e\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FCS                       = 0x3a\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_GIFTUNNEL                 = 0x3c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HF                        = 0x3d\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SN                        = 0x38\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_SP                        = 0x39\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_TUNNEL                    = 0x3b\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_VIPA                      = 0x37\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x10000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_USE                        = 0x1\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_BIP                   = 0x53\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_GIF                   = 0x8c\n\tIPPROTO_GRE                   = 0x2f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPIP                  = 0x4\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_LOCAL                 = 0x3f\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_MH                    = 0x87\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_QOS                   = 0x2d\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_TP                    = 0x1d\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADDRFORM                 = 0x16\n\tIPV6_ADDR_PREFERENCES         = 0x4a\n\tIPV6_ADD_MEMBERSHIP           = 0xc\n\tIPV6_AIXRAWSOCKET             = 0x39\n\tIPV6_CHECKSUM                 = 0x27\n\tIPV6_DONTFRAG                 = 0x2d\n\tIPV6_DROP_MEMBERSHIP          = 0xd\n\tIPV6_DSTOPTS                  = 0x36\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffffff\n\tIPV6_FLOWINFO_PRIFLOW         = 0xfffffff\n\tIPV6_FLOWINFO_PRIORITY        = 0xf000000\n\tIPV6_FLOWINFO_SRFLAG          = 0x10000000\n\tIPV6_FLOWINFO_VERSION         = 0xf0000000\n\tIPV6_HOPLIMIT                 = 0x28\n\tIPV6_HOPOPTS                  = 0x34\n\tIPV6_JOIN_GROUP               = 0xc\n\tIPV6_LEAVE_GROUP              = 0xd\n\tIPV6_MIPDSTOPTS               = 0x36\n\tIPV6_MULTICAST_HOPS           = 0xa\n\tIPV6_MULTICAST_IF             = 0x9\n\tIPV6_MULTICAST_LOOP           = 0xb\n\tIPV6_NEXTHOP                  = 0x30\n\tIPV6_NOPROBE                  = 0x1c\n\tIPV6_PATHMTU                  = 0x2e\n\tIPV6_PKTINFO                  = 0x21\n\tIPV6_PKTOPTIONS               = 0x24\n\tIPV6_PRIORITY_10              = 0xa000000\n\tIPV6_PRIORITY_11              = 0xb000000\n\tIPV6_PRIORITY_12              = 0xc000000\n\tIPV6_PRIORITY_13              = 0xd000000\n\tIPV6_PRIORITY_14              = 0xe000000\n\tIPV6_PRIORITY_15              = 0xf000000\n\tIPV6_PRIORITY_8               = 0x8000000\n\tIPV6_PRIORITY_9               = 0x9000000\n\tIPV6_PRIORITY_BULK            = 0x4000000\n\tIPV6_PRIORITY_CONTROL         = 0x7000000\n\tIPV6_PRIORITY_FILLER          = 0x1000000\n\tIPV6_PRIORITY_INTERACTIVE     = 0x6000000\n\tIPV6_PRIORITY_RESERVED1       = 0x3000000\n\tIPV6_PRIORITY_RESERVED2       = 0x5000000\n\tIPV6_PRIORITY_UNATTENDED      = 0x2000000\n\tIPV6_PRIORITY_UNCHARACTERIZED = 0x0\n\tIPV6_RECVDSTOPTS              = 0x38\n\tIPV6_RECVHOPLIMIT             = 0x29\n\tIPV6_RECVHOPOPTS              = 0x35\n\tIPV6_RECVHOPS                 = 0x22\n\tIPV6_RECVIF                   = 0x1e\n\tIPV6_RECVPATHMTU              = 0x2f\n\tIPV6_RECVPKTINFO              = 0x23\n\tIPV6_RECVRTHDR                = 0x33\n\tIPV6_RECVSRCRT                = 0x1d\n\tIPV6_RECVTCLASS               = 0x2a\n\tIPV6_RTHDR                    = 0x32\n\tIPV6_RTHDRDSTOPTS             = 0x37\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_RTHDR_TYPE_2             = 0x2\n\tIPV6_SENDIF                   = 0x1f\n\tIPV6_SRFLAG_LOOSE             = 0x0\n\tIPV6_SRFLAG_STRICT            = 0x10000000\n\tIPV6_TCLASS                   = 0x2b\n\tIPV6_TOKEN_LENGTH             = 0x40\n\tIPV6_UNICAST_HOPS             = 0x4\n\tIPV6_USE_MIN_MTU              = 0x2c\n\tIPV6_V6ONLY                   = 0x25\n\tIPV6_VERSION                  = 0x60000000\n\tIP_ADDRFORM                   = 0x16\n\tIP_ADD_MEMBERSHIP             = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x3c\n\tIP_BLOCK_SOURCE               = 0x3a\n\tIP_BROADCAST_IF               = 0x10\n\tIP_CACHE_LINE_SIZE            = 0x80\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPMODE                   = 0x11\n\tIP_DONTFRAG                   = 0x19\n\tIP_DROP_MEMBERSHIP            = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x3d\n\tIP_FINDPMTU                   = 0x1a\n\tIP_HDRINCL                    = 0x2\n\tIP_INC_MEMBERSHIPS            = 0x14\n\tIP_INIT_MEMBERSHIP            = 0x14\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_HOPS             = 0xa\n\tIP_MULTICAST_IF               = 0x9\n\tIP_MULTICAST_LOOP             = 0xb\n\tIP_MULTICAST_TTL              = 0xa\n\tIP_OPT                        = 0x1b\n\tIP_OPTIONS                    = 0x1\n\tIP_PMTUAGE                    = 0x1b\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x14\n\tIP_RECVIFINFO                 = 0xf\n\tIP_RECVINTERFACE              = 0x20\n\tIP_RECVMACHDR                 = 0xe\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVTTL                    = 0x22\n\tIP_RETOPTS                    = 0x8\n\tIP_SOURCE_FILTER              = 0x48\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x3b\n\tIP_UNICAST_HOPS               = 0x4\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x800\n\tIXANY                         = 0x1000\n\tIXOFF                         = 0x400\n\tIXON                          = 0x200\n\tI_FLUSH                       = 0x20005305\n\tLNOFLSH                       = 0x8000\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_NORMAL                   = 0x0\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_SPACEAVAIL               = 0x5\n\tMADV_WILLNEED                 = 0x3\n\tMAP_ANON                      = 0x10\n\tMAP_ANONYMOUS                 = 0x10\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x100\n\tMAP_PRIVATE                   = 0x2\n\tMAP_SHARED                    = 0x1\n\tMAP_TYPE                      = 0xf0\n\tMAP_VARIABLE                  = 0x0\n\tMCAST_BLOCK_SOURCE            = 0x40\n\tMCAST_EXCLUDE                 = 0x2\n\tMCAST_INCLUDE                 = 0x1\n\tMCAST_JOIN_GROUP              = 0x3e\n\tMCAST_JOIN_SOURCE_GROUP       = 0x42\n\tMCAST_LEAVE_GROUP             = 0x3f\n\tMCAST_LEAVE_SOURCE_GROUP      = 0x43\n\tMCAST_SOURCE_FILTER           = 0x49\n\tMCAST_UNBLOCK_SOURCE          = 0x41\n\tMCL_CURRENT                   = 0x100\n\tMCL_FUTURE                    = 0x200\n\tMSG_ANY                       = 0x4\n\tMSG_ARGEXT                    = 0x400\n\tMSG_BAND                      = 0x2\n\tMSG_COMPAT                    = 0x8000\n\tMSG_CTRUNC                    = 0x20\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_EOR                       = 0x8\n\tMSG_HIPRI                     = 0x1\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_MPEG2                     = 0x80\n\tMSG_NONBLOCK                  = 0x4000\n\tMSG_NOSIGNAL                  = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x10\n\tMSG_WAITALL                   = 0x40\n\tMSG_WAITFORONE                = 0x200\n\tMS_ASYNC                      = 0x10\n\tMS_EINTR                      = 0x80\n\tMS_INVALIDATE                 = 0x40\n\tMS_PER_SEC                    = 0x3e8\n\tMS_SYNC                       = 0x20\n\tNFDBITS                       = 0x40\n\tNL0                           = 0x0\n\tNL1                           = 0x4000\n\tNL2                           = 0x8000\n\tNL3                           = 0xc000\n\tNLDLY                         = 0x4000\n\tNOFLSH                        = 0x80\n\tNOFLUSH                       = 0x80000000\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tONOEOT                        = 0x80000\n\tOPOST                         = 0x1\n\tOXTABS                        = 0x40000\n\tO_ACCMODE                     = 0x23\n\tO_APPEND                      = 0x8\n\tO_CIO                         = 0x80\n\tO_CIOR                        = 0x800000000\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DEFER                       = 0x2000\n\tO_DELAY                       = 0x4000\n\tO_DIRECT                      = 0x8000000\n\tO_DIRECTORY                   = 0x80000\n\tO_DSYNC                       = 0x400000\n\tO_EFSOFF                      = 0x400000000\n\tO_EFSON                       = 0x200000000\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x20\n\tO_LARGEFILE                   = 0x4000000\n\tO_NDELAY                      = 0x8000\n\tO_NOCACHE                     = 0x100000\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x1000000\n\tO_NONBLOCK                    = 0x4\n\tO_NONE                        = 0x3\n\tO_NSHARE                      = 0x10000\n\tO_RAW                         = 0x100000000\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSHARE                      = 0x1000\n\tO_RSYNC                       = 0x200000\n\tO_SEARCH                      = 0x20\n\tO_SNAPSHOT                    = 0x40\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_TTY_INIT                    = 0x0\n\tO_WRONLY                      = 0x1\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x20000000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tPR_64BIT                      = 0x20\n\tPR_ADDR                       = 0x2\n\tPR_ARGEXT                     = 0x400\n\tPR_ATOMIC                     = 0x1\n\tPR_CONNREQUIRED               = 0x4\n\tPR_FASTHZ                     = 0x5\n\tPR_INP                        = 0x40\n\tPR_INTRLEVEL                  = 0x8000\n\tPR_MLS                        = 0x100\n\tPR_MLS_1_LABEL                = 0x200\n\tPR_NOEOR                      = 0x4000\n\tPR_RIGHTS                     = 0x10\n\tPR_SLOWHZ                     = 0x2\n\tPR_WANTRCVD                   = 0x8\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x7\n\tRLIMIT_NPROC                  = 0x9\n\tRLIMIT_RSS                    = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0x7fffffffffffffff\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x8\n\tRTAX_NETMASK                  = 0x2\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DOWNSTREAM                = 0x100\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTC_IA64                      = 0x3\n\tRTC_POWER                     = 0x1\n\tRTC_POWER_PC                  = 0x2\n\tRTF_ACTIVE_DGD                = 0x1000000\n\tRTF_BCE                       = 0x80000\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_BROADCAST                 = 0x400000\n\tRTF_BUL                       = 0x2000\n\tRTF_CLONE                     = 0x10000\n\tRTF_CLONED                    = 0x20000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_FREE_IN_PROG              = 0x4000000\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_LLINFO                    = 0x400\n\tRTF_LOCAL                     = 0x200000\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTICAST                 = 0x800000\n\tRTF_PERMANENT6                = 0x8000000\n\tRTF_PINNED                    = 0x100000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_PROTO3                    = 0x40000\n\tRTF_REJECT                    = 0x8\n\tRTF_SMALLMTU                  = 0x40000\n\tRTF_STATIC                    = 0x800\n\tRTF_STOPSRCH                  = 0x2000000\n\tRTF_UNREACHABLE               = 0x10000000\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_EXPIRE                    = 0xf\n\tRTM_GET                       = 0x4\n\tRTM_GETNEXT                   = 0x11\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_RTLOST                    = 0x10\n\tRTM_RTTUNIT                   = 0xf4240\n\tRTM_SAMEADDR                  = 0x12\n\tRTM_SET                       = 0x13\n\tRTM_VERSION                   = 0x2\n\tRTM_VERSION_GR                = 0x4\n\tRTM_VERSION_GR_COMPAT         = 0x3\n\tRTM_VERSION_POLICY            = 0x5\n\tRTM_VERSION_POLICY_EXT        = 0x6\n\tRTM_VERSION_POLICY_PRFN       = 0x7\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tRUSAGE_THREAD                 = 0x1\n\tSCM_RIGHTS                    = 0x1\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIGMAX64                      = 0xff\n\tSIGQUEUE_MAX                  = 0x20\n\tSIOCADDIFVIPA                 = 0x20006942\n\tSIOCADDMTU                    = -0x7ffb9690\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDNETID                  = -0x7fd796a9\n\tSIOCADDRT                     = -0x7fc78df6\n\tSIOCAIFADDR                   = -0x7fbf96e6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fb396e0\n\tSIOCDELIFVIPA                 = 0x20006943\n\tSIOCDELMTU                    = -0x7ffb968f\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELPMTU                   = -0x7fd78ff6\n\tSIOCDELRT                     = -0x7fc78df5\n\tSIOCDIFADDR                   = -0x7fd796e7\n\tSIOCDNETOPT                   = -0x3ffe9680\n\tSIOCDX25XLATE                 = -0x7fd7969b\n\tSIOCFIFADDR                   = -0x7fdf966d\n\tSIOCGARP                      = -0x3fb396da\n\tSIOCGETMTUS                   = 0x2000696f\n\tSIOCGETSGCNT                  = -0x3feb8acc\n\tSIOCGETVIFCNT                 = -0x3feb8acd\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fd796df\n\tSIOCGIFADDRS                  = 0x2000698c\n\tSIOCGIFBAUDRATE               = -0x3fdf9669\n\tSIOCGIFBRDADDR                = -0x3fd796dd\n\tSIOCGIFCONF                   = -0x3fef96bb\n\tSIOCGIFCONFGLOB               = -0x3fef9670\n\tSIOCGIFDSTADDR                = -0x3fd796de\n\tSIOCGIFFLAGS                  = -0x3fd796ef\n\tSIOCGIFGIDLIST                = 0x20006968\n\tSIOCGIFHWADDR                 = -0x3fab966b\n\tSIOCGIFMETRIC                 = -0x3fd796e9\n\tSIOCGIFMTU                    = -0x3fd796aa\n\tSIOCGIFNETMASK                = -0x3fd796db\n\tSIOCGIFOPTIONS                = -0x3fd796d6\n\tSIOCGISNO                     = -0x3fd79695\n\tSIOCGLOADF                    = -0x3ffb967e\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGNETOPT                   = -0x3ffe96a5\n\tSIOCGNETOPT1                  = -0x3fdf967f\n\tSIOCGNMTUS                    = 0x2000696e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSIZIFCONF                = 0x4004696a\n\tSIOCGSRCFILTER                = -0x3fe796cb\n\tSIOCGTUNEPHASE                = -0x3ffb9676\n\tSIOCGX25XLATE                 = -0x3fd7969c\n\tSIOCIFATTACH                  = -0x7fdf9699\n\tSIOCIFDETACH                  = -0x7fdf969a\n\tSIOCIFGETPKEY                 = -0x7fdf969b\n\tSIOCIF_ATM_DARP               = -0x7fdf9683\n\tSIOCIF_ATM_DUMPARP            = -0x7fdf9685\n\tSIOCIF_ATM_GARP               = -0x7fdf9682\n\tSIOCIF_ATM_IDLE               = -0x7fdf9686\n\tSIOCIF_ATM_SARP               = -0x7fdf9681\n\tSIOCIF_ATM_SNMPARP            = -0x7fdf9687\n\tSIOCIF_ATM_SVC                = -0x7fdf9684\n\tSIOCIF_ATM_UBR                = -0x7fdf9688\n\tSIOCIF_DEVHEALTH              = -0x7ffb966c\n\tSIOCIF_IB_ARP_INCOMP          = -0x7fdf9677\n\tSIOCIF_IB_ARP_TIMER           = -0x7fdf9678\n\tSIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f\n\tSIOCIF_IB_DEL_ARP             = -0x7fdf967f\n\tSIOCIF_IB_DEL_PINFO           = -0x3fdf9670\n\tSIOCIF_IB_DUMP_ARP            = -0x7fdf9680\n\tSIOCIF_IB_GET_ARP             = -0x7fdf967e\n\tSIOCIF_IB_GET_INFO            = -0x3f879675\n\tSIOCIF_IB_GET_STATS           = -0x3f879672\n\tSIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a\n\tSIOCIF_IB_RESET_STATS         = -0x3f879671\n\tSIOCIF_IB_RESIZE_CQ           = -0x7fdf9679\n\tSIOCIF_IB_SET_ARP             = -0x7fdf967d\n\tSIOCIF_IB_SET_PKEY            = -0x7fdf967c\n\tSIOCIF_IB_SET_PORT            = -0x7fdf967b\n\tSIOCIF_IB_SET_QKEY            = -0x7fdf9676\n\tSIOCIF_IB_SET_QSIZE           = -0x7fdf967a\n\tSIOCLISTIFVIPA                = 0x20006944\n\tSIOCSARP                      = -0x7fb396e2\n\tSIOCSHIWAT                    = 0xffffffff80047300\n\tSIOCSIFADDR                   = -0x7fd796f4\n\tSIOCSIFADDRORI                = -0x7fdb9673\n\tSIOCSIFBRDADDR                = -0x7fd796ed\n\tSIOCSIFDSTADDR                = -0x7fd796f2\n\tSIOCSIFFLAGS                  = -0x7fd796f0\n\tSIOCSIFGIDLIST                = 0x20006969\n\tSIOCSIFMETRIC                 = -0x7fd796e8\n\tSIOCSIFMTU                    = -0x7fd796a8\n\tSIOCSIFNETDUMP                = -0x7fd796e4\n\tSIOCSIFNETMASK                = -0x7fd796ea\n\tSIOCSIFOPTIONS                = -0x7fd796d7\n\tSIOCSIFSUBCHAN                = -0x7fd796e5\n\tSIOCSISNO                     = -0x7fd79694\n\tSIOCSLOADF                    = -0x3ffb967d\n\tSIOCSLOWAT                    = 0xffffffff80047302\n\tSIOCSNETOPT                   = -0x7ffe96a6\n\tSIOCSPGRP                     = 0xffffffff80047308\n\tSIOCSX25XLATE                 = -0x7fd7969d\n\tSOCK_CONN_DGRAM               = 0x6\n\tSOCK_DGRAM                    = 0x2\n\tSOCK_RAW                      = 0x3\n\tSOCK_RDM                      = 0x4\n\tSOCK_SEQPACKET                = 0x5\n\tSOCK_STREAM                   = 0x1\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x400\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_AUDIT                      = 0x8000\n\tSO_BROADCAST                  = 0x20\n\tSO_CKSUMRECV                  = 0x800\n\tSO_DEBUG                      = 0x1\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROR                      = 0x1007\n\tSO_KEEPALIVE                  = 0x8\n\tSO_KERNACCEPT                 = 0x2000\n\tSO_LINGER                     = 0x80\n\tSO_NOMULTIPATH                = 0x4000\n\tSO_NOREUSEADDR                = 0x1000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PEERID                     = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_REUSEADDR                  = 0x4\n\tSO_REUSEPORT                  = 0x200\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_TIMESTAMPNS                = 0x100a\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_USE_IFBUFS                 = 0x400\n\tS_BANDURG                     = 0x400\n\tS_EMODFMT                     = 0x3c000000\n\tS_ENFMT                       = 0x400\n\tS_ERROR                       = 0x100\n\tS_HANGUP                      = 0x200\n\tS_HIPRI                       = 0x2\n\tS_ICRYPTO                     = 0x80000\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFIFO                       = 0x1000\n\tS_IFJOURNAL                   = 0x10000\n\tS_IFLNK                       = 0xa000\n\tS_IFMPX                       = 0x2200\n\tS_IFMT                        = 0xf000\n\tS_IFPDIR                      = 0x4000000\n\tS_IFPSDIR                     = 0x8000000\n\tS_IFPSSDIR                    = 0xc000000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_IFSYSEA                     = 0x30000000\n\tS_INPUT                       = 0x1\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_ITCB                        = 0x1000000\n\tS_ITP                         = 0x800000\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXACL                       = 0x2000000\n\tS_IXATTR                      = 0x40000\n\tS_IXGRP                       = 0x8\n\tS_IXINTERFACE                 = 0x100000\n\tS_IXMOD                       = 0x40000000\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tS_MSG                         = 0x8\n\tS_OUTPUT                      = 0x4\n\tS_RDBAND                      = 0x20\n\tS_RDNORM                      = 0x10\n\tS_RESERVED1                   = 0x20000\n\tS_RESERVED2                   = 0x200000\n\tS_RESERVED3                   = 0x400000\n\tS_RESERVED4                   = 0x80000000\n\tS_RESFMT1                     = 0x10000000\n\tS_RESFMT10                    = 0x34000000\n\tS_RESFMT11                    = 0x38000000\n\tS_RESFMT12                    = 0x3c000000\n\tS_RESFMT2                     = 0x14000000\n\tS_RESFMT3                     = 0x18000000\n\tS_RESFMT4                     = 0x1c000000\n\tS_RESFMT5                     = 0x20000000\n\tS_RESFMT6                     = 0x24000000\n\tS_RESFMT7                     = 0x28000000\n\tS_RESFMT8                     = 0x2c000000\n\tS_WRBAND                      = 0x80\n\tS_WRNORM                      = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x400\n\tTAB2                          = 0x800\n\tTAB3                          = 0xc00\n\tTABDLY                        = 0xc00\n\tTCFLSH                        = 0x540c\n\tTCGETA                        = 0x5405\n\tTCGETS                        = 0x5401\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800\n\tTCP_ACLADD                    = 0x23\n\tTCP_ACLBIND                   = 0x26\n\tTCP_ACLCLEAR                  = 0x22\n\tTCP_ACLDEL                    = 0x24\n\tTCP_ACLDENY                   = 0x8\n\tTCP_ACLFLUSH                  = 0x21\n\tTCP_ACLGID                    = 0x1\n\tTCP_ACLLS                     = 0x25\n\tTCP_ACLSUBNET                 = 0x4\n\tTCP_ACLUID                    = 0x2\n\tTCP_CWND_DF                   = 0x16\n\tTCP_CWND_IF                   = 0x15\n\tTCP_DELAY_ACK_FIN             = 0x2\n\tTCP_DELAY_ACK_SYN             = 0x1\n\tTCP_FASTNAME                  = 0x101080a\n\tTCP_KEEPCNT                   = 0x13\n\tTCP_KEEPIDLE                  = 0x11\n\tTCP_KEEPINTVL                 = 0x12\n\tTCP_LSPRIV                    = 0x29\n\tTCP_LUID                      = 0x20\n\tTCP_MAXBURST                  = 0x8\n\tTCP_MAXDF                     = 0x64\n\tTCP_MAXIF                     = 0x64\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MAXWIN                    = 0xffff\n\tTCP_MAXWINDOWSCALE            = 0xe\n\tTCP_MAX_SACK                  = 0x4\n\tTCP_MSS                       = 0x5b4\n\tTCP_NODELAY                   = 0x1\n\tTCP_NODELAYACK                = 0x14\n\tTCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19\n\tTCP_NOREDUCE_CWND_IN_FRXMT    = 0x18\n\tTCP_NOTENTER_SSTART           = 0x17\n\tTCP_OPT                       = 0x19\n\tTCP_RFC1323                   = 0x4\n\tTCP_SETPRIV                   = 0x27\n\tTCP_STDURG                    = 0x10\n\tTCP_TIMESTAMP_OPTLEN          = 0xc\n\tTCP_UNSETPRIV                 = 0x28\n\tTCSAFLUSH                     = 0x2\n\tTCSBRK                        = 0x5409\n\tTCSETA                        = 0x5406\n\tTCSETAF                       = 0x5408\n\tTCSETAW                       = 0x5407\n\tTCSETS                        = 0x5402\n\tTCSETSF                       = 0x5404\n\tTCSETSW                       = 0x5403\n\tTCXONC                        = 0x540b\n\tTIMER_ABSTIME                 = 0x3e7\n\tTIMER_MAX                     = 0x20\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x2000747a\n\tTIOCCDTR                      = 0x20007478\n\tTIOCCONS                      = 0xffffffff80047462\n\tTIOCEXCL                      = 0x2000740d\n\tTIOCFLUSH                     = 0xffffffff80047410\n\tTIOCGETC                      = 0x40067412\n\tTIOCGETD                      = 0x40047400\n\tTIOCGETP                      = 0x40067408\n\tTIOCGLTC                      = 0x40067474\n\tTIOCGPGRP                     = 0x40047477\n\tTIOCGSID                      = 0x40047448\n\tTIOCGSIZE                     = 0x40087468\n\tTIOCGWINSZ                    = 0x40087468\n\tTIOCHPCL                      = 0x20007402\n\tTIOCLBIC                      = 0xffffffff8004747e\n\tTIOCLBIS                      = 0xffffffff8004747f\n\tTIOCLGET                      = 0x4004747c\n\tTIOCLSET                      = 0xffffffff8004747d\n\tTIOCMBIC                      = 0xffffffff8004746b\n\tTIOCMBIS                      = 0xffffffff8004746c\n\tTIOCMGET                      = 0x4004746a\n\tTIOCMIWAIT                    = 0xffffffff80047464\n\tTIOCMODG                      = 0x40047403\n\tTIOCMODS                      = 0xffffffff80047404\n\tTIOCMSET                      = 0xffffffff8004746d\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x20007471\n\tTIOCNXCL                      = 0x2000740e\n\tTIOCOUTQ                      = 0x40047473\n\tTIOCPKT                       = 0xffffffff80047470\n\tTIOCPKT_DATA                  = 0x0\n\tTIOCPKT_DOSTOP                = 0x20\n\tTIOCPKT_FLUSHREAD             = 0x1\n\tTIOCPKT_FLUSHWRITE            = 0x2\n\tTIOCPKT_NOSTOP                = 0x10\n\tTIOCPKT_START                 = 0x8\n\tTIOCPKT_STOP                  = 0x4\n\tTIOCREMOTE                    = 0xffffffff80047469\n\tTIOCSBRK                      = 0x2000747b\n\tTIOCSDTR                      = 0x20007479\n\tTIOCSETC                      = 0xffffffff80067411\n\tTIOCSETD                      = 0xffffffff80047401\n\tTIOCSETN                      = 0xffffffff8006740a\n\tTIOCSETP                      = 0xffffffff80067409\n\tTIOCSLTC                      = 0xffffffff80067475\n\tTIOCSPGRP                     = 0xffffffff80047476\n\tTIOCSSIZE                     = 0xffffffff80087467\n\tTIOCSTART                     = 0x2000746e\n\tTIOCSTI                       = 0xffffffff80017472\n\tTIOCSTOP                      = 0x2000746f\n\tTIOCSWINSZ                    = 0xffffffff80087467\n\tTIOCUCNTL                     = 0xffffffff80047466\n\tTOSTOP                        = 0x10000\n\tUTIME_NOW                     = -0x2\n\tUTIME_OMIT                    = -0x3\n\tVDISCRD                       = 0xc\n\tVDSUSP                        = 0xa\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xe\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xb\n\tVSTART                        = 0x7\n\tVSTOP                         = 0x8\n\tVSTRT                         = 0x7\n\tVSUSP                         = 0x9\n\tVT0                           = 0x0\n\tVT1                           = 0x8000\n\tVTDELAY                       = 0x2000\n\tVTDLY                         = 0x8000\n\tVTIME                         = 0x5\n\tVWERSE                        = 0xd\n\tWPARSTART                     = 0x1\n\tWPARSTOP                      = 0x2\n\tWPARTTYNAME                   = \"Global\"\n\tXCASE                         = 0x4\n\tXTABS                         = 0xc00\n\t_FDATAFLUSH                   = 0x2000000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x43)\n\tEADDRNOTAVAIL   = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x42)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x38)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x78)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x75)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECLONEME        = syscall.Errno(0x52)\n\tECONNABORTED    = syscall.Errno(0x48)\n\tECONNREFUSED    = syscall.Errno(0x4f)\n\tECONNRESET      = syscall.Errno(0x49)\n\tECORRUPT        = syscall.Errno(0x59)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDESTADDREQ     = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x3a)\n\tEDIST           = syscall.Errno(0x35)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x58)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFORMAT         = syscall.Errno(0x30)\n\tEHOSTDOWN       = syscall.Errno(0x50)\n\tEHOSTUNREACH    = syscall.Errno(0x51)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x74)\n\tEINPROGRESS     = syscall.Errno(0x37)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x4b)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x55)\n\tEMEDIA          = syscall.Errno(0x6e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x3b)\n\tEMULTIHOP       = syscall.Errno(0x7d)\n\tENAMETOOLONG    = syscall.Errno(0x56)\n\tENETDOWN        = syscall.Errno(0x45)\n\tENETRESET       = syscall.Errno(0x47)\n\tENETUNREACH     = syscall.Errno(0x46)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x70)\n\tENOBUFS         = syscall.Errno(0x4a)\n\tENOCONNECT      = syscall.Errno(0x32)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x7a)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x31)\n\tENOLINK         = syscall.Errno(0x7e)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENOPROTOOPT     = syscall.Errno(0x3d)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x76)\n\tENOSTR          = syscall.Errno(0x7b)\n\tENOSYS          = syscall.Errno(0x6d)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x4c)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x11)\n\tENOTREADY       = syscall.Errno(0x2e)\n\tENOTRECOVERABLE = syscall.Errno(0x5e)\n\tENOTRUST        = syscall.Errno(0x72)\n\tENOTSOCK        = syscall.Errno(0x39)\n\tENOTSUP         = syscall.Errno(0x7c)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x40)\n\tEOVERFLOW       = syscall.Errno(0x7f)\n\tEOWNERDEAD      = syscall.Errno(0x5f)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x41)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x53)\n\tEPROTO          = syscall.Errno(0x79)\n\tEPROTONOSUPPORT = syscall.Errno(0x3e)\n\tEPROTOTYPE      = syscall.Errno(0x3c)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x5d)\n\tERESTART        = syscall.Errno(0x52)\n\tEROFS           = syscall.Errno(0x1e)\n\tESAD            = syscall.Errno(0x71)\n\tESHUTDOWN       = syscall.Errno(0x4d)\n\tESOCKTNOSUPPORT = syscall.Errno(0x3f)\n\tESOFT           = syscall.Errno(0x6f)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x34)\n\tESYSERROR       = syscall.Errno(0x5a)\n\tETIME           = syscall.Errno(0x77)\n\tETIMEDOUT       = syscall.Errno(0x4e)\n\tETOOMANYREFS    = syscall.Errno(0x73)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x54)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEWRPROTECT      = syscall.Errno(0x2f)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGAIO      = syscall.Signal(0x17)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGALRM1    = syscall.Signal(0x26)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCAPI     = syscall.Signal(0x31)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCLD      = syscall.Signal(0x14)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGCPUFAIL  = syscall.Signal(0x3b)\n\tSIGDANGER   = syscall.Signal(0x21)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGGRANT    = syscall.Signal(0x3c)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOINT    = syscall.Signal(0x10)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKAP      = syscall.Signal(0x3c)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGLOST     = syscall.Signal(0x6)\n\tSIGMAX      = syscall.Signal(0xff)\n\tSIGMAX32    = syscall.Signal(0x3f)\n\tSIGMIGRATE  = syscall.Signal(0x23)\n\tSIGMSG      = syscall.Signal(0x1b)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPOLL     = syscall.Signal(0x17)\n\tSIGPRE      = syscall.Signal(0x24)\n\tSIGPROF     = syscall.Signal(0x20)\n\tSIGPTY      = syscall.Signal(0x17)\n\tSIGPWR      = syscall.Signal(0x1d)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGRECONFIG = syscall.Signal(0x3a)\n\tSIGRETRACT  = syscall.Signal(0x3d)\n\tSIGSAK      = syscall.Signal(0x3f)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSOUND    = syscall.Signal(0x3e)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGSYSERROR = syscall.Signal(0x30)\n\tSIGTALRM    = syscall.Signal(0x26)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVIRT     = syscall.Signal(0x25)\n\tSIGVTALRM   = syscall.Signal(0x22)\n\tSIGWAITING  = syscall.Signal(0x27)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"ENOTEMPTY\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"not a typewriter\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock condition if locked\"},\n\t{46, \"ENOTREADY\", \"device not ready\"},\n\t{47, \"EWRPROTECT\", \"write-protected media\"},\n\t{48, \"EFORMAT\", \"unformatted or incompatible media\"},\n\t{49, \"ENOLCK\", \"no locks available\"},\n\t{50, \"ENOCONNECT\", \"cannot Establish Connection\"},\n\t{52, \"ESTALE\", \"missing file or filesystem\"},\n\t{53, \"EDIST\", \"requests blocked by Administrator\"},\n\t{55, \"EINPROGRESS\", \"operation now in progress\"},\n\t{56, \"EALREADY\", \"operation already in progress\"},\n\t{57, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{58, \"EDESTADDREQ\", \"destination address required\"},\n\t{59, \"EMSGSIZE\", \"message too long\"},\n\t{60, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{61, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{62, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{63, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{64, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{65, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{66, \"EAFNOSUPPORT\", \"addr family not supported by protocol\"},\n\t{67, \"EADDRINUSE\", \"address already in use\"},\n\t{68, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{69, \"ENETDOWN\", \"network is down\"},\n\t{70, \"ENETUNREACH\", \"network is unreachable\"},\n\t{71, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{72, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{73, \"ECONNRESET\", \"connection reset by peer\"},\n\t{74, \"ENOBUFS\", \"no buffer space available\"},\n\t{75, \"EISCONN\", \"socket is already connected\"},\n\t{76, \"ENOTCONN\", \"socket is not connected\"},\n\t{77, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{78, \"ETIMEDOUT\", \"connection timed out\"},\n\t{79, \"ECONNREFUSED\", \"connection refused\"},\n\t{80, \"EHOSTDOWN\", \"host is down\"},\n\t{81, \"EHOSTUNREACH\", \"no route to host\"},\n\t{82, \"ERESTART\", \"restart the system call\"},\n\t{83, \"EPROCLIM\", \"too many processes\"},\n\t{84, \"EUSERS\", \"too many users\"},\n\t{85, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{86, \"ENAMETOOLONG\", \"file name too long\"},\n\t{88, \"EDQUOT\", \"disk quota exceeded\"},\n\t{89, \"ECORRUPT\", \"invalid file system control data detected\"},\n\t{90, \"ESYSERROR\", \"for future use \"},\n\t{93, \"EREMOTE\", \"item is not local to host\"},\n\t{94, \"ENOTRECOVERABLE\", \"state not recoverable \"},\n\t{95, \"EOWNERDEAD\", \"previous owner died \"},\n\t{109, \"ENOSYS\", \"function not implemented\"},\n\t{110, \"EMEDIA\", \"media surface error\"},\n\t{111, \"ESOFT\", \"I/O completed, but needs relocation\"},\n\t{112, \"ENOATTR\", \"no attribute found\"},\n\t{113, \"ESAD\", \"security Authentication Denied\"},\n\t{114, \"ENOTRUST\", \"not a Trusted Program\"},\n\t{115, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{116, \"EILSEQ\", \"invalid wide character\"},\n\t{117, \"ECANCELED\", \"asynchronous I/O cancelled\"},\n\t{118, \"ENOSR\", \"out of STREAMS resources\"},\n\t{119, \"ETIME\", \"system call timed out\"},\n\t{120, \"EBADMSG\", \"next message has wrong type\"},\n\t{121, \"EPROTO\", \"error in protocol\"},\n\t{122, \"ENODATA\", \"no message on stream head read q\"},\n\t{123, \"ENOSTR\", \"fd not associated with a stream\"},\n\t{124, \"ENOTSUP\", \"unsupported attribute value\"},\n\t{125, \"EMULTIHOP\", \"multihop is not allowed\"},\n\t{126, \"ENOLINK\", \"the server link has been severed\"},\n\t{127, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"IOT/Abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible/complete\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{27, \"SIGMSG\", \"input device data\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGPWR\", \"power-failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"paging space low\"},\n\t{34, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{35, \"SIGMIGRATE\", \"signal 35\"},\n\t{36, \"SIGPRE\", \"signal 36\"},\n\t{37, \"SIGVIRT\", \"signal 37\"},\n\t{38, \"SIGTALRM\", \"signal 38\"},\n\t{39, \"SIGWAITING\", \"signal 39\"},\n\t{48, \"SIGSYSERROR\", \"signal 48\"},\n\t{49, \"SIGCAPI\", \"signal 49\"},\n\t{58, \"SIGRECONFIG\", \"signal 58\"},\n\t{59, \"SIGCPUFAIL\", \"CPU Failure Predicted\"},\n\t{60, \"SIGGRANT\", \"monitor mode granted\"},\n\t{61, \"SIGRETRACT\", \"monitor mode retracted\"},\n\t{62, \"SIGSOUND\", \"sound completed\"},\n\t{63, \"SIGMAX32\", \"secure attention\"},\n\t{255, \"SIGMAX\", \"signal 255\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && darwin\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                            = 0x10\n\tAF_CCITT                                = 0xa\n\tAF_CHAOS                                = 0x5\n\tAF_CNT                                  = 0x15\n\tAF_COIP                                 = 0x14\n\tAF_DATAKIT                              = 0x9\n\tAF_DECnet                               = 0xc\n\tAF_DLI                                  = 0xd\n\tAF_E164                                 = 0x1c\n\tAF_ECMA                                 = 0x8\n\tAF_HYLINK                               = 0xf\n\tAF_IEEE80211                            = 0x25\n\tAF_IMPLINK                              = 0x3\n\tAF_INET                                 = 0x2\n\tAF_INET6                                = 0x1e\n\tAF_IPX                                  = 0x17\n\tAF_ISDN                                 = 0x1c\n\tAF_ISO                                  = 0x7\n\tAF_LAT                                  = 0xe\n\tAF_LINK                                 = 0x12\n\tAF_LOCAL                                = 0x1\n\tAF_MAX                                  = 0x29\n\tAF_NATM                                 = 0x1f\n\tAF_NDRV                                 = 0x1b\n\tAF_NETBIOS                              = 0x21\n\tAF_NS                                   = 0x6\n\tAF_OSI                                  = 0x7\n\tAF_PPP                                  = 0x22\n\tAF_PUP                                  = 0x4\n\tAF_RESERVED_36                          = 0x24\n\tAF_ROUTE                                = 0x11\n\tAF_SIP                                  = 0x18\n\tAF_SNA                                  = 0xb\n\tAF_SYSTEM                               = 0x20\n\tAF_SYS_CONTROL                          = 0x2\n\tAF_UNIX                                 = 0x1\n\tAF_UNSPEC                               = 0x0\n\tAF_UTUN                                 = 0x26\n\tAF_VSOCK                                = 0x28\n\tALTWERASE                               = 0x200\n\tATTR_BIT_MAP_COUNT                      = 0x5\n\tATTR_CMN_ACCESSMASK                     = 0x20000\n\tATTR_CMN_ACCTIME                        = 0x1000\n\tATTR_CMN_ADDEDTIME                      = 0x10000000\n\tATTR_CMN_BKUPTIME                       = 0x2000\n\tATTR_CMN_CHGTIME                        = 0x800\n\tATTR_CMN_CRTIME                         = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS             = 0x40000000\n\tATTR_CMN_DEVID                          = 0x2\n\tATTR_CMN_DOCUMENT_ID                    = 0x100000\n\tATTR_CMN_ERROR                          = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY              = 0x400000\n\tATTR_CMN_FILEID                         = 0x2000000\n\tATTR_CMN_FLAGS                          = 0x40000\n\tATTR_CMN_FNDRINFO                       = 0x4000\n\tATTR_CMN_FSID                           = 0x4\n\tATTR_CMN_FULLPATH                       = 0x8000000\n\tATTR_CMN_GEN_COUNT                      = 0x80000\n\tATTR_CMN_GRPID                          = 0x10000\n\tATTR_CMN_GRPUUID                        = 0x1000000\n\tATTR_CMN_MODTIME                        = 0x400\n\tATTR_CMN_NAME                           = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT                 = 0x80000\n\tATTR_CMN_NAMEDATTRLIST                  = 0x100000\n\tATTR_CMN_OBJID                          = 0x20\n\tATTR_CMN_OBJPERMANENTID                 = 0x40\n\tATTR_CMN_OBJTAG                         = 0x10\n\tATTR_CMN_OBJTYPE                        = 0x8\n\tATTR_CMN_OWNERID                        = 0x8000\n\tATTR_CMN_PARENTID                       = 0x4000000\n\tATTR_CMN_PAROBJID                       = 0x80\n\tATTR_CMN_RETURNED_ATTRS                 = 0x80000000\n\tATTR_CMN_SCRIPT                         = 0x100\n\tATTR_CMN_SETMASK                        = 0x51c7ff00\n\tATTR_CMN_USERACCESS                     = 0x200000\n\tATTR_CMN_UUID                           = 0x800000\n\tATTR_CMN_VALIDMASK                      = 0xffffffff\n\tATTR_CMN_VOLSETMASK                     = 0x6700\n\tATTR_FILE_ALLOCSIZE                     = 0x4\n\tATTR_FILE_CLUMPSIZE                     = 0x10\n\tATTR_FILE_DATAALLOCSIZE                 = 0x400\n\tATTR_FILE_DATAEXTENTS                   = 0x800\n\tATTR_FILE_DATALENGTH                    = 0x200\n\tATTR_FILE_DEVTYPE                       = 0x20\n\tATTR_FILE_FILETYPE                      = 0x40\n\tATTR_FILE_FORKCOUNT                     = 0x80\n\tATTR_FILE_FORKLIST                      = 0x100\n\tATTR_FILE_IOBLOCKSIZE                   = 0x8\n\tATTR_FILE_LINKCOUNT                     = 0x1\n\tATTR_FILE_RSRCALLOCSIZE                 = 0x2000\n\tATTR_FILE_RSRCEXTENTS                   = 0x4000\n\tATTR_FILE_RSRCLENGTH                    = 0x1000\n\tATTR_FILE_SETMASK                       = 0x20\n\tATTR_FILE_TOTALSIZE                     = 0x2\n\tATTR_FILE_VALIDMASK                     = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP                = 0x40\n\tATTR_VOL_ATTRIBUTES                     = 0x40000000\n\tATTR_VOL_CAPABILITIES                   = 0x20000\n\tATTR_VOL_DIRCOUNT                       = 0x400\n\tATTR_VOL_ENCODINGSUSED                  = 0x10000\n\tATTR_VOL_FILECOUNT                      = 0x200\n\tATTR_VOL_FSTYPE                         = 0x1\n\tATTR_VOL_INFO                           = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE                    = 0x80\n\tATTR_VOL_MAXOBJCOUNT                    = 0x800\n\tATTR_VOL_MINALLOCATION                  = 0x20\n\tATTR_VOL_MOUNTEDDEVICE                  = 0x8000\n\tATTR_VOL_MOUNTFLAGS                     = 0x4000\n\tATTR_VOL_MOUNTPOINT                     = 0x1000\n\tATTR_VOL_NAME                           = 0x2000\n\tATTR_VOL_OBJCOUNT                       = 0x100\n\tATTR_VOL_QUOTA_SIZE                     = 0x10000000\n\tATTR_VOL_RESERVED_SIZE                  = 0x20000000\n\tATTR_VOL_SETMASK                        = 0x80002000\n\tATTR_VOL_SIGNATURE                      = 0x2\n\tATTR_VOL_SIZE                           = 0x4\n\tATTR_VOL_SPACEAVAIL                     = 0x10\n\tATTR_VOL_SPACEFREE                      = 0x8\n\tATTR_VOL_SPACEUSED                      = 0x800000\n\tATTR_VOL_UUID                           = 0x40000\n\tATTR_VOL_VALIDMASK                      = 0xf087ffff\n\tB0                                      = 0x0\n\tB110                                    = 0x6e\n\tB115200                                 = 0x1c200\n\tB1200                                   = 0x4b0\n\tB134                                    = 0x86\n\tB14400                                  = 0x3840\n\tB150                                    = 0x96\n\tB1800                                   = 0x708\n\tB19200                                  = 0x4b00\n\tB200                                    = 0xc8\n\tB230400                                 = 0x38400\n\tB2400                                   = 0x960\n\tB28800                                  = 0x7080\n\tB300                                    = 0x12c\n\tB38400                                  = 0x9600\n\tB4800                                   = 0x12c0\n\tB50                                     = 0x32\n\tB57600                                  = 0xe100\n\tB600                                    = 0x258\n\tB7200                                   = 0x1c20\n\tB75                                     = 0x4b\n\tB76800                                  = 0x12c00\n\tB9600                                   = 0x2580\n\tBIOCFLUSH                               = 0x20004268\n\tBIOCGBLEN                               = 0x40044266\n\tBIOCGDLT                                = 0x4004426a\n\tBIOCGDLTLIST                            = 0xc00c4279\n\tBIOCGETIF                               = 0x4020426b\n\tBIOCGHDRCMPLT                           = 0x40044274\n\tBIOCGRSIG                               = 0x40044272\n\tBIOCGRTIMEOUT                           = 0x4010426e\n\tBIOCGSEESENT                            = 0x40044276\n\tBIOCGSTATS                              = 0x4008426f\n\tBIOCIMMEDIATE                           = 0x80044270\n\tBIOCPROMISC                             = 0x20004269\n\tBIOCSBLEN                               = 0xc0044266\n\tBIOCSDLT                                = 0x80044278\n\tBIOCSETF                                = 0x80104267\n\tBIOCSETFNR                              = 0x8010427e\n\tBIOCSETIF                               = 0x8020426c\n\tBIOCSHDRCMPLT                           = 0x80044275\n\tBIOCSRSIG                               = 0x80044273\n\tBIOCSRTIMEOUT                           = 0x8010426d\n\tBIOCSSEESENT                            = 0x80044277\n\tBIOCVERSION                             = 0x40044271\n\tBPF_A                                   = 0x10\n\tBPF_ABS                                 = 0x20\n\tBPF_ADD                                 = 0x0\n\tBPF_ALIGNMENT                           = 0x4\n\tBPF_ALU                                 = 0x4\n\tBPF_AND                                 = 0x50\n\tBPF_B                                   = 0x10\n\tBPF_DIV                                 = 0x30\n\tBPF_H                                   = 0x8\n\tBPF_IMM                                 = 0x0\n\tBPF_IND                                 = 0x40\n\tBPF_JA                                  = 0x0\n\tBPF_JEQ                                 = 0x10\n\tBPF_JGE                                 = 0x30\n\tBPF_JGT                                 = 0x20\n\tBPF_JMP                                 = 0x5\n\tBPF_JSET                                = 0x40\n\tBPF_K                                   = 0x0\n\tBPF_LD                                  = 0x0\n\tBPF_LDX                                 = 0x1\n\tBPF_LEN                                 = 0x80\n\tBPF_LSH                                 = 0x60\n\tBPF_MAJOR_VERSION                       = 0x1\n\tBPF_MAXBUFSIZE                          = 0x80000\n\tBPF_MAXINSNS                            = 0x200\n\tBPF_MEM                                 = 0x60\n\tBPF_MEMWORDS                            = 0x10\n\tBPF_MINBUFSIZE                          = 0x20\n\tBPF_MINOR_VERSION                       = 0x1\n\tBPF_MISC                                = 0x7\n\tBPF_MSH                                 = 0xa0\n\tBPF_MUL                                 = 0x20\n\tBPF_NEG                                 = 0x80\n\tBPF_OR                                  = 0x40\n\tBPF_RELEASE                             = 0x30bb6\n\tBPF_RET                                 = 0x6\n\tBPF_RSH                                 = 0x70\n\tBPF_ST                                  = 0x2\n\tBPF_STX                                 = 0x3\n\tBPF_SUB                                 = 0x10\n\tBPF_TAX                                 = 0x0\n\tBPF_TXA                                 = 0x80\n\tBPF_W                                   = 0x0\n\tBPF_X                                   = 0x8\n\tBRKINT                                  = 0x2\n\tBS0                                     = 0x0\n\tBS1                                     = 0x8000\n\tBSDLY                                   = 0x8000\n\tCFLUSH                                  = 0xf\n\tCLOCAL                                  = 0x8000\n\tCLOCK_MONOTONIC                         = 0x6\n\tCLOCK_MONOTONIC_RAW                     = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX              = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID                = 0xc\n\tCLOCK_REALTIME                          = 0x0\n\tCLOCK_THREAD_CPUTIME_ID                 = 0x10\n\tCLOCK_UPTIME_RAW                        = 0x8\n\tCLOCK_UPTIME_RAW_APPROX                 = 0x9\n\tCLONE_NOFOLLOW                          = 0x1\n\tCLONE_NOOWNERCOPY                       = 0x2\n\tCONNECT_DATA_AUTHENTICATED              = 0x4\n\tCONNECT_DATA_IDEMPOTENT                 = 0x2\n\tCONNECT_RESUME_ON_READ_WRITE            = 0x1\n\tCR0                                     = 0x0\n\tCR1                                     = 0x1000\n\tCR2                                     = 0x2000\n\tCR3                                     = 0x3000\n\tCRDLY                                   = 0x3000\n\tCREAD                                   = 0x800\n\tCRTSCTS                                 = 0x30000\n\tCS5                                     = 0x0\n\tCS6                                     = 0x100\n\tCS7                                     = 0x200\n\tCS8                                     = 0x300\n\tCSIZE                                   = 0x300\n\tCSTART                                  = 0x11\n\tCSTATUS                                 = 0x14\n\tCSTOP                                   = 0x13\n\tCSTOPB                                  = 0x400\n\tCSUSP                                   = 0x1a\n\tCTLIOCGINFO                             = 0xc0644e03\n\tCTL_HW                                  = 0x6\n\tCTL_KERN                                = 0x1\n\tCTL_MAXNAME                             = 0xc\n\tCTL_NET                                 = 0x4\n\tDLT_A429                                = 0xb8\n\tDLT_A653_ICM                            = 0xb9\n\tDLT_AIRONET_HEADER                      = 0x78\n\tDLT_AOS                                 = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394              = 0x8a\n\tDLT_ARCNET                              = 0x7\n\tDLT_ARCNET_LINUX                        = 0x81\n\tDLT_ATM_CLIP                            = 0x13\n\tDLT_ATM_RFC1483                         = 0xb\n\tDLT_AURORA                              = 0x7e\n\tDLT_AX25                                = 0x3\n\tDLT_AX25_KISS                           = 0xca\n\tDLT_BACNET_MS_TP                        = 0xa5\n\tDLT_BLUETOOTH_HCI_H4                    = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR          = 0xc9\n\tDLT_CAN20B                              = 0xbe\n\tDLT_CAN_SOCKETCAN                       = 0xe3\n\tDLT_CHAOS                               = 0x5\n\tDLT_CHDLC                               = 0x68\n\tDLT_CISCO_IOS                           = 0x76\n\tDLT_C_HDLC                              = 0x68\n\tDLT_C_HDLC_WITH_DIR                     = 0xcd\n\tDLT_DBUS                                = 0xe7\n\tDLT_DECT                                = 0xdd\n\tDLT_DOCSIS                              = 0x8f\n\tDLT_DVB_CI                              = 0xeb\n\tDLT_ECONET                              = 0x73\n\tDLT_EN10MB                              = 0x1\n\tDLT_EN3MB                               = 0x2\n\tDLT_ENC                                 = 0x6d\n\tDLT_ERF                                 = 0xc5\n\tDLT_ERF_ETH                             = 0xaf\n\tDLT_ERF_POS                             = 0xb0\n\tDLT_FC_2                                = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS              = 0xe1\n\tDLT_FDDI                                = 0xa\n\tDLT_FLEXRAY                             = 0xd2\n\tDLT_FRELAY                              = 0x6b\n\tDLT_FRELAY_WITH_DIR                     = 0xce\n\tDLT_GCOM_SERIAL                         = 0xad\n\tDLT_GCOM_T1E1                           = 0xac\n\tDLT_GPF_F                               = 0xab\n\tDLT_GPF_T                               = 0xaa\n\tDLT_GPRS_LLC                            = 0xa9\n\tDLT_GSMTAP_ABIS                         = 0xda\n\tDLT_GSMTAP_UM                           = 0xd9\n\tDLT_HHDLC                               = 0x79\n\tDLT_IBM_SN                              = 0x92\n\tDLT_IBM_SP                              = 0x91\n\tDLT_IEEE802                             = 0x6\n\tDLT_IEEE802_11                          = 0x69\n\tDLT_IEEE802_11_RADIO                    = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS                = 0xa3\n\tDLT_IEEE802_15_4                        = 0xc3\n\tDLT_IEEE802_15_4_LINUX                  = 0xbf\n\tDLT_IEEE802_15_4_NOFCS                  = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY             = 0xd7\n\tDLT_IEEE802_16_MAC_CPS                  = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO            = 0xc1\n\tDLT_IPFILTER                            = 0x74\n\tDLT_IPMB                                = 0xc7\n\tDLT_IPMB_LINUX                          = 0xd1\n\tDLT_IPNET                               = 0xe2\n\tDLT_IPOIB                               = 0xf2\n\tDLT_IPV4                                = 0xe4\n\tDLT_IPV6                                = 0xe5\n\tDLT_IP_OVER_FC                          = 0x7a\n\tDLT_JUNIPER_ATM1                        = 0x89\n\tDLT_JUNIPER_ATM2                        = 0x87\n\tDLT_JUNIPER_ATM_CEMIC                   = 0xee\n\tDLT_JUNIPER_CHDLC                       = 0xb5\n\tDLT_JUNIPER_ES                          = 0x84\n\tDLT_JUNIPER_ETHER                       = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL                = 0xea\n\tDLT_JUNIPER_FRELAY                      = 0xb4\n\tDLT_JUNIPER_GGSN                        = 0x85\n\tDLT_JUNIPER_ISM                         = 0xc2\n\tDLT_JUNIPER_MFR                         = 0x86\n\tDLT_JUNIPER_MLFR                        = 0x83\n\tDLT_JUNIPER_MLPPP                       = 0x82\n\tDLT_JUNIPER_MONITOR                     = 0xa4\n\tDLT_JUNIPER_PIC_PEER                    = 0xae\n\tDLT_JUNIPER_PPP                         = 0xb3\n\tDLT_JUNIPER_PPPOE                       = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM                   = 0xa8\n\tDLT_JUNIPER_SERVICES                    = 0x88\n\tDLT_JUNIPER_SRX_E2E                     = 0xe9\n\tDLT_JUNIPER_ST                          = 0xc8\n\tDLT_JUNIPER_VP                          = 0xb7\n\tDLT_JUNIPER_VS                          = 0xe8\n\tDLT_LAPB_WITH_DIR                       = 0xcf\n\tDLT_LAPD                                = 0xcb\n\tDLT_LIN                                 = 0xd4\n\tDLT_LINUX_EVDEV                         = 0xd8\n\tDLT_LINUX_IRDA                          = 0x90\n\tDLT_LINUX_LAPD                          = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION             = 0xa6\n\tDLT_LINUX_SLL                           = 0x71\n\tDLT_LOOP                                = 0x6c\n\tDLT_LTALK                               = 0x72\n\tDLT_MATCHING_MAX                        = 0x10a\n\tDLT_MATCHING_MIN                        = 0x68\n\tDLT_MFR                                 = 0xb6\n\tDLT_MOST                                = 0xd3\n\tDLT_MPEG_2_TS                           = 0xf3\n\tDLT_MPLS                                = 0xdb\n\tDLT_MTP2                                = 0x8c\n\tDLT_MTP2_WITH_PHDR                      = 0x8b\n\tDLT_MTP3                                = 0x8d\n\tDLT_MUX27010                            = 0xec\n\tDLT_NETANALYZER                         = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT             = 0xf1\n\tDLT_NFC_LLCP                            = 0xf5\n\tDLT_NFLOG                               = 0xef\n\tDLT_NG40                                = 0xf4\n\tDLT_NULL                                = 0x0\n\tDLT_PCI_EXP                             = 0x7d\n\tDLT_PFLOG                               = 0x75\n\tDLT_PFSYNC                              = 0x12\n\tDLT_PPI                                 = 0xc0\n\tDLT_PPP                                 = 0x9\n\tDLT_PPP_BSDOS                           = 0x10\n\tDLT_PPP_ETHER                           = 0x33\n\tDLT_PPP_PPPD                            = 0xa6\n\tDLT_PPP_SERIAL                          = 0x32\n\tDLT_PPP_WITH_DIR                        = 0xcc\n\tDLT_PPP_WITH_DIRECTION                  = 0xa6\n\tDLT_PRISM_HEADER                        = 0x77\n\tDLT_PRONET                              = 0x4\n\tDLT_RAIF1                               = 0xc6\n\tDLT_RAW                                 = 0xc\n\tDLT_RIO                                 = 0x7c\n\tDLT_SCCP                                = 0x8e\n\tDLT_SITA                                = 0xc4\n\tDLT_SLIP                                = 0x8\n\tDLT_SLIP_BSDOS                          = 0xf\n\tDLT_STANAG_5066_D_PDU                   = 0xed\n\tDLT_SUNATM                              = 0x7b\n\tDLT_SYMANTEC_FIREWALL                   = 0x63\n\tDLT_TZSP                                = 0x80\n\tDLT_USB                                 = 0xba\n\tDLT_USB_DARWIN                          = 0x10a\n\tDLT_USB_LINUX                           = 0xbd\n\tDLT_USB_LINUX_MMAPPED                   = 0xdc\n\tDLT_USER0                               = 0x93\n\tDLT_USER1                               = 0x94\n\tDLT_USER10                              = 0x9d\n\tDLT_USER11                              = 0x9e\n\tDLT_USER12                              = 0x9f\n\tDLT_USER13                              = 0xa0\n\tDLT_USER14                              = 0xa1\n\tDLT_USER15                              = 0xa2\n\tDLT_USER2                               = 0x95\n\tDLT_USER3                               = 0x96\n\tDLT_USER4                               = 0x97\n\tDLT_USER5                               = 0x98\n\tDLT_USER6                               = 0x99\n\tDLT_USER7                               = 0x9a\n\tDLT_USER8                               = 0x9b\n\tDLT_USER9                               = 0x9c\n\tDLT_WIHART                              = 0xdf\n\tDLT_X2E_SERIAL                          = 0xd5\n\tDLT_X2E_XORAYA                          = 0xd6\n\tDT_BLK                                  = 0x6\n\tDT_CHR                                  = 0x2\n\tDT_DIR                                  = 0x4\n\tDT_FIFO                                 = 0x1\n\tDT_LNK                                  = 0xa\n\tDT_REG                                  = 0x8\n\tDT_SOCK                                 = 0xc\n\tDT_UNKNOWN                              = 0x0\n\tDT_WHT                                  = 0xe\n\tECHO                                    = 0x8\n\tECHOCTL                                 = 0x40\n\tECHOE                                   = 0x2\n\tECHOK                                   = 0x4\n\tECHOKE                                  = 0x1\n\tECHONL                                  = 0x10\n\tECHOPRT                                 = 0x20\n\tEVFILT_AIO                              = -0x3\n\tEVFILT_EXCEPT                           = -0xf\n\tEVFILT_FS                               = -0x9\n\tEVFILT_MACHPORT                         = -0x8\n\tEVFILT_PROC                             = -0x5\n\tEVFILT_READ                             = -0x1\n\tEVFILT_SIGNAL                           = -0x6\n\tEVFILT_SYSCOUNT                         = 0x11\n\tEVFILT_THREADMARKER                     = 0x11\n\tEVFILT_TIMER                            = -0x7\n\tEVFILT_USER                             = -0xa\n\tEVFILT_VM                               = -0xc\n\tEVFILT_VNODE                            = -0x4\n\tEVFILT_WRITE                            = -0x2\n\tEV_ADD                                  = 0x1\n\tEV_CLEAR                                = 0x20\n\tEV_DELETE                               = 0x2\n\tEV_DISABLE                              = 0x8\n\tEV_DISPATCH                             = 0x80\n\tEV_DISPATCH2                            = 0x180\n\tEV_ENABLE                               = 0x4\n\tEV_EOF                                  = 0x8000\n\tEV_ERROR                                = 0x4000\n\tEV_FLAG0                                = 0x1000\n\tEV_FLAG1                                = 0x2000\n\tEV_ONESHOT                              = 0x10\n\tEV_OOBAND                               = 0x2000\n\tEV_POLL                                 = 0x1000\n\tEV_RECEIPT                              = 0x40\n\tEV_SYSFLAGS                             = 0xf000\n\tEV_UDATA_SPECIFIC                       = 0x100\n\tEV_VANISHED                             = 0x200\n\tEXTA                                    = 0x4b00\n\tEXTB                                    = 0x9600\n\tEXTPROC                                 = 0x800\n\tFD_CLOEXEC                              = 0x1\n\tFD_SETSIZE                              = 0x400\n\tFF0                                     = 0x0\n\tFF1                                     = 0x4000\n\tFFDLY                                   = 0x4000\n\tFLUSHO                                  = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED                 = 0x20\n\tFSOPT_NOFOLLOW                          = 0x1\n\tFSOPT_NOINMEMUPDATE                     = 0x2\n\tFSOPT_PACK_INVAL_ATTRS                  = 0x8\n\tFSOPT_REPORT_FULLSIZE                   = 0x4\n\tFSOPT_RETURN_REALDEV                    = 0x200\n\tF_ADDFILESIGS                           = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM              = 0x53\n\tF_ADDFILESIGS_INFO                      = 0x67\n\tF_ADDFILESIGS_RETURN                    = 0x61\n\tF_ADDFILESUPPL                          = 0x68\n\tF_ADDSIGS                               = 0x3b\n\tF_ALLOCATEALL                           = 0x4\n\tF_ALLOCATECONTIG                        = 0x2\n\tF_BARRIERFSYNC                          = 0x55\n\tF_CHECK_LV                              = 0x62\n\tF_CHKCLEAN                              = 0x29\n\tF_DUPFD                                 = 0x0\n\tF_DUPFD_CLOEXEC                         = 0x43\n\tF_FINDSIGS                              = 0x4e\n\tF_FLUSH_DATA                            = 0x28\n\tF_FREEZE_FS                             = 0x35\n\tF_FULLFSYNC                             = 0x33\n\tF_GETCODEDIR                            = 0x48\n\tF_GETFD                                 = 0x1\n\tF_GETFL                                 = 0x3\n\tF_GETLK                                 = 0x7\n\tF_GETLKPID                              = 0x42\n\tF_GETNOSIGPIPE                          = 0x4a\n\tF_GETOWN                                = 0x5\n\tF_GETPATH                               = 0x32\n\tF_GETPATH_MTMINFO                       = 0x47\n\tF_GETPATH_NOFIRMLINK                    = 0x66\n\tF_GETPROTECTIONCLASS                    = 0x3f\n\tF_GETPROTECTIONLEVEL                    = 0x4d\n\tF_GETSIGSINFO                           = 0x69\n\tF_GLOBAL_NOCACHE                        = 0x37\n\tF_LOG2PHYS                              = 0x31\n\tF_LOG2PHYS_EXT                          = 0x41\n\tF_NOCACHE                               = 0x30\n\tF_NODIRECT                              = 0x3e\n\tF_OK                                    = 0x0\n\tF_PATHPKG_CHECK                         = 0x34\n\tF_PEOFPOSMODE                           = 0x3\n\tF_PREALLOCATE                           = 0x2a\n\tF_PUNCHHOLE                             = 0x63\n\tF_RDADVISE                              = 0x2c\n\tF_RDAHEAD                               = 0x2d\n\tF_RDLCK                                 = 0x1\n\tF_SETBACKINGSTORE                       = 0x46\n\tF_SETFD                                 = 0x2\n\tF_SETFL                                 = 0x4\n\tF_SETLK                                 = 0x8\n\tF_SETLKW                                = 0x9\n\tF_SETLKWTIMEOUT                         = 0xa\n\tF_SETNOSIGPIPE                          = 0x49\n\tF_SETOWN                                = 0x6\n\tF_SETPROTECTIONCLASS                    = 0x40\n\tF_SETSIZE                               = 0x2b\n\tF_SINGLE_WRITER                         = 0x4c\n\tF_SPECULATIVE_READ                      = 0x65\n\tF_THAW_FS                               = 0x36\n\tF_TRANSCODEKEY                          = 0x4b\n\tF_TRIM_ACTIVE_FILE                      = 0x64\n\tF_UNLCK                                 = 0x2\n\tF_VOLPOSMODE                            = 0x4\n\tF_WRLCK                                 = 0x3\n\tHUPCL                                   = 0x4000\n\tHW_MACHINE                              = 0x1\n\tICANON                                  = 0x100\n\tICMP6_FILTER                            = 0x12\n\tICRNL                                   = 0x100\n\tIEXTEN                                  = 0x400\n\tIFF_ALLMULTI                            = 0x200\n\tIFF_ALTPHYS                             = 0x4000\n\tIFF_BROADCAST                           = 0x2\n\tIFF_DEBUG                               = 0x4\n\tIFF_LINK0                               = 0x1000\n\tIFF_LINK1                               = 0x2000\n\tIFF_LINK2                               = 0x4000\n\tIFF_LOOPBACK                            = 0x8\n\tIFF_MULTICAST                           = 0x8000\n\tIFF_NOARP                               = 0x80\n\tIFF_NOTRAILERS                          = 0x20\n\tIFF_OACTIVE                             = 0x400\n\tIFF_POINTOPOINT                         = 0x10\n\tIFF_PROMISC                             = 0x100\n\tIFF_RUNNING                             = 0x40\n\tIFF_SIMPLEX                             = 0x800\n\tIFF_UP                                  = 0x1\n\tIFNAMSIZ                                = 0x10\n\tIFT_1822                                = 0x2\n\tIFT_6LOWPAN                             = 0x40\n\tIFT_AAL5                                = 0x31\n\tIFT_ARCNET                              = 0x23\n\tIFT_ARCNETPLUS                          = 0x24\n\tIFT_ATM                                 = 0x25\n\tIFT_BRIDGE                              = 0xd1\n\tIFT_CARP                                = 0xf8\n\tIFT_CELLULAR                            = 0xff\n\tIFT_CEPT                                = 0x13\n\tIFT_DS3                                 = 0x1e\n\tIFT_ENC                                 = 0xf4\n\tIFT_EON                                 = 0x19\n\tIFT_ETHER                               = 0x6\n\tIFT_FAITH                               = 0x38\n\tIFT_FDDI                                = 0xf\n\tIFT_FRELAY                              = 0x20\n\tIFT_FRELAYDCE                           = 0x2c\n\tIFT_GIF                                 = 0x37\n\tIFT_HDH1822                             = 0x3\n\tIFT_HIPPI                               = 0x2f\n\tIFT_HSSI                                = 0x2e\n\tIFT_HY                                  = 0xe\n\tIFT_IEEE1394                            = 0x90\n\tIFT_IEEE8023ADLAG                       = 0x88\n\tIFT_ISDNBASIC                           = 0x14\n\tIFT_ISDNPRIMARY                         = 0x15\n\tIFT_ISO88022LLC                         = 0x29\n\tIFT_ISO88023                            = 0x7\n\tIFT_ISO88024                            = 0x8\n\tIFT_ISO88025                            = 0x9\n\tIFT_ISO88026                            = 0xa\n\tIFT_L2VLAN                              = 0x87\n\tIFT_LAPB                                = 0x10\n\tIFT_LOCALTALK                           = 0x2a\n\tIFT_LOOP                                = 0x18\n\tIFT_MIOX25                              = 0x26\n\tIFT_MODEM                               = 0x30\n\tIFT_NSIP                                = 0x1b\n\tIFT_OTHER                               = 0x1\n\tIFT_P10                                 = 0xc\n\tIFT_P80                                 = 0xd\n\tIFT_PARA                                = 0x22\n\tIFT_PDP                                 = 0xff\n\tIFT_PFLOG                               = 0xf5\n\tIFT_PFSYNC                              = 0xf6\n\tIFT_PKTAP                               = 0xfe\n\tIFT_PPP                                 = 0x17\n\tIFT_PROPMUX                             = 0x36\n\tIFT_PROPVIRTUAL                         = 0x35\n\tIFT_PTPSERIAL                           = 0x16\n\tIFT_RS232                               = 0x21\n\tIFT_SDLC                                = 0x11\n\tIFT_SIP                                 = 0x1f\n\tIFT_SLIP                                = 0x1c\n\tIFT_SMDSDXI                             = 0x2b\n\tIFT_SMDSICIP                            = 0x34\n\tIFT_SONET                               = 0x27\n\tIFT_SONETPATH                           = 0x32\n\tIFT_SONETVT                             = 0x33\n\tIFT_STARLAN                             = 0xb\n\tIFT_STF                                 = 0x39\n\tIFT_T1                                  = 0x12\n\tIFT_ULTRA                               = 0x1d\n\tIFT_V35                                 = 0x2d\n\tIFT_X25                                 = 0x5\n\tIFT_X25DDN                              = 0x4\n\tIFT_X25PLE                              = 0x28\n\tIFT_XETHER                              = 0x1a\n\tIGNBRK                                  = 0x1\n\tIGNCR                                   = 0x80\n\tIGNPAR                                  = 0x4\n\tIMAXBEL                                 = 0x2000\n\tINLCR                                   = 0x40\n\tINPCK                                   = 0x10\n\tIN_CLASSA_HOST                          = 0xffffff\n\tIN_CLASSA_MAX                           = 0x80\n\tIN_CLASSA_NET                           = 0xff000000\n\tIN_CLASSA_NSHIFT                        = 0x18\n\tIN_CLASSB_HOST                          = 0xffff\n\tIN_CLASSB_MAX                           = 0x10000\n\tIN_CLASSB_NET                           = 0xffff0000\n\tIN_CLASSB_NSHIFT                        = 0x10\n\tIN_CLASSC_HOST                          = 0xff\n\tIN_CLASSC_NET                           = 0xffffff00\n\tIN_CLASSC_NSHIFT                        = 0x8\n\tIN_CLASSD_HOST                          = 0xfffffff\n\tIN_CLASSD_NET                           = 0xf0000000\n\tIN_CLASSD_NSHIFT                        = 0x1c\n\tIN_LINKLOCALNETNUM                      = 0xa9fe0000\n\tIN_LOOPBACKNET                          = 0x7f\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID          = 0x400473d1\n\tIPPROTO_3PC                             = 0x22\n\tIPPROTO_ADFS                            = 0x44\n\tIPPROTO_AH                              = 0x33\n\tIPPROTO_AHIP                            = 0x3d\n\tIPPROTO_APES                            = 0x63\n\tIPPROTO_ARGUS                           = 0xd\n\tIPPROTO_AX25                            = 0x5d\n\tIPPROTO_BHA                             = 0x31\n\tIPPROTO_BLT                             = 0x1e\n\tIPPROTO_BRSATMON                        = 0x4c\n\tIPPROTO_CFTP                            = 0x3e\n\tIPPROTO_CHAOS                           = 0x10\n\tIPPROTO_CMTP                            = 0x26\n\tIPPROTO_CPHB                            = 0x49\n\tIPPROTO_CPNX                            = 0x48\n\tIPPROTO_DDP                             = 0x25\n\tIPPROTO_DGP                             = 0x56\n\tIPPROTO_DIVERT                          = 0xfe\n\tIPPROTO_DONE                            = 0x101\n\tIPPROTO_DSTOPTS                         = 0x3c\n\tIPPROTO_EGP                             = 0x8\n\tIPPROTO_EMCON                           = 0xe\n\tIPPROTO_ENCAP                           = 0x62\n\tIPPROTO_EON                             = 0x50\n\tIPPROTO_ESP                             = 0x32\n\tIPPROTO_ETHERIP                         = 0x61\n\tIPPROTO_FRAGMENT                        = 0x2c\n\tIPPROTO_GGP                             = 0x3\n\tIPPROTO_GMTP                            = 0x64\n\tIPPROTO_GRE                             = 0x2f\n\tIPPROTO_HELLO                           = 0x3f\n\tIPPROTO_HMP                             = 0x14\n\tIPPROTO_HOPOPTS                         = 0x0\n\tIPPROTO_ICMP                            = 0x1\n\tIPPROTO_ICMPV6                          = 0x3a\n\tIPPROTO_IDP                             = 0x16\n\tIPPROTO_IDPR                            = 0x23\n\tIPPROTO_IDRP                            = 0x2d\n\tIPPROTO_IGMP                            = 0x2\n\tIPPROTO_IGP                             = 0x55\n\tIPPROTO_IGRP                            = 0x58\n\tIPPROTO_IL                              = 0x28\n\tIPPROTO_INLSP                           = 0x34\n\tIPPROTO_INP                             = 0x20\n\tIPPROTO_IP                              = 0x0\n\tIPPROTO_IPCOMP                          = 0x6c\n\tIPPROTO_IPCV                            = 0x47\n\tIPPROTO_IPEIP                           = 0x5e\n\tIPPROTO_IPIP                            = 0x4\n\tIPPROTO_IPPC                            = 0x43\n\tIPPROTO_IPV4                            = 0x4\n\tIPPROTO_IPV6                            = 0x29\n\tIPPROTO_IRTP                            = 0x1c\n\tIPPROTO_KRYPTOLAN                       = 0x41\n\tIPPROTO_LARP                            = 0x5b\n\tIPPROTO_LEAF1                           = 0x19\n\tIPPROTO_LEAF2                           = 0x1a\n\tIPPROTO_MAX                             = 0x100\n\tIPPROTO_MAXID                           = 0x34\n\tIPPROTO_MEAS                            = 0x13\n\tIPPROTO_MHRP                            = 0x30\n\tIPPROTO_MICP                            = 0x5f\n\tIPPROTO_MTP                             = 0x5c\n\tIPPROTO_MUX                             = 0x12\n\tIPPROTO_ND                              = 0x4d\n\tIPPROTO_NHRP                            = 0x36\n\tIPPROTO_NONE                            = 0x3b\n\tIPPROTO_NSP                             = 0x1f\n\tIPPROTO_NVPII                           = 0xb\n\tIPPROTO_OSPFIGP                         = 0x59\n\tIPPROTO_PGM                             = 0x71\n\tIPPROTO_PIGP                            = 0x9\n\tIPPROTO_PIM                             = 0x67\n\tIPPROTO_PRM                             = 0x15\n\tIPPROTO_PUP                             = 0xc\n\tIPPROTO_PVP                             = 0x4b\n\tIPPROTO_RAW                             = 0xff\n\tIPPROTO_RCCMON                          = 0xa\n\tIPPROTO_RDP                             = 0x1b\n\tIPPROTO_ROUTING                         = 0x2b\n\tIPPROTO_RSVP                            = 0x2e\n\tIPPROTO_RVD                             = 0x42\n\tIPPROTO_SATEXPAK                        = 0x40\n\tIPPROTO_SATMON                          = 0x45\n\tIPPROTO_SCCSP                           = 0x60\n\tIPPROTO_SCTP                            = 0x84\n\tIPPROTO_SDRP                            = 0x2a\n\tIPPROTO_SEP                             = 0x21\n\tIPPROTO_SRPC                            = 0x5a\n\tIPPROTO_ST                              = 0x7\n\tIPPROTO_SVMTP                           = 0x52\n\tIPPROTO_SWIPE                           = 0x35\n\tIPPROTO_TCF                             = 0x57\n\tIPPROTO_TCP                             = 0x6\n\tIPPROTO_TP                              = 0x1d\n\tIPPROTO_TPXX                            = 0x27\n\tIPPROTO_TRUNK1                          = 0x17\n\tIPPROTO_TRUNK2                          = 0x18\n\tIPPROTO_TTP                             = 0x54\n\tIPPROTO_UDP                             = 0x11\n\tIPPROTO_VINES                           = 0x53\n\tIPPROTO_VISA                            = 0x46\n\tIPPROTO_VMTP                            = 0x51\n\tIPPROTO_WBEXPAK                         = 0x4f\n\tIPPROTO_WBMON                           = 0x4e\n\tIPPROTO_WSN                             = 0x4a\n\tIPPROTO_XNET                            = 0xf\n\tIPPROTO_XTP                             = 0x24\n\tIPV6_2292DSTOPTS                        = 0x17\n\tIPV6_2292HOPLIMIT                       = 0x14\n\tIPV6_2292HOPOPTS                        = 0x16\n\tIPV6_2292NEXTHOP                        = 0x15\n\tIPV6_2292PKTINFO                        = 0x13\n\tIPV6_2292PKTOPTIONS                     = 0x19\n\tIPV6_2292RTHDR                          = 0x18\n\tIPV6_3542DSTOPTS                        = 0x32\n\tIPV6_3542HOPLIMIT                       = 0x2f\n\tIPV6_3542HOPOPTS                        = 0x31\n\tIPV6_3542NEXTHOP                        = 0x30\n\tIPV6_3542PKTINFO                        = 0x2e\n\tIPV6_3542RTHDR                          = 0x33\n\tIPV6_ADDR_MC_FLAGS_PREFIX               = 0x20\n\tIPV6_ADDR_MC_FLAGS_TRANSIENT            = 0x10\n\tIPV6_ADDR_MC_FLAGS_UNICAST_BASED        = 0x30\n\tIPV6_AUTOFLOWLABEL                      = 0x3b\n\tIPV6_BINDV6ONLY                         = 0x1b\n\tIPV6_BOUND_IF                           = 0x7d\n\tIPV6_CHECKSUM                           = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS             = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP             = 0x1\n\tIPV6_DEFHLIM                            = 0x40\n\tIPV6_DONTFRAG                           = 0x3e\n\tIPV6_DSTOPTS                            = 0x32\n\tIPV6_FAITH                              = 0x1d\n\tIPV6_FLOWINFO_MASK                      = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK                     = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                      = 0x3000\n\tIPV6_FRAGTTL                            = 0x3c\n\tIPV6_FW_ADD                             = 0x1e\n\tIPV6_FW_DEL                             = 0x1f\n\tIPV6_FW_FLUSH                           = 0x20\n\tIPV6_FW_GET                             = 0x22\n\tIPV6_FW_ZERO                            = 0x21\n\tIPV6_HLIMDEC                            = 0x1\n\tIPV6_HOPLIMIT                           = 0x2f\n\tIPV6_HOPOPTS                            = 0x31\n\tIPV6_IPSEC_POLICY                       = 0x1c\n\tIPV6_JOIN_GROUP                         = 0xc\n\tIPV6_LEAVE_GROUP                        = 0xd\n\tIPV6_MAXHLIM                            = 0xff\n\tIPV6_MAXOPTHDR                          = 0x800\n\tIPV6_MAXPACKET                          = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER               = 0x200\n\tIPV6_MAX_MEMBERSHIPS                    = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER                = 0x80\n\tIPV6_MIN_MEMBERSHIPS                    = 0x1f\n\tIPV6_MMTU                               = 0x500\n\tIPV6_MSFILTER                           = 0x4a\n\tIPV6_MULTICAST_HOPS                     = 0xa\n\tIPV6_MULTICAST_IF                       = 0x9\n\tIPV6_MULTICAST_LOOP                     = 0xb\n\tIPV6_NEXTHOP                            = 0x30\n\tIPV6_PATHMTU                            = 0x2c\n\tIPV6_PKTINFO                            = 0x2e\n\tIPV6_PORTRANGE                          = 0xe\n\tIPV6_PORTRANGE_DEFAULT                  = 0x0\n\tIPV6_PORTRANGE_HIGH                     = 0x1\n\tIPV6_PORTRANGE_LOW                      = 0x2\n\tIPV6_PREFER_TEMPADDR                    = 0x3f\n\tIPV6_RECVDSTOPTS                        = 0x28\n\tIPV6_RECVHOPLIMIT                       = 0x25\n\tIPV6_RECVHOPOPTS                        = 0x27\n\tIPV6_RECVPATHMTU                        = 0x2b\n\tIPV6_RECVPKTINFO                        = 0x3d\n\tIPV6_RECVRTHDR                          = 0x26\n\tIPV6_RECVTCLASS                         = 0x23\n\tIPV6_RTHDR                              = 0x33\n\tIPV6_RTHDRDSTOPTS                       = 0x39\n\tIPV6_RTHDR_LOOSE                        = 0x0\n\tIPV6_RTHDR_STRICT                       = 0x1\n\tIPV6_RTHDR_TYPE_0                       = 0x0\n\tIPV6_SOCKOPT_RESERVED1                  = 0x3\n\tIPV6_TCLASS                             = 0x24\n\tIPV6_UNICAST_HOPS                       = 0x4\n\tIPV6_USE_MIN_MTU                        = 0x2a\n\tIPV6_V6ONLY                             = 0x1b\n\tIPV6_VERSION                            = 0x60\n\tIPV6_VERSION_MASK                       = 0xf0\n\tIP_ADD_MEMBERSHIP                       = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP                = 0x46\n\tIP_BLOCK_SOURCE                         = 0x48\n\tIP_BOUND_IF                             = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP               = 0x1\n\tIP_DEFAULT_MULTICAST_TTL                = 0x1\n\tIP_DF                                   = 0x4000\n\tIP_DONTFRAG                             = 0x1c\n\tIP_DROP_MEMBERSHIP                      = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP               = 0x47\n\tIP_DUMMYNET_CONFIGURE                   = 0x3c\n\tIP_DUMMYNET_DEL                         = 0x3d\n\tIP_DUMMYNET_FLUSH                       = 0x3e\n\tIP_DUMMYNET_GET                         = 0x40\n\tIP_FAITH                                = 0x16\n\tIP_FW_ADD                               = 0x28\n\tIP_FW_DEL                               = 0x29\n\tIP_FW_FLUSH                             = 0x2a\n\tIP_FW_GET                               = 0x2c\n\tIP_FW_RESETLOG                          = 0x2d\n\tIP_FW_ZERO                              = 0x2b\n\tIP_HDRINCL                              = 0x2\n\tIP_IPSEC_POLICY                         = 0x15\n\tIP_MAXPACKET                            = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER                 = 0x200\n\tIP_MAX_MEMBERSHIPS                      = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER                 = 0x80\n\tIP_MAX_SOCK_SRC_FILTER                  = 0x80\n\tIP_MF                                   = 0x2000\n\tIP_MIN_MEMBERSHIPS                      = 0x1f\n\tIP_MSFILTER                             = 0x4a\n\tIP_MSS                                  = 0x240\n\tIP_MULTICAST_IF                         = 0x9\n\tIP_MULTICAST_IFINDEX                    = 0x42\n\tIP_MULTICAST_LOOP                       = 0xb\n\tIP_MULTICAST_TTL                        = 0xa\n\tIP_MULTICAST_VIF                        = 0xe\n\tIP_NAT__XXX                             = 0x37\n\tIP_OFFMASK                              = 0x1fff\n\tIP_OLD_FW_ADD                           = 0x32\n\tIP_OLD_FW_DEL                           = 0x33\n\tIP_OLD_FW_FLUSH                         = 0x34\n\tIP_OLD_FW_GET                           = 0x36\n\tIP_OLD_FW_RESETLOG                      = 0x38\n\tIP_OLD_FW_ZERO                          = 0x35\n\tIP_OPTIONS                              = 0x1\n\tIP_PKTINFO                              = 0x1a\n\tIP_PORTRANGE                            = 0x13\n\tIP_PORTRANGE_DEFAULT                    = 0x0\n\tIP_PORTRANGE_HIGH                       = 0x1\n\tIP_PORTRANGE_LOW                        = 0x2\n\tIP_RECVDSTADDR                          = 0x7\n\tIP_RECVIF                               = 0x14\n\tIP_RECVOPTS                             = 0x5\n\tIP_RECVPKTINFO                          = 0x1a\n\tIP_RECVRETOPTS                          = 0x6\n\tIP_RECVTOS                              = 0x1b\n\tIP_RECVTTL                              = 0x18\n\tIP_RETOPTS                              = 0x8\n\tIP_RF                                   = 0x8000\n\tIP_RSVP_OFF                             = 0x10\n\tIP_RSVP_ON                              = 0xf\n\tIP_RSVP_VIF_OFF                         = 0x12\n\tIP_RSVP_VIF_ON                          = 0x11\n\tIP_STRIPHDR                             = 0x17\n\tIP_TOS                                  = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND               = 0x41\n\tIP_TTL                                  = 0x4\n\tIP_UNBLOCK_SOURCE                       = 0x49\n\tISIG                                    = 0x80\n\tISTRIP                                  = 0x20\n\tIUTF8                                   = 0x4000\n\tIXANY                                   = 0x800\n\tIXOFF                                   = 0x400\n\tIXON                                    = 0x200\n\tKERN_HOSTNAME                           = 0xa\n\tKERN_OSRELEASE                          = 0x2\n\tKERN_OSTYPE                             = 0x1\n\tKERN_VERSION                            = 0x4\n\tLOCAL_PEERCRED                          = 0x1\n\tLOCAL_PEEREPID                          = 0x3\n\tLOCAL_PEEREUUID                         = 0x5\n\tLOCAL_PEERPID                           = 0x2\n\tLOCAL_PEERTOKEN                         = 0x6\n\tLOCAL_PEERUUID                          = 0x4\n\tLOCK_EX                                 = 0x2\n\tLOCK_NB                                 = 0x4\n\tLOCK_SH                                 = 0x1\n\tLOCK_UN                                 = 0x8\n\tMADV_CAN_REUSE                          = 0x9\n\tMADV_DONTNEED                           = 0x4\n\tMADV_FREE                               = 0x5\n\tMADV_FREE_REUSABLE                      = 0x7\n\tMADV_FREE_REUSE                         = 0x8\n\tMADV_NORMAL                             = 0x0\n\tMADV_PAGEOUT                            = 0xa\n\tMADV_RANDOM                             = 0x1\n\tMADV_SEQUENTIAL                         = 0x2\n\tMADV_WILLNEED                           = 0x3\n\tMADV_ZERO_WIRED_PAGES                   = 0x6\n\tMAP_32BIT                               = 0x8000\n\tMAP_ANON                                = 0x1000\n\tMAP_ANONYMOUS                           = 0x1000\n\tMAP_COPY                                = 0x2\n\tMAP_FILE                                = 0x0\n\tMAP_FIXED                               = 0x10\n\tMAP_HASSEMAPHORE                        = 0x200\n\tMAP_JIT                                 = 0x800\n\tMAP_NOCACHE                             = 0x400\n\tMAP_NOEXTEND                            = 0x100\n\tMAP_NORESERVE                           = 0x40\n\tMAP_PRIVATE                             = 0x2\n\tMAP_RENAME                              = 0x20\n\tMAP_RESERVED0080                        = 0x80\n\tMAP_RESILIENT_CODESIGN                  = 0x2000\n\tMAP_RESILIENT_MEDIA                     = 0x4000\n\tMAP_SHARED                              = 0x1\n\tMAP_TRANSLATED_ALLOW_EXECUTE            = 0x20000\n\tMAP_UNIX03                              = 0x40000\n\tMCAST_BLOCK_SOURCE                      = 0x54\n\tMCAST_EXCLUDE                           = 0x2\n\tMCAST_INCLUDE                           = 0x1\n\tMCAST_JOIN_GROUP                        = 0x50\n\tMCAST_JOIN_SOURCE_GROUP                 = 0x52\n\tMCAST_LEAVE_GROUP                       = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP                = 0x53\n\tMCAST_UNBLOCK_SOURCE                    = 0x55\n\tMCAST_UNDEFINED                         = 0x0\n\tMCL_CURRENT                             = 0x1\n\tMCL_FUTURE                              = 0x2\n\tMNT_ASYNC                               = 0x40\n\tMNT_AUTOMOUNTED                         = 0x400000\n\tMNT_CMDFLAGS                            = 0xf0000\n\tMNT_CPROTECT                            = 0x80\n\tMNT_DEFWRITE                            = 0x2000000\n\tMNT_DONTBROWSE                          = 0x100000\n\tMNT_DOVOLFS                             = 0x8000\n\tMNT_DWAIT                               = 0x4\n\tMNT_EXPORTED                            = 0x100\n\tMNT_EXT_ROOT_DATA_VOL                   = 0x1\n\tMNT_FORCE                               = 0x80000\n\tMNT_IGNORE_OWNERSHIP                    = 0x200000\n\tMNT_JOURNALED                           = 0x800000\n\tMNT_LOCAL                               = 0x1000\n\tMNT_MULTILABEL                          = 0x4000000\n\tMNT_NOATIME                             = 0x10000000\n\tMNT_NOBLOCK                             = 0x20000\n\tMNT_NODEV                               = 0x10\n\tMNT_NOEXEC                              = 0x4\n\tMNT_NOSUID                              = 0x8\n\tMNT_NOUSERXATTR                         = 0x1000000\n\tMNT_NOWAIT                              = 0x2\n\tMNT_QUARANTINE                          = 0x400\n\tMNT_QUOTA                               = 0x2000\n\tMNT_RDONLY                              = 0x1\n\tMNT_RELOAD                              = 0x40000\n\tMNT_REMOVABLE                           = 0x200\n\tMNT_ROOTFS                              = 0x4000\n\tMNT_SNAPSHOT                            = 0x40000000\n\tMNT_STRICTATIME                         = 0x80000000\n\tMNT_SYNCHRONOUS                         = 0x2\n\tMNT_UNION                               = 0x20\n\tMNT_UNKNOWNPERMISSIONS                  = 0x200000\n\tMNT_UPDATE                              = 0x10000\n\tMNT_VISFLAGMASK                         = 0xd7f0f7ff\n\tMNT_WAIT                                = 0x1\n\tMSG_CTRUNC                              = 0x20\n\tMSG_DONTROUTE                           = 0x4\n\tMSG_DONTWAIT                            = 0x80\n\tMSG_EOF                                 = 0x100\n\tMSG_EOR                                 = 0x8\n\tMSG_FLUSH                               = 0x400\n\tMSG_HAVEMORE                            = 0x2000\n\tMSG_HOLD                                = 0x800\n\tMSG_NEEDSA                              = 0x10000\n\tMSG_NOSIGNAL                            = 0x80000\n\tMSG_OOB                                 = 0x1\n\tMSG_PEEK                                = 0x2\n\tMSG_RCVMORE                             = 0x4000\n\tMSG_SEND                                = 0x1000\n\tMSG_TRUNC                               = 0x10\n\tMSG_WAITALL                             = 0x40\n\tMSG_WAITSTREAM                          = 0x200\n\tMS_ASYNC                                = 0x1\n\tMS_DEACTIVATE                           = 0x8\n\tMS_INVALIDATE                           = 0x2\n\tMS_KILLPAGES                            = 0x4\n\tMS_SYNC                                 = 0x10\n\tNAME_MAX                                = 0xff\n\tNET_RT_DUMP                             = 0x1\n\tNET_RT_DUMP2                            = 0x7\n\tNET_RT_FLAGS                            = 0x2\n\tNET_RT_FLAGS_PRIV                       = 0xa\n\tNET_RT_IFLIST                           = 0x3\n\tNET_RT_IFLIST2                          = 0x6\n\tNET_RT_MAXID                            = 0xb\n\tNET_RT_STAT                             = 0x4\n\tNET_RT_TRASH                            = 0x5\n\tNFDBITS                                 = 0x20\n\tNL0                                     = 0x0\n\tNL1                                     = 0x100\n\tNL2                                     = 0x200\n\tNL3                                     = 0x300\n\tNLDLY                                   = 0x300\n\tNOFLSH                                  = 0x80000000\n\tNOKERNINFO                              = 0x2000000\n\tNOTE_ABSOLUTE                           = 0x8\n\tNOTE_ATTRIB                             = 0x8\n\tNOTE_BACKGROUND                         = 0x40\n\tNOTE_CHILD                              = 0x4\n\tNOTE_CRITICAL                           = 0x20\n\tNOTE_DELETE                             = 0x1\n\tNOTE_EXEC                               = 0x20000000\n\tNOTE_EXIT                               = 0x80000000\n\tNOTE_EXITSTATUS                         = 0x4000000\n\tNOTE_EXIT_CSERROR                       = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL                   = 0x10000\n\tNOTE_EXIT_DETAIL                        = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK                   = 0x70000\n\tNOTE_EXIT_MEMORY                        = 0x20000\n\tNOTE_EXIT_REPARENTED                    = 0x80000\n\tNOTE_EXTEND                             = 0x4\n\tNOTE_FFAND                              = 0x40000000\n\tNOTE_FFCOPY                             = 0xc0000000\n\tNOTE_FFCTRLMASK                         = 0xc0000000\n\tNOTE_FFLAGSMASK                         = 0xffffff\n\tNOTE_FFNOP                              = 0x0\n\tNOTE_FFOR                               = 0x80000000\n\tNOTE_FORK                               = 0x40000000\n\tNOTE_FUNLOCK                            = 0x100\n\tNOTE_LEEWAY                             = 0x10\n\tNOTE_LINK                               = 0x10\n\tNOTE_LOWAT                              = 0x1\n\tNOTE_MACHTIME                           = 0x100\n\tNOTE_MACH_CONTINUOUS_TIME               = 0x80\n\tNOTE_NONE                               = 0x80\n\tNOTE_NSECONDS                           = 0x4\n\tNOTE_OOB                                = 0x2\n\tNOTE_PCTRLMASK                          = -0x100000\n\tNOTE_PDATAMASK                          = 0xfffff\n\tNOTE_REAP                               = 0x10000000\n\tNOTE_RENAME                             = 0x20\n\tNOTE_REVOKE                             = 0x40\n\tNOTE_SECONDS                            = 0x1\n\tNOTE_SIGNAL                             = 0x8000000\n\tNOTE_TRACK                              = 0x1\n\tNOTE_TRACKERR                           = 0x2\n\tNOTE_TRIGGER                            = 0x1000000\n\tNOTE_USECONDS                           = 0x2\n\tNOTE_VM_ERROR                           = 0x10000000\n\tNOTE_VM_PRESSURE                        = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE       = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE              = 0x40000000\n\tNOTE_WRITE                              = 0x2\n\tOCRNL                                   = 0x10\n\tOFDEL                                   = 0x20000\n\tOFILL                                   = 0x80\n\tONLCR                                   = 0x2\n\tONLRET                                  = 0x40\n\tONOCR                                   = 0x20\n\tONOEOT                                  = 0x8\n\tOPOST                                   = 0x1\n\tOXTABS                                  = 0x4\n\tO_ACCMODE                               = 0x3\n\tO_ALERT                                 = 0x20000000\n\tO_APPEND                                = 0x8\n\tO_ASYNC                                 = 0x40\n\tO_CLOEXEC                               = 0x1000000\n\tO_CREAT                                 = 0x200\n\tO_DIRECTORY                             = 0x100000\n\tO_DP_GETRAWENCRYPTED                    = 0x1\n\tO_DP_GETRAWUNENCRYPTED                  = 0x2\n\tO_DSYNC                                 = 0x400000\n\tO_EVTONLY                               = 0x8000\n\tO_EXCL                                  = 0x800\n\tO_EXLOCK                                = 0x20\n\tO_FSYNC                                 = 0x80\n\tO_NDELAY                                = 0x4\n\tO_NOCTTY                                = 0x20000\n\tO_NOFOLLOW                              = 0x100\n\tO_NOFOLLOW_ANY                          = 0x20000000\n\tO_NONBLOCK                              = 0x4\n\tO_POPUP                                 = 0x80000000\n\tO_RDONLY                                = 0x0\n\tO_RDWR                                  = 0x2\n\tO_SHLOCK                                = 0x10\n\tO_SYMLINK                               = 0x200000\n\tO_SYNC                                  = 0x80\n\tO_TRUNC                                 = 0x400\n\tO_WRONLY                                = 0x1\n\tPARENB                                  = 0x1000\n\tPARMRK                                  = 0x8\n\tPARODD                                  = 0x2000\n\tPENDIN                                  = 0x20000000\n\tPRIO_PGRP                               = 0x1\n\tPRIO_PROCESS                            = 0x0\n\tPRIO_USER                               = 0x2\n\tPROT_EXEC                               = 0x4\n\tPROT_NONE                               = 0x0\n\tPROT_READ                               = 0x1\n\tPROT_WRITE                              = 0x2\n\tPT_ATTACH                               = 0xa\n\tPT_ATTACHEXC                            = 0xe\n\tPT_CONTINUE                             = 0x7\n\tPT_DENY_ATTACH                          = 0x1f\n\tPT_DETACH                               = 0xb\n\tPT_FIRSTMACH                            = 0x20\n\tPT_FORCEQUOTA                           = 0x1e\n\tPT_KILL                                 = 0x8\n\tPT_READ_D                               = 0x2\n\tPT_READ_I                               = 0x1\n\tPT_READ_U                               = 0x3\n\tPT_SIGEXC                               = 0xc\n\tPT_STEP                                 = 0x9\n\tPT_THUPDATE                             = 0xd\n\tPT_TRACE_ME                             = 0x0\n\tPT_WRITE_D                              = 0x5\n\tPT_WRITE_I                              = 0x4\n\tPT_WRITE_U                              = 0x6\n\tRENAME_EXCL                             = 0x4\n\tRENAME_NOFOLLOW_ANY                     = 0x10\n\tRENAME_RESERVED1                        = 0x8\n\tRENAME_SECLUDE                          = 0x1\n\tRENAME_SWAP                             = 0x2\n\tRLIMIT_AS                               = 0x5\n\tRLIMIT_CORE                             = 0x4\n\tRLIMIT_CPU                              = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR                = 0x2\n\tRLIMIT_DATA                             = 0x2\n\tRLIMIT_FSIZE                            = 0x1\n\tRLIMIT_MEMLOCK                          = 0x6\n\tRLIMIT_NOFILE                           = 0x8\n\tRLIMIT_NPROC                            = 0x7\n\tRLIMIT_RSS                              = 0x5\n\tRLIMIT_STACK                            = 0x3\n\tRLIM_INFINITY                           = 0x7fffffffffffffff\n\tRTAX_AUTHOR                             = 0x6\n\tRTAX_BRD                                = 0x7\n\tRTAX_DST                                = 0x0\n\tRTAX_GATEWAY                            = 0x1\n\tRTAX_GENMASK                            = 0x3\n\tRTAX_IFA                                = 0x5\n\tRTAX_IFP                                = 0x4\n\tRTAX_MAX                                = 0x8\n\tRTAX_NETMASK                            = 0x2\n\tRTA_AUTHOR                              = 0x40\n\tRTA_BRD                                 = 0x80\n\tRTA_DST                                 = 0x1\n\tRTA_GATEWAY                             = 0x2\n\tRTA_GENMASK                             = 0x8\n\tRTA_IFA                                 = 0x20\n\tRTA_IFP                                 = 0x10\n\tRTA_NETMASK                             = 0x4\n\tRTF_BLACKHOLE                           = 0x1000\n\tRTF_BROADCAST                           = 0x400000\n\tRTF_CLONING                             = 0x100\n\tRTF_CONDEMNED                           = 0x2000000\n\tRTF_DEAD                                = 0x20000000\n\tRTF_DELCLONE                            = 0x80\n\tRTF_DONE                                = 0x40\n\tRTF_DYNAMIC                             = 0x10\n\tRTF_GATEWAY                             = 0x2\n\tRTF_GLOBAL                              = 0x40000000\n\tRTF_HOST                                = 0x4\n\tRTF_IFREF                               = 0x4000000\n\tRTF_IFSCOPE                             = 0x1000000\n\tRTF_LLDATA                              = 0x400\n\tRTF_LLINFO                              = 0x400\n\tRTF_LOCAL                               = 0x200000\n\tRTF_MODIFIED                            = 0x20\n\tRTF_MULTICAST                           = 0x800000\n\tRTF_NOIFREF                             = 0x2000\n\tRTF_PINNED                              = 0x100000\n\tRTF_PRCLONING                           = 0x10000\n\tRTF_PROTO1                              = 0x8000\n\tRTF_PROTO2                              = 0x4000\n\tRTF_PROTO3                              = 0x40000\n\tRTF_PROXY                               = 0x8000000\n\tRTF_REJECT                              = 0x8\n\tRTF_ROUTER                              = 0x10000000\n\tRTF_STATIC                              = 0x800\n\tRTF_UP                                  = 0x1\n\tRTF_WASCLONED                           = 0x20000\n\tRTF_XRESOLVE                            = 0x200\n\tRTM_ADD                                 = 0x1\n\tRTM_CHANGE                              = 0x3\n\tRTM_DELADDR                             = 0xd\n\tRTM_DELETE                              = 0x2\n\tRTM_DELMADDR                            = 0x10\n\tRTM_GET                                 = 0x4\n\tRTM_GET2                                = 0x14\n\tRTM_IFINFO                              = 0xe\n\tRTM_IFINFO2                             = 0x12\n\tRTM_LOCK                                = 0x8\n\tRTM_LOSING                              = 0x5\n\tRTM_MISS                                = 0x7\n\tRTM_NEWADDR                             = 0xc\n\tRTM_NEWMADDR                            = 0xf\n\tRTM_NEWMADDR2                           = 0x13\n\tRTM_OLDADD                              = 0x9\n\tRTM_OLDDEL                              = 0xa\n\tRTM_REDIRECT                            = 0x6\n\tRTM_RESOLVE                             = 0xb\n\tRTM_RTTUNIT                             = 0xf4240\n\tRTM_VERSION                             = 0x5\n\tRTV_EXPIRE                              = 0x4\n\tRTV_HOPCOUNT                            = 0x2\n\tRTV_MTU                                 = 0x1\n\tRTV_RPIPE                               = 0x8\n\tRTV_RTT                                 = 0x40\n\tRTV_RTTVAR                              = 0x80\n\tRTV_SPIPE                               = 0x10\n\tRTV_SSTHRESH                            = 0x20\n\tRUSAGE_CHILDREN                         = -0x1\n\tRUSAGE_SELF                             = 0x0\n\tSAE_ASSOCID_ALL                         = 0xffffffff\n\tSAE_ASSOCID_ANY                         = 0x0\n\tSAE_CONNID_ALL                          = 0xffffffff\n\tSAE_CONNID_ANY                          = 0x0\n\tSCM_CREDS                               = 0x3\n\tSCM_RIGHTS                              = 0x1\n\tSCM_TIMESTAMP                           = 0x2\n\tSCM_TIMESTAMP_MONOTONIC                 = 0x4\n\tSEEK_CUR                                = 0x1\n\tSEEK_DATA                               = 0x4\n\tSEEK_END                                = 0x2\n\tSEEK_HOLE                               = 0x3\n\tSEEK_SET                                = 0x0\n\tSF_APPEND                               = 0x40000\n\tSF_ARCHIVED                             = 0x10000\n\tSF_DATALESS                             = 0x40000000\n\tSF_FIRMLINK                             = 0x800000\n\tSF_IMMUTABLE                            = 0x20000\n\tSF_NOUNLINK                             = 0x100000\n\tSF_RESTRICTED                           = 0x80000\n\tSF_SETTABLE                             = 0x3fff0000\n\tSF_SUPPORTED                            = 0x9f0000\n\tSF_SYNTHETIC                            = 0xc0000000\n\tSHUT_RD                                 = 0x0\n\tSHUT_RDWR                               = 0x2\n\tSHUT_WR                                 = 0x1\n\tSIOCADDMULTI                            = 0x80206931\n\tSIOCAIFADDR                             = 0x8040691a\n\tSIOCARPIPLL                             = 0xc0206928\n\tSIOCATMARK                              = 0x40047307\n\tSIOCAUTOADDR                            = 0xc0206926\n\tSIOCAUTONETMASK                         = 0x80206927\n\tSIOCDELMULTI                            = 0x80206932\n\tSIOCDIFADDR                             = 0x80206919\n\tSIOCDIFPHYADDR                          = 0x80206941\n\tSIOCGDRVSPEC                            = 0xc028697b\n\tSIOCGETVLAN                             = 0xc020697f\n\tSIOCGHIWAT                              = 0x40047301\n\tSIOCGIF6LOWPAN                          = 0xc02069c5\n\tSIOCGIFADDR                             = 0xc0206921\n\tSIOCGIFALTMTU                           = 0xc0206948\n\tSIOCGIFASYNCMAP                         = 0xc020697c\n\tSIOCGIFBOND                             = 0xc0206947\n\tSIOCGIFBRDADDR                          = 0xc0206923\n\tSIOCGIFCAP                              = 0xc020695b\n\tSIOCGIFCONF                             = 0xc00c6924\n\tSIOCGIFDEVMTU                           = 0xc0206944\n\tSIOCGIFDSTADDR                          = 0xc0206922\n\tSIOCGIFFLAGS                            = 0xc0206911\n\tSIOCGIFFUNCTIONALTYPE                   = 0xc02069ad\n\tSIOCGIFGENERIC                          = 0xc020693a\n\tSIOCGIFKPI                              = 0xc0206987\n\tSIOCGIFMAC                              = 0xc0206982\n\tSIOCGIFMEDIA                            = 0xc02c6938\n\tSIOCGIFMETRIC                           = 0xc0206917\n\tSIOCGIFMTU                              = 0xc0206933\n\tSIOCGIFNETMASK                          = 0xc0206925\n\tSIOCGIFPDSTADDR                         = 0xc0206940\n\tSIOCGIFPHYS                             = 0xc0206935\n\tSIOCGIFPSRCADDR                         = 0xc020693f\n\tSIOCGIFSTATUS                           = 0xc331693d\n\tSIOCGIFVLAN                             = 0xc020697f\n\tSIOCGIFWAKEFLAGS                        = 0xc0206988\n\tSIOCGIFXMEDIA                           = 0xc02c6948\n\tSIOCGLOWAT                              = 0x40047303\n\tSIOCGPGRP                               = 0x40047309\n\tSIOCIFCREATE                            = 0xc0206978\n\tSIOCIFCREATE2                           = 0xc020697a\n\tSIOCIFDESTROY                           = 0x80206979\n\tSIOCIFGCLONERS                          = 0xc0106981\n\tSIOCRSLVMULTI                           = 0xc010693b\n\tSIOCSDRVSPEC                            = 0x8028697b\n\tSIOCSETVLAN                             = 0x8020697e\n\tSIOCSHIWAT                              = 0x80047300\n\tSIOCSIF6LOWPAN                          = 0x802069c4\n\tSIOCSIFADDR                             = 0x8020690c\n\tSIOCSIFALTMTU                           = 0x80206945\n\tSIOCSIFASYNCMAP                         = 0x8020697d\n\tSIOCSIFBOND                             = 0x80206946\n\tSIOCSIFBRDADDR                          = 0x80206913\n\tSIOCSIFCAP                              = 0x8020695a\n\tSIOCSIFDSTADDR                          = 0x8020690e\n\tSIOCSIFFLAGS                            = 0x80206910\n\tSIOCSIFGENERIC                          = 0x80206939\n\tSIOCSIFKPI                              = 0x80206986\n\tSIOCSIFLLADDR                           = 0x8020693c\n\tSIOCSIFMAC                              = 0x80206983\n\tSIOCSIFMEDIA                            = 0xc0206937\n\tSIOCSIFMETRIC                           = 0x80206918\n\tSIOCSIFMTU                              = 0x80206934\n\tSIOCSIFNETMASK                          = 0x80206916\n\tSIOCSIFPHYADDR                          = 0x8040693e\n\tSIOCSIFPHYS                             = 0x80206936\n\tSIOCSIFVLAN                             = 0x8020697e\n\tSIOCSLOWAT                              = 0x80047302\n\tSIOCSPGRP                               = 0x80047308\n\tSOCK_DGRAM                              = 0x2\n\tSOCK_MAXADDRLEN                         = 0xff\n\tSOCK_RAW                                = 0x3\n\tSOCK_RDM                                = 0x4\n\tSOCK_SEQPACKET                          = 0x5\n\tSOCK_STREAM                             = 0x1\n\tSOL_LOCAL                               = 0x0\n\tSOL_SOCKET                              = 0xffff\n\tSOMAXCONN                               = 0x80\n\tSO_ACCEPTCONN                           = 0x2\n\tSO_BROADCAST                            = 0x20\n\tSO_DEBUG                                = 0x1\n\tSO_DONTROUTE                            = 0x10\n\tSO_DONTTRUNC                            = 0x2000\n\tSO_ERROR                                = 0x1007\n\tSO_KEEPALIVE                            = 0x8\n\tSO_LABEL                                = 0x1010\n\tSO_LINGER                               = 0x80\n\tSO_LINGER_SEC                           = 0x1080\n\tSO_NETSVC_MARKING_LEVEL                 = 0x1119\n\tSO_NET_SERVICE_TYPE                     = 0x1116\n\tSO_NKE                                  = 0x1021\n\tSO_NOADDRERR                            = 0x1023\n\tSO_NOSIGPIPE                            = 0x1022\n\tSO_NOTIFYCONFLICT                       = 0x1026\n\tSO_NP_EXTENSIONS                        = 0x1083\n\tSO_NREAD                                = 0x1020\n\tSO_NUMRCVPKT                            = 0x1112\n\tSO_NWRITE                               = 0x1024\n\tSO_OOBINLINE                            = 0x100\n\tSO_PEERLABEL                            = 0x1011\n\tSO_RANDOMPORT                           = 0x1082\n\tSO_RCVBUF                               = 0x1002\n\tSO_RCVLOWAT                             = 0x1004\n\tSO_RCVTIMEO                             = 0x1006\n\tSO_REUSEADDR                            = 0x4\n\tSO_REUSEPORT                            = 0x200\n\tSO_REUSESHAREUID                        = 0x1025\n\tSO_SNDBUF                               = 0x1001\n\tSO_SNDLOWAT                             = 0x1003\n\tSO_SNDTIMEO                             = 0x1005\n\tSO_TIMESTAMP                            = 0x400\n\tSO_TIMESTAMP_MONOTONIC                  = 0x800\n\tSO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1\n\tSO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4\n\tSO_TRACKER_ATTRIBUTE_FLAGS_TRACKER      = 0x2\n\tSO_TRACKER_TRANSPARENCY_VERSION         = 0x3\n\tSO_TYPE                                 = 0x1008\n\tSO_UPCALLCLOSEWAIT                      = 0x1027\n\tSO_USELOOPBACK                          = 0x40\n\tSO_WANTMORE                             = 0x4000\n\tSO_WANTOOBFLAG                          = 0x8000\n\tS_IEXEC                                 = 0x40\n\tS_IFBLK                                 = 0x6000\n\tS_IFCHR                                 = 0x2000\n\tS_IFDIR                                 = 0x4000\n\tS_IFIFO                                 = 0x1000\n\tS_IFLNK                                 = 0xa000\n\tS_IFMT                                  = 0xf000\n\tS_IFREG                                 = 0x8000\n\tS_IFSOCK                                = 0xc000\n\tS_IFWHT                                 = 0xe000\n\tS_IREAD                                 = 0x100\n\tS_IRGRP                                 = 0x20\n\tS_IROTH                                 = 0x4\n\tS_IRUSR                                 = 0x100\n\tS_IRWXG                                 = 0x38\n\tS_IRWXO                                 = 0x7\n\tS_IRWXU                                 = 0x1c0\n\tS_ISGID                                 = 0x400\n\tS_ISTXT                                 = 0x200\n\tS_ISUID                                 = 0x800\n\tS_ISVTX                                 = 0x200\n\tS_IWGRP                                 = 0x10\n\tS_IWOTH                                 = 0x2\n\tS_IWRITE                                = 0x80\n\tS_IWUSR                                 = 0x80\n\tS_IXGRP                                 = 0x8\n\tS_IXOTH                                 = 0x1\n\tS_IXUSR                                 = 0x40\n\tTAB0                                    = 0x0\n\tTAB1                                    = 0x400\n\tTAB2                                    = 0x800\n\tTAB3                                    = 0x4\n\tTABDLY                                  = 0xc04\n\tTCIFLUSH                                = 0x1\n\tTCIOFF                                  = 0x3\n\tTCIOFLUSH                               = 0x3\n\tTCION                                   = 0x4\n\tTCOFLUSH                                = 0x2\n\tTCOOFF                                  = 0x1\n\tTCOON                                   = 0x2\n\tTCPOPT_CC                               = 0xb\n\tTCPOPT_CCECHO                           = 0xd\n\tTCPOPT_CCNEW                            = 0xc\n\tTCPOPT_EOL                              = 0x0\n\tTCPOPT_FASTOPEN                         = 0x22\n\tTCPOPT_MAXSEG                           = 0x2\n\tTCPOPT_NOP                              = 0x1\n\tTCPOPT_SACK                             = 0x5\n\tTCPOPT_SACK_HDR                         = 0x1010500\n\tTCPOPT_SACK_PERMITTED                   = 0x4\n\tTCPOPT_SACK_PERMIT_HDR                  = 0x1010402\n\tTCPOPT_SIGNATURE                        = 0x13\n\tTCPOPT_TIMESTAMP                        = 0x8\n\tTCPOPT_TSTAMP_HDR                       = 0x101080a\n\tTCPOPT_WINDOW                           = 0x3\n\tTCP_CONNECTIONTIMEOUT                   = 0x20\n\tTCP_CONNECTION_INFO                     = 0x106\n\tTCP_ENABLE_ECN                          = 0x104\n\tTCP_FASTOPEN                            = 0x105\n\tTCP_KEEPALIVE                           = 0x10\n\tTCP_KEEPCNT                             = 0x102\n\tTCP_KEEPINTVL                           = 0x101\n\tTCP_MAXHLEN                             = 0x3c\n\tTCP_MAXOLEN                             = 0x28\n\tTCP_MAXSEG                              = 0x2\n\tTCP_MAXWIN                              = 0xffff\n\tTCP_MAX_SACK                            = 0x4\n\tTCP_MAX_WINSHIFT                        = 0xe\n\tTCP_MINMSS                              = 0xd8\n\tTCP_MSS                                 = 0x200\n\tTCP_NODELAY                             = 0x1\n\tTCP_NOOPT                               = 0x8\n\tTCP_NOPUSH                              = 0x4\n\tTCP_NOTSENT_LOWAT                       = 0x201\n\tTCP_RXT_CONNDROPTIME                    = 0x80\n\tTCP_RXT_FINDROP                         = 0x100\n\tTCP_SENDMOREACKS                        = 0x103\n\tTCSAFLUSH                               = 0x2\n\tTIOCCBRK                                = 0x2000747a\n\tTIOCCDTR                                = 0x20007478\n\tTIOCCONS                                = 0x80047462\n\tTIOCDCDTIMESTAMP                        = 0x40107458\n\tTIOCDRAIN                               = 0x2000745e\n\tTIOCDSIMICROCODE                        = 0x20007455\n\tTIOCEXCL                                = 0x2000740d\n\tTIOCEXT                                 = 0x80047460\n\tTIOCFLUSH                               = 0x80047410\n\tTIOCGDRAINWAIT                          = 0x40047456\n\tTIOCGETA                                = 0x40487413\n\tTIOCGETD                                = 0x4004741a\n\tTIOCGPGRP                               = 0x40047477\n\tTIOCGWINSZ                              = 0x40087468\n\tTIOCIXOFF                               = 0x20007480\n\tTIOCIXON                                = 0x20007481\n\tTIOCMBIC                                = 0x8004746b\n\tTIOCMBIS                                = 0x8004746c\n\tTIOCMGDTRWAIT                           = 0x4004745a\n\tTIOCMGET                                = 0x4004746a\n\tTIOCMODG                                = 0x40047403\n\tTIOCMODS                                = 0x80047404\n\tTIOCMSDTRWAIT                           = 0x8004745b\n\tTIOCMSET                                = 0x8004746d\n\tTIOCM_CAR                               = 0x40\n\tTIOCM_CD                                = 0x40\n\tTIOCM_CTS                               = 0x20\n\tTIOCM_DSR                               = 0x100\n\tTIOCM_DTR                               = 0x2\n\tTIOCM_LE                                = 0x1\n\tTIOCM_RI                                = 0x80\n\tTIOCM_RNG                               = 0x80\n\tTIOCM_RTS                               = 0x4\n\tTIOCM_SR                                = 0x10\n\tTIOCM_ST                                = 0x8\n\tTIOCNOTTY                               = 0x20007471\n\tTIOCNXCL                                = 0x2000740e\n\tTIOCOUTQ                                = 0x40047473\n\tTIOCPKT                                 = 0x80047470\n\tTIOCPKT_DATA                            = 0x0\n\tTIOCPKT_DOSTOP                          = 0x20\n\tTIOCPKT_FLUSHREAD                       = 0x1\n\tTIOCPKT_FLUSHWRITE                      = 0x2\n\tTIOCPKT_IOCTL                           = 0x40\n\tTIOCPKT_NOSTOP                          = 0x10\n\tTIOCPKT_START                           = 0x8\n\tTIOCPKT_STOP                            = 0x4\n\tTIOCPTYGNAME                            = 0x40807453\n\tTIOCPTYGRANT                            = 0x20007454\n\tTIOCPTYUNLK                             = 0x20007452\n\tTIOCREMOTE                              = 0x80047469\n\tTIOCSBRK                                = 0x2000747b\n\tTIOCSCONS                               = 0x20007463\n\tTIOCSCTTY                               = 0x20007461\n\tTIOCSDRAINWAIT                          = 0x80047457\n\tTIOCSDTR                                = 0x20007479\n\tTIOCSETA                                = 0x80487414\n\tTIOCSETAF                               = 0x80487416\n\tTIOCSETAW                               = 0x80487415\n\tTIOCSETD                                = 0x8004741b\n\tTIOCSIG                                 = 0x2000745f\n\tTIOCSPGRP                               = 0x80047476\n\tTIOCSTART                               = 0x2000746e\n\tTIOCSTAT                                = 0x20007465\n\tTIOCSTI                                 = 0x80017472\n\tTIOCSTOP                                = 0x2000746f\n\tTIOCSWINSZ                              = 0x80087467\n\tTIOCTIMESTAMP                           = 0x40107459\n\tTIOCUCNTL                               = 0x80047466\n\tTOSTOP                                  = 0x400000\n\tUF_APPEND                               = 0x4\n\tUF_COMPRESSED                           = 0x20\n\tUF_DATAVAULT                            = 0x80\n\tUF_HIDDEN                               = 0x8000\n\tUF_IMMUTABLE                            = 0x2\n\tUF_NODUMP                               = 0x1\n\tUF_OPAQUE                               = 0x8\n\tUF_SETTABLE                             = 0xffff\n\tUF_TRACKED                              = 0x40\n\tVDISCARD                                = 0xf\n\tVDSUSP                                  = 0xb\n\tVEOF                                    = 0x0\n\tVEOL                                    = 0x1\n\tVEOL2                                   = 0x2\n\tVERASE                                  = 0x3\n\tVINTR                                   = 0x8\n\tVKILL                                   = 0x5\n\tVLNEXT                                  = 0xe\n\tVMADDR_CID_ANY                          = 0xffffffff\n\tVMADDR_CID_HOST                         = 0x2\n\tVMADDR_CID_HYPERVISOR                   = 0x0\n\tVMADDR_CID_RESERVED                     = 0x1\n\tVMADDR_PORT_ANY                         = 0xffffffff\n\tVMIN                                    = 0x10\n\tVM_LOADAVG                              = 0x2\n\tVM_MACHFACTOR                           = 0x4\n\tVM_MAXID                                = 0x6\n\tVM_METER                                = 0x1\n\tVM_SWAPUSAGE                            = 0x5\n\tVQUIT                                   = 0x9\n\tVREPRINT                                = 0x6\n\tVSTART                                  = 0xc\n\tVSTATUS                                 = 0x12\n\tVSTOP                                   = 0xd\n\tVSUSP                                   = 0xa\n\tVT0                                     = 0x0\n\tVT1                                     = 0x10000\n\tVTDLY                                   = 0x10000\n\tVTIME                                   = 0x11\n\tVWERASE                                 = 0x4\n\tWCONTINUED                              = 0x10\n\tWCOREFLAG                               = 0x80\n\tWEXITED                                 = 0x4\n\tWNOHANG                                 = 0x1\n\tWNOWAIT                                 = 0x20\n\tWORDSIZE                                = 0x40\n\tWSTOPPED                                = 0x8\n\tWUNTRACED                               = 0x2\n\tXATTR_CREATE                            = 0x2\n\tXATTR_NODEFAULT                         = 0x10\n\tXATTR_NOFOLLOW                          = 0x1\n\tXATTR_NOSECURITY                        = 0x8\n\tXATTR_REPLACE                           = 0x4\n\tXATTR_SHOWCOMPRESSION                   = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && darwin\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                            = 0x10\n\tAF_CCITT                                = 0xa\n\tAF_CHAOS                                = 0x5\n\tAF_CNT                                  = 0x15\n\tAF_COIP                                 = 0x14\n\tAF_DATAKIT                              = 0x9\n\tAF_DECnet                               = 0xc\n\tAF_DLI                                  = 0xd\n\tAF_E164                                 = 0x1c\n\tAF_ECMA                                 = 0x8\n\tAF_HYLINK                               = 0xf\n\tAF_IEEE80211                            = 0x25\n\tAF_IMPLINK                              = 0x3\n\tAF_INET                                 = 0x2\n\tAF_INET6                                = 0x1e\n\tAF_IPX                                  = 0x17\n\tAF_ISDN                                 = 0x1c\n\tAF_ISO                                  = 0x7\n\tAF_LAT                                  = 0xe\n\tAF_LINK                                 = 0x12\n\tAF_LOCAL                                = 0x1\n\tAF_MAX                                  = 0x29\n\tAF_NATM                                 = 0x1f\n\tAF_NDRV                                 = 0x1b\n\tAF_NETBIOS                              = 0x21\n\tAF_NS                                   = 0x6\n\tAF_OSI                                  = 0x7\n\tAF_PPP                                  = 0x22\n\tAF_PUP                                  = 0x4\n\tAF_RESERVED_36                          = 0x24\n\tAF_ROUTE                                = 0x11\n\tAF_SIP                                  = 0x18\n\tAF_SNA                                  = 0xb\n\tAF_SYSTEM                               = 0x20\n\tAF_SYS_CONTROL                          = 0x2\n\tAF_UNIX                                 = 0x1\n\tAF_UNSPEC                               = 0x0\n\tAF_UTUN                                 = 0x26\n\tAF_VSOCK                                = 0x28\n\tALTWERASE                               = 0x200\n\tATTR_BIT_MAP_COUNT                      = 0x5\n\tATTR_CMN_ACCESSMASK                     = 0x20000\n\tATTR_CMN_ACCTIME                        = 0x1000\n\tATTR_CMN_ADDEDTIME                      = 0x10000000\n\tATTR_CMN_BKUPTIME                       = 0x2000\n\tATTR_CMN_CHGTIME                        = 0x800\n\tATTR_CMN_CRTIME                         = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS             = 0x40000000\n\tATTR_CMN_DEVID                          = 0x2\n\tATTR_CMN_DOCUMENT_ID                    = 0x100000\n\tATTR_CMN_ERROR                          = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY              = 0x400000\n\tATTR_CMN_FILEID                         = 0x2000000\n\tATTR_CMN_FLAGS                          = 0x40000\n\tATTR_CMN_FNDRINFO                       = 0x4000\n\tATTR_CMN_FSID                           = 0x4\n\tATTR_CMN_FULLPATH                       = 0x8000000\n\tATTR_CMN_GEN_COUNT                      = 0x80000\n\tATTR_CMN_GRPID                          = 0x10000\n\tATTR_CMN_GRPUUID                        = 0x1000000\n\tATTR_CMN_MODTIME                        = 0x400\n\tATTR_CMN_NAME                           = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT                 = 0x80000\n\tATTR_CMN_NAMEDATTRLIST                  = 0x100000\n\tATTR_CMN_OBJID                          = 0x20\n\tATTR_CMN_OBJPERMANENTID                 = 0x40\n\tATTR_CMN_OBJTAG                         = 0x10\n\tATTR_CMN_OBJTYPE                        = 0x8\n\tATTR_CMN_OWNERID                        = 0x8000\n\tATTR_CMN_PARENTID                       = 0x4000000\n\tATTR_CMN_PAROBJID                       = 0x80\n\tATTR_CMN_RETURNED_ATTRS                 = 0x80000000\n\tATTR_CMN_SCRIPT                         = 0x100\n\tATTR_CMN_SETMASK                        = 0x51c7ff00\n\tATTR_CMN_USERACCESS                     = 0x200000\n\tATTR_CMN_UUID                           = 0x800000\n\tATTR_CMN_VALIDMASK                      = 0xffffffff\n\tATTR_CMN_VOLSETMASK                     = 0x6700\n\tATTR_FILE_ALLOCSIZE                     = 0x4\n\tATTR_FILE_CLUMPSIZE                     = 0x10\n\tATTR_FILE_DATAALLOCSIZE                 = 0x400\n\tATTR_FILE_DATAEXTENTS                   = 0x800\n\tATTR_FILE_DATALENGTH                    = 0x200\n\tATTR_FILE_DEVTYPE                       = 0x20\n\tATTR_FILE_FILETYPE                      = 0x40\n\tATTR_FILE_FORKCOUNT                     = 0x80\n\tATTR_FILE_FORKLIST                      = 0x100\n\tATTR_FILE_IOBLOCKSIZE                   = 0x8\n\tATTR_FILE_LINKCOUNT                     = 0x1\n\tATTR_FILE_RSRCALLOCSIZE                 = 0x2000\n\tATTR_FILE_RSRCEXTENTS                   = 0x4000\n\tATTR_FILE_RSRCLENGTH                    = 0x1000\n\tATTR_FILE_SETMASK                       = 0x20\n\tATTR_FILE_TOTALSIZE                     = 0x2\n\tATTR_FILE_VALIDMASK                     = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP                = 0x40\n\tATTR_VOL_ATTRIBUTES                     = 0x40000000\n\tATTR_VOL_CAPABILITIES                   = 0x20000\n\tATTR_VOL_DIRCOUNT                       = 0x400\n\tATTR_VOL_ENCODINGSUSED                  = 0x10000\n\tATTR_VOL_FILECOUNT                      = 0x200\n\tATTR_VOL_FSTYPE                         = 0x1\n\tATTR_VOL_INFO                           = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE                    = 0x80\n\tATTR_VOL_MAXOBJCOUNT                    = 0x800\n\tATTR_VOL_MINALLOCATION                  = 0x20\n\tATTR_VOL_MOUNTEDDEVICE                  = 0x8000\n\tATTR_VOL_MOUNTFLAGS                     = 0x4000\n\tATTR_VOL_MOUNTPOINT                     = 0x1000\n\tATTR_VOL_NAME                           = 0x2000\n\tATTR_VOL_OBJCOUNT                       = 0x100\n\tATTR_VOL_QUOTA_SIZE                     = 0x10000000\n\tATTR_VOL_RESERVED_SIZE                  = 0x20000000\n\tATTR_VOL_SETMASK                        = 0x80002000\n\tATTR_VOL_SIGNATURE                      = 0x2\n\tATTR_VOL_SIZE                           = 0x4\n\tATTR_VOL_SPACEAVAIL                     = 0x10\n\tATTR_VOL_SPACEFREE                      = 0x8\n\tATTR_VOL_SPACEUSED                      = 0x800000\n\tATTR_VOL_UUID                           = 0x40000\n\tATTR_VOL_VALIDMASK                      = 0xf087ffff\n\tB0                                      = 0x0\n\tB110                                    = 0x6e\n\tB115200                                 = 0x1c200\n\tB1200                                   = 0x4b0\n\tB134                                    = 0x86\n\tB14400                                  = 0x3840\n\tB150                                    = 0x96\n\tB1800                                   = 0x708\n\tB19200                                  = 0x4b00\n\tB200                                    = 0xc8\n\tB230400                                 = 0x38400\n\tB2400                                   = 0x960\n\tB28800                                  = 0x7080\n\tB300                                    = 0x12c\n\tB38400                                  = 0x9600\n\tB4800                                   = 0x12c0\n\tB50                                     = 0x32\n\tB57600                                  = 0xe100\n\tB600                                    = 0x258\n\tB7200                                   = 0x1c20\n\tB75                                     = 0x4b\n\tB76800                                  = 0x12c00\n\tB9600                                   = 0x2580\n\tBIOCFLUSH                               = 0x20004268\n\tBIOCGBLEN                               = 0x40044266\n\tBIOCGDLT                                = 0x4004426a\n\tBIOCGDLTLIST                            = 0xc00c4279\n\tBIOCGETIF                               = 0x4020426b\n\tBIOCGHDRCMPLT                           = 0x40044274\n\tBIOCGRSIG                               = 0x40044272\n\tBIOCGRTIMEOUT                           = 0x4010426e\n\tBIOCGSEESENT                            = 0x40044276\n\tBIOCGSTATS                              = 0x4008426f\n\tBIOCIMMEDIATE                           = 0x80044270\n\tBIOCPROMISC                             = 0x20004269\n\tBIOCSBLEN                               = 0xc0044266\n\tBIOCSDLT                                = 0x80044278\n\tBIOCSETF                                = 0x80104267\n\tBIOCSETFNR                              = 0x8010427e\n\tBIOCSETIF                               = 0x8020426c\n\tBIOCSHDRCMPLT                           = 0x80044275\n\tBIOCSRSIG                               = 0x80044273\n\tBIOCSRTIMEOUT                           = 0x8010426d\n\tBIOCSSEESENT                            = 0x80044277\n\tBIOCVERSION                             = 0x40044271\n\tBPF_A                                   = 0x10\n\tBPF_ABS                                 = 0x20\n\tBPF_ADD                                 = 0x0\n\tBPF_ALIGNMENT                           = 0x4\n\tBPF_ALU                                 = 0x4\n\tBPF_AND                                 = 0x50\n\tBPF_B                                   = 0x10\n\tBPF_DIV                                 = 0x30\n\tBPF_H                                   = 0x8\n\tBPF_IMM                                 = 0x0\n\tBPF_IND                                 = 0x40\n\tBPF_JA                                  = 0x0\n\tBPF_JEQ                                 = 0x10\n\tBPF_JGE                                 = 0x30\n\tBPF_JGT                                 = 0x20\n\tBPF_JMP                                 = 0x5\n\tBPF_JSET                                = 0x40\n\tBPF_K                                   = 0x0\n\tBPF_LD                                  = 0x0\n\tBPF_LDX                                 = 0x1\n\tBPF_LEN                                 = 0x80\n\tBPF_LSH                                 = 0x60\n\tBPF_MAJOR_VERSION                       = 0x1\n\tBPF_MAXBUFSIZE                          = 0x80000\n\tBPF_MAXINSNS                            = 0x200\n\tBPF_MEM                                 = 0x60\n\tBPF_MEMWORDS                            = 0x10\n\tBPF_MINBUFSIZE                          = 0x20\n\tBPF_MINOR_VERSION                       = 0x1\n\tBPF_MISC                                = 0x7\n\tBPF_MSH                                 = 0xa0\n\tBPF_MUL                                 = 0x20\n\tBPF_NEG                                 = 0x80\n\tBPF_OR                                  = 0x40\n\tBPF_RELEASE                             = 0x30bb6\n\tBPF_RET                                 = 0x6\n\tBPF_RSH                                 = 0x70\n\tBPF_ST                                  = 0x2\n\tBPF_STX                                 = 0x3\n\tBPF_SUB                                 = 0x10\n\tBPF_TAX                                 = 0x0\n\tBPF_TXA                                 = 0x80\n\tBPF_W                                   = 0x0\n\tBPF_X                                   = 0x8\n\tBRKINT                                  = 0x2\n\tBS0                                     = 0x0\n\tBS1                                     = 0x8000\n\tBSDLY                                   = 0x8000\n\tCFLUSH                                  = 0xf\n\tCLOCAL                                  = 0x8000\n\tCLOCK_MONOTONIC                         = 0x6\n\tCLOCK_MONOTONIC_RAW                     = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX              = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID                = 0xc\n\tCLOCK_REALTIME                          = 0x0\n\tCLOCK_THREAD_CPUTIME_ID                 = 0x10\n\tCLOCK_UPTIME_RAW                        = 0x8\n\tCLOCK_UPTIME_RAW_APPROX                 = 0x9\n\tCLONE_NOFOLLOW                          = 0x1\n\tCLONE_NOOWNERCOPY                       = 0x2\n\tCONNECT_DATA_AUTHENTICATED              = 0x4\n\tCONNECT_DATA_IDEMPOTENT                 = 0x2\n\tCONNECT_RESUME_ON_READ_WRITE            = 0x1\n\tCR0                                     = 0x0\n\tCR1                                     = 0x1000\n\tCR2                                     = 0x2000\n\tCR3                                     = 0x3000\n\tCRDLY                                   = 0x3000\n\tCREAD                                   = 0x800\n\tCRTSCTS                                 = 0x30000\n\tCS5                                     = 0x0\n\tCS6                                     = 0x100\n\tCS7                                     = 0x200\n\tCS8                                     = 0x300\n\tCSIZE                                   = 0x300\n\tCSTART                                  = 0x11\n\tCSTATUS                                 = 0x14\n\tCSTOP                                   = 0x13\n\tCSTOPB                                  = 0x400\n\tCSUSP                                   = 0x1a\n\tCTLIOCGINFO                             = 0xc0644e03\n\tCTL_HW                                  = 0x6\n\tCTL_KERN                                = 0x1\n\tCTL_MAXNAME                             = 0xc\n\tCTL_NET                                 = 0x4\n\tDLT_A429                                = 0xb8\n\tDLT_A653_ICM                            = 0xb9\n\tDLT_AIRONET_HEADER                      = 0x78\n\tDLT_AOS                                 = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394              = 0x8a\n\tDLT_ARCNET                              = 0x7\n\tDLT_ARCNET_LINUX                        = 0x81\n\tDLT_ATM_CLIP                            = 0x13\n\tDLT_ATM_RFC1483                         = 0xb\n\tDLT_AURORA                              = 0x7e\n\tDLT_AX25                                = 0x3\n\tDLT_AX25_KISS                           = 0xca\n\tDLT_BACNET_MS_TP                        = 0xa5\n\tDLT_BLUETOOTH_HCI_H4                    = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR          = 0xc9\n\tDLT_CAN20B                              = 0xbe\n\tDLT_CAN_SOCKETCAN                       = 0xe3\n\tDLT_CHAOS                               = 0x5\n\tDLT_CHDLC                               = 0x68\n\tDLT_CISCO_IOS                           = 0x76\n\tDLT_C_HDLC                              = 0x68\n\tDLT_C_HDLC_WITH_DIR                     = 0xcd\n\tDLT_DBUS                                = 0xe7\n\tDLT_DECT                                = 0xdd\n\tDLT_DOCSIS                              = 0x8f\n\tDLT_DVB_CI                              = 0xeb\n\tDLT_ECONET                              = 0x73\n\tDLT_EN10MB                              = 0x1\n\tDLT_EN3MB                               = 0x2\n\tDLT_ENC                                 = 0x6d\n\tDLT_ERF                                 = 0xc5\n\tDLT_ERF_ETH                             = 0xaf\n\tDLT_ERF_POS                             = 0xb0\n\tDLT_FC_2                                = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS              = 0xe1\n\tDLT_FDDI                                = 0xa\n\tDLT_FLEXRAY                             = 0xd2\n\tDLT_FRELAY                              = 0x6b\n\tDLT_FRELAY_WITH_DIR                     = 0xce\n\tDLT_GCOM_SERIAL                         = 0xad\n\tDLT_GCOM_T1E1                           = 0xac\n\tDLT_GPF_F                               = 0xab\n\tDLT_GPF_T                               = 0xaa\n\tDLT_GPRS_LLC                            = 0xa9\n\tDLT_GSMTAP_ABIS                         = 0xda\n\tDLT_GSMTAP_UM                           = 0xd9\n\tDLT_HHDLC                               = 0x79\n\tDLT_IBM_SN                              = 0x92\n\tDLT_IBM_SP                              = 0x91\n\tDLT_IEEE802                             = 0x6\n\tDLT_IEEE802_11                          = 0x69\n\tDLT_IEEE802_11_RADIO                    = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS                = 0xa3\n\tDLT_IEEE802_15_4                        = 0xc3\n\tDLT_IEEE802_15_4_LINUX                  = 0xbf\n\tDLT_IEEE802_15_4_NOFCS                  = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY             = 0xd7\n\tDLT_IEEE802_16_MAC_CPS                  = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO            = 0xc1\n\tDLT_IPFILTER                            = 0x74\n\tDLT_IPMB                                = 0xc7\n\tDLT_IPMB_LINUX                          = 0xd1\n\tDLT_IPNET                               = 0xe2\n\tDLT_IPOIB                               = 0xf2\n\tDLT_IPV4                                = 0xe4\n\tDLT_IPV6                                = 0xe5\n\tDLT_IP_OVER_FC                          = 0x7a\n\tDLT_JUNIPER_ATM1                        = 0x89\n\tDLT_JUNIPER_ATM2                        = 0x87\n\tDLT_JUNIPER_ATM_CEMIC                   = 0xee\n\tDLT_JUNIPER_CHDLC                       = 0xb5\n\tDLT_JUNIPER_ES                          = 0x84\n\tDLT_JUNIPER_ETHER                       = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL                = 0xea\n\tDLT_JUNIPER_FRELAY                      = 0xb4\n\tDLT_JUNIPER_GGSN                        = 0x85\n\tDLT_JUNIPER_ISM                         = 0xc2\n\tDLT_JUNIPER_MFR                         = 0x86\n\tDLT_JUNIPER_MLFR                        = 0x83\n\tDLT_JUNIPER_MLPPP                       = 0x82\n\tDLT_JUNIPER_MONITOR                     = 0xa4\n\tDLT_JUNIPER_PIC_PEER                    = 0xae\n\tDLT_JUNIPER_PPP                         = 0xb3\n\tDLT_JUNIPER_PPPOE                       = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM                   = 0xa8\n\tDLT_JUNIPER_SERVICES                    = 0x88\n\tDLT_JUNIPER_SRX_E2E                     = 0xe9\n\tDLT_JUNIPER_ST                          = 0xc8\n\tDLT_JUNIPER_VP                          = 0xb7\n\tDLT_JUNIPER_VS                          = 0xe8\n\tDLT_LAPB_WITH_DIR                       = 0xcf\n\tDLT_LAPD                                = 0xcb\n\tDLT_LIN                                 = 0xd4\n\tDLT_LINUX_EVDEV                         = 0xd8\n\tDLT_LINUX_IRDA                          = 0x90\n\tDLT_LINUX_LAPD                          = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION             = 0xa6\n\tDLT_LINUX_SLL                           = 0x71\n\tDLT_LOOP                                = 0x6c\n\tDLT_LTALK                               = 0x72\n\tDLT_MATCHING_MAX                        = 0x10a\n\tDLT_MATCHING_MIN                        = 0x68\n\tDLT_MFR                                 = 0xb6\n\tDLT_MOST                                = 0xd3\n\tDLT_MPEG_2_TS                           = 0xf3\n\tDLT_MPLS                                = 0xdb\n\tDLT_MTP2                                = 0x8c\n\tDLT_MTP2_WITH_PHDR                      = 0x8b\n\tDLT_MTP3                                = 0x8d\n\tDLT_MUX27010                            = 0xec\n\tDLT_NETANALYZER                         = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT             = 0xf1\n\tDLT_NFC_LLCP                            = 0xf5\n\tDLT_NFLOG                               = 0xef\n\tDLT_NG40                                = 0xf4\n\tDLT_NULL                                = 0x0\n\tDLT_PCI_EXP                             = 0x7d\n\tDLT_PFLOG                               = 0x75\n\tDLT_PFSYNC                              = 0x12\n\tDLT_PPI                                 = 0xc0\n\tDLT_PPP                                 = 0x9\n\tDLT_PPP_BSDOS                           = 0x10\n\tDLT_PPP_ETHER                           = 0x33\n\tDLT_PPP_PPPD                            = 0xa6\n\tDLT_PPP_SERIAL                          = 0x32\n\tDLT_PPP_WITH_DIR                        = 0xcc\n\tDLT_PPP_WITH_DIRECTION                  = 0xa6\n\tDLT_PRISM_HEADER                        = 0x77\n\tDLT_PRONET                              = 0x4\n\tDLT_RAIF1                               = 0xc6\n\tDLT_RAW                                 = 0xc\n\tDLT_RIO                                 = 0x7c\n\tDLT_SCCP                                = 0x8e\n\tDLT_SITA                                = 0xc4\n\tDLT_SLIP                                = 0x8\n\tDLT_SLIP_BSDOS                          = 0xf\n\tDLT_STANAG_5066_D_PDU                   = 0xed\n\tDLT_SUNATM                              = 0x7b\n\tDLT_SYMANTEC_FIREWALL                   = 0x63\n\tDLT_TZSP                                = 0x80\n\tDLT_USB                                 = 0xba\n\tDLT_USB_DARWIN                          = 0x10a\n\tDLT_USB_LINUX                           = 0xbd\n\tDLT_USB_LINUX_MMAPPED                   = 0xdc\n\tDLT_USER0                               = 0x93\n\tDLT_USER1                               = 0x94\n\tDLT_USER10                              = 0x9d\n\tDLT_USER11                              = 0x9e\n\tDLT_USER12                              = 0x9f\n\tDLT_USER13                              = 0xa0\n\tDLT_USER14                              = 0xa1\n\tDLT_USER15                              = 0xa2\n\tDLT_USER2                               = 0x95\n\tDLT_USER3                               = 0x96\n\tDLT_USER4                               = 0x97\n\tDLT_USER5                               = 0x98\n\tDLT_USER6                               = 0x99\n\tDLT_USER7                               = 0x9a\n\tDLT_USER8                               = 0x9b\n\tDLT_USER9                               = 0x9c\n\tDLT_WIHART                              = 0xdf\n\tDLT_X2E_SERIAL                          = 0xd5\n\tDLT_X2E_XORAYA                          = 0xd6\n\tDT_BLK                                  = 0x6\n\tDT_CHR                                  = 0x2\n\tDT_DIR                                  = 0x4\n\tDT_FIFO                                 = 0x1\n\tDT_LNK                                  = 0xa\n\tDT_REG                                  = 0x8\n\tDT_SOCK                                 = 0xc\n\tDT_UNKNOWN                              = 0x0\n\tDT_WHT                                  = 0xe\n\tECHO                                    = 0x8\n\tECHOCTL                                 = 0x40\n\tECHOE                                   = 0x2\n\tECHOK                                   = 0x4\n\tECHOKE                                  = 0x1\n\tECHONL                                  = 0x10\n\tECHOPRT                                 = 0x20\n\tEVFILT_AIO                              = -0x3\n\tEVFILT_EXCEPT                           = -0xf\n\tEVFILT_FS                               = -0x9\n\tEVFILT_MACHPORT                         = -0x8\n\tEVFILT_PROC                             = -0x5\n\tEVFILT_READ                             = -0x1\n\tEVFILT_SIGNAL                           = -0x6\n\tEVFILT_SYSCOUNT                         = 0x11\n\tEVFILT_THREADMARKER                     = 0x11\n\tEVFILT_TIMER                            = -0x7\n\tEVFILT_USER                             = -0xa\n\tEVFILT_VM                               = -0xc\n\tEVFILT_VNODE                            = -0x4\n\tEVFILT_WRITE                            = -0x2\n\tEV_ADD                                  = 0x1\n\tEV_CLEAR                                = 0x20\n\tEV_DELETE                               = 0x2\n\tEV_DISABLE                              = 0x8\n\tEV_DISPATCH                             = 0x80\n\tEV_DISPATCH2                            = 0x180\n\tEV_ENABLE                               = 0x4\n\tEV_EOF                                  = 0x8000\n\tEV_ERROR                                = 0x4000\n\tEV_FLAG0                                = 0x1000\n\tEV_FLAG1                                = 0x2000\n\tEV_ONESHOT                              = 0x10\n\tEV_OOBAND                               = 0x2000\n\tEV_POLL                                 = 0x1000\n\tEV_RECEIPT                              = 0x40\n\tEV_SYSFLAGS                             = 0xf000\n\tEV_UDATA_SPECIFIC                       = 0x100\n\tEV_VANISHED                             = 0x200\n\tEXTA                                    = 0x4b00\n\tEXTB                                    = 0x9600\n\tEXTPROC                                 = 0x800\n\tFD_CLOEXEC                              = 0x1\n\tFD_SETSIZE                              = 0x400\n\tFF0                                     = 0x0\n\tFF1                                     = 0x4000\n\tFFDLY                                   = 0x4000\n\tFLUSHO                                  = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED                 = 0x20\n\tFSOPT_NOFOLLOW                          = 0x1\n\tFSOPT_NOINMEMUPDATE                     = 0x2\n\tFSOPT_PACK_INVAL_ATTRS                  = 0x8\n\tFSOPT_REPORT_FULLSIZE                   = 0x4\n\tFSOPT_RETURN_REALDEV                    = 0x200\n\tF_ADDFILESIGS                           = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM              = 0x53\n\tF_ADDFILESIGS_INFO                      = 0x67\n\tF_ADDFILESIGS_RETURN                    = 0x61\n\tF_ADDFILESUPPL                          = 0x68\n\tF_ADDSIGS                               = 0x3b\n\tF_ALLOCATEALL                           = 0x4\n\tF_ALLOCATECONTIG                        = 0x2\n\tF_BARRIERFSYNC                          = 0x55\n\tF_CHECK_LV                              = 0x62\n\tF_CHKCLEAN                              = 0x29\n\tF_DUPFD                                 = 0x0\n\tF_DUPFD_CLOEXEC                         = 0x43\n\tF_FINDSIGS                              = 0x4e\n\tF_FLUSH_DATA                            = 0x28\n\tF_FREEZE_FS                             = 0x35\n\tF_FULLFSYNC                             = 0x33\n\tF_GETCODEDIR                            = 0x48\n\tF_GETFD                                 = 0x1\n\tF_GETFL                                 = 0x3\n\tF_GETLK                                 = 0x7\n\tF_GETLKPID                              = 0x42\n\tF_GETNOSIGPIPE                          = 0x4a\n\tF_GETOWN                                = 0x5\n\tF_GETPATH                               = 0x32\n\tF_GETPATH_MTMINFO                       = 0x47\n\tF_GETPATH_NOFIRMLINK                    = 0x66\n\tF_GETPROTECTIONCLASS                    = 0x3f\n\tF_GETPROTECTIONLEVEL                    = 0x4d\n\tF_GETSIGSINFO                           = 0x69\n\tF_GLOBAL_NOCACHE                        = 0x37\n\tF_LOG2PHYS                              = 0x31\n\tF_LOG2PHYS_EXT                          = 0x41\n\tF_NOCACHE                               = 0x30\n\tF_NODIRECT                              = 0x3e\n\tF_OK                                    = 0x0\n\tF_PATHPKG_CHECK                         = 0x34\n\tF_PEOFPOSMODE                           = 0x3\n\tF_PREALLOCATE                           = 0x2a\n\tF_PUNCHHOLE                             = 0x63\n\tF_RDADVISE                              = 0x2c\n\tF_RDAHEAD                               = 0x2d\n\tF_RDLCK                                 = 0x1\n\tF_SETBACKINGSTORE                       = 0x46\n\tF_SETFD                                 = 0x2\n\tF_SETFL                                 = 0x4\n\tF_SETLK                                 = 0x8\n\tF_SETLKW                                = 0x9\n\tF_SETLKWTIMEOUT                         = 0xa\n\tF_SETNOSIGPIPE                          = 0x49\n\tF_SETOWN                                = 0x6\n\tF_SETPROTECTIONCLASS                    = 0x40\n\tF_SETSIZE                               = 0x2b\n\tF_SINGLE_WRITER                         = 0x4c\n\tF_SPECULATIVE_READ                      = 0x65\n\tF_THAW_FS                               = 0x36\n\tF_TRANSCODEKEY                          = 0x4b\n\tF_TRIM_ACTIVE_FILE                      = 0x64\n\tF_UNLCK                                 = 0x2\n\tF_VOLPOSMODE                            = 0x4\n\tF_WRLCK                                 = 0x3\n\tHUPCL                                   = 0x4000\n\tHW_MACHINE                              = 0x1\n\tICANON                                  = 0x100\n\tICMP6_FILTER                            = 0x12\n\tICRNL                                   = 0x100\n\tIEXTEN                                  = 0x400\n\tIFF_ALLMULTI                            = 0x200\n\tIFF_ALTPHYS                             = 0x4000\n\tIFF_BROADCAST                           = 0x2\n\tIFF_DEBUG                               = 0x4\n\tIFF_LINK0                               = 0x1000\n\tIFF_LINK1                               = 0x2000\n\tIFF_LINK2                               = 0x4000\n\tIFF_LOOPBACK                            = 0x8\n\tIFF_MULTICAST                           = 0x8000\n\tIFF_NOARP                               = 0x80\n\tIFF_NOTRAILERS                          = 0x20\n\tIFF_OACTIVE                             = 0x400\n\tIFF_POINTOPOINT                         = 0x10\n\tIFF_PROMISC                             = 0x100\n\tIFF_RUNNING                             = 0x40\n\tIFF_SIMPLEX                             = 0x800\n\tIFF_UP                                  = 0x1\n\tIFNAMSIZ                                = 0x10\n\tIFT_1822                                = 0x2\n\tIFT_6LOWPAN                             = 0x40\n\tIFT_AAL5                                = 0x31\n\tIFT_ARCNET                              = 0x23\n\tIFT_ARCNETPLUS                          = 0x24\n\tIFT_ATM                                 = 0x25\n\tIFT_BRIDGE                              = 0xd1\n\tIFT_CARP                                = 0xf8\n\tIFT_CELLULAR                            = 0xff\n\tIFT_CEPT                                = 0x13\n\tIFT_DS3                                 = 0x1e\n\tIFT_ENC                                 = 0xf4\n\tIFT_EON                                 = 0x19\n\tIFT_ETHER                               = 0x6\n\tIFT_FAITH                               = 0x38\n\tIFT_FDDI                                = 0xf\n\tIFT_FRELAY                              = 0x20\n\tIFT_FRELAYDCE                           = 0x2c\n\tIFT_GIF                                 = 0x37\n\tIFT_HDH1822                             = 0x3\n\tIFT_HIPPI                               = 0x2f\n\tIFT_HSSI                                = 0x2e\n\tIFT_HY                                  = 0xe\n\tIFT_IEEE1394                            = 0x90\n\tIFT_IEEE8023ADLAG                       = 0x88\n\tIFT_ISDNBASIC                           = 0x14\n\tIFT_ISDNPRIMARY                         = 0x15\n\tIFT_ISO88022LLC                         = 0x29\n\tIFT_ISO88023                            = 0x7\n\tIFT_ISO88024                            = 0x8\n\tIFT_ISO88025                            = 0x9\n\tIFT_ISO88026                            = 0xa\n\tIFT_L2VLAN                              = 0x87\n\tIFT_LAPB                                = 0x10\n\tIFT_LOCALTALK                           = 0x2a\n\tIFT_LOOP                                = 0x18\n\tIFT_MIOX25                              = 0x26\n\tIFT_MODEM                               = 0x30\n\tIFT_NSIP                                = 0x1b\n\tIFT_OTHER                               = 0x1\n\tIFT_P10                                 = 0xc\n\tIFT_P80                                 = 0xd\n\tIFT_PARA                                = 0x22\n\tIFT_PDP                                 = 0xff\n\tIFT_PFLOG                               = 0xf5\n\tIFT_PFSYNC                              = 0xf6\n\tIFT_PKTAP                               = 0xfe\n\tIFT_PPP                                 = 0x17\n\tIFT_PROPMUX                             = 0x36\n\tIFT_PROPVIRTUAL                         = 0x35\n\tIFT_PTPSERIAL                           = 0x16\n\tIFT_RS232                               = 0x21\n\tIFT_SDLC                                = 0x11\n\tIFT_SIP                                 = 0x1f\n\tIFT_SLIP                                = 0x1c\n\tIFT_SMDSDXI                             = 0x2b\n\tIFT_SMDSICIP                            = 0x34\n\tIFT_SONET                               = 0x27\n\tIFT_SONETPATH                           = 0x32\n\tIFT_SONETVT                             = 0x33\n\tIFT_STARLAN                             = 0xb\n\tIFT_STF                                 = 0x39\n\tIFT_T1                                  = 0x12\n\tIFT_ULTRA                               = 0x1d\n\tIFT_V35                                 = 0x2d\n\tIFT_X25                                 = 0x5\n\tIFT_X25DDN                              = 0x4\n\tIFT_X25PLE                              = 0x28\n\tIFT_XETHER                              = 0x1a\n\tIGNBRK                                  = 0x1\n\tIGNCR                                   = 0x80\n\tIGNPAR                                  = 0x4\n\tIMAXBEL                                 = 0x2000\n\tINLCR                                   = 0x40\n\tINPCK                                   = 0x10\n\tIN_CLASSA_HOST                          = 0xffffff\n\tIN_CLASSA_MAX                           = 0x80\n\tIN_CLASSA_NET                           = 0xff000000\n\tIN_CLASSA_NSHIFT                        = 0x18\n\tIN_CLASSB_HOST                          = 0xffff\n\tIN_CLASSB_MAX                           = 0x10000\n\tIN_CLASSB_NET                           = 0xffff0000\n\tIN_CLASSB_NSHIFT                        = 0x10\n\tIN_CLASSC_HOST                          = 0xff\n\tIN_CLASSC_NET                           = 0xffffff00\n\tIN_CLASSC_NSHIFT                        = 0x8\n\tIN_CLASSD_HOST                          = 0xfffffff\n\tIN_CLASSD_NET                           = 0xf0000000\n\tIN_CLASSD_NSHIFT                        = 0x1c\n\tIN_LINKLOCALNETNUM                      = 0xa9fe0000\n\tIN_LOOPBACKNET                          = 0x7f\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID          = 0x400473d1\n\tIPPROTO_3PC                             = 0x22\n\tIPPROTO_ADFS                            = 0x44\n\tIPPROTO_AH                              = 0x33\n\tIPPROTO_AHIP                            = 0x3d\n\tIPPROTO_APES                            = 0x63\n\tIPPROTO_ARGUS                           = 0xd\n\tIPPROTO_AX25                            = 0x5d\n\tIPPROTO_BHA                             = 0x31\n\tIPPROTO_BLT                             = 0x1e\n\tIPPROTO_BRSATMON                        = 0x4c\n\tIPPROTO_CFTP                            = 0x3e\n\tIPPROTO_CHAOS                           = 0x10\n\tIPPROTO_CMTP                            = 0x26\n\tIPPROTO_CPHB                            = 0x49\n\tIPPROTO_CPNX                            = 0x48\n\tIPPROTO_DDP                             = 0x25\n\tIPPROTO_DGP                             = 0x56\n\tIPPROTO_DIVERT                          = 0xfe\n\tIPPROTO_DONE                            = 0x101\n\tIPPROTO_DSTOPTS                         = 0x3c\n\tIPPROTO_EGP                             = 0x8\n\tIPPROTO_EMCON                           = 0xe\n\tIPPROTO_ENCAP                           = 0x62\n\tIPPROTO_EON                             = 0x50\n\tIPPROTO_ESP                             = 0x32\n\tIPPROTO_ETHERIP                         = 0x61\n\tIPPROTO_FRAGMENT                        = 0x2c\n\tIPPROTO_GGP                             = 0x3\n\tIPPROTO_GMTP                            = 0x64\n\tIPPROTO_GRE                             = 0x2f\n\tIPPROTO_HELLO                           = 0x3f\n\tIPPROTO_HMP                             = 0x14\n\tIPPROTO_HOPOPTS                         = 0x0\n\tIPPROTO_ICMP                            = 0x1\n\tIPPROTO_ICMPV6                          = 0x3a\n\tIPPROTO_IDP                             = 0x16\n\tIPPROTO_IDPR                            = 0x23\n\tIPPROTO_IDRP                            = 0x2d\n\tIPPROTO_IGMP                            = 0x2\n\tIPPROTO_IGP                             = 0x55\n\tIPPROTO_IGRP                            = 0x58\n\tIPPROTO_IL                              = 0x28\n\tIPPROTO_INLSP                           = 0x34\n\tIPPROTO_INP                             = 0x20\n\tIPPROTO_IP                              = 0x0\n\tIPPROTO_IPCOMP                          = 0x6c\n\tIPPROTO_IPCV                            = 0x47\n\tIPPROTO_IPEIP                           = 0x5e\n\tIPPROTO_IPIP                            = 0x4\n\tIPPROTO_IPPC                            = 0x43\n\tIPPROTO_IPV4                            = 0x4\n\tIPPROTO_IPV6                            = 0x29\n\tIPPROTO_IRTP                            = 0x1c\n\tIPPROTO_KRYPTOLAN                       = 0x41\n\tIPPROTO_LARP                            = 0x5b\n\tIPPROTO_LEAF1                           = 0x19\n\tIPPROTO_LEAF2                           = 0x1a\n\tIPPROTO_MAX                             = 0x100\n\tIPPROTO_MAXID                           = 0x34\n\tIPPROTO_MEAS                            = 0x13\n\tIPPROTO_MHRP                            = 0x30\n\tIPPROTO_MICP                            = 0x5f\n\tIPPROTO_MTP                             = 0x5c\n\tIPPROTO_MUX                             = 0x12\n\tIPPROTO_ND                              = 0x4d\n\tIPPROTO_NHRP                            = 0x36\n\tIPPROTO_NONE                            = 0x3b\n\tIPPROTO_NSP                             = 0x1f\n\tIPPROTO_NVPII                           = 0xb\n\tIPPROTO_OSPFIGP                         = 0x59\n\tIPPROTO_PGM                             = 0x71\n\tIPPROTO_PIGP                            = 0x9\n\tIPPROTO_PIM                             = 0x67\n\tIPPROTO_PRM                             = 0x15\n\tIPPROTO_PUP                             = 0xc\n\tIPPROTO_PVP                             = 0x4b\n\tIPPROTO_RAW                             = 0xff\n\tIPPROTO_RCCMON                          = 0xa\n\tIPPROTO_RDP                             = 0x1b\n\tIPPROTO_ROUTING                         = 0x2b\n\tIPPROTO_RSVP                            = 0x2e\n\tIPPROTO_RVD                             = 0x42\n\tIPPROTO_SATEXPAK                        = 0x40\n\tIPPROTO_SATMON                          = 0x45\n\tIPPROTO_SCCSP                           = 0x60\n\tIPPROTO_SCTP                            = 0x84\n\tIPPROTO_SDRP                            = 0x2a\n\tIPPROTO_SEP                             = 0x21\n\tIPPROTO_SRPC                            = 0x5a\n\tIPPROTO_ST                              = 0x7\n\tIPPROTO_SVMTP                           = 0x52\n\tIPPROTO_SWIPE                           = 0x35\n\tIPPROTO_TCF                             = 0x57\n\tIPPROTO_TCP                             = 0x6\n\tIPPROTO_TP                              = 0x1d\n\tIPPROTO_TPXX                            = 0x27\n\tIPPROTO_TRUNK1                          = 0x17\n\tIPPROTO_TRUNK2                          = 0x18\n\tIPPROTO_TTP                             = 0x54\n\tIPPROTO_UDP                             = 0x11\n\tIPPROTO_VINES                           = 0x53\n\tIPPROTO_VISA                            = 0x46\n\tIPPROTO_VMTP                            = 0x51\n\tIPPROTO_WBEXPAK                         = 0x4f\n\tIPPROTO_WBMON                           = 0x4e\n\tIPPROTO_WSN                             = 0x4a\n\tIPPROTO_XNET                            = 0xf\n\tIPPROTO_XTP                             = 0x24\n\tIPV6_2292DSTOPTS                        = 0x17\n\tIPV6_2292HOPLIMIT                       = 0x14\n\tIPV6_2292HOPOPTS                        = 0x16\n\tIPV6_2292NEXTHOP                        = 0x15\n\tIPV6_2292PKTINFO                        = 0x13\n\tIPV6_2292PKTOPTIONS                     = 0x19\n\tIPV6_2292RTHDR                          = 0x18\n\tIPV6_3542DSTOPTS                        = 0x32\n\tIPV6_3542HOPLIMIT                       = 0x2f\n\tIPV6_3542HOPOPTS                        = 0x31\n\tIPV6_3542NEXTHOP                        = 0x30\n\tIPV6_3542PKTINFO                        = 0x2e\n\tIPV6_3542RTHDR                          = 0x33\n\tIPV6_ADDR_MC_FLAGS_PREFIX               = 0x20\n\tIPV6_ADDR_MC_FLAGS_TRANSIENT            = 0x10\n\tIPV6_ADDR_MC_FLAGS_UNICAST_BASED        = 0x30\n\tIPV6_AUTOFLOWLABEL                      = 0x3b\n\tIPV6_BINDV6ONLY                         = 0x1b\n\tIPV6_BOUND_IF                           = 0x7d\n\tIPV6_CHECKSUM                           = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS             = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP             = 0x1\n\tIPV6_DEFHLIM                            = 0x40\n\tIPV6_DONTFRAG                           = 0x3e\n\tIPV6_DSTOPTS                            = 0x32\n\tIPV6_FAITH                              = 0x1d\n\tIPV6_FLOWINFO_MASK                      = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK                     = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                      = 0x3000\n\tIPV6_FRAGTTL                            = 0x3c\n\tIPV6_FW_ADD                             = 0x1e\n\tIPV6_FW_DEL                             = 0x1f\n\tIPV6_FW_FLUSH                           = 0x20\n\tIPV6_FW_GET                             = 0x22\n\tIPV6_FW_ZERO                            = 0x21\n\tIPV6_HLIMDEC                            = 0x1\n\tIPV6_HOPLIMIT                           = 0x2f\n\tIPV6_HOPOPTS                            = 0x31\n\tIPV6_IPSEC_POLICY                       = 0x1c\n\tIPV6_JOIN_GROUP                         = 0xc\n\tIPV6_LEAVE_GROUP                        = 0xd\n\tIPV6_MAXHLIM                            = 0xff\n\tIPV6_MAXOPTHDR                          = 0x800\n\tIPV6_MAXPACKET                          = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER               = 0x200\n\tIPV6_MAX_MEMBERSHIPS                    = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER                = 0x80\n\tIPV6_MIN_MEMBERSHIPS                    = 0x1f\n\tIPV6_MMTU                               = 0x500\n\tIPV6_MSFILTER                           = 0x4a\n\tIPV6_MULTICAST_HOPS                     = 0xa\n\tIPV6_MULTICAST_IF                       = 0x9\n\tIPV6_MULTICAST_LOOP                     = 0xb\n\tIPV6_NEXTHOP                            = 0x30\n\tIPV6_PATHMTU                            = 0x2c\n\tIPV6_PKTINFO                            = 0x2e\n\tIPV6_PORTRANGE                          = 0xe\n\tIPV6_PORTRANGE_DEFAULT                  = 0x0\n\tIPV6_PORTRANGE_HIGH                     = 0x1\n\tIPV6_PORTRANGE_LOW                      = 0x2\n\tIPV6_PREFER_TEMPADDR                    = 0x3f\n\tIPV6_RECVDSTOPTS                        = 0x28\n\tIPV6_RECVHOPLIMIT                       = 0x25\n\tIPV6_RECVHOPOPTS                        = 0x27\n\tIPV6_RECVPATHMTU                        = 0x2b\n\tIPV6_RECVPKTINFO                        = 0x3d\n\tIPV6_RECVRTHDR                          = 0x26\n\tIPV6_RECVTCLASS                         = 0x23\n\tIPV6_RTHDR                              = 0x33\n\tIPV6_RTHDRDSTOPTS                       = 0x39\n\tIPV6_RTHDR_LOOSE                        = 0x0\n\tIPV6_RTHDR_STRICT                       = 0x1\n\tIPV6_RTHDR_TYPE_0                       = 0x0\n\tIPV6_SOCKOPT_RESERVED1                  = 0x3\n\tIPV6_TCLASS                             = 0x24\n\tIPV6_UNICAST_HOPS                       = 0x4\n\tIPV6_USE_MIN_MTU                        = 0x2a\n\tIPV6_V6ONLY                             = 0x1b\n\tIPV6_VERSION                            = 0x60\n\tIPV6_VERSION_MASK                       = 0xf0\n\tIP_ADD_MEMBERSHIP                       = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP                = 0x46\n\tIP_BLOCK_SOURCE                         = 0x48\n\tIP_BOUND_IF                             = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP               = 0x1\n\tIP_DEFAULT_MULTICAST_TTL                = 0x1\n\tIP_DF                                   = 0x4000\n\tIP_DONTFRAG                             = 0x1c\n\tIP_DROP_MEMBERSHIP                      = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP               = 0x47\n\tIP_DUMMYNET_CONFIGURE                   = 0x3c\n\tIP_DUMMYNET_DEL                         = 0x3d\n\tIP_DUMMYNET_FLUSH                       = 0x3e\n\tIP_DUMMYNET_GET                         = 0x40\n\tIP_FAITH                                = 0x16\n\tIP_FW_ADD                               = 0x28\n\tIP_FW_DEL                               = 0x29\n\tIP_FW_FLUSH                             = 0x2a\n\tIP_FW_GET                               = 0x2c\n\tIP_FW_RESETLOG                          = 0x2d\n\tIP_FW_ZERO                              = 0x2b\n\tIP_HDRINCL                              = 0x2\n\tIP_IPSEC_POLICY                         = 0x15\n\tIP_MAXPACKET                            = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER                 = 0x200\n\tIP_MAX_MEMBERSHIPS                      = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER                 = 0x80\n\tIP_MAX_SOCK_SRC_FILTER                  = 0x80\n\tIP_MF                                   = 0x2000\n\tIP_MIN_MEMBERSHIPS                      = 0x1f\n\tIP_MSFILTER                             = 0x4a\n\tIP_MSS                                  = 0x240\n\tIP_MULTICAST_IF                         = 0x9\n\tIP_MULTICAST_IFINDEX                    = 0x42\n\tIP_MULTICAST_LOOP                       = 0xb\n\tIP_MULTICAST_TTL                        = 0xa\n\tIP_MULTICAST_VIF                        = 0xe\n\tIP_NAT__XXX                             = 0x37\n\tIP_OFFMASK                              = 0x1fff\n\tIP_OLD_FW_ADD                           = 0x32\n\tIP_OLD_FW_DEL                           = 0x33\n\tIP_OLD_FW_FLUSH                         = 0x34\n\tIP_OLD_FW_GET                           = 0x36\n\tIP_OLD_FW_RESETLOG                      = 0x38\n\tIP_OLD_FW_ZERO                          = 0x35\n\tIP_OPTIONS                              = 0x1\n\tIP_PKTINFO                              = 0x1a\n\tIP_PORTRANGE                            = 0x13\n\tIP_PORTRANGE_DEFAULT                    = 0x0\n\tIP_PORTRANGE_HIGH                       = 0x1\n\tIP_PORTRANGE_LOW                        = 0x2\n\tIP_RECVDSTADDR                          = 0x7\n\tIP_RECVIF                               = 0x14\n\tIP_RECVOPTS                             = 0x5\n\tIP_RECVPKTINFO                          = 0x1a\n\tIP_RECVRETOPTS                          = 0x6\n\tIP_RECVTOS                              = 0x1b\n\tIP_RECVTTL                              = 0x18\n\tIP_RETOPTS                              = 0x8\n\tIP_RF                                   = 0x8000\n\tIP_RSVP_OFF                             = 0x10\n\tIP_RSVP_ON                              = 0xf\n\tIP_RSVP_VIF_OFF                         = 0x12\n\tIP_RSVP_VIF_ON                          = 0x11\n\tIP_STRIPHDR                             = 0x17\n\tIP_TOS                                  = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND               = 0x41\n\tIP_TTL                                  = 0x4\n\tIP_UNBLOCK_SOURCE                       = 0x49\n\tISIG                                    = 0x80\n\tISTRIP                                  = 0x20\n\tIUTF8                                   = 0x4000\n\tIXANY                                   = 0x800\n\tIXOFF                                   = 0x400\n\tIXON                                    = 0x200\n\tKERN_HOSTNAME                           = 0xa\n\tKERN_OSRELEASE                          = 0x2\n\tKERN_OSTYPE                             = 0x1\n\tKERN_VERSION                            = 0x4\n\tLOCAL_PEERCRED                          = 0x1\n\tLOCAL_PEEREPID                          = 0x3\n\tLOCAL_PEEREUUID                         = 0x5\n\tLOCAL_PEERPID                           = 0x2\n\tLOCAL_PEERTOKEN                         = 0x6\n\tLOCAL_PEERUUID                          = 0x4\n\tLOCK_EX                                 = 0x2\n\tLOCK_NB                                 = 0x4\n\tLOCK_SH                                 = 0x1\n\tLOCK_UN                                 = 0x8\n\tMADV_CAN_REUSE                          = 0x9\n\tMADV_DONTNEED                           = 0x4\n\tMADV_FREE                               = 0x5\n\tMADV_FREE_REUSABLE                      = 0x7\n\tMADV_FREE_REUSE                         = 0x8\n\tMADV_NORMAL                             = 0x0\n\tMADV_PAGEOUT                            = 0xa\n\tMADV_RANDOM                             = 0x1\n\tMADV_SEQUENTIAL                         = 0x2\n\tMADV_WILLNEED                           = 0x3\n\tMADV_ZERO_WIRED_PAGES                   = 0x6\n\tMAP_32BIT                               = 0x8000\n\tMAP_ANON                                = 0x1000\n\tMAP_ANONYMOUS                           = 0x1000\n\tMAP_COPY                                = 0x2\n\tMAP_FILE                                = 0x0\n\tMAP_FIXED                               = 0x10\n\tMAP_HASSEMAPHORE                        = 0x200\n\tMAP_JIT                                 = 0x800\n\tMAP_NOCACHE                             = 0x400\n\tMAP_NOEXTEND                            = 0x100\n\tMAP_NORESERVE                           = 0x40\n\tMAP_PRIVATE                             = 0x2\n\tMAP_RENAME                              = 0x20\n\tMAP_RESERVED0080                        = 0x80\n\tMAP_RESILIENT_CODESIGN                  = 0x2000\n\tMAP_RESILIENT_MEDIA                     = 0x4000\n\tMAP_SHARED                              = 0x1\n\tMAP_TRANSLATED_ALLOW_EXECUTE            = 0x20000\n\tMAP_UNIX03                              = 0x40000\n\tMCAST_BLOCK_SOURCE                      = 0x54\n\tMCAST_EXCLUDE                           = 0x2\n\tMCAST_INCLUDE                           = 0x1\n\tMCAST_JOIN_GROUP                        = 0x50\n\tMCAST_JOIN_SOURCE_GROUP                 = 0x52\n\tMCAST_LEAVE_GROUP                       = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP                = 0x53\n\tMCAST_UNBLOCK_SOURCE                    = 0x55\n\tMCAST_UNDEFINED                         = 0x0\n\tMCL_CURRENT                             = 0x1\n\tMCL_FUTURE                              = 0x2\n\tMNT_ASYNC                               = 0x40\n\tMNT_AUTOMOUNTED                         = 0x400000\n\tMNT_CMDFLAGS                            = 0xf0000\n\tMNT_CPROTECT                            = 0x80\n\tMNT_DEFWRITE                            = 0x2000000\n\tMNT_DONTBROWSE                          = 0x100000\n\tMNT_DOVOLFS                             = 0x8000\n\tMNT_DWAIT                               = 0x4\n\tMNT_EXPORTED                            = 0x100\n\tMNT_EXT_ROOT_DATA_VOL                   = 0x1\n\tMNT_FORCE                               = 0x80000\n\tMNT_IGNORE_OWNERSHIP                    = 0x200000\n\tMNT_JOURNALED                           = 0x800000\n\tMNT_LOCAL                               = 0x1000\n\tMNT_MULTILABEL                          = 0x4000000\n\tMNT_NOATIME                             = 0x10000000\n\tMNT_NOBLOCK                             = 0x20000\n\tMNT_NODEV                               = 0x10\n\tMNT_NOEXEC                              = 0x4\n\tMNT_NOSUID                              = 0x8\n\tMNT_NOUSERXATTR                         = 0x1000000\n\tMNT_NOWAIT                              = 0x2\n\tMNT_QUARANTINE                          = 0x400\n\tMNT_QUOTA                               = 0x2000\n\tMNT_RDONLY                              = 0x1\n\tMNT_RELOAD                              = 0x40000\n\tMNT_REMOVABLE                           = 0x200\n\tMNT_ROOTFS                              = 0x4000\n\tMNT_SNAPSHOT                            = 0x40000000\n\tMNT_STRICTATIME                         = 0x80000000\n\tMNT_SYNCHRONOUS                         = 0x2\n\tMNT_UNION                               = 0x20\n\tMNT_UNKNOWNPERMISSIONS                  = 0x200000\n\tMNT_UPDATE                              = 0x10000\n\tMNT_VISFLAGMASK                         = 0xd7f0f7ff\n\tMNT_WAIT                                = 0x1\n\tMSG_CTRUNC                              = 0x20\n\tMSG_DONTROUTE                           = 0x4\n\tMSG_DONTWAIT                            = 0x80\n\tMSG_EOF                                 = 0x100\n\tMSG_EOR                                 = 0x8\n\tMSG_FLUSH                               = 0x400\n\tMSG_HAVEMORE                            = 0x2000\n\tMSG_HOLD                                = 0x800\n\tMSG_NEEDSA                              = 0x10000\n\tMSG_NOSIGNAL                            = 0x80000\n\tMSG_OOB                                 = 0x1\n\tMSG_PEEK                                = 0x2\n\tMSG_RCVMORE                             = 0x4000\n\tMSG_SEND                                = 0x1000\n\tMSG_TRUNC                               = 0x10\n\tMSG_WAITALL                             = 0x40\n\tMSG_WAITSTREAM                          = 0x200\n\tMS_ASYNC                                = 0x1\n\tMS_DEACTIVATE                           = 0x8\n\tMS_INVALIDATE                           = 0x2\n\tMS_KILLPAGES                            = 0x4\n\tMS_SYNC                                 = 0x10\n\tNAME_MAX                                = 0xff\n\tNET_RT_DUMP                             = 0x1\n\tNET_RT_DUMP2                            = 0x7\n\tNET_RT_FLAGS                            = 0x2\n\tNET_RT_FLAGS_PRIV                       = 0xa\n\tNET_RT_IFLIST                           = 0x3\n\tNET_RT_IFLIST2                          = 0x6\n\tNET_RT_MAXID                            = 0xb\n\tNET_RT_STAT                             = 0x4\n\tNET_RT_TRASH                            = 0x5\n\tNFDBITS                                 = 0x20\n\tNL0                                     = 0x0\n\tNL1                                     = 0x100\n\tNL2                                     = 0x200\n\tNL3                                     = 0x300\n\tNLDLY                                   = 0x300\n\tNOFLSH                                  = 0x80000000\n\tNOKERNINFO                              = 0x2000000\n\tNOTE_ABSOLUTE                           = 0x8\n\tNOTE_ATTRIB                             = 0x8\n\tNOTE_BACKGROUND                         = 0x40\n\tNOTE_CHILD                              = 0x4\n\tNOTE_CRITICAL                           = 0x20\n\tNOTE_DELETE                             = 0x1\n\tNOTE_EXEC                               = 0x20000000\n\tNOTE_EXIT                               = 0x80000000\n\tNOTE_EXITSTATUS                         = 0x4000000\n\tNOTE_EXIT_CSERROR                       = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL                   = 0x10000\n\tNOTE_EXIT_DETAIL                        = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK                   = 0x70000\n\tNOTE_EXIT_MEMORY                        = 0x20000\n\tNOTE_EXIT_REPARENTED                    = 0x80000\n\tNOTE_EXTEND                             = 0x4\n\tNOTE_FFAND                              = 0x40000000\n\tNOTE_FFCOPY                             = 0xc0000000\n\tNOTE_FFCTRLMASK                         = 0xc0000000\n\tNOTE_FFLAGSMASK                         = 0xffffff\n\tNOTE_FFNOP                              = 0x0\n\tNOTE_FFOR                               = 0x80000000\n\tNOTE_FORK                               = 0x40000000\n\tNOTE_FUNLOCK                            = 0x100\n\tNOTE_LEEWAY                             = 0x10\n\tNOTE_LINK                               = 0x10\n\tNOTE_LOWAT                              = 0x1\n\tNOTE_MACHTIME                           = 0x100\n\tNOTE_MACH_CONTINUOUS_TIME               = 0x80\n\tNOTE_NONE                               = 0x80\n\tNOTE_NSECONDS                           = 0x4\n\tNOTE_OOB                                = 0x2\n\tNOTE_PCTRLMASK                          = -0x100000\n\tNOTE_PDATAMASK                          = 0xfffff\n\tNOTE_REAP                               = 0x10000000\n\tNOTE_RENAME                             = 0x20\n\tNOTE_REVOKE                             = 0x40\n\tNOTE_SECONDS                            = 0x1\n\tNOTE_SIGNAL                             = 0x8000000\n\tNOTE_TRACK                              = 0x1\n\tNOTE_TRACKERR                           = 0x2\n\tNOTE_TRIGGER                            = 0x1000000\n\tNOTE_USECONDS                           = 0x2\n\tNOTE_VM_ERROR                           = 0x10000000\n\tNOTE_VM_PRESSURE                        = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE       = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE              = 0x40000000\n\tNOTE_WRITE                              = 0x2\n\tOCRNL                                   = 0x10\n\tOFDEL                                   = 0x20000\n\tOFILL                                   = 0x80\n\tONLCR                                   = 0x2\n\tONLRET                                  = 0x40\n\tONOCR                                   = 0x20\n\tONOEOT                                  = 0x8\n\tOPOST                                   = 0x1\n\tOXTABS                                  = 0x4\n\tO_ACCMODE                               = 0x3\n\tO_ALERT                                 = 0x20000000\n\tO_APPEND                                = 0x8\n\tO_ASYNC                                 = 0x40\n\tO_CLOEXEC                               = 0x1000000\n\tO_CREAT                                 = 0x200\n\tO_DIRECTORY                             = 0x100000\n\tO_DP_GETRAWENCRYPTED                    = 0x1\n\tO_DP_GETRAWUNENCRYPTED                  = 0x2\n\tO_DSYNC                                 = 0x400000\n\tO_EVTONLY                               = 0x8000\n\tO_EXCL                                  = 0x800\n\tO_EXLOCK                                = 0x20\n\tO_FSYNC                                 = 0x80\n\tO_NDELAY                                = 0x4\n\tO_NOCTTY                                = 0x20000\n\tO_NOFOLLOW                              = 0x100\n\tO_NOFOLLOW_ANY                          = 0x20000000\n\tO_NONBLOCK                              = 0x4\n\tO_POPUP                                 = 0x80000000\n\tO_RDONLY                                = 0x0\n\tO_RDWR                                  = 0x2\n\tO_SHLOCK                                = 0x10\n\tO_SYMLINK                               = 0x200000\n\tO_SYNC                                  = 0x80\n\tO_TRUNC                                 = 0x400\n\tO_WRONLY                                = 0x1\n\tPARENB                                  = 0x1000\n\tPARMRK                                  = 0x8\n\tPARODD                                  = 0x2000\n\tPENDIN                                  = 0x20000000\n\tPRIO_PGRP                               = 0x1\n\tPRIO_PROCESS                            = 0x0\n\tPRIO_USER                               = 0x2\n\tPROT_EXEC                               = 0x4\n\tPROT_NONE                               = 0x0\n\tPROT_READ                               = 0x1\n\tPROT_WRITE                              = 0x2\n\tPT_ATTACH                               = 0xa\n\tPT_ATTACHEXC                            = 0xe\n\tPT_CONTINUE                             = 0x7\n\tPT_DENY_ATTACH                          = 0x1f\n\tPT_DETACH                               = 0xb\n\tPT_FIRSTMACH                            = 0x20\n\tPT_FORCEQUOTA                           = 0x1e\n\tPT_KILL                                 = 0x8\n\tPT_READ_D                               = 0x2\n\tPT_READ_I                               = 0x1\n\tPT_READ_U                               = 0x3\n\tPT_SIGEXC                               = 0xc\n\tPT_STEP                                 = 0x9\n\tPT_THUPDATE                             = 0xd\n\tPT_TRACE_ME                             = 0x0\n\tPT_WRITE_D                              = 0x5\n\tPT_WRITE_I                              = 0x4\n\tPT_WRITE_U                              = 0x6\n\tRENAME_EXCL                             = 0x4\n\tRENAME_NOFOLLOW_ANY                     = 0x10\n\tRENAME_RESERVED1                        = 0x8\n\tRENAME_SECLUDE                          = 0x1\n\tRENAME_SWAP                             = 0x2\n\tRLIMIT_AS                               = 0x5\n\tRLIMIT_CORE                             = 0x4\n\tRLIMIT_CPU                              = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR                = 0x2\n\tRLIMIT_DATA                             = 0x2\n\tRLIMIT_FSIZE                            = 0x1\n\tRLIMIT_MEMLOCK                          = 0x6\n\tRLIMIT_NOFILE                           = 0x8\n\tRLIMIT_NPROC                            = 0x7\n\tRLIMIT_RSS                              = 0x5\n\tRLIMIT_STACK                            = 0x3\n\tRLIM_INFINITY                           = 0x7fffffffffffffff\n\tRTAX_AUTHOR                             = 0x6\n\tRTAX_BRD                                = 0x7\n\tRTAX_DST                                = 0x0\n\tRTAX_GATEWAY                            = 0x1\n\tRTAX_GENMASK                            = 0x3\n\tRTAX_IFA                                = 0x5\n\tRTAX_IFP                                = 0x4\n\tRTAX_MAX                                = 0x8\n\tRTAX_NETMASK                            = 0x2\n\tRTA_AUTHOR                              = 0x40\n\tRTA_BRD                                 = 0x80\n\tRTA_DST                                 = 0x1\n\tRTA_GATEWAY                             = 0x2\n\tRTA_GENMASK                             = 0x8\n\tRTA_IFA                                 = 0x20\n\tRTA_IFP                                 = 0x10\n\tRTA_NETMASK                             = 0x4\n\tRTF_BLACKHOLE                           = 0x1000\n\tRTF_BROADCAST                           = 0x400000\n\tRTF_CLONING                             = 0x100\n\tRTF_CONDEMNED                           = 0x2000000\n\tRTF_DEAD                                = 0x20000000\n\tRTF_DELCLONE                            = 0x80\n\tRTF_DONE                                = 0x40\n\tRTF_DYNAMIC                             = 0x10\n\tRTF_GATEWAY                             = 0x2\n\tRTF_GLOBAL                              = 0x40000000\n\tRTF_HOST                                = 0x4\n\tRTF_IFREF                               = 0x4000000\n\tRTF_IFSCOPE                             = 0x1000000\n\tRTF_LLDATA                              = 0x400\n\tRTF_LLINFO                              = 0x400\n\tRTF_LOCAL                               = 0x200000\n\tRTF_MODIFIED                            = 0x20\n\tRTF_MULTICAST                           = 0x800000\n\tRTF_NOIFREF                             = 0x2000\n\tRTF_PINNED                              = 0x100000\n\tRTF_PRCLONING                           = 0x10000\n\tRTF_PROTO1                              = 0x8000\n\tRTF_PROTO2                              = 0x4000\n\tRTF_PROTO3                              = 0x40000\n\tRTF_PROXY                               = 0x8000000\n\tRTF_REJECT                              = 0x8\n\tRTF_ROUTER                              = 0x10000000\n\tRTF_STATIC                              = 0x800\n\tRTF_UP                                  = 0x1\n\tRTF_WASCLONED                           = 0x20000\n\tRTF_XRESOLVE                            = 0x200\n\tRTM_ADD                                 = 0x1\n\tRTM_CHANGE                              = 0x3\n\tRTM_DELADDR                             = 0xd\n\tRTM_DELETE                              = 0x2\n\tRTM_DELMADDR                            = 0x10\n\tRTM_GET                                 = 0x4\n\tRTM_GET2                                = 0x14\n\tRTM_IFINFO                              = 0xe\n\tRTM_IFINFO2                             = 0x12\n\tRTM_LOCK                                = 0x8\n\tRTM_LOSING                              = 0x5\n\tRTM_MISS                                = 0x7\n\tRTM_NEWADDR                             = 0xc\n\tRTM_NEWMADDR                            = 0xf\n\tRTM_NEWMADDR2                           = 0x13\n\tRTM_OLDADD                              = 0x9\n\tRTM_OLDDEL                              = 0xa\n\tRTM_REDIRECT                            = 0x6\n\tRTM_RESOLVE                             = 0xb\n\tRTM_RTTUNIT                             = 0xf4240\n\tRTM_VERSION                             = 0x5\n\tRTV_EXPIRE                              = 0x4\n\tRTV_HOPCOUNT                            = 0x2\n\tRTV_MTU                                 = 0x1\n\tRTV_RPIPE                               = 0x8\n\tRTV_RTT                                 = 0x40\n\tRTV_RTTVAR                              = 0x80\n\tRTV_SPIPE                               = 0x10\n\tRTV_SSTHRESH                            = 0x20\n\tRUSAGE_CHILDREN                         = -0x1\n\tRUSAGE_SELF                             = 0x0\n\tSAE_ASSOCID_ALL                         = 0xffffffff\n\tSAE_ASSOCID_ANY                         = 0x0\n\tSAE_CONNID_ALL                          = 0xffffffff\n\tSAE_CONNID_ANY                          = 0x0\n\tSCM_CREDS                               = 0x3\n\tSCM_RIGHTS                              = 0x1\n\tSCM_TIMESTAMP                           = 0x2\n\tSCM_TIMESTAMP_MONOTONIC                 = 0x4\n\tSEEK_CUR                                = 0x1\n\tSEEK_DATA                               = 0x4\n\tSEEK_END                                = 0x2\n\tSEEK_HOLE                               = 0x3\n\tSEEK_SET                                = 0x0\n\tSF_APPEND                               = 0x40000\n\tSF_ARCHIVED                             = 0x10000\n\tSF_DATALESS                             = 0x40000000\n\tSF_FIRMLINK                             = 0x800000\n\tSF_IMMUTABLE                            = 0x20000\n\tSF_NOUNLINK                             = 0x100000\n\tSF_RESTRICTED                           = 0x80000\n\tSF_SETTABLE                             = 0x3fff0000\n\tSF_SUPPORTED                            = 0x9f0000\n\tSF_SYNTHETIC                            = 0xc0000000\n\tSHUT_RD                                 = 0x0\n\tSHUT_RDWR                               = 0x2\n\tSHUT_WR                                 = 0x1\n\tSIOCADDMULTI                            = 0x80206931\n\tSIOCAIFADDR                             = 0x8040691a\n\tSIOCARPIPLL                             = 0xc0206928\n\tSIOCATMARK                              = 0x40047307\n\tSIOCAUTOADDR                            = 0xc0206926\n\tSIOCAUTONETMASK                         = 0x80206927\n\tSIOCDELMULTI                            = 0x80206932\n\tSIOCDIFADDR                             = 0x80206919\n\tSIOCDIFPHYADDR                          = 0x80206941\n\tSIOCGDRVSPEC                            = 0xc028697b\n\tSIOCGETVLAN                             = 0xc020697f\n\tSIOCGHIWAT                              = 0x40047301\n\tSIOCGIF6LOWPAN                          = 0xc02069c5\n\tSIOCGIFADDR                             = 0xc0206921\n\tSIOCGIFALTMTU                           = 0xc0206948\n\tSIOCGIFASYNCMAP                         = 0xc020697c\n\tSIOCGIFBOND                             = 0xc0206947\n\tSIOCGIFBRDADDR                          = 0xc0206923\n\tSIOCGIFCAP                              = 0xc020695b\n\tSIOCGIFCONF                             = 0xc00c6924\n\tSIOCGIFDEVMTU                           = 0xc0206944\n\tSIOCGIFDSTADDR                          = 0xc0206922\n\tSIOCGIFFLAGS                            = 0xc0206911\n\tSIOCGIFFUNCTIONALTYPE                   = 0xc02069ad\n\tSIOCGIFGENERIC                          = 0xc020693a\n\tSIOCGIFKPI                              = 0xc0206987\n\tSIOCGIFMAC                              = 0xc0206982\n\tSIOCGIFMEDIA                            = 0xc02c6938\n\tSIOCGIFMETRIC                           = 0xc0206917\n\tSIOCGIFMTU                              = 0xc0206933\n\tSIOCGIFNETMASK                          = 0xc0206925\n\tSIOCGIFPDSTADDR                         = 0xc0206940\n\tSIOCGIFPHYS                             = 0xc0206935\n\tSIOCGIFPSRCADDR                         = 0xc020693f\n\tSIOCGIFSTATUS                           = 0xc331693d\n\tSIOCGIFVLAN                             = 0xc020697f\n\tSIOCGIFWAKEFLAGS                        = 0xc0206988\n\tSIOCGIFXMEDIA                           = 0xc02c6948\n\tSIOCGLOWAT                              = 0x40047303\n\tSIOCGPGRP                               = 0x40047309\n\tSIOCIFCREATE                            = 0xc0206978\n\tSIOCIFCREATE2                           = 0xc020697a\n\tSIOCIFDESTROY                           = 0x80206979\n\tSIOCIFGCLONERS                          = 0xc0106981\n\tSIOCRSLVMULTI                           = 0xc010693b\n\tSIOCSDRVSPEC                            = 0x8028697b\n\tSIOCSETVLAN                             = 0x8020697e\n\tSIOCSHIWAT                              = 0x80047300\n\tSIOCSIF6LOWPAN                          = 0x802069c4\n\tSIOCSIFADDR                             = 0x8020690c\n\tSIOCSIFALTMTU                           = 0x80206945\n\tSIOCSIFASYNCMAP                         = 0x8020697d\n\tSIOCSIFBOND                             = 0x80206946\n\tSIOCSIFBRDADDR                          = 0x80206913\n\tSIOCSIFCAP                              = 0x8020695a\n\tSIOCSIFDSTADDR                          = 0x8020690e\n\tSIOCSIFFLAGS                            = 0x80206910\n\tSIOCSIFGENERIC                          = 0x80206939\n\tSIOCSIFKPI                              = 0x80206986\n\tSIOCSIFLLADDR                           = 0x8020693c\n\tSIOCSIFMAC                              = 0x80206983\n\tSIOCSIFMEDIA                            = 0xc0206937\n\tSIOCSIFMETRIC                           = 0x80206918\n\tSIOCSIFMTU                              = 0x80206934\n\tSIOCSIFNETMASK                          = 0x80206916\n\tSIOCSIFPHYADDR                          = 0x8040693e\n\tSIOCSIFPHYS                             = 0x80206936\n\tSIOCSIFVLAN                             = 0x8020697e\n\tSIOCSLOWAT                              = 0x80047302\n\tSIOCSPGRP                               = 0x80047308\n\tSOCK_DGRAM                              = 0x2\n\tSOCK_MAXADDRLEN                         = 0xff\n\tSOCK_RAW                                = 0x3\n\tSOCK_RDM                                = 0x4\n\tSOCK_SEQPACKET                          = 0x5\n\tSOCK_STREAM                             = 0x1\n\tSOL_LOCAL                               = 0x0\n\tSOL_SOCKET                              = 0xffff\n\tSOMAXCONN                               = 0x80\n\tSO_ACCEPTCONN                           = 0x2\n\tSO_BROADCAST                            = 0x20\n\tSO_DEBUG                                = 0x1\n\tSO_DONTROUTE                            = 0x10\n\tSO_DONTTRUNC                            = 0x2000\n\tSO_ERROR                                = 0x1007\n\tSO_KEEPALIVE                            = 0x8\n\tSO_LABEL                                = 0x1010\n\tSO_LINGER                               = 0x80\n\tSO_LINGER_SEC                           = 0x1080\n\tSO_NETSVC_MARKING_LEVEL                 = 0x1119\n\tSO_NET_SERVICE_TYPE                     = 0x1116\n\tSO_NKE                                  = 0x1021\n\tSO_NOADDRERR                            = 0x1023\n\tSO_NOSIGPIPE                            = 0x1022\n\tSO_NOTIFYCONFLICT                       = 0x1026\n\tSO_NP_EXTENSIONS                        = 0x1083\n\tSO_NREAD                                = 0x1020\n\tSO_NUMRCVPKT                            = 0x1112\n\tSO_NWRITE                               = 0x1024\n\tSO_OOBINLINE                            = 0x100\n\tSO_PEERLABEL                            = 0x1011\n\tSO_RANDOMPORT                           = 0x1082\n\tSO_RCVBUF                               = 0x1002\n\tSO_RCVLOWAT                             = 0x1004\n\tSO_RCVTIMEO                             = 0x1006\n\tSO_REUSEADDR                            = 0x4\n\tSO_REUSEPORT                            = 0x200\n\tSO_REUSESHAREUID                        = 0x1025\n\tSO_SNDBUF                               = 0x1001\n\tSO_SNDLOWAT                             = 0x1003\n\tSO_SNDTIMEO                             = 0x1005\n\tSO_TIMESTAMP                            = 0x400\n\tSO_TIMESTAMP_MONOTONIC                  = 0x800\n\tSO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1\n\tSO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4\n\tSO_TRACKER_ATTRIBUTE_FLAGS_TRACKER      = 0x2\n\tSO_TRACKER_TRANSPARENCY_VERSION         = 0x3\n\tSO_TYPE                                 = 0x1008\n\tSO_UPCALLCLOSEWAIT                      = 0x1027\n\tSO_USELOOPBACK                          = 0x40\n\tSO_WANTMORE                             = 0x4000\n\tSO_WANTOOBFLAG                          = 0x8000\n\tS_IEXEC                                 = 0x40\n\tS_IFBLK                                 = 0x6000\n\tS_IFCHR                                 = 0x2000\n\tS_IFDIR                                 = 0x4000\n\tS_IFIFO                                 = 0x1000\n\tS_IFLNK                                 = 0xa000\n\tS_IFMT                                  = 0xf000\n\tS_IFREG                                 = 0x8000\n\tS_IFSOCK                                = 0xc000\n\tS_IFWHT                                 = 0xe000\n\tS_IREAD                                 = 0x100\n\tS_IRGRP                                 = 0x20\n\tS_IROTH                                 = 0x4\n\tS_IRUSR                                 = 0x100\n\tS_IRWXG                                 = 0x38\n\tS_IRWXO                                 = 0x7\n\tS_IRWXU                                 = 0x1c0\n\tS_ISGID                                 = 0x400\n\tS_ISTXT                                 = 0x200\n\tS_ISUID                                 = 0x800\n\tS_ISVTX                                 = 0x200\n\tS_IWGRP                                 = 0x10\n\tS_IWOTH                                 = 0x2\n\tS_IWRITE                                = 0x80\n\tS_IWUSR                                 = 0x80\n\tS_IXGRP                                 = 0x8\n\tS_IXOTH                                 = 0x1\n\tS_IXUSR                                 = 0x40\n\tTAB0                                    = 0x0\n\tTAB1                                    = 0x400\n\tTAB2                                    = 0x800\n\tTAB3                                    = 0x4\n\tTABDLY                                  = 0xc04\n\tTCIFLUSH                                = 0x1\n\tTCIOFF                                  = 0x3\n\tTCIOFLUSH                               = 0x3\n\tTCION                                   = 0x4\n\tTCOFLUSH                                = 0x2\n\tTCOOFF                                  = 0x1\n\tTCOON                                   = 0x2\n\tTCPOPT_CC                               = 0xb\n\tTCPOPT_CCECHO                           = 0xd\n\tTCPOPT_CCNEW                            = 0xc\n\tTCPOPT_EOL                              = 0x0\n\tTCPOPT_FASTOPEN                         = 0x22\n\tTCPOPT_MAXSEG                           = 0x2\n\tTCPOPT_NOP                              = 0x1\n\tTCPOPT_SACK                             = 0x5\n\tTCPOPT_SACK_HDR                         = 0x1010500\n\tTCPOPT_SACK_PERMITTED                   = 0x4\n\tTCPOPT_SACK_PERMIT_HDR                  = 0x1010402\n\tTCPOPT_SIGNATURE                        = 0x13\n\tTCPOPT_TIMESTAMP                        = 0x8\n\tTCPOPT_TSTAMP_HDR                       = 0x101080a\n\tTCPOPT_WINDOW                           = 0x3\n\tTCP_CONNECTIONTIMEOUT                   = 0x20\n\tTCP_CONNECTION_INFO                     = 0x106\n\tTCP_ENABLE_ECN                          = 0x104\n\tTCP_FASTOPEN                            = 0x105\n\tTCP_KEEPALIVE                           = 0x10\n\tTCP_KEEPCNT                             = 0x102\n\tTCP_KEEPINTVL                           = 0x101\n\tTCP_MAXHLEN                             = 0x3c\n\tTCP_MAXOLEN                             = 0x28\n\tTCP_MAXSEG                              = 0x2\n\tTCP_MAXWIN                              = 0xffff\n\tTCP_MAX_SACK                            = 0x4\n\tTCP_MAX_WINSHIFT                        = 0xe\n\tTCP_MINMSS                              = 0xd8\n\tTCP_MSS                                 = 0x200\n\tTCP_NODELAY                             = 0x1\n\tTCP_NOOPT                               = 0x8\n\tTCP_NOPUSH                              = 0x4\n\tTCP_NOTSENT_LOWAT                       = 0x201\n\tTCP_RXT_CONNDROPTIME                    = 0x80\n\tTCP_RXT_FINDROP                         = 0x100\n\tTCP_SENDMOREACKS                        = 0x103\n\tTCSAFLUSH                               = 0x2\n\tTIOCCBRK                                = 0x2000747a\n\tTIOCCDTR                                = 0x20007478\n\tTIOCCONS                                = 0x80047462\n\tTIOCDCDTIMESTAMP                        = 0x40107458\n\tTIOCDRAIN                               = 0x2000745e\n\tTIOCDSIMICROCODE                        = 0x20007455\n\tTIOCEXCL                                = 0x2000740d\n\tTIOCEXT                                 = 0x80047460\n\tTIOCFLUSH                               = 0x80047410\n\tTIOCGDRAINWAIT                          = 0x40047456\n\tTIOCGETA                                = 0x40487413\n\tTIOCGETD                                = 0x4004741a\n\tTIOCGPGRP                               = 0x40047477\n\tTIOCGWINSZ                              = 0x40087468\n\tTIOCIXOFF                               = 0x20007480\n\tTIOCIXON                                = 0x20007481\n\tTIOCMBIC                                = 0x8004746b\n\tTIOCMBIS                                = 0x8004746c\n\tTIOCMGDTRWAIT                           = 0x4004745a\n\tTIOCMGET                                = 0x4004746a\n\tTIOCMODG                                = 0x40047403\n\tTIOCMODS                                = 0x80047404\n\tTIOCMSDTRWAIT                           = 0x8004745b\n\tTIOCMSET                                = 0x8004746d\n\tTIOCM_CAR                               = 0x40\n\tTIOCM_CD                                = 0x40\n\tTIOCM_CTS                               = 0x20\n\tTIOCM_DSR                               = 0x100\n\tTIOCM_DTR                               = 0x2\n\tTIOCM_LE                                = 0x1\n\tTIOCM_RI                                = 0x80\n\tTIOCM_RNG                               = 0x80\n\tTIOCM_RTS                               = 0x4\n\tTIOCM_SR                                = 0x10\n\tTIOCM_ST                                = 0x8\n\tTIOCNOTTY                               = 0x20007471\n\tTIOCNXCL                                = 0x2000740e\n\tTIOCOUTQ                                = 0x40047473\n\tTIOCPKT                                 = 0x80047470\n\tTIOCPKT_DATA                            = 0x0\n\tTIOCPKT_DOSTOP                          = 0x20\n\tTIOCPKT_FLUSHREAD                       = 0x1\n\tTIOCPKT_FLUSHWRITE                      = 0x2\n\tTIOCPKT_IOCTL                           = 0x40\n\tTIOCPKT_NOSTOP                          = 0x10\n\tTIOCPKT_START                           = 0x8\n\tTIOCPKT_STOP                            = 0x4\n\tTIOCPTYGNAME                            = 0x40807453\n\tTIOCPTYGRANT                            = 0x20007454\n\tTIOCPTYUNLK                             = 0x20007452\n\tTIOCREMOTE                              = 0x80047469\n\tTIOCSBRK                                = 0x2000747b\n\tTIOCSCONS                               = 0x20007463\n\tTIOCSCTTY                               = 0x20007461\n\tTIOCSDRAINWAIT                          = 0x80047457\n\tTIOCSDTR                                = 0x20007479\n\tTIOCSETA                                = 0x80487414\n\tTIOCSETAF                               = 0x80487416\n\tTIOCSETAW                               = 0x80487415\n\tTIOCSETD                                = 0x8004741b\n\tTIOCSIG                                 = 0x2000745f\n\tTIOCSPGRP                               = 0x80047476\n\tTIOCSTART                               = 0x2000746e\n\tTIOCSTAT                                = 0x20007465\n\tTIOCSTI                                 = 0x80017472\n\tTIOCSTOP                                = 0x2000746f\n\tTIOCSWINSZ                              = 0x80087467\n\tTIOCTIMESTAMP                           = 0x40107459\n\tTIOCUCNTL                               = 0x80047466\n\tTOSTOP                                  = 0x400000\n\tUF_APPEND                               = 0x4\n\tUF_COMPRESSED                           = 0x20\n\tUF_DATAVAULT                            = 0x80\n\tUF_HIDDEN                               = 0x8000\n\tUF_IMMUTABLE                            = 0x2\n\tUF_NODUMP                               = 0x1\n\tUF_OPAQUE                               = 0x8\n\tUF_SETTABLE                             = 0xffff\n\tUF_TRACKED                              = 0x40\n\tVDISCARD                                = 0xf\n\tVDSUSP                                  = 0xb\n\tVEOF                                    = 0x0\n\tVEOL                                    = 0x1\n\tVEOL2                                   = 0x2\n\tVERASE                                  = 0x3\n\tVINTR                                   = 0x8\n\tVKILL                                   = 0x5\n\tVLNEXT                                  = 0xe\n\tVMADDR_CID_ANY                          = 0xffffffff\n\tVMADDR_CID_HOST                         = 0x2\n\tVMADDR_CID_HYPERVISOR                   = 0x0\n\tVMADDR_CID_RESERVED                     = 0x1\n\tVMADDR_PORT_ANY                         = 0xffffffff\n\tVMIN                                    = 0x10\n\tVM_LOADAVG                              = 0x2\n\tVM_MACHFACTOR                           = 0x4\n\tVM_MAXID                                = 0x6\n\tVM_METER                                = 0x1\n\tVM_SWAPUSAGE                            = 0x5\n\tVQUIT                                   = 0x9\n\tVREPRINT                                = 0x6\n\tVSTART                                  = 0xc\n\tVSTATUS                                 = 0x12\n\tVSTOP                                   = 0xd\n\tVSUSP                                   = 0xa\n\tVT0                                     = 0x0\n\tVT1                                     = 0x10000\n\tVTDLY                                   = 0x10000\n\tVTIME                                   = 0x11\n\tVWERASE                                 = 0x4\n\tWCONTINUED                              = 0x10\n\tWCOREFLAG                               = 0x80\n\tWEXITED                                 = 0x4\n\tWNOHANG                                 = 0x1\n\tWNOWAIT                                 = 0x20\n\tWORDSIZE                                = 0x40\n\tWSTOPPED                                = 0x8\n\tWUNTRACED                               = 0x2\n\tXATTR_CREATE                            = 0x2\n\tXATTR_NODEFAULT                         = 0x10\n\tXATTR_NOFOLLOW                          = 0x1\n\tXATTR_NOSECURITY                        = 0x8\n\tXATTR_REPLACE                           = 0x4\n\tXATTR_SHOWCOMPRESSION                   = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && dragonfly\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ATM                            = 0x1e\n\tAF_BLUETOOTH                      = 0x21\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x23\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x1c\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x22\n\tAF_NATM                           = 0x1d\n\tAF_NETBIOS                        = 0x6\n\tAF_NETGRAPH                       = 0x20\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x18\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104279\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044272\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSEESENT                      = 0x40044276\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x2000427a\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044278\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x8010427b\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044273\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCSSEESENT                      = 0x80044277\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DEFAULTBUFSIZE                = 0x1000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x80000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MAX_CLONES                    = 0x80\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MOD                           = 0x90\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBPF_XOR                           = 0xa0\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_MONOTONIC                   = 0x4\n\tCLOCK_MONOTONIC_FAST              = 0xc\n\tCLOCK_MONOTONIC_PRECISE           = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID          = 0xf\n\tCLOCK_PROF                        = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_REALTIME_FAST               = 0xa\n\tCLOCK_REALTIME_PRECISE            = 0x9\n\tCLOCK_SECOND                      = 0xd\n\tCLOCK_THREAD_CPUTIME_ID           = 0xe\n\tCLOCK_UPTIME                      = 0x5\n\tCLOCK_UPTIME_FAST                 = 0x8\n\tCLOCK_UPTIME_PRECISE              = 0x7\n\tCLOCK_VIRTUAL                     = 0x1\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x30000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB            = 0xff\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_BLUETOOTH_LE_LL               = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR     = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR       = 0xfe\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DBUS                          = 0xe7\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_DVB_CI                        = 0xeb\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_EPON                          = 0x103\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HHDLC                         = 0x79\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NOFCS            = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_INFINIBAND                    = 0xf7\n\tDLT_IPFILTER                      = 0x74\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPMI_HPM_2                    = 0x104\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPOIB                         = 0xf2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_ISO_14443                     = 0x108\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_ATM_CEMIC             = 0xee\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL          = 0xea\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_SRX_E2E               = 0xe9\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_JUNIPER_VS                    = 0xe8\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MATCHING_MAX                  = 0x109\n\tDLT_MATCHING_MIN                  = 0x68\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPEG_2_TS                     = 0xf3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_MUX27010                      = 0xec\n\tDLT_NETANALYZER                   = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT       = 0xf1\n\tDLT_NETLINK                       = 0xfd\n\tDLT_NFC_LLCP                      = 0xf5\n\tDLT_NFLOG                         = 0xef\n\tDLT_NG40                          = 0xf4\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PKTAP                         = 0x102\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PROFIBUS_DL                   = 0x101\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RDS                           = 0x109\n\tDLT_REDBACK_SMARTEDGE             = 0x20\n\tDLT_RIO                           = 0x7c\n\tDLT_RTAC_SERIAL                   = 0xfa\n\tDLT_SCCP                          = 0x8e\n\tDLT_SCTP                          = 0xf8\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_STANAG_5066_D_PDU             = 0xed\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USB_FREEBSD                   = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDLT_WATTSTOPPER_DLM               = 0x107\n\tDLT_WIHART                        = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU           = 0xfc\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDLT_ZWAVE_R1_R2                   = 0x105\n\tDLT_ZWAVE_R3                      = 0x106\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DBF                            = 0xf\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_EXCEPT                     = -0x8\n\tEVFILT_FS                         = -0xa\n\tEVFILT_MARKER                     = 0xf\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xa\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_USER                       = -0x9\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_HUP                            = 0x800\n\tEV_NODATA                         = 0x1000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTEXIT_LWP                       = 0x10000\n\tEXTEXIT_PROC                      = 0x0\n\tEXTEXIT_SETINT                    = 0x1\n\tEXTEXIT_SIMPLE                    = 0x0\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUP2FD                          = 0xa\n\tF_DUP2FD_CLOEXEC                  = 0x12\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0x11\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_ALTPHYS                       = 0x4000\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x318e72\n\tIFF_DEBUG                         = 0x4\n\tIFF_IDIRECT                       = 0x200000\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MONITOR                       = 0x40000\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NPOLLING                      = 0x100000\n\tIFF_OACTIVE                       = 0x400\n\tIFF_OACTIVE_COMPAT                = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_POLLING                       = 0x10000\n\tIFF_POLLING_COMPAT                = 0x10000\n\tIFF_PPROMISC                      = 0x20000\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_SMART                         = 0x20\n\tIFF_STATICARP                     = 0x80000\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xf3\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_MASK                   = 0xfffffffe\n\tIPPROTO_3PC                       = 0x22\n\tIPPROTO_ADFS                      = 0x44\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_AHIP                      = 0x3d\n\tIPPROTO_APES                      = 0x63\n\tIPPROTO_ARGUS                     = 0xd\n\tIPPROTO_AX25                      = 0x5d\n\tIPPROTO_BHA                       = 0x31\n\tIPPROTO_BLT                       = 0x1e\n\tIPPROTO_BRSATMON                  = 0x4c\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_CFTP                      = 0x3e\n\tIPPROTO_CHAOS                     = 0x10\n\tIPPROTO_CMTP                      = 0x26\n\tIPPROTO_CPHB                      = 0x49\n\tIPPROTO_CPNX                      = 0x48\n\tIPPROTO_DDP                       = 0x25\n\tIPPROTO_DGP                       = 0x56\n\tIPPROTO_DIVERT                    = 0xfe\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_EMCON                     = 0xe\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GMTP                      = 0x64\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HELLO                     = 0x3f\n\tIPPROTO_HMP                       = 0x14\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IDPR                      = 0x23\n\tIPPROTO_IDRP                      = 0x2d\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IGP                       = 0x55\n\tIPPROTO_IGRP                      = 0x58\n\tIPPROTO_IL                        = 0x28\n\tIPPROTO_INLSP                     = 0x34\n\tIPPROTO_INP                       = 0x20\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPCV                      = 0x47\n\tIPPROTO_IPEIP                     = 0x5e\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPPC                      = 0x43\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IRTP                      = 0x1c\n\tIPPROTO_KRYPTOLAN                 = 0x41\n\tIPPROTO_LARP                      = 0x5b\n\tIPPROTO_LEAF1                     = 0x19\n\tIPPROTO_LEAF2                     = 0x1a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MEAS                      = 0x13\n\tIPPROTO_MHRP                      = 0x30\n\tIPPROTO_MICP                      = 0x5f\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MTP                       = 0x5c\n\tIPPROTO_MUX                       = 0x12\n\tIPPROTO_ND                        = 0x4d\n\tIPPROTO_NHRP                      = 0x36\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_NSP                       = 0x1f\n\tIPPROTO_NVPII                     = 0xb\n\tIPPROTO_OSPFIGP                   = 0x59\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PGM                       = 0x71\n\tIPPROTO_PIGP                      = 0x9\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PRM                       = 0x15\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_PVP                       = 0x4b\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_RCCMON                    = 0xa\n\tIPPROTO_RDP                       = 0x1b\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_RVD                       = 0x42\n\tIPPROTO_SATEXPAK                  = 0x40\n\tIPPROTO_SATMON                    = 0x45\n\tIPPROTO_SCCSP                     = 0x60\n\tIPPROTO_SDRP                      = 0x2a\n\tIPPROTO_SEP                       = 0x21\n\tIPPROTO_SKIP                      = 0x39\n\tIPPROTO_SRPC                      = 0x5a\n\tIPPROTO_ST                        = 0x7\n\tIPPROTO_SVMTP                     = 0x52\n\tIPPROTO_SWIPE                     = 0x35\n\tIPPROTO_TCF                       = 0x57\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TLSP                      = 0x38\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_TPXX                      = 0x27\n\tIPPROTO_TRUNK1                    = 0x17\n\tIPPROTO_TRUNK2                    = 0x18\n\tIPPROTO_TTP                       = 0x54\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UNKNOWN                   = 0x102\n\tIPPROTO_VINES                     = 0x53\n\tIPPROTO_VISA                      = 0x46\n\tIPPROTO_VMTP                      = 0x51\n\tIPPROTO_WBEXPAK                   = 0x4f\n\tIPPROTO_WBMON                     = 0x4e\n\tIPPROTO_WSN                       = 0x4a\n\tIPPROTO_XNET                      = 0xf\n\tIPPROTO_XTP                       = 0x24\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_BINDV6ONLY                   = 0x1b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_FW_ADD                       = 0x1e\n\tIPV6_FW_DEL                       = 0x1f\n\tIPV6_FW_FLUSH                     = 0x20\n\tIPV6_FW_GET                       = 0x22\n\tIPV6_FW_ZERO                      = 0x21\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHLIM                      = 0x28\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MSFILTER                     = 0x4a\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PKTOPTIONS                   = 0x34\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_PREFER_TEMPADDR              = 0x3f\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_DUMMYNET_CONFIGURE             = 0x3c\n\tIP_DUMMYNET_DEL                   = 0x3d\n\tIP_DUMMYNET_FLUSH                 = 0x3e\n\tIP_DUMMYNET_GET                   = 0x40\n\tIP_FW_ADD                         = 0x32\n\tIP_FW_DEL                         = 0x33\n\tIP_FW_FLUSH                       = 0x34\n\tIP_FW_GET                         = 0x36\n\tIP_FW_RESETLOG                    = 0x37\n\tIP_FW_TBL_ADD                     = 0x2a\n\tIP_FW_TBL_CREATE                  = 0x28\n\tIP_FW_TBL_DEL                     = 0x2b\n\tIP_FW_TBL_DESTROY                 = 0x29\n\tIP_FW_TBL_EXPIRE                  = 0x2f\n\tIP_FW_TBL_FLUSH                   = 0x2c\n\tIP_FW_TBL_GET                     = 0x2d\n\tIP_FW_TBL_ZERO                    = 0x2e\n\tIP_FW_X                           = 0x31\n\tIP_FW_ZERO                        = 0x35\n\tIP_HDRINCL                        = 0x2\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x42\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_MULTICAST_VIF                  = 0xe\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x41\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RSVP_OFF                       = 0x10\n\tIP_RSVP_ON                        = 0xf\n\tIP_RSVP_VIF_OFF                   = 0x12\n\tIP_RSVP_VIF_ON                    = 0x11\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_AUTOSYNC                     = 0x7\n\tMADV_CONTROL_END                  = 0xb\n\tMADV_CONTROL_START                = 0xa\n\tMADV_CORE                         = 0x9\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x5\n\tMADV_INVAL                        = 0xa\n\tMADV_NOCORE                       = 0x8\n\tMADV_NORMAL                       = 0x0\n\tMADV_NOSYNC                       = 0x6\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SETMAP                       = 0xb\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_NOCORE                        = 0x20000\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_NOSYNC                        = 0x800\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_SIZEALIGN                     = 0x40000\n\tMAP_STACK                         = 0x400\n\tMAP_TRYFIXED                      = 0x10000\n\tMAP_VPAGETABLE                    = 0x2000\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_AUTOMOUNTED                   = 0x20\n\tMNT_CMDFLAGS                      = 0xf0000\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x20000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_IGNORE                        = 0x800000\n\tMNT_LAZY                          = 0x4\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x10000000\n\tMNT_NOCLUSTERR                    = 0x40000000\n\tMNT_NOCLUSTERW                    = 0x80000000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOSYMFOLLOW                   = 0x400000\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x200000\n\tMNT_SUIDDIR                       = 0x100000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_TRIM                          = 0x1000000\n\tMNT_UPDATE                        = 0x10000\n\tMNT_USER                          = 0x8000\n\tMNT_VISFLAGMASK                   = 0xf1f0ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_CMSG_CLOEXEC                  = 0x1000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOF                           = 0x100\n\tMSG_EOR                           = 0x8\n\tMSG_FBLOCKING                     = 0x10000\n\tMSG_FMASK                         = 0xffff0000\n\tMSG_FNONBLOCKING                  = 0x20000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_SYNC                          = 0x800\n\tMSG_TRUNC                         = 0x10\n\tMSG_UNUSED09                      = 0x200\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x0\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_MAXID                      = 0x4\n\tNFDBITS                           = 0x40\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FFAND                        = 0x40000000\n\tNOTE_FFCOPY                       = 0xc0000000\n\tNOTE_FFCTRLMASK                   = 0xc0000000\n\tNOTE_FFLAGSMASK                   = 0xffffff\n\tNOTE_FFNOP                        = 0x0\n\tNOTE_FFOR                         = 0x80000000\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x2\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRIGGER                      = 0x1000000\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x20000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x10000\n\tO_DIRECTORY                       = 0x8000000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FAPPEND                         = 0x100000\n\tO_FASYNCWRITE                     = 0x800000\n\tO_FBLOCKING                       = 0x40000\n\tO_FMASK                           = 0xfc0000\n\tO_FNONBLOCKING                    = 0x80000\n\tO_FOFFSET                         = 0x200000\n\tO_FSYNC                           = 0x80\n\tO_FSYNCWRITE                      = 0x400000\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0xb\n\tRTAX_MPLS1                        = 0x8\n\tRTAX_MPLS2                        = 0x9\n\tRTAX_MPLS3                        = 0xa\n\tRTAX_NETMASK                      = 0x2\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_MPLS1                         = 0x100\n\tRTA_MPLS2                         = 0x200\n\tRTA_MPLS3                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPLSOPS                       = 0x1000000\n\tRTF_MULTICAST                     = 0x800000\n\tRTF_PINNED                        = 0x100000\n\tRTF_PRCLONING                     = 0x10000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x40000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_WASCLONED                     = 0x20000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DELMADDR                      = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x12\n\tRTM_IFANNOUNCE                    = 0x11\n\tRTM_IFINFO                        = 0xe\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_NEWMADDR                      = 0xf\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x7\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_IWCAPSEGS                     = 0x400\n\tRTV_IWMAXSEGS                     = 0x200\n\tRTV_MSL                           = 0x100\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x3\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x2\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8118691d\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETSGCNT                      = 0xc0207210\n\tSIOCGETVIFCNT                     = 0xc028720f\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFALIAS                      = 0xc0406929\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCAP                        = 0xc020691f\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc0206926\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFINDEX                      = 0xc0206920\n\tSIOCGIFMEDIA                      = 0xc0306938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc0206933\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206948\n\tSIOCGIFPHYS                       = 0xc0206935\n\tSIOCGIFPOLLCPU                    = 0xc020697e\n\tSIOCGIFPSRCADDR                   = 0xc0206947\n\tSIOCGIFSTATUS                     = 0xc331693b\n\tSIOCGIFTSOLEN                     = 0xc0206980\n\tSIOCGLIFADDR                      = 0xc118691c\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPRIVATE_0                    = 0xc0206950\n\tSIOCGPRIVATE_1                    = 0xc0206951\n\tSIOCIFCREATE                      = 0xc020697a\n\tSIOCIFCREATE2                     = 0xc020697c\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFCAP                        = 0x8020691e\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020693c\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x80206934\n\tSIOCSIFNAME                       = 0x80206928\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSIFPHYS                       = 0x80206936\n\tSIOCSIFPOLLCPU                    = 0x8020697d\n\tSIOCSIFTSOLEN                     = 0x8020697f\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_MAXADDRLEN                   = 0xff\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_CPUHINT                        = 0x1030\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_RERROR                         = 0x2000\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDSPACE                       = 0x100a\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_TIMESTAMP                      = 0x400\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDB                            = 0x9000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTAB0                              = 0x0\n\tTAB3                              = 0x4\n\tTABDLY                            = 0x4\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_FASTKEEP                      = 0x80\n\tTCP_KEEPCNT                       = 0x400\n\tTCP_KEEPIDLE                      = 0x100\n\tTCP_KEEPINIT                      = 0x20\n\tTCP_KEEPINTVL                     = 0x200\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXHLEN                       = 0x3c\n\tTCP_MAXOLEN                       = 0x28\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MINMSS                        = 0x100\n\tTCP_MIN_WINSHIFT                  = 0x5\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOOPT                         = 0x8\n\tTCP_NOPUSH                        = 0x4\n\tTCP_SIGNATURE_ENABLE              = 0x10\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGDRAINWAIT                    = 0x40047456\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCISPTMASTER                    = 0x20007455\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGDTRWAIT                     = 0x4004745a\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x40047403\n\tTIOCMODS                          = 0x80047404\n\tTIOCMSDTRWAIT                     = 0x8004745b\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDRAINWAIT                    = 0x80047457\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCTIMESTAMP                     = 0x40107459\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x1\n\tUTIME_OMIT                        = -0x2\n\tVCHECKPT                          = 0x13\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVERASE2                           = 0x7\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_BCACHE_SIZE_MAX                = 0x0\n\tVM_SWZONE_SIZE_MAX                = 0x4000000000\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWCONTINUED                        = 0x4\n\tWCOREFLAG                         = 0x80\n\tWEXITED                           = 0x10\n\tWLINUXCLONE                       = 0x80000000\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x8\n\tWSTOPPED                          = 0x2\n\tWTRAPPED                          = 0x20\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEASYNC          = syscall.Errno(0x63)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x63)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEDIUM       = syscall.Errno(0x5d)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCKPT     = syscall.Signal(0x21)\n\tSIGCKPTEXIT = syscall.Signal(0x22)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINFO     = syscall.Signal(0x1d)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPROF     = syscall.Signal(0x1b)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTHR      = syscall.Signal(0x20)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVTALRM   = syscall.Signal(0x1a)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOMEDIUM\", \"no medium found\"},\n\t{99, \"EASYNC\", \"unknown error: 99\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread Scheduler\"},\n\t{33, \"SIGCKPT\", \"checkPoint\"},\n\t{34, \"SIGCKPTEXIT\", \"checkPointExit\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0084279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4004427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4008426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x400c4280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80084267\n\tBIOCSETFNR                     = 0x80084282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8008427b\n\tBIOCSETZBUF                    = 0x800c4281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8008426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x4\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc144648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x804c6490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc06c648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x20\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETFSBASE                   = 0x47\n\tPT_GETGSBASE                   = 0x49\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GETXMMREGS                  = 0x40\n\tPT_GETXSTATE                   = 0x45\n\tPT_GETXSTATE_INFO              = 0x44\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETFSBASE                   = 0x48\n\tPT_SETGSBASE                   = 0x4a\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SETXMMREGS                  = 0x41\n\tPT_SETXSTATE                   = 0x46\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80246987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80246989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc01c697b\n\tSIOCGETSGCNT                   = 0xc0147210\n\tSIOCGETVIFCNT                  = 0xc014720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0086924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc024698a\n\tSIOCGIFGROUP                   = 0xc0246988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0286938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc028698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc00c6978\n\tSIOCSDRVSPEC                   = 0x801c697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40087459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVM_BCACHE_SIZE_MAX             = 0x70e0000\n\tVM_SWZONE_SIZE_MAX             = 0x2280000\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x80506490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc080648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x40\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETFSBASE                   = 0x47\n\tPT_GETGSBASE                   = 0x49\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GETXSTATE                   = 0x45\n\tPT_GETXSTATE_INFO              = 0x44\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETFSBASE                   = 0x48\n\tPT_SETGSBASE                   = 0x4a\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SETXSTATE                   = 0x46\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go",
    "content": "// mkerrors.sh\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0084279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4004427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x400c4280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80084267\n\tBIOCSETFNR                     = 0x80084282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8008427b\n\tBIOCSETZBUF                    = 0x800c4281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x4\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x804c6490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc078648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x20\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GETVFPREGS                  = 0x40\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SETVFPREGS                  = 0x41\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80246987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80246989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc01c697b\n\tSIOCGETSGCNT                   = 0xc0147210\n\tSIOCGETVIFCNT                  = 0xc014720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0086924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc024698a\n\tSIOCGIFGROUP                   = 0xc0246988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0286938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc028698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc00c6978\n\tSIOCSDRVSPEC                   = 0x801c697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x80506490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc080648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x40\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVM_BCACHE_SIZE_MAX             = 0x19000000\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_HYPERV                      = 0x2b\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2b\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB1000000                       = 0xf4240\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1500000                       = 0x16e360\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB2000000                       = 0x1e8480\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB2500000                       = 0x2625a0\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB3000000                       = 0x2dc6c0\n\tB3500000                       = 0x3567e0\n\tB38400                         = 0x9600\n\tB4000000                       = 0x3d0900\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB500000                        = 0x7a120\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_BOOTTIME                 = 0x5\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_COARSE         = 0xc\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_COARSE          = 0xa\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGKERNELDUMP                = 0xc0986492\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x80986491\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCSKERNELDUMP_FREEBSD12      = 0x80506490\n\tDIOCZONECMD                    = 0xc080648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEHE_DEAD_PRIORITY              = -0x1\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_NONE                        = -0xc8\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_ADD_SEALS                    = 0x13\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_GET_SEALS                    = 0x14\n\tF_ISUNIONSTACK                 = 0x15\n\tF_KINFO                        = 0x16\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SEAL_GROW                    = 0x4\n\tF_SEAL_SEAL                    = 0x1\n\tF_SEAL_SHRINK                  = 0x2\n\tF_SEAL_WRITE                   = 0x8\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f72\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_KNOWSEPOCH                 = 0x20\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_NETMASK_DEFAULT             = 0xffffff00\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_CREDS_PERSISTENT         = 0x3\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMFD_ALLOW_SEALING              = 0x2\n\tMFD_CLOEXEC                    = 0x1\n\tMFD_HUGETLB                    = 0x4\n\tMFD_HUGE_16GB                  = -0x78000000\n\tMFD_HUGE_16MB                  = 0x60000000\n\tMFD_HUGE_1GB                   = 0x78000000\n\tMFD_HUGE_1MB                   = 0x50000000\n\tMFD_HUGE_256MB                 = 0x70000000\n\tMFD_HUGE_2GB                   = 0x7c000000\n\tMFD_HUGE_2MB                   = 0x54000000\n\tMFD_HUGE_32MB                  = 0x64000000\n\tMFD_HUGE_512KB                 = 0x4c000000\n\tMFD_HUGE_512MB                 = 0x74000000\n\tMFD_HUGE_64KB                  = 0x40000000\n\tMFD_HUGE_8MB                   = 0x5c000000\n\tMFD_HUGE_MASK                  = 0xfc000000\n\tMFD_HUGE_SHIFT                 = 0x1a\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0x300d0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EMPTYDIR                   = 0x2000000000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_EXTLS                      = 0x4000000000\n\tMNT_EXTLSCERT                  = 0x8000000000\n\tMNT_EXTLSCERTUSER              = 0x10000000000\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOCOVER                    = 0x1000000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNET_RT_NHGRP                   = 0x7\n\tNET_RT_NHOP                    = 0x6\n\tNFDBITS                        = 0x40\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_DSYNC                        = 0x1000000\n\tO_EMPTY_PATH                   = 0x2000000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_PATH                         = 0x400000\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_COREDUMP                    = 0x1d\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_DEFAULT_WEIGHT              = 0x1\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAX_WEIGHT                  = 0xffffff\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_CREDS2                     = 0x8\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDATA                    = 0x8020692c\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_INIT_RATE         = 0x458\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_USE_RACK_RR            = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DEFER_OPTIONS              = 0x470\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FAST_RSM_HACK              = 0x471\n\tTCP_FIN_IS_RST                 = 0x49\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_HDWR_RATE_CAP              = 0x46a\n\tTCP_HDWR_UP_ONLY               = 0x46c\n\tTCP_IDLE_REDUCE                = 0x46\n\tTCP_INFO                       = 0x20\n\tTCP_IWND_NB                    = 0x2b\n\tTCP_IWND_NSEG                  = 0x2c\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOGID_CNT                  = 0x2e\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_LOG_LIMIT                  = 0x4a\n\tTCP_LOG_TAG                    = 0x2f\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXPEAKRATE                = 0x45\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXUNACKTIME               = 0x44\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_NO_PRR                     = 0x462\n\tTCP_PACING_RATE_CAP            = 0x46b\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_PERF_INFO                  = 0x4e\n\tTCP_PROC_ACCOUNTING            = 0x4c\n\tTCP_RACK_ABC_VAL               = 0x46d\n\tTCP_RACK_CHEAT_NOT_CONF_RATE   = 0x459\n\tTCP_RACK_DO_DETECTION          = 0x449\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_FORCE_MSEG            = 0x45d\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_GP_INCREASE_CA        = 0x45a\n\tTCP_RACK_GP_INCREASE_REC       = 0x45c\n\tTCP_RACK_GP_INCREASE_SS        = 0x45b\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MBUF_QUEUE            = 0x41a\n\tTCP_RACK_MEASURE_CNT           = 0x46f\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_NONRXT_CFG_RATE       = 0x463\n\tTCP_RACK_NO_PUSH_AT_MAX        = 0x466\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_RATE_CA          = 0x45e\n\tTCP_RACK_PACE_RATE_REC         = 0x460\n\tTCP_RACK_PACE_RATE_SS          = 0x45f\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PACE_TO_FILL          = 0x467\n\tTCP_RACK_PACING_BETA           = 0x472\n\tTCP_RACK_PACING_BETA_ECN       = 0x473\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROFILE               = 0x469\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_RR_CONF               = 0x459\n\tTCP_RACK_TIMER_SLOP            = 0x474\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_REC_ABC_VAL                = 0x46e\n\tTCP_REMOTE_UDP_ENCAPS_PORT     = 0x47\n\tTCP_REUSPORT_LB_NUMA           = 0x402\n\tTCP_REUSPORT_LB_NUMA_CURDOM    = -0x1\n\tTCP_REUSPORT_LB_NUMA_NODOM     = -0x2\n\tTCP_RXTLS_ENABLE               = 0x29\n\tTCP_RXTLS_MODE                 = 0x2a\n\tTCP_SHARED_CWND_ALLOWED        = 0x4b\n\tTCP_SHARED_CWND_ENABLE         = 0x464\n\tTCP_SHARED_CWND_TIME_LIMIT     = 0x468\n\tTCP_STATS                      = 0x21\n\tTCP_TIMELY_DYN_ADJ             = 0x465\n\tTCP_TLS_MODE_IFNET             = 0x2\n\tTCP_TLS_MODE_NONE              = 0x0\n\tTCP_TLS_MODE_SW                = 0x1\n\tTCP_TLS_MODE_TOE               = 0x3\n\tTCP_TXTLS_ENABLE               = 0x27\n\tTCP_TXTLS_MODE                 = 0x28\n\tTCP_USER_LOG                   = 0x30\n\tTCP_USE_CMP_ACKS               = 0x4d\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux.go",
    "content": "// Code generated by mkmerge; DO NOT EDIT.\n\n//go:build linux\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                                  = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                            = 0xadf5\n\tAFFS_SUPER_MAGIC                            = 0xadff\n\tAFS_FS_MAGIC                                = 0x6b414653\n\tAFS_SUPER_MAGIC                             = 0x5346414f\n\tAF_ALG                                      = 0x26\n\tAF_APPLETALK                                = 0x5\n\tAF_ASH                                      = 0x12\n\tAF_ATMPVC                                   = 0x8\n\tAF_ATMSVC                                   = 0x14\n\tAF_AX25                                     = 0x3\n\tAF_BLUETOOTH                                = 0x1f\n\tAF_BRIDGE                                   = 0x7\n\tAF_CAIF                                     = 0x25\n\tAF_CAN                                      = 0x1d\n\tAF_DECnet                                   = 0xc\n\tAF_ECONET                                   = 0x13\n\tAF_FILE                                     = 0x1\n\tAF_IB                                       = 0x1b\n\tAF_IEEE802154                               = 0x24\n\tAF_INET                                     = 0x2\n\tAF_INET6                                    = 0xa\n\tAF_IPX                                      = 0x4\n\tAF_IRDA                                     = 0x17\n\tAF_ISDN                                     = 0x22\n\tAF_IUCV                                     = 0x20\n\tAF_KCM                                      = 0x29\n\tAF_KEY                                      = 0xf\n\tAF_LLC                                      = 0x1a\n\tAF_LOCAL                                    = 0x1\n\tAF_MAX                                      = 0x2e\n\tAF_MCTP                                     = 0x2d\n\tAF_MPLS                                     = 0x1c\n\tAF_NETBEUI                                  = 0xd\n\tAF_NETLINK                                  = 0x10\n\tAF_NETROM                                   = 0x6\n\tAF_NFC                                      = 0x27\n\tAF_PACKET                                   = 0x11\n\tAF_PHONET                                   = 0x23\n\tAF_PPPOX                                    = 0x18\n\tAF_QIPCRTR                                  = 0x2a\n\tAF_RDS                                      = 0x15\n\tAF_ROSE                                     = 0xb\n\tAF_ROUTE                                    = 0x10\n\tAF_RXRPC                                    = 0x21\n\tAF_SECURITY                                 = 0xe\n\tAF_SMC                                      = 0x2b\n\tAF_SNA                                      = 0x16\n\tAF_TIPC                                     = 0x1e\n\tAF_UNIX                                     = 0x1\n\tAF_UNSPEC                                   = 0x0\n\tAF_VSOCK                                    = 0x28\n\tAF_WANPIPE                                  = 0x19\n\tAF_X25                                      = 0x9\n\tAF_XDP                                      = 0x2c\n\tALG_OP_DECRYPT                              = 0x0\n\tALG_OP_ENCRYPT                              = 0x1\n\tALG_SET_AEAD_ASSOCLEN                       = 0x4\n\tALG_SET_AEAD_AUTHSIZE                       = 0x5\n\tALG_SET_DRBG_ENTROPY                        = 0x6\n\tALG_SET_IV                                  = 0x2\n\tALG_SET_KEY                                 = 0x1\n\tALG_SET_KEY_BY_KEY_SERIAL                   = 0x7\n\tALG_SET_OP                                  = 0x3\n\tANON_INODE_FS_MAGIC                         = 0x9041934\n\tARPHRD_6LOWPAN                              = 0x339\n\tARPHRD_ADAPT                                = 0x108\n\tARPHRD_APPLETLK                             = 0x8\n\tARPHRD_ARCNET                               = 0x7\n\tARPHRD_ASH                                  = 0x30d\n\tARPHRD_ATM                                  = 0x13\n\tARPHRD_AX25                                 = 0x3\n\tARPHRD_BIF                                  = 0x307\n\tARPHRD_CAIF                                 = 0x336\n\tARPHRD_CAN                                  = 0x118\n\tARPHRD_CHAOS                                = 0x5\n\tARPHRD_CISCO                                = 0x201\n\tARPHRD_CSLIP                                = 0x101\n\tARPHRD_CSLIP6                               = 0x103\n\tARPHRD_DDCMP                                = 0x205\n\tARPHRD_DLCI                                 = 0xf\n\tARPHRD_ECONET                               = 0x30e\n\tARPHRD_EETHER                               = 0x2\n\tARPHRD_ETHER                                = 0x1\n\tARPHRD_EUI64                                = 0x1b\n\tARPHRD_FCAL                                 = 0x311\n\tARPHRD_FCFABRIC                             = 0x313\n\tARPHRD_FCPL                                 = 0x312\n\tARPHRD_FCPP                                 = 0x310\n\tARPHRD_FDDI                                 = 0x306\n\tARPHRD_FRAD                                 = 0x302\n\tARPHRD_HDLC                                 = 0x201\n\tARPHRD_HIPPI                                = 0x30c\n\tARPHRD_HWX25                                = 0x110\n\tARPHRD_IEEE1394                             = 0x18\n\tARPHRD_IEEE802                              = 0x6\n\tARPHRD_IEEE80211                            = 0x321\n\tARPHRD_IEEE80211_PRISM                      = 0x322\n\tARPHRD_IEEE80211_RADIOTAP                   = 0x323\n\tARPHRD_IEEE802154                           = 0x324\n\tARPHRD_IEEE802154_MONITOR                   = 0x325\n\tARPHRD_IEEE802_TR                           = 0x320\n\tARPHRD_INFINIBAND                           = 0x20\n\tARPHRD_IP6GRE                               = 0x337\n\tARPHRD_IPDDP                                = 0x309\n\tARPHRD_IPGRE                                = 0x30a\n\tARPHRD_IRDA                                 = 0x30f\n\tARPHRD_LAPB                                 = 0x204\n\tARPHRD_LOCALTLK                             = 0x305\n\tARPHRD_LOOPBACK                             = 0x304\n\tARPHRD_MCTP                                 = 0x122\n\tARPHRD_METRICOM                             = 0x17\n\tARPHRD_NETLINK                              = 0x338\n\tARPHRD_NETROM                               = 0x0\n\tARPHRD_NONE                                 = 0xfffe\n\tARPHRD_PHONET                               = 0x334\n\tARPHRD_PHONET_PIPE                          = 0x335\n\tARPHRD_PIMREG                               = 0x30b\n\tARPHRD_PPP                                  = 0x200\n\tARPHRD_PRONET                               = 0x4\n\tARPHRD_RAWHDLC                              = 0x206\n\tARPHRD_RAWIP                                = 0x207\n\tARPHRD_ROSE                                 = 0x10e\n\tARPHRD_RSRVD                                = 0x104\n\tARPHRD_SIT                                  = 0x308\n\tARPHRD_SKIP                                 = 0x303\n\tARPHRD_SLIP                                 = 0x100\n\tARPHRD_SLIP6                                = 0x102\n\tARPHRD_TUNNEL                               = 0x300\n\tARPHRD_TUNNEL6                              = 0x301\n\tARPHRD_VOID                                 = 0xffff\n\tARPHRD_VSOCKMON                             = 0x33a\n\tARPHRD_X25                                  = 0x10f\n\tAUDIT_ADD                                   = 0x3eb\n\tAUDIT_ADD_RULE                              = 0x3f3\n\tAUDIT_ALWAYS                                = 0x2\n\tAUDIT_ANOM_ABEND                            = 0x6a5\n\tAUDIT_ANOM_CREAT                            = 0x6a7\n\tAUDIT_ANOM_LINK                             = 0x6a6\n\tAUDIT_ANOM_PROMISCUOUS                      = 0x6a4\n\tAUDIT_ARCH                                  = 0xb\n\tAUDIT_ARCH_AARCH64                          = 0xc00000b7\n\tAUDIT_ARCH_ALPHA                            = 0xc0009026\n\tAUDIT_ARCH_ARCOMPACT                        = 0x4000005d\n\tAUDIT_ARCH_ARCOMPACTBE                      = 0x5d\n\tAUDIT_ARCH_ARCV2                            = 0x400000c3\n\tAUDIT_ARCH_ARCV2BE                          = 0xc3\n\tAUDIT_ARCH_ARM                              = 0x40000028\n\tAUDIT_ARCH_ARMEB                            = 0x28\n\tAUDIT_ARCH_C6X                              = 0x4000008c\n\tAUDIT_ARCH_C6XBE                            = 0x8c\n\tAUDIT_ARCH_CRIS                             = 0x4000004c\n\tAUDIT_ARCH_CSKY                             = 0x400000fc\n\tAUDIT_ARCH_FRV                              = 0x5441\n\tAUDIT_ARCH_H8300                            = 0x2e\n\tAUDIT_ARCH_HEXAGON                          = 0xa4\n\tAUDIT_ARCH_I386                             = 0x40000003\n\tAUDIT_ARCH_IA64                             = 0xc0000032\n\tAUDIT_ARCH_LOONGARCH32                      = 0x40000102\n\tAUDIT_ARCH_LOONGARCH64                      = 0xc0000102\n\tAUDIT_ARCH_M32R                             = 0x58\n\tAUDIT_ARCH_M68K                             = 0x4\n\tAUDIT_ARCH_MICROBLAZE                       = 0xbd\n\tAUDIT_ARCH_MIPS                             = 0x8\n\tAUDIT_ARCH_MIPS64                           = 0x80000008\n\tAUDIT_ARCH_MIPS64N32                        = 0xa0000008\n\tAUDIT_ARCH_MIPSEL                           = 0x40000008\n\tAUDIT_ARCH_MIPSEL64                         = 0xc0000008\n\tAUDIT_ARCH_MIPSEL64N32                      = 0xe0000008\n\tAUDIT_ARCH_NDS32                            = 0x400000a7\n\tAUDIT_ARCH_NDS32BE                          = 0xa7\n\tAUDIT_ARCH_NIOS2                            = 0x40000071\n\tAUDIT_ARCH_OPENRISC                         = 0x5c\n\tAUDIT_ARCH_PARISC                           = 0xf\n\tAUDIT_ARCH_PARISC64                         = 0x8000000f\n\tAUDIT_ARCH_PPC                              = 0x14\n\tAUDIT_ARCH_PPC64                            = 0x80000015\n\tAUDIT_ARCH_PPC64LE                          = 0xc0000015\n\tAUDIT_ARCH_RISCV32                          = 0x400000f3\n\tAUDIT_ARCH_RISCV64                          = 0xc00000f3\n\tAUDIT_ARCH_S390                             = 0x16\n\tAUDIT_ARCH_S390X                            = 0x80000016\n\tAUDIT_ARCH_SH                               = 0x2a\n\tAUDIT_ARCH_SH64                             = 0x8000002a\n\tAUDIT_ARCH_SHEL                             = 0x4000002a\n\tAUDIT_ARCH_SHEL64                           = 0xc000002a\n\tAUDIT_ARCH_SPARC                            = 0x2\n\tAUDIT_ARCH_SPARC64                          = 0x8000002b\n\tAUDIT_ARCH_TILEGX                           = 0xc00000bf\n\tAUDIT_ARCH_TILEGX32                         = 0x400000bf\n\tAUDIT_ARCH_TILEPRO                          = 0x400000bc\n\tAUDIT_ARCH_UNICORE                          = 0x4000006e\n\tAUDIT_ARCH_X86_64                           = 0xc000003e\n\tAUDIT_ARCH_XTENSA                           = 0x5e\n\tAUDIT_ARG0                                  = 0xc8\n\tAUDIT_ARG1                                  = 0xc9\n\tAUDIT_ARG2                                  = 0xca\n\tAUDIT_ARG3                                  = 0xcb\n\tAUDIT_AVC                                   = 0x578\n\tAUDIT_AVC_PATH                              = 0x57a\n\tAUDIT_BITMASK_SIZE                          = 0x40\n\tAUDIT_BIT_MASK                              = 0x8000000\n\tAUDIT_BIT_TEST                              = 0x48000000\n\tAUDIT_BPF                                   = 0x536\n\tAUDIT_BPRM_FCAPS                            = 0x529\n\tAUDIT_CAPSET                                = 0x52a\n\tAUDIT_CLASS_CHATTR                          = 0x2\n\tAUDIT_CLASS_CHATTR_32                       = 0x3\n\tAUDIT_CLASS_DIR_WRITE                       = 0x0\n\tAUDIT_CLASS_DIR_WRITE_32                    = 0x1\n\tAUDIT_CLASS_READ                            = 0x4\n\tAUDIT_CLASS_READ_32                         = 0x5\n\tAUDIT_CLASS_SIGNAL                          = 0x8\n\tAUDIT_CLASS_SIGNAL_32                       = 0x9\n\tAUDIT_CLASS_WRITE                           = 0x6\n\tAUDIT_CLASS_WRITE_32                        = 0x7\n\tAUDIT_COMPARE_AUID_TO_EUID                  = 0x10\n\tAUDIT_COMPARE_AUID_TO_FSUID                 = 0xe\n\tAUDIT_COMPARE_AUID_TO_OBJ_UID               = 0x5\n\tAUDIT_COMPARE_AUID_TO_SUID                  = 0xf\n\tAUDIT_COMPARE_EGID_TO_FSGID                 = 0x17\n\tAUDIT_COMPARE_EGID_TO_OBJ_GID               = 0x4\n\tAUDIT_COMPARE_EGID_TO_SGID                  = 0x18\n\tAUDIT_COMPARE_EUID_TO_FSUID                 = 0x12\n\tAUDIT_COMPARE_EUID_TO_OBJ_UID               = 0x3\n\tAUDIT_COMPARE_EUID_TO_SUID                  = 0x11\n\tAUDIT_COMPARE_FSGID_TO_OBJ_GID              = 0x9\n\tAUDIT_COMPARE_FSUID_TO_OBJ_UID              = 0x8\n\tAUDIT_COMPARE_GID_TO_EGID                   = 0x14\n\tAUDIT_COMPARE_GID_TO_FSGID                  = 0x15\n\tAUDIT_COMPARE_GID_TO_OBJ_GID                = 0x2\n\tAUDIT_COMPARE_GID_TO_SGID                   = 0x16\n\tAUDIT_COMPARE_SGID_TO_FSGID                 = 0x19\n\tAUDIT_COMPARE_SGID_TO_OBJ_GID               = 0x7\n\tAUDIT_COMPARE_SUID_TO_FSUID                 = 0x13\n\tAUDIT_COMPARE_SUID_TO_OBJ_UID               = 0x6\n\tAUDIT_COMPARE_UID_TO_AUID                   = 0xa\n\tAUDIT_COMPARE_UID_TO_EUID                   = 0xb\n\tAUDIT_COMPARE_UID_TO_FSUID                  = 0xc\n\tAUDIT_COMPARE_UID_TO_OBJ_UID                = 0x1\n\tAUDIT_COMPARE_UID_TO_SUID                   = 0xd\n\tAUDIT_CONFIG_CHANGE                         = 0x519\n\tAUDIT_CWD                                   = 0x51b\n\tAUDIT_DAEMON_ABORT                          = 0x4b2\n\tAUDIT_DAEMON_CONFIG                         = 0x4b3\n\tAUDIT_DAEMON_END                            = 0x4b1\n\tAUDIT_DAEMON_START                          = 0x4b0\n\tAUDIT_DEL                                   = 0x3ec\n\tAUDIT_DEL_RULE                              = 0x3f4\n\tAUDIT_DEVMAJOR                              = 0x64\n\tAUDIT_DEVMINOR                              = 0x65\n\tAUDIT_DIR                                   = 0x6b\n\tAUDIT_DM_CTRL                               = 0x53a\n\tAUDIT_DM_EVENT                              = 0x53b\n\tAUDIT_EGID                                  = 0x6\n\tAUDIT_EOE                                   = 0x528\n\tAUDIT_EQUAL                                 = 0x40000000\n\tAUDIT_EUID                                  = 0x2\n\tAUDIT_EVENT_LISTENER                        = 0x537\n\tAUDIT_EXE                                   = 0x70\n\tAUDIT_EXECVE                                = 0x51d\n\tAUDIT_EXIT                                  = 0x67\n\tAUDIT_FAIL_PANIC                            = 0x2\n\tAUDIT_FAIL_PRINTK                           = 0x1\n\tAUDIT_FAIL_SILENT                           = 0x0\n\tAUDIT_FANOTIFY                              = 0x533\n\tAUDIT_FD_PAIR                               = 0x525\n\tAUDIT_FEATURE_BITMAP_ALL                    = 0x7f\n\tAUDIT_FEATURE_BITMAP_BACKLOG_LIMIT          = 0x1\n\tAUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME      = 0x2\n\tAUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND         = 0x8\n\tAUDIT_FEATURE_BITMAP_EXECUTABLE_PATH        = 0x4\n\tAUDIT_FEATURE_BITMAP_FILTER_FS              = 0x40\n\tAUDIT_FEATURE_BITMAP_LOST_RESET             = 0x20\n\tAUDIT_FEATURE_BITMAP_SESSIONID_FILTER       = 0x10\n\tAUDIT_FEATURE_CHANGE                        = 0x530\n\tAUDIT_FEATURE_LOGINUID_IMMUTABLE            = 0x1\n\tAUDIT_FEATURE_ONLY_UNSET_LOGINUID           = 0x0\n\tAUDIT_FEATURE_VERSION                       = 0x1\n\tAUDIT_FIELD_COMPARE                         = 0x6f\n\tAUDIT_FILETYPE                              = 0x6c\n\tAUDIT_FILTERKEY                             = 0xd2\n\tAUDIT_FILTER_ENTRY                          = 0x2\n\tAUDIT_FILTER_EXCLUDE                        = 0x5\n\tAUDIT_FILTER_EXIT                           = 0x4\n\tAUDIT_FILTER_FS                             = 0x6\n\tAUDIT_FILTER_PREPEND                        = 0x10\n\tAUDIT_FILTER_TASK                           = 0x1\n\tAUDIT_FILTER_TYPE                           = 0x5\n\tAUDIT_FILTER_URING_EXIT                     = 0x7\n\tAUDIT_FILTER_USER                           = 0x0\n\tAUDIT_FILTER_WATCH                          = 0x3\n\tAUDIT_FIRST_KERN_ANOM_MSG                   = 0x6a4\n\tAUDIT_FIRST_USER_MSG                        = 0x44c\n\tAUDIT_FIRST_USER_MSG2                       = 0x834\n\tAUDIT_FSGID                                 = 0x8\n\tAUDIT_FSTYPE                                = 0x1a\n\tAUDIT_FSUID                                 = 0x4\n\tAUDIT_GET                                   = 0x3e8\n\tAUDIT_GET_FEATURE                           = 0x3fb\n\tAUDIT_GID                                   = 0x5\n\tAUDIT_GREATER_THAN                          = 0x20000000\n\tAUDIT_GREATER_THAN_OR_EQUAL                 = 0x60000000\n\tAUDIT_INODE                                 = 0x66\n\tAUDIT_INTEGRITY_DATA                        = 0x708\n\tAUDIT_INTEGRITY_EVM_XATTR                   = 0x70e\n\tAUDIT_INTEGRITY_HASH                        = 0x70b\n\tAUDIT_INTEGRITY_METADATA                    = 0x709\n\tAUDIT_INTEGRITY_PCR                         = 0x70c\n\tAUDIT_INTEGRITY_POLICY_RULE                 = 0x70f\n\tAUDIT_INTEGRITY_RULE                        = 0x70d\n\tAUDIT_INTEGRITY_STATUS                      = 0x70a\n\tAUDIT_IPC                                   = 0x517\n\tAUDIT_IPC_SET_PERM                          = 0x51f\n\tAUDIT_IPE_ACCESS                            = 0x58c\n\tAUDIT_IPE_CONFIG_CHANGE                     = 0x58d\n\tAUDIT_IPE_POLICY_LOAD                       = 0x58e\n\tAUDIT_KERNEL                                = 0x7d0\n\tAUDIT_KERNEL_OTHER                          = 0x524\n\tAUDIT_KERN_MODULE                           = 0x532\n\tAUDIT_LAST_FEATURE                          = 0x1\n\tAUDIT_LAST_KERN_ANOM_MSG                    = 0x707\n\tAUDIT_LAST_USER_MSG                         = 0x4af\n\tAUDIT_LAST_USER_MSG2                        = 0xbb7\n\tAUDIT_LESS_THAN                             = 0x10000000\n\tAUDIT_LESS_THAN_OR_EQUAL                    = 0x50000000\n\tAUDIT_LIST                                  = 0x3ea\n\tAUDIT_LIST_RULES                            = 0x3f5\n\tAUDIT_LOGIN                                 = 0x3ee\n\tAUDIT_LOGINUID                              = 0x9\n\tAUDIT_LOGINUID_SET                          = 0x18\n\tAUDIT_MAC_CALIPSO_ADD                       = 0x58a\n\tAUDIT_MAC_CALIPSO_DEL                       = 0x58b\n\tAUDIT_MAC_CIPSOV4_ADD                       = 0x57f\n\tAUDIT_MAC_CIPSOV4_DEL                       = 0x580\n\tAUDIT_MAC_CONFIG_CHANGE                     = 0x57d\n\tAUDIT_MAC_IPSEC_ADDSA                       = 0x583\n\tAUDIT_MAC_IPSEC_ADDSPD                      = 0x585\n\tAUDIT_MAC_IPSEC_DELSA                       = 0x584\n\tAUDIT_MAC_IPSEC_DELSPD                      = 0x586\n\tAUDIT_MAC_IPSEC_EVENT                       = 0x587\n\tAUDIT_MAC_MAP_ADD                           = 0x581\n\tAUDIT_MAC_MAP_DEL                           = 0x582\n\tAUDIT_MAC_POLICY_LOAD                       = 0x57b\n\tAUDIT_MAC_STATUS                            = 0x57c\n\tAUDIT_MAC_UNLBL_ALLOW                       = 0x57e\n\tAUDIT_MAC_UNLBL_STCADD                      = 0x588\n\tAUDIT_MAC_UNLBL_STCDEL                      = 0x589\n\tAUDIT_MAKE_EQUIV                            = 0x3f7\n\tAUDIT_MAX_FIELDS                            = 0x40\n\tAUDIT_MAX_FIELD_COMPARE                     = 0x19\n\tAUDIT_MAX_KEY_LEN                           = 0x100\n\tAUDIT_MESSAGE_TEXT_MAX                      = 0x2170\n\tAUDIT_MMAP                                  = 0x52b\n\tAUDIT_MQ_GETSETATTR                         = 0x523\n\tAUDIT_MQ_NOTIFY                             = 0x522\n\tAUDIT_MQ_OPEN                               = 0x520\n\tAUDIT_MQ_SENDRECV                           = 0x521\n\tAUDIT_MSGTYPE                               = 0xc\n\tAUDIT_NEGATE                                = 0x80000000\n\tAUDIT_NETFILTER_CFG                         = 0x52d\n\tAUDIT_NETFILTER_PKT                         = 0x52c\n\tAUDIT_NEVER                                 = 0x0\n\tAUDIT_NLGRP_MAX                             = 0x1\n\tAUDIT_NOT_EQUAL                             = 0x30000000\n\tAUDIT_NR_FILTERS                            = 0x8\n\tAUDIT_OBJ_GID                               = 0x6e\n\tAUDIT_OBJ_LEV_HIGH                          = 0x17\n\tAUDIT_OBJ_LEV_LOW                           = 0x16\n\tAUDIT_OBJ_PID                               = 0x526\n\tAUDIT_OBJ_ROLE                              = 0x14\n\tAUDIT_OBJ_TYPE                              = 0x15\n\tAUDIT_OBJ_UID                               = 0x6d\n\tAUDIT_OBJ_USER                              = 0x13\n\tAUDIT_OPENAT2                               = 0x539\n\tAUDIT_OPERATORS                             = 0x78000000\n\tAUDIT_PATH                                  = 0x516\n\tAUDIT_PERM                                  = 0x6a\n\tAUDIT_PERM_ATTR                             = 0x8\n\tAUDIT_PERM_EXEC                             = 0x1\n\tAUDIT_PERM_READ                             = 0x4\n\tAUDIT_PERM_WRITE                            = 0x2\n\tAUDIT_PERS                                  = 0xa\n\tAUDIT_PID                                   = 0x0\n\tAUDIT_POSSIBLE                              = 0x1\n\tAUDIT_PPID                                  = 0x12\n\tAUDIT_PROCTITLE                             = 0x52f\n\tAUDIT_REPLACE                               = 0x531\n\tAUDIT_SADDR_FAM                             = 0x71\n\tAUDIT_SECCOMP                               = 0x52e\n\tAUDIT_SELINUX_ERR                           = 0x579\n\tAUDIT_SESSIONID                             = 0x19\n\tAUDIT_SET                                   = 0x3e9\n\tAUDIT_SET_FEATURE                           = 0x3fa\n\tAUDIT_SGID                                  = 0x7\n\tAUDIT_SID_UNSET                             = 0xffffffff\n\tAUDIT_SIGNAL_INFO                           = 0x3f2\n\tAUDIT_SOCKADDR                              = 0x51a\n\tAUDIT_SOCKETCALL                            = 0x518\n\tAUDIT_STATUS_BACKLOG_LIMIT                  = 0x10\n\tAUDIT_STATUS_BACKLOG_WAIT_TIME              = 0x20\n\tAUDIT_STATUS_BACKLOG_WAIT_TIME_ACTUAL       = 0x80\n\tAUDIT_STATUS_ENABLED                        = 0x1\n\tAUDIT_STATUS_FAILURE                        = 0x2\n\tAUDIT_STATUS_LOST                           = 0x40\n\tAUDIT_STATUS_PID                            = 0x4\n\tAUDIT_STATUS_RATE_LIMIT                     = 0x8\n\tAUDIT_SUBJ_CLR                              = 0x11\n\tAUDIT_SUBJ_ROLE                             = 0xe\n\tAUDIT_SUBJ_SEN                              = 0x10\n\tAUDIT_SUBJ_TYPE                             = 0xf\n\tAUDIT_SUBJ_USER                             = 0xd\n\tAUDIT_SUCCESS                               = 0x68\n\tAUDIT_SUID                                  = 0x3\n\tAUDIT_SYSCALL                               = 0x514\n\tAUDIT_SYSCALL_CLASSES                       = 0x10\n\tAUDIT_TIME_ADJNTPVAL                        = 0x535\n\tAUDIT_TIME_INJOFFSET                        = 0x534\n\tAUDIT_TRIM                                  = 0x3f6\n\tAUDIT_TTY                                   = 0x527\n\tAUDIT_TTY_GET                               = 0x3f8\n\tAUDIT_TTY_SET                               = 0x3f9\n\tAUDIT_UID                                   = 0x1\n\tAUDIT_UID_UNSET                             = 0xffffffff\n\tAUDIT_UNUSED_BITS                           = 0x7fffc00\n\tAUDIT_URINGOP                               = 0x538\n\tAUDIT_USER                                  = 0x3ed\n\tAUDIT_USER_AVC                              = 0x453\n\tAUDIT_USER_TTY                              = 0x464\n\tAUDIT_VERSION_BACKLOG_LIMIT                 = 0x1\n\tAUDIT_VERSION_BACKLOG_WAIT_TIME             = 0x2\n\tAUDIT_VERSION_LATEST                        = 0x7f\n\tAUDIT_WATCH                                 = 0x69\n\tAUDIT_WATCH_INS                             = 0x3ef\n\tAUDIT_WATCH_LIST                            = 0x3f1\n\tAUDIT_WATCH_REM                             = 0x3f0\n\tAUTOFS_SUPER_MAGIC                          = 0x187\n\tB0                                          = 0x0\n\tB110                                        = 0x3\n\tB1200                                       = 0x9\n\tB134                                        = 0x4\n\tB150                                        = 0x5\n\tB1800                                       = 0xa\n\tB19200                                      = 0xe\n\tB200                                        = 0x6\n\tB2400                                       = 0xb\n\tB300                                        = 0x7\n\tB38400                                      = 0xf\n\tB4800                                       = 0xc\n\tB50                                         = 0x1\n\tB600                                        = 0x8\n\tB75                                         = 0x2\n\tB9600                                       = 0xd\n\tBCACHEFS_SUPER_MAGIC                        = 0xca451a4e\n\tBDEVFS_MAGIC                                = 0x62646576\n\tBINDERFS_SUPER_MAGIC                        = 0x6c6f6f70\n\tBINFMTFS_MAGIC                              = 0x42494e4d\n\tBPF_A                                       = 0x10\n\tBPF_ABS                                     = 0x20\n\tBPF_ADD                                     = 0x0\n\tBPF_ALU                                     = 0x4\n\tBPF_ALU64                                   = 0x7\n\tBPF_AND                                     = 0x50\n\tBPF_ARSH                                    = 0xc0\n\tBPF_ATOMIC                                  = 0xc0\n\tBPF_B                                       = 0x10\n\tBPF_BUILD_ID_SIZE                           = 0x14\n\tBPF_CALL                                    = 0x80\n\tBPF_CMPXCHG                                 = 0xf1\n\tBPF_DIV                                     = 0x30\n\tBPF_DW                                      = 0x18\n\tBPF_END                                     = 0xd0\n\tBPF_EXIT                                    = 0x90\n\tBPF_FETCH                                   = 0x1\n\tBPF_FROM_BE                                 = 0x8\n\tBPF_FROM_LE                                 = 0x0\n\tBPF_FS_MAGIC                                = 0xcafe4a11\n\tBPF_F_AFTER                                 = 0x10\n\tBPF_F_ALLOW_MULTI                           = 0x2\n\tBPF_F_ALLOW_OVERRIDE                        = 0x1\n\tBPF_F_ANY_ALIGNMENT                         = 0x2\n\tBPF_F_BEFORE                                = 0x8\n\tBPF_F_ID                                    = 0x20\n\tBPF_F_NETFILTER_IP_DEFRAG                   = 0x1\n\tBPF_F_QUERY_EFFECTIVE                       = 0x1\n\tBPF_F_REDIRECT_FLAGS                        = 0x19\n\tBPF_F_REPLACE                               = 0x4\n\tBPF_F_SLEEPABLE                             = 0x10\n\tBPF_F_STRICT_ALIGNMENT                      = 0x1\n\tBPF_F_TEST_REG_INVARIANTS                   = 0x80\n\tBPF_F_TEST_RND_HI32                         = 0x4\n\tBPF_F_TEST_RUN_ON_CPU                       = 0x1\n\tBPF_F_TEST_SKB_CHECKSUM_COMPLETE            = 0x4\n\tBPF_F_TEST_STATE_FREQ                       = 0x8\n\tBPF_F_TEST_XDP_LIVE_FRAMES                  = 0x2\n\tBPF_F_XDP_DEV_BOUND_ONLY                    = 0x40\n\tBPF_F_XDP_HAS_FRAGS                         = 0x20\n\tBPF_H                                       = 0x8\n\tBPF_IMM                                     = 0x0\n\tBPF_IND                                     = 0x40\n\tBPF_JA                                      = 0x0\n\tBPF_JCOND                                   = 0xe0\n\tBPF_JEQ                                     = 0x10\n\tBPF_JGE                                     = 0x30\n\tBPF_JGT                                     = 0x20\n\tBPF_JLE                                     = 0xb0\n\tBPF_JLT                                     = 0xa0\n\tBPF_JMP                                     = 0x5\n\tBPF_JMP32                                   = 0x6\n\tBPF_JNE                                     = 0x50\n\tBPF_JSET                                    = 0x40\n\tBPF_JSGE                                    = 0x70\n\tBPF_JSGT                                    = 0x60\n\tBPF_JSLE                                    = 0xd0\n\tBPF_JSLT                                    = 0xc0\n\tBPF_K                                       = 0x0\n\tBPF_LD                                      = 0x0\n\tBPF_LDX                                     = 0x1\n\tBPF_LEN                                     = 0x80\n\tBPF_LL_OFF                                  = -0x200000\n\tBPF_LSH                                     = 0x60\n\tBPF_MAJOR_VERSION                           = 0x1\n\tBPF_MAXINSNS                                = 0x1000\n\tBPF_MEM                                     = 0x60\n\tBPF_MEMSX                                   = 0x80\n\tBPF_MEMWORDS                                = 0x10\n\tBPF_MINOR_VERSION                           = 0x1\n\tBPF_MISC                                    = 0x7\n\tBPF_MOD                                     = 0x90\n\tBPF_MOV                                     = 0xb0\n\tBPF_MSH                                     = 0xa0\n\tBPF_MUL                                     = 0x20\n\tBPF_NEG                                     = 0x80\n\tBPF_NET_OFF                                 = -0x100000\n\tBPF_OBJ_NAME_LEN                            = 0x10\n\tBPF_OR                                      = 0x40\n\tBPF_PSEUDO_BTF_ID                           = 0x3\n\tBPF_PSEUDO_CALL                             = 0x1\n\tBPF_PSEUDO_FUNC                             = 0x4\n\tBPF_PSEUDO_KFUNC_CALL                       = 0x2\n\tBPF_PSEUDO_MAP_FD                           = 0x1\n\tBPF_PSEUDO_MAP_IDX                          = 0x5\n\tBPF_PSEUDO_MAP_IDX_VALUE                    = 0x6\n\tBPF_PSEUDO_MAP_VALUE                        = 0x2\n\tBPF_RET                                     = 0x6\n\tBPF_RSH                                     = 0x70\n\tBPF_ST                                      = 0x2\n\tBPF_STX                                     = 0x3\n\tBPF_SUB                                     = 0x10\n\tBPF_TAG_SIZE                                = 0x8\n\tBPF_TAX                                     = 0x0\n\tBPF_TO_BE                                   = 0x8\n\tBPF_TO_LE                                   = 0x0\n\tBPF_TXA                                     = 0x80\n\tBPF_W                                       = 0x0\n\tBPF_X                                       = 0x8\n\tBPF_XADD                                    = 0xc0\n\tBPF_XCHG                                    = 0xe1\n\tBPF_XOR                                     = 0xa0\n\tBRKINT                                      = 0x2\n\tBS0                                         = 0x0\n\tBTRFS_SUPER_MAGIC                           = 0x9123683e\n\tBTRFS_TEST_MAGIC                            = 0x73727279\n\tBUS_BLUETOOTH                               = 0x5\n\tBUS_HIL                                     = 0x4\n\tBUS_USB                                     = 0x3\n\tBUS_VIRTUAL                                 = 0x6\n\tCAN_BCM                                     = 0x2\n\tCAN_BUS_OFF_THRESHOLD                       = 0x100\n\tCAN_CTRLMODE_3_SAMPLES                      = 0x4\n\tCAN_CTRLMODE_BERR_REPORTING                 = 0x10\n\tCAN_CTRLMODE_CC_LEN8_DLC                    = 0x100\n\tCAN_CTRLMODE_FD                             = 0x20\n\tCAN_CTRLMODE_FD_NON_ISO                     = 0x80\n\tCAN_CTRLMODE_LISTENONLY                     = 0x2\n\tCAN_CTRLMODE_LOOPBACK                       = 0x1\n\tCAN_CTRLMODE_ONE_SHOT                       = 0x8\n\tCAN_CTRLMODE_PRESUME_ACK                    = 0x40\n\tCAN_CTRLMODE_TDC_AUTO                       = 0x200\n\tCAN_CTRLMODE_TDC_MANUAL                     = 0x400\n\tCAN_EFF_FLAG                                = 0x80000000\n\tCAN_EFF_ID_BITS                             = 0x1d\n\tCAN_EFF_MASK                                = 0x1fffffff\n\tCAN_ERROR_PASSIVE_THRESHOLD                 = 0x80\n\tCAN_ERROR_WARNING_THRESHOLD                 = 0x60\n\tCAN_ERR_ACK                                 = 0x20\n\tCAN_ERR_BUSERROR                            = 0x80\n\tCAN_ERR_BUSOFF                              = 0x40\n\tCAN_ERR_CNT                                 = 0x200\n\tCAN_ERR_CRTL                                = 0x4\n\tCAN_ERR_CRTL_ACTIVE                         = 0x40\n\tCAN_ERR_CRTL_RX_OVERFLOW                    = 0x1\n\tCAN_ERR_CRTL_RX_PASSIVE                     = 0x10\n\tCAN_ERR_CRTL_RX_WARNING                     = 0x4\n\tCAN_ERR_CRTL_TX_OVERFLOW                    = 0x2\n\tCAN_ERR_CRTL_TX_PASSIVE                     = 0x20\n\tCAN_ERR_CRTL_TX_WARNING                     = 0x8\n\tCAN_ERR_CRTL_UNSPEC                         = 0x0\n\tCAN_ERR_DLC                                 = 0x8\n\tCAN_ERR_FLAG                                = 0x20000000\n\tCAN_ERR_LOSTARB                             = 0x2\n\tCAN_ERR_LOSTARB_UNSPEC                      = 0x0\n\tCAN_ERR_MASK                                = 0x1fffffff\n\tCAN_ERR_PROT                                = 0x8\n\tCAN_ERR_PROT_ACTIVE                         = 0x40\n\tCAN_ERR_PROT_BIT                            = 0x1\n\tCAN_ERR_PROT_BIT0                           = 0x8\n\tCAN_ERR_PROT_BIT1                           = 0x10\n\tCAN_ERR_PROT_FORM                           = 0x2\n\tCAN_ERR_PROT_LOC_ACK                        = 0x19\n\tCAN_ERR_PROT_LOC_ACK_DEL                    = 0x1b\n\tCAN_ERR_PROT_LOC_CRC_DEL                    = 0x18\n\tCAN_ERR_PROT_LOC_CRC_SEQ                    = 0x8\n\tCAN_ERR_PROT_LOC_DATA                       = 0xa\n\tCAN_ERR_PROT_LOC_DLC                        = 0xb\n\tCAN_ERR_PROT_LOC_EOF                        = 0x1a\n\tCAN_ERR_PROT_LOC_ID04_00                    = 0xe\n\tCAN_ERR_PROT_LOC_ID12_05                    = 0xf\n\tCAN_ERR_PROT_LOC_ID17_13                    = 0x7\n\tCAN_ERR_PROT_LOC_ID20_18                    = 0x6\n\tCAN_ERR_PROT_LOC_ID28_21                    = 0x2\n\tCAN_ERR_PROT_LOC_IDE                        = 0x5\n\tCAN_ERR_PROT_LOC_INTERM                     = 0x12\n\tCAN_ERR_PROT_LOC_RES0                       = 0x9\n\tCAN_ERR_PROT_LOC_RES1                       = 0xd\n\tCAN_ERR_PROT_LOC_RTR                        = 0xc\n\tCAN_ERR_PROT_LOC_SOF                        = 0x3\n\tCAN_ERR_PROT_LOC_SRTR                       = 0x4\n\tCAN_ERR_PROT_LOC_UNSPEC                     = 0x0\n\tCAN_ERR_PROT_OVERLOAD                       = 0x20\n\tCAN_ERR_PROT_STUFF                          = 0x4\n\tCAN_ERR_PROT_TX                             = 0x80\n\tCAN_ERR_PROT_UNSPEC                         = 0x0\n\tCAN_ERR_RESTARTED                           = 0x100\n\tCAN_ERR_TRX                                 = 0x10\n\tCAN_ERR_TRX_CANH_NO_WIRE                    = 0x4\n\tCAN_ERR_TRX_CANH_SHORT_TO_BAT               = 0x5\n\tCAN_ERR_TRX_CANH_SHORT_TO_GND               = 0x7\n\tCAN_ERR_TRX_CANH_SHORT_TO_VCC               = 0x6\n\tCAN_ERR_TRX_CANL_NO_WIRE                    = 0x40\n\tCAN_ERR_TRX_CANL_SHORT_TO_BAT               = 0x50\n\tCAN_ERR_TRX_CANL_SHORT_TO_CANH              = 0x80\n\tCAN_ERR_TRX_CANL_SHORT_TO_GND               = 0x70\n\tCAN_ERR_TRX_CANL_SHORT_TO_VCC               = 0x60\n\tCAN_ERR_TRX_UNSPEC                          = 0x0\n\tCAN_ERR_TX_TIMEOUT                          = 0x1\n\tCAN_INV_FILTER                              = 0x20000000\n\tCAN_ISOTP                                   = 0x6\n\tCAN_J1939                                   = 0x7\n\tCAN_MAX_DLC                                 = 0x8\n\tCAN_MAX_DLEN                                = 0x8\n\tCAN_MAX_RAW_DLC                             = 0xf\n\tCAN_MCNET                                   = 0x5\n\tCAN_MTU                                     = 0x10\n\tCAN_NPROTO                                  = 0x8\n\tCAN_RAW                                     = 0x1\n\tCAN_RAW_FILTER_MAX                          = 0x200\n\tCAN_RAW_XL_VCID_RX_FILTER                   = 0x4\n\tCAN_RAW_XL_VCID_TX_PASS                     = 0x2\n\tCAN_RAW_XL_VCID_TX_SET                      = 0x1\n\tCAN_RTR_FLAG                                = 0x40000000\n\tCAN_SFF_ID_BITS                             = 0xb\n\tCAN_SFF_MASK                                = 0x7ff\n\tCAN_TERMINATION_DISABLED                    = 0x0\n\tCAN_TP16                                    = 0x3\n\tCAN_TP20                                    = 0x4\n\tCAP_AUDIT_CONTROL                           = 0x1e\n\tCAP_AUDIT_READ                              = 0x25\n\tCAP_AUDIT_WRITE                             = 0x1d\n\tCAP_BLOCK_SUSPEND                           = 0x24\n\tCAP_BPF                                     = 0x27\n\tCAP_CHECKPOINT_RESTORE                      = 0x28\n\tCAP_CHOWN                                   = 0x0\n\tCAP_DAC_OVERRIDE                            = 0x1\n\tCAP_DAC_READ_SEARCH                         = 0x2\n\tCAP_FOWNER                                  = 0x3\n\tCAP_FSETID                                  = 0x4\n\tCAP_IPC_LOCK                                = 0xe\n\tCAP_IPC_OWNER                               = 0xf\n\tCAP_KILL                                    = 0x5\n\tCAP_LAST_CAP                                = 0x28\n\tCAP_LEASE                                   = 0x1c\n\tCAP_LINUX_IMMUTABLE                         = 0x9\n\tCAP_MAC_ADMIN                               = 0x21\n\tCAP_MAC_OVERRIDE                            = 0x20\n\tCAP_MKNOD                                   = 0x1b\n\tCAP_NET_ADMIN                               = 0xc\n\tCAP_NET_BIND_SERVICE                        = 0xa\n\tCAP_NET_BROADCAST                           = 0xb\n\tCAP_NET_RAW                                 = 0xd\n\tCAP_PERFMON                                 = 0x26\n\tCAP_SETFCAP                                 = 0x1f\n\tCAP_SETGID                                  = 0x6\n\tCAP_SETPCAP                                 = 0x8\n\tCAP_SETUID                                  = 0x7\n\tCAP_SYSLOG                                  = 0x22\n\tCAP_SYS_ADMIN                               = 0x15\n\tCAP_SYS_BOOT                                = 0x16\n\tCAP_SYS_CHROOT                              = 0x12\n\tCAP_SYS_MODULE                              = 0x10\n\tCAP_SYS_NICE                                = 0x17\n\tCAP_SYS_PACCT                               = 0x14\n\tCAP_SYS_PTRACE                              = 0x13\n\tCAP_SYS_RAWIO                               = 0x11\n\tCAP_SYS_RESOURCE                            = 0x18\n\tCAP_SYS_TIME                                = 0x19\n\tCAP_SYS_TTY_CONFIG                          = 0x1a\n\tCAP_WAKE_ALARM                              = 0x23\n\tCEPH_SUPER_MAGIC                            = 0xc36400\n\tCFLUSH                                      = 0xf\n\tCGROUP2_SUPER_MAGIC                         = 0x63677270\n\tCGROUP_SUPER_MAGIC                          = 0x27e0eb\n\tCIFS_SUPER_MAGIC                            = 0xff534d42\n\tCLOCK_BOOTTIME                              = 0x7\n\tCLOCK_BOOTTIME_ALARM                        = 0x9\n\tCLOCK_DEFAULT                               = 0x0\n\tCLOCK_EXT                                   = 0x1\n\tCLOCK_INT                                   = 0x2\n\tCLOCK_MONOTONIC                             = 0x1\n\tCLOCK_MONOTONIC_COARSE                      = 0x6\n\tCLOCK_MONOTONIC_RAW                         = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID                    = 0x2\n\tCLOCK_REALTIME                              = 0x0\n\tCLOCK_REALTIME_ALARM                        = 0x8\n\tCLOCK_REALTIME_COARSE                       = 0x5\n\tCLOCK_TAI                                   = 0xb\n\tCLOCK_THREAD_CPUTIME_ID                     = 0x3\n\tCLOCK_TXFROMRX                              = 0x4\n\tCLOCK_TXINT                                 = 0x3\n\tCLONE_ARGS_SIZE_VER0                        = 0x40\n\tCLONE_ARGS_SIZE_VER1                        = 0x50\n\tCLONE_ARGS_SIZE_VER2                        = 0x58\n\tCLONE_CHILD_CLEARTID                        = 0x200000\n\tCLONE_CHILD_SETTID                          = 0x1000000\n\tCLONE_CLEAR_SIGHAND                         = 0x100000000\n\tCLONE_DETACHED                              = 0x400000\n\tCLONE_FILES                                 = 0x400\n\tCLONE_FS                                    = 0x200\n\tCLONE_INTO_CGROUP                           = 0x200000000\n\tCLONE_IO                                    = 0x80000000\n\tCLONE_NEWCGROUP                             = 0x2000000\n\tCLONE_NEWIPC                                = 0x8000000\n\tCLONE_NEWNET                                = 0x40000000\n\tCLONE_NEWNS                                 = 0x20000\n\tCLONE_NEWPID                                = 0x20000000\n\tCLONE_NEWTIME                               = 0x80\n\tCLONE_NEWUSER                               = 0x10000000\n\tCLONE_NEWUTS                                = 0x4000000\n\tCLONE_PARENT                                = 0x8000\n\tCLONE_PARENT_SETTID                         = 0x100000\n\tCLONE_PIDFD                                 = 0x1000\n\tCLONE_PTRACE                                = 0x2000\n\tCLONE_SETTLS                                = 0x80000\n\tCLONE_SIGHAND                               = 0x800\n\tCLONE_SYSVSEM                               = 0x40000\n\tCLONE_THREAD                                = 0x10000\n\tCLONE_UNTRACED                              = 0x800000\n\tCLONE_VFORK                                 = 0x4000\n\tCLONE_VM                                    = 0x100\n\tCMSPAR                                      = 0x40000000\n\tCODA_SUPER_MAGIC                            = 0x73757245\n\tCR0                                         = 0x0\n\tCRAMFS_MAGIC                                = 0x28cd3d45\n\tCRTSCTS                                     = 0x80000000\n\tCRYPTO_MAX_NAME                             = 0x40\n\tCRYPTO_MSG_MAX                              = 0x15\n\tCRYPTO_NR_MSGTYPES                          = 0x6\n\tCRYPTO_REPORT_MAXSIZE                       = 0x160\n\tCS5                                         = 0x0\n\tCSIGNAL                                     = 0xff\n\tCSTART                                      = 0x11\n\tCSTATUS                                     = 0x0\n\tCSTOP                                       = 0x13\n\tCSUSP                                       = 0x1a\n\tDAXFS_MAGIC                                 = 0x64646178\n\tDEBUGFS_MAGIC                               = 0x64626720\n\tDEVLINK_CMD_ESWITCH_MODE_GET                = 0x1d\n\tDEVLINK_CMD_ESWITCH_MODE_SET                = 0x1e\n\tDEVLINK_FLASH_OVERWRITE_IDENTIFIERS         = 0x2\n\tDEVLINK_FLASH_OVERWRITE_SETTINGS            = 0x1\n\tDEVLINK_GENL_MCGRP_CONFIG_NAME              = \"config\"\n\tDEVLINK_GENL_NAME                           = \"devlink\"\n\tDEVLINK_GENL_VERSION                        = 0x1\n\tDEVLINK_PORT_FN_CAP_IPSEC_CRYPTO            = 0x4\n\tDEVLINK_PORT_FN_CAP_IPSEC_PACKET            = 0x8\n\tDEVLINK_PORT_FN_CAP_MIGRATABLE              = 0x2\n\tDEVLINK_PORT_FN_CAP_ROCE                    = 0x1\n\tDEVLINK_SB_THRESHOLD_TO_ALPHA_MAX           = 0x14\n\tDEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS  = 0x3\n\tDEVMEM_MAGIC                                = 0x454d444d\n\tDEVPTS_SUPER_MAGIC                          = 0x1cd1\n\tDMA_BUF_MAGIC                               = 0x444d4142\n\tDM_ACTIVE_PRESENT_FLAG                      = 0x20\n\tDM_BUFFER_FULL_FLAG                         = 0x100\n\tDM_CONTROL_NODE                             = \"control\"\n\tDM_DATA_OUT_FLAG                            = 0x10000\n\tDM_DEFERRED_REMOVE                          = 0x20000\n\tDM_DEV_ARM_POLL                             = 0xc138fd10\n\tDM_DEV_CREATE                               = 0xc138fd03\n\tDM_DEV_REMOVE                               = 0xc138fd04\n\tDM_DEV_RENAME                               = 0xc138fd05\n\tDM_DEV_SET_GEOMETRY                         = 0xc138fd0f\n\tDM_DEV_STATUS                               = 0xc138fd07\n\tDM_DEV_SUSPEND                              = 0xc138fd06\n\tDM_DEV_WAIT                                 = 0xc138fd08\n\tDM_DIR                                      = \"mapper\"\n\tDM_GET_TARGET_VERSION                       = 0xc138fd11\n\tDM_IMA_MEASUREMENT_FLAG                     = 0x80000\n\tDM_INACTIVE_PRESENT_FLAG                    = 0x40\n\tDM_INTERNAL_SUSPEND_FLAG                    = 0x40000\n\tDM_IOCTL                                    = 0xfd\n\tDM_LIST_DEVICES                             = 0xc138fd02\n\tDM_LIST_VERSIONS                            = 0xc138fd0d\n\tDM_MAX_TYPE_NAME                            = 0x10\n\tDM_NAME_LEN                                 = 0x80\n\tDM_NAME_LIST_FLAG_DOESNT_HAVE_UUID          = 0x2\n\tDM_NAME_LIST_FLAG_HAS_UUID                  = 0x1\n\tDM_NOFLUSH_FLAG                             = 0x800\n\tDM_PERSISTENT_DEV_FLAG                      = 0x8\n\tDM_QUERY_INACTIVE_TABLE_FLAG                = 0x1000\n\tDM_READONLY_FLAG                            = 0x1\n\tDM_REMOVE_ALL                               = 0xc138fd01\n\tDM_SECURE_DATA_FLAG                         = 0x8000\n\tDM_SKIP_BDGET_FLAG                          = 0x200\n\tDM_SKIP_LOCKFS_FLAG                         = 0x400\n\tDM_STATUS_TABLE_FLAG                        = 0x10\n\tDM_SUSPEND_FLAG                             = 0x2\n\tDM_TABLE_CLEAR                              = 0xc138fd0a\n\tDM_TABLE_DEPS                               = 0xc138fd0b\n\tDM_TABLE_LOAD                               = 0xc138fd09\n\tDM_TABLE_STATUS                             = 0xc138fd0c\n\tDM_TARGET_MSG                               = 0xc138fd0e\n\tDM_UEVENT_GENERATED_FLAG                    = 0x2000\n\tDM_UUID_FLAG                                = 0x4000\n\tDM_UUID_LEN                                 = 0x81\n\tDM_VERSION                                  = 0xc138fd00\n\tDM_VERSION_EXTRA                            = \"-ioctl (2023-03-01)\"\n\tDM_VERSION_MAJOR                            = 0x4\n\tDM_VERSION_MINOR                            = 0x30\n\tDM_VERSION_PATCHLEVEL                       = 0x0\n\tDT_BLK                                      = 0x6\n\tDT_CHR                                      = 0x2\n\tDT_DIR                                      = 0x4\n\tDT_FIFO                                     = 0x1\n\tDT_LNK                                      = 0xa\n\tDT_REG                                      = 0x8\n\tDT_SOCK                                     = 0xc\n\tDT_UNKNOWN                                  = 0x0\n\tDT_WHT                                      = 0xe\n\tECHO                                        = 0x8\n\tECRYPTFS_SUPER_MAGIC                        = 0xf15f\n\tEFD_SEMAPHORE                               = 0x1\n\tEFIVARFS_MAGIC                              = 0xde5e81e4\n\tEFS_SUPER_MAGIC                             = 0x414a53\n\tEM_386                                      = 0x3\n\tEM_486                                      = 0x6\n\tEM_68K                                      = 0x4\n\tEM_860                                      = 0x7\n\tEM_88K                                      = 0x5\n\tEM_AARCH64                                  = 0xb7\n\tEM_ALPHA                                    = 0x9026\n\tEM_ALTERA_NIOS2                             = 0x71\n\tEM_ARCOMPACT                                = 0x5d\n\tEM_ARCV2                                    = 0xc3\n\tEM_ARM                                      = 0x28\n\tEM_BLACKFIN                                 = 0x6a\n\tEM_BPF                                      = 0xf7\n\tEM_CRIS                                     = 0x4c\n\tEM_CSKY                                     = 0xfc\n\tEM_CYGNUS_M32R                              = 0x9041\n\tEM_CYGNUS_MN10300                           = 0xbeef\n\tEM_FRV                                      = 0x5441\n\tEM_H8_300                                   = 0x2e\n\tEM_HEXAGON                                  = 0xa4\n\tEM_IA_64                                    = 0x32\n\tEM_LOONGARCH                                = 0x102\n\tEM_M32                                      = 0x1\n\tEM_M32R                                     = 0x58\n\tEM_MICROBLAZE                               = 0xbd\n\tEM_MIPS                                     = 0x8\n\tEM_MIPS_RS3_LE                              = 0xa\n\tEM_MIPS_RS4_BE                              = 0xa\n\tEM_MN10300                                  = 0x59\n\tEM_NDS32                                    = 0xa7\n\tEM_NONE                                     = 0x0\n\tEM_OPENRISC                                 = 0x5c\n\tEM_PARISC                                   = 0xf\n\tEM_PPC                                      = 0x14\n\tEM_PPC64                                    = 0x15\n\tEM_RISCV                                    = 0xf3\n\tEM_S390                                     = 0x16\n\tEM_S390_OLD                                 = 0xa390\n\tEM_SH                                       = 0x2a\n\tEM_SPARC                                    = 0x2\n\tEM_SPARC32PLUS                              = 0x12\n\tEM_SPARCV9                                  = 0x2b\n\tEM_SPU                                      = 0x17\n\tEM_TILEGX                                   = 0xbf\n\tEM_TILEPRO                                  = 0xbc\n\tEM_TI_C6000                                 = 0x8c\n\tEM_UNICORE                                  = 0x6e\n\tEM_X86_64                                   = 0x3e\n\tEM_XTENSA                                   = 0x5e\n\tENCODING_DEFAULT                            = 0x0\n\tENCODING_FM_MARK                            = 0x3\n\tENCODING_FM_SPACE                           = 0x4\n\tENCODING_MANCHESTER                         = 0x5\n\tENCODING_NRZ                                = 0x1\n\tENCODING_NRZI                               = 0x2\n\tEPOLLERR                                    = 0x8\n\tEPOLLET                                     = 0x80000000\n\tEPOLLEXCLUSIVE                              = 0x10000000\n\tEPOLLHUP                                    = 0x10\n\tEPOLLIN                                     = 0x1\n\tEPOLLMSG                                    = 0x400\n\tEPOLLONESHOT                                = 0x40000000\n\tEPOLLOUT                                    = 0x4\n\tEPOLLPRI                                    = 0x2\n\tEPOLLRDBAND                                 = 0x80\n\tEPOLLRDHUP                                  = 0x2000\n\tEPOLLRDNORM                                 = 0x40\n\tEPOLLWAKEUP                                 = 0x20000000\n\tEPOLLWRBAND                                 = 0x200\n\tEPOLLWRNORM                                 = 0x100\n\tEPOLL_CTL_ADD                               = 0x1\n\tEPOLL_CTL_DEL                               = 0x2\n\tEPOLL_CTL_MOD                               = 0x3\n\tEPOLL_IOC_TYPE                              = 0x8a\n\tEROFS_SUPER_MAGIC_V1                        = 0xe0f5e1e2\n\tESP_V4_FLOW                                 = 0xa\n\tESP_V6_FLOW                                 = 0xc\n\tETHER_FLOW                                  = 0x12\n\tETHTOOL_BUSINFO_LEN                         = 0x20\n\tETHTOOL_EROMVERS_LEN                        = 0x20\n\tETHTOOL_FEC_AUTO                            = 0x2\n\tETHTOOL_FEC_BASER                           = 0x10\n\tETHTOOL_FEC_LLRS                            = 0x20\n\tETHTOOL_FEC_NONE                            = 0x1\n\tETHTOOL_FEC_OFF                             = 0x4\n\tETHTOOL_FEC_RS                              = 0x8\n\tETHTOOL_FLAG_ALL                            = 0x7\n\tETHTOOL_FLASHDEV                            = 0x33\n\tETHTOOL_FLASH_MAX_FILENAME                  = 0x80\n\tETHTOOL_FWVERS_LEN                          = 0x20\n\tETHTOOL_F_COMPAT                            = 0x4\n\tETHTOOL_F_UNSUPPORTED                       = 0x1\n\tETHTOOL_F_WISH                              = 0x2\n\tETHTOOL_GCHANNELS                           = 0x3c\n\tETHTOOL_GCOALESCE                           = 0xe\n\tETHTOOL_GDRVINFO                            = 0x3\n\tETHTOOL_GEEE                                = 0x44\n\tETHTOOL_GEEPROM                             = 0xb\n\tETHTOOL_GENL_NAME                           = \"ethtool\"\n\tETHTOOL_GENL_VERSION                        = 0x1\n\tETHTOOL_GET_DUMP_DATA                       = 0x40\n\tETHTOOL_GET_DUMP_FLAG                       = 0x3f\n\tETHTOOL_GET_TS_INFO                         = 0x41\n\tETHTOOL_GFEATURES                           = 0x3a\n\tETHTOOL_GFECPARAM                           = 0x50\n\tETHTOOL_GFLAGS                              = 0x25\n\tETHTOOL_GGRO                                = 0x2b\n\tETHTOOL_GGSO                                = 0x23\n\tETHTOOL_GLINK                               = 0xa\n\tETHTOOL_GLINKSETTINGS                       = 0x4c\n\tETHTOOL_GMODULEEEPROM                       = 0x43\n\tETHTOOL_GMODULEINFO                         = 0x42\n\tETHTOOL_GMSGLVL                             = 0x7\n\tETHTOOL_GPAUSEPARAM                         = 0x12\n\tETHTOOL_GPERMADDR                           = 0x20\n\tETHTOOL_GPFLAGS                             = 0x27\n\tETHTOOL_GPHYSTATS                           = 0x4a\n\tETHTOOL_GREGS                               = 0x4\n\tETHTOOL_GRINGPARAM                          = 0x10\n\tETHTOOL_GRSSH                               = 0x46\n\tETHTOOL_GRXCLSRLALL                         = 0x30\n\tETHTOOL_GRXCLSRLCNT                         = 0x2e\n\tETHTOOL_GRXCLSRULE                          = 0x2f\n\tETHTOOL_GRXCSUM                             = 0x14\n\tETHTOOL_GRXFH                               = 0x29\n\tETHTOOL_GRXFHINDIR                          = 0x38\n\tETHTOOL_GRXNTUPLE                           = 0x36\n\tETHTOOL_GRXRINGS                            = 0x2d\n\tETHTOOL_GSET                                = 0x1\n\tETHTOOL_GSG                                 = 0x18\n\tETHTOOL_GSSET_INFO                          = 0x37\n\tETHTOOL_GSTATS                              = 0x1d\n\tETHTOOL_GSTRINGS                            = 0x1b\n\tETHTOOL_GTSO                                = 0x1e\n\tETHTOOL_GTUNABLE                            = 0x48\n\tETHTOOL_GTXCSUM                             = 0x16\n\tETHTOOL_GUFO                                = 0x21\n\tETHTOOL_GWOL                                = 0x5\n\tETHTOOL_MCGRP_MONITOR_NAME                  = \"monitor\"\n\tETHTOOL_NWAY_RST                            = 0x9\n\tETHTOOL_PERQUEUE                            = 0x4b\n\tETHTOOL_PHYS_ID                             = 0x1c\n\tETHTOOL_PHY_EDPD_DFLT_TX_MSECS              = 0xffff\n\tETHTOOL_PHY_EDPD_DISABLE                    = 0x0\n\tETHTOOL_PHY_EDPD_NO_TX                      = 0xfffe\n\tETHTOOL_PHY_FAST_LINK_DOWN_OFF              = 0xff\n\tETHTOOL_PHY_FAST_LINK_DOWN_ON               = 0x0\n\tETHTOOL_PHY_GTUNABLE                        = 0x4e\n\tETHTOOL_PHY_STUNABLE                        = 0x4f\n\tETHTOOL_RESET                               = 0x34\n\tETHTOOL_RXNTUPLE_ACTION_CLEAR               = -0x2\n\tETHTOOL_RXNTUPLE_ACTION_DROP                = -0x1\n\tETHTOOL_RX_FLOW_SPEC_RING                   = 0xffffffff\n\tETHTOOL_RX_FLOW_SPEC_RING_VF                = 0xff00000000\n\tETHTOOL_RX_FLOW_SPEC_RING_VF_OFF            = 0x20\n\tETHTOOL_SCHANNELS                           = 0x3d\n\tETHTOOL_SCOALESCE                           = 0xf\n\tETHTOOL_SEEE                                = 0x45\n\tETHTOOL_SEEPROM                             = 0xc\n\tETHTOOL_SET_DUMP                            = 0x3e\n\tETHTOOL_SFEATURES                           = 0x3b\n\tETHTOOL_SFECPARAM                           = 0x51\n\tETHTOOL_SFLAGS                              = 0x26\n\tETHTOOL_SGRO                                = 0x2c\n\tETHTOOL_SGSO                                = 0x24\n\tETHTOOL_SLINKSETTINGS                       = 0x4d\n\tETHTOOL_SMSGLVL                             = 0x8\n\tETHTOOL_SPAUSEPARAM                         = 0x13\n\tETHTOOL_SPFLAGS                             = 0x28\n\tETHTOOL_SRINGPARAM                          = 0x11\n\tETHTOOL_SRSSH                               = 0x47\n\tETHTOOL_SRXCLSRLDEL                         = 0x31\n\tETHTOOL_SRXCLSRLINS                         = 0x32\n\tETHTOOL_SRXCSUM                             = 0x15\n\tETHTOOL_SRXFH                               = 0x2a\n\tETHTOOL_SRXFHINDIR                          = 0x39\n\tETHTOOL_SRXNTUPLE                           = 0x35\n\tETHTOOL_SSET                                = 0x2\n\tETHTOOL_SSG                                 = 0x19\n\tETHTOOL_STSO                                = 0x1f\n\tETHTOOL_STUNABLE                            = 0x49\n\tETHTOOL_STXCSUM                             = 0x17\n\tETHTOOL_SUFO                                = 0x22\n\tETHTOOL_SWOL                                = 0x6\n\tETHTOOL_TEST                                = 0x1a\n\tETH_P_1588                                  = 0x88f7\n\tETH_P_8021AD                                = 0x88a8\n\tETH_P_8021AH                                = 0x88e7\n\tETH_P_8021Q                                 = 0x8100\n\tETH_P_80221                                 = 0x8917\n\tETH_P_802_2                                 = 0x4\n\tETH_P_802_3                                 = 0x1\n\tETH_P_802_3_MIN                             = 0x600\n\tETH_P_802_EX1                               = 0x88b5\n\tETH_P_AARP                                  = 0x80f3\n\tETH_P_AF_IUCV                               = 0xfbfb\n\tETH_P_ALL                                   = 0x3\n\tETH_P_AOE                                   = 0x88a2\n\tETH_P_ARCNET                                = 0x1a\n\tETH_P_ARP                                   = 0x806\n\tETH_P_ATALK                                 = 0x809b\n\tETH_P_ATMFATE                               = 0x8884\n\tETH_P_ATMMPOA                               = 0x884c\n\tETH_P_AX25                                  = 0x2\n\tETH_P_BATMAN                                = 0x4305\n\tETH_P_BPQ                                   = 0x8ff\n\tETH_P_CAIF                                  = 0xf7\n\tETH_P_CAN                                   = 0xc\n\tETH_P_CANFD                                 = 0xd\n\tETH_P_CANXL                                 = 0xe\n\tETH_P_CFM                                   = 0x8902\n\tETH_P_CONTROL                               = 0x16\n\tETH_P_CUST                                  = 0x6006\n\tETH_P_DDCMP                                 = 0x6\n\tETH_P_DEC                                   = 0x6000\n\tETH_P_DIAG                                  = 0x6005\n\tETH_P_DNA_DL                                = 0x6001\n\tETH_P_DNA_RC                                = 0x6002\n\tETH_P_DNA_RT                                = 0x6003\n\tETH_P_DSA                                   = 0x1b\n\tETH_P_DSA_8021Q                             = 0xdadb\n\tETH_P_DSA_A5PSW                             = 0xe001\n\tETH_P_ECONET                                = 0x18\n\tETH_P_EDSA                                  = 0xdada\n\tETH_P_ERSPAN                                = 0x88be\n\tETH_P_ERSPAN2                               = 0x22eb\n\tETH_P_ETHERCAT                              = 0x88a4\n\tETH_P_FCOE                                  = 0x8906\n\tETH_P_FIP                                   = 0x8914\n\tETH_P_HDLC                                  = 0x19\n\tETH_P_HSR                                   = 0x892f\n\tETH_P_IBOE                                  = 0x8915\n\tETH_P_IEEE802154                            = 0xf6\n\tETH_P_IEEEPUP                               = 0xa00\n\tETH_P_IEEEPUPAT                             = 0xa01\n\tETH_P_IFE                                   = 0xed3e\n\tETH_P_IP                                    = 0x800\n\tETH_P_IPV6                                  = 0x86dd\n\tETH_P_IPX                                   = 0x8137\n\tETH_P_IRDA                                  = 0x17\n\tETH_P_LAT                                   = 0x6004\n\tETH_P_LINK_CTL                              = 0x886c\n\tETH_P_LLDP                                  = 0x88cc\n\tETH_P_LOCALTALK                             = 0x9\n\tETH_P_LOOP                                  = 0x60\n\tETH_P_LOOPBACK                              = 0x9000\n\tETH_P_MACSEC                                = 0x88e5\n\tETH_P_MAP                                   = 0xf9\n\tETH_P_MCTP                                  = 0xfa\n\tETH_P_MOBITEX                               = 0x15\n\tETH_P_MPLS_MC                               = 0x8848\n\tETH_P_MPLS_UC                               = 0x8847\n\tETH_P_MRP                                   = 0x88e3\n\tETH_P_MVRP                                  = 0x88f5\n\tETH_P_NCSI                                  = 0x88f8\n\tETH_P_NSH                                   = 0x894f\n\tETH_P_PAE                                   = 0x888e\n\tETH_P_PAUSE                                 = 0x8808\n\tETH_P_PHONET                                = 0xf5\n\tETH_P_PPPTALK                               = 0x10\n\tETH_P_PPP_DISC                              = 0x8863\n\tETH_P_PPP_MP                                = 0x8\n\tETH_P_PPP_SES                               = 0x8864\n\tETH_P_PREAUTH                               = 0x88c7\n\tETH_P_PROFINET                              = 0x8892\n\tETH_P_PRP                                   = 0x88fb\n\tETH_P_PUP                                   = 0x200\n\tETH_P_PUPAT                                 = 0x201\n\tETH_P_QINQ1                                 = 0x9100\n\tETH_P_QINQ2                                 = 0x9200\n\tETH_P_QINQ3                                 = 0x9300\n\tETH_P_RARP                                  = 0x8035\n\tETH_P_REALTEK                               = 0x8899\n\tETH_P_SCA                                   = 0x6007\n\tETH_P_SLOW                                  = 0x8809\n\tETH_P_SNAP                                  = 0x5\n\tETH_P_TDLS                                  = 0x890d\n\tETH_P_TEB                                   = 0x6558\n\tETH_P_TIPC                                  = 0x88ca\n\tETH_P_TRAILER                               = 0x1c\n\tETH_P_TR_802_2                              = 0x11\n\tETH_P_TSN                                   = 0x22f0\n\tETH_P_WAN_PPP                               = 0x7\n\tETH_P_WCCP                                  = 0x883e\n\tETH_P_X25                                   = 0x805\n\tETH_P_XDSA                                  = 0xf8\n\tEV_ABS                                      = 0x3\n\tEV_CNT                                      = 0x20\n\tEV_FF                                       = 0x15\n\tEV_FF_STATUS                                = 0x17\n\tEV_KEY                                      = 0x1\n\tEV_LED                                      = 0x11\n\tEV_MAX                                      = 0x1f\n\tEV_MSC                                      = 0x4\n\tEV_PWR                                      = 0x16\n\tEV_REL                                      = 0x2\n\tEV_REP                                      = 0x14\n\tEV_SND                                      = 0x12\n\tEV_SW                                       = 0x5\n\tEV_SYN                                      = 0x0\n\tEV_VERSION                                  = 0x10001\n\tEXABYTE_ENABLE_NEST                         = 0xf0\n\tEXFAT_SUPER_MAGIC                           = 0x2011bab0\n\tEXT2_SUPER_MAGIC                            = 0xef53\n\tEXT3_SUPER_MAGIC                            = 0xef53\n\tEXT4_SUPER_MAGIC                            = 0xef53\n\tEXTA                                        = 0xe\n\tEXTB                                        = 0xf\n\tF2FS_SUPER_MAGIC                            = 0xf2f52010\n\tFALLOC_FL_ALLOCATE_RANGE                    = 0x0\n\tFALLOC_FL_COLLAPSE_RANGE                    = 0x8\n\tFALLOC_FL_INSERT_RANGE                      = 0x20\n\tFALLOC_FL_KEEP_SIZE                         = 0x1\n\tFALLOC_FL_NO_HIDE_STALE                     = 0x4\n\tFALLOC_FL_PUNCH_HOLE                        = 0x2\n\tFALLOC_FL_UNSHARE_RANGE                     = 0x40\n\tFALLOC_FL_ZERO_RANGE                        = 0x10\n\tFANOTIFY_METADATA_VERSION                   = 0x3\n\tFAN_ACCESS                                  = 0x1\n\tFAN_ACCESS_PERM                             = 0x20000\n\tFAN_ALLOW                                   = 0x1\n\tFAN_ALL_CLASS_BITS                          = 0xc\n\tFAN_ALL_EVENTS                              = 0x3b\n\tFAN_ALL_INIT_FLAGS                          = 0x3f\n\tFAN_ALL_MARK_FLAGS                          = 0xff\n\tFAN_ALL_OUTGOING_EVENTS                     = 0x3403b\n\tFAN_ALL_PERM_EVENTS                         = 0x30000\n\tFAN_ATTRIB                                  = 0x4\n\tFAN_AUDIT                                   = 0x10\n\tFAN_CLASS_CONTENT                           = 0x4\n\tFAN_CLASS_NOTIF                             = 0x0\n\tFAN_CLASS_PRE_CONTENT                       = 0x8\n\tFAN_CLOEXEC                                 = 0x1\n\tFAN_CLOSE                                   = 0x18\n\tFAN_CLOSE_NOWRITE                           = 0x10\n\tFAN_CLOSE_WRITE                             = 0x8\n\tFAN_CREATE                                  = 0x100\n\tFAN_DELETE                                  = 0x200\n\tFAN_DELETE_SELF                             = 0x400\n\tFAN_DENY                                    = 0x2\n\tFAN_ENABLE_AUDIT                            = 0x40\n\tFAN_EPIDFD                                  = -0x2\n\tFAN_EVENT_INFO_TYPE_DFID                    = 0x3\n\tFAN_EVENT_INFO_TYPE_DFID_NAME               = 0x2\n\tFAN_EVENT_INFO_TYPE_ERROR                   = 0x5\n\tFAN_EVENT_INFO_TYPE_FID                     = 0x1\n\tFAN_EVENT_INFO_TYPE_NEW_DFID_NAME           = 0xc\n\tFAN_EVENT_INFO_TYPE_OLD_DFID_NAME           = 0xa\n\tFAN_EVENT_INFO_TYPE_PIDFD                   = 0x4\n\tFAN_EVENT_METADATA_LEN                      = 0x18\n\tFAN_EVENT_ON_CHILD                          = 0x8000000\n\tFAN_FS_ERROR                                = 0x8000\n\tFAN_INFO                                    = 0x20\n\tFAN_MARK_ADD                                = 0x1\n\tFAN_MARK_DONT_FOLLOW                        = 0x4\n\tFAN_MARK_EVICTABLE                          = 0x200\n\tFAN_MARK_FILESYSTEM                         = 0x100\n\tFAN_MARK_FLUSH                              = 0x80\n\tFAN_MARK_IGNORE                             = 0x400\n\tFAN_MARK_IGNORED_MASK                       = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY                = 0x40\n\tFAN_MARK_IGNORE_SURV                        = 0x440\n\tFAN_MARK_INODE                              = 0x0\n\tFAN_MARK_MOUNT                              = 0x10\n\tFAN_MARK_ONLYDIR                            = 0x8\n\tFAN_MARK_REMOVE                             = 0x2\n\tFAN_MODIFY                                  = 0x2\n\tFAN_MOVE                                    = 0xc0\n\tFAN_MOVED_FROM                              = 0x40\n\tFAN_MOVED_TO                                = 0x80\n\tFAN_MOVE_SELF                               = 0x800\n\tFAN_NOFD                                    = -0x1\n\tFAN_NONBLOCK                                = 0x2\n\tFAN_NOPIDFD                                 = -0x1\n\tFAN_ONDIR                                   = 0x40000000\n\tFAN_OPEN                                    = 0x20\n\tFAN_OPEN_EXEC                               = 0x1000\n\tFAN_OPEN_EXEC_PERM                          = 0x40000\n\tFAN_OPEN_PERM                               = 0x10000\n\tFAN_Q_OVERFLOW                              = 0x4000\n\tFAN_RENAME                                  = 0x10000000\n\tFAN_REPORT_DFID_NAME                        = 0xc00\n\tFAN_REPORT_DFID_NAME_TARGET                 = 0x1e00\n\tFAN_REPORT_DIR_FID                          = 0x400\n\tFAN_REPORT_FD_ERROR                         = 0x2000\n\tFAN_REPORT_FID                              = 0x200\n\tFAN_REPORT_NAME                             = 0x800\n\tFAN_REPORT_PIDFD                            = 0x80\n\tFAN_REPORT_TARGET_FID                       = 0x1000\n\tFAN_REPORT_TID                              = 0x100\n\tFAN_RESPONSE_INFO_AUDIT_RULE                = 0x1\n\tFAN_RESPONSE_INFO_NONE                      = 0x0\n\tFAN_UNLIMITED_MARKS                         = 0x20\n\tFAN_UNLIMITED_QUEUE                         = 0x10\n\tFD_CLOEXEC                                  = 0x1\n\tFD_SETSIZE                                  = 0x400\n\tFF0                                         = 0x0\n\tFIB_RULE_DEV_DETACHED                       = 0x8\n\tFIB_RULE_FIND_SADDR                         = 0x10000\n\tFIB_RULE_IIF_DETACHED                       = 0x8\n\tFIB_RULE_INVERT                             = 0x2\n\tFIB_RULE_OIF_DETACHED                       = 0x10\n\tFIB_RULE_PERMANENT                          = 0x1\n\tFIB_RULE_UNRESOLVED                         = 0x4\n\tFIDEDUPERANGE                               = 0xc0189436\n\tFSCRYPT_KEY_DESCRIPTOR_SIZE                 = 0x8\n\tFSCRYPT_KEY_DESC_PREFIX                     = \"fscrypt:\"\n\tFSCRYPT_KEY_DESC_PREFIX_SIZE                = 0x8\n\tFSCRYPT_KEY_IDENTIFIER_SIZE                 = 0x10\n\tFSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY  = 0x1\n\tFSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS = 0x2\n\tFSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR            = 0x1\n\tFSCRYPT_KEY_SPEC_TYPE_IDENTIFIER            = 0x2\n\tFSCRYPT_KEY_STATUS_ABSENT                   = 0x1\n\tFSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF       = 0x1\n\tFSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED     = 0x3\n\tFSCRYPT_KEY_STATUS_PRESENT                  = 0x2\n\tFSCRYPT_MAX_KEY_SIZE                        = 0x40\n\tFSCRYPT_MODE_ADIANTUM                       = 0x9\n\tFSCRYPT_MODE_AES_128_CBC                    = 0x5\n\tFSCRYPT_MODE_AES_128_CTS                    = 0x6\n\tFSCRYPT_MODE_AES_256_CTS                    = 0x4\n\tFSCRYPT_MODE_AES_256_HCTR2                  = 0xa\n\tFSCRYPT_MODE_AES_256_XTS                    = 0x1\n\tFSCRYPT_MODE_SM4_CTS                        = 0x8\n\tFSCRYPT_MODE_SM4_XTS                        = 0x7\n\tFSCRYPT_POLICY_FLAGS_PAD_16                 = 0x2\n\tFSCRYPT_POLICY_FLAGS_PAD_32                 = 0x3\n\tFSCRYPT_POLICY_FLAGS_PAD_4                  = 0x0\n\tFSCRYPT_POLICY_FLAGS_PAD_8                  = 0x1\n\tFSCRYPT_POLICY_FLAGS_PAD_MASK               = 0x3\n\tFSCRYPT_POLICY_FLAG_DIRECT_KEY              = 0x4\n\tFSCRYPT_POLICY_FLAG_IV_INO_LBLK_32          = 0x10\n\tFSCRYPT_POLICY_FLAG_IV_INO_LBLK_64          = 0x8\n\tFSCRYPT_POLICY_V1                           = 0x0\n\tFSCRYPT_POLICY_V2                           = 0x2\n\tFS_ENCRYPTION_MODE_ADIANTUM                 = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC              = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS              = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC              = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS              = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM              = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS              = 0x1\n\tFS_ENCRYPTION_MODE_INVALID                  = 0x0\n\tFS_IOC_ADD_ENCRYPTION_KEY                   = 0xc0506617\n\tFS_IOC_GET_ENCRYPTION_KEY_STATUS            = 0xc080661a\n\tFS_IOC_GET_ENCRYPTION_POLICY_EX             = 0xc0096616\n\tFS_IOC_MEASURE_VERITY                       = 0xc0046686\n\tFS_IOC_READ_VERITY_METADATA                 = 0xc0286687\n\tFS_IOC_REMOVE_ENCRYPTION_KEY                = 0xc0406618\n\tFS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS      = 0xc0406619\n\tFS_KEY_DESCRIPTOR_SIZE                      = 0x8\n\tFS_KEY_DESC_PREFIX                          = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE                     = 0x8\n\tFS_MAX_KEY_SIZE                             = 0x40\n\tFS_POLICY_FLAGS_PAD_16                      = 0x2\n\tFS_POLICY_FLAGS_PAD_32                      = 0x3\n\tFS_POLICY_FLAGS_PAD_4                       = 0x0\n\tFS_POLICY_FLAGS_PAD_8                       = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK                    = 0x3\n\tFS_POLICY_FLAGS_VALID                       = 0x7\n\tFS_VERITY_FL                                = 0x100000\n\tFS_VERITY_HASH_ALG_SHA256                   = 0x1\n\tFS_VERITY_HASH_ALG_SHA512                   = 0x2\n\tFS_VERITY_METADATA_TYPE_DESCRIPTOR          = 0x2\n\tFS_VERITY_METADATA_TYPE_MERKLE_TREE         = 0x1\n\tFS_VERITY_METADATA_TYPE_SIGNATURE           = 0x3\n\tFUSE_SUPER_MAGIC                            = 0x65735546\n\tFUTEXFS_SUPER_MAGIC                         = 0xbad1dea\n\tF_ADD_SEALS                                 = 0x409\n\tF_CREATED_QUERY                             = 0x404\n\tF_DUPFD                                     = 0x0\n\tF_DUPFD_CLOEXEC                             = 0x406\n\tF_DUPFD_QUERY                               = 0x403\n\tF_EXLCK                                     = 0x4\n\tF_GETFD                                     = 0x1\n\tF_GETFL                                     = 0x3\n\tF_GETLEASE                                  = 0x401\n\tF_GETOWN_EX                                 = 0x10\n\tF_GETPIPE_SZ                                = 0x408\n\tF_GETSIG                                    = 0xb\n\tF_GET_FILE_RW_HINT                          = 0x40d\n\tF_GET_RW_HINT                               = 0x40b\n\tF_GET_SEALS                                 = 0x40a\n\tF_LOCK                                      = 0x1\n\tF_NOTIFY                                    = 0x402\n\tF_OFD_GETLK                                 = 0x24\n\tF_OFD_SETLK                                 = 0x25\n\tF_OFD_SETLKW                                = 0x26\n\tF_OK                                        = 0x0\n\tF_SEAL_EXEC                                 = 0x20\n\tF_SEAL_FUTURE_WRITE                         = 0x10\n\tF_SEAL_GROW                                 = 0x4\n\tF_SEAL_SEAL                                 = 0x1\n\tF_SEAL_SHRINK                               = 0x2\n\tF_SEAL_WRITE                                = 0x8\n\tF_SETFD                                     = 0x2\n\tF_SETFL                                     = 0x4\n\tF_SETLEASE                                  = 0x400\n\tF_SETOWN_EX                                 = 0xf\n\tF_SETPIPE_SZ                                = 0x407\n\tF_SETSIG                                    = 0xa\n\tF_SET_FILE_RW_HINT                          = 0x40e\n\tF_SET_RW_HINT                               = 0x40c\n\tF_SHLCK                                     = 0x8\n\tF_TEST                                      = 0x3\n\tF_TLOCK                                     = 0x2\n\tF_ULOCK                                     = 0x0\n\tGENL_ADMIN_PERM                             = 0x1\n\tGENL_CMD_CAP_DO                             = 0x2\n\tGENL_CMD_CAP_DUMP                           = 0x4\n\tGENL_CMD_CAP_HASPOL                         = 0x8\n\tGENL_HDRLEN                                 = 0x4\n\tGENL_ID_CTRL                                = 0x10\n\tGENL_ID_PMCRAID                             = 0x12\n\tGENL_ID_VFS_DQUOT                           = 0x11\n\tGENL_MAX_ID                                 = 0x3ff\n\tGENL_MIN_ID                                 = 0x10\n\tGENL_NAMSIZ                                 = 0x10\n\tGENL_START_ALLOC                            = 0x13\n\tGENL_UNS_ADMIN_PERM                         = 0x10\n\tGRND_INSECURE                               = 0x4\n\tGRND_NONBLOCK                               = 0x1\n\tGRND_RANDOM                                 = 0x2\n\tHDIO_DRIVE_CMD                              = 0x31f\n\tHDIO_DRIVE_CMD_AEB                          = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE                     = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE                     = 0x8\n\tHDIO_DRIVE_RESET                            = 0x31c\n\tHDIO_DRIVE_TASK                             = 0x31e\n\tHDIO_DRIVE_TASKFILE                         = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE                    = 0x8\n\tHDIO_GETGEO                                 = 0x301\n\tHDIO_GET_32BIT                              = 0x309\n\tHDIO_GET_ACOUSTIC                           = 0x30f\n\tHDIO_GET_ADDRESS                            = 0x310\n\tHDIO_GET_BUSSTATE                           = 0x31a\n\tHDIO_GET_DMA                                = 0x30b\n\tHDIO_GET_IDENTITY                           = 0x30d\n\tHDIO_GET_KEEPSETTINGS                       = 0x308\n\tHDIO_GET_MULTCOUNT                          = 0x304\n\tHDIO_GET_NICE                               = 0x30c\n\tHDIO_GET_NOWERR                             = 0x30a\n\tHDIO_GET_QDMA                               = 0x305\n\tHDIO_GET_UNMASKINTR                         = 0x302\n\tHDIO_GET_WCACHE                             = 0x30e\n\tHDIO_OBSOLETE_IDENTITY                      = 0x307\n\tHDIO_SCAN_HWIF                              = 0x328\n\tHDIO_SET_32BIT                              = 0x324\n\tHDIO_SET_ACOUSTIC                           = 0x32c\n\tHDIO_SET_ADDRESS                            = 0x32f\n\tHDIO_SET_BUSSTATE                           = 0x32d\n\tHDIO_SET_DMA                                = 0x326\n\tHDIO_SET_KEEPSETTINGS                       = 0x323\n\tHDIO_SET_MULTCOUNT                          = 0x321\n\tHDIO_SET_NICE                               = 0x329\n\tHDIO_SET_NOWERR                             = 0x325\n\tHDIO_SET_PIO_MODE                           = 0x327\n\tHDIO_SET_QDMA                               = 0x32e\n\tHDIO_SET_UNMASKINTR                         = 0x322\n\tHDIO_SET_WCACHE                             = 0x32b\n\tHDIO_SET_XFER                               = 0x306\n\tHDIO_TRISTATE_HWIF                          = 0x31b\n\tHDIO_UNREGISTER_HWIF                        = 0x32a\n\tHID_MAX_DESCRIPTOR_SIZE                     = 0x1000\n\tHOSTFS_SUPER_MAGIC                          = 0xc0ffee\n\tHPFS_SUPER_MAGIC                            = 0xf995e849\n\tHUGETLBFS_MAGIC                             = 0x958458f6\n\tIBSHIFT                                     = 0x10\n\tICRNL                                       = 0x100\n\tIFA_F_DADFAILED                             = 0x8\n\tIFA_F_DEPRECATED                            = 0x20\n\tIFA_F_HOMEADDRESS                           = 0x10\n\tIFA_F_MANAGETEMPADDR                        = 0x100\n\tIFA_F_MCAUTOJOIN                            = 0x400\n\tIFA_F_NODAD                                 = 0x2\n\tIFA_F_NOPREFIXROUTE                         = 0x200\n\tIFA_F_OPTIMISTIC                            = 0x4\n\tIFA_F_PERMANENT                             = 0x80\n\tIFA_F_SECONDARY                             = 0x1\n\tIFA_F_STABLE_PRIVACY                        = 0x800\n\tIFA_F_TEMPORARY                             = 0x1\n\tIFA_F_TENTATIVE                             = 0x40\n\tIFA_MAX                                     = 0xb\n\tIFF_ALLMULTI                                = 0x200\n\tIFF_ATTACH_QUEUE                            = 0x200\n\tIFF_AUTOMEDIA                               = 0x4000\n\tIFF_BROADCAST                               = 0x2\n\tIFF_DEBUG                                   = 0x4\n\tIFF_DETACH_QUEUE                            = 0x400\n\tIFF_DORMANT                                 = 0x20000\n\tIFF_DYNAMIC                                 = 0x8000\n\tIFF_ECHO                                    = 0x40000\n\tIFF_LOOPBACK                                = 0x8\n\tIFF_LOWER_UP                                = 0x10000\n\tIFF_MASTER                                  = 0x400\n\tIFF_MULTICAST                               = 0x1000\n\tIFF_MULTI_QUEUE                             = 0x100\n\tIFF_NAPI                                    = 0x10\n\tIFF_NAPI_FRAGS                              = 0x20\n\tIFF_NOARP                                   = 0x80\n\tIFF_NOFILTER                                = 0x1000\n\tIFF_NOTRAILERS                              = 0x20\n\tIFF_NO_CARRIER                              = 0x40\n\tIFF_NO_PI                                   = 0x1000\n\tIFF_ONE_QUEUE                               = 0x2000\n\tIFF_PERSIST                                 = 0x800\n\tIFF_POINTOPOINT                             = 0x10\n\tIFF_PORTSEL                                 = 0x2000\n\tIFF_PROMISC                                 = 0x100\n\tIFF_RUNNING                                 = 0x40\n\tIFF_SLAVE                                   = 0x800\n\tIFF_TAP                                     = 0x2\n\tIFF_TUN                                     = 0x1\n\tIFF_TUN_EXCL                                = 0x8000\n\tIFF_UP                                      = 0x1\n\tIFF_VNET_HDR                                = 0x4000\n\tIFF_VOLATILE                                = 0x70c5a\n\tIFNAMSIZ                                    = 0x10\n\tIGNBRK                                      = 0x1\n\tIGNCR                                       = 0x80\n\tIGNPAR                                      = 0x4\n\tIMAXBEL                                     = 0x2000\n\tINLCR                                       = 0x40\n\tINPCK                                       = 0x10\n\tIN_ACCESS                                   = 0x1\n\tIN_ALL_EVENTS                               = 0xfff\n\tIN_ATTRIB                                   = 0x4\n\tIN_CLASSA_HOST                              = 0xffffff\n\tIN_CLASSA_MAX                               = 0x80\n\tIN_CLASSA_NET                               = 0xff000000\n\tIN_CLASSA_NSHIFT                            = 0x18\n\tIN_CLASSB_HOST                              = 0xffff\n\tIN_CLASSB_MAX                               = 0x10000\n\tIN_CLASSB_NET                               = 0xffff0000\n\tIN_CLASSB_NSHIFT                            = 0x10\n\tIN_CLASSC_HOST                              = 0xff\n\tIN_CLASSC_NET                               = 0xffffff00\n\tIN_CLASSC_NSHIFT                            = 0x8\n\tIN_CLOSE                                    = 0x18\n\tIN_CLOSE_NOWRITE                            = 0x10\n\tIN_CLOSE_WRITE                              = 0x8\n\tIN_CREATE                                   = 0x100\n\tIN_DELETE                                   = 0x200\n\tIN_DELETE_SELF                              = 0x400\n\tIN_DONT_FOLLOW                              = 0x2000000\n\tIN_EXCL_UNLINK                              = 0x4000000\n\tIN_IGNORED                                  = 0x8000\n\tIN_ISDIR                                    = 0x40000000\n\tIN_LOOPBACKNET                              = 0x7f\n\tIN_MASK_ADD                                 = 0x20000000\n\tIN_MASK_CREATE                              = 0x10000000\n\tIN_MODIFY                                   = 0x2\n\tIN_MOVE                                     = 0xc0\n\tIN_MOVED_FROM                               = 0x40\n\tIN_MOVED_TO                                 = 0x80\n\tIN_MOVE_SELF                                = 0x800\n\tIN_ONESHOT                                  = 0x80000000\n\tIN_ONLYDIR                                  = 0x1000000\n\tIN_OPEN                                     = 0x20\n\tIN_Q_OVERFLOW                               = 0x4000\n\tIN_UNMOUNT                                  = 0x2000\n\tIPPROTO_AH                                  = 0x33\n\tIPPROTO_BEETPH                              = 0x5e\n\tIPPROTO_COMP                                = 0x6c\n\tIPPROTO_DCCP                                = 0x21\n\tIPPROTO_DSTOPTS                             = 0x3c\n\tIPPROTO_EGP                                 = 0x8\n\tIPPROTO_ENCAP                               = 0x62\n\tIPPROTO_ESP                                 = 0x32\n\tIPPROTO_ETHERNET                            = 0x8f\n\tIPPROTO_FRAGMENT                            = 0x2c\n\tIPPROTO_GRE                                 = 0x2f\n\tIPPROTO_HOPOPTS                             = 0x0\n\tIPPROTO_ICMP                                = 0x1\n\tIPPROTO_ICMPV6                              = 0x3a\n\tIPPROTO_IDP                                 = 0x16\n\tIPPROTO_IGMP                                = 0x2\n\tIPPROTO_IP                                  = 0x0\n\tIPPROTO_IPIP                                = 0x4\n\tIPPROTO_IPV6                                = 0x29\n\tIPPROTO_L2TP                                = 0x73\n\tIPPROTO_MH                                  = 0x87\n\tIPPROTO_MPLS                                = 0x89\n\tIPPROTO_MPTCP                               = 0x106\n\tIPPROTO_MTP                                 = 0x5c\n\tIPPROTO_NONE                                = 0x3b\n\tIPPROTO_PIM                                 = 0x67\n\tIPPROTO_PUP                                 = 0xc\n\tIPPROTO_RAW                                 = 0xff\n\tIPPROTO_ROUTING                             = 0x2b\n\tIPPROTO_RSVP                                = 0x2e\n\tIPPROTO_SCTP                                = 0x84\n\tIPPROTO_SMC                                 = 0x100\n\tIPPROTO_TCP                                 = 0x6\n\tIPPROTO_TP                                  = 0x1d\n\tIPPROTO_UDP                                 = 0x11\n\tIPPROTO_UDPLITE                             = 0x88\n\tIPV6_2292DSTOPTS                            = 0x4\n\tIPV6_2292HOPLIMIT                           = 0x8\n\tIPV6_2292HOPOPTS                            = 0x3\n\tIPV6_2292PKTINFO                            = 0x2\n\tIPV6_2292PKTOPTIONS                         = 0x6\n\tIPV6_2292RTHDR                              = 0x5\n\tIPV6_ADDRFORM                               = 0x1\n\tIPV6_ADDR_PREFERENCES                       = 0x48\n\tIPV6_ADD_MEMBERSHIP                         = 0x14\n\tIPV6_AUTHHDR                                = 0xa\n\tIPV6_AUTOFLOWLABEL                          = 0x46\n\tIPV6_CHECKSUM                               = 0x7\n\tIPV6_DONTFRAG                               = 0x3e\n\tIPV6_DROP_MEMBERSHIP                        = 0x15\n\tIPV6_DSTOPTS                                = 0x3b\n\tIPV6_FLOW                                   = 0x11\n\tIPV6_FREEBIND                               = 0x4e\n\tIPV6_HDRINCL                                = 0x24\n\tIPV6_HOPLIMIT                               = 0x34\n\tIPV6_HOPOPTS                                = 0x36\n\tIPV6_IPSEC_POLICY                           = 0x22\n\tIPV6_JOIN_ANYCAST                           = 0x1b\n\tIPV6_JOIN_GROUP                             = 0x14\n\tIPV6_LEAVE_ANYCAST                          = 0x1c\n\tIPV6_LEAVE_GROUP                            = 0x15\n\tIPV6_MINHOPCOUNT                            = 0x49\n\tIPV6_MTU                                    = 0x18\n\tIPV6_MTU_DISCOVER                           = 0x17\n\tIPV6_MULTICAST_ALL                          = 0x1d\n\tIPV6_MULTICAST_HOPS                         = 0x12\n\tIPV6_MULTICAST_IF                           = 0x11\n\tIPV6_MULTICAST_LOOP                         = 0x13\n\tIPV6_NEXTHOP                                = 0x9\n\tIPV6_ORIGDSTADDR                            = 0x4a\n\tIPV6_PATHMTU                                = 0x3d\n\tIPV6_PKTINFO                                = 0x32\n\tIPV6_PMTUDISC_DO                            = 0x2\n\tIPV6_PMTUDISC_DONT                          = 0x0\n\tIPV6_PMTUDISC_INTERFACE                     = 0x4\n\tIPV6_PMTUDISC_OMIT                          = 0x5\n\tIPV6_PMTUDISC_PROBE                         = 0x3\n\tIPV6_PMTUDISC_WANT                          = 0x1\n\tIPV6_RECVDSTOPTS                            = 0x3a\n\tIPV6_RECVERR                                = 0x19\n\tIPV6_RECVERR_RFC4884                        = 0x1f\n\tIPV6_RECVFRAGSIZE                           = 0x4d\n\tIPV6_RECVHOPLIMIT                           = 0x33\n\tIPV6_RECVHOPOPTS                            = 0x35\n\tIPV6_RECVORIGDSTADDR                        = 0x4a\n\tIPV6_RECVPATHMTU                            = 0x3c\n\tIPV6_RECVPKTINFO                            = 0x31\n\tIPV6_RECVRTHDR                              = 0x38\n\tIPV6_RECVTCLASS                             = 0x42\n\tIPV6_ROUTER_ALERT                           = 0x16\n\tIPV6_ROUTER_ALERT_ISOLATE                   = 0x1e\n\tIPV6_RTHDR                                  = 0x39\n\tIPV6_RTHDRDSTOPTS                           = 0x37\n\tIPV6_RTHDR_LOOSE                            = 0x0\n\tIPV6_RTHDR_STRICT                           = 0x1\n\tIPV6_RTHDR_TYPE_0                           = 0x0\n\tIPV6_RXDSTOPTS                              = 0x3b\n\tIPV6_RXHOPOPTS                              = 0x36\n\tIPV6_TCLASS                                 = 0x43\n\tIPV6_TRANSPARENT                            = 0x4b\n\tIPV6_UNICAST_HOPS                           = 0x10\n\tIPV6_UNICAST_IF                             = 0x4c\n\tIPV6_USER_FLOW                              = 0xe\n\tIPV6_V6ONLY                                 = 0x1a\n\tIPV6_VERSION                                = 0x60\n\tIPV6_VERSION_MASK                           = 0xf0\n\tIPV6_XFRM_POLICY                            = 0x23\n\tIP_ADD_MEMBERSHIP                           = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP                    = 0x27\n\tIP_BIND_ADDRESS_NO_PORT                     = 0x18\n\tIP_BLOCK_SOURCE                             = 0x26\n\tIP_CHECKSUM                                 = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP                   = 0x1\n\tIP_DEFAULT_MULTICAST_TTL                    = 0x1\n\tIP_DF                                       = 0x4000\n\tIP_DROP_MEMBERSHIP                          = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP                   = 0x28\n\tIP_FREEBIND                                 = 0xf\n\tIP_HDRINCL                                  = 0x3\n\tIP_IPSEC_POLICY                             = 0x10\n\tIP_LOCAL_PORT_RANGE                         = 0x33\n\tIP_MAXPACKET                                = 0xffff\n\tIP_MAX_MEMBERSHIPS                          = 0x14\n\tIP_MF                                       = 0x2000\n\tIP_MINTTL                                   = 0x15\n\tIP_MSFILTER                                 = 0x29\n\tIP_MSS                                      = 0x240\n\tIP_MTU                                      = 0xe\n\tIP_MTU_DISCOVER                             = 0xa\n\tIP_MULTICAST_ALL                            = 0x31\n\tIP_MULTICAST_IF                             = 0x20\n\tIP_MULTICAST_LOOP                           = 0x22\n\tIP_MULTICAST_TTL                            = 0x21\n\tIP_NODEFRAG                                 = 0x16\n\tIP_OFFMASK                                  = 0x1fff\n\tIP_OPTIONS                                  = 0x4\n\tIP_ORIGDSTADDR                              = 0x14\n\tIP_PASSSEC                                  = 0x12\n\tIP_PKTINFO                                  = 0x8\n\tIP_PKTOPTIONS                               = 0x9\n\tIP_PMTUDISC                                 = 0xa\n\tIP_PMTUDISC_DO                              = 0x2\n\tIP_PMTUDISC_DONT                            = 0x0\n\tIP_PMTUDISC_INTERFACE                       = 0x4\n\tIP_PMTUDISC_OMIT                            = 0x5\n\tIP_PMTUDISC_PROBE                           = 0x3\n\tIP_PMTUDISC_WANT                            = 0x1\n\tIP_PROTOCOL                                 = 0x34\n\tIP_RECVERR                                  = 0xb\n\tIP_RECVERR_RFC4884                          = 0x1a\n\tIP_RECVFRAGSIZE                             = 0x19\n\tIP_RECVOPTS                                 = 0x6\n\tIP_RECVORIGDSTADDR                          = 0x14\n\tIP_RECVRETOPTS                              = 0x7\n\tIP_RECVTOS                                  = 0xd\n\tIP_RECVTTL                                  = 0xc\n\tIP_RETOPTS                                  = 0x7\n\tIP_RF                                       = 0x8000\n\tIP_ROUTER_ALERT                             = 0x5\n\tIP_TOS                                      = 0x1\n\tIP_TRANSPARENT                              = 0x13\n\tIP_TTL                                      = 0x2\n\tIP_UNBLOCK_SOURCE                           = 0x25\n\tIP_UNICAST_IF                               = 0x32\n\tIP_USER_FLOW                                = 0xd\n\tIP_XFRM_POLICY                              = 0x11\n\tISOFS_SUPER_MAGIC                           = 0x9660\n\tISTRIP                                      = 0x20\n\tITIMER_PROF                                 = 0x2\n\tITIMER_REAL                                 = 0x0\n\tITIMER_VIRTUAL                              = 0x1\n\tIUTF8                                       = 0x4000\n\tIXANY                                       = 0x800\n\tJFFS2_SUPER_MAGIC                           = 0x72b6\n\tKCMPROTO_CONNECTED                          = 0x0\n\tKCM_RECV_DISABLE                            = 0x1\n\tKEXEC_ARCH_386                              = 0x30000\n\tKEXEC_ARCH_68K                              = 0x40000\n\tKEXEC_ARCH_AARCH64                          = 0xb70000\n\tKEXEC_ARCH_ARM                              = 0x280000\n\tKEXEC_ARCH_DEFAULT                          = 0x0\n\tKEXEC_ARCH_IA_64                            = 0x320000\n\tKEXEC_ARCH_LOONGARCH                        = 0x1020000\n\tKEXEC_ARCH_MASK                             = 0xffff0000\n\tKEXEC_ARCH_MIPS                             = 0x80000\n\tKEXEC_ARCH_MIPS_LE                          = 0xa0000\n\tKEXEC_ARCH_PARISC                           = 0xf0000\n\tKEXEC_ARCH_PPC                              = 0x140000\n\tKEXEC_ARCH_PPC64                            = 0x150000\n\tKEXEC_ARCH_RISCV                            = 0xf30000\n\tKEXEC_ARCH_S390                             = 0x160000\n\tKEXEC_ARCH_SH                               = 0x2a0000\n\tKEXEC_ARCH_X86_64                           = 0x3e0000\n\tKEXEC_CRASH_HOTPLUG_SUPPORT                 = 0x8\n\tKEXEC_FILE_DEBUG                            = 0x8\n\tKEXEC_FILE_NO_INITRAMFS                     = 0x4\n\tKEXEC_FILE_ON_CRASH                         = 0x2\n\tKEXEC_FILE_UNLOAD                           = 0x1\n\tKEXEC_ON_CRASH                              = 0x1\n\tKEXEC_PRESERVE_CONTEXT                      = 0x2\n\tKEXEC_SEGMENT_MAX                           = 0x10\n\tKEXEC_UPDATE_ELFCOREHDR                     = 0x4\n\tKEYCTL_ASSUME_AUTHORITY                     = 0x10\n\tKEYCTL_CAPABILITIES                         = 0x1f\n\tKEYCTL_CAPS0_BIG_KEY                        = 0x10\n\tKEYCTL_CAPS0_CAPABILITIES                   = 0x1\n\tKEYCTL_CAPS0_DIFFIE_HELLMAN                 = 0x4\n\tKEYCTL_CAPS0_INVALIDATE                     = 0x20\n\tKEYCTL_CAPS0_MOVE                           = 0x80\n\tKEYCTL_CAPS0_PERSISTENT_KEYRINGS            = 0x2\n\tKEYCTL_CAPS0_PUBLIC_KEY                     = 0x8\n\tKEYCTL_CAPS0_RESTRICT_KEYRING               = 0x40\n\tKEYCTL_CAPS1_NOTIFICATIONS                  = 0x4\n\tKEYCTL_CAPS1_NS_KEYRING_NAME                = 0x1\n\tKEYCTL_CAPS1_NS_KEY_TAG                     = 0x2\n\tKEYCTL_CHOWN                                = 0x4\n\tKEYCTL_CLEAR                                = 0x7\n\tKEYCTL_DESCRIBE                             = 0x6\n\tKEYCTL_DH_COMPUTE                           = 0x17\n\tKEYCTL_GET_KEYRING_ID                       = 0x0\n\tKEYCTL_GET_PERSISTENT                       = 0x16\n\tKEYCTL_GET_SECURITY                         = 0x11\n\tKEYCTL_INSTANTIATE                          = 0xc\n\tKEYCTL_INSTANTIATE_IOV                      = 0x14\n\tKEYCTL_INVALIDATE                           = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING                 = 0x1\n\tKEYCTL_LINK                                 = 0x8\n\tKEYCTL_MOVE                                 = 0x1e\n\tKEYCTL_MOVE_EXCL                            = 0x1\n\tKEYCTL_NEGATE                               = 0xd\n\tKEYCTL_PKEY_DECRYPT                         = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                         = 0x19\n\tKEYCTL_PKEY_QUERY                           = 0x18\n\tKEYCTL_PKEY_SIGN                            = 0x1b\n\tKEYCTL_PKEY_VERIFY                          = 0x1c\n\tKEYCTL_READ                                 = 0xb\n\tKEYCTL_REJECT                               = 0x13\n\tKEYCTL_RESTRICT_KEYRING                     = 0x1d\n\tKEYCTL_REVOKE                               = 0x3\n\tKEYCTL_SEARCH                               = 0xa\n\tKEYCTL_SESSION_TO_PARENT                    = 0x12\n\tKEYCTL_SETPERM                              = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING                   = 0xe\n\tKEYCTL_SET_TIMEOUT                          = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT                     = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT                     = 0x1\n\tKEYCTL_SUPPORTS_SIGN                        = 0x4\n\tKEYCTL_SUPPORTS_VERIFY                      = 0x8\n\tKEYCTL_UNLINK                               = 0x9\n\tKEYCTL_UPDATE                               = 0x2\n\tKEYCTL_WATCH_KEY                            = 0x20\n\tKEY_REQKEY_DEFL_DEFAULT                     = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING               = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE                   = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING             = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING           = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING             = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING              = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING                = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING        = 0x5\n\tKEY_SPEC_GROUP_KEYRING                      = -0x6\n\tKEY_SPEC_PROCESS_KEYRING                    = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY                    = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING                  = -0x8\n\tKEY_SPEC_SESSION_KEYRING                    = -0x3\n\tKEY_SPEC_THREAD_KEYRING                     = -0x1\n\tKEY_SPEC_USER_KEYRING                       = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING               = -0x5\n\tLANDLOCK_ACCESS_FS_EXECUTE                  = 0x1\n\tLANDLOCK_ACCESS_FS_IOCTL_DEV                = 0x8000\n\tLANDLOCK_ACCESS_FS_MAKE_BLOCK               = 0x800\n\tLANDLOCK_ACCESS_FS_MAKE_CHAR                = 0x40\n\tLANDLOCK_ACCESS_FS_MAKE_DIR                 = 0x80\n\tLANDLOCK_ACCESS_FS_MAKE_FIFO                = 0x400\n\tLANDLOCK_ACCESS_FS_MAKE_REG                 = 0x100\n\tLANDLOCK_ACCESS_FS_MAKE_SOCK                = 0x200\n\tLANDLOCK_ACCESS_FS_MAKE_SYM                 = 0x1000\n\tLANDLOCK_ACCESS_FS_READ_DIR                 = 0x8\n\tLANDLOCK_ACCESS_FS_READ_FILE                = 0x4\n\tLANDLOCK_ACCESS_FS_REFER                    = 0x2000\n\tLANDLOCK_ACCESS_FS_REMOVE_DIR               = 0x10\n\tLANDLOCK_ACCESS_FS_REMOVE_FILE              = 0x20\n\tLANDLOCK_ACCESS_FS_TRUNCATE                 = 0x4000\n\tLANDLOCK_ACCESS_FS_WRITE_FILE               = 0x2\n\tLANDLOCK_ACCESS_NET_BIND_TCP                = 0x1\n\tLANDLOCK_ACCESS_NET_CONNECT_TCP             = 0x2\n\tLANDLOCK_CREATE_RULESET_VERSION             = 0x1\n\tLANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET         = 0x1\n\tLANDLOCK_SCOPE_SIGNAL                       = 0x2\n\tLINUX_REBOOT_CMD_CAD_OFF                    = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON                     = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                       = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC                      = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF                  = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART                    = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2                   = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND                 = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                         = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                         = 0x28121969\n\tLOCK_EX                                     = 0x2\n\tLOCK_NB                                     = 0x4\n\tLOCK_SH                                     = 0x1\n\tLOCK_UN                                     = 0x8\n\tLOOP_CLR_FD                                 = 0x4c01\n\tLOOP_CONFIGURE                              = 0x4c0a\n\tLOOP_CTL_ADD                                = 0x4c80\n\tLOOP_CTL_GET_FREE                           = 0x4c82\n\tLOOP_CTL_REMOVE                             = 0x4c81\n\tLOOP_GET_STATUS                             = 0x4c03\n\tLOOP_GET_STATUS64                           = 0x4c05\n\tLOOP_SET_BLOCK_SIZE                         = 0x4c09\n\tLOOP_SET_CAPACITY                           = 0x4c07\n\tLOOP_SET_DIRECT_IO                          = 0x4c08\n\tLOOP_SET_FD                                 = 0x4c00\n\tLOOP_SET_STATUS                             = 0x4c02\n\tLOOP_SET_STATUS64                           = 0x4c04\n\tLOOP_SET_STATUS_CLEARABLE_FLAGS             = 0x4\n\tLOOP_SET_STATUS_SETTABLE_FLAGS              = 0xc\n\tLO_KEY_SIZE                                 = 0x20\n\tLO_NAME_SIZE                                = 0x40\n\tLWTUNNEL_IP6_MAX                            = 0x8\n\tLWTUNNEL_IP_MAX                             = 0x8\n\tLWTUNNEL_IP_OPTS_MAX                        = 0x3\n\tLWTUNNEL_IP_OPT_ERSPAN_MAX                  = 0x4\n\tLWTUNNEL_IP_OPT_GENEVE_MAX                  = 0x3\n\tLWTUNNEL_IP_OPT_VXLAN_MAX                   = 0x1\n\tMADV_COLD                                   = 0x14\n\tMADV_COLLAPSE                               = 0x19\n\tMADV_DODUMP                                 = 0x11\n\tMADV_DOFORK                                 = 0xb\n\tMADV_DONTDUMP                               = 0x10\n\tMADV_DONTFORK                               = 0xa\n\tMADV_DONTNEED                               = 0x4\n\tMADV_DONTNEED_LOCKED                        = 0x18\n\tMADV_FREE                                   = 0x8\n\tMADV_HUGEPAGE                               = 0xe\n\tMADV_HWPOISON                               = 0x64\n\tMADV_KEEPONFORK                             = 0x13\n\tMADV_MERGEABLE                              = 0xc\n\tMADV_NOHUGEPAGE                             = 0xf\n\tMADV_NORMAL                                 = 0x0\n\tMADV_PAGEOUT                                = 0x15\n\tMADV_POPULATE_READ                          = 0x16\n\tMADV_POPULATE_WRITE                         = 0x17\n\tMADV_RANDOM                                 = 0x1\n\tMADV_REMOVE                                 = 0x9\n\tMADV_SEQUENTIAL                             = 0x2\n\tMADV_UNMERGEABLE                            = 0xd\n\tMADV_WILLNEED                               = 0x3\n\tMADV_WIPEONFORK                             = 0x12\n\tMAP_DROPPABLE                               = 0x8\n\tMAP_FILE                                    = 0x0\n\tMAP_FIXED                                   = 0x10\n\tMAP_FIXED_NOREPLACE                         = 0x100000\n\tMAP_HUGE_16GB                               = 0x88000000\n\tMAP_HUGE_16KB                               = 0x38000000\n\tMAP_HUGE_16MB                               = 0x60000000\n\tMAP_HUGE_1GB                                = 0x78000000\n\tMAP_HUGE_1MB                                = 0x50000000\n\tMAP_HUGE_256MB                              = 0x70000000\n\tMAP_HUGE_2GB                                = 0x7c000000\n\tMAP_HUGE_2MB                                = 0x54000000\n\tMAP_HUGE_32MB                               = 0x64000000\n\tMAP_HUGE_512KB                              = 0x4c000000\n\tMAP_HUGE_512MB                              = 0x74000000\n\tMAP_HUGE_64KB                               = 0x40000000\n\tMAP_HUGE_8MB                                = 0x5c000000\n\tMAP_HUGE_MASK                               = 0x3f\n\tMAP_HUGE_SHIFT                              = 0x1a\n\tMAP_PRIVATE                                 = 0x2\n\tMAP_SHARED                                  = 0x1\n\tMAP_SHARED_VALIDATE                         = 0x3\n\tMAP_TYPE                                    = 0xf\n\tMCAST_BLOCK_SOURCE                          = 0x2b\n\tMCAST_EXCLUDE                               = 0x0\n\tMCAST_INCLUDE                               = 0x1\n\tMCAST_JOIN_GROUP                            = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP                     = 0x2e\n\tMCAST_LEAVE_GROUP                           = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP                    = 0x2f\n\tMCAST_MSFILTER                              = 0x30\n\tMCAST_UNBLOCK_SOURCE                        = 0x2c\n\tMEMGETREGIONINFO                            = 0xc0104d08\n\tMEMREADOOB64                                = 0xc0184d16\n\tMEMWRITE                                    = 0xc0304d18\n\tMEMWRITEOOB64                               = 0xc0184d15\n\tMFD_ALLOW_SEALING                           = 0x2\n\tMFD_CLOEXEC                                 = 0x1\n\tMFD_EXEC                                    = 0x10\n\tMFD_HUGETLB                                 = 0x4\n\tMFD_HUGE_16GB                               = 0x88000000\n\tMFD_HUGE_16MB                               = 0x60000000\n\tMFD_HUGE_1GB                                = 0x78000000\n\tMFD_HUGE_1MB                                = 0x50000000\n\tMFD_HUGE_256MB                              = 0x70000000\n\tMFD_HUGE_2GB                                = 0x7c000000\n\tMFD_HUGE_2MB                                = 0x54000000\n\tMFD_HUGE_32MB                               = 0x64000000\n\tMFD_HUGE_512KB                              = 0x4c000000\n\tMFD_HUGE_512MB                              = 0x74000000\n\tMFD_HUGE_64KB                               = 0x40000000\n\tMFD_HUGE_8MB                                = 0x5c000000\n\tMFD_HUGE_MASK                               = 0x3f\n\tMFD_HUGE_SHIFT                              = 0x1a\n\tMFD_NOEXEC_SEAL                             = 0x8\n\tMINIX2_SUPER_MAGIC                          = 0x2468\n\tMINIX2_SUPER_MAGIC2                         = 0x2478\n\tMINIX3_SUPER_MAGIC                          = 0x4d5a\n\tMINIX_SUPER_MAGIC                           = 0x137f\n\tMINIX_SUPER_MAGIC2                          = 0x138f\n\tMNT_DETACH                                  = 0x2\n\tMNT_EXPIRE                                  = 0x4\n\tMNT_FORCE                                   = 0x1\n\tMNT_ID_REQ_SIZE_VER0                        = 0x18\n\tMNT_ID_REQ_SIZE_VER1                        = 0x20\n\tMNT_NS_INFO_SIZE_VER0                       = 0x10\n\tMODULE_INIT_COMPRESSED_FILE                 = 0x4\n\tMODULE_INIT_IGNORE_MODVERSIONS              = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC                 = 0x2\n\tMOUNT_ATTR_IDMAP                            = 0x100000\n\tMOUNT_ATTR_NOATIME                          = 0x10\n\tMOUNT_ATTR_NODEV                            = 0x4\n\tMOUNT_ATTR_NODIRATIME                       = 0x80\n\tMOUNT_ATTR_NOEXEC                           = 0x8\n\tMOUNT_ATTR_NOSUID                           = 0x2\n\tMOUNT_ATTR_NOSYMFOLLOW                      = 0x200000\n\tMOUNT_ATTR_RDONLY                           = 0x1\n\tMOUNT_ATTR_RELATIME                         = 0x0\n\tMOUNT_ATTR_SIZE_VER0                        = 0x20\n\tMOUNT_ATTR_STRICTATIME                      = 0x20\n\tMOUNT_ATTR__ATIME                           = 0x70\n\tMREMAP_DONTUNMAP                            = 0x4\n\tMREMAP_FIXED                                = 0x2\n\tMREMAP_MAYMOVE                              = 0x1\n\tMSDOS_SUPER_MAGIC                           = 0x4d44\n\tMSG_BATCH                                   = 0x40000\n\tMSG_CMSG_CLOEXEC                            = 0x40000000\n\tMSG_CONFIRM                                 = 0x800\n\tMSG_CTRUNC                                  = 0x8\n\tMSG_DONTROUTE                               = 0x4\n\tMSG_DONTWAIT                                = 0x40\n\tMSG_EOR                                     = 0x80\n\tMSG_ERRQUEUE                                = 0x2000\n\tMSG_FASTOPEN                                = 0x20000000\n\tMSG_FIN                                     = 0x200\n\tMSG_MORE                                    = 0x8000\n\tMSG_NOSIGNAL                                = 0x4000\n\tMSG_OOB                                     = 0x1\n\tMSG_PEEK                                    = 0x2\n\tMSG_PROXY                                   = 0x10\n\tMSG_RST                                     = 0x1000\n\tMSG_SOCK_DEVMEM                             = 0x2000000\n\tMSG_SYN                                     = 0x400\n\tMSG_TRUNC                                   = 0x20\n\tMSG_TRYHARD                                 = 0x4\n\tMSG_WAITALL                                 = 0x100\n\tMSG_WAITFORONE                              = 0x10000\n\tMSG_ZEROCOPY                                = 0x4000000\n\tMS_ACTIVE                                   = 0x40000000\n\tMS_ASYNC                                    = 0x1\n\tMS_BIND                                     = 0x1000\n\tMS_BORN                                     = 0x20000000\n\tMS_DIRSYNC                                  = 0x80\n\tMS_INVALIDATE                               = 0x2\n\tMS_I_VERSION                                = 0x800000\n\tMS_KERNMOUNT                                = 0x400000\n\tMS_LAZYTIME                                 = 0x2000000\n\tMS_MANDLOCK                                 = 0x40\n\tMS_MGC_MSK                                  = 0xffff0000\n\tMS_MGC_VAL                                  = 0xc0ed0000\n\tMS_MOVE                                     = 0x2000\n\tMS_NOATIME                                  = 0x400\n\tMS_NODEV                                    = 0x4\n\tMS_NODIRATIME                               = 0x800\n\tMS_NOEXEC                                   = 0x8\n\tMS_NOREMOTELOCK                             = 0x8000000\n\tMS_NOSEC                                    = 0x10000000\n\tMS_NOSUID                                   = 0x2\n\tMS_NOSYMFOLLOW                              = 0x100\n\tMS_NOUSER                                   = -0x80000000\n\tMS_POSIXACL                                 = 0x10000\n\tMS_PRIVATE                                  = 0x40000\n\tMS_RDONLY                                   = 0x1\n\tMS_REC                                      = 0x4000\n\tMS_RELATIME                                 = 0x200000\n\tMS_REMOUNT                                  = 0x20\n\tMS_RMT_MASK                                 = 0x2800051\n\tMS_SHARED                                   = 0x100000\n\tMS_SILENT                                   = 0x8000\n\tMS_SLAVE                                    = 0x80000\n\tMS_STRICTATIME                              = 0x1000000\n\tMS_SUBMOUNT                                 = 0x4000000\n\tMS_SYNC                                     = 0x4\n\tMS_SYNCHRONOUS                              = 0x10\n\tMS_UNBINDABLE                               = 0x20000\n\tMS_VERBOSE                                  = 0x8000\n\tMTD_ABSENT                                  = 0x0\n\tMTD_BIT_WRITEABLE                           = 0x800\n\tMTD_CAP_NANDFLASH                           = 0x400\n\tMTD_CAP_NORFLASH                            = 0xc00\n\tMTD_CAP_NVRAM                               = 0x1c00\n\tMTD_CAP_RAM                                 = 0x1c00\n\tMTD_CAP_ROM                                 = 0x0\n\tMTD_DATAFLASH                               = 0x6\n\tMTD_INODE_FS_MAGIC                          = 0x11307854\n\tMTD_MAX_ECCPOS_ENTRIES                      = 0x40\n\tMTD_MAX_OOBFREE_ENTRIES                     = 0x8\n\tMTD_MLCNANDFLASH                            = 0x8\n\tMTD_NANDECC_AUTOPLACE                       = 0x2\n\tMTD_NANDECC_AUTOPL_USR                      = 0x4\n\tMTD_NANDECC_OFF                             = 0x0\n\tMTD_NANDECC_PLACE                           = 0x1\n\tMTD_NANDECC_PLACEONLY                       = 0x3\n\tMTD_NANDFLASH                               = 0x4\n\tMTD_NORFLASH                                = 0x3\n\tMTD_NO_ERASE                                = 0x1000\n\tMTD_OTP_FACTORY                             = 0x1\n\tMTD_OTP_OFF                                 = 0x0\n\tMTD_OTP_USER                                = 0x2\n\tMTD_POWERUP_LOCK                            = 0x2000\n\tMTD_RAM                                     = 0x1\n\tMTD_ROM                                     = 0x2\n\tMTD_SLC_ON_MLC_EMULATION                    = 0x4000\n\tMTD_UBIVOLUME                               = 0x7\n\tMTD_WRITEABLE                               = 0x400\n\tNAME_MAX                                    = 0xff\n\tNCP_SUPER_MAGIC                             = 0x564c\n\tNETLINK_ADD_MEMBERSHIP                      = 0x1\n\tNETLINK_AUDIT                               = 0x9\n\tNETLINK_BROADCAST_ERROR                     = 0x4\n\tNETLINK_CAP_ACK                             = 0xa\n\tNETLINK_CONNECTOR                           = 0xb\n\tNETLINK_CRYPTO                              = 0x15\n\tNETLINK_DNRTMSG                             = 0xe\n\tNETLINK_DROP_MEMBERSHIP                     = 0x2\n\tNETLINK_ECRYPTFS                            = 0x13\n\tNETLINK_EXT_ACK                             = 0xb\n\tNETLINK_FIB_LOOKUP                          = 0xa\n\tNETLINK_FIREWALL                            = 0x3\n\tNETLINK_GENERIC                             = 0x10\n\tNETLINK_GET_STRICT_CHK                      = 0xc\n\tNETLINK_INET_DIAG                           = 0x4\n\tNETLINK_IP6_FW                              = 0xd\n\tNETLINK_ISCSI                               = 0x8\n\tNETLINK_KOBJECT_UEVENT                      = 0xf\n\tNETLINK_LISTEN_ALL_NSID                     = 0x8\n\tNETLINK_LIST_MEMBERSHIPS                    = 0x9\n\tNETLINK_NETFILTER                           = 0xc\n\tNETLINK_NFLOG                               = 0x5\n\tNETLINK_NO_ENOBUFS                          = 0x5\n\tNETLINK_PKTINFO                             = 0x3\n\tNETLINK_RDMA                                = 0x14\n\tNETLINK_ROUTE                               = 0x0\n\tNETLINK_RX_RING                             = 0x6\n\tNETLINK_SCSITRANSPORT                       = 0x12\n\tNETLINK_SELINUX                             = 0x7\n\tNETLINK_SMC                                 = 0x16\n\tNETLINK_SOCK_DIAG                           = 0x4\n\tNETLINK_TX_RING                             = 0x7\n\tNETLINK_UNUSED                              = 0x1\n\tNETLINK_USERSOCK                            = 0x2\n\tNETLINK_XFRM                                = 0x6\n\tNETNSA_MAX                                  = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED                    = -0x1\n\tNFC_ATR_REQ_GB_MAXSIZE                      = 0x30\n\tNFC_ATR_REQ_MAXSIZE                         = 0x40\n\tNFC_ATR_RES_GB_MAXSIZE                      = 0x2f\n\tNFC_ATR_RES_MAXSIZE                         = 0x40\n\tNFC_ATS_MAXSIZE                             = 0x14\n\tNFC_COMM_ACTIVE                             = 0x0\n\tNFC_COMM_PASSIVE                            = 0x1\n\tNFC_DEVICE_NAME_MAXSIZE                     = 0x8\n\tNFC_DIRECTION_RX                            = 0x0\n\tNFC_DIRECTION_TX                            = 0x1\n\tNFC_FIRMWARE_NAME_MAXSIZE                   = 0x20\n\tNFC_GB_MAXSIZE                              = 0x30\n\tNFC_GENL_MCAST_EVENT_NAME                   = \"events\"\n\tNFC_GENL_NAME                               = \"nfc\"\n\tNFC_GENL_VERSION                            = 0x1\n\tNFC_HEADER_SIZE                             = 0x1\n\tNFC_ISO15693_UID_MAXSIZE                    = 0x8\n\tNFC_LLCP_MAX_SERVICE_NAME                   = 0x3f\n\tNFC_LLCP_MIUX                               = 0x1\n\tNFC_LLCP_REMOTE_LTO                         = 0x3\n\tNFC_LLCP_REMOTE_MIU                         = 0x2\n\tNFC_LLCP_REMOTE_RW                          = 0x4\n\tNFC_LLCP_RW                                 = 0x0\n\tNFC_NFCID1_MAXSIZE                          = 0xa\n\tNFC_NFCID2_MAXSIZE                          = 0x8\n\tNFC_NFCID3_MAXSIZE                          = 0xa\n\tNFC_PROTO_FELICA                            = 0x3\n\tNFC_PROTO_FELICA_MASK                       = 0x8\n\tNFC_PROTO_ISO14443                          = 0x4\n\tNFC_PROTO_ISO14443_B                        = 0x6\n\tNFC_PROTO_ISO14443_B_MASK                   = 0x40\n\tNFC_PROTO_ISO14443_MASK                     = 0x10\n\tNFC_PROTO_ISO15693                          = 0x7\n\tNFC_PROTO_ISO15693_MASK                     = 0x80\n\tNFC_PROTO_JEWEL                             = 0x1\n\tNFC_PROTO_JEWEL_MASK                        = 0x2\n\tNFC_PROTO_MAX                               = 0x8\n\tNFC_PROTO_MIFARE                            = 0x2\n\tNFC_PROTO_MIFARE_MASK                       = 0x4\n\tNFC_PROTO_NFC_DEP                           = 0x5\n\tNFC_PROTO_NFC_DEP_MASK                      = 0x20\n\tNFC_RAW_HEADER_SIZE                         = 0x2\n\tNFC_RF_INITIATOR                            = 0x0\n\tNFC_RF_NONE                                 = 0x2\n\tNFC_RF_TARGET                               = 0x1\n\tNFC_SENSB_RES_MAXSIZE                       = 0xc\n\tNFC_SENSF_RES_MAXSIZE                       = 0x12\n\tNFC_SE_DISABLED                             = 0x0\n\tNFC_SE_EMBEDDED                             = 0x2\n\tNFC_SE_ENABLED                              = 0x1\n\tNFC_SE_UICC                                 = 0x1\n\tNFC_SOCKPROTO_LLCP                          = 0x1\n\tNFC_SOCKPROTO_MAX                           = 0x2\n\tNFC_SOCKPROTO_RAW                           = 0x0\n\tNFNETLINK_V0                                = 0x0\n\tNFNLGRP_ACCT_QUOTA                          = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY                   = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY               = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW                   = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE                = 0x5\n\tNFNLGRP_CONNTRACK_NEW                       = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE                    = 0x2\n\tNFNLGRP_MAX                                 = 0x9\n\tNFNLGRP_NFTABLES                            = 0x7\n\tNFNLGRP_NFTRACE                             = 0x9\n\tNFNLGRP_NONE                                = 0x0\n\tNFNL_BATCH_MAX                              = 0x1\n\tNFNL_MSG_BATCH_BEGIN                        = 0x10\n\tNFNL_MSG_BATCH_END                          = 0x11\n\tNFNL_NFA_NEST                               = 0x8000\n\tNFNL_SUBSYS_ACCT                            = 0x7\n\tNFNL_SUBSYS_COUNT                           = 0xd\n\tNFNL_SUBSYS_CTHELPER                        = 0x9\n\tNFNL_SUBSYS_CTNETLINK                       = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP                   = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT               = 0x8\n\tNFNL_SUBSYS_HOOK                            = 0xc\n\tNFNL_SUBSYS_IPSET                           = 0x6\n\tNFNL_SUBSYS_NFTABLES                        = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT                      = 0xb\n\tNFNL_SUBSYS_NONE                            = 0x0\n\tNFNL_SUBSYS_OSF                             = 0x5\n\tNFNL_SUBSYS_QUEUE                           = 0x3\n\tNFNL_SUBSYS_ULOG                            = 0x4\n\tNFS_SUPER_MAGIC                             = 0x6969\n\tNFT_BITWISE_BOOL                            = 0x0\n\tNFT_CHAIN_FLAGS                             = 0x7\n\tNFT_CHAIN_MAXNAMELEN                        = 0x100\n\tNFT_CT_MAX                                  = 0x17\n\tNFT_DATA_RESERVED_MASK                      = 0xffffff00\n\tNFT_DATA_VALUE_MAXLEN                       = 0x40\n\tNFT_EXTHDR_OP_MAX                           = 0x4\n\tNFT_FIB_RESULT_MAX                          = 0x3\n\tNFT_INNER_MASK                              = 0xf\n\tNFT_LOGLEVEL_MAX                            = 0x8\n\tNFT_NAME_MAXLEN                             = 0x100\n\tNFT_NG_MAX                                  = 0x1\n\tNFT_OBJECT_CONNLIMIT                        = 0x5\n\tNFT_OBJECT_COUNTER                          = 0x1\n\tNFT_OBJECT_CT_EXPECT                        = 0x9\n\tNFT_OBJECT_CT_HELPER                        = 0x3\n\tNFT_OBJECT_CT_TIMEOUT                       = 0x7\n\tNFT_OBJECT_LIMIT                            = 0x4\n\tNFT_OBJECT_MAX                              = 0xa\n\tNFT_OBJECT_QUOTA                            = 0x2\n\tNFT_OBJECT_SECMARK                          = 0x8\n\tNFT_OBJECT_SYNPROXY                         = 0xa\n\tNFT_OBJECT_TUNNEL                           = 0x6\n\tNFT_OBJECT_UNSPEC                           = 0x0\n\tNFT_OBJ_MAXNAMELEN                          = 0x100\n\tNFT_OSF_MAXGENRELEN                         = 0x10\n\tNFT_QUEUE_FLAG_BYPASS                       = 0x1\n\tNFT_QUEUE_FLAG_CPU_FANOUT                   = 0x2\n\tNFT_QUEUE_FLAG_MASK                         = 0x3\n\tNFT_REG32_COUNT                             = 0x10\n\tNFT_REG32_SIZE                              = 0x4\n\tNFT_REG_MAX                                 = 0x4\n\tNFT_REG_SIZE                                = 0x10\n\tNFT_REJECT_ICMPX_MAX                        = 0x3\n\tNFT_RT_MAX                                  = 0x4\n\tNFT_SECMARK_CTX_MAXLEN                      = 0x1000\n\tNFT_SET_MAXNAMELEN                          = 0x100\n\tNFT_SOCKET_MAX                              = 0x3\n\tNFT_TABLE_F_MASK                            = 0x7\n\tNFT_TABLE_MAXNAMELEN                        = 0x100\n\tNFT_TRACETYPE_MAX                           = 0x3\n\tNFT_TUNNEL_F_MASK                           = 0x7\n\tNFT_TUNNEL_MAX                              = 0x1\n\tNFT_TUNNEL_MODE_MAX                         = 0x2\n\tNFT_USERDATA_MAXLEN                         = 0x100\n\tNFT_XFRM_KEY_MAX                            = 0x6\n\tNF_NAT_RANGE_MAP_IPS                        = 0x1\n\tNF_NAT_RANGE_MASK                           = 0x7f\n\tNF_NAT_RANGE_NETMAP                         = 0x40\n\tNF_NAT_RANGE_PERSISTENT                     = 0x8\n\tNF_NAT_RANGE_PROTO_OFFSET                   = 0x20\n\tNF_NAT_RANGE_PROTO_RANDOM                   = 0x4\n\tNF_NAT_RANGE_PROTO_RANDOM_ALL               = 0x14\n\tNF_NAT_RANGE_PROTO_RANDOM_FULLY             = 0x10\n\tNF_NAT_RANGE_PROTO_SPECIFIED                = 0x2\n\tNILFS_SUPER_MAGIC                           = 0x3434\n\tNL0                                         = 0x0\n\tNL1                                         = 0x100\n\tNLA_ALIGNTO                                 = 0x4\n\tNLA_F_NESTED                                = 0x8000\n\tNLA_F_NET_BYTEORDER                         = 0x4000\n\tNLA_HDRLEN                                  = 0x4\n\tNLMSG_ALIGNTO                               = 0x4\n\tNLMSG_DONE                                  = 0x3\n\tNLMSG_ERROR                                 = 0x2\n\tNLMSG_HDRLEN                                = 0x10\n\tNLMSG_MIN_TYPE                              = 0x10\n\tNLMSG_NOOP                                  = 0x1\n\tNLMSG_OVERRUN                               = 0x4\n\tNLM_F_ACK                                   = 0x4\n\tNLM_F_ACK_TLVS                              = 0x200\n\tNLM_F_APPEND                                = 0x800\n\tNLM_F_ATOMIC                                = 0x400\n\tNLM_F_BULK                                  = 0x200\n\tNLM_F_CAPPED                                = 0x100\n\tNLM_F_CREATE                                = 0x400\n\tNLM_F_DUMP                                  = 0x300\n\tNLM_F_DUMP_FILTERED                         = 0x20\n\tNLM_F_DUMP_INTR                             = 0x10\n\tNLM_F_ECHO                                  = 0x8\n\tNLM_F_EXCL                                  = 0x200\n\tNLM_F_MATCH                                 = 0x200\n\tNLM_F_MULTI                                 = 0x2\n\tNLM_F_NONREC                                = 0x100\n\tNLM_F_REPLACE                               = 0x100\n\tNLM_F_REQUEST                               = 0x1\n\tNLM_F_ROOT                                  = 0x100\n\tNSFS_MAGIC                                  = 0x6e736673\n\tOCFS2_SUPER_MAGIC                           = 0x7461636f\n\tOCRNL                                       = 0x8\n\tOFDEL                                       = 0x80\n\tOFILL                                       = 0x40\n\tONLRET                                      = 0x20\n\tONOCR                                       = 0x10\n\tOPENPROM_SUPER_MAGIC                        = 0x9fa1\n\tOPOST                                       = 0x1\n\tOVERLAYFS_SUPER_MAGIC                       = 0x794c7630\n\tO_ACCMODE                                   = 0x3\n\tO_RDONLY                                    = 0x0\n\tO_RDWR                                      = 0x2\n\tO_WRONLY                                    = 0x1\n\tPACKET_ADD_MEMBERSHIP                       = 0x1\n\tPACKET_AUXDATA                              = 0x8\n\tPACKET_BROADCAST                            = 0x1\n\tPACKET_COPY_THRESH                          = 0x7\n\tPACKET_DROP_MEMBERSHIP                      = 0x2\n\tPACKET_FANOUT                               = 0x12\n\tPACKET_FANOUT_CBPF                          = 0x6\n\tPACKET_FANOUT_CPU                           = 0x2\n\tPACKET_FANOUT_DATA                          = 0x16\n\tPACKET_FANOUT_EBPF                          = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG                   = 0x8000\n\tPACKET_FANOUT_FLAG_IGNORE_OUTGOING          = 0x4000\n\tPACKET_FANOUT_FLAG_ROLLOVER                 = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID                 = 0x2000\n\tPACKET_FANOUT_HASH                          = 0x0\n\tPACKET_FANOUT_LB                            = 0x1\n\tPACKET_FANOUT_QM                            = 0x5\n\tPACKET_FANOUT_RND                           = 0x4\n\tPACKET_FANOUT_ROLLOVER                      = 0x3\n\tPACKET_FASTROUTE                            = 0x6\n\tPACKET_HDRLEN                               = 0xb\n\tPACKET_HOST                                 = 0x0\n\tPACKET_IGNORE_OUTGOING                      = 0x17\n\tPACKET_KERNEL                               = 0x7\n\tPACKET_LOOPBACK                             = 0x5\n\tPACKET_LOSS                                 = 0xe\n\tPACKET_MR_ALLMULTI                          = 0x2\n\tPACKET_MR_MULTICAST                         = 0x0\n\tPACKET_MR_PROMISC                           = 0x1\n\tPACKET_MR_UNICAST                           = 0x3\n\tPACKET_MULTICAST                            = 0x2\n\tPACKET_ORIGDEV                              = 0x9\n\tPACKET_OTHERHOST                            = 0x3\n\tPACKET_OUTGOING                             = 0x4\n\tPACKET_QDISC_BYPASS                         = 0x14\n\tPACKET_RECV_OUTPUT                          = 0x3\n\tPACKET_RESERVE                              = 0xc\n\tPACKET_ROLLOVER_STATS                       = 0x15\n\tPACKET_RX_RING                              = 0x5\n\tPACKET_STATISTICS                           = 0x6\n\tPACKET_TIMESTAMP                            = 0x11\n\tPACKET_TX_HAS_OFF                           = 0x13\n\tPACKET_TX_RING                              = 0xd\n\tPACKET_TX_TIMESTAMP                         = 0x10\n\tPACKET_USER                                 = 0x6\n\tPACKET_VERSION                              = 0xa\n\tPACKET_VNET_HDR                             = 0xf\n\tPACKET_VNET_HDR_SZ                          = 0x18\n\tPARITY_CRC16_PR0                            = 0x2\n\tPARITY_CRC16_PR0_CCITT                      = 0x4\n\tPARITY_CRC16_PR1                            = 0x3\n\tPARITY_CRC16_PR1_CCITT                      = 0x5\n\tPARITY_CRC32_PR0_CCITT                      = 0x6\n\tPARITY_CRC32_PR1_CCITT                      = 0x7\n\tPARITY_DEFAULT                              = 0x0\n\tPARITY_NONE                                 = 0x1\n\tPARMRK                                      = 0x8\n\tPERF_ATTR_SIZE_VER0                         = 0x40\n\tPERF_ATTR_SIZE_VER1                         = 0x48\n\tPERF_ATTR_SIZE_VER2                         = 0x50\n\tPERF_ATTR_SIZE_VER3                         = 0x60\n\tPERF_ATTR_SIZE_VER4                         = 0x68\n\tPERF_ATTR_SIZE_VER5                         = 0x70\n\tPERF_ATTR_SIZE_VER6                         = 0x78\n\tPERF_ATTR_SIZE_VER7                         = 0x80\n\tPERF_ATTR_SIZE_VER8                         = 0x88\n\tPERF_AUX_FLAG_COLLISION                     = 0x8\n\tPERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT    = 0x0\n\tPERF_AUX_FLAG_CORESIGHT_FORMAT_RAW          = 0x100\n\tPERF_AUX_FLAG_OVERWRITE                     = 0x2\n\tPERF_AUX_FLAG_PARTIAL                       = 0x4\n\tPERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK          = 0xff00\n\tPERF_AUX_FLAG_TRUNCATED                     = 0x1\n\tPERF_BRANCH_ENTRY_INFO_BITS_MAX             = 0x21\n\tPERF_BR_ARM64_DEBUG_DATA                    = 0x7\n\tPERF_BR_ARM64_DEBUG_EXIT                    = 0x5\n\tPERF_BR_ARM64_DEBUG_HALT                    = 0x4\n\tPERF_BR_ARM64_DEBUG_INST                    = 0x6\n\tPERF_BR_ARM64_FIQ                           = 0x3\n\tPERF_FLAG_FD_CLOEXEC                        = 0x8\n\tPERF_FLAG_FD_NO_GROUP                       = 0x1\n\tPERF_FLAG_FD_OUTPUT                         = 0x2\n\tPERF_FLAG_PID_CGROUP                        = 0x4\n\tPERF_HW_EVENT_MASK                          = 0xffffffff\n\tPERF_MAX_CONTEXTS_PER_STACK                 = 0x8\n\tPERF_MAX_STACK_DEPTH                        = 0x7f\n\tPERF_MEM_BLK_ADDR                           = 0x4\n\tPERF_MEM_BLK_DATA                           = 0x2\n\tPERF_MEM_BLK_NA                             = 0x1\n\tPERF_MEM_BLK_SHIFT                          = 0x28\n\tPERF_MEM_HOPS_0                             = 0x1\n\tPERF_MEM_HOPS_1                             = 0x2\n\tPERF_MEM_HOPS_2                             = 0x3\n\tPERF_MEM_HOPS_3                             = 0x4\n\tPERF_MEM_HOPS_SHIFT                         = 0x2b\n\tPERF_MEM_LOCK_LOCKED                        = 0x2\n\tPERF_MEM_LOCK_NA                            = 0x1\n\tPERF_MEM_LOCK_SHIFT                         = 0x18\n\tPERF_MEM_LVLNUM_ANY_CACHE                   = 0xb\n\tPERF_MEM_LVLNUM_CXL                         = 0x9\n\tPERF_MEM_LVLNUM_IO                          = 0xa\n\tPERF_MEM_LVLNUM_L1                          = 0x1\n\tPERF_MEM_LVLNUM_L2                          = 0x2\n\tPERF_MEM_LVLNUM_L2_MHB                      = 0x5\n\tPERF_MEM_LVLNUM_L3                          = 0x3\n\tPERF_MEM_LVLNUM_L4                          = 0x4\n\tPERF_MEM_LVLNUM_LFB                         = 0xc\n\tPERF_MEM_LVLNUM_MSC                         = 0x6\n\tPERF_MEM_LVLNUM_NA                          = 0xf\n\tPERF_MEM_LVLNUM_PMEM                        = 0xe\n\tPERF_MEM_LVLNUM_RAM                         = 0xd\n\tPERF_MEM_LVLNUM_SHIFT                       = 0x21\n\tPERF_MEM_LVLNUM_UNC                         = 0x8\n\tPERF_MEM_LVL_HIT                            = 0x2\n\tPERF_MEM_LVL_IO                             = 0x1000\n\tPERF_MEM_LVL_L1                             = 0x8\n\tPERF_MEM_LVL_L2                             = 0x20\n\tPERF_MEM_LVL_L3                             = 0x40\n\tPERF_MEM_LVL_LFB                            = 0x10\n\tPERF_MEM_LVL_LOC_RAM                        = 0x80\n\tPERF_MEM_LVL_MISS                           = 0x4\n\tPERF_MEM_LVL_NA                             = 0x1\n\tPERF_MEM_LVL_REM_CCE1                       = 0x400\n\tPERF_MEM_LVL_REM_CCE2                       = 0x800\n\tPERF_MEM_LVL_REM_RAM1                       = 0x100\n\tPERF_MEM_LVL_REM_RAM2                       = 0x200\n\tPERF_MEM_LVL_SHIFT                          = 0x5\n\tPERF_MEM_LVL_UNC                            = 0x2000\n\tPERF_MEM_OP_EXEC                            = 0x10\n\tPERF_MEM_OP_LOAD                            = 0x2\n\tPERF_MEM_OP_NA                              = 0x1\n\tPERF_MEM_OP_PFETCH                          = 0x8\n\tPERF_MEM_OP_SHIFT                           = 0x0\n\tPERF_MEM_OP_STORE                           = 0x4\n\tPERF_MEM_REMOTE_REMOTE                      = 0x1\n\tPERF_MEM_REMOTE_SHIFT                       = 0x25\n\tPERF_MEM_SNOOPX_FWD                         = 0x1\n\tPERF_MEM_SNOOPX_PEER                        = 0x2\n\tPERF_MEM_SNOOPX_SHIFT                       = 0x26\n\tPERF_MEM_SNOOP_HIT                          = 0x4\n\tPERF_MEM_SNOOP_HITM                         = 0x10\n\tPERF_MEM_SNOOP_MISS                         = 0x8\n\tPERF_MEM_SNOOP_NA                           = 0x1\n\tPERF_MEM_SNOOP_NONE                         = 0x2\n\tPERF_MEM_SNOOP_SHIFT                        = 0x13\n\tPERF_MEM_TLB_HIT                            = 0x2\n\tPERF_MEM_TLB_L1                             = 0x8\n\tPERF_MEM_TLB_L2                             = 0x10\n\tPERF_MEM_TLB_MISS                           = 0x4\n\tPERF_MEM_TLB_NA                             = 0x1\n\tPERF_MEM_TLB_OS                             = 0x40\n\tPERF_MEM_TLB_SHIFT                          = 0x1a\n\tPERF_MEM_TLB_WK                             = 0x20\n\tPERF_PMU_TYPE_SHIFT                         = 0x20\n\tPERF_RECORD_KSYMBOL_FLAGS_UNREGISTER        = 0x1\n\tPERF_RECORD_MISC_COMM_EXEC                  = 0x2000\n\tPERF_RECORD_MISC_CPUMODE_MASK               = 0x7\n\tPERF_RECORD_MISC_CPUMODE_UNKNOWN            = 0x0\n\tPERF_RECORD_MISC_EXACT_IP                   = 0x4000\n\tPERF_RECORD_MISC_EXT_RESERVED               = 0x8000\n\tPERF_RECORD_MISC_FORK_EXEC                  = 0x2000\n\tPERF_RECORD_MISC_GUEST_KERNEL               = 0x4\n\tPERF_RECORD_MISC_GUEST_USER                 = 0x5\n\tPERF_RECORD_MISC_HYPERVISOR                 = 0x3\n\tPERF_RECORD_MISC_KERNEL                     = 0x1\n\tPERF_RECORD_MISC_MMAP_BUILD_ID              = 0x4000\n\tPERF_RECORD_MISC_MMAP_DATA                  = 0x2000\n\tPERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT     = 0x1000\n\tPERF_RECORD_MISC_SWITCH_OUT                 = 0x2000\n\tPERF_RECORD_MISC_SWITCH_OUT_PREEMPT         = 0x4000\n\tPERF_RECORD_MISC_USER                       = 0x2\n\tPERF_SAMPLE_BRANCH_PLM_ALL                  = 0x7\n\tPERF_SAMPLE_WEIGHT_TYPE                     = 0x1004000\n\tPID_FS_MAGIC                                = 0x50494446\n\tPIPEFS_MAGIC                                = 0x50495045\n\tPPPIOCGNPMODE                               = 0xc008744c\n\tPPPIOCNEWUNIT                               = 0xc004743e\n\tPRIO_PGRP                                   = 0x1\n\tPRIO_PROCESS                                = 0x0\n\tPRIO_USER                                   = 0x2\n\tPROCFS_IOCTL_MAGIC                          = 'f'\n\tPROC_SUPER_MAGIC                            = 0x9fa0\n\tPROT_EXEC                                   = 0x4\n\tPROT_GROWSDOWN                              = 0x1000000\n\tPROT_GROWSUP                                = 0x2000000\n\tPROT_NONE                                   = 0x0\n\tPROT_READ                                   = 0x1\n\tPROT_WRITE                                  = 0x2\n\tPR_CAPBSET_DROP                             = 0x18\n\tPR_CAPBSET_READ                             = 0x17\n\tPR_CAP_AMBIENT                              = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL                    = 0x4\n\tPR_CAP_AMBIENT_IS_SET                       = 0x1\n\tPR_CAP_AMBIENT_LOWER                        = 0x3\n\tPR_CAP_AMBIENT_RAISE                        = 0x2\n\tPR_ENDIAN_BIG                               = 0x0\n\tPR_ENDIAN_LITTLE                            = 0x1\n\tPR_ENDIAN_PPC_LITTLE                        = 0x2\n\tPR_FPEMU_NOPRINT                            = 0x1\n\tPR_FPEMU_SIGFPE                             = 0x2\n\tPR_FP_EXC_ASYNC                             = 0x2\n\tPR_FP_EXC_DISABLED                          = 0x0\n\tPR_FP_EXC_DIV                               = 0x10000\n\tPR_FP_EXC_INV                               = 0x100000\n\tPR_FP_EXC_NONRECOV                          = 0x1\n\tPR_FP_EXC_OVF                               = 0x20000\n\tPR_FP_EXC_PRECISE                           = 0x3\n\tPR_FP_EXC_RES                               = 0x80000\n\tPR_FP_EXC_SW_ENABLE                         = 0x80\n\tPR_FP_EXC_UND                               = 0x40000\n\tPR_FP_MODE_FR                               = 0x1\n\tPR_FP_MODE_FRE                              = 0x2\n\tPR_GET_AUXV                                 = 0x41555856\n\tPR_GET_CHILD_SUBREAPER                      = 0x25\n\tPR_GET_DUMPABLE                             = 0x3\n\tPR_GET_ENDIAN                               = 0x13\n\tPR_GET_FPEMU                                = 0x9\n\tPR_GET_FPEXC                                = 0xb\n\tPR_GET_FP_MODE                              = 0x2e\n\tPR_GET_IO_FLUSHER                           = 0x3a\n\tPR_GET_KEEPCAPS                             = 0x7\n\tPR_GET_MDWE                                 = 0x42\n\tPR_GET_MEMORY_MERGE                         = 0x44\n\tPR_GET_NAME                                 = 0x10\n\tPR_GET_NO_NEW_PRIVS                         = 0x27\n\tPR_GET_PDEATHSIG                            = 0x2\n\tPR_GET_SECCOMP                              = 0x15\n\tPR_GET_SECUREBITS                           = 0x1b\n\tPR_GET_SHADOW_STACK_STATUS                  = 0x4a\n\tPR_GET_SPECULATION_CTRL                     = 0x34\n\tPR_GET_TAGGED_ADDR_CTRL                     = 0x38\n\tPR_GET_THP_DISABLE                          = 0x2a\n\tPR_GET_TID_ADDRESS                          = 0x28\n\tPR_GET_TIMERSLACK                           = 0x1e\n\tPR_GET_TIMING                               = 0xd\n\tPR_GET_TSC                                  = 0x19\n\tPR_GET_UNALIGN                              = 0x5\n\tPR_LOCK_SHADOW_STACK_STATUS                 = 0x4c\n\tPR_MCE_KILL                                 = 0x21\n\tPR_MCE_KILL_CLEAR                           = 0x0\n\tPR_MCE_KILL_DEFAULT                         = 0x2\n\tPR_MCE_KILL_EARLY                           = 0x1\n\tPR_MCE_KILL_GET                             = 0x22\n\tPR_MCE_KILL_LATE                            = 0x0\n\tPR_MCE_KILL_SET                             = 0x1\n\tPR_MDWE_NO_INHERIT                          = 0x2\n\tPR_MDWE_REFUSE_EXEC_GAIN                    = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT                   = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT                    = 0x2b\n\tPR_MTE_TAG_MASK                             = 0x7fff8\n\tPR_MTE_TAG_SHIFT                            = 0x3\n\tPR_MTE_TCF_ASYNC                            = 0x4\n\tPR_MTE_TCF_MASK                             = 0x6\n\tPR_MTE_TCF_NONE                             = 0x0\n\tPR_MTE_TCF_SHIFT                            = 0x1\n\tPR_MTE_TCF_SYNC                             = 0x2\n\tPR_PAC_APDAKEY                              = 0x4\n\tPR_PAC_APDBKEY                              = 0x8\n\tPR_PAC_APGAKEY                              = 0x10\n\tPR_PAC_APIAKEY                              = 0x1\n\tPR_PAC_APIBKEY                              = 0x2\n\tPR_PAC_GET_ENABLED_KEYS                     = 0x3d\n\tPR_PAC_RESET_KEYS                           = 0x36\n\tPR_PAC_SET_ENABLED_KEYS                     = 0x3c\n\tPR_PMLEN_MASK                               = 0x7f000000\n\tPR_PMLEN_SHIFT                              = 0x18\n\tPR_PPC_DEXCR_CTRL_CLEAR                     = 0x4\n\tPR_PPC_DEXCR_CTRL_CLEAR_ONEXEC              = 0x10\n\tPR_PPC_DEXCR_CTRL_EDITABLE                  = 0x1\n\tPR_PPC_DEXCR_CTRL_MASK                      = 0x1f\n\tPR_PPC_DEXCR_CTRL_SET                       = 0x2\n\tPR_PPC_DEXCR_CTRL_SET_ONEXEC                = 0x8\n\tPR_PPC_DEXCR_IBRTPD                         = 0x1\n\tPR_PPC_DEXCR_NPHIE                          = 0x3\n\tPR_PPC_DEXCR_SBHE                           = 0x0\n\tPR_PPC_DEXCR_SRAPD                          = 0x2\n\tPR_PPC_GET_DEXCR                            = 0x48\n\tPR_PPC_SET_DEXCR                            = 0x49\n\tPR_RISCV_CTX_SW_FENCEI_OFF                  = 0x1\n\tPR_RISCV_CTX_SW_FENCEI_ON                   = 0x0\n\tPR_RISCV_SCOPE_PER_PROCESS                  = 0x0\n\tPR_RISCV_SCOPE_PER_THREAD                   = 0x1\n\tPR_RISCV_SET_ICACHE_FLUSH_CTX               = 0x47\n\tPR_RISCV_V_GET_CONTROL                      = 0x46\n\tPR_RISCV_V_SET_CONTROL                      = 0x45\n\tPR_RISCV_V_VSTATE_CTRL_CUR_MASK             = 0x3\n\tPR_RISCV_V_VSTATE_CTRL_DEFAULT              = 0x0\n\tPR_RISCV_V_VSTATE_CTRL_INHERIT              = 0x10\n\tPR_RISCV_V_VSTATE_CTRL_MASK                 = 0x1f\n\tPR_RISCV_V_VSTATE_CTRL_NEXT_MASK            = 0xc\n\tPR_RISCV_V_VSTATE_CTRL_OFF                  = 0x1\n\tPR_RISCV_V_VSTATE_CTRL_ON                   = 0x2\n\tPR_SCHED_CORE                               = 0x3e\n\tPR_SCHED_CORE_CREATE                        = 0x1\n\tPR_SCHED_CORE_GET                           = 0x0\n\tPR_SCHED_CORE_MAX                           = 0x4\n\tPR_SCHED_CORE_SCOPE_PROCESS_GROUP           = 0x2\n\tPR_SCHED_CORE_SCOPE_THREAD                  = 0x0\n\tPR_SCHED_CORE_SCOPE_THREAD_GROUP            = 0x1\n\tPR_SCHED_CORE_SHARE_FROM                    = 0x3\n\tPR_SCHED_CORE_SHARE_TO                      = 0x2\n\tPR_SET_CHILD_SUBREAPER                      = 0x24\n\tPR_SET_DUMPABLE                             = 0x4\n\tPR_SET_ENDIAN                               = 0x14\n\tPR_SET_FPEMU                                = 0xa\n\tPR_SET_FPEXC                                = 0xc\n\tPR_SET_FP_MODE                              = 0x2d\n\tPR_SET_IO_FLUSHER                           = 0x39\n\tPR_SET_KEEPCAPS                             = 0x8\n\tPR_SET_MDWE                                 = 0x41\n\tPR_SET_MEMORY_MERGE                         = 0x43\n\tPR_SET_MM                                   = 0x23\n\tPR_SET_MM_ARG_END                           = 0x9\n\tPR_SET_MM_ARG_START                         = 0x8\n\tPR_SET_MM_AUXV                              = 0xc\n\tPR_SET_MM_BRK                               = 0x7\n\tPR_SET_MM_END_CODE                          = 0x2\n\tPR_SET_MM_END_DATA                          = 0x4\n\tPR_SET_MM_ENV_END                           = 0xb\n\tPR_SET_MM_ENV_START                         = 0xa\n\tPR_SET_MM_EXE_FILE                          = 0xd\n\tPR_SET_MM_MAP                               = 0xe\n\tPR_SET_MM_MAP_SIZE                          = 0xf\n\tPR_SET_MM_START_BRK                         = 0x6\n\tPR_SET_MM_START_CODE                        = 0x1\n\tPR_SET_MM_START_DATA                        = 0x3\n\tPR_SET_MM_START_STACK                       = 0x5\n\tPR_SET_NAME                                 = 0xf\n\tPR_SET_NO_NEW_PRIVS                         = 0x26\n\tPR_SET_PDEATHSIG                            = 0x1\n\tPR_SET_PTRACER                              = 0x59616d61\n\tPR_SET_SECCOMP                              = 0x16\n\tPR_SET_SECUREBITS                           = 0x1c\n\tPR_SET_SHADOW_STACK_STATUS                  = 0x4b\n\tPR_SET_SPECULATION_CTRL                     = 0x35\n\tPR_SET_SYSCALL_USER_DISPATCH                = 0x3b\n\tPR_SET_TAGGED_ADDR_CTRL                     = 0x37\n\tPR_SET_THP_DISABLE                          = 0x29\n\tPR_SET_TIMERSLACK                           = 0x1d\n\tPR_SET_TIMING                               = 0xe\n\tPR_SET_TSC                                  = 0x1a\n\tPR_SET_UNALIGN                              = 0x6\n\tPR_SET_VMA                                  = 0x53564d41\n\tPR_SET_VMA_ANON_NAME                        = 0x0\n\tPR_SHADOW_STACK_ENABLE                      = 0x1\n\tPR_SHADOW_STACK_PUSH                        = 0x4\n\tPR_SHADOW_STACK_WRITE                       = 0x2\n\tPR_SME_GET_VL                               = 0x40\n\tPR_SME_SET_VL                               = 0x3f\n\tPR_SME_SET_VL_ONEXEC                        = 0x40000\n\tPR_SME_VL_INHERIT                           = 0x20000\n\tPR_SME_VL_LEN_MASK                          = 0xffff\n\tPR_SPEC_DISABLE                             = 0x4\n\tPR_SPEC_DISABLE_NOEXEC                      = 0x10\n\tPR_SPEC_ENABLE                              = 0x2\n\tPR_SPEC_FORCE_DISABLE                       = 0x8\n\tPR_SPEC_INDIRECT_BRANCH                     = 0x1\n\tPR_SPEC_L1D_FLUSH                           = 0x2\n\tPR_SPEC_NOT_AFFECTED                        = 0x0\n\tPR_SPEC_PRCTL                               = 0x1\n\tPR_SPEC_STORE_BYPASS                        = 0x0\n\tPR_SVE_GET_VL                               = 0x33\n\tPR_SVE_SET_VL                               = 0x32\n\tPR_SVE_SET_VL_ONEXEC                        = 0x40000\n\tPR_SVE_VL_INHERIT                           = 0x20000\n\tPR_SVE_VL_LEN_MASK                          = 0xffff\n\tPR_SYS_DISPATCH_OFF                         = 0x0\n\tPR_SYS_DISPATCH_ON                          = 0x1\n\tPR_TAGGED_ADDR_ENABLE                       = 0x1\n\tPR_TASK_PERF_EVENTS_DISABLE                 = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE                  = 0x20\n\tPR_TIMING_STATISTICAL                       = 0x0\n\tPR_TIMING_TIMESTAMP                         = 0x1\n\tPR_TSC_ENABLE                               = 0x1\n\tPR_TSC_SIGSEGV                              = 0x2\n\tPR_UNALIGN_NOPRINT                          = 0x1\n\tPR_UNALIGN_SIGBUS                           = 0x2\n\tPSTOREFS_MAGIC                              = 0x6165676c\n\tPTP_CLK_MAGIC                               = '='\n\tPTP_ENABLE_FEATURE                          = 0x1\n\tPTP_EXTTS_EDGES                             = 0x6\n\tPTP_EXTTS_EVENT_VALID                       = 0x1\n\tPTP_EXTTS_V1_VALID_FLAGS                    = 0x7\n\tPTP_EXTTS_VALID_FLAGS                       = 0x1f\n\tPTP_EXT_OFFSET                              = 0x10\n\tPTP_FALLING_EDGE                            = 0x4\n\tPTP_MAX_SAMPLES                             = 0x19\n\tPTP_PEROUT_DUTY_CYCLE                       = 0x2\n\tPTP_PEROUT_ONE_SHOT                         = 0x1\n\tPTP_PEROUT_PHASE                            = 0x4\n\tPTP_PEROUT_V1_VALID_FLAGS                   = 0x0\n\tPTP_PEROUT_VALID_FLAGS                      = 0x7\n\tPTP_PIN_GETFUNC                             = 0xc0603d06\n\tPTP_PIN_GETFUNC2                            = 0xc0603d0f\n\tPTP_RISING_EDGE                             = 0x2\n\tPTP_STRICT_FLAGS                            = 0x8\n\tPTP_SYS_OFFSET_EXTENDED                     = 0xc4c03d09\n\tPTP_SYS_OFFSET_EXTENDED2                    = 0xc4c03d12\n\tPTP_SYS_OFFSET_PRECISE                      = 0xc0403d08\n\tPTP_SYS_OFFSET_PRECISE2                     = 0xc0403d11\n\tPTRACE_ATTACH                               = 0x10\n\tPTRACE_CONT                                 = 0x7\n\tPTRACE_DETACH                               = 0x11\n\tPTRACE_EVENTMSG_SYSCALL_ENTRY               = 0x1\n\tPTRACE_EVENTMSG_SYSCALL_EXIT                = 0x2\n\tPTRACE_EVENT_CLONE                          = 0x3\n\tPTRACE_EVENT_EXEC                           = 0x4\n\tPTRACE_EVENT_EXIT                           = 0x6\n\tPTRACE_EVENT_FORK                           = 0x1\n\tPTRACE_EVENT_SECCOMP                        = 0x7\n\tPTRACE_EVENT_STOP                           = 0x80\n\tPTRACE_EVENT_VFORK                          = 0x2\n\tPTRACE_EVENT_VFORK_DONE                     = 0x5\n\tPTRACE_GETEVENTMSG                          = 0x4201\n\tPTRACE_GETREGS                              = 0xc\n\tPTRACE_GETREGSET                            = 0x4204\n\tPTRACE_GETSIGINFO                           = 0x4202\n\tPTRACE_GETSIGMASK                           = 0x420a\n\tPTRACE_GET_RSEQ_CONFIGURATION               = 0x420f\n\tPTRACE_GET_SYSCALL_INFO                     = 0x420e\n\tPTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG     = 0x4211\n\tPTRACE_INTERRUPT                            = 0x4207\n\tPTRACE_KILL                                 = 0x8\n\tPTRACE_LISTEN                               = 0x4208\n\tPTRACE_O_EXITKILL                           = 0x100000\n\tPTRACE_O_MASK                               = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP                    = 0x200000\n\tPTRACE_O_TRACECLONE                         = 0x8\n\tPTRACE_O_TRACEEXEC                          = 0x10\n\tPTRACE_O_TRACEEXIT                          = 0x40\n\tPTRACE_O_TRACEFORK                          = 0x2\n\tPTRACE_O_TRACESECCOMP                       = 0x80\n\tPTRACE_O_TRACESYSGOOD                       = 0x1\n\tPTRACE_O_TRACEVFORK                         = 0x4\n\tPTRACE_O_TRACEVFORKDONE                     = 0x20\n\tPTRACE_PEEKDATA                             = 0x2\n\tPTRACE_PEEKSIGINFO                          = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED                   = 0x1\n\tPTRACE_PEEKTEXT                             = 0x1\n\tPTRACE_PEEKUSR                              = 0x3\n\tPTRACE_POKEDATA                             = 0x5\n\tPTRACE_POKETEXT                             = 0x4\n\tPTRACE_POKEUSR                              = 0x6\n\tPTRACE_SECCOMP_GET_FILTER                   = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA                 = 0x420d\n\tPTRACE_SEIZE                                = 0x4206\n\tPTRACE_SETOPTIONS                           = 0x4200\n\tPTRACE_SETREGS                              = 0xd\n\tPTRACE_SETREGSET                            = 0x4205\n\tPTRACE_SETSIGINFO                           = 0x4203\n\tPTRACE_SETSIGMASK                           = 0x420b\n\tPTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG     = 0x4210\n\tPTRACE_SINGLESTEP                           = 0x9\n\tPTRACE_SYSCALL                              = 0x18\n\tPTRACE_SYSCALL_INFO_ENTRY                   = 0x1\n\tPTRACE_SYSCALL_INFO_EXIT                    = 0x2\n\tPTRACE_SYSCALL_INFO_NONE                    = 0x0\n\tPTRACE_SYSCALL_INFO_SECCOMP                 = 0x3\n\tPTRACE_TRACEME                              = 0x0\n\tP_ALL                                       = 0x0\n\tP_PGID                                      = 0x2\n\tP_PID                                       = 0x1\n\tP_PIDFD                                     = 0x3\n\tQNX4_SUPER_MAGIC                            = 0x2f\n\tQNX6_SUPER_MAGIC                            = 0x68191122\n\tRAMFS_MAGIC                                 = 0x858458f6\n\tRAW_PAYLOAD_DIGITAL                         = 0x3\n\tRAW_PAYLOAD_HCI                             = 0x2\n\tRAW_PAYLOAD_LLCP                            = 0x0\n\tRAW_PAYLOAD_NCI                             = 0x1\n\tRAW_PAYLOAD_PROPRIETARY                     = 0x4\n\tRDTGROUP_SUPER_MAGIC                        = 0x7655821\n\tREISERFS_SUPER_MAGIC                        = 0x52654973\n\tRENAME_EXCHANGE                             = 0x2\n\tRENAME_NOREPLACE                            = 0x1\n\tRENAME_WHITEOUT                             = 0x4\n\tRLIMIT_CORE                                 = 0x4\n\tRLIMIT_CPU                                  = 0x0\n\tRLIMIT_DATA                                 = 0x2\n\tRLIMIT_FSIZE                                = 0x1\n\tRLIMIT_LOCKS                                = 0xa\n\tRLIMIT_MSGQUEUE                             = 0xc\n\tRLIMIT_NICE                                 = 0xd\n\tRLIMIT_RTPRIO                               = 0xe\n\tRLIMIT_RTTIME                               = 0xf\n\tRLIMIT_SIGPENDING                           = 0xb\n\tRLIMIT_STACK                                = 0x3\n\tRLIM_INFINITY                               = 0xffffffffffffffff\n\tRTAX_ADVMSS                                 = 0x8\n\tRTAX_CC_ALGO                                = 0x10\n\tRTAX_CWND                                   = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE                     = 0x11\n\tRTAX_FEATURES                               = 0xc\n\tRTAX_FEATURE_ALLFRAG                        = 0x8\n\tRTAX_FEATURE_ECN                            = 0x1\n\tRTAX_FEATURE_MASK                           = 0x1f\n\tRTAX_FEATURE_SACK                           = 0x2\n\tRTAX_FEATURE_TCP_USEC_TS                    = 0x10\n\tRTAX_FEATURE_TIMESTAMP                      = 0x4\n\tRTAX_HOPLIMIT                               = 0xa\n\tRTAX_INITCWND                               = 0xb\n\tRTAX_INITRWND                               = 0xe\n\tRTAX_LOCK                                   = 0x1\n\tRTAX_MAX                                    = 0x11\n\tRTAX_MTU                                    = 0x2\n\tRTAX_QUICKACK                               = 0xf\n\tRTAX_REORDERING                             = 0x9\n\tRTAX_RTO_MIN                                = 0xd\n\tRTAX_RTT                                    = 0x4\n\tRTAX_RTTVAR                                 = 0x5\n\tRTAX_SSTHRESH                               = 0x6\n\tRTAX_UNSPEC                                 = 0x0\n\tRTAX_WINDOW                                 = 0x3\n\tRTA_ALIGNTO                                 = 0x4\n\tRTA_MAX                                     = 0x1e\n\tRTCF_DIRECTSRC                              = 0x4000000\n\tRTCF_DOREDIRECT                             = 0x1000000\n\tRTCF_LOG                                    = 0x2000000\n\tRTCF_MASQ                                   = 0x400000\n\tRTCF_NAT                                    = 0x800000\n\tRTCF_VALVE                                  = 0x200000\n\tRTC_AF                                      = 0x20\n\tRTC_BSM_DIRECT                              = 0x1\n\tRTC_BSM_DISABLED                            = 0x0\n\tRTC_BSM_LEVEL                               = 0x2\n\tRTC_BSM_STANDBY                             = 0x3\n\tRTC_FEATURE_ALARM                           = 0x0\n\tRTC_FEATURE_ALARM_RES_2S                    = 0x3\n\tRTC_FEATURE_ALARM_RES_MINUTE                = 0x1\n\tRTC_FEATURE_ALARM_WAKEUP_ONLY               = 0x7\n\tRTC_FEATURE_BACKUP_SWITCH_MODE              = 0x6\n\tRTC_FEATURE_CNT                             = 0x8\n\tRTC_FEATURE_CORRECTION                      = 0x5\n\tRTC_FEATURE_NEED_WEEK_DAY                   = 0x2\n\tRTC_FEATURE_UPDATE_INTERRUPT                = 0x4\n\tRTC_IRQF                                    = 0x80\n\tRTC_MAX_FREQ                                = 0x2000\n\tRTC_PARAM_BACKUP_SWITCH_MODE                = 0x2\n\tRTC_PARAM_CORRECTION                        = 0x1\n\tRTC_PARAM_FEATURES                          = 0x0\n\tRTC_PF                                      = 0x40\n\tRTC_UF                                      = 0x10\n\tRTF_ADDRCLASSMASK                           = 0xf8000000\n\tRTF_ADDRCONF                                = 0x40000\n\tRTF_ALLONLINK                               = 0x20000\n\tRTF_BROADCAST                               = 0x10000000\n\tRTF_CACHE                                   = 0x1000000\n\tRTF_DEFAULT                                 = 0x10000\n\tRTF_DYNAMIC                                 = 0x10\n\tRTF_FLOW                                    = 0x2000000\n\tRTF_GATEWAY                                 = 0x2\n\tRTF_HOST                                    = 0x4\n\tRTF_INTERFACE                               = 0x40000000\n\tRTF_IRTT                                    = 0x100\n\tRTF_LINKRT                                  = 0x100000\n\tRTF_LOCAL                                   = 0x80000000\n\tRTF_MODIFIED                                = 0x20\n\tRTF_MSS                                     = 0x40\n\tRTF_MTU                                     = 0x40\n\tRTF_MULTICAST                               = 0x20000000\n\tRTF_NAT                                     = 0x8000000\n\tRTF_NOFORWARD                               = 0x1000\n\tRTF_NONEXTHOP                               = 0x200000\n\tRTF_NOPMTUDISC                              = 0x4000\n\tRTF_POLICY                                  = 0x4000000\n\tRTF_REINSTATE                               = 0x8\n\tRTF_REJECT                                  = 0x200\n\tRTF_STATIC                                  = 0x400\n\tRTF_THROW                                   = 0x2000\n\tRTF_UP                                      = 0x1\n\tRTF_WINDOW                                  = 0x80\n\tRTF_XRESOLVE                                = 0x800\n\tRTMGRP_DECnet_IFADDR                        = 0x1000\n\tRTMGRP_DECnet_ROUTE                         = 0x4000\n\tRTMGRP_IPV4_IFADDR                          = 0x10\n\tRTMGRP_IPV4_MROUTE                          = 0x20\n\tRTMGRP_IPV4_ROUTE                           = 0x40\n\tRTMGRP_IPV4_RULE                            = 0x80\n\tRTMGRP_IPV6_IFADDR                          = 0x100\n\tRTMGRP_IPV6_IFINFO                          = 0x800\n\tRTMGRP_IPV6_MROUTE                          = 0x200\n\tRTMGRP_IPV6_PREFIX                          = 0x20000\n\tRTMGRP_IPV6_ROUTE                           = 0x400\n\tRTMGRP_LINK                                 = 0x1\n\tRTMGRP_NEIGH                                = 0x4\n\tRTMGRP_NOTIFY                               = 0x2\n\tRTMGRP_TC                                   = 0x8\n\tRTM_BASE                                    = 0x10\n\tRTM_DELACTION                               = 0x31\n\tRTM_DELADDR                                 = 0x15\n\tRTM_DELADDRLABEL                            = 0x49\n\tRTM_DELCHAIN                                = 0x65\n\tRTM_DELLINK                                 = 0x11\n\tRTM_DELLINKPROP                             = 0x6d\n\tRTM_DELMDB                                  = 0x55\n\tRTM_DELNEIGH                                = 0x1d\n\tRTM_DELNETCONF                              = 0x51\n\tRTM_DELNEXTHOP                              = 0x69\n\tRTM_DELNEXTHOPBUCKET                        = 0x75\n\tRTM_DELNSID                                 = 0x59\n\tRTM_DELQDISC                                = 0x25\n\tRTM_DELROUTE                                = 0x19\n\tRTM_DELRULE                                 = 0x21\n\tRTM_DELTCLASS                               = 0x29\n\tRTM_DELTFILTER                              = 0x2d\n\tRTM_DELTUNNEL                               = 0x79\n\tRTM_DELVLAN                                 = 0x71\n\tRTM_F_CLONED                                = 0x200\n\tRTM_F_EQUALIZE                              = 0x400\n\tRTM_F_FIB_MATCH                             = 0x2000\n\tRTM_F_LOOKUP_TABLE                          = 0x1000\n\tRTM_F_NOTIFY                                = 0x100\n\tRTM_F_OFFLOAD                               = 0x4000\n\tRTM_F_OFFLOAD_FAILED                        = 0x20000000\n\tRTM_F_PREFIX                                = 0x800\n\tRTM_F_TRAP                                  = 0x8000\n\tRTM_GETACTION                               = 0x32\n\tRTM_GETADDR                                 = 0x16\n\tRTM_GETADDRLABEL                            = 0x4a\n\tRTM_GETANYCAST                              = 0x3e\n\tRTM_GETCHAIN                                = 0x66\n\tRTM_GETDCB                                  = 0x4e\n\tRTM_GETLINK                                 = 0x12\n\tRTM_GETLINKPROP                             = 0x6e\n\tRTM_GETMDB                                  = 0x56\n\tRTM_GETMULTICAST                            = 0x3a\n\tRTM_GETNEIGH                                = 0x1e\n\tRTM_GETNEIGHTBL                             = 0x42\n\tRTM_GETNETCONF                              = 0x52\n\tRTM_GETNEXTHOP                              = 0x6a\n\tRTM_GETNEXTHOPBUCKET                        = 0x76\n\tRTM_GETNSID                                 = 0x5a\n\tRTM_GETQDISC                                = 0x26\n\tRTM_GETROUTE                                = 0x1a\n\tRTM_GETRULE                                 = 0x22\n\tRTM_GETSTATS                                = 0x5e\n\tRTM_GETTCLASS                               = 0x2a\n\tRTM_GETTFILTER                              = 0x2e\n\tRTM_GETTUNNEL                               = 0x7a\n\tRTM_GETVLAN                                 = 0x72\n\tRTM_MAX                                     = 0x7b\n\tRTM_NEWACTION                               = 0x30\n\tRTM_NEWADDR                                 = 0x14\n\tRTM_NEWADDRLABEL                            = 0x48\n\tRTM_NEWCACHEREPORT                          = 0x60\n\tRTM_NEWCHAIN                                = 0x64\n\tRTM_NEWLINK                                 = 0x10\n\tRTM_NEWLINKPROP                             = 0x6c\n\tRTM_NEWMDB                                  = 0x54\n\tRTM_NEWNDUSEROPT                            = 0x44\n\tRTM_NEWNEIGH                                = 0x1c\n\tRTM_NEWNEIGHTBL                             = 0x40\n\tRTM_NEWNETCONF                              = 0x50\n\tRTM_NEWNEXTHOP                              = 0x68\n\tRTM_NEWNEXTHOPBUCKET                        = 0x74\n\tRTM_NEWNSID                                 = 0x58\n\tRTM_NEWPREFIX                               = 0x34\n\tRTM_NEWQDISC                                = 0x24\n\tRTM_NEWROUTE                                = 0x18\n\tRTM_NEWRULE                                 = 0x20\n\tRTM_NEWSTATS                                = 0x5c\n\tRTM_NEWTCLASS                               = 0x28\n\tRTM_NEWTFILTER                              = 0x2c\n\tRTM_NEWTUNNEL                               = 0x78\n\tRTM_NEWVLAN                                 = 0x70\n\tRTM_NR_FAMILIES                             = 0x1b\n\tRTM_NR_MSGTYPES                             = 0x6c\n\tRTM_SETDCB                                  = 0x4f\n\tRTM_SETLINK                                 = 0x13\n\tRTM_SETNEIGHTBL                             = 0x43\n\tRTM_SETSTATS                                = 0x5f\n\tRTNH_ALIGNTO                                = 0x4\n\tRTNH_COMPARE_MASK                           = 0x59\n\tRTNH_F_DEAD                                 = 0x1\n\tRTNH_F_LINKDOWN                             = 0x10\n\tRTNH_F_OFFLOAD                              = 0x8\n\tRTNH_F_ONLINK                               = 0x4\n\tRTNH_F_PERVASIVE                            = 0x2\n\tRTNH_F_TRAP                                 = 0x40\n\tRTNH_F_UNRESOLVED                           = 0x20\n\tRTN_MAX                                     = 0xb\n\tRTPROT_BABEL                                = 0x2a\n\tRTPROT_BGP                                  = 0xba\n\tRTPROT_BIRD                                 = 0xc\n\tRTPROT_BOOT                                 = 0x3\n\tRTPROT_DHCP                                 = 0x10\n\tRTPROT_DNROUTED                             = 0xd\n\tRTPROT_EIGRP                                = 0xc0\n\tRTPROT_GATED                                = 0x8\n\tRTPROT_ISIS                                 = 0xbb\n\tRTPROT_KEEPALIVED                           = 0x12\n\tRTPROT_KERNEL                               = 0x2\n\tRTPROT_MROUTED                              = 0x11\n\tRTPROT_MRT                                  = 0xa\n\tRTPROT_NTK                                  = 0xf\n\tRTPROT_OPENR                                = 0x63\n\tRTPROT_OSPF                                 = 0xbc\n\tRTPROT_RA                                   = 0x9\n\tRTPROT_REDIRECT                             = 0x1\n\tRTPROT_RIP                                  = 0xbd\n\tRTPROT_STATIC                               = 0x4\n\tRTPROT_UNSPEC                               = 0x0\n\tRTPROT_XORP                                 = 0xe\n\tRTPROT_ZEBRA                                = 0xb\n\tRT_CLASS_DEFAULT                            = 0xfd\n\tRT_CLASS_LOCAL                              = 0xff\n\tRT_CLASS_MAIN                               = 0xfe\n\tRT_CLASS_MAX                                = 0xff\n\tRT_CLASS_UNSPEC                             = 0x0\n\tRUSAGE_CHILDREN                             = -0x1\n\tRUSAGE_SELF                                 = 0x0\n\tRUSAGE_THREAD                               = 0x1\n\tRWF_APPEND                                  = 0x10\n\tRWF_ATOMIC                                  = 0x40\n\tRWF_DSYNC                                   = 0x2\n\tRWF_HIPRI                                   = 0x1\n\tRWF_NOAPPEND                                = 0x20\n\tRWF_NOWAIT                                  = 0x8\n\tRWF_SUPPORTED                               = 0x7f\n\tRWF_SYNC                                    = 0x4\n\tRWF_WRITE_LIFE_NOT_SET                      = 0x0\n\tSCHED_BATCH                                 = 0x3\n\tSCHED_DEADLINE                              = 0x6\n\tSCHED_EXT                                   = 0x7\n\tSCHED_FIFO                                  = 0x1\n\tSCHED_FLAG_ALL                              = 0x7f\n\tSCHED_FLAG_DL_OVERRUN                       = 0x4\n\tSCHED_FLAG_KEEP_ALL                         = 0x18\n\tSCHED_FLAG_KEEP_PARAMS                      = 0x10\n\tSCHED_FLAG_KEEP_POLICY                      = 0x8\n\tSCHED_FLAG_RECLAIM                          = 0x2\n\tSCHED_FLAG_RESET_ON_FORK                    = 0x1\n\tSCHED_FLAG_UTIL_CLAMP                       = 0x60\n\tSCHED_FLAG_UTIL_CLAMP_MAX                   = 0x40\n\tSCHED_FLAG_UTIL_CLAMP_MIN                   = 0x20\n\tSCHED_IDLE                                  = 0x5\n\tSCHED_NORMAL                                = 0x0\n\tSCHED_RESET_ON_FORK                         = 0x40000000\n\tSCHED_RR                                    = 0x2\n\tSCM_CREDENTIALS                             = 0x2\n\tSCM_PIDFD                                   = 0x4\n\tSCM_RIGHTS                                  = 0x1\n\tSCM_SECURITY                                = 0x3\n\tSCM_TIMESTAMP                               = 0x1d\n\tSC_LOG_FLUSH                                = 0x100000\n\tSECCOMP_ADDFD_FLAG_SEND                     = 0x2\n\tSECCOMP_ADDFD_FLAG_SETFD                    = 0x1\n\tSECCOMP_FILTER_FLAG_LOG                     = 0x2\n\tSECCOMP_FILTER_FLAG_NEW_LISTENER            = 0x8\n\tSECCOMP_FILTER_FLAG_SPEC_ALLOW              = 0x4\n\tSECCOMP_FILTER_FLAG_TSYNC                   = 0x1\n\tSECCOMP_FILTER_FLAG_TSYNC_ESRCH             = 0x10\n\tSECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV      = 0x20\n\tSECCOMP_GET_ACTION_AVAIL                    = 0x2\n\tSECCOMP_GET_NOTIF_SIZES                     = 0x3\n\tSECCOMP_IOCTL_NOTIF_RECV                    = 0xc0502100\n\tSECCOMP_IOCTL_NOTIF_SEND                    = 0xc0182101\n\tSECCOMP_IOC_MAGIC                           = '!'\n\tSECCOMP_MODE_DISABLED                       = 0x0\n\tSECCOMP_MODE_FILTER                         = 0x2\n\tSECCOMP_MODE_STRICT                         = 0x1\n\tSECCOMP_RET_ACTION                          = 0x7fff0000\n\tSECCOMP_RET_ACTION_FULL                     = 0xffff0000\n\tSECCOMP_RET_ALLOW                           = 0x7fff0000\n\tSECCOMP_RET_DATA                            = 0xffff\n\tSECCOMP_RET_ERRNO                           = 0x50000\n\tSECCOMP_RET_KILL                            = 0x0\n\tSECCOMP_RET_KILL_PROCESS                    = 0x80000000\n\tSECCOMP_RET_KILL_THREAD                     = 0x0\n\tSECCOMP_RET_LOG                             = 0x7ffc0000\n\tSECCOMP_RET_TRACE                           = 0x7ff00000\n\tSECCOMP_RET_TRAP                            = 0x30000\n\tSECCOMP_RET_USER_NOTIF                      = 0x7fc00000\n\tSECCOMP_SET_MODE_FILTER                     = 0x1\n\tSECCOMP_SET_MODE_STRICT                     = 0x0\n\tSECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP          = 0x1\n\tSECCOMP_USER_NOTIF_FLAG_CONTINUE            = 0x1\n\tSECRETMEM_MAGIC                             = 0x5345434d\n\tSECURITYFS_MAGIC                            = 0x73636673\n\tSEEK_CUR                                    = 0x1\n\tSEEK_DATA                                   = 0x3\n\tSEEK_END                                    = 0x2\n\tSEEK_HOLE                                   = 0x4\n\tSEEK_MAX                                    = 0x4\n\tSEEK_SET                                    = 0x0\n\tSELINUX_MAGIC                               = 0xf97cff8c\n\tSHUT_RD                                     = 0x0\n\tSHUT_RDWR                                   = 0x2\n\tSHUT_WR                                     = 0x1\n\tSIOCADDDLCI                                 = 0x8980\n\tSIOCADDMULTI                                = 0x8931\n\tSIOCADDRT                                   = 0x890b\n\tSIOCBONDCHANGEACTIVE                        = 0x8995\n\tSIOCBONDENSLAVE                             = 0x8990\n\tSIOCBONDINFOQUERY                           = 0x8994\n\tSIOCBONDRELEASE                             = 0x8991\n\tSIOCBONDSETHWADDR                           = 0x8992\n\tSIOCBONDSLAVEINFOQUERY                      = 0x8993\n\tSIOCBRADDBR                                 = 0x89a0\n\tSIOCBRADDIF                                 = 0x89a2\n\tSIOCBRDELBR                                 = 0x89a1\n\tSIOCBRDELIF                                 = 0x89a3\n\tSIOCDARP                                    = 0x8953\n\tSIOCDELDLCI                                 = 0x8981\n\tSIOCDELMULTI                                = 0x8932\n\tSIOCDELRT                                   = 0x890c\n\tSIOCDEVPRIVATE                              = 0x89f0\n\tSIOCDIFADDR                                 = 0x8936\n\tSIOCDRARP                                   = 0x8960\n\tSIOCETHTOOL                                 = 0x8946\n\tSIOCGARP                                    = 0x8954\n\tSIOCGETLINKNAME                             = 0x89e0\n\tSIOCGETNODEID                               = 0x89e1\n\tSIOCGHWTSTAMP                               = 0x89b1\n\tSIOCGIFADDR                                 = 0x8915\n\tSIOCGIFBR                                   = 0x8940\n\tSIOCGIFBRDADDR                              = 0x8919\n\tSIOCGIFCONF                                 = 0x8912\n\tSIOCGIFCOUNT                                = 0x8938\n\tSIOCGIFDSTADDR                              = 0x8917\n\tSIOCGIFENCAP                                = 0x8925\n\tSIOCGIFFLAGS                                = 0x8913\n\tSIOCGIFHWADDR                               = 0x8927\n\tSIOCGIFINDEX                                = 0x8933\n\tSIOCGIFMAP                                  = 0x8970\n\tSIOCGIFMEM                                  = 0x891f\n\tSIOCGIFMETRIC                               = 0x891d\n\tSIOCGIFMTU                                  = 0x8921\n\tSIOCGIFNAME                                 = 0x8910\n\tSIOCGIFNETMASK                              = 0x891b\n\tSIOCGIFPFLAGS                               = 0x8935\n\tSIOCGIFSLAVE                                = 0x8929\n\tSIOCGIFTXQLEN                               = 0x8942\n\tSIOCGIFVLAN                                 = 0x8982\n\tSIOCGMIIPHY                                 = 0x8947\n\tSIOCGMIIREG                                 = 0x8948\n\tSIOCGPPPCSTATS                              = 0x89f2\n\tSIOCGPPPSTATS                               = 0x89f0\n\tSIOCGPPPVER                                 = 0x89f1\n\tSIOCGRARP                                   = 0x8961\n\tSIOCGSKNS                                   = 0x894c\n\tSIOCGSTAMP                                  = 0x8906\n\tSIOCGSTAMPNS                                = 0x8907\n\tSIOCGSTAMPNS_OLD                            = 0x8907\n\tSIOCGSTAMP_OLD                              = 0x8906\n\tSIOCKCMATTACH                               = 0x89e0\n\tSIOCKCMCLONE                                = 0x89e2\n\tSIOCKCMUNATTACH                             = 0x89e1\n\tSIOCOUTQNSD                                 = 0x894b\n\tSIOCPROTOPRIVATE                            = 0x89e0\n\tSIOCRTMSG                                   = 0x890d\n\tSIOCSARP                                    = 0x8955\n\tSIOCSHWTSTAMP                               = 0x89b0\n\tSIOCSIFADDR                                 = 0x8916\n\tSIOCSIFBR                                   = 0x8941\n\tSIOCSIFBRDADDR                              = 0x891a\n\tSIOCSIFDSTADDR                              = 0x8918\n\tSIOCSIFENCAP                                = 0x8926\n\tSIOCSIFFLAGS                                = 0x8914\n\tSIOCSIFHWADDR                               = 0x8924\n\tSIOCSIFHWBROADCAST                          = 0x8937\n\tSIOCSIFLINK                                 = 0x8911\n\tSIOCSIFMAP                                  = 0x8971\n\tSIOCSIFMEM                                  = 0x8920\n\tSIOCSIFMETRIC                               = 0x891e\n\tSIOCSIFMTU                                  = 0x8922\n\tSIOCSIFNAME                                 = 0x8923\n\tSIOCSIFNETMASK                              = 0x891c\n\tSIOCSIFPFLAGS                               = 0x8934\n\tSIOCSIFSLAVE                                = 0x8930\n\tSIOCSIFTXQLEN                               = 0x8943\n\tSIOCSIFVLAN                                 = 0x8983\n\tSIOCSMIIREG                                 = 0x8949\n\tSIOCSRARP                                   = 0x8962\n\tSIOCWANDEV                                  = 0x894a\n\tSK_DIAG_BPF_STORAGE_MAX                     = 0x3\n\tSK_DIAG_BPF_STORAGE_REQ_MAX                 = 0x1\n\tSMACK_MAGIC                                 = 0x43415d53\n\tSMART_AUTOSAVE                              = 0xd2\n\tSMART_AUTO_OFFLINE                          = 0xdb\n\tSMART_DISABLE                               = 0xd9\n\tSMART_ENABLE                                = 0xd8\n\tSMART_HCYL_PASS                             = 0xc2\n\tSMART_IMMEDIATE_OFFLINE                     = 0xd4\n\tSMART_LCYL_PASS                             = 0x4f\n\tSMART_READ_LOG_SECTOR                       = 0xd5\n\tSMART_READ_THRESHOLDS                       = 0xd1\n\tSMART_READ_VALUES                           = 0xd0\n\tSMART_SAVE                                  = 0xd3\n\tSMART_STATUS                                = 0xda\n\tSMART_WRITE_LOG_SECTOR                      = 0xd6\n\tSMART_WRITE_THRESHOLDS                      = 0xd7\n\tSMB2_SUPER_MAGIC                            = 0xfe534d42\n\tSMB_SUPER_MAGIC                             = 0x517b\n\tSOCKFS_MAGIC                                = 0x534f434b\n\tSOCK_BUF_LOCK_MASK                          = 0x3\n\tSOCK_DCCP                                   = 0x6\n\tSOCK_DESTROY                                = 0x15\n\tSOCK_DIAG_BY_FAMILY                         = 0x14\n\tSOCK_IOC_TYPE                               = 0x89\n\tSOCK_PACKET                                 = 0xa\n\tSOCK_RAW                                    = 0x3\n\tSOCK_RCVBUF_LOCK                            = 0x2\n\tSOCK_RDM                                    = 0x4\n\tSOCK_SEQPACKET                              = 0x5\n\tSOCK_SNDBUF_LOCK                            = 0x1\n\tSOCK_TXREHASH_DEFAULT                       = 0xff\n\tSOCK_TXREHASH_DISABLED                      = 0x0\n\tSOCK_TXREHASH_ENABLED                       = 0x1\n\tSOL_AAL                                     = 0x109\n\tSOL_ALG                                     = 0x117\n\tSOL_ATM                                     = 0x108\n\tSOL_CAIF                                    = 0x116\n\tSOL_CAN_BASE                                = 0x64\n\tSOL_CAN_RAW                                 = 0x65\n\tSOL_DCCP                                    = 0x10d\n\tSOL_DECNET                                  = 0x105\n\tSOL_ICMPV6                                  = 0x3a\n\tSOL_IP                                      = 0x0\n\tSOL_IPV6                                    = 0x29\n\tSOL_IRDA                                    = 0x10a\n\tSOL_IUCV                                    = 0x115\n\tSOL_KCM                                     = 0x119\n\tSOL_LLC                                     = 0x10c\n\tSOL_MCTP                                    = 0x11d\n\tSOL_MPTCP                                   = 0x11c\n\tSOL_NETBEUI                                 = 0x10b\n\tSOL_NETLINK                                 = 0x10e\n\tSOL_NFC                                     = 0x118\n\tSOL_PACKET                                  = 0x107\n\tSOL_PNPIPE                                  = 0x113\n\tSOL_PPPOL2TP                                = 0x111\n\tSOL_RAW                                     = 0xff\n\tSOL_RDS                                     = 0x114\n\tSOL_RXRPC                                   = 0x110\n\tSOL_SMC                                     = 0x11e\n\tSOL_TCP                                     = 0x6\n\tSOL_TIPC                                    = 0x10f\n\tSOL_TLS                                     = 0x11a\n\tSOL_UDP                                     = 0x11\n\tSOL_VSOCK                                   = 0x11f\n\tSOL_X25                                     = 0x106\n\tSOL_XDP                                     = 0x11b\n\tSOMAXCONN                                   = 0x1000\n\tSO_ATTACH_FILTER                            = 0x1a\n\tSO_DEBUG                                    = 0x1\n\tSO_DETACH_BPF                               = 0x1b\n\tSO_DETACH_FILTER                            = 0x1b\n\tSO_EE_CODE_TXTIME_INVALID_PARAM             = 0x1\n\tSO_EE_CODE_TXTIME_MISSED                    = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED                  = 0x1\n\tSO_EE_ORIGIN_ICMP                           = 0x2\n\tSO_EE_ORIGIN_ICMP6                          = 0x3\n\tSO_EE_ORIGIN_LOCAL                          = 0x1\n\tSO_EE_ORIGIN_NONE                           = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING                   = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                       = 0x4\n\tSO_EE_ORIGIN_TXTIME                         = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                       = 0x5\n\tSO_EE_RFC4884_FLAG_INVALID                  = 0x1\n\tSO_GET_FILTER                               = 0x1a\n\tSO_NO_CHECK                                 = 0xb\n\tSO_PEERNAME                                 = 0x1c\n\tSO_PRIORITY                                 = 0xc\n\tSO_TIMESTAMP                                = 0x1d\n\tSO_TIMESTAMP_OLD                            = 0x1d\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE               = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE               = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE                   = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT               = 0x6\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT_NEW           = 0x8\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT_OLD           = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX                 = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID               = 0x3\n\tSO_VM_SOCKETS_TRUSTED                       = 0x5\n\tSPLICE_F_GIFT                               = 0x8\n\tSPLICE_F_MORE                               = 0x4\n\tSPLICE_F_MOVE                               = 0x1\n\tSPLICE_F_NONBLOCK                           = 0x2\n\tSQUASHFS_MAGIC                              = 0x73717368\n\tSTACK_END_MAGIC                             = 0x57ac6e9d\n\tSTATX_ALL                                   = 0xfff\n\tSTATX_ATIME                                 = 0x20\n\tSTATX_ATTR_APPEND                           = 0x20\n\tSTATX_ATTR_AUTOMOUNT                        = 0x1000\n\tSTATX_ATTR_COMPRESSED                       = 0x4\n\tSTATX_ATTR_DAX                              = 0x200000\n\tSTATX_ATTR_ENCRYPTED                        = 0x800\n\tSTATX_ATTR_IMMUTABLE                        = 0x10\n\tSTATX_ATTR_MOUNT_ROOT                       = 0x2000\n\tSTATX_ATTR_NODUMP                           = 0x40\n\tSTATX_ATTR_VERITY                           = 0x100000\n\tSTATX_ATTR_WRITE_ATOMIC                     = 0x400000\n\tSTATX_BASIC_STATS                           = 0x7ff\n\tSTATX_BLOCKS                                = 0x400\n\tSTATX_BTIME                                 = 0x800\n\tSTATX_CTIME                                 = 0x80\n\tSTATX_DIOALIGN                              = 0x2000\n\tSTATX_GID                                   = 0x10\n\tSTATX_INO                                   = 0x100\n\tSTATX_MNT_ID                                = 0x1000\n\tSTATX_MNT_ID_UNIQUE                         = 0x4000\n\tSTATX_MODE                                  = 0x2\n\tSTATX_MTIME                                 = 0x40\n\tSTATX_NLINK                                 = 0x4\n\tSTATX_SIZE                                  = 0x200\n\tSTATX_SUBVOL                                = 0x8000\n\tSTATX_TYPE                                  = 0x1\n\tSTATX_UID                                   = 0x8\n\tSTATX_WRITE_ATOMIC                          = 0x10000\n\tSTATX__RESERVED                             = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER                  = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE                 = 0x1\n\tSYNC_FILE_RANGE_WRITE                       = 0x2\n\tSYNC_FILE_RANGE_WRITE_AND_WAIT              = 0x7\n\tSYSFS_MAGIC                                 = 0x62656572\n\tS_BLKSIZE                                   = 0x200\n\tS_IEXEC                                     = 0x40\n\tS_IFBLK                                     = 0x6000\n\tS_IFCHR                                     = 0x2000\n\tS_IFDIR                                     = 0x4000\n\tS_IFIFO                                     = 0x1000\n\tS_IFLNK                                     = 0xa000\n\tS_IFMT                                      = 0xf000\n\tS_IFREG                                     = 0x8000\n\tS_IFSOCK                                    = 0xc000\n\tS_IREAD                                     = 0x100\n\tS_IRGRP                                     = 0x20\n\tS_IROTH                                     = 0x4\n\tS_IRUSR                                     = 0x100\n\tS_IRWXG                                     = 0x38\n\tS_IRWXO                                     = 0x7\n\tS_IRWXU                                     = 0x1c0\n\tS_ISGID                                     = 0x400\n\tS_ISUID                                     = 0x800\n\tS_ISVTX                                     = 0x200\n\tS_IWGRP                                     = 0x10\n\tS_IWOTH                                     = 0x2\n\tS_IWRITE                                    = 0x80\n\tS_IWUSR                                     = 0x80\n\tS_IXGRP                                     = 0x8\n\tS_IXOTH                                     = 0x1\n\tS_IXUSR                                     = 0x40\n\tTAB0                                        = 0x0\n\tTASKSTATS_CMD_ATTR_MAX                      = 0x4\n\tTASKSTATS_CMD_MAX                           = 0x2\n\tTASKSTATS_GENL_NAME                         = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION                      = 0x1\n\tTASKSTATS_TYPE_MAX                          = 0x6\n\tTASKSTATS_VERSION                           = 0xe\n\tTCIFLUSH                                    = 0x0\n\tTCIOFF                                      = 0x2\n\tTCIOFLUSH                                   = 0x2\n\tTCION                                       = 0x3\n\tTCOFLUSH                                    = 0x1\n\tTCOOFF                                      = 0x0\n\tTCOON                                       = 0x1\n\tTCPOPT_EOL                                  = 0x0\n\tTCPOPT_MAXSEG                               = 0x2\n\tTCPOPT_NOP                                  = 0x1\n\tTCPOPT_SACK                                 = 0x5\n\tTCPOPT_SACK_PERMITTED                       = 0x4\n\tTCPOPT_TIMESTAMP                            = 0x8\n\tTCPOPT_TSTAMP_HDR                           = 0x101080a\n\tTCPOPT_WINDOW                               = 0x3\n\tTCP_CC_INFO                                 = 0x1a\n\tTCP_CM_INQ                                  = 0x24\n\tTCP_CONGESTION                              = 0xd\n\tTCP_COOKIE_IN_ALWAYS                        = 0x1\n\tTCP_COOKIE_MAX                              = 0x10\n\tTCP_COOKIE_MIN                              = 0x8\n\tTCP_COOKIE_OUT_NEVER                        = 0x2\n\tTCP_COOKIE_PAIR_SIZE                        = 0x20\n\tTCP_COOKIE_TRANSACTIONS                     = 0xf\n\tTCP_CORK                                    = 0x3\n\tTCP_DEFER_ACCEPT                            = 0x9\n\tTCP_FASTOPEN                                = 0x17\n\tTCP_FASTOPEN_CONNECT                        = 0x1e\n\tTCP_FASTOPEN_KEY                            = 0x21\n\tTCP_FASTOPEN_NO_COOKIE                      = 0x22\n\tTCP_INFO                                    = 0xb\n\tTCP_INQ                                     = 0x24\n\tTCP_KEEPCNT                                 = 0x6\n\tTCP_KEEPIDLE                                = 0x4\n\tTCP_KEEPINTVL                               = 0x5\n\tTCP_LINGER2                                 = 0x8\n\tTCP_MAXSEG                                  = 0x2\n\tTCP_MAXWIN                                  = 0xffff\n\tTCP_MAX_WINSHIFT                            = 0xe\n\tTCP_MD5SIG                                  = 0xe\n\tTCP_MD5SIG_EXT                              = 0x20\n\tTCP_MD5SIG_FLAG_IFINDEX                     = 0x2\n\tTCP_MD5SIG_FLAG_PREFIX                      = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                        = 0x50\n\tTCP_MSS                                     = 0x200\n\tTCP_MSS_DEFAULT                             = 0x218\n\tTCP_MSS_DESIRED                             = 0x4c4\n\tTCP_NODELAY                                 = 0x1\n\tTCP_NOTSENT_LOWAT                           = 0x19\n\tTCP_QUEUE_SEQ                               = 0x15\n\tTCP_QUICKACK                                = 0xc\n\tTCP_REPAIR                                  = 0x13\n\tTCP_REPAIR_OFF                              = 0x0\n\tTCP_REPAIR_OFF_NO_WP                        = -0x1\n\tTCP_REPAIR_ON                               = 0x1\n\tTCP_REPAIR_OPTIONS                          = 0x16\n\tTCP_REPAIR_QUEUE                            = 0x14\n\tTCP_REPAIR_WINDOW                           = 0x1d\n\tTCP_SAVED_SYN                               = 0x1c\n\tTCP_SAVE_SYN                                = 0x1b\n\tTCP_SYNCNT                                  = 0x7\n\tTCP_S_DATA_IN                               = 0x4\n\tTCP_S_DATA_OUT                              = 0x8\n\tTCP_THIN_DUPACK                             = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS                    = 0x10\n\tTCP_TIMESTAMP                               = 0x18\n\tTCP_TX_DELAY                                = 0x25\n\tTCP_ULP                                     = 0x1f\n\tTCP_USER_TIMEOUT                            = 0x12\n\tTCP_V4_FLOW                                 = 0x1\n\tTCP_V6_FLOW                                 = 0x5\n\tTCP_WINDOW_CLAMP                            = 0xa\n\tTCP_ZEROCOPY_RECEIVE                        = 0x23\n\tTFD_TIMER_ABSTIME                           = 0x1\n\tTFD_TIMER_CANCEL_ON_SET                     = 0x2\n\tTIMER_ABSTIME                               = 0x1\n\tTIOCM_DTR                                   = 0x2\n\tTIOCM_LE                                    = 0x1\n\tTIOCM_RTS                                   = 0x4\n\tTIOCPKT_DATA                                = 0x0\n\tTIOCPKT_DOSTOP                              = 0x20\n\tTIOCPKT_FLUSHREAD                           = 0x1\n\tTIOCPKT_FLUSHWRITE                          = 0x2\n\tTIOCPKT_IOCTL                               = 0x40\n\tTIOCPKT_NOSTOP                              = 0x10\n\tTIOCPKT_START                               = 0x8\n\tTIOCPKT_STOP                                = 0x4\n\tTIPC_ADDR_ID                                = 0x3\n\tTIPC_ADDR_MCAST                             = 0x1\n\tTIPC_ADDR_NAME                              = 0x2\n\tTIPC_ADDR_NAMESEQ                           = 0x1\n\tTIPC_AEAD_ALG_NAME                          = 0x20\n\tTIPC_AEAD_KEYLEN_MAX                        = 0x24\n\tTIPC_AEAD_KEYLEN_MIN                        = 0x14\n\tTIPC_AEAD_KEY_SIZE_MAX                      = 0x48\n\tTIPC_CFG_SRV                                = 0x0\n\tTIPC_CLUSTER_BITS                           = 0xc\n\tTIPC_CLUSTER_MASK                           = 0xfff000\n\tTIPC_CLUSTER_OFFSET                         = 0xc\n\tTIPC_CLUSTER_SIZE                           = 0xfff\n\tTIPC_CONN_SHUTDOWN                          = 0x5\n\tTIPC_CONN_TIMEOUT                           = 0x82\n\tTIPC_CRITICAL_IMPORTANCE                    = 0x3\n\tTIPC_DESTNAME                               = 0x3\n\tTIPC_DEST_DROPPABLE                         = 0x81\n\tTIPC_ERRINFO                                = 0x1\n\tTIPC_ERR_NO_NAME                            = 0x1\n\tTIPC_ERR_NO_NODE                            = 0x3\n\tTIPC_ERR_NO_PORT                            = 0x2\n\tTIPC_ERR_OVERLOAD                           = 0x4\n\tTIPC_GROUP_JOIN                             = 0x87\n\tTIPC_GROUP_LEAVE                            = 0x88\n\tTIPC_GROUP_LOOPBACK                         = 0x1\n\tTIPC_GROUP_MEMBER_EVTS                      = 0x2\n\tTIPC_HIGH_IMPORTANCE                        = 0x2\n\tTIPC_IMPORTANCE                             = 0x7f\n\tTIPC_LINK_STATE                             = 0x2\n\tTIPC_LOW_IMPORTANCE                         = 0x0\n\tTIPC_MAX_BEARER_NAME                        = 0x20\n\tTIPC_MAX_IF_NAME                            = 0x10\n\tTIPC_MAX_LINK_NAME                          = 0x44\n\tTIPC_MAX_MEDIA_NAME                         = 0x10\n\tTIPC_MAX_USER_MSG_SIZE                      = 0x101d0\n\tTIPC_MCAST_BROADCAST                        = 0x85\n\tTIPC_MCAST_REPLICAST                        = 0x86\n\tTIPC_MEDIUM_IMPORTANCE                      = 0x1\n\tTIPC_NODEID_LEN                             = 0x10\n\tTIPC_NODELAY                                = 0x8a\n\tTIPC_NODE_BITS                              = 0xc\n\tTIPC_NODE_MASK                              = 0xfff\n\tTIPC_NODE_OFFSET                            = 0x0\n\tTIPC_NODE_RECVQ_DEPTH                       = 0x83\n\tTIPC_NODE_SIZE                              = 0xfff\n\tTIPC_NODE_STATE                             = 0x0\n\tTIPC_OK                                     = 0x0\n\tTIPC_PUBLISHED                              = 0x1\n\tTIPC_REKEYING_NOW                           = 0xffffffff\n\tTIPC_RESERVED_TYPES                         = 0x40\n\tTIPC_RETDATA                                = 0x2\n\tTIPC_SERVICE_ADDR                           = 0x2\n\tTIPC_SERVICE_RANGE                          = 0x1\n\tTIPC_SOCKET_ADDR                            = 0x3\n\tTIPC_SOCK_RECVQ_DEPTH                       = 0x84\n\tTIPC_SOCK_RECVQ_USED                        = 0x89\n\tTIPC_SRC_DROPPABLE                          = 0x80\n\tTIPC_SUBSCR_TIMEOUT                         = 0x3\n\tTIPC_SUB_CANCEL                             = 0x4\n\tTIPC_SUB_PORTS                              = 0x1\n\tTIPC_SUB_SERVICE                            = 0x2\n\tTIPC_TOP_SRV                                = 0x1\n\tTIPC_WAIT_FOREVER                           = 0xffffffff\n\tTIPC_WITHDRAWN                              = 0x2\n\tTIPC_ZONE_BITS                              = 0x8\n\tTIPC_ZONE_CLUSTER_MASK                      = 0xfffff000\n\tTIPC_ZONE_MASK                              = 0xff000000\n\tTIPC_ZONE_OFFSET                            = 0x18\n\tTIPC_ZONE_SCOPE                             = 0x1\n\tTIPC_ZONE_SIZE                              = 0xff\n\tTMPFS_MAGIC                                 = 0x1021994\n\tTPACKET_ALIGNMENT                           = 0x10\n\tTPACKET_HDRLEN                              = 0x34\n\tTP_STATUS_AVAILABLE                         = 0x0\n\tTP_STATUS_BLK_TMO                           = 0x20\n\tTP_STATUS_COPY                              = 0x2\n\tTP_STATUS_CSUMNOTREADY                      = 0x8\n\tTP_STATUS_CSUM_VALID                        = 0x80\n\tTP_STATUS_GSO_TCP                           = 0x100\n\tTP_STATUS_KERNEL                            = 0x0\n\tTP_STATUS_LOSING                            = 0x4\n\tTP_STATUS_SENDING                           = 0x2\n\tTP_STATUS_SEND_REQUEST                      = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE                   = 0x80000000\n\tTP_STATUS_TS_SOFTWARE                       = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE                   = 0x40000000\n\tTP_STATUS_USER                              = 0x1\n\tTP_STATUS_VLAN_TPID_VALID                   = 0x40\n\tTP_STATUS_VLAN_VALID                        = 0x10\n\tTP_STATUS_WRONG_FORMAT                      = 0x4\n\tTRACEFS_MAGIC                               = 0x74726163\n\tTS_COMM_LEN                                 = 0x20\n\tUDF_SUPER_MAGIC                             = 0x15013346\n\tUDP_CORK                                    = 0x1\n\tUDP_ENCAP                                   = 0x64\n\tUDP_ENCAP_ESPINUDP                          = 0x2\n\tUDP_ENCAP_ESPINUDP_NON_IKE                  = 0x1\n\tUDP_ENCAP_GTP0                              = 0x4\n\tUDP_ENCAP_GTP1U                             = 0x5\n\tUDP_ENCAP_L2TPINUDP                         = 0x3\n\tUDP_GRO                                     = 0x68\n\tUDP_NO_CHECK6_RX                            = 0x66\n\tUDP_NO_CHECK6_TX                            = 0x65\n\tUDP_SEGMENT                                 = 0x67\n\tUDP_V4_FLOW                                 = 0x2\n\tUDP_V6_FLOW                                 = 0x6\n\tUMOUNT_NOFOLLOW                             = 0x8\n\tUSBDEVICE_SUPER_MAGIC                       = 0x9fa2\n\tUTIME_NOW                                   = 0x3fffffff\n\tUTIME_OMIT                                  = 0x3ffffffe\n\tV9FS_MAGIC                                  = 0x1021997\n\tVERASE                                      = 0x2\n\tVINTR                                       = 0x0\n\tVKILL                                       = 0x3\n\tVLNEXT                                      = 0xf\n\tVMADDR_CID_ANY                              = 0xffffffff\n\tVMADDR_CID_HOST                             = 0x2\n\tVMADDR_CID_HYPERVISOR                       = 0x0\n\tVMADDR_CID_LOCAL                            = 0x1\n\tVMADDR_FLAG_TO_HOST                         = 0x1\n\tVMADDR_PORT_ANY                             = 0xffffffff\n\tVM_SOCKETS_INVALID_VERSION                  = 0xffffffff\n\tVQUIT                                       = 0x1\n\tVT0                                         = 0x0\n\tWAKE_MAGIC                                  = 0x20\n\tWALL                                        = 0x40000000\n\tWCLONE                                      = 0x80000000\n\tWCONTINUED                                  = 0x8\n\tWDIOC_SETPRETIMEOUT                         = 0xc0045708\n\tWDIOC_SETTIMEOUT                            = 0xc0045706\n\tWDIOF_ALARMONLY                             = 0x400\n\tWDIOF_CARDRESET                             = 0x20\n\tWDIOF_EXTERN1                               = 0x4\n\tWDIOF_EXTERN2                               = 0x8\n\tWDIOF_FANFAULT                              = 0x2\n\tWDIOF_KEEPALIVEPING                         = 0x8000\n\tWDIOF_MAGICCLOSE                            = 0x100\n\tWDIOF_OVERHEAT                              = 0x1\n\tWDIOF_POWEROVER                             = 0x40\n\tWDIOF_POWERUNDER                            = 0x10\n\tWDIOF_PRETIMEOUT                            = 0x200\n\tWDIOF_SETTIMEOUT                            = 0x80\n\tWDIOF_UNKNOWN                               = -0x1\n\tWDIOS_DISABLECARD                           = 0x1\n\tWDIOS_ENABLECARD                            = 0x2\n\tWDIOS_TEMPPANIC                             = 0x4\n\tWDIOS_UNKNOWN                               = -0x1\n\tWEXITED                                     = 0x4\n\tWGALLOWEDIP_A_MAX                           = 0x3\n\tWGDEVICE_A_MAX                              = 0x8\n\tWGPEER_A_MAX                                = 0xa\n\tWG_CMD_MAX                                  = 0x1\n\tWG_GENL_NAME                                = \"wireguard\"\n\tWG_GENL_VERSION                             = 0x1\n\tWG_KEY_LEN                                  = 0x20\n\tWIN_ACKMEDIACHANGE                          = 0xdb\n\tWIN_CHECKPOWERMODE1                         = 0xe5\n\tWIN_CHECKPOWERMODE2                         = 0x98\n\tWIN_DEVICE_RESET                            = 0x8\n\tWIN_DIAGNOSE                                = 0x90\n\tWIN_DOORLOCK                                = 0xde\n\tWIN_DOORUNLOCK                              = 0xdf\n\tWIN_DOWNLOAD_MICROCODE                      = 0x92\n\tWIN_FLUSH_CACHE                             = 0xe7\n\tWIN_FLUSH_CACHE_EXT                         = 0xea\n\tWIN_FORMAT                                  = 0x50\n\tWIN_GETMEDIASTATUS                          = 0xda\n\tWIN_IDENTIFY                                = 0xec\n\tWIN_IDENTIFY_DMA                            = 0xee\n\tWIN_IDLEIMMEDIATE                           = 0xe1\n\tWIN_INIT                                    = 0x60\n\tWIN_MEDIAEJECT                              = 0xed\n\tWIN_MULTREAD                                = 0xc4\n\tWIN_MULTREAD_EXT                            = 0x29\n\tWIN_MULTWRITE                               = 0xc5\n\tWIN_MULTWRITE_EXT                           = 0x39\n\tWIN_NOP                                     = 0x0\n\tWIN_PACKETCMD                               = 0xa0\n\tWIN_PIDENTIFY                               = 0xa1\n\tWIN_POSTBOOT                                = 0xdc\n\tWIN_PREBOOT                                 = 0xdd\n\tWIN_QUEUED_SERVICE                          = 0xa2\n\tWIN_READ                                    = 0x20\n\tWIN_READDMA                                 = 0xc8\n\tWIN_READDMA_EXT                             = 0x25\n\tWIN_READDMA_ONCE                            = 0xc9\n\tWIN_READDMA_QUEUED                          = 0xc7\n\tWIN_READDMA_QUEUED_EXT                      = 0x26\n\tWIN_READ_BUFFER                             = 0xe4\n\tWIN_READ_EXT                                = 0x24\n\tWIN_READ_LONG                               = 0x22\n\tWIN_READ_LONG_ONCE                          = 0x23\n\tWIN_READ_NATIVE_MAX                         = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT                     = 0x27\n\tWIN_READ_ONCE                               = 0x21\n\tWIN_RECAL                                   = 0x10\n\tWIN_RESTORE                                 = 0x10\n\tWIN_SECURITY_DISABLE                        = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE                  = 0xf3\n\tWIN_SECURITY_ERASE_UNIT                     = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK                    = 0xf5\n\tWIN_SECURITY_SET_PASS                       = 0xf1\n\tWIN_SECURITY_UNLOCK                         = 0xf2\n\tWIN_SEEK                                    = 0x70\n\tWIN_SETFEATURES                             = 0xef\n\tWIN_SETIDLE1                                = 0xe3\n\tWIN_SETIDLE2                                = 0x97\n\tWIN_SETMULT                                 = 0xc6\n\tWIN_SET_MAX                                 = 0xf9\n\tWIN_SET_MAX_EXT                             = 0x37\n\tWIN_SLEEPNOW1                               = 0xe6\n\tWIN_SLEEPNOW2                               = 0x99\n\tWIN_SMART                                   = 0xb0\n\tWIN_SPECIFY                                 = 0x91\n\tWIN_SRST                                    = 0x8\n\tWIN_STANDBY                                 = 0xe2\n\tWIN_STANDBY2                                = 0x96\n\tWIN_STANDBYNOW1                             = 0xe0\n\tWIN_STANDBYNOW2                             = 0x94\n\tWIN_VERIFY                                  = 0x40\n\tWIN_VERIFY_EXT                              = 0x42\n\tWIN_VERIFY_ONCE                             = 0x41\n\tWIN_WRITE                                   = 0x30\n\tWIN_WRITEDMA                                = 0xca\n\tWIN_WRITEDMA_EXT                            = 0x35\n\tWIN_WRITEDMA_ONCE                           = 0xcb\n\tWIN_WRITEDMA_QUEUED                         = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT                     = 0x36\n\tWIN_WRITE_BUFFER                            = 0xe8\n\tWIN_WRITE_EXT                               = 0x34\n\tWIN_WRITE_LONG                              = 0x32\n\tWIN_WRITE_LONG_ONCE                         = 0x33\n\tWIN_WRITE_ONCE                              = 0x31\n\tWIN_WRITE_SAME                              = 0xe9\n\tWIN_WRITE_VERIFY                            = 0x3c\n\tWNOHANG                                     = 0x1\n\tWNOTHREAD                                   = 0x20000000\n\tWNOWAIT                                     = 0x1000000\n\tWSTOPPED                                    = 0x2\n\tWUNTRACED                                   = 0x2\n\tXATTR_CREATE                                = 0x1\n\tXATTR_REPLACE                               = 0x2\n\tXDP_COPY                                    = 0x2\n\tXDP_FLAGS_DRV_MODE                          = 0x4\n\tXDP_FLAGS_HW_MODE                           = 0x8\n\tXDP_FLAGS_MASK                              = 0x1f\n\tXDP_FLAGS_MODES                             = 0xe\n\tXDP_FLAGS_REPLACE                           = 0x10\n\tXDP_FLAGS_SKB_MODE                          = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST                 = 0x1\n\tXDP_MMAP_OFFSETS                            = 0x1\n\tXDP_OPTIONS                                 = 0x8\n\tXDP_OPTIONS_ZEROCOPY                        = 0x1\n\tXDP_PACKET_HEADROOM                         = 0x100\n\tXDP_PGOFF_RX_RING                           = 0x0\n\tXDP_PGOFF_TX_RING                           = 0x80000000\n\tXDP_PKT_CONTD                               = 0x1\n\tXDP_RING_NEED_WAKEUP                        = 0x1\n\tXDP_RX_RING                                 = 0x2\n\tXDP_SHARED_UMEM                             = 0x1\n\tXDP_STATISTICS                              = 0x7\n\tXDP_TXMD_FLAGS_CHECKSUM                     = 0x2\n\tXDP_TXMD_FLAGS_TIMESTAMP                    = 0x1\n\tXDP_TX_METADATA                             = 0x2\n\tXDP_TX_RING                                 = 0x3\n\tXDP_UMEM_COMPLETION_RING                    = 0x6\n\tXDP_UMEM_FILL_RING                          = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING              = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING                    = 0x100000000\n\tXDP_UMEM_REG                                = 0x4\n\tXDP_UMEM_TX_METADATA_LEN                    = 0x4\n\tXDP_UMEM_TX_SW_CSUM                         = 0x2\n\tXDP_UMEM_UNALIGNED_CHUNK_FLAG               = 0x1\n\tXDP_USE_NEED_WAKEUP                         = 0x8\n\tXDP_USE_SG                                  = 0x10\n\tXDP_ZEROCOPY                                = 0x4\n\tXENFS_SUPER_MAGIC                           = 0xabba1974\n\tXFS_SUPER_MAGIC                             = 0x58465342\n\tZONEFS_MAGIC                                = 0x5a4f4653\n\t_HIDIOCGRAWNAME_LEN                         = 0x80\n\t_HIDIOCGRAWPHYS_LEN                         = 0x40\n\t_HIDIOCGRAWUNIQ_LEN                         = 0x40\n)\n\n// Errors\nconst (\n\tE2BIG       = syscall.Errno(0x7)\n\tEACCES      = syscall.Errno(0xd)\n\tEAGAIN      = syscall.Errno(0xb)\n\tEBADF       = syscall.Errno(0x9)\n\tEBUSY       = syscall.Errno(0x10)\n\tECHILD      = syscall.Errno(0xa)\n\tEDOM        = syscall.Errno(0x21)\n\tEEXIST      = syscall.Errno(0x11)\n\tEFAULT      = syscall.Errno(0xe)\n\tEFBIG       = syscall.Errno(0x1b)\n\tEINTR       = syscall.Errno(0x4)\n\tEINVAL      = syscall.Errno(0x16)\n\tEIO         = syscall.Errno(0x5)\n\tEISDIR      = syscall.Errno(0x15)\n\tEMFILE      = syscall.Errno(0x18)\n\tEMLINK      = syscall.Errno(0x1f)\n\tENFILE      = syscall.Errno(0x17)\n\tENODEV      = syscall.Errno(0x13)\n\tENOENT      = syscall.Errno(0x2)\n\tENOEXEC     = syscall.Errno(0x8)\n\tENOMEM      = syscall.Errno(0xc)\n\tENOSPC      = syscall.Errno(0x1c)\n\tENOTBLK     = syscall.Errno(0xf)\n\tENOTDIR     = syscall.Errno(0x14)\n\tENOTTY      = syscall.Errno(0x19)\n\tENXIO       = syscall.Errno(0x6)\n\tEPERM       = syscall.Errno(0x1)\n\tEPIPE       = syscall.Errno(0x20)\n\tERANGE      = syscall.Errno(0x22)\n\tEROFS       = syscall.Errno(0x1e)\n\tESPIPE      = syscall.Errno(0x1d)\n\tESRCH       = syscall.Errno(0x3)\n\tETXTBSY     = syscall.Errno(0x1a)\n\tEWOULDBLOCK = syscall.Errno(0xb)\n\tEXDEV       = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT = syscall.Signal(0x6)\n\tSIGALRM = syscall.Signal(0xe)\n\tSIGFPE  = syscall.Signal(0x8)\n\tSIGHUP  = syscall.Signal(0x1)\n\tSIGILL  = syscall.Signal(0x4)\n\tSIGINT  = syscall.Signal(0x2)\n\tSIGIOT  = syscall.Signal(0x6)\n\tSIGKILL = syscall.Signal(0x9)\n\tSIGPIPE = syscall.Signal(0xd)\n\tSIGQUIT = syscall.Signal(0x3)\n\tSIGSEGV = syscall.Signal(0xb)\n\tSIGTERM = syscall.Signal(0xf)\n\tSIGTRAP = syscall.Signal(0x5)\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_386.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/386/include -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/386/include -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80041270\n\tBLKBSZSET                        = 0x40041271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80041272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFP_XSTATE_MAGIC2                 = 0x46505845\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0xc\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0xd\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0xe\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHIDIOCREVOKE                     = 0x4004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_32BIT                        = 0x40\n\tMAP_ABOVE4G                      = 0x80\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc03c4d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x8000\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8008743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40087446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x400c744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40087447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTP_CLOCK_GETCAPS                = 0x80503d01\n\tPTP_CLOCK_GETCAPS2               = 0x80503d0a\n\tPTP_ENABLE_PPS                   = 0x40043d04\n\tPTP_ENABLE_PPS2                  = 0x40043d0d\n\tPTP_EXTTS_REQUEST                = 0x40103d02\n\tPTP_EXTTS_REQUEST2               = 0x40103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x3d13\n\tPTP_MASK_EN_SINGLE               = 0x40043d14\n\tPTP_PEROUT_REQUEST               = 0x40383d03\n\tPTP_PEROUT_REQUEST2              = 0x40383d0c\n\tPTP_PIN_SETFUNC                  = 0x40603d07\n\tPTP_PIN_SETFUNC2                 = 0x40603d10\n\tPTP_SYS_OFFSET                   = 0x43403d05\n\tPTP_SYS_OFFSET2                  = 0x43403d0e\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETFPXREGS                = 0x12\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETFPXREGS                = 0x13\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x21\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8004700d\n\tRTC_EPOCH_SET                    = 0x4004700e\n\tRTC_IRQP_READ                    = 0x8004700b\n\tRTC_IRQP_SET                     = 0x4004700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x801c7011\n\tRTC_PLL_SET                      = 0x401c7012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x400854d5\n\tTUNDETACHFILTER                  = 0x400854d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x800854db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x20\n\tX86_FXSR_MAGIC                   = 0x0\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/amd64/include -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/amd64/include -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFP_XSTATE_MAGIC2                 = 0x46505845\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHIDIOCREVOKE                     = 0x4004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_32BIT                        = 0x40\n\tMAP_ABOVE4G                      = 0x80\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x80503d01\n\tPTP_CLOCK_GETCAPS2               = 0x80503d0a\n\tPTP_ENABLE_PPS                   = 0x40043d04\n\tPTP_ENABLE_PPS2                  = 0x40043d0d\n\tPTP_EXTTS_REQUEST                = 0x40103d02\n\tPTP_EXTTS_REQUEST2               = 0x40103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x3d13\n\tPTP_MASK_EN_SINGLE               = 0x40043d14\n\tPTP_PEROUT_REQUEST               = 0x40383d03\n\tPTP_PEROUT_REQUEST2              = 0x40383d0c\n\tPTP_PIN_SETFUNC                  = 0x40603d07\n\tPTP_PIN_SETFUNC2                 = 0x40603d10\n\tPTP_SYS_OFFSET                   = 0x43403d05\n\tPTP_SYS_OFFSET2                  = 0x43403d0e\n\tPTRACE_ARCH_PRCTL                = 0x1e\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETFPXREGS                = 0x12\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETFPXREGS                = 0x13\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x21\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_arm.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/arm/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/arm/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80041270\n\tBLKBSZSET                        = 0x40041271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80041272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0xc\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0xd\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0xe\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHIDIOCREVOKE                     = 0x4004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x10000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x20000\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8008743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40087446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x400c744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40087447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTP_CLOCK_GETCAPS                = 0x80503d01\n\tPTP_CLOCK_GETCAPS2               = 0x80503d0a\n\tPTP_ENABLE_PPS                   = 0x40043d04\n\tPTP_ENABLE_PPS2                  = 0x40043d0d\n\tPTP_EXTTS_REQUEST                = 0x40103d02\n\tPTP_EXTTS_REQUEST2               = 0x40103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x3d13\n\tPTP_MASK_EN_SINGLE               = 0x40043d14\n\tPTP_PEROUT_REQUEST               = 0x40383d03\n\tPTP_PEROUT_REQUEST2              = 0x40383d0c\n\tPTP_PIN_SETFUNC                  = 0x40603d07\n\tPTP_PIN_SETFUNC2                 = 0x40603d10\n\tPTP_SYS_OFFSET                   = 0x43403d05\n\tPTP_SYS_OFFSET2                  = 0x43403d0e\n\tPTRACE_GETCRUNCHREGS             = 0x19\n\tPTRACE_GETFDPIC                  = 0x1f\n\tPTRACE_GETFDPIC_EXEC             = 0x0\n\tPTRACE_GETFDPIC_INTERP           = 0x1\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETHBPREGS                = 0x1d\n\tPTRACE_GETVFPREGS                = 0x1b\n\tPTRACE_GETWMMXREGS               = 0x12\n\tPTRACE_GET_THREAD_AREA           = 0x16\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_SETCRUNCHREGS             = 0x1a\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETHBPREGS                = 0x1e\n\tPTRACE_SETVFPREGS                = 0x1c\n\tPTRACE_SETWMMXREGS               = 0x13\n\tPTRACE_SET_SYSCALL               = 0x17\n\tPT_DATA_ADDR                     = 0x10004\n\tPT_TEXT_ADDR                     = 0x10000\n\tPT_TEXT_END_ADDR                 = 0x10008\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8004700d\n\tRTC_EPOCH_SET                    = 0x4004700e\n\tRTC_IRQP_READ                    = 0x8004700b\n\tRTC_IRQP_SET                     = 0x4004700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x801c7011\n\tRTC_PLL_SET                      = 0x401c7012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x400854d5\n\tTUNDETACHFILTER                  = 0x400854d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x800854db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/arm64/include -fsigned-char\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tESR_MAGIC                        = 0x45535201\n\tEXTPROC                          = 0x10000\n\tEXTRA_MAGIC                      = 0x45585401\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFPMR_MAGIC                       = 0x46504d52\n\tFPSIMD_MAGIC                     = 0x46508001\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tGCS_MAGIC                        = 0x47435300\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHIDIOCREVOKE                     = 0x4004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x10000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPOE_MAGIC                        = 0x504f4530\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPROT_BTI                         = 0x10\n\tPROT_MTE                         = 0x20\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x80503d01\n\tPTP_CLOCK_GETCAPS2               = 0x80503d0a\n\tPTP_ENABLE_PPS                   = 0x40043d04\n\tPTP_ENABLE_PPS2                  = 0x40043d0d\n\tPTP_EXTTS_REQUEST                = 0x40103d02\n\tPTP_EXTTS_REQUEST2               = 0x40103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x3d13\n\tPTP_MASK_EN_SINGLE               = 0x40043d14\n\tPTP_PEROUT_REQUEST               = 0x40383d03\n\tPTP_PEROUT_REQUEST2              = 0x40383d0c\n\tPTP_PIN_SETFUNC                  = 0x40603d07\n\tPTP_PIN_SETFUNC2                 = 0x40603d10\n\tPTP_SYS_OFFSET                   = 0x43403d05\n\tPTP_SYS_OFFSET2                  = 0x43403d0e\n\tPTRACE_PEEKMTETAGS               = 0x21\n\tPTRACE_POKEMTETAGS               = 0x22\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tSVE_MAGIC                        = 0x53564501\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTPIDR2_MAGIC                     = 0x54504902\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\tZA_MAGIC                         = 0x54366345\n\tZT_MAGIC                         = 0x5a544e01\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/loong64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build loong64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/loong64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFPU_CTX_MAGIC                    = 0x46505501\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHIDIOCREVOKE                     = 0x4004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tLASX_CTX_MAGIC                   = 0x41535801\n\tLBT_CTX_MAGIC                    = 0x42540001\n\tLSX_CTX_MAGIC                    = 0x53580001\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x80503d01\n\tPTP_CLOCK_GETCAPS2               = 0x80503d0a\n\tPTP_ENABLE_PPS                   = 0x40043d04\n\tPTP_ENABLE_PPS2                  = 0x40043d0d\n\tPTP_EXTTS_REQUEST                = 0x40103d02\n\tPTP_EXTTS_REQUEST2               = 0x40103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x3d13\n\tPTP_MASK_EN_SINGLE               = 0x40043d14\n\tPTP_PEROUT_REQUEST               = 0x40383d03\n\tPTP_PEROUT_REQUEST2              = 0x40383d0c\n\tPTP_PIN_SETFUNC                  = 0x40603d07\n\tPTP_PIN_SETFUNC2                 = 0x40603d10\n\tPTP_SYS_OFFSET                   = 0x43403d05\n\tPTP_SYS_OFFSET2                  = 0x43403d0e\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mips/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mips/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40041270\n\tBLKBSZSET                        = 0x80041271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40041272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x21\n\tF_GETLK64                        = 0x21\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x22\n\tF_SETLK64                        = 0x22\n\tF_SETLKW                         = 0x23\n\tF_SETLKW64                       = 0x23\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xfffffff\n\tIPV6_FLOWLABEL_MASK              = 0xfffff\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x2000\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4008743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80087446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x800c744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80087447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4004700d\n\tRTC_EPOCH_SET                    = 0x8004700e\n\tRTC_IRQP_READ                    = 0x4004700b\n\tRTC_IRQP_SET                     = 0x8004700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x401c7011\n\tRTC_PLL_SET                      = 0x801c7012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x800854d5\n\tTUNDETACHFILTER                  = 0x800854d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x400854db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mips64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0xe\n\tF_GETLK64                        = 0xe\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xfffffff\n\tIPV6_FLOWLABEL_MASK              = 0xfffff\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mips64le/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64le && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64le/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0xe\n\tF_GETLK64                        = 0xe\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mipsle/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mipsle && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mipsle/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40041270\n\tBLKBSZSET                        = 0x80041271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40041272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x21\n\tF_GETLK64                        = 0x21\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x22\n\tF_SETLK64                        = 0x22\n\tF_SETLKW                         = 0x23\n\tF_SETLKW64                       = 0x23\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x2000\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4008743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80087446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x800c744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80087447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4004700d\n\tRTC_EPOCH_SET                    = 0x8004700e\n\tRTC_IRQP_READ                    = 0x4004700b\n\tRTC_IRQP_SET                     = 0x8004700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x401c7011\n\tRTC_PLL_SET                      = 0x801c7012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x800854d5\n\tTUNDETACHFILTER                  = 0x800854d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x400854db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/ppc/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x17\n\tB115200                          = 0x11\n\tB1152000                         = 0x18\n\tB1500000                         = 0x19\n\tB2000000                         = 0x1a\n\tB230400                          = 0x12\n\tB2500000                         = 0x1b\n\tB3000000                         = 0x1c\n\tB3500000                         = 0x1d\n\tB4000000                         = 0x1e\n\tB460800                          = 0x13\n\tB500000                          = 0x14\n\tB57600                           = 0x10\n\tB576000                          = 0x15\n\tB921600                          = 0x16\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40041270\n\tBLKBSZSET                        = 0x80041271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40041272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1f\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\n\tCBAUD                            = 0xff\n\tCBAUDEX                          = 0x0\n\tCIBAUD                           = 0xff0000\n\tCLOCAL                           = 0x8000\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCS6                              = 0x100\n\tCS7                              = 0x200\n\tCS8                              = 0x300\n\tCSIZE                            = 0x300\n\tCSTOPB                           = 0x400\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x40\n\tECHOE                            = 0x2\n\tECHOK                            = 0x4\n\tECHOKE                           = 0x1\n\tECHONL                           = 0x10\n\tECHOPRT                          = 0x20\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000000\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x800000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0xc\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0xd\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0xe\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x4000\n\tICANON                           = 0x100\n\tIEXTEN                           = 0x400\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xfffffff\n\tIPV6_FLOWLABEL_MASK              = 0xfffff\n\tISIG                             = 0x80\n\tIUCLC                            = 0x1000\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x80\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x20\n\tNL2                              = 0x200\n\tNL3                              = 0x300\n\tNLDLY                            = 0x300\n\tNOFLSH                           = 0x80000000\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x20000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x10000\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x1000\n\tPARODD                           = 0x2000\n\tPENDIN                           = 0x20000000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4008743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80087446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x800c744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80087447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPROT_SAO                         = 0x10\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETEVRREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_GETVRREGS                 = 0x12\n\tPTRACE_GETVSRREGS                = 0x1b\n\tPTRACE_GET_DEBUGREG              = 0x19\n\tPTRACE_SETEVRREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SETVRREGS                 = 0x13\n\tPTRACE_SETVSRREGS                = 0x1c\n\tPTRACE_SET_DEBUGREG              = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x100\n\tPTRACE_SYSEMU                    = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x1e\n\tPT_CCR                           = 0x26\n\tPT_CTR                           = 0x23\n\tPT_DAR                           = 0x29\n\tPT_DSCR                          = 0x2c\n\tPT_DSISR                         = 0x2a\n\tPT_FPR0                          = 0x30\n\tPT_FPR31                         = 0x6e\n\tPT_FPSCR                         = 0x71\n\tPT_LNK                           = 0x24\n\tPT_MQ                            = 0x27\n\tPT_MSR                           = 0x21\n\tPT_NIP                           = 0x20\n\tPT_ORIG_R3                       = 0x22\n\tPT_R0                            = 0x0\n\tPT_R1                            = 0x1\n\tPT_R10                           = 0xa\n\tPT_R11                           = 0xb\n\tPT_R12                           = 0xc\n\tPT_R13                           = 0xd\n\tPT_R14                           = 0xe\n\tPT_R15                           = 0xf\n\tPT_R16                           = 0x10\n\tPT_R17                           = 0x11\n\tPT_R18                           = 0x12\n\tPT_R19                           = 0x13\n\tPT_R2                            = 0x2\n\tPT_R20                           = 0x14\n\tPT_R21                           = 0x15\n\tPT_R22                           = 0x16\n\tPT_R23                           = 0x17\n\tPT_R24                           = 0x18\n\tPT_R25                           = 0x19\n\tPT_R26                           = 0x1a\n\tPT_R27                           = 0x1b\n\tPT_R28                           = 0x1c\n\tPT_R29                           = 0x1d\n\tPT_R3                            = 0x3\n\tPT_R30                           = 0x1e\n\tPT_R31                           = 0x1f\n\tPT_R4                            = 0x4\n\tPT_R5                            = 0x5\n\tPT_R6                            = 0x6\n\tPT_R7                            = 0x7\n\tPT_R8                            = 0x8\n\tPT_R9                            = 0x9\n\tPT_REGS_COUNT                    = 0x2c\n\tPT_RESULT                        = 0x2b\n\tPT_TRAP                          = 0x28\n\tPT_XER                           = 0x25\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4004700d\n\tRTC_EPOCH_SET                    = 0x8004700e\n\tRTC_IRQP_READ                    = 0x4004700b\n\tRTC_IRQP_SET                     = 0x8004700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x401c7011\n\tRTC_PLL_SET                      = 0x801c7012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x14\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x15\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x10\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x12\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x12\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x11\n\tSO_SNDTIMEO                      = 0x13\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x13\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x400\n\tTAB2                             = 0x800\n\tTAB3                             = 0xc00\n\tTABDLY                           = 0xc00\n\tTCFLSH                           = 0x2000741f\n\tTCGETA                           = 0x40147417\n\tTCGETS                           = 0x402c7413\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x2000741d\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80147418\n\tTCSETAF                          = 0x8014741c\n\tTCSETAW                          = 0x80147419\n\tTCSETS                           = 0x802c7414\n\tTCSETSF                          = 0x802c7416\n\tTCSETSW                          = 0x802c7415\n\tTCXONC                           = 0x2000741e\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETC                         = 0x40067412\n\tTIOCGETD                         = 0x5424\n\tTIOCGETP                         = 0x40067408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_LOOP                       = 0x8000\n\tTIOCM_OUT1                       = 0x2000\n\tTIOCM_OUT2                       = 0x4000\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETC                         = 0x80067411\n\tTIOCSETD                         = 0x5423\n\tTIOCSETN                         = 0x8006740a\n\tTIOCSETP                         = 0x80067409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSLTC                         = 0x80067475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x5412\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x800854d5\n\tTUNDETACHFILTER                  = 0x800854d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x400854db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0x10\n\tVEOF                             = 0x4\n\tVEOL                             = 0x6\n\tVEOL2                            = 0x8\n\tVMIN                             = 0x5\n\tVREPRINT                         = 0xb\n\tVSTART                           = 0xd\n\tVSTOP                            = 0xe\n\tVSUSP                            = 0xc\n\tVSWTC                            = 0x9\n\tVT1                              = 0x10000\n\tVTDLY                            = 0x10000\n\tVTIME                            = 0x7\n\tVWERASE                          = 0xa\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x17\n\tB115200                          = 0x11\n\tB1152000                         = 0x18\n\tB1500000                         = 0x19\n\tB2000000                         = 0x1a\n\tB230400                          = 0x12\n\tB2500000                         = 0x1b\n\tB3000000                         = 0x1c\n\tB3500000                         = 0x1d\n\tB4000000                         = 0x1e\n\tB460800                          = 0x13\n\tB500000                          = 0x14\n\tB57600                           = 0x10\n\tB576000                          = 0x15\n\tB921600                          = 0x16\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1f\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\n\tCBAUD                            = 0xff\n\tCBAUDEX                          = 0x0\n\tCIBAUD                           = 0xff0000\n\tCLOCAL                           = 0x8000\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCS6                              = 0x100\n\tCS7                              = 0x200\n\tCS8                              = 0x300\n\tCSIZE                            = 0x300\n\tCSTOPB                           = 0x400\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x40\n\tECHOE                            = 0x2\n\tECHOK                            = 0x4\n\tECHOKE                           = 0x1\n\tECHONL                           = 0x10\n\tECHOPRT                          = 0x20\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000000\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x800000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x4000\n\tICANON                           = 0x100\n\tIEXTEN                           = 0x400\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xfffffff\n\tIPV6_FLOWLABEL_MASK              = 0xfffff\n\tISIG                             = 0x80\n\tIUCLC                            = 0x1000\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x80\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNL2                              = 0x200\n\tNL3                              = 0x300\n\tNLDLY                            = 0x300\n\tNOFLSH                           = 0x80000000\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x20000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x1000\n\tPARODD                           = 0x2000\n\tPENDIN                           = 0x20000000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPROT_SAO                         = 0x10\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETEVRREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_GETVRREGS                 = 0x12\n\tPTRACE_GETVSRREGS                = 0x1b\n\tPTRACE_GET_DEBUGREG              = 0x19\n\tPTRACE_SETEVRREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SETVRREGS                 = 0x13\n\tPTRACE_SETVSRREGS                = 0x1c\n\tPTRACE_SET_DEBUGREG              = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x100\n\tPTRACE_SYSEMU                    = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x1e\n\tPT_CCR                           = 0x26\n\tPT_CTR                           = 0x23\n\tPT_DAR                           = 0x29\n\tPT_DSCR                          = 0x2c\n\tPT_DSISR                         = 0x2a\n\tPT_FPR0                          = 0x30\n\tPT_FPSCR                         = 0x50\n\tPT_LNK                           = 0x24\n\tPT_MSR                           = 0x21\n\tPT_NIP                           = 0x20\n\tPT_ORIG_R3                       = 0x22\n\tPT_R0                            = 0x0\n\tPT_R1                            = 0x1\n\tPT_R10                           = 0xa\n\tPT_R11                           = 0xb\n\tPT_R12                           = 0xc\n\tPT_R13                           = 0xd\n\tPT_R14                           = 0xe\n\tPT_R15                           = 0xf\n\tPT_R16                           = 0x10\n\tPT_R17                           = 0x11\n\tPT_R18                           = 0x12\n\tPT_R19                           = 0x13\n\tPT_R2                            = 0x2\n\tPT_R20                           = 0x14\n\tPT_R21                           = 0x15\n\tPT_R22                           = 0x16\n\tPT_R23                           = 0x17\n\tPT_R24                           = 0x18\n\tPT_R25                           = 0x19\n\tPT_R26                           = 0x1a\n\tPT_R27                           = 0x1b\n\tPT_R28                           = 0x1c\n\tPT_R29                           = 0x1d\n\tPT_R3                            = 0x3\n\tPT_R30                           = 0x1e\n\tPT_R31                           = 0x1f\n\tPT_R4                            = 0x4\n\tPT_R5                            = 0x5\n\tPT_R6                            = 0x6\n\tPT_R7                            = 0x7\n\tPT_R8                            = 0x8\n\tPT_R9                            = 0x9\n\tPT_REGS_COUNT                    = 0x2c\n\tPT_RESULT                        = 0x2b\n\tPT_SOFTE                         = 0x27\n\tPT_TRAP                          = 0x28\n\tPT_VR0                           = 0x52\n\tPT_VRSAVE                        = 0x94\n\tPT_VSCR                          = 0x93\n\tPT_VSR0                          = 0x96\n\tPT_VSR31                         = 0xd4\n\tPT_XER                           = 0x25\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x14\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x15\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x10\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x12\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x12\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x11\n\tSO_SNDTIMEO                      = 0x13\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x13\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x400\n\tTAB2                             = 0x800\n\tTAB3                             = 0xc00\n\tTABDLY                           = 0xc00\n\tTCFLSH                           = 0x2000741f\n\tTCGETA                           = 0x40147417\n\tTCGETS                           = 0x402c7413\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x2000741d\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80147418\n\tTCSETAF                          = 0x8014741c\n\tTCSETAW                          = 0x80147419\n\tTCSETS                           = 0x802c7414\n\tTCSETSF                          = 0x802c7416\n\tTCSETSW                          = 0x802c7415\n\tTCXONC                           = 0x2000741e\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETC                         = 0x40067412\n\tTIOCGETD                         = 0x5424\n\tTIOCGETP                         = 0x40067408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_LOOP                       = 0x8000\n\tTIOCM_OUT1                       = 0x2000\n\tTIOCM_OUT2                       = 0x4000\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETC                         = 0x80067411\n\tTIOCSETD                         = 0x5423\n\tTIOCSETN                         = 0x8006740a\n\tTIOCSETP                         = 0x80067409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSLTC                         = 0x80067475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x5412\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0x10\n\tVEOF                             = 0x4\n\tVEOL                             = 0x6\n\tVEOL2                            = 0x8\n\tVMIN                             = 0x5\n\tVREPRINT                         = 0xb\n\tVSTART                           = 0xd\n\tVSTOP                            = 0xe\n\tVSUSP                            = 0xc\n\tVSWTC                            = 0x9\n\tVT1                              = 0x10000\n\tVTDLY                            = 0x10000\n\tVTIME                            = 0x7\n\tVWERASE                          = 0xa\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64le/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64le && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64le/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x17\n\tB115200                          = 0x11\n\tB1152000                         = 0x18\n\tB1500000                         = 0x19\n\tB2000000                         = 0x1a\n\tB230400                          = 0x12\n\tB2500000                         = 0x1b\n\tB3000000                         = 0x1c\n\tB3500000                         = 0x1d\n\tB4000000                         = 0x1e\n\tB460800                          = 0x13\n\tB500000                          = 0x14\n\tB57600                           = 0x10\n\tB576000                          = 0x15\n\tB921600                          = 0x16\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1f\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\n\tCBAUD                            = 0xff\n\tCBAUDEX                          = 0x0\n\tCIBAUD                           = 0xff0000\n\tCLOCAL                           = 0x8000\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCS6                              = 0x100\n\tCS7                              = 0x200\n\tCS8                              = 0x300\n\tCSIZE                            = 0x300\n\tCSTOPB                           = 0x400\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x40\n\tECHOE                            = 0x2\n\tECHOK                            = 0x4\n\tECHOKE                           = 0x1\n\tECHONL                           = 0x10\n\tECHOPRT                          = 0x20\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000000\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x800000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x4000\n\tICANON                           = 0x100\n\tIEXTEN                           = 0x400\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x80\n\tIUCLC                            = 0x1000\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x80\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNL2                              = 0x200\n\tNL3                              = 0x300\n\tNLDLY                            = 0x300\n\tNOFLSH                           = 0x80000000\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x20000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x1000\n\tPARODD                           = 0x2000\n\tPENDIN                           = 0x20000000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPROT_SAO                         = 0x10\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETEVRREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_GETVRREGS                 = 0x12\n\tPTRACE_GETVSRREGS                = 0x1b\n\tPTRACE_GET_DEBUGREG              = 0x19\n\tPTRACE_SETEVRREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SETVRREGS                 = 0x13\n\tPTRACE_SETVSRREGS                = 0x1c\n\tPTRACE_SET_DEBUGREG              = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x100\n\tPTRACE_SYSEMU                    = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x1e\n\tPT_CCR                           = 0x26\n\tPT_CTR                           = 0x23\n\tPT_DAR                           = 0x29\n\tPT_DSCR                          = 0x2c\n\tPT_DSISR                         = 0x2a\n\tPT_FPR0                          = 0x30\n\tPT_FPSCR                         = 0x50\n\tPT_LNK                           = 0x24\n\tPT_MSR                           = 0x21\n\tPT_NIP                           = 0x20\n\tPT_ORIG_R3                       = 0x22\n\tPT_R0                            = 0x0\n\tPT_R1                            = 0x1\n\tPT_R10                           = 0xa\n\tPT_R11                           = 0xb\n\tPT_R12                           = 0xc\n\tPT_R13                           = 0xd\n\tPT_R14                           = 0xe\n\tPT_R15                           = 0xf\n\tPT_R16                           = 0x10\n\tPT_R17                           = 0x11\n\tPT_R18                           = 0x12\n\tPT_R19                           = 0x13\n\tPT_R2                            = 0x2\n\tPT_R20                           = 0x14\n\tPT_R21                           = 0x15\n\tPT_R22                           = 0x16\n\tPT_R23                           = 0x17\n\tPT_R24                           = 0x18\n\tPT_R25                           = 0x19\n\tPT_R26                           = 0x1a\n\tPT_R27                           = 0x1b\n\tPT_R28                           = 0x1c\n\tPT_R29                           = 0x1d\n\tPT_R3                            = 0x3\n\tPT_R30                           = 0x1e\n\tPT_R31                           = 0x1f\n\tPT_R4                            = 0x4\n\tPT_R5                            = 0x5\n\tPT_R6                            = 0x6\n\tPT_R7                            = 0x7\n\tPT_R8                            = 0x8\n\tPT_R9                            = 0x9\n\tPT_REGS_COUNT                    = 0x2c\n\tPT_RESULT                        = 0x2b\n\tPT_SOFTE                         = 0x27\n\tPT_TRAP                          = 0x28\n\tPT_VR0                           = 0x52\n\tPT_VRSAVE                        = 0x94\n\tPT_VSCR                          = 0x93\n\tPT_VSR0                          = 0x96\n\tPT_VSR31                         = 0xd4\n\tPT_XER                           = 0x25\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x14\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x15\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x10\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x12\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x12\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x11\n\tSO_SNDTIMEO                      = 0x13\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x13\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x400\n\tTAB2                             = 0x800\n\tTAB3                             = 0xc00\n\tTABDLY                           = 0xc00\n\tTCFLSH                           = 0x2000741f\n\tTCGETA                           = 0x40147417\n\tTCGETS                           = 0x402c7413\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x2000741d\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80147418\n\tTCSETAF                          = 0x8014741c\n\tTCSETAW                          = 0x80147419\n\tTCSETS                           = 0x802c7414\n\tTCSETSF                          = 0x802c7416\n\tTCSETSW                          = 0x802c7415\n\tTCXONC                           = 0x2000741e\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETC                         = 0x40067412\n\tTIOCGETD                         = 0x5424\n\tTIOCGETP                         = 0x40067408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_LOOP                       = 0x8000\n\tTIOCM_OUT1                       = 0x2000\n\tTIOCM_OUT2                       = 0x4000\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETC                         = 0x80067411\n\tTIOCSETD                         = 0x5423\n\tTIOCSETN                         = 0x8006740a\n\tTIOCSETP                         = 0x80067409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSLTC                         = 0x80067475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x5412\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0x10\n\tVEOF                             = 0x4\n\tVEOL                             = 0x6\n\tVEOL2                            = 0x8\n\tVMIN                             = 0x5\n\tVREPRINT                         = 0xb\n\tVSTART                           = 0xd\n\tVSTOP                            = 0xe\n\tVSUSP                            = 0xc\n\tVSWTC                            = 0x9\n\tVT1                              = 0x10000\n\tVTDLY                            = 0x10000\n\tVTIME                            = 0x7\n\tVWERASE                          = 0xa\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/riscv64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/riscv64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHIDIOCREVOKE                     = 0x4004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tIPV6_FLOWINFO_MASK               = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK              = 0xffff0f00\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x80503d01\n\tPTP_CLOCK_GETCAPS2               = 0x80503d0a\n\tPTP_ENABLE_PPS                   = 0x40043d04\n\tPTP_ENABLE_PPS2                  = 0x40043d0d\n\tPTP_EXTTS_REQUEST                = 0x40103d02\n\tPTP_EXTTS_REQUEST2               = 0x40103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x3d13\n\tPTP_MASK_EN_SINGLE               = 0x40043d14\n\tPTP_PEROUT_REQUEST               = 0x40383d03\n\tPTP_PEROUT_REQUEST2              = 0x40383d0c\n\tPTP_PIN_SETFUNC                  = 0x40603d07\n\tPTP_PIN_SETFUNC2                 = 0x40603d10\n\tPTP_SYS_OFFSET                   = 0x43403d05\n\tPTP_SYS_OFFSET2                  = 0x43403d0e\n\tPTRACE_GETFDPIC                  = 0x21\n\tPTRACE_GETFDPIC_EXEC             = 0x0\n\tPTRACE_GETFDPIC_INTERP           = 0x1\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/s390x/include -fsigned-char\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build s390x && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHIDIOCREVOKE                     = 0x4004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tIPV6_FLOWINFO_MASK               = 0xfffffff\n\tIPV6_FLOWLABEL_MASK              = 0xfffff\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x80503d01\n\tPTP_CLOCK_GETCAPS2               = 0x80503d0a\n\tPTP_ENABLE_PPS                   = 0x40043d04\n\tPTP_ENABLE_PPS2                  = 0x40043d0d\n\tPTP_EXTTS_REQUEST                = 0x40103d02\n\tPTP_EXTTS_REQUEST2               = 0x40103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x3d13\n\tPTP_MASK_EN_SINGLE               = 0x40043d14\n\tPTP_PEROUT_REQUEST               = 0x40383d03\n\tPTP_PEROUT_REQUEST2              = 0x40383d0c\n\tPTP_PIN_SETFUNC                  = 0x40603d07\n\tPTP_PIN_SETFUNC2                 = 0x40603d10\n\tPTP_SYS_OFFSET                   = 0x43403d05\n\tPTP_SYS_OFFSET2                  = 0x43403d0e\n\tPTRACE_DISABLE_TE                = 0x5010\n\tPTRACE_ENABLE_TE                 = 0x5009\n\tPTRACE_GET_LAST_BREAK            = 0x5006\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_AREA             = 0x5003\n\tPTRACE_PEEKTEXT_AREA             = 0x5002\n\tPTRACE_PEEKUSR_AREA              = 0x5000\n\tPTRACE_PEEK_SYSTEM_CALL          = 0x5007\n\tPTRACE_POKEDATA_AREA             = 0x5005\n\tPTRACE_POKETEXT_AREA             = 0x5004\n\tPTRACE_POKEUSR_AREA              = 0x5001\n\tPTRACE_POKE_SYSTEM_CALL          = 0x5008\n\tPTRACE_PROT                      = 0x15\n\tPTRACE_SINGLEBLOCK               = 0xc\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tPTRACE_TE_ABORT_RAND             = 0x5011\n\tPT_ACR0                          = 0x90\n\tPT_ACR1                          = 0x94\n\tPT_ACR10                         = 0xb8\n\tPT_ACR11                         = 0xbc\n\tPT_ACR12                         = 0xc0\n\tPT_ACR13                         = 0xc4\n\tPT_ACR14                         = 0xc8\n\tPT_ACR15                         = 0xcc\n\tPT_ACR2                          = 0x98\n\tPT_ACR3                          = 0x9c\n\tPT_ACR4                          = 0xa0\n\tPT_ACR5                          = 0xa4\n\tPT_ACR6                          = 0xa8\n\tPT_ACR7                          = 0xac\n\tPT_ACR8                          = 0xb0\n\tPT_ACR9                          = 0xb4\n\tPT_CR_10                         = 0x168\n\tPT_CR_11                         = 0x170\n\tPT_CR_9                          = 0x160\n\tPT_ENDREGS                       = 0x1af\n\tPT_FPC                           = 0xd8\n\tPT_FPR0                          = 0xe0\n\tPT_FPR1                          = 0xe8\n\tPT_FPR10                         = 0x130\n\tPT_FPR11                         = 0x138\n\tPT_FPR12                         = 0x140\n\tPT_FPR13                         = 0x148\n\tPT_FPR14                         = 0x150\n\tPT_FPR15                         = 0x158\n\tPT_FPR2                          = 0xf0\n\tPT_FPR3                          = 0xf8\n\tPT_FPR4                          = 0x100\n\tPT_FPR5                          = 0x108\n\tPT_FPR6                          = 0x110\n\tPT_FPR7                          = 0x118\n\tPT_FPR8                          = 0x120\n\tPT_FPR9                          = 0x128\n\tPT_GPR0                          = 0x10\n\tPT_GPR1                          = 0x18\n\tPT_GPR10                         = 0x60\n\tPT_GPR11                         = 0x68\n\tPT_GPR12                         = 0x70\n\tPT_GPR13                         = 0x78\n\tPT_GPR14                         = 0x80\n\tPT_GPR15                         = 0x88\n\tPT_GPR2                          = 0x20\n\tPT_GPR3                          = 0x28\n\tPT_GPR4                          = 0x30\n\tPT_GPR5                          = 0x38\n\tPT_GPR6                          = 0x40\n\tPT_GPR7                          = 0x48\n\tPT_GPR8                          = 0x50\n\tPT_GPR9                          = 0x58\n\tPT_IEEE_IP                       = 0x1a8\n\tPT_LASTOFF                       = 0x1a8\n\tPT_ORIGGPR2                      = 0xd0\n\tPT_PSWADDR                       = 0x8\n\tPT_PSWMASK                       = 0x0\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_DEVMEM_DMABUF                = 0x4f\n\tSCM_DEVMEM_LINEAR                = 0x4e\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TS_OPT_ID                    = 0x51\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DEVMEM_DMABUF                 = 0x4f\n\tSO_DEVMEM_DONTNEED               = 0x50\n\tSO_DEVMEM_LINEAR                 = 0x4e\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/sparc64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build sparc64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/sparc64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tASI_LEON_DFLUSH                  = 0x11\n\tASI_LEON_IFLUSH                  = 0x10\n\tASI_LEON_MMUFLUSH                = 0x18\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x400000\n\tEFD_NONBLOCK                     = 0x4000\n\tEMT_TAGOVF                       = 0x1\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x400000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x7\n\tF_GETLK64                        = 0x7\n\tF_GETOWN                         = 0x5\n\tF_RDLCK                          = 0x1\n\tF_SETLK                          = 0x8\n\tF_SETLK64                        = 0x8\n\tF_SETLKW                         = 0x9\n\tF_SETLKW64                       = 0x9\n\tF_SETOWN                         = 0x6\n\tF_UNLCK                          = 0x3\n\tF_WRLCK                          = 0x2\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHIDIOCREVOKE                     = 0x8004480d\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x400000\n\tIN_NONBLOCK                      = 0x4000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tIPV6_FLOWINFO_MASK               = 0xfffffff\n\tIPV6_FLOWLABEL_MASK              = 0xfffff\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x200\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x100\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_RENAME                       = 0x20\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x40\n\tO_CLOEXEC                        = 0x400000\n\tO_CREAT                          = 0x200\n\tO_DIRECT                         = 0x100000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x2000\n\tO_EXCL                           = 0x800\n\tO_FSYNC                          = 0x802000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x4004\n\tO_NOATIME                        = 0x200000\n\tO_NOCTTY                         = 0x8000\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x4000\n\tO_PATH                           = 0x1000000\n\tO_RSYNC                          = 0x802000\n\tO_SYNC                           = 0x802000\n\tO_TMPFILE                        = 0x2010000\n\tO_TRUNC                          = 0x400\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTP_CLOCK_GETCAPS                = 0x40503d01\n\tPTP_CLOCK_GETCAPS2               = 0x40503d0a\n\tPTP_ENABLE_PPS                   = 0x80043d04\n\tPTP_ENABLE_PPS2                  = 0x80043d0d\n\tPTP_EXTTS_REQUEST                = 0x80103d02\n\tPTP_EXTTS_REQUEST2               = 0x80103d0b\n\tPTP_MASK_CLEAR_ALL               = 0x20003d13\n\tPTP_MASK_EN_SINGLE               = 0x80043d14\n\tPTP_PEROUT_REQUEST               = 0x80383d03\n\tPTP_PEROUT_REQUEST2              = 0x80383d0c\n\tPTP_PIN_SETFUNC                  = 0x80603d07\n\tPTP_PIN_SETFUNC2                 = 0x80603d10\n\tPTP_SYS_OFFSET                   = 0x83403d05\n\tPTP_SYS_OFFSET2                  = 0x83403d0e\n\tPTRACE_GETFPAREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETFPREGS64               = 0x19\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_READDATA                  = 0x10\n\tPTRACE_READTEXT                  = 0x12\n\tPTRACE_SETFPAREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETFPREGS64               = 0x1a\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SPARC_DETACH              = 0xb\n\tPTRACE_WRITEDATA                 = 0x11\n\tPTRACE_WRITETEXT                 = 0x13\n\tPT_FP                            = 0x48\n\tPT_G0                            = 0x10\n\tPT_G1                            = 0x14\n\tPT_G2                            = 0x18\n\tPT_G3                            = 0x1c\n\tPT_G4                            = 0x20\n\tPT_G5                            = 0x24\n\tPT_G6                            = 0x28\n\tPT_G7                            = 0x2c\n\tPT_I0                            = 0x30\n\tPT_I1                            = 0x34\n\tPT_I2                            = 0x38\n\tPT_I3                            = 0x3c\n\tPT_I4                            = 0x40\n\tPT_I5                            = 0x44\n\tPT_I6                            = 0x48\n\tPT_I7                            = 0x4c\n\tPT_NPC                           = 0x8\n\tPT_PC                            = 0x4\n\tPT_PSR                           = 0x0\n\tPT_REGS_MAGIC                    = 0x57ac6c00\n\tPT_TNPC                          = 0x90\n\tPT_TPC                           = 0x88\n\tPT_TSTATE                        = 0x80\n\tPT_V9_FP                         = 0x70\n\tPT_V9_G0                         = 0x0\n\tPT_V9_G1                         = 0x8\n\tPT_V9_G2                         = 0x10\n\tPT_V9_G3                         = 0x18\n\tPT_V9_G4                         = 0x20\n\tPT_V9_G5                         = 0x28\n\tPT_V9_G6                         = 0x30\n\tPT_V9_G7                         = 0x38\n\tPT_V9_I0                         = 0x40\n\tPT_V9_I1                         = 0x48\n\tPT_V9_I2                         = 0x50\n\tPT_V9_I3                         = 0x58\n\tPT_V9_I4                         = 0x60\n\tPT_V9_I5                         = 0x68\n\tPT_V9_I6                         = 0x70\n\tPT_V9_I7                         = 0x78\n\tPT_V9_MAGIC                      = 0x9c\n\tPT_V9_TNPC                       = 0x90\n\tPT_V9_TPC                        = 0x88\n\tPT_V9_TSTATE                     = 0x80\n\tPT_V9_Y                          = 0x98\n\tPT_WIM                           = 0x10\n\tPT_Y                             = 0xc\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x6\n\tRLIMIT_NPROC                     = 0x7\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_DEVMEM_DMABUF                = 0x58\n\tSCM_DEVMEM_LINEAR                = 0x57\n\tSCM_TIMESTAMPING                 = 0x23\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x38\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3c\n\tSCM_TIMESTAMPNS                  = 0x21\n\tSCM_TS_OPT_ID                    = 0x5a\n\tSCM_TXTIME                       = 0x3f\n\tSCM_WIFI_STATUS                  = 0x25\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x400000\n\tSFD_NONBLOCK                     = 0x4000\n\tSF_FP                            = 0x38\n\tSF_I0                            = 0x20\n\tSF_I1                            = 0x24\n\tSF_I2                            = 0x28\n\tSF_I3                            = 0x2c\n\tSF_I4                            = 0x30\n\tSF_I5                            = 0x34\n\tSF_L0                            = 0x0\n\tSF_L1                            = 0x4\n\tSF_L2                            = 0x8\n\tSF_L3                            = 0xc\n\tSF_L4                            = 0x10\n\tSF_L5                            = 0x14\n\tSF_L6                            = 0x18\n\tSF_L7                            = 0x1c\n\tSF_PC                            = 0x3c\n\tSF_RETP                          = 0x40\n\tSF_V9_FP                         = 0x70\n\tSF_V9_I0                         = 0x40\n\tSF_V9_I1                         = 0x48\n\tSF_V9_I2                         = 0x50\n\tSF_V9_I3                         = 0x58\n\tSF_V9_I4                         = 0x60\n\tSF_V9_I5                         = 0x68\n\tSF_V9_L0                         = 0x0\n\tSF_V9_L1                         = 0x8\n\tSF_V9_L2                         = 0x10\n\tSF_V9_L3                         = 0x18\n\tSF_V9_L4                         = 0x20\n\tSF_V9_L5                         = 0x28\n\tSF_V9_L6                         = 0x30\n\tSF_V9_L7                         = 0x38\n\tSF_V9_PC                         = 0x78\n\tSF_V9_RETP                       = 0x80\n\tSF_V9_XARG0                      = 0x88\n\tSF_V9_XARG1                      = 0x90\n\tSF_V9_XARG2                      = 0x98\n\tSF_V9_XARG3                      = 0xa0\n\tSF_V9_XARG4                      = 0xa8\n\tSF_V9_XARG5                      = 0xb0\n\tSF_V9_XXARG                      = 0xb8\n\tSF_XARG0                         = 0x44\n\tSF_XARG1                         = 0x48\n\tSF_XARG2                         = 0x4c\n\tSF_XARG3                         = 0x50\n\tSF_XARG4                         = 0x54\n\tSF_XARG5                         = 0x58\n\tSF_XXARG                         = 0x5c\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x400000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x4000\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x8000\n\tSO_ATTACH_BPF                    = 0x34\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x35\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x36\n\tSO_BINDTODEVICE                  = 0xd\n\tSO_BINDTOIFINDEX                 = 0x41\n\tSO_BPF_EXTENSIONS                = 0x32\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0x400\n\tSO_BUF_LOCK                      = 0x51\n\tSO_BUSY_POLL                     = 0x30\n\tSO_BUSY_POLL_BUDGET              = 0x49\n\tSO_CNX_ADVICE                    = 0x37\n\tSO_COOKIE                        = 0x3b\n\tSO_DETACH_REUSEPORT_BPF          = 0x47\n\tSO_DEVMEM_DMABUF                 = 0x58\n\tSO_DEVMEM_DONTNEED               = 0x59\n\tSO_DEVMEM_LINEAR                 = 0x57\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x33\n\tSO_INCOMING_NAPI_ID              = 0x3a\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x28\n\tSO_MARK                          = 0x22\n\tSO_MAX_PACING_RATE               = 0x31\n\tSO_MEMINFO                       = 0x39\n\tSO_NETNS_COOKIE                  = 0x50\n\tSO_NOFCS                         = 0x27\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x2\n\tSO_PASSPIDFD                     = 0x55\n\tSO_PASSSEC                       = 0x1f\n\tSO_PEEK_OFF                      = 0x26\n\tSO_PEERCRED                      = 0x40\n\tSO_PEERGROUPS                    = 0x3d\n\tSO_PEERPIDFD                     = 0x56\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x48\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x100b\n\tSO_RCVLOWAT                      = 0x800\n\tSO_RCVMARK                       = 0x54\n\tSO_RCVTIMEO                      = 0x2000\n\tSO_RCVTIMEO_NEW                  = 0x44\n\tSO_RCVTIMEO_OLD                  = 0x2000\n\tSO_RESERVE_MEM                   = 0x52\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x24\n\tSO_SECURITY_AUTHENTICATION       = 0x5001\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x5004\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002\n\tSO_SELECT_ERR_QUEUE              = 0x29\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x100a\n\tSO_SNDLOWAT                      = 0x1000\n\tSO_SNDTIMEO                      = 0x4000\n\tSO_SNDTIMEO_NEW                  = 0x45\n\tSO_SNDTIMEO_OLD                  = 0x4000\n\tSO_TIMESTAMPING                  = 0x23\n\tSO_TIMESTAMPING_NEW              = 0x43\n\tSO_TIMESTAMPING_OLD              = 0x23\n\tSO_TIMESTAMPNS                   = 0x21\n\tSO_TIMESTAMPNS_NEW               = 0x42\n\tSO_TIMESTAMPNS_OLD               = 0x21\n\tSO_TIMESTAMP_NEW                 = 0x46\n\tSO_TXREHASH                      = 0x53\n\tSO_TXTIME                        = 0x3f\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x25\n\tSO_ZEROCOPY                      = 0x3e\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x20005407\n\tTCGETA                           = 0x40125401\n\tTCGETS                           = 0x40245408\n\tTCGETS2                          = 0x402c540c\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x20005405\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80125402\n\tTCSETAF                          = 0x80125404\n\tTCSETAW                          = 0x80125403\n\tTCSETS                           = 0x80245409\n\tTCSETS2                          = 0x802c540d\n\tTCSETSF                          = 0x8024540b\n\tTCSETSF2                         = 0x802c540f\n\tTCSETSW                          = 0x8024540a\n\tTCSETSW2                         = 0x802c540e\n\tTCXONC                           = 0x20005406\n\tTFD_CLOEXEC                      = 0x400000\n\tTFD_NONBLOCK                     = 0x4000\n\tTIOCCBRK                         = 0x2000747a\n\tTIOCCONS                         = 0x20007424\n\tTIOCEXCL                         = 0x2000740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x40047400\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285443\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x40047483\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40047486\n\tTIOCGPTPEER                      = 0x20007489\n\tTIOCGRS485                       = 0x40205441\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x40047485\n\tTIOCGSOFTCAR                     = 0x40047464\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x8004746b\n\tTIOCMBIS                         = 0x8004746c\n\tTIOCMGET                         = 0x4004746a\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x8004746d\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x20007471\n\tTIOCNXCL                         = 0x2000740e\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x80047470\n\tTIOCSBRK                         = 0x2000747b\n\tTIOCSCTTY                        = 0x20007484\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSETD                         = 0x80047401\n\tTIOCSIG                          = 0x80047488\n\tTIOCSISO7816                     = 0xc0285444\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x80047482\n\tTIOCSPTLCK                       = 0x80047487\n\tTIOCSRS485                       = 0xc0205442\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x80047465\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x80017472\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x20005437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n\t__TIOCFLUSH                      = 0x80047410\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEADV            = syscall.Errno(0x53)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEALREADY        = syscall.Errno(0x25)\n\tEBADE           = syscall.Errno(0x66)\n\tEBADFD          = syscall.Errno(0x5d)\n\tEBADMSG         = syscall.Errno(0x4c)\n\tEBADR           = syscall.Errno(0x67)\n\tEBADRQC         = syscall.Errno(0x6a)\n\tEBADSLT         = syscall.Errno(0x6b)\n\tEBFONT          = syscall.Errno(0x6d)\n\tECANCELED       = syscall.Errno(0x7f)\n\tECHRNG          = syscall.Errno(0x5e)\n\tECOMM           = syscall.Errno(0x55)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0x4e)\n\tEDEADLOCK       = syscall.Errno(0x6c)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOTDOT         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEHWPOISON       = syscall.Errno(0x87)\n\tEIDRM           = syscall.Errno(0x4d)\n\tEILSEQ          = syscall.Errno(0x7a)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x81)\n\tEKEYREJECTED    = syscall.Errno(0x83)\n\tEKEYREVOKED     = syscall.Errno(0x82)\n\tEL2HLT          = syscall.Errno(0x65)\n\tEL2NSYNC        = syscall.Errno(0x5f)\n\tEL3HLT          = syscall.Errno(0x60)\n\tEL3RST          = syscall.Errno(0x61)\n\tELIBACC         = syscall.Errno(0x72)\n\tELIBBAD         = syscall.Errno(0x70)\n\tELIBEXEC        = syscall.Errno(0x6e)\n\tELIBMAX         = syscall.Errno(0x7b)\n\tELIBSCN         = syscall.Errno(0x7c)\n\tELNRNG          = syscall.Errno(0x62)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x7e)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x57)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENOANO          = syscall.Errno(0x69)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENOCSI          = syscall.Errno(0x64)\n\tENODATA         = syscall.Errno(0x6f)\n\tENOKEY          = syscall.Errno(0x80)\n\tENOLCK          = syscall.Errno(0x4f)\n\tENOLINK         = syscall.Errno(0x52)\n\tENOMEDIUM       = syscall.Errno(0x7d)\n\tENOMSG          = syscall.Errno(0x4b)\n\tENONET          = syscall.Errno(0x50)\n\tENOPKG          = syscall.Errno(0x71)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSR           = syscall.Errno(0x4a)\n\tENOSTR          = syscall.Errno(0x48)\n\tENOSYS          = syscall.Errno(0x5a)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x85)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTUNIQ        = syscall.Errno(0x73)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x5c)\n\tEOWNERDEAD      = syscall.Errno(0x84)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROTO          = syscall.Errno(0x56)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEREMCHG         = syscall.Errno(0x59)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x74)\n\tERFKILL         = syscall.Errno(0x86)\n\tERREMOTE        = syscall.Errno(0x51)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESRMNT          = syscall.Errno(0x54)\n\tESTALE          = syscall.Errno(0x46)\n\tESTRPIPE        = syscall.Errno(0x5b)\n\tETIME           = syscall.Errno(0x49)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x63)\n\tEUSERS          = syscall.Errno(0x44)\n\tEXFULL          = syscall.Errno(0x68)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCLD    = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGLOST   = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x17)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1d)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{57, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{58, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale file handle\"},\n\t{71, \"EREMOTE\", \"object is remote\"},\n\t{72, \"ENOSTR\", \"device not a stream\"},\n\t{73, \"ETIME\", \"timer expired\"},\n\t{74, \"ENOSR\", \"out of streams resources\"},\n\t{75, \"ENOMSG\", \"no message of desired type\"},\n\t{76, \"EBADMSG\", \"bad message\"},\n\t{77, \"EIDRM\", \"identifier removed\"},\n\t{78, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{79, \"ENOLCK\", \"no locks available\"},\n\t{80, \"ENONET\", \"machine is not on the network\"},\n\t{81, \"ERREMOTE\", \"unknown error 81\"},\n\t{82, \"ENOLINK\", \"link has been severed\"},\n\t{83, \"EADV\", \"advertise error\"},\n\t{84, \"ESRMNT\", \"srmount error\"},\n\t{85, \"ECOMM\", \"communication error on send\"},\n\t{86, \"EPROTO\", \"protocol error\"},\n\t{87, \"EMULTIHOP\", \"multihop attempted\"},\n\t{88, \"EDOTDOT\", \"RFS specific error\"},\n\t{89, \"EREMCHG\", \"remote address changed\"},\n\t{90, \"ENOSYS\", \"function not implemented\"},\n\t{91, \"ESTRPIPE\", \"streams pipe error\"},\n\t{92, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{93, \"EBADFD\", \"file descriptor in bad state\"},\n\t{94, \"ECHRNG\", \"channel number out of range\"},\n\t{95, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{96, \"EL3HLT\", \"level 3 halted\"},\n\t{97, \"EL3RST\", \"level 3 reset\"},\n\t{98, \"ELNRNG\", \"link number out of range\"},\n\t{99, \"EUNATCH\", \"protocol driver not attached\"},\n\t{100, \"ENOCSI\", \"no CSI structure available\"},\n\t{101, \"EL2HLT\", \"level 2 halted\"},\n\t{102, \"EBADE\", \"invalid exchange\"},\n\t{103, \"EBADR\", \"invalid request descriptor\"},\n\t{104, \"EXFULL\", \"exchange full\"},\n\t{105, \"ENOANO\", \"no anode\"},\n\t{106, \"EBADRQC\", \"invalid request code\"},\n\t{107, \"EBADSLT\", \"invalid slot\"},\n\t{108, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{109, \"EBFONT\", \"bad font file format\"},\n\t{110, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{111, \"ENODATA\", \"no data available\"},\n\t{112, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{113, \"ENOPKG\", \"package not installed\"},\n\t{114, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{115, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{116, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{123, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{124, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{125, \"ENOMEDIUM\", \"no medium found\"},\n\t{126, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{127, \"ECANCELED\", \"operation canceled\"},\n\t{128, \"ENOKEY\", \"required key not available\"},\n\t{129, \"EKEYEXPIRED\", \"key has expired\"},\n\t{130, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{131, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{132, \"EOWNERDEAD\", \"owner died\"},\n\t{133, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{134, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{135, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGLOST\", \"power failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0084277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x400c427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x800c427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80084272\n\tBIOCSUDPF                         = 0x80084273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tEN_SW_CTL_INF                     = 0x1000\n\tEN_SW_CTL_PREC                    = 0x300\n\tEN_SW_CTL_ROUND                   = 0xc00\n\tEN_SW_DATACHAIN                   = 0x80\n\tEN_SW_DENORM                      = 0x2\n\tEN_SW_INVOP                       = 0x1\n\tEN_SW_OVERFLOW                    = 0x8\n\tEN_SW_PRECLOSS                    = 0x20\n\tEN_SW_UNDERFLOW                   = 0x10\n\tEN_SW_ZERODIV                     = 0x4\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0946920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0086926\n\tSIOCGIFDATA                       = 0xc0946985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc01c6987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCINITIFADDR                    = 0xc0446984\n\tSIOCSDRVSPEC                      = 0x801c697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8094691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x801c6988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0946986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x400c7458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80047445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80047444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x4010427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x8010427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80104272\n\tBIOCSUDPF                         = 0x80104273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8038720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8038720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0986920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0106926\n\tSIOCGIFDATA                       = 0xc0986985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0306936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc0286987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCINITIFADDR                    = 0xc0706984\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8098691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x80286988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0986986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80087445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80087444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go",
    "content": "// mkerrors.sh -marm\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -marm _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0084277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x400c427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x800c427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80084272\n\tBIOCSUDPF                         = 0x80084273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0946920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0086926\n\tSIOCGIFDATA                       = 0xc0946985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc01c6987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCINITIFADDR                    = 0xc0446984\n\tSIOCSDRVSPEC                      = 0x801c697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8094691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x801c6988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0946986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x400c7458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x48087446\n\tTIOCPTSNAME                       = 0x48087448\n\tTIOCRCVFRAME                      = 0x80047445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80047444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x4010427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x8010427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80104272\n\tBIOCSUDPF                         = 0x80104273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8038720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8038720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0986920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0106926\n\tSIOCGIFDATA                       = 0xc0986985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0306936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc0286987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCINITIFADDR                    = 0xc0706984\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8098691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x80286988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0986986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80087445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80087444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc008427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x400c426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80084277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x800c426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc100445d\n\tDIOCADDRULE                       = 0xccc84404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xccc8441a\n\tDIOCCLRIFFLAG                     = 0xc024445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0d04412\n\tDIOCCLRSTATUS                     = 0xc0244416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1084460\n\tDIOCGETQUEUE                      = 0xc100445f\n\tDIOCGETQUEUES                     = 0xc100445e\n\tDIOCGETRULE                       = 0xccc84407\n\tDIOCGETRULES                      = 0xccc84406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0084454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0084419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0244457\n\tDIOCKILLSRCNODES                  = 0xc068445b\n\tDIOCKILLSTATES                    = 0xc0d04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc084444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0844450\n\tDIOCRADDADDRS                     = 0xc44c4443\n\tDIOCRADDTABLES                    = 0xc44c443d\n\tDIOCRCLRADDRS                     = 0xc44c4442\n\tDIOCRCLRASTATS                    = 0xc44c4448\n\tDIOCRCLRTABLES                    = 0xc44c443c\n\tDIOCRCLRTSTATS                    = 0xc44c4441\n\tDIOCRDELADDRS                     = 0xc44c4444\n\tDIOCRDELTABLES                    = 0xc44c443e\n\tDIOCRGETADDRS                     = 0xc44c4446\n\tDIOCRGETASTATS                    = 0xc44c4447\n\tDIOCRGETTABLES                    = 0xc44c443f\n\tDIOCRGETTSTATS                    = 0xc44c4440\n\tDIOCRINADEFINE                    = 0xc44c444d\n\tDIOCRSETADDRS                     = 0xc44c4445\n\tDIOCRSETTFLAGS                    = 0xc44c444a\n\tDIOCRTSTADDRS                     = 0xc44c4449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0244459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0244414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc00c4451\n\tDIOCXCOMMIT                       = 0xc00c4452\n\tDIOCXROLLBACK                     = 0xc00c4453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x805c693c\n\tSIOCBRDGADDL                      = 0x805c6949\n\tSIOCBRDGADDS                      = 0x805c6941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x805c693d\n\tSIOCBRDGDELS                      = 0x805c6942\n\tSIOCBRDGFLUSH                     = 0x805c6948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc05c693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc03c6958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc028694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc05c6942\n\tSIOCBRDGRTS                       = 0xc0186943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x805c6955\n\tSIOCBRDGSIFFLGS                   = 0x805c693f\n\tSIOCBRDGSIFPRIO                   = 0x805c6954\n\tSIOCBRDGSIFPROT                   = 0x805c694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0086924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc024698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc024698d\n\tSIOCGIFGMEMB                      = 0xc024698a\n\tSIOCGIFGROUP                      = 0xc0246988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0386938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8024698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x400c745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go",
    "content": "// mkerrors.sh\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc008427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80084277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc100445d\n\tDIOCADDRULE                       = 0xcce04404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcce0441a\n\tDIOCCLRIFFLAG                     = 0xc024445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0d04412\n\tDIOCCLRSTATUS                     = 0xc0244416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1084460\n\tDIOCGETQUEUE                      = 0xc100445f\n\tDIOCGETQUEUES                     = 0xc100445e\n\tDIOCGETRULE                       = 0xcce04407\n\tDIOCGETRULES                      = 0xcce04406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0084454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0084419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0244457\n\tDIOCKILLSRCNODES                  = 0xc068445b\n\tDIOCKILLSTATES                    = 0xc0d04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc44c4443\n\tDIOCRADDTABLES                    = 0xc44c443d\n\tDIOCRCLRADDRS                     = 0xc44c4442\n\tDIOCRCLRASTATS                    = 0xc44c4448\n\tDIOCRCLRTABLES                    = 0xc44c443c\n\tDIOCRCLRTSTATS                    = 0xc44c4441\n\tDIOCRDELADDRS                     = 0xc44c4444\n\tDIOCRDELTABLES                    = 0xc44c443e\n\tDIOCRGETADDRS                     = 0xc44c4446\n\tDIOCRGETASTATS                    = 0xc44c4447\n\tDIOCRGETTABLES                    = 0xc44c443f\n\tDIOCRGETTSTATS                    = 0xc44c4440\n\tDIOCRINADEFINE                    = 0xc44c444d\n\tDIOCRSETADDRS                     = 0xc44c4445\n\tDIOCRSETTFLAGS                    = 0xc44c444a\n\tDIOCRTSTADDRS                     = 0xc44c4449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0244459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0244414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc00c4451\n\tDIOCXCOMMIT                       = 0xc00c4452\n\tDIOCXROLLBACK                     = 0xc00c4453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc028694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0186943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0086924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc024698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc024698d\n\tSIOCGIFGMEMB                      = 0xc024698a\n\tSIOCGIFGROUP                      = 0xc0246988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0386938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8024698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xfffffff\n\tIPV6_FLOWLABEL_MASK               = 0xfffff\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{81920, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xfffffff\n\tIPV6_FLOWLABEL_MASK               = 0xfffff\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && solaris\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_802                        = 0x12\n\tAF_APPLETALK                  = 0x10\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_FILE                       = 0x1\n\tAF_GOSIP                      = 0x16\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x1a\n\tAF_INET_OFFLOAD               = 0x1e\n\tAF_IPX                        = 0x17\n\tAF_KEY                        = 0x1b\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x19\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x20\n\tAF_NBS                        = 0x7\n\tAF_NCA                        = 0x1c\n\tAF_NIT                        = 0x11\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x13\n\tAF_OSINET                     = 0x15\n\tAF_PACKET                     = 0x20\n\tAF_POLICY                     = 0x1d\n\tAF_PUP                        = 0x4\n\tAF_ROUTE                      = 0x18\n\tAF_SNA                        = 0xb\n\tAF_TRILL                      = 0x1f\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tAF_X25                        = 0x14\n\tARPHRD_ARCNET                 = 0x7\n\tARPHRD_ATM                    = 0x10\n\tARPHRD_AX25                   = 0x3\n\tARPHRD_CHAOS                  = 0x5\n\tARPHRD_EETHER                 = 0x2\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FC                     = 0x12\n\tARPHRD_FRAME                  = 0xf\n\tARPHRD_HDLC                   = 0x11\n\tARPHRD_IB                     = 0x20\n\tARPHRD_IEEE802                = 0x6\n\tARPHRD_IPATM                  = 0x13\n\tARPHRD_METRICOM               = 0x17\n\tARPHRD_TUNNEL                 = 0x1f\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB115200                       = 0x12\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB153600                       = 0x13\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB230400                       = 0x14\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB307200                       = 0x15\n\tB38400                        = 0xf\n\tB460800                       = 0x16\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB57600                        = 0x10\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB76800                        = 0x11\n\tB921600                       = 0x17\n\tB9600                         = 0xd\n\tBIOCFLUSH                     = 0x20004268\n\tBIOCGBLEN                     = 0x40044266\n\tBIOCGDLT                      = 0x4004426a\n\tBIOCGDLTLIST                  = -0x3fefbd89\n\tBIOCGDLTLIST32                = -0x3ff7bd89\n\tBIOCGETIF                     = 0x4020426b\n\tBIOCGETLIF                    = 0x4078426b\n\tBIOCGHDRCMPLT                 = 0x40044274\n\tBIOCGRTIMEOUT                 = 0x4010427b\n\tBIOCGRTIMEOUT32               = 0x4008427b\n\tBIOCGSEESENT                  = 0x40044278\n\tBIOCGSTATS                    = 0x4080426f\n\tBIOCGSTATSOLD                 = 0x4008426f\n\tBIOCIMMEDIATE                 = -0x7ffbbd90\n\tBIOCPROMISC                   = 0x20004269\n\tBIOCSBLEN                     = -0x3ffbbd9a\n\tBIOCSDLT                      = -0x7ffbbd8a\n\tBIOCSETF                      = -0x7fefbd99\n\tBIOCSETF32                    = -0x7ff7bd99\n\tBIOCSETIF                     = -0x7fdfbd94\n\tBIOCSETLIF                    = -0x7f87bd94\n\tBIOCSHDRCMPLT                 = -0x7ffbbd8b\n\tBIOCSRTIMEOUT                 = -0x7fefbd86\n\tBIOCSRTIMEOUT32               = -0x7ff7bd86\n\tBIOCSSEESENT                  = -0x7ffbbd87\n\tBIOCSTCPF                     = -0x7fefbd8e\n\tBIOCSUDPF                     = -0x7fefbd8d\n\tBIOCVERSION                   = 0x40044271\n\tBPF_A                         = 0x10\n\tBPF_ABS                       = 0x20\n\tBPF_ADD                       = 0x0\n\tBPF_ALIGNMENT                 = 0x4\n\tBPF_ALU                       = 0x4\n\tBPF_AND                       = 0x50\n\tBPF_B                         = 0x10\n\tBPF_DFLTBUFSIZE               = 0x100000\n\tBPF_DIV                       = 0x30\n\tBPF_H                         = 0x8\n\tBPF_IMM                       = 0x0\n\tBPF_IND                       = 0x40\n\tBPF_JA                        = 0x0\n\tBPF_JEQ                       = 0x10\n\tBPF_JGE                       = 0x30\n\tBPF_JGT                       = 0x20\n\tBPF_JMP                       = 0x5\n\tBPF_JSET                      = 0x40\n\tBPF_K                         = 0x0\n\tBPF_LD                        = 0x0\n\tBPF_LDX                       = 0x1\n\tBPF_LEN                       = 0x80\n\tBPF_LSH                       = 0x60\n\tBPF_MAJOR_VERSION             = 0x1\n\tBPF_MAXBUFSIZE                = 0x1000000\n\tBPF_MAXINSNS                  = 0x200\n\tBPF_MEM                       = 0x60\n\tBPF_MEMWORDS                  = 0x10\n\tBPF_MINBUFSIZE                = 0x20\n\tBPF_MINOR_VERSION             = 0x1\n\tBPF_MISC                      = 0x7\n\tBPF_MSH                       = 0xa0\n\tBPF_MUL                       = 0x20\n\tBPF_NEG                       = 0x80\n\tBPF_OR                        = 0x40\n\tBPF_RELEASE                   = 0x30bb6\n\tBPF_RET                       = 0x6\n\tBPF_RSH                       = 0x70\n\tBPF_ST                        = 0x2\n\tBPF_STX                       = 0x3\n\tBPF_SUB                       = 0x10\n\tBPF_TAX                       = 0x0\n\tBPF_TXA                       = 0x80\n\tBPF_W                         = 0x0\n\tBPF_X                         = 0x8\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x2000\n\tBSDLY                         = 0x2000\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_HIGHRES                 = 0x4\n\tCLOCK_LEVEL                   = 0xa\n\tCLOCK_MONOTONIC               = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID      = 0x5\n\tCLOCK_PROF                    = 0x2\n\tCLOCK_REALTIME                = 0x3\n\tCLOCK_THREAD_CPUTIME_ID       = 0x2\n\tCLOCK_VIRTUAL                 = 0x1\n\tCR0                           = 0x0\n\tCR1                           = 0x200\n\tCR2                           = 0x400\n\tCR3                           = 0x600\n\tCRDLY                         = 0x600\n\tCREAD                         = 0x80\n\tCRTSCTS                       = 0x80000000\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIZE                         = 0x30\n\tCSTART                        = 0x11\n\tCSTATUS                       = 0x14\n\tCSTOP                         = 0x13\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tCSWTCH                        = 0x1a\n\tDIOC                          = 0x6400\n\tDIOCGETB                      = 0x6402\n\tDIOCGETC                      = 0x6401\n\tDIOCGETP                      = 0x6408\n\tDIOCSETE                      = 0x6403\n\tDIOCSETP                      = 0x6409\n\tDLT_AIRONET_HEADER            = 0x78\n\tDLT_APPLE_IP_OVER_IEEE1394    = 0x8a\n\tDLT_ARCNET                    = 0x7\n\tDLT_ARCNET_LINUX              = 0x81\n\tDLT_ATM_CLIP                  = 0x13\n\tDLT_ATM_RFC1483               = 0xb\n\tDLT_AURORA                    = 0x7e\n\tDLT_AX25                      = 0x3\n\tDLT_BACNET_MS_TP              = 0xa5\n\tDLT_CHAOS                     = 0x5\n\tDLT_CISCO_IOS                 = 0x76\n\tDLT_C_HDLC                    = 0x68\n\tDLT_DOCSIS                    = 0x8f\n\tDLT_ECONET                    = 0x73\n\tDLT_EN10MB                    = 0x1\n\tDLT_EN3MB                     = 0x2\n\tDLT_ENC                       = 0x6d\n\tDLT_ERF_ETH                   = 0xaf\n\tDLT_ERF_POS                   = 0xb0\n\tDLT_FDDI                      = 0xa\n\tDLT_FRELAY                    = 0x6b\n\tDLT_GCOM_SERIAL               = 0xad\n\tDLT_GCOM_T1E1                 = 0xac\n\tDLT_GPF_F                     = 0xab\n\tDLT_GPF_T                     = 0xaa\n\tDLT_GPRS_LLC                  = 0xa9\n\tDLT_HDLC                      = 0x10\n\tDLT_HHDLC                     = 0x79\n\tDLT_HIPPI                     = 0xf\n\tDLT_IBM_SN                    = 0x92\n\tDLT_IBM_SP                    = 0x91\n\tDLT_IEEE802                   = 0x6\n\tDLT_IEEE802_11                = 0x69\n\tDLT_IEEE802_11_RADIO          = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS      = 0xa3\n\tDLT_IPNET                     = 0xe2\n\tDLT_IPOIB                     = 0xa2\n\tDLT_IP_OVER_FC                = 0x7a\n\tDLT_JUNIPER_ATM1              = 0x89\n\tDLT_JUNIPER_ATM2              = 0x87\n\tDLT_JUNIPER_CHDLC             = 0xb5\n\tDLT_JUNIPER_ES                = 0x84\n\tDLT_JUNIPER_ETHER             = 0xb2\n\tDLT_JUNIPER_FRELAY            = 0xb4\n\tDLT_JUNIPER_GGSN              = 0x85\n\tDLT_JUNIPER_MFR               = 0x86\n\tDLT_JUNIPER_MLFR              = 0x83\n\tDLT_JUNIPER_MLPPP             = 0x82\n\tDLT_JUNIPER_MONITOR           = 0xa4\n\tDLT_JUNIPER_PIC_PEER          = 0xae\n\tDLT_JUNIPER_PPP               = 0xb3\n\tDLT_JUNIPER_PPPOE             = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM         = 0xa8\n\tDLT_JUNIPER_SERVICES          = 0x88\n\tDLT_LINUX_IRDA                = 0x90\n\tDLT_LINUX_LAPD                = 0xb1\n\tDLT_LINUX_SLL                 = 0x71\n\tDLT_LOOP                      = 0x6c\n\tDLT_LTALK                     = 0x72\n\tDLT_MTP2                      = 0x8c\n\tDLT_MTP2_WITH_PHDR            = 0x8b\n\tDLT_MTP3                      = 0x8d\n\tDLT_NULL                      = 0x0\n\tDLT_PCI_EXP                   = 0x7d\n\tDLT_PFLOG                     = 0x75\n\tDLT_PFSYNC                    = 0x12\n\tDLT_PPP                       = 0x9\n\tDLT_PPP_BSDOS                 = 0xe\n\tDLT_PPP_PPPD                  = 0xa6\n\tDLT_PRISM_HEADER              = 0x77\n\tDLT_PRONET                    = 0x4\n\tDLT_RAW                       = 0xc\n\tDLT_RAWAF_MASK                = 0x2240000\n\tDLT_RIO                       = 0x7c\n\tDLT_SCCP                      = 0x8e\n\tDLT_SLIP                      = 0x8\n\tDLT_SLIP_BSDOS                = 0xd\n\tDLT_SUNATM                    = 0x7b\n\tDLT_SYMANTEC_FIREWALL         = 0x63\n\tDLT_TZSP                      = 0x80\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x200\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x800\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x400\n\tEMPTY_SET                     = 0x0\n\tEMT_CPCOVF                    = 0x1\n\tEQUALITY_CHECK                = 0x0\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tFD_CLOEXEC                    = 0x1\n\tFD_NFDBITS                    = 0x40\n\tFD_SETSIZE                    = 0x10000\n\tFF0                           = 0x0\n\tFF1                           = 0x8000\n\tFFDLY                         = 0x8000\n\tFIORDCHK                      = 0x6603\n\tFLUSHALL                      = 0x1\n\tFLUSHDATA                     = 0x0\n\tFLUSHO                        = 0x2000\n\tF_ALLOCSP                     = 0xa\n\tF_ALLOCSP64                   = 0xa\n\tF_BADFD                       = 0x2e\n\tF_BLKSIZE                     = 0x13\n\tF_BLOCKS                      = 0x12\n\tF_CHKFL                       = 0x8\n\tF_COMPAT                      = 0x8\n\tF_DUP2FD                      = 0x9\n\tF_DUP2FD_CLOEXEC              = 0x24\n\tF_DUPFD                       = 0x0\n\tF_DUPFD_CLOEXEC               = 0x25\n\tF_FLOCK                       = 0x35\n\tF_FLOCK64                     = 0x35\n\tF_FLOCKW                      = 0x36\n\tF_FLOCKW64                    = 0x36\n\tF_FREESP                      = 0xb\n\tF_FREESP64                    = 0xb\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0xe\n\tF_GETLK64                     = 0xe\n\tF_GETOWN                      = 0x17\n\tF_GETXFL                      = 0x2d\n\tF_HASREMOTELOCKS              = 0x1a\n\tF_ISSTREAM                    = 0xd\n\tF_MANDDNY                     = 0x10\n\tF_MDACC                       = 0x20\n\tF_NODNY                       = 0x0\n\tF_NPRIV                       = 0x10\n\tF_OFD_GETLK                   = 0x2f\n\tF_OFD_GETLK64                 = 0x2f\n\tF_OFD_SETLK                   = 0x30\n\tF_OFD_SETLK64                 = 0x30\n\tF_OFD_SETLKW                  = 0x31\n\tF_OFD_SETLKW64                = 0x31\n\tF_PRIV                        = 0xf\n\tF_QUOTACTL                    = 0x11\n\tF_RDACC                       = 0x1\n\tF_RDDNY                       = 0x1\n\tF_RDLCK                       = 0x1\n\tF_REVOKE                      = 0x19\n\tF_RMACC                       = 0x4\n\tF_RMDNY                       = 0x4\n\tF_RWACC                       = 0x3\n\tF_RWDNY                       = 0x3\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0x6\n\tF_SETLK64                     = 0x6\n\tF_SETLK64_NBMAND              = 0x2a\n\tF_SETLKW                      = 0x7\n\tF_SETLKW64                    = 0x7\n\tF_SETLK_NBMAND                = 0x2a\n\tF_SETOWN                      = 0x18\n\tF_SHARE                       = 0x28\n\tF_SHARE_NBMAND                = 0x2b\n\tF_UNLCK                       = 0x3\n\tF_UNLKSYS                     = 0x4\n\tF_UNSHARE                     = 0x29\n\tF_WRACC                       = 0x2\n\tF_WRDNY                       = 0x2\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x1\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x8000\n\tIFF_ADDRCONF                  = 0x80000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_ANYCAST                   = 0x400000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x7f203003b5a\n\tIFF_COS_ENABLED               = 0x200000000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEPRECATED                = 0x40000\n\tIFF_DHCPRUNNING               = 0x4000\n\tIFF_DUPLICATE                 = 0x4000000000\n\tIFF_FAILED                    = 0x10000000\n\tIFF_FIXEDMTU                  = 0x1000000000\n\tIFF_INACTIVE                  = 0x40000000\n\tIFF_INTELLIGENT               = 0x400\n\tIFF_IPMP                      = 0x8000000000\n\tIFF_IPMP_CANTCHANGE           = 0x10000000\n\tIFF_IPMP_INVALID              = 0x1ec200080\n\tIFF_IPV4                      = 0x1000000\n\tIFF_IPV6                      = 0x2000000\n\tIFF_L3PROTECT                 = 0x40000000000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x800\n\tIFF_MULTI_BCAST               = 0x1000\n\tIFF_NOACCEPT                  = 0x4000000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOFAILOVER                = 0x8000000\n\tIFF_NOLINKLOCAL               = 0x20000000000\n\tIFF_NOLOCAL                   = 0x20000\n\tIFF_NONUD                     = 0x200000\n\tIFF_NORTEXCH                  = 0x800000\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_NOXMIT                    = 0x10000\n\tIFF_OFFLINE                   = 0x80000000\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PREFERRED                 = 0x400000000\n\tIFF_PRIVATE                   = 0x8000\n\tIFF_PROMISC                   = 0x100\n\tIFF_ROUTER                    = 0x100000\n\tIFF_RUNNING                   = 0x40\n\tIFF_STANDBY                   = 0x20000000\n\tIFF_TEMPORARY                 = 0x800000000\n\tIFF_UNNUMBERED                = 0x2000\n\tIFF_UP                        = 0x1\n\tIFF_VIRTUAL                   = 0x2000000000\n\tIFF_VRRP                      = 0x10000000000\n\tIFF_XRESOLV                   = 0x100000000\n\tIFNAMSIZ                      = 0x10\n\tIFT_1822                      = 0x2\n\tIFT_6TO4                      = 0xca\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_IPV4                      = 0xc8\n\tIFT_IPV6                      = 0xc9\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x2000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_AUTOCONF_MASK              = 0xffff0000\n\tIN_AUTOCONF_NET               = 0xa9fe0000\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_CLASSE_NET                 = 0xffffffff\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_PRIVATE12_MASK             = 0xfff00000\n\tIN_PRIVATE12_NET              = 0xac100000\n\tIN_PRIVATE16_MASK             = 0xffff0000\n\tIN_PRIVATE16_NET              = 0xc0a80000\n\tIN_PRIVATE8_MASK              = 0xff000000\n\tIN_PRIVATE8_NET               = 0xa000000\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_ENCAP                 = 0x4\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_HELLO                 = 0x3f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_ND                    = 0x4d\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_OSPF                  = 0x59\n\tIPPROTO_PIM                   = 0x67\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADD_MEMBERSHIP           = 0x9\n\tIPV6_BOUND_IF                 = 0x41\n\tIPV6_CHECKSUM                 = 0x18\n\tIPV6_DONTFRAG                 = 0x21\n\tIPV6_DROP_MEMBERSHIP          = 0xa\n\tIPV6_DSTOPTS                  = 0xf\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffff0f00\n\tIPV6_FLOWINFO_TCLASS          = 0xf00f\n\tIPV6_HOPLIMIT                 = 0xc\n\tIPV6_HOPOPTS                  = 0xe\n\tIPV6_JOIN_GROUP               = 0x9\n\tIPV6_LEAVE_GROUP              = 0xa\n\tIPV6_MULTICAST_HOPS           = 0x7\n\tIPV6_MULTICAST_IF             = 0x6\n\tIPV6_MULTICAST_LOOP           = 0x8\n\tIPV6_NEXTHOP                  = 0xd\n\tIPV6_PAD1_OPT                 = 0x0\n\tIPV6_PATHMTU                  = 0x25\n\tIPV6_PKTINFO                  = 0xb\n\tIPV6_PREFER_SRC_CGA           = 0x20\n\tIPV6_PREFER_SRC_CGADEFAULT    = 0x10\n\tIPV6_PREFER_SRC_CGAMASK       = 0x30\n\tIPV6_PREFER_SRC_COA           = 0x2\n\tIPV6_PREFER_SRC_DEFAULT       = 0x15\n\tIPV6_PREFER_SRC_HOME          = 0x1\n\tIPV6_PREFER_SRC_MASK          = 0x3f\n\tIPV6_PREFER_SRC_MIPDEFAULT    = 0x1\n\tIPV6_PREFER_SRC_MIPMASK       = 0x3\n\tIPV6_PREFER_SRC_NONCGA        = 0x10\n\tIPV6_PREFER_SRC_PUBLIC        = 0x4\n\tIPV6_PREFER_SRC_TMP           = 0x8\n\tIPV6_PREFER_SRC_TMPDEFAULT    = 0x4\n\tIPV6_PREFER_SRC_TMPMASK       = 0xc\n\tIPV6_RECVDSTOPTS              = 0x28\n\tIPV6_RECVHOPLIMIT             = 0x13\n\tIPV6_RECVHOPOPTS              = 0x14\n\tIPV6_RECVPATHMTU              = 0x24\n\tIPV6_RECVPKTINFO              = 0x12\n\tIPV6_RECVRTHDR                = 0x16\n\tIPV6_RECVRTHDRDSTOPTS         = 0x17\n\tIPV6_RECVTCLASS               = 0x19\n\tIPV6_RTHDR                    = 0x10\n\tIPV6_RTHDRDSTOPTS             = 0x11\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_SEC_OPT                  = 0x22\n\tIPV6_SRC_PREFERENCES          = 0x23\n\tIPV6_TCLASS                   = 0x26\n\tIPV6_UNICAST_HOPS             = 0x5\n\tIPV6_UNSPEC_SRC               = 0x42\n\tIPV6_USE_MIN_MTU              = 0x20\n\tIPV6_V6ONLY                   = 0x27\n\tIP_ADD_MEMBERSHIP             = 0x13\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x17\n\tIP_BLOCK_SOURCE               = 0x15\n\tIP_BOUND_IF                   = 0x41\n\tIP_BROADCAST                  = 0x106\n\tIP_BROADCAST_TTL              = 0x43\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPINIT_IF                = 0x45\n\tIP_DONTFRAG                   = 0x1b\n\tIP_DONTROUTE                  = 0x105\n\tIP_DROP_MEMBERSHIP            = 0x14\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x18\n\tIP_HDRINCL                    = 0x2\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_IF               = 0x10\n\tIP_MULTICAST_LOOP             = 0x12\n\tIP_MULTICAST_TTL              = 0x11\n\tIP_NEXTHOP                    = 0x19\n\tIP_OPTIONS                    = 0x1\n\tIP_PKTINFO                    = 0x1a\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x9\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVPKTINFO                = 0x1a\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVSLLA                   = 0xa\n\tIP_RECVTOS                    = 0xc\n\tIP_RECVTTL                    = 0xb\n\tIP_RETOPTS                    = 0x8\n\tIP_REUSEADDR                  = 0x104\n\tIP_SEC_OPT                    = 0x22\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x16\n\tIP_UNSPEC_SRC                 = 0x42\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x200\n\tIXANY                         = 0x800\n\tIXOFF                         = 0x1000\n\tIXON                          = 0x400\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_ACCESS_DEFAULT           = 0x6\n\tMADV_ACCESS_LWP               = 0x7\n\tMADV_ACCESS_MANY              = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_FREE                     = 0x5\n\tMADV_NORMAL                   = 0x0\n\tMADV_PURGE                    = 0x9\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_WILLNEED                 = 0x3\n\tMAP_32BIT                     = 0x80\n\tMAP_ALIGN                     = 0x200\n\tMAP_ANON                      = 0x100\n\tMAP_ANONYMOUS                 = 0x100\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x10\n\tMAP_INITDATA                  = 0x800\n\tMAP_NORESERVE                 = 0x40\n\tMAP_PRIVATE                   = 0x2\n\tMAP_RENAME                    = 0x20\n\tMAP_SHARED                    = 0x1\n\tMAP_TEXT                      = 0x400\n\tMAP_TYPE                      = 0xf\n\tMCAST_BLOCK_SOURCE            = 0x2b\n\tMCAST_EXCLUDE                 = 0x2\n\tMCAST_INCLUDE                 = 0x1\n\tMCAST_JOIN_GROUP              = 0x29\n\tMCAST_JOIN_SOURCE_GROUP       = 0x2d\n\tMCAST_LEAVE_GROUP             = 0x2a\n\tMCAST_LEAVE_SOURCE_GROUP      = 0x2e\n\tMCAST_UNBLOCK_SOURCE          = 0x2c\n\tMCL_CURRENT                   = 0x1\n\tMCL_FUTURE                    = 0x2\n\tMSG_CTRUNC                    = 0x10\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_DONTWAIT                  = 0x80\n\tMSG_DUPCTRL                   = 0x800\n\tMSG_EOR                       = 0x8\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_NOSIGNAL                  = 0x200\n\tMSG_NOTIFICATION              = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x20\n\tMSG_WAITALL                   = 0x40\n\tMSG_XPG4_2                    = 0x8000\n\tMS_ASYNC                      = 0x1\n\tMS_INVALIDATE                 = 0x2\n\tMS_OLDSYNC                    = 0x0\n\tMS_SYNC                       = 0x4\n\tM_FLUSH                       = 0x86\n\tNAME_MAX                      = 0xff\n\tNEWDEV                        = 0x1\n\tNFDBITS                       = 0x40\n\tNL0                           = 0x0\n\tNL1                           = 0x100\n\tNLDLY                         = 0x100\n\tNOFLSH                        = 0x80\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tOLDDEV                        = 0x0\n\tONBITSMAJOR                   = 0x7\n\tONBITSMINOR                   = 0x8\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tOPENFAIL                      = -0x1\n\tOPOST                         = 0x1\n\tO_ACCMODE                     = 0x600003\n\tO_APPEND                      = 0x8\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DIRECT                      = 0x2000000\n\tO_DIRECTORY                   = 0x1000000\n\tO_DSYNC                       = 0x40\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x400000\n\tO_LARGEFILE                   = 0x2000\n\tO_NDELAY                      = 0x4\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x20000\n\tO_NOLINKS                     = 0x40000\n\tO_NONBLOCK                    = 0x80\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSYNC                       = 0x8000\n\tO_SEARCH                      = 0x200000\n\tO_SIOCGIFCONF                 = -0x3ff796ec\n\tO_SIOCGLIFCONF                = -0x3fef9688\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_WRONLY                      = 0x1\n\tO_XATTR                       = 0x4000\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x4000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0xfffffffffffffffd\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x9\n\tRTAX_NETMASK                  = 0x2\n\tRTAX_SRC                      = 0x8\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTA_NUMBITS                   = 0x9\n\tRTA_SRC                       = 0x100\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_INDIRECT                  = 0x40000\n\tRTF_KERNEL                    = 0x80000\n\tRTF_LLINFO                    = 0x400\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTIRT                   = 0x10000\n\tRTF_PRIVATE                   = 0x2000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_REJECT                    = 0x8\n\tRTF_SETSRC                    = 0x20000\n\tRTF_STATIC                    = 0x800\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTF_ZONE                      = 0x100000\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_CHGADDR                   = 0xf\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_FREEADDR                  = 0x10\n\tRTM_GET                       = 0x4\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_VERSION                   = 0x3\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRT_AWARE                      = 0x1\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tSCM_RIGHTS                    = 0x1010\n\tSCM_TIMESTAMP                 = 0x1013\n\tSCM_UCRED                     = 0x1012\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIG2STR_MAX                   = 0x20\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDRT                     = -0x7fcf8df6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fdb96e0\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELRT                     = -0x7fcf8df5\n\tSIOCDXARP                     = -0x7fff9658\n\tSIOCGARP                      = -0x3fdb96e1\n\tSIOCGDSTINFO                  = -0x3fff965c\n\tSIOCGENADDR                   = -0x3fdf96ab\n\tSIOCGENPSTATS                 = -0x3fdf96c7\n\tSIOCGETLSGCNT                 = -0x3fef8deb\n\tSIOCGETNAME                   = 0x40107334\n\tSIOCGETPEER                   = 0x40107335\n\tSIOCGETPROP                   = -0x3fff8f44\n\tSIOCGETSGCNT                  = -0x3feb8deb\n\tSIOCGETSYNC                   = -0x3fdf96d3\n\tSIOCGETVIFCNT                 = -0x3feb8dec\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fdf96f3\n\tSIOCGIFBRDADDR                = -0x3fdf96e9\n\tSIOCGIFCONF                   = -0x3ff796a4\n\tSIOCGIFDSTADDR                = -0x3fdf96f1\n\tSIOCGIFFLAGS                  = -0x3fdf96ef\n\tSIOCGIFHWADDR                 = -0x3fdf9647\n\tSIOCGIFINDEX                  = -0x3fdf96a6\n\tSIOCGIFMEM                    = -0x3fdf96ed\n\tSIOCGIFMETRIC                 = -0x3fdf96e5\n\tSIOCGIFMTU                    = -0x3fdf96ea\n\tSIOCGIFMUXID                  = -0x3fdf96a8\n\tSIOCGIFNETMASK                = -0x3fdf96e7\n\tSIOCGIFNUM                    = 0x40046957\n\tSIOCGIP6ADDRPOLICY            = -0x3fff965e\n\tSIOCGIPMSFILTER               = -0x3ffb964c\n\tSIOCGLIFADDR                  = -0x3f87968f\n\tSIOCGLIFBINDING               = -0x3f879666\n\tSIOCGLIFBRDADDR               = -0x3f879685\n\tSIOCGLIFCONF                  = -0x3fef965b\n\tSIOCGLIFDADSTATE              = -0x3f879642\n\tSIOCGLIFDSTADDR               = -0x3f87968d\n\tSIOCGLIFFLAGS                 = -0x3f87968b\n\tSIOCGLIFGROUPINFO             = -0x3f4b9663\n\tSIOCGLIFGROUPNAME             = -0x3f879664\n\tSIOCGLIFHWADDR                = -0x3f879640\n\tSIOCGLIFINDEX                 = -0x3f87967b\n\tSIOCGLIFLNKINFO               = -0x3f879674\n\tSIOCGLIFMETRIC                = -0x3f879681\n\tSIOCGLIFMTU                   = -0x3f879686\n\tSIOCGLIFMUXID                 = -0x3f87967d\n\tSIOCGLIFNETMASK               = -0x3f879683\n\tSIOCGLIFNUM                   = -0x3ff3967e\n\tSIOCGLIFSRCOF                 = -0x3fef964f\n\tSIOCGLIFSUBNET                = -0x3f879676\n\tSIOCGLIFTOKEN                 = -0x3f879678\n\tSIOCGLIFUSESRC                = -0x3f879651\n\tSIOCGLIFZONE                  = -0x3f879656\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGMSFILTER                 = -0x3ffb964e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSTAMP                    = -0x3fef9646\n\tSIOCGXARP                     = -0x3fff9659\n\tSIOCIFDETACH                  = -0x7fdf96c8\n\tSIOCILB                       = -0x3ffb9645\n\tSIOCLIFADDIF                  = -0x3f879691\n\tSIOCLIFDELND                  = -0x7f879673\n\tSIOCLIFGETND                  = -0x3f879672\n\tSIOCLIFREMOVEIF               = -0x7f879692\n\tSIOCLIFSETND                  = -0x7f879671\n\tSIOCLOWER                     = -0x7fdf96d7\n\tSIOCSARP                      = -0x7fdb96e2\n\tSIOCSCTPGOPT                  = -0x3fef9653\n\tSIOCSCTPPEELOFF               = -0x3ffb9652\n\tSIOCSCTPSOPT                  = -0x7fef9654\n\tSIOCSENABLESDP                = -0x3ffb9649\n\tSIOCSETPROP                   = -0x7ffb8f43\n\tSIOCSETSYNC                   = -0x7fdf96d4\n\tSIOCSHIWAT                    = -0x7ffb8d00\n\tSIOCSIFADDR                   = -0x7fdf96f4\n\tSIOCSIFBRDADDR                = -0x7fdf96e8\n\tSIOCSIFDSTADDR                = -0x7fdf96f2\n\tSIOCSIFFLAGS                  = -0x7fdf96f0\n\tSIOCSIFINDEX                  = -0x7fdf96a5\n\tSIOCSIFMEM                    = -0x7fdf96ee\n\tSIOCSIFMETRIC                 = -0x7fdf96e4\n\tSIOCSIFMTU                    = -0x7fdf96eb\n\tSIOCSIFMUXID                  = -0x7fdf96a7\n\tSIOCSIFNAME                   = -0x7fdf96b7\n\tSIOCSIFNETMASK                = -0x7fdf96e6\n\tSIOCSIP6ADDRPOLICY            = -0x7fff965d\n\tSIOCSIPMSFILTER               = -0x7ffb964b\n\tSIOCSLGETREQ                  = -0x3fdf96b9\n\tSIOCSLIFADDR                  = -0x7f879690\n\tSIOCSLIFBRDADDR               = -0x7f879684\n\tSIOCSLIFDSTADDR               = -0x7f87968e\n\tSIOCSLIFFLAGS                 = -0x7f87968c\n\tSIOCSLIFGROUPNAME             = -0x7f879665\n\tSIOCSLIFINDEX                 = -0x7f87967a\n\tSIOCSLIFLNKINFO               = -0x7f879675\n\tSIOCSLIFMETRIC                = -0x7f879680\n\tSIOCSLIFMTU                   = -0x7f879687\n\tSIOCSLIFMUXID                 = -0x7f87967c\n\tSIOCSLIFNAME                  = -0x3f87967f\n\tSIOCSLIFNETMASK               = -0x7f879682\n\tSIOCSLIFPREFIX                = -0x3f879641\n\tSIOCSLIFSUBNET                = -0x7f879677\n\tSIOCSLIFTOKEN                 = -0x7f879679\n\tSIOCSLIFUSESRC                = -0x7f879650\n\tSIOCSLIFZONE                  = -0x7f879655\n\tSIOCSLOWAT                    = -0x7ffb8cfe\n\tSIOCSLSTAT                    = -0x7fdf96b8\n\tSIOCSMSFILTER                 = -0x7ffb964d\n\tSIOCSPGRP                     = -0x7ffb8cf8\n\tSIOCSPROMISC                  = -0x7ffb96d0\n\tSIOCSQPTR                     = -0x3ffb9648\n\tSIOCSSDSTATS                  = -0x3fdf96d2\n\tSIOCSSESTATS                  = -0x3fdf96d1\n\tSIOCSXARP                     = -0x7fff965a\n\tSIOCTMYADDR                   = -0x3ff79670\n\tSIOCTMYSITE                   = -0x3ff7966e\n\tSIOCTONLINK                   = -0x3ff7966f\n\tSIOCUPPER                     = -0x7fdf96d8\n\tSIOCX25RCV                    = -0x3fdf96c4\n\tSIOCX25TBL                    = -0x3fdf96c3\n\tSIOCX25XMT                    = -0x3fdf96c5\n\tSIOCXPROTO                    = 0x20007337\n\tSOCK_CLOEXEC                  = 0x80000\n\tSOCK_DGRAM                    = 0x1\n\tSOCK_NDELAY                   = 0x200000\n\tSOCK_NONBLOCK                 = 0x100000\n\tSOCK_RAW                      = 0x4\n\tSOCK_RDM                      = 0x5\n\tSOCK_SEQPACKET                = 0x6\n\tSOCK_STREAM                   = 0x2\n\tSOCK_TYPE_MASK                = 0xffff\n\tSOL_FILTER                    = 0xfffc\n\tSOL_PACKET                    = 0xfffd\n\tSOL_ROUTE                     = 0xfffe\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x80\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_ALL                        = 0x3f\n\tSO_ALLZONES                   = 0x1014\n\tSO_ANON_MLP                   = 0x100a\n\tSO_ATTACH_FILTER              = 0x40000001\n\tSO_BAND                       = 0x4000\n\tSO_BROADCAST                  = 0x20\n\tSO_COPYOPT                    = 0x80000\n\tSO_DEBUG                      = 0x1\n\tSO_DELIM                      = 0x8000\n\tSO_DETACH_FILTER              = 0x40000002\n\tSO_DGRAM_ERRIND               = 0x200\n\tSO_DOMAIN                     = 0x100c\n\tSO_DONTLINGER                 = -0x81\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROPT                     = 0x40000\n\tSO_ERROR                      = 0x1007\n\tSO_EXCLBIND                   = 0x1015\n\tSO_HIWAT                      = 0x10\n\tSO_ISNTTY                     = 0x800\n\tSO_ISTTY                      = 0x400\n\tSO_KEEPALIVE                  = 0x8\n\tSO_LINGER                     = 0x80\n\tSO_LOWAT                      = 0x20\n\tSO_MAC_EXEMPT                 = 0x100b\n\tSO_MAC_IMPLICIT               = 0x1016\n\tSO_MAXBLK                     = 0x100000\n\tSO_MAXPSZ                     = 0x8\n\tSO_MINPSZ                     = 0x4\n\tSO_MREADOFF                   = 0x80\n\tSO_MREADON                    = 0x40\n\tSO_NDELOFF                    = 0x200\n\tSO_NDELON                     = 0x100\n\tSO_NODELIM                    = 0x10000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PROTOTYPE                  = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVPSH                     = 0x100d\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_READOPT                    = 0x1\n\tSO_RECVUCRED                  = 0x400\n\tSO_REUSEADDR                  = 0x4\n\tSO_SECATTR                    = 0x1011\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_STRHOLD                    = 0x20000\n\tSO_TAIL                       = 0x200000\n\tSO_TIMESTAMP                  = 0x1013\n\tSO_TONSTOP                    = 0x2000\n\tSO_TOSTOP                     = 0x1000\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_VRRP                       = 0x1017\n\tSO_WROFF                      = 0x2\n\tS_ENFMT                       = 0x400\n\tS_IAMB                        = 0x1ff\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFDOOR                      = 0xd000\n\tS_IFIFO                       = 0x1000\n\tS_IFLNK                       = 0xa000\n\tS_IFMT                        = 0xf000\n\tS_IFNAM                       = 0x5000\n\tS_IFPORT                      = 0xe000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_INSEM                       = 0x1\n\tS_INSHD                       = 0x2\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXGRP                       = 0x8\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x800\n\tTAB2                          = 0x1000\n\tTAB3                          = 0x1800\n\tTABDLY                        = 0x1800\n\tTCFLSH                        = 0x5407\n\tTCGETA                        = 0x5401\n\tTCGETS                        = 0x540d\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_ABORT_THRESHOLD           = 0x11\n\tTCP_ANONPRIVBIND              = 0x20\n\tTCP_CONGESTION                = 0x25\n\tTCP_CONN_ABORT_THRESHOLD      = 0x13\n\tTCP_CONN_NOTIFY_THRESHOLD     = 0x12\n\tTCP_CORK                      = 0x18\n\tTCP_EXCLBIND                  = 0x21\n\tTCP_INIT_CWND                 = 0x15\n\tTCP_KEEPALIVE                 = 0x8\n\tTCP_KEEPALIVE_ABORT_THRESHOLD = 0x17\n\tTCP_KEEPALIVE_THRESHOLD       = 0x16\n\tTCP_KEEPCNT                   = 0x23\n\tTCP_KEEPIDLE                  = 0x22\n\tTCP_KEEPINTVL                 = 0x24\n\tTCP_LINGER2                   = 0x1c\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MSS                       = 0x218\n\tTCP_NODELAY                   = 0x1\n\tTCP_NOTIFY_THRESHOLD          = 0x10\n\tTCP_RECVDSTADDR               = 0x14\n\tTCP_RTO_INITIAL               = 0x19\n\tTCP_RTO_MAX                   = 0x1b\n\tTCP_RTO_MIN                   = 0x1a\n\tTCSAFLUSH                     = 0x5410\n\tTCSBRK                        = 0x5405\n\tTCSETA                        = 0x5402\n\tTCSETAF                       = 0x5404\n\tTCSETAW                       = 0x5403\n\tTCSETS                        = 0x540e\n\tTCSETSF                       = 0x5410\n\tTCSETSW                       = 0x540f\n\tTCXONC                        = 0x5406\n\tTIMER_ABSTIME                 = 0x1\n\tTIMER_RELTIME                 = 0x0\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x747a\n\tTIOCCDTR                      = 0x7478\n\tTIOCCILOOP                    = 0x746c\n\tTIOCEXCL                      = 0x740d\n\tTIOCFLUSH                     = 0x7410\n\tTIOCGETC                      = 0x7412\n\tTIOCGETD                      = 0x7400\n\tTIOCGETP                      = 0x7408\n\tTIOCGLTC                      = 0x7474\n\tTIOCGPGRP                     = 0x7414\n\tTIOCGPPS                      = 0x547d\n\tTIOCGPPSEV                    = 0x547f\n\tTIOCGSID                      = 0x7416\n\tTIOCGSOFTCAR                  = 0x5469\n\tTIOCGWINSZ                    = 0x5468\n\tTIOCHPCL                      = 0x7402\n\tTIOCKBOF                      = 0x5409\n\tTIOCKBON                      = 0x5408\n\tTIOCLBIC                      = 0x747e\n\tTIOCLBIS                      = 0x747f\n\tTIOCLGET                      = 0x747c\n\tTIOCLSET                      = 0x747d\n\tTIOCMBIC                      = 0x741c\n\tTIOCMBIS                      = 0x741b\n\tTIOCMGET                      = 0x741d\n\tTIOCMSET                      = 0x741a\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x7471\n\tTIOCNXCL                      = 0x740e\n\tTIOCOUTQ                      = 0x7473\n\tTIOCREMOTE                    = 0x741e\n\tTIOCSBRK                      = 0x747b\n\tTIOCSCTTY                     = 0x7484\n\tTIOCSDTR                      = 0x7479\n\tTIOCSETC                      = 0x7411\n\tTIOCSETD                      = 0x7401\n\tTIOCSETN                      = 0x740a\n\tTIOCSETP                      = 0x7409\n\tTIOCSIGNAL                    = 0x741f\n\tTIOCSILOOP                    = 0x746d\n\tTIOCSLTC                      = 0x7475\n\tTIOCSPGRP                     = 0x7415\n\tTIOCSPPS                      = 0x547e\n\tTIOCSSOFTCAR                  = 0x546a\n\tTIOCSTART                     = 0x746e\n\tTIOCSTI                       = 0x7417\n\tTIOCSTOP                      = 0x746f\n\tTIOCSWINSZ                    = 0x5467\n\tTOSTOP                        = 0x100\n\tUTIME_NOW                     = -0x1\n\tUTIME_OMIT                    = -0x2\n\tVCEOF                         = 0x8\n\tVCEOL                         = 0x9\n\tVDISCARD                      = 0xd\n\tVDSUSP                        = 0xb\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVERASE2                       = 0x11\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xf\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xc\n\tVSTART                        = 0x8\n\tVSTATUS                       = 0x10\n\tVSTOP                         = 0x9\n\tVSUSP                         = 0xa\n\tVSWTCH                        = 0x7\n\tVT0                           = 0x0\n\tVT1                           = 0x4000\n\tVTDLY                         = 0x4000\n\tVTIME                         = 0x5\n\tVWERASE                       = 0xe\n\tWCONTFLG                      = 0xffff\n\tWCONTINUED                    = 0x8\n\tWCOREFLG                      = 0x80\n\tWEXITED                       = 0x1\n\tWNOHANG                       = 0x40\n\tWNOWAIT                       = 0x80\n\tWOPTMASK                      = 0xcf\n\tWRAP                          = 0x20000\n\tWSIGMASK                      = 0x7f\n\tWSTOPFLG                      = 0x7f\n\tWSTOPPED                      = 0x4\n\tWTRAPPED                      = 0x2\n\tWUNTRACED                     = 0x4\n\tXCASE                         = 0x4\n\tXTABS                         = 0x1800\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x39)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x2f)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x31)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOCKUNMAPPED   = syscall.Errno(0x48)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTACTIVE      = syscall.Errno(0x49)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTRECOVERABLE = syscall.Errno(0x3b)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x30)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0x3a)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMOTE         = syscall.Errno(0x42)\n\tERESTART        = syscall.Errno(0x5b)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGABRT    = syscall.Signal(0x6)\n\tSIGALRM    = syscall.Signal(0xe)\n\tSIGBUS     = syscall.Signal(0xa)\n\tSIGCANCEL  = syscall.Signal(0x24)\n\tSIGCHLD    = syscall.Signal(0x12)\n\tSIGCLD     = syscall.Signal(0x12)\n\tSIGCONT    = syscall.Signal(0x19)\n\tSIGEMT     = syscall.Signal(0x7)\n\tSIGFPE     = syscall.Signal(0x8)\n\tSIGFREEZE  = syscall.Signal(0x22)\n\tSIGHUP     = syscall.Signal(0x1)\n\tSIGILL     = syscall.Signal(0x4)\n\tSIGINFO    = syscall.Signal(0x29)\n\tSIGINT     = syscall.Signal(0x2)\n\tSIGIO      = syscall.Signal(0x16)\n\tSIGIOT     = syscall.Signal(0x6)\n\tSIGJVM1    = syscall.Signal(0x27)\n\tSIGJVM2    = syscall.Signal(0x28)\n\tSIGKILL    = syscall.Signal(0x9)\n\tSIGLOST    = syscall.Signal(0x25)\n\tSIGLWP     = syscall.Signal(0x21)\n\tSIGPIPE    = syscall.Signal(0xd)\n\tSIGPOLL    = syscall.Signal(0x16)\n\tSIGPROF    = syscall.Signal(0x1d)\n\tSIGPWR     = syscall.Signal(0x13)\n\tSIGQUIT    = syscall.Signal(0x3)\n\tSIGSEGV    = syscall.Signal(0xb)\n\tSIGSTOP    = syscall.Signal(0x17)\n\tSIGSYS     = syscall.Signal(0xc)\n\tSIGTERM    = syscall.Signal(0xf)\n\tSIGTHAW    = syscall.Signal(0x23)\n\tSIGTRAP    = syscall.Signal(0x5)\n\tSIGTSTP    = syscall.Signal(0x18)\n\tSIGTTIN    = syscall.Signal(0x1a)\n\tSIGTTOU    = syscall.Signal(0x1b)\n\tSIGURG     = syscall.Signal(0x15)\n\tSIGUSR1    = syscall.Signal(0x10)\n\tSIGUSR2    = syscall.Signal(0x11)\n\tSIGVTALRM  = syscall.Signal(0x1c)\n\tSIGWAITING = syscall.Signal(0x20)\n\tSIGWINCH   = syscall.Signal(0x14)\n\tSIGXCPU    = syscall.Signal(0x1e)\n\tSIGXFSZ    = syscall.Signal(0x1f)\n\tSIGXRES    = syscall.Signal(0x26)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock situation detected/avoided\"},\n\t{46, \"ENOLCK\", \"no record locks available\"},\n\t{47, \"ECANCELED\", \"operation canceled\"},\n\t{48, \"ENOTSUP\", \"operation not supported\"},\n\t{49, \"EDQUOT\", \"disc quota exceeded\"},\n\t{50, \"EBADE\", \"bad exchange descriptor\"},\n\t{51, \"EBADR\", \"bad request descriptor\"},\n\t{52, \"EXFULL\", \"message tables full\"},\n\t{53, \"ENOANO\", \"anode table overflow\"},\n\t{54, \"EBADRQC\", \"bad request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock\"},\n\t{57, \"EBFONT\", \"bad font file format\"},\n\t{58, \"EOWNERDEAD\", \"owner of the lock died\"},\n\t{59, \"ENOTRECOVERABLE\", \"lock is not recoverable\"},\n\t{60, \"ENOSTR\", \"not a stream device\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of stream resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"ELOCKUNMAPPED\", \"locked lock was unmapped \"},\n\t{73, \"ENOTACTIVE\", \"facility is not active\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"not a data message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in more shared libraries than system limit\"},\n\t{87, \"ELIBEXEC\", \"can not exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"illegal byte sequence\"},\n\t{89, \"ENOSYS\", \"operation not applicable\"},\n\t{90, \"ELOOP\", \"number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS\"},\n\t{91, \"ERESTART\", \"error 91\"},\n\t{92, \"ESTRPIPE\", \"error 92\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"option not supported by protocol\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"EOPNOTSUPP\", \"operation not supported on transport endpoint\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection because of reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after socket shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale NFS file handle\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal Instruction\"},\n\t{5, \"SIGTRAP\", \"trace/Breakpoint Trap\"},\n\t{6, \"SIGABRT\", \"abort\"},\n\t{7, \"SIGEMT\", \"emulation Trap\"},\n\t{8, \"SIGFPE\", \"arithmetic Exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus Error\"},\n\t{11, \"SIGSEGV\", \"segmentation Fault\"},\n\t{12, \"SIGSYS\", \"bad System Call\"},\n\t{13, \"SIGPIPE\", \"broken Pipe\"},\n\t{14, \"SIGALRM\", \"alarm Clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user Signal 1\"},\n\t{17, \"SIGUSR2\", \"user Signal 2\"},\n\t{18, \"SIGCHLD\", \"child Status Changed\"},\n\t{19, \"SIGPWR\", \"power-Fail/Restart\"},\n\t{20, \"SIGWINCH\", \"window Size Change\"},\n\t{21, \"SIGURG\", \"urgent Socket Condition\"},\n\t{22, \"SIGIO\", \"pollable Event\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped (user)\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual Timer Expired\"},\n\t{29, \"SIGPROF\", \"profiling Timer Expired\"},\n\t{30, \"SIGXCPU\", \"cpu Limit Exceeded\"},\n\t{31, \"SIGXFSZ\", \"file Size Limit Exceeded\"},\n\t{32, \"SIGWAITING\", \"no runnable lwp\"},\n\t{33, \"SIGLWP\", \"inter-lwp signal\"},\n\t{34, \"SIGFREEZE\", \"checkpoint Freeze\"},\n\t{35, \"SIGTHAW\", \"checkpoint Thaw\"},\n\t{36, \"SIGCANCEL\", \"thread Cancellation\"},\n\t{37, \"SIGLOST\", \"resource Lost\"},\n\t{38, \"SIGXRES\", \"resource Control Exceeded\"},\n\t{39, \"SIGJVM1\", \"reserved for JVM 1\"},\n\t{40, \"SIGJVM2\", \"reserved for JVM 2\"},\n\t{41, \"SIGINFO\", \"information Request\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\n// Hand edited based on zerrors_linux_s390x.go\n// TODO: auto-generate.\n\npackage unix\n\nconst (\n\tBRKINT                   = 0x0001\n\tCLOCAL                   = 0x1\n\tCLOCK_MONOTONIC          = 0x1\n\tCLOCK_PROCESS_CPUTIME_ID = 0x2\n\tCLOCK_REALTIME           = 0x0\n\tCLOCK_THREAD_CPUTIME_ID  = 0x3\n\tCLONE_NEWIPC             = 0x08000000\n\tCLONE_NEWNET             = 0x40000000\n\tCLONE_NEWNS              = 0x00020000\n\tCLONE_NEWPID             = 0x20000000\n\tCLONE_NEWUTS             = 0x04000000\n\tCLONE_PARENT             = 0x00008000\n\tCS8                      = 0x0030\n\tCSIZE                    = 0x0030\n\tECHO                     = 0x00000008\n\tECHONL                   = 0x00000001\n\tEFD_SEMAPHORE            = 0x00002000\n\tEFD_CLOEXEC              = 0x00001000\n\tEFD_NONBLOCK             = 0x00000004\n\tEPOLL_CLOEXEC            = 0x00001000\n\tEPOLL_CTL_ADD            = 0\n\tEPOLL_CTL_MOD            = 1\n\tEPOLL_CTL_DEL            = 2\n\tEPOLLRDNORM              = 0x0001\n\tEPOLLRDBAND              = 0x0002\n\tEPOLLIN                  = 0x0003\n\tEPOLLOUT                 = 0x0004\n\tEPOLLWRBAND              = 0x0008\n\tEPOLLPRI                 = 0x0010\n\tEPOLLERR                 = 0x0020\n\tEPOLLHUP                 = 0x0040\n\tEPOLLEXCLUSIVE           = 0x20000000\n\tEPOLLONESHOT             = 0x40000000\n\tFD_CLOEXEC               = 0x01\n\tFD_CLOFORK               = 0x02\n\tFD_SETSIZE               = 0x800\n\tFNDELAY                  = 0x04\n\tF_CLOSFD                 = 9\n\tF_CONTROL_CVT            = 13\n\tF_DUPFD                  = 0\n\tF_DUPFD2                 = 8\n\tF_GETFD                  = 1\n\tF_GETFL                  = 259\n\tF_GETLK                  = 5\n\tF_GETOWN                 = 10\n\tF_OK                     = 0x0\n\tF_RDLCK                  = 1\n\tF_SETFD                  = 2\n\tF_SETFL                  = 4\n\tF_SETLK                  = 6\n\tF_SETLKW                 = 7\n\tF_SETOWN                 = 11\n\tF_SETTAG                 = 12\n\tF_UNLCK                  = 3\n\tF_WRLCK                  = 2\n\tFSTYPE_ZFS               = 0xe9 //\"Z\"\n\tFSTYPE_HFS               = 0xc8 //\"H\"\n\tFSTYPE_NFS               = 0xd5 //\"N\"\n\tFSTYPE_TFS               = 0xe3 //\"T\"\n\tFSTYPE_AUTOMOUNT         = 0xc1 //\"A\"\n\tGRND_NONBLOCK            = 1\n\tGRND_RANDOM              = 2\n\tHUPCL                    = 0x0100 // Hang up on last close\n\tIN_CLOEXEC               = 0x00001000\n\tIN_NONBLOCK              = 0x00000004\n\tIN_ACCESS                = 0x00000001\n\tIN_MODIFY                = 0x00000002\n\tIN_ATTRIB                = 0x00000004\n\tIN_CLOSE_WRITE           = 0x00000008\n\tIN_CLOSE_NOWRITE         = 0x00000010\n\tIN_OPEN                  = 0x00000020\n\tIN_MOVED_FROM            = 0x00000040\n\tIN_MOVED_TO              = 0x00000080\n\tIN_CREATE                = 0x00000100\n\tIN_DELETE                = 0x00000200\n\tIN_DELETE_SELF           = 0x00000400\n\tIN_MOVE_SELF             = 0x00000800\n\tIN_UNMOUNT               = 0x00002000\n\tIN_Q_OVERFLOW            = 0x00004000\n\tIN_IGNORED               = 0x00008000\n\tIN_CLOSE                 = (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)\n\tIN_MOVE                  = (IN_MOVED_FROM | IN_MOVED_TO)\n\tIN_ALL_EVENTS            = (IN_ACCESS | IN_MODIFY | IN_ATTRIB |\n\t\tIN_CLOSE | IN_OPEN | IN_MOVE |\n\t\tIN_CREATE | IN_DELETE | IN_DELETE_SELF |\n\t\tIN_MOVE_SELF)\n\tIN_ONLYDIR                      = 0x01000000\n\tIN_DONT_FOLLOW                  = 0x02000000\n\tIN_EXCL_UNLINK                  = 0x04000000\n\tIN_MASK_CREATE                  = 0x10000000\n\tIN_MASK_ADD                     = 0x20000000\n\tIN_ISDIR                        = 0x40000000\n\tIN_ONESHOT                      = 0x80000000\n\tIP6F_MORE_FRAG                  = 0x0001\n\tIP6F_OFF_MASK                   = 0xfff8\n\tIP6F_RESERVED_MASK              = 0x0006\n\tIP6OPT_JUMBO                    = 0xc2\n\tIP6OPT_JUMBO_LEN                = 6\n\tIP6OPT_MUTABLE                  = 0x20\n\tIP6OPT_NSAP_ADDR                = 0xc3\n\tIP6OPT_PAD1                     = 0x00\n\tIP6OPT_PADN                     = 0x01\n\tIP6OPT_ROUTER_ALERT             = 0x05\n\tIP6OPT_TUNNEL_LIMIT             = 0x04\n\tIP6OPT_TYPE_DISCARD             = 0x40\n\tIP6OPT_TYPE_FORCEICMP           = 0x80\n\tIP6OPT_TYPE_ICMP                = 0xc0\n\tIP6OPT_TYPE_SKIP                = 0x00\n\tIP6_ALERT_AN                    = 0x0002\n\tIP6_ALERT_MLD                   = 0x0000\n\tIP6_ALERT_RSVP                  = 0x0001\n\tIPPORT_RESERVED                 = 1024\n\tIPPORT_USERRESERVED             = 5000\n\tIPPROTO_AH                      = 51\n\tSOL_AH                          = 51\n\tIPPROTO_DSTOPTS                 = 60\n\tSOL_DSTOPTS                     = 60\n\tIPPROTO_EGP                     = 8\n\tSOL_EGP                         = 8\n\tIPPROTO_ESP                     = 50\n\tSOL_ESP                         = 50\n\tIPPROTO_FRAGMENT                = 44\n\tSOL_FRAGMENT                    = 44\n\tIPPROTO_GGP                     = 2\n\tSOL_GGP                         = 2\n\tIPPROTO_HOPOPTS                 = 0\n\tSOL_HOPOPTS                     = 0\n\tIPPROTO_ICMP                    = 1\n\tSOL_ICMP                        = 1\n\tIPPROTO_ICMPV6                  = 58\n\tSOL_ICMPV6                      = 58\n\tIPPROTO_IDP                     = 22\n\tSOL_IDP                         = 22\n\tIPPROTO_IP                      = 0\n\tSOL_IP                          = 0\n\tIPPROTO_IPV6                    = 41\n\tSOL_IPV6                        = 41\n\tIPPROTO_MAX                     = 256\n\tSOL_MAX                         = 256\n\tIPPROTO_NONE                    = 59\n\tSOL_NONE                        = 59\n\tIPPROTO_PUP                     = 12\n\tSOL_PUP                         = 12\n\tIPPROTO_RAW                     = 255\n\tSOL_RAW                         = 255\n\tIPPROTO_ROUTING                 = 43\n\tSOL_ROUTING                     = 43\n\tIPPROTO_TCP                     = 6\n\tSOL_TCP                         = 6\n\tIPPROTO_UDP                     = 17\n\tSOL_UDP                         = 17\n\tIPV6_ADDR_PREFERENCES           = 32\n\tIPV6_CHECKSUM                   = 19\n\tIPV6_DONTFRAG                   = 29\n\tIPV6_DSTOPTS                    = 23\n\tIPV6_HOPLIMIT                   = 11\n\tIPV6_HOPOPTS                    = 22\n\tIPV6_JOIN_GROUP                 = 5\n\tIPV6_LEAVE_GROUP                = 6\n\tIPV6_MULTICAST_HOPS             = 9\n\tIPV6_MULTICAST_IF               = 7\n\tIPV6_MULTICAST_LOOP             = 4\n\tIPV6_NEXTHOP                    = 20\n\tIPV6_PATHMTU                    = 12\n\tIPV6_PKTINFO                    = 13\n\tIPV6_PREFER_SRC_CGA             = 0x10\n\tIPV6_PREFER_SRC_COA             = 0x02\n\tIPV6_PREFER_SRC_HOME            = 0x01\n\tIPV6_PREFER_SRC_NONCGA          = 0x20\n\tIPV6_PREFER_SRC_PUBLIC          = 0x08\n\tIPV6_PREFER_SRC_TMP             = 0x04\n\tIPV6_RECVDSTOPTS                = 28\n\tIPV6_RECVHOPLIMIT               = 14\n\tIPV6_RECVHOPOPTS                = 26\n\tIPV6_RECVPATHMTU                = 16\n\tIPV6_RECVPKTINFO                = 15\n\tIPV6_RECVRTHDR                  = 25\n\tIPV6_RECVTCLASS                 = 31\n\tIPV6_RTHDR                      = 21\n\tIPV6_RTHDRDSTOPTS               = 24\n\tIPV6_RTHDR_TYPE_0               = 0\n\tIPV6_TCLASS                     = 30\n\tIPV6_UNICAST_HOPS               = 3\n\tIPV6_USE_MIN_MTU                = 18\n\tIPV6_V6ONLY                     = 10\n\tIP_ADD_MEMBERSHIP               = 5\n\tIP_ADD_SOURCE_MEMBERSHIP        = 12\n\tIP_BLOCK_SOURCE                 = 10\n\tIP_DEFAULT_MULTICAST_LOOP       = 1\n\tIP_DEFAULT_MULTICAST_TTL        = 1\n\tIP_DROP_MEMBERSHIP              = 6\n\tIP_DROP_SOURCE_MEMBERSHIP       = 13\n\tIP_MAX_MEMBERSHIPS              = 20\n\tIP_MULTICAST_IF                 = 7\n\tIP_MULTICAST_LOOP               = 4\n\tIP_MULTICAST_TTL                = 3\n\tIP_OPTIONS                      = 1\n\tIP_PKTINFO                      = 101\n\tIP_RECVPKTINFO                  = 102\n\tIP_TOS                          = 2\n\tIP_TTL                          = 14\n\tIP_UNBLOCK_SOURCE               = 11\n\tICMP6_FILTER                    = 1\n\tMCAST_INCLUDE                   = 0\n\tMCAST_EXCLUDE                   = 1\n\tMCAST_JOIN_GROUP                = 40\n\tMCAST_LEAVE_GROUP               = 41\n\tMCAST_JOIN_SOURCE_GROUP         = 42\n\tMCAST_LEAVE_SOURCE_GROUP        = 43\n\tMCAST_BLOCK_SOURCE              = 44\n\tMCAST_UNBLOCK_SOURCE            = 46\n\tICANON                          = 0x0010\n\tICRNL                           = 0x0002\n\tIEXTEN                          = 0x0020\n\tIGNBRK                          = 0x0004\n\tIGNCR                           = 0x0008\n\tINLCR                           = 0x0020\n\tISIG                            = 0x0040\n\tISTRIP                          = 0x0080\n\tIXON                            = 0x0200\n\tIXOFF                           = 0x0100\n\tLOCK_SH                         = 0x1\n\tLOCK_EX                         = 0x2\n\tLOCK_NB                         = 0x4\n\tLOCK_UN                         = 0x8\n\tPOLLIN                          = 0x0003\n\tPOLLOUT                         = 0x0004\n\tPOLLPRI                         = 0x0010\n\tPOLLERR                         = 0x0020\n\tPOLLHUP                         = 0x0040\n\tPOLLNVAL                        = 0x0080\n\tPROT_READ                       = 0x1 // mmap - page can be read\n\tPROT_WRITE                      = 0x2 // page can be written\n\tPROT_NONE                       = 0x4 // can't be accessed\n\tPROT_EXEC                       = 0x8 // can be executed\n\tMAP_PRIVATE                     = 0x1 // changes are private\n\tMAP_SHARED                      = 0x2 // changes are shared\n\tMAP_FIXED                       = 0x4 // place exactly\n\t__MAP_MEGA                      = 0x8\n\t__MAP_64                        = 0x10\n\tMAP_ANON                        = 0x20\n\tMAP_ANONYMOUS                   = 0x20\n\tMS_SYNC                         = 0x1 // msync - synchronous writes\n\tMS_ASYNC                        = 0x2 // asynchronous writes\n\tMS_INVALIDATE                   = 0x4 // invalidate mappings\n\tMS_BIND                         = 0x00001000\n\tMS_MOVE                         = 0x00002000\n\tMS_NOSUID                       = 0x00000002\n\tMS_PRIVATE                      = 0x00040000\n\tMS_REC                          = 0x00004000\n\tMS_REMOUNT                      = 0x00008000\n\tMS_RDONLY                       = 0x00000001\n\tMS_UNBINDABLE                   = 0x00020000\n\tMNT_DETACH                      = 0x00000004\n\tZOSDSFS_SUPER_MAGIC             = 0x44534653 // zOS DSFS\n\tNFS_SUPER_MAGIC                 = 0x6969     // NFS\n\tNSFS_MAGIC                      = 0x6e736673 // PROCNS\n\tPROC_SUPER_MAGIC                = 0x9fa0     // proc FS\n\tZOSTFS_SUPER_MAGIC              = 0x544653   // zOS TFS\n\tZOSUFS_SUPER_MAGIC              = 0x554653   // zOS UFS\n\tZOSZFS_SUPER_MAGIC              = 0x5A4653   // zOS ZFS\n\tMTM_RDONLY                      = 0x80000000\n\tMTM_RDWR                        = 0x40000000\n\tMTM_UMOUNT                      = 0x10000000\n\tMTM_IMMED                       = 0x08000000\n\tMTM_FORCE                       = 0x04000000\n\tMTM_DRAIN                       = 0x02000000\n\tMTM_RESET                       = 0x01000000\n\tMTM_SAMEMODE                    = 0x00100000\n\tMTM_UNQSEFORCE                  = 0x00040000\n\tMTM_NOSUID                      = 0x00000400\n\tMTM_SYNCHONLY                   = 0x00000200\n\tMTM_REMOUNT                     = 0x00000100\n\tMTM_NOSECURITY                  = 0x00000080\n\tNFDBITS                         = 0x20\n\tONLRET                          = 0x0020 // NL performs CR function\n\tO_ACCMODE                       = 0x03\n\tO_APPEND                        = 0x08\n\tO_ASYNCSIG                      = 0x0200\n\tO_CREAT                         = 0x80\n\tO_DIRECT                        = 0x00002000\n\tO_NOFOLLOW                      = 0x00004000\n\tO_DIRECTORY                     = 0x00008000\n\tO_PATH                          = 0x00080000\n\tO_CLOEXEC                       = 0x00001000\n\tO_EXCL                          = 0x40\n\tO_GETFL                         = 0x0F\n\tO_LARGEFILE                     = 0x0400\n\tO_NDELAY                        = 0x4\n\tO_NONBLOCK                      = 0x04\n\tO_RDONLY                        = 0x02\n\tO_RDWR                          = 0x03\n\tO_SYNC                          = 0x0100\n\tO_TRUNC                         = 0x10\n\tO_WRONLY                        = 0x01\n\tO_NOCTTY                        = 0x20\n\tOPOST                           = 0x0001\n\tONLCR                           = 0x0004\n\tPARENB                          = 0x0200\n\tPARMRK                          = 0x0400\n\tQUERYCVT                        = 3\n\tRUSAGE_CHILDREN                 = -0x1\n\tRUSAGE_SELF                     = 0x0 // RUSAGE_THREAD unsupported on z/OS\n\tSEEK_CUR                        = 1\n\tSEEK_END                        = 2\n\tSEEK_SET                        = 0\n\tSETAUTOCVTALL                   = 5\n\tSETAUTOCVTON                    = 2\n\tSETCVTALL                       = 4\n\tSETCVTOFF                       = 0\n\tSETCVTON                        = 1\n\tAF_APPLETALK                    = 16\n\tAF_CCITT                        = 10\n\tAF_CHAOS                        = 5\n\tAF_DATAKIT                      = 9\n\tAF_DLI                          = 13\n\tAF_ECMA                         = 8\n\tAF_HYLINK                       = 15\n\tAF_IMPLINK                      = 3\n\tAF_INET                         = 2\n\tAF_INET6                        = 19\n\tAF_INTF                         = 20\n\tAF_IUCV                         = 17\n\tAF_LAT                          = 14\n\tAF_LINK                         = 18\n\tAF_LOCAL                        = AF_UNIX // AF_LOCAL is an alias for AF_UNIX\n\tAF_MAX                          = 30\n\tAF_NBS                          = 7\n\tAF_NDD                          = 23\n\tAF_NETWARE                      = 22\n\tAF_NS                           = 6\n\tAF_PUP                          = 4\n\tAF_RIF                          = 21\n\tAF_ROUTE                        = 20\n\tAF_SNA                          = 11\n\tAF_UNIX                         = 1\n\tAF_UNSPEC                       = 0\n\tIBMTCP_IMAGE                    = 1\n\tMSG_ACK_EXPECTED                = 0x10\n\tMSG_ACK_GEN                     = 0x40\n\tMSG_ACK_TIMEOUT                 = 0x20\n\tMSG_CONNTERM                    = 0x80\n\tMSG_CTRUNC                      = 0x20\n\tMSG_DONTROUTE                   = 0x4\n\tMSG_EOF                         = 0x8000\n\tMSG_EOR                         = 0x8\n\tMSG_MAXIOVLEN                   = 16\n\tMSG_NONBLOCK                    = 0x4000\n\tMSG_OOB                         = 0x1\n\tMSG_PEEK                        = 0x2\n\tMSG_TRUNC                       = 0x10\n\tMSG_WAITALL                     = 0x40\n\tPRIO_PROCESS                    = 1\n\tPRIO_PGRP                       = 2\n\tPRIO_USER                       = 3\n\tRLIMIT_CPU                      = 0\n\tRLIMIT_FSIZE                    = 1\n\tRLIMIT_DATA                     = 2\n\tRLIMIT_STACK                    = 3\n\tRLIMIT_CORE                     = 4\n\tRLIMIT_AS                       = 5\n\tRLIMIT_NOFILE                   = 6\n\tRLIMIT_MEMLIMIT                 = 7\n\tRLIMIT_MEMLOCK                  = 0x8\n\tRLIM_INFINITY                   = 2147483647\n\tSCHED_FIFO                      = 0x2\n\tSCM_CREDENTIALS                 = 0x2\n\tSCM_RIGHTS                      = 0x01\n\tSF_CLOSE                        = 0x00000002\n\tSF_REUSE                        = 0x00000001\n\tSHM_RND                         = 0x2\n\tSHM_RDONLY                      = 0x1\n\tSHMLBA                          = 0x1000\n\tIPC_STAT                        = 0x3\n\tIPC_SET                         = 0x2\n\tIPC_RMID                        = 0x1\n\tIPC_PRIVATE                     = 0x0\n\tIPC_CREAT                       = 0x1000000\n\t__IPC_MEGA                      = 0x4000000\n\t__IPC_SHAREAS                   = 0x20000000\n\t__IPC_BELOWBAR                  = 0x10000000\n\tIPC_EXCL                        = 0x2000000\n\t__IPC_GIGA                      = 0x8000000\n\tSHUT_RD                         = 0\n\tSHUT_RDWR                       = 2\n\tSHUT_WR                         = 1\n\tSOCK_CLOEXEC                    = 0x00001000\n\tSOCK_CONN_DGRAM                 = 6\n\tSOCK_DGRAM                      = 2\n\tSOCK_NONBLOCK                   = 0x800\n\tSOCK_RAW                        = 3\n\tSOCK_RDM                        = 4\n\tSOCK_SEQPACKET                  = 5\n\tSOCK_STREAM                     = 1\n\tSOL_SOCKET                      = 0xffff\n\tSOMAXCONN                       = 10\n\tSO_ACCEPTCONN                   = 0x0002\n\tSO_ACCEPTECONNABORTED           = 0x0006\n\tSO_ACKNOW                       = 0x7700\n\tSO_BROADCAST                    = 0x0020\n\tSO_BULKMODE                     = 0x8000\n\tSO_CKSUMRECV                    = 0x0800\n\tSO_CLOSE                        = 0x01\n\tSO_CLUSTERCONNTYPE              = 0x00004001\n\tSO_CLUSTERCONNTYPE_INTERNAL     = 8\n\tSO_CLUSTERCONNTYPE_NOCONN       = 0\n\tSO_CLUSTERCONNTYPE_NONE         = 1\n\tSO_CLUSTERCONNTYPE_SAME_CLUSTER = 2\n\tSO_CLUSTERCONNTYPE_SAME_IMAGE   = 4\n\tSO_DEBUG                        = 0x0001\n\tSO_DONTROUTE                    = 0x0010\n\tSO_ERROR                        = 0x1007\n\tSO_IGNOREINCOMINGPUSH           = 0x1\n\tSO_IGNORESOURCEVIPA             = 0x0002\n\tSO_KEEPALIVE                    = 0x0008\n\tSO_LINGER                       = 0x0080\n\tSO_NONBLOCKLOCAL                = 0x8001\n\tSO_NOREUSEADDR                  = 0x1000\n\tSO_OOBINLINE                    = 0x0100\n\tSO_OPTACK                       = 0x8004\n\tSO_OPTMSS                       = 0x8003\n\tSO_RCVBUF                       = 0x1002\n\tSO_RCVLOWAT                     = 0x1004\n\tSO_RCVTIMEO                     = 0x1006\n\tSO_REUSEADDR                    = 0x0004\n\tSO_REUSEPORT                    = 0x0200\n\tSO_SECINFO                      = 0x00004002\n\tSO_SET                          = 0x0200\n\tSO_SNDBUF                       = 0x1001\n\tSO_SNDLOWAT                     = 0x1003\n\tSO_SNDTIMEO                     = 0x1005\n\tSO_TYPE                         = 0x1008\n\tSO_UNSET                        = 0x0400\n\tSO_USELOOPBACK                  = 0x0040\n\tSO_USE_IFBUFS                   = 0x0400\n\tS_ISUID                         = 0x0800\n\tS_ISGID                         = 0x0400\n\tS_ISVTX                         = 0x0200\n\tS_IRUSR                         = 0x0100\n\tS_IWUSR                         = 0x0080\n\tS_IXUSR                         = 0x0040\n\tS_IRWXU                         = 0x01C0\n\tS_IRGRP                         = 0x0020\n\tS_IWGRP                         = 0x0010\n\tS_IXGRP                         = 0x0008\n\tS_IRWXG                         = 0x0038\n\tS_IROTH                         = 0x0004\n\tS_IWOTH                         = 0x0002\n\tS_IXOTH                         = 0x0001\n\tS_IRWXO                         = 0x0007\n\tS_IREAD                         = S_IRUSR\n\tS_IWRITE                        = S_IWUSR\n\tS_IEXEC                         = S_IXUSR\n\tS_IFDIR                         = 0x01000000\n\tS_IFCHR                         = 0x02000000\n\tS_IFREG                         = 0x03000000\n\tS_IFFIFO                        = 0x04000000\n\tS_IFIFO                         = 0x04000000\n\tS_IFLNK                         = 0x05000000\n\tS_IFBLK                         = 0x06000000\n\tS_IFSOCK                        = 0x07000000\n\tS_IFVMEXTL                      = 0xFE000000\n\tS_IFVMEXTL_EXEC                 = 0x00010000\n\tS_IFVMEXTL_DATA                 = 0x00020000\n\tS_IFVMEXTL_MEL                  = 0x00030000\n\tS_IFEXTL                        = 0x00000001\n\tS_IFPROGCTL                     = 0x00000002\n\tS_IFAPFCTL                      = 0x00000004\n\tS_IFNOSHARE                     = 0x00000008\n\tS_IFSHARELIB                    = 0x00000010\n\tS_IFMT                          = 0xFF000000\n\tS_IFMST                         = 0x00FF0000\n\tTCP_KEEPALIVE                   = 0x8\n\tTCP_NODELAY                     = 0x1\n\tTIOCGWINSZ                      = 0x4008a368\n\tTIOCSWINSZ                      = 0x8008a367\n\tTIOCSBRK                        = 0x2000a77b\n\tTIOCCBRK                        = 0x2000a77a\n\tTIOCSTI                         = 0x8001a772\n\tTIOCGPGRP                       = 0x4004a777 // _IOR(167, 119, int)\n\tTCSANOW                         = 0\n\tTCSETS                          = 0 // equivalent to TCSANOW for tcsetattr\n\tTCSADRAIN                       = 1\n\tTCSETSW                         = 1 // equivalent to TCSADRAIN for tcsetattr\n\tTCSAFLUSH                       = 2\n\tTCSETSF                         = 2 // equivalent to TCSAFLUSH for tcsetattr\n\tTCGETS                          = 3 // not defined in ioctl.h -- zos golang only\n\tTCIFLUSH                        = 0\n\tTCOFLUSH                        = 1\n\tTCIOFLUSH                       = 2\n\tTCOOFF                          = 0\n\tTCOON                           = 1\n\tTCIOFF                          = 2\n\tTCION                           = 3\n\tTIOCSPGRP                       = 0x8004a776\n\tTIOCNOTTY                       = 0x2000a771\n\tTIOCEXCL                        = 0x2000a70d\n\tTIOCNXCL                        = 0x2000a70e\n\tTIOCGETD                        = 0x4004a700\n\tTIOCSETD                        = 0x8004a701\n\tTIOCPKT                         = 0x8004a770\n\tTIOCSTOP                        = 0x2000a76f\n\tTIOCSTART                       = 0x2000a76e\n\tTIOCUCNTL                       = 0x8004a766\n\tTIOCREMOTE                      = 0x8004a769\n\tTIOCMGET                        = 0x4004a76a\n\tTIOCMSET                        = 0x8004a76d\n\tTIOCMBIC                        = 0x8004a76b\n\tTIOCMBIS                        = 0x8004a76c\n\tVINTR                           = 0\n\tVQUIT                           = 1\n\tVERASE                          = 2\n\tVKILL                           = 3\n\tVEOF                            = 4\n\tVEOL                            = 5\n\tVMIN                            = 6\n\tVSTART                          = 7\n\tVSTOP                           = 8\n\tVSUSP                           = 9\n\tVTIME                           = 10\n\tWCONTINUED                      = 0x4\n\tWEXITED                         = 0x8\n\tWNOHANG                         = 0x1\n\tWNOWAIT                         = 0x20\n\tWSTOPPED                        = 0x10\n\tWUNTRACED                       = 0x2\n\t_BPX_SWAP                       = 1\n\t_BPX_NONSWAP                    = 2\n\tMCL_CURRENT                     = 1  // for Linux compatibility -- no zos semantics\n\tMCL_FUTURE                      = 2  // for Linux compatibility -- no zos semantics\n\tMCL_ONFAULT                     = 3  // for Linux compatibility -- no zos semantics\n\tMADV_NORMAL                     = 0  // for Linux compatibility -- no zos semantics\n\tMADV_RANDOM                     = 1  // for Linux compatibility -- no zos semantics\n\tMADV_SEQUENTIAL                 = 2  // for Linux compatibility -- no zos semantics\n\tMADV_WILLNEED                   = 3  // for Linux compatibility -- no zos semantics\n\tMADV_REMOVE                     = 4  // for Linux compatibility -- no zos semantics\n\tMADV_DONTFORK                   = 5  // for Linux compatibility -- no zos semantics\n\tMADV_DOFORK                     = 6  // for Linux compatibility -- no zos semantics\n\tMADV_HWPOISON                   = 7  // for Linux compatibility -- no zos semantics\n\tMADV_MERGEABLE                  = 8  // for Linux compatibility -- no zos semantics\n\tMADV_UNMERGEABLE                = 9  // for Linux compatibility -- no zos semantics\n\tMADV_SOFT_OFFLINE               = 10 // for Linux compatibility -- no zos semantics\n\tMADV_HUGEPAGE                   = 11 // for Linux compatibility -- no zos semantics\n\tMADV_NOHUGEPAGE                 = 12 // for Linux compatibility -- no zos semantics\n\tMADV_DONTDUMP                   = 13 // for Linux compatibility -- no zos semantics\n\tMADV_DODUMP                     = 14 // for Linux compatibility -- no zos semantics\n\tMADV_FREE                       = 15 // for Linux compatibility -- no zos semantics\n\tMADV_WIPEONFORK                 = 16 // for Linux compatibility -- no zos semantics\n\tMADV_KEEPONFORK                 = 17 // for Linux compatibility -- no zos semantics\n\tAT_SYMLINK_FOLLOW               = 0x400\n\tAT_SYMLINK_NOFOLLOW             = 0x100\n\tXATTR_CREATE                    = 0x1\n\tXATTR_REPLACE                   = 0x2\n\tP_PID                           = 0\n\tP_PGID                          = 1\n\tP_ALL                           = 2\n\tPR_SET_NAME                     = 15\n\tPR_GET_NAME                     = 16\n\tPR_SET_NO_NEW_PRIVS             = 38\n\tPR_GET_NO_NEW_PRIVS             = 39\n\tPR_SET_DUMPABLE                 = 4\n\tPR_GET_DUMPABLE                 = 3\n\tPR_SET_PDEATHSIG                = 1\n\tPR_GET_PDEATHSIG                = 2\n\tPR_SET_CHILD_SUBREAPER          = 36\n\tPR_GET_CHILD_SUBREAPER          = 37\n\tAT_FDCWD                        = -100\n\tAT_EACCESS                      = 0x200\n\tAT_EMPTY_PATH                   = 0x1000\n\tAT_REMOVEDIR                    = 0x200\n\tRENAME_NOREPLACE                = 1 << 0\n\tST_RDONLY                       = 1\n\tST_NOSUID                       = 2\n)\n\nconst (\n\tEDOM               = Errno(1)\n\tERANGE             = Errno(2)\n\tEACCES             = Errno(111)\n\tEAGAIN             = Errno(112)\n\tEBADF              = Errno(113)\n\tEBUSY              = Errno(114)\n\tECHILD             = Errno(115)\n\tEDEADLK            = Errno(116)\n\tEEXIST             = Errno(117)\n\tEFAULT             = Errno(118)\n\tEFBIG              = Errno(119)\n\tEINTR              = Errno(120)\n\tEINVAL             = Errno(121)\n\tEIO                = Errno(122)\n\tEISDIR             = Errno(123)\n\tEMFILE             = Errno(124)\n\tEMLINK             = Errno(125)\n\tENAMETOOLONG       = Errno(126)\n\tENFILE             = Errno(127)\n\tENOATTR            = Errno(265)\n\tENODEV             = Errno(128)\n\tENOENT             = Errno(129)\n\tENOEXEC            = Errno(130)\n\tENOLCK             = Errno(131)\n\tENOMEM             = Errno(132)\n\tENOSPC             = Errno(133)\n\tENOSYS             = Errno(134)\n\tENOTDIR            = Errno(135)\n\tENOTEMPTY          = Errno(136)\n\tENOTTY             = Errno(137)\n\tENXIO              = Errno(138)\n\tEPERM              = Errno(139)\n\tEPIPE              = Errno(140)\n\tEROFS              = Errno(141)\n\tESPIPE             = Errno(142)\n\tESRCH              = Errno(143)\n\tEXDEV              = Errno(144)\n\tE2BIG              = Errno(145)\n\tELOOP              = Errno(146)\n\tEILSEQ             = Errno(147)\n\tENODATA            = Errno(148)\n\tEOVERFLOW          = Errno(149)\n\tEMVSNOTUP          = Errno(150)\n\tECMSSTORAGE        = Errno(151)\n\tEMVSDYNALC         = Errno(151)\n\tEMVSCVAF           = Errno(152)\n\tEMVSCATLG          = Errno(153)\n\tECMSINITIAL        = Errno(156)\n\tEMVSINITIAL        = Errno(156)\n\tECMSERR            = Errno(157)\n\tEMVSERR            = Errno(157)\n\tEMVSPARM           = Errno(158)\n\tECMSPFSFILE        = Errno(159)\n\tEMVSPFSFILE        = Errno(159)\n\tEMVSBADCHAR        = Errno(160)\n\tECMSPFSPERM        = Errno(162)\n\tEMVSPFSPERM        = Errno(162)\n\tEMVSSAFEXTRERR     = Errno(163)\n\tEMVSSAF2ERR        = Errno(164)\n\tEMVSTODNOTSET      = Errno(165)\n\tEMVSPATHOPTS       = Errno(166)\n\tEMVSNORTL          = Errno(167)\n\tEMVSEXPIRE         = Errno(168)\n\tEMVSPASSWORD       = Errno(169)\n\tEMVSWLMERROR       = Errno(170)\n\tEMVSCPLERROR       = Errno(171)\n\tEMVSARMERROR       = Errno(172)\n\tELENOFORK          = Errno(200)\n\tELEMSGERR          = Errno(201)\n\tEFPMASKINV         = Errno(202)\n\tEFPMODEINV         = Errno(203)\n\tEBUFLEN            = Errno(227)\n\tEEXTLINK           = Errno(228)\n\tENODD              = Errno(229)\n\tECMSESMERR         = Errno(230)\n\tECPERR             = Errno(231)\n\tELEMULTITHREAD     = Errno(232)\n\tELEFENCE           = Errno(244)\n\tEBADDATA           = Errno(245)\n\tEUNKNOWN           = Errno(246)\n\tENOTSUP            = Errno(247)\n\tEBADNAME           = Errno(248)\n\tENOTSAFE           = Errno(249)\n\tELEMULTITHREADFORK = Errno(257)\n\tECUNNOENV          = Errno(258)\n\tECUNNOCONV         = Errno(259)\n\tECUNNOTALIGNED     = Errno(260)\n\tECUNERR            = Errno(262)\n\tEIBMBADCALL        = Errno(1000)\n\tEIBMBADPARM        = Errno(1001)\n\tEIBMSOCKOUTOFRANGE = Errno(1002)\n\tEIBMSOCKINUSE      = Errno(1003)\n\tEIBMIUCVERR        = Errno(1004)\n\tEOFFLOADboxERROR   = Errno(1005)\n\tEOFFLOADboxRESTART = Errno(1006)\n\tEOFFLOADboxDOWN    = Errno(1007)\n\tEIBMCONFLICT       = Errno(1008)\n\tEIBMCANCELLED      = Errno(1009)\n\tEIBMBADTCPNAME     = Errno(1011)\n\tENOTBLK            = Errno(1100)\n\tETXTBSY            = Errno(1101)\n\tEWOULDBLOCK        = Errno(1102)\n\tEINPROGRESS        = Errno(1103)\n\tEALREADY           = Errno(1104)\n\tENOTSOCK           = Errno(1105)\n\tEDESTADDRREQ       = Errno(1106)\n\tEMSGSIZE           = Errno(1107)\n\tEPROTOTYPE         = Errno(1108)\n\tENOPROTOOPT        = Errno(1109)\n\tEPROTONOSUPPORT    = Errno(1110)\n\tESOCKTNOSUPPORT    = Errno(1111)\n\tEOPNOTSUPP         = Errno(1112)\n\tEPFNOSUPPORT       = Errno(1113)\n\tEAFNOSUPPORT       = Errno(1114)\n\tEADDRINUSE         = Errno(1115)\n\tEADDRNOTAVAIL      = Errno(1116)\n\tENETDOWN           = Errno(1117)\n\tENETUNREACH        = Errno(1118)\n\tENETRESET          = Errno(1119)\n\tECONNABORTED       = Errno(1120)\n\tECONNRESET         = Errno(1121)\n\tENOBUFS            = Errno(1122)\n\tEISCONN            = Errno(1123)\n\tENOTCONN           = Errno(1124)\n\tESHUTDOWN          = Errno(1125)\n\tETOOMANYREFS       = Errno(1126)\n\tETIMEDOUT          = Errno(1127)\n\tECONNREFUSED       = Errno(1128)\n\tEHOSTDOWN          = Errno(1129)\n\tEHOSTUNREACH       = Errno(1130)\n\tEPROCLIM           = Errno(1131)\n\tEUSERS             = Errno(1132)\n\tEDQUOT             = Errno(1133)\n\tESTALE             = Errno(1134)\n\tEREMOTE            = Errno(1135)\n\tENOSTR             = Errno(1136)\n\tETIME              = Errno(1137)\n\tENOSR              = Errno(1138)\n\tENOMSG             = Errno(1139)\n\tEBADMSG            = Errno(1140)\n\tEIDRM              = Errno(1141)\n\tENONET             = Errno(1142)\n\tERREMOTE           = Errno(1143)\n\tENOLINK            = Errno(1144)\n\tEADV               = Errno(1145)\n\tESRMNT             = Errno(1146)\n\tECOMM              = Errno(1147)\n\tEPROTO             = Errno(1148)\n\tEMULTIHOP          = Errno(1149)\n\tEDOTDOT            = Errno(1150)\n\tEREMCHG            = Errno(1151)\n\tECANCELED          = Errno(1152)\n\tEINTRNODATA        = Errno(1159)\n\tENOREUSE           = Errno(1160)\n\tENOMOVE            = Errno(1161)\n)\n\n// Signals\nconst (\n\tSIGHUP    = Signal(1)\n\tSIGINT    = Signal(2)\n\tSIGABRT   = Signal(3)\n\tSIGILL    = Signal(4)\n\tSIGPOLL   = Signal(5)\n\tSIGURG    = Signal(6)\n\tSIGSTOP   = Signal(7)\n\tSIGFPE    = Signal(8)\n\tSIGKILL   = Signal(9)\n\tSIGBUS    = Signal(10)\n\tSIGSEGV   = Signal(11)\n\tSIGSYS    = Signal(12)\n\tSIGPIPE   = Signal(13)\n\tSIGALRM   = Signal(14)\n\tSIGTERM   = Signal(15)\n\tSIGUSR1   = Signal(16)\n\tSIGUSR2   = Signal(17)\n\tSIGABND   = Signal(18)\n\tSIGCONT   = Signal(19)\n\tSIGCHLD   = Signal(20)\n\tSIGTTIN   = Signal(21)\n\tSIGTTOU   = Signal(22)\n\tSIGIO     = Signal(23)\n\tSIGQUIT   = Signal(24)\n\tSIGTSTP   = Signal(25)\n\tSIGTRAP   = Signal(26)\n\tSIGIOERR  = Signal(27)\n\tSIGWINCH  = Signal(28)\n\tSIGXCPU   = Signal(29)\n\tSIGXFSZ   = Signal(30)\n\tSIGVTALRM = Signal(31)\n\tSIGPROF   = Signal(32)\n\tSIGDANGER = Signal(33)\n\tSIGTHSTOP = Signal(34)\n\tSIGTHCONT = Signal(35)\n\tSIGTRACE  = Signal(37)\n\tSIGDCE    = Signal(38)\n\tSIGDUMP   = Signal(39)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EDC5001I\", \"A domain error occurred.\"},\n\t{2, \"EDC5002I\", \"A range error occurred.\"},\n\t{111, \"EDC5111I\", \"Permission denied.\"},\n\t{112, \"EDC5112I\", \"Resource temporarily unavailable.\"},\n\t{113, \"EDC5113I\", \"Bad file descriptor.\"},\n\t{114, \"EDC5114I\", \"Resource busy.\"},\n\t{115, \"EDC5115I\", \"No child processes.\"},\n\t{116, \"EDC5116I\", \"Resource deadlock avoided.\"},\n\t{117, \"EDC5117I\", \"File exists.\"},\n\t{118, \"EDC5118I\", \"Incorrect address.\"},\n\t{119, \"EDC5119I\", \"File too large.\"},\n\t{120, \"EDC5120I\", \"Interrupted function call.\"},\n\t{121, \"EDC5121I\", \"Invalid argument.\"},\n\t{122, \"EDC5122I\", \"Input/output error.\"},\n\t{123, \"EDC5123I\", \"Is a directory.\"},\n\t{124, \"EDC5124I\", \"Too many open files.\"},\n\t{125, \"EDC5125I\", \"Too many links.\"},\n\t{126, \"EDC5126I\", \"Filename too long.\"},\n\t{127, \"EDC5127I\", \"Too many open files in system.\"},\n\t{128, \"EDC5128I\", \"No such device.\"},\n\t{129, \"EDC5129I\", \"No such file or directory.\"},\n\t{130, \"EDC5130I\", \"Exec format error.\"},\n\t{131, \"EDC5131I\", \"No locks available.\"},\n\t{132, \"EDC5132I\", \"Not enough memory.\"},\n\t{133, \"EDC5133I\", \"No space left on device.\"},\n\t{134, \"EDC5134I\", \"Function not implemented.\"},\n\t{135, \"EDC5135I\", \"Not a directory.\"},\n\t{136, \"EDC5136I\", \"Directory not empty.\"},\n\t{137, \"EDC5137I\", \"Inappropriate I/O control operation.\"},\n\t{138, \"EDC5138I\", \"No such device or address.\"},\n\t{139, \"EDC5139I\", \"Operation not permitted.\"},\n\t{140, \"EDC5140I\", \"Broken pipe.\"},\n\t{141, \"EDC5141I\", \"Read-only file system.\"},\n\t{142, \"EDC5142I\", \"Invalid seek.\"},\n\t{143, \"EDC5143I\", \"No such process.\"},\n\t{144, \"EDC5144I\", \"Improper link.\"},\n\t{145, \"EDC5145I\", \"The parameter list is too long, or the message to receive was too large for the buffer.\"},\n\t{146, \"EDC5146I\", \"Too many levels of symbolic links.\"},\n\t{147, \"EDC5147I\", \"Illegal byte sequence.\"},\n\t{148, \"EDC5148I\", \"The named attribute or data not available.\"},\n\t{149, \"EDC5149I\", \"Value Overflow Error.\"},\n\t{150, \"EDC5150I\", \"UNIX System Services is not active.\"},\n\t{151, \"EDC5151I\", \"Dynamic allocation error.\"},\n\t{152, \"EDC5152I\", \"Common VTOC access facility (CVAF) error.\"},\n\t{153, \"EDC5153I\", \"Catalog obtain error.\"},\n\t{156, \"EDC5156I\", \"Process initialization error.\"},\n\t{157, \"EDC5157I\", \"An internal error has occurred.\"},\n\t{158, \"EDC5158I\", \"Bad parameters were passed to the service.\"},\n\t{159, \"EDC5159I\", \"The Physical File System encountered a permanent file error.\"},\n\t{160, \"EDC5160I\", \"Bad character in environment variable name.\"},\n\t{162, \"EDC5162I\", \"The Physical File System encountered a system error.\"},\n\t{163, \"EDC5163I\", \"SAF/RACF extract error.\"},\n\t{164, \"EDC5164I\", \"SAF/RACF error.\"},\n\t{165, \"EDC5165I\", \"System TOD clock not set.\"},\n\t{166, \"EDC5166I\", \"Access mode argument on function call conflicts with PATHOPTS parameter on JCL DD statement.\"},\n\t{167, \"EDC5167I\", \"Access to the UNIX System Services version of the C RTL is denied.\"},\n\t{168, \"EDC5168I\", \"Password has expired.\"},\n\t{169, \"EDC5169I\", \"Password is invalid.\"},\n\t{170, \"EDC5170I\", \"An error was encountered with WLM.\"},\n\t{171, \"EDC5171I\", \"An error was encountered with CPL.\"},\n\t{172, \"EDC5172I\", \"An error was encountered with Application Response Measurement (ARM) component.\"},\n\t{200, \"EDC5200I\", \"The application contains a Language Environment member language that cannot tolerate a fork().\"},\n\t{201, \"EDC5201I\", \"The Language Environment message file was not found in the hierarchical file system.\"},\n\t{202, \"EDC5202E\", \"DLL facilities are not supported under SPC environment.\"},\n\t{203, \"EDC5203E\", \"DLL facilities are not supported under POSIX environment.\"},\n\t{227, \"EDC5227I\", \"Buffer is not long enough to contain a path definition\"},\n\t{228, \"EDC5228I\", \"The file referred to is an external link\"},\n\t{229, \"EDC5229I\", \"No path definition for ddname in effect\"},\n\t{230, \"EDC5230I\", \"ESM error.\"},\n\t{231, \"EDC5231I\", \"CP or the external security manager had an error\"},\n\t{232, \"EDC5232I\", \"The function failed because it was invoked from a multithread environment.\"},\n\t{244, \"EDC5244I\", \"The program, module or DLL is not supported in this environment.\"},\n\t{245, \"EDC5245I\", \"Data is not valid.\"},\n\t{246, \"EDC5246I\", \"Unknown system state.\"},\n\t{247, \"EDC5247I\", \"Operation not supported.\"},\n\t{248, \"EDC5248I\", \"The object name specified is not correct.\"},\n\t{249, \"EDC5249I\", \"The function is not allowed.\"},\n\t{257, \"EDC5257I\", \"Function cannot be called in the child process of a fork() from a multithreaded process until exec() is called.\"},\n\t{258, \"EDC5258I\", \"A CUN_RS_NO_UNI_ENV error was issued by Unicode Services.\"},\n\t{259, \"EDC5259I\", \"A CUN_RS_NO_CONVERSION error was issued by Unicode Services.\"},\n\t{260, \"EDC5260I\", \"A CUN_RS_TABLE_NOT_ALIGNED error was issued by Unicode Services.\"},\n\t{262, \"EDC5262I\", \"An iconv() function encountered an unexpected error while using Unicode Services.\"},\n\t{265, \"EDC5265I\", \"The named attribute not available.\"},\n\t{1000, \"EDC8000I\", \"A bad socket-call constant was found in the IUCV header.\"},\n\t{1001, \"EDC8001I\", \"An error was found in the IUCV header.\"},\n\t{1002, \"EDC8002I\", \"A socket descriptor is out of range.\"},\n\t{1003, \"EDC8003I\", \"A socket descriptor is in use.\"},\n\t{1004, \"EDC8004I\", \"Request failed because of an IUCV error.\"},\n\t{1005, \"EDC8005I\", \"Offload box error.\"},\n\t{1006, \"EDC8006I\", \"Offload box restarted.\"},\n\t{1007, \"EDC8007I\", \"Offload box down.\"},\n\t{1008, \"EDC8008I\", \"Already a conflicting call outstanding on socket.\"},\n\t{1009, \"EDC8009I\", \"Request cancelled using a SOCKcallCANCEL request.\"},\n\t{1011, \"EDC8011I\", \"A name of a PFS was specified that either is not configured or is not a Sockets PFS.\"},\n\t{1100, \"EDC8100I\", \"Block device required.\"},\n\t{1101, \"EDC8101I\", \"Text file busy.\"},\n\t{1102, \"EDC8102I\", \"Operation would block.\"},\n\t{1103, \"EDC8103I\", \"Operation now in progress.\"},\n\t{1104, \"EDC8104I\", \"Connection already in progress.\"},\n\t{1105, \"EDC8105I\", \"Socket operation on non-socket.\"},\n\t{1106, \"EDC8106I\", \"Destination address required.\"},\n\t{1107, \"EDC8107I\", \"Message too long.\"},\n\t{1108, \"EDC8108I\", \"Protocol wrong type for socket.\"},\n\t{1109, \"EDC8109I\", \"Protocol not available.\"},\n\t{1110, \"EDC8110I\", \"Protocol not supported.\"},\n\t{1111, \"EDC8111I\", \"Socket type not supported.\"},\n\t{1112, \"EDC8112I\", \"Operation not supported on socket.\"},\n\t{1113, \"EDC8113I\", \"Protocol family not supported.\"},\n\t{1114, \"EDC8114I\", \"Address family not supported.\"},\n\t{1115, \"EDC8115I\", \"Address already in use.\"},\n\t{1116, \"EDC8116I\", \"Address not available.\"},\n\t{1117, \"EDC8117I\", \"Network is down.\"},\n\t{1118, \"EDC8118I\", \"Network is unreachable.\"},\n\t{1119, \"EDC8119I\", \"Network dropped connection on reset.\"},\n\t{1120, \"EDC8120I\", \"Connection ended abnormally.\"},\n\t{1121, \"EDC8121I\", \"Connection reset.\"},\n\t{1122, \"EDC8122I\", \"No buffer space available.\"},\n\t{1123, \"EDC8123I\", \"Socket already connected.\"},\n\t{1124, \"EDC8124I\", \"Socket not connected.\"},\n\t{1125, \"EDC8125I\", \"Can't send after socket shutdown.\"},\n\t{1126, \"EDC8126I\", \"Too many references; can't splice.\"},\n\t{1127, \"EDC8127I\", \"Connection timed out.\"},\n\t{1128, \"EDC8128I\", \"Connection refused.\"},\n\t{1129, \"EDC8129I\", \"Host is not available.\"},\n\t{1130, \"EDC8130I\", \"Host cannot be reached.\"},\n\t{1131, \"EDC8131I\", \"Too many processes.\"},\n\t{1132, \"EDC8132I\", \"Too many users.\"},\n\t{1133, \"EDC8133I\", \"Disk quota exceeded.\"},\n\t{1134, \"EDC8134I\", \"Stale file handle.\"},\n\t{1135, \"\", \"\"},\n\t{1136, \"EDC8136I\", \"File is not a STREAM.\"},\n\t{1137, \"EDC8137I\", \"STREAMS ioctl() timeout.\"},\n\t{1138, \"EDC8138I\", \"No STREAMS resources.\"},\n\t{1139, \"EDC8139I\", \"The message identified by set_id and msg_id is not in the message catalog.\"},\n\t{1140, \"EDC8140I\", \"Bad message.\"},\n\t{1141, \"EDC8141I\", \"Identifier removed.\"},\n\t{1142, \"\", \"\"},\n\t{1143, \"\", \"\"},\n\t{1144, \"EDC8144I\", \"The link has been severed.\"},\n\t{1145, \"\", \"\"},\n\t{1146, \"\", \"\"},\n\t{1147, \"\", \"\"},\n\t{1148, \"EDC8148I\", \"Protocol error.\"},\n\t{1149, \"EDC8149I\", \"Multihop not allowed.\"},\n\t{1150, \"\", \"\"},\n\t{1151, \"\", \"\"},\n\t{1152, \"EDC8152I\", \"The asynchronous I/O request has been canceled.\"},\n\t{1159, \"EDC8159I\", \"Function call was interrupted before any data was received.\"},\n\t{1160, \"EDC8160I\", \"Socket reuse is not supported.\"},\n\t{1161, \"EDC8161I\", \"The file system cannot currently be moved.\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGABT\", \"aborted\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGPOLL\", \"pollable event\"},\n\t{6, \"SIGURG\", \"urgent I/O condition\"},\n\t{7, \"SIGSTOP\", \"stop process\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad argument to routine\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGABND\", \"abend\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGQUIT\", \"quit\"},\n\t{25, \"SIGTSTP\", \"stopped\"},\n\t{26, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{27, \"SIGIOER\", \"I/O error\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{30, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{31, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"danger\"},\n\t{34, \"SIGTHSTOP\", \"stop thread\"},\n\t{35, \"SIGTHCONT\", \"continue thread\"},\n\t{37, \"SIGTRACE\", \"trace\"},\n\t{38, \"\", \"DCE\"},\n\t{39, \"SIGDUMP\", \"dump\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"arm\", \"arm64\"). DO NOT EDIT.\n\n//go:build linux && (arm || arm64)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsArm is the registers used by arm binaries.\ntype PtraceRegsArm struct {\n\tUregs [18]uint32\n}\n\n// PtraceGetRegsArm fetches the registers used by arm binaries.\nfunc PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsArm sets the registers used by arm binaries.\nfunc PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsArm64 is the registers used by arm64 binaries.\ntype PtraceRegsArm64 struct {\n\tRegs   [31]uint64\n\tSp     uint64\n\tPc     uint64\n\tPstate uint64\n}\n\n// PtraceGetRegsArm64 fetches the registers used by arm64 binaries.\nfunc PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsArm64 sets the registers used by arm64 binaries.\nfunc PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go",
    "content": "// Code generated by linux/mkall.go generatePtraceRegSet(\"arm64\"). DO NOT EDIT.\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceGetRegSetArm64 fetches the registers used by arm64 binaries.\nfunc PtraceGetRegSetArm64(pid, addr int, regsout *PtraceRegsArm64) error {\n\tiovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))}\n\treturn ptracePtr(PTRACE_GETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec))\n}\n\n// PtraceSetRegSetArm64 sets the registers used by arm64 binaries.\nfunc PtraceSetRegSetArm64(pid, addr int, regs *PtraceRegsArm64) error {\n\tiovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))}\n\treturn ptracePtr(PTRACE_SETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"mips\", \"mips64\"). DO NOT EDIT.\n\n//go:build linux && (mips || mips64)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsMips is the registers used by mips binaries.\ntype PtraceRegsMips struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips fetches the registers used by mips binaries.\nfunc PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMips sets the registers used by mips binaries.\nfunc PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsMips64 is the registers used by mips64 binaries.\ntype PtraceRegsMips64 struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips64 fetches the registers used by mips64 binaries.\nfunc PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMips64 sets the registers used by mips64 binaries.\nfunc PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"mipsle\", \"mips64le\"). DO NOT EDIT.\n\n//go:build linux && (mipsle || mips64le)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsMipsle is the registers used by mipsle binaries.\ntype PtraceRegsMipsle struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMipsle fetches the registers used by mipsle binaries.\nfunc PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMipsle sets the registers used by mipsle binaries.\nfunc PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsMips64le is the registers used by mips64le binaries.\ntype PtraceRegsMips64le struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips64le fetches the registers used by mips64le binaries.\nfunc PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMips64le sets the registers used by mips64le binaries.\nfunc PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_x86_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"386\", \"amd64\"). DO NOT EDIT.\n\n//go:build linux && (386 || amd64)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegs386 is the registers used by 386 binaries.\ntype PtraceRegs386 struct {\n\tEbx      int32\n\tEcx      int32\n\tEdx      int32\n\tEsi      int32\n\tEdi      int32\n\tEbp      int32\n\tEax      int32\n\tXds      int32\n\tXes      int32\n\tXfs      int32\n\tXgs      int32\n\tOrig_eax int32\n\tEip      int32\n\tXcs      int32\n\tEflags   int32\n\tEsp      int32\n\tXss      int32\n}\n\n// PtraceGetRegs386 fetches the registers used by 386 binaries.\nfunc PtraceGetRegs386(pid int, regsout *PtraceRegs386) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegs386 sets the registers used by 386 binaries.\nfunc PtraceSetRegs386(pid int, regs *PtraceRegs386) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsAmd64 is the registers used by amd64 binaries.\ntype PtraceRegsAmd64 struct {\n\tR15      uint64\n\tR14      uint64\n\tR13      uint64\n\tR12      uint64\n\tRbp      uint64\n\tRbx      uint64\n\tR11      uint64\n\tR10      uint64\n\tR9       uint64\n\tR8       uint64\n\tRax      uint64\n\tRcx      uint64\n\tRdx      uint64\n\tRsi      uint64\n\tRdi      uint64\n\tOrig_rax uint64\n\tRip      uint64\n\tCs       uint64\n\tEflags   uint64\n\tRsp      uint64\n\tSs       uint64\n\tFs_base  uint64\n\tGs_base  uint64\n\tDs       uint64\n\tEs       uint64\n\tFs       uint64\n\tGs       uint64\n}\n\n// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries.\nfunc PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsAmd64 sets the registers used by amd64 binaries.\nfunc PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s",
    "content": "// go run mksyscall_zos_s390x.go -o_sysnum zsysnum_zos_s390x.go -o_syscall zsyscall_zos_s390x.go -i_syscall syscall_zos_s390x.go -o_asm zsymaddr_zos_s390x.s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build zos && s390x\n#include \"textflag.h\"\n\n//  provide the address of function variable to be fixed up.\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FlistxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Flistxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FremovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fremovexattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FgetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fgetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FsetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fsetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_accept4Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·accept4(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_RemovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Removexattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_Dup3Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Dup3(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_DirfdAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Dirfd(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollCreateAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollCreate(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollCreate1Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollCreate1(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollCtlAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollCtl(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollPwaitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollPwait(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollWaitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollWait(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EventfdAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Eventfd(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FaccessatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Faccessat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FchmodatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fchmodat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FchownatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fchownat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FdatasyncAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fdatasync(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_fstatatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·fstatat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LgetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lgetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LsetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lsetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FstatfsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fstatfs(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FutimesAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Futimes(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FutimesatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Futimesat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_GetrandomAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Getrandom(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyInitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyInit(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyInit1Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyInit1(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyAddWatchAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyAddWatch(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyRmWatchAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyRmWatch(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_ListxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Listxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LlistxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Llistxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LremovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lremovexattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LutimesAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lutimes(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_StatfsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Statfs(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SyncfsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Syncfs(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_UnshareAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Unshare(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Linkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_MkdiratAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mkdirat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_MknodatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mknodat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_PivotRootAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·PivotRoot(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_PrctlAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Prctl(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_PrlimitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Prlimit(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_RenameatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Renameat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_Renameat2Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Renameat2(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SethostnameAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Sethostname(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SetnsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Setns(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SymlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Symlinkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_UnlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Unlinkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_openatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·openat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_openat2Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·openat2(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_utimensatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·utimensat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go",
    "content": "// go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc\n\npackage unix\n\n/*\n#include <stdint.h>\n#include <stddef.h>\nint utimes(uintptr_t, uintptr_t);\nint utimensat(int, uintptr_t, uintptr_t, int);\nint getcwd(uintptr_t, size_t);\nint accept(int, uintptr_t, uintptr_t);\nint getdirent(int, uintptr_t, size_t);\nint wait4(int, uintptr_t, int, uintptr_t);\nint ioctl(int, int, uintptr_t);\nint fcntl(uintptr_t, int, uintptr_t);\nint fsync_range(int, int, long long, long long);\nint acct(uintptr_t);\nint chdir(uintptr_t);\nint chroot(uintptr_t);\nint close(int);\nint dup(int);\nvoid exit(int);\nint faccessat(int, uintptr_t, unsigned int, int);\nint fchdir(int);\nint fchmod(int, unsigned int);\nint fchmodat(int, uintptr_t, unsigned int, int);\nint fchownat(int, uintptr_t, int, int, int);\nint fdatasync(int);\nint getpgid(int);\nint getpgrp();\nint getpid();\nint getppid();\nint getpriority(int, int);\nint getrusage(int, uintptr_t);\nint getsid(int);\nint kill(int, int);\nint syslog(int, uintptr_t, size_t);\nint mkdir(int, uintptr_t, unsigned int);\nint mkdirat(int, uintptr_t, unsigned int);\nint mkfifo(uintptr_t, unsigned int);\nint mknod(uintptr_t, unsigned int, int);\nint mknodat(int, uintptr_t, unsigned int, int);\nint nanosleep(uintptr_t, uintptr_t);\nint open64(uintptr_t, int, unsigned int);\nint openat(int, uintptr_t, int, unsigned int);\nint read(int, uintptr_t, size_t);\nint readlink(uintptr_t, uintptr_t, size_t);\nint renameat(int, uintptr_t, int, uintptr_t);\nint setdomainname(uintptr_t, size_t);\nint sethostname(uintptr_t, size_t);\nint setpgid(int, int);\nint setsid();\nint settimeofday(uintptr_t);\nint setuid(int);\nint setgid(int);\nint setpriority(int, int, int);\nint statx(int, uintptr_t, int, int, uintptr_t);\nint sync();\nuintptr_t times(uintptr_t);\nint umask(int);\nint uname(uintptr_t);\nint unlink(uintptr_t);\nint unlinkat(int, uintptr_t, int);\nint ustat(int, uintptr_t);\nint write(int, uintptr_t, size_t);\nint dup2(int, int);\nint posix_fadvise64(int, long long, long long, int);\nint fchown(int, int, int);\nint fstat(int, uintptr_t);\nint fstatat(int, uintptr_t, uintptr_t, int);\nint fstatfs(int, uintptr_t);\nint ftruncate(int, long long);\nint getegid();\nint geteuid();\nint getgid();\nint getuid();\nint lchown(uintptr_t, int, int);\nint listen(int, int);\nint lstat(uintptr_t, uintptr_t);\nint pause();\nint pread64(int, uintptr_t, size_t, long long);\nint pwrite64(int, uintptr_t, size_t, long long);\n#define c_select select\nint select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint setregid(int, int);\nint setreuid(int, int);\nint shutdown(int, int);\nlong long splice(int, uintptr_t, int, uintptr_t, int, int);\nint stat(uintptr_t, uintptr_t);\nint statfs(uintptr_t, uintptr_t);\nint truncate(uintptr_t, long long);\nint bind(int, uintptr_t, uintptr_t);\nint connect(int, uintptr_t, uintptr_t);\nint getgroups(int, uintptr_t);\nint setgroups(int, uintptr_t);\nint getsockopt(int, int, int, uintptr_t, uintptr_t);\nint setsockopt(int, int, int, uintptr_t, uintptr_t);\nint socket(int, int, int);\nint socketpair(int, int, int, uintptr_t);\nint getpeername(int, uintptr_t, uintptr_t);\nint getsockname(int, uintptr_t, uintptr_t);\nint recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint nrecvmsg(int, uintptr_t, int);\nint nsendmsg(int, uintptr_t, int);\nint munmap(uintptr_t, uintptr_t);\nint madvise(uintptr_t, size_t, int);\nint mprotect(uintptr_t, size_t, int);\nint mlock(uintptr_t, size_t);\nint mlockall(int);\nint msync(uintptr_t, size_t, int);\nint munlock(uintptr_t, size_t);\nint munlockall();\nint pipe(uintptr_t);\nint poll(uintptr_t, int, int);\nint gettimeofday(uintptr_t, uintptr_t);\nint time(uintptr_t);\nint utime(uintptr_t, uintptr_t);\nunsigned long long getsystemcfg(int);\nint umount(uintptr_t);\nint getrlimit64(int, uintptr_t);\nlong long lseek64(int, long long, int);\nuintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long);\n\n*/\nimport \"C\"\nimport (\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getcwd(buf []byte) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirent(fd int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {\n\tr0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))\n\twpid = Pid_t(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))\n\tr = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))\n\tval = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsyncRange(fd int, how int, start int64, length int64) (err error) {\n\tr0, er := C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.acct(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.chdir(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.chroot(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\tr0, er := C.close(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, er := C.dup(C.int(oldfd))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tC.exit(C.int(code))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\tr0, er := C.fchdir(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\tr0, er := C.fchmod(C.int(fd), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\tr0, er := C.fdatasync(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, er := C.getpgid(C.int(pid))\n\tpgid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pid int) {\n\tr0, _ := C.getpgrp()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := C.getpid()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := C.getppid()\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, er := C.getpriority(C.int(which), C.int(who))\n\tprio = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\tr0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, er := C.getsid(C.int(pid))\n\tsid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\tr0, er := C.kill(C.int(pid), C.int(sig))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(dirfd int, path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\tr0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tvar _p2 int\n\t_p2 = len(buf)\n\tr0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(oldpath)))\n\t_p1 := uintptr(unsafe.Pointer(C.CString(newpath)))\n\tr0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\tr0, er := C.setpgid(C.int(pid), C.int(pgid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, er := C.setsid()\n\tpid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\tr0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\tr0, er := C.setuid(C.int(uid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\tr0, er := C.setgid(C.int(uid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\tr0, er := C.setpriority(C.int(which), C.int(who), C.int(prio))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tC.sync()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms))))\n\tticks = uintptr(r0)\n\tif uintptr(r0) == ^uintptr(0) && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := C.umask(C.int(mask))\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\tr0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.unlink(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\tr0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\tr0, er := C.dup2(C.int(oldfd), C.int(newfd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\tr0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\tr0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_t) (err error) {\n\tr0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\tr0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\tr0, er := C.ftruncate(C.int(fd), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := C.getegid()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := C.geteuid()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := C.getgid()\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := C.getuid()\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\tr0, er := C.listen(C.int(s), C.int(n))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\tr0, er := C.pause()\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, er := C.c_select(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask))))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\tr0, er := C.setregid(C.int(rgid), C.int(egid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\tr0, er := C.setreuid(C.int(ruid), C.int(euid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\tr0, er := C.shutdown(C.int(fd), C.int(how))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, er := C.splice(C.int(rfd), C.uintptr_t(uintptr(unsafe.Pointer(roff))), C.int(wfd), C.uintptr_t(uintptr(unsafe.Pointer(woff))), C.int(len), C.int(flags))\n\tn = int64(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statptr *Stat_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\tr0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\tr0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))\n\tnn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\tr0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\tr0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\tr0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, er := C.socket(C.int(domain), C.int(typ), C.int(proto))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\tr0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.recvfrom(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(unsafe.Pointer(from))), C.uintptr_t(uintptr(unsafe.Pointer(fromlen))))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.sendto(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(to)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\tr0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\tr0, er := C.mlockall(C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\tr0, er := C.munlockall()\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\tr0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *Timeval, tzp *Timezone) (err error) {\n\tr0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t))))\n\ttt = Time_t(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsystemcfg(label int) (n uint64) {\n\tr0, _ := C.getsystemcfg(C.int(label))\n\tn = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc umount(target string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(target)))\n\tr0, er := C.umount(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\tr0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence))\n\toff = int64(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))\n\txaddr = uintptr(r0)\n\tif uintptr(r0) == ^uintptr(0) && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc64\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getcwd(buf []byte) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirent(fd int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {\n\tr0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage)))\n\twpid = Pid_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\t_, e1 := callioctl(fd, req, arg)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\t_, e1 := callioctl_ptr(fd, req, arg)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {\n\tr0, e1 := callfcntl(fd, cmd, uintptr(arg))\n\tr = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {\n\t_, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsyncRange(fd int, how int, start int64, length int64) (err error) {\n\t_, e1 := callfsync_range(fd, how, start, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callacct(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callchdir(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callchroot(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, e1 := callclose(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, e1 := calldup(oldfd)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tcallexit(code)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, e1 := callfchdir(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, e1 := callfchmod(fd, mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, e1 := callfdatasync(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, e1 := callgetpgid(pid)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pid int) {\n\tr0, _ := callgetpgrp()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := callgetpid()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := callgetppid()\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, e1 := callgetpriority(which, who)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, e1 := callgetsid(pid)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\t_, e1 := callkill(pid, int(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tr0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, e1 := callsetpgid(pid, pgid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, e1 := callsetsid()\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, e1 := callsetuid(uid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\t_, e1 := callsetgid(uid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, e1 := callsetpriority(which, who, prio)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tcallsync()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, e1 := calltimes(uintptr(unsafe.Pointer(tms)))\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := callumask(mask)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, e1 := calluname(uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callunlink(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, e1 := calldup2(oldfd, newfd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, e1 := callposix_fadvise64(fd, offset, length, advice)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, e1 := callfchown(fd, uid, gid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_t) (err error) {\n\t_, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, e1 := callftruncate(fd, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := callgetegid()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := callgeteuid()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := callgetgid()\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := callgetuid()\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, e1 := calllisten(s, n)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, e1 := callpause()\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, e1 := callsetregid(rgid, egid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, e1 := callsetreuid(ruid, euid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, e1 := callshutdown(fd, how)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statptr *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e1 := callbind(s, uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e1 := callconnect(s, uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list)))\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, e1 := callsetsockopt(s, level, name, uintptr(val), vallen)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, e1 := callsocket(domain, typ, proto)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, e1 := callmunmap(addr, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, e1 := callmlockall(flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, e1 := callmunlockall()\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, e1 := callpipe(uintptr(unsafe.Pointer(p)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *Timeval, tzp *Timezone) (err error) {\n\t_, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, e1 := calltime(uintptr(unsafe.Pointer(t)))\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsystemcfg(label int) (n uint64) {\n\tr0, _ := callgetsystemcfg(label)\n\tn = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc umount(target string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callumount(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, e1 := calllseek(fd, offset, whence)\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, e1 := callmmap64(addr, length, prot, flags, fd, offset)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc64 && gc\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_accept accept \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getdirent getdirent \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fsync_range fsync_range \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_acct acct \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_chdir chdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_chroot chroot \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_close close \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_dup dup \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_exit exit \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fdatasync fdatasync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpid getpid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getppid getppid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsid getsid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_kill kill \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_syslog syslog \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mknod mknod \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_open64 open64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_openat openat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_read read \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_readlink readlink \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_renameat renameat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setdomainname setdomainname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sethostname sethostname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setsid setsid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setuid setuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setgid setgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_statx statx \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sync sync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_times times \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_umask umask \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_uname uname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_unlink unlink \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ustat ustat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_write write \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchown fchown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstat fstat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getegid getegid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getgid getgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getuid getuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lchown lchown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_listen listen \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lstat lstat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pause pause \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pread64 pread64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pwrite64 pwrite64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_select select \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pselect pselect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setregid setregid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_splice splice \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_stat stat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_statfs statfs \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_truncate truncate \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_bind bind \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_connect connect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_socket socket \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sendto sendto \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nsendmsg nsendmsg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munmap munmap \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_madvise madvise \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mlock mlock \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_msync msync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munlock munlock \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pipe pipe \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_poll poll \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_time time \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_utime utime \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_umount umount \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lseek lseek \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mmap64 mmap64 \"libc.a/shr_64.o\"\n\n//go:linkname libc_utimes libc_utimes\n//go:linkname libc_utimensat libc_utimensat\n//go:linkname libc_getcwd libc_getcwd\n//go:linkname libc_accept libc_accept\n//go:linkname libc_getdirent libc_getdirent\n//go:linkname libc_wait4 libc_wait4\n//go:linkname libc_ioctl libc_ioctl\n//go:linkname libc_fcntl libc_fcntl\n//go:linkname libc_fsync_range libc_fsync_range\n//go:linkname libc_acct libc_acct\n//go:linkname libc_chdir libc_chdir\n//go:linkname libc_chroot libc_chroot\n//go:linkname libc_close libc_close\n//go:linkname libc_dup libc_dup\n//go:linkname libc_exit libc_exit\n//go:linkname libc_faccessat libc_faccessat\n//go:linkname libc_fchdir libc_fchdir\n//go:linkname libc_fchmod libc_fchmod\n//go:linkname libc_fchmodat libc_fchmodat\n//go:linkname libc_fchownat libc_fchownat\n//go:linkname libc_fdatasync libc_fdatasync\n//go:linkname libc_getpgid libc_getpgid\n//go:linkname libc_getpgrp libc_getpgrp\n//go:linkname libc_getpid libc_getpid\n//go:linkname libc_getppid libc_getppid\n//go:linkname libc_getpriority libc_getpriority\n//go:linkname libc_getrusage libc_getrusage\n//go:linkname libc_getsid libc_getsid\n//go:linkname libc_kill libc_kill\n//go:linkname libc_syslog libc_syslog\n//go:linkname libc_mkdir libc_mkdir\n//go:linkname libc_mkdirat libc_mkdirat\n//go:linkname libc_mkfifo libc_mkfifo\n//go:linkname libc_mknod libc_mknod\n//go:linkname libc_mknodat libc_mknodat\n//go:linkname libc_nanosleep libc_nanosleep\n//go:linkname libc_open64 libc_open64\n//go:linkname libc_openat libc_openat\n//go:linkname libc_read libc_read\n//go:linkname libc_readlink libc_readlink\n//go:linkname libc_renameat libc_renameat\n//go:linkname libc_setdomainname libc_setdomainname\n//go:linkname libc_sethostname libc_sethostname\n//go:linkname libc_setpgid libc_setpgid\n//go:linkname libc_setsid libc_setsid\n//go:linkname libc_settimeofday libc_settimeofday\n//go:linkname libc_setuid libc_setuid\n//go:linkname libc_setgid libc_setgid\n//go:linkname libc_setpriority libc_setpriority\n//go:linkname libc_statx libc_statx\n//go:linkname libc_sync libc_sync\n//go:linkname libc_times libc_times\n//go:linkname libc_umask libc_umask\n//go:linkname libc_uname libc_uname\n//go:linkname libc_unlink libc_unlink\n//go:linkname libc_unlinkat libc_unlinkat\n//go:linkname libc_ustat libc_ustat\n//go:linkname libc_write libc_write\n//go:linkname libc_dup2 libc_dup2\n//go:linkname libc_posix_fadvise64 libc_posix_fadvise64\n//go:linkname libc_fchown libc_fchown\n//go:linkname libc_fstat libc_fstat\n//go:linkname libc_fstatat libc_fstatat\n//go:linkname libc_fstatfs libc_fstatfs\n//go:linkname libc_ftruncate libc_ftruncate\n//go:linkname libc_getegid libc_getegid\n//go:linkname libc_geteuid libc_geteuid\n//go:linkname libc_getgid libc_getgid\n//go:linkname libc_getuid libc_getuid\n//go:linkname libc_lchown libc_lchown\n//go:linkname libc_listen libc_listen\n//go:linkname libc_lstat libc_lstat\n//go:linkname libc_pause libc_pause\n//go:linkname libc_pread64 libc_pread64\n//go:linkname libc_pwrite64 libc_pwrite64\n//go:linkname libc_select libc_select\n//go:linkname libc_pselect libc_pselect\n//go:linkname libc_setregid libc_setregid\n//go:linkname libc_setreuid libc_setreuid\n//go:linkname libc_shutdown libc_shutdown\n//go:linkname libc_splice libc_splice\n//go:linkname libc_stat libc_stat\n//go:linkname libc_statfs libc_statfs\n//go:linkname libc_truncate libc_truncate\n//go:linkname libc_bind libc_bind\n//go:linkname libc_connect libc_connect\n//go:linkname libc_getgroups libc_getgroups\n//go:linkname libc_setgroups libc_setgroups\n//go:linkname libc_getsockopt libc_getsockopt\n//go:linkname libc_setsockopt libc_setsockopt\n//go:linkname libc_socket libc_socket\n//go:linkname libc_socketpair libc_socketpair\n//go:linkname libc_getpeername libc_getpeername\n//go:linkname libc_getsockname libc_getsockname\n//go:linkname libc_recvfrom libc_recvfrom\n//go:linkname libc_sendto libc_sendto\n//go:linkname libc_nrecvmsg libc_nrecvmsg\n//go:linkname libc_nsendmsg libc_nsendmsg\n//go:linkname libc_munmap libc_munmap\n//go:linkname libc_madvise libc_madvise\n//go:linkname libc_mprotect libc_mprotect\n//go:linkname libc_mlock libc_mlock\n//go:linkname libc_mlockall libc_mlockall\n//go:linkname libc_msync libc_msync\n//go:linkname libc_munlock libc_munlock\n//go:linkname libc_munlockall libc_munlockall\n//go:linkname libc_pipe libc_pipe\n//go:linkname libc_poll libc_poll\n//go:linkname libc_gettimeofday libc_gettimeofday\n//go:linkname libc_time libc_time\n//go:linkname libc_utime libc_utime\n//go:linkname libc_getsystemcfg libc_getsystemcfg\n//go:linkname libc_umount libc_umount\n//go:linkname libc_getrlimit libc_getrlimit\n//go:linkname libc_lseek libc_lseek\n//go:linkname libc_mmap64 libc_mmap64\n\ntype syscallFunc uintptr\n\nvar (\n\tlibc_utimes,\n\tlibc_utimensat,\n\tlibc_getcwd,\n\tlibc_accept,\n\tlibc_getdirent,\n\tlibc_wait4,\n\tlibc_ioctl,\n\tlibc_fcntl,\n\tlibc_fsync_range,\n\tlibc_acct,\n\tlibc_chdir,\n\tlibc_chroot,\n\tlibc_close,\n\tlibc_dup,\n\tlibc_exit,\n\tlibc_faccessat,\n\tlibc_fchdir,\n\tlibc_fchmod,\n\tlibc_fchmodat,\n\tlibc_fchownat,\n\tlibc_fdatasync,\n\tlibc_getpgid,\n\tlibc_getpgrp,\n\tlibc_getpid,\n\tlibc_getppid,\n\tlibc_getpriority,\n\tlibc_getrusage,\n\tlibc_getsid,\n\tlibc_kill,\n\tlibc_syslog,\n\tlibc_mkdir,\n\tlibc_mkdirat,\n\tlibc_mkfifo,\n\tlibc_mknod,\n\tlibc_mknodat,\n\tlibc_nanosleep,\n\tlibc_open64,\n\tlibc_openat,\n\tlibc_read,\n\tlibc_readlink,\n\tlibc_renameat,\n\tlibc_setdomainname,\n\tlibc_sethostname,\n\tlibc_setpgid,\n\tlibc_setsid,\n\tlibc_settimeofday,\n\tlibc_setuid,\n\tlibc_setgid,\n\tlibc_setpriority,\n\tlibc_statx,\n\tlibc_sync,\n\tlibc_times,\n\tlibc_umask,\n\tlibc_uname,\n\tlibc_unlink,\n\tlibc_unlinkat,\n\tlibc_ustat,\n\tlibc_write,\n\tlibc_dup2,\n\tlibc_posix_fadvise64,\n\tlibc_fchown,\n\tlibc_fstat,\n\tlibc_fstatat,\n\tlibc_fstatfs,\n\tlibc_ftruncate,\n\tlibc_getegid,\n\tlibc_geteuid,\n\tlibc_getgid,\n\tlibc_getuid,\n\tlibc_lchown,\n\tlibc_listen,\n\tlibc_lstat,\n\tlibc_pause,\n\tlibc_pread64,\n\tlibc_pwrite64,\n\tlibc_select,\n\tlibc_pselect,\n\tlibc_setregid,\n\tlibc_setreuid,\n\tlibc_shutdown,\n\tlibc_splice,\n\tlibc_stat,\n\tlibc_statfs,\n\tlibc_truncate,\n\tlibc_bind,\n\tlibc_connect,\n\tlibc_getgroups,\n\tlibc_setgroups,\n\tlibc_getsockopt,\n\tlibc_setsockopt,\n\tlibc_socket,\n\tlibc_socketpair,\n\tlibc_getpeername,\n\tlibc_getsockname,\n\tlibc_recvfrom,\n\tlibc_sendto,\n\tlibc_nrecvmsg,\n\tlibc_nsendmsg,\n\tlibc_munmap,\n\tlibc_madvise,\n\tlibc_mprotect,\n\tlibc_mlock,\n\tlibc_mlockall,\n\tlibc_msync,\n\tlibc_munlock,\n\tlibc_munlockall,\n\tlibc_pipe,\n\tlibc_poll,\n\tlibc_gettimeofday,\n\tlibc_time,\n\tlibc_utime,\n\tlibc_getsystemcfg,\n\tlibc_umount,\n\tlibc_getrlimit,\n\tlibc_lseek,\n\tlibc_mmap64 syscallFunc\n)\n\n// Implemented in runtime/syscall_aix.go.\nfunc rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync_range)), 4, uintptr(fd), uintptr(how), uintptr(start), uintptr(length), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callclose(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup(oldfd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callexit(code int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchdir(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfdatasync(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgid(pid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgrp() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetppid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsid(pid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callkill(pid int, sig int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetuid(uid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgid(uid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsync() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltimes(tms uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumask(mask int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calluname(buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetegid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgeteuid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetuid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllisten(s int, n int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpause() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlockall(flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlockall() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpipe(p uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltime(t uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc64 && gccgo\n\npackage unix\n\n/*\n#include <stdint.h>\nint utimes(uintptr_t, uintptr_t);\nint utimensat(int, uintptr_t, uintptr_t, int);\nint getcwd(uintptr_t, size_t);\nint accept(int, uintptr_t, uintptr_t);\nint getdirent(int, uintptr_t, size_t);\nint wait4(int, uintptr_t, int, uintptr_t);\nint ioctl(int, int, uintptr_t);\nint fcntl(uintptr_t, int, uintptr_t);\nint fsync_range(int, int, long long, long long);\nint acct(uintptr_t);\nint chdir(uintptr_t);\nint chroot(uintptr_t);\nint close(int);\nint dup(int);\nvoid exit(int);\nint faccessat(int, uintptr_t, unsigned int, int);\nint fchdir(int);\nint fchmod(int, unsigned int);\nint fchmodat(int, uintptr_t, unsigned int, int);\nint fchownat(int, uintptr_t, int, int, int);\nint fdatasync(int);\nint getpgid(int);\nint getpgrp();\nint getpid();\nint getppid();\nint getpriority(int, int);\nint getrusage(int, uintptr_t);\nint getsid(int);\nint kill(int, int);\nint syslog(int, uintptr_t, size_t);\nint mkdir(int, uintptr_t, unsigned int);\nint mkdirat(int, uintptr_t, unsigned int);\nint mkfifo(uintptr_t, unsigned int);\nint mknod(uintptr_t, unsigned int, int);\nint mknodat(int, uintptr_t, unsigned int, int);\nint nanosleep(uintptr_t, uintptr_t);\nint open64(uintptr_t, int, unsigned int);\nint openat(int, uintptr_t, int, unsigned int);\nint read(int, uintptr_t, size_t);\nint readlink(uintptr_t, uintptr_t, size_t);\nint renameat(int, uintptr_t, int, uintptr_t);\nint setdomainname(uintptr_t, size_t);\nint sethostname(uintptr_t, size_t);\nint setpgid(int, int);\nint setsid();\nint settimeofday(uintptr_t);\nint setuid(int);\nint setgid(int);\nint setpriority(int, int, int);\nint statx(int, uintptr_t, int, int, uintptr_t);\nint sync();\nuintptr_t times(uintptr_t);\nint umask(int);\nint uname(uintptr_t);\nint unlink(uintptr_t);\nint unlinkat(int, uintptr_t, int);\nint ustat(int, uintptr_t);\nint write(int, uintptr_t, size_t);\nint dup2(int, int);\nint posix_fadvise64(int, long long, long long, int);\nint fchown(int, int, int);\nint fstat(int, uintptr_t);\nint fstatat(int, uintptr_t, uintptr_t, int);\nint fstatfs(int, uintptr_t);\nint ftruncate(int, long long);\nint getegid();\nint geteuid();\nint getgid();\nint getuid();\nint lchown(uintptr_t, int, int);\nint listen(int, int);\nint lstat(uintptr_t, uintptr_t);\nint pause();\nint pread64(int, uintptr_t, size_t, long long);\nint pwrite64(int, uintptr_t, size_t, long long);\n#define c_select select\nint select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint setregid(int, int);\nint setreuid(int, int);\nint shutdown(int, int);\nlong long splice(int, uintptr_t, int, uintptr_t, int, int);\nint stat(uintptr_t, uintptr_t);\nint statfs(uintptr_t, uintptr_t);\nint truncate(uintptr_t, long long);\nint bind(int, uintptr_t, uintptr_t);\nint connect(int, uintptr_t, uintptr_t);\nint getgroups(int, uintptr_t);\nint setgroups(int, uintptr_t);\nint getsockopt(int, int, int, uintptr_t, uintptr_t);\nint setsockopt(int, int, int, uintptr_t, uintptr_t);\nint socket(int, int, int);\nint socketpair(int, int, int, uintptr_t);\nint getpeername(int, uintptr_t, uintptr_t);\nint getsockname(int, uintptr_t, uintptr_t);\nint recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint nrecvmsg(int, uintptr_t, int);\nint nsendmsg(int, uintptr_t, int);\nint munmap(uintptr_t, uintptr_t);\nint madvise(uintptr_t, size_t, int);\nint mprotect(uintptr_t, size_t, int);\nint mlock(uintptr_t, size_t);\nint mlockall(int);\nint msync(uintptr_t, size_t, int);\nint munlock(uintptr_t, size_t);\nint munlockall();\nint pipe(uintptr_t);\nint poll(uintptr_t, int, int);\nint gettimeofday(uintptr_t, uintptr_t);\nint time(uintptr_t);\nint utime(uintptr_t, uintptr_t);\nunsigned long long getsystemcfg(int);\nint umount(uintptr_t);\nint getrlimit(int, uintptr_t);\nlong long lseek(int, long long, int);\nuintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long);\n\n*/\nimport \"C\"\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg))))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.acct(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.chdir(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.chroot(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callclose(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.close(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup(oldfd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.dup(C.int(oldfd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callexit(code int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.exit(C.int(code)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchdir(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchdir(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchmod(C.int(fd), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfdatasync(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fdatasync(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgid(pid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpgid(C.int(pid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgrp() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpgrp())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetppid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getppid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpriority(C.int(which), C.int(who)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsid(pid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsid(C.int(pid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callkill(pid int, sig int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.kill(C.int(pid), C.int(sig)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setpgid(C.int(pid), C.int(pgid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setsid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.settimeofday(C.uintptr_t(tv)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetuid(uid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setuid(C.int(uid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgid(uid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setgid(C.int(uid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsync() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sync())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltimes(tms uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.times(C.uintptr_t(tms)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumask(mask int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.umask(C.int(mask)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calluname(buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.uname(C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.unlink(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetegid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getegid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgeteuid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.geteuid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getgid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetuid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getuid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllisten(s int, n int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.listen(C.int(s), C.int(n)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpause() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pause())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setregid(C.int(rgid), C.int(egid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setreuid(C.int(ruid), C.int(euid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.shutdown(C.int(fd), C.int(how)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.recvfrom(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(from), C.uintptr_t(fromlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sendto(C.int(s), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(to), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlockall(flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mlockall(C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlockall() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munlockall())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpipe(p uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pipe(C.uintptr_t(p)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltime(t uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.time(C.uintptr_t(t)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsystemcfg(C.int(label)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.umount(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go",
    "content": "// go run mksyscall.go -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build darwin && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc closedir(dir uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_closedir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_closedir closedir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {\n\tr0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))\n\tres = Errno(r0)\n\treturn\n}\n\nvar libc_readdir_r_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readdir_r readdir_r \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fgetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_removexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fremovexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flistxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renamexNp(from string, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renamex_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renamex_np renamex_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameatx_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameatx_np renameatx_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_chdir_np(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_chdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_fchdir_np(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_fchdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iov) > 0 {\n\t\t_p0 = unsafe.Pointer(&iov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connectx_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connectx connectx \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendfile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmat shmat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\tresult = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmctl shmctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmdt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmdt shmdt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmget_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmget shmget \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefile(src string, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefile clonefile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefileat clonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_exchangedata_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fclonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fclonefileat fclonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nvar libc_getdtablesize_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(attrBuf) > 0 {\n\t\t_p1 = unsafe.Pointer(&attrBuf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setattrlist_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setprivexec_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_undelete_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readv(fd int, iovecs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readv_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readv readv \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_preadv_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_preadv preadv \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writev(fd int, iovecs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_writev_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_writev writev \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwritev_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwritev pwritev \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat64 fstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat64 fstatat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat64_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat64 lstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ptrace_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat64 stat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs64 statfs64 \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s",
    "content": "// go run mkasm.go darwin amd64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fdopendir(SB)\nGLOBL\t·libc_fdopendir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_closedir(SB)\nGLOBL\t·libc_closedir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)\n\nTEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readdir_r(SB)\nGLOBL\t·libc_readdir_r_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)\n\nTEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nGLOBL\t·libc_pipe_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB)\n\nTEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nGLOBL\t·libc_getxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB)\n\nTEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nGLOBL\t·libc_fgetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB)\n\nTEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nGLOBL\t·libc_setxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB)\n\nTEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nGLOBL\t·libc_fsetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB)\n\nTEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nGLOBL\t·libc_removexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB)\n\nTEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nGLOBL\t·libc_fremovexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB)\n\nTEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nGLOBL\t·libc_listxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB)\n\nTEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nGLOBL\t·libc_flistxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renamex_np(SB)\nGLOBL\t·libc_renamex_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB)\n\nTEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameatx_np(SB)\nGLOBL\t·libc_renameatx_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_chdir_np(SB)\nGLOBL\t·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB)\n\nTEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_fchdir_np(SB)\nGLOBL\t·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB)\n\nTEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connectx(SB)\nGLOBL\t·libc_connectx_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB)\n\nTEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nGLOBL\t·libc_sendfile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)\n\nTEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmat(SB)\nGLOBL\t·libc_shmat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)\n\nTEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmctl(SB)\nGLOBL\t·libc_shmctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)\n\nTEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmdt(SB)\nGLOBL\t·libc_shmdt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)\n\nTEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmget(SB)\nGLOBL\t·libc_shmget_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefile(SB)\nGLOBL\t·libc_clonefile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB)\n\nTEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefileat(SB)\nGLOBL\t·libc_clonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nGLOBL\t·libc_exchangedata_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fclonefileat(SB)\nGLOBL\t·libc_fclonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nGLOBL\t·libc_getdtablesize_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nGLOBL\t·libc_setattrlist_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nGLOBL\t·libc_setprivexec_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nGLOBL\t·libc_undelete_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readv(SB)\nGLOBL\t·libc_readv_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)\n\nTEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_preadv(SB)\nGLOBL\t·libc_preadv_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)\n\nTEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_writev(SB)\nGLOBL\t·libc_writev_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)\n\nTEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwritev(SB)\nGLOBL\t·libc_pwritev_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)\n\nTEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat64(SB)\nGLOBL\t·libc_fstat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat64_trampoline_addr(SB)/8, $libc_fstat64_trampoline<>(SB)\n\nTEXT libc_fstatat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat64(SB)\nGLOBL\t·libc_fstatat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat64_trampoline_addr(SB)/8, $libc_fstatat64_trampoline<>(SB)\n\nTEXT libc_fstatfs64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs64(SB)\nGLOBL\t·libc_fstatfs64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs64_trampoline_addr(SB)/8, $libc_fstatfs64_trampoline<>(SB)\n\nTEXT libc_getfsstat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat64(SB)\nGLOBL\t·libc_getfsstat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat64_trampoline_addr(SB)/8, $libc_getfsstat64_trampoline<>(SB)\n\nTEXT libc_lstat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat64(SB)\nGLOBL\t·libc_lstat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat64_trampoline_addr(SB)/8, $libc_lstat64_trampoline<>(SB)\n\nTEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nGLOBL\t·libc_ptrace_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB)\n\nTEXT libc_stat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat64(SB)\nGLOBL\t·libc_stat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat64_trampoline_addr(SB)/8, $libc_stat64_trampoline<>(SB)\n\nTEXT libc_statfs64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs64(SB)\nGLOBL\t·libc_statfs64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs64_trampoline_addr(SB)/8, $libc_statfs64_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go",
    "content": "// go run mksyscall.go -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build darwin && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc closedir(dir uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_closedir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_closedir closedir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {\n\tr0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))\n\tres = Errno(r0)\n\treturn\n}\n\nvar libc_readdir_r_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readdir_r readdir_r \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fgetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_removexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fremovexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flistxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renamexNp(from string, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renamex_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renamex_np renamex_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameatx_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameatx_np renameatx_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_chdir_np(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_chdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_fchdir_np(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_fchdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iov) > 0 {\n\t\t_p0 = unsafe.Pointer(&iov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connectx_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connectx connectx \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendfile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmat shmat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\tresult = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmctl shmctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmdt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmdt shmdt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmget_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmget shmget \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefile(src string, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefile clonefile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefileat clonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_exchangedata_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fclonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fclonefileat fclonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nvar libc_getdtablesize_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(attrBuf) > 0 {\n\t\t_p1 = unsafe.Pointer(&attrBuf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setattrlist_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setprivexec_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_undelete_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readv(fd int, iovecs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readv_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readv readv \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_preadv_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_preadv preadv \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writev(fd int, iovecs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_writev_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_writev writev \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovecs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovecs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwritev_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwritev pwritev \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ptrace_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s",
    "content": "// go run mkasm.go darwin arm64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fdopendir(SB)\nGLOBL\t·libc_fdopendir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_closedir(SB)\nGLOBL\t·libc_closedir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)\n\nTEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readdir_r(SB)\nGLOBL\t·libc_readdir_r_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)\n\nTEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nGLOBL\t·libc_pipe_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB)\n\nTEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nGLOBL\t·libc_getxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB)\n\nTEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nGLOBL\t·libc_fgetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB)\n\nTEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nGLOBL\t·libc_setxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB)\n\nTEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nGLOBL\t·libc_fsetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB)\n\nTEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nGLOBL\t·libc_removexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB)\n\nTEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nGLOBL\t·libc_fremovexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB)\n\nTEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nGLOBL\t·libc_listxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB)\n\nTEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nGLOBL\t·libc_flistxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renamex_np(SB)\nGLOBL\t·libc_renamex_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB)\n\nTEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameatx_np(SB)\nGLOBL\t·libc_renameatx_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_chdir_np(SB)\nGLOBL\t·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB)\n\nTEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_fchdir_np(SB)\nGLOBL\t·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB)\n\nTEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connectx(SB)\nGLOBL\t·libc_connectx_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB)\n\nTEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nGLOBL\t·libc_sendfile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)\n\nTEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmat(SB)\nGLOBL\t·libc_shmat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)\n\nTEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmctl(SB)\nGLOBL\t·libc_shmctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)\n\nTEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmdt(SB)\nGLOBL\t·libc_shmdt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)\n\nTEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmget(SB)\nGLOBL\t·libc_shmget_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefile(SB)\nGLOBL\t·libc_clonefile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB)\n\nTEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefileat(SB)\nGLOBL\t·libc_clonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nGLOBL\t·libc_exchangedata_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fclonefileat(SB)\nGLOBL\t·libc_fclonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nGLOBL\t·libc_getdtablesize_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nGLOBL\t·libc_setattrlist_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nGLOBL\t·libc_setprivexec_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nGLOBL\t·libc_undelete_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readv(SB)\nGLOBL\t·libc_readv_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)\n\nTEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_preadv(SB)\nGLOBL\t·libc_preadv_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)\n\nTEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_writev(SB)\nGLOBL\t·libc_writev_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)\n\nTEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwritev(SB)\nGLOBL\t·libc_pwritev_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nGLOBL\t·libc_ptrace_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go",
    "content": "// go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build dragonfly && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc extpread(fd int, p []byte, flags int, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go",
    "content": "// go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go",
    "content": "// go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go",
    "content": "// go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, uintptr(dev), uintptr(dev>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go",
    "content": "// go run mksyscall.go -tags freebsd,arm64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go",
    "content": "// go run mksyscall.go -tags freebsd,riscv64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_riscv64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && riscv64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go",
    "content": "// go run mksyscall_solaris.go -illumos -tags illumos,amd64 syscall_illumos.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build illumos && amd64\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_readv readv \"libc.so\"\n//go:cgo_import_dynamic libc_preadv preadv \"libc.so\"\n//go:cgo_import_dynamic libc_writev writev \"libc.so\"\n//go:cgo_import_dynamic libc_pwritev pwritev \"libc.so\"\n//go:cgo_import_dynamic libc_accept4 accept4 \"libsocket.so\"\n\n//go:linkname procreadv libc_readv\n//go:linkname procpreadv libc_preadv\n//go:linkname procwritev libc_writev\n//go:linkname procpwritev libc_pwritev\n//go:linkname procaccept4 libc_accept4\n\nvar (\n\tprocreadv,\n\tprocpreadv,\n\tprocwritev,\n\tprocpwritev,\n\tprocaccept4 syscallFunc\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readv(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procreadv)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv(fd int, iovs []Iovec, off int64) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpreadv)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writev(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwritev)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev(fd int, iovs []Iovec, off int64) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwritev)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept4)), 4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux.go",
    "content": "// Code generated by mkmerge; DO NOT EDIT.\n\n//go:build linux\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) {\n\t_, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(restriction)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlRestrictKeyring(cmd int, arg2 int) (err error) {\n\t_, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT_SETATTR, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(unsafe.Pointer(attr)), uintptr(size), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Capget(hdr *CapUserHeader, data *CapUserData) (err error) {\n\t_, _, e1 := RawSyscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Capset(hdr *CapUserHeader, data *CapUserData) (err error) {\n\t_, _, e1 := RawSyscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockAdjtime(clockid int32, buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_CLOCK_ADJTIME, uintptr(clockid), uintptr(unsafe.Pointer(buf)), 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockSettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_SETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CloseRange(first uint, last uint, flags uint) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE_RANGE, uintptr(first), uintptr(last), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs))\n\tfsfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsopen(fsName string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsName)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fspick(dirfd int, pathName string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathName)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FSCONFIG, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(value)), uintptr(aux), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fromPathName)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(toPathName)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc OpenTree(dfd int, fileName string, flags uint) (r int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fileName)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tr = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc TimerfdCreate(clockid int, flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMERFD_CREATE, uintptr(clockid), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc TimerfdGettime(fd int, currValue *ItimerSpec) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TIMERFD_GETTIME, uintptr(fd), uintptr(unsafe.Pointer(currValue)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_TIMERFD_SETTIME, uintptr(fd), uintptr(flags), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readv(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writev(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREADV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREADV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITEV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldaddr), uintptr(oldlength), uintptr(newlength), uintptr(flags), uintptr(newaddr), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(localIov) > 0 {\n\t\t_p0 = unsafe.Pointer(&localIov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(remoteIov) > 0 {\n\t\t_p1 = unsafe.Pointer(&remoteIov[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PROCESS_VM_READV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(localIov) > 0 {\n\t\t_p0 = unsafe.Pointer(&localIov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(remoteIov) > 0 {\n\t\t_p1 = unsafe.Pointer(&remoteIov[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PROCESS_VM_WRITEV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PidfdOpen(pid int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_PIDFD_OPEN, uintptr(pid), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_PIDFD_GETFD, uintptr(pidfd), uintptr(targetfd), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\tr0, _, e1 := Syscall(SYS_SHMCTL, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\tresult = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_SHMDT, uintptr(addr), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\tr0, _, e1 := Syscall(SYS_SHMGET, uintptr(key), uintptr(size), uintptr(flag))\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getitimer(which int, currValue *Itimerval) (err error) {\n\t_, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) {\n\t_, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_RT_SIGPROCMASK, uintptr(how), uintptr(unsafe.Pointer(set)), uintptr(unsafe.Pointer(oldset)), uintptr(sigsetsize), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tRawSyscallNoError(SYS_GETRESUID, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tRawSyscallNoError(SYS_GETRESGID, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) {\n\t_, _, e1 := Syscall(SYS_SCHED_SETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) {\n\t_, _, e1 := Syscall6(SYS_SCHED_GETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(size), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error) {\n\t_, _, e1 := Syscall6(SYS_CACHESTAT, uintptr(fd), uintptr(unsafe.Pointer(crange)), uintptr(unsafe.Pointer(cstat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mseal(b []byte, flags uint) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSEAL, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_386.go",
    "content": "// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go",
    "content": "// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdSecret(flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go",
    "content": "// go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go",
    "content": "// go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdSecret(flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go",
    "content": "// go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && loong64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go",
    "content": "// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mips\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r0)<<32 | int64(r1))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go",
    "content": "// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mips64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, st *stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go",
    "content": "// go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mips64le\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, st *stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go",
    "content": "// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mipsle\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go",
    "content": "// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && ppc\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r0)<<32 | int64(r1))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length>>32), uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length>>32), uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go",
    "content": "// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && ppc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go",
    "content": "// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && ppc64le\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go",
    "content": "// go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && riscv64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdSecret(flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(pairs) > 0 {\n\t\t_p0 = unsafe.Pointer(&pairs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_RISCV_HWPROBE, uintptr(_p0), uintptr(len(pairs)), uintptr(cpuCount), uintptr(unsafe.Pointer(cpus)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go",
    "content": "// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && s390x\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go",
    "content": "// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && sparc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go",
    "content": "// go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go",
    "content": "// go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go",
    "content": "// go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go",
    "content": "// go run mksyscall.go -netbsd -tags netbsd,arm64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go",
    "content": "// go run mksyscall.go -l32 -openbsd -libc -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s",
    "content": "// go run mkasm.go openbsd 386\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getfsstat_trampoline_addr(SB)/4, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pledge_trampoline_addr(SB)/4, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unveil_trampoline_addr(SB)/4, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go",
    "content": "// go run mksyscall.go -l32 -openbsd -arm -libc -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_ftruncate_trampoline_addr, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s",
    "content": "// go run mkasm.go openbsd arm\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getfsstat_trampoline_addr(SB)/4, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pledge_trampoline_addr(SB)/4, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unveil_trampoline_addr(SB)/4, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s",
    "content": "// go run mkasm.go openbsd arm64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,mips64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_mips64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && mips64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s",
    "content": "// go run mkasm.go openbsd mips64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,ppc64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && ppc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s",
    "content": "// go run mkasm.go openbsd ppc64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getgroups(SB)\n\tRET\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setgroups(SB)\n\tRET\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_wait4(SB)\n\tRET\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_accept(SB)\n\tRET\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_bind(SB)\n\tRET\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_connect(SB)\n\tRET\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_socket(SB)\n\tRET\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getsockopt(SB)\n\tRET\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setsockopt(SB)\n\tRET\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpeername(SB)\n\tRET\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getsockname(SB)\n\tRET\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_shutdown(SB)\n\tRET\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_socketpair(SB)\n\tRET\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_recvfrom(SB)\n\tRET\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sendto(SB)\n\tRET\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_recvmsg(SB)\n\tRET\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sendmsg(SB)\n\tRET\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_kevent(SB)\n\tRET\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_utimes(SB)\n\tRET\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_futimes(SB)\n\tRET\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_poll(SB)\n\tRET\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_madvise(SB)\n\tRET\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mlock(SB)\n\tRET\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mlockall(SB)\n\tRET\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mprotect(SB)\n\tRET\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_msync(SB)\n\tRET\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_munlock(SB)\n\tRET\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_munlockall(SB)\n\tRET\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pipe2(SB)\n\tRET\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getdents(SB)\n\tRET\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getcwd(SB)\n\tRET\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getresuid(SB)\n\tRET\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getresgid(SB)\n\tRET\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_ioctl(SB)\n\tRET\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sysctl(SB)\n\tRET\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fcntl(SB)\n\tRET\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_ppoll(SB)\n\tRET\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_access(SB)\n\tRET\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_adjtime(SB)\n\tRET\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chdir(SB)\n\tRET\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chflags(SB)\n\tRET\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chmod(SB)\n\tRET\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chown(SB)\n\tRET\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chroot(SB)\n\tRET\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_clock_gettime(SB)\n\tRET\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_close(SB)\n\tRET\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_dup(SB)\n\tRET\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_dup2(SB)\n\tRET\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_dup3(SB)\n\tRET\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_exit(SB)\n\tRET\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_faccessat(SB)\n\tRET\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchdir(SB)\n\tRET\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchflags(SB)\n\tRET\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchmod(SB)\n\tRET\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchmodat(SB)\n\tRET\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchown(SB)\n\tRET\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchownat(SB)\n\tRET\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_flock(SB)\n\tRET\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fpathconf(SB)\n\tRET\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fstat(SB)\n\tRET\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fstatat(SB)\n\tRET\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fstatfs(SB)\n\tRET\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fsync(SB)\n\tRET\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_ftruncate(SB)\n\tRET\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getegid(SB)\n\tRET\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_geteuid(SB)\n\tRET\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getgid(SB)\n\tRET\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpgid(SB)\n\tRET\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpgrp(SB)\n\tRET\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpid(SB)\n\tRET\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getppid(SB)\n\tRET\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpriority(SB)\n\tRET\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getrlimit(SB)\n\tRET\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getrtable(SB)\n\tRET\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getrusage(SB)\n\tRET\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getsid(SB)\n\tRET\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_gettimeofday(SB)\n\tRET\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getuid(SB)\n\tRET\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_issetugid(SB)\n\tRET\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_kill(SB)\n\tRET\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_kqueue(SB)\n\tRET\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_lchown(SB)\n\tRET\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_link(SB)\n\tRET\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_linkat(SB)\n\tRET\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_listen(SB)\n\tRET\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_lstat(SB)\n\tRET\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkdir(SB)\n\tRET\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkdirat(SB)\n\tRET\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkfifo(SB)\n\tRET\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkfifoat(SB)\n\tRET\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mknod(SB)\n\tRET\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mknodat(SB)\n\tRET\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mount(SB)\n\tRET\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_nanosleep(SB)\n\tRET\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_open(SB)\n\tRET\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_openat(SB)\n\tRET\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pathconf(SB)\n\tRET\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pread(SB)\n\tRET\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pwrite(SB)\n\tRET\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_read(SB)\n\tRET\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_readlink(SB)\n\tRET\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_readlinkat(SB)\n\tRET\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_rename(SB)\n\tRET\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_renameat(SB)\n\tRET\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_revoke(SB)\n\tRET\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_rmdir(SB)\n\tRET\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_lseek(SB)\n\tRET\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_select(SB)\n\tRET\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setegid(SB)\n\tRET\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_seteuid(SB)\n\tRET\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setgid(SB)\n\tRET\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setlogin(SB)\n\tRET\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setpgid(SB)\n\tRET\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setpriority(SB)\n\tRET\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setregid(SB)\n\tRET\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setreuid(SB)\n\tRET\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setresgid(SB)\n\tRET\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setresuid(SB)\n\tRET\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setrtable(SB)\n\tRET\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setsid(SB)\n\tRET\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_settimeofday(SB)\n\tRET\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setuid(SB)\n\tRET\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_stat(SB)\n\tRET\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_statfs(SB)\n\tRET\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_symlink(SB)\n\tRET\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_symlinkat(SB)\n\tRET\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sync(SB)\n\tRET\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_truncate(SB)\n\tRET\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_umask(SB)\n\tRET\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unlink(SB)\n\tRET\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unlinkat(SB)\n\tRET\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unmount(SB)\n\tRET\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_write(SB)\n\tRET\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mmap(SB)\n\tRET\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_munmap(SB)\n\tRET\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getfsstat(SB)\n\tRET\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_utimensat(SB)\n\tRET\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pledge(SB)\n\tRET\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unveil(SB)\n\tRET\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,riscv64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_riscv64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && riscv64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s",
    "content": "// go run mkasm.go openbsd riscv64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go",
    "content": "// go run mksyscall_solaris.go -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build solaris && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_pipe pipe \"libc.so\"\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n//go:cgo_import_dynamic libc_getsockname getsockname \"libsocket.so\"\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n//go:cgo_import_dynamic libc_gethostname gethostname \"libc.so\"\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n//go:cgo_import_dynamic libc_futimesat futimesat \"libc.so\"\n//go:cgo_import_dynamic libc_accept accept \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc_acct acct \"libc.so\"\n//go:cgo_import_dynamic libc___makedev __makedev \"libc.so\"\n//go:cgo_import_dynamic libc___major __major \"libc.so\"\n//go:cgo_import_dynamic libc___minor __minor \"libc.so\"\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n//go:cgo_import_dynamic libc_clockgettime clockgettime \"libc.so\"\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n//go:cgo_import_dynamic libc_creat creat \"libc.so\"\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n//go:cgo_import_dynamic libc_fdatasync fdatasync \"libc.so\"\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n//go:cgo_import_dynamic libc_fstatvfs fstatvfs \"libc.so\"\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten \"libsocket.so\"\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n//go:cgo_import_dynamic libc_pause pause \"libc.so\"\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n//go:cgo_import_dynamic libc_sethostname sethostname \"libc.so\"\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n//go:cgo_import_dynamic libc_shutdown shutdown \"libsocket.so\"\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n//go:cgo_import_dynamic libc_statvfs statvfs \"libc.so\"\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n//go:cgo_import_dynamic libc_sysconf sysconf \"libc.so\"\n//go:cgo_import_dynamic libc_times times \"libc.so\"\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n//go:cgo_import_dynamic libc_uname uname \"libc.so\"\n//go:cgo_import_dynamic libc_umount umount \"libc.so\"\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n//go:cgo_import_dynamic libc_ustat ustat \"libc.so\"\n//go:cgo_import_dynamic libc_utime utime \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_bind __xnet_bind \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_connect __xnet_connect \"libsocket.so\"\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n//go:cgo_import_dynamic libc_sendfile sendfile \"libsendfile.so\"\n//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_socket __xnet_socket \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair \"libsocket.so\"\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt \"libsocket.so\"\n//go:cgo_import_dynamic libc_getpeername getpeername \"libsocket.so\"\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libsocket.so\"\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libsocket.so\"\n//go:cgo_import_dynamic libc_getpeerucred getpeerucred \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_get ucred_get \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_getegid ucred_getegid \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_getruid ucred_getruid \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_getpid ucred_getpid \"libc.so\"\n//go:cgo_import_dynamic libc_ucred_free ucred_free \"libc.so\"\n//go:cgo_import_dynamic libc_port_create port_create \"libc.so\"\n//go:cgo_import_dynamic libc_port_associate port_associate \"libc.so\"\n//go:cgo_import_dynamic libc_port_dissociate port_dissociate \"libc.so\"\n//go:cgo_import_dynamic libc_port_get port_get \"libc.so\"\n//go:cgo_import_dynamic libc_port_getn port_getn \"libc.so\"\n//go:cgo_import_dynamic libc_putmsg putmsg \"libc.so\"\n//go:cgo_import_dynamic libc_getmsg getmsg \"libc.so\"\n\n//go:linkname procpipe libc_pipe\n//go:linkname procpipe2 libc_pipe2\n//go:linkname procgetsockname libc_getsockname\n//go:linkname procGetcwd libc_getcwd\n//go:linkname procgetgroups libc_getgroups\n//go:linkname procsetgroups libc_setgroups\n//go:linkname procwait4 libc_wait4\n//go:linkname procgethostname libc_gethostname\n//go:linkname procutimes libc_utimes\n//go:linkname procutimensat libc_utimensat\n//go:linkname procfcntl libc_fcntl\n//go:linkname procfutimesat libc_futimesat\n//go:linkname procaccept libc_accept\n//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg\n//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg\n//go:linkname procacct libc_acct\n//go:linkname proc__makedev libc___makedev\n//go:linkname proc__major libc___major\n//go:linkname proc__minor libc___minor\n//go:linkname procioctl libc_ioctl\n//go:linkname procpoll libc_poll\n//go:linkname procAccess libc_access\n//go:linkname procAdjtime libc_adjtime\n//go:linkname procChdir libc_chdir\n//go:linkname procChmod libc_chmod\n//go:linkname procChown libc_chown\n//go:linkname procChroot libc_chroot\n//go:linkname procClockGettime libc_clockgettime\n//go:linkname procClose libc_close\n//go:linkname procCreat libc_creat\n//go:linkname procDup libc_dup\n//go:linkname procDup2 libc_dup2\n//go:linkname procExit libc_exit\n//go:linkname procFaccessat libc_faccessat\n//go:linkname procFchdir libc_fchdir\n//go:linkname procFchmod libc_fchmod\n//go:linkname procFchmodat libc_fchmodat\n//go:linkname procFchown libc_fchown\n//go:linkname procFchownat libc_fchownat\n//go:linkname procFdatasync libc_fdatasync\n//go:linkname procFlock libc_flock\n//go:linkname procFpathconf libc_fpathconf\n//go:linkname procFstat libc_fstat\n//go:linkname procFstatat libc_fstatat\n//go:linkname procFstatvfs libc_fstatvfs\n//go:linkname procGetdents libc_getdents\n//go:linkname procGetgid libc_getgid\n//go:linkname procGetpid libc_getpid\n//go:linkname procGetpgid libc_getpgid\n//go:linkname procGetpgrp libc_getpgrp\n//go:linkname procGeteuid libc_geteuid\n//go:linkname procGetegid libc_getegid\n//go:linkname procGetppid libc_getppid\n//go:linkname procGetpriority libc_getpriority\n//go:linkname procGetrlimit libc_getrlimit\n//go:linkname procGetrusage libc_getrusage\n//go:linkname procGetsid libc_getsid\n//go:linkname procGettimeofday libc_gettimeofday\n//go:linkname procGetuid libc_getuid\n//go:linkname procKill libc_kill\n//go:linkname procLchown libc_lchown\n//go:linkname procLink libc_link\n//go:linkname proc__xnet_llisten libc___xnet_llisten\n//go:linkname procLstat libc_lstat\n//go:linkname procMadvise libc_madvise\n//go:linkname procMkdir libc_mkdir\n//go:linkname procMkdirat libc_mkdirat\n//go:linkname procMkfifo libc_mkfifo\n//go:linkname procMkfifoat libc_mkfifoat\n//go:linkname procMknod libc_mknod\n//go:linkname procMknodat libc_mknodat\n//go:linkname procMlock libc_mlock\n//go:linkname procMlockall libc_mlockall\n//go:linkname procMprotect libc_mprotect\n//go:linkname procMsync libc_msync\n//go:linkname procMunlock libc_munlock\n//go:linkname procMunlockall libc_munlockall\n//go:linkname procNanosleep libc_nanosleep\n//go:linkname procOpen libc_open\n//go:linkname procOpenat libc_openat\n//go:linkname procPathconf libc_pathconf\n//go:linkname procPause libc_pause\n//go:linkname procpread libc_pread\n//go:linkname procpwrite libc_pwrite\n//go:linkname procread libc_read\n//go:linkname procReadlink libc_readlink\n//go:linkname procRename libc_rename\n//go:linkname procRenameat libc_renameat\n//go:linkname procRmdir libc_rmdir\n//go:linkname proclseek libc_lseek\n//go:linkname procSelect libc_select\n//go:linkname procSetegid libc_setegid\n//go:linkname procSeteuid libc_seteuid\n//go:linkname procSetgid libc_setgid\n//go:linkname procSethostname libc_sethostname\n//go:linkname procSetpgid libc_setpgid\n//go:linkname procSetpriority libc_setpriority\n//go:linkname procSetregid libc_setregid\n//go:linkname procSetreuid libc_setreuid\n//go:linkname procSetsid libc_setsid\n//go:linkname procSetuid libc_setuid\n//go:linkname procshutdown libc_shutdown\n//go:linkname procStat libc_stat\n//go:linkname procStatvfs libc_statvfs\n//go:linkname procSymlink libc_symlink\n//go:linkname procSync libc_sync\n//go:linkname procSysconf libc_sysconf\n//go:linkname procTimes libc_times\n//go:linkname procTruncate libc_truncate\n//go:linkname procFsync libc_fsync\n//go:linkname procFtruncate libc_ftruncate\n//go:linkname procUmask libc_umask\n//go:linkname procUname libc_uname\n//go:linkname procumount libc_umount\n//go:linkname procUnlink libc_unlink\n//go:linkname procUnlinkat libc_unlinkat\n//go:linkname procUstat libc_ustat\n//go:linkname procUtime libc_utime\n//go:linkname proc__xnet_bind libc___xnet_bind\n//go:linkname proc__xnet_connect libc___xnet_connect\n//go:linkname procmmap libc_mmap\n//go:linkname procmunmap libc_munmap\n//go:linkname procsendfile libc_sendfile\n//go:linkname proc__xnet_sendto libc___xnet_sendto\n//go:linkname proc__xnet_socket libc___xnet_socket\n//go:linkname proc__xnet_socketpair libc___xnet_socketpair\n//go:linkname procwrite libc_write\n//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt\n//go:linkname procgetpeername libc_getpeername\n//go:linkname procsetsockopt libc_setsockopt\n//go:linkname procrecvfrom libc_recvfrom\n//go:linkname procgetpeerucred libc_getpeerucred\n//go:linkname procucred_get libc_ucred_get\n//go:linkname procucred_geteuid libc_ucred_geteuid\n//go:linkname procucred_getegid libc_ucred_getegid\n//go:linkname procucred_getruid libc_ucred_getruid\n//go:linkname procucred_getrgid libc_ucred_getrgid\n//go:linkname procucred_getsuid libc_ucred_getsuid\n//go:linkname procucred_getsgid libc_ucred_getsgid\n//go:linkname procucred_getpid libc_ucred_getpid\n//go:linkname procucred_free libc_ucred_free\n//go:linkname procport_create libc_port_create\n//go:linkname procport_associate libc_port_associate\n//go:linkname procport_dissociate libc_port_dissociate\n//go:linkname procport_get libc_port_get\n//go:linkname procport_getn libc_port_getn\n//go:linkname procputmsg libc_putmsg\n//go:linkname procgetmsg libc_getmsg\n\nvar (\n\tprocpipe,\n\tprocpipe2,\n\tprocgetsockname,\n\tprocGetcwd,\n\tprocgetgroups,\n\tprocsetgroups,\n\tprocwait4,\n\tprocgethostname,\n\tprocutimes,\n\tprocutimensat,\n\tprocfcntl,\n\tprocfutimesat,\n\tprocaccept,\n\tproc__xnet_recvmsg,\n\tproc__xnet_sendmsg,\n\tprocacct,\n\tproc__makedev,\n\tproc__major,\n\tproc__minor,\n\tprocioctl,\n\tprocpoll,\n\tprocAccess,\n\tprocAdjtime,\n\tprocChdir,\n\tprocChmod,\n\tprocChown,\n\tprocChroot,\n\tprocClockGettime,\n\tprocClose,\n\tprocCreat,\n\tprocDup,\n\tprocDup2,\n\tprocExit,\n\tprocFaccessat,\n\tprocFchdir,\n\tprocFchmod,\n\tprocFchmodat,\n\tprocFchown,\n\tprocFchownat,\n\tprocFdatasync,\n\tprocFlock,\n\tprocFpathconf,\n\tprocFstat,\n\tprocFstatat,\n\tprocFstatvfs,\n\tprocGetdents,\n\tprocGetgid,\n\tprocGetpid,\n\tprocGetpgid,\n\tprocGetpgrp,\n\tprocGeteuid,\n\tprocGetegid,\n\tprocGetppid,\n\tprocGetpriority,\n\tprocGetrlimit,\n\tprocGetrusage,\n\tprocGetsid,\n\tprocGettimeofday,\n\tprocGetuid,\n\tprocKill,\n\tprocLchown,\n\tprocLink,\n\tproc__xnet_llisten,\n\tprocLstat,\n\tprocMadvise,\n\tprocMkdir,\n\tprocMkdirat,\n\tprocMkfifo,\n\tprocMkfifoat,\n\tprocMknod,\n\tprocMknodat,\n\tprocMlock,\n\tprocMlockall,\n\tprocMprotect,\n\tprocMsync,\n\tprocMunlock,\n\tprocMunlockall,\n\tprocNanosleep,\n\tprocOpen,\n\tprocOpenat,\n\tprocPathconf,\n\tprocPause,\n\tprocpread,\n\tprocpwrite,\n\tprocread,\n\tprocReadlink,\n\tprocRename,\n\tprocRenameat,\n\tprocRmdir,\n\tproclseek,\n\tprocSelect,\n\tprocSetegid,\n\tprocSeteuid,\n\tprocSetgid,\n\tprocSethostname,\n\tprocSetpgid,\n\tprocSetpriority,\n\tprocSetregid,\n\tprocSetreuid,\n\tprocSetsid,\n\tprocSetuid,\n\tprocshutdown,\n\tprocStat,\n\tprocStatvfs,\n\tprocSymlink,\n\tprocSync,\n\tprocSysconf,\n\tprocTimes,\n\tprocTruncate,\n\tprocFsync,\n\tprocFtruncate,\n\tprocUmask,\n\tprocUname,\n\tprocumount,\n\tprocUnlink,\n\tprocUnlinkat,\n\tprocUstat,\n\tprocUtime,\n\tproc__xnet_bind,\n\tproc__xnet_connect,\n\tprocmmap,\n\tprocmunmap,\n\tprocsendfile,\n\tproc__xnet_sendto,\n\tproc__xnet_socket,\n\tproc__xnet_socketpair,\n\tprocwrite,\n\tproc__xnet_getsockopt,\n\tprocgetpeername,\n\tprocsetsockopt,\n\tprocrecvfrom,\n\tprocgetpeerucred,\n\tprocucred_get,\n\tprocucred_geteuid,\n\tprocucred_getegid,\n\tprocucred_getruid,\n\tprocucred_getrgid,\n\tprocucred_getsuid,\n\tprocucred_getsgid,\n\tprocucred_getpid,\n\tprocucred_free,\n\tprocport_create,\n\tprocport_associate,\n\tprocport_dissociate,\n\tprocport_get,\n\tprocport_getn,\n\tprocputmsg,\n\tprocgetmsg syscallFunc\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (n int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int32(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gethostname(buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc acct(path *byte) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __makedev(version int, major uint, minor uint) (val uint64) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0)\n\tval = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __major(version int, dev uint64) (val uint) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)\n\tval = uint(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __minor(version int, dev uint64) (val uint) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)\n\tval = uint(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlRet(fd int, req int, arg uintptr) (ret int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClockGettime)), 2, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs(path string, vfsstat *Statvfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysconf(which int) (n int64, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSysconf)), 1, uintptr(which), 0, 0, 0, 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeerucred(fd uintptr, ucred *uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGet(pid int) (ucred uintptr, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\tucred = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGeteuid(ucred uintptr) (uid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGetegid(ucred uintptr) (gid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGetruid(ucred uintptr) (uid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGetrgid(ucred uintptr) (gid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGetsuid(ucred uintptr) (uid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGetsgid(ucred uintptr) (gid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredGetpid(ucred uintptr) (pid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ucredFree(ucred uintptr) {\n\tsysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_create() (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_dissociate(port int, source int, object uintptr) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procputmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(unsafe.Pointer(flags)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go",
    "content": "// go run mksyscall_zos_s390x.go -o_sysnum zsysnum_zos_s390x.go -o_syscall zsyscall_zos_s390x.go -i_syscall syscall_zos_s390x.go -o_asm zsymaddr_zos_s390x.s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build zos && s390x\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), uintptr(arg))\n\truntime.ExitSyscall()\n\tval = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FLISTXATTR_A<<4, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FlistxattrAddr() *(func(fd int, dest []byte) (sz int, err error))\n\nvar Flistxattr = enter_Flistxattr\n\nfunc enter_Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tfuncref := get_FlistxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FLISTXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Flistxattr\n\t} else {\n\t\t*funcref = error_Flistxattr\n\t}\n\treturn (*funcref)(fd, dest)\n}\n\nfunc error_Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FREMOVEXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FremovexattrAddr() *(func(fd int, attr string) (err error))\n\nvar Fremovexattr = enter_Fremovexattr\n\nfunc enter_Fremovexattr(fd int, attr string) (err error) {\n\tfuncref := get_FremovexattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FREMOVEXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fremovexattr\n\t} else {\n\t\t*funcref = error_Fremovexattr\n\t}\n\treturn (*funcref)(fd, attr)\n}\n\nfunc error_Fremovexattr(fd int, attr string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_READ<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WRITE<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FGETXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FgetxattrAddr() *(func(fd int, attr string, dest []byte) (sz int, err error))\n\nvar Fgetxattr = enter_Fgetxattr\n\nfunc enter_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tfuncref := get_FgetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FGETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fgetxattr\n\t} else {\n\t\t*funcref = error_Fgetxattr\n\t}\n\treturn (*funcref)(fd, attr, dest)\n}\n\nfunc error_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p1 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FSETXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(data)), uintptr(flag))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FsetxattrAddr() *(func(fd int, attr string, data []byte, flag int) (err error))\n\nvar Fsetxattr = enter_Fsetxattr\n\nfunc enter_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) {\n\tfuncref := get_FsetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FSETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fsetxattr\n\t} else {\n\t\t*funcref = error_Fsetxattr\n\t}\n\treturn (*funcref)(fd, attr, data, flag)\n}\n\nfunc error_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCEPT_A<<4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCEPT4_A<<4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_accept4Addr() *(func(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error))\n\nvar accept4 = enter_accept4\n\nfunc enter_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tfuncref := get_accept4Addr()\n\tif funcptrtest(GetZosLibVec()+SYS___ACCEPT4_A<<4, \"\") == 0 {\n\t\t*funcref = impl_accept4\n\t} else {\n\t\t*funcref = error_accept4\n\t}\n\treturn (*funcref)(s, rsa, addrlen, flags)\n}\n\nfunc error_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___BIND_A<<4, uintptr(s), uintptr(addr), uintptr(addrlen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CONNECT_A<<4, uintptr(s), uintptr(addr), uintptr(addrlen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETGROUPS<<4, uintptr(n), uintptr(unsafe.Pointer(list)))\n\tnn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETGROUPS<<4, uintptr(n), uintptr(unsafe.Pointer(list)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETSOCKOPT<<4, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETSOCKOPT<<4, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SOCKET<<4, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SOCKETPAIR<<4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETPEERNAME_A<<4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETSOCKNAME_A<<4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___REMOVEXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_RemovexattrAddr() *(func(path string, attr string) (err error))\n\nvar Removexattr = enter_Removexattr\n\nfunc enter_Removexattr(path string, attr string) (err error) {\n\tfuncref := get_RemovexattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___REMOVEXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Removexattr\n\t} else {\n\t\t*funcref = error_Removexattr\n\t}\n\treturn (*funcref)(path, attr)\n}\n\nfunc error_Removexattr(path string, attr string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RECVFROM_A<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SENDTO_A<<4, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RECVMSG_A<<4, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SENDMSG_A<<4, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MMAP<<4, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\truntime.ExitSyscall()\n\tret = uintptr(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MUNMAP<<4, uintptr(addr), uintptr(length))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_IOCTL<<4, uintptr(fd), uintptr(req), uintptr(arg))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_IOCTL<<4, uintptr(fd), uintptr(req), uintptr(arg))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMAT<<4, uintptr(id), uintptr(addr), uintptr(flag))\n\truntime.ExitSyscall()\n\tret = uintptr(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMCTL64<<4, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\truntime.ExitSyscall()\n\tresult = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMDT<<4, uintptr(addr))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMGET<<4, uintptr(key), uintptr(size), uintptr(flag))\n\truntime.ExitSyscall()\n\tid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCESS_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHDIR_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHOWN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHMOD_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CREAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP<<4, uintptr(oldfd))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP2<<4, uintptr(oldfd), uintptr(newfd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Dup3(oldfd int, newfd int, flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP3<<4, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_Dup3Addr() *(func(oldfd int, newfd int, flags int) (err error))\n\nvar Dup3 = enter_Dup3\n\nfunc enter_Dup3(oldfd int, newfd int, flags int) (err error) {\n\tfuncref := get_Dup3Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_DUP3<<4, \"\") == 0 {\n\t\t*funcref = impl_Dup3\n\t} else {\n\t\t*funcref = error_Dup3\n\t}\n\treturn (*funcref)(oldfd, newfd, flags)\n}\n\nfunc error_Dup3(oldfd int, newfd int, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Dirfd(dirp uintptr) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DIRFD<<4, uintptr(dirp))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_DirfdAddr() *(func(dirp uintptr) (fd int, err error))\n\nvar Dirfd = enter_Dirfd\n\nfunc enter_Dirfd(dirp uintptr) (fd int, err error) {\n\tfuncref := get_DirfdAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_DIRFD<<4, \"\") == 0 {\n\t\t*funcref = impl_Dirfd\n\t} else {\n\t\t*funcref = error_Dirfd\n\t}\n\treturn (*funcref)(dirp)\n}\n\nfunc error_Dirfd(dirp uintptr) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollCreate(size int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CREATE<<4, uintptr(size))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollCreateAddr() *(func(size int) (fd int, err error))\n\nvar EpollCreate = enter_EpollCreate\n\nfunc enter_EpollCreate(size int) (fd int, err error) {\n\tfuncref := get_EpollCreateAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_CREATE<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollCreate\n\t} else {\n\t\t*funcref = error_EpollCreate\n\t}\n\treturn (*funcref)(size)\n}\n\nfunc error_EpollCreate(size int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollCreate1(flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CREATE1<<4, uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollCreate1Addr() *(func(flags int) (fd int, err error))\n\nvar EpollCreate1 = enter_EpollCreate1\n\nfunc enter_EpollCreate1(flags int) (fd int, err error) {\n\tfuncref := get_EpollCreate1Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_CREATE1<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollCreate1\n\t} else {\n\t\t*funcref = error_EpollCreate1\n\t}\n\treturn (*funcref)(flags)\n}\n\nfunc error_EpollCreate1(flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CTL<<4, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollCtlAddr() *(func(epfd int, op int, fd int, event *EpollEvent) (err error))\n\nvar EpollCtl = enter_EpollCtl\n\nfunc enter_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\tfuncref := get_EpollCtlAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_CTL<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollCtl\n\t} else {\n\t\t*funcref = error_EpollCtl\n\t}\n\treturn (*funcref)(epfd, op, fd, event)\n}\n\nfunc error_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_PWAIT<<4, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), uintptr(unsafe.Pointer(sigmask)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollPwaitAddr() *(func(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error))\n\nvar EpollPwait = enter_EpollPwait\n\nfunc enter_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) {\n\tfuncref := get_EpollPwaitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_PWAIT<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollPwait\n\t} else {\n\t\t*funcref = error_EpollPwait\n\t}\n\treturn (*funcref)(epfd, events, msec, sigmask)\n}\n\nfunc error_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_WAIT<<4, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollWaitAddr() *(func(epfd int, events []EpollEvent, msec int) (n int, err error))\n\nvar EpollWait = enter_EpollWait\n\nfunc enter_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tfuncref := get_EpollWaitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_WAIT<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollWait\n\t} else {\n\t\t*funcref = error_EpollWait\n\t}\n\treturn (*funcref)(epfd, events, msec)\n}\n\nfunc error_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Errno2() (er2 int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS___ERRNO2<<4)\n\truntime.ExitSyscall()\n\ter2 = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Eventfd(initval uint, flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EVENTFD<<4, uintptr(initval), uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EventfdAddr() *(func(initval uint, flags int) (fd int, err error))\n\nvar Eventfd = enter_Eventfd\n\nfunc enter_Eventfd(initval uint, flags int) (fd int, err error) {\n\tfuncref := get_EventfdAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EVENTFD<<4, \"\") == 0 {\n\t\t*funcref = impl_Eventfd\n\t} else {\n\t\t*funcref = error_Eventfd\n\t}\n\treturn (*funcref)(initval, flags)\n}\n\nfunc error_Eventfd(initval uint, flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\truntime.EnterSyscall()\n\tCallLeFuncWithErr(GetZosLibVec()+SYS_EXIT<<4, uintptr(code))\n\truntime.ExitSyscall()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FACCESSAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FaccessatAddr() *(func(dirfd int, path string, mode uint32, flags int) (err error))\n\nvar Faccessat = enter_Faccessat\n\nfunc enter_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tfuncref := get_FaccessatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FACCESSAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Faccessat\n\t} else {\n\t\t*funcref = error_Faccessat\n\t}\n\treturn (*funcref)(dirfd, path, mode, flags)\n}\n\nfunc error_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHDIR<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHMOD<<4, uintptr(fd), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FCHMODAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FchmodatAddr() *(func(dirfd int, path string, mode uint32, flags int) (err error))\n\nvar Fchmodat = enter_Fchmodat\n\nfunc enter_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tfuncref := get_FchmodatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FCHMODAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fchmodat\n\t} else {\n\t\t*funcref = error_Fchmodat\n\t}\n\treturn (*funcref)(dirfd, path, mode, flags)\n}\n\nfunc error_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHOWN<<4, uintptr(fd), uintptr(uid), uintptr(gid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FCHOWNAT_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FchownatAddr() *(func(fd int, path string, uid int, gid int, flags int) (err error))\n\nvar Fchownat = enter_Fchownat\n\nfunc enter_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) {\n\tfuncref := get_FchownatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FCHOWNAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fchownat\n\t} else {\n\t\t*funcref = error_Fchownat\n\t}\n\treturn (*funcref)(fd, path, uid, gid, flags)\n}\n\nfunc error_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), uintptr(arg))\n\truntime.ExitSyscall()\n\tretval = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fdatasync(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FDATASYNC<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FdatasyncAddr() *(func(fd int) (err error))\n\nvar Fdatasync = enter_Fdatasync\n\nfunc enter_Fdatasync(fd int) (err error) {\n\tfuncref := get_FdatasyncAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_FDATASYNC<<4, \"\") == 0 {\n\t\t*funcref = impl_Fdatasync\n\t} else {\n\t\t*funcref = error_Fdatasync\n\t}\n\treturn (*funcref)(fd)\n}\n\nfunc error_Fdatasync(fd int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_LE_t) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTAT<<4, uintptr(fd), uintptr(unsafe.Pointer(stat)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FSTATAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_fstatatAddr() *(func(dirfd int, path string, stat *Stat_LE_t, flags int) (err error))\n\nvar fstatat = enter_fstatat\n\nfunc enter_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) {\n\tfuncref := get_fstatatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FSTATAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_fstatat\n\t} else {\n\t\t*funcref = error_fstatat\n\t}\n\treturn (*funcref)(dirfd, path, stat, flags)\n}\n\nfunc error_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LGETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LgetxattrAddr() *(func(link string, attr string, dest []byte) (sz int, err error))\n\nvar Lgetxattr = enter_Lgetxattr\n\nfunc enter_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\tfuncref := get_LgetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LGETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lgetxattr\n\t} else {\n\t\t*funcref = error_Lgetxattr\n\t}\n\treturn (*funcref)(link, attr, dest)\n}\n\nfunc error_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LSETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LsetxattrAddr() *(func(path string, attr string, data []byte, flags int) (err error))\n\nvar Lsetxattr = enter_Lsetxattr\n\nfunc enter_Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tfuncref := get_LsetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LSETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lsetxattr\n\t} else {\n\t\t*funcref = error_Lsetxattr\n\t}\n\treturn (*funcref)(path, attr, data, flags)\n}\n\nfunc error_Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fstatfs(fd int, buf *Statfs_t) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTATFS<<4, uintptr(fd), uintptr(unsafe.Pointer(buf)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FstatfsAddr() *(func(fd int, buf *Statfs_t) (err error))\n\nvar Fstatfs = enter_Fstatfs\n\nfunc enter_Fstatfs(fd int, buf *Statfs_t) (err error) {\n\tfuncref := get_FstatfsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_FSTATFS<<4, \"\") == 0 {\n\t\t*funcref = impl_Fstatfs\n\t} else {\n\t\t*funcref = error_Fstatfs\n\t}\n\treturn (*funcref)(fd, buf)\n}\n\nfunc error_Fstatfs(fd int, buf *Statfs_t) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs(fd int, stat *Statvfs_t) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTATVFS<<4, uintptr(fd), uintptr(unsafe.Pointer(stat)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSYNC<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Futimes(fd int, tv []Timeval) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(tv) > 0 {\n\t\t_p0 = unsafe.Pointer(&tv[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FUTIMES<<4, uintptr(fd), uintptr(_p0), uintptr(len(tv)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FutimesAddr() *(func(fd int, tv []Timeval) (err error))\n\nvar Futimes = enter_Futimes\n\nfunc enter_Futimes(fd int, tv []Timeval) (err error) {\n\tfuncref := get_FutimesAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_FUTIMES<<4, \"\") == 0 {\n\t\t*funcref = impl_Futimes\n\t} else {\n\t\t*funcref = error_Futimes\n\t}\n\treturn (*funcref)(fd, tv)\n}\n\nfunc error_Futimes(fd int, tv []Timeval) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Futimesat(dirfd int, path string, tv []Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(tv) > 0 {\n\t\t_p1 = unsafe.Pointer(&tv[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FUTIMESAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(tv)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FutimesatAddr() *(func(dirfd int, path string, tv []Timeval) (err error))\n\nvar Futimesat = enter_Futimesat\n\nfunc enter_Futimesat(dirfd int, path string, tv []Timeval) (err error) {\n\tfuncref := get_FutimesatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FUTIMESAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Futimesat\n\t} else {\n\t\t*funcref = error_Futimesat\n\t}\n\treturn (*funcref)(dirfd, path, tv)\n}\n\nfunc error_Futimesat(dirfd int, path string, tv []Timeval) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FTRUNCATE<<4, uintptr(fd), uintptr(length))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRANDOM<<4, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_GetrandomAddr() *(func(buf []byte, flags int) (n int, err error))\n\nvar Getrandom = enter_Getrandom\n\nfunc enter_Getrandom(buf []byte, flags int) (n int, err error) {\n\tfuncref := get_GetrandomAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_GETRANDOM<<4, \"\") == 0 {\n\t\t*funcref = impl_Getrandom\n\t} else {\n\t\t*funcref = error_Getrandom\n\t}\n\treturn (*funcref)(buf, flags)\n}\n\nfunc error_Getrandom(buf []byte, flags int) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyInit() (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec() + SYS_INOTIFY_INIT<<4)\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyInitAddr() *(func() (fd int, err error))\n\nvar InotifyInit = enter_InotifyInit\n\nfunc enter_InotifyInit() (fd int, err error) {\n\tfuncref := get_InotifyInitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_INOTIFY_INIT<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyInit\n\t} else {\n\t\t*funcref = error_InotifyInit\n\t}\n\treturn (*funcref)()\n}\n\nfunc error_InotifyInit() (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyInit1(flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_INOTIFY_INIT1<<4, uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyInit1Addr() *(func(flags int) (fd int, err error))\n\nvar InotifyInit1 = enter_InotifyInit1\n\nfunc enter_InotifyInit1(flags int) (fd int, err error) {\n\tfuncref := get_InotifyInit1Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_INOTIFY_INIT1<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyInit1\n\t} else {\n\t\t*funcref = error_InotifyInit1\n\t}\n\treturn (*funcref)(flags)\n}\n\nfunc error_InotifyInit1(flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___INOTIFY_ADD_WATCH_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\truntime.ExitSyscall()\n\twatchdesc = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyAddWatchAddr() *(func(fd int, pathname string, mask uint32) (watchdesc int, err error))\n\nvar InotifyAddWatch = enter_InotifyAddWatch\n\nfunc enter_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tfuncref := get_InotifyAddWatchAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___INOTIFY_ADD_WATCH_A<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyAddWatch\n\t} else {\n\t\t*funcref = error_InotifyAddWatch\n\t}\n\treturn (*funcref)(fd, pathname, mask)\n}\n\nfunc error_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\twatchdesc = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_INOTIFY_RM_WATCH<<4, uintptr(fd), uintptr(watchdesc))\n\truntime.ExitSyscall()\n\tsuccess = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyRmWatchAddr() *(func(fd int, watchdesc uint32) (success int, err error))\n\nvar InotifyRmWatch = enter_InotifyRmWatch\n\nfunc enter_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tfuncref := get_InotifyRmWatchAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_INOTIFY_RM_WATCH<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyRmWatch\n\t} else {\n\t\t*funcref = error_InotifyRmWatch\n\t}\n\treturn (*funcref)(fd, watchdesc)\n}\n\nfunc error_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tsuccess = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LISTXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_ListxattrAddr() *(func(path string, dest []byte) (sz int, err error))\n\nvar Listxattr = enter_Listxattr\n\nfunc enter_Listxattr(path string, dest []byte) (sz int, err error) {\n\tfuncref := get_ListxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LISTXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Listxattr\n\t} else {\n\t\t*funcref = error_Listxattr\n\t}\n\treturn (*funcref)(path, dest)\n}\n\nfunc error_Listxattr(path string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LLISTXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LlistxattrAddr() *(func(path string, dest []byte) (sz int, err error))\n\nvar Llistxattr = enter_Llistxattr\n\nfunc enter_Llistxattr(path string, dest []byte) (sz int, err error) {\n\tfuncref := get_LlistxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LLISTXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Llistxattr\n\t} else {\n\t\t*funcref = error_Llistxattr\n\t}\n\treturn (*funcref)(path, dest)\n}\n\nfunc error_Llistxattr(path string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LREMOVEXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LremovexattrAddr() *(func(path string, attr string) (err error))\n\nvar Lremovexattr = enter_Lremovexattr\n\nfunc enter_Lremovexattr(path string, attr string) (err error) {\n\tfuncref := get_LremovexattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LREMOVEXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lremovexattr\n\t} else {\n\t\t*funcref = error_Lremovexattr\n\t}\n\treturn (*funcref)(path, attr)\n}\n\nfunc error_Lremovexattr(path string, attr string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lutimes(path string, tv []Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(tv) > 0 {\n\t\t_p1 = unsafe.Pointer(&tv[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LUTIMES_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(tv)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LutimesAddr() *(func(path string, tv []Timeval) (err error))\n\nvar Lutimes = enter_Lutimes\n\nfunc enter_Lutimes(path string, tv []Timeval) (err error) {\n\tfuncref := get_LutimesAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LUTIMES_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lutimes\n\t} else {\n\t\t*funcref = error_Lutimes\n\t}\n\treturn (*funcref)(path, tv)\n}\n\nfunc error_Lutimes(path string, tv []Timeval) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MPROTECT<<4, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MSYNC<<4, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Console2(cmsg *ConsMsg2, modstr *byte, concmd *uint32) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CONSOLE2<<4, uintptr(unsafe.Pointer(cmsg)), uintptr(unsafe.Pointer(modstr)), uintptr(unsafe.Pointer(concmd)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(fds) > 0 {\n\t\t_p0 = unsafe.Pointer(&fds[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_POLL<<4, uintptr(_p0), uintptr(len(fds)), uintptr(timeout))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readdir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READDIR_R_A<<4, uintptr(dirp), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___STATFS_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_StatfsAddr() *(func(path string, buf *Statfs_t) (err error))\n\nvar Statfs = enter_Statfs\n\nfunc enter_Statfs(path string, buf *Statfs_t) (err error) {\n\tfuncref := get_StatfsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___STATFS_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Statfs\n\t} else {\n\t\t*funcref = error_Statfs\n\t}\n\treturn (*funcref)(path, buf)\n}\n\nfunc error_Statfs(path string, buf *Statfs_t) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Syncfs(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SYNCFS<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SyncfsAddr() *(func(fd int) (err error))\n\nvar Syncfs = enter_Syncfs\n\nfunc enter_Syncfs(fd int) (err error) {\n\tfuncref := get_SyncfsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_SYNCFS<<4, \"\") == 0 {\n\t\t*funcref = impl_Syncfs\n\t} else {\n\t\t*funcref = error_Syncfs\n\t}\n\treturn (*funcref)(fd)\n}\n\nfunc error_Syncfs(fd int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TIMES<<4, uintptr(unsafe.Pointer(tms)))\n\truntime.ExitSyscall()\n\tticks = uintptr(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc W_Getmntent(buff *byte, size int) (lastsys int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_W_GETMNTENT<<4, uintptr(unsafe.Pointer(buff)), uintptr(size))\n\truntime.ExitSyscall()\n\tlastsys = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc W_Getmntent_A(buff *byte, size int) (lastsys int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___W_GETMNTENT_A<<4, uintptr(unsafe.Pointer(buff)), uintptr(size))\n\truntime.ExitSyscall()\n\tlastsys = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(filesystem)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p3 *byte\n\t_p3, err = BytePtrFromString(parm)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MOUNT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(mtm), uintptr(parmlen), uintptr(unsafe.Pointer(_p3)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unmount_LE(filesystem string, mtm int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(filesystem)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UMOUNT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mtm))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHROOT_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SELECT<<4, uintptr(nmsgsfds), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)))\n\truntime.ExitSyscall()\n\tret = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_____OSNAME_A<<4, uintptr(unsafe.Pointer(buf)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Unshare(flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_UNSHARE<<4, uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_UnshareAddr() *(func(flags int) (err error))\n\nvar Unshare = enter_Unshare\n\nfunc enter_Unshare(flags int) (err error) {\n\tfuncref := get_UnshareAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_UNSHARE<<4, \"\") == 0 {\n\t\t*funcref = impl_Unshare\n\t} else {\n\t\t*funcref = error_Unshare\n\t}\n\treturn (*funcref)(flags)\n}\n\nfunc error_Unshare(flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gethostname(buf []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETHOSTNAME_A<<4, uintptr(_p0), uintptr(len(buf)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETGID<<4)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETPID<<4)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETPGID<<4, uintptr(pid))\n\tpgid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (pid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETPPID<<4)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETPRIORITY<<4, uintptr(which), uintptr(who))\n\truntime.ExitSyscall()\n\tprio = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRLIMIT<<4, uintptr(resource), uintptr(unsafe.Pointer(rlim)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrusage(who int, rusage *rusage_zos) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRUSAGE<<4, uintptr(who), uintptr(unsafe.Pointer(rusage)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETEGID<<4)\n\truntime.ExitSyscall()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETEUID<<4)\n\truntime.ExitSyscall()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETSID<<4, uintptr(pid))\n\tsid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETUID<<4)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_KILL<<4, uintptr(pid), uintptr(sig))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LCHOWN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LINK_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldPath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newPath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LINKAT_A<<4, uintptr(oldDirFd), uintptr(unsafe.Pointer(_p0)), uintptr(newDirFd), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LinkatAddr() *(func(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error))\n\nvar Linkat = enter_Linkat\n\nfunc enter_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) {\n\tfuncref := get_LinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Linkat\n\t} else {\n\t\t*funcref = error_Linkat\n\t}\n\treturn (*funcref)(oldDirFd, oldPath, newDirFd, newPath, flags)\n}\n\nfunc error_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_LISTEN<<4, uintptr(s), uintptr(n))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_LE_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LSTAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKDIR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKDIRAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MkdiratAddr() *(func(dirfd int, path string, mode uint32) (err error))\n\nvar Mkdirat = enter_Mkdirat\n\nfunc enter_Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tfuncref := get_MkdiratAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___MKDIRAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Mkdirat\n\t} else {\n\t\t*funcref = error_Mkdirat\n\t}\n\treturn (*funcref)(dirfd, path, mode)\n}\n\nfunc error_Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKFIFO_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKNOD_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKNODAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MknodatAddr() *(func(dirfd int, path string, mode uint32, dev int) (err error))\n\nvar Mknodat = enter_Mknodat\n\nfunc enter_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tfuncref := get_MknodatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___MKNODAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Mknodat\n\t} else {\n\t\t*funcref = error_Mknodat\n\t}\n\treturn (*funcref)(dirfd, path, mode, dev)\n}\n\nfunc error_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_PivotRoot(newroot string, oldroot string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(oldroot)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___PIVOT_ROOT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_PivotRootAddr() *(func(newroot string, oldroot string) (err error))\n\nvar PivotRoot = enter_PivotRoot\n\nfunc enter_PivotRoot(newroot string, oldroot string) (err error) {\n\tfuncref := get_PivotRootAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___PIVOT_ROOT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_PivotRoot\n\t} else {\n\t\t*funcref = error_PivotRoot\n\t}\n\treturn (*funcref)(newroot, oldroot)\n}\n\nfunc error_PivotRoot(newroot string, oldroot string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PREAD<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PWRITE<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___PRCTL_A<<4, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_PrctlAddr() *(func(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error))\n\nvar Prctl = enter_Prctl\n\nfunc enter_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\tfuncref := get_PrctlAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___PRCTL_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Prctl\n\t} else {\n\t\t*funcref = error_Prctl\n\t}\n\treturn (*funcref)(option, arg2, arg3, arg4, arg5)\n}\n\nfunc error_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PRLIMIT<<4, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_PrlimitAddr() *(func(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error))\n\nvar Prlimit = enter_Prlimit\n\nfunc enter_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\tfuncref := get_PrlimitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_PRLIMIT<<4, \"\") == 0 {\n\t\t*funcref = impl_Prlimit\n\t} else {\n\t\t*funcref = error_Prlimit\n\t}\n\treturn (*funcref)(pid, resource, newlimit, old)\n}\n\nfunc error_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAME_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAMEAT_A<<4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_RenameatAddr() *(func(olddirfd int, oldpath string, newdirfd int, newpath string) (err error))\n\nvar Renameat = enter_Renameat\n\nfunc enter_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tfuncref := get_RenameatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___RENAMEAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Renameat\n\t} else {\n\t\t*funcref = error_Renameat\n\t}\n\treturn (*funcref)(olddirfd, oldpath, newdirfd, newpath)\n}\n\nfunc error_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAMEAT2_A<<4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_Renameat2Addr() *(func(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error))\n\nvar Renameat2 = enter_Renameat2\n\nfunc enter_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tfuncref := get_Renameat2Addr()\n\tif funcptrtest(GetZosLibVec()+SYS___RENAMEAT2_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Renameat2\n\t} else {\n\t\t*funcref = error_Renameat2\n\t}\n\treturn (*funcref)(olddirfd, oldpath, newdirfd, newpath, flags)\n}\n\nfunc error_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RMDIR_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_LSEEK<<4, uintptr(fd), uintptr(offset), uintptr(whence))\n\truntime.ExitSyscall()\n\toff = int64(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETEGID<<4, uintptr(egid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETEUID<<4, uintptr(euid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SETHOSTNAME_A<<4, uintptr(_p0), uintptr(len(p)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SethostnameAddr() *(func(p []byte) (err error))\n\nvar Sethostname = enter_Sethostname\n\nfunc enter_Sethostname(p []byte) (err error) {\n\tfuncref := get_SethostnameAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___SETHOSTNAME_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Sethostname\n\t} else {\n\t\t*funcref = error_Sethostname\n\t}\n\treturn (*funcref)(p)\n}\n\nfunc error_Sethostname(p []byte) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Setns(fd int, nstype int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETNS<<4, uintptr(fd), uintptr(nstype))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SetnsAddr() *(func(fd int, nstype int) (err error))\n\nvar Setns = enter_Setns\n\nfunc enter_Setns(fd int, nstype int) (err error) {\n\tfuncref := get_SetnsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_SETNS<<4, \"\") == 0 {\n\t\t*funcref = impl_Setns\n\t} else {\n\t\t*funcref = error_Setns\n\t}\n\treturn (*funcref)(fd, nstype)\n}\n\nfunc error_Setns(fd int, nstype int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETPRIORITY<<4, uintptr(which), uintptr(who), uintptr(prio))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETPGID<<4, uintptr(pid), uintptr(pgid))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, lim *Rlimit) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETRLIMIT<<4, uintptr(resource), uintptr(unsafe.Pointer(lim)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETREGID<<4, uintptr(rgid), uintptr(egid))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETREUID<<4, uintptr(ruid), uintptr(euid))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec() + SYS_SETSID<<4)\n\tpid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETUID<<4, uintptr(uid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETGID<<4, uintptr(uid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHUTDOWN<<4, uintptr(fd), uintptr(how))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statLE *Stat_LE_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___STAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statLE)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SYMLINK_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Symlinkat(oldPath string, dirfd int, newPath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldPath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newPath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SYMLINKAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(dirfd), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SymlinkatAddr() *(func(oldPath string, dirfd int, newPath string) (err error))\n\nvar Symlinkat = enter_Symlinkat\n\nfunc enter_Symlinkat(oldPath string, dirfd int, newPath string) (err error) {\n\tfuncref := get_SymlinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___SYMLINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Symlinkat\n\t} else {\n\t\t*funcref = error_Symlinkat\n\t}\n\treturn (*funcref)(oldPath, dirfd, newPath)\n}\n\nfunc error_Symlinkat(oldPath string, dirfd int, newPath string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\truntime.EnterSyscall()\n\tCallLeFuncWithErr(GetZosLibVec() + SYS_SYNC<<4)\n\truntime.ExitSyscall()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___TRUNCATE_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(length))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tcgetattr(fildes int, termptr *Termios) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TCGETATTR<<4, uintptr(fildes), uintptr(unsafe.Pointer(termptr)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tcsetattr(fildes int, when int, termptr *Termios) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TCSETATTR<<4, uintptr(fildes), uintptr(when), uintptr(unsafe.Pointer(termptr)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec()+SYS_UMASK<<4, uintptr(mask))\n\truntime.ExitSyscall()\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UNLINK_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UNLINKAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_UnlinkatAddr() *(func(dirfd int, path string, flags int) (err error))\n\nvar Unlinkat = enter_Unlinkat\n\nfunc enter_Unlinkat(dirfd int, path string, flags int) (err error) {\n\tfuncref := get_UnlinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___UNLINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Unlinkat\n\t} else {\n\t\t*funcref = error_Unlinkat\n\t}\n\treturn (*funcref)(dirfd, path, flags)\n}\n\nfunc error_Unlinkat(dirfd int, path string, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, utim *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIME_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(utim)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPEN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPENAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_openatAddr() *(func(dirfd int, path string, flags int, mode uint32) (fd int, err error))\n\nvar openat = enter_openat\n\nfunc enter_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tfuncref := get_openatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___OPENAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_openat\n\t} else {\n\t\t*funcref = error_openat\n\t}\n\treturn (*funcref)(dirfd, path, flags, mode)\n}\n\nfunc error_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPENAT2_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_openat2Addr() *(func(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error))\n\nvar openat2 = enter_openat2\n\nfunc enter_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tfuncref := get_openat2Addr()\n\tif funcptrtest(GetZosLibVec()+SYS___OPENAT2_A<<4, \"\") == 0 {\n\t\t*funcref = impl_openat2\n\t} else {\n\t\t*funcref = error_openat2\n\t}\n\treturn (*funcref)(dirfd, path, open_how, size)\n}\n\nfunc error_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc remove(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_REMOVE<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc waitid(idType int, id int, info *Siginfo, options int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAITID<<4, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAITPID<<4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options))\n\truntime.ExitSyscall()\n\twpid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *timeval_zos) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETTIMEOFDAY<<4, uintptr(unsafe.Pointer(tv)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PIPE<<4, uintptr(unsafe.Pointer(p)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIMES_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIMENSAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(ts)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_utimensatAddr() *(func(dirfd int, path string, ts *[2]Timespec, flags int) (err error))\n\nvar utimensat = enter_utimensat\n\nfunc enter_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) {\n\tfuncref := get_utimensatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___UTIMENSAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_utimensat\n\t} else {\n\t\t*funcref = error_utimensat\n\t}\n\treturn (*funcref)(dirfd, path, ts, flags)\n}\n\nfunc error_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Posix_openpt(oflag int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_POSIX_OPENPT<<4, uintptr(oflag))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Grantpt(fildes int) (rc int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GRANTPT<<4, uintptr(fildes))\n\truntime.ExitSyscall()\n\trc = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlockpt(fildes int) (rc int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_UNLOCKPT<<4, uintptr(fildes))\n\truntime.ExitSyscall()\n\trc = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build amd64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build arm && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build arm64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build mips64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && darwin\n\npackage unix\n\n// Deprecated: Use libSystem wrappers instead of direct syscalls.\nconst (\n\tSYS_SYSCALL                        = 0\n\tSYS_EXIT                           = 1\n\tSYS_FORK                           = 2\n\tSYS_READ                           = 3\n\tSYS_WRITE                          = 4\n\tSYS_OPEN                           = 5\n\tSYS_CLOSE                          = 6\n\tSYS_WAIT4                          = 7\n\tSYS_LINK                           = 9\n\tSYS_UNLINK                         = 10\n\tSYS_CHDIR                          = 12\n\tSYS_FCHDIR                         = 13\n\tSYS_MKNOD                          = 14\n\tSYS_CHMOD                          = 15\n\tSYS_CHOWN                          = 16\n\tSYS_GETFSSTAT                      = 18\n\tSYS_GETPID                         = 20\n\tSYS_SETUID                         = 23\n\tSYS_GETUID                         = 24\n\tSYS_GETEUID                        = 25\n\tSYS_PTRACE                         = 26\n\tSYS_RECVMSG                        = 27\n\tSYS_SENDMSG                        = 28\n\tSYS_RECVFROM                       = 29\n\tSYS_ACCEPT                         = 30\n\tSYS_GETPEERNAME                    = 31\n\tSYS_GETSOCKNAME                    = 32\n\tSYS_ACCESS                         = 33\n\tSYS_CHFLAGS                        = 34\n\tSYS_FCHFLAGS                       = 35\n\tSYS_SYNC                           = 36\n\tSYS_KILL                           = 37\n\tSYS_GETPPID                        = 39\n\tSYS_DUP                            = 41\n\tSYS_PIPE                           = 42\n\tSYS_GETEGID                        = 43\n\tSYS_SIGACTION                      = 46\n\tSYS_GETGID                         = 47\n\tSYS_SIGPROCMASK                    = 48\n\tSYS_GETLOGIN                       = 49\n\tSYS_SETLOGIN                       = 50\n\tSYS_ACCT                           = 51\n\tSYS_SIGPENDING                     = 52\n\tSYS_SIGALTSTACK                    = 53\n\tSYS_IOCTL                          = 54\n\tSYS_REBOOT                         = 55\n\tSYS_REVOKE                         = 56\n\tSYS_SYMLINK                        = 57\n\tSYS_READLINK                       = 58\n\tSYS_EXECVE                         = 59\n\tSYS_UMASK                          = 60\n\tSYS_CHROOT                         = 61\n\tSYS_MSYNC                          = 65\n\tSYS_VFORK                          = 66\n\tSYS_MUNMAP                         = 73\n\tSYS_MPROTECT                       = 74\n\tSYS_MADVISE                        = 75\n\tSYS_MINCORE                        = 78\n\tSYS_GETGROUPS                      = 79\n\tSYS_SETGROUPS                      = 80\n\tSYS_GETPGRP                        = 81\n\tSYS_SETPGID                        = 82\n\tSYS_SETITIMER                      = 83\n\tSYS_SWAPON                         = 85\n\tSYS_GETITIMER                      = 86\n\tSYS_GETDTABLESIZE                  = 89\n\tSYS_DUP2                           = 90\n\tSYS_FCNTL                          = 92\n\tSYS_SELECT                         = 93\n\tSYS_FSYNC                          = 95\n\tSYS_SETPRIORITY                    = 96\n\tSYS_SOCKET                         = 97\n\tSYS_CONNECT                        = 98\n\tSYS_GETPRIORITY                    = 100\n\tSYS_BIND                           = 104\n\tSYS_SETSOCKOPT                     = 105\n\tSYS_LISTEN                         = 106\n\tSYS_SIGSUSPEND                     = 111\n\tSYS_GETTIMEOFDAY                   = 116\n\tSYS_GETRUSAGE                      = 117\n\tSYS_GETSOCKOPT                     = 118\n\tSYS_READV                          = 120\n\tSYS_WRITEV                         = 121\n\tSYS_SETTIMEOFDAY                   = 122\n\tSYS_FCHOWN                         = 123\n\tSYS_FCHMOD                         = 124\n\tSYS_SETREUID                       = 126\n\tSYS_SETREGID                       = 127\n\tSYS_RENAME                         = 128\n\tSYS_FLOCK                          = 131\n\tSYS_MKFIFO                         = 132\n\tSYS_SENDTO                         = 133\n\tSYS_SHUTDOWN                       = 134\n\tSYS_SOCKETPAIR                     = 135\n\tSYS_MKDIR                          = 136\n\tSYS_RMDIR                          = 137\n\tSYS_UTIMES                         = 138\n\tSYS_FUTIMES                        = 139\n\tSYS_ADJTIME                        = 140\n\tSYS_GETHOSTUUID                    = 142\n\tSYS_SETSID                         = 147\n\tSYS_GETPGID                        = 151\n\tSYS_SETPRIVEXEC                    = 152\n\tSYS_PREAD                          = 153\n\tSYS_PWRITE                         = 154\n\tSYS_NFSSVC                         = 155\n\tSYS_STATFS                         = 157\n\tSYS_FSTATFS                        = 158\n\tSYS_UNMOUNT                        = 159\n\tSYS_GETFH                          = 161\n\tSYS_QUOTACTL                       = 165\n\tSYS_MOUNT                          = 167\n\tSYS_CSOPS                          = 169\n\tSYS_CSOPS_AUDITTOKEN               = 170\n\tSYS_WAITID                         = 173\n\tSYS_KDEBUG_TYPEFILTER              = 177\n\tSYS_KDEBUG_TRACE_STRING            = 178\n\tSYS_KDEBUG_TRACE64                 = 179\n\tSYS_KDEBUG_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_THREAD_SELFCOUNTS              = 186\n\tSYS_FDATASYNC                      = 187\n\tSYS_STAT                           = 188\n\tSYS_FSTAT                          = 189\n\tSYS_LSTAT                          = 190\n\tSYS_PATHCONF                       = 191\n\tSYS_FPATHCONF                      = 192\n\tSYS_GETRLIMIT                      = 194\n\tSYS_SETRLIMIT                      = 195\n\tSYS_GETDIRENTRIES                  = 196\n\tSYS_MMAP                           = 197\n\tSYS_LSEEK                          = 199\n\tSYS_TRUNCATE                       = 200\n\tSYS_FTRUNCATE                      = 201\n\tSYS_SYSCTL                         = 202\n\tSYS_MLOCK                          = 203\n\tSYS_MUNLOCK                        = 204\n\tSYS_UNDELETE                       = 205\n\tSYS_OPEN_DPROTECTED_NP             = 216\n\tSYS_GETATTRLIST                    = 220\n\tSYS_SETATTRLIST                    = 221\n\tSYS_GETDIRENTRIESATTR              = 222\n\tSYS_EXCHANGEDATA                   = 223\n\tSYS_SEARCHFS                       = 225\n\tSYS_DELETE                         = 226\n\tSYS_COPYFILE                       = 227\n\tSYS_FGETATTRLIST                   = 228\n\tSYS_FSETATTRLIST                   = 229\n\tSYS_POLL                           = 230\n\tSYS_WATCHEVENT                     = 231\n\tSYS_WAITEVENT                      = 232\n\tSYS_MODWATCH                       = 233\n\tSYS_GETXATTR                       = 234\n\tSYS_FGETXATTR                      = 235\n\tSYS_SETXATTR                       = 236\n\tSYS_FSETXATTR                      = 237\n\tSYS_REMOVEXATTR                    = 238\n\tSYS_FREMOVEXATTR                   = 239\n\tSYS_LISTXATTR                      = 240\n\tSYS_FLISTXATTR                     = 241\n\tSYS_FSCTL                          = 242\n\tSYS_INITGROUPS                     = 243\n\tSYS_POSIX_SPAWN                    = 244\n\tSYS_FFSCTL                         = 245\n\tSYS_NFSCLNT                        = 247\n\tSYS_FHOPEN                         = 248\n\tSYS_MINHERIT                       = 250\n\tSYS_SEMSYS                         = 251\n\tSYS_MSGSYS                         = 252\n\tSYS_SHMSYS                         = 253\n\tSYS_SEMCTL                         = 254\n\tSYS_SEMGET                         = 255\n\tSYS_SEMOP                          = 256\n\tSYS_MSGCTL                         = 258\n\tSYS_MSGGET                         = 259\n\tSYS_MSGSND                         = 260\n\tSYS_MSGRCV                         = 261\n\tSYS_SHMAT                          = 262\n\tSYS_SHMCTL                         = 263\n\tSYS_SHMDT                          = 264\n\tSYS_SHMGET                         = 265\n\tSYS_SHM_OPEN                       = 266\n\tSYS_SHM_UNLINK                     = 267\n\tSYS_SEM_OPEN                       = 268\n\tSYS_SEM_CLOSE                      = 269\n\tSYS_SEM_UNLINK                     = 270\n\tSYS_SEM_WAIT                       = 271\n\tSYS_SEM_TRYWAIT                    = 272\n\tSYS_SEM_POST                       = 273\n\tSYS_SYSCTLBYNAME                   = 274\n\tSYS_OPEN_EXTENDED                  = 277\n\tSYS_UMASK_EXTENDED                 = 278\n\tSYS_STAT_EXTENDED                  = 279\n\tSYS_LSTAT_EXTENDED                 = 280\n\tSYS_FSTAT_EXTENDED                 = 281\n\tSYS_CHMOD_EXTENDED                 = 282\n\tSYS_FCHMOD_EXTENDED                = 283\n\tSYS_ACCESS_EXTENDED                = 284\n\tSYS_SETTID                         = 285\n\tSYS_GETTID                         = 286\n\tSYS_SETSGROUPS                     = 287\n\tSYS_GETSGROUPS                     = 288\n\tSYS_SETWGROUPS                     = 289\n\tSYS_GETWGROUPS                     = 290\n\tSYS_MKFIFO_EXTENDED                = 291\n\tSYS_MKDIR_EXTENDED                 = 292\n\tSYS_IDENTITYSVC                    = 293\n\tSYS_SHARED_REGION_CHECK_NP         = 294\n\tSYS_VM_PRESSURE_MONITOR            = 296\n\tSYS_PSYNCH_RW_LONGRDLOCK           = 297\n\tSYS_PSYNCH_RW_YIELDWRLOCK          = 298\n\tSYS_PSYNCH_RW_DOWNGRADE            = 299\n\tSYS_PSYNCH_RW_UPGRADE              = 300\n\tSYS_PSYNCH_MUTEXWAIT               = 301\n\tSYS_PSYNCH_MUTEXDROP               = 302\n\tSYS_PSYNCH_CVBROAD                 = 303\n\tSYS_PSYNCH_CVSIGNAL                = 304\n\tSYS_PSYNCH_CVWAIT                  = 305\n\tSYS_PSYNCH_RW_RDLOCK               = 306\n\tSYS_PSYNCH_RW_WRLOCK               = 307\n\tSYS_PSYNCH_RW_UNLOCK               = 308\n\tSYS_PSYNCH_RW_UNLOCK2              = 309\n\tSYS_GETSID                         = 310\n\tSYS_SETTID_WITH_PID                = 311\n\tSYS_PSYNCH_CVCLRPREPOST            = 312\n\tSYS_AIO_FSYNC                      = 313\n\tSYS_AIO_RETURN                     = 314\n\tSYS_AIO_SUSPEND                    = 315\n\tSYS_AIO_CANCEL                     = 316\n\tSYS_AIO_ERROR                      = 317\n\tSYS_AIO_READ                       = 318\n\tSYS_AIO_WRITE                      = 319\n\tSYS_LIO_LISTIO                     = 320\n\tSYS_IOPOLICYSYS                    = 322\n\tSYS_PROCESS_POLICY                 = 323\n\tSYS_MLOCKALL                       = 324\n\tSYS_MUNLOCKALL                     = 325\n\tSYS_ISSETUGID                      = 327\n\tSYS___PTHREAD_KILL                 = 328\n\tSYS___PTHREAD_SIGMASK              = 329\n\tSYS___SIGWAIT                      = 330\n\tSYS___DISABLE_THREADSIGNAL         = 331\n\tSYS___PTHREAD_MARKCANCEL           = 332\n\tSYS___PTHREAD_CANCELED             = 333\n\tSYS___SEMWAIT_SIGNAL               = 334\n\tSYS_PROC_INFO                      = 336\n\tSYS_SENDFILE                       = 337\n\tSYS_STAT64                         = 338\n\tSYS_FSTAT64                        = 339\n\tSYS_LSTAT64                        = 340\n\tSYS_STAT64_EXTENDED                = 341\n\tSYS_LSTAT64_EXTENDED               = 342\n\tSYS_FSTAT64_EXTENDED               = 343\n\tSYS_GETDIRENTRIES64                = 344\n\tSYS_STATFS64                       = 345\n\tSYS_FSTATFS64                      = 346\n\tSYS_GETFSSTAT64                    = 347\n\tSYS___PTHREAD_CHDIR                = 348\n\tSYS___PTHREAD_FCHDIR               = 349\n\tSYS_AUDIT                          = 350\n\tSYS_AUDITON                        = 351\n\tSYS_GETAUID                        = 353\n\tSYS_SETAUID                        = 354\n\tSYS_GETAUDIT_ADDR                  = 357\n\tSYS_SETAUDIT_ADDR                  = 358\n\tSYS_AUDITCTL                       = 359\n\tSYS_BSDTHREAD_CREATE               = 360\n\tSYS_BSDTHREAD_TERMINATE            = 361\n\tSYS_KQUEUE                         = 362\n\tSYS_KEVENT                         = 363\n\tSYS_LCHOWN                         = 364\n\tSYS_BSDTHREAD_REGISTER             = 366\n\tSYS_WORKQ_OPEN                     = 367\n\tSYS_WORKQ_KERNRETURN               = 368\n\tSYS_KEVENT64                       = 369\n\tSYS___OLD_SEMWAIT_SIGNAL           = 370\n\tSYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371\n\tSYS_THREAD_SELFID                  = 372\n\tSYS_LEDGER                         = 373\n\tSYS_KEVENT_QOS                     = 374\n\tSYS_KEVENT_ID                      = 375\n\tSYS___MAC_EXECVE                   = 380\n\tSYS___MAC_SYSCALL                  = 381\n\tSYS___MAC_GET_FILE                 = 382\n\tSYS___MAC_SET_FILE                 = 383\n\tSYS___MAC_GET_LINK                 = 384\n\tSYS___MAC_SET_LINK                 = 385\n\tSYS___MAC_GET_PROC                 = 386\n\tSYS___MAC_SET_PROC                 = 387\n\tSYS___MAC_GET_FD                   = 388\n\tSYS___MAC_SET_FD                   = 389\n\tSYS___MAC_GET_PID                  = 390\n\tSYS_PSELECT                        = 394\n\tSYS_PSELECT_NOCANCEL               = 395\n\tSYS_READ_NOCANCEL                  = 396\n\tSYS_WRITE_NOCANCEL                 = 397\n\tSYS_OPEN_NOCANCEL                  = 398\n\tSYS_CLOSE_NOCANCEL                 = 399\n\tSYS_WAIT4_NOCANCEL                 = 400\n\tSYS_RECVMSG_NOCANCEL               = 401\n\tSYS_SENDMSG_NOCANCEL               = 402\n\tSYS_RECVFROM_NOCANCEL              = 403\n\tSYS_ACCEPT_NOCANCEL                = 404\n\tSYS_MSYNC_NOCANCEL                 = 405\n\tSYS_FCNTL_NOCANCEL                 = 406\n\tSYS_SELECT_NOCANCEL                = 407\n\tSYS_FSYNC_NOCANCEL                 = 408\n\tSYS_CONNECT_NOCANCEL               = 409\n\tSYS_SIGSUSPEND_NOCANCEL            = 410\n\tSYS_READV_NOCANCEL                 = 411\n\tSYS_WRITEV_NOCANCEL                = 412\n\tSYS_SENDTO_NOCANCEL                = 413\n\tSYS_PREAD_NOCANCEL                 = 414\n\tSYS_PWRITE_NOCANCEL                = 415\n\tSYS_WAITID_NOCANCEL                = 416\n\tSYS_POLL_NOCANCEL                  = 417\n\tSYS_MSGSND_NOCANCEL                = 418\n\tSYS_MSGRCV_NOCANCEL                = 419\n\tSYS_SEM_WAIT_NOCANCEL              = 420\n\tSYS_AIO_SUSPEND_NOCANCEL           = 421\n\tSYS___SIGWAIT_NOCANCEL             = 422\n\tSYS___SEMWAIT_SIGNAL_NOCANCEL      = 423\n\tSYS___MAC_MOUNT                    = 424\n\tSYS___MAC_GET_MOUNT                = 425\n\tSYS___MAC_GETFSSTAT                = 426\n\tSYS_FSGETPATH                      = 427\n\tSYS_AUDIT_SESSION_SELF             = 428\n\tSYS_AUDIT_SESSION_JOIN             = 429\n\tSYS_FILEPORT_MAKEPORT              = 430\n\tSYS_FILEPORT_MAKEFD                = 431\n\tSYS_AUDIT_SESSION_PORT             = 432\n\tSYS_PID_SUSPEND                    = 433\n\tSYS_PID_RESUME                     = 434\n\tSYS_PID_HIBERNATE                  = 435\n\tSYS_PID_SHUTDOWN_SOCKETS           = 436\n\tSYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438\n\tSYS_KAS_INFO                       = 439\n\tSYS_MEMORYSTATUS_CONTROL           = 440\n\tSYS_GUARDED_OPEN_NP                = 441\n\tSYS_GUARDED_CLOSE_NP               = 442\n\tSYS_GUARDED_KQUEUE_NP              = 443\n\tSYS_CHANGE_FDGUARD_NP              = 444\n\tSYS_USRCTL                         = 445\n\tSYS_PROC_RLIMIT_CONTROL            = 446\n\tSYS_CONNECTX                       = 447\n\tSYS_DISCONNECTX                    = 448\n\tSYS_PEELOFF                        = 449\n\tSYS_SOCKET_DELEGATE                = 450\n\tSYS_TELEMETRY                      = 451\n\tSYS_PROC_UUID_POLICY               = 452\n\tSYS_MEMORYSTATUS_GET_LEVEL         = 453\n\tSYS_SYSTEM_OVERRIDE                = 454\n\tSYS_VFS_PURGE                      = 455\n\tSYS_SFI_CTL                        = 456\n\tSYS_SFI_PIDCTL                     = 457\n\tSYS_COALITION                      = 458\n\tSYS_COALITION_INFO                 = 459\n\tSYS_NECP_MATCH_POLICY              = 460\n\tSYS_GETATTRLISTBULK                = 461\n\tSYS_CLONEFILEAT                    = 462\n\tSYS_OPENAT                         = 463\n\tSYS_OPENAT_NOCANCEL                = 464\n\tSYS_RENAMEAT                       = 465\n\tSYS_FACCESSAT                      = 466\n\tSYS_FCHMODAT                       = 467\n\tSYS_FCHOWNAT                       = 468\n\tSYS_FSTATAT                        = 469\n\tSYS_FSTATAT64                      = 470\n\tSYS_LINKAT                         = 471\n\tSYS_UNLINKAT                       = 472\n\tSYS_READLINKAT                     = 473\n\tSYS_SYMLINKAT                      = 474\n\tSYS_MKDIRAT                        = 475\n\tSYS_GETATTRLISTAT                  = 476\n\tSYS_PROC_TRACE_LOG                 = 477\n\tSYS_BSDTHREAD_CTL                  = 478\n\tSYS_OPENBYID_NP                    = 479\n\tSYS_RECVMSG_X                      = 480\n\tSYS_SENDMSG_X                      = 481\n\tSYS_THREAD_SELFUSAGE               = 482\n\tSYS_CSRCTL                         = 483\n\tSYS_GUARDED_OPEN_DPROTECTED_NP     = 484\n\tSYS_GUARDED_WRITE_NP               = 485\n\tSYS_GUARDED_PWRITE_NP              = 486\n\tSYS_GUARDED_WRITEV_NP              = 487\n\tSYS_RENAMEATX_NP                   = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_NETAGENT_TRIGGER               = 490\n\tSYS_STACK_SNAPSHOT_WITH_CONFIG     = 491\n\tSYS_MICROSTACKSHOT                 = 492\n\tSYS_GRAB_PGO_DATA                  = 493\n\tSYS_PERSONA                        = 494\n\tSYS_WORK_INTERVAL_CTL              = 499\n\tSYS_GETENTROPY                     = 500\n\tSYS_NECP_OPEN                      = 501\n\tSYS_NECP_CLIENT_ACTION             = 502\n\tSYS___NEXUS_OPEN                   = 503\n\tSYS___NEXUS_REGISTER               = 504\n\tSYS___NEXUS_DEREGISTER             = 505\n\tSYS___NEXUS_CREATE                 = 506\n\tSYS___NEXUS_DESTROY                = 507\n\tSYS___NEXUS_GET_OPT                = 508\n\tSYS___NEXUS_SET_OPT                = 509\n\tSYS___CHANNEL_OPEN                 = 510\n\tSYS___CHANNEL_GET_INFO             = 511\n\tSYS___CHANNEL_SYNC                 = 512\n\tSYS___CHANNEL_GET_OPT              = 513\n\tSYS___CHANNEL_SET_OPT              = 514\n\tSYS_ULOCK_WAIT                     = 515\n\tSYS_ULOCK_WAKE                     = 516\n\tSYS_FCLONEFILEAT                   = 517\n\tSYS_FS_SNAPSHOT                    = 518\n\tSYS_TERMINATE_WITH_PAYLOAD         = 520\n\tSYS_ABORT_WITH_PAYLOAD             = 521\n\tSYS_NECP_SESSION_OPEN              = 522\n\tSYS_NECP_SESSION_ACTION            = 523\n\tSYS_SETATTRLISTAT                  = 524\n\tSYS_NET_QOS_GUIDELINE              = 525\n\tSYS_FMOUNT                         = 526\n\tSYS_NTP_ADJTIME                    = 527\n\tSYS_NTP_GETTIME                    = 528\n\tSYS_OS_FAULT_WITH_PAYLOAD          = 529\n\tSYS_KQUEUE_WORKLOOP_CTL            = 530\n\tSYS___MACH_BRIDGE_REMOTE_TIME      = 531\n\tSYS_MAXSYSCALL                     = 532\n\tSYS_INVALID                        = 63\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go",
    "content": "// go run mksysnum.go https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && dragonfly\n\npackage unix\n\nconst (\n\tSYS_EXIT  = 1 // { void exit(int rval); }\n\tSYS_FORK  = 2 // { int fork(void); }\n\tSYS_READ  = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN  = 5 // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE = 6 // { int close(int fd); }\n\tSYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int\n\t// SYS_NOSYS = 8;  // { int nosys(void); } __nosys nosys_args int\n\tSYS_LINK                   = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                 = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                  = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                 = 13  // { int fchdir(int fd); }\n\tSYS_MKNOD                  = 14  // { int mknod(char *path, int mode, int dev); }\n\tSYS_CHMOD                  = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                  = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_OBREAK                 = 17  // { int obreak(char *nsize); } break obreak_args int\n\tSYS_GETFSSTAT              = 18  // { int getfsstat(struct statfs *buf, long bufsize, int flags); }\n\tSYS_GETPID                 = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                  = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                 = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                 = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                 = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                = 28  // { int sendmsg(int s, caddr_t msg, int flags); }\n\tSYS_RECVFROM               = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); }\n\tSYS_ACCEPT                 = 30  // { int accept(int s, caddr_t name, int *anamelen); }\n\tSYS_GETPEERNAME            = 31  // { int getpeername(int fdes, caddr_t asa, int *alen); }\n\tSYS_GETSOCKNAME            = 32  // { int getsockname(int fdes, caddr_t asa, int *alen); }\n\tSYS_ACCESS                 = 33  // { int access(char *path, int flags); }\n\tSYS_CHFLAGS                = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS               = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                   = 36  // { int sync(void); }\n\tSYS_KILL                   = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                = 39  // { pid_t getppid(void); }\n\tSYS_DUP                    = 41  // { int dup(int fd); }\n\tSYS_PIPE                   = 42  // { int pipe(void); }\n\tSYS_GETEGID                = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                 = 44  // { int profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE                 = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                 = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN               = 49  // { int getlogin(char *namebuf, size_t namelen); }\n\tSYS_SETLOGIN               = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                   = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK            = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                  = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                 = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                 = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK               = 58  // { int readlink(char *path, char *buf, int count); }\n\tSYS_EXECVE                 = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                  = 60  // { int umask(int newmask); } umask umask_args int\n\tSYS_CHROOT                 = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                  = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                  = 66  // { pid_t vfork(void); }\n\tSYS_SBRK                   = 69  // { caddr_t sbrk(size_t incr); }\n\tSYS_SSTK                   = 70  // { int sstk(size_t incr); }\n\tSYS_MUNMAP                 = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT               = 74  // { int mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE                = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS              = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS              = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER              = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                 = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER              = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE          = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                   = 90  // { int dup2(int from, int to); }\n\tSYS_FCNTL                  = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                 = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                  = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY            = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                 = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY            = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                   = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT             = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                 = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY           = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE              = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT             = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                  = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                 = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY           = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                 = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                 = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID               = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID               = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                 = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                  = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                 = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                 = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN               = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR             = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                  = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                  = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                 = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                 = 147 // { int setsid(void); }\n\tSYS_QUOTACTL               = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_STATFS                 = 157 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                = 158 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_GETFH                  = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                 = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_EXTPREAD               = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_EXTPWRITE              = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_NTP_ADJTIME            = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                 = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                = 183 // { int seteuid(uid_t euid); }\n\tSYS_PATHCONF               = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF              = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT              = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT              = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS_MMAP                   = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }\n\tSYS_LSEEK                  = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE               = 200 // { int truncate(char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE              = 201 // { int ftruncate(int fd, int pad, off_t length); }\n\tSYS___SYSCTL               = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                  = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE               = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                   = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS___SEMCTL               = 220 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SEMGET                 = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                  = 222 // { int semop(int semid, struct sembuf *sops, u_int nsops); }\n\tSYS_MSGCTL                 = 224 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_MSGGET                 = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                 = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                 = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                  = 228 // { caddr_t shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMCTL                 = 229 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_SHMDT                  = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                 = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME          = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME          = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES           = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP              = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_MINHERIT               = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                  = 251 // { int rfork(int flags); }\n\tSYS_OPENBSD_POLL           = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID              = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                 = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_LCHMOD                 = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_EXTPREADV              = 289 // { ssize_t extpreadv(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); }\n\tSYS_EXTPWRITEV             = 290 // { ssize_t extpwritev(int fd, const struct iovec *iovp, int iovcnt, int flags, off_t offset); }\n\tSYS_FHSTATFS               = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_FHOPEN                 = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_MODNEXT                = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                = 301 // { int modstat(int modid, struct module_stat* stat); }\n\tSYS_MODFNEXT               = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD              = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }\n\tSYS_KLDFIRSTMOD            = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                 = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID              = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID              = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN             = 314 // { int aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND            = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL             = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR              = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_AIO_READ               = 318 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE              = 319 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO             = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_YIELD                  = 321 // { int yield(void); }\n\tSYS_MLOCKALL               = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL             = 325 // { int munlockall(void); }\n\tSYS___GETCWD               = 326 // { int __getcwd(u_char *buf, u_int buflen); }\n\tSYS_SCHED_SETPARAM         = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM         = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER     = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER     = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD            = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL  = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                 = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                 = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                   = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK            = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND             = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGACTION              = 342 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGPENDING             = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGRETURN              = 344 // { int sigreturn(ucontext_t *sigcntxp); }\n\tSYS_SIGTIMEDWAIT           = 345 // { int sigtimedwait(const sigset_t *set,siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO            = 346 // { int sigwaitinfo(const sigset_t *set,siginfo_t *info); }\n\tSYS___ACL_GET_FILE         = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE         = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD           = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD           = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE      = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD        = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE    = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD      = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL             = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE       = 356 // { int extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE       = 357 // { int extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE    = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE       = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID              = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID              = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                 = 362 // { int kqueue(void); }\n\tSYS_KEVENT                 = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_KENV                   = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS               = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE               = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_VARSYM_SET             = 450 // { int varsym_set(int level, const char *name, const char *data); }\n\tSYS_VARSYM_GET             = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); }\n\tSYS_VARSYM_LIST            = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); }\n\tSYS_EXEC_SYS_REGISTER      = 465 // { int exec_sys_register(void *entry); }\n\tSYS_EXEC_SYS_UNREGISTER    = 466 // { int exec_sys_unregister(int id); }\n\tSYS_SYS_CHECKPOINT         = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); }\n\tSYS_MOUNTCTL               = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); }\n\tSYS_UMTX_SLEEP             = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); }\n\tSYS_UMTX_WAKEUP            = 470 // { int umtx_wakeup(volatile const int *ptr, int count); }\n\tSYS_JAIL_ATTACH            = 471 // { int jail_attach(int jid); }\n\tSYS_SET_TLS_AREA           = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); }\n\tSYS_GET_TLS_AREA           = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); }\n\tSYS_CLOSEFROM              = 474 // { int closefrom(int fd); }\n\tSYS_STAT                   = 475 // { int stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                  = 476 // { int fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                  = 477 // { int lstat(const char *path, struct stat *ub); }\n\tSYS_FHSTAT                 = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_GETDIRENTRIES          = 479 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }\n\tSYS_GETDENTS               = 480 // { int getdents(int fd, char *buf, size_t count); }\n\tSYS_USCHED_SET             = 481 // { int usched_set(pid_t pid, int cmd, void *data, int bytes); }\n\tSYS_EXTACCEPT              = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); }\n\tSYS_EXTCONNECT             = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); }\n\tSYS_MCONTROL               = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); }\n\tSYS_VMSPACE_CREATE         = 486 // { int vmspace_create(void *id, int type, void *data); }\n\tSYS_VMSPACE_DESTROY        = 487 // { int vmspace_destroy(void *id); }\n\tSYS_VMSPACE_CTL            = 488 // { int vmspace_ctl(void *id, int cmd, \t\tstruct trapframe *tframe,\tstruct vextframe *vframe); }\n\tSYS_VMSPACE_MMAP           = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, int prot, int flags, int fd, off_t offset); }\n\tSYS_VMSPACE_MUNMAP         = 490 // { int vmspace_munmap(void *id, void *addr,\tsize_t len); }\n\tSYS_VMSPACE_MCONTROL       = 491 // { int vmspace_mcontrol(void *id, void *addr, \tsize_t len, int behav, off_t value); }\n\tSYS_VMSPACE_PREAD          = 492 // { ssize_t vmspace_pread(void *id, void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_VMSPACE_PWRITE         = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_EXTEXIT                = 494 // { void extexit(int how, int status, void *addr); }\n\tSYS_LWP_CREATE             = 495 // { int lwp_create(struct lwp_params *params); }\n\tSYS_LWP_GETTID             = 496 // { lwpid_t lwp_gettid(void); }\n\tSYS_LWP_KILL               = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); }\n\tSYS_LWP_RTPRIO             = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); }\n\tSYS_PSELECT                = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts,    const sigset_t *sigmask); }\n\tSYS_STATVFS                = 500 // { int statvfs(const char *path, struct statvfs *buf); }\n\tSYS_FSTATVFS               = 501 // { int fstatvfs(int fd, struct statvfs *buf); }\n\tSYS_FHSTATVFS              = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); }\n\tSYS_GETVFSSTAT             = 503 // { int getvfsstat(struct statfs *buf,          struct statvfs *vbuf, long vbufsize, int flags); }\n\tSYS_OPENAT                 = 504 // { int openat(int fd, char *path, int flags, int mode); }\n\tSYS_FSTATAT                = 505 // { int fstatat(int fd, char *path, \tstruct stat *sb, int flags); }\n\tSYS_FCHMODAT               = 506 // { int fchmodat(int fd, char *path, int mode, int flags); }\n\tSYS_FCHOWNAT               = 507 // { int fchownat(int fd, char *path, int uid, int gid, int flags); }\n\tSYS_UNLINKAT               = 508 // { int unlinkat(int fd, char *path, int flags); }\n\tSYS_FACCESSAT              = 509 // { int faccessat(int fd, char *path, int amode, int flags); }\n\tSYS_MQ_OPEN                = 510 // { mqd_t mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); }\n\tSYS_MQ_CLOSE               = 511 // { int mq_close(mqd_t mqdes); }\n\tSYS_MQ_UNLINK              = 512 // { int mq_unlink(const char *name); }\n\tSYS_MQ_GETATTR             = 513 // { int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); }\n\tSYS_MQ_SETATTR             = 514 // { int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); }\n\tSYS_MQ_NOTIFY              = 515 // { int mq_notify(mqd_t mqdes, const struct sigevent *notification); }\n\tSYS_MQ_SEND                = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); }\n\tSYS_MQ_RECEIVE             = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); }\n\tSYS_MQ_TIMEDSEND           = 518 // { int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }\n\tSYS_MQ_TIMEDRECEIVE        = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }\n\tSYS_IOPRIO_SET             = 520 // { int ioprio_set(int which, int who, int prio); }\n\tSYS_IOPRIO_GET             = 521 // { int ioprio_get(int which, int who); }\n\tSYS_CHROOT_KERNEL          = 522 // { int chroot_kernel(char *path); }\n\tSYS_RENAMEAT               = 523 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_MKDIRAT                = 524 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT               = 525 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_MKNODAT                = 526 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_READLINKAT             = 527 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT              = 528 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_SWAPOFF                = 529 // { int swapoff(char *name); }\n\tSYS_VQUOTACTL              = 530 // { int vquotactl(const char *path, struct plistref *pref); }\n\tSYS_LINKAT                 = 531 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flags); }\n\tSYS_EACCESS                = 532 // { int eaccess(char *path, int flags); }\n\tSYS_LPATHCONF              = 533 // { int lpathconf(char *path, int name); }\n\tSYS_VMM_GUEST_CTL          = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }\n\tSYS_VMM_GUEST_SYNC_ADDR    = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); }\n\tSYS_PROCCTL                = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); }\n\tSYS_CHFLAGSAT              = 537 // { int chflagsat(int fd, const char *path, u_long flags, int atflags);}\n\tSYS_PIPE2                  = 538 // { int pipe2(int *fildes, int flags); }\n\tSYS_UTIMENSAT              = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); }\n\tSYS_FUTIMENS               = 540 // { int futimens(int fd, const struct timespec *ts); }\n\tSYS_ACCEPT4                = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); }\n\tSYS_LWP_SETNAME            = 542 // { int lwp_setname(lwpid_t tid, const char *name); }\n\tSYS_PPOLL                  = 543 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *sigmask); }\n\tSYS_LWP_SETAFFINITY        = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); }\n\tSYS_LWP_GETAFFINITY        = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); }\n\tSYS_LWP_CREATE2            = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); }\n\tSYS_GETCPUCLOCKID          = 547 // { int getcpuclockid(pid_t pid, lwpid_t lwp_id, clockid_t *clock_id); }\n\tSYS_WAIT6                  = 548 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_LWP_GETNAME            = 549 // { int lwp_getname(lwpid_t tid, char *name, size_t len); }\n\tSYS_GETRANDOM              = 550 // { ssize_t getrandom(void *buf, size_t len, unsigned flags); }\n\tSYS___REALPATH             = 551 // { ssize_t __realpath(const char *path, char *buf, size_t len); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go",
    "content": "// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_BREAK                    = 17  // { caddr_t break(char *nsize); }\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }\n\tSYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                    = 60  // { int umask(int newmask); }\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }\n\tSYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }\n\tSYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }\n\tSYS_FDATASYNC                = 550 // { int fdatasync(int fd); }\n\tSYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }\n\tSYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }\n\tSYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }\n\tSYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }\n\tSYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }\n\tSYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }\n\tSYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }\n\tSYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }\n\tSYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }\n\tSYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }\n\tSYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }\n\tSYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_riscv64.go",
    "content": "// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_BREAK                    = 17  // { caddr_t break(char *nsize); }\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }\n\tSYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                    = 60  // { int umask(int newmask); }\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }\n\tSYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }\n\tSYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }\n\tSYS_FDATASYNC                = 550 // { int fdatasync(int fd); }\n\tSYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }\n\tSYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }\n\tSYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }\n\tSYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }\n\tSYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }\n\tSYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }\n\tSYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }\n\tSYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }\n\tSYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }\n\tSYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }\n\tSYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }\n\tSYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/arm64/include -fsigned-char /tmp/arm64/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && linux\n\npackage unix\n\nconst (\n\tSYS_IO_SETUP                = 0\n\tSYS_IO_DESTROY              = 1\n\tSYS_IO_SUBMIT               = 2\n\tSYS_IO_CANCEL               = 3\n\tSYS_IO_GETEVENTS            = 4\n\tSYS_SETXATTR                = 5\n\tSYS_LSETXATTR               = 6\n\tSYS_FSETXATTR               = 7\n\tSYS_GETXATTR                = 8\n\tSYS_LGETXATTR               = 9\n\tSYS_FGETXATTR               = 10\n\tSYS_LISTXATTR               = 11\n\tSYS_LLISTXATTR              = 12\n\tSYS_FLISTXATTR              = 13\n\tSYS_REMOVEXATTR             = 14\n\tSYS_LREMOVEXATTR            = 15\n\tSYS_FREMOVEXATTR            = 16\n\tSYS_GETCWD                  = 17\n\tSYS_LOOKUP_DCOOKIE          = 18\n\tSYS_EVENTFD2                = 19\n\tSYS_EPOLL_CREATE1           = 20\n\tSYS_EPOLL_CTL               = 21\n\tSYS_EPOLL_PWAIT             = 22\n\tSYS_DUP                     = 23\n\tSYS_DUP3                    = 24\n\tSYS_FCNTL                   = 25\n\tSYS_INOTIFY_INIT1           = 26\n\tSYS_INOTIFY_ADD_WATCH       = 27\n\tSYS_INOTIFY_RM_WATCH        = 28\n\tSYS_IOCTL                   = 29\n\tSYS_IOPRIO_SET              = 30\n\tSYS_IOPRIO_GET              = 31\n\tSYS_FLOCK                   = 32\n\tSYS_MKNODAT                 = 33\n\tSYS_MKDIRAT                 = 34\n\tSYS_UNLINKAT                = 35\n\tSYS_SYMLINKAT               = 36\n\tSYS_LINKAT                  = 37\n\tSYS_RENAMEAT                = 38\n\tSYS_UMOUNT2                 = 39\n\tSYS_MOUNT                   = 40\n\tSYS_PIVOT_ROOT              = 41\n\tSYS_NFSSERVCTL              = 42\n\tSYS_STATFS                  = 43\n\tSYS_FSTATFS                 = 44\n\tSYS_TRUNCATE                = 45\n\tSYS_FTRUNCATE               = 46\n\tSYS_FALLOCATE               = 47\n\tSYS_FACCESSAT               = 48\n\tSYS_CHDIR                   = 49\n\tSYS_FCHDIR                  = 50\n\tSYS_CHROOT                  = 51\n\tSYS_FCHMOD                  = 52\n\tSYS_FCHMODAT                = 53\n\tSYS_FCHOWNAT                = 54\n\tSYS_FCHOWN                  = 55\n\tSYS_OPENAT                  = 56\n\tSYS_CLOSE                   = 57\n\tSYS_VHANGUP                 = 58\n\tSYS_PIPE2                   = 59\n\tSYS_QUOTACTL                = 60\n\tSYS_GETDENTS64              = 61\n\tSYS_LSEEK                   = 62\n\tSYS_READ                    = 63\n\tSYS_WRITE                   = 64\n\tSYS_READV                   = 65\n\tSYS_WRITEV                  = 66\n\tSYS_PREAD64                 = 67\n\tSYS_PWRITE64                = 68\n\tSYS_PREADV                  = 69\n\tSYS_PWRITEV                 = 70\n\tSYS_SENDFILE                = 71\n\tSYS_PSELECT6                = 72\n\tSYS_PPOLL                   = 73\n\tSYS_SIGNALFD4               = 74\n\tSYS_VMSPLICE                = 75\n\tSYS_SPLICE                  = 76\n\tSYS_TEE                     = 77\n\tSYS_READLINKAT              = 78\n\tSYS_NEWFSTATAT              = 79\n\tSYS_FSTAT                   = 80\n\tSYS_SYNC                    = 81\n\tSYS_FSYNC                   = 82\n\tSYS_FDATASYNC               = 83\n\tSYS_SYNC_FILE_RANGE         = 84\n\tSYS_TIMERFD_CREATE          = 85\n\tSYS_TIMERFD_SETTIME         = 86\n\tSYS_TIMERFD_GETTIME         = 87\n\tSYS_UTIMENSAT               = 88\n\tSYS_ACCT                    = 89\n\tSYS_CAPGET                  = 90\n\tSYS_CAPSET                  = 91\n\tSYS_PERSONALITY             = 92\n\tSYS_EXIT                    = 93\n\tSYS_EXIT_GROUP              = 94\n\tSYS_WAITID                  = 95\n\tSYS_SET_TID_ADDRESS         = 96\n\tSYS_UNSHARE                 = 97\n\tSYS_FUTEX                   = 98\n\tSYS_SET_ROBUST_LIST         = 99\n\tSYS_GET_ROBUST_LIST         = 100\n\tSYS_NANOSLEEP               = 101\n\tSYS_GETITIMER               = 102\n\tSYS_SETITIMER               = 103\n\tSYS_KEXEC_LOAD              = 104\n\tSYS_INIT_MODULE             = 105\n\tSYS_DELETE_MODULE           = 106\n\tSYS_TIMER_CREATE            = 107\n\tSYS_TIMER_GETTIME           = 108\n\tSYS_TIMER_GETOVERRUN        = 109\n\tSYS_TIMER_SETTIME           = 110\n\tSYS_TIMER_DELETE            = 111\n\tSYS_CLOCK_SETTIME           = 112\n\tSYS_CLOCK_GETTIME           = 113\n\tSYS_CLOCK_GETRES            = 114\n\tSYS_CLOCK_NANOSLEEP         = 115\n\tSYS_SYSLOG                  = 116\n\tSYS_PTRACE                  = 117\n\tSYS_SCHED_SETPARAM          = 118\n\tSYS_SCHED_SETSCHEDULER      = 119\n\tSYS_SCHED_GETSCHEDULER      = 120\n\tSYS_SCHED_GETPARAM          = 121\n\tSYS_SCHED_SETAFFINITY       = 122\n\tSYS_SCHED_GETAFFINITY       = 123\n\tSYS_SCHED_YIELD             = 124\n\tSYS_SCHED_GET_PRIORITY_MAX  = 125\n\tSYS_SCHED_GET_PRIORITY_MIN  = 126\n\tSYS_SCHED_RR_GET_INTERVAL   = 127\n\tSYS_RESTART_SYSCALL         = 128\n\tSYS_KILL                    = 129\n\tSYS_TKILL                   = 130\n\tSYS_TGKILL                  = 131\n\tSYS_SIGALTSTACK             = 132\n\tSYS_RT_SIGSUSPEND           = 133\n\tSYS_RT_SIGACTION            = 134\n\tSYS_RT_SIGPROCMASK          = 135\n\tSYS_RT_SIGPENDING           = 136\n\tSYS_RT_SIGTIMEDWAIT         = 137\n\tSYS_RT_SIGQUEUEINFO         = 138\n\tSYS_RT_SIGRETURN            = 139\n\tSYS_SETPRIORITY             = 140\n\tSYS_GETPRIORITY             = 141\n\tSYS_REBOOT                  = 142\n\tSYS_SETREGID                = 143\n\tSYS_SETGID                  = 144\n\tSYS_SETREUID                = 145\n\tSYS_SETUID                  = 146\n\tSYS_SETRESUID               = 147\n\tSYS_GETRESUID               = 148\n\tSYS_SETRESGID               = 149\n\tSYS_GETRESGID               = 150\n\tSYS_SETFSUID                = 151\n\tSYS_SETFSGID                = 152\n\tSYS_TIMES                   = 153\n\tSYS_SETPGID                 = 154\n\tSYS_GETPGID                 = 155\n\tSYS_GETSID                  = 156\n\tSYS_SETSID                  = 157\n\tSYS_GETGROUPS               = 158\n\tSYS_SETGROUPS               = 159\n\tSYS_UNAME                   = 160\n\tSYS_SETHOSTNAME             = 161\n\tSYS_SETDOMAINNAME           = 162\n\tSYS_GETRLIMIT               = 163\n\tSYS_SETRLIMIT               = 164\n\tSYS_GETRUSAGE               = 165\n\tSYS_UMASK                   = 166\n\tSYS_PRCTL                   = 167\n\tSYS_GETCPU                  = 168\n\tSYS_GETTIMEOFDAY            = 169\n\tSYS_SETTIMEOFDAY            = 170\n\tSYS_ADJTIMEX                = 171\n\tSYS_GETPID                  = 172\n\tSYS_GETPPID                 = 173\n\tSYS_GETUID                  = 174\n\tSYS_GETEUID                 = 175\n\tSYS_GETGID                  = 176\n\tSYS_GETEGID                 = 177\n\tSYS_GETTID                  = 178\n\tSYS_SYSINFO                 = 179\n\tSYS_MQ_OPEN                 = 180\n\tSYS_MQ_UNLINK               = 181\n\tSYS_MQ_TIMEDSEND            = 182\n\tSYS_MQ_TIMEDRECEIVE         = 183\n\tSYS_MQ_NOTIFY               = 184\n\tSYS_MQ_GETSETATTR           = 185\n\tSYS_MSGGET                  = 186\n\tSYS_MSGCTL                  = 187\n\tSYS_MSGRCV                  = 188\n\tSYS_MSGSND                  = 189\n\tSYS_SEMGET                  = 190\n\tSYS_SEMCTL                  = 191\n\tSYS_SEMTIMEDOP              = 192\n\tSYS_SEMOP                   = 193\n\tSYS_SHMGET                  = 194\n\tSYS_SHMCTL                  = 195\n\tSYS_SHMAT                   = 196\n\tSYS_SHMDT                   = 197\n\tSYS_SOCKET                  = 198\n\tSYS_SOCKETPAIR              = 199\n\tSYS_BIND                    = 200\n\tSYS_LISTEN                  = 201\n\tSYS_ACCEPT                  = 202\n\tSYS_CONNECT                 = 203\n\tSYS_GETSOCKNAME             = 204\n\tSYS_GETPEERNAME             = 205\n\tSYS_SENDTO                  = 206\n\tSYS_RECVFROM                = 207\n\tSYS_SETSOCKOPT              = 208\n\tSYS_GETSOCKOPT              = 209\n\tSYS_SHUTDOWN                = 210\n\tSYS_SENDMSG                 = 211\n\tSYS_RECVMSG                 = 212\n\tSYS_READAHEAD               = 213\n\tSYS_BRK                     = 214\n\tSYS_MUNMAP                  = 215\n\tSYS_MREMAP                  = 216\n\tSYS_ADD_KEY                 = 217\n\tSYS_REQUEST_KEY             = 218\n\tSYS_KEYCTL                  = 219\n\tSYS_CLONE                   = 220\n\tSYS_EXECVE                  = 221\n\tSYS_MMAP                    = 222\n\tSYS_FADVISE64               = 223\n\tSYS_SWAPON                  = 224\n\tSYS_SWAPOFF                 = 225\n\tSYS_MPROTECT                = 226\n\tSYS_MSYNC                   = 227\n\tSYS_MLOCK                   = 228\n\tSYS_MUNLOCK                 = 229\n\tSYS_MLOCKALL                = 230\n\tSYS_MUNLOCKALL              = 231\n\tSYS_MINCORE                 = 232\n\tSYS_MADVISE                 = 233\n\tSYS_REMAP_FILE_PAGES        = 234\n\tSYS_MBIND                   = 235\n\tSYS_GET_MEMPOLICY           = 236\n\tSYS_SET_MEMPOLICY           = 237\n\tSYS_MIGRATE_PAGES           = 238\n\tSYS_MOVE_PAGES              = 239\n\tSYS_RT_TGSIGQUEUEINFO       = 240\n\tSYS_PERF_EVENT_OPEN         = 241\n\tSYS_ACCEPT4                 = 242\n\tSYS_RECVMMSG                = 243\n\tSYS_ARCH_SPECIFIC_SYSCALL   = 244\n\tSYS_WAIT4                   = 260\n\tSYS_PRLIMIT64               = 261\n\tSYS_FANOTIFY_INIT           = 262\n\tSYS_FANOTIFY_MARK           = 263\n\tSYS_NAME_TO_HANDLE_AT       = 264\n\tSYS_OPEN_BY_HANDLE_AT       = 265\n\tSYS_CLOCK_ADJTIME           = 266\n\tSYS_SYNCFS                  = 267\n\tSYS_SETNS                   = 268\n\tSYS_SENDMMSG                = 269\n\tSYS_PROCESS_VM_READV        = 270\n\tSYS_PROCESS_VM_WRITEV       = 271\n\tSYS_KCMP                    = 272\n\tSYS_FINIT_MODULE            = 273\n\tSYS_SCHED_SETATTR           = 274\n\tSYS_SCHED_GETATTR           = 275\n\tSYS_RENAMEAT2               = 276\n\tSYS_SECCOMP                 = 277\n\tSYS_GETRANDOM               = 278\n\tSYS_MEMFD_CREATE            = 279\n\tSYS_BPF                     = 280\n\tSYS_EXECVEAT                = 281\n\tSYS_USERFAULTFD             = 282\n\tSYS_MEMBARRIER              = 283\n\tSYS_MLOCK2                  = 284\n\tSYS_COPY_FILE_RANGE         = 285\n\tSYS_PREADV2                 = 286\n\tSYS_PWRITEV2                = 287\n\tSYS_PKEY_MPROTECT           = 288\n\tSYS_PKEY_ALLOC              = 289\n\tSYS_PKEY_FREE               = 290\n\tSYS_STATX                   = 291\n\tSYS_IO_PGETEVENTS           = 292\n\tSYS_RSEQ                    = 293\n\tSYS_KEXEC_FILE_LOAD         = 294\n\tSYS_PIDFD_SEND_SIGNAL       = 424\n\tSYS_IO_URING_SETUP          = 425\n\tSYS_IO_URING_ENTER          = 426\n\tSYS_IO_URING_REGISTER       = 427\n\tSYS_OPEN_TREE               = 428\n\tSYS_MOVE_MOUNT              = 429\n\tSYS_FSOPEN                  = 430\n\tSYS_FSCONFIG                = 431\n\tSYS_FSMOUNT                 = 432\n\tSYS_FSPICK                  = 433\n\tSYS_PIDFD_OPEN              = 434\n\tSYS_CLONE3                  = 435\n\tSYS_CLOSE_RANGE             = 436\n\tSYS_OPENAT2                 = 437\n\tSYS_PIDFD_GETFD             = 438\n\tSYS_FACCESSAT2              = 439\n\tSYS_PROCESS_MADVISE         = 440\n\tSYS_EPOLL_PWAIT2            = 441\n\tSYS_MOUNT_SETATTR           = 442\n\tSYS_QUOTACTL_FD             = 443\n\tSYS_LANDLOCK_CREATE_RULESET = 444\n\tSYS_LANDLOCK_ADD_RULE       = 445\n\tSYS_LANDLOCK_RESTRICT_SELF  = 446\n\tSYS_MEMFD_SECRET            = 447\n\tSYS_PROCESS_MRELEASE        = 448\n\tSYS_FUTEX_WAITV             = 449\n\tSYS_SET_MEMPOLICY_HOME_NODE = 450\n\tSYS_CACHESTAT               = 451\n\tSYS_FCHMODAT2               = 452\n\tSYS_MAP_SHADOW_STACK        = 453\n\tSYS_FUTEX_WAKE              = 454\n\tSYS_FUTEX_WAIT              = 455\n\tSYS_FUTEX_REQUEUE           = 456\n\tSYS_STATMOUNT               = 457\n\tSYS_LISTMOUNT               = 458\n\tSYS_LSM_GET_SELF_ATTR       = 459\n\tSYS_LSM_SET_SELF_ATTR       = 460\n\tSYS_LSM_LIST_MODULES        = 461\n\tSYS_MSEAL                   = 462\n\tSYS_SETXATTRAT              = 463\n\tSYS_GETXATTRAT              = 464\n\tSYS_LISTXATTRAT             = 465\n\tSYS_REMOVEXATTRAT           = 466\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/mipsle/include /tmp/mipsle/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mipsle && linux\n\npackage unix\n\nconst (\n\tSYS_SYSCALL                      = 4000\n\tSYS_EXIT                         = 4001\n\tSYS_FORK                         = 4002\n\tSYS_READ                         = 4003\n\tSYS_WRITE                        = 4004\n\tSYS_OPEN                         = 4005\n\tSYS_CLOSE                        = 4006\n\tSYS_WAITPID                      = 4007\n\tSYS_CREAT                        = 4008\n\tSYS_LINK                         = 4009\n\tSYS_UNLINK                       = 4010\n\tSYS_EXECVE                       = 4011\n\tSYS_CHDIR                        = 4012\n\tSYS_TIME                         = 4013\n\tSYS_MKNOD                        = 4014\n\tSYS_CHMOD                        = 4015\n\tSYS_LCHOWN                       = 4016\n\tSYS_BREAK                        = 4017\n\tSYS_UNUSED18                     = 4018\n\tSYS_LSEEK                        = 4019\n\tSYS_GETPID                       = 4020\n\tSYS_MOUNT                        = 4021\n\tSYS_UMOUNT                       = 4022\n\tSYS_SETUID                       = 4023\n\tSYS_GETUID                       = 4024\n\tSYS_STIME                        = 4025\n\tSYS_PTRACE                       = 4026\n\tSYS_ALARM                        = 4027\n\tSYS_UNUSED28                     = 4028\n\tSYS_PAUSE                        = 4029\n\tSYS_UTIME                        = 4030\n\tSYS_STTY                         = 4031\n\tSYS_GTTY                         = 4032\n\tSYS_ACCESS                       = 4033\n\tSYS_NICE                         = 4034\n\tSYS_FTIME                        = 4035\n\tSYS_SYNC                         = 4036\n\tSYS_KILL                         = 4037\n\tSYS_RENAME                       = 4038\n\tSYS_MKDIR                        = 4039\n\tSYS_RMDIR                        = 4040\n\tSYS_DUP                          = 4041\n\tSYS_PIPE                         = 4042\n\tSYS_TIMES                        = 4043\n\tSYS_PROF                         = 4044\n\tSYS_BRK                          = 4045\n\tSYS_SETGID                       = 4046\n\tSYS_GETGID                       = 4047\n\tSYS_SIGNAL                       = 4048\n\tSYS_GETEUID                      = 4049\n\tSYS_GETEGID                      = 4050\n\tSYS_ACCT                         = 4051\n\tSYS_UMOUNT2                      = 4052\n\tSYS_LOCK                         = 4053\n\tSYS_IOCTL                        = 4054\n\tSYS_FCNTL                        = 4055\n\tSYS_MPX                          = 4056\n\tSYS_SETPGID                      = 4057\n\tSYS_ULIMIT                       = 4058\n\tSYS_UNUSED59                     = 4059\n\tSYS_UMASK                        = 4060\n\tSYS_CHROOT                       = 4061\n\tSYS_USTAT                        = 4062\n\tSYS_DUP2                         = 4063\n\tSYS_GETPPID                      = 4064\n\tSYS_GETPGRP                      = 4065\n\tSYS_SETSID                       = 4066\n\tSYS_SIGACTION                    = 4067\n\tSYS_SGETMASK                     = 4068\n\tSYS_SSETMASK                     = 4069\n\tSYS_SETREUID                     = 4070\n\tSYS_SETREGID                     = 4071\n\tSYS_SIGSUSPEND                   = 4072\n\tSYS_SIGPENDING                   = 4073\n\tSYS_SETHOSTNAME                  = 4074\n\tSYS_SETRLIMIT                    = 4075\n\tSYS_GETRLIMIT                    = 4076\n\tSYS_GETRUSAGE                    = 4077\n\tSYS_GETTIMEOFDAY                 = 4078\n\tSYS_SETTIMEOFDAY                 = 4079\n\tSYS_GETGROUPS                    = 4080\n\tSYS_SETGROUPS                    = 4081\n\tSYS_RESERVED82                   = 4082\n\tSYS_SYMLINK                      = 4083\n\tSYS_UNUSED84                     = 4084\n\tSYS_READLINK                     = 4085\n\tSYS_USELIB                       = 4086\n\tSYS_SWAPON                       = 4087\n\tSYS_REBOOT                       = 4088\n\tSYS_READDIR                      = 4089\n\tSYS_MMAP                         = 4090\n\tSYS_MUNMAP                       = 4091\n\tSYS_TRUNCATE                     = 4092\n\tSYS_FTRUNCATE                    = 4093\n\tSYS_FCHMOD                       = 4094\n\tSYS_FCHOWN                       = 4095\n\tSYS_GETPRIORITY                  = 4096\n\tSYS_SETPRIORITY                  = 4097\n\tSYS_PROFIL                       = 4098\n\tSYS_STATFS                       = 4099\n\tSYS_FSTATFS                      = 4100\n\tSYS_IOPERM                       = 4101\n\tSYS_SOCKETCALL                   = 4102\n\tSYS_SYSLOG                       = 4103\n\tSYS_SETITIMER                    = 4104\n\tSYS_GETITIMER                    = 4105\n\tSYS_STAT                         = 4106\n\tSYS_LSTAT                        = 4107\n\tSYS_FSTAT                        = 4108\n\tSYS_UNUSED109                    = 4109\n\tSYS_IOPL                         = 4110\n\tSYS_VHANGUP                      = 4111\n\tSYS_IDLE                         = 4112\n\tSYS_VM86                         = 4113\n\tSYS_WAIT4                        = 4114\n\tSYS_SWAPOFF                      = 4115\n\tSYS_SYSINFO                      = 4116\n\tSYS_IPC                          = 4117\n\tSYS_FSYNC                        = 4118\n\tSYS_SIGRETURN                    = 4119\n\tSYS_CLONE                        = 4120\n\tSYS_SETDOMAINNAME                = 4121\n\tSYS_UNAME                        = 4122\n\tSYS_MODIFY_LDT                   = 4123\n\tSYS_ADJTIMEX                     = 4124\n\tSYS_MPROTECT                     = 4125\n\tSYS_SIGPROCMASK                  = 4126\n\tSYS_CREATE_MODULE                = 4127\n\tSYS_INIT_MODULE                  = 4128\n\tSYS_DELETE_MODULE                = 4129\n\tSYS_GET_KERNEL_SYMS              = 4130\n\tSYS_QUOTACTL                     = 4131\n\tSYS_GETPGID                      = 4132\n\tSYS_FCHDIR                       = 4133\n\tSYS_BDFLUSH                      = 4134\n\tSYS_SYSFS                        = 4135\n\tSYS_PERSONALITY                  = 4136\n\tSYS_AFS_SYSCALL                  = 4137\n\tSYS_SETFSUID                     = 4138\n\tSYS_SETFSGID                     = 4139\n\tSYS__LLSEEK                      = 4140\n\tSYS_GETDENTS                     = 4141\n\tSYS__NEWSELECT                   = 4142\n\tSYS_FLOCK                        = 4143\n\tSYS_MSYNC                        = 4144\n\tSYS_READV                        = 4145\n\tSYS_WRITEV                       = 4146\n\tSYS_CACHEFLUSH                   = 4147\n\tSYS_CACHECTL                     = 4148\n\tSYS_SYSMIPS                      = 4149\n\tSYS_UNUSED150                    = 4150\n\tSYS_GETSID                       = 4151\n\tSYS_FDATASYNC                    = 4152\n\tSYS__SYSCTL                      = 4153\n\tSYS_MLOCK                        = 4154\n\tSYS_MUNLOCK                      = 4155\n\tSYS_MLOCKALL                     = 4156\n\tSYS_MUNLOCKALL                   = 4157\n\tSYS_SCHED_SETPARAM               = 4158\n\tSYS_SCHED_GETPARAM               = 4159\n\tSYS_SCHED_SETSCHEDULER           = 4160\n\tSYS_SCHED_GETSCHEDULER           = 4161\n\tSYS_SCHED_YIELD                  = 4162\n\tSYS_SCHED_GET_PRIORITY_MAX       = 4163\n\tSYS_SCHED_GET_PRIORITY_MIN       = 4164\n\tSYS_SCHED_RR_GET_INTERVAL        = 4165\n\tSYS_NANOSLEEP                    = 4166\n\tSYS_MREMAP                       = 4167\n\tSYS_ACCEPT                       = 4168\n\tSYS_BIND                         = 4169\n\tSYS_CONNECT                      = 4170\n\tSYS_GETPEERNAME                  = 4171\n\tSYS_GETSOCKNAME                  = 4172\n\tSYS_GETSOCKOPT                   = 4173\n\tSYS_LISTEN                       = 4174\n\tSYS_RECV                         = 4175\n\tSYS_RECVFROM                     = 4176\n\tSYS_RECVMSG                      = 4177\n\tSYS_SEND                         = 4178\n\tSYS_SENDMSG                      = 4179\n\tSYS_SENDTO                       = 4180\n\tSYS_SETSOCKOPT                   = 4181\n\tSYS_SHUTDOWN                     = 4182\n\tSYS_SOCKET                       = 4183\n\tSYS_SOCKETPAIR                   = 4184\n\tSYS_SETRESUID                    = 4185\n\tSYS_GETRESUID                    = 4186\n\tSYS_QUERY_MODULE                 = 4187\n\tSYS_POLL                         = 4188\n\tSYS_NFSSERVCTL                   = 4189\n\tSYS_SETRESGID                    = 4190\n\tSYS_GETRESGID                    = 4191\n\tSYS_PRCTL                        = 4192\n\tSYS_RT_SIGRETURN                 = 4193\n\tSYS_RT_SIGACTION                 = 4194\n\tSYS_RT_SIGPROCMASK               = 4195\n\tSYS_RT_SIGPENDING                = 4196\n\tSYS_RT_SIGTIMEDWAIT              = 4197\n\tSYS_RT_SIGQUEUEINFO              = 4198\n\tSYS_RT_SIGSUSPEND                = 4199\n\tSYS_PREAD64                      = 4200\n\tSYS_PWRITE64                     = 4201\n\tSYS_CHOWN                        = 4202\n\tSYS_GETCWD                       = 4203\n\tSYS_CAPGET                       = 4204\n\tSYS_CAPSET                       = 4205\n\tSYS_SIGALTSTACK                  = 4206\n\tSYS_SENDFILE                     = 4207\n\tSYS_GETPMSG                      = 4208\n\tSYS_PUTPMSG                      = 4209\n\tSYS_MMAP2                        = 4210\n\tSYS_TRUNCATE64                   = 4211\n\tSYS_FTRUNCATE64                  = 4212\n\tSYS_STAT64                       = 4213\n\tSYS_LSTAT64                      = 4214\n\tSYS_FSTAT64                      = 4215\n\tSYS_PIVOT_ROOT                   = 4216\n\tSYS_MINCORE                      = 4217\n\tSYS_MADVISE                      = 4218\n\tSYS_GETDENTS64                   = 4219\n\tSYS_FCNTL64                      = 4220\n\tSYS_RESERVED221                  = 4221\n\tSYS_GETTID                       = 4222\n\tSYS_READAHEAD                    = 4223\n\tSYS_SETXATTR                     = 4224\n\tSYS_LSETXATTR                    = 4225\n\tSYS_FSETXATTR                    = 4226\n\tSYS_GETXATTR                     = 4227\n\tSYS_LGETXATTR                    = 4228\n\tSYS_FGETXATTR                    = 4229\n\tSYS_LISTXATTR                    = 4230\n\tSYS_LLISTXATTR                   = 4231\n\tSYS_FLISTXATTR                   = 4232\n\tSYS_REMOVEXATTR                  = 4233\n\tSYS_LREMOVEXATTR                 = 4234\n\tSYS_FREMOVEXATTR                 = 4235\n\tSYS_TKILL                        = 4236\n\tSYS_SENDFILE64                   = 4237\n\tSYS_FUTEX                        = 4238\n\tSYS_SCHED_SETAFFINITY            = 4239\n\tSYS_SCHED_GETAFFINITY            = 4240\n\tSYS_IO_SETUP                     = 4241\n\tSYS_IO_DESTROY                   = 4242\n\tSYS_IO_GETEVENTS                 = 4243\n\tSYS_IO_SUBMIT                    = 4244\n\tSYS_IO_CANCEL                    = 4245\n\tSYS_EXIT_GROUP                   = 4246\n\tSYS_LOOKUP_DCOOKIE               = 4247\n\tSYS_EPOLL_CREATE                 = 4248\n\tSYS_EPOLL_CTL                    = 4249\n\tSYS_EPOLL_WAIT                   = 4250\n\tSYS_REMAP_FILE_PAGES             = 4251\n\tSYS_SET_TID_ADDRESS              = 4252\n\tSYS_RESTART_SYSCALL              = 4253\n\tSYS_FADVISE64                    = 4254\n\tSYS_STATFS64                     = 4255\n\tSYS_FSTATFS64                    = 4256\n\tSYS_TIMER_CREATE                 = 4257\n\tSYS_TIMER_SETTIME                = 4258\n\tSYS_TIMER_GETTIME                = 4259\n\tSYS_TIMER_GETOVERRUN             = 4260\n\tSYS_TIMER_DELETE                 = 4261\n\tSYS_CLOCK_SETTIME                = 4262\n\tSYS_CLOCK_GETTIME                = 4263\n\tSYS_CLOCK_GETRES                 = 4264\n\tSYS_CLOCK_NANOSLEEP              = 4265\n\tSYS_TGKILL                       = 4266\n\tSYS_UTIMES                       = 4267\n\tSYS_MBIND                        = 4268\n\tSYS_GET_MEMPOLICY                = 4269\n\tSYS_SET_MEMPOLICY                = 4270\n\tSYS_MQ_OPEN                      = 4271\n\tSYS_MQ_UNLINK                    = 4272\n\tSYS_MQ_TIMEDSEND                 = 4273\n\tSYS_MQ_TIMEDRECEIVE              = 4274\n\tSYS_MQ_NOTIFY                    = 4275\n\tSYS_MQ_GETSETATTR                = 4276\n\tSYS_VSERVER                      = 4277\n\tSYS_WAITID                       = 4278\n\tSYS_ADD_KEY                      = 4280\n\tSYS_REQUEST_KEY                  = 4281\n\tSYS_KEYCTL                       = 4282\n\tSYS_SET_THREAD_AREA              = 4283\n\tSYS_INOTIFY_INIT                 = 4284\n\tSYS_INOTIFY_ADD_WATCH            = 4285\n\tSYS_INOTIFY_RM_WATCH             = 4286\n\tSYS_MIGRATE_PAGES                = 4287\n\tSYS_OPENAT                       = 4288\n\tSYS_MKDIRAT                      = 4289\n\tSYS_MKNODAT                      = 4290\n\tSYS_FCHOWNAT                     = 4291\n\tSYS_FUTIMESAT                    = 4292\n\tSYS_FSTATAT64                    = 4293\n\tSYS_UNLINKAT                     = 4294\n\tSYS_RENAMEAT                     = 4295\n\tSYS_LINKAT                       = 4296\n\tSYS_SYMLINKAT                    = 4297\n\tSYS_READLINKAT                   = 4298\n\tSYS_FCHMODAT                     = 4299\n\tSYS_FACCESSAT                    = 4300\n\tSYS_PSELECT6                     = 4301\n\tSYS_PPOLL                        = 4302\n\tSYS_UNSHARE                      = 4303\n\tSYS_SPLICE                       = 4304\n\tSYS_SYNC_FILE_RANGE              = 4305\n\tSYS_TEE                          = 4306\n\tSYS_VMSPLICE                     = 4307\n\tSYS_MOVE_PAGES                   = 4308\n\tSYS_SET_ROBUST_LIST              = 4309\n\tSYS_GET_ROBUST_LIST              = 4310\n\tSYS_KEXEC_LOAD                   = 4311\n\tSYS_GETCPU                       = 4312\n\tSYS_EPOLL_PWAIT                  = 4313\n\tSYS_IOPRIO_SET                   = 4314\n\tSYS_IOPRIO_GET                   = 4315\n\tSYS_UTIMENSAT                    = 4316\n\tSYS_SIGNALFD                     = 4317\n\tSYS_TIMERFD                      = 4318\n\tSYS_EVENTFD                      = 4319\n\tSYS_FALLOCATE                    = 4320\n\tSYS_TIMERFD_CREATE               = 4321\n\tSYS_TIMERFD_GETTIME              = 4322\n\tSYS_TIMERFD_SETTIME              = 4323\n\tSYS_SIGNALFD4                    = 4324\n\tSYS_EVENTFD2                     = 4325\n\tSYS_EPOLL_CREATE1                = 4326\n\tSYS_DUP3                         = 4327\n\tSYS_PIPE2                        = 4328\n\tSYS_INOTIFY_INIT1                = 4329\n\tSYS_PREADV                       = 4330\n\tSYS_PWRITEV                      = 4331\n\tSYS_RT_TGSIGQUEUEINFO            = 4332\n\tSYS_PERF_EVENT_OPEN              = 4333\n\tSYS_ACCEPT4                      = 4334\n\tSYS_RECVMMSG                     = 4335\n\tSYS_FANOTIFY_INIT                = 4336\n\tSYS_FANOTIFY_MARK                = 4337\n\tSYS_PRLIMIT64                    = 4338\n\tSYS_NAME_TO_HANDLE_AT            = 4339\n\tSYS_OPEN_BY_HANDLE_AT            = 4340\n\tSYS_CLOCK_ADJTIME                = 4341\n\tSYS_SYNCFS                       = 4342\n\tSYS_SENDMMSG                     = 4343\n\tSYS_SETNS                        = 4344\n\tSYS_PROCESS_VM_READV             = 4345\n\tSYS_PROCESS_VM_WRITEV            = 4346\n\tSYS_KCMP                         = 4347\n\tSYS_FINIT_MODULE                 = 4348\n\tSYS_SCHED_SETATTR                = 4349\n\tSYS_SCHED_GETATTR                = 4350\n\tSYS_RENAMEAT2                    = 4351\n\tSYS_SECCOMP                      = 4352\n\tSYS_GETRANDOM                    = 4353\n\tSYS_MEMFD_CREATE                 = 4354\n\tSYS_BPF                          = 4355\n\tSYS_EXECVEAT                     = 4356\n\tSYS_USERFAULTFD                  = 4357\n\tSYS_MEMBARRIER                   = 4358\n\tSYS_MLOCK2                       = 4359\n\tSYS_COPY_FILE_RANGE              = 4360\n\tSYS_PREADV2                      = 4361\n\tSYS_PWRITEV2                     = 4362\n\tSYS_PKEY_MPROTECT                = 4363\n\tSYS_PKEY_ALLOC                   = 4364\n\tSYS_PKEY_FREE                    = 4365\n\tSYS_STATX                        = 4366\n\tSYS_RSEQ                         = 4367\n\tSYS_IO_PGETEVENTS                = 4368\n\tSYS_SEMGET                       = 4393\n\tSYS_SEMCTL                       = 4394\n\tSYS_SHMGET                       = 4395\n\tSYS_SHMCTL                       = 4396\n\tSYS_SHMAT                        = 4397\n\tSYS_SHMDT                        = 4398\n\tSYS_MSGGET                       = 4399\n\tSYS_MSGSND                       = 4400\n\tSYS_MSGRCV                       = 4401\n\tSYS_MSGCTL                       = 4402\n\tSYS_CLOCK_GETTIME64              = 4403\n\tSYS_CLOCK_SETTIME64              = 4404\n\tSYS_CLOCK_ADJTIME64              = 4405\n\tSYS_CLOCK_GETRES_TIME64          = 4406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 4407\n\tSYS_TIMER_GETTIME64              = 4408\n\tSYS_TIMER_SETTIME64              = 4409\n\tSYS_TIMERFD_GETTIME64            = 4410\n\tSYS_TIMERFD_SETTIME64            = 4411\n\tSYS_UTIMENSAT_TIME64             = 4412\n\tSYS_PSELECT6_TIME64              = 4413\n\tSYS_PPOLL_TIME64                 = 4414\n\tSYS_IO_PGETEVENTS_TIME64         = 4416\n\tSYS_RECVMMSG_TIME64              = 4417\n\tSYS_MQ_TIMEDSEND_TIME64          = 4418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 4419\n\tSYS_SEMTIMEDOP_TIME64            = 4420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 4421\n\tSYS_FUTEX_TIME64                 = 4422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423\n\tSYS_PIDFD_SEND_SIGNAL            = 4424\n\tSYS_IO_URING_SETUP               = 4425\n\tSYS_IO_URING_ENTER               = 4426\n\tSYS_IO_URING_REGISTER            = 4427\n\tSYS_OPEN_TREE                    = 4428\n\tSYS_MOVE_MOUNT                   = 4429\n\tSYS_FSOPEN                       = 4430\n\tSYS_FSCONFIG                     = 4431\n\tSYS_FSMOUNT                      = 4432\n\tSYS_FSPICK                       = 4433\n\tSYS_PIDFD_OPEN                   = 4434\n\tSYS_CLONE3                       = 4435\n\tSYS_CLOSE_RANGE                  = 4436\n\tSYS_OPENAT2                      = 4437\n\tSYS_PIDFD_GETFD                  = 4438\n\tSYS_FACCESSAT2                   = 4439\n\tSYS_PROCESS_MADVISE              = 4440\n\tSYS_EPOLL_PWAIT2                 = 4441\n\tSYS_MOUNT_SETATTR                = 4442\n\tSYS_QUOTACTL_FD                  = 4443\n\tSYS_LANDLOCK_CREATE_RULESET      = 4444\n\tSYS_LANDLOCK_ADD_RULE            = 4445\n\tSYS_LANDLOCK_RESTRICT_SELF       = 4446\n\tSYS_PROCESS_MRELEASE             = 4448\n\tSYS_FUTEX_WAITV                  = 4449\n\tSYS_SET_MEMPOLICY_HOME_NODE      = 4450\n\tSYS_CACHESTAT                    = 4451\n\tSYS_FCHMODAT2                    = 4452\n\tSYS_MAP_SHADOW_STACK             = 4453\n\tSYS_FUTEX_WAKE                   = 4454\n\tSYS_FUTEX_WAIT                   = 4455\n\tSYS_FUTEX_REQUEUE                = 4456\n\tSYS_STATMOUNT                    = 4457\n\tSYS_LISTMOUNT                    = 4458\n\tSYS_LSM_GET_SELF_ATTR            = 4459\n\tSYS_LSM_SET_SELF_ATTR            = 4460\n\tSYS_LSM_LIST_MODULES             = 4461\n\tSYS_MSEAL                        = 4462\n\tSYS_SETXATTRAT                   = 4463\n\tSYS_GETXATTRAT                   = 4464\n\tSYS_LISTXATTRAT                  = 4465\n\tSYS_REMOVEXATTRAT                = 4466\n)\n"
  }
]